From 260a11c92fef150ef1f113007f4d8943b2e36b2b Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Wed, 17 Sep 2025 23:38:04 -0400 Subject: [PATCH 1/9] add artifacts --- .../artifact/ProtocolFeeHelper.json | 710 ++++++++++++++++++ .../build-info/ProtocolFeeHelper.json | 1 + 2 files changed, 711 insertions(+) create mode 100644 v3/tasks/20250919-v3-protocol-fee-helper-v2/artifact/ProtocolFeeHelper.json create mode 100644 v3/tasks/20250919-v3-protocol-fee-helper-v2/build-info/ProtocolFeeHelper.json diff --git a/v3/tasks/20250919-v3-protocol-fee-helper-v2/artifact/ProtocolFeeHelper.json b/v3/tasks/20250919-v3-protocol-fee-helper-v2/artifact/ProtocolFeeHelper.json new file mode 100644 index 000000000..7c076b3d0 --- /dev/null +++ b/v3/tasks/20250919-v3-protocol-fee-helper-v2/artifact/ProtocolFeeHelper.json @@ -0,0 +1,710 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ProtocolFeeHelper", + "sourceName": "contracts/ProtocolFeeHelper.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "poolSetId", + "type": "uint256" + } + ], + "name": "IndexOutOfBounds", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "poolSetId", + "type": "uint256" + } + ], + "name": "InvalidPoolSetId", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidPoolSetManager", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "poolSetId", + "type": "uint256" + } + ], + "name": "PoolAlreadyInSet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "poolSetId", + "type": "uint256" + } + ], + "name": "PoolNotInSet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolNotRegistered", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "poolSetManager", + "type": "address" + } + ], + "name": "PoolSetManagerNotUnique", + "type": "error" + }, + { + "inputs": [], + "name": "SenderIsNotPoolSetManager", + "type": "error" + }, + { + "inputs": [], + "name": "SenderNotAllowed", + "type": "error" + }, + { + "inputs": [], + "name": "VaultNotSet", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "poolSetId", + "type": "uint256" + } + ], + "name": "PoolAddedToSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "poolSetId", + "type": "uint256" + } + ], + "name": "PoolRemovedFromSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "poolSetId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "initialManager", + "type": "address" + } + ], + "name": "PoolSetCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "poolSetId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "manager", + "type": "address" + } + ], + "name": "PoolSetDestroyed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "poolSetId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "oldManager", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newManager", + "type": "address" + } + ], + "name": "PoolSetOwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "poolSetId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "newPools", + "type": "address[]" + } + ], + "name": "addPoolsToSet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialManager", + "type": "address" + }, + { + "internalType": "address[]", + "name": "newPools", + "type": "address[]" + } + ], + "name": "createPoolSet", + "outputs": [ + { + "internalType": "uint256", + "name": "poolSetId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialManager", + "type": "address" + } + ], + "name": "createPoolSet", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "poolSetId", + "type": "uint256" + } + ], + "name": "destroyPoolSet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "forceTransferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "poolSetId", + "type": "uint256" + } + ], + "name": "getAllPoolsInSet", + "outputs": [ + { + "internalType": "address[]", + "name": "pools", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "poolSetId", + "type": "uint256" + } + ], + "name": "getManagerForPoolSet", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNextPoolSetId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "poolSetId", + "type": "uint256" + } + ], + "name": "getPoolCountForSet", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolSetIdForCaller", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "manager", + "type": "address" + } + ], + "name": "getPoolSetIdForManager", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "poolSetId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "from", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "to", + "type": "uint256" + } + ], + "name": "getPoolsInSet", + "outputs": [ + { + "internalType": "address[]", + "name": "pools", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "poolSetId", + "type": "uint256" + } + ], + "name": "isPoolInSet", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "poolSetId", + "type": "uint256" + } + ], + "name": "isValidPoolSetId", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "poolSetId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "pools", + "type": "address[]" + } + ], + "name": "removePoolsFromSet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolSwapFeePercentage", + "type": "uint256" + } + ], + "name": "setProtocolSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolYieldFeePercentage", + "type": "uint256" + } + ], + "name": "setProtocolYieldFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newManager", + "type": "address" + } + ], + "name": "transferPoolSetOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "vault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x60c03461011e57601f611b4d38819003918201601f19168301916001600160401b0383118484101761012257808492604094855283398101031261011e5780516001600160a01b03918282169081830361011e576020015183811680910361011e57801561010b5760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100fc5760a0526001600255611a1690816101378239608051816112ee015260a05181818161025401528181610386015281816106c501528181610d0d015281816116e601526118bf0152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60406080815260049081361015610014575f80fd5b5f915f358060e01c908163182551da1461105c578163255dae411461101c57816325c427ed14610fd95781632da55a1d14610f115781633700f98714610e5d5781633e035f9b14610c8557816362d5346214610c54578163715018a614610bcf57816379ba509714610b6b5781637c1ec46014610a1f578163851c1bb3146109d65781638c60ebd0146108905781638da5cb5b1461085d57816394fc4058146107dd578163a89b11281461073a57508063aaabadc514610672578063abaa335614610599578063c482e8221461057a578063ce998aba14610556578063e30c397814610521578063e909c19b146104e3578063ebf3a8d01461034c578063f167a1e61461030b578063f2fde38b1461027c578063fbfa77cf146102275763fd267f391461013f575f80fd5b8291346102235780600319360112610223576101596110c4565b61016a816101656114eb565b611630565b73ffffffffffffffffffffffffffffffffffffffff6101876116a3565b1692833b1561021f576101f09385928385518097819582947ffd267f390000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af190811561021657506102035750f35b61020c906110e7565b6102135780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b5050346102785781600319360112610278576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b8334610213576020600319360112610213576102966110c4565b61029e61141c565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5034610348576020600319360112610348578160209373ffffffffffffffffffffffffffffffffffffffff92358152600385522054169051908152f35b8280fd5b50346103485761035b366111fe565b61036361141c565b61036c826113b7565b80519273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692875b8681106103b5578880f35b826103c08284611282565b511688517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156104d9578d916104ac575b501561048257600590898d525261041f828b8d20611988565b15610454575090866001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b698c80a3016103aa565b878b91604493887f5a17aa8d0000000000000000000000000000000000000000000000000000000085525252fd5b508a82877f9e51bd5c00000000000000000000000000000000000000000000000000000000835252fd5b6104cc9150823d84116104d2575b6104c48183611128565b81019061139f565b5f610406565b503d6104ba565b8c513d8f823e3d90fd5b5050346102785760206003193601126102785760209061051a6105046110c4565b61050c61141c565b61051581611468565b611529565b9051908152f35b50503461027857816003193601126102785760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50346103485782600319360112610348576020928291338252845220549051908152f35b5050346102785781600319360112610278576020906002549051908152f35b50903461066e578060031936011261066e576105b36110c4565b6105bf816101656114eb565b73ffffffffffffffffffffffffffffffffffffffff6105dc6116a3565b1692833b1561066e57610645935f928385518097819582947fabaa33560000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19081156106655750610659575080f35b61066391506110e7565b005b513d5f823e3d90fd5b5f80fd5b503461066e575f60031936011261066e5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561073057926020935f93610701575b505191168152f35b610722919350843d8611610729575b61071a8183611128565b810190611373565b91846106f9565b503d610710565b83513d5f823e3d90fd5b90503461066e57602060031936011261066e5761078a6107837fffffffff0000000000000000000000000000000000000000000000000000000061077c6110c4565b93166112c3565b3390611868565b156107b65773ffffffffffffffffffffffffffffffffffffffff5f541633146107b657610663906115be565b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b50503461066e57602090602060031936011261066e57356107fd816113b7565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b828210610846576108428686610838828b0383611128565b5191829182611231565b0390f35b835487529586019560019384019390910190610820565b833461066e575f60031936011261066e5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50503461066e57606060031936011261066e57803590602435604435916108b6846113b7565b835f526005906020906005602052865f20548585119081156109cc575b81156109c1575b5061099657506108ea8385611339565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061092d61091888611169565b976109258a51998a611128565b808952611169565b01366020880137835b85811061094a578751806108428982611231565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff610974828b5f2061175f565b90549060031b1c1661098f6109898884611339565b8a611282565b5201610936565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b9050841015886108da565b80871191506108d3565b50503461066e57602060031936011261066e5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361066e5761051a6020926112c3565b50503461066e576020918260031936011261066e57813591610a3f61141c565b610a48836113b7565b825f5260058452815f208054805b610b0b575050825f5260058452815f208054905f815581610aee575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610a72575f8155600101610af8565b5f190180610b6573ffffffffffffffffffffffffffffffffffffffff610b31838661175f565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a384611774565b50610a56565b823461066e575f60031936011261066e573373ffffffffffffffffffffffffffffffffffffffff6001541603610ba457610663336115be565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b3461066e575f60031936011261066e57610be761141c565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b82843461066e57602060031936011261066e5760209135610c74816113b7565b5f5260058252805f20549051908152f35b82843461066e578060031936011261066e57610c9f6110c4565b60249260243567ffffffffffffffff811161066e57610cc4610ccd9136908401611181565b9261050c61141c565b938251610cdf575b6020858551908152f35b610cea92919261141c565b610cf3856113b7565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610d415750505050610cd5565b82610d4c8284611282565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610e53575f91610e36575b5015610e0c579060058b92835f5252610dab818b5f20611988565b15610ddf5790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610d31565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610e4d9150823d84116104d2576104c48183611128565b8c610d90565b8b513d5f823e3d90fd5b82843461066e57602060031936011261066e57610e786110c4565b91610e8283611468565b610e8a6114eb565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b82843461066e57610f21366111fe565b91610f2a61141c565b610f33826113b7565b8251925f5b848110610f4157005b73ffffffffffffffffffffffffffffffffffffffff610f608284611282565b5116845f526005602052610f7681855f20611774565b15610faa5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610f38565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b82843461066e57602060031936011261066e5760209173ffffffffffffffffffffffffffffffffffffffff61100c6110c4565b165f528252805f20549051908152f35b82843461066e57602060031936011261066e57602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b833461066e578060031936011261066e576020906110bb61107b6110c4565b602435611087816113b7565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361066e57565b67ffffffffffffffff81116110fb57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110fb57604052565b67ffffffffffffffff81116110fb5760051b60200190565b9080601f8301121561066e57602090823561119b81611169565b936111a96040519586611128565b81855260208086019260051b82010192831161066e57602001905b8282106111d2575050505090565b813573ffffffffffffffffffffffffffffffffffffffff8116810361066e5781529083019083016111c4565b90604060031983011261066e57600435916024359067ffffffffffffffff821161066e5761122e91600401611181565b90565b60209060206040818301928281528551809452019301915f5b828110611258575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161124a565b80518210156112965760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176110fb5760405251902090565b9190820391821161134657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9081602091031261066e575173ffffffffffffffffffffffffffffffffffffffff8116810361066e5790565b9081602091031261066e5751801515810361066e5790565b801580156113f2575b6113c75750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f205416156113c0565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361143c57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff1680156114c357805f52600460205260405f20546114985750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561150157565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611346576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b90815f52600560205261166c73ffffffffffffffffffffffffffffffffffffffff60405f20921680926001915f520160205260405f2054151590565b15611675575050565b7f80145d72000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa918215611754575f9261171b57505090565b9091506020813d60201161174c575b8161173760209383611128565b8101031261066e5751908116810361066e5790565b3d915061172a565b6040513d5f823e3d90fd5b8054821015611296575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f14611860575f19918281018181116113465782549084820191821161134657818103611815575b505050805480156117e8578201916117ca838361175f565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61184b611825611835938661175f565b90549060031b1c9283928661175f565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806117b2565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f5416911690811461198057604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156117545785935f9561195c575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa918215611754575f9261194657505090565b61122e9250803d106104d2576104c48183611128565b60649291955061197890853d87116107295761071a8183611128565b9490916118f1565b505050600190565b5f8281526001820160205260409020546119da57805490680100000000000000008210156110fb57826119c561183584600180960185558461175f565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220a86eee931a88d4f839c9313a069eb3f4357676a3b7e1548b9f23cf223f177aaf64736f6c634300081b0033", + "deployedBytecode": "0x60406080815260049081361015610014575f80fd5b5f915f358060e01c908163182551da1461105c578163255dae411461101c57816325c427ed14610fd95781632da55a1d14610f115781633700f98714610e5d5781633e035f9b14610c8557816362d5346214610c54578163715018a614610bcf57816379ba509714610b6b5781637c1ec46014610a1f578163851c1bb3146109d65781638c60ebd0146108905781638da5cb5b1461085d57816394fc4058146107dd578163a89b11281461073a57508063aaabadc514610672578063abaa335614610599578063c482e8221461057a578063ce998aba14610556578063e30c397814610521578063e909c19b146104e3578063ebf3a8d01461034c578063f167a1e61461030b578063f2fde38b1461027c578063fbfa77cf146102275763fd267f391461013f575f80fd5b8291346102235780600319360112610223576101596110c4565b61016a816101656114eb565b611630565b73ffffffffffffffffffffffffffffffffffffffff6101876116a3565b1692833b1561021f576101f09385928385518097819582947ffd267f390000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af190811561021657506102035750f35b61020c906110e7565b6102135780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b5050346102785781600319360112610278576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b8334610213576020600319360112610213576102966110c4565b61029e61141c565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5034610348576020600319360112610348578160209373ffffffffffffffffffffffffffffffffffffffff92358152600385522054169051908152f35b8280fd5b50346103485761035b366111fe565b61036361141c565b61036c826113b7565b80519273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692875b8681106103b5578880f35b826103c08284611282565b511688517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156104d9578d916104ac575b501561048257600590898d525261041f828b8d20611988565b15610454575090866001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b698c80a3016103aa565b878b91604493887f5a17aa8d0000000000000000000000000000000000000000000000000000000085525252fd5b508a82877f9e51bd5c00000000000000000000000000000000000000000000000000000000835252fd5b6104cc9150823d84116104d2575b6104c48183611128565b81019061139f565b5f610406565b503d6104ba565b8c513d8f823e3d90fd5b5050346102785760206003193601126102785760209061051a6105046110c4565b61050c61141c565b61051581611468565b611529565b9051908152f35b50503461027857816003193601126102785760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50346103485782600319360112610348576020928291338252845220549051908152f35b5050346102785781600319360112610278576020906002549051908152f35b50903461066e578060031936011261066e576105b36110c4565b6105bf816101656114eb565b73ffffffffffffffffffffffffffffffffffffffff6105dc6116a3565b1692833b1561066e57610645935f928385518097819582947fabaa33560000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19081156106655750610659575080f35b61066391506110e7565b005b513d5f823e3d90fd5b5f80fd5b503461066e575f60031936011261066e5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561073057926020935f93610701575b505191168152f35b610722919350843d8611610729575b61071a8183611128565b810190611373565b91846106f9565b503d610710565b83513d5f823e3d90fd5b90503461066e57602060031936011261066e5761078a6107837fffffffff0000000000000000000000000000000000000000000000000000000061077c6110c4565b93166112c3565b3390611868565b156107b65773ffffffffffffffffffffffffffffffffffffffff5f541633146107b657610663906115be565b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b50503461066e57602090602060031936011261066e57356107fd816113b7565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b828210610846576108428686610838828b0383611128565b5191829182611231565b0390f35b835487529586019560019384019390910190610820565b833461066e575f60031936011261066e5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50503461066e57606060031936011261066e57803590602435604435916108b6846113b7565b835f526005906020906005602052865f20548585119081156109cc575b81156109c1575b5061099657506108ea8385611339565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061092d61091888611169565b976109258a51998a611128565b808952611169565b01366020880137835b85811061094a578751806108428982611231565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff610974828b5f2061175f565b90549060031b1c1661098f6109898884611339565b8a611282565b5201610936565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b9050841015886108da565b80871191506108d3565b50503461066e57602060031936011261066e5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361066e5761051a6020926112c3565b50503461066e576020918260031936011261066e57813591610a3f61141c565b610a48836113b7565b825f5260058452815f208054805b610b0b575050825f5260058452815f208054905f815581610aee575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610a72575f8155600101610af8565b5f190180610b6573ffffffffffffffffffffffffffffffffffffffff610b31838661175f565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a384611774565b50610a56565b823461066e575f60031936011261066e573373ffffffffffffffffffffffffffffffffffffffff6001541603610ba457610663336115be565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b3461066e575f60031936011261066e57610be761141c565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b82843461066e57602060031936011261066e5760209135610c74816113b7565b5f5260058252805f20549051908152f35b82843461066e578060031936011261066e57610c9f6110c4565b60249260243567ffffffffffffffff811161066e57610cc4610ccd9136908401611181565b9261050c61141c565b938251610cdf575b6020858551908152f35b610cea92919261141c565b610cf3856113b7565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610d415750505050610cd5565b82610d4c8284611282565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610e53575f91610e36575b5015610e0c579060058b92835f5252610dab818b5f20611988565b15610ddf5790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610d31565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610e4d9150823d84116104d2576104c48183611128565b8c610d90565b8b513d5f823e3d90fd5b82843461066e57602060031936011261066e57610e786110c4565b91610e8283611468565b610e8a6114eb565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b82843461066e57610f21366111fe565b91610f2a61141c565b610f33826113b7565b8251925f5b848110610f4157005b73ffffffffffffffffffffffffffffffffffffffff610f608284611282565b5116845f526005602052610f7681855f20611774565b15610faa5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610f38565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b82843461066e57602060031936011261066e5760209173ffffffffffffffffffffffffffffffffffffffff61100c6110c4565b165f528252805f20549051908152f35b82843461066e57602060031936011261066e57602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b833461066e578060031936011261066e576020906110bb61107b6110c4565b602435611087816113b7565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361066e57565b67ffffffffffffffff81116110fb57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110fb57604052565b67ffffffffffffffff81116110fb5760051b60200190565b9080601f8301121561066e57602090823561119b81611169565b936111a96040519586611128565b81855260208086019260051b82010192831161066e57602001905b8282106111d2575050505090565b813573ffffffffffffffffffffffffffffffffffffffff8116810361066e5781529083019083016111c4565b90604060031983011261066e57600435916024359067ffffffffffffffff821161066e5761122e91600401611181565b90565b60209060206040818301928281528551809452019301915f5b828110611258575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161124a565b80518210156112965760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176110fb5760405251902090565b9190820391821161134657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9081602091031261066e575173ffffffffffffffffffffffffffffffffffffffff8116810361066e5790565b9081602091031261066e5751801515810361066e5790565b801580156113f2575b6113c75750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f205416156113c0565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361143c57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff1680156114c357805f52600460205260405f20546114985750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561150157565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611346576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b90815f52600560205261166c73ffffffffffffffffffffffffffffffffffffffff60405f20921680926001915f520160205260405f2054151590565b15611675575050565b7f80145d72000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa918215611754575f9261171b57505090565b9091506020813d60201161174c575b8161173760209383611128565b8101031261066e5751908116810361066e5790565b3d915061172a565b6040513d5f823e3d90fd5b8054821015611296575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f14611860575f19918281018181116113465782549084820191821161134657818103611815575b505050805480156117e8578201916117ca838361175f565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61184b611825611835938661175f565b90549060031b1c9283928661175f565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806117b2565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f5416911690811461198057604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156117545785935f9561195c575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa918215611754575f9261194657505090565b61122e9250803d106104d2576104c48183611128565b60649291955061197890853d87116107295761071a8183611128565b9490916118f1565b505050600190565b5f8281526001820160205260409020546119da57805490680100000000000000008210156110fb57826119c561183584600180960185558461175f565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220a86eee931a88d4f839c9313a069eb3f4357676a3b7e1548b9f23cf223f177aaf64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/v3/tasks/20250919-v3-protocol-fee-helper-v2/build-info/ProtocolFeeHelper.json b/v3/tasks/20250919-v3-protocol-fee-helper-v2/build-info/ProtocolFeeHelper.json new file mode 100644 index 000000000..63e4d99a4 --- /dev/null +++ b/v3/tasks/20250919-v3-protocol-fee-helper-v2/build-info/ProtocolFeeHelper.json @@ -0,0 +1 @@ +{"id":"83f286d72731568905afb713bf67dda4","_format":"hh-sol-build-info-1","solcVersion":"0.8.27","solcLongVersion":"0.8.27+commit.40a35a09","input":{"language":"Solidity","sources":{"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface for permissioned calling of external functions.\ninterface IAuthentication {\n /// @notice The sender does not have permission to call a function.\n error SenderNotAllowed();\n\n /**\n * @notice Returns the action identifier associated with the external function described by `selector`.\n * @param selector The 4-byte selector of the permissioned function\n * @return actionId The computed actionId\n */\n function getActionId(bytes4 selector) external view returns (bytes32 actionId);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice General interface for token exchange rates.\ninterface IRateProvider {\n /**\n * @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n * @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n * rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n * does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n * rates in downstream computations.\n *\n * @return rate The current token rate\n */\n function getRate() external view returns (uint256 rate);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface to retrieve the version of a deployed contract.\ninterface IVersion {\n /**\n * @notice Return arbitrary text representing the version of a contract.\n * @dev For standard Balancer contracts, returns a JSON representation of the contract version containing name,\n * version number and task ID. See real examples in the deployment repo; local tests just use plain text strings.\n *\n * @return version The version string corresponding to the current deployed contract\n */\n function version() external view returns (string memory);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Registered contracts must be one of these types.\nenum ContractType {\n OTHER, // a blank entry will have a 0-value type, and it's safest to return this in that case\n POOL_FACTORY,\n ROUTER,\n HOOK,\n ERC4626\n}\n\ninterface IBalancerContractRegistry {\n /**\n * @notice Store the state of a registered Balancer contract.\n * @dev Contracts can be deprecated, so we store an active flag indicating the status. With two flags, we can\n * differentiate between deprecated and non-existent. The same contract address can have multiple names, but\n * only one type. If a contract is legitimately multiple types (e.g., a hook that also acts as a router), set\n * the type to its \"primary\" function: hook, in this case. The \"Other\" type is intended as a catch-all for\n * things that don't find into the standard types (e.g., helper contracts).\n *\n * @param contractType The type of contract (e.g., Router or Hook)\n * @param isRegistered This flag indicates whether there is an entry for the associated address\n * @param isActive If there is an entry, this flag indicates whether it is active or deprecated\n */\n struct ContractInfo {\n ContractType contractType;\n bool isRegistered;\n bool isActive;\n }\n\n /**\n * @notice Emitted when a new contract is registered.\n * @param contractType The type of contract being registered\n * @param contractName The name of the contract being registered\n * @param contractAddress The address of the contract being registered\n */\n event BalancerContractRegistered(\n ContractType indexed contractType,\n string indexed contractName,\n address indexed contractAddress\n );\n\n /**\n * @notice Emitted when a new contract is deregistered (deleted).\n * @param contractType The type of contract being deregistered\n * @param contractName The name of the contract being deregistered\n * @param contractAddress The address of the contract being deregistered\n */\n event BalancerContractDeregistered(\n ContractType indexed contractType,\n string indexed contractName,\n address indexed contractAddress\n );\n\n /**\n * @notice Emitted when a registered contract is deprecated.\n * @dev This sets the `isActive` flag to false.\n * @param contractAddress The address of the contract being deprecated\n */\n event BalancerContractDeprecated(address indexed contractAddress);\n\n /**\n * @notice Emitted when an alias is added or updated.\n * @param contractAlias The alias name\n * @param contractAddress The address of the contract being deprecated\n */\n event ContractAliasUpdated(string indexed contractAlias, address indexed contractAddress);\n\n /**\n * @notice A contract has already been registered under the given address.\n * @dev Both names and addresses must be unique in the primary registration mapping. Though there are two mappings\n * to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent\n * name => address => state mapping.\n *\n * @param contractType The contract type, provided for documentation purposes\n * @param contractAddress The address of the previously registered contract\n */\n error ContractAddressAlreadyRegistered(ContractType contractType, address contractAddress);\n\n /**\n * @notice A contract has already been registered under the given name.\n * @dev Note that names must be unique; it is not possible to register two contracts with the same name and\n * different types, or the same name and different addresses.\n *\n * @param contractType The registered contract type, provided for documentation purposes\n * @param contractName The name of the previously registered contract\n */\n error ContractNameAlreadyRegistered(ContractType contractType, string contractName);\n\n /**\n * @notice The proposed contract name has already been added as an alias.\n * @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n * @param contractName The name of the previously registered contract\n * @param contractAddress The address of the previously registered contract\n */\n error ContractNameInUseAsAlias(string contractName, address contractAddress);\n\n /**\n * @notice The proposed alias has already been registered as a contract.\n * @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n * @param contractType The registered contract type, provided for documentation purposes\n * @param contractName The name of the previously registered contract (and proposed alias)\n */\n error ContractAliasInUseAsName(ContractType contractType, string contractName);\n\n /**\n * @notice Thrown when attempting to deregister a contract that was not previously registered.\n * @param contractName The name of the unregistered contract\n */\n error ContractNameNotRegistered(string contractName);\n\n /**\n * @notice An operation that requires a valid contract specified an unrecognized address.\n * @dev A contract being deprecated was never registered, or the target of an alias isn't a previously\n * registered contract.\n *\n * @param contractAddress The address of the contract that was not registered\n */\n error ContractAddressNotRegistered(address contractAddress);\n\n /**\n * @notice Contracts can only be deprecated once.\n * @param contractAddress The address of the previously deprecated contract\n */\n error ContractAlreadyDeprecated(address contractAddress);\n\n /// @notice Cannot register or deprecate contracts, or add an alias targeting the zero address.\n error ZeroContractAddress();\n\n /// @notice Cannot register (or deregister) a contract with an empty string as a name.\n error InvalidContractName();\n\n /// @notice Cannot add an empty string as an alias.\n error InvalidContractAlias();\n\n /**\n * @notice Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n * @dev This is a permissioned function, and does only basic validation of the address (non-zero) and the name\n * (not blank). Governance must ensure this is called with valid information. Emits the\n * `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or\n * already in use.\n *\n * @param contractType The type of contract being registered\n * @param contractName A text description of the contract, usually the deployed version (e.g., \"v3-pool-weighted\")\n * @param contractAddress The address of the contract\n */\n function registerBalancerContract(\n ContractType contractType,\n string memory contractName,\n address contractAddress\n ) external;\n\n /**\n * @notice Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n * @dev This is a permissioned function, and makes it possible to correct errors without complex update logic.\n * If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete\n * it, and register it again with the correct data. It must start with the name, as this is the registry key,\n * required for complete deletion.\n *\n * Note that there might still be an alias targeting the address being deleted, but accessing it will just return\n * inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to\n * the correct address.\n *\n * @param contractName The name of the contract being deprecated (cannot be an alias)\n */\n function deregisterBalancerContract(string memory contractName) external;\n\n /**\n * @notice Deprecate an official Balancer contract.\n * @dev This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the\n * address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are\n * enforced unique, so either the name or address could be specified in principle.\n *\n * @param contractAddress The address of the contract being deprecated\n */\n function deprecateBalancerContract(address contractAddress) external;\n\n /**\n * @notice Add an alias for a registered contract.\n * @dev This is a permissioned function to support querying by a contract alias. For instance, we might create a\n * `WeightedPool` alias meaning the \"latest\" version of the `WeightedPoolFactory`, so that off-chain users don't\n * need to track specific versions. Once added, an alias can also be updated to point to a different address\n * (e.g., when migrating from the v2 to the v3 weighted pool).\n *\n * @param contractAlias An alternate name that can be used to fetch a contract address\n * @param existingContract The target address of the contract alias\n */\n function addOrUpdateBalancerContractAlias(string memory contractAlias, address existingContract) external;\n\n /**\n * @notice Determine whether an address is an official contract of the specified type.\n * @param contractType The type of contract\n * @param contractAddress The address of the contract\n * @return isActive True if the given address is a registered and active contract of the specified type\n */\n function isActiveBalancerContract(\n ContractType contractType,\n address contractAddress\n ) external view returns (bool isActive);\n\n /**\n * @notice Look up a registered contract by type and name.\n * @dev This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias\n * (e.g., `WeightedPool`).\n *\n * @param contractType The type of the contract\n * @param contractName The name of the contract\n * @return contractAddress The address of the associated contract, if registered, or zero\n * @return isActive True if the contract was registered and not deprecated\n */\n function getBalancerContract(\n ContractType contractType,\n string memory contractName\n ) external view returns (address contractAddress, bool isActive);\n\n /**\n * @notice Look up complete information about a registered contract by address.\n * @param contractAddress The address of the associated contract\n * @return info ContractInfo struct corresponding to the address\n */\n function getBalancerContractInfo(address contractAddress) external view returns (ContractInfo memory info);\n\n /// @notice Returns `true` if the given address is an active contract under the ROUTER type.\n function isTrustedRouter(address router) external view returns (bool);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IProtocolFeeBurner } from \"./IProtocolFeeBurner.sol\";\n\ninterface IBalancerFeeBurner is IProtocolFeeBurner {\n /**\n * @notice Steps for the burn path.\n * @param pool The pool for the swap\n * @param tokenOut The `tokenOut` of the swap operation\n */\n struct SwapPathStep {\n address pool;\n IERC20 tokenOut;\n }\n\n /**\n * @notice Data for the burn hook.\n * @param pool The pool the fees came from (only used for documentation in the event)\n * @param sender The sender of the call. In most cases, this is the sweeper.\n * @param feeToken The token collected from the pool\n * @param feeTokenAmount The number of fee tokens collected\n * @param targetToken The desired target token (`tokenOut` of the swap)\n * @param minAmountOut The minimum `amountOut` for the swap\n * @param recipient The recipient of the swap proceeds\n * @param deadline Deadline for the burn operation (i.e., swap), after which it will revert\n */\n struct BurnHookParams {\n address pool;\n address sender;\n IERC20 feeToken;\n uint256 feeTokenAmount;\n IERC20 targetToken;\n uint256 minAmountOut;\n address recipient;\n uint256 deadline;\n }\n\n /// @notice Burn path not set for the fee token.\n error BurnPathDoesNotExist();\n\n /// @notice The last token in the path is not the same as the target token.\n error TargetTokenOutMismatch();\n\n /**\n * @notice Set the burn path for a fee token.\n * @dev This is the sequence of swaps required to convert the `feeToken` to the `targetToken`.\n * This is a permissioned function.\n *\n * @param feeToken The fee token to set the path for\n * @param steps The steps in the burn path\n */\n function setBurnPath(IERC20 feeToken, SwapPathStep[] calldata steps) external;\n\n /**\n * @notice Get the burn path for a fee token.\n * @param feeToken The fee token to get the path for\n * @return steps The steps in the burn path\n */\n function getBurnPath(IERC20 feeToken) external view returns (SwapPathStep[] memory steps);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { ICowConditionalOrder } from \"./ICowConditionalOrder.sol\";\n\n/// @notice Utility contract used to validate orders in the `CowSwapFeeBurner`.\ninterface IComposableCow {\n /**\n * @notice Data passed to ComposableCoW via the payload parameter of isValidSafeSignature.\n * @dev See github.com/curvefi/curve-burners/blob/main/contracts/burners/CowSwapBurner.vy#L66:L69.\n * @param proof Merkle Tree proof\n * @param params Conditional order params\n * @param offchainInput Off-chain input (similar to Balancer `userData`); currently unused\n */\n struct Payload {\n bytes32[] proof;\n ICowConditionalOrder.ConditionalOrderParams params;\n bytes offchainInput;\n }\n\n /**\n * @notice Construct a CoW order.\n * @param params Order parameters\n * @param dispatch If true, submit the order (always true in the CowSwapBurner)\n */\n function create(ICowConditionalOrder.ConditionalOrderParams calldata params, bool dispatch) external;\n\n function domainSeparator() external view returns (bytes32);\n\n /// @notice Delegated ERC-1271 signature validation with an enhanced context.\n function isValidSafeSignature(\n address safe,\n address sender,\n bytes32 _hash,\n bytes32 _domainSeparator,\n bytes32 typeHash,\n bytes calldata encodeData,\n bytes calldata payload\n ) external view returns (bytes4);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol":{"content":"// SPDX-License-Identifier: GPL-3.0\npragma solidity >=0.8.0 <0.9.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n// See https://github.com/curvefi/curve-burners/blob/main/contracts/burners/CowSwapBurner.vy#L44:L56\nstruct GPv2Order {\n IERC20 sellToken;\n IERC20 buyToken;\n address receiver;\n uint256 sellAmount;\n uint256 buyAmount;\n uint32 validTo;\n bytes32 appData;\n uint256 feeAmount;\n bytes32 kind;\n bool partiallyFillable;\n bytes32 sellTokenBalance;\n bytes32 buyTokenBalance;\n}\n\n/**\n * @notice Conditional Order Interface - verify a Cow order.\n * @author CoW Protocol Developers + mfw78 \n */\ninterface ICowConditionalOrder {\n /**\n * @notice This struct is used to uniquely identify a conditional order for an owner.\n * @dev H(handler || salt || staticData) **MUST** be unique for an owner.\n * @param handler The contract implementing the conditional order logic\n * @param salt Allows for multiple conditional orders of the same type and data (currently unused)\n * @param staticData Data available to ALL discrete orders created by the conditional order\n */\n struct ConditionalOrderParams {\n ICowConditionalOrder handler;\n bytes32 salt;\n bytes staticData;\n }\n\n /**\n * @notice This error is returned by the `getTradeableOrder` function if the order conditions are not met.\n * @param reason Text explaining the reason the order is invalid\n */\n error OrderNotValid(string reason);\n\n // Errors specific to polling (interpreted by the off-chain Watchtower).\n\n /**\n * @notice Polling should be retried at the next block.\n * @param reason Text description of the reason it should be retried\n */\n error PollTryNextBlock(string reason);\n\n /**\n * @notice Polling should be retried at a specific block number.\n * @param blockNumber The block number when polling should resume\n * @param reason Text description of the reason it should be retried\n */\n error PollTryAtBlock(uint256 blockNumber, string reason);\n\n /**\n * @notice Polling should be retried at a specific epoch (unix timestamp).\n * @param timestamp The unix timestamp when polling should resume\n * @param reason Text description of the reason it should be retried\n */\n error PollTryAtEpoch(uint256 timestamp, string reason);\n\n /**\n * @notice The conditional order should not be polled again (i.e., deleted).\n * @param reason Text description of the reason it should be deleted\n */\n error PollNever(string reason);\n\n /**\n * @notice Verify that a given discrete order is valid.\n * @dev Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe.\n * **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the\n * `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over\n * the order verification logic, and to allow a watchtower / user to propose a discrete order without it being\n * generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\n *\n * @param owner The owner of the order (usually a contract)\n * @param sender The `msg.sender` calling `isValidSignature`\n * @param _hash `EIP712` order digest\n * @param domainSeparator `EIP712` domain separator\n * @param ctx See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\n * @param staticInput Conditional order type-specific data known at time of creation for all discrete orders\n * @param offchainInput Type-specific data NOT known at time of creation for a specific discrete order (or zero)\n * @param order The proposed discrete order's `GPv2Order` data struct\n */\n function verify(\n address owner,\n address sender,\n bytes32 _hash,\n bytes32 domainSeparator,\n bytes32 ctx,\n bytes calldata staticInput,\n bytes calldata offchainInput,\n GPv2Order calldata order\n ) external view;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol":{"content":"// SPDX-License-Identifier: GPL-3.0\npragma solidity >=0.8.0 <0.9.0;\n\nimport { IERC165 } from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\n\nimport { ICowConditionalOrder, GPv2Order } from \"./ICowConditionalOrder.sol\";\n\n/**\n * @notice Conditional Order Generator Interface\n * @author mfw78 \n */\ninterface ICowConditionalOrderGenerator is IERC165 {\n /**\n * @dev Emitted when a new conditional order is created.\n * @param owner The address that created the conditional order\n * @param params The conditional order data\n */\n event ConditionalOrderCreated(address indexed owner, ICowConditionalOrder.ConditionalOrderParams params);\n\n /**\n * @notice Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\n * @dev **MUST** revert if the order conditions are not met.\n * @param owner The owner of the order (usually a contract)\n * @param sender The `msg.sender` of the parent `isValidSignature` call\n * @param ctx The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\n * @param staticInput Conditional order type-specific data known at time of creation for all discrete orders\n * @param offchainInput Off-chain input (similar to Balancer `userData`); currently unused\n * @return order Tradeable order for submission to the CoW Protocol API\n */\n function getTradeableOrder(\n address owner,\n address sender,\n bytes32 ctx,\n bytes calldata staticInput,\n bytes calldata offchainInput\n ) external view returns (GPv2Order memory);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC1271 } from \"@openzeppelin/contracts/interfaces/IERC1271.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { ICowConditionalOrderGenerator } from \"./ICowConditionalOrderGenerator.sol\";\nimport { ICowConditionalOrder, GPv2Order } from \"./ICowConditionalOrder.sol\";\nimport { IProtocolFeeBurner } from \"./IProtocolFeeBurner.sol\";\n\ninterface ICowSwapFeeBurner is IERC1271, IProtocolFeeBurner, ICowConditionalOrder, ICowConditionalOrderGenerator {\n enum OrderStatus {\n Nonexistent,\n Active,\n Filled,\n Failed\n }\n\n /**\n * @notice An order was retried after failing.\n * @param tokenIn The token used to identify the order\n * @param exactAmountIn The number of tokens in the order\n * @param minAmountOut The minimum number of target tokens required\n * @param deadline The deadline for the new order to be filled\n */\n event OrderRetried(IERC20 tokenIn, uint256 exactAmountIn, uint256 minAmountOut, uint256 deadline);\n\n /**\n * @notice An order was canceled after failure.\n * @param tokenIn The token used to identify the order\n * @param exactAmountIn The number of tokens in the order\n * @param receiver The account that received the tokens from the unfilled order\n */\n event OrderCanceled(IERC20 tokenIn, uint256 exactAmountIn, address receiver);\n\n /**\n * @notice The order parameters were invalid.\n * @param reason Text explaining the reason the order is invalid\n */\n error InvalidOrderParameters(string reason);\n\n /**\n * @notice Attempt to revert an order that had not failed.\n * @dev `revertOrder` should only be called when the OrderStatus is `Failed`.\n * @param actualStatus The status of the order when `revertOrder` was called\n */\n error OrderHasUnexpectedStatus(OrderStatus actualStatus);\n\n /// @notice Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\n error InterfaceIsSignatureVerifierMuxer();\n\n /**\n * @notice Get the order at the sell token.\n * @param tokenIn The token used to identify the order\n * @return orderData The order data for the given token\n */\n function getOrder(IERC20 tokenIn) external view returns (GPv2Order memory orderData);\n\n /**\n * @notice Get the status of the order at the sell token.\n * @param tokenIn The token used to identify the order\n * @return orderStatus The status of the order for the given token\n */\n function getOrderStatus(IERC20 tokenIn) external view returns (OrderStatus orderStatus);\n\n /**\n * @notice Retry an order that has not been filled yet and expired.\n * @param tokenIn The token used to identify the order\n * @param minAmountOut The minimum number of target tokens to receive (tokenOut)\n * @param deadline The deadline for the order to be filled.\n */\n function retryOrder(IERC20 tokenIn, uint256 minAmountOut, uint256 deadline) external;\n\n /**\n * @notice Return tokens from an order that has failed.\n * @dev Canceling an order prevents it from being retried.\n * @param tokenIn The token used to identify the order\n * @param receiver The address to receive the tokens from the unfilled order\n */\n function cancelOrder(IERC20 tokenIn, address receiver) external;\n\n /**\n * @notice Emergency return tokens from an order regardless of status.\n * @dev Canceling an order prevents it from being retried.\n * @param tokenIn The token used to identify the order\n * @param receiver The address to receive the from the unfilled order\n */\n function emergencyCancelOrder(IERC20 tokenIn, address receiver) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\ninterface IHyperEVMRateProvider {\n /**\n * @notice The index of the token on the Hyperliquid public API.\n * @return tokenIndex The index of the token on the Hyperliquid public API\n */\n function getTokenIndex() external view returns (uint32);\n\n /**\n * @notice The index of the pair to fetch the spot price, according to the Hyperliquid public API.\n * @dev Hypercore has an index that identifies a pair of tokens to fetch the spot price.\n * @return pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n */\n function getPairIndex() external view returns (uint32);\n\n /**\n * @notice The spot price multiplier.\n * @dev Hypercore returns the spot price with a different number of decimals for each token. So, to make this rate\n * provider compatible with the vault, we need to scale the spot price to 18 decimals using this multiplier.\n * @return spotPriceMultiplier The spot price multiplier\n */\n function getSpotPriceMultiplier() external view returns (uint256 spotPriceMultiplier);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IHyperEVMRateProvider } from \"./IHyperEVMRateProvider.sol\";\n\ninterface IHyperEVMRateProviderFactory {\n /**\n * @notice A new HyperEVM Rate Provider was created.\n * @param tokenIndex The index of the base asset on the Hyperliquid public API\n * @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n * @param rateProvider The address of the deployed rate provider\n */\n event RateProviderCreated(uint256 indexed tokenIndex, uint256 indexed pairIndex, address indexed rateProvider);\n\n /// @notice Emitted when the factory is disabled.\n event RateProviderFactoryDisabled();\n\n /**\n * @notice A rate provider already exists for the given token and pair.\n * @param tokenIndex The index of the base asset on the Hyperliquid public API\n * @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n * @param rateProvider The address of the deployed rate provider\n */\n error RateProviderAlreadyExists(uint32 tokenIndex, uint32 pairIndex, address rateProvider);\n\n /**\n * @notice The rate provider was not found for the given token and pair.\n * @param tokenIndex The index of the base asset on the Hyperliquid public API\n * @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n */\n error RateProviderNotFound(uint32 tokenIndex, uint32 pairIndex);\n\n /// @notice The factory is disabled.\n error RateProviderFactoryIsDisabled();\n\n /**\n * @notice Returns a number representing the rate provider version.\n * @return rateProviderVersion The rate provider version number\n */\n function getRateProviderVersion() external view returns (uint256 rateProviderVersion);\n\n /**\n * @notice Creates a new HyperEVM Rate Provider for the given token and pair.\n * @param tokenIndex The index of the base asset on the Hyperliquid public API\n * @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n * @return rateProvider The address of the deployed rate provider\n */\n function create(uint32 tokenIndex, uint32 pairIndex) external returns (IHyperEVMRateProvider rateProvider);\n\n /**\n * @notice Gets the rate provider for the given token and pair.\n * @dev Reverts if the rate provider was not found for the given token and pair.\n * @param tokenIndex The index of the base asset on the Hyperliquid public API\n * @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n * @return rateProvider The address of the rate provider for the given token and pair\n */\n function getRateProvider(\n uint32 tokenIndex,\n uint32 pairIndex\n ) external view returns (IHyperEVMRateProvider rateProvider);\n\n /**\n * @notice Checks whether the given rate provider was created by this factory.\n * @param rateProvider The rate provider to check\n * @return success True if the rate provider was created by this factory; false otherwise\n */\n function isRateProviderFromFactory(IHyperEVMRateProvider rateProvider) external view returns (bool success);\n\n /**\n * @notice Disables the rate provider factory.\n * @dev A disabled rate provider factory cannot create new rate providers and cannot be re-enabled. However,\n * already created rate providers are still usable. This is a permissioned function.\n */\n function disable() external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Common interface for helper functions that operate on a subset of pools.\ninterface IPoolHelperCommon {\n /**\n * @notice The owner created a new pool set.\n * @dev Pools are organized into separate sets, controlled by a manager, which can be changed independently.\n * @param poolSetId Id of the set with which the pool is associated\n * @param initialManager Address of the pool set manager\n */\n event PoolSetCreated(uint256 indexed poolSetId, address indexed initialManager);\n\n /**\n * @notice The owner destroyed a pool set.\n * @param poolSetId Id of the set with which the pool is associated\n * @param manager The address of the set's last manager\n */\n event PoolSetDestroyed(uint256 indexed poolSetId, address indexed manager);\n\n /**\n * @notice The owner added a pool to the given set.\n * @param pool Address of the pool that was added\n * @param poolSetId Id of the set with which the pool is associated\n */\n event PoolAddedToSet(address indexed pool, uint256 indexed poolSetId);\n\n /**\n * @notice The owner removed a pool from the given set.\n * @param poolSetId Id of the set with which the pool is associated\n * @param pool Address of the pool that was removed\n */\n event PoolRemovedFromSet(address indexed pool, uint256 indexed poolSetId);\n\n /**\n * @notice The current manager of a pool set transferred ownership to a new address.\n * @dev Managers can only control one pool set. Transfers to existing managers of other sets will revert.\n * @param poolSetId Id of the set with which the pool is associated\n * @param oldManager Address of the previous manager\n * @param newManager Address of the new manager\n */\n event PoolSetOwnershipTransferred(\n uint256 indexed poolSetId,\n address indexed oldManager,\n address indexed newManager\n );\n\n /**\n * @notice Cannot add a pool that is already there.\n * @param pool Address of the pool being added\n * @param poolSetId Id of the set with which the pool is associated\n */\n error PoolAlreadyInSet(address pool, uint256 poolSetId);\n\n /**\n * @notice Cannot remove a pool that was not added.\n * @param pool Address of the pool being removed\n * @param poolSetId Id of the set with which the pool is associated\n */\n error PoolNotInSet(address pool, uint256 poolSetId);\n\n /**\n * @notice Pool set id associated with an operation is invalid.\n * @dev This can mean the value is invalid, or it was never created, or it was destroyed.\n * @param poolSetId The id of the invalid set\n */\n error InvalidPoolSetId(uint256 poolSetId);\n\n /// @notice The initial manager of a pool set cannot be zero.\n error InvalidPoolSetManager();\n\n /**\n * @notice Pool set managers can only manage a single pool set.\n * @dev Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\n * @param poolSetManager Address of the manager that is already assigned to another pool set id\n */\n error PoolSetManagerNotUnique(address poolSetManager);\n\n /// @notice Permissioned operations on pools can only be performed by the pool set manager.\n error SenderIsNotPoolSetManager();\n\n /**\n * @notice An index is beyond the current bounds of the set.\n * @param poolSetId Id of the set involved in the operation\n */\n error IndexOutOfBounds(uint256 poolSetId);\n\n /***************************************************************************\n Manage Pool Sets\n ***************************************************************************/\n\n /**\n * @notice Create a new set with an initial manager, optionally initialized with a set of pools.\n * @dev The `newPools` list can be empty, in which case this will only create the set. Pools can then be\n * added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function.\n * Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the\n * initial manager address is zero or already a manager of another pool set.\n *\n * @param initialManager Address of the account authorized to perform operations on the set\n * @param newPools Set of pools to add to the set\n */\n function createPoolSet(address initialManager, address[] memory newPools) external returns (uint256 poolSetId);\n\n /**\n * @notice Create a new empty set with an initial manager.\n * @dev Convenience function to create a pool set with no initial pools. Also reverts if the initial manager\n * address is zero or already a manager of another pool set.\n *\n * @param initialManager Address of the account authorized to perform operations on the set\n */\n function createPoolSet(address initialManager) external returns (uint256 poolSetId);\n\n /**\n * @notice Simple way to remove an entire set of pools from control of the helper function.\n * @dev This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis)\n * may destroy sets, effectively removing control of any pools in the set from the associated manager.\n * Also reverts if the poolSetId is not valid.\n *\n * @param poolSetId Id of the set being destroyed\n */\n function destroyPoolSet(uint256 poolSetId) external;\n\n /**\n * @notice Transfer ownership of a pool set from the current manager to a new manager.\n * @dev This is a permissioned function. Only the current manager of a set can call this to set a new manager.\n * Since managers can only control a single set, there is no need to specify the id in the call. Note that this\n * is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this\n * contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts\n * if the new manager address is zero or already the manager of a pool set.\n *\n * @param newManager The address of the new manager\n */\n function transferPoolSetOwnership(address newManager) external;\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /**\n * @notice Add pools to the set of pools controlled by this helper contract.\n * @dev This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis)\n * may add pools to a set. Also reverts if the poolSetId is not valid.\n *\n * @param newPools List of pools to add\n * @param poolSetId Id of the set to which the new pools belong\n */\n function addPoolsToSet(uint256 poolSetId, address[] memory newPools) external;\n\n /**\n * @notice Remove pools from the set of pools controlled by this helper contract.\n * @dev This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis)\n * may remove pools from a set. Also reverts if the poolSetId is not valid.\n *\n * @param pools List of pools to remove from the set\n * @param poolSetId Id of the set to which the pools belong\n */\n function removePoolsFromSet(uint256 poolSetId, address[] memory pools) external;\n\n /***************************************************************************\n Getters \n ***************************************************************************/\n\n /**\n * @notice Get the pool set id associated with the caller.\n * @return poolSetId The numeric pool set id, or zero if the caller is not a pool set manager\n */\n function getPoolSetIdForCaller() external view returns (uint256 poolSetId);\n\n /**\n * @notice Get the pool set id associated with a given manager address.\n * @return poolSetId The numeric pool set id, or zero if the address given is not a pool set manager\n */\n function getPoolSetIdForManager(address manager) external view returns (uint256 poolSetId);\n\n /**\n * @notice Get the number of pools associated with the given set.\n * @dev Needed to support pagination in case the set is too large to process in a single transaction.\n * Reverts if the poolSetId is not valid.\n *\n * @param poolSetId Id of the set containing the pools\n * @return poolCount The current number of pools in the set\n */\n function getPoolCountForSet(uint256 poolSetId) external view returns (uint256 poolCount);\n\n /**\n * @notice Check whether a poolSetId has been created.\n * @param poolSetId Id of the set containing the pools\n * @return isValid True if the poolSetId exists\n */\n function isValidPoolSetId(uint256 poolSetId) external view returns (bool isValid);\n\n /**\n * @notice Check whether a pool is in the set of pools.\n * @dev Reverts if the poolSetId is not valid.\n * @param pool Address of the pool to check\n * @param poolSetId Id of the set containing the pools\n * @return poolInSet True if the pool is in the given set, false otherwise\n */\n function isPoolInSet(address pool, uint256 poolSetId) external view returns (bool poolInSet);\n\n /**\n * @notice Get the full set of pools from a given set.\n * @dev Reverts if the poolSetId is not valid.\n * @param poolSetId Id of the set containing the pools\n * @return pools List of pools\n */\n function getAllPoolsInSet(uint256 poolSetId) external view returns (address[] memory pools);\n\n /**\n * @notice Get a range of pools from a given set.\n * @dev Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`).\n * Reverts if the poolSetId is not valid.\n *\n * @param poolSetId Id of the set containing the pools\n * @param from Start index\n * @param to End index\n * @return pools List of pools\n */\n function getPoolsInSet(uint256 poolSetId, uint256 from, uint256 to) external view returns (address[] memory pools);\n\n /**\n * @notice Utility function to predict the next pool set id.\n * @return nextPoolSetId The pool set id that will be used on the next call of `createPoolSet`\n */\n function getNextPoolSetId() external view returns (uint256 nextPoolSetId);\n\n /**\n * @notice Get the manager address associated with a given poolSetId.\n * @param poolSetId Id of the set containing the pools\n * @return manager The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\n */\n function getManagerForPoolSet(uint256 poolSetId) external view returns (address manager);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Maintain a set of pools that can be paused from this helper contract, vs. directly from the Vault.\n * @dev Governance can add a set of pools to this contract, then grant pause permission to accounts here, which\n * allows greater granularity than setting the permission directly on the Vault.\n *\n * Note that governance must grant this contract permission to pause pools from the Vault. Unpausing is not\n * addressed here, and must still be done through the Vault.\n */\ninterface IPoolPauseHelper {\n /**\n * @notice Pause a set of pools.\n * @dev This is a permissioned function. Governance must first grant this contract permission to call `pausePool`\n * on the Vault, then grant another account permission to call `pausePools` here. Note that this is not necessarily\n * the same account that can add or remove pools from the pausable list.\n *\n * Note that there is no `unpause`. This is a helper contract designed to react quickly to emergencies. Unpausing\n * is a more deliberate action that should be performed by accounts approved by governance for this purpose, or by\n * the individual pools' pause managers.\n *\n * @param pools List of pools to pause\n */\n function pausePools(address[] memory pools) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Maintain a set of pools whose static swap fee percentages can be changed from here, vs. from the Vault.\n * @dev Governance can add a set of pools to this contract, then grant swap fee setting permission to accounts on this\n * contract, which allows greater granularity than setting the permission directly on the Vault.\n *\n * Note that governance must grant this contract permission to set swap fees from the Vault, and only pools that\n * allow governance to set fees can be added (i.e., they must not have swap managers).\n */\ninterface IPoolSwapFeeHelper {\n /**\n * @notice Cannot add a pool that has a swap manager.\n * @dev The swap manager is an exclusive role. If it is set to a non-zero value during pool registration,\n * only the swap manager can change the fee. This helper can only set fees on pools that allow governance\n * to grant this permission.\n *\n * @param pool Address of the pool being added\n */\n error PoolHasSwapManager(address pool);\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /**\n * @notice Set the static swap fee percentage on a given pool.\n * @dev This is a permissioned function. Governance must grant this contract permission to call\n * `setStaticSwapFeePercentage` on the Vault. Note that since the swap manager is an exclusive role, the swap fee\n * cannot be changed by governance if it is set, and the pool cannot be added to the set.\n *\n * @param pool The address of the pool\n * @param swapFeePercentage The new swap fee percentage\n */\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\ninterface IProtocolFeeBurner {\n /**\n * @notice A protocol fee token has been \"burned\" (i.e., swapped for the desired target token).\n * @param pool The pool on which the fee was collected (used for event tracking)\n * @param feeToken The token in which the fee was originally collected\n * @param exactFeeTokenAmountIn The number of feeTokens collected\n * @param targetToken The preferred token for fee collection (e.g., USDC)\n * @param actualTargetTokenAmountOut The number of target tokens actually received\n * @param recipient The address where the target tokens were sent\n */\n event ProtocolFeeBurned(\n address indexed pool,\n IERC20 indexed feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 indexed targetToken,\n uint256 actualTargetTokenAmountOut,\n address recipient\n );\n\n /**\n * @notice The actual amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error AmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /// @notice The swap transaction was not validated before the specified deadline timestamp.\n error SwapDeadline();\n\n /**\n * @notice Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\n * @dev Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\n * @param pool The pool the fees came from (only used for documentation in the event)\n * @param feeToken The token collected from the pool\n * @param exactFeeTokenAmountIn The number of fee tokens collected\n * @param targetToken The desired target token (token out of the swap)\n * @param minTargetTokenAmountOut The minimum amount out for the swap\n * @param recipient The recipient of the swap proceeds\n * @param deadline Deadline for the burn operation (i.e., swap), after which it will revert\n */\n function burn(\n address pool,\n IERC20 feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 targetToken,\n uint256 minTargetTokenAmountOut,\n address recipient,\n uint256 deadline\n ) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Maintain a set of pools whose protocol fees can be set from this helper contract, vs. the fee controller.\n * @dev Governance can add a set of pools to this contract, then grant permission to call protocol swap- or yield-\n * setting functions here, which allows greater granularity than setting permissions directly on the fee controller.\n *\n * Note that governance must grant this contract permission to call the pool protocol fee setting functions on the\n * controller.\n */\ninterface IProtocolFeeHelper {\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /**\n * @notice Set the protocol swap fee for a pool.\n * @dev This contract must be granted permission to set swap and yield protocol fees, but governance can\n * independently grant permission to call the swap and yield fee setters.\n *\n * @param pool The address of the pool\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage\n */\n function setProtocolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Set the protocol yield fee for a pool.\n * @dev This contract must be granted permission to set swap and yield protocol fees, but governance can\n * independently grant permission to call the swap and yield fee setters.\n *\n * @param pool The address of the pool\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setProtocolYieldFeePercentage(address pool, uint256 newProtocolYieldFeePercentage) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IProtocolFeeController } from \"../vault/IProtocolFeeController.sol\";\nimport { IProtocolFeeBurner } from \"./IProtocolFeeBurner.sol\";\n\ninterface IProtocolFeeSweeper {\n /**\n * @notice Emitted when the target token is set or updated.\n * @param token The preferred token for receiving protocol fees\n */\n event TargetTokenSet(IERC20 indexed token);\n\n /**\n * @notice Emitted when the fee recipient address is set or updated.\n * @param feeRecipient The final destination of collected protocol fees\n */\n event FeeRecipientSet(address indexed feeRecipient);\n\n /**\n * @notice Emitted when a fee token is transferred directly, vs. calling the burner.\n * @dev This can happen if no target token or burner contract was specified, or the fee token is the target token.\n * @param pool The pool on which the fee was collected\n * @param feeToken The token the fee was collected in (also the target token in this case; no swap necessary)\n * @param feeTokenAmount The number of feeTokens\n * @param recipient The recipient of the fee tokens\n */\n event ProtocolFeeSwept(address indexed pool, IERC20 indexed feeToken, uint256 feeTokenAmount, address recipient);\n\n /**\n * @notice Emitted when a burner is added to the protocol fee burner allowlist.\n * @dev `sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\n * @param protocolFeeBurner The address of the approved protocol fee burner that was added\n */\n event ProtocolFeeBurnerAdded(address indexed protocolFeeBurner);\n\n /**\n * @notice Emitted when a burner is removed from the protocol fee burner allowlist.\n * @dev `sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\n * @param protocolFeeBurner The address of the approved protocol fee burner that was removed\n */\n event ProtocolFeeBurnerRemoved(address indexed protocolFeeBurner);\n\n /// @notice The fee recipient is invalid.\n error InvalidFeeRecipient();\n\n /// @notice The target token is invalid.\n error InvalidTargetToken();\n\n /// @notice The protocol fee burner to be added is invalid.\n error InvalidProtocolFeeBurner();\n\n /**\n * @notice The specified fee burner has not been approved.\n * @param protocolFeeBurner The address of the unsupported fee burner\n */\n error UnsupportedProtocolFeeBurner(address protocolFeeBurner);\n\n /**\n * @notice Protocol fee burners can only be added to the allowlist once.\n * @param protocolFeeBurner The address of an approved protocol fee burner\n */\n error ProtocolFeeBurnerAlreadyAdded(address protocolFeeBurner);\n\n /**\n * @notice Protocol fee burners must be added to the allowlist before being removed.\n * @param protocolFeeBurner The address of a protocol fee burner to be removed from the allowlist\n */\n error ProtocolFeeBurnerNotAdded(address protocolFeeBurner);\n\n /**\n * @notice The burner did not consume its entire allowance.\n * @dev The fee sweeper approves the burner to pull tokens. If it doesn't do so, revert to avoid a \"hanging\"\n * approval that could be exploited later.\n */\n error BurnerDidNotConsumeAllowance();\n\n /// @notice Unwrapping is not allowed for the operation.\n error UnwrapIsNotAllowed();\n\n /**\n * @notice Withdraw, convert, and forward protocol fees for a given pool and token.\n * @dev This will withdraw the fee token from the controller to this contract, and attempt to convert and forward\n * the proceeds to the fee recipient. Note that this requires governance to grant this contract permission to call\n * `withdrawProtocolFeesForToken` on the `ProtocolFeeController`.\n *\n * This is a permissioned call, since it involves a swap and a permissionless sweep could be triggered at times\n * disadvantageous to the protocol (e.g., flash crashes). The general design is for an off-chain process to\n * periodically collect fees from the Vault and check the protocol fee amounts available for withdrawal. Once\n * these are greater than a threshold, compute the expected proceeds to determine the limits (amount and deadline),\n * then call the sweeper to put in the order with the burner.\n *\n * @param pool The pool that incurred the fees we're withdrawing\n * @param feeToken The fee token in the pool\n * @param minTargetTokenAmountOut The minimum number of target tokens to be received\n * @param deadline Deadline for the burn operation (swap), after which it will revert\n * @param feeBurner The protocol fee burner to be used (or the zero address to fall back on direct transfer)\n */\n function sweepProtocolFeesForToken(\n address pool,\n IERC20 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner\n ) external;\n\n /**\n * @notice The same as `sweepProtocolFeesForToken`, but for wrapped tokens.\n * @param pool The pool that incurred the fees we're withdrawing\n * @param feeToken The fee token in the pool\n * @param minTargetTokenAmountOut The minimum number of target tokens to be received\n * @param deadline Deadline for the burn operation (swap), after which it will revert\n * @param feeBurner The protocol fee burner to be used (or the zero address to fall back on direct transfer)\n */\n function sweepProtocolFeesForWrappedToken(\n address pool,\n IERC4626 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner\n ) external;\n\n /**\n * @notice Return the address of the current `ProtocolFeeController` from the Vault.\n * @dev It is not immutable in the Vault, so we need to fetch it every time.\n * @return protocolFeeController The address of the current `ProtocolFeeController`\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController);\n\n /**\n * @notice Getter for the target token.\n * @dev This is the token the burner will swap all fee tokens for. Can be changed by `setTargetToken`.\n * @return targetToken The current target token\n */\n function getTargetToken() external view returns (IERC20);\n\n /**\n * @notice Getter for the current fee recipient.\n * @dev Can be changed by `setFeeRecipient`.\n * @return feeRecipient The current fee recipient\n */\n function getFeeRecipient() external view returns (address);\n\n /**\n * @notice Check whether a given address corresponds to an approved protocol fee burner.\n * @param protocolFeeBurner The address to be checked\n * @return isApproved True if the given address is on the approved protocol fee burner allowlist\n */\n function isApprovedProtocolFeeBurner(address protocolFeeBurner) external view returns (bool);\n\n /**\n * @notice Update the fee recipient address.\n * @dev This is a permissioned function.\n * @param feeRecipient The address of the new fee recipient\n */\n function setFeeRecipient(address feeRecipient) external;\n\n /**\n * @notice Update the address of the target token.\n * @dev This is the token for which the burner will attempt to swap all collected fee tokens.\n * @param targetToken The address of the target token\n */\n function setTargetToken(IERC20 targetToken) external;\n\n /**\n * @notice Add an approved fee burner to the allowlist.\n * @dev This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol\n * fee burners.\n *\n * @param protocolFeeBurner The address of an approved protocol fee burner to be added\n */\n function addProtocolFeeBurner(IProtocolFeeBurner protocolFeeBurner) external;\n\n /**\n * @notice Remove a fee burner from the allowlist.\n * @dev This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol\n * fee burners.\n *\n * @param protocolFeeBurner The address of a protocol fee burner on the allowlist to be removed\n */\n function removeProtocolFeeBurner(IProtocolFeeBurner protocolFeeBurner) external;\n\n /**\n * @notice Retrieve any tokens \"stuck\" in this contract (e.g., dust, or failed conversions).\n * @dev It will recover the full balance of all the tokens. This can only be called by the `feeRecipient`.\n * @param feeTokens The tokens to recover\n */\n function recoverProtocolFees(IERC20[] memory feeTokens) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\nimport { SwapPathStep } from \"../vault/BatchRouterTypes.sol\";\n\npragma solidity ^0.8.24;\n\ninterface ITokenPairRegistry {\n /**\n * @notice Emitted when a new token pair is added to the registry.\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n * @param pathsLength The number of paths added for the token pair\n */\n event PathAdded(address indexed tokenIn, address indexed tokenOut, uint256 pathsLength);\n\n /**\n * @notice Emitted when an existing token pair is removed from the registry.\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n * @param pathsLength The number of paths associated with the token pair after the removal\n */\n event PathRemoved(address indexed tokenIn, address indexed tokenOut, uint256 pathsLength);\n\n /**\n * @notice The given buffer address does not correspond to an initialized buffer.\n * @param buffer The address of the uninitialized buffer\n */\n error BufferNotInitialized(address buffer);\n\n /// @notice The path to add cannot be empty.\n error EmptyPath();\n\n /**\n * @notice The given address is not a valid pool or buffer.\n * @param path Pool or buffer address\n */\n error InvalidSimplePath(address path);\n\n /**\n * @notice The given pool or buffer is not registered as a path for the token pair.\n * @param poolOrBuffer The address of the pool or buffer\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n */\n error InvalidRemovePath(address poolOrBuffer, address tokenIn, address tokenOut);\n\n /**\n * @notice The output token does not match the expected address in a wrap or unwrap operation.\n * @param buffer The address of the buffer\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n */\n error InvalidBufferPath(address buffer, address tokenIn, address tokenOut);\n\n /// @notice Attempted to remove a path at an index beyond the registered length.\n error IndexOutOfBounds();\n\n /**\n * @notice Returns the path for a given token pair at a specific index.\n * @dev Safe version; reverts if the index is out of bounds.\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n * @param index The index of the path in the list of paths for the token pair\n * @return The path at the specified index for the token pair\n */\n function getPathAt(address tokenIn, address tokenOut, uint256 index) external view returns (SwapPathStep[] memory);\n\n /**\n * @notice Returns the number of paths registered for a given token pair.\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n * @return The number of paths registered for the token pair\n */\n function getPathCount(address tokenIn, address tokenOut) external view returns (uint256);\n\n /**\n * @notice Returns the paths registered for a given token pair.\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n * @return An array of path addresses registered for the token pair\n */\n function getPaths(address tokenIn, address tokenOut) external view returns (SwapPathStep[][] memory);\n\n /**\n * @notice Adds an arbitrary path between `tokenIn` and the last step's `tokenOut` to the registry.\n * @dev This function is permissioned. Use it to register boosted pool paths with leading / trailing buffer steps.\n * The registry will validate that each step is valid (i.e. each pool step contains the `tokenIn` and `tokenOut`,\n * and each buffer step has the correct wrapped / underlying token).\n *\n * @param tokenIn The address of the input token in the pair\n * @param steps An array of `SwapPathStep` structs representing the path steps to reach the output token\n */\n function addPath(address tokenIn, SwapPathStep[] memory steps) external;\n\n /**\n * @notice Adds a pool or buffer to the registry with all token pairs it supports.\n * @dev This function is permissioned.\n * @param poolOrBuffer The address of the pool or buffer\n */\n function addSimplePath(address poolOrBuffer) external;\n\n /**\n * @notice Removes an arbitrary path from the registry at a given index.\n * @dev This function is permissioned.\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n * @param index The index of the path to remove in the list of paths for the token pair\n */\n function removePathAtIndex(address tokenIn, address tokenOut, uint256 index) external;\n\n /**\n * @notice Removes all token paths registered for a given pool or buffer.\n * @dev This function is permissioned.\n * @param poolOrBuffer The address of the pool or buffer\n */\n function removeSimplePath(address poolOrBuffer) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nstruct SwapPathStep {\n address pool;\n IERC20 tokenOut;\n // If true, the \"pool\" is an ERC4626 Buffer. Used to wrap/unwrap tokens if pool doesn't have enough liquidity.\n bool isBuffer;\n}\n\nstruct SwapPathExactAmountIn {\n IERC20 tokenIn;\n // For each step:\n // If tokenIn == pool, use removeLiquidity SINGLE_TOKEN_EXACT_IN.\n // If tokenOut == pool, use addLiquidity UNBALANCED.\n SwapPathStep[] steps;\n uint256 exactAmountIn;\n uint256 minAmountOut;\n}\n\nstruct SwapPathExactAmountOut {\n IERC20 tokenIn;\n // for each step:\n // If tokenIn == pool, use removeLiquidity SINGLE_TOKEN_EXACT_OUT.\n // If tokenOut == pool, use addLiquidity SINGLE_TOKEN_EXACT_OUT.\n SwapPathStep[] steps;\n uint256 maxAmountIn;\n uint256 exactAmountOut;\n}\n\nstruct SwapExactInHookParams {\n address sender;\n SwapPathExactAmountIn[] paths;\n uint256 deadline;\n bool wethIsEth;\n bytes userData;\n}\n\nstruct SwapExactOutHookParams {\n address sender;\n SwapPathExactAmountOut[] paths;\n uint256 deadline;\n bool wethIsEth;\n bytes userData;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Interface to the Vault's permission system.\ninterface IAuthorizer {\n /**\n * @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n * @param actionId Identifier for the action to be performed\n * @param account Account trying to perform the action\n * @param where Target contract for the action\n * @return success True if the action is permitted\n */\n function canPerform(bytes32 actionId, address account, address where) external view returns (bool success);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"../solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @notice Base interface for a Balancer Pool Factory.\n * @dev All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types\n * (e.g., address prediction, tracking deployed pools, and governance-facilitated migration).\n */\ninterface IBasePoolFactory is IAuthentication {\n /**\n * @notice A pool was deployed.\n * @param pool The address of the new pool\n */\n event PoolCreated(address indexed pool);\n\n /// @notice The factory was disabled by governance.\n event FactoryDisabled();\n\n /// @notice Attempted pool creation after the factory was disabled.\n error Disabled();\n\n /// @notice A pool index is beyond the current bounds of the array.\n error IndexOutOfBounds();\n\n /**\n * @notice Check whether a pool was deployed by this factory.\n * @param pool The pool to check\n * @return success True if `pool` was created by this factory\n */\n function isPoolFromFactory(address pool) external view returns (bool success);\n\n /**\n * @notice Return the total number of pools deployed by this factory.\n * @dev This can then be used to \"paginate\" calls to `getPools` to control gas costs.\n * @return poolCount The number of pools deployed by this factory\n */\n function getPoolCount() external view returns (uint256 poolCount);\n\n /**\n * @notice Return a subset of the list of pools deployed by this factory.\n * @dev `start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply\n * stop at the end and return fewer results than requested.\n *\n * @param start The index of the first pool to return\n * @param count The maximum number of pools to return\n * @return pools The list of pools deployed by this factory, starting at `start` and returning up to `count` pools\n */\n function getPoolsInRange(uint256 start, uint256 count) external view returns (address[] memory pools);\n\n /**\n * @notice Return the complete list of pools deployed by this factory.\n * @return pools The list of pools deployed by this factory\n */\n function getPools() external view returns (address[] memory pools);\n\n /**\n * @notice Return the address where a new pool will be deployed, based on the factory address and salt.\n * @param constructorArgs The arguments used to create the pool\n * @param salt The salt used to deploy the pool\n * @return deploymentAddress The predicted address of the pool, given the salt\n */\n function getDeploymentAddress(\n bytes memory constructorArgs,\n bytes32 salt\n ) external view returns (address deploymentAddress);\n\n /**\n * @notice Check whether this factory has been disabled by governance.\n * @return success True if this factory was disabled\n */\n function isDisabled() external view returns (bool success);\n\n /**\n * @notice Disable the factory, preventing the creation of more pools.\n * @dev Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\n */\n function disable() external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n// Explicitly import VaultTypes structs because we expect this interface to be heavily used by external developers.\n// Internally, when this list gets too long, we usually just do a simple import to keep things tidy.\nimport {\n TokenConfig,\n LiquidityManagement,\n PoolSwapParams,\n AfterSwapParams,\n HookFlags,\n AddLiquidityKind,\n RemoveLiquidityKind,\n SwapKind\n} from \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for pool hooks.\n * @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n * they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n * should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n * then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\n */\ninterface IHooks {\n /***************************************************************************\n Register\n ***************************************************************************/\n\n /**\n * @notice Hook executed when a pool is registered with a non-zero hooks contract.\n * @dev Returns true if registration was successful, and false to revert the pool registration.\n * Make sure this function is properly implemented (e.g. check the factory, and check that the\n * given pool is from the factory). The Vault address will be msg.sender.\n *\n * @param factory Address of the pool factory (contract deploying the pool)\n * @param pool Address of the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param liquidityManagement Liquidity management flags indicating which functions are enabled\n * @return success True if the hook allowed the registration, false otherwise\n */\n function onRegister(\n address factory,\n address pool,\n TokenConfig[] memory tokenConfig,\n LiquidityManagement calldata liquidityManagement\n ) external returns (bool success);\n\n /**\n * @notice Return the set of hooks implemented by the contract.\n * @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n * (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n * `onRegister` is the only \"mandatory\" hook.\n *\n * @return hookFlags Flags indicating which hooks the contract supports\n */\n function getHookFlags() external view returns (HookFlags memory hookFlags);\n\n /***************************************************************************\n Initialize\n ***************************************************************************/\n\n /**\n * @notice Hook executed before pool initialization.\n * @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with initialization\n */\n function onBeforeInitialize(uint256[] memory exactAmountsIn, bytes memory userData) external returns (bool success);\n\n /**\n * @notice Hook to be executed after pool initialization.\n * @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param bptAmountOut Amount of pool tokens minted during initialization\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool accepts the initialization results\n */\n function onAfterInitialize(\n uint256[] memory exactAmountsIn,\n uint256 bptAmountOut,\n bytes memory userData\n ) external returns (bool success);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before adding liquidity.\n * @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param maxAmountsInScaled18 Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory maxAmountsInScaled18,\n uint256 minBptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after adding liquidity.\n * @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n * @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n * @param bptAmountOut Amount of pool tokens minted\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook\n */\n function onAfterAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory amountsInScaled18,\n uint256[] memory amountsInRaw,\n uint256 bptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsInRaw);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before removing liquidity.\n * @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOutScaled18,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after removing liquidity.\n * @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param bptAmountIn Amount of pool tokens to burn\n * @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n * @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook\n */\n function onAfterRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 bptAmountIn,\n uint256[] memory amountsOutScaled18,\n uint256[] memory amountsOutRaw,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsOutRaw);\n\n /***************************************************************************\n Swap\n ***************************************************************************/\n\n /**\n * @notice Called before a swap to give the Pool an opportunity to perform actions.\n * @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeSwap(PoolSwapParams calldata params, address pool) external returns (bool success);\n\n /**\n * @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n * @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n * use the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see above for struct definition)\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook\n */\n function onAfterSwap(\n AfterSwapParams calldata params\n ) external returns (bool success, uint256 hookAdjustedAmountCalculatedRaw);\n\n /**\n * @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n * @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n * @return success True if the pool wishes to proceed with settlement\n * @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value\n */\n function onComputeDynamicSwapFeePercentage(\n PoolSwapParams calldata params,\n address pool,\n uint256 staticSwapFeePercentage\n ) external view returns (bool success, uint256 dynamicSwapFeePercentage);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVault } from \"./IVault.sol\";\n\n/// @notice Contract that handles protocol and pool creator fees for the Vault.\ninterface IProtocolFeeController {\n /**\n * @notice Emitted when the protocol swap fee percentage is updated.\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event GlobalProtocolSwapFeePercentageChanged(uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated.\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event GlobalProtocolYieldFeePercentageChanged(uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol swap fee will be changed\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event ProtocolSwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol yield fee will be changed\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event ProtocolYieldFeePercentageChanged(address indexed pool, uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n * @param pool The pool whose pool creator swap fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool\n */\n event PoolCreatorSwapFeePercentageChanged(address indexed pool, uint256 poolCreatorSwapFeePercentage);\n\n /**\n * @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n * @param pool The pool whose pool creator yield fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool\n */\n event PoolCreatorYieldFeePercentageChanged(address indexed pool, uint256 poolCreatorYieldFeePercentage);\n\n /**\n * @notice Logs the collection of protocol swap fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the swap fee was charged\n * @param token The token in which the swap fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolSwapFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the collection of protocol yield fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the yield fee was charged\n * @param token The token in which the yield fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolYieldFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of protocol fees in a specific token and amount.\n * @param pool The pool from which protocol fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds\n * @param amount The amount of the fee token that was withdrawn\n */\n event ProtocolFeesWithdrawn(address indexed pool, IERC20 indexed token, address indexed recipient, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n * @param pool The pool from which pool creator fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n * @param amount The amount of the fee token that was withdrawn\n */\n event PoolCreatorFeesWithdrawn(\n address indexed pool,\n IERC20 indexed token,\n address indexed recipient,\n uint256 amount\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global swap fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateSwapFeePercentage(\n address indexed pool,\n uint256 aggregateSwapFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global yield fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateYieldFeePercentage(\n address indexed pool,\n uint256 aggregateYieldFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\n * @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n * simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n * counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n * @param protocolFeeExempt True if the pool is initially exempt from protocol fees\n */\n event PoolRegisteredWithFeeController(address indexed pool, address indexed poolCreator, bool protocolFeeExempt);\n\n /**\n * @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages.\n */\n error ProtocolSwapFeePercentageTooHigh();\n\n /**\n * @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages.\n */\n error ProtocolYieldFeePercentageTooHigh();\n\n /**\n * @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n * @param pool The pool with no creator\n */\n error PoolCreatorNotRegistered(address pool);\n\n /**\n * @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n * @param caller The account attempting to withdraw pool creator fees\n * @param pool The pool the caller tried to withdraw from\n */\n error CallerIsNotPoolCreator(address caller, address pool);\n\n /// @notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\n error PoolCreatorFeePercentageTooHigh();\n\n /**\n * @notice Get the address of the main Vault contract.\n * @return vault The Vault address\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Collects aggregate fees from the Vault for a given pool.\n * @param pool The pool with aggregate fees\n */\n function collectAggregateFees(address pool) external;\n\n /**\n * @notice Getter for the current global protocol swap fee.\n * @return protocolSwapFeePercentage The global protocol swap fee percentage\n */\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256 protocolSwapFeePercentage);\n\n /**\n * @notice Getter for the current global protocol yield fee.\n * @return protocolYieldFeePercentage The global protocol yield fee percentage\n */\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256 protocolYieldFeePercentage);\n\n /**\n * @notice Getter for pool registration flag.\n * @param pool The address of the pool\n * @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\n */\n function isPoolRegistered(address pool) external view returns (bool);\n\n /**\n * @notice Getter for the current protocol swap fee for a given pool.\n * @param pool The address of the pool\n * @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolSwapFeeInfo(\n address pool\n ) external view returns (uint256 protocolSwapFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current protocol yield fee for a given pool.\n * @param pool The address of the pool\n * @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolYieldFeeInfo(\n address pool\n ) external view returns (uint256 protocolYieldFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current pool creator swap fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\n */\n function getPoolCreatorSwapFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Getter for the current pool creator yield fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\n */\n function getPoolCreatorYieldFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n * @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n * pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n * stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n * It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n * components, but the truncation ensures it will not revert for any valid set of fee percentages.\n *\n * See example below:\n *\n * tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n * totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n * protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n * creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n * creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n * lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n *\n * @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n * @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n * @return aggregateFeePercentage The computed aggregate percentage\n */\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256 aggregateFeePercentage);\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol swap fee\n */\n function updateProtocolSwapFeePercentage(address pool) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol yield fee\n */\n function updateProtocolYieldFeePercentage(address pool) external;\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /**\n * @notice Add pool-specific entries to the protocol swap and yield percentages.\n * @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n * protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n * fee percentages, based on an initial pool creator fee of 0.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n * @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n * @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @return aggregateYieldFeePercentage The initial aggregate yield fee percentage\n */\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice Set the global protocol swap fee percentage, used by standard pools.\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage\n */\n function setGlobalProtocolSwapFeePercentage(uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Set the global protocol yield fee percentage, used by standard pools.\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setGlobalProtocolYieldFeePercentage(uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol swap fee\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool\n */\n function setProtocolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol yield fee\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool\n */\n function setProtocolYieldFeePercentage(address pool, uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator swap fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool\n */\n function setPoolCreatorSwapFeePercentage(address pool, uint256 poolCreatorSwapFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator yield fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool\n */\n function setPoolCreatorYieldFeePercentage(address pool, uint256 poolCreatorYieldFeePercentage) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawProtocolFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n * @param token Token to withdraw\n */\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n * @dev Sends swap and yield pool creator fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawPoolCreatorFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool.\n * @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n * value, this function is permissionless.\n *\n * @param pool The pool on which fees were collected\n */\n function withdrawPoolCreatorFees(address pool) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IBalancerContractRegistry } from \"../standalone-utils/IBalancerContractRegistry.sol\";\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\n\ninterface IProtocolFeePercentagesProvider {\n /**\n * @notice Protocol fee percentages have been set for the given factory.\n * @param factory The pool factory\n * @param protocolSwapFeePercentage The protocol swap fee percentage intended for pools from this factory\n * @param protocolYieldFeePercentage The protocol yield fee percentage intended for pools from this factory\n */\n event FactorySpecificProtocolFeePercentagesSet(\n address indexed factory,\n uint256 protocolSwapFeePercentage,\n uint256 protocolYieldFeePercentage\n );\n\n /// @notice The protocol fee controller was configured with an incorrect Vault address.\n error WrongProtocolFeeControllerDeployment();\n\n /**\n * @notice Fees can only be set on recognized factories (i.e., registered in the `BalancerContractRegistry`).\n * @param factory The address of the unknown factory\n */\n error UnknownFactory(address factory);\n\n /**\n * @notice `setFactorySpecificProtocolFeePercentages` has not been called for this factory address.\n * @dev This error can by thrown by `getFactorySpecificProtocolFeePercentages` or\n * `setProtocolFeePercentagesForPools`, as both require that valid fee percentages have been set.\n * You need to set the factory fees before you can apply them to pools from that factory.\n *\n * @param factory The factory address where fees have not been set\n */\n error FactoryFeesNotSet(address factory);\n\n /**\n * @notice The given pool is not from the expected factory.\n * @dev Occurs when one of the pools supplied to `setProtocolFeePercentagesForPools` is not from the given factory.\n * @param pool The address of the unrecognized pool\n * @param factory The address of the factory\n */\n error PoolNotFromFactory(address pool, address factory);\n\n /**\n * @notice Get the address of the `ProtocolFeeController` used to set fees.\n * @return protocolFeeController The address of the fee controller\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController);\n\n /**\n * @notice Get the address of the `BalancerContractRegistry` used to validate factory contracts.\n * @return balancerContractRegistry The address of the Balancer contract registry\n */\n function getBalancerContractRegistry() external view returns (IBalancerContractRegistry balancerContractRegistry);\n\n /**\n * @notice Query the protocol fee percentages for a given factory.\n * @param factory The address of the factory\n * @return protocolSwapFeePercentage The protocol swap fee percentage set for that factory\n * @return protocolYieldFeePercentage The protocol yield fee percentage set for that factory\n */\n function getFactorySpecificProtocolFeePercentages(\n address factory\n ) external view returns (uint256 protocolSwapFeePercentage, uint256 protocolYieldFeePercentage);\n\n /**\n * @notice Assign intended protocol fee percentages for a given factory.\n * @dev This is a permissioned call. After the fee percentages have been set, and governance has granted\n * this contract permission to set fee percentages on pools, anyone can call `setProtocolFeePercentagesForPools`\n * to update the fee percentages on a set of pools from that factory.\n *\n * @param factory The address of the factory\n * @param protocolSwapFeePercentage The new protocol swap fee percentage\n * @param protocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setFactorySpecificProtocolFeePercentages(\n address factory,\n uint256 protocolSwapFeePercentage,\n uint256 protocolYieldFeePercentage\n ) external;\n\n /**\n * @notice Update the protocol fees for a set of pools from a given factory.\n * @dev This call is permissionless. Anyone can update the fee percentages, once they're set by governance.\n * Note that governance must also grant this contract permission to set protocol fee percentages on pools.\n *\n * @param factory The address of the factory\n * @param pools The pools whose fees will be set according to `setFactorySpecificProtocolFeePercentages`\n */\n function setProtocolFeePercentagesForPools(address factory, address[] memory pools) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVault } from \"./IVault.sol\";\nimport { IRouterQueries } from \"./IRouterQueries.sol\";\n\nimport { AddLiquidityKind, RemoveLiquidityKind, SwapKind } from \"./VaultTypes.sol\";\n\n/// @notice User-friendly interface to basic Vault operations: swap, add/remove liquidity, and associated queries.\ninterface IRouter is IRouterQueries {\n /***************************************************************************\n Pool Initialization\n ***************************************************************************/\n\n /**\n * @notice Initialize a liquidity pool.\n * @param pool Address of the liquidity pool\n * @param tokens Pool tokens, in token registration order\n * @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Minimum amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add initial liquidity\n * @return bptAmountOut Actual amount of pool tokens minted in exchange for initial liquidity\n */\n function initialize(\n address pool,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountOut);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Adds liquidity to a pool with proportional token amounts, receiving an exact amount of pool tokens.\n * @param pool Address of the liquidity pool\n * @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n * @param exactBptAmountOut Exact amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return amountsIn Actual amounts of tokens added, sorted in token registration order\n */\n function addLiquidityProportional(\n address pool,\n uint256[] memory maxAmountsIn,\n uint256 exactBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256[] memory amountsIn);\n\n /**\n * @notice Adds liquidity to a pool with arbitrary token amounts.\n * @param pool Address of the liquidity pool\n * @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Minimum amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return bptAmountOut Actual amount of pool tokens received\n */\n function addLiquidityUnbalanced(\n address pool,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountOut);\n\n /**\n * @notice Adds liquidity to a pool in a single token, receiving an exact amount of pool tokens.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token used to add liquidity\n * @param maxAmountIn Maximum amount of tokens to be added\n * @param exactBptAmountOut Exact amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return amountIn Actual amount of tokens added\n */\n function addLiquiditySingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n uint256 maxAmountIn,\n uint256 exactBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 amountIn);\n\n /**\n * @notice Adds liquidity to a pool by donating the amounts in (no BPT out).\n * @dev To support donation, the pool config `enableDonation` flag must be set to true.\n * @param pool Address of the liquidity pool\n * @param amountsIn Amounts of tokens to be donated, sorted in token registration order\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to donate liquidity\n */\n function donate(address pool, uint256[] memory amountsIn, bool wethIsEth, bytes memory userData) external payable;\n\n /**\n * @notice Adds liquidity to a pool with a custom request.\n * @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n * In any case the caller can expect them to be hard boundaries for the request.\n *\n * @param pool Address of the liquidity pool\n * @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Minimum amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return amountsIn Actual amounts of tokens added, sorted in token registration order\n * @return bptAmountOut Actual amount of pool tokens received\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function addLiquidityCustom(\n address pool,\n uint256[] memory maxAmountsIn,\n uint256 minBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Removes liquidity with proportional token amounts from a pool, burning an exact pool token amount.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return amountsOut Actual amounts of tokens received, sorted in token registration order\n */\n function removeLiquidityProportional(\n address pool,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256[] memory amountsOut);\n\n /**\n * @notice Removes liquidity from a pool via a single token, burning an exact pool token amount.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided\n * @param tokenOut Token used to remove liquidity\n * @param minAmountOut Minimum amount of tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return amountOut Actual amount of tokens received\n */\n function removeLiquiditySingleTokenExactIn(\n address pool,\n uint256 exactBptAmountIn,\n IERC20 tokenOut,\n uint256 minAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 amountOut);\n\n /**\n * @notice Removes liquidity from a pool via a single token, specifying the exact amount of tokens to receive.\n * @param pool Address of the liquidity pool\n * @param maxBptAmountIn Maximum amount of pool tokens provided\n * @param tokenOut Token used to remove liquidity\n * @param exactAmountOut Exact amount of tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return bptAmountIn Actual amount of pool tokens burned\n */\n function removeLiquiditySingleTokenExactOut(\n address pool,\n uint256 maxBptAmountIn,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountIn);\n\n /**\n * @notice Removes liquidity from a pool with a custom request.\n * @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n * In any case the caller can expect them to be hard boundaries for the request.\n *\n * @param pool Address of the liquidity pool\n * @param maxBptAmountIn Maximum amount of pool tokens provided\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return bptAmountIn Actual amount of pool tokens burned\n * @return amountsOut Actual amounts of tokens received, sorted in token registration order\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function removeLiquidityCustom(\n address pool,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /**\n * @notice Removes liquidity proportionally, burning an exact pool token amount. Only available in Recovery Mode.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @return amountsOut Actual amounts of tokens received, sorted in token registration order\n */\n function removeLiquidityRecovery(\n address pool,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external payable returns (uint256[] memory amountsOut);\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Executes a swap operation specifying an exact input token amount.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountIn Exact amounts of input tokens to send\n * @param minAmountOut Minimum amount of tokens to be received\n * @param deadline Deadline for the swap, after which it will revert\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the swap request\n * @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens\n */\n function swapSingleTokenExactIn(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountIn,\n uint256 minAmountOut,\n uint256 deadline,\n bool wethIsEth,\n bytes calldata userData\n ) external payable returns (uint256 amountOut);\n\n /**\n * @notice Executes a swap operation specifying an exact output token amount.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountOut Exact amounts of input tokens to receive\n * @param maxAmountIn Maximum amount of tokens to be sent\n * @param deadline Deadline for the swap, after which it will revert\n * @param userData Additional (optional) data sent with the swap request\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens\n */\n function swapSingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n uint256 maxAmountIn,\n uint256 deadline,\n bool wethIsEth,\n bytes calldata userData\n ) external payable returns (uint256 amountIn);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVault } from \"./IVault.sol\";\n\nimport { AddLiquidityKind, RemoveLiquidityKind, SwapKind } from \"./VaultTypes.sol\";\n\n/// @notice User-friendly interface for querying expected results of swap and liquidity operations without execution.\ninterface IRouterQueries {\n /***************************************************************************\n Add liquidity\n ***************************************************************************/\n\n /**\n * @notice Queries an `addLiquidityProportional` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountOut Exact amount of pool tokens to be received\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountsIn Expected amounts of tokens to add, sorted in token registration order\n */\n function queryAddLiquidityProportional(\n address pool,\n uint256 exactBptAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256[] memory amountsIn);\n\n /**\n * @notice Queries an `addLiquidityUnbalanced` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return bptAmountOut Expected amount of pool tokens to receive\n */\n function queryAddLiquidityUnbalanced(\n address pool,\n uint256[] memory exactAmountsIn,\n address sender,\n bytes memory userData\n ) external returns (uint256 bptAmountOut);\n\n /**\n * @notice Queries an `addLiquiditySingleTokenExactOut` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token used to add liquidity\n * @param exactBptAmountOut Expected exact amount of pool tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountIn Expected amount of tokens to add\n */\n function queryAddLiquiditySingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n uint256 exactBptAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 amountIn);\n\n /**\n * @notice Queries an `addLiquidityCustom` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Expected minimum amount of pool tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountsIn Expected amounts of tokens to add, sorted in token registration order\n * @return bptAmountOut Expected amount of pool tokens to receive\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function queryAddLiquidityCustom(\n address pool,\n uint256[] memory maxAmountsIn,\n uint256 minBptAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove liquidity\n ***************************************************************************/\n\n /**\n * @notice Queries a `removeLiquidityProportional` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided for the query\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n */\n function queryRemoveLiquidityProportional(\n address pool,\n uint256 exactBptAmountIn,\n address sender,\n bytes memory userData\n ) external returns (uint256[] memory amountsOut);\n\n /**\n * @notice Queries a `removeLiquiditySingleTokenExactIn` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided for the query\n * @param tokenOut Token used to remove liquidity\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountOut Expected amount of tokens to receive\n */\n function queryRemoveLiquiditySingleTokenExactIn(\n address pool,\n uint256 exactBptAmountIn,\n IERC20 tokenOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 amountOut);\n\n /**\n * @notice Queries a `removeLiquiditySingleTokenExactOut` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenOut Token used to remove liquidity\n * @param exactAmountOut Expected exact amount of tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return bptAmountIn Expected amount of pool tokens to burn\n */\n function queryRemoveLiquiditySingleTokenExactOut(\n address pool,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 bptAmountIn);\n\n /**\n * @notice Queries a `removeLiquidityCustom` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param maxBptAmountIn Maximum amount of pool tokens provided\n * @param minAmountsOut Expected minimum amounts of tokens to receive, sorted in token registration order\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return bptAmountIn Expected amount of pool tokens to burn\n * @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function queryRemoveLiquidityCustom(\n address pool,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /**\n * @notice Queries a `removeLiquidityRecovery` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided for the query\n * @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n */\n function queryRemoveLiquidityRecovery(\n address pool,\n uint256 exactBptAmountIn\n ) external returns (uint256[] memory amountsOut);\n\n /***************************************************************************\n Swap\n ***************************************************************************/\n\n /**\n * @notice Queries a swap operation specifying an exact input token amount without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountIn Exact amounts of input tokens to send\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens\n */\n function querySwapSingleTokenExactIn(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountIn,\n address sender,\n bytes calldata userData\n ) external returns (uint256 amountOut);\n\n /**\n * @notice Queries a swap operation specifying an exact output token amount without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountOut Exact amounts of input tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens\n */\n function querySwapSingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n address sender,\n bytes calldata userData\n ) external returns (uint256 amountIn);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"../solidity-utils/helpers/IAuthentication.sol\";\nimport { IVaultExtension } from \"./IVaultExtension.sol\";\nimport { IVaultErrors } from \"./IVaultErrors.sol\";\nimport { IVaultEvents } from \"./IVaultEvents.sol\";\nimport { IVaultAdmin } from \"./IVaultAdmin.sol\";\nimport { IVaultMain } from \"./IVaultMain.sol\";\n\n/// @notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\ninterface IVault is IVaultMain, IVaultExtension, IVaultAdmin, IVaultErrors, IVaultEvents, IAuthentication {\n /// @return vault The main Vault address.\n function vault() external view override(IVaultAdmin, IVaultExtension) returns (IVault);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IVault } from \"./IVault.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultAdmin` contract.\n * @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n * as two delegate calls add gas to each call. Most of the permissioned calls are here.\n */\ninterface IVaultAdmin {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the Vault's pause window end time.\n * @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n * by governance. Balancer timestamps are 32 bits.\n *\n * @return pauseWindowEndTime The timestamp when the Vault's pause window ends\n */\n function getPauseWindowEndTime() external view returns (uint32 pauseWindowEndTime);\n\n /**\n * @notice Returns the Vault's buffer period duration.\n * @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n * This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodDuration The length of the buffer period in seconds\n */\n function getBufferPeriodDuration() external view returns (uint32 bufferPeriodDuration);\n\n /**\n * @notice Returns the Vault's buffer period end time.\n * @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused\n */\n function getBufferPeriodEndTime() external view returns (uint32 bufferPeriodEndTime);\n\n /**\n * @notice Get the minimum number of tokens in a pool.\n * @dev We expect the vast majority of pools to be 2-token.\n * @return minTokens The minimum token count of a pool\n */\n function getMinimumPoolTokens() external pure returns (uint256 minTokens);\n\n /**\n * @notice Get the maximum number of tokens in a pool.\n * @return maxTokens The maximum token count of a pool\n */\n function getMaximumPoolTokens() external pure returns (uint256 maxTokens);\n\n /**\n * @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n * @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n * is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n *\n * @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization\n */\n function getPoolMinimumTotalSupply() external pure returns (uint256 poolMinimumTotalSupply);\n\n /**\n * @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n * @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n * of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n * to the Vault, as buffers are not tokenized.\n *\n * @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization\n */\n function getBufferMinimumTotalSupply() external pure returns (uint256 bufferMinimumTotalSupply);\n\n /**\n * @notice Get the minimum trade amount in a pool operation.\n * @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n * @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number\n */\n function getMinimumTradeAmount() external view returns (uint256 minimumTradeAmount);\n\n /**\n * @notice Get the minimum wrap amount in a buffer operation.\n * @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n * @return minimumWrapAmount The minimum wrap amount in native underlying token decimals\n */\n function getMinimumWrapAmount() external view returns (uint256 minimumWrapAmount);\n\n /*******************************************************************************\n Vault Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault is paused.\n * @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n * ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n * also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n * `areBuffersPaused` to check the pause state of the buffers.\n *\n * @return vaultPaused True if the Vault is paused\n */\n function isVaultPaused() external view returns (bool vaultPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n * @dev Balancer timestamps are 32 bits.\n * @return vaultPaused True if the Vault is paused\n * @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n * @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period\n */\n function getVaultPausedState()\n external\n view\n returns (bool vaultPaused, uint32 vaultPauseWindowEndTime, uint32 vaultBufferPeriodEndTime);\n\n /**\n * @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n * @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n * Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n * the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n * are also paused (with `pauseVaultBuffers`).\n */\n function pauseVault() external;\n\n /**\n * @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n * deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n * `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\n */\n function unpauseVault() external;\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Pause the Pool: an emergency action which disables all pool functions.\n * @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n * deployment.\n *\n * @param pool The pool being paused\n */\n function pausePool(address pool) external;\n\n /**\n * @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n * deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n *\n * @param pool The pool being unpaused\n */\n function unpausePool(address pool) external;\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Assigns a new static swap fee percentage to the specified pool.\n * @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n * the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n * Emits the SwapFeePercentageChanged event.\n *\n * @param pool The address of the pool for which the static swap fee will be changed\n * @param swapFeePercentage The new swap fee percentage to apply to the pool\n */\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) external;\n\n /**\n * @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n * @dev Fees are sent to the ProtocolFeeController address.\n * @param pool The pool on which all aggregate fees should be collected\n * @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function collectAggregateFees(\n address pool\n ) external returns (uint256[] memory swapFeeAmounts, uint256[] memory yieldFeeAmounts);\n\n /**\n * @notice Update an aggregate swap fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateSwapFeePercentageChanged` event.\n *\n * @param pool The pool whose swap fee percentage will be updated\n * @param newAggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n function updateAggregateSwapFeePercentage(address pool, uint256 newAggregateSwapFeePercentage) external;\n\n /**\n * @notice Update an aggregate yield fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateYieldFeePercentageChanged` event.\n *\n * @param pool The pool whose yield fee percentage will be updated\n * @param newAggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n function updateAggregateYieldFeePercentage(address pool, uint256 newAggregateYieldFeePercentage) external;\n\n /**\n * @notice Sets a new Protocol Fee Controller for the Vault.\n * @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n * @param newProtocolFeeController The address of the new Protocol Fee Controller\n */\n function setProtocolFeeController(IProtocolFeeController newProtocolFeeController) external;\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Enable recovery mode for a pool.\n * @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n * Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n * must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n * balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n *\n * @param pool The address of the pool\n */\n function enableRecoveryMode(address pool) external;\n\n /**\n * @notice Disable recovery mode for a pool.\n * @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n * Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n * potentially fail if there is an issue with any associated Rate Providers.\n *\n * @param pool The address of the pool\n */\n function disableRecoveryMode(address pool) external;\n\n /*******************************************************************************\n Query Functionality\n *******************************************************************************/\n\n /**\n * @notice Disables query functionality on the Vault. Can only be called by governance.\n * @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n * settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n * queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n * This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n * disabling queries is completely necessary; queries can still be re-enabled after this call.\n */\n function disableQuery() external;\n\n /**\n * @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n * @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\n */\n function disableQueryPermanently() external;\n\n /**\n * @notice Enables query functionality on the Vault. Can only be called by governance.\n * @dev Only works if queries are not permanently disabled.\n */\n function enableQuery() external;\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault buffers are paused.\n * @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n * will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n * independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n * would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n *\n * @return buffersPaused True if the Vault buffers are paused\n */\n function areBuffersPaused() external view returns (bool buffersPaused);\n\n /**\n * @notice Pauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n * possible to pause vault buffers individually.\n *\n * This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n * and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n * buffers, and vice versa.\n */\n function pauseVaultBuffers() external;\n\n /**\n * @notice Unpauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n * If the Vault was also paused, it will remain in that state until explicitly unpaused.\n *\n * This is a permissioned call.\n */\n function unpauseVaultBuffers() external;\n\n /**\n * @notice Initializes buffer for the given wrapped token.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n * @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n * @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n * native decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n * (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\n */\n function initializeBuffer(\n IERC4626 wrappedToken,\n uint256 amountUnderlyingRaw,\n uint256 amountWrappedRaw,\n uint256 minIssuedShares,\n address sharesOwner\n ) external returns (uint256 issuedShares);\n\n /**\n * @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n * @dev The buffer needs to be initialized beforehand.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n * underlying token native decimals\n * @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n * token native decimals\n * @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n * in underlying token decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n * @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer\n */\n function addLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 maxAmountUnderlyingInRaw,\n uint256 maxAmountWrappedInRaw,\n uint256 exactSharesToIssue,\n address sharesOwner\n ) external returns (uint256 amountUnderlyingRaw, uint256 amountWrappedRaw);\n\n /**\n * @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n * @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n * This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n *\n * Pre-conditions:\n * - The buffer needs to be initialized.\n * - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n * this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n * - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n * total shares. It is expressed in underlying token native decimals\n * @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n * in underlying token native decimals\n * @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n * wrapped token native decimals\n * @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n * @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user\n */\n function removeLiquidityFromBuffer(\n IERC4626 wrappedToken,\n uint256 sharesToRemove,\n uint256 minAmountUnderlyingOutRaw,\n uint256 minAmountWrappedOutRaw\n ) external returns (uint256 removedUnderlyingBalanceRaw, uint256 removedWrappedBalanceRaw);\n\n /**\n * @notice Returns the asset registered for a given wrapped token.\n * @dev The asset can never change after buffer initialization.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n * has not been initialized.\n */\n function getBufferAsset(IERC4626 wrappedToken) external view returns (address underlyingToken);\n\n /**\n * @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n * in the buffer.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n * @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals\n */\n function getBufferOwnerShares(\n IERC4626 wrappedToken,\n address liquidityOwner\n ) external view returns (uint256 ownerShares);\n\n /**\n * @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals\n */\n function getBufferTotalShares(IERC4626 wrappedToken) external view returns (uint256 bufferShares);\n\n /**\n * @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n * @dev All values are in native token decimals of the wrapped or underlying tokens.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n * @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals\n */\n function getBufferBalance(\n IERC4626 wrappedToken\n ) external view returns (uint256 underlyingBalanceRaw, uint256 wrappedBalanceRaw);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Sets a new Authorizer for the Vault.\n * @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n * @param newAuthorizer The address of the new authorizer\n */\n function setAuthorizer(IAuthorizer newAuthorizer) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Errors are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultErrors {\n /*******************************************************************************\n Registration and Initialization\n *******************************************************************************/\n\n /**\n * @notice A pool has already been registered. `registerPool` may only be called once.\n * @param pool The already registered pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /**\n * @notice A pool has already been initialized. `initialize` may only be called once.\n * @param pool The already initialized pool\n */\n error PoolAlreadyInitialized(address pool);\n\n /**\n * @notice A pool has not been registered.\n * @param pool The unregistered pool\n */\n error PoolNotRegistered(address pool);\n\n /**\n * @notice A referenced pool has not been initialized.\n * @param pool The uninitialized pool\n */\n error PoolNotInitialized(address pool);\n\n /**\n * @notice A hook contract rejected a pool on registration.\n * @param poolHooksContract Address of the hook contract that rejected the pool registration\n * @param pool Address of the rejected pool\n * @param poolFactory Address of the pool factory\n */\n error HookRegistrationFailed(address poolHooksContract, address pool, address poolFactory);\n\n /**\n * @notice A token was already registered (i.e., it is a duplicate in the pool).\n * @param token The duplicate token\n */\n error TokenAlreadyRegistered(IERC20 token);\n\n /// @notice The token count is below the minimum allowed.\n error MinTokens();\n\n /// @notice The token count is above the maximum allowed.\n error MaxTokens();\n\n /// @notice Invalid tokens (e.g., zero) cannot be registered.\n error InvalidToken();\n\n /// @notice The token type given in a TokenConfig during pool registration is invalid.\n error InvalidTokenType();\n\n /// @notice The data in a TokenConfig struct is inconsistent or unsupported.\n error InvalidTokenConfiguration();\n\n /// @notice Tokens with more than 18 decimals are not supported.\n error InvalidTokenDecimals();\n\n /**\n * @notice The token list passed into an operation does not match the pool tokens in the pool.\n * @param pool Address of the pool\n * @param expectedToken The correct token at a given index in the pool\n * @param actualToken The actual token found at that index\n */\n error TokensMismatch(address pool, address expectedToken, address actualToken);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /// @notice A transient accounting operation completed with outstanding token deltas.\n error BalanceNotSettled();\n\n /// @notice A user called a Vault function (swap, add/remove liquidity) outside the lock context.\n error VaultIsNotUnlocked();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error DynamicSwapFeeHookFailed();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error BeforeSwapHookFailed();\n\n /// @notice The pool has returned false to the afterSwap hook, indicating the transaction should revert.\n error AfterSwapHookFailed();\n\n /// @notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\n error BeforeInitializeHookFailed();\n\n /// @notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\n error AfterInitializeHookFailed();\n\n /// @notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\n error BeforeAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\n error AfterAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\n error BeforeRemoveLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\n error AfterRemoveLiquidityHookFailed();\n\n /// @notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\n error RouterNotTrusted();\n\n /*******************************************************************************\n Swaps\n *******************************************************************************/\n\n /// @notice The user tried to swap zero tokens.\n error AmountGivenZero();\n\n /// @notice The user attempted to swap a token for itself.\n error CannotSwapSameToken();\n\n /**\n * @notice The user attempted to operate with a token that is not in the pool.\n * @param token The unregistered token\n */\n error TokenNotRegistered(IERC20 token);\n\n /**\n * @notice An amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error SwapLimit(uint256 amount, uint256 limit);\n\n /**\n * @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error HookAdjustedSwapLimit(uint256 amount, uint256 limit);\n\n /// @notice The amount given or calculated for an operation is below the minimum limit.\n error TradeAmountTooSmall();\n\n /*******************************************************************************\n Add Liquidity\n *******************************************************************************/\n\n /// @notice Add liquidity kind not supported.\n error InvalidAddLiquidityKind();\n\n /**\n * @notice A required amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error AmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error BptAmountOutBelowMin(uint256 amountOut, uint256 minAmountOut);\n\n /// @notice Pool does not support adding liquidity with a customized input.\n error DoesNotSupportAddLiquidityCustom();\n\n /// @notice Pool does not support adding liquidity through donation.\n error DoesNotSupportDonation();\n\n /*******************************************************************************\n Remove Liquidity\n *******************************************************************************/\n\n /// @notice Remove liquidity kind not supported.\n error InvalidRemoveLiquidityKind();\n\n /**\n * @notice The actual amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error AmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n * @param amountIn The total BPT amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error BptAmountInAboveMax(uint256 amountIn, uint256 maxAmountIn);\n\n /// @notice Pool does not support removing liquidity with a customized input.\n error DoesNotSupportRemoveLiquidityCustom();\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Error raised when there is an overflow in the fee calculation.\n * @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n * (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n * percentages in the Vault.\n */\n error ProtocolFeesExceedTotalCollected();\n\n /**\n * @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is below the minimum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooLow();\n\n /**\n * @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is above the maximum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooHigh();\n\n /**\n * @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n * @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n * precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n * corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n * Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n * the aggregate fee calculated here and that stored in the Vault.\n */\n error FeePrecisionTooHigh();\n\n /// @notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\n error PercentageAboveMax();\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /// @notice A user tried to execute a query operation when they were disabled.\n error QueriesDisabled();\n\n /// @notice An admin tried to re-enable queries, but they were disabled permanently.\n error QueriesDisabledPermanently();\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Cannot enable recovery mode when already enabled.\n * @param pool The pool\n */\n error PoolInRecoveryMode(address pool);\n\n /**\n * @notice Cannot disable recovery mode when not enabled.\n * @param pool The pool\n */\n error PoolNotInRecoveryMode(address pool);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n * @param sender The account attempting to call a permissioned function\n */\n error SenderIsNotVault(address sender);\n\n /*******************************************************************************\n Pausing\n *******************************************************************************/\n\n /// @notice The caller specified a pause window period longer than the maximum.\n error VaultPauseWindowDurationTooLarge();\n\n /// @notice The caller specified a buffer period longer than the maximum.\n error PauseBufferPeriodDurationTooLarge();\n\n /// @notice A user tried to perform an operation while the Vault was paused.\n error VaultPaused();\n\n /// @notice Governance tried to unpause the Vault when it was not paused.\n error VaultNotPaused();\n\n /// @notice Governance tried to pause the Vault after the pause period expired.\n error VaultPauseWindowExpired();\n\n /**\n * @notice A user tried to perform an operation involving a paused Pool.\n * @param pool The paused pool\n */\n error PoolPaused(address pool);\n\n /**\n * @notice Governance tried to unpause the Pool when it was not paused.\n * @param pool The unpaused pool\n */\n error PoolNotPaused(address pool);\n\n /**\n * @notice Governance tried to pause a Pool after the pause period expired.\n * @param pool The pool\n */\n error PoolPauseWindowExpired(address pool);\n\n /*******************************************************************************\n ERC4626 token buffers\n *******************************************************************************/\n\n /**\n * @notice The buffer for the given wrapped token was already initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferAlreadyInitialized(IERC4626 wrappedToken);\n\n /**\n * @notice The buffer for the given wrapped token was not initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferNotInitialized(IERC4626 wrappedToken);\n\n /// @notice The user is trying to remove more than their allocated shares from the buffer.\n error NotEnoughBufferShares();\n\n /**\n * @notice The wrapped token asset does not match the underlying token.\n * @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n * Legitimate wrapper contracts should make the asset a constant or immutable value.\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n * @param underlyingToken The underlying token returned by `asset`\n */\n error WrongUnderlyingToken(IERC4626 wrappedToken, address underlyingToken);\n\n /**\n * @notice A wrapped token reported the zero address as its underlying token asset.\n * @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n * re-initialize the buffer).\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error InvalidUnderlyingToken(IERC4626 wrappedToken);\n\n /**\n * @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error WrapAmountTooSmall(IERC4626 wrappedToken);\n\n /// @notice Buffer operation attempted while vault buffers are paused.\n error VaultBuffersArePaused();\n\n /// @notice Buffer shares were minted to the zero address.\n error BufferSharesInvalidReceiver();\n\n /// @notice Buffer shares were burned from the zero address.\n error BufferSharesInvalidOwner();\n\n /**\n * @notice The total supply of a buffer can't be lower than the absolute minimum.\n * @param totalSupply The total supply value that was below the minimum\n */\n error BufferTotalSupplyTooLow(uint256 totalSupply);\n\n /// @dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\n error NotEnoughUnderlying(IERC4626 wrappedToken, uint256 expectedUnderlyingAmount, uint256 actualUnderlyingAmount);\n\n /// @dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\n error NotEnoughWrapped(IERC4626 wrappedToken, uint256 expectedWrappedAmount, uint256 actualWrappedAmount);\n\n /// @dev Shares issued during initialization are below the requested amount.\n error IssuedSharesBelowMin(uint256 issuedShares, uint256 minIssuedShares);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /// @notice Pool does not support adding / removing liquidity with an unbalanced input.\n error DoesNotSupportUnbalancedLiquidity();\n\n /// @notice The contract should not receive ETH.\n error CannotReceiveEth();\n\n /**\n * @notice The `VaultExtension` contract was called by an account directly.\n * @dev It can only be called by the Vault via delegatecall.\n */\n error NotVaultDelegateCall();\n\n /// @notice The `VaultExtension` contract was configured with an incorrect Vault address.\n error WrongVaultExtensionDeployment();\n\n /// @notice The `ProtocolFeeController` contract was configured with an incorrect Vault address.\n error WrongProtocolFeeControllerDeployment();\n\n /// @notice The `VaultAdmin` contract was configured with an incorrect Vault address.\n error WrongVaultAdminDeployment();\n\n /// @notice Quote reverted with a reserved error code.\n error QuoteResultSpoofed();\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/// @dev Events are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultEvents {\n /**\n * @notice A Pool was registered by calling `registerPool`.\n * @param pool The pool being registered\n * @param factory The factory creating the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The static swap fee of the pool\n * @param pauseWindowEndTime The pool's pause window end time\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n * @param liquidityManagement Supported liquidity management hook flags\n */\n event PoolRegistered(\n address indexed pool,\n address indexed factory,\n TokenConfig[] tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n PoolRoleAccounts roleAccounts,\n HooksConfig hooksConfig,\n LiquidityManagement liquidityManagement\n );\n\n /**\n * @notice A Pool was initialized by calling `initialize`.\n * @param pool The pool being initialized\n */\n event PoolInitialized(address indexed pool);\n\n /**\n * @notice A swap has occurred.\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountIn Number of tokenIn tokens\n * @param amountOut Number of tokenOut tokens\n * @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n * @param swapFeeAmount Swap fee amount paid\n */\n event Swap(\n address indexed pool,\n IERC20 indexed tokenIn,\n IERC20 indexed tokenOut,\n uint256 amountIn,\n uint256 amountOut,\n uint256 swapFeePercentage,\n uint256 swapFeeAmount\n );\n\n /**\n * @notice A wrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param depositedUnderlying Number of underlying tokens deposited\n * @param mintedShares Number of shares (wrapped tokens) minted\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Wrap(\n IERC4626 indexed wrappedToken,\n uint256 depositedUnderlying,\n uint256 mintedShares,\n bytes32 bufferBalances\n );\n\n /**\n * @notice An unwrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param burnedShares Number of shares (wrapped tokens) burned\n * @param withdrawnUnderlying Number of underlying tokens withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Unwrap(\n IERC4626 indexed wrappedToken,\n uint256 burnedShares,\n uint256 withdrawnUnderlying,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Liquidity has been added to a pool (including initialization).\n * @param pool The pool with liquidity added\n * @param liquidityProvider The user performing the operation\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityAdded(\n address indexed pool,\n address indexed liquidityProvider,\n AddLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsAddedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice Liquidity has been removed from a pool.\n * @param pool The pool with liquidity removed\n * @param liquidityProvider The user performing the operation\n * @param kind The remove liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityRemoved(\n address indexed pool,\n address indexed liquidityProvider,\n RemoveLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsRemovedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice The Vault's pause status has changed.\n * @param paused True if the Vault was paused\n */\n event VaultPausedStateChanged(bool paused);\n\n /// @notice `disableQuery` has been called on the Vault, disabling query functionality.\n event VaultQueriesDisabled();\n\n /// @notice `enableQuery` has been called on the Vault, enabling query functionality.\n event VaultQueriesEnabled();\n\n /**\n * @notice A Pool's pause status has changed.\n * @param pool The pool that was just paused or unpaused\n * @param paused True if the pool was paused\n */\n event PoolPausedStateChanged(address indexed pool, bool paused);\n\n /**\n * @notice Emitted when the swap fee percentage of a pool is updated.\n * @param swapFeePercentage The new swap fee percentage for the pool\n */\n event SwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Recovery mode has been enabled or disabled for a pool.\n * @param pool The pool\n * @param recoveryMode True if recovery mode was enabled\n */\n event PoolRecoveryModeStateChanged(address indexed pool, bool recoveryMode);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate swap fee percentage changed\n * @param aggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n event AggregateSwapFeePercentageChanged(address indexed pool, uint256 aggregateSwapFeePercentage);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate yield fee percentage changed\n * @param aggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n event AggregateYieldFeePercentageChanged(address indexed pool, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice A new authorizer is set by `setAuthorizer`.\n * @param newAuthorizer The address of the new authorizer\n */\n event AuthorizerChanged(IAuthorizer indexed newAuthorizer);\n\n /**\n * @notice A new protocol fee controller is set by `setProtocolFeeController`.\n * @param newProtocolFeeController The address of the new protocol fee controller\n */\n event ProtocolFeeControllerChanged(IProtocolFeeController indexed newProtocolFeeController);\n\n /**\n * @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was deposited\n * @param amountWrapped The amount of the wrapped token that was deposited\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityAddedToBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param to The owner of the minted shares\n * @param issuedShares The amount of \"internal BPT\" shares created\n */\n event BufferSharesMinted(IERC4626 indexed wrappedToken, address indexed to, uint256 issuedShares);\n\n /**\n * @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param from The owner of the burned shares\n * @param burnedShares The amount of \"internal BPT\" shares burned\n */\n event BufferSharesBurned(IERC4626 indexed wrappedToken, address indexed from, uint256 burnedShares);\n\n /**\n * @notice Liquidity was removed from an ERC4626 buffer.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was withdrawn\n * @param amountWrapped The amount of the wrapped token that was withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityRemovedFromBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice The Vault buffers pause status has changed.\n * @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n * set to true) will revert.\n *\n * @param paused True if the Vault buffers were paused\n */\n event VaultBuffersPausedStateChanged(bool paused);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param pool Pool address\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n event VaultAuxiliary(address indexed pool, bytes32 indexed eventKey, bytes eventData);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IVault } from \"./IVault.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultExtension` contract.\n * @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n * the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n * liquidity operations.\n */\ninterface IVaultExtension {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the VaultAdmin contract address.\n * @dev The VaultAdmin contract mostly implements permissioned functions.\n * @return vaultAdmin The address of the Vault admin\n */\n function getVaultAdmin() external view returns (address vaultAdmin);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n * @dev The Vault must be unlocked to perform state-changing liquidity operations.\n * @return unlocked True if the Vault is unlocked, false otherwise\n */\n function isUnlocked() external view returns (bool unlocked);\n\n /**\n * @notice Returns the count of non-zero deltas.\n * @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`\n */\n function getNonzeroDeltaCount() external view returns (uint256 nonzeroDeltaCount);\n\n /**\n * @notice Retrieves the token delta for a specific token.\n * @dev This function allows reading the value from the `_tokenDeltas` mapping.\n * @param token The token for which the delta is being fetched\n * @return tokenDelta The delta of the specified token\n */\n function getTokenDelta(IERC20 token) external view returns (int256 tokenDelta);\n\n /**\n * @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n * @param token The token for which to retrieve the reserve\n * @return reserveAmount The amount of reserves for the given token\n */\n function getReservesOf(IERC20 token) external view returns (uint256 reserveAmount);\n\n /**\n * @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n * same pool).\n * @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n * layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n * is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n * It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n * than a simple swap for every pool type.\n *\n * @param pool Address of the pool to check\n * @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n \n * Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\n */\n function getAddLiquidityCalledFlag(address pool) external view returns (bool liquidityAdded);\n\n /*******************************************************************************\n Pool Registration\n *******************************************************************************/\n\n /**\n * @notice Registers a pool, associating it with its factory and the tokens it manages.\n * @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n * by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n * additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n * pool will automatically unpause. Balancer timestamps are 32 bits.\n *\n * A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n * multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n * the Vault.\n *\n * If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n * authorizer.\n *\n * @param pool The address of the pool being registered\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The initial static swap fee percentage of the pool\n * @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n * @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param poolHooksContract Contract that implements the hooks for the pool\n * @param liquidityManagement Liquidity management flags with implemented methods\n */\n function registerPool(\n address pool,\n TokenConfig[] memory tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n bool protocolFeeExempt,\n PoolRoleAccounts calldata roleAccounts,\n address poolHooksContract,\n LiquidityManagement calldata liquidityManagement\n ) external;\n\n /**\n * @notice Checks whether a pool is registered.\n * @param pool Address of the pool to check\n * @return registered True if the pool is registered, false otherwise\n */\n function isPoolRegistered(address pool) external view returns (bool registered);\n\n /**\n * @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n * @param pool Address of the pool to initialize\n * @param to Address that will receive the output BPT\n * @param tokens Tokens used to seed the pool (must match the registered tokens)\n * @param exactAmountsIn Exact amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param userData Additional (optional) data required for adding initial liquidity\n * @return bptAmountOut Output pool token amount\n */\n function initialize(\n address pool,\n address to,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bytes memory userData\n ) external returns (uint256 bptAmountOut);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is initialized.\n * @dev An initialized pool can be considered registered as well.\n * @param pool Address of the pool to check\n * @return initialized True if the pool is initialized, false otherwise\n */\n function isPoolInitialized(address pool) external view returns (bool initialized);\n\n /**\n * @notice Gets the tokens registered to a pool.\n * @param pool Address of the pool\n * @return tokens List of tokens in the pool\n */\n function getPoolTokens(address pool) external view returns (IERC20[] memory tokens);\n\n /**\n * @notice Gets pool token rates.\n * @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n * registration order.\n *\n * @param pool Address of the pool\n * @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. FP(1) for 18-decimal tokens\n * @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n */\n function getPoolTokenRates(\n address pool\n ) external view returns (uint256[] memory decimalScalingFactors, uint256[] memory tokenRates);\n\n /**\n * @notice Returns comprehensive pool data for the given pool.\n * @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n * @param pool The address of the pool\n * @return poolData The `PoolData` result\n */\n function getPoolData(address pool) external view returns (PoolData memory poolData);\n\n /**\n * @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n * @param pool Address of the pool\n * @return tokens The pool tokens, sorted in registration order\n * @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n * @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n * @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order\n */\n function getPoolTokenInfo(\n address pool\n )\n external\n view\n returns (\n IERC20[] memory tokens,\n TokenInfo[] memory tokenInfo,\n uint256[] memory balancesRaw,\n uint256[] memory lastBalancesLiveScaled18\n );\n\n /**\n * @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n * registration order.\n *\n * @param pool Address of the pool\n * @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n */\n function getCurrentLiveBalances(address pool) external view returns (uint256[] memory balancesLiveScaled18);\n\n /**\n * @notice Gets the configuration parameters of a pool.\n * @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n * @param pool Address of the pool\n * @return poolConfig The pool configuration as a `PoolConfig` struct\n */\n function getPoolConfig(address pool) external view returns (PoolConfig memory poolConfig);\n\n /**\n * @notice Gets the hooks configuration parameters of a pool.\n * @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n * @param pool Address of the pool\n * @return hooksConfig The hooks configuration as a `HooksConfig` struct\n */\n function getHooksConfig(address pool) external view returns (HooksConfig memory hooksConfig);\n\n /**\n * @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n * @param pool Address of the pool\n * @return rate BPT rate\n */\n function getBptRate(address pool) external view returns (uint256 rate);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Gets the total supply of a given ERC20 token.\n * @param token The token address\n * @return tokenTotalSupply Total supply of the token\n */\n function totalSupply(address token) external view returns (uint256 tokenTotalSupply);\n\n /**\n * @notice Gets the balance of an account for a given ERC20 token.\n * @param token Address of the token\n * @param account Address of the account\n * @return tokenBalance Token balance of the account\n */\n function balanceOf(address token, address account) external view returns (uint256 tokenBalance);\n\n /**\n * @notice Gets the allowance of a spender for a given ERC20 token and owner.\n * @param token Address of the token\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @return tokenAllowance Amount of tokens the spender is allowed to spend\n */\n function allowance(address token, address owner, address spender) external view returns (uint256 tokenAllowance);\n\n /**\n * @notice Approves a spender to spend pool tokens on behalf of sender.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @param amount Amount of tokens to approve\n * @return success True if successful, false otherwise\n */\n function approve(address owner, address spender, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether a pool is paused.\n * @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n * @param pool The pool to be checked\n * @return poolPaused True if the pool is paused\n */\n function isPoolPaused(address pool) external view returns (bool poolPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n * @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n * the buffer period. Balancer timestamps are 32 bits.\n *\n * @param pool The pool whose data is requested\n * @return poolPaused True if the Pool is paused\n * @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n * @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n * @return pauseManager The pause manager, or the zero address\n */\n function getPoolPausedState(\n address pool\n )\n external\n view\n returns (bool poolPaused, uint32 poolPauseWindowEndTime, uint32 poolBufferPeriodEndTime, address pauseManager);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Checks if the wrapped token has an initialized buffer in the Vault.\n * @dev An initialized buffer should have an asset registered in the Vault.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return isBufferInitialized True if the ERC4626 buffer is initialized\n */\n function isERC4626BufferInitialized(IERC4626 wrappedToken) external view returns (bool isBufferInitialized);\n\n /**\n * @notice Gets the registered asset for a given buffer.\n * @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n * should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n * the Vault on initialization.\n *\n * @param wrappedToken The wrapped token specifying the buffer\n * @return asset The underlying asset of the wrapped token\n */\n function getERC4626BufferAsset(IERC4626 wrappedToken) external view returns (address asset);\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return swapFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateSwapFeeAmount(address pool, IERC20 token) external view returns (uint256 swapFeeAmount);\n\n /**\n * @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return yieldFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateYieldFeeAmount(address pool, IERC20 token) external view returns (uint256 yieldFeeAmount);\n\n /**\n * @notice Fetches the static swap fee percentage for a given pool.\n * @param pool The address of the pool whose static swap fee percentage is being queried\n * @return swapFeePercentage The current static swap fee percentage for the specified pool\n */\n function getStaticSwapFeePercentage(address pool) external view returns (uint256 swapFeePercentage);\n\n /**\n * @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n * @param pool The address of the pool whose roles are being queried\n * @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)\n */\n function getPoolRoleAccounts(address pool) external view returns (PoolRoleAccounts memory roleAccounts);\n\n /**\n * @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n * @dev Reverts if the hook doesn't return the success flag set to `true`.\n * @param pool The pool\n * @param swapParams The swap parameters used to compute the fee\n * @return dynamicSwapFeePercentage The dynamic swap fee percentage\n */\n function computeDynamicSwapFeePercentage(\n address pool,\n PoolSwapParams memory swapParams\n ) external view returns (uint256 dynamicSwapFeePercentage);\n\n /**\n * @notice Returns the Protocol Fee Controller address.\n * @return protocolFeeController Address of the ProtocolFeeController\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController);\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is in Recovery Mode.\n * @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n * @param pool Address of the pool to check\n * @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise\n */\n function isPoolInRecoveryMode(address pool) external view returns (bool inRecoveryMode);\n\n /**\n * @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n * The request is implemented by the Vault without any interaction with the pool, ensuring that\n * it works the same for all pools, and cannot be disabled by a new pool type.\n *\n * @param pool Address of the pool\n * @param from Address of user to burn pool tokens from\n * @param exactBptAmountIn Input pool token amount\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order\n */\n function removeLiquidityRecovery(\n address pool,\n address from,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external returns (uint256[] memory amountsOut);\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function quote(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * This call always reverts, returning the result in the revert reason.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n */\n function quoteAndRevert(bytes calldata data) external;\n\n /**\n * @notice Returns true if queries are disabled on the Vault.\n * @dev If true, queries might either be disabled temporarily or permanently.\n * @return queryDisabled True if query functionality is reversibly disabled\n */\n function isQueryDisabled() external view returns (bool queryDisabled);\n\n /**\n * @notice Returns true if queries are disabled permanently; false if they are enabled.\n * @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n * @return queryDisabledPermanently True if query functionality is permanently disabled\n */\n function isQueryDisabledPermanently() external view returns (bool queryDisabledPermanently);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n function emitAuxiliaryEvent(bytes32 eventKey, bytes calldata eventData) external;\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Returns the Authorizer address.\n * @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n * and can be changed through a permissioned call.\n *\n * @return authorizer Address of the authorizer contract\n */\n function getAuthorizer() external view returns (IAuthorizer authorizer);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the main Vault contract.\n * @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n * for technical or performance reasons.\n */\ninterface IVaultMain {\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n * @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n * meaning all balances for the caller have to be settled at the end.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function unlock(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Settles deltas for a token; must be successful for the current lock to be released.\n * @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n * should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n * excess in the Vault balance.\n *\n * If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n * credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n *\n * If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n * In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n * not affect settlement.\n *\n * The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n * difference equals current balance of the token minus existing reserves of the token when the function is called.\n *\n * @param token Address of the token\n * @param amountHint Amount paid as reported by the caller\n * @return credit Credit received in return of the payment\n */\n function settle(IERC20 token, uint256 amountHint) external returns (uint256 credit);\n\n /**\n * @notice Sends tokens to a recipient.\n * @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n * debts.\n *\n * @param token Address of the token\n * @param to Recipient address\n * @param amount Amount of tokens to send\n */\n function sendTo(IERC20 token, address to, uint256 amount) external;\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Swaps tokens based on provided parameters.\n * @dev All parameters are given in raw token decimal encoding.\n * @param vaultSwapParams Parameters for the swap (see above for struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function swap(\n VaultSwapParams memory vaultSwapParams\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Adds liquidity to a pool.\n * @dev Caution should be exercised when adding liquidity because the Vault has the capability\n * to transfer tokens from any user, given that it holds all allowances.\n *\n * @param params Parameters for the add liquidity (see above for struct definition)\n * @return amountsIn Actual amounts of input tokens\n * @return bptAmountOut Output pool token amount\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function addLiquidity(\n AddLiquidityParams memory params\n ) external returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Removes liquidity from a pool.\n * @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n * Untrusted routers require prior approval from the user. This is the only function allowed to call\n * _queryModeBalanceIncrease (and only in a query context).\n *\n * @param params Parameters for the remove liquidity (see above for struct definition)\n * @return bptAmountIn Actual amount of BPT burned\n * @return amountsOut Actual amounts of output tokens\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function removeLiquidity(\n RemoveLiquidityParams memory params\n ) external returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Gets the index of a token in a given pool.\n * @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n * @param pool Address of the pool\n * @param token Address of the token\n * @return tokenCount Number of tokens in the pool\n * @return index Index corresponding to the given token in the pool's token list\n */\n function getPoolTokenCountAndIndexOfToken(\n address pool,\n IERC20 token\n ) external view returns (uint256 tokenCount, uint256 index);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Transfers pool token from owner to a recipient.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transfer(address owner, address to, uint256 amount) external returns (bool);\n\n /**\n * @notice Transfers pool token from a sender to a recipient using an allowance.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param spender Address allowed to perform the transfer\n * @param from Address of the sender\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transferFrom(address spender, address from, address to, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Wraps/unwraps tokens based on the parameters provided.\n * @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n * and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n *\n * @param params Parameters for the wrap/unwrap operation (see struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function erc4626BufferWrapOrUnwrap(\n BufferWrapOrUnwrapParams memory params\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /**\n * @notice Returns the VaultExtension contract address.\n * @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n * functions, since delegate calls through the Vault are more expensive than direct calls.\n *\n * @return vaultExtension Address of the VaultExtension\n */\n function getVaultExtension() external view returns (address vaultExtension);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IRateProvider } from \"../solidity-utils/helpers/IRateProvider.sol\";\n\n/**\n * @notice Represents a pool's liquidity management configuration.\n * @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n * @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n * @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n * @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION\n */\nstruct LiquidityManagement {\n bool disableUnbalancedLiquidity;\n bool enableAddLiquidityCustom;\n bool enableRemoveLiquidityCustom;\n bool enableDonation;\n}\n\n// @notice Custom type to store the entire configuration of the pool.\ntype PoolConfigBits is bytes32;\n\n/**\n * @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n * @param liquidityManagement Flags related to adding/removing liquidity\n * @param staticSwapFeePercentage The pool's native swap fee\n * @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n * @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n * @param isPoolRegistered If true, the pool has been registered with the Vault\n * @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n * @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n * @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals\n */\nstruct PoolConfig {\n LiquidityManagement liquidityManagement;\n uint256 staticSwapFeePercentage;\n uint256 aggregateSwapFeePercentage;\n uint256 aggregateYieldFeePercentage;\n uint40 tokenDecimalDiffs;\n uint32 pauseWindowEndTime;\n bool isPoolRegistered;\n bool isPoolInitialized;\n bool isPoolPaused;\n bool isPoolInRecoveryMode;\n}\n\n/**\n * @notice The flag portion of the `HooksConfig`.\n * @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n * in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n * flags to true will cause the Vault to call the corresponding hook during operations.\n */\nstruct HookFlags {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n}\n\n/// @notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address).\nstruct HooksConfig {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n address hooksContract;\n}\n\n/**\n * @notice Represents temporary state used during a swap operation.\n * @param indexIn The zero-based index of tokenIn\n * @param indexOut The zero-based index of tokenOut\n * @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n * @param swapFeePercentage The swap fee to be applied (might be static or dynamic)\n */\nstruct SwapState {\n uint256 indexIn;\n uint256 indexOut;\n uint256 amountGivenScaled18;\n uint256 swapFeePercentage;\n}\n\n/**\n * @notice Represents the Vault's configuration.\n * @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n * @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n * @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled\n */\nstruct VaultState {\n bool isQueryDisabled;\n bool isVaultPaused;\n bool areBuffersPaused;\n}\n\n/**\n * @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n * @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n * @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n * @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)\n */\nstruct PoolRoleAccounts {\n address pauseManager;\n address swapFeeManager;\n address poolCreator;\n}\n\n/*******************************************************************************\n Tokens\n*******************************************************************************/\n\n// Note that the following tokens are unsupported by the Vault. This list is not meant to be exhaustive, but covers\n// many common types of tokens that will not work with the Vault architecture. (See https://github.com/d-xo/weird-erc20\n// for examples of token features that are problematic for many protocols.)\n//\n// * Rebasing tokens (e.g., aDAI). The Vault keeps track of token balances in its internal accounting; any token whose\n// balance changes asynchronously (i.e., outside a swap or liquidity operation), would get out-of-sync with this\n// internal accounting. This category would also include \"airdrop\" tokens, whose balances can change unexpectedly.\n//\n// * Double entrypoint (e.g., old Synthetix tokens, now fixed). These could likewise bypass internal accounting by\n// registering the token under one address, then accessing it through another. This is especially troublesome\n// in v3, with the introduction of ERC4626 buffers.\n//\n// * Fee on transfer (e.g., PAXG). The Vault issues credits and debits according to given and calculated token amounts,\n// and settlement assumes that the send/receive transfer functions transfer exactly the given number of tokens.\n// If this is not the case, transactions will not settle. Unlike with the other types, which are fundamentally\n// incompatible, it would be possible to design a Router to handle this - but we didn't try it. In any case, it's\n// not supported in the current Routers.\n//\n// * Tokens with more than 18 decimals (e.g., YAM-V2). The Vault handles token scaling: i.e., handling I/O for\n// amounts in native token decimals, but doing calculations with full 18-decimal precision. This requires reading\n// and storing the decimals for each token. Since virtually all tokens are 18 or fewer decimals, and we have limited\n// storage space, 18 was a reasonable maximum. Unlike the other types, this is enforceable by the Vault. Attempting\n// to register such tokens will revert with `InvalidTokenDecimals`. Of course, we must also be able to read the token\n// decimals, so the Vault only supports tokens that implement `IERC20Metadata.decimals`, and return a value less than\n// or equal to 18.\n//\n// * Token decimals are checked and stored only once, on registration. Valid tokens store their decimals as immutable\n// variables or constants. Malicious tokens that don't respect this basic property would not work anywhere in DeFi.\n//\n// These types of tokens are supported but discouraged, as they don't tend to play well with AMMs generally.\n//\n// * Very low-decimal tokens (e.g., GUSD). The Vault has been extensively tested with 6-decimal tokens (e.g., USDC),\n// but going much below that may lead to unanticipated effects due to precision loss, especially with smaller trade\n// values.\n//\n// * Revert on zero value approval/transfer. The Vault has been tested against these, but peripheral contracts, such\n// as hooks, might not have been designed with this in mind.\n//\n// * Other types from \"weird-erc20,\" such as upgradeable, pausable, or tokens with blocklists. We have seen cases\n// where a token upgrade fails, \"bricking\" the token - and many operations on pools containing that token. Any\n// sort of \"permissioned\" token that can make transfers fail can cause operations on pools containing them to\n// revert. Even Recovery Mode cannot help then, as it does a proportional withdrawal of all tokens. If one of\n// them is bricked, the whole operation will revert. Since v3 does not have \"internal balances\" like v2, there\n// is no recourse.\n//\n// Of course, many tokens in common use have some of these \"features\" (especially centralized stable coins), so\n// we have to support them anyway. Working with common centralized tokens is a risk common to all of DeFi.\n\n/**\n * @notice Token types supported by the Vault.\n * @dev In general, pools may contain any combination of these tokens.\n *\n * STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n * WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n * because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n * tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n * yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n * in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n * not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n * yield fees are charged elsewhere).\n *\n * NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard.\n */\nenum TokenType {\n STANDARD,\n WITH_RATE\n}\n\n/**\n * @notice Encapsulate the data required for the Vault to support a token of the given type.\n * @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n * need a rate provider, and may or may not be yield-bearing.\n *\n * At registration time, it is useful to include the token address along with the token parameters in the structure\n * passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n * validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n *\n * @param token The token address\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenConfig {\n IERC20 token;\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n * @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n * it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n *\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenInfo {\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice Data structure used to represent the current pool state in memory\n * @param poolConfigBits Custom type to store the entire configuration of the pool.\n * @param tokens Pool tokens, sorted in token registration order\n * @param tokenInfo Configuration data for each token, sorted in token registration order\n * @param balancesRaw Token balances in native decimals\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n * @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. It is 1e18 (FP 1) for 18-decimal tokens\n */\nstruct PoolData {\n PoolConfigBits poolConfigBits;\n IERC20[] tokens;\n TokenInfo[] tokenInfo;\n uint256[] balancesRaw;\n uint256[] balancesLiveScaled18;\n uint256[] tokenRates;\n uint256[] decimalScalingFactors;\n}\n\nenum Rounding {\n ROUND_UP,\n ROUND_DOWN\n}\n\n/*******************************************************************************\n Swaps\n*******************************************************************************/\n\nenum SwapKind {\n EXACT_IN,\n EXACT_OUT\n}\n\n// There are two \"SwapParams\" structs defined below. `VaultSwapParams` corresponds to the external swap API defined\n// in the Router contracts, which uses explicit token addresses, the amount given and limit on the calculated amount\n// expressed in native token decimals, and optional user data passed in from the caller.\n//\n// `PoolSwapParams` passes some of this information through (kind, userData), but \"translates\" the parameters to fit\n// the internal swap API used by `IBasePool`. It scales amounts to full 18-decimal precision, adds the token balances,\n// converts the raw token addresses to indices, and adds the address of the Router originating the request. It does\n// not need the limit, since this is checked at the Router level.\n\n/**\n * @notice Data passed into primary Vault `swap` operations.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n * @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n * @param userData Additional (optional) user data\n */\nstruct VaultSwapParams {\n SwapKind kind;\n address pool;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n bytes userData;\n}\n\n/**\n * @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n * @param kind Type of swap (exact in or exact out)\n * @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n * @param balancesScaled18 Current pool balances\n * @param indexIn Index of tokenIn\n * @param indexOut Index of tokenOut\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param userData Additional (optional) data required for the swap\n */\nstruct PoolSwapParams {\n SwapKind kind;\n uint256 amountGivenScaled18;\n uint256[] balancesScaled18;\n uint256 indexIn;\n uint256 indexOut;\n address router;\n bytes userData;\n}\n\n/**\n * @notice Data for the hook after a swap operation.\n * @param kind Type of swap (exact in or exact out)\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param amountInScaled18 Amount of tokenIn (entering the Vault)\n * @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n * @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n * @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n * @param amountCalculatedScaled18 Token amount calculated by the swap\n * @param amountCalculatedRaw Token amount calculated by the swap\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param pool Pool address\n * @param userData Additional (optional) data required for the swap\n */\nstruct AfterSwapParams {\n SwapKind kind;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountInScaled18;\n uint256 amountOutScaled18;\n uint256 tokenInBalanceScaled18;\n uint256 tokenOutBalanceScaled18;\n uint256 amountCalculatedScaled18;\n uint256 amountCalculatedRaw;\n address router;\n address pool;\n bytes userData;\n}\n\n/*******************************************************************************\n Add liquidity\n*******************************************************************************/\n\nenum AddLiquidityKind {\n PROPORTIONAL,\n UNBALANCED,\n SINGLE_TOKEN_EXACT_OUT,\n DONATION,\n CUSTOM\n}\n\n/**\n * @notice Data for an add liquidity operation.\n * @param pool Address of the pool\n * @param to Address of user to mint to\n * @param maxAmountsIn Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param kind Add liquidity kind\n * @param userData Optional user data\n */\nstruct AddLiquidityParams {\n address pool;\n address to;\n uint256[] maxAmountsIn;\n uint256 minBptAmountOut;\n AddLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum RemoveLiquidityKind {\n PROPORTIONAL,\n SINGLE_TOKEN_EXACT_IN,\n SINGLE_TOKEN_EXACT_OUT,\n CUSTOM\n}\n\n/**\n * @notice Data for an remove liquidity operation.\n * @param pool Address of the pool\n * @param from Address of user to burn from\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOut Minimum amounts of output tokens\n * @param kind Remove liquidity kind\n * @param userData Optional user data\n */\nstruct RemoveLiquidityParams {\n address pool;\n address from;\n uint256 maxBptAmountIn;\n uint256[] minAmountsOut;\n RemoveLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum WrappingDirection {\n WRAP,\n UNWRAP\n}\n\n/**\n * @notice Data for a wrap/unwrap operation.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param direction Direction of the wrapping operation (Wrap or Unwrap)\n * @param wrappedToken Wrapped token, compatible with interface ERC4626\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n * @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n * direction)\n */\nstruct BufferWrapOrUnwrapParams {\n SwapKind kind;\n WrappingDirection direction;\n IERC4626 wrappedToken;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n}\n\n// Protocol Fees are 24-bit values. We transform them by multiplying by 1e11, so that they can be set to any value\n// between 0% and 100% (step 0.00001%). Protocol and pool creator fees are set in the `ProtocolFeeController`, and\n// ensure both constituent and aggregate fees do not exceed this precision.\nuint256 constant FEE_BITLENGTH = 24;\nuint256 constant FEE_SCALING_FACTOR = 1e11;\n// Used to ensure the safety of fee-related math (e.g., pools or hooks don't set it greater than 100%).\n// This value should work for practical purposes and is well within the max precision requirements.\nuint256 constant MAX_FEE_PERCENTAGE = 99.9999e16; // 99.9999%\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @notice Building block for performing access control on external functions.\n * @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n * applied to external functions to make them only callable by authorized accounts.\n *\n * Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\n */\nabstract contract Authentication is IAuthentication {\n bytes32 private immutable _actionIdDisambiguator;\n\n /**\n * @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n * multi-contract systems.\n *\n * There are two main uses for it:\n * - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n * unique. The contract's own address is a good option.\n * - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n * shared by the entire family (and no other contract) should be used instead.\n */\n constructor(bytes32 actionIdDisambiguator) {\n _actionIdDisambiguator = actionIdDisambiguator;\n }\n\n /// @dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions.\n modifier authenticate() {\n _authenticateCaller();\n _;\n }\n\n /// @dev Reverts unless the caller is allowed to call the entry point function.\n function _authenticateCaller() internal view {\n bytes32 actionId = getActionId(msg.sig);\n\n if (!_canPerform(actionId, msg.sender)) {\n revert SenderNotAllowed();\n }\n }\n\n /// @inheritdoc IAuthentication\n function getActionId(bytes4 selector) public view override returns (bytes32) {\n // Each external function is dynamically assigned an action identifier as the hash of the disambiguator and the\n // function selector. Disambiguation is necessary to avoid potential collisions in the function selectors of\n // multiple contracts.\n return keccak256(abi.encodePacked(_actionIdDisambiguator, selector));\n }\n\n /**\n * @dev Derived contracts must implement this function to perform the actual access control logic.\n * @param actionId The action identifier associated with an external function\n * @param user The account performing the action\n * @return success True if the action is permitted\n */\n function _canPerform(bytes32 actionId, address user) internal view virtual returns (bool);\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Library of helper functions related to typecasting arrays.\nlibrary CastingHelpers {\n /// @dev Returns a native array of addresses as an IERC20[] array.\n function asIERC20(address[] memory addresses) internal pure returns (IERC20[] memory tokens) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n tokens := addresses\n }\n }\n\n /// @dev Returns an IERC20[] array as an address[] array.\n function asAddress(IERC20[] memory tokens) internal pure returns (address[] memory addresses) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n addresses := tokens\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { CastingHelpers } from \"./CastingHelpers.sol\";\n\nlibrary InputHelpers {\n /// @notice Arrays passed to a function and intended to be parallel have different lengths.\n error InputLengthMismatch();\n\n /**\n * @notice More than one non-zero value was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n * corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\n */\n error MultipleNonZeroInputs();\n\n /**\n * @notice No valid input was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n * corresponding to the token being added or removed. This error results if all entries are zero.\n */\n error AllZeroInputs();\n\n /**\n * @notice The tokens supplied to an array argument were not sorted in numerical order.\n * @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n * predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\n */\n error TokensNotSorted();\n\n function ensureInputLengthMatch(uint256 a, uint256 b) internal pure {\n if (a != b) {\n revert InputLengthMismatch();\n }\n }\n\n function ensureInputLengthMatch(uint256 a, uint256 b, uint256 c) internal pure {\n if (a != b || b != c) {\n revert InputLengthMismatch();\n }\n }\n\n // Find the single non-zero input; revert if there is not exactly one such value.\n function getSingleInputIndex(uint256[] memory maxAmountsIn) internal pure returns (uint256 inputIndex) {\n uint256 length = maxAmountsIn.length;\n inputIndex = length;\n\n for (uint256 i = 0; i < length; ++i) {\n if (maxAmountsIn[i] != 0) {\n if (inputIndex != length) {\n revert MultipleNonZeroInputs();\n }\n inputIndex = i;\n }\n }\n\n if (inputIndex >= length) {\n revert AllZeroInputs();\n }\n\n return inputIndex;\n }\n\n /**\n * @dev Sort an array of tokens, mutating in place (and also returning them).\n * This assumes the tokens have been (or will be) validated elsewhere for length\n * and non-duplication. All this does is the sorting.\n *\n * A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n * Could have also done \"manual\" comparisons for each of the cases, but this is\n * about the same number of operations, and more concise.\n *\n * This is less efficient for larger token count (i.e., above 4), but such pools should\n * be rare. And in any case, sorting is only done on-chain in test code.\n */\n function sortTokens(IERC20[] memory tokens) internal pure returns (IERC20[] memory) {\n for (uint256 i = 0; i < tokens.length - 1; ++i) {\n for (uint256 j = 0; j < tokens.length - i - 1; ++j) {\n if (tokens[j] > tokens[j + 1]) {\n // Swap if they're out of order.\n (tokens[j], tokens[j + 1]) = (tokens[j + 1], tokens[j]);\n }\n }\n }\n\n return tokens;\n }\n\n /// @dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness.\n function ensureSortedTokens(IERC20[] memory tokens) internal pure {\n if (tokens.length < 2) {\n return;\n }\n\n IERC20 previous = tokens[0];\n\n for (uint256 i = 1; i < tokens.length; ++i) {\n IERC20 current = tokens[i];\n\n if (previous > current) {\n revert TokensNotSorted();\n }\n\n previous = current;\n }\n }\n\n /// @dev Ensure an array of amounts is sorted. As above, does not validate length or uniqueness.\n function ensureSortedAmounts(uint256[] memory amounts) internal pure {\n if (amounts.length < 2) {\n return;\n }\n\n uint256 previous = amounts[0];\n\n for (uint256 i = 1; i < amounts.length; ++i) {\n uint256 current = amounts[i];\n\n if (previous > current) {\n revert TokensNotSorted();\n }\n\n previous = current;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice This library represents a data structure for packing a token's current raw and derived balances. A derived\n * balance can be the \"last\" live balance scaled18 of the raw token, or the balance of the wrapped version of the\n * token in a vault buffer, among others.\n *\n * @dev We could use a Solidity struct to pack balance values together in a single storage slot, but unfortunately\n * Solidity only allows for structs to live in either storage, calldata or memory. Because a memory struct still takes\n * up a slot in the stack (to store its memory location), and because the entire balance fits in a single stack slot\n * (two 128 bit values), using memory is strictly less gas performant. Therefore, we do manual packing and unpacking.\n *\n * We could also use custom types now, but given the simplicity here, and the existing EnumerableMap type, it seemed\n * easier to leave it as a bytes32.\n */\nlibrary PackedTokenBalance {\n // The 'rawBalance' portion of the balance is stored in the least significant 128 bits of a 256 bit word, while the\n // The 'derivedBalance' part uses the remaining 128 bits.\n uint256 private constant _MAX_BALANCE = 2 ** (128) - 1;\n\n /// @notice One of the balances is above the maximum value that can be stored.\n error BalanceOverflow();\n\n function getBalanceRaw(bytes32 balance) internal pure returns (uint256) {\n return uint256(balance) & _MAX_BALANCE;\n }\n\n function getBalanceDerived(bytes32 balance) internal pure returns (uint256) {\n return uint256(balance >> 128) & _MAX_BALANCE;\n }\n\n /// @dev Sets only the raw balance of balances and returns the new bytes32 balance.\n function setBalanceRaw(bytes32 balance, uint256 newBalanceRaw) internal pure returns (bytes32) {\n return toPackedBalance(newBalanceRaw, getBalanceDerived(balance));\n }\n\n /// @dev Sets only the derived balance of balances and returns the new bytes32 balance.\n function setBalanceDerived(bytes32 balance, uint256 newBalanceDerived) internal pure returns (bytes32) {\n return toPackedBalance(getBalanceRaw(balance), newBalanceDerived);\n }\n\n /// @dev Validates the size of `balanceRaw` and `balanceDerived`, then returns a packed balance bytes32.\n function toPackedBalance(uint256 balanceRaw, uint256 balanceDerived) internal pure returns (bytes32) {\n if (balanceRaw > _MAX_BALANCE || balanceDerived > _MAX_BALANCE) {\n revert BalanceOverflow();\n }\n\n return _pack(balanceRaw, balanceDerived);\n }\n\n /// @dev Decode and fetch both balances.\n function fromPackedBalance(bytes32 balance) internal pure returns (uint256 balanceRaw, uint256 balanceDerived) {\n return (getBalanceRaw(balance), getBalanceDerived(balance));\n }\n\n /// @dev Packs two uint128 values into a packed balance bytes32. It does not check balance sizes.\n function _pack(uint256 leastSignificant, uint256 mostSignificant) private pure returns (bytes32) {\n return bytes32((mostSignificant << 128) + leastSignificant);\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n// solhint-disable no-inline-assembly\n\n/// @notice Support `quoteAndRevert`: a v2-style query which always reverts, and returns the result in the return data.\nlibrary RevertCodec {\n /**\n * @notice On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\n * @param result The result of the query operation\n */\n error Result(bytes result);\n\n /// @notice Handle the \"reverted without a reason\" case (i.e., no return data).\n error ErrorSelectorNotFound();\n\n function catchEncodedResult(bytes memory resultRaw) internal pure returns (bytes memory) {\n bytes4 errorSelector = RevertCodec.parseSelector(resultRaw);\n if (errorSelector != Result.selector) {\n // Bubble up error message if the revert reason is not the expected one.\n RevertCodec.bubbleUpRevert(resultRaw);\n }\n\n uint256 resultRawLength = resultRaw.length;\n assembly (\"memory-safe\") {\n resultRaw := add(resultRaw, 0x04) // Slice the sighash\n mstore(resultRaw, sub(resultRawLength, 4)) // Set proper length\n }\n\n return abi.decode(resultRaw, (bytes));\n }\n\n /// @dev Returns the first 4 bytes in an array, reverting if the length is < 4.\n function parseSelector(bytes memory callResult) internal pure returns (bytes4 errorSelector) {\n if (callResult.length < 4) {\n revert ErrorSelectorNotFound();\n }\n assembly (\"memory-safe\") {\n errorSelector := mload(add(callResult, 0x20)) // Load the first 4 bytes from data (skip length offset)\n }\n }\n\n /// @dev Taken from Openzeppelin's Address.\n function bubbleUpRevert(bytes memory returnData) internal pure {\n // Look for revert reason and bubble it up if present.\n if (returnData.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly.\n\n assembly (\"memory-safe\") {\n let return_data_size := mload(returnData)\n revert(add(32, returnData), return_data_size)\n }\n } else {\n revert ErrorSelectorNotFound();\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVersion } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\";\n\n/**\n * @notice Retrieves a contract's version from storage.\n * @dev The version is set at deployment time and cannot be changed. It would be immutable, but immutable strings\n * are not yet supported.\n *\n * Contracts like factories and pools should have versions. These typically take the form of JSON strings containing\n * detailed information about the deployment. For instance:\n *\n * `{name: 'ChildChainGaugeFactory', version: 2, deployment: '20230316-child-chain-gauge-factory-v2'}`\n */\ncontract Version is IVersion {\n string private _version;\n\n constructor(string memory version_) {\n _setVersion(version_);\n }\n\n /**\n * @notice Getter for the version.\n * @return version The stored contract version\n */\n function version() external view returns (string memory) {\n return _version;\n }\n\n /// @dev Internal setter that allows this contract to be used in proxies.\n function _setVersion(string memory newVersion) internal {\n _version = newVersion;\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { LogExpMath } from \"./LogExpMath.sol\";\n\n/// @notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\nlibrary FixedPoint {\n /// @notice Attempted division by zero.\n error ZeroDivision();\n\n // solhint-disable no-inline-assembly\n // solhint-disable private-vars-leading-underscore\n\n uint256 internal constant ONE = 1e18; // 18 decimal places\n uint256 internal constant TWO = 2 * ONE;\n uint256 internal constant FOUR = 4 * ONE;\n uint256 internal constant MAX_POW_RELATIVE_ERROR = 10000; // 10^(-14)\n\n function mulDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n return product / ONE;\n }\n\n function mulUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n // Equivalent to:\n // result = product == 0 ? 0 : ((product - 1) / FixedPoint.ONE) + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), ONE), 1))\n }\n }\n\n function divDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Solidity 0.8 reverts with a Panic code (0x11) if the multiplication overflows.\n uint256 aInflated = a * ONE;\n\n // Solidity 0.8 reverts with a \"Division by Zero\" Panic code (0x12) if b is zero\n return aInflated / b;\n }\n\n function divUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n return mulDivUp(a, ONE, b);\n }\n\n /// @dev Return (a * b) / c, rounding up.\n function mulDivUp(uint256 a, uint256 b, uint256 c) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on c==0.\n if (c == 0) {\n revert ZeroDivision();\n }\n\n // Multiple overflow protection is done by Solidity 0.8.x.\n uint256 product = a * b;\n\n // The traditional divUp formula is:\n // divUp(x, y) := (x + y - 1) / y\n // To avoid intermediate overflow in the addition, we distribute the division and get:\n // divUp(x, y) := (x - 1) / y + 1\n // Note that this requires x != 0, if x == 0 then the result is zero\n //\n // Equivalent to:\n // result = a == 0 ? 0 : (a * b - 1) / c + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), c), 1))\n }\n }\n\n /**\n * @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n * invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n * This can occur in calculations with many successive multiplications and divisions, and\n * we want to minimize the number of operations by avoiding unnecessary scaling by ONE.\n */\n function divUpRaw(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on b==0.\n if (b == 0) {\n revert ZeroDivision();\n }\n\n // Equivalent to:\n // result = a == 0 ? 0 : 1 + (a - 1) / b\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(a)), add(1, div(sub(a, 1), b)))\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n * the true value (that is, the error function expected - actual is always positive).\n */\n function powDown(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulDown(x, x);\n } else if (y == FOUR) {\n uint256 square = mulDown(x, x);\n return mulDown(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n if (raw < maxError) {\n return 0;\n } else {\n unchecked {\n return raw - maxError;\n }\n }\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n * the true value (that is, the error function expected - actual is always negative).\n */\n function powUp(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulUp(x, x);\n } else if (y == FOUR) {\n uint256 square = mulUp(x, x);\n return mulUp(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n return raw + maxError;\n }\n }\n\n /**\n * @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n *\n * Useful when computing the complement for values with some level of relative error, as it strips this error and\n * prevents intermediate negative values.\n */\n function complement(uint256 x) internal pure returns (uint256 result) {\n // Equivalent to:\n // result = (x < ONE) ? (ONE - x) : 0\n assembly (\"memory-safe\") {\n result := mul(lt(x, ONE), sub(ONE, x))\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n// solhint-disable\n\n/**\n * @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n *\n * Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n * exponentiation and logarithm (where the base is Euler's number).\n *\n * All math operations are unchecked in order to save gas.\n *\n * @author Fernando Martinelli - @fernandomartinelli\n * @author Sergio Yuhjtman - @sergioyuhjtman\n * @author Daniel Fernandez - @dmf7z\n */\nlibrary LogExpMath {\n /// @notice This error is thrown when a base is not within an acceptable range.\n error BaseOutOfBounds();\n\n /// @notice This error is thrown when a exponent is not within an acceptable range.\n error ExponentOutOfBounds();\n\n /// @notice This error is thrown when the exponent * ln(base) is not within an acceptable range.\n error ProductOutOfBounds();\n\n /// @notice This error is thrown when an exponent used in the exp function is not within an acceptable range.\n error InvalidExponent();\n\n /// @notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\n error OutOfBounds();\n\n // All fixed point multiplications and divisions are inlined. This means we need to divide by ONE when multiplying\n // two numbers, and multiply by ONE when dividing them.\n\n // All arguments and return values are 18 decimal fixed point numbers.\n int256 constant ONE_18 = 1e18;\n\n // Internally, intermediate values are computed with higher precision as 20 decimal fixed point numbers, and in the\n // case of ln36, 36 decimals.\n int256 constant ONE_20 = 1e20;\n int256 constant ONE_36 = 1e36;\n\n // The domain of natural exponentiation is bound by the word size and number of decimals used.\n //\n // Because internally the result will be stored using 20 decimals, the largest possible result is\n // (2^255 - 1) / 10^20, which makes the largest exponent ln((2^255 - 1) / 10^20) = 130.700829182905140221.\n // The smallest possible result is 10^(-18), which makes largest negative argument\n // ln(10^(-18)) = -41.446531673892822312.\n // We use 130.0 and -41.0 to have some safety margin.\n int256 constant MAX_NATURAL_EXPONENT = 130e18;\n int256 constant MIN_NATURAL_EXPONENT = -41e18;\n\n // Bounds for ln_36's argument. Both ln(0.9) and ln(1.1) can be represented with 36 decimal places in a fixed point\n // 256 bit integer.\n int256 constant LN_36_LOWER_BOUND = ONE_18 - 1e17;\n int256 constant LN_36_UPPER_BOUND = ONE_18 + 1e17;\n\n uint256 constant MILD_EXPONENT_BOUND = 2 ** 254 / uint256(ONE_20);\n\n // 18 decimal constants\n int256 constant x0 = 128000000000000000000; // 2ˆ7\n int256 constant a0 = 38877084059945950922200000000000000000000000000000000000; // eˆ(x0) (no decimals)\n int256 constant x1 = 64000000000000000000; // 2ˆ6\n int256 constant a1 = 6235149080811616882910000000; // eˆ(x1) (no decimals)\n\n // 20 decimal constants\n int256 constant x2 = 3200000000000000000000; // 2ˆ5\n int256 constant a2 = 7896296018268069516100000000000000; // eˆ(x2)\n int256 constant x3 = 1600000000000000000000; // 2ˆ4\n int256 constant a3 = 888611052050787263676000000; // eˆ(x3)\n int256 constant x4 = 800000000000000000000; // 2ˆ3\n int256 constant a4 = 298095798704172827474000; // eˆ(x4)\n int256 constant x5 = 400000000000000000000; // 2ˆ2\n int256 constant a5 = 5459815003314423907810; // eˆ(x5)\n int256 constant x6 = 200000000000000000000; // 2ˆ1\n int256 constant a6 = 738905609893065022723; // eˆ(x6)\n int256 constant x7 = 100000000000000000000; // 2ˆ0\n int256 constant a7 = 271828182845904523536; // eˆ(x7)\n int256 constant x8 = 50000000000000000000; // 2ˆ-1\n int256 constant a8 = 164872127070012814685; // eˆ(x8)\n int256 constant x9 = 25000000000000000000; // 2ˆ-2\n int256 constant a9 = 128402541668774148407; // eˆ(x9)\n int256 constant x10 = 12500000000000000000; // 2ˆ-3\n int256 constant a10 = 113314845306682631683; // eˆ(x10)\n int256 constant x11 = 6250000000000000000; // 2ˆ-4\n int256 constant a11 = 106449445891785942956; // eˆ(x11)\n\n /**\n * @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n *\n * Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function pow(uint256 x, uint256 y) internal pure returns (uint256) {\n if (y == 0) {\n // We solve the 0^0 indetermination by making it equal one.\n return uint256(ONE_18);\n }\n\n if (x == 0) {\n return 0;\n }\n\n // Instead of computing x^y directly, we instead rely on the properties of logarithms and exponentiation to\n // arrive at that result. In particular, exp(ln(x)) = x, and ln(x^y) = y * ln(x). This means\n // x^y = exp(y * ln(x)).\n\n // The ln function takes a signed value, so we need to make sure x fits in the signed 256 bit range.\n if (x >> 255 != 0) {\n revert BaseOutOfBounds();\n }\n int256 x_int256 = int256(x);\n\n // We will compute y * ln(x) in a single step. Depending on the value of x, we can either use ln or ln_36. In\n // both cases, we leave the division by ONE_18 (due to fixed point multiplication) to the end.\n\n // This prevents y * ln(x) from overflowing, and at the same time guarantees y fits in the signed 256 bit range.\n if (y >= MILD_EXPONENT_BOUND) {\n revert ExponentOutOfBounds();\n }\n int256 y_int256 = int256(y);\n\n int256 logx_times_y;\n unchecked {\n if (LN_36_LOWER_BOUND < x_int256 && x_int256 < LN_36_UPPER_BOUND) {\n int256 ln_36_x = _ln_36(x_int256);\n\n // ln_36_x has 36 decimal places, so multiplying by y_int256 isn't as straightforward, since we can't just\n // bring y_int256 to 36 decimal places, as it might overflow. Instead, we perform two 18 decimal\n // multiplications and add the results: one with the first 18 decimals of ln_36_x, and one with the\n // (downscaled) last 18 decimals.\n logx_times_y = ((ln_36_x / ONE_18) * y_int256 + ((ln_36_x % ONE_18) * y_int256) / ONE_18);\n } else {\n logx_times_y = _ln(x_int256) * y_int256;\n }\n logx_times_y /= ONE_18;\n }\n\n // Finally, we compute exp(y * ln(x)) to arrive at x^y\n if (!(MIN_NATURAL_EXPONENT <= logx_times_y && logx_times_y <= MAX_NATURAL_EXPONENT)) {\n revert ProductOutOfBounds();\n }\n\n return uint256(exp(logx_times_y));\n }\n\n /**\n * @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n *\n * Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function exp(int256 x) internal pure returns (int256) {\n if (!(x >= MIN_NATURAL_EXPONENT && x <= MAX_NATURAL_EXPONENT)) {\n revert InvalidExponent();\n }\n\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (x < 0) {\n // We only handle positive exponents: e^(-x) is computed as 1 / e^x. We can safely make x positive since it\n // fits in the signed 256 bit range (as it is larger than MIN_NATURAL_EXPONENT). In the negative\n // exponent case, compute e^x, then return 1 / result.\n unchecked {\n x = -x;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that e^(x+y) = e^x * e^y to decompose x into a sum of powers of two, which we call x_n,\n // where x_n == 2^(7 - n), and e^x_n = a_n has been precomputed. We choose the first x_n, x0, to equal 2^7\n // because all larger powers are larger than MAX_NATURAL_EXPONENT, and therefore not present in the\n // decomposition.\n // At the end of this process we will have the product of all e^x_n = a_n that apply, and the remainder of this\n // decomposition, which will be lower than the smallest x_n.\n // exp(x) = k_0 * a_0 * k_1 * a_1 * ... + k_n * a_n * exp(remainder), where each k_n equals either 0 or 1.\n // We mutate x by subtracting x_n, making it the remainder of the decomposition.\n\n // The first two a_n (e^(2^7) and e^(2^6)) are too large if stored as 18 decimal numbers, and could cause\n // intermediate overflows. Instead we store them as plain integers, with 0 decimals.\n // Additionally, x0 + x1 is larger than MAX_NATURAL_EXPONENT, which means they will not both be present in the\n // decomposition.\n\n // For each x_n, we test if that term is present in the decomposition (if x is larger than it), and if so deduct\n // it and compute the accumulated product.\n\n int256 firstAN;\n unchecked {\n if (x >= x0) {\n x -= x0;\n firstAN = a0;\n } else if (x >= x1) {\n x -= x1;\n firstAN = a1;\n } else {\n firstAN = 1; // One with no decimal places\n }\n\n // We now transform x into a 20 decimal fixed point number, to have enhanced precision when computing the\n // smaller terms.\n x *= 100;\n }\n\n // `product` is the accumulated product of all a_n (except a0 and a1), which starts at 20 decimal fixed point\n // one. Recall that fixed point multiplication requires dividing by ONE_20.\n int256 product = ONE_20;\n\n unchecked {\n if (x >= x2) {\n x -= x2;\n product = (product * a2) / ONE_20;\n }\n if (x >= x3) {\n x -= x3;\n product = (product * a3) / ONE_20;\n }\n if (x >= x4) {\n x -= x4;\n product = (product * a4) / ONE_20;\n }\n if (x >= x5) {\n x -= x5;\n product = (product * a5) / ONE_20;\n }\n if (x >= x6) {\n x -= x6;\n product = (product * a6) / ONE_20;\n }\n if (x >= x7) {\n x -= x7;\n product = (product * a7) / ONE_20;\n }\n if (x >= x8) {\n x -= x8;\n product = (product * a8) / ONE_20;\n }\n if (x >= x9) {\n x -= x9;\n product = (product * a9) / ONE_20;\n }\n }\n\n // x10 and x11 are unnecessary here since we have high enough precision already.\n\n // Now we need to compute e^x, where x is small (in particular, it is smaller than x9). We use the Taylor series\n // expansion for e^x: 1 + x + (x^2 / 2!) + (x^3 / 3!) + ... + (x^n / n!).\n\n int256 seriesSum = ONE_20; // The initial one in the sum, with 20 decimal places.\n int256 term; // Each term in the sum, where the nth term is (x^n / n!).\n\n // The first term is simply x.\n term = x;\n unchecked {\n seriesSum += term;\n\n // Each term (x^n / n!) equals the previous one times x, divided by n. Since x is a fixed point number,\n // multiplying by it requires dividing by ONE_20, but dividing by the non-fixed point n values does not.\n\n term = ((term * x) / ONE_20) / 2;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 3;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 4;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 5;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 6;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 7;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 8;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 9;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 10;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 11;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 12;\n seriesSum += term;\n\n // 12 Taylor terms are sufficient for 18 decimal precision.\n\n // We now have the first a_n (with no decimals), and the product of all other a_n present, and the Taylor\n // approximation of the exponentiation of the remainder (both with 20 decimals). All that remains is to multiply\n // all three (one 20 decimal fixed point multiplication, dividing by ONE_20, and one integer multiplication),\n // and then drop two digits to return an 18 decimal value.\n\n int256 result = (((product * seriesSum) / ONE_20) * firstAN) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? (ONE_18 * ONE_18) / result : result;\n }\n }\n\n /// @dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument.\n function log(int256 arg, int256 base) internal pure returns (int256) {\n // This performs a simple base change: log(arg, base) = ln(arg) / ln(base).\n\n // Both logBase and logArg are computed as 36 decimal fixed point numbers, either by using ln_36, or by\n // upscaling.\n\n int256 logBase;\n unchecked {\n if (LN_36_LOWER_BOUND < base && base < LN_36_UPPER_BOUND) {\n logBase = _ln_36(base);\n } else {\n logBase = _ln(base) * ONE_18;\n }\n }\n\n int256 logArg;\n unchecked {\n if (LN_36_LOWER_BOUND < arg && arg < LN_36_UPPER_BOUND) {\n logArg = _ln_36(arg);\n } else {\n logArg = _ln(arg) * ONE_18;\n }\n\n // When dividing, we multiply by ONE_18 to arrive at a result with 18 decimal places\n return (logArg * ONE_18) / logBase;\n }\n }\n\n /// @dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function ln(int256 a) internal pure returns (int256) {\n // The real natural logarithm is not defined for negative numbers or zero.\n if (a <= 0) {\n revert OutOfBounds();\n }\n if (LN_36_LOWER_BOUND < a && a < LN_36_UPPER_BOUND) {\n unchecked {\n return _ln_36(a) / ONE_18;\n }\n } else {\n return _ln(a);\n }\n }\n\n /// @dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function _ln(int256 a) private pure returns (int256) {\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (a < ONE_18) {\n // Since ln(a^k) = k * ln(a), we can compute ln(a) as ln(a) = ln((1/a)^(-1)) = - ln((1/a)). If a is less\n // than one, 1/a will be greater than one, so in this case we compute ln(1/a) and negate the final result.\n unchecked {\n a = (ONE_18 * ONE_18) / a;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that ln^(a * b) = ln(a) + ln(b) to decompose ln(a) into a sum of powers of two, which\n // we call x_n, where x_n == 2^(7 - n), which are the natural logarithm of precomputed quantities a_n (that is,\n // ln(a_n) = x_n). We choose the first x_n, x0, to equal 2^7 because the exponential of all larger powers cannot\n // be represented as 18 fixed point decimal numbers in 256 bits, and are therefore larger than a.\n // At the end of this process we will have the sum of all x_n = ln(a_n) that apply, and the remainder of this\n // decomposition, which will be lower than the smallest a_n.\n // ln(a) = k_0 * x_0 + k_1 * x_1 + ... + k_n * x_n + ln(remainder), where each k_n equals either 0 or 1.\n // We mutate a by subtracting a_n, making it the remainder of the decomposition.\n\n // For reasons related to how `exp` works, the first two a_n (e^(2^7) and e^(2^6)) are not stored as fixed point\n // numbers with 18 decimals, but instead as plain integers with 0 decimals, so we need to multiply them by\n // ONE_18 to convert them to fixed point.\n // For each a_n, we test if that term is present in the decomposition (if a is larger than it), and if so divide\n // by it and compute the accumulated sum.\n\n int256 sum = 0;\n unchecked {\n if (a >= a0 * ONE_18) {\n a /= a0; // Integer, not fixed point division\n sum += x0;\n }\n\n if (a >= a1 * ONE_18) {\n a /= a1; // Integer, not fixed point division\n sum += x1;\n }\n\n // All other a_n and x_n are stored as 20 digit fixed point numbers, so we convert the sum and a to this format.\n sum *= 100;\n a *= 100;\n\n // Because further a_n are 20 digit fixed point numbers, we multiply by ONE_20 when dividing by them.\n\n if (a >= a2) {\n a = (a * ONE_20) / a2;\n sum += x2;\n }\n\n if (a >= a3) {\n a = (a * ONE_20) / a3;\n sum += x3;\n }\n\n if (a >= a4) {\n a = (a * ONE_20) / a4;\n sum += x4;\n }\n\n if (a >= a5) {\n a = (a * ONE_20) / a5;\n sum += x5;\n }\n\n if (a >= a6) {\n a = (a * ONE_20) / a6;\n sum += x6;\n }\n\n if (a >= a7) {\n a = (a * ONE_20) / a7;\n sum += x7;\n }\n\n if (a >= a8) {\n a = (a * ONE_20) / a8;\n sum += x8;\n }\n\n if (a >= a9) {\n a = (a * ONE_20) / a9;\n sum += x9;\n }\n\n if (a >= a10) {\n a = (a * ONE_20) / a10;\n sum += x10;\n }\n\n if (a >= a11) {\n a = (a * ONE_20) / a11;\n sum += x11;\n }\n }\n\n // a is now a small number (smaller than a_11, which roughly equals 1.06). This means we can use a Taylor series\n // that converges rapidly for values of `a` close to one - the same one used in ln_36.\n // Let z = (a - 1) / (a + 1).\n // ln(a) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 20 digit fixed point division requires multiplying by ONE_20, and multiplication requires\n // division by ONE_20.\n unchecked {\n int256 z = ((a - ONE_20) * ONE_20) / (a + ONE_20);\n int256 z_squared = (z * z) / ONE_20;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 11;\n\n // 6 Taylor terms are sufficient for 36 decimal precision.\n\n // Finally, we multiply by 2 (non fixed point) to compute ln(remainder)\n seriesSum *= 2;\n\n // We now have the sum of all x_n present, and the Taylor approximation of the logarithm of the remainder (both\n // with 20 decimals). All that remains is to sum these two, and then drop two digits to return a 18 decimal\n // value.\n\n int256 result = (sum + seriesSum) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? -result : result;\n }\n }\n\n /**\n * @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n * for x close to one.\n *\n * Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND.\n */\n function _ln_36(int256 x) private pure returns (int256) {\n // Since ln(1) = 0, a value of x close to one will yield a very small result, which makes using 36 digits\n // worthwhile.\n\n // First, we transform x to a 36 digit fixed point value.\n unchecked {\n x *= ONE_18;\n\n // We will use the following Taylor expansion, which converges very rapidly. Let z = (x - 1) / (x + 1).\n // ln(x) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 36 digit fixed point division requires multiplying by ONE_36, and multiplication requires\n // division by ONE_36.\n int256 z = ((x - ONE_36) * ONE_36) / (x + ONE_36);\n int256 z_squared = (z * z) / ONE_36;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 11;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 13;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 15;\n\n // 8 Taylor terms are sufficient for 36 decimal precision.\n\n // All that remains is multiplying by 2 (non fixed point).\n return seriesSum * 2;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Library for managing sets of primitive types.\n * @dev See https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types.\n *\n * Based on the EnumerableSet library from OpenZeppelin Contracts, altered to remove the base private functions that\n * work on bytes32, replacing them with a native implementation for address values, to reduce bytecode size and\n * runtime costs.\n *\n * The `unchecked_at` function was also added, which allows for more gas efficient data reads in some scenarios.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n */\nlibrary EnumerableSet {\n // The original OpenZeppelin implementation uses a generic Set type with bytes32 values: this was replaced with\n // AddressSet, which uses address keys natively, resulting in more dense bytecode.\n\n // solhint-disable func-name-mixedcase\n\n struct AddressSet {\n // Storage of set values.\n address[] _values;\n // Position of the value in the `values` array, plus 1 because index 0\n // means a value is not in the set.\n mapping(address addressKey => uint256 indexValue) _indexes;\n }\n\n /// @notice An index is beyond the current bounds of the set.\n error IndexOutOfBounds();\n\n /// @notice An element that is not present in the set.\n error ElementNotFound();\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, if it was not already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n if (!contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value.\n set._indexes[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n * Returns true if the value was removed from the set; i.e., if it was present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n // We read and store the value's index to prevent multiple reads from the same storage slot.\n uint256 valueIndex = set._indexes[value];\n\n if (valueIndex != 0) {\n // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n uint256 toDeleteIndex;\n uint256 lastIndex;\n\n unchecked {\n toDeleteIndex = valueIndex - 1;\n lastIndex = set._values.length - 1;\n }\n\n // The swap is only necessary if we're not removing the last element.\n if (toDeleteIndex != lastIndex) {\n address lastValue = set._values[lastIndex];\n\n // Move the last entry to the index of the entry to delete.\n set._values[toDeleteIndex] = lastValue;\n // Update the index for the moved value\n set._indexes[lastValue] = valueIndex; // = toDeleteIndex + 1; all indices are 1-based.\n }\n\n // Delete the slot where the moved value was stored.\n set._values.pop();\n\n // Delete the index for the deleted slot.\n delete set._indexes[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /// @dev Returns true if the value is in the set. O(1).\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return set._indexes[value] != 0;\n }\n\n /// @dev Returns the number of values on the set. O(1).\n function length(AddressSet storage set) internal view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n if (index >= set._values.length) {\n revert IndexOutOfBounds();\n }\n\n return unchecked_at(set, index);\n }\n\n /**\n * @dev Same as {at}, except this doesn't revert if `index` it outside of the set (i.e. if it is equal or larger\n * than {length}). O(1).\n *\n * This function performs one less storage read than {at}, but should only be used when `index` is known to be\n * within bounds.\n */\n function unchecked_at(AddressSet storage set, uint256 index) internal view returns (address) {\n return set._values[index];\n }\n\n /// @dev Return the index of an element in the set, or revert if not found.\n function indexOf(AddressSet storage set, address value) internal view returns (uint256) {\n uint256 rawIndex = set._indexes[value];\n\n if (rawIndex == 0) {\n revert ElementNotFound();\n }\n\n unchecked {\n return rawIndex - 1;\n }\n }\n\n /**\n * @dev Same as {indexOf}, except this doesn't revert if the element isn't present in the set.\n * In this case, it returns 0.\n *\n * This function performs one less storage read than {indexOf}, but should only be used when `index` is known to be\n * within bounds.\n */\n function unchecked_indexOf(AddressSet storage set, address value) internal view returns (uint256) {\n uint256 rawIndex = set._indexes[value];\n\n unchecked {\n return rawIndex == 0 ? 0 : rawIndex - 1;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\nimport { StorageSlotExtension } from \"./StorageSlotExtension.sol\";\n\n/**\n * @notice Variant of {ReentrancyGuard} that uses transient storage.\n * @dev NOTE: This variant only works on networks where EIP-1153 is available.\n */\nabstract contract ReentrancyGuardTransient {\n using StorageSlotExtension for *;\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.ReentrancyGuard\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant _REENTRANCY_GUARD_STORAGE =\n 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00;\n\n /// @notice Unauthorized reentrant call.\n error ReentrancyGuardReentrantCall();\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be NOT_ENTERED.\n if (_reentrancyGuardEntered()) {\n revert ReentrancyGuardReentrantCall();\n }\n\n // Any calls to nonReentrant after this point will fail.\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(true);\n }\n\n function _nonReentrantAfter() private {\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(false);\n }\n\n /**\n * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n * `nonReentrant` function in the call stack.\n */\n function _reentrancyGuardEntered() internal view returns (bool) {\n return _REENTRANCY_GUARD_STORAGE.asBoolean().tload();\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n * @dev TIP: Consider using this library along with {SlotDerivation}.\n */\nlibrary StorageSlotExtension {\n struct Int256Slot {\n int256 value;\n }\n\n /// @dev Returns an `Int256Slot` with member `value` located at `slot`.\n function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /// @dev Custom type that represents a slot holding an address.\n type AddressSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a AddressSlotType.\n function asAddress(bytes32 slot) internal pure returns (AddressSlotType) {\n return AddressSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a boolean.\n type BooleanSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a BooleanSlotType.\n function asBoolean(bytes32 slot) internal pure returns (BooleanSlotType) {\n return BooleanSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a bytes32.\n type Bytes32SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Bytes32SlotType.\n function asBytes32(bytes32 slot) internal pure returns (Bytes32SlotType) {\n return Bytes32SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a uint256.\n type Uint256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Uint256SlotType.\n function asUint256(bytes32 slot) internal pure returns (Uint256SlotType) {\n return Uint256SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding an int256.\n type Int256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to an Int256SlotType.\n function asInt256(bytes32 slot) internal pure returns (Int256SlotType) {\n return Int256SlotType.wrap(slot);\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(AddressSlotType slot) internal view returns (address value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(AddressSlotType slot, address value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(BooleanSlotType slot) internal view returns (bool value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(BooleanSlotType slot, bool value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Bytes32SlotType slot) internal view returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Bytes32SlotType slot, bytes32 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Uint256SlotType slot) internal view returns (uint256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Uint256SlotType slot, uint256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Int256SlotType slot) internal view returns (int256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Int256SlotType slot, int256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\ncontract ERC20TestToken is ERC20 {\n uint8 private immutable _decimals;\n\n /// @dev Simulate tokens that don't allow zero transfers.\n error ZeroTransfer();\n\n constructor(string memory name, string memory symbol, uint8 decimals_) ERC20(name, symbol) {\n _decimals = decimals_;\n }\n\n function decimals() public view override returns (uint8) {\n return _decimals;\n }\n\n function mint(address recipient, uint256 amount) external {\n _mint(recipient, amount);\n }\n\n function burn(address sender, uint256 amount) external {\n _burn(sender, amount);\n }\n\n function transfer(address to, uint256 value) public override returns (bool) {\n if (value == 0) {\n revert ZeroTransfer();\n }\n\n return super.transfer(to, value);\n }\n\n function transferFrom(address from, address to, uint256 value) public override returns (bool) {\n if (value == 0) {\n revert ZeroTransfer();\n }\n\n return super.transferFrom(from, to, value);\n }\n}\n"},"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { Authentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\";\n\n/// @dev Base contract for performing access control on external functions within pools.\nabstract contract CommonAuthentication is Authentication {\n /// @dev Vault cannot be address(0).\n error VaultNotSet();\n\n IVault private immutable _vault;\n\n /// @notice Caller must be the swapFeeManager, if defined. Otherwise, default to governance.\n modifier onlySwapFeeManagerOrGovernance(address pool) {\n address roleAddress = _vault.getPoolRoleAccounts(pool).swapFeeManager;\n _ensureAuthenticatedByExclusiveRole(pool, roleAddress);\n _;\n }\n\n constructor(IVault vault, bytes32 actionIdDisambiguator) Authentication(actionIdDisambiguator) {\n if (address(vault) == address(0)) {\n revert VaultNotSet();\n }\n\n _vault = vault;\n }\n\n function _getVault() internal view returns (IVault) {\n return _vault;\n }\n\n // Access control is delegated to the Authorizer in the `_canPerform` functions.\n function _canPerform(bytes32 actionId, address user) internal view override returns (bool) {\n return _vault.getAuthorizer().canPerform(actionId, user, address(this));\n }\n\n function _canPerform(bytes32 actionId, address account, address where) internal view returns (bool) {\n return _vault.getAuthorizer().canPerform(actionId, account, where);\n }\n\n /// @dev Ensure the sender is the roleAccount, or default to governance if roleAccount is address(0).\n function _ensureAuthenticatedByExclusiveRole(address where, address roleAccount) internal view {\n if (roleAccount == address(0)) {\n // Defer to governance if no role assigned.\n if (_canPerform(getActionId(msg.sig), msg.sender, where) == false) {\n revert SenderNotAllowed();\n }\n } else if (msg.sender != roleAccount) {\n revert SenderNotAllowed();\n }\n }\n\n /// @dev Ensure the sender is either the role manager, or is authorized by governance (non-exclusive).\n function _ensureAuthenticatedByRole(address where, address roleAccount) internal view {\n // If the sender is not the delegated manager for the role, defer to governance.\n if (msg.sender != roleAccount) {\n if (_canPerform(getActionId(msg.sig), msg.sender, where) == false) {\n revert SenderNotAllowed();\n }\n }\n // (else) if the sender is the delegated manager, proceed.\n }\n}\n"},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport {\n FEE_SCALING_FACTOR,\n MAX_FEE_PERCENTAGE,\n PoolRoleAccounts\n} from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nimport { SingletonAuthentication } from \"./SingletonAuthentication.sol\";\nimport { VaultGuard } from \"./VaultGuard.sol\";\n\n/**\n * @notice Helper contract to manage protocol and creator fees outside the Vault.\n * @dev This contract stores global default protocol swap and yield fees, and also tracks the values of those fees\n * for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but\n * pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`).\n *\n * The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows\n * the component fee percentages, and how to compute the aggregate from the components. This is done for performance\n * reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \"cut\", and stores the\n * fee amounts separately from the pool balances.\n *\n * The pool creator fees are \"net\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee\n * percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided\n * between the pool creator and the LPs.\n *\n * There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this\n * contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any\n * time by governance and the pool creator, respectively.\n *\n * Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero\n * if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator\n * fees are computed \"net\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible.\n * A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool\n * creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs.\n *\n * This contract is deployed with the Vault, but can be changed by governance.\n */\ncontract ProtocolFeeController is\n IProtocolFeeController,\n SingletonAuthentication,\n ReentrancyGuardTransient,\n VaultGuard\n{\n using FixedPoint for uint256;\n using SafeERC20 for IERC20;\n using SafeCast for *;\n\n enum ProtocolFeeType {\n SWAP,\n YIELD\n }\n\n /**\n * @notice Fee configuration stored in the swap and yield fee mappings.\n * @dev Instead of storing only the fee in the mapping, also store a flag to indicate whether the fee has been\n * set by governance through a permissioned call. (The fee is stored in 64-bits, so that the struct fits\n * within a single slot.)\n *\n * We know the percentage is an 18-decimal FP value, which only takes 60 bits, so it's guaranteed to fit,\n * and we can do simple casts to truncate the high bits without needed SafeCast.\n *\n * We want to enable permissionless updates for pools, so that it is less onerous to update potentially\n * hundreds of pools if the global protocol fees change. However, we don't want to overwrite pools that\n * have had their fee percentages manually set by the DAO (i.e., after off-chain negotiation and agreement).\n *\n * @param feePercentage The raw swap or yield fee percentage\n * @param isOverride When set, this fee is controlled by governance, and cannot be changed permissionlessly\n */\n struct PoolFeeConfig {\n uint64 feePercentage;\n bool isOverride;\n }\n\n // Maximum protocol swap fee percentage. FixedPoint.ONE corresponds to a 100% fee.\n uint256 public constant MAX_PROTOCOL_SWAP_FEE_PERCENTAGE = 50e16; // 50%\n\n // Maximum protocol yield fee percentage.\n uint256 public constant MAX_PROTOCOL_YIELD_FEE_PERCENTAGE = 50e16; // 50%\n\n // Maximum pool creator (swap, yield) fee percentage.\n uint256 public constant MAX_CREATOR_FEE_PERCENTAGE = 99.999e16; // 99.999%\n\n // Global protocol swap fee.\n uint256 private _globalProtocolSwapFeePercentage;\n\n // Global protocol yield fee.\n uint256 private _globalProtocolYieldFeePercentage;\n\n // Store the pool-specific swap fee percentages (the Vault's poolConfigBits stores the aggregate percentage).\n mapping(address pool => PoolFeeConfig swapFeeConfig) internal _poolProtocolSwapFeePercentages;\n\n // Store the pool-specific yield fee percentages (the Vault's poolConfigBits stores the aggregate percentage).\n mapping(address pool => PoolFeeConfig yieldFeeConfig) internal _poolProtocolYieldFeePercentages;\n\n // Explicitly mark a pool as registered. This will enable future migrations to safely update protected state.\n mapping(address pool => bool isRegistered) internal _registeredPools;\n\n // Pool creator swap fee percentages for each pool.\n mapping(address pool => uint256 poolCreatorSwapFee) internal _poolCreatorSwapFeePercentages;\n\n // Pool creator yield fee percentages for each pool.\n mapping(address pool => uint256 poolCreatorYieldFee) internal _poolCreatorYieldFeePercentages;\n\n // Disaggregated protocol fees (from swap and yield), available for withdrawal by governance.\n mapping(address pool => mapping(IERC20 poolToken => uint256 feeAmount)) internal _protocolFeeAmounts;\n\n // Disaggregated pool creator fees (from swap and yield), available for withdrawal by the pool creator.\n mapping(address pool => mapping(IERC20 poolToken => uint256 feeAmount)) internal _poolCreatorFeeAmounts;\n\n /**\n * @notice Prevent pool data from being registered more than once.\n * @dev This can happen if there is an error in the migration, or if governance somehow grants permission to\n * `migratePool`, which should never happen.\n *\n * @param pool The pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /// @notice Migration source cannot be this contract.\n error InvalidMigrationSource();\n\n // Ensure that the caller is the pool creator.\n modifier onlyPoolCreator(address pool) {\n _ensureCallerIsPoolCreator(pool);\n _;\n }\n\n // Validate the swap fee percentage against the maximum.\n modifier withValidSwapFee(uint256 newSwapFeePercentage) {\n if (newSwapFeePercentage > MAX_PROTOCOL_SWAP_FEE_PERCENTAGE) {\n revert ProtocolSwapFeePercentageTooHigh();\n }\n _ensureValidPrecision(newSwapFeePercentage);\n _;\n }\n\n // Validate the yield fee percentage against the maximum.\n modifier withValidYieldFee(uint256 newYieldFeePercentage) {\n if (newYieldFeePercentage > MAX_PROTOCOL_YIELD_FEE_PERCENTAGE) {\n revert ProtocolYieldFeePercentageTooHigh();\n }\n _ensureValidPrecision(newYieldFeePercentage);\n _;\n }\n\n modifier withValidPoolCreatorFee(uint256 newPoolCreatorFeePercentage) {\n if (newPoolCreatorFeePercentage > MAX_CREATOR_FEE_PERCENTAGE) {\n revert PoolCreatorFeePercentageTooHigh();\n }\n _;\n }\n\n // Force collection and disaggregation (e.g., before changing protocol fee percentages).\n modifier withLatestFees(address pool) {\n collectAggregateFees(pool);\n _;\n }\n\n constructor(\n IVault vault_,\n uint256 initialGlobalSwapFeePercentage,\n uint256 initialGlobalYieldFeePercentage\n ) SingletonAuthentication(vault_) VaultGuard(vault_) {\n _setGlobalProtocolSwapFeePercentage(initialGlobalSwapFeePercentage);\n _setGlobalProtocolYieldFeePercentage(initialGlobalYieldFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function vault() external view returns (IVault) {\n return _vault;\n }\n\n /// @inheritdoc IProtocolFeeController\n function collectAggregateFees(address pool) public {\n _vault.unlock(abi.encodeCall(ProtocolFeeController.collectAggregateFeesHook, pool));\n }\n\n /**\n * @dev Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit\n * for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount\n * transferred so that the transaction settles when the hook returns.\n */\n function collectAggregateFeesHook(address pool) external onlyVault {\n (uint256[] memory totalSwapFees, uint256[] memory totalYieldFees) = _vault.collectAggregateFees(pool);\n _receiveAggregateFees(pool, totalSwapFees, totalYieldFees);\n }\n\n /**\n * @notice Settle fee credits from the Vault.\n * @dev This must be called after calling `collectAggregateFees` in the Vault. Note that since charging protocol\n * fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection\n * happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations. The Vault\n * differentiates between swap and yield fees (since they can have different percentage values); the Controller\n * combines swap and yield fees, then allocates the total between the protocol and pool creator.\n *\n * @param pool The address of the pool on which the swap fees were charged\n * @param swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @param yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function _receiveAggregateFees(\n address pool,\n uint256[] memory swapFeeAmounts,\n uint256[] memory yieldFeeAmounts\n ) internal {\n _receiveAggregateFees(pool, ProtocolFeeType.SWAP, swapFeeAmounts);\n _receiveAggregateFees(pool, ProtocolFeeType.YIELD, yieldFeeAmounts);\n }\n\n function _receiveAggregateFees(address pool, ProtocolFeeType feeType, uint256[] memory feeAmounts) private {\n // There are two cases when we don't need to split fees (in which case we can save gas and avoid rounding\n // errors by skipping calculations) if either the protocol or pool creator fee percentage is zero.\n\n uint256 protocolFeePercentage = feeType == ProtocolFeeType.SWAP\n ? _poolProtocolSwapFeePercentages[pool].feePercentage\n : _poolProtocolYieldFeePercentages[pool].feePercentage;\n\n uint256 poolCreatorFeePercentage = feeType == ProtocolFeeType.SWAP\n ? _poolCreatorSwapFeePercentages[pool]\n : _poolCreatorYieldFeePercentages[pool];\n\n uint256 aggregateFeePercentage;\n\n bool needToSplitFees = poolCreatorFeePercentage > 0 && protocolFeePercentage > 0;\n if (needToSplitFees) {\n // Calculate once, outside the loop.\n aggregateFeePercentage = _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n for (uint256 i = 0; i < numTokens; ++i) {\n if (feeAmounts[i] > 0) {\n IERC20 token = poolTokens[i];\n\n _vault.sendTo(token, address(this), feeAmounts[i]);\n\n // It should be easier for off-chain processes to handle two events, rather than parsing the type\n // out of a single event.\n if (feeType == ProtocolFeeType.SWAP) {\n emit ProtocolSwapFeeCollected(pool, token, feeAmounts[i]);\n } else {\n emit ProtocolYieldFeeCollected(pool, token, feeAmounts[i]);\n }\n\n if (needToSplitFees) {\n // The Vault took a single \"cut\" for the aggregate total percentage (protocol + pool creator) for\n // this fee type (swap or yield). The first step is to reconstruct this total fee amount. Then we\n // need to \"disaggregate\" this total, dividing it between the protocol and pool creator according\n // to their individual percentages. We do this by computing the protocol portion first, then\n // assigning the remainder to the pool creator.\n uint256 totalFeeAmountRaw = feeAmounts[i].divUp(aggregateFeePercentage);\n uint256 protocolPortion = totalFeeAmountRaw.mulUp(protocolFeePercentage);\n\n _protocolFeeAmounts[pool][token] += protocolPortion;\n _poolCreatorFeeAmounts[pool][token] += feeAmounts[i] - protocolPortion;\n } else {\n // If we don't need to split, one of them must be zero.\n if (poolCreatorFeePercentage == 0) {\n _protocolFeeAmounts[pool][token] += feeAmounts[i];\n } else {\n _poolCreatorFeeAmounts[pool][token] += feeAmounts[i];\n }\n }\n }\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256) {\n return _globalProtocolSwapFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeeController\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256) {\n return _globalProtocolYieldFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeeController\n function isPoolRegistered(address pool) external view returns (bool) {\n return _registeredPools[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolProtocolSwapFeeInfo(address pool) external view returns (uint256, bool) {\n PoolFeeConfig memory config = _poolProtocolSwapFeePercentages[pool];\n\n return (config.feePercentage, config.isOverride);\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolProtocolYieldFeeInfo(address pool) external view returns (uint256, bool) {\n PoolFeeConfig memory config = _poolProtocolYieldFeePercentages[pool];\n\n return (config.feePercentage, config.isOverride);\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorSwapFeePercentage(address pool) external view returns (uint256) {\n return _poolCreatorSwapFeePercentages[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorYieldFeePercentage(address pool) external view returns (uint256) {\n return _poolCreatorYieldFeePercentages[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts) {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n feeAmounts = new uint256[](numTokens);\n for (uint256 i = 0; i < numTokens; ++i) {\n feeAmounts[i] = _protocolFeeAmounts[pool][poolTokens[i]];\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts) {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n feeAmounts = new uint256[](numTokens);\n for (uint256 i = 0; i < numTokens; ++i) {\n feeAmounts[i] = _poolCreatorFeeAmounts[pool][poolTokens[i]];\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256) {\n return _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function updateProtocolSwapFeePercentage(address pool) external withLatestFees(pool) {\n PoolFeeConfig memory feeConfig = _poolProtocolSwapFeePercentages[pool];\n uint256 globalProtocolSwapFee = _globalProtocolSwapFeePercentage;\n\n if (feeConfig.isOverride == false && globalProtocolSwapFee != feeConfig.feePercentage) {\n _updatePoolSwapFeePercentage(pool, globalProtocolSwapFee, false);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function updateProtocolYieldFeePercentage(address pool) external withLatestFees(pool) {\n PoolFeeConfig memory feeConfig = _poolProtocolYieldFeePercentages[pool];\n uint256 globalProtocolYieldFee = _globalProtocolYieldFeePercentage;\n\n if (feeConfig.isOverride == false && globalProtocolYieldFee != feeConfig.feePercentage) {\n _updatePoolYieldFeePercentage(pool, globalProtocolYieldFee, false);\n }\n }\n\n function _getAggregateFeePercentage(address pool, ProtocolFeeType feeType) internal view returns (uint256) {\n uint256 protocolFeePercentage;\n uint256 poolCreatorFeePercentage;\n\n if (feeType == ProtocolFeeType.SWAP) {\n protocolFeePercentage = _poolProtocolSwapFeePercentages[pool].feePercentage;\n poolCreatorFeePercentage = _poolCreatorSwapFeePercentages[pool];\n } else {\n protocolFeePercentage = _poolProtocolYieldFeePercentages[pool].feePercentage;\n poolCreatorFeePercentage = _poolCreatorYieldFeePercentages[pool];\n }\n\n return _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n function _computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) internal pure returns (uint256 aggregateFeePercentage) {\n aggregateFeePercentage =\n protocolFeePercentage +\n protocolFeePercentage.complement().mulDown(poolCreatorFeePercentage);\n\n // Protocol fee percentages are limited to 24-bit precision for performance reasons (i.e., to fit all the fees\n // in a single slot), and because high precision is not needed. Generally we expect protocol fees set by\n // governance to be simple integers.\n //\n // However, the pool creator fee is entirely controlled by the pool creator, and it is possible to craft a\n // valid pool creator fee percentage that would cause the aggregate fee percentage to fail the precision check.\n // This case should be rare, so we ensure this can't happen by truncating the final value.\n aggregateFeePercentage = (aggregateFeePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR;\n }\n\n function _ensureCallerIsPoolCreator(address pool) internal view {\n address poolCreator = _getPoolCreator(pool);\n\n if (poolCreator == address(0)) {\n revert PoolCreatorNotRegistered(pool);\n }\n\n if (poolCreator != msg.sender) {\n revert CallerIsNotPoolCreator(msg.sender, pool);\n }\n }\n\n function _getPoolTokensAndCount(address pool) internal view returns (IERC20[] memory tokens, uint256 numTokens) {\n tokens = _vault.getPoolTokens(pool);\n numTokens = tokens.length;\n }\n\n // Retrieve the pool creator for a pool from the Vault.\n function _getPoolCreator(address pool) internal view returns (address) {\n PoolRoleAccounts memory roleAccounts = _vault.getPoolRoleAccounts(pool);\n\n return roleAccounts.poolCreator;\n }\n\n /***************************************************************************\n Pool Migration\n ***************************************************************************/\n\n /**\n * @notice Not exposed in the interface, this enables migration of hidden pool state.\n * @dev Permission should NEVER be granted to this function outside of a migration contract. It is necessary to\n * permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool\n * creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool\n * deployment.\n *\n * Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe,\n * guaranteeing that it is impossible to use this function to change anything after registration. A pool can only\n * be registered / configured once - either copied to a new controller in the migration context, or added normally\n * through the Vault calling `registerPool`.\n *\n * @param pool The address of the pool to be migrated\n */\n function migratePool(address pool) external {\n IProtocolFeeController oldFeeController = _vault.getProtocolFeeController();\n\n if (address(oldFeeController) == address(this)) {\n revert InvalidMigrationSource();\n }\n\n if (_registeredPools[pool]) {\n revert PoolAlreadyRegistered(pool);\n }\n\n _registeredPools[pool] = true;\n\n (uint256 protocolSwapFeePercentage, bool swapFeeIsOverride) = oldFeeController.getPoolProtocolSwapFeeInfo(pool);\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: protocolSwapFeePercentage.toUint64(),\n isOverride: swapFeeIsOverride\n });\n\n (uint256 protocolYieldFeePercentage, bool yieldFeeIsOverride) = oldFeeController.getPoolProtocolYieldFeeInfo(\n pool\n );\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: protocolYieldFeePercentage.toUint64(),\n isOverride: yieldFeeIsOverride\n });\n\n // On the first migration, these functions won't exist, as they were not included in the originally deployed\n // contract. This is ok, as the first time the contract will be migrated, there will be no pool creators.\n // In the event a pool that did have a pool creator was missed, the pool creator can simply set the fee\n // percentage again on the new controller. The fact that a pool has a pool creator cannot be lost, as this\n // is stored in the Vault on initial registration.\n try oldFeeController.getPoolCreatorSwapFeePercentage(pool) returns (uint256 poolCreatorSwapFeePercentage) {\n _poolCreatorSwapFeePercentages[pool] = poolCreatorSwapFeePercentage;\n } catch {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n try oldFeeController.getPoolCreatorYieldFeePercentage(pool) returns (uint256 poolCreatorYieldFeePercentage) {\n _poolCreatorYieldFeePercentages[pool] = poolCreatorYieldFeePercentage;\n } catch {\n // solhint-disable-previous-line no-empty-blocks\n }\n }\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeController\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external onlyVault returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage) {\n _registeredPools[pool] = true;\n\n // Set local storage of the actual percentages for the pool (default to global).\n aggregateSwapFeePercentage = protocolFeeExempt ? 0 : _globalProtocolSwapFeePercentage;\n aggregateYieldFeePercentage = protocolFeeExempt ? 0 : _globalProtocolYieldFeePercentage;\n\n // `isOverride` is true if the pool is protocol fee exempt; otherwise, default to false.\n // If exempt, this pool cannot be updated to the current global percentage permissionlessly.\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: aggregateSwapFeePercentage.toUint64(),\n isOverride: protocolFeeExempt\n });\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: aggregateYieldFeePercentage.toUint64(),\n isOverride: protocolFeeExempt\n });\n\n // Allow tracking pool fee percentages in all cases (e.g., when the pool is protocol-fee exempt).\n emit InitialPoolAggregateSwapFeePercentage(pool, aggregateSwapFeePercentage, protocolFeeExempt);\n emit InitialPoolAggregateYieldFeePercentage(pool, aggregateYieldFeePercentage, protocolFeeExempt);\n\n emit PoolRegisteredWithFeeController(pool, poolCreator, protocolFeeExempt);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setGlobalProtocolSwapFeePercentage(uint256 newProtocolSwapFeePercentage) external authenticate {\n _setGlobalProtocolSwapFeePercentage(newProtocolSwapFeePercentage);\n }\n\n function _setGlobalProtocolSwapFeePercentage(\n uint256 newProtocolSwapFeePercentage\n ) internal withValidSwapFee(newProtocolSwapFeePercentage) {\n _globalProtocolSwapFeePercentage = newProtocolSwapFeePercentage;\n\n emit GlobalProtocolSwapFeePercentageChanged(newProtocolSwapFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setGlobalProtocolYieldFeePercentage(uint256 newProtocolYieldFeePercentage) external authenticate {\n _setGlobalProtocolYieldFeePercentage(newProtocolYieldFeePercentage);\n }\n\n function _setGlobalProtocolYieldFeePercentage(\n uint256 newProtocolYieldFeePercentage\n ) internal withValidYieldFee(newProtocolYieldFeePercentage) {\n _globalProtocolYieldFeePercentage = newProtocolYieldFeePercentage;\n\n emit GlobalProtocolYieldFeePercentageChanged(newProtocolYieldFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setProtocolSwapFeePercentage(\n address pool,\n uint256 newProtocolSwapFeePercentage\n ) external authenticate withValidSwapFee(newProtocolSwapFeePercentage) withLatestFees(pool) {\n _updatePoolSwapFeePercentage(pool, newProtocolSwapFeePercentage, true);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setProtocolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage\n ) external authenticate withValidYieldFee(newProtocolYieldFeePercentage) withLatestFees(pool) {\n _updatePoolYieldFeePercentage(pool, newProtocolYieldFeePercentage, true);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setPoolCreatorSwapFeePercentage(\n address pool,\n uint256 poolCreatorSwapFeePercentage\n ) external onlyPoolCreator(pool) withValidPoolCreatorFee(poolCreatorSwapFeePercentage) withLatestFees(pool) {\n _setPoolCreatorFeePercentage(pool, poolCreatorSwapFeePercentage, ProtocolFeeType.SWAP);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setPoolCreatorYieldFeePercentage(\n address pool,\n uint256 poolCreatorYieldFeePercentage\n ) external onlyPoolCreator(pool) withValidPoolCreatorFee(poolCreatorYieldFeePercentage) withLatestFees(pool) {\n _setPoolCreatorFeePercentage(pool, poolCreatorYieldFeePercentage, ProtocolFeeType.YIELD);\n }\n\n function _setPoolCreatorFeePercentage(\n address pool,\n uint256 poolCreatorFeePercentage,\n ProtocolFeeType feeType\n ) internal {\n // Need to set locally, and update the aggregate percentage in the Vault.\n if (feeType == ProtocolFeeType.SWAP) {\n _poolCreatorSwapFeePercentages[pool] = poolCreatorFeePercentage;\n\n // The Vault will also emit an `AggregateSwapFeePercentageChanged` event.\n _vault.updateAggregateSwapFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.SWAP));\n\n emit PoolCreatorSwapFeePercentageChanged(pool, poolCreatorFeePercentage);\n } else {\n _poolCreatorYieldFeePercentages[pool] = poolCreatorFeePercentage;\n\n // The Vault will also emit an `AggregateYieldFeePercentageChanged` event.\n _vault.updateAggregateYieldFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.YIELD));\n\n emit PoolCreatorYieldFeePercentageChanged(pool, poolCreatorFeePercentage);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawProtocolFees(address pool, address recipient) external authenticate {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolTokens[i];\n\n _withdrawProtocolFees(pool, recipient, token);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external authenticate {\n // Revert if the pool is not registered or if the token does not belong to the pool.\n _vault.getPoolTokenCountAndIndexOfToken(pool, token);\n _withdrawProtocolFees(pool, recipient, token);\n }\n\n function _withdrawProtocolFees(address pool, address recipient, IERC20 token) internal {\n uint256 amountToWithdraw = _protocolFeeAmounts[pool][token];\n if (amountToWithdraw > 0) {\n _protocolFeeAmounts[pool][token] = 0;\n token.safeTransfer(recipient, amountToWithdraw);\n\n emit ProtocolFeesWithdrawn(pool, token, recipient, amountToWithdraw);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawPoolCreatorFees(address pool, address recipient) external onlyPoolCreator(pool) {\n _withdrawPoolCreatorFees(pool, recipient);\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawPoolCreatorFees(address pool) external {\n _withdrawPoolCreatorFees(pool, _getPoolCreator(pool));\n }\n\n function _withdrawPoolCreatorFees(address pool, address recipient) private {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolTokens[i];\n\n uint256 amountToWithdraw = _poolCreatorFeeAmounts[pool][token];\n if (amountToWithdraw > 0) {\n _poolCreatorFeeAmounts[pool][token] = 0;\n token.safeTransfer(recipient, amountToWithdraw);\n\n emit PoolCreatorFeesWithdrawn(pool, token, recipient, amountToWithdraw);\n }\n }\n }\n\n /// @dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage.\n function _updatePoolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage, bool isOverride) private {\n // Update local storage of the raw percentage.\n //\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: newProtocolSwapFeePercentage.toUint64(),\n isOverride: isOverride\n });\n\n // Update the resulting aggregate swap fee value in the Vault (PoolConfig).\n _vault.updateAggregateSwapFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.SWAP));\n\n emit ProtocolSwapFeePercentageChanged(pool, newProtocolSwapFeePercentage);\n }\n\n /// @dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage.\n function _updatePoolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage,\n bool isOverride\n ) private {\n // Update local storage of the raw percentage.\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: newProtocolYieldFeePercentage.toUint64(),\n isOverride: isOverride\n });\n\n // Update the resulting aggregate yield fee value in the Vault (PoolConfig).\n _vault.updateAggregateYieldFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.YIELD));\n\n emit ProtocolYieldFeePercentageChanged(pool, newProtocolYieldFeePercentage);\n }\n\n function _ensureValidPrecision(uint256 feePercentage) private pure {\n // Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n // precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n // corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n // Ensure there will be no precision loss in the Vault - which would lead to a discrepancy between the\n // aggregate fee calculated here and that stored in the Vault.\n if ((feePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR != feePercentage) {\n revert IVaultErrors.FeePrecisionTooHigh();\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { CommonAuthentication } from \"./CommonAuthentication.sol\";\n\n/**\n * @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n * @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n * functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n * function name.\n */\nabstract contract SingletonAuthentication is CommonAuthentication {\n // Use the contract's own address to disambiguate action identifiers.\n constructor(IVault vault) CommonAuthentication(vault, bytes32(uint256(uint160(address(this))))) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /**\n * @notice Get the address of the Balancer Vault.\n * @dev This function is virtual to allow for overriding in derived contracts which also inherits contracts with\n * `getVault()` definition.\n * @return vault An interface pointer to the Vault\n */\n function getVault() public view virtual returns (IVault) {\n return _getVault();\n }\n\n /**\n * @notice Get the address of the Authorizer.\n * @return authorizer An interface pointer to the Authorizer\n */\n function getAuthorizer() public view returns (IAuthorizer) {\n return getVault().getAuthorizer();\n }\n}\n"},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\n/// @notice Contract that shares the modifier `onlyVault`.\ncontract VaultGuard {\n IVault internal immutable _vault;\n\n constructor(IVault vault) {\n _vault = vault;\n }\n\n modifier onlyVault() {\n _ensureOnlyVault();\n _;\n }\n\n function _ensureOnlyVault() private view {\n if (msg.sender != address(_vault)) {\n revert IVaultErrors.SenderIsNotVault(msg.sender);\n }\n }\n}\n"},"@openzeppelin/contracts/access/Ownable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n constructor(address initialOwner) {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n"},"@openzeppelin/contracts/access/Ownable2Step.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (access/Ownable2Step.sol)\n\npragma solidity ^0.8.20;\n\nimport {Ownable} from \"./Ownable.sol\";\n\n/**\n * @dev Contract module which provides access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * This extension of the {Ownable} contract includes a two-step mechanism to transfer\n * ownership, where the new owner must call {acceptOwnership} in order to replace the\n * old one. This can help prevent common mistakes, such as transfers of ownership to\n * incorrect accounts, or to contracts that are unable to interact with the\n * permission system.\n *\n * The initial owner is specified at deployment time in the constructor for `Ownable`. This\n * can later be changed with {transferOwnership} and {acceptOwnership}.\n *\n * This module is used through inheritance. It will make available all functions\n * from parent (Ownable).\n */\nabstract contract Ownable2Step is Ownable {\n address private _pendingOwner;\n\n event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Returns the address of the pending owner.\n */\n function pendingOwner() public view virtual returns (address) {\n return _pendingOwner;\n }\n\n /**\n * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\n * Can only be called by the current owner.\n *\n * Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\n */\n function transferOwnership(address newOwner) public virtual override onlyOwner {\n _pendingOwner = newOwner;\n emit OwnershipTransferStarted(owner(), newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual override {\n delete _pendingOwner;\n super._transferOwnership(newOwner);\n }\n\n /**\n * @dev The new owner accepts the ownership transfer.\n */\n function acceptOwnership() public virtual {\n address sender = _msgSender();\n if (pendingOwner() != sender) {\n revert OwnableUnauthorizedAccount(sender);\n }\n _transferOwnership(sender);\n }\n}\n"},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/draft-IERC6093.sol)\npragma solidity >=0.8.4;\n\n/**\n * @dev Standard ERC-20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\n */\ninterface IERC20Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC20InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC20InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n * @param allowance Amount of tokens a `spender` is allowed to operate with.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC20InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC-721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\n */\ninterface IERC721Errors {\n /**\n * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\n * Used in balance queries.\n * @param owner Address of the current owner of a token.\n */\n error ERC721InvalidOwner(address owner);\n\n /**\n * @dev Indicates a `tokenId` whose `owner` is the zero address.\n * @param tokenId Identifier number of a token.\n */\n error ERC721NonexistentToken(uint256 tokenId);\n\n /**\n * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param tokenId Identifier number of a token.\n * @param owner Address of the current owner of a token.\n */\n error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC721InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC721InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param tokenId Identifier number of a token.\n */\n error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC721InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC-1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\n */\ninterface IERC1155Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n * @param tokenId Identifier number of a token.\n */\n error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC1155InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC1155InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param owner Address of the current owner of a token.\n */\n error ERC1155MissingApprovalForAll(address operator, address owner);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC1155InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC1155InvalidOperator(address operator);\n\n /**\n * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n * Used in batch transfers.\n * @param idsLength Length of the array of token identifiers\n * @param valuesLength Length of the array of token amounts\n */\n error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n"},"@openzeppelin/contracts/interfaces/IERC1271.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC1271.sol)\n\npragma solidity >=0.5.0;\n\n/**\n * @dev Interface of the ERC-1271 standard signature validation method for\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\n */\ninterface IERC1271 {\n /**\n * @dev Should return whether the signature provided is valid for the provided data\n * @param hash Hash of the data to be signed\n * @param signature Signature byte array associated with `hash`\n */\n function isValidSignature(bytes32 hash, bytes calldata signature) external view returns (bytes4 magicValue);\n}\n"},"@openzeppelin/contracts/interfaces/IERC1363.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC1363.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n /*\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n * 0xb0202a11 ===\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n */\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @param data Additional data with no specified format, sent in call to `spender`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n"},"@openzeppelin/contracts/interfaces/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC165.sol)\n\npragma solidity >=0.4.16;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n"},"@openzeppelin/contracts/interfaces/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC20.sol)\n\npragma solidity >=0.4.16;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n"},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC4626.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\nimport {IERC20Metadata} from \"../token/ERC20/extensions/IERC20Metadata.sol\";\n\n/**\n * @dev Interface of the ERC-4626 \"Tokenized Vault Standard\", as defined in\n * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\n */\ninterface IERC4626 is IERC20, IERC20Metadata {\n event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);\n\n event Withdraw(\n address indexed sender,\n address indexed receiver,\n address indexed owner,\n uint256 assets,\n uint256 shares\n );\n\n /**\n * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n *\n * - MUST be an ERC-20 token contract.\n * - MUST NOT revert.\n */\n function asset() external view returns (address assetTokenAddress);\n\n /**\n * @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n *\n * - SHOULD include any compounding that occurs from yield.\n * - MUST be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT revert.\n */\n function totalAssets() external view returns (uint256 totalManagedAssets);\n\n /**\n * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToShares(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToAssets(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n * through a deposit call.\n *\n * - MUST return a limited value if receiver is subject to some deposit limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n * - MUST NOT revert.\n */\n function maxDeposit(address receiver) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n * call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n * in the same transaction.\n * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n * deposit would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewDeposit(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * deposit execution, and are accounted for during deposit.\n * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function deposit(uint256 assets, address receiver) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n * - MUST return a limited value if receiver is subject to some mint limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n * - MUST NOT revert.\n */\n function maxMint(address receiver) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n * in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n * same transaction.\n * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n * would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by minting.\n */\n function previewMint(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n * execution, and are accounted for during mint.\n * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function mint(uint256 shares, address receiver) external returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n * Vault, through a withdraw call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxWithdraw(address owner) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n * call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n * called\n * in the same transaction.\n * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n * the withdrawal would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewWithdraw(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * withdraw execution, and are accounted for during withdraw.\n * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n * through a redeem call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxRedeem(address owner) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their redemption at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n * in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n * same transaction.\n * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n * redemption would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\n */\n function previewRedeem(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * redeem execution, and are accounted for during redeem.\n * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);\n}\n"},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC20Metadata} from \"./extensions/IERC20Metadata.sol\";\nimport {Context} from \"../../utils/Context.sol\";\nimport {IERC20Errors} from \"../../interfaces/draft-IERC6093.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * The default value of {decimals} is 18. To change this, you should override\n * this function so it returns a different value.\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC-20\n * applications.\n */\nabstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {\n mapping(address account => uint256) private _balances;\n\n mapping(address account => mapping(address spender => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n\n /**\n * @dev Sets the values for {name} and {symbol}.\n *\n * Both values are immutable: they can only be set once during construction.\n */\n constructor(string memory name_, string memory symbol_) {\n _name = name_;\n _symbol = symbol_;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view virtual returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view virtual returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the default value returned by this function, unless\n * it's overridden.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view virtual returns (uint8) {\n return 18;\n }\n\n /// @inheritdoc IERC20\n function totalSupply() public view virtual returns (uint256) {\n return _totalSupply;\n }\n\n /// @inheritdoc IERC20\n function balanceOf(address account) public view virtual returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - the caller must have a balance of at least `value`.\n */\n function transfer(address to, uint256 value) public virtual returns (bool) {\n address owner = _msgSender();\n _transfer(owner, to, value);\n return true;\n }\n\n /// @inheritdoc IERC20\n function allowance(address owner, address spender) public view virtual returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n * `transferFrom`. This is semantically equivalent to an infinite approval.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 value) public virtual returns (bool) {\n address owner = _msgSender();\n _approve(owner, spender, value);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\n * Skips emitting an {Approval} event indicating an allowance update. This is not\n * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\n *\n * NOTE: Does not update the allowance if the current allowance\n * is the maximum `uint256`.\n *\n * Requirements:\n *\n * - `from` and `to` cannot be the zero address.\n * - `from` must have a balance of at least `value`.\n * - the caller must have allowance for ``from``'s tokens of at least\n * `value`.\n */\n function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\n address spender = _msgSender();\n _spendAllowance(from, spender, value);\n _transfer(from, to, value);\n return true;\n }\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to`.\n *\n * This internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead.\n */\n function _transfer(address from, address to, uint256 value) internal {\n if (from == address(0)) {\n revert ERC20InvalidSender(address(0));\n }\n if (to == address(0)) {\n revert ERC20InvalidReceiver(address(0));\n }\n _update(from, to, value);\n }\n\n /**\n * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n * this function.\n *\n * Emits a {Transfer} event.\n */\n function _update(address from, address to, uint256 value) internal virtual {\n if (from == address(0)) {\n // Overflow check required: The rest of the code assumes that totalSupply never overflows\n _totalSupply += value;\n } else {\n uint256 fromBalance = _balances[from];\n if (fromBalance < value) {\n revert ERC20InsufficientBalance(from, fromBalance, value);\n }\n unchecked {\n // Overflow not possible: value <= fromBalance <= totalSupply.\n _balances[from] = fromBalance - value;\n }\n }\n\n if (to == address(0)) {\n unchecked {\n // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\n _totalSupply -= value;\n }\n } else {\n unchecked {\n // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\n _balances[to] += value;\n }\n }\n\n emit Transfer(from, to, value);\n }\n\n /**\n * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n * Relies on the `_update` mechanism\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead.\n */\n function _mint(address account, uint256 value) internal {\n if (account == address(0)) {\n revert ERC20InvalidReceiver(address(0));\n }\n _update(address(0), account, value);\n }\n\n /**\n * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n * Relies on the `_update` mechanism.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead\n */\n function _burn(address account, uint256 value) internal {\n if (account == address(0)) {\n revert ERC20InvalidSender(address(0));\n }\n _update(account, address(0), value);\n }\n\n /**\n * @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n *\n * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\n */\n function _approve(address owner, address spender, uint256 value) internal {\n _approve(owner, spender, value, true);\n }\n\n /**\n * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n *\n * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\n * `Approval` event during `transferFrom` operations.\n *\n * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\n * true using the following override:\n *\n * ```solidity\n * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n * super._approve(owner, spender, value, true);\n * }\n * ```\n *\n * Requirements are the same as {_approve}.\n */\n function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\n if (owner == address(0)) {\n revert ERC20InvalidApprover(address(0));\n }\n if (spender == address(0)) {\n revert ERC20InvalidSpender(address(0));\n }\n _allowances[owner][spender] = value;\n if (emitEvent) {\n emit Approval(owner, spender, value);\n }\n }\n\n /**\n * @dev Updates `owner`'s allowance for `spender` based on spent `value`.\n *\n * Does not update the allowance value in case of infinite allowance.\n * Revert if not enough allowance is available.\n *\n * Does not emit an {Approval} event.\n */\n function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\n uint256 currentAllowance = allowance(owner, spender);\n if (currentAllowance < type(uint256).max) {\n if (currentAllowance < value) {\n revert ERC20InsufficientAllowance(spender, currentAllowance, value);\n }\n unchecked {\n _approve(owner, spender, currentAllowance - value, false);\n }\n }\n }\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n /**\n * @dev Returns the name of the token.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n */\n function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\n\npragma solidity >=0.4.16;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n /**\n * @dev An operation with an ERC-20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Variant of {safeTransfer} that returns a bool instead of reverting if the operation is not successful.\n */\n function trySafeTransfer(IERC20 token, address to, uint256 value) internal returns (bool) {\n return _callOptionalReturnBool(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Variant of {safeTransferFrom} that returns a bool instead of reverting if the operation is not successful.\n */\n function trySafeTransferFrom(IERC20 token, address from, address to, uint256 value) internal returns (bool) {\n return _callOptionalReturnBool(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n *\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n * set here.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n safeTransfer(token, to, value);\n } else if (!token.transferAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferFromAndCallRelaxed(\n IERC1363 token,\n address from,\n address to,\n uint256 value,\n bytes memory data\n ) internal {\n if (to.code.length == 0) {\n safeTransferFrom(token, from, to, value);\n } else if (!token.transferFromAndCall(from, to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n * once without retrying, and relies on the returned value to be true.\n *\n * Reverts if the returned value is other than `true`.\n */\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n forceApprove(token, to, value);\n } else if (!token.approveAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n // bubble errors\n if iszero(success) {\n let ptr := mload(0x40)\n returndatacopy(ptr, 0, returndatasize())\n revert(ptr, returndatasize())\n }\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n bool success;\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\n }\n}\n"},"@openzeppelin/contracts/utils/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert Errors.InsufficientBalance(address(this).balance, amount);\n }\n\n (bool success, bytes memory returndata) = recipient.call{value: amount}(\"\");\n if (!success) {\n _revert(returndata);\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {Errors.FailedCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert Errors.InsufficientBalance(address(this).balance, value);\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n * of an unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {Errors.FailedCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n assembly (\"memory-safe\") {\n revert(add(returndata, 0x20), mload(returndata))\n }\n } else {\n revert Errors.FailedCall();\n }\n }\n}\n"},"@openzeppelin/contracts/utils/Arrays.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/Arrays.sol)\n// This file was procedurally generated from scripts/generate/templates/Arrays.js.\n\npragma solidity ^0.8.20;\n\nimport {Comparators} from \"./Comparators.sol\";\nimport {SlotDerivation} from \"./SlotDerivation.sol\";\nimport {StorageSlot} from \"./StorageSlot.sol\";\nimport {Math} from \"./math/Math.sol\";\n\n/**\n * @dev Collection of functions related to array types.\n */\nlibrary Arrays {\n using SlotDerivation for bytes32;\n using StorageSlot for bytes32;\n\n /**\n * @dev Sort an array of uint256 (in memory) following the provided comparator function.\n *\n * This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n * convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n *\n * NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n * array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n * when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n * consume more gas than is available in a block, leading to potential DoS.\n *\n * IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way.\n */\n function sort(\n uint256[] memory array,\n function(uint256, uint256) pure returns (bool) comp\n ) internal pure returns (uint256[] memory) {\n _quickSort(_begin(array), _end(array), comp);\n return array;\n }\n\n /**\n * @dev Variant of {sort} that sorts an array of uint256 in increasing order.\n */\n function sort(uint256[] memory array) internal pure returns (uint256[] memory) {\n sort(array, Comparators.lt);\n return array;\n }\n\n /**\n * @dev Sort an array of address (in memory) following the provided comparator function.\n *\n * This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n * convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n *\n * NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n * array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n * when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n * consume more gas than is available in a block, leading to potential DoS.\n *\n * IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way.\n */\n function sort(\n address[] memory array,\n function(address, address) pure returns (bool) comp\n ) internal pure returns (address[] memory) {\n sort(_castToUint256Array(array), _castToUint256Comp(comp));\n return array;\n }\n\n /**\n * @dev Variant of {sort} that sorts an array of address in increasing order.\n */\n function sort(address[] memory array) internal pure returns (address[] memory) {\n sort(_castToUint256Array(array), Comparators.lt);\n return array;\n }\n\n /**\n * @dev Sort an array of bytes32 (in memory) following the provided comparator function.\n *\n * This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n * convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n *\n * NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n * array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n * when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n * consume more gas than is available in a block, leading to potential DoS.\n *\n * IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way.\n */\n function sort(\n bytes32[] memory array,\n function(bytes32, bytes32) pure returns (bool) comp\n ) internal pure returns (bytes32[] memory) {\n sort(_castToUint256Array(array), _castToUint256Comp(comp));\n return array;\n }\n\n /**\n * @dev Variant of {sort} that sorts an array of bytes32 in increasing order.\n */\n function sort(bytes32[] memory array) internal pure returns (bytes32[] memory) {\n sort(_castToUint256Array(array), Comparators.lt);\n return array;\n }\n\n /**\n * @dev Performs a quick sort of a segment of memory. The segment sorted starts at `begin` (inclusive), and stops\n * at end (exclusive). Sorting follows the `comp` comparator.\n *\n * Invariant: `begin <= end`. This is the case when initially called by {sort} and is preserved in subcalls.\n *\n * IMPORTANT: Memory locations between `begin` and `end` are not validated/zeroed. This function should\n * be used only if the limits are within a memory array.\n */\n function _quickSort(uint256 begin, uint256 end, function(uint256, uint256) pure returns (bool) comp) private pure {\n unchecked {\n if (end - begin < 0x40) return;\n\n // Use first element as pivot\n uint256 pivot = _mload(begin);\n // Position where the pivot should be at the end of the loop\n uint256 pos = begin;\n\n for (uint256 it = begin + 0x20; it < end; it += 0x20) {\n if (comp(_mload(it), pivot)) {\n // If the value stored at the iterator's position comes before the pivot, we increment the\n // position of the pivot and move the value there.\n pos += 0x20;\n _swap(pos, it);\n }\n }\n\n _swap(begin, pos); // Swap pivot into place\n _quickSort(begin, pos, comp); // Sort the left side of the pivot\n _quickSort(pos + 0x20, end, comp); // Sort the right side of the pivot\n }\n }\n\n /**\n * @dev Pointer to the memory location of the first element of `array`.\n */\n function _begin(uint256[] memory array) private pure returns (uint256 ptr) {\n assembly (\"memory-safe\") {\n ptr := add(array, 0x20)\n }\n }\n\n /**\n * @dev Pointer to the memory location of the first memory word (32bytes) after `array`. This is the memory word\n * that comes just after the last element of the array.\n */\n function _end(uint256[] memory array) private pure returns (uint256 ptr) {\n unchecked {\n return _begin(array) + array.length * 0x20;\n }\n }\n\n /**\n * @dev Load memory word (as a uint256) at location `ptr`.\n */\n function _mload(uint256 ptr) private pure returns (uint256 value) {\n assembly {\n value := mload(ptr)\n }\n }\n\n /**\n * @dev Swaps the elements memory location `ptr1` and `ptr2`.\n */\n function _swap(uint256 ptr1, uint256 ptr2) private pure {\n assembly {\n let value1 := mload(ptr1)\n let value2 := mload(ptr2)\n mstore(ptr1, value2)\n mstore(ptr2, value1)\n }\n }\n\n /// @dev Helper: low level cast address memory array to uint256 memory array\n function _castToUint256Array(address[] memory input) private pure returns (uint256[] memory output) {\n assembly {\n output := input\n }\n }\n\n /// @dev Helper: low level cast bytes32 memory array to uint256 memory array\n function _castToUint256Array(bytes32[] memory input) private pure returns (uint256[] memory output) {\n assembly {\n output := input\n }\n }\n\n /// @dev Helper: low level cast address comp function to uint256 comp function\n function _castToUint256Comp(\n function(address, address) pure returns (bool) input\n ) private pure returns (function(uint256, uint256) pure returns (bool) output) {\n assembly {\n output := input\n }\n }\n\n /// @dev Helper: low level cast bytes32 comp function to uint256 comp function\n function _castToUint256Comp(\n function(bytes32, bytes32) pure returns (bool) input\n ) private pure returns (function(uint256, uint256) pure returns (bool) output) {\n assembly {\n output := input\n }\n }\n\n /**\n * @dev Searches a sorted `array` and returns the first index that contains\n * a value greater or equal to `element`. If no such index exists (i.e. all\n * values in the array are strictly less than `element`), the array length is\n * returned. Time complexity O(log n).\n *\n * NOTE: The `array` is expected to be sorted in ascending order, and to\n * contain no repeated elements.\n *\n * IMPORTANT: Deprecated. This implementation behaves as {lowerBound} but lacks\n * support for repeated elements in the array. The {lowerBound} function should\n * be used instead.\n */\n function findUpperBound(uint256[] storage array, uint256 element) internal view returns (uint256) {\n uint256 low = 0;\n uint256 high = array.length;\n\n if (high == 0) {\n return 0;\n }\n\n while (low < high) {\n uint256 mid = Math.average(low, high);\n\n // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n // because Math.average rounds towards zero (it does integer division with truncation).\n if (unsafeAccess(array, mid).value > element) {\n high = mid;\n } else {\n low = mid + 1;\n }\n }\n\n // At this point `low` is the exclusive upper bound. We will return the inclusive upper bound.\n if (low > 0 && unsafeAccess(array, low - 1).value == element) {\n return low - 1;\n } else {\n return low;\n }\n }\n\n /**\n * @dev Searches an `array` sorted in ascending order and returns the first\n * index that contains a value greater or equal than `element`. If no such index\n * exists (i.e. all values in the array are strictly less than `element`), the array\n * length is returned. Time complexity O(log n).\n *\n * See C++'s https://en.cppreference.com/w/cpp/algorithm/lower_bound[lower_bound].\n */\n function lowerBound(uint256[] storage array, uint256 element) internal view returns (uint256) {\n uint256 low = 0;\n uint256 high = array.length;\n\n if (high == 0) {\n return 0;\n }\n\n while (low < high) {\n uint256 mid = Math.average(low, high);\n\n // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n // because Math.average rounds towards zero (it does integer division with truncation).\n if (unsafeAccess(array, mid).value < element) {\n // this cannot overflow because mid < high\n unchecked {\n low = mid + 1;\n }\n } else {\n high = mid;\n }\n }\n\n return low;\n }\n\n /**\n * @dev Searches an `array` sorted in ascending order and returns the first\n * index that contains a value strictly greater than `element`. If no such index\n * exists (i.e. all values in the array are strictly less than `element`), the array\n * length is returned. Time complexity O(log n).\n *\n * See C++'s https://en.cppreference.com/w/cpp/algorithm/upper_bound[upper_bound].\n */\n function upperBound(uint256[] storage array, uint256 element) internal view returns (uint256) {\n uint256 low = 0;\n uint256 high = array.length;\n\n if (high == 0) {\n return 0;\n }\n\n while (low < high) {\n uint256 mid = Math.average(low, high);\n\n // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n // because Math.average rounds towards zero (it does integer division with truncation).\n if (unsafeAccess(array, mid).value > element) {\n high = mid;\n } else {\n // this cannot overflow because mid < high\n unchecked {\n low = mid + 1;\n }\n }\n }\n\n return low;\n }\n\n /**\n * @dev Same as {lowerBound}, but with an array in memory.\n */\n function lowerBoundMemory(uint256[] memory array, uint256 element) internal pure returns (uint256) {\n uint256 low = 0;\n uint256 high = array.length;\n\n if (high == 0) {\n return 0;\n }\n\n while (low < high) {\n uint256 mid = Math.average(low, high);\n\n // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n // because Math.average rounds towards zero (it does integer division with truncation).\n if (unsafeMemoryAccess(array, mid) < element) {\n // this cannot overflow because mid < high\n unchecked {\n low = mid + 1;\n }\n } else {\n high = mid;\n }\n }\n\n return low;\n }\n\n /**\n * @dev Same as {upperBound}, but with an array in memory.\n */\n function upperBoundMemory(uint256[] memory array, uint256 element) internal pure returns (uint256) {\n uint256 low = 0;\n uint256 high = array.length;\n\n if (high == 0) {\n return 0;\n }\n\n while (low < high) {\n uint256 mid = Math.average(low, high);\n\n // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n // because Math.average rounds towards zero (it does integer division with truncation).\n if (unsafeMemoryAccess(array, mid) > element) {\n high = mid;\n } else {\n // this cannot overflow because mid < high\n unchecked {\n low = mid + 1;\n }\n }\n }\n\n return low;\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeAccess(address[] storage arr, uint256 pos) internal pure returns (StorageSlot.AddressSlot storage) {\n bytes32 slot;\n assembly (\"memory-safe\") {\n slot := arr.slot\n }\n return slot.deriveArray().offset(pos).getAddressSlot();\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeAccess(bytes32[] storage arr, uint256 pos) internal pure returns (StorageSlot.Bytes32Slot storage) {\n bytes32 slot;\n assembly (\"memory-safe\") {\n slot := arr.slot\n }\n return slot.deriveArray().offset(pos).getBytes32Slot();\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeAccess(uint256[] storage arr, uint256 pos) internal pure returns (StorageSlot.Uint256Slot storage) {\n bytes32 slot;\n assembly (\"memory-safe\") {\n slot := arr.slot\n }\n return slot.deriveArray().offset(pos).getUint256Slot();\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeAccess(bytes[] storage arr, uint256 pos) internal pure returns (StorageSlot.BytesSlot storage) {\n bytes32 slot;\n assembly (\"memory-safe\") {\n slot := arr.slot\n }\n return slot.deriveArray().offset(pos).getBytesSlot();\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeAccess(string[] storage arr, uint256 pos) internal pure returns (StorageSlot.StringSlot storage) {\n bytes32 slot;\n assembly (\"memory-safe\") {\n slot := arr.slot\n }\n return slot.deriveArray().offset(pos).getStringSlot();\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeMemoryAccess(address[] memory arr, uint256 pos) internal pure returns (address res) {\n assembly {\n res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n }\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeMemoryAccess(bytes32[] memory arr, uint256 pos) internal pure returns (bytes32 res) {\n assembly {\n res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n }\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeMemoryAccess(uint256[] memory arr, uint256 pos) internal pure returns (uint256 res) {\n assembly {\n res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n }\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeMemoryAccess(bytes[] memory arr, uint256 pos) internal pure returns (bytes memory res) {\n assembly {\n res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n }\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeMemoryAccess(string[] memory arr, uint256 pos) internal pure returns (string memory res) {\n assembly {\n res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n }\n }\n\n /**\n * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n *\n * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n */\n function unsafeSetLength(address[] storage array, uint256 len) internal {\n assembly (\"memory-safe\") {\n sstore(array.slot, len)\n }\n }\n\n /**\n * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n *\n * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n */\n function unsafeSetLength(bytes32[] storage array, uint256 len) internal {\n assembly (\"memory-safe\") {\n sstore(array.slot, len)\n }\n }\n\n /**\n * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n *\n * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n */\n function unsafeSetLength(uint256[] storage array, uint256 len) internal {\n assembly (\"memory-safe\") {\n sstore(array.slot, len)\n }\n }\n\n /**\n * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n *\n * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n */\n function unsafeSetLength(bytes[] storage array, uint256 len) internal {\n assembly (\"memory-safe\") {\n sstore(array.slot, len)\n }\n }\n\n /**\n * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n *\n * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n */\n function unsafeSetLength(string[] storage array, uint256 len) internal {\n assembly (\"memory-safe\") {\n sstore(array.slot, len)\n }\n }\n}\n"},"@openzeppelin/contracts/utils/Comparators.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Comparators.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides a set of functions to compare values.\n *\n * _Available since v5.1._\n */\nlibrary Comparators {\n function lt(uint256 a, uint256 b) internal pure returns (bool) {\n return a < b;\n }\n\n function gt(uint256 a, uint256 b) internal pure returns (bool) {\n return a > b;\n }\n}\n"},"@openzeppelin/contracts/utils/Context.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n"},"@openzeppelin/contracts/utils/Errors.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error InsufficientBalance(uint256 balance, uint256 needed);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedCall();\n\n /**\n * @dev The deployment failed.\n */\n error FailedDeployment();\n\n /**\n * @dev A necessary precompile is missing.\n */\n error MissingPrecompile(address);\n}\n"},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/IERC165.sol)\n\npragma solidity >=0.4.16;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"},"@openzeppelin/contracts/utils/math/Math.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.20;\n\nimport {Panic} from \"../Panic.sol\";\nimport {SafeCast} from \"./SafeCast.sol\";\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n enum Rounding {\n Floor, // Toward negative infinity\n Ceil, // Toward positive infinity\n Trunc, // Toward zero\n Expand // Away from zero\n }\n\n /**\n * @dev Return the 512-bit addition of two uint256.\n *\n * The result is stored in two 256 variables such that sum = high * 2²⁵⁶ + low.\n */\n function add512(uint256 a, uint256 b) internal pure returns (uint256 high, uint256 low) {\n assembly (\"memory-safe\") {\n low := add(a, b)\n high := lt(low, a)\n }\n }\n\n /**\n * @dev Return the 512-bit multiplication of two uint256.\n *\n * The result is stored in two 256 variables such that product = high * 2²⁵⁶ + low.\n */\n function mul512(uint256 a, uint256 b) internal pure returns (uint256 high, uint256 low) {\n // 512-bit multiply [high low] = x * y. Compute the product mod 2²⁵⁶ and mod 2²⁵⁶ - 1, then use\n // the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = high * 2²⁵⁶ + low.\n assembly (\"memory-safe\") {\n let mm := mulmod(a, b, not(0))\n low := mul(a, b)\n high := sub(sub(mm, low), lt(mm, low))\n }\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, with a success flag (no overflow).\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n uint256 c = a + b;\n success = c >= a;\n result = c * SafeCast.toUint(success);\n }\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, with a success flag (no overflow).\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n uint256 c = a - b;\n success = c <= a;\n result = c * SafeCast.toUint(success);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with a success flag (no overflow).\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n uint256 c = a * b;\n assembly (\"memory-safe\") {\n // Only true when the multiplication doesn't overflow\n // (c / a == b) || (a == 0)\n success := or(eq(div(c, a), b), iszero(a))\n }\n // equivalent to: success ? c : 0\n result = c * SafeCast.toUint(success);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a success flag (no division by zero).\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n success = b > 0;\n assembly (\"memory-safe\") {\n // The `DIV` opcode returns zero when the denominator is 0.\n result := div(a, b)\n }\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a success flag (no division by zero).\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n success = b > 0;\n assembly (\"memory-safe\") {\n // The `MOD` opcode returns zero when the denominator is 0.\n result := mod(a, b)\n }\n }\n }\n\n /**\n * @dev Unsigned saturating addition, bounds to `2²⁵⁶ - 1` instead of overflowing.\n */\n function saturatingAdd(uint256 a, uint256 b) internal pure returns (uint256) {\n (bool success, uint256 result) = tryAdd(a, b);\n return ternary(success, result, type(uint256).max);\n }\n\n /**\n * @dev Unsigned saturating subtraction, bounds to zero instead of overflowing.\n */\n function saturatingSub(uint256 a, uint256 b) internal pure returns (uint256) {\n (, uint256 result) = trySub(a, b);\n return result;\n }\n\n /**\n * @dev Unsigned saturating multiplication, bounds to `2²⁵⁶ - 1` instead of overflowing.\n */\n function saturatingMul(uint256 a, uint256 b) internal pure returns (uint256) {\n (bool success, uint256 result) = tryMul(a, b);\n return ternary(success, result, type(uint256).max);\n }\n\n /**\n * @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n *\n * IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n * However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n * one branch when needed, making this function more expensive.\n */\n function ternary(bool condition, uint256 a, uint256 b) internal pure returns (uint256) {\n unchecked {\n // branchless ternary works because:\n // b ^ (a ^ b) == a\n // b ^ 0 == b\n return b ^ ((a ^ b) * SafeCast.toUint(condition));\n }\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return ternary(a > b, a, b);\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return ternary(a < b, a, b);\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds towards infinity instead\n * of rounding towards zero.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n if (b == 0) {\n // Guarantee the same behavior as in a regular Solidity division.\n Panic.panic(Panic.DIVISION_BY_ZERO);\n }\n\n // The following calculation ensures accurate ceiling division without overflow.\n // Since a is non-zero, (a - 1) / b will not overflow.\n // The largest possible result occurs when (a - 1) / b is type(uint256).max,\n // but the largest value we can obtain is type(uint256).max - 1, which happens\n // when a = type(uint256).max and b = 1.\n unchecked {\n return SafeCast.toUint(a > 0) * ((a - 1) / b + 1);\n }\n }\n\n /**\n * @dev Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n * denominator == 0.\n *\n * Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n * Uniswap Labs also under MIT license.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\n unchecked {\n (uint256 high, uint256 low) = mul512(x, y);\n\n // Handle non-overflow cases, 256 by 256 division.\n if (high == 0) {\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\n // The surrounding unchecked block does not change this fact.\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\n return low / denominator;\n }\n\n // Make sure the result is less than 2²⁵⁶. Also prevents denominator == 0.\n if (denominator <= high) {\n Panic.panic(ternary(denominator == 0, Panic.DIVISION_BY_ZERO, Panic.UNDER_OVERFLOW));\n }\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [high low].\n uint256 remainder;\n assembly (\"memory-safe\") {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n high := sub(high, gt(remainder, low))\n low := sub(low, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\n // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\n\n uint256 twos = denominator & (0 - denominator);\n assembly (\"memory-safe\") {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [high low] by twos.\n low := div(low, twos)\n\n // Flip twos such that it is 2²⁵⁶ / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from high into low.\n low |= high * twos;\n\n // Invert denominator mod 2²⁵⁶. Now that denominator is an odd number, it has an inverse modulo 2²⁵⁶ such\n // that denominator * inv ≡ 1 mod 2²⁵⁶. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv ≡ 1 mod 2⁴.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\n // works in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2⁸\n inverse *= 2 - denominator * inverse; // inverse mod 2¹⁶\n inverse *= 2 - denominator * inverse; // inverse mod 2³²\n inverse *= 2 - denominator * inverse; // inverse mod 2⁶⁴\n inverse *= 2 - denominator * inverse; // inverse mod 2¹²⁸\n inverse *= 2 - denominator * inverse; // inverse mod 2²⁵⁶\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2²⁵⁶. Since the preconditions guarantee that the outcome is\n // less than 2²⁵⁶, this is the final result. We don't need to compute the high bits of the result and high\n // is no longer required.\n result = low * inverse;\n return result;\n }\n }\n\n /**\n * @dev Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\n return mulDiv(x, y, denominator) + SafeCast.toUint(unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0);\n }\n\n /**\n * @dev Calculates floor(x * y >> n) with full precision. Throws if result overflows a uint256.\n */\n function mulShr(uint256 x, uint256 y, uint8 n) internal pure returns (uint256 result) {\n unchecked {\n (uint256 high, uint256 low) = mul512(x, y);\n if (high >= 1 << n) {\n Panic.panic(Panic.UNDER_OVERFLOW);\n }\n return (high << (256 - n)) | (low >> n);\n }\n }\n\n /**\n * @dev Calculates x * y >> n with full precision, following the selected rounding direction.\n */\n function mulShr(uint256 x, uint256 y, uint8 n, Rounding rounding) internal pure returns (uint256) {\n return mulShr(x, y, n) + SafeCast.toUint(unsignedRoundsUp(rounding) && mulmod(x, y, 1 << n) > 0);\n }\n\n /**\n * @dev Calculate the modular multiplicative inverse of a number in Z/nZ.\n *\n * If n is a prime, then Z/nZ is a field. In that case all elements are inversible, except 0.\n * If n is not a prime, then Z/nZ is not a field, and some elements might not be inversible.\n *\n * If the input value is not inversible, 0 is returned.\n *\n * NOTE: If you know for sure that n is (big) a prime, it may be cheaper to use Fermat's little theorem and get the\n * inverse using `Math.modExp(a, n - 2, n)`. See {invModPrime}.\n */\n function invMod(uint256 a, uint256 n) internal pure returns (uint256) {\n unchecked {\n if (n == 0) return 0;\n\n // The inverse modulo is calculated using the Extended Euclidean Algorithm (iterative version)\n // Used to compute integers x and y such that: ax + ny = gcd(a, n).\n // When the gcd is 1, then the inverse of a modulo n exists and it's x.\n // ax + ny = 1\n // ax = 1 + (-y)n\n // ax ≡ 1 (mod n) # x is the inverse of a modulo n\n\n // If the remainder is 0 the gcd is n right away.\n uint256 remainder = a % n;\n uint256 gcd = n;\n\n // Therefore the initial coefficients are:\n // ax + ny = gcd(a, n) = n\n // 0a + 1n = n\n int256 x = 0;\n int256 y = 1;\n\n while (remainder != 0) {\n uint256 quotient = gcd / remainder;\n\n (gcd, remainder) = (\n // The old remainder is the next gcd to try.\n remainder,\n // Compute the next remainder.\n // Can't overflow given that (a % gcd) * (gcd // (a % gcd)) <= gcd\n // where gcd is at most n (capped to type(uint256).max)\n gcd - remainder * quotient\n );\n\n (x, y) = (\n // Increment the coefficient of a.\n y,\n // Decrement the coefficient of n.\n // Can overflow, but the result is casted to uint256 so that the\n // next value of y is \"wrapped around\" to a value between 0 and n - 1.\n x - y * int256(quotient)\n );\n }\n\n if (gcd != 1) return 0; // No inverse exists.\n return ternary(x < 0, n - uint256(-x), uint256(x)); // Wrap the result if it's negative.\n }\n }\n\n /**\n * @dev Variant of {invMod}. More efficient, but only works if `p` is known to be a prime greater than `2`.\n *\n * From https://en.wikipedia.org/wiki/Fermat%27s_little_theorem[Fermat's little theorem], we know that if p is\n * prime, then `a**(p-1) ≡ 1 mod p`. As a consequence, we have `a * a**(p-2) ≡ 1 mod p`, which means that\n * `a**(p-2)` is the modular multiplicative inverse of a in Fp.\n *\n * NOTE: this function does NOT check that `p` is a prime greater than `2`.\n */\n function invModPrime(uint256 a, uint256 p) internal view returns (uint256) {\n unchecked {\n return Math.modExp(a, p - 2, p);\n }\n }\n\n /**\n * @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m)\n *\n * Requirements:\n * - modulus can't be zero\n * - underlying staticcall to precompile must succeed\n *\n * IMPORTANT: The result is only valid if the underlying call succeeds. When using this function, make\n * sure the chain you're using it on supports the precompiled contract for modular exponentiation\n * at address 0x05 as specified in https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise,\n * the underlying function will succeed given the lack of a revert, but the result may be incorrectly\n * interpreted as 0.\n */\n function modExp(uint256 b, uint256 e, uint256 m) internal view returns (uint256) {\n (bool success, uint256 result) = tryModExp(b, e, m);\n if (!success) {\n Panic.panic(Panic.DIVISION_BY_ZERO);\n }\n return result;\n }\n\n /**\n * @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m).\n * It includes a success flag indicating if the operation succeeded. Operation will be marked as failed if trying\n * to operate modulo 0 or if the underlying precompile reverted.\n *\n * IMPORTANT: The result is only valid if the success flag is true. When using this function, make sure the chain\n * you're using it on supports the precompiled contract for modular exponentiation at address 0x05 as specified in\n * https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise, the underlying function will succeed given the lack\n * of a revert, but the result may be incorrectly interpreted as 0.\n */\n function tryModExp(uint256 b, uint256 e, uint256 m) internal view returns (bool success, uint256 result) {\n if (m == 0) return (false, 0);\n assembly (\"memory-safe\") {\n let ptr := mload(0x40)\n // | Offset | Content | Content (Hex) |\n // |-----------|------------|--------------------------------------------------------------------|\n // | 0x00:0x1f | size of b | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n // | 0x20:0x3f | size of e | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n // | 0x40:0x5f | size of m | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n // | 0x60:0x7f | value of b | 0x<.............................................................b> |\n // | 0x80:0x9f | value of e | 0x<.............................................................e> |\n // | 0xa0:0xbf | value of m | 0x<.............................................................m> |\n mstore(ptr, 0x20)\n mstore(add(ptr, 0x20), 0x20)\n mstore(add(ptr, 0x40), 0x20)\n mstore(add(ptr, 0x60), b)\n mstore(add(ptr, 0x80), e)\n mstore(add(ptr, 0xa0), m)\n\n // Given the result < m, it's guaranteed to fit in 32 bytes,\n // so we can use the memory scratch space located at offset 0.\n success := staticcall(gas(), 0x05, ptr, 0xc0, 0x00, 0x20)\n result := mload(0x00)\n }\n }\n\n /**\n * @dev Variant of {modExp} that supports inputs of arbitrary length.\n */\n function modExp(bytes memory b, bytes memory e, bytes memory m) internal view returns (bytes memory) {\n (bool success, bytes memory result) = tryModExp(b, e, m);\n if (!success) {\n Panic.panic(Panic.DIVISION_BY_ZERO);\n }\n return result;\n }\n\n /**\n * @dev Variant of {tryModExp} that supports inputs of arbitrary length.\n */\n function tryModExp(\n bytes memory b,\n bytes memory e,\n bytes memory m\n ) internal view returns (bool success, bytes memory result) {\n if (_zeroBytes(m)) return (false, new bytes(0));\n\n uint256 mLen = m.length;\n\n // Encode call args in result and move the free memory pointer\n result = abi.encodePacked(b.length, e.length, mLen, b, e, m);\n\n assembly (\"memory-safe\") {\n let dataPtr := add(result, 0x20)\n // Write result on top of args to avoid allocating extra memory.\n success := staticcall(gas(), 0x05, dataPtr, mload(result), dataPtr, mLen)\n // Overwrite the length.\n // result.length > returndatasize() is guaranteed because returndatasize() == m.length\n mstore(result, mLen)\n // Set the memory pointer after the returned data.\n mstore(0x40, add(dataPtr, mLen))\n }\n }\n\n /**\n * @dev Returns whether the provided byte array is zero.\n */\n function _zeroBytes(bytes memory byteArray) private pure returns (bool) {\n for (uint256 i = 0; i < byteArray.length; ++i) {\n if (byteArray[i] != 0) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n * towards zero.\n *\n * This method is based on Newton's method for computing square roots; the algorithm is restricted to only\n * using integer operations.\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n unchecked {\n // Take care of easy edge cases when a == 0 or a == 1\n if (a <= 1) {\n return a;\n }\n\n // In this function, we use Newton's method to get a root of `f(x) := x² - a`. It involves building a\n // sequence x_n that converges toward sqrt(a). For each iteration x_n, we also define the error between\n // the current value as `ε_n = | x_n - sqrt(a) |`.\n //\n // For our first estimation, we consider `e` the smallest power of 2 which is bigger than the square root\n // of the target. (i.e. `2**(e-1) ≤ sqrt(a) < 2**e`). We know that `e ≤ 128` because `(2¹²⁸)² = 2²⁵⁶` is\n // bigger than any uint256.\n //\n // By noticing that\n // `2**(e-1) ≤ sqrt(a) < 2**e → (2**(e-1))² ≤ a < (2**e)² → 2**(2*e-2) ≤ a < 2**(2*e)`\n // we can deduce that `e - 1` is `log2(a) / 2`. We can thus compute `x_n = 2**(e-1)` using a method similar\n // to the msb function.\n uint256 aa = a;\n uint256 xn = 1;\n\n if (aa >= (1 << 128)) {\n aa >>= 128;\n xn <<= 64;\n }\n if (aa >= (1 << 64)) {\n aa >>= 64;\n xn <<= 32;\n }\n if (aa >= (1 << 32)) {\n aa >>= 32;\n xn <<= 16;\n }\n if (aa >= (1 << 16)) {\n aa >>= 16;\n xn <<= 8;\n }\n if (aa >= (1 << 8)) {\n aa >>= 8;\n xn <<= 4;\n }\n if (aa >= (1 << 4)) {\n aa >>= 4;\n xn <<= 2;\n }\n if (aa >= (1 << 2)) {\n xn <<= 1;\n }\n\n // We now have x_n such that `x_n = 2**(e-1) ≤ sqrt(a) < 2**e = 2 * x_n`. This implies ε_n ≤ 2**(e-1).\n //\n // We can refine our estimation by noticing that the middle of that interval minimizes the error.\n // If we move x_n to equal 2**(e-1) + 2**(e-2), then we reduce the error to ε_n ≤ 2**(e-2).\n // This is going to be our x_0 (and ε_0)\n xn = (3 * xn) >> 1; // ε_0 := | x_0 - sqrt(a) | ≤ 2**(e-2)\n\n // From here, Newton's method give us:\n // x_{n+1} = (x_n + a / x_n) / 2\n //\n // One should note that:\n // x_{n+1}² - a = ((x_n + a / x_n) / 2)² - a\n // = ((x_n² + a) / (2 * x_n))² - a\n // = (x_n⁴ + 2 * a * x_n² + a²) / (4 * x_n²) - a\n // = (x_n⁴ + 2 * a * x_n² + a² - 4 * a * x_n²) / (4 * x_n²)\n // = (x_n⁴ - 2 * a * x_n² + a²) / (4 * x_n²)\n // = (x_n² - a)² / (2 * x_n)²\n // = ((x_n² - a) / (2 * x_n))²\n // ≥ 0\n // Which proves that for all n ≥ 1, sqrt(a) ≤ x_n\n //\n // This gives us the proof of quadratic convergence of the sequence:\n // ε_{n+1} = | x_{n+1} - sqrt(a) |\n // = | (x_n + a / x_n) / 2 - sqrt(a) |\n // = | (x_n² + a - 2*x_n*sqrt(a)) / (2 * x_n) |\n // = | (x_n - sqrt(a))² / (2 * x_n) |\n // = | ε_n² / (2 * x_n) |\n // = ε_n² / | (2 * x_n) |\n //\n // For the first iteration, we have a special case where x_0 is known:\n // ε_1 = ε_0² / | (2 * x_0) |\n // ≤ (2**(e-2))² / (2 * (2**(e-1) + 2**(e-2)))\n // ≤ 2**(2*e-4) / (3 * 2**(e-1))\n // ≤ 2**(e-3) / 3\n // ≤ 2**(e-3-log2(3))\n // ≤ 2**(e-4.5)\n //\n // For the following iterations, we use the fact that, 2**(e-1) ≤ sqrt(a) ≤ x_n:\n // ε_{n+1} = ε_n² / | (2 * x_n) |\n // ≤ (2**(e-k))² / (2 * 2**(e-1))\n // ≤ 2**(2*e-2*k) / 2**e\n // ≤ 2**(e-2*k)\n xn = (xn + a / xn) >> 1; // ε_1 := | x_1 - sqrt(a) | ≤ 2**(e-4.5) -- special case, see above\n xn = (xn + a / xn) >> 1; // ε_2 := | x_2 - sqrt(a) | ≤ 2**(e-9) -- general case with k = 4.5\n xn = (xn + a / xn) >> 1; // ε_3 := | x_3 - sqrt(a) | ≤ 2**(e-18) -- general case with k = 9\n xn = (xn + a / xn) >> 1; // ε_4 := | x_4 - sqrt(a) | ≤ 2**(e-36) -- general case with k = 18\n xn = (xn + a / xn) >> 1; // ε_5 := | x_5 - sqrt(a) | ≤ 2**(e-72) -- general case with k = 36\n xn = (xn + a / xn) >> 1; // ε_6 := | x_6 - sqrt(a) | ≤ 2**(e-144) -- general case with k = 72\n\n // Because e ≤ 128 (as discussed during the first estimation phase), we know have reached a precision\n // ε_6 ≤ 2**(e-144) < 1. Given we're operating on integers, then we can ensure that xn is now either\n // sqrt(a) or sqrt(a) + 1.\n return xn - SafeCast.toUint(xn > a / xn);\n }\n }\n\n /**\n * @dev Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && result * result < a);\n }\n }\n\n /**\n * @dev Return the log in base 2 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log2(uint256 x) internal pure returns (uint256 r) {\n // If value has upper 128 bits set, log2 result is at least 128\n r = SafeCast.toUint(x > 0xffffffffffffffffffffffffffffffff) << 7;\n // If upper 64 bits of 128-bit half set, add 64 to result\n r |= SafeCast.toUint((x >> r) > 0xffffffffffffffff) << 6;\n // If upper 32 bits of 64-bit half set, add 32 to result\n r |= SafeCast.toUint((x >> r) > 0xffffffff) << 5;\n // If upper 16 bits of 32-bit half set, add 16 to result\n r |= SafeCast.toUint((x >> r) > 0xffff) << 4;\n // If upper 8 bits of 16-bit half set, add 8 to result\n r |= SafeCast.toUint((x >> r) > 0xff) << 3;\n // If upper 4 bits of 8-bit half set, add 4 to result\n r |= SafeCast.toUint((x >> r) > 0xf) << 2;\n\n // Shifts value right by the current result and use it as an index into this lookup table:\n //\n // | x (4 bits) | index | table[index] = MSB position |\n // |------------|---------|-----------------------------|\n // | 0000 | 0 | table[0] = 0 |\n // | 0001 | 1 | table[1] = 0 |\n // | 0010 | 2 | table[2] = 1 |\n // | 0011 | 3 | table[3] = 1 |\n // | 0100 | 4 | table[4] = 2 |\n // | 0101 | 5 | table[5] = 2 |\n // | 0110 | 6 | table[6] = 2 |\n // | 0111 | 7 | table[7] = 2 |\n // | 1000 | 8 | table[8] = 3 |\n // | 1001 | 9 | table[9] = 3 |\n // | 1010 | 10 | table[10] = 3 |\n // | 1011 | 11 | table[11] = 3 |\n // | 1100 | 12 | table[12] = 3 |\n // | 1101 | 13 | table[13] = 3 |\n // | 1110 | 14 | table[14] = 3 |\n // | 1111 | 15 | table[15] = 3 |\n //\n // The lookup table is represented as a 32-byte value with the MSB positions for 0-15 in the last 16 bytes.\n assembly (\"memory-safe\") {\n r := or(r, byte(shr(r, x), 0x0000010102020202030303030303030300000000000000000000000000000000))\n }\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << result < value);\n }\n }\n\n /**\n * @dev Return the log in base 10 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10 ** 64) {\n value /= 10 ** 64;\n result += 64;\n }\n if (value >= 10 ** 32) {\n value /= 10 ** 32;\n result += 32;\n }\n if (value >= 10 ** 16) {\n value /= 10 ** 16;\n result += 16;\n }\n if (value >= 10 ** 8) {\n value /= 10 ** 8;\n result += 8;\n }\n if (value >= 10 ** 4) {\n value /= 10 ** 4;\n result += 4;\n }\n if (value >= 10 ** 2) {\n value /= 10 ** 2;\n result += 2;\n }\n if (value >= 10 ** 1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 10 ** result < value);\n }\n }\n\n /**\n * @dev Return the log in base 256 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 x) internal pure returns (uint256 r) {\n // If value has upper 128 bits set, log2 result is at least 128\n r = SafeCast.toUint(x > 0xffffffffffffffffffffffffffffffff) << 7;\n // If upper 64 bits of 128-bit half set, add 64 to result\n r |= SafeCast.toUint((x >> r) > 0xffffffffffffffff) << 6;\n // If upper 32 bits of 64-bit half set, add 32 to result\n r |= SafeCast.toUint((x >> r) > 0xffffffff) << 5;\n // If upper 16 bits of 32-bit half set, add 16 to result\n r |= SafeCast.toUint((x >> r) > 0xffff) << 4;\n // Add 1 if upper 8 bits of 16-bit half set, and divide accumulated result by 8\n return (r >> 3) | SafeCast.toUint((x >> r) > 0xff);\n }\n\n /**\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << (result << 3) < value);\n }\n }\n\n /**\n * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\n */\n function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\n return uint8(rounding) % 2 == 1;\n }\n}\n"},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SafeCast.sol)\n// This file was procedurally generated from scripts/generate/templates/SafeCast.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeCast {\n /**\n * @dev Value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);\n\n /**\n * @dev An int value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedIntToUint(int256 value);\n\n /**\n * @dev Value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedIntDowncast(uint8 bits, int256 value);\n\n /**\n * @dev An uint value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedUintToInt(uint256 value);\n\n /**\n * @dev Returns the downcasted uint248 from uint256, reverting on\n * overflow (when the input is greater than largest uint248).\n *\n * Counterpart to Solidity's `uint248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toUint248(uint256 value) internal pure returns (uint248) {\n if (value > type(uint248).max) {\n revert SafeCastOverflowedUintDowncast(248, value);\n }\n return uint248(value);\n }\n\n /**\n * @dev Returns the downcasted uint240 from uint256, reverting on\n * overflow (when the input is greater than largest uint240).\n *\n * Counterpart to Solidity's `uint240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toUint240(uint256 value) internal pure returns (uint240) {\n if (value > type(uint240).max) {\n revert SafeCastOverflowedUintDowncast(240, value);\n }\n return uint240(value);\n }\n\n /**\n * @dev Returns the downcasted uint232 from uint256, reverting on\n * overflow (when the input is greater than largest uint232).\n *\n * Counterpart to Solidity's `uint232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toUint232(uint256 value) internal pure returns (uint232) {\n if (value > type(uint232).max) {\n revert SafeCastOverflowedUintDowncast(232, value);\n }\n return uint232(value);\n }\n\n /**\n * @dev Returns the downcasted uint224 from uint256, reverting on\n * overflow (when the input is greater than largest uint224).\n *\n * Counterpart to Solidity's `uint224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toUint224(uint256 value) internal pure returns (uint224) {\n if (value > type(uint224).max) {\n revert SafeCastOverflowedUintDowncast(224, value);\n }\n return uint224(value);\n }\n\n /**\n * @dev Returns the downcasted uint216 from uint256, reverting on\n * overflow (when the input is greater than largest uint216).\n *\n * Counterpart to Solidity's `uint216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toUint216(uint256 value) internal pure returns (uint216) {\n if (value > type(uint216).max) {\n revert SafeCastOverflowedUintDowncast(216, value);\n }\n return uint216(value);\n }\n\n /**\n * @dev Returns the downcasted uint208 from uint256, reverting on\n * overflow (when the input is greater than largest uint208).\n *\n * Counterpart to Solidity's `uint208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toUint208(uint256 value) internal pure returns (uint208) {\n if (value > type(uint208).max) {\n revert SafeCastOverflowedUintDowncast(208, value);\n }\n return uint208(value);\n }\n\n /**\n * @dev Returns the downcasted uint200 from uint256, reverting on\n * overflow (when the input is greater than largest uint200).\n *\n * Counterpart to Solidity's `uint200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toUint200(uint256 value) internal pure returns (uint200) {\n if (value > type(uint200).max) {\n revert SafeCastOverflowedUintDowncast(200, value);\n }\n return uint200(value);\n }\n\n /**\n * @dev Returns the downcasted uint192 from uint256, reverting on\n * overflow (when the input is greater than largest uint192).\n *\n * Counterpart to Solidity's `uint192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toUint192(uint256 value) internal pure returns (uint192) {\n if (value > type(uint192).max) {\n revert SafeCastOverflowedUintDowncast(192, value);\n }\n return uint192(value);\n }\n\n /**\n * @dev Returns the downcasted uint184 from uint256, reverting on\n * overflow (when the input is greater than largest uint184).\n *\n * Counterpart to Solidity's `uint184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toUint184(uint256 value) internal pure returns (uint184) {\n if (value > type(uint184).max) {\n revert SafeCastOverflowedUintDowncast(184, value);\n }\n return uint184(value);\n }\n\n /**\n * @dev Returns the downcasted uint176 from uint256, reverting on\n * overflow (when the input is greater than largest uint176).\n *\n * Counterpart to Solidity's `uint176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toUint176(uint256 value) internal pure returns (uint176) {\n if (value > type(uint176).max) {\n revert SafeCastOverflowedUintDowncast(176, value);\n }\n return uint176(value);\n }\n\n /**\n * @dev Returns the downcasted uint168 from uint256, reverting on\n * overflow (when the input is greater than largest uint168).\n *\n * Counterpart to Solidity's `uint168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toUint168(uint256 value) internal pure returns (uint168) {\n if (value > type(uint168).max) {\n revert SafeCastOverflowedUintDowncast(168, value);\n }\n return uint168(value);\n }\n\n /**\n * @dev Returns the downcasted uint160 from uint256, reverting on\n * overflow (when the input is greater than largest uint160).\n *\n * Counterpart to Solidity's `uint160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toUint160(uint256 value) internal pure returns (uint160) {\n if (value > type(uint160).max) {\n revert SafeCastOverflowedUintDowncast(160, value);\n }\n return uint160(value);\n }\n\n /**\n * @dev Returns the downcasted uint152 from uint256, reverting on\n * overflow (when the input is greater than largest uint152).\n *\n * Counterpart to Solidity's `uint152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toUint152(uint256 value) internal pure returns (uint152) {\n if (value > type(uint152).max) {\n revert SafeCastOverflowedUintDowncast(152, value);\n }\n return uint152(value);\n }\n\n /**\n * @dev Returns the downcasted uint144 from uint256, reverting on\n * overflow (when the input is greater than largest uint144).\n *\n * Counterpart to Solidity's `uint144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toUint144(uint256 value) internal pure returns (uint144) {\n if (value > type(uint144).max) {\n revert SafeCastOverflowedUintDowncast(144, value);\n }\n return uint144(value);\n }\n\n /**\n * @dev Returns the downcasted uint136 from uint256, reverting on\n * overflow (when the input is greater than largest uint136).\n *\n * Counterpart to Solidity's `uint136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toUint136(uint256 value) internal pure returns (uint136) {\n if (value > type(uint136).max) {\n revert SafeCastOverflowedUintDowncast(136, value);\n }\n return uint136(value);\n }\n\n /**\n * @dev Returns the downcasted uint128 from uint256, reverting on\n * overflow (when the input is greater than largest uint128).\n *\n * Counterpart to Solidity's `uint128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toUint128(uint256 value) internal pure returns (uint128) {\n if (value > type(uint128).max) {\n revert SafeCastOverflowedUintDowncast(128, value);\n }\n return uint128(value);\n }\n\n /**\n * @dev Returns the downcasted uint120 from uint256, reverting on\n * overflow (when the input is greater than largest uint120).\n *\n * Counterpart to Solidity's `uint120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toUint120(uint256 value) internal pure returns (uint120) {\n if (value > type(uint120).max) {\n revert SafeCastOverflowedUintDowncast(120, value);\n }\n return uint120(value);\n }\n\n /**\n * @dev Returns the downcasted uint112 from uint256, reverting on\n * overflow (when the input is greater than largest uint112).\n *\n * Counterpart to Solidity's `uint112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toUint112(uint256 value) internal pure returns (uint112) {\n if (value > type(uint112).max) {\n revert SafeCastOverflowedUintDowncast(112, value);\n }\n return uint112(value);\n }\n\n /**\n * @dev Returns the downcasted uint104 from uint256, reverting on\n * overflow (when the input is greater than largest uint104).\n *\n * Counterpart to Solidity's `uint104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toUint104(uint256 value) internal pure returns (uint104) {\n if (value > type(uint104).max) {\n revert SafeCastOverflowedUintDowncast(104, value);\n }\n return uint104(value);\n }\n\n /**\n * @dev Returns the downcasted uint96 from uint256, reverting on\n * overflow (when the input is greater than largest uint96).\n *\n * Counterpart to Solidity's `uint96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toUint96(uint256 value) internal pure returns (uint96) {\n if (value > type(uint96).max) {\n revert SafeCastOverflowedUintDowncast(96, value);\n }\n return uint96(value);\n }\n\n /**\n * @dev Returns the downcasted uint88 from uint256, reverting on\n * overflow (when the input is greater than largest uint88).\n *\n * Counterpart to Solidity's `uint88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toUint88(uint256 value) internal pure returns (uint88) {\n if (value > type(uint88).max) {\n revert SafeCastOverflowedUintDowncast(88, value);\n }\n return uint88(value);\n }\n\n /**\n * @dev Returns the downcasted uint80 from uint256, reverting on\n * overflow (when the input is greater than largest uint80).\n *\n * Counterpart to Solidity's `uint80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toUint80(uint256 value) internal pure returns (uint80) {\n if (value > type(uint80).max) {\n revert SafeCastOverflowedUintDowncast(80, value);\n }\n return uint80(value);\n }\n\n /**\n * @dev Returns the downcasted uint72 from uint256, reverting on\n * overflow (when the input is greater than largest uint72).\n *\n * Counterpart to Solidity's `uint72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toUint72(uint256 value) internal pure returns (uint72) {\n if (value > type(uint72).max) {\n revert SafeCastOverflowedUintDowncast(72, value);\n }\n return uint72(value);\n }\n\n /**\n * @dev Returns the downcasted uint64 from uint256, reverting on\n * overflow (when the input is greater than largest uint64).\n *\n * Counterpart to Solidity's `uint64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toUint64(uint256 value) internal pure returns (uint64) {\n if (value > type(uint64).max) {\n revert SafeCastOverflowedUintDowncast(64, value);\n }\n return uint64(value);\n }\n\n /**\n * @dev Returns the downcasted uint56 from uint256, reverting on\n * overflow (when the input is greater than largest uint56).\n *\n * Counterpart to Solidity's `uint56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toUint56(uint256 value) internal pure returns (uint56) {\n if (value > type(uint56).max) {\n revert SafeCastOverflowedUintDowncast(56, value);\n }\n return uint56(value);\n }\n\n /**\n * @dev Returns the downcasted uint48 from uint256, reverting on\n * overflow (when the input is greater than largest uint48).\n *\n * Counterpart to Solidity's `uint48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toUint48(uint256 value) internal pure returns (uint48) {\n if (value > type(uint48).max) {\n revert SafeCastOverflowedUintDowncast(48, value);\n }\n return uint48(value);\n }\n\n /**\n * @dev Returns the downcasted uint40 from uint256, reverting on\n * overflow (when the input is greater than largest uint40).\n *\n * Counterpart to Solidity's `uint40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toUint40(uint256 value) internal pure returns (uint40) {\n if (value > type(uint40).max) {\n revert SafeCastOverflowedUintDowncast(40, value);\n }\n return uint40(value);\n }\n\n /**\n * @dev Returns the downcasted uint32 from uint256, reverting on\n * overflow (when the input is greater than largest uint32).\n *\n * Counterpart to Solidity's `uint32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toUint32(uint256 value) internal pure returns (uint32) {\n if (value > type(uint32).max) {\n revert SafeCastOverflowedUintDowncast(32, value);\n }\n return uint32(value);\n }\n\n /**\n * @dev Returns the downcasted uint24 from uint256, reverting on\n * overflow (when the input is greater than largest uint24).\n *\n * Counterpart to Solidity's `uint24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toUint24(uint256 value) internal pure returns (uint24) {\n if (value > type(uint24).max) {\n revert SafeCastOverflowedUintDowncast(24, value);\n }\n return uint24(value);\n }\n\n /**\n * @dev Returns the downcasted uint16 from uint256, reverting on\n * overflow (when the input is greater than largest uint16).\n *\n * Counterpart to Solidity's `uint16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toUint16(uint256 value) internal pure returns (uint16) {\n if (value > type(uint16).max) {\n revert SafeCastOverflowedUintDowncast(16, value);\n }\n return uint16(value);\n }\n\n /**\n * @dev Returns the downcasted uint8 from uint256, reverting on\n * overflow (when the input is greater than largest uint8).\n *\n * Counterpart to Solidity's `uint8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toUint8(uint256 value) internal pure returns (uint8) {\n if (value > type(uint8).max) {\n revert SafeCastOverflowedUintDowncast(8, value);\n }\n return uint8(value);\n }\n\n /**\n * @dev Converts a signed int256 into an unsigned uint256.\n *\n * Requirements:\n *\n * - input must be greater than or equal to 0.\n */\n function toUint256(int256 value) internal pure returns (uint256) {\n if (value < 0) {\n revert SafeCastOverflowedIntToUint(value);\n }\n return uint256(value);\n }\n\n /**\n * @dev Returns the downcasted int248 from int256, reverting on\n * overflow (when the input is less than smallest int248 or\n * greater than largest int248).\n *\n * Counterpart to Solidity's `int248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toInt248(int256 value) internal pure returns (int248 downcasted) {\n downcasted = int248(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(248, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int240 from int256, reverting on\n * overflow (when the input is less than smallest int240 or\n * greater than largest int240).\n *\n * Counterpart to Solidity's `int240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toInt240(int256 value) internal pure returns (int240 downcasted) {\n downcasted = int240(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(240, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int232 from int256, reverting on\n * overflow (when the input is less than smallest int232 or\n * greater than largest int232).\n *\n * Counterpart to Solidity's `int232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toInt232(int256 value) internal pure returns (int232 downcasted) {\n downcasted = int232(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(232, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int224 from int256, reverting on\n * overflow (when the input is less than smallest int224 or\n * greater than largest int224).\n *\n * Counterpart to Solidity's `int224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toInt224(int256 value) internal pure returns (int224 downcasted) {\n downcasted = int224(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(224, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int216 from int256, reverting on\n * overflow (when the input is less than smallest int216 or\n * greater than largest int216).\n *\n * Counterpart to Solidity's `int216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toInt216(int256 value) internal pure returns (int216 downcasted) {\n downcasted = int216(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(216, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int208 from int256, reverting on\n * overflow (when the input is less than smallest int208 or\n * greater than largest int208).\n *\n * Counterpart to Solidity's `int208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toInt208(int256 value) internal pure returns (int208 downcasted) {\n downcasted = int208(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(208, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int200 from int256, reverting on\n * overflow (when the input is less than smallest int200 or\n * greater than largest int200).\n *\n * Counterpart to Solidity's `int200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toInt200(int256 value) internal pure returns (int200 downcasted) {\n downcasted = int200(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(200, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int192 from int256, reverting on\n * overflow (when the input is less than smallest int192 or\n * greater than largest int192).\n *\n * Counterpart to Solidity's `int192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toInt192(int256 value) internal pure returns (int192 downcasted) {\n downcasted = int192(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(192, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int184 from int256, reverting on\n * overflow (when the input is less than smallest int184 or\n * greater than largest int184).\n *\n * Counterpart to Solidity's `int184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toInt184(int256 value) internal pure returns (int184 downcasted) {\n downcasted = int184(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(184, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int176 from int256, reverting on\n * overflow (when the input is less than smallest int176 or\n * greater than largest int176).\n *\n * Counterpart to Solidity's `int176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toInt176(int256 value) internal pure returns (int176 downcasted) {\n downcasted = int176(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(176, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int168 from int256, reverting on\n * overflow (when the input is less than smallest int168 or\n * greater than largest int168).\n *\n * Counterpart to Solidity's `int168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toInt168(int256 value) internal pure returns (int168 downcasted) {\n downcasted = int168(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(168, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int160 from int256, reverting on\n * overflow (when the input is less than smallest int160 or\n * greater than largest int160).\n *\n * Counterpart to Solidity's `int160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toInt160(int256 value) internal pure returns (int160 downcasted) {\n downcasted = int160(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(160, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int152 from int256, reverting on\n * overflow (when the input is less than smallest int152 or\n * greater than largest int152).\n *\n * Counterpart to Solidity's `int152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toInt152(int256 value) internal pure returns (int152 downcasted) {\n downcasted = int152(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(152, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int144 from int256, reverting on\n * overflow (when the input is less than smallest int144 or\n * greater than largest int144).\n *\n * Counterpart to Solidity's `int144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toInt144(int256 value) internal pure returns (int144 downcasted) {\n downcasted = int144(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(144, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int136 from int256, reverting on\n * overflow (when the input is less than smallest int136 or\n * greater than largest int136).\n *\n * Counterpart to Solidity's `int136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toInt136(int256 value) internal pure returns (int136 downcasted) {\n downcasted = int136(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(136, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int128 from int256, reverting on\n * overflow (when the input is less than smallest int128 or\n * greater than largest int128).\n *\n * Counterpart to Solidity's `int128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toInt128(int256 value) internal pure returns (int128 downcasted) {\n downcasted = int128(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(128, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int120 from int256, reverting on\n * overflow (when the input is less than smallest int120 or\n * greater than largest int120).\n *\n * Counterpart to Solidity's `int120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toInt120(int256 value) internal pure returns (int120 downcasted) {\n downcasted = int120(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(120, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int112 from int256, reverting on\n * overflow (when the input is less than smallest int112 or\n * greater than largest int112).\n *\n * Counterpart to Solidity's `int112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toInt112(int256 value) internal pure returns (int112 downcasted) {\n downcasted = int112(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(112, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int104 from int256, reverting on\n * overflow (when the input is less than smallest int104 or\n * greater than largest int104).\n *\n * Counterpart to Solidity's `int104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toInt104(int256 value) internal pure returns (int104 downcasted) {\n downcasted = int104(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(104, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int96 from int256, reverting on\n * overflow (when the input is less than smallest int96 or\n * greater than largest int96).\n *\n * Counterpart to Solidity's `int96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toInt96(int256 value) internal pure returns (int96 downcasted) {\n downcasted = int96(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(96, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int88 from int256, reverting on\n * overflow (when the input is less than smallest int88 or\n * greater than largest int88).\n *\n * Counterpart to Solidity's `int88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toInt88(int256 value) internal pure returns (int88 downcasted) {\n downcasted = int88(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(88, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int80 from int256, reverting on\n * overflow (when the input is less than smallest int80 or\n * greater than largest int80).\n *\n * Counterpart to Solidity's `int80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toInt80(int256 value) internal pure returns (int80 downcasted) {\n downcasted = int80(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(80, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int72 from int256, reverting on\n * overflow (when the input is less than smallest int72 or\n * greater than largest int72).\n *\n * Counterpart to Solidity's `int72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toInt72(int256 value) internal pure returns (int72 downcasted) {\n downcasted = int72(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(72, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int64 from int256, reverting on\n * overflow (when the input is less than smallest int64 or\n * greater than largest int64).\n *\n * Counterpart to Solidity's `int64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toInt64(int256 value) internal pure returns (int64 downcasted) {\n downcasted = int64(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(64, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int56 from int256, reverting on\n * overflow (when the input is less than smallest int56 or\n * greater than largest int56).\n *\n * Counterpart to Solidity's `int56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toInt56(int256 value) internal pure returns (int56 downcasted) {\n downcasted = int56(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(56, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int48 from int256, reverting on\n * overflow (when the input is less than smallest int48 or\n * greater than largest int48).\n *\n * Counterpart to Solidity's `int48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toInt48(int256 value) internal pure returns (int48 downcasted) {\n downcasted = int48(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(48, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int40 from int256, reverting on\n * overflow (when the input is less than smallest int40 or\n * greater than largest int40).\n *\n * Counterpart to Solidity's `int40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toInt40(int256 value) internal pure returns (int40 downcasted) {\n downcasted = int40(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(40, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int32 from int256, reverting on\n * overflow (when the input is less than smallest int32 or\n * greater than largest int32).\n *\n * Counterpart to Solidity's `int32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toInt32(int256 value) internal pure returns (int32 downcasted) {\n downcasted = int32(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(32, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int24 from int256, reverting on\n * overflow (when the input is less than smallest int24 or\n * greater than largest int24).\n *\n * Counterpart to Solidity's `int24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toInt24(int256 value) internal pure returns (int24 downcasted) {\n downcasted = int24(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(24, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int16 from int256, reverting on\n * overflow (when the input is less than smallest int16 or\n * greater than largest int16).\n *\n * Counterpart to Solidity's `int16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toInt16(int256 value) internal pure returns (int16 downcasted) {\n downcasted = int16(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(16, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int8 from int256, reverting on\n * overflow (when the input is less than smallest int8 or\n * greater than largest int8).\n *\n * Counterpart to Solidity's `int8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toInt8(int256 value) internal pure returns (int8 downcasted) {\n downcasted = int8(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(8, value);\n }\n }\n\n /**\n * @dev Converts an unsigned uint256 into a signed int256.\n *\n * Requirements:\n *\n * - input must be less than or equal to maxInt256.\n */\n function toInt256(uint256 value) internal pure returns (int256) {\n // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\n if (value > uint256(type(int256).max)) {\n revert SafeCastOverflowedUintToInt(value);\n }\n return int256(value);\n }\n\n /**\n * @dev Cast a boolean (false or true) to a uint256 (0 or 1) with no jump.\n */\n function toUint(bool b) internal pure returns (uint256 u) {\n assembly (\"memory-safe\") {\n u := iszero(iszero(b))\n }\n }\n}\n"},"@openzeppelin/contracts/utils/Panic.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Panic.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Helper library for emitting standardized panic codes.\n *\n * ```solidity\n * contract Example {\n * using Panic for uint256;\n *\n * // Use any of the declared internal constants\n * function foo() { Panic.GENERIC.panic(); }\n *\n * // Alternatively\n * function foo() { Panic.panic(Panic.GENERIC); }\n * }\n * ```\n *\n * Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].\n *\n * _Available since v5.1._\n */\n// slither-disable-next-line unused-state\nlibrary Panic {\n /// @dev generic / unspecified error\n uint256 internal constant GENERIC = 0x00;\n /// @dev used by the assert() builtin\n uint256 internal constant ASSERT = 0x01;\n /// @dev arithmetic underflow or overflow\n uint256 internal constant UNDER_OVERFLOW = 0x11;\n /// @dev division or modulo by zero\n uint256 internal constant DIVISION_BY_ZERO = 0x12;\n /// @dev enum conversion error\n uint256 internal constant ENUM_CONVERSION_ERROR = 0x21;\n /// @dev invalid encoding in storage\n uint256 internal constant STORAGE_ENCODING_ERROR = 0x22;\n /// @dev empty array pop\n uint256 internal constant EMPTY_ARRAY_POP = 0x31;\n /// @dev array out of bounds access\n uint256 internal constant ARRAY_OUT_OF_BOUNDS = 0x32;\n /// @dev resource error (too large allocation or too large array)\n uint256 internal constant RESOURCE_ERROR = 0x41;\n /// @dev calling invalid internal function\n uint256 internal constant INVALID_INTERNAL_FUNCTION = 0x51;\n\n /// @dev Reverts with a panic code. Recommended to use with\n /// the internal constants with predefined codes.\n function panic(uint256 code) internal pure {\n assembly (\"memory-safe\") {\n mstore(0x00, 0x4e487b71)\n mstore(0x20, code)\n revert(0x1c, 0x24)\n }\n }\n}\n"},"@openzeppelin/contracts/utils/SlotDerivation.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (utils/SlotDerivation.sol)\n// This file was procedurally generated from scripts/generate/templates/SlotDerivation.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for computing storage (and transient storage) locations from namespaces and deriving slots\n * corresponding to standard patterns. The derivation method for array and mapping matches the storage layout used by\n * the solidity language / compiler.\n *\n * See https://docs.soliditylang.org/en/v0.8.20/internals/layout_in_storage.html#mappings-and-dynamic-arrays[Solidity docs for mappings and dynamic arrays.].\n *\n * Example usage:\n * ```solidity\n * contract Example {\n * // Add the library methods\n * using StorageSlot for bytes32;\n * using SlotDerivation for bytes32;\n *\n * // Declare a namespace\n * string private constant _NAMESPACE = \"\"; // eg. OpenZeppelin.Slot\n *\n * function setValueInNamespace(uint256 key, address newValue) internal {\n * _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value = newValue;\n * }\n *\n * function getValueInNamespace(uint256 key) internal view returns (address) {\n * return _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value;\n * }\n * }\n * ```\n *\n * TIP: Consider using this library along with {StorageSlot}.\n *\n * NOTE: This library provides a way to manipulate storage locations in a non-standard way. Tooling for checking\n * upgrade safety will ignore the slots accessed through this library.\n *\n * _Available since v5.1._\n */\nlibrary SlotDerivation {\n /**\n * @dev Derive an ERC-7201 slot from a string (namespace).\n */\n function erc7201Slot(string memory namespace) internal pure returns (bytes32 slot) {\n assembly (\"memory-safe\") {\n mstore(0x00, sub(keccak256(add(namespace, 0x20), mload(namespace)), 1))\n slot := and(keccak256(0x00, 0x20), not(0xff))\n }\n }\n\n /**\n * @dev Add an offset to a slot to get the n-th element of a structure or an array.\n */\n function offset(bytes32 slot, uint256 pos) internal pure returns (bytes32 result) {\n unchecked {\n return bytes32(uint256(slot) + pos);\n }\n }\n\n /**\n * @dev Derive the location of the first element in an array from the slot where the length is stored.\n */\n function deriveArray(bytes32 slot) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n mstore(0x00, slot)\n result := keccak256(0x00, 0x20)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, address key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n mstore(0x00, and(key, shr(96, not(0))))\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, bool key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n mstore(0x00, iszero(iszero(key)))\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, bytes32 key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n mstore(0x00, key)\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, uint256 key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n mstore(0x00, key)\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, int256 key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n mstore(0x00, key)\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, string memory key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n let length := mload(key)\n let begin := add(key, 0x20)\n let end := add(begin, length)\n let cache := mload(end)\n mstore(end, slot)\n result := keccak256(begin, add(length, 0x20))\n mstore(end, cache)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, bytes memory key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n let length := mload(key)\n let begin := add(key, 0x20)\n let end := add(begin, length)\n let cache := mload(end)\n mstore(end, slot)\n result := keccak256(begin, add(length, 0x20))\n mstore(end, cache)\n }\n }\n}\n"},"@openzeppelin/contracts/utils/StorageSlot.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/StorageSlot.sol)\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC-1967 implementation slot:\n * ```solidity\n * contract ERC1967 {\n * // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(newImplementation.code.length > 0);\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * TIP: Consider using this library along with {SlotDerivation}.\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n struct Int256Slot {\n int256 value;\n }\n\n struct StringSlot {\n string value;\n }\n\n struct BytesSlot {\n bytes value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `Int256Slot` with member `value` located at `slot`.\n */\n function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `StringSlot` with member `value` located at `slot`.\n */\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\n */\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := store.slot\n }\n }\n\n /**\n * @dev Returns a `BytesSlot` with member `value` located at `slot`.\n */\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\n */\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := store.slot\n }\n }\n}\n"},"@openzeppelin/contracts/utils/structs/EnumerableSet.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/structs/EnumerableSet.sol)\n// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.\n\npragma solidity ^0.8.20;\n\nimport {Arrays} from \"../Arrays.sol\";\nimport {Math} from \"../math/Math.sol\";\n\n/**\n * @dev Library for managing\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n * types.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n * - Set can be cleared (all elements removed) in O(n).\n *\n * ```solidity\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n *\n * The following types are supported:\n *\n * - `bytes32` (`Bytes32Set`) since v3.3.0\n * - `address` (`AddressSet`) since v3.3.0\n * - `uint256` (`UintSet`) since v3.3.0\n * - `string` (`StringSet`) since v5.4.0\n * - `bytes` (`BytesSet`) since v5.4.0\n *\n * [WARNING]\n * ====\n * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure\n * unusable.\n * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.\n *\n * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an\n * array of EnumerableSet.\n * ====\n */\nlibrary EnumerableSet {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Set type with\n // bytes32 values.\n // The Set implementation uses private functions, and user-facing\n // implementations (such as AddressSet) are just wrappers around the\n // underlying Set.\n // This means that we can only create new EnumerableSets for types that fit\n // in bytes32.\n\n struct Set {\n // Storage of set values\n bytes32[] _values;\n // Position is the index of the value in the `values` array plus 1.\n // Position 0 is used to mean a value is not in the set.\n mapping(bytes32 value => uint256) _positions;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function _add(Set storage set, bytes32 value) private returns (bool) {\n if (!_contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._positions[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function _remove(Set storage set, bytes32 value) private returns (bool) {\n // We cache the value's position to prevent multiple reads from the same storage slot\n uint256 position = set._positions[value];\n\n if (position != 0) {\n // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 valueIndex = position - 1;\n uint256 lastIndex = set._values.length - 1;\n\n if (valueIndex != lastIndex) {\n bytes32 lastValue = set._values[lastIndex];\n\n // Move the lastValue to the index where the value to delete is\n set._values[valueIndex] = lastValue;\n // Update the tracked position of the lastValue (that was just moved)\n set._positions[lastValue] = position;\n }\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the tracked position for the deleted slot\n delete set._positions[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes all the values from a set. O(n).\n *\n * WARNING: This function has an unbounded cost that scales with set size. Developers should keep in mind that\n * using it may render the function uncallable if the set grows to the point where clearing it consumes too much\n * gas to fit in a block.\n */\n function _clear(Set storage set) private {\n uint256 len = _length(set);\n for (uint256 i = 0; i < len; ++i) {\n delete set._positions[set._values[i]];\n }\n Arrays.unsafeSetLength(set._values, 0);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\n return set._positions[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function _length(Set storage set) private view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\n return set._values[index];\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function _values(Set storage set) private view returns (bytes32[] memory) {\n return set._values;\n }\n\n /**\n * @dev Return a slice of the set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function _values(Set storage set, uint256 start, uint256 end) private view returns (bytes32[] memory) {\n unchecked {\n end = Math.min(end, _length(set));\n start = Math.min(start, end);\n\n uint256 len = end - start;\n bytes32[] memory result = new bytes32[](len);\n for (uint256 i = 0; i < len; ++i) {\n result[i] = Arrays.unsafeAccess(set._values, start + i).value;\n }\n return result;\n }\n }\n\n // Bytes32Set\n\n struct Bytes32Set {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _add(set._inner, value);\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _remove(set._inner, value);\n }\n\n /**\n * @dev Removes all the values from a set. O(n).\n *\n * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n * function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.\n */\n function clear(Bytes32Set storage set) internal {\n _clear(set._inner);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\n return _contains(set._inner, value);\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(Bytes32Set storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\n return _at(set._inner, index);\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\n bytes32[] memory store = _values(set._inner);\n bytes32[] memory result;\n\n assembly (\"memory-safe\") {\n result := store\n }\n\n return result;\n }\n\n /**\n * @dev Return a slice of the set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(Bytes32Set storage set, uint256 start, uint256 end) internal view returns (bytes32[] memory) {\n bytes32[] memory store = _values(set._inner, start, end);\n bytes32[] memory result;\n\n assembly (\"memory-safe\") {\n result := store\n }\n\n return result;\n }\n\n // AddressSet\n\n struct AddressSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n return _add(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n return _remove(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes all the values from a set. O(n).\n *\n * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n * function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.\n */\n function clear(AddressSet storage set) internal {\n _clear(set._inner);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return _contains(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(AddressSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n return address(uint160(uint256(_at(set._inner, index))));\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(AddressSet storage set) internal view returns (address[] memory) {\n bytes32[] memory store = _values(set._inner);\n address[] memory result;\n\n assembly (\"memory-safe\") {\n result := store\n }\n\n return result;\n }\n\n /**\n * @dev Return a slice of the set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(AddressSet storage set, uint256 start, uint256 end) internal view returns (address[] memory) {\n bytes32[] memory store = _values(set._inner, start, end);\n address[] memory result;\n\n assembly (\"memory-safe\") {\n result := store\n }\n\n return result;\n }\n\n // UintSet\n\n struct UintSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(UintSet storage set, uint256 value) internal returns (bool) {\n return _add(set._inner, bytes32(value));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\n return _remove(set._inner, bytes32(value));\n }\n\n /**\n * @dev Removes all the values from a set. O(n).\n *\n * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n * function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.\n */\n function clear(UintSet storage set) internal {\n _clear(set._inner);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\n return _contains(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(UintSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\n return uint256(_at(set._inner, index));\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(UintSet storage set) internal view returns (uint256[] memory) {\n bytes32[] memory store = _values(set._inner);\n uint256[] memory result;\n\n assembly (\"memory-safe\") {\n result := store\n }\n\n return result;\n }\n\n /**\n * @dev Return a slice of the set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(UintSet storage set, uint256 start, uint256 end) internal view returns (uint256[] memory) {\n bytes32[] memory store = _values(set._inner, start, end);\n uint256[] memory result;\n\n assembly (\"memory-safe\") {\n result := store\n }\n\n return result;\n }\n\n struct StringSet {\n // Storage of set values\n string[] _values;\n // Position is the index of the value in the `values` array plus 1.\n // Position 0 is used to mean a value is not in the set.\n mapping(string value => uint256) _positions;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(StringSet storage set, string memory value) internal returns (bool) {\n if (!contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._positions[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(StringSet storage set, string memory value) internal returns (bool) {\n // We cache the value's position to prevent multiple reads from the same storage slot\n uint256 position = set._positions[value];\n\n if (position != 0) {\n // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 valueIndex = position - 1;\n uint256 lastIndex = set._values.length - 1;\n\n if (valueIndex != lastIndex) {\n string memory lastValue = set._values[lastIndex];\n\n // Move the lastValue to the index where the value to delete is\n set._values[valueIndex] = lastValue;\n // Update the tracked position of the lastValue (that was just moved)\n set._positions[lastValue] = position;\n }\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the tracked position for the deleted slot\n delete set._positions[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes all the values from a set. O(n).\n *\n * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n * function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.\n */\n function clear(StringSet storage set) internal {\n uint256 len = length(set);\n for (uint256 i = 0; i < len; ++i) {\n delete set._positions[set._values[i]];\n }\n Arrays.unsafeSetLength(set._values, 0);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(StringSet storage set, string memory value) internal view returns (bool) {\n return set._positions[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function length(StringSet storage set) internal view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(StringSet storage set, uint256 index) internal view returns (string memory) {\n return set._values[index];\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(StringSet storage set) internal view returns (string[] memory) {\n return set._values;\n }\n\n /**\n * @dev Return a slice of the set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(StringSet storage set, uint256 start, uint256 end) internal view returns (string[] memory) {\n unchecked {\n end = Math.min(end, length(set));\n start = Math.min(start, end);\n\n uint256 len = end - start;\n string[] memory result = new string[](len);\n for (uint256 i = 0; i < len; ++i) {\n result[i] = Arrays.unsafeAccess(set._values, start + i).value;\n }\n return result;\n }\n }\n\n struct BytesSet {\n // Storage of set values\n bytes[] _values;\n // Position is the index of the value in the `values` array plus 1.\n // Position 0 is used to mean a value is not in the set.\n mapping(bytes value => uint256) _positions;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(BytesSet storage set, bytes memory value) internal returns (bool) {\n if (!contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._positions[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(BytesSet storage set, bytes memory value) internal returns (bool) {\n // We cache the value's position to prevent multiple reads from the same storage slot\n uint256 position = set._positions[value];\n\n if (position != 0) {\n // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 valueIndex = position - 1;\n uint256 lastIndex = set._values.length - 1;\n\n if (valueIndex != lastIndex) {\n bytes memory lastValue = set._values[lastIndex];\n\n // Move the lastValue to the index where the value to delete is\n set._values[valueIndex] = lastValue;\n // Update the tracked position of the lastValue (that was just moved)\n set._positions[lastValue] = position;\n }\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the tracked position for the deleted slot\n delete set._positions[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes all the values from a set. O(n).\n *\n * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n * function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.\n */\n function clear(BytesSet storage set) internal {\n uint256 len = length(set);\n for (uint256 i = 0; i < len; ++i) {\n delete set._positions[set._values[i]];\n }\n Arrays.unsafeSetLength(set._values, 0);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(BytesSet storage set, bytes memory value) internal view returns (bool) {\n return set._positions[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function length(BytesSet storage set) internal view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(BytesSet storage set, uint256 index) internal view returns (bytes memory) {\n return set._values[index];\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(BytesSet storage set) internal view returns (bytes[] memory) {\n return set._values;\n }\n\n /**\n * @dev Return a slice of the set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(BytesSet storage set, uint256 start, uint256 end) internal view returns (bytes[] memory) {\n unchecked {\n end = Math.min(end, length(set));\n start = Math.min(start, end);\n\n uint256 len = end - start;\n bytes[] memory result = new bytes[](len);\n for (uint256 i = 0; i < len; ++i) {\n result[i] = Arrays.unsafeAccess(set._values, start + i).value;\n }\n return result;\n }\n }\n}\n"},"contracts/BalancerContractRegistry.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport {\n IBalancerContractRegistry,\n ContractType\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\n\n/**\n * @notice On-chain registry of standard Balancer contracts.\n * @dev Maintain a registry of official Balancer Factories, Routers, Hooks, and valid ERC4626 tokens, for two main\n * purposes. The first is to support the many instances where we need to know that a contract is \"trusted\" (i.e.,\n * is safe and behaves in the required manner). For instance, some hooks depend critically on the identity of the\n * msg.sender, which must be passed down through the Router. Since Routers are permissionless, a malicious one could\n * spoof the sender and \"fool\" the hook. The hook must therefore \"trust\" the Router.\n *\n * It is also important for the front-end to know when a particular wrapped token should be used with buffers. Not all\n * \"ERC4626\" wrapped tokens are fully conforming, and buffer operations with non-conforming tokens may fail in various\n * unexpected ways. It is not enough to simply check whether a buffer exists (e.g., by calling `getBufferAsset`),\n * since best practice is for the pool creator to initialize buffers for all such tokens regardless. They are\n * permissionless, and could otherwise be initialized by anyone in unexpected ways. This registry could be used to\n * keep track of \"known good\" buffers, such that `isActiveBalancerContract(ContractType.ERC4626,
)` returns\n * true for fully-compliant tokens with properly initialized buffers.\n *\n * Current solutions involve passing in the address of the trusted Router on deployment: but what if it needs to\n * support multiple Routers? Or if the Router is deprecated and replaced? Instead, we can pass the registry address,\n * and query this contract to determine whether the Router is a \"trusted\" one.\n *\n * The second use case is for off-chain queries, or other protocols that need to easily determine, say, the \"latest\"\n * Weighted Pool Factory. This contract provides `isActiveBalancerContract(type, address)` for the first case, and\n * `getBalancerContract(type, name)` for the second. It is also possible to query all known information about an\n * address, using `getBalancerContractInfo(address)`, which returns a struct with the detailed state.\n *\n * Note that the `SingletonAuthentication` base contract provides `getVault`, so it is also possible to ask this\n * contract for the Vault address, so it doesn't need to be a type.\n */\ncontract BalancerContractRegistry is IBalancerContractRegistry, SingletonAuthentication {\n // ContractId is the hash of contract name. Names must be unique (cannot have the same name with different types).\n mapping(bytes32 contractId => address addr) private _contractRegistry;\n\n // Given an address, store the contract state (i.e., type, and active or deprecated).\n //\n // Conceptually, we maintain a => => registry of contracts.\n // The only thing that can change is the `isActive` flag, when a contract is deprecated. If a contract is\n // registered in error (e.g., wrong type or address), the remedy is to deregister (delete) it, and then register\n // the correct one.\n //\n // We also maintain a registry of aliases: => , where the target address\n // must be in the main registry, and the alias cannot match a unique registered contract name. Aliases can be\n // overwritten (e.g., when the `WeightedPool` alias migrates from v2 to v3). See `_contractAliases` below.\n mapping(address addr => ContractInfo info) private _contractInfo;\n\n // ContractAliasId is the hash of the alias (e.g., \"WeightedPool\").\n // This is separate from the main contract registry to enforce different rules (e.g., prevent corrupting the\n // contract state by overwriting a registry entry with an \"alias\" that matches a different contract).\n mapping(bytes32 contractAliasId => address addr) private _contractAliases;\n\n /**\n * @notice A `_contractRegistry` entry has no corresponding `_contractInfo`.\n * @dev This should never happen.\n * @param contractName The name of the contract that has a registry entry but no contract info\n * @param contractAddress The address of the contract with missing state\n */\n error InconsistentState(string contractName, address contractAddress);\n\n constructor(IVault vault) SingletonAuthentication(vault) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /*\n * Example usage:\n *\n * // Register both the named version and the \"latest\" Weighted Pool Factory.\n * registerBalancerContract(\n * ContractType.POOL_FACTORY, '20241205-v3-weighted-pool', 0x201efd508c8DfE9DE1a13c2452863A78CB2a86Cc\n * );\n * addOrUpdateBalancerContractAlias('WeightedPool', 0x201efd508c8DfE9DE1a13c2452863A78CB2a86Cc);\n *\n * // Register the Routers (two of them anyway).\n * registerBalancerContract(ContractType.ROUTER, '20241205-v3-router', 0x5C6fb490BDFD3246EB0bB062c168DeCAF4bD9FDd);\n * registerBalancerContract(\n * ContractType.ROUTER, '20241205-v3-batch-router', 0x136f1EFcC3f8f88516B9E94110D56FDBfB1778d1\n * );\n *\n * // Now, hooks that require trusted routers can be deployed with the registry address, and query the router to\n * // see whether it's \"trusted\" (i.e., registered by governance):\n *\n * isActiveBalancerContract(ContractType.ROUTER, 0x5C6fb490BDFD3246EB0bB062c168DeCAF4bD9FDd) would return true.\n *\n * Off-chain processes that wanted to know the current address of the Weighted Pool Factory could query by either\n * name:\n *\n * (address, active) = getBalancerContract(ContractType.POOL_FACTORY, '20241205-v3-weighted-pool');\n * (address, active) = getBalancerContract(ContractType.POOL_FACTORY, 'WeightedPool');\n *\n * These would return the same result.\n *\n * If we replaced `20241205-v3-weighted-pool` with `20250107-v3-weighted-pool-v2`, governance would call:\n *\n * deprecateBalancerContract(0x201efd508c8DfE9DE1a13c2452863A78CB2a86Cc);\n * registerBalancerContract(\n * ContractType.POOL_FACTORY, '20250107-v3-weighted-pool-v2', 0x9FC3da866e7DF3a1c57adE1a97c9f00a70f010c8)\n * );\n * addOrUpdateBalancerContractAlias('WeightedPool', 0x9FC3da866e7DF3a1c57adE1a97c9f00a70f010c8);\n *\n * At that point,\n * getBalancerContract(ContractType.POOL_FACTORY, '20241205-v3-weighted-pool') returns active=false,\n * isActiveBalancerContract(ContractType.POOL_FACTORY, 0x201efd508c8DfE9DE1a13c2452863A78CB2a86Cc) returns false,\n * getBalancerContract(ContractType.POOL_FACTORY, 'WeightedPool') returns the v2 address (and active=true).\n */\n\n /// @inheritdoc IBalancerContractRegistry\n function registerBalancerContract(\n ContractType contractType,\n string memory contractName,\n address contractAddress\n ) external authenticate {\n // Ensure arguments are valid.\n if (contractAddress == address(0)) {\n revert ZeroContractAddress();\n }\n\n if (bytes(contractName).length == 0) {\n revert InvalidContractName();\n }\n\n // Ensure address isn't already in use.\n ContractInfo memory info = _contractInfo[contractAddress];\n if (info.isRegistered) {\n revert ContractAddressAlreadyRegistered(info.contractType, contractAddress);\n }\n\n // Ensure name isn't already in use as a registered contract name.\n bytes32 contractId = _getContractId(contractName);\n address existingRegistryAddress = _contractRegistry[contractId];\n if (existingRegistryAddress != address(0)) {\n info = _contractInfo[existingRegistryAddress];\n\n revert ContractNameAlreadyRegistered(info.contractType, contractName);\n }\n\n // Also check that it isn't an existing alias.\n address existingAliasAddress = _contractAliases[contractId];\n if (existingAliasAddress != address(0)) {\n revert ContractNameInUseAsAlias(contractName, existingAliasAddress);\n }\n\n // Store the address in the registry, under the unique name.\n _contractRegistry[contractId] = contractAddress;\n\n // Record the address as active. The `isActive` flag enables differentiating between unregistered and deprecated\n // addresses.\n _contractInfo[contractAddress] = ContractInfo({\n contractType: contractType,\n isRegistered: true,\n isActive: true\n });\n\n emit BalancerContractRegistered(contractType, contractName, contractAddress);\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function deregisterBalancerContract(string memory contractName) external authenticate {\n if (bytes(contractName).length == 0) {\n revert InvalidContractName();\n }\n\n // Ensure the name is registered\n bytes32 contractId = _getContractId(contractName);\n address contractAddress = _contractRegistry[contractId];\n\n if (contractAddress == address(0)) {\n revert ContractNameNotRegistered(contractName);\n }\n\n ContractInfo memory info = _contractInfo[contractAddress];\n // This should be impossible: the registry and info mappings must be in sync.\n if (info.isRegistered == false) {\n revert InconsistentState(contractName, contractAddress);\n }\n\n delete _contractRegistry[contractId];\n delete _contractInfo[contractAddress];\n\n emit BalancerContractDeregistered(info.contractType, contractName, contractAddress);\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function deprecateBalancerContract(address contractAddress) external authenticate {\n if (contractAddress == address(0)) {\n revert ZeroContractAddress();\n }\n\n ContractInfo memory info = _contractInfo[contractAddress];\n\n // Check that the address has been registered.\n if (info.isRegistered == false) {\n revert ContractAddressNotRegistered(contractAddress);\n }\n\n // If it was registered, check that it has not already been deprecated.\n if (info.isActive == false) {\n revert ContractAlreadyDeprecated(contractAddress);\n }\n\n // Set active to false to indicate that it's now deprecated. This is currently a one-way operation, since\n // deprecation is considered permanent. For instance, calling `disable` to deprecate a factory (preventing\n // new pool creation) is permanent.\n info.isActive = false;\n _contractInfo[contractAddress] = info;\n\n emit BalancerContractDeprecated(contractAddress);\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function addOrUpdateBalancerContractAlias(\n string memory contractAlias,\n address contractAddress\n ) external authenticate {\n // Ensure arguments are valid.\n if (bytes(contractAlias).length == 0) {\n revert InvalidContractAlias();\n }\n\n if (contractAddress == address(0)) {\n revert ZeroContractAddress();\n }\n\n // Ensure the address was already registered.\n ContractInfo memory info = _contractInfo[contractAddress];\n if (info.isRegistered == false) {\n revert ContractAddressNotRegistered(contractAddress);\n }\n\n // Ensure the proposed alias is not in use (i.e., no collision with existing registered contracts).\n // It can match an existing alias: that's the \"update\" case. For instance, if we wanted to migrate\n // the `WeightedPool` alias from v2 to v3. If the name is not already in `_contractAliases`, we are\n // adding a new alias.\n bytes32 contractId = _getContractId(contractAlias);\n address existingRegistryAddress = _contractRegistry[contractId];\n if (existingRegistryAddress != address(0)) {\n info = _contractInfo[existingRegistryAddress];\n\n revert ContractAliasInUseAsName(info.contractType, contractAlias);\n }\n\n // This will either add a new or overwrite an existing alias.\n _contractAliases[contractId] = contractAddress;\n\n emit ContractAliasUpdated(contractAlias, contractAddress);\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function isActiveBalancerContract(ContractType contractType, address contractAddress) external view returns (bool) {\n return _isActiveBalancerContract(contractType, contractAddress);\n }\n\n function _isActiveBalancerContract(\n ContractType contractType,\n address contractAddress\n ) internal view returns (bool) {\n ContractInfo memory info = _contractInfo[contractAddress];\n\n // Ensure the address was registered as the given type - and that it's still active.\n return info.isActive && info.contractType == contractType;\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function getBalancerContract(\n ContractType contractType,\n string memory contractName\n ) external view returns (address contractAddress, bool isActive) {\n bytes32 contractId = _getContractId(contractName);\n address registeredAddress = _contractRegistry[contractId];\n\n // Also check the aliases, if not found in the primary registry.\n if (registeredAddress == address(0)) {\n registeredAddress = _contractAliases[contractId];\n }\n\n ContractInfo memory info = _contractInfo[registeredAddress];\n // It is possible to register a contract and alias, then deregister the contract, leaving a \"stale\" alias\n // reference. In this case, `isRegistered` will be false. Only return the contract address if it is still\n // valid and of the correct type.\n if (info.isRegistered && info.contractType == contractType) {\n contractAddress = registeredAddress;\n isActive = info.isActive;\n }\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function getBalancerContractInfo(address contractAddress) external view returns (ContractInfo memory info) {\n return _contractInfo[contractAddress];\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function isTrustedRouter(address router) external view returns (bool) {\n return _isActiveBalancerContract(ContractType.ROUTER, router);\n }\n\n function _getContractId(string memory contractName) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(contractName));\n }\n}\n"},"contracts/BalancerFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\";\nimport { IBalancerFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol\";\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport { VaultGuard } from \"@balancer-labs/v3-vault/contracts/VaultGuard.sol\";\n\nimport { FeeBurnerAuthentication } from \"./FeeBurnerAuthentication.sol\";\n\ncontract BalancerFeeBurner is IBalancerFeeBurner, ReentrancyGuardTransient, VaultGuard, FeeBurnerAuthentication {\n using SafeERC20 for IERC20;\n\n mapping(IERC20 => SwapPathStep[] steps) internal _burnSteps;\n\n constructor(\n IVault vault,\n IProtocolFeeSweeper _protocolFeeSweeper,\n address initialOwner\n ) VaultGuard(vault) FeeBurnerAuthentication(_protocolFeeSweeper, initialOwner) {\n protocolFeeSweeper = _protocolFeeSweeper;\n }\n\n /// @inheritdoc IBalancerFeeBurner\n function setBurnPath(IERC20 feeToken, SwapPathStep[] calldata steps) external onlyFeeRecipientOrOwner {\n delete _burnSteps[feeToken];\n\n for (uint256 i = 0; i < steps.length; i++) {\n _burnSteps[feeToken].push(steps[i]);\n }\n }\n\n /// @inheritdoc IBalancerFeeBurner\n function getBurnPath(IERC20 feeToken) public view returns (SwapPathStep[] memory steps) {\n steps = _burnSteps[feeToken];\n\n if (steps.length == 0) {\n revert BurnPathDoesNotExist();\n }\n }\n\n /// @inheritdoc IProtocolFeeBurner\n function burn(\n address pool,\n IERC20 feeToken,\n uint256 feeTokenAmount,\n IERC20 targetToken,\n uint256 minAmountOut,\n address recipient,\n uint256 deadline\n ) external onlyProtocolFeeSweeper {\n _vault.unlock(\n abi.encodeCall(\n BalancerFeeBurner.burnHook,\n BurnHookParams({\n pool: pool,\n sender: msg.sender,\n feeToken: feeToken,\n feeTokenAmount: feeTokenAmount,\n targetToken: targetToken,\n minAmountOut: minAmountOut,\n recipient: recipient,\n deadline: deadline\n })\n )\n );\n }\n\n function burnHook(BurnHookParams calldata params) external nonReentrant onlyVault {\n // The deadline is timestamp-based: it should not be relied upon for sub-minute accuracy.\n // solhint-disable-next-line not-rely-on-time\n if (block.timestamp > params.deadline) {\n revert SwapDeadline();\n }\n\n IERC20 feeToken = params.feeToken;\n IERC20 targetToken = params.targetToken;\n uint256 feeTokenAmount = params.feeTokenAmount;\n\n SwapPathStep[] memory steps = getBurnPath(feeToken);\n uint256 lastStepIndex = steps.length - 1;\n if (steps[lastStepIndex].tokenOut != targetToken) {\n revert TargetTokenOutMismatch();\n }\n\n // Transfer the `tokenIn` to the vault.\n feeToken.safeTransferFrom(params.sender, address(_vault), feeTokenAmount);\n _vault.settle(feeToken, feeTokenAmount);\n\n // Swap the fee token for the target token through the steps.\n IERC20 stepTokenIn = feeToken;\n uint256 stepExactAmountIn = feeTokenAmount;\n for (uint256 i = 0; i < steps.length; i++) {\n SwapPathStep memory step = steps[i];\n\n (, , uint256 amountOut) = _vault.swap(\n VaultSwapParams({\n kind: SwapKind.EXACT_IN,\n pool: step.pool,\n tokenIn: stepTokenIn,\n tokenOut: step.tokenOut,\n amountGivenRaw: stepExactAmountIn,\n limitRaw: (i == lastStepIndex) ? params.minAmountOut : 0,\n userData: bytes(\"\")\n })\n );\n\n stepTokenIn = step.tokenOut;\n stepExactAmountIn = amountOut;\n }\n\n // Last stepTokenIn is the final token out. Last stepExactAmountIn is the amount out.\n _vault.sendTo(stepTokenIn, params.recipient, stepExactAmountIn);\n\n emit ProtocolFeeBurned(params.pool, feeToken, feeTokenAmount, targetToken, stepExactAmountIn, params.recipient);\n }\n}\n"},"contracts/CallAndRevert.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport { RevertCodec } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\";\n\ncontract CallAndRevert {\n error QuoteResultSpoofed();\n\n function _callAndRevert(address target, bytes memory data) internal returns (bytes memory) {\n try CallAndRevert(address(this)).callAndRevertHook(target, data) {\n revert(\"Unexpected success\");\n } catch (bytes memory result) {\n return RevertCodec.catchEncodedResult(result);\n }\n }\n\n function callAndRevertHook(address target, bytes memory data) external {\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory result) = (target).call(data);\n if (success) {\n // This will only revert if result is empty and sender account has no code.\n Address.verifyCallResultFromTarget(msg.sender, success, result);\n // Send result in revert reason.\n revert RevertCodec.Result(result);\n } else {\n // If the call reverted with a spoofed `QuoteResult`, we catch it and bubble up a different reason.\n bytes4 errorSelector = RevertCodec.parseSelector(result);\n if (errorSelector == RevertCodec.Result.selector) {\n revert QuoteResultSpoofed();\n }\n\n // Otherwise we bubble up the original revert reason.\n RevertCodec.bubbleUpRevert(result);\n }\n }\n}\n"},"contracts/CowSwapFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC165 } from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport { IERC1271 } from \"@openzeppelin/contracts/interfaces/IERC1271.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\";\nimport { ICowSwapFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\";\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\nimport { IComposableCow } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\";\nimport {\n ICowConditionalOrderGenerator\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\";\nimport {\n ICowConditionalOrder,\n GPv2Order\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { Version } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\";\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\n\nimport { FeeBurnerAuthentication } from \"./FeeBurnerAuthentication.sol\";\n\n// solhint-disable not-rely-on-time\n\n/**\n * @title CowSwapFeeBurner\n * @notice A contract that burns protocol fees using CowSwap.\n * @dev The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function.\n * Only one order per token is allowed at a time.\n */\ncontract CowSwapFeeBurner is ICowSwapFeeBurner, FeeBurnerAuthentication, ReentrancyGuardTransient, Version {\n using SafeERC20 for IERC20;\n\n struct ShortOrder {\n IERC20 tokenOut;\n address receiver;\n uint256 minAmountOut;\n uint32 deadline;\n }\n\n bytes4 internal constant _SIGNATURE_VERIFIER_MUXER_INTERFACE = 0x62af8dc2;\n bytes32 internal immutable _sellKind = keccak256(\"sell\");\n bytes32 internal immutable _tokenBalance = keccak256(\"erc20\");\n\n IComposableCow public immutable composableCow;\n address public immutable vaultRelayer;\n bytes32 public immutable appData;\n\n // Orders are identified by the tokenIn (often called the tokenIn).\n mapping(IERC20 token => ShortOrder order) internal _orders;\n\n constructor(\n IProtocolFeeSweeper _protocolFeeSweeper,\n IComposableCow _composableCow,\n address _cowVaultRelayer,\n bytes32 _appData,\n address _initialOwner,\n string memory _version\n ) Version(_version) FeeBurnerAuthentication(_protocolFeeSweeper, _initialOwner) {\n composableCow = _composableCow;\n vaultRelayer = _cowVaultRelayer;\n appData = _appData;\n }\n\n /***************************************************************************\n ICowSwapFeeBurner\n ***************************************************************************/\n\n /// @inheritdoc ICowSwapFeeBurner\n function getOrder(IERC20 tokenIn) external view returns (GPv2Order memory) {\n return _getOrder(tokenIn);\n }\n\n /// @inheritdoc ICowSwapFeeBurner\n function getOrderStatus(IERC20 tokenIn) external view returns (OrderStatus status) {\n (status, ) = _getOrderStatusAndBalance(tokenIn);\n }\n\n /// @inheritdoc ICowSwapFeeBurner\n function retryOrder(IERC20 tokenIn, uint256 minAmountOut, uint256 deadline) external onlyFeeRecipientOrOwner {\n (OrderStatus status, uint256 amount) = _getOrderStatusAndBalance(tokenIn);\n\n if (status != OrderStatus.Failed) {\n revert OrderHasUnexpectedStatus(status);\n }\n\n _checkMinAmountOut(minAmountOut);\n _checkDeadline(deadline);\n\n _orders[tokenIn].minAmountOut = minAmountOut;\n _orders[tokenIn].deadline = uint32(deadline);\n\n // Refresh approval with current balance just in case.\n if (tokenIn.allowance(address(this), vaultRelayer) < amount) {\n tokenIn.forceApprove(vaultRelayer, amount);\n }\n\n _createCowOrder(tokenIn);\n\n emit OrderRetried(tokenIn, amount, minAmountOut, deadline);\n }\n\n /// @inheritdoc ICowSwapFeeBurner\n function cancelOrder(IERC20 tokenIn, address receiver) external onlyFeeRecipientOrOwner {\n (OrderStatus status, uint256 amount) = _getOrderStatusAndBalance(tokenIn);\n\n if (status != OrderStatus.Failed) {\n revert OrderHasUnexpectedStatus(status);\n }\n\n _cancelOrder(tokenIn, receiver, amount);\n }\n\n /// @inheritdoc ICowSwapFeeBurner\n function emergencyCancelOrder(IERC20 tokenIn, address receiver) external onlyFeeRecipientOrOwner {\n _cancelOrder(tokenIn, receiver, tokenIn.balanceOf(address(this)));\n }\n\n function _cancelOrder(IERC20 tokenIn, address receiver, uint256 amount) internal {\n tokenIn.forceApprove(vaultRelayer, 0);\n delete _orders[tokenIn];\n\n SafeERC20.safeTransfer(tokenIn, receiver, amount);\n\n emit OrderCanceled(tokenIn, amount, receiver);\n }\n\n /***************************************************************************\n IProtocolFeeBurner\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeBurner\n function burn(\n address pool,\n IERC20 feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 targetToken,\n uint256 minTargetTokenAmountOut,\n address recipient,\n uint256 deadline\n ) external virtual onlyProtocolFeeSweeper nonReentrant {\n _burn(\n pool,\n feeToken,\n exactFeeTokenAmountIn,\n targetToken,\n minTargetTokenAmountOut,\n recipient,\n deadline,\n true // pullFeeToken\n );\n }\n\n function _burn(\n address pool,\n IERC20 feeToken,\n uint256 feeTokenAmount,\n IERC20 targetToken,\n uint256 minTargetTokenAmountOut,\n address recipient,\n uint256 deadline,\n bool pullFeeToken\n ) internal {\n if (targetToken == feeToken) {\n revert InvalidOrderParameters(\"Fee token and target token are the same\");\n } else if (feeTokenAmount == 0) {\n revert InvalidOrderParameters(\"Fee token amount is zero\");\n }\n\n _checkMinAmountOut(minTargetTokenAmountOut);\n _checkDeadline(deadline);\n\n if (pullFeeToken) {\n feeToken.safeTransferFrom(msg.sender, address(this), feeTokenAmount);\n }\n\n (OrderStatus status, ) = _getOrderStatusAndBalance(feeToken, feeTokenAmount);\n if (status != OrderStatus.Nonexistent && status != OrderStatus.Filled) {\n // New order can only be created if no order exists or the previous one was completely filled.\n // This prevents overlapping orders for the same token.\n revert OrderHasUnexpectedStatus(status);\n }\n\n _createCowOrder(feeToken);\n\n feeToken.forceApprove(vaultRelayer, feeTokenAmount);\n\n _orders[feeToken] = ShortOrder({\n tokenOut: targetToken,\n receiver: recipient,\n minAmountOut: minTargetTokenAmountOut,\n deadline: uint32(deadline)\n });\n\n emit ProtocolFeeBurned(pool, feeToken, feeTokenAmount, targetToken, minTargetTokenAmountOut, recipient);\n }\n\n /***************************************************************************\n ICowConditionalOrder\n ***************************************************************************/\n\n /// @inheritdoc ICowConditionalOrderGenerator\n function getTradeableOrder(\n address,\n address,\n bytes32,\n bytes calldata staticInput,\n bytes calldata\n ) public view returns (GPv2Order memory) {\n IERC20 tokenIn = IERC20(abi.decode(staticInput, (address)));\n\n return _getOrder(tokenIn);\n }\n\n /// @inheritdoc ICowConditionalOrder\n function verify(\n address owner,\n address sender,\n bytes32,\n bytes32,\n bytes32 ctx,\n bytes calldata staticInput,\n bytes calldata offchainInput,\n GPv2Order calldata _order\n ) external view {\n GPv2Order memory savedOrder = getTradeableOrder(owner, sender, ctx, staticInput, offchainInput);\n\n if (_order.buyAmount > savedOrder.buyAmount) {\n savedOrder.buyAmount = _order.buyAmount;\n }\n\n if (keccak256(abi.encode(savedOrder)) != keccak256(abi.encode(_order))) {\n revert InvalidOrderParameters(\"Verify order does not match with existing order\");\n }\n }\n\n /***************************************************************************\n Miscellaneous\n ***************************************************************************/\n\n /// @inheritdoc IERC1271\n function isValidSignature(bytes32 _hash, bytes memory signature) external view returns (bytes4) {\n (GPv2Order memory order, IComposableCow.Payload memory payload) = abi.decode(\n signature,\n (GPv2Order, IComposableCow.Payload)\n );\n\n // Forward the query to ComposableCow\n return\n composableCow.isValidSafeSignature(\n address(this),\n msg.sender,\n _hash,\n composableCow.domainSeparator(),\n bytes32(0),\n abi.encode(order),\n abi.encode(payload)\n );\n }\n\n /// @inheritdoc IERC165\n function supportsInterface(bytes4 interfaceId) public pure returns (bool) {\n // Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\n if (interfaceId == _SIGNATURE_VERIFIER_MUXER_INTERFACE) {\n revert InterfaceIsSignatureVerifierMuxer();\n }\n\n return\n interfaceId == type(ICowConditionalOrder).interfaceId ||\n interfaceId == type(ICowConditionalOrderGenerator).interfaceId ||\n interfaceId == type(IERC1271).interfaceId ||\n interfaceId == type(IERC165).interfaceId;\n }\n\n /***************************************************************************\n Private Functions\n ***************************************************************************/\n\n function _getOrder(IERC20 tokenIn) private view returns (GPv2Order memory) {\n ShortOrder memory shortOrder = _orders[tokenIn];\n\n if (shortOrder.deadline == 0) {\n revert OrderNotValid(\"Order does not exist\");\n }\n\n return\n GPv2Order({\n sellToken: tokenIn,\n buyToken: shortOrder.tokenOut,\n receiver: shortOrder.receiver,\n sellAmount: tokenIn.balanceOf(address(this)),\n buyAmount: shortOrder.minAmountOut,\n validTo: shortOrder.deadline,\n appData: appData,\n feeAmount: 0,\n kind: _sellKind,\n partiallyFillable: true,\n sellTokenBalance: _tokenBalance,\n buyTokenBalance: _tokenBalance\n });\n }\n\n function _getOrderStatusAndBalance(IERC20 tokenIn) private view returns (OrderStatus, uint256) {\n return _getOrderStatusAndBalance(tokenIn, 0);\n }\n\n function _getOrderStatusAndBalance(\n IERC20 tokenIn,\n uint256 balanceDelta\n ) private view returns (OrderStatus, uint256) {\n ShortOrder storage shortOrder = _orders[tokenIn];\n\n uint256 deadline = shortOrder.deadline;\n\n if (deadline == 0) {\n // No order exists because it was never created before.\n return (OrderStatus.Nonexistent, 0);\n }\n\n // We return the balance to the state before we received tokens for the new order.\n uint256 balance = tokenIn.balanceOf(address(this)) - balanceDelta;\n if (balance == 0) {\n // If no tokens remain, we assume the order was fully executed\n // because all tokens are taken by the relayer when the order is filled.\n return (OrderStatus.Filled, balance);\n } else if (block.timestamp > deadline) {\n // If tokens remain and the deadline passed, the order is considered failed.\n return (OrderStatus.Failed, balance);\n }\n\n // Otherwise, the order is still active.\n return (OrderStatus.Active, balance);\n }\n\n function _checkDeadline(uint256 deadline) private view {\n if (block.timestamp > deadline) {\n revert InvalidOrderParameters(\"Deadline is in the past\");\n }\n }\n\n function _checkMinAmountOut(uint256 minAmountOut) private pure {\n if (minAmountOut == 0) {\n revert InvalidOrderParameters(\"Min amount out is zero\");\n }\n }\n\n function _createCowOrder(IERC20 tokenIn) private {\n composableCow.create(\n ICowConditionalOrder.ConditionalOrderParams({\n handler: ICowConditionalOrder(address(this)),\n salt: bytes32(0),\n staticData: abi.encode(tokenIn)\n }),\n true\n );\n }\n}\n"},"contracts/ERC4626CowSwapFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IComposableCow } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\";\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport { PackedTokenBalance } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\";\n\nimport { CowSwapFeeBurner } from \"./CowSwapFeeBurner.sol\";\n\n/**\n * @title ERC4626CowSwapFeeBurner\n * @notice A contract that burns ERC4626 protocol fee tokens using CowSwap, previously redeeming underlying assets.\n * @dev The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function.\n * Only one order per token is allowed at a time.\n */\ncontract ERC4626CowSwapFeeBurner is CowSwapFeeBurner {\n using SafeERC20 for IERC20;\n\n /// @notice The amount out is zero.\n error AmountOutIsZero(IERC20 token);\n\n constructor(\n IProtocolFeeSweeper _protocolFeeSweeper,\n IComposableCow _composableCow,\n address _cowVaultRelayer,\n bytes32 _appData,\n address _initialOwner,\n string memory _version\n ) CowSwapFeeBurner(_protocolFeeSweeper, _composableCow, _cowVaultRelayer, _appData, _initialOwner, _version) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /**\n * @notice Treats `feeToken` as an ERC4626, redeems `exactFeeTokenAmountIn`, swaps the underlying asset for\n * `targetToken`, and sends the proceeds to the `recipient`.\n * @dev Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\n * @param pool The pool the fees came from (only used for documentation in the event)\n * @param feeToken The token collected from the pool\n * @param exactFeeTokenAmountIn The number of fee tokens collected\n * @param targetToken The desired target token (`tokenOut` of the swap)\n * @param encodedMinAmountsOut The minimum amounts out for the swap, encoded as a 256-bit integer:\n * - Upper 128 bits: the minimum amount of the target token to receive\n * - Lower 128 bits: the minimum amount of the ERC4626 token to receive\n * @param recipient The recipient of the swap proceeds\n * @param deadline Deadline for the burn operation (i.e., swap), after which it will revert\n */\n function burn(\n address pool,\n IERC20 feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 targetToken,\n uint256 encodedMinAmountsOut,\n address recipient,\n uint256 deadline\n ) external override onlyProtocolFeeSweeper nonReentrant {\n IERC4626 erc4626Token = IERC4626(address(feeToken));\n IERC20 underlyingToken = IERC20(erc4626Token.asset());\n\n // In this case we first pull the wrapped token, unwrap, and then proceed to burn by creating an order for\n // the underlying token.\n IERC20(address(erc4626Token)).safeTransferFrom(msg.sender, address(this), exactFeeTokenAmountIn);\n\n (uint256 minTargetTokenAmountOut, uint256 minERC4626AmountOut) = PackedTokenBalance.fromPackedBalance(\n bytes32(encodedMinAmountsOut)\n );\n\n uint256 feeTokenBalanceBefore = underlyingToken.balanceOf(address(this));\n\n erc4626Token.redeem(exactFeeTokenAmountIn, address(this), address(this));\n\n uint256 feeTokenBalanceAfter = underlyingToken.balanceOf(address(this));\n exactFeeTokenAmountIn = feeTokenBalanceAfter - feeTokenBalanceBefore;\n\n if (exactFeeTokenAmountIn < minERC4626AmountOut) {\n revert AmountOutBelowMin(underlyingToken, exactFeeTokenAmountIn, minERC4626AmountOut);\n } else if (exactFeeTokenAmountIn == 0) {\n revert AmountOutIsZero(underlyingToken);\n }\n\n // This case is not handled by the internal `_burn` function, but it's valid: we can consider that the token\n // has already been converted to the correct token, so we just forward the result and finish.\n if (underlyingToken == targetToken) {\n // We apply the slippage check, but not deadline as the order settlement is instant in this case.\n if (exactFeeTokenAmountIn < minTargetTokenAmountOut) {\n revert AmountOutBelowMin(targetToken, exactFeeTokenAmountIn, minTargetTokenAmountOut);\n }\n\n underlyingToken.safeTransfer(recipient, exactFeeTokenAmountIn);\n } else {\n _burn(\n pool,\n underlyingToken,\n exactFeeTokenAmountIn,\n targetToken,\n minTargetTokenAmountOut,\n recipient,\n deadline,\n false // pullToken\n );\n }\n }\n}\n"},"contracts/FeeBurnerAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { Ownable2Step } from \"@openzeppelin/contracts/access/Ownable2Step.sol\";\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\n\ncontract FeeBurnerAuthentication is Ownable2Step {\n IProtocolFeeSweeper public immutable protocolFeeSweeper;\n\n /// @notice The fee protocol is invalid.\n error InvalidProtocolFeeSweeper();\n\n /// @notice The sender does not have permission to call a function.\n error SenderNotAllowed();\n\n modifier onlyProtocolFeeSweeper() {\n if (msg.sender != address(protocolFeeSweeper)) {\n revert SenderNotAllowed();\n }\n _;\n }\n\n modifier onlyFeeRecipientOrOwner() {\n if (msg.sender != protocolFeeSweeper.getFeeRecipient() && msg.sender != owner()) {\n revert SenderNotAllowed();\n }\n _;\n }\n\n constructor(IProtocolFeeSweeper _protocolFeeSweeper, address initialOwner) Ownable(initialOwner) {\n if (address(_protocolFeeSweeper) == address(0)) {\n revert InvalidProtocolFeeSweeper();\n }\n\n protocolFeeSweeper = _protocolFeeSweeper;\n }\n}\n"},"contracts/HyperEVMRateProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.24;\n\nimport {\n IHyperEVMRateProvider\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\";\nimport { IRateProvider } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\";\n\nimport { HyperSpotPricePrecompile } from \"./utils/HyperSpotPricePrecompile.sol\";\nimport { HyperTokenInfoPrecompile } from \"./utils/HyperTokenInfoPrecompile.sol\";\n\n/**\n * @notice A rate provider for the HyperEVM.\n * @dev HyperEVM has precompiles that allow to fetch the spot price of a token (in terms of USD or other tokens).\n * This contract uses the spot price and the token info precompiles to return the rate of a token on-chain,\n * scaled with 18 decimals (compatible with the Vault).\n */\ncontract HyperEVMRateProvider is IRateProvider, IHyperEVMRateProvider {\n uint256 private immutable _spotPriceMultiplier;\n uint32 private immutable _pairIndex;\n uint32 private immutable _tokenIndex;\n\n constructor(uint32 tokenIndex, uint32 pairIndex) {\n uint8 szDecimals = HyperTokenInfoPrecompile.szDecimals(tokenIndex);\n // The spot price is returned with a different number of decimals for each token. So, to make this rate\n // provider compatible with the vault, we need to scale the spot price to 18 decimals using this multiplier.\n // According to hyperliquid's documentation\n // (https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore),\n // szDecimals has a minimum of 0 and a maximum of 8, so the multiplier is always between 1e10 and 1e18.\n _spotPriceMultiplier = 1e18 / (10 ** (8 - szDecimals));\n\n _pairIndex = pairIndex;\n _tokenIndex = tokenIndex;\n }\n\n /// @inheritdoc IHyperEVMRateProvider\n function getSpotPriceMultiplier() external view returns (uint256) {\n return _spotPriceMultiplier;\n }\n\n /// @inheritdoc IHyperEVMRateProvider\n function getTokenIndex() external view returns (uint32) {\n return _tokenIndex;\n }\n\n /// @inheritdoc IHyperEVMRateProvider\n function getPairIndex() external view returns (uint32) {\n return _pairIndex;\n }\n\n /// @inheritdoc IRateProvider\n function getRate() external view returns (uint256) {\n uint256 spotPrice = HyperSpotPricePrecompile.spotPrice(_pairIndex);\n return spotPrice * _spotPriceMultiplier;\n }\n}\n"},"contracts/HyperEVMRateProviderFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport {\n IHyperEVMRateProviderFactory\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol\";\nimport {\n IHyperEVMRateProvider\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\nimport { Version } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\";\n\nimport { HyperEVMRateProvider } from \"./HyperEVMRateProvider.sol\";\n\n/// @notice Factory for deploying and managing HyperEVM rate providers.\ncontract HyperEVMRateProviderFactory is IHyperEVMRateProviderFactory, SingletonAuthentication, Version {\n uint256 internal immutable _rateProviderVersion;\n bool internal _isDisabled;\n\n mapping(bytes32 rateProviderId => IHyperEVMRateProvider rateProvider) internal _rateProviders;\n mapping(IHyperEVMRateProvider rateProvider => bool creationFlag) internal _isRateProviderFromFactory;\n\n constructor(\n IVault vault,\n string memory factoryVersion,\n uint256 rateProviderVersion\n ) SingletonAuthentication(vault) Version(factoryVersion) {\n _rateProviderVersion = rateProviderVersion;\n }\n\n /// @inheritdoc IHyperEVMRateProviderFactory\n function getRateProviderVersion() external view returns (uint256) {\n return _rateProviderVersion;\n }\n\n /// @inheritdoc IHyperEVMRateProviderFactory\n function create(uint32 tokenIndex, uint32 pairIndex) external returns (IHyperEVMRateProvider rateProvider) {\n _ensureEnabled();\n\n bytes32 rateProviderId = _computeRateProviderId(tokenIndex, pairIndex);\n\n address existingRateProvider = address(_rateProviders[rateProviderId]);\n\n if (existingRateProvider != address(0)) {\n revert RateProviderAlreadyExists(tokenIndex, pairIndex, existingRateProvider);\n }\n\n rateProvider = IHyperEVMRateProvider(address(new HyperEVMRateProvider(tokenIndex, pairIndex)));\n _rateProviders[rateProviderId] = rateProvider;\n _isRateProviderFromFactory[rateProvider] = true;\n\n emit RateProviderCreated(tokenIndex, pairIndex, address(rateProvider));\n }\n\n /// @inheritdoc IHyperEVMRateProviderFactory\n function getRateProvider(\n uint32 tokenIndex,\n uint32 pairIndex\n ) external view returns (IHyperEVMRateProvider rateProvider) {\n bytes32 rateProviderId = _computeRateProviderId(tokenIndex, pairIndex);\n rateProvider = _rateProviders[rateProviderId];\n if (address(rateProvider) == address(0)) {\n revert RateProviderNotFound(tokenIndex, pairIndex);\n }\n return rateProvider;\n }\n\n /// @inheritdoc IHyperEVMRateProviderFactory\n function isRateProviderFromFactory(IHyperEVMRateProvider rateProvider) external view returns (bool) {\n return _isRateProviderFromFactory[rateProvider];\n }\n\n /// @inheritdoc IHyperEVMRateProviderFactory\n function disable() external authenticate {\n _ensureEnabled();\n\n _isDisabled = true;\n emit RateProviderFactoryDisabled();\n }\n\n function _computeRateProviderId(uint32 tokenIndex, uint32 pairIndex) internal pure returns (bytes32) {\n return keccak256(abi.encode(tokenIndex, pairIndex));\n }\n\n function _ensureEnabled() internal view {\n if (_isDisabled) {\n revert RateProviderFactoryIsDisabled();\n }\n }\n}\n"},"contracts/OwnableAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { Ownable2Step } from \"@openzeppelin/contracts/access/Ownable2Step.sol\";\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { Authentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\";\n\n/**\n * @notice OwnableAuthentication is a contract that combines ownership management with authentication.\n * @dev Use it to pre-wire admin multisigs upon deployment to a contract that requires permissioned functions to work,\n * where the impact of the owner going rogue is minimal. Contract registries, fee burners, and other utility contracts\n * are good examples.\n * In turn, the pre-configured owner can speed up operations as it can perform any action right after deployment without\n * waiting for governance to set up the authorizer, which can take whole weeks.\n * On the other hand, governance can always revoke or change the owner at any given time, keeping superior powers\n * above the owner.\n */\ncontract OwnableAuthentication is Ownable2Step, Authentication {\n /// @notice The vault has not been set.\n error VaultNotSet();\n\n IVault public immutable vault;\n\n constructor(\n IVault vault_,\n address initialOwner\n ) Ownable(initialOwner) Authentication(bytes32(uint256(uint160(address(this))))) {\n if (address(vault_) == address(0)) {\n revert VaultNotSet();\n }\n\n vault = vault_;\n }\n\n /// @notice Returns the authorizer address according to the Vault.\n function getAuthorizer() external view returns (IAuthorizer) {\n return vault.getAuthorizer();\n }\n\n /**\n * @notice Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\n * @dev This allows governance to revoke the owner at any time, preserving control above the owner at all times.\n * address(0) is also a valid owner, as governance can simply choose to revoke ownership.\n * Ownership can always be forced back to any address later on.\n */\n function forceTransferOwnership(address newOwner) external authenticate {\n // `authenticate` let's the owner through, so we filter it out here.\n if (msg.sender == owner()) {\n revert SenderNotAllowed();\n }\n _transferOwnership(newOwner);\n }\n\n function _canPerform(bytes32 actionId, address user) internal view virtual override returns (bool) {\n // The owner is always allowed to perform any action.\n if (user == owner()) {\n return true;\n }\n\n // Otherwise, check the vault's authorizer for permission.\n return vault.getAuthorizer().canPerform(actionId, user, address(this));\n }\n}\n"},"contracts/PoolHelperCommon.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\";\n\nimport { IPoolHelperCommon } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { OwnableAuthentication } from \"./OwnableAuthentication.sol\";\n\n/// @notice Common code for helper functions that operate on a subset of pools.\nabstract contract PoolHelperCommon is IPoolHelperCommon, OwnableAuthentication {\n using EnumerableSet for EnumerableSet.AddressSet;\n\n // Counter for generating unique pool set IDs. Must start at 1, since 0 is defined as invalid.\n uint256 private _nextPoolSetId = 1;\n\n // Mapping from pool set ID to the manager address.\n mapping(uint256 poolSetId => address manager) private _poolSetManagers;\n\n // Reverse lookup to find which set a given manager owns.\n // Note that this means an address may only control a single pool set.\n mapping(address manager => uint256 poolSetId) private _poolSetLookup;\n\n // Mapping from a pool set ID to the set of pools in that pool set.\n mapping(uint256 poolSetId => EnumerableSet.AddressSet pools) private _poolSets;\n\n // Ensure the explicit poolSetId (used in the admin interface) is valid.\n modifier withValidPoolSet(uint256 poolSetId) {\n _ensureValidPoolSet(poolSetId);\n _;\n }\n\n // Ensure the pool is in a set controlled by the caller. This is used in derived contracts.\n modifier withValidPoolForSender(address pool) {\n uint256 poolSetId = _getValidPoolSetId();\n _ensurePoolInSet(poolSetId, pool);\n _;\n }\n\n // Ensure the manager is non-zero, and not already a manager of another set.\n modifier withValidManager(address manager) {\n _ensureValidManager(manager);\n _;\n }\n\n constructor(IVault vault, address initialOwner) OwnableAuthentication(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /***************************************************************************\n Manage Pool Sets\n ***************************************************************************/\n\n /// @inheritdoc IPoolHelperCommon\n function createPoolSet(\n address initialManager\n ) external onlyOwner withValidManager(initialManager) returns (uint256) {\n return _createPoolSet(initialManager);\n }\n\n /// @inheritdoc IPoolHelperCommon\n function createPoolSet(\n address initialManager,\n address[] memory newPools\n ) external onlyOwner withValidManager(initialManager) returns (uint256 poolSetId) {\n poolSetId = _createPoolSet(initialManager);\n\n if (newPools.length > 0) {\n addPoolsToSet(poolSetId, newPools);\n }\n }\n\n function _createPoolSet(address initialManager) internal returns (uint256 poolSetId) {\n poolSetId = _nextPoolSetId++;\n\n // Add to forward and reverse mappings.\n _poolSetManagers[poolSetId] = initialManager;\n _poolSetLookup[initialManager] = poolSetId;\n\n emit PoolSetCreated(poolSetId, initialManager);\n }\n\n /// @inheritdoc IPoolHelperCommon\n function destroyPoolSet(uint256 poolSetId) external onlyOwner withValidPoolSet(poolSetId) {\n EnumerableSet.AddressSet storage poolSet = _poolSets[poolSetId];\n\n // Remove all pools from the set.\n uint256 numPools = poolSet.length();\n\n while (numPools > 0) {\n unchecked {\n --numPools;\n }\n\n address pool = poolSet.at(numPools);\n emit PoolRemovedFromSet(pool, poolSetId);\n\n poolSet.remove(pool);\n }\n\n // Remove the set itself.\n delete _poolSets[poolSetId];\n\n address manager = _poolSetManagers[poolSetId];\n\n // Also remove associated manager from both mappings.\n _poolSetManagers[poolSetId] = address(0);\n _poolSetLookup[manager] = 0;\n\n emit PoolSetDestroyed(poolSetId, manager);\n }\n\n /// @inheritdoc IPoolHelperCommon\n function transferPoolSetOwnership(address newManager) external withValidManager(newManager) {\n uint256 poolSetId = _getValidPoolSetId();\n\n _poolSetManagers[poolSetId] = newManager;\n\n // The \"old\" manager must be the current sender.\n _poolSetLookup[msg.sender] = 0;\n _poolSetLookup[newManager] = poolSetId;\n\n emit PoolSetOwnershipTransferred(poolSetId, msg.sender, newManager);\n }\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /// @inheritdoc IPoolHelperCommon\n function addPoolsToSet(uint256 poolSetId, address[] memory newPools) public onlyOwner withValidPoolSet(poolSetId) {\n uint256 numPools = newPools.length;\n\n for (uint256 i = 0; i < numPools; i++) {\n address pool = newPools[i];\n\n // Ensure the address is a valid pool.\n if (vault.isPoolRegistered(pool) == false) {\n revert IVaultErrors.PoolNotRegistered(pool);\n }\n\n if (_poolSets[poolSetId].add(pool) == false) {\n revert PoolAlreadyInSet(pool, poolSetId);\n }\n\n // Call virtual function in case additional validation is needed.\n _validatePool(pool);\n\n emit PoolAddedToSet(pool, poolSetId);\n }\n }\n\n /// @inheritdoc IPoolHelperCommon\n function removePoolsFromSet(\n uint256 poolSetId,\n address[] memory pools\n ) public onlyOwner withValidPoolSet(poolSetId) {\n uint256 numPools = pools.length;\n\n for (uint256 i = 0; i < numPools; i++) {\n address pool = pools[i];\n\n if (_poolSets[poolSetId].remove(pool) == false) {\n revert PoolNotInSet(pool, poolSetId);\n }\n\n emit PoolRemovedFromSet(pool, poolSetId);\n }\n }\n\n /***************************************************************************\n Getters \n ***************************************************************************/\n\n /// @inheritdoc IPoolHelperCommon\n function getPoolSetIdForCaller() public view returns (uint256) {\n return _poolSetLookup[msg.sender];\n }\n\n /// @inheritdoc IPoolHelperCommon\n function getPoolSetIdForManager(address manager) public view returns (uint256) {\n return _poolSetLookup[manager];\n }\n\n /// @inheritdoc IPoolHelperCommon\n function getPoolCountForSet(uint256 poolSetId) external view withValidPoolSet(poolSetId) returns (uint256) {\n return _poolSets[poolSetId].length();\n }\n\n /// @inheritdoc IPoolHelperCommon\n function isValidPoolSetId(uint256 poolSetId) external view returns (bool) {\n return _poolSetManagers[poolSetId] != address(0);\n }\n\n /// @inheritdoc IPoolHelperCommon\n function isPoolInSet(address pool, uint256 poolSetId) external view withValidPoolSet(poolSetId) returns (bool) {\n return _poolSets[poolSetId].contains(pool);\n }\n\n /// @inheritdoc IPoolHelperCommon\n function getAllPoolsInSet(\n uint256 poolSetId\n ) external view withValidPoolSet(poolSetId) returns (address[] memory pools) {\n return _poolSets[poolSetId].values();\n }\n\n /// @inheritdoc IPoolHelperCommon\n function getPoolsInSet(\n uint256 poolSetId,\n uint256 from,\n uint256 to\n ) public view withValidPoolSet(poolSetId) returns (address[] memory pools) {\n uint256 spanLength = _poolSets[poolSetId].length();\n\n if (from > to || to > spanLength || from >= spanLength) {\n revert IndexOutOfBounds(poolSetId);\n }\n\n pools = new address[](to - from);\n for (uint256 i = from; i < to; i++) {\n pools[i - from] = _poolSets[poolSetId].at(i);\n }\n }\n\n /// @inheritdoc IPoolHelperCommon\n function getNextPoolSetId() external view returns (uint256) {\n return _nextPoolSetId;\n }\n\n /// @inheritdoc IPoolHelperCommon\n function getManagerForPoolSet(uint256 poolSetId) external view returns (address) {\n return _poolSetManagers[poolSetId];\n }\n\n /***************************************************************************\n Internal functions \n ***************************************************************************/\n\n // Find and validate the poolSetId for the caller.\n function _getValidPoolSetId() internal view returns (uint256 poolSetId) {\n poolSetId = getPoolSetIdForCaller();\n\n if (poolSetId == 0) {\n revert SenderIsNotPoolSetManager();\n }\n }\n\n function _ensureValidManager(address manager) internal view {\n if (manager == address(0)) {\n revert InvalidPoolSetManager();\n }\n\n if (_poolSetLookup[manager] != 0) {\n revert PoolSetManagerNotUnique(manager);\n }\n }\n\n function _ensurePoolInSet(uint256 poolSetId, address pool) internal view {\n if (_poolSets[poolSetId].contains(pool) == false) {\n revert PoolNotInSet(pool, poolSetId);\n }\n }\n\n /// @dev Optional function called in `addPoolsToSet` for optional additional validation.\n function _validatePool(address pool) internal view virtual {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function _ensureValidPoolSet(uint256 poolSetId) internal view {\n if (poolSetId == 0 || _poolSetManagers[poolSetId] == address(0)) {\n revert InvalidPoolSetId(poolSetId);\n }\n }\n}\n"},"contracts/PoolPauseHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IPoolPauseHelper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { PoolHelperCommon } from \"./PoolHelperCommon.sol\";\n\ncontract PoolPauseHelper is IPoolPauseHelper, PoolHelperCommon {\n constructor(IVault vault, address initialOwner) PoolHelperCommon(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /// @inheritdoc IPoolPauseHelper\n function pausePools(address[] memory pools) public {\n // Retrieve the poolSetId for this sender.\n uint256 poolSetId = _getValidPoolSetId();\n\n uint256 length = pools.length;\n\n for (uint256 i = 0; i < length; i++) {\n address pool = pools[i];\n _ensurePoolInSet(poolSetId, pool);\n\n vault.pausePool(pool);\n }\n }\n}\n"},"contracts/PoolSwapFeeHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IPoolSwapFeeHelper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { PoolHelperCommon } from \"./PoolHelperCommon.sol\";\n\ncontract PoolSwapFeeHelper is IPoolSwapFeeHelper, PoolHelperCommon {\n constructor(IVault vault, address initialOwner) PoolHelperCommon(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /// @inheritdoc IPoolSwapFeeHelper\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) public withValidPoolForSender(pool) {\n vault.setStaticSwapFeePercentage(pool, swapFeePercentage);\n }\n\n /***************************************************************************\n Internal functions \n ***************************************************************************/\n\n /// @inheritdoc PoolHelperCommon\n function _validatePool(address pool) internal view override {\n // Pools cannot have a swap fee manager.\n if (vault.getPoolRoleAccounts(pool).swapFeeManager != address(0)) {\n revert PoolHasSwapManager(pool);\n }\n }\n}\n"},"contracts/PriceImpactHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { IRouter } from \"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\";\nimport { IRouterQueries } from \"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol\";\n\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nimport { CallAndRevert } from \"./CallAndRevert.sol\";\n\ncontract PriceImpactHelper is CallAndRevert {\n using FixedPoint for uint256;\n using SafeCast for *;\n\n IVault internal immutable _vault;\n IRouter internal immutable _router;\n\n constructor(IVault vault, IRouter router) {\n _vault = vault;\n _router = router;\n }\n\n /*******************************************************************************\n Price Impact\n *******************************************************************************/\n\n function calculateAddLiquidityUnbalancedPriceImpact(\n address pool,\n uint256[] memory exactAmountsIn,\n address sender\n ) external returns (uint256 priceImpact) {\n uint256 bptAmountOut = _queryAddLiquidityUnbalanced(pool, exactAmountsIn, sender);\n uint256[] memory proportionalAmountsOut = _queryRemoveLiquidityProportional(pool, bptAmountOut, sender);\n\n // get deltas between exactAmountsIn and proportionalAmountsOut\n int256[] memory deltas = new int256[](exactAmountsIn.length);\n for (uint256 i = 0; i < exactAmountsIn.length; i++) {\n deltas[i] = proportionalAmountsOut[i].toInt256() - exactAmountsIn[i].toInt256();\n }\n\n // query add liquidity for each delta, so we know how unbalanced each amount in is in terms of BPT\n int256[] memory deltaBPTs = new int256[](exactAmountsIn.length);\n for (uint256 i = 0; i < exactAmountsIn.length; i++) {\n deltaBPTs[i] = _queryAddLiquidityUnbalancedForTokenDeltas(pool, i, deltas, sender);\n }\n\n // zero out deltas leaving only a remaining delta within a single token\n uint256 remainingDeltaIndex = _zeroOutDeltas(pool, deltas, deltaBPTs, sender);\n\n // calculate price impact ABA with remaining delta and its respective exactAmountIn\n // remaining delta is always negative, so by multiplying by -1 we get a positive number\n uint256 delta = (-deltas[remainingDeltaIndex]).toUint256();\n return delta.divDown(exactAmountsIn[remainingDeltaIndex]) / 2;\n }\n\n /*******************************************************************************\n Router Queries\n *******************************************************************************/\n\n function _queryAddLiquidityUnbalanced(\n address pool,\n uint256[] memory exactAmountsIn,\n address sender\n ) internal returns (uint256) {\n return\n abi.decode(\n _callAndRevert(\n address(_router),\n abi.encodeWithSelector(\n IRouterQueries.queryAddLiquidityUnbalanced.selector,\n pool,\n exactAmountsIn,\n sender,\n \"\"\n )\n ),\n (uint256)\n );\n }\n\n function _queryRemoveLiquidityProportional(\n address pool,\n uint256 bptAmountOut,\n address sender\n ) internal returns (uint256[] memory) {\n return\n abi.decode(\n _callAndRevert(\n address(_router),\n abi.encodeWithSelector(\n IRouterQueries.queryRemoveLiquidityProportional.selector,\n pool,\n bptAmountOut,\n sender,\n \"\"\n )\n ),\n (uint256[])\n );\n }\n\n function _querySwapSingleTokenExactIn(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 amountIn,\n address sender\n ) internal returns (uint256) {\n return\n abi.decode(\n _callAndRevert(\n address(_router),\n abi.encodeWithSelector(\n IRouterQueries.querySwapSingleTokenExactIn.selector,\n pool,\n tokenIn,\n tokenOut,\n amountIn,\n sender,\n \"\"\n )\n ),\n (uint256)\n );\n }\n\n function _querySwapSingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 amountOut,\n address sender\n ) internal returns (uint256) {\n return\n abi.decode(\n _callAndRevert(\n address(_router),\n abi.encodeWithSelector(\n IRouterQueries.querySwapSingleTokenExactOut.selector,\n pool,\n tokenIn,\n tokenOut,\n amountOut,\n sender,\n \"\"\n )\n ),\n (uint256)\n );\n }\n\n /*******************************************************************************\n Helpers\n *******************************************************************************/\n\n function _queryAddLiquidityUnbalancedForTokenDeltas(\n address pool,\n uint256 tokenIndex,\n int256[] memory deltas,\n address sender\n ) internal returns (int256) {\n uint256[] memory zerosWithSingleDelta = new uint256[](deltas.length);\n int256 delta = deltas[tokenIndex];\n\n if (delta == 0) {\n return 0;\n }\n\n zerosWithSingleDelta[tokenIndex] = uint256(delta > 0 ? delta : -delta);\n int256 result = int256(_queryAddLiquidityUnbalanced(pool, zerosWithSingleDelta, sender));\n\n return delta > 0 ? result : -result;\n }\n\n function _zeroOutDeltas(\n address pool,\n int256[] memory deltas,\n int256[] memory deltaBPTs,\n address sender\n ) internal returns (uint256) {\n // Index of closest from 0 negative number in deltaBPTs array.\n uint256 maxNegativeDeltaIndex = 0;\n IERC20[] memory poolTokens = _vault.getPoolTokens(pool);\n\n for (uint256 i = 0; i < deltas.length - 1; i++) {\n // get minPositiveDeltaIndex and maxNegativeDeltaIndex\n uint256 minPositiveDeltaIndex = _minPositiveIndex(deltaBPTs);\n maxNegativeDeltaIndex = _maxNegativeIndex(deltaBPTs);\n\n uint256 givenTokenIndex;\n uint256 resultTokenIndex;\n uint256 resultAmount;\n\n if (deltaBPTs[minPositiveDeltaIndex] < -deltaBPTs[maxNegativeDeltaIndex]) {\n givenTokenIndex = minPositiveDeltaIndex;\n resultTokenIndex = maxNegativeDeltaIndex;\n resultAmount = _querySwapSingleTokenExactIn(\n pool,\n poolTokens[givenTokenIndex],\n poolTokens[resultTokenIndex],\n deltas[givenTokenIndex].toUint256(),\n sender\n );\n } else {\n givenTokenIndex = maxNegativeDeltaIndex;\n resultTokenIndex = minPositiveDeltaIndex;\n resultAmount = _querySwapSingleTokenExactOut(\n pool,\n poolTokens[resultTokenIndex],\n poolTokens[givenTokenIndex],\n (-deltas[givenTokenIndex]).toUint256(),\n sender\n );\n }\n\n // Update deltas and deltaBPTs\n deltas[givenTokenIndex] = 0;\n deltaBPTs[givenTokenIndex] = 0;\n deltas[resultTokenIndex] += resultAmount.toInt256();\n deltaBPTs[resultTokenIndex] = _queryAddLiquidityUnbalancedForTokenDeltas(\n pool,\n resultTokenIndex,\n deltas,\n sender\n );\n }\n\n return maxNegativeDeltaIndex;\n }\n\n // returns the index of the smallest positive integer in an array - i.e. [3, 2, -2, -3] returns 1\n function _minPositiveIndex(int256[] memory array) internal pure returns (uint256 index) {\n int256 min = type(int256).max;\n for (uint256 i = 0; i < array.length; i++) {\n if (array[i] > 0 && array[i] < min) {\n min = array[i];\n index = i;\n }\n }\n }\n\n // returns the index of the biggest negative integer in an array - i.e. [3, 1, -2, -3] returns 2\n function _maxNegativeIndex(int256[] memory array) internal pure returns (uint256 index) {\n int256 max = type(int256).min;\n for (uint256 i = 0; i < array.length; i++) {\n if (array[i] < 0 && array[i] > max) {\n max = array[i];\n index = i;\n }\n }\n }\n}\n"},"contracts/ProtocolFeeHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IProtocolFeeHelper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol\";\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { PoolHelperCommon } from \"./PoolHelperCommon.sol\";\n\ncontract ProtocolFeeHelper is IProtocolFeeHelper, PoolHelperCommon {\n constructor(IVault vault, address initialOwner) PoolHelperCommon(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeHelper\n function setProtocolSwapFeePercentage(\n address pool,\n uint256 newProtocolSwapFeePercentage\n ) external withValidPoolForSender(pool) {\n _getProtocolFeeController().setProtocolSwapFeePercentage(pool, newProtocolSwapFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeHelper\n function setProtocolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage\n ) external withValidPoolForSender(pool) {\n _getProtocolFeeController().setProtocolYieldFeePercentage(pool, newProtocolYieldFeePercentage);\n }\n\n /***************************************************************************\n Internal functions \n ***************************************************************************/\n\n // The protocol fee controller is upgradeable in the Vault, so we must fetch it every time.\n function _getProtocolFeeController() internal view returns (IProtocolFeeController) {\n return vault.getProtocolFeeController();\n }\n}\n"},"contracts/ProtocolFeePercentagesProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\n\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IBasePoolFactory } from \"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\";\nimport { FEE_SCALING_FACTOR } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport {\n IProtocolFeePercentagesProvider\n} from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol\";\nimport {\n IBalancerContractRegistry,\n ContractType\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\nimport { ProtocolFeeController } from \"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\";\n\ncontract ProtocolFeePercentagesProvider is IProtocolFeePercentagesProvider, SingletonAuthentication {\n using SafeCast for uint256;\n\n /**\n * @dev Data structure to store default protocol fees by factory. Fee percentages are 18-decimal floating point\n * numbers, so we know they fit in 64 bits, allowing the fees to be stored in a single slot.\n *\n * @param protocolSwapFee The protocol swap fee\n * @param protocolYieldFee The protocol yield fee\n * @param areFactoryFeesSet Flag indicating fees have been set (allows zero values)\n */\n struct FactoryProtocolFees {\n uint64 protocolSwapFeePercentage;\n uint64 protocolYieldFeePercentage;\n bool areFactoryFeesSet;\n }\n\n IBalancerContractRegistry private immutable _trustedContractRegistry;\n IProtocolFeeController private immutable _protocolFeeController;\n\n uint256 private immutable _maxProtocolSwapFeePercentage;\n uint256 private immutable _maxProtocolYieldFeePercentage;\n\n // Factory address => FactoryProtocolFees\n mapping(IBasePoolFactory => FactoryProtocolFees) private _factoryDefaultFeePercentages;\n\n constructor(IVault vault, IBalancerContractRegistry trustedContractRegistry) SingletonAuthentication(vault) {\n IProtocolFeeController protocolFeeController = vault.getProtocolFeeController();\n\n _protocolFeeController = protocolFeeController;\n _trustedContractRegistry = trustedContractRegistry;\n\n // Read the maximum percentages from the `protocolFeeController`.\n _maxProtocolSwapFeePercentage = ProtocolFeeController(address(protocolFeeController))\n .MAX_PROTOCOL_SWAP_FEE_PERCENTAGE();\n _maxProtocolYieldFeePercentage = ProtocolFeeController(address(protocolFeeController))\n .MAX_PROTOCOL_YIELD_FEE_PERCENTAGE();\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function getProtocolFeeController() external view returns (IProtocolFeeController) {\n return _protocolFeeController;\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function getBalancerContractRegistry() external view returns (IBalancerContractRegistry) {\n return _trustedContractRegistry;\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function getFactorySpecificProtocolFeePercentages(\n address factory\n ) external view returns (uint256 protocolSwapFeePercentage, uint256 protocolYieldFeePercentage) {\n FactoryProtocolFees memory factoryFees = _getValidatedProtocolFees(factory);\n\n protocolSwapFeePercentage = factoryFees.protocolSwapFeePercentage;\n protocolYieldFeePercentage = factoryFees.protocolYieldFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function setFactorySpecificProtocolFeePercentages(\n address factory,\n uint256 protocolSwapFeePercentage,\n uint256 protocolYieldFeePercentage\n ) external authenticate {\n // Validate the fee percentages; don't store values that the `ProtocolFeeCollector` will reject.\n if (protocolSwapFeePercentage > _maxProtocolSwapFeePercentage) {\n revert IProtocolFeeController.ProtocolSwapFeePercentageTooHigh();\n }\n\n if (protocolYieldFeePercentage > _maxProtocolYieldFeePercentage) {\n revert IProtocolFeeController.ProtocolYieldFeePercentageTooHigh();\n }\n\n // Ensure the factory is valid.\n if (_trustedContractRegistry.isActiveBalancerContract(ContractType.POOL_FACTORY, factory) == false) {\n revert UnknownFactory(factory);\n }\n\n // Ensure precision checks will pass.\n _ensureValidPrecision(protocolSwapFeePercentage);\n _ensureValidPrecision(protocolYieldFeePercentage);\n\n // Store the default fee percentages, and mark the factory as registered.\n _factoryDefaultFeePercentages[IBasePoolFactory(factory)] = FactoryProtocolFees({\n protocolSwapFeePercentage: protocolSwapFeePercentage.toUint64(),\n protocolYieldFeePercentage: protocolYieldFeePercentage.toUint64(),\n areFactoryFeesSet: true\n });\n\n emit FactorySpecificProtocolFeePercentagesSet(factory, protocolSwapFeePercentage, protocolYieldFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function setProtocolFeePercentagesForPools(address factory, address[] memory pools) external {\n // Note that unless the factory fees were previously set in `setFactorySpecificProtocolFeePercentages` above,\n // this getter will revert. The fee setter function validates the factory with the `BalancerContractRegistry`,\n // so we know it is a valid Balancer pool factory.\n FactoryProtocolFees memory factoryFees = _getValidatedProtocolFees(factory);\n\n for (uint256 i = 0; i < pools.length; ++i) {\n address currentPool = pools[i];\n\n // We know from the logic above that the factory is valid. Now also check that the given pool actually\n // comes from that factory.\n if (IBasePoolFactory(factory).isPoolFromFactory(currentPool) == false) {\n revert PoolNotFromFactory(currentPool, factory);\n }\n\n _setPoolProtocolFees(\n currentPool,\n factoryFees.protocolSwapFeePercentage,\n factoryFees.protocolYieldFeePercentage\n );\n }\n }\n\n function _getValidatedProtocolFees(address factory) private view returns (FactoryProtocolFees memory factoryFees) {\n factoryFees = _factoryDefaultFeePercentages[IBasePoolFactory(factory)];\n\n if (factoryFees.areFactoryFeesSet == false) {\n revert FactoryFeesNotSet(factory);\n }\n }\n\n /**\n * @dev These are permissioned functions on `ProtocolFeeController`, so governance will need to allow this contract\n * to call `setProtocolSwapFeePercentage` and `setProtocolYieldFeePercentage`.\n */\n function _setPoolProtocolFees(\n address pool,\n uint256 protocolSwapFeePercentage,\n uint256 protocolYieldFeePercentage\n ) private {\n _protocolFeeController.setProtocolSwapFeePercentage(pool, protocolSwapFeePercentage);\n _protocolFeeController.setProtocolYieldFeePercentage(pool, protocolYieldFeePercentage);\n }\n\n /**\n * @dev This is a duplicate of the corresponding function in `ProtocolFeeController`, as it isn't exposed in the\n * deployed version of the contract.\n */\n function _ensureValidPrecision(uint256 feePercentage) private pure {\n // Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n // precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n // corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n // Ensure there will be no precision loss in the Vault - which would lead to a discrepancy between the\n // aggregate fee calculated here and that stored in the Vault.\n if ((feePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR != feePercentage) {\n revert IVaultErrors.FeePrecisionTooHigh();\n }\n }\n}\n"},"contracts/ProtocolFeeSweeper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\nimport { IProtocolFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\";\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\n\n/**\n * @notice Withdraw protocol fees, convert them to a target token, and forward to a recipient.\n * @dev This withdraws all protocol fees previously collected and allocated to the protocol by the\n * `ProtocolFeeController`, processes them with a configurable \"burner\" (e.g., from CowSwap) and forwards them to\n * a recipient address.\n *\n * An off-chain process can call `collectAggregateFees(pool)` on the fee controller for a given pool, which will\n * collect and allocate the fees to the protocol and pool creator. `getProtocolFeeAmounts(pool)` returns the fee\n * amounts available for withdrawal. If these are great enough, `sweepProtocolFeesForToken` here will withdraw,\n * convert, and forward them to the final recipient.\n */\ncontract ProtocolFeeSweeper is IProtocolFeeSweeper, SingletonAuthentication, ReentrancyGuardTransient {\n using SafeERC20 for IERC20;\n\n /// @notice All pool tokens are ERC20, so this contract should not handle ETH.\n error CannotReceiveEth();\n\n // Preferred token for receiving protocol fees. Passed to the fee burner as the target of fee token swaps.\n IERC20 private _targetToken;\n\n // Final destination of the collected protocol fees.\n address private _feeRecipient;\n\n // Allowlist of valid protocol fee burners.\n mapping(IProtocolFeeBurner feeBurner => bool isApproved) private _protocolFeeBurners;\n\n /// @notice Allows calls from fee recipient or governance allowed accounts (non-exclusive).\n modifier onlyFeeRecipientOrGovernance() {\n _ensureAuthenticatedByRole(address(this), _feeRecipient);\n _;\n }\n\n // The default configuration on deployment simply forwards all fee tokens to the `feeRecipient`.\n constructor(IVault vault, address feeRecipient) SingletonAuthentication(vault) {\n _setFeeRecipient(feeRecipient);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function sweepProtocolFeesForToken(\n address pool,\n IERC20 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner\n ) external nonReentrant onlyFeeRecipientOrGovernance {\n _sweepProtocolFeesForToken(pool, feeToken, minTargetTokenAmountOut, deadline, feeBurner, false);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function sweepProtocolFeesForWrappedToken(\n address pool,\n IERC4626 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner\n ) external nonReentrant onlyFeeRecipientOrGovernance {\n _sweepProtocolFeesForToken(pool, IERC20(address(feeToken)), minTargetTokenAmountOut, deadline, feeBurner, true);\n }\n\n function _sweepProtocolFeesForToken(\n address pool,\n IERC20 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner,\n bool shouldUnwrap\n ) internal {\n bool feeBurnerProvided = _getValidFeeBurner(feeBurner);\n\n uint256 existingBalance = feeToken.balanceOf(address(this));\n\n // Withdraw protocol fees to this contract. Note that governance will need to grant this contract permission\n // to call `withdrawProtocolFeesForToken` on the `ProtocolFeeController.\n IProtocolFeeController feeController = getProtocolFeeController();\n\n // Transfer any pending fees from the Vault to the ProtocolFeeController, and allocate the protocol and pool\n // creator portions.\n feeController.collectAggregateFees(pool);\n\n // Withdraw the protocol portion of the fees to this contract (requires permission).\n feeController.withdrawProtocolFeesForToken(pool, address(this), feeToken);\n\n uint256 withdrawnBalance = feeToken.balanceOf(address(this)) - existingBalance;\n\n if (withdrawnBalance > 0) {\n if (feeBurnerProvided) {\n IERC20 targetToken = _targetToken;\n\n // If the fee token is already the target, there's no need to swap. Simply transfer it.\n if (feeToken == targetToken) {\n if (shouldUnwrap) {\n revert UnwrapIsNotAllowed();\n }\n\n _transferFeeToken(pool, feeToken, withdrawnBalance);\n } else {\n if (shouldUnwrap) {\n IERC4626 erc4626Token = IERC4626(address(feeToken));\n\n feeToken = IERC20(erc4626Token.asset());\n withdrawnBalance = erc4626Token.redeem(withdrawnBalance, address(this), address(this));\n }\n\n // We must revert if this allowance is not entirely consumed by the burner, to avoid exploitable\n // \"hanging approvals.\" The order may be asynchronous, but it must pull the tokens immediately.\n feeToken.forceApprove(address(feeBurner), withdrawnBalance);\n // This is asynchronous; the burner will complete the action and emit an event.\n feeBurner.burn(\n pool,\n feeToken,\n withdrawnBalance,\n targetToken,\n minTargetTokenAmountOut,\n _feeRecipient,\n deadline\n );\n\n if (feeToken.allowance(address(this), address(feeBurner)) > 0) {\n revert BurnerDidNotConsumeAllowance();\n }\n }\n } else {\n // If no burner has been set, fall back on direct transfer of the fee token.\n _transferFeeToken(pool, feeToken, withdrawnBalance);\n }\n }\n }\n\n function _getValidFeeBurner(IProtocolFeeBurner feeBurner) private view returns (bool feeBurnerProvided) {\n feeBurnerProvided = address(feeBurner) != address(0);\n\n // Allow passing the zero address (no burner); this will simply transfer the fee tokens directly (e.g., if\n // there is no burner available for a given token).\n if (feeBurnerProvided) {\n if (_protocolFeeBurners[feeBurner]) {\n if (address(_targetToken) == address(0)) {\n revert InvalidTargetToken();\n }\n } else {\n revert UnsupportedProtocolFeeBurner(address(feeBurner));\n }\n }\n }\n\n function _transferFeeToken(address pool, IERC20 feeToken, uint256 withdrawnTokenBalance) private {\n address recipient = _feeRecipient;\n feeToken.safeTransfer(recipient, withdrawnTokenBalance);\n\n emit ProtocolFeeSwept(pool, feeToken, withdrawnTokenBalance, recipient);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function getProtocolFeeController() public view returns (IProtocolFeeController) {\n return getVault().getProtocolFeeController();\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function getTargetToken() external view returns (IERC20) {\n return _targetToken;\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function getFeeRecipient() external view returns (address) {\n return _feeRecipient;\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function isApprovedProtocolFeeBurner(address protocolFeeBurner) external view returns (bool) {\n return _protocolFeeBurners[IProtocolFeeBurner(protocolFeeBurner)];\n }\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeSweeper\n function setFeeRecipient(address feeRecipient) external onlyFeeRecipientOrGovernance {\n _setFeeRecipient(feeRecipient);\n }\n\n function _setFeeRecipient(address feeRecipient) internal {\n // Best effort to at least ensure the fee recipient isn't the zero address (so it doesn't literally burn all\n // protocol fees). Governance must ensure this is a valid address, as sweeping is permissionless.\n //\n // We could use a 2-step claim process like the `TimelockAuthorizer` here, but the consequences here are less\n // severe, so that might be overkill. Nothing can be bricked; the worst that can happen is loss of protocol\n // fees until the recipient is updated again.\n if (feeRecipient == address(0)) {\n revert InvalidFeeRecipient();\n }\n\n _feeRecipient = feeRecipient;\n\n emit FeeRecipientSet(feeRecipient);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function setTargetToken(IERC20 targetToken) external onlyFeeRecipientOrGovernance {\n _targetToken = targetToken;\n\n emit TargetTokenSet(targetToken);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function addProtocolFeeBurner(IProtocolFeeBurner protocolFeeBurner) external onlyFeeRecipientOrGovernance {\n if (_protocolFeeBurners[protocolFeeBurner]) {\n revert ProtocolFeeBurnerAlreadyAdded(address(protocolFeeBurner));\n }\n\n // Since the zero address is a sentinel value indicating no burner should be used, do not allow adding it.\n if (address(protocolFeeBurner) == address(0)) {\n revert InvalidProtocolFeeBurner();\n }\n\n _protocolFeeBurners[protocolFeeBurner] = true;\n\n emit ProtocolFeeBurnerAdded(address(protocolFeeBurner));\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function removeProtocolFeeBurner(IProtocolFeeBurner protocolFeeBurner) external onlyFeeRecipientOrGovernance {\n if (_protocolFeeBurners[protocolFeeBurner] == false) {\n revert ProtocolFeeBurnerNotAdded(address(protocolFeeBurner));\n }\n\n _protocolFeeBurners[protocolFeeBurner] = false;\n\n emit ProtocolFeeBurnerRemoved(address(protocolFeeBurner));\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function recoverProtocolFees(IERC20[] memory feeTokens) external nonReentrant {\n if (msg.sender != _feeRecipient) {\n revert SenderNotAllowed();\n }\n\n for (uint256 i = 0; i < feeTokens.length; ++i) {\n IERC20 feeToken = feeTokens[i];\n uint256 tokenBalance = feeToken.balanceOf(address(this));\n\n if (tokenBalance > 0) {\n feeToken.safeTransfer(msg.sender, tokenBalance);\n }\n }\n }\n\n /*******************************************************************************\n Default handlers\n *******************************************************************************/\n\n // Maybe these aren't needed, but given the general sensitivity of this contract, preemptively disallow any\n // ETH-related shenanigans. Tokens are always ERC20, so there should be no ETH involved in any operations.\n\n receive() external payable {\n revert CannotReceiveEth();\n }\n\n // solhint-disable no-complex-fallback\n\n fallback() external payable {\n if (msg.value > 0) {\n revert CannotReceiveEth();\n }\n\n revert(\"Not implemented\");\n }\n}\n"},"contracts/test/FeeBurnerAuthenticationMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\n\nimport { FeeBurnerAuthentication } from \"../FeeBurnerAuthentication.sol\";\n\ncontract FeeBurnerAuthenticationMock is FeeBurnerAuthentication {\n constructor(\n IProtocolFeeSweeper protocolFeeSweeper,\n address initialOwner\n ) FeeBurnerAuthentication(protocolFeeSweeper, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function manualOnlyProtocolFeeSweeper() external onlyProtocolFeeSweeper {}\n\n function manualOnlyFeeRecipientOrOwner() external onlyFeeRecipientOrOwner {}\n}\n"},"contracts/test/OwnableAuthenticationMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { Ownable2Step } from \"@openzeppelin/contracts/access/Ownable2Step.sol\";\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { Authentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\";\n\nimport { OwnableAuthentication } from \"../OwnableAuthentication.sol\";\n\ncontract OwnableAuthenticationMock is OwnableAuthentication {\n constructor(IVault vault, address initialOwner) OwnableAuthentication(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function permissionedFunction() external view authenticate {\n // solhint-disable-previous-line no-empty-blocks\n }\n}\n"},"contracts/test/PoolHelperMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { PoolHelperCommon } from \"../PoolHelperCommon.sol\";\n\ncontract PoolHelperMock is PoolHelperCommon {\n constructor(IVault vault, address initialOwner) PoolHelperCommon(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n}\n"},"contracts/test/PriceImpactHelperMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { IRouter } from \"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\";\n\nimport { PriceImpactHelper } from \"../PriceImpactHelper.sol\";\n\ncontract PriceImpactHelperMock is PriceImpactHelper {\n constructor(IVault vault, IRouter router) PriceImpactHelper(vault, router) {}\n\n function queryAddLiquidityUnbalancedForTokenDeltas(\n address pool,\n uint256 tokenIndex,\n int256[] memory deltas,\n address sender\n ) external returns (int256 deltaBPT) {\n return _queryAddLiquidityUnbalancedForTokenDeltas(pool, tokenIndex, deltas, sender);\n }\n\n function zeroOutDeltas(\n address pool,\n int256[] memory deltas,\n int256[] memory deltaBPTs,\n address sender\n ) external returns (uint256) {\n return _zeroOutDeltas(pool, deltas, deltaBPTs, sender);\n }\n\n function minPositiveIndex(int256[] memory array) external pure returns (uint256) {\n return _minPositiveIndex(array);\n }\n\n function maxNegativeIndex(int256[] memory array) external pure returns (uint256) {\n return _maxNegativeIndex(array);\n }\n}\n"},"contracts/test/ProtocolFeeBurnerMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { IProtocolFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\";\n\nimport { ERC20TestToken } from \"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\ncontract ProtocolFeeBurnerMock is IProtocolFeeBurner {\n using FixedPoint for uint256;\n using SafeERC20 for IERC20;\n\n uint256 private _tokenRatio = FixedPoint.ONE;\n\n bool transferFromEnabled = true;\n\n /// @inheritdoc IProtocolFeeBurner\n function burn(\n address pool,\n IERC20 feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 targetToken,\n uint256 minAmountOut,\n address recipient,\n uint256 deadline\n ) external {\n if (block.timestamp > deadline) {\n revert SwapDeadline();\n }\n\n if (transferFromEnabled) {\n feeToken.safeTransferFrom(msg.sender, address(this), exactFeeTokenAmountIn);\n }\n\n // Simulate the swap by minting the same amount of target to the recipient.\n ERC20TestToken(address(targetToken)).mint(recipient, exactFeeTokenAmountIn);\n\n uint256 targetTokenAmount = exactFeeTokenAmountIn.mulDown(_tokenRatio);\n if (targetTokenAmount < minAmountOut) {\n revert AmountOutBelowMin(targetToken, targetTokenAmount, minAmountOut);\n }\n\n // Just emit the event, simulating the tokens being exchanged at 1-to-1.\n emit ProtocolFeeBurned(pool, feeToken, exactFeeTokenAmountIn, targetToken, targetTokenAmount, recipient);\n }\n\n function setTokenRatio(uint256 ratio) external {\n _tokenRatio = ratio;\n }\n\n function setTransferFromEnabled(bool enabled) external {\n transferFromEnabled = enabled;\n }\n}\n"},"contracts/test/VaultMockForFeeSweeper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\n\ncontract VaultMockForFeeSweeper is IAuthorizer {\n using SafeERC20 for IERC20;\n\n mapping(address => bool) public owners;\n\n constructor() {\n owners[msg.sender] = true;\n }\n\n modifier onlyOwner() {\n require(owners[msg.sender], \"VaultMockForFeeSweeper: Not an owner\");\n _;\n }\n\n function getAuthorizer() external view returns (IAuthorizer authorizer) {\n return IAuthorizer(address(this));\n }\n\n function canPerform(bytes32, address account, address) external view returns (bool) {\n return owners[account];\n }\n\n function canPerform(bytes32, address account) external view returns (bool) {\n return owners[account];\n }\n\n function addOwner(address owner_) external onlyOwner {\n owners[owner_] = true;\n }\n\n function removeOwner(address owner_) external onlyOwner {\n owners[owner_] = false;\n }\n\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController) {\n return IProtocolFeeController(address(this));\n }\n\n function collectAggregateFees(address) external {}\n\n function withdrawProtocolFeesForToken(address, address recipient, IERC20 token) external onlyOwner {\n token.safeTransfer(recipient, token.balanceOf(address(this)));\n }\n}\n"},"contracts/TokenPairRegistry.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { ITokenPairRegistry } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol\";\nimport { SwapPathStep } from \"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { EnumerableSet } from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\";\nimport { InputHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\";\n\nimport { OwnableAuthentication } from \"./OwnableAuthentication.sol\";\n\n/**\n * @notice Stores token pair swap paths on-chain, allowing an admin to maintain swap routes.\n * @dev The paths are stored as arrays of `SwapPathStep` structs, which contain the pool or buffer\n * address, the output token, and a boolean indicating whether the step is a buffer or not.\n * Functions that add information to the registry are permissioned.\n */\ncontract TokenPairRegistry is ITokenPairRegistry, OwnableAuthentication {\n using EnumerableSet for EnumerableSet.AddressSet;\n\n mapping(bytes32 pairId => SwapPathStep[][] paths) internal _pairsToPaths;\n\n constructor(IVault vault, address initialOwner) OwnableAuthentication(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /// @inheritdoc ITokenPairRegistry\n function getPathAt(address tokenIn, address tokenOut, uint256 index) external view returns (SwapPathStep[] memory) {\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n return _pairsToPaths[tokenId][index];\n }\n\n /// @inheritdoc ITokenPairRegistry\n function getPathCount(address tokenIn, address tokenOut) external view returns (uint256) {\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n return _pairsToPaths[tokenId].length;\n }\n\n /// @inheritdoc ITokenPairRegistry\n function getPaths(address tokenIn, address tokenOut) external view returns (SwapPathStep[][] memory) {\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n return _pairsToPaths[tokenId];\n }\n\n /// @inheritdoc ITokenPairRegistry\n function addPath(address tokenIn, SwapPathStep[] memory steps) external authenticate {\n if (steps.length == 0) {\n revert EmptyPath();\n }\n\n address tokenOut = address(steps[steps.length - 1].tokenOut);\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n\n address stepTokenIn = tokenIn;\n for (uint256 i = 0; i < steps.length; ++i) {\n SwapPathStep memory step = steps[i];\n if (step.isBuffer) {\n _checkBufferStep(step.pool, stepTokenIn, address(step.tokenOut));\n } else {\n _checkPoolStep(step.pool, stepTokenIn, address(step.tokenOut));\n }\n\n // Update token in for the next iteration.\n stepTokenIn = address(step.tokenOut);\n }\n\n SwapPathStep[][] storage paths = _pairsToPaths[tokenId];\n paths.push();\n for (uint256 i = 0; i < steps.length; ++i) {\n paths[paths.length - 1].push(steps[i]);\n }\n emit PathAdded(tokenIn, tokenOut, _pairsToPaths[tokenId].length);\n }\n\n /// @inheritdoc ITokenPairRegistry\n function addSimplePath(address poolOrBuffer) external authenticate {\n if (vault.isPoolRegistered(poolOrBuffer)) {\n _addPool(poolOrBuffer);\n } else if (vault.isERC4626BufferInitialized(IERC4626(poolOrBuffer))) {\n _addBuffer(IERC4626(poolOrBuffer));\n } else {\n revert InvalidSimplePath(poolOrBuffer);\n }\n }\n\n /// @inheritdoc ITokenPairRegistry\n function removePathAtIndex(address tokenIn, address tokenOut, uint256 index) external authenticate {\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n SwapPathStep[][] storage paths = _pairsToPaths[tokenId];\n uint256 pathsLength = paths.length;\n\n if (index >= pathsLength) {\n revert IndexOutOfBounds();\n }\n\n if (pathsLength > 1 && index != pathsLength - 1) {\n paths[index] = paths[pathsLength - 1];\n }\n // pop() can be used to clear dynamic arrays: it deletes every element and removes the inner array entirely.\n paths.pop();\n\n emit PathRemoved(tokenIn, tokenOut, paths.length);\n }\n\n /// @inheritdoc ITokenPairRegistry\n function removeSimplePath(address poolOrBuffer) external authenticate {\n if (vault.isPoolRegistered(poolOrBuffer)) {\n _removePool(poolOrBuffer);\n } else if (vault.isERC4626BufferInitialized(IERC4626(poolOrBuffer))) {\n _removeBuffer(IERC4626(poolOrBuffer));\n } else {\n revert InvalidSimplePath(poolOrBuffer);\n }\n }\n\n function _addPool(address pool) internal {\n IERC20[] memory tokens = vault.getPoolTokens(pool);\n\n uint256 tokenPairs = tokens.length - 1;\n for (uint256 i = 0; i < tokenPairs; ++i) {\n for (uint256 j = i + 1; j < tokens.length; ++j) {\n _addTokenPair(pool, address(tokens[i]), address(tokens[j]), false);\n }\n }\n }\n\n /// @dev Always wrap, as long as it's a registered buffer in the Vault.\n function _addBuffer(IERC4626 wrappedToken) internal {\n address underlyingToken = vault.getBufferAsset(wrappedToken);\n _addTokenPair(address(wrappedToken), underlyingToken, address(wrappedToken), true);\n }\n\n function _addTokenPair(address poolOrBuffer, address tokenA, address tokenB, bool isBuffer) internal {\n _addSimplePairStep(poolOrBuffer, tokenA, tokenB, isBuffer);\n _addSimplePairStep(poolOrBuffer, tokenB, tokenA, isBuffer);\n }\n\n function _addSimplePairStep(address poolOrBuffer, address tokenIn, address tokenOut, bool isBuffer) internal {\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n SwapPathStep memory step = SwapPathStep({ pool: poolOrBuffer, tokenOut: IERC20(tokenOut), isBuffer: isBuffer });\n\n SwapPathStep[][] storage paths = _pairsToPaths[tokenId];\n paths.push();\n paths[paths.length - 1].push(step);\n emit PathAdded(tokenIn, tokenOut, _pairsToPaths[tokenId].length);\n }\n\n function _removePool(address pool) internal {\n IERC20[] memory tokens = vault.getPoolTokens(pool);\n\n uint256 tokenPairs = tokens.length - 1;\n for (uint256 i = 0; i < tokenPairs; ++i) {\n for (uint256 j = i + 1; j < tokens.length; ++j) {\n _removeTokenPair(pool, address(tokens[i]), address(tokens[j]));\n }\n }\n }\n\n function _removeTokenPair(address poolOrBuffer, address tokenA, address tokenB) internal {\n _removeSimplePairStep(poolOrBuffer, tokenA, tokenB);\n _removeSimplePairStep(poolOrBuffer, tokenB, tokenA);\n }\n\n function _removeSimplePairStep(address poolOrBuffer, address tokenIn, address tokenOut) internal {\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n\n SwapPathStep[][] storage paths = _pairsToPaths[tokenId];\n\n // We first look for a path of length 1, representing a simple pair.\n for (uint256 i = 0; i < paths.length; ++i) {\n SwapPathStep[] storage steps = paths[i];\n\n if (steps.length == 1 && steps[0].pool == poolOrBuffer && address(steps[0].tokenOut) == tokenOut) {\n // Element found. Re-arrange paths if needed, replacing the current element with the last one.\n if (paths.length > 1) {\n paths[i] = paths[paths.length - 1];\n }\n\n // Nothing else to do here.\n paths.pop();\n emit PathRemoved(tokenIn, tokenOut, paths.length);\n\n return;\n }\n }\n\n // If we didn't return at this point, we revert with an error indicating the invalid removal attempt.\n revert InvalidRemovePath(poolOrBuffer, tokenIn, tokenOut);\n }\n\n function _removeBuffer(IERC4626 wrappedToken) internal {\n address underlyingToken = vault.getBufferAsset(wrappedToken);\n _removeTokenPair(address(wrappedToken), underlyingToken, address(wrappedToken));\n }\n\n function _getTokenPairId(address tokenIn, address tokenOut) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(tokenIn, tokenOut));\n }\n\n function _checkBufferStep(address buffer, address tokenIn, address tokenOut) internal view {\n address underlying = address(vault.getBufferAsset(IERC4626(buffer)));\n\n if (underlying == address(0)) {\n revert BufferNotInitialized(buffer);\n }\n\n if (tokenIn == underlying) {\n // This is a wrap.\n if (tokenOut != address(buffer)) {\n revert InvalidBufferPath(buffer, tokenIn, tokenOut);\n }\n } else if (tokenIn == buffer) {\n // This is an unwrap.\n if (tokenOut != address(underlying)) {\n revert InvalidBufferPath(buffer, tokenIn, tokenOut);\n }\n } else {\n // Token in must be either wrapped or underlying.\n revert InvalidBufferPath(buffer, tokenIn, tokenOut);\n }\n }\n\n function _checkPoolStep(address pool, address tokenIn, address tokenOut) internal view {\n IERC20[] memory tokens = vault.getPoolTokens(pool);\n\n bool foundIn = false;\n bool foundOut = false;\n\n for (uint256 i = 0; i < tokens.length; ++i) {\n if (tokens[i] == IERC20(tokenIn)) {\n foundIn = true;\n }\n if (tokens[i] == IERC20(tokenOut)) {\n foundOut = true;\n }\n }\n\n if (foundIn == false || foundOut == false) {\n revert InvalidSimplePath(pool);\n }\n }\n}\n"},"contracts/utils/HyperSpotPricePrecompile.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.24;\n\n/**\n * @notice Library to interact with the Hyperliquid spot price precompile.\n * @dev The precompile is a special type of code, executed in the Hypercore's node. For more information, see\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore .\n */\nlibrary HyperSpotPricePrecompile {\n address public constant SPOT_PRICE_PRECOMPILE_ADDRESS = 0x0000000000000000000000000000000000000808;\n\n /// @notice The precompile had an error while fetching the spot price.\n error SpotPricePrecompileFailed();\n\n /// @notice The spot price is zero.\n error SpotPriceIsZero();\n\n function spotPrice(uint32 pairIndex) internal view returns (uint256) {\n (bool success, bytes memory spotPriceBytes) = SPOT_PRICE_PRECOMPILE_ADDRESS.staticcall(abi.encode(pairIndex));\n if (success == false) {\n revert SpotPricePrecompileFailed();\n }\n uint256 price = abi.decode(spotPriceBytes, (uint256));\n if (price == 0) {\n revert SpotPriceIsZero();\n }\n return price;\n }\n}\n"},"contracts/utils/HyperTokenInfoPrecompile.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.24;\n\n/**\n * @notice Library to interact with the Hyperliquid token info precompile.\n * @dev The precompile is a special type of code, executed in the Hypercore's node. For more information, see\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore .\n */\nlibrary HyperTokenInfoPrecompile {\n // The following structure is defined by the token info precompile.\n struct HyperTokenInfo {\n string name;\n uint64[] spots;\n uint64 deployerTradingFeeShare;\n address deployer;\n address evmContract;\n uint8 szDecimals;\n uint8 weiDecimals;\n int8 evmExtraWeiDecimals;\n }\n\n address public constant TOKEN_INFO_PRECOMPILE_ADDRESS = 0x000000000000000000000000000000000000080C;\n\n /// @notice The precompile had an error while fetching the token info.\n error TokenInfoPrecompileFailed();\n\n function szDecimals(uint32 tokenIndex) internal view returns (uint8) {\n (bool success, bytes memory out) = TOKEN_INFO_PRECOMPILE_ADDRESS.staticcall(abi.encode(tokenIndex));\n if (success == false) {\n revert TokenInfoPrecompileFailed();\n }\n HyperTokenInfo memory tokenInfo = abi.decode(out, (HyperTokenInfo));\n return tokenInfo.szDecimals;\n }\n}\n"}},"settings":{"viaIR":true,"evmVersion":"cancun","optimizer":{"enabled":true,"runs":9999,"details":{"yulDetails":{"optimizerSteps":"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu"}}},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}}}},"output":{"errors":[{"component":"general","errorCode":"2394","formattedMessage":"Warning: Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.\n --> @balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol:74:13:\n |\n74 | tstore(slot, value)\n | ^^^^^^\n\n","message":"Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.","severity":"warning","sourceLocation":{"end":2572,"file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","start":2566},"type":"Warning"}],"sources":{"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","exportedSymbols":{"IAuthentication":[14]},"id":15,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthentication","contractDependencies":[],"contractKind":"interface","documentation":{"id":2,"nodeType":"StructuredDocumentation","src":"72:77:0","text":"@notice Simple interface for permissioned calling of external functions."},"fullyImplemented":false,"id":14,"linearizedBaseContracts":[14],"name":"IAuthentication","nameLocation":"159:15:0","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3,"nodeType":"StructuredDocumentation","src":"181:67:0","text":"@notice The sender does not have permission to call a function."},"errorSelector":"23dada53","id":5,"name":"SenderNotAllowed","nameLocation":"259:16:0","nodeType":"ErrorDefinition","parameters":{"id":4,"nodeType":"ParameterList","parameters":[],"src":"275:2:0"},"src":"253:25:0"},{"documentation":{"id":6,"nodeType":"StructuredDocumentation","src":"284:237:0","text":" @notice Returns the action identifier associated with the external function described by `selector`.\n @param selector The 4-byte selector of the permissioned function\n @return actionId The computed actionId"},"functionSelector":"851c1bb3","id":13,"implemented":false,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"535:11:0","nodeType":"FunctionDefinition","parameters":{"id":9,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8,"mutability":"mutable","name":"selector","nameLocation":"554:8:0","nodeType":"VariableDeclaration","scope":13,"src":"547:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":7,"name":"bytes4","nodeType":"ElementaryTypeName","src":"547:6:0","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"546:17:0"},"returnParameters":{"id":12,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11,"mutability":"mutable","name":"actionId","nameLocation":"595:8:0","nodeType":"VariableDeclaration","scope":13,"src":"587:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10,"name":"bytes32","nodeType":"ElementaryTypeName","src":"587:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"586:18:0"},"scope":14,"src":"526:79:0","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":15,"src":"149:458:0","usedErrors":[5],"usedEvents":[]}],"src":"46:562:0"},"id":0},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","exportedSymbols":{"IRateProvider":[24]},"id":25,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":16,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:1"},{"abstract":false,"baseContracts":[],"canonicalName":"IRateProvider","contractDependencies":[],"contractKind":"interface","documentation":{"id":17,"nodeType":"StructuredDocumentation","src":"72:56:1","text":"@notice General interface for token exchange rates."},"fullyImplemented":false,"id":24,"linearizedBaseContracts":[24],"name":"IRateProvider","nameLocation":"138:13:1","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":18,"nodeType":"StructuredDocumentation","src":"158:573:1","text":" @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n rates in downstream computations.\n @return rate The current token rate"},"functionSelector":"679aefce","id":23,"implemented":false,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"745:7:1","nodeType":"FunctionDefinition","parameters":{"id":19,"nodeType":"ParameterList","parameters":[],"src":"752:2:1"},"returnParameters":{"id":22,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21,"mutability":"mutable","name":"rate","nameLocation":"786:4:1","nodeType":"VariableDeclaration","scope":23,"src":"778:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20,"name":"uint256","nodeType":"ElementaryTypeName","src":"778:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"777:14:1"},"scope":24,"src":"736:56:1","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":25,"src":"128:666:1","usedErrors":[],"usedEvents":[]}],"src":"46:749:1"},"id":1},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol","exportedSymbols":{"IVersion":[34]},"id":35,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":26,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:2"},{"abstract":false,"baseContracts":[],"canonicalName":"IVersion","contractDependencies":[],"contractKind":"interface","documentation":{"id":27,"nodeType":"StructuredDocumentation","src":"72:77:2","text":"@notice Simple interface to retrieve the version of a deployed contract."},"fullyImplemented":false,"id":34,"linearizedBaseContracts":[34],"name":"IVersion","nameLocation":"159:8:2","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":28,"nodeType":"StructuredDocumentation","src":"174:418:2","text":" @notice Return arbitrary text representing the version of a contract.\n @dev For standard Balancer contracts, returns a JSON representation of the contract version containing name,\n version number and task ID. See real examples in the deployment repo; local tests just use plain text strings.\n @return version The version string corresponding to the current deployed contract"},"functionSelector":"54fd4d50","id":33,"implemented":false,"kind":"function","modifiers":[],"name":"version","nameLocation":"606:7:2","nodeType":"FunctionDefinition","parameters":{"id":29,"nodeType":"ParameterList","parameters":[],"src":"613:2:2"},"returnParameters":{"id":32,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33,"src":"639:13:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":30,"name":"string","nodeType":"ElementaryTypeName","src":"639:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"638:15:2"},"scope":34,"src":"597:57:2","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":35,"src":"149:507:2","usedErrors":[],"usedEvents":[]}],"src":"46:611:2"},"id":2},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","exportedSymbols":{"ContractType":[43],"IBalancerContractRegistry":[212]},"id":213,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":36,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:3"},{"canonicalName":"ContractType","documentation":{"id":37,"nodeType":"StructuredDocumentation","src":"72:61:3","text":"@notice Registered contracts must be one of these types."},"id":43,"members":[{"id":38,"name":"OTHER","nameLocation":"157:5:3","nodeType":"EnumValue","src":"157:5:3"},{"id":39,"name":"POOL_FACTORY","nameLocation":"255:12:3","nodeType":"EnumValue","src":"255:12:3"},{"id":40,"name":"ROUTER","nameLocation":"273:6:3","nodeType":"EnumValue","src":"273:6:3"},{"id":41,"name":"HOOK","nameLocation":"285:4:3","nodeType":"EnumValue","src":"285:4:3"},{"id":42,"name":"ERC4626","nameLocation":"295:7:3","nodeType":"EnumValue","src":"295:7:3"}],"name":"ContractType","nameLocation":"138:12:3","nodeType":"EnumDefinition","src":"133:171:3"},{"abstract":false,"baseContracts":[],"canonicalName":"IBalancerContractRegistry","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":212,"linearizedBaseContracts":[212],"name":"IBalancerContractRegistry","nameLocation":"316:25:3","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IBalancerContractRegistry.ContractInfo","documentation":{"id":44,"nodeType":"StructuredDocumentation","src":"348:887:3","text":" @notice Store the state of a registered Balancer contract.\n @dev Contracts can be deprecated, so we store an active flag indicating the status. With two flags, we can\n differentiate between deprecated and non-existent. The same contract address can have multiple names, but\n only one type. If a contract is legitimately multiple types (e.g., a hook that also acts as a router), set\n the type to its \"primary\" function: hook, in this case. The \"Other\" type is intended as a catch-all for\n things that don't find into the standard types (e.g., helper contracts).\n @param contractType The type of contract (e.g., Router or Hook)\n @param isRegistered This flag indicates whether there is an entry for the associated address\n @param isActive If there is an entry, this flag indicates whether it is active or deprecated"},"id":52,"members":[{"constant":false,"id":47,"mutability":"mutable","name":"contractType","nameLocation":"1283:12:3","nodeType":"VariableDeclaration","scope":52,"src":"1270:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":46,"nodeType":"UserDefinedTypeName","pathNode":{"id":45,"name":"ContractType","nameLocations":["1270:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"1270:12:3"},"referencedDeclaration":43,"src":"1270:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":49,"mutability":"mutable","name":"isRegistered","nameLocation":"1310:12:3","nodeType":"VariableDeclaration","scope":52,"src":"1305:17:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":48,"name":"bool","nodeType":"ElementaryTypeName","src":"1305:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":51,"mutability":"mutable","name":"isActive","nameLocation":"1337:8:3","nodeType":"VariableDeclaration","scope":52,"src":"1332:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":50,"name":"bool","nodeType":"ElementaryTypeName","src":"1332:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ContractInfo","nameLocation":"1247:12:3","nodeType":"StructDefinition","scope":212,"src":"1240:112:3","visibility":"public"},{"anonymous":false,"documentation":{"id":53,"nodeType":"StructuredDocumentation","src":"1358:278:3","text":" @notice Emitted when a new contract is registered.\n @param contractType The type of contract being registered\n @param contractName The name of the contract being registered\n @param contractAddress The address of the contract being registered"},"eventSelector":"b12ed936cf481273b3ed037dc706d110c49bd7ba6743e67082cd772a6e9102e2","id":62,"name":"BalancerContractRegistered","nameLocation":"1647:26:3","nodeType":"EventDefinition","parameters":{"id":61,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56,"indexed":true,"mutability":"mutable","name":"contractType","nameLocation":"1704:12:3","nodeType":"VariableDeclaration","scope":62,"src":"1683:33:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":55,"nodeType":"UserDefinedTypeName","pathNode":{"id":54,"name":"ContractType","nameLocations":["1683:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"1683:12:3"},"referencedDeclaration":43,"src":"1683:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":58,"indexed":true,"mutability":"mutable","name":"contractName","nameLocation":"1741:12:3","nodeType":"VariableDeclaration","scope":62,"src":"1726:27:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":57,"name":"string","nodeType":"ElementaryTypeName","src":"1726:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":60,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"1779:15:3","nodeType":"VariableDeclaration","scope":62,"src":"1763:31:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59,"name":"address","nodeType":"ElementaryTypeName","src":"1763:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1673:127:3"},"src":"1641:160:3"},{"anonymous":false,"documentation":{"id":63,"nodeType":"StructuredDocumentation","src":"1807:296:3","text":" @notice Emitted when a new contract is deregistered (deleted).\n @param contractType The type of contract being deregistered\n @param contractName The name of the contract being deregistered\n @param contractAddress The address of the contract being deregistered"},"eventSelector":"fa2e7bfe3791287aa74ffe867372b78e61b60e0516978c4952f83f7416fafb7c","id":72,"name":"BalancerContractDeregistered","nameLocation":"2114:28:3","nodeType":"EventDefinition","parameters":{"id":71,"nodeType":"ParameterList","parameters":[{"constant":false,"id":66,"indexed":true,"mutability":"mutable","name":"contractType","nameLocation":"2173:12:3","nodeType":"VariableDeclaration","scope":72,"src":"2152:33:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":65,"nodeType":"UserDefinedTypeName","pathNode":{"id":64,"name":"ContractType","nameLocations":["2152:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"2152:12:3"},"referencedDeclaration":43,"src":"2152:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":68,"indexed":true,"mutability":"mutable","name":"contractName","nameLocation":"2210:12:3","nodeType":"VariableDeclaration","scope":72,"src":"2195:27:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":67,"name":"string","nodeType":"ElementaryTypeName","src":"2195:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":70,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2248:15:3","nodeType":"VariableDeclaration","scope":72,"src":"2232:31:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":69,"name":"address","nodeType":"ElementaryTypeName","src":"2232:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2142:127:3"},"src":"2108:162:3"},{"anonymous":false,"documentation":{"id":73,"nodeType":"StructuredDocumentation","src":"2276:203:3","text":" @notice Emitted when a registered contract is deprecated.\n @dev This sets the `isActive` flag to false.\n @param contractAddress The address of the contract being deprecated"},"eventSelector":"07b81cace396ea12f83465895486ac006cd17917e41b9759ad5e663404f1497b","id":77,"name":"BalancerContractDeprecated","nameLocation":"2490:26:3","nodeType":"EventDefinition","parameters":{"id":76,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2533:15:3","nodeType":"VariableDeclaration","scope":77,"src":"2517:31:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74,"name":"address","nodeType":"ElementaryTypeName","src":"2517:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2516:33:3"},"src":"2484:66:3"},{"anonymous":false,"documentation":{"id":78,"nodeType":"StructuredDocumentation","src":"2556:187:3","text":" @notice Emitted when an alias is added or updated.\n @param contractAlias The alias name\n @param contractAddress The address of the contract being deprecated"},"eventSelector":"06618a6a1a6a413a59097e7c362ee8260afae8f07bd94bc0938e573058465483","id":84,"name":"ContractAliasUpdated","nameLocation":"2754:20:3","nodeType":"EventDefinition","parameters":{"id":83,"nodeType":"ParameterList","parameters":[{"constant":false,"id":80,"indexed":true,"mutability":"mutable","name":"contractAlias","nameLocation":"2790:13:3","nodeType":"VariableDeclaration","scope":84,"src":"2775:28:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":79,"name":"string","nodeType":"ElementaryTypeName","src":"2775:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":82,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2821:15:3","nodeType":"VariableDeclaration","scope":84,"src":"2805:31:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":81,"name":"address","nodeType":"ElementaryTypeName","src":"2805:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2774:63:3"},"src":"2748:90:3"},{"documentation":{"id":85,"nodeType":"StructuredDocumentation","src":"2844:531:3","text":" @notice A contract has already been registered under the given address.\n @dev Both names and addresses must be unique in the primary registration mapping. Though there are two mappings\n to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent\n name => address => state mapping.\n @param contractType The contract type, provided for documentation purposes\n @param contractAddress The address of the previously registered contract"},"errorSelector":"25a14e0c","id":92,"name":"ContractAddressAlreadyRegistered","nameLocation":"3386:32:3","nodeType":"ErrorDefinition","parameters":{"id":91,"nodeType":"ParameterList","parameters":[{"constant":false,"id":88,"mutability":"mutable","name":"contractType","nameLocation":"3432:12:3","nodeType":"VariableDeclaration","scope":92,"src":"3419:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":87,"nodeType":"UserDefinedTypeName","pathNode":{"id":86,"name":"ContractType","nameLocations":["3419:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"3419:12:3"},"referencedDeclaration":43,"src":"3419:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":90,"mutability":"mutable","name":"contractAddress","nameLocation":"3454:15:3","nodeType":"VariableDeclaration","scope":92,"src":"3446:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":89,"name":"address","nodeType":"ElementaryTypeName","src":"3446:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3418:52:3"},"src":"3380:91:3"},{"documentation":{"id":93,"nodeType":"StructuredDocumentation","src":"3477:439:3","text":" @notice A contract has already been registered under the given name.\n @dev Note that names must be unique; it is not possible to register two contracts with the same name and\n different types, or the same name and different addresses.\n @param contractType The registered contract type, provided for documentation purposes\n @param contractName The name of the previously registered contract"},"errorSelector":"a1e69ed3","id":100,"name":"ContractNameAlreadyRegistered","nameLocation":"3927:29:3","nodeType":"ErrorDefinition","parameters":{"id":99,"nodeType":"ParameterList","parameters":[{"constant":false,"id":96,"mutability":"mutable","name":"contractType","nameLocation":"3970:12:3","nodeType":"VariableDeclaration","scope":100,"src":"3957:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":95,"nodeType":"UserDefinedTypeName","pathNode":{"id":94,"name":"ContractType","nameLocations":["3957:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"3957:12:3"},"referencedDeclaration":43,"src":"3957:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":98,"mutability":"mutable","name":"contractName","nameLocation":"3991:12:3","nodeType":"VariableDeclaration","scope":100,"src":"3984:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":97,"name":"string","nodeType":"ElementaryTypeName","src":"3984:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3956:48:3"},"src":"3921:84:3"},{"documentation":{"id":101,"nodeType":"StructuredDocumentation","src":"4011:338:3","text":" @notice The proposed contract name has already been added as an alias.\n @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n @param contractName The name of the previously registered contract\n @param contractAddress The address of the previously registered contract"},"errorSelector":"6d4f9990","id":107,"name":"ContractNameInUseAsAlias","nameLocation":"4360:24:3","nodeType":"ErrorDefinition","parameters":{"id":106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":103,"mutability":"mutable","name":"contractName","nameLocation":"4392:12:3","nodeType":"VariableDeclaration","scope":107,"src":"4385:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":102,"name":"string","nodeType":"ElementaryTypeName","src":"4385:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":105,"mutability":"mutable","name":"contractAddress","nameLocation":"4414:15:3","nodeType":"VariableDeclaration","scope":107,"src":"4406:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":104,"name":"address","nodeType":"ElementaryTypeName","src":"4406:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4384:46:3"},"src":"4354:77:3"},{"documentation":{"id":108,"nodeType":"StructuredDocumentation","src":"4437:371:3","text":" @notice The proposed alias has already been registered as a contract.\n @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n @param contractType The registered contract type, provided for documentation purposes\n @param contractName The name of the previously registered contract (and proposed alias)"},"errorSelector":"4466cf0c","id":115,"name":"ContractAliasInUseAsName","nameLocation":"4819:24:3","nodeType":"ErrorDefinition","parameters":{"id":114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":111,"mutability":"mutable","name":"contractType","nameLocation":"4857:12:3","nodeType":"VariableDeclaration","scope":115,"src":"4844:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":110,"nodeType":"UserDefinedTypeName","pathNode":{"id":109,"name":"ContractType","nameLocations":["4844:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"4844:12:3"},"referencedDeclaration":43,"src":"4844:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":113,"mutability":"mutable","name":"contractName","nameLocation":"4878:12:3","nodeType":"VariableDeclaration","scope":115,"src":"4871:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":112,"name":"string","nodeType":"ElementaryTypeName","src":"4871:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4843:48:3"},"src":"4813:79:3"},{"documentation":{"id":116,"nodeType":"StructuredDocumentation","src":"4898:175:3","text":" @notice Thrown when attempting to deregister a contract that was not previously registered.\n @param contractName The name of the unregistered contract"},"errorSelector":"cd3599f9","id":120,"name":"ContractNameNotRegistered","nameLocation":"5084:25:3","nodeType":"ErrorDefinition","parameters":{"id":119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":118,"mutability":"mutable","name":"contractName","nameLocation":"5117:12:3","nodeType":"VariableDeclaration","scope":120,"src":"5110:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":117,"name":"string","nodeType":"ElementaryTypeName","src":"5110:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5109:21:3"},"src":"5078:53:3"},{"documentation":{"id":121,"nodeType":"StructuredDocumentation","src":"5137:329:3","text":" @notice An operation that requires a valid contract specified an unrecognized address.\n @dev A contract being deprecated was never registered, or the target of an alias isn't a previously\n registered contract.\n @param contractAddress The address of the contract that was not registered"},"errorSelector":"f5b5d364","id":125,"name":"ContractAddressNotRegistered","nameLocation":"5477:28:3","nodeType":"ErrorDefinition","parameters":{"id":124,"nodeType":"ParameterList","parameters":[{"constant":false,"id":123,"mutability":"mutable","name":"contractAddress","nameLocation":"5514:15:3","nodeType":"VariableDeclaration","scope":125,"src":"5506:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":122,"name":"address","nodeType":"ElementaryTypeName","src":"5506:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5505:25:3"},"src":"5471:60:3"},{"documentation":{"id":126,"nodeType":"StructuredDocumentation","src":"5537:145:3","text":" @notice Contracts can only be deprecated once.\n @param contractAddress The address of the previously deprecated contract"},"errorSelector":"1f118c35","id":130,"name":"ContractAlreadyDeprecated","nameLocation":"5693:25:3","nodeType":"ErrorDefinition","parameters":{"id":129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":128,"mutability":"mutable","name":"contractAddress","nameLocation":"5727:15:3","nodeType":"VariableDeclaration","scope":130,"src":"5719:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":127,"name":"address","nodeType":"ElementaryTypeName","src":"5719:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5718:25:3"},"src":"5687:57:3"},{"documentation":{"id":131,"nodeType":"StructuredDocumentation","src":"5750:95:3","text":"@notice Cannot register or deprecate contracts, or add an alias targeting the zero address."},"errorSelector":"b4d92c53","id":133,"name":"ZeroContractAddress","nameLocation":"5856:19:3","nodeType":"ErrorDefinition","parameters":{"id":132,"nodeType":"ParameterList","parameters":[],"src":"5875:2:3"},"src":"5850:28:3"},{"documentation":{"id":134,"nodeType":"StructuredDocumentation","src":"5884:86:3","text":"@notice Cannot register (or deregister) a contract with an empty string as a name."},"errorSelector":"830c907e","id":136,"name":"InvalidContractName","nameLocation":"5981:19:3","nodeType":"ErrorDefinition","parameters":{"id":135,"nodeType":"ParameterList","parameters":[],"src":"6000:2:3"},"src":"5975:28:3"},{"documentation":{"id":137,"nodeType":"StructuredDocumentation","src":"6009:51:3","text":"@notice Cannot add an empty string as an alias."},"errorSelector":"907f9fd9","id":139,"name":"InvalidContractAlias","nameLocation":"6071:20:3","nodeType":"ErrorDefinition","parameters":{"id":138,"nodeType":"ParameterList","parameters":[],"src":"6091:2:3"},"src":"6065:29:3"},{"documentation":{"id":140,"nodeType":"StructuredDocumentation","src":"6100:711:3","text":" @notice Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n @dev This is a permissioned function, and does only basic validation of the address (non-zero) and the name\n (not blank). Governance must ensure this is called with valid information. Emits the\n `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or\n already in use.\n @param contractType The type of contract being registered\n @param contractName A text description of the contract, usually the deployed version (e.g., \"v3-pool-weighted\")\n @param contractAddress The address of the contract"},"functionSelector":"e0376ab4","id":150,"implemented":false,"kind":"function","modifiers":[],"name":"registerBalancerContract","nameLocation":"6825:24:3","nodeType":"FunctionDefinition","parameters":{"id":148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":143,"mutability":"mutable","name":"contractType","nameLocation":"6872:12:3","nodeType":"VariableDeclaration","scope":150,"src":"6859:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":142,"nodeType":"UserDefinedTypeName","pathNode":{"id":141,"name":"ContractType","nameLocations":["6859:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"6859:12:3"},"referencedDeclaration":43,"src":"6859:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":145,"mutability":"mutable","name":"contractName","nameLocation":"6908:12:3","nodeType":"VariableDeclaration","scope":150,"src":"6894:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":144,"name":"string","nodeType":"ElementaryTypeName","src":"6894:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":147,"mutability":"mutable","name":"contractAddress","nameLocation":"6938:15:3","nodeType":"VariableDeclaration","scope":150,"src":"6930:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":146,"name":"address","nodeType":"ElementaryTypeName","src":"6930:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6849:110:3"},"returnParameters":{"id":149,"nodeType":"ParameterList","parameters":[],"src":"6968:0:3"},"scope":212,"src":"6816:153:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":151,"nodeType":"StructuredDocumentation","src":"6975:878:3","text":" @notice Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n @dev This is a permissioned function, and makes it possible to correct errors without complex update logic.\n If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete\n it, and register it again with the correct data. It must start with the name, as this is the registry key,\n required for complete deletion.\n Note that there might still be an alias targeting the address being deleted, but accessing it will just return\n inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to\n the correct address.\n @param contractName The name of the contract being deprecated (cannot be an alias)"},"functionSelector":"c7f90793","id":156,"implemented":false,"kind":"function","modifiers":[],"name":"deregisterBalancerContract","nameLocation":"7867:26:3","nodeType":"FunctionDefinition","parameters":{"id":154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":153,"mutability":"mutable","name":"contractName","nameLocation":"7908:12:3","nodeType":"VariableDeclaration","scope":156,"src":"7894:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":152,"name":"string","nodeType":"ElementaryTypeName","src":"7894:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7893:28:3"},"returnParameters":{"id":155,"nodeType":"ParameterList","parameters":[],"src":"7930:0:3"},"scope":212,"src":"7858:73:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":157,"nodeType":"StructuredDocumentation","src":"7937:472:3","text":" @notice Deprecate an official Balancer contract.\n @dev This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the\n address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are\n enforced unique, so either the name or address could be specified in principle.\n @param contractAddress The address of the contract being deprecated"},"functionSelector":"44969a9c","id":162,"implemented":false,"kind":"function","modifiers":[],"name":"deprecateBalancerContract","nameLocation":"8423:25:3","nodeType":"FunctionDefinition","parameters":{"id":160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":159,"mutability":"mutable","name":"contractAddress","nameLocation":"8457:15:3","nodeType":"VariableDeclaration","scope":162,"src":"8449:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":158,"name":"address","nodeType":"ElementaryTypeName","src":"8449:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8448:25:3"},"returnParameters":{"id":161,"nodeType":"ParameterList","parameters":[],"src":"8482:0:3"},"scope":212,"src":"8414:69:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":163,"nodeType":"StructuredDocumentation","src":"8489:650:3","text":" @notice Add an alias for a registered contract.\n @dev This is a permissioned function to support querying by a contract alias. For instance, we might create a\n `WeightedPool` alias meaning the \"latest\" version of the `WeightedPoolFactory`, so that off-chain users don't\n need to track specific versions. Once added, an alias can also be updated to point to a different address\n (e.g., when migrating from the v2 to the v3 weighted pool).\n @param contractAlias An alternate name that can be used to fetch a contract address\n @param existingContract The target address of the contract alias"},"functionSelector":"2967af96","id":170,"implemented":false,"kind":"function","modifiers":[],"name":"addOrUpdateBalancerContractAlias","nameLocation":"9153:32:3","nodeType":"FunctionDefinition","parameters":{"id":168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":165,"mutability":"mutable","name":"contractAlias","nameLocation":"9200:13:3","nodeType":"VariableDeclaration","scope":170,"src":"9186:27:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":164,"name":"string","nodeType":"ElementaryTypeName","src":"9186:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":167,"mutability":"mutable","name":"existingContract","nameLocation":"9223:16:3","nodeType":"VariableDeclaration","scope":170,"src":"9215:24:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":166,"name":"address","nodeType":"ElementaryTypeName","src":"9215:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9185:55:3"},"returnParameters":{"id":169,"nodeType":"ParameterList","parameters":[],"src":"9249:0:3"},"scope":212,"src":"9144:106:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":171,"nodeType":"StructuredDocumentation","src":"9256:316:3","text":" @notice Determine whether an address is an official contract of the specified type.\n @param contractType The type of contract\n @param contractAddress The address of the contract\n @return isActive True if the given address is a registered and active contract of the specified type"},"functionSelector":"ae2733a4","id":181,"implemented":false,"kind":"function","modifiers":[],"name":"isActiveBalancerContract","nameLocation":"9586:24:3","nodeType":"FunctionDefinition","parameters":{"id":177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":174,"mutability":"mutable","name":"contractType","nameLocation":"9633:12:3","nodeType":"VariableDeclaration","scope":181,"src":"9620:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":173,"nodeType":"UserDefinedTypeName","pathNode":{"id":172,"name":"ContractType","nameLocations":["9620:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"9620:12:3"},"referencedDeclaration":43,"src":"9620:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":176,"mutability":"mutable","name":"contractAddress","nameLocation":"9663:15:3","nodeType":"VariableDeclaration","scope":181,"src":"9655:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":175,"name":"address","nodeType":"ElementaryTypeName","src":"9655:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9610:74:3"},"returnParameters":{"id":180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":179,"mutability":"mutable","name":"isActive","nameLocation":"9713:8:3","nodeType":"VariableDeclaration","scope":181,"src":"9708:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":178,"name":"bool","nodeType":"ElementaryTypeName","src":"9708:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9707:15:3"},"scope":212,"src":"9577:146:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":182,"nodeType":"StructuredDocumentation","src":"9729:496:3","text":" @notice Look up a registered contract by type and name.\n @dev This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias\n (e.g., `WeightedPool`).\n @param contractType The type of the contract\n @param contractName The name of the contract\n @return contractAddress The address of the associated contract, if registered, or zero\n @return isActive True if the contract was registered and not deprecated"},"functionSelector":"41d8c0bb","id":194,"implemented":false,"kind":"function","modifiers":[],"name":"getBalancerContract","nameLocation":"10239:19:3","nodeType":"FunctionDefinition","parameters":{"id":188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":185,"mutability":"mutable","name":"contractType","nameLocation":"10281:12:3","nodeType":"VariableDeclaration","scope":194,"src":"10268:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":184,"nodeType":"UserDefinedTypeName","pathNode":{"id":183,"name":"ContractType","nameLocations":["10268:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"10268:12:3"},"referencedDeclaration":43,"src":"10268:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":187,"mutability":"mutable","name":"contractName","nameLocation":"10317:12:3","nodeType":"VariableDeclaration","scope":194,"src":"10303:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":186,"name":"string","nodeType":"ElementaryTypeName","src":"10303:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"10258:77:3"},"returnParameters":{"id":193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":190,"mutability":"mutable","name":"contractAddress","nameLocation":"10367:15:3","nodeType":"VariableDeclaration","scope":194,"src":"10359:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":189,"name":"address","nodeType":"ElementaryTypeName","src":"10359:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":192,"mutability":"mutable","name":"isActive","nameLocation":"10389:8:3","nodeType":"VariableDeclaration","scope":194,"src":"10384:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":191,"name":"bool","nodeType":"ElementaryTypeName","src":"10384:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10358:40:3"},"scope":212,"src":"10230:169:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":195,"nodeType":"StructuredDocumentation","src":"10405:233:3","text":" @notice Look up complete information about a registered contract by address.\n @param contractAddress The address of the associated contract\n @return info ContractInfo struct corresponding to the address"},"functionSelector":"8554c327","id":203,"implemented":false,"kind":"function","modifiers":[],"name":"getBalancerContractInfo","nameLocation":"10652:23:3","nodeType":"FunctionDefinition","parameters":{"id":198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":197,"mutability":"mutable","name":"contractAddress","nameLocation":"10684:15:3","nodeType":"VariableDeclaration","scope":203,"src":"10676:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":196,"name":"address","nodeType":"ElementaryTypeName","src":"10676:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10675:25:3"},"returnParameters":{"id":202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":201,"mutability":"mutable","name":"info","nameLocation":"10744:4:3","nodeType":"VariableDeclaration","scope":203,"src":"10724:24:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":200,"nodeType":"UserDefinedTypeName","pathNode":{"id":199,"name":"ContractInfo","nameLocations":["10724:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"10724:12:3"},"referencedDeclaration":52,"src":"10724:12:3","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"src":"10723:26:3"},"scope":212,"src":"10643:107:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":204,"nodeType":"StructuredDocumentation","src":"10756:92:3","text":"@notice Returns `true` if the given address is an active contract under the ROUTER type."},"functionSelector":"264e97e0","id":211,"implemented":false,"kind":"function","modifiers":[],"name":"isTrustedRouter","nameLocation":"10862:15:3","nodeType":"FunctionDefinition","parameters":{"id":207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":206,"mutability":"mutable","name":"router","nameLocation":"10886:6:3","nodeType":"VariableDeclaration","scope":211,"src":"10878:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":205,"name":"address","nodeType":"ElementaryTypeName","src":"10878:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10877:16:3"},"returnParameters":{"id":210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":209,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":211,"src":"10917:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":208,"name":"bool","nodeType":"ElementaryTypeName","src":"10917:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10916:6:3"},"scope":212,"src":"10853:70:3","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":213,"src":"306:10619:3","usedErrors":[92,100,107,115,120,125,130,133,136,139],"usedEvents":[62,72,77,84]}],"src":"46:10880:3"},"id":3},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol","exportedSymbols":{"IBalancerFeeBurner":[276],"IERC20":[10576],"IProtocolFeeBurner":[948]},"id":277,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":214,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:4"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":216,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":277,"sourceUnit":10577,"src":"72:72:4","symbolAliases":[{"foreign":{"id":215,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"./IProtocolFeeBurner.sol","id":218,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":277,"sourceUnit":949,"src":"145:62:4","symbolAliases":[{"foreign":{"id":217,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"154:18:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":219,"name":"IProtocolFeeBurner","nameLocations":["241:18:4"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"241:18:4"},"id":220,"nodeType":"InheritanceSpecifier","src":"241:18:4"}],"canonicalName":"IBalancerFeeBurner","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":276,"linearizedBaseContracts":[276,948],"name":"IBalancerFeeBurner","nameLocation":"219:18:4","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IBalancerFeeBurner.SwapPathStep","documentation":{"id":221,"nodeType":"StructuredDocumentation","src":"266:152:4","text":" @notice Steps for the burn path.\n @param pool The pool for the swap\n @param tokenOut The `tokenOut` of the swap operation"},"id":227,"members":[{"constant":false,"id":223,"mutability":"mutable","name":"pool","nameLocation":"461:4:4","nodeType":"VariableDeclaration","scope":227,"src":"453:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":222,"name":"address","nodeType":"ElementaryTypeName","src":"453:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":226,"mutability":"mutable","name":"tokenOut","nameLocation":"482:8:4","nodeType":"VariableDeclaration","scope":227,"src":"475:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":225,"nodeType":"UserDefinedTypeName","pathNode":{"id":224,"name":"IERC20","nameLocations":["475:6:4"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"475:6:4"},"referencedDeclaration":10576,"src":"475:6:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"name":"SwapPathStep","nameLocation":"430:12:4","nodeType":"StructDefinition","scope":276,"src":"423:74:4","visibility":"public"},{"canonicalName":"IBalancerFeeBurner.BurnHookParams","documentation":{"id":228,"nodeType":"StructuredDocumentation","src":"503:637:4","text":" @notice Data for the burn hook.\n @param pool The pool the fees came from (only used for documentation in the event)\n @param sender The sender of the call. In most cases, this is the sweeper.\n @param feeToken The token collected from the pool\n @param feeTokenAmount The number of fee tokens collected\n @param targetToken The desired target token (`tokenOut` of the swap)\n @param minAmountOut The minimum `amountOut` for the swap\n @param recipient The recipient of the swap proceeds\n @param deadline Deadline for the burn operation (i.e., swap), after which it will revert"},"id":247,"members":[{"constant":false,"id":230,"mutability":"mutable","name":"pool","nameLocation":"1185:4:4","nodeType":"VariableDeclaration","scope":247,"src":"1177:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":229,"name":"address","nodeType":"ElementaryTypeName","src":"1177:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":232,"mutability":"mutable","name":"sender","nameLocation":"1207:6:4","nodeType":"VariableDeclaration","scope":247,"src":"1199:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":231,"name":"address","nodeType":"ElementaryTypeName","src":"1199:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":235,"mutability":"mutable","name":"feeToken","nameLocation":"1230:8:4","nodeType":"VariableDeclaration","scope":247,"src":"1223:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":234,"nodeType":"UserDefinedTypeName","pathNode":{"id":233,"name":"IERC20","nameLocations":["1223:6:4"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1223:6:4"},"referencedDeclaration":10576,"src":"1223:6:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":237,"mutability":"mutable","name":"feeTokenAmount","nameLocation":"1256:14:4","nodeType":"VariableDeclaration","scope":247,"src":"1248:22:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":236,"name":"uint256","nodeType":"ElementaryTypeName","src":"1248:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":240,"mutability":"mutable","name":"targetToken","nameLocation":"1287:11:4","nodeType":"VariableDeclaration","scope":247,"src":"1280:18:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":239,"nodeType":"UserDefinedTypeName","pathNode":{"id":238,"name":"IERC20","nameLocations":["1280:6:4"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1280:6:4"},"referencedDeclaration":10576,"src":"1280:6:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":242,"mutability":"mutable","name":"minAmountOut","nameLocation":"1316:12:4","nodeType":"VariableDeclaration","scope":247,"src":"1308:20:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":241,"name":"uint256","nodeType":"ElementaryTypeName","src":"1308:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":244,"mutability":"mutable","name":"recipient","nameLocation":"1346:9:4","nodeType":"VariableDeclaration","scope":247,"src":"1338:17:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":243,"name":"address","nodeType":"ElementaryTypeName","src":"1338:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":246,"mutability":"mutable","name":"deadline","nameLocation":"1373:8:4","nodeType":"VariableDeclaration","scope":247,"src":"1365:16:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":245,"name":"uint256","nodeType":"ElementaryTypeName","src":"1365:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"BurnHookParams","nameLocation":"1152:14:4","nodeType":"StructDefinition","scope":276,"src":"1145:243:4","visibility":"public"},{"documentation":{"id":248,"nodeType":"StructuredDocumentation","src":"1394:48:4","text":"@notice Burn path not set for the fee token."},"errorSelector":"f9aa0315","id":250,"name":"BurnPathDoesNotExist","nameLocation":"1453:20:4","nodeType":"ErrorDefinition","parameters":{"id":249,"nodeType":"ParameterList","parameters":[],"src":"1473:2:4"},"src":"1447:29:4"},{"documentation":{"id":251,"nodeType":"StructuredDocumentation","src":"1482:75:4","text":"@notice The last token in the path is not the same as the target token."},"errorSelector":"a682e903","id":253,"name":"TargetTokenOutMismatch","nameLocation":"1568:22:4","nodeType":"ErrorDefinition","parameters":{"id":252,"nodeType":"ParameterList","parameters":[],"src":"1590:2:4"},"src":"1562:31:4"},{"documentation":{"id":254,"nodeType":"StructuredDocumentation","src":"1599:311:4","text":" @notice Set the burn path for a fee token.\n @dev This is the sequence of swaps required to convert the `feeToken` to the `targetToken`.\n This is a permissioned function.\n @param feeToken The fee token to set the path for\n @param steps The steps in the burn path"},"functionSelector":"e3746cb2","id":264,"implemented":false,"kind":"function","modifiers":[],"name":"setBurnPath","nameLocation":"1924:11:4","nodeType":"FunctionDefinition","parameters":{"id":262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":257,"mutability":"mutable","name":"feeToken","nameLocation":"1943:8:4","nodeType":"VariableDeclaration","scope":264,"src":"1936:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":256,"nodeType":"UserDefinedTypeName","pathNode":{"id":255,"name":"IERC20","nameLocations":["1936:6:4"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1936:6:4"},"referencedDeclaration":10576,"src":"1936:6:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":261,"mutability":"mutable","name":"steps","nameLocation":"1977:5:4","nodeType":"VariableDeclaration","scope":264,"src":"1953:29:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"},"typeName":{"baseType":{"id":259,"nodeType":"UserDefinedTypeName","pathNode":{"id":258,"name":"SwapPathStep","nameLocations":["1953:12:4"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"1953:12:4"},"referencedDeclaration":227,"src":"1953:12:4","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"id":260,"nodeType":"ArrayTypeName","src":"1953:14:4","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"}},"visibility":"internal"}],"src":"1935:48:4"},"returnParameters":{"id":263,"nodeType":"ParameterList","parameters":[],"src":"1992:0:4"},"scope":276,"src":"1915:78:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":265,"nodeType":"StructuredDocumentation","src":"1999:166:4","text":" @notice Get the burn path for a fee token.\n @param feeToken The fee token to get the path for\n @return steps The steps in the burn path"},"functionSelector":"c1cfb02a","id":275,"implemented":false,"kind":"function","modifiers":[],"name":"getBurnPath","nameLocation":"2179:11:4","nodeType":"FunctionDefinition","parameters":{"id":269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":268,"mutability":"mutable","name":"feeToken","nameLocation":"2198:8:4","nodeType":"VariableDeclaration","scope":275,"src":"2191:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":267,"nodeType":"UserDefinedTypeName","pathNode":{"id":266,"name":"IERC20","nameLocations":["2191:6:4"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2191:6:4"},"referencedDeclaration":10576,"src":"2191:6:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2190:17:4"},"returnParameters":{"id":274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":273,"mutability":"mutable","name":"steps","nameLocation":"2253:5:4","nodeType":"VariableDeclaration","scope":275,"src":"2231:27:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"},"typeName":{"baseType":{"id":271,"nodeType":"UserDefinedTypeName","pathNode":{"id":270,"name":"SwapPathStep","nameLocations":["2231:12:4"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"2231:12:4"},"referencedDeclaration":227,"src":"2231:12:4","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"id":272,"nodeType":"ArrayTypeName","src":"2231:14:4","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"}},"visibility":"internal"}],"src":"2230:29:4"},"scope":276,"src":"2170:90:4","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":277,"src":"209:2053:4","usedErrors":[250,253,924,927],"usedEvents":[914]}],"src":"46:2217:4"},"id":4},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","exportedSymbols":{"IComposableCow":[326],"ICowConditionalOrder":[418]},"id":327,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":278,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:5"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","file":"./ICowConditionalOrder.sol","id":280,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":327,"sourceUnit":419,"src":"72:66:5","symbolAliases":[{"foreign":{"id":279,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"81:20:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IComposableCow","contractDependencies":[],"contractKind":"interface","documentation":{"id":281,"nodeType":"StructuredDocumentation","src":"140:80:5","text":"@notice Utility contract used to validate orders in the `CowSwapFeeBurner`."},"fullyImplemented":false,"id":326,"linearizedBaseContracts":[326],"name":"IComposableCow","nameLocation":"230:14:5","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IComposableCow.Payload","documentation":{"id":282,"nodeType":"StructuredDocumentation","src":"251:388:5","text":" @notice Data passed to ComposableCoW via the payload parameter of isValidSafeSignature.\n @dev See github.com/curvefi/curve-burners/blob/main/contracts/burners/CowSwapBurner.vy#L66:L69.\n @param proof Merkle Tree proof\n @param params Conditional order params\n @param offchainInput Off-chain input (similar to Balancer `userData`); currently unused"},"id":291,"members":[{"constant":false,"id":285,"mutability":"mutable","name":"proof","nameLocation":"679:5:5","nodeType":"VariableDeclaration","scope":291,"src":"669:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":283,"name":"bytes32","nodeType":"ElementaryTypeName","src":"669:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":284,"nodeType":"ArrayTypeName","src":"669:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":288,"mutability":"mutable","name":"params","nameLocation":"738:6:5","nodeType":"VariableDeclaration","scope":291,"src":"694:50:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_storage_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"},"typeName":{"id":287,"nodeType":"UserDefinedTypeName","pathNode":{"id":286,"name":"ICowConditionalOrder.ConditionalOrderParams","nameLocations":["694:20:5","715:22:5"],"nodeType":"IdentifierPath","referencedDeclaration":367,"src":"694:43:5"},"referencedDeclaration":367,"src":"694:43:5","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_storage_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"}},"visibility":"internal"},{"constant":false,"id":290,"mutability":"mutable","name":"offchainInput","nameLocation":"760:13:5","nodeType":"VariableDeclaration","scope":291,"src":"754:19:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":289,"name":"bytes","nodeType":"ElementaryTypeName","src":"754:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"Payload","nameLocation":"651:7:5","nodeType":"StructDefinition","scope":326,"src":"644:136:5","visibility":"public"},{"documentation":{"id":292,"nodeType":"StructuredDocumentation","src":"786:171:5","text":" @notice Construct a CoW order.\n @param params Order parameters\n @param dispatch If true, submit the order (always true in the CowSwapBurner)"},"functionSelector":"6bfae1ca","id":300,"implemented":false,"kind":"function","modifiers":[],"name":"create","nameLocation":"971:6:5","nodeType":"FunctionDefinition","parameters":{"id":298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":295,"mutability":"mutable","name":"params","nameLocation":"1031:6:5","nodeType":"VariableDeclaration","scope":300,"src":"978:59:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_calldata_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"},"typeName":{"id":294,"nodeType":"UserDefinedTypeName","pathNode":{"id":293,"name":"ICowConditionalOrder.ConditionalOrderParams","nameLocations":["978:20:5","999:22:5"],"nodeType":"IdentifierPath","referencedDeclaration":367,"src":"978:43:5"},"referencedDeclaration":367,"src":"978:43:5","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_storage_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"}},"visibility":"internal"},{"constant":false,"id":297,"mutability":"mutable","name":"dispatch","nameLocation":"1044:8:5","nodeType":"VariableDeclaration","scope":300,"src":"1039:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":296,"name":"bool","nodeType":"ElementaryTypeName","src":"1039:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"977:76:5"},"returnParameters":{"id":299,"nodeType":"ParameterList","parameters":[],"src":"1062:0:5"},"scope":326,"src":"962:101:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"f698da25","id":305,"implemented":false,"kind":"function","modifiers":[],"name":"domainSeparator","nameLocation":"1078:15:5","nodeType":"FunctionDefinition","parameters":{"id":301,"nodeType":"ParameterList","parameters":[],"src":"1093:2:5"},"returnParameters":{"id":304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":303,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":305,"src":"1119:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":302,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1119:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1118:9:5"},"scope":326,"src":"1069:59:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":306,"nodeType":"StructuredDocumentation","src":"1134:77:5","text":"@notice Delegated ERC-1271 signature validation with an enhanced context."},"functionSelector":"53f00b14","id":325,"implemented":false,"kind":"function","modifiers":[],"name":"isValidSafeSignature","nameLocation":"1225:20:5","nodeType":"FunctionDefinition","parameters":{"id":321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":308,"mutability":"mutable","name":"safe","nameLocation":"1263:4:5","nodeType":"VariableDeclaration","scope":325,"src":"1255:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":307,"name":"address","nodeType":"ElementaryTypeName","src":"1255:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":310,"mutability":"mutable","name":"sender","nameLocation":"1285:6:5","nodeType":"VariableDeclaration","scope":325,"src":"1277:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":309,"name":"address","nodeType":"ElementaryTypeName","src":"1277:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":312,"mutability":"mutable","name":"_hash","nameLocation":"1309:5:5","nodeType":"VariableDeclaration","scope":325,"src":"1301:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":311,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1301:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":314,"mutability":"mutable","name":"_domainSeparator","nameLocation":"1332:16:5","nodeType":"VariableDeclaration","scope":325,"src":"1324:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":313,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1324:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":316,"mutability":"mutable","name":"typeHash","nameLocation":"1366:8:5","nodeType":"VariableDeclaration","scope":325,"src":"1358:16:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":315,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1358:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":318,"mutability":"mutable","name":"encodeData","nameLocation":"1399:10:5","nodeType":"VariableDeclaration","scope":325,"src":"1384:25:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":317,"name":"bytes","nodeType":"ElementaryTypeName","src":"1384:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":320,"mutability":"mutable","name":"payload","nameLocation":"1434:7:5","nodeType":"VariableDeclaration","scope":325,"src":"1419:22:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":319,"name":"bytes","nodeType":"ElementaryTypeName","src":"1419:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1245:202:5"},"returnParameters":{"id":324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":323,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":325,"src":"1471:6:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":322,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1471:6:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1470:8:5"},"scope":326,"src":"1216:263:5","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":327,"src":"220:1261:5","usedErrors":[],"usedEvents":[]}],"src":"46:1436:5"},"id":5},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","exportedSymbols":{"GPv2Order":[357],"ICowConditionalOrder":[418],"IERC20":[10576]},"id":419,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":328,"literals":["solidity",">=","0.8",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"36:31:6"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":330,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":419,"sourceUnit":10577,"src":"69:72:6","symbolAliases":[{"foreign":{"id":329,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"78:6:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"GPv2Order","id":357,"members":[{"constant":false,"id":333,"mutability":"mutable","name":"sellToken","nameLocation":"274:9:6","nodeType":"VariableDeclaration","scope":357,"src":"267:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":332,"nodeType":"UserDefinedTypeName","pathNode":{"id":331,"name":"IERC20","nameLocations":["267:6:6"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"267:6:6"},"referencedDeclaration":10576,"src":"267:6:6","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":336,"mutability":"mutable","name":"buyToken","nameLocation":"296:8:6","nodeType":"VariableDeclaration","scope":357,"src":"289:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":335,"nodeType":"UserDefinedTypeName","pathNode":{"id":334,"name":"IERC20","nameLocations":["289:6:6"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"289:6:6"},"referencedDeclaration":10576,"src":"289:6:6","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":338,"mutability":"mutable","name":"receiver","nameLocation":"318:8:6","nodeType":"VariableDeclaration","scope":357,"src":"310:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":337,"name":"address","nodeType":"ElementaryTypeName","src":"310:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":340,"mutability":"mutable","name":"sellAmount","nameLocation":"340:10:6","nodeType":"VariableDeclaration","scope":357,"src":"332:18:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":339,"name":"uint256","nodeType":"ElementaryTypeName","src":"332:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":342,"mutability":"mutable","name":"buyAmount","nameLocation":"364:9:6","nodeType":"VariableDeclaration","scope":357,"src":"356:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":341,"name":"uint256","nodeType":"ElementaryTypeName","src":"356:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":344,"mutability":"mutable","name":"validTo","nameLocation":"386:7:6","nodeType":"VariableDeclaration","scope":357,"src":"379:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":343,"name":"uint32","nodeType":"ElementaryTypeName","src":"379:6:6","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":346,"mutability":"mutable","name":"appData","nameLocation":"407:7:6","nodeType":"VariableDeclaration","scope":357,"src":"399:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":345,"name":"bytes32","nodeType":"ElementaryTypeName","src":"399:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":348,"mutability":"mutable","name":"feeAmount","nameLocation":"428:9:6","nodeType":"VariableDeclaration","scope":357,"src":"420:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":347,"name":"uint256","nodeType":"ElementaryTypeName","src":"420:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":350,"mutability":"mutable","name":"kind","nameLocation":"451:4:6","nodeType":"VariableDeclaration","scope":357,"src":"443:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":349,"name":"bytes32","nodeType":"ElementaryTypeName","src":"443:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":352,"mutability":"mutable","name":"partiallyFillable","nameLocation":"466:17:6","nodeType":"VariableDeclaration","scope":357,"src":"461:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":351,"name":"bool","nodeType":"ElementaryTypeName","src":"461:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":354,"mutability":"mutable","name":"sellTokenBalance","nameLocation":"497:16:6","nodeType":"VariableDeclaration","scope":357,"src":"489:24:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":353,"name":"bytes32","nodeType":"ElementaryTypeName","src":"489:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":356,"mutability":"mutable","name":"buyTokenBalance","nameLocation":"527:15:6","nodeType":"VariableDeclaration","scope":357,"src":"519:23:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":355,"name":"bytes32","nodeType":"ElementaryTypeName","src":"519:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"GPv2Order","nameLocation":"251:9:6","nodeType":"StructDefinition","scope":419,"src":"244:301:6","visibility":"public"},{"abstract":false,"baseContracts":[],"canonicalName":"ICowConditionalOrder","contractDependencies":[],"contractKind":"interface","documentation":{"id":358,"nodeType":"StructuredDocumentation","src":"547:131:6","text":" @notice Conditional Order Interface - verify a Cow order.\n @author CoW Protocol Developers + mfw78 "},"fullyImplemented":false,"id":418,"linearizedBaseContracts":[418],"name":"ICowConditionalOrder","nameLocation":"689:20:6","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ICowConditionalOrder.ConditionalOrderParams","documentation":{"id":359,"nodeType":"StructuredDocumentation","src":"716:454:6","text":" @notice This struct is used to uniquely identify a conditional order for an owner.\n @dev H(handler || salt || staticData) **MUST** be unique for an owner.\n @param handler The contract implementing the conditional order logic\n @param salt Allows for multiple conditional orders of the same type and data (currently unused)\n @param staticData Data available to ALL discrete orders created by the conditional order"},"id":367,"members":[{"constant":false,"id":362,"mutability":"mutable","name":"handler","nameLocation":"1236:7:6","nodeType":"VariableDeclaration","scope":367,"src":"1215:28:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ICowConditionalOrder_$418","typeString":"contract ICowConditionalOrder"},"typeName":{"id":361,"nodeType":"UserDefinedTypeName","pathNode":{"id":360,"name":"ICowConditionalOrder","nameLocations":["1215:20:6"],"nodeType":"IdentifierPath","referencedDeclaration":418,"src":"1215:20:6"},"referencedDeclaration":418,"src":"1215:20:6","typeDescriptions":{"typeIdentifier":"t_contract$_ICowConditionalOrder_$418","typeString":"contract ICowConditionalOrder"}},"visibility":"internal"},{"constant":false,"id":364,"mutability":"mutable","name":"salt","nameLocation":"1261:4:6","nodeType":"VariableDeclaration","scope":367,"src":"1253:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":363,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1253:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":366,"mutability":"mutable","name":"staticData","nameLocation":"1281:10:6","nodeType":"VariableDeclaration","scope":367,"src":"1275:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":365,"name":"bytes","nodeType":"ElementaryTypeName","src":"1275:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"ConditionalOrderParams","nameLocation":"1182:22:6","nodeType":"StructDefinition","scope":418,"src":"1175:123:6","visibility":"public"},{"documentation":{"id":368,"nodeType":"StructuredDocumentation","src":"1304:191:6","text":" @notice This error is returned by the `getTradeableOrder` function if the order conditions are not met.\n @param reason Text explaining the reason the order is invalid"},"errorSelector":"c8fc2725","id":372,"name":"OrderNotValid","nameLocation":"1506:13:6","nodeType":"ErrorDefinition","parameters":{"id":371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":370,"mutability":"mutable","name":"reason","nameLocation":"1527:6:6","nodeType":"VariableDeclaration","scope":372,"src":"1520:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":369,"name":"string","nodeType":"ElementaryTypeName","src":"1520:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1519:15:6"},"src":"1500:35:6"},{"documentation":{"id":373,"nodeType":"StructuredDocumentation","src":"1619:144:6","text":" @notice Polling should be retried at the next block.\n @param reason Text description of the reason it should be retried"},"errorSelector":"d05f3065","id":377,"name":"PollTryNextBlock","nameLocation":"1774:16:6","nodeType":"ErrorDefinition","parameters":{"id":376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":375,"mutability":"mutable","name":"reason","nameLocation":"1798:6:6","nodeType":"VariableDeclaration","scope":377,"src":"1791:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":374,"name":"string","nodeType":"ElementaryTypeName","src":"1791:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1790:15:6"},"src":"1768:38:6"},{"documentation":{"id":378,"nodeType":"StructuredDocumentation","src":"1812:223:6","text":" @notice Polling should be retried at a specific block number.\n @param blockNumber The block number when polling should resume\n @param reason Text description of the reason it should be retried"},"errorSelector":"1fe8506e","id":384,"name":"PollTryAtBlock","nameLocation":"2046:14:6","nodeType":"ErrorDefinition","parameters":{"id":383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":380,"mutability":"mutable","name":"blockNumber","nameLocation":"2069:11:6","nodeType":"VariableDeclaration","scope":384,"src":"2061:19:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":379,"name":"uint256","nodeType":"ElementaryTypeName","src":"2061:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":382,"mutability":"mutable","name":"reason","nameLocation":"2089:6:6","nodeType":"VariableDeclaration","scope":384,"src":"2082:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":381,"name":"string","nodeType":"ElementaryTypeName","src":"2082:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2060:36:6"},"src":"2040:57:6"},{"documentation":{"id":385,"nodeType":"StructuredDocumentation","src":"2103:233:6","text":" @notice Polling should be retried at a specific epoch (unix timestamp).\n @param timestamp The unix timestamp when polling should resume\n @param reason Text description of the reason it should be retried"},"errorSelector":"7e334637","id":391,"name":"PollTryAtEpoch","nameLocation":"2347:14:6","nodeType":"ErrorDefinition","parameters":{"id":390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":387,"mutability":"mutable","name":"timestamp","nameLocation":"2370:9:6","nodeType":"VariableDeclaration","scope":391,"src":"2362:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":386,"name":"uint256","nodeType":"ElementaryTypeName","src":"2362:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":389,"mutability":"mutable","name":"reason","nameLocation":"2388:6:6","nodeType":"VariableDeclaration","scope":391,"src":"2381:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":388,"name":"string","nodeType":"ElementaryTypeName","src":"2381:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2361:34:6"},"src":"2341:55:6"},{"documentation":{"id":392,"nodeType":"StructuredDocumentation","src":"2402:165:6","text":" @notice The conditional order should not be polled again (i.e., deleted).\n @param reason Text description of the reason it should be deleted"},"errorSelector":"981b64cd","id":396,"name":"PollNever","nameLocation":"2578:9:6","nodeType":"ErrorDefinition","parameters":{"id":395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":394,"mutability":"mutable","name":"reason","nameLocation":"2595:6:6","nodeType":"VariableDeclaration","scope":396,"src":"2588:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":393,"name":"string","nodeType":"ElementaryTypeName","src":"2588:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2587:15:6"},"src":"2572:31:6"},{"documentation":{"id":397,"nodeType":"StructuredDocumentation","src":"2609:1295:6","text":" @notice Verify that a given discrete order is valid.\n @dev Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe.\n **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the\n `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over\n the order verification logic, and to allow a watchtower / user to propose a discrete order without it being\n generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\n @param owner The owner of the order (usually a contract)\n @param sender The `msg.sender` calling `isValidSignature`\n @param _hash `EIP712` order digest\n @param domainSeparator `EIP712` domain separator\n @param ctx See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\n @param staticInput Conditional order type-specific data known at time of creation for all discrete orders\n @param offchainInput Type-specific data NOT known at time of creation for a specific discrete order (or zero)\n @param order The proposed discrete order's `GPv2Order` data struct"},"functionSelector":"14a2a784","id":417,"implemented":false,"kind":"function","modifiers":[],"name":"verify","nameLocation":"3918:6:6","nodeType":"FunctionDefinition","parameters":{"id":415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":399,"mutability":"mutable","name":"owner","nameLocation":"3942:5:6","nodeType":"VariableDeclaration","scope":417,"src":"3934:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":398,"name":"address","nodeType":"ElementaryTypeName","src":"3934:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":401,"mutability":"mutable","name":"sender","nameLocation":"3965:6:6","nodeType":"VariableDeclaration","scope":417,"src":"3957:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":400,"name":"address","nodeType":"ElementaryTypeName","src":"3957:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":403,"mutability":"mutable","name":"_hash","nameLocation":"3989:5:6","nodeType":"VariableDeclaration","scope":417,"src":"3981:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":402,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3981:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":405,"mutability":"mutable","name":"domainSeparator","nameLocation":"4012:15:6","nodeType":"VariableDeclaration","scope":417,"src":"4004:23:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":404,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4004:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":407,"mutability":"mutable","name":"ctx","nameLocation":"4045:3:6","nodeType":"VariableDeclaration","scope":417,"src":"4037:11:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":406,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4037:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":409,"mutability":"mutable","name":"staticInput","nameLocation":"4073:11:6","nodeType":"VariableDeclaration","scope":417,"src":"4058:26:6","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":408,"name":"bytes","nodeType":"ElementaryTypeName","src":"4058:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":411,"mutability":"mutable","name":"offchainInput","nameLocation":"4109:13:6","nodeType":"VariableDeclaration","scope":417,"src":"4094:28:6","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":410,"name":"bytes","nodeType":"ElementaryTypeName","src":"4094:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":414,"mutability":"mutable","name":"order","nameLocation":"4151:5:6","nodeType":"VariableDeclaration","scope":417,"src":"4132:24:6","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_calldata_ptr","typeString":"struct GPv2Order"},"typeName":{"id":413,"nodeType":"UserDefinedTypeName","pathNode":{"id":412,"name":"GPv2Order","nameLocations":["4132:9:6"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"4132:9:6"},"referencedDeclaration":357,"src":"4132:9:6","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"3924:238:6"},"returnParameters":{"id":416,"nodeType":"ParameterList","parameters":[],"src":"4176:0:6"},"scope":418,"src":"3909:268:6","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":419,"src":"679:3500:6","usedErrors":[372,377,384,391,396],"usedEvents":[]}],"src":"36:4144:6"},"id":6},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol","exportedSymbols":{"GPv2Order":[357],"ICowConditionalOrder":[418],"ICowConditionalOrderGenerator":[454],"IERC165":[12706]},"id":455,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":420,"literals":["solidity",">=","0.8",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"36:31:7"},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"@openzeppelin/contracts/utils/introspection/IERC165.sol","id":422,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":455,"sourceUnit":12707,"src":"69:82:7","symbolAliases":[{"foreign":{"id":421,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12706,"src":"78:7:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","file":"./ICowConditionalOrder.sol","id":425,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":455,"sourceUnit":419,"src":"153:77:7","symbolAliases":[{"foreign":{"id":423,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"162:20:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":424,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":357,"src":"184:9:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":427,"name":"IERC165","nameLocations":["369:7:7"],"nodeType":"IdentifierPath","referencedDeclaration":12706,"src":"369:7:7"},"id":428,"nodeType":"InheritanceSpecifier","src":"369:7:7"}],"canonicalName":"ICowConditionalOrderGenerator","contractDependencies":[],"contractKind":"interface","documentation":{"id":426,"nodeType":"StructuredDocumentation","src":"232:93:7","text":" @notice Conditional Order Generator Interface\n @author mfw78 "},"fullyImplemented":false,"id":454,"linearizedBaseContracts":[454,12706],"name":"ICowConditionalOrderGenerator","nameLocation":"336:29:7","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":429,"nodeType":"StructuredDocumentation","src":"383:187:7","text":" @dev Emitted when a new conditional order is created.\n @param owner The address that created the conditional order\n @param params The conditional order data"},"eventSelector":"2cceac5555b0ca45a3744ced542f54b56ad2eb45e521962372eef212a2cbf361","id":436,"name":"ConditionalOrderCreated","nameLocation":"581:23:7","nodeType":"EventDefinition","parameters":{"id":435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":431,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"621:5:7","nodeType":"VariableDeclaration","scope":436,"src":"605:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":430,"name":"address","nodeType":"ElementaryTypeName","src":"605:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":434,"indexed":false,"mutability":"mutable","name":"params","nameLocation":"672:6:7","nodeType":"VariableDeclaration","scope":436,"src":"628:50:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_memory_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"},"typeName":{"id":433,"nodeType":"UserDefinedTypeName","pathNode":{"id":432,"name":"ICowConditionalOrder.ConditionalOrderParams","nameLocations":["628:20:7","649:22:7"],"nodeType":"IdentifierPath","referencedDeclaration":367,"src":"628:43:7"},"referencedDeclaration":367,"src":"628:43:7","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_storage_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"}},"visibility":"internal"}],"src":"604:75:7"},"src":"575:105:7"},{"documentation":{"id":437,"nodeType":"StructuredDocumentation","src":"686:721:7","text":" @notice Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\n @dev **MUST** revert if the order conditions are not met.\n @param owner The owner of the order (usually a contract)\n @param sender The `msg.sender` of the parent `isValidSignature` call\n @param ctx The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\n @param staticInput Conditional order type-specific data known at time of creation for all discrete orders\n @param offchainInput Off-chain input (similar to Balancer `userData`); currently unused\n @return order Tradeable order for submission to the CoW Protocol API"},"functionSelector":"b8296fc4","id":453,"implemented":false,"kind":"function","modifiers":[],"name":"getTradeableOrder","nameLocation":"1421:17:7","nodeType":"FunctionDefinition","parameters":{"id":448,"nodeType":"ParameterList","parameters":[{"constant":false,"id":439,"mutability":"mutable","name":"owner","nameLocation":"1456:5:7","nodeType":"VariableDeclaration","scope":453,"src":"1448:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":438,"name":"address","nodeType":"ElementaryTypeName","src":"1448:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":441,"mutability":"mutable","name":"sender","nameLocation":"1479:6:7","nodeType":"VariableDeclaration","scope":453,"src":"1471:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":440,"name":"address","nodeType":"ElementaryTypeName","src":"1471:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":443,"mutability":"mutable","name":"ctx","nameLocation":"1503:3:7","nodeType":"VariableDeclaration","scope":453,"src":"1495:11:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":442,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1495:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":445,"mutability":"mutable","name":"staticInput","nameLocation":"1531:11:7","nodeType":"VariableDeclaration","scope":453,"src":"1516:26:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":444,"name":"bytes","nodeType":"ElementaryTypeName","src":"1516:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":447,"mutability":"mutable","name":"offchainInput","nameLocation":"1567:13:7","nodeType":"VariableDeclaration","scope":453,"src":"1552:28:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":446,"name":"bytes","nodeType":"ElementaryTypeName","src":"1552:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1438:148:7"},"returnParameters":{"id":452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":451,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":453,"src":"1610:16:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":450,"nodeType":"UserDefinedTypeName","pathNode":{"id":449,"name":"GPv2Order","nameLocations":["1610:9:7"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"1610:9:7"},"referencedDeclaration":357,"src":"1610:9:7","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"1609:18:7"},"scope":454,"src":"1412:216:7","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":455,"src":"326:1304:7","usedErrors":[],"usedEvents":[436]}],"src":"36:1595:7"},"id":7},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol","exportedSymbols":{"GPv2Order":[357],"ICowConditionalOrder":[418],"ICowConditionalOrderGenerator":[454],"ICowSwapFeeBurner":[566],"IERC1271":[9586],"IERC20":[10576],"IProtocolFeeBurner":[948]},"id":567,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":456,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:8"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1271.sol","file":"@openzeppelin/contracts/interfaces/IERC1271.sol","id":458,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":567,"sourceUnit":9587,"src":"72:75:8","symbolAliases":[{"foreign":{"id":457,"name":"IERC1271","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9586,"src":"81:8:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":460,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":567,"sourceUnit":10577,"src":"148:72:8","symbolAliases":[{"foreign":{"id":459,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"157:6:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol","file":"./ICowConditionalOrderGenerator.sol","id":462,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":567,"sourceUnit":455,"src":"222:84:8","symbolAliases":[{"foreign":{"id":461,"name":"ICowConditionalOrderGenerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":454,"src":"231:29:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","file":"./ICowConditionalOrder.sol","id":465,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":567,"sourceUnit":419,"src":"307:77:8","symbolAliases":[{"foreign":{"id":463,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"316:20:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":464,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":357,"src":"338:9:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"./IProtocolFeeBurner.sol","id":467,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":567,"sourceUnit":949,"src":"385:62:8","symbolAliases":[{"foreign":{"id":466,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"394:18:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":468,"name":"IERC1271","nameLocations":["480:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":9586,"src":"480:8:8"},"id":469,"nodeType":"InheritanceSpecifier","src":"480:8:8"},{"baseName":{"id":470,"name":"IProtocolFeeBurner","nameLocations":["490:18:8"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"490:18:8"},"id":471,"nodeType":"InheritanceSpecifier","src":"490:18:8"},{"baseName":{"id":472,"name":"ICowConditionalOrder","nameLocations":["510:20:8"],"nodeType":"IdentifierPath","referencedDeclaration":418,"src":"510:20:8"},"id":473,"nodeType":"InheritanceSpecifier","src":"510:20:8"},{"baseName":{"id":474,"name":"ICowConditionalOrderGenerator","nameLocations":["532:29:8"],"nodeType":"IdentifierPath","referencedDeclaration":454,"src":"532:29:8"},"id":475,"nodeType":"InheritanceSpecifier","src":"532:29:8"}],"canonicalName":"ICowSwapFeeBurner","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":566,"linearizedBaseContracts":[566,454,12706,418,948,9586],"name":"ICowSwapFeeBurner","nameLocation":"459:17:8","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ICowSwapFeeBurner.OrderStatus","id":480,"members":[{"id":476,"name":"Nonexistent","nameLocation":"595:11:8","nodeType":"EnumValue","src":"595:11:8"},{"id":477,"name":"Active","nameLocation":"616:6:8","nodeType":"EnumValue","src":"616:6:8"},{"id":478,"name":"Filled","nameLocation":"632:6:8","nodeType":"EnumValue","src":"632:6:8"},{"id":479,"name":"Failed","nameLocation":"648:6:8","nodeType":"EnumValue","src":"648:6:8"}],"name":"OrderStatus","nameLocation":"573:11:8","nodeType":"EnumDefinition","src":"568:92:8"},{"anonymous":false,"documentation":{"id":481,"nodeType":"StructuredDocumentation","src":"666:322:8","text":" @notice An order was retried after failing.\n @param tokenIn The token used to identify the order\n @param exactAmountIn The number of tokens in the order\n @param minAmountOut The minimum number of target tokens required\n @param deadline The deadline for the new order to be filled"},"eventSelector":"1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a","id":492,"name":"OrderRetried","nameLocation":"999:12:8","nodeType":"EventDefinition","parameters":{"id":491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":484,"indexed":false,"mutability":"mutable","name":"tokenIn","nameLocation":"1019:7:8","nodeType":"VariableDeclaration","scope":492,"src":"1012:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":483,"nodeType":"UserDefinedTypeName","pathNode":{"id":482,"name":"IERC20","nameLocations":["1012:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1012:6:8"},"referencedDeclaration":10576,"src":"1012:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":486,"indexed":false,"mutability":"mutable","name":"exactAmountIn","nameLocation":"1036:13:8","nodeType":"VariableDeclaration","scope":492,"src":"1028:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":485,"name":"uint256","nodeType":"ElementaryTypeName","src":"1028:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":488,"indexed":false,"mutability":"mutable","name":"minAmountOut","nameLocation":"1059:12:8","nodeType":"VariableDeclaration","scope":492,"src":"1051:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":487,"name":"uint256","nodeType":"ElementaryTypeName","src":"1051:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":490,"indexed":false,"mutability":"mutable","name":"deadline","nameLocation":"1081:8:8","nodeType":"VariableDeclaration","scope":492,"src":"1073:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":489,"name":"uint256","nodeType":"ElementaryTypeName","src":"1073:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1011:79:8"},"src":"993:98:8"},{"anonymous":false,"documentation":{"id":493,"nodeType":"StructuredDocumentation","src":"1097:268:8","text":" @notice An order was canceled after failure.\n @param tokenIn The token used to identify the order\n @param exactAmountIn The number of tokens in the order\n @param receiver The account that received the tokens from the unfilled order"},"eventSelector":"0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a","id":502,"name":"OrderCanceled","nameLocation":"1376:13:8","nodeType":"EventDefinition","parameters":{"id":501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":496,"indexed":false,"mutability":"mutable","name":"tokenIn","nameLocation":"1397:7:8","nodeType":"VariableDeclaration","scope":502,"src":"1390:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":495,"nodeType":"UserDefinedTypeName","pathNode":{"id":494,"name":"IERC20","nameLocations":["1390:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1390:6:8"},"referencedDeclaration":10576,"src":"1390:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":498,"indexed":false,"mutability":"mutable","name":"exactAmountIn","nameLocation":"1414:13:8","nodeType":"VariableDeclaration","scope":502,"src":"1406:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":497,"name":"uint256","nodeType":"ElementaryTypeName","src":"1406:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":500,"indexed":false,"mutability":"mutable","name":"receiver","nameLocation":"1437:8:8","nodeType":"VariableDeclaration","scope":502,"src":"1429:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":499,"name":"address","nodeType":"ElementaryTypeName","src":"1429:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1389:57:8"},"src":"1370:77:8"},{"documentation":{"id":503,"nodeType":"StructuredDocumentation","src":"1453:130:8","text":" @notice The order parameters were invalid.\n @param reason Text explaining the reason the order is invalid"},"errorSelector":"8d8a6110","id":507,"name":"InvalidOrderParameters","nameLocation":"1594:22:8","nodeType":"ErrorDefinition","parameters":{"id":506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":505,"mutability":"mutable","name":"reason","nameLocation":"1624:6:8","nodeType":"VariableDeclaration","scope":507,"src":"1617:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":504,"name":"string","nodeType":"ElementaryTypeName","src":"1617:6:8","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1616:15:8"},"src":"1588:44:8"},{"documentation":{"id":508,"nodeType":"StructuredDocumentation","src":"1638:237:8","text":" @notice Attempt to revert an order that had not failed.\n @dev `revertOrder` should only be called when the OrderStatus is `Failed`.\n @param actualStatus The status of the order when `revertOrder` was called"},"errorSelector":"d0c1b3cf","id":513,"name":"OrderHasUnexpectedStatus","nameLocation":"1886:24:8","nodeType":"ErrorDefinition","parameters":{"id":512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":511,"mutability":"mutable","name":"actualStatus","nameLocation":"1923:12:8","nodeType":"VariableDeclaration","scope":513,"src":"1911:24:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":510,"nodeType":"UserDefinedTypeName","pathNode":{"id":509,"name":"OrderStatus","nameLocations":["1911:11:8"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"1911:11:8"},"referencedDeclaration":480,"src":"1911:11:8","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"}],"src":"1910:26:8"},"src":"1880:57:8"},{"documentation":{"id":514,"nodeType":"StructuredDocumentation","src":"1943:91:8","text":"@notice Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow."},"errorSelector":"32798566","id":516,"name":"InterfaceIsSignatureVerifierMuxer","nameLocation":"2045:33:8","nodeType":"ErrorDefinition","parameters":{"id":515,"nodeType":"ParameterList","parameters":[],"src":"2078:2:8"},"src":"2039:42:8"},{"documentation":{"id":517,"nodeType":"StructuredDocumentation","src":"2087:178:8","text":" @notice Get the order at the sell token.\n @param tokenIn The token used to identify the order\n @return orderData The order data for the given token"},"functionSelector":"6eba2b13","id":526,"implemented":false,"kind":"function","modifiers":[],"name":"getOrder","nameLocation":"2279:8:8","nodeType":"FunctionDefinition","parameters":{"id":521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":520,"mutability":"mutable","name":"tokenIn","nameLocation":"2295:7:8","nodeType":"VariableDeclaration","scope":526,"src":"2288:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":519,"nodeType":"UserDefinedTypeName","pathNode":{"id":518,"name":"IERC20","nameLocations":["2288:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2288:6:8"},"referencedDeclaration":10576,"src":"2288:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2287:16:8"},"returnParameters":{"id":525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":524,"mutability":"mutable","name":"orderData","nameLocation":"2344:9:8","nodeType":"VariableDeclaration","scope":526,"src":"2327:26:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":523,"nodeType":"UserDefinedTypeName","pathNode":{"id":522,"name":"GPv2Order","nameLocations":["2327:9:8"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"2327:9:8"},"referencedDeclaration":357,"src":"2327:9:8","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"2326:28:8"},"scope":566,"src":"2270:85:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":527,"nodeType":"StructuredDocumentation","src":"2361:203:8","text":" @notice Get the status of the order at the sell token.\n @param tokenIn The token used to identify the order\n @return orderStatus The status of the order for the given token"},"functionSelector":"6f9d75cd","id":536,"implemented":false,"kind":"function","modifiers":[],"name":"getOrderStatus","nameLocation":"2578:14:8","nodeType":"FunctionDefinition","parameters":{"id":531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":530,"mutability":"mutable","name":"tokenIn","nameLocation":"2600:7:8","nodeType":"VariableDeclaration","scope":536,"src":"2593:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":529,"nodeType":"UserDefinedTypeName","pathNode":{"id":528,"name":"IERC20","nameLocations":["2593:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2593:6:8"},"referencedDeclaration":10576,"src":"2593:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2592:16:8"},"returnParameters":{"id":535,"nodeType":"ParameterList","parameters":[{"constant":false,"id":534,"mutability":"mutable","name":"orderStatus","nameLocation":"2644:11:8","nodeType":"VariableDeclaration","scope":536,"src":"2632:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":533,"nodeType":"UserDefinedTypeName","pathNode":{"id":532,"name":"OrderStatus","nameLocations":["2632:11:8"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"2632:11:8"},"referencedDeclaration":480,"src":"2632:11:8","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"}],"src":"2631:25:8"},"scope":566,"src":"2569:88:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":537,"nodeType":"StructuredDocumentation","src":"2663:291:8","text":" @notice Retry an order that has not been filled yet and expired.\n @param tokenIn The token used to identify the order\n @param minAmountOut The minimum number of target tokens to receive (tokenOut)\n @param deadline The deadline for the order to be filled."},"functionSelector":"d83b06a4","id":547,"implemented":false,"kind":"function","modifiers":[],"name":"retryOrder","nameLocation":"2968:10:8","nodeType":"FunctionDefinition","parameters":{"id":545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":540,"mutability":"mutable","name":"tokenIn","nameLocation":"2986:7:8","nodeType":"VariableDeclaration","scope":547,"src":"2979:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":539,"nodeType":"UserDefinedTypeName","pathNode":{"id":538,"name":"IERC20","nameLocations":["2979:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2979:6:8"},"referencedDeclaration":10576,"src":"2979:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":542,"mutability":"mutable","name":"minAmountOut","nameLocation":"3003:12:8","nodeType":"VariableDeclaration","scope":547,"src":"2995:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":541,"name":"uint256","nodeType":"ElementaryTypeName","src":"2995:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":544,"mutability":"mutable","name":"deadline","nameLocation":"3025:8:8","nodeType":"VariableDeclaration","scope":547,"src":"3017:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":543,"name":"uint256","nodeType":"ElementaryTypeName","src":"3017:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2978:56:8"},"returnParameters":{"id":546,"nodeType":"ParameterList","parameters":[],"src":"3043:0:8"},"scope":566,"src":"2959:85:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":548,"nodeType":"StructuredDocumentation","src":"3050:274:8","text":" @notice Return tokens from an order that has failed.\n @dev Canceling an order prevents it from being retried.\n @param tokenIn The token used to identify the order\n @param receiver The address to receive the tokens from the unfilled order"},"functionSelector":"60e092c6","id":556,"implemented":false,"kind":"function","modifiers":[],"name":"cancelOrder","nameLocation":"3338:11:8","nodeType":"FunctionDefinition","parameters":{"id":554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":551,"mutability":"mutable","name":"tokenIn","nameLocation":"3357:7:8","nodeType":"VariableDeclaration","scope":556,"src":"3350:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":550,"nodeType":"UserDefinedTypeName","pathNode":{"id":549,"name":"IERC20","nameLocations":["3350:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3350:6:8"},"referencedDeclaration":10576,"src":"3350:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":553,"mutability":"mutable","name":"receiver","nameLocation":"3374:8:8","nodeType":"VariableDeclaration","scope":556,"src":"3366:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":552,"name":"address","nodeType":"ElementaryTypeName","src":"3366:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3349:34:8"},"returnParameters":{"id":555,"nodeType":"ParameterList","parameters":[],"src":"3392:0:8"},"scope":566,"src":"3329:64:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":557,"nodeType":"StructuredDocumentation","src":"3399:282:8","text":" @notice Emergency return tokens from an order regardless of status.\n @dev Canceling an order prevents it from being retried.\n @param tokenIn The token used to identify the order\n @param receiver The address to receive the from the unfilled order"},"functionSelector":"68bce712","id":565,"implemented":false,"kind":"function","modifiers":[],"name":"emergencyCancelOrder","nameLocation":"3695:20:8","nodeType":"FunctionDefinition","parameters":{"id":563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":560,"mutability":"mutable","name":"tokenIn","nameLocation":"3723:7:8","nodeType":"VariableDeclaration","scope":565,"src":"3716:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":559,"nodeType":"UserDefinedTypeName","pathNode":{"id":558,"name":"IERC20","nameLocations":["3716:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3716:6:8"},"referencedDeclaration":10576,"src":"3716:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":562,"mutability":"mutable","name":"receiver","nameLocation":"3740:8:8","nodeType":"VariableDeclaration","scope":565,"src":"3732:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":561,"name":"address","nodeType":"ElementaryTypeName","src":"3732:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3715:34:8"},"returnParameters":{"id":564,"nodeType":"ParameterList","parameters":[],"src":"3758:0:8"},"scope":566,"src":"3686:73:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":567,"src":"449:3312:8","usedErrors":[372,377,384,391,396,507,513,516,924,927],"usedEvents":[436,492,502,914]}],"src":"46:3716:8"},"id":8},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol","exportedSymbols":{"IHyperEVMRateProvider":[587]},"id":588,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":568,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:9"},{"abstract":false,"baseContracts":[],"canonicalName":"IHyperEVMRateProvider","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":587,"linearizedBaseContracts":[587],"name":"IHyperEVMRateProvider","nameLocation":"82:21:9","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":569,"nodeType":"StructuredDocumentation","src":"110:159:9","text":" @notice The index of the token on the Hyperliquid public API.\n @return tokenIndex The index of the token on the Hyperliquid public API"},"functionSelector":"295d3ee8","id":574,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenIndex","nameLocation":"283:13:9","nodeType":"FunctionDefinition","parameters":{"id":570,"nodeType":"ParameterList","parameters":[],"src":"296:2:9"},"returnParameters":{"id":573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":572,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":574,"src":"322:6:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":571,"name":"uint32","nodeType":"ElementaryTypeName","src":"322:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"321:8:9"},"scope":587,"src":"274:56:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":575,"nodeType":"StructuredDocumentation","src":"336:319:9","text":" @notice The index of the pair to fetch the spot price, according to the Hyperliquid public API.\n @dev Hypercore has an index that identifies a pair of tokens to fetch the spot price.\n @return pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API"},"functionSelector":"81bfa5d1","id":580,"implemented":false,"kind":"function","modifiers":[],"name":"getPairIndex","nameLocation":"669:12:9","nodeType":"FunctionDefinition","parameters":{"id":576,"nodeType":"ParameterList","parameters":[],"src":"681:2:9"},"returnParameters":{"id":579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":578,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":580,"src":"707:6:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":577,"name":"uint32","nodeType":"ElementaryTypeName","src":"707:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"706:8:9"},"scope":587,"src":"660:55:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":581,"nodeType":"StructuredDocumentation","src":"721:346:9","text":" @notice The spot price multiplier.\n @dev Hypercore returns the spot price with a different number of decimals for each token. So, to make this rate\n provider compatible with the vault, we need to scale the spot price to 18 decimals using this multiplier.\n @return spotPriceMultiplier The spot price multiplier"},"functionSelector":"a747d56f","id":586,"implemented":false,"kind":"function","modifiers":[],"name":"getSpotPriceMultiplier","nameLocation":"1081:22:9","nodeType":"FunctionDefinition","parameters":{"id":582,"nodeType":"ParameterList","parameters":[],"src":"1103:2:9"},"returnParameters":{"id":585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":584,"mutability":"mutable","name":"spotPriceMultiplier","nameLocation":"1137:19:9","nodeType":"VariableDeclaration","scope":586,"src":"1129:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":583,"name":"uint256","nodeType":"ElementaryTypeName","src":"1129:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1128:29:9"},"scope":587,"src":"1072:86:9","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":588,"src":"72:1088:9","usedErrors":[],"usedEvents":[]}],"src":"46:1115:9"},"id":9},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol","exportedSymbols":{"IHyperEVMRateProvider":[587],"IHyperEVMRateProviderFactory":[664]},"id":665,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":589,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:10"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol","file":"./IHyperEVMRateProvider.sol","id":591,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":665,"sourceUnit":588,"src":"72:68:10","symbolAliases":[{"foreign":{"id":590,"name":"IHyperEVMRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":587,"src":"81:21:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IHyperEVMRateProviderFactory","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":664,"linearizedBaseContracts":[664],"name":"IHyperEVMRateProviderFactory","nameLocation":"152:28:10","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":592,"nodeType":"StructuredDocumentation","src":"187:331:10","text":" @notice A new HyperEVM Rate Provider was created.\n @param tokenIndex The index of the base asset on the Hyperliquid public API\n @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n @param rateProvider The address of the deployed rate provider"},"eventSelector":"d2dc19a986df7300887ed27436ca60160b58dcbcc7a657427d35cbf60154ba02","id":600,"name":"RateProviderCreated","nameLocation":"529:19:10","nodeType":"EventDefinition","parameters":{"id":599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":594,"indexed":true,"mutability":"mutable","name":"tokenIndex","nameLocation":"565:10:10","nodeType":"VariableDeclaration","scope":600,"src":"549:26:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":593,"name":"uint256","nodeType":"ElementaryTypeName","src":"549:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":596,"indexed":true,"mutability":"mutable","name":"pairIndex","nameLocation":"593:9:10","nodeType":"VariableDeclaration","scope":600,"src":"577:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":595,"name":"uint256","nodeType":"ElementaryTypeName","src":"577:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":598,"indexed":true,"mutability":"mutable","name":"rateProvider","nameLocation":"620:12:10","nodeType":"VariableDeclaration","scope":600,"src":"604:28:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":597,"name":"address","nodeType":"ElementaryTypeName","src":"604:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"548:85:10"},"src":"523:111:10"},{"anonymous":false,"documentation":{"id":601,"nodeType":"StructuredDocumentation","src":"640:49:10","text":"@notice Emitted when the factory is disabled."},"eventSelector":"1e8641758c70961d246979e3c073388b65a37bad9cc604ec5511e7200e7d144b","id":603,"name":"RateProviderFactoryDisabled","nameLocation":"700:27:10","nodeType":"EventDefinition","parameters":{"id":602,"nodeType":"ParameterList","parameters":[],"src":"727:2:10"},"src":"694:36:10"},{"documentation":{"id":604,"nodeType":"StructuredDocumentation","src":"736:350:10","text":" @notice A rate provider already exists for the given token and pair.\n @param tokenIndex The index of the base asset on the Hyperliquid public API\n @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n @param rateProvider The address of the deployed rate provider"},"errorSelector":"f4c64ee1","id":612,"name":"RateProviderAlreadyExists","nameLocation":"1097:25:10","nodeType":"ErrorDefinition","parameters":{"id":611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":606,"mutability":"mutable","name":"tokenIndex","nameLocation":"1130:10:10","nodeType":"VariableDeclaration","scope":612,"src":"1123:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":605,"name":"uint32","nodeType":"ElementaryTypeName","src":"1123:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":608,"mutability":"mutable","name":"pairIndex","nameLocation":"1149:9:10","nodeType":"VariableDeclaration","scope":612,"src":"1142:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":607,"name":"uint32","nodeType":"ElementaryTypeName","src":"1142:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":610,"mutability":"mutable","name":"rateProvider","nameLocation":"1168:12:10","nodeType":"VariableDeclaration","scope":612,"src":"1160:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":609,"name":"address","nodeType":"ElementaryTypeName","src":"1160:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1122:59:10"},"src":"1091:91:10"},{"documentation":{"id":613,"nodeType":"StructuredDocumentation","src":"1188:282:10","text":" @notice The rate provider was not found for the given token and pair.\n @param tokenIndex The index of the base asset on the Hyperliquid public API\n @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API"},"errorSelector":"dc120e77","id":619,"name":"RateProviderNotFound","nameLocation":"1481:20:10","nodeType":"ErrorDefinition","parameters":{"id":618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":615,"mutability":"mutable","name":"tokenIndex","nameLocation":"1509:10:10","nodeType":"VariableDeclaration","scope":619,"src":"1502:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":614,"name":"uint32","nodeType":"ElementaryTypeName","src":"1502:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":617,"mutability":"mutable","name":"pairIndex","nameLocation":"1528:9:10","nodeType":"VariableDeclaration","scope":619,"src":"1521:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":616,"name":"uint32","nodeType":"ElementaryTypeName","src":"1521:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1501:37:10"},"src":"1475:64:10"},{"documentation":{"id":620,"nodeType":"StructuredDocumentation","src":"1545:36:10","text":"@notice The factory is disabled."},"errorSelector":"42fb89b8","id":622,"name":"RateProviderFactoryIsDisabled","nameLocation":"1592:29:10","nodeType":"ErrorDefinition","parameters":{"id":621,"nodeType":"ParameterList","parameters":[],"src":"1621:2:10"},"src":"1586:38:10"},{"documentation":{"id":623,"nodeType":"StructuredDocumentation","src":"1630:151:10","text":" @notice Returns a number representing the rate provider version.\n @return rateProviderVersion The rate provider version number"},"functionSelector":"381c7a4f","id":628,"implemented":false,"kind":"function","modifiers":[],"name":"getRateProviderVersion","nameLocation":"1795:22:10","nodeType":"FunctionDefinition","parameters":{"id":624,"nodeType":"ParameterList","parameters":[],"src":"1817:2:10"},"returnParameters":{"id":627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":626,"mutability":"mutable","name":"rateProviderVersion","nameLocation":"1851:19:10","nodeType":"VariableDeclaration","scope":628,"src":"1843:27:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":625,"name":"uint256","nodeType":"ElementaryTypeName","src":"1843:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1842:29:10"},"scope":664,"src":"1786:86:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":629,"nodeType":"StructuredDocumentation","src":"1878:357:10","text":" @notice Creates a new HyperEVM Rate Provider for the given token and pair.\n @param tokenIndex The index of the base asset on the Hyperliquid public API\n @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n @return rateProvider The address of the deployed rate provider"},"functionSelector":"568acb79","id":639,"implemented":false,"kind":"function","modifiers":[],"name":"create","nameLocation":"2249:6:10","nodeType":"FunctionDefinition","parameters":{"id":634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":631,"mutability":"mutable","name":"tokenIndex","nameLocation":"2263:10:10","nodeType":"VariableDeclaration","scope":639,"src":"2256:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":630,"name":"uint32","nodeType":"ElementaryTypeName","src":"2256:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":633,"mutability":"mutable","name":"pairIndex","nameLocation":"2282:9:10","nodeType":"VariableDeclaration","scope":639,"src":"2275:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":632,"name":"uint32","nodeType":"ElementaryTypeName","src":"2275:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2255:37:10"},"returnParameters":{"id":638,"nodeType":"ParameterList","parameters":[{"constant":false,"id":637,"mutability":"mutable","name":"rateProvider","nameLocation":"2333:12:10","nodeType":"VariableDeclaration","scope":639,"src":"2311:34:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"},"typeName":{"id":636,"nodeType":"UserDefinedTypeName","pathNode":{"id":635,"name":"IHyperEVMRateProvider","nameLocations":["2311:21:10"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"2311:21:10"},"referencedDeclaration":587,"src":"2311:21:10","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"visibility":"internal"}],"src":"2310:36:10"},"scope":664,"src":"2240:107:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":640,"nodeType":"StructuredDocumentation","src":"2353:448:10","text":" @notice Gets the rate provider for the given token and pair.\n @dev Reverts if the rate provider was not found for the given token and pair.\n @param tokenIndex The index of the base asset on the Hyperliquid public API\n @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n @return rateProvider The address of the rate provider for the given token and pair"},"functionSelector":"99b8113f","id":650,"implemented":false,"kind":"function","modifiers":[],"name":"getRateProvider","nameLocation":"2815:15:10","nodeType":"FunctionDefinition","parameters":{"id":645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":642,"mutability":"mutable","name":"tokenIndex","nameLocation":"2847:10:10","nodeType":"VariableDeclaration","scope":650,"src":"2840:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":641,"name":"uint32","nodeType":"ElementaryTypeName","src":"2840:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":644,"mutability":"mutable","name":"pairIndex","nameLocation":"2874:9:10","nodeType":"VariableDeclaration","scope":650,"src":"2867:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":643,"name":"uint32","nodeType":"ElementaryTypeName","src":"2867:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2830:59:10"},"returnParameters":{"id":649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":648,"mutability":"mutable","name":"rateProvider","nameLocation":"2935:12:10","nodeType":"VariableDeclaration","scope":650,"src":"2913:34:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"},"typeName":{"id":647,"nodeType":"UserDefinedTypeName","pathNode":{"id":646,"name":"IHyperEVMRateProvider","nameLocations":["2913:21:10"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"2913:21:10"},"referencedDeclaration":587,"src":"2913:21:10","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"visibility":"internal"}],"src":"2912:36:10"},"scope":664,"src":"2806:143:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":651,"nodeType":"StructuredDocumentation","src":"2955:242:10","text":" @notice Checks whether the given rate provider was created by this factory.\n @param rateProvider The rate provider to check\n @return success True if the rate provider was created by this factory; false otherwise"},"functionSelector":"19912f71","id":659,"implemented":false,"kind":"function","modifiers":[],"name":"isRateProviderFromFactory","nameLocation":"3211:25:10","nodeType":"FunctionDefinition","parameters":{"id":655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":654,"mutability":"mutable","name":"rateProvider","nameLocation":"3259:12:10","nodeType":"VariableDeclaration","scope":659,"src":"3237:34:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"},"typeName":{"id":653,"nodeType":"UserDefinedTypeName","pathNode":{"id":652,"name":"IHyperEVMRateProvider","nameLocations":["3237:21:10"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"3237:21:10"},"referencedDeclaration":587,"src":"3237:21:10","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"visibility":"internal"}],"src":"3236:36:10"},"returnParameters":{"id":658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":657,"mutability":"mutable","name":"success","nameLocation":"3301:7:10","nodeType":"VariableDeclaration","scope":659,"src":"3296:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":656,"name":"bool","nodeType":"ElementaryTypeName","src":"3296:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3295:14:10"},"scope":664,"src":"3202:108:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":660,"nodeType":"StructuredDocumentation","src":"3316:264:10","text":" @notice Disables the rate provider factory.\n @dev A disabled rate provider factory cannot create new rate providers and cannot be re-enabled. However,\n already created rate providers are still usable. This is a permissioned function."},"functionSelector":"2f2770db","id":663,"implemented":false,"kind":"function","modifiers":[],"name":"disable","nameLocation":"3594:7:10","nodeType":"FunctionDefinition","parameters":{"id":661,"nodeType":"ParameterList","parameters":[],"src":"3601:2:10"},"returnParameters":{"id":662,"nodeType":"ParameterList","parameters":[],"src":"3612:0:10"},"scope":664,"src":"3585:28:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":665,"src":"142:3473:10","usedErrors":[612,619,622],"usedEvents":[600,603]}],"src":"46:3570:10"},"id":10},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol","exportedSymbols":{"IPoolHelperCommon":[865]},"id":866,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":666,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:11"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolHelperCommon","contractDependencies":[],"contractKind":"interface","documentation":{"id":667,"nodeType":"StructuredDocumentation","src":"72:85:11","text":"@notice Common interface for helper functions that operate on a subset of pools."},"fullyImplemented":false,"id":865,"linearizedBaseContracts":[865],"name":"IPoolHelperCommon","nameLocation":"167:17:11","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":668,"nodeType":"StructuredDocumentation","src":"191:306:11","text":" @notice The owner created a new pool set.\n @dev Pools are organized into separate sets, controlled by a manager, which can be changed independently.\n @param poolSetId Id of the set with which the pool is associated\n @param initialManager Address of the pool set manager"},"eventSelector":"dc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be2","id":674,"name":"PoolSetCreated","nameLocation":"508:14:11","nodeType":"EventDefinition","parameters":{"id":673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":670,"indexed":true,"mutability":"mutable","name":"poolSetId","nameLocation":"539:9:11","nodeType":"VariableDeclaration","scope":674,"src":"523:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":669,"name":"uint256","nodeType":"ElementaryTypeName","src":"523:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":672,"indexed":true,"mutability":"mutable","name":"initialManager","nameLocation":"566:14:11","nodeType":"VariableDeclaration","scope":674,"src":"550:30:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":671,"name":"address","nodeType":"ElementaryTypeName","src":"550:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"522:59:11"},"src":"502:80:11"},{"anonymous":false,"documentation":{"id":675,"nodeType":"StructuredDocumentation","src":"588:190:11","text":" @notice The owner destroyed a pool set.\n @param poolSetId Id of the set with which the pool is associated\n @param manager The address of the set's last manager"},"eventSelector":"79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c0","id":681,"name":"PoolSetDestroyed","nameLocation":"789:16:11","nodeType":"EventDefinition","parameters":{"id":680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":677,"indexed":true,"mutability":"mutable","name":"poolSetId","nameLocation":"822:9:11","nodeType":"VariableDeclaration","scope":681,"src":"806:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":676,"name":"uint256","nodeType":"ElementaryTypeName","src":"806:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":679,"indexed":true,"mutability":"mutable","name":"manager","nameLocation":"849:7:11","nodeType":"VariableDeclaration","scope":681,"src":"833:23:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":678,"name":"address","nodeType":"ElementaryTypeName","src":"833:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"805:52:11"},"src":"783:75:11"},{"anonymous":false,"documentation":{"id":682,"nodeType":"StructuredDocumentation","src":"864:193:11","text":" @notice The owner added a pool to the given set.\n @param pool Address of the pool that was added\n @param poolSetId Id of the set with which the pool is associated"},"eventSelector":"5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b69","id":688,"name":"PoolAddedToSet","nameLocation":"1068:14:11","nodeType":"EventDefinition","parameters":{"id":687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":684,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1099:4:11","nodeType":"VariableDeclaration","scope":688,"src":"1083:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":683,"name":"address","nodeType":"ElementaryTypeName","src":"1083:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":686,"indexed":true,"mutability":"mutable","name":"poolSetId","nameLocation":"1121:9:11","nodeType":"VariableDeclaration","scope":688,"src":"1105:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":685,"name":"uint256","nodeType":"ElementaryTypeName","src":"1105:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1082:49:11"},"src":"1062:70:11"},{"anonymous":false,"documentation":{"id":689,"nodeType":"StructuredDocumentation","src":"1138:199:11","text":" @notice The owner removed a pool from the given set.\n @param poolSetId Id of the set with which the pool is associated\n @param pool Address of the pool that was removed"},"eventSelector":"e632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e","id":695,"name":"PoolRemovedFromSet","nameLocation":"1348:18:11","nodeType":"EventDefinition","parameters":{"id":694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":691,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1383:4:11","nodeType":"VariableDeclaration","scope":695,"src":"1367:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":690,"name":"address","nodeType":"ElementaryTypeName","src":"1367:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":693,"indexed":true,"mutability":"mutable","name":"poolSetId","nameLocation":"1405:9:11","nodeType":"VariableDeclaration","scope":695,"src":"1389:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":692,"name":"uint256","nodeType":"ElementaryTypeName","src":"1389:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1366:49:11"},"src":"1342:74:11"},{"anonymous":false,"documentation":{"id":696,"nodeType":"StructuredDocumentation","src":"1422:391:11","text":" @notice The current manager of a pool set transferred ownership to a new address.\n @dev Managers can only control one pool set. Transfers to existing managers of other sets will revert.\n @param poolSetId Id of the set with which the pool is associated\n @param oldManager Address of the previous manager\n @param newManager Address of the new manager"},"eventSelector":"8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d797205","id":704,"name":"PoolSetOwnershipTransferred","nameLocation":"1824:27:11","nodeType":"EventDefinition","parameters":{"id":703,"nodeType":"ParameterList","parameters":[{"constant":false,"id":698,"indexed":true,"mutability":"mutable","name":"poolSetId","nameLocation":"1877:9:11","nodeType":"VariableDeclaration","scope":704,"src":"1861:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":697,"name":"uint256","nodeType":"ElementaryTypeName","src":"1861:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":700,"indexed":true,"mutability":"mutable","name":"oldManager","nameLocation":"1912:10:11","nodeType":"VariableDeclaration","scope":704,"src":"1896:26:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":699,"name":"address","nodeType":"ElementaryTypeName","src":"1896:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":702,"indexed":true,"mutability":"mutable","name":"newManager","nameLocation":"1948:10:11","nodeType":"VariableDeclaration","scope":704,"src":"1932:26:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":701,"name":"address","nodeType":"ElementaryTypeName","src":"1932:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1851:113:11"},"src":"1818:147:11"},{"documentation":{"id":705,"nodeType":"StructuredDocumentation","src":"1971:190:11","text":" @notice Cannot add a pool that is already there.\n @param pool Address of the pool being added\n @param poolSetId Id of the set with which the pool is associated"},"errorSelector":"5a17aa8d","id":711,"name":"PoolAlreadyInSet","nameLocation":"2172:16:11","nodeType":"ErrorDefinition","parameters":{"id":710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":707,"mutability":"mutable","name":"pool","nameLocation":"2197:4:11","nodeType":"VariableDeclaration","scope":711,"src":"2189:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":706,"name":"address","nodeType":"ElementaryTypeName","src":"2189:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":709,"mutability":"mutable","name":"poolSetId","nameLocation":"2211:9:11","nodeType":"VariableDeclaration","scope":711,"src":"2203:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":708,"name":"uint256","nodeType":"ElementaryTypeName","src":"2203:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2188:33:11"},"src":"2166:56:11"},{"documentation":{"id":712,"nodeType":"StructuredDocumentation","src":"2228:192:11","text":" @notice Cannot remove a pool that was not added.\n @param pool Address of the pool being removed\n @param poolSetId Id of the set with which the pool is associated"},"errorSelector":"80145d72","id":718,"name":"PoolNotInSet","nameLocation":"2431:12:11","nodeType":"ErrorDefinition","parameters":{"id":717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":714,"mutability":"mutable","name":"pool","nameLocation":"2452:4:11","nodeType":"VariableDeclaration","scope":718,"src":"2444:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":713,"name":"address","nodeType":"ElementaryTypeName","src":"2444:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":716,"mutability":"mutable","name":"poolSetId","nameLocation":"2466:9:11","nodeType":"VariableDeclaration","scope":718,"src":"2458:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":715,"name":"uint256","nodeType":"ElementaryTypeName","src":"2458:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2443:33:11"},"src":"2425:52:11"},{"documentation":{"id":719,"nodeType":"StructuredDocumentation","src":"2483:223:11","text":" @notice Pool set id associated with an operation is invalid.\n @dev This can mean the value is invalid, or it was never created, or it was destroyed.\n @param poolSetId The id of the invalid set"},"errorSelector":"98592ddb","id":723,"name":"InvalidPoolSetId","nameLocation":"2717:16:11","nodeType":"ErrorDefinition","parameters":{"id":722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":721,"mutability":"mutable","name":"poolSetId","nameLocation":"2742:9:11","nodeType":"VariableDeclaration","scope":723,"src":"2734:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":720,"name":"uint256","nodeType":"ElementaryTypeName","src":"2734:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2733:19:11"},"src":"2711:42:11"},{"documentation":{"id":724,"nodeType":"StructuredDocumentation","src":"2759:61:11","text":"@notice The initial manager of a pool set cannot be zero."},"errorSelector":"2de5256e","id":726,"name":"InvalidPoolSetManager","nameLocation":"2831:21:11","nodeType":"ErrorDefinition","parameters":{"id":725,"nodeType":"ParameterList","parameters":[],"src":"2852:2:11"},"src":"2825:30:11"},{"documentation":{"id":727,"nodeType":"StructuredDocumentation","src":"2861:294:11","text":" @notice Pool set managers can only manage a single pool set.\n @dev Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\n @param poolSetManager Address of the manager that is already assigned to another pool set id"},"errorSelector":"2c35aa96","id":731,"name":"PoolSetManagerNotUnique","nameLocation":"3166:23:11","nodeType":"ErrorDefinition","parameters":{"id":730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":729,"mutability":"mutable","name":"poolSetManager","nameLocation":"3198:14:11","nodeType":"VariableDeclaration","scope":731,"src":"3190:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":728,"name":"address","nodeType":"ElementaryTypeName","src":"3190:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3189:24:11"},"src":"3160:54:11"},{"documentation":{"id":732,"nodeType":"StructuredDocumentation","src":"3220:91:11","text":"@notice Permissioned operations on pools can only be performed by the pool set manager."},"errorSelector":"bcc08f74","id":734,"name":"SenderIsNotPoolSetManager","nameLocation":"3322:25:11","nodeType":"ErrorDefinition","parameters":{"id":733,"nodeType":"ParameterList","parameters":[],"src":"3347:2:11"},"src":"3316:34:11"},{"documentation":{"id":735,"nodeType":"StructuredDocumentation","src":"3356:140:11","text":" @notice An index is beyond the current bounds of the set.\n @param poolSetId Id of the set involved in the operation"},"errorSelector":"44945fcc","id":739,"name":"IndexOutOfBounds","nameLocation":"3507:16:11","nodeType":"ErrorDefinition","parameters":{"id":738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":737,"mutability":"mutable","name":"poolSetId","nameLocation":"3532:9:11","nodeType":"VariableDeclaration","scope":739,"src":"3524:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":736,"name":"uint256","nodeType":"ElementaryTypeName","src":"3524:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3523:19:11"},"src":"3501:42:11"},{"documentation":{"id":740,"nodeType":"StructuredDocumentation","src":"3762:673:11","text":" @notice Create a new set with an initial manager, optionally initialized with a set of pools.\n @dev The `newPools` list can be empty, in which case this will only create the set. Pools can then be\n added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function.\n Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the\n initial manager address is zero or already a manager of another pool set.\n @param initialManager Address of the account authorized to perform operations on the set\n @param newPools Set of pools to add to the set"},"functionSelector":"3e035f9b","id":750,"implemented":false,"kind":"function","modifiers":[],"name":"createPoolSet","nameLocation":"4449:13:11","nodeType":"FunctionDefinition","parameters":{"id":746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":742,"mutability":"mutable","name":"initialManager","nameLocation":"4471:14:11","nodeType":"VariableDeclaration","scope":750,"src":"4463:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":741,"name":"address","nodeType":"ElementaryTypeName","src":"4463:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":745,"mutability":"mutable","name":"newPools","nameLocation":"4504:8:11","nodeType":"VariableDeclaration","scope":750,"src":"4487:25:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":743,"name":"address","nodeType":"ElementaryTypeName","src":"4487:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":744,"nodeType":"ArrayTypeName","src":"4487:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4462:51:11"},"returnParameters":{"id":749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":748,"mutability":"mutable","name":"poolSetId","nameLocation":"4540:9:11","nodeType":"VariableDeclaration","scope":750,"src":"4532:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":747,"name":"uint256","nodeType":"ElementaryTypeName","src":"4532:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4531:19:11"},"scope":865,"src":"4440:111:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":751,"nodeType":"StructuredDocumentation","src":"4557:355:11","text":" @notice Create a new empty set with an initial manager.\n @dev Convenience function to create a pool set with no initial pools. Also reverts if the initial manager\n address is zero or already a manager of another pool set.\n @param initialManager Address of the account authorized to perform operations on the set"},"functionSelector":"e909c19b","id":758,"implemented":false,"kind":"function","modifiers":[],"name":"createPoolSet","nameLocation":"4926:13:11","nodeType":"FunctionDefinition","parameters":{"id":754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":753,"mutability":"mutable","name":"initialManager","nameLocation":"4948:14:11","nodeType":"VariableDeclaration","scope":758,"src":"4940:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":752,"name":"address","nodeType":"ElementaryTypeName","src":"4940:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4939:24:11"},"returnParameters":{"id":757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":756,"mutability":"mutable","name":"poolSetId","nameLocation":"4990:9:11","nodeType":"VariableDeclaration","scope":758,"src":"4982:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":755,"name":"uint256","nodeType":"ElementaryTypeName","src":"4982:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4981:19:11"},"scope":865,"src":"4917:84:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":759,"nodeType":"StructuredDocumentation","src":"5007:431:11","text":" @notice Simple way to remove an entire set of pools from control of the helper function.\n @dev This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis)\n may destroy sets, effectively removing control of any pools in the set from the associated manager.\n Also reverts if the poolSetId is not valid.\n @param poolSetId Id of the set being destroyed"},"functionSelector":"7c1ec460","id":764,"implemented":false,"kind":"function","modifiers":[],"name":"destroyPoolSet","nameLocation":"5452:14:11","nodeType":"FunctionDefinition","parameters":{"id":762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":761,"mutability":"mutable","name":"poolSetId","nameLocation":"5475:9:11","nodeType":"VariableDeclaration","scope":764,"src":"5467:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":760,"name":"uint256","nodeType":"ElementaryTypeName","src":"5467:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5466:19:11"},"returnParameters":{"id":763,"nodeType":"ParameterList","parameters":[],"src":"5494:0:11"},"scope":865,"src":"5443:52:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":765,"nodeType":"StructuredDocumentation","src":"5501:712:11","text":" @notice Transfer ownership of a pool set from the current manager to a new manager.\n @dev This is a permissioned function. Only the current manager of a set can call this to set a new manager.\n Since managers can only control a single set, there is no need to specify the id in the call. Note that this\n is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this\n contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts\n if the new manager address is zero or already the manager of a pool set.\n @param newManager The address of the new manager"},"functionSelector":"3700f987","id":770,"implemented":false,"kind":"function","modifiers":[],"name":"transferPoolSetOwnership","nameLocation":"6227:24:11","nodeType":"FunctionDefinition","parameters":{"id":768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":767,"mutability":"mutable","name":"newManager","nameLocation":"6260:10:11","nodeType":"VariableDeclaration","scope":770,"src":"6252:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":766,"name":"address","nodeType":"ElementaryTypeName","src":"6252:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6251:20:11"},"returnParameters":{"id":769,"nodeType":"ParameterList","parameters":[],"src":"6280:0:11"},"scope":865,"src":"6218:63:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":771,"nodeType":"StructuredDocumentation","src":"6498:391:11","text":" @notice Add pools to the set of pools controlled by this helper contract.\n @dev This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis)\n may add pools to a set. Also reverts if the poolSetId is not valid.\n @param newPools List of pools to add\n @param poolSetId Id of the set to which the new pools belong"},"functionSelector":"ebf3a8d0","id":779,"implemented":false,"kind":"function","modifiers":[],"name":"addPoolsToSet","nameLocation":"6903:13:11","nodeType":"FunctionDefinition","parameters":{"id":777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":773,"mutability":"mutable","name":"poolSetId","nameLocation":"6925:9:11","nodeType":"VariableDeclaration","scope":779,"src":"6917:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":772,"name":"uint256","nodeType":"ElementaryTypeName","src":"6917:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":776,"mutability":"mutable","name":"newPools","nameLocation":"6953:8:11","nodeType":"VariableDeclaration","scope":779,"src":"6936:25:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":774,"name":"address","nodeType":"ElementaryTypeName","src":"6936:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":775,"nodeType":"ArrayTypeName","src":"6936:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"6916:46:11"},"returnParameters":{"id":778,"nodeType":"ParameterList","parameters":[],"src":"6971:0:11"},"scope":865,"src":"6894:78:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":780,"nodeType":"StructuredDocumentation","src":"6978:410:11","text":" @notice Remove pools from the set of pools controlled by this helper contract.\n @dev This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis)\n may remove pools from a set. Also reverts if the poolSetId is not valid.\n @param pools List of pools to remove from the set\n @param poolSetId Id of the set to which the pools belong"},"functionSelector":"2da55a1d","id":788,"implemented":false,"kind":"function","modifiers":[],"name":"removePoolsFromSet","nameLocation":"7402:18:11","nodeType":"FunctionDefinition","parameters":{"id":786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":782,"mutability":"mutable","name":"poolSetId","nameLocation":"7429:9:11","nodeType":"VariableDeclaration","scope":788,"src":"7421:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":781,"name":"uint256","nodeType":"ElementaryTypeName","src":"7421:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":785,"mutability":"mutable","name":"pools","nameLocation":"7457:5:11","nodeType":"VariableDeclaration","scope":788,"src":"7440:22:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":783,"name":"address","nodeType":"ElementaryTypeName","src":"7440:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":784,"nodeType":"ArrayTypeName","src":"7440:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"7420:43:11"},"returnParameters":{"id":787,"nodeType":"ParameterList","parameters":[],"src":"7472:0:11"},"scope":865,"src":"7393:80:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":789,"nodeType":"StructuredDocumentation","src":"7718:172:11","text":" @notice Get the pool set id associated with the caller.\n @return poolSetId The numeric pool set id, or zero if the caller is not a pool set manager"},"functionSelector":"ce998aba","id":794,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolSetIdForCaller","nameLocation":"7904:21:11","nodeType":"FunctionDefinition","parameters":{"id":790,"nodeType":"ParameterList","parameters":[],"src":"7925:2:11"},"returnParameters":{"id":793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":792,"mutability":"mutable","name":"poolSetId","nameLocation":"7959:9:11","nodeType":"VariableDeclaration","scope":794,"src":"7951:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":791,"name":"uint256","nodeType":"ElementaryTypeName","src":"7951:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7950:19:11"},"scope":865,"src":"7895:75:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":795,"nodeType":"StructuredDocumentation","src":"7976:192:11","text":" @notice Get the pool set id associated with a given manager address.\n @return poolSetId The numeric pool set id, or zero if the address given is not a pool set manager"},"functionSelector":"25c427ed","id":802,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolSetIdForManager","nameLocation":"8182:22:11","nodeType":"FunctionDefinition","parameters":{"id":798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":797,"mutability":"mutable","name":"manager","nameLocation":"8213:7:11","nodeType":"VariableDeclaration","scope":802,"src":"8205:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":796,"name":"address","nodeType":"ElementaryTypeName","src":"8205:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8204:17:11"},"returnParameters":{"id":801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":800,"mutability":"mutable","name":"poolSetId","nameLocation":"8253:9:11","nodeType":"VariableDeclaration","scope":802,"src":"8245:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":799,"name":"uint256","nodeType":"ElementaryTypeName","src":"8245:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8244:19:11"},"scope":865,"src":"8173:91:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":803,"nodeType":"StructuredDocumentation","src":"8270:363:11","text":" @notice Get the number of pools associated with the given set.\n @dev Needed to support pagination in case the set is too large to process in a single transaction.\n Reverts if the poolSetId is not valid.\n @param poolSetId Id of the set containing the pools\n @return poolCount The current number of pools in the set"},"functionSelector":"62d53462","id":810,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCountForSet","nameLocation":"8647:18:11","nodeType":"FunctionDefinition","parameters":{"id":806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":805,"mutability":"mutable","name":"poolSetId","nameLocation":"8674:9:11","nodeType":"VariableDeclaration","scope":810,"src":"8666:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":804,"name":"uint256","nodeType":"ElementaryTypeName","src":"8666:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8665:19:11"},"returnParameters":{"id":809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":808,"mutability":"mutable","name":"poolCount","nameLocation":"8716:9:11","nodeType":"VariableDeclaration","scope":810,"src":"8708:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":807,"name":"uint256","nodeType":"ElementaryTypeName","src":"8708:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8707:19:11"},"scope":865,"src":"8638:89:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":811,"nodeType":"StructuredDocumentation","src":"8733:181:11","text":" @notice Check whether a poolSetId has been created.\n @param poolSetId Id of the set containing the pools\n @return isValid True if the poolSetId exists"},"functionSelector":"255dae41","id":818,"implemented":false,"kind":"function","modifiers":[],"name":"isValidPoolSetId","nameLocation":"8928:16:11","nodeType":"FunctionDefinition","parameters":{"id":814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":813,"mutability":"mutable","name":"poolSetId","nameLocation":"8953:9:11","nodeType":"VariableDeclaration","scope":818,"src":"8945:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":812,"name":"uint256","nodeType":"ElementaryTypeName","src":"8945:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8944:19:11"},"returnParameters":{"id":817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":816,"mutability":"mutable","name":"isValid","nameLocation":"8992:7:11","nodeType":"VariableDeclaration","scope":818,"src":"8987:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":815,"name":"bool","nodeType":"ElementaryTypeName","src":"8987:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8986:14:11"},"scope":865,"src":"8919:82:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":819,"nodeType":"StructuredDocumentation","src":"9007:308:11","text":" @notice Check whether a pool is in the set of pools.\n @dev Reverts if the poolSetId is not valid.\n @param pool Address of the pool to check\n @param poolSetId Id of the set containing the pools\n @return poolInSet True if the pool is in the given set, false otherwise"},"functionSelector":"182551da","id":828,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInSet","nameLocation":"9329:11:11","nodeType":"FunctionDefinition","parameters":{"id":824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":821,"mutability":"mutable","name":"pool","nameLocation":"9349:4:11","nodeType":"VariableDeclaration","scope":828,"src":"9341:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":820,"name":"address","nodeType":"ElementaryTypeName","src":"9341:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":823,"mutability":"mutable","name":"poolSetId","nameLocation":"9363:9:11","nodeType":"VariableDeclaration","scope":828,"src":"9355:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":822,"name":"uint256","nodeType":"ElementaryTypeName","src":"9355:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9340:33:11"},"returnParameters":{"id":827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":826,"mutability":"mutable","name":"poolInSet","nameLocation":"9402:9:11","nodeType":"VariableDeclaration","scope":828,"src":"9397:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":825,"name":"bool","nodeType":"ElementaryTypeName","src":"9397:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9396:16:11"},"scope":865,"src":"9320:93:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":829,"nodeType":"StructuredDocumentation","src":"9419:215:11","text":" @notice Get the full set of pools from a given set.\n @dev Reverts if the poolSetId is not valid.\n @param poolSetId Id of the set containing the pools\n @return pools List of pools"},"functionSelector":"94fc4058","id":837,"implemented":false,"kind":"function","modifiers":[],"name":"getAllPoolsInSet","nameLocation":"9648:16:11","nodeType":"FunctionDefinition","parameters":{"id":832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":831,"mutability":"mutable","name":"poolSetId","nameLocation":"9673:9:11","nodeType":"VariableDeclaration","scope":837,"src":"9665:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":830,"name":"uint256","nodeType":"ElementaryTypeName","src":"9665:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9664:19:11"},"returnParameters":{"id":836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":835,"mutability":"mutable","name":"pools","nameLocation":"9724:5:11","nodeType":"VariableDeclaration","scope":837,"src":"9707:22:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":833,"name":"address","nodeType":"ElementaryTypeName","src":"9707:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":834,"nodeType":"ArrayTypeName","src":"9707:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"9706:24:11"},"scope":865,"src":"9639:92:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":838,"nodeType":"StructuredDocumentation","src":"9737:369:11","text":" @notice Get a range of pools from a given set.\n @dev Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`).\n Reverts if the poolSetId is not valid.\n @param poolSetId Id of the set containing the pools\n @param from Start index\n @param to End index\n @return pools List of pools"},"functionSelector":"8c60ebd0","id":850,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolsInSet","nameLocation":"10120:13:11","nodeType":"FunctionDefinition","parameters":{"id":845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":840,"mutability":"mutable","name":"poolSetId","nameLocation":"10142:9:11","nodeType":"VariableDeclaration","scope":850,"src":"10134:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":839,"name":"uint256","nodeType":"ElementaryTypeName","src":"10134:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":842,"mutability":"mutable","name":"from","nameLocation":"10161:4:11","nodeType":"VariableDeclaration","scope":850,"src":"10153:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":841,"name":"uint256","nodeType":"ElementaryTypeName","src":"10153:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":844,"mutability":"mutable","name":"to","nameLocation":"10175:2:11","nodeType":"VariableDeclaration","scope":850,"src":"10167:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":843,"name":"uint256","nodeType":"ElementaryTypeName","src":"10167:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10133:45:11"},"returnParameters":{"id":849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":848,"mutability":"mutable","name":"pools","nameLocation":"10219:5:11","nodeType":"VariableDeclaration","scope":850,"src":"10202:22:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":846,"name":"address","nodeType":"ElementaryTypeName","src":"10202:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":847,"nodeType":"ArrayTypeName","src":"10202:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"10201:24:11"},"scope":865,"src":"10111:115:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":851,"nodeType":"StructuredDocumentation","src":"10232:175:11","text":" @notice Utility function to predict the next pool set id.\n @return nextPoolSetId The pool set id that will be used on the next call of `createPoolSet`"},"functionSelector":"c482e822","id":856,"implemented":false,"kind":"function","modifiers":[],"name":"getNextPoolSetId","nameLocation":"10421:16:11","nodeType":"FunctionDefinition","parameters":{"id":852,"nodeType":"ParameterList","parameters":[],"src":"10437:2:11"},"returnParameters":{"id":855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":854,"mutability":"mutable","name":"nextPoolSetId","nameLocation":"10471:13:11","nodeType":"VariableDeclaration","scope":856,"src":"10463:21:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":853,"name":"uint256","nodeType":"ElementaryTypeName","src":"10463:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10462:23:11"},"scope":865,"src":"10412:74:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":857,"nodeType":"StructuredDocumentation","src":"10492:257:11","text":" @notice Get the manager address associated with a given poolSetId.\n @param poolSetId Id of the set containing the pools\n @return manager The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned"},"functionSelector":"f167a1e6","id":864,"implemented":false,"kind":"function","modifiers":[],"name":"getManagerForPoolSet","nameLocation":"10763:20:11","nodeType":"FunctionDefinition","parameters":{"id":860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":859,"mutability":"mutable","name":"poolSetId","nameLocation":"10792:9:11","nodeType":"VariableDeclaration","scope":864,"src":"10784:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":858,"name":"uint256","nodeType":"ElementaryTypeName","src":"10784:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10783:19:11"},"returnParameters":{"id":863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":862,"mutability":"mutable","name":"manager","nameLocation":"10834:7:11","nodeType":"VariableDeclaration","scope":864,"src":"10826:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":861,"name":"address","nodeType":"ElementaryTypeName","src":"10826:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10825:17:11"},"scope":865,"src":"10754:89:11","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":866,"src":"157:10688:11","usedErrors":[711,718,723,726,731,734,739],"usedEvents":[674,681,688,695,704]}],"src":"46:10800:11"},"id":11},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol","exportedSymbols":{"IPoolPauseHelper":[876]},"id":877,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":867,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:12"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolPauseHelper","contractDependencies":[],"contractKind":"interface","documentation":{"id":868,"nodeType":"StructuredDocumentation","src":"72:482:12","text":" @notice Maintain a set of pools that can be paused from this helper contract, vs. directly from the Vault.\n @dev Governance can add a set of pools to this contract, then grant pause permission to accounts here, which\n allows greater granularity than setting the permission directly on the Vault.\n Note that governance must grant this contract permission to pause pools from the Vault. Unpausing is not\n addressed here, and must still be done through the Vault."},"fullyImplemented":false,"id":876,"linearizedBaseContracts":[876],"name":"IPoolPauseHelper","nameLocation":"565:16:12","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":869,"nodeType":"StructuredDocumentation","src":"588:702:12","text":" @notice Pause a set of pools.\n @dev This is a permissioned function. Governance must first grant this contract permission to call `pausePool`\n on the Vault, then grant another account permission to call `pausePools` here. Note that this is not necessarily\n the same account that can add or remove pools from the pausable list.\n Note that there is no `unpause`. This is a helper contract designed to react quickly to emergencies. Unpausing\n is a more deliberate action that should be performed by accounts approved by governance for this purpose, or by\n the individual pools' pause managers.\n @param pools List of pools to pause"},"functionSelector":"a20dc529","id":875,"implemented":false,"kind":"function","modifiers":[],"name":"pausePools","nameLocation":"1304:10:12","nodeType":"FunctionDefinition","parameters":{"id":873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":872,"mutability":"mutable","name":"pools","nameLocation":"1332:5:12","nodeType":"VariableDeclaration","scope":875,"src":"1315:22:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":870,"name":"address","nodeType":"ElementaryTypeName","src":"1315:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":871,"nodeType":"ArrayTypeName","src":"1315:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1314:24:12"},"returnParameters":{"id":874,"nodeType":"ParameterList","parameters":[],"src":"1347:0:12"},"scope":876,"src":"1295:53:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":877,"src":"555:795:12","usedErrors":[],"usedEvents":[]}],"src":"46:1305:12"},"id":12},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol","exportedSymbols":{"IPoolSwapFeeHelper":[893]},"id":894,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":878,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:13"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolSwapFeeHelper","contractDependencies":[],"contractKind":"interface","documentation":{"id":879,"nodeType":"StructuredDocumentation","src":"72:541:13","text":" @notice Maintain a set of pools whose static swap fee percentages can be changed from here, vs. from the Vault.\n @dev Governance can add a set of pools to this contract, then grant swap fee setting permission to accounts on this\n contract, which allows greater granularity than setting the permission directly on the Vault.\n Note that governance must grant this contract permission to set swap fees from the Vault, and only pools that\n allow governance to set fees can be added (i.e., they must not have swap managers)."},"fullyImplemented":false,"id":893,"linearizedBaseContracts":[893],"name":"IPoolSwapFeeHelper","nameLocation":"624:18:13","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":880,"nodeType":"StructuredDocumentation","src":"649:380:13","text":" @notice Cannot add a pool that has a swap manager.\n @dev The swap manager is an exclusive role. If it is set to a non-zero value during pool registration,\n only the swap manager can change the fee. This helper can only set fees on pools that allow governance\n to grant this permission.\n @param pool Address of the pool being added"},"errorSelector":"f043494a","id":884,"name":"PoolHasSwapManager","nameLocation":"1040:18:13","nodeType":"ErrorDefinition","parameters":{"id":883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":882,"mutability":"mutable","name":"pool","nameLocation":"1067:4:13","nodeType":"VariableDeclaration","scope":884,"src":"1059:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":881,"name":"address","nodeType":"ElementaryTypeName","src":"1059:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1058:14:13"},"src":"1034:39:13"},{"documentation":{"id":885,"nodeType":"StructuredDocumentation","src":"1291:500:13","text":" @notice Set the static swap fee percentage on a given pool.\n @dev This is a permissioned function. Governance must grant this contract permission to call\n `setStaticSwapFeePercentage` on the Vault. Note that since the swap manager is an exclusive role, the swap fee\n cannot be changed by governance if it is set, and the pool cannot be added to the set.\n @param pool The address of the pool\n @param swapFeePercentage The new swap fee percentage"},"functionSelector":"d15126ba","id":892,"implemented":false,"kind":"function","modifiers":[],"name":"setStaticSwapFeePercentage","nameLocation":"1805:26:13","nodeType":"FunctionDefinition","parameters":{"id":890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":887,"mutability":"mutable","name":"pool","nameLocation":"1840:4:13","nodeType":"VariableDeclaration","scope":892,"src":"1832:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":886,"name":"address","nodeType":"ElementaryTypeName","src":"1832:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":889,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1854:17:13","nodeType":"VariableDeclaration","scope":892,"src":"1846:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":888,"name":"uint256","nodeType":"ElementaryTypeName","src":"1846:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1831:41:13"},"returnParameters":{"id":891,"nodeType":"ParameterList","parameters":[],"src":"1881:0:13"},"scope":893,"src":"1796:86:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":894,"src":"614:1270:13","usedErrors":[884],"usedEvents":[]}],"src":"46:1839:13"},"id":13},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","exportedSymbols":{"IERC20":[10576],"IProtocolFeeBurner":[948]},"id":949,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":895,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:14"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":897,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":949,"sourceUnit":10577,"src":"72:72:14","symbolAliases":[{"foreign":{"id":896,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeBurner","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":948,"linearizedBaseContracts":[948],"name":"IProtocolFeeBurner","nameLocation":"156:18:14","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":898,"nodeType":"StructuredDocumentation","src":"181:576:14","text":" @notice A protocol fee token has been \"burned\" (i.e., swapped for the desired target token).\n @param pool The pool on which the fee was collected (used for event tracking)\n @param feeToken The token in which the fee was originally collected\n @param exactFeeTokenAmountIn The number of feeTokens collected\n @param targetToken The preferred token for fee collection (e.g., USDC)\n @param actualTargetTokenAmountOut The number of target tokens actually received\n @param recipient The address where the target tokens were sent"},"eventSelector":"77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d","id":914,"name":"ProtocolFeeBurned","nameLocation":"768:17:14","nodeType":"EventDefinition","parameters":{"id":913,"nodeType":"ParameterList","parameters":[{"constant":false,"id":900,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"811:4:14","nodeType":"VariableDeclaration","scope":914,"src":"795:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":899,"name":"address","nodeType":"ElementaryTypeName","src":"795:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":903,"indexed":true,"mutability":"mutable","name":"feeToken","nameLocation":"840:8:14","nodeType":"VariableDeclaration","scope":914,"src":"825:23:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":902,"nodeType":"UserDefinedTypeName","pathNode":{"id":901,"name":"IERC20","nameLocations":["825:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"825:6:14"},"referencedDeclaration":10576,"src":"825:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":905,"indexed":false,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"866:21:14","nodeType":"VariableDeclaration","scope":914,"src":"858:29:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":904,"name":"uint256","nodeType":"ElementaryTypeName","src":"858:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":908,"indexed":true,"mutability":"mutable","name":"targetToken","nameLocation":"912:11:14","nodeType":"VariableDeclaration","scope":914,"src":"897:26:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":907,"nodeType":"UserDefinedTypeName","pathNode":{"id":906,"name":"IERC20","nameLocations":["897:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"897:6:14"},"referencedDeclaration":10576,"src":"897:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":910,"indexed":false,"mutability":"mutable","name":"actualTargetTokenAmountOut","nameLocation":"941:26:14","nodeType":"VariableDeclaration","scope":914,"src":"933:34:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":909,"name":"uint256","nodeType":"ElementaryTypeName","src":"933:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":912,"indexed":false,"mutability":"mutable","name":"recipient","nameLocation":"985:9:14","nodeType":"VariableDeclaration","scope":914,"src":"977:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":911,"name":"address","nodeType":"ElementaryTypeName","src":"977:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"785:215:14"},"src":"762:239:14"},{"documentation":{"id":915,"nodeType":"StructuredDocumentation","src":"1007:269:14","text":" @notice The actual amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"2f785e46","id":924,"name":"AmountOutBelowMin","nameLocation":"1287:17:14","nodeType":"ErrorDefinition","parameters":{"id":923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":918,"mutability":"mutable","name":"tokenOut","nameLocation":"1312:8:14","nodeType":"VariableDeclaration","scope":924,"src":"1305:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":917,"nodeType":"UserDefinedTypeName","pathNode":{"id":916,"name":"IERC20","nameLocations":["1305:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1305:6:14"},"referencedDeclaration":10576,"src":"1305:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":920,"mutability":"mutable","name":"amountOut","nameLocation":"1330:9:14","nodeType":"VariableDeclaration","scope":924,"src":"1322:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":919,"name":"uint256","nodeType":"ElementaryTypeName","src":"1322:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":922,"mutability":"mutable","name":"minAmountOut","nameLocation":"1349:12:14","nodeType":"VariableDeclaration","scope":924,"src":"1341:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":921,"name":"uint256","nodeType":"ElementaryTypeName","src":"1341:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1304:58:14"},"src":"1281:82:14"},{"documentation":{"id":925,"nodeType":"StructuredDocumentation","src":"1369:91:14","text":"@notice The swap transaction was not validated before the specified deadline timestamp."},"errorSelector":"e08b8af0","id":927,"name":"SwapDeadline","nameLocation":"1471:12:14","nodeType":"ErrorDefinition","parameters":{"id":926,"nodeType":"ParameterList","parameters":[],"src":"1483:2:14"},"src":"1465:21:14"},{"documentation":{"id":928,"nodeType":"StructuredDocumentation","src":"1492:750:14","text":" @notice Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\n @dev Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\n @param pool The pool the fees came from (only used for documentation in the event)\n @param feeToken The token collected from the pool\n @param exactFeeTokenAmountIn The number of fee tokens collected\n @param targetToken The desired target token (token out of the swap)\n @param minTargetTokenAmountOut The minimum amount out for the swap\n @param recipient The recipient of the swap proceeds\n @param deadline Deadline for the burn operation (i.e., swap), after which it will revert"},"functionSelector":"de557a32","id":947,"implemented":false,"kind":"function","modifiers":[],"name":"burn","nameLocation":"2256:4:14","nodeType":"FunctionDefinition","parameters":{"id":945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":930,"mutability":"mutable","name":"pool","nameLocation":"2278:4:14","nodeType":"VariableDeclaration","scope":947,"src":"2270:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":929,"name":"address","nodeType":"ElementaryTypeName","src":"2270:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":933,"mutability":"mutable","name":"feeToken","nameLocation":"2299:8:14","nodeType":"VariableDeclaration","scope":947,"src":"2292:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":932,"nodeType":"UserDefinedTypeName","pathNode":{"id":931,"name":"IERC20","nameLocations":["2292:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2292:6:14"},"referencedDeclaration":10576,"src":"2292:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":935,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"2325:21:14","nodeType":"VariableDeclaration","scope":947,"src":"2317:29:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":934,"name":"uint256","nodeType":"ElementaryTypeName","src":"2317:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":938,"mutability":"mutable","name":"targetToken","nameLocation":"2363:11:14","nodeType":"VariableDeclaration","scope":947,"src":"2356:18:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":937,"nodeType":"UserDefinedTypeName","pathNode":{"id":936,"name":"IERC20","nameLocations":["2356:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2356:6:14"},"referencedDeclaration":10576,"src":"2356:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":940,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"2392:23:14","nodeType":"VariableDeclaration","scope":947,"src":"2384:31:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":939,"name":"uint256","nodeType":"ElementaryTypeName","src":"2384:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":942,"mutability":"mutable","name":"recipient","nameLocation":"2433:9:14","nodeType":"VariableDeclaration","scope":947,"src":"2425:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":941,"name":"address","nodeType":"ElementaryTypeName","src":"2425:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":944,"mutability":"mutable","name":"deadline","nameLocation":"2460:8:14","nodeType":"VariableDeclaration","scope":947,"src":"2452:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":943,"name":"uint256","nodeType":"ElementaryTypeName","src":"2452:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2260:214:14"},"returnParameters":{"id":946,"nodeType":"ParameterList","parameters":[],"src":"2483:0:14"},"scope":948,"src":"2247:237:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":949,"src":"146:2340:14","usedErrors":[924,927],"usedEvents":[914]}],"src":"46:2441:14"},"id":14},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol","exportedSymbols":{"IProtocolFeeHelper":[968]},"id":969,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":950,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:15"},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeHelper","contractDependencies":[],"contractKind":"interface","documentation":{"id":951,"nodeType":"StructuredDocumentation","src":"72:489:15","text":" @notice Maintain a set of pools whose protocol fees can be set from this helper contract, vs. the fee controller.\n @dev Governance can add a set of pools to this contract, then grant permission to call protocol swap- or yield-\n setting functions here, which allows greater granularity than setting permissions directly on the fee controller.\n Note that governance must grant this contract permission to call the pool protocol fee setting functions on the\n controller."},"fullyImplemented":false,"id":968,"linearizedBaseContracts":[968],"name":"IProtocolFeeHelper","nameLocation":"572:18:15","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":952,"nodeType":"StructuredDocumentation","src":"809:381:15","text":" @notice Set the protocol swap fee for a pool.\n @dev This contract must be granted permission to set swap and yield protocol fees, but governance can\n independently grant permission to call the swap and yield fee setters.\n @param pool The address of the pool\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage"},"functionSelector":"fd267f39","id":959,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolSwapFeePercentage","nameLocation":"1204:28:15","nodeType":"FunctionDefinition","parameters":{"id":957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":954,"mutability":"mutable","name":"pool","nameLocation":"1241:4:15","nodeType":"VariableDeclaration","scope":959,"src":"1233:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":953,"name":"address","nodeType":"ElementaryTypeName","src":"1233:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":956,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"1255:28:15","nodeType":"VariableDeclaration","scope":959,"src":"1247:36:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":955,"name":"uint256","nodeType":"ElementaryTypeName","src":"1247:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1232:52:15"},"returnParameters":{"id":958,"nodeType":"ParameterList","parameters":[],"src":"1293:0:15"},"scope":968,"src":"1195:99:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":960,"nodeType":"StructuredDocumentation","src":"1300:384:15","text":" @notice Set the protocol yield fee for a pool.\n @dev This contract must be granted permission to set swap and yield protocol fees, but governance can\n independently grant permission to call the swap and yield fee setters.\n @param pool The address of the pool\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"abaa3356","id":967,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolYieldFeePercentage","nameLocation":"1698:29:15","nodeType":"FunctionDefinition","parameters":{"id":965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":962,"mutability":"mutable","name":"pool","nameLocation":"1736:4:15","nodeType":"VariableDeclaration","scope":967,"src":"1728:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":961,"name":"address","nodeType":"ElementaryTypeName","src":"1728:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":964,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"1750:29:15","nodeType":"VariableDeclaration","scope":967,"src":"1742:37:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":963,"name":"uint256","nodeType":"ElementaryTypeName","src":"1742:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1727:53:15"},"returnParameters":{"id":966,"nodeType":"ParameterList","parameters":[],"src":"1789:0:15"},"scope":968,"src":"1689:101:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":969,"src":"562:1230:15","usedErrors":[],"usedEvents":[]}],"src":"46:1747:15"},"id":15},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","exportedSymbols":{"IERC20":[10576],"IERC4626":[9846],"IProtocolFeeBurner":[948],"IProtocolFeeController":[1955],"IProtocolFeeSweeper":[1137]},"id":1138,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":970,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:16"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":972,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1138,"sourceUnit":10577,"src":"72:72:16","symbolAliases":[{"foreign":{"id":971,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":974,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1138,"sourceUnit":9847,"src":"145:75:16","symbolAliases":[{"foreign":{"id":973,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"154:8:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"../vault/IProtocolFeeController.sol","id":976,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1138,"sourceUnit":1956,"src":"222:77:16","symbolAliases":[{"foreign":{"id":975,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"231:22:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"./IProtocolFeeBurner.sol","id":978,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1138,"sourceUnit":949,"src":"300:62:16","symbolAliases":[{"foreign":{"id":977,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"309:18:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeSweeper","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":1137,"linearizedBaseContracts":[1137],"name":"IProtocolFeeSweeper","nameLocation":"374:19:16","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":979,"nodeType":"StructuredDocumentation","src":"400:143:16","text":" @notice Emitted when the target token is set or updated.\n @param token The preferred token for receiving protocol fees"},"eventSelector":"873950c2ac59c570001b99d815ffb260542df229d07132922e2e6f9941fd3da6","id":984,"name":"TargetTokenSet","nameLocation":"554:14:16","nodeType":"EventDefinition","parameters":{"id":983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":982,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"584:5:16","nodeType":"VariableDeclaration","scope":984,"src":"569:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":981,"nodeType":"UserDefinedTypeName","pathNode":{"id":980,"name":"IERC20","nameLocations":["569:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"569:6:16"},"referencedDeclaration":10576,"src":"569:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"568:22:16"},"src":"548:43:16"},{"anonymous":false,"documentation":{"id":985,"nodeType":"StructuredDocumentation","src":"597:160:16","text":" @notice Emitted when the fee recipient address is set or updated.\n @param feeRecipient The final destination of collected protocol fees"},"eventSelector":"bf9a9534339a9d6b81696e05dcfb614b7dc518a31d48be3cfb757988381fb323","id":989,"name":"FeeRecipientSet","nameLocation":"768:15:16","nodeType":"EventDefinition","parameters":{"id":988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":987,"indexed":true,"mutability":"mutable","name":"feeRecipient","nameLocation":"800:12:16","nodeType":"VariableDeclaration","scope":989,"src":"784:28:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":986,"name":"address","nodeType":"ElementaryTypeName","src":"784:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"783:30:16"},"src":"762:52:16"},{"anonymous":false,"documentation":{"id":990,"nodeType":"StructuredDocumentation","src":"820:501:16","text":" @notice Emitted when a fee token is transferred directly, vs. calling the burner.\n @dev This can happen if no target token or burner contract was specified, or the fee token is the target token.\n @param pool The pool on which the fee was collected\n @param feeToken The token the fee was collected in (also the target token in this case; no swap necessary)\n @param feeTokenAmount The number of feeTokens\n @param recipient The recipient of the fee tokens"},"eventSelector":"d6b9382ec1786c32610e376e8ee8f2f16abeda4ace3b6276ac958193c75bbbc8","id":1001,"name":"ProtocolFeeSwept","nameLocation":"1332:16:16","nodeType":"EventDefinition","parameters":{"id":1000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":992,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1365:4:16","nodeType":"VariableDeclaration","scope":1001,"src":"1349:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":991,"name":"address","nodeType":"ElementaryTypeName","src":"1349:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":995,"indexed":true,"mutability":"mutable","name":"feeToken","nameLocation":"1386:8:16","nodeType":"VariableDeclaration","scope":1001,"src":"1371:23:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":994,"nodeType":"UserDefinedTypeName","pathNode":{"id":993,"name":"IERC20","nameLocations":["1371:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1371:6:16"},"referencedDeclaration":10576,"src":"1371:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":997,"indexed":false,"mutability":"mutable","name":"feeTokenAmount","nameLocation":"1404:14:16","nodeType":"VariableDeclaration","scope":1001,"src":"1396:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":996,"name":"uint256","nodeType":"ElementaryTypeName","src":"1396:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":999,"indexed":false,"mutability":"mutable","name":"recipient","nameLocation":"1428:9:16","nodeType":"VariableDeclaration","scope":1001,"src":"1420:17:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":998,"name":"address","nodeType":"ElementaryTypeName","src":"1420:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1348:90:16"},"src":"1326:113:16"},{"anonymous":false,"documentation":{"id":1002,"nodeType":"StructuredDocumentation","src":"1445:294:16","text":" @notice Emitted when a burner is added to the protocol fee burner allowlist.\n @dev `sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\n @param protocolFeeBurner The address of the approved protocol fee burner that was added"},"eventSelector":"0ef09fc346b7c2cae78d9a37ed785840e7d3c6072022cd8c41c3b37a239b7fd1","id":1006,"name":"ProtocolFeeBurnerAdded","nameLocation":"1750:22:16","nodeType":"EventDefinition","parameters":{"id":1005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1004,"indexed":true,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"1789:17:16","nodeType":"VariableDeclaration","scope":1006,"src":"1773:33:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1003,"name":"address","nodeType":"ElementaryTypeName","src":"1773:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1772:35:16"},"src":"1744:64:16"},{"anonymous":false,"documentation":{"id":1007,"nodeType":"StructuredDocumentation","src":"1814:300:16","text":" @notice Emitted when a burner is removed from the protocol fee burner allowlist.\n @dev `sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\n @param protocolFeeBurner The address of the approved protocol fee burner that was removed"},"eventSelector":"0ed3ea501d1a23f23a7dc56c2d33e1e5a6a97694c707ef67b1e0159f239746bf","id":1011,"name":"ProtocolFeeBurnerRemoved","nameLocation":"2125:24:16","nodeType":"EventDefinition","parameters":{"id":1010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1009,"indexed":true,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"2166:17:16","nodeType":"VariableDeclaration","scope":1011,"src":"2150:33:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1008,"name":"address","nodeType":"ElementaryTypeName","src":"2150:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2149:35:16"},"src":"2119:66:16"},{"documentation":{"id":1012,"nodeType":"StructuredDocumentation","src":"2191:41:16","text":"@notice The fee recipient is invalid."},"errorSelector":"768dc598","id":1014,"name":"InvalidFeeRecipient","nameLocation":"2243:19:16","nodeType":"ErrorDefinition","parameters":{"id":1013,"nodeType":"ParameterList","parameters":[],"src":"2262:2:16"},"src":"2237:28:16"},{"documentation":{"id":1015,"nodeType":"StructuredDocumentation","src":"2271:40:16","text":"@notice The target token is invalid."},"errorSelector":"8562eb45","id":1017,"name":"InvalidTargetToken","nameLocation":"2322:18:16","nodeType":"ErrorDefinition","parameters":{"id":1016,"nodeType":"ParameterList","parameters":[],"src":"2340:2:16"},"src":"2316:27:16"},{"documentation":{"id":1018,"nodeType":"StructuredDocumentation","src":"2349:59:16","text":"@notice The protocol fee burner to be added is invalid."},"errorSelector":"31ec2736","id":1020,"name":"InvalidProtocolFeeBurner","nameLocation":"2419:24:16","nodeType":"ErrorDefinition","parameters":{"id":1019,"nodeType":"ParameterList","parameters":[],"src":"2443:2:16"},"src":"2413:33:16"},{"documentation":{"id":1021,"nodeType":"StructuredDocumentation","src":"2452:148:16","text":" @notice The specified fee burner has not been approved.\n @param protocolFeeBurner The address of the unsupported fee burner"},"errorSelector":"38553f6c","id":1025,"name":"UnsupportedProtocolFeeBurner","nameLocation":"2611:28:16","nodeType":"ErrorDefinition","parameters":{"id":1024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1023,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"2648:17:16","nodeType":"VariableDeclaration","scope":1025,"src":"2640:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1022,"name":"address","nodeType":"ElementaryTypeName","src":"2640:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2639:27:16"},"src":"2605:62:16"},{"documentation":{"id":1026,"nodeType":"StructuredDocumentation","src":"2673:167:16","text":" @notice Protocol fee burners can only be added to the allowlist once.\n @param protocolFeeBurner The address of an approved protocol fee burner"},"errorSelector":"6fe47af6","id":1030,"name":"ProtocolFeeBurnerAlreadyAdded","nameLocation":"2851:29:16","nodeType":"ErrorDefinition","parameters":{"id":1029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1028,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"2889:17:16","nodeType":"VariableDeclaration","scope":1030,"src":"2881:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1027,"name":"address","nodeType":"ElementaryTypeName","src":"2881:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2880:27:16"},"src":"2845:63:16"},{"documentation":{"id":1031,"nodeType":"StructuredDocumentation","src":"2914:202:16","text":" @notice Protocol fee burners must be added to the allowlist before being removed.\n @param protocolFeeBurner The address of a protocol fee burner to be removed from the allowlist"},"errorSelector":"bca5ab34","id":1035,"name":"ProtocolFeeBurnerNotAdded","nameLocation":"3127:25:16","nodeType":"ErrorDefinition","parameters":{"id":1034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1033,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"3161:17:16","nodeType":"VariableDeclaration","scope":1035,"src":"3153:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1032,"name":"address","nodeType":"ElementaryTypeName","src":"3153:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3152:27:16"},"src":"3121:59:16"},{"documentation":{"id":1036,"nodeType":"StructuredDocumentation","src":"3186:235:16","text":" @notice The burner did not consume its entire allowance.\n @dev The fee sweeper approves the burner to pull tokens. If it doesn't do so, revert to avoid a \"hanging\"\n approval that could be exploited later."},"errorSelector":"c5bc8d51","id":1038,"name":"BurnerDidNotConsumeAllowance","nameLocation":"3432:28:16","nodeType":"ErrorDefinition","parameters":{"id":1037,"nodeType":"ParameterList","parameters":[],"src":"3460:2:16"},"src":"3426:37:16"},{"documentation":{"id":1039,"nodeType":"StructuredDocumentation","src":"3469:56:16","text":"@notice Unwrapping is not allowed for the operation."},"errorSelector":"ca9e3a1e","id":1041,"name":"UnwrapIsNotAllowed","nameLocation":"3536:18:16","nodeType":"ErrorDefinition","parameters":{"id":1040,"nodeType":"ParameterList","parameters":[],"src":"3554:2:16"},"src":"3530:27:16"},{"documentation":{"id":1042,"nodeType":"StructuredDocumentation","src":"3563:1358:16","text":" @notice Withdraw, convert, and forward protocol fees for a given pool and token.\n @dev This will withdraw the fee token from the controller to this contract, and attempt to convert and forward\n the proceeds to the fee recipient. Note that this requires governance to grant this contract permission to call\n `withdrawProtocolFeesForToken` on the `ProtocolFeeController`.\n This is a permissioned call, since it involves a swap and a permissionless sweep could be triggered at times\n disadvantageous to the protocol (e.g., flash crashes). The general design is for an off-chain process to\n periodically collect fees from the Vault and check the protocol fee amounts available for withdrawal. Once\n these are greater than a threshold, compute the expected proceeds to determine the limits (amount and deadline),\n then call the sweeper to put in the order with the burner.\n @param pool The pool that incurred the fees we're withdrawing\n @param feeToken The fee token in the pool\n @param minTargetTokenAmountOut The minimum number of target tokens to be received\n @param deadline Deadline for the burn operation (swap), after which it will revert\n @param feeBurner The protocol fee burner to be used (or the zero address to fall back on direct transfer)"},"functionSelector":"b9746995","id":1057,"implemented":false,"kind":"function","modifiers":[],"name":"sweepProtocolFeesForToken","nameLocation":"4935:25:16","nodeType":"FunctionDefinition","parameters":{"id":1055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1044,"mutability":"mutable","name":"pool","nameLocation":"4978:4:16","nodeType":"VariableDeclaration","scope":1057,"src":"4970:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1043,"name":"address","nodeType":"ElementaryTypeName","src":"4970:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1047,"mutability":"mutable","name":"feeToken","nameLocation":"4999:8:16","nodeType":"VariableDeclaration","scope":1057,"src":"4992:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1046,"nodeType":"UserDefinedTypeName","pathNode":{"id":1045,"name":"IERC20","nameLocations":["4992:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4992:6:16"},"referencedDeclaration":10576,"src":"4992:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1049,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"5025:23:16","nodeType":"VariableDeclaration","scope":1057,"src":"5017:31:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1048,"name":"uint256","nodeType":"ElementaryTypeName","src":"5017:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1051,"mutability":"mutable","name":"deadline","nameLocation":"5066:8:16","nodeType":"VariableDeclaration","scope":1057,"src":"5058:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1050,"name":"uint256","nodeType":"ElementaryTypeName","src":"5058:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1054,"mutability":"mutable","name":"feeBurner","nameLocation":"5103:9:16","nodeType":"VariableDeclaration","scope":1057,"src":"5084:28:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":1053,"nodeType":"UserDefinedTypeName","pathNode":{"id":1052,"name":"IProtocolFeeBurner","nameLocations":["5084:18:16"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"5084:18:16"},"referencedDeclaration":948,"src":"5084:18:16","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"4960:158:16"},"returnParameters":{"id":1056,"nodeType":"ParameterList","parameters":[],"src":"5127:0:16"},"scope":1137,"src":"4926:202:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1058,"nodeType":"StructuredDocumentation","src":"5134:501:16","text":" @notice The same as `sweepProtocolFeesForToken`, but for wrapped tokens.\n @param pool The pool that incurred the fees we're withdrawing\n @param feeToken The fee token in the pool\n @param minTargetTokenAmountOut The minimum number of target tokens to be received\n @param deadline Deadline for the burn operation (swap), after which it will revert\n @param feeBurner The protocol fee burner to be used (or the zero address to fall back on direct transfer)"},"functionSelector":"88f6d2a4","id":1073,"implemented":false,"kind":"function","modifiers":[],"name":"sweepProtocolFeesForWrappedToken","nameLocation":"5649:32:16","nodeType":"FunctionDefinition","parameters":{"id":1071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1060,"mutability":"mutable","name":"pool","nameLocation":"5699:4:16","nodeType":"VariableDeclaration","scope":1073,"src":"5691:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1059,"name":"address","nodeType":"ElementaryTypeName","src":"5691:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1063,"mutability":"mutable","name":"feeToken","nameLocation":"5722:8:16","nodeType":"VariableDeclaration","scope":1073,"src":"5713:17:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":1062,"nodeType":"UserDefinedTypeName","pathNode":{"id":1061,"name":"IERC4626","nameLocations":["5713:8:16"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"5713:8:16"},"referencedDeclaration":9846,"src":"5713:8:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1065,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"5748:23:16","nodeType":"VariableDeclaration","scope":1073,"src":"5740:31:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1064,"name":"uint256","nodeType":"ElementaryTypeName","src":"5740:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1067,"mutability":"mutable","name":"deadline","nameLocation":"5789:8:16","nodeType":"VariableDeclaration","scope":1073,"src":"5781:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1066,"name":"uint256","nodeType":"ElementaryTypeName","src":"5781:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1070,"mutability":"mutable","name":"feeBurner","nameLocation":"5826:9:16","nodeType":"VariableDeclaration","scope":1073,"src":"5807:28:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":1069,"nodeType":"UserDefinedTypeName","pathNode":{"id":1068,"name":"IProtocolFeeBurner","nameLocations":["5807:18:16"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"5807:18:16"},"referencedDeclaration":948,"src":"5807:18:16","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"5681:160:16"},"returnParameters":{"id":1072,"nodeType":"ParameterList","parameters":[],"src":"5850:0:16"},"scope":1137,"src":"5640:211:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1074,"nodeType":"StructuredDocumentation","src":"5857:269:16","text":" @notice Return the address of the current `ProtocolFeeController` from the Vault.\n @dev It is not immutable in the Vault, so we need to fetch it every time.\n @return protocolFeeController The address of the current `ProtocolFeeController`"},"functionSelector":"85f2dbd4","id":1080,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"6140:24:16","nodeType":"FunctionDefinition","parameters":{"id":1075,"nodeType":"ParameterList","parameters":[],"src":"6164:2:16"},"returnParameters":{"id":1079,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1078,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1080,"src":"6190:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":1077,"nodeType":"UserDefinedTypeName","pathNode":{"id":1076,"name":"IProtocolFeeController","nameLocations":["6190:22:16"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"6190:22:16"},"referencedDeclaration":1955,"src":"6190:22:16","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"6189:24:16"},"scope":1137,"src":"6131:83:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1081,"nodeType":"StructuredDocumentation","src":"6220:214:16","text":" @notice Getter for the target token.\n @dev This is the token the burner will swap all fee tokens for. Can be changed by `setTargetToken`.\n @return targetToken The current target token"},"functionSelector":"80db0d51","id":1087,"implemented":false,"kind":"function","modifiers":[],"name":"getTargetToken","nameLocation":"6448:14:16","nodeType":"FunctionDefinition","parameters":{"id":1082,"nodeType":"ParameterList","parameters":[],"src":"6462:2:16"},"returnParameters":{"id":1086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1085,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1087,"src":"6488:6:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1084,"nodeType":"UserDefinedTypeName","pathNode":{"id":1083,"name":"IERC20","nameLocations":["6488:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6488:6:16"},"referencedDeclaration":10576,"src":"6488:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6487:8:16"},"scope":1137,"src":"6439:57:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1088,"nodeType":"StructuredDocumentation","src":"6502:167:16","text":" @notice Getter for the current fee recipient.\n @dev Can be changed by `setFeeRecipient`.\n @return feeRecipient The current fee recipient"},"functionSelector":"4ccb20c0","id":1093,"implemented":false,"kind":"function","modifiers":[],"name":"getFeeRecipient","nameLocation":"6683:15:16","nodeType":"FunctionDefinition","parameters":{"id":1089,"nodeType":"ParameterList","parameters":[],"src":"6698:2:16"},"returnParameters":{"id":1092,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1091,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1093,"src":"6724:7:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1090,"name":"address","nodeType":"ElementaryTypeName","src":"6724:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6723:9:16"},"scope":1137,"src":"6674:59:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1094,"nodeType":"StructuredDocumentation","src":"6739:263:16","text":" @notice Check whether a given address corresponds to an approved protocol fee burner.\n @param protocolFeeBurner The address to be checked\n @return isApproved True if the given address is on the approved protocol fee burner allowlist"},"functionSelector":"9c5cee9b","id":1101,"implemented":false,"kind":"function","modifiers":[],"name":"isApprovedProtocolFeeBurner","nameLocation":"7016:27:16","nodeType":"FunctionDefinition","parameters":{"id":1097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1096,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"7052:17:16","nodeType":"VariableDeclaration","scope":1101,"src":"7044:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1095,"name":"address","nodeType":"ElementaryTypeName","src":"7044:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7043:27:16"},"returnParameters":{"id":1100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1099,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1101,"src":"7094:4:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1098,"name":"bool","nodeType":"ElementaryTypeName","src":"7094:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7093:6:16"},"scope":1137,"src":"7007:93:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1102,"nodeType":"StructuredDocumentation","src":"7106:169:16","text":" @notice Update the fee recipient address.\n @dev This is a permissioned function.\n @param feeRecipient The address of the new fee recipient"},"functionSelector":"e74b981b","id":1107,"implemented":false,"kind":"function","modifiers":[],"name":"setFeeRecipient","nameLocation":"7289:15:16","nodeType":"FunctionDefinition","parameters":{"id":1105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1104,"mutability":"mutable","name":"feeRecipient","nameLocation":"7313:12:16","nodeType":"VariableDeclaration","scope":1107,"src":"7305:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1103,"name":"address","nodeType":"ElementaryTypeName","src":"7305:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7304:22:16"},"returnParameters":{"id":1106,"nodeType":"ParameterList","parameters":[],"src":"7335:0:16"},"scope":1137,"src":"7280:56:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1108,"nodeType":"StructuredDocumentation","src":"7342:222:16","text":" @notice Update the address of the target token.\n @dev This is the token for which the burner will attempt to swap all collected fee tokens.\n @param targetToken The address of the target token"},"functionSelector":"1b66cb00","id":1114,"implemented":false,"kind":"function","modifiers":[],"name":"setTargetToken","nameLocation":"7578:14:16","nodeType":"FunctionDefinition","parameters":{"id":1112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1111,"mutability":"mutable","name":"targetToken","nameLocation":"7600:11:16","nodeType":"VariableDeclaration","scope":1114,"src":"7593:18:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1110,"nodeType":"UserDefinedTypeName","pathNode":{"id":1109,"name":"IERC20","nameLocations":["7593:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"7593:6:16"},"referencedDeclaration":10576,"src":"7593:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"7592:20:16"},"returnParameters":{"id":1113,"nodeType":"ParameterList","parameters":[],"src":"7621:0:16"},"scope":1137,"src":"7569:53:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1115,"nodeType":"StructuredDocumentation","src":"7628:300:16","text":" @notice Add an approved fee burner to the allowlist.\n @dev This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol\n fee burners.\n @param protocolFeeBurner The address of an approved protocol fee burner to be added"},"functionSelector":"e20c482f","id":1121,"implemented":false,"kind":"function","modifiers":[],"name":"addProtocolFeeBurner","nameLocation":"7942:20:16","nodeType":"FunctionDefinition","parameters":{"id":1119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1118,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"7982:17:16","nodeType":"VariableDeclaration","scope":1121,"src":"7963:36:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":1117,"nodeType":"UserDefinedTypeName","pathNode":{"id":1116,"name":"IProtocolFeeBurner","nameLocations":["7963:18:16"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"7963:18:16"},"referencedDeclaration":948,"src":"7963:18:16","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"7962:38:16"},"returnParameters":{"id":1120,"nodeType":"ParameterList","parameters":[],"src":"8009:0:16"},"scope":1137,"src":"7933:77:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1122,"nodeType":"StructuredDocumentation","src":"8016:304:16","text":" @notice Remove a fee burner from the allowlist.\n @dev This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol\n fee burners.\n @param protocolFeeBurner The address of a protocol fee burner on the allowlist to be removed"},"functionSelector":"b11f061e","id":1128,"implemented":false,"kind":"function","modifiers":[],"name":"removeProtocolFeeBurner","nameLocation":"8334:23:16","nodeType":"FunctionDefinition","parameters":{"id":1126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1125,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"8377:17:16","nodeType":"VariableDeclaration","scope":1128,"src":"8358:36:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":1124,"nodeType":"UserDefinedTypeName","pathNode":{"id":1123,"name":"IProtocolFeeBurner","nameLocations":["8358:18:16"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"8358:18:16"},"referencedDeclaration":948,"src":"8358:18:16","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"8357:38:16"},"returnParameters":{"id":1127,"nodeType":"ParameterList","parameters":[],"src":"8404:0:16"},"scope":1137,"src":"8325:80:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1129,"nodeType":"StructuredDocumentation","src":"8411:265:16","text":" @notice Retrieve any tokens \"stuck\" in this contract (e.g., dust, or failed conversions).\n @dev It will recover the full balance of all the tokens. This can only be called by the `feeRecipient`.\n @param feeTokens The tokens to recover"},"functionSelector":"b0edcc53","id":1136,"implemented":false,"kind":"function","modifiers":[],"name":"recoverProtocolFees","nameLocation":"8690:19:16","nodeType":"FunctionDefinition","parameters":{"id":1134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1133,"mutability":"mutable","name":"feeTokens","nameLocation":"8726:9:16","nodeType":"VariableDeclaration","scope":1136,"src":"8710:25:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1131,"nodeType":"UserDefinedTypeName","pathNode":{"id":1130,"name":"IERC20","nameLocations":["8710:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"8710:6:16"},"referencedDeclaration":10576,"src":"8710:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":1132,"nodeType":"ArrayTypeName","src":"8710:8:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"8709:27:16"},"returnParameters":{"id":1135,"nodeType":"ParameterList","parameters":[],"src":"8745:0:16"},"scope":1137,"src":"8681:65:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1138,"src":"364:8384:16","usedErrors":[1014,1017,1020,1025,1030,1035,1038,1041],"usedEvents":[984,989,1001,1006,1011]}],"src":"46:8703:16"},"id":16},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol","exportedSymbols":{"ITokenPairRegistry":[1263],"SwapPathStep":[1275]},"id":1264,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol","file":"../vault/BatchRouterTypes.sol","id":1140,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1264,"sourceUnit":1326,"src":"46:61:17","symbolAliases":[{"foreign":{"id":1139,"name":"SwapPathStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1275,"src":"55:12:17","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":1141,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"109:24:17"},{"abstract":false,"baseContracts":[],"canonicalName":"ITokenPairRegistry","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":1263,"linearizedBaseContracts":[1263],"name":"ITokenPairRegistry","nameLocation":"145:18:17","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1142,"nodeType":"StructuredDocumentation","src":"170:285:17","text":" @notice Emitted when a new token pair is added to the registry.\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair\n @param pathsLength The number of paths added for the token pair"},"eventSelector":"0836045dc838da47be101a8d10036b82ec004688d856daa53cd0e56807d3bfca","id":1150,"name":"PathAdded","nameLocation":"466:9:17","nodeType":"EventDefinition","parameters":{"id":1149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1144,"indexed":true,"mutability":"mutable","name":"tokenIn","nameLocation":"492:7:17","nodeType":"VariableDeclaration","scope":1150,"src":"476:23:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1143,"name":"address","nodeType":"ElementaryTypeName","src":"476:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1146,"indexed":true,"mutability":"mutable","name":"tokenOut","nameLocation":"517:8:17","nodeType":"VariableDeclaration","scope":1150,"src":"501:24:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1145,"name":"address","nodeType":"ElementaryTypeName","src":"501:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1148,"indexed":false,"mutability":"mutable","name":"pathsLength","nameLocation":"535:11:17","nodeType":"VariableDeclaration","scope":1150,"src":"527:19:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1147,"name":"uint256","nodeType":"ElementaryTypeName","src":"527:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"475:72:17"},"src":"460:88:17"},{"anonymous":false,"documentation":{"id":1151,"nodeType":"StructuredDocumentation","src":"554:319:17","text":" @notice Emitted when an existing token pair is removed from the registry.\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair\n @param pathsLength The number of paths associated with the token pair after the removal"},"eventSelector":"a38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da","id":1159,"name":"PathRemoved","nameLocation":"884:11:17","nodeType":"EventDefinition","parameters":{"id":1158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1153,"indexed":true,"mutability":"mutable","name":"tokenIn","nameLocation":"912:7:17","nodeType":"VariableDeclaration","scope":1159,"src":"896:23:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1152,"name":"address","nodeType":"ElementaryTypeName","src":"896:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1155,"indexed":true,"mutability":"mutable","name":"tokenOut","nameLocation":"937:8:17","nodeType":"VariableDeclaration","scope":1159,"src":"921:24:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1154,"name":"address","nodeType":"ElementaryTypeName","src":"921:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1157,"indexed":false,"mutability":"mutable","name":"pathsLength","nameLocation":"955:11:17","nodeType":"VariableDeclaration","scope":1159,"src":"947:19:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1156,"name":"uint256","nodeType":"ElementaryTypeName","src":"947:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"895:72:17"},"src":"878:90:17"},{"documentation":{"id":1160,"nodeType":"StructuredDocumentation","src":"974:158:17","text":" @notice The given buffer address does not correspond to an initialized buffer.\n @param buffer The address of the uninitialized buffer"},"errorSelector":"85f41299","id":1164,"name":"BufferNotInitialized","nameLocation":"1143:20:17","nodeType":"ErrorDefinition","parameters":{"id":1163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1162,"mutability":"mutable","name":"buffer","nameLocation":"1172:6:17","nodeType":"VariableDeclaration","scope":1164,"src":"1164:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1161,"name":"address","nodeType":"ElementaryTypeName","src":"1164:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1163:16:17"},"src":"1137:43:17"},{"documentation":{"id":1165,"nodeType":"StructuredDocumentation","src":"1186:44:17","text":"@notice The path to add cannot be empty."},"errorSelector":"20a2d33d","id":1167,"name":"EmptyPath","nameLocation":"1241:9:17","nodeType":"ErrorDefinition","parameters":{"id":1166,"nodeType":"ParameterList","parameters":[],"src":"1250:2:17"},"src":"1235:18:17"},{"documentation":{"id":1168,"nodeType":"StructuredDocumentation","src":"1259:117:17","text":" @notice The given address is not a valid pool or buffer.\n @param path Pool or buffer address"},"errorSelector":"b309199b","id":1172,"name":"InvalidSimplePath","nameLocation":"1387:17:17","nodeType":"ErrorDefinition","parameters":{"id":1171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1170,"mutability":"mutable","name":"path","nameLocation":"1413:4:17","nodeType":"VariableDeclaration","scope":1172,"src":"1405:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1169,"name":"address","nodeType":"ElementaryTypeName","src":"1405:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1404:14:17"},"src":"1381:38:17"},{"documentation":{"id":1173,"nodeType":"StructuredDocumentation","src":"1425:292:17","text":" @notice The given pool or buffer is not registered as a path for the token pair.\n @param poolOrBuffer The address of the pool or buffer\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair"},"errorSelector":"3a9458d9","id":1181,"name":"InvalidRemovePath","nameLocation":"1728:17:17","nodeType":"ErrorDefinition","parameters":{"id":1180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1175,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"1754:12:17","nodeType":"VariableDeclaration","scope":1181,"src":"1746:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1174,"name":"address","nodeType":"ElementaryTypeName","src":"1746:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1177,"mutability":"mutable","name":"tokenIn","nameLocation":"1776:7:17","nodeType":"VariableDeclaration","scope":1181,"src":"1768:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1176,"name":"address","nodeType":"ElementaryTypeName","src":"1768:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1179,"mutability":"mutable","name":"tokenOut","nameLocation":"1793:8:17","nodeType":"VariableDeclaration","scope":1181,"src":"1785:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1178,"name":"address","nodeType":"ElementaryTypeName","src":"1785:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1745:57:17"},"src":"1722:81:17"},{"documentation":{"id":1182,"nodeType":"StructuredDocumentation","src":"1809:289:17","text":" @notice The output token does not match the expected address in a wrap or unwrap operation.\n @param buffer The address of the buffer\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair"},"errorSelector":"29198c3d","id":1190,"name":"InvalidBufferPath","nameLocation":"2109:17:17","nodeType":"ErrorDefinition","parameters":{"id":1189,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1184,"mutability":"mutable","name":"buffer","nameLocation":"2135:6:17","nodeType":"VariableDeclaration","scope":1190,"src":"2127:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1183,"name":"address","nodeType":"ElementaryTypeName","src":"2127:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1186,"mutability":"mutable","name":"tokenIn","nameLocation":"2151:7:17","nodeType":"VariableDeclaration","scope":1190,"src":"2143:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1185,"name":"address","nodeType":"ElementaryTypeName","src":"2143:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1188,"mutability":"mutable","name":"tokenOut","nameLocation":"2168:8:17","nodeType":"VariableDeclaration","scope":1190,"src":"2160:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1187,"name":"address","nodeType":"ElementaryTypeName","src":"2160:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2126:51:17"},"src":"2103:75:17"},{"documentation":{"id":1191,"nodeType":"StructuredDocumentation","src":"2184:80:17","text":"@notice Attempted to remove a path at an index beyond the registered length."},"errorSelector":"4e23d035","id":1193,"name":"IndexOutOfBounds","nameLocation":"2275:16:17","nodeType":"ErrorDefinition","parameters":{"id":1192,"nodeType":"ParameterList","parameters":[],"src":"2291:2:17"},"src":"2269:25:17"},{"documentation":{"id":1194,"nodeType":"StructuredDocumentation","src":"2300:432:17","text":" @notice Returns the path for a given token pair at a specific index.\n @dev Safe version; reverts if the index is out of bounds.\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair\n @param index The index of the path in the list of paths for the token pair\n @return The path at the specified index for the token pair"},"functionSelector":"057074ff","id":1207,"implemented":false,"kind":"function","modifiers":[],"name":"getPathAt","nameLocation":"2746:9:17","nodeType":"FunctionDefinition","parameters":{"id":1201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1196,"mutability":"mutable","name":"tokenIn","nameLocation":"2764:7:17","nodeType":"VariableDeclaration","scope":1207,"src":"2756:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1195,"name":"address","nodeType":"ElementaryTypeName","src":"2756:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1198,"mutability":"mutable","name":"tokenOut","nameLocation":"2781:8:17","nodeType":"VariableDeclaration","scope":1207,"src":"2773:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1197,"name":"address","nodeType":"ElementaryTypeName","src":"2773:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1200,"mutability":"mutable","name":"index","nameLocation":"2799:5:17","nodeType":"VariableDeclaration","scope":1207,"src":"2791:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1199,"name":"uint256","nodeType":"ElementaryTypeName","src":"2791:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2755:50:17"},"returnParameters":{"id":1206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1205,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1207,"src":"2829:21:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":1203,"nodeType":"UserDefinedTypeName","pathNode":{"id":1202,"name":"SwapPathStep","nameLocations":["2829:12:17"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"2829:12:17"},"referencedDeclaration":1275,"src":"2829:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":1204,"nodeType":"ArrayTypeName","src":"2829:14:17","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"}],"src":"2828:23:17"},"scope":1263,"src":"2737:115:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1208,"nodeType":"StructuredDocumentation","src":"2858:286:17","text":" @notice Returns the number of paths registered for a given token pair.\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair\n @return The number of paths registered for the token pair"},"functionSelector":"94ee0a3b","id":1217,"implemented":false,"kind":"function","modifiers":[],"name":"getPathCount","nameLocation":"3158:12:17","nodeType":"FunctionDefinition","parameters":{"id":1213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1210,"mutability":"mutable","name":"tokenIn","nameLocation":"3179:7:17","nodeType":"VariableDeclaration","scope":1217,"src":"3171:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1209,"name":"address","nodeType":"ElementaryTypeName","src":"3171:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1212,"mutability":"mutable","name":"tokenOut","nameLocation":"3196:8:17","nodeType":"VariableDeclaration","scope":1217,"src":"3188:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1211,"name":"address","nodeType":"ElementaryTypeName","src":"3188:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3170:35:17"},"returnParameters":{"id":1216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1215,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1217,"src":"3229:7:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1214,"name":"uint256","nodeType":"ElementaryTypeName","src":"3229:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3228:9:17"},"scope":1263,"src":"3149:89:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1218,"nodeType":"StructuredDocumentation","src":"3244:283:17","text":" @notice Returns the paths registered for a given token pair.\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair\n @return An array of path addresses registered for the token pair"},"functionSelector":"7c7d370a","id":1230,"implemented":false,"kind":"function","modifiers":[],"name":"getPaths","nameLocation":"3541:8:17","nodeType":"FunctionDefinition","parameters":{"id":1223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1220,"mutability":"mutable","name":"tokenIn","nameLocation":"3558:7:17","nodeType":"VariableDeclaration","scope":1230,"src":"3550:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1219,"name":"address","nodeType":"ElementaryTypeName","src":"3550:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1222,"mutability":"mutable","name":"tokenOut","nameLocation":"3575:8:17","nodeType":"VariableDeclaration","scope":1230,"src":"3567:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1221,"name":"address","nodeType":"ElementaryTypeName","src":"3567:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3549:35:17"},"returnParameters":{"id":1229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1228,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1230,"src":"3608:23:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep[][]"},"typeName":{"baseType":{"baseType":{"id":1225,"nodeType":"UserDefinedTypeName","pathNode":{"id":1224,"name":"SwapPathStep","nameLocations":["3608:12:17"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"3608:12:17"},"referencedDeclaration":1275,"src":"3608:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":1226,"nodeType":"ArrayTypeName","src":"3608:14:17","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":1227,"nodeType":"ArrayTypeName","src":"3608:16:17","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}},"visibility":"internal"}],"src":"3607:25:17"},"scope":1263,"src":"3532:101:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1231,"nodeType":"StructuredDocumentation","src":"3639:606:17","text":" @notice Adds an arbitrary path between `tokenIn` and the last step's `tokenOut` to the registry.\n @dev This function is permissioned. Use it to register boosted pool paths with leading / trailing buffer steps.\n The registry will validate that each step is valid (i.e. each pool step contains the `tokenIn` and `tokenOut`,\n and each buffer step has the correct wrapped / underlying token).\n @param tokenIn The address of the input token in the pair\n @param steps An array of `SwapPathStep` structs representing the path steps to reach the output token"},"functionSelector":"815ca70f","id":1240,"implemented":false,"kind":"function","modifiers":[],"name":"addPath","nameLocation":"4259:7:17","nodeType":"FunctionDefinition","parameters":{"id":1238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1233,"mutability":"mutable","name":"tokenIn","nameLocation":"4275:7:17","nodeType":"VariableDeclaration","scope":1240,"src":"4267:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1232,"name":"address","nodeType":"ElementaryTypeName","src":"4267:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1237,"mutability":"mutable","name":"steps","nameLocation":"4306:5:17","nodeType":"VariableDeclaration","scope":1240,"src":"4284:27:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":1235,"nodeType":"UserDefinedTypeName","pathNode":{"id":1234,"name":"SwapPathStep","nameLocations":["4284:12:17"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"4284:12:17"},"referencedDeclaration":1275,"src":"4284:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":1236,"nodeType":"ArrayTypeName","src":"4284:14:17","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"}],"src":"4266:46:17"},"returnParameters":{"id":1239,"nodeType":"ParameterList","parameters":[],"src":"4321:0:17"},"scope":1263,"src":"4250:72:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1241,"nodeType":"StructuredDocumentation","src":"4328:202:17","text":" @notice Adds a pool or buffer to the registry with all token pairs it supports.\n @dev This function is permissioned.\n @param poolOrBuffer The address of the pool or buffer"},"functionSelector":"f335b520","id":1246,"implemented":false,"kind":"function","modifiers":[],"name":"addSimplePath","nameLocation":"4544:13:17","nodeType":"FunctionDefinition","parameters":{"id":1244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1243,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"4566:12:17","nodeType":"VariableDeclaration","scope":1246,"src":"4558:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1242,"name":"address","nodeType":"ElementaryTypeName","src":"4558:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4557:22:17"},"returnParameters":{"id":1245,"nodeType":"ParameterList","parameters":[],"src":"4588:0:17"},"scope":1263,"src":"4535:54:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1247,"nodeType":"StructuredDocumentation","src":"4595:355:17","text":" @notice Removes an arbitrary path from the registry at a given index.\n @dev This function is permissioned.\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair\n @param index The index of the path to remove in the list of paths for the token pair"},"functionSelector":"32fffdbd","id":1256,"implemented":false,"kind":"function","modifiers":[],"name":"removePathAtIndex","nameLocation":"4964:17:17","nodeType":"FunctionDefinition","parameters":{"id":1254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1249,"mutability":"mutable","name":"tokenIn","nameLocation":"4990:7:17","nodeType":"VariableDeclaration","scope":1256,"src":"4982:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1248,"name":"address","nodeType":"ElementaryTypeName","src":"4982:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1251,"mutability":"mutable","name":"tokenOut","nameLocation":"5007:8:17","nodeType":"VariableDeclaration","scope":1256,"src":"4999:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1250,"name":"address","nodeType":"ElementaryTypeName","src":"4999:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1253,"mutability":"mutable","name":"index","nameLocation":"5025:5:17","nodeType":"VariableDeclaration","scope":1256,"src":"5017:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1252,"name":"uint256","nodeType":"ElementaryTypeName","src":"5017:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4981:50:17"},"returnParameters":{"id":1255,"nodeType":"ParameterList","parameters":[],"src":"5040:0:17"},"scope":1263,"src":"4955:86:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1257,"nodeType":"StructuredDocumentation","src":"5047:193:17","text":" @notice Removes all token paths registered for a given pool or buffer.\n @dev This function is permissioned.\n @param poolOrBuffer The address of the pool or buffer"},"functionSelector":"bc138aa3","id":1262,"implemented":false,"kind":"function","modifiers":[],"name":"removeSimplePath","nameLocation":"5254:16:17","nodeType":"FunctionDefinition","parameters":{"id":1260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1259,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"5279:12:17","nodeType":"VariableDeclaration","scope":1262,"src":"5271:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1258,"name":"address","nodeType":"ElementaryTypeName","src":"5271:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5270:22:17"},"returnParameters":{"id":1261,"nodeType":"ParameterList","parameters":[],"src":"5301:0:17"},"scope":1263,"src":"5245:57:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1264,"src":"135:5169:17","usedErrors":[1164,1167,1172,1181,1190,1193],"usedEvents":[1150,1159]}],"src":"46:5259:17"},"id":17},"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol","exportedSymbols":{"IERC20":[10576],"SwapExactInHookParams":[1312],"SwapExactOutHookParams":[1325],"SwapPathExactAmountIn":[1287],"SwapPathExactAmountOut":[1299],"SwapPathStep":[1275]},"id":1326,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1265,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:18"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1267,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1326,"sourceUnit":10577,"src":"72:72:18","symbolAliases":[{"foreign":{"id":1266,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"SwapPathStep","id":1275,"members":[{"constant":false,"id":1269,"mutability":"mutable","name":"pool","nameLocation":"180:4:18","nodeType":"VariableDeclaration","scope":1275,"src":"172:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1268,"name":"address","nodeType":"ElementaryTypeName","src":"172:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1272,"mutability":"mutable","name":"tokenOut","nameLocation":"197:8:18","nodeType":"VariableDeclaration","scope":1275,"src":"190:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1271,"nodeType":"UserDefinedTypeName","pathNode":{"id":1270,"name":"IERC20","nameLocations":["190:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"190:6:18"},"referencedDeclaration":10576,"src":"190:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1274,"mutability":"mutable","name":"isBuffer","nameLocation":"331:8:18","nodeType":"VariableDeclaration","scope":1275,"src":"326:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1273,"name":"bool","nodeType":"ElementaryTypeName","src":"326:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"SwapPathStep","nameLocation":"153:12:18","nodeType":"StructDefinition","scope":1326,"src":"146:196:18","visibility":"public"},{"canonicalName":"SwapPathExactAmountIn","id":1287,"members":[{"constant":false,"id":1278,"mutability":"mutable","name":"tokenIn","nameLocation":"386:7:18","nodeType":"VariableDeclaration","scope":1287,"src":"379:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1277,"nodeType":"UserDefinedTypeName","pathNode":{"id":1276,"name":"IERC20","nameLocations":["379:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"379:6:18"},"referencedDeclaration":10576,"src":"379:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1282,"mutability":"mutable","name":"steps","nameLocation":"563:5:18","nodeType":"VariableDeclaration","scope":1287,"src":"548:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":1280,"nodeType":"UserDefinedTypeName","pathNode":{"id":1279,"name":"SwapPathStep","nameLocations":["548:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"548:12:18"},"referencedDeclaration":1275,"src":"548:12:18","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":1281,"nodeType":"ArrayTypeName","src":"548:14:18","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"},{"constant":false,"id":1284,"mutability":"mutable","name":"exactAmountIn","nameLocation":"582:13:18","nodeType":"VariableDeclaration","scope":1287,"src":"574:21:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1283,"name":"uint256","nodeType":"ElementaryTypeName","src":"574:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1286,"mutability":"mutable","name":"minAmountOut","nameLocation":"609:12:18","nodeType":"VariableDeclaration","scope":1287,"src":"601:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1285,"name":"uint256","nodeType":"ElementaryTypeName","src":"601:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapPathExactAmountIn","nameLocation":"351:21:18","nodeType":"StructDefinition","scope":1326,"src":"344:280:18","visibility":"public"},{"canonicalName":"SwapPathExactAmountOut","id":1299,"members":[{"constant":false,"id":1290,"mutability":"mutable","name":"tokenIn","nameLocation":"669:7:18","nodeType":"VariableDeclaration","scope":1299,"src":"662:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1289,"nodeType":"UserDefinedTypeName","pathNode":{"id":1288,"name":"IERC20","nameLocations":["662:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"662:6:18"},"referencedDeclaration":10576,"src":"662:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1294,"mutability":"mutable","name":"steps","nameLocation":"859:5:18","nodeType":"VariableDeclaration","scope":1299,"src":"844:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":1292,"nodeType":"UserDefinedTypeName","pathNode":{"id":1291,"name":"SwapPathStep","nameLocations":["844:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"844:12:18"},"referencedDeclaration":1275,"src":"844:12:18","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":1293,"nodeType":"ArrayTypeName","src":"844:14:18","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"},{"constant":false,"id":1296,"mutability":"mutable","name":"maxAmountIn","nameLocation":"878:11:18","nodeType":"VariableDeclaration","scope":1299,"src":"870:19:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1295,"name":"uint256","nodeType":"ElementaryTypeName","src":"870:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1298,"mutability":"mutable","name":"exactAmountOut","nameLocation":"903:14:18","nodeType":"VariableDeclaration","scope":1299,"src":"895:22:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1297,"name":"uint256","nodeType":"ElementaryTypeName","src":"895:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapPathExactAmountOut","nameLocation":"633:22:18","nodeType":"StructDefinition","scope":1326,"src":"626:294:18","visibility":"public"},{"canonicalName":"SwapExactInHookParams","id":1312,"members":[{"constant":false,"id":1301,"mutability":"mutable","name":"sender","nameLocation":"965:6:18","nodeType":"VariableDeclaration","scope":1312,"src":"957:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1300,"name":"address","nodeType":"ElementaryTypeName","src":"957:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1305,"mutability":"mutable","name":"paths","nameLocation":"1001:5:18","nodeType":"VariableDeclaration","scope":1312,"src":"977:29:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1287_storage_$dyn_storage_ptr","typeString":"struct SwapPathExactAmountIn[]"},"typeName":{"baseType":{"id":1303,"nodeType":"UserDefinedTypeName","pathNode":{"id":1302,"name":"SwapPathExactAmountIn","nameLocations":["977:21:18"],"nodeType":"IdentifierPath","referencedDeclaration":1287,"src":"977:21:18"},"referencedDeclaration":1287,"src":"977:21:18","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountIn_$1287_storage_ptr","typeString":"struct SwapPathExactAmountIn"}},"id":1304,"nodeType":"ArrayTypeName","src":"977:23:18","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1287_storage_$dyn_storage_ptr","typeString":"struct SwapPathExactAmountIn[]"}},"visibility":"internal"},{"constant":false,"id":1307,"mutability":"mutable","name":"deadline","nameLocation":"1020:8:18","nodeType":"VariableDeclaration","scope":1312,"src":"1012:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1306,"name":"uint256","nodeType":"ElementaryTypeName","src":"1012:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1309,"mutability":"mutable","name":"wethIsEth","nameLocation":"1039:9:18","nodeType":"VariableDeclaration","scope":1312,"src":"1034:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1308,"name":"bool","nodeType":"ElementaryTypeName","src":"1034:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1311,"mutability":"mutable","name":"userData","nameLocation":"1060:8:18","nodeType":"VariableDeclaration","scope":1312,"src":"1054:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":1310,"name":"bytes","nodeType":"ElementaryTypeName","src":"1054:5:18","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"SwapExactInHookParams","nameLocation":"929:21:18","nodeType":"StructDefinition","scope":1326,"src":"922:149:18","visibility":"public"},{"canonicalName":"SwapExactOutHookParams","id":1325,"members":[{"constant":false,"id":1314,"mutability":"mutable","name":"sender","nameLocation":"1117:6:18","nodeType":"VariableDeclaration","scope":1325,"src":"1109:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1313,"name":"address","nodeType":"ElementaryTypeName","src":"1109:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1318,"mutability":"mutable","name":"paths","nameLocation":"1154:5:18","nodeType":"VariableDeclaration","scope":1325,"src":"1129:30:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1299_storage_$dyn_storage_ptr","typeString":"struct SwapPathExactAmountOut[]"},"typeName":{"baseType":{"id":1316,"nodeType":"UserDefinedTypeName","pathNode":{"id":1315,"name":"SwapPathExactAmountOut","nameLocations":["1129:22:18"],"nodeType":"IdentifierPath","referencedDeclaration":1299,"src":"1129:22:18"},"referencedDeclaration":1299,"src":"1129:22:18","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1299_storage_ptr","typeString":"struct SwapPathExactAmountOut"}},"id":1317,"nodeType":"ArrayTypeName","src":"1129:24:18","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1299_storage_$dyn_storage_ptr","typeString":"struct SwapPathExactAmountOut[]"}},"visibility":"internal"},{"constant":false,"id":1320,"mutability":"mutable","name":"deadline","nameLocation":"1173:8:18","nodeType":"VariableDeclaration","scope":1325,"src":"1165:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1319,"name":"uint256","nodeType":"ElementaryTypeName","src":"1165:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1322,"mutability":"mutable","name":"wethIsEth","nameLocation":"1192:9:18","nodeType":"VariableDeclaration","scope":1325,"src":"1187:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1321,"name":"bool","nodeType":"ElementaryTypeName","src":"1187:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1324,"mutability":"mutable","name":"userData","nameLocation":"1213:8:18","nodeType":"VariableDeclaration","scope":1325,"src":"1207:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":1323,"name":"bytes","nodeType":"ElementaryTypeName","src":"1207:5:18","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"SwapExactOutHookParams","nameLocation":"1080:22:18","nodeType":"StructDefinition","scope":1326,"src":"1073:151:18","visibility":"public"}],"src":"46:1179:18"},"id":18},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","exportedSymbols":{"IAuthorizer":[1341]},"id":1342,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1327,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:19"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthorizer","contractDependencies":[],"contractKind":"interface","documentation":{"id":1328,"nodeType":"StructuredDocumentation","src":"72:56:19","text":"@notice Interface to the Vault's permission system."},"fullyImplemented":false,"id":1341,"linearizedBaseContracts":[1341],"name":"IAuthorizer","nameLocation":"138:11:19","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1329,"nodeType":"StructuredDocumentation","src":"156:354:19","text":" @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n @param actionId Identifier for the action to be performed\n @param account Account trying to perform the action\n @param where Target contract for the action\n @return success True if the action is permitted"},"functionSelector":"9be2a884","id":1340,"implemented":false,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"524:10:19","nodeType":"FunctionDefinition","parameters":{"id":1336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1331,"mutability":"mutable","name":"actionId","nameLocation":"543:8:19","nodeType":"VariableDeclaration","scope":1340,"src":"535:16:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1330,"name":"bytes32","nodeType":"ElementaryTypeName","src":"535:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1333,"mutability":"mutable","name":"account","nameLocation":"561:7:19","nodeType":"VariableDeclaration","scope":1340,"src":"553:15:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1332,"name":"address","nodeType":"ElementaryTypeName","src":"553:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1335,"mutability":"mutable","name":"where","nameLocation":"578:5:19","nodeType":"VariableDeclaration","scope":1340,"src":"570:13:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1334,"name":"address","nodeType":"ElementaryTypeName","src":"570:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"534:50:19"},"returnParameters":{"id":1339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1338,"mutability":"mutable","name":"success","nameLocation":"613:7:19","nodeType":"VariableDeclaration","scope":1340,"src":"608:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1337,"name":"bool","nodeType":"ElementaryTypeName","src":"608:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"607:14:19"},"scope":1341,"src":"515:107:19","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1342,"src":"128:496:19","usedErrors":[],"usedEvents":[]}],"src":"46:579:19"},"id":19},"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","exportedSymbols":{"IAuthentication":[14],"IBasePoolFactory":[1415]},"id":1416,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1343,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:20"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"../solidity-utils/helpers/IAuthentication.sol","id":1345,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1416,"sourceUnit":15,"src":"72:80:20","symbolAliases":[{"foreign":{"id":1344,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"81:15:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1347,"name":"IAuthentication","nameLocations":["454:15:20"],"nodeType":"IdentifierPath","referencedDeclaration":14,"src":"454:15:20"},"id":1348,"nodeType":"InheritanceSpecifier","src":"454:15:20"}],"canonicalName":"IBasePoolFactory","contractDependencies":[],"contractKind":"interface","documentation":{"id":1346,"nodeType":"StructuredDocumentation","src":"154:269:20","text":" @notice Base interface for a Balancer Pool Factory.\n @dev All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types\n (e.g., address prediction, tracking deployed pools, and governance-facilitated migration)."},"fullyImplemented":false,"id":1415,"linearizedBaseContracts":[1415,14],"name":"IBasePoolFactory","nameLocation":"434:16:20","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1349,"nodeType":"StructuredDocumentation","src":"476:94:20","text":" @notice A pool was deployed.\n @param pool The address of the new pool"},"eventSelector":"83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc","id":1353,"name":"PoolCreated","nameLocation":"581:11:20","nodeType":"EventDefinition","parameters":{"id":1352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1351,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"609:4:20","nodeType":"VariableDeclaration","scope":1353,"src":"593:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1350,"name":"address","nodeType":"ElementaryTypeName","src":"593:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"592:22:20"},"src":"575:40:20"},{"anonymous":false,"documentation":{"id":1354,"nodeType":"StructuredDocumentation","src":"621:51:20","text":"@notice The factory was disabled by governance."},"eventSelector":"432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d50","id":1356,"name":"FactoryDisabled","nameLocation":"683:15:20","nodeType":"EventDefinition","parameters":{"id":1355,"nodeType":"ParameterList","parameters":[],"src":"698:2:20"},"src":"677:24:20"},{"documentation":{"id":1357,"nodeType":"StructuredDocumentation","src":"707:67:20","text":"@notice Attempted pool creation after the factory was disabled."},"errorSelector":"75884cda","id":1359,"name":"Disabled","nameLocation":"785:8:20","nodeType":"ErrorDefinition","parameters":{"id":1358,"nodeType":"ParameterList","parameters":[],"src":"793:2:20"},"src":"779:17:20"},{"documentation":{"id":1360,"nodeType":"StructuredDocumentation","src":"802:67:20","text":"@notice A pool index is beyond the current bounds of the array."},"errorSelector":"4e23d035","id":1362,"name":"IndexOutOfBounds","nameLocation":"880:16:20","nodeType":"ErrorDefinition","parameters":{"id":1361,"nodeType":"ParameterList","parameters":[],"src":"896:2:20"},"src":"874:25:20"},{"documentation":{"id":1363,"nodeType":"StructuredDocumentation","src":"905:180:20","text":" @notice Check whether a pool was deployed by this factory.\n @param pool The pool to check\n @return success True if `pool` was created by this factory"},"functionSelector":"6634b753","id":1370,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolFromFactory","nameLocation":"1099:17:20","nodeType":"FunctionDefinition","parameters":{"id":1366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1365,"mutability":"mutable","name":"pool","nameLocation":"1125:4:20","nodeType":"VariableDeclaration","scope":1370,"src":"1117:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1364,"name":"address","nodeType":"ElementaryTypeName","src":"1117:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1116:14:20"},"returnParameters":{"id":1369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1368,"mutability":"mutable","name":"success","nameLocation":"1159:7:20","nodeType":"VariableDeclaration","scope":1370,"src":"1154:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1367,"name":"bool","nodeType":"ElementaryTypeName","src":"1154:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1153:14:20"},"scope":1415,"src":"1090:78:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1371,"nodeType":"StructuredDocumentation","src":"1174:245:20","text":" @notice Return the total number of pools deployed by this factory.\n @dev This can then be used to \"paginate\" calls to `getPools` to control gas costs.\n @return poolCount The number of pools deployed by this factory"},"functionSelector":"8eec5d70","id":1376,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCount","nameLocation":"1433:12:20","nodeType":"FunctionDefinition","parameters":{"id":1372,"nodeType":"ParameterList","parameters":[],"src":"1445:2:20"},"returnParameters":{"id":1375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1374,"mutability":"mutable","name":"poolCount","nameLocation":"1479:9:20","nodeType":"VariableDeclaration","scope":1376,"src":"1471:17:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1373,"name":"uint256","nodeType":"ElementaryTypeName","src":"1471:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1470:19:20"},"scope":1415,"src":"1424:66:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1377,"nodeType":"StructuredDocumentation","src":"1496:510:20","text":" @notice Return a subset of the list of pools deployed by this factory.\n @dev `start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply\n stop at the end and return fewer results than requested.\n @param start The index of the first pool to return\n @param count The maximum number of pools to return\n @return pools The list of pools deployed by this factory, starting at `start` and returning up to `count` pools"},"functionSelector":"53a72f7e","id":1387,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolsInRange","nameLocation":"2020:15:20","nodeType":"FunctionDefinition","parameters":{"id":1382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1379,"mutability":"mutable","name":"start","nameLocation":"2044:5:20","nodeType":"VariableDeclaration","scope":1387,"src":"2036:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1378,"name":"uint256","nodeType":"ElementaryTypeName","src":"2036:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1381,"mutability":"mutable","name":"count","nameLocation":"2059:5:20","nodeType":"VariableDeclaration","scope":1387,"src":"2051:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1380,"name":"uint256","nodeType":"ElementaryTypeName","src":"2051:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2035:30:20"},"returnParameters":{"id":1386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1385,"mutability":"mutable","name":"pools","nameLocation":"2106:5:20","nodeType":"VariableDeclaration","scope":1387,"src":"2089:22:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1383,"name":"address","nodeType":"ElementaryTypeName","src":"2089:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1384,"nodeType":"ArrayTypeName","src":"2089:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2088:24:20"},"scope":1415,"src":"2011:102:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1388,"nodeType":"StructuredDocumentation","src":"2119:150:20","text":" @notice Return the complete list of pools deployed by this factory.\n @return pools The list of pools deployed by this factory"},"functionSelector":"673a2a1f","id":1394,"implemented":false,"kind":"function","modifiers":[],"name":"getPools","nameLocation":"2283:8:20","nodeType":"FunctionDefinition","parameters":{"id":1389,"nodeType":"ParameterList","parameters":[],"src":"2291:2:20"},"returnParameters":{"id":1393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1392,"mutability":"mutable","name":"pools","nameLocation":"2334:5:20","nodeType":"VariableDeclaration","scope":1394,"src":"2317:22:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1390,"name":"address","nodeType":"ElementaryTypeName","src":"2317:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1391,"nodeType":"ArrayTypeName","src":"2317:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2316:24:20"},"scope":1415,"src":"2274:67:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1395,"nodeType":"StructuredDocumentation","src":"2347:322:20","text":" @notice Return the address where a new pool will be deployed, based on the factory address and salt.\n @param constructorArgs The arguments used to create the pool\n @param salt The salt used to deploy the pool\n @return deploymentAddress The predicted address of the pool, given the salt"},"functionSelector":"44f6fec7","id":1404,"implemented":false,"kind":"function","modifiers":[],"name":"getDeploymentAddress","nameLocation":"2683:20:20","nodeType":"FunctionDefinition","parameters":{"id":1400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1397,"mutability":"mutable","name":"constructorArgs","nameLocation":"2726:15:20","nodeType":"VariableDeclaration","scope":1404,"src":"2713:28:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1396,"name":"bytes","nodeType":"ElementaryTypeName","src":"2713:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1399,"mutability":"mutable","name":"salt","nameLocation":"2759:4:20","nodeType":"VariableDeclaration","scope":1404,"src":"2751:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1398,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2751:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2703:66:20"},"returnParameters":{"id":1403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1402,"mutability":"mutable","name":"deploymentAddress","nameLocation":"2801:17:20","nodeType":"VariableDeclaration","scope":1404,"src":"2793:25:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1401,"name":"address","nodeType":"ElementaryTypeName","src":"2793:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2792:27:20"},"scope":1415,"src":"2674:146:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1405,"nodeType":"StructuredDocumentation","src":"2826:143:20","text":" @notice Check whether this factory has been disabled by governance.\n @return success True if this factory was disabled"},"functionSelector":"6c57f5a9","id":1410,"implemented":false,"kind":"function","modifiers":[],"name":"isDisabled","nameLocation":"2983:10:20","nodeType":"FunctionDefinition","parameters":{"id":1406,"nodeType":"ParameterList","parameters":[],"src":"2993:2:20"},"returnParameters":{"id":1409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1408,"mutability":"mutable","name":"success","nameLocation":"3024:7:20","nodeType":"VariableDeclaration","scope":1410,"src":"3019:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1407,"name":"bool","nodeType":"ElementaryTypeName","src":"3019:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3018:14:20"},"scope":1415,"src":"2974:59:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1411,"nodeType":"StructuredDocumentation","src":"3039:182:20","text":" @notice Disable the factory, preventing the creation of more pools.\n @dev Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled."},"functionSelector":"2f2770db","id":1414,"implemented":false,"kind":"function","modifiers":[],"name":"disable","nameLocation":"3235:7:20","nodeType":"FunctionDefinition","parameters":{"id":1412,"nodeType":"ParameterList","parameters":[],"src":"3242:2:20"},"returnParameters":{"id":1413,"nodeType":"ParameterList","parameters":[],"src":"3253:0:20"},"scope":1415,"src":"3226:28:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1416,"src":"424:2832:20","usedErrors":[5,1359,1362],"usedEvents":[1353,1356]}],"src":"46:3211:20"},"id":20},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","exportedSymbols":{"AddLiquidityKind":[4241],"AfterSwapParams":[4235],"HookFlags":[4061],"IHooks":[1617],"LiquidityManagement":[4014],"PoolSwapParams":[4206],"RemoveLiquidityKind":[4262],"SwapKind":[4169],"TokenConfig":[4128]},"id":1618,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1417,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:21"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1426,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1618,"sourceUnit":4306,"src":"289:193:21","symbolAliases":[{"foreign":{"id":1418,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4128,"src":"302:11:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1419,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4014,"src":"319:19:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1420,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4206,"src":"344:14:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1421,"name":"AfterSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4235,"src":"364:15:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1422,"name":"HookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4061,"src":"385:9:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1423,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4241,"src":"400:16:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1424,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4262,"src":"422:19:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1425,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4169,"src":"447:8:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IHooks","contractDependencies":[],"contractKind":"interface","documentation":{"id":1427,"nodeType":"StructuredDocumentation","src":"484:490:21","text":" @notice Interface for pool hooks.\n @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)"},"fullyImplemented":false,"id":1617,"linearizedBaseContracts":[1617],"name":"IHooks","nameLocation":"985:6:21","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1428,"nodeType":"StructuredDocumentation","src":"1205:769:21","text":" @notice Hook executed when a pool is registered with a non-zero hooks contract.\n @dev Returns true if registration was successful, and false to revert the pool registration.\n Make sure this function is properly implemented (e.g. check the factory, and check that the\n given pool is from the factory). The Vault address will be msg.sender.\n @param factory Address of the pool factory (contract deploying the pool)\n @param pool Address of the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param liquidityManagement Liquidity management flags indicating which functions are enabled\n @return success True if the hook allowed the registration, false otherwise"},"functionSelector":"0b89f182","id":1444,"implemented":false,"kind":"function","modifiers":[],"name":"onRegister","nameLocation":"1988:10:21","nodeType":"FunctionDefinition","parameters":{"id":1440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1430,"mutability":"mutable","name":"factory","nameLocation":"2016:7:21","nodeType":"VariableDeclaration","scope":1444,"src":"2008:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1429,"name":"address","nodeType":"ElementaryTypeName","src":"2008:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1432,"mutability":"mutable","name":"pool","nameLocation":"2041:4:21","nodeType":"VariableDeclaration","scope":1444,"src":"2033:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1431,"name":"address","nodeType":"ElementaryTypeName","src":"2033:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1436,"mutability":"mutable","name":"tokenConfig","nameLocation":"2076:11:21","nodeType":"VariableDeclaration","scope":1444,"src":"2055:32:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4128_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1434,"nodeType":"UserDefinedTypeName","pathNode":{"id":1433,"name":"TokenConfig","nameLocations":["2055:11:21"],"nodeType":"IdentifierPath","referencedDeclaration":4128,"src":"2055:11:21"},"referencedDeclaration":4128,"src":"2055:11:21","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4128_storage_ptr","typeString":"struct TokenConfig"}},"id":1435,"nodeType":"ArrayTypeName","src":"2055:13:21","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4128_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1439,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2126:19:21","nodeType":"VariableDeclaration","scope":1444,"src":"2097:48:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4014_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1438,"nodeType":"UserDefinedTypeName","pathNode":{"id":1437,"name":"LiquidityManagement","nameLocations":["2097:19:21"],"nodeType":"IdentifierPath","referencedDeclaration":4014,"src":"2097:19:21"},"referencedDeclaration":4014,"src":"2097:19:21","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4014_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1998:153:21"},"returnParameters":{"id":1443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1442,"mutability":"mutable","name":"success","nameLocation":"2175:7:21","nodeType":"VariableDeclaration","scope":1444,"src":"2170:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1441,"name":"bool","nodeType":"ElementaryTypeName","src":"2170:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2169:14:21"},"scope":1617,"src":"1979:205:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1445,"nodeType":"StructuredDocumentation","src":"2190:412:21","text":" @notice Return the set of hooks implemented by the contract.\n @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n `onRegister` is the only \"mandatory\" hook.\n @return hookFlags Flags indicating which hooks the contract supports"},"functionSelector":"d77153a7","id":1451,"implemented":false,"kind":"function","modifiers":[],"name":"getHookFlags","nameLocation":"2616:12:21","nodeType":"FunctionDefinition","parameters":{"id":1446,"nodeType":"ParameterList","parameters":[],"src":"2628:2:21"},"returnParameters":{"id":1450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1449,"mutability":"mutable","name":"hookFlags","nameLocation":"2671:9:21","nodeType":"VariableDeclaration","scope":1451,"src":"2654:26:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4061_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":1448,"nodeType":"UserDefinedTypeName","pathNode":{"id":1447,"name":"HookFlags","nameLocations":["2654:9:21"],"nodeType":"IdentifierPath","referencedDeclaration":4061,"src":"2654:9:21"},"referencedDeclaration":4061,"src":"2654:9:21","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4061_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"src":"2653:28:21"},"scope":1617,"src":"2607:75:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1452,"nodeType":"StructuredDocumentation","src":"2897:484:21","text":" @notice Hook executed before pool initialization.\n @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with initialization"},"functionSelector":"1c149e28","id":1462,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeInitialize","nameLocation":"3395:18:21","nodeType":"FunctionDefinition","parameters":{"id":1458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1455,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"3431:14:21","nodeType":"VariableDeclaration","scope":1462,"src":"3414:31:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1453,"name":"uint256","nodeType":"ElementaryTypeName","src":"3414:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1454,"nodeType":"ArrayTypeName","src":"3414:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1457,"mutability":"mutable","name":"userData","nameLocation":"3460:8:21","nodeType":"VariableDeclaration","scope":1462,"src":"3447:21:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1456,"name":"bytes","nodeType":"ElementaryTypeName","src":"3447:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3413:56:21"},"returnParameters":{"id":1461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1460,"mutability":"mutable","name":"success","nameLocation":"3493:7:21","nodeType":"VariableDeclaration","scope":1462,"src":"3488:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1459,"name":"bool","nodeType":"ElementaryTypeName","src":"3488:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3487:14:21"},"scope":1617,"src":"3386:116:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1463,"nodeType":"StructuredDocumentation","src":"3508:563:21","text":" @notice Hook to be executed after pool initialization.\n @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param bptAmountOut Amount of pool tokens minted during initialization\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool accepts the initialization results"},"functionSelector":"38be241d","id":1475,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterInitialize","nameLocation":"4085:17:21","nodeType":"FunctionDefinition","parameters":{"id":1471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1466,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"4129:14:21","nodeType":"VariableDeclaration","scope":1475,"src":"4112:31:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1464,"name":"uint256","nodeType":"ElementaryTypeName","src":"4112:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1465,"nodeType":"ArrayTypeName","src":"4112:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1468,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4161:12:21","nodeType":"VariableDeclaration","scope":1475,"src":"4153:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1467,"name":"uint256","nodeType":"ElementaryTypeName","src":"4153:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1470,"mutability":"mutable","name":"userData","nameLocation":"4196:8:21","nodeType":"VariableDeclaration","scope":1475,"src":"4183:21:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1469,"name":"bytes","nodeType":"ElementaryTypeName","src":"4183:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4102:108:21"},"returnParameters":{"id":1474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1473,"mutability":"mutable","name":"success","nameLocation":"4234:7:21","nodeType":"VariableDeclaration","scope":1475,"src":"4229:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1472,"name":"bool","nodeType":"ElementaryTypeName","src":"4229:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4228:14:21"},"scope":1617,"src":"4076:167:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1476,"nodeType":"StructuredDocumentation","src":"4461:953:21","text":" @notice Hook to be executed before adding liquidity.\n @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param maxAmountsInScaled18 Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"45421ec7","id":1498,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeAddLiquidity","nameLocation":"5428:20:21","nodeType":"FunctionDefinition","parameters":{"id":1494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1478,"mutability":"mutable","name":"router","nameLocation":"5466:6:21","nodeType":"VariableDeclaration","scope":1498,"src":"5458:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1477,"name":"address","nodeType":"ElementaryTypeName","src":"5458:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1480,"mutability":"mutable","name":"pool","nameLocation":"5490:4:21","nodeType":"VariableDeclaration","scope":1498,"src":"5482:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1479,"name":"address","nodeType":"ElementaryTypeName","src":"5482:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1483,"mutability":"mutable","name":"kind","nameLocation":"5521:4:21","nodeType":"VariableDeclaration","scope":1498,"src":"5504:21:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4241","typeString":"enum AddLiquidityKind"},"typeName":{"id":1482,"nodeType":"UserDefinedTypeName","pathNode":{"id":1481,"name":"AddLiquidityKind","nameLocations":["5504:16:21"],"nodeType":"IdentifierPath","referencedDeclaration":4241,"src":"5504:16:21"},"referencedDeclaration":4241,"src":"5504:16:21","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4241","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1486,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"5552:20:21","nodeType":"VariableDeclaration","scope":1498,"src":"5535:37:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1484,"name":"uint256","nodeType":"ElementaryTypeName","src":"5535:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1485,"nodeType":"ArrayTypeName","src":"5535:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1488,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"5590:15:21","nodeType":"VariableDeclaration","scope":1498,"src":"5582:23:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1487,"name":"uint256","nodeType":"ElementaryTypeName","src":"5582:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1491,"mutability":"mutable","name":"balancesScaled18","nameLocation":"5632:16:21","nodeType":"VariableDeclaration","scope":1498,"src":"5615:33:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1489,"name":"uint256","nodeType":"ElementaryTypeName","src":"5615:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1490,"nodeType":"ArrayTypeName","src":"5615:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1493,"mutability":"mutable","name":"userData","nameLocation":"5671:8:21","nodeType":"VariableDeclaration","scope":1498,"src":"5658:21:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1492,"name":"bytes","nodeType":"ElementaryTypeName","src":"5658:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5448:237:21"},"returnParameters":{"id":1497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1496,"mutability":"mutable","name":"success","nameLocation":"5709:7:21","nodeType":"VariableDeclaration","scope":1498,"src":"5704:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1495,"name":"bool","nodeType":"ElementaryTypeName","src":"5704:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5703:14:21"},"scope":1617,"src":"5419:299:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1499,"nodeType":"StructuredDocumentation","src":"5724:1250:21","text":" @notice Hook to be executed after adding liquidity.\n @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n @param bptAmountOut Amount of pool tokens minted\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook"},"functionSelector":"976907cc","id":1527,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterAddLiquidity","nameLocation":"6988:19:21","nodeType":"FunctionDefinition","parameters":{"id":1520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1501,"mutability":"mutable","name":"router","nameLocation":"7025:6:21","nodeType":"VariableDeclaration","scope":1527,"src":"7017:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1500,"name":"address","nodeType":"ElementaryTypeName","src":"7017:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1503,"mutability":"mutable","name":"pool","nameLocation":"7049:4:21","nodeType":"VariableDeclaration","scope":1527,"src":"7041:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1502,"name":"address","nodeType":"ElementaryTypeName","src":"7041:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1506,"mutability":"mutable","name":"kind","nameLocation":"7080:4:21","nodeType":"VariableDeclaration","scope":1527,"src":"7063:21:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4241","typeString":"enum AddLiquidityKind"},"typeName":{"id":1505,"nodeType":"UserDefinedTypeName","pathNode":{"id":1504,"name":"AddLiquidityKind","nameLocations":["7063:16:21"],"nodeType":"IdentifierPath","referencedDeclaration":4241,"src":"7063:16:21"},"referencedDeclaration":4241,"src":"7063:16:21","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4241","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1509,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"7111:17:21","nodeType":"VariableDeclaration","scope":1527,"src":"7094:34:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1507,"name":"uint256","nodeType":"ElementaryTypeName","src":"7094:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1508,"nodeType":"ArrayTypeName","src":"7094:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1512,"mutability":"mutable","name":"amountsInRaw","nameLocation":"7155:12:21","nodeType":"VariableDeclaration","scope":1527,"src":"7138:29:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1510,"name":"uint256","nodeType":"ElementaryTypeName","src":"7138:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1511,"nodeType":"ArrayTypeName","src":"7138:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1514,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7185:12:21","nodeType":"VariableDeclaration","scope":1527,"src":"7177:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1513,"name":"uint256","nodeType":"ElementaryTypeName","src":"7177:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1517,"mutability":"mutable","name":"balancesScaled18","nameLocation":"7224:16:21","nodeType":"VariableDeclaration","scope":1527,"src":"7207:33:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1515,"name":"uint256","nodeType":"ElementaryTypeName","src":"7207:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1516,"nodeType":"ArrayTypeName","src":"7207:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1519,"mutability":"mutable","name":"userData","nameLocation":"7263:8:21","nodeType":"VariableDeclaration","scope":1527,"src":"7250:21:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1518,"name":"bytes","nodeType":"ElementaryTypeName","src":"7250:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7007:270:21"},"returnParameters":{"id":1526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1522,"mutability":"mutable","name":"success","nameLocation":"7301:7:21","nodeType":"VariableDeclaration","scope":1527,"src":"7296:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1521,"name":"bool","nodeType":"ElementaryTypeName","src":"7296:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1525,"mutability":"mutable","name":"hookAdjustedAmountsInRaw","nameLocation":"7327:24:21","nodeType":"VariableDeclaration","scope":1527,"src":"7310:41:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1523,"name":"uint256","nodeType":"ElementaryTypeName","src":"7310:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1524,"nodeType":"ArrayTypeName","src":"7310:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7295:57:21"},"scope":1617,"src":"6979:374:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1528,"nodeType":"StructuredDocumentation","src":"7572:992:21","text":" @notice Hook to be executed before removing liquidity.\n @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"ba5f9f40","id":1550,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeRemoveLiquidity","nameLocation":"8578:23:21","nodeType":"FunctionDefinition","parameters":{"id":1546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1530,"mutability":"mutable","name":"router","nameLocation":"8619:6:21","nodeType":"VariableDeclaration","scope":1550,"src":"8611:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1529,"name":"address","nodeType":"ElementaryTypeName","src":"8611:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1532,"mutability":"mutable","name":"pool","nameLocation":"8643:4:21","nodeType":"VariableDeclaration","scope":1550,"src":"8635:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1531,"name":"address","nodeType":"ElementaryTypeName","src":"8635:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1535,"mutability":"mutable","name":"kind","nameLocation":"8677:4:21","nodeType":"VariableDeclaration","scope":1550,"src":"8657:24:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4262","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":1534,"nodeType":"UserDefinedTypeName","pathNode":{"id":1533,"name":"RemoveLiquidityKind","nameLocations":["8657:19:21"],"nodeType":"IdentifierPath","referencedDeclaration":4262,"src":"8657:19:21"},"referencedDeclaration":4262,"src":"8657:19:21","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4262","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1537,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"8699:14:21","nodeType":"VariableDeclaration","scope":1550,"src":"8691:22:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1536,"name":"uint256","nodeType":"ElementaryTypeName","src":"8691:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1540,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"8740:21:21","nodeType":"VariableDeclaration","scope":1550,"src":"8723:38:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1538,"name":"uint256","nodeType":"ElementaryTypeName","src":"8723:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1539,"nodeType":"ArrayTypeName","src":"8723:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1543,"mutability":"mutable","name":"balancesScaled18","nameLocation":"8788:16:21","nodeType":"VariableDeclaration","scope":1550,"src":"8771:33:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1541,"name":"uint256","nodeType":"ElementaryTypeName","src":"8771:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1542,"nodeType":"ArrayTypeName","src":"8771:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1545,"mutability":"mutable","name":"userData","nameLocation":"8827:8:21","nodeType":"VariableDeclaration","scope":1550,"src":"8814:21:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1544,"name":"bytes","nodeType":"ElementaryTypeName","src":"8814:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8601:240:21"},"returnParameters":{"id":1549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1548,"mutability":"mutable","name":"success","nameLocation":"8865:7:21","nodeType":"VariableDeclaration","scope":1550,"src":"8860:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1547,"name":"bool","nodeType":"ElementaryTypeName","src":"8860:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8859:14:21"},"scope":1617,"src":"8569:305:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1551,"nodeType":"StructuredDocumentation","src":"8880:1276:21","text":" @notice Hook to be executed after removing liquidity.\n @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param bptAmountIn Amount of pool tokens to burn\n @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook"},"functionSelector":"2754888d","id":1579,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterRemoveLiquidity","nameLocation":"10170:22:21","nodeType":"FunctionDefinition","parameters":{"id":1572,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1553,"mutability":"mutable","name":"router","nameLocation":"10210:6:21","nodeType":"VariableDeclaration","scope":1579,"src":"10202:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1552,"name":"address","nodeType":"ElementaryTypeName","src":"10202:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1555,"mutability":"mutable","name":"pool","nameLocation":"10234:4:21","nodeType":"VariableDeclaration","scope":1579,"src":"10226:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1554,"name":"address","nodeType":"ElementaryTypeName","src":"10226:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1558,"mutability":"mutable","name":"kind","nameLocation":"10268:4:21","nodeType":"VariableDeclaration","scope":1579,"src":"10248:24:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4262","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":1557,"nodeType":"UserDefinedTypeName","pathNode":{"id":1556,"name":"RemoveLiquidityKind","nameLocations":["10248:19:21"],"nodeType":"IdentifierPath","referencedDeclaration":4262,"src":"10248:19:21"},"referencedDeclaration":4262,"src":"10248:19:21","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4262","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1560,"mutability":"mutable","name":"bptAmountIn","nameLocation":"10290:11:21","nodeType":"VariableDeclaration","scope":1579,"src":"10282:19:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1559,"name":"uint256","nodeType":"ElementaryTypeName","src":"10282:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1563,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"10328:18:21","nodeType":"VariableDeclaration","scope":1579,"src":"10311:35:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1561,"name":"uint256","nodeType":"ElementaryTypeName","src":"10311:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1562,"nodeType":"ArrayTypeName","src":"10311:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1566,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"10373:13:21","nodeType":"VariableDeclaration","scope":1579,"src":"10356:30:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1564,"name":"uint256","nodeType":"ElementaryTypeName","src":"10356:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1565,"nodeType":"ArrayTypeName","src":"10356:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1569,"mutability":"mutable","name":"balancesScaled18","nameLocation":"10413:16:21","nodeType":"VariableDeclaration","scope":1579,"src":"10396:33:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1567,"name":"uint256","nodeType":"ElementaryTypeName","src":"10396:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1568,"nodeType":"ArrayTypeName","src":"10396:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1571,"mutability":"mutable","name":"userData","nameLocation":"10452:8:21","nodeType":"VariableDeclaration","scope":1579,"src":"10439:21:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1570,"name":"bytes","nodeType":"ElementaryTypeName","src":"10439:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10192:274:21"},"returnParameters":{"id":1578,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1574,"mutability":"mutable","name":"success","nameLocation":"10490:7:21","nodeType":"VariableDeclaration","scope":1579,"src":"10485:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1573,"name":"bool","nodeType":"ElementaryTypeName","src":"10485:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1577,"mutability":"mutable","name":"hookAdjustedAmountsOutRaw","nameLocation":"10516:25:21","nodeType":"VariableDeclaration","scope":1579,"src":"10499:42:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1575,"name":"uint256","nodeType":"ElementaryTypeName","src":"10499:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1576,"nodeType":"ArrayTypeName","src":"10499:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10484:58:21"},"scope":1617,"src":"10161:382:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1580,"nodeType":"StructuredDocumentation","src":"10753:556:21","text":" @notice Called before a swap to give the Pool an opportunity to perform actions.\n @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"5211fa77","id":1590,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeSwap","nameLocation":"11323:12:21","nodeType":"FunctionDefinition","parameters":{"id":1586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1583,"mutability":"mutable","name":"params","nameLocation":"11360:6:21","nodeType":"VariableDeclaration","scope":1590,"src":"11336:30:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4206_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":1582,"nodeType":"UserDefinedTypeName","pathNode":{"id":1581,"name":"PoolSwapParams","nameLocations":["11336:14:21"],"nodeType":"IdentifierPath","referencedDeclaration":4206,"src":"11336:14:21"},"referencedDeclaration":4206,"src":"11336:14:21","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4206_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":1585,"mutability":"mutable","name":"pool","nameLocation":"11376:4:21","nodeType":"VariableDeclaration","scope":1590,"src":"11368:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1584,"name":"address","nodeType":"ElementaryTypeName","src":"11368:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11335:46:21"},"returnParameters":{"id":1589,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1588,"mutability":"mutable","name":"success","nameLocation":"11405:7:21","nodeType":"VariableDeclaration","scope":1590,"src":"11400:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1587,"name":"bool","nodeType":"ElementaryTypeName","src":"11400:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11399:14:21"},"scope":1617,"src":"11314:100:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1591,"nodeType":"StructuredDocumentation","src":"11420:671:21","text":" @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n use the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see above for struct definition)\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook"},"functionSelector":"18b6eb55","id":1601,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterSwap","nameLocation":"12105:11:21","nodeType":"FunctionDefinition","parameters":{"id":1595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1594,"mutability":"mutable","name":"params","nameLocation":"12151:6:21","nodeType":"VariableDeclaration","scope":1601,"src":"12126:31:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4235_calldata_ptr","typeString":"struct AfterSwapParams"},"typeName":{"id":1593,"nodeType":"UserDefinedTypeName","pathNode":{"id":1592,"name":"AfterSwapParams","nameLocations":["12126:15:21"],"nodeType":"IdentifierPath","referencedDeclaration":4235,"src":"12126:15:21"},"referencedDeclaration":4235,"src":"12126:15:21","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4235_storage_ptr","typeString":"struct AfterSwapParams"}},"visibility":"internal"}],"src":"12116:47:21"},"returnParameters":{"id":1600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1597,"mutability":"mutable","name":"success","nameLocation":"12187:7:21","nodeType":"VariableDeclaration","scope":1601,"src":"12182:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1596,"name":"bool","nodeType":"ElementaryTypeName","src":"12182:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1599,"mutability":"mutable","name":"hookAdjustedAmountCalculatedRaw","nameLocation":"12204:31:21","nodeType":"VariableDeclaration","scope":1601,"src":"12196:39:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1598,"name":"uint256","nodeType":"ElementaryTypeName","src":"12196:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12181:55:21"},"scope":1617,"src":"12096:141:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1602,"nodeType":"StructuredDocumentation","src":"12243:795:21","text":" @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n @return success True if the pool wishes to proceed with settlement\n @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value"},"functionSelector":"a0e8f5ac","id":1616,"implemented":false,"kind":"function","modifiers":[],"name":"onComputeDynamicSwapFeePercentage","nameLocation":"13052:33:21","nodeType":"FunctionDefinition","parameters":{"id":1610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1605,"mutability":"mutable","name":"params","nameLocation":"13119:6:21","nodeType":"VariableDeclaration","scope":1616,"src":"13095:30:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4206_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":1604,"nodeType":"UserDefinedTypeName","pathNode":{"id":1603,"name":"PoolSwapParams","nameLocations":["13095:14:21"],"nodeType":"IdentifierPath","referencedDeclaration":4206,"src":"13095:14:21"},"referencedDeclaration":4206,"src":"13095:14:21","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4206_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":1607,"mutability":"mutable","name":"pool","nameLocation":"13143:4:21","nodeType":"VariableDeclaration","scope":1616,"src":"13135:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1606,"name":"address","nodeType":"ElementaryTypeName","src":"13135:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1609,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"13165:23:21","nodeType":"VariableDeclaration","scope":1616,"src":"13157:31:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1608,"name":"uint256","nodeType":"ElementaryTypeName","src":"13157:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13085:109:21"},"returnParameters":{"id":1615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1612,"mutability":"mutable","name":"success","nameLocation":"13223:7:21","nodeType":"VariableDeclaration","scope":1616,"src":"13218:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1611,"name":"bool","nodeType":"ElementaryTypeName","src":"13218:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1614,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"13240:24:21","nodeType":"VariableDeclaration","scope":1616,"src":"13232:32:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1613,"name":"uint256","nodeType":"ElementaryTypeName","src":"13232:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13217:48:21"},"scope":1617,"src":"13043:223:21","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1618,"src":"975:12293:21","usedErrors":[],"usedEvents":[]}],"src":"46:13223:21"},"id":21},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","exportedSymbols":{"IERC20":[10576],"IProtocolFeeController":[1955],"IVault":[2545]},"id":1956,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1619,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:22"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1621,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1956,"sourceUnit":10577,"src":"72:72:22","symbolAliases":[{"foreign":{"id":1620,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":1623,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1956,"sourceUnit":2546,"src":"146:38:22","symbolAliases":[{"foreign":{"id":1622,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"155:6:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeController","contractDependencies":[],"contractKind":"interface","documentation":{"id":1624,"nodeType":"StructuredDocumentation","src":"186:80:22","text":"@notice Contract that handles protocol and pool creator fees for the Vault."},"fullyImplemented":false,"id":1955,"linearizedBaseContracts":[1955],"name":"IProtocolFeeController","nameLocation":"276:22:22","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1625,"nodeType":"StructuredDocumentation","src":"305:157:22","text":" @notice Emitted when the protocol swap fee percentage is updated.\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"bf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d","id":1629,"name":"GlobalProtocolSwapFeePercentageChanged","nameLocation":"473:38:22","nodeType":"EventDefinition","parameters":{"id":1628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1627,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"520:17:22","nodeType":"VariableDeclaration","scope":1629,"src":"512:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1626,"name":"uint256","nodeType":"ElementaryTypeName","src":"512:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"511:27:22"},"src":"467:72:22"},{"anonymous":false,"documentation":{"id":1630,"nodeType":"StructuredDocumentation","src":"545:160:22","text":" @notice Emitted when the protocol yield fee percentage is updated.\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6","id":1634,"name":"GlobalProtocolYieldFeePercentageChanged","nameLocation":"716:39:22","nodeType":"EventDefinition","parameters":{"id":1633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1632,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"764:18:22","nodeType":"VariableDeclaration","scope":1634,"src":"756:26:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1631,"name":"uint256","nodeType":"ElementaryTypeName","src":"756:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"755:28:22"},"src":"710:74:22"},{"anonymous":false,"documentation":{"id":1635,"nodeType":"StructuredDocumentation","src":"790:245:22","text":" @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n @param pool The pool whose protocol swap fee will be changed\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e","id":1641,"name":"ProtocolSwapFeePercentageChanged","nameLocation":"1046:32:22","nodeType":"EventDefinition","parameters":{"id":1640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1637,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1095:4:22","nodeType":"VariableDeclaration","scope":1641,"src":"1079:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1636,"name":"address","nodeType":"ElementaryTypeName","src":"1079:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1639,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1109:17:22","nodeType":"VariableDeclaration","scope":1641,"src":"1101:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1638,"name":"uint256","nodeType":"ElementaryTypeName","src":"1101:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1078:49:22"},"src":"1040:88:22"},{"anonymous":false,"documentation":{"id":1642,"nodeType":"StructuredDocumentation","src":"1134:249:22","text":" @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n @param pool The pool whose protocol yield fee will be changed\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"af47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd","id":1648,"name":"ProtocolYieldFeePercentageChanged","nameLocation":"1394:33:22","nodeType":"EventDefinition","parameters":{"id":1647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1644,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1444:4:22","nodeType":"VariableDeclaration","scope":1648,"src":"1428:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1643,"name":"address","nodeType":"ElementaryTypeName","src":"1428:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1646,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"1458:18:22","nodeType":"VariableDeclaration","scope":1648,"src":"1450:26:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1645,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1427:50:22"},"src":"1388:90:22"},{"anonymous":false,"documentation":{"id":1649,"nodeType":"StructuredDocumentation","src":"1484:267:22","text":" @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n @param pool The pool whose pool creator swap fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool"},"eventSelector":"b7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c","id":1655,"name":"PoolCreatorSwapFeePercentageChanged","nameLocation":"1762:35:22","nodeType":"EventDefinition","parameters":{"id":1654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1651,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1814:4:22","nodeType":"VariableDeclaration","scope":1655,"src":"1798:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1650,"name":"address","nodeType":"ElementaryTypeName","src":"1798:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1653,"indexed":false,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"1828:28:22","nodeType":"VariableDeclaration","scope":1655,"src":"1820:36:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1652,"name":"uint256","nodeType":"ElementaryTypeName","src":"1820:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1797:60:22"},"src":"1756:102:22"},{"anonymous":false,"documentation":{"id":1656,"nodeType":"StructuredDocumentation","src":"1864:271:22","text":" @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n @param pool The pool whose pool creator yield fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool"},"eventSelector":"47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34","id":1662,"name":"PoolCreatorYieldFeePercentageChanged","nameLocation":"2146:36:22","nodeType":"EventDefinition","parameters":{"id":1661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1658,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2199:4:22","nodeType":"VariableDeclaration","scope":1662,"src":"2183:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1657,"name":"address","nodeType":"ElementaryTypeName","src":"2183:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1660,"indexed":false,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"2213:29:22","nodeType":"VariableDeclaration","scope":1662,"src":"2205:37:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1659,"name":"uint256","nodeType":"ElementaryTypeName","src":"2205:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2182:61:22"},"src":"2140:104:22"},{"anonymous":false,"documentation":{"id":1663,"nodeType":"StructuredDocumentation","src":"2250:560:22","text":" @notice Logs the collection of protocol swap fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n multiple operations.\n @param pool The pool on which the swap fee was charged\n @param token The token in which the swap fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"ae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f","id":1672,"name":"ProtocolSwapFeeCollected","nameLocation":"2821:24:22","nodeType":"EventDefinition","parameters":{"id":1671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1665,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2862:4:22","nodeType":"VariableDeclaration","scope":1672,"src":"2846:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1664,"name":"address","nodeType":"ElementaryTypeName","src":"2846:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1668,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"2883:5:22","nodeType":"VariableDeclaration","scope":1672,"src":"2868:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1667,"nodeType":"UserDefinedTypeName","pathNode":{"id":1666,"name":"IERC20","nameLocations":["2868:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2868:6:22"},"referencedDeclaration":10576,"src":"2868:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1670,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2898:6:22","nodeType":"VariableDeclaration","scope":1672,"src":"2890:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1669,"name":"uint256","nodeType":"ElementaryTypeName","src":"2890:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2845:60:22"},"src":"2815:91:22"},{"anonymous":false,"documentation":{"id":1673,"nodeType":"StructuredDocumentation","src":"2912:564:22","text":" @notice Logs the collection of protocol yield fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n multiple operations.\n @param pool The pool on which the yield fee was charged\n @param token The token in which the yield fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"e505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e2","id":1682,"name":"ProtocolYieldFeeCollected","nameLocation":"3487:25:22","nodeType":"EventDefinition","parameters":{"id":1681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1675,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3529:4:22","nodeType":"VariableDeclaration","scope":1682,"src":"3513:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1674,"name":"address","nodeType":"ElementaryTypeName","src":"3513:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1678,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3550:5:22","nodeType":"VariableDeclaration","scope":1682,"src":"3535:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1677,"nodeType":"UserDefinedTypeName","pathNode":{"id":1676,"name":"IERC20","nameLocations":["3535:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3535:6:22"},"referencedDeclaration":10576,"src":"3535:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1680,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"3565:6:22","nodeType":"VariableDeclaration","scope":1682,"src":"3557:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1679,"name":"uint256","nodeType":"ElementaryTypeName","src":"3557:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3512:60:22"},"src":"3481:92:22"},{"anonymous":false,"documentation":{"id":1683,"nodeType":"StructuredDocumentation","src":"3579:333:22","text":" @notice Logs the withdrawal of protocol fees in a specific token and amount.\n @param pool The pool from which protocol fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b5","id":1694,"name":"ProtocolFeesWithdrawn","nameLocation":"3923:21:22","nodeType":"EventDefinition","parameters":{"id":1693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1685,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3961:4:22","nodeType":"VariableDeclaration","scope":1694,"src":"3945:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1684,"name":"address","nodeType":"ElementaryTypeName","src":"3945:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1688,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3982:5:22","nodeType":"VariableDeclaration","scope":1694,"src":"3967:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1687,"nodeType":"UserDefinedTypeName","pathNode":{"id":1686,"name":"IERC20","nameLocations":["3967:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3967:6:22"},"referencedDeclaration":10576,"src":"3967:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1690,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4005:9:22","nodeType":"VariableDeclaration","scope":1694,"src":"3989:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1689,"name":"address","nodeType":"ElementaryTypeName","src":"3989:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1692,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4024:6:22","nodeType":"VariableDeclaration","scope":1694,"src":"4016:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1691,"name":"uint256","nodeType":"ElementaryTypeName","src":"4016:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3944:87:22"},"src":"3917:115:22"},{"anonymous":false,"documentation":{"id":1695,"nodeType":"StructuredDocumentation","src":"4038:398:22","text":" @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n @param pool The pool from which pool creator fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f9","id":1706,"name":"PoolCreatorFeesWithdrawn","nameLocation":"4447:24:22","nodeType":"EventDefinition","parameters":{"id":1705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1697,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4497:4:22","nodeType":"VariableDeclaration","scope":1706,"src":"4481:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1696,"name":"address","nodeType":"ElementaryTypeName","src":"4481:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1700,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"4526:5:22","nodeType":"VariableDeclaration","scope":1706,"src":"4511:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1699,"nodeType":"UserDefinedTypeName","pathNode":{"id":1698,"name":"IERC20","nameLocations":["4511:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4511:6:22"},"referencedDeclaration":10576,"src":"4511:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1702,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4557:9:22","nodeType":"VariableDeclaration","scope":1706,"src":"4541:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1701,"name":"address","nodeType":"ElementaryTypeName","src":"4541:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1704,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4584:6:22","nodeType":"VariableDeclaration","scope":1706,"src":"4576:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1703,"name":"uint256","nodeType":"ElementaryTypeName","src":"4576:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4471:125:22"},"src":"4441:156:22"},{"anonymous":false,"documentation":{"id":1707,"nodeType":"StructuredDocumentation","src":"4603:529:22","text":" @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global swap fee percentage.\n @param pool The pool being registered\n @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"a34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a78564","id":1715,"name":"InitialPoolAggregateSwapFeePercentage","nameLocation":"5143:37:22","nodeType":"EventDefinition","parameters":{"id":1714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1709,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5206:4:22","nodeType":"VariableDeclaration","scope":1715,"src":"5190:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1708,"name":"address","nodeType":"ElementaryTypeName","src":"5190:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1711,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"5228:26:22","nodeType":"VariableDeclaration","scope":1715,"src":"5220:34:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1710,"name":"uint256","nodeType":"ElementaryTypeName","src":"5220:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1713,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5269:19:22","nodeType":"VariableDeclaration","scope":1715,"src":"5264:24:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1712,"name":"bool","nodeType":"ElementaryTypeName","src":"5264:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5180:114:22"},"src":"5137:158:22"},{"anonymous":false,"documentation":{"id":1716,"nodeType":"StructuredDocumentation","src":"5301:533:22","text":" @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global yield fee percentage.\n @param pool The pool being registered\n @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"ce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb","id":1724,"name":"InitialPoolAggregateYieldFeePercentage","nameLocation":"5845:38:22","nodeType":"EventDefinition","parameters":{"id":1723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1718,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5909:4:22","nodeType":"VariableDeclaration","scope":1724,"src":"5893:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1717,"name":"address","nodeType":"ElementaryTypeName","src":"5893:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1720,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"5931:27:22","nodeType":"VariableDeclaration","scope":1724,"src":"5923:35:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1719,"name":"uint256","nodeType":"ElementaryTypeName","src":"5923:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1722,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5973:19:22","nodeType":"VariableDeclaration","scope":1724,"src":"5968:24:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1721,"name":"bool","nodeType":"ElementaryTypeName","src":"5968:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5883:115:22"},"src":"5839:160:22"},{"anonymous":false,"documentation":{"id":1725,"nodeType":"StructuredDocumentation","src":"6005:738:22","text":" @notice Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\n @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n @param protocolFeeExempt True if the pool is initially exempt from protocol fees"},"eventSelector":"d9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed07912","id":1733,"name":"PoolRegisteredWithFeeController","nameLocation":"6754:31:22","nodeType":"EventDefinition","parameters":{"id":1732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1727,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6802:4:22","nodeType":"VariableDeclaration","scope":1733,"src":"6786:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1726,"name":"address","nodeType":"ElementaryTypeName","src":"6786:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1729,"indexed":true,"mutability":"mutable","name":"poolCreator","nameLocation":"6824:11:22","nodeType":"VariableDeclaration","scope":1733,"src":"6808:27:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1728,"name":"address","nodeType":"ElementaryTypeName","src":"6808:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1731,"indexed":false,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6842:17:22","nodeType":"VariableDeclaration","scope":1733,"src":"6837:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1730,"name":"bool","nodeType":"ElementaryTypeName","src":"6837:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6785:75:22"},"src":"6748:113:22"},{"documentation":{"id":1734,"nodeType":"StructuredDocumentation","src":"6867:219:22","text":" @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages."},"errorSelector":"7e6eb7fb","id":1736,"name":"ProtocolSwapFeePercentageTooHigh","nameLocation":"7097:32:22","nodeType":"ErrorDefinition","parameters":{"id":1735,"nodeType":"ParameterList","parameters":[],"src":"7129:2:22"},"src":"7091:41:22"},{"documentation":{"id":1737,"nodeType":"StructuredDocumentation","src":"7138:221:22","text":" @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages."},"errorSelector":"a7849e8e","id":1739,"name":"ProtocolYieldFeePercentageTooHigh","nameLocation":"7370:33:22","nodeType":"ErrorDefinition","parameters":{"id":1738,"nodeType":"ParameterList","parameters":[],"src":"7403:2:22"},"src":"7364:42:22"},{"documentation":{"id":1740,"nodeType":"StructuredDocumentation","src":"7412:156:22","text":" @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n @param pool The pool with no creator"},"errorSelector":"8bcbf353","id":1744,"name":"PoolCreatorNotRegistered","nameLocation":"7579:24:22","nodeType":"ErrorDefinition","parameters":{"id":1743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1742,"mutability":"mutable","name":"pool","nameLocation":"7612:4:22","nodeType":"VariableDeclaration","scope":1744,"src":"7604:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1741,"name":"address","nodeType":"ElementaryTypeName","src":"7604:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7603:14:22"},"src":"7573:45:22"},{"documentation":{"id":1745,"nodeType":"StructuredDocumentation","src":"7624:236:22","text":" @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n @param caller The account attempting to withdraw pool creator fees\n @param pool The pool the caller tried to withdraw from"},"errorSelector":"fbecdbf4","id":1751,"name":"CallerIsNotPoolCreator","nameLocation":"7871:22:22","nodeType":"ErrorDefinition","parameters":{"id":1750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1747,"mutability":"mutable","name":"caller","nameLocation":"7902:6:22","nodeType":"VariableDeclaration","scope":1751,"src":"7894:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1746,"name":"address","nodeType":"ElementaryTypeName","src":"7894:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1749,"mutability":"mutable","name":"pool","nameLocation":"7918:4:22","nodeType":"VariableDeclaration","scope":1751,"src":"7910:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1748,"name":"address","nodeType":"ElementaryTypeName","src":"7910:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7893:30:22"},"src":"7865:59:22"},{"documentation":{"id":1752,"nodeType":"StructuredDocumentation","src":"7930:110:22","text":"@notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value."},"errorSelector":"0370da74","id":1754,"name":"PoolCreatorFeePercentageTooHigh","nameLocation":"8051:31:22","nodeType":"ErrorDefinition","parameters":{"id":1753,"nodeType":"ParameterList","parameters":[],"src":"8082:2:22"},"src":"8045:40:22"},{"documentation":{"id":1755,"nodeType":"StructuredDocumentation","src":"8091:109:22","text":" @notice Get the address of the main Vault contract.\n @return vault The Vault address"},"functionSelector":"fbfa77cf","id":1761,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"8214:5:22","nodeType":"FunctionDefinition","parameters":{"id":1756,"nodeType":"ParameterList","parameters":[],"src":"8219:2:22"},"returnParameters":{"id":1760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1759,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1761,"src":"8245:6:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":1758,"nodeType":"UserDefinedTypeName","pathNode":{"id":1757,"name":"IVault","nameLocations":["8245:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"8245:6:22"},"referencedDeclaration":2545,"src":"8245:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8244:8:22"},"scope":1955,"src":"8205:48:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1762,"nodeType":"StructuredDocumentation","src":"8259:131:22","text":" @notice Collects aggregate fees from the Vault for a given pool.\n @param pool The pool with aggregate fees"},"functionSelector":"8f4ab9ca","id":1767,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"8404:20:22","nodeType":"FunctionDefinition","parameters":{"id":1765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1764,"mutability":"mutable","name":"pool","nameLocation":"8433:4:22","nodeType":"VariableDeclaration","scope":1767,"src":"8425:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1763,"name":"address","nodeType":"ElementaryTypeName","src":"8425:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8424:14:22"},"returnParameters":{"id":1766,"nodeType":"ParameterList","parameters":[],"src":"8447:0:22"},"scope":1955,"src":"8395:53:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1768,"nodeType":"StructuredDocumentation","src":"8454:156:22","text":" @notice Getter for the current global protocol swap fee.\n @return protocolSwapFeePercentage The global protocol swap fee percentage"},"functionSelector":"7869ee18","id":1773,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"8624:34:22","nodeType":"FunctionDefinition","parameters":{"id":1769,"nodeType":"ParameterList","parameters":[],"src":"8658:2:22"},"returnParameters":{"id":1772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1771,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"8692:25:22","nodeType":"VariableDeclaration","scope":1773,"src":"8684:33:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1770,"name":"uint256","nodeType":"ElementaryTypeName","src":"8684:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8683:35:22"},"scope":1955,"src":"8615:104:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1774,"nodeType":"StructuredDocumentation","src":"8725:159:22","text":" @notice Getter for the current global protocol yield fee.\n @return protocolYieldFeePercentage The global protocol yield fee percentage"},"functionSelector":"55fb76af","id":1779,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"8898:35:22","nodeType":"FunctionDefinition","parameters":{"id":1775,"nodeType":"ParameterList","parameters":[],"src":"8933:2:22"},"returnParameters":{"id":1778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1777,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"8967:26:22","nodeType":"VariableDeclaration","scope":1779,"src":"8959:34:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1776,"name":"uint256","nodeType":"ElementaryTypeName","src":"8959:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8958:36:22"},"scope":1955,"src":"8889:106:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1780,"nodeType":"StructuredDocumentation","src":"9001:207:22","text":" @notice Getter for pool registration flag.\n @param pool The address of the pool\n @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)"},"functionSelector":"c673bdaf","id":1787,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"9222:16:22","nodeType":"FunctionDefinition","parameters":{"id":1783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1782,"mutability":"mutable","name":"pool","nameLocation":"9247:4:22","nodeType":"VariableDeclaration","scope":1787,"src":"9239:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1781,"name":"address","nodeType":"ElementaryTypeName","src":"9239:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9238:14:22"},"returnParameters":{"id":1786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1785,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1787,"src":"9276:4:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1784,"name":"bool","nodeType":"ElementaryTypeName","src":"9276:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9275:6:22"},"scope":1955,"src":"9213:69:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1788,"nodeType":"StructuredDocumentation","src":"9288:292:22","text":" @notice Getter for the current protocol swap fee for a given pool.\n @param pool The address of the pool\n @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"5c15a0b4","id":1797,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"9594:26:22","nodeType":"FunctionDefinition","parameters":{"id":1791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1790,"mutability":"mutable","name":"pool","nameLocation":"9638:4:22","nodeType":"VariableDeclaration","scope":1797,"src":"9630:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1789,"name":"address","nodeType":"ElementaryTypeName","src":"9630:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9620:28:22"},"returnParameters":{"id":1796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1793,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"9680:25:22","nodeType":"VariableDeclaration","scope":1797,"src":"9672:33:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1792,"name":"uint256","nodeType":"ElementaryTypeName","src":"9672:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1795,"mutability":"mutable","name":"isOverride","nameLocation":"9712:10:22","nodeType":"VariableDeclaration","scope":1797,"src":"9707:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1794,"name":"bool","nodeType":"ElementaryTypeName","src":"9707:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9671:52:22"},"scope":1955,"src":"9585:139:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1798,"nodeType":"StructuredDocumentation","src":"9730:295:22","text":" @notice Getter for the current protocol yield fee for a given pool.\n @param pool The address of the pool\n @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"7a2b97dc","id":1807,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"10039:27:22","nodeType":"FunctionDefinition","parameters":{"id":1801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1800,"mutability":"mutable","name":"pool","nameLocation":"10084:4:22","nodeType":"VariableDeclaration","scope":1807,"src":"10076:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1799,"name":"address","nodeType":"ElementaryTypeName","src":"10076:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10066:28:22"},"returnParameters":{"id":1806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1803,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"10126:26:22","nodeType":"VariableDeclaration","scope":1807,"src":"10118:34:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1802,"name":"uint256","nodeType":"ElementaryTypeName","src":"10118:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1805,"mutability":"mutable","name":"isOverride","nameLocation":"10159:10:22","nodeType":"VariableDeclaration","scope":1807,"src":"10154:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1804,"name":"bool","nodeType":"ElementaryTypeName","src":"10154:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10117:53:22"},"scope":1955,"src":"10030:141:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1808,"nodeType":"StructuredDocumentation","src":"10177:249:22","text":" @notice Getter for the current pool creator swap fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee"},"functionSelector":"0b8e059b","id":1815,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorSwapFeePercentage","nameLocation":"10440:31:22","nodeType":"FunctionDefinition","parameters":{"id":1811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1810,"mutability":"mutable","name":"pool","nameLocation":"10480:4:22","nodeType":"VariableDeclaration","scope":1815,"src":"10472:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1809,"name":"address","nodeType":"ElementaryTypeName","src":"10472:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10471:14:22"},"returnParameters":{"id":1814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1813,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1815,"src":"10509:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1812,"name":"uint256","nodeType":"ElementaryTypeName","src":"10509:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10508:9:22"},"scope":1955,"src":"10431:87:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1816,"nodeType":"StructuredDocumentation","src":"10524:252:22","text":" @notice Getter for the current pool creator yield fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee"},"functionSelector":"0252aab5","id":1823,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorYieldFeePercentage","nameLocation":"10790:32:22","nodeType":"FunctionDefinition","parameters":{"id":1819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1818,"mutability":"mutable","name":"pool","nameLocation":"10831:4:22","nodeType":"VariableDeclaration","scope":1823,"src":"10823:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1817,"name":"address","nodeType":"ElementaryTypeName","src":"10823:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10822:14:22"},"returnParameters":{"id":1822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1821,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1823,"src":"10860:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1820,"name":"uint256","nodeType":"ElementaryTypeName","src":"10860:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10859:9:22"},"scope":1955,"src":"10781:88:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1824,"nodeType":"StructuredDocumentation","src":"10875:344:22","text":" @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"8df44c54","id":1832,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"11233:21:22","nodeType":"FunctionDefinition","parameters":{"id":1827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1826,"mutability":"mutable","name":"pool","nameLocation":"11263:4:22","nodeType":"VariableDeclaration","scope":1832,"src":"11255:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1825,"name":"address","nodeType":"ElementaryTypeName","src":"11255:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11254:14:22"},"returnParameters":{"id":1831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1830,"mutability":"mutable","name":"feeAmounts","nameLocation":"11309:10:22","nodeType":"VariableDeclaration","scope":1832,"src":"11292:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1828,"name":"uint256","nodeType":"ElementaryTypeName","src":"11292:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1829,"nodeType":"ArrayTypeName","src":"11292:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11291:29:22"},"scope":1955,"src":"11224:97:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1833,"nodeType":"StructuredDocumentation","src":"11327:348:22","text":" @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"9e95f3fd","id":1841,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"11689:24:22","nodeType":"FunctionDefinition","parameters":{"id":1836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1835,"mutability":"mutable","name":"pool","nameLocation":"11722:4:22","nodeType":"VariableDeclaration","scope":1841,"src":"11714:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1834,"name":"address","nodeType":"ElementaryTypeName","src":"11714:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11713:14:22"},"returnParameters":{"id":1840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1839,"mutability":"mutable","name":"feeAmounts","nameLocation":"11768:10:22","nodeType":"VariableDeclaration","scope":1841,"src":"11751:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1837,"name":"uint256","nodeType":"ElementaryTypeName","src":"11751:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1838,"nodeType":"ArrayTypeName","src":"11751:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11750:29:22"},"scope":1955,"src":"11680:100:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1842,"nodeType":"StructuredDocumentation","src":"11786:1445:22","text":" @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n components, but the truncation ensures it will not revert for any valid set of fee percentages.\n See example below:\n tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n @return aggregateFeePercentage The computed aggregate percentage"},"functionSelector":"0ddd60c6","id":1851,"implemented":false,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"13245:29:22","nodeType":"FunctionDefinition","parameters":{"id":1847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1844,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"13292:21:22","nodeType":"VariableDeclaration","scope":1851,"src":"13284:29:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1843,"name":"uint256","nodeType":"ElementaryTypeName","src":"13284:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1846,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"13331:24:22","nodeType":"VariableDeclaration","scope":1851,"src":"13323:32:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1845,"name":"uint256","nodeType":"ElementaryTypeName","src":"13323:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13274:87:22"},"returnParameters":{"id":1850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1849,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"13393:22:22","nodeType":"VariableDeclaration","scope":1851,"src":"13385:30:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1848,"name":"uint256","nodeType":"ElementaryTypeName","src":"13385:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13384:32:22"},"scope":1955,"src":"13236:181:22","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":1852,"nodeType":"StructuredDocumentation","src":"13423:398:22","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol swap fee"},"functionSelector":"71ecc8fb","id":1857,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolSwapFeePercentage","nameLocation":"13835:31:22","nodeType":"FunctionDefinition","parameters":{"id":1855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1854,"mutability":"mutable","name":"pool","nameLocation":"13875:4:22","nodeType":"VariableDeclaration","scope":1857,"src":"13867:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1853,"name":"address","nodeType":"ElementaryTypeName","src":"13867:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13866:14:22"},"returnParameters":{"id":1856,"nodeType":"ParameterList","parameters":[],"src":"13889:0:22"},"scope":1955,"src":"13826:64:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1858,"nodeType":"StructuredDocumentation","src":"13896:400:22","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol yield fee"},"functionSelector":"71447ea8","id":1863,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolYieldFeePercentage","nameLocation":"14310:32:22","nodeType":"FunctionDefinition","parameters":{"id":1861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1860,"mutability":"mutable","name":"pool","nameLocation":"14351:4:22","nodeType":"VariableDeclaration","scope":1863,"src":"14343:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1859,"name":"address","nodeType":"ElementaryTypeName","src":"14343:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14342:14:22"},"returnParameters":{"id":1862,"nodeType":"ParameterList","parameters":[],"src":"14365:0:22"},"scope":1955,"src":"14301:65:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1864,"nodeType":"StructuredDocumentation","src":"14590:826:22","text":" @notice Add pool-specific entries to the protocol swap and yield percentages.\n @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n fee percentages, based on an initial pool creator fee of 0.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @return aggregateYieldFeePercentage The initial aggregate yield fee percentage"},"functionSelector":"77ff76e7","id":1877,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"15430:12:22","nodeType":"FunctionDefinition","parameters":{"id":1871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1866,"mutability":"mutable","name":"pool","nameLocation":"15460:4:22","nodeType":"VariableDeclaration","scope":1877,"src":"15452:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1865,"name":"address","nodeType":"ElementaryTypeName","src":"15452:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1868,"mutability":"mutable","name":"poolCreator","nameLocation":"15482:11:22","nodeType":"VariableDeclaration","scope":1877,"src":"15474:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1867,"name":"address","nodeType":"ElementaryTypeName","src":"15474:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1870,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"15508:17:22","nodeType":"VariableDeclaration","scope":1877,"src":"15503:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1869,"name":"bool","nodeType":"ElementaryTypeName","src":"15503:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15442:89:22"},"returnParameters":{"id":1876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1873,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"15558:26:22","nodeType":"VariableDeclaration","scope":1877,"src":"15550:34:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1872,"name":"uint256","nodeType":"ElementaryTypeName","src":"15550:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1875,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"15594:27:22","nodeType":"VariableDeclaration","scope":1877,"src":"15586:35:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1874,"name":"uint256","nodeType":"ElementaryTypeName","src":"15586:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15549:73:22"},"scope":1955,"src":"15421:202:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1878,"nodeType":"StructuredDocumentation","src":"15629:175:22","text":" @notice Set the global protocol swap fee percentage, used by standard pools.\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage"},"functionSelector":"8a3c5c69","id":1883,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"15818:34:22","nodeType":"FunctionDefinition","parameters":{"id":1881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1880,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"15861:28:22","nodeType":"VariableDeclaration","scope":1883,"src":"15853:36:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1879,"name":"uint256","nodeType":"ElementaryTypeName","src":"15853:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15852:38:22"},"returnParameters":{"id":1882,"nodeType":"ParameterList","parameters":[],"src":"15899:0:22"},"scope":1955,"src":"15809:91:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1884,"nodeType":"StructuredDocumentation","src":"15906:178:22","text":" @notice Set the global protocol yield fee percentage, used by standard pools.\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"a93df2a4","id":1889,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"16098:35:22","nodeType":"FunctionDefinition","parameters":{"id":1887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1886,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16142:29:22","nodeType":"VariableDeclaration","scope":1889,"src":"16134:37:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1885,"name":"uint256","nodeType":"ElementaryTypeName","src":"16134:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16133:39:22"},"returnParameters":{"id":1888,"nodeType":"ParameterList","parameters":[],"src":"16181:0:22"},"scope":1955,"src":"16089:93:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1890,"nodeType":"StructuredDocumentation","src":"16188:272:22","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol swap fee\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool"},"functionSelector":"fd267f39","id":1897,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolSwapFeePercentage","nameLocation":"16474:28:22","nodeType":"FunctionDefinition","parameters":{"id":1895,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1892,"mutability":"mutable","name":"pool","nameLocation":"16511:4:22","nodeType":"VariableDeclaration","scope":1897,"src":"16503:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1891,"name":"address","nodeType":"ElementaryTypeName","src":"16503:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1894,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"16525:28:22","nodeType":"VariableDeclaration","scope":1897,"src":"16517:36:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1893,"name":"uint256","nodeType":"ElementaryTypeName","src":"16517:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16502:52:22"},"returnParameters":{"id":1896,"nodeType":"ParameterList","parameters":[],"src":"16563:0:22"},"scope":1955,"src":"16465:99:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1898,"nodeType":"StructuredDocumentation","src":"16570:276:22","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol yield fee\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool"},"functionSelector":"abaa3356","id":1905,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolYieldFeePercentage","nameLocation":"16860:29:22","nodeType":"FunctionDefinition","parameters":{"id":1903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1900,"mutability":"mutable","name":"pool","nameLocation":"16898:4:22","nodeType":"VariableDeclaration","scope":1905,"src":"16890:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1899,"name":"address","nodeType":"ElementaryTypeName","src":"16890:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1902,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16912:29:22","nodeType":"VariableDeclaration","scope":1905,"src":"16904:37:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1901,"name":"uint256","nodeType":"ElementaryTypeName","src":"16904:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16889:53:22"},"returnParameters":{"id":1904,"nodeType":"ParameterList","parameters":[],"src":"16951:0:22"},"scope":1955,"src":"16851:101:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1906,"nodeType":"StructuredDocumentation","src":"16958:623:22","text":" @notice Assigns a new pool creator swap fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool"},"functionSelector":"1377c16c","id":1913,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"17595:31:22","nodeType":"FunctionDefinition","parameters":{"id":1911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1908,"mutability":"mutable","name":"pool","nameLocation":"17635:4:22","nodeType":"VariableDeclaration","scope":1913,"src":"17627:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1907,"name":"address","nodeType":"ElementaryTypeName","src":"17627:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1910,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"17649:28:22","nodeType":"VariableDeclaration","scope":1913,"src":"17641:36:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1909,"name":"uint256","nodeType":"ElementaryTypeName","src":"17641:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17626:52:22"},"returnParameters":{"id":1912,"nodeType":"ParameterList","parameters":[],"src":"17687:0:22"},"scope":1955,"src":"17586:102:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1914,"nodeType":"StructuredDocumentation","src":"17694:626:22","text":" @notice Assigns a new pool creator yield fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool"},"functionSelector":"3af52712","id":1921,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"18334:32:22","nodeType":"FunctionDefinition","parameters":{"id":1919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1916,"mutability":"mutable","name":"pool","nameLocation":"18375:4:22","nodeType":"VariableDeclaration","scope":1921,"src":"18367:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1915,"name":"address","nodeType":"ElementaryTypeName","src":"18367:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1918,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"18389:29:22","nodeType":"VariableDeclaration","scope":1921,"src":"18381:37:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1917,"name":"uint256","nodeType":"ElementaryTypeName","src":"18381:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18366:53:22"},"returnParameters":{"id":1920,"nodeType":"ParameterList","parameters":[],"src":"18428:0:22"},"scope":1955,"src":"18325:104:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1922,"nodeType":"StructuredDocumentation","src":"18435:296:22","text":" @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"cf7b287f","id":1929,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFees","nameLocation":"18745:20:22","nodeType":"FunctionDefinition","parameters":{"id":1927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1924,"mutability":"mutable","name":"pool","nameLocation":"18774:4:22","nodeType":"VariableDeclaration","scope":1929,"src":"18766:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1923,"name":"address","nodeType":"ElementaryTypeName","src":"18766:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1926,"mutability":"mutable","name":"recipient","nameLocation":"18788:9:22","nodeType":"VariableDeclaration","scope":1929,"src":"18780:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1925,"name":"address","nodeType":"ElementaryTypeName","src":"18780:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18765:33:22"},"returnParameters":{"id":1928,"nodeType":"ParameterList","parameters":[],"src":"18807:0:22"},"scope":1955,"src":"18736:72:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1930,"nodeType":"StructuredDocumentation","src":"18814:339:22","text":" @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens\n @param token Token to withdraw"},"functionSelector":"b53a70b2","id":1940,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFeesForToken","nameLocation":"19167:28:22","nodeType":"FunctionDefinition","parameters":{"id":1938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1932,"mutability":"mutable","name":"pool","nameLocation":"19204:4:22","nodeType":"VariableDeclaration","scope":1940,"src":"19196:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1931,"name":"address","nodeType":"ElementaryTypeName","src":"19196:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1934,"mutability":"mutable","name":"recipient","nameLocation":"19218:9:22","nodeType":"VariableDeclaration","scope":1940,"src":"19210:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1933,"name":"address","nodeType":"ElementaryTypeName","src":"19210:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1937,"mutability":"mutable","name":"token","nameLocation":"19236:5:22","nodeType":"VariableDeclaration","scope":1940,"src":"19229:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1936,"nodeType":"UserDefinedTypeName","pathNode":{"id":1935,"name":"IERC20","nameLocations":["19229:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"19229:6:22"},"referencedDeclaration":10576,"src":"19229:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"19195:47:22"},"returnParameters":{"id":1939,"nodeType":"ParameterList","parameters":[],"src":"19251:0:22"},"scope":1955,"src":"19158:94:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1941,"nodeType":"StructuredDocumentation","src":"19258:291:22","text":" @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n @dev Sends swap and yield pool creator fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"f7061445","id":1948,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19563:23:22","nodeType":"FunctionDefinition","parameters":{"id":1946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1943,"mutability":"mutable","name":"pool","nameLocation":"19595:4:22","nodeType":"VariableDeclaration","scope":1948,"src":"19587:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1942,"name":"address","nodeType":"ElementaryTypeName","src":"19587:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1945,"mutability":"mutable","name":"recipient","nameLocation":"19609:9:22","nodeType":"VariableDeclaration","scope":1948,"src":"19601:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1944,"name":"address","nodeType":"ElementaryTypeName","src":"19601:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19586:33:22"},"returnParameters":{"id":1947,"nodeType":"ParameterList","parameters":[],"src":"19628:0:22"},"scope":1955,"src":"19554:75:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1949,"nodeType":"StructuredDocumentation","src":"19635:310:22","text":" @notice Withdraw collected pool creator fees for a given pool.\n @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n value, this function is permissionless.\n @param pool The pool on which fees were collected"},"functionSelector":"52f125f0","id":1954,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19959:23:22","nodeType":"FunctionDefinition","parameters":{"id":1952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1951,"mutability":"mutable","name":"pool","nameLocation":"19991:4:22","nodeType":"VariableDeclaration","scope":1954,"src":"19983:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1950,"name":"address","nodeType":"ElementaryTypeName","src":"19983:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19982:14:22"},"returnParameters":{"id":1953,"nodeType":"ParameterList","parameters":[],"src":"20005:0:22"},"scope":1955,"src":"19950:56:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1956,"src":"266:19742:22","usedErrors":[1736,1739,1744,1751,1754],"usedEvents":[1629,1634,1641,1648,1655,1662,1672,1682,1694,1706,1715,1724,1733]}],"src":"46:19963:22"},"id":22},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol","exportedSymbols":{"IBalancerContractRegistry":[212],"IProtocolFeeController":[1955],"IProtocolFeePercentagesProvider":[2034]},"id":2035,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1957,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:23"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","file":"../standalone-utils/IBalancerContractRegistry.sol","id":1959,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2035,"sourceUnit":213,"src":"72:94:23","symbolAliases":[{"foreign":{"id":1958,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":212,"src":"81:25:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1961,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2035,"sourceUnit":1956,"src":"167:70:23","symbolAliases":[{"foreign":{"id":1960,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"176:22:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeePercentagesProvider","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":2034,"linearizedBaseContracts":[2034],"name":"IProtocolFeePercentagesProvider","nameLocation":"249:31:23","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1962,"nodeType":"StructuredDocumentation","src":"287:349:23","text":" @notice Protocol fee percentages have been set for the given factory.\n @param factory The pool factory\n @param protocolSwapFeePercentage The protocol swap fee percentage intended for pools from this factory\n @param protocolYieldFeePercentage The protocol yield fee percentage intended for pools from this factory"},"eventSelector":"2c3f7d4fd7252aea844c55450b24cac1853ac3a3293a3d0616193b7d854cf0f0","id":1970,"name":"FactorySpecificProtocolFeePercentagesSet","nameLocation":"647:40:23","nodeType":"EventDefinition","parameters":{"id":1969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1964,"indexed":true,"mutability":"mutable","name":"factory","nameLocation":"713:7:23","nodeType":"VariableDeclaration","scope":1970,"src":"697:23:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1963,"name":"address","nodeType":"ElementaryTypeName","src":"697:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1966,"indexed":false,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"738:25:23","nodeType":"VariableDeclaration","scope":1970,"src":"730:33:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1965,"name":"uint256","nodeType":"ElementaryTypeName","src":"730:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1968,"indexed":false,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"781:26:23","nodeType":"VariableDeclaration","scope":1970,"src":"773:34:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1967,"name":"uint256","nodeType":"ElementaryTypeName","src":"773:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"687:126:23"},"src":"641:173:23"},{"documentation":{"id":1971,"nodeType":"StructuredDocumentation","src":"820:87:23","text":"@notice The protocol fee controller was configured with an incorrect Vault address."},"errorSelector":"1bbe95c7","id":1973,"name":"WrongProtocolFeeControllerDeployment","nameLocation":"918:36:23","nodeType":"ErrorDefinition","parameters":{"id":1972,"nodeType":"ParameterList","parameters":[],"src":"954:2:23"},"src":"912:45:23"},{"documentation":{"id":1974,"nodeType":"StructuredDocumentation","src":"963:182:23","text":" @notice Fees can only be set on recognized factories (i.e., registered in the `BalancerContractRegistry`).\n @param factory The address of the unknown factory"},"errorSelector":"c2a47384","id":1978,"name":"UnknownFactory","nameLocation":"1156:14:23","nodeType":"ErrorDefinition","parameters":{"id":1977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1976,"mutability":"mutable","name":"factory","nameLocation":"1179:7:23","nodeType":"VariableDeclaration","scope":1978,"src":"1171:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1975,"name":"address","nodeType":"ElementaryTypeName","src":"1171:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1170:17:23"},"src":"1150:38:23"},{"documentation":{"id":1979,"nodeType":"StructuredDocumentation","src":"1194:475:23","text":" @notice `setFactorySpecificProtocolFeePercentages` has not been called for this factory address.\n @dev This error can by thrown by `getFactorySpecificProtocolFeePercentages` or\n `setProtocolFeePercentagesForPools`, as both require that valid fee percentages have been set.\n You need to set the factory fees before you can apply them to pools from that factory.\n @param factory The factory address where fees have not been set"},"errorSelector":"a589c09e","id":1983,"name":"FactoryFeesNotSet","nameLocation":"1680:17:23","nodeType":"ErrorDefinition","parameters":{"id":1982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1981,"mutability":"mutable","name":"factory","nameLocation":"1706:7:23","nodeType":"VariableDeclaration","scope":1983,"src":"1698:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1980,"name":"address","nodeType":"ElementaryTypeName","src":"1698:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1697:17:23"},"src":"1674:41:23"},{"documentation":{"id":1984,"nodeType":"StructuredDocumentation","src":"1721:300:23","text":" @notice The given pool is not from the expected factory.\n @dev Occurs when one of the pools supplied to `setProtocolFeePercentagesForPools` is not from the given factory.\n @param pool The address of the unrecognized pool\n @param factory The address of the factory"},"errorSelector":"f400ce63","id":1990,"name":"PoolNotFromFactory","nameLocation":"2032:18:23","nodeType":"ErrorDefinition","parameters":{"id":1989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1986,"mutability":"mutable","name":"pool","nameLocation":"2059:4:23","nodeType":"VariableDeclaration","scope":1990,"src":"2051:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1985,"name":"address","nodeType":"ElementaryTypeName","src":"2051:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1988,"mutability":"mutable","name":"factory","nameLocation":"2073:7:23","nodeType":"VariableDeclaration","scope":1990,"src":"2065:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1987,"name":"address","nodeType":"ElementaryTypeName","src":"2065:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2050:31:23"},"src":"2026:56:23"},{"documentation":{"id":1991,"nodeType":"StructuredDocumentation","src":"2088:162:23","text":" @notice Get the address of the `ProtocolFeeController` used to set fees.\n @return protocolFeeController The address of the fee controller"},"functionSelector":"85f2dbd4","id":1997,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"2264:24:23","nodeType":"FunctionDefinition","parameters":{"id":1992,"nodeType":"ParameterList","parameters":[],"src":"2288:2:23"},"returnParameters":{"id":1996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1995,"mutability":"mutable","name":"protocolFeeController","nameLocation":"2337:21:23","nodeType":"VariableDeclaration","scope":1997,"src":"2314:44:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":1994,"nodeType":"UserDefinedTypeName","pathNode":{"id":1993,"name":"IProtocolFeeController","nameLocations":["2314:22:23"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"2314:22:23"},"referencedDeclaration":1955,"src":"2314:22:23","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"2313:46:23"},"scope":2034,"src":"2255:105:23","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1998,"nodeType":"StructuredDocumentation","src":"2366:198:23","text":" @notice Get the address of the `BalancerContractRegistry` used to validate factory contracts.\n @return balancerContractRegistry The address of the Balancer contract registry"},"functionSelector":"deb27a7a","id":2004,"implemented":false,"kind":"function","modifiers":[],"name":"getBalancerContractRegistry","nameLocation":"2578:27:23","nodeType":"FunctionDefinition","parameters":{"id":1999,"nodeType":"ParameterList","parameters":[],"src":"2605:2:23"},"returnParameters":{"id":2003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2002,"mutability":"mutable","name":"balancerContractRegistry","nameLocation":"2657:24:23","nodeType":"VariableDeclaration","scope":2004,"src":"2631:50:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":2001,"nodeType":"UserDefinedTypeName","pathNode":{"id":2000,"name":"IBalancerContractRegistry","nameLocations":["2631:25:23"],"nodeType":"IdentifierPath","referencedDeclaration":212,"src":"2631:25:23"},"referencedDeclaration":212,"src":"2631:25:23","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"visibility":"internal"}],"src":"2630:52:23"},"scope":2034,"src":"2569:114:23","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2005,"nodeType":"StructuredDocumentation","src":"2689:323:23","text":" @notice Query the protocol fee percentages for a given factory.\n @param factory The address of the factory\n @return protocolSwapFeePercentage The protocol swap fee percentage set for that factory\n @return protocolYieldFeePercentage The protocol yield fee percentage set for that factory"},"functionSelector":"f2c24ec8","id":2014,"implemented":false,"kind":"function","modifiers":[],"name":"getFactorySpecificProtocolFeePercentages","nameLocation":"3026:40:23","nodeType":"FunctionDefinition","parameters":{"id":2008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2007,"mutability":"mutable","name":"factory","nameLocation":"3084:7:23","nodeType":"VariableDeclaration","scope":2014,"src":"3076:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2006,"name":"address","nodeType":"ElementaryTypeName","src":"3076:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3066:31:23"},"returnParameters":{"id":2013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2010,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"3129:25:23","nodeType":"VariableDeclaration","scope":2014,"src":"3121:33:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2009,"name":"uint256","nodeType":"ElementaryTypeName","src":"3121:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2012,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"3164:26:23","nodeType":"VariableDeclaration","scope":2014,"src":"3156:34:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2011,"name":"uint256","nodeType":"ElementaryTypeName","src":"3156:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3120:71:23"},"scope":2034,"src":"3017:175:23","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2015,"nodeType":"StructuredDocumentation","src":"3198:600:23","text":" @notice Assign intended protocol fee percentages for a given factory.\n @dev This is a permissioned call. After the fee percentages have been set, and governance has granted\n this contract permission to set fee percentages on pools, anyone can call `setProtocolFeePercentagesForPools`\n to update the fee percentages on a set of pools from that factory.\n @param factory The address of the factory\n @param protocolSwapFeePercentage The new protocol swap fee percentage\n @param protocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"00859689","id":2024,"implemented":false,"kind":"function","modifiers":[],"name":"setFactorySpecificProtocolFeePercentages","nameLocation":"3812:40:23","nodeType":"FunctionDefinition","parameters":{"id":2022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2017,"mutability":"mutable","name":"factory","nameLocation":"3870:7:23","nodeType":"VariableDeclaration","scope":2024,"src":"3862:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2016,"name":"address","nodeType":"ElementaryTypeName","src":"3862:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2019,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"3895:25:23","nodeType":"VariableDeclaration","scope":2024,"src":"3887:33:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2018,"name":"uint256","nodeType":"ElementaryTypeName","src":"3887:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2021,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"3938:26:23","nodeType":"VariableDeclaration","scope":2024,"src":"3930:34:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2020,"name":"uint256","nodeType":"ElementaryTypeName","src":"3930:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3852:118:23"},"returnParameters":{"id":2023,"nodeType":"ParameterList","parameters":[],"src":"3979:0:23"},"scope":2034,"src":"3803:177:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2025,"nodeType":"StructuredDocumentation","src":"3986:480:23","text":" @notice Update the protocol fees for a set of pools from a given factory.\n @dev This call is permissionless. Anyone can update the fee percentages, once they're set by governance.\n Note that governance must also grant this contract permission to set protocol fee percentages on pools.\n @param factory The address of the factory\n @param pools The pools whose fees will be set according to `setFactorySpecificProtocolFeePercentages`"},"functionSelector":"344b12d5","id":2033,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolFeePercentagesForPools","nameLocation":"4480:33:23","nodeType":"FunctionDefinition","parameters":{"id":2031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2027,"mutability":"mutable","name":"factory","nameLocation":"4522:7:23","nodeType":"VariableDeclaration","scope":2033,"src":"4514:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2026,"name":"address","nodeType":"ElementaryTypeName","src":"4514:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2030,"mutability":"mutable","name":"pools","nameLocation":"4548:5:23","nodeType":"VariableDeclaration","scope":2033,"src":"4531:22:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":2028,"name":"address","nodeType":"ElementaryTypeName","src":"4531:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2029,"nodeType":"ArrayTypeName","src":"4531:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4513:41:23"},"returnParameters":{"id":2032,"nodeType":"ParameterList","parameters":[],"src":"4563:0:23"},"scope":2034,"src":"4471:93:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2035,"src":"239:4327:23","usedErrors":[1973,1978,1983,1990],"usedEvents":[1970]}],"src":"46:4521:23"},"id":23},"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","exportedSymbols":{"AddLiquidityKind":[4241],"IERC20":[10576],"IERC4626":[9846],"IRouter":[2302],"IRouterQueries":[2507],"IVault":[2545],"RemoveLiquidityKind":[4262],"SwapKind":[4169]},"id":2303,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2036,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:24"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2038,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2303,"sourceUnit":9847,"src":"72:75:24","symbolAliases":[{"foreign":{"id":2037,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"81:8:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2040,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2303,"sourceUnit":10577,"src":"148:72:24","symbolAliases":[{"foreign":{"id":2039,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"157:6:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":2042,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2303,"sourceUnit":2546,"src":"222:38:24","symbolAliases":[{"foreign":{"id":2041,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"231:6:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol","file":"./IRouterQueries.sol","id":2044,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2303,"sourceUnit":2508,"src":"261:54:24","symbolAliases":[{"foreign":{"id":2043,"name":"IRouterQueries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2507,"src":"270:14:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":2048,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2303,"sourceUnit":4306,"src":"317:83:24","symbolAliases":[{"foreign":{"id":2045,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4241,"src":"326:16:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2046,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4262,"src":"344:19:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2047,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4169,"src":"365:8:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2050,"name":"IRouterQueries","nameLocations":["538:14:24"],"nodeType":"IdentifierPath","referencedDeclaration":2507,"src":"538:14:24"},"id":2051,"nodeType":"InheritanceSpecifier","src":"538:14:24"}],"canonicalName":"IRouter","contractDependencies":[],"contractKind":"interface","documentation":{"id":2049,"nodeType":"StructuredDocumentation","src":"402:115:24","text":"@notice User-friendly interface to basic Vault operations: swap, add/remove liquidity, and associated queries."},"fullyImplemented":false,"id":2302,"linearizedBaseContracts":[2302,2507],"name":"IRouter","nameLocation":"527:7:24","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2052,"nodeType":"StructuredDocumentation","src":"774:650:24","text":" @notice Initialize a liquidity pool.\n @param pool Address of the liquidity pool\n @param tokens Pool tokens, in token registration order\n @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Minimum amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add initial liquidity\n @return bptAmountOut Actual amount of pool tokens minted in exchange for initial liquidity"},"functionSelector":"026b3d95","id":2072,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"1438:10:24","nodeType":"FunctionDefinition","parameters":{"id":2068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2054,"mutability":"mutable","name":"pool","nameLocation":"1466:4:24","nodeType":"VariableDeclaration","scope":2072,"src":"1458:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2053,"name":"address","nodeType":"ElementaryTypeName","src":"1458:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2058,"mutability":"mutable","name":"tokens","nameLocation":"1496:6:24","nodeType":"VariableDeclaration","scope":2072,"src":"1480:22:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2056,"nodeType":"UserDefinedTypeName","pathNode":{"id":2055,"name":"IERC20","nameLocations":["1480:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1480:6:24"},"referencedDeclaration":10576,"src":"1480:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":2057,"nodeType":"ArrayTypeName","src":"1480:8:24","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":2061,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"1529:14:24","nodeType":"VariableDeclaration","scope":2072,"src":"1512:31:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2059,"name":"uint256","nodeType":"ElementaryTypeName","src":"1512:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2060,"nodeType":"ArrayTypeName","src":"1512:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2063,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"1561:15:24","nodeType":"VariableDeclaration","scope":2072,"src":"1553:23:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2062,"name":"uint256","nodeType":"ElementaryTypeName","src":"1553:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2065,"mutability":"mutable","name":"wethIsEth","nameLocation":"1591:9:24","nodeType":"VariableDeclaration","scope":2072,"src":"1586:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2064,"name":"bool","nodeType":"ElementaryTypeName","src":"1586:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2067,"mutability":"mutable","name":"userData","nameLocation":"1623:8:24","nodeType":"VariableDeclaration","scope":2072,"src":"1610:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2066,"name":"bytes","nodeType":"ElementaryTypeName","src":"1610:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1448:189:24"},"returnParameters":{"id":2071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2070,"mutability":"mutable","name":"bptAmountOut","nameLocation":"1672:12:24","nodeType":"VariableDeclaration","scope":2072,"src":"1664:20:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2069,"name":"uint256","nodeType":"ElementaryTypeName","src":"1664:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1663:22:24"},"scope":2302,"src":"1429:257:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2073,"nodeType":"StructuredDocumentation","src":"1904:645:24","text":" @notice Adds liquidity to a pool with proportional token amounts, receiving an exact amount of pool tokens.\n @param pool Address of the liquidity pool\n @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n @param exactBptAmountOut Exact amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return amountsIn Actual amounts of tokens added, sorted in token registration order"},"functionSelector":"724dba33","id":2090,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityProportional","nameLocation":"2563:24:24","nodeType":"FunctionDefinition","parameters":{"id":2085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2075,"mutability":"mutable","name":"pool","nameLocation":"2605:4:24","nodeType":"VariableDeclaration","scope":2090,"src":"2597:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2074,"name":"address","nodeType":"ElementaryTypeName","src":"2597:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2078,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"2636:12:24","nodeType":"VariableDeclaration","scope":2090,"src":"2619:29:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2076,"name":"uint256","nodeType":"ElementaryTypeName","src":"2619:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2077,"nodeType":"ArrayTypeName","src":"2619:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2080,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"2666:17:24","nodeType":"VariableDeclaration","scope":2090,"src":"2658:25:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2079,"name":"uint256","nodeType":"ElementaryTypeName","src":"2658:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2082,"mutability":"mutable","name":"wethIsEth","nameLocation":"2698:9:24","nodeType":"VariableDeclaration","scope":2090,"src":"2693:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2081,"name":"bool","nodeType":"ElementaryTypeName","src":"2693:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2084,"mutability":"mutable","name":"userData","nameLocation":"2730:8:24","nodeType":"VariableDeclaration","scope":2090,"src":"2717:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2083,"name":"bytes","nodeType":"ElementaryTypeName","src":"2717:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2587:157:24"},"returnParameters":{"id":2089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2088,"mutability":"mutable","name":"amountsIn","nameLocation":"2788:9:24","nodeType":"VariableDeclaration","scope":2090,"src":"2771:26:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2086,"name":"uint256","nodeType":"ElementaryTypeName","src":"2771:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2087,"nodeType":"ArrayTypeName","src":"2771:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2770:28:24"},"scope":2302,"src":"2554:245:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2091,"nodeType":"StructuredDocumentation","src":"2805:574:24","text":" @notice Adds liquidity to a pool with arbitrary token amounts.\n @param pool Address of the liquidity pool\n @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Minimum amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return bptAmountOut Actual amount of pool tokens received"},"functionSelector":"c08bc851","id":2107,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityUnbalanced","nameLocation":"3393:22:24","nodeType":"FunctionDefinition","parameters":{"id":2103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2093,"mutability":"mutable","name":"pool","nameLocation":"3433:4:24","nodeType":"VariableDeclaration","scope":2107,"src":"3425:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2092,"name":"address","nodeType":"ElementaryTypeName","src":"3425:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2096,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"3464:14:24","nodeType":"VariableDeclaration","scope":2107,"src":"3447:31:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2094,"name":"uint256","nodeType":"ElementaryTypeName","src":"3447:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2095,"nodeType":"ArrayTypeName","src":"3447:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2098,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"3496:15:24","nodeType":"VariableDeclaration","scope":2107,"src":"3488:23:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2097,"name":"uint256","nodeType":"ElementaryTypeName","src":"3488:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2100,"mutability":"mutable","name":"wethIsEth","nameLocation":"3526:9:24","nodeType":"VariableDeclaration","scope":2107,"src":"3521:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2099,"name":"bool","nodeType":"ElementaryTypeName","src":"3521:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2102,"mutability":"mutable","name":"userData","nameLocation":"3558:8:24","nodeType":"VariableDeclaration","scope":2107,"src":"3545:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2101,"name":"bytes","nodeType":"ElementaryTypeName","src":"3545:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3415:157:24"},"returnParameters":{"id":2106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2105,"mutability":"mutable","name":"bptAmountOut","nameLocation":"3607:12:24","nodeType":"VariableDeclaration","scope":2107,"src":"3599:20:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2104,"name":"uint256","nodeType":"ElementaryTypeName","src":"3599:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3598:22:24"},"scope":2302,"src":"3384:237:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2108,"nodeType":"StructuredDocumentation","src":"3627:605:24","text":" @notice Adds liquidity to a pool in a single token, receiving an exact amount of pool tokens.\n @param pool Address of the liquidity pool\n @param tokenIn Token used to add liquidity\n @param maxAmountIn Maximum amount of tokens to be added\n @param exactBptAmountOut Exact amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return amountIn Actual amount of tokens added"},"functionSelector":"72657d17","id":2126,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquiditySingleTokenExactOut","nameLocation":"4246:31:24","nodeType":"FunctionDefinition","parameters":{"id":2122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2110,"mutability":"mutable","name":"pool","nameLocation":"4295:4:24","nodeType":"VariableDeclaration","scope":2126,"src":"4287:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2109,"name":"address","nodeType":"ElementaryTypeName","src":"4287:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2113,"mutability":"mutable","name":"tokenIn","nameLocation":"4316:7:24","nodeType":"VariableDeclaration","scope":2126,"src":"4309:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2112,"nodeType":"UserDefinedTypeName","pathNode":{"id":2111,"name":"IERC20","nameLocations":["4309:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4309:6:24"},"referencedDeclaration":10576,"src":"4309:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2115,"mutability":"mutable","name":"maxAmountIn","nameLocation":"4341:11:24","nodeType":"VariableDeclaration","scope":2126,"src":"4333:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2114,"name":"uint256","nodeType":"ElementaryTypeName","src":"4333:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2117,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"4370:17:24","nodeType":"VariableDeclaration","scope":2126,"src":"4362:25:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2116,"name":"uint256","nodeType":"ElementaryTypeName","src":"4362:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2119,"mutability":"mutable","name":"wethIsEth","nameLocation":"4402:9:24","nodeType":"VariableDeclaration","scope":2126,"src":"4397:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2118,"name":"bool","nodeType":"ElementaryTypeName","src":"4397:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2121,"mutability":"mutable","name":"userData","nameLocation":"4434:8:24","nodeType":"VariableDeclaration","scope":2126,"src":"4421:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2120,"name":"bytes","nodeType":"ElementaryTypeName","src":"4421:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4277:171:24"},"returnParameters":{"id":2125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2124,"mutability":"mutable","name":"amountIn","nameLocation":"4483:8:24","nodeType":"VariableDeclaration","scope":2126,"src":"4475:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2123,"name":"uint256","nodeType":"ElementaryTypeName","src":"4475:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4474:18:24"},"scope":2302,"src":"4237:256:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2127,"nodeType":"StructuredDocumentation","src":"4499:530:24","text":" @notice Adds liquidity to a pool by donating the amounts in (no BPT out).\n @dev To support donation, the pool config `enableDonation` flag must be set to true.\n @param pool Address of the liquidity pool\n @param amountsIn Amounts of tokens to be donated, sorted in token registration order\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to donate liquidity"},"functionSelector":"bf6ee3fd","id":2139,"implemented":false,"kind":"function","modifiers":[],"name":"donate","nameLocation":"5043:6:24","nodeType":"FunctionDefinition","parameters":{"id":2137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2129,"mutability":"mutable","name":"pool","nameLocation":"5058:4:24","nodeType":"VariableDeclaration","scope":2139,"src":"5050:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2128,"name":"address","nodeType":"ElementaryTypeName","src":"5050:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2132,"mutability":"mutable","name":"amountsIn","nameLocation":"5081:9:24","nodeType":"VariableDeclaration","scope":2139,"src":"5064:26:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2130,"name":"uint256","nodeType":"ElementaryTypeName","src":"5064:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2131,"nodeType":"ArrayTypeName","src":"5064:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2134,"mutability":"mutable","name":"wethIsEth","nameLocation":"5097:9:24","nodeType":"VariableDeclaration","scope":2139,"src":"5092:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2133,"name":"bool","nodeType":"ElementaryTypeName","src":"5092:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2136,"mutability":"mutable","name":"userData","nameLocation":"5121:8:24","nodeType":"VariableDeclaration","scope":2139,"src":"5108:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2135,"name":"bytes","nodeType":"ElementaryTypeName","src":"5108:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5049:81:24"},"returnParameters":{"id":2138,"nodeType":"ParameterList","parameters":[],"src":"5147:0:24"},"scope":2302,"src":"5034:114:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2140,"nodeType":"StructuredDocumentation","src":"5154:954:24","text":" @notice Adds liquidity to a pool with a custom request.\n @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n In any case the caller can expect them to be hard boundaries for the request.\n @param pool Address of the liquidity pool\n @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Minimum amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return amountsIn Actual amounts of tokens added, sorted in token registration order\n @return bptAmountOut Actual amount of pool tokens received\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"0ca078ec","id":2161,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityCustom","nameLocation":"6122:18:24","nodeType":"FunctionDefinition","parameters":{"id":2152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2142,"mutability":"mutable","name":"pool","nameLocation":"6158:4:24","nodeType":"VariableDeclaration","scope":2161,"src":"6150:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2141,"name":"address","nodeType":"ElementaryTypeName","src":"6150:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2145,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"6189:12:24","nodeType":"VariableDeclaration","scope":2161,"src":"6172:29:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2143,"name":"uint256","nodeType":"ElementaryTypeName","src":"6172:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2144,"nodeType":"ArrayTypeName","src":"6172:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2147,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"6219:15:24","nodeType":"VariableDeclaration","scope":2161,"src":"6211:23:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2146,"name":"uint256","nodeType":"ElementaryTypeName","src":"6211:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2149,"mutability":"mutable","name":"wethIsEth","nameLocation":"6249:9:24","nodeType":"VariableDeclaration","scope":2161,"src":"6244:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2148,"name":"bool","nodeType":"ElementaryTypeName","src":"6244:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2151,"mutability":"mutable","name":"userData","nameLocation":"6281:8:24","nodeType":"VariableDeclaration","scope":2161,"src":"6268:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2150,"name":"bytes","nodeType":"ElementaryTypeName","src":"6268:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6140:155:24"},"returnParameters":{"id":2160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2155,"mutability":"mutable","name":"amountsIn","nameLocation":"6339:9:24","nodeType":"VariableDeclaration","scope":2161,"src":"6322:26:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2153,"name":"uint256","nodeType":"ElementaryTypeName","src":"6322:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2154,"nodeType":"ArrayTypeName","src":"6322:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2157,"mutability":"mutable","name":"bptAmountOut","nameLocation":"6358:12:24","nodeType":"VariableDeclaration","scope":2161,"src":"6350:20:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2156,"name":"uint256","nodeType":"ElementaryTypeName","src":"6350:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2159,"mutability":"mutable","name":"returnData","nameLocation":"6385:10:24","nodeType":"VariableDeclaration","scope":2161,"src":"6372:23:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2158,"name":"bytes","nodeType":"ElementaryTypeName","src":"6372:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6321:75:24"},"scope":2302,"src":"6113:284:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2162,"nodeType":"StructuredDocumentation","src":"6616:648:24","text":" @notice Removes liquidity with proportional token amounts from a pool, burning an exact pool token amount.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return amountsOut Actual amounts of tokens received, sorted in token registration order"},"functionSelector":"51682750","id":2179,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityProportional","nameLocation":"7278:27:24","nodeType":"FunctionDefinition","parameters":{"id":2174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2164,"mutability":"mutable","name":"pool","nameLocation":"7323:4:24","nodeType":"VariableDeclaration","scope":2179,"src":"7315:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2163,"name":"address","nodeType":"ElementaryTypeName","src":"7315:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2166,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"7345:16:24","nodeType":"VariableDeclaration","scope":2179,"src":"7337:24:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2165,"name":"uint256","nodeType":"ElementaryTypeName","src":"7337:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2169,"mutability":"mutable","name":"minAmountsOut","nameLocation":"7388:13:24","nodeType":"VariableDeclaration","scope":2179,"src":"7371:30:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2167,"name":"uint256","nodeType":"ElementaryTypeName","src":"7371:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2168,"nodeType":"ArrayTypeName","src":"7371:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2171,"mutability":"mutable","name":"wethIsEth","nameLocation":"7416:9:24","nodeType":"VariableDeclaration","scope":2179,"src":"7411:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2170,"name":"bool","nodeType":"ElementaryTypeName","src":"7411:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2173,"mutability":"mutable","name":"userData","nameLocation":"7448:8:24","nodeType":"VariableDeclaration","scope":2179,"src":"7435:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2172,"name":"bytes","nodeType":"ElementaryTypeName","src":"7435:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7305:157:24"},"returnParameters":{"id":2178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2177,"mutability":"mutable","name":"amountsOut","nameLocation":"7506:10:24","nodeType":"VariableDeclaration","scope":2179,"src":"7489:27:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2175,"name":"uint256","nodeType":"ElementaryTypeName","src":"7489:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2176,"nodeType":"ArrayTypeName","src":"7489:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7488:29:24"},"scope":2302,"src":"7269:249:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2180,"nodeType":"StructuredDocumentation","src":"7524:613:24","text":" @notice Removes liquidity from a pool via a single token, burning an exact pool token amount.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided\n @param tokenOut Token used to remove liquidity\n @param minAmountOut Minimum amount of tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return amountOut Actual amount of tokens received"},"functionSelector":"ecb2182c","id":2198,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquiditySingleTokenExactIn","nameLocation":"8151:33:24","nodeType":"FunctionDefinition","parameters":{"id":2194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2182,"mutability":"mutable","name":"pool","nameLocation":"8202:4:24","nodeType":"VariableDeclaration","scope":2198,"src":"8194:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2181,"name":"address","nodeType":"ElementaryTypeName","src":"8194:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2184,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"8224:16:24","nodeType":"VariableDeclaration","scope":2198,"src":"8216:24:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2183,"name":"uint256","nodeType":"ElementaryTypeName","src":"8216:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2187,"mutability":"mutable","name":"tokenOut","nameLocation":"8257:8:24","nodeType":"VariableDeclaration","scope":2198,"src":"8250:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2186,"nodeType":"UserDefinedTypeName","pathNode":{"id":2185,"name":"IERC20","nameLocations":["8250:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"8250:6:24"},"referencedDeclaration":10576,"src":"8250:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2189,"mutability":"mutable","name":"minAmountOut","nameLocation":"8283:12:24","nodeType":"VariableDeclaration","scope":2198,"src":"8275:20:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2188,"name":"uint256","nodeType":"ElementaryTypeName","src":"8275:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2191,"mutability":"mutable","name":"wethIsEth","nameLocation":"8310:9:24","nodeType":"VariableDeclaration","scope":2198,"src":"8305:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2190,"name":"bool","nodeType":"ElementaryTypeName","src":"8305:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2193,"mutability":"mutable","name":"userData","nameLocation":"8342:8:24","nodeType":"VariableDeclaration","scope":2198,"src":"8329:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2192,"name":"bytes","nodeType":"ElementaryTypeName","src":"8329:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8184:172:24"},"returnParameters":{"id":2197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2196,"mutability":"mutable","name":"amountOut","nameLocation":"8391:9:24","nodeType":"VariableDeclaration","scope":2198,"src":"8383:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2195,"name":"uint256","nodeType":"ElementaryTypeName","src":"8383:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8382:19:24"},"scope":2302,"src":"8142:260:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2199,"nodeType":"StructuredDocumentation","src":"8408:632:24","text":" @notice Removes liquidity from a pool via a single token, specifying the exact amount of tokens to receive.\n @param pool Address of the liquidity pool\n @param maxBptAmountIn Maximum amount of pool tokens provided\n @param tokenOut Token used to remove liquidity\n @param exactAmountOut Exact amount of tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return bptAmountIn Actual amount of pool tokens burned"},"functionSelector":"e7326def","id":2217,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquiditySingleTokenExactOut","nameLocation":"9054:34:24","nodeType":"FunctionDefinition","parameters":{"id":2213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2201,"mutability":"mutable","name":"pool","nameLocation":"9106:4:24","nodeType":"VariableDeclaration","scope":2217,"src":"9098:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2200,"name":"address","nodeType":"ElementaryTypeName","src":"9098:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2203,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"9128:14:24","nodeType":"VariableDeclaration","scope":2217,"src":"9120:22:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2202,"name":"uint256","nodeType":"ElementaryTypeName","src":"9120:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2206,"mutability":"mutable","name":"tokenOut","nameLocation":"9159:8:24","nodeType":"VariableDeclaration","scope":2217,"src":"9152:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2205,"nodeType":"UserDefinedTypeName","pathNode":{"id":2204,"name":"IERC20","nameLocations":["9152:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"9152:6:24"},"referencedDeclaration":10576,"src":"9152:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2208,"mutability":"mutable","name":"exactAmountOut","nameLocation":"9185:14:24","nodeType":"VariableDeclaration","scope":2217,"src":"9177:22:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2207,"name":"uint256","nodeType":"ElementaryTypeName","src":"9177:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2210,"mutability":"mutable","name":"wethIsEth","nameLocation":"9214:9:24","nodeType":"VariableDeclaration","scope":2217,"src":"9209:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2209,"name":"bool","nodeType":"ElementaryTypeName","src":"9209:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2212,"mutability":"mutable","name":"userData","nameLocation":"9246:8:24","nodeType":"VariableDeclaration","scope":2217,"src":"9233:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2211,"name":"bytes","nodeType":"ElementaryTypeName","src":"9233:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9088:172:24"},"returnParameters":{"id":2216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2215,"mutability":"mutable","name":"bptAmountIn","nameLocation":"9295:11:24","nodeType":"VariableDeclaration","scope":2217,"src":"9287:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2214,"name":"uint256","nodeType":"ElementaryTypeName","src":"9287:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9286:21:24"},"scope":2302,"src":"9045:263:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2218,"nodeType":"StructuredDocumentation","src":"9314:960:24","text":" @notice Removes liquidity from a pool with a custom request.\n @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n In any case the caller can expect them to be hard boundaries for the request.\n @param pool Address of the liquidity pool\n @param maxBptAmountIn Maximum amount of pool tokens provided\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return bptAmountIn Actual amount of pool tokens burned\n @return amountsOut Actual amounts of tokens received, sorted in token registration order\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"82bf2b24","id":2239,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityCustom","nameLocation":"10288:21:24","nodeType":"FunctionDefinition","parameters":{"id":2230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2220,"mutability":"mutable","name":"pool","nameLocation":"10327:4:24","nodeType":"VariableDeclaration","scope":2239,"src":"10319:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2219,"name":"address","nodeType":"ElementaryTypeName","src":"10319:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2222,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"10349:14:24","nodeType":"VariableDeclaration","scope":2239,"src":"10341:22:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2221,"name":"uint256","nodeType":"ElementaryTypeName","src":"10341:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2225,"mutability":"mutable","name":"minAmountsOut","nameLocation":"10390:13:24","nodeType":"VariableDeclaration","scope":2239,"src":"10373:30:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2223,"name":"uint256","nodeType":"ElementaryTypeName","src":"10373:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2224,"nodeType":"ArrayTypeName","src":"10373:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2227,"mutability":"mutable","name":"wethIsEth","nameLocation":"10418:9:24","nodeType":"VariableDeclaration","scope":2239,"src":"10413:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2226,"name":"bool","nodeType":"ElementaryTypeName","src":"10413:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2229,"mutability":"mutable","name":"userData","nameLocation":"10450:8:24","nodeType":"VariableDeclaration","scope":2239,"src":"10437:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2228,"name":"bytes","nodeType":"ElementaryTypeName","src":"10437:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10309:155:24"},"returnParameters":{"id":2238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2232,"mutability":"mutable","name":"bptAmountIn","nameLocation":"10499:11:24","nodeType":"VariableDeclaration","scope":2239,"src":"10491:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2231,"name":"uint256","nodeType":"ElementaryTypeName","src":"10491:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2235,"mutability":"mutable","name":"amountsOut","nameLocation":"10529:10:24","nodeType":"VariableDeclaration","scope":2239,"src":"10512:27:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2233,"name":"uint256","nodeType":"ElementaryTypeName","src":"10512:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2234,"nodeType":"ArrayTypeName","src":"10512:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2237,"mutability":"mutable","name":"returnData","nameLocation":"10554:10:24","nodeType":"VariableDeclaration","scope":2239,"src":"10541:23:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2236,"name":"bytes","nodeType":"ElementaryTypeName","src":"10541:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10490:75:24"},"scope":2302,"src":"10279:287:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2240,"nodeType":"StructuredDocumentation","src":"10572:447:24","text":" @notice Removes liquidity proportionally, burning an exact pool token amount. Only available in Recovery Mode.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @return amountsOut Actual amounts of tokens received, sorted in token registration order"},"functionSelector":"08c04793","id":2253,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityRecovery","nameLocation":"11033:23:24","nodeType":"FunctionDefinition","parameters":{"id":2248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2242,"mutability":"mutable","name":"pool","nameLocation":"11074:4:24","nodeType":"VariableDeclaration","scope":2253,"src":"11066:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2241,"name":"address","nodeType":"ElementaryTypeName","src":"11066:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2244,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"11096:16:24","nodeType":"VariableDeclaration","scope":2253,"src":"11088:24:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2243,"name":"uint256","nodeType":"ElementaryTypeName","src":"11088:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2247,"mutability":"mutable","name":"minAmountsOut","nameLocation":"11139:13:24","nodeType":"VariableDeclaration","scope":2253,"src":"11122:30:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2245,"name":"uint256","nodeType":"ElementaryTypeName","src":"11122:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2246,"nodeType":"ArrayTypeName","src":"11122:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11056:102:24"},"returnParameters":{"id":2252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2251,"mutability":"mutable","name":"amountsOut","nameLocation":"11202:10:24","nodeType":"VariableDeclaration","scope":2253,"src":"11185:27:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2249,"name":"uint256","nodeType":"ElementaryTypeName","src":"11185:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2250,"nodeType":"ArrayTypeName","src":"11185:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11184:29:24"},"scope":2302,"src":"11024:190:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2254,"nodeType":"StructuredDocumentation","src":"11428:744:24","text":" @notice Executes a swap operation specifying an exact input token amount.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountIn Exact amounts of input tokens to send\n @param minAmountOut Minimum amount of tokens to be received\n @param deadline Deadline for the swap, after which it will revert\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the swap request\n @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens"},"functionSelector":"750283bc","id":2277,"implemented":false,"kind":"function","modifiers":[],"name":"swapSingleTokenExactIn","nameLocation":"12186:22:24","nodeType":"FunctionDefinition","parameters":{"id":2273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2256,"mutability":"mutable","name":"pool","nameLocation":"12226:4:24","nodeType":"VariableDeclaration","scope":2277,"src":"12218:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2255,"name":"address","nodeType":"ElementaryTypeName","src":"12218:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2259,"mutability":"mutable","name":"tokenIn","nameLocation":"12247:7:24","nodeType":"VariableDeclaration","scope":2277,"src":"12240:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2258,"nodeType":"UserDefinedTypeName","pathNode":{"id":2257,"name":"IERC20","nameLocations":["12240:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"12240:6:24"},"referencedDeclaration":10576,"src":"12240:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2262,"mutability":"mutable","name":"tokenOut","nameLocation":"12271:8:24","nodeType":"VariableDeclaration","scope":2277,"src":"12264:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2261,"nodeType":"UserDefinedTypeName","pathNode":{"id":2260,"name":"IERC20","nameLocations":["12264:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"12264:6:24"},"referencedDeclaration":10576,"src":"12264:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2264,"mutability":"mutable","name":"exactAmountIn","nameLocation":"12297:13:24","nodeType":"VariableDeclaration","scope":2277,"src":"12289:21:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2263,"name":"uint256","nodeType":"ElementaryTypeName","src":"12289:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2266,"mutability":"mutable","name":"minAmountOut","nameLocation":"12328:12:24","nodeType":"VariableDeclaration","scope":2277,"src":"12320:20:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2265,"name":"uint256","nodeType":"ElementaryTypeName","src":"12320:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2268,"mutability":"mutable","name":"deadline","nameLocation":"12358:8:24","nodeType":"VariableDeclaration","scope":2277,"src":"12350:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2267,"name":"uint256","nodeType":"ElementaryTypeName","src":"12350:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2270,"mutability":"mutable","name":"wethIsEth","nameLocation":"12381:9:24","nodeType":"VariableDeclaration","scope":2277,"src":"12376:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2269,"name":"bool","nodeType":"ElementaryTypeName","src":"12376:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2272,"mutability":"mutable","name":"userData","nameLocation":"12415:8:24","nodeType":"VariableDeclaration","scope":2277,"src":"12400:23:24","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2271,"name":"bytes","nodeType":"ElementaryTypeName","src":"12400:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12208:221:24"},"returnParameters":{"id":2276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2275,"mutability":"mutable","name":"amountOut","nameLocation":"12464:9:24","nodeType":"VariableDeclaration","scope":2277,"src":"12456:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2274,"name":"uint256","nodeType":"ElementaryTypeName","src":"12456:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12455:19:24"},"scope":2302,"src":"12177:298:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2278,"nodeType":"StructuredDocumentation","src":"12481:743:24","text":" @notice Executes a swap operation specifying an exact output token amount.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountOut Exact amounts of input tokens to receive\n @param maxAmountIn Maximum amount of tokens to be sent\n @param deadline Deadline for the swap, after which it will revert\n @param userData Additional (optional) data sent with the swap request\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens"},"functionSelector":"94e86ef8","id":2301,"implemented":false,"kind":"function","modifiers":[],"name":"swapSingleTokenExactOut","nameLocation":"13238:23:24","nodeType":"FunctionDefinition","parameters":{"id":2297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2280,"mutability":"mutable","name":"pool","nameLocation":"13279:4:24","nodeType":"VariableDeclaration","scope":2301,"src":"13271:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2279,"name":"address","nodeType":"ElementaryTypeName","src":"13271:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2283,"mutability":"mutable","name":"tokenIn","nameLocation":"13300:7:24","nodeType":"VariableDeclaration","scope":2301,"src":"13293:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2282,"nodeType":"UserDefinedTypeName","pathNode":{"id":2281,"name":"IERC20","nameLocations":["13293:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"13293:6:24"},"referencedDeclaration":10576,"src":"13293:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2286,"mutability":"mutable","name":"tokenOut","nameLocation":"13324:8:24","nodeType":"VariableDeclaration","scope":2301,"src":"13317:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2285,"nodeType":"UserDefinedTypeName","pathNode":{"id":2284,"name":"IERC20","nameLocations":["13317:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"13317:6:24"},"referencedDeclaration":10576,"src":"13317:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2288,"mutability":"mutable","name":"exactAmountOut","nameLocation":"13350:14:24","nodeType":"VariableDeclaration","scope":2301,"src":"13342:22:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2287,"name":"uint256","nodeType":"ElementaryTypeName","src":"13342:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2290,"mutability":"mutable","name":"maxAmountIn","nameLocation":"13382:11:24","nodeType":"VariableDeclaration","scope":2301,"src":"13374:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2289,"name":"uint256","nodeType":"ElementaryTypeName","src":"13374:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2292,"mutability":"mutable","name":"deadline","nameLocation":"13411:8:24","nodeType":"VariableDeclaration","scope":2301,"src":"13403:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2291,"name":"uint256","nodeType":"ElementaryTypeName","src":"13403:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2294,"mutability":"mutable","name":"wethIsEth","nameLocation":"13434:9:24","nodeType":"VariableDeclaration","scope":2301,"src":"13429:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2293,"name":"bool","nodeType":"ElementaryTypeName","src":"13429:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2296,"mutability":"mutable","name":"userData","nameLocation":"13468:8:24","nodeType":"VariableDeclaration","scope":2301,"src":"13453:23:24","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2295,"name":"bytes","nodeType":"ElementaryTypeName","src":"13453:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"13261:221:24"},"returnParameters":{"id":2300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2299,"mutability":"mutable","name":"amountIn","nameLocation":"13517:8:24","nodeType":"VariableDeclaration","scope":2301,"src":"13509:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2298,"name":"uint256","nodeType":"ElementaryTypeName","src":"13509:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13508:18:24"},"scope":2302,"src":"13229:298:24","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":2303,"src":"517:13012:24","usedErrors":[],"usedEvents":[]}],"src":"46:13484:24"},"id":24},"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol","exportedSymbols":{"AddLiquidityKind":[4241],"IERC20":[10576],"IERC4626":[9846],"IRouterQueries":[2507],"IVault":[2545],"RemoveLiquidityKind":[4262],"SwapKind":[4169]},"id":2508,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2304,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:25"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2306,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2508,"sourceUnit":9847,"src":"72:75:25","symbolAliases":[{"foreign":{"id":2305,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"81:8:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2308,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2508,"sourceUnit":10577,"src":"148:72:25","symbolAliases":[{"foreign":{"id":2307,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"157:6:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":2310,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2508,"sourceUnit":2546,"src":"222:38:25","symbolAliases":[{"foreign":{"id":2309,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"231:6:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":2314,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2508,"sourceUnit":4306,"src":"262:83:25","symbolAliases":[{"foreign":{"id":2311,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4241,"src":"271:16:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2312,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4262,"src":"289:19:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2313,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4169,"src":"310:8:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IRouterQueries","contractDependencies":[],"contractKind":"interface","documentation":{"id":2315,"nodeType":"StructuredDocumentation","src":"347:118:25","text":"@notice User-friendly interface for querying expected results of swap and liquidity operations without execution."},"fullyImplemented":false,"id":2507,"linearizedBaseContracts":[2507],"name":"IRouterQueries","nameLocation":"475:14:25","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2316,"nodeType":"StructuredDocumentation","src":"709:518:25","text":" @notice Queries an `addLiquidityProportional` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountOut Exact amount of pool tokens to be received\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountsIn Expected amounts of tokens to add, sorted in token registration order"},"functionSelector":"9de90518","id":2330,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquidityProportional","nameLocation":"1241:29:25","nodeType":"FunctionDefinition","parameters":{"id":2325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2318,"mutability":"mutable","name":"pool","nameLocation":"1288:4:25","nodeType":"VariableDeclaration","scope":2330,"src":"1280:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2317,"name":"address","nodeType":"ElementaryTypeName","src":"1280:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2320,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"1310:17:25","nodeType":"VariableDeclaration","scope":2330,"src":"1302:25:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2319,"name":"uint256","nodeType":"ElementaryTypeName","src":"1302:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2322,"mutability":"mutable","name":"sender","nameLocation":"1345:6:25","nodeType":"VariableDeclaration","scope":2330,"src":"1337:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2321,"name":"address","nodeType":"ElementaryTypeName","src":"1337:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2324,"mutability":"mutable","name":"userData","nameLocation":"1374:8:25","nodeType":"VariableDeclaration","scope":2330,"src":"1361:21:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2323,"name":"bytes","nodeType":"ElementaryTypeName","src":"1361:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1270:118:25"},"returnParameters":{"id":2329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2328,"mutability":"mutable","name":"amountsIn","nameLocation":"1424:9:25","nodeType":"VariableDeclaration","scope":2330,"src":"1407:26:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2326,"name":"uint256","nodeType":"ElementaryTypeName","src":"1407:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2327,"nodeType":"ArrayTypeName","src":"1407:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1406:28:25"},"scope":2507,"src":"1232:203:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2331,"nodeType":"StructuredDocumentation","src":"1441:517:25","text":" @notice Queries an `addLiquidityUnbalanced` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return bptAmountOut Expected amount of pool tokens to receive"},"functionSelector":"da001f7d","id":2345,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquidityUnbalanced","nameLocation":"1972:27:25","nodeType":"FunctionDefinition","parameters":{"id":2341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2333,"mutability":"mutable","name":"pool","nameLocation":"2017:4:25","nodeType":"VariableDeclaration","scope":2345,"src":"2009:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2332,"name":"address","nodeType":"ElementaryTypeName","src":"2009:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2336,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"2048:14:25","nodeType":"VariableDeclaration","scope":2345,"src":"2031:31:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2334,"name":"uint256","nodeType":"ElementaryTypeName","src":"2031:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2335,"nodeType":"ArrayTypeName","src":"2031:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2338,"mutability":"mutable","name":"sender","nameLocation":"2080:6:25","nodeType":"VariableDeclaration","scope":2345,"src":"2072:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2337,"name":"address","nodeType":"ElementaryTypeName","src":"2072:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2340,"mutability":"mutable","name":"userData","nameLocation":"2109:8:25","nodeType":"VariableDeclaration","scope":2345,"src":"2096:21:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2339,"name":"bytes","nodeType":"ElementaryTypeName","src":"2096:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1999:124:25"},"returnParameters":{"id":2344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2343,"mutability":"mutable","name":"bptAmountOut","nameLocation":"2150:12:25","nodeType":"VariableDeclaration","scope":2345,"src":"2142:20:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2342,"name":"uint256","nodeType":"ElementaryTypeName","src":"2142:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2141:22:25"},"scope":2507,"src":"1963:201:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2346,"nodeType":"StructuredDocumentation","src":"2170:542:25","text":" @notice Queries an `addLiquiditySingleTokenExactOut` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenIn Token used to add liquidity\n @param exactBptAmountOut Expected exact amount of pool tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountIn Expected amount of tokens to add"},"functionSelector":"1d56798d","id":2362,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquiditySingleTokenExactOut","nameLocation":"2726:36:25","nodeType":"FunctionDefinition","parameters":{"id":2358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2348,"mutability":"mutable","name":"pool","nameLocation":"2780:4:25","nodeType":"VariableDeclaration","scope":2362,"src":"2772:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2347,"name":"address","nodeType":"ElementaryTypeName","src":"2772:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2351,"mutability":"mutable","name":"tokenIn","nameLocation":"2801:7:25","nodeType":"VariableDeclaration","scope":2362,"src":"2794:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2350,"nodeType":"UserDefinedTypeName","pathNode":{"id":2349,"name":"IERC20","nameLocations":["2794:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2794:6:25"},"referencedDeclaration":10576,"src":"2794:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2353,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"2826:17:25","nodeType":"VariableDeclaration","scope":2362,"src":"2818:25:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2352,"name":"uint256","nodeType":"ElementaryTypeName","src":"2818:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2355,"mutability":"mutable","name":"sender","nameLocation":"2861:6:25","nodeType":"VariableDeclaration","scope":2362,"src":"2853:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2354,"name":"address","nodeType":"ElementaryTypeName","src":"2853:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2357,"mutability":"mutable","name":"userData","nameLocation":"2890:8:25","nodeType":"VariableDeclaration","scope":2362,"src":"2877:21:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2356,"name":"bytes","nodeType":"ElementaryTypeName","src":"2877:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2762:142:25"},"returnParameters":{"id":2361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2360,"mutability":"mutable","name":"amountIn","nameLocation":"2931:8:25","nodeType":"VariableDeclaration","scope":2362,"src":"2923:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2359,"name":"uint256","nodeType":"ElementaryTypeName","src":"2923:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2922:18:25"},"scope":2507,"src":"2717:224:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2363,"nodeType":"StructuredDocumentation","src":"2947:779:25","text":" @notice Queries an `addLiquidityCustom` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Expected minimum amount of pool tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountsIn Expected amounts of tokens to add, sorted in token registration order\n @return bptAmountOut Expected amount of pool tokens to receive\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"452db952","id":2384,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquidityCustom","nameLocation":"3740:23:25","nodeType":"FunctionDefinition","parameters":{"id":2375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2365,"mutability":"mutable","name":"pool","nameLocation":"3781:4:25","nodeType":"VariableDeclaration","scope":2384,"src":"3773:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2364,"name":"address","nodeType":"ElementaryTypeName","src":"3773:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2368,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"3812:12:25","nodeType":"VariableDeclaration","scope":2384,"src":"3795:29:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2366,"name":"uint256","nodeType":"ElementaryTypeName","src":"3795:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2367,"nodeType":"ArrayTypeName","src":"3795:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2370,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"3842:15:25","nodeType":"VariableDeclaration","scope":2384,"src":"3834:23:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2369,"name":"uint256","nodeType":"ElementaryTypeName","src":"3834:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2372,"mutability":"mutable","name":"sender","nameLocation":"3875:6:25","nodeType":"VariableDeclaration","scope":2384,"src":"3867:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2371,"name":"address","nodeType":"ElementaryTypeName","src":"3867:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2374,"mutability":"mutable","name":"userData","nameLocation":"3904:8:25","nodeType":"VariableDeclaration","scope":2384,"src":"3891:21:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2373,"name":"bytes","nodeType":"ElementaryTypeName","src":"3891:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3763:155:25"},"returnParameters":{"id":2383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2378,"mutability":"mutable","name":"amountsIn","nameLocation":"3954:9:25","nodeType":"VariableDeclaration","scope":2384,"src":"3937:26:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2376,"name":"uint256","nodeType":"ElementaryTypeName","src":"3937:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2377,"nodeType":"ArrayTypeName","src":"3937:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2380,"mutability":"mutable","name":"bptAmountOut","nameLocation":"3973:12:25","nodeType":"VariableDeclaration","scope":2384,"src":"3965:20:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2379,"name":"uint256","nodeType":"ElementaryTypeName","src":"3965:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2382,"mutability":"mutable","name":"returnData","nameLocation":"4000:10:25","nodeType":"VariableDeclaration","scope":2384,"src":"3987:23:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2381,"name":"bytes","nodeType":"ElementaryTypeName","src":"3987:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3936:75:25"},"scope":2507,"src":"3731:281:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2385,"nodeType":"StructuredDocumentation","src":"4234:532:25","text":" @notice Queries a `removeLiquidityProportional` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided for the query\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountsOut Expected amounts of tokens to receive, sorted in token registration order"},"functionSelector":"0f710888","id":2399,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquidityProportional","nameLocation":"4780:32:25","nodeType":"FunctionDefinition","parameters":{"id":2394,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2387,"mutability":"mutable","name":"pool","nameLocation":"4830:4:25","nodeType":"VariableDeclaration","scope":2399,"src":"4822:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2386,"name":"address","nodeType":"ElementaryTypeName","src":"4822:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2389,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"4852:16:25","nodeType":"VariableDeclaration","scope":2399,"src":"4844:24:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2388,"name":"uint256","nodeType":"ElementaryTypeName","src":"4844:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2391,"mutability":"mutable","name":"sender","nameLocation":"4886:6:25","nodeType":"VariableDeclaration","scope":2399,"src":"4878:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2390,"name":"address","nodeType":"ElementaryTypeName","src":"4878:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2393,"mutability":"mutable","name":"userData","nameLocation":"4915:8:25","nodeType":"VariableDeclaration","scope":2399,"src":"4902:21:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2392,"name":"bytes","nodeType":"ElementaryTypeName","src":"4902:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4812:117:25"},"returnParameters":{"id":2398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2397,"mutability":"mutable","name":"amountsOut","nameLocation":"4965:10:25","nodeType":"VariableDeclaration","scope":2399,"src":"4948:27:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2395,"name":"uint256","nodeType":"ElementaryTypeName","src":"4948:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2396,"nodeType":"ArrayTypeName","src":"4948:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4947:29:25"},"scope":2507,"src":"4771:206:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2400,"nodeType":"StructuredDocumentation","src":"4983:554:25","text":" @notice Queries a `removeLiquiditySingleTokenExactIn` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided for the query\n @param tokenOut Token used to remove liquidity\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountOut Expected amount of tokens to receive"},"functionSelector":"23b39241","id":2416,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquiditySingleTokenExactIn","nameLocation":"5551:38:25","nodeType":"FunctionDefinition","parameters":{"id":2412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2402,"mutability":"mutable","name":"pool","nameLocation":"5607:4:25","nodeType":"VariableDeclaration","scope":2416,"src":"5599:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2401,"name":"address","nodeType":"ElementaryTypeName","src":"5599:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2404,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"5629:16:25","nodeType":"VariableDeclaration","scope":2416,"src":"5621:24:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2403,"name":"uint256","nodeType":"ElementaryTypeName","src":"5621:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2407,"mutability":"mutable","name":"tokenOut","nameLocation":"5662:8:25","nodeType":"VariableDeclaration","scope":2416,"src":"5655:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2406,"nodeType":"UserDefinedTypeName","pathNode":{"id":2405,"name":"IERC20","nameLocations":["5655:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"5655:6:25"},"referencedDeclaration":10576,"src":"5655:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2409,"mutability":"mutable","name":"sender","nameLocation":"5688:6:25","nodeType":"VariableDeclaration","scope":2416,"src":"5680:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2408,"name":"address","nodeType":"ElementaryTypeName","src":"5680:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2411,"mutability":"mutable","name":"userData","nameLocation":"5717:8:25","nodeType":"VariableDeclaration","scope":2416,"src":"5704:21:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2410,"name":"bytes","nodeType":"ElementaryTypeName","src":"5704:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5589:142:25"},"returnParameters":{"id":2415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2414,"mutability":"mutable","name":"amountOut","nameLocation":"5758:9:25","nodeType":"VariableDeclaration","scope":2416,"src":"5750:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2413,"name":"uint256","nodeType":"ElementaryTypeName","src":"5750:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5749:19:25"},"scope":2507,"src":"5542:227:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2417,"nodeType":"StructuredDocumentation","src":"5775:549:25","text":" @notice Queries a `removeLiquiditySingleTokenExactOut` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenOut Token used to remove liquidity\n @param exactAmountOut Expected exact amount of tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return bptAmountIn Expected amount of pool tokens to burn"},"functionSelector":"53d0bb98","id":2433,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquiditySingleTokenExactOut","nameLocation":"6338:39:25","nodeType":"FunctionDefinition","parameters":{"id":2429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2419,"mutability":"mutable","name":"pool","nameLocation":"6395:4:25","nodeType":"VariableDeclaration","scope":2433,"src":"6387:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2418,"name":"address","nodeType":"ElementaryTypeName","src":"6387:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2422,"mutability":"mutable","name":"tokenOut","nameLocation":"6416:8:25","nodeType":"VariableDeclaration","scope":2433,"src":"6409:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2421,"nodeType":"UserDefinedTypeName","pathNode":{"id":2420,"name":"IERC20","nameLocations":["6409:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6409:6:25"},"referencedDeclaration":10576,"src":"6409:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2424,"mutability":"mutable","name":"exactAmountOut","nameLocation":"6442:14:25","nodeType":"VariableDeclaration","scope":2433,"src":"6434:22:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2423,"name":"uint256","nodeType":"ElementaryTypeName","src":"6434:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2426,"mutability":"mutable","name":"sender","nameLocation":"6474:6:25","nodeType":"VariableDeclaration","scope":2433,"src":"6466:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2425,"name":"address","nodeType":"ElementaryTypeName","src":"6466:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2428,"mutability":"mutable","name":"userData","nameLocation":"6503:8:25","nodeType":"VariableDeclaration","scope":2433,"src":"6490:21:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2427,"name":"bytes","nodeType":"ElementaryTypeName","src":"6490:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6377:140:25"},"returnParameters":{"id":2432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2431,"mutability":"mutable","name":"bptAmountIn","nameLocation":"6544:11:25","nodeType":"VariableDeclaration","scope":2433,"src":"6536:19:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2430,"name":"uint256","nodeType":"ElementaryTypeName","src":"6536:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6535:21:25"},"scope":2507,"src":"6329:228:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2434,"nodeType":"StructuredDocumentation","src":"6563:779:25","text":" @notice Queries a `removeLiquidityCustom` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param maxBptAmountIn Maximum amount of pool tokens provided\n @param minAmountsOut Expected minimum amounts of tokens to receive, sorted in token registration order\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return bptAmountIn Expected amount of pool tokens to burn\n @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"c330c7be","id":2455,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquidityCustom","nameLocation":"7356:26:25","nodeType":"FunctionDefinition","parameters":{"id":2446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2436,"mutability":"mutable","name":"pool","nameLocation":"7400:4:25","nodeType":"VariableDeclaration","scope":2455,"src":"7392:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2435,"name":"address","nodeType":"ElementaryTypeName","src":"7392:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2438,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"7422:14:25","nodeType":"VariableDeclaration","scope":2455,"src":"7414:22:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2437,"name":"uint256","nodeType":"ElementaryTypeName","src":"7414:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2441,"mutability":"mutable","name":"minAmountsOut","nameLocation":"7463:13:25","nodeType":"VariableDeclaration","scope":2455,"src":"7446:30:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2439,"name":"uint256","nodeType":"ElementaryTypeName","src":"7446:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2440,"nodeType":"ArrayTypeName","src":"7446:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2443,"mutability":"mutable","name":"sender","nameLocation":"7494:6:25","nodeType":"VariableDeclaration","scope":2455,"src":"7486:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2442,"name":"address","nodeType":"ElementaryTypeName","src":"7486:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2445,"mutability":"mutable","name":"userData","nameLocation":"7523:8:25","nodeType":"VariableDeclaration","scope":2455,"src":"7510:21:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2444,"name":"bytes","nodeType":"ElementaryTypeName","src":"7510:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7382:155:25"},"returnParameters":{"id":2454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2448,"mutability":"mutable","name":"bptAmountIn","nameLocation":"7564:11:25","nodeType":"VariableDeclaration","scope":2455,"src":"7556:19:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2447,"name":"uint256","nodeType":"ElementaryTypeName","src":"7556:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2451,"mutability":"mutable","name":"amountsOut","nameLocation":"7594:10:25","nodeType":"VariableDeclaration","scope":2455,"src":"7577:27:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2449,"name":"uint256","nodeType":"ElementaryTypeName","src":"7577:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2450,"nodeType":"ArrayTypeName","src":"7577:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2453,"mutability":"mutable","name":"returnData","nameLocation":"7619:10:25","nodeType":"VariableDeclaration","scope":2455,"src":"7606:23:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2452,"name":"bytes","nodeType":"ElementaryTypeName","src":"7606:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7555:75:25"},"scope":2507,"src":"7347:284:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2456,"nodeType":"StructuredDocumentation","src":"7637:334:25","text":" @notice Queries a `removeLiquidityRecovery` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided for the query\n @return amountsOut Expected amounts of tokens to receive, sorted in token registration order"},"functionSelector":"b037ed36","id":2466,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquidityRecovery","nameLocation":"7985:28:25","nodeType":"FunctionDefinition","parameters":{"id":2461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2458,"mutability":"mutable","name":"pool","nameLocation":"8031:4:25","nodeType":"VariableDeclaration","scope":2466,"src":"8023:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2457,"name":"address","nodeType":"ElementaryTypeName","src":"8023:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2460,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"8053:16:25","nodeType":"VariableDeclaration","scope":2466,"src":"8045:24:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2459,"name":"uint256","nodeType":"ElementaryTypeName","src":"8045:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8013:62:25"},"returnParameters":{"id":2465,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2464,"mutability":"mutable","name":"amountsOut","nameLocation":"8111:10:25","nodeType":"VariableDeclaration","scope":2466,"src":"8094:27:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2462,"name":"uint256","nodeType":"ElementaryTypeName","src":"8094:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2463,"nodeType":"ArrayTypeName","src":"8094:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8093:29:25"},"scope":2507,"src":"7976:147:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2467,"nodeType":"StructuredDocumentation","src":"8333:637:25","text":" @notice Queries a swap operation specifying an exact input token amount without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountIn Exact amounts of input tokens to send\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens"},"functionSelector":"3ebc54e5","id":2486,"implemented":false,"kind":"function","modifiers":[],"name":"querySwapSingleTokenExactIn","nameLocation":"8984:27:25","nodeType":"FunctionDefinition","parameters":{"id":2482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2469,"mutability":"mutable","name":"pool","nameLocation":"9029:4:25","nodeType":"VariableDeclaration","scope":2486,"src":"9021:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2468,"name":"address","nodeType":"ElementaryTypeName","src":"9021:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2472,"mutability":"mutable","name":"tokenIn","nameLocation":"9050:7:25","nodeType":"VariableDeclaration","scope":2486,"src":"9043:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2471,"nodeType":"UserDefinedTypeName","pathNode":{"id":2470,"name":"IERC20","nameLocations":["9043:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"9043:6:25"},"referencedDeclaration":10576,"src":"9043:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2475,"mutability":"mutable","name":"tokenOut","nameLocation":"9074:8:25","nodeType":"VariableDeclaration","scope":2486,"src":"9067:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2474,"nodeType":"UserDefinedTypeName","pathNode":{"id":2473,"name":"IERC20","nameLocations":["9067:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"9067:6:25"},"referencedDeclaration":10576,"src":"9067:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2477,"mutability":"mutable","name":"exactAmountIn","nameLocation":"9100:13:25","nodeType":"VariableDeclaration","scope":2486,"src":"9092:21:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2476,"name":"uint256","nodeType":"ElementaryTypeName","src":"9092:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2479,"mutability":"mutable","name":"sender","nameLocation":"9131:6:25","nodeType":"VariableDeclaration","scope":2486,"src":"9123:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2478,"name":"address","nodeType":"ElementaryTypeName","src":"9123:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2481,"mutability":"mutable","name":"userData","nameLocation":"9162:8:25","nodeType":"VariableDeclaration","scope":2486,"src":"9147:23:25","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2480,"name":"bytes","nodeType":"ElementaryTypeName","src":"9147:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9011:165:25"},"returnParameters":{"id":2485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2484,"mutability":"mutable","name":"amountOut","nameLocation":"9203:9:25","nodeType":"VariableDeclaration","scope":2486,"src":"9195:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2483,"name":"uint256","nodeType":"ElementaryTypeName","src":"9195:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9194:19:25"},"scope":2507,"src":"8975:239:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2487,"nodeType":"StructuredDocumentation","src":"9220:641:25","text":" @notice Queries a swap operation specifying an exact output token amount without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountOut Exact amounts of input tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens"},"functionSelector":"175d4408","id":2506,"implemented":false,"kind":"function","modifiers":[],"name":"querySwapSingleTokenExactOut","nameLocation":"9875:28:25","nodeType":"FunctionDefinition","parameters":{"id":2502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2489,"mutability":"mutable","name":"pool","nameLocation":"9921:4:25","nodeType":"VariableDeclaration","scope":2506,"src":"9913:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2488,"name":"address","nodeType":"ElementaryTypeName","src":"9913:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2492,"mutability":"mutable","name":"tokenIn","nameLocation":"9942:7:25","nodeType":"VariableDeclaration","scope":2506,"src":"9935:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2491,"nodeType":"UserDefinedTypeName","pathNode":{"id":2490,"name":"IERC20","nameLocations":["9935:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"9935:6:25"},"referencedDeclaration":10576,"src":"9935:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2495,"mutability":"mutable","name":"tokenOut","nameLocation":"9966:8:25","nodeType":"VariableDeclaration","scope":2506,"src":"9959:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2494,"nodeType":"UserDefinedTypeName","pathNode":{"id":2493,"name":"IERC20","nameLocations":["9959:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"9959:6:25"},"referencedDeclaration":10576,"src":"9959:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2497,"mutability":"mutable","name":"exactAmountOut","nameLocation":"9992:14:25","nodeType":"VariableDeclaration","scope":2506,"src":"9984:22:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2496,"name":"uint256","nodeType":"ElementaryTypeName","src":"9984:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2499,"mutability":"mutable","name":"sender","nameLocation":"10024:6:25","nodeType":"VariableDeclaration","scope":2506,"src":"10016:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2498,"name":"address","nodeType":"ElementaryTypeName","src":"10016:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2501,"mutability":"mutable","name":"userData","nameLocation":"10055:8:25","nodeType":"VariableDeclaration","scope":2506,"src":"10040:23:25","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2500,"name":"bytes","nodeType":"ElementaryTypeName","src":"10040:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9903:166:25"},"returnParameters":{"id":2505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2504,"mutability":"mutable","name":"amountIn","nameLocation":"10096:8:25","nodeType":"VariableDeclaration","scope":2506,"src":"10088:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2503,"name":"uint256","nodeType":"ElementaryTypeName","src":"10088:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10087:18:25"},"scope":2507,"src":"9866:240:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2508,"src":"465:9643:25","usedErrors":[],"usedEvents":[]}],"src":"46:10063:25"},"id":25},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","exportedSymbols":{"IAuthentication":[14],"IVault":[2545],"IVaultAdmin":[2835],"IVaultErrors":[3202],"IVaultEvents":[3441],"IVaultExtension":[3860],"IVaultMain":[3996]},"id":2546,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2509,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:26"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"../solidity-utils/helpers/IAuthentication.sol","id":2511,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2546,"sourceUnit":15,"src":"72:80:26","symbolAliases":[{"foreign":{"id":2510,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"81:15:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","file":"./IVaultExtension.sol","id":2513,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2546,"sourceUnit":3861,"src":"153:56:26","symbolAliases":[{"foreign":{"id":2512,"name":"IVaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3860,"src":"162:15:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"./IVaultErrors.sol","id":2515,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2546,"sourceUnit":3203,"src":"210:50:26","symbolAliases":[{"foreign":{"id":2514,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"219:12:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","file":"./IVaultEvents.sol","id":2517,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2546,"sourceUnit":3442,"src":"261:50:26","symbolAliases":[{"foreign":{"id":2516,"name":"IVaultEvents","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3441,"src":"270:12:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"./IVaultAdmin.sol","id":2519,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2546,"sourceUnit":2836,"src":"312:48:26","symbolAliases":[{"foreign":{"id":2518,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2835,"src":"321:11:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","file":"./IVaultMain.sol","id":2521,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2546,"sourceUnit":3997,"src":"361:46:26","symbolAliases":[{"foreign":{"id":2520,"name":"IVaultMain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3996,"src":"370:10:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2523,"name":"IVaultMain","nameLocations":["539:10:26"],"nodeType":"IdentifierPath","referencedDeclaration":3996,"src":"539:10:26"},"id":2524,"nodeType":"InheritanceSpecifier","src":"539:10:26"},{"baseName":{"id":2525,"name":"IVaultExtension","nameLocations":["551:15:26"],"nodeType":"IdentifierPath","referencedDeclaration":3860,"src":"551:15:26"},"id":2526,"nodeType":"InheritanceSpecifier","src":"551:15:26"},{"baseName":{"id":2527,"name":"IVaultAdmin","nameLocations":["568:11:26"],"nodeType":"IdentifierPath","referencedDeclaration":2835,"src":"568:11:26"},"id":2528,"nodeType":"InheritanceSpecifier","src":"568:11:26"},{"baseName":{"id":2529,"name":"IVaultErrors","nameLocations":["581:12:26"],"nodeType":"IdentifierPath","referencedDeclaration":3202,"src":"581:12:26"},"id":2530,"nodeType":"InheritanceSpecifier","src":"581:12:26"},{"baseName":{"id":2531,"name":"IVaultEvents","nameLocations":["595:12:26"],"nodeType":"IdentifierPath","referencedDeclaration":3441,"src":"595:12:26"},"id":2532,"nodeType":"InheritanceSpecifier","src":"595:12:26"},{"baseName":{"id":2533,"name":"IAuthentication","nameLocations":["609:15:26"],"nodeType":"IdentifierPath","referencedDeclaration":14,"src":"609:15:26"},"id":2534,"nodeType":"InheritanceSpecifier","src":"609:15:26"}],"canonicalName":"IVault","contractDependencies":[],"contractKind":"interface","documentation":{"id":2522,"nodeType":"StructuredDocumentation","src":"409:110:26","text":"@notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries."},"fullyImplemented":false,"id":2545,"linearizedBaseContracts":[2545,14,3441,3202,2835,3860,3996],"name":"IVault","nameLocation":"529:6:26","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[2563,3464],"documentation":{"id":2535,"nodeType":"StructuredDocumentation","src":"631:41:26","text":"@return vault The main Vault address."},"functionSelector":"fbfa77cf","id":2544,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"686:5:26","nodeType":"FunctionDefinition","overrides":{"id":2539,"nodeType":"OverrideSpecifier","overrides":[{"id":2537,"name":"IVaultAdmin","nameLocations":["717:11:26"],"nodeType":"IdentifierPath","referencedDeclaration":2835,"src":"717:11:26"},{"id":2538,"name":"IVaultExtension","nameLocations":["730:15:26"],"nodeType":"IdentifierPath","referencedDeclaration":3860,"src":"730:15:26"}],"src":"708:38:26"},"parameters":{"id":2536,"nodeType":"ParameterList","parameters":[],"src":"691:2:26"},"returnParameters":{"id":2543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2542,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2544,"src":"756:6:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":2541,"nodeType":"UserDefinedTypeName","pathNode":{"id":2540,"name":"IVault","nameLocations":["756:6:26"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"756:6:26"},"referencedDeclaration":2545,"src":"756:6:26","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"755:8:26"},"scope":2545,"src":"677:87:26","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2546,"src":"519:247:26","usedErrors":[5,2847,2852,2857,2862,2871,2877,2880,2883,2886,2889,2892,2895,2904,2907,2910,2913,2916,2919,2922,2925,2928,2931,2934,2937,2940,2943,2946,2952,2959,2966,2969,2972,2982,2992,2999,3002,3005,3008,3018,3028,3035,3038,3041,3044,3047,3050,3053,3056,3059,3064,3069,3074,3077,3080,3083,3086,3089,3094,3099,3104,3110,3116,3119,3127,3133,3139,3142,3145,3148,3153,3163,3173,3180,3183,3186,3189,3192,3195,3198,3201],"usedEvents":[3240,3245,3264,3276,3288,3306,3324,3329,3332,3335,3342,3349,3356,3363,3370,3376,3382,3394,3404,3414,3426,3431,3440]}],"src":"46:721:26"},"id":26},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","exportedSymbols":{"IAuthorizer":[1341],"IERC4626":[9846],"IProtocolFeeController":[1955],"IVault":[2545],"IVaultAdmin":[2835]},"id":2836,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2547,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:27"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2549,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2836,"sourceUnit":9847,"src":"72:75:27","symbolAliases":[{"foreign":{"id":2548,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"81:8:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":2551,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2836,"sourceUnit":1956,"src":"149:70:27","symbolAliases":[{"foreign":{"id":2550,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"158:22:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":2553,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2836,"sourceUnit":1342,"src":"220:48:27","symbolAliases":[{"foreign":{"id":2552,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"229:11:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":2555,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2836,"sourceUnit":2546,"src":"269:38:27","symbolAliases":[{"foreign":{"id":2554,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"278:6:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultAdmin","contractDependencies":[],"contractKind":"interface","documentation":{"id":2556,"nodeType":"StructuredDocumentation","src":"309:276:27","text":" @notice Interface for functions defined on the `VaultAdmin` contract.\n @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n as two delegate calls add gas to each call. Most of the permissioned calls are here."},"fullyImplemented":false,"id":2835,"linearizedBaseContracts":[2835],"name":"IVaultAdmin","nameLocation":"596:11:27","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2557,"nodeType":"StructuredDocumentation","src":"841:206:27","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":2563,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1061:5:27","nodeType":"FunctionDefinition","parameters":{"id":2558,"nodeType":"ParameterList","parameters":[],"src":"1066:2:27"},"returnParameters":{"id":2562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2561,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2563,"src":"1092:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":2560,"nodeType":"UserDefinedTypeName","pathNode":{"id":2559,"name":"IVault","nameLocations":["1092:6:27"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1092:6:27"},"referencedDeclaration":2545,"src":"1092:6:27","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1091:8:27"},"scope":2835,"src":"1052:48:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2564,"nodeType":"StructuredDocumentation","src":"1106:326:27","text":" @notice Returns the Vault's pause window end time.\n @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n by governance. Balancer timestamps are 32 bits.\n @return pauseWindowEndTime The timestamp when the Vault's pause window ends"},"functionSelector":"8a8d123a","id":2569,"implemented":false,"kind":"function","modifiers":[],"name":"getPauseWindowEndTime","nameLocation":"1446:21:27","nodeType":"FunctionDefinition","parameters":{"id":2565,"nodeType":"ParameterList","parameters":[],"src":"1467:2:27"},"returnParameters":{"id":2568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2567,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1500:18:27","nodeType":"VariableDeclaration","scope":2569,"src":"1493:25:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2566,"name":"uint32","nodeType":"ElementaryTypeName","src":"1493:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1492:27:27"},"scope":2835,"src":"1437:83:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2570,"nodeType":"StructuredDocumentation","src":"1526:414:27","text":" @notice Returns the Vault's buffer period duration.\n @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n timestamps are 32 bits.\n @return bufferPeriodDuration The length of the buffer period in seconds"},"functionSelector":"20c1fb7a","id":2575,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodDuration","nameLocation":"1954:23:27","nodeType":"FunctionDefinition","parameters":{"id":2571,"nodeType":"ParameterList","parameters":[],"src":"1977:2:27"},"returnParameters":{"id":2574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2573,"mutability":"mutable","name":"bufferPeriodDuration","nameLocation":"2010:20:27","nodeType":"VariableDeclaration","scope":2575,"src":"2003:27:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2572,"name":"uint32","nodeType":"ElementaryTypeName","src":"2003:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2002:29:27"},"scope":2835,"src":"1945:87:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2576,"nodeType":"StructuredDocumentation","src":"2038:321:27","text":" @notice Returns the Vault's buffer period end time.\n @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n timestamps are 32 bits.\n @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused"},"functionSelector":"cd51c12f","id":2581,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodEndTime","nameLocation":"2373:22:27","nodeType":"FunctionDefinition","parameters":{"id":2577,"nodeType":"ParameterList","parameters":[],"src":"2395:2:27"},"returnParameters":{"id":2580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2579,"mutability":"mutable","name":"bufferPeriodEndTime","nameLocation":"2428:19:27","nodeType":"VariableDeclaration","scope":2581,"src":"2421:26:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2578,"name":"uint32","nodeType":"ElementaryTypeName","src":"2421:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2420:28:27"},"scope":2835,"src":"2364:85:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2582,"nodeType":"StructuredDocumentation","src":"2455:193:27","text":" @notice Get the minimum number of tokens in a pool.\n @dev We expect the vast majority of pools to be 2-token.\n @return minTokens The minimum token count of a pool"},"functionSelector":"a8175b27","id":2587,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumPoolTokens","nameLocation":"2662:20:27","nodeType":"FunctionDefinition","parameters":{"id":2583,"nodeType":"ParameterList","parameters":[],"src":"2682:2:27"},"returnParameters":{"id":2586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2585,"mutability":"mutable","name":"minTokens","nameLocation":"2716:9:27","nodeType":"VariableDeclaration","scope":2587,"src":"2708:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2584,"name":"uint256","nodeType":"ElementaryTypeName","src":"2708:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2707:19:27"},"scope":2835,"src":"2653:74:27","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":2588,"nodeType":"StructuredDocumentation","src":"2733:129:27","text":" @notice Get the maximum number of tokens in a pool.\n @return maxTokens The maximum token count of a pool"},"functionSelector":"2e42f4d5","id":2593,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumPoolTokens","nameLocation":"2876:20:27","nodeType":"FunctionDefinition","parameters":{"id":2589,"nodeType":"ParameterList","parameters":[],"src":"2896:2:27"},"returnParameters":{"id":2592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2591,"mutability":"mutable","name":"maxTokens","nameLocation":"2930:9:27","nodeType":"VariableDeclaration","scope":2593,"src":"2922:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2590,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2921:19:27"},"scope":2835,"src":"2867:74:27","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":2594,"nodeType":"StructuredDocumentation","src":"2947:439:27","text":" @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization"},"functionSelector":"d0965a6b","id":2599,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolMinimumTotalSupply","nameLocation":"3400:25:27","nodeType":"FunctionDefinition","parameters":{"id":2595,"nodeType":"ParameterList","parameters":[],"src":"3425:2:27"},"returnParameters":{"id":2598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2597,"mutability":"mutable","name":"poolMinimumTotalSupply","nameLocation":"3459:22:27","nodeType":"VariableDeclaration","scope":2599,"src":"3451:30:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2596,"name":"uint256","nodeType":"ElementaryTypeName","src":"3451:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3450:32:27"},"scope":2835,"src":"3391:92:27","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":2600,"nodeType":"StructuredDocumentation","src":"3489:502:27","text":" @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n to the Vault, as buffers are not tokenized.\n @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization"},"functionSelector":"26a8a991","id":2605,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferMinimumTotalSupply","nameLocation":"4005:27:27","nodeType":"FunctionDefinition","parameters":{"id":2601,"nodeType":"ParameterList","parameters":[],"src":"4032:2:27"},"returnParameters":{"id":2604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2603,"mutability":"mutable","name":"bufferMinimumTotalSupply","nameLocation":"4066:24:27","nodeType":"VariableDeclaration","scope":2605,"src":"4058:32:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2602,"name":"uint256","nodeType":"ElementaryTypeName","src":"4058:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4057:34:27"},"scope":2835,"src":"3996:96:27","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":2606,"nodeType":"StructuredDocumentation","src":"4098:291:27","text":" @notice Get the minimum trade amount in a pool operation.\n @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number"},"functionSelector":"e2cb0ba0","id":2611,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumTradeAmount","nameLocation":"4403:21:27","nodeType":"FunctionDefinition","parameters":{"id":2607,"nodeType":"ParameterList","parameters":[],"src":"4424:2:27"},"returnParameters":{"id":2610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2609,"mutability":"mutable","name":"minimumTradeAmount","nameLocation":"4458:18:27","nodeType":"VariableDeclaration","scope":2611,"src":"4450:26:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2608,"name":"uint256","nodeType":"ElementaryTypeName","src":"4450:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4449:28:27"},"scope":2835,"src":"4394:84:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2612,"nodeType":"StructuredDocumentation","src":"4484:271:27","text":" @notice Get the minimum wrap amount in a buffer operation.\n @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n @return minimumWrapAmount The minimum wrap amount in native underlying token decimals"},"functionSelector":"53956aa2","id":2617,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumWrapAmount","nameLocation":"4769:20:27","nodeType":"FunctionDefinition","parameters":{"id":2613,"nodeType":"ParameterList","parameters":[],"src":"4789:2:27"},"returnParameters":{"id":2616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2615,"mutability":"mutable","name":"minimumWrapAmount","nameLocation":"4823:17:27","nodeType":"VariableDeclaration","scope":2617,"src":"4815:25:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2614,"name":"uint256","nodeType":"ElementaryTypeName","src":"4815:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4814:27:27"},"scope":2835,"src":"4760:82:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2618,"nodeType":"StructuredDocumentation","src":"5069:529:27","text":" @notice Indicates whether the Vault is paused.\n @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n `areBuffersPaused` to check the pause state of the buffers.\n @return vaultPaused True if the Vault is paused"},"functionSelector":"098401f5","id":2623,"implemented":false,"kind":"function","modifiers":[],"name":"isVaultPaused","nameLocation":"5612:13:27","nodeType":"FunctionDefinition","parameters":{"id":2619,"nodeType":"ParameterList","parameters":[],"src":"5625:2:27"},"returnParameters":{"id":2622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2621,"mutability":"mutable","name":"vaultPaused","nameLocation":"5656:11:27","nodeType":"VariableDeclaration","scope":2623,"src":"5651:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2620,"name":"bool","nodeType":"ElementaryTypeName","src":"5651:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5650:18:27"},"scope":2835,"src":"5603:66:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2624,"nodeType":"StructuredDocumentation","src":"5675:400:27","text":" @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n @dev Balancer timestamps are 32 bits.\n @return vaultPaused True if the Vault is paused\n @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period"},"functionSelector":"85c8c015","id":2633,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultPausedState","nameLocation":"6089:19:27","nodeType":"FunctionDefinition","parameters":{"id":2625,"nodeType":"ParameterList","parameters":[],"src":"6108:2:27"},"returnParameters":{"id":2632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2627,"mutability":"mutable","name":"vaultPaused","nameLocation":"6163:11:27","nodeType":"VariableDeclaration","scope":2633,"src":"6158:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2626,"name":"bool","nodeType":"ElementaryTypeName","src":"6158:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2629,"mutability":"mutable","name":"vaultPauseWindowEndTime","nameLocation":"6183:23:27","nodeType":"VariableDeclaration","scope":2633,"src":"6176:30:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2628,"name":"uint32","nodeType":"ElementaryTypeName","src":"6176:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2631,"mutability":"mutable","name":"vaultBufferPeriodEndTime","nameLocation":"6215:24:27","nodeType":"VariableDeclaration","scope":2633,"src":"6208:31:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2630,"name":"uint32","nodeType":"ElementaryTypeName","src":"6208:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"6157:83:27"},"scope":2835,"src":"6080:161:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2634,"nodeType":"StructuredDocumentation","src":"6247:517:27","text":" @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n are also paused (with `pauseVaultBuffers`)."},"functionSelector":"9e0879c2","id":2637,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVault","nameLocation":"6778:10:27","nodeType":"FunctionDefinition","parameters":{"id":2635,"nodeType":"ParameterList","parameters":[],"src":"6788:2:27"},"returnParameters":{"id":2636,"nodeType":"ParameterList","parameters":[],"src":"6799:0:27"},"scope":2835,"src":"6769:31:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2638,"nodeType":"StructuredDocumentation","src":"6806:569:27","text":" @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused."},"functionSelector":"0b7562be","id":2641,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVault","nameLocation":"7389:12:27","nodeType":"FunctionDefinition","parameters":{"id":2639,"nodeType":"ParameterList","parameters":[],"src":"7401:2:27"},"returnParameters":{"id":2640,"nodeType":"ParameterList","parameters":[],"src":"7412:0:27"},"scope":2835,"src":"7380:33:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2642,"nodeType":"StructuredDocumentation","src":"7639:276:27","text":" @notice Pause the Pool: an emergency action which disables all pool functions.\n @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n deployment.\n @param pool The pool being paused"},"functionSelector":"55aca1ec","id":2647,"implemented":false,"kind":"function","modifiers":[],"name":"pausePool","nameLocation":"7929:9:27","nodeType":"FunctionDefinition","parameters":{"id":2645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2644,"mutability":"mutable","name":"pool","nameLocation":"7947:4:27","nodeType":"VariableDeclaration","scope":2647,"src":"7939:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2643,"name":"address","nodeType":"ElementaryTypeName","src":"7939:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7938:14:27"},"returnParameters":{"id":2646,"nodeType":"ParameterList","parameters":[],"src":"7961:0:27"},"scope":2835,"src":"7920:42:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2648,"nodeType":"StructuredDocumentation","src":"7968:366:27","text":" @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n @param pool The pool being unpaused"},"functionSelector":"f21c38cd","id":2653,"implemented":false,"kind":"function","modifiers":[],"name":"unpausePool","nameLocation":"8348:11:27","nodeType":"FunctionDefinition","parameters":{"id":2651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2650,"mutability":"mutable","name":"pool","nameLocation":"8368:4:27","nodeType":"VariableDeclaration","scope":2653,"src":"8360:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2649,"name":"address","nodeType":"ElementaryTypeName","src":"8360:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8359:14:27"},"returnParameters":{"id":2652,"nodeType":"ParameterList","parameters":[],"src":"8382:0:27"},"scope":2835,"src":"8339:44:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2654,"nodeType":"StructuredDocumentation","src":"8606:520:27","text":" @notice Assigns a new static swap fee percentage to the specified pool.\n @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n Emits the SwapFeePercentageChanged event.\n @param pool The address of the pool for which the static swap fee will be changed\n @param swapFeePercentage The new swap fee percentage to apply to the pool"},"functionSelector":"d15126ba","id":2661,"implemented":false,"kind":"function","modifiers":[],"name":"setStaticSwapFeePercentage","nameLocation":"9140:26:27","nodeType":"FunctionDefinition","parameters":{"id":2659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2656,"mutability":"mutable","name":"pool","nameLocation":"9175:4:27","nodeType":"VariableDeclaration","scope":2661,"src":"9167:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2655,"name":"address","nodeType":"ElementaryTypeName","src":"9167:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2658,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"9189:17:27","nodeType":"VariableDeclaration","scope":2661,"src":"9181:25:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2657,"name":"uint256","nodeType":"ElementaryTypeName","src":"9181:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9166:41:27"},"returnParameters":{"id":2660,"nodeType":"ParameterList","parameters":[],"src":"9216:0:27"},"scope":2835,"src":"9131:86:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2662,"nodeType":"StructuredDocumentation","src":"9223:463:27","text":" @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n @dev Fees are sent to the ProtocolFeeController address.\n @param pool The pool on which all aggregate fees should be collected\n @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"functionSelector":"8f4ab9ca","id":2673,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"9700:20:27","nodeType":"FunctionDefinition","parameters":{"id":2665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2664,"mutability":"mutable","name":"pool","nameLocation":"9738:4:27","nodeType":"VariableDeclaration","scope":2673,"src":"9730:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2663,"name":"address","nodeType":"ElementaryTypeName","src":"9730:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9720:28:27"},"returnParameters":{"id":2672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2668,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"9784:14:27","nodeType":"VariableDeclaration","scope":2673,"src":"9767:31:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2666,"name":"uint256","nodeType":"ElementaryTypeName","src":"9767:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2667,"nodeType":"ArrayTypeName","src":"9767:9:27","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2671,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"9817:15:27","nodeType":"VariableDeclaration","scope":2673,"src":"9800:32:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2669,"name":"uint256","nodeType":"ElementaryTypeName","src":"9800:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2670,"nodeType":"ArrayTypeName","src":"9800:9:27","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9766:67:27"},"scope":2835,"src":"9691:143:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2674,"nodeType":"StructuredDocumentation","src":"9840:755:27","text":" @notice Update an aggregate swap fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateSwapFeePercentageChanged` event.\n @param pool The pool whose swap fee percentage will be updated\n @param newAggregateSwapFeePercentage The new aggregate swap fee percentage"},"functionSelector":"5e0b06f4","id":2681,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateSwapFeePercentage","nameLocation":"10609:32:27","nodeType":"FunctionDefinition","parameters":{"id":2679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2676,"mutability":"mutable","name":"pool","nameLocation":"10650:4:27","nodeType":"VariableDeclaration","scope":2681,"src":"10642:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2675,"name":"address","nodeType":"ElementaryTypeName","src":"10642:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2678,"mutability":"mutable","name":"newAggregateSwapFeePercentage","nameLocation":"10664:29:27","nodeType":"VariableDeclaration","scope":2681,"src":"10656:37:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2677,"name":"uint256","nodeType":"ElementaryTypeName","src":"10656:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10641:53:27"},"returnParameters":{"id":2680,"nodeType":"ParameterList","parameters":[],"src":"10703:0:27"},"scope":2835,"src":"10600:104:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2682,"nodeType":"StructuredDocumentation","src":"10710:760:27","text":" @notice Update an aggregate yield fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateYieldFeePercentageChanged` event.\n @param pool The pool whose yield fee percentage will be updated\n @param newAggregateYieldFeePercentage The new aggregate yield fee percentage"},"functionSelector":"e253670a","id":2689,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateYieldFeePercentage","nameLocation":"11484:33:27","nodeType":"FunctionDefinition","parameters":{"id":2687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2684,"mutability":"mutable","name":"pool","nameLocation":"11526:4:27","nodeType":"VariableDeclaration","scope":2689,"src":"11518:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2683,"name":"address","nodeType":"ElementaryTypeName","src":"11518:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2686,"mutability":"mutable","name":"newAggregateYieldFeePercentage","nameLocation":"11540:30:27","nodeType":"VariableDeclaration","scope":2689,"src":"11532:38:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2685,"name":"uint256","nodeType":"ElementaryTypeName","src":"11532:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11517:54:27"},"returnParameters":{"id":2688,"nodeType":"ParameterList","parameters":[],"src":"11580:0:27"},"scope":2835,"src":"11475:106:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2690,"nodeType":"StructuredDocumentation","src":"11587:249:27","text":" @notice Sets a new Protocol Fee Controller for the Vault.\n @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n @param newProtocolFeeController The address of the new Protocol Fee Controller"},"functionSelector":"2d771389","id":2696,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolFeeController","nameLocation":"11850:24:27","nodeType":"FunctionDefinition","parameters":{"id":2694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2693,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"11898:24:27","nodeType":"VariableDeclaration","scope":2696,"src":"11875:47:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":2692,"nodeType":"UserDefinedTypeName","pathNode":{"id":2691,"name":"IProtocolFeeController","nameLocations":["11875:22:27"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"11875:22:27"},"referencedDeclaration":1955,"src":"11875:22:27","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"11874:49:27"},"returnParameters":{"id":2695,"nodeType":"ParameterList","parameters":[],"src":"11932:0:27"},"scope":2835,"src":"11841:92:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2697,"nodeType":"StructuredDocumentation","src":"12160:557:27","text":" @notice Enable recovery mode for a pool.\n @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n @param pool The address of the pool"},"functionSelector":"dc3f574e","id":2702,"implemented":false,"kind":"function","modifiers":[],"name":"enableRecoveryMode","nameLocation":"12731:18:27","nodeType":"FunctionDefinition","parameters":{"id":2700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2699,"mutability":"mutable","name":"pool","nameLocation":"12758:4:27","nodeType":"VariableDeclaration","scope":2702,"src":"12750:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2698,"name":"address","nodeType":"ElementaryTypeName","src":"12750:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12749:14:27"},"returnParameters":{"id":2701,"nodeType":"ParameterList","parameters":[],"src":"12772:0:27"},"scope":2835,"src":"12722:51:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2703,"nodeType":"StructuredDocumentation","src":"12779:409:27","text":" @notice Disable recovery mode for a pool.\n @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n potentially fail if there is an issue with any associated Rate Providers.\n @param pool The address of the pool"},"functionSelector":"bffb78b2","id":2708,"implemented":false,"kind":"function","modifiers":[],"name":"disableRecoveryMode","nameLocation":"13202:19:27","nodeType":"FunctionDefinition","parameters":{"id":2706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2705,"mutability":"mutable","name":"pool","nameLocation":"13230:4:27","nodeType":"VariableDeclaration","scope":2708,"src":"13222:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2704,"name":"address","nodeType":"ElementaryTypeName","src":"13222:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13221:14:27"},"returnParameters":{"id":2707,"nodeType":"ParameterList","parameters":[],"src":"13244:0:27"},"scope":2835,"src":"13193:52:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2709,"nodeType":"StructuredDocumentation","src":"13476:653:27","text":" @notice Disables query functionality on the Vault. Can only be called by governance.\n @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n disabling queries is completely necessary; queries can still be re-enabled after this call."},"functionSelector":"de1a36a6","id":2712,"implemented":false,"kind":"function","modifiers":[],"name":"disableQuery","nameLocation":"14143:12:27","nodeType":"FunctionDefinition","parameters":{"id":2710,"nodeType":"ParameterList","parameters":[],"src":"14155:2:27"},"returnParameters":{"id":2711,"nodeType":"ParameterList","parameters":[],"src":"14166:0:27"},"scope":2835,"src":"14134:33:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2713,"nodeType":"StructuredDocumentation","src":"14173:223:27","text":" @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system."},"functionSelector":"821440f2","id":2716,"implemented":false,"kind":"function","modifiers":[],"name":"disableQueryPermanently","nameLocation":"14410:23:27","nodeType":"FunctionDefinition","parameters":{"id":2714,"nodeType":"ParameterList","parameters":[],"src":"14433:2:27"},"returnParameters":{"id":2715,"nodeType":"ParameterList","parameters":[],"src":"14444:0:27"},"scope":2835,"src":"14401:44:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2717,"nodeType":"StructuredDocumentation","src":"14451:166:27","text":" @notice Enables query functionality on the Vault. Can only be called by governance.\n @dev Only works if queries are not permanently disabled."},"functionSelector":"e0d55605","id":2720,"implemented":false,"kind":"function","modifiers":[],"name":"enableQuery","nameLocation":"14631:11:27","nodeType":"FunctionDefinition","parameters":{"id":2718,"nodeType":"ParameterList","parameters":[],"src":"14642:2:27"},"returnParameters":{"id":2719,"nodeType":"ParameterList","parameters":[],"src":"14653:0:27"},"scope":2835,"src":"14622:32:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2721,"nodeType":"StructuredDocumentation","src":"14881:590:27","text":" @notice Indicates whether the Vault buffers are paused.\n @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n @return buffersPaused True if the Vault buffers are paused"},"functionSelector":"55cba7fe","id":2726,"implemented":false,"kind":"function","modifiers":[],"name":"areBuffersPaused","nameLocation":"15485:16:27","nodeType":"FunctionDefinition","parameters":{"id":2722,"nodeType":"ParameterList","parameters":[],"src":"15501:2:27"},"returnParameters":{"id":2725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2724,"mutability":"mutable","name":"buffersPaused","nameLocation":"15532:13:27","nodeType":"VariableDeclaration","scope":2726,"src":"15527:18:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2723,"name":"bool","nodeType":"ElementaryTypeName","src":"15527:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15526:20:27"},"scope":2835,"src":"15476:71:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2727,"nodeType":"StructuredDocumentation","src":"15553:619:27","text":" @notice Pauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n possible to pause vault buffers individually.\n This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n buffers, and vice versa."},"functionSelector":"e085c5a8","id":2730,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVaultBuffers","nameLocation":"16186:17:27","nodeType":"FunctionDefinition","parameters":{"id":2728,"nodeType":"ParameterList","parameters":[],"src":"16203:2:27"},"returnParameters":{"id":2729,"nodeType":"ParameterList","parameters":[],"src":"16214:0:27"},"scope":2835,"src":"16177:38:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2731,"nodeType":"StructuredDocumentation","src":"16221:545:27","text":" @notice Unpauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n If the Vault was also paused, it will remain in that state until explicitly unpaused.\n This is a permissioned call."},"functionSelector":"b9212b49","id":2734,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVaultBuffers","nameLocation":"16780:19:27","nodeType":"FunctionDefinition","parameters":{"id":2732,"nodeType":"ParameterList","parameters":[],"src":"16799:2:27"},"returnParameters":{"id":2733,"nodeType":"ParameterList","parameters":[],"src":"16810:0:27"},"scope":2835,"src":"16771:40:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2735,"nodeType":"StructuredDocumentation","src":"16817:860:27","text":" @notice Initializes buffer for the given wrapped token.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n native decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals."},"functionSelector":"653eb3b0","id":2751,"implemented":false,"kind":"function","modifiers":[],"name":"initializeBuffer","nameLocation":"17691:16:27","nodeType":"FunctionDefinition","parameters":{"id":2747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2738,"mutability":"mutable","name":"wrappedToken","nameLocation":"17726:12:27","nodeType":"VariableDeclaration","scope":2751,"src":"17717:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":2737,"nodeType":"UserDefinedTypeName","pathNode":{"id":2736,"name":"IERC4626","nameLocations":["17717:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"17717:8:27"},"referencedDeclaration":9846,"src":"17717:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2740,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"17756:19:27","nodeType":"VariableDeclaration","scope":2751,"src":"17748:27:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2739,"name":"uint256","nodeType":"ElementaryTypeName","src":"17748:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2742,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"17793:16:27","nodeType":"VariableDeclaration","scope":2751,"src":"17785:24:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2741,"name":"uint256","nodeType":"ElementaryTypeName","src":"17785:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2744,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17827:15:27","nodeType":"VariableDeclaration","scope":2751,"src":"17819:23:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2743,"name":"uint256","nodeType":"ElementaryTypeName","src":"17819:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2746,"mutability":"mutable","name":"sharesOwner","nameLocation":"17860:11:27","nodeType":"VariableDeclaration","scope":2751,"src":"17852:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2745,"name":"address","nodeType":"ElementaryTypeName","src":"17852:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17707:170:27"},"returnParameters":{"id":2750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2749,"mutability":"mutable","name":"issuedShares","nameLocation":"17904:12:27","nodeType":"VariableDeclaration","scope":2751,"src":"17896:20:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2748,"name":"uint256","nodeType":"ElementaryTypeName","src":"17896:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17895:22:27"},"scope":2835,"src":"17682:236:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2752,"nodeType":"StructuredDocumentation","src":"17924:1010:27","text":" @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n @dev The buffer needs to be initialized beforehand.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n underlying token native decimals\n @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n token native decimals\n @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n in underlying token decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer"},"functionSelector":"e2a92b1a","id":2770,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityToBuffer","nameLocation":"18948:20:27","nodeType":"FunctionDefinition","parameters":{"id":2764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2755,"mutability":"mutable","name":"wrappedToken","nameLocation":"18987:12:27","nodeType":"VariableDeclaration","scope":2770,"src":"18978:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":2754,"nodeType":"UserDefinedTypeName","pathNode":{"id":2753,"name":"IERC4626","nameLocations":["18978:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"18978:8:27"},"referencedDeclaration":9846,"src":"18978:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2757,"mutability":"mutable","name":"maxAmountUnderlyingInRaw","nameLocation":"19017:24:27","nodeType":"VariableDeclaration","scope":2770,"src":"19009:32:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2756,"name":"uint256","nodeType":"ElementaryTypeName","src":"19009:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2759,"mutability":"mutable","name":"maxAmountWrappedInRaw","nameLocation":"19059:21:27","nodeType":"VariableDeclaration","scope":2770,"src":"19051:29:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2758,"name":"uint256","nodeType":"ElementaryTypeName","src":"19051:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2761,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"19098:18:27","nodeType":"VariableDeclaration","scope":2770,"src":"19090:26:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2760,"name":"uint256","nodeType":"ElementaryTypeName","src":"19090:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2763,"mutability":"mutable","name":"sharesOwner","nameLocation":"19134:11:27","nodeType":"VariableDeclaration","scope":2770,"src":"19126:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2762,"name":"address","nodeType":"ElementaryTypeName","src":"19126:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18968:183:27"},"returnParameters":{"id":2769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2766,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"19178:19:27","nodeType":"VariableDeclaration","scope":2770,"src":"19170:27:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2765,"name":"uint256","nodeType":"ElementaryTypeName","src":"19170:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2768,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"19207:16:27","nodeType":"VariableDeclaration","scope":2770,"src":"19199:24:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2767,"name":"uint256","nodeType":"ElementaryTypeName","src":"19199:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19169:55:27"},"scope":2835,"src":"18939:286:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2771,"nodeType":"StructuredDocumentation","src":"19231:1458:27","text":" @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n Pre-conditions:\n - The buffer needs to be initialized.\n - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n total shares. It is expressed in underlying token native decimals\n @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n in underlying token native decimals\n @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n wrapped token native decimals\n @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user"},"functionSelector":"ebc7955c","id":2787,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityFromBuffer","nameLocation":"20703:25:27","nodeType":"FunctionDefinition","parameters":{"id":2781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2774,"mutability":"mutable","name":"wrappedToken","nameLocation":"20747:12:27","nodeType":"VariableDeclaration","scope":2787,"src":"20738:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":2773,"nodeType":"UserDefinedTypeName","pathNode":{"id":2772,"name":"IERC4626","nameLocations":["20738:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"20738:8:27"},"referencedDeclaration":9846,"src":"20738:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2776,"mutability":"mutable","name":"sharesToRemove","nameLocation":"20777:14:27","nodeType":"VariableDeclaration","scope":2787,"src":"20769:22:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2775,"name":"uint256","nodeType":"ElementaryTypeName","src":"20769:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2778,"mutability":"mutable","name":"minAmountUnderlyingOutRaw","nameLocation":"20809:25:27","nodeType":"VariableDeclaration","scope":2787,"src":"20801:33:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2777,"name":"uint256","nodeType":"ElementaryTypeName","src":"20801:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2780,"mutability":"mutable","name":"minAmountWrappedOutRaw","nameLocation":"20852:22:27","nodeType":"VariableDeclaration","scope":2787,"src":"20844:30:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2779,"name":"uint256","nodeType":"ElementaryTypeName","src":"20844:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20728:152:27"},"returnParameters":{"id":2786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2783,"mutability":"mutable","name":"removedUnderlyingBalanceRaw","nameLocation":"20907:27:27","nodeType":"VariableDeclaration","scope":2787,"src":"20899:35:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2782,"name":"uint256","nodeType":"ElementaryTypeName","src":"20899:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2785,"mutability":"mutable","name":"removedWrappedBalanceRaw","nameLocation":"20944:24:27","nodeType":"VariableDeclaration","scope":2787,"src":"20936:32:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2784,"name":"uint256","nodeType":"ElementaryTypeName","src":"20936:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20898:71:27"},"scope":2835,"src":"20694:276:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2788,"nodeType":"StructuredDocumentation","src":"20976:382:27","text":" @notice Returns the asset registered for a given wrapped token.\n @dev The asset can never change after buffer initialization.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n has not been initialized."},"functionSelector":"0387587d","id":2796,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferAsset","nameLocation":"21372:14:27","nodeType":"FunctionDefinition","parameters":{"id":2792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2791,"mutability":"mutable","name":"wrappedToken","nameLocation":"21396:12:27","nodeType":"VariableDeclaration","scope":2796,"src":"21387:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":2790,"nodeType":"UserDefinedTypeName","pathNode":{"id":2789,"name":"IERC4626","nameLocations":["21387:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"21387:8:27"},"referencedDeclaration":9846,"src":"21387:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"21386:23:27"},"returnParameters":{"id":2795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2794,"mutability":"mutable","name":"underlyingToken","nameLocation":"21441:15:27","nodeType":"VariableDeclaration","scope":2796,"src":"21433:23:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2793,"name":"address","nodeType":"ElementaryTypeName","src":"21433:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21432:25:27"},"scope":2835,"src":"21363:95:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2797,"nodeType":"StructuredDocumentation","src":"21464:441:27","text":" @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n in the buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals"},"functionSelector":"9385e39a","id":2807,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferOwnerShares","nameLocation":"21919:20:27","nodeType":"FunctionDefinition","parameters":{"id":2803,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2800,"mutability":"mutable","name":"wrappedToken","nameLocation":"21958:12:27","nodeType":"VariableDeclaration","scope":2807,"src":"21949:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":2799,"nodeType":"UserDefinedTypeName","pathNode":{"id":2798,"name":"IERC4626","nameLocations":["21949:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"21949:8:27"},"referencedDeclaration":9846,"src":"21949:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2802,"mutability":"mutable","name":"liquidityOwner","nameLocation":"21988:14:27","nodeType":"VariableDeclaration","scope":2807,"src":"21980:22:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2801,"name":"address","nodeType":"ElementaryTypeName","src":"21980:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21939:69:27"},"returnParameters":{"id":2806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2805,"mutability":"mutable","name":"ownerShares","nameLocation":"22040:11:27","nodeType":"VariableDeclaration","scope":2807,"src":"22032:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2804,"name":"uint256","nodeType":"ElementaryTypeName","src":"22032:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22031:21:27"},"scope":2835,"src":"21910:143:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2808,"nodeType":"StructuredDocumentation","src":"22059:281:27","text":" @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals"},"functionSelector":"f2784e07","id":2816,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferTotalShares","nameLocation":"22354:20:27","nodeType":"FunctionDefinition","parameters":{"id":2812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2811,"mutability":"mutable","name":"wrappedToken","nameLocation":"22384:12:27","nodeType":"VariableDeclaration","scope":2816,"src":"22375:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":2810,"nodeType":"UserDefinedTypeName","pathNode":{"id":2809,"name":"IERC4626","nameLocations":["22375:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"22375:8:27"},"referencedDeclaration":9846,"src":"22375:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"22374:23:27"},"returnParameters":{"id":2815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2814,"mutability":"mutable","name":"bufferShares","nameLocation":"22429:12:27","nodeType":"VariableDeclaration","scope":2816,"src":"22421:20:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2813,"name":"uint256","nodeType":"ElementaryTypeName","src":"22421:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22420:22:27"},"scope":2835,"src":"22345:98:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2817,"nodeType":"StructuredDocumentation","src":"22449:521:27","text":" @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n @dev All values are in native token decimals of the wrapped or underlying tokens.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals"},"functionSelector":"4021fe0f","id":2827,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferBalance","nameLocation":"22984:16:27","nodeType":"FunctionDefinition","parameters":{"id":2821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2820,"mutability":"mutable","name":"wrappedToken","nameLocation":"23019:12:27","nodeType":"VariableDeclaration","scope":2827,"src":"23010:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":2819,"nodeType":"UserDefinedTypeName","pathNode":{"id":2818,"name":"IERC4626","nameLocations":["23010:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"23010:8:27"},"referencedDeclaration":9846,"src":"23010:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"23000:37:27"},"returnParameters":{"id":2826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2823,"mutability":"mutable","name":"underlyingBalanceRaw","nameLocation":"23069:20:27","nodeType":"VariableDeclaration","scope":2827,"src":"23061:28:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2822,"name":"uint256","nodeType":"ElementaryTypeName","src":"23061:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2825,"mutability":"mutable","name":"wrappedBalanceRaw","nameLocation":"23099:17:27","nodeType":"VariableDeclaration","scope":2827,"src":"23091:25:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2824,"name":"uint256","nodeType":"ElementaryTypeName","src":"23091:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23060:57:27"},"scope":2835,"src":"22975:143:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2828,"nodeType":"StructuredDocumentation","src":"23342:202:27","text":" @notice Sets a new Authorizer for the Vault.\n @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n @param newAuthorizer The address of the new authorizer"},"functionSelector":"058a628f","id":2834,"implemented":false,"kind":"function","modifiers":[],"name":"setAuthorizer","nameLocation":"23558:13:27","nodeType":"FunctionDefinition","parameters":{"id":2832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2831,"mutability":"mutable","name":"newAuthorizer","nameLocation":"23584:13:27","nodeType":"VariableDeclaration","scope":2834,"src":"23572:25:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"},"typeName":{"id":2830,"nodeType":"UserDefinedTypeName","pathNode":{"id":2829,"name":"IAuthorizer","nameLocations":["23572:11:27"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"23572:11:27"},"referencedDeclaration":1341,"src":"23572:11:27","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23571:27:27"},"returnParameters":{"id":2833,"nodeType":"ParameterList","parameters":[],"src":"23607:0:27"},"scope":2835,"src":"23549:59:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2836,"src":"586:23024:27","usedErrors":[],"usedEvents":[]}],"src":"46:23565:27"},"id":27},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","exportedSymbols":{"IERC20":[10576],"IERC4626":[9846],"IVaultErrors":[3202]},"id":3203,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2837,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:28"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2839,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3203,"sourceUnit":9847,"src":"72:75:28","symbolAliases":[{"foreign":{"id":2838,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"81:8:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2841,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3203,"sourceUnit":10577,"src":"148:72:28","symbolAliases":[{"foreign":{"id":2840,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"157:6:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultErrors","contractDependencies":[],"contractKind":"interface","documentation":{"id":2842,"nodeType":"StructuredDocumentation","src":"222:94:28","text":"@notice Errors are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":3202,"linearizedBaseContracts":[3202],"name":"IVaultErrors","nameLocation":"326:12:28","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2843,"nodeType":"StructuredDocumentation","src":"576:149:28","text":" @notice A pool has already been registered. `registerPool` may only be called once.\n @param pool The already registered pool"},"errorSelector":"db771c80","id":2847,"name":"PoolAlreadyRegistered","nameLocation":"736:21:28","nodeType":"ErrorDefinition","parameters":{"id":2846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2845,"mutability":"mutable","name":"pool","nameLocation":"766:4:28","nodeType":"VariableDeclaration","scope":2847,"src":"758:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2844,"name":"address","nodeType":"ElementaryTypeName","src":"758:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"757:14:28"},"src":"730:42:28"},{"documentation":{"id":2848,"nodeType":"StructuredDocumentation","src":"778:149:28","text":" @notice A pool has already been initialized. `initialize` may only be called once.\n @param pool The already initialized pool"},"errorSelector":"218e3747","id":2852,"name":"PoolAlreadyInitialized","nameLocation":"938:22:28","nodeType":"ErrorDefinition","parameters":{"id":2851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2850,"mutability":"mutable","name":"pool","nameLocation":"969:4:28","nodeType":"VariableDeclaration","scope":2852,"src":"961:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2849,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"960:14:28"},"src":"932:43:28"},{"documentation":{"id":2853,"nodeType":"StructuredDocumentation","src":"981:99:28","text":" @notice A pool has not been registered.\n @param pool The unregistered pool"},"errorSelector":"9e51bd5c","id":2857,"name":"PoolNotRegistered","nameLocation":"1091:17:28","nodeType":"ErrorDefinition","parameters":{"id":2856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2855,"mutability":"mutable","name":"pool","nameLocation":"1117:4:28","nodeType":"VariableDeclaration","scope":2857,"src":"1109:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2854,"name":"address","nodeType":"ElementaryTypeName","src":"1109:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1108:14:28"},"src":"1085:38:28"},{"documentation":{"id":2858,"nodeType":"StructuredDocumentation","src":"1129:112:28","text":" @notice A referenced pool has not been initialized.\n @param pool The uninitialized pool"},"errorSelector":"4bdace13","id":2862,"name":"PoolNotInitialized","nameLocation":"1252:18:28","nodeType":"ErrorDefinition","parameters":{"id":2861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2860,"mutability":"mutable","name":"pool","nameLocation":"1279:4:28","nodeType":"VariableDeclaration","scope":2862,"src":"1271:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2859,"name":"address","nodeType":"ElementaryTypeName","src":"1271:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1270:14:28"},"src":"1246:39:28"},{"documentation":{"id":2863,"nodeType":"StructuredDocumentation","src":"1291:274:28","text":" @notice A hook contract rejected a pool on registration.\n @param poolHooksContract Address of the hook contract that rejected the pool registration\n @param pool Address of the rejected pool\n @param poolFactory Address of the pool factory"},"errorSelector":"fa93d814","id":2871,"name":"HookRegistrationFailed","nameLocation":"1576:22:28","nodeType":"ErrorDefinition","parameters":{"id":2870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2865,"mutability":"mutable","name":"poolHooksContract","nameLocation":"1607:17:28","nodeType":"VariableDeclaration","scope":2871,"src":"1599:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2864,"name":"address","nodeType":"ElementaryTypeName","src":"1599:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2867,"mutability":"mutable","name":"pool","nameLocation":"1634:4:28","nodeType":"VariableDeclaration","scope":2871,"src":"1626:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2866,"name":"address","nodeType":"ElementaryTypeName","src":"1626:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2869,"mutability":"mutable","name":"poolFactory","nameLocation":"1648:11:28","nodeType":"VariableDeclaration","scope":2871,"src":"1640:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2868,"name":"address","nodeType":"ElementaryTypeName","src":"1640:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1598:62:28"},"src":"1570:91:28"},{"documentation":{"id":2872,"nodeType":"StructuredDocumentation","src":"1667:136:28","text":" @notice A token was already registered (i.e., it is a duplicate in the pool).\n @param token The duplicate token"},"errorSelector":"4f4b634e","id":2877,"name":"TokenAlreadyRegistered","nameLocation":"1814:22:28","nodeType":"ErrorDefinition","parameters":{"id":2876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2875,"mutability":"mutable","name":"token","nameLocation":"1844:5:28","nodeType":"VariableDeclaration","scope":2877,"src":"1837:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2874,"nodeType":"UserDefinedTypeName","pathNode":{"id":2873,"name":"IERC20","nameLocations":["1837:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1837:6:28"},"referencedDeclaration":10576,"src":"1837:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1836:14:28"},"src":"1808:43:28"},{"documentation":{"id":2878,"nodeType":"StructuredDocumentation","src":"1857:57:28","text":"@notice The token count is below the minimum allowed."},"errorSelector":"5ed4ba8f","id":2880,"name":"MinTokens","nameLocation":"1925:9:28","nodeType":"ErrorDefinition","parameters":{"id":2879,"nodeType":"ParameterList","parameters":[],"src":"1934:2:28"},"src":"1919:18:28"},{"documentation":{"id":2881,"nodeType":"StructuredDocumentation","src":"1943:57:28","text":"@notice The token count is above the maximum allowed."},"errorSelector":"707bdf58","id":2883,"name":"MaxTokens","nameLocation":"2011:9:28","nodeType":"ErrorDefinition","parameters":{"id":2882,"nodeType":"ParameterList","parameters":[],"src":"2020:2:28"},"src":"2005:18:28"},{"documentation":{"id":2884,"nodeType":"StructuredDocumentation","src":"2029:61:28","text":"@notice Invalid tokens (e.g., zero) cannot be registered."},"errorSelector":"c1ab6dc1","id":2886,"name":"InvalidToken","nameLocation":"2101:12:28","nodeType":"ErrorDefinition","parameters":{"id":2885,"nodeType":"ParameterList","parameters":[],"src":"2113:2:28"},"src":"2095:21:28"},{"documentation":{"id":2887,"nodeType":"StructuredDocumentation","src":"2122:86:28","text":"@notice The token type given in a TokenConfig during pool registration is invalid."},"errorSelector":"a1e9dd9d","id":2889,"name":"InvalidTokenType","nameLocation":"2219:16:28","nodeType":"ErrorDefinition","parameters":{"id":2888,"nodeType":"ParameterList","parameters":[],"src":"2235:2:28"},"src":"2213:25:28"},{"documentation":{"id":2890,"nodeType":"StructuredDocumentation","src":"2244:76:28","text":"@notice The data in a TokenConfig struct is inconsistent or unsupported."},"errorSelector":"df450632","id":2892,"name":"InvalidTokenConfiguration","nameLocation":"2331:25:28","nodeType":"ErrorDefinition","parameters":{"id":2891,"nodeType":"ParameterList","parameters":[],"src":"2356:2:28"},"src":"2325:34:28"},{"documentation":{"id":2893,"nodeType":"StructuredDocumentation","src":"2365:64:28","text":"@notice Tokens with more than 18 decimals are not supported."},"errorSelector":"686d3607","id":2895,"name":"InvalidTokenDecimals","nameLocation":"2440:20:28","nodeType":"ErrorDefinition","parameters":{"id":2894,"nodeType":"ParameterList","parameters":[],"src":"2460:2:28"},"src":"2434:29:28"},{"documentation":{"id":2896,"nodeType":"StructuredDocumentation","src":"2469:287:28","text":" @notice The token list passed into an operation does not match the pool tokens in the pool.\n @param pool Address of the pool\n @param expectedToken The correct token at a given index in the pool\n @param actualToken The actual token found at that index"},"errorSelector":"ffe261a1","id":2904,"name":"TokensMismatch","nameLocation":"2767:14:28","nodeType":"ErrorDefinition","parameters":{"id":2903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2898,"mutability":"mutable","name":"pool","nameLocation":"2790:4:28","nodeType":"VariableDeclaration","scope":2904,"src":"2782:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2897,"name":"address","nodeType":"ElementaryTypeName","src":"2782:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2900,"mutability":"mutable","name":"expectedToken","nameLocation":"2804:13:28","nodeType":"VariableDeclaration","scope":2904,"src":"2796:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2899,"name":"address","nodeType":"ElementaryTypeName","src":"2796:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2902,"mutability":"mutable","name":"actualToken","nameLocation":"2827:11:28","nodeType":"VariableDeclaration","scope":2904,"src":"2819:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2901,"name":"address","nodeType":"ElementaryTypeName","src":"2819:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2781:58:28"},"src":"2761:79:28"},{"documentation":{"id":2905,"nodeType":"StructuredDocumentation","src":"3071:85:28","text":"@notice A transient accounting operation completed with outstanding token deltas."},"errorSelector":"20f1d86d","id":2907,"name":"BalanceNotSettled","nameLocation":"3167:17:28","nodeType":"ErrorDefinition","parameters":{"id":2906,"nodeType":"ParameterList","parameters":[],"src":"3184:2:28"},"src":"3161:26:28"},{"documentation":{"id":2908,"nodeType":"StructuredDocumentation","src":"3193:97:28","text":"@notice A user called a Vault function (swap, add/remove liquidity) outside the lock context."},"errorSelector":"c09ba736","id":2910,"name":"VaultIsNotUnlocked","nameLocation":"3301:18:28","nodeType":"ErrorDefinition","parameters":{"id":2909,"nodeType":"ParameterList","parameters":[],"src":"3319:2:28"},"src":"3295:27:28"},{"documentation":{"id":2911,"nodeType":"StructuredDocumentation","src":"3328:105:28","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"53f976d4","id":2913,"name":"DynamicSwapFeeHookFailed","nameLocation":"3444:24:28","nodeType":"ErrorDefinition","parameters":{"id":2912,"nodeType":"ParameterList","parameters":[],"src":"3468:2:28"},"src":"3438:33:28"},{"documentation":{"id":2914,"nodeType":"StructuredDocumentation","src":"3477:105:28","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"e91e17e7","id":2916,"name":"BeforeSwapHookFailed","nameLocation":"3593:20:28","nodeType":"ErrorDefinition","parameters":{"id":2915,"nodeType":"ParameterList","parameters":[],"src":"3613:2:28"},"src":"3587:29:28"},{"documentation":{"id":2917,"nodeType":"StructuredDocumentation","src":"3622:104:28","text":"@notice The pool has returned false to the afterSwap hook, indicating the transaction should revert."},"errorSelector":"15a29dec","id":2919,"name":"AfterSwapHookFailed","nameLocation":"3737:19:28","nodeType":"ErrorDefinition","parameters":{"id":2918,"nodeType":"ParameterList","parameters":[],"src":"3756:2:28"},"src":"3731:28:28"},{"documentation":{"id":2920,"nodeType":"StructuredDocumentation","src":"3765:111:28","text":"@notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert."},"errorSelector":"60612925","id":2922,"name":"BeforeInitializeHookFailed","nameLocation":"3887:26:28","nodeType":"ErrorDefinition","parameters":{"id":2921,"nodeType":"ParameterList","parameters":[],"src":"3913:2:28"},"src":"3881:35:28"},{"documentation":{"id":2923,"nodeType":"StructuredDocumentation","src":"3922:110:28","text":"@notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert."},"errorSelector":"0f23dbc6","id":2925,"name":"AfterInitializeHookFailed","nameLocation":"4043:25:28","nodeType":"ErrorDefinition","parameters":{"id":2924,"nodeType":"ParameterList","parameters":[],"src":"4068:2:28"},"src":"4037:34:28"},{"documentation":{"id":2926,"nodeType":"StructuredDocumentation","src":"4077:113:28","text":"@notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"0b2eb652","id":2928,"name":"BeforeAddLiquidityHookFailed","nameLocation":"4201:28:28","nodeType":"ErrorDefinition","parameters":{"id":2927,"nodeType":"ParameterList","parameters":[],"src":"4229:2:28"},"src":"4195:37:28"},{"documentation":{"id":2929,"nodeType":"StructuredDocumentation","src":"4238:112:28","text":"@notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"e1249165","id":2931,"name":"AfterAddLiquidityHookFailed","nameLocation":"4361:27:28","nodeType":"ErrorDefinition","parameters":{"id":2930,"nodeType":"ParameterList","parameters":[],"src":"4388:2:28"},"src":"4355:36:28"},{"documentation":{"id":2932,"nodeType":"StructuredDocumentation","src":"4397:116:28","text":"@notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"2aaf8866","id":2934,"name":"BeforeRemoveLiquidityHookFailed","nameLocation":"4524:31:28","nodeType":"ErrorDefinition","parameters":{"id":2933,"nodeType":"ParameterList","parameters":[],"src":"4555:2:28"},"src":"4518:40:28"},{"documentation":{"id":2935,"nodeType":"StructuredDocumentation","src":"4564:115:28","text":"@notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"1d3391d8","id":2937,"name":"AfterRemoveLiquidityHookFailed","nameLocation":"4690:30:28","nodeType":"ErrorDefinition","parameters":{"id":2936,"nodeType":"ParameterList","parameters":[],"src":"4720:2:28"},"src":"4684:39:28"},{"documentation":{"id":2938,"nodeType":"StructuredDocumentation","src":"4729:115:28","text":"@notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance)."},"errorSelector":"e5d185cf","id":2940,"name":"RouterNotTrusted","nameLocation":"4855:16:28","nodeType":"ErrorDefinition","parameters":{"id":2939,"nodeType":"ParameterList","parameters":[],"src":"4871:2:28"},"src":"4849:25:28"},{"documentation":{"id":2941,"nodeType":"StructuredDocumentation","src":"5097:47:28","text":"@notice The user tried to swap zero tokens."},"errorSelector":"57a456b7","id":2943,"name":"AmountGivenZero","nameLocation":"5155:15:28","nodeType":"ErrorDefinition","parameters":{"id":2942,"nodeType":"ParameterList","parameters":[],"src":"5170:2:28"},"src":"5149:24:28"},{"documentation":{"id":2944,"nodeType":"StructuredDocumentation","src":"5179:58:28","text":"@notice The user attempted to swap a token for itself."},"errorSelector":"a54b181d","id":2946,"name":"CannotSwapSameToken","nameLocation":"5248:19:28","nodeType":"ErrorDefinition","parameters":{"id":2945,"nodeType":"ParameterList","parameters":[],"src":"5267:2:28"},"src":"5242:28:28"},{"documentation":{"id":2947,"nodeType":"StructuredDocumentation","src":"5276:137:28","text":" @notice The user attempted to operate with a token that is not in the pool.\n @param token The unregistered token"},"errorSelector":"ddef98d7","id":2952,"name":"TokenNotRegistered","nameLocation":"5424:18:28","nodeType":"ErrorDefinition","parameters":{"id":2951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2950,"mutability":"mutable","name":"token","nameLocation":"5450:5:28","nodeType":"VariableDeclaration","scope":2952,"src":"5443:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2949,"nodeType":"UserDefinedTypeName","pathNode":{"id":2948,"name":"IERC20","nameLocations":["5443:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"5443:6:28"},"referencedDeclaration":10576,"src":"5443:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"5442:14:28"},"src":"5418:39:28"},{"documentation":{"id":2953,"nodeType":"StructuredDocumentation","src":"5463:215:28","text":" @notice An amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"e2ea151b","id":2959,"name":"SwapLimit","nameLocation":"5689:9:28","nodeType":"ErrorDefinition","parameters":{"id":2958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2955,"mutability":"mutable","name":"amount","nameLocation":"5707:6:28","nodeType":"VariableDeclaration","scope":2959,"src":"5699:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2954,"name":"uint256","nodeType":"ElementaryTypeName","src":"5699:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2957,"mutability":"mutable","name":"limit","nameLocation":"5723:5:28","nodeType":"VariableDeclaration","scope":2959,"src":"5715:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2956,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5698:31:28"},"src":"5683:47:28"},{"documentation":{"id":2960,"nodeType":"StructuredDocumentation","src":"5736:228:28","text":" @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"cc0e4a99","id":2966,"name":"HookAdjustedSwapLimit","nameLocation":"5975:21:28","nodeType":"ErrorDefinition","parameters":{"id":2965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2962,"mutability":"mutable","name":"amount","nameLocation":"6005:6:28","nodeType":"VariableDeclaration","scope":2966,"src":"5997:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2961,"name":"uint256","nodeType":"ElementaryTypeName","src":"5997:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2964,"mutability":"mutable","name":"limit","nameLocation":"6021:5:28","nodeType":"VariableDeclaration","scope":2966,"src":"6013:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2963,"name":"uint256","nodeType":"ElementaryTypeName","src":"6013:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5996:31:28"},"src":"5969:59:28"},{"documentation":{"id":2967,"nodeType":"StructuredDocumentation","src":"6034:87:28","text":"@notice The amount given or calculated for an operation is below the minimum limit."},"errorSelector":"1ed4d118","id":2969,"name":"TradeAmountTooSmall","nameLocation":"6132:19:28","nodeType":"ErrorDefinition","parameters":{"id":2968,"nodeType":"ParameterList","parameters":[],"src":"6151:2:28"},"src":"6126:28:28"},{"documentation":{"id":2970,"nodeType":"StructuredDocumentation","src":"6381:45:28","text":"@notice Add liquidity kind not supported."},"errorSelector":"6c02b395","id":2972,"name":"InvalidAddLiquidityKind","nameLocation":"6437:23:28","nodeType":"ErrorDefinition","parameters":{"id":2971,"nodeType":"ParameterList","parameters":[],"src":"6460:2:28"},"src":"6431:32:28"},{"documentation":{"id":2973,"nodeType":"StructuredDocumentation","src":"6469:264:28","text":" @notice A required amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"8eda85e4","id":2982,"name":"AmountInAboveMax","nameLocation":"6744:16:28","nodeType":"ErrorDefinition","parameters":{"id":2981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2976,"mutability":"mutable","name":"tokenIn","nameLocation":"6768:7:28","nodeType":"VariableDeclaration","scope":2982,"src":"6761:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2975,"nodeType":"UserDefinedTypeName","pathNode":{"id":2974,"name":"IERC20","nameLocations":["6761:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6761:6:28"},"referencedDeclaration":10576,"src":"6761:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2978,"mutability":"mutable","name":"amountIn","nameLocation":"6785:8:28","nodeType":"VariableDeclaration","scope":2982,"src":"6777:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2977,"name":"uint256","nodeType":"ElementaryTypeName","src":"6777:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2980,"mutability":"mutable","name":"maxAmountIn","nameLocation":"6803:11:28","nodeType":"VariableDeclaration","scope":2982,"src":"6795:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2979,"name":"uint256","nodeType":"ElementaryTypeName","src":"6795:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6760:55:28"},"src":"6738:78:28"},{"documentation":{"id":2983,"nodeType":"StructuredDocumentation","src":"6822:269:28","text":" @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"cefa3afa","id":2992,"name":"HookAdjustedAmountInAboveMax","nameLocation":"7102:28:28","nodeType":"ErrorDefinition","parameters":{"id":2991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2986,"mutability":"mutable","name":"tokenIn","nameLocation":"7138:7:28","nodeType":"VariableDeclaration","scope":2992,"src":"7131:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2985,"nodeType":"UserDefinedTypeName","pathNode":{"id":2984,"name":"IERC20","nameLocations":["7131:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"7131:6:28"},"referencedDeclaration":10576,"src":"7131:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2988,"mutability":"mutable","name":"amountIn","nameLocation":"7155:8:28","nodeType":"VariableDeclaration","scope":2992,"src":"7147:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2987,"name":"uint256","nodeType":"ElementaryTypeName","src":"7147:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2990,"mutability":"mutable","name":"maxAmountIn","nameLocation":"7173:11:28","nodeType":"VariableDeclaration","scope":2992,"src":"7165:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2989,"name":"uint256","nodeType":"ElementaryTypeName","src":"7165:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7130:55:28"},"src":"7096:90:28"},{"documentation":{"id":2993,"nodeType":"StructuredDocumentation","src":"7192:245:28","text":" @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"8d261d5d","id":2999,"name":"BptAmountOutBelowMin","nameLocation":"7448:20:28","nodeType":"ErrorDefinition","parameters":{"id":2998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2995,"mutability":"mutable","name":"amountOut","nameLocation":"7477:9:28","nodeType":"VariableDeclaration","scope":2999,"src":"7469:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2994,"name":"uint256","nodeType":"ElementaryTypeName","src":"7469:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2997,"mutability":"mutable","name":"minAmountOut","nameLocation":"7496:12:28","nodeType":"VariableDeclaration","scope":2999,"src":"7488:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2996,"name":"uint256","nodeType":"ElementaryTypeName","src":"7488:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7468:41:28"},"src":"7442:68:28"},{"documentation":{"id":3000,"nodeType":"StructuredDocumentation","src":"7516:75:28","text":"@notice Pool does not support adding liquidity with a customized input."},"errorSelector":"4876c0bc","id":3002,"name":"DoesNotSupportAddLiquidityCustom","nameLocation":"7602:32:28","nodeType":"ErrorDefinition","parameters":{"id":3001,"nodeType":"ParameterList","parameters":[],"src":"7634:2:28"},"src":"7596:41:28"},{"documentation":{"id":3003,"nodeType":"StructuredDocumentation","src":"7643:68:28","text":"@notice Pool does not support adding liquidity through donation."},"errorSelector":"efe0265d","id":3005,"name":"DoesNotSupportDonation","nameLocation":"7722:22:28","nodeType":"ErrorDefinition","parameters":{"id":3004,"nodeType":"ParameterList","parameters":[],"src":"7744:2:28"},"src":"7716:31:28"},{"documentation":{"id":3006,"nodeType":"StructuredDocumentation","src":"7977:48:28","text":"@notice Remove liquidity kind not supported."},"errorSelector":"137a9a39","id":3008,"name":"InvalidRemoveLiquidityKind","nameLocation":"8036:26:28","nodeType":"ErrorDefinition","parameters":{"id":3007,"nodeType":"ParameterList","parameters":[],"src":"8062:2:28"},"src":"8030:35:28"},{"documentation":{"id":3009,"nodeType":"StructuredDocumentation","src":"8071:269:28","text":" @notice The actual amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"2f785e46","id":3018,"name":"AmountOutBelowMin","nameLocation":"8351:17:28","nodeType":"ErrorDefinition","parameters":{"id":3017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3012,"mutability":"mutable","name":"tokenOut","nameLocation":"8376:8:28","nodeType":"VariableDeclaration","scope":3018,"src":"8369:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3011,"nodeType":"UserDefinedTypeName","pathNode":{"id":3010,"name":"IERC20","nameLocations":["8369:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"8369:6:28"},"referencedDeclaration":10576,"src":"8369:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3014,"mutability":"mutable","name":"amountOut","nameLocation":"8394:9:28","nodeType":"VariableDeclaration","scope":3018,"src":"8386:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3013,"name":"uint256","nodeType":"ElementaryTypeName","src":"8386:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3016,"mutability":"mutable","name":"minAmountOut","nameLocation":"8413:12:28","nodeType":"VariableDeclaration","scope":3018,"src":"8405:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3015,"name":"uint256","nodeType":"ElementaryTypeName","src":"8405:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8368:58:28"},"src":"8345:82:28"},{"documentation":{"id":3019,"nodeType":"StructuredDocumentation","src":"8433:276:28","text":" @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"fbd8a724","id":3028,"name":"HookAdjustedAmountOutBelowMin","nameLocation":"8720:29:28","nodeType":"ErrorDefinition","parameters":{"id":3027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3022,"mutability":"mutable","name":"tokenOut","nameLocation":"8757:8:28","nodeType":"VariableDeclaration","scope":3028,"src":"8750:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3021,"nodeType":"UserDefinedTypeName","pathNode":{"id":3020,"name":"IERC20","nameLocations":["8750:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"8750:6:28"},"referencedDeclaration":10576,"src":"8750:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3024,"mutability":"mutable","name":"amountOut","nameLocation":"8775:9:28","nodeType":"VariableDeclaration","scope":3028,"src":"8767:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3023,"name":"uint256","nodeType":"ElementaryTypeName","src":"8767:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3026,"mutability":"mutable","name":"minAmountOut","nameLocation":"8794:12:28","nodeType":"VariableDeclaration","scope":3028,"src":"8786:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3025,"name":"uint256","nodeType":"ElementaryTypeName","src":"8786:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8749:58:28"},"src":"8714:94:28"},{"documentation":{"id":3029,"nodeType":"StructuredDocumentation","src":"8814:228:28","text":" @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n @param amountIn The total BPT amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"31d38e0b","id":3035,"name":"BptAmountInAboveMax","nameLocation":"9053:19:28","nodeType":"ErrorDefinition","parameters":{"id":3034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3031,"mutability":"mutable","name":"amountIn","nameLocation":"9081:8:28","nodeType":"VariableDeclaration","scope":3035,"src":"9073:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3030,"name":"uint256","nodeType":"ElementaryTypeName","src":"9073:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3033,"mutability":"mutable","name":"maxAmountIn","nameLocation":"9099:11:28","nodeType":"VariableDeclaration","scope":3035,"src":"9091:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3032,"name":"uint256","nodeType":"ElementaryTypeName","src":"9091:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9072:39:28"},"src":"9047:65:28"},{"documentation":{"id":3036,"nodeType":"StructuredDocumentation","src":"9118:77:28","text":"@notice Pool does not support removing liquidity with a customized input."},"errorSelector":"cf0a95c0","id":3038,"name":"DoesNotSupportRemoveLiquidityCustom","nameLocation":"9206:35:28","nodeType":"ErrorDefinition","parameters":{"id":3037,"nodeType":"ParameterList","parameters":[],"src":"9241:2:28"},"src":"9200:44:28"},{"documentation":{"id":3039,"nodeType":"StructuredDocumentation","src":"9463:332:28","text":" @notice Error raised when there is an overflow in the fee calculation.\n @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n percentages in the Vault."},"errorSelector":"4c69ac5d","id":3041,"name":"ProtocolFeesExceedTotalCollected","nameLocation":"9806:32:28","nodeType":"ErrorDefinition","parameters":{"id":3040,"nodeType":"ParameterList","parameters":[],"src":"9838:2:28"},"src":"9800:41:28"},{"documentation":{"id":3042,"nodeType":"StructuredDocumentation","src":"9847:430:28","text":" @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is below the minimum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"bfb20688","id":3044,"name":"SwapFeePercentageTooLow","nameLocation":"10288:23:28","nodeType":"ErrorDefinition","parameters":{"id":3043,"nodeType":"ParameterList","parameters":[],"src":"10311:2:28"},"src":"10282:32:28"},{"documentation":{"id":3045,"nodeType":"StructuredDocumentation","src":"10320:433:28","text":" @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is above the maximum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"7f47834b","id":3047,"name":"SwapFeePercentageTooHigh","nameLocation":"10764:24:28","nodeType":"ErrorDefinition","parameters":{"id":3046,"nodeType":"ParameterList","parameters":[],"src":"10788:2:28"},"src":"10758:33:28"},{"documentation":{"id":3048,"nodeType":"StructuredDocumentation","src":"10797:646:28","text":" @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n the aggregate fee calculated here and that stored in the Vault."},"errorSelector":"833fb3ce","id":3050,"name":"FeePrecisionTooHigh","nameLocation":"11454:19:28","nodeType":"ErrorDefinition","parameters":{"id":3049,"nodeType":"ParameterList","parameters":[],"src":"11473:2:28"},"src":"11448:28:28"},{"documentation":{"id":3051,"nodeType":"StructuredDocumentation","src":"11482:107:28","text":"@notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei)."},"errorSelector":"746e5940","id":3053,"name":"PercentageAboveMax","nameLocation":"11600:18:28","nodeType":"ErrorDefinition","parameters":{"id":3052,"nodeType":"ParameterList","parameters":[],"src":"11618:2:28"},"src":"11594:27:28"},{"documentation":{"id":3054,"nodeType":"StructuredDocumentation","src":"11842:78:28","text":"@notice A user tried to execute a query operation when they were disabled."},"errorSelector":"7a198886","id":3056,"name":"QueriesDisabled","nameLocation":"11931:15:28","nodeType":"ErrorDefinition","parameters":{"id":3055,"nodeType":"ParameterList","parameters":[],"src":"11946:2:28"},"src":"11925:24:28"},{"documentation":{"id":3057,"nodeType":"StructuredDocumentation","src":"11955:84:28","text":"@notice An admin tried to re-enable queries, but they were disabled permanently."},"errorSelector":"069f8cbc","id":3059,"name":"QueriesDisabledPermanently","nameLocation":"12050:26:28","nodeType":"ErrorDefinition","parameters":{"id":3058,"nodeType":"ParameterList","parameters":[],"src":"12076:2:28"},"src":"12044:35:28"},{"documentation":{"id":3060,"nodeType":"StructuredDocumentation","src":"12302:104:28","text":" @notice Cannot enable recovery mode when already enabled.\n @param pool The pool"},"errorSelector":"346d7607","id":3064,"name":"PoolInRecoveryMode","nameLocation":"12417:18:28","nodeType":"ErrorDefinition","parameters":{"id":3063,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3062,"mutability":"mutable","name":"pool","nameLocation":"12444:4:28","nodeType":"VariableDeclaration","scope":3064,"src":"12436:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3061,"name":"address","nodeType":"ElementaryTypeName","src":"12436:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12435:14:28"},"src":"12411:39:28"},{"documentation":{"id":3065,"nodeType":"StructuredDocumentation","src":"12456:101:28","text":" @notice Cannot disable recovery mode when not enabled.\n @param pool The pool"},"errorSelector":"ef029adf","id":3069,"name":"PoolNotInRecoveryMode","nameLocation":"12568:21:28","nodeType":"ErrorDefinition","parameters":{"id":3068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3067,"mutability":"mutable","name":"pool","nameLocation":"12598:4:28","nodeType":"VariableDeclaration","scope":3069,"src":"12590:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3066,"name":"address","nodeType":"ElementaryTypeName","src":"12590:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12589:14:28"},"src":"12562:42:28"},{"documentation":{"id":3070,"nodeType":"StructuredDocumentation","src":"12828:206:28","text":" @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n @param sender The account attempting to call a permissioned function"},"errorSelector":"089676d5","id":3074,"name":"SenderIsNotVault","nameLocation":"13045:16:28","nodeType":"ErrorDefinition","parameters":{"id":3073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3072,"mutability":"mutable","name":"sender","nameLocation":"13070:6:28","nodeType":"VariableDeclaration","scope":3074,"src":"13062:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3071,"name":"address","nodeType":"ElementaryTypeName","src":"13062:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13061:16:28"},"src":"13039:39:28"},{"documentation":{"id":3075,"nodeType":"StructuredDocumentation","src":"13303:79:28","text":"@notice The caller specified a pause window period longer than the maximum."},"errorSelector":"cc0e8fe5","id":3077,"name":"VaultPauseWindowDurationTooLarge","nameLocation":"13393:32:28","nodeType":"ErrorDefinition","parameters":{"id":3076,"nodeType":"ParameterList","parameters":[],"src":"13425:2:28"},"src":"13387:41:28"},{"documentation":{"id":3078,"nodeType":"StructuredDocumentation","src":"13434:73:28","text":"@notice The caller specified a buffer period longer than the maximum."},"errorSelector":"9ea4efee","id":3080,"name":"PauseBufferPeriodDurationTooLarge","nameLocation":"13518:33:28","nodeType":"ErrorDefinition","parameters":{"id":3079,"nodeType":"ParameterList","parameters":[],"src":"13551:2:28"},"src":"13512:42:28"},{"documentation":{"id":3081,"nodeType":"StructuredDocumentation","src":"13560:76:28","text":"@notice A user tried to perform an operation while the Vault was paused."},"errorSelector":"da9f8b34","id":3083,"name":"VaultPaused","nameLocation":"13647:11:28","nodeType":"ErrorDefinition","parameters":{"id":3082,"nodeType":"ParameterList","parameters":[],"src":"13658:2:28"},"src":"13641:20:28"},{"documentation":{"id":3084,"nodeType":"StructuredDocumentation","src":"13667:73:28","text":"@notice Governance tried to unpause the Vault when it was not paused."},"errorSelector":"f7ff4dca","id":3086,"name":"VaultNotPaused","nameLocation":"13751:14:28","nodeType":"ErrorDefinition","parameters":{"id":3085,"nodeType":"ParameterList","parameters":[],"src":"13765:2:28"},"src":"13745:23:28"},{"documentation":{"id":3087,"nodeType":"StructuredDocumentation","src":"13774:79:28","text":"@notice Governance tried to pause the Vault after the pause period expired."},"errorSelector":"0e4460b7","id":3089,"name":"VaultPauseWindowExpired","nameLocation":"13864:23:28","nodeType":"ErrorDefinition","parameters":{"id":3088,"nodeType":"ParameterList","parameters":[],"src":"13887:2:28"},"src":"13858:32:28"},{"documentation":{"id":3090,"nodeType":"StructuredDocumentation","src":"13896:123:28","text":" @notice A user tried to perform an operation involving a paused Pool.\n @param pool The paused pool"},"errorSelector":"d971f597","id":3094,"name":"PoolPaused","nameLocation":"14030:10:28","nodeType":"ErrorDefinition","parameters":{"id":3093,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3092,"mutability":"mutable","name":"pool","nameLocation":"14049:4:28","nodeType":"VariableDeclaration","scope":3094,"src":"14041:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3091,"name":"address","nodeType":"ElementaryTypeName","src":"14041:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14040:14:28"},"src":"14024:31:28"},{"documentation":{"id":3095,"nodeType":"StructuredDocumentation","src":"14061:124:28","text":" @notice Governance tried to unpause the Pool when it was not paused.\n @param pool The unpaused pool"},"errorSelector":"fdcd6894","id":3099,"name":"PoolNotPaused","nameLocation":"14196:13:28","nodeType":"ErrorDefinition","parameters":{"id":3098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3097,"mutability":"mutable","name":"pool","nameLocation":"14218:4:28","nodeType":"VariableDeclaration","scope":3099,"src":"14210:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3096,"name":"address","nodeType":"ElementaryTypeName","src":"14210:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14209:14:28"},"src":"14190:34:28"},{"documentation":{"id":3100,"nodeType":"StructuredDocumentation","src":"14230:119:28","text":" @notice Governance tried to pause a Pool after the pause period expired.\n @param pool The pool"},"errorSelector":"eb5a1217","id":3104,"name":"PoolPauseWindowExpired","nameLocation":"14360:22:28","nodeType":"ErrorDefinition","parameters":{"id":3103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3102,"mutability":"mutable","name":"pool","nameLocation":"14391:4:28","nodeType":"VariableDeclaration","scope":3104,"src":"14383:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3101,"name":"address","nodeType":"ElementaryTypeName","src":"14383:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14382:14:28"},"src":"14354:43:28"},{"documentation":{"id":3105,"nodeType":"StructuredDocumentation","src":"14628:163:28","text":" @notice The buffer for the given wrapped token was already initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"1690fa40","id":3110,"name":"BufferAlreadyInitialized","nameLocation":"14802:24:28","nodeType":"ErrorDefinition","parameters":{"id":3109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3108,"mutability":"mutable","name":"wrappedToken","nameLocation":"14836:12:28","nodeType":"VariableDeclaration","scope":3110,"src":"14827:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3107,"nodeType":"UserDefinedTypeName","pathNode":{"id":3106,"name":"IERC4626","nameLocations":["14827:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"14827:8:28"},"referencedDeclaration":9846,"src":"14827:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"14826:23:28"},"src":"14796:54:28"},{"documentation":{"id":3111,"nodeType":"StructuredDocumentation","src":"14856:159:28","text":" @notice The buffer for the given wrapped token was not initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"85f41299","id":3116,"name":"BufferNotInitialized","nameLocation":"15026:20:28","nodeType":"ErrorDefinition","parameters":{"id":3115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3114,"mutability":"mutable","name":"wrappedToken","nameLocation":"15056:12:28","nodeType":"VariableDeclaration","scope":3116,"src":"15047:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3113,"nodeType":"UserDefinedTypeName","pathNode":{"id":3112,"name":"IERC4626","nameLocations":["15047:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"15047:8:28"},"referencedDeclaration":9846,"src":"15047:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15046:23:28"},"src":"15020:50:28"},{"documentation":{"id":3117,"nodeType":"StructuredDocumentation","src":"15076:90:28","text":"@notice The user is trying to remove more than their allocated shares from the buffer."},"errorSelector":"98c5dbd6","id":3119,"name":"NotEnoughBufferShares","nameLocation":"15177:21:28","nodeType":"ErrorDefinition","parameters":{"id":3118,"nodeType":"ParameterList","parameters":[],"src":"15198:2:28"},"src":"15171:30:28"},{"documentation":{"id":3120,"nodeType":"StructuredDocumentation","src":"15207:436:28","text":" @notice The wrapped token asset does not match the underlying token.\n @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n Legitimate wrapper contracts should make the asset a constant or immutable value.\n @param wrappedToken The wrapped token corresponding to the buffer\n @param underlyingToken The underlying token returned by `asset`"},"errorSelector":"36b18d09","id":3127,"name":"WrongUnderlyingToken","nameLocation":"15654:20:28","nodeType":"ErrorDefinition","parameters":{"id":3126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3123,"mutability":"mutable","name":"wrappedToken","nameLocation":"15684:12:28","nodeType":"VariableDeclaration","scope":3127,"src":"15675:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3122,"nodeType":"UserDefinedTypeName","pathNode":{"id":3121,"name":"IERC4626","nameLocations":["15675:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"15675:8:28"},"referencedDeclaration":9846,"src":"15675:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3125,"mutability":"mutable","name":"underlyingToken","nameLocation":"15706:15:28","nodeType":"VariableDeclaration","scope":3127,"src":"15698:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3124,"name":"address","nodeType":"ElementaryTypeName","src":"15698:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15674:48:28"},"src":"15648:75:28"},{"documentation":{"id":3128,"nodeType":"StructuredDocumentation","src":"15729:322:28","text":" @notice A wrapped token reported the zero address as its underlying token asset.\n @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n re-initialize the buffer).\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"d407f9c5","id":3133,"name":"InvalidUnderlyingToken","nameLocation":"16062:22:28","nodeType":"ErrorDefinition","parameters":{"id":3132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3131,"mutability":"mutable","name":"wrappedToken","nameLocation":"16094:12:28","nodeType":"VariableDeclaration","scope":3133,"src":"16085:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3130,"nodeType":"UserDefinedTypeName","pathNode":{"id":3129,"name":"IERC4626","nameLocations":["16085:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"16085:8:28"},"referencedDeclaration":9846,"src":"16085:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16084:23:28"},"src":"16056:52:28"},{"documentation":{"id":3134,"nodeType":"StructuredDocumentation","src":"16114:183:28","text":" @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"18fe7385","id":3139,"name":"WrapAmountTooSmall","nameLocation":"16308:18:28","nodeType":"ErrorDefinition","parameters":{"id":3138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3137,"mutability":"mutable","name":"wrappedToken","nameLocation":"16336:12:28","nodeType":"VariableDeclaration","scope":3139,"src":"16327:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3136,"nodeType":"UserDefinedTypeName","pathNode":{"id":3135,"name":"IERC4626","nameLocations":["16327:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"16327:8:28"},"referencedDeclaration":9846,"src":"16327:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16326:23:28"},"src":"16302:48:28"},{"documentation":{"id":3140,"nodeType":"StructuredDocumentation","src":"16356:70:28","text":"@notice Buffer operation attempted while vault buffers are paused."},"errorSelector":"0f27df09","id":3142,"name":"VaultBuffersArePaused","nameLocation":"16437:21:28","nodeType":"ErrorDefinition","parameters":{"id":3141,"nodeType":"ParameterList","parameters":[],"src":"16458:2:28"},"src":"16431:30:28"},{"documentation":{"id":3143,"nodeType":"StructuredDocumentation","src":"16467:58:28","text":"@notice Buffer shares were minted to the zero address."},"errorSelector":"dbe6b10e","id":3145,"name":"BufferSharesInvalidReceiver","nameLocation":"16536:27:28","nodeType":"ErrorDefinition","parameters":{"id":3144,"nodeType":"ParameterList","parameters":[],"src":"16563:2:28"},"src":"16530:36:28"},{"documentation":{"id":3146,"nodeType":"StructuredDocumentation","src":"16572:60:28","text":"@notice Buffer shares were burned from the zero address."},"errorSelector":"586d06df","id":3148,"name":"BufferSharesInvalidOwner","nameLocation":"16643:24:28","nodeType":"ErrorDefinition","parameters":{"id":3147,"nodeType":"ParameterList","parameters":[],"src":"16667:2:28"},"src":"16637:33:28"},{"documentation":{"id":3149,"nodeType":"StructuredDocumentation","src":"16676:173:28","text":" @notice The total supply of a buffer can't be lower than the absolute minimum.\n @param totalSupply The total supply value that was below the minimum"},"errorSelector":"34bdbfaa","id":3153,"name":"BufferTotalSupplyTooLow","nameLocation":"16860:23:28","nodeType":"ErrorDefinition","parameters":{"id":3152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3151,"mutability":"mutable","name":"totalSupply","nameLocation":"16892:11:28","nodeType":"VariableDeclaration","scope":3153,"src":"16884:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3150,"name":"uint256","nodeType":"ElementaryTypeName","src":"16884:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16883:21:28"},"src":"16854:51:28"},{"documentation":{"id":3154,"nodeType":"StructuredDocumentation","src":"16911:97:28","text":"@dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should."},"errorSelector":"1c6a5375","id":3163,"name":"NotEnoughUnderlying","nameLocation":"17019:19:28","nodeType":"ErrorDefinition","parameters":{"id":3162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3157,"mutability":"mutable","name":"wrappedToken","nameLocation":"17048:12:28","nodeType":"VariableDeclaration","scope":3163,"src":"17039:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3156,"nodeType":"UserDefinedTypeName","pathNode":{"id":3155,"name":"IERC4626","nameLocations":["17039:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"17039:8:28"},"referencedDeclaration":9846,"src":"17039:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3159,"mutability":"mutable","name":"expectedUnderlyingAmount","nameLocation":"17070:24:28","nodeType":"VariableDeclaration","scope":3163,"src":"17062:32:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3158,"name":"uint256","nodeType":"ElementaryTypeName","src":"17062:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3161,"mutability":"mutable","name":"actualUnderlyingAmount","nameLocation":"17104:22:28","nodeType":"VariableDeclaration","scope":3163,"src":"17096:30:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3160,"name":"uint256","nodeType":"ElementaryTypeName","src":"17096:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17038:89:28"},"src":"17013:115:28"},{"documentation":{"id":3164,"nodeType":"StructuredDocumentation","src":"17134:94:28","text":"@dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should."},"errorSelector":"1149424d","id":3173,"name":"NotEnoughWrapped","nameLocation":"17239:16:28","nodeType":"ErrorDefinition","parameters":{"id":3172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3167,"mutability":"mutable","name":"wrappedToken","nameLocation":"17265:12:28","nodeType":"VariableDeclaration","scope":3173,"src":"17256:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3166,"nodeType":"UserDefinedTypeName","pathNode":{"id":3165,"name":"IERC4626","nameLocations":["17256:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"17256:8:28"},"referencedDeclaration":9846,"src":"17256:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3169,"mutability":"mutable","name":"expectedWrappedAmount","nameLocation":"17287:21:28","nodeType":"VariableDeclaration","scope":3173,"src":"17279:29:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3168,"name":"uint256","nodeType":"ElementaryTypeName","src":"17279:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3171,"mutability":"mutable","name":"actualWrappedAmount","nameLocation":"17318:19:28","nodeType":"VariableDeclaration","scope":3173,"src":"17310:27:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3170,"name":"uint256","nodeType":"ElementaryTypeName","src":"17310:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17255:83:28"},"src":"17233:106:28"},{"documentation":{"id":3174,"nodeType":"StructuredDocumentation","src":"17345:76:28","text":"@dev Shares issued during initialization are below the requested amount."},"errorSelector":"da0cb07e","id":3180,"name":"IssuedSharesBelowMin","nameLocation":"17432:20:28","nodeType":"ErrorDefinition","parameters":{"id":3179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3176,"mutability":"mutable","name":"issuedShares","nameLocation":"17461:12:28","nodeType":"VariableDeclaration","scope":3180,"src":"17453:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3175,"name":"uint256","nodeType":"ElementaryTypeName","src":"17453:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3178,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17483:15:28","nodeType":"VariableDeclaration","scope":3180,"src":"17475:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3177,"name":"uint256","nodeType":"ElementaryTypeName","src":"17475:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17452:47:28"},"src":"17426:74:28"},{"documentation":{"id":3181,"nodeType":"StructuredDocumentation","src":"17727:87:28","text":"@notice Pool does not support adding / removing liquidity with an unbalanced input."},"errorSelector":"d4f5779c","id":3183,"name":"DoesNotSupportUnbalancedLiquidity","nameLocation":"17825:33:28","nodeType":"ErrorDefinition","parameters":{"id":3182,"nodeType":"ParameterList","parameters":[],"src":"17858:2:28"},"src":"17819:42:28"},{"documentation":{"id":3184,"nodeType":"StructuredDocumentation","src":"17867:48:28","text":"@notice The contract should not receive ETH."},"errorSelector":"f2238896","id":3186,"name":"CannotReceiveEth","nameLocation":"17926:16:28","nodeType":"ErrorDefinition","parameters":{"id":3185,"nodeType":"ParameterList","parameters":[],"src":"17942:2:28"},"src":"17920:25:28"},{"documentation":{"id":3187,"nodeType":"StructuredDocumentation","src":"17951:156:28","text":" @notice The `VaultExtension` contract was called by an account directly.\n @dev It can only be called by the Vault via delegatecall."},"errorSelector":"9fd25b36","id":3189,"name":"NotVaultDelegateCall","nameLocation":"18118:20:28","nodeType":"ErrorDefinition","parameters":{"id":3188,"nodeType":"ParameterList","parameters":[],"src":"18138:2:28"},"src":"18112:29:28"},{"documentation":{"id":3190,"nodeType":"StructuredDocumentation","src":"18147:89:28","text":"@notice The `VaultExtension` contract was configured with an incorrect Vault address."},"errorSelector":"1ab9d9d0","id":3192,"name":"WrongVaultExtensionDeployment","nameLocation":"18247:29:28","nodeType":"ErrorDefinition","parameters":{"id":3191,"nodeType":"ParameterList","parameters":[],"src":"18276:2:28"},"src":"18241:38:28"},{"documentation":{"id":3193,"nodeType":"StructuredDocumentation","src":"18285:96:28","text":"@notice The `ProtocolFeeController` contract was configured with an incorrect Vault address."},"errorSelector":"1bbe95c7","id":3195,"name":"WrongProtocolFeeControllerDeployment","nameLocation":"18392:36:28","nodeType":"ErrorDefinition","parameters":{"id":3194,"nodeType":"ParameterList","parameters":[],"src":"18428:2:28"},"src":"18386:45:28"},{"documentation":{"id":3196,"nodeType":"StructuredDocumentation","src":"18437:85:28","text":"@notice The `VaultAdmin` contract was configured with an incorrect Vault address."},"errorSelector":"82cc28b6","id":3198,"name":"WrongVaultAdminDeployment","nameLocation":"18533:25:28","nodeType":"ErrorDefinition","parameters":{"id":3197,"nodeType":"ParameterList","parameters":[],"src":"18558:2:28"},"src":"18527:34:28"},{"documentation":{"id":3199,"nodeType":"StructuredDocumentation","src":"18567:54:28","text":"@notice Quote reverted with a reserved error code."},"errorSelector":"28f95541","id":3201,"name":"QuoteResultSpoofed","nameLocation":"18632:18:28","nodeType":"ErrorDefinition","parameters":{"id":3200,"nodeType":"ParameterList","parameters":[],"src":"18650:2:28"},"src":"18626:27:28"}],"scope":3203,"src":"316:18339:28","usedErrors":[2847,2852,2857,2862,2871,2877,2880,2883,2886,2889,2892,2895,2904,2907,2910,2913,2916,2919,2922,2925,2928,2931,2934,2937,2940,2943,2946,2952,2959,2966,2969,2972,2982,2992,2999,3002,3005,3008,3018,3028,3035,3038,3041,3044,3047,3050,3053,3056,3059,3064,3069,3074,3077,3080,3083,3086,3089,3094,3099,3104,3110,3116,3119,3127,3133,3139,3142,3145,3148,3153,3163,3173,3180,3183,3186,3189,3192,3195,3198,3201],"usedEvents":[]}],"src":"46:18610:28"},"id":28},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","exportedSymbols":{"AddLiquidityKind":[4241],"AddLiquidityParams":[4257],"AfterSwapParams":[4235],"BufferWrapOrUnwrapParams":[4296],"FEE_BITLENGTH":[4299],"FEE_SCALING_FACTOR":[4302],"HookFlags":[4061],"HooksConfig":[4085],"IAuthorizer":[1341],"IERC20":[10576],"IERC4626":[9846],"IHooks":[1617],"IProtocolFeeController":[1955],"IRateProvider":[24],"IVaultEvents":[3441],"LiquidityManagement":[4014],"MAX_FEE_PERCENTAGE":[4305],"PoolConfig":[4039],"PoolConfigBits":[4016],"PoolData":[4163],"PoolRoleAccounts":[4111],"PoolSwapParams":[4206],"RemoveLiquidityKind":[4262],"RemoveLiquidityParams":[4278],"Rounding":[4166],"SwapKind":[4169],"SwapState":[4095],"TokenConfig":[4128],"TokenInfo":[4138],"TokenType":[4115],"VaultState":[4103],"VaultSwapParams":[4188],"WrappingDirection":[4281]},"id":3442,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3204,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:29"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":3206,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3442,"sourceUnit":9847,"src":"72:75:29","symbolAliases":[{"foreign":{"id":3205,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"81:8:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3208,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3442,"sourceUnit":10577,"src":"148:72:29","symbolAliases":[{"foreign":{"id":3207,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"157:6:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":3210,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3442,"sourceUnit":1956,"src":"222:70:29","symbolAliases":[{"foreign":{"id":3209,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"231:22:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":3212,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3442,"sourceUnit":1342,"src":"293:48:29","symbolAliases":[{"foreign":{"id":3211,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"302:11:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":3214,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3442,"sourceUnit":1618,"src":"342:38:29","symbolAliases":[{"foreign":{"id":3213,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1617,"src":"351:6:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":3215,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3442,"sourceUnit":4306,"src":"381:26:29","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultEvents","contractDependencies":[],"contractKind":"interface","documentation":{"id":3216,"nodeType":"StructuredDocumentation","src":"409:91:29","text":"@dev Events are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":3441,"linearizedBaseContracts":[3441],"name":"IVaultEvents","nameLocation":"510:12:29","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":3217,"nodeType":"StructuredDocumentation","src":"529:657:29","text":" @notice A Pool was registered by calling `registerPool`.\n @param pool The pool being registered\n @param factory The factory creating the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The static swap fee of the pool\n @param pauseWindowEndTime The pool's pause window end time\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n @param liquidityManagement Supported liquidity management hook flags"},"eventSelector":"bc1561eeab9f40962e2fb827a7ff9c7cdb47a9d7c84caeefa4ed90e043842dad","id":3240,"name":"PoolRegistered","nameLocation":"1197:14:29","nodeType":"EventDefinition","parameters":{"id":3239,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3219,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1237:4:29","nodeType":"VariableDeclaration","scope":3240,"src":"1221:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3218,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3221,"indexed":true,"mutability":"mutable","name":"factory","nameLocation":"1267:7:29","nodeType":"VariableDeclaration","scope":3240,"src":"1251:23:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3220,"name":"address","nodeType":"ElementaryTypeName","src":"1251:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3225,"indexed":false,"mutability":"mutable","name":"tokenConfig","nameLocation":"1298:11:29","nodeType":"VariableDeclaration","scope":3240,"src":"1284:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4128_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":3223,"nodeType":"UserDefinedTypeName","pathNode":{"id":3222,"name":"TokenConfig","nameLocations":["1284:11:29"],"nodeType":"IdentifierPath","referencedDeclaration":4128,"src":"1284:11:29"},"referencedDeclaration":4128,"src":"1284:11:29","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4128_storage_ptr","typeString":"struct TokenConfig"}},"id":3224,"nodeType":"ArrayTypeName","src":"1284:13:29","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4128_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":3227,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1327:17:29","nodeType":"VariableDeclaration","scope":3240,"src":"1319:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3226,"name":"uint256","nodeType":"ElementaryTypeName","src":"1319:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3229,"indexed":false,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1361:18:29","nodeType":"VariableDeclaration","scope":3240,"src":"1354:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3228,"name":"uint32","nodeType":"ElementaryTypeName","src":"1354:6:29","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":3232,"indexed":false,"mutability":"mutable","name":"roleAccounts","nameLocation":"1406:12:29","nodeType":"VariableDeclaration","scope":3240,"src":"1389:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":3231,"nodeType":"UserDefinedTypeName","pathNode":{"id":3230,"name":"PoolRoleAccounts","nameLocations":["1389:16:29"],"nodeType":"IdentifierPath","referencedDeclaration":4111,"src":"1389:16:29"},"referencedDeclaration":4111,"src":"1389:16:29","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":3235,"indexed":false,"mutability":"mutable","name":"hooksConfig","nameLocation":"1440:11:29","nodeType":"VariableDeclaration","scope":3240,"src":"1428:23:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4085_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":3234,"nodeType":"UserDefinedTypeName","pathNode":{"id":3233,"name":"HooksConfig","nameLocations":["1428:11:29"],"nodeType":"IdentifierPath","referencedDeclaration":4085,"src":"1428:11:29"},"referencedDeclaration":4085,"src":"1428:11:29","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4085_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"},{"constant":false,"id":3238,"indexed":false,"mutability":"mutable","name":"liquidityManagement","nameLocation":"1481:19:29","nodeType":"VariableDeclaration","scope":3240,"src":"1461:39:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4014_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":3237,"nodeType":"UserDefinedTypeName","pathNode":{"id":3236,"name":"LiquidityManagement","nameLocations":["1461:19:29"],"nodeType":"IdentifierPath","referencedDeclaration":4014,"src":"1461:19:29"},"referencedDeclaration":4014,"src":"1461:19:29","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4014_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1211:295:29"},"src":"1191:316:29"},{"anonymous":false,"documentation":{"id":3241,"nodeType":"StructuredDocumentation","src":"1513:120:29","text":" @notice A Pool was initialized by calling `initialize`.\n @param pool The pool being initialized"},"eventSelector":"cad8c9d32507393b6508ca4a888b81979919b477510585bde8488f153072d6f3","id":3245,"name":"PoolInitialized","nameLocation":"1644:15:29","nodeType":"EventDefinition","parameters":{"id":3244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3243,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1676:4:29","nodeType":"VariableDeclaration","scope":3245,"src":"1660:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3242,"name":"address","nodeType":"ElementaryTypeName","src":"1660:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1659:22:29"},"src":"1638:44:29"},{"anonymous":false,"documentation":{"id":3246,"nodeType":"StructuredDocumentation","src":"1688:478:29","text":" @notice A swap has occurred.\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountIn Number of tokenIn tokens\n @param amountOut Number of tokenOut tokens\n @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n @param swapFeeAmount Swap fee amount paid"},"eventSelector":"0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db","id":3264,"name":"Swap","nameLocation":"2177:4:29","nodeType":"EventDefinition","parameters":{"id":3263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3248,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2207:4:29","nodeType":"VariableDeclaration","scope":3264,"src":"2191:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3247,"name":"address","nodeType":"ElementaryTypeName","src":"2191:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3251,"indexed":true,"mutability":"mutable","name":"tokenIn","nameLocation":"2236:7:29","nodeType":"VariableDeclaration","scope":3264,"src":"2221:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3250,"nodeType":"UserDefinedTypeName","pathNode":{"id":3249,"name":"IERC20","nameLocations":["2221:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2221:6:29"},"referencedDeclaration":10576,"src":"2221:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3254,"indexed":true,"mutability":"mutable","name":"tokenOut","nameLocation":"2268:8:29","nodeType":"VariableDeclaration","scope":3264,"src":"2253:23:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3253,"nodeType":"UserDefinedTypeName","pathNode":{"id":3252,"name":"IERC20","nameLocations":["2253:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2253:6:29"},"referencedDeclaration":10576,"src":"2253:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3256,"indexed":false,"mutability":"mutable","name":"amountIn","nameLocation":"2294:8:29","nodeType":"VariableDeclaration","scope":3264,"src":"2286:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3255,"name":"uint256","nodeType":"ElementaryTypeName","src":"2286:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3258,"indexed":false,"mutability":"mutable","name":"amountOut","nameLocation":"2320:9:29","nodeType":"VariableDeclaration","scope":3264,"src":"2312:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3257,"name":"uint256","nodeType":"ElementaryTypeName","src":"2312:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3260,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"2347:17:29","nodeType":"VariableDeclaration","scope":3264,"src":"2339:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3259,"name":"uint256","nodeType":"ElementaryTypeName","src":"2339:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3262,"indexed":false,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"2382:13:29","nodeType":"VariableDeclaration","scope":3264,"src":"2374:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3261,"name":"uint256","nodeType":"ElementaryTypeName","src":"2374:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2181:220:29"},"src":"2171:231:29"},{"anonymous":false,"documentation":{"id":3265,"nodeType":"StructuredDocumentation","src":"2408:352:29","text":" @notice A wrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param depositedUnderlying Number of underlying tokens deposited\n @param mintedShares Number of shares (wrapped tokens) minted\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"3771d13c67011e31e12031c54bb59b0bf544a80b81d280a3711e172aa8b7f47b","id":3276,"name":"Wrap","nameLocation":"2771:4:29","nodeType":"EventDefinition","parameters":{"id":3275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3268,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"2802:12:29","nodeType":"VariableDeclaration","scope":3276,"src":"2785:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3267,"nodeType":"UserDefinedTypeName","pathNode":{"id":3266,"name":"IERC4626","nameLocations":["2785:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"2785:8:29"},"referencedDeclaration":9846,"src":"2785:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3270,"indexed":false,"mutability":"mutable","name":"depositedUnderlying","nameLocation":"2832:19:29","nodeType":"VariableDeclaration","scope":3276,"src":"2824:27:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3269,"name":"uint256","nodeType":"ElementaryTypeName","src":"2824:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3272,"indexed":false,"mutability":"mutable","name":"mintedShares","nameLocation":"2869:12:29","nodeType":"VariableDeclaration","scope":3276,"src":"2861:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3271,"name":"uint256","nodeType":"ElementaryTypeName","src":"2861:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3274,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"2899:14:29","nodeType":"VariableDeclaration","scope":3276,"src":"2891:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3273,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2891:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2775:144:29"},"src":"2765:155:29"},{"anonymous":false,"documentation":{"id":3277,"nodeType":"StructuredDocumentation","src":"2926:355:29","text":" @notice An unwrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param burnedShares Number of shares (wrapped tokens) burned\n @param withdrawnUnderlying Number of underlying tokens withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"eeb740c90bf2b18c9532eb7d473137767036d893dff3e009f32718f821b2a4c0","id":3288,"name":"Unwrap","nameLocation":"3292:6:29","nodeType":"EventDefinition","parameters":{"id":3287,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3280,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"3325:12:29","nodeType":"VariableDeclaration","scope":3288,"src":"3308:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3279,"nodeType":"UserDefinedTypeName","pathNode":{"id":3278,"name":"IERC4626","nameLocations":["3308:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"3308:8:29"},"referencedDeclaration":9846,"src":"3308:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3282,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"3355:12:29","nodeType":"VariableDeclaration","scope":3288,"src":"3347:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3281,"name":"uint256","nodeType":"ElementaryTypeName","src":"3347:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3284,"indexed":false,"mutability":"mutable","name":"withdrawnUnderlying","nameLocation":"3385:19:29","nodeType":"VariableDeclaration","scope":3288,"src":"3377:27:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3283,"name":"uint256","nodeType":"ElementaryTypeName","src":"3377:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3286,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"3422:14:29","nodeType":"VariableDeclaration","scope":3288,"src":"3414:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3285,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3414:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3298:144:29"},"src":"3286:157:29"},{"anonymous":false,"documentation":{"id":3289,"nodeType":"StructuredDocumentation","src":"3449:562:29","text":" @notice Liquidity has been added to a pool (including initialization).\n @param pool The pool with liquidity added\n @param liquidityProvider The user performing the operation\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"a26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca871","id":3306,"name":"LiquidityAdded","nameLocation":"4022:14:29","nodeType":"EventDefinition","parameters":{"id":3305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3291,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4062:4:29","nodeType":"VariableDeclaration","scope":3306,"src":"4046:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3290,"name":"address","nodeType":"ElementaryTypeName","src":"4046:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3293,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4092:17:29","nodeType":"VariableDeclaration","scope":3306,"src":"4076:33:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3292,"name":"address","nodeType":"ElementaryTypeName","src":"4076:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3296,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4144:4:29","nodeType":"VariableDeclaration","scope":3306,"src":"4119:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4241","typeString":"enum AddLiquidityKind"},"typeName":{"id":3295,"nodeType":"UserDefinedTypeName","pathNode":{"id":3294,"name":"AddLiquidityKind","nameLocations":["4119:16:29"],"nodeType":"IdentifierPath","referencedDeclaration":4241,"src":"4119:16:29"},"referencedDeclaration":4241,"src":"4119:16:29","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4241","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":3298,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4166:11:29","nodeType":"VariableDeclaration","scope":3306,"src":"4158:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3297,"name":"uint256","nodeType":"ElementaryTypeName","src":"4158:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3301,"indexed":false,"mutability":"mutable","name":"amountsAddedRaw","nameLocation":"4197:15:29","nodeType":"VariableDeclaration","scope":3306,"src":"4187:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3299,"name":"uint256","nodeType":"ElementaryTypeName","src":"4187:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3300,"nodeType":"ArrayTypeName","src":"4187:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3304,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"4232:17:29","nodeType":"VariableDeclaration","scope":3306,"src":"4222:27:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3302,"name":"uint256","nodeType":"ElementaryTypeName","src":"4222:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3303,"nodeType":"ArrayTypeName","src":"4222:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4036:219:29"},"src":"4016:240:29"},{"anonymous":false,"documentation":{"id":3307,"nodeType":"StructuredDocumentation","src":"4262:548:29","text":" @notice Liquidity has been removed from a pool.\n @param pool The pool with liquidity removed\n @param liquidityProvider The user performing the operation\n @param kind The remove liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"fbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a5","id":3324,"name":"LiquidityRemoved","nameLocation":"4821:16:29","nodeType":"EventDefinition","parameters":{"id":3323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3309,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4863:4:29","nodeType":"VariableDeclaration","scope":3324,"src":"4847:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3308,"name":"address","nodeType":"ElementaryTypeName","src":"4847:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3311,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4893:17:29","nodeType":"VariableDeclaration","scope":3324,"src":"4877:33:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3310,"name":"address","nodeType":"ElementaryTypeName","src":"4877:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3314,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4948:4:29","nodeType":"VariableDeclaration","scope":3324,"src":"4920:32:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4262","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":3313,"nodeType":"UserDefinedTypeName","pathNode":{"id":3312,"name":"RemoveLiquidityKind","nameLocations":["4920:19:29"],"nodeType":"IdentifierPath","referencedDeclaration":4262,"src":"4920:19:29"},"referencedDeclaration":4262,"src":"4920:19:29","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4262","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":3316,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4970:11:29","nodeType":"VariableDeclaration","scope":3324,"src":"4962:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3315,"name":"uint256","nodeType":"ElementaryTypeName","src":"4962:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3319,"indexed":false,"mutability":"mutable","name":"amountsRemovedRaw","nameLocation":"5001:17:29","nodeType":"VariableDeclaration","scope":3324,"src":"4991:27:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3317,"name":"uint256","nodeType":"ElementaryTypeName","src":"4991:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3318,"nodeType":"ArrayTypeName","src":"4991:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3322,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"5038:17:29","nodeType":"VariableDeclaration","scope":3324,"src":"5028:27:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3320,"name":"uint256","nodeType":"ElementaryTypeName","src":"5028:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3321,"nodeType":"ArrayTypeName","src":"5028:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4837:224:29"},"src":"4815:247:29"},{"anonymous":false,"documentation":{"id":3325,"nodeType":"StructuredDocumentation","src":"5068:114:29","text":" @notice The Vault's pause status has changed.\n @param paused True if the Vault was paused"},"eventSelector":"e0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d02","id":3329,"name":"VaultPausedStateChanged","nameLocation":"5193:23:29","nodeType":"EventDefinition","parameters":{"id":3328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3327,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5222:6:29","nodeType":"VariableDeclaration","scope":3329,"src":"5217:11:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3326,"name":"bool","nodeType":"ElementaryTypeName","src":"5217:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5216:13:29"},"src":"5187:43:29"},{"anonymous":false,"documentation":{"id":3330,"nodeType":"StructuredDocumentation","src":"5236:87:29","text":"@notice `disableQuery` has been called on the Vault, disabling query functionality."},"eventSelector":"bd204090fd387f08e3076528bf09b4fc99d8100d749eace96c06002d3fedc625","id":3332,"name":"VaultQueriesDisabled","nameLocation":"5334:20:29","nodeType":"EventDefinition","parameters":{"id":3331,"nodeType":"ParameterList","parameters":[],"src":"5354:2:29"},"src":"5328:29:29"},{"anonymous":false,"documentation":{"id":3333,"nodeType":"StructuredDocumentation","src":"5363:85:29","text":"@notice `enableQuery` has been called on the Vault, enabling query functionality."},"eventSelector":"91d7478835f2b5adc315f5aad920f4a7f0a02f7fddf3042d17b2c80168ea17f5","id":3335,"name":"VaultQueriesEnabled","nameLocation":"5459:19:29","nodeType":"EventDefinition","parameters":{"id":3334,"nodeType":"ParameterList","parameters":[],"src":"5478:2:29"},"src":"5453:28:29"},{"anonymous":false,"documentation":{"id":3336,"nodeType":"StructuredDocumentation","src":"5487:171:29","text":" @notice A Pool's pause status has changed.\n @param pool The pool that was just paused or unpaused\n @param paused True if the pool was paused"},"eventSelector":"57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7","id":3342,"name":"PoolPausedStateChanged","nameLocation":"5669:22:29","nodeType":"EventDefinition","parameters":{"id":3341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3338,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5708:4:29","nodeType":"VariableDeclaration","scope":3342,"src":"5692:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3337,"name":"address","nodeType":"ElementaryTypeName","src":"5692:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3340,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5719:6:29","nodeType":"VariableDeclaration","scope":3342,"src":"5714:11:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3339,"name":"bool","nodeType":"ElementaryTypeName","src":"5714:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5691:35:29"},"src":"5663:64:29"},{"anonymous":false,"documentation":{"id":3343,"nodeType":"StructuredDocumentation","src":"5733:158:29","text":" @notice Emitted when the swap fee percentage of a pool is updated.\n @param swapFeePercentage The new swap fee percentage for the pool"},"eventSelector":"89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a1","id":3349,"name":"SwapFeePercentageChanged","nameLocation":"5902:24:29","nodeType":"EventDefinition","parameters":{"id":3348,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3345,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5943:4:29","nodeType":"VariableDeclaration","scope":3349,"src":"5927:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3344,"name":"address","nodeType":"ElementaryTypeName","src":"5927:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3347,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"5957:17:29","nodeType":"VariableDeclaration","scope":3349,"src":"5949:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3346,"name":"uint256","nodeType":"ElementaryTypeName","src":"5949:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5926:49:29"},"src":"5896:80:29"},{"anonymous":false,"documentation":{"id":3350,"nodeType":"StructuredDocumentation","src":"5982:170:29","text":" @notice Recovery mode has been enabled or disabled for a pool.\n @param pool The pool\n @param recoveryMode True if recovery mode was enabled"},"eventSelector":"c2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a9","id":3356,"name":"PoolRecoveryModeStateChanged","nameLocation":"6163:28:29","nodeType":"EventDefinition","parameters":{"id":3355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3352,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6208:4:29","nodeType":"VariableDeclaration","scope":3356,"src":"6192:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3351,"name":"address","nodeType":"ElementaryTypeName","src":"6192:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3354,"indexed":false,"mutability":"mutable","name":"recoveryMode","nameLocation":"6219:12:29","nodeType":"VariableDeclaration","scope":3356,"src":"6214:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3353,"name":"bool","nodeType":"ElementaryTypeName","src":"6214:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6191:41:29"},"src":"6157:76:29"},{"anonymous":false,"documentation":{"id":3357,"nodeType":"StructuredDocumentation","src":"6239:353:29","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate swap fee percentage changed\n @param aggregateSwapFeePercentage The new aggregate swap fee percentage"},"eventSelector":"e4d371097beea42453a37406e2aef4c04f3c548f84ac50e72578662c0dcd7354","id":3363,"name":"AggregateSwapFeePercentageChanged","nameLocation":"6603:33:29","nodeType":"EventDefinition","parameters":{"id":3362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3359,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6653:4:29","nodeType":"VariableDeclaration","scope":3363,"src":"6637:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3358,"name":"address","nodeType":"ElementaryTypeName","src":"6637:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3361,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"6667:26:29","nodeType":"VariableDeclaration","scope":3363,"src":"6659:34:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3360,"name":"uint256","nodeType":"ElementaryTypeName","src":"6659:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6636:58:29"},"src":"6597:98:29"},{"anonymous":false,"documentation":{"id":3364,"nodeType":"StructuredDocumentation","src":"6701:357:29","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate yield fee percentage changed\n @param aggregateYieldFeePercentage The new aggregate yield fee percentage"},"eventSelector":"606eb97d83164bd6b200d638cd49c14c65d94d4f2c674cfd85e24e0e202c3ca5","id":3370,"name":"AggregateYieldFeePercentageChanged","nameLocation":"7069:34:29","nodeType":"EventDefinition","parameters":{"id":3369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3366,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"7120:4:29","nodeType":"VariableDeclaration","scope":3370,"src":"7104:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3365,"name":"address","nodeType":"ElementaryTypeName","src":"7104:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3368,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"7134:27:29","nodeType":"VariableDeclaration","scope":3370,"src":"7126:35:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3367,"name":"uint256","nodeType":"ElementaryTypeName","src":"7126:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7103:59:29"},"src":"7063:100:29"},{"anonymous":false,"documentation":{"id":3371,"nodeType":"StructuredDocumentation","src":"7169:132:29","text":" @notice A new authorizer is set by `setAuthorizer`.\n @param newAuthorizer The address of the new authorizer"},"eventSelector":"94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef","id":3376,"name":"AuthorizerChanged","nameLocation":"7312:17:29","nodeType":"EventDefinition","parameters":{"id":3375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3374,"indexed":true,"mutability":"mutable","name":"newAuthorizer","nameLocation":"7350:13:29","nodeType":"VariableDeclaration","scope":3376,"src":"7330:33:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"},"typeName":{"id":3373,"nodeType":"UserDefinedTypeName","pathNode":{"id":3372,"name":"IAuthorizer","nameLocations":["7330:11:29"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"7330:11:29"},"referencedDeclaration":1341,"src":"7330:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"7329:35:29"},"src":"7306:59:29"},{"anonymous":false,"documentation":{"id":3377,"nodeType":"StructuredDocumentation","src":"7371:180:29","text":" @notice A new protocol fee controller is set by `setProtocolFeeController`.\n @param newProtocolFeeController The address of the new protocol fee controller"},"eventSelector":"280a60b1e63c1774d397d35cce80eb80e51408ead755fb446e6f744ce98e5df0","id":3382,"name":"ProtocolFeeControllerChanged","nameLocation":"7562:28:29","nodeType":"EventDefinition","parameters":{"id":3381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3380,"indexed":true,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"7622:24:29","nodeType":"VariableDeclaration","scope":3382,"src":"7591:55:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":3379,"nodeType":"UserDefinedTypeName","pathNode":{"id":3378,"name":"IProtocolFeeController","nameLocations":["7591:22:29"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"7591:22:29"},"referencedDeclaration":1955,"src":"7591:22:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"7590:57:29"},"src":"7556:92:29"},{"anonymous":false,"documentation":{"id":3383,"nodeType":"StructuredDocumentation","src":"7654:553:29","text":" @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was deposited\n @param amountWrapped The amount of the wrapped token that was deposited\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a9","id":3394,"name":"LiquidityAddedToBuffer","nameLocation":"8218:22:29","nodeType":"EventDefinition","parameters":{"id":3393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3386,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"8267:12:29","nodeType":"VariableDeclaration","scope":3394,"src":"8250:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3385,"nodeType":"UserDefinedTypeName","pathNode":{"id":3384,"name":"IERC4626","nameLocations":["8250:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"8250:8:29"},"referencedDeclaration":9846,"src":"8250:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3388,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"8297:16:29","nodeType":"VariableDeclaration","scope":3394,"src":"8289:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3387,"name":"uint256","nodeType":"ElementaryTypeName","src":"8289:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3390,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"8331:13:29","nodeType":"VariableDeclaration","scope":3394,"src":"8323:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3389,"name":"uint256","nodeType":"ElementaryTypeName","src":"8323:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3392,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"8362:14:29","nodeType":"VariableDeclaration","scope":3394,"src":"8354:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3391,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8354:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8240:142:29"},"src":"8212:171:29"},{"anonymous":false,"documentation":{"id":3395,"nodeType":"StructuredDocumentation","src":"8389:570:29","text":" @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param to The owner of the minted shares\n @param issuedShares The amount of \"internal BPT\" shares created"},"eventSelector":"d66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec34","id":3404,"name":"BufferSharesMinted","nameLocation":"8970:18:29","nodeType":"EventDefinition","parameters":{"id":3403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3398,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9006:12:29","nodeType":"VariableDeclaration","scope":3404,"src":"8989:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3397,"nodeType":"UserDefinedTypeName","pathNode":{"id":3396,"name":"IERC4626","nameLocations":["8989:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"8989:8:29"},"referencedDeclaration":9846,"src":"8989:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3400,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"9036:2:29","nodeType":"VariableDeclaration","scope":3404,"src":"9020:18:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3399,"name":"address","nodeType":"ElementaryTypeName","src":"9020:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3402,"indexed":false,"mutability":"mutable","name":"issuedShares","nameLocation":"9048:12:29","nodeType":"VariableDeclaration","scope":3404,"src":"9040:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3401,"name":"uint256","nodeType":"ElementaryTypeName","src":"9040:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8988:73:29"},"src":"8964:98:29"},{"anonymous":false,"documentation":{"id":3405,"nodeType":"StructuredDocumentation","src":"9068:571:29","text":" @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param from The owner of the burned shares\n @param burnedShares The amount of \"internal BPT\" shares burned"},"eventSelector":"4e09f7f7fc37ce2897800e2c2a9099565edb0a133d19d84a6871b3530af8846b","id":3414,"name":"BufferSharesBurned","nameLocation":"9650:18:29","nodeType":"EventDefinition","parameters":{"id":3413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3408,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9686:12:29","nodeType":"VariableDeclaration","scope":3414,"src":"9669:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3407,"nodeType":"UserDefinedTypeName","pathNode":{"id":3406,"name":"IERC4626","nameLocations":["9669:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"9669:8:29"},"referencedDeclaration":9846,"src":"9669:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3410,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"9716:4:29","nodeType":"VariableDeclaration","scope":3414,"src":"9700:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3409,"name":"address","nodeType":"ElementaryTypeName","src":"9700:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3412,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"9730:12:29","nodeType":"VariableDeclaration","scope":3414,"src":"9722:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3411,"name":"uint256","nodeType":"ElementaryTypeName","src":"9722:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9668:75:29"},"src":"9644:100:29"},{"anonymous":false,"documentation":{"id":3415,"nodeType":"StructuredDocumentation","src":"9750:509:29","text":" @notice Liquidity was removed from an ERC4626 buffer.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was withdrawn\n @param amountWrapped The amount of the wrapped token that was withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"44d97b36e99b590b3d2875aad3b167b1d7fb1e063f3f1325a1eeac76caee5113","id":3426,"name":"LiquidityRemovedFromBuffer","nameLocation":"10270:26:29","nodeType":"EventDefinition","parameters":{"id":3425,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3418,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"10323:12:29","nodeType":"VariableDeclaration","scope":3426,"src":"10306:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3417,"nodeType":"UserDefinedTypeName","pathNode":{"id":3416,"name":"IERC4626","nameLocations":["10306:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"10306:8:29"},"referencedDeclaration":9846,"src":"10306:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3420,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"10353:16:29","nodeType":"VariableDeclaration","scope":3426,"src":"10345:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3419,"name":"uint256","nodeType":"ElementaryTypeName","src":"10345:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3422,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"10387:13:29","nodeType":"VariableDeclaration","scope":3426,"src":"10379:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3421,"name":"uint256","nodeType":"ElementaryTypeName","src":"10379:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3424,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"10418:14:29","nodeType":"VariableDeclaration","scope":3426,"src":"10410:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3423,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10410:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10296:142:29"},"src":"10264:175:29"},{"anonymous":false,"documentation":{"id":3427,"nodeType":"StructuredDocumentation","src":"10445:278:29","text":" @notice The Vault buffers pause status has changed.\n @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n set to true) will revert.\n @param paused True if the Vault buffers were paused"},"eventSelector":"300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a5","id":3431,"name":"VaultBuffersPausedStateChanged","nameLocation":"10734:30:29","nodeType":"EventDefinition","parameters":{"id":3430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3429,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"10770:6:29","nodeType":"VariableDeclaration","scope":3431,"src":"10765:11:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3428,"name":"bool","nodeType":"ElementaryTypeName","src":"10765:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10764:13:29"},"src":"10728:50:29"},{"anonymous":false,"documentation":{"id":3432,"nodeType":"StructuredDocumentation","src":"10784:194:29","text":" @notice Pools can use this event to emit event data from the Vault.\n @param pool Pool address\n @param eventKey Event key\n @param eventData Encoded event data"},"eventSelector":"4bc4412e210115456903c65b5277d299a505e79f2eb852b92b1ca52d85856428","id":3440,"name":"VaultAuxiliary","nameLocation":"10989:14:29","nodeType":"EventDefinition","parameters":{"id":3439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3434,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"11020:4:29","nodeType":"VariableDeclaration","scope":3440,"src":"11004:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3433,"name":"address","nodeType":"ElementaryTypeName","src":"11004:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3436,"indexed":true,"mutability":"mutable","name":"eventKey","nameLocation":"11042:8:29","nodeType":"VariableDeclaration","scope":3440,"src":"11026:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3435,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11026:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3438,"indexed":false,"mutability":"mutable","name":"eventData","nameLocation":"11058:9:29","nodeType":"VariableDeclaration","scope":3440,"src":"11052:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3437,"name":"bytes","nodeType":"ElementaryTypeName","src":"11052:5:29","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11003:65:29"},"src":"10983:86:29"}],"scope":3442,"src":"500:10571:29","usedErrors":[],"usedEvents":[3240,3245,3264,3276,3288,3306,3324,3329,3332,3335,3342,3349,3356,3363,3370,3376,3382,3394,3404,3414,3426,3431,3440]}],"src":"46:11026:29"},"id":29},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","exportedSymbols":{"AddLiquidityKind":[4241],"AddLiquidityParams":[4257],"AfterSwapParams":[4235],"BufferWrapOrUnwrapParams":[4296],"FEE_BITLENGTH":[4299],"FEE_SCALING_FACTOR":[4302],"HookFlags":[4061],"HooksConfig":[4085],"IAuthorizer":[1341],"IERC20":[10576],"IERC4626":[9846],"IHooks":[1617],"IProtocolFeeController":[1955],"IRateProvider":[24],"IVault":[2545],"IVaultExtension":[3860],"LiquidityManagement":[4014],"MAX_FEE_PERCENTAGE":[4305],"PoolConfig":[4039],"PoolConfigBits":[4016],"PoolData":[4163],"PoolRoleAccounts":[4111],"PoolSwapParams":[4206],"RemoveLiquidityKind":[4262],"RemoveLiquidityParams":[4278],"Rounding":[4166],"SwapKind":[4169],"SwapState":[4095],"TokenConfig":[4128],"TokenInfo":[4138],"TokenType":[4115],"VaultState":[4103],"VaultSwapParams":[4188],"WrappingDirection":[4281]},"id":3861,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3443,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:30"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":3445,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3861,"sourceUnit":9847,"src":"72:75:30","symbolAliases":[{"foreign":{"id":3444,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"81:8:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3447,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3861,"sourceUnit":10577,"src":"148:72:30","symbolAliases":[{"foreign":{"id":3446,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"157:6:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":3449,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3861,"sourceUnit":1342,"src":"222:48:30","symbolAliases":[{"foreign":{"id":3448,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"231:11:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":3451,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3861,"sourceUnit":1956,"src":"271:70:30","symbolAliases":[{"foreign":{"id":3450,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"280:22:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":3453,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3861,"sourceUnit":2546,"src":"342:38:30","symbolAliases":[{"foreign":{"id":3452,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"351:6:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":3455,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3861,"sourceUnit":1618,"src":"381:38:30","symbolAliases":[{"foreign":{"id":3454,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1617,"src":"390:6:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":3456,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3861,"sourceUnit":4306,"src":"420:26:30","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultExtension","contractDependencies":[],"contractKind":"interface","documentation":{"id":3457,"nodeType":"StructuredDocumentation","src":"448:318:30","text":" @notice Interface for functions defined on the `VaultExtension` contract.\n @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n liquidity operations."},"fullyImplemented":false,"id":3860,"linearizedBaseContracts":[3860],"name":"IVaultExtension","nameLocation":"777:15:30","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3458,"nodeType":"StructuredDocumentation","src":"1025:206:30","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":3464,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1245:5:30","nodeType":"FunctionDefinition","parameters":{"id":3459,"nodeType":"ParameterList","parameters":[],"src":"1250:2:30"},"returnParameters":{"id":3463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3462,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3464,"src":"1276:6:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":3461,"nodeType":"UserDefinedTypeName","pathNode":{"id":3460,"name":"IVault","nameLocations":["1276:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1276:6:30"},"referencedDeclaration":2545,"src":"1276:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1275:8:30"},"scope":3860,"src":"1236:48:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3465,"nodeType":"StructuredDocumentation","src":"1290:202:30","text":" @notice Returns the VaultAdmin contract address.\n @dev The VaultAdmin contract mostly implements permissioned functions.\n @return vaultAdmin The address of the Vault admin"},"functionSelector":"1ba0ae45","id":3470,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultAdmin","nameLocation":"1506:13:30","nodeType":"FunctionDefinition","parameters":{"id":3466,"nodeType":"ParameterList","parameters":[],"src":"1519:2:30"},"returnParameters":{"id":3469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3468,"mutability":"mutable","name":"vaultAdmin","nameLocation":"1553:10:30","nodeType":"VariableDeclaration","scope":3470,"src":"1545:18:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3467,"name":"address","nodeType":"ElementaryTypeName","src":"1545:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1544:20:30"},"scope":3860,"src":"1497:68:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3471,"nodeType":"StructuredDocumentation","src":"1793:254:30","text":" @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n @dev The Vault must be unlocked to perform state-changing liquidity operations.\n @return unlocked True if the Vault is unlocked, false otherwise"},"functionSelector":"8380edb7","id":3476,"implemented":false,"kind":"function","modifiers":[],"name":"isUnlocked","nameLocation":"2061:10:30","nodeType":"FunctionDefinition","parameters":{"id":3472,"nodeType":"ParameterList","parameters":[],"src":"2071:2:30"},"returnParameters":{"id":3475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3474,"mutability":"mutable","name":"unlocked","nameLocation":"2102:8:30","nodeType":"VariableDeclaration","scope":3476,"src":"2097:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3473,"name":"bool","nodeType":"ElementaryTypeName","src":"2097:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2096:15:30"},"scope":3860,"src":"2052:60:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3477,"nodeType":"StructuredDocumentation","src":"2118:141:30","text":" @notice Returns the count of non-zero deltas.\n @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`"},"functionSelector":"db817187","id":3482,"implemented":false,"kind":"function","modifiers":[],"name":"getNonzeroDeltaCount","nameLocation":"2273:20:30","nodeType":"FunctionDefinition","parameters":{"id":3478,"nodeType":"ParameterList","parameters":[],"src":"2293:2:30"},"returnParameters":{"id":3481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3480,"mutability":"mutable","name":"nonzeroDeltaCount","nameLocation":"2327:17:30","nodeType":"VariableDeclaration","scope":3482,"src":"2319:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3479,"name":"uint256","nodeType":"ElementaryTypeName","src":"2319:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2318:27:30"},"scope":3860,"src":"2264:82:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3483,"nodeType":"StructuredDocumentation","src":"2352:284:30","text":" @notice Retrieves the token delta for a specific token.\n @dev This function allows reading the value from the `_tokenDeltas` mapping.\n @param token The token for which the delta is being fetched\n @return tokenDelta The delta of the specified token"},"functionSelector":"9e825ff5","id":3491,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenDelta","nameLocation":"2650:13:30","nodeType":"FunctionDefinition","parameters":{"id":3487,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3486,"mutability":"mutable","name":"token","nameLocation":"2671:5:30","nodeType":"VariableDeclaration","scope":3491,"src":"2664:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3485,"nodeType":"UserDefinedTypeName","pathNode":{"id":3484,"name":"IERC20","nameLocations":["2664:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2664:6:30"},"referencedDeclaration":10576,"src":"2664:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2663:14:30"},"returnParameters":{"id":3490,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3489,"mutability":"mutable","name":"tokenDelta","nameLocation":"2708:10:30","nodeType":"VariableDeclaration","scope":3491,"src":"2701:17:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3488,"name":"int256","nodeType":"ElementaryTypeName","src":"2701:6:30","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"2700:19:30"},"scope":3860,"src":"2641:79:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3492,"nodeType":"StructuredDocumentation","src":"2726:230:30","text":" @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n @param token The token for which to retrieve the reserve\n @return reserveAmount The amount of reserves for the given token"},"functionSelector":"96787092","id":3500,"implemented":false,"kind":"function","modifiers":[],"name":"getReservesOf","nameLocation":"2970:13:30","nodeType":"FunctionDefinition","parameters":{"id":3496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3495,"mutability":"mutable","name":"token","nameLocation":"2991:5:30","nodeType":"VariableDeclaration","scope":3500,"src":"2984:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3494,"nodeType":"UserDefinedTypeName","pathNode":{"id":3493,"name":"IERC20","nameLocations":["2984:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2984:6:30"},"referencedDeclaration":10576,"src":"2984:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2983:14:30"},"returnParameters":{"id":3499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3498,"mutability":"mutable","name":"reserveAmount","nameLocation":"3029:13:30","nodeType":"VariableDeclaration","scope":3500,"src":"3021:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3497,"name":"uint256","nodeType":"ElementaryTypeName","src":"3021:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3020:23:30"},"scope":3860,"src":"2961:83:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3501,"nodeType":"StructuredDocumentation","src":"3050:944:30","text":" @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n same pool).\n @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n than a simple swap for every pool type.\n @param pool Address of the pool to check\n @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session."},"functionSelector":"ace9b89b","id":3508,"implemented":false,"kind":"function","modifiers":[],"name":"getAddLiquidityCalledFlag","nameLocation":"4008:25:30","nodeType":"FunctionDefinition","parameters":{"id":3504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3503,"mutability":"mutable","name":"pool","nameLocation":"4042:4:30","nodeType":"VariableDeclaration","scope":3508,"src":"4034:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3502,"name":"address","nodeType":"ElementaryTypeName","src":"4034:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4033:14:30"},"returnParameters":{"id":3507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3506,"mutability":"mutable","name":"liquidityAdded","nameLocation":"4076:14:30","nodeType":"VariableDeclaration","scope":3508,"src":"4071:19:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3505,"name":"bool","nodeType":"ElementaryTypeName","src":"4071:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4070:21:30"},"scope":3860,"src":"3999:93:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3509,"nodeType":"StructuredDocumentation","src":"4323:1604:30","text":" @notice Registers a pool, associating it with its factory and the tokens it manages.\n @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n pool will automatically unpause. Balancer timestamps are 32 bits.\n A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n the Vault.\n If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n authorizer.\n @param pool The address of the pool being registered\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The initial static swap fee percentage of the pool\n @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param poolHooksContract Contract that implements the hooks for the pool\n @param liquidityManagement Liquidity management flags with implemented methods"},"functionSelector":"eeec802f","id":3532,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"5941:12:30","nodeType":"FunctionDefinition","parameters":{"id":3530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3511,"mutability":"mutable","name":"pool","nameLocation":"5971:4:30","nodeType":"VariableDeclaration","scope":3532,"src":"5963:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3510,"name":"address","nodeType":"ElementaryTypeName","src":"5963:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3515,"mutability":"mutable","name":"tokenConfig","nameLocation":"6006:11:30","nodeType":"VariableDeclaration","scope":3532,"src":"5985:32:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4128_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":3513,"nodeType":"UserDefinedTypeName","pathNode":{"id":3512,"name":"TokenConfig","nameLocations":["5985:11:30"],"nodeType":"IdentifierPath","referencedDeclaration":4128,"src":"5985:11:30"},"referencedDeclaration":4128,"src":"5985:11:30","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4128_storage_ptr","typeString":"struct TokenConfig"}},"id":3514,"nodeType":"ArrayTypeName","src":"5985:13:30","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4128_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":3517,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"6035:17:30","nodeType":"VariableDeclaration","scope":3532,"src":"6027:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3516,"name":"uint256","nodeType":"ElementaryTypeName","src":"6027:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3519,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"6069:18:30","nodeType":"VariableDeclaration","scope":3532,"src":"6062:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3518,"name":"uint32","nodeType":"ElementaryTypeName","src":"6062:6:30","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":3521,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6102:17:30","nodeType":"VariableDeclaration","scope":3532,"src":"6097:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3520,"name":"bool","nodeType":"ElementaryTypeName","src":"6097:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3524,"mutability":"mutable","name":"roleAccounts","nameLocation":"6155:12:30","nodeType":"VariableDeclaration","scope":3532,"src":"6129:38:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_calldata_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":3523,"nodeType":"UserDefinedTypeName","pathNode":{"id":3522,"name":"PoolRoleAccounts","nameLocations":["6129:16:30"],"nodeType":"IdentifierPath","referencedDeclaration":4111,"src":"6129:16:30"},"referencedDeclaration":4111,"src":"6129:16:30","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":3526,"mutability":"mutable","name":"poolHooksContract","nameLocation":"6185:17:30","nodeType":"VariableDeclaration","scope":3532,"src":"6177:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3525,"name":"address","nodeType":"ElementaryTypeName","src":"6177:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3529,"mutability":"mutable","name":"liquidityManagement","nameLocation":"6241:19:30","nodeType":"VariableDeclaration","scope":3532,"src":"6212:48:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4014_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":3528,"nodeType":"UserDefinedTypeName","pathNode":{"id":3527,"name":"LiquidityManagement","nameLocations":["6212:19:30"],"nodeType":"IdentifierPath","referencedDeclaration":4014,"src":"6212:19:30"},"referencedDeclaration":4014,"src":"6212:19:30","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4014_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"5953:313:30"},"returnParameters":{"id":3531,"nodeType":"ParameterList","parameters":[],"src":"6275:0:30"},"scope":3860,"src":"5932:344:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3533,"nodeType":"StructuredDocumentation","src":"6282:185:30","text":" @notice Checks whether a pool is registered.\n @param pool Address of the pool to check\n @return registered True if the pool is registered, false otherwise"},"functionSelector":"c673bdaf","id":3540,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"6481:16:30","nodeType":"FunctionDefinition","parameters":{"id":3536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3535,"mutability":"mutable","name":"pool","nameLocation":"6506:4:30","nodeType":"VariableDeclaration","scope":3540,"src":"6498:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3534,"name":"address","nodeType":"ElementaryTypeName","src":"6498:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6497:14:30"},"returnParameters":{"id":3539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3538,"mutability":"mutable","name":"registered","nameLocation":"6540:10:30","nodeType":"VariableDeclaration","scope":3540,"src":"6535:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3537,"name":"bool","nodeType":"ElementaryTypeName","src":"6535:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6534:17:30"},"scope":3860,"src":"6472:80:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3541,"nodeType":"StructuredDocumentation","src":"6558:589:30","text":" @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n @param pool Address of the pool to initialize\n @param to Address that will receive the output BPT\n @param tokens Tokens used to seed the pool (must match the registered tokens)\n @param exactAmountsIn Exact amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param userData Additional (optional) data required for adding initial liquidity\n @return bptAmountOut Output pool token amount"},"functionSelector":"ba8a2be0","id":3561,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"7161:10:30","nodeType":"FunctionDefinition","parameters":{"id":3557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3543,"mutability":"mutable","name":"pool","nameLocation":"7189:4:30","nodeType":"VariableDeclaration","scope":3561,"src":"7181:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3542,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3545,"mutability":"mutable","name":"to","nameLocation":"7211:2:30","nodeType":"VariableDeclaration","scope":3561,"src":"7203:10:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3544,"name":"address","nodeType":"ElementaryTypeName","src":"7203:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3549,"mutability":"mutable","name":"tokens","nameLocation":"7239:6:30","nodeType":"VariableDeclaration","scope":3561,"src":"7223:22:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3547,"nodeType":"UserDefinedTypeName","pathNode":{"id":3546,"name":"IERC20","nameLocations":["7223:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"7223:6:30"},"referencedDeclaration":10576,"src":"7223:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":3548,"nodeType":"ArrayTypeName","src":"7223:8:30","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":3552,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"7272:14:30","nodeType":"VariableDeclaration","scope":3561,"src":"7255:31:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3550,"name":"uint256","nodeType":"ElementaryTypeName","src":"7255:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3551,"nodeType":"ArrayTypeName","src":"7255:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3554,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"7304:15:30","nodeType":"VariableDeclaration","scope":3561,"src":"7296:23:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3553,"name":"uint256","nodeType":"ElementaryTypeName","src":"7296:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3556,"mutability":"mutable","name":"userData","nameLocation":"7342:8:30","nodeType":"VariableDeclaration","scope":3561,"src":"7329:21:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3555,"name":"bytes","nodeType":"ElementaryTypeName","src":"7329:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7171:185:30"},"returnParameters":{"id":3560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3559,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7383:12:30","nodeType":"VariableDeclaration","scope":3561,"src":"7375:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3558,"name":"uint256","nodeType":"ElementaryTypeName","src":"7375:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7374:22:30"},"scope":3860,"src":"7152:245:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3562,"nodeType":"StructuredDocumentation","src":"7627:258:30","text":" @notice Checks whether a pool is initialized.\n @dev An initialized pool can be considered registered as well.\n @param pool Address of the pool to check\n @return initialized True if the pool is initialized, false otherwise"},"functionSelector":"532cec7c","id":3569,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInitialized","nameLocation":"7899:17:30","nodeType":"FunctionDefinition","parameters":{"id":3565,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3564,"mutability":"mutable","name":"pool","nameLocation":"7925:4:30","nodeType":"VariableDeclaration","scope":3569,"src":"7917:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3563,"name":"address","nodeType":"ElementaryTypeName","src":"7917:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7916:14:30"},"returnParameters":{"id":3568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3567,"mutability":"mutable","name":"initialized","nameLocation":"7959:11:30","nodeType":"VariableDeclaration","scope":3569,"src":"7954:16:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3566,"name":"bool","nodeType":"ElementaryTypeName","src":"7954:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7953:18:30"},"scope":3860,"src":"7890:82:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3570,"nodeType":"StructuredDocumentation","src":"7978:152:30","text":" @notice Gets the tokens registered to a pool.\n @param pool Address of the pool\n @return tokens List of tokens in the pool"},"functionSelector":"ca4f2803","id":3579,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokens","nameLocation":"8144:13:30","nodeType":"FunctionDefinition","parameters":{"id":3573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3572,"mutability":"mutable","name":"pool","nameLocation":"8166:4:30","nodeType":"VariableDeclaration","scope":3579,"src":"8158:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3571,"name":"address","nodeType":"ElementaryTypeName","src":"8158:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8157:14:30"},"returnParameters":{"id":3578,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3577,"mutability":"mutable","name":"tokens","nameLocation":"8211:6:30","nodeType":"VariableDeclaration","scope":3579,"src":"8195:22:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3575,"nodeType":"UserDefinedTypeName","pathNode":{"id":3574,"name":"IERC20","nameLocations":["8195:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"8195:6:30"},"referencedDeclaration":10576,"src":"8195:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":3576,"nodeType":"ArrayTypeName","src":"8195:8:30","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"8194:24:30"},"scope":3860,"src":"8135:84:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3580,"nodeType":"StructuredDocumentation","src":"8225:512:30","text":" @notice Gets pool token rates.\n @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n registration order.\n @param pool Address of the pool\n @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. FP(1) for 18-decimal tokens\n @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens"},"functionSelector":"7e361bde","id":3591,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenRates","nameLocation":"8751:17:30","nodeType":"FunctionDefinition","parameters":{"id":3583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3582,"mutability":"mutable","name":"pool","nameLocation":"8786:4:30","nodeType":"VariableDeclaration","scope":3591,"src":"8778:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3581,"name":"address","nodeType":"ElementaryTypeName","src":"8778:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8768:28:30"},"returnParameters":{"id":3590,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3586,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"8837:21:30","nodeType":"VariableDeclaration","scope":3591,"src":"8820:38:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3584,"name":"uint256","nodeType":"ElementaryTypeName","src":"8820:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3585,"nodeType":"ArrayTypeName","src":"8820:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3589,"mutability":"mutable","name":"tokenRates","nameLocation":"8877:10:30","nodeType":"VariableDeclaration","scope":3591,"src":"8860:27:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3587,"name":"uint256","nodeType":"ElementaryTypeName","src":"8860:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3588,"nodeType":"ArrayTypeName","src":"8860:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8819:69:30"},"scope":3860,"src":"8742:147:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3592,"nodeType":"StructuredDocumentation","src":"8895:287:30","text":" @notice Returns comprehensive pool data for the given pool.\n @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n @param pool The address of the pool\n @return poolData The `PoolData` result"},"functionSelector":"13d21cdf","id":3600,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolData","nameLocation":"9196:11:30","nodeType":"FunctionDefinition","parameters":{"id":3595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3594,"mutability":"mutable","name":"pool","nameLocation":"9216:4:30","nodeType":"VariableDeclaration","scope":3600,"src":"9208:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3593,"name":"address","nodeType":"ElementaryTypeName","src":"9208:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9207:14:30"},"returnParameters":{"id":3599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3598,"mutability":"mutable","name":"poolData","nameLocation":"9261:8:30","nodeType":"VariableDeclaration","scope":3600,"src":"9245:24:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4163_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":3597,"nodeType":"UserDefinedTypeName","pathNode":{"id":3596,"name":"PoolData","nameLocations":["9245:8:30"],"nodeType":"IdentifierPath","referencedDeclaration":4163,"src":"9245:8:30"},"referencedDeclaration":4163,"src":"9245:8:30","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4163_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"9244:26:30"},"scope":3860,"src":"9187:84:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3601,"nodeType":"StructuredDocumentation","src":"9277:531:30","text":" @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n @param pool Address of the pool\n @return tokens The pool tokens, sorted in registration order\n @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order"},"functionSelector":"67e0e076","id":3620,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenInfo","nameLocation":"9822:16:30","nodeType":"FunctionDefinition","parameters":{"id":3604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3603,"mutability":"mutable","name":"pool","nameLocation":"9856:4:30","nodeType":"VariableDeclaration","scope":3620,"src":"9848:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3602,"name":"address","nodeType":"ElementaryTypeName","src":"9848:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9838:28:30"},"returnParameters":{"id":3619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3608,"mutability":"mutable","name":"tokens","nameLocation":"9943:6:30","nodeType":"VariableDeclaration","scope":3620,"src":"9927:22:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3606,"nodeType":"UserDefinedTypeName","pathNode":{"id":3605,"name":"IERC20","nameLocations":["9927:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"9927:6:30"},"referencedDeclaration":10576,"src":"9927:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":3607,"nodeType":"ArrayTypeName","src":"9927:8:30","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":3612,"mutability":"mutable","name":"tokenInfo","nameLocation":"9982:9:30","nodeType":"VariableDeclaration","scope":3620,"src":"9963:28:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4138_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":3610,"nodeType":"UserDefinedTypeName","pathNode":{"id":3609,"name":"TokenInfo","nameLocations":["9963:9:30"],"nodeType":"IdentifierPath","referencedDeclaration":4138,"src":"9963:9:30"},"referencedDeclaration":4138,"src":"9963:9:30","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4138_storage_ptr","typeString":"struct TokenInfo"}},"id":3611,"nodeType":"ArrayTypeName","src":"9963:11:30","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4138_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":3615,"mutability":"mutable","name":"balancesRaw","nameLocation":"10022:11:30","nodeType":"VariableDeclaration","scope":3620,"src":"10005:28:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3613,"name":"uint256","nodeType":"ElementaryTypeName","src":"10005:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3614,"nodeType":"ArrayTypeName","src":"10005:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3618,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"10064:24:30","nodeType":"VariableDeclaration","scope":3620,"src":"10047:41:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3616,"name":"uint256","nodeType":"ElementaryTypeName","src":"10047:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3617,"nodeType":"ArrayTypeName","src":"10047:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9913:185:30"},"scope":3860,"src":"9813:286:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3621,"nodeType":"StructuredDocumentation","src":"10105:312:30","text":" @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n registration order.\n @param pool Address of the pool\n @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates"},"functionSelector":"535cfd8a","id":3629,"implemented":false,"kind":"function","modifiers":[],"name":"getCurrentLiveBalances","nameLocation":"10431:22:30","nodeType":"FunctionDefinition","parameters":{"id":3624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3623,"mutability":"mutable","name":"pool","nameLocation":"10462:4:30","nodeType":"VariableDeclaration","scope":3629,"src":"10454:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3622,"name":"address","nodeType":"ElementaryTypeName","src":"10454:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10453:14:30"},"returnParameters":{"id":3628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3627,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"10508:20:30","nodeType":"VariableDeclaration","scope":3629,"src":"10491:37:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3625,"name":"uint256","nodeType":"ElementaryTypeName","src":"10491:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3626,"nodeType":"ArrayTypeName","src":"10491:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10490:39:30"},"scope":3860,"src":"10422:108:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3630,"nodeType":"StructuredDocumentation","src":"10536:301:30","text":" @notice Gets the configuration parameters of a pool.\n @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n @param pool Address of the pool\n @return poolConfig The pool configuration as a `PoolConfig` struct"},"functionSelector":"f29486a1","id":3638,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolConfig","nameLocation":"10851:13:30","nodeType":"FunctionDefinition","parameters":{"id":3633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3632,"mutability":"mutable","name":"pool","nameLocation":"10873:4:30","nodeType":"VariableDeclaration","scope":3638,"src":"10865:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3631,"name":"address","nodeType":"ElementaryTypeName","src":"10865:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10864:14:30"},"returnParameters":{"id":3637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3636,"mutability":"mutable","name":"poolConfig","nameLocation":"10920:10:30","nodeType":"VariableDeclaration","scope":3638,"src":"10902:28:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4039_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":3635,"nodeType":"UserDefinedTypeName","pathNode":{"id":3634,"name":"PoolConfig","nameLocations":["10902:10:30"],"nodeType":"IdentifierPath","referencedDeclaration":4039,"src":"10902:10:30"},"referencedDeclaration":4039,"src":"10902:10:30","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4039_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"src":"10901:30:30"},"scope":3860,"src":"10842:90:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3639,"nodeType":"StructuredDocumentation","src":"10938:283:30","text":" @notice Gets the hooks configuration parameters of a pool.\n @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n @param pool Address of the pool\n @return hooksConfig The hooks configuration as a `HooksConfig` struct"},"functionSelector":"ce8630d4","id":3647,"implemented":false,"kind":"function","modifiers":[],"name":"getHooksConfig","nameLocation":"11235:14:30","nodeType":"FunctionDefinition","parameters":{"id":3642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3641,"mutability":"mutable","name":"pool","nameLocation":"11258:4:30","nodeType":"VariableDeclaration","scope":3647,"src":"11250:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3640,"name":"address","nodeType":"ElementaryTypeName","src":"11250:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11249:14:30"},"returnParameters":{"id":3646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3645,"mutability":"mutable","name":"hooksConfig","nameLocation":"11306:11:30","nodeType":"VariableDeclaration","scope":3647,"src":"11287:30:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4085_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":3644,"nodeType":"UserDefinedTypeName","pathNode":{"id":3643,"name":"HooksConfig","nameLocations":["11287:11:30"],"nodeType":"IdentifierPath","referencedDeclaration":4085,"src":"11287:11:30"},"referencedDeclaration":4085,"src":"11287:11:30","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4085_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"}],"src":"11286:32:30"},"scope":3860,"src":"11226:93:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3648,"nodeType":"StructuredDocumentation","src":"11325:160:30","text":" @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n @param pool Address of the pool\n @return rate BPT rate"},"functionSelector":"4f037ee7","id":3655,"implemented":false,"kind":"function","modifiers":[],"name":"getBptRate","nameLocation":"11499:10:30","nodeType":"FunctionDefinition","parameters":{"id":3651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3650,"mutability":"mutable","name":"pool","nameLocation":"11518:4:30","nodeType":"VariableDeclaration","scope":3655,"src":"11510:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3649,"name":"address","nodeType":"ElementaryTypeName","src":"11510:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11509:14:30"},"returnParameters":{"id":3654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3653,"mutability":"mutable","name":"rate","nameLocation":"11555:4:30","nodeType":"VariableDeclaration","scope":3655,"src":"11547:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3652,"name":"uint256","nodeType":"ElementaryTypeName","src":"11547:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11546:14:30"},"scope":3860,"src":"11490:71:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3656,"nodeType":"StructuredDocumentation","src":"11792:168:30","text":" @notice Gets the total supply of a given ERC20 token.\n @param token The token address\n @return tokenTotalSupply Total supply of the token"},"functionSelector":"e4dc2aa4","id":3663,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"11974:11:30","nodeType":"FunctionDefinition","parameters":{"id":3659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3658,"mutability":"mutable","name":"token","nameLocation":"11994:5:30","nodeType":"VariableDeclaration","scope":3663,"src":"11986:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3657,"name":"address","nodeType":"ElementaryTypeName","src":"11986:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11985:15:30"},"returnParameters":{"id":3662,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3661,"mutability":"mutable","name":"tokenTotalSupply","nameLocation":"12032:16:30","nodeType":"VariableDeclaration","scope":3663,"src":"12024:24:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3660,"name":"uint256","nodeType":"ElementaryTypeName","src":"12024:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12023:26:30"},"scope":3860,"src":"11965:85:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3664,"nodeType":"StructuredDocumentation","src":"12056:225:30","text":" @notice Gets the balance of an account for a given ERC20 token.\n @param token Address of the token\n @param account Address of the account\n @return tokenBalance Token balance of the account"},"functionSelector":"f7888aec","id":3673,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"12295:9:30","nodeType":"FunctionDefinition","parameters":{"id":3669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3666,"mutability":"mutable","name":"token","nameLocation":"12313:5:30","nodeType":"VariableDeclaration","scope":3673,"src":"12305:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3665,"name":"address","nodeType":"ElementaryTypeName","src":"12305:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3668,"mutability":"mutable","name":"account","nameLocation":"12328:7:30","nodeType":"VariableDeclaration","scope":3673,"src":"12320:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3667,"name":"address","nodeType":"ElementaryTypeName","src":"12320:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12304:32:30"},"returnParameters":{"id":3672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3671,"mutability":"mutable","name":"tokenBalance","nameLocation":"12368:12:30","nodeType":"VariableDeclaration","scope":3673,"src":"12360:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3670,"name":"uint256","nodeType":"ElementaryTypeName","src":"12360:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12359:22:30"},"scope":3860,"src":"12286:96:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3674,"nodeType":"StructuredDocumentation","src":"12388:299:30","text":" @notice Gets the allowance of a spender for a given ERC20 token and owner.\n @param token Address of the token\n @param owner Address of the owner\n @param spender Address of the spender\n @return tokenAllowance Amount of tokens the spender is allowed to spend"},"functionSelector":"927da105","id":3685,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"12701:9:30","nodeType":"FunctionDefinition","parameters":{"id":3681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3676,"mutability":"mutable","name":"token","nameLocation":"12719:5:30","nodeType":"VariableDeclaration","scope":3685,"src":"12711:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3675,"name":"address","nodeType":"ElementaryTypeName","src":"12711:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3678,"mutability":"mutable","name":"owner","nameLocation":"12734:5:30","nodeType":"VariableDeclaration","scope":3685,"src":"12726:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3677,"name":"address","nodeType":"ElementaryTypeName","src":"12726:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3680,"mutability":"mutable","name":"spender","nameLocation":"12749:7:30","nodeType":"VariableDeclaration","scope":3685,"src":"12741:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3679,"name":"address","nodeType":"ElementaryTypeName","src":"12741:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12710:47:30"},"returnParameters":{"id":3684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3683,"mutability":"mutable","name":"tokenAllowance","nameLocation":"12789:14:30","nodeType":"VariableDeclaration","scope":3685,"src":"12781:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3682,"name":"uint256","nodeType":"ElementaryTypeName","src":"12781:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12780:24:30"},"scope":3860,"src":"12692:113:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3686,"nodeType":"StructuredDocumentation","src":"12811:475:30","text":" @notice Approves a spender to spend pool tokens on behalf of sender.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param spender Address of the spender\n @param amount Amount of tokens to approve\n @return success True if successful, false otherwise"},"functionSelector":"e1f21c67","id":3697,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"13300:7:30","nodeType":"FunctionDefinition","parameters":{"id":3693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3688,"mutability":"mutable","name":"owner","nameLocation":"13316:5:30","nodeType":"VariableDeclaration","scope":3697,"src":"13308:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3687,"name":"address","nodeType":"ElementaryTypeName","src":"13308:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3690,"mutability":"mutable","name":"spender","nameLocation":"13331:7:30","nodeType":"VariableDeclaration","scope":3697,"src":"13323:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3689,"name":"address","nodeType":"ElementaryTypeName","src":"13323:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3692,"mutability":"mutable","name":"amount","nameLocation":"13348:6:30","nodeType":"VariableDeclaration","scope":3697,"src":"13340:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3691,"name":"uint256","nodeType":"ElementaryTypeName","src":"13340:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13307:48:30"},"returnParameters":{"id":3696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3695,"mutability":"mutable","name":"success","nameLocation":"13379:7:30","nodeType":"VariableDeclaration","scope":3697,"src":"13374:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3694,"name":"bool","nodeType":"ElementaryTypeName","src":"13374:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13373:14:30"},"scope":3860,"src":"13291:97:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3698,"nodeType":"StructuredDocumentation","src":"13615:251:30","text":" @notice Indicates whether a pool is paused.\n @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n @param pool The pool to be checked\n @return poolPaused True if the pool is paused"},"functionSelector":"6c9bc732","id":3705,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolPaused","nameLocation":"13880:12:30","nodeType":"FunctionDefinition","parameters":{"id":3701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3700,"mutability":"mutable","name":"pool","nameLocation":"13901:4:30","nodeType":"VariableDeclaration","scope":3705,"src":"13893:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3699,"name":"address","nodeType":"ElementaryTypeName","src":"13893:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13892:14:30"},"returnParameters":{"id":3704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3703,"mutability":"mutable","name":"poolPaused","nameLocation":"13935:10:30","nodeType":"VariableDeclaration","scope":3705,"src":"13930:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3702,"name":"bool","nodeType":"ElementaryTypeName","src":"13930:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13929:17:30"},"scope":3860,"src":"13871:76:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3706,"nodeType":"StructuredDocumentation","src":"13953:648:30","text":" @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n the buffer period. Balancer timestamps are 32 bits.\n @param pool The pool whose data is requested\n @return poolPaused True if the Pool is paused\n @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n @return pauseManager The pause manager, or the zero address"},"functionSelector":"15e32046","id":3719,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolPausedState","nameLocation":"14615:18:30","nodeType":"FunctionDefinition","parameters":{"id":3709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3708,"mutability":"mutable","name":"pool","nameLocation":"14651:4:30","nodeType":"VariableDeclaration","scope":3719,"src":"14643:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3707,"name":"address","nodeType":"ElementaryTypeName","src":"14643:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14633:28:30"},"returnParameters":{"id":3718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3711,"mutability":"mutable","name":"poolPaused","nameLocation":"14714:10:30","nodeType":"VariableDeclaration","scope":3719,"src":"14709:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3710,"name":"bool","nodeType":"ElementaryTypeName","src":"14709:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3713,"mutability":"mutable","name":"poolPauseWindowEndTime","nameLocation":"14733:22:30","nodeType":"VariableDeclaration","scope":3719,"src":"14726:29:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3712,"name":"uint32","nodeType":"ElementaryTypeName","src":"14726:6:30","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":3715,"mutability":"mutable","name":"poolBufferPeriodEndTime","nameLocation":"14764:23:30","nodeType":"VariableDeclaration","scope":3719,"src":"14757:30:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3714,"name":"uint32","nodeType":"ElementaryTypeName","src":"14757:6:30","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":3717,"mutability":"mutable","name":"pauseManager","nameLocation":"14797:12:30","nodeType":"VariableDeclaration","scope":3719,"src":"14789:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3716,"name":"address","nodeType":"ElementaryTypeName","src":"14789:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14708:102:30"},"scope":3860,"src":"14606:205:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3720,"nodeType":"StructuredDocumentation","src":"15039:332:30","text":" @notice Checks if the wrapped token has an initialized buffer in the Vault.\n @dev An initialized buffer should have an asset registered in the Vault.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return isBufferInitialized True if the ERC4626 buffer is initialized"},"functionSelector":"6844846b","id":3728,"implemented":false,"kind":"function","modifiers":[],"name":"isERC4626BufferInitialized","nameLocation":"15385:26:30","nodeType":"FunctionDefinition","parameters":{"id":3724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3723,"mutability":"mutable","name":"wrappedToken","nameLocation":"15421:12:30","nodeType":"VariableDeclaration","scope":3728,"src":"15412:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3722,"nodeType":"UserDefinedTypeName","pathNode":{"id":3721,"name":"IERC4626","nameLocations":["15412:8:30"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"15412:8:30"},"referencedDeclaration":9846,"src":"15412:8:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15411:23:30"},"returnParameters":{"id":3727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3726,"mutability":"mutable","name":"isBufferInitialized","nameLocation":"15463:19:30","nodeType":"VariableDeclaration","scope":3728,"src":"15458:24:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3725,"name":"bool","nodeType":"ElementaryTypeName","src":"15458:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15457:26:30"},"scope":3860,"src":"15376:108:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3729,"nodeType":"StructuredDocumentation","src":"15490:477:30","text":" @notice Gets the registered asset for a given buffer.\n @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n the Vault on initialization.\n @param wrappedToken The wrapped token specifying the buffer\n @return asset The underlying asset of the wrapped token"},"functionSelector":"4afbaf5a","id":3737,"implemented":false,"kind":"function","modifiers":[],"name":"getERC4626BufferAsset","nameLocation":"15981:21:30","nodeType":"FunctionDefinition","parameters":{"id":3733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3732,"mutability":"mutable","name":"wrappedToken","nameLocation":"16012:12:30","nodeType":"VariableDeclaration","scope":3737,"src":"16003:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3731,"nodeType":"UserDefinedTypeName","pathNode":{"id":3730,"name":"IERC4626","nameLocations":["16003:8:30"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"16003:8:30"},"referencedDeclaration":9846,"src":"16003:8:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16002:23:30"},"returnParameters":{"id":3736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3735,"mutability":"mutable","name":"asset","nameLocation":"16057:5:30","nodeType":"VariableDeclaration","scope":3737,"src":"16049:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3734,"name":"address","nodeType":"ElementaryTypeName","src":"16049:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16048:15:30"},"scope":3860,"src":"15972:92:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3738,"nodeType":"StructuredDocumentation","src":"16288:379:30","text":" @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return swapFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"85e0b999","id":3748,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateSwapFeeAmount","nameLocation":"16681:25:30","nodeType":"FunctionDefinition","parameters":{"id":3744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3740,"mutability":"mutable","name":"pool","nameLocation":"16715:4:30","nodeType":"VariableDeclaration","scope":3748,"src":"16707:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3739,"name":"address","nodeType":"ElementaryTypeName","src":"16707:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3743,"mutability":"mutable","name":"token","nameLocation":"16728:5:30","nodeType":"VariableDeclaration","scope":3748,"src":"16721:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3742,"nodeType":"UserDefinedTypeName","pathNode":{"id":3741,"name":"IERC20","nameLocations":["16721:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"16721:6:30"},"referencedDeclaration":10576,"src":"16721:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"16706:28:30"},"returnParameters":{"id":3747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3746,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"16766:13:30","nodeType":"VariableDeclaration","scope":3748,"src":"16758:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3745,"name":"uint256","nodeType":"ElementaryTypeName","src":"16758:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16757:23:30"},"scope":3860,"src":"16672:109:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3749,"nodeType":"StructuredDocumentation","src":"16787:381:30","text":" @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return yieldFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"00fdfa13","id":3759,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateYieldFeeAmount","nameLocation":"17182:26:30","nodeType":"FunctionDefinition","parameters":{"id":3755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3751,"mutability":"mutable","name":"pool","nameLocation":"17217:4:30","nodeType":"VariableDeclaration","scope":3759,"src":"17209:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3750,"name":"address","nodeType":"ElementaryTypeName","src":"17209:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3754,"mutability":"mutable","name":"token","nameLocation":"17230:5:30","nodeType":"VariableDeclaration","scope":3759,"src":"17223:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3753,"nodeType":"UserDefinedTypeName","pathNode":{"id":3752,"name":"IERC20","nameLocations":["17223:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"17223:6:30"},"referencedDeclaration":10576,"src":"17223:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"17208:28:30"},"returnParameters":{"id":3758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3757,"mutability":"mutable","name":"yieldFeeAmount","nameLocation":"17268:14:30","nodeType":"VariableDeclaration","scope":3759,"src":"17260:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3756,"name":"uint256","nodeType":"ElementaryTypeName","src":"17260:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17259:24:30"},"scope":3860,"src":"17173:111:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3760,"nodeType":"StructuredDocumentation","src":"17290:271:30","text":" @notice Fetches the static swap fee percentage for a given pool.\n @param pool The address of the pool whose static swap fee percentage is being queried\n @return swapFeePercentage The current static swap fee percentage for the specified pool"},"functionSelector":"b45090f9","id":3767,"implemented":false,"kind":"function","modifiers":[],"name":"getStaticSwapFeePercentage","nameLocation":"17575:26:30","nodeType":"FunctionDefinition","parameters":{"id":3763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3762,"mutability":"mutable","name":"pool","nameLocation":"17610:4:30","nodeType":"VariableDeclaration","scope":3767,"src":"17602:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3761,"name":"address","nodeType":"ElementaryTypeName","src":"17602:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17601:14:30"},"returnParameters":{"id":3766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3765,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"17647:17:30","nodeType":"VariableDeclaration","scope":3767,"src":"17639:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3764,"name":"uint256","nodeType":"ElementaryTypeName","src":"17639:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17638:27:30"},"scope":3860,"src":"17566:100:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3768,"nodeType":"StructuredDocumentation","src":"17672:286:30","text":" @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n @param pool The address of the pool whose roles are being queried\n @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)"},"functionSelector":"e9ddeb26","id":3776,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolRoleAccounts","nameLocation":"17972:19:30","nodeType":"FunctionDefinition","parameters":{"id":3771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3770,"mutability":"mutable","name":"pool","nameLocation":"18000:4:30","nodeType":"VariableDeclaration","scope":3776,"src":"17992:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3769,"name":"address","nodeType":"ElementaryTypeName","src":"17992:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17991:14:30"},"returnParameters":{"id":3775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3774,"mutability":"mutable","name":"roleAccounts","nameLocation":"18053:12:30","nodeType":"VariableDeclaration","scope":3776,"src":"18029:36:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":3773,"nodeType":"UserDefinedTypeName","pathNode":{"id":3772,"name":"PoolRoleAccounts","nameLocations":["18029:16:30"],"nodeType":"IdentifierPath","referencedDeclaration":4111,"src":"18029:16:30"},"referencedDeclaration":4111,"src":"18029:16:30","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"src":"18028:38:30"},"scope":3860,"src":"17963:104:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3777,"nodeType":"StructuredDocumentation","src":"18073:363:30","text":" @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n @dev Reverts if the hook doesn't return the success flag set to `true`.\n @param pool The pool\n @param swapParams The swap parameters used to compute the fee\n @return dynamicSwapFeePercentage The dynamic swap fee percentage"},"functionSelector":"4d472bdd","id":3787,"implemented":false,"kind":"function","modifiers":[],"name":"computeDynamicSwapFeePercentage","nameLocation":"18450:31:30","nodeType":"FunctionDefinition","parameters":{"id":3783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3779,"mutability":"mutable","name":"pool","nameLocation":"18499:4:30","nodeType":"VariableDeclaration","scope":3787,"src":"18491:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3778,"name":"address","nodeType":"ElementaryTypeName","src":"18491:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3782,"mutability":"mutable","name":"swapParams","nameLocation":"18535:10:30","nodeType":"VariableDeclaration","scope":3787,"src":"18513:32:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4206_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":3781,"nodeType":"UserDefinedTypeName","pathNode":{"id":3780,"name":"PoolSwapParams","nameLocations":["18513:14:30"],"nodeType":"IdentifierPath","referencedDeclaration":4206,"src":"18513:14:30"},"referencedDeclaration":4206,"src":"18513:14:30","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4206_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"18481:70:30"},"returnParameters":{"id":3786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3785,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"18583:24:30","nodeType":"VariableDeclaration","scope":3787,"src":"18575:32:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3784,"name":"uint256","nodeType":"ElementaryTypeName","src":"18575:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18574:34:30"},"scope":3860,"src":"18441:168:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3788,"nodeType":"StructuredDocumentation","src":"18615:145:30","text":" @notice Returns the Protocol Fee Controller address.\n @return protocolFeeController Address of the ProtocolFeeController"},"functionSelector":"85f2dbd4","id":3794,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"18774:24:30","nodeType":"FunctionDefinition","parameters":{"id":3789,"nodeType":"ParameterList","parameters":[],"src":"18798:2:30"},"returnParameters":{"id":3793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3792,"mutability":"mutable","name":"protocolFeeController","nameLocation":"18847:21:30","nodeType":"VariableDeclaration","scope":3794,"src":"18824:44:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":3791,"nodeType":"UserDefinedTypeName","pathNode":{"id":3790,"name":"IProtocolFeeController","nameLocations":["18824:22:30"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"18824:22:30"},"referencedDeclaration":1955,"src":"18824:22:30","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"18823:46:30"},"scope":3860,"src":"18765:105:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3795,"nodeType":"StructuredDocumentation","src":"19098:296:30","text":" @notice Checks whether a pool is in Recovery Mode.\n @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n @param pool Address of the pool to check\n @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise"},"functionSelector":"be7d628a","id":3802,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInRecoveryMode","nameLocation":"19408:20:30","nodeType":"FunctionDefinition","parameters":{"id":3798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3797,"mutability":"mutable","name":"pool","nameLocation":"19437:4:30","nodeType":"VariableDeclaration","scope":3802,"src":"19429:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3796,"name":"address","nodeType":"ElementaryTypeName","src":"19429:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19428:14:30"},"returnParameters":{"id":3801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3800,"mutability":"mutable","name":"inRecoveryMode","nameLocation":"19471:14:30","nodeType":"VariableDeclaration","scope":3802,"src":"19466:19:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3799,"name":"bool","nodeType":"ElementaryTypeName","src":"19466:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19465:21:30"},"scope":3860,"src":"19399:88:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3803,"nodeType":"StructuredDocumentation","src":"19493:679:30","text":" @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n The request is implemented by the Vault without any interaction with the pool, ensuring that\n it works the same for all pools, and cannot be disabled by a new pool type.\n @param pool Address of the pool\n @param from Address of user to burn pool tokens from\n @param exactBptAmountIn Input pool token amount\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order"},"functionSelector":"a07d6040","id":3818,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityRecovery","nameLocation":"20186:23:30","nodeType":"FunctionDefinition","parameters":{"id":3813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3805,"mutability":"mutable","name":"pool","nameLocation":"20227:4:30","nodeType":"VariableDeclaration","scope":3818,"src":"20219:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3804,"name":"address","nodeType":"ElementaryTypeName","src":"20219:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3807,"mutability":"mutable","name":"from","nameLocation":"20249:4:30","nodeType":"VariableDeclaration","scope":3818,"src":"20241:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3806,"name":"address","nodeType":"ElementaryTypeName","src":"20241:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3809,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"20271:16:30","nodeType":"VariableDeclaration","scope":3818,"src":"20263:24:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3808,"name":"uint256","nodeType":"ElementaryTypeName","src":"20263:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3812,"mutability":"mutable","name":"minAmountsOut","nameLocation":"20314:13:30","nodeType":"VariableDeclaration","scope":3818,"src":"20297:30:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3810,"name":"uint256","nodeType":"ElementaryTypeName","src":"20297:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3811,"nodeType":"ArrayTypeName","src":"20297:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20209:124:30"},"returnParameters":{"id":3817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3816,"mutability":"mutable","name":"amountsOut","nameLocation":"20369:10:30","nodeType":"VariableDeclaration","scope":3818,"src":"20352:27:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3814,"name":"uint256","nodeType":"ElementaryTypeName","src":"20352:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3815,"nodeType":"ArrayTypeName","src":"20352:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20351:29:30"},"scope":3860,"src":"20177:204:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3819,"nodeType":"StructuredDocumentation","src":"20602:699:30","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"edfa3568","id":3826,"implemented":false,"kind":"function","modifiers":[],"name":"quote","nameLocation":"21315:5:30","nodeType":"FunctionDefinition","parameters":{"id":3822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3821,"mutability":"mutable","name":"data","nameLocation":"21336:4:30","nodeType":"VariableDeclaration","scope":3826,"src":"21321:19:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3820,"name":"bytes","nodeType":"ElementaryTypeName","src":"21321:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21320:21:30"},"returnParameters":{"id":3825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3824,"mutability":"mutable","name":"result","nameLocation":"21373:6:30","nodeType":"VariableDeclaration","scope":3826,"src":"21360:19:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3823,"name":"bytes","nodeType":"ElementaryTypeName","src":"21360:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21359:21:30"},"scope":3860,"src":"21306:75:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3827,"nodeType":"StructuredDocumentation","src":"21387:731:30","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n This call always reverts, returning the result in the revert reason.\n @param data Contains function signature and args to be passed to the msg.sender"},"functionSelector":"757d64b3","id":3832,"implemented":false,"kind":"function","modifiers":[],"name":"quoteAndRevert","nameLocation":"22132:14:30","nodeType":"FunctionDefinition","parameters":{"id":3830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3829,"mutability":"mutable","name":"data","nameLocation":"22162:4:30","nodeType":"VariableDeclaration","scope":3832,"src":"22147:19:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3828,"name":"bytes","nodeType":"ElementaryTypeName","src":"22147:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22146:21:30"},"returnParameters":{"id":3831,"nodeType":"ParameterList","parameters":[],"src":"22176:0:30"},"scope":3860,"src":"22123:54:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3833,"nodeType":"StructuredDocumentation","src":"22183:239:30","text":" @notice Returns true if queries are disabled on the Vault.\n @dev If true, queries might either be disabled temporarily or permanently.\n @return queryDisabled True if query functionality is reversibly disabled"},"functionSelector":"b4aef0ab","id":3838,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabled","nameLocation":"22436:15:30","nodeType":"FunctionDefinition","parameters":{"id":3834,"nodeType":"ParameterList","parameters":[],"src":"22451:2:30"},"returnParameters":{"id":3837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3836,"mutability":"mutable","name":"queryDisabled","nameLocation":"22482:13:30","nodeType":"VariableDeclaration","scope":3838,"src":"22477:18:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3835,"name":"bool","nodeType":"ElementaryTypeName","src":"22477:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22476:20:30"},"scope":3860,"src":"22427:70:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3839,"nodeType":"StructuredDocumentation","src":"22503:302:30","text":" @notice Returns true if queries are disabled permanently; false if they are enabled.\n @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n @return queryDisabledPermanently True if query functionality is permanently disabled"},"functionSelector":"13ef8a5d","id":3844,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabledPermanently","nameLocation":"22819:26:30","nodeType":"FunctionDefinition","parameters":{"id":3840,"nodeType":"ParameterList","parameters":[],"src":"22845:2:30"},"returnParameters":{"id":3843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3842,"mutability":"mutable","name":"queryDisabledPermanently","nameLocation":"22876:24:30","nodeType":"VariableDeclaration","scope":3844,"src":"22871:29:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3841,"name":"bool","nodeType":"ElementaryTypeName","src":"22871:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22870:31:30"},"scope":3860,"src":"22810:92:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3845,"nodeType":"StructuredDocumentation","src":"22908:162:30","text":" @notice Pools can use this event to emit event data from the Vault.\n @param eventKey Event key\n @param eventData Encoded event data"},"functionSelector":"c8088247","id":3852,"implemented":false,"kind":"function","modifiers":[],"name":"emitAuxiliaryEvent","nameLocation":"23084:18:30","nodeType":"FunctionDefinition","parameters":{"id":3850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3847,"mutability":"mutable","name":"eventKey","nameLocation":"23111:8:30","nodeType":"VariableDeclaration","scope":3852,"src":"23103:16:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3846,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23103:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3849,"mutability":"mutable","name":"eventData","nameLocation":"23136:9:30","nodeType":"VariableDeclaration","scope":3852,"src":"23121:24:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3848,"name":"bytes","nodeType":"ElementaryTypeName","src":"23121:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"23102:44:30"},"returnParameters":{"id":3851,"nodeType":"ParameterList","parameters":[],"src":"23155:0:30"},"scope":3860,"src":"23075:81:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3853,"nodeType":"StructuredDocumentation","src":"23380:284:30","text":" @notice Returns the Authorizer address.\n @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n and can be changed through a permissioned call.\n @return authorizer Address of the authorizer contract"},"functionSelector":"aaabadc5","id":3859,"implemented":false,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"23678:13:30","nodeType":"FunctionDefinition","parameters":{"id":3854,"nodeType":"ParameterList","parameters":[],"src":"23691:2:30"},"returnParameters":{"id":3858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3857,"mutability":"mutable","name":"authorizer","nameLocation":"23729:10:30","nodeType":"VariableDeclaration","scope":3859,"src":"23717:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"},"typeName":{"id":3856,"nodeType":"UserDefinedTypeName","pathNode":{"id":3855,"name":"IAuthorizer","nameLocations":["23717:11:30"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"23717:11:30"},"referencedDeclaration":1341,"src":"23717:11:30","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23716:24:30"},"scope":3860,"src":"23669:72:30","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3861,"src":"767:22976:30","usedErrors":[],"usedEvents":[]}],"src":"46:23698:30"},"id":30},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","exportedSymbols":{"AddLiquidityKind":[4241],"AddLiquidityParams":[4257],"AfterSwapParams":[4235],"BufferWrapOrUnwrapParams":[4296],"FEE_BITLENGTH":[4299],"FEE_SCALING_FACTOR":[4302],"HookFlags":[4061],"HooksConfig":[4085],"IERC20":[10576],"IERC4626":[9846],"IRateProvider":[24],"IVaultMain":[3996],"LiquidityManagement":[4014],"MAX_FEE_PERCENTAGE":[4305],"PoolConfig":[4039],"PoolConfigBits":[4016],"PoolData":[4163],"PoolRoleAccounts":[4111],"PoolSwapParams":[4206],"RemoveLiquidityKind":[4262],"RemoveLiquidityParams":[4278],"Rounding":[4166],"SwapKind":[4169],"SwapState":[4095],"TokenConfig":[4128],"TokenInfo":[4138],"TokenType":[4115],"VaultState":[4103],"VaultSwapParams":[4188],"WrappingDirection":[4281]},"id":3997,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3862,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:31"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3864,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3997,"sourceUnit":10577,"src":"72:72:31","symbolAliases":[{"foreign":{"id":3863,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:31","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":3865,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3997,"sourceUnit":4306,"src":"146:26:31","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultMain","contractDependencies":[],"contractKind":"interface","documentation":{"id":3866,"nodeType":"StructuredDocumentation","src":"174:232:31","text":" @notice Interface for functions defined on the main Vault contract.\n @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n for technical or performance reasons."},"fullyImplemented":false,"id":3996,"linearizedBaseContracts":[3996],"name":"IVaultMain","nameLocation":"417:10:31","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3867,"nodeType":"StructuredDocumentation","src":"656:431:31","text":" @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n meaning all balances for the caller have to be settled at the end.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"48c89491","id":3874,"implemented":false,"kind":"function","modifiers":[],"name":"unlock","nameLocation":"1101:6:31","nodeType":"FunctionDefinition","parameters":{"id":3870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3869,"mutability":"mutable","name":"data","nameLocation":"1123:4:31","nodeType":"VariableDeclaration","scope":3874,"src":"1108:19:31","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3868,"name":"bytes","nodeType":"ElementaryTypeName","src":"1108:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1107:21:31"},"returnParameters":{"id":3873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3872,"mutability":"mutable","name":"result","nameLocation":"1160:6:31","nodeType":"VariableDeclaration","scope":3874,"src":"1147:19:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3871,"name":"bytes","nodeType":"ElementaryTypeName","src":"1147:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1146:21:31"},"scope":3996,"src":"1092:76:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3875,"nodeType":"StructuredDocumentation","src":"1174:1291:31","text":" @notice Settles deltas for a token; must be successful for the current lock to be released.\n @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n excess in the Vault balance.\n If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n not affect settlement.\n The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n difference equals current balance of the token minus existing reserves of the token when the function is called.\n @param token Address of the token\n @param amountHint Amount paid as reported by the caller\n @return credit Credit received in return of the payment"},"functionSelector":"15afd409","id":3885,"implemented":false,"kind":"function","modifiers":[],"name":"settle","nameLocation":"2479:6:31","nodeType":"FunctionDefinition","parameters":{"id":3881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3878,"mutability":"mutable","name":"token","nameLocation":"2493:5:31","nodeType":"VariableDeclaration","scope":3885,"src":"2486:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3877,"nodeType":"UserDefinedTypeName","pathNode":{"id":3876,"name":"IERC20","nameLocations":["2486:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2486:6:31"},"referencedDeclaration":10576,"src":"2486:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3880,"mutability":"mutable","name":"amountHint","nameLocation":"2508:10:31","nodeType":"VariableDeclaration","scope":3885,"src":"2500:18:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3879,"name":"uint256","nodeType":"ElementaryTypeName","src":"2500:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2485:34:31"},"returnParameters":{"id":3884,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3883,"mutability":"mutable","name":"credit","nameLocation":"2546:6:31","nodeType":"VariableDeclaration","scope":3885,"src":"2538:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3882,"name":"uint256","nodeType":"ElementaryTypeName","src":"2538:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2537:16:31"},"scope":3996,"src":"2470:84:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3886,"nodeType":"StructuredDocumentation","src":"2560:315:31","text":" @notice Sends tokens to a recipient.\n @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n debts.\n @param token Address of the token\n @param to Recipient address\n @param amount Amount of tokens to send"},"functionSelector":"ae639329","id":3896,"implemented":false,"kind":"function","modifiers":[],"name":"sendTo","nameLocation":"2889:6:31","nodeType":"FunctionDefinition","parameters":{"id":3894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3889,"mutability":"mutable","name":"token","nameLocation":"2903:5:31","nodeType":"VariableDeclaration","scope":3896,"src":"2896:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3888,"nodeType":"UserDefinedTypeName","pathNode":{"id":3887,"name":"IERC20","nameLocations":["2896:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2896:6:31"},"referencedDeclaration":10576,"src":"2896:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3891,"mutability":"mutable","name":"to","nameLocation":"2918:2:31","nodeType":"VariableDeclaration","scope":3896,"src":"2910:10:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3890,"name":"address","nodeType":"ElementaryTypeName","src":"2910:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3893,"mutability":"mutable","name":"amount","nameLocation":"2930:6:31","nodeType":"VariableDeclaration","scope":3896,"src":"2922:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3892,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2895:42:31"},"returnParameters":{"id":3895,"nodeType":"ParameterList","parameters":[],"src":"2946:0:31"},"scope":3996,"src":"2880:67:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3897,"nodeType":"StructuredDocumentation","src":"3161:412:31","text":" @notice Swaps tokens based on provided parameters.\n @dev All parameters are given in raw token decimal encoding.\n @param vaultSwapParams Parameters for the swap (see above for struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"2bfb780c","id":3909,"implemented":false,"kind":"function","modifiers":[],"name":"swap","nameLocation":"3587:4:31","nodeType":"FunctionDefinition","parameters":{"id":3901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3900,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"3624:15:31","nodeType":"VariableDeclaration","scope":3909,"src":"3601:38:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4188_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":3899,"nodeType":"UserDefinedTypeName","pathNode":{"id":3898,"name":"VaultSwapParams","nameLocations":["3601:15:31"],"nodeType":"IdentifierPath","referencedDeclaration":4188,"src":"3601:15:31"},"referencedDeclaration":4188,"src":"3601:15:31","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4188_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"}],"src":"3591:54:31"},"returnParameters":{"id":3908,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3903,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"3672:19:31","nodeType":"VariableDeclaration","scope":3909,"src":"3664:27:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3902,"name":"uint256","nodeType":"ElementaryTypeName","src":"3664:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3905,"mutability":"mutable","name":"amountInRaw","nameLocation":"3701:11:31","nodeType":"VariableDeclaration","scope":3909,"src":"3693:19:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3904,"name":"uint256","nodeType":"ElementaryTypeName","src":"3693:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3907,"mutability":"mutable","name":"amountOutRaw","nameLocation":"3722:12:31","nodeType":"VariableDeclaration","scope":3909,"src":"3714:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3906,"name":"uint256","nodeType":"ElementaryTypeName","src":"3714:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3663:72:31"},"scope":3996,"src":"3578:158:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3910,"nodeType":"StructuredDocumentation","src":"3954:523:31","text":" @notice Adds liquidity to a pool.\n @dev Caution should be exercised when adding liquidity because the Vault has the capability\n to transfer tokens from any user, given that it holds all allowances.\n @param params Parameters for the add liquidity (see above for struct definition)\n @return amountsIn Actual amounts of input tokens\n @return bptAmountOut Output pool token amount\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"4af29ec4","id":3923,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidity","nameLocation":"4491:12:31","nodeType":"FunctionDefinition","parameters":{"id":3914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3913,"mutability":"mutable","name":"params","nameLocation":"4539:6:31","nodeType":"VariableDeclaration","scope":3923,"src":"4513:32:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4257_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":3912,"nodeType":"UserDefinedTypeName","pathNode":{"id":3911,"name":"AddLiquidityParams","nameLocations":["4513:18:31"],"nodeType":"IdentifierPath","referencedDeclaration":4257,"src":"4513:18:31"},"referencedDeclaration":4257,"src":"4513:18:31","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4257_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"}],"src":"4503:48:31"},"returnParameters":{"id":3922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3917,"mutability":"mutable","name":"amountsIn","nameLocation":"4587:9:31","nodeType":"VariableDeclaration","scope":3923,"src":"4570:26:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3915,"name":"uint256","nodeType":"ElementaryTypeName","src":"4570:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3916,"nodeType":"ArrayTypeName","src":"4570:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3919,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4606:12:31","nodeType":"VariableDeclaration","scope":3923,"src":"4598:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3918,"name":"uint256","nodeType":"ElementaryTypeName","src":"4598:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3921,"mutability":"mutable","name":"returnData","nameLocation":"4633:10:31","nodeType":"VariableDeclaration","scope":3923,"src":"4620:23:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3920,"name":"bytes","nodeType":"ElementaryTypeName","src":"4620:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4569:75:31"},"scope":3996,"src":"4482:163:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3924,"nodeType":"StructuredDocumentation","src":"4864:644:31","text":" @notice Removes liquidity from a pool.\n @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n Untrusted routers require prior approval from the user. This is the only function allowed to call\n _queryModeBalanceIncrease (and only in a query context).\n @param params Parameters for the remove liquidity (see above for struct definition)\n @return bptAmountIn Actual amount of BPT burned\n @return amountsOut Actual amounts of output tokens\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"21457897","id":3937,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidity","nameLocation":"5522:15:31","nodeType":"FunctionDefinition","parameters":{"id":3928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3927,"mutability":"mutable","name":"params","nameLocation":"5576:6:31","nodeType":"VariableDeclaration","scope":3937,"src":"5547:35:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4278_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":3926,"nodeType":"UserDefinedTypeName","pathNode":{"id":3925,"name":"RemoveLiquidityParams","nameLocations":["5547:21:31"],"nodeType":"IdentifierPath","referencedDeclaration":4278,"src":"5547:21:31"},"referencedDeclaration":4278,"src":"5547:21:31","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4278_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"}],"src":"5537:51:31"},"returnParameters":{"id":3936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3930,"mutability":"mutable","name":"bptAmountIn","nameLocation":"5615:11:31","nodeType":"VariableDeclaration","scope":3937,"src":"5607:19:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3929,"name":"uint256","nodeType":"ElementaryTypeName","src":"5607:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3933,"mutability":"mutable","name":"amountsOut","nameLocation":"5645:10:31","nodeType":"VariableDeclaration","scope":3937,"src":"5628:27:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3931,"name":"uint256","nodeType":"ElementaryTypeName","src":"5628:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3932,"nodeType":"ArrayTypeName","src":"5628:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3935,"mutability":"mutable","name":"returnData","nameLocation":"5670:10:31","nodeType":"VariableDeclaration","scope":3937,"src":"5657:23:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3934,"name":"bytes","nodeType":"ElementaryTypeName","src":"5657:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5606:75:31"},"scope":3996,"src":"5513:169:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3938,"nodeType":"StructuredDocumentation","src":"5912:385:31","text":" @notice Gets the index of a token in a given pool.\n @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n @param pool Address of the pool\n @param token Address of the token\n @return tokenCount Number of tokens in the pool\n @return index Index corresponding to the given token in the pool's token list"},"functionSelector":"c9c1661b","id":3950,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenCountAndIndexOfToken","nameLocation":"6311:32:31","nodeType":"FunctionDefinition","parameters":{"id":3944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3940,"mutability":"mutable","name":"pool","nameLocation":"6361:4:31","nodeType":"VariableDeclaration","scope":3950,"src":"6353:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3939,"name":"address","nodeType":"ElementaryTypeName","src":"6353:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3943,"mutability":"mutable","name":"token","nameLocation":"6382:5:31","nodeType":"VariableDeclaration","scope":3950,"src":"6375:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3942,"nodeType":"UserDefinedTypeName","pathNode":{"id":3941,"name":"IERC20","nameLocations":["6375:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6375:6:31"},"referencedDeclaration":10576,"src":"6375:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6343:50:31"},"returnParameters":{"id":3949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3946,"mutability":"mutable","name":"tokenCount","nameLocation":"6425:10:31","nodeType":"VariableDeclaration","scope":3950,"src":"6417:18:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3945,"name":"uint256","nodeType":"ElementaryTypeName","src":"6417:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3948,"mutability":"mutable","name":"index","nameLocation":"6445:5:31","nodeType":"VariableDeclaration","scope":3950,"src":"6437:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3947,"name":"uint256","nodeType":"ElementaryTypeName","src":"6437:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6416:35:31"},"scope":3996,"src":"6302:150:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3951,"nodeType":"StructuredDocumentation","src":"6683:460:31","text":" @notice Transfers pool token from owner to a recipient.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"beabacc8","id":3962,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"7157:8:31","nodeType":"FunctionDefinition","parameters":{"id":3958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3953,"mutability":"mutable","name":"owner","nameLocation":"7174:5:31","nodeType":"VariableDeclaration","scope":3962,"src":"7166:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3952,"name":"address","nodeType":"ElementaryTypeName","src":"7166:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3955,"mutability":"mutable","name":"to","nameLocation":"7189:2:31","nodeType":"VariableDeclaration","scope":3962,"src":"7181:10:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3954,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3957,"mutability":"mutable","name":"amount","nameLocation":"7201:6:31","nodeType":"VariableDeclaration","scope":3962,"src":"7193:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3956,"name":"uint256","nodeType":"ElementaryTypeName","src":"7193:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7165:43:31"},"returnParameters":{"id":3961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3960,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3962,"src":"7227:4:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3959,"name":"bool","nodeType":"ElementaryTypeName","src":"7227:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7226:6:31"},"scope":3996,"src":"7148:85:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3963,"nodeType":"StructuredDocumentation","src":"7239:544:31","text":" @notice Transfers pool token from a sender to a recipient using an allowance.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param spender Address allowed to perform the transfer\n @param from Address of the sender\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"15dacbea","id":3976,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"7797:12:31","nodeType":"FunctionDefinition","parameters":{"id":3972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3965,"mutability":"mutable","name":"spender","nameLocation":"7818:7:31","nodeType":"VariableDeclaration","scope":3976,"src":"7810:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3964,"name":"address","nodeType":"ElementaryTypeName","src":"7810:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3967,"mutability":"mutable","name":"from","nameLocation":"7835:4:31","nodeType":"VariableDeclaration","scope":3976,"src":"7827:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3966,"name":"address","nodeType":"ElementaryTypeName","src":"7827:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3969,"mutability":"mutable","name":"to","nameLocation":"7849:2:31","nodeType":"VariableDeclaration","scope":3976,"src":"7841:10:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3968,"name":"address","nodeType":"ElementaryTypeName","src":"7841:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3971,"mutability":"mutable","name":"amount","nameLocation":"7861:6:31","nodeType":"VariableDeclaration","scope":3976,"src":"7853:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3970,"name":"uint256","nodeType":"ElementaryTypeName","src":"7853:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7809:59:31"},"returnParameters":{"id":3975,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3974,"mutability":"mutable","name":"success","nameLocation":"7892:7:31","nodeType":"VariableDeclaration","scope":3976,"src":"7887:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3973,"name":"bool","nodeType":"ElementaryTypeName","src":"7887:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7886:14:31"},"scope":3996,"src":"7788:113:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3977,"nodeType":"StructuredDocumentation","src":"8128:575:31","text":" @notice Wraps/unwraps tokens based on the parameters provided.\n @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n @param params Parameters for the wrap/unwrap operation (see struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"43583be5","id":3989,"implemented":false,"kind":"function","modifiers":[],"name":"erc4626BufferWrapOrUnwrap","nameLocation":"8717:25:31","nodeType":"FunctionDefinition","parameters":{"id":3981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3980,"mutability":"mutable","name":"params","nameLocation":"8784:6:31","nodeType":"VariableDeclaration","scope":3989,"src":"8752:38:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4296_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams"},"typeName":{"id":3979,"nodeType":"UserDefinedTypeName","pathNode":{"id":3978,"name":"BufferWrapOrUnwrapParams","nameLocations":["8752:24:31"],"nodeType":"IdentifierPath","referencedDeclaration":4296,"src":"8752:24:31"},"referencedDeclaration":4296,"src":"8752:24:31","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4296_storage_ptr","typeString":"struct BufferWrapOrUnwrapParams"}},"visibility":"internal"}],"src":"8742:54:31"},"returnParameters":{"id":3988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3983,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"8823:19:31","nodeType":"VariableDeclaration","scope":3989,"src":"8815:27:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3982,"name":"uint256","nodeType":"ElementaryTypeName","src":"8815:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3985,"mutability":"mutable","name":"amountInRaw","nameLocation":"8852:11:31","nodeType":"VariableDeclaration","scope":3989,"src":"8844:19:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3984,"name":"uint256","nodeType":"ElementaryTypeName","src":"8844:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3987,"mutability":"mutable","name":"amountOutRaw","nameLocation":"8873:12:31","nodeType":"VariableDeclaration","scope":3989,"src":"8865:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3986,"name":"uint256","nodeType":"ElementaryTypeName","src":"8865:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8814:72:31"},"scope":3996,"src":"8708:179:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3990,"nodeType":"StructuredDocumentation","src":"9115:345:31","text":" @notice Returns the VaultExtension contract address.\n @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n functions, since delegate calls through the Vault are more expensive than direct calls.\n @return vaultExtension Address of the VaultExtension"},"functionSelector":"b9a8effa","id":3995,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultExtension","nameLocation":"9474:17:31","nodeType":"FunctionDefinition","parameters":{"id":3991,"nodeType":"ParameterList","parameters":[],"src":"9491:2:31"},"returnParameters":{"id":3994,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3993,"mutability":"mutable","name":"vaultExtension","nameLocation":"9525:14:31","nodeType":"VariableDeclaration","scope":3995,"src":"9517:22:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3992,"name":"address","nodeType":"ElementaryTypeName","src":"9517:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9516:24:31"},"scope":3996,"src":"9465:76:31","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3997,"src":"407:9136:31","usedErrors":[],"usedEvents":[]}],"src":"46:9498:31"},"id":31},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","exportedSymbols":{"AddLiquidityKind":[4241],"AddLiquidityParams":[4257],"AfterSwapParams":[4235],"BufferWrapOrUnwrapParams":[4296],"FEE_BITLENGTH":[4299],"FEE_SCALING_FACTOR":[4302],"HookFlags":[4061],"HooksConfig":[4085],"IERC20":[10576],"IERC4626":[9846],"IRateProvider":[24],"LiquidityManagement":[4014],"MAX_FEE_PERCENTAGE":[4305],"PoolConfig":[4039],"PoolConfigBits":[4016],"PoolData":[4163],"PoolRoleAccounts":[4111],"PoolSwapParams":[4206],"RemoveLiquidityKind":[4262],"RemoveLiquidityParams":[4278],"Rounding":[4166],"SwapKind":[4169],"SwapState":[4095],"TokenConfig":[4128],"TokenInfo":[4138],"TokenType":[4115],"VaultState":[4103],"VaultSwapParams":[4188],"WrappingDirection":[4281]},"id":4306,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3998,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:32"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":4000,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4306,"sourceUnit":10577,"src":"72:72:32","symbolAliases":[{"foreign":{"id":3999,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:32","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":4002,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4306,"sourceUnit":9847,"src":"145:75:32","symbolAliases":[{"foreign":{"id":4001,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"154:8:32","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"../solidity-utils/helpers/IRateProvider.sol","id":4004,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4306,"sourceUnit":25,"src":"222:76:32","symbolAliases":[{"foreign":{"id":4003,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24,"src":"231:13:32","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"LiquidityManagement","documentation":{"id":4005,"nodeType":"StructuredDocumentation","src":"300:472:32","text":" @notice Represents a pool's liquidity management configuration.\n @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION"},"id":4014,"members":[{"constant":false,"id":4007,"mutability":"mutable","name":"disableUnbalancedLiquidity","nameLocation":"811:26:32","nodeType":"VariableDeclaration","scope":4014,"src":"806:31:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4006,"name":"bool","nodeType":"ElementaryTypeName","src":"806:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4009,"mutability":"mutable","name":"enableAddLiquidityCustom","nameLocation":"848:24:32","nodeType":"VariableDeclaration","scope":4014,"src":"843:29:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4008,"name":"bool","nodeType":"ElementaryTypeName","src":"843:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4011,"mutability":"mutable","name":"enableRemoveLiquidityCustom","nameLocation":"883:27:32","nodeType":"VariableDeclaration","scope":4014,"src":"878:32:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4010,"name":"bool","nodeType":"ElementaryTypeName","src":"878:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4013,"mutability":"mutable","name":"enableDonation","nameLocation":"921:14:32","nodeType":"VariableDeclaration","scope":4014,"src":"916:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4012,"name":"bool","nodeType":"ElementaryTypeName","src":"916:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"LiquidityManagement","nameLocation":"780:19:32","nodeType":"StructDefinition","scope":4306,"src":"773:165:32","visibility":"public"},{"canonicalName":"PoolConfigBits","id":4016,"name":"PoolConfigBits","nameLocation":"1015:14:32","nodeType":"UserDefinedValueTypeDefinition","src":"1010:31:32","underlyingType":{"id":4015,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1033:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"canonicalName":"PoolConfig","documentation":{"id":4017,"nodeType":"StructuredDocumentation","src":"1043:1034:32","text":" @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n @param liquidityManagement Flags related to adding/removing liquidity\n @param staticSwapFeePercentage The pool's native swap fee\n @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n @param isPoolRegistered If true, the pool has been registered with the Vault\n @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals"},"id":4039,"members":[{"constant":false,"id":4020,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2122:19:32","nodeType":"VariableDeclaration","scope":4039,"src":"2102:39:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4014_storage_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":4019,"nodeType":"UserDefinedTypeName","pathNode":{"id":4018,"name":"LiquidityManagement","nameLocations":["2102:19:32"],"nodeType":"IdentifierPath","referencedDeclaration":4014,"src":"2102:19:32"},"referencedDeclaration":4014,"src":"2102:19:32","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4014_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"},{"constant":false,"id":4022,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"2155:23:32","nodeType":"VariableDeclaration","scope":4039,"src":"2147:31:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4021,"name":"uint256","nodeType":"ElementaryTypeName","src":"2147:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4024,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"2192:26:32","nodeType":"VariableDeclaration","scope":4039,"src":"2184:34:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4023,"name":"uint256","nodeType":"ElementaryTypeName","src":"2184:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4026,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"2232:27:32","nodeType":"VariableDeclaration","scope":4039,"src":"2224:35:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4025,"name":"uint256","nodeType":"ElementaryTypeName","src":"2224:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4028,"mutability":"mutable","name":"tokenDecimalDiffs","nameLocation":"2272:17:32","nodeType":"VariableDeclaration","scope":4039,"src":"2265:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":4027,"name":"uint40","nodeType":"ElementaryTypeName","src":"2265:6:32","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":4030,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"2302:18:32","nodeType":"VariableDeclaration","scope":4039,"src":"2295:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4029,"name":"uint32","nodeType":"ElementaryTypeName","src":"2295:6:32","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":4032,"mutability":"mutable","name":"isPoolRegistered","nameLocation":"2331:16:32","nodeType":"VariableDeclaration","scope":4039,"src":"2326:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4031,"name":"bool","nodeType":"ElementaryTypeName","src":"2326:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4034,"mutability":"mutable","name":"isPoolInitialized","nameLocation":"2358:17:32","nodeType":"VariableDeclaration","scope":4039,"src":"2353:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4033,"name":"bool","nodeType":"ElementaryTypeName","src":"2353:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4036,"mutability":"mutable","name":"isPoolPaused","nameLocation":"2386:12:32","nodeType":"VariableDeclaration","scope":4039,"src":"2381:17:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4035,"name":"bool","nodeType":"ElementaryTypeName","src":"2381:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4038,"mutability":"mutable","name":"isPoolInRecoveryMode","nameLocation":"2409:20:32","nodeType":"VariableDeclaration","scope":4039,"src":"2404:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4037,"name":"bool","nodeType":"ElementaryTypeName","src":"2404:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolConfig","nameLocation":"2085:10:32","nodeType":"StructDefinition","scope":4306,"src":"2078:354:32","visibility":"public"},{"canonicalName":"HookFlags","documentation":{"id":4040,"nodeType":"StructuredDocumentation","src":"2434:352:32","text":" @notice The flag portion of the `HooksConfig`.\n @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n flags to true will cause the Vault to call the corresponding hook during operations."},"id":4061,"members":[{"constant":false,"id":4042,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"2815:25:32","nodeType":"VariableDeclaration","scope":4061,"src":"2810:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4041,"name":"bool","nodeType":"ElementaryTypeName","src":"2810:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4044,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"2851:26:32","nodeType":"VariableDeclaration","scope":4061,"src":"2846:31:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4043,"name":"bool","nodeType":"ElementaryTypeName","src":"2846:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4046,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"2888:25:32","nodeType":"VariableDeclaration","scope":4061,"src":"2883:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4045,"name":"bool","nodeType":"ElementaryTypeName","src":"2883:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4048,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"2924:31:32","nodeType":"VariableDeclaration","scope":4061,"src":"2919:36:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4047,"name":"bool","nodeType":"ElementaryTypeName","src":"2919:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4050,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"2966:20:32","nodeType":"VariableDeclaration","scope":4061,"src":"2961:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4049,"name":"bool","nodeType":"ElementaryTypeName","src":"2961:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4052,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"2997:19:32","nodeType":"VariableDeclaration","scope":4061,"src":"2992:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4051,"name":"bool","nodeType":"ElementaryTypeName","src":"2992:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4054,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3027:28:32","nodeType":"VariableDeclaration","scope":4061,"src":"3022:33:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4053,"name":"bool","nodeType":"ElementaryTypeName","src":"3022:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4056,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3066:27:32","nodeType":"VariableDeclaration","scope":4061,"src":"3061:32:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4055,"name":"bool","nodeType":"ElementaryTypeName","src":"3061:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4058,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3104:31:32","nodeType":"VariableDeclaration","scope":4061,"src":"3099:36:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4057,"name":"bool","nodeType":"ElementaryTypeName","src":"3099:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4060,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3146:30:32","nodeType":"VariableDeclaration","scope":4061,"src":"3141:35:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4059,"name":"bool","nodeType":"ElementaryTypeName","src":"3141:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"HookFlags","nameLocation":"2794:9:32","nodeType":"StructDefinition","scope":4306,"src":"2787:392:32","visibility":"public"},{"canonicalName":"HooksConfig","documentation":{"id":4062,"nodeType":"StructuredDocumentation","src":"3181:101:32","text":"@notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address)."},"id":4085,"members":[{"constant":false,"id":4064,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"3312:25:32","nodeType":"VariableDeclaration","scope":4085,"src":"3307:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4063,"name":"bool","nodeType":"ElementaryTypeName","src":"3307:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4066,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"3348:26:32","nodeType":"VariableDeclaration","scope":4085,"src":"3343:31:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4065,"name":"bool","nodeType":"ElementaryTypeName","src":"3343:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4068,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"3385:25:32","nodeType":"VariableDeclaration","scope":4085,"src":"3380:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4067,"name":"bool","nodeType":"ElementaryTypeName","src":"3380:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4070,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"3421:31:32","nodeType":"VariableDeclaration","scope":4085,"src":"3416:36:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4069,"name":"bool","nodeType":"ElementaryTypeName","src":"3416:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4072,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"3463:20:32","nodeType":"VariableDeclaration","scope":4085,"src":"3458:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4071,"name":"bool","nodeType":"ElementaryTypeName","src":"3458:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4074,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"3494:19:32","nodeType":"VariableDeclaration","scope":4085,"src":"3489:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4073,"name":"bool","nodeType":"ElementaryTypeName","src":"3489:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4076,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3524:28:32","nodeType":"VariableDeclaration","scope":4085,"src":"3519:33:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4075,"name":"bool","nodeType":"ElementaryTypeName","src":"3519:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4078,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3563:27:32","nodeType":"VariableDeclaration","scope":4085,"src":"3558:32:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4077,"name":"bool","nodeType":"ElementaryTypeName","src":"3558:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4080,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3601:31:32","nodeType":"VariableDeclaration","scope":4085,"src":"3596:36:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4079,"name":"bool","nodeType":"ElementaryTypeName","src":"3596:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4082,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3643:30:32","nodeType":"VariableDeclaration","scope":4085,"src":"3638:35:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4081,"name":"bool","nodeType":"ElementaryTypeName","src":"3638:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4084,"mutability":"mutable","name":"hooksContract","nameLocation":"3687:13:32","nodeType":"VariableDeclaration","scope":4085,"src":"3679:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4083,"name":"address","nodeType":"ElementaryTypeName","src":"3679:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"HooksConfig","nameLocation":"3289:11:32","nodeType":"StructDefinition","scope":4306,"src":"3282:421:32","visibility":"public"},{"canonicalName":"SwapState","documentation":{"id":4086,"nodeType":"StructuredDocumentation","src":"3705:364:32","text":" @notice Represents temporary state used during a swap operation.\n @param indexIn The zero-based index of tokenIn\n @param indexOut The zero-based index of tokenOut\n @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n @param swapFeePercentage The swap fee to be applied (might be static or dynamic)"},"id":4095,"members":[{"constant":false,"id":4088,"mutability":"mutable","name":"indexIn","nameLocation":"4101:7:32","nodeType":"VariableDeclaration","scope":4095,"src":"4093:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4087,"name":"uint256","nodeType":"ElementaryTypeName","src":"4093:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4090,"mutability":"mutable","name":"indexOut","nameLocation":"4122:8:32","nodeType":"VariableDeclaration","scope":4095,"src":"4114:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4089,"name":"uint256","nodeType":"ElementaryTypeName","src":"4114:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4092,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"4144:19:32","nodeType":"VariableDeclaration","scope":4095,"src":"4136:27:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4091,"name":"uint256","nodeType":"ElementaryTypeName","src":"4136:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4094,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"4177:17:32","nodeType":"VariableDeclaration","scope":4095,"src":"4169:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4093,"name":"uint256","nodeType":"ElementaryTypeName","src":"4169:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapState","nameLocation":"4077:9:32","nodeType":"StructDefinition","scope":4306,"src":"4070:127:32","visibility":"public"},{"canonicalName":"VaultState","documentation":{"id":4096,"nodeType":"StructuredDocumentation","src":"4199:381:32","text":" @notice Represents the Vault's configuration.\n @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled"},"id":4103,"members":[{"constant":false,"id":4098,"mutability":"mutable","name":"isQueryDisabled","nameLocation":"4610:15:32","nodeType":"VariableDeclaration","scope":4103,"src":"4605:20:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4097,"name":"bool","nodeType":"ElementaryTypeName","src":"4605:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4100,"mutability":"mutable","name":"isVaultPaused","nameLocation":"4636:13:32","nodeType":"VariableDeclaration","scope":4103,"src":"4631:18:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4099,"name":"bool","nodeType":"ElementaryTypeName","src":"4631:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4102,"mutability":"mutable","name":"areBuffersPaused","nameLocation":"4660:16:32","nodeType":"VariableDeclaration","scope":4103,"src":"4655:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4101,"name":"bool","nodeType":"ElementaryTypeName","src":"4655:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"VaultState","nameLocation":"4588:10:32","nodeType":"StructDefinition","scope":4306,"src":"4581:98:32","visibility":"public"},{"canonicalName":"PoolRoleAccounts","documentation":{"id":4104,"nodeType":"StructuredDocumentation","src":"4681:461:32","text":" @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)"},"id":4111,"members":[{"constant":false,"id":4106,"mutability":"mutable","name":"pauseManager","nameLocation":"5181:12:32","nodeType":"VariableDeclaration","scope":4111,"src":"5173:20:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4105,"name":"address","nodeType":"ElementaryTypeName","src":"5173:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4108,"mutability":"mutable","name":"swapFeeManager","nameLocation":"5207:14:32","nodeType":"VariableDeclaration","scope":4111,"src":"5199:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4107,"name":"address","nodeType":"ElementaryTypeName","src":"5199:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4110,"mutability":"mutable","name":"poolCreator","nameLocation":"5235:11:32","nodeType":"VariableDeclaration","scope":4111,"src":"5227:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4109,"name":"address","nodeType":"ElementaryTypeName","src":"5227:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"PoolRoleAccounts","nameLocation":"5150:16:32","nodeType":"StructDefinition","scope":4306,"src":"5143:106:32","visibility":"public"},{"canonicalName":"TokenType","documentation":{"id":4112,"nodeType":"StructuredDocumentation","src":"9245:1024:32","text":" @notice Token types supported by the Vault.\n @dev In general, pools may contain any combination of these tokens.\n STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n yield fees are charged elsewhere).\n NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard."},"id":4115,"members":[{"id":4113,"name":"STANDARD","nameLocation":"10291:8:32","nodeType":"EnumValue","src":"10291:8:32"},{"id":4114,"name":"WITH_RATE","nameLocation":"10305:9:32","nodeType":"EnumValue","src":"10305:9:32"}],"name":"TokenType","nameLocation":"10275:9:32","nodeType":"EnumDefinition","src":"10270:46:32"},{"canonicalName":"TokenConfig","documentation":{"id":4116,"nodeType":"StructuredDocumentation","src":"10318:915:32","text":" @notice Encapsulate the data required for the Vault to support a token of the given type.\n @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n need a rate provider, and may or may not be yield-bearing.\n At registration time, it is useful to include the token address along with the token parameters in the structure\n passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n @param token The token address\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":4128,"members":[{"constant":false,"id":4119,"mutability":"mutable","name":"token","nameLocation":"11266:5:32","nodeType":"VariableDeclaration","scope":4128,"src":"11259:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":4118,"nodeType":"UserDefinedTypeName","pathNode":{"id":4117,"name":"IERC20","nameLocations":["11259:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"11259:6:32"},"referencedDeclaration":10576,"src":"11259:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4122,"mutability":"mutable","name":"tokenType","nameLocation":"11287:9:32","nodeType":"VariableDeclaration","scope":4128,"src":"11277:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4115","typeString":"enum TokenType"},"typeName":{"id":4121,"nodeType":"UserDefinedTypeName","pathNode":{"id":4120,"name":"TokenType","nameLocations":["11277:9:32"],"nodeType":"IdentifierPath","referencedDeclaration":4115,"src":"11277:9:32"},"referencedDeclaration":4115,"src":"11277:9:32","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4115","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":4125,"mutability":"mutable","name":"rateProvider","nameLocation":"11316:12:32","nodeType":"VariableDeclaration","scope":4128,"src":"11302:26:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"},"typeName":{"id":4124,"nodeType":"UserDefinedTypeName","pathNode":{"id":4123,"name":"IRateProvider","nameLocations":["11302:13:32"],"nodeType":"IdentifierPath","referencedDeclaration":24,"src":"11302:13:32"},"referencedDeclaration":24,"src":"11302:13:32","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":4127,"mutability":"mutable","name":"paysYieldFees","nameLocation":"11339:13:32","nodeType":"VariableDeclaration","scope":4128,"src":"11334:18:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4126,"name":"bool","nodeType":"ElementaryTypeName","src":"11334:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenConfig","nameLocation":"11241:11:32","nodeType":"StructDefinition","scope":4306,"src":"11234:121:32","visibility":"public"},{"canonicalName":"TokenInfo","documentation":{"id":4129,"nodeType":"StructuredDocumentation","src":"11357:592:32","text":" @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":4138,"members":[{"constant":false,"id":4132,"mutability":"mutable","name":"tokenType","nameLocation":"11983:9:32","nodeType":"VariableDeclaration","scope":4138,"src":"11973:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4115","typeString":"enum TokenType"},"typeName":{"id":4131,"nodeType":"UserDefinedTypeName","pathNode":{"id":4130,"name":"TokenType","nameLocations":["11973:9:32"],"nodeType":"IdentifierPath","referencedDeclaration":4115,"src":"11973:9:32"},"referencedDeclaration":4115,"src":"11973:9:32","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4115","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":4135,"mutability":"mutable","name":"rateProvider","nameLocation":"12012:12:32","nodeType":"VariableDeclaration","scope":4138,"src":"11998:26:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"},"typeName":{"id":4134,"nodeType":"UserDefinedTypeName","pathNode":{"id":4133,"name":"IRateProvider","nameLocations":["11998:13:32"],"nodeType":"IdentifierPath","referencedDeclaration":24,"src":"11998:13:32"},"referencedDeclaration":24,"src":"11998:13:32","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":4137,"mutability":"mutable","name":"paysYieldFees","nameLocation":"12035:13:32","nodeType":"VariableDeclaration","scope":4138,"src":"12030:18:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4136,"name":"bool","nodeType":"ElementaryTypeName","src":"12030:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenInfo","nameLocation":"11957:9:32","nodeType":"StructDefinition","scope":4306,"src":"11950:101:32","visibility":"public"},{"canonicalName":"PoolData","documentation":{"id":4139,"nodeType":"StructuredDocumentation","src":"12053:761:32","text":" @notice Data structure used to represent the current pool state in memory\n @param poolConfigBits Custom type to store the entire configuration of the pool.\n @param tokens Pool tokens, sorted in token registration order\n @param tokenInfo Configuration data for each token, sorted in token registration order\n @param balancesRaw Token balances in native decimals\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. It is 1e18 (FP 1) for 18-decimal tokens"},"id":4163,"members":[{"constant":false,"id":4142,"mutability":"mutable","name":"poolConfigBits","nameLocation":"12852:14:32","nodeType":"VariableDeclaration","scope":4163,"src":"12837:29:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4016","typeString":"PoolConfigBits"},"typeName":{"id":4141,"nodeType":"UserDefinedTypeName","pathNode":{"id":4140,"name":"PoolConfigBits","nameLocations":["12837:14:32"],"nodeType":"IdentifierPath","referencedDeclaration":4016,"src":"12837:14:32"},"referencedDeclaration":4016,"src":"12837:14:32","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4016","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":4146,"mutability":"mutable","name":"tokens","nameLocation":"12881:6:32","nodeType":"VariableDeclaration","scope":4163,"src":"12872:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4144,"nodeType":"UserDefinedTypeName","pathNode":{"id":4143,"name":"IERC20","nameLocations":["12872:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"12872:6:32"},"referencedDeclaration":10576,"src":"12872:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":4145,"nodeType":"ArrayTypeName","src":"12872:8:32","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":4150,"mutability":"mutable","name":"tokenInfo","nameLocation":"12905:9:32","nodeType":"VariableDeclaration","scope":4163,"src":"12893:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4138_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":4148,"nodeType":"UserDefinedTypeName","pathNode":{"id":4147,"name":"TokenInfo","nameLocations":["12893:9:32"],"nodeType":"IdentifierPath","referencedDeclaration":4138,"src":"12893:9:32"},"referencedDeclaration":4138,"src":"12893:9:32","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4138_storage_ptr","typeString":"struct TokenInfo"}},"id":4149,"nodeType":"ArrayTypeName","src":"12893:11:32","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4138_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":4153,"mutability":"mutable","name":"balancesRaw","nameLocation":"12930:11:32","nodeType":"VariableDeclaration","scope":4163,"src":"12920:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4151,"name":"uint256","nodeType":"ElementaryTypeName","src":"12920:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4152,"nodeType":"ArrayTypeName","src":"12920:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4156,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"12957:20:32","nodeType":"VariableDeclaration","scope":4163,"src":"12947:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4154,"name":"uint256","nodeType":"ElementaryTypeName","src":"12947:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4155,"nodeType":"ArrayTypeName","src":"12947:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4159,"mutability":"mutable","name":"tokenRates","nameLocation":"12993:10:32","nodeType":"VariableDeclaration","scope":4163,"src":"12983:20:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4157,"name":"uint256","nodeType":"ElementaryTypeName","src":"12983:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4158,"nodeType":"ArrayTypeName","src":"12983:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4162,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"13019:21:32","nodeType":"VariableDeclaration","scope":4163,"src":"13009:31:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4160,"name":"uint256","nodeType":"ElementaryTypeName","src":"13009:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4161,"nodeType":"ArrayTypeName","src":"13009:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"PoolData","nameLocation":"12822:8:32","nodeType":"StructDefinition","scope":4306,"src":"12815:228:32","visibility":"public"},{"canonicalName":"Rounding","id":4166,"members":[{"id":4164,"name":"ROUND_UP","nameLocation":"13065:8:32","nodeType":"EnumValue","src":"13065:8:32"},{"id":4165,"name":"ROUND_DOWN","nameLocation":"13079:10:32","nodeType":"EnumValue","src":"13079:10:32"}],"name":"Rounding","nameLocation":"13050:8:32","nodeType":"EnumDefinition","src":"13045:46:32"},{"canonicalName":"SwapKind","id":4169,"members":[{"id":4167,"name":"EXACT_IN","nameLocation":"13318:8:32","nodeType":"EnumValue","src":"13318:8:32"},{"id":4168,"name":"EXACT_OUT","nameLocation":"13332:9:32","nodeType":"EnumValue","src":"13332:9:32"}],"name":"SwapKind","nameLocation":"13303:8:32","nodeType":"EnumDefinition","src":"13298:45:32"},{"canonicalName":"VaultSwapParams","documentation":{"id":4170,"nodeType":"StructuredDocumentation","src":"14089:558:32","text":" @notice Data passed into primary Vault `swap` operations.\n @param kind Type of swap (Exact In or Exact Out)\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n @param userData Additional (optional) user data"},"id":4188,"members":[{"constant":false,"id":4173,"mutability":"mutable","name":"kind","nameLocation":"14686:4:32","nodeType":"VariableDeclaration","scope":4188,"src":"14677:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"},"typeName":{"id":4172,"nodeType":"UserDefinedTypeName","pathNode":{"id":4171,"name":"SwapKind","nameLocations":["14677:8:32"],"nodeType":"IdentifierPath","referencedDeclaration":4169,"src":"14677:8:32"},"referencedDeclaration":4169,"src":"14677:8:32","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":4175,"mutability":"mutable","name":"pool","nameLocation":"14704:4:32","nodeType":"VariableDeclaration","scope":4188,"src":"14696:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4174,"name":"address","nodeType":"ElementaryTypeName","src":"14696:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4178,"mutability":"mutable","name":"tokenIn","nameLocation":"14721:7:32","nodeType":"VariableDeclaration","scope":4188,"src":"14714:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":4177,"nodeType":"UserDefinedTypeName","pathNode":{"id":4176,"name":"IERC20","nameLocations":["14714:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"14714:6:32"},"referencedDeclaration":10576,"src":"14714:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4181,"mutability":"mutable","name":"tokenOut","nameLocation":"14741:8:32","nodeType":"VariableDeclaration","scope":4188,"src":"14734:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":4180,"nodeType":"UserDefinedTypeName","pathNode":{"id":4179,"name":"IERC20","nameLocations":["14734:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"14734:6:32"},"referencedDeclaration":10576,"src":"14734:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4183,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"14763:14:32","nodeType":"VariableDeclaration","scope":4188,"src":"14755:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4182,"name":"uint256","nodeType":"ElementaryTypeName","src":"14755:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4185,"mutability":"mutable","name":"limitRaw","nameLocation":"14791:8:32","nodeType":"VariableDeclaration","scope":4188,"src":"14783:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4184,"name":"uint256","nodeType":"ElementaryTypeName","src":"14783:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4187,"mutability":"mutable","name":"userData","nameLocation":"14811:8:32","nodeType":"VariableDeclaration","scope":4188,"src":"14805:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4186,"name":"bytes","nodeType":"ElementaryTypeName","src":"14805:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"VaultSwapParams","nameLocation":"14655:15:32","nodeType":"StructDefinition","scope":4306,"src":"14648:174:32","visibility":"public"},{"canonicalName":"PoolSwapParams","documentation":{"id":4189,"nodeType":"StructuredDocumentation","src":"14824:530:32","text":" @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n @param kind Type of swap (exact in or exact out)\n @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n @param balancesScaled18 Current pool balances\n @param indexIn Index of tokenIn\n @param indexOut Index of tokenOut\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param userData Additional (optional) data required for the swap"},"id":4206,"members":[{"constant":false,"id":4192,"mutability":"mutable","name":"kind","nameLocation":"15392:4:32","nodeType":"VariableDeclaration","scope":4206,"src":"15383:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"},"typeName":{"id":4191,"nodeType":"UserDefinedTypeName","pathNode":{"id":4190,"name":"SwapKind","nameLocations":["15383:8:32"],"nodeType":"IdentifierPath","referencedDeclaration":4169,"src":"15383:8:32"},"referencedDeclaration":4169,"src":"15383:8:32","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":4194,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"15410:19:32","nodeType":"VariableDeclaration","scope":4206,"src":"15402:27:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4193,"name":"uint256","nodeType":"ElementaryTypeName","src":"15402:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4197,"mutability":"mutable","name":"balancesScaled18","nameLocation":"15445:16:32","nodeType":"VariableDeclaration","scope":4206,"src":"15435:26:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4195,"name":"uint256","nodeType":"ElementaryTypeName","src":"15435:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4196,"nodeType":"ArrayTypeName","src":"15435:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4199,"mutability":"mutable","name":"indexIn","nameLocation":"15475:7:32","nodeType":"VariableDeclaration","scope":4206,"src":"15467:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4198,"name":"uint256","nodeType":"ElementaryTypeName","src":"15467:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4201,"mutability":"mutable","name":"indexOut","nameLocation":"15496:8:32","nodeType":"VariableDeclaration","scope":4206,"src":"15488:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4200,"name":"uint256","nodeType":"ElementaryTypeName","src":"15488:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4203,"mutability":"mutable","name":"router","nameLocation":"15518:6:32","nodeType":"VariableDeclaration","scope":4206,"src":"15510:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4202,"name":"address","nodeType":"ElementaryTypeName","src":"15510:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4205,"mutability":"mutable","name":"userData","nameLocation":"15536:8:32","nodeType":"VariableDeclaration","scope":4206,"src":"15530:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4204,"name":"bytes","nodeType":"ElementaryTypeName","src":"15530:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"PoolSwapParams","nameLocation":"15362:14:32","nodeType":"StructDefinition","scope":4306,"src":"15355:192:32","visibility":"public"},{"canonicalName":"AfterSwapParams","documentation":{"id":4207,"nodeType":"StructuredDocumentation","src":"15549:813:32","text":" @notice Data for the hook after a swap operation.\n @param kind Type of swap (exact in or exact out)\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param amountInScaled18 Amount of tokenIn (entering the Vault)\n @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n @param amountCalculatedScaled18 Token amount calculated by the swap\n @param amountCalculatedRaw Token amount calculated by the swap\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param pool Pool address\n @param userData Additional (optional) data required for the swap"},"id":4235,"members":[{"constant":false,"id":4210,"mutability":"mutable","name":"kind","nameLocation":"16401:4:32","nodeType":"VariableDeclaration","scope":4235,"src":"16392:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"},"typeName":{"id":4209,"nodeType":"UserDefinedTypeName","pathNode":{"id":4208,"name":"SwapKind","nameLocations":["16392:8:32"],"nodeType":"IdentifierPath","referencedDeclaration":4169,"src":"16392:8:32"},"referencedDeclaration":4169,"src":"16392:8:32","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":4213,"mutability":"mutable","name":"tokenIn","nameLocation":"16418:7:32","nodeType":"VariableDeclaration","scope":4235,"src":"16411:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":4212,"nodeType":"UserDefinedTypeName","pathNode":{"id":4211,"name":"IERC20","nameLocations":["16411:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"16411:6:32"},"referencedDeclaration":10576,"src":"16411:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4216,"mutability":"mutable","name":"tokenOut","nameLocation":"16438:8:32","nodeType":"VariableDeclaration","scope":4235,"src":"16431:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":4215,"nodeType":"UserDefinedTypeName","pathNode":{"id":4214,"name":"IERC20","nameLocations":["16431:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"16431:6:32"},"referencedDeclaration":10576,"src":"16431:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4218,"mutability":"mutable","name":"amountInScaled18","nameLocation":"16460:16:32","nodeType":"VariableDeclaration","scope":4235,"src":"16452:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4217,"name":"uint256","nodeType":"ElementaryTypeName","src":"16452:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4220,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"16490:17:32","nodeType":"VariableDeclaration","scope":4235,"src":"16482:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4219,"name":"uint256","nodeType":"ElementaryTypeName","src":"16482:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4222,"mutability":"mutable","name":"tokenInBalanceScaled18","nameLocation":"16521:22:32","nodeType":"VariableDeclaration","scope":4235,"src":"16513:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4221,"name":"uint256","nodeType":"ElementaryTypeName","src":"16513:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4224,"mutability":"mutable","name":"tokenOutBalanceScaled18","nameLocation":"16557:23:32","nodeType":"VariableDeclaration","scope":4235,"src":"16549:31:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4223,"name":"uint256","nodeType":"ElementaryTypeName","src":"16549:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4226,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"16594:24:32","nodeType":"VariableDeclaration","scope":4235,"src":"16586:32:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4225,"name":"uint256","nodeType":"ElementaryTypeName","src":"16586:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4228,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"16632:19:32","nodeType":"VariableDeclaration","scope":4235,"src":"16624:27:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4227,"name":"uint256","nodeType":"ElementaryTypeName","src":"16624:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4230,"mutability":"mutable","name":"router","nameLocation":"16665:6:32","nodeType":"VariableDeclaration","scope":4235,"src":"16657:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4229,"name":"address","nodeType":"ElementaryTypeName","src":"16657:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4232,"mutability":"mutable","name":"pool","nameLocation":"16685:4:32","nodeType":"VariableDeclaration","scope":4235,"src":"16677:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4231,"name":"address","nodeType":"ElementaryTypeName","src":"16677:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4234,"mutability":"mutable","name":"userData","nameLocation":"16701:8:32","nodeType":"VariableDeclaration","scope":4235,"src":"16695:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4233,"name":"bytes","nodeType":"ElementaryTypeName","src":"16695:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AfterSwapParams","nameLocation":"16370:15:32","nodeType":"StructDefinition","scope":4306,"src":"16363:349:32","visibility":"public"},{"canonicalName":"AddLiquidityKind","id":4241,"members":[{"id":4236,"name":"PROPORTIONAL","nameLocation":"16951:12:32","nodeType":"EnumValue","src":"16951:12:32"},{"id":4237,"name":"UNBALANCED","nameLocation":"16969:10:32","nodeType":"EnumValue","src":"16969:10:32"},{"id":4238,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"16985:22:32","nodeType":"EnumValue","src":"16985:22:32"},{"id":4239,"name":"DONATION","nameLocation":"17013:8:32","nodeType":"EnumValue","src":"17013:8:32"},{"id":4240,"name":"CUSTOM","nameLocation":"17027:6:32","nodeType":"EnumValue","src":"17027:6:32"}],"name":"AddLiquidityKind","nameLocation":"16928:16:32","nodeType":"EnumDefinition","src":"16923:112:32"},{"canonicalName":"AddLiquidityParams","documentation":{"id":4242,"nodeType":"StructuredDocumentation","src":"17037:320:32","text":" @notice Data for an add liquidity operation.\n @param pool Address of the pool\n @param to Address of user to mint to\n @param maxAmountsIn Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param kind Add liquidity kind\n @param userData Optional user data"},"id":4257,"members":[{"constant":false,"id":4244,"mutability":"mutable","name":"pool","nameLocation":"17398:4:32","nodeType":"VariableDeclaration","scope":4257,"src":"17390:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4243,"name":"address","nodeType":"ElementaryTypeName","src":"17390:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4246,"mutability":"mutable","name":"to","nameLocation":"17416:2:32","nodeType":"VariableDeclaration","scope":4257,"src":"17408:10:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4245,"name":"address","nodeType":"ElementaryTypeName","src":"17408:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4249,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"17434:12:32","nodeType":"VariableDeclaration","scope":4257,"src":"17424:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4247,"name":"uint256","nodeType":"ElementaryTypeName","src":"17424:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4248,"nodeType":"ArrayTypeName","src":"17424:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4251,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"17460:15:32","nodeType":"VariableDeclaration","scope":4257,"src":"17452:23:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4250,"name":"uint256","nodeType":"ElementaryTypeName","src":"17452:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4254,"mutability":"mutable","name":"kind","nameLocation":"17498:4:32","nodeType":"VariableDeclaration","scope":4257,"src":"17481:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4241","typeString":"enum AddLiquidityKind"},"typeName":{"id":4253,"nodeType":"UserDefinedTypeName","pathNode":{"id":4252,"name":"AddLiquidityKind","nameLocations":["17481:16:32"],"nodeType":"IdentifierPath","referencedDeclaration":4241,"src":"17481:16:32"},"referencedDeclaration":4241,"src":"17481:16:32","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4241","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":4256,"mutability":"mutable","name":"userData","nameLocation":"17514:8:32","nodeType":"VariableDeclaration","scope":4257,"src":"17508:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4255,"name":"bytes","nodeType":"ElementaryTypeName","src":"17508:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AddLiquidityParams","nameLocation":"17365:18:32","nodeType":"StructDefinition","scope":4306,"src":"17358:167:32","visibility":"public"},{"canonicalName":"RemoveLiquidityKind","id":4262,"members":[{"id":4258,"name":"PROPORTIONAL","nameLocation":"17770:12:32","nodeType":"EnumValue","src":"17770:12:32"},{"id":4259,"name":"SINGLE_TOKEN_EXACT_IN","nameLocation":"17788:21:32","nodeType":"EnumValue","src":"17788:21:32"},{"id":4260,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"17815:22:32","nodeType":"EnumValue","src":"17815:22:32"},{"id":4261,"name":"CUSTOM","nameLocation":"17843:6:32","nodeType":"EnumValue","src":"17843:6:32"}],"name":"RemoveLiquidityKind","nameLocation":"17744:19:32","nodeType":"EnumDefinition","src":"17739:112:32"},{"canonicalName":"RemoveLiquidityParams","documentation":{"id":4263,"nodeType":"StructuredDocumentation","src":"17853:330:32","text":" @notice Data for an remove liquidity operation.\n @param pool Address of the pool\n @param from Address of user to burn from\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOut Minimum amounts of output tokens\n @param kind Remove liquidity kind\n @param userData Optional user data"},"id":4278,"members":[{"constant":false,"id":4265,"mutability":"mutable","name":"pool","nameLocation":"18227:4:32","nodeType":"VariableDeclaration","scope":4278,"src":"18219:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4264,"name":"address","nodeType":"ElementaryTypeName","src":"18219:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4267,"mutability":"mutable","name":"from","nameLocation":"18245:4:32","nodeType":"VariableDeclaration","scope":4278,"src":"18237:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4266,"name":"address","nodeType":"ElementaryTypeName","src":"18237:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4269,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"18263:14:32","nodeType":"VariableDeclaration","scope":4278,"src":"18255:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4268,"name":"uint256","nodeType":"ElementaryTypeName","src":"18255:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4272,"mutability":"mutable","name":"minAmountsOut","nameLocation":"18293:13:32","nodeType":"VariableDeclaration","scope":4278,"src":"18283:23:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4270,"name":"uint256","nodeType":"ElementaryTypeName","src":"18283:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4271,"nodeType":"ArrayTypeName","src":"18283:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4275,"mutability":"mutable","name":"kind","nameLocation":"18332:4:32","nodeType":"VariableDeclaration","scope":4278,"src":"18312:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4262","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":4274,"nodeType":"UserDefinedTypeName","pathNode":{"id":4273,"name":"RemoveLiquidityKind","nameLocations":["18312:19:32"],"nodeType":"IdentifierPath","referencedDeclaration":4262,"src":"18312:19:32"},"referencedDeclaration":4262,"src":"18312:19:32","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4262","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":4277,"mutability":"mutable","name":"userData","nameLocation":"18348:8:32","nodeType":"VariableDeclaration","scope":4278,"src":"18342:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4276,"name":"bytes","nodeType":"ElementaryTypeName","src":"18342:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"RemoveLiquidityParams","nameLocation":"18191:21:32","nodeType":"StructDefinition","scope":4306,"src":"18184:175:32","visibility":"public"},{"canonicalName":"WrappingDirection","id":4281,"members":[{"id":4279,"name":"WRAP","nameLocation":"18602:4:32","nodeType":"EnumValue","src":"18602:4:32"},{"id":4280,"name":"UNWRAP","nameLocation":"18612:6:32","nodeType":"EnumValue","src":"18612:6:32"}],"name":"WrappingDirection","nameLocation":"18578:17:32","nodeType":"EnumDefinition","src":"18573:47:32"},{"canonicalName":"BufferWrapOrUnwrapParams","documentation":{"id":4282,"nodeType":"StructuredDocumentation","src":"18622:499:32","text":" @notice Data for a wrap/unwrap operation.\n @param kind Type of swap (Exact In or Exact Out)\n @param direction Direction of the wrapping operation (Wrap or Unwrap)\n @param wrappedToken Wrapped token, compatible with interface ERC4626\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n direction)"},"id":4296,"members":[{"constant":false,"id":4285,"mutability":"mutable","name":"kind","nameLocation":"19169:4:32","nodeType":"VariableDeclaration","scope":4296,"src":"19160:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"},"typeName":{"id":4284,"nodeType":"UserDefinedTypeName","pathNode":{"id":4283,"name":"SwapKind","nameLocations":["19160:8:32"],"nodeType":"IdentifierPath","referencedDeclaration":4169,"src":"19160:8:32"},"referencedDeclaration":4169,"src":"19160:8:32","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":4288,"mutability":"mutable","name":"direction","nameLocation":"19197:9:32","nodeType":"VariableDeclaration","scope":4296,"src":"19179:27:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$4281","typeString":"enum WrappingDirection"},"typeName":{"id":4287,"nodeType":"UserDefinedTypeName","pathNode":{"id":4286,"name":"WrappingDirection","nameLocations":["19179:17:32"],"nodeType":"IdentifierPath","referencedDeclaration":4281,"src":"19179:17:32"},"referencedDeclaration":4281,"src":"19179:17:32","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$4281","typeString":"enum WrappingDirection"}},"visibility":"internal"},{"constant":false,"id":4291,"mutability":"mutable","name":"wrappedToken","nameLocation":"19221:12:32","nodeType":"VariableDeclaration","scope":4296,"src":"19212:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":4290,"nodeType":"UserDefinedTypeName","pathNode":{"id":4289,"name":"IERC4626","nameLocations":["19212:8:32"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"19212:8:32"},"referencedDeclaration":9846,"src":"19212:8:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":4293,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"19247:14:32","nodeType":"VariableDeclaration","scope":4296,"src":"19239:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4292,"name":"uint256","nodeType":"ElementaryTypeName","src":"19239:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4295,"mutability":"mutable","name":"limitRaw","nameLocation":"19275:8:32","nodeType":"VariableDeclaration","scope":4296,"src":"19267:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4294,"name":"uint256","nodeType":"ElementaryTypeName","src":"19267:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"BufferWrapOrUnwrapParams","nameLocation":"19129:24:32","nodeType":"StructDefinition","scope":4306,"src":"19122:164:32","visibility":"public"},{"constant":true,"id":4299,"mutability":"constant","name":"FEE_BITLENGTH","nameLocation":"19611:13:32","nodeType":"VariableDeclaration","scope":4306,"src":"19594:35:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4297,"name":"uint256","nodeType":"ElementaryTypeName","src":"19594:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3234","id":4298,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19627:2:32","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},"visibility":"internal"},{"constant":true,"id":4302,"mutability":"constant","name":"FEE_SCALING_FACTOR","nameLocation":"19648:18:32","nodeType":"VariableDeclaration","scope":4306,"src":"19631:42:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4300,"name":"uint256","nodeType":"ElementaryTypeName","src":"19631:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653131","id":4301,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19669:4:32","typeDescriptions":{"typeIdentifier":"t_rational_100000000000_by_1","typeString":"int_const 100000000000"},"value":"1e11"},"visibility":"internal"},{"constant":true,"id":4305,"mutability":"constant","name":"MAX_FEE_PERCENTAGE","nameLocation":"19896:18:32","nodeType":"VariableDeclaration","scope":4306,"src":"19879:48:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4303,"name":"uint256","nodeType":"ElementaryTypeName","src":"19879:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e39393939653136","id":4304,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19917:10:32","typeDescriptions":{"typeIdentifier":"t_rational_999999000000000000_by_1","typeString":"int_const 999999000000000000"},"value":"99.9999e16"},"visibility":"internal"}],"src":"46:19895:32"},"id":32},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","exportedSymbols":{"Authentication":[4385],"IAuthentication":[14]},"id":4386,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4307,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:33"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":4309,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4386,"sourceUnit":15,"src":"72:116:33","symbolAliases":[{"foreign":{"id":4308,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"81:15:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":4311,"name":"IAuthentication","nameLocations":["625:15:33"],"nodeType":"IdentifierPath","referencedDeclaration":14,"src":"625:15:33"},"id":4312,"nodeType":"InheritanceSpecifier","src":"625:15:33"}],"canonicalName":"Authentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":4310,"nodeType":"StructuredDocumentation","src":"190:398:33","text":" @notice Building block for performing access control on external functions.\n @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n applied to external functions to make them only callable by authorized accounts.\n Derived contracts must implement the `_canPerform` function, which holds the actual access control logic."},"fullyImplemented":false,"id":4385,"linearizedBaseContracts":[4385,14],"name":"Authentication","nameLocation":"607:14:33","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":4314,"mutability":"immutable","name":"_actionIdDisambiguator","nameLocation":"673:22:33","nodeType":"VariableDeclaration","scope":4385,"src":"647:48:33","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4313,"name":"bytes32","nodeType":"ElementaryTypeName","src":"647:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"body":{"id":4324,"nodeType":"Block","src":"1337:63:33","statements":[{"expression":{"id":4322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4320,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4314,"src":"1347:22:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4321,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4317,"src":"1372:21:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1347:46:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4323,"nodeType":"ExpressionStatement","src":"1347:46:33"}]},"documentation":{"id":4315,"nodeType":"StructuredDocumentation","src":"702:587:33","text":" @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n multi-contract systems.\n There are two main uses for it:\n - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n unique. The contract's own address is a good option.\n - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n shared by the entire family (and no other contract) should be used instead."},"id":4325,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4317,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"1314:21:33","nodeType":"VariableDeclaration","scope":4325,"src":"1306:29:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4316,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1306:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1305:31:33"},"returnParameters":{"id":4319,"nodeType":"ParameterList","parameters":[],"src":"1337:0:33"},"scope":4385,"src":"1294:106:33","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4332,"nodeType":"Block","src":"1549:49:33","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4328,"name":"_authenticateCaller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4356,"src":"1559:19:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":4329,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1559:21:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4330,"nodeType":"ExpressionStatement","src":"1559:21:33"},{"id":4331,"nodeType":"PlaceholderStatement","src":"1590:1:33"}]},"documentation":{"id":4326,"nodeType":"StructuredDocumentation","src":"1406:114:33","text":"@dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions."},"id":4333,"name":"authenticate","nameLocation":"1534:12:33","nodeType":"ModifierDefinition","parameters":{"id":4327,"nodeType":"ParameterList","parameters":[],"src":"1546:2:33"},"src":"1525:73:33","virtual":false,"visibility":"internal"},{"body":{"id":4355,"nodeType":"Block","src":"1733:156:33","statements":[{"assignments":[4338],"declarations":[{"constant":false,"id":4338,"mutability":"mutable","name":"actionId","nameLocation":"1751:8:33","nodeType":"VariableDeclaration","scope":4355,"src":"1743:16:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4337,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1743:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":4343,"initialValue":{"arguments":[{"expression":{"id":4340,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1774:3:33","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1778:3:33","memberName":"sig","nodeType":"MemberAccess","src":"1774:7:33","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":4339,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4374,"src":"1762:11:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":4342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1762:20:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1743:39:33"},{"condition":{"id":4349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1797:34:33","subExpression":{"arguments":[{"id":4345,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4338,"src":"1810:8:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":4346,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1820:3:33","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1824:6:33","memberName":"sender","nodeType":"MemberAccess","src":"1820:10:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":4344,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4384,"src":"1798:11:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":4348,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1798:33:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4354,"nodeType":"IfStatement","src":"1793:90:33","trueBody":{"id":4353,"nodeType":"Block","src":"1833:50:33","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4350,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"1854:16:33","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1854:18:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4352,"nodeType":"RevertStatement","src":"1847:25:33"}]}}]},"documentation":{"id":4334,"nodeType":"StructuredDocumentation","src":"1604:79:33","text":"@dev Reverts unless the caller is allowed to call the entry point function."},"id":4356,"implemented":true,"kind":"function","modifiers":[],"name":"_authenticateCaller","nameLocation":"1697:19:33","nodeType":"FunctionDefinition","parameters":{"id":4335,"nodeType":"ParameterList","parameters":[],"src":"1716:2:33"},"returnParameters":{"id":4336,"nodeType":"ParameterList","parameters":[],"src":"1733:0:33"},"scope":4385,"src":"1688:201:33","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[13],"body":{"id":4373,"nodeType":"Block","src":"2008:353:33","statements":[{"expression":{"arguments":[{"arguments":[{"id":4368,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4314,"src":"2320:22:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":4369,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4359,"src":"2344:8:33","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":4366,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2303:3:33","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":4367,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2307:12:33","memberName":"encodePacked","nodeType":"MemberAccess","src":"2303:16:33","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":4370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2303:50:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":4365,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2293:9:33","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":4371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2293:61:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4364,"id":4372,"nodeType":"Return","src":"2286:68:33"}]},"documentation":{"id":4357,"nodeType":"StructuredDocumentation","src":"1895:31:33","text":"@inheritdoc IAuthentication"},"functionSelector":"851c1bb3","id":4374,"implemented":true,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"1940:11:33","nodeType":"FunctionDefinition","overrides":{"id":4361,"nodeType":"OverrideSpecifier","overrides":[],"src":"1981:8:33"},"parameters":{"id":4360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4359,"mutability":"mutable","name":"selector","nameLocation":"1959:8:33","nodeType":"VariableDeclaration","scope":4374,"src":"1952:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4358,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1952:6:33","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1951:17:33"},"returnParameters":{"id":4364,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4363,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4374,"src":"1999:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4362,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1999:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1998:9:33"},"scope":4385,"src":"1931:430:33","stateMutability":"view","virtual":false,"visibility":"public"},{"documentation":{"id":4375,"nodeType":"StructuredDocumentation","src":"2367:304:33","text":" @dev Derived contracts must implement this function to perform the actual access control logic.\n @param actionId The action identifier associated with an external function\n @param user The account performing the action\n @return success True if the action is permitted"},"id":4384,"implemented":false,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"2685:11:33","nodeType":"FunctionDefinition","parameters":{"id":4380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4377,"mutability":"mutable","name":"actionId","nameLocation":"2705:8:33","nodeType":"VariableDeclaration","scope":4384,"src":"2697:16:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4376,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2697:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4379,"mutability":"mutable","name":"user","nameLocation":"2723:4:33","nodeType":"VariableDeclaration","scope":4384,"src":"2715:12:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4378,"name":"address","nodeType":"ElementaryTypeName","src":"2715:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2696:32:33"},"returnParameters":{"id":4383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4382,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4384,"src":"2760:4:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4381,"name":"bool","nodeType":"ElementaryTypeName","src":"2760:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2759:6:33"},"scope":4385,"src":"2676:90:33","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":4386,"src":"589:2179:33","usedErrors":[5],"usedEvents":[]}],"src":"46:2723:33"},"id":33},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","exportedSymbols":{"CastingHelpers":[4417],"IERC20":[10576]},"id":4418,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4387,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:34"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":4389,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4418,"sourceUnit":10577,"src":"72:72:34","symbolAliases":[{"foreign":{"id":4388,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:34","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"CastingHelpers","contractDependencies":[],"contractKind":"library","documentation":{"id":4390,"nodeType":"StructuredDocumentation","src":"146:71:34","text":"@notice Library of helper functions related to typecasting arrays."},"fullyImplemented":true,"id":4417,"linearizedBaseContracts":[4417],"name":"CastingHelpers","nameLocation":"225:14:34","nodeType":"ContractDefinition","nodes":[{"body":{"id":4402,"nodeType":"Block","src":"410:140:34","statements":[{"AST":{"nativeSrc":"501:43:34","nodeType":"YulBlock","src":"501:43:34","statements":[{"nativeSrc":"515:19:34","nodeType":"YulAssignment","src":"515:19:34","value":{"name":"addresses","nativeSrc":"525:9:34","nodeType":"YulIdentifier","src":"525:9:34"},"variableNames":[{"name":"tokens","nativeSrc":"515:6:34","nodeType":"YulIdentifier","src":"515:6:34"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4394,"isOffset":false,"isSlot":false,"src":"525:9:34","valueSize":1},{"declaration":4399,"isOffset":false,"isSlot":false,"src":"515:6:34","valueSize":1}],"flags":["memory-safe"],"id":4401,"nodeType":"InlineAssembly","src":"476:68:34"}]},"documentation":{"id":4391,"nodeType":"StructuredDocumentation","src":"246:66:34","text":"@dev Returns a native array of addresses as an IERC20[] array."},"id":4403,"implemented":true,"kind":"function","modifiers":[],"name":"asIERC20","nameLocation":"326:8:34","nodeType":"FunctionDefinition","parameters":{"id":4395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4394,"mutability":"mutable","name":"addresses","nameLocation":"352:9:34","nodeType":"VariableDeclaration","scope":4403,"src":"335:26:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4392,"name":"address","nodeType":"ElementaryTypeName","src":"335:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4393,"nodeType":"ArrayTypeName","src":"335:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"334:28:34"},"returnParameters":{"id":4400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4399,"mutability":"mutable","name":"tokens","nameLocation":"402:6:34","nodeType":"VariableDeclaration","scope":4403,"src":"386:22:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4397,"nodeType":"UserDefinedTypeName","pathNode":{"id":4396,"name":"IERC20","nameLocations":["386:6:34"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"386:6:34"},"referencedDeclaration":10576,"src":"386:6:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":4398,"nodeType":"ArrayTypeName","src":"386:8:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"385:24:34"},"scope":4417,"src":"317:233:34","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4415,"nodeType":"Block","src":"712:140:34","statements":[{"AST":{"nativeSrc":"803:43:34","nodeType":"YulBlock","src":"803:43:34","statements":[{"nativeSrc":"817:19:34","nodeType":"YulAssignment","src":"817:19:34","value":{"name":"tokens","nativeSrc":"830:6:34","nodeType":"YulIdentifier","src":"830:6:34"},"variableNames":[{"name":"addresses","nativeSrc":"817:9:34","nodeType":"YulIdentifier","src":"817:9:34"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4412,"isOffset":false,"isSlot":false,"src":"817:9:34","valueSize":1},{"declaration":4408,"isOffset":false,"isSlot":false,"src":"830:6:34","valueSize":1}],"flags":["memory-safe"],"id":4414,"nodeType":"InlineAssembly","src":"778:68:34"}]},"documentation":{"id":4404,"nodeType":"StructuredDocumentation","src":"556:57:34","text":"@dev Returns an IERC20[] array as an address[] array."},"id":4416,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"627:9:34","nodeType":"FunctionDefinition","parameters":{"id":4409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4408,"mutability":"mutable","name":"tokens","nameLocation":"653:6:34","nodeType":"VariableDeclaration","scope":4416,"src":"637:22:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4406,"nodeType":"UserDefinedTypeName","pathNode":{"id":4405,"name":"IERC20","nameLocations":["637:6:34"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"637:6:34"},"referencedDeclaration":10576,"src":"637:6:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":4407,"nodeType":"ArrayTypeName","src":"637:8:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"636:24:34"},"returnParameters":{"id":4413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4412,"mutability":"mutable","name":"addresses","nameLocation":"701:9:34","nodeType":"VariableDeclaration","scope":4416,"src":"684:26:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4410,"name":"address","nodeType":"ElementaryTypeName","src":"684:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4411,"nodeType":"ArrayTypeName","src":"684:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"683:28:34"},"scope":4417,"src":"618:234:34","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4418,"src":"217:637:34","usedErrors":[],"usedEvents":[]}],"src":"46:809:34"},"id":34},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","exportedSymbols":{"CastingHelpers":[4417],"IERC20":[10576],"InputHelpers":[4718]},"id":4719,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4419,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:35"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":4421,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4719,"sourceUnit":10577,"src":"72:72:35","symbolAliases":[{"foreign":{"id":4420,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","file":"./CastingHelpers.sol","id":4423,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4719,"sourceUnit":4418,"src":"146:54:35","symbolAliases":[{"foreign":{"id":4422,"name":"CastingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4417,"src":"155:14:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"InputHelpers","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":4718,"linearizedBaseContracts":[4718],"name":"InputHelpers","nameLocation":"210:12:35","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4424,"nodeType":"StructuredDocumentation","src":"229:91:35","text":"@notice Arrays passed to a function and intended to be parallel have different lengths."},"errorSelector":"aaad13f7","id":4426,"name":"InputLengthMismatch","nameLocation":"331:19:35","nodeType":"ErrorDefinition","parameters":{"id":4425,"nodeType":"ParameterList","parameters":[],"src":"350:2:35"},"src":"325:28:35"},{"documentation":{"id":4427,"nodeType":"StructuredDocumentation","src":"359:332:35","text":" @notice More than one non-zero value was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n corresponding to the token being added or removed. This error results if there are multiple non-zero entries."},"errorSelector":"6b8c3be5","id":4429,"name":"MultipleNonZeroInputs","nameLocation":"702:21:35","nodeType":"ErrorDefinition","parameters":{"id":4428,"nodeType":"ParameterList","parameters":[],"src":"723:2:35"},"src":"696:30:35"},{"documentation":{"id":4430,"nodeType":"StructuredDocumentation","src":"732:298:35","text":" @notice No valid input was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n corresponding to the token being added or removed. This error results if all entries are zero."},"errorSelector":"7e46bddc","id":4432,"name":"AllZeroInputs","nameLocation":"1041:13:35","nodeType":"ErrorDefinition","parameters":{"id":4431,"nodeType":"ParameterList","parameters":[],"src":"1054:2:35"},"src":"1035:22:35"},{"documentation":{"id":4433,"nodeType":"StructuredDocumentation","src":"1063:320:35","text":" @notice The tokens supplied to an array argument were not sorted in numerical order.\n @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n predict the token order without having to query the Vault. (It is also legacy v2 behavior.)"},"errorSelector":"6e8f1947","id":4435,"name":"TokensNotSorted","nameLocation":"1394:15:35","nodeType":"ErrorDefinition","parameters":{"id":4434,"nodeType":"ParameterList","parameters":[],"src":"1409:2:35"},"src":"1388:24:35"},{"body":{"id":4450,"nodeType":"Block","src":"1486:81:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4442,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4437,"src":"1500:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4443,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4439,"src":"1505:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1500:6:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4449,"nodeType":"IfStatement","src":"1496:65:35","trueBody":{"id":4448,"nodeType":"Block","src":"1508:53:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4445,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4426,"src":"1529:19:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1529:21:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4447,"nodeType":"RevertStatement","src":"1522:28:35"}]}}]},"id":4451,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1427:22:35","nodeType":"FunctionDefinition","parameters":{"id":4440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4437,"mutability":"mutable","name":"a","nameLocation":"1458:1:35","nodeType":"VariableDeclaration","scope":4451,"src":"1450:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4436,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4439,"mutability":"mutable","name":"b","nameLocation":"1469:1:35","nodeType":"VariableDeclaration","scope":4451,"src":"1461:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4438,"name":"uint256","nodeType":"ElementaryTypeName","src":"1461:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1449:22:35"},"returnParameters":{"id":4441,"nodeType":"ParameterList","parameters":[],"src":"1486:0:35"},"scope":4718,"src":"1418:149:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4472,"nodeType":"Block","src":"1652:91:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4460,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4453,"src":"1666:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4461,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4455,"src":"1671:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1666:6:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4463,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4455,"src":"1676:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4464,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4457,"src":"1681:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1676:6:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1666:16:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4471,"nodeType":"IfStatement","src":"1662:75:35","trueBody":{"id":4470,"nodeType":"Block","src":"1684:53:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4467,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4426,"src":"1705:19:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1705:21:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4469,"nodeType":"RevertStatement","src":"1698:28:35"}]}}]},"id":4473,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1582:22:35","nodeType":"FunctionDefinition","parameters":{"id":4458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4453,"mutability":"mutable","name":"a","nameLocation":"1613:1:35","nodeType":"VariableDeclaration","scope":4473,"src":"1605:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4452,"name":"uint256","nodeType":"ElementaryTypeName","src":"1605:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4455,"mutability":"mutable","name":"b","nameLocation":"1624:1:35","nodeType":"VariableDeclaration","scope":4473,"src":"1616:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4454,"name":"uint256","nodeType":"ElementaryTypeName","src":"1616:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4457,"mutability":"mutable","name":"c","nameLocation":"1635:1:35","nodeType":"VariableDeclaration","scope":4473,"src":"1627:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4456,"name":"uint256","nodeType":"ElementaryTypeName","src":"1627:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1604:33:35"},"returnParameters":{"id":4459,"nodeType":"ParameterList","parameters":[],"src":"1652:0:35"},"scope":4718,"src":"1573:170:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4531,"nodeType":"Block","src":"1938:451:35","statements":[{"assignments":[4482],"declarations":[{"constant":false,"id":4482,"mutability":"mutable","name":"length","nameLocation":"1956:6:35","nodeType":"VariableDeclaration","scope":4531,"src":"1948:14:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4481,"name":"uint256","nodeType":"ElementaryTypeName","src":"1948:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4485,"initialValue":{"expression":{"id":4483,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4476,"src":"1965:12:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1978:6:35","memberName":"length","nodeType":"MemberAccess","src":"1965:19:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1948:36:35"},{"expression":{"id":4488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4486,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4479,"src":"1994:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4487,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4482,"src":"2007:6:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1994:19:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4489,"nodeType":"ExpressionStatement","src":"1994:19:35"},{"body":{"id":4519,"nodeType":"Block","src":"2061:211:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":4500,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4476,"src":"2079:12:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4502,"indexExpression":{"id":4501,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4491,"src":"2092:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2079:15:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4503,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2098:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2079:20:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4518,"nodeType":"IfStatement","src":"2075:187:35","trueBody":{"id":4517,"nodeType":"Block","src":"2101:161:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4505,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4479,"src":"2123:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4506,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4482,"src":"2137:6:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2123:20:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4512,"nodeType":"IfStatement","src":"2119:97:35","trueBody":{"id":4511,"nodeType":"Block","src":"2145:71:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4508,"name":"MultipleNonZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4429,"src":"2174:21:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2174:23:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4510,"nodeType":"RevertStatement","src":"2167:30:35"}]}},{"expression":{"id":4515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4513,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4479,"src":"2233:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4514,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4491,"src":"2246:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2233:14:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4516,"nodeType":"ExpressionStatement","src":"2233:14:35"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4494,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4491,"src":"2044:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4495,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4482,"src":"2048:6:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2044:10:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4520,"initializationExpression":{"assignments":[4491],"declarations":[{"constant":false,"id":4491,"mutability":"mutable","name":"i","nameLocation":"2037:1:35","nodeType":"VariableDeclaration","scope":4520,"src":"2029:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4490,"name":"uint256","nodeType":"ElementaryTypeName","src":"2029:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4493,"initialValue":{"hexValue":"30","id":4492,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2041:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2029:13:35"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2056:3:35","subExpression":{"id":4497,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4491,"src":"2058:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4499,"nodeType":"ExpressionStatement","src":"2056:3:35"},"nodeType":"ForStatement","src":"2024:248:35"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4521,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4479,"src":"2286:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4522,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4482,"src":"2300:6:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2286:20:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4528,"nodeType":"IfStatement","src":"2282:73:35","trueBody":{"id":4527,"nodeType":"Block","src":"2308:47:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4524,"name":"AllZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4432,"src":"2329:13:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2329:15:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4526,"nodeType":"RevertStatement","src":"2322:22:35"}]}},{"expression":{"id":4529,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4479,"src":"2372:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4480,"id":4530,"nodeType":"Return","src":"2365:17:35"}]},"id":4532,"implemented":true,"kind":"function","modifiers":[],"name":"getSingleInputIndex","nameLocation":"1844:19:35","nodeType":"FunctionDefinition","parameters":{"id":4477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4476,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"1881:12:35","nodeType":"VariableDeclaration","scope":4532,"src":"1864:29:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4474,"name":"uint256","nodeType":"ElementaryTypeName","src":"1864:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4475,"nodeType":"ArrayTypeName","src":"1864:9:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1863:31:35"},"returnParameters":{"id":4480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4479,"mutability":"mutable","name":"inputIndex","nameLocation":"1926:10:35","nodeType":"VariableDeclaration","scope":4532,"src":"1918:18:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4478,"name":"uint256","nodeType":"ElementaryTypeName","src":"1918:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1917:20:35"},"scope":4718,"src":"1835:554:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4609,"nodeType":"Block","src":"3138:376:35","statements":[{"body":{"id":4605,"nodeType":"Block","src":"3196:288:35","statements":[{"body":{"id":4603,"nodeType":"Block","src":"3262:212:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"id":4580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":4572,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4537,"src":"3284:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4574,"indexExpression":{"id":4573,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4558,"src":"3291:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3284:9:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"id":4575,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4537,"src":"3296:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4579,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4576,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4558,"src":"3303:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4577,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3307:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3303:5:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3296:13:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"3284:25:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4602,"nodeType":"IfStatement","src":"3280:180:35","trueBody":{"id":4601,"nodeType":"Block","src":"3311:149:35","statements":[{"expression":{"id":4599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":4581,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4537,"src":"3387:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4583,"indexExpression":{"id":4582,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4558,"src":"3394:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3387:9:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"baseExpression":{"id":4584,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4537,"src":"3398:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4588,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4585,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4558,"src":"3405:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4586,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3409:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3405:5:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3398:13:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"id":4589,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3386:26:35","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$10576_$_t_contract$_IERC20_$10576_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"baseExpression":{"id":4590,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4537,"src":"3416:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4594,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4591,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4558,"src":"3423:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3427:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3423:5:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3416:13:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"baseExpression":{"id":4595,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4537,"src":"3431:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4597,"indexExpression":{"id":4596,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4558,"src":"3438:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3431:9:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"id":4598,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3415:26:35","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$10576_$_t_contract$_IERC20_$10576_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"src":"3386:55:35","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4600,"nodeType":"ExpressionStatement","src":"3386:55:35"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4561,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4558,"src":"3230:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4562,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4537,"src":"3234:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3241:6:35","memberName":"length","nodeType":"MemberAccess","src":"3234:13:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":4564,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4545,"src":"3250:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3234:17:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":4566,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3254:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3234:21:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3230:25:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4604,"initializationExpression":{"assignments":[4558],"declarations":[{"constant":false,"id":4558,"mutability":"mutable","name":"j","nameLocation":"3223:1:35","nodeType":"VariableDeclaration","scope":4604,"src":"3215:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4557,"name":"uint256","nodeType":"ElementaryTypeName","src":"3215:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4560,"initialValue":{"hexValue":"30","id":4559,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3227:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3215:13:35"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3257:3:35","subExpression":{"id":4569,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4558,"src":"3259:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4571,"nodeType":"ExpressionStatement","src":"3257:3:35"},"nodeType":"ForStatement","src":"3210:264:35"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4548,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4545,"src":"3168:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4549,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4537,"src":"3172:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3179:6:35","memberName":"length","nodeType":"MemberAccess","src":"3172:13:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":4551,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3188:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3172:17:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3168:21:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4606,"initializationExpression":{"assignments":[4545],"declarations":[{"constant":false,"id":4545,"mutability":"mutable","name":"i","nameLocation":"3161:1:35","nodeType":"VariableDeclaration","scope":4606,"src":"3153:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4544,"name":"uint256","nodeType":"ElementaryTypeName","src":"3153:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4547,"initialValue":{"hexValue":"30","id":4546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3165:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3153:13:35"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3191:3:35","subExpression":{"id":4554,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4545,"src":"3193:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4556,"nodeType":"ExpressionStatement","src":"3191:3:35"},"nodeType":"ForStatement","src":"3148:336:35"},{"expression":{"id":4607,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4537,"src":"3501:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"functionReturnParameters":4543,"id":4608,"nodeType":"Return","src":"3494:13:35"}]},"documentation":{"id":4533,"nodeType":"StructuredDocumentation","src":"2395:654:35","text":" @dev Sort an array of tokens, mutating in place (and also returning them).\n This assumes the tokens have been (or will be) validated elsewhere for length\n and non-duplication. All this does is the sorting.\n A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n Could have also done \"manual\" comparisons for each of the cases, but this is\n about the same number of operations, and more concise.\n This is less efficient for larger token count (i.e., above 4), but such pools should\n be rare. And in any case, sorting is only done on-chain in test code."},"id":4610,"implemented":true,"kind":"function","modifiers":[],"name":"sortTokens","nameLocation":"3063:10:35","nodeType":"FunctionDefinition","parameters":{"id":4538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4537,"mutability":"mutable","name":"tokens","nameLocation":"3090:6:35","nodeType":"VariableDeclaration","scope":4610,"src":"3074:22:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4535,"nodeType":"UserDefinedTypeName","pathNode":{"id":4534,"name":"IERC20","nameLocations":["3074:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3074:6:35"},"referencedDeclaration":10576,"src":"3074:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":4536,"nodeType":"ArrayTypeName","src":"3074:8:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3073:24:35"},"returnParameters":{"id":4543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4542,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4610,"src":"3121:15:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4540,"nodeType":"UserDefinedTypeName","pathNode":{"id":4539,"name":"IERC20","nameLocations":["3121:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3121:6:35"},"referencedDeclaration":10576,"src":"3121:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":4541,"nodeType":"ArrayTypeName","src":"3121:8:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3120:17:35"},"scope":4718,"src":"3054:460:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4664,"nodeType":"Block","src":"3686:341:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4618,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4615,"src":"3700:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3707:6:35","memberName":"length","nodeType":"MemberAccess","src":"3700:13:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":4620,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3716:1:35","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"3700:17:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4624,"nodeType":"IfStatement","src":"3696:54:35","trueBody":{"id":4623,"nodeType":"Block","src":"3719:31:35","statements":[{"functionReturnParameters":4617,"id":4622,"nodeType":"Return","src":"3733:7:35"}]}},{"assignments":[4627],"declarations":[{"constant":false,"id":4627,"mutability":"mutable","name":"previous","nameLocation":"3767:8:35","nodeType":"VariableDeclaration","scope":4664,"src":"3760:15:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":4626,"nodeType":"UserDefinedTypeName","pathNode":{"id":4625,"name":"IERC20","nameLocations":["3760:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3760:6:35"},"referencedDeclaration":10576,"src":"3760:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":4631,"initialValue":{"baseExpression":{"id":4628,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4615,"src":"3778:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4630,"indexExpression":{"hexValue":"30","id":4629,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3785:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3778:9:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3760:27:35"},{"body":{"id":4662,"nodeType":"Block","src":"3842:179:35","statements":[{"assignments":[4645],"declarations":[{"constant":false,"id":4645,"mutability":"mutable","name":"current","nameLocation":"3863:7:35","nodeType":"VariableDeclaration","scope":4662,"src":"3856:14:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":4644,"nodeType":"UserDefinedTypeName","pathNode":{"id":4643,"name":"IERC20","nameLocations":["3856:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3856:6:35"},"referencedDeclaration":10576,"src":"3856:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":4649,"initialValue":{"baseExpression":{"id":4646,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4615,"src":"3873:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4648,"indexExpression":{"id":4647,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4633,"src":"3880:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3873:9:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3856:26:35"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"id":4652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4650,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4627,"src":"3901:8:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4651,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4645,"src":"3912:7:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"3901:18:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4657,"nodeType":"IfStatement","src":"3897:81:35","trueBody":{"id":4656,"nodeType":"Block","src":"3921:57:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4653,"name":"TokensNotSorted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4435,"src":"3946:15:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3946:17:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4655,"nodeType":"RevertStatement","src":"3939:24:35"}]}},{"expression":{"id":4660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4658,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4627,"src":"3992:8:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4659,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4645,"src":"4003:7:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"3992:18:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":4661,"nodeType":"ExpressionStatement","src":"3992:18:35"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4636,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4633,"src":"3818:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":4637,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4615,"src":"3822:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3829:6:35","memberName":"length","nodeType":"MemberAccess","src":"3822:13:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3818:17:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4663,"initializationExpression":{"assignments":[4633],"declarations":[{"constant":false,"id":4633,"mutability":"mutable","name":"i","nameLocation":"3811:1:35","nodeType":"VariableDeclaration","scope":4663,"src":"3803:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4632,"name":"uint256","nodeType":"ElementaryTypeName","src":"3803:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4635,"initialValue":{"hexValue":"31","id":4634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3815:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"3803:13:35"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3837:3:35","subExpression":{"id":4640,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4633,"src":"3839:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4642,"nodeType":"ExpressionStatement","src":"3837:3:35"},"nodeType":"ForStatement","src":"3798:223:35"}]},"documentation":{"id":4611,"nodeType":"StructuredDocumentation","src":"3520:95:35","text":"@dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness."},"id":4665,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedTokens","nameLocation":"3629:18:35","nodeType":"FunctionDefinition","parameters":{"id":4616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4615,"mutability":"mutable","name":"tokens","nameLocation":"3664:6:35","nodeType":"VariableDeclaration","scope":4665,"src":"3648:22:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4613,"nodeType":"UserDefinedTypeName","pathNode":{"id":4612,"name":"IERC20","nameLocations":["3648:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3648:6:35"},"referencedDeclaration":10576,"src":"3648:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":4614,"nodeType":"ArrayTypeName","src":"3648:8:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3647:24:35"},"returnParameters":{"id":4617,"nodeType":"ParameterList","parameters":[],"src":"3686:0:35"},"scope":4718,"src":"3620:407:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4716,"nodeType":"Block","src":"4203:347:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4672,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4669,"src":"4217:7:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4225:6:35","memberName":"length","nodeType":"MemberAccess","src":"4217:14:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":4674,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4234:1:35","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4217:18:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4678,"nodeType":"IfStatement","src":"4213:55:35","trueBody":{"id":4677,"nodeType":"Block","src":"4237:31:35","statements":[{"functionReturnParameters":4671,"id":4676,"nodeType":"Return","src":"4251:7:35"}]}},{"assignments":[4680],"declarations":[{"constant":false,"id":4680,"mutability":"mutable","name":"previous","nameLocation":"4286:8:35","nodeType":"VariableDeclaration","scope":4716,"src":"4278:16:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4679,"name":"uint256","nodeType":"ElementaryTypeName","src":"4278:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4684,"initialValue":{"baseExpression":{"id":4681,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4669,"src":"4297:7:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4683,"indexExpression":{"hexValue":"30","id":4682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4305:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4297:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4278:29:35"},{"body":{"id":4714,"nodeType":"Block","src":"4363:181:35","statements":[{"assignments":[4697],"declarations":[{"constant":false,"id":4697,"mutability":"mutable","name":"current","nameLocation":"4385:7:35","nodeType":"VariableDeclaration","scope":4714,"src":"4377:15:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4696,"name":"uint256","nodeType":"ElementaryTypeName","src":"4377:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4701,"initialValue":{"baseExpression":{"id":4698,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4669,"src":"4395:7:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4700,"indexExpression":{"id":4699,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4686,"src":"4403:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4395:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4377:28:35"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4702,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4680,"src":"4424:8:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4703,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4697,"src":"4435:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4424:18:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4709,"nodeType":"IfStatement","src":"4420:81:35","trueBody":{"id":4708,"nodeType":"Block","src":"4444:57:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4705,"name":"TokensNotSorted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4435,"src":"4469:15:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4469:17:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4707,"nodeType":"RevertStatement","src":"4462:24:35"}]}},{"expression":{"id":4712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4710,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4680,"src":"4515:8:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4711,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4697,"src":"4526:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4515:18:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4713,"nodeType":"ExpressionStatement","src":"4515:18:35"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4689,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4686,"src":"4338:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":4690,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4669,"src":"4342:7:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4350:6:35","memberName":"length","nodeType":"MemberAccess","src":"4342:14:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4338:18:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4715,"initializationExpression":{"assignments":[4686],"declarations":[{"constant":false,"id":4686,"mutability":"mutable","name":"i","nameLocation":"4331:1:35","nodeType":"VariableDeclaration","scope":4715,"src":"4323:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4685,"name":"uint256","nodeType":"ElementaryTypeName","src":"4323:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4688,"initialValue":{"hexValue":"31","id":4687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4335:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"4323:13:35"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4358:3:35","subExpression":{"id":4693,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4686,"src":"4360:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4695,"nodeType":"ExpressionStatement","src":"4358:3:35"},"nodeType":"ForStatement","src":"4318:226:35"}]},"documentation":{"id":4666,"nodeType":"StructuredDocumentation","src":"4033:96:35","text":"@dev Ensure an array of amounts is sorted. As above, does not validate length or uniqueness."},"id":4717,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedAmounts","nameLocation":"4143:19:35","nodeType":"FunctionDefinition","parameters":{"id":4670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4669,"mutability":"mutable","name":"amounts","nameLocation":"4180:7:35","nodeType":"VariableDeclaration","scope":4717,"src":"4163:24:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4667,"name":"uint256","nodeType":"ElementaryTypeName","src":"4163:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4668,"nodeType":"ArrayTypeName","src":"4163:9:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4162:26:35"},"returnParameters":{"id":4671,"nodeType":"ParameterList","parameters":[],"src":"4203:0:35"},"scope":4718,"src":"4134:416:35","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4719,"src":"202:4350:35","usedErrors":[4426,4429,4432,4435],"usedEvents":[]}],"src":"46:4507:35"},"id":35},"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","exportedSymbols":{"PackedTokenBalance":[4869]},"id":4870,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4720,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:36"},{"abstract":false,"baseContracts":[],"canonicalName":"PackedTokenBalance","contractDependencies":[],"contractKind":"library","documentation":{"id":4721,"nodeType":"StructuredDocumentation","src":"72:909:36","text":" @notice This library represents a data structure for packing a token's current raw and derived balances. A derived\n balance can be the \"last\" live balance scaled18 of the raw token, or the balance of the wrapped version of the\n token in a vault buffer, among others.\n @dev We could use a Solidity struct to pack balance values together in a single storage slot, but unfortunately\n Solidity only allows for structs to live in either storage, calldata or memory. Because a memory struct still takes\n up a slot in the stack (to store its memory location), and because the entire balance fits in a single stack slot\n (two 128 bit values), using memory is strictly less gas performant. Therefore, we do manual packing and unpacking.\n We could also use custom types now, but given the simplicity here, and the existing EnumerableMap type, it seemed\n easier to leave it as a bytes32."},"fullyImplemented":true,"id":4869,"linearizedBaseContracts":[4869],"name":"PackedTokenBalance","nameLocation":"990:18:36","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":4729,"mutability":"constant","name":"_MAX_BALANCE","nameLocation":"1222:12:36","nodeType":"VariableDeclaration","scope":4869,"src":"1197:54:36","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4722,"name":"uint256","nodeType":"ElementaryTypeName","src":"1197:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"},"id":4728,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"},"id":4726,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":4723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1237:1:36","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"hexValue":"313238","id":4724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1243:3:36","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"}],"id":4725,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1242:5:36","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"}},"src":"1237:10:36","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":4727,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1250:1:36","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1237:14:36","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"}},"visibility":"private"},{"documentation":{"id":4730,"nodeType":"StructuredDocumentation","src":"1258:78:36","text":"@notice One of the balances is above the maximum value that can be stored."},"errorSelector":"89560ca1","id":4732,"name":"BalanceOverflow","nameLocation":"1347:15:36","nodeType":"ErrorDefinition","parameters":{"id":4731,"nodeType":"ParameterList","parameters":[],"src":"1362:2:36"},"src":"1341:24:36"},{"body":{"id":4746,"nodeType":"Block","src":"1443:55:36","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4741,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4734,"src":"1468:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4740,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1460:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4739,"name":"uint256","nodeType":"ElementaryTypeName","src":"1460:7:36","typeDescriptions":{}}},"id":4742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1460:16:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":4743,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4729,"src":"1479:12:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1460:31:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4738,"id":4745,"nodeType":"Return","src":"1453:38:36"}]},"id":4747,"implemented":true,"kind":"function","modifiers":[],"name":"getBalanceRaw","nameLocation":"1380:13:36","nodeType":"FunctionDefinition","parameters":{"id":4735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4734,"mutability":"mutable","name":"balance","nameLocation":"1402:7:36","nodeType":"VariableDeclaration","scope":4747,"src":"1394:15:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4733,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1394:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1393:17:36"},"returnParameters":{"id":4738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4737,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4747,"src":"1434:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4736,"name":"uint256","nodeType":"ElementaryTypeName","src":"1434:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1433:9:36"},"scope":4869,"src":"1371:127:36","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4763,"nodeType":"Block","src":"1580:62:36","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":4758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4756,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4749,"src":"1605:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"313238","id":4757,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1616:3:36","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"1605:14:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4755,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1597:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4754,"name":"uint256","nodeType":"ElementaryTypeName","src":"1597:7:36","typeDescriptions":{}}},"id":4759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1597:23:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":4760,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4729,"src":"1623:12:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1597:38:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4753,"id":4762,"nodeType":"Return","src":"1590:45:36"}]},"id":4764,"implemented":true,"kind":"function","modifiers":[],"name":"getBalanceDerived","nameLocation":"1513:17:36","nodeType":"FunctionDefinition","parameters":{"id":4750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4749,"mutability":"mutable","name":"balance","nameLocation":"1539:7:36","nodeType":"VariableDeclaration","scope":4764,"src":"1531:15:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4748,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1531:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1530:17:36"},"returnParameters":{"id":4753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4752,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4764,"src":"1571:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4751,"name":"uint256","nodeType":"ElementaryTypeName","src":"1571:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1570:9:36"},"scope":4869,"src":"1504:138:36","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4781,"nodeType":"Block","src":"1831:82:36","statements":[{"expression":{"arguments":[{"id":4775,"name":"newBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4769,"src":"1864:13:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":4777,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4767,"src":"1897:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4776,"name":"getBalanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4764,"src":"1879:17:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":4778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1879:26:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4774,"name":"toPackedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"1848:15:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":4779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1848:58:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4773,"id":4780,"nodeType":"Return","src":"1841:65:36"}]},"documentation":{"id":4765,"nodeType":"StructuredDocumentation","src":"1648:83:36","text":"@dev Sets only the raw balance of balances and returns the new bytes32 balance."},"id":4782,"implemented":true,"kind":"function","modifiers":[],"name":"setBalanceRaw","nameLocation":"1745:13:36","nodeType":"FunctionDefinition","parameters":{"id":4770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4767,"mutability":"mutable","name":"balance","nameLocation":"1767:7:36","nodeType":"VariableDeclaration","scope":4782,"src":"1759:15:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4766,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1759:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4769,"mutability":"mutable","name":"newBalanceRaw","nameLocation":"1784:13:36","nodeType":"VariableDeclaration","scope":4782,"src":"1776:21:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4768,"name":"uint256","nodeType":"ElementaryTypeName","src":"1776:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1758:40:36"},"returnParameters":{"id":4773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4772,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4782,"src":"1822:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4771,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1822:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1821:9:36"},"scope":4869,"src":"1736:177:36","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4799,"nodeType":"Block","src":"2114:82:36","statements":[{"expression":{"arguments":[{"arguments":[{"id":4794,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4785,"src":"2161:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4793,"name":"getBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4747,"src":"2147:13:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":4795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2147:22:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4796,"name":"newBalanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"2171:17:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4792,"name":"toPackedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"2131:15:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":4797,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2131:58:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4791,"id":4798,"nodeType":"Return","src":"2124:65:36"}]},"documentation":{"id":4783,"nodeType":"StructuredDocumentation","src":"1919:87:36","text":"@dev Sets only the derived balance of balances and returns the new bytes32 balance."},"id":4800,"implemented":true,"kind":"function","modifiers":[],"name":"setBalanceDerived","nameLocation":"2020:17:36","nodeType":"FunctionDefinition","parameters":{"id":4788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4785,"mutability":"mutable","name":"balance","nameLocation":"2046:7:36","nodeType":"VariableDeclaration","scope":4800,"src":"2038:15:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4784,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2038:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4787,"mutability":"mutable","name":"newBalanceDerived","nameLocation":"2063:17:36","nodeType":"VariableDeclaration","scope":4800,"src":"2055:25:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4786,"name":"uint256","nodeType":"ElementaryTypeName","src":"2055:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2037:44:36"},"returnParameters":{"id":4791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4790,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4800,"src":"2105:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4789,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2105:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2104:9:36"},"scope":4869,"src":"2011:185:36","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4827,"nodeType":"Block","src":"2412:180:36","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4810,"name":"balanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4803,"src":"2426:10:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4811,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4729,"src":"2439:12:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2426:25:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4813,"name":"balanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4805,"src":"2455:14:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4814,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4729,"src":"2472:12:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2455:29:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2426:58:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4821,"nodeType":"IfStatement","src":"2422:113:36","trueBody":{"id":4820,"nodeType":"Block","src":"2486:49:36","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4817,"name":"BalanceOverflow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"2507:15:36","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2507:17:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4819,"nodeType":"RevertStatement","src":"2500:24:36"}]}},{"expression":{"arguments":[{"id":4823,"name":"balanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4803,"src":"2558:10:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4824,"name":"balanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4805,"src":"2570:14:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4822,"name":"_pack","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4868,"src":"2552:5:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":4825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2552:33:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4809,"id":4826,"nodeType":"Return","src":"2545:40:36"}]},"documentation":{"id":4801,"nodeType":"StructuredDocumentation","src":"2202:104:36","text":"@dev Validates the size of `balanceRaw` and `balanceDerived`, then returns a packed balance bytes32."},"id":4828,"implemented":true,"kind":"function","modifiers":[],"name":"toPackedBalance","nameLocation":"2320:15:36","nodeType":"FunctionDefinition","parameters":{"id":4806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4803,"mutability":"mutable","name":"balanceRaw","nameLocation":"2344:10:36","nodeType":"VariableDeclaration","scope":4828,"src":"2336:18:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4802,"name":"uint256","nodeType":"ElementaryTypeName","src":"2336:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4805,"mutability":"mutable","name":"balanceDerived","nameLocation":"2364:14:36","nodeType":"VariableDeclaration","scope":4828,"src":"2356:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4804,"name":"uint256","nodeType":"ElementaryTypeName","src":"2356:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2335:44:36"},"returnParameters":{"id":4809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4808,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4828,"src":"2403:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4807,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2403:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2402:9:36"},"scope":4869,"src":"2311:281:36","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4846,"nodeType":"Block","src":"2754:76:36","statements":[{"expression":{"components":[{"arguments":[{"id":4839,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4831,"src":"2786:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4838,"name":"getBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4747,"src":"2772:13:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":4840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2772:22:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":4842,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4831,"src":"2814:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4841,"name":"getBalanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4764,"src":"2796:17:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":4843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2796:26:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4844,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2771:52:36","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":4837,"id":4845,"nodeType":"Return","src":"2764:59:36"}]},"documentation":{"id":4829,"nodeType":"StructuredDocumentation","src":"2598:40:36","text":"@dev Decode and fetch both balances."},"id":4847,"implemented":true,"kind":"function","modifiers":[],"name":"fromPackedBalance","nameLocation":"2652:17:36","nodeType":"FunctionDefinition","parameters":{"id":4832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4831,"mutability":"mutable","name":"balance","nameLocation":"2678:7:36","nodeType":"VariableDeclaration","scope":4847,"src":"2670:15:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4830,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2670:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2669:17:36"},"returnParameters":{"id":4837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4834,"mutability":"mutable","name":"balanceRaw","nameLocation":"2718:10:36","nodeType":"VariableDeclaration","scope":4847,"src":"2710:18:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4833,"name":"uint256","nodeType":"ElementaryTypeName","src":"2710:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4836,"mutability":"mutable","name":"balanceDerived","nameLocation":"2738:14:36","nodeType":"VariableDeclaration","scope":4847,"src":"2730:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4835,"name":"uint256","nodeType":"ElementaryTypeName","src":"2730:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2709:44:36"},"scope":4869,"src":"2643:187:36","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4867,"nodeType":"Block","src":"3035:76:36","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4859,"name":"mostSignificant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4852,"src":"3061:15:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"313238","id":4860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3080:3:36","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"3061:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4862,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3060:24:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4863,"name":"leastSignificant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4850,"src":"3087:16:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3060:43:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4858,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3052:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":4857,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3052:7:36","typeDescriptions":{}}},"id":4865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3052:52:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4856,"id":4866,"nodeType":"Return","src":"3045:59:36"}]},"documentation":{"id":4848,"nodeType":"StructuredDocumentation","src":"2836:97:36","text":"@dev Packs two uint128 values into a packed balance bytes32. It does not check balance sizes."},"id":4868,"implemented":true,"kind":"function","modifiers":[],"name":"_pack","nameLocation":"2947:5:36","nodeType":"FunctionDefinition","parameters":{"id":4853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4850,"mutability":"mutable","name":"leastSignificant","nameLocation":"2961:16:36","nodeType":"VariableDeclaration","scope":4868,"src":"2953:24:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4849,"name":"uint256","nodeType":"ElementaryTypeName","src":"2953:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4852,"mutability":"mutable","name":"mostSignificant","nameLocation":"2987:15:36","nodeType":"VariableDeclaration","scope":4868,"src":"2979:23:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4851,"name":"uint256","nodeType":"ElementaryTypeName","src":"2979:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2952:51:36"},"returnParameters":{"id":4856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4855,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4868,"src":"3026:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4854,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3026:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3025:9:36"},"scope":4869,"src":"2938:173:36","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":4870,"src":"982:2131:36","usedErrors":[4732],"usedEvents":[]}],"src":"46:3068:36"},"id":36},"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol","exportedSymbols":{"RevertCodec":[4959]},"id":4960,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4871,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:37"},{"abstract":false,"baseContracts":[],"canonicalName":"RevertCodec","contractDependencies":[],"contractKind":"library","documentation":{"id":4872,"nodeType":"StructuredDocumentation","src":"111:120:37","text":"@notice Support `quoteAndRevert`: a v2-style query which always reverts, and returns the result in the return data."},"fullyImplemented":true,"id":4959,"linearizedBaseContracts":[4959],"name":"RevertCodec","nameLocation":"239:11:37","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4873,"nodeType":"StructuredDocumentation","src":"257:183:37","text":" @notice On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\n @param result The result of the query operation"},"errorSelector":"5ab64fb8","id":4877,"name":"Result","nameLocation":"451:6:37","nodeType":"ErrorDefinition","parameters":{"id":4876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4875,"mutability":"mutable","name":"result","nameLocation":"464:6:37","nodeType":"VariableDeclaration","scope":4877,"src":"458:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4874,"name":"bytes","nodeType":"ElementaryTypeName","src":"458:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"457:14:37"},"src":"445:27:37"},{"documentation":{"id":4878,"nodeType":"StructuredDocumentation","src":"478:79:37","text":"@notice Handle the \"reverted without a reason\" case (i.e., no return data)."},"errorSelector":"a7285689","id":4880,"name":"ErrorSelectorNotFound","nameLocation":"568:21:37","nodeType":"ErrorDefinition","parameters":{"id":4879,"nodeType":"ParameterList","parameters":[],"src":"589:2:37"},"src":"562:30:37"},{"body":{"id":4920,"nodeType":"Block","src":"687:559:37","statements":[{"assignments":[4888],"declarations":[{"constant":false,"id":4888,"mutability":"mutable","name":"errorSelector","nameLocation":"704:13:37","nodeType":"VariableDeclaration","scope":4920,"src":"697:20:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4887,"name":"bytes4","nodeType":"ElementaryTypeName","src":"697:6:37","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":4893,"initialValue":{"arguments":[{"id":4891,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4882,"src":"746:9:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":4889,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4959,"src":"720:11:37","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4959_$","typeString":"type(library RevertCodec)"}},"id":4890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"732:13:37","memberName":"parseSelector","nodeType":"MemberAccess","referencedDeclaration":4940,"src":"720:25:37","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$","typeString":"function (bytes memory) pure returns (bytes4)"}},"id":4892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"720:36:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"697:59:37"},{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":4897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4894,"name":"errorSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4888,"src":"770:13:37","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":4895,"name":"Result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4877,"src":"787:6:37","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$","typeString":"function (bytes memory) pure returns (error)"}},"id":4896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"794:8:37","memberName":"selector","nodeType":"MemberAccess","src":"787:15:37","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"770:32:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4905,"nodeType":"IfStatement","src":"766:185:37","trueBody":{"id":4904,"nodeType":"Block","src":"804:147:37","statements":[{"expression":{"arguments":[{"id":4901,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4882,"src":"930:9:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":4898,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4959,"src":"903:11:37","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4959_$","typeString":"type(library RevertCodec)"}},"id":4900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"915:14:37","memberName":"bubbleUpRevert","nodeType":"MemberAccess","referencedDeclaration":4958,"src":"903:26:37","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":4902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"903:37:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4903,"nodeType":"ExpressionStatement","src":"903:37:37"}]}},{"assignments":[4907],"declarations":[{"constant":false,"id":4907,"mutability":"mutable","name":"resultRawLength","nameLocation":"969:15:37","nodeType":"VariableDeclaration","scope":4920,"src":"961:23:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4906,"name":"uint256","nodeType":"ElementaryTypeName","src":"961:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4910,"initialValue":{"expression":{"id":4908,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4882,"src":"987:9:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"997:6:37","memberName":"length","nodeType":"MemberAccess","src":"987:16:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"961:42:37"},{"AST":{"nativeSrc":"1038:154:37","nodeType":"YulBlock","src":"1038:154:37","statements":[{"nativeSrc":"1052:33:37","nodeType":"YulAssignment","src":"1052:33:37","value":{"arguments":[{"name":"resultRaw","nativeSrc":"1069:9:37","nodeType":"YulIdentifier","src":"1069:9:37"},{"kind":"number","nativeSrc":"1080:4:37","nodeType":"YulLiteral","src":"1080:4:37","type":"","value":"0x04"}],"functionName":{"name":"add","nativeSrc":"1065:3:37","nodeType":"YulIdentifier","src":"1065:3:37"},"nativeSrc":"1065:20:37","nodeType":"YulFunctionCall","src":"1065:20:37"},"variableNames":[{"name":"resultRaw","nativeSrc":"1052:9:37","nodeType":"YulIdentifier","src":"1052:9:37"}]},{"expression":{"arguments":[{"name":"resultRaw","nativeSrc":"1126:9:37","nodeType":"YulIdentifier","src":"1126:9:37"},{"arguments":[{"name":"resultRawLength","nativeSrc":"1141:15:37","nodeType":"YulIdentifier","src":"1141:15:37"},{"kind":"number","nativeSrc":"1158:1:37","nodeType":"YulLiteral","src":"1158:1:37","type":"","value":"4"}],"functionName":{"name":"sub","nativeSrc":"1137:3:37","nodeType":"YulIdentifier","src":"1137:3:37"},"nativeSrc":"1137:23:37","nodeType":"YulFunctionCall","src":"1137:23:37"}],"functionName":{"name":"mstore","nativeSrc":"1119:6:37","nodeType":"YulIdentifier","src":"1119:6:37"},"nativeSrc":"1119:42:37","nodeType":"YulFunctionCall","src":"1119:42:37"},"nativeSrc":"1119:42:37","nodeType":"YulExpressionStatement","src":"1119:42:37"}]},"evmVersion":"cancun","externalReferences":[{"declaration":4882,"isOffset":false,"isSlot":false,"src":"1052:9:37","valueSize":1},{"declaration":4882,"isOffset":false,"isSlot":false,"src":"1069:9:37","valueSize":1},{"declaration":4882,"isOffset":false,"isSlot":false,"src":"1126:9:37","valueSize":1},{"declaration":4907,"isOffset":false,"isSlot":false,"src":"1141:15:37","valueSize":1}],"flags":["memory-safe"],"id":4911,"nodeType":"InlineAssembly","src":"1013:179:37"},{"expression":{"arguments":[{"id":4914,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4882,"src":"1220:9:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":4916,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1232:5:37","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":4915,"name":"bytes","nodeType":"ElementaryTypeName","src":"1232:5:37","typeDescriptions":{}}}],"id":4917,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1231:7:37","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"}],"expression":{"id":4912,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1209:3:37","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":4913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1213:6:37","memberName":"decode","nodeType":"MemberAccess","src":"1209:10:37","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":4918,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1209:30:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":4886,"id":4919,"nodeType":"Return","src":"1202:37:37"}]},"id":4921,"implemented":true,"kind":"function","modifiers":[],"name":"catchEncodedResult","nameLocation":"607:18:37","nodeType":"FunctionDefinition","parameters":{"id":4883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4882,"mutability":"mutable","name":"resultRaw","nameLocation":"639:9:37","nodeType":"VariableDeclaration","scope":4921,"src":"626:22:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4881,"name":"bytes","nodeType":"ElementaryTypeName","src":"626:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"625:24:37"},"returnParameters":{"id":4886,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4885,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4921,"src":"673:12:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4884,"name":"bytes","nodeType":"ElementaryTypeName","src":"673:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"672:14:37"},"scope":4959,"src":"598:648:37","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4939,"nodeType":"Block","src":"1429:258:37","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4929,"name":"callResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4924,"src":"1443:10:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1454:6:37","memberName":"length","nodeType":"MemberAccess","src":"1443:17:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"34","id":4931,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1463:1:37","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"1443:21:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4937,"nodeType":"IfStatement","src":"1439:82:37","trueBody":{"id":4936,"nodeType":"Block","src":"1466:55:37","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4933,"name":"ErrorSelectorNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4880,"src":"1487:21:37","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1487:23:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4935,"nodeType":"RevertStatement","src":"1480:30:37"}]}},{"AST":{"nativeSrc":"1555:126:37","nodeType":"YulBlock","src":"1555:126:37","statements":[{"nativeSrc":"1569:45:37","nodeType":"YulAssignment","src":"1569:45:37","value":{"arguments":[{"arguments":[{"name":"callResult","nativeSrc":"1596:10:37","nodeType":"YulIdentifier","src":"1596:10:37"},{"kind":"number","nativeSrc":"1608:4:37","nodeType":"YulLiteral","src":"1608:4:37","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1592:3:37","nodeType":"YulIdentifier","src":"1592:3:37"},"nativeSrc":"1592:21:37","nodeType":"YulFunctionCall","src":"1592:21:37"}],"functionName":{"name":"mload","nativeSrc":"1586:5:37","nodeType":"YulIdentifier","src":"1586:5:37"},"nativeSrc":"1586:28:37","nodeType":"YulFunctionCall","src":"1586:28:37"},"variableNames":[{"name":"errorSelector","nativeSrc":"1569:13:37","nodeType":"YulIdentifier","src":"1569:13:37"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4924,"isOffset":false,"isSlot":false,"src":"1596:10:37","valueSize":1},{"declaration":4927,"isOffset":false,"isSlot":false,"src":"1569:13:37","valueSize":1}],"flags":["memory-safe"],"id":4938,"nodeType":"InlineAssembly","src":"1530:151:37"}]},"documentation":{"id":4922,"nodeType":"StructuredDocumentation","src":"1252:79:37","text":"@dev Returns the first 4 bytes in an array, reverting if the length is < 4."},"id":4940,"implemented":true,"kind":"function","modifiers":[],"name":"parseSelector","nameLocation":"1345:13:37","nodeType":"FunctionDefinition","parameters":{"id":4925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4924,"mutability":"mutable","name":"callResult","nameLocation":"1372:10:37","nodeType":"VariableDeclaration","scope":4940,"src":"1359:23:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4923,"name":"bytes","nodeType":"ElementaryTypeName","src":"1359:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1358:25:37"},"returnParameters":{"id":4928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4927,"mutability":"mutable","name":"errorSelector","nameLocation":"1414:13:37","nodeType":"VariableDeclaration","scope":4940,"src":"1407:20:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4926,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1407:6:37","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1406:22:37"},"scope":4959,"src":"1336:351:37","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4957,"nodeType":"Block","src":"1804:441:37","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4946,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4943,"src":"1881:10:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1892:6:37","memberName":"length","nodeType":"MemberAccess","src":"1881:17:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":4948,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1901:1:37","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1881:21:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4955,"nodeType":"Block","src":"2184:55:37","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4952,"name":"ErrorSelectorNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4880,"src":"2205:21:37","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2205:23:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4954,"nodeType":"RevertStatement","src":"2198:30:37"}]},"id":4956,"nodeType":"IfStatement","src":"1877:362:37","trueBody":{"id":4951,"nodeType":"Block","src":"1904:274:37","statements":[{"AST":{"nativeSrc":"2033:135:37","nodeType":"YulBlock","src":"2033:135:37","statements":[{"nativeSrc":"2051:41:37","nodeType":"YulVariableDeclaration","src":"2051:41:37","value":{"arguments":[{"name":"returnData","nativeSrc":"2081:10:37","nodeType":"YulIdentifier","src":"2081:10:37"}],"functionName":{"name":"mload","nativeSrc":"2075:5:37","nodeType":"YulIdentifier","src":"2075:5:37"},"nativeSrc":"2075:17:37","nodeType":"YulFunctionCall","src":"2075:17:37"},"variables":[{"name":"return_data_size","nativeSrc":"2055:16:37","nodeType":"YulTypedName","src":"2055:16:37","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"2120:2:37","nodeType":"YulLiteral","src":"2120:2:37","type":"","value":"32"},{"name":"returnData","nativeSrc":"2124:10:37","nodeType":"YulIdentifier","src":"2124:10:37"}],"functionName":{"name":"add","nativeSrc":"2116:3:37","nodeType":"YulIdentifier","src":"2116:3:37"},"nativeSrc":"2116:19:37","nodeType":"YulFunctionCall","src":"2116:19:37"},{"name":"return_data_size","nativeSrc":"2137:16:37","nodeType":"YulIdentifier","src":"2137:16:37"}],"functionName":{"name":"revert","nativeSrc":"2109:6:37","nodeType":"YulIdentifier","src":"2109:6:37"},"nativeSrc":"2109:45:37","nodeType":"YulFunctionCall","src":"2109:45:37"},"nativeSrc":"2109:45:37","nodeType":"YulExpressionStatement","src":"2109:45:37"}]},"evmVersion":"cancun","externalReferences":[{"declaration":4943,"isOffset":false,"isSlot":false,"src":"2081:10:37","valueSize":1},{"declaration":4943,"isOffset":false,"isSlot":false,"src":"2124:10:37","valueSize":1}],"flags":["memory-safe"],"id":4950,"nodeType":"InlineAssembly","src":"2008:160:37"}]}}]},"documentation":{"id":4941,"nodeType":"StructuredDocumentation","src":"1693:43:37","text":"@dev Taken from Openzeppelin's Address."},"id":4958,"implemented":true,"kind":"function","modifiers":[],"name":"bubbleUpRevert","nameLocation":"1750:14:37","nodeType":"FunctionDefinition","parameters":{"id":4944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4943,"mutability":"mutable","name":"returnData","nameLocation":"1778:10:37","nodeType":"VariableDeclaration","scope":4958,"src":"1765:23:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4942,"name":"bytes","nodeType":"ElementaryTypeName","src":"1765:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1764:25:37"},"returnParameters":{"id":4945,"nodeType":"ParameterList","parameters":[],"src":"1804:0:37"},"scope":4959,"src":"1741:504:37","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4960,"src":"231:2016:37","usedErrors":[4877,4880],"usedEvents":[]}],"src":"46:2202:37"},"id":37},"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","exportedSymbols":{"IVersion":[34],"Version":[4999]},"id":5000,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4961,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:38"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol","id":4963,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5000,"sourceUnit":35,"src":"72:102:38","symbolAliases":[{"foreign":{"id":4962,"name":"IVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34,"src":"81:8:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4965,"name":"IVersion","nameLocations":["686:8:38"],"nodeType":"IdentifierPath","referencedDeclaration":34,"src":"686:8:38"},"id":4966,"nodeType":"InheritanceSpecifier","src":"686:8:38"}],"canonicalName":"Version","contractDependencies":[],"contractKind":"contract","documentation":{"id":4964,"nodeType":"StructuredDocumentation","src":"176:489:38","text":" @notice Retrieves a contract's version from storage.\n @dev The version is set at deployment time and cannot be changed. It would be immutable, but immutable strings\n are not yet supported.\n Contracts like factories and pools should have versions. These typically take the form of JSON strings containing\n detailed information about the deployment. For instance:\n `{name: 'ChildChainGaugeFactory', version: 2, deployment: '20230316-child-chain-gauge-factory-v2'}`"},"fullyImplemented":true,"id":4999,"linearizedBaseContracts":[4999,34],"name":"Version","nameLocation":"675:7:38","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":4968,"mutability":"mutable","name":"_version","nameLocation":"716:8:38","nodeType":"VariableDeclaration","scope":4999,"src":"701:23:38","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":4967,"name":"string","nodeType":"ElementaryTypeName","src":"701:6:38","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":4977,"nodeType":"Block","src":"767:38:38","statements":[{"expression":{"arguments":[{"id":4974,"name":"version_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4970,"src":"789:8:38","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4973,"name":"_setVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4998,"src":"777:11:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":4975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"777:21:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4976,"nodeType":"ExpressionStatement","src":"777:21:38"}]},"id":4978,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4970,"mutability":"mutable","name":"version_","nameLocation":"757:8:38","nodeType":"VariableDeclaration","scope":4978,"src":"743:22:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4969,"name":"string","nodeType":"ElementaryTypeName","src":"743:6:38","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"742:24:38"},"returnParameters":{"id":4972,"nodeType":"ParameterList","parameters":[],"src":"767:0:38"},"scope":4999,"src":"731:74:38","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[33],"body":{"id":4986,"nodeType":"Block","src":"974:32:38","statements":[{"expression":{"id":4984,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4968,"src":"991:8:38","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":4983,"id":4985,"nodeType":"Return","src":"984:15:38"}]},"documentation":{"id":4979,"nodeType":"StructuredDocumentation","src":"811:101:38","text":" @notice Getter for the version.\n @return version The stored contract version"},"functionSelector":"54fd4d50","id":4987,"implemented":true,"kind":"function","modifiers":[],"name":"version","nameLocation":"926:7:38","nodeType":"FunctionDefinition","parameters":{"id":4980,"nodeType":"ParameterList","parameters":[],"src":"933:2:38"},"returnParameters":{"id":4983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4982,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4987,"src":"959:13:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4981,"name":"string","nodeType":"ElementaryTypeName","src":"959:6:38","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"958:15:38"},"scope":4999,"src":"917:89:38","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":4997,"nodeType":"Block","src":"1146:38:38","statements":[{"expression":{"id":4995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4993,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4968,"src":"1156:8:38","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4994,"name":"newVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4990,"src":"1167:10:38","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1156:21:38","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":4996,"nodeType":"ExpressionStatement","src":"1156:21:38"}]},"documentation":{"id":4988,"nodeType":"StructuredDocumentation","src":"1012:73:38","text":"@dev Internal setter that allows this contract to be used in proxies."},"id":4998,"implemented":true,"kind":"function","modifiers":[],"name":"_setVersion","nameLocation":"1099:11:38","nodeType":"FunctionDefinition","parameters":{"id":4991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4990,"mutability":"mutable","name":"newVersion","nameLocation":"1125:10:38","nodeType":"VariableDeclaration","scope":4998,"src":"1111:24:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4989,"name":"string","nodeType":"ElementaryTypeName","src":"1111:6:38","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1110:26:38"},"returnParameters":{"id":4992,"nodeType":"ParameterList","parameters":[],"src":"1146:0:38"},"scope":4999,"src":"1090:94:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":5000,"src":"666:520:38","usedErrors":[],"usedEvents":[]}],"src":"46:1141:38"},"id":38},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","exportedSymbols":{"FixedPoint":[5298],"LogExpMath":[6654]},"id":5299,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":5001,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:39"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","file":"./LogExpMath.sol","id":5003,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5299,"sourceUnit":6655,"src":"72:46:39","symbolAliases":[{"foreign":{"id":5002,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6654,"src":"81:10:39","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"FixedPoint","contractDependencies":[],"contractKind":"library","documentation":{"id":5004,"nodeType":"StructuredDocumentation","src":"120:119:39","text":"@notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision."},"fullyImplemented":true,"id":5298,"linearizedBaseContracts":[5298],"name":"FixedPoint","nameLocation":"247:10:39","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":5005,"nodeType":"StructuredDocumentation","src":"264:39:39","text":"@notice Attempted division by zero."},"errorSelector":"0a0c22c7","id":5007,"name":"ZeroDivision","nameLocation":"314:12:39","nodeType":"ErrorDefinition","parameters":{"id":5006,"nodeType":"ParameterList","parameters":[],"src":"326:2:39"},"src":"308:21:39"},{"constant":true,"id":5010,"mutability":"constant","name":"ONE","nameLocation":"459:3:39","nodeType":"VariableDeclaration","scope":5298,"src":"433:36:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5008,"name":"uint256","nodeType":"ElementaryTypeName","src":"433:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653138","id":5009,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"465:4:39","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":5015,"mutability":"constant","name":"TWO","nameLocation":"522:3:39","nodeType":"VariableDeclaration","scope":5298,"src":"496:39:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5011,"name":"uint256","nodeType":"ElementaryTypeName","src":"496:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5014,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":5012,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"528:1:39","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5013,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5010,"src":"532:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"528:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":5020,"mutability":"constant","name":"FOUR","nameLocation":"567:4:39","nodeType":"VariableDeclaration","scope":5298,"src":"541:40:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5016,"name":"uint256","nodeType":"ElementaryTypeName","src":"541:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5019,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":5017,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"574:1:39","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5018,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5010,"src":"578:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"574:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":5023,"mutability":"constant","name":"MAX_POW_RELATIVE_ERROR","nameLocation":"613:22:39","nodeType":"VariableDeclaration","scope":5298,"src":"587:56:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5021,"name":"uint256","nodeType":"ElementaryTypeName","src":"587:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3130303030","id":5022,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"638:5:39","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"visibility":"internal"},{"body":{"id":5042,"nodeType":"Block","src":"733:148:39","statements":[{"assignments":[5033],"declarations":[{"constant":false,"id":5033,"mutability":"mutable","name":"product","nameLocation":"828:7:39","nodeType":"VariableDeclaration","scope":5042,"src":"820:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5032,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5037,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5034,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5025,"src":"838:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5035,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5027,"src":"842:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"838:5:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"820:23:39"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5038,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5033,"src":"861:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5039,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5010,"src":"871:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"861:13:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5031,"id":5041,"nodeType":"Return","src":"854:20:39"}]},"id":5043,"implemented":true,"kind":"function","modifiers":[],"name":"mulDown","nameLocation":"671:7:39","nodeType":"FunctionDefinition","parameters":{"id":5028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5025,"mutability":"mutable","name":"a","nameLocation":"687:1:39","nodeType":"VariableDeclaration","scope":5043,"src":"679:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5024,"name":"uint256","nodeType":"ElementaryTypeName","src":"679:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5027,"mutability":"mutable","name":"b","nameLocation":"698:1:39","nodeType":"VariableDeclaration","scope":5043,"src":"690:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5026,"name":"uint256","nodeType":"ElementaryTypeName","src":"690:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"678:22:39"},"returnParameters":{"id":5031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5030,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5043,"src":"724:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5029,"name":"uint256","nodeType":"ElementaryTypeName","src":"724:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"723:9:39"},"scope":5298,"src":"662:219:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5059,"nodeType":"Block","src":"963:351:39","statements":[{"assignments":[5053],"declarations":[{"constant":false,"id":5053,"mutability":"mutable","name":"product","nameLocation":"1058:7:39","nodeType":"VariableDeclaration","scope":5059,"src":"1050:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5052,"name":"uint256","nodeType":"ElementaryTypeName","src":"1050:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5057,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5054,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5045,"src":"1068:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5055,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5047,"src":"1072:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1068:5:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1050:23:39"},{"AST":{"nativeSrc":"1211:97:39","nodeType":"YulBlock","src":"1211:97:39","statements":[{"nativeSrc":"1225:73:39","nodeType":"YulAssignment","src":"1225:73:39","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1253:7:39","nodeType":"YulIdentifier","src":"1253:7:39"}],"functionName":{"name":"iszero","nativeSrc":"1246:6:39","nodeType":"YulIdentifier","src":"1246:6:39"},"nativeSrc":"1246:15:39","nodeType":"YulFunctionCall","src":"1246:15:39"}],"functionName":{"name":"iszero","nativeSrc":"1239:6:39","nodeType":"YulIdentifier","src":"1239:6:39"},"nativeSrc":"1239:23:39","nodeType":"YulFunctionCall","src":"1239:23:39"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1276:7:39","nodeType":"YulIdentifier","src":"1276:7:39"},{"kind":"number","nativeSrc":"1285:1:39","nodeType":"YulLiteral","src":"1285:1:39","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1272:3:39","nodeType":"YulIdentifier","src":"1272:3:39"},"nativeSrc":"1272:15:39","nodeType":"YulFunctionCall","src":"1272:15:39"},{"name":"ONE","nativeSrc":"1289:3:39","nodeType":"YulIdentifier","src":"1289:3:39"}],"functionName":{"name":"div","nativeSrc":"1268:3:39","nodeType":"YulIdentifier","src":"1268:3:39"},"nativeSrc":"1268:25:39","nodeType":"YulFunctionCall","src":"1268:25:39"},{"kind":"number","nativeSrc":"1295:1:39","nodeType":"YulLiteral","src":"1295:1:39","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"1264:3:39","nodeType":"YulIdentifier","src":"1264:3:39"},"nativeSrc":"1264:33:39","nodeType":"YulFunctionCall","src":"1264:33:39"}],"functionName":{"name":"mul","nativeSrc":"1235:3:39","nodeType":"YulIdentifier","src":"1235:3:39"},"nativeSrc":"1235:63:39","nodeType":"YulFunctionCall","src":"1235:63:39"},"variableNames":[{"name":"result","nativeSrc":"1225:6:39","nodeType":"YulIdentifier","src":"1225:6:39"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":5010,"isOffset":false,"isSlot":false,"src":"1289:3:39","valueSize":1},{"declaration":5053,"isOffset":false,"isSlot":false,"src":"1253:7:39","valueSize":1},{"declaration":5053,"isOffset":false,"isSlot":false,"src":"1276:7:39","valueSize":1},{"declaration":5050,"isOffset":false,"isSlot":false,"src":"1225:6:39","valueSize":1}],"flags":["memory-safe"],"id":5058,"nodeType":"InlineAssembly","src":"1186:122:39"}]},"id":5060,"implemented":true,"kind":"function","modifiers":[],"name":"mulUp","nameLocation":"896:5:39","nodeType":"FunctionDefinition","parameters":{"id":5048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5045,"mutability":"mutable","name":"a","nameLocation":"910:1:39","nodeType":"VariableDeclaration","scope":5060,"src":"902:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5044,"name":"uint256","nodeType":"ElementaryTypeName","src":"902:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5047,"mutability":"mutable","name":"b","nameLocation":"921:1:39","nodeType":"VariableDeclaration","scope":5060,"src":"913:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5046,"name":"uint256","nodeType":"ElementaryTypeName","src":"913:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"901:22:39"},"returnParameters":{"id":5051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5050,"mutability":"mutable","name":"result","nameLocation":"955:6:39","nodeType":"VariableDeclaration","scope":5060,"src":"947:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5049,"name":"uint256","nodeType":"ElementaryTypeName","src":"947:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"946:16:39"},"scope":5298,"src":"887:427:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5079,"nodeType":"Block","src":"1391:254:39","statements":[{"assignments":[5070],"declarations":[{"constant":false,"id":5070,"mutability":"mutable","name":"aInflated","nameLocation":"1499:9:39","nodeType":"VariableDeclaration","scope":5079,"src":"1491:17:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5069,"name":"uint256","nodeType":"ElementaryTypeName","src":"1491:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5074,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5071,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5062,"src":"1511:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5072,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5010,"src":"1515:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1511:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1491:27:39"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5075,"name":"aInflated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5070,"src":"1625:9:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5076,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5064,"src":"1637:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1625:13:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5068,"id":5078,"nodeType":"Return","src":"1618:20:39"}]},"id":5080,"implemented":true,"kind":"function","modifiers":[],"name":"divDown","nameLocation":"1329:7:39","nodeType":"FunctionDefinition","parameters":{"id":5065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5062,"mutability":"mutable","name":"a","nameLocation":"1345:1:39","nodeType":"VariableDeclaration","scope":5080,"src":"1337:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5061,"name":"uint256","nodeType":"ElementaryTypeName","src":"1337:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5064,"mutability":"mutable","name":"b","nameLocation":"1356:1:39","nodeType":"VariableDeclaration","scope":5080,"src":"1348:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5063,"name":"uint256","nodeType":"ElementaryTypeName","src":"1348:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1336:22:39"},"returnParameters":{"id":5068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5067,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5080,"src":"1382:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5066,"name":"uint256","nodeType":"ElementaryTypeName","src":"1382:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1381:9:39"},"scope":5298,"src":"1320:325:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5095,"nodeType":"Block","src":"1727:43:39","statements":[{"expression":{"arguments":[{"id":5090,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5082,"src":"1753:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5091,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5010,"src":"1756:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5092,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5084,"src":"1761:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5089,"name":"mulDivUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5124,"src":"1744:8:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":5093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1744:19:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5088,"id":5094,"nodeType":"Return","src":"1737:26:39"}]},"id":5096,"implemented":true,"kind":"function","modifiers":[],"name":"divUp","nameLocation":"1660:5:39","nodeType":"FunctionDefinition","parameters":{"id":5085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5082,"mutability":"mutable","name":"a","nameLocation":"1674:1:39","nodeType":"VariableDeclaration","scope":5096,"src":"1666:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5081,"name":"uint256","nodeType":"ElementaryTypeName","src":"1666:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5084,"mutability":"mutable","name":"b","nameLocation":"1685:1:39","nodeType":"VariableDeclaration","scope":5096,"src":"1677:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5083,"name":"uint256","nodeType":"ElementaryTypeName","src":"1677:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1665:22:39"},"returnParameters":{"id":5088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5087,"mutability":"mutable","name":"result","nameLocation":"1719:6:39","nodeType":"VariableDeclaration","scope":5096,"src":"1711:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5086,"name":"uint256","nodeType":"ElementaryTypeName","src":"1711:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1710:16:39"},"scope":5298,"src":"1651:119:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5123,"nodeType":"Block","src":"1912:774:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5108,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5103,"src":"2004:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5109,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2009:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2004:6:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5115,"nodeType":"IfStatement","src":"2000:58:39","trueBody":{"id":5114,"nodeType":"Block","src":"2012:46:39","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5111,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5007,"src":"2033:12:39","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2033:14:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5113,"nodeType":"RevertStatement","src":"2026:21:39"}]}},{"assignments":[5117],"declarations":[{"constant":false,"id":5117,"mutability":"mutable","name":"product","nameLocation":"2143:7:39","nodeType":"VariableDeclaration","scope":5123,"src":"2135:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5116,"name":"uint256","nodeType":"ElementaryTypeName","src":"2135:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5121,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5118,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5099,"src":"2153:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5119,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5101,"src":"2157:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2153:5:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2135:23:39"},{"AST":{"nativeSrc":"2585:95:39","nodeType":"YulBlock","src":"2585:95:39","statements":[{"nativeSrc":"2599:71:39","nodeType":"YulAssignment","src":"2599:71:39","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2627:7:39","nodeType":"YulIdentifier","src":"2627:7:39"}],"functionName":{"name":"iszero","nativeSrc":"2620:6:39","nodeType":"YulIdentifier","src":"2620:6:39"},"nativeSrc":"2620:15:39","nodeType":"YulFunctionCall","src":"2620:15:39"}],"functionName":{"name":"iszero","nativeSrc":"2613:6:39","nodeType":"YulIdentifier","src":"2613:6:39"},"nativeSrc":"2613:23:39","nodeType":"YulFunctionCall","src":"2613:23:39"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2650:7:39","nodeType":"YulIdentifier","src":"2650:7:39"},{"kind":"number","nativeSrc":"2659:1:39","nodeType":"YulLiteral","src":"2659:1:39","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"2646:3:39","nodeType":"YulIdentifier","src":"2646:3:39"},"nativeSrc":"2646:15:39","nodeType":"YulFunctionCall","src":"2646:15:39"},{"name":"c","nativeSrc":"2663:1:39","nodeType":"YulIdentifier","src":"2663:1:39"}],"functionName":{"name":"div","nativeSrc":"2642:3:39","nodeType":"YulIdentifier","src":"2642:3:39"},"nativeSrc":"2642:23:39","nodeType":"YulFunctionCall","src":"2642:23:39"},{"kind":"number","nativeSrc":"2667:1:39","nodeType":"YulLiteral","src":"2667:1:39","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"2638:3:39","nodeType":"YulIdentifier","src":"2638:3:39"},"nativeSrc":"2638:31:39","nodeType":"YulFunctionCall","src":"2638:31:39"}],"functionName":{"name":"mul","nativeSrc":"2609:3:39","nodeType":"YulIdentifier","src":"2609:3:39"},"nativeSrc":"2609:61:39","nodeType":"YulFunctionCall","src":"2609:61:39"},"variableNames":[{"name":"result","nativeSrc":"2599:6:39","nodeType":"YulIdentifier","src":"2599:6:39"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":5103,"isOffset":false,"isSlot":false,"src":"2663:1:39","valueSize":1},{"declaration":5117,"isOffset":false,"isSlot":false,"src":"2627:7:39","valueSize":1},{"declaration":5117,"isOffset":false,"isSlot":false,"src":"2650:7:39","valueSize":1},{"declaration":5106,"isOffset":false,"isSlot":false,"src":"2599:6:39","valueSize":1}],"flags":["memory-safe"],"id":5122,"nodeType":"InlineAssembly","src":"2560:120:39"}]},"documentation":{"id":5097,"nodeType":"StructuredDocumentation","src":"1776:41:39","text":"@dev Return (a * b) / c, rounding up."},"id":5124,"implemented":true,"kind":"function","modifiers":[],"name":"mulDivUp","nameLocation":"1831:8:39","nodeType":"FunctionDefinition","parameters":{"id":5104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5099,"mutability":"mutable","name":"a","nameLocation":"1848:1:39","nodeType":"VariableDeclaration","scope":5124,"src":"1840:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5098,"name":"uint256","nodeType":"ElementaryTypeName","src":"1840:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5101,"mutability":"mutable","name":"b","nameLocation":"1859:1:39","nodeType":"VariableDeclaration","scope":5124,"src":"1851:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5100,"name":"uint256","nodeType":"ElementaryTypeName","src":"1851:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5103,"mutability":"mutable","name":"c","nameLocation":"1870:1:39","nodeType":"VariableDeclaration","scope":5124,"src":"1862:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5102,"name":"uint256","nodeType":"ElementaryTypeName","src":"1862:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1839:33:39"},"returnParameters":{"id":5107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5106,"mutability":"mutable","name":"result","nameLocation":"1904:6:39","nodeType":"VariableDeclaration","scope":5124,"src":"1896:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5105,"name":"uint256","nodeType":"ElementaryTypeName","src":"1896:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1895:16:39"},"scope":5298,"src":"1822:864:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5143,"nodeType":"Block","src":"3159:345:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5134,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5129,"src":"3251:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3256:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3251:6:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5141,"nodeType":"IfStatement","src":"3247:58:39","trueBody":{"id":5140,"nodeType":"Block","src":"3259:46:39","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5137,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5007,"src":"3280:12:39","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3280:14:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5139,"nodeType":"RevertStatement","src":"3273:21:39"}]}},{"AST":{"nativeSrc":"3415:83:39","nodeType":"YulBlock","src":"3415:83:39","statements":[{"nativeSrc":"3429:59:39","nodeType":"YulAssignment","src":"3429:59:39","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3457:1:39","nodeType":"YulIdentifier","src":"3457:1:39"}],"functionName":{"name":"iszero","nativeSrc":"3450:6:39","nodeType":"YulIdentifier","src":"3450:6:39"},"nativeSrc":"3450:9:39","nodeType":"YulFunctionCall","src":"3450:9:39"}],"functionName":{"name":"iszero","nativeSrc":"3443:6:39","nodeType":"YulIdentifier","src":"3443:6:39"},"nativeSrc":"3443:17:39","nodeType":"YulFunctionCall","src":"3443:17:39"},{"arguments":[{"kind":"number","nativeSrc":"3466:1:39","nodeType":"YulLiteral","src":"3466:1:39","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3477:1:39","nodeType":"YulIdentifier","src":"3477:1:39"},{"kind":"number","nativeSrc":"3480:1:39","nodeType":"YulLiteral","src":"3480:1:39","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"3473:3:39","nodeType":"YulIdentifier","src":"3473:3:39"},"nativeSrc":"3473:9:39","nodeType":"YulFunctionCall","src":"3473:9:39"},{"name":"b","nativeSrc":"3484:1:39","nodeType":"YulIdentifier","src":"3484:1:39"}],"functionName":{"name":"div","nativeSrc":"3469:3:39","nodeType":"YulIdentifier","src":"3469:3:39"},"nativeSrc":"3469:17:39","nodeType":"YulFunctionCall","src":"3469:17:39"}],"functionName":{"name":"add","nativeSrc":"3462:3:39","nodeType":"YulIdentifier","src":"3462:3:39"},"nativeSrc":"3462:25:39","nodeType":"YulFunctionCall","src":"3462:25:39"}],"functionName":{"name":"mul","nativeSrc":"3439:3:39","nodeType":"YulIdentifier","src":"3439:3:39"},"nativeSrc":"3439:49:39","nodeType":"YulFunctionCall","src":"3439:49:39"},"variableNames":[{"name":"result","nativeSrc":"3429:6:39","nodeType":"YulIdentifier","src":"3429:6:39"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":5127,"isOffset":false,"isSlot":false,"src":"3457:1:39","valueSize":1},{"declaration":5127,"isOffset":false,"isSlot":false,"src":"3477:1:39","valueSize":1},{"declaration":5129,"isOffset":false,"isSlot":false,"src":"3484:1:39","valueSize":1},{"declaration":5132,"isOffset":false,"isSlot":false,"src":"3429:6:39","valueSize":1}],"flags":["memory-safe"],"id":5142,"nodeType":"InlineAssembly","src":"3390:108:39"}]},"documentation":{"id":5125,"nodeType":"StructuredDocumentation","src":"2692:383:39","text":" @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n This can occur in calculations with many successive multiplications and divisions, and\n we want to minimize the number of operations by avoiding unnecessary scaling by ONE."},"id":5144,"implemented":true,"kind":"function","modifiers":[],"name":"divUpRaw","nameLocation":"3089:8:39","nodeType":"FunctionDefinition","parameters":{"id":5130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5127,"mutability":"mutable","name":"a","nameLocation":"3106:1:39","nodeType":"VariableDeclaration","scope":5144,"src":"3098:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5126,"name":"uint256","nodeType":"ElementaryTypeName","src":"3098:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5129,"mutability":"mutable","name":"b","nameLocation":"3117:1:39","nodeType":"VariableDeclaration","scope":5144,"src":"3109:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5128,"name":"uint256","nodeType":"ElementaryTypeName","src":"3109:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3097:22:39"},"returnParameters":{"id":5133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5132,"mutability":"mutable","name":"result","nameLocation":"3151:6:39","nodeType":"VariableDeclaration","scope":5144,"src":"3143:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5131,"name":"uint256","nodeType":"ElementaryTypeName","src":"3143:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3142:16:39"},"scope":5298,"src":"3080:424:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5219,"nodeType":"Block","src":"3807:723:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5154,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5149,"src":"3975:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5155,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5010,"src":"3980:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3975:8:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5160,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5149,"src":"4028:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5161,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5015,"src":"4033:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4028:8:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5169,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5149,"src":"4093:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5170,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5020,"src":"4098:4:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4093:9:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5215,"nodeType":"Block","src":"4209:315:39","statements":[{"assignments":[5186],"declarations":[{"constant":false,"id":5186,"mutability":"mutable","name":"raw","nameLocation":"4231:3:39","nodeType":"VariableDeclaration","scope":5215,"src":"4223:11:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5185,"name":"uint256","nodeType":"ElementaryTypeName","src":"4223:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5192,"initialValue":{"arguments":[{"id":5189,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5147,"src":"4252:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5190,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5149,"src":"4255:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5187,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6654,"src":"4237:10:39","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$6654_$","typeString":"type(library LogExpMath)"}},"id":5188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4248:3:39","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":5557,"src":"4237:14:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4237:20:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4223:34:39"},{"assignments":[5194],"declarations":[{"constant":false,"id":5194,"mutability":"mutable","name":"maxError","nameLocation":"4279:8:39","nodeType":"VariableDeclaration","scope":5215,"src":"4271:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5193,"name":"uint256","nodeType":"ElementaryTypeName","src":"4271:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5201,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5196,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5186,"src":"4296:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5197,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5023,"src":"4301:22:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5195,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5060,"src":"4290:5:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4290:34:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":5199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4327:1:39","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4290:38:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4271:57:39"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5202,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5186,"src":"4347:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5203,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5194,"src":"4353:8:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4347:14:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5213,"nodeType":"Block","src":"4410:104:39","statements":[{"id":5212,"nodeType":"UncheckedBlock","src":"4428:72:39","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5208,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5186,"src":"4467:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":5209,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5194,"src":"4473:8:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4467:14:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5153,"id":5211,"nodeType":"Return","src":"4460:21:39"}]}]},"id":5214,"nodeType":"IfStatement","src":"4343:171:39","trueBody":{"id":5207,"nodeType":"Block","src":"4363:41:39","statements":[{"expression":{"hexValue":"30","id":5205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4388:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":5153,"id":5206,"nodeType":"Return","src":"4381:8:39"}]}}]},"id":5216,"nodeType":"IfStatement","src":"4089:435:39","trueBody":{"id":5184,"nodeType":"Block","src":"4104:99:39","statements":[{"assignments":[5173],"declarations":[{"constant":false,"id":5173,"mutability":"mutable","name":"square","nameLocation":"4126:6:39","nodeType":"VariableDeclaration","scope":5184,"src":"4118:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5172,"name":"uint256","nodeType":"ElementaryTypeName","src":"4118:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5178,"initialValue":{"arguments":[{"id":5175,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5147,"src":"4143:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5176,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5147,"src":"4146:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5174,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5043,"src":"4135:7:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4135:13:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4118:30:39"},{"expression":{"arguments":[{"id":5180,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5173,"src":"4177:6:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5181,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5173,"src":"4185:6:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5179,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5043,"src":"4169:7:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4169:23:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5153,"id":5183,"nodeType":"Return","src":"4162:30:39"}]}},"id":5217,"nodeType":"IfStatement","src":"4024:500:39","trueBody":{"id":5168,"nodeType":"Block","src":"4038:45:39","statements":[{"expression":{"arguments":[{"id":5164,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5147,"src":"4067:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5165,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5147,"src":"4070:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5163,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5043,"src":"4059:7:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4059:13:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5153,"id":5167,"nodeType":"Return","src":"4052:20:39"}]}},"id":5218,"nodeType":"IfStatement","src":"3971:553:39","trueBody":{"id":5159,"nodeType":"Block","src":"3985:33:39","statements":[{"expression":{"id":5157,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5147,"src":"4006:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5153,"id":5158,"nodeType":"Return","src":"3999:8:39"}]}}]},"documentation":{"id":5145,"nodeType":"StructuredDocumentation","src":"3510:221:39","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n the true value (that is, the error function expected - actual is always positive)."},"id":5220,"implemented":true,"kind":"function","modifiers":[],"name":"powDown","nameLocation":"3745:7:39","nodeType":"FunctionDefinition","parameters":{"id":5150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5147,"mutability":"mutable","name":"x","nameLocation":"3761:1:39","nodeType":"VariableDeclaration","scope":5220,"src":"3753:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5146,"name":"uint256","nodeType":"ElementaryTypeName","src":"3753:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5149,"mutability":"mutable","name":"y","nameLocation":"3772:1:39","nodeType":"VariableDeclaration","scope":5220,"src":"3764:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5148,"name":"uint256","nodeType":"ElementaryTypeName","src":"3764:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3752:22:39"},"returnParameters":{"id":5153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5152,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5220,"src":"3798:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5151,"name":"uint256","nodeType":"ElementaryTypeName","src":"3798:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3797:9:39"},"scope":5298,"src":"3736:794:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5286,"nodeType":"Block","src":"4829:568:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5230,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5225,"src":"4997:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5231,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5010,"src":"5002:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4997:8:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5236,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5225,"src":"5050:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5237,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5015,"src":"5055:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5050:8:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5245,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5225,"src":"5113:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5246,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5020,"src":"5118:4:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5113:9:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5282,"nodeType":"Block","src":"5225:166:39","statements":[{"assignments":[5262],"declarations":[{"constant":false,"id":5262,"mutability":"mutable","name":"raw","nameLocation":"5247:3:39","nodeType":"VariableDeclaration","scope":5282,"src":"5239:11:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5261,"name":"uint256","nodeType":"ElementaryTypeName","src":"5239:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5268,"initialValue":{"arguments":[{"id":5265,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5223,"src":"5268:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5266,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5225,"src":"5271:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5263,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6654,"src":"5253:10:39","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$6654_$","typeString":"type(library LogExpMath)"}},"id":5264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5264:3:39","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":5557,"src":"5253:14:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5253:20:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5239:34:39"},{"assignments":[5270],"declarations":[{"constant":false,"id":5270,"mutability":"mutable","name":"maxError","nameLocation":"5295:8:39","nodeType":"VariableDeclaration","scope":5282,"src":"5287:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5269,"name":"uint256","nodeType":"ElementaryTypeName","src":"5287:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5277,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5272,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5262,"src":"5312:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5273,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5023,"src":"5317:22:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5271,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5060,"src":"5306:5:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5306:34:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":5275,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5343:1:39","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5306:38:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5287:57:39"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5278,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5262,"src":"5366:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":5279,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5270,"src":"5372:8:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5366:14:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5229,"id":5281,"nodeType":"Return","src":"5359:21:39"}]},"id":5283,"nodeType":"IfStatement","src":"5109:282:39","trueBody":{"id":5260,"nodeType":"Block","src":"5124:95:39","statements":[{"assignments":[5249],"declarations":[{"constant":false,"id":5249,"mutability":"mutable","name":"square","nameLocation":"5146:6:39","nodeType":"VariableDeclaration","scope":5260,"src":"5138:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5248,"name":"uint256","nodeType":"ElementaryTypeName","src":"5138:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5254,"initialValue":{"arguments":[{"id":5251,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5223,"src":"5161:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5252,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5223,"src":"5164:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5250,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5060,"src":"5155:5:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5155:11:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5138:28:39"},{"expression":{"arguments":[{"id":5256,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5249,"src":"5193:6:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5257,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5249,"src":"5201:6:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5255,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5060,"src":"5187:5:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5187:21:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5229,"id":5259,"nodeType":"Return","src":"5180:28:39"}]}},"id":5284,"nodeType":"IfStatement","src":"5046:345:39","trueBody":{"id":5244,"nodeType":"Block","src":"5060:43:39","statements":[{"expression":{"arguments":[{"id":5240,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5223,"src":"5087:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5241,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5223,"src":"5090:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5239,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5060,"src":"5081:5:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5081:11:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5229,"id":5243,"nodeType":"Return","src":"5074:18:39"}]}},"id":5285,"nodeType":"IfStatement","src":"4993:398:39","trueBody":{"id":5235,"nodeType":"Block","src":"5007:33:39","statements":[{"expression":{"id":5233,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5223,"src":"5028:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5229,"id":5234,"nodeType":"Return","src":"5021:8:39"}]}}]},"documentation":{"id":5221,"nodeType":"StructuredDocumentation","src":"4536:219:39","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n the true value (that is, the error function expected - actual is always negative)."},"id":5287,"implemented":true,"kind":"function","modifiers":[],"name":"powUp","nameLocation":"4769:5:39","nodeType":"FunctionDefinition","parameters":{"id":5226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5223,"mutability":"mutable","name":"x","nameLocation":"4783:1:39","nodeType":"VariableDeclaration","scope":5287,"src":"4775:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5222,"name":"uint256","nodeType":"ElementaryTypeName","src":"4775:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5225,"mutability":"mutable","name":"y","nameLocation":"4794:1:39","nodeType":"VariableDeclaration","scope":5287,"src":"4786:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5224,"name":"uint256","nodeType":"ElementaryTypeName","src":"4786:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4774:22:39"},"returnParameters":{"id":5229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5228,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5287,"src":"4820:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5227,"name":"uint256","nodeType":"ElementaryTypeName","src":"4820:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4819:9:39"},"scope":5298,"src":"4760:637:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5296,"nodeType":"Block","src":"5750:175:39","statements":[{"AST":{"nativeSrc":"5857:62:39","nodeType":"YulBlock","src":"5857:62:39","statements":[{"nativeSrc":"5871:38:39","nodeType":"YulAssignment","src":"5871:38:39","value":{"arguments":[{"arguments":[{"name":"x","nativeSrc":"5888:1:39","nodeType":"YulIdentifier","src":"5888:1:39"},{"name":"ONE","nativeSrc":"5891:3:39","nodeType":"YulIdentifier","src":"5891:3:39"}],"functionName":{"name":"lt","nativeSrc":"5885:2:39","nodeType":"YulIdentifier","src":"5885:2:39"},"nativeSrc":"5885:10:39","nodeType":"YulFunctionCall","src":"5885:10:39"},{"arguments":[{"name":"ONE","nativeSrc":"5901:3:39","nodeType":"YulIdentifier","src":"5901:3:39"},{"name":"x","nativeSrc":"5906:1:39","nodeType":"YulIdentifier","src":"5906:1:39"}],"functionName":{"name":"sub","nativeSrc":"5897:3:39","nodeType":"YulIdentifier","src":"5897:3:39"},"nativeSrc":"5897:11:39","nodeType":"YulFunctionCall","src":"5897:11:39"}],"functionName":{"name":"mul","nativeSrc":"5881:3:39","nodeType":"YulIdentifier","src":"5881:3:39"},"nativeSrc":"5881:28:39","nodeType":"YulFunctionCall","src":"5881:28:39"},"variableNames":[{"name":"result","nativeSrc":"5871:6:39","nodeType":"YulIdentifier","src":"5871:6:39"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":5010,"isOffset":false,"isSlot":false,"src":"5891:3:39","valueSize":1},{"declaration":5010,"isOffset":false,"isSlot":false,"src":"5901:3:39","valueSize":1},{"declaration":5293,"isOffset":false,"isSlot":false,"src":"5871:6:39","valueSize":1},{"declaration":5290,"isOffset":false,"isSlot":false,"src":"5888:1:39","valueSize":1},{"declaration":5290,"isOffset":false,"isSlot":false,"src":"5906:1:39","valueSize":1}],"flags":["memory-safe"],"id":5295,"nodeType":"InlineAssembly","src":"5832:87:39"}]},"documentation":{"id":5288,"nodeType":"StructuredDocumentation","src":"5403:272:39","text":" @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n Useful when computing the complement for values with some level of relative error, as it strips this error and\n prevents intermediate negative values."},"id":5297,"implemented":true,"kind":"function","modifiers":[],"name":"complement","nameLocation":"5689:10:39","nodeType":"FunctionDefinition","parameters":{"id":5291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5290,"mutability":"mutable","name":"x","nameLocation":"5708:1:39","nodeType":"VariableDeclaration","scope":5297,"src":"5700:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5289,"name":"uint256","nodeType":"ElementaryTypeName","src":"5700:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5699:11:39"},"returnParameters":{"id":5294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5293,"mutability":"mutable","name":"result","nameLocation":"5742:6:39","nodeType":"VariableDeclaration","scope":5297,"src":"5734:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5292,"name":"uint256","nodeType":"ElementaryTypeName","src":"5734:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5733:16:39"},"scope":5298,"src":"5680:245:39","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":5299,"src":"239:5688:39","usedErrors":[5007],"usedEvents":[]}],"src":"46:5882:39"},"id":39},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","exportedSymbols":{"LogExpMath":[6654]},"id":6655,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":5300,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:40"},{"abstract":false,"baseContracts":[],"canonicalName":"LogExpMath","contractDependencies":[],"contractKind":"library","documentation":{"id":5301,"nodeType":"StructuredDocumentation","src":"79:515:40","text":" @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n exponentiation and logarithm (where the base is Euler's number).\n All math operations are unchecked in order to save gas.\n @author Fernando Martinelli - @fernandomartinelli\n @author Sergio Yuhjtman - @sergioyuhjtman\n @author Daniel Fernandez - @dmf7z"},"fullyImplemented":true,"id":6654,"linearizedBaseContracts":[6654],"name":"LogExpMath","nameLocation":"603:10:40","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":5302,"nodeType":"StructuredDocumentation","src":"620:79:40","text":"@notice This error is thrown when a base is not within an acceptable range."},"errorSelector":"022701e0","id":5304,"name":"BaseOutOfBounds","nameLocation":"710:15:40","nodeType":"ErrorDefinition","parameters":{"id":5303,"nodeType":"ParameterList","parameters":[],"src":"725:2:40"},"src":"704:24:40"},{"documentation":{"id":5305,"nodeType":"StructuredDocumentation","src":"734:83:40","text":"@notice This error is thrown when a exponent is not within an acceptable range."},"errorSelector":"d8317311","id":5307,"name":"ExponentOutOfBounds","nameLocation":"828:19:40","nodeType":"ErrorDefinition","parameters":{"id":5306,"nodeType":"ParameterList","parameters":[],"src":"847:2:40"},"src":"822:28:40"},{"documentation":{"id":5308,"nodeType":"StructuredDocumentation","src":"856:96:40","text":"@notice This error is thrown when the exponent * ln(base) is not within an acceptable range."},"errorSelector":"a2f9f7e3","id":5310,"name":"ProductOutOfBounds","nameLocation":"963:18:40","nodeType":"ErrorDefinition","parameters":{"id":5309,"nodeType":"ParameterList","parameters":[],"src":"981:2:40"},"src":"957:27:40"},{"documentation":{"id":5311,"nodeType":"StructuredDocumentation","src":"990:109:40","text":"@notice This error is thrown when an exponent used in the exp function is not within an acceptable range."},"errorSelector":"d4794efd","id":5313,"name":"InvalidExponent","nameLocation":"1110:15:40","nodeType":"ErrorDefinition","parameters":{"id":5312,"nodeType":"ParameterList","parameters":[],"src":"1125:2:40"},"src":"1104:24:40"},{"documentation":{"id":5314,"nodeType":"StructuredDocumentation","src":"1134:119:40","text":"@notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function."},"errorSelector":"b4120f14","id":5316,"name":"OutOfBounds","nameLocation":"1264:11:40","nodeType":"ErrorDefinition","parameters":{"id":5315,"nodeType":"ParameterList","parameters":[],"src":"1275:2:40"},"src":"1258:20:40"},{"constant":true,"id":5319,"mutability":"constant","name":"ONE_18","nameLocation":"1555:6:40","nodeType":"VariableDeclaration","scope":6654,"src":"1539:29:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5317,"name":"int256","nodeType":"ElementaryTypeName","src":"1539:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653138","id":5318,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1564:4:40","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":5322,"mutability":"constant","name":"ONE_20","nameLocation":"1745:6:40","nodeType":"VariableDeclaration","scope":6654,"src":"1729:29:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5320,"name":"int256","nodeType":"ElementaryTypeName","src":"1729:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653230","id":5321,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1754:4:40","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"1e20"},"visibility":"internal"},{"constant":true,"id":5325,"mutability":"constant","name":"ONE_36","nameLocation":"1780:6:40","nodeType":"VariableDeclaration","scope":6654,"src":"1764:29:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5323,"name":"int256","nodeType":"ElementaryTypeName","src":"1764:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653336","id":5324,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1789:4:40","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(29 digits omitted)...0000"},"value":"1e36"},"visibility":"internal"},{"constant":true,"id":5328,"mutability":"constant","name":"MAX_NATURAL_EXPONENT","nameLocation":"2326:20:40","nodeType":"VariableDeclaration","scope":6654,"src":"2310:45:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5326,"name":"int256","nodeType":"ElementaryTypeName","src":"2310:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313330653138","id":5327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2349:6:40","typeDescriptions":{"typeIdentifier":"t_rational_130000000000000000000_by_1","typeString":"int_const 130000000000000000000"},"value":"130e18"},"visibility":"internal"},{"constant":true,"id":5332,"mutability":"constant","name":"MIN_NATURAL_EXPONENT","nameLocation":"2377:20:40","nodeType":"VariableDeclaration","scope":6654,"src":"2361:45:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5329,"name":"int256","nodeType":"ElementaryTypeName","src":"2361:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"id":5331,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"2400:6:40","subExpression":{"hexValue":"3431653138","id":5330,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2401:5:40","typeDescriptions":{"typeIdentifier":"t_rational_41000000000000000000_by_1","typeString":"int_const 41000000000000000000"},"value":"41e18"},"typeDescriptions":{"typeIdentifier":"t_rational_minus_41000000000000000000_by_1","typeString":"int_const -41000000000000000000"}},"visibility":"internal"},{"constant":true,"id":5337,"mutability":"constant","name":"LN_36_LOWER_BOUND","nameLocation":"2573:17:40","nodeType":"VariableDeclaration","scope":6654,"src":"2557:49:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5333,"name":"int256","nodeType":"ElementaryTypeName","src":"2557:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5336,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5334,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"2593:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31653137","id":5335,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2602:4:40","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2593:13:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":5342,"mutability":"constant","name":"LN_36_UPPER_BOUND","nameLocation":"2628:17:40","nodeType":"VariableDeclaration","scope":6654,"src":"2612:49:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5338,"name":"int256","nodeType":"ElementaryTypeName","src":"2612:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5341,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5339,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"2648:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31653137","id":5340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2657:4:40","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2648:13:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":5352,"mutability":"constant","name":"MILD_EXPONENT_BOUND","nameLocation":"2685:19:40","nodeType":"VariableDeclaration","scope":6654,"src":"2668:65:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5343,"name":"uint256","nodeType":"ElementaryTypeName","src":"2668:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5351,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"},"id":5346,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":5344,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2707:1:40","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"323534","id":5345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2712:3:40","typeDescriptions":{"typeIdentifier":"t_rational_254_by_1","typeString":"int_const 254"},"value":"254"},"src":"2707:8:40","typeDescriptions":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"arguments":[{"id":5349,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"2726:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5348,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2718:7:40","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5347,"name":"uint256","nodeType":"ElementaryTypeName","src":"2718:7:40","typeDescriptions":{}}},"id":5350,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2718:15:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2707:26:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":5355,"mutability":"constant","name":"x0","nameLocation":"2784:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"2768:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5353,"name":"int256","nodeType":"ElementaryTypeName","src":"2768:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238303030303030303030303030303030303030","id":5354,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2789:21:40","typeDescriptions":{"typeIdentifier":"t_rational_128000000000000000000_by_1","typeString":"int_const 128000000000000000000"},"value":"128000000000000000000"},"visibility":"internal"},{"constant":true,"id":5358,"mutability":"constant","name":"a0","nameLocation":"2840:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"2824:77:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5356,"name":"int256","nodeType":"ElementaryTypeName","src":"2824:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3338383737303834303539393435393530393232323030303030303030303030303030303030303030303030303030303030303030303030","id":5357,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2845:56:40","typeDescriptions":{"typeIdentifier":"t_rational_38877084059945950922200000000000000000000000000000000000_by_1","typeString":"int_const 3887...(48 digits omitted)...0000"},"value":"38877084059945950922200000000000000000000000000000000000"},"visibility":"internal"},{"constant":true,"id":5361,"mutability":"constant","name":"x1","nameLocation":"2948:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"2932:41:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5359,"name":"int256","nodeType":"ElementaryTypeName","src":"2932:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3634303030303030303030303030303030303030","id":5360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2953:20:40","typeDescriptions":{"typeIdentifier":"t_rational_64000000000000000000_by_1","typeString":"int_const 64000000000000000000"},"value":"64000000000000000000"},"visibility":"internal"},{"constant":true,"id":5364,"mutability":"constant","name":"a1","nameLocation":"3003:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"2987:49:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5362,"name":"int256","nodeType":"ElementaryTypeName","src":"2987:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323335313439303830383131363136383832393130303030303030","id":5363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3008:28:40","typeDescriptions":{"typeIdentifier":"t_rational_6235149080811616882910000000_by_1","typeString":"int_const 6235149080811616882910000000"},"value":"6235149080811616882910000000"},"visibility":"internal"},{"constant":true,"id":5367,"mutability":"constant","name":"x2","nameLocation":"3112:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3096:43:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5365,"name":"int256","nodeType":"ElementaryTypeName","src":"3096:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"33323030303030303030303030303030303030303030","id":5366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3117:22:40","typeDescriptions":{"typeIdentifier":"t_rational_3200000000000000000000_by_1","typeString":"int_const 3200000000000000000000"},"value":"3200000000000000000000"},"visibility":"internal"},{"constant":true,"id":5370,"mutability":"constant","name":"a2","nameLocation":"3169:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3153:55:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5368,"name":"int256","nodeType":"ElementaryTypeName","src":"3153:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"37383936323936303138323638303639353136313030303030303030303030303030","id":5369,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3174:34:40","typeDescriptions":{"typeIdentifier":"t_rational_7896296018268069516100000000000000_by_1","typeString":"int_const 7896...(26 digits omitted)...0000"},"value":"7896296018268069516100000000000000"},"visibility":"internal"},{"constant":true,"id":5373,"mutability":"constant","name":"x3","nameLocation":"3241:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3225:43:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5371,"name":"int256","nodeType":"ElementaryTypeName","src":"3225:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31363030303030303030303030303030303030303030","id":5372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3246:22:40","typeDescriptions":{"typeIdentifier":"t_rational_1600000000000000000000_by_1","typeString":"int_const 1600000000000000000000"},"value":"1600000000000000000000"},"visibility":"internal"},{"constant":true,"id":5376,"mutability":"constant","name":"a3","nameLocation":"3298:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3282:48:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5374,"name":"int256","nodeType":"ElementaryTypeName","src":"3282:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383838363131303532303530373837323633363736303030303030","id":5375,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3303:27:40","typeDescriptions":{"typeIdentifier":"t_rational_888611052050787263676000000_by_1","typeString":"int_const 888611052050787263676000000"},"value":"888611052050787263676000000"},"visibility":"internal"},{"constant":true,"id":5379,"mutability":"constant","name":"x4","nameLocation":"3363:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3347:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5377,"name":"int256","nodeType":"ElementaryTypeName","src":"3347:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383030303030303030303030303030303030303030","id":5378,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3368:21:40","typeDescriptions":{"typeIdentifier":"t_rational_800000000000000000000_by_1","typeString":"int_const 800000000000000000000"},"value":"800000000000000000000"},"visibility":"internal"},{"constant":true,"id":5382,"mutability":"constant","name":"a4","nameLocation":"3419:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3403:45:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5380,"name":"int256","nodeType":"ElementaryTypeName","src":"3403:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323938303935373938373034313732383237343734303030","id":5381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3424:24:40","typeDescriptions":{"typeIdentifier":"t_rational_298095798704172827474000_by_1","typeString":"int_const 298095798704172827474000"},"value":"298095798704172827474000"},"visibility":"internal"},{"constant":true,"id":5385,"mutability":"constant","name":"x5","nameLocation":"3481:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3465:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5383,"name":"int256","nodeType":"ElementaryTypeName","src":"3465:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"343030303030303030303030303030303030303030","id":5384,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3486:21:40","typeDescriptions":{"typeIdentifier":"t_rational_400000000000000000000_by_1","typeString":"int_const 400000000000000000000"},"value":"400000000000000000000"},"visibility":"internal"},{"constant":true,"id":5388,"mutability":"constant","name":"a5","nameLocation":"3537:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3521:43:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5386,"name":"int256","nodeType":"ElementaryTypeName","src":"3521:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"35343539383135303033333134343233393037383130","id":5387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3542:22:40","typeDescriptions":{"typeIdentifier":"t_rational_5459815003314423907810_by_1","typeString":"int_const 5459815003314423907810"},"value":"5459815003314423907810"},"visibility":"internal"},{"constant":true,"id":5391,"mutability":"constant","name":"x6","nameLocation":"3597:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3581:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5389,"name":"int256","nodeType":"ElementaryTypeName","src":"3581:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323030303030303030303030303030303030303030","id":5390,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3602:21:40","typeDescriptions":{"typeIdentifier":"t_rational_200000000000000000000_by_1","typeString":"int_const 200000000000000000000"},"value":"200000000000000000000"},"visibility":"internal"},{"constant":true,"id":5394,"mutability":"constant","name":"a6","nameLocation":"3653:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3637:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5392,"name":"int256","nodeType":"ElementaryTypeName","src":"3637:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"373338393035363039383933303635303232373233","id":5393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3658:21:40","typeDescriptions":{"typeIdentifier":"t_rational_738905609893065022723_by_1","typeString":"int_const 738905609893065022723"},"value":"738905609893065022723"},"visibility":"internal"},{"constant":true,"id":5397,"mutability":"constant","name":"x7","nameLocation":"3712:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3696:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5395,"name":"int256","nodeType":"ElementaryTypeName","src":"3696:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313030303030303030303030303030303030303030","id":5396,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3717:21:40","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"100000000000000000000"},"visibility":"internal"},{"constant":true,"id":5400,"mutability":"constant","name":"a7","nameLocation":"3768:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3752:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5398,"name":"int256","nodeType":"ElementaryTypeName","src":"3752:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323731383238313832383435393034353233353336","id":5399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3773:21:40","typeDescriptions":{"typeIdentifier":"t_rational_271828182845904523536_by_1","typeString":"int_const 271828182845904523536"},"value":"271828182845904523536"},"visibility":"internal"},{"constant":true,"id":5403,"mutability":"constant","name":"x8","nameLocation":"3827:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3811:41:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5401,"name":"int256","nodeType":"ElementaryTypeName","src":"3811:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3530303030303030303030303030303030303030","id":5402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3832:20:40","typeDescriptions":{"typeIdentifier":"t_rational_50000000000000000000_by_1","typeString":"int_const 50000000000000000000"},"value":"50000000000000000000"},"visibility":"internal"},{"constant":true,"id":5406,"mutability":"constant","name":"a8","nameLocation":"3883:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3867:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5404,"name":"int256","nodeType":"ElementaryTypeName","src":"3867:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313634383732313237303730303132383134363835","id":5405,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3888:21:40","typeDescriptions":{"typeIdentifier":"t_rational_164872127070012814685_by_1","typeString":"int_const 164872127070012814685"},"value":"164872127070012814685"},"visibility":"internal"},{"constant":true,"id":5409,"mutability":"constant","name":"x9","nameLocation":"3942:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3926:41:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5407,"name":"int256","nodeType":"ElementaryTypeName","src":"3926:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3235303030303030303030303030303030303030","id":5408,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3947:20:40","typeDescriptions":{"typeIdentifier":"t_rational_25000000000000000000_by_1","typeString":"int_const 25000000000000000000"},"value":"25000000000000000000"},"visibility":"internal"},{"constant":true,"id":5412,"mutability":"constant","name":"a9","nameLocation":"3998:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3982:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5410,"name":"int256","nodeType":"ElementaryTypeName","src":"3982:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238343032353431363638373734313438343037","id":5411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4003:21:40","typeDescriptions":{"typeIdentifier":"t_rational_128402541668774148407_by_1","typeString":"int_const 128402541668774148407"},"value":"128402541668774148407"},"visibility":"internal"},{"constant":true,"id":5415,"mutability":"constant","name":"x10","nameLocation":"4057:3:40","nodeType":"VariableDeclaration","scope":6654,"src":"4041:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5413,"name":"int256","nodeType":"ElementaryTypeName","src":"4041:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3132353030303030303030303030303030303030","id":5414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4063:20:40","typeDescriptions":{"typeIdentifier":"t_rational_12500000000000000000_by_1","typeString":"int_const 12500000000000000000"},"value":"12500000000000000000"},"visibility":"internal"},{"constant":true,"id":5418,"mutability":"constant","name":"a10","nameLocation":"4114:3:40","nodeType":"VariableDeclaration","scope":6654,"src":"4098:43:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5416,"name":"int256","nodeType":"ElementaryTypeName","src":"4098:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313133333134383435333036363832363331363833","id":5417,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4120:21:40","typeDescriptions":{"typeIdentifier":"t_rational_113314845306682631683_by_1","typeString":"int_const 113314845306682631683"},"value":"113314845306682631683"},"visibility":"internal"},{"constant":true,"id":5421,"mutability":"constant","name":"x11","nameLocation":"4175:3:40","nodeType":"VariableDeclaration","scope":6654,"src":"4159:41:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5419,"name":"int256","nodeType":"ElementaryTypeName","src":"4159:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323530303030303030303030303030303030","id":5420,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4181:19:40","typeDescriptions":{"typeIdentifier":"t_rational_6250000000000000000_by_1","typeString":"int_const 6250000000000000000"},"value":"6250000000000000000"},"visibility":"internal"},{"constant":true,"id":5424,"mutability":"constant","name":"a11","nameLocation":"4231:3:40","nodeType":"VariableDeclaration","scope":6654,"src":"4215:43:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5422,"name":"int256","nodeType":"ElementaryTypeName","src":"4215:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313036343439343435383931373835393432393536","id":5423,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4237:21:40","typeDescriptions":{"typeIdentifier":"t_rational_106449445891785942956_by_1","typeString":"int_const 106449445891785942956"},"value":"106449445891785942956"},"visibility":"internal"},{"body":{"id":5556,"nodeType":"Block","src":"4563:2233:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5434,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5429,"src":"4577:1:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5435,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4582:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4577:6:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5443,"nodeType":"IfStatement","src":"4573:131:40","trueBody":{"id":5442,"nodeType":"Block","src":"4585:119:40","statements":[{"expression":{"arguments":[{"id":5439,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"4686:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5438,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4678:7:40","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5437,"name":"uint256","nodeType":"ElementaryTypeName","src":"4678:7:40","typeDescriptions":{}}},"id":5440,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4678:15:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5433,"id":5441,"nodeType":"Return","src":"4671:22:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5444,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5427,"src":"4718:1:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4723:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4718:6:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5450,"nodeType":"IfStatement","src":"4714:45:40","trueBody":{"id":5449,"nodeType":"Block","src":"4726:33:40","statements":[{"expression":{"hexValue":"30","id":5447,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4747:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":5433,"id":5448,"nodeType":"Return","src":"4740:8:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5451,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5427,"src":"5133:1:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":5452,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5138:3:40","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"5133:8:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":5454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5145:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5133:13:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5460,"nodeType":"IfStatement","src":"5129:68:40","trueBody":{"id":5459,"nodeType":"Block","src":"5148:49:40","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5456,"name":"BaseOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"5169:15:40","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5169:17:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5458,"nodeType":"RevertStatement","src":"5162:24:40"}]}},{"assignments":[5462],"declarations":[{"constant":false,"id":5462,"mutability":"mutable","name":"x_int256","nameLocation":"5213:8:40","nodeType":"VariableDeclaration","scope":5556,"src":"5206:15:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5461,"name":"int256","nodeType":"ElementaryTypeName","src":"5206:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5467,"initialValue":{"arguments":[{"id":5465,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5427,"src":"5231:1:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5464,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5224:6:40","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":5463,"name":"int256","nodeType":"ElementaryTypeName","src":"5224:6:40","typeDescriptions":{}}},"id":5466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5224:9:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5206:27:40"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5468,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5429,"src":"5591:1:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5469,"name":"MILD_EXPONENT_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5352,"src":"5596:19:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5591:24:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5475,"nodeType":"IfStatement","src":"5587:83:40","trueBody":{"id":5474,"nodeType":"Block","src":"5617:53:40","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5471,"name":"ExponentOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"5638:19:40","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5638:21:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5473,"nodeType":"RevertStatement","src":"5631:28:40"}]}},{"assignments":[5477],"declarations":[{"constant":false,"id":5477,"mutability":"mutable","name":"y_int256","nameLocation":"5686:8:40","nodeType":"VariableDeclaration","scope":5556,"src":"5679:15:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5476,"name":"int256","nodeType":"ElementaryTypeName","src":"5679:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5482,"initialValue":{"arguments":[{"id":5480,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5429,"src":"5704:1:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5479,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5697:6:40","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":5478,"name":"int256","nodeType":"ElementaryTypeName","src":"5697:6:40","typeDescriptions":{}}},"id":5481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5697:9:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5679:27:40"},{"assignments":[5484],"declarations":[{"constant":false,"id":5484,"mutability":"mutable","name":"logx_times_y","nameLocation":"5724:12:40","nodeType":"VariableDeclaration","scope":5556,"src":"5717:19:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5483,"name":"int256","nodeType":"ElementaryTypeName","src":"5717:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5485,"nodeType":"VariableDeclarationStatement","src":"5717:19:40"},{"id":5534,"nodeType":"UncheckedBlock","src":"5746:790:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5486,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5337,"src":"5774:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5487,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5462,"src":"5794:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5774:28:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5489,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5462,"src":"5806:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5490,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5342,"src":"5817:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5806:28:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5774:60:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5528,"nodeType":"Block","src":"6418:72:40","statements":[{"expression":{"id":5526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5520,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5484,"src":"6436:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5522,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5462,"src":"6455:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5521,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6498,"src":"6451:3:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6451:13:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5524,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5477,"src":"6467:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6451:24:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6436:39:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5527,"nodeType":"ExpressionStatement","src":"6436:39:40"}]},"id":5529,"nodeType":"IfStatement","src":"5770:720:40","trueBody":{"id":5519,"nodeType":"Block","src":"5836:576:40","statements":[{"assignments":[5494],"declarations":[{"constant":false,"id":5494,"mutability":"mutable","name":"ln_36_x","nameLocation":"5861:7:40","nodeType":"VariableDeclaration","scope":5519,"src":"5854:14:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5493,"name":"int256","nodeType":"ElementaryTypeName","src":"5854:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5498,"initialValue":{"arguments":[{"id":5496,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5462,"src":"5878:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5495,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6653,"src":"5871:6:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5871:16:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5854:33:40"},{"expression":{"id":5517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5499,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5484,"src":"6308:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5500,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5494,"src":"6325:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5501,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"6335:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6325:16:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5503,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6324:18:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5504,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5477,"src":"6345:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:29:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5506,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5494,"src":"6358:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":5507,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"6368:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6358:16:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5509,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6357:18:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5510,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5477,"src":"6378:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6357:29:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5512,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6356:31:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5513,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"6390:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6356:40:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:72:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5516,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6323:74:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6308:89:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5518,"nodeType":"ExpressionStatement","src":"6308:89:40"}]}},{"expression":{"id":5532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5530,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5484,"src":"6503:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":5531,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"6519:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6503:22:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5533,"nodeType":"ExpressionStatement","src":"6503:22:40"}]},{"condition":{"id":5543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6613:79:40","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5535,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5332,"src":"6615:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":5536,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5484,"src":"6639:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6615:36:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5538,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5484,"src":"6655:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":5539,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5328,"src":"6671:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6655:36:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6615:76:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5542,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6614:78:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5548,"nodeType":"IfStatement","src":"6609:137:40","trueBody":{"id":5547,"nodeType":"Block","src":"6694:52:40","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5544,"name":"ProductOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5310,"src":"6715:18:40","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6715:20:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5546,"nodeType":"RevertStatement","src":"6708:27:40"}]}},{"expression":{"arguments":[{"arguments":[{"id":5552,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5484,"src":"6775:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5551,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6004,"src":"6771:3:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6771:17:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5550,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6763:7:40","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5549,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:40","typeDescriptions":{}}},"id":5554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6763:26:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5433,"id":5555,"nodeType":"Return","src":"6756:33:40"}]},"documentation":{"id":5425,"nodeType":"StructuredDocumentation","src":"4277:214:40","text":" @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`."},"id":5557,"implemented":true,"kind":"function","modifiers":[],"name":"pow","nameLocation":"4505:3:40","nodeType":"FunctionDefinition","parameters":{"id":5430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5427,"mutability":"mutable","name":"x","nameLocation":"4517:1:40","nodeType":"VariableDeclaration","scope":5557,"src":"4509:9:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5426,"name":"uint256","nodeType":"ElementaryTypeName","src":"4509:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5429,"mutability":"mutable","name":"y","nameLocation":"4528:1:40","nodeType":"VariableDeclaration","scope":5557,"src":"4520:9:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5428,"name":"uint256","nodeType":"ElementaryTypeName","src":"4520:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4508:22:40"},"returnParameters":{"id":5433,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5432,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5557,"src":"4554:7:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5431,"name":"uint256","nodeType":"ElementaryTypeName","src":"4554:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4553:9:40"},"scope":6654,"src":"4496:2300:40","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6003,"nodeType":"Block","src":"7064:6082:40","statements":[{"condition":{"id":5573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7078:57:40","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5565,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"7080:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5566,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5332,"src":"7085:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7080:25:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5568,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"7109:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":5569,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5328,"src":"7114:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7109:25:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7080:54:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5572,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7079:56:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5578,"nodeType":"IfStatement","src":"7074:112:40","trueBody":{"id":5577,"nodeType":"Block","src":"7137:49:40","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5574,"name":"InvalidExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5313,"src":"7158:15:40","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7158:17:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5576,"nodeType":"RevertStatement","src":"7151:24:40"}]}},{"assignments":[5580],"declarations":[{"constant":false,"id":5580,"mutability":"mutable","name":"negativeExponent","nameLocation":"7277:16:40","nodeType":"VariableDeclaration","scope":6003,"src":"7272:21:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5579,"name":"bool","nodeType":"ElementaryTypeName","src":"7272:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5582,"initialValue":{"hexValue":"66616c7365","id":5581,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7296:5:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"7272:29:40"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5583,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"7316:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":5584,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7320:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7316:5:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5597,"nodeType":"IfStatement","src":"7312:417:40","trueBody":{"id":5596,"nodeType":"Block","src":"7323:406:40","statements":[{"id":5591,"nodeType":"UncheckedBlock","src":"7633:49:40","statements":[{"expression":{"id":5589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5586,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"7661:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"7665:2:40","subExpression":{"id":5587,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"7666:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7661:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5590,"nodeType":"ExpressionStatement","src":"7661:6:40"}]},{"expression":{"id":5594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5592,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5580,"src":"7695:16:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":5593,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7714:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"7695:23:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5595,"nodeType":"ExpressionStatement","src":"7695:23:40"}]}},{"assignments":[5599],"declarations":[{"constant":false,"id":5599,"mutability":"mutable","name":"firstAN","nameLocation":"9037:7:40","nodeType":"VariableDeclaration","scope":6003,"src":"9030:14:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5598,"name":"int256","nodeType":"ElementaryTypeName","src":"9030:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5600,"nodeType":"VariableDeclarationStatement","src":"9030:14:40"},{"id":5636,"nodeType":"UncheckedBlock","src":"9054:457:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5601,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"9082:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5602,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5355,"src":"9087:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9082:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5613,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"9171:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5614,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5361,"src":"9176:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9171:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5629,"nodeType":"Block","src":"9256:74:40","statements":[{"expression":{"id":5627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5625,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5599,"src":"9274:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":5626,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9284:1:40","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9274:11:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5628,"nodeType":"ExpressionStatement","src":"9274:11:40"}]},"id":5630,"nodeType":"IfStatement","src":"9167:163:40","trueBody":{"id":5624,"nodeType":"Block","src":"9180:70:40","statements":[{"expression":{"id":5618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5616,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"9198:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5617,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5361,"src":"9203:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9198:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5619,"nodeType":"ExpressionStatement","src":"9198:7:40"},{"expression":{"id":5622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5620,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5599,"src":"9223:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5621,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5364,"src":"9233:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9223:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5623,"nodeType":"ExpressionStatement","src":"9223:12:40"}]}},"id":5631,"nodeType":"IfStatement","src":"9078:252:40","trueBody":{"id":5612,"nodeType":"Block","src":"9091:70:40","statements":[{"expression":{"id":5606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5604,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"9109:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5605,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5355,"src":"9114:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9109:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5607,"nodeType":"ExpressionStatement","src":"9109:7:40"},{"expression":{"id":5610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5608,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5599,"src":"9134:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5609,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5358,"src":"9144:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9134:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5611,"nodeType":"ExpressionStatement","src":"9134:12:40"}]}},{"expression":{"id":5634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5632,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"9492:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":5633,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9497:3:40","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"9492:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5635,"nodeType":"ExpressionStatement","src":"9492:8:40"}]},{"assignments":[5638],"declarations":[{"constant":false,"id":5638,"mutability":"mutable","name":"product","nameLocation":"9730:7:40","nodeType":"VariableDeclaration","scope":6003,"src":"9723:14:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5637,"name":"int256","nodeType":"ElementaryTypeName","src":"9723:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5640,"initialValue":{"id":5639,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"9740:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"9723:23:40"},{"id":5785,"nodeType":"UncheckedBlock","src":"9757:957:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5641,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"9785:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5642,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5367,"src":"9790:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9785:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5658,"nodeType":"IfStatement","src":"9781:104:40","trueBody":{"id":5657,"nodeType":"Block","src":"9794:91:40","statements":[{"expression":{"id":5646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5644,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"9812:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5645,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5367,"src":"9817:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9812:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5647,"nodeType":"ExpressionStatement","src":"9812:7:40"},{"expression":{"id":5655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5648,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"9837:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5649,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"9848:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5650,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5370,"src":"9858:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9848:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5652,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9847:14:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5653,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"9864:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9847:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9837:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5656,"nodeType":"ExpressionStatement","src":"9837:33:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5659,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"9902:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5660,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5373,"src":"9907:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9902:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5676,"nodeType":"IfStatement","src":"9898:104:40","trueBody":{"id":5675,"nodeType":"Block","src":"9911:91:40","statements":[{"expression":{"id":5664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5662,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"9929:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5663,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5373,"src":"9934:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9929:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5665,"nodeType":"ExpressionStatement","src":"9929:7:40"},{"expression":{"id":5673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5666,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"9954:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5667,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"9965:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5668,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5376,"src":"9975:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9965:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5670,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9964:14:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5671,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"9981:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9964:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9954:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5674,"nodeType":"ExpressionStatement","src":"9954:33:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5677,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10019:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5678,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5379,"src":"10024:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10019:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5694,"nodeType":"IfStatement","src":"10015:104:40","trueBody":{"id":5693,"nodeType":"Block","src":"10028:91:40","statements":[{"expression":{"id":5682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5680,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10046:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5681,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5379,"src":"10051:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10046:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5683,"nodeType":"ExpressionStatement","src":"10046:7:40"},{"expression":{"id":5691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5684,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10071:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5685,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10082:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5686,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"10092:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10082:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5688,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10081:14:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5689,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"10098:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10081:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10071:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5692,"nodeType":"ExpressionStatement","src":"10071:33:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5695,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10136:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5696,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5385,"src":"10141:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10136:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5712,"nodeType":"IfStatement","src":"10132:104:40","trueBody":{"id":5711,"nodeType":"Block","src":"10145:91:40","statements":[{"expression":{"id":5700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5698,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10163:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5699,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5385,"src":"10168:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10163:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5701,"nodeType":"ExpressionStatement","src":"10163:7:40"},{"expression":{"id":5709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5702,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10188:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5703,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10199:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5704,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5388,"src":"10209:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10199:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5706,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10198:14:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5707,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"10215:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10198:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10188:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5710,"nodeType":"ExpressionStatement","src":"10188:33:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5713,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10253:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5714,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5391,"src":"10258:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10253:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5730,"nodeType":"IfStatement","src":"10249:104:40","trueBody":{"id":5729,"nodeType":"Block","src":"10262:91:40","statements":[{"expression":{"id":5718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5716,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10280:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5717,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5391,"src":"10285:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10280:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5719,"nodeType":"ExpressionStatement","src":"10280:7:40"},{"expression":{"id":5727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5720,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10305:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5721,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10316:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5722,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5394,"src":"10326:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10316:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5724,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10315:14:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5725,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"10332:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10315:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10305:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5728,"nodeType":"ExpressionStatement","src":"10305:33:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5731,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10370:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5732,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5397,"src":"10375:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10370:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5748,"nodeType":"IfStatement","src":"10366:104:40","trueBody":{"id":5747,"nodeType":"Block","src":"10379:91:40","statements":[{"expression":{"id":5736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5734,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10397:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5735,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5397,"src":"10402:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10397:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5737,"nodeType":"ExpressionStatement","src":"10397:7:40"},{"expression":{"id":5745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5738,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10422:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5739,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10433:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5740,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5400,"src":"10443:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10433:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5742,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10432:14:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5743,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"10449:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10432:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10422:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5746,"nodeType":"ExpressionStatement","src":"10422:33:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5749,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10487:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5750,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5403,"src":"10492:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10487:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5766,"nodeType":"IfStatement","src":"10483:104:40","trueBody":{"id":5765,"nodeType":"Block","src":"10496:91:40","statements":[{"expression":{"id":5754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5752,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10514:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5753,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5403,"src":"10519:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10514:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5755,"nodeType":"ExpressionStatement","src":"10514:7:40"},{"expression":{"id":5763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5756,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10539:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5757,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10550:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5758,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5406,"src":"10560:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10550:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5760,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10549:14:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5761,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"10566:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10549:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10539:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5764,"nodeType":"ExpressionStatement","src":"10539:33:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5767,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10604:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5768,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5409,"src":"10609:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10604:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5784,"nodeType":"IfStatement","src":"10600:104:40","trueBody":{"id":5783,"nodeType":"Block","src":"10613:91:40","statements":[{"expression":{"id":5772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5770,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10631:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5771,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5409,"src":"10636:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10631:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5773,"nodeType":"ExpressionStatement","src":"10631:7:40"},{"expression":{"id":5781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5774,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10656:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5775,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10667:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5776,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5412,"src":"10677:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10667:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5778,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10666:14:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5779,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"10683:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10666:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10656:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5782,"nodeType":"ExpressionStatement","src":"10656:33:40"}]}}]},{"assignments":[5787],"declarations":[{"constant":false,"id":5787,"mutability":"mutable","name":"seriesSum","nameLocation":"11025:9:40","nodeType":"VariableDeclaration","scope":6003,"src":"11018:16:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5786,"name":"int256","nodeType":"ElementaryTypeName","src":"11018:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5789,"initialValue":{"id":5788,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"11037:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"11018:25:40"},{"assignments":[5791],"declarations":[{"constant":false,"id":5791,"mutability":"mutable","name":"term","nameLocation":"11115:4:40","nodeType":"VariableDeclaration","scope":6003,"src":"11108:11:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5790,"name":"int256","nodeType":"ElementaryTypeName","src":"11108:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5792,"nodeType":"VariableDeclarationStatement","src":"11108:11:40"},{"expression":{"id":5795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5793,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11228:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5794,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"11235:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11228:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5796,"nodeType":"ExpressionStatement","src":"11228:8:40"},{"id":6002,"nodeType":"UncheckedBlock","src":"11246:1894:40","statements":[{"expression":{"id":5799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5797,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"11270:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5798,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11283:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11270:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5800,"nodeType":"ExpressionStatement","src":"11270:17:40"},{"expression":{"id":5811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5801,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11536:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5802,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11545:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5803,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"11552:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11545:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5805,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11544:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5806,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"11557:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11544:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5808,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11543:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":5809,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11567:1:40","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11543:25:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11536:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5812,"nodeType":"ExpressionStatement","src":"11536:32:40"},{"expression":{"id":5815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5813,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"11582:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5814,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11595:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11582:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5816,"nodeType":"ExpressionStatement","src":"11582:17:40"},{"expression":{"id":5827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5817,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11614:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5818,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11623:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5819,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"11630:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11623:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5821,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11622:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5822,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"11635:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11622:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5824,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11621:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":5825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11645:1:40","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"11621:25:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11614:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5828,"nodeType":"ExpressionStatement","src":"11614:32:40"},{"expression":{"id":5831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5829,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"11660:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5830,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11673:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11660:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5832,"nodeType":"ExpressionStatement","src":"11660:17:40"},{"expression":{"id":5843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5833,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11692:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5834,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11701:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5835,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"11708:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11701:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5837,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11700:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5838,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"11713:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11700:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5840,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11699:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"34","id":5841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11723:1:40","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11699:25:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11692:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5844,"nodeType":"ExpressionStatement","src":"11692:32:40"},{"expression":{"id":5847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5845,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"11738:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5846,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11751:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11738:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5848,"nodeType":"ExpressionStatement","src":"11738:17:40"},{"expression":{"id":5859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5849,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11770:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5850,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11779:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5851,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"11786:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11779:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5853,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11778:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5854,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"11791:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11778:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5856,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11777:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":5857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11801:1:40","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"11777:25:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11770:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5860,"nodeType":"ExpressionStatement","src":"11770:32:40"},{"expression":{"id":5863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5861,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"11816:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5862,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11829:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11816:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5864,"nodeType":"ExpressionStatement","src":"11816:17:40"},{"expression":{"id":5875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5865,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11848:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5866,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11857:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5867,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"11864:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11857:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5869,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11856:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5870,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"11869:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11856:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5872,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11855:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"36","id":5873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11879:1:40","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"11855:25:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11848:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5876,"nodeType":"ExpressionStatement","src":"11848:32:40"},{"expression":{"id":5879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5877,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"11894:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5878,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11907:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11894:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5880,"nodeType":"ExpressionStatement","src":"11894:17:40"},{"expression":{"id":5891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5881,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11926:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5882,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11935:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5883,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"11942:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11935:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5885,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11934:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5886,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"11947:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11934:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5888,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11933:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":5889,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11957:1:40","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"11933:25:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11926:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5892,"nodeType":"ExpressionStatement","src":"11926:32:40"},{"expression":{"id":5895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5893,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"11972:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5894,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11985:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11972:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5896,"nodeType":"ExpressionStatement","src":"11972:17:40"},{"expression":{"id":5907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5897,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12004:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5898,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12013:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5899,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"12020:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12013:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5901,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12012:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5902,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"12025:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12012:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5904,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12011:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"38","id":5905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12035:1:40","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12011:25:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12004:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5908,"nodeType":"ExpressionStatement","src":"12004:32:40"},{"expression":{"id":5911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5909,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"12050:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5910,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12063:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12050:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5912,"nodeType":"ExpressionStatement","src":"12050:17:40"},{"expression":{"id":5923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5913,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12082:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5914,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12091:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5915,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"12098:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12091:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5917,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12090:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5918,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"12103:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12090:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5920,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12089:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":5921,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12113:1:40","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"12089:25:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12082:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5924,"nodeType":"ExpressionStatement","src":"12082:32:40"},{"expression":{"id":5927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5925,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"12128:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5926,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12141:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12128:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5928,"nodeType":"ExpressionStatement","src":"12128:17:40"},{"expression":{"id":5939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5929,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12160:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5930,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12169:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5931,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"12176:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12169:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5933,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12168:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5934,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"12181:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12168:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5936,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12167:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":5937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12191:2:40","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"12167:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12160:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5940,"nodeType":"ExpressionStatement","src":"12160:33:40"},{"expression":{"id":5943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5941,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"12207:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5942,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12220:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12207:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5944,"nodeType":"ExpressionStatement","src":"12207:17:40"},{"expression":{"id":5955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5945,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12239:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5946,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12248:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5947,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"12255:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12248:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5949,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12247:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5950,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"12260:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12247:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5952,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12246:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":5953,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12270:2:40","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"12246:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12239:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5956,"nodeType":"ExpressionStatement","src":"12239:33:40"},{"expression":{"id":5959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5957,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"12286:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5958,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12299:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12286:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5960,"nodeType":"ExpressionStatement","src":"12286:17:40"},{"expression":{"id":5971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5961,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12318:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5962,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12327:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5963,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"12334:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12327:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5965,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12326:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5966,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"12339:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12326:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5968,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12325:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3132","id":5969,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12349:2:40","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"12"},"src":"12325:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12318:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5972,"nodeType":"ExpressionStatement","src":"12318:33:40"},{"expression":{"id":5975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5973,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"12365:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5974,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12378:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12365:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5976,"nodeType":"ExpressionStatement","src":"12365:17:40"},{"assignments":[5978],"declarations":[{"constant":false,"id":5978,"mutability":"mutable","name":"result","nameLocation":"12914:6:40","nodeType":"VariableDeclaration","scope":6002,"src":"12907:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5977,"name":"int256","nodeType":"ElementaryTypeName","src":"12907:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5991,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5979,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"12926:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5980,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"12936:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12926:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5982,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12925:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5983,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"12949:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12925:30:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5985,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12924:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5986,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5599,"src":"12959:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12924:42:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5988,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12923:44:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":5989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12970:3:40","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"12923:50:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"12907:66:40"},{"expression":{"condition":{"id":5992,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5580,"src":"13075:16:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":5999,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5978,"src":"13123:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"13075:54:40","trueExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5995,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5993,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"13095:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5994,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"13104:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13095:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5996,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"13094:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5997,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5978,"src":"13114:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13094:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5564,"id":6001,"nodeType":"Return","src":"13068:61:40"}]}]},"documentation":{"id":5558,"nodeType":"StructuredDocumentation","src":"6802:203:40","text":" @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`."},"id":6004,"implemented":true,"kind":"function","modifiers":[],"name":"exp","nameLocation":"7019:3:40","nodeType":"FunctionDefinition","parameters":{"id":5561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5560,"mutability":"mutable","name":"x","nameLocation":"7030:1:40","nodeType":"VariableDeclaration","scope":6004,"src":"7023:8:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5559,"name":"int256","nodeType":"ElementaryTypeName","src":"7023:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7022:10:40"},"returnParameters":{"id":5564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5563,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6004,"src":"7056:6:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5562,"name":"int256","nodeType":"ElementaryTypeName","src":"7056:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7055:8:40"},"scope":6654,"src":"7010:6136:40","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6077,"nodeType":"Block","src":"13315:861:40","statements":[{"assignments":[6015],"declarations":[{"constant":false,"id":6015,"mutability":"mutable","name":"logBase","nameLocation":"13552:7:40","nodeType":"VariableDeclaration","scope":6077,"src":"13545:14:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6014,"name":"int256","nodeType":"ElementaryTypeName","src":"13545:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6016,"nodeType":"VariableDeclarationStatement","src":"13545:14:40"},{"id":6041,"nodeType":"UncheckedBlock","src":"13569:214:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6017,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5337,"src":"13597:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6018,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6009,"src":"13617:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13597:24:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6020,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6009,"src":"13625:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6021,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5342,"src":"13632:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13625:24:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13597:52:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6039,"nodeType":"Block","src":"13712:61:40","statements":[{"expression":{"id":6037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6031,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6015,"src":"13730:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6033,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6009,"src":"13744:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6032,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6498,"src":"13740:3:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":6034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13740:9:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6035,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"13752:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13740:18:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13730:28:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6038,"nodeType":"ExpressionStatement","src":"13730:28:40"}]},"id":6040,"nodeType":"IfStatement","src":"13593:180:40","trueBody":{"id":6030,"nodeType":"Block","src":"13651:55:40","statements":[{"expression":{"id":6028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6024,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6015,"src":"13669:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6026,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6009,"src":"13686:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6025,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6653,"src":"13679:6:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":6027,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13679:12:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13669:22:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6029,"nodeType":"ExpressionStatement","src":"13669:22:40"}]}}]},{"assignments":[6043],"declarations":[{"constant":false,"id":6043,"mutability":"mutable","name":"logArg","nameLocation":"13800:6:40","nodeType":"VariableDeclaration","scope":6077,"src":"13793:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6042,"name":"int256","nodeType":"ElementaryTypeName","src":"13793:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6044,"nodeType":"VariableDeclarationStatement","src":"13793:13:40"},{"id":6076,"nodeType":"UncheckedBlock","src":"13816:354:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6045,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5337,"src":"13844:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6046,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6007,"src":"13864:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13844:23:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6048,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6007,"src":"13871:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6049,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5342,"src":"13877:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13871:23:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13844:50:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6067,"nodeType":"Block","src":"13955:59:40","statements":[{"expression":{"id":6065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6059,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6043,"src":"13973:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6061,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6007,"src":"13986:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6060,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6498,"src":"13982:3:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":6062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13982:8:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6063,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"13993:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13982:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13973:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6066,"nodeType":"ExpressionStatement","src":"13973:26:40"}]},"id":6068,"nodeType":"IfStatement","src":"13840:174:40","trueBody":{"id":6058,"nodeType":"Block","src":"13896:53:40","statements":[{"expression":{"id":6056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6052,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6043,"src":"13914:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6054,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6007,"src":"13930:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6053,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6653,"src":"13923:6:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":6055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13923:11:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13914:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6057,"nodeType":"ExpressionStatement","src":"13914:20:40"}]}},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6069,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6043,"src":"14133:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6070,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"14142:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14133:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6072,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14132:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6073,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6015,"src":"14152:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14132:27:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":6013,"id":6075,"nodeType":"Return","src":"14125:34:40"}]}]},"documentation":{"id":6005,"nodeType":"StructuredDocumentation","src":"13152:89:40","text":"@dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument."},"id":6078,"implemented":true,"kind":"function","modifiers":[],"name":"log","nameLocation":"13255:3:40","nodeType":"FunctionDefinition","parameters":{"id":6010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6007,"mutability":"mutable","name":"arg","nameLocation":"13266:3:40","nodeType":"VariableDeclaration","scope":6078,"src":"13259:10:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6006,"name":"int256","nodeType":"ElementaryTypeName","src":"13259:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":6009,"mutability":"mutable","name":"base","nameLocation":"13278:4:40","nodeType":"VariableDeclaration","scope":6078,"src":"13271:11:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6008,"name":"int256","nodeType":"ElementaryTypeName","src":"13271:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13258:25:40"},"returnParameters":{"id":6013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6012,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6078,"src":"13307:6:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6011,"name":"int256","nodeType":"ElementaryTypeName","src":"13307:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13306:8:40"},"scope":6654,"src":"13246:930:40","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6115,"nodeType":"Block","src":"14319:353:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6086,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6081,"src":"14416:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"30","id":6087,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14421:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14416:6:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6093,"nodeType":"IfStatement","src":"14412:57:40","trueBody":{"id":6092,"nodeType":"Block","src":"14424:45:40","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6089,"name":"OutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5316,"src":"14445:11:40","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14445:13:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6091,"nodeType":"RevertStatement","src":"14438:20:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6094,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5337,"src":"14482:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6095,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6081,"src":"14502:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14482:21:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6097,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6081,"src":"14507:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6098,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5342,"src":"14511:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14507:21:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14482:46:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6113,"nodeType":"Block","src":"14628:38:40","statements":[{"expression":{"arguments":[{"id":6110,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6081,"src":"14653:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6109,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6498,"src":"14649:3:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":6111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14649:6:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":6085,"id":6112,"nodeType":"Return","src":"14642:13:40"}]},"id":6114,"nodeType":"IfStatement","src":"14478:188:40","trueBody":{"id":6108,"nodeType":"Block","src":"14530:92:40","statements":[{"id":6107,"nodeType":"UncheckedBlock","src":"14544:68:40","statements":[{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6102,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6081,"src":"14586:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6101,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6653,"src":"14579:6:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":6103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14579:9:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6104,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"14591:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14579:18:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":6085,"id":6106,"nodeType":"Return","src":"14572:25:40"}]}]}}]},"documentation":{"id":6079,"nodeType":"StructuredDocumentation","src":"14182:79:40","text":"@dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":6116,"implemented":true,"kind":"function","modifiers":[],"name":"ln","nameLocation":"14275:2:40","nodeType":"FunctionDefinition","parameters":{"id":6082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6081,"mutability":"mutable","name":"a","nameLocation":"14285:1:40","nodeType":"VariableDeclaration","scope":6116,"src":"14278:8:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6080,"name":"int256","nodeType":"ElementaryTypeName","src":"14278:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14277:10:40"},"returnParameters":{"id":6085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6084,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6116,"src":"14311:6:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6083,"name":"int256","nodeType":"ElementaryTypeName","src":"14311:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14310:8:40"},"scope":6654,"src":"14266:406:40","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6497,"nodeType":"Block","src":"14824:5531:40","statements":[{"assignments":[6125],"declarations":[{"constant":false,"id":6125,"mutability":"mutable","name":"negativeExponent","nameLocation":"14915:16:40","nodeType":"VariableDeclaration","scope":6497,"src":"14910:21:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6124,"name":"bool","nodeType":"ElementaryTypeName","src":"14910:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":6127,"initialValue":{"hexValue":"66616c7365","id":6126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14934:5:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"14910:29:40"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6128,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"14954:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6129,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"14958:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14954:10:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6146,"nodeType":"IfStatement","src":"14950:381:40","trueBody":{"id":6145,"nodeType":"Block","src":"14966:365:40","statements":[{"id":6140,"nodeType":"UncheckedBlock","src":"15216:68:40","statements":[{"expression":{"id":6138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6131,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"15244:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6134,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":6132,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"15249:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6133,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"15258:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15249:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6135,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"15248:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6136,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"15268:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15248:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15244:25:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6139,"nodeType":"ExpressionStatement","src":"15244:25:40"}]},{"expression":{"id":6143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6141,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6125,"src":"15297:16:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":6142,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15316:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"15297:23:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6144,"nodeType":"ExpressionStatement","src":"15297:23:40"}]}},{"assignments":[6148],"declarations":[{"constant":false,"id":6148,"mutability":"mutable","name":"sum","nameLocation":"16663:3:40","nodeType":"VariableDeclaration","scope":6497,"src":"16656:10:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6147,"name":"int256","nodeType":"ElementaryTypeName","src":"16656:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6150,"initialValue":{"hexValue":"30","id":6149,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16669:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16656:14:40"},{"id":6369,"nodeType":"UncheckedBlock","src":"16680:1674:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6151,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"16708:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6154,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":6152,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5358,"src":"16713:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6153,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"16718:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16713:11:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16708:16:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6165,"nodeType":"IfStatement","src":"16704:126:40","trueBody":{"id":6164,"nodeType":"Block","src":"16726:104:40","statements":[{"expression":{"id":6158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6156,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"16744:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":6157,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5358,"src":"16749:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16744:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6159,"nodeType":"ExpressionStatement","src":"16744:7:40"},{"expression":{"id":6162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6160,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"16806:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6161,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5355,"src":"16813:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16806:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6163,"nodeType":"ExpressionStatement","src":"16806:9:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6166,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"16848:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6169,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":6167,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5364,"src":"16853:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6168,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"16858:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16853:11:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16848:16:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6180,"nodeType":"IfStatement","src":"16844:126:40","trueBody":{"id":6179,"nodeType":"Block","src":"16866:104:40","statements":[{"expression":{"id":6173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6171,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"16884:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":6172,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5364,"src":"16889:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16884:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6174,"nodeType":"ExpressionStatement","src":"16884:7:40"},{"expression":{"id":6177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6175,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"16946:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6176,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5361,"src":"16953:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16946:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6178,"nodeType":"ExpressionStatement","src":"16946:9:40"}]}},{"expression":{"id":6183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6181,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"17109:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":6182,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17116:3:40","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17109:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6184,"nodeType":"ExpressionStatement","src":"17109:10:40"},{"expression":{"id":6187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6185,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17133:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":6186,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17138:3:40","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17133:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6188,"nodeType":"ExpressionStatement","src":"17133:8:40"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6189,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17276:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6190,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5370,"src":"17281:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17276:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6206,"nodeType":"IfStatement","src":"17272:94:40","trueBody":{"id":6205,"nodeType":"Block","src":"17285:81:40","statements":[{"expression":{"id":6199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6192,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17303:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6193,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17308:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6194,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"17312:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17308:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6196,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17307:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6197,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5370,"src":"17322:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17307:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17303:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6200,"nodeType":"ExpressionStatement","src":"17303:21:40"},{"expression":{"id":6203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6201,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"17342:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6202,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5367,"src":"17349:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17342:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6204,"nodeType":"ExpressionStatement","src":"17342:9:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6207,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17384:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6208,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5376,"src":"17389:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17384:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6224,"nodeType":"IfStatement","src":"17380:94:40","trueBody":{"id":6223,"nodeType":"Block","src":"17393:81:40","statements":[{"expression":{"id":6217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6210,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17411:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6211,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17416:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6212,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"17420:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17416:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6214,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17415:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6215,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5376,"src":"17430:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17415:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17411:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6218,"nodeType":"ExpressionStatement","src":"17411:21:40"},{"expression":{"id":6221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6219,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"17450:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6220,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5373,"src":"17457:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17450:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6222,"nodeType":"ExpressionStatement","src":"17450:9:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6225,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17492:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6226,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"17497:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17492:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6242,"nodeType":"IfStatement","src":"17488:94:40","trueBody":{"id":6241,"nodeType":"Block","src":"17501:81:40","statements":[{"expression":{"id":6235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6228,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17519:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6229,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17524:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6230,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"17528:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17524:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6232,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17523:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6233,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"17538:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17523:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17519:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6236,"nodeType":"ExpressionStatement","src":"17519:21:40"},{"expression":{"id":6239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6237,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"17558:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6238,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5379,"src":"17565:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17558:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6240,"nodeType":"ExpressionStatement","src":"17558:9:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6243,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17600:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6244,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5388,"src":"17605:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17600:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6260,"nodeType":"IfStatement","src":"17596:94:40","trueBody":{"id":6259,"nodeType":"Block","src":"17609:81:40","statements":[{"expression":{"id":6253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6246,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17627:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6247,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17632:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6248,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"17636:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17632:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6250,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17631:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6251,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5388,"src":"17646:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17631:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17627:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6254,"nodeType":"ExpressionStatement","src":"17627:21:40"},{"expression":{"id":6257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6255,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"17666:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6256,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5385,"src":"17673:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17666:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6258,"nodeType":"ExpressionStatement","src":"17666:9:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6261,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17708:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6262,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5394,"src":"17713:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17708:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6278,"nodeType":"IfStatement","src":"17704:94:40","trueBody":{"id":6277,"nodeType":"Block","src":"17717:81:40","statements":[{"expression":{"id":6271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6264,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17735:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6265,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17740:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6266,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"17744:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17740:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6268,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17739:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6269,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5394,"src":"17754:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17739:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17735:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6272,"nodeType":"ExpressionStatement","src":"17735:21:40"},{"expression":{"id":6275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6273,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"17774:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6274,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5391,"src":"17781:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17774:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6276,"nodeType":"ExpressionStatement","src":"17774:9:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6279,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17816:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6280,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5400,"src":"17821:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17816:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6296,"nodeType":"IfStatement","src":"17812:94:40","trueBody":{"id":6295,"nodeType":"Block","src":"17825:81:40","statements":[{"expression":{"id":6289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6282,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17843:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6283,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17848:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6284,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"17852:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17848:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6286,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17847:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6287,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5400,"src":"17862:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17847:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17843:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6290,"nodeType":"ExpressionStatement","src":"17843:21:40"},{"expression":{"id":6293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6291,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"17882:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6292,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5397,"src":"17889:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17882:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6294,"nodeType":"ExpressionStatement","src":"17882:9:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6297,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17924:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6298,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5406,"src":"17929:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17924:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6314,"nodeType":"IfStatement","src":"17920:94:40","trueBody":{"id":6313,"nodeType":"Block","src":"17933:81:40","statements":[{"expression":{"id":6307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6300,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17951:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6301,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17956:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6302,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"17960:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17956:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6304,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17955:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6305,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5406,"src":"17970:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17955:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17951:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6308,"nodeType":"ExpressionStatement","src":"17951:21:40"},{"expression":{"id":6311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6309,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"17990:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6310,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5403,"src":"17997:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17990:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6312,"nodeType":"ExpressionStatement","src":"17990:9:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6315,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18032:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6316,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5412,"src":"18037:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18032:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6332,"nodeType":"IfStatement","src":"18028:94:40","trueBody":{"id":6331,"nodeType":"Block","src":"18041:81:40","statements":[{"expression":{"id":6325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6318,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18059:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6319,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18064:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6320,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"18068:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18064:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6322,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18063:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6323,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5412,"src":"18078:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18063:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18059:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6326,"nodeType":"ExpressionStatement","src":"18059:21:40"},{"expression":{"id":6329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6327,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"18098:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6328,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5409,"src":"18105:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18098:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6330,"nodeType":"ExpressionStatement","src":"18098:9:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6333,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18140:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6334,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5418,"src":"18145:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18140:8:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6350,"nodeType":"IfStatement","src":"18136:97:40","trueBody":{"id":6349,"nodeType":"Block","src":"18150:83:40","statements":[{"expression":{"id":6343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6336,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18168:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6337,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18173:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6338,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"18177:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18173:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6340,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18172:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6341,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5418,"src":"18187:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18172:18:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18168:22:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6344,"nodeType":"ExpressionStatement","src":"18168:22:40"},{"expression":{"id":6347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6345,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"18208:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6346,"name":"x10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5415,"src":"18215:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18208:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6348,"nodeType":"ExpressionStatement","src":"18208:10:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6351,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18251:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6352,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5424,"src":"18256:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18251:8:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6368,"nodeType":"IfStatement","src":"18247:97:40","trueBody":{"id":6367,"nodeType":"Block","src":"18261:83:40","statements":[{"expression":{"id":6361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6354,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18279:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6355,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18284:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6356,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"18288:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18284:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6358,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18283:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6359,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5424,"src":"18298:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18283:18:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18279:22:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6362,"nodeType":"ExpressionStatement","src":"18279:22:40"},{"expression":{"id":6365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6363,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"18319:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6364,"name":"x11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5421,"src":"18326:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18319:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6366,"nodeType":"ExpressionStatement","src":"18319:10:40"}]}}]},{"id":6496,"nodeType":"UncheckedBlock","src":"18856:1493:40","statements":[{"assignments":[6371],"declarations":[{"constant":false,"id":6371,"mutability":"mutable","name":"z","nameLocation":"18887:1:40","nodeType":"VariableDeclaration","scope":6496,"src":"18880:8:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6370,"name":"int256","nodeType":"ElementaryTypeName","src":"18880:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6384,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6372,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18893:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":6373,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"18897:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18893:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6375,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18892:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6376,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"18907:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18892:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6378,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18891:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6379,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18918:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6380,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"18922:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18918:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6382,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18917:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18891:38:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18880:49:40"},{"assignments":[6386],"declarations":[{"constant":false,"id":6386,"mutability":"mutable","name":"z_squared","nameLocation":"18950:9:40","nodeType":"VariableDeclaration","scope":6496,"src":"18943:16:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6385,"name":"int256","nodeType":"ElementaryTypeName","src":"18943:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6393,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6387,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6371,"src":"18963:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6388,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6371,"src":"18967:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18963:5:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6390,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18962:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6391,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"18972:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18962:16:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18943:35:40"},{"assignments":[6395],"declarations":[{"constant":false,"id":6395,"mutability":"mutable","name":"num","nameLocation":"19074:3:40","nodeType":"VariableDeclaration","scope":6496,"src":"19067:10:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6394,"name":"int256","nodeType":"ElementaryTypeName","src":"19067:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6397,"initialValue":{"id":6396,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6371,"src":"19080:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19067:14:40"},{"assignments":[6399],"declarations":[{"constant":false,"id":6399,"mutability":"mutable","name":"seriesSum","nameLocation":"19210:9:40","nodeType":"VariableDeclaration","scope":6496,"src":"19203:16:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6398,"name":"int256","nodeType":"ElementaryTypeName","src":"19203:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6401,"initialValue":{"id":6400,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19222:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19203:22:40"},{"expression":{"id":6409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6402,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19304:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6403,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19311:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6404,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"19317:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19311:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6406,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19310:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6407,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"19330:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19310:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19304:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6410,"nodeType":"ExpressionStatement","src":"19304:32:40"},{"expression":{"id":6415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6411,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6399,"src":"19350:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6412,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19363:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":6413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19369:1:40","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"19363:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19350:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6416,"nodeType":"ExpressionStatement","src":"19350:20:40"},{"expression":{"id":6424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6417,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19385:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6418,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19392:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6419,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"19398:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19392:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6421,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19391:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6422,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"19411:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19391:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19385:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6425,"nodeType":"ExpressionStatement","src":"19385:32:40"},{"expression":{"id":6430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6426,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6399,"src":"19431:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6427,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19444:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":6428,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19450:1:40","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"19444:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19431:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6431,"nodeType":"ExpressionStatement","src":"19431:20:40"},{"expression":{"id":6439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6432,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19466:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6433,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19473:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6434,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"19479:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19473:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6436,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19472:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6437,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"19492:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19472:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19466:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6440,"nodeType":"ExpressionStatement","src":"19466:32:40"},{"expression":{"id":6445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6441,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6399,"src":"19512:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6442,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19525:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":6443,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19531:1:40","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"19525:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19512:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6446,"nodeType":"ExpressionStatement","src":"19512:20:40"},{"expression":{"id":6454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6447,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19547:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6448,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19554:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6449,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"19560:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19554:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6451,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19553:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6452,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"19573:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19553:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19547:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6455,"nodeType":"ExpressionStatement","src":"19547:32:40"},{"expression":{"id":6460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6456,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6399,"src":"19593:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6457,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19606:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":6458,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19612:1:40","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"19606:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19593:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6461,"nodeType":"ExpressionStatement","src":"19593:20:40"},{"expression":{"id":6469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6462,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19628:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6463,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19635:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6464,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"19641:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19635:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6466,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19634:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6467,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"19654:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19634:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19628:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6470,"nodeType":"ExpressionStatement","src":"19628:32:40"},{"expression":{"id":6475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6471,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6399,"src":"19674:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6472,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19687:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":6473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19693:2:40","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"19687:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19674:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6476,"nodeType":"ExpressionStatement","src":"19674:21:40"},{"expression":{"id":6479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6477,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6399,"src":"19866:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"32","id":6478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19879:1:40","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"19866:14:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6480,"nodeType":"ExpressionStatement","src":"19866:14:40"},{"assignments":[6482],"declarations":[{"constant":false,"id":6482,"mutability":"mutable","name":"result","nameLocation":"20169:6:40","nodeType":"VariableDeclaration","scope":6496,"src":"20162:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6481,"name":"int256","nodeType":"ElementaryTypeName","src":"20162:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6489,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6483,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"20179:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6484,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6399,"src":"20185:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20179:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6486,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20178:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":6487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20198:3:40","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"20178:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"20162:39:40"},{"expression":{"condition":{"id":6490,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6125,"src":"20303:16:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":6493,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6482,"src":"20332:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"20303:35:40","trueExpression":{"id":6492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"20322:7:40","subExpression":{"id":6491,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6482,"src":"20323:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":6123,"id":6495,"nodeType":"Return","src":"20296:42:40"}]}]},"documentation":{"id":6117,"nodeType":"StructuredDocumentation","src":"14678:88:40","text":"@dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":6498,"implemented":true,"kind":"function","modifiers":[],"name":"_ln","nameLocation":"14780:3:40","nodeType":"FunctionDefinition","parameters":{"id":6120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6119,"mutability":"mutable","name":"a","nameLocation":"14791:1:40","nodeType":"VariableDeclaration","scope":6498,"src":"14784:8:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6118,"name":"int256","nodeType":"ElementaryTypeName","src":"14784:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14783:10:40"},"returnParameters":{"id":6123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6122,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6498,"src":"14816:6:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6121,"name":"int256","nodeType":"ElementaryTypeName","src":"14816:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14815:8:40"},"scope":6654,"src":"14771:5584:40","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":6652,"nodeType":"Block","src":"20678:1804:40","statements":[{"id":6651,"nodeType":"UncheckedBlock","src":"20892:1584:40","statements":[{"expression":{"id":6508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6506,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6501,"src":"20916:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"id":6507,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"20921:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20916:11:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6509,"nodeType":"ExpressionStatement","src":"20916:11:40"},{"assignments":[6511],"declarations":[{"constant":false,"id":6511,"mutability":"mutable","name":"z","nameLocation":"21315:1:40","nodeType":"VariableDeclaration","scope":6651,"src":"21308:8:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6510,"name":"int256","nodeType":"ElementaryTypeName","src":"21308:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6524,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6512,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6501,"src":"21321:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":6513,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"21325:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21321:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6515,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21320:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6516,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"21335:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21320:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6518,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21319:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6519,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6501,"src":"21346:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6520,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"21350:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21346:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6522,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21345:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21319:38:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21308:49:40"},{"assignments":[6526],"declarations":[{"constant":false,"id":6526,"mutability":"mutable","name":"z_squared","nameLocation":"21378:9:40","nodeType":"VariableDeclaration","scope":6651,"src":"21371:16:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6525,"name":"int256","nodeType":"ElementaryTypeName","src":"21371:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6533,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6527,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6511,"src":"21391:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6528,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6511,"src":"21395:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21391:5:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6530,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21390:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6531,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"21400:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21390:16:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21371:35:40"},{"assignments":[6535],"declarations":[{"constant":false,"id":6535,"mutability":"mutable","name":"num","nameLocation":"21502:3:40","nodeType":"VariableDeclaration","scope":6651,"src":"21495:10:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6534,"name":"int256","nodeType":"ElementaryTypeName","src":"21495:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6537,"initialValue":{"id":6536,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6511,"src":"21508:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21495:14:40"},{"assignments":[6539],"declarations":[{"constant":false,"id":6539,"mutability":"mutable","name":"seriesSum","nameLocation":"21638:9:40","nodeType":"VariableDeclaration","scope":6651,"src":"21631:16:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6538,"name":"int256","nodeType":"ElementaryTypeName","src":"21631:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6541,"initialValue":{"id":6540,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21650:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21631:22:40"},{"expression":{"id":6549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6542,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21732:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6543,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21739:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6544,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6526,"src":"21745:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21739:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6546,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21738:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6547,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"21758:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21738:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21732:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6550,"nodeType":"ExpressionStatement","src":"21732:32:40"},{"expression":{"id":6555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6551,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6539,"src":"21778:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6552,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21791:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":6553,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21797:1:40","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"21791:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21778:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6556,"nodeType":"ExpressionStatement","src":"21778:20:40"},{"expression":{"id":6564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6557,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21813:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6558,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21820:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6559,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6526,"src":"21826:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21820:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6561,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21819:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6562,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"21839:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21819:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21813:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6565,"nodeType":"ExpressionStatement","src":"21813:32:40"},{"expression":{"id":6570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6566,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6539,"src":"21859:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6567,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21872:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":6568,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21878:1:40","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"21872:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21859:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6571,"nodeType":"ExpressionStatement","src":"21859:20:40"},{"expression":{"id":6579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6572,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21894:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6573,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21901:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6574,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6526,"src":"21907:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21901:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6576,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21900:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6577,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"21920:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21900:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21894:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6580,"nodeType":"ExpressionStatement","src":"21894:32:40"},{"expression":{"id":6585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6581,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6539,"src":"21940:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6582,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21953:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":6583,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21959:1:40","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"21953:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21940:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6586,"nodeType":"ExpressionStatement","src":"21940:20:40"},{"expression":{"id":6594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6587,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21975:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6588,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21982:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6589,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6526,"src":"21988:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21982:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6591,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21981:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6592,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"22001:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21981:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21975:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6595,"nodeType":"ExpressionStatement","src":"21975:32:40"},{"expression":{"id":6600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6596,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6539,"src":"22021:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6597,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22034:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":6598,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22040:1:40","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"22034:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22021:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6601,"nodeType":"ExpressionStatement","src":"22021:20:40"},{"expression":{"id":6609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6602,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22056:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6603,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22063:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6604,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6526,"src":"22069:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22063:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6606,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22062:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6607,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"22082:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22062:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22056:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6610,"nodeType":"ExpressionStatement","src":"22056:32:40"},{"expression":{"id":6615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6611,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6539,"src":"22102:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6612,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22115:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":6613,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22121:2:40","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"22115:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22102:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6616,"nodeType":"ExpressionStatement","src":"22102:21:40"},{"expression":{"id":6624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6617,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22138:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6618,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22145:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6619,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6526,"src":"22151:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22145:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6621,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22144:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6622,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"22164:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22144:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22138:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6625,"nodeType":"ExpressionStatement","src":"22138:32:40"},{"expression":{"id":6630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6626,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6539,"src":"22184:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6627,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22197:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3133","id":6628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22203:2:40","typeDescriptions":{"typeIdentifier":"t_rational_13_by_1","typeString":"int_const 13"},"value":"13"},"src":"22197:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22184:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6631,"nodeType":"ExpressionStatement","src":"22184:21:40"},{"expression":{"id":6639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6632,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22220:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6633,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22227:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6634,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6526,"src":"22233:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22227:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6636,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22226:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6637,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"22246:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22226:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22220:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6640,"nodeType":"ExpressionStatement","src":"22220:32:40"},{"expression":{"id":6645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6641,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6539,"src":"22266:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6642,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22279:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3135","id":6643,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22285:2:40","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"15"},"src":"22279:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22266:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6646,"nodeType":"ExpressionStatement","src":"22266:21:40"},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6647,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6539,"src":"22452:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":6648,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22464:1:40","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22452:13:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":6505,"id":6650,"nodeType":"Return","src":"22445:20:40"}]}]},"documentation":{"id":6499,"nodeType":"StructuredDocumentation","src":"20361:256:40","text":" @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n for x close to one.\n Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND."},"id":6653,"implemented":true,"kind":"function","modifiers":[],"name":"_ln_36","nameLocation":"20631:6:40","nodeType":"FunctionDefinition","parameters":{"id":6502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6501,"mutability":"mutable","name":"x","nameLocation":"20645:1:40","nodeType":"VariableDeclaration","scope":6653,"src":"20638:8:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6500,"name":"int256","nodeType":"ElementaryTypeName","src":"20638:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20637:10:40"},"returnParameters":{"id":6505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6504,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6653,"src":"20670:6:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6503,"name":"int256","nodeType":"ElementaryTypeName","src":"20670:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20669:8:40"},"scope":6654,"src":"20622:1860:40","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":6655,"src":"595:21889:40","usedErrors":[5304,5307,5310,5313,5316],"usedEvents":[]}],"src":"33:22452:40"},"id":40},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol","exportedSymbols":{"EnumerableSet":[6943]},"id":6944,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6656,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:41"},{"abstract":false,"baseContracts":[],"canonicalName":"EnumerableSet","contractDependencies":[],"contractKind":"library","documentation":{"id":6657,"nodeType":"StructuredDocumentation","src":"59:956:41","text":" @notice Library for managing sets of primitive types.\n @dev See https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types.\n Based on the EnumerableSet library from OpenZeppelin Contracts, altered to remove the base private functions that\n work on bytes32, replacing them with a native implementation for address values, to reduce bytecode size and\n runtime costs.\n The `unchecked_at` function was also added, which allows for more gas efficient data reads in some scenarios.\n Sets have the following properties:\n - Elements are added, removed, and checked for existence in constant time (O(1)).\n - Elements are enumerated in O(n). No guarantees are made on the ordering.\n ```\n contract Example {\n // Add the library methods\n using EnumerableSet for EnumerableSet.AddressSet;\n // Declare a set state variable\n EnumerableSet.AddressSet private mySet;\n }\n ```"},"fullyImplemented":true,"id":6943,"linearizedBaseContracts":[6943],"name":"EnumerableSet","nameLocation":"1024:13:41","nodeType":"ContractDefinition","nodes":[{"canonicalName":"EnumerableSet.AddressSet","id":6665,"members":[{"constant":false,"id":6660,"mutability":"mutable","name":"_values","nameLocation":"1364:7:41","nodeType":"VariableDeclaration","scope":6665,"src":"1354:17:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6658,"name":"address","nodeType":"ElementaryTypeName","src":"1354:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6659,"nodeType":"ArrayTypeName","src":"1354:9:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":6664,"mutability":"mutable","name":"_indexes","nameLocation":"1554:8:41","nodeType":"VariableDeclaration","scope":6665,"src":"1504:58:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":6663,"keyName":"addressKey","keyNameLocation":"1520:10:41","keyType":{"id":6661,"name":"address","nodeType":"ElementaryTypeName","src":"1512:7:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1504:49:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"indexValue","valueNameLocation":"1542:10:41","valueType":{"id":6662,"name":"uint256","nodeType":"ElementaryTypeName","src":"1534:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"name":"AddressSet","nameLocation":"1299:10:41","nodeType":"StructDefinition","scope":6943,"src":"1292:277:41","visibility":"public"},{"documentation":{"id":6666,"nodeType":"StructuredDocumentation","src":"1575:61:41","text":"@notice An index is beyond the current bounds of the set."},"errorSelector":"4e23d035","id":6668,"name":"IndexOutOfBounds","nameLocation":"1647:16:41","nodeType":"ErrorDefinition","parameters":{"id":6667,"nodeType":"ParameterList","parameters":[],"src":"1663:2:41"},"src":"1641:25:41"},{"documentation":{"id":6669,"nodeType":"StructuredDocumentation","src":"1672:54:41","text":"@notice An element that is not present in the set."},"errorSelector":"66af5392","id":6671,"name":"ElementNotFound","nameLocation":"1737:15:41","nodeType":"ErrorDefinition","parameters":{"id":6670,"nodeType":"ParameterList","parameters":[],"src":"1752:2:41"},"src":"1731:24:41"},{"body":{"id":6712,"nodeType":"Block","src":"1986:335:41","statements":[{"condition":{"id":6686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2000:21:41","subExpression":{"arguments":[{"id":6683,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6675,"src":"2010:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},{"id":6684,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6677,"src":"2015:5:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6682,"name":"contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6823,"src":"2001:8:41","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$6665_storage_ptr_$_t_address_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"}},"id":6685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2001:20:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6710,"nodeType":"Block","src":"2278:37:41","statements":[{"expression":{"hexValue":"66616c7365","id":6708,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2299:5:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":6681,"id":6709,"nodeType":"Return","src":"2292:12:41"}]},"id":6711,"nodeType":"IfStatement","src":"1996:319:41","trueBody":{"id":6707,"nodeType":"Block","src":"2023:249:41","statements":[{"expression":{"arguments":[{"id":6692,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6677,"src":"2054:5:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":6687,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6675,"src":"2037:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6690,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2041:7:41","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6660,"src":"2037:11:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2049:4:41","memberName":"push","nodeType":"MemberAccess","src":"2037:16:41","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$attached_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer,address)"}},"id":6693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2037:23:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6694,"nodeType":"ExpressionStatement","src":"2037:23:41"},{"expression":{"id":6703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":6695,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6675,"src":"2196:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6698,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2200:8:41","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6664,"src":"2196:12:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6699,"indexExpression":{"id":6697,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6677,"src":"2209:5:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2196:19:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":6700,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6675,"src":"2218:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6701,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2222:7:41","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6660,"src":"2218:11:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2230:6:41","memberName":"length","nodeType":"MemberAccess","src":"2218:18:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2196:40:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6704,"nodeType":"ExpressionStatement","src":"2196:40:41"},{"expression":{"hexValue":"74727565","id":6705,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2257:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":6681,"id":6706,"nodeType":"Return","src":"2250:11:41"}]}}]},"documentation":{"id":6672,"nodeType":"StructuredDocumentation","src":"1761:144:41","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, if it was not already present."},"id":6713,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"1919:3:41","nodeType":"FunctionDefinition","parameters":{"id":6678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6675,"mutability":"mutable","name":"set","nameLocation":"1942:3:41","nodeType":"VariableDeclaration","scope":6713,"src":"1923:22:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6674,"nodeType":"UserDefinedTypeName","pathNode":{"id":6673,"name":"AddressSet","nameLocations":["1923:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":6665,"src":"1923:10:41"},"referencedDeclaration":6665,"src":"1923:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6677,"mutability":"mutable","name":"value","nameLocation":"1955:5:41","nodeType":"VariableDeclaration","scope":6713,"src":"1947:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6676,"name":"address","nodeType":"ElementaryTypeName","src":"1947:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1922:39:41"},"returnParameters":{"id":6681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6680,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6713,"src":"1980:4:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6679,"name":"bool","nodeType":"ElementaryTypeName","src":"1980:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1979:6:41"},"scope":6943,"src":"1910:411:41","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6803,"nodeType":"Block","src":"2552:1498:41","statements":[{"assignments":[6725],"declarations":[{"constant":false,"id":6725,"mutability":"mutable","name":"valueIndex","nameLocation":"2671:10:41","nodeType":"VariableDeclaration","scope":6803,"src":"2663:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6724,"name":"uint256","nodeType":"ElementaryTypeName","src":"2663:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6730,"initialValue":{"baseExpression":{"expression":{"id":6726,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6717,"src":"2684:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6727,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2688:8:41","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6664,"src":"2684:12:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6729,"indexExpression":{"id":6728,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6719,"src":"2697:5:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2684:19:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2663:40:41"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6731,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6725,"src":"2718:10:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6732,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2732:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2718:15:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6801,"nodeType":"Block","src":"4007:37:41","statements":[{"expression":{"hexValue":"66616c7365","id":6799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4028:5:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":6723,"id":6800,"nodeType":"Return","src":"4021:12:41"}]},"id":6802,"nodeType":"IfStatement","src":"2714:1330:41","trueBody":{"id":6798,"nodeType":"Block","src":"2735:1266:41","statements":[{"assignments":[6735],"declarations":[{"constant":false,"id":6735,"mutability":"mutable","name":"toDeleteIndex","nameLocation":"3094:13:41","nodeType":"VariableDeclaration","scope":6798,"src":"3086:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6734,"name":"uint256","nodeType":"ElementaryTypeName","src":"3086:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6736,"nodeType":"VariableDeclarationStatement","src":"3086:21:41"},{"assignments":[6738],"declarations":[{"constant":false,"id":6738,"mutability":"mutable","name":"lastIndex","nameLocation":"3129:9:41","nodeType":"VariableDeclaration","scope":6798,"src":"3121:17:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6737,"name":"uint256","nodeType":"ElementaryTypeName","src":"3121:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6739,"nodeType":"VariableDeclarationStatement","src":"3121:17:41"},{"id":6754,"nodeType":"UncheckedBlock","src":"3153:125:41","statements":[{"expression":{"id":6744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6740,"name":"toDeleteIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6735,"src":"3181:13:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6741,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6725,"src":"3197:10:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":6742,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3210:1:41","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3197:14:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3181:30:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6745,"nodeType":"ExpressionStatement","src":"3181:30:41"},{"expression":{"id":6752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6746,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6738,"src":"3229:9:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":6747,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6717,"src":"3241:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6748,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3245:7:41","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6660,"src":"3241:11:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3253:6:41","memberName":"length","nodeType":"MemberAccess","src":"3241:18:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":6750,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3262:1:41","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3241:22:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3229:34:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6753,"nodeType":"ExpressionStatement","src":"3229:34:41"}]},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6755,"name":"toDeleteIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6735,"src":"3378:13:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":6756,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6738,"src":"3395:9:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3378:26:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6782,"nodeType":"IfStatement","src":"3374:399:41","trueBody":{"id":6781,"nodeType":"Block","src":"3406:367:41","statements":[{"assignments":[6759],"declarations":[{"constant":false,"id":6759,"mutability":"mutable","name":"lastValue","nameLocation":"3432:9:41","nodeType":"VariableDeclaration","scope":6781,"src":"3424:17:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6758,"name":"address","nodeType":"ElementaryTypeName","src":"3424:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":6764,"initialValue":{"baseExpression":{"expression":{"id":6760,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6717,"src":"3444:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6761,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3448:7:41","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6660,"src":"3444:11:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6763,"indexExpression":{"id":6762,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6738,"src":"3456:9:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3444:22:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3424:42:41"},{"expression":{"id":6771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":6765,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6717,"src":"3561:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6768,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3565:7:41","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6660,"src":"3561:11:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6769,"indexExpression":{"id":6767,"name":"toDeleteIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6735,"src":"3573:13:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3561:26:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6770,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6759,"src":"3590:9:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3561:38:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6772,"nodeType":"ExpressionStatement","src":"3561:38:41"},{"expression":{"id":6779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":6773,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6717,"src":"3673:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6776,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3677:8:41","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6664,"src":"3673:12:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6777,"indexExpression":{"id":6775,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6759,"src":"3686:9:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3673:23:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6778,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6725,"src":"3699:10:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3673:36:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6780,"nodeType":"ExpressionStatement","src":"3673:36:41"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":6783,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6717,"src":"3852:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6786,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3856:7:41","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6660,"src":"3852:11:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3864:3:41","memberName":"pop","nodeType":"MemberAccess","src":"3852:15:41","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer)"}},"id":6788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3852:17:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6789,"nodeType":"ExpressionStatement","src":"3852:17:41"},{"expression":{"id":6794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"3938:26:41","subExpression":{"baseExpression":{"expression":{"id":6790,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6717,"src":"3945:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6791,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3949:8:41","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6664,"src":"3945:12:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6793,"indexExpression":{"id":6792,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6719,"src":"3958:5:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3945:19:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6795,"nodeType":"ExpressionStatement","src":"3938:26:41"},{"expression":{"hexValue":"74727565","id":6796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3986:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":6723,"id":6797,"nodeType":"Return","src":"3979:11:41"}]}}]},"documentation":{"id":6714,"nodeType":"StructuredDocumentation","src":"2327:141:41","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set; i.e., if it was present."},"id":6804,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"2482:6:41","nodeType":"FunctionDefinition","parameters":{"id":6720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6717,"mutability":"mutable","name":"set","nameLocation":"2508:3:41","nodeType":"VariableDeclaration","scope":6804,"src":"2489:22:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6716,"nodeType":"UserDefinedTypeName","pathNode":{"id":6715,"name":"AddressSet","nameLocations":["2489:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":6665,"src":"2489:10:41"},"referencedDeclaration":6665,"src":"2489:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6719,"mutability":"mutable","name":"value","nameLocation":"2521:5:41","nodeType":"VariableDeclaration","scope":6804,"src":"2513:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6718,"name":"address","nodeType":"ElementaryTypeName","src":"2513:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2488:39:41"},"returnParameters":{"id":6723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6722,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6804,"src":"2546:4:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6721,"name":"bool","nodeType":"ElementaryTypeName","src":"2546:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2545:6:41"},"scope":6943,"src":"2473:1577:41","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6822,"nodeType":"Block","src":"4202:48:41","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":6815,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6808,"src":"4219:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6816,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4223:8:41","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6664,"src":"4219:12:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6818,"indexExpression":{"id":6817,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6810,"src":"4232:5:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4219:19:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4242:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4219:24:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6814,"id":6821,"nodeType":"Return","src":"4212:31:41"}]},"documentation":{"id":6805,"nodeType":"StructuredDocumentation","src":"4056:55:41","text":"@dev Returns true if the value is in the set. O(1)."},"id":6823,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"4125:8:41","nodeType":"FunctionDefinition","parameters":{"id":6811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6808,"mutability":"mutable","name":"set","nameLocation":"4153:3:41","nodeType":"VariableDeclaration","scope":6823,"src":"4134:22:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6807,"nodeType":"UserDefinedTypeName","pathNode":{"id":6806,"name":"AddressSet","nameLocations":["4134:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":6665,"src":"4134:10:41"},"referencedDeclaration":6665,"src":"4134:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6810,"mutability":"mutable","name":"value","nameLocation":"4166:5:41","nodeType":"VariableDeclaration","scope":6823,"src":"4158:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6809,"name":"address","nodeType":"ElementaryTypeName","src":"4158:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4133:39:41"},"returnParameters":{"id":6814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6813,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6823,"src":"4196:4:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6812,"name":"bool","nodeType":"ElementaryTypeName","src":"4196:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4195:6:41"},"scope":6943,"src":"4116:134:41","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6836,"nodeType":"Block","src":"4388:42:41","statements":[{"expression":{"expression":{"expression":{"id":6832,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6827,"src":"4405:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6833,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4409:7:41","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6660,"src":"4405:11:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4417:6:41","memberName":"length","nodeType":"MemberAccess","src":"4405:18:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6831,"id":6835,"nodeType":"Return","src":"4398:25:41"}]},"documentation":{"id":6824,"nodeType":"StructuredDocumentation","src":"4256:55:41","text":"@dev Returns the number of values on the set. O(1)."},"id":6837,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"4325:6:41","nodeType":"FunctionDefinition","parameters":{"id":6828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6827,"mutability":"mutable","name":"set","nameLocation":"4351:3:41","nodeType":"VariableDeclaration","scope":6837,"src":"4332:22:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6826,"nodeType":"UserDefinedTypeName","pathNode":{"id":6825,"name":"AddressSet","nameLocations":["4332:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":6665,"src":"4332:10:41"},"referencedDeclaration":6665,"src":"4332:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"4331:24:41"},"returnParameters":{"id":6831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6830,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6837,"src":"4379:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6829,"name":"uint256","nodeType":"ElementaryTypeName","src":"4379:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4378:9:41"},"scope":6943,"src":"4316:114:41","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6863,"nodeType":"Block","src":"4855:141:41","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6848,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6843,"src":"4869:5:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"expression":{"id":6849,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6841,"src":"4878:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6850,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4882:7:41","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6660,"src":"4878:11:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4890:6:41","memberName":"length","nodeType":"MemberAccess","src":"4878:18:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4869:27:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6857,"nodeType":"IfStatement","src":"4865:83:41","trueBody":{"id":6856,"nodeType":"Block","src":"4898:50:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6853,"name":"IndexOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6668,"src":"4919:16:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4919:18:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6855,"nodeType":"RevertStatement","src":"4912:25:41"}]}},{"expression":{"arguments":[{"id":6859,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6841,"src":"4978:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},{"id":6860,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6843,"src":"4983:5:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6858,"name":"unchecked_at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6881,"src":"4965:12:41","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$6665_storage_ptr_$_t_uint256_$returns$_t_address_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":6861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4965:24:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":6847,"id":6862,"nodeType":"Return","src":"4958:31:41"}]},"documentation":{"id":6838,"nodeType":"StructuredDocumentation","src":"4436:331:41","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":6864,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"4781:2:41","nodeType":"FunctionDefinition","parameters":{"id":6844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6841,"mutability":"mutable","name":"set","nameLocation":"4803:3:41","nodeType":"VariableDeclaration","scope":6864,"src":"4784:22:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6840,"nodeType":"UserDefinedTypeName","pathNode":{"id":6839,"name":"AddressSet","nameLocations":["4784:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":6665,"src":"4784:10:41"},"referencedDeclaration":6665,"src":"4784:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6843,"mutability":"mutable","name":"index","nameLocation":"4816:5:41","nodeType":"VariableDeclaration","scope":6864,"src":"4808:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6842,"name":"uint256","nodeType":"ElementaryTypeName","src":"4808:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4783:39:41"},"returnParameters":{"id":6847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6846,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6864,"src":"4846:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6845,"name":"address","nodeType":"ElementaryTypeName","src":"4846:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4845:9:41"},"scope":6943,"src":"4772:224:41","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6880,"nodeType":"Block","src":"5401:42:41","statements":[{"expression":{"baseExpression":{"expression":{"id":6875,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6868,"src":"5418:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6876,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5422:7:41","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6660,"src":"5418:11:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6878,"indexExpression":{"id":6877,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6870,"src":"5430:5:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5418:18:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":6874,"id":6879,"nodeType":"Return","src":"5411:25:41"}]},"documentation":{"id":6865,"nodeType":"StructuredDocumentation","src":"5002:301:41","text":" @dev Same as {at}, except this doesn't revert if `index` it outside of the set (i.e. if it is equal or larger\n than {length}). O(1).\n This function performs one less storage read than {at}, but should only be used when `index` is known to be\n within bounds."},"id":6881,"implemented":true,"kind":"function","modifiers":[],"name":"unchecked_at","nameLocation":"5317:12:41","nodeType":"FunctionDefinition","parameters":{"id":6871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6868,"mutability":"mutable","name":"set","nameLocation":"5349:3:41","nodeType":"VariableDeclaration","scope":6881,"src":"5330:22:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6867,"nodeType":"UserDefinedTypeName","pathNode":{"id":6866,"name":"AddressSet","nameLocations":["5330:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":6665,"src":"5330:10:41"},"referencedDeclaration":6665,"src":"5330:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6870,"mutability":"mutable","name":"index","nameLocation":"5362:5:41","nodeType":"VariableDeclaration","scope":6881,"src":"5354:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6869,"name":"uint256","nodeType":"ElementaryTypeName","src":"5354:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5329:39:41"},"returnParameters":{"id":6874,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6873,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6881,"src":"5392:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6872,"name":"address","nodeType":"ElementaryTypeName","src":"5392:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5391:9:41"},"scope":6943,"src":"5308:135:41","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6912,"nodeType":"Block","src":"5617:197:41","statements":[{"assignments":[6893],"declarations":[{"constant":false,"id":6893,"mutability":"mutable","name":"rawIndex","nameLocation":"5635:8:41","nodeType":"VariableDeclaration","scope":6912,"src":"5627:16:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6892,"name":"uint256","nodeType":"ElementaryTypeName","src":"5627:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6898,"initialValue":{"baseExpression":{"expression":{"id":6894,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6885,"src":"5646:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6895,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5650:8:41","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6664,"src":"5646:12:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6897,"indexExpression":{"id":6896,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6887,"src":"5659:5:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5646:19:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5627:38:41"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6899,"name":"rawIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6893,"src":"5680:8:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5692:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5680:13:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6906,"nodeType":"IfStatement","src":"5676:68:41","trueBody":{"id":6905,"nodeType":"Block","src":"5695:49:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6902,"name":"ElementNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6671,"src":"5716:15:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5716:17:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6904,"nodeType":"RevertStatement","src":"5709:24:41"}]}},{"id":6911,"nodeType":"UncheckedBlock","src":"5754:54:41","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6907,"name":"rawIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6893,"src":"5785:8:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":6908,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5796:1:41","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5785:12:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6891,"id":6910,"nodeType":"Return","src":"5778:19:41"}]}]},"documentation":{"id":6882,"nodeType":"StructuredDocumentation","src":"5449:75:41","text":"@dev Return the index of an element in the set, or revert if not found."},"id":6913,"implemented":true,"kind":"function","modifiers":[],"name":"indexOf","nameLocation":"5538:7:41","nodeType":"FunctionDefinition","parameters":{"id":6888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6885,"mutability":"mutable","name":"set","nameLocation":"5565:3:41","nodeType":"VariableDeclaration","scope":6913,"src":"5546:22:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6884,"nodeType":"UserDefinedTypeName","pathNode":{"id":6883,"name":"AddressSet","nameLocations":["5546:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":6665,"src":"5546:10:41"},"referencedDeclaration":6665,"src":"5546:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6887,"mutability":"mutable","name":"value","nameLocation":"5578:5:41","nodeType":"VariableDeclaration","scope":6913,"src":"5570:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6886,"name":"address","nodeType":"ElementaryTypeName","src":"5570:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5545:39:41"},"returnParameters":{"id":6891,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6890,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6913,"src":"5608:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6889,"name":"uint256","nodeType":"ElementaryTypeName","src":"5608:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5607:9:41"},"scope":6943,"src":"5529:285:41","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6941,"nodeType":"Block","src":"6217:139:41","statements":[{"assignments":[6925],"declarations":[{"constant":false,"id":6925,"mutability":"mutable","name":"rawIndex","nameLocation":"6235:8:41","nodeType":"VariableDeclaration","scope":6941,"src":"6227:16:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6924,"name":"uint256","nodeType":"ElementaryTypeName","src":"6227:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6930,"initialValue":{"baseExpression":{"expression":{"id":6926,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6917,"src":"6246:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6927,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6250:8:41","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6664,"src":"6246:12:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6929,"indexExpression":{"id":6928,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6919,"src":"6259:5:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6246:19:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6227:38:41"},{"id":6940,"nodeType":"UncheckedBlock","src":"6276:74:41","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6931,"name":"rawIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6925,"src":"6307:8:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6932,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6319:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6307:13:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6935,"name":"rawIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6925,"src":"6327:8:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":6936,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6338:1:41","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6327:12:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6307:32:41","trueExpression":{"hexValue":"30","id":6934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6323:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6923,"id":6939,"nodeType":"Return","src":"6300:39:41"}]}]},"documentation":{"id":6914,"nodeType":"StructuredDocumentation","src":"5820:294:41","text":" @dev Same as {indexOf}, except this doesn't revert if the element isn't present in the set.\n In this case, it returns 0.\n This function performs one less storage read than {indexOf}, but should only be used when `index` is known to be\n within bounds."},"id":6942,"implemented":true,"kind":"function","modifiers":[],"name":"unchecked_indexOf","nameLocation":"6128:17:41","nodeType":"FunctionDefinition","parameters":{"id":6920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6917,"mutability":"mutable","name":"set","nameLocation":"6165:3:41","nodeType":"VariableDeclaration","scope":6942,"src":"6146:22:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6916,"nodeType":"UserDefinedTypeName","pathNode":{"id":6915,"name":"AddressSet","nameLocations":["6146:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":6665,"src":"6146:10:41"},"referencedDeclaration":6665,"src":"6146:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6919,"mutability":"mutable","name":"value","nameLocation":"6178:5:41","nodeType":"VariableDeclaration","scope":6942,"src":"6170:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6918,"name":"address","nodeType":"ElementaryTypeName","src":"6170:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6145:39:41"},"returnParameters":{"id":6923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6922,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6942,"src":"6208:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6921,"name":"uint256","nodeType":"ElementaryTypeName","src":"6208:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6207:9:41"},"scope":6943,"src":"6119:237:41","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":6944,"src":"1016:5342:41","usedErrors":[6668,6671],"usedEvents":[]}],"src":"33:6326:41"},"id":41},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","exportedSymbols":{"ReentrancyGuardTransient":[7012],"StorageSlotExtension":[7225]},"id":7013,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6945,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:42"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"./StorageSlotExtension.sol","id":6947,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7013,"sourceUnit":7226,"src":"59:66:42","symbolAliases":[{"foreign":{"id":6946,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7225,"src":"68:20:42","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"ReentrancyGuardTransient","contractDependencies":[],"contractKind":"contract","documentation":{"id":6948,"nodeType":"StructuredDocumentation","src":"127:155:42","text":" @notice Variant of {ReentrancyGuard} that uses transient storage.\n @dev NOTE: This variant only works on networks where EIP-1153 is available."},"fullyImplemented":true,"id":7012,"linearizedBaseContracts":[7012],"name":"ReentrancyGuardTransient","nameLocation":"301:24:42","nodeType":"ContractDefinition","nodes":[{"global":false,"id":6950,"libraryName":{"id":6949,"name":"StorageSlotExtension","nameLocations":["338:20:42"],"nodeType":"IdentifierPath","referencedDeclaration":7225,"src":"338:20:42"},"nodeType":"UsingForDirective","src":"332:33:42"},{"constant":true,"id":6953,"mutability":"constant","name":"_REENTRANCY_GUARD_STORAGE","nameLocation":"515:25:42","nodeType":"VariableDeclaration","scope":7012,"src":"490:127:42","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6951,"name":"bytes32","nodeType":"ElementaryTypeName","src":"490:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307839623737396231373432326430646639323232333031386233326234643166613436653037313732336436383137653234383664303033626563633535663030","id":6952,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"551:66:42","typeDescriptions":{"typeIdentifier":"t_rational_70319816728846589445362000750570655803700195216363692647688146666176345628416_by_1","typeString":"int_const 7031...(69 digits omitted)...8416"},"value":"0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"},"visibility":"private"},{"documentation":{"id":6954,"nodeType":"StructuredDocumentation","src":"624:40:42","text":"@notice Unauthorized reentrant call."},"errorSelector":"3ee5aeb5","id":6956,"name":"ReentrancyGuardReentrantCall","nameLocation":"675:28:42","nodeType":"ErrorDefinition","parameters":{"id":6955,"nodeType":"ParameterList","parameters":[],"src":"703:2:42"},"src":"669:37:42"},{"body":{"id":6966,"nodeType":"Block","src":"1107:79:42","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6959,"name":"_nonReentrantBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6986,"src":"1117:19:42","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":6960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1117:21:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6961,"nodeType":"ExpressionStatement","src":"1117:21:42"},{"id":6962,"nodeType":"PlaceholderStatement","src":"1148:1:42"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6963,"name":"_nonReentrantAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6998,"src":"1159:18:42","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":6964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1159:20:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6965,"nodeType":"ExpressionStatement","src":"1159:20:42"}]},"documentation":{"id":6957,"nodeType":"StructuredDocumentation","src":"712:366:42","text":" @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work."},"id":6967,"name":"nonReentrant","nameLocation":"1092:12:42","nodeType":"ModifierDefinition","parameters":{"id":6958,"nodeType":"ParameterList","parameters":[],"src":"1104:2:42"},"src":"1083:103:42","virtual":false,"visibility":"internal"},{"body":{"id":6985,"nodeType":"Block","src":"1231:310:42","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":6970,"name":"_reentrancyGuardEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7011,"src":"1320:23:42","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":6971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1320:25:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6976,"nodeType":"IfStatement","src":"1316:93:42","trueBody":{"id":6975,"nodeType":"Block","src":"1347:62:42","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6972,"name":"ReentrancyGuardReentrantCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6956,"src":"1368:28:42","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1368:30:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6974,"nodeType":"RevertStatement","src":"1361:37:42"}]}},{"expression":{"arguments":[{"hexValue":"74727565","id":6982,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1529:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6977,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6953,"src":"1484:25:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1510:9:42","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":7063,"src":"1484:35:42","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$7048_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":6980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:37:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":6981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1522:6:42","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":7158,"src":"1484:44:42","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$7048_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$7048_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":6983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:50:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6984,"nodeType":"ExpressionStatement","src":"1484:50:42"}]},"id":6986,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantBefore","nameLocation":"1201:19:42","nodeType":"FunctionDefinition","parameters":{"id":6968,"nodeType":"ParameterList","parameters":[],"src":"1220:2:42"},"returnParameters":{"id":6969,"nodeType":"ParameterList","parameters":[],"src":"1231:0:42"},"scope":7012,"src":"1192:349:42","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6997,"nodeType":"Block","src":"1585:68:42","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":6994,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1640:5:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6989,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6953,"src":"1595:25:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1621:9:42","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":7063,"src":"1595:35:42","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$7048_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":6992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:37:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":6993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1633:6:42","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":7158,"src":"1595:44:42","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$7048_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$7048_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":6995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:51:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6996,"nodeType":"ExpressionStatement","src":"1595:51:42"}]},"id":6998,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantAfter","nameLocation":"1556:18:42","nodeType":"FunctionDefinition","parameters":{"id":6987,"nodeType":"ParameterList","parameters":[],"src":"1574:2:42"},"returnParameters":{"id":6988,"nodeType":"ParameterList","parameters":[],"src":"1585:0:42"},"scope":7012,"src":"1547:106:42","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":7010,"nodeType":"Block","src":"1896:69:42","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7004,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6953,"src":"1913:25:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1939:9:42","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":7063,"src":"1913:35:42","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$7048_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":7006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:37:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":7007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1951:5:42","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":7147,"src":"1913:43:42","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_BooleanSlotType_$7048_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_BooleanSlotType_$7048_$","typeString":"function (StorageSlotExtension.BooleanSlotType) view returns (bool)"}},"id":7008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:45:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7003,"id":7009,"nodeType":"Return","src":"1906:52:42"}]},"documentation":{"id":6999,"nodeType":"StructuredDocumentation","src":"1659:168:42","text":" @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n `nonReentrant` function in the call stack."},"id":7011,"implemented":true,"kind":"function","modifiers":[],"name":"_reentrancyGuardEntered","nameLocation":"1841:23:42","nodeType":"FunctionDefinition","parameters":{"id":7000,"nodeType":"ParameterList","parameters":[],"src":"1864:2:42"},"returnParameters":{"id":7003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7002,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7011,"src":"1890:4:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7001,"name":"bool","nodeType":"ElementaryTypeName","src":"1890:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1889:6:42"},"scope":7012,"src":"1832:133:42","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":7013,"src":"283:1684:42","usedErrors":[6956],"usedEvents":[]}],"src":"33:1935:42"},"id":42},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","exportedSymbols":{"StorageSlotExtension":[7225]},"id":7226,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7014,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:43"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlotExtension","contractDependencies":[],"contractKind":"library","documentation":{"id":7015,"nodeType":"StructuredDocumentation","src":"59:218:43","text":" @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n @dev TIP: Consider using this library along with {SlotDerivation}."},"fullyImplemented":true,"id":7225,"linearizedBaseContracts":[7225],"name":"StorageSlotExtension","nameLocation":"286:20:43","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlotExtension.Int256Slot","id":7018,"members":[{"constant":false,"id":7017,"mutability":"mutable","name":"value","nameLocation":"348:5:43","nodeType":"VariableDeclaration","scope":7018,"src":"341:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7016,"name":"int256","nodeType":"ElementaryTypeName","src":"341:6:43","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"name":"Int256Slot","nameLocation":"320:10:43","nodeType":"StructDefinition","scope":7225,"src":"313:47:43","visibility":"public"},{"body":{"id":7028,"nodeType":"Block","src":"524:106:43","statements":[{"AST":{"nativeSrc":"586:38:43","nodeType":"YulBlock","src":"586:38:43","statements":[{"nativeSrc":"600:14:43","nodeType":"YulAssignment","src":"600:14:43","value":{"name":"slot","nativeSrc":"610:4:43","nodeType":"YulIdentifier","src":"610:4:43"},"variableNames":[{"name":"r.slot","nativeSrc":"600:6:43","nodeType":"YulIdentifier","src":"600:6:43"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7025,"isOffset":false,"isSlot":true,"src":"600:6:43","suffix":"slot","valueSize":1},{"declaration":7021,"isOffset":false,"isSlot":false,"src":"610:4:43","valueSize":1}],"id":7027,"nodeType":"InlineAssembly","src":"577:47:43"}]},"documentation":{"id":7019,"nodeType":"StructuredDocumentation","src":"366:71:43","text":"@dev Returns an `Int256Slot` with member `value` located at `slot`."},"id":7029,"implemented":true,"kind":"function","modifiers":[],"name":"getInt256Slot","nameLocation":"451:13:43","nodeType":"FunctionDefinition","parameters":{"id":7022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7021,"mutability":"mutable","name":"slot","nameLocation":"473:4:43","nodeType":"VariableDeclaration","scope":7029,"src":"465:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7020,"name":"bytes32","nodeType":"ElementaryTypeName","src":"465:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"464:14:43"},"returnParameters":{"id":7026,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7025,"mutability":"mutable","name":"r","nameLocation":"521:1:43","nodeType":"VariableDeclaration","scope":7029,"src":"502:20:43","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$7018_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"},"typeName":{"id":7024,"nodeType":"UserDefinedTypeName","pathNode":{"id":7023,"name":"Int256Slot","nameLocations":["502:10:43"],"nodeType":"IdentifierPath","referencedDeclaration":7018,"src":"502:10:43"},"referencedDeclaration":7018,"src":"502:10:43","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$7018_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"}},"visibility":"internal"}],"src":"501:22:43"},"scope":7225,"src":"442:188:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.AddressSlotType","id":7031,"name":"AddressSlotType","nameLocation":"709:15:43","nodeType":"UserDefinedValueTypeDefinition","src":"704:32:43","underlyingType":{"id":7030,"name":"bytes32","nodeType":"ElementaryTypeName","src":"728:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":7045,"nodeType":"Block","src":"873:50:43","statements":[{"expression":{"arguments":[{"id":7042,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7034,"src":"911:4:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7040,"name":"AddressSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7031,"src":"890:15:43","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressSlotType_$7031_$","typeString":"type(StorageSlotExtension.AddressSlotType)"}},"id":7041,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"906:4:43","memberName":"wrap","nodeType":"MemberAccess","src":"890:20:43","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$7031_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":7043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"890:26:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7031","typeString":"StorageSlotExtension.AddressSlotType"}},"functionReturnParameters":7039,"id":7044,"nodeType":"Return","src":"883:33:43"}]},"documentation":{"id":7032,"nodeType":"StructuredDocumentation","src":"742:53:43","text":"@dev Cast an arbitrary slot to a AddressSlotType."},"id":7046,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"809:9:43","nodeType":"FunctionDefinition","parameters":{"id":7035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7034,"mutability":"mutable","name":"slot","nameLocation":"827:4:43","nodeType":"VariableDeclaration","scope":7046,"src":"819:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7033,"name":"bytes32","nodeType":"ElementaryTypeName","src":"819:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"818:14:43"},"returnParameters":{"id":7039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7038,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7046,"src":"856:15:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7031","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":7037,"nodeType":"UserDefinedTypeName","pathNode":{"id":7036,"name":"AddressSlotType","nameLocations":["856:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7031,"src":"856:15:43"},"referencedDeclaration":7031,"src":"856:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7031","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"855:17:43"},"scope":7225,"src":"800:123:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.BooleanSlotType","id":7048,"name":"BooleanSlotType","nameLocation":"1001:15:43","nodeType":"UserDefinedValueTypeDefinition","src":"996:32:43","underlyingType":{"id":7047,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1020:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":7062,"nodeType":"Block","src":"1165:50:43","statements":[{"expression":{"arguments":[{"id":7059,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7051,"src":"1203:4:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7057,"name":"BooleanSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7048,"src":"1182:15:43","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_BooleanSlotType_$7048_$","typeString":"type(StorageSlotExtension.BooleanSlotType)"}},"id":7058,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1198:4:43","memberName":"wrap","nodeType":"MemberAccess","src":"1182:20:43","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$7048_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":7060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1182:26:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"}},"functionReturnParameters":7056,"id":7061,"nodeType":"Return","src":"1175:33:43"}]},"documentation":{"id":7049,"nodeType":"StructuredDocumentation","src":"1034:53:43","text":"@dev Cast an arbitrary slot to a BooleanSlotType."},"id":7063,"implemented":true,"kind":"function","modifiers":[],"name":"asBoolean","nameLocation":"1101:9:43","nodeType":"FunctionDefinition","parameters":{"id":7052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7051,"mutability":"mutable","name":"slot","nameLocation":"1119:4:43","nodeType":"VariableDeclaration","scope":7063,"src":"1111:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7050,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1111:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1110:14:43"},"returnParameters":{"id":7056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7055,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7063,"src":"1148:15:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":7054,"nodeType":"UserDefinedTypeName","pathNode":{"id":7053,"name":"BooleanSlotType","nameLocations":["1148:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7048,"src":"1148:15:43"},"referencedDeclaration":7048,"src":"1148:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"1147:17:43"},"scope":7225,"src":"1092:123:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Bytes32SlotType","id":7065,"name":"Bytes32SlotType","nameLocation":"1293:15:43","nodeType":"UserDefinedValueTypeDefinition","src":"1288:32:43","underlyingType":{"id":7064,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1312:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":7079,"nodeType":"Block","src":"1457:50:43","statements":[{"expression":{"arguments":[{"id":7076,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7068,"src":"1495:4:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7074,"name":"Bytes32SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7065,"src":"1474:15:43","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Bytes32SlotType_$7065_$","typeString":"type(StorageSlotExtension.Bytes32SlotType)"}},"id":7075,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1490:4:43","memberName":"wrap","nodeType":"MemberAccess","src":"1474:20:43","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Bytes32SlotType_$7065_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Bytes32SlotType)"}},"id":7077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1474:26:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7065","typeString":"StorageSlotExtension.Bytes32SlotType"}},"functionReturnParameters":7073,"id":7078,"nodeType":"Return","src":"1467:33:43"}]},"documentation":{"id":7066,"nodeType":"StructuredDocumentation","src":"1326:53:43","text":"@dev Cast an arbitrary slot to a Bytes32SlotType."},"id":7080,"implemented":true,"kind":"function","modifiers":[],"name":"asBytes32","nameLocation":"1393:9:43","nodeType":"FunctionDefinition","parameters":{"id":7069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7068,"mutability":"mutable","name":"slot","nameLocation":"1411:4:43","nodeType":"VariableDeclaration","scope":7080,"src":"1403:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7067,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1403:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1402:14:43"},"returnParameters":{"id":7073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7072,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7080,"src":"1440:15:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7065","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":7071,"nodeType":"UserDefinedTypeName","pathNode":{"id":7070,"name":"Bytes32SlotType","nameLocations":["1440:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7065,"src":"1440:15:43"},"referencedDeclaration":7065,"src":"1440:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7065","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"1439:17:43"},"scope":7225,"src":"1384:123:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Uint256SlotType","id":7082,"name":"Uint256SlotType","nameLocation":"1585:15:43","nodeType":"UserDefinedValueTypeDefinition","src":"1580:32:43","underlyingType":{"id":7081,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1604:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":7096,"nodeType":"Block","src":"1749:50:43","statements":[{"expression":{"arguments":[{"id":7093,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7085,"src":"1787:4:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7091,"name":"Uint256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7082,"src":"1766:15:43","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Uint256SlotType_$7082_$","typeString":"type(StorageSlotExtension.Uint256SlotType)"}},"id":7092,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1782:4:43","memberName":"wrap","nodeType":"MemberAccess","src":"1766:20:43","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$7082_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":7094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1766:26:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7082","typeString":"StorageSlotExtension.Uint256SlotType"}},"functionReturnParameters":7090,"id":7095,"nodeType":"Return","src":"1759:33:43"}]},"documentation":{"id":7083,"nodeType":"StructuredDocumentation","src":"1618:53:43","text":"@dev Cast an arbitrary slot to a Uint256SlotType."},"id":7097,"implemented":true,"kind":"function","modifiers":[],"name":"asUint256","nameLocation":"1685:9:43","nodeType":"FunctionDefinition","parameters":{"id":7086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7085,"mutability":"mutable","name":"slot","nameLocation":"1703:4:43","nodeType":"VariableDeclaration","scope":7097,"src":"1695:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7084,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1695:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1694:14:43"},"returnParameters":{"id":7090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7089,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7097,"src":"1732:15:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7082","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":7088,"nodeType":"UserDefinedTypeName","pathNode":{"id":7087,"name":"Uint256SlotType","nameLocations":["1732:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7082,"src":"1732:15:43"},"referencedDeclaration":7082,"src":"1732:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7082","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"1731:17:43"},"scope":7225,"src":"1676:123:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Int256SlotType","id":7099,"name":"Int256SlotType","nameLocation":"1877:14:43","nodeType":"UserDefinedValueTypeDefinition","src":"1872:31:43","underlyingType":{"id":7098,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1895:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":7113,"nodeType":"Block","src":"2038:49:43","statements":[{"expression":{"arguments":[{"id":7110,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7102,"src":"2075:4:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7108,"name":"Int256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7099,"src":"2055:14:43","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Int256SlotType_$7099_$","typeString":"type(StorageSlotExtension.Int256SlotType)"}},"id":7109,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2070:4:43","memberName":"wrap","nodeType":"MemberAccess","src":"2055:19:43","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Int256SlotType_$7099_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Int256SlotType)"}},"id":7111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2055:25:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7099","typeString":"StorageSlotExtension.Int256SlotType"}},"functionReturnParameters":7107,"id":7112,"nodeType":"Return","src":"2048:32:43"}]},"documentation":{"id":7100,"nodeType":"StructuredDocumentation","src":"1909:53:43","text":"@dev Cast an arbitrary slot to an Int256SlotType."},"id":7114,"implemented":true,"kind":"function","modifiers":[],"name":"asInt256","nameLocation":"1976:8:43","nodeType":"FunctionDefinition","parameters":{"id":7103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7102,"mutability":"mutable","name":"slot","nameLocation":"1993:4:43","nodeType":"VariableDeclaration","scope":7114,"src":"1985:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7101,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1985:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1984:14:43"},"returnParameters":{"id":7107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7106,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7114,"src":"2022:14:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7099","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":7105,"nodeType":"UserDefinedTypeName","pathNode":{"id":7104,"name":"Int256SlotType","nameLocations":["2022:14:43"],"nodeType":"IdentifierPath","referencedDeclaration":7099,"src":"2022:14:43"},"referencedDeclaration":7099,"src":"2022:14:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7099","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"2021:16:43"},"scope":7225,"src":"1967:120:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7124,"nodeType":"Block","src":"2242:112:43","statements":[{"AST":{"nativeSrc":"2304:44:43","nodeType":"YulBlock","src":"2304:44:43","statements":[{"nativeSrc":"2318:20:43","nodeType":"YulAssignment","src":"2318:20:43","value":{"arguments":[{"name":"slot","nativeSrc":"2333:4:43","nodeType":"YulIdentifier","src":"2333:4:43"}],"functionName":{"name":"tload","nativeSrc":"2327:5:43","nodeType":"YulIdentifier","src":"2327:5:43"},"nativeSrc":"2327:11:43","nodeType":"YulFunctionCall","src":"2327:11:43"},"variableNames":[{"name":"value","nativeSrc":"2318:5:43","nodeType":"YulIdentifier","src":"2318:5:43"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7118,"isOffset":false,"isSlot":false,"src":"2333:4:43","valueSize":1},{"declaration":7121,"isOffset":false,"isSlot":false,"src":"2318:5:43","valueSize":1}],"id":7123,"nodeType":"InlineAssembly","src":"2295:53:43"}]},"documentation":{"id":7115,"nodeType":"StructuredDocumentation","src":"2093:69:43","text":"@dev Load the value held at location `slot` in transient storage."},"id":7125,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2176:5:43","nodeType":"FunctionDefinition","parameters":{"id":7119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7118,"mutability":"mutable","name":"slot","nameLocation":"2198:4:43","nodeType":"VariableDeclaration","scope":7125,"src":"2182:20:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7031","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":7117,"nodeType":"UserDefinedTypeName","pathNode":{"id":7116,"name":"AddressSlotType","nameLocations":["2182:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7031,"src":"2182:15:43"},"referencedDeclaration":7031,"src":"2182:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7031","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"2181:22:43"},"returnParameters":{"id":7122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7121,"mutability":"mutable","name":"value","nameLocation":"2235:5:43","nodeType":"VariableDeclaration","scope":7125,"src":"2227:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7120,"name":"address","nodeType":"ElementaryTypeName","src":"2227:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2226:15:43"},"scope":7225,"src":"2167:187:43","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7135,"nodeType":"Block","src":"2490:111:43","statements":[{"AST":{"nativeSrc":"2552:43:43","nodeType":"YulBlock","src":"2552:43:43","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"2573:4:43","nodeType":"YulIdentifier","src":"2573:4:43"},{"name":"value","nativeSrc":"2579:5:43","nodeType":"YulIdentifier","src":"2579:5:43"}],"functionName":{"name":"tstore","nativeSrc":"2566:6:43","nodeType":"YulIdentifier","src":"2566:6:43"},"nativeSrc":"2566:19:43","nodeType":"YulFunctionCall","src":"2566:19:43"},"nativeSrc":"2566:19:43","nodeType":"YulExpressionStatement","src":"2566:19:43"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7129,"isOffset":false,"isSlot":false,"src":"2573:4:43","valueSize":1},{"declaration":7131,"isOffset":false,"isSlot":false,"src":"2579:5:43","valueSize":1}],"id":7134,"nodeType":"InlineAssembly","src":"2543:52:43"}]},"documentation":{"id":7126,"nodeType":"StructuredDocumentation","src":"2360:63:43","text":"@dev Store `value` at location `slot` in transient storage."},"id":7136,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2437:6:43","nodeType":"FunctionDefinition","parameters":{"id":7132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7129,"mutability":"mutable","name":"slot","nameLocation":"2460:4:43","nodeType":"VariableDeclaration","scope":7136,"src":"2444:20:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7031","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":7128,"nodeType":"UserDefinedTypeName","pathNode":{"id":7127,"name":"AddressSlotType","nameLocations":["2444:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7031,"src":"2444:15:43"},"referencedDeclaration":7031,"src":"2444:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7031","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"},{"constant":false,"id":7131,"mutability":"mutable","name":"value","nameLocation":"2474:5:43","nodeType":"VariableDeclaration","scope":7136,"src":"2466:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7130,"name":"address","nodeType":"ElementaryTypeName","src":"2466:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2443:37:43"},"returnParameters":{"id":7133,"nodeType":"ParameterList","parameters":[],"src":"2490:0:43"},"scope":7225,"src":"2428:173:43","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7146,"nodeType":"Block","src":"2753:112:43","statements":[{"AST":{"nativeSrc":"2815:44:43","nodeType":"YulBlock","src":"2815:44:43","statements":[{"nativeSrc":"2829:20:43","nodeType":"YulAssignment","src":"2829:20:43","value":{"arguments":[{"name":"slot","nativeSrc":"2844:4:43","nodeType":"YulIdentifier","src":"2844:4:43"}],"functionName":{"name":"tload","nativeSrc":"2838:5:43","nodeType":"YulIdentifier","src":"2838:5:43"},"nativeSrc":"2838:11:43","nodeType":"YulFunctionCall","src":"2838:11:43"},"variableNames":[{"name":"value","nativeSrc":"2829:5:43","nodeType":"YulIdentifier","src":"2829:5:43"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7140,"isOffset":false,"isSlot":false,"src":"2844:4:43","valueSize":1},{"declaration":7143,"isOffset":false,"isSlot":false,"src":"2829:5:43","valueSize":1}],"id":7145,"nodeType":"InlineAssembly","src":"2806:53:43"}]},"documentation":{"id":7137,"nodeType":"StructuredDocumentation","src":"2607:69:43","text":"@dev Load the value held at location `slot` in transient storage."},"id":7147,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2690:5:43","nodeType":"FunctionDefinition","parameters":{"id":7141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7140,"mutability":"mutable","name":"slot","nameLocation":"2712:4:43","nodeType":"VariableDeclaration","scope":7147,"src":"2696:20:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":7139,"nodeType":"UserDefinedTypeName","pathNode":{"id":7138,"name":"BooleanSlotType","nameLocations":["2696:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7048,"src":"2696:15:43"},"referencedDeclaration":7048,"src":"2696:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"2695:22:43"},"returnParameters":{"id":7144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7143,"mutability":"mutable","name":"value","nameLocation":"2746:5:43","nodeType":"VariableDeclaration","scope":7147,"src":"2741:10:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7142,"name":"bool","nodeType":"ElementaryTypeName","src":"2741:4:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2740:12:43"},"scope":7225,"src":"2681:184:43","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7157,"nodeType":"Block","src":"2998:111:43","statements":[{"AST":{"nativeSrc":"3060:43:43","nodeType":"YulBlock","src":"3060:43:43","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3081:4:43","nodeType":"YulIdentifier","src":"3081:4:43"},{"name":"value","nativeSrc":"3087:5:43","nodeType":"YulIdentifier","src":"3087:5:43"}],"functionName":{"name":"tstore","nativeSrc":"3074:6:43","nodeType":"YulIdentifier","src":"3074:6:43"},"nativeSrc":"3074:19:43","nodeType":"YulFunctionCall","src":"3074:19:43"},"nativeSrc":"3074:19:43","nodeType":"YulExpressionStatement","src":"3074:19:43"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7151,"isOffset":false,"isSlot":false,"src":"3081:4:43","valueSize":1},{"declaration":7153,"isOffset":false,"isSlot":false,"src":"3087:5:43","valueSize":1}],"id":7156,"nodeType":"InlineAssembly","src":"3051:52:43"}]},"documentation":{"id":7148,"nodeType":"StructuredDocumentation","src":"2871:63:43","text":"@dev Store `value` at location `slot` in transient storage."},"id":7158,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2948:6:43","nodeType":"FunctionDefinition","parameters":{"id":7154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7151,"mutability":"mutable","name":"slot","nameLocation":"2971:4:43","nodeType":"VariableDeclaration","scope":7158,"src":"2955:20:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":7150,"nodeType":"UserDefinedTypeName","pathNode":{"id":7149,"name":"BooleanSlotType","nameLocations":["2955:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7048,"src":"2955:15:43"},"referencedDeclaration":7048,"src":"2955:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"},{"constant":false,"id":7153,"mutability":"mutable","name":"value","nameLocation":"2982:5:43","nodeType":"VariableDeclaration","scope":7158,"src":"2977:10:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7152,"name":"bool","nodeType":"ElementaryTypeName","src":"2977:4:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2954:34:43"},"returnParameters":{"id":7155,"nodeType":"ParameterList","parameters":[],"src":"2998:0:43"},"scope":7225,"src":"2939:170:43","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7168,"nodeType":"Block","src":"3264:112:43","statements":[{"AST":{"nativeSrc":"3326:44:43","nodeType":"YulBlock","src":"3326:44:43","statements":[{"nativeSrc":"3340:20:43","nodeType":"YulAssignment","src":"3340:20:43","value":{"arguments":[{"name":"slot","nativeSrc":"3355:4:43","nodeType":"YulIdentifier","src":"3355:4:43"}],"functionName":{"name":"tload","nativeSrc":"3349:5:43","nodeType":"YulIdentifier","src":"3349:5:43"},"nativeSrc":"3349:11:43","nodeType":"YulFunctionCall","src":"3349:11:43"},"variableNames":[{"name":"value","nativeSrc":"3340:5:43","nodeType":"YulIdentifier","src":"3340:5:43"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7162,"isOffset":false,"isSlot":false,"src":"3355:4:43","valueSize":1},{"declaration":7165,"isOffset":false,"isSlot":false,"src":"3340:5:43","valueSize":1}],"id":7167,"nodeType":"InlineAssembly","src":"3317:53:43"}]},"documentation":{"id":7159,"nodeType":"StructuredDocumentation","src":"3115:69:43","text":"@dev Load the value held at location `slot` in transient storage."},"id":7169,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3198:5:43","nodeType":"FunctionDefinition","parameters":{"id":7163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7162,"mutability":"mutable","name":"slot","nameLocation":"3220:4:43","nodeType":"VariableDeclaration","scope":7169,"src":"3204:20:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7065","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":7161,"nodeType":"UserDefinedTypeName","pathNode":{"id":7160,"name":"Bytes32SlotType","nameLocations":["3204:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7065,"src":"3204:15:43"},"referencedDeclaration":7065,"src":"3204:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7065","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"3203:22:43"},"returnParameters":{"id":7166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7165,"mutability":"mutable","name":"value","nameLocation":"3257:5:43","nodeType":"VariableDeclaration","scope":7169,"src":"3249:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7164,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3249:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3248:15:43"},"scope":7225,"src":"3189:187:43","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7179,"nodeType":"Block","src":"3512:111:43","statements":[{"AST":{"nativeSrc":"3574:43:43","nodeType":"YulBlock","src":"3574:43:43","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3595:4:43","nodeType":"YulIdentifier","src":"3595:4:43"},{"name":"value","nativeSrc":"3601:5:43","nodeType":"YulIdentifier","src":"3601:5:43"}],"functionName":{"name":"tstore","nativeSrc":"3588:6:43","nodeType":"YulIdentifier","src":"3588:6:43"},"nativeSrc":"3588:19:43","nodeType":"YulFunctionCall","src":"3588:19:43"},"nativeSrc":"3588:19:43","nodeType":"YulExpressionStatement","src":"3588:19:43"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7173,"isOffset":false,"isSlot":false,"src":"3595:4:43","valueSize":1},{"declaration":7175,"isOffset":false,"isSlot":false,"src":"3601:5:43","valueSize":1}],"id":7178,"nodeType":"InlineAssembly","src":"3565:52:43"}]},"documentation":{"id":7170,"nodeType":"StructuredDocumentation","src":"3382:63:43","text":"@dev Store `value` at location `slot` in transient storage."},"id":7180,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3459:6:43","nodeType":"FunctionDefinition","parameters":{"id":7176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7173,"mutability":"mutable","name":"slot","nameLocation":"3482:4:43","nodeType":"VariableDeclaration","scope":7180,"src":"3466:20:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7065","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":7172,"nodeType":"UserDefinedTypeName","pathNode":{"id":7171,"name":"Bytes32SlotType","nameLocations":["3466:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7065,"src":"3466:15:43"},"referencedDeclaration":7065,"src":"3466:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7065","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"},{"constant":false,"id":7175,"mutability":"mutable","name":"value","nameLocation":"3496:5:43","nodeType":"VariableDeclaration","scope":7180,"src":"3488:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7174,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3488:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3465:37:43"},"returnParameters":{"id":7177,"nodeType":"ParameterList","parameters":[],"src":"3512:0:43"},"scope":7225,"src":"3450:173:43","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7190,"nodeType":"Block","src":"3778:112:43","statements":[{"AST":{"nativeSrc":"3840:44:43","nodeType":"YulBlock","src":"3840:44:43","statements":[{"nativeSrc":"3854:20:43","nodeType":"YulAssignment","src":"3854:20:43","value":{"arguments":[{"name":"slot","nativeSrc":"3869:4:43","nodeType":"YulIdentifier","src":"3869:4:43"}],"functionName":{"name":"tload","nativeSrc":"3863:5:43","nodeType":"YulIdentifier","src":"3863:5:43"},"nativeSrc":"3863:11:43","nodeType":"YulFunctionCall","src":"3863:11:43"},"variableNames":[{"name":"value","nativeSrc":"3854:5:43","nodeType":"YulIdentifier","src":"3854:5:43"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7184,"isOffset":false,"isSlot":false,"src":"3869:4:43","valueSize":1},{"declaration":7187,"isOffset":false,"isSlot":false,"src":"3854:5:43","valueSize":1}],"id":7189,"nodeType":"InlineAssembly","src":"3831:53:43"}]},"documentation":{"id":7181,"nodeType":"StructuredDocumentation","src":"3629:69:43","text":"@dev Load the value held at location `slot` in transient storage."},"id":7191,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3712:5:43","nodeType":"FunctionDefinition","parameters":{"id":7185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7184,"mutability":"mutable","name":"slot","nameLocation":"3734:4:43","nodeType":"VariableDeclaration","scope":7191,"src":"3718:20:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7082","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":7183,"nodeType":"UserDefinedTypeName","pathNode":{"id":7182,"name":"Uint256SlotType","nameLocations":["3718:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7082,"src":"3718:15:43"},"referencedDeclaration":7082,"src":"3718:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7082","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"3717:22:43"},"returnParameters":{"id":7188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7187,"mutability":"mutable","name":"value","nameLocation":"3771:5:43","nodeType":"VariableDeclaration","scope":7191,"src":"3763:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7186,"name":"uint256","nodeType":"ElementaryTypeName","src":"3763:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3762:15:43"},"scope":7225,"src":"3703:187:43","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7201,"nodeType":"Block","src":"4026:111:43","statements":[{"AST":{"nativeSrc":"4088:43:43","nodeType":"YulBlock","src":"4088:43:43","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4109:4:43","nodeType":"YulIdentifier","src":"4109:4:43"},{"name":"value","nativeSrc":"4115:5:43","nodeType":"YulIdentifier","src":"4115:5:43"}],"functionName":{"name":"tstore","nativeSrc":"4102:6:43","nodeType":"YulIdentifier","src":"4102:6:43"},"nativeSrc":"4102:19:43","nodeType":"YulFunctionCall","src":"4102:19:43"},"nativeSrc":"4102:19:43","nodeType":"YulExpressionStatement","src":"4102:19:43"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7195,"isOffset":false,"isSlot":false,"src":"4109:4:43","valueSize":1},{"declaration":7197,"isOffset":false,"isSlot":false,"src":"4115:5:43","valueSize":1}],"id":7200,"nodeType":"InlineAssembly","src":"4079:52:43"}]},"documentation":{"id":7192,"nodeType":"StructuredDocumentation","src":"3896:63:43","text":"@dev Store `value` at location `slot` in transient storage."},"id":7202,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3973:6:43","nodeType":"FunctionDefinition","parameters":{"id":7198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7195,"mutability":"mutable","name":"slot","nameLocation":"3996:4:43","nodeType":"VariableDeclaration","scope":7202,"src":"3980:20:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7082","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":7194,"nodeType":"UserDefinedTypeName","pathNode":{"id":7193,"name":"Uint256SlotType","nameLocations":["3980:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7082,"src":"3980:15:43"},"referencedDeclaration":7082,"src":"3980:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7082","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"},{"constant":false,"id":7197,"mutability":"mutable","name":"value","nameLocation":"4010:5:43","nodeType":"VariableDeclaration","scope":7202,"src":"4002:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7196,"name":"uint256","nodeType":"ElementaryTypeName","src":"4002:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3979:37:43"},"returnParameters":{"id":7199,"nodeType":"ParameterList","parameters":[],"src":"4026:0:43"},"scope":7225,"src":"3964:173:43","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7212,"nodeType":"Block","src":"4290:112:43","statements":[{"AST":{"nativeSrc":"4352:44:43","nodeType":"YulBlock","src":"4352:44:43","statements":[{"nativeSrc":"4366:20:43","nodeType":"YulAssignment","src":"4366:20:43","value":{"arguments":[{"name":"slot","nativeSrc":"4381:4:43","nodeType":"YulIdentifier","src":"4381:4:43"}],"functionName":{"name":"tload","nativeSrc":"4375:5:43","nodeType":"YulIdentifier","src":"4375:5:43"},"nativeSrc":"4375:11:43","nodeType":"YulFunctionCall","src":"4375:11:43"},"variableNames":[{"name":"value","nativeSrc":"4366:5:43","nodeType":"YulIdentifier","src":"4366:5:43"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7206,"isOffset":false,"isSlot":false,"src":"4381:4:43","valueSize":1},{"declaration":7209,"isOffset":false,"isSlot":false,"src":"4366:5:43","valueSize":1}],"id":7211,"nodeType":"InlineAssembly","src":"4343:53:43"}]},"documentation":{"id":7203,"nodeType":"StructuredDocumentation","src":"4143:69:43","text":"@dev Load the value held at location `slot` in transient storage."},"id":7213,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"4226:5:43","nodeType":"FunctionDefinition","parameters":{"id":7207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7206,"mutability":"mutable","name":"slot","nameLocation":"4247:4:43","nodeType":"VariableDeclaration","scope":7213,"src":"4232:19:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7099","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":7205,"nodeType":"UserDefinedTypeName","pathNode":{"id":7204,"name":"Int256SlotType","nameLocations":["4232:14:43"],"nodeType":"IdentifierPath","referencedDeclaration":7099,"src":"4232:14:43"},"referencedDeclaration":7099,"src":"4232:14:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7099","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"4231:21:43"},"returnParameters":{"id":7210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7209,"mutability":"mutable","name":"value","nameLocation":"4283:5:43","nodeType":"VariableDeclaration","scope":7213,"src":"4276:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7208,"name":"int256","nodeType":"ElementaryTypeName","src":"4276:6:43","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4275:14:43"},"scope":7225,"src":"4217:185:43","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7223,"nodeType":"Block","src":"4536:111:43","statements":[{"AST":{"nativeSrc":"4598:43:43","nodeType":"YulBlock","src":"4598:43:43","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4619:4:43","nodeType":"YulIdentifier","src":"4619:4:43"},{"name":"value","nativeSrc":"4625:5:43","nodeType":"YulIdentifier","src":"4625:5:43"}],"functionName":{"name":"tstore","nativeSrc":"4612:6:43","nodeType":"YulIdentifier","src":"4612:6:43"},"nativeSrc":"4612:19:43","nodeType":"YulFunctionCall","src":"4612:19:43"},"nativeSrc":"4612:19:43","nodeType":"YulExpressionStatement","src":"4612:19:43"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7217,"isOffset":false,"isSlot":false,"src":"4619:4:43","valueSize":1},{"declaration":7219,"isOffset":false,"isSlot":false,"src":"4625:5:43","valueSize":1}],"id":7222,"nodeType":"InlineAssembly","src":"4589:52:43"}]},"documentation":{"id":7214,"nodeType":"StructuredDocumentation","src":"4408:63:43","text":"@dev Store `value` at location `slot` in transient storage."},"id":7224,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"4485:6:43","nodeType":"FunctionDefinition","parameters":{"id":7220,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7217,"mutability":"mutable","name":"slot","nameLocation":"4507:4:43","nodeType":"VariableDeclaration","scope":7224,"src":"4492:19:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7099","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":7216,"nodeType":"UserDefinedTypeName","pathNode":{"id":7215,"name":"Int256SlotType","nameLocations":["4492:14:43"],"nodeType":"IdentifierPath","referencedDeclaration":7099,"src":"4492:14:43"},"referencedDeclaration":7099,"src":"4492:14:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7099","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"},{"constant":false,"id":7219,"mutability":"mutable","name":"value","nameLocation":"4520:5:43","nodeType":"VariableDeclaration","scope":7224,"src":"4513:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7218,"name":"int256","nodeType":"ElementaryTypeName","src":"4513:6:43","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4491:35:43"},"returnParameters":{"id":7221,"nodeType":"ParameterList","parameters":[],"src":"4536:0:43"},"scope":7225,"src":"4476:171:43","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":7226,"src":"278:4371:43","usedErrors":[],"usedEvents":[]}],"src":"33:4617:43"},"id":43},"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol","exportedSymbols":{"ERC20":[10498],"ERC20TestToken":[7343]},"id":7344,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":7227,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:44"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/ERC20.sol","file":"@openzeppelin/contracts/token/ERC20/ERC20.sol","id":7229,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7344,"sourceUnit":10499,"src":"72:70:44","symbolAliases":[{"foreign":{"id":7228,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10498,"src":"81:5:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":7230,"name":"ERC20","nameLocations":["171:5:44"],"nodeType":"IdentifierPath","referencedDeclaration":10498,"src":"171:5:44"},"id":7231,"nodeType":"InheritanceSpecifier","src":"171:5:44"}],"canonicalName":"ERC20TestToken","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":7343,"linearizedBaseContracts":[7343,10498,9888,10602,10576,12366],"name":"ERC20TestToken","nameLocation":"153:14:44","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":7233,"mutability":"immutable","name":"_decimals","nameLocation":"207:9:44","nodeType":"VariableDeclaration","scope":7343,"src":"183:33:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7232,"name":"uint8","nodeType":"ElementaryTypeName","src":"183:5:44","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"private"},{"documentation":{"id":7234,"nodeType":"StructuredDocumentation","src":"223:57:44","text":"@dev Simulate tokens that don't allow zero transfers."},"errorSelector":"10cadee3","id":7236,"name":"ZeroTransfer","nameLocation":"291:12:44","nodeType":"ErrorDefinition","parameters":{"id":7235,"nodeType":"ParameterList","parameters":[],"src":"303:2:44"},"src":"285:21:44"},{"body":{"id":7253,"nodeType":"Block","src":"403:38:44","statements":[{"expression":{"id":7251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7249,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"413:9:44","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7250,"name":"decimals_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7242,"src":"425:9:44","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"413:21:44","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":7252,"nodeType":"ExpressionStatement","src":"413:21:44"}]},"id":7254,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":7245,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7238,"src":"389:4:44","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":7246,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7240,"src":"395:6:44","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":7247,"kind":"baseConstructorSpecifier","modifierName":{"id":7244,"name":"ERC20","nameLocations":["383:5:44"],"nodeType":"IdentifierPath","referencedDeclaration":10498,"src":"383:5:44"},"nodeType":"ModifierInvocation","src":"383:19:44"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":7243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7238,"mutability":"mutable","name":"name","nameLocation":"338:4:44","nodeType":"VariableDeclaration","scope":7254,"src":"324:18:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7237,"name":"string","nodeType":"ElementaryTypeName","src":"324:6:44","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":7240,"mutability":"mutable","name":"symbol","nameLocation":"358:6:44","nodeType":"VariableDeclaration","scope":7254,"src":"344:20:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7239,"name":"string","nodeType":"ElementaryTypeName","src":"344:6:44","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":7242,"mutability":"mutable","name":"decimals_","nameLocation":"372:9:44","nodeType":"VariableDeclaration","scope":7254,"src":"366:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7241,"name":"uint8","nodeType":"ElementaryTypeName","src":"366:5:44","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"323:59:44"},"returnParameters":{"id":7248,"nodeType":"ParameterList","parameters":[],"src":"403:0:44"},"scope":7343,"src":"312:129:44","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[10062],"body":{"id":7262,"nodeType":"Block","src":"504:33:44","statements":[{"expression":{"id":7260,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"521:9:44","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":7259,"id":7261,"nodeType":"Return","src":"514:16:44"}]},"functionSelector":"313ce567","id":7263,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"456:8:44","nodeType":"FunctionDefinition","overrides":{"id":7256,"nodeType":"OverrideSpecifier","overrides":[],"src":"479:8:44"},"parameters":{"id":7255,"nodeType":"ParameterList","parameters":[],"src":"464:2:44"},"returnParameters":{"id":7259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7258,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7263,"src":"497:5:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7257,"name":"uint8","nodeType":"ElementaryTypeName","src":"497:5:44","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"496:7:44"},"scope":7343,"src":"447:90:44","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":7275,"nodeType":"Block","src":"601:41:44","statements":[{"expression":{"arguments":[{"id":7271,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7265,"src":"617:9:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7272,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7267,"src":"628:6:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7270,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10338,"src":"611:5:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":7273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"611:24:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7274,"nodeType":"ExpressionStatement","src":"611:24:44"}]},"functionSelector":"40c10f19","id":7276,"implemented":true,"kind":"function","modifiers":[],"name":"mint","nameLocation":"552:4:44","nodeType":"FunctionDefinition","parameters":{"id":7268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7265,"mutability":"mutable","name":"recipient","nameLocation":"565:9:44","nodeType":"VariableDeclaration","scope":7276,"src":"557:17:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7264,"name":"address","nodeType":"ElementaryTypeName","src":"557:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7267,"mutability":"mutable","name":"amount","nameLocation":"584:6:44","nodeType":"VariableDeclaration","scope":7276,"src":"576:14:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7266,"name":"uint256","nodeType":"ElementaryTypeName","src":"576:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"556:35:44"},"returnParameters":{"id":7269,"nodeType":"ParameterList","parameters":[],"src":"601:0:44"},"scope":7343,"src":"543:99:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7288,"nodeType":"Block","src":"703:38:44","statements":[{"expression":{"arguments":[{"id":7284,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7278,"src":"719:6:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7285,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7280,"src":"727:6:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7283,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10371,"src":"713:5:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":7286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"713:21:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7287,"nodeType":"ExpressionStatement","src":"713:21:44"}]},"functionSelector":"9dc29fac","id":7289,"implemented":true,"kind":"function","modifiers":[],"name":"burn","nameLocation":"657:4:44","nodeType":"FunctionDefinition","parameters":{"id":7281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7278,"mutability":"mutable","name":"sender","nameLocation":"670:6:44","nodeType":"VariableDeclaration","scope":7289,"src":"662:14:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7277,"name":"address","nodeType":"ElementaryTypeName","src":"662:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7280,"mutability":"mutable","name":"amount","nameLocation":"686:6:44","nodeType":"VariableDeclaration","scope":7289,"src":"678:14:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7279,"name":"uint256","nodeType":"ElementaryTypeName","src":"678:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"661:32:44"},"returnParameters":{"id":7282,"nodeType":"ParameterList","parameters":[],"src":"703:0:44"},"scope":7343,"src":"648:93:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[10108],"body":{"id":7313,"nodeType":"Block","src":"823:121:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7299,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7293,"src":"837:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7300,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"846:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"837:10:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7306,"nodeType":"IfStatement","src":"833:62:44","trueBody":{"id":7305,"nodeType":"Block","src":"849:46:44","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7302,"name":"ZeroTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7236,"src":"870:12:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"870:14:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7304,"nodeType":"RevertStatement","src":"863:21:44"}]}},{"expression":{"arguments":[{"id":7309,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7291,"src":"927:2:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7310,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7293,"src":"931:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7307,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"912:5:44","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ERC20TestToken_$7343_$","typeString":"type(contract super ERC20TestToken)"}},"id":7308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"918:8:44","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":10108,"src":"912:14:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) returns (bool)"}},"id":7311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"912:25:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7298,"id":7312,"nodeType":"Return","src":"905:32:44"}]},"functionSelector":"a9059cbb","id":7314,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"756:8:44","nodeType":"FunctionDefinition","overrides":{"id":7295,"nodeType":"OverrideSpecifier","overrides":[],"src":"799:8:44"},"parameters":{"id":7294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7291,"mutability":"mutable","name":"to","nameLocation":"773:2:44","nodeType":"VariableDeclaration","scope":7314,"src":"765:10:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7290,"name":"address","nodeType":"ElementaryTypeName","src":"765:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7293,"mutability":"mutable","name":"value","nameLocation":"785:5:44","nodeType":"VariableDeclaration","scope":7314,"src":"777:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7292,"name":"uint256","nodeType":"ElementaryTypeName","src":"777:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"764:27:44"},"returnParameters":{"id":7298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7297,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7314,"src":"817:4:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7296,"name":"bool","nodeType":"ElementaryTypeName","src":"817:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"816:6:44"},"scope":7343,"src":"747:197:44","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[10181],"body":{"id":7341,"nodeType":"Block","src":"1044:131:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7326,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7320,"src":"1058:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1067:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1058:10:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7333,"nodeType":"IfStatement","src":"1054:62:44","trueBody":{"id":7332,"nodeType":"Block","src":"1070:46:44","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7329,"name":"ZeroTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7236,"src":"1091:12:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1091:14:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7331,"nodeType":"RevertStatement","src":"1084:21:44"}]}},{"expression":{"arguments":[{"id":7336,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7316,"src":"1152:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7337,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7318,"src":"1158:2:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7338,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7320,"src":"1162:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7334,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"1133:5:44","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ERC20TestToken_$7343_$","typeString":"type(contract super ERC20TestToken)"}},"id":7335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1139:12:44","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":10181,"src":"1133:18:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) returns (bool)"}},"id":7339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1133:35:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7325,"id":7340,"nodeType":"Return","src":"1126:42:44"}]},"functionSelector":"23b872dd","id":7342,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"959:12:44","nodeType":"FunctionDefinition","overrides":{"id":7322,"nodeType":"OverrideSpecifier","overrides":[],"src":"1020:8:44"},"parameters":{"id":7321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7316,"mutability":"mutable","name":"from","nameLocation":"980:4:44","nodeType":"VariableDeclaration","scope":7342,"src":"972:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7315,"name":"address","nodeType":"ElementaryTypeName","src":"972:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7318,"mutability":"mutable","name":"to","nameLocation":"994:2:44","nodeType":"VariableDeclaration","scope":7342,"src":"986:10:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7317,"name":"address","nodeType":"ElementaryTypeName","src":"986:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7320,"mutability":"mutable","name":"value","nameLocation":"1006:5:44","nodeType":"VariableDeclaration","scope":7342,"src":"998:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7319,"name":"uint256","nodeType":"ElementaryTypeName","src":"998:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"971:41:44"},"returnParameters":{"id":7325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7324,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7342,"src":"1038:4:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7323,"name":"bool","nodeType":"ElementaryTypeName","src":"1038:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1037:6:44"},"scope":7343,"src":"950:225:44","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":7344,"src":"144:1033:44","usedErrors":[7236,9858,9863,9868,9877,9882,9887],"usedEvents":[10510,10519]}],"src":"46:1132:44"},"id":44},"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol","exportedSymbols":{"Authentication":[4385],"CommonAuthentication":[7535],"IVault":[2545]},"id":7536,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":7345,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:45"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":7347,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7536,"sourceUnit":2546,"src":"72:81:45","symbolAliases":[{"foreign":{"id":7346,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"81:6:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","id":7349,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7536,"sourceUnit":4386,"src":"154:103:45","symbolAliases":[{"foreign":{"id":7348,"name":"Authentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4385,"src":"163:14:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":7351,"name":"Authentication","nameLocations":["390:14:45"],"nodeType":"IdentifierPath","referencedDeclaration":4385,"src":"390:14:45"},"id":7352,"nodeType":"InheritanceSpecifier","src":"390:14:45"}],"canonicalName":"CommonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":7350,"nodeType":"StructuredDocumentation","src":"259:89:45","text":"@dev Base contract for performing access control on external functions within pools."},"fullyImplemented":true,"id":7535,"linearizedBaseContracts":[7535,4385,14],"name":"CommonAuthentication","nameLocation":"366:20:45","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7353,"nodeType":"StructuredDocumentation","src":"411:36:45","text":"@dev Vault cannot be address(0)."},"errorSelector":"c8e28160","id":7355,"name":"VaultNotSet","nameLocation":"458:11:45","nodeType":"ErrorDefinition","parameters":{"id":7354,"nodeType":"ParameterList","parameters":[],"src":"469:2:45"},"src":"452:20:45"},{"constant":false,"id":7358,"mutability":"immutable","name":"_vault","nameLocation":"503:6:45","nodeType":"VariableDeclaration","scope":7535,"src":"478:31:45","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":7357,"nodeType":"UserDefinedTypeName","pathNode":{"id":7356,"name":"IVault","nameLocations":["478:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"478:6:45"},"referencedDeclaration":2545,"src":"478:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"private"},{"body":{"id":7377,"nodeType":"Block","src":"667:161:45","statements":[{"assignments":[7364],"declarations":[{"constant":false,"id":7364,"mutability":"mutable","name":"roleAddress","nameLocation":"685:11:45","nodeType":"VariableDeclaration","scope":7377,"src":"677:19:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7363,"name":"address","nodeType":"ElementaryTypeName","src":"677:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":7370,"initialValue":{"expression":{"arguments":[{"id":7367,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7361,"src":"726:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7365,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7358,"src":"699:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":7366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"706:19:45","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":3776,"src":"699:26:45","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$4111_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":7368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"699:32:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":7369,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"732:14:45","memberName":"swapFeeManager","nodeType":"MemberAccess","referencedDeclaration":4108,"src":"699:47:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"677:69:45"},{"expression":{"arguments":[{"id":7372,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7361,"src":"792:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7373,"name":"roleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7364,"src":"798:11:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":7371,"name":"_ensureAuthenticatedByExclusiveRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7503,"src":"756:35:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) view"}},"id":7374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"756:54:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7375,"nodeType":"ExpressionStatement","src":"756:54:45"},{"id":7376,"nodeType":"PlaceholderStatement","src":"820:1:45"}]},"documentation":{"id":7359,"nodeType":"StructuredDocumentation","src":"516:92:45","text":"@notice Caller must be the swapFeeManager, if defined. Otherwise, default to governance."},"id":7378,"name":"onlySwapFeeManagerOrGovernance","nameLocation":"622:30:45","nodeType":"ModifierDefinition","parameters":{"id":7362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7361,"mutability":"mutable","name":"pool","nameLocation":"661:4:45","nodeType":"VariableDeclaration","scope":7378,"src":"653:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7360,"name":"address","nodeType":"ElementaryTypeName","src":"653:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"652:14:45"},"src":"613:215:45","virtual":false,"visibility":"internal"},{"body":{"id":7407,"nodeType":"Block","src":"929:120:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":7397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":7391,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7381,"src":"951:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}],"id":7390,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"943:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7389,"name":"address","nodeType":"ElementaryTypeName","src":"943:7:45","typeDescriptions":{}}},"id":7392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"943:14:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":7395,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"969:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":7394,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"961:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7393,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:45","typeDescriptions":{}}},"id":7396,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"961:10:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"943:28:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7402,"nodeType":"IfStatement","src":"939:79:45","trueBody":{"id":7401,"nodeType":"Block","src":"973:45:45","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7398,"name":"VaultNotSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7355,"src":"994:11:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"994:13:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7400,"nodeType":"RevertStatement","src":"987:20:45"}]}},{"expression":{"id":7405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7403,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7358,"src":"1028:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7404,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7381,"src":"1037:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"src":"1028:14:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":7406,"nodeType":"ExpressionStatement","src":"1028:14:45"}]},"id":7408,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":7386,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7383,"src":"906:21:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":7387,"kind":"baseConstructorSpecifier","modifierName":{"id":7385,"name":"Authentication","nameLocations":["891:14:45"],"nodeType":"IdentifierPath","referencedDeclaration":4385,"src":"891:14:45"},"nodeType":"ModifierInvocation","src":"891:37:45"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":7384,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7381,"mutability":"mutable","name":"vault","nameLocation":"853:5:45","nodeType":"VariableDeclaration","scope":7408,"src":"846:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":7380,"nodeType":"UserDefinedTypeName","pathNode":{"id":7379,"name":"IVault","nameLocations":["846:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"846:6:45"},"referencedDeclaration":2545,"src":"846:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":7383,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"868:21:45","nodeType":"VariableDeclaration","scope":7408,"src":"860:29:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7382,"name":"bytes32","nodeType":"ElementaryTypeName","src":"860:7:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"845:45:45"},"returnParameters":{"id":7388,"nodeType":"ParameterList","parameters":[],"src":"929:0:45"},"scope":7535,"src":"834:215:45","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7416,"nodeType":"Block","src":"1107:30:45","statements":[{"expression":{"id":7414,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7358,"src":"1124:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"functionReturnParameters":7413,"id":7415,"nodeType":"Return","src":"1117:13:45"}]},"id":7417,"implemented":true,"kind":"function","modifiers":[],"name":"_getVault","nameLocation":"1064:9:45","nodeType":"FunctionDefinition","parameters":{"id":7409,"nodeType":"ParameterList","parameters":[],"src":"1073:2:45"},"returnParameters":{"id":7413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7412,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7417,"src":"1099:6:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":7411,"nodeType":"UserDefinedTypeName","pathNode":{"id":7410,"name":"IVault","nameLocations":["1099:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1099:6:45"},"referencedDeclaration":2545,"src":"1099:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1098:8:45"},"scope":7535,"src":"1055:82:45","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[4384],"body":{"id":7439,"nodeType":"Block","src":"1319:88:45","statements":[{"expression":{"arguments":[{"id":7431,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7419,"src":"1370:8:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":7432,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7421,"src":"1380:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":7435,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1394:4:45","typeDescriptions":{"typeIdentifier":"t_contract$_CommonAuthentication_$7535","typeString":"contract CommonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CommonAuthentication_$7535","typeString":"contract CommonAuthentication"}],"id":7434,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1386:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7433,"name":"address","nodeType":"ElementaryTypeName","src":"1386:7:45","typeDescriptions":{}}},"id":7436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1386:13:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7427,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7358,"src":"1336:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":7428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1343:13:45","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":3859,"src":"1336:20:45","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1341_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":7429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1336:22:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"id":7430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1359:10:45","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":1340,"src":"1336:33:45","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":7437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1336:64:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7426,"id":7438,"nodeType":"Return","src":"1329:71:45"}]},"id":7440,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1237:11:45","nodeType":"FunctionDefinition","overrides":{"id":7423,"nodeType":"OverrideSpecifier","overrides":[],"src":"1295:8:45"},"parameters":{"id":7422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7419,"mutability":"mutable","name":"actionId","nameLocation":"1257:8:45","nodeType":"VariableDeclaration","scope":7440,"src":"1249:16:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7418,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1249:7:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7421,"mutability":"mutable","name":"user","nameLocation":"1275:4:45","nodeType":"VariableDeclaration","scope":7440,"src":"1267:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7420,"name":"address","nodeType":"ElementaryTypeName","src":"1267:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1248:32:45"},"returnParameters":{"id":7426,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7425,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7440,"src":"1313:4:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7424,"name":"bool","nodeType":"ElementaryTypeName","src":"1313:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1312:6:45"},"scope":7535,"src":"1228:179:45","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7460,"nodeType":"Block","src":"1513:83:45","statements":[{"expression":{"arguments":[{"id":7455,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7442,"src":"1564:8:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":7456,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7444,"src":"1574:7:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7457,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7446,"src":"1583:5:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7451,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7358,"src":"1530:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":7452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1537:13:45","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":3859,"src":"1530:20:45","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1341_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":7453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1530:22:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"id":7454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1553:10:45","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":1340,"src":"1530:33:45","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":7458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1530:59:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7450,"id":7459,"nodeType":"Return","src":"1523:66:45"}]},"id":7461,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1422:11:45","nodeType":"FunctionDefinition","parameters":{"id":7447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7442,"mutability":"mutable","name":"actionId","nameLocation":"1442:8:45","nodeType":"VariableDeclaration","scope":7461,"src":"1434:16:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7441,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1434:7:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7444,"mutability":"mutable","name":"account","nameLocation":"1460:7:45","nodeType":"VariableDeclaration","scope":7461,"src":"1452:15:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7443,"name":"address","nodeType":"ElementaryTypeName","src":"1452:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7446,"mutability":"mutable","name":"where","nameLocation":"1477:5:45","nodeType":"VariableDeclaration","scope":7461,"src":"1469:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7445,"name":"address","nodeType":"ElementaryTypeName","src":"1469:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1433:50:45"},"returnParameters":{"id":7450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7449,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7461,"src":"1507:4:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7448,"name":"bool","nodeType":"ElementaryTypeName","src":"1507:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1506:6:45"},"scope":7535,"src":"1413:183:45","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7502,"nodeType":"Block","src":"1803:339:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":7474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7469,"name":"roleAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7466,"src":"1817:11:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":7472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1840:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":7471,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1832:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7470,"name":"address","nodeType":"ElementaryTypeName","src":"1832:7:45","typeDescriptions":{}}},"id":7473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1832:10:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1817:25:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":7495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7492,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2059:3:45","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2063:6:45","memberName":"sender","nodeType":"MemberAccess","src":"2059:10:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":7494,"name":"roleAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7466,"src":"2073:11:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2059:25:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7500,"nodeType":"IfStatement","src":"2055:81:45","trueBody":{"id":7499,"nodeType":"Block","src":"2086:50:45","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7496,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"2107:16:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2107:18:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7498,"nodeType":"RevertStatement","src":"2100:25:45"}]}},"id":7501,"nodeType":"IfStatement","src":"1813:323:45","trueBody":{"id":7491,"nodeType":"Block","src":"1844:205:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"expression":{"id":7477,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1942:3:45","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1946:3:45","memberName":"sig","nodeType":"MemberAccess","src":"1942:7:45","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":7476,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4374,"src":"1930:11:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":7479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1930:20:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":7480,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1952:3:45","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1956:6:45","memberName":"sender","nodeType":"MemberAccess","src":"1952:10:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7482,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7464,"src":"1964:5:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":7475,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[7440,7461],"referencedDeclaration":7461,"src":"1918:11:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view returns (bool)"}},"id":7483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1918:52:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":7484,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1974:5:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1918:61:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7490,"nodeType":"IfStatement","src":"1914:125:45","trueBody":{"id":7489,"nodeType":"Block","src":"1981:58:45","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7486,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"2006:16:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2006:18:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7488,"nodeType":"RevertStatement","src":"1999:25:45"}]}}]}}]},"documentation":{"id":7462,"nodeType":"StructuredDocumentation","src":"1602:101:45","text":"@dev Ensure the sender is the roleAccount, or default to governance if roleAccount is address(0)."},"id":7503,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureAuthenticatedByExclusiveRole","nameLocation":"1717:35:45","nodeType":"FunctionDefinition","parameters":{"id":7467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7464,"mutability":"mutable","name":"where","nameLocation":"1761:5:45","nodeType":"VariableDeclaration","scope":7503,"src":"1753:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7463,"name":"address","nodeType":"ElementaryTypeName","src":"1753:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7466,"mutability":"mutable","name":"roleAccount","nameLocation":"1776:11:45","nodeType":"VariableDeclaration","scope":7503,"src":"1768:19:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7465,"name":"address","nodeType":"ElementaryTypeName","src":"1768:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1752:36:45"},"returnParameters":{"id":7468,"nodeType":"ParameterList","parameters":[],"src":"1803:0:45"},"scope":7535,"src":"1708:434:45","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7533,"nodeType":"Block","src":"2341:352:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":7514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7511,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2444:3:45","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2448:6:45","memberName":"sender","nodeType":"MemberAccess","src":"2444:10:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":7513,"name":"roleAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7508,"src":"2458:11:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2444:25:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7532,"nodeType":"IfStatement","src":"2440:180:45","trueBody":{"id":7531,"nodeType":"Block","src":"2471:149:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"expression":{"id":7517,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2513:3:45","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2517:3:45","memberName":"sig","nodeType":"MemberAccess","src":"2513:7:45","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":7516,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4374,"src":"2501:11:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":7519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2501:20:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":7520,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2523:3:45","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2527:6:45","memberName":"sender","nodeType":"MemberAccess","src":"2523:10:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7522,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7506,"src":"2535:5:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":7515,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[7440,7461],"referencedDeclaration":7461,"src":"2489:11:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view returns (bool)"}},"id":7523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2489:52:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":7524,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2545:5:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"2489:61:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7530,"nodeType":"IfStatement","src":"2485:125:45","trueBody":{"id":7529,"nodeType":"Block","src":"2552:58:45","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7526,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"2577:16:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2577:18:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7528,"nodeType":"RevertStatement","src":"2570:25:45"}]}}]}}]},"documentation":{"id":7504,"nodeType":"StructuredDocumentation","src":"2148:102:45","text":"@dev Ensure the sender is either the role manager, or is authorized by governance (non-exclusive)."},"id":7534,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureAuthenticatedByRole","nameLocation":"2264:26:45","nodeType":"FunctionDefinition","parameters":{"id":7509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7506,"mutability":"mutable","name":"where","nameLocation":"2299:5:45","nodeType":"VariableDeclaration","scope":7534,"src":"2291:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7505,"name":"address","nodeType":"ElementaryTypeName","src":"2291:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7508,"mutability":"mutable","name":"roleAccount","nameLocation":"2314:11:45","nodeType":"VariableDeclaration","scope":7534,"src":"2306:19:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7507,"name":"address","nodeType":"ElementaryTypeName","src":"2306:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2290:36:45"},"returnParameters":{"id":7510,"nodeType":"ParameterList","parameters":[],"src":"2341:0:45"},"scope":7535,"src":"2255:438:45","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":7536,"src":"348:2347:45","usedErrors":[5,7355],"usedEvents":[]}],"src":"46:2650:45"},"id":45},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","exportedSymbols":{"FEE_SCALING_FACTOR":[4302],"FixedPoint":[5298],"IERC20":[10576],"IProtocolFeeController":[1955],"IVault":[2545],"IVaultErrors":[3202],"MAX_FEE_PERCENTAGE":[4305],"PoolRoleAccounts":[4111],"ProtocolFeeController":[9230],"ReentrancyGuardTransient":[7012],"SafeCast":[16092],"SafeERC20":[11066],"SingletonAuthentication":[9289],"VaultGuard":[9338]},"id":9231,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":7537,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:46"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":7539,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":11067,"src":"72:84:46","symbolAliases":[{"foreign":{"id":7538,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11066,"src":"81:9:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":7541,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":16093,"src":"157:75:46","symbolAliases":[{"foreign":{"id":7540,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"166:8:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":7543,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":10577,"src":"233:72:46","symbolAliases":[{"foreign":{"id":7542,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"242:6:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":7545,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":1956,"src":"307:113:46","symbolAliases":[{"foreign":{"id":7544,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"316:22:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":7547,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":3203,"src":"421:93:46","symbolAliases":[{"foreign":{"id":7546,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"430:12:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":7549,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":2546,"src":"515:81:46","symbolAliases":[{"foreign":{"id":7548,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"524:6:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":7553,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":4306,"src":"597:147:46","symbolAliases":[{"foreign":{"id":7550,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4302,"src":"610:18:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":7551,"name":"MAX_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4305,"src":"634:18:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":7552,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4111,"src":"658:16:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":7555,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":7013,"src":"746:132:46","symbolAliases":[{"foreign":{"id":7554,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7012,"src":"759:24:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":7557,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":5299,"src":"879:92:46","symbolAliases":[{"foreign":{"id":7556,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5298,"src":"888:10:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"./SingletonAuthentication.sol","id":7559,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":9290,"src":"973:72:46","symbolAliases":[{"foreign":{"id":7558,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9289,"src":"982:23:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","file":"./VaultGuard.sol","id":7561,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":9339,"src":"1046:46:46","symbolAliases":[{"foreign":{"id":7560,"name":"VaultGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9338,"src":"1055:10:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":7563,"name":"IProtocolFeeController","nameLocations":["3158:22:46"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"3158:22:46"},"id":7564,"nodeType":"InheritanceSpecifier","src":"3158:22:46"},{"baseName":{"id":7565,"name":"SingletonAuthentication","nameLocations":["3186:23:46"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"3186:23:46"},"id":7566,"nodeType":"InheritanceSpecifier","src":"3186:23:46"},{"baseName":{"id":7567,"name":"ReentrancyGuardTransient","nameLocations":["3215:24:46"],"nodeType":"IdentifierPath","referencedDeclaration":7012,"src":"3215:24:46"},"id":7568,"nodeType":"InheritanceSpecifier","src":"3215:24:46"},{"baseName":{"id":7569,"name":"VaultGuard","nameLocations":["3245:10:46"],"nodeType":"IdentifierPath","referencedDeclaration":9338,"src":"3245:10:46"},"id":7570,"nodeType":"InheritanceSpecifier","src":"3245:10:46"}],"canonicalName":"ProtocolFeeController","contractDependencies":[],"contractKind":"contract","documentation":{"id":7562,"nodeType":"StructuredDocumentation","src":"1094:2025:46","text":" @notice Helper contract to manage protocol and creator fees outside the Vault.\n @dev This contract stores global default protocol swap and yield fees, and also tracks the values of those fees\n for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but\n pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`).\n The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows\n the component fee percentages, and how to compute the aggregate from the components. This is done for performance\n reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \"cut\", and stores the\n fee amounts separately from the pool balances.\n The pool creator fees are \"net\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee\n percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided\n between the pool creator and the LPs.\n There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this\n contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any\n time by governance and the pool creator, respectively.\n Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero\n if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator\n fees are computed \"net\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible.\n A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool\n creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs.\n This contract is deployed with the Vault, but can be changed by governance."},"fullyImplemented":true,"id":9230,"linearizedBaseContracts":[9230,9338,7012,9289,7535,4385,14,1955],"name":"ProtocolFeeController","nameLocation":"3129:21:46","nodeType":"ContractDefinition","nodes":[{"global":false,"id":7573,"libraryName":{"id":7571,"name":"FixedPoint","nameLocations":["3268:10:46"],"nodeType":"IdentifierPath","referencedDeclaration":5298,"src":"3268:10:46"},"nodeType":"UsingForDirective","src":"3262:29:46","typeName":{"id":7572,"name":"uint256","nodeType":"ElementaryTypeName","src":"3283:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":7577,"libraryName":{"id":7574,"name":"SafeERC20","nameLocations":["3302:9:46"],"nodeType":"IdentifierPath","referencedDeclaration":11066,"src":"3302:9:46"},"nodeType":"UsingForDirective","src":"3296:27:46","typeName":{"id":7576,"nodeType":"UserDefinedTypeName","pathNode":{"id":7575,"name":"IERC20","nameLocations":["3316:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3316:6:46"},"referencedDeclaration":10576,"src":"3316:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}},{"global":false,"id":7579,"libraryName":{"id":7578,"name":"SafeCast","nameLocations":["3334:8:46"],"nodeType":"IdentifierPath","referencedDeclaration":16092,"src":"3334:8:46"},"nodeType":"UsingForDirective","src":"3328:21:46"},{"canonicalName":"ProtocolFeeController.ProtocolFeeType","id":7582,"members":[{"id":7580,"name":"SWAP","nameLocation":"3386:4:46","nodeType":"EnumValue","src":"3386:4:46"},{"id":7581,"name":"YIELD","nameLocation":"3400:5:46","nodeType":"EnumValue","src":"3400:5:46"}],"name":"ProtocolFeeType","nameLocation":"3360:15:46","nodeType":"EnumDefinition","src":"3355:56:46"},{"canonicalName":"ProtocolFeeController.PoolFeeConfig","documentation":{"id":7583,"nodeType":"StructuredDocumentation","src":"3417:1063:46","text":" @notice Fee configuration stored in the swap and yield fee mappings.\n @dev Instead of storing only the fee in the mapping, also store a flag to indicate whether the fee has been\n set by governance through a permissioned call. (The fee is stored in 64-bits, so that the struct fits\n within a single slot.)\n We know the percentage is an 18-decimal FP value, which only takes 60 bits, so it's guaranteed to fit,\n and we can do simple casts to truncate the high bits without needed SafeCast.\n We want to enable permissionless updates for pools, so that it is less onerous to update potentially\n hundreds of pools if the global protocol fees change. However, we don't want to overwrite pools that\n have had their fee percentages manually set by the DAO (i.e., after off-chain negotiation and agreement).\n @param feePercentage The raw swap or yield fee percentage\n @param isOverride When set, this fee is controlled by governance, and cannot be changed permissionlessly"},"id":7588,"members":[{"constant":false,"id":7585,"mutability":"mutable","name":"feePercentage","nameLocation":"4523:13:46","nodeType":"VariableDeclaration","scope":7588,"src":"4516:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":7584,"name":"uint64","nodeType":"ElementaryTypeName","src":"4516:6:46","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":7587,"mutability":"mutable","name":"isOverride","nameLocation":"4551:10:46","nodeType":"VariableDeclaration","scope":7588,"src":"4546:15:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7586,"name":"bool","nodeType":"ElementaryTypeName","src":"4546:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolFeeConfig","nameLocation":"4492:13:46","nodeType":"StructDefinition","scope":9230,"src":"4485:83:46","visibility":"public"},{"constant":true,"functionSelector":"2772d156","id":7591,"mutability":"constant","name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nameLocation":"4685:32:46","nodeType":"VariableDeclaration","scope":9230,"src":"4661:64:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7589,"name":"uint256","nodeType":"ElementaryTypeName","src":"4661:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3530653136","id":7590,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4720:5:46","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"50e16"},"visibility":"public"},{"constant":true,"functionSelector":"5e32e4e8","id":7594,"mutability":"constant","name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nameLocation":"4809:33:46","nodeType":"VariableDeclaration","scope":9230,"src":"4785:65:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7592,"name":"uint256","nodeType":"ElementaryTypeName","src":"4785:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3530653136","id":7593,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4845:5:46","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"50e16"},"visibility":"public"},{"constant":true,"functionSelector":"2e1d388d","id":7597,"mutability":"constant","name":"MAX_CREATOR_FEE_PERCENTAGE","nameLocation":"4946:26:46","nodeType":"VariableDeclaration","scope":9230,"src":"4922:62:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7595,"name":"uint256","nodeType":"ElementaryTypeName","src":"4922:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e393939653136","id":7596,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4975:9:46","typeDescriptions":{"typeIdentifier":"t_rational_999990000000000000_by_1","typeString":"int_const 999990000000000000"},"value":"99.999e16"},"visibility":"public"},{"constant":false,"id":7599,"mutability":"mutable","name":"_globalProtocolSwapFeePercentage","nameLocation":"5051:32:46","nodeType":"VariableDeclaration","scope":9230,"src":"5035:48:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7598,"name":"uint256","nodeType":"ElementaryTypeName","src":"5035:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":7601,"mutability":"mutable","name":"_globalProtocolYieldFeePercentage","nameLocation":"5140:33:46","nodeType":"VariableDeclaration","scope":9230,"src":"5124:49:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7600,"name":"uint256","nodeType":"ElementaryTypeName","src":"5124:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":7606,"mutability":"mutable","name":"_poolProtocolSwapFeePercentages","nameLocation":"5356:31:46","nodeType":"VariableDeclaration","scope":9230,"src":"5294:93:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"typeName":{"id":7605,"keyName":"pool","keyNameLocation":"5310:4:46","keyType":{"id":7602,"name":"address","nodeType":"ElementaryTypeName","src":"5302:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5294:52:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"valueName":"swapFeeConfig","valueNameLocation":"5332:13:46","valueType":{"id":7604,"nodeType":"UserDefinedTypeName","pathNode":{"id":7603,"name":"PoolFeeConfig","nameLocations":["5318:13:46"],"nodeType":"IdentifierPath","referencedDeclaration":7588,"src":"5318:13:46"},"referencedDeclaration":7588,"src":"5318:13:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}}},"visibility":"internal"},{"constant":false,"id":7611,"mutability":"mutable","name":"_poolProtocolYieldFeePercentages","nameLocation":"5572:32:46","nodeType":"VariableDeclaration","scope":9230,"src":"5509:95:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"typeName":{"id":7610,"keyName":"pool","keyNameLocation":"5525:4:46","keyType":{"id":7607,"name":"address","nodeType":"ElementaryTypeName","src":"5517:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5509:53:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"valueName":"yieldFeeConfig","valueNameLocation":"5547:14:46","valueType":{"id":7609,"nodeType":"UserDefinedTypeName","pathNode":{"id":7608,"name":"PoolFeeConfig","nameLocations":["5533:13:46"],"nodeType":"IdentifierPath","referencedDeclaration":7588,"src":"5533:13:46"},"referencedDeclaration":7588,"src":"5533:13:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}}},"visibility":"internal"},{"constant":false,"id":7615,"mutability":"mutable","name":"_registeredPools","nameLocation":"5777:16:46","nodeType":"VariableDeclaration","scope":9230,"src":"5725:68:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":7614,"keyName":"pool","keyNameLocation":"5741:4:46","keyType":{"id":7612,"name":"address","nodeType":"ElementaryTypeName","src":"5733:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5725:42:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"isRegistered","valueNameLocation":"5754:12:46","valueType":{"id":7613,"name":"bool","nodeType":"ElementaryTypeName","src":"5749:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":7619,"mutability":"mutable","name":"_poolCreatorSwapFeePercentages","nameLocation":"5917:30:46","nodeType":"VariableDeclaration","scope":9230,"src":"5856:91:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":7618,"keyName":"pool","keyNameLocation":"5872:4:46","keyType":{"id":7616,"name":"address","nodeType":"ElementaryTypeName","src":"5864:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5856:51:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolCreatorSwapFee","valueNameLocation":"5888:18:46","valueType":{"id":7617,"name":"uint256","nodeType":"ElementaryTypeName","src":"5880:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":7623,"mutability":"mutable","name":"_poolCreatorYieldFeePercentages","nameLocation":"6073:31:46","nodeType":"VariableDeclaration","scope":9230,"src":"6011:93:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":7622,"keyName":"pool","keyNameLocation":"6027:4:46","keyType":{"id":7620,"name":"address","nodeType":"ElementaryTypeName","src":"6019:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6011:52:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolCreatorYieldFee","valueNameLocation":"6043:19:46","valueType":{"id":7621,"name":"uint256","nodeType":"ElementaryTypeName","src":"6035:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":7630,"mutability":"mutable","name":"_protocolFeeAmounts","nameLocation":"6290:19:46","nodeType":"VariableDeclaration","scope":9230,"src":"6209:100:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"typeName":{"id":7629,"keyName":"pool","keyNameLocation":"6225:4:46","keyType":{"id":7624,"name":"address","nodeType":"ElementaryTypeName","src":"6217:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6209:71:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":7628,"keyName":"poolToken","keyNameLocation":"6248:9:46","keyType":{"id":7626,"nodeType":"UserDefinedTypeName","pathNode":{"id":7625,"name":"IERC20","nameLocations":["6241:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6241:6:46"},"referencedDeclaration":10576,"src":"6241:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6233:46:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"feeAmount","valueNameLocation":"6269:9:46","valueType":{"id":7627,"name":"uint256","nodeType":"ElementaryTypeName","src":"6261:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"constant":false,"id":7637,"mutability":"mutable","name":"_poolCreatorFeeAmounts","nameLocation":"6505:22:46","nodeType":"VariableDeclaration","scope":9230,"src":"6424:103:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"typeName":{"id":7636,"keyName":"pool","keyNameLocation":"6440:4:46","keyType":{"id":7631,"name":"address","nodeType":"ElementaryTypeName","src":"6432:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6424:71:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":7635,"keyName":"poolToken","keyNameLocation":"6463:9:46","keyType":{"id":7633,"nodeType":"UserDefinedTypeName","pathNode":{"id":7632,"name":"IERC20","nameLocations":["6456:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6456:6:46"},"referencedDeclaration":10576,"src":"6456:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6448:46:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"feeAmount","valueNameLocation":"6484:9:46","valueType":{"id":7634,"name":"uint256","nodeType":"ElementaryTypeName","src":"6476:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"documentation":{"id":7638,"nodeType":"StructuredDocumentation","src":"6534:279:46","text":" @notice Prevent pool data from being registered more than once.\n @dev This can happen if there is an error in the migration, or if governance somehow grants permission to\n `migratePool`, which should never happen.\n @param pool The pool"},"errorSelector":"db771c80","id":7642,"name":"PoolAlreadyRegistered","nameLocation":"6824:21:46","nodeType":"ErrorDefinition","parameters":{"id":7641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7640,"mutability":"mutable","name":"pool","nameLocation":"6854:4:46","nodeType":"VariableDeclaration","scope":7642,"src":"6846:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7639,"name":"address","nodeType":"ElementaryTypeName","src":"6846:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6845:14:46"},"src":"6818:42:46"},{"documentation":{"id":7643,"nodeType":"StructuredDocumentation","src":"6866:53:46","text":"@notice Migration source cannot be this contract."},"errorSelector":"b82fd5bf","id":7645,"name":"InvalidMigrationSource","nameLocation":"6930:22:46","nodeType":"ErrorDefinition","parameters":{"id":7644,"nodeType":"ParameterList","parameters":[],"src":"6952:2:46"},"src":"6924:31:46"},{"body":{"id":7654,"nodeType":"Block","src":"7051:60:46","statements":[{"expression":{"arguments":[{"id":7650,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7647,"src":"7088:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7649,"name":"_ensureCallerIsPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8451,"src":"7061:26:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":7651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7061:32:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7652,"nodeType":"ExpressionStatement","src":"7061:32:46"},{"id":7653,"nodeType":"PlaceholderStatement","src":"7103:1:46"}]},"id":7655,"name":"onlyPoolCreator","nameLocation":"7021:15:46","nodeType":"ModifierDefinition","parameters":{"id":7648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7647,"mutability":"mutable","name":"pool","nameLocation":"7045:4:46","nodeType":"VariableDeclaration","scope":7655,"src":"7037:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7646,"name":"address","nodeType":"ElementaryTypeName","src":"7037:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7036:14:46"},"src":"7012:99:46","virtual":false,"visibility":"internal"},{"body":{"id":7672,"nodeType":"Block","src":"7234:207:46","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7659,"name":"newSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7657,"src":"7248:20:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":7660,"name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7591,"src":"7271:32:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7248:55:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7666,"nodeType":"IfStatement","src":"7244:127:46","trueBody":{"id":7665,"nodeType":"Block","src":"7305:66:46","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7662,"name":"ProtocolSwapFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1736,"src":"7326:32:46","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7326:34:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7664,"nodeType":"RevertStatement","src":"7319:41:46"}]}},{"expression":{"arguments":[{"id":7668,"name":"newSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7657,"src":"7402:20:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7667,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9229,"src":"7380:21:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":7669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7380:43:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7670,"nodeType":"ExpressionStatement","src":"7380:43:46"},{"id":7671,"nodeType":"PlaceholderStatement","src":"7433:1:46"}]},"id":7673,"name":"withValidSwapFee","nameLocation":"7187:16:46","nodeType":"ModifierDefinition","parameters":{"id":7658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7657,"mutability":"mutable","name":"newSwapFeePercentage","nameLocation":"7212:20:46","nodeType":"VariableDeclaration","scope":7673,"src":"7204:28:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7656,"name":"uint256","nodeType":"ElementaryTypeName","src":"7204:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7203:30:46"},"src":"7178:263:46","virtual":false,"visibility":"internal"},{"body":{"id":7690,"nodeType":"Block","src":"7567:211:46","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7677,"name":"newYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7675,"src":"7581:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":7678,"name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7594,"src":"7605:33:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7581:57:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7684,"nodeType":"IfStatement","src":"7577:130:46","trueBody":{"id":7683,"nodeType":"Block","src":"7640:67:46","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7680,"name":"ProtocolYieldFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1739,"src":"7661:33:46","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7661:35:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7682,"nodeType":"RevertStatement","src":"7654:42:46"}]}},{"expression":{"arguments":[{"id":7686,"name":"newYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7675,"src":"7738:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7685,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9229,"src":"7716:21:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":7687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7716:44:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7688,"nodeType":"ExpressionStatement","src":"7716:44:46"},{"id":7689,"nodeType":"PlaceholderStatement","src":"7770:1:46"}]},"id":7691,"name":"withValidYieldFee","nameLocation":"7518:17:46","nodeType":"ModifierDefinition","parameters":{"id":7676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7675,"mutability":"mutable","name":"newYieldFeePercentage","nameLocation":"7544:21:46","nodeType":"VariableDeclaration","scope":7691,"src":"7536:29:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7674,"name":"uint256","nodeType":"ElementaryTypeName","src":"7536:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7535:31:46"},"src":"7509:269:46","virtual":false,"visibility":"internal"},{"body":{"id":7704,"nodeType":"Block","src":"7854:154:46","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7695,"name":"newPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7693,"src":"7868:27:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":7696,"name":"MAX_CREATOR_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7597,"src":"7898:26:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7868:56:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7702,"nodeType":"IfStatement","src":"7864:127:46","trueBody":{"id":7701,"nodeType":"Block","src":"7926:65:46","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7698,"name":"PoolCreatorFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1754,"src":"7947:31:46","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7947:33:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7700,"nodeType":"RevertStatement","src":"7940:40:46"}]}},{"id":7703,"nodeType":"PlaceholderStatement","src":"8000:1:46"}]},"id":7705,"name":"withValidPoolCreatorFee","nameLocation":"7793:23:46","nodeType":"ModifierDefinition","parameters":{"id":7694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7693,"mutability":"mutable","name":"newPoolCreatorFeePercentage","nameLocation":"7825:27:46","nodeType":"VariableDeclaration","scope":7705,"src":"7817:35:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7692,"name":"uint256","nodeType":"ElementaryTypeName","src":"7817:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7816:37:46"},"src":"7784:224:46","virtual":false,"visibility":"internal"},{"body":{"id":7714,"nodeType":"Block","src":"8145:54:46","statements":[{"expression":{"arguments":[{"id":7710,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7707,"src":"8176:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7709,"name":"collectAggregateFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7768,"src":"8155:20:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":7711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8155:26:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7712,"nodeType":"ExpressionStatement","src":"8155:26:46"},{"id":7713,"nodeType":"PlaceholderStatement","src":"8191:1:46"}]},"id":7715,"name":"withLatestFees","nameLocation":"8116:14:46","nodeType":"ModifierDefinition","parameters":{"id":7708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7707,"mutability":"mutable","name":"pool","nameLocation":"8139:4:46","nodeType":"VariableDeclaration","scope":7715,"src":"8131:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7706,"name":"address","nodeType":"ElementaryTypeName","src":"8131:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8130:14:46"},"src":"8107:92:46","virtual":false,"visibility":"internal"},{"body":{"id":7739,"nodeType":"Block","src":"8394:163:46","statements":[{"expression":{"arguments":[{"id":7732,"name":"initialGlobalSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7720,"src":"8440:30:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7731,"name":"_setGlobalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8720,"src":"8404:35:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":7733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8404:67:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7734,"nodeType":"ExpressionStatement","src":"8404:67:46"},{"expression":{"arguments":[{"id":7736,"name":"initialGlobalYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7722,"src":"8518:31:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7735,"name":"_setGlobalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8750,"src":"8481:36:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":7737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8481:69:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7738,"nodeType":"ExpressionStatement","src":"8481:69:46"}]},"id":7740,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":7725,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7718,"src":"8367:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"id":7726,"kind":"baseConstructorSpecifier","modifierName":{"id":7724,"name":"SingletonAuthentication","nameLocations":["8343:23:46"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"8343:23:46"},"nodeType":"ModifierInvocation","src":"8343:31:46"},{"arguments":[{"id":7728,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7718,"src":"8386:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"id":7729,"kind":"baseConstructorSpecifier","modifierName":{"id":7727,"name":"VaultGuard","nameLocations":["8375:10:46"],"nodeType":"IdentifierPath","referencedDeclaration":9338,"src":"8375:10:46"},"nodeType":"ModifierInvocation","src":"8375:18:46"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":7723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7718,"mutability":"mutable","name":"vault_","nameLocation":"8233:6:46","nodeType":"VariableDeclaration","scope":7740,"src":"8226:13:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":7717,"nodeType":"UserDefinedTypeName","pathNode":{"id":7716,"name":"IVault","nameLocations":["8226:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"8226:6:46"},"referencedDeclaration":2545,"src":"8226:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":7720,"mutability":"mutable","name":"initialGlobalSwapFeePercentage","nameLocation":"8257:30:46","nodeType":"VariableDeclaration","scope":7740,"src":"8249:38:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7719,"name":"uint256","nodeType":"ElementaryTypeName","src":"8249:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7722,"mutability":"mutable","name":"initialGlobalYieldFeePercentage","nameLocation":"8305:31:46","nodeType":"VariableDeclaration","scope":7740,"src":"8297:39:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7721,"name":"uint256","nodeType":"ElementaryTypeName","src":"8297:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8216:126:46"},"returnParameters":{"id":7730,"nodeType":"ParameterList","parameters":[],"src":"8394:0:46"},"scope":9230,"src":"8205:352:46","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1761],"body":{"id":7749,"nodeType":"Block","src":"8654:30:46","statements":[{"expression":{"id":7747,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"8671:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"functionReturnParameters":7746,"id":7748,"nodeType":"Return","src":"8664:13:46"}]},"documentation":{"id":7741,"nodeType":"StructuredDocumentation","src":"8563:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"fbfa77cf","id":7750,"implemented":true,"kind":"function","modifiers":[],"name":"vault","nameLocation":"8615:5:46","nodeType":"FunctionDefinition","parameters":{"id":7742,"nodeType":"ParameterList","parameters":[],"src":"8620:2:46"},"returnParameters":{"id":7746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7745,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7750,"src":"8646:6:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":7744,"nodeType":"UserDefinedTypeName","pathNode":{"id":7743,"name":"IVault","nameLocations":["8646:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"8646:6:46"},"referencedDeclaration":2545,"src":"8646:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8645:8:46"},"scope":9230,"src":"8606:78:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1767],"body":{"id":7767,"nodeType":"Block","src":"8784:100:46","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":7761,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9230,"src":"8823:21:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$9230_$","typeString":"type(contract ProtocolFeeController)"}},"id":7762,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8845:24:46","memberName":"collectAggregateFeesHook","nodeType":"MemberAccess","referencedDeclaration":7796,"src":"8823:46:46","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.collectAggregateFeesHook(address)"}},{"id":7763,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7753,"src":"8871:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.collectAggregateFeesHook(address)"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7759,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8808:3:46","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":7760,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8812:10:46","memberName":"encodeCall","nodeType":"MemberAccess","src":"8808:14:46","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":7764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8808:68:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":7756,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"8794:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":7758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8801:6:46","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":3874,"src":"8794:13:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":7765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8794:83:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7766,"nodeType":"ExpressionStatement","src":"8794:83:46"}]},"documentation":{"id":7751,"nodeType":"StructuredDocumentation","src":"8690:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8f4ab9ca","id":7768,"implemented":true,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"8742:20:46","nodeType":"FunctionDefinition","parameters":{"id":7754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7753,"mutability":"mutable","name":"pool","nameLocation":"8771:4:46","nodeType":"VariableDeclaration","scope":7768,"src":"8763:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7752,"name":"address","nodeType":"ElementaryTypeName","src":"8763:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8762:14:46"},"returnParameters":{"id":7755,"nodeType":"ParameterList","parameters":[],"src":"8784:0:46"},"scope":9230,"src":"8733:151:46","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":7795,"nodeType":"Block","src":"9267:186:46","statements":[{"assignments":[7780,7783],"declarations":[{"constant":false,"id":7780,"mutability":"mutable","name":"totalSwapFees","nameLocation":"9295:13:46","nodeType":"VariableDeclaration","scope":7795,"src":"9278:30:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7778,"name":"uint256","nodeType":"ElementaryTypeName","src":"9278:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7779,"nodeType":"ArrayTypeName","src":"9278:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":7783,"mutability":"mutable","name":"totalYieldFees","nameLocation":"9327:14:46","nodeType":"VariableDeclaration","scope":7795,"src":"9310:31:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7781,"name":"uint256","nodeType":"ElementaryTypeName","src":"9310:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7782,"nodeType":"ArrayTypeName","src":"9310:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":7788,"initialValue":{"arguments":[{"id":7786,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7771,"src":"9373:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7784,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"9345:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":7785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9352:20:46","memberName":"collectAggregateFees","nodeType":"MemberAccess","referencedDeclaration":2673,"src":"9345:27:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) external returns (uint256[] memory,uint256[] memory)"}},"id":7787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9345:33:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"9277:101:46"},{"expression":{"arguments":[{"id":7790,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7771,"src":"9410:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7791,"name":"totalSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"9416:13:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":7792,"name":"totalYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7783,"src":"9431:14:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":7789,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[7823,8027],"referencedDeclaration":7823,"src":"9388:21:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,uint256[] memory,uint256[] memory)"}},"id":7793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9388:58:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7794,"nodeType":"ExpressionStatement","src":"9388:58:46"}]},"documentation":{"id":7769,"nodeType":"StructuredDocumentation","src":"8890:305:46","text":" @dev Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit\n for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount\n transferred so that the transaction settles when the hook returns."},"functionSelector":"fa399f2a","id":7796,"implemented":true,"kind":"function","modifiers":[{"id":7774,"kind":"modifierInvocation","modifierName":{"id":7773,"name":"onlyVault","nameLocations":["9257:9:46"],"nodeType":"IdentifierPath","referencedDeclaration":9317,"src":"9257:9:46"},"nodeType":"ModifierInvocation","src":"9257:9:46"}],"name":"collectAggregateFeesHook","nameLocation":"9209:24:46","nodeType":"FunctionDefinition","parameters":{"id":7772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7771,"mutability":"mutable","name":"pool","nameLocation":"9242:4:46","nodeType":"VariableDeclaration","scope":7796,"src":"9234:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7770,"name":"address","nodeType":"ElementaryTypeName","src":"9234:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9233:14:46"},"returnParameters":{"id":7775,"nodeType":"ParameterList","parameters":[],"src":"9267:0:46"},"scope":9230,"src":"9200:253:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7822,"nodeType":"Block","src":"10544:159:46","statements":[{"expression":{"arguments":[{"id":7809,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7799,"src":"10576:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":7810,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"10582:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7811,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10598:4:46","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7580,"src":"10582:20:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},{"id":7812,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7802,"src":"10604:14:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":7808,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[7823,8027],"referencedDeclaration":8027,"src":"10554:21:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_ProtocolFeeType_$7582_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType,uint256[] memory)"}},"id":7813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10554:65:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7814,"nodeType":"ExpressionStatement","src":"10554:65:46"},{"expression":{"arguments":[{"id":7816,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7799,"src":"10651:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":7817,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"10657:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7818,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10673:5:46","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":7581,"src":"10657:21:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},{"id":7819,"name":"yieldFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7805,"src":"10680:15:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":7815,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[7823,8027],"referencedDeclaration":8027,"src":"10629:21:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_ProtocolFeeType_$7582_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType,uint256[] memory)"}},"id":7820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10629:67:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7821,"nodeType":"ExpressionStatement","src":"10629:67:46"}]},"documentation":{"id":7797,"nodeType":"StructuredDocumentation","src":"9459:929:46","text":" @notice Settle fee credits from the Vault.\n @dev This must be called after calling `collectAggregateFees` in the Vault. Note that since charging protocol\n fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection\n happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations. The Vault\n differentiates between swap and yield fees (since they can have different percentage values); the Controller\n combines swap and yield fees, then allocates the total between the protocol and pool creator.\n @param pool The address of the pool on which the swap fees were charged\n @param swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @param yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"id":7823,"implemented":true,"kind":"function","modifiers":[],"name":"_receiveAggregateFees","nameLocation":"10402:21:46","nodeType":"FunctionDefinition","parameters":{"id":7806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7799,"mutability":"mutable","name":"pool","nameLocation":"10441:4:46","nodeType":"VariableDeclaration","scope":7823,"src":"10433:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7798,"name":"address","nodeType":"ElementaryTypeName","src":"10433:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7802,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"10472:14:46","nodeType":"VariableDeclaration","scope":7823,"src":"10455:31:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7800,"name":"uint256","nodeType":"ElementaryTypeName","src":"10455:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7801,"nodeType":"ArrayTypeName","src":"10455:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":7805,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"10513:15:46","nodeType":"VariableDeclaration","scope":7823,"src":"10496:32:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7803,"name":"uint256","nodeType":"ElementaryTypeName","src":"10496:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7804,"nodeType":"ArrayTypeName","src":"10496:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10423:111:46"},"returnParameters":{"id":7807,"nodeType":"ParameterList","parameters":[],"src":"10544:0:46"},"scope":9230,"src":"10393:310:46","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":8026,"nodeType":"Block","src":"10816:2992:46","statements":[{"assignments":[7835],"declarations":[{"constant":false,"id":7835,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"11056:21:46","nodeType":"VariableDeclaration","scope":8026,"src":"11048:29:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7834,"name":"uint256","nodeType":"ElementaryTypeName","src":"11048:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7849,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":7839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7836,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7828,"src":"11080:7:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":7837,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"11091:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7838,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11107:4:46","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7580,"src":"11091:20:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"11080:31:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"baseExpression":{"id":7844,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7611,"src":"11192:32:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":7846,"indexExpression":{"id":7845,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"11225:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11192:38:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":7847,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11231:13:46","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7585,"src":"11192:52:46","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":7848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11080:164:46","trueExpression":{"expression":{"baseExpression":{"id":7840,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7606,"src":"11126:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":7842,"indexExpression":{"id":7841,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"11158:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11126:37:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":7843,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11164:13:46","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7585,"src":"11126:51:46","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"VariableDeclarationStatement","src":"11048:196:46"},{"assignments":[7851],"declarations":[{"constant":false,"id":7851,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"11263:24:46","nodeType":"VariableDeclaration","scope":8026,"src":"11255:32:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7850,"name":"uint256","nodeType":"ElementaryTypeName","src":"11255:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7863,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":7855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7852,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7828,"src":"11290:7:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":7853,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"11301:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7854,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11317:4:46","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7580,"src":"11301:20:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"11290:31:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"baseExpression":{"id":7859,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7623,"src":"11387:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7861,"indexExpression":{"id":7860,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"11419:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11387:37:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11290:134:46","trueExpression":{"baseExpression":{"id":7856,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7619,"src":"11336:30:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7858,"indexExpression":{"id":7857,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"11367:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11336:36:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11255:169:46"},{"assignments":[7865],"declarations":[{"constant":false,"id":7865,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"11443:22:46","nodeType":"VariableDeclaration","scope":8026,"src":"11435:30:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7864,"name":"uint256","nodeType":"ElementaryTypeName","src":"11435:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7866,"nodeType":"VariableDeclarationStatement","src":"11435:30:46"},{"assignments":[7868],"declarations":[{"constant":false,"id":7868,"mutability":"mutable","name":"needToSplitFees","nameLocation":"11481:15:46","nodeType":"VariableDeclaration","scope":8026,"src":"11476:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7867,"name":"bool","nodeType":"ElementaryTypeName","src":"11476:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":7876,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7869,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7851,"src":"11499:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":7870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11526:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11499:28:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7872,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7835,"src":"11531:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":7873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11555:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11531:25:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11499:57:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"11476:80:46"},{"condition":{"id":7877,"name":"needToSplitFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7868,"src":"11570:15:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7886,"nodeType":"IfStatement","src":"11566:199:46","trueBody":{"id":7885,"nodeType":"Block","src":"11587:178:46","statements":[{"expression":{"id":7883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7878,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7865,"src":"11650:22:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7880,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7835,"src":"11706:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7881,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7851,"src":"11729:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7879,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8415,"src":"11675:30:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11675:79:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11650:104:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7884,"nodeType":"ExpressionStatement","src":"11650:104:46"}]}},{"assignments":[7891,7893],"declarations":[{"constant":false,"id":7891,"mutability":"mutable","name":"poolTokens","nameLocation":"11792:10:46","nodeType":"VariableDeclaration","scope":8026,"src":"11776:26:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":7889,"nodeType":"UserDefinedTypeName","pathNode":{"id":7888,"name":"IERC20","nameLocations":["11776:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"11776:6:46"},"referencedDeclaration":10576,"src":"11776:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":7890,"nodeType":"ArrayTypeName","src":"11776:8:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":7893,"mutability":"mutable","name":"numTokens","nameLocation":"11812:9:46","nodeType":"VariableDeclaration","scope":8026,"src":"11804:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7892,"name":"uint256","nodeType":"ElementaryTypeName","src":"11804:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7897,"initialValue":{"arguments":[{"id":7895,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"11848:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7894,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8475,"src":"11825:22:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":7896,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11825:28:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11775:78:46"},{"body":{"id":8024,"nodeType":"Block","src":"11903:1899:46","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":7908,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"11921:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7910,"indexExpression":{"id":7909,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"11932:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11921:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":7911,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11937:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11921:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8023,"nodeType":"IfStatement","src":"11917:1875:46","trueBody":{"id":8022,"nodeType":"Block","src":"11940:1852:46","statements":[{"assignments":[7915],"declarations":[{"constant":false,"id":7915,"mutability":"mutable","name":"token","nameLocation":"11965:5:46","nodeType":"VariableDeclaration","scope":8022,"src":"11958:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":7914,"nodeType":"UserDefinedTypeName","pathNode":{"id":7913,"name":"IERC20","nameLocations":["11958:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"11958:6:46"},"referencedDeclaration":10576,"src":"11958:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":7919,"initialValue":{"baseExpression":{"id":7916,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7891,"src":"11973:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":7918,"indexExpression":{"id":7917,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"11984:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11973:13:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"11958:28:46"},{"expression":{"arguments":[{"id":7923,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7915,"src":"12019:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"arguments":[{"id":7926,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12034:4:46","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$9230","typeString":"contract ProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeController_$9230","typeString":"contract ProtocolFeeController"}],"id":7925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12026:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7924,"name":"address","nodeType":"ElementaryTypeName","src":"12026:7:46","typeDescriptions":{}}},"id":7927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12026:13:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":7928,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"12041:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7930,"indexExpression":{"id":7929,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"12052:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12041:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7920,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"12005:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":7922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12012:6:46","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":3896,"src":"12005:13:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":7931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12005:50:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7932,"nodeType":"ExpressionStatement","src":"12005:50:46"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":7936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7933,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7828,"src":"12234:7:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":7934,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"12245:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7935,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12261:4:46","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7580,"src":"12245:20:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"12234:31:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7954,"nodeType":"Block","src":"12371:99:46","statements":[{"eventCall":{"arguments":[{"id":7947,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"12424:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7948,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7915,"src":"12430:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"baseExpression":{"id":7949,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"12437:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7951,"indexExpression":{"id":7950,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"12448:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12437:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7946,"name":"ProtocolYieldFeeCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1682,"src":"12398:25:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":7952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12398:53:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7953,"nodeType":"EmitStatement","src":"12393:58:46"}]},"id":7955,"nodeType":"IfStatement","src":"12230:240:46","trueBody":{"id":7945,"nodeType":"Block","src":"12267:98:46","statements":[{"eventCall":{"arguments":[{"id":7938,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"12319:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7939,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7915,"src":"12325:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"baseExpression":{"id":7940,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"12332:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7942,"indexExpression":{"id":7941,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"12343:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12332:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7937,"name":"ProtocolSwapFeeCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1672,"src":"12294:24:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":7943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12294:52:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7944,"nodeType":"EmitStatement","src":"12289:57:46"}]}},{"condition":{"id":7956,"name":"needToSplitFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7868,"src":"12492:15:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8020,"nodeType":"Block","src":"13422:356:46","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7994,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7851,"src":"13524:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13552:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13524:29:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8018,"nodeType":"Block","src":"13659:101:46","statements":[{"expression":{"id":8016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":8008,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7637,"src":"13685:22:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":8011,"indexExpression":{"id":8009,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"13708:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13685:28:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":8012,"indexExpression":{"id":8010,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7915,"src":"13714:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13685:35:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":8013,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"13724:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8015,"indexExpression":{"id":8014,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"13735:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13724:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13685:52:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8017,"nodeType":"ExpressionStatement","src":"13685:52:46"}]},"id":8019,"nodeType":"IfStatement","src":"13520:240:46","trueBody":{"id":8007,"nodeType":"Block","src":"13555:98:46","statements":[{"expression":{"id":8005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":7997,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7630,"src":"13581:19:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":8000,"indexExpression":{"id":7998,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"13601:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13581:25:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":8001,"indexExpression":{"id":7999,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7915,"src":"13607:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13581:32:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":8002,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"13617:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8004,"indexExpression":{"id":8003,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"13628:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13617:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13581:49:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8006,"nodeType":"ExpressionStatement","src":"13581:49:46"}]}}]},"id":8021,"nodeType":"IfStatement","src":"12488:1290:46","trueBody":{"id":7993,"nodeType":"Block","src":"12509:907:46","statements":[{"assignments":[7958],"declarations":[{"constant":false,"id":7958,"mutability":"mutable","name":"totalFeeAmountRaw","nameLocation":"13074:17:46","nodeType":"VariableDeclaration","scope":7993,"src":"13066:25:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7957,"name":"uint256","nodeType":"ElementaryTypeName","src":"13066:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7965,"initialValue":{"arguments":[{"id":7963,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7865,"src":"13114:22:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":7959,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"13094:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7961,"indexExpression":{"id":7960,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"13105:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13094:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13108:5:46","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":5096,"src":"13094:19:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13094:43:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13066:71:46"},{"assignments":[7967],"declarations":[{"constant":false,"id":7967,"mutability":"mutable","name":"protocolPortion","nameLocation":"13167:15:46","nodeType":"VariableDeclaration","scope":7993,"src":"13159:23:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7966,"name":"uint256","nodeType":"ElementaryTypeName","src":"13159:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7972,"initialValue":{"arguments":[{"id":7970,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7835,"src":"13209:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7968,"name":"totalFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7958,"src":"13185:17:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13203:5:46","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":5060,"src":"13185:23:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13185:46:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13159:72:46"},{"expression":{"id":7979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":7973,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7630,"src":"13254:19:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":7976,"indexExpression":{"id":7974,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"13274:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13254:25:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":7977,"indexExpression":{"id":7975,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7915,"src":"13280:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13254:32:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":7978,"name":"protocolPortion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7967,"src":"13290:15:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13254:51:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7980,"nodeType":"ExpressionStatement","src":"13254:51:46"},{"expression":{"id":7991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":7981,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7637,"src":"13327:22:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":7984,"indexExpression":{"id":7982,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"13350:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13327:28:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":7985,"indexExpression":{"id":7983,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7915,"src":"13356:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13327:35:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":7986,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"13366:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7988,"indexExpression":{"id":7987,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"13377:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13366:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":7989,"name":"protocolPortion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7967,"src":"13382:15:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13366:31:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13327:70:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7992,"nodeType":"ExpressionStatement","src":"13327:70:46"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7902,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"11883:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7903,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7893,"src":"11887:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11883:13:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8025,"initializationExpression":{"assignments":[7899],"declarations":[{"constant":false,"id":7899,"mutability":"mutable","name":"i","nameLocation":"11876:1:46","nodeType":"VariableDeclaration","scope":8025,"src":"11868:9:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7898,"name":"uint256","nodeType":"ElementaryTypeName","src":"11868:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7901,"initialValue":{"hexValue":"30","id":7900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11880:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11868:13:46"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":7906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11898:3:46","subExpression":{"id":7905,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"11900:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7907,"nodeType":"ExpressionStatement","src":"11898:3:46"},"nodeType":"ForStatement","src":"11863:1939:46"}]},"id":8027,"implemented":true,"kind":"function","modifiers":[],"name":"_receiveAggregateFees","nameLocation":"10718:21:46","nodeType":"FunctionDefinition","parameters":{"id":7832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7825,"mutability":"mutable","name":"pool","nameLocation":"10748:4:46","nodeType":"VariableDeclaration","scope":8027,"src":"10740:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7824,"name":"address","nodeType":"ElementaryTypeName","src":"10740:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7828,"mutability":"mutable","name":"feeType","nameLocation":"10770:7:46","nodeType":"VariableDeclaration","scope":8027,"src":"10754:23:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":7827,"nodeType":"UserDefinedTypeName","pathNode":{"id":7826,"name":"ProtocolFeeType","nameLocations":["10754:15:46"],"nodeType":"IdentifierPath","referencedDeclaration":7582,"src":"10754:15:46"},"referencedDeclaration":7582,"src":"10754:15:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"},{"constant":false,"id":7831,"mutability":"mutable","name":"feeAmounts","nameLocation":"10796:10:46","nodeType":"VariableDeclaration","scope":8027,"src":"10779:27:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7829,"name":"uint256","nodeType":"ElementaryTypeName","src":"10779:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7830,"nodeType":"ArrayTypeName","src":"10779:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10739:68:46"},"returnParameters":{"id":7833,"nodeType":"ParameterList","parameters":[],"src":"10816:0:46"},"scope":9230,"src":"10709:3099:46","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"baseFunctions":[1773],"body":{"id":8035,"nodeType":"Block","src":"13935:56:46","statements":[{"expression":{"id":8033,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7599,"src":"13952:32:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8032,"id":8034,"nodeType":"Return","src":"13945:39:46"}]},"documentation":{"id":8028,"nodeType":"StructuredDocumentation","src":"13814:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"7869ee18","id":8036,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"13866:34:46","nodeType":"FunctionDefinition","parameters":{"id":8029,"nodeType":"ParameterList","parameters":[],"src":"13900:2:46"},"returnParameters":{"id":8032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8031,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8036,"src":"13926:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8030,"name":"uint256","nodeType":"ElementaryTypeName","src":"13926:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13925:9:46"},"scope":9230,"src":"13857:134:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1779],"body":{"id":8044,"nodeType":"Block","src":"14119:57:46","statements":[{"expression":{"id":8042,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7601,"src":"14136:33:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8041,"id":8043,"nodeType":"Return","src":"14129:40:46"}]},"documentation":{"id":8037,"nodeType":"StructuredDocumentation","src":"13997:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"55fb76af","id":8045,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"14049:35:46","nodeType":"FunctionDefinition","parameters":{"id":8038,"nodeType":"ParameterList","parameters":[],"src":"14084:2:46"},"returnParameters":{"id":8041,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8040,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8045,"src":"14110:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8039,"name":"uint256","nodeType":"ElementaryTypeName","src":"14110:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14109:9:46"},"scope":9230,"src":"14040:136:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1787],"body":{"id":8057,"nodeType":"Block","src":"14294:46:46","statements":[{"expression":{"baseExpression":{"id":8053,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7615,"src":"14311:16:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":8055,"indexExpression":{"id":8054,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8048,"src":"14328:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14311:22:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":8052,"id":8056,"nodeType":"Return","src":"14304:29:46"}]},"documentation":{"id":8046,"nodeType":"StructuredDocumentation","src":"14182:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"c673bdaf","id":8058,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"14234:16:46","nodeType":"FunctionDefinition","parameters":{"id":8049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8048,"mutability":"mutable","name":"pool","nameLocation":"14259:4:46","nodeType":"VariableDeclaration","scope":8058,"src":"14251:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8047,"name":"address","nodeType":"ElementaryTypeName","src":"14251:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14250:14:46"},"returnParameters":{"id":8052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8051,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8058,"src":"14288:4:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8050,"name":"bool","nodeType":"ElementaryTypeName","src":"14288:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14287:6:46"},"scope":9230,"src":"14225:115:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1797],"body":{"id":8081,"nodeType":"Block","src":"14477:143:46","statements":[{"assignments":[8070],"declarations":[{"constant":false,"id":8070,"mutability":"mutable","name":"config","nameLocation":"14508:6:46","nodeType":"VariableDeclaration","scope":8081,"src":"14487:27:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":8069,"nodeType":"UserDefinedTypeName","pathNode":{"id":8068,"name":"PoolFeeConfig","nameLocations":["14487:13:46"],"nodeType":"IdentifierPath","referencedDeclaration":7588,"src":"14487:13:46"},"referencedDeclaration":7588,"src":"14487:13:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":8074,"initialValue":{"baseExpression":{"id":8071,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7606,"src":"14517:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8073,"indexExpression":{"id":8072,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8061,"src":"14549:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14517:37:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14487:67:46"},{"expression":{"components":[{"expression":{"id":8075,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8070,"src":"14573:6:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8076,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14580:13:46","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7585,"src":"14573:20:46","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":8077,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8070,"src":"14595:6:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8078,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14602:10:46","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":7587,"src":"14595:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":8079,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14572:41:46","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint64_$_t_bool_$","typeString":"tuple(uint64,bool)"}},"functionReturnParameters":8067,"id":8080,"nodeType":"Return","src":"14565:48:46"}]},"documentation":{"id":8059,"nodeType":"StructuredDocumentation","src":"14346:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"5c15a0b4","id":8082,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"14398:26:46","nodeType":"FunctionDefinition","parameters":{"id":8062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8061,"mutability":"mutable","name":"pool","nameLocation":"14433:4:46","nodeType":"VariableDeclaration","scope":8082,"src":"14425:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8060,"name":"address","nodeType":"ElementaryTypeName","src":"14425:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14424:14:46"},"returnParameters":{"id":8067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8064,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8082,"src":"14462:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8063,"name":"uint256","nodeType":"ElementaryTypeName","src":"14462:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8066,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8082,"src":"14471:4:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8065,"name":"bool","nodeType":"ElementaryTypeName","src":"14471:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14461:15:46"},"scope":9230,"src":"14389:231:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1807],"body":{"id":8105,"nodeType":"Block","src":"14758:144:46","statements":[{"assignments":[8094],"declarations":[{"constant":false,"id":8094,"mutability":"mutable","name":"config","nameLocation":"14789:6:46","nodeType":"VariableDeclaration","scope":8105,"src":"14768:27:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":8093,"nodeType":"UserDefinedTypeName","pathNode":{"id":8092,"name":"PoolFeeConfig","nameLocations":["14768:13:46"],"nodeType":"IdentifierPath","referencedDeclaration":7588,"src":"14768:13:46"},"referencedDeclaration":7588,"src":"14768:13:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":8098,"initialValue":{"baseExpression":{"id":8095,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7611,"src":"14798:32:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8097,"indexExpression":{"id":8096,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8085,"src":"14831:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14798:38:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14768:68:46"},{"expression":{"components":[{"expression":{"id":8099,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8094,"src":"14855:6:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8100,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14862:13:46","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7585,"src":"14855:20:46","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":8101,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8094,"src":"14877:6:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8102,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14884:10:46","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":7587,"src":"14877:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":8103,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14854:41:46","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint64_$_t_bool_$","typeString":"tuple(uint64,bool)"}},"functionReturnParameters":8091,"id":8104,"nodeType":"Return","src":"14847:48:46"}]},"documentation":{"id":8083,"nodeType":"StructuredDocumentation","src":"14626:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"7a2b97dc","id":8106,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"14678:27:46","nodeType":"FunctionDefinition","parameters":{"id":8086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8085,"mutability":"mutable","name":"pool","nameLocation":"14714:4:46","nodeType":"VariableDeclaration","scope":8106,"src":"14706:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8084,"name":"address","nodeType":"ElementaryTypeName","src":"14706:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14705:14:46"},"returnParameters":{"id":8091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8088,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8106,"src":"14743:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8087,"name":"uint256","nodeType":"ElementaryTypeName","src":"14743:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8090,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8106,"src":"14752:4:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8089,"name":"bool","nodeType":"ElementaryTypeName","src":"14752:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14742:15:46"},"scope":9230,"src":"14669:233:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1815],"body":{"id":8118,"nodeType":"Block","src":"15038:60:46","statements":[{"expression":{"baseExpression":{"id":8114,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7619,"src":"15055:30:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8116,"indexExpression":{"id":8115,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8109,"src":"15086:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15055:36:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8113,"id":8117,"nodeType":"Return","src":"15048:43:46"}]},"documentation":{"id":8107,"nodeType":"StructuredDocumentation","src":"14908:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0b8e059b","id":8119,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorSwapFeePercentage","nameLocation":"14960:31:46","nodeType":"FunctionDefinition","parameters":{"id":8110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8109,"mutability":"mutable","name":"pool","nameLocation":"15000:4:46","nodeType":"VariableDeclaration","scope":8119,"src":"14992:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8108,"name":"address","nodeType":"ElementaryTypeName","src":"14992:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14991:14:46"},"returnParameters":{"id":8113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8112,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8119,"src":"15029:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8111,"name":"uint256","nodeType":"ElementaryTypeName","src":"15029:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15028:9:46"},"scope":9230,"src":"14951:147:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1823],"body":{"id":8131,"nodeType":"Block","src":"15235:61:46","statements":[{"expression":{"baseExpression":{"id":8127,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7623,"src":"15252:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8129,"indexExpression":{"id":8128,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8122,"src":"15284:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15252:37:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8126,"id":8130,"nodeType":"Return","src":"15245:44:46"}]},"documentation":{"id":8120,"nodeType":"StructuredDocumentation","src":"15104:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0252aab5","id":8132,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorYieldFeePercentage","nameLocation":"15156:32:46","nodeType":"FunctionDefinition","parameters":{"id":8123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8122,"mutability":"mutable","name":"pool","nameLocation":"15197:4:46","nodeType":"VariableDeclaration","scope":8132,"src":"15189:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8121,"name":"address","nodeType":"ElementaryTypeName","src":"15189:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15188:14:46"},"returnParameters":{"id":8126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8125,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8132,"src":"15226:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8124,"name":"uint256","nodeType":"ElementaryTypeName","src":"15226:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15225:9:46"},"scope":9230,"src":"15147:149:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1832],"body":{"id":8184,"nodeType":"Block","src":"15442:273:46","statements":[{"assignments":[8145,8147],"declarations":[{"constant":false,"id":8145,"mutability":"mutable","name":"poolTokens","nameLocation":"15469:10:46","nodeType":"VariableDeclaration","scope":8184,"src":"15453:26:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":8143,"nodeType":"UserDefinedTypeName","pathNode":{"id":8142,"name":"IERC20","nameLocations":["15453:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"15453:6:46"},"referencedDeclaration":10576,"src":"15453:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":8144,"nodeType":"ArrayTypeName","src":"15453:8:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":8147,"mutability":"mutable","name":"numTokens","nameLocation":"15489:9:46","nodeType":"VariableDeclaration","scope":8184,"src":"15481:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8146,"name":"uint256","nodeType":"ElementaryTypeName","src":"15481:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8151,"initialValue":{"arguments":[{"id":8149,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8135,"src":"15525:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8148,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8475,"src":"15502:22:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":8150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15502:28:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15452:78:46"},{"expression":{"id":8158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8152,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8139,"src":"15541:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8156,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8147,"src":"15568:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8155,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15554:13:46","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":8153,"name":"uint256","nodeType":"ElementaryTypeName","src":"15558:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8154,"nodeType":"ArrayTypeName","src":"15558:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":8157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15554:24:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15541:37:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8159,"nodeType":"ExpressionStatement","src":"15541:37:46"},{"body":{"id":8182,"nodeType":"Block","src":"15628:81:46","statements":[{"expression":{"id":8180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8170,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8139,"src":"15642:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8172,"indexExpression":{"id":8171,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8161,"src":"15653:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15642:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":8173,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7630,"src":"15658:19:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":8175,"indexExpression":{"id":8174,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8135,"src":"15678:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15658:25:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":8179,"indexExpression":{"baseExpression":{"id":8176,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8145,"src":"15684:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":8178,"indexExpression":{"id":8177,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8161,"src":"15695:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15684:13:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15658:40:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15642:56:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8181,"nodeType":"ExpressionStatement","src":"15642:56:46"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8164,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8161,"src":"15608:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8165,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8147,"src":"15612:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15608:13:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8183,"initializationExpression":{"assignments":[8161],"declarations":[{"constant":false,"id":8161,"mutability":"mutable","name":"i","nameLocation":"15601:1:46","nodeType":"VariableDeclaration","scope":8183,"src":"15593:9:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8160,"name":"uint256","nodeType":"ElementaryTypeName","src":"15593:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8163,"initialValue":{"hexValue":"30","id":8162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15605:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15593:13:46"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15623:3:46","subExpression":{"id":8167,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8161,"src":"15625:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8169,"nodeType":"ExpressionStatement","src":"15623:3:46"},"nodeType":"ForStatement","src":"15588:121:46"}]},"documentation":{"id":8133,"nodeType":"StructuredDocumentation","src":"15302:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8df44c54","id":8185,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"15354:21:46","nodeType":"FunctionDefinition","parameters":{"id":8136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8135,"mutability":"mutable","name":"pool","nameLocation":"15384:4:46","nodeType":"VariableDeclaration","scope":8185,"src":"15376:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8134,"name":"address","nodeType":"ElementaryTypeName","src":"15376:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15375:14:46"},"returnParameters":{"id":8140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8139,"mutability":"mutable","name":"feeAmounts","nameLocation":"15430:10:46","nodeType":"VariableDeclaration","scope":8185,"src":"15413:27:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":8137,"name":"uint256","nodeType":"ElementaryTypeName","src":"15413:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8138,"nodeType":"ArrayTypeName","src":"15413:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15412:29:46"},"scope":9230,"src":"15345:370:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1841],"body":{"id":8237,"nodeType":"Block","src":"15864:276:46","statements":[{"assignments":[8198,8200],"declarations":[{"constant":false,"id":8198,"mutability":"mutable","name":"poolTokens","nameLocation":"15891:10:46","nodeType":"VariableDeclaration","scope":8237,"src":"15875:26:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":8196,"nodeType":"UserDefinedTypeName","pathNode":{"id":8195,"name":"IERC20","nameLocations":["15875:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"15875:6:46"},"referencedDeclaration":10576,"src":"15875:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":8197,"nodeType":"ArrayTypeName","src":"15875:8:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":8200,"mutability":"mutable","name":"numTokens","nameLocation":"15911:9:46","nodeType":"VariableDeclaration","scope":8237,"src":"15903:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8199,"name":"uint256","nodeType":"ElementaryTypeName","src":"15903:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8204,"initialValue":{"arguments":[{"id":8202,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8188,"src":"15947:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8201,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8475,"src":"15924:22:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":8203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15924:28:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15874:78:46"},{"expression":{"id":8211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8205,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8192,"src":"15963:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8209,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8200,"src":"15990:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8208,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15976:13:46","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":8206,"name":"uint256","nodeType":"ElementaryTypeName","src":"15980:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8207,"nodeType":"ArrayTypeName","src":"15980:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":8210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15976:24:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15963:37:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8212,"nodeType":"ExpressionStatement","src":"15963:37:46"},{"body":{"id":8235,"nodeType":"Block","src":"16050:84:46","statements":[{"expression":{"id":8233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8223,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8192,"src":"16064:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8225,"indexExpression":{"id":8224,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8214,"src":"16075:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16064:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":8226,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7637,"src":"16080:22:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":8228,"indexExpression":{"id":8227,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8188,"src":"16103:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16080:28:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":8232,"indexExpression":{"baseExpression":{"id":8229,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8198,"src":"16109:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":8231,"indexExpression":{"id":8230,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8214,"src":"16120:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16109:13:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16080:43:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16064:59:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8234,"nodeType":"ExpressionStatement","src":"16064:59:46"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8217,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8214,"src":"16030:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8218,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8200,"src":"16034:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16030:13:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8236,"initializationExpression":{"assignments":[8214],"declarations":[{"constant":false,"id":8214,"mutability":"mutable","name":"i","nameLocation":"16023:1:46","nodeType":"VariableDeclaration","scope":8236,"src":"16015:9:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8213,"name":"uint256","nodeType":"ElementaryTypeName","src":"16015:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8216,"initialValue":{"hexValue":"30","id":8215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16027:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16015:13:46"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"16045:3:46","subExpression":{"id":8220,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8214,"src":"16047:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8222,"nodeType":"ExpressionStatement","src":"16045:3:46"},"nodeType":"ForStatement","src":"16010:124:46"}]},"documentation":{"id":8186,"nodeType":"StructuredDocumentation","src":"15721:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"9e95f3fd","id":8238,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"15773:24:46","nodeType":"FunctionDefinition","parameters":{"id":8189,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8188,"mutability":"mutable","name":"pool","nameLocation":"15806:4:46","nodeType":"VariableDeclaration","scope":8238,"src":"15798:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8187,"name":"address","nodeType":"ElementaryTypeName","src":"15798:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15797:14:46"},"returnParameters":{"id":8193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8192,"mutability":"mutable","name":"feeAmounts","nameLocation":"15852:10:46","nodeType":"VariableDeclaration","scope":8238,"src":"15835:27:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":8190,"name":"uint256","nodeType":"ElementaryTypeName","src":"15835:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8191,"nodeType":"ArrayTypeName","src":"15835:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15834:29:46"},"scope":9230,"src":"15764:376:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1851],"body":{"id":8253,"nodeType":"Block","src":"16347:103:46","statements":[{"expression":{"arguments":[{"id":8249,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8241,"src":"16395:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8250,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8243,"src":"16418:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8248,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8415,"src":"16364:30:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16364:79:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8247,"id":8252,"nodeType":"Return","src":"16357:86:46"}]},"documentation":{"id":8239,"nodeType":"StructuredDocumentation","src":"16146:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0ddd60c6","id":8254,"implemented":true,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"16198:29:46","nodeType":"FunctionDefinition","parameters":{"id":8244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8241,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"16245:21:46","nodeType":"VariableDeclaration","scope":8254,"src":"16237:29:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8240,"name":"uint256","nodeType":"ElementaryTypeName","src":"16237:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8243,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"16284:24:46","nodeType":"VariableDeclaration","scope":8254,"src":"16276:32:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8242,"name":"uint256","nodeType":"ElementaryTypeName","src":"16276:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16227:87:46"},"returnParameters":{"id":8247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8246,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8254,"src":"16338:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8245,"name":"uint256","nodeType":"ElementaryTypeName","src":"16338:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16337:9:46"},"scope":9230,"src":"16189:261:46","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[1857],"body":{"id":8291,"nodeType":"Block","src":"16584:347:46","statements":[{"assignments":[8265],"declarations":[{"constant":false,"id":8265,"mutability":"mutable","name":"feeConfig","nameLocation":"16615:9:46","nodeType":"VariableDeclaration","scope":8291,"src":"16594:30:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":8264,"nodeType":"UserDefinedTypeName","pathNode":{"id":8263,"name":"PoolFeeConfig","nameLocations":["16594:13:46"],"nodeType":"IdentifierPath","referencedDeclaration":7588,"src":"16594:13:46"},"referencedDeclaration":7588,"src":"16594:13:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":8269,"initialValue":{"baseExpression":{"id":8266,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7606,"src":"16627:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8268,"indexExpression":{"id":8267,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8257,"src":"16659:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16627:37:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"16594:70:46"},{"assignments":[8271],"declarations":[{"constant":false,"id":8271,"mutability":"mutable","name":"globalProtocolSwapFee","nameLocation":"16682:21:46","nodeType":"VariableDeclaration","scope":8291,"src":"16674:29:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8270,"name":"uint256","nodeType":"ElementaryTypeName","src":"16674:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8273,"initialValue":{"id":8272,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7599,"src":"16706:32:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16674:64:46"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":8274,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8265,"src":"16753:9:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8275,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16763:10:46","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":7587,"src":"16753:20:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":8276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16777:5:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"16753:29:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8278,"name":"globalProtocolSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8271,"src":"16786:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":8279,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8265,"src":"16811:9:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8280,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16821:13:46","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7585,"src":"16811:23:46","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"16786:48:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16753:81:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8290,"nodeType":"IfStatement","src":"16749:176:46","trueBody":{"id":8289,"nodeType":"Block","src":"16836:89:46","statements":[{"expression":{"arguments":[{"id":8284,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8257,"src":"16879:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8285,"name":"globalProtocolSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8271,"src":"16885:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":8286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16908:5:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8283,"name":"_updatePoolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9170,"src":"16850:28:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16850:64:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8288,"nodeType":"ExpressionStatement","src":"16850:64:46"}]}}]},"documentation":{"id":8255,"nodeType":"StructuredDocumentation","src":"16456:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"71ecc8fb","id":8292,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8260,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8257,"src":"16578:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8261,"kind":"modifierInvocation","modifierName":{"id":8259,"name":"withLatestFees","nameLocations":["16563:14:46"],"nodeType":"IdentifierPath","referencedDeclaration":7715,"src":"16563:14:46"},"nodeType":"ModifierInvocation","src":"16563:20:46"}],"name":"updateProtocolSwapFeePercentage","nameLocation":"16508:31:46","nodeType":"FunctionDefinition","parameters":{"id":8258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8257,"mutability":"mutable","name":"pool","nameLocation":"16548:4:46","nodeType":"VariableDeclaration","scope":8292,"src":"16540:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8256,"name":"address","nodeType":"ElementaryTypeName","src":"16540:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16539:14:46"},"returnParameters":{"id":8262,"nodeType":"ParameterList","parameters":[],"src":"16584:0:46"},"scope":9230,"src":"16499:432:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1863],"body":{"id":8329,"nodeType":"Block","src":"17066:353:46","statements":[{"assignments":[8303],"declarations":[{"constant":false,"id":8303,"mutability":"mutable","name":"feeConfig","nameLocation":"17097:9:46","nodeType":"VariableDeclaration","scope":8329,"src":"17076:30:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":8302,"nodeType":"UserDefinedTypeName","pathNode":{"id":8301,"name":"PoolFeeConfig","nameLocations":["17076:13:46"],"nodeType":"IdentifierPath","referencedDeclaration":7588,"src":"17076:13:46"},"referencedDeclaration":7588,"src":"17076:13:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":8307,"initialValue":{"baseExpression":{"id":8304,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7611,"src":"17109:32:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8306,"indexExpression":{"id":8305,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8295,"src":"17142:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17109:38:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"17076:71:46"},{"assignments":[8309],"declarations":[{"constant":false,"id":8309,"mutability":"mutable","name":"globalProtocolYieldFee","nameLocation":"17165:22:46","nodeType":"VariableDeclaration","scope":8329,"src":"17157:30:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8308,"name":"uint256","nodeType":"ElementaryTypeName","src":"17157:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8311,"initialValue":{"id":8310,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7601,"src":"17190:33:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17157:66:46"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":8312,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8303,"src":"17238:9:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8313,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17248:10:46","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":7587,"src":"17238:20:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":8314,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17262:5:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"17238:29:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8316,"name":"globalProtocolYieldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8309,"src":"17271:22:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":8317,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8303,"src":"17297:9:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8318,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17307:13:46","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7585,"src":"17297:23:46","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17271:49:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17238:82:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8328,"nodeType":"IfStatement","src":"17234:179:46","trueBody":{"id":8327,"nodeType":"Block","src":"17322:91:46","statements":[{"expression":{"arguments":[{"id":8322,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8295,"src":"17366:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8323,"name":"globalProtocolYieldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8309,"src":"17372:22:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":8324,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17396:5:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8321,"name":"_updatePoolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9208,"src":"17336:29:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17336:66:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8326,"nodeType":"ExpressionStatement","src":"17336:66:46"}]}}]},"documentation":{"id":8293,"nodeType":"StructuredDocumentation","src":"16937:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"71447ea8","id":8330,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8298,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8295,"src":"17060:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8299,"kind":"modifierInvocation","modifierName":{"id":8297,"name":"withLatestFees","nameLocations":["17045:14:46"],"nodeType":"IdentifierPath","referencedDeclaration":7715,"src":"17045:14:46"},"nodeType":"ModifierInvocation","src":"17045:20:46"}],"name":"updateProtocolYieldFeePercentage","nameLocation":"16989:32:46","nodeType":"FunctionDefinition","parameters":{"id":8296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8295,"mutability":"mutable","name":"pool","nameLocation":"17030:4:46","nodeType":"VariableDeclaration","scope":8330,"src":"17022:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8294,"name":"address","nodeType":"ElementaryTypeName","src":"17022:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17021:14:46"},"returnParameters":{"id":8300,"nodeType":"ParameterList","parameters":[],"src":"17066:0:46"},"scope":9230,"src":"16980:439:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8384,"nodeType":"Block","src":"17532:594:46","statements":[{"assignments":[8341],"declarations":[{"constant":false,"id":8341,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"17550:21:46","nodeType":"VariableDeclaration","scope":8384,"src":"17542:29:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8340,"name":"uint256","nodeType":"ElementaryTypeName","src":"17542:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8342,"nodeType":"VariableDeclarationStatement","src":"17542:29:46"},{"assignments":[8344],"declarations":[{"constant":false,"id":8344,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"17589:24:46","nodeType":"VariableDeclaration","scope":8384,"src":"17581:32:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8343,"name":"uint256","nodeType":"ElementaryTypeName","src":"17581:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8345,"nodeType":"VariableDeclarationStatement","src":"17581:32:46"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":8349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8346,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8335,"src":"17628:7:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":8347,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"17639:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8348,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17655:4:46","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7580,"src":"17639:20:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"17628:31:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8377,"nodeType":"Block","src":"17844:179:46","statements":[{"expression":{"id":8369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8364,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8341,"src":"17858:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":8365,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7611,"src":"17882:32:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8367,"indexExpression":{"id":8366,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8332,"src":"17915:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17882:38:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8368,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17921:13:46","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7585,"src":"17882:52:46","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17858:76:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8370,"nodeType":"ExpressionStatement","src":"17858:76:46"},{"expression":{"id":8375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8371,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8344,"src":"17948:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":8372,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7623,"src":"17975:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8374,"indexExpression":{"id":8373,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8332,"src":"18007:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17975:37:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17948:64:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8376,"nodeType":"ExpressionStatement","src":"17948:64:46"}]},"id":8378,"nodeType":"IfStatement","src":"17624:399:46","trueBody":{"id":8363,"nodeType":"Block","src":"17661:177:46","statements":[{"expression":{"id":8355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8350,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8341,"src":"17675:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":8351,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7606,"src":"17699:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8353,"indexExpression":{"id":8352,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8332,"src":"17731:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17699:37:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8354,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17737:13:46","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7585,"src":"17699:51:46","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17675:75:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8356,"nodeType":"ExpressionStatement","src":"17675:75:46"},{"expression":{"id":8361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8357,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8344,"src":"17764:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":8358,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7619,"src":"17791:30:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8360,"indexExpression":{"id":8359,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8332,"src":"17822:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17791:36:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17764:63:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8362,"nodeType":"ExpressionStatement","src":"17764:63:46"}]}},{"expression":{"arguments":[{"id":8380,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8341,"src":"18071:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8381,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8344,"src":"18094:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8379,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8415,"src":"18040:30:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18040:79:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8339,"id":8383,"nodeType":"Return","src":"18033:86:46"}]},"id":8385,"implemented":true,"kind":"function","modifiers":[],"name":"_getAggregateFeePercentage","nameLocation":"17434:26:46","nodeType":"FunctionDefinition","parameters":{"id":8336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8332,"mutability":"mutable","name":"pool","nameLocation":"17469:4:46","nodeType":"VariableDeclaration","scope":8385,"src":"17461:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8331,"name":"address","nodeType":"ElementaryTypeName","src":"17461:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8335,"mutability":"mutable","name":"feeType","nameLocation":"17491:7:46","nodeType":"VariableDeclaration","scope":8385,"src":"17475:23:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":8334,"nodeType":"UserDefinedTypeName","pathNode":{"id":8333,"name":"ProtocolFeeType","nameLocations":["17475:15:46"],"nodeType":"IdentifierPath","referencedDeclaration":7582,"src":"17475:15:46"},"referencedDeclaration":7582,"src":"17475:15:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"}],"src":"17460:39:46"},"returnParameters":{"id":8339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8338,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8385,"src":"17523:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8337,"name":"uint256","nodeType":"ElementaryTypeName","src":"17523:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17522:9:46"},"scope":9230,"src":"17425:701:46","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":8414,"nodeType":"Block","src":"18314:882:46","statements":[{"expression":{"id":8403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8394,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8392,"src":"18324:22:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8395,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8387,"src":"18361:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":8400,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8389,"src":"18440:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8396,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8387,"src":"18397:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18419:10:46","memberName":"complement","nodeType":"MemberAccess","referencedDeclaration":5297,"src":"18397:32:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":8398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18397:34:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18432:7:46","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":5043,"src":"18397:42:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18397:68:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18361:104:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18324:141:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8404,"nodeType":"ExpressionStatement","src":"18324:141:46"},{"expression":{"id":8412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8405,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8392,"src":"19098:22:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8406,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8392,"src":"19124:22:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8407,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4302,"src":"19149:18:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19124:43:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8409,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19123:45:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8410,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4302,"src":"19171:18:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19123:66:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19098:91:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8413,"nodeType":"ExpressionStatement","src":"19098:91:46"}]},"id":8415,"implemented":true,"kind":"function","modifiers":[],"name":"_computeAggregateFeePercentage","nameLocation":"18141:30:46","nodeType":"FunctionDefinition","parameters":{"id":8390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8387,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"18189:21:46","nodeType":"VariableDeclaration","scope":8415,"src":"18181:29:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8386,"name":"uint256","nodeType":"ElementaryTypeName","src":"18181:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8389,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"18228:24:46","nodeType":"VariableDeclaration","scope":8415,"src":"18220:32:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8388,"name":"uint256","nodeType":"ElementaryTypeName","src":"18220:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18171:87:46"},"returnParameters":{"id":8393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8392,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"18290:22:46","nodeType":"VariableDeclaration","scope":8415,"src":"18282:30:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8391,"name":"uint256","nodeType":"ElementaryTypeName","src":"18282:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18281:32:46"},"scope":9230,"src":"18132:1064:46","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8450,"nodeType":"Block","src":"19266:276:46","statements":[{"assignments":[8421],"declarations":[{"constant":false,"id":8421,"mutability":"mutable","name":"poolCreator","nameLocation":"19284:11:46","nodeType":"VariableDeclaration","scope":8450,"src":"19276:19:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8420,"name":"address","nodeType":"ElementaryTypeName","src":"19276:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":8425,"initialValue":{"arguments":[{"id":8423,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8417,"src":"19314:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8422,"name":"_getPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8494,"src":"19298:15:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":8424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19298:21:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"19276:43:46"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8426,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8421,"src":"19334:11:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":8429,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19357:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8428,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19349:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8427,"name":"address","nodeType":"ElementaryTypeName","src":"19349:7:46","typeDescriptions":{}}},"id":8430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19349:10:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19334:25:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8437,"nodeType":"IfStatement","src":"19330:93:46","trueBody":{"id":8436,"nodeType":"Block","src":"19361:62:46","statements":[{"errorCall":{"arguments":[{"id":8433,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8417,"src":"19407:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8432,"name":"PoolCreatorNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1744,"src":"19382:24:46","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":8434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19382:30:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8435,"nodeType":"RevertStatement","src":"19375:37:46"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8438,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8421,"src":"19437:11:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":8439,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19452:3:46","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":8440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19456:6:46","memberName":"sender","nodeType":"MemberAccess","src":"19452:10:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19437:25:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8449,"nodeType":"IfStatement","src":"19433:103:46","trueBody":{"id":8448,"nodeType":"Block","src":"19464:72:46","statements":[{"errorCall":{"arguments":[{"expression":{"id":8443,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19508:3:46","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":8444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19512:6:46","memberName":"sender","nodeType":"MemberAccess","src":"19508:10:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8445,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8417,"src":"19520:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":8442,"name":"CallerIsNotPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1751,"src":"19485:22:46","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address) pure returns (error)"}},"id":8446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19485:40:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8447,"nodeType":"RevertStatement","src":"19478:47:46"}]}}]},"id":8451,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureCallerIsPoolCreator","nameLocation":"19211:26:46","nodeType":"FunctionDefinition","parameters":{"id":8418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8417,"mutability":"mutable","name":"pool","nameLocation":"19246:4:46","nodeType":"VariableDeclaration","scope":8451,"src":"19238:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8416,"name":"address","nodeType":"ElementaryTypeName","src":"19238:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19237:14:46"},"returnParameters":{"id":8419,"nodeType":"ParameterList","parameters":[],"src":"19266:0:46"},"scope":9230,"src":"19202:340:46","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":8474,"nodeType":"Block","src":"19660:87:46","statements":[{"expression":{"id":8467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8462,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8458,"src":"19670:6:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8465,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8453,"src":"19700:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8463,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"19679:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":8464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19686:13:46","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":3579,"src":"19679:20:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":8466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19679:26:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"src":"19670:35:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":8468,"nodeType":"ExpressionStatement","src":"19670:35:46"},{"expression":{"id":8472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8469,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8460,"src":"19715:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":8470,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8458,"src":"19727:6:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":8471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19734:6:46","memberName":"length","nodeType":"MemberAccess","src":"19727:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19715:25:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8473,"nodeType":"ExpressionStatement","src":"19715:25:46"}]},"id":8475,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolTokensAndCount","nameLocation":"19557:22:46","nodeType":"FunctionDefinition","parameters":{"id":8454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8453,"mutability":"mutable","name":"pool","nameLocation":"19588:4:46","nodeType":"VariableDeclaration","scope":8475,"src":"19580:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8452,"name":"address","nodeType":"ElementaryTypeName","src":"19580:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19579:14:46"},"returnParameters":{"id":8461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8458,"mutability":"mutable","name":"tokens","nameLocation":"19633:6:46","nodeType":"VariableDeclaration","scope":8475,"src":"19617:22:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":8456,"nodeType":"UserDefinedTypeName","pathNode":{"id":8455,"name":"IERC20","nameLocations":["19617:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"19617:6:46"},"referencedDeclaration":10576,"src":"19617:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":8457,"nodeType":"ArrayTypeName","src":"19617:8:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":8460,"mutability":"mutable","name":"numTokens","nameLocation":"19649:9:46","nodeType":"VariableDeclaration","scope":8475,"src":"19641:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8459,"name":"uint256","nodeType":"ElementaryTypeName","src":"19641:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19616:43:46"},"scope":9230,"src":"19548:199:46","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":8493,"nodeType":"Block","src":"19884:130:46","statements":[{"assignments":[8484],"declarations":[{"constant":false,"id":8484,"mutability":"mutable","name":"roleAccounts","nameLocation":"19918:12:46","nodeType":"VariableDeclaration","scope":8493,"src":"19894:36:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":8483,"nodeType":"UserDefinedTypeName","pathNode":{"id":8482,"name":"PoolRoleAccounts","nameLocations":["19894:16:46"],"nodeType":"IdentifierPath","referencedDeclaration":4111,"src":"19894:16:46"},"referencedDeclaration":4111,"src":"19894:16:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"id":8489,"initialValue":{"arguments":[{"id":8487,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8477,"src":"19960:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8485,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"19933:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":8486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19940:19:46","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":3776,"src":"19933:26:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$4111_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":8488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19933:32:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"nodeType":"VariableDeclarationStatement","src":"19894:71:46"},{"expression":{"expression":{"id":8490,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8484,"src":"19983:12:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":8491,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19996:11:46","memberName":"poolCreator","nodeType":"MemberAccess","referencedDeclaration":4110,"src":"19983:24:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":8481,"id":8492,"nodeType":"Return","src":"19976:31:46"}]},"id":8494,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolCreator","nameLocation":"19822:15:46","nodeType":"FunctionDefinition","parameters":{"id":8478,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8477,"mutability":"mutable","name":"pool","nameLocation":"19846:4:46","nodeType":"VariableDeclaration","scope":8494,"src":"19838:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8476,"name":"address","nodeType":"ElementaryTypeName","src":"19838:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19837:14:46"},"returnParameters":{"id":8481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8480,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8494,"src":"19875:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8479,"name":"address","nodeType":"ElementaryTypeName","src":"19875:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19874:9:46"},"scope":9230,"src":"19813:201:46","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":8612,"nodeType":"Block","src":"21225:2076:46","statements":[{"assignments":[8502],"declarations":[{"constant":false,"id":8502,"mutability":"mutable","name":"oldFeeController","nameLocation":"21258:16:46","nodeType":"VariableDeclaration","scope":8612,"src":"21235:39:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":8501,"nodeType":"UserDefinedTypeName","pathNode":{"id":8500,"name":"IProtocolFeeController","nameLocations":["21235:22:46"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"21235:22:46"},"referencedDeclaration":1955,"src":"21235:22:46","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"id":8506,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8503,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"21277:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":8504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21284:24:46","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":3794,"src":"21277:31:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":8505,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21277:33:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"nodeType":"VariableDeclarationStatement","src":"21235:75:46"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":8509,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8502,"src":"21333:16:46","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}],"id":8508,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21325:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8507,"name":"address","nodeType":"ElementaryTypeName","src":"21325:7:46","typeDescriptions":{}}},"id":8510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21325:25:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":8513,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"21362:4:46","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$9230","typeString":"contract ProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeController_$9230","typeString":"contract ProtocolFeeController"}],"id":8512,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21354:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8511,"name":"address","nodeType":"ElementaryTypeName","src":"21354:7:46","typeDescriptions":{}}},"id":8514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21354:13:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21325:42:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8520,"nodeType":"IfStatement","src":"21321:104:46","trueBody":{"id":8519,"nodeType":"Block","src":"21369:56:46","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":8516,"name":"InvalidMigrationSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7645,"src":"21390:22:46","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":8517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21390:24:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8518,"nodeType":"RevertStatement","src":"21383:31:46"}]}},{"condition":{"baseExpression":{"id":8521,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7615,"src":"21439:16:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":8523,"indexExpression":{"id":8522,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"21456:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21439:22:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8529,"nodeType":"IfStatement","src":"21435:87:46","trueBody":{"id":8528,"nodeType":"Block","src":"21463:59:46","statements":[{"errorCall":{"arguments":[{"id":8525,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"21506:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8524,"name":"PoolAlreadyRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7642,"src":"21484:21:46","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":8526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21484:27:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8527,"nodeType":"RevertStatement","src":"21477:34:46"}]}},{"expression":{"id":8534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8530,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7615,"src":"21532:16:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":8532,"indexExpression":{"id":8531,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"21549:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21532:22:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":8533,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"21557:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"21532:29:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8535,"nodeType":"ExpressionStatement","src":"21532:29:46"},{"assignments":[8537,8539],"declarations":[{"constant":false,"id":8537,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"21581:25:46","nodeType":"VariableDeclaration","scope":8612,"src":"21573:33:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8536,"name":"uint256","nodeType":"ElementaryTypeName","src":"21573:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8539,"mutability":"mutable","name":"swapFeeIsOverride","nameLocation":"21613:17:46","nodeType":"VariableDeclaration","scope":8612,"src":"21608:22:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8538,"name":"bool","nodeType":"ElementaryTypeName","src":"21608:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":8544,"initialValue":{"arguments":[{"id":8542,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"21678:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8540,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8502,"src":"21634:16:46","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":8541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21651:26:46","memberName":"getPoolProtocolSwapFeeInfo","nodeType":"MemberAccess","referencedDeclaration":1797,"src":"21634:43:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (address) view external returns (uint256,bool)"}},"id":8543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21634:49:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"21572:111:46"},{"expression":{"id":8554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8545,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7606,"src":"21693:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8547,"indexExpression":{"id":8546,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"21725:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21693:37:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8549,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8537,"src":"21776:25:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21802:8:46","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15026,"src":"21776:34:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":8551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21776:36:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":8552,"name":"swapFeeIsOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8539,"src":"21838:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8548,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7588,"src":"21733:13:46","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$7588_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":8553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["21761:13:46","21826:10:46"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"21733:133:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"21693:173:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8555,"nodeType":"ExpressionStatement","src":"21693:173:46"},{"assignments":[8557,8559],"declarations":[{"constant":false,"id":8557,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"21886:26:46","nodeType":"VariableDeclaration","scope":8612,"src":"21878:34:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8556,"name":"uint256","nodeType":"ElementaryTypeName","src":"21878:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8559,"mutability":"mutable","name":"yieldFeeIsOverride","nameLocation":"21919:18:46","nodeType":"VariableDeclaration","scope":8612,"src":"21914:23:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8558,"name":"bool","nodeType":"ElementaryTypeName","src":"21914:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":8564,"initialValue":{"arguments":[{"id":8562,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"21999:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8560,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8502,"src":"21941:16:46","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":8561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21958:27:46","memberName":"getPoolProtocolYieldFeeInfo","nodeType":"MemberAccess","referencedDeclaration":1807,"src":"21941:44:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (address) view external returns (uint256,bool)"}},"id":8563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21941:72:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"21877:136:46"},{"expression":{"id":8574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8565,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7611,"src":"22023:32:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8567,"indexExpression":{"id":8566,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"22056:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22023:38:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8569,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8557,"src":"22107:26:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22134:8:46","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15026,"src":"22107:35:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":8571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22107:37:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":8572,"name":"yieldFeeIsOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8559,"src":"22170:18:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8568,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7588,"src":"22064:13:46","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$7588_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":8573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["22092:13:46","22158:10:46"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"22064:135:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"22023:176:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8575,"nodeType":"ExpressionStatement","src":"22023:176:46"},{"clauses":[{"block":{"id":8589,"nodeType":"Block","src":"22833:92:46","statements":[{"expression":{"id":8587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8583,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7619,"src":"22847:30:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8585,"indexExpression":{"id":8584,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"22878:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22847:36:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8586,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8581,"src":"22886:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22847:67:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8588,"nodeType":"ExpressionStatement","src":"22847:67:46"}]},"errorName":"","id":8590,"nodeType":"TryCatchClause","parameters":{"id":8582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8581,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"22803:28:46","nodeType":"VariableDeclaration","scope":8590,"src":"22795:36:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8580,"name":"uint256","nodeType":"ElementaryTypeName","src":"22795:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22794:38:46"},"src":"22786:139:46"},{"block":{"id":8591,"nodeType":"Block","src":"22932:72:46","statements":[]},"errorName":"","id":8592,"nodeType":"TryCatchClause","src":"22926:78:46"}],"externalCall":{"arguments":[{"id":8578,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"22780:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8576,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8502,"src":"22731:16:46","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":8577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22748:31:46","memberName":"getPoolCreatorSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1815,"src":"22731:48:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":8579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22731:54:46","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8593,"nodeType":"TryStatement","src":"22727:277:46"},{"clauses":[{"block":{"id":8607,"nodeType":"Block","src":"23122:94:46","statements":[{"expression":{"id":8605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8601,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7623,"src":"23136:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8603,"indexExpression":{"id":8602,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"23168:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23136:37:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8604,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8599,"src":"23176:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23136:69:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8606,"nodeType":"ExpressionStatement","src":"23136:69:46"}]},"errorName":"","id":8608,"nodeType":"TryCatchClause","parameters":{"id":8600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8599,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"23091:29:46","nodeType":"VariableDeclaration","scope":8608,"src":"23083:37:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8598,"name":"uint256","nodeType":"ElementaryTypeName","src":"23083:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23082:39:46"},"src":"23074:142:46"},{"block":{"id":8609,"nodeType":"Block","src":"23223:72:46","statements":[]},"errorName":"","id":8610,"nodeType":"TryCatchClause","src":"23217:78:46"}],"externalCall":{"arguments":[{"id":8596,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"23068:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8594,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8502,"src":"23018:16:46","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":8595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23035:32:46","memberName":"getPoolCreatorYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1823,"src":"23018:49:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":8597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23018:55:46","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8611,"nodeType":"TryStatement","src":"23014:281:46"}]},"documentation":{"id":8495,"nodeType":"StructuredDocumentation","src":"20231:945:46","text":" @notice Not exposed in the interface, this enables migration of hidden pool state.\n @dev Permission should NEVER be granted to this function outside of a migration contract. It is necessary to\n permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool\n creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool\n deployment.\n Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe,\n guaranteeing that it is impossible to use this function to change anything after registration. A pool can only\n be registered / configured once - either copied to a new controller in the migration context, or added normally\n through the Vault calling `registerPool`.\n @param pool The address of the pool to be migrated"},"functionSelector":"0874327f","id":8613,"implemented":true,"kind":"function","modifiers":[],"name":"migratePool","nameLocation":"21190:11:46","nodeType":"FunctionDefinition","parameters":{"id":8498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8497,"mutability":"mutable","name":"pool","nameLocation":"21210:4:46","nodeType":"VariableDeclaration","scope":8613,"src":"21202:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8496,"name":"address","nodeType":"ElementaryTypeName","src":"21202:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21201:14:46"},"returnParameters":{"id":8499,"nodeType":"ParameterList","parameters":[],"src":"21225:0:46"},"scope":9230,"src":"21181:2120:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1877],"body":{"id":8689,"nodeType":"Block","src":"23780:1540:46","statements":[{"expression":{"id":8633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8629,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7615,"src":"23790:16:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":8631,"indexExpression":{"id":8630,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8616,"src":"23807:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23790:22:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":8632,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"23815:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"23790:29:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8634,"nodeType":"ExpressionStatement","src":"23790:29:46"},{"expression":{"id":8640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8635,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8625,"src":"23919:26:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":8636,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8620,"src":"23948:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":8638,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7599,"src":"23972:32:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"23948:56:46","trueExpression":{"hexValue":"30","id":8637,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23968:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23919:85:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8641,"nodeType":"ExpressionStatement","src":"23919:85:46"},{"expression":{"id":8647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8642,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8627,"src":"24014:27:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":8643,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8620,"src":"24044:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":8645,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7601,"src":"24068:33:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"24044:57:46","trueExpression":{"hexValue":"30","id":8644,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24064:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24014:87:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8648,"nodeType":"ExpressionStatement","src":"24014:87:46"},{"expression":{"id":8658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8649,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7606,"src":"24549:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8651,"indexExpression":{"id":8650,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8616,"src":"24581:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24549:37:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8653,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8625,"src":"24632:26:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24659:8:46","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15026,"src":"24632:35:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":8655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24632:37:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":8656,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8620,"src":"24695:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8652,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7588,"src":"24589:13:46","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$7588_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":8657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["24617:13:46","24683:10:46"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"24589:134:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"24549:174:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8659,"nodeType":"ExpressionStatement","src":"24549:174:46"},{"expression":{"id":8669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8660,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7611,"src":"24733:32:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8662,"indexExpression":{"id":8661,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8616,"src":"24766:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24733:38:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8664,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8627,"src":"24817:27:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24845:8:46","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15026,"src":"24817:36:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":8666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24817:38:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":8667,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8620,"src":"24881:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8663,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7588,"src":"24774:13:46","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$7588_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":8668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["24802:13:46","24869:10:46"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"24774:135:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"24733:176:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8670,"nodeType":"ExpressionStatement","src":"24733:176:46"},{"eventCall":{"arguments":[{"id":8672,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8616,"src":"25069:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8673,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8625,"src":"25075:26:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8674,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8620,"src":"25103:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8671,"name":"InitialPoolAggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1715,"src":"25031:37:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25031:90:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8676,"nodeType":"EmitStatement","src":"25026:95:46"},{"eventCall":{"arguments":[{"id":8678,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8616,"src":"25175:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8679,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8627,"src":"25181:27:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8680,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8620,"src":"25210:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8677,"name":"InitialPoolAggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1724,"src":"25136:38:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25136:92:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8682,"nodeType":"EmitStatement","src":"25131:97:46"},{"eventCall":{"arguments":[{"id":8684,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8616,"src":"25276:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8685,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8618,"src":"25282:11:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8686,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8620,"src":"25295:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8683,"name":"PoolRegisteredWithFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1733,"src":"25244:31:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,bool)"}},"id":8687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25244:69:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8688,"nodeType":"EmitStatement","src":"25239:74:46"}]},"documentation":{"id":8614,"nodeType":"StructuredDocumentation","src":"23525:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"77ff76e7","id":8690,"implemented":true,"kind":"function","modifiers":[{"id":8623,"kind":"modifierInvocation","modifierName":{"id":8622,"name":"onlyVault","nameLocations":["23688:9:46"],"nodeType":"IdentifierPath","referencedDeclaration":9317,"src":"23688:9:46"},"nodeType":"ModifierInvocation","src":"23688:9:46"}],"name":"registerPool","nameLocation":"23577:12:46","nodeType":"FunctionDefinition","parameters":{"id":8621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8616,"mutability":"mutable","name":"pool","nameLocation":"23607:4:46","nodeType":"VariableDeclaration","scope":8690,"src":"23599:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8615,"name":"address","nodeType":"ElementaryTypeName","src":"23599:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8618,"mutability":"mutable","name":"poolCreator","nameLocation":"23629:11:46","nodeType":"VariableDeclaration","scope":8690,"src":"23621:19:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8617,"name":"address","nodeType":"ElementaryTypeName","src":"23621:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8620,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"23655:17:46","nodeType":"VariableDeclaration","scope":8690,"src":"23650:22:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8619,"name":"bool","nodeType":"ElementaryTypeName","src":"23650:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"23589:89:46"},"returnParameters":{"id":8628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8625,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"23715:26:46","nodeType":"VariableDeclaration","scope":8690,"src":"23707:34:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8624,"name":"uint256","nodeType":"ElementaryTypeName","src":"23707:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8627,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"23751:27:46","nodeType":"VariableDeclaration","scope":8690,"src":"23743:35:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8626,"name":"uint256","nodeType":"ElementaryTypeName","src":"23743:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23706:73:46"},"scope":9230,"src":"23568:1752:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1883],"body":{"id":8702,"nodeType":"Block","src":"25473:82:46","statements":[{"expression":{"arguments":[{"id":8699,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8693,"src":"25519:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8698,"name":"_setGlobalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8720,"src":"25483:35:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":8700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25483:65:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8701,"nodeType":"ExpressionStatement","src":"25483:65:46"}]},"documentation":{"id":8691,"nodeType":"StructuredDocumentation","src":"25326:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8a3c5c69","id":8703,"implemented":true,"kind":"function","modifiers":[{"id":8696,"kind":"modifierInvocation","modifierName":{"id":8695,"name":"authenticate","nameLocations":["25460:12:46"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"25460:12:46"},"nodeType":"ModifierInvocation","src":"25460:12:46"}],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"25378:34:46","nodeType":"FunctionDefinition","parameters":{"id":8694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8693,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"25421:28:46","nodeType":"VariableDeclaration","scope":8703,"src":"25413:36:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8692,"name":"uint256","nodeType":"ElementaryTypeName","src":"25413:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25412:38:46"},"returnParameters":{"id":8697,"nodeType":"ParameterList","parameters":[],"src":"25473:0:46"},"scope":9230,"src":"25369:186:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8719,"nodeType":"Block","src":"25714:164:46","statements":[{"expression":{"id":8713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8711,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7599,"src":"25724:32:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8712,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8705,"src":"25759:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25724:63:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8714,"nodeType":"ExpressionStatement","src":"25724:63:46"},{"eventCall":{"arguments":[{"id":8716,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8705,"src":"25842:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8715,"name":"GlobalProtocolSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1629,"src":"25803:38:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":8717,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25803:68:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8718,"nodeType":"EmitStatement","src":"25798:73:46"}]},"id":8720,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8708,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8705,"src":"25684:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8709,"kind":"modifierInvocation","modifierName":{"id":8707,"name":"withValidSwapFee","nameLocations":["25667:16:46"],"nodeType":"IdentifierPath","referencedDeclaration":7673,"src":"25667:16:46"},"nodeType":"ModifierInvocation","src":"25667:46:46"}],"name":"_setGlobalProtocolSwapFeePercentage","nameLocation":"25570:35:46","nodeType":"FunctionDefinition","parameters":{"id":8706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8705,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"25623:28:46","nodeType":"VariableDeclaration","scope":8720,"src":"25615:36:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8704,"name":"uint256","nodeType":"ElementaryTypeName","src":"25615:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25605:52:46"},"returnParameters":{"id":8710,"nodeType":"ParameterList","parameters":[],"src":"25714:0:46"},"scope":9230,"src":"25561:317:46","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1889],"body":{"id":8732,"nodeType":"Block","src":"26033:84:46","statements":[{"expression":{"arguments":[{"id":8729,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8723,"src":"26080:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8728,"name":"_setGlobalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8750,"src":"26043:36:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":8730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26043:67:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8731,"nodeType":"ExpressionStatement","src":"26043:67:46"}]},"documentation":{"id":8721,"nodeType":"StructuredDocumentation","src":"25884:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"a93df2a4","id":8733,"implemented":true,"kind":"function","modifiers":[{"id":8726,"kind":"modifierInvocation","modifierName":{"id":8725,"name":"authenticate","nameLocations":["26020:12:46"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"26020:12:46"},"nodeType":"ModifierInvocation","src":"26020:12:46"}],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"25936:35:46","nodeType":"FunctionDefinition","parameters":{"id":8724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8723,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"25980:29:46","nodeType":"VariableDeclaration","scope":8733,"src":"25972:37:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8722,"name":"uint256","nodeType":"ElementaryTypeName","src":"25972:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25971:39:46"},"returnParameters":{"id":8727,"nodeType":"ParameterList","parameters":[],"src":"26033:0:46"},"scope":9230,"src":"25927:190:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8749,"nodeType":"Block","src":"26280:168:46","statements":[{"expression":{"id":8743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8741,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7601,"src":"26290:33:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8742,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8735,"src":"26326:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26290:65:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8744,"nodeType":"ExpressionStatement","src":"26290:65:46"},{"eventCall":{"arguments":[{"id":8746,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8735,"src":"26411:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8745,"name":"GlobalProtocolYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1634,"src":"26371:39:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":8747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26371:70:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8748,"nodeType":"EmitStatement","src":"26366:75:46"}]},"id":8750,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8738,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8735,"src":"26249:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8739,"kind":"modifierInvocation","modifierName":{"id":8737,"name":"withValidYieldFee","nameLocations":["26231:17:46"],"nodeType":"IdentifierPath","referencedDeclaration":7691,"src":"26231:17:46"},"nodeType":"ModifierInvocation","src":"26231:48:46"}],"name":"_setGlobalProtocolYieldFeePercentage","nameLocation":"26132:36:46","nodeType":"FunctionDefinition","parameters":{"id":8736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8735,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"26186:29:46","nodeType":"VariableDeclaration","scope":8750,"src":"26178:37:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8734,"name":"uint256","nodeType":"ElementaryTypeName","src":"26178:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26168:53:46"},"returnParameters":{"id":8740,"nodeType":"ParameterList","parameters":[],"src":"26280:0:46"},"scope":9230,"src":"26123:325:46","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1897],"body":{"id":8772,"nodeType":"Block","src":"26699:87:46","statements":[{"expression":{"arguments":[{"id":8767,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8753,"src":"26738:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8768,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8755,"src":"26744:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":8769,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26774:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8766,"name":"_updatePoolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9170,"src":"26709:28:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26709:70:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8771,"nodeType":"ExpressionStatement","src":"26709:70:46"}]},"documentation":{"id":8751,"nodeType":"StructuredDocumentation","src":"26454:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"fd267f39","id":8773,"implemented":true,"kind":"function","modifiers":[{"id":8758,"kind":"modifierInvocation","modifierName":{"id":8757,"name":"authenticate","nameLocations":["26618:12:46"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"26618:12:46"},"nodeType":"ModifierInvocation","src":"26618:12:46"},{"arguments":[{"id":8760,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8755,"src":"26648:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8761,"kind":"modifierInvocation","modifierName":{"id":8759,"name":"withValidSwapFee","nameLocations":["26631:16:46"],"nodeType":"IdentifierPath","referencedDeclaration":7673,"src":"26631:16:46"},"nodeType":"ModifierInvocation","src":"26631:46:46"},{"arguments":[{"id":8763,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8753,"src":"26693:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8764,"kind":"modifierInvocation","modifierName":{"id":8762,"name":"withLatestFees","nameLocations":["26678:14:46"],"nodeType":"IdentifierPath","referencedDeclaration":7715,"src":"26678:14:46"},"nodeType":"ModifierInvocation","src":"26678:20:46"}],"name":"setProtocolSwapFeePercentage","nameLocation":"26506:28:46","nodeType":"FunctionDefinition","parameters":{"id":8756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8753,"mutability":"mutable","name":"pool","nameLocation":"26552:4:46","nodeType":"VariableDeclaration","scope":8773,"src":"26544:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8752,"name":"address","nodeType":"ElementaryTypeName","src":"26544:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8755,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"26574:28:46","nodeType":"VariableDeclaration","scope":8773,"src":"26566:36:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8754,"name":"uint256","nodeType":"ElementaryTypeName","src":"26566:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26534:74:46"},"returnParameters":{"id":8765,"nodeType":"ParameterList","parameters":[],"src":"26699:0:46"},"scope":9230,"src":"26497:289:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1905],"body":{"id":8795,"nodeType":"Block","src":"27041:89:46","statements":[{"expression":{"arguments":[{"id":8790,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8776,"src":"27081:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8791,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8778,"src":"27087:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":8792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"27118:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8789,"name":"_updatePoolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9208,"src":"27051:29:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27051:72:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8794,"nodeType":"ExpressionStatement","src":"27051:72:46"}]},"documentation":{"id":8774,"nodeType":"StructuredDocumentation","src":"26792:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"abaa3356","id":8796,"implemented":true,"kind":"function","modifiers":[{"id":8781,"kind":"modifierInvocation","modifierName":{"id":8780,"name":"authenticate","nameLocations":["26958:12:46"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"26958:12:46"},"nodeType":"ModifierInvocation","src":"26958:12:46"},{"arguments":[{"id":8783,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8778,"src":"26989:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8784,"kind":"modifierInvocation","modifierName":{"id":8782,"name":"withValidYieldFee","nameLocations":["26971:17:46"],"nodeType":"IdentifierPath","referencedDeclaration":7691,"src":"26971:17:46"},"nodeType":"ModifierInvocation","src":"26971:48:46"},{"arguments":[{"id":8786,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8776,"src":"27035:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8787,"kind":"modifierInvocation","modifierName":{"id":8785,"name":"withLatestFees","nameLocations":["27020:14:46"],"nodeType":"IdentifierPath","referencedDeclaration":7715,"src":"27020:14:46"},"nodeType":"ModifierInvocation","src":"27020:20:46"}],"name":"setProtocolYieldFeePercentage","nameLocation":"26844:29:46","nodeType":"FunctionDefinition","parameters":{"id":8779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8776,"mutability":"mutable","name":"pool","nameLocation":"26891:4:46","nodeType":"VariableDeclaration","scope":8796,"src":"26883:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8775,"name":"address","nodeType":"ElementaryTypeName","src":"26883:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8778,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"26913:29:46","nodeType":"VariableDeclaration","scope":8796,"src":"26905:37:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8777,"name":"uint256","nodeType":"ElementaryTypeName","src":"26905:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26873:75:46"},"returnParameters":{"id":8788,"nodeType":"ParameterList","parameters":[],"src":"27041:0:46"},"scope":9230,"src":"26835:295:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1913],"body":{"id":8820,"nodeType":"Block","src":"27400:103:46","statements":[{"expression":{"arguments":[{"id":8814,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8799,"src":"27439:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8815,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8801,"src":"27445:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8816,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"27475:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8817,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27491:4:46","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7580,"src":"27475:20:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":8813,"name":"_setPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8908,"src":"27410:28:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_enum$_ProtocolFeeType_$7582_$returns$__$","typeString":"function (address,uint256,enum ProtocolFeeController.ProtocolFeeType)"}},"id":8818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27410:86:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8819,"nodeType":"ExpressionStatement","src":"27410:86:46"}]},"documentation":{"id":8797,"nodeType":"StructuredDocumentation","src":"27136:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"1377c16c","id":8821,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8804,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8799,"src":"27319:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8805,"kind":"modifierInvocation","modifierName":{"id":8803,"name":"onlyPoolCreator","nameLocations":["27303:15:46"],"nodeType":"IdentifierPath","referencedDeclaration":7655,"src":"27303:15:46"},"nodeType":"ModifierInvocation","src":"27303:21:46"},{"arguments":[{"id":8807,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8801,"src":"27349:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8808,"kind":"modifierInvocation","modifierName":{"id":8806,"name":"withValidPoolCreatorFee","nameLocations":["27325:23:46"],"nodeType":"IdentifierPath","referencedDeclaration":7705,"src":"27325:23:46"},"nodeType":"ModifierInvocation","src":"27325:53:46"},{"arguments":[{"id":8810,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8799,"src":"27394:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8811,"kind":"modifierInvocation","modifierName":{"id":8809,"name":"withLatestFees","nameLocations":["27379:14:46"],"nodeType":"IdentifierPath","referencedDeclaration":7715,"src":"27379:14:46"},"nodeType":"ModifierInvocation","src":"27379:20:46"}],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"27188:31:46","nodeType":"FunctionDefinition","parameters":{"id":8802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8799,"mutability":"mutable","name":"pool","nameLocation":"27237:4:46","nodeType":"VariableDeclaration","scope":8821,"src":"27229:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8798,"name":"address","nodeType":"ElementaryTypeName","src":"27229:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8801,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"27259:28:46","nodeType":"VariableDeclaration","scope":8821,"src":"27251:36:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8800,"name":"uint256","nodeType":"ElementaryTypeName","src":"27251:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27219:74:46"},"returnParameters":{"id":8812,"nodeType":"ParameterList","parameters":[],"src":"27400:0:46"},"scope":9230,"src":"27179:324:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1921],"body":{"id":8845,"nodeType":"Block","src":"27776:105:46","statements":[{"expression":{"arguments":[{"id":8839,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8824,"src":"27815:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8840,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8826,"src":"27821:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8841,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"27852:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8842,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27868:5:46","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":7581,"src":"27852:21:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":8838,"name":"_setPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8908,"src":"27786:28:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_enum$_ProtocolFeeType_$7582_$returns$__$","typeString":"function (address,uint256,enum ProtocolFeeController.ProtocolFeeType)"}},"id":8843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27786:88:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8844,"nodeType":"ExpressionStatement","src":"27786:88:46"}]},"documentation":{"id":8822,"nodeType":"StructuredDocumentation","src":"27509:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"3af52712","id":8846,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8829,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8824,"src":"27694:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8830,"kind":"modifierInvocation","modifierName":{"id":8828,"name":"onlyPoolCreator","nameLocations":["27678:15:46"],"nodeType":"IdentifierPath","referencedDeclaration":7655,"src":"27678:15:46"},"nodeType":"ModifierInvocation","src":"27678:21:46"},{"arguments":[{"id":8832,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8826,"src":"27724:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8833,"kind":"modifierInvocation","modifierName":{"id":8831,"name":"withValidPoolCreatorFee","nameLocations":["27700:23:46"],"nodeType":"IdentifierPath","referencedDeclaration":7705,"src":"27700:23:46"},"nodeType":"ModifierInvocation","src":"27700:54:46"},{"arguments":[{"id":8835,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8824,"src":"27770:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8836,"kind":"modifierInvocation","modifierName":{"id":8834,"name":"withLatestFees","nameLocations":["27755:14:46"],"nodeType":"IdentifierPath","referencedDeclaration":7715,"src":"27755:14:46"},"nodeType":"ModifierInvocation","src":"27755:20:46"}],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"27561:32:46","nodeType":"FunctionDefinition","parameters":{"id":8827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8824,"mutability":"mutable","name":"pool","nameLocation":"27611:4:46","nodeType":"VariableDeclaration","scope":8846,"src":"27603:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8823,"name":"address","nodeType":"ElementaryTypeName","src":"27603:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8826,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"27633:29:46","nodeType":"VariableDeclaration","scope":8846,"src":"27625:37:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8825,"name":"uint256","nodeType":"ElementaryTypeName","src":"27625:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27593:75:46"},"returnParameters":{"id":8837,"nodeType":"ParameterList","parameters":[],"src":"27776:0:46"},"scope":9230,"src":"27552:329:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8907,"nodeType":"Block","src":"28037:900:46","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":8859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8856,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8853,"src":"28133:7:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":8857,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"28144:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8858,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28160:4:46","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7580,"src":"28144:20:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"28133:31:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8905,"nodeType":"Block","src":"28549:382:46","statements":[{"expression":{"id":8887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8883,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7623,"src":"28563:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8885,"indexExpression":{"id":8884,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8848,"src":"28595:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28563:37:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8886,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8850,"src":"28603:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28563:64:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8888,"nodeType":"ExpressionStatement","src":"28563:64:46"},{"expression":{"arguments":[{"id":8892,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8848,"src":"28770:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":8894,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8848,"src":"28803:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":8895,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"28809:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8896,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28825:5:46","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":7581,"src":"28809:21:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":8893,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8385,"src":"28776:26:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$7582_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":8897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28776:55:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8889,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"28729:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":8891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28736:33:46","memberName":"updateAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2689,"src":"28729:40:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":8898,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28729:103:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8899,"nodeType":"ExpressionStatement","src":"28729:103:46"},{"eventCall":{"arguments":[{"id":8901,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8848,"src":"28889:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8902,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8850,"src":"28895:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8900,"name":"PoolCreatorYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1662,"src":"28852:36:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":8903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28852:68:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8904,"nodeType":"EmitStatement","src":"28847:73:46"}]},"id":8906,"nodeType":"IfStatement","src":"28129:802:46","trueBody":{"id":8882,"nodeType":"Block","src":"28166:377:46","statements":[{"expression":{"id":8864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8860,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7619,"src":"28180:30:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8862,"indexExpression":{"id":8861,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8848,"src":"28211:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28180:36:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8863,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8850,"src":"28219:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28180:63:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8865,"nodeType":"ExpressionStatement","src":"28180:63:46"},{"expression":{"arguments":[{"id":8869,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8848,"src":"28384:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":8871,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8848,"src":"28417:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":8872,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"28423:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8873,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28439:4:46","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7580,"src":"28423:20:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":8870,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8385,"src":"28390:26:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$7582_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":8874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28390:54:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8866,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"28344:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":8868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28351:32:46","memberName":"updateAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2681,"src":"28344:39:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":8875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28344:101:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8876,"nodeType":"ExpressionStatement","src":"28344:101:46"},{"eventCall":{"arguments":[{"id":8878,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8848,"src":"28501:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8879,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8850,"src":"28507:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8877,"name":"PoolCreatorSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1655,"src":"28465:35:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":8880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28465:67:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8881,"nodeType":"EmitStatement","src":"28460:72:46"}]}}]},"id":8908,"implemented":true,"kind":"function","modifiers":[],"name":"_setPoolCreatorFeePercentage","nameLocation":"27896:28:46","nodeType":"FunctionDefinition","parameters":{"id":8854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8848,"mutability":"mutable","name":"pool","nameLocation":"27942:4:46","nodeType":"VariableDeclaration","scope":8908,"src":"27934:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8847,"name":"address","nodeType":"ElementaryTypeName","src":"27934:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8850,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"27964:24:46","nodeType":"VariableDeclaration","scope":8908,"src":"27956:32:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8849,"name":"uint256","nodeType":"ElementaryTypeName","src":"27956:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8853,"mutability":"mutable","name":"feeType","nameLocation":"28014:7:46","nodeType":"VariableDeclaration","scope":8908,"src":"27998:23:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":8852,"nodeType":"UserDefinedTypeName","pathNode":{"id":8851,"name":"ProtocolFeeType","nameLocations":["27998:15:46"],"nodeType":"IdentifierPath","referencedDeclaration":7582,"src":"27998:15:46"},"referencedDeclaration":7582,"src":"27998:15:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"}],"src":"27924:103:46"},"returnParameters":{"id":8855,"nodeType":"ParameterList","parameters":[],"src":"28037:0:46"},"scope":9230,"src":"27887:1050:46","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1929],"body":{"id":8954,"nodeType":"Block","src":"29071:258:46","statements":[{"assignments":[8922,8924],"declarations":[{"constant":false,"id":8922,"mutability":"mutable","name":"poolTokens","nameLocation":"29098:10:46","nodeType":"VariableDeclaration","scope":8954,"src":"29082:26:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":8920,"nodeType":"UserDefinedTypeName","pathNode":{"id":8919,"name":"IERC20","nameLocations":["29082:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"29082:6:46"},"referencedDeclaration":10576,"src":"29082:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":8921,"nodeType":"ArrayTypeName","src":"29082:8:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":8924,"mutability":"mutable","name":"numTokens","nameLocation":"29118:9:46","nodeType":"VariableDeclaration","scope":8954,"src":"29110:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8923,"name":"uint256","nodeType":"ElementaryTypeName","src":"29110:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8928,"initialValue":{"arguments":[{"id":8926,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8911,"src":"29154:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8925,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8475,"src":"29131:22:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":8927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29131:28:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"29081:78:46"},{"body":{"id":8952,"nodeType":"Block","src":"29210:113:46","statements":[{"assignments":[8941],"declarations":[{"constant":false,"id":8941,"mutability":"mutable","name":"token","nameLocation":"29231:5:46","nodeType":"VariableDeclaration","scope":8952,"src":"29224:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":8940,"nodeType":"UserDefinedTypeName","pathNode":{"id":8939,"name":"IERC20","nameLocations":["29224:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"29224:6:46"},"referencedDeclaration":10576,"src":"29224:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":8945,"initialValue":{"baseExpression":{"id":8942,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8922,"src":"29239:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":8944,"indexExpression":{"id":8943,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8930,"src":"29250:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29239:13:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"29224:28:46"},{"expression":{"arguments":[{"id":8947,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8911,"src":"29289:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8948,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8913,"src":"29295:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8949,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8941,"src":"29306:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":8946,"name":"_withdrawProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9028,"src":"29267:21:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$10576_$returns$__$","typeString":"function (address,address,contract IERC20)"}},"id":8950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29267:45:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8951,"nodeType":"ExpressionStatement","src":"29267:45:46"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8933,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8930,"src":"29190:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8934,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8924,"src":"29194:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29190:13:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8953,"initializationExpression":{"assignments":[8930],"declarations":[{"constant":false,"id":8930,"mutability":"mutable","name":"i","nameLocation":"29183:1:46","nodeType":"VariableDeclaration","scope":8953,"src":"29175:9:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8929,"name":"uint256","nodeType":"ElementaryTypeName","src":"29175:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8932,"initialValue":{"hexValue":"30","id":8931,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29187:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"29175:13:46"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"29205:3:46","subExpression":{"id":8936,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8930,"src":"29207:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8938,"nodeType":"ExpressionStatement","src":"29205:3:46"},"nodeType":"ForStatement","src":"29170:153:46"}]},"documentation":{"id":8909,"nodeType":"StructuredDocumentation","src":"28943:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"cf7b287f","id":8955,"implemented":true,"kind":"function","modifiers":[{"id":8916,"kind":"modifierInvocation","modifierName":{"id":8915,"name":"authenticate","nameLocations":["29058:12:46"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"29058:12:46"},"nodeType":"ModifierInvocation","src":"29058:12:46"}],"name":"withdrawProtocolFees","nameLocation":"28995:20:46","nodeType":"FunctionDefinition","parameters":{"id":8914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8911,"mutability":"mutable","name":"pool","nameLocation":"29024:4:46","nodeType":"VariableDeclaration","scope":8955,"src":"29016:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8910,"name":"address","nodeType":"ElementaryTypeName","src":"29016:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8913,"mutability":"mutable","name":"recipient","nameLocation":"29038:9:46","nodeType":"VariableDeclaration","scope":8955,"src":"29030:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8912,"name":"address","nodeType":"ElementaryTypeName","src":"29030:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29015:33:46"},"returnParameters":{"id":8917,"nodeType":"ParameterList","parameters":[],"src":"29071:0:46"},"scope":9230,"src":"28986:343:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1940],"body":{"id":8981,"nodeType":"Block","src":"29485:217:46","statements":[{"expression":{"arguments":[{"id":8971,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8958,"src":"29628:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8972,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8963,"src":"29634:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"expression":{"id":8968,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"29588:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":8970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29595:32:46","memberName":"getPoolTokenCountAndIndexOfToken","nodeType":"MemberAccess","referencedDeclaration":3950,"src":"29588:39:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_contract$_IERC20_$10576_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,contract IERC20) view external returns (uint256,uint256)"}},"id":8973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29588:52:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":8974,"nodeType":"ExpressionStatement","src":"29588:52:46"},{"expression":{"arguments":[{"id":8976,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8958,"src":"29672:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8977,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8960,"src":"29678:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8978,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8963,"src":"29689:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":8975,"name":"_withdrawProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9028,"src":"29650:21:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$10576_$returns$__$","typeString":"function (address,address,contract IERC20)"}},"id":8979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29650:45:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8980,"nodeType":"ExpressionStatement","src":"29650:45:46"}]},"documentation":{"id":8956,"nodeType":"StructuredDocumentation","src":"29335:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"b53a70b2","id":8982,"implemented":true,"kind":"function","modifiers":[{"id":8966,"kind":"modifierInvocation","modifierName":{"id":8965,"name":"authenticate","nameLocations":["29472:12:46"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"29472:12:46"},"nodeType":"ModifierInvocation","src":"29472:12:46"}],"name":"withdrawProtocolFeesForToken","nameLocation":"29387:28:46","nodeType":"FunctionDefinition","parameters":{"id":8964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8958,"mutability":"mutable","name":"pool","nameLocation":"29424:4:46","nodeType":"VariableDeclaration","scope":8982,"src":"29416:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8957,"name":"address","nodeType":"ElementaryTypeName","src":"29416:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8960,"mutability":"mutable","name":"recipient","nameLocation":"29438:9:46","nodeType":"VariableDeclaration","scope":8982,"src":"29430:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8959,"name":"address","nodeType":"ElementaryTypeName","src":"29430:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8963,"mutability":"mutable","name":"token","nameLocation":"29456:5:46","nodeType":"VariableDeclaration","scope":8982,"src":"29449:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":8962,"nodeType":"UserDefinedTypeName","pathNode":{"id":8961,"name":"IERC20","nameLocations":["29449:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"29449:6:46"},"referencedDeclaration":10576,"src":"29449:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"29415:47:46"},"returnParameters":{"id":8967,"nodeType":"ParameterList","parameters":[],"src":"29485:0:46"},"scope":9230,"src":"29378:324:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9027,"nodeType":"Block","src":"29795:316:46","statements":[{"assignments":[8993],"declarations":[{"constant":false,"id":8993,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"29813:16:46","nodeType":"VariableDeclaration","scope":9027,"src":"29805:24:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8992,"name":"uint256","nodeType":"ElementaryTypeName","src":"29805:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8999,"initialValue":{"baseExpression":{"baseExpression":{"id":8994,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7630,"src":"29832:19:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":8996,"indexExpression":{"id":8995,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8984,"src":"29852:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29832:25:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":8998,"indexExpression":{"id":8997,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8989,"src":"29858:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29832:32:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29805:59:46"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9002,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9000,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8993,"src":"29878:16:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29897:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29878:20:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9026,"nodeType":"IfStatement","src":"29874:231:46","trueBody":{"id":9025,"nodeType":"Block","src":"29900:205:46","statements":[{"expression":{"id":9009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":9003,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7630,"src":"29914:19:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":9006,"indexExpression":{"id":9004,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8984,"src":"29934:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29914:25:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":9007,"indexExpression":{"id":9005,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8989,"src":"29940:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"29914:32:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":9008,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29949:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29914:36:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9010,"nodeType":"ExpressionStatement","src":"29914:36:46"},{"expression":{"arguments":[{"id":9014,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8986,"src":"29983:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9015,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8993,"src":"29994:16:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9011,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8989,"src":"29964:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":9013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29970:12:46","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10647,"src":"29964:18:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":9016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29964:47:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9017,"nodeType":"ExpressionStatement","src":"29964:47:46"},{"eventCall":{"arguments":[{"id":9019,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8984,"src":"30053:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9020,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8989,"src":"30059:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":9021,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8986,"src":"30066:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9022,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8993,"src":"30077:16:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9018,"name":"ProtocolFeesWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1694,"src":"30031:21:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,address,uint256)"}},"id":9023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30031:63:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9024,"nodeType":"EmitStatement","src":"30026:68:46"}]}}]},"id":9028,"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawProtocolFees","nameLocation":"29717:21:46","nodeType":"FunctionDefinition","parameters":{"id":8990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8984,"mutability":"mutable","name":"pool","nameLocation":"29747:4:46","nodeType":"VariableDeclaration","scope":9028,"src":"29739:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8983,"name":"address","nodeType":"ElementaryTypeName","src":"29739:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8986,"mutability":"mutable","name":"recipient","nameLocation":"29761:9:46","nodeType":"VariableDeclaration","scope":9028,"src":"29753:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8985,"name":"address","nodeType":"ElementaryTypeName","src":"29753:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8989,"mutability":"mutable","name":"token","nameLocation":"29779:5:46","nodeType":"VariableDeclaration","scope":9028,"src":"29772:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":8988,"nodeType":"UserDefinedTypeName","pathNode":{"id":8987,"name":"IERC20","nameLocations":["29772:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"29772:6:46"},"referencedDeclaration":10576,"src":"29772:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"29738:47:46"},"returnParameters":{"id":8991,"nodeType":"ParameterList","parameters":[],"src":"29795:0:46"},"scope":9230,"src":"29708:403:46","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1948],"body":{"id":9044,"nodeType":"Block","src":"30257:58:46","statements":[{"expression":{"arguments":[{"id":9040,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9031,"src":"30292:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9041,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9033,"src":"30298:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9039,"name":"_withdrawPoolCreatorFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9132,"src":"30267:24:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30267:41:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9043,"nodeType":"ExpressionStatement","src":"30267:41:46"}]},"documentation":{"id":9029,"nodeType":"StructuredDocumentation","src":"30117:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"f7061445","id":9045,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":9036,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9031,"src":"30251:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":9037,"kind":"modifierInvocation","modifierName":{"id":9035,"name":"onlyPoolCreator","nameLocations":["30235:15:46"],"nodeType":"IdentifierPath","referencedDeclaration":7655,"src":"30235:15:46"},"nodeType":"ModifierInvocation","src":"30235:21:46"}],"name":"withdrawPoolCreatorFees","nameLocation":"30169:23:46","nodeType":"FunctionDefinition","parameters":{"id":9034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9031,"mutability":"mutable","name":"pool","nameLocation":"30201:4:46","nodeType":"VariableDeclaration","scope":9045,"src":"30193:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9030,"name":"address","nodeType":"ElementaryTypeName","src":"30193:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9033,"mutability":"mutable","name":"recipient","nameLocation":"30215:9:46","nodeType":"VariableDeclaration","scope":9045,"src":"30207:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9032,"name":"address","nodeType":"ElementaryTypeName","src":"30207:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30192:33:46"},"returnParameters":{"id":9038,"nodeType":"ParameterList","parameters":[],"src":"30257:0:46"},"scope":9230,"src":"30160:155:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1954],"body":{"id":9058,"nodeType":"Block","src":"30420:70:46","statements":[{"expression":{"arguments":[{"id":9052,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9048,"src":"30455:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":9054,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9048,"src":"30477:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9053,"name":"_getPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8494,"src":"30461:15:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":9055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30461:21:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9051,"name":"_withdrawPoolCreatorFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9132,"src":"30430:24:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30430:53:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9057,"nodeType":"ExpressionStatement","src":"30430:53:46"}]},"documentation":{"id":9046,"nodeType":"StructuredDocumentation","src":"30321:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"52f125f0","id":9059,"implemented":true,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"30373:23:46","nodeType":"FunctionDefinition","parameters":{"id":9049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9048,"mutability":"mutable","name":"pool","nameLocation":"30405:4:46","nodeType":"VariableDeclaration","scope":9059,"src":"30397:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9047,"name":"address","nodeType":"ElementaryTypeName","src":"30397:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30396:14:46"},"returnParameters":{"id":9050,"nodeType":"ParameterList","parameters":[],"src":"30420:0:46"},"scope":9230,"src":"30364:126:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9131,"nodeType":"Block","src":"30571:541:46","statements":[{"assignments":[9070,9072],"declarations":[{"constant":false,"id":9070,"mutability":"mutable","name":"poolTokens","nameLocation":"30598:10:46","nodeType":"VariableDeclaration","scope":9131,"src":"30582:26:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":9068,"nodeType":"UserDefinedTypeName","pathNode":{"id":9067,"name":"IERC20","nameLocations":["30582:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"30582:6:46"},"referencedDeclaration":10576,"src":"30582:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":9069,"nodeType":"ArrayTypeName","src":"30582:8:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":9072,"mutability":"mutable","name":"numTokens","nameLocation":"30618:9:46","nodeType":"VariableDeclaration","scope":9131,"src":"30610:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9071,"name":"uint256","nodeType":"ElementaryTypeName","src":"30610:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9076,"initialValue":{"arguments":[{"id":9074,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9061,"src":"30654:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9073,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8475,"src":"30631:22:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":9075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30631:28:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"30581:78:46"},{"body":{"id":9129,"nodeType":"Block","src":"30710:396:46","statements":[{"assignments":[9089],"declarations":[{"constant":false,"id":9089,"mutability":"mutable","name":"token","nameLocation":"30731:5:46","nodeType":"VariableDeclaration","scope":9129,"src":"30724:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":9088,"nodeType":"UserDefinedTypeName","pathNode":{"id":9087,"name":"IERC20","nameLocations":["30724:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"30724:6:46"},"referencedDeclaration":10576,"src":"30724:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":9093,"initialValue":{"baseExpression":{"id":9090,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9070,"src":"30739:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":9092,"indexExpression":{"id":9091,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9078,"src":"30750:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30739:13:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"30724:28:46"},{"assignments":[9095],"declarations":[{"constant":false,"id":9095,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"30775:16:46","nodeType":"VariableDeclaration","scope":9129,"src":"30767:24:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9094,"name":"uint256","nodeType":"ElementaryTypeName","src":"30767:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9101,"initialValue":{"baseExpression":{"baseExpression":{"id":9096,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7637,"src":"30794:22:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":9098,"indexExpression":{"id":9097,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9061,"src":"30817:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30794:28:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":9100,"indexExpression":{"id":9099,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9089,"src":"30823:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30794:35:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30767:62:46"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9102,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9095,"src":"30847:16:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30866:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30847:20:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9128,"nodeType":"IfStatement","src":"30843:253:46","trueBody":{"id":9127,"nodeType":"Block","src":"30869:227:46","statements":[{"expression":{"id":9111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":9105,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7637,"src":"30887:22:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":9108,"indexExpression":{"id":9106,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9061,"src":"30910:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30887:28:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":9109,"indexExpression":{"id":9107,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9089,"src":"30916:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"30887:35:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":9110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30925:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30887:39:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9112,"nodeType":"ExpressionStatement","src":"30887:39:46"},{"expression":{"arguments":[{"id":9116,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9063,"src":"30963:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9117,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9095,"src":"30974:16:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9113,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9089,"src":"30944:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":9115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30950:12:46","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10647,"src":"30944:18:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":9118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30944:47:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9119,"nodeType":"ExpressionStatement","src":"30944:47:46"},{"eventCall":{"arguments":[{"id":9121,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9061,"src":"31040:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9122,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9089,"src":"31046:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":9123,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9063,"src":"31053:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9124,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9095,"src":"31064:16:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9120,"name":"PoolCreatorFeesWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1706,"src":"31015:24:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,address,uint256)"}},"id":9125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31015:66:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9126,"nodeType":"EmitStatement","src":"31010:71:46"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9081,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9078,"src":"30690:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":9082,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9072,"src":"30694:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30690:13:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9130,"initializationExpression":{"assignments":[9078],"declarations":[{"constant":false,"id":9078,"mutability":"mutable","name":"i","nameLocation":"30683:1:46","nodeType":"VariableDeclaration","scope":9130,"src":"30675:9:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9077,"name":"uint256","nodeType":"ElementaryTypeName","src":"30675:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9080,"initialValue":{"hexValue":"30","id":9079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30687:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"30675:13:46"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":9085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"30705:3:46","subExpression":{"id":9084,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9078,"src":"30707:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9086,"nodeType":"ExpressionStatement","src":"30705:3:46"},"nodeType":"ForStatement","src":"30670:436:46"}]},"id":9132,"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawPoolCreatorFees","nameLocation":"30505:24:46","nodeType":"FunctionDefinition","parameters":{"id":9064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9061,"mutability":"mutable","name":"pool","nameLocation":"30538:4:46","nodeType":"VariableDeclaration","scope":9132,"src":"30530:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9060,"name":"address","nodeType":"ElementaryTypeName","src":"30530:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9063,"mutability":"mutable","name":"recipient","nameLocation":"30552:9:46","nodeType":"VariableDeclaration","scope":9132,"src":"30544:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9062,"name":"address","nodeType":"ElementaryTypeName","src":"30544:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30529:33:46"},"returnParameters":{"id":9065,"nodeType":"ParameterList","parameters":[],"src":"30571:0:46"},"scope":9230,"src":"30496:616:46","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":9169,"nodeType":"Block","src":"31352:771:46","statements":[{"expression":{"id":9151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":9142,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7606,"src":"31667:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":9144,"indexExpression":{"id":9143,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9135,"src":"31699:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"31667:37:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9146,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9137,"src":"31750:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31779:8:46","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15026,"src":"31750:37:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":9148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31750:39:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":9149,"name":"isOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9139,"src":"31815:10:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":9145,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7588,"src":"31707:13:46","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$7588_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":9150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["31735:13:46","31803:10:46"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"31707:129:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"31667:169:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":9152,"nodeType":"ExpressionStatement","src":"31667:169:46"},{"expression":{"arguments":[{"id":9156,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9135,"src":"31971:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":9158,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9135,"src":"32004:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":9159,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"32010:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":9160,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32026:4:46","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7580,"src":"32010:20:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":9157,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8385,"src":"31977:26:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$7582_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":9161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31977:54:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9153,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"31931:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":9155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31938:32:46","memberName":"updateAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2681,"src":"31931:39:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":9162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31931:101:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9163,"nodeType":"ExpressionStatement","src":"31931:101:46"},{"eventCall":{"arguments":[{"id":9165,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9135,"src":"32081:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9166,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9137,"src":"32087:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9164,"name":"ProtocolSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1641,"src":"32048:32:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":9167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32048:68:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9168,"nodeType":"EmitStatement","src":"32043:73:46"}]},"documentation":{"id":9133,"nodeType":"StructuredDocumentation","src":"31118:114:46","text":"@dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage."},"id":9170,"implemented":true,"kind":"function","modifiers":[],"name":"_updatePoolSwapFeePercentage","nameLocation":"31246:28:46","nodeType":"FunctionDefinition","parameters":{"id":9140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9135,"mutability":"mutable","name":"pool","nameLocation":"31283:4:46","nodeType":"VariableDeclaration","scope":9170,"src":"31275:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9134,"name":"address","nodeType":"ElementaryTypeName","src":"31275:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9137,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"31297:28:46","nodeType":"VariableDeclaration","scope":9170,"src":"31289:36:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9136,"name":"uint256","nodeType":"ElementaryTypeName","src":"31289:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9139,"mutability":"mutable","name":"isOverride","nameLocation":"31332:10:46","nodeType":"VariableDeclaration","scope":9170,"src":"31327:15:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9138,"name":"bool","nodeType":"ElementaryTypeName","src":"31327:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"31274:69:46"},"returnParameters":{"id":9141,"nodeType":"ParameterList","parameters":[],"src":"31352:0:46"},"scope":9230,"src":"31237:886:46","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":9207,"nodeType":"Block","src":"32395:767:46","statements":[{"expression":{"id":9189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":9180,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7611,"src":"32699:32:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":9182,"indexExpression":{"id":9181,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9173,"src":"32732:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"32699:38:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9184,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9175,"src":"32783:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32813:8:46","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15026,"src":"32783:38:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":9186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32783:40:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":9187,"name":"isOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9177,"src":"32849:10:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":9183,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7588,"src":"32740:13:46","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$7588_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":9188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["32768:13:46","32837:10:46"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"32740:130:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"32699:171:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":9190,"nodeType":"ExpressionStatement","src":"32699:171:46"},{"expression":{"arguments":[{"id":9194,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9173,"src":"33007:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":9196,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9173,"src":"33040:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":9197,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"33046:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":9198,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"33062:5:46","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":7581,"src":"33046:21:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":9195,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8385,"src":"33013:26:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$7582_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":9199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33013:55:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9191,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"32966:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":9193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32973:33:46","memberName":"updateAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2689,"src":"32966:40:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":9200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32966:103:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9201,"nodeType":"ExpressionStatement","src":"32966:103:46"},{"eventCall":{"arguments":[{"id":9203,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9173,"src":"33119:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9204,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9175,"src":"33125:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9202,"name":"ProtocolYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1648,"src":"33085:33:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":9205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33085:70:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9206,"nodeType":"EmitStatement","src":"33080:75:46"}]},"documentation":{"id":9171,"nodeType":"StructuredDocumentation","src":"32129:114:46","text":"@dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage."},"id":9208,"implemented":true,"kind":"function","modifiers":[],"name":"_updatePoolYieldFeePercentage","nameLocation":"32257:29:46","nodeType":"FunctionDefinition","parameters":{"id":9178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9173,"mutability":"mutable","name":"pool","nameLocation":"32304:4:46","nodeType":"VariableDeclaration","scope":9208,"src":"32296:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9172,"name":"address","nodeType":"ElementaryTypeName","src":"32296:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9175,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"32326:29:46","nodeType":"VariableDeclaration","scope":9208,"src":"32318:37:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9174,"name":"uint256","nodeType":"ElementaryTypeName","src":"32318:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9177,"mutability":"mutable","name":"isOverride","nameLocation":"32370:10:46","nodeType":"VariableDeclaration","scope":9208,"src":"32365:15:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9176,"name":"bool","nodeType":"ElementaryTypeName","src":"32365:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"32286:100:46"},"returnParameters":{"id":9179,"nodeType":"ParameterList","parameters":[],"src":"32395:0:46"},"scope":9230,"src":"32248:914:46","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":9228,"nodeType":"Block","src":"33235:682:46","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9213,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9210,"src":"33770:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9214,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4302,"src":"33786:18:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33770:34:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9216,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"33769:36:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9217,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4302,"src":"33808:18:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33769:57:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9219,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9210,"src":"33830:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33769:74:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9227,"nodeType":"IfStatement","src":"33765:146:46","trueBody":{"id":9226,"nodeType":"Block","src":"33845:66:46","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9221,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"33866:12:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3202_$","typeString":"type(contract IVaultErrors)"}},"id":9223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33879:19:46","memberName":"FeePrecisionTooHigh","nodeType":"MemberAccess","referencedDeclaration":3050,"src":"33866:32:46","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33866:34:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9225,"nodeType":"RevertStatement","src":"33859:41:46"}]}}]},"id":9229,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidPrecision","nameLocation":"33177:21:46","nodeType":"FunctionDefinition","parameters":{"id":9211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9210,"mutability":"mutable","name":"feePercentage","nameLocation":"33207:13:46","nodeType":"VariableDeclaration","scope":9229,"src":"33199:21:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9209,"name":"uint256","nodeType":"ElementaryTypeName","src":"33199:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33198:23:46"},"returnParameters":{"id":9212,"nodeType":"ParameterList","parameters":[],"src":"33235:0:46"},"scope":9230,"src":"33168:749:46","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":9231,"src":"3120:30799:46","usedErrors":[5,1736,1739,1744,1751,1754,3050,3074,5007,6956,7355,7642,7645,10614,14337],"usedEvents":[1629,1634,1641,1648,1655,1662,1672,1682,1694,1706,1715,1724,1733]}],"src":"46:33874:46"},"id":46},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","exportedSymbols":{"CommonAuthentication":[7535],"IAuthorizer":[1341],"IVault":[2545],"SingletonAuthentication":[9289]},"id":9290,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":9232,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:47"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":9234,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9290,"sourceUnit":1342,"src":"72:91:47","symbolAliases":[{"foreign":{"id":9233,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"81:11:47","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":9236,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9290,"sourceUnit":2546,"src":"164:81:47","symbolAliases":[{"foreign":{"id":9235,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"173:6:47","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol","file":"./CommonAuthentication.sol","id":9238,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9290,"sourceUnit":7536,"src":"247:66:47","symbolAliases":[{"foreign":{"id":9237,"name":"CommonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7535,"src":"256:20:47","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9240,"name":"CommonAuthentication","nameLocations":["735:20:47"],"nodeType":"IdentifierPath","referencedDeclaration":7535,"src":"735:20:47"},"id":9241,"nodeType":"InheritanceSpecifier","src":"735:20:47"}],"canonicalName":"SingletonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":9239,"nodeType":"StructuredDocumentation","src":"315:374:47","text":" @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n function name."},"fullyImplemented":true,"id":9289,"linearizedBaseContracts":[9289,7535,4385,14],"name":"SingletonAuthentication","nameLocation":"708:23:47","nodeType":"ContractDefinition","nodes":[{"body":{"id":9263,"nodeType":"Block","src":"932:64:47","statements":[]},"id":9264,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":9247,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9244,"src":"883:5:47","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":9256,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"922:4:47","typeDescriptions":{"typeIdentifier":"t_contract$_SingletonAuthentication_$9289","typeString":"contract SingletonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SingletonAuthentication_$9289","typeString":"contract SingletonAuthentication"}],"id":9255,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"914:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9254,"name":"address","nodeType":"ElementaryTypeName","src":"914:7:47","typeDescriptions":{}}},"id":9257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"914:13:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9253,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"906:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":9252,"name":"uint160","nodeType":"ElementaryTypeName","src":"906:7:47","typeDescriptions":{}}},"id":9258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"906:22:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":9251,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"898:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":9250,"name":"uint256","nodeType":"ElementaryTypeName","src":"898:7:47","typeDescriptions":{}}},"id":9259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"898:31:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9249,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"890:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":9248,"name":"bytes32","nodeType":"ElementaryTypeName","src":"890:7:47","typeDescriptions":{}}},"id":9260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"890:40:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":9261,"kind":"baseConstructorSpecifier","modifierName":{"id":9246,"name":"CommonAuthentication","nameLocations":["862:20:47"],"nodeType":"IdentifierPath","referencedDeclaration":7535,"src":"862:20:47"},"nodeType":"ModifierInvocation","src":"862:69:47"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9244,"mutability":"mutable","name":"vault","nameLocation":"855:5:47","nodeType":"VariableDeclaration","scope":9264,"src":"848:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":9243,"nodeType":"UserDefinedTypeName","pathNode":{"id":9242,"name":"IVault","nameLocations":["848:6:47"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"848:6:47"},"referencedDeclaration":2545,"src":"848:6:47","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"847:14:47"},"returnParameters":{"id":9262,"nodeType":"ParameterList","parameters":[],"src":"932:0:47"},"scope":9289,"src":"836:160:47","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9274,"nodeType":"Block","src":"1333:35:47","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9271,"name":"_getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7417,"src":"1350:9:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$2545_$","typeString":"function () view returns (contract IVault)"}},"id":9272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1350:11:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"functionReturnParameters":9270,"id":9273,"nodeType":"Return","src":"1343:18:47"}]},"documentation":{"id":9265,"nodeType":"StructuredDocumentation","src":"1002:269:47","text":" @notice Get the address of the Balancer Vault.\n @dev This function is virtual to allow for overriding in derived contracts which also inherits contracts with\n `getVault()` definition.\n @return vault An interface pointer to the Vault"},"functionSelector":"8d928af8","id":9275,"implemented":true,"kind":"function","modifiers":[],"name":"getVault","nameLocation":"1285:8:47","nodeType":"FunctionDefinition","parameters":{"id":9266,"nodeType":"ParameterList","parameters":[],"src":"1293:2:47"},"returnParameters":{"id":9270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9269,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9275,"src":"1325:6:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":9268,"nodeType":"UserDefinedTypeName","pathNode":{"id":9267,"name":"IVault","nameLocations":["1325:6:47"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1325:6:47"},"referencedDeclaration":2545,"src":"1325:6:47","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1324:8:47"},"scope":9289,"src":"1276:92:47","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":9287,"nodeType":"Block","src":"1564:50:47","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9282,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9275,"src":"1581:8:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$2545_$","typeString":"function () view returns (contract IVault)"}},"id":9283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1581:10:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":9284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1592:13:47","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":3859,"src":"1581:24:47","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1341_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":9285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1581:26:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"functionReturnParameters":9281,"id":9286,"nodeType":"Return","src":"1574:33:47"}]},"documentation":{"id":9276,"nodeType":"StructuredDocumentation","src":"1374:126:47","text":" @notice Get the address of the Authorizer.\n @return authorizer An interface pointer to the Authorizer"},"functionSelector":"aaabadc5","id":9288,"implemented":true,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"1514:13:47","nodeType":"FunctionDefinition","parameters":{"id":9277,"nodeType":"ParameterList","parameters":[],"src":"1527:2:47"},"returnParameters":{"id":9281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9280,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9288,"src":"1551:11:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"},"typeName":{"id":9279,"nodeType":"UserDefinedTypeName","pathNode":{"id":9278,"name":"IAuthorizer","nameLocations":["1551:11:47"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"1551:11:47"},"referencedDeclaration":1341,"src":"1551:11:47","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"1550:13:47"},"scope":9289,"src":"1505:109:47","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":9290,"src":"690:926:47","usedErrors":[5,7355],"usedEvents":[]}],"src":"46:1571:47"},"id":47},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","exportedSymbols":{"IVault":[2545],"IVaultErrors":[3202],"VaultGuard":[9338]},"id":9339,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":9291,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:48"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":9293,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9339,"sourceUnit":3203,"src":"72:93:48","symbolAliases":[{"foreign":{"id":9292,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"81:12:48","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":9295,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9339,"sourceUnit":2546,"src":"166:81:48","symbolAliases":[{"foreign":{"id":9294,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"175:6:48","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"VaultGuard","contractDependencies":[],"contractKind":"contract","documentation":{"id":9296,"nodeType":"StructuredDocumentation","src":"249:59:48","text":"@notice Contract that shares the modifier `onlyVault`."},"fullyImplemented":true,"id":9338,"linearizedBaseContracts":[9338],"name":"VaultGuard","nameLocation":"317:10:48","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":9299,"mutability":"immutable","name":"_vault","nameLocation":"360:6:48","nodeType":"VariableDeclaration","scope":9338,"src":"334:32:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":9298,"nodeType":"UserDefinedTypeName","pathNode":{"id":9297,"name":"IVault","nameLocations":["334:6:48"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"334:6:48"},"referencedDeclaration":2545,"src":"334:6:48","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"body":{"id":9309,"nodeType":"Block","src":"399:31:48","statements":[{"expression":{"id":9307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9305,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"409:6:48","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9306,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9302,"src":"418:5:48","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"src":"409:14:48","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":9308,"nodeType":"ExpressionStatement","src":"409:14:48"}]},"id":9310,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9302,"mutability":"mutable","name":"vault","nameLocation":"392:5:48","nodeType":"VariableDeclaration","scope":9310,"src":"385:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":9301,"nodeType":"UserDefinedTypeName","pathNode":{"id":9300,"name":"IVault","nameLocations":["385:6:48"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"385:6:48"},"referencedDeclaration":2545,"src":"385:6:48","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"384:14:48"},"returnParameters":{"id":9304,"nodeType":"ParameterList","parameters":[],"src":"399:0:48"},"scope":9338,"src":"373:57:48","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":9316,"nodeType":"Block","src":"457:46:48","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9312,"name":"_ensureOnlyVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9337,"src":"467:16:48","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":9313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"467:18:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9314,"nodeType":"ExpressionStatement","src":"467:18:48"},{"id":9315,"nodeType":"PlaceholderStatement","src":"495:1:48"}]},"id":9317,"name":"onlyVault","nameLocation":"445:9:48","nodeType":"ModifierDefinition","parameters":{"id":9311,"nodeType":"ParameterList","parameters":[],"src":"454:2:48"},"src":"436:67:48","virtual":false,"visibility":"internal"},{"body":{"id":9336,"nodeType":"Block","src":"550:124:48","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":9320,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"564:3:48","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":9321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"568:6:48","memberName":"sender","nodeType":"MemberAccess","src":"564:10:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":9324,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"586:6:48","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}],"id":9323,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"578:7:48","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9322,"name":"address","nodeType":"ElementaryTypeName","src":"578:7:48","typeDescriptions":{}}},"id":9325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"578:15:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"564:29:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9335,"nodeType":"IfStatement","src":"560:108:48","trueBody":{"id":9334,"nodeType":"Block","src":"595:73:48","statements":[{"errorCall":{"arguments":[{"expression":{"id":9330,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"646:3:48","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":9331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"650:6:48","memberName":"sender","nodeType":"MemberAccess","src":"646:10:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9327,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"616:12:48","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3202_$","typeString":"type(contract IVaultErrors)"}},"id":9329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"629:16:48","memberName":"SenderIsNotVault","nodeType":"MemberAccess","referencedDeclaration":3074,"src":"616:29:48","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"616:41:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9333,"nodeType":"RevertStatement","src":"609:48:48"}]}}]},"id":9337,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureOnlyVault","nameLocation":"518:16:48","nodeType":"FunctionDefinition","parameters":{"id":9318,"nodeType":"ParameterList","parameters":[],"src":"534:2:48"},"returnParameters":{"id":9319,"nodeType":"ParameterList","parameters":[],"src":"550:0:48"},"scope":9338,"src":"509:165:48","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":9339,"src":"308:368:48","usedErrors":[],"usedEvents":[]}],"src":"46:631:48"},"id":48},"@openzeppelin/contracts/access/Ownable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","exportedSymbols":{"Context":[12366],"Ownable":[9486]},"id":9487,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9340,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"102:24:49"},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../utils/Context.sol","id":9342,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9487,"sourceUnit":12367,"src":"128:45:49","symbolAliases":[{"foreign":{"id":9341,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12366,"src":"136:7:49","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9344,"name":"Context","nameLocations":["692:7:49"],"nodeType":"IdentifierPath","referencedDeclaration":12366,"src":"692:7:49"},"id":9345,"nodeType":"InheritanceSpecifier","src":"692:7:49"}],"canonicalName":"Ownable","contractDependencies":[],"contractKind":"contract","documentation":{"id":9343,"nodeType":"StructuredDocumentation","src":"175:487:49","text":" @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n The initial owner is set to the address provided by the deployer. This can\n later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."},"fullyImplemented":true,"id":9486,"linearizedBaseContracts":[9486,12366],"name":"Ownable","nameLocation":"681:7:49","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":9347,"mutability":"mutable","name":"_owner","nameLocation":"722:6:49","nodeType":"VariableDeclaration","scope":9486,"src":"706:22:49","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9346,"name":"address","nodeType":"ElementaryTypeName","src":"706:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"documentation":{"id":9348,"nodeType":"StructuredDocumentation","src":"735:85:49","text":" @dev The caller account is not authorized to perform an operation."},"errorSelector":"118cdaa7","id":9352,"name":"OwnableUnauthorizedAccount","nameLocation":"831:26:49","nodeType":"ErrorDefinition","parameters":{"id":9351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9350,"mutability":"mutable","name":"account","nameLocation":"866:7:49","nodeType":"VariableDeclaration","scope":9352,"src":"858:15:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9349,"name":"address","nodeType":"ElementaryTypeName","src":"858:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"857:17:49"},"src":"825:50:49"},{"documentation":{"id":9353,"nodeType":"StructuredDocumentation","src":"881:82:49","text":" @dev The owner is not a valid owner account. (eg. `address(0)`)"},"errorSelector":"1e4fbdf7","id":9357,"name":"OwnableInvalidOwner","nameLocation":"974:19:49","nodeType":"ErrorDefinition","parameters":{"id":9356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9355,"mutability":"mutable","name":"owner","nameLocation":"1002:5:49","nodeType":"VariableDeclaration","scope":9357,"src":"994:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9354,"name":"address","nodeType":"ElementaryTypeName","src":"994:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"993:15:49"},"src":"968:41:49"},{"anonymous":false,"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":9363,"name":"OwnershipTransferred","nameLocation":"1021:20:49","nodeType":"EventDefinition","parameters":{"id":9362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9359,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"1058:13:49","nodeType":"VariableDeclaration","scope":9363,"src":"1042:29:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9358,"name":"address","nodeType":"ElementaryTypeName","src":"1042:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9361,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"1089:8:49","nodeType":"VariableDeclaration","scope":9363,"src":"1073:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9360,"name":"address","nodeType":"ElementaryTypeName","src":"1073:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1041:57:49"},"src":"1015:84:49"},{"body":{"id":9388,"nodeType":"Block","src":"1259:153:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9369,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9366,"src":"1273:12:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1297:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9371,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1289:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9370,"name":"address","nodeType":"ElementaryTypeName","src":"1289:7:49","typeDescriptions":{}}},"id":9373,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1289:10:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1273:26:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9383,"nodeType":"IfStatement","src":"1269:95:49","trueBody":{"id":9382,"nodeType":"Block","src":"1301:63:49","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":9378,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1350:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9377,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1342:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9376,"name":"address","nodeType":"ElementaryTypeName","src":"1342:7:49","typeDescriptions":{}}},"id":9379,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1342:10:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9375,"name":"OwnableInvalidOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9357,"src":"1322:19:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1322:31:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9381,"nodeType":"RevertStatement","src":"1315:38:49"}]}},{"expression":{"arguments":[{"id":9385,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9366,"src":"1392:12:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9384,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9485,"src":"1373:18:49","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1373:32:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9387,"nodeType":"ExpressionStatement","src":"1373:32:49"}]},"documentation":{"id":9364,"nodeType":"StructuredDocumentation","src":"1105:115:49","text":" @dev Initializes the contract setting the address provided by the deployer as the initial owner."},"id":9389,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9366,"mutability":"mutable","name":"initialOwner","nameLocation":"1245:12:49","nodeType":"VariableDeclaration","scope":9389,"src":"1237:20:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9365,"name":"address","nodeType":"ElementaryTypeName","src":"1237:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1236:22:49"},"returnParameters":{"id":9368,"nodeType":"ParameterList","parameters":[],"src":"1259:0:49"},"scope":9486,"src":"1225:187:49","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9396,"nodeType":"Block","src":"1521:41:49","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9392,"name":"_checkOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9423,"src":"1531:11:49","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":9393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1531:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9394,"nodeType":"ExpressionStatement","src":"1531:13:49"},{"id":9395,"nodeType":"PlaceholderStatement","src":"1554:1:49"}]},"documentation":{"id":9390,"nodeType":"StructuredDocumentation","src":"1418:77:49","text":" @dev Throws if called by any account other than the owner."},"id":9397,"name":"onlyOwner","nameLocation":"1509:9:49","nodeType":"ModifierDefinition","parameters":{"id":9391,"nodeType":"ParameterList","parameters":[],"src":"1518:2:49"},"src":"1500:62:49","virtual":false,"visibility":"internal"},{"body":{"id":9405,"nodeType":"Block","src":"1693:30:49","statements":[{"expression":{"id":9403,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9347,"src":"1710:6:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9402,"id":9404,"nodeType":"Return","src":"1703:13:49"}]},"documentation":{"id":9398,"nodeType":"StructuredDocumentation","src":"1568:65:49","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":9406,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"1647:5:49","nodeType":"FunctionDefinition","parameters":{"id":9399,"nodeType":"ParameterList","parameters":[],"src":"1652:2:49"},"returnParameters":{"id":9402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9401,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9406,"src":"1684:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9400,"name":"address","nodeType":"ElementaryTypeName","src":"1684:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1683:9:49"},"scope":9486,"src":"1638:85:49","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":9422,"nodeType":"Block","src":"1841:117:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":9410,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9406,"src":"1855:5:49","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1855:7:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":9412,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12348,"src":"1866:10:49","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1866:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1855:23:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9421,"nodeType":"IfStatement","src":"1851:101:49","trueBody":{"id":9420,"nodeType":"Block","src":"1880:72:49","statements":[{"errorCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":9416,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12348,"src":"1928:10:49","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1928:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9415,"name":"OwnableUnauthorizedAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9352,"src":"1901:26:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1901:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9419,"nodeType":"RevertStatement","src":"1894:47:49"}]}}]},"documentation":{"id":9407,"nodeType":"StructuredDocumentation","src":"1729:62:49","text":" @dev Throws if the sender is not the owner."},"id":9423,"implemented":true,"kind":"function","modifiers":[],"name":"_checkOwner","nameLocation":"1805:11:49","nodeType":"FunctionDefinition","parameters":{"id":9408,"nodeType":"ParameterList","parameters":[],"src":"1816:2:49"},"returnParameters":{"id":9409,"nodeType":"ParameterList","parameters":[],"src":"1841:0:49"},"scope":9486,"src":"1796:162:49","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":9436,"nodeType":"Block","src":"2347:47:49","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":9432,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2384:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9431,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2376:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9430,"name":"address","nodeType":"ElementaryTypeName","src":"2376:7:49","typeDescriptions":{}}},"id":9433,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2376:10:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9429,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9485,"src":"2357:18:49","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2357:30:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9435,"nodeType":"ExpressionStatement","src":"2357:30:49"}]},"documentation":{"id":9424,"nodeType":"StructuredDocumentation","src":"1964:324:49","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby disabling any functionality that is only available to the owner."},"functionSelector":"715018a6","id":9437,"implemented":true,"kind":"function","modifiers":[{"id":9427,"kind":"modifierInvocation","modifierName":{"id":9426,"name":"onlyOwner","nameLocations":["2337:9:49"],"nodeType":"IdentifierPath","referencedDeclaration":9397,"src":"2337:9:49"},"nodeType":"ModifierInvocation","src":"2337:9:49"}],"name":"renounceOwnership","nameLocation":"2302:17:49","nodeType":"FunctionDefinition","parameters":{"id":9425,"nodeType":"ParameterList","parameters":[],"src":"2319:2:49"},"returnParameters":{"id":9428,"nodeType":"ParameterList","parameters":[],"src":"2347:0:49"},"scope":9486,"src":"2293:101:49","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":9464,"nodeType":"Block","src":"2613:145:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9445,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9440,"src":"2627:8:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2647:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9447,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2639:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9446,"name":"address","nodeType":"ElementaryTypeName","src":"2639:7:49","typeDescriptions":{}}},"id":9449,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2639:10:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2627:22:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9459,"nodeType":"IfStatement","src":"2623:91:49","trueBody":{"id":9458,"nodeType":"Block","src":"2651:63:49","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":9454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2700:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9453,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2692:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9452,"name":"address","nodeType":"ElementaryTypeName","src":"2692:7:49","typeDescriptions":{}}},"id":9455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2692:10:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9451,"name":"OwnableInvalidOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9357,"src":"2672:19:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2672:31:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9457,"nodeType":"RevertStatement","src":"2665:38:49"}]}},{"expression":{"arguments":[{"id":9461,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9440,"src":"2742:8:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9460,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9485,"src":"2723:18:49","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2723:28:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9463,"nodeType":"ExpressionStatement","src":"2723:28:49"}]},"documentation":{"id":9438,"nodeType":"StructuredDocumentation","src":"2400:138:49","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":9465,"implemented":true,"kind":"function","modifiers":[{"id":9443,"kind":"modifierInvocation","modifierName":{"id":9442,"name":"onlyOwner","nameLocations":["2603:9:49"],"nodeType":"IdentifierPath","referencedDeclaration":9397,"src":"2603:9:49"},"nodeType":"ModifierInvocation","src":"2603:9:49"}],"name":"transferOwnership","nameLocation":"2552:17:49","nodeType":"FunctionDefinition","parameters":{"id":9441,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9440,"mutability":"mutable","name":"newOwner","nameLocation":"2578:8:49","nodeType":"VariableDeclaration","scope":9465,"src":"2570:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9439,"name":"address","nodeType":"ElementaryTypeName","src":"2570:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2569:18:49"},"returnParameters":{"id":9444,"nodeType":"ParameterList","parameters":[],"src":"2613:0:49"},"scope":9486,"src":"2543:215:49","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":9484,"nodeType":"Block","src":"2975:124:49","statements":[{"assignments":[9472],"declarations":[{"constant":false,"id":9472,"mutability":"mutable","name":"oldOwner","nameLocation":"2993:8:49","nodeType":"VariableDeclaration","scope":9484,"src":"2985:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9471,"name":"address","nodeType":"ElementaryTypeName","src":"2985:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9474,"initialValue":{"id":9473,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9347,"src":"3004:6:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2985:25:49"},{"expression":{"id":9477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9475,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9347,"src":"3020:6:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9476,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9468,"src":"3029:8:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3020:17:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9478,"nodeType":"ExpressionStatement","src":"3020:17:49"},{"eventCall":{"arguments":[{"id":9480,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9472,"src":"3073:8:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9481,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9468,"src":"3083:8:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9479,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9363,"src":"3052:20:49","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3052:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9483,"nodeType":"EmitStatement","src":"3047:45:49"}]},"documentation":{"id":9466,"nodeType":"StructuredDocumentation","src":"2764:143:49","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction."},"id":9485,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"2921:18:49","nodeType":"FunctionDefinition","parameters":{"id":9469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9468,"mutability":"mutable","name":"newOwner","nameLocation":"2948:8:49","nodeType":"VariableDeclaration","scope":9485,"src":"2940:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9467,"name":"address","nodeType":"ElementaryTypeName","src":"2940:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2939:18:49"},"returnParameters":{"id":9470,"nodeType":"ParameterList","parameters":[],"src":"2975:0:49"},"scope":9486,"src":"2912:187:49","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":9487,"src":"663:2438:49","usedErrors":[9352,9357],"usedEvents":[9363]}],"src":"102:3000:49"},"id":49},"@openzeppelin/contracts/access/Ownable2Step.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/Ownable2Step.sol","exportedSymbols":{"Ownable":[9486],"Ownable2Step":[9572]},"id":9573,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9488,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:50"},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"./Ownable.sol","id":9490,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9573,"sourceUnit":9487,"src":"133:38:50","symbolAliases":[{"foreign":{"id":9489,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9486,"src":"141:7:50","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9492,"name":"Ownable","nameLocations":["1018:7:50"],"nodeType":"IdentifierPath","referencedDeclaration":9486,"src":"1018:7:50"},"id":9493,"nodeType":"InheritanceSpecifier","src":"1018:7:50"}],"canonicalName":"Ownable2Step","contractDependencies":[],"contractKind":"contract","documentation":{"id":9491,"nodeType":"StructuredDocumentation","src":"173:810:50","text":" @dev Contract module which provides access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n This extension of the {Ownable} contract includes a two-step mechanism to transfer\n ownership, where the new owner must call {acceptOwnership} in order to replace the\n old one. This can help prevent common mistakes, such as transfers of ownership to\n incorrect accounts, or to contracts that are unable to interact with the\n permission system.\n The initial owner is specified at deployment time in the constructor for `Ownable`. This\n can later be changed with {transferOwnership} and {acceptOwnership}.\n This module is used through inheritance. It will make available all functions\n from parent (Ownable)."},"fullyImplemented":true,"id":9572,"linearizedBaseContracts":[9572,9486,12366],"name":"Ownable2Step","nameLocation":"1002:12:50","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":9495,"mutability":"mutable","name":"_pendingOwner","nameLocation":"1048:13:50","nodeType":"VariableDeclaration","scope":9572,"src":"1032:29:50","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9494,"name":"address","nodeType":"ElementaryTypeName","src":"1032:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"eventSelector":"38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700","id":9501,"name":"OwnershipTransferStarted","nameLocation":"1074:24:50","nodeType":"EventDefinition","parameters":{"id":9500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9497,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"1115:13:50","nodeType":"VariableDeclaration","scope":9501,"src":"1099:29:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9496,"name":"address","nodeType":"ElementaryTypeName","src":"1099:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9499,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"1146:8:50","nodeType":"VariableDeclaration","scope":9501,"src":"1130:24:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9498,"name":"address","nodeType":"ElementaryTypeName","src":"1130:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1098:57:50"},"src":"1068:88:50"},{"body":{"id":9509,"nodeType":"Block","src":"1294:37:50","statements":[{"expression":{"id":9507,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9495,"src":"1311:13:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9506,"id":9508,"nodeType":"Return","src":"1304:20:50"}]},"documentation":{"id":9502,"nodeType":"StructuredDocumentation","src":"1162:65:50","text":" @dev Returns the address of the pending owner."},"functionSelector":"e30c3978","id":9510,"implemented":true,"kind":"function","modifiers":[],"name":"pendingOwner","nameLocation":"1241:12:50","nodeType":"FunctionDefinition","parameters":{"id":9503,"nodeType":"ParameterList","parameters":[],"src":"1253:2:50"},"returnParameters":{"id":9506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9505,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9510,"src":"1285:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9504,"name":"address","nodeType":"ElementaryTypeName","src":"1285:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1284:9:50"},"scope":9572,"src":"1232:99:50","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[9465],"body":{"id":9529,"nodeType":"Block","src":"1728:99:50","statements":[{"expression":{"id":9521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9519,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9495,"src":"1738:13:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9520,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9513,"src":"1754:8:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1738:24:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9522,"nodeType":"ExpressionStatement","src":"1738:24:50"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":9524,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9406,"src":"1802:5:50","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1802:7:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9526,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9513,"src":"1811:8:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9523,"name":"OwnershipTransferStarted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"1777:24:50","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1777:43:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9528,"nodeType":"EmitStatement","src":"1772:48:50"}]},"documentation":{"id":9511,"nodeType":"StructuredDocumentation","src":"1337:307:50","text":" @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\n Can only be called by the current owner.\n Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer."},"functionSelector":"f2fde38b","id":9530,"implemented":true,"kind":"function","modifiers":[{"id":9517,"kind":"modifierInvocation","modifierName":{"id":9516,"name":"onlyOwner","nameLocations":["1718:9:50"],"nodeType":"IdentifierPath","referencedDeclaration":9397,"src":"1718:9:50"},"nodeType":"ModifierInvocation","src":"1718:9:50"}],"name":"transferOwnership","nameLocation":"1658:17:50","nodeType":"FunctionDefinition","overrides":{"id":9515,"nodeType":"OverrideSpecifier","overrides":[],"src":"1709:8:50"},"parameters":{"id":9514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9513,"mutability":"mutable","name":"newOwner","nameLocation":"1684:8:50","nodeType":"VariableDeclaration","scope":9530,"src":"1676:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9512,"name":"address","nodeType":"ElementaryTypeName","src":"1676:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1675:18:50"},"returnParameters":{"id":9518,"nodeType":"ParameterList","parameters":[],"src":"1728:0:50"},"scope":9572,"src":"1649:178:50","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[9485],"body":{"id":9546,"nodeType":"Block","src":"2083:81:50","statements":[{"expression":{"id":9538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"2093:20:50","subExpression":{"id":9537,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9495,"src":"2100:13:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9539,"nodeType":"ExpressionStatement","src":"2093:20:50"},{"expression":{"arguments":[{"id":9543,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9533,"src":"2148:8:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9540,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2123:5:50","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_Ownable2Step_$9572_$","typeString":"type(contract super Ownable2Step)"}},"id":9542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2129:18:50","memberName":"_transferOwnership","nodeType":"MemberAccess","referencedDeclaration":9485,"src":"2123:24:50","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2123:34:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9545,"nodeType":"ExpressionStatement","src":"2123:34:50"}]},"documentation":{"id":9531,"nodeType":"StructuredDocumentation","src":"1833:173:50","text":" @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\n Internal function without access restriction."},"id":9547,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"2020:18:50","nodeType":"FunctionDefinition","overrides":{"id":9535,"nodeType":"OverrideSpecifier","overrides":[],"src":"2074:8:50"},"parameters":{"id":9534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9533,"mutability":"mutable","name":"newOwner","nameLocation":"2047:8:50","nodeType":"VariableDeclaration","scope":9547,"src":"2039:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9532,"name":"address","nodeType":"ElementaryTypeName","src":"2039:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2038:18:50"},"returnParameters":{"id":9536,"nodeType":"ParameterList","parameters":[],"src":"2083:0:50"},"scope":9572,"src":"2011:153:50","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":9570,"nodeType":"Block","src":"2286:187:50","statements":[{"assignments":[9552],"declarations":[{"constant":false,"id":9552,"mutability":"mutable","name":"sender","nameLocation":"2304:6:50","nodeType":"VariableDeclaration","scope":9570,"src":"2296:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9551,"name":"address","nodeType":"ElementaryTypeName","src":"2296:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9555,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":9553,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12348,"src":"2313:10:50","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2313:12:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2296:29:50"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":9556,"name":"pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9510,"src":"2339:12:50","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2339:14:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9558,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9552,"src":"2357:6:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2339:24:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9565,"nodeType":"IfStatement","src":"2335:96:50","trueBody":{"id":9564,"nodeType":"Block","src":"2365:66:50","statements":[{"errorCall":{"arguments":[{"id":9561,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9552,"src":"2413:6:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9560,"name":"OwnableUnauthorizedAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9352,"src":"2386:26:50","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9562,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2386:34:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9563,"nodeType":"RevertStatement","src":"2379:41:50"}]}},{"expression":{"arguments":[{"id":9567,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9552,"src":"2459:6:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9566,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[9547],"referencedDeclaration":9547,"src":"2440:18:50","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2440:26:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9569,"nodeType":"ExpressionStatement","src":"2440:26:50"}]},"documentation":{"id":9548,"nodeType":"StructuredDocumentation","src":"2170:69:50","text":" @dev The new owner accepts the ownership transfer."},"functionSelector":"79ba5097","id":9571,"implemented":true,"kind":"function","modifiers":[],"name":"acceptOwnership","nameLocation":"2253:15:50","nodeType":"FunctionDefinition","parameters":{"id":9549,"nodeType":"ParameterList","parameters":[],"src":"2268:2:50"},"returnParameters":{"id":9550,"nodeType":"ParameterList","parameters":[],"src":"2286:0:50"},"scope":9572,"src":"2244:229:50","stateMutability":"nonpayable","virtual":true,"visibility":"public"}],"scope":9573,"src":"984:1491:50","usedErrors":[9352,9357],"usedEvents":[9363,9501]}],"src":"107:2369:50"},"id":50},"@openzeppelin/contracts/interfaces/IERC1271.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1271.sol","exportedSymbols":{"IERC1271":[9586]},"id":9587,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9574,"literals":["solidity",">=","0.5",".0"],"nodeType":"PragmaDirective","src":"107:24:51"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1271","contractDependencies":[],"contractKind":"interface","documentation":{"id":9575,"nodeType":"StructuredDocumentation","src":"133:160:51","text":" @dev Interface of the ERC-1271 standard signature validation method for\n contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271]."},"fullyImplemented":false,"id":9586,"linearizedBaseContracts":[9586],"name":"IERC1271","nameLocation":"304:8:51","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9576,"nodeType":"StructuredDocumentation","src":"319:221:51","text":" @dev Should return whether the signature provided is valid for the provided data\n @param hash Hash of the data to be signed\n @param signature Signature byte array associated with `hash`"},"functionSelector":"1626ba7e","id":9585,"implemented":false,"kind":"function","modifiers":[],"name":"isValidSignature","nameLocation":"554:16:51","nodeType":"FunctionDefinition","parameters":{"id":9581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9578,"mutability":"mutable","name":"hash","nameLocation":"579:4:51","nodeType":"VariableDeclaration","scope":9585,"src":"571:12:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9577,"name":"bytes32","nodeType":"ElementaryTypeName","src":"571:7:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9580,"mutability":"mutable","name":"signature","nameLocation":"600:9:51","nodeType":"VariableDeclaration","scope":9585,"src":"585:24:51","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":9579,"name":"bytes","nodeType":"ElementaryTypeName","src":"585:5:51","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"570:40:51"},"returnParameters":{"id":9584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9583,"mutability":"mutable","name":"magicValue","nameLocation":"641:10:51","nodeType":"VariableDeclaration","scope":9585,"src":"634:17:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":9582,"name":"bytes4","nodeType":"ElementaryTypeName","src":"634:6:51","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"633:19:51"},"scope":9586,"src":"545:108:51","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":9587,"src":"294:361:51","usedErrors":[],"usedEvents":[]}],"src":"107:549:51"},"id":51},"@openzeppelin/contracts/interfaces/IERC1363.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1363.sol","exportedSymbols":{"IERC1363":[9668],"IERC165":[12706],"IERC20":[10576]},"id":9669,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9588,"literals":["solidity",">=","0.6",".2"],"nodeType":"PragmaDirective","src":"107:24:52"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC20.sol","file":"./IERC20.sol","id":9590,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9669,"sourceUnit":9677,"src":"133:36:52","symbolAliases":[{"foreign":{"id":9589,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"141:6:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC165.sol","file":"./IERC165.sol","id":9592,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9669,"sourceUnit":9673,"src":"170:38:52","symbolAliases":[{"foreign":{"id":9591,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12706,"src":"178:7:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9594,"name":"IERC20","nameLocations":["590:6:52"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"590:6:52"},"id":9595,"nodeType":"InheritanceSpecifier","src":"590:6:52"},{"baseName":{"id":9596,"name":"IERC165","nameLocations":["598:7:52"],"nodeType":"IdentifierPath","referencedDeclaration":12706,"src":"598:7:52"},"id":9597,"nodeType":"InheritanceSpecifier","src":"598:7:52"}],"canonicalName":"IERC1363","contractDependencies":[],"contractKind":"interface","documentation":{"id":9593,"nodeType":"StructuredDocumentation","src":"210:357:52","text":" @title IERC1363\n @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction."},"fullyImplemented":false,"id":9668,"linearizedBaseContracts":[9668,12706,10576],"name":"IERC1363","nameLocation":"578:8:52","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9598,"nodeType":"StructuredDocumentation","src":"1148:370:52","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"1296ee62","id":9607,"implemented":false,"kind":"function","modifiers":[],"name":"transferAndCall","nameLocation":"1532:15:52","nodeType":"FunctionDefinition","parameters":{"id":9603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9600,"mutability":"mutable","name":"to","nameLocation":"1556:2:52","nodeType":"VariableDeclaration","scope":9607,"src":"1548:10:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9599,"name":"address","nodeType":"ElementaryTypeName","src":"1548:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9602,"mutability":"mutable","name":"value","nameLocation":"1568:5:52","nodeType":"VariableDeclaration","scope":9607,"src":"1560:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9601,"name":"uint256","nodeType":"ElementaryTypeName","src":"1560:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1547:27:52"},"returnParameters":{"id":9606,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9605,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9607,"src":"1593:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9604,"name":"bool","nodeType":"ElementaryTypeName","src":"1593:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1592:6:52"},"scope":9668,"src":"1523:76:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9608,"nodeType":"StructuredDocumentation","src":"1605:453:52","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @param data Additional data with no specified format, sent in call to `to`.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"4000aea0","id":9619,"implemented":false,"kind":"function","modifiers":[],"name":"transferAndCall","nameLocation":"2072:15:52","nodeType":"FunctionDefinition","parameters":{"id":9615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9610,"mutability":"mutable","name":"to","nameLocation":"2096:2:52","nodeType":"VariableDeclaration","scope":9619,"src":"2088:10:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9609,"name":"address","nodeType":"ElementaryTypeName","src":"2088:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9612,"mutability":"mutable","name":"value","nameLocation":"2108:5:52","nodeType":"VariableDeclaration","scope":9619,"src":"2100:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9611,"name":"uint256","nodeType":"ElementaryTypeName","src":"2100:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9614,"mutability":"mutable","name":"data","nameLocation":"2130:4:52","nodeType":"VariableDeclaration","scope":9619,"src":"2115:19:52","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":9613,"name":"bytes","nodeType":"ElementaryTypeName","src":"2115:5:52","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2087:48:52"},"returnParameters":{"id":9618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9617,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9619,"src":"2154:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9616,"name":"bool","nodeType":"ElementaryTypeName","src":"2154:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2153:6:52"},"scope":9668,"src":"2063:97:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9620,"nodeType":"StructuredDocumentation","src":"2166:453:52","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param from The address which you want to send tokens from.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"d8fbe994","id":9631,"implemented":false,"kind":"function","modifiers":[],"name":"transferFromAndCall","nameLocation":"2633:19:52","nodeType":"FunctionDefinition","parameters":{"id":9627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9622,"mutability":"mutable","name":"from","nameLocation":"2661:4:52","nodeType":"VariableDeclaration","scope":9631,"src":"2653:12:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9621,"name":"address","nodeType":"ElementaryTypeName","src":"2653:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9624,"mutability":"mutable","name":"to","nameLocation":"2675:2:52","nodeType":"VariableDeclaration","scope":9631,"src":"2667:10:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9623,"name":"address","nodeType":"ElementaryTypeName","src":"2667:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9626,"mutability":"mutable","name":"value","nameLocation":"2687:5:52","nodeType":"VariableDeclaration","scope":9631,"src":"2679:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9625,"name":"uint256","nodeType":"ElementaryTypeName","src":"2679:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2652:41:52"},"returnParameters":{"id":9630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9629,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9631,"src":"2712:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9628,"name":"bool","nodeType":"ElementaryTypeName","src":"2712:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2711:6:52"},"scope":9668,"src":"2624:94:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9632,"nodeType":"StructuredDocumentation","src":"2724:536:52","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param from The address which you want to send tokens from.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @param data Additional data with no specified format, sent in call to `to`.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"c1d34b89","id":9645,"implemented":false,"kind":"function","modifiers":[],"name":"transferFromAndCall","nameLocation":"3274:19:52","nodeType":"FunctionDefinition","parameters":{"id":9641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9634,"mutability":"mutable","name":"from","nameLocation":"3302:4:52","nodeType":"VariableDeclaration","scope":9645,"src":"3294:12:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9633,"name":"address","nodeType":"ElementaryTypeName","src":"3294:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9636,"mutability":"mutable","name":"to","nameLocation":"3316:2:52","nodeType":"VariableDeclaration","scope":9645,"src":"3308:10:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9635,"name":"address","nodeType":"ElementaryTypeName","src":"3308:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9638,"mutability":"mutable","name":"value","nameLocation":"3328:5:52","nodeType":"VariableDeclaration","scope":9645,"src":"3320:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9637,"name":"uint256","nodeType":"ElementaryTypeName","src":"3320:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9640,"mutability":"mutable","name":"data","nameLocation":"3350:4:52","nodeType":"VariableDeclaration","scope":9645,"src":"3335:19:52","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":9639,"name":"bytes","nodeType":"ElementaryTypeName","src":"3335:5:52","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3293:62:52"},"returnParameters":{"id":9644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9643,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9645,"src":"3374:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9642,"name":"bool","nodeType":"ElementaryTypeName","src":"3374:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3373:6:52"},"scope":9668,"src":"3265:115:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9646,"nodeType":"StructuredDocumentation","src":"3386:390:52","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n @param spender The address which will spend the funds.\n @param value The amount of tokens to be spent.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"3177029f","id":9655,"implemented":false,"kind":"function","modifiers":[],"name":"approveAndCall","nameLocation":"3790:14:52","nodeType":"FunctionDefinition","parameters":{"id":9651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9648,"mutability":"mutable","name":"spender","nameLocation":"3813:7:52","nodeType":"VariableDeclaration","scope":9655,"src":"3805:15:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9647,"name":"address","nodeType":"ElementaryTypeName","src":"3805:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9650,"mutability":"mutable","name":"value","nameLocation":"3830:5:52","nodeType":"VariableDeclaration","scope":9655,"src":"3822:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9649,"name":"uint256","nodeType":"ElementaryTypeName","src":"3822:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3804:32:52"},"returnParameters":{"id":9654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9653,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9655,"src":"3855:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9652,"name":"bool","nodeType":"ElementaryTypeName","src":"3855:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3854:6:52"},"scope":9668,"src":"3781:80:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9656,"nodeType":"StructuredDocumentation","src":"3867:478:52","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n @param spender The address which will spend the funds.\n @param value The amount of tokens to be spent.\n @param data Additional data with no specified format, sent in call to `spender`.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"cae9ca51","id":9667,"implemented":false,"kind":"function","modifiers":[],"name":"approveAndCall","nameLocation":"4359:14:52","nodeType":"FunctionDefinition","parameters":{"id":9663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9658,"mutability":"mutable","name":"spender","nameLocation":"4382:7:52","nodeType":"VariableDeclaration","scope":9667,"src":"4374:15:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9657,"name":"address","nodeType":"ElementaryTypeName","src":"4374:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9660,"mutability":"mutable","name":"value","nameLocation":"4399:5:52","nodeType":"VariableDeclaration","scope":9667,"src":"4391:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9659,"name":"uint256","nodeType":"ElementaryTypeName","src":"4391:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9662,"mutability":"mutable","name":"data","nameLocation":"4421:4:52","nodeType":"VariableDeclaration","scope":9667,"src":"4406:19:52","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":9661,"name":"bytes","nodeType":"ElementaryTypeName","src":"4406:5:52","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4373:53:52"},"returnParameters":{"id":9666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9665,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9667,"src":"4445:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9664,"name":"bool","nodeType":"ElementaryTypeName","src":"4445:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4444:6:52"},"scope":9668,"src":"4350:101:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":9669,"src":"568:3885:52","usedErrors":[],"usedEvents":[10510,10519]}],"src":"107:4347:52"},"id":52},"@openzeppelin/contracts/interfaces/IERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC165.sol","exportedSymbols":{"IERC165":[12706]},"id":9673,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9670,"literals":["solidity",">=","0.4",".16"],"nodeType":"PragmaDirective","src":"106:25:53"},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"../utils/introspection/IERC165.sol","id":9672,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9673,"sourceUnit":12707,"src":"133:59:53","symbolAliases":[{"foreign":{"id":9671,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12706,"src":"141:7:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""}],"src":"106:87:53"},"id":53},"@openzeppelin/contracts/interfaces/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC20.sol","exportedSymbols":{"IERC20":[10576]},"id":9677,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9674,"literals":["solidity",">=","0.4",".16"],"nodeType":"PragmaDirective","src":"105:25:54"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../token/ERC20/IERC20.sol","id":9676,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9677,"sourceUnit":10577,"src":"132:49:54","symbolAliases":[{"foreign":{"id":9675,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"140:6:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""}],"src":"105:77:54"},"id":54},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","exportedSymbols":{"IERC20":[10576],"IERC20Metadata":[10602],"IERC4626":[9846]},"id":9847,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9678,"literals":["solidity",">=","0.6",".2"],"nodeType":"PragmaDirective","src":"107:24:55"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../token/ERC20/IERC20.sol","id":9680,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9847,"sourceUnit":10577,"src":"133:49:55","symbolAliases":[{"foreign":{"id":9679,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"141:6:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"../token/ERC20/extensions/IERC20Metadata.sol","id":9682,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9847,"sourceUnit":10603,"src":"183:76:55","symbolAliases":[{"foreign":{"id":9681,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10602,"src":"191:14:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9684,"name":"IERC20","nameLocations":["421:6:55"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"421:6:55"},"id":9685,"nodeType":"InheritanceSpecifier","src":"421:6:55"},{"baseName":{"id":9686,"name":"IERC20Metadata","nameLocations":["429:14:55"],"nodeType":"IdentifierPath","referencedDeclaration":10602,"src":"429:14:55"},"id":9687,"nodeType":"InheritanceSpecifier","src":"429:14:55"}],"canonicalName":"IERC4626","contractDependencies":[],"contractKind":"interface","documentation":{"id":9683,"nodeType":"StructuredDocumentation","src":"261:137:55","text":" @dev Interface of the ERC-4626 \"Tokenized Vault Standard\", as defined in\n https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]."},"fullyImplemented":false,"id":9846,"linearizedBaseContracts":[9846,10602,10576],"name":"IERC4626","nameLocation":"409:8:55","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"dcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7","id":9697,"name":"Deposit","nameLocation":"456:7:55","nodeType":"EventDefinition","parameters":{"id":9696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9689,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"480:6:55","nodeType":"VariableDeclaration","scope":9697,"src":"464:22:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9688,"name":"address","nodeType":"ElementaryTypeName","src":"464:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9691,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"504:5:55","nodeType":"VariableDeclaration","scope":9697,"src":"488:21:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9690,"name":"address","nodeType":"ElementaryTypeName","src":"488:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9693,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"519:6:55","nodeType":"VariableDeclaration","scope":9697,"src":"511:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9692,"name":"uint256","nodeType":"ElementaryTypeName","src":"511:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9695,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"535:6:55","nodeType":"VariableDeclaration","scope":9697,"src":"527:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9694,"name":"uint256","nodeType":"ElementaryTypeName","src":"527:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"463:79:55"},"src":"450:93:55"},{"anonymous":false,"eventSelector":"fbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db","id":9709,"name":"Withdraw","nameLocation":"555:8:55","nodeType":"EventDefinition","parameters":{"id":9708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9699,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"589:6:55","nodeType":"VariableDeclaration","scope":9709,"src":"573:22:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9698,"name":"address","nodeType":"ElementaryTypeName","src":"573:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9701,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"621:8:55","nodeType":"VariableDeclaration","scope":9709,"src":"605:24:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9700,"name":"address","nodeType":"ElementaryTypeName","src":"605:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9703,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"655:5:55","nodeType":"VariableDeclaration","scope":9709,"src":"639:21:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9702,"name":"address","nodeType":"ElementaryTypeName","src":"639:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9705,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"678:6:55","nodeType":"VariableDeclaration","scope":9709,"src":"670:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9704,"name":"uint256","nodeType":"ElementaryTypeName","src":"670:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9707,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"702:6:55","nodeType":"VariableDeclaration","scope":9709,"src":"694:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9706,"name":"uint256","nodeType":"ElementaryTypeName","src":"694:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"563:151:55"},"src":"549:166:55"},{"documentation":{"id":9710,"nodeType":"StructuredDocumentation","src":"721:207:55","text":" @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n - MUST be an ERC-20 token contract.\n - MUST NOT revert."},"functionSelector":"38d52e0f","id":9715,"implemented":false,"kind":"function","modifiers":[],"name":"asset","nameLocation":"942:5:55","nodeType":"FunctionDefinition","parameters":{"id":9711,"nodeType":"ParameterList","parameters":[],"src":"947:2:55"},"returnParameters":{"id":9714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9713,"mutability":"mutable","name":"assetTokenAddress","nameLocation":"981:17:55","nodeType":"VariableDeclaration","scope":9715,"src":"973:25:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9712,"name":"address","nodeType":"ElementaryTypeName","src":"973:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"972:27:55"},"scope":9846,"src":"933:67:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9716,"nodeType":"StructuredDocumentation","src":"1006:286:55","text":" @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n - SHOULD include any compounding that occurs from yield.\n - MUST be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT revert."},"functionSelector":"01e1d114","id":9721,"implemented":false,"kind":"function","modifiers":[],"name":"totalAssets","nameLocation":"1306:11:55","nodeType":"FunctionDefinition","parameters":{"id":9717,"nodeType":"ParameterList","parameters":[],"src":"1317:2:55"},"returnParameters":{"id":9720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9719,"mutability":"mutable","name":"totalManagedAssets","nameLocation":"1351:18:55","nodeType":"VariableDeclaration","scope":9721,"src":"1343:26:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9718,"name":"uint256","nodeType":"ElementaryTypeName","src":"1343:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1342:28:55"},"scope":9846,"src":"1297:74:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9722,"nodeType":"StructuredDocumentation","src":"1377:720:55","text":" @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"c6e6f592","id":9729,"implemented":false,"kind":"function","modifiers":[],"name":"convertToShares","nameLocation":"2111:15:55","nodeType":"FunctionDefinition","parameters":{"id":9725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9724,"mutability":"mutable","name":"assets","nameLocation":"2135:6:55","nodeType":"VariableDeclaration","scope":9729,"src":"2127:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9723,"name":"uint256","nodeType":"ElementaryTypeName","src":"2127:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2126:16:55"},"returnParameters":{"id":9728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9727,"mutability":"mutable","name":"shares","nameLocation":"2174:6:55","nodeType":"VariableDeclaration","scope":9729,"src":"2166:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9726,"name":"uint256","nodeType":"ElementaryTypeName","src":"2166:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2165:16:55"},"scope":9846,"src":"2102:80:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9730,"nodeType":"StructuredDocumentation","src":"2188:720:55","text":" @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"07a2d13a","id":9737,"implemented":false,"kind":"function","modifiers":[],"name":"convertToAssets","nameLocation":"2922:15:55","nodeType":"FunctionDefinition","parameters":{"id":9733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9732,"mutability":"mutable","name":"shares","nameLocation":"2946:6:55","nodeType":"VariableDeclaration","scope":9737,"src":"2938:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9731,"name":"uint256","nodeType":"ElementaryTypeName","src":"2938:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2937:16:55"},"returnParameters":{"id":9736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9735,"mutability":"mutable","name":"assets","nameLocation":"2985:6:55","nodeType":"VariableDeclaration","scope":9737,"src":"2977:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9734,"name":"uint256","nodeType":"ElementaryTypeName","src":"2977:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2976:16:55"},"scope":9846,"src":"2913:80:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9738,"nodeType":"StructuredDocumentation","src":"2999:386:55","text":" @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n through a deposit call.\n - MUST return a limited value if receiver is subject to some deposit limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n - MUST NOT revert."},"functionSelector":"402d267d","id":9745,"implemented":false,"kind":"function","modifiers":[],"name":"maxDeposit","nameLocation":"3399:10:55","nodeType":"FunctionDefinition","parameters":{"id":9741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9740,"mutability":"mutable","name":"receiver","nameLocation":"3418:8:55","nodeType":"VariableDeclaration","scope":9745,"src":"3410:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9739,"name":"address","nodeType":"ElementaryTypeName","src":"3410:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3409:18:55"},"returnParameters":{"id":9744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9743,"mutability":"mutable","name":"maxAssets","nameLocation":"3459:9:55","nodeType":"VariableDeclaration","scope":9745,"src":"3451:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9742,"name":"uint256","nodeType":"ElementaryTypeName","src":"3451:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3450:19:55"},"scope":9846,"src":"3390:80:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9746,"nodeType":"StructuredDocumentation","src":"3476:1012:55","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n current on-chain conditions.\n - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n in the same transaction.\n - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n deposit would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"ef8b30f7","id":9753,"implemented":false,"kind":"function","modifiers":[],"name":"previewDeposit","nameLocation":"4502:14:55","nodeType":"FunctionDefinition","parameters":{"id":9749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9748,"mutability":"mutable","name":"assets","nameLocation":"4525:6:55","nodeType":"VariableDeclaration","scope":9753,"src":"4517:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9747,"name":"uint256","nodeType":"ElementaryTypeName","src":"4517:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4516:16:55"},"returnParameters":{"id":9752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9751,"mutability":"mutable","name":"shares","nameLocation":"4564:6:55","nodeType":"VariableDeclaration","scope":9753,"src":"4556:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9750,"name":"uint256","nodeType":"ElementaryTypeName","src":"4556:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4555:16:55"},"scope":9846,"src":"4493:79:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9754,"nodeType":"StructuredDocumentation","src":"4578:651:55","text":" @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n deposit execution, and are accounted for during deposit.\n - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"6e553f65","id":9763,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"5243:7:55","nodeType":"FunctionDefinition","parameters":{"id":9759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9756,"mutability":"mutable","name":"assets","nameLocation":"5259:6:55","nodeType":"VariableDeclaration","scope":9763,"src":"5251:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9755,"name":"uint256","nodeType":"ElementaryTypeName","src":"5251:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9758,"mutability":"mutable","name":"receiver","nameLocation":"5275:8:55","nodeType":"VariableDeclaration","scope":9763,"src":"5267:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9757,"name":"address","nodeType":"ElementaryTypeName","src":"5267:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5250:34:55"},"returnParameters":{"id":9762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9761,"mutability":"mutable","name":"shares","nameLocation":"5311:6:55","nodeType":"VariableDeclaration","scope":9763,"src":"5303:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9760,"name":"uint256","nodeType":"ElementaryTypeName","src":"5303:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5302:16:55"},"scope":9846,"src":"5234:85:55","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9764,"nodeType":"StructuredDocumentation","src":"5325:341:55","text":" @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n - MUST return a limited value if receiver is subject to some mint limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n - MUST NOT revert."},"functionSelector":"c63d75b6","id":9771,"implemented":false,"kind":"function","modifiers":[],"name":"maxMint","nameLocation":"5680:7:55","nodeType":"FunctionDefinition","parameters":{"id":9767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9766,"mutability":"mutable","name":"receiver","nameLocation":"5696:8:55","nodeType":"VariableDeclaration","scope":9771,"src":"5688:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9765,"name":"address","nodeType":"ElementaryTypeName","src":"5688:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5687:18:55"},"returnParameters":{"id":9770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9769,"mutability":"mutable","name":"maxShares","nameLocation":"5737:9:55","nodeType":"VariableDeclaration","scope":9771,"src":"5729:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9768,"name":"uint256","nodeType":"ElementaryTypeName","src":"5729:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5728:19:55"},"scope":9846,"src":"5671:77:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9772,"nodeType":"StructuredDocumentation","src":"5754:984:55","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n same transaction.\n - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by minting."},"functionSelector":"b3d7f6b9","id":9779,"implemented":false,"kind":"function","modifiers":[],"name":"previewMint","nameLocation":"6752:11:55","nodeType":"FunctionDefinition","parameters":{"id":9775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9774,"mutability":"mutable","name":"shares","nameLocation":"6772:6:55","nodeType":"VariableDeclaration","scope":9779,"src":"6764:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9773,"name":"uint256","nodeType":"ElementaryTypeName","src":"6764:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6763:16:55"},"returnParameters":{"id":9778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9777,"mutability":"mutable","name":"assets","nameLocation":"6811:6:55","nodeType":"VariableDeclaration","scope":9779,"src":"6803:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9776,"name":"uint256","nodeType":"ElementaryTypeName","src":"6803:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6802:16:55"},"scope":9846,"src":"6743:76:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9780,"nodeType":"StructuredDocumentation","src":"6825:642:55","text":" @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n execution, and are accounted for during mint.\n - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"94bf804d","id":9789,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"7481:4:55","nodeType":"FunctionDefinition","parameters":{"id":9785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9782,"mutability":"mutable","name":"shares","nameLocation":"7494:6:55","nodeType":"VariableDeclaration","scope":9789,"src":"7486:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9781,"name":"uint256","nodeType":"ElementaryTypeName","src":"7486:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9784,"mutability":"mutable","name":"receiver","nameLocation":"7510:8:55","nodeType":"VariableDeclaration","scope":9789,"src":"7502:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9783,"name":"address","nodeType":"ElementaryTypeName","src":"7502:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7485:34:55"},"returnParameters":{"id":9788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9787,"mutability":"mutable","name":"assets","nameLocation":"7546:6:55","nodeType":"VariableDeclaration","scope":9789,"src":"7538:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9786,"name":"uint256","nodeType":"ElementaryTypeName","src":"7538:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7537:16:55"},"scope":9846,"src":"7472:82:55","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9790,"nodeType":"StructuredDocumentation","src":"7560:293:55","text":" @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n Vault, through a withdraw call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"ce96cb77","id":9797,"implemented":false,"kind":"function","modifiers":[],"name":"maxWithdraw","nameLocation":"7867:11:55","nodeType":"FunctionDefinition","parameters":{"id":9793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9792,"mutability":"mutable","name":"owner","nameLocation":"7887:5:55","nodeType":"VariableDeclaration","scope":9797,"src":"7879:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9791,"name":"address","nodeType":"ElementaryTypeName","src":"7879:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7878:15:55"},"returnParameters":{"id":9796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9795,"mutability":"mutable","name":"maxAssets","nameLocation":"7925:9:55","nodeType":"VariableDeclaration","scope":9797,"src":"7917:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9794,"name":"uint256","nodeType":"ElementaryTypeName","src":"7917:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7916:19:55"},"scope":9846,"src":"7858:78:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9798,"nodeType":"StructuredDocumentation","src":"7942:1034:55","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n given current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n called\n in the same transaction.\n - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n the withdrawal would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"0a28a477","id":9805,"implemented":false,"kind":"function","modifiers":[],"name":"previewWithdraw","nameLocation":"8990:15:55","nodeType":"FunctionDefinition","parameters":{"id":9801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9800,"mutability":"mutable","name":"assets","nameLocation":"9014:6:55","nodeType":"VariableDeclaration","scope":9805,"src":"9006:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9799,"name":"uint256","nodeType":"ElementaryTypeName","src":"9006:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9005:16:55"},"returnParameters":{"id":9804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9803,"mutability":"mutable","name":"shares","nameLocation":"9053:6:55","nodeType":"VariableDeclaration","scope":9805,"src":"9045:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9802,"name":"uint256","nodeType":"ElementaryTypeName","src":"9045:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9044:16:55"},"scope":9846,"src":"8981:80:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9806,"nodeType":"StructuredDocumentation","src":"9067:670:55","text":" @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n withdraw execution, and are accounted for during withdraw.\n - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"b460af94","id":9817,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"9751:8:55","nodeType":"FunctionDefinition","parameters":{"id":9813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9808,"mutability":"mutable","name":"assets","nameLocation":"9768:6:55","nodeType":"VariableDeclaration","scope":9817,"src":"9760:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9807,"name":"uint256","nodeType":"ElementaryTypeName","src":"9760:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9810,"mutability":"mutable","name":"receiver","nameLocation":"9784:8:55","nodeType":"VariableDeclaration","scope":9817,"src":"9776:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9809,"name":"address","nodeType":"ElementaryTypeName","src":"9776:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9812,"mutability":"mutable","name":"owner","nameLocation":"9802:5:55","nodeType":"VariableDeclaration","scope":9817,"src":"9794:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9811,"name":"address","nodeType":"ElementaryTypeName","src":"9794:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9759:49:55"},"returnParameters":{"id":9816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9815,"mutability":"mutable","name":"shares","nameLocation":"9835:6:55","nodeType":"VariableDeclaration","scope":9817,"src":"9827:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9814,"name":"uint256","nodeType":"ElementaryTypeName","src":"9827:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9826:16:55"},"scope":9846,"src":"9742:101:55","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9818,"nodeType":"StructuredDocumentation","src":"9849:381:55","text":" @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n through a redeem call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"d905777e","id":9825,"implemented":false,"kind":"function","modifiers":[],"name":"maxRedeem","nameLocation":"10244:9:55","nodeType":"FunctionDefinition","parameters":{"id":9821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9820,"mutability":"mutable","name":"owner","nameLocation":"10262:5:55","nodeType":"VariableDeclaration","scope":9825,"src":"10254:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9819,"name":"address","nodeType":"ElementaryTypeName","src":"10254:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10253:15:55"},"returnParameters":{"id":9824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9823,"mutability":"mutable","name":"maxShares","nameLocation":"10300:9:55","nodeType":"VariableDeclaration","scope":9825,"src":"10292:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9822,"name":"uint256","nodeType":"ElementaryTypeName","src":"10292:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10291:19:55"},"scope":9846,"src":"10235:76:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9826,"nodeType":"StructuredDocumentation","src":"10317:1009:55","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their redemption at the current block,\n given current on-chain conditions.\n - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n same transaction.\n - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n redemption would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by redeeming."},"functionSelector":"4cdad506","id":9833,"implemented":false,"kind":"function","modifiers":[],"name":"previewRedeem","nameLocation":"11340:13:55","nodeType":"FunctionDefinition","parameters":{"id":9829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9828,"mutability":"mutable","name":"shares","nameLocation":"11362:6:55","nodeType":"VariableDeclaration","scope":9833,"src":"11354:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9827,"name":"uint256","nodeType":"ElementaryTypeName","src":"11354:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11353:16:55"},"returnParameters":{"id":9832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9831,"mutability":"mutable","name":"assets","nameLocation":"11401:6:55","nodeType":"VariableDeclaration","scope":9833,"src":"11393:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9830,"name":"uint256","nodeType":"ElementaryTypeName","src":"11393:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11392:16:55"},"scope":9846,"src":"11331:78:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9834,"nodeType":"StructuredDocumentation","src":"11415:661:55","text":" @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n redeem execution, and are accounted for during redeem.\n - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"ba087652","id":9845,"implemented":false,"kind":"function","modifiers":[],"name":"redeem","nameLocation":"12090:6:55","nodeType":"FunctionDefinition","parameters":{"id":9841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9836,"mutability":"mutable","name":"shares","nameLocation":"12105:6:55","nodeType":"VariableDeclaration","scope":9845,"src":"12097:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9835,"name":"uint256","nodeType":"ElementaryTypeName","src":"12097:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9838,"mutability":"mutable","name":"receiver","nameLocation":"12121:8:55","nodeType":"VariableDeclaration","scope":9845,"src":"12113:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9837,"name":"address","nodeType":"ElementaryTypeName","src":"12113:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9840,"mutability":"mutable","name":"owner","nameLocation":"12139:5:55","nodeType":"VariableDeclaration","scope":9845,"src":"12131:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9839,"name":"address","nodeType":"ElementaryTypeName","src":"12131:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12096:49:55"},"returnParameters":{"id":9844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9843,"mutability":"mutable","name":"assets","nameLocation":"12172:6:55","nodeType":"VariableDeclaration","scope":9845,"src":"12164:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9842,"name":"uint256","nodeType":"ElementaryTypeName","src":"12164:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12163:16:55"},"scope":9846,"src":"12081:99:55","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":9847,"src":"399:11783:55","usedErrors":[],"usedEvents":[9697,9709,10510,10519]}],"src":"107:12076:55"},"id":55},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","exportedSymbols":{"IERC1155Errors":[9983],"IERC20Errors":[9888],"IERC721Errors":[9936]},"id":9984,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9848,"literals":["solidity",">=","0.8",".4"],"nodeType":"PragmaDirective","src":"112:24:56"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":9849,"nodeType":"StructuredDocumentation","src":"138:141:56","text":" @dev Standard ERC-20 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens."},"fullyImplemented":true,"id":9888,"linearizedBaseContracts":[9888],"name":"IERC20Errors","nameLocation":"290:12:56","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9850,"nodeType":"StructuredDocumentation","src":"309:309:56","text":" @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer."},"errorSelector":"e450d38c","id":9858,"name":"ERC20InsufficientBalance","nameLocation":"629:24:56","nodeType":"ErrorDefinition","parameters":{"id":9857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9852,"mutability":"mutable","name":"sender","nameLocation":"662:6:56","nodeType":"VariableDeclaration","scope":9858,"src":"654:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9851,"name":"address","nodeType":"ElementaryTypeName","src":"654:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9854,"mutability":"mutable","name":"balance","nameLocation":"678:7:56","nodeType":"VariableDeclaration","scope":9858,"src":"670:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9853,"name":"uint256","nodeType":"ElementaryTypeName","src":"670:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9856,"mutability":"mutable","name":"needed","nameLocation":"695:6:56","nodeType":"VariableDeclaration","scope":9858,"src":"687:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9855,"name":"uint256","nodeType":"ElementaryTypeName","src":"687:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"653:49:56"},"src":"623:80:56"},{"documentation":{"id":9859,"nodeType":"StructuredDocumentation","src":"709:152:56","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"96c6fd1e","id":9863,"name":"ERC20InvalidSender","nameLocation":"872:18:56","nodeType":"ErrorDefinition","parameters":{"id":9862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9861,"mutability":"mutable","name":"sender","nameLocation":"899:6:56","nodeType":"VariableDeclaration","scope":9863,"src":"891:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9860,"name":"address","nodeType":"ElementaryTypeName","src":"891:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"890:16:56"},"src":"866:41:56"},{"documentation":{"id":9864,"nodeType":"StructuredDocumentation","src":"913:159:56","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"ec442f05","id":9868,"name":"ERC20InvalidReceiver","nameLocation":"1083:20:56","nodeType":"ErrorDefinition","parameters":{"id":9867,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9866,"mutability":"mutable","name":"receiver","nameLocation":"1112:8:56","nodeType":"VariableDeclaration","scope":9868,"src":"1104:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9865,"name":"address","nodeType":"ElementaryTypeName","src":"1104:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1103:18:56"},"src":"1077:45:56"},{"documentation":{"id":9869,"nodeType":"StructuredDocumentation","src":"1128:345:56","text":" @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n @param spender Address that may be allowed to operate on tokens without being their owner.\n @param allowance Amount of tokens a `spender` is allowed to operate with.\n @param needed Minimum amount required to perform a transfer."},"errorSelector":"fb8f41b2","id":9877,"name":"ERC20InsufficientAllowance","nameLocation":"1484:26:56","nodeType":"ErrorDefinition","parameters":{"id":9876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9871,"mutability":"mutable","name":"spender","nameLocation":"1519:7:56","nodeType":"VariableDeclaration","scope":9877,"src":"1511:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9870,"name":"address","nodeType":"ElementaryTypeName","src":"1511:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9873,"mutability":"mutable","name":"allowance","nameLocation":"1536:9:56","nodeType":"VariableDeclaration","scope":9877,"src":"1528:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9872,"name":"uint256","nodeType":"ElementaryTypeName","src":"1528:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9875,"mutability":"mutable","name":"needed","nameLocation":"1555:6:56","nodeType":"VariableDeclaration","scope":9877,"src":"1547:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9874,"name":"uint256","nodeType":"ElementaryTypeName","src":"1547:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1510:52:56"},"src":"1478:85:56"},{"documentation":{"id":9878,"nodeType":"StructuredDocumentation","src":"1569:174:56","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"e602df05","id":9882,"name":"ERC20InvalidApprover","nameLocation":"1754:20:56","nodeType":"ErrorDefinition","parameters":{"id":9881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9880,"mutability":"mutable","name":"approver","nameLocation":"1783:8:56","nodeType":"VariableDeclaration","scope":9882,"src":"1775:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9879,"name":"address","nodeType":"ElementaryTypeName","src":"1775:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1774:18:56"},"src":"1748:45:56"},{"documentation":{"id":9883,"nodeType":"StructuredDocumentation","src":"1799:195:56","text":" @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n @param spender Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"94280d62","id":9887,"name":"ERC20InvalidSpender","nameLocation":"2005:19:56","nodeType":"ErrorDefinition","parameters":{"id":9886,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9885,"mutability":"mutable","name":"spender","nameLocation":"2033:7:56","nodeType":"VariableDeclaration","scope":9887,"src":"2025:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9884,"name":"address","nodeType":"ElementaryTypeName","src":"2025:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2024:17:56"},"src":"1999:43:56"}],"scope":9984,"src":"280:1764:56","usedErrors":[9858,9863,9868,9877,9882,9887],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"IERC721Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":9889,"nodeType":"StructuredDocumentation","src":"2046:143:56","text":" @dev Standard ERC-721 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens."},"fullyImplemented":true,"id":9936,"linearizedBaseContracts":[9936],"name":"IERC721Errors","nameLocation":"2200:13:56","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9890,"nodeType":"StructuredDocumentation","src":"2220:219:56","text":" @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\n Used in balance queries.\n @param owner Address of the current owner of a token."},"errorSelector":"89c62b64","id":9894,"name":"ERC721InvalidOwner","nameLocation":"2450:18:56","nodeType":"ErrorDefinition","parameters":{"id":9893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9892,"mutability":"mutable","name":"owner","nameLocation":"2477:5:56","nodeType":"VariableDeclaration","scope":9894,"src":"2469:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9891,"name":"address","nodeType":"ElementaryTypeName","src":"2469:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2468:15:56"},"src":"2444:40:56"},{"documentation":{"id":9895,"nodeType":"StructuredDocumentation","src":"2490:132:56","text":" @dev Indicates a `tokenId` whose `owner` is the zero address.\n @param tokenId Identifier number of a token."},"errorSelector":"7e273289","id":9899,"name":"ERC721NonexistentToken","nameLocation":"2633:22:56","nodeType":"ErrorDefinition","parameters":{"id":9898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9897,"mutability":"mutable","name":"tokenId","nameLocation":"2664:7:56","nodeType":"VariableDeclaration","scope":9899,"src":"2656:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9896,"name":"uint256","nodeType":"ElementaryTypeName","src":"2656:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2655:17:56"},"src":"2627:46:56"},{"documentation":{"id":9900,"nodeType":"StructuredDocumentation","src":"2679:289:56","text":" @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param tokenId Identifier number of a token.\n @param owner Address of the current owner of a token."},"errorSelector":"64283d7b","id":9908,"name":"ERC721IncorrectOwner","nameLocation":"2979:20:56","nodeType":"ErrorDefinition","parameters":{"id":9907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9902,"mutability":"mutable","name":"sender","nameLocation":"3008:6:56","nodeType":"VariableDeclaration","scope":9908,"src":"3000:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9901,"name":"address","nodeType":"ElementaryTypeName","src":"3000:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9904,"mutability":"mutable","name":"tokenId","nameLocation":"3024:7:56","nodeType":"VariableDeclaration","scope":9908,"src":"3016:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9903,"name":"uint256","nodeType":"ElementaryTypeName","src":"3016:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9906,"mutability":"mutable","name":"owner","nameLocation":"3041:5:56","nodeType":"VariableDeclaration","scope":9908,"src":"3033:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9905,"name":"address","nodeType":"ElementaryTypeName","src":"3033:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2999:48:56"},"src":"2973:75:56"},{"documentation":{"id":9909,"nodeType":"StructuredDocumentation","src":"3054:152:56","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"73c6ac6e","id":9913,"name":"ERC721InvalidSender","nameLocation":"3217:19:56","nodeType":"ErrorDefinition","parameters":{"id":9912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9911,"mutability":"mutable","name":"sender","nameLocation":"3245:6:56","nodeType":"VariableDeclaration","scope":9913,"src":"3237:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9910,"name":"address","nodeType":"ElementaryTypeName","src":"3237:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3236:16:56"},"src":"3211:42:56"},{"documentation":{"id":9914,"nodeType":"StructuredDocumentation","src":"3259:159:56","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"64a0ae92","id":9918,"name":"ERC721InvalidReceiver","nameLocation":"3429:21:56","nodeType":"ErrorDefinition","parameters":{"id":9917,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9916,"mutability":"mutable","name":"receiver","nameLocation":"3459:8:56","nodeType":"VariableDeclaration","scope":9918,"src":"3451:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9915,"name":"address","nodeType":"ElementaryTypeName","src":"3451:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3450:18:56"},"src":"3423:46:56"},{"documentation":{"id":9919,"nodeType":"StructuredDocumentation","src":"3475:247:56","text":" @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param tokenId Identifier number of a token."},"errorSelector":"177e802f","id":9925,"name":"ERC721InsufficientApproval","nameLocation":"3733:26:56","nodeType":"ErrorDefinition","parameters":{"id":9924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9921,"mutability":"mutable","name":"operator","nameLocation":"3768:8:56","nodeType":"VariableDeclaration","scope":9925,"src":"3760:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9920,"name":"address","nodeType":"ElementaryTypeName","src":"3760:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9923,"mutability":"mutable","name":"tokenId","nameLocation":"3786:7:56","nodeType":"VariableDeclaration","scope":9925,"src":"3778:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9922,"name":"uint256","nodeType":"ElementaryTypeName","src":"3778:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3759:35:56"},"src":"3727:68:56"},{"documentation":{"id":9926,"nodeType":"StructuredDocumentation","src":"3801:174:56","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"a9fbf51f","id":9930,"name":"ERC721InvalidApprover","nameLocation":"3986:21:56","nodeType":"ErrorDefinition","parameters":{"id":9929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9928,"mutability":"mutable","name":"approver","nameLocation":"4016:8:56","nodeType":"VariableDeclaration","scope":9930,"src":"4008:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9927,"name":"address","nodeType":"ElementaryTypeName","src":"4008:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4007:18:56"},"src":"3980:46:56"},{"documentation":{"id":9931,"nodeType":"StructuredDocumentation","src":"4032:197:56","text":" @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"5b08ba18","id":9935,"name":"ERC721InvalidOperator","nameLocation":"4240:21:56","nodeType":"ErrorDefinition","parameters":{"id":9934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9933,"mutability":"mutable","name":"operator","nameLocation":"4270:8:56","nodeType":"VariableDeclaration","scope":9935,"src":"4262:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9932,"name":"address","nodeType":"ElementaryTypeName","src":"4262:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4261:18:56"},"src":"4234:46:56"}],"scope":9984,"src":"2190:2092:56","usedErrors":[9894,9899,9908,9913,9918,9925,9930,9935],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1155Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":9937,"nodeType":"StructuredDocumentation","src":"4284:145:56","text":" @dev Standard ERC-1155 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens."},"fullyImplemented":true,"id":9983,"linearizedBaseContracts":[9983],"name":"IERC1155Errors","nameLocation":"4440:14:56","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9938,"nodeType":"StructuredDocumentation","src":"4461:361:56","text":" @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer.\n @param tokenId Identifier number of a token."},"errorSelector":"03dee4c5","id":9948,"name":"ERC1155InsufficientBalance","nameLocation":"4833:26:56","nodeType":"ErrorDefinition","parameters":{"id":9947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9940,"mutability":"mutable","name":"sender","nameLocation":"4868:6:56","nodeType":"VariableDeclaration","scope":9948,"src":"4860:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9939,"name":"address","nodeType":"ElementaryTypeName","src":"4860:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9942,"mutability":"mutable","name":"balance","nameLocation":"4884:7:56","nodeType":"VariableDeclaration","scope":9948,"src":"4876:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9941,"name":"uint256","nodeType":"ElementaryTypeName","src":"4876:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9944,"mutability":"mutable","name":"needed","nameLocation":"4901:6:56","nodeType":"VariableDeclaration","scope":9948,"src":"4893:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9943,"name":"uint256","nodeType":"ElementaryTypeName","src":"4893:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9946,"mutability":"mutable","name":"tokenId","nameLocation":"4917:7:56","nodeType":"VariableDeclaration","scope":9948,"src":"4909:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9945,"name":"uint256","nodeType":"ElementaryTypeName","src":"4909:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4859:66:56"},"src":"4827:99:56"},{"documentation":{"id":9949,"nodeType":"StructuredDocumentation","src":"4932:152:56","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"01a83514","id":9953,"name":"ERC1155InvalidSender","nameLocation":"5095:20:56","nodeType":"ErrorDefinition","parameters":{"id":9952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9951,"mutability":"mutable","name":"sender","nameLocation":"5124:6:56","nodeType":"VariableDeclaration","scope":9953,"src":"5116:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9950,"name":"address","nodeType":"ElementaryTypeName","src":"5116:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5115:16:56"},"src":"5089:43:56"},{"documentation":{"id":9954,"nodeType":"StructuredDocumentation","src":"5138:159:56","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"57f447ce","id":9958,"name":"ERC1155InvalidReceiver","nameLocation":"5308:22:56","nodeType":"ErrorDefinition","parameters":{"id":9957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9956,"mutability":"mutable","name":"receiver","nameLocation":"5339:8:56","nodeType":"VariableDeclaration","scope":9958,"src":"5331:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9955,"name":"address","nodeType":"ElementaryTypeName","src":"5331:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5330:18:56"},"src":"5302:47:56"},{"documentation":{"id":9959,"nodeType":"StructuredDocumentation","src":"5355:256:56","text":" @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param owner Address of the current owner of a token."},"errorSelector":"e237d922","id":9965,"name":"ERC1155MissingApprovalForAll","nameLocation":"5622:28:56","nodeType":"ErrorDefinition","parameters":{"id":9964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9961,"mutability":"mutable","name":"operator","nameLocation":"5659:8:56","nodeType":"VariableDeclaration","scope":9965,"src":"5651:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9960,"name":"address","nodeType":"ElementaryTypeName","src":"5651:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9963,"mutability":"mutable","name":"owner","nameLocation":"5677:5:56","nodeType":"VariableDeclaration","scope":9965,"src":"5669:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9962,"name":"address","nodeType":"ElementaryTypeName","src":"5669:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5650:33:56"},"src":"5616:68:56"},{"documentation":{"id":9966,"nodeType":"StructuredDocumentation","src":"5690:174:56","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"3e31884e","id":9970,"name":"ERC1155InvalidApprover","nameLocation":"5875:22:56","nodeType":"ErrorDefinition","parameters":{"id":9969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9968,"mutability":"mutable","name":"approver","nameLocation":"5906:8:56","nodeType":"VariableDeclaration","scope":9970,"src":"5898:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9967,"name":"address","nodeType":"ElementaryTypeName","src":"5898:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5897:18:56"},"src":"5869:47:56"},{"documentation":{"id":9971,"nodeType":"StructuredDocumentation","src":"5922:197:56","text":" @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"ced3e100","id":9975,"name":"ERC1155InvalidOperator","nameLocation":"6130:22:56","nodeType":"ErrorDefinition","parameters":{"id":9974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9973,"mutability":"mutable","name":"operator","nameLocation":"6161:8:56","nodeType":"VariableDeclaration","scope":9975,"src":"6153:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9972,"name":"address","nodeType":"ElementaryTypeName","src":"6153:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6152:18:56"},"src":"6124:47:56"},{"documentation":{"id":9976,"nodeType":"StructuredDocumentation","src":"6177:280:56","text":" @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n Used in batch transfers.\n @param idsLength Length of the array of token identifiers\n @param valuesLength Length of the array of token amounts"},"errorSelector":"5b059991","id":9982,"name":"ERC1155InvalidArrayLength","nameLocation":"6468:25:56","nodeType":"ErrorDefinition","parameters":{"id":9981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9978,"mutability":"mutable","name":"idsLength","nameLocation":"6502:9:56","nodeType":"VariableDeclaration","scope":9982,"src":"6494:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9977,"name":"uint256","nodeType":"ElementaryTypeName","src":"6494:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9980,"mutability":"mutable","name":"valuesLength","nameLocation":"6521:12:56","nodeType":"VariableDeclaration","scope":9982,"src":"6513:20:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9979,"name":"uint256","nodeType":"ElementaryTypeName","src":"6513:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6493:41:56"},"src":"6462:73:56"}],"scope":9984,"src":"4430:2107:56","usedErrors":[9948,9953,9958,9965,9970,9975,9982],"usedEvents":[]}],"src":"112:6426:56"},"id":56},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/ERC20.sol","exportedSymbols":{"Context":[12366],"ERC20":[10498],"IERC20":[10576],"IERC20Errors":[9888],"IERC20Metadata":[10602]},"id":10499,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9985,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"105:24:57"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"./IERC20.sol","id":9987,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10499,"sourceUnit":10577,"src":"131:36:57","symbolAliases":[{"foreign":{"id":9986,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"139:6:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"./extensions/IERC20Metadata.sol","id":9989,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10499,"sourceUnit":10603,"src":"168:63:57","symbolAliases":[{"foreign":{"id":9988,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10602,"src":"176:14:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../../utils/Context.sol","id":9991,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10499,"sourceUnit":12367,"src":"232:48:57","symbolAliases":[{"foreign":{"id":9990,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12366,"src":"240:7:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","file":"../../interfaces/draft-IERC6093.sol","id":9993,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10499,"sourceUnit":9984,"src":"281:65:57","symbolAliases":[{"foreign":{"id":9992,"name":"IERC20Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9888,"src":"289:12:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9995,"name":"Context","nameLocations":["1133:7:57"],"nodeType":"IdentifierPath","referencedDeclaration":12366,"src":"1133:7:57"},"id":9996,"nodeType":"InheritanceSpecifier","src":"1133:7:57"},{"baseName":{"id":9997,"name":"IERC20","nameLocations":["1142:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1142:6:57"},"id":9998,"nodeType":"InheritanceSpecifier","src":"1142:6:57"},{"baseName":{"id":9999,"name":"IERC20Metadata","nameLocations":["1150:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":10602,"src":"1150:14:57"},"id":10000,"nodeType":"InheritanceSpecifier","src":"1150:14:57"},{"baseName":{"id":10001,"name":"IERC20Errors","nameLocations":["1166:12:57"],"nodeType":"IdentifierPath","referencedDeclaration":9888,"src":"1166:12:57"},"id":10002,"nodeType":"InheritanceSpecifier","src":"1166:12:57"}],"canonicalName":"ERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":9994,"nodeType":"StructuredDocumentation","src":"348:757:57","text":" @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n TIP: For a detailed writeup see our guide\n https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n The default value of {decimals} is 18. To change this, you should override\n this function so it returns a different value.\n We have followed general OpenZeppelin Contracts guidelines: functions revert\n instead returning `false` on failure. This behavior is nonetheless\n conventional and does not conflict with the expectations of ERC-20\n applications."},"fullyImplemented":true,"id":10498,"linearizedBaseContracts":[10498,9888,10602,10576,12366],"name":"ERC20","nameLocation":"1124:5:57","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":10006,"mutability":"mutable","name":"_balances","nameLocation":"1229:9:57","nodeType":"VariableDeclaration","scope":10498,"src":"1185:53:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":10005,"keyName":"account","keyNameLocation":"1201:7:57","keyType":{"id":10003,"name":"address","nodeType":"ElementaryTypeName","src":"1193:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1185:35:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":10004,"name":"uint256","nodeType":"ElementaryTypeName","src":"1212:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":10012,"mutability":"mutable","name":"_allowances","nameLocation":"1317:11:57","nodeType":"VariableDeclaration","scope":10498,"src":"1245:83:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":10011,"keyName":"account","keyNameLocation":"1261:7:57","keyType":{"id":10007,"name":"address","nodeType":"ElementaryTypeName","src":"1253:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1245:63:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":10010,"keyName":"spender","keyNameLocation":"1288:7:57","keyType":{"id":10008,"name":"address","nodeType":"ElementaryTypeName","src":"1280:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1272:35:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":10009,"name":"uint256","nodeType":"ElementaryTypeName","src":"1299:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"constant":false,"id":10014,"mutability":"mutable","name":"_totalSupply","nameLocation":"1351:12:57","nodeType":"VariableDeclaration","scope":10498,"src":"1335:28:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10013,"name":"uint256","nodeType":"ElementaryTypeName","src":"1335:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":10016,"mutability":"mutable","name":"_name","nameLocation":"1385:5:57","nodeType":"VariableDeclaration","scope":10498,"src":"1370:20:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":10015,"name":"string","nodeType":"ElementaryTypeName","src":"1370:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":10018,"mutability":"mutable","name":"_symbol","nameLocation":"1411:7:57","nodeType":"VariableDeclaration","scope":10498,"src":"1396:22:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":10017,"name":"string","nodeType":"ElementaryTypeName","src":"1396:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":10034,"nodeType":"Block","src":"1638:57:57","statements":[{"expression":{"id":10028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10026,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10016,"src":"1648:5:57","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10027,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10021,"src":"1656:5:57","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1648:13:57","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":10029,"nodeType":"ExpressionStatement","src":"1648:13:57"},{"expression":{"id":10032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10030,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10018,"src":"1671:7:57","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10031,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10023,"src":"1681:7:57","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1671:17:57","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":10033,"nodeType":"ExpressionStatement","src":"1671:17:57"}]},"documentation":{"id":10019,"nodeType":"StructuredDocumentation","src":"1425:152:57","text":" @dev Sets the values for {name} and {symbol}.\n Both values are immutable: they can only be set once during construction."},"id":10035,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10021,"mutability":"mutable","name":"name_","nameLocation":"1608:5:57","nodeType":"VariableDeclaration","scope":10035,"src":"1594:19:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10020,"name":"string","nodeType":"ElementaryTypeName","src":"1594:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":10023,"mutability":"mutable","name":"symbol_","nameLocation":"1629:7:57","nodeType":"VariableDeclaration","scope":10035,"src":"1615:21:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10022,"name":"string","nodeType":"ElementaryTypeName","src":"1615:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1593:44:57"},"returnParameters":{"id":10025,"nodeType":"ParameterList","parameters":[],"src":"1638:0:57"},"scope":10498,"src":"1582:113:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[10589],"body":{"id":10043,"nodeType":"Block","src":"1820:29:57","statements":[{"expression":{"id":10041,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10016,"src":"1837:5:57","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":10040,"id":10042,"nodeType":"Return","src":"1830:12:57"}]},"documentation":{"id":10036,"nodeType":"StructuredDocumentation","src":"1701:54:57","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":10044,"implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"1769:4:57","nodeType":"FunctionDefinition","parameters":{"id":10037,"nodeType":"ParameterList","parameters":[],"src":"1773:2:57"},"returnParameters":{"id":10040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10039,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10044,"src":"1805:13:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10038,"name":"string","nodeType":"ElementaryTypeName","src":"1805:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1804:15:57"},"scope":10498,"src":"1760:89:57","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10595],"body":{"id":10052,"nodeType":"Block","src":"2024:31:57","statements":[{"expression":{"id":10050,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10018,"src":"2041:7:57","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":10049,"id":10051,"nodeType":"Return","src":"2034:14:57"}]},"documentation":{"id":10045,"nodeType":"StructuredDocumentation","src":"1855:102:57","text":" @dev Returns the symbol of the token, usually a shorter version of the\n name."},"functionSelector":"95d89b41","id":10053,"implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"1971:6:57","nodeType":"FunctionDefinition","parameters":{"id":10046,"nodeType":"ParameterList","parameters":[],"src":"1977:2:57"},"returnParameters":{"id":10049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10048,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10053,"src":"2009:13:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10047,"name":"string","nodeType":"ElementaryTypeName","src":"2009:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2008:15:57"},"scope":10498,"src":"1962:93:57","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10601],"body":{"id":10061,"nodeType":"Block","src":"2744:26:57","statements":[{"expression":{"hexValue":"3138","id":10059,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2761:2:57","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"functionReturnParameters":10058,"id":10060,"nodeType":"Return","src":"2754:9:57"}]},"documentation":{"id":10054,"nodeType":"StructuredDocumentation","src":"2061:622:57","text":" @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5.05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the default value returned by this function, unless\n it's overridden.\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."},"functionSelector":"313ce567","id":10062,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"2697:8:57","nodeType":"FunctionDefinition","parameters":{"id":10055,"nodeType":"ParameterList","parameters":[],"src":"2705:2:57"},"returnParameters":{"id":10058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10057,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10062,"src":"2737:5:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":10056,"name":"uint8","nodeType":"ElementaryTypeName","src":"2737:5:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"2736:7:57"},"scope":10498,"src":"2688:82:57","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10525],"body":{"id":10070,"nodeType":"Block","src":"2864:36:57","statements":[{"expression":{"id":10068,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10014,"src":"2881:12:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10067,"id":10069,"nodeType":"Return","src":"2874:19:57"}]},"documentation":{"id":10063,"nodeType":"StructuredDocumentation","src":"2776:22:57","text":"@inheritdoc IERC20"},"functionSelector":"18160ddd","id":10071,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"2812:11:57","nodeType":"FunctionDefinition","parameters":{"id":10064,"nodeType":"ParameterList","parameters":[],"src":"2823:2:57"},"returnParameters":{"id":10067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10066,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10071,"src":"2855:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10065,"name":"uint256","nodeType":"ElementaryTypeName","src":"2855:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2854:9:57"},"scope":10498,"src":"2803:97:57","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10533],"body":{"id":10083,"nodeType":"Block","src":"3007:42:57","statements":[{"expression":{"baseExpression":{"id":10079,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10006,"src":"3024:9:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10081,"indexExpression":{"id":10080,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10074,"src":"3034:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3024:18:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10078,"id":10082,"nodeType":"Return","src":"3017:25:57"}]},"documentation":{"id":10072,"nodeType":"StructuredDocumentation","src":"2906:22:57","text":"@inheritdoc IERC20"},"functionSelector":"70a08231","id":10084,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"2942:9:57","nodeType":"FunctionDefinition","parameters":{"id":10075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10074,"mutability":"mutable","name":"account","nameLocation":"2960:7:57","nodeType":"VariableDeclaration","scope":10084,"src":"2952:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10073,"name":"address","nodeType":"ElementaryTypeName","src":"2952:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2951:17:57"},"returnParameters":{"id":10078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10077,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10084,"src":"2998:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10076,"name":"uint256","nodeType":"ElementaryTypeName","src":"2998:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2997:9:57"},"scope":10498,"src":"2933:116:57","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10543],"body":{"id":10107,"nodeType":"Block","src":"3319:103:57","statements":[{"assignments":[10095],"declarations":[{"constant":false,"id":10095,"mutability":"mutable","name":"owner","nameLocation":"3337:5:57","nodeType":"VariableDeclaration","scope":10107,"src":"3329:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10094,"name":"address","nodeType":"ElementaryTypeName","src":"3329:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":10098,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":10096,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12348,"src":"3345:10:57","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":10097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3345:12:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3329:28:57"},{"expression":{"arguments":[{"id":10100,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10095,"src":"3377:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10101,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10087,"src":"3384:2:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10102,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10089,"src":"3388:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10099,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10228,"src":"3367:9:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3367:27:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10104,"nodeType":"ExpressionStatement","src":"3367:27:57"},{"expression":{"hexValue":"74727565","id":10105,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3411:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10093,"id":10106,"nodeType":"Return","src":"3404:11:57"}]},"documentation":{"id":10085,"nodeType":"StructuredDocumentation","src":"3055:184:57","text":" @dev See {IERC20-transfer}.\n Requirements:\n - `to` cannot be the zero address.\n - the caller must have a balance of at least `value`."},"functionSelector":"a9059cbb","id":10108,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"3253:8:57","nodeType":"FunctionDefinition","parameters":{"id":10090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10087,"mutability":"mutable","name":"to","nameLocation":"3270:2:57","nodeType":"VariableDeclaration","scope":10108,"src":"3262:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10086,"name":"address","nodeType":"ElementaryTypeName","src":"3262:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10089,"mutability":"mutable","name":"value","nameLocation":"3282:5:57","nodeType":"VariableDeclaration","scope":10108,"src":"3274:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10088,"name":"uint256","nodeType":"ElementaryTypeName","src":"3274:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3261:27:57"},"returnParameters":{"id":10093,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10092,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10108,"src":"3313:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10091,"name":"bool","nodeType":"ElementaryTypeName","src":"3313:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3312:6:57"},"scope":10498,"src":"3244:178:57","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[10553],"body":{"id":10124,"nodeType":"Block","src":"3544:51:57","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":10118,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10012,"src":"3561:11:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":10120,"indexExpression":{"id":10119,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10111,"src":"3573:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3561:18:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10122,"indexExpression":{"id":10121,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10113,"src":"3580:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3561:27:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10117,"id":10123,"nodeType":"Return","src":"3554:34:57"}]},"documentation":{"id":10109,"nodeType":"StructuredDocumentation","src":"3428:22:57","text":"@inheritdoc IERC20"},"functionSelector":"dd62ed3e","id":10125,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"3464:9:57","nodeType":"FunctionDefinition","parameters":{"id":10114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10111,"mutability":"mutable","name":"owner","nameLocation":"3482:5:57","nodeType":"VariableDeclaration","scope":10125,"src":"3474:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10110,"name":"address","nodeType":"ElementaryTypeName","src":"3474:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10113,"mutability":"mutable","name":"spender","nameLocation":"3497:7:57","nodeType":"VariableDeclaration","scope":10125,"src":"3489:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10112,"name":"address","nodeType":"ElementaryTypeName","src":"3489:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3473:32:57"},"returnParameters":{"id":10117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10116,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10125,"src":"3535:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10115,"name":"uint256","nodeType":"ElementaryTypeName","src":"3535:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3534:9:57"},"scope":10498,"src":"3455:140:57","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10563],"body":{"id":10148,"nodeType":"Block","src":"3981:107:57","statements":[{"assignments":[10136],"declarations":[{"constant":false,"id":10136,"mutability":"mutable","name":"owner","nameLocation":"3999:5:57","nodeType":"VariableDeclaration","scope":10148,"src":"3991:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10135,"name":"address","nodeType":"ElementaryTypeName","src":"3991:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":10139,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":10137,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12348,"src":"4007:10:57","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":10138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4007:12:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3991:28:57"},{"expression":{"arguments":[{"id":10141,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10136,"src":"4038:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10142,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10128,"src":"4045:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10143,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10130,"src":"4054:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10140,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[10389,10449],"referencedDeclaration":10389,"src":"4029:8:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4029:31:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10145,"nodeType":"ExpressionStatement","src":"4029:31:57"},{"expression":{"hexValue":"74727565","id":10146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4077:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10134,"id":10147,"nodeType":"Return","src":"4070:11:57"}]},"documentation":{"id":10126,"nodeType":"StructuredDocumentation","src":"3601:296:57","text":" @dev See {IERC20-approve}.\n NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n `transferFrom`. This is semantically equivalent to an infinite approval.\n Requirements:\n - `spender` cannot be the zero address."},"functionSelector":"095ea7b3","id":10149,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"3911:7:57","nodeType":"FunctionDefinition","parameters":{"id":10131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10128,"mutability":"mutable","name":"spender","nameLocation":"3927:7:57","nodeType":"VariableDeclaration","scope":10149,"src":"3919:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10127,"name":"address","nodeType":"ElementaryTypeName","src":"3919:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10130,"mutability":"mutable","name":"value","nameLocation":"3944:5:57","nodeType":"VariableDeclaration","scope":10149,"src":"3936:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10129,"name":"uint256","nodeType":"ElementaryTypeName","src":"3936:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3918:32:57"},"returnParameters":{"id":10134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10133,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10149,"src":"3975:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10132,"name":"bool","nodeType":"ElementaryTypeName","src":"3975:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3974:6:57"},"scope":10498,"src":"3902:186:57","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[10575],"body":{"id":10180,"nodeType":"Block","src":"4773:151:57","statements":[{"assignments":[10162],"declarations":[{"constant":false,"id":10162,"mutability":"mutable","name":"spender","nameLocation":"4791:7:57","nodeType":"VariableDeclaration","scope":10180,"src":"4783:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10161,"name":"address","nodeType":"ElementaryTypeName","src":"4783:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":10165,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":10163,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12348,"src":"4801:10:57","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":10164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4801:12:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4783:30:57"},{"expression":{"arguments":[{"id":10167,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10152,"src":"4839:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10168,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10162,"src":"4845:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10169,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10156,"src":"4854:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10166,"name":"_spendAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10497,"src":"4823:15:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4823:37:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10171,"nodeType":"ExpressionStatement","src":"4823:37:57"},{"expression":{"arguments":[{"id":10173,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10152,"src":"4880:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10174,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10154,"src":"4886:2:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10175,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10156,"src":"4890:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10172,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10228,"src":"4870:9:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4870:26:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10177,"nodeType":"ExpressionStatement","src":"4870:26:57"},{"expression":{"hexValue":"74727565","id":10178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4913:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10160,"id":10179,"nodeType":"Return","src":"4906:11:57"}]},"documentation":{"id":10150,"nodeType":"StructuredDocumentation","src":"4094:581:57","text":" @dev See {IERC20-transferFrom}.\n Skips emitting an {Approval} event indicating an allowance update. This is not\n required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\n NOTE: Does not update the allowance if the current allowance\n is the maximum `uint256`.\n Requirements:\n - `from` and `to` cannot be the zero address.\n - `from` must have a balance of at least `value`.\n - the caller must have allowance for ``from``'s tokens of at least\n `value`."},"functionSelector":"23b872dd","id":10181,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"4689:12:57","nodeType":"FunctionDefinition","parameters":{"id":10157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10152,"mutability":"mutable","name":"from","nameLocation":"4710:4:57","nodeType":"VariableDeclaration","scope":10181,"src":"4702:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10151,"name":"address","nodeType":"ElementaryTypeName","src":"4702:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10154,"mutability":"mutable","name":"to","nameLocation":"4724:2:57","nodeType":"VariableDeclaration","scope":10181,"src":"4716:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10153,"name":"address","nodeType":"ElementaryTypeName","src":"4716:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10156,"mutability":"mutable","name":"value","nameLocation":"4736:5:57","nodeType":"VariableDeclaration","scope":10181,"src":"4728:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10155,"name":"uint256","nodeType":"ElementaryTypeName","src":"4728:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4701:41:57"},"returnParameters":{"id":10160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10159,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10181,"src":"4767:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10158,"name":"bool","nodeType":"ElementaryTypeName","src":"4767:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4766:6:57"},"scope":10498,"src":"4680:244:57","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":10227,"nodeType":"Block","src":"5366:231:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10191,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10184,"src":"5380:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10194,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5396:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10193,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5388:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10192,"name":"address","nodeType":"ElementaryTypeName","src":"5388:7:57","typeDescriptions":{}}},"id":10195,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5388:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5380:18:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10205,"nodeType":"IfStatement","src":"5376:86:57","trueBody":{"id":10204,"nodeType":"Block","src":"5400:62:57","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10200,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5448:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10199,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5440:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10198,"name":"address","nodeType":"ElementaryTypeName","src":"5440:7:57","typeDescriptions":{}}},"id":10201,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5440:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10197,"name":"ERC20InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9863,"src":"5421:18:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5421:30:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10203,"nodeType":"RevertStatement","src":"5414:37:57"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10206,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10186,"src":"5475:2:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10209,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5489:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10208,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5481:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10207,"name":"address","nodeType":"ElementaryTypeName","src":"5481:7:57","typeDescriptions":{}}},"id":10210,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5481:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5475:16:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10220,"nodeType":"IfStatement","src":"5471:86:57","trueBody":{"id":10219,"nodeType":"Block","src":"5493:64:57","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5543:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10214,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5535:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10213,"name":"address","nodeType":"ElementaryTypeName","src":"5535:7:57","typeDescriptions":{}}},"id":10216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5535:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10212,"name":"ERC20InvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9868,"src":"5514:20:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5514:32:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10218,"nodeType":"RevertStatement","src":"5507:39:57"}]}},{"expression":{"arguments":[{"id":10222,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10184,"src":"5574:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10223,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10186,"src":"5580:2:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10224,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10188,"src":"5584:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10221,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10305,"src":"5566:7:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5566:24:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10226,"nodeType":"ExpressionStatement","src":"5566:24:57"}]},"documentation":{"id":10182,"nodeType":"StructuredDocumentation","src":"4930:362:57","text":" @dev Moves a `value` amount of tokens from `from` to `to`.\n This internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n NOTE: This function is not virtual, {_update} should be overridden instead."},"id":10228,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"5306:9:57","nodeType":"FunctionDefinition","parameters":{"id":10189,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10184,"mutability":"mutable","name":"from","nameLocation":"5324:4:57","nodeType":"VariableDeclaration","scope":10228,"src":"5316:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10183,"name":"address","nodeType":"ElementaryTypeName","src":"5316:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10186,"mutability":"mutable","name":"to","nameLocation":"5338:2:57","nodeType":"VariableDeclaration","scope":10228,"src":"5330:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10185,"name":"address","nodeType":"ElementaryTypeName","src":"5330:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10188,"mutability":"mutable","name":"value","nameLocation":"5350:5:57","nodeType":"VariableDeclaration","scope":10228,"src":"5342:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10187,"name":"uint256","nodeType":"ElementaryTypeName","src":"5342:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5315:41:57"},"returnParameters":{"id":10190,"nodeType":"ParameterList","parameters":[],"src":"5366:0:57"},"scope":10498,"src":"5297:300:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10304,"nodeType":"Block","src":"5987:1032:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10238,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10231,"src":"6001:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10241,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6017:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10240,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6009:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10239,"name":"address","nodeType":"ElementaryTypeName","src":"6009:7:57","typeDescriptions":{}}},"id":10242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6009:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6001:18:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":10275,"nodeType":"Block","src":"6175:362:57","statements":[{"assignments":[10250],"declarations":[{"constant":false,"id":10250,"mutability":"mutable","name":"fromBalance","nameLocation":"6197:11:57","nodeType":"VariableDeclaration","scope":10275,"src":"6189:19:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10249,"name":"uint256","nodeType":"ElementaryTypeName","src":"6189:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10254,"initialValue":{"baseExpression":{"id":10251,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10006,"src":"6211:9:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10253,"indexExpression":{"id":10252,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10231,"src":"6221:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6211:15:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6189:37:57"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10255,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10250,"src":"6244:11:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":10256,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10235,"src":"6258:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6244:19:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10265,"nodeType":"IfStatement","src":"6240:115:57","trueBody":{"id":10264,"nodeType":"Block","src":"6265:90:57","statements":[{"errorCall":{"arguments":[{"id":10259,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10231,"src":"6315:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10260,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10250,"src":"6321:11:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10261,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10235,"src":"6334:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10258,"name":"ERC20InsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9858,"src":"6290:24:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":10262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6290:50:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10263,"nodeType":"RevertStatement","src":"6283:57:57"}]}},{"id":10274,"nodeType":"UncheckedBlock","src":"6368:159:57","statements":[{"expression":{"id":10272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10266,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10006,"src":"6475:9:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10268,"indexExpression":{"id":10267,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10231,"src":"6485:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6475:15:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10269,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10250,"src":"6493:11:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":10270,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10235,"src":"6507:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6493:19:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6475:37:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10273,"nodeType":"ExpressionStatement","src":"6475:37:57"}]}]},"id":10276,"nodeType":"IfStatement","src":"5997:540:57","trueBody":{"id":10248,"nodeType":"Block","src":"6021:148:57","statements":[{"expression":{"id":10246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10244,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10014,"src":"6137:12:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":10245,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10235,"src":"6153:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6137:21:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10247,"nodeType":"ExpressionStatement","src":"6137:21:57"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10277,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10233,"src":"6551:2:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6565:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10279,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6557:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10278,"name":"address","nodeType":"ElementaryTypeName","src":"6557:7:57","typeDescriptions":{}}},"id":10281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6557:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6551:16:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":10296,"nodeType":"Block","src":"6766:206:57","statements":[{"id":10295,"nodeType":"UncheckedBlock","src":"6780:182:57","statements":[{"expression":{"id":10293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10289,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10006,"src":"6925:9:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10291,"indexExpression":{"id":10290,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10233,"src":"6935:2:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6925:13:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":10292,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10235,"src":"6942:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6925:22:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10294,"nodeType":"ExpressionStatement","src":"6925:22:57"}]}]},"id":10297,"nodeType":"IfStatement","src":"6547:425:57","trueBody":{"id":10288,"nodeType":"Block","src":"6569:191:57","statements":[{"id":10287,"nodeType":"UncheckedBlock","src":"6583:167:57","statements":[{"expression":{"id":10285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10283,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10014,"src":"6714:12:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":10284,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10235,"src":"6730:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6714:21:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10286,"nodeType":"ExpressionStatement","src":"6714:21:57"}]}]}},{"eventCall":{"arguments":[{"id":10299,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10231,"src":"6996:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10300,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10233,"src":"7002:2:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10301,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10235,"src":"7006:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10298,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10510,"src":"6987:8:57","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6987:25:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10303,"nodeType":"EmitStatement","src":"6982:30:57"}]},"documentation":{"id":10229,"nodeType":"StructuredDocumentation","src":"5603:304:57","text":" @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n this function.\n Emits a {Transfer} event."},"id":10305,"implemented":true,"kind":"function","modifiers":[],"name":"_update","nameLocation":"5921:7:57","nodeType":"FunctionDefinition","parameters":{"id":10236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10231,"mutability":"mutable","name":"from","nameLocation":"5937:4:57","nodeType":"VariableDeclaration","scope":10305,"src":"5929:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10230,"name":"address","nodeType":"ElementaryTypeName","src":"5929:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10233,"mutability":"mutable","name":"to","nameLocation":"5951:2:57","nodeType":"VariableDeclaration","scope":10305,"src":"5943:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10232,"name":"address","nodeType":"ElementaryTypeName","src":"5943:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10235,"mutability":"mutable","name":"value","nameLocation":"5963:5:57","nodeType":"VariableDeclaration","scope":10305,"src":"5955:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10234,"name":"uint256","nodeType":"ElementaryTypeName","src":"5955:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5928:41:57"},"returnParameters":{"id":10237,"nodeType":"ParameterList","parameters":[],"src":"5987:0:57"},"scope":10498,"src":"5912:1107:57","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":10337,"nodeType":"Block","src":"7418:152:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10313,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10308,"src":"7432:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10316,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7451:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10315,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7443:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10314,"name":"address","nodeType":"ElementaryTypeName","src":"7443:7:57","typeDescriptions":{}}},"id":10317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7443:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7432:21:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10327,"nodeType":"IfStatement","src":"7428:91:57","trueBody":{"id":10326,"nodeType":"Block","src":"7455:64:57","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7505:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10321,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7497:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10320,"name":"address","nodeType":"ElementaryTypeName","src":"7497:7:57","typeDescriptions":{}}},"id":10323,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7497:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10319,"name":"ERC20InvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9868,"src":"7476:20:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7476:32:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10325,"nodeType":"RevertStatement","src":"7469:39:57"}]}},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":10331,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7544:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10330,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7536:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10329,"name":"address","nodeType":"ElementaryTypeName","src":"7536:7:57","typeDescriptions":{}}},"id":10332,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7536:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10333,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10308,"src":"7548:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10334,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10310,"src":"7557:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10328,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10305,"src":"7528:7:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7528:35:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10336,"nodeType":"ExpressionStatement","src":"7528:35:57"}]},"documentation":{"id":10306,"nodeType":"StructuredDocumentation","src":"7025:332:57","text":" @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n Relies on the `_update` mechanism\n Emits a {Transfer} event with `from` set to the zero address.\n NOTE: This function is not virtual, {_update} should be overridden instead."},"id":10338,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"7371:5:57","nodeType":"FunctionDefinition","parameters":{"id":10311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10308,"mutability":"mutable","name":"account","nameLocation":"7385:7:57","nodeType":"VariableDeclaration","scope":10338,"src":"7377:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10307,"name":"address","nodeType":"ElementaryTypeName","src":"7377:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10310,"mutability":"mutable","name":"value","nameLocation":"7402:5:57","nodeType":"VariableDeclaration","scope":10338,"src":"7394:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10309,"name":"uint256","nodeType":"ElementaryTypeName","src":"7394:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7376:32:57"},"returnParameters":{"id":10312,"nodeType":"ParameterList","parameters":[],"src":"7418:0:57"},"scope":10498,"src":"7362:208:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10370,"nodeType":"Block","src":"7944:150:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10346,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10341,"src":"7958:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10349,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7977:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10348,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7969:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10347,"name":"address","nodeType":"ElementaryTypeName","src":"7969:7:57","typeDescriptions":{}}},"id":10350,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7969:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7958:21:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10360,"nodeType":"IfStatement","src":"7954:89:57","trueBody":{"id":10359,"nodeType":"Block","src":"7981:62:57","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10355,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8029:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10354,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8021:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10353,"name":"address","nodeType":"ElementaryTypeName","src":"8021:7:57","typeDescriptions":{}}},"id":10356,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8021:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10352,"name":"ERC20InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9863,"src":"8002:18:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8002:30:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10358,"nodeType":"RevertStatement","src":"7995:37:57"}]}},{"expression":{"arguments":[{"id":10362,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10341,"src":"8060:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":10365,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8077:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10364,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8069:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10363,"name":"address","nodeType":"ElementaryTypeName","src":"8069:7:57","typeDescriptions":{}}},"id":10366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8069:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10367,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10343,"src":"8081:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10361,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10305,"src":"8052:7:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8052:35:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10369,"nodeType":"ExpressionStatement","src":"8052:35:57"}]},"documentation":{"id":10339,"nodeType":"StructuredDocumentation","src":"7576:307:57","text":" @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n Relies on the `_update` mechanism.\n Emits a {Transfer} event with `to` set to the zero address.\n NOTE: This function is not virtual, {_update} should be overridden instead"},"id":10371,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"7897:5:57","nodeType":"FunctionDefinition","parameters":{"id":10344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10341,"mutability":"mutable","name":"account","nameLocation":"7911:7:57","nodeType":"VariableDeclaration","scope":10371,"src":"7903:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10340,"name":"address","nodeType":"ElementaryTypeName","src":"7903:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10343,"mutability":"mutable","name":"value","nameLocation":"7928:5:57","nodeType":"VariableDeclaration","scope":10371,"src":"7920:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10342,"name":"uint256","nodeType":"ElementaryTypeName","src":"7920:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7902:32:57"},"returnParameters":{"id":10345,"nodeType":"ParameterList","parameters":[],"src":"7944:0:57"},"scope":10498,"src":"7888:206:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10388,"nodeType":"Block","src":"8704:54:57","statements":[{"expression":{"arguments":[{"id":10382,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10374,"src":"8723:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10383,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10376,"src":"8730:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10384,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10378,"src":"8739:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":10385,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8746:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":10381,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[10389,10449],"referencedDeclaration":10449,"src":"8714:8:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,bool)"}},"id":10386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8714:37:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10387,"nodeType":"ExpressionStatement","src":"8714:37:57"}]},"documentation":{"id":10372,"nodeType":"StructuredDocumentation","src":"8100:525:57","text":" @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address.\n Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument."},"id":10389,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"8639:8:57","nodeType":"FunctionDefinition","parameters":{"id":10379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10374,"mutability":"mutable","name":"owner","nameLocation":"8656:5:57","nodeType":"VariableDeclaration","scope":10389,"src":"8648:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10373,"name":"address","nodeType":"ElementaryTypeName","src":"8648:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10376,"mutability":"mutable","name":"spender","nameLocation":"8671:7:57","nodeType":"VariableDeclaration","scope":10389,"src":"8663:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10375,"name":"address","nodeType":"ElementaryTypeName","src":"8663:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10378,"mutability":"mutable","name":"value","nameLocation":"8688:5:57","nodeType":"VariableDeclaration","scope":10389,"src":"8680:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10377,"name":"uint256","nodeType":"ElementaryTypeName","src":"8680:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8647:47:57"},"returnParameters":{"id":10380,"nodeType":"ParameterList","parameters":[],"src":"8704:0:57"},"scope":10498,"src":"8630:128:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10448,"nodeType":"Block","src":"9703:334:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10401,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10392,"src":"9717:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10404,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9734:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10403,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9726:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10402,"name":"address","nodeType":"ElementaryTypeName","src":"9726:7:57","typeDescriptions":{}}},"id":10405,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9726:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9717:19:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10415,"nodeType":"IfStatement","src":"9713:89:57","trueBody":{"id":10414,"nodeType":"Block","src":"9738:64:57","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9788:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10409,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9780:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10408,"name":"address","nodeType":"ElementaryTypeName","src":"9780:7:57","typeDescriptions":{}}},"id":10411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9780:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10407,"name":"ERC20InvalidApprover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9882,"src":"9759:20:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9759:32:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10413,"nodeType":"RevertStatement","src":"9752:39:57"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10416,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10394,"src":"9815:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9834:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10418,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9826:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10417,"name":"address","nodeType":"ElementaryTypeName","src":"9826:7:57","typeDescriptions":{}}},"id":10420,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9826:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9815:21:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10430,"nodeType":"IfStatement","src":"9811:90:57","trueBody":{"id":10429,"nodeType":"Block","src":"9838:63:57","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10425,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9887:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10424,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9879:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10423,"name":"address","nodeType":"ElementaryTypeName","src":"9879:7:57","typeDescriptions":{}}},"id":10426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9879:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10422,"name":"ERC20InvalidSpender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9887,"src":"9859:19:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9859:31:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10428,"nodeType":"RevertStatement","src":"9852:38:57"}]}},{"expression":{"id":10437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":10431,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10012,"src":"9910:11:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":10434,"indexExpression":{"id":10432,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10392,"src":"9922:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9910:18:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10435,"indexExpression":{"id":10433,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10394,"src":"9929:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9910:27:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10436,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10396,"src":"9940:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9910:35:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10438,"nodeType":"ExpressionStatement","src":"9910:35:57"},{"condition":{"id":10439,"name":"emitEvent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10398,"src":"9959:9:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10447,"nodeType":"IfStatement","src":"9955:76:57","trueBody":{"id":10446,"nodeType":"Block","src":"9970:61:57","statements":[{"eventCall":{"arguments":[{"id":10441,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10392,"src":"9998:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10442,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10394,"src":"10005:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10443,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10396,"src":"10014:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10440,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10519,"src":"9989:8:57","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9989:31:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10445,"nodeType":"EmitStatement","src":"9984:36:57"}]}}]},"documentation":{"id":10390,"nodeType":"StructuredDocumentation","src":"8764:836:57","text":" @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\n `Approval` event during `transferFrom` operations.\n Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\n true using the following override:\n ```solidity\n function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n super._approve(owner, spender, value, true);\n }\n ```\n Requirements are the same as {_approve}."},"id":10449,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"9614:8:57","nodeType":"FunctionDefinition","parameters":{"id":10399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10392,"mutability":"mutable","name":"owner","nameLocation":"9631:5:57","nodeType":"VariableDeclaration","scope":10449,"src":"9623:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10391,"name":"address","nodeType":"ElementaryTypeName","src":"9623:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10394,"mutability":"mutable","name":"spender","nameLocation":"9646:7:57","nodeType":"VariableDeclaration","scope":10449,"src":"9638:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10393,"name":"address","nodeType":"ElementaryTypeName","src":"9638:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10396,"mutability":"mutable","name":"value","nameLocation":"9663:5:57","nodeType":"VariableDeclaration","scope":10449,"src":"9655:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10395,"name":"uint256","nodeType":"ElementaryTypeName","src":"9655:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10398,"mutability":"mutable","name":"emitEvent","nameLocation":"9675:9:57","nodeType":"VariableDeclaration","scope":10449,"src":"9670:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10397,"name":"bool","nodeType":"ElementaryTypeName","src":"9670:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9622:63:57"},"returnParameters":{"id":10400,"nodeType":"ParameterList","parameters":[],"src":"9703:0:57"},"scope":10498,"src":"9605:432:57","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":10496,"nodeType":"Block","src":"10408:387:57","statements":[{"assignments":[10460],"declarations":[{"constant":false,"id":10460,"mutability":"mutable","name":"currentAllowance","nameLocation":"10426:16:57","nodeType":"VariableDeclaration","scope":10496,"src":"10418:24:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10459,"name":"uint256","nodeType":"ElementaryTypeName","src":"10418:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10465,"initialValue":{"arguments":[{"id":10462,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10452,"src":"10455:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10463,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10454,"src":"10462:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":10461,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10125,"src":"10445:9:57","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":10464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10445:25:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10418:52:57"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10466,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10460,"src":"10484:16:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"arguments":[{"id":10469,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10508:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":10468,"name":"uint256","nodeType":"ElementaryTypeName","src":"10508:7:57","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":10467,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10503:4:57","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10503:13:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":10471,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10517:3:57","memberName":"max","nodeType":"MemberAccess","src":"10503:17:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10484:36:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10495,"nodeType":"IfStatement","src":"10480:309:57","trueBody":{"id":10494,"nodeType":"Block","src":"10522:267:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10473,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10460,"src":"10540:16:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":10474,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10456,"src":"10559:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10540:24:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10483,"nodeType":"IfStatement","src":"10536:130:57","trueBody":{"id":10482,"nodeType":"Block","src":"10566:100:57","statements":[{"errorCall":{"arguments":[{"id":10477,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10454,"src":"10618:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10478,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10460,"src":"10627:16:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10479,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10456,"src":"10645:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10476,"name":"ERC20InsufficientAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9877,"src":"10591:26:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":10480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10591:60:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10481,"nodeType":"RevertStatement","src":"10584:67:57"}]}},{"id":10493,"nodeType":"UncheckedBlock","src":"10679:100:57","statements":[{"expression":{"arguments":[{"id":10485,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10452,"src":"10716:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10486,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10454,"src":"10723:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10487,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10460,"src":"10732:16:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":10488,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10456,"src":"10751:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10732:24:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":10490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10758:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":10484,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[10389,10449],"referencedDeclaration":10449,"src":"10707:8:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,bool)"}},"id":10491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10707:57:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10492,"nodeType":"ExpressionStatement","src":"10707:57:57"}]}]}}]},"documentation":{"id":10450,"nodeType":"StructuredDocumentation","src":"10043:271:57","text":" @dev Updates `owner`'s allowance for `spender` based on spent `value`.\n Does not update the allowance value in case of infinite allowance.\n Revert if not enough allowance is available.\n Does not emit an {Approval} event."},"id":10497,"implemented":true,"kind":"function","modifiers":[],"name":"_spendAllowance","nameLocation":"10328:15:57","nodeType":"FunctionDefinition","parameters":{"id":10457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10452,"mutability":"mutable","name":"owner","nameLocation":"10352:5:57","nodeType":"VariableDeclaration","scope":10497,"src":"10344:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10451,"name":"address","nodeType":"ElementaryTypeName","src":"10344:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10454,"mutability":"mutable","name":"spender","nameLocation":"10367:7:57","nodeType":"VariableDeclaration","scope":10497,"src":"10359:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10453,"name":"address","nodeType":"ElementaryTypeName","src":"10359:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10456,"mutability":"mutable","name":"value","nameLocation":"10384:5:57","nodeType":"VariableDeclaration","scope":10497,"src":"10376:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10455,"name":"uint256","nodeType":"ElementaryTypeName","src":"10376:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10343:47:57"},"returnParameters":{"id":10458,"nodeType":"ParameterList","parameters":[],"src":"10408:0:57"},"scope":10498,"src":"10319:476:57","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":10499,"src":"1106:9691:57","usedErrors":[9858,9863,9868,9877,9882,9887],"usedEvents":[10510,10519]}],"src":"105:10693:57"},"id":57},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[10576]},"id":10577,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10500,"literals":["solidity",">=","0.4",".16"],"nodeType":"PragmaDirective","src":"106:25:58"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":10501,"nodeType":"StructuredDocumentation","src":"133:71:58","text":" @dev Interface of the ERC-20 standard as defined in the ERC."},"fullyImplemented":false,"id":10576,"linearizedBaseContracts":[10576],"name":"IERC20","nameLocation":"215:6:58","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":10502,"nodeType":"StructuredDocumentation","src":"228:158:58","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":10510,"name":"Transfer","nameLocation":"397:8:58","nodeType":"EventDefinition","parameters":{"id":10509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10504,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"422:4:58","nodeType":"VariableDeclaration","scope":10510,"src":"406:20:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10503,"name":"address","nodeType":"ElementaryTypeName","src":"406:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10506,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"444:2:58","nodeType":"VariableDeclaration","scope":10510,"src":"428:18:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10505,"name":"address","nodeType":"ElementaryTypeName","src":"428:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10508,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"456:5:58","nodeType":"VariableDeclaration","scope":10510,"src":"448:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10507,"name":"uint256","nodeType":"ElementaryTypeName","src":"448:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"405:57:58"},"src":"391:72:58"},{"anonymous":false,"documentation":{"id":10511,"nodeType":"StructuredDocumentation","src":"469:148:58","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":10519,"name":"Approval","nameLocation":"628:8:58","nodeType":"EventDefinition","parameters":{"id":10518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10513,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"653:5:58","nodeType":"VariableDeclaration","scope":10519,"src":"637:21:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10512,"name":"address","nodeType":"ElementaryTypeName","src":"637:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10515,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"676:7:58","nodeType":"VariableDeclaration","scope":10519,"src":"660:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10514,"name":"address","nodeType":"ElementaryTypeName","src":"660:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10517,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"693:5:58","nodeType":"VariableDeclaration","scope":10519,"src":"685:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10516,"name":"uint256","nodeType":"ElementaryTypeName","src":"685:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"636:63:58"},"src":"622:78:58"},{"documentation":{"id":10520,"nodeType":"StructuredDocumentation","src":"706:65:58","text":" @dev Returns the value of tokens in existence."},"functionSelector":"18160ddd","id":10525,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"785:11:58","nodeType":"FunctionDefinition","parameters":{"id":10521,"nodeType":"ParameterList","parameters":[],"src":"796:2:58"},"returnParameters":{"id":10524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10523,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10525,"src":"822:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10522,"name":"uint256","nodeType":"ElementaryTypeName","src":"822:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"821:9:58"},"scope":10576,"src":"776:55:58","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10526,"nodeType":"StructuredDocumentation","src":"837:71:58","text":" @dev Returns the value of tokens owned by `account`."},"functionSelector":"70a08231","id":10533,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"922:9:58","nodeType":"FunctionDefinition","parameters":{"id":10529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10528,"mutability":"mutable","name":"account","nameLocation":"940:7:58","nodeType":"VariableDeclaration","scope":10533,"src":"932:15:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10527,"name":"address","nodeType":"ElementaryTypeName","src":"932:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"931:17:58"},"returnParameters":{"id":10532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10531,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10533,"src":"972:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10530,"name":"uint256","nodeType":"ElementaryTypeName","src":"972:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"971:9:58"},"scope":10576,"src":"913:68:58","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10534,"nodeType":"StructuredDocumentation","src":"987:213:58","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":10543,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1214:8:58","nodeType":"FunctionDefinition","parameters":{"id":10539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10536,"mutability":"mutable","name":"to","nameLocation":"1231:2:58","nodeType":"VariableDeclaration","scope":10543,"src":"1223:10:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10535,"name":"address","nodeType":"ElementaryTypeName","src":"1223:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10538,"mutability":"mutable","name":"value","nameLocation":"1243:5:58","nodeType":"VariableDeclaration","scope":10543,"src":"1235:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10537,"name":"uint256","nodeType":"ElementaryTypeName","src":"1235:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1222:27:58"},"returnParameters":{"id":10542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10541,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10543,"src":"1268:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10540,"name":"bool","nodeType":"ElementaryTypeName","src":"1268:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1267:6:58"},"scope":10576,"src":"1205:69:58","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":10544,"nodeType":"StructuredDocumentation","src":"1280:264:58","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":10553,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1558:9:58","nodeType":"FunctionDefinition","parameters":{"id":10549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10546,"mutability":"mutable","name":"owner","nameLocation":"1576:5:58","nodeType":"VariableDeclaration","scope":10553,"src":"1568:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10545,"name":"address","nodeType":"ElementaryTypeName","src":"1568:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10548,"mutability":"mutable","name":"spender","nameLocation":"1591:7:58","nodeType":"VariableDeclaration","scope":10553,"src":"1583:15:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10547,"name":"address","nodeType":"ElementaryTypeName","src":"1583:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1567:32:58"},"returnParameters":{"id":10552,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10551,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10553,"src":"1623:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10550,"name":"uint256","nodeType":"ElementaryTypeName","src":"1623:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1622:9:58"},"scope":10576,"src":"1549:83:58","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10554,"nodeType":"StructuredDocumentation","src":"1638:667:58","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":10563,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2319:7:58","nodeType":"FunctionDefinition","parameters":{"id":10559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10556,"mutability":"mutable","name":"spender","nameLocation":"2335:7:58","nodeType":"VariableDeclaration","scope":10563,"src":"2327:15:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10555,"name":"address","nodeType":"ElementaryTypeName","src":"2327:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10558,"mutability":"mutable","name":"value","nameLocation":"2352:5:58","nodeType":"VariableDeclaration","scope":10563,"src":"2344:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10557,"name":"uint256","nodeType":"ElementaryTypeName","src":"2344:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2326:32:58"},"returnParameters":{"id":10562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10561,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10563,"src":"2377:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10560,"name":"bool","nodeType":"ElementaryTypeName","src":"2377:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2376:6:58"},"scope":10576,"src":"2310:73:58","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":10564,"nodeType":"StructuredDocumentation","src":"2389:297:58","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":10575,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2700:12:58","nodeType":"FunctionDefinition","parameters":{"id":10571,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10566,"mutability":"mutable","name":"from","nameLocation":"2721:4:58","nodeType":"VariableDeclaration","scope":10575,"src":"2713:12:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10565,"name":"address","nodeType":"ElementaryTypeName","src":"2713:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10568,"mutability":"mutable","name":"to","nameLocation":"2735:2:58","nodeType":"VariableDeclaration","scope":10575,"src":"2727:10:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10567,"name":"address","nodeType":"ElementaryTypeName","src":"2727:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10570,"mutability":"mutable","name":"value","nameLocation":"2747:5:58","nodeType":"VariableDeclaration","scope":10575,"src":"2739:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10569,"name":"uint256","nodeType":"ElementaryTypeName","src":"2739:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2712:41:58"},"returnParameters":{"id":10574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10573,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10575,"src":"2772:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10572,"name":"bool","nodeType":"ElementaryTypeName","src":"2772:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2771:6:58"},"scope":10576,"src":"2691:87:58","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":10577,"src":"205:2575:58","usedErrors":[],"usedEvents":[10510,10519]}],"src":"106:2675:58"},"id":58},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","exportedSymbols":{"IERC20":[10576],"IERC20Metadata":[10602]},"id":10603,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10578,"literals":["solidity",">=","0.6",".2"],"nodeType":"PragmaDirective","src":"125:24:59"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":10580,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10603,"sourceUnit":10577,"src":"151:37:59","symbolAliases":[{"foreign":{"id":10579,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"159:6:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":10582,"name":"IERC20","nameLocations":["306:6:59"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"306:6:59"},"id":10583,"nodeType":"InheritanceSpecifier","src":"306:6:59"}],"canonicalName":"IERC20Metadata","contractDependencies":[],"contractKind":"interface","documentation":{"id":10581,"nodeType":"StructuredDocumentation","src":"190:87:59","text":" @dev Interface for the optional metadata functions from the ERC-20 standard."},"fullyImplemented":false,"id":10602,"linearizedBaseContracts":[10602,10576],"name":"IERC20Metadata","nameLocation":"288:14:59","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":10584,"nodeType":"StructuredDocumentation","src":"319:54:59","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":10589,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"387:4:59","nodeType":"FunctionDefinition","parameters":{"id":10585,"nodeType":"ParameterList","parameters":[],"src":"391:2:59"},"returnParameters":{"id":10588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10587,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10589,"src":"417:13:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10586,"name":"string","nodeType":"ElementaryTypeName","src":"417:6:59","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"416:15:59"},"scope":10602,"src":"378:54:59","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10590,"nodeType":"StructuredDocumentation","src":"438:56:59","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":10595,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"508:6:59","nodeType":"FunctionDefinition","parameters":{"id":10591,"nodeType":"ParameterList","parameters":[],"src":"514:2:59"},"returnParameters":{"id":10594,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10593,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10595,"src":"540:13:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10592,"name":"string","nodeType":"ElementaryTypeName","src":"540:6:59","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"539:15:59"},"scope":10602,"src":"499:56:59","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10596,"nodeType":"StructuredDocumentation","src":"561:65:59","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":10601,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"640:8:59","nodeType":"FunctionDefinition","parameters":{"id":10597,"nodeType":"ParameterList","parameters":[],"src":"648:2:59"},"returnParameters":{"id":10600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10599,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10601,"src":"674:5:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":10598,"name":"uint8","nodeType":"ElementaryTypeName","src":"674:5:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"673:7:59"},"scope":10602,"src":"631:50:59","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":10603,"src":"278:405:59","usedErrors":[],"usedEvents":[10510,10519]}],"src":"125:559:59"},"id":59},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","exportedSymbols":{"IERC1363":[9668],"IERC20":[10576],"SafeERC20":[11066]},"id":11067,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10604,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"115:24:60"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":10606,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11067,"sourceUnit":10577,"src":"141:37:60","symbolAliases":[{"foreign":{"id":10605,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"149:6:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1363.sol","file":"../../../interfaces/IERC1363.sol","id":10608,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11067,"sourceUnit":9669,"src":"179:58:60","symbolAliases":[{"foreign":{"id":10607,"name":"IERC1363","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9668,"src":"187:8:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":10609,"nodeType":"StructuredDocumentation","src":"239:458:60","text":" @title SafeERC20\n @dev Wrappers around ERC-20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."},"fullyImplemented":true,"id":11066,"linearizedBaseContracts":[11066],"name":"SafeERC20","nameLocation":"706:9:60","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":10610,"nodeType":"StructuredDocumentation","src":"722:65:60","text":" @dev An operation with an ERC-20 token failed."},"errorSelector":"5274afe7","id":10614,"name":"SafeERC20FailedOperation","nameLocation":"798:24:60","nodeType":"ErrorDefinition","parameters":{"id":10613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10612,"mutability":"mutable","name":"token","nameLocation":"831:5:60","nodeType":"VariableDeclaration","scope":10614,"src":"823:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10611,"name":"address","nodeType":"ElementaryTypeName","src":"823:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"822:15:60"},"src":"792:46:60"},{"documentation":{"id":10615,"nodeType":"StructuredDocumentation","src":"844:71:60","text":" @dev Indicates a failed `decreaseAllowance` request."},"errorSelector":"e570110f","id":10623,"name":"SafeERC20FailedDecreaseAllowance","nameLocation":"926:32:60","nodeType":"ErrorDefinition","parameters":{"id":10622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10617,"mutability":"mutable","name":"spender","nameLocation":"967:7:60","nodeType":"VariableDeclaration","scope":10623,"src":"959:15:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10616,"name":"address","nodeType":"ElementaryTypeName","src":"959:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10619,"mutability":"mutable","name":"currentAllowance","nameLocation":"984:16:60","nodeType":"VariableDeclaration","scope":10623,"src":"976:24:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10618,"name":"uint256","nodeType":"ElementaryTypeName","src":"976:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10621,"mutability":"mutable","name":"requestedDecrease","nameLocation":"1010:17:60","nodeType":"VariableDeclaration","scope":10623,"src":"1002:25:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10620,"name":"uint256","nodeType":"ElementaryTypeName","src":"1002:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"958:70:60"},"src":"920:109:60"},{"body":{"id":10646,"nodeType":"Block","src":"1291:88:60","statements":[{"expression":{"arguments":[{"id":10635,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10627,"src":"1321:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":10638,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10627,"src":"1343:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":10639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1349:8:60","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":10543,"src":"1343:14:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":10640,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10629,"src":"1360:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10641,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10631,"src":"1364:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10642,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1359:11:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":10636,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1328:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10637,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1332:10:60","memberName":"encodeCall","nodeType":"MemberAccess","src":"1328:14:60","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1328:43:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10634,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11024,"src":"1301:19:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":10644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1301:71:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10645,"nodeType":"ExpressionStatement","src":"1301:71:60"}]},"documentation":{"id":10624,"nodeType":"StructuredDocumentation","src":"1035:179:60","text":" @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":10647,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"1228:12:60","nodeType":"FunctionDefinition","parameters":{"id":10632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10627,"mutability":"mutable","name":"token","nameLocation":"1248:5:60","nodeType":"VariableDeclaration","scope":10647,"src":"1241:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":10626,"nodeType":"UserDefinedTypeName","pathNode":{"id":10625,"name":"IERC20","nameLocations":["1241:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1241:6:60"},"referencedDeclaration":10576,"src":"1241:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10629,"mutability":"mutable","name":"to","nameLocation":"1263:2:60","nodeType":"VariableDeclaration","scope":10647,"src":"1255:10:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10628,"name":"address","nodeType":"ElementaryTypeName","src":"1255:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10631,"mutability":"mutable","name":"value","nameLocation":"1275:5:60","nodeType":"VariableDeclaration","scope":10647,"src":"1267:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10630,"name":"uint256","nodeType":"ElementaryTypeName","src":"1267:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1240:41:60"},"returnParameters":{"id":10633,"nodeType":"ParameterList","parameters":[],"src":"1291:0:60"},"scope":11066,"src":"1219:160:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10673,"nodeType":"Block","src":"1708:98:60","statements":[{"expression":{"arguments":[{"id":10661,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10651,"src":"1738:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":10664,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10651,"src":"1760:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":10665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1766:12:60","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":10575,"src":"1760:18:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},{"components":[{"id":10666,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10653,"src":"1781:4:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10667,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10655,"src":"1787:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10668,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10657,"src":"1791:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10669,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1780:17:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}],"expression":{"id":10662,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1745:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10663,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1749:10:60","memberName":"encodeCall","nodeType":"MemberAccess","src":"1745:14:60","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1745:53:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10660,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11024,"src":"1718:19:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":10671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1718:81:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10672,"nodeType":"ExpressionStatement","src":"1718:81:60"}]},"documentation":{"id":10648,"nodeType":"StructuredDocumentation","src":"1385:228:60","text":" @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n calling contract. If `token` returns no value, non-reverting calls are assumed to be successful."},"id":10674,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"1627:16:60","nodeType":"FunctionDefinition","parameters":{"id":10658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10651,"mutability":"mutable","name":"token","nameLocation":"1651:5:60","nodeType":"VariableDeclaration","scope":10674,"src":"1644:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":10650,"nodeType":"UserDefinedTypeName","pathNode":{"id":10649,"name":"IERC20","nameLocations":["1644:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1644:6:60"},"referencedDeclaration":10576,"src":"1644:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10653,"mutability":"mutable","name":"from","nameLocation":"1666:4:60","nodeType":"VariableDeclaration","scope":10674,"src":"1658:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10652,"name":"address","nodeType":"ElementaryTypeName","src":"1658:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10655,"mutability":"mutable","name":"to","nameLocation":"1680:2:60","nodeType":"VariableDeclaration","scope":10674,"src":"1672:10:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10654,"name":"address","nodeType":"ElementaryTypeName","src":"1672:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10657,"mutability":"mutable","name":"value","nameLocation":"1692:5:60","nodeType":"VariableDeclaration","scope":10674,"src":"1684:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10656,"name":"uint256","nodeType":"ElementaryTypeName","src":"1684:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1643:55:60"},"returnParameters":{"id":10659,"nodeType":"ParameterList","parameters":[],"src":"1708:0:60"},"scope":11066,"src":"1618:188:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10699,"nodeType":"Block","src":"2033:99:60","statements":[{"expression":{"arguments":[{"id":10688,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10678,"src":"2074:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":10691,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10678,"src":"2096:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":10692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2102:8:60","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":10543,"src":"2096:14:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":10693,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10680,"src":"2113:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10694,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10682,"src":"2117:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10695,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2112:11:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":10689,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2081:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10690,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2085:10:60","memberName":"encodeCall","nodeType":"MemberAccess","src":"2081:14:60","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2081:43:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10687,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11065,"src":"2050:23:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":10697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2050:75:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":10686,"id":10698,"nodeType":"Return","src":"2043:82:60"}]},"documentation":{"id":10675,"nodeType":"StructuredDocumentation","src":"1812:126:60","text":" @dev Variant of {safeTransfer} that returns a bool instead of reverting if the operation is not successful."},"id":10700,"implemented":true,"kind":"function","modifiers":[],"name":"trySafeTransfer","nameLocation":"1952:15:60","nodeType":"FunctionDefinition","parameters":{"id":10683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10678,"mutability":"mutable","name":"token","nameLocation":"1975:5:60","nodeType":"VariableDeclaration","scope":10700,"src":"1968:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":10677,"nodeType":"UserDefinedTypeName","pathNode":{"id":10676,"name":"IERC20","nameLocations":["1968:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1968:6:60"},"referencedDeclaration":10576,"src":"1968:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10680,"mutability":"mutable","name":"to","nameLocation":"1990:2:60","nodeType":"VariableDeclaration","scope":10700,"src":"1982:10:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10679,"name":"address","nodeType":"ElementaryTypeName","src":"1982:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10682,"mutability":"mutable","name":"value","nameLocation":"2002:5:60","nodeType":"VariableDeclaration","scope":10700,"src":"1994:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10681,"name":"uint256","nodeType":"ElementaryTypeName","src":"1994:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1967:41:60"},"returnParameters":{"id":10686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10685,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10700,"src":"2027:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10684,"name":"bool","nodeType":"ElementaryTypeName","src":"2027:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2026:6:60"},"scope":11066,"src":"1943:189:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10728,"nodeType":"Block","src":"2381:109:60","statements":[{"expression":{"arguments":[{"id":10716,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10704,"src":"2422:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":10719,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10704,"src":"2444:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":10720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2450:12:60","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":10575,"src":"2444:18:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},{"components":[{"id":10721,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10706,"src":"2465:4:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10722,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10708,"src":"2471:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10723,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10710,"src":"2475:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10724,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2464:17:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}],"expression":{"id":10717,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2429:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10718,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2433:10:60","memberName":"encodeCall","nodeType":"MemberAccess","src":"2429:14:60","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2429:53:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10715,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11065,"src":"2398:23:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":10726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2398:85:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":10714,"id":10727,"nodeType":"Return","src":"2391:92:60"}]},"documentation":{"id":10701,"nodeType":"StructuredDocumentation","src":"2138:130:60","text":" @dev Variant of {safeTransferFrom} that returns a bool instead of reverting if the operation is not successful."},"id":10729,"implemented":true,"kind":"function","modifiers":[],"name":"trySafeTransferFrom","nameLocation":"2282:19:60","nodeType":"FunctionDefinition","parameters":{"id":10711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10704,"mutability":"mutable","name":"token","nameLocation":"2309:5:60","nodeType":"VariableDeclaration","scope":10729,"src":"2302:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":10703,"nodeType":"UserDefinedTypeName","pathNode":{"id":10702,"name":"IERC20","nameLocations":["2302:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2302:6:60"},"referencedDeclaration":10576,"src":"2302:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10706,"mutability":"mutable","name":"from","nameLocation":"2324:4:60","nodeType":"VariableDeclaration","scope":10729,"src":"2316:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10705,"name":"address","nodeType":"ElementaryTypeName","src":"2316:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10708,"mutability":"mutable","name":"to","nameLocation":"2338:2:60","nodeType":"VariableDeclaration","scope":10729,"src":"2330:10:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10707,"name":"address","nodeType":"ElementaryTypeName","src":"2330:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10710,"mutability":"mutable","name":"value","nameLocation":"2350:5:60","nodeType":"VariableDeclaration","scope":10729,"src":"2342:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10709,"name":"uint256","nodeType":"ElementaryTypeName","src":"2342:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2301:55:60"},"returnParameters":{"id":10714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10713,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10729,"src":"2375:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10712,"name":"bool","nodeType":"ElementaryTypeName","src":"2375:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2374:6:60"},"scope":11066,"src":"2273:217:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10759,"nodeType":"Block","src":"3232:139:60","statements":[{"assignments":[10741],"declarations":[{"constant":false,"id":10741,"mutability":"mutable","name":"oldAllowance","nameLocation":"3250:12:60","nodeType":"VariableDeclaration","scope":10759,"src":"3242:20:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10740,"name":"uint256","nodeType":"ElementaryTypeName","src":"3242:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10750,"initialValue":{"arguments":[{"arguments":[{"id":10746,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3289:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$11066","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$11066","typeString":"library SafeERC20"}],"id":10745,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3281:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10744,"name":"address","nodeType":"ElementaryTypeName","src":"3281:7:60","typeDescriptions":{}}},"id":10747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3281:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10748,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10735,"src":"3296:7:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10742,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10733,"src":"3265:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":10743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3271:9:60","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":10553,"src":"3265:15:60","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":10749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3265:39:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3242:62:60"},{"expression":{"arguments":[{"id":10752,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10733,"src":"3327:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":10753,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10735,"src":"3334:7:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10754,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10741,"src":"3343:12:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":10755,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10737,"src":"3358:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3343:20:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10751,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10850,"src":"3314:12:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":10757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3314:50:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10758,"nodeType":"ExpressionStatement","src":"3314:50:60"}]},"documentation":{"id":10730,"nodeType":"StructuredDocumentation","src":"2496:645:60","text":" @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful.\n IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior."},"id":10760,"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"3155:21:60","nodeType":"FunctionDefinition","parameters":{"id":10738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10733,"mutability":"mutable","name":"token","nameLocation":"3184:5:60","nodeType":"VariableDeclaration","scope":10760,"src":"3177:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":10732,"nodeType":"UserDefinedTypeName","pathNode":{"id":10731,"name":"IERC20","nameLocations":["3177:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3177:6:60"},"referencedDeclaration":10576,"src":"3177:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10735,"mutability":"mutable","name":"spender","nameLocation":"3199:7:60","nodeType":"VariableDeclaration","scope":10760,"src":"3191:15:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10734,"name":"address","nodeType":"ElementaryTypeName","src":"3191:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10737,"mutability":"mutable","name":"value","nameLocation":"3216:5:60","nodeType":"VariableDeclaration","scope":10760,"src":"3208:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10736,"name":"uint256","nodeType":"ElementaryTypeName","src":"3208:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3176:46:60"},"returnParameters":{"id":10739,"nodeType":"ParameterList","parameters":[],"src":"3232:0:60"},"scope":11066,"src":"3146:225:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10802,"nodeType":"Block","src":"4137:370:60","statements":[{"id":10801,"nodeType":"UncheckedBlock","src":"4147:354:60","statements":[{"assignments":[10772],"declarations":[{"constant":false,"id":10772,"mutability":"mutable","name":"currentAllowance","nameLocation":"4179:16:60","nodeType":"VariableDeclaration","scope":10801,"src":"4171:24:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10771,"name":"uint256","nodeType":"ElementaryTypeName","src":"4171:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10781,"initialValue":{"arguments":[{"arguments":[{"id":10777,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4222:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$11066","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$11066","typeString":"library SafeERC20"}],"id":10776,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4214:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10775,"name":"address","nodeType":"ElementaryTypeName","src":"4214:7:60","typeDescriptions":{}}},"id":10778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4214:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10779,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10766,"src":"4229:7:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10773,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10764,"src":"4198:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":10774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4204:9:60","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":10553,"src":"4198:15:60","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":10780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4198:39:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4171:66:60"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10782,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10772,"src":"4255:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":10783,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10768,"src":"4274:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4255:36:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10792,"nodeType":"IfStatement","src":"4251:160:60","trueBody":{"id":10791,"nodeType":"Block","src":"4293:118:60","statements":[{"errorCall":{"arguments":[{"id":10786,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10766,"src":"4351:7:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10787,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10772,"src":"4360:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10788,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10768,"src":"4378:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10785,"name":"SafeERC20FailedDecreaseAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10623,"src":"4318:32:60","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":10789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4318:78:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10790,"nodeType":"RevertStatement","src":"4311:85:60"}]}},{"expression":{"arguments":[{"id":10794,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10764,"src":"4437:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":10795,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10766,"src":"4444:7:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10796,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10772,"src":"4453:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":10797,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10768,"src":"4472:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4453:36:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10793,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10850,"src":"4424:12:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":10799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4424:66:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10800,"nodeType":"ExpressionStatement","src":"4424:66:60"}]}]},"documentation":{"id":10761,"nodeType":"StructuredDocumentation","src":"3377:657:60","text":" @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n value, non-reverting calls are assumed to be successful.\n IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior."},"id":10803,"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"4048:21:60","nodeType":"FunctionDefinition","parameters":{"id":10769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10764,"mutability":"mutable","name":"token","nameLocation":"4077:5:60","nodeType":"VariableDeclaration","scope":10803,"src":"4070:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":10763,"nodeType":"UserDefinedTypeName","pathNode":{"id":10762,"name":"IERC20","nameLocations":["4070:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4070:6:60"},"referencedDeclaration":10576,"src":"4070:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10766,"mutability":"mutable","name":"spender","nameLocation":"4092:7:60","nodeType":"VariableDeclaration","scope":10803,"src":"4084:15:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10765,"name":"address","nodeType":"ElementaryTypeName","src":"4084:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10768,"mutability":"mutable","name":"requestedDecrease","nameLocation":"4109:17:60","nodeType":"VariableDeclaration","scope":10803,"src":"4101:25:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10767,"name":"uint256","nodeType":"ElementaryTypeName","src":"4101:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4069:58:60"},"returnParameters":{"id":10770,"nodeType":"ParameterList","parameters":[],"src":"4137:0:60"},"scope":11066,"src":"4039:468:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10849,"nodeType":"Block","src":"5161:303:60","statements":[{"assignments":[10815],"declarations":[{"constant":false,"id":10815,"mutability":"mutable","name":"approvalCall","nameLocation":"5184:12:60","nodeType":"VariableDeclaration","scope":10849,"src":"5171:25:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10814,"name":"bytes","nodeType":"ElementaryTypeName","src":"5171:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":10824,"initialValue":{"arguments":[{"expression":{"id":10818,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10807,"src":"5214:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":10819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5220:7:60","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":10563,"src":"5214:13:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":10820,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10809,"src":"5230:7:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10821,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10811,"src":"5239:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10822,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5229:16:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":10816,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5199:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10817,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5203:10:60","memberName":"encodeCall","nodeType":"MemberAccess","src":"5199:14:60","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5199:47:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"5171:75:60"},{"condition":{"id":10829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5261:45:60","subExpression":{"arguments":[{"id":10826,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10807,"src":"5286:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":10827,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10815,"src":"5293:12:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10825,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11065,"src":"5262:23:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":10828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5262:44:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10848,"nodeType":"IfStatement","src":"5257:201:60","trueBody":{"id":10847,"nodeType":"Block","src":"5308:150:60","statements":[{"expression":{"arguments":[{"id":10831,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10807,"src":"5342:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":10834,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10807,"src":"5364:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":10835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5370:7:60","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":10563,"src":"5364:13:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":10836,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10809,"src":"5380:7:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":10837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5389:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":10838,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5379:12:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}],"expression":{"id":10832,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5349:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10833,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5353:10:60","memberName":"encodeCall","nodeType":"MemberAccess","src":"5349:14:60","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5349:43:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10830,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11024,"src":"5322:19:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":10840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5322:71:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10841,"nodeType":"ExpressionStatement","src":"5322:71:60"},{"expression":{"arguments":[{"id":10843,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10807,"src":"5427:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":10844,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10815,"src":"5434:12:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10842,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11024,"src":"5407:19:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":10845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5407:40:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10846,"nodeType":"ExpressionStatement","src":"5407:40:60"}]}}]},"documentation":{"id":10804,"nodeType":"StructuredDocumentation","src":"4513:566:60","text":" @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n to be set to zero before setting it to a non-zero value, such as USDT.\n NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n set here."},"id":10850,"implemented":true,"kind":"function","modifiers":[],"name":"forceApprove","nameLocation":"5093:12:60","nodeType":"FunctionDefinition","parameters":{"id":10812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10807,"mutability":"mutable","name":"token","nameLocation":"5113:5:60","nodeType":"VariableDeclaration","scope":10850,"src":"5106:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":10806,"nodeType":"UserDefinedTypeName","pathNode":{"id":10805,"name":"IERC20","nameLocations":["5106:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"5106:6:60"},"referencedDeclaration":10576,"src":"5106:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10809,"mutability":"mutable","name":"spender","nameLocation":"5128:7:60","nodeType":"VariableDeclaration","scope":10850,"src":"5120:15:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10808,"name":"address","nodeType":"ElementaryTypeName","src":"5120:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10811,"mutability":"mutable","name":"value","nameLocation":"5145:5:60","nodeType":"VariableDeclaration","scope":10850,"src":"5137:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10810,"name":"uint256","nodeType":"ElementaryTypeName","src":"5137:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5105:46:60"},"returnParameters":{"id":10813,"nodeType":"ParameterList","parameters":[],"src":"5161:0:60"},"scope":11066,"src":"5084:380:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10892,"nodeType":"Block","src":"5911:219:60","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":10863,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10856,"src":"5925:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5928:4:60","memberName":"code","nodeType":"MemberAccess","src":"5925:7:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5933:6:60","memberName":"length","nodeType":"MemberAccess","src":"5925:14:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10866,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5943:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5925:19:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"id":10881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6011:39:60","subExpression":{"arguments":[{"id":10877,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10856,"src":"6034:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10878,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10858,"src":"6038:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10879,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10860,"src":"6045:4:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":10875,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10854,"src":"6012:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}},"id":10876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6018:15:60","memberName":"transferAndCall","nodeType":"MemberAccess","referencedDeclaration":9619,"src":"6012:21:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory) external returns (bool)"}},"id":10880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6012:38:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10890,"nodeType":"IfStatement","src":"6007:117:60","trueBody":{"id":10889,"nodeType":"Block","src":"6052:72:60","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":10885,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10854,"src":"6106:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}],"id":10884,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6098:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10883,"name":"address","nodeType":"ElementaryTypeName","src":"6098:7:60","typeDescriptions":{}}},"id":10886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6098:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10882,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10614,"src":"6073:24:60","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6073:40:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10888,"nodeType":"RevertStatement","src":"6066:47:60"}]}},"id":10891,"nodeType":"IfStatement","src":"5921:203:60","trueBody":{"id":10874,"nodeType":"Block","src":"5946:55:60","statements":[{"expression":{"arguments":[{"id":10869,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10854,"src":"5973:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}},{"id":10870,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10856,"src":"5980:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10871,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10858,"src":"5984:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10868,"name":"safeTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10647,"src":"5960:12:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":10872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5960:30:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10873,"nodeType":"ExpressionStatement","src":"5960:30:60"}]}}]},"documentation":{"id":10851,"nodeType":"StructuredDocumentation","src":"5470:333:60","text":" @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n targeting contracts.\n Reverts if the returned value is other than `true`."},"id":10893,"implemented":true,"kind":"function","modifiers":[],"name":"transferAndCallRelaxed","nameLocation":"5817:22:60","nodeType":"FunctionDefinition","parameters":{"id":10861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10854,"mutability":"mutable","name":"token","nameLocation":"5849:5:60","nodeType":"VariableDeclaration","scope":10893,"src":"5840:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"},"typeName":{"id":10853,"nodeType":"UserDefinedTypeName","pathNode":{"id":10852,"name":"IERC1363","nameLocations":["5840:8:60"],"nodeType":"IdentifierPath","referencedDeclaration":9668,"src":"5840:8:60"},"referencedDeclaration":9668,"src":"5840:8:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}},"visibility":"internal"},{"constant":false,"id":10856,"mutability":"mutable","name":"to","nameLocation":"5864:2:60","nodeType":"VariableDeclaration","scope":10893,"src":"5856:10:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10855,"name":"address","nodeType":"ElementaryTypeName","src":"5856:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10858,"mutability":"mutable","name":"value","nameLocation":"5876:5:60","nodeType":"VariableDeclaration","scope":10893,"src":"5868:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10857,"name":"uint256","nodeType":"ElementaryTypeName","src":"5868:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10860,"mutability":"mutable","name":"data","nameLocation":"5896:4:60","nodeType":"VariableDeclaration","scope":10893,"src":"5883:17:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10859,"name":"bytes","nodeType":"ElementaryTypeName","src":"5883:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5839:62:60"},"returnParameters":{"id":10862,"nodeType":"ParameterList","parameters":[],"src":"5911:0:60"},"scope":11066,"src":"5808:322:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10939,"nodeType":"Block","src":"6649:239:60","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":10908,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10901,"src":"6663:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6666:4:60","memberName":"code","nodeType":"MemberAccess","src":"6663:7:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6671:6:60","memberName":"length","nodeType":"MemberAccess","src":"6663:14:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10911,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6681:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6663:19:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"id":10928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6759:49:60","subExpression":{"arguments":[{"id":10923,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10899,"src":"6786:4:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10924,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10901,"src":"6792:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10925,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10903,"src":"6796:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10926,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10905,"src":"6803:4:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":10921,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10897,"src":"6760:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}},"id":10922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6766:19:60","memberName":"transferFromAndCall","nodeType":"MemberAccess","referencedDeclaration":9645,"src":"6760:25:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,address,uint256,bytes memory) external returns (bool)"}},"id":10927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6760:48:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10937,"nodeType":"IfStatement","src":"6755:127:60","trueBody":{"id":10936,"nodeType":"Block","src":"6810:72:60","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":10932,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10897,"src":"6864:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}],"id":10931,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6856:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10930,"name":"address","nodeType":"ElementaryTypeName","src":"6856:7:60","typeDescriptions":{}}},"id":10933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6856:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10929,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10614,"src":"6831:24:60","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6831:40:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10935,"nodeType":"RevertStatement","src":"6824:47:60"}]}},"id":10938,"nodeType":"IfStatement","src":"6659:223:60","trueBody":{"id":10920,"nodeType":"Block","src":"6684:65:60","statements":[{"expression":{"arguments":[{"id":10914,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10897,"src":"6715:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}},{"id":10915,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10899,"src":"6722:4:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10916,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10901,"src":"6728:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10917,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10903,"src":"6732:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10913,"name":"safeTransferFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10674,"src":"6698:16:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":10918,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6698:40:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10919,"nodeType":"ExpressionStatement","src":"6698:40:60"}]}}]},"documentation":{"id":10894,"nodeType":"StructuredDocumentation","src":"6136:341:60","text":" @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n targeting contracts.\n Reverts if the returned value is other than `true`."},"id":10940,"implemented":true,"kind":"function","modifiers":[],"name":"transferFromAndCallRelaxed","nameLocation":"6491:26:60","nodeType":"FunctionDefinition","parameters":{"id":10906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10897,"mutability":"mutable","name":"token","nameLocation":"6536:5:60","nodeType":"VariableDeclaration","scope":10940,"src":"6527:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"},"typeName":{"id":10896,"nodeType":"UserDefinedTypeName","pathNode":{"id":10895,"name":"IERC1363","nameLocations":["6527:8:60"],"nodeType":"IdentifierPath","referencedDeclaration":9668,"src":"6527:8:60"},"referencedDeclaration":9668,"src":"6527:8:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}},"visibility":"internal"},{"constant":false,"id":10899,"mutability":"mutable","name":"from","nameLocation":"6559:4:60","nodeType":"VariableDeclaration","scope":10940,"src":"6551:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10898,"name":"address","nodeType":"ElementaryTypeName","src":"6551:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10901,"mutability":"mutable","name":"to","nameLocation":"6581:2:60","nodeType":"VariableDeclaration","scope":10940,"src":"6573:10:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10900,"name":"address","nodeType":"ElementaryTypeName","src":"6573:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10903,"mutability":"mutable","name":"value","nameLocation":"6601:5:60","nodeType":"VariableDeclaration","scope":10940,"src":"6593:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10902,"name":"uint256","nodeType":"ElementaryTypeName","src":"6593:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10905,"mutability":"mutable","name":"data","nameLocation":"6629:4:60","nodeType":"VariableDeclaration","scope":10940,"src":"6616:17:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10904,"name":"bytes","nodeType":"ElementaryTypeName","src":"6616:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6517:122:60"},"returnParameters":{"id":10907,"nodeType":"ParameterList","parameters":[],"src":"6649:0:60"},"scope":11066,"src":"6482:406:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10982,"nodeType":"Block","src":"7655:218:60","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":10953,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10946,"src":"7669:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7672:4:60","memberName":"code","nodeType":"MemberAccess","src":"7669:7:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7677:6:60","memberName":"length","nodeType":"MemberAccess","src":"7669:14:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10956,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7687:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7669:19:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"id":10971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7755:38:60","subExpression":{"arguments":[{"id":10967,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10946,"src":"7777:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10968,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10948,"src":"7781:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10969,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10950,"src":"7788:4:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":10965,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10944,"src":"7756:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}},"id":10966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7762:14:60","memberName":"approveAndCall","nodeType":"MemberAccess","referencedDeclaration":9667,"src":"7756:20:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory) external returns (bool)"}},"id":10970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7756:37:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10980,"nodeType":"IfStatement","src":"7751:116:60","trueBody":{"id":10979,"nodeType":"Block","src":"7795:72:60","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":10975,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10944,"src":"7849:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}],"id":10974,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7841:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10973,"name":"address","nodeType":"ElementaryTypeName","src":"7841:7:60","typeDescriptions":{}}},"id":10976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7841:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10972,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10614,"src":"7816:24:60","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7816:40:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10978,"nodeType":"RevertStatement","src":"7809:47:60"}]}},"id":10981,"nodeType":"IfStatement","src":"7665:202:60","trueBody":{"id":10964,"nodeType":"Block","src":"7690:55:60","statements":[{"expression":{"arguments":[{"id":10959,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10944,"src":"7717:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}},{"id":10960,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10946,"src":"7724:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10961,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10948,"src":"7728:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10958,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10850,"src":"7704:12:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":10962,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7704:30:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10963,"nodeType":"ExpressionStatement","src":"7704:30:60"}]}}]},"documentation":{"id":10941,"nodeType":"StructuredDocumentation","src":"6894:654:60","text":" @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n targeting contracts.\n NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n once without retrying, and relies on the returned value to be true.\n Reverts if the returned value is other than `true`."},"id":10983,"implemented":true,"kind":"function","modifiers":[],"name":"approveAndCallRelaxed","nameLocation":"7562:21:60","nodeType":"FunctionDefinition","parameters":{"id":10951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10944,"mutability":"mutable","name":"token","nameLocation":"7593:5:60","nodeType":"VariableDeclaration","scope":10983,"src":"7584:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"},"typeName":{"id":10943,"nodeType":"UserDefinedTypeName","pathNode":{"id":10942,"name":"IERC1363","nameLocations":["7584:8:60"],"nodeType":"IdentifierPath","referencedDeclaration":9668,"src":"7584:8:60"},"referencedDeclaration":9668,"src":"7584:8:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}},"visibility":"internal"},{"constant":false,"id":10946,"mutability":"mutable","name":"to","nameLocation":"7608:2:60","nodeType":"VariableDeclaration","scope":10983,"src":"7600:10:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10945,"name":"address","nodeType":"ElementaryTypeName","src":"7600:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10948,"mutability":"mutable","name":"value","nameLocation":"7620:5:60","nodeType":"VariableDeclaration","scope":10983,"src":"7612:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10947,"name":"uint256","nodeType":"ElementaryTypeName","src":"7612:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10950,"mutability":"mutable","name":"data","nameLocation":"7640:4:60","nodeType":"VariableDeclaration","scope":10983,"src":"7627:17:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10949,"name":"bytes","nodeType":"ElementaryTypeName","src":"7627:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7583:62:60"},"returnParameters":{"id":10952,"nodeType":"ParameterList","parameters":[],"src":"7655:0:60"},"scope":11066,"src":"7553:320:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11023,"nodeType":"Block","src":"8440:650:60","statements":[{"assignments":[10993],"declarations":[{"constant":false,"id":10993,"mutability":"mutable","name":"returnSize","nameLocation":"8458:10:60","nodeType":"VariableDeclaration","scope":11023,"src":"8450:18:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10992,"name":"uint256","nodeType":"ElementaryTypeName","src":"8450:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10994,"nodeType":"VariableDeclarationStatement","src":"8450:18:60"},{"assignments":[10996],"declarations":[{"constant":false,"id":10996,"mutability":"mutable","name":"returnValue","nameLocation":"8486:11:60","nodeType":"VariableDeclaration","scope":11023,"src":"8478:19:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10995,"name":"uint256","nodeType":"ElementaryTypeName","src":"8478:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10997,"nodeType":"VariableDeclarationStatement","src":"8478:19:60"},{"AST":{"nativeSrc":"8532:396:60","nodeType":"YulBlock","src":"8532:396:60","statements":[{"nativeSrc":"8546:75:60","nodeType":"YulVariableDeclaration","src":"8546:75:60","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"8566:3:60","nodeType":"YulIdentifier","src":"8566:3:60"},"nativeSrc":"8566:5:60","nodeType":"YulFunctionCall","src":"8566:5:60"},{"name":"token","nativeSrc":"8573:5:60","nodeType":"YulIdentifier","src":"8573:5:60"},{"kind":"number","nativeSrc":"8580:1:60","nodeType":"YulLiteral","src":"8580:1:60","type":"","value":"0"},{"arguments":[{"name":"data","nativeSrc":"8587:4:60","nodeType":"YulIdentifier","src":"8587:4:60"},{"kind":"number","nativeSrc":"8593:4:60","nodeType":"YulLiteral","src":"8593:4:60","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"8583:3:60","nodeType":"YulIdentifier","src":"8583:3:60"},"nativeSrc":"8583:15:60","nodeType":"YulFunctionCall","src":"8583:15:60"},{"arguments":[{"name":"data","nativeSrc":"8606:4:60","nodeType":"YulIdentifier","src":"8606:4:60"}],"functionName":{"name":"mload","nativeSrc":"8600:5:60","nodeType":"YulIdentifier","src":"8600:5:60"},"nativeSrc":"8600:11:60","nodeType":"YulFunctionCall","src":"8600:11:60"},{"kind":"number","nativeSrc":"8613:1:60","nodeType":"YulLiteral","src":"8613:1:60","type":"","value":"0"},{"kind":"number","nativeSrc":"8616:4:60","nodeType":"YulLiteral","src":"8616:4:60","type":"","value":"0x20"}],"functionName":{"name":"call","nativeSrc":"8561:4:60","nodeType":"YulIdentifier","src":"8561:4:60"},"nativeSrc":"8561:60:60","nodeType":"YulFunctionCall","src":"8561:60:60"},"variables":[{"name":"success","nativeSrc":"8550:7:60","nodeType":"YulTypedName","src":"8550:7:60","type":""}]},{"body":{"nativeSrc":"8682:157:60","nodeType":"YulBlock","src":"8682:157:60","statements":[{"nativeSrc":"8700:22:60","nodeType":"YulVariableDeclaration","src":"8700:22:60","value":{"arguments":[{"kind":"number","nativeSrc":"8717:4:60","nodeType":"YulLiteral","src":"8717:4:60","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"8711:5:60","nodeType":"YulIdentifier","src":"8711:5:60"},"nativeSrc":"8711:11:60","nodeType":"YulFunctionCall","src":"8711:11:60"},"variables":[{"name":"ptr","nativeSrc":"8704:3:60","nodeType":"YulTypedName","src":"8704:3:60","type":""}]},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"8754:3:60","nodeType":"YulIdentifier","src":"8754:3:60"},{"kind":"number","nativeSrc":"8759:1:60","nodeType":"YulLiteral","src":"8759:1:60","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"8762:14:60","nodeType":"YulIdentifier","src":"8762:14:60"},"nativeSrc":"8762:16:60","nodeType":"YulFunctionCall","src":"8762:16:60"}],"functionName":{"name":"returndatacopy","nativeSrc":"8739:14:60","nodeType":"YulIdentifier","src":"8739:14:60"},"nativeSrc":"8739:40:60","nodeType":"YulFunctionCall","src":"8739:40:60"},"nativeSrc":"8739:40:60","nodeType":"YulExpressionStatement","src":"8739:40:60"},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"8803:3:60","nodeType":"YulIdentifier","src":"8803:3:60"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"8808:14:60","nodeType":"YulIdentifier","src":"8808:14:60"},"nativeSrc":"8808:16:60","nodeType":"YulFunctionCall","src":"8808:16:60"}],"functionName":{"name":"revert","nativeSrc":"8796:6:60","nodeType":"YulIdentifier","src":"8796:6:60"},"nativeSrc":"8796:29:60","nodeType":"YulFunctionCall","src":"8796:29:60"},"nativeSrc":"8796:29:60","nodeType":"YulExpressionStatement","src":"8796:29:60"}]},"condition":{"arguments":[{"name":"success","nativeSrc":"8673:7:60","nodeType":"YulIdentifier","src":"8673:7:60"}],"functionName":{"name":"iszero","nativeSrc":"8666:6:60","nodeType":"YulIdentifier","src":"8666:6:60"},"nativeSrc":"8666:15:60","nodeType":"YulFunctionCall","src":"8666:15:60"},"nativeSrc":"8663:176:60","nodeType":"YulIf","src":"8663:176:60"},{"nativeSrc":"8852:30:60","nodeType":"YulAssignment","src":"8852:30:60","value":{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"8866:14:60","nodeType":"YulIdentifier","src":"8866:14:60"},"nativeSrc":"8866:16:60","nodeType":"YulFunctionCall","src":"8866:16:60"},"variableNames":[{"name":"returnSize","nativeSrc":"8852:10:60","nodeType":"YulIdentifier","src":"8852:10:60"}]},{"nativeSrc":"8895:23:60","nodeType":"YulAssignment","src":"8895:23:60","value":{"arguments":[{"kind":"number","nativeSrc":"8916:1:60","nodeType":"YulLiteral","src":"8916:1:60","type":"","value":"0"}],"functionName":{"name":"mload","nativeSrc":"8910:5:60","nodeType":"YulIdentifier","src":"8910:5:60"},"nativeSrc":"8910:8:60","nodeType":"YulFunctionCall","src":"8910:8:60"},"variableNames":[{"name":"returnValue","nativeSrc":"8895:11:60","nodeType":"YulIdentifier","src":"8895:11:60"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":10989,"isOffset":false,"isSlot":false,"src":"8587:4:60","valueSize":1},{"declaration":10989,"isOffset":false,"isSlot":false,"src":"8606:4:60","valueSize":1},{"declaration":10993,"isOffset":false,"isSlot":false,"src":"8852:10:60","valueSize":1},{"declaration":10996,"isOffset":false,"isSlot":false,"src":"8895:11:60","valueSize":1},{"declaration":10987,"isOffset":false,"isSlot":false,"src":"8573:5:60","valueSize":1}],"flags":["memory-safe"],"id":10998,"nodeType":"InlineAssembly","src":"8507:421:60"},{"condition":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10999,"name":"returnSize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10993,"src":"8942:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11000,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8956:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8942:15:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11010,"name":"returnValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10996,"src":"8994:11:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"31","id":11011,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9009:1:60","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8994:16:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8942:68:60","trueExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":11004,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10987,"src":"8968:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":11003,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8960:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11002,"name":"address","nodeType":"ElementaryTypeName","src":"8960:7:60","typeDescriptions":{}}},"id":11005,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8960:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8975:4:60","memberName":"code","nodeType":"MemberAccess","src":"8960:19:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8980:6:60","memberName":"length","nodeType":"MemberAccess","src":"8960:26:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11008,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8990:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8960:31:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11022,"nodeType":"IfStatement","src":"8938:146:60","trueBody":{"id":11021,"nodeType":"Block","src":"9012:72:60","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":11017,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10987,"src":"9066:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":11016,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9058:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11015,"name":"address","nodeType":"ElementaryTypeName","src":"9058:7:60","typeDescriptions":{}}},"id":11018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9058:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11014,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10614,"src":"9033:24:60","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":11019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9033:40:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11020,"nodeType":"RevertStatement","src":"9026:47:60"}]}}]},"documentation":{"id":10984,"nodeType":"StructuredDocumentation","src":"7879:486:60","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements."},"id":11024,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturn","nameLocation":"8379:19:60","nodeType":"FunctionDefinition","parameters":{"id":10990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10987,"mutability":"mutable","name":"token","nameLocation":"8406:5:60","nodeType":"VariableDeclaration","scope":11024,"src":"8399:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":10986,"nodeType":"UserDefinedTypeName","pathNode":{"id":10985,"name":"IERC20","nameLocations":["8399:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"8399:6:60"},"referencedDeclaration":10576,"src":"8399:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10989,"mutability":"mutable","name":"data","nameLocation":"8426:4:60","nodeType":"VariableDeclaration","scope":11024,"src":"8413:17:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10988,"name":"bytes","nodeType":"ElementaryTypeName","src":"8413:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8398:33:60"},"returnParameters":{"id":10991,"nodeType":"ParameterList","parameters":[],"src":"8440:0:60"},"scope":11066,"src":"8370:720:60","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":11064,"nodeType":"Block","src":"9681:391:60","statements":[{"assignments":[11036],"declarations":[{"constant":false,"id":11036,"mutability":"mutable","name":"success","nameLocation":"9696:7:60","nodeType":"VariableDeclaration","scope":11064,"src":"9691:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11035,"name":"bool","nodeType":"ElementaryTypeName","src":"9691:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":11037,"nodeType":"VariableDeclarationStatement","src":"9691:12:60"},{"assignments":[11039],"declarations":[{"constant":false,"id":11039,"mutability":"mutable","name":"returnSize","nameLocation":"9721:10:60","nodeType":"VariableDeclaration","scope":11064,"src":"9713:18:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11038,"name":"uint256","nodeType":"ElementaryTypeName","src":"9713:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11040,"nodeType":"VariableDeclarationStatement","src":"9713:18:60"},{"assignments":[11042],"declarations":[{"constant":false,"id":11042,"mutability":"mutable","name":"returnValue","nameLocation":"9749:11:60","nodeType":"VariableDeclaration","scope":11064,"src":"9741:19:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11041,"name":"uint256","nodeType":"ElementaryTypeName","src":"9741:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11043,"nodeType":"VariableDeclarationStatement","src":"9741:19:60"},{"AST":{"nativeSrc":"9795:174:60","nodeType":"YulBlock","src":"9795:174:60","statements":[{"nativeSrc":"9809:71:60","nodeType":"YulAssignment","src":"9809:71:60","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"9825:3:60","nodeType":"YulIdentifier","src":"9825:3:60"},"nativeSrc":"9825:5:60","nodeType":"YulFunctionCall","src":"9825:5:60"},{"name":"token","nativeSrc":"9832:5:60","nodeType":"YulIdentifier","src":"9832:5:60"},{"kind":"number","nativeSrc":"9839:1:60","nodeType":"YulLiteral","src":"9839:1:60","type":"","value":"0"},{"arguments":[{"name":"data","nativeSrc":"9846:4:60","nodeType":"YulIdentifier","src":"9846:4:60"},{"kind":"number","nativeSrc":"9852:4:60","nodeType":"YulLiteral","src":"9852:4:60","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"9842:3:60","nodeType":"YulIdentifier","src":"9842:3:60"},"nativeSrc":"9842:15:60","nodeType":"YulFunctionCall","src":"9842:15:60"},{"arguments":[{"name":"data","nativeSrc":"9865:4:60","nodeType":"YulIdentifier","src":"9865:4:60"}],"functionName":{"name":"mload","nativeSrc":"9859:5:60","nodeType":"YulIdentifier","src":"9859:5:60"},"nativeSrc":"9859:11:60","nodeType":"YulFunctionCall","src":"9859:11:60"},{"kind":"number","nativeSrc":"9872:1:60","nodeType":"YulLiteral","src":"9872:1:60","type":"","value":"0"},{"kind":"number","nativeSrc":"9875:4:60","nodeType":"YulLiteral","src":"9875:4:60","type":"","value":"0x20"}],"functionName":{"name":"call","nativeSrc":"9820:4:60","nodeType":"YulIdentifier","src":"9820:4:60"},"nativeSrc":"9820:60:60","nodeType":"YulFunctionCall","src":"9820:60:60"},"variableNames":[{"name":"success","nativeSrc":"9809:7:60","nodeType":"YulIdentifier","src":"9809:7:60"}]},{"nativeSrc":"9893:30:60","nodeType":"YulAssignment","src":"9893:30:60","value":{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"9907:14:60","nodeType":"YulIdentifier","src":"9907:14:60"},"nativeSrc":"9907:16:60","nodeType":"YulFunctionCall","src":"9907:16:60"},"variableNames":[{"name":"returnSize","nativeSrc":"9893:10:60","nodeType":"YulIdentifier","src":"9893:10:60"}]},{"nativeSrc":"9936:23:60","nodeType":"YulAssignment","src":"9936:23:60","value":{"arguments":[{"kind":"number","nativeSrc":"9957:1:60","nodeType":"YulLiteral","src":"9957:1:60","type":"","value":"0"}],"functionName":{"name":"mload","nativeSrc":"9951:5:60","nodeType":"YulIdentifier","src":"9951:5:60"},"nativeSrc":"9951:8:60","nodeType":"YulFunctionCall","src":"9951:8:60"},"variableNames":[{"name":"returnValue","nativeSrc":"9936:11:60","nodeType":"YulIdentifier","src":"9936:11:60"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11030,"isOffset":false,"isSlot":false,"src":"9846:4:60","valueSize":1},{"declaration":11030,"isOffset":false,"isSlot":false,"src":"9865:4:60","valueSize":1},{"declaration":11039,"isOffset":false,"isSlot":false,"src":"9893:10:60","valueSize":1},{"declaration":11042,"isOffset":false,"isSlot":false,"src":"9936:11:60","valueSize":1},{"declaration":11036,"isOffset":false,"isSlot":false,"src":"9809:7:60","valueSize":1},{"declaration":11028,"isOffset":false,"isSlot":false,"src":"9832:5:60","valueSize":1}],"flags":["memory-safe"],"id":11044,"nodeType":"InlineAssembly","src":"9770:199:60"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11045,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11036,"src":"9985:7:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11046,"name":"returnSize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11039,"src":"9997:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10011:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9997:15:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11057,"name":"returnValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11042,"src":"10048:11:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":11058,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10063:1:60","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10048:16:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9997:67:60","trueExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":11051,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11028,"src":"10023:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":11050,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10015:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11049,"name":"address","nodeType":"ElementaryTypeName","src":"10015:7:60","typeDescriptions":{}}},"id":11052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10015:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10030:4:60","memberName":"code","nodeType":"MemberAccess","src":"10015:19:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10035:6:60","memberName":"length","nodeType":"MemberAccess","src":"10015:26:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11055,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10044:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10015:30:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":11061,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9996:69:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9985:80:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":11034,"id":11063,"nodeType":"Return","src":"9978:87:60"}]},"documentation":{"id":11025,"nodeType":"StructuredDocumentation","src":"9096:491:60","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead."},"id":11065,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturnBool","nameLocation":"9601:23:60","nodeType":"FunctionDefinition","parameters":{"id":11031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11028,"mutability":"mutable","name":"token","nameLocation":"9632:5:60","nodeType":"VariableDeclaration","scope":11065,"src":"9625:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":11027,"nodeType":"UserDefinedTypeName","pathNode":{"id":11026,"name":"IERC20","nameLocations":["9625:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"9625:6:60"},"referencedDeclaration":10576,"src":"9625:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":11030,"mutability":"mutable","name":"data","nameLocation":"9652:4:60","nodeType":"VariableDeclaration","scope":11065,"src":"9639:17:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11029,"name":"bytes","nodeType":"ElementaryTypeName","src":"9639:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9624:33:60"},"returnParameters":{"id":11034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11033,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11065,"src":"9675:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11032,"name":"bool","nodeType":"ElementaryTypeName","src":"9675:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9674:6:60"},"scope":11066,"src":"9592:480:60","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":11067,"src":"698:9376:60","usedErrors":[10614,10623],"usedEvents":[]}],"src":"115:9960:60"},"id":60},"@openzeppelin/contracts/utils/Address.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","exportedSymbols":{"Address":[11326],"Errors":[12388]},"id":11327,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":11068,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:61"},{"absolutePath":"@openzeppelin/contracts/utils/Errors.sol","file":"./Errors.sol","id":11070,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11327,"sourceUnit":12389,"src":"127:36:61","symbolAliases":[{"foreign":{"id":11069,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12388,"src":"135:6:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":11071,"nodeType":"StructuredDocumentation","src":"165:67:61","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":11326,"linearizedBaseContracts":[11326],"name":"Address","nameLocation":"241:7:61","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":11072,"nodeType":"StructuredDocumentation","src":"255:75:61","text":" @dev There's no code at `target` (it is not a contract)."},"errorSelector":"9996b315","id":11076,"name":"AddressEmptyCode","nameLocation":"341:16:61","nodeType":"ErrorDefinition","parameters":{"id":11075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11074,"mutability":"mutable","name":"target","nameLocation":"366:6:61","nodeType":"VariableDeclaration","scope":11076,"src":"358:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11073,"name":"address","nodeType":"ElementaryTypeName","src":"358:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"357:16:61"},"src":"335:39:61"},{"body":{"id":11123,"nodeType":"Block","src":"1361:294:61","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11086,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1383:4:61","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$11326","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$11326","typeString":"library Address"}],"id":11085,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1375:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11084,"name":"address","nodeType":"ElementaryTypeName","src":"1375:7:61","typeDescriptions":{}}},"id":11087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1375:13:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1389:7:61","memberName":"balance","nodeType":"MemberAccess","src":"1375:21:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11089,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11081,"src":"1399:6:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1375:30:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11103,"nodeType":"IfStatement","src":"1371:125:61","trueBody":{"id":11102,"nodeType":"Block","src":"1407:89:61","statements":[{"errorCall":{"arguments":[{"expression":{"arguments":[{"id":11096,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1463:4:61","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$11326","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$11326","typeString":"library Address"}],"id":11095,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1455:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11094,"name":"address","nodeType":"ElementaryTypeName","src":"1455:7:61","typeDescriptions":{}}},"id":11097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1455:13:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1469:7:61","memberName":"balance","nodeType":"MemberAccess","src":"1455:21:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11099,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11081,"src":"1478:6:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11091,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12388,"src":"1428:6:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12388_$","typeString":"type(library Errors)"}},"id":11093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1435:19:61","memberName":"InsufficientBalance","nodeType":"MemberAccess","referencedDeclaration":12376,"src":"1428:26:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":11100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1428:57:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11101,"nodeType":"RevertStatement","src":"1421:64:61"}]}},{"assignments":[11105,11107],"declarations":[{"constant":false,"id":11105,"mutability":"mutable","name":"success","nameLocation":"1512:7:61","nodeType":"VariableDeclaration","scope":11123,"src":"1507:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11104,"name":"bool","nodeType":"ElementaryTypeName","src":"1507:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11107,"mutability":"mutable","name":"returndata","nameLocation":"1534:10:61","nodeType":"VariableDeclaration","scope":11123,"src":"1521:23:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11106,"name":"bytes","nodeType":"ElementaryTypeName","src":"1521:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":11114,"initialValue":{"arguments":[{"hexValue":"","id":11112,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1578:2:61","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":11108,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11079,"src":"1548:9:61","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":11109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1558:4:61","memberName":"call","nodeType":"MemberAccess","src":"1548:14:61","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":11111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":11110,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11081,"src":"1570:6:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"1548:29:61","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":11113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1548:33:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1506:75:61"},{"condition":{"id":11116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1595:8:61","subExpression":{"id":11115,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11105,"src":"1596:7:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11122,"nodeType":"IfStatement","src":"1591:58:61","trueBody":{"id":11121,"nodeType":"Block","src":"1605:44:61","statements":[{"expression":{"arguments":[{"id":11118,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11107,"src":"1627:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11117,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11325,"src":"1619:7:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":11119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1619:19:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11120,"nodeType":"ExpressionStatement","src":"1619:19:61"}]}}]},"documentation":{"id":11077,"nodeType":"StructuredDocumentation","src":"380:905:61","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":11124,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"1299:9:61","nodeType":"FunctionDefinition","parameters":{"id":11082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11079,"mutability":"mutable","name":"recipient","nameLocation":"1325:9:61","nodeType":"VariableDeclaration","scope":11124,"src":"1309:25:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":11078,"name":"address","nodeType":"ElementaryTypeName","src":"1309:15:61","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":11081,"mutability":"mutable","name":"amount","nameLocation":"1344:6:61","nodeType":"VariableDeclaration","scope":11124,"src":"1336:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11080,"name":"uint256","nodeType":"ElementaryTypeName","src":"1336:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1308:43:61"},"returnParameters":{"id":11083,"nodeType":"ParameterList","parameters":[],"src":"1361:0:61"},"scope":11326,"src":"1290:365:61","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11140,"nodeType":"Block","src":"2589:62:61","statements":[{"expression":{"arguments":[{"id":11135,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11127,"src":"2628:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11136,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11129,"src":"2636:4:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":11137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2642:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":11134,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11191,"src":"2606:21:61","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256) returns (bytes memory)"}},"id":11138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2606:38:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11133,"id":11139,"nodeType":"Return","src":"2599:45:61"}]},"documentation":{"id":11125,"nodeType":"StructuredDocumentation","src":"1661:834:61","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason or custom error, it is bubbled\n up by this function (like regular Solidity function calls). However, if\n the call reverted with no returned reason, this function reverts with a\n {Errors.FailedCall} error.\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert."},"id":11141,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"2509:12:61","nodeType":"FunctionDefinition","parameters":{"id":11130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11127,"mutability":"mutable","name":"target","nameLocation":"2530:6:61","nodeType":"VariableDeclaration","scope":11141,"src":"2522:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11126,"name":"address","nodeType":"ElementaryTypeName","src":"2522:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11129,"mutability":"mutable","name":"data","nameLocation":"2551:4:61","nodeType":"VariableDeclaration","scope":11141,"src":"2538:17:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11128,"name":"bytes","nodeType":"ElementaryTypeName","src":"2538:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2521:35:61"},"returnParameters":{"id":11133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11132,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11141,"src":"2575:12:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11131,"name":"bytes","nodeType":"ElementaryTypeName","src":"2575:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2574:14:61"},"scope":11326,"src":"2500:151:61","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11190,"nodeType":"Block","src":"3088:294:61","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11155,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3110:4:61","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$11326","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$11326","typeString":"library Address"}],"id":11154,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3102:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11153,"name":"address","nodeType":"ElementaryTypeName","src":"3102:7:61","typeDescriptions":{}}},"id":11156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3102:13:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3116:7:61","memberName":"balance","nodeType":"MemberAccess","src":"3102:21:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11158,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11148,"src":"3126:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3102:29:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11172,"nodeType":"IfStatement","src":"3098:123:61","trueBody":{"id":11171,"nodeType":"Block","src":"3133:88:61","statements":[{"errorCall":{"arguments":[{"expression":{"arguments":[{"id":11165,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3189:4:61","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$11326","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$11326","typeString":"library Address"}],"id":11164,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3181:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11163,"name":"address","nodeType":"ElementaryTypeName","src":"3181:7:61","typeDescriptions":{}}},"id":11166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3181:13:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3195:7:61","memberName":"balance","nodeType":"MemberAccess","src":"3181:21:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11168,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11148,"src":"3204:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11160,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12388,"src":"3154:6:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12388_$","typeString":"type(library Errors)"}},"id":11162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3161:19:61","memberName":"InsufficientBalance","nodeType":"MemberAccess","referencedDeclaration":12376,"src":"3154:26:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":11169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3154:56:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11170,"nodeType":"RevertStatement","src":"3147:63:61"}]}},{"assignments":[11174,11176],"declarations":[{"constant":false,"id":11174,"mutability":"mutable","name":"success","nameLocation":"3236:7:61","nodeType":"VariableDeclaration","scope":11190,"src":"3231:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11173,"name":"bool","nodeType":"ElementaryTypeName","src":"3231:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11176,"mutability":"mutable","name":"returndata","nameLocation":"3258:10:61","nodeType":"VariableDeclaration","scope":11190,"src":"3245:23:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11175,"name":"bytes","nodeType":"ElementaryTypeName","src":"3245:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":11183,"initialValue":{"arguments":[{"id":11181,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11146,"src":"3298:4:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":11177,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11144,"src":"3272:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3279:4:61","memberName":"call","nodeType":"MemberAccess","src":"3272:11:61","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":11180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":11179,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11148,"src":"3291:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"3272:25:61","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":11182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3272:31:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3230:73:61"},{"expression":{"arguments":[{"id":11185,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11144,"src":"3347:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11186,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11174,"src":"3355:7:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":11187,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11176,"src":"3364:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11184,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11283,"src":"3320:26:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":11188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3320:55:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11152,"id":11189,"nodeType":"Return","src":"3313:62:61"}]},"documentation":{"id":11142,"nodeType":"StructuredDocumentation","src":"2657:313:61","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`."},"id":11191,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"2984:21:61","nodeType":"FunctionDefinition","parameters":{"id":11149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11144,"mutability":"mutable","name":"target","nameLocation":"3014:6:61","nodeType":"VariableDeclaration","scope":11191,"src":"3006:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11143,"name":"address","nodeType":"ElementaryTypeName","src":"3006:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11146,"mutability":"mutable","name":"data","nameLocation":"3035:4:61","nodeType":"VariableDeclaration","scope":11191,"src":"3022:17:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11145,"name":"bytes","nodeType":"ElementaryTypeName","src":"3022:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":11148,"mutability":"mutable","name":"value","nameLocation":"3049:5:61","nodeType":"VariableDeclaration","scope":11191,"src":"3041:13:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11147,"name":"uint256","nodeType":"ElementaryTypeName","src":"3041:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3005:50:61"},"returnParameters":{"id":11152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11151,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11191,"src":"3074:12:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11150,"name":"bytes","nodeType":"ElementaryTypeName","src":"3074:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3073:14:61"},"scope":11326,"src":"2975:407:61","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11216,"nodeType":"Block","src":"3621:154:61","statements":[{"assignments":[11202,11204],"declarations":[{"constant":false,"id":11202,"mutability":"mutable","name":"success","nameLocation":"3637:7:61","nodeType":"VariableDeclaration","scope":11216,"src":"3632:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11201,"name":"bool","nodeType":"ElementaryTypeName","src":"3632:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11204,"mutability":"mutable","name":"returndata","nameLocation":"3659:10:61","nodeType":"VariableDeclaration","scope":11216,"src":"3646:23:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11203,"name":"bytes","nodeType":"ElementaryTypeName","src":"3646:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":11209,"initialValue":{"arguments":[{"id":11207,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11196,"src":"3691:4:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":11205,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11194,"src":"3673:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3680:10:61","memberName":"staticcall","nodeType":"MemberAccess","src":"3673:17:61","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":11208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3673:23:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3631:65:61"},{"expression":{"arguments":[{"id":11211,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11194,"src":"3740:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11212,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11202,"src":"3748:7:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":11213,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11204,"src":"3757:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11210,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11283,"src":"3713:26:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":11214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3713:55:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11200,"id":11215,"nodeType":"Return","src":"3706:62:61"}]},"documentation":{"id":11192,"nodeType":"StructuredDocumentation","src":"3388:128:61","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call."},"id":11217,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"3530:18:61","nodeType":"FunctionDefinition","parameters":{"id":11197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11194,"mutability":"mutable","name":"target","nameLocation":"3557:6:61","nodeType":"VariableDeclaration","scope":11217,"src":"3549:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11193,"name":"address","nodeType":"ElementaryTypeName","src":"3549:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11196,"mutability":"mutable","name":"data","nameLocation":"3578:4:61","nodeType":"VariableDeclaration","scope":11217,"src":"3565:17:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11195,"name":"bytes","nodeType":"ElementaryTypeName","src":"3565:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3548:35:61"},"returnParameters":{"id":11200,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11199,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11217,"src":"3607:12:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11198,"name":"bytes","nodeType":"ElementaryTypeName","src":"3607:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3606:14:61"},"scope":11326,"src":"3521:254:61","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11242,"nodeType":"Block","src":"4013:156:61","statements":[{"assignments":[11228,11230],"declarations":[{"constant":false,"id":11228,"mutability":"mutable","name":"success","nameLocation":"4029:7:61","nodeType":"VariableDeclaration","scope":11242,"src":"4024:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11227,"name":"bool","nodeType":"ElementaryTypeName","src":"4024:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11230,"mutability":"mutable","name":"returndata","nameLocation":"4051:10:61","nodeType":"VariableDeclaration","scope":11242,"src":"4038:23:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11229,"name":"bytes","nodeType":"ElementaryTypeName","src":"4038:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":11235,"initialValue":{"arguments":[{"id":11233,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11222,"src":"4085:4:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":11231,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11220,"src":"4065:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4072:12:61","memberName":"delegatecall","nodeType":"MemberAccess","src":"4065:19:61","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":11234,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4065:25:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4023:67:61"},{"expression":{"arguments":[{"id":11237,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11220,"src":"4134:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11238,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11228,"src":"4142:7:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":11239,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11230,"src":"4151:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11236,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11283,"src":"4107:26:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":11240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4107:55:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11226,"id":11241,"nodeType":"Return","src":"4100:62:61"}]},"documentation":{"id":11218,"nodeType":"StructuredDocumentation","src":"3781:130:61","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call."},"id":11243,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"3925:20:61","nodeType":"FunctionDefinition","parameters":{"id":11223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11220,"mutability":"mutable","name":"target","nameLocation":"3954:6:61","nodeType":"VariableDeclaration","scope":11243,"src":"3946:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11219,"name":"address","nodeType":"ElementaryTypeName","src":"3946:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11222,"mutability":"mutable","name":"data","nameLocation":"3975:4:61","nodeType":"VariableDeclaration","scope":11243,"src":"3962:17:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11221,"name":"bytes","nodeType":"ElementaryTypeName","src":"3962:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3945:35:61"},"returnParameters":{"id":11226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11225,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11243,"src":"3999:12:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11224,"name":"bytes","nodeType":"ElementaryTypeName","src":"3999:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3998:14:61"},"scope":11326,"src":"3916:253:61","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11282,"nodeType":"Block","src":"4595:424:61","statements":[{"condition":{"id":11256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4609:8:61","subExpression":{"id":11255,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11248,"src":"4610:7:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11280,"nodeType":"Block","src":"4669:344:61","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11262,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11250,"src":"4857:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4868:6:61","memberName":"length","nodeType":"MemberAccess","src":"4857:17:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4878:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4857:22:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":11266,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11246,"src":"4883:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4890:4:61","memberName":"code","nodeType":"MemberAccess","src":"4883:11:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4895:6:61","memberName":"length","nodeType":"MemberAccess","src":"4883:18:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11269,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4905:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4883:23:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4857:49:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11277,"nodeType":"IfStatement","src":"4853:119:61","trueBody":{"id":11276,"nodeType":"Block","src":"4908:64:61","statements":[{"errorCall":{"arguments":[{"id":11273,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11246,"src":"4950:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11272,"name":"AddressEmptyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11076,"src":"4933:16:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":11274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4933:24:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11275,"nodeType":"RevertStatement","src":"4926:31:61"}]}},{"expression":{"id":11278,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11250,"src":"4992:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11254,"id":11279,"nodeType":"Return","src":"4985:17:61"}]},"id":11281,"nodeType":"IfStatement","src":"4605:408:61","trueBody":{"id":11261,"nodeType":"Block","src":"4619:44:61","statements":[{"expression":{"arguments":[{"id":11258,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11250,"src":"4641:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11257,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11325,"src":"4633:7:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":11259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4633:19:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11260,"nodeType":"ExpressionStatement","src":"4633:19:61"}]}}]},"documentation":{"id":11244,"nodeType":"StructuredDocumentation","src":"4175:257:61","text":" @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n of an unsuccessful call."},"id":11283,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"4446:26:61","nodeType":"FunctionDefinition","parameters":{"id":11251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11246,"mutability":"mutable","name":"target","nameLocation":"4490:6:61","nodeType":"VariableDeclaration","scope":11283,"src":"4482:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11245,"name":"address","nodeType":"ElementaryTypeName","src":"4482:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11248,"mutability":"mutable","name":"success","nameLocation":"4511:7:61","nodeType":"VariableDeclaration","scope":11283,"src":"4506:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11247,"name":"bool","nodeType":"ElementaryTypeName","src":"4506:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11250,"mutability":"mutable","name":"returndata","nameLocation":"4541:10:61","nodeType":"VariableDeclaration","scope":11283,"src":"4528:23:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11249,"name":"bytes","nodeType":"ElementaryTypeName","src":"4528:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4472:85:61"},"returnParameters":{"id":11254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11253,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11283,"src":"4581:12:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11252,"name":"bytes","nodeType":"ElementaryTypeName","src":"4581:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4580:14:61"},"scope":11326,"src":"4437:582:61","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11304,"nodeType":"Block","src":"5323:122:61","statements":[{"condition":{"id":11294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5337:8:61","subExpression":{"id":11293,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11286,"src":"5338:7:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11302,"nodeType":"Block","src":"5397:42:61","statements":[{"expression":{"id":11300,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11288,"src":"5418:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11292,"id":11301,"nodeType":"Return","src":"5411:17:61"}]},"id":11303,"nodeType":"IfStatement","src":"5333:106:61","trueBody":{"id":11299,"nodeType":"Block","src":"5347:44:61","statements":[{"expression":{"arguments":[{"id":11296,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11288,"src":"5369:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11295,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11325,"src":"5361:7:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":11297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5361:19:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11298,"nodeType":"ExpressionStatement","src":"5361:19:61"}]}}]},"documentation":{"id":11284,"nodeType":"StructuredDocumentation","src":"5025:191:61","text":" @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n revert reason or with a default {Errors.FailedCall} error."},"id":11305,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"5230:16:61","nodeType":"FunctionDefinition","parameters":{"id":11289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11286,"mutability":"mutable","name":"success","nameLocation":"5252:7:61","nodeType":"VariableDeclaration","scope":11305,"src":"5247:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11285,"name":"bool","nodeType":"ElementaryTypeName","src":"5247:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11288,"mutability":"mutable","name":"returndata","nameLocation":"5274:10:61","nodeType":"VariableDeclaration","scope":11305,"src":"5261:23:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11287,"name":"bytes","nodeType":"ElementaryTypeName","src":"5261:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5246:39:61"},"returnParameters":{"id":11292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11291,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11305,"src":"5309:12:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11290,"name":"bytes","nodeType":"ElementaryTypeName","src":"5309:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5308:14:61"},"scope":11326,"src":"5221:224:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11324,"nodeType":"Block","src":"5614:379:61","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11311,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11308,"src":"5690:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5701:6:61","memberName":"length","nodeType":"MemberAccess","src":"5690:17:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11313,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5710:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5690:21:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11322,"nodeType":"Block","src":"5936:51:61","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":11317,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12388,"src":"5957:6:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12388_$","typeString":"type(library Errors)"}},"id":11319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5964:10:61","memberName":"FailedCall","nodeType":"MemberAccess","referencedDeclaration":12379,"src":"5957:17:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":11320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5957:19:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11321,"nodeType":"RevertStatement","src":"5950:26:61"}]},"id":11323,"nodeType":"IfStatement","src":"5686:301:61","trueBody":{"id":11316,"nodeType":"Block","src":"5713:217:61","statements":[{"AST":{"nativeSrc":"5840:80:61","nodeType":"YulBlock","src":"5840:80:61","statements":[{"expression":{"arguments":[{"arguments":[{"name":"returndata","nativeSrc":"5869:10:61","nodeType":"YulIdentifier","src":"5869:10:61"},{"kind":"number","nativeSrc":"5881:4:61","nodeType":"YulLiteral","src":"5881:4:61","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5865:3:61","nodeType":"YulIdentifier","src":"5865:3:61"},"nativeSrc":"5865:21:61","nodeType":"YulFunctionCall","src":"5865:21:61"},{"arguments":[{"name":"returndata","nativeSrc":"5894:10:61","nodeType":"YulIdentifier","src":"5894:10:61"}],"functionName":{"name":"mload","nativeSrc":"5888:5:61","nodeType":"YulIdentifier","src":"5888:5:61"},"nativeSrc":"5888:17:61","nodeType":"YulFunctionCall","src":"5888:17:61"}],"functionName":{"name":"revert","nativeSrc":"5858:6:61","nodeType":"YulIdentifier","src":"5858:6:61"},"nativeSrc":"5858:48:61","nodeType":"YulFunctionCall","src":"5858:48:61"},"nativeSrc":"5858:48:61","nodeType":"YulExpressionStatement","src":"5858:48:61"}]},"evmVersion":"cancun","externalReferences":[{"declaration":11308,"isOffset":false,"isSlot":false,"src":"5869:10:61","valueSize":1},{"declaration":11308,"isOffset":false,"isSlot":false,"src":"5894:10:61","valueSize":1}],"flags":["memory-safe"],"id":11315,"nodeType":"InlineAssembly","src":"5815:105:61"}]}}]},"documentation":{"id":11306,"nodeType":"StructuredDocumentation","src":"5451:103:61","text":" @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}."},"id":11325,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"5568:7:61","nodeType":"FunctionDefinition","parameters":{"id":11309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11308,"mutability":"mutable","name":"returndata","nameLocation":"5589:10:61","nodeType":"VariableDeclaration","scope":11325,"src":"5576:23:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11307,"name":"bytes","nodeType":"ElementaryTypeName","src":"5576:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5575:25:61"},"returnParameters":{"id":11310,"nodeType":"ParameterList","parameters":[],"src":"5614:0:61"},"scope":11326,"src":"5559:434:61","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":11327,"src":"233:5762:61","usedErrors":[11076],"usedEvents":[]}],"src":"101:5895:61"},"id":61},"@openzeppelin/contracts/utils/Arrays.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Arrays.sol","exportedSymbols":{"Arrays":[12304],"Comparators":[12336],"Math":[14327],"SlotDerivation":[12570],"StorageSlot":[12694]},"id":12305,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":11328,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"183:24:62"},{"absolutePath":"@openzeppelin/contracts/utils/Comparators.sol","file":"./Comparators.sol","id":11330,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12305,"sourceUnit":12337,"src":"209:46:62","symbolAliases":[{"foreign":{"id":11329,"name":"Comparators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12336,"src":"217:11:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/SlotDerivation.sol","file":"./SlotDerivation.sol","id":11332,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12305,"sourceUnit":12571,"src":"256:52:62","symbolAliases":[{"foreign":{"id":11331,"name":"SlotDerivation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12570,"src":"264:14:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","file":"./StorageSlot.sol","id":11334,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12305,"sourceUnit":12695,"src":"309:46:62","symbolAliases":[{"foreign":{"id":11333,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12694,"src":"317:11:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","file":"./math/Math.sol","id":11336,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12305,"sourceUnit":14328,"src":"356:37:62","symbolAliases":[{"foreign":{"id":11335,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"364:4:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Arrays","contractDependencies":[],"contractKind":"library","documentation":{"id":11337,"nodeType":"StructuredDocumentation","src":"395:63:62","text":" @dev Collection of functions related to array types."},"fullyImplemented":true,"id":12304,"linearizedBaseContracts":[12304],"name":"Arrays","nameLocation":"467:6:62","nodeType":"ContractDefinition","nodes":[{"global":false,"id":11340,"libraryName":{"id":11338,"name":"SlotDerivation","nameLocations":["486:14:62"],"nodeType":"IdentifierPath","referencedDeclaration":12570,"src":"486:14:62"},"nodeType":"UsingForDirective","src":"480:33:62","typeName":{"id":11339,"name":"bytes32","nodeType":"ElementaryTypeName","src":"505:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":11343,"libraryName":{"id":11341,"name":"StorageSlot","nameLocations":["524:11:62"],"nodeType":"IdentifierPath","referencedDeclaration":12694,"src":"524:11:62"},"nodeType":"UsingForDirective","src":"518:30:62","typeName":{"id":11342,"name":"bytes32","nodeType":"ElementaryTypeName","src":"540:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":11375,"nodeType":"Block","src":"1628:83:62","statements":[{"expression":{"arguments":[{"arguments":[{"id":11365,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11347,"src":"1656:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":11364,"name":"_begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11600,"src":"1649:6:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory) pure returns (uint256)"}},"id":11366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1649:13:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":11368,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11347,"src":"1669:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":11367,"name":"_end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11620,"src":"1664:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory) pure returns (uint256)"}},"id":11369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1664:11:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11370,"name":"comp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11357,"src":"1677:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11363,"name":"_quickSort","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11589,"src":"1638:10:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$__$","typeString":"function (uint256,uint256,function (uint256,uint256) pure returns (bool)) pure"}},"id":11371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1638:44:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11372,"nodeType":"ExpressionStatement","src":"1638:44:62"},{"expression":{"id":11373,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11347,"src":"1699:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":11362,"id":11374,"nodeType":"Return","src":"1692:12:62"}]},"documentation":{"id":11344,"nodeType":"StructuredDocumentation","src":"554:915:62","text":" @dev Sort an array of uint256 (in memory) following the provided comparator function.\n This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n consume more gas than is available in a block, leading to potential DoS.\n IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way."},"id":11376,"implemented":true,"kind":"function","modifiers":[],"name":"sort","nameLocation":"1483:4:62","nodeType":"FunctionDefinition","parameters":{"id":11358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11347,"mutability":"mutable","name":"array","nameLocation":"1514:5:62","nodeType":"VariableDeclaration","scope":11376,"src":"1497:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11345,"name":"uint256","nodeType":"ElementaryTypeName","src":"1497:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11346,"nodeType":"ArrayTypeName","src":"1497:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11357,"mutability":"mutable","name":"comp","nameLocation":"1576:4:62","nodeType":"VariableDeclaration","scope":11376,"src":"1529:51:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"typeName":{"id":11356,"nodeType":"FunctionTypeName","parameterTypes":{"id":11352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11349,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11356,"src":"1538:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11348,"name":"uint256","nodeType":"ElementaryTypeName","src":"1538:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11351,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11356,"src":"1547:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11350,"name":"uint256","nodeType":"ElementaryTypeName","src":"1547:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1537:18:62"},"returnParameterTypes":{"id":11355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11354,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11356,"src":"1570:4:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11353,"name":"bool","nodeType":"ElementaryTypeName","src":"1570:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1569:6:62"},"src":"1529:51:62","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"1487:99:62"},"returnParameters":{"id":11362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11361,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11376,"src":"1610:16:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11359,"name":"uint256","nodeType":"ElementaryTypeName","src":"1610:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11360,"nodeType":"ArrayTypeName","src":"1610:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1609:18:62"},"scope":12304,"src":"1474:237:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11394,"nodeType":"Block","src":"1894:66:62","statements":[{"expression":{"arguments":[{"id":11387,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11380,"src":"1909:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":11388,"name":"Comparators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12336,"src":"1916:11:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Comparators_$12336_$","typeString":"type(library Comparators)"}},"id":11389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1928:2:62","memberName":"lt","nodeType":"MemberAccess","referencedDeclaration":12321,"src":"1916:14:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11386,"name":"sort","nodeType":"Identifier","overloadedDeclarations":[11376,11395,11427,11448,11480,11501],"referencedDeclaration":11376,"src":"1904:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"}},"id":11390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1904:27:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11391,"nodeType":"ExpressionStatement","src":"1904:27:62"},{"expression":{"id":11392,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11380,"src":"1948:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":11385,"id":11393,"nodeType":"Return","src":"1941:12:62"}]},"documentation":{"id":11377,"nodeType":"StructuredDocumentation","src":"1717:93:62","text":" @dev Variant of {sort} that sorts an array of uint256 in increasing order."},"id":11395,"implemented":true,"kind":"function","modifiers":[],"name":"sort","nameLocation":"1824:4:62","nodeType":"FunctionDefinition","parameters":{"id":11381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11380,"mutability":"mutable","name":"array","nameLocation":"1846:5:62","nodeType":"VariableDeclaration","scope":11395,"src":"1829:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11378,"name":"uint256","nodeType":"ElementaryTypeName","src":"1829:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11379,"nodeType":"ArrayTypeName","src":"1829:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1828:24:62"},"returnParameters":{"id":11385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11384,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11395,"src":"1876:16:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11382,"name":"uint256","nodeType":"ElementaryTypeName","src":"1876:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11383,"nodeType":"ArrayTypeName","src":"1876:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1875:18:62"},"scope":12304,"src":"1815:145:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11426,"nodeType":"Block","src":"3040:97:62","statements":[{"expression":{"arguments":[{"arguments":[{"id":11417,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11399,"src":"3075:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":11416,"name":"_castToUint256Array","nodeType":"Identifier","overloadedDeclarations":[11652,11664],"referencedDeclaration":11652,"src":"3055:19:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address[] memory) pure returns (uint256[] memory)"}},"id":11418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3055:26:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"arguments":[{"id":11420,"name":"comp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11409,"src":"3102:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) pure returns (bool)"}],"id":11419,"name":"_castToUint256Comp","nodeType":"Identifier","overloadedDeclarations":[11690,11716],"referencedDeclaration":11690,"src":"3083:18:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$_$returns$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$","typeString":"function (function (address,address) pure returns (bool)) pure returns (function (uint256,uint256) pure returns (bool))"}},"id":11421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3083:24:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11415,"name":"sort","nodeType":"Identifier","overloadedDeclarations":[11376,11395,11427,11448,11480,11501],"referencedDeclaration":11376,"src":"3050:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"}},"id":11422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3050:58:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11423,"nodeType":"ExpressionStatement","src":"3050:58:62"},{"expression":{"id":11424,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11399,"src":"3125:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":11414,"id":11425,"nodeType":"Return","src":"3118:12:62"}]},"documentation":{"id":11396,"nodeType":"StructuredDocumentation","src":"1966:915:62","text":" @dev Sort an array of address (in memory) following the provided comparator function.\n This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n consume more gas than is available in a block, leading to potential DoS.\n IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way."},"id":11427,"implemented":true,"kind":"function","modifiers":[],"name":"sort","nameLocation":"2895:4:62","nodeType":"FunctionDefinition","parameters":{"id":11410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11399,"mutability":"mutable","name":"array","nameLocation":"2926:5:62","nodeType":"VariableDeclaration","scope":11427,"src":"2909:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":11397,"name":"address","nodeType":"ElementaryTypeName","src":"2909:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11398,"nodeType":"ArrayTypeName","src":"2909:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":11409,"mutability":"mutable","name":"comp","nameLocation":"2988:4:62","nodeType":"VariableDeclaration","scope":11427,"src":"2941:51:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) pure returns (bool)"},"typeName":{"id":11408,"nodeType":"FunctionTypeName","parameterTypes":{"id":11404,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11401,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11408,"src":"2950:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11400,"name":"address","nodeType":"ElementaryTypeName","src":"2950:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11403,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11408,"src":"2959:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11402,"name":"address","nodeType":"ElementaryTypeName","src":"2959:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2949:18:62"},"returnParameterTypes":{"id":11407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11406,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11408,"src":"2982:4:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11405,"name":"bool","nodeType":"ElementaryTypeName","src":"2982:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2981:6:62"},"src":"2941:51:62","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"2899:99:62"},"returnParameters":{"id":11414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11413,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11427,"src":"3022:16:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":11411,"name":"address","nodeType":"ElementaryTypeName","src":"3022:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11412,"nodeType":"ArrayTypeName","src":"3022:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3021:18:62"},"scope":12304,"src":"2886:251:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11447,"nodeType":"Block","src":"3320:87:62","statements":[{"expression":{"arguments":[{"arguments":[{"id":11439,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11431,"src":"3355:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":11438,"name":"_castToUint256Array","nodeType":"Identifier","overloadedDeclarations":[11652,11664],"referencedDeclaration":11652,"src":"3335:19:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address[] memory) pure returns (uint256[] memory)"}},"id":11440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3335:26:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":11441,"name":"Comparators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12336,"src":"3363:11:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Comparators_$12336_$","typeString":"type(library Comparators)"}},"id":11442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3375:2:62","memberName":"lt","nodeType":"MemberAccess","referencedDeclaration":12321,"src":"3363:14:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11437,"name":"sort","nodeType":"Identifier","overloadedDeclarations":[11376,11395,11427,11448,11480,11501],"referencedDeclaration":11376,"src":"3330:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"}},"id":11443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3330:48:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11444,"nodeType":"ExpressionStatement","src":"3330:48:62"},{"expression":{"id":11445,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11431,"src":"3395:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":11436,"id":11446,"nodeType":"Return","src":"3388:12:62"}]},"documentation":{"id":11428,"nodeType":"StructuredDocumentation","src":"3143:93:62","text":" @dev Variant of {sort} that sorts an array of address in increasing order."},"id":11448,"implemented":true,"kind":"function","modifiers":[],"name":"sort","nameLocation":"3250:4:62","nodeType":"FunctionDefinition","parameters":{"id":11432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11431,"mutability":"mutable","name":"array","nameLocation":"3272:5:62","nodeType":"VariableDeclaration","scope":11448,"src":"3255:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":11429,"name":"address","nodeType":"ElementaryTypeName","src":"3255:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11430,"nodeType":"ArrayTypeName","src":"3255:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3254:24:62"},"returnParameters":{"id":11436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11435,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11448,"src":"3302:16:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":11433,"name":"address","nodeType":"ElementaryTypeName","src":"3302:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11434,"nodeType":"ArrayTypeName","src":"3302:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3301:18:62"},"scope":12304,"src":"3241:166:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11479,"nodeType":"Block","src":"4487:97:62","statements":[{"expression":{"arguments":[{"arguments":[{"id":11470,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11452,"src":"4522:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}],"id":11469,"name":"_castToUint256Array","nodeType":"Identifier","overloadedDeclarations":[11652,11664],"referencedDeclaration":11664,"src":"4502:19:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (bytes32[] memory) pure returns (uint256[] memory)"}},"id":11471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4502:26:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"arguments":[{"id":11473,"name":"comp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11462,"src":"4549:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32,bytes32) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32,bytes32) pure returns (bool)"}],"id":11472,"name":"_castToUint256Comp","nodeType":"Identifier","overloadedDeclarations":[11690,11716],"referencedDeclaration":11716,"src":"4530:18:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$_$returns$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$","typeString":"function (function (bytes32,bytes32) pure returns (bool)) pure returns (function (uint256,uint256) pure returns (bool))"}},"id":11474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4530:24:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11468,"name":"sort","nodeType":"Identifier","overloadedDeclarations":[11376,11395,11427,11448,11480,11501],"referencedDeclaration":11376,"src":"4497:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"}},"id":11475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4497:58:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11476,"nodeType":"ExpressionStatement","src":"4497:58:62"},{"expression":{"id":11477,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11452,"src":"4572:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":11467,"id":11478,"nodeType":"Return","src":"4565:12:62"}]},"documentation":{"id":11449,"nodeType":"StructuredDocumentation","src":"3413:915:62","text":" @dev Sort an array of bytes32 (in memory) following the provided comparator function.\n This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n consume more gas than is available in a block, leading to potential DoS.\n IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way."},"id":11480,"implemented":true,"kind":"function","modifiers":[],"name":"sort","nameLocation":"4342:4:62","nodeType":"FunctionDefinition","parameters":{"id":11463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11452,"mutability":"mutable","name":"array","nameLocation":"4373:5:62","nodeType":"VariableDeclaration","scope":11480,"src":"4356:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":11450,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4356:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":11451,"nodeType":"ArrayTypeName","src":"4356:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":11462,"mutability":"mutable","name":"comp","nameLocation":"4435:4:62","nodeType":"VariableDeclaration","scope":11480,"src":"4388:51:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32,bytes32) pure returns (bool)"},"typeName":{"id":11461,"nodeType":"FunctionTypeName","parameterTypes":{"id":11457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11454,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11461,"src":"4397:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11453,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4397:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":11456,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11461,"src":"4406:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11455,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4406:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4396:18:62"},"returnParameterTypes":{"id":11460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11459,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11461,"src":"4429:4:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11458,"name":"bool","nodeType":"ElementaryTypeName","src":"4429:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4428:6:62"},"src":"4388:51:62","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32,bytes32) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"4346:99:62"},"returnParameters":{"id":11467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11466,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11480,"src":"4469:16:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":11464,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4469:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":11465,"nodeType":"ArrayTypeName","src":"4469:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"4468:18:62"},"scope":12304,"src":"4333:251:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11500,"nodeType":"Block","src":"4767:87:62","statements":[{"expression":{"arguments":[{"arguments":[{"id":11492,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"4802:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}],"id":11491,"name":"_castToUint256Array","nodeType":"Identifier","overloadedDeclarations":[11652,11664],"referencedDeclaration":11664,"src":"4782:19:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (bytes32[] memory) pure returns (uint256[] memory)"}},"id":11493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4782:26:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":11494,"name":"Comparators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12336,"src":"4810:11:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Comparators_$12336_$","typeString":"type(library Comparators)"}},"id":11495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4822:2:62","memberName":"lt","nodeType":"MemberAccess","referencedDeclaration":12321,"src":"4810:14:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11490,"name":"sort","nodeType":"Identifier","overloadedDeclarations":[11376,11395,11427,11448,11480,11501],"referencedDeclaration":11376,"src":"4777:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"}},"id":11496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4777:48:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11497,"nodeType":"ExpressionStatement","src":"4777:48:62"},{"expression":{"id":11498,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"4842:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":11489,"id":11499,"nodeType":"Return","src":"4835:12:62"}]},"documentation":{"id":11481,"nodeType":"StructuredDocumentation","src":"4590:93:62","text":" @dev Variant of {sort} that sorts an array of bytes32 in increasing order."},"id":11501,"implemented":true,"kind":"function","modifiers":[],"name":"sort","nameLocation":"4697:4:62","nodeType":"FunctionDefinition","parameters":{"id":11485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11484,"mutability":"mutable","name":"array","nameLocation":"4719:5:62","nodeType":"VariableDeclaration","scope":11501,"src":"4702:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":11482,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4702:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":11483,"nodeType":"ArrayTypeName","src":"4702:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"4701:24:62"},"returnParameters":{"id":11489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11488,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11501,"src":"4749:16:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":11486,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4749:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":11487,"nodeType":"ArrayTypeName","src":"4749:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"4748:18:62"},"scope":12304,"src":"4688:166:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11588,"nodeType":"Block","src":"5470:889:62","statements":[{"id":11587,"nodeType":"UncheckedBlock","src":"5480:873:62","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11519,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11506,"src":"5508:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":11520,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"5514:5:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5508:11:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30783430","id":11522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5522:4:62","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"0x40"},"src":"5508:18:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11525,"nodeType":"IfStatement","src":"5504:31:62","trueBody":{"functionReturnParameters":11518,"id":11524,"nodeType":"Return","src":"5528:7:62"}},{"assignments":[11527],"declarations":[{"constant":false,"id":11527,"mutability":"mutable","name":"pivot","nameLocation":"5599:5:62","nodeType":"VariableDeclaration","scope":11587,"src":"5591:13:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11526,"name":"uint256","nodeType":"ElementaryTypeName","src":"5591:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11531,"initialValue":{"arguments":[{"id":11529,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"5614:5:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11528,"name":"_mload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11630,"src":"5607:6:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":11530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5607:13:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5591:29:62"},{"assignments":[11533],"declarations":[{"constant":false,"id":11533,"mutability":"mutable","name":"pos","nameLocation":"5715:3:62","nodeType":"VariableDeclaration","scope":11587,"src":"5707:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11532,"name":"uint256","nodeType":"ElementaryTypeName","src":"5707:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11535,"initialValue":{"id":11534,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"5721:5:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5707:19:62"},{"body":{"id":11566,"nodeType":"Block","src":"5795:331:62","statements":[{"condition":{"arguments":[{"arguments":[{"id":11551,"name":"it","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11537,"src":"5829:2:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11550,"name":"_mload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11630,"src":"5822:6:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":11552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5822:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11553,"name":"pivot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11527,"src":"5834:5:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11549,"name":"comp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11516,"src":"5817:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":11554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5817:23:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11565,"nodeType":"IfStatement","src":"5813:299:62","trueBody":{"id":11564,"nodeType":"Block","src":"5842:270:62","statements":[{"expression":{"id":11557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11555,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11533,"src":"6046:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"30783230","id":11556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6053:4:62","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"6046:11:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11558,"nodeType":"ExpressionStatement","src":"6046:11:62"},{"expression":{"arguments":[{"id":11560,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11533,"src":"6085:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11561,"name":"it","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11537,"src":"6090:2:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11559,"name":"_swap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11640,"src":"6079:5:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":11562,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6079:14:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11563,"nodeType":"ExpressionStatement","src":"6079:14:62"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11542,"name":"it","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11537,"src":"5773:2:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11543,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11506,"src":"5778:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5773:8:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11567,"initializationExpression":{"assignments":[11537],"declarations":[{"constant":false,"id":11537,"mutability":"mutable","name":"it","nameLocation":"5754:2:62","nodeType":"VariableDeclaration","scope":11567,"src":"5746:10:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11536,"name":"uint256","nodeType":"ElementaryTypeName","src":"5746:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11541,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11538,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"5759:5:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783230","id":11539,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5767:4:62","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"5759:12:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5746:25:62"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":11547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11545,"name":"it","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11537,"src":"5783:2:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"30783230","id":11546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5789:4:62","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"5783:10:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11548,"nodeType":"ExpressionStatement","src":"5783:10:62"},"nodeType":"ForStatement","src":"5741:385:62"},{"expression":{"arguments":[{"id":11569,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"6146:5:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11570,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11533,"src":"6153:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11568,"name":"_swap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11640,"src":"6140:5:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":11571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6140:17:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11572,"nodeType":"ExpressionStatement","src":"6140:17:62"},{"expression":{"arguments":[{"id":11574,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"6207:5:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11575,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11533,"src":"6214:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11576,"name":"comp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11516,"src":"6219:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11573,"name":"_quickSort","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11589,"src":"6196:10:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$__$","typeString":"function (uint256,uint256,function (uint256,uint256) pure returns (bool)) pure"}},"id":11577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6196:28:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11578,"nodeType":"ExpressionStatement","src":"6196:28:62"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11580,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11533,"src":"6284:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783230","id":11581,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6290:4:62","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"6284:10:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11583,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11506,"src":"6296:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11584,"name":"comp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11516,"src":"6301:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11579,"name":"_quickSort","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11589,"src":"6273:10:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$__$","typeString":"function (uint256,uint256,function (uint256,uint256) pure returns (bool)) pure"}},"id":11585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6273:33:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11586,"nodeType":"ExpressionStatement","src":"6273:33:62"}]}]},"documentation":{"id":11502,"nodeType":"StructuredDocumentation","src":"4860:491:62","text":" @dev Performs a quick sort of a segment of memory. The segment sorted starts at `begin` (inclusive), and stops\n at end (exclusive). Sorting follows the `comp` comparator.\n Invariant: `begin <= end`. This is the case when initially called by {sort} and is preserved in subcalls.\n IMPORTANT: Memory locations between `begin` and `end` are not validated/zeroed. This function should\n be used only if the limits are within a memory array."},"id":11589,"implemented":true,"kind":"function","modifiers":[],"name":"_quickSort","nameLocation":"5365:10:62","nodeType":"FunctionDefinition","parameters":{"id":11517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11504,"mutability":"mutable","name":"begin","nameLocation":"5384:5:62","nodeType":"VariableDeclaration","scope":11589,"src":"5376:13:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11503,"name":"uint256","nodeType":"ElementaryTypeName","src":"5376:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11506,"mutability":"mutable","name":"end","nameLocation":"5399:3:62","nodeType":"VariableDeclaration","scope":11589,"src":"5391:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11505,"name":"uint256","nodeType":"ElementaryTypeName","src":"5391:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11516,"mutability":"mutable","name":"comp","nameLocation":"5451:4:62","nodeType":"VariableDeclaration","scope":11589,"src":"5404:51:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"typeName":{"id":11515,"nodeType":"FunctionTypeName","parameterTypes":{"id":11511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11508,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11515,"src":"5413:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11507,"name":"uint256","nodeType":"ElementaryTypeName","src":"5413:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11510,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11515,"src":"5422:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11509,"name":"uint256","nodeType":"ElementaryTypeName","src":"5422:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5412:18:62"},"returnParameterTypes":{"id":11514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11513,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11515,"src":"5445:4:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11512,"name":"bool","nodeType":"ElementaryTypeName","src":"5445:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5444:6:62"},"src":"5404:51:62","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"5375:81:62"},"returnParameters":{"id":11518,"nodeType":"ParameterList","parameters":[],"src":"5470:0:62"},"scope":12304,"src":"5356:1003:62","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11599,"nodeType":"Block","src":"6532:88:62","statements":[{"AST":{"nativeSrc":"6567:47:62","nodeType":"YulBlock","src":"6567:47:62","statements":[{"nativeSrc":"6581:23:62","nodeType":"YulAssignment","src":"6581:23:62","value":{"arguments":[{"name":"array","nativeSrc":"6592:5:62","nodeType":"YulIdentifier","src":"6592:5:62"},{"kind":"number","nativeSrc":"6599:4:62","nodeType":"YulLiteral","src":"6599:4:62","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"6588:3:62","nodeType":"YulIdentifier","src":"6588:3:62"},"nativeSrc":"6588:16:62","nodeType":"YulFunctionCall","src":"6588:16:62"},"variableNames":[{"name":"ptr","nativeSrc":"6581:3:62","nodeType":"YulIdentifier","src":"6581:3:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11593,"isOffset":false,"isSlot":false,"src":"6592:5:62","valueSize":1},{"declaration":11596,"isOffset":false,"isSlot":false,"src":"6581:3:62","valueSize":1}],"flags":["memory-safe"],"id":11598,"nodeType":"InlineAssembly","src":"6542:72:62"}]},"documentation":{"id":11590,"nodeType":"StructuredDocumentation","src":"6365:87:62","text":" @dev Pointer to the memory location of the first element of `array`."},"id":11600,"implemented":true,"kind":"function","modifiers":[],"name":"_begin","nameLocation":"6466:6:62","nodeType":"FunctionDefinition","parameters":{"id":11594,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11593,"mutability":"mutable","name":"array","nameLocation":"6490:5:62","nodeType":"VariableDeclaration","scope":11600,"src":"6473:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11591,"name":"uint256","nodeType":"ElementaryTypeName","src":"6473:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11592,"nodeType":"ArrayTypeName","src":"6473:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"6472:24:62"},"returnParameters":{"id":11597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11596,"mutability":"mutable","name":"ptr","nameLocation":"6527:3:62","nodeType":"VariableDeclaration","scope":11600,"src":"6519:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11595,"name":"uint256","nodeType":"ElementaryTypeName","src":"6519:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6518:13:62"},"scope":12304,"src":"6457:163:62","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11619,"nodeType":"Block","src":"6892:93:62","statements":[{"id":11618,"nodeType":"UncheckedBlock","src":"6902:77:62","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":11610,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11604,"src":"6940:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":11609,"name":"_begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11600,"src":"6933:6:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory) pure returns (uint256)"}},"id":11611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6933:13:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11612,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11604,"src":"6949:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6955:6:62","memberName":"length","nodeType":"MemberAccess","src":"6949:12:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"30783230","id":11614,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6964:4:62","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"6949:19:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6933:35:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11608,"id":11617,"nodeType":"Return","src":"6926:42:62"}]}]},"documentation":{"id":11601,"nodeType":"StructuredDocumentation","src":"6626:188:62","text":" @dev Pointer to the memory location of the first memory word (32bytes) after `array`. This is the memory word\n that comes just after the last element of the array."},"id":11620,"implemented":true,"kind":"function","modifiers":[],"name":"_end","nameLocation":"6828:4:62","nodeType":"FunctionDefinition","parameters":{"id":11605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11604,"mutability":"mutable","name":"array","nameLocation":"6850:5:62","nodeType":"VariableDeclaration","scope":11620,"src":"6833:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11602,"name":"uint256","nodeType":"ElementaryTypeName","src":"6833:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11603,"nodeType":"ArrayTypeName","src":"6833:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"6832:24:62"},"returnParameters":{"id":11608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11607,"mutability":"mutable","name":"ptr","nameLocation":"6887:3:62","nodeType":"VariableDeclaration","scope":11620,"src":"6879:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11606,"name":"uint256","nodeType":"ElementaryTypeName","src":"6879:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6878:13:62"},"scope":12304,"src":"6819:166:62","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11629,"nodeType":"Block","src":"7136:68:62","statements":[{"AST":{"nativeSrc":"7155:43:62","nodeType":"YulBlock","src":"7155:43:62","statements":[{"nativeSrc":"7169:19:62","nodeType":"YulAssignment","src":"7169:19:62","value":{"arguments":[{"name":"ptr","nativeSrc":"7184:3:62","nodeType":"YulIdentifier","src":"7184:3:62"}],"functionName":{"name":"mload","nativeSrc":"7178:5:62","nodeType":"YulIdentifier","src":"7178:5:62"},"nativeSrc":"7178:10:62","nodeType":"YulFunctionCall","src":"7178:10:62"},"variableNames":[{"name":"value","nativeSrc":"7169:5:62","nodeType":"YulIdentifier","src":"7169:5:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11623,"isOffset":false,"isSlot":false,"src":"7184:3:62","valueSize":1},{"declaration":11626,"isOffset":false,"isSlot":false,"src":"7169:5:62","valueSize":1}],"id":11628,"nodeType":"InlineAssembly","src":"7146:52:62"}]},"documentation":{"id":11621,"nodeType":"StructuredDocumentation","src":"6991:74:62","text":" @dev Load memory word (as a uint256) at location `ptr`."},"id":11630,"implemented":true,"kind":"function","modifiers":[],"name":"_mload","nameLocation":"7079:6:62","nodeType":"FunctionDefinition","parameters":{"id":11624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11623,"mutability":"mutable","name":"ptr","nameLocation":"7094:3:62","nodeType":"VariableDeclaration","scope":11630,"src":"7086:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11622,"name":"uint256","nodeType":"ElementaryTypeName","src":"7086:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7085:13:62"},"returnParameters":{"id":11627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11626,"mutability":"mutable","name":"value","nameLocation":"7129:5:62","nodeType":"VariableDeclaration","scope":11630,"src":"7121:13:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11625,"name":"uint256","nodeType":"ElementaryTypeName","src":"7121:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7120:15:62"},"scope":12304,"src":"7070:134:62","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11639,"nodeType":"Block","src":"7348:178:62","statements":[{"AST":{"nativeSrc":"7367:153:62","nodeType":"YulBlock","src":"7367:153:62","statements":[{"nativeSrc":"7381:25:62","nodeType":"YulVariableDeclaration","src":"7381:25:62","value":{"arguments":[{"name":"ptr1","nativeSrc":"7401:4:62","nodeType":"YulIdentifier","src":"7401:4:62"}],"functionName":{"name":"mload","nativeSrc":"7395:5:62","nodeType":"YulIdentifier","src":"7395:5:62"},"nativeSrc":"7395:11:62","nodeType":"YulFunctionCall","src":"7395:11:62"},"variables":[{"name":"value1","nativeSrc":"7385:6:62","nodeType":"YulTypedName","src":"7385:6:62","type":""}]},{"nativeSrc":"7419:25:62","nodeType":"YulVariableDeclaration","src":"7419:25:62","value":{"arguments":[{"name":"ptr2","nativeSrc":"7439:4:62","nodeType":"YulIdentifier","src":"7439:4:62"}],"functionName":{"name":"mload","nativeSrc":"7433:5:62","nodeType":"YulIdentifier","src":"7433:5:62"},"nativeSrc":"7433:11:62","nodeType":"YulFunctionCall","src":"7433:11:62"},"variables":[{"name":"value2","nativeSrc":"7423:6:62","nodeType":"YulTypedName","src":"7423:6:62","type":""}]},{"expression":{"arguments":[{"name":"ptr1","nativeSrc":"7464:4:62","nodeType":"YulIdentifier","src":"7464:4:62"},{"name":"value2","nativeSrc":"7470:6:62","nodeType":"YulIdentifier","src":"7470:6:62"}],"functionName":{"name":"mstore","nativeSrc":"7457:6:62","nodeType":"YulIdentifier","src":"7457:6:62"},"nativeSrc":"7457:20:62","nodeType":"YulFunctionCall","src":"7457:20:62"},"nativeSrc":"7457:20:62","nodeType":"YulExpressionStatement","src":"7457:20:62"},{"expression":{"arguments":[{"name":"ptr2","nativeSrc":"7497:4:62","nodeType":"YulIdentifier","src":"7497:4:62"},{"name":"value1","nativeSrc":"7503:6:62","nodeType":"YulIdentifier","src":"7503:6:62"}],"functionName":{"name":"mstore","nativeSrc":"7490:6:62","nodeType":"YulIdentifier","src":"7490:6:62"},"nativeSrc":"7490:20:62","nodeType":"YulFunctionCall","src":"7490:20:62"},"nativeSrc":"7490:20:62","nodeType":"YulExpressionStatement","src":"7490:20:62"}]},"evmVersion":"cancun","externalReferences":[{"declaration":11633,"isOffset":false,"isSlot":false,"src":"7401:4:62","valueSize":1},{"declaration":11633,"isOffset":false,"isSlot":false,"src":"7464:4:62","valueSize":1},{"declaration":11635,"isOffset":false,"isSlot":false,"src":"7439:4:62","valueSize":1},{"declaration":11635,"isOffset":false,"isSlot":false,"src":"7497:4:62","valueSize":1}],"id":11638,"nodeType":"InlineAssembly","src":"7358:162:62"}]},"documentation":{"id":11631,"nodeType":"StructuredDocumentation","src":"7210:77:62","text":" @dev Swaps the elements memory location `ptr1` and `ptr2`."},"id":11640,"implemented":true,"kind":"function","modifiers":[],"name":"_swap","nameLocation":"7301:5:62","nodeType":"FunctionDefinition","parameters":{"id":11636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11633,"mutability":"mutable","name":"ptr1","nameLocation":"7315:4:62","nodeType":"VariableDeclaration","scope":11640,"src":"7307:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11632,"name":"uint256","nodeType":"ElementaryTypeName","src":"7307:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11635,"mutability":"mutable","name":"ptr2","nameLocation":"7329:4:62","nodeType":"VariableDeclaration","scope":11640,"src":"7321:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11634,"name":"uint256","nodeType":"ElementaryTypeName","src":"7321:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7306:28:62"},"returnParameters":{"id":11637,"nodeType":"ParameterList","parameters":[],"src":"7348:0:62"},"scope":12304,"src":"7292:234:62","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11651,"nodeType":"Block","src":"7713:64:62","statements":[{"AST":{"nativeSrc":"7732:39:62","nodeType":"YulBlock","src":"7732:39:62","statements":[{"nativeSrc":"7746:15:62","nodeType":"YulAssignment","src":"7746:15:62","value":{"name":"input","nativeSrc":"7756:5:62","nodeType":"YulIdentifier","src":"7756:5:62"},"variableNames":[{"name":"output","nativeSrc":"7746:6:62","nodeType":"YulIdentifier","src":"7746:6:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11644,"isOffset":false,"isSlot":false,"src":"7756:5:62","valueSize":1},{"declaration":11648,"isOffset":false,"isSlot":false,"src":"7746:6:62","valueSize":1}],"id":11650,"nodeType":"InlineAssembly","src":"7723:48:62"}]},"documentation":{"id":11641,"nodeType":"StructuredDocumentation","src":"7532:76:62","text":"@dev Helper: low level cast address memory array to uint256 memory array"},"id":11652,"implemented":true,"kind":"function","modifiers":[],"name":"_castToUint256Array","nameLocation":"7622:19:62","nodeType":"FunctionDefinition","parameters":{"id":11645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11644,"mutability":"mutable","name":"input","nameLocation":"7659:5:62","nodeType":"VariableDeclaration","scope":11652,"src":"7642:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":11642,"name":"address","nodeType":"ElementaryTypeName","src":"7642:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11643,"nodeType":"ArrayTypeName","src":"7642:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"7641:24:62"},"returnParameters":{"id":11649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11648,"mutability":"mutable","name":"output","nameLocation":"7705:6:62","nodeType":"VariableDeclaration","scope":11652,"src":"7688:23:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11646,"name":"uint256","nodeType":"ElementaryTypeName","src":"7688:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11647,"nodeType":"ArrayTypeName","src":"7688:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7687:25:62"},"scope":12304,"src":"7613:164:62","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11663,"nodeType":"Block","src":"7964:64:62","statements":[{"AST":{"nativeSrc":"7983:39:62","nodeType":"YulBlock","src":"7983:39:62","statements":[{"nativeSrc":"7997:15:62","nodeType":"YulAssignment","src":"7997:15:62","value":{"name":"input","nativeSrc":"8007:5:62","nodeType":"YulIdentifier","src":"8007:5:62"},"variableNames":[{"name":"output","nativeSrc":"7997:6:62","nodeType":"YulIdentifier","src":"7997:6:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11656,"isOffset":false,"isSlot":false,"src":"8007:5:62","valueSize":1},{"declaration":11660,"isOffset":false,"isSlot":false,"src":"7997:6:62","valueSize":1}],"id":11662,"nodeType":"InlineAssembly","src":"7974:48:62"}]},"documentation":{"id":11653,"nodeType":"StructuredDocumentation","src":"7783:76:62","text":"@dev Helper: low level cast bytes32 memory array to uint256 memory array"},"id":11664,"implemented":true,"kind":"function","modifiers":[],"name":"_castToUint256Array","nameLocation":"7873:19:62","nodeType":"FunctionDefinition","parameters":{"id":11657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11656,"mutability":"mutable","name":"input","nameLocation":"7910:5:62","nodeType":"VariableDeclaration","scope":11664,"src":"7893:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":11654,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7893:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":11655,"nodeType":"ArrayTypeName","src":"7893:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"7892:24:62"},"returnParameters":{"id":11661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11660,"mutability":"mutable","name":"output","nameLocation":"7956:6:62","nodeType":"VariableDeclaration","scope":11664,"src":"7939:23:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11658,"name":"uint256","nodeType":"ElementaryTypeName","src":"7939:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11659,"nodeType":"ArrayTypeName","src":"7939:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7938:25:62"},"scope":12304,"src":"7864:164:62","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11689,"nodeType":"Block","src":"8290:64:62","statements":[{"AST":{"nativeSrc":"8309:39:62","nodeType":"YulBlock","src":"8309:39:62","statements":[{"nativeSrc":"8323:15:62","nodeType":"YulAssignment","src":"8323:15:62","value":{"name":"input","nativeSrc":"8333:5:62","nodeType":"YulIdentifier","src":"8333:5:62"},"variableNames":[{"name":"output","nativeSrc":"8323:6:62","nodeType":"YulIdentifier","src":"8323:6:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11675,"isOffset":false,"isSlot":false,"src":"8333:5:62","valueSize":1},{"declaration":11686,"isOffset":false,"isSlot":false,"src":"8323:6:62","valueSize":1}],"id":11688,"nodeType":"InlineAssembly","src":"8300:48:62"}]},"documentation":{"id":11665,"nodeType":"StructuredDocumentation","src":"8034:78:62","text":"@dev Helper: low level cast address comp function to uint256 comp function"},"id":11690,"implemented":true,"kind":"function","modifiers":[],"name":"_castToUint256Comp","nameLocation":"8126:18:62","nodeType":"FunctionDefinition","parameters":{"id":11676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11675,"mutability":"mutable","name":"input","nameLocation":"8201:5:62","nodeType":"VariableDeclaration","scope":11690,"src":"8154:52:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) pure returns (bool)"},"typeName":{"id":11674,"nodeType":"FunctionTypeName","parameterTypes":{"id":11670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11667,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11674,"src":"8163:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11666,"name":"address","nodeType":"ElementaryTypeName","src":"8163:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11669,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11674,"src":"8172:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11668,"name":"address","nodeType":"ElementaryTypeName","src":"8172:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8162:18:62"},"returnParameterTypes":{"id":11673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11672,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11674,"src":"8195:4:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11671,"name":"bool","nodeType":"ElementaryTypeName","src":"8195:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8194:6:62"},"src":"8154:52:62","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"8144:68:62"},"returnParameters":{"id":11687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11686,"mutability":"mutable","name":"output","nameLocation":"8282:6:62","nodeType":"VariableDeclaration","scope":11690,"src":"8235:53:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"typeName":{"id":11685,"nodeType":"FunctionTypeName","parameterTypes":{"id":11681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11678,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11685,"src":"8244:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11677,"name":"uint256","nodeType":"ElementaryTypeName","src":"8244:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11680,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11685,"src":"8253:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11679,"name":"uint256","nodeType":"ElementaryTypeName","src":"8253:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8243:18:62"},"returnParameterTypes":{"id":11684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11683,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11685,"src":"8276:4:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11682,"name":"bool","nodeType":"ElementaryTypeName","src":"8276:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8275:6:62"},"src":"8235:53:62","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"8234:55:62"},"scope":12304,"src":"8117:237:62","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11715,"nodeType":"Block","src":"8616:64:62","statements":[{"AST":{"nativeSrc":"8635:39:62","nodeType":"YulBlock","src":"8635:39:62","statements":[{"nativeSrc":"8649:15:62","nodeType":"YulAssignment","src":"8649:15:62","value":{"name":"input","nativeSrc":"8659:5:62","nodeType":"YulIdentifier","src":"8659:5:62"},"variableNames":[{"name":"output","nativeSrc":"8649:6:62","nodeType":"YulIdentifier","src":"8649:6:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11701,"isOffset":false,"isSlot":false,"src":"8659:5:62","valueSize":1},{"declaration":11712,"isOffset":false,"isSlot":false,"src":"8649:6:62","valueSize":1}],"id":11714,"nodeType":"InlineAssembly","src":"8626:48:62"}]},"documentation":{"id":11691,"nodeType":"StructuredDocumentation","src":"8360:78:62","text":"@dev Helper: low level cast bytes32 comp function to uint256 comp function"},"id":11716,"implemented":true,"kind":"function","modifiers":[],"name":"_castToUint256Comp","nameLocation":"8452:18:62","nodeType":"FunctionDefinition","parameters":{"id":11702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11701,"mutability":"mutable","name":"input","nameLocation":"8527:5:62","nodeType":"VariableDeclaration","scope":11716,"src":"8480:52:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32,bytes32) pure returns (bool)"},"typeName":{"id":11700,"nodeType":"FunctionTypeName","parameterTypes":{"id":11696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11693,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11700,"src":"8489:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11692,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8489:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":11695,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11700,"src":"8498:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11694,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8498:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8488:18:62"},"returnParameterTypes":{"id":11699,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11698,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11700,"src":"8521:4:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11697,"name":"bool","nodeType":"ElementaryTypeName","src":"8521:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8520:6:62"},"src":"8480:52:62","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32,bytes32) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"8470:68:62"},"returnParameters":{"id":11713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11712,"mutability":"mutable","name":"output","nameLocation":"8608:6:62","nodeType":"VariableDeclaration","scope":11716,"src":"8561:53:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"typeName":{"id":11711,"nodeType":"FunctionTypeName","parameterTypes":{"id":11707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11704,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11711,"src":"8570:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11703,"name":"uint256","nodeType":"ElementaryTypeName","src":"8570:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11706,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11711,"src":"8579:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11705,"name":"uint256","nodeType":"ElementaryTypeName","src":"8579:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8569:18:62"},"returnParameterTypes":{"id":11710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11709,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11711,"src":"8602:4:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11708,"name":"bool","nodeType":"ElementaryTypeName","src":"8602:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8601:6:62"},"src":"8561:53:62","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"8560:55:62"},"scope":12304,"src":"8443:237:62","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11798,"nodeType":"Block","src":"9405:834:62","statements":[{"assignments":[11728],"declarations":[{"constant":false,"id":11728,"mutability":"mutable","name":"low","nameLocation":"9423:3:62","nodeType":"VariableDeclaration","scope":11798,"src":"9415:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11727,"name":"uint256","nodeType":"ElementaryTypeName","src":"9415:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11730,"initialValue":{"hexValue":"30","id":11729,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9429:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9415:15:62"},{"assignments":[11732],"declarations":[{"constant":false,"id":11732,"mutability":"mutable","name":"high","nameLocation":"9448:4:62","nodeType":"VariableDeclaration","scope":11798,"src":"9440:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11731,"name":"uint256","nodeType":"ElementaryTypeName","src":"9440:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11735,"initialValue":{"expression":{"id":11733,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11720,"src":"9455:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},"id":11734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9461:6:62","memberName":"length","nodeType":"MemberAccess","src":"9455:12:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9440:27:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11736,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11732,"src":"9482:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11737,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9490:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9482:9:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11742,"nodeType":"IfStatement","src":"9478:48:62","trueBody":{"id":11741,"nodeType":"Block","src":"9493:33:62","statements":[{"expression":{"hexValue":"30","id":11739,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9514:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":11726,"id":11740,"nodeType":"Return","src":"9507:8:62"}]}},{"body":{"id":11774,"nodeType":"Block","src":"9555:423:62","statements":[{"assignments":[11747],"declarations":[{"constant":false,"id":11747,"mutability":"mutable","name":"mid","nameLocation":"9577:3:62","nodeType":"VariableDeclaration","scope":11774,"src":"9569:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11746,"name":"uint256","nodeType":"ElementaryTypeName","src":"9569:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11753,"initialValue":{"arguments":[{"id":11750,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11728,"src":"9596:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11751,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11732,"src":"9601:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11748,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"9583:4:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":11749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9588:7:62","memberName":"average","nodeType":"MemberAccess","referencedDeclaration":13056,"src":"9583:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9583:23:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9569:37:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11755,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11720,"src":"9844:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},{"id":11756,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11747,"src":"9851:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11754,"name":"unsafeAccess","nodeType":"Identifier","overloadedDeclarations":[12079,12105,12131,12157,12183],"referencedDeclaration":12131,"src":"9831:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_Uint256Slot_$12585_storage_ptr_$","typeString":"function (uint256[] storage pointer,uint256) pure returns (struct StorageSlot.Uint256Slot storage pointer)"}},"id":11757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9831:24:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12585_storage_ptr","typeString":"struct StorageSlot.Uint256Slot storage pointer"}},"id":11758,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9856:5:62","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12584,"src":"9831:30:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":11759,"name":"element","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11722,"src":"9864:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9831:40:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11772,"nodeType":"Block","src":"9922:46:62","statements":[{"expression":{"id":11770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11766,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11728,"src":"9940:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11767,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11747,"src":"9946:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":11768,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9952:1:62","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9946:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9940:13:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11771,"nodeType":"ExpressionStatement","src":"9940:13:62"}]},"id":11773,"nodeType":"IfStatement","src":"9827:141:62","trueBody":{"id":11765,"nodeType":"Block","src":"9873:43:62","statements":[{"expression":{"id":11763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11761,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11732,"src":"9891:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11762,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11747,"src":"9898:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9891:10:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11764,"nodeType":"ExpressionStatement","src":"9891:10:62"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11743,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11728,"src":"9543:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11744,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11732,"src":"9549:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9543:10:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11775,"nodeType":"WhileStatement","src":"9536:442:62"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11776,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11728,"src":"10095:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11777,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10101:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10095:7:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11780,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11720,"src":"10119:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11781,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11728,"src":"10126:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":11782,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10132:1:62","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10126:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11779,"name":"unsafeAccess","nodeType":"Identifier","overloadedDeclarations":[12079,12105,12131,12157,12183],"referencedDeclaration":12131,"src":"10106:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_Uint256Slot_$12585_storage_ptr_$","typeString":"function (uint256[] storage pointer,uint256) pure returns (struct StorageSlot.Uint256Slot storage pointer)"}},"id":11784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10106:28:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12585_storage_ptr","typeString":"struct StorageSlot.Uint256Slot storage pointer"}},"id":11785,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10135:5:62","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12584,"src":"10106:34:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":11786,"name":"element","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11722,"src":"10144:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10106:45:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10095:56:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11796,"nodeType":"Block","src":"10198:35:62","statements":[{"expression":{"id":11794,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11728,"src":"10219:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11726,"id":11795,"nodeType":"Return","src":"10212:10:62"}]},"id":11797,"nodeType":"IfStatement","src":"10091:142:62","trueBody":{"id":11793,"nodeType":"Block","src":"10153:39:62","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11789,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11728,"src":"10174:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":11790,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10180:1:62","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10174:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11726,"id":11792,"nodeType":"Return","src":"10167:14:62"}]}}]},"documentation":{"id":11717,"nodeType":"StructuredDocumentation","src":"8686:616:62","text":" @dev Searches a sorted `array` and returns the first index that contains\n a value greater or equal to `element`. If no such index exists (i.e. all\n values in the array are strictly less than `element`), the array length is\n returned. Time complexity O(log n).\n NOTE: The `array` is expected to be sorted in ascending order, and to\n contain no repeated elements.\n IMPORTANT: Deprecated. This implementation behaves as {lowerBound} but lacks\n support for repeated elements in the array. The {lowerBound} function should\n be used instead."},"id":11799,"implemented":true,"kind":"function","modifiers":[],"name":"findUpperBound","nameLocation":"9316:14:62","nodeType":"FunctionDefinition","parameters":{"id":11723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11720,"mutability":"mutable","name":"array","nameLocation":"9349:5:62","nodeType":"VariableDeclaration","scope":11799,"src":"9331:23:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11718,"name":"uint256","nodeType":"ElementaryTypeName","src":"9331:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11719,"nodeType":"ArrayTypeName","src":"9331:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11722,"mutability":"mutable","name":"element","nameLocation":"9364:7:62","nodeType":"VariableDeclaration","scope":11799,"src":"9356:15:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11721,"name":"uint256","nodeType":"ElementaryTypeName","src":"9356:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9330:42:62"},"returnParameters":{"id":11726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11725,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11799,"src":"9396:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11724,"name":"uint256","nodeType":"ElementaryTypeName","src":"9396:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9395:9:62"},"scope":12304,"src":"9307:932:62","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11862,"nodeType":"Block","src":"10756:709:62","statements":[{"assignments":[11811],"declarations":[{"constant":false,"id":11811,"mutability":"mutable","name":"low","nameLocation":"10774:3:62","nodeType":"VariableDeclaration","scope":11862,"src":"10766:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11810,"name":"uint256","nodeType":"ElementaryTypeName","src":"10766:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11813,"initialValue":{"hexValue":"30","id":11812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10780:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10766:15:62"},{"assignments":[11815],"declarations":[{"constant":false,"id":11815,"mutability":"mutable","name":"high","nameLocation":"10799:4:62","nodeType":"VariableDeclaration","scope":11862,"src":"10791:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11814,"name":"uint256","nodeType":"ElementaryTypeName","src":"10791:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11818,"initialValue":{"expression":{"id":11816,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11803,"src":"10806:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},"id":11817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10812:6:62","memberName":"length","nodeType":"MemberAccess","src":"10806:12:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10791:27:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11819,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11815,"src":"10833:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11820,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10841:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10833:9:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11825,"nodeType":"IfStatement","src":"10829:48:62","trueBody":{"id":11824,"nodeType":"Block","src":"10844:33:62","statements":[{"expression":{"hexValue":"30","id":11822,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10865:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":11809,"id":11823,"nodeType":"Return","src":"10858:8:62"}]}},{"body":{"id":11858,"nodeType":"Block","src":"10906:532:62","statements":[{"assignments":[11830],"declarations":[{"constant":false,"id":11830,"mutability":"mutable","name":"mid","nameLocation":"10928:3:62","nodeType":"VariableDeclaration","scope":11858,"src":"10920:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11829,"name":"uint256","nodeType":"ElementaryTypeName","src":"10920:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11836,"initialValue":{"arguments":[{"id":11833,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11811,"src":"10947:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11834,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11815,"src":"10952:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11831,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"10934:4:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":11832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10939:7:62","memberName":"average","nodeType":"MemberAccess","referencedDeclaration":13056,"src":"10934:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10934:23:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10920:37:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11838,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11803,"src":"11195:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},{"id":11839,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11830,"src":"11202:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11837,"name":"unsafeAccess","nodeType":"Identifier","overloadedDeclarations":[12079,12105,12131,12157,12183],"referencedDeclaration":12131,"src":"11182:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_Uint256Slot_$12585_storage_ptr_$","typeString":"function (uint256[] storage pointer,uint256) pure returns (struct StorageSlot.Uint256Slot storage pointer)"}},"id":11840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11182:24:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12585_storage_ptr","typeString":"struct StorageSlot.Uint256Slot storage pointer"}},"id":11841,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11207:5:62","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12584,"src":"11182:30:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11842,"name":"element","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11805,"src":"11215:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11182:40:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11856,"nodeType":"Block","src":"11385:43:62","statements":[{"expression":{"id":11854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11852,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11815,"src":"11403:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11853,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11830,"src":"11410:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11403:10:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11855,"nodeType":"ExpressionStatement","src":"11403:10:62"}]},"id":11857,"nodeType":"IfStatement","src":"11178:250:62","trueBody":{"id":11851,"nodeType":"Block","src":"11224:155:62","statements":[{"id":11850,"nodeType":"UncheckedBlock","src":"11301:64:62","statements":[{"expression":{"id":11848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11844,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11811,"src":"11333:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11845,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11830,"src":"11339:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":11846,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11345:1:62","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11339:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11333:13:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11849,"nodeType":"ExpressionStatement","src":"11333:13:62"}]}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11826,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11811,"src":"10894:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11827,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11815,"src":"10900:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10894:10:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11859,"nodeType":"WhileStatement","src":"10887:551:62"},{"expression":{"id":11860,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11811,"src":"11455:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11809,"id":11861,"nodeType":"Return","src":"11448:10:62"}]},"documentation":{"id":11800,"nodeType":"StructuredDocumentation","src":"10245:412:62","text":" @dev Searches an `array` sorted in ascending order and returns the first\n index that contains a value greater or equal than `element`. If no such index\n exists (i.e. all values in the array are strictly less than `element`), the array\n length is returned. Time complexity O(log n).\n See C++'s https://en.cppreference.com/w/cpp/algorithm/lower_bound[lower_bound]."},"id":11863,"implemented":true,"kind":"function","modifiers":[],"name":"lowerBound","nameLocation":"10671:10:62","nodeType":"FunctionDefinition","parameters":{"id":11806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11803,"mutability":"mutable","name":"array","nameLocation":"10700:5:62","nodeType":"VariableDeclaration","scope":11863,"src":"10682:23:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11801,"name":"uint256","nodeType":"ElementaryTypeName","src":"10682:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11802,"nodeType":"ArrayTypeName","src":"10682:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11805,"mutability":"mutable","name":"element","nameLocation":"10715:7:62","nodeType":"VariableDeclaration","scope":11863,"src":"10707:15:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11804,"name":"uint256","nodeType":"ElementaryTypeName","src":"10707:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10681:42:62"},"returnParameters":{"id":11809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11808,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11863,"src":"10747:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11807,"name":"uint256","nodeType":"ElementaryTypeName","src":"10747:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10746:9:62"},"scope":12304,"src":"10662:803:62","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11926,"nodeType":"Block","src":"11982:709:62","statements":[{"assignments":[11875],"declarations":[{"constant":false,"id":11875,"mutability":"mutable","name":"low","nameLocation":"12000:3:62","nodeType":"VariableDeclaration","scope":11926,"src":"11992:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11874,"name":"uint256","nodeType":"ElementaryTypeName","src":"11992:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11877,"initialValue":{"hexValue":"30","id":11876,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12006:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11992:15:62"},{"assignments":[11879],"declarations":[{"constant":false,"id":11879,"mutability":"mutable","name":"high","nameLocation":"12025:4:62","nodeType":"VariableDeclaration","scope":11926,"src":"12017:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11878,"name":"uint256","nodeType":"ElementaryTypeName","src":"12017:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11882,"initialValue":{"expression":{"id":11880,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11867,"src":"12032:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},"id":11881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12038:6:62","memberName":"length","nodeType":"MemberAccess","src":"12032:12:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12017:27:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11883,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11879,"src":"12059:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12067:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12059:9:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11889,"nodeType":"IfStatement","src":"12055:48:62","trueBody":{"id":11888,"nodeType":"Block","src":"12070:33:62","statements":[{"expression":{"hexValue":"30","id":11886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12091:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":11873,"id":11887,"nodeType":"Return","src":"12084:8:62"}]}},{"body":{"id":11922,"nodeType":"Block","src":"12132:532:62","statements":[{"assignments":[11894],"declarations":[{"constant":false,"id":11894,"mutability":"mutable","name":"mid","nameLocation":"12154:3:62","nodeType":"VariableDeclaration","scope":11922,"src":"12146:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11893,"name":"uint256","nodeType":"ElementaryTypeName","src":"12146:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11900,"initialValue":{"arguments":[{"id":11897,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11875,"src":"12173:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11898,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11879,"src":"12178:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11895,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"12160:4:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":11896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12165:7:62","memberName":"average","nodeType":"MemberAccess","referencedDeclaration":13056,"src":"12160:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12160:23:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12146:37:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11902,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11867,"src":"12421:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},{"id":11903,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11894,"src":"12428:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11901,"name":"unsafeAccess","nodeType":"Identifier","overloadedDeclarations":[12079,12105,12131,12157,12183],"referencedDeclaration":12131,"src":"12408:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_Uint256Slot_$12585_storage_ptr_$","typeString":"function (uint256[] storage pointer,uint256) pure returns (struct StorageSlot.Uint256Slot storage pointer)"}},"id":11904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12408:24:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12585_storage_ptr","typeString":"struct StorageSlot.Uint256Slot storage pointer"}},"id":11905,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12433:5:62","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12584,"src":"12408:30:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":11906,"name":"element","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11869,"src":"12441:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12408:40:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11920,"nodeType":"Block","src":"12499:155:62","statements":[{"id":11919,"nodeType":"UncheckedBlock","src":"12576:64:62","statements":[{"expression":{"id":11917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11913,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11875,"src":"12608:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11914,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11894,"src":"12614:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":11915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12620:1:62","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12614:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12608:13:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11918,"nodeType":"ExpressionStatement","src":"12608:13:62"}]}]},"id":11921,"nodeType":"IfStatement","src":"12404:250:62","trueBody":{"id":11912,"nodeType":"Block","src":"12450:43:62","statements":[{"expression":{"id":11910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11908,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11879,"src":"12468:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11909,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11894,"src":"12475:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12468:10:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11911,"nodeType":"ExpressionStatement","src":"12468:10:62"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11890,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11875,"src":"12120:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11891,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11879,"src":"12126:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12120:10:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11923,"nodeType":"WhileStatement","src":"12113:551:62"},{"expression":{"id":11924,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11875,"src":"12681:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11873,"id":11925,"nodeType":"Return","src":"12674:10:62"}]},"documentation":{"id":11864,"nodeType":"StructuredDocumentation","src":"11471:412:62","text":" @dev Searches an `array` sorted in ascending order and returns the first\n index that contains a value strictly greater than `element`. If no such index\n exists (i.e. all values in the array are strictly less than `element`), the array\n length is returned. Time complexity O(log n).\n See C++'s https://en.cppreference.com/w/cpp/algorithm/upper_bound[upper_bound]."},"id":11927,"implemented":true,"kind":"function","modifiers":[],"name":"upperBound","nameLocation":"11897:10:62","nodeType":"FunctionDefinition","parameters":{"id":11870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11867,"mutability":"mutable","name":"array","nameLocation":"11926:5:62","nodeType":"VariableDeclaration","scope":11927,"src":"11908:23:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11865,"name":"uint256","nodeType":"ElementaryTypeName","src":"11908:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11866,"nodeType":"ArrayTypeName","src":"11908:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11869,"mutability":"mutable","name":"element","nameLocation":"11941:7:62","nodeType":"VariableDeclaration","scope":11927,"src":"11933:15:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11868,"name":"uint256","nodeType":"ElementaryTypeName","src":"11933:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11907:42:62"},"returnParameters":{"id":11873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11872,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11927,"src":"11973:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11871,"name":"uint256","nodeType":"ElementaryTypeName","src":"11973:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11972:9:62"},"scope":12304,"src":"11888:803:62","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11989,"nodeType":"Block","src":"12875:709:62","statements":[{"assignments":[11939],"declarations":[{"constant":false,"id":11939,"mutability":"mutable","name":"low","nameLocation":"12893:3:62","nodeType":"VariableDeclaration","scope":11989,"src":"12885:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11938,"name":"uint256","nodeType":"ElementaryTypeName","src":"12885:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11941,"initialValue":{"hexValue":"30","id":11940,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12899:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12885:15:62"},{"assignments":[11943],"declarations":[{"constant":false,"id":11943,"mutability":"mutable","name":"high","nameLocation":"12918:4:62","nodeType":"VariableDeclaration","scope":11989,"src":"12910:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11942,"name":"uint256","nodeType":"ElementaryTypeName","src":"12910:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11946,"initialValue":{"expression":{"id":11944,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11931,"src":"12925:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12931:6:62","memberName":"length","nodeType":"MemberAccess","src":"12925:12:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12910:27:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11947,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11943,"src":"12952:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11948,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12960:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12952:9:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11953,"nodeType":"IfStatement","src":"12948:48:62","trueBody":{"id":11952,"nodeType":"Block","src":"12963:33:62","statements":[{"expression":{"hexValue":"30","id":11950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12984:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":11937,"id":11951,"nodeType":"Return","src":"12977:8:62"}]}},{"body":{"id":11985,"nodeType":"Block","src":"13025:532:62","statements":[{"assignments":[11958],"declarations":[{"constant":false,"id":11958,"mutability":"mutable","name":"mid","nameLocation":"13047:3:62","nodeType":"VariableDeclaration","scope":11985,"src":"13039:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11957,"name":"uint256","nodeType":"ElementaryTypeName","src":"13039:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11964,"initialValue":{"arguments":[{"id":11961,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11939,"src":"13066:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11962,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11943,"src":"13071:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11959,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"13053:4:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":11960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13058:7:62","memberName":"average","nodeType":"MemberAccess","referencedDeclaration":13056,"src":"13053:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13053:23:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13039:37:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":11966,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11931,"src":"13320:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":11967,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11958,"src":"13327:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11965,"name":"unsafeMemoryAccess","nodeType":"Identifier","overloadedDeclarations":[12196,12209,12222,12235,12248],"referencedDeclaration":12222,"src":"13301:18:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":11968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13301:30:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11969,"name":"element","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11933,"src":"13334:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13301:40:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11983,"nodeType":"Block","src":"13504:43:62","statements":[{"expression":{"id":11981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11979,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11943,"src":"13522:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11980,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11958,"src":"13529:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13522:10:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11982,"nodeType":"ExpressionStatement","src":"13522:10:62"}]},"id":11984,"nodeType":"IfStatement","src":"13297:250:62","trueBody":{"id":11978,"nodeType":"Block","src":"13343:155:62","statements":[{"id":11977,"nodeType":"UncheckedBlock","src":"13420:64:62","statements":[{"expression":{"id":11975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11971,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11939,"src":"13452:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11972,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11958,"src":"13458:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":11973,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13464:1:62","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13458:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13452:13:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11976,"nodeType":"ExpressionStatement","src":"13452:13:62"}]}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11954,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11939,"src":"13013:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11955,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11943,"src":"13019:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13013:10:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11986,"nodeType":"WhileStatement","src":"13006:551:62"},{"expression":{"id":11987,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11939,"src":"13574:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11937,"id":11988,"nodeType":"Return","src":"13567:10:62"}]},"documentation":{"id":11928,"nodeType":"StructuredDocumentation","src":"12697:74:62","text":" @dev Same as {lowerBound}, but with an array in memory."},"id":11990,"implemented":true,"kind":"function","modifiers":[],"name":"lowerBoundMemory","nameLocation":"12785:16:62","nodeType":"FunctionDefinition","parameters":{"id":11934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11931,"mutability":"mutable","name":"array","nameLocation":"12819:5:62","nodeType":"VariableDeclaration","scope":11990,"src":"12802:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11929,"name":"uint256","nodeType":"ElementaryTypeName","src":"12802:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11930,"nodeType":"ArrayTypeName","src":"12802:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11933,"mutability":"mutable","name":"element","nameLocation":"12834:7:62","nodeType":"VariableDeclaration","scope":11990,"src":"12826:15:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11932,"name":"uint256","nodeType":"ElementaryTypeName","src":"12826:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12801:41:62"},"returnParameters":{"id":11937,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11936,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11990,"src":"12866:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11935,"name":"uint256","nodeType":"ElementaryTypeName","src":"12866:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12865:9:62"},"scope":12304,"src":"12776:808:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12052,"nodeType":"Block","src":"13768:709:62","statements":[{"assignments":[12002],"declarations":[{"constant":false,"id":12002,"mutability":"mutable","name":"low","nameLocation":"13786:3:62","nodeType":"VariableDeclaration","scope":12052,"src":"13778:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12001,"name":"uint256","nodeType":"ElementaryTypeName","src":"13778:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12004,"initialValue":{"hexValue":"30","id":12003,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13792:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13778:15:62"},{"assignments":[12006],"declarations":[{"constant":false,"id":12006,"mutability":"mutable","name":"high","nameLocation":"13811:4:62","nodeType":"VariableDeclaration","scope":12052,"src":"13803:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12005,"name":"uint256","nodeType":"ElementaryTypeName","src":"13803:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12009,"initialValue":{"expression":{"id":12007,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11994,"src":"13818:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13824:6:62","memberName":"length","nodeType":"MemberAccess","src":"13818:12:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13803:27:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12010,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12006,"src":"13845:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12011,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13853:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13845:9:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12016,"nodeType":"IfStatement","src":"13841:48:62","trueBody":{"id":12015,"nodeType":"Block","src":"13856:33:62","statements":[{"expression":{"hexValue":"30","id":12013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13877:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":12000,"id":12014,"nodeType":"Return","src":"13870:8:62"}]}},{"body":{"id":12048,"nodeType":"Block","src":"13918:532:62","statements":[{"assignments":[12021],"declarations":[{"constant":false,"id":12021,"mutability":"mutable","name":"mid","nameLocation":"13940:3:62","nodeType":"VariableDeclaration","scope":12048,"src":"13932:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12020,"name":"uint256","nodeType":"ElementaryTypeName","src":"13932:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12027,"initialValue":{"arguments":[{"id":12024,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12002,"src":"13959:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12025,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12006,"src":"13964:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12022,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"13946:4:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":12023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13951:7:62","memberName":"average","nodeType":"MemberAccess","referencedDeclaration":13056,"src":"13946:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":12026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13946:23:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13932:37:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":12029,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11994,"src":"14213:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":12030,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12021,"src":"14220:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12028,"name":"unsafeMemoryAccess","nodeType":"Identifier","overloadedDeclarations":[12196,12209,12222,12235,12248],"referencedDeclaration":12222,"src":"14194:18:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":12031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14194:30:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":12032,"name":"element","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11996,"src":"14227:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14194:40:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":12046,"nodeType":"Block","src":"14285:155:62","statements":[{"id":12045,"nodeType":"UncheckedBlock","src":"14362:64:62","statements":[{"expression":{"id":12043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12039,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12002,"src":"14394:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12040,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12021,"src":"14400:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":12041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14406:1:62","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"14400:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14394:13:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12044,"nodeType":"ExpressionStatement","src":"14394:13:62"}]}]},"id":12047,"nodeType":"IfStatement","src":"14190:250:62","trueBody":{"id":12038,"nodeType":"Block","src":"14236:43:62","statements":[{"expression":{"id":12036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12034,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12006,"src":"14254:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12035,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12021,"src":"14261:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14254:10:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12037,"nodeType":"ExpressionStatement","src":"14254:10:62"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12017,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12002,"src":"13906:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":12018,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12006,"src":"13912:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13906:10:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12049,"nodeType":"WhileStatement","src":"13899:551:62"},{"expression":{"id":12050,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12002,"src":"14467:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12000,"id":12051,"nodeType":"Return","src":"14460:10:62"}]},"documentation":{"id":11991,"nodeType":"StructuredDocumentation","src":"13590:74:62","text":" @dev Same as {upperBound}, but with an array in memory."},"id":12053,"implemented":true,"kind":"function","modifiers":[],"name":"upperBoundMemory","nameLocation":"13678:16:62","nodeType":"FunctionDefinition","parameters":{"id":11997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11994,"mutability":"mutable","name":"array","nameLocation":"13712:5:62","nodeType":"VariableDeclaration","scope":12053,"src":"13695:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11992,"name":"uint256","nodeType":"ElementaryTypeName","src":"13695:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11993,"nodeType":"ArrayTypeName","src":"13695:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11996,"mutability":"mutable","name":"element","nameLocation":"13727:7:62","nodeType":"VariableDeclaration","scope":12053,"src":"13719:15:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11995,"name":"uint256","nodeType":"ElementaryTypeName","src":"13719:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13694:41:62"},"returnParameters":{"id":12000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11999,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12053,"src":"13759:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11998,"name":"uint256","nodeType":"ElementaryTypeName","src":"13759:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13758:9:62"},"scope":12304,"src":"13669:808:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12078,"nodeType":"Block","src":"14793:167:62","statements":[{"assignments":[12066],"declarations":[{"constant":false,"id":12066,"mutability":"mutable","name":"slot","nameLocation":"14811:4:62","nodeType":"VariableDeclaration","scope":12078,"src":"14803:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12065,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14803:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12067,"nodeType":"VariableDeclarationStatement","src":"14803:12:62"},{"AST":{"nativeSrc":"14850:40:62","nodeType":"YulBlock","src":"14850:40:62","statements":[{"nativeSrc":"14864:16:62","nodeType":"YulAssignment","src":"14864:16:62","value":{"name":"arr.slot","nativeSrc":"14872:8:62","nodeType":"YulIdentifier","src":"14872:8:62"},"variableNames":[{"name":"slot","nativeSrc":"14864:4:62","nodeType":"YulIdentifier","src":"14864:4:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12057,"isOffset":false,"isSlot":true,"src":"14872:8:62","suffix":"slot","valueSize":1},{"declaration":12066,"isOffset":false,"isSlot":false,"src":"14864:4:62","valueSize":1}],"flags":["memory-safe"],"id":12068,"nodeType":"InlineAssembly","src":"14825:65:62"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":12073,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12059,"src":"14932:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12069,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12066,"src":"14906:4:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14911:11:62","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":12485,"src":"14906:16:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":12071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14906:18:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14925:6:62","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":12475,"src":"14906:25:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":12074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14906:30:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14937:14:62","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":12605,"src":"14906:45:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$12576_storage_ptr_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":12076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14906:47:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$12576_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"functionReturnParameters":12064,"id":12077,"nodeType":"Return","src":"14899:54:62"}]},"documentation":{"id":12054,"nodeType":"StructuredDocumentation","src":"14483:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12079,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeAccess","nameLocation":"14688:12:62","nodeType":"FunctionDefinition","parameters":{"id":12060,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12057,"mutability":"mutable","name":"arr","nameLocation":"14719:3:62","nodeType":"VariableDeclaration","scope":12079,"src":"14701:21:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":12055,"name":"address","nodeType":"ElementaryTypeName","src":"14701:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12056,"nodeType":"ArrayTypeName","src":"14701:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":12059,"mutability":"mutable","name":"pos","nameLocation":"14732:3:62","nodeType":"VariableDeclaration","scope":12079,"src":"14724:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12058,"name":"uint256","nodeType":"ElementaryTypeName","src":"14724:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14700:36:62"},"returnParameters":{"id":12064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12063,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12079,"src":"14760:31:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$12576_storage_ptr","typeString":"struct StorageSlot.AddressSlot"},"typeName":{"id":12062,"nodeType":"UserDefinedTypeName","pathNode":{"id":12061,"name":"StorageSlot.AddressSlot","nameLocations":["14760:11:62","14772:11:62"],"nodeType":"IdentifierPath","referencedDeclaration":12576,"src":"14760:23:62"},"referencedDeclaration":12576,"src":"14760:23:62","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$12576_storage_ptr","typeString":"struct StorageSlot.AddressSlot"}},"visibility":"internal"}],"src":"14759:33:62"},"scope":12304,"src":"14679:281:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12104,"nodeType":"Block","src":"15276:167:62","statements":[{"assignments":[12092],"declarations":[{"constant":false,"id":12092,"mutability":"mutable","name":"slot","nameLocation":"15294:4:62","nodeType":"VariableDeclaration","scope":12104,"src":"15286:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12091,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15286:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12093,"nodeType":"VariableDeclarationStatement","src":"15286:12:62"},{"AST":{"nativeSrc":"15333:40:62","nodeType":"YulBlock","src":"15333:40:62","statements":[{"nativeSrc":"15347:16:62","nodeType":"YulAssignment","src":"15347:16:62","value":{"name":"arr.slot","nativeSrc":"15355:8:62","nodeType":"YulIdentifier","src":"15355:8:62"},"variableNames":[{"name":"slot","nativeSrc":"15347:4:62","nodeType":"YulIdentifier","src":"15347:4:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12083,"isOffset":false,"isSlot":true,"src":"15355:8:62","suffix":"slot","valueSize":1},{"declaration":12092,"isOffset":false,"isSlot":false,"src":"15347:4:62","valueSize":1}],"flags":["memory-safe"],"id":12094,"nodeType":"InlineAssembly","src":"15308:65:62"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":12099,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12085,"src":"15415:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12095,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12092,"src":"15389:4:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15394:11:62","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":12485,"src":"15389:16:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":12097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15389:18:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15408:6:62","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":12475,"src":"15389:25:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":12100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15389:30:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15420:14:62","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":12627,"src":"15389:45:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$12582_storage_ptr_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":12102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15389:47:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$12582_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"functionReturnParameters":12090,"id":12103,"nodeType":"Return","src":"15382:54:62"}]},"documentation":{"id":12080,"nodeType":"StructuredDocumentation","src":"14966:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12105,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeAccess","nameLocation":"15171:12:62","nodeType":"FunctionDefinition","parameters":{"id":12086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12083,"mutability":"mutable","name":"arr","nameLocation":"15202:3:62","nodeType":"VariableDeclaration","scope":12105,"src":"15184:21:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":12081,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15184:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12082,"nodeType":"ArrayTypeName","src":"15184:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":12085,"mutability":"mutable","name":"pos","nameLocation":"15215:3:62","nodeType":"VariableDeclaration","scope":12105,"src":"15207:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12084,"name":"uint256","nodeType":"ElementaryTypeName","src":"15207:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15183:36:62"},"returnParameters":{"id":12090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12089,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12105,"src":"15243:31:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$12582_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"},"typeName":{"id":12088,"nodeType":"UserDefinedTypeName","pathNode":{"id":12087,"name":"StorageSlot.Bytes32Slot","nameLocations":["15243:11:62","15255:11:62"],"nodeType":"IdentifierPath","referencedDeclaration":12582,"src":"15243:23:62"},"referencedDeclaration":12582,"src":"15243:23:62","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$12582_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"}},"visibility":"internal"}],"src":"15242:33:62"},"scope":12304,"src":"15162:281:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12130,"nodeType":"Block","src":"15759:167:62","statements":[{"assignments":[12118],"declarations":[{"constant":false,"id":12118,"mutability":"mutable","name":"slot","nameLocation":"15777:4:62","nodeType":"VariableDeclaration","scope":12130,"src":"15769:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12117,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15769:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12119,"nodeType":"VariableDeclarationStatement","src":"15769:12:62"},{"AST":{"nativeSrc":"15816:40:62","nodeType":"YulBlock","src":"15816:40:62","statements":[{"nativeSrc":"15830:16:62","nodeType":"YulAssignment","src":"15830:16:62","value":{"name":"arr.slot","nativeSrc":"15838:8:62","nodeType":"YulIdentifier","src":"15838:8:62"},"variableNames":[{"name":"slot","nativeSrc":"15830:4:62","nodeType":"YulIdentifier","src":"15830:4:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12109,"isOffset":false,"isSlot":true,"src":"15838:8:62","suffix":"slot","valueSize":1},{"declaration":12118,"isOffset":false,"isSlot":false,"src":"15830:4:62","valueSize":1}],"flags":["memory-safe"],"id":12120,"nodeType":"InlineAssembly","src":"15791:65:62"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":12125,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12111,"src":"15898:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12121,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12118,"src":"15872:4:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15877:11:62","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":12485,"src":"15872:16:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":12123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15872:18:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15891:6:62","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":12475,"src":"15872:25:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":12126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15872:30:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15903:14:62","memberName":"getUint256Slot","nodeType":"MemberAccess","referencedDeclaration":12638,"src":"15872:45:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Uint256Slot_$12585_storage_ptr_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Uint256Slot storage pointer)"}},"id":12128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15872:47:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12585_storage_ptr","typeString":"struct StorageSlot.Uint256Slot storage pointer"}},"functionReturnParameters":12116,"id":12129,"nodeType":"Return","src":"15865:54:62"}]},"documentation":{"id":12106,"nodeType":"StructuredDocumentation","src":"15449:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12131,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeAccess","nameLocation":"15654:12:62","nodeType":"FunctionDefinition","parameters":{"id":12112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12109,"mutability":"mutable","name":"arr","nameLocation":"15685:3:62","nodeType":"VariableDeclaration","scope":12131,"src":"15667:21:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12107,"name":"uint256","nodeType":"ElementaryTypeName","src":"15667:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12108,"nodeType":"ArrayTypeName","src":"15667:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12111,"mutability":"mutable","name":"pos","nameLocation":"15698:3:62","nodeType":"VariableDeclaration","scope":12131,"src":"15690:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12110,"name":"uint256","nodeType":"ElementaryTypeName","src":"15690:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15666:36:62"},"returnParameters":{"id":12116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12115,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12131,"src":"15726:31:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12585_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"},"typeName":{"id":12114,"nodeType":"UserDefinedTypeName","pathNode":{"id":12113,"name":"StorageSlot.Uint256Slot","nameLocations":["15726:11:62","15738:11:62"],"nodeType":"IdentifierPath","referencedDeclaration":12585,"src":"15726:23:62"},"referencedDeclaration":12585,"src":"15726:23:62","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12585_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"}},"visibility":"internal"}],"src":"15725:33:62"},"scope":12304,"src":"15645:281:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12156,"nodeType":"Block","src":"16238:165:62","statements":[{"assignments":[12144],"declarations":[{"constant":false,"id":12144,"mutability":"mutable","name":"slot","nameLocation":"16256:4:62","nodeType":"VariableDeclaration","scope":12156,"src":"16248:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12143,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16248:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12145,"nodeType":"VariableDeclarationStatement","src":"16248:12:62"},{"AST":{"nativeSrc":"16295:40:62","nodeType":"YulBlock","src":"16295:40:62","statements":[{"nativeSrc":"16309:16:62","nodeType":"YulAssignment","src":"16309:16:62","value":{"name":"arr.slot","nativeSrc":"16317:8:62","nodeType":"YulIdentifier","src":"16317:8:62"},"variableNames":[{"name":"slot","nativeSrc":"16309:4:62","nodeType":"YulIdentifier","src":"16309:4:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12135,"isOffset":false,"isSlot":true,"src":"16317:8:62","suffix":"slot","valueSize":1},{"declaration":12144,"isOffset":false,"isSlot":false,"src":"16309:4:62","valueSize":1}],"flags":["memory-safe"],"id":12146,"nodeType":"InlineAssembly","src":"16270:65:62"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":12151,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12137,"src":"16377:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12147,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12144,"src":"16351:4:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16356:11:62","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":12485,"src":"16351:16:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":12149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16351:18:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16370:6:62","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":12475,"src":"16351:25:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":12152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16351:30:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16382:12:62","memberName":"getBytesSlot","nodeType":"MemberAccess","referencedDeclaration":12682,"src":"16351:43:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_BytesSlot_$12594_storage_ptr_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (struct StorageSlot.BytesSlot storage pointer)"}},"id":12154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16351:45:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12594_storage_ptr","typeString":"struct StorageSlot.BytesSlot storage pointer"}},"functionReturnParameters":12142,"id":12155,"nodeType":"Return","src":"16344:52:62"}]},"documentation":{"id":12132,"nodeType":"StructuredDocumentation","src":"15932:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12157,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeAccess","nameLocation":"16137:12:62","nodeType":"FunctionDefinition","parameters":{"id":12138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12135,"mutability":"mutable","name":"arr","nameLocation":"16166:3:62","nodeType":"VariableDeclaration","scope":12157,"src":"16150:19:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":12133,"name":"bytes","nodeType":"ElementaryTypeName","src":"16150:5:62","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":12134,"nodeType":"ArrayTypeName","src":"16150:7:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"},{"constant":false,"id":12137,"mutability":"mutable","name":"pos","nameLocation":"16179:3:62","nodeType":"VariableDeclaration","scope":12157,"src":"16171:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12136,"name":"uint256","nodeType":"ElementaryTypeName","src":"16171:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16149:34:62"},"returnParameters":{"id":12142,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12141,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12157,"src":"16207:29:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12594_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":12140,"nodeType":"UserDefinedTypeName","pathNode":{"id":12139,"name":"StorageSlot.BytesSlot","nameLocations":["16207:11:62","16219:9:62"],"nodeType":"IdentifierPath","referencedDeclaration":12594,"src":"16207:21:62"},"referencedDeclaration":12594,"src":"16207:21:62","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12594_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"16206:31:62"},"scope":12304,"src":"16128:275:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12182,"nodeType":"Block","src":"16717:166:62","statements":[{"assignments":[12170],"declarations":[{"constant":false,"id":12170,"mutability":"mutable","name":"slot","nameLocation":"16735:4:62","nodeType":"VariableDeclaration","scope":12182,"src":"16727:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12169,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16727:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12171,"nodeType":"VariableDeclarationStatement","src":"16727:12:62"},{"AST":{"nativeSrc":"16774:40:62","nodeType":"YulBlock","src":"16774:40:62","statements":[{"nativeSrc":"16788:16:62","nodeType":"YulAssignment","src":"16788:16:62","value":{"name":"arr.slot","nativeSrc":"16796:8:62","nodeType":"YulIdentifier","src":"16796:8:62"},"variableNames":[{"name":"slot","nativeSrc":"16788:4:62","nodeType":"YulIdentifier","src":"16788:4:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12161,"isOffset":false,"isSlot":true,"src":"16796:8:62","suffix":"slot","valueSize":1},{"declaration":12170,"isOffset":false,"isSlot":false,"src":"16788:4:62","valueSize":1}],"flags":["memory-safe"],"id":12172,"nodeType":"InlineAssembly","src":"16749:65:62"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":12177,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12163,"src":"16856:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12173,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12170,"src":"16830:4:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16835:11:62","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":12485,"src":"16830:16:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":12175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16830:18:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16849:6:62","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":12475,"src":"16830:25:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":12178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16830:30:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16861:13:62","memberName":"getStringSlot","nodeType":"MemberAccess","referencedDeclaration":12660,"src":"16830:44:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_StringSlot_$12591_storage_ptr_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (struct StorageSlot.StringSlot storage pointer)"}},"id":12180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16830:46:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12591_storage_ptr","typeString":"struct StorageSlot.StringSlot storage pointer"}},"functionReturnParameters":12168,"id":12181,"nodeType":"Return","src":"16823:53:62"}]},"documentation":{"id":12158,"nodeType":"StructuredDocumentation","src":"16409:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12183,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeAccess","nameLocation":"16614:12:62","nodeType":"FunctionDefinition","parameters":{"id":12164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12161,"mutability":"mutable","name":"arr","nameLocation":"16644:3:62","nodeType":"VariableDeclaration","scope":12183,"src":"16627:20:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":12159,"name":"string","nodeType":"ElementaryTypeName","src":"16627:6:62","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":12160,"nodeType":"ArrayTypeName","src":"16627:8:62","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":12163,"mutability":"mutable","name":"pos","nameLocation":"16657:3:62","nodeType":"VariableDeclaration","scope":12183,"src":"16649:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12162,"name":"uint256","nodeType":"ElementaryTypeName","src":"16649:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16626:35:62"},"returnParameters":{"id":12168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12167,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12183,"src":"16685:30:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12591_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":12166,"nodeType":"UserDefinedTypeName","pathNode":{"id":12165,"name":"StorageSlot.StringSlot","nameLocations":["16685:11:62","16697:10:62"],"nodeType":"IdentifierPath","referencedDeclaration":12591,"src":"16685:22:62"},"referencedDeclaration":12591,"src":"16685:22:62","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12591_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"16684:32:62"},"scope":12304,"src":"16605:278:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12195,"nodeType":"Block","src":"17184:98:62","statements":[{"AST":{"nativeSrc":"17203:73:62","nodeType":"YulBlock","src":"17203:73:62","statements":[{"nativeSrc":"17217:49:62","nodeType":"YulAssignment","src":"17217:49:62","value":{"arguments":[{"arguments":[{"arguments":[{"name":"arr","nativeSrc":"17238:3:62","nodeType":"YulIdentifier","src":"17238:3:62"},{"kind":"number","nativeSrc":"17243:4:62","nodeType":"YulLiteral","src":"17243:4:62","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"17234:3:62","nodeType":"YulIdentifier","src":"17234:3:62"},"nativeSrc":"17234:14:62","nodeType":"YulFunctionCall","src":"17234:14:62"},{"arguments":[{"name":"pos","nativeSrc":"17254:3:62","nodeType":"YulIdentifier","src":"17254:3:62"},{"kind":"number","nativeSrc":"17259:4:62","nodeType":"YulLiteral","src":"17259:4:62","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"17250:3:62","nodeType":"YulIdentifier","src":"17250:3:62"},"nativeSrc":"17250:14:62","nodeType":"YulFunctionCall","src":"17250:14:62"}],"functionName":{"name":"add","nativeSrc":"17230:3:62","nodeType":"YulIdentifier","src":"17230:3:62"},"nativeSrc":"17230:35:62","nodeType":"YulFunctionCall","src":"17230:35:62"}],"functionName":{"name":"mload","nativeSrc":"17224:5:62","nodeType":"YulIdentifier","src":"17224:5:62"},"nativeSrc":"17224:42:62","nodeType":"YulFunctionCall","src":"17224:42:62"},"variableNames":[{"name":"res","nativeSrc":"17217:3:62","nodeType":"YulIdentifier","src":"17217:3:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12187,"isOffset":false,"isSlot":false,"src":"17238:3:62","valueSize":1},{"declaration":12189,"isOffset":false,"isSlot":false,"src":"17254:3:62","valueSize":1},{"declaration":12192,"isOffset":false,"isSlot":false,"src":"17217:3:62","valueSize":1}],"id":12194,"nodeType":"InlineAssembly","src":"17194:82:62"}]},"documentation":{"id":12184,"nodeType":"StructuredDocumentation","src":"16889:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12196,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeMemoryAccess","nameLocation":"17094:18:62","nodeType":"FunctionDefinition","parameters":{"id":12190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12187,"mutability":"mutable","name":"arr","nameLocation":"17130:3:62","nodeType":"VariableDeclaration","scope":12196,"src":"17113:20:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":12185,"name":"address","nodeType":"ElementaryTypeName","src":"17113:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12186,"nodeType":"ArrayTypeName","src":"17113:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":12189,"mutability":"mutable","name":"pos","nameLocation":"17143:3:62","nodeType":"VariableDeclaration","scope":12196,"src":"17135:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12188,"name":"uint256","nodeType":"ElementaryTypeName","src":"17135:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17112:35:62"},"returnParameters":{"id":12193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12192,"mutability":"mutable","name":"res","nameLocation":"17179:3:62","nodeType":"VariableDeclaration","scope":12196,"src":"17171:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12191,"name":"address","nodeType":"ElementaryTypeName","src":"17171:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17170:13:62"},"scope":12304,"src":"17085:197:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12208,"nodeType":"Block","src":"17583:98:62","statements":[{"AST":{"nativeSrc":"17602:73:62","nodeType":"YulBlock","src":"17602:73:62","statements":[{"nativeSrc":"17616:49:62","nodeType":"YulAssignment","src":"17616:49:62","value":{"arguments":[{"arguments":[{"arguments":[{"name":"arr","nativeSrc":"17637:3:62","nodeType":"YulIdentifier","src":"17637:3:62"},{"kind":"number","nativeSrc":"17642:4:62","nodeType":"YulLiteral","src":"17642:4:62","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"17633:3:62","nodeType":"YulIdentifier","src":"17633:3:62"},"nativeSrc":"17633:14:62","nodeType":"YulFunctionCall","src":"17633:14:62"},{"arguments":[{"name":"pos","nativeSrc":"17653:3:62","nodeType":"YulIdentifier","src":"17653:3:62"},{"kind":"number","nativeSrc":"17658:4:62","nodeType":"YulLiteral","src":"17658:4:62","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"17649:3:62","nodeType":"YulIdentifier","src":"17649:3:62"},"nativeSrc":"17649:14:62","nodeType":"YulFunctionCall","src":"17649:14:62"}],"functionName":{"name":"add","nativeSrc":"17629:3:62","nodeType":"YulIdentifier","src":"17629:3:62"},"nativeSrc":"17629:35:62","nodeType":"YulFunctionCall","src":"17629:35:62"}],"functionName":{"name":"mload","nativeSrc":"17623:5:62","nodeType":"YulIdentifier","src":"17623:5:62"},"nativeSrc":"17623:42:62","nodeType":"YulFunctionCall","src":"17623:42:62"},"variableNames":[{"name":"res","nativeSrc":"17616:3:62","nodeType":"YulIdentifier","src":"17616:3:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12200,"isOffset":false,"isSlot":false,"src":"17637:3:62","valueSize":1},{"declaration":12202,"isOffset":false,"isSlot":false,"src":"17653:3:62","valueSize":1},{"declaration":12205,"isOffset":false,"isSlot":false,"src":"17616:3:62","valueSize":1}],"id":12207,"nodeType":"InlineAssembly","src":"17593:82:62"}]},"documentation":{"id":12197,"nodeType":"StructuredDocumentation","src":"17288:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12209,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeMemoryAccess","nameLocation":"17493:18:62","nodeType":"FunctionDefinition","parameters":{"id":12203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12200,"mutability":"mutable","name":"arr","nameLocation":"17529:3:62","nodeType":"VariableDeclaration","scope":12209,"src":"17512:20:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":12198,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17512:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12199,"nodeType":"ArrayTypeName","src":"17512:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":12202,"mutability":"mutable","name":"pos","nameLocation":"17542:3:62","nodeType":"VariableDeclaration","scope":12209,"src":"17534:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12201,"name":"uint256","nodeType":"ElementaryTypeName","src":"17534:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17511:35:62"},"returnParameters":{"id":12206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12205,"mutability":"mutable","name":"res","nameLocation":"17578:3:62","nodeType":"VariableDeclaration","scope":12209,"src":"17570:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12204,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17570:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"17569:13:62"},"scope":12304,"src":"17484:197:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12221,"nodeType":"Block","src":"17982:98:62","statements":[{"AST":{"nativeSrc":"18001:73:62","nodeType":"YulBlock","src":"18001:73:62","statements":[{"nativeSrc":"18015:49:62","nodeType":"YulAssignment","src":"18015:49:62","value":{"arguments":[{"arguments":[{"arguments":[{"name":"arr","nativeSrc":"18036:3:62","nodeType":"YulIdentifier","src":"18036:3:62"},{"kind":"number","nativeSrc":"18041:4:62","nodeType":"YulLiteral","src":"18041:4:62","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18032:3:62","nodeType":"YulIdentifier","src":"18032:3:62"},"nativeSrc":"18032:14:62","nodeType":"YulFunctionCall","src":"18032:14:62"},{"arguments":[{"name":"pos","nativeSrc":"18052:3:62","nodeType":"YulIdentifier","src":"18052:3:62"},{"kind":"number","nativeSrc":"18057:4:62","nodeType":"YulLiteral","src":"18057:4:62","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"18048:3:62","nodeType":"YulIdentifier","src":"18048:3:62"},"nativeSrc":"18048:14:62","nodeType":"YulFunctionCall","src":"18048:14:62"}],"functionName":{"name":"add","nativeSrc":"18028:3:62","nodeType":"YulIdentifier","src":"18028:3:62"},"nativeSrc":"18028:35:62","nodeType":"YulFunctionCall","src":"18028:35:62"}],"functionName":{"name":"mload","nativeSrc":"18022:5:62","nodeType":"YulIdentifier","src":"18022:5:62"},"nativeSrc":"18022:42:62","nodeType":"YulFunctionCall","src":"18022:42:62"},"variableNames":[{"name":"res","nativeSrc":"18015:3:62","nodeType":"YulIdentifier","src":"18015:3:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12213,"isOffset":false,"isSlot":false,"src":"18036:3:62","valueSize":1},{"declaration":12215,"isOffset":false,"isSlot":false,"src":"18052:3:62","valueSize":1},{"declaration":12218,"isOffset":false,"isSlot":false,"src":"18015:3:62","valueSize":1}],"id":12220,"nodeType":"InlineAssembly","src":"17992:82:62"}]},"documentation":{"id":12210,"nodeType":"StructuredDocumentation","src":"17687:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12222,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeMemoryAccess","nameLocation":"17892:18:62","nodeType":"FunctionDefinition","parameters":{"id":12216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12213,"mutability":"mutable","name":"arr","nameLocation":"17928:3:62","nodeType":"VariableDeclaration","scope":12222,"src":"17911:20:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12211,"name":"uint256","nodeType":"ElementaryTypeName","src":"17911:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12212,"nodeType":"ArrayTypeName","src":"17911:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12215,"mutability":"mutable","name":"pos","nameLocation":"17941:3:62","nodeType":"VariableDeclaration","scope":12222,"src":"17933:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12214,"name":"uint256","nodeType":"ElementaryTypeName","src":"17933:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17910:35:62"},"returnParameters":{"id":12219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12218,"mutability":"mutable","name":"res","nameLocation":"17977:3:62","nodeType":"VariableDeclaration","scope":12222,"src":"17969:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12217,"name":"uint256","nodeType":"ElementaryTypeName","src":"17969:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17968:13:62"},"scope":12304,"src":"17883:197:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12234,"nodeType":"Block","src":"18384:98:62","statements":[{"AST":{"nativeSrc":"18403:73:62","nodeType":"YulBlock","src":"18403:73:62","statements":[{"nativeSrc":"18417:49:62","nodeType":"YulAssignment","src":"18417:49:62","value":{"arguments":[{"arguments":[{"arguments":[{"name":"arr","nativeSrc":"18438:3:62","nodeType":"YulIdentifier","src":"18438:3:62"},{"kind":"number","nativeSrc":"18443:4:62","nodeType":"YulLiteral","src":"18443:4:62","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18434:3:62","nodeType":"YulIdentifier","src":"18434:3:62"},"nativeSrc":"18434:14:62","nodeType":"YulFunctionCall","src":"18434:14:62"},{"arguments":[{"name":"pos","nativeSrc":"18454:3:62","nodeType":"YulIdentifier","src":"18454:3:62"},{"kind":"number","nativeSrc":"18459:4:62","nodeType":"YulLiteral","src":"18459:4:62","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"18450:3:62","nodeType":"YulIdentifier","src":"18450:3:62"},"nativeSrc":"18450:14:62","nodeType":"YulFunctionCall","src":"18450:14:62"}],"functionName":{"name":"add","nativeSrc":"18430:3:62","nodeType":"YulIdentifier","src":"18430:3:62"},"nativeSrc":"18430:35:62","nodeType":"YulFunctionCall","src":"18430:35:62"}],"functionName":{"name":"mload","nativeSrc":"18424:5:62","nodeType":"YulIdentifier","src":"18424:5:62"},"nativeSrc":"18424:42:62","nodeType":"YulFunctionCall","src":"18424:42:62"},"variableNames":[{"name":"res","nativeSrc":"18417:3:62","nodeType":"YulIdentifier","src":"18417:3:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12226,"isOffset":false,"isSlot":false,"src":"18438:3:62","valueSize":1},{"declaration":12228,"isOffset":false,"isSlot":false,"src":"18454:3:62","valueSize":1},{"declaration":12231,"isOffset":false,"isSlot":false,"src":"18417:3:62","valueSize":1}],"id":12233,"nodeType":"InlineAssembly","src":"18394:82:62"}]},"documentation":{"id":12223,"nodeType":"StructuredDocumentation","src":"18086:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12235,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeMemoryAccess","nameLocation":"18291:18:62","nodeType":"FunctionDefinition","parameters":{"id":12229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12226,"mutability":"mutable","name":"arr","nameLocation":"18325:3:62","nodeType":"VariableDeclaration","scope":12235,"src":"18310:18:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":12224,"name":"bytes","nodeType":"ElementaryTypeName","src":"18310:5:62","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":12225,"nodeType":"ArrayTypeName","src":"18310:7:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"},{"constant":false,"id":12228,"mutability":"mutable","name":"pos","nameLocation":"18338:3:62","nodeType":"VariableDeclaration","scope":12235,"src":"18330:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12227,"name":"uint256","nodeType":"ElementaryTypeName","src":"18330:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18309:33:62"},"returnParameters":{"id":12232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12231,"mutability":"mutable","name":"res","nameLocation":"18379:3:62","nodeType":"VariableDeclaration","scope":12235,"src":"18366:16:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":12230,"name":"bytes","nodeType":"ElementaryTypeName","src":"18366:5:62","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"18365:18:62"},"scope":12304,"src":"18282:200:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12247,"nodeType":"Block","src":"18788:98:62","statements":[{"AST":{"nativeSrc":"18807:73:62","nodeType":"YulBlock","src":"18807:73:62","statements":[{"nativeSrc":"18821:49:62","nodeType":"YulAssignment","src":"18821:49:62","value":{"arguments":[{"arguments":[{"arguments":[{"name":"arr","nativeSrc":"18842:3:62","nodeType":"YulIdentifier","src":"18842:3:62"},{"kind":"number","nativeSrc":"18847:4:62","nodeType":"YulLiteral","src":"18847:4:62","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18838:3:62","nodeType":"YulIdentifier","src":"18838:3:62"},"nativeSrc":"18838:14:62","nodeType":"YulFunctionCall","src":"18838:14:62"},{"arguments":[{"name":"pos","nativeSrc":"18858:3:62","nodeType":"YulIdentifier","src":"18858:3:62"},{"kind":"number","nativeSrc":"18863:4:62","nodeType":"YulLiteral","src":"18863:4:62","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"18854:3:62","nodeType":"YulIdentifier","src":"18854:3:62"},"nativeSrc":"18854:14:62","nodeType":"YulFunctionCall","src":"18854:14:62"}],"functionName":{"name":"add","nativeSrc":"18834:3:62","nodeType":"YulIdentifier","src":"18834:3:62"},"nativeSrc":"18834:35:62","nodeType":"YulFunctionCall","src":"18834:35:62"}],"functionName":{"name":"mload","nativeSrc":"18828:5:62","nodeType":"YulIdentifier","src":"18828:5:62"},"nativeSrc":"18828:42:62","nodeType":"YulFunctionCall","src":"18828:42:62"},"variableNames":[{"name":"res","nativeSrc":"18821:3:62","nodeType":"YulIdentifier","src":"18821:3:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12239,"isOffset":false,"isSlot":false,"src":"18842:3:62","valueSize":1},{"declaration":12241,"isOffset":false,"isSlot":false,"src":"18858:3:62","valueSize":1},{"declaration":12244,"isOffset":false,"isSlot":false,"src":"18821:3:62","valueSize":1}],"id":12246,"nodeType":"InlineAssembly","src":"18798:82:62"}]},"documentation":{"id":12236,"nodeType":"StructuredDocumentation","src":"18488:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12248,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeMemoryAccess","nameLocation":"18693:18:62","nodeType":"FunctionDefinition","parameters":{"id":12242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12239,"mutability":"mutable","name":"arr","nameLocation":"18728:3:62","nodeType":"VariableDeclaration","scope":12248,"src":"18712:19:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":12237,"name":"string","nodeType":"ElementaryTypeName","src":"18712:6:62","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":12238,"nodeType":"ArrayTypeName","src":"18712:8:62","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":12241,"mutability":"mutable","name":"pos","nameLocation":"18741:3:62","nodeType":"VariableDeclaration","scope":12248,"src":"18733:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12240,"name":"uint256","nodeType":"ElementaryTypeName","src":"18733:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18711:34:62"},"returnParameters":{"id":12245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12244,"mutability":"mutable","name":"res","nameLocation":"18783:3:62","nodeType":"VariableDeclaration","scope":12248,"src":"18769:17:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12243,"name":"string","nodeType":"ElementaryTypeName","src":"18769:6:62","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"18768:19:62"},"scope":12304,"src":"18684:202:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12258,"nodeType":"Block","src":"19202:88:62","statements":[{"AST":{"nativeSrc":"19237:47:62","nodeType":"YulBlock","src":"19237:47:62","statements":[{"expression":{"arguments":[{"name":"array.slot","nativeSrc":"19258:10:62","nodeType":"YulIdentifier","src":"19258:10:62"},{"name":"len","nativeSrc":"19270:3:62","nodeType":"YulIdentifier","src":"19270:3:62"}],"functionName":{"name":"sstore","nativeSrc":"19251:6:62","nodeType":"YulIdentifier","src":"19251:6:62"},"nativeSrc":"19251:23:62","nodeType":"YulFunctionCall","src":"19251:23:62"},"nativeSrc":"19251:23:62","nodeType":"YulExpressionStatement","src":"19251:23:62"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12252,"isOffset":false,"isSlot":true,"src":"19258:10:62","suffix":"slot","valueSize":1},{"declaration":12254,"isOffset":false,"isSlot":false,"src":"19270:3:62","valueSize":1}],"flags":["memory-safe"],"id":12257,"nodeType":"InlineAssembly","src":"19212:72:62"}]},"documentation":{"id":12249,"nodeType":"StructuredDocumentation","src":"18892:233:62","text":" @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."},"id":12259,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeSetLength","nameLocation":"19139:15:62","nodeType":"FunctionDefinition","parameters":{"id":12255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12252,"mutability":"mutable","name":"array","nameLocation":"19173:5:62","nodeType":"VariableDeclaration","scope":12259,"src":"19155:23:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":12250,"name":"address","nodeType":"ElementaryTypeName","src":"19155:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12251,"nodeType":"ArrayTypeName","src":"19155:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":12254,"mutability":"mutable","name":"len","nameLocation":"19188:3:62","nodeType":"VariableDeclaration","scope":12259,"src":"19180:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12253,"name":"uint256","nodeType":"ElementaryTypeName","src":"19180:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19154:38:62"},"returnParameters":{"id":12256,"nodeType":"ParameterList","parameters":[],"src":"19202:0:62"},"scope":12304,"src":"19130:160:62","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12269,"nodeType":"Block","src":"19606:88:62","statements":[{"AST":{"nativeSrc":"19641:47:62","nodeType":"YulBlock","src":"19641:47:62","statements":[{"expression":{"arguments":[{"name":"array.slot","nativeSrc":"19662:10:62","nodeType":"YulIdentifier","src":"19662:10:62"},{"name":"len","nativeSrc":"19674:3:62","nodeType":"YulIdentifier","src":"19674:3:62"}],"functionName":{"name":"sstore","nativeSrc":"19655:6:62","nodeType":"YulIdentifier","src":"19655:6:62"},"nativeSrc":"19655:23:62","nodeType":"YulFunctionCall","src":"19655:23:62"},"nativeSrc":"19655:23:62","nodeType":"YulExpressionStatement","src":"19655:23:62"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12263,"isOffset":false,"isSlot":true,"src":"19662:10:62","suffix":"slot","valueSize":1},{"declaration":12265,"isOffset":false,"isSlot":false,"src":"19674:3:62","valueSize":1}],"flags":["memory-safe"],"id":12268,"nodeType":"InlineAssembly","src":"19616:72:62"}]},"documentation":{"id":12260,"nodeType":"StructuredDocumentation","src":"19296:233:62","text":" @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."},"id":12270,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeSetLength","nameLocation":"19543:15:62","nodeType":"FunctionDefinition","parameters":{"id":12266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12263,"mutability":"mutable","name":"array","nameLocation":"19577:5:62","nodeType":"VariableDeclaration","scope":12270,"src":"19559:23:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":12261,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19559:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12262,"nodeType":"ArrayTypeName","src":"19559:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":12265,"mutability":"mutable","name":"len","nameLocation":"19592:3:62","nodeType":"VariableDeclaration","scope":12270,"src":"19584:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12264,"name":"uint256","nodeType":"ElementaryTypeName","src":"19584:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19558:38:62"},"returnParameters":{"id":12267,"nodeType":"ParameterList","parameters":[],"src":"19606:0:62"},"scope":12304,"src":"19534:160:62","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12280,"nodeType":"Block","src":"20010:88:62","statements":[{"AST":{"nativeSrc":"20045:47:62","nodeType":"YulBlock","src":"20045:47:62","statements":[{"expression":{"arguments":[{"name":"array.slot","nativeSrc":"20066:10:62","nodeType":"YulIdentifier","src":"20066:10:62"},{"name":"len","nativeSrc":"20078:3:62","nodeType":"YulIdentifier","src":"20078:3:62"}],"functionName":{"name":"sstore","nativeSrc":"20059:6:62","nodeType":"YulIdentifier","src":"20059:6:62"},"nativeSrc":"20059:23:62","nodeType":"YulFunctionCall","src":"20059:23:62"},"nativeSrc":"20059:23:62","nodeType":"YulExpressionStatement","src":"20059:23:62"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12274,"isOffset":false,"isSlot":true,"src":"20066:10:62","suffix":"slot","valueSize":1},{"declaration":12276,"isOffset":false,"isSlot":false,"src":"20078:3:62","valueSize":1}],"flags":["memory-safe"],"id":12279,"nodeType":"InlineAssembly","src":"20020:72:62"}]},"documentation":{"id":12271,"nodeType":"StructuredDocumentation","src":"19700:233:62","text":" @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."},"id":12281,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeSetLength","nameLocation":"19947:15:62","nodeType":"FunctionDefinition","parameters":{"id":12277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12274,"mutability":"mutable","name":"array","nameLocation":"19981:5:62","nodeType":"VariableDeclaration","scope":12281,"src":"19963:23:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12272,"name":"uint256","nodeType":"ElementaryTypeName","src":"19963:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12273,"nodeType":"ArrayTypeName","src":"19963:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12276,"mutability":"mutable","name":"len","nameLocation":"19996:3:62","nodeType":"VariableDeclaration","scope":12281,"src":"19988:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12275,"name":"uint256","nodeType":"ElementaryTypeName","src":"19988:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19962:38:62"},"returnParameters":{"id":12278,"nodeType":"ParameterList","parameters":[],"src":"20010:0:62"},"scope":12304,"src":"19938:160:62","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12291,"nodeType":"Block","src":"20412:88:62","statements":[{"AST":{"nativeSrc":"20447:47:62","nodeType":"YulBlock","src":"20447:47:62","statements":[{"expression":{"arguments":[{"name":"array.slot","nativeSrc":"20468:10:62","nodeType":"YulIdentifier","src":"20468:10:62"},{"name":"len","nativeSrc":"20480:3:62","nodeType":"YulIdentifier","src":"20480:3:62"}],"functionName":{"name":"sstore","nativeSrc":"20461:6:62","nodeType":"YulIdentifier","src":"20461:6:62"},"nativeSrc":"20461:23:62","nodeType":"YulFunctionCall","src":"20461:23:62"},"nativeSrc":"20461:23:62","nodeType":"YulExpressionStatement","src":"20461:23:62"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12285,"isOffset":false,"isSlot":true,"src":"20468:10:62","suffix":"slot","valueSize":1},{"declaration":12287,"isOffset":false,"isSlot":false,"src":"20480:3:62","valueSize":1}],"flags":["memory-safe"],"id":12290,"nodeType":"InlineAssembly","src":"20422:72:62"}]},"documentation":{"id":12282,"nodeType":"StructuredDocumentation","src":"20104:233:62","text":" @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."},"id":12292,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeSetLength","nameLocation":"20351:15:62","nodeType":"FunctionDefinition","parameters":{"id":12288,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12285,"mutability":"mutable","name":"array","nameLocation":"20383:5:62","nodeType":"VariableDeclaration","scope":12292,"src":"20367:21:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":12283,"name":"bytes","nodeType":"ElementaryTypeName","src":"20367:5:62","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":12284,"nodeType":"ArrayTypeName","src":"20367:7:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"},{"constant":false,"id":12287,"mutability":"mutable","name":"len","nameLocation":"20398:3:62","nodeType":"VariableDeclaration","scope":12292,"src":"20390:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12286,"name":"uint256","nodeType":"ElementaryTypeName","src":"20390:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20366:36:62"},"returnParameters":{"id":12289,"nodeType":"ParameterList","parameters":[],"src":"20412:0:62"},"scope":12304,"src":"20342:158:62","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12302,"nodeType":"Block","src":"20815:88:62","statements":[{"AST":{"nativeSrc":"20850:47:62","nodeType":"YulBlock","src":"20850:47:62","statements":[{"expression":{"arguments":[{"name":"array.slot","nativeSrc":"20871:10:62","nodeType":"YulIdentifier","src":"20871:10:62"},{"name":"len","nativeSrc":"20883:3:62","nodeType":"YulIdentifier","src":"20883:3:62"}],"functionName":{"name":"sstore","nativeSrc":"20864:6:62","nodeType":"YulIdentifier","src":"20864:6:62"},"nativeSrc":"20864:23:62","nodeType":"YulFunctionCall","src":"20864:23:62"},"nativeSrc":"20864:23:62","nodeType":"YulExpressionStatement","src":"20864:23:62"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12296,"isOffset":false,"isSlot":true,"src":"20871:10:62","suffix":"slot","valueSize":1},{"declaration":12298,"isOffset":false,"isSlot":false,"src":"20883:3:62","valueSize":1}],"flags":["memory-safe"],"id":12301,"nodeType":"InlineAssembly","src":"20825:72:62"}]},"documentation":{"id":12293,"nodeType":"StructuredDocumentation","src":"20506:233:62","text":" @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."},"id":12303,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeSetLength","nameLocation":"20753:15:62","nodeType":"FunctionDefinition","parameters":{"id":12299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12296,"mutability":"mutable","name":"array","nameLocation":"20786:5:62","nodeType":"VariableDeclaration","scope":12303,"src":"20769:22:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":12294,"name":"string","nodeType":"ElementaryTypeName","src":"20769:6:62","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":12295,"nodeType":"ArrayTypeName","src":"20769:8:62","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":12298,"mutability":"mutable","name":"len","nameLocation":"20801:3:62","nodeType":"VariableDeclaration","scope":12303,"src":"20793:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12297,"name":"uint256","nodeType":"ElementaryTypeName","src":"20793:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20768:37:62"},"returnParameters":{"id":12300,"nodeType":"ParameterList","parameters":[],"src":"20815:0:62"},"scope":12304,"src":"20744:159:62","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":12305,"src":"459:20446:62","usedErrors":[],"usedEvents":[]}],"src":"183:20723:62"},"id":62},"@openzeppelin/contracts/utils/Comparators.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Comparators.sol","exportedSymbols":{"Comparators":[12336]},"id":12337,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12306,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"105:24:63"},{"abstract":false,"baseContracts":[],"canonicalName":"Comparators","contractDependencies":[],"contractKind":"library","documentation":{"id":12307,"nodeType":"StructuredDocumentation","src":"131:92:63","text":" @dev Provides a set of functions to compare values.\n _Available since v5.1._"},"fullyImplemented":true,"id":12336,"linearizedBaseContracts":[12336],"name":"Comparators","nameLocation":"232:11:63","nodeType":"ContractDefinition","nodes":[{"body":{"id":12320,"nodeType":"Block","src":"313:29:63","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12316,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12309,"src":"330:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":12317,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12311,"src":"334:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"330:5:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12315,"id":12319,"nodeType":"Return","src":"323:12:63"}]},"id":12321,"implemented":true,"kind":"function","modifiers":[],"name":"lt","nameLocation":"259:2:63","nodeType":"FunctionDefinition","parameters":{"id":12312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12309,"mutability":"mutable","name":"a","nameLocation":"270:1:63","nodeType":"VariableDeclaration","scope":12321,"src":"262:9:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12308,"name":"uint256","nodeType":"ElementaryTypeName","src":"262:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12311,"mutability":"mutable","name":"b","nameLocation":"281:1:63","nodeType":"VariableDeclaration","scope":12321,"src":"273:9:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12310,"name":"uint256","nodeType":"ElementaryTypeName","src":"273:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"261:22:63"},"returnParameters":{"id":12315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12314,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12321,"src":"307:4:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12313,"name":"bool","nodeType":"ElementaryTypeName","src":"307:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"306:6:63"},"scope":12336,"src":"250:92:63","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12334,"nodeType":"Block","src":"411:29:63","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12330,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12323,"src":"428:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":12331,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12325,"src":"432:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"428:5:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12329,"id":12333,"nodeType":"Return","src":"421:12:63"}]},"id":12335,"implemented":true,"kind":"function","modifiers":[],"name":"gt","nameLocation":"357:2:63","nodeType":"FunctionDefinition","parameters":{"id":12326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12323,"mutability":"mutable","name":"a","nameLocation":"368:1:63","nodeType":"VariableDeclaration","scope":12335,"src":"360:9:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12322,"name":"uint256","nodeType":"ElementaryTypeName","src":"360:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12325,"mutability":"mutable","name":"b","nameLocation":"379:1:63","nodeType":"VariableDeclaration","scope":12335,"src":"371:9:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12324,"name":"uint256","nodeType":"ElementaryTypeName","src":"371:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"359:22:63"},"returnParameters":{"id":12329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12328,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12335,"src":"405:4:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12327,"name":"bool","nodeType":"ElementaryTypeName","src":"405:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"404:6:63"},"scope":12336,"src":"348:92:63","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":12337,"src":"224:218:63","usedErrors":[],"usedEvents":[]}],"src":"105:338:63"},"id":63},"@openzeppelin/contracts/utils/Context.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","exportedSymbols":{"Context":[12366]},"id":12367,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12338,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:64"},{"abstract":true,"baseContracts":[],"canonicalName":"Context","contractDependencies":[],"contractKind":"contract","documentation":{"id":12339,"nodeType":"StructuredDocumentation","src":"127:496:64","text":" @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."},"fullyImplemented":true,"id":12366,"linearizedBaseContracts":[12366],"name":"Context","nameLocation":"642:7:64","nodeType":"ContractDefinition","nodes":[{"body":{"id":12347,"nodeType":"Block","src":"718:34:64","statements":[{"expression":{"expression":{"id":12344,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"735:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"739:6:64","memberName":"sender","nodeType":"MemberAccess","src":"735:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":12343,"id":12346,"nodeType":"Return","src":"728:17:64"}]},"id":12348,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"665:10:64","nodeType":"FunctionDefinition","parameters":{"id":12340,"nodeType":"ParameterList","parameters":[],"src":"675:2:64"},"returnParameters":{"id":12343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12342,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12348,"src":"709:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12341,"name":"address","nodeType":"ElementaryTypeName","src":"709:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"708:9:64"},"scope":12366,"src":"656:96:64","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":12356,"nodeType":"Block","src":"825:32:64","statements":[{"expression":{"expression":{"id":12353,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"842:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"846:4:64","memberName":"data","nodeType":"MemberAccess","src":"842:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":12352,"id":12355,"nodeType":"Return","src":"835:15:64"}]},"id":12357,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"767:8:64","nodeType":"FunctionDefinition","parameters":{"id":12349,"nodeType":"ParameterList","parameters":[],"src":"775:2:64"},"returnParameters":{"id":12352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12351,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12357,"src":"809:14:64","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":12350,"name":"bytes","nodeType":"ElementaryTypeName","src":"809:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"808:16:64"},"scope":12366,"src":"758:99:64","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":12364,"nodeType":"Block","src":"935:25:64","statements":[{"expression":{"hexValue":"30","id":12362,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"952:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":12361,"id":12363,"nodeType":"Return","src":"945:8:64"}]},"id":12365,"implemented":true,"kind":"function","modifiers":[],"name":"_contextSuffixLength","nameLocation":"872:20:64","nodeType":"FunctionDefinition","parameters":{"id":12358,"nodeType":"ParameterList","parameters":[],"src":"892:2:64"},"returnParameters":{"id":12361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12360,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12365,"src":"926:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12359,"name":"uint256","nodeType":"ElementaryTypeName","src":"926:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"925:9:64"},"scope":12366,"src":"863:97:64","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":12367,"src":"624:338:64","usedErrors":[],"usedEvents":[]}],"src":"101:862:64"},"id":64},"@openzeppelin/contracts/utils/Errors.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Errors.sol","exportedSymbols":{"Errors":[12388]},"id":12389,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12368,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"100:24:65"},{"abstract":false,"baseContracts":[],"canonicalName":"Errors","contractDependencies":[],"contractKind":"library","documentation":{"id":12369,"nodeType":"StructuredDocumentation","src":"126:284:65","text":" @dev Collection of common custom errors used in multiple contracts\n IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n It is recommended to avoid relying on the error API for critical functionality.\n _Available since v5.1._"},"fullyImplemented":true,"id":12388,"linearizedBaseContracts":[12388],"name":"Errors","nameLocation":"419:6:65","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":12370,"nodeType":"StructuredDocumentation","src":"432:94:65","text":" @dev The ETH balance of the account is not enough to perform the operation."},"errorSelector":"cf479181","id":12376,"name":"InsufficientBalance","nameLocation":"537:19:65","nodeType":"ErrorDefinition","parameters":{"id":12375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12372,"mutability":"mutable","name":"balance","nameLocation":"565:7:65","nodeType":"VariableDeclaration","scope":12376,"src":"557:15:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12371,"name":"uint256","nodeType":"ElementaryTypeName","src":"557:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12374,"mutability":"mutable","name":"needed","nameLocation":"582:6:65","nodeType":"VariableDeclaration","scope":12376,"src":"574:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12373,"name":"uint256","nodeType":"ElementaryTypeName","src":"574:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"556:33:65"},"src":"531:59:65"},{"documentation":{"id":12377,"nodeType":"StructuredDocumentation","src":"596:89:65","text":" @dev A call to an address target failed. The target may have reverted."},"errorSelector":"d6bda275","id":12379,"name":"FailedCall","nameLocation":"696:10:65","nodeType":"ErrorDefinition","parameters":{"id":12378,"nodeType":"ParameterList","parameters":[],"src":"706:2:65"},"src":"690:19:65"},{"documentation":{"id":12380,"nodeType":"StructuredDocumentation","src":"715:46:65","text":" @dev The deployment failed."},"errorSelector":"b06ebf3d","id":12382,"name":"FailedDeployment","nameLocation":"772:16:65","nodeType":"ErrorDefinition","parameters":{"id":12381,"nodeType":"ParameterList","parameters":[],"src":"788:2:65"},"src":"766:25:65"},{"documentation":{"id":12383,"nodeType":"StructuredDocumentation","src":"797:58:65","text":" @dev A necessary precompile is missing."},"errorSelector":"42b01bce","id":12387,"name":"MissingPrecompile","nameLocation":"866:17:65","nodeType":"ErrorDefinition","parameters":{"id":12386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12385,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12387,"src":"884:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12384,"name":"address","nodeType":"ElementaryTypeName","src":"884:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"883:9:65"},"src":"860:33:65"}],"scope":12389,"src":"411:484:65","usedErrors":[12376,12379,12382,12387],"usedEvents":[]}],"src":"100:796:65"},"id":65},"@openzeppelin/contracts/utils/Panic.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Panic.sol","exportedSymbols":{"Panic":[12440]},"id":12441,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12390,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"99:24:66"},{"abstract":false,"baseContracts":[],"canonicalName":"Panic","contractDependencies":[],"contractKind":"library","documentation":{"id":12391,"nodeType":"StructuredDocumentation","src":"125:489:66","text":" @dev Helper library for emitting standardized panic codes.\n ```solidity\n contract Example {\n using Panic for uint256;\n // Use any of the declared internal constants\n function foo() { Panic.GENERIC.panic(); }\n // Alternatively\n function foo() { Panic.panic(Panic.GENERIC); }\n }\n ```\n Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].\n _Available since v5.1._"},"fullyImplemented":true,"id":12440,"linearizedBaseContracts":[12440],"name":"Panic","nameLocation":"665:5:66","nodeType":"ContractDefinition","nodes":[{"constant":true,"documentation":{"id":12392,"nodeType":"StructuredDocumentation","src":"677:36:66","text":"@dev generic / unspecified error"},"id":12395,"mutability":"constant","name":"GENERIC","nameLocation":"744:7:66","nodeType":"VariableDeclaration","scope":12440,"src":"718:40:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12393,"name":"uint256","nodeType":"ElementaryTypeName","src":"718:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783030","id":12394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"754:4:66","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0x00"},"visibility":"internal"},{"constant":true,"documentation":{"id":12396,"nodeType":"StructuredDocumentation","src":"764:37:66","text":"@dev used by the assert() builtin"},"id":12399,"mutability":"constant","name":"ASSERT","nameLocation":"832:6:66","nodeType":"VariableDeclaration","scope":12440,"src":"806:39:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12397,"name":"uint256","nodeType":"ElementaryTypeName","src":"806:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783031","id":12398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"841:4:66","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x01"},"visibility":"internal"},{"constant":true,"documentation":{"id":12400,"nodeType":"StructuredDocumentation","src":"851:41:66","text":"@dev arithmetic underflow or overflow"},"id":12403,"mutability":"constant","name":"UNDER_OVERFLOW","nameLocation":"923:14:66","nodeType":"VariableDeclaration","scope":12440,"src":"897:47:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12401,"name":"uint256","nodeType":"ElementaryTypeName","src":"897:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783131","id":12402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"940:4:66","typeDescriptions":{"typeIdentifier":"t_rational_17_by_1","typeString":"int_const 17"},"value":"0x11"},"visibility":"internal"},{"constant":true,"documentation":{"id":12404,"nodeType":"StructuredDocumentation","src":"950:35:66","text":"@dev division or modulo by zero"},"id":12407,"mutability":"constant","name":"DIVISION_BY_ZERO","nameLocation":"1016:16:66","nodeType":"VariableDeclaration","scope":12440,"src":"990:49:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12405,"name":"uint256","nodeType":"ElementaryTypeName","src":"990:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783132","id":12406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1035:4:66","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"0x12"},"visibility":"internal"},{"constant":true,"documentation":{"id":12408,"nodeType":"StructuredDocumentation","src":"1045:30:66","text":"@dev enum conversion error"},"id":12411,"mutability":"constant","name":"ENUM_CONVERSION_ERROR","nameLocation":"1106:21:66","nodeType":"VariableDeclaration","scope":12440,"src":"1080:54:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12409,"name":"uint256","nodeType":"ElementaryTypeName","src":"1080:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783231","id":12410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1130:4:66","typeDescriptions":{"typeIdentifier":"t_rational_33_by_1","typeString":"int_const 33"},"value":"0x21"},"visibility":"internal"},{"constant":true,"documentation":{"id":12412,"nodeType":"StructuredDocumentation","src":"1140:36:66","text":"@dev invalid encoding in storage"},"id":12415,"mutability":"constant","name":"STORAGE_ENCODING_ERROR","nameLocation":"1207:22:66","nodeType":"VariableDeclaration","scope":12440,"src":"1181:55:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12413,"name":"uint256","nodeType":"ElementaryTypeName","src":"1181:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783232","id":12414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1232:4:66","typeDescriptions":{"typeIdentifier":"t_rational_34_by_1","typeString":"int_const 34"},"value":"0x22"},"visibility":"internal"},{"constant":true,"documentation":{"id":12416,"nodeType":"StructuredDocumentation","src":"1242:24:66","text":"@dev empty array pop"},"id":12419,"mutability":"constant","name":"EMPTY_ARRAY_POP","nameLocation":"1297:15:66","nodeType":"VariableDeclaration","scope":12440,"src":"1271:48:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12417,"name":"uint256","nodeType":"ElementaryTypeName","src":"1271:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783331","id":12418,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1315:4:66","typeDescriptions":{"typeIdentifier":"t_rational_49_by_1","typeString":"int_const 49"},"value":"0x31"},"visibility":"internal"},{"constant":true,"documentation":{"id":12420,"nodeType":"StructuredDocumentation","src":"1325:35:66","text":"@dev array out of bounds access"},"id":12423,"mutability":"constant","name":"ARRAY_OUT_OF_BOUNDS","nameLocation":"1391:19:66","nodeType":"VariableDeclaration","scope":12440,"src":"1365:52:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12421,"name":"uint256","nodeType":"ElementaryTypeName","src":"1365:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783332","id":12422,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1413:4:66","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"0x32"},"visibility":"internal"},{"constant":true,"documentation":{"id":12424,"nodeType":"StructuredDocumentation","src":"1423:65:66","text":"@dev resource error (too large allocation or too large array)"},"id":12427,"mutability":"constant","name":"RESOURCE_ERROR","nameLocation":"1519:14:66","nodeType":"VariableDeclaration","scope":12440,"src":"1493:47:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12425,"name":"uint256","nodeType":"ElementaryTypeName","src":"1493:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783431","id":12426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1536:4:66","typeDescriptions":{"typeIdentifier":"t_rational_65_by_1","typeString":"int_const 65"},"value":"0x41"},"visibility":"internal"},{"constant":true,"documentation":{"id":12428,"nodeType":"StructuredDocumentation","src":"1546:42:66","text":"@dev calling invalid internal function"},"id":12431,"mutability":"constant","name":"INVALID_INTERNAL_FUNCTION","nameLocation":"1619:25:66","nodeType":"VariableDeclaration","scope":12440,"src":"1593:58:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12429,"name":"uint256","nodeType":"ElementaryTypeName","src":"1593:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783531","id":12430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1647:4:66","typeDescriptions":{"typeIdentifier":"t_rational_81_by_1","typeString":"int_const 81"},"value":"0x51"},"visibility":"internal"},{"body":{"id":12438,"nodeType":"Block","src":"1819:151:66","statements":[{"AST":{"nativeSrc":"1854:110:66","nodeType":"YulBlock","src":"1854:110:66","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1875:4:66","nodeType":"YulLiteral","src":"1875:4:66","type":"","value":"0x00"},{"kind":"number","nativeSrc":"1881:10:66","nodeType":"YulLiteral","src":"1881:10:66","type":"","value":"0x4e487b71"}],"functionName":{"name":"mstore","nativeSrc":"1868:6:66","nodeType":"YulIdentifier","src":"1868:6:66"},"nativeSrc":"1868:24:66","nodeType":"YulFunctionCall","src":"1868:24:66"},"nativeSrc":"1868:24:66","nodeType":"YulExpressionStatement","src":"1868:24:66"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1912:4:66","nodeType":"YulLiteral","src":"1912:4:66","type":"","value":"0x20"},{"name":"code","nativeSrc":"1918:4:66","nodeType":"YulIdentifier","src":"1918:4:66"}],"functionName":{"name":"mstore","nativeSrc":"1905:6:66","nodeType":"YulIdentifier","src":"1905:6:66"},"nativeSrc":"1905:18:66","nodeType":"YulFunctionCall","src":"1905:18:66"},"nativeSrc":"1905:18:66","nodeType":"YulExpressionStatement","src":"1905:18:66"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1943:4:66","nodeType":"YulLiteral","src":"1943:4:66","type":"","value":"0x1c"},{"kind":"number","nativeSrc":"1949:4:66","nodeType":"YulLiteral","src":"1949:4:66","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"1936:6:66","nodeType":"YulIdentifier","src":"1936:6:66"},"nativeSrc":"1936:18:66","nodeType":"YulFunctionCall","src":"1936:18:66"},"nativeSrc":"1936:18:66","nodeType":"YulExpressionStatement","src":"1936:18:66"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12434,"isOffset":false,"isSlot":false,"src":"1918:4:66","valueSize":1}],"flags":["memory-safe"],"id":12437,"nodeType":"InlineAssembly","src":"1829:135:66"}]},"documentation":{"id":12432,"nodeType":"StructuredDocumentation","src":"1658:113:66","text":"@dev Reverts with a panic code. Recommended to use with\n the internal constants with predefined codes."},"id":12439,"implemented":true,"kind":"function","modifiers":[],"name":"panic","nameLocation":"1785:5:66","nodeType":"FunctionDefinition","parameters":{"id":12435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12434,"mutability":"mutable","name":"code","nameLocation":"1799:4:66","nodeType":"VariableDeclaration","scope":12439,"src":"1791:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12433,"name":"uint256","nodeType":"ElementaryTypeName","src":"1791:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1790:14:66"},"returnParameters":{"id":12436,"nodeType":"ParameterList","parameters":[],"src":"1819:0:66"},"scope":12440,"src":"1776:194:66","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":12441,"src":"657:1315:66","usedErrors":[],"usedEvents":[]}],"src":"99:1874:66"},"id":66},"@openzeppelin/contracts/utils/SlotDerivation.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/SlotDerivation.sol","exportedSymbols":{"SlotDerivation":[12570]},"id":12571,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12442,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"199:24:67"},{"abstract":false,"baseContracts":[],"canonicalName":"SlotDerivation","contractDependencies":[],"contractKind":"library","documentation":{"id":12443,"nodeType":"StructuredDocumentation","src":"225:1373:67","text":" @dev Library for computing storage (and transient storage) locations from namespaces and deriving slots\n corresponding to standard patterns. The derivation method for array and mapping matches the storage layout used by\n the solidity language / compiler.\n See https://docs.soliditylang.org/en/v0.8.20/internals/layout_in_storage.html#mappings-and-dynamic-arrays[Solidity docs for mappings and dynamic arrays.].\n Example usage:\n ```solidity\n contract Example {\n // Add the library methods\n using StorageSlot for bytes32;\n using SlotDerivation for bytes32;\n // Declare a namespace\n string private constant _NAMESPACE = \"\"; // eg. OpenZeppelin.Slot\n function setValueInNamespace(uint256 key, address newValue) internal {\n _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value = newValue;\n }\n function getValueInNamespace(uint256 key) internal view returns (address) {\n return _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value;\n }\n }\n ```\n TIP: Consider using this library along with {StorageSlot}.\n NOTE: This library provides a way to manipulate storage locations in a non-standard way. Tooling for checking\n upgrade safety will ignore the slots accessed through this library.\n _Available since v5.1._"},"fullyImplemented":true,"id":12570,"linearizedBaseContracts":[12570],"name":"SlotDerivation","nameLocation":"1607:14:67","nodeType":"ContractDefinition","nodes":[{"body":{"id":12452,"nodeType":"Block","src":"1790:194:67","statements":[{"AST":{"nativeSrc":"1825:153:67","nodeType":"YulBlock","src":"1825:153:67","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1846:4:67","nodeType":"YulLiteral","src":"1846:4:67","type":"","value":"0x00"},{"arguments":[{"arguments":[{"arguments":[{"name":"namespace","nativeSrc":"1870:9:67","nodeType":"YulIdentifier","src":"1870:9:67"},{"kind":"number","nativeSrc":"1881:4:67","nodeType":"YulLiteral","src":"1881:4:67","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1866:3:67","nodeType":"YulIdentifier","src":"1866:3:67"},"nativeSrc":"1866:20:67","nodeType":"YulFunctionCall","src":"1866:20:67"},{"arguments":[{"name":"namespace","nativeSrc":"1894:9:67","nodeType":"YulIdentifier","src":"1894:9:67"}],"functionName":{"name":"mload","nativeSrc":"1888:5:67","nodeType":"YulIdentifier","src":"1888:5:67"},"nativeSrc":"1888:16:67","nodeType":"YulFunctionCall","src":"1888:16:67"}],"functionName":{"name":"keccak256","nativeSrc":"1856:9:67","nodeType":"YulIdentifier","src":"1856:9:67"},"nativeSrc":"1856:49:67","nodeType":"YulFunctionCall","src":"1856:49:67"},{"kind":"number","nativeSrc":"1907:1:67","nodeType":"YulLiteral","src":"1907:1:67","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1852:3:67","nodeType":"YulIdentifier","src":"1852:3:67"},"nativeSrc":"1852:57:67","nodeType":"YulFunctionCall","src":"1852:57:67"}],"functionName":{"name":"mstore","nativeSrc":"1839:6:67","nodeType":"YulIdentifier","src":"1839:6:67"},"nativeSrc":"1839:71:67","nodeType":"YulFunctionCall","src":"1839:71:67"},"nativeSrc":"1839:71:67","nodeType":"YulExpressionStatement","src":"1839:71:67"},{"nativeSrc":"1923:45:67","nodeType":"YulAssignment","src":"1923:45:67","value":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"1945:4:67","nodeType":"YulLiteral","src":"1945:4:67","type":"","value":"0x00"},{"kind":"number","nativeSrc":"1951:4:67","nodeType":"YulLiteral","src":"1951:4:67","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nativeSrc":"1935:9:67","nodeType":"YulIdentifier","src":"1935:9:67"},"nativeSrc":"1935:21:67","nodeType":"YulFunctionCall","src":"1935:21:67"},{"arguments":[{"kind":"number","nativeSrc":"1962:4:67","nodeType":"YulLiteral","src":"1962:4:67","type":"","value":"0xff"}],"functionName":{"name":"not","nativeSrc":"1958:3:67","nodeType":"YulIdentifier","src":"1958:3:67"},"nativeSrc":"1958:9:67","nodeType":"YulFunctionCall","src":"1958:9:67"}],"functionName":{"name":"and","nativeSrc":"1931:3:67","nodeType":"YulIdentifier","src":"1931:3:67"},"nativeSrc":"1931:37:67","nodeType":"YulFunctionCall","src":"1931:37:67"},"variableNames":[{"name":"slot","nativeSrc":"1923:4:67","nodeType":"YulIdentifier","src":"1923:4:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12446,"isOffset":false,"isSlot":false,"src":"1870:9:67","valueSize":1},{"declaration":12446,"isOffset":false,"isSlot":false,"src":"1894:9:67","valueSize":1},{"declaration":12449,"isOffset":false,"isSlot":false,"src":"1923:4:67","valueSize":1}],"flags":["memory-safe"],"id":12451,"nodeType":"InlineAssembly","src":"1800:178:67"}]},"documentation":{"id":12444,"nodeType":"StructuredDocumentation","src":"1628:74:67","text":" @dev Derive an ERC-7201 slot from a string (namespace)."},"id":12453,"implemented":true,"kind":"function","modifiers":[],"name":"erc7201Slot","nameLocation":"1716:11:67","nodeType":"FunctionDefinition","parameters":{"id":12447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12446,"mutability":"mutable","name":"namespace","nameLocation":"1742:9:67","nodeType":"VariableDeclaration","scope":12453,"src":"1728:23:67","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12445,"name":"string","nodeType":"ElementaryTypeName","src":"1728:6:67","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1727:25:67"},"returnParameters":{"id":12450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12449,"mutability":"mutable","name":"slot","nameLocation":"1784:4:67","nodeType":"VariableDeclaration","scope":12453,"src":"1776:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12448,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1776:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1775:14:67"},"scope":12570,"src":"1707:277:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12474,"nodeType":"Block","src":"2176:86:67","statements":[{"id":12473,"nodeType":"UncheckedBlock","src":"2186:70:67","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":12467,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12456,"src":"2233:4:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12466,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2225:7:67","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12465,"name":"uint256","nodeType":"ElementaryTypeName","src":"2225:7:67","typeDescriptions":{}}},"id":12468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2225:13:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":12469,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12458,"src":"2241:3:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2225:19:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12464,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2217:7:67","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":12463,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2217:7:67","typeDescriptions":{}}},"id":12471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2217:28:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":12462,"id":12472,"nodeType":"Return","src":"2210:35:67"}]}]},"documentation":{"id":12454,"nodeType":"StructuredDocumentation","src":"1990:99:67","text":" @dev Add an offset to a slot to get the n-th element of a structure or an array."},"id":12475,"implemented":true,"kind":"function","modifiers":[],"name":"offset","nameLocation":"2103:6:67","nodeType":"FunctionDefinition","parameters":{"id":12459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12456,"mutability":"mutable","name":"slot","nameLocation":"2118:4:67","nodeType":"VariableDeclaration","scope":12475,"src":"2110:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12455,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2110:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12458,"mutability":"mutable","name":"pos","nameLocation":"2132:3:67","nodeType":"VariableDeclaration","scope":12475,"src":"2124:11:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12457,"name":"uint256","nodeType":"ElementaryTypeName","src":"2124:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2109:27:67"},"returnParameters":{"id":12462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12461,"mutability":"mutable","name":"result","nameLocation":"2168:6:67","nodeType":"VariableDeclaration","scope":12475,"src":"2160:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12460,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2160:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2159:16:67"},"scope":12570,"src":"2094:168:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12484,"nodeType":"Block","src":"2465:127:67","statements":[{"AST":{"nativeSrc":"2500:86:67","nodeType":"YulBlock","src":"2500:86:67","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2521:4:67","nodeType":"YulLiteral","src":"2521:4:67","type":"","value":"0x00"},{"name":"slot","nativeSrc":"2527:4:67","nodeType":"YulIdentifier","src":"2527:4:67"}],"functionName":{"name":"mstore","nativeSrc":"2514:6:67","nodeType":"YulIdentifier","src":"2514:6:67"},"nativeSrc":"2514:18:67","nodeType":"YulFunctionCall","src":"2514:18:67"},"nativeSrc":"2514:18:67","nodeType":"YulExpressionStatement","src":"2514:18:67"},{"nativeSrc":"2545:31:67","nodeType":"YulAssignment","src":"2545:31:67","value":{"arguments":[{"kind":"number","nativeSrc":"2565:4:67","nodeType":"YulLiteral","src":"2565:4:67","type":"","value":"0x00"},{"kind":"number","nativeSrc":"2571:4:67","nodeType":"YulLiteral","src":"2571:4:67","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nativeSrc":"2555:9:67","nodeType":"YulIdentifier","src":"2555:9:67"},"nativeSrc":"2555:21:67","nodeType":"YulFunctionCall","src":"2555:21:67"},"variableNames":[{"name":"result","nativeSrc":"2545:6:67","nodeType":"YulIdentifier","src":"2545:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12481,"isOffset":false,"isSlot":false,"src":"2545:6:67","valueSize":1},{"declaration":12478,"isOffset":false,"isSlot":false,"src":"2527:4:67","valueSize":1}],"flags":["memory-safe"],"id":12483,"nodeType":"InlineAssembly","src":"2475:111:67"}]},"documentation":{"id":12476,"nodeType":"StructuredDocumentation","src":"2268:118:67","text":" @dev Derive the location of the first element in an array from the slot where the length is stored."},"id":12485,"implemented":true,"kind":"function","modifiers":[],"name":"deriveArray","nameLocation":"2400:11:67","nodeType":"FunctionDefinition","parameters":{"id":12479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12478,"mutability":"mutable","name":"slot","nameLocation":"2420:4:67","nodeType":"VariableDeclaration","scope":12485,"src":"2412:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12477,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2412:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2411:14:67"},"returnParameters":{"id":12482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12481,"mutability":"mutable","name":"result","nameLocation":"2457:6:67","nodeType":"VariableDeclaration","scope":12485,"src":"2449:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12480,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2449:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2448:16:67"},"scope":12570,"src":"2391:201:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12496,"nodeType":"Block","src":"2770:179:67","statements":[{"AST":{"nativeSrc":"2805:138:67","nodeType":"YulBlock","src":"2805:138:67","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2826:4:67","nodeType":"YulLiteral","src":"2826:4:67","type":"","value":"0x00"},{"arguments":[{"name":"key","nativeSrc":"2836:3:67","nodeType":"YulIdentifier","src":"2836:3:67"},{"arguments":[{"kind":"number","nativeSrc":"2845:2:67","nodeType":"YulLiteral","src":"2845:2:67","type":"","value":"96"},{"arguments":[{"kind":"number","nativeSrc":"2853:1:67","nodeType":"YulLiteral","src":"2853:1:67","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"2849:3:67","nodeType":"YulIdentifier","src":"2849:3:67"},"nativeSrc":"2849:6:67","nodeType":"YulFunctionCall","src":"2849:6:67"}],"functionName":{"name":"shr","nativeSrc":"2841:3:67","nodeType":"YulIdentifier","src":"2841:3:67"},"nativeSrc":"2841:15:67","nodeType":"YulFunctionCall","src":"2841:15:67"}],"functionName":{"name":"and","nativeSrc":"2832:3:67","nodeType":"YulIdentifier","src":"2832:3:67"},"nativeSrc":"2832:25:67","nodeType":"YulFunctionCall","src":"2832:25:67"}],"functionName":{"name":"mstore","nativeSrc":"2819:6:67","nodeType":"YulIdentifier","src":"2819:6:67"},"nativeSrc":"2819:39:67","nodeType":"YulFunctionCall","src":"2819:39:67"},"nativeSrc":"2819:39:67","nodeType":"YulExpressionStatement","src":"2819:39:67"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"2878:4:67","nodeType":"YulLiteral","src":"2878:4:67","type":"","value":"0x20"},{"name":"slot","nativeSrc":"2884:4:67","nodeType":"YulIdentifier","src":"2884:4:67"}],"functionName":{"name":"mstore","nativeSrc":"2871:6:67","nodeType":"YulIdentifier","src":"2871:6:67"},"nativeSrc":"2871:18:67","nodeType":"YulFunctionCall","src":"2871:18:67"},"nativeSrc":"2871:18:67","nodeType":"YulExpressionStatement","src":"2871:18:67"},{"nativeSrc":"2902:31:67","nodeType":"YulAssignment","src":"2902:31:67","value":{"arguments":[{"kind":"number","nativeSrc":"2922:4:67","nodeType":"YulLiteral","src":"2922:4:67","type":"","value":"0x00"},{"kind":"number","nativeSrc":"2928:4:67","nodeType":"YulLiteral","src":"2928:4:67","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"2912:9:67","nodeType":"YulIdentifier","src":"2912:9:67"},"nativeSrc":"2912:21:67","nodeType":"YulFunctionCall","src":"2912:21:67"},"variableNames":[{"name":"result","nativeSrc":"2902:6:67","nodeType":"YulIdentifier","src":"2902:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12490,"isOffset":false,"isSlot":false,"src":"2836:3:67","valueSize":1},{"declaration":12493,"isOffset":false,"isSlot":false,"src":"2902:6:67","valueSize":1},{"declaration":12488,"isOffset":false,"isSlot":false,"src":"2884:4:67","valueSize":1}],"flags":["memory-safe"],"id":12495,"nodeType":"InlineAssembly","src":"2780:163:67"}]},"documentation":{"id":12486,"nodeType":"StructuredDocumentation","src":"2598:78:67","text":" @dev Derive the location of a mapping element from the key."},"id":12497,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"2690:13:67","nodeType":"FunctionDefinition","parameters":{"id":12491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12488,"mutability":"mutable","name":"slot","nameLocation":"2712:4:67","nodeType":"VariableDeclaration","scope":12497,"src":"2704:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12487,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2704:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12490,"mutability":"mutable","name":"key","nameLocation":"2726:3:67","nodeType":"VariableDeclaration","scope":12497,"src":"2718:11:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12489,"name":"address","nodeType":"ElementaryTypeName","src":"2718:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2703:27:67"},"returnParameters":{"id":12494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12493,"mutability":"mutable","name":"result","nameLocation":"2762:6:67","nodeType":"VariableDeclaration","scope":12497,"src":"2754:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12492,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2754:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2753:16:67"},"scope":12570,"src":"2681:268:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12508,"nodeType":"Block","src":"3124:173:67","statements":[{"AST":{"nativeSrc":"3159:132:67","nodeType":"YulBlock","src":"3159:132:67","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3180:4:67","nodeType":"YulLiteral","src":"3180:4:67","type":"","value":"0x00"},{"arguments":[{"arguments":[{"name":"key","nativeSrc":"3200:3:67","nodeType":"YulIdentifier","src":"3200:3:67"}],"functionName":{"name":"iszero","nativeSrc":"3193:6:67","nodeType":"YulIdentifier","src":"3193:6:67"},"nativeSrc":"3193:11:67","nodeType":"YulFunctionCall","src":"3193:11:67"}],"functionName":{"name":"iszero","nativeSrc":"3186:6:67","nodeType":"YulIdentifier","src":"3186:6:67"},"nativeSrc":"3186:19:67","nodeType":"YulFunctionCall","src":"3186:19:67"}],"functionName":{"name":"mstore","nativeSrc":"3173:6:67","nodeType":"YulIdentifier","src":"3173:6:67"},"nativeSrc":"3173:33:67","nodeType":"YulFunctionCall","src":"3173:33:67"},"nativeSrc":"3173:33:67","nodeType":"YulExpressionStatement","src":"3173:33:67"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3226:4:67","nodeType":"YulLiteral","src":"3226:4:67","type":"","value":"0x20"},{"name":"slot","nativeSrc":"3232:4:67","nodeType":"YulIdentifier","src":"3232:4:67"}],"functionName":{"name":"mstore","nativeSrc":"3219:6:67","nodeType":"YulIdentifier","src":"3219:6:67"},"nativeSrc":"3219:18:67","nodeType":"YulFunctionCall","src":"3219:18:67"},"nativeSrc":"3219:18:67","nodeType":"YulExpressionStatement","src":"3219:18:67"},{"nativeSrc":"3250:31:67","nodeType":"YulAssignment","src":"3250:31:67","value":{"arguments":[{"kind":"number","nativeSrc":"3270:4:67","nodeType":"YulLiteral","src":"3270:4:67","type":"","value":"0x00"},{"kind":"number","nativeSrc":"3276:4:67","nodeType":"YulLiteral","src":"3276:4:67","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"3260:9:67","nodeType":"YulIdentifier","src":"3260:9:67"},"nativeSrc":"3260:21:67","nodeType":"YulFunctionCall","src":"3260:21:67"},"variableNames":[{"name":"result","nativeSrc":"3250:6:67","nodeType":"YulIdentifier","src":"3250:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12502,"isOffset":false,"isSlot":false,"src":"3200:3:67","valueSize":1},{"declaration":12505,"isOffset":false,"isSlot":false,"src":"3250:6:67","valueSize":1},{"declaration":12500,"isOffset":false,"isSlot":false,"src":"3232:4:67","valueSize":1}],"flags":["memory-safe"],"id":12507,"nodeType":"InlineAssembly","src":"3134:157:67"}]},"documentation":{"id":12498,"nodeType":"StructuredDocumentation","src":"2955:78:67","text":" @dev Derive the location of a mapping element from the key."},"id":12509,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"3047:13:67","nodeType":"FunctionDefinition","parameters":{"id":12503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12500,"mutability":"mutable","name":"slot","nameLocation":"3069:4:67","nodeType":"VariableDeclaration","scope":12509,"src":"3061:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12499,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3061:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12502,"mutability":"mutable","name":"key","nameLocation":"3080:3:67","nodeType":"VariableDeclaration","scope":12509,"src":"3075:8:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12501,"name":"bool","nodeType":"ElementaryTypeName","src":"3075:4:67","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3060:24:67"},"returnParameters":{"id":12506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12505,"mutability":"mutable","name":"result","nameLocation":"3116:6:67","nodeType":"VariableDeclaration","scope":12509,"src":"3108:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12504,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3108:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3107:16:67"},"scope":12570,"src":"3038:259:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12520,"nodeType":"Block","src":"3475:157:67","statements":[{"AST":{"nativeSrc":"3510:116:67","nodeType":"YulBlock","src":"3510:116:67","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3531:4:67","nodeType":"YulLiteral","src":"3531:4:67","type":"","value":"0x00"},{"name":"key","nativeSrc":"3537:3:67","nodeType":"YulIdentifier","src":"3537:3:67"}],"functionName":{"name":"mstore","nativeSrc":"3524:6:67","nodeType":"YulIdentifier","src":"3524:6:67"},"nativeSrc":"3524:17:67","nodeType":"YulFunctionCall","src":"3524:17:67"},"nativeSrc":"3524:17:67","nodeType":"YulExpressionStatement","src":"3524:17:67"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3561:4:67","nodeType":"YulLiteral","src":"3561:4:67","type":"","value":"0x20"},{"name":"slot","nativeSrc":"3567:4:67","nodeType":"YulIdentifier","src":"3567:4:67"}],"functionName":{"name":"mstore","nativeSrc":"3554:6:67","nodeType":"YulIdentifier","src":"3554:6:67"},"nativeSrc":"3554:18:67","nodeType":"YulFunctionCall","src":"3554:18:67"},"nativeSrc":"3554:18:67","nodeType":"YulExpressionStatement","src":"3554:18:67"},{"nativeSrc":"3585:31:67","nodeType":"YulAssignment","src":"3585:31:67","value":{"arguments":[{"kind":"number","nativeSrc":"3605:4:67","nodeType":"YulLiteral","src":"3605:4:67","type":"","value":"0x00"},{"kind":"number","nativeSrc":"3611:4:67","nodeType":"YulLiteral","src":"3611:4:67","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"3595:9:67","nodeType":"YulIdentifier","src":"3595:9:67"},"nativeSrc":"3595:21:67","nodeType":"YulFunctionCall","src":"3595:21:67"},"variableNames":[{"name":"result","nativeSrc":"3585:6:67","nodeType":"YulIdentifier","src":"3585:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12514,"isOffset":false,"isSlot":false,"src":"3537:3:67","valueSize":1},{"declaration":12517,"isOffset":false,"isSlot":false,"src":"3585:6:67","valueSize":1},{"declaration":12512,"isOffset":false,"isSlot":false,"src":"3567:4:67","valueSize":1}],"flags":["memory-safe"],"id":12519,"nodeType":"InlineAssembly","src":"3485:141:67"}]},"documentation":{"id":12510,"nodeType":"StructuredDocumentation","src":"3303:78:67","text":" @dev Derive the location of a mapping element from the key."},"id":12521,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"3395:13:67","nodeType":"FunctionDefinition","parameters":{"id":12515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12512,"mutability":"mutable","name":"slot","nameLocation":"3417:4:67","nodeType":"VariableDeclaration","scope":12521,"src":"3409:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12511,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3409:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12514,"mutability":"mutable","name":"key","nameLocation":"3431:3:67","nodeType":"VariableDeclaration","scope":12521,"src":"3423:11:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12513,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3423:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3408:27:67"},"returnParameters":{"id":12518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12517,"mutability":"mutable","name":"result","nameLocation":"3467:6:67","nodeType":"VariableDeclaration","scope":12521,"src":"3459:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12516,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3459:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3458:16:67"},"scope":12570,"src":"3386:246:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12532,"nodeType":"Block","src":"3810:157:67","statements":[{"AST":{"nativeSrc":"3845:116:67","nodeType":"YulBlock","src":"3845:116:67","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3866:4:67","nodeType":"YulLiteral","src":"3866:4:67","type":"","value":"0x00"},{"name":"key","nativeSrc":"3872:3:67","nodeType":"YulIdentifier","src":"3872:3:67"}],"functionName":{"name":"mstore","nativeSrc":"3859:6:67","nodeType":"YulIdentifier","src":"3859:6:67"},"nativeSrc":"3859:17:67","nodeType":"YulFunctionCall","src":"3859:17:67"},"nativeSrc":"3859:17:67","nodeType":"YulExpressionStatement","src":"3859:17:67"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3896:4:67","nodeType":"YulLiteral","src":"3896:4:67","type":"","value":"0x20"},{"name":"slot","nativeSrc":"3902:4:67","nodeType":"YulIdentifier","src":"3902:4:67"}],"functionName":{"name":"mstore","nativeSrc":"3889:6:67","nodeType":"YulIdentifier","src":"3889:6:67"},"nativeSrc":"3889:18:67","nodeType":"YulFunctionCall","src":"3889:18:67"},"nativeSrc":"3889:18:67","nodeType":"YulExpressionStatement","src":"3889:18:67"},{"nativeSrc":"3920:31:67","nodeType":"YulAssignment","src":"3920:31:67","value":{"arguments":[{"kind":"number","nativeSrc":"3940:4:67","nodeType":"YulLiteral","src":"3940:4:67","type":"","value":"0x00"},{"kind":"number","nativeSrc":"3946:4:67","nodeType":"YulLiteral","src":"3946:4:67","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"3930:9:67","nodeType":"YulIdentifier","src":"3930:9:67"},"nativeSrc":"3930:21:67","nodeType":"YulFunctionCall","src":"3930:21:67"},"variableNames":[{"name":"result","nativeSrc":"3920:6:67","nodeType":"YulIdentifier","src":"3920:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12526,"isOffset":false,"isSlot":false,"src":"3872:3:67","valueSize":1},{"declaration":12529,"isOffset":false,"isSlot":false,"src":"3920:6:67","valueSize":1},{"declaration":12524,"isOffset":false,"isSlot":false,"src":"3902:4:67","valueSize":1}],"flags":["memory-safe"],"id":12531,"nodeType":"InlineAssembly","src":"3820:141:67"}]},"documentation":{"id":12522,"nodeType":"StructuredDocumentation","src":"3638:78:67","text":" @dev Derive the location of a mapping element from the key."},"id":12533,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"3730:13:67","nodeType":"FunctionDefinition","parameters":{"id":12527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12524,"mutability":"mutable","name":"slot","nameLocation":"3752:4:67","nodeType":"VariableDeclaration","scope":12533,"src":"3744:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12523,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3744:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12526,"mutability":"mutable","name":"key","nameLocation":"3766:3:67","nodeType":"VariableDeclaration","scope":12533,"src":"3758:11:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12525,"name":"uint256","nodeType":"ElementaryTypeName","src":"3758:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3743:27:67"},"returnParameters":{"id":12530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12529,"mutability":"mutable","name":"result","nameLocation":"3802:6:67","nodeType":"VariableDeclaration","scope":12533,"src":"3794:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12528,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3794:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3793:16:67"},"scope":12570,"src":"3721:246:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12544,"nodeType":"Block","src":"4144:157:67","statements":[{"AST":{"nativeSrc":"4179:116:67","nodeType":"YulBlock","src":"4179:116:67","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4200:4:67","nodeType":"YulLiteral","src":"4200:4:67","type":"","value":"0x00"},{"name":"key","nativeSrc":"4206:3:67","nodeType":"YulIdentifier","src":"4206:3:67"}],"functionName":{"name":"mstore","nativeSrc":"4193:6:67","nodeType":"YulIdentifier","src":"4193:6:67"},"nativeSrc":"4193:17:67","nodeType":"YulFunctionCall","src":"4193:17:67"},"nativeSrc":"4193:17:67","nodeType":"YulExpressionStatement","src":"4193:17:67"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4230:4:67","nodeType":"YulLiteral","src":"4230:4:67","type":"","value":"0x20"},{"name":"slot","nativeSrc":"4236:4:67","nodeType":"YulIdentifier","src":"4236:4:67"}],"functionName":{"name":"mstore","nativeSrc":"4223:6:67","nodeType":"YulIdentifier","src":"4223:6:67"},"nativeSrc":"4223:18:67","nodeType":"YulFunctionCall","src":"4223:18:67"},"nativeSrc":"4223:18:67","nodeType":"YulExpressionStatement","src":"4223:18:67"},{"nativeSrc":"4254:31:67","nodeType":"YulAssignment","src":"4254:31:67","value":{"arguments":[{"kind":"number","nativeSrc":"4274:4:67","nodeType":"YulLiteral","src":"4274:4:67","type":"","value":"0x00"},{"kind":"number","nativeSrc":"4280:4:67","nodeType":"YulLiteral","src":"4280:4:67","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"4264:9:67","nodeType":"YulIdentifier","src":"4264:9:67"},"nativeSrc":"4264:21:67","nodeType":"YulFunctionCall","src":"4264:21:67"},"variableNames":[{"name":"result","nativeSrc":"4254:6:67","nodeType":"YulIdentifier","src":"4254:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12538,"isOffset":false,"isSlot":false,"src":"4206:3:67","valueSize":1},{"declaration":12541,"isOffset":false,"isSlot":false,"src":"4254:6:67","valueSize":1},{"declaration":12536,"isOffset":false,"isSlot":false,"src":"4236:4:67","valueSize":1}],"flags":["memory-safe"],"id":12543,"nodeType":"InlineAssembly","src":"4154:141:67"}]},"documentation":{"id":12534,"nodeType":"StructuredDocumentation","src":"3973:78:67","text":" @dev Derive the location of a mapping element from the key."},"id":12545,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"4065:13:67","nodeType":"FunctionDefinition","parameters":{"id":12539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12536,"mutability":"mutable","name":"slot","nameLocation":"4087:4:67","nodeType":"VariableDeclaration","scope":12545,"src":"4079:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12535,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4079:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12538,"mutability":"mutable","name":"key","nameLocation":"4100:3:67","nodeType":"VariableDeclaration","scope":12545,"src":"4093:10:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12537,"name":"int256","nodeType":"ElementaryTypeName","src":"4093:6:67","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4078:26:67"},"returnParameters":{"id":12542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12541,"mutability":"mutable","name":"result","nameLocation":"4136:6:67","nodeType":"VariableDeclaration","scope":12545,"src":"4128:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12540,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4128:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4127:16:67"},"scope":12570,"src":"4056:245:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12556,"nodeType":"Block","src":"4485:326:67","statements":[{"AST":{"nativeSrc":"4520:285:67","nodeType":"YulBlock","src":"4520:285:67","statements":[{"nativeSrc":"4534:24:67","nodeType":"YulVariableDeclaration","src":"4534:24:67","value":{"arguments":[{"name":"key","nativeSrc":"4554:3:67","nodeType":"YulIdentifier","src":"4554:3:67"}],"functionName":{"name":"mload","nativeSrc":"4548:5:67","nodeType":"YulIdentifier","src":"4548:5:67"},"nativeSrc":"4548:10:67","nodeType":"YulFunctionCall","src":"4548:10:67"},"variables":[{"name":"length","nativeSrc":"4538:6:67","nodeType":"YulTypedName","src":"4538:6:67","type":""}]},{"nativeSrc":"4571:27:67","nodeType":"YulVariableDeclaration","src":"4571:27:67","value":{"arguments":[{"name":"key","nativeSrc":"4588:3:67","nodeType":"YulIdentifier","src":"4588:3:67"},{"kind":"number","nativeSrc":"4593:4:67","nodeType":"YulLiteral","src":"4593:4:67","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4584:3:67","nodeType":"YulIdentifier","src":"4584:3:67"},"nativeSrc":"4584:14:67","nodeType":"YulFunctionCall","src":"4584:14:67"},"variables":[{"name":"begin","nativeSrc":"4575:5:67","nodeType":"YulTypedName","src":"4575:5:67","type":""}]},{"nativeSrc":"4611:29:67","nodeType":"YulVariableDeclaration","src":"4611:29:67","value":{"arguments":[{"name":"begin","nativeSrc":"4626:5:67","nodeType":"YulIdentifier","src":"4626:5:67"},{"name":"length","nativeSrc":"4633:6:67","nodeType":"YulIdentifier","src":"4633:6:67"}],"functionName":{"name":"add","nativeSrc":"4622:3:67","nodeType":"YulIdentifier","src":"4622:3:67"},"nativeSrc":"4622:18:67","nodeType":"YulFunctionCall","src":"4622:18:67"},"variables":[{"name":"end","nativeSrc":"4615:3:67","nodeType":"YulTypedName","src":"4615:3:67","type":""}]},{"nativeSrc":"4653:23:67","nodeType":"YulVariableDeclaration","src":"4653:23:67","value":{"arguments":[{"name":"end","nativeSrc":"4672:3:67","nodeType":"YulIdentifier","src":"4672:3:67"}],"functionName":{"name":"mload","nativeSrc":"4666:5:67","nodeType":"YulIdentifier","src":"4666:5:67"},"nativeSrc":"4666:10:67","nodeType":"YulFunctionCall","src":"4666:10:67"},"variables":[{"name":"cache","nativeSrc":"4657:5:67","nodeType":"YulTypedName","src":"4657:5:67","type":""}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"4696:3:67","nodeType":"YulIdentifier","src":"4696:3:67"},{"name":"slot","nativeSrc":"4701:4:67","nodeType":"YulIdentifier","src":"4701:4:67"}],"functionName":{"name":"mstore","nativeSrc":"4689:6:67","nodeType":"YulIdentifier","src":"4689:6:67"},"nativeSrc":"4689:17:67","nodeType":"YulFunctionCall","src":"4689:17:67"},"nativeSrc":"4689:17:67","nodeType":"YulExpressionStatement","src":"4689:17:67"},{"nativeSrc":"4719:45:67","nodeType":"YulAssignment","src":"4719:45:67","value":{"arguments":[{"name":"begin","nativeSrc":"4739:5:67","nodeType":"YulIdentifier","src":"4739:5:67"},{"arguments":[{"name":"length","nativeSrc":"4750:6:67","nodeType":"YulIdentifier","src":"4750:6:67"},{"kind":"number","nativeSrc":"4758:4:67","nodeType":"YulLiteral","src":"4758:4:67","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4746:3:67","nodeType":"YulIdentifier","src":"4746:3:67"},"nativeSrc":"4746:17:67","nodeType":"YulFunctionCall","src":"4746:17:67"}],"functionName":{"name":"keccak256","nativeSrc":"4729:9:67","nodeType":"YulIdentifier","src":"4729:9:67"},"nativeSrc":"4729:35:67","nodeType":"YulFunctionCall","src":"4729:35:67"},"variableNames":[{"name":"result","nativeSrc":"4719:6:67","nodeType":"YulIdentifier","src":"4719:6:67"}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"4784:3:67","nodeType":"YulIdentifier","src":"4784:3:67"},{"name":"cache","nativeSrc":"4789:5:67","nodeType":"YulIdentifier","src":"4789:5:67"}],"functionName":{"name":"mstore","nativeSrc":"4777:6:67","nodeType":"YulIdentifier","src":"4777:6:67"},"nativeSrc":"4777:18:67","nodeType":"YulFunctionCall","src":"4777:18:67"},"nativeSrc":"4777:18:67","nodeType":"YulExpressionStatement","src":"4777:18:67"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12550,"isOffset":false,"isSlot":false,"src":"4554:3:67","valueSize":1},{"declaration":12550,"isOffset":false,"isSlot":false,"src":"4588:3:67","valueSize":1},{"declaration":12553,"isOffset":false,"isSlot":false,"src":"4719:6:67","valueSize":1},{"declaration":12548,"isOffset":false,"isSlot":false,"src":"4701:4:67","valueSize":1}],"flags":["memory-safe"],"id":12555,"nodeType":"InlineAssembly","src":"4495:310:67"}]},"documentation":{"id":12546,"nodeType":"StructuredDocumentation","src":"4307:78:67","text":" @dev Derive the location of a mapping element from the key."},"id":12557,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"4399:13:67","nodeType":"FunctionDefinition","parameters":{"id":12551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12548,"mutability":"mutable","name":"slot","nameLocation":"4421:4:67","nodeType":"VariableDeclaration","scope":12557,"src":"4413:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12547,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4413:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12550,"mutability":"mutable","name":"key","nameLocation":"4441:3:67","nodeType":"VariableDeclaration","scope":12557,"src":"4427:17:67","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12549,"name":"string","nodeType":"ElementaryTypeName","src":"4427:6:67","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4412:33:67"},"returnParameters":{"id":12554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12553,"mutability":"mutable","name":"result","nameLocation":"4477:6:67","nodeType":"VariableDeclaration","scope":12557,"src":"4469:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12552,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4469:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4468:16:67"},"scope":12570,"src":"4390:421:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12568,"nodeType":"Block","src":"4994:326:67","statements":[{"AST":{"nativeSrc":"5029:285:67","nodeType":"YulBlock","src":"5029:285:67","statements":[{"nativeSrc":"5043:24:67","nodeType":"YulVariableDeclaration","src":"5043:24:67","value":{"arguments":[{"name":"key","nativeSrc":"5063:3:67","nodeType":"YulIdentifier","src":"5063:3:67"}],"functionName":{"name":"mload","nativeSrc":"5057:5:67","nodeType":"YulIdentifier","src":"5057:5:67"},"nativeSrc":"5057:10:67","nodeType":"YulFunctionCall","src":"5057:10:67"},"variables":[{"name":"length","nativeSrc":"5047:6:67","nodeType":"YulTypedName","src":"5047:6:67","type":""}]},{"nativeSrc":"5080:27:67","nodeType":"YulVariableDeclaration","src":"5080:27:67","value":{"arguments":[{"name":"key","nativeSrc":"5097:3:67","nodeType":"YulIdentifier","src":"5097:3:67"},{"kind":"number","nativeSrc":"5102:4:67","nodeType":"YulLiteral","src":"5102:4:67","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5093:3:67","nodeType":"YulIdentifier","src":"5093:3:67"},"nativeSrc":"5093:14:67","nodeType":"YulFunctionCall","src":"5093:14:67"},"variables":[{"name":"begin","nativeSrc":"5084:5:67","nodeType":"YulTypedName","src":"5084:5:67","type":""}]},{"nativeSrc":"5120:29:67","nodeType":"YulVariableDeclaration","src":"5120:29:67","value":{"arguments":[{"name":"begin","nativeSrc":"5135:5:67","nodeType":"YulIdentifier","src":"5135:5:67"},{"name":"length","nativeSrc":"5142:6:67","nodeType":"YulIdentifier","src":"5142:6:67"}],"functionName":{"name":"add","nativeSrc":"5131:3:67","nodeType":"YulIdentifier","src":"5131:3:67"},"nativeSrc":"5131:18:67","nodeType":"YulFunctionCall","src":"5131:18:67"},"variables":[{"name":"end","nativeSrc":"5124:3:67","nodeType":"YulTypedName","src":"5124:3:67","type":""}]},{"nativeSrc":"5162:23:67","nodeType":"YulVariableDeclaration","src":"5162:23:67","value":{"arguments":[{"name":"end","nativeSrc":"5181:3:67","nodeType":"YulIdentifier","src":"5181:3:67"}],"functionName":{"name":"mload","nativeSrc":"5175:5:67","nodeType":"YulIdentifier","src":"5175:5:67"},"nativeSrc":"5175:10:67","nodeType":"YulFunctionCall","src":"5175:10:67"},"variables":[{"name":"cache","nativeSrc":"5166:5:67","nodeType":"YulTypedName","src":"5166:5:67","type":""}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"5205:3:67","nodeType":"YulIdentifier","src":"5205:3:67"},{"name":"slot","nativeSrc":"5210:4:67","nodeType":"YulIdentifier","src":"5210:4:67"}],"functionName":{"name":"mstore","nativeSrc":"5198:6:67","nodeType":"YulIdentifier","src":"5198:6:67"},"nativeSrc":"5198:17:67","nodeType":"YulFunctionCall","src":"5198:17:67"},"nativeSrc":"5198:17:67","nodeType":"YulExpressionStatement","src":"5198:17:67"},{"nativeSrc":"5228:45:67","nodeType":"YulAssignment","src":"5228:45:67","value":{"arguments":[{"name":"begin","nativeSrc":"5248:5:67","nodeType":"YulIdentifier","src":"5248:5:67"},{"arguments":[{"name":"length","nativeSrc":"5259:6:67","nodeType":"YulIdentifier","src":"5259:6:67"},{"kind":"number","nativeSrc":"5267:4:67","nodeType":"YulLiteral","src":"5267:4:67","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5255:3:67","nodeType":"YulIdentifier","src":"5255:3:67"},"nativeSrc":"5255:17:67","nodeType":"YulFunctionCall","src":"5255:17:67"}],"functionName":{"name":"keccak256","nativeSrc":"5238:9:67","nodeType":"YulIdentifier","src":"5238:9:67"},"nativeSrc":"5238:35:67","nodeType":"YulFunctionCall","src":"5238:35:67"},"variableNames":[{"name":"result","nativeSrc":"5228:6:67","nodeType":"YulIdentifier","src":"5228:6:67"}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"5293:3:67","nodeType":"YulIdentifier","src":"5293:3:67"},{"name":"cache","nativeSrc":"5298:5:67","nodeType":"YulIdentifier","src":"5298:5:67"}],"functionName":{"name":"mstore","nativeSrc":"5286:6:67","nodeType":"YulIdentifier","src":"5286:6:67"},"nativeSrc":"5286:18:67","nodeType":"YulFunctionCall","src":"5286:18:67"},"nativeSrc":"5286:18:67","nodeType":"YulExpressionStatement","src":"5286:18:67"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12562,"isOffset":false,"isSlot":false,"src":"5063:3:67","valueSize":1},{"declaration":12562,"isOffset":false,"isSlot":false,"src":"5097:3:67","valueSize":1},{"declaration":12565,"isOffset":false,"isSlot":false,"src":"5228:6:67","valueSize":1},{"declaration":12560,"isOffset":false,"isSlot":false,"src":"5210:4:67","valueSize":1}],"flags":["memory-safe"],"id":12567,"nodeType":"InlineAssembly","src":"5004:310:67"}]},"documentation":{"id":12558,"nodeType":"StructuredDocumentation","src":"4817:78:67","text":" @dev Derive the location of a mapping element from the key."},"id":12569,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"4909:13:67","nodeType":"FunctionDefinition","parameters":{"id":12563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12560,"mutability":"mutable","name":"slot","nameLocation":"4931:4:67","nodeType":"VariableDeclaration","scope":12569,"src":"4923:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12559,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4923:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12562,"mutability":"mutable","name":"key","nameLocation":"4950:3:67","nodeType":"VariableDeclaration","scope":12569,"src":"4937:16:67","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":12561,"name":"bytes","nodeType":"ElementaryTypeName","src":"4937:5:67","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4922:32:67"},"returnParameters":{"id":12566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12565,"mutability":"mutable","name":"result","nameLocation":"4986:6:67","nodeType":"VariableDeclaration","scope":12569,"src":"4978:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12564,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4978:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4977:16:67"},"scope":12570,"src":"4900:420:67","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":12571,"src":"1599:3723:67","usedErrors":[],"usedEvents":[]}],"src":"199:5124:67"},"id":67},"@openzeppelin/contracts/utils/StorageSlot.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","exportedSymbols":{"StorageSlot":[12694]},"id":12695,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12572,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"193:24:68"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlot","contractDependencies":[],"contractKind":"library","documentation":{"id":12573,"nodeType":"StructuredDocumentation","src":"219:1187:68","text":" @dev Library for reading and writing primitive types to specific storage slots.\n Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n This library helps with reading and writing to such slots without the need for inline assembly.\n The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n Example usage to set ERC-1967 implementation slot:\n ```solidity\n contract ERC1967 {\n // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n function _setImplementation(address newImplementation) internal {\n require(newImplementation.code.length > 0);\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n }\n ```\n TIP: Consider using this library along with {SlotDerivation}."},"fullyImplemented":true,"id":12694,"linearizedBaseContracts":[12694],"name":"StorageSlot","nameLocation":"1415:11:68","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlot.AddressSlot","id":12576,"members":[{"constant":false,"id":12575,"mutability":"mutable","name":"value","nameLocation":"1470:5:68","nodeType":"VariableDeclaration","scope":12576,"src":"1462:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12574,"name":"address","nodeType":"ElementaryTypeName","src":"1462:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"AddressSlot","nameLocation":"1440:11:68","nodeType":"StructDefinition","scope":12694,"src":"1433:49:68","visibility":"public"},{"canonicalName":"StorageSlot.BooleanSlot","id":12579,"members":[{"constant":false,"id":12578,"mutability":"mutable","name":"value","nameLocation":"1522:5:68","nodeType":"VariableDeclaration","scope":12579,"src":"1517:10:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12577,"name":"bool","nodeType":"ElementaryTypeName","src":"1517:4:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"BooleanSlot","nameLocation":"1495:11:68","nodeType":"StructDefinition","scope":12694,"src":"1488:46:68","visibility":"public"},{"canonicalName":"StorageSlot.Bytes32Slot","id":12582,"members":[{"constant":false,"id":12581,"mutability":"mutable","name":"value","nameLocation":"1577:5:68","nodeType":"VariableDeclaration","scope":12582,"src":"1569:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12580,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1569:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"Bytes32Slot","nameLocation":"1547:11:68","nodeType":"StructDefinition","scope":12694,"src":"1540:49:68","visibility":"public"},{"canonicalName":"StorageSlot.Uint256Slot","id":12585,"members":[{"constant":false,"id":12584,"mutability":"mutable","name":"value","nameLocation":"1632:5:68","nodeType":"VariableDeclaration","scope":12585,"src":"1624:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12583,"name":"uint256","nodeType":"ElementaryTypeName","src":"1624:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Uint256Slot","nameLocation":"1602:11:68","nodeType":"StructDefinition","scope":12694,"src":"1595:49:68","visibility":"public"},{"canonicalName":"StorageSlot.Int256Slot","id":12588,"members":[{"constant":false,"id":12587,"mutability":"mutable","name":"value","nameLocation":"1685:5:68","nodeType":"VariableDeclaration","scope":12588,"src":"1678:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12586,"name":"int256","nodeType":"ElementaryTypeName","src":"1678:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"name":"Int256Slot","nameLocation":"1657:10:68","nodeType":"StructDefinition","scope":12694,"src":"1650:47:68","visibility":"public"},{"canonicalName":"StorageSlot.StringSlot","id":12591,"members":[{"constant":false,"id":12590,"mutability":"mutable","name":"value","nameLocation":"1738:5:68","nodeType":"VariableDeclaration","scope":12591,"src":"1731:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":12589,"name":"string","nodeType":"ElementaryTypeName","src":"1731:6:68","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"name":"StringSlot","nameLocation":"1710:10:68","nodeType":"StructDefinition","scope":12694,"src":"1703:47:68","visibility":"public"},{"canonicalName":"StorageSlot.BytesSlot","id":12594,"members":[{"constant":false,"id":12593,"mutability":"mutable","name":"value","nameLocation":"1789:5:68","nodeType":"VariableDeclaration","scope":12594,"src":"1783:11:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":12592,"name":"bytes","nodeType":"ElementaryTypeName","src":"1783:5:68","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"BytesSlot","nameLocation":"1763:9:68","nodeType":"StructDefinition","scope":12694,"src":"1756:45:68","visibility":"public"},{"body":{"id":12604,"nodeType":"Block","src":"1983:79:68","statements":[{"AST":{"nativeSrc":"2018:38:68","nodeType":"YulBlock","src":"2018:38:68","statements":[{"nativeSrc":"2032:14:68","nodeType":"YulAssignment","src":"2032:14:68","value":{"name":"slot","nativeSrc":"2042:4:68","nodeType":"YulIdentifier","src":"2042:4:68"},"variableNames":[{"name":"r.slot","nativeSrc":"2032:6:68","nodeType":"YulIdentifier","src":"2032:6:68"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12601,"isOffset":false,"isSlot":true,"src":"2032:6:68","suffix":"slot","valueSize":1},{"declaration":12597,"isOffset":false,"isSlot":false,"src":"2042:4:68","valueSize":1}],"flags":["memory-safe"],"id":12603,"nodeType":"InlineAssembly","src":"1993:63:68"}]},"documentation":{"id":12595,"nodeType":"StructuredDocumentation","src":"1807:87:68","text":" @dev Returns an `AddressSlot` with member `value` located at `slot`."},"id":12605,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressSlot","nameLocation":"1908:14:68","nodeType":"FunctionDefinition","parameters":{"id":12598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12597,"mutability":"mutable","name":"slot","nameLocation":"1931:4:68","nodeType":"VariableDeclaration","scope":12605,"src":"1923:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12596,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1923:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1922:14:68"},"returnParameters":{"id":12602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12601,"mutability":"mutable","name":"r","nameLocation":"1980:1:68","nodeType":"VariableDeclaration","scope":12605,"src":"1960:21:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$12576_storage_ptr","typeString":"struct StorageSlot.AddressSlot"},"typeName":{"id":12600,"nodeType":"UserDefinedTypeName","pathNode":{"id":12599,"name":"AddressSlot","nameLocations":["1960:11:68"],"nodeType":"IdentifierPath","referencedDeclaration":12576,"src":"1960:11:68"},"referencedDeclaration":12576,"src":"1960:11:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$12576_storage_ptr","typeString":"struct StorageSlot.AddressSlot"}},"visibility":"internal"}],"src":"1959:23:68"},"scope":12694,"src":"1899:163:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12615,"nodeType":"Block","src":"2243:79:68","statements":[{"AST":{"nativeSrc":"2278:38:68","nodeType":"YulBlock","src":"2278:38:68","statements":[{"nativeSrc":"2292:14:68","nodeType":"YulAssignment","src":"2292:14:68","value":{"name":"slot","nativeSrc":"2302:4:68","nodeType":"YulIdentifier","src":"2302:4:68"},"variableNames":[{"name":"r.slot","nativeSrc":"2292:6:68","nodeType":"YulIdentifier","src":"2292:6:68"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12612,"isOffset":false,"isSlot":true,"src":"2292:6:68","suffix":"slot","valueSize":1},{"declaration":12608,"isOffset":false,"isSlot":false,"src":"2302:4:68","valueSize":1}],"flags":["memory-safe"],"id":12614,"nodeType":"InlineAssembly","src":"2253:63:68"}]},"documentation":{"id":12606,"nodeType":"StructuredDocumentation","src":"2068:86:68","text":" @dev Returns a `BooleanSlot` with member `value` located at `slot`."},"id":12616,"implemented":true,"kind":"function","modifiers":[],"name":"getBooleanSlot","nameLocation":"2168:14:68","nodeType":"FunctionDefinition","parameters":{"id":12609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12608,"mutability":"mutable","name":"slot","nameLocation":"2191:4:68","nodeType":"VariableDeclaration","scope":12616,"src":"2183:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12607,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2183:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2182:14:68"},"returnParameters":{"id":12613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12612,"mutability":"mutable","name":"r","nameLocation":"2240:1:68","nodeType":"VariableDeclaration","scope":12616,"src":"2220:21:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$12579_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"},"typeName":{"id":12611,"nodeType":"UserDefinedTypeName","pathNode":{"id":12610,"name":"BooleanSlot","nameLocations":["2220:11:68"],"nodeType":"IdentifierPath","referencedDeclaration":12579,"src":"2220:11:68"},"referencedDeclaration":12579,"src":"2220:11:68","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$12579_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"}},"visibility":"internal"}],"src":"2219:23:68"},"scope":12694,"src":"2159:163:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12626,"nodeType":"Block","src":"2503:79:68","statements":[{"AST":{"nativeSrc":"2538:38:68","nodeType":"YulBlock","src":"2538:38:68","statements":[{"nativeSrc":"2552:14:68","nodeType":"YulAssignment","src":"2552:14:68","value":{"name":"slot","nativeSrc":"2562:4:68","nodeType":"YulIdentifier","src":"2562:4:68"},"variableNames":[{"name":"r.slot","nativeSrc":"2552:6:68","nodeType":"YulIdentifier","src":"2552:6:68"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12623,"isOffset":false,"isSlot":true,"src":"2552:6:68","suffix":"slot","valueSize":1},{"declaration":12619,"isOffset":false,"isSlot":false,"src":"2562:4:68","valueSize":1}],"flags":["memory-safe"],"id":12625,"nodeType":"InlineAssembly","src":"2513:63:68"}]},"documentation":{"id":12617,"nodeType":"StructuredDocumentation","src":"2328:86:68","text":" @dev Returns a `Bytes32Slot` with member `value` located at `slot`."},"id":12627,"implemented":true,"kind":"function","modifiers":[],"name":"getBytes32Slot","nameLocation":"2428:14:68","nodeType":"FunctionDefinition","parameters":{"id":12620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12619,"mutability":"mutable","name":"slot","nameLocation":"2451:4:68","nodeType":"VariableDeclaration","scope":12627,"src":"2443:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12618,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2443:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2442:14:68"},"returnParameters":{"id":12624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12623,"mutability":"mutable","name":"r","nameLocation":"2500:1:68","nodeType":"VariableDeclaration","scope":12627,"src":"2480:21:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$12582_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"},"typeName":{"id":12622,"nodeType":"UserDefinedTypeName","pathNode":{"id":12621,"name":"Bytes32Slot","nameLocations":["2480:11:68"],"nodeType":"IdentifierPath","referencedDeclaration":12582,"src":"2480:11:68"},"referencedDeclaration":12582,"src":"2480:11:68","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$12582_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"}},"visibility":"internal"}],"src":"2479:23:68"},"scope":12694,"src":"2419:163:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12637,"nodeType":"Block","src":"2763:79:68","statements":[{"AST":{"nativeSrc":"2798:38:68","nodeType":"YulBlock","src":"2798:38:68","statements":[{"nativeSrc":"2812:14:68","nodeType":"YulAssignment","src":"2812:14:68","value":{"name":"slot","nativeSrc":"2822:4:68","nodeType":"YulIdentifier","src":"2822:4:68"},"variableNames":[{"name":"r.slot","nativeSrc":"2812:6:68","nodeType":"YulIdentifier","src":"2812:6:68"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12634,"isOffset":false,"isSlot":true,"src":"2812:6:68","suffix":"slot","valueSize":1},{"declaration":12630,"isOffset":false,"isSlot":false,"src":"2822:4:68","valueSize":1}],"flags":["memory-safe"],"id":12636,"nodeType":"InlineAssembly","src":"2773:63:68"}]},"documentation":{"id":12628,"nodeType":"StructuredDocumentation","src":"2588:86:68","text":" @dev Returns a `Uint256Slot` with member `value` located at `slot`."},"id":12638,"implemented":true,"kind":"function","modifiers":[],"name":"getUint256Slot","nameLocation":"2688:14:68","nodeType":"FunctionDefinition","parameters":{"id":12631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12630,"mutability":"mutable","name":"slot","nameLocation":"2711:4:68","nodeType":"VariableDeclaration","scope":12638,"src":"2703:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12629,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2703:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2702:14:68"},"returnParameters":{"id":12635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12634,"mutability":"mutable","name":"r","nameLocation":"2760:1:68","nodeType":"VariableDeclaration","scope":12638,"src":"2740:21:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12585_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"},"typeName":{"id":12633,"nodeType":"UserDefinedTypeName","pathNode":{"id":12632,"name":"Uint256Slot","nameLocations":["2740:11:68"],"nodeType":"IdentifierPath","referencedDeclaration":12585,"src":"2740:11:68"},"referencedDeclaration":12585,"src":"2740:11:68","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12585_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"}},"visibility":"internal"}],"src":"2739:23:68"},"scope":12694,"src":"2679:163:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12648,"nodeType":"Block","src":"3020:79:68","statements":[{"AST":{"nativeSrc":"3055:38:68","nodeType":"YulBlock","src":"3055:38:68","statements":[{"nativeSrc":"3069:14:68","nodeType":"YulAssignment","src":"3069:14:68","value":{"name":"slot","nativeSrc":"3079:4:68","nodeType":"YulIdentifier","src":"3079:4:68"},"variableNames":[{"name":"r.slot","nativeSrc":"3069:6:68","nodeType":"YulIdentifier","src":"3069:6:68"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12645,"isOffset":false,"isSlot":true,"src":"3069:6:68","suffix":"slot","valueSize":1},{"declaration":12641,"isOffset":false,"isSlot":false,"src":"3079:4:68","valueSize":1}],"flags":["memory-safe"],"id":12647,"nodeType":"InlineAssembly","src":"3030:63:68"}]},"documentation":{"id":12639,"nodeType":"StructuredDocumentation","src":"2848:85:68","text":" @dev Returns a `Int256Slot` with member `value` located at `slot`."},"id":12649,"implemented":true,"kind":"function","modifiers":[],"name":"getInt256Slot","nameLocation":"2947:13:68","nodeType":"FunctionDefinition","parameters":{"id":12642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12641,"mutability":"mutable","name":"slot","nameLocation":"2969:4:68","nodeType":"VariableDeclaration","scope":12649,"src":"2961:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12640,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2961:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2960:14:68"},"returnParameters":{"id":12646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12645,"mutability":"mutable","name":"r","nameLocation":"3017:1:68","nodeType":"VariableDeclaration","scope":12649,"src":"2998:20:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$12588_storage_ptr","typeString":"struct StorageSlot.Int256Slot"},"typeName":{"id":12644,"nodeType":"UserDefinedTypeName","pathNode":{"id":12643,"name":"Int256Slot","nameLocations":["2998:10:68"],"nodeType":"IdentifierPath","referencedDeclaration":12588,"src":"2998:10:68"},"referencedDeclaration":12588,"src":"2998:10:68","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$12588_storage_ptr","typeString":"struct StorageSlot.Int256Slot"}},"visibility":"internal"}],"src":"2997:22:68"},"scope":12694,"src":"2938:161:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12659,"nodeType":"Block","src":"3277:79:68","statements":[{"AST":{"nativeSrc":"3312:38:68","nodeType":"YulBlock","src":"3312:38:68","statements":[{"nativeSrc":"3326:14:68","nodeType":"YulAssignment","src":"3326:14:68","value":{"name":"slot","nativeSrc":"3336:4:68","nodeType":"YulIdentifier","src":"3336:4:68"},"variableNames":[{"name":"r.slot","nativeSrc":"3326:6:68","nodeType":"YulIdentifier","src":"3326:6:68"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12656,"isOffset":false,"isSlot":true,"src":"3326:6:68","suffix":"slot","valueSize":1},{"declaration":12652,"isOffset":false,"isSlot":false,"src":"3336:4:68","valueSize":1}],"flags":["memory-safe"],"id":12658,"nodeType":"InlineAssembly","src":"3287:63:68"}]},"documentation":{"id":12650,"nodeType":"StructuredDocumentation","src":"3105:85:68","text":" @dev Returns a `StringSlot` with member `value` located at `slot`."},"id":12660,"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"3204:13:68","nodeType":"FunctionDefinition","parameters":{"id":12653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12652,"mutability":"mutable","name":"slot","nameLocation":"3226:4:68","nodeType":"VariableDeclaration","scope":12660,"src":"3218:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12651,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3218:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3217:14:68"},"returnParameters":{"id":12657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12656,"mutability":"mutable","name":"r","nameLocation":"3274:1:68","nodeType":"VariableDeclaration","scope":12660,"src":"3255:20:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12591_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":12655,"nodeType":"UserDefinedTypeName","pathNode":{"id":12654,"name":"StringSlot","nameLocations":["3255:10:68"],"nodeType":"IdentifierPath","referencedDeclaration":12591,"src":"3255:10:68"},"referencedDeclaration":12591,"src":"3255:10:68","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12591_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"3254:22:68"},"scope":12694,"src":"3195:161:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12670,"nodeType":"Block","src":"3558:85:68","statements":[{"AST":{"nativeSrc":"3593:44:68","nodeType":"YulBlock","src":"3593:44:68","statements":[{"nativeSrc":"3607:20:68","nodeType":"YulAssignment","src":"3607:20:68","value":{"name":"store.slot","nativeSrc":"3617:10:68","nodeType":"YulIdentifier","src":"3617:10:68"},"variableNames":[{"name":"r.slot","nativeSrc":"3607:6:68","nodeType":"YulIdentifier","src":"3607:6:68"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12667,"isOffset":false,"isSlot":true,"src":"3607:6:68","suffix":"slot","valueSize":1},{"declaration":12663,"isOffset":false,"isSlot":true,"src":"3617:10:68","suffix":"slot","valueSize":1}],"flags":["memory-safe"],"id":12669,"nodeType":"InlineAssembly","src":"3568:69:68"}]},"documentation":{"id":12661,"nodeType":"StructuredDocumentation","src":"3362:101:68","text":" @dev Returns an `StringSlot` representation of the string storage pointer `store`."},"id":12671,"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"3477:13:68","nodeType":"FunctionDefinition","parameters":{"id":12664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12663,"mutability":"mutable","name":"store","nameLocation":"3506:5:68","nodeType":"VariableDeclaration","scope":12671,"src":"3491:20:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":12662,"name":"string","nodeType":"ElementaryTypeName","src":"3491:6:68","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3490:22:68"},"returnParameters":{"id":12668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12667,"mutability":"mutable","name":"r","nameLocation":"3555:1:68","nodeType":"VariableDeclaration","scope":12671,"src":"3536:20:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12591_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":12666,"nodeType":"UserDefinedTypeName","pathNode":{"id":12665,"name":"StringSlot","nameLocations":["3536:10:68"],"nodeType":"IdentifierPath","referencedDeclaration":12591,"src":"3536:10:68"},"referencedDeclaration":12591,"src":"3536:10:68","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12591_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"3535:22:68"},"scope":12694,"src":"3468:175:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12681,"nodeType":"Block","src":"3818:79:68","statements":[{"AST":{"nativeSrc":"3853:38:68","nodeType":"YulBlock","src":"3853:38:68","statements":[{"nativeSrc":"3867:14:68","nodeType":"YulAssignment","src":"3867:14:68","value":{"name":"slot","nativeSrc":"3877:4:68","nodeType":"YulIdentifier","src":"3877:4:68"},"variableNames":[{"name":"r.slot","nativeSrc":"3867:6:68","nodeType":"YulIdentifier","src":"3867:6:68"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12678,"isOffset":false,"isSlot":true,"src":"3867:6:68","suffix":"slot","valueSize":1},{"declaration":12674,"isOffset":false,"isSlot":false,"src":"3877:4:68","valueSize":1}],"flags":["memory-safe"],"id":12680,"nodeType":"InlineAssembly","src":"3828:63:68"}]},"documentation":{"id":12672,"nodeType":"StructuredDocumentation","src":"3649:84:68","text":" @dev Returns a `BytesSlot` with member `value` located at `slot`."},"id":12682,"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"3747:12:68","nodeType":"FunctionDefinition","parameters":{"id":12675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12674,"mutability":"mutable","name":"slot","nameLocation":"3768:4:68","nodeType":"VariableDeclaration","scope":12682,"src":"3760:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12673,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3760:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3759:14:68"},"returnParameters":{"id":12679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12678,"mutability":"mutable","name":"r","nameLocation":"3815:1:68","nodeType":"VariableDeclaration","scope":12682,"src":"3797:19:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12594_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":12677,"nodeType":"UserDefinedTypeName","pathNode":{"id":12676,"name":"BytesSlot","nameLocations":["3797:9:68"],"nodeType":"IdentifierPath","referencedDeclaration":12594,"src":"3797:9:68"},"referencedDeclaration":12594,"src":"3797:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12594_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"3796:21:68"},"scope":12694,"src":"3738:159:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12692,"nodeType":"Block","src":"4094:85:68","statements":[{"AST":{"nativeSrc":"4129:44:68","nodeType":"YulBlock","src":"4129:44:68","statements":[{"nativeSrc":"4143:20:68","nodeType":"YulAssignment","src":"4143:20:68","value":{"name":"store.slot","nativeSrc":"4153:10:68","nodeType":"YulIdentifier","src":"4153:10:68"},"variableNames":[{"name":"r.slot","nativeSrc":"4143:6:68","nodeType":"YulIdentifier","src":"4143:6:68"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12689,"isOffset":false,"isSlot":true,"src":"4143:6:68","suffix":"slot","valueSize":1},{"declaration":12685,"isOffset":false,"isSlot":true,"src":"4153:10:68","suffix":"slot","valueSize":1}],"flags":["memory-safe"],"id":12691,"nodeType":"InlineAssembly","src":"4104:69:68"}]},"documentation":{"id":12683,"nodeType":"StructuredDocumentation","src":"3903:99:68","text":" @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`."},"id":12693,"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"4016:12:68","nodeType":"FunctionDefinition","parameters":{"id":12686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12685,"mutability":"mutable","name":"store","nameLocation":"4043:5:68","nodeType":"VariableDeclaration","scope":12693,"src":"4029:19:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":12684,"name":"bytes","nodeType":"ElementaryTypeName","src":"4029:5:68","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4028:21:68"},"returnParameters":{"id":12690,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12689,"mutability":"mutable","name":"r","nameLocation":"4091:1:68","nodeType":"VariableDeclaration","scope":12693,"src":"4073:19:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12594_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":12688,"nodeType":"UserDefinedTypeName","pathNode":{"id":12687,"name":"BytesSlot","nameLocations":["4073:9:68"],"nodeType":"IdentifierPath","referencedDeclaration":12594,"src":"4073:9:68"},"referencedDeclaration":12594,"src":"4073:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12594_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"4072:21:68"},"scope":12694,"src":"4007:172:68","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":12695,"src":"1407:2774:68","usedErrors":[],"usedEvents":[]}],"src":"193:3989:68"},"id":68},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","exportedSymbols":{"IERC165":[12706]},"id":12707,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12696,"literals":["solidity",">=","0.4",".16"],"nodeType":"PragmaDirective","src":"115:25:69"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC165","contractDependencies":[],"contractKind":"interface","documentation":{"id":12697,"nodeType":"StructuredDocumentation","src":"142:280:69","text":" @dev Interface of the ERC-165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[ERC].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}."},"fullyImplemented":false,"id":12706,"linearizedBaseContracts":[12706],"name":"IERC165","nameLocation":"433:7:69","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":12698,"nodeType":"StructuredDocumentation","src":"447:340:69","text":" @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."},"functionSelector":"01ffc9a7","id":12705,"implemented":false,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"801:17:69","nodeType":"FunctionDefinition","parameters":{"id":12701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12700,"mutability":"mutable","name":"interfaceId","nameLocation":"826:11:69","nodeType":"VariableDeclaration","scope":12705,"src":"819:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":12699,"name":"bytes4","nodeType":"ElementaryTypeName","src":"819:6:69","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"818:20:69"},"returnParameters":{"id":12704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12703,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12705,"src":"862:4:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12702,"name":"bool","nodeType":"ElementaryTypeName","src":"862:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"861:6:69"},"scope":12706,"src":"792:76:69","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":12707,"src":"423:447:69","usedErrors":[],"usedEvents":[]}],"src":"115:756:69"},"id":69},"@openzeppelin/contracts/utils/math/Math.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","exportedSymbols":{"Math":[14327],"Panic":[12440],"SafeCast":[16092]},"id":14328,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12708,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"103:24:70"},{"absolutePath":"@openzeppelin/contracts/utils/Panic.sol","file":"../Panic.sol","id":12710,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14328,"sourceUnit":12441,"src":"129:35:70","symbolAliases":[{"foreign":{"id":12709,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"137:5:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"./SafeCast.sol","id":12712,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14328,"sourceUnit":16093,"src":"165:40:70","symbolAliases":[{"foreign":{"id":12711,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"173:8:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Math","contractDependencies":[],"contractKind":"library","documentation":{"id":12713,"nodeType":"StructuredDocumentation","src":"207:73:70","text":" @dev Standard math utilities missing in the Solidity language."},"fullyImplemented":true,"id":14327,"linearizedBaseContracts":[14327],"name":"Math","nameLocation":"289:4:70","nodeType":"ContractDefinition","nodes":[{"canonicalName":"Math.Rounding","id":12718,"members":[{"id":12714,"name":"Floor","nameLocation":"324:5:70","nodeType":"EnumValue","src":"324:5:70"},{"id":12715,"name":"Ceil","nameLocation":"367:4:70","nodeType":"EnumValue","src":"367:4:70"},{"id":12716,"name":"Trunc","nameLocation":"409:5:70","nodeType":"EnumValue","src":"409:5:70"},{"id":12717,"name":"Expand","nameLocation":"439:6:70","nodeType":"EnumValue","src":"439:6:70"}],"name":"Rounding","nameLocation":"305:8:70","nodeType":"EnumDefinition","src":"300:169:70"},{"body":{"id":12731,"nodeType":"Block","src":"731:112:70","statements":[{"AST":{"nativeSrc":"766:71:70","nodeType":"YulBlock","src":"766:71:70","statements":[{"nativeSrc":"780:16:70","nodeType":"YulAssignment","src":"780:16:70","value":{"arguments":[{"name":"a","nativeSrc":"791:1:70","nodeType":"YulIdentifier","src":"791:1:70"},{"name":"b","nativeSrc":"794:1:70","nodeType":"YulIdentifier","src":"794:1:70"}],"functionName":{"name":"add","nativeSrc":"787:3:70","nodeType":"YulIdentifier","src":"787:3:70"},"nativeSrc":"787:9:70","nodeType":"YulFunctionCall","src":"787:9:70"},"variableNames":[{"name":"low","nativeSrc":"780:3:70","nodeType":"YulIdentifier","src":"780:3:70"}]},{"nativeSrc":"809:18:70","nodeType":"YulAssignment","src":"809:18:70","value":{"arguments":[{"name":"low","nativeSrc":"820:3:70","nodeType":"YulIdentifier","src":"820:3:70"},{"name":"a","nativeSrc":"825:1:70","nodeType":"YulIdentifier","src":"825:1:70"}],"functionName":{"name":"lt","nativeSrc":"817:2:70","nodeType":"YulIdentifier","src":"817:2:70"},"nativeSrc":"817:10:70","nodeType":"YulFunctionCall","src":"817:10:70"},"variableNames":[{"name":"high","nativeSrc":"809:4:70","nodeType":"YulIdentifier","src":"809:4:70"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12721,"isOffset":false,"isSlot":false,"src":"791:1:70","valueSize":1},{"declaration":12721,"isOffset":false,"isSlot":false,"src":"825:1:70","valueSize":1},{"declaration":12723,"isOffset":false,"isSlot":false,"src":"794:1:70","valueSize":1},{"declaration":12726,"isOffset":false,"isSlot":false,"src":"809:4:70","valueSize":1},{"declaration":12728,"isOffset":false,"isSlot":false,"src":"780:3:70","valueSize":1},{"declaration":12728,"isOffset":false,"isSlot":false,"src":"820:3:70","valueSize":1}],"flags":["memory-safe"],"id":12730,"nodeType":"InlineAssembly","src":"741:96:70"}]},"documentation":{"id":12719,"nodeType":"StructuredDocumentation","src":"475:163:70","text":" @dev Return the 512-bit addition of two uint256.\n The result is stored in two 256 variables such that sum = high * 2²⁵⁶ + low."},"id":12732,"implemented":true,"kind":"function","modifiers":[],"name":"add512","nameLocation":"652:6:70","nodeType":"FunctionDefinition","parameters":{"id":12724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12721,"mutability":"mutable","name":"a","nameLocation":"667:1:70","nodeType":"VariableDeclaration","scope":12732,"src":"659:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12720,"name":"uint256","nodeType":"ElementaryTypeName","src":"659:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12723,"mutability":"mutable","name":"b","nameLocation":"678:1:70","nodeType":"VariableDeclaration","scope":12732,"src":"670:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12722,"name":"uint256","nodeType":"ElementaryTypeName","src":"670:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"658:22:70"},"returnParameters":{"id":12729,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12726,"mutability":"mutable","name":"high","nameLocation":"712:4:70","nodeType":"VariableDeclaration","scope":12732,"src":"704:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12725,"name":"uint256","nodeType":"ElementaryTypeName","src":"704:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12728,"mutability":"mutable","name":"low","nameLocation":"726:3:70","nodeType":"VariableDeclaration","scope":12732,"src":"718:11:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12727,"name":"uint256","nodeType":"ElementaryTypeName","src":"718:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"703:27:70"},"scope":14327,"src":"643:200:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12745,"nodeType":"Block","src":"1115:462:70","statements":[{"AST":{"nativeSrc":"1437:134:70","nodeType":"YulBlock","src":"1437:134:70","statements":[{"nativeSrc":"1451:30:70","nodeType":"YulVariableDeclaration","src":"1451:30:70","value":{"arguments":[{"name":"a","nativeSrc":"1468:1:70","nodeType":"YulIdentifier","src":"1468:1:70"},{"name":"b","nativeSrc":"1471:1:70","nodeType":"YulIdentifier","src":"1471:1:70"},{"arguments":[{"kind":"number","nativeSrc":"1478:1:70","nodeType":"YulLiteral","src":"1478:1:70","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"1474:3:70","nodeType":"YulIdentifier","src":"1474:3:70"},"nativeSrc":"1474:6:70","nodeType":"YulFunctionCall","src":"1474:6:70"}],"functionName":{"name":"mulmod","nativeSrc":"1461:6:70","nodeType":"YulIdentifier","src":"1461:6:70"},"nativeSrc":"1461:20:70","nodeType":"YulFunctionCall","src":"1461:20:70"},"variables":[{"name":"mm","nativeSrc":"1455:2:70","nodeType":"YulTypedName","src":"1455:2:70","type":""}]},{"nativeSrc":"1494:16:70","nodeType":"YulAssignment","src":"1494:16:70","value":{"arguments":[{"name":"a","nativeSrc":"1505:1:70","nodeType":"YulIdentifier","src":"1505:1:70"},{"name":"b","nativeSrc":"1508:1:70","nodeType":"YulIdentifier","src":"1508:1:70"}],"functionName":{"name":"mul","nativeSrc":"1501:3:70","nodeType":"YulIdentifier","src":"1501:3:70"},"nativeSrc":"1501:9:70","nodeType":"YulFunctionCall","src":"1501:9:70"},"variableNames":[{"name":"low","nativeSrc":"1494:3:70","nodeType":"YulIdentifier","src":"1494:3:70"}]},{"nativeSrc":"1523:38:70","nodeType":"YulAssignment","src":"1523:38:70","value":{"arguments":[{"arguments":[{"name":"mm","nativeSrc":"1539:2:70","nodeType":"YulIdentifier","src":"1539:2:70"},{"name":"low","nativeSrc":"1543:3:70","nodeType":"YulIdentifier","src":"1543:3:70"}],"functionName":{"name":"sub","nativeSrc":"1535:3:70","nodeType":"YulIdentifier","src":"1535:3:70"},"nativeSrc":"1535:12:70","nodeType":"YulFunctionCall","src":"1535:12:70"},{"arguments":[{"name":"mm","nativeSrc":"1552:2:70","nodeType":"YulIdentifier","src":"1552:2:70"},{"name":"low","nativeSrc":"1556:3:70","nodeType":"YulIdentifier","src":"1556:3:70"}],"functionName":{"name":"lt","nativeSrc":"1549:2:70","nodeType":"YulIdentifier","src":"1549:2:70"},"nativeSrc":"1549:11:70","nodeType":"YulFunctionCall","src":"1549:11:70"}],"functionName":{"name":"sub","nativeSrc":"1531:3:70","nodeType":"YulIdentifier","src":"1531:3:70"},"nativeSrc":"1531:30:70","nodeType":"YulFunctionCall","src":"1531:30:70"},"variableNames":[{"name":"high","nativeSrc":"1523:4:70","nodeType":"YulIdentifier","src":"1523:4:70"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12735,"isOffset":false,"isSlot":false,"src":"1468:1:70","valueSize":1},{"declaration":12735,"isOffset":false,"isSlot":false,"src":"1505:1:70","valueSize":1},{"declaration":12737,"isOffset":false,"isSlot":false,"src":"1471:1:70","valueSize":1},{"declaration":12737,"isOffset":false,"isSlot":false,"src":"1508:1:70","valueSize":1},{"declaration":12740,"isOffset":false,"isSlot":false,"src":"1523:4:70","valueSize":1},{"declaration":12742,"isOffset":false,"isSlot":false,"src":"1494:3:70","valueSize":1},{"declaration":12742,"isOffset":false,"isSlot":false,"src":"1543:3:70","valueSize":1},{"declaration":12742,"isOffset":false,"isSlot":false,"src":"1556:3:70","valueSize":1}],"flags":["memory-safe"],"id":12744,"nodeType":"InlineAssembly","src":"1412:159:70"}]},"documentation":{"id":12733,"nodeType":"StructuredDocumentation","src":"849:173:70","text":" @dev Return the 512-bit multiplication of two uint256.\n The result is stored in two 256 variables such that product = high * 2²⁵⁶ + low."},"id":12746,"implemented":true,"kind":"function","modifiers":[],"name":"mul512","nameLocation":"1036:6:70","nodeType":"FunctionDefinition","parameters":{"id":12738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12735,"mutability":"mutable","name":"a","nameLocation":"1051:1:70","nodeType":"VariableDeclaration","scope":12746,"src":"1043:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12734,"name":"uint256","nodeType":"ElementaryTypeName","src":"1043:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12737,"mutability":"mutable","name":"b","nameLocation":"1062:1:70","nodeType":"VariableDeclaration","scope":12746,"src":"1054:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12736,"name":"uint256","nodeType":"ElementaryTypeName","src":"1054:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1042:22:70"},"returnParameters":{"id":12743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12740,"mutability":"mutable","name":"high","nameLocation":"1096:4:70","nodeType":"VariableDeclaration","scope":12746,"src":"1088:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12739,"name":"uint256","nodeType":"ElementaryTypeName","src":"1088:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12742,"mutability":"mutable","name":"low","nameLocation":"1110:3:70","nodeType":"VariableDeclaration","scope":12746,"src":"1102:11:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12741,"name":"uint256","nodeType":"ElementaryTypeName","src":"1102:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1087:27:70"},"scope":14327,"src":"1027:550:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12780,"nodeType":"Block","src":"1784:149:70","statements":[{"id":12779,"nodeType":"UncheckedBlock","src":"1794:133:70","statements":[{"assignments":[12759],"declarations":[{"constant":false,"id":12759,"mutability":"mutable","name":"c","nameLocation":"1826:1:70","nodeType":"VariableDeclaration","scope":12779,"src":"1818:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12758,"name":"uint256","nodeType":"ElementaryTypeName","src":"1818:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12763,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12760,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12749,"src":"1830:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":12761,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12751,"src":"1834:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1830:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1818:17:70"},{"expression":{"id":12768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12764,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12754,"src":"1849:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12765,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12759,"src":"1859:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":12766,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12749,"src":"1864:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1859:6:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1849:16:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12769,"nodeType":"ExpressionStatement","src":"1849:16:70"},{"expression":{"id":12777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12770,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12756,"src":"1879:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12771,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12759,"src":"1888:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":12774,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12754,"src":"1908:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":12772,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"1892:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":12773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1901:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"1892:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":12775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1892:24:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1888:28:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1879:37:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12778,"nodeType":"ExpressionStatement","src":"1879:37:70"}]}]},"documentation":{"id":12747,"nodeType":"StructuredDocumentation","src":"1583:105:70","text":" @dev Returns the addition of two unsigned integers, with a success flag (no overflow)."},"id":12781,"implemented":true,"kind":"function","modifiers":[],"name":"tryAdd","nameLocation":"1702:6:70","nodeType":"FunctionDefinition","parameters":{"id":12752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12749,"mutability":"mutable","name":"a","nameLocation":"1717:1:70","nodeType":"VariableDeclaration","scope":12781,"src":"1709:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12748,"name":"uint256","nodeType":"ElementaryTypeName","src":"1709:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12751,"mutability":"mutable","name":"b","nameLocation":"1728:1:70","nodeType":"VariableDeclaration","scope":12781,"src":"1720:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12750,"name":"uint256","nodeType":"ElementaryTypeName","src":"1720:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1708:22:70"},"returnParameters":{"id":12757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12754,"mutability":"mutable","name":"success","nameLocation":"1759:7:70","nodeType":"VariableDeclaration","scope":12781,"src":"1754:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12753,"name":"bool","nodeType":"ElementaryTypeName","src":"1754:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12756,"mutability":"mutable","name":"result","nameLocation":"1776:6:70","nodeType":"VariableDeclaration","scope":12781,"src":"1768:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12755,"name":"uint256","nodeType":"ElementaryTypeName","src":"1768:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1753:30:70"},"scope":14327,"src":"1693:240:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12815,"nodeType":"Block","src":"2143:149:70","statements":[{"id":12814,"nodeType":"UncheckedBlock","src":"2153:133:70","statements":[{"assignments":[12794],"declarations":[{"constant":false,"id":12794,"mutability":"mutable","name":"c","nameLocation":"2185:1:70","nodeType":"VariableDeclaration","scope":12814,"src":"2177:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12793,"name":"uint256","nodeType":"ElementaryTypeName","src":"2177:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12798,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12795,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12784,"src":"2189:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":12796,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12786,"src":"2193:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2189:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2177:17:70"},{"expression":{"id":12803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12799,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12789,"src":"2208:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12800,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12794,"src":"2218:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":12801,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12784,"src":"2223:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2218:6:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2208:16:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12804,"nodeType":"ExpressionStatement","src":"2208:16:70"},{"expression":{"id":12812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12805,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12791,"src":"2238:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12806,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12794,"src":"2247:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":12809,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12789,"src":"2267:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":12807,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"2251:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":12808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2260:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"2251:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":12810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2251:24:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2247:28:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2238:37:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12813,"nodeType":"ExpressionStatement","src":"2238:37:70"}]}]},"documentation":{"id":12782,"nodeType":"StructuredDocumentation","src":"1939:108:70","text":" @dev Returns the subtraction of two unsigned integers, with a success flag (no overflow)."},"id":12816,"implemented":true,"kind":"function","modifiers":[],"name":"trySub","nameLocation":"2061:6:70","nodeType":"FunctionDefinition","parameters":{"id":12787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12784,"mutability":"mutable","name":"a","nameLocation":"2076:1:70","nodeType":"VariableDeclaration","scope":12816,"src":"2068:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12783,"name":"uint256","nodeType":"ElementaryTypeName","src":"2068:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12786,"mutability":"mutable","name":"b","nameLocation":"2087:1:70","nodeType":"VariableDeclaration","scope":12816,"src":"2079:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12785,"name":"uint256","nodeType":"ElementaryTypeName","src":"2079:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2067:22:70"},"returnParameters":{"id":12792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12789,"mutability":"mutable","name":"success","nameLocation":"2118:7:70","nodeType":"VariableDeclaration","scope":12816,"src":"2113:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12788,"name":"bool","nodeType":"ElementaryTypeName","src":"2113:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12791,"mutability":"mutable","name":"result","nameLocation":"2135:6:70","nodeType":"VariableDeclaration","scope":12816,"src":"2127:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12790,"name":"uint256","nodeType":"ElementaryTypeName","src":"2127:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2112:30:70"},"scope":14327,"src":"2052:240:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12845,"nodeType":"Block","src":"2505:391:70","statements":[{"id":12844,"nodeType":"UncheckedBlock","src":"2515:375:70","statements":[{"assignments":[12829],"declarations":[{"constant":false,"id":12829,"mutability":"mutable","name":"c","nameLocation":"2547:1:70","nodeType":"VariableDeclaration","scope":12844,"src":"2539:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12828,"name":"uint256","nodeType":"ElementaryTypeName","src":"2539:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12833,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12830,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12819,"src":"2551:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":12831,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12821,"src":"2555:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2551:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2539:17:70"},{"AST":{"nativeSrc":"2595:188:70","nodeType":"YulBlock","src":"2595:188:70","statements":[{"nativeSrc":"2727:42:70","nodeType":"YulAssignment","src":"2727:42:70","value":{"arguments":[{"arguments":[{"arguments":[{"name":"c","nativeSrc":"2748:1:70","nodeType":"YulIdentifier","src":"2748:1:70"},{"name":"a","nativeSrc":"2751:1:70","nodeType":"YulIdentifier","src":"2751:1:70"}],"functionName":{"name":"div","nativeSrc":"2744:3:70","nodeType":"YulIdentifier","src":"2744:3:70"},"nativeSrc":"2744:9:70","nodeType":"YulFunctionCall","src":"2744:9:70"},{"name":"b","nativeSrc":"2755:1:70","nodeType":"YulIdentifier","src":"2755:1:70"}],"functionName":{"name":"eq","nativeSrc":"2741:2:70","nodeType":"YulIdentifier","src":"2741:2:70"},"nativeSrc":"2741:16:70","nodeType":"YulFunctionCall","src":"2741:16:70"},{"arguments":[{"name":"a","nativeSrc":"2766:1:70","nodeType":"YulIdentifier","src":"2766:1:70"}],"functionName":{"name":"iszero","nativeSrc":"2759:6:70","nodeType":"YulIdentifier","src":"2759:6:70"},"nativeSrc":"2759:9:70","nodeType":"YulFunctionCall","src":"2759:9:70"}],"functionName":{"name":"or","nativeSrc":"2738:2:70","nodeType":"YulIdentifier","src":"2738:2:70"},"nativeSrc":"2738:31:70","nodeType":"YulFunctionCall","src":"2738:31:70"},"variableNames":[{"name":"success","nativeSrc":"2727:7:70","nodeType":"YulIdentifier","src":"2727:7:70"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12819,"isOffset":false,"isSlot":false,"src":"2751:1:70","valueSize":1},{"declaration":12819,"isOffset":false,"isSlot":false,"src":"2766:1:70","valueSize":1},{"declaration":12821,"isOffset":false,"isSlot":false,"src":"2755:1:70","valueSize":1},{"declaration":12829,"isOffset":false,"isSlot":false,"src":"2748:1:70","valueSize":1},{"declaration":12824,"isOffset":false,"isSlot":false,"src":"2727:7:70","valueSize":1}],"flags":["memory-safe"],"id":12834,"nodeType":"InlineAssembly","src":"2570:213:70"},{"expression":{"id":12842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12835,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12826,"src":"2842:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12836,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12829,"src":"2851:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":12839,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12824,"src":"2871:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":12837,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"2855:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":12838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2864:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"2855:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":12840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2855:24:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2851:28:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2842:37:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12843,"nodeType":"ExpressionStatement","src":"2842:37:70"}]}]},"documentation":{"id":12817,"nodeType":"StructuredDocumentation","src":"2298:111:70","text":" @dev Returns the multiplication of two unsigned integers, with a success flag (no overflow)."},"id":12846,"implemented":true,"kind":"function","modifiers":[],"name":"tryMul","nameLocation":"2423:6:70","nodeType":"FunctionDefinition","parameters":{"id":12822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12819,"mutability":"mutable","name":"a","nameLocation":"2438:1:70","nodeType":"VariableDeclaration","scope":12846,"src":"2430:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12818,"name":"uint256","nodeType":"ElementaryTypeName","src":"2430:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12821,"mutability":"mutable","name":"b","nameLocation":"2449:1:70","nodeType":"VariableDeclaration","scope":12846,"src":"2441:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12820,"name":"uint256","nodeType":"ElementaryTypeName","src":"2441:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2429:22:70"},"returnParameters":{"id":12827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12824,"mutability":"mutable","name":"success","nameLocation":"2480:7:70","nodeType":"VariableDeclaration","scope":12846,"src":"2475:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12823,"name":"bool","nodeType":"ElementaryTypeName","src":"2475:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12826,"mutability":"mutable","name":"result","nameLocation":"2497:6:70","nodeType":"VariableDeclaration","scope":12846,"src":"2489:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12825,"name":"uint256","nodeType":"ElementaryTypeName","src":"2489:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2474:30:70"},"scope":14327,"src":"2414:482:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12866,"nodeType":"Block","src":"3111:231:70","statements":[{"id":12865,"nodeType":"UncheckedBlock","src":"3121:215:70","statements":[{"expression":{"id":12862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12858,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12854,"src":"3145:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12859,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12851,"src":"3155:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3159:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3155:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3145:15:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12863,"nodeType":"ExpressionStatement","src":"3145:15:70"},{"AST":{"nativeSrc":"3199:127:70","nodeType":"YulBlock","src":"3199:127:70","statements":[{"nativeSrc":"3293:19:70","nodeType":"YulAssignment","src":"3293:19:70","value":{"arguments":[{"name":"a","nativeSrc":"3307:1:70","nodeType":"YulIdentifier","src":"3307:1:70"},{"name":"b","nativeSrc":"3310:1:70","nodeType":"YulIdentifier","src":"3310:1:70"}],"functionName":{"name":"div","nativeSrc":"3303:3:70","nodeType":"YulIdentifier","src":"3303:3:70"},"nativeSrc":"3303:9:70","nodeType":"YulFunctionCall","src":"3303:9:70"},"variableNames":[{"name":"result","nativeSrc":"3293:6:70","nodeType":"YulIdentifier","src":"3293:6:70"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12849,"isOffset":false,"isSlot":false,"src":"3307:1:70","valueSize":1},{"declaration":12851,"isOffset":false,"isSlot":false,"src":"3310:1:70","valueSize":1},{"declaration":12856,"isOffset":false,"isSlot":false,"src":"3293:6:70","valueSize":1}],"flags":["memory-safe"],"id":12864,"nodeType":"InlineAssembly","src":"3174:152:70"}]}]},"documentation":{"id":12847,"nodeType":"StructuredDocumentation","src":"2902:113:70","text":" @dev Returns the division of two unsigned integers, with a success flag (no division by zero)."},"id":12867,"implemented":true,"kind":"function","modifiers":[],"name":"tryDiv","nameLocation":"3029:6:70","nodeType":"FunctionDefinition","parameters":{"id":12852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12849,"mutability":"mutable","name":"a","nameLocation":"3044:1:70","nodeType":"VariableDeclaration","scope":12867,"src":"3036:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12848,"name":"uint256","nodeType":"ElementaryTypeName","src":"3036:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12851,"mutability":"mutable","name":"b","nameLocation":"3055:1:70","nodeType":"VariableDeclaration","scope":12867,"src":"3047:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12850,"name":"uint256","nodeType":"ElementaryTypeName","src":"3047:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3035:22:70"},"returnParameters":{"id":12857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12854,"mutability":"mutable","name":"success","nameLocation":"3086:7:70","nodeType":"VariableDeclaration","scope":12867,"src":"3081:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12853,"name":"bool","nodeType":"ElementaryTypeName","src":"3081:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12856,"mutability":"mutable","name":"result","nameLocation":"3103:6:70","nodeType":"VariableDeclaration","scope":12867,"src":"3095:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12855,"name":"uint256","nodeType":"ElementaryTypeName","src":"3095:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3080:30:70"},"scope":14327,"src":"3020:322:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12887,"nodeType":"Block","src":"3567:231:70","statements":[{"id":12886,"nodeType":"UncheckedBlock","src":"3577:215:70","statements":[{"expression":{"id":12883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12879,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12875,"src":"3601:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12880,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12872,"src":"3611:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3615:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3611:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3601:15:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12884,"nodeType":"ExpressionStatement","src":"3601:15:70"},{"AST":{"nativeSrc":"3655:127:70","nodeType":"YulBlock","src":"3655:127:70","statements":[{"nativeSrc":"3749:19:70","nodeType":"YulAssignment","src":"3749:19:70","value":{"arguments":[{"name":"a","nativeSrc":"3763:1:70","nodeType":"YulIdentifier","src":"3763:1:70"},{"name":"b","nativeSrc":"3766:1:70","nodeType":"YulIdentifier","src":"3766:1:70"}],"functionName":{"name":"mod","nativeSrc":"3759:3:70","nodeType":"YulIdentifier","src":"3759:3:70"},"nativeSrc":"3759:9:70","nodeType":"YulFunctionCall","src":"3759:9:70"},"variableNames":[{"name":"result","nativeSrc":"3749:6:70","nodeType":"YulIdentifier","src":"3749:6:70"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12870,"isOffset":false,"isSlot":false,"src":"3763:1:70","valueSize":1},{"declaration":12872,"isOffset":false,"isSlot":false,"src":"3766:1:70","valueSize":1},{"declaration":12877,"isOffset":false,"isSlot":false,"src":"3749:6:70","valueSize":1}],"flags":["memory-safe"],"id":12885,"nodeType":"InlineAssembly","src":"3630:152:70"}]}]},"documentation":{"id":12868,"nodeType":"StructuredDocumentation","src":"3348:123:70","text":" @dev Returns the remainder of dividing two unsigned integers, with a success flag (no division by zero)."},"id":12888,"implemented":true,"kind":"function","modifiers":[],"name":"tryMod","nameLocation":"3485:6:70","nodeType":"FunctionDefinition","parameters":{"id":12873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12870,"mutability":"mutable","name":"a","nameLocation":"3500:1:70","nodeType":"VariableDeclaration","scope":12888,"src":"3492:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12869,"name":"uint256","nodeType":"ElementaryTypeName","src":"3492:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12872,"mutability":"mutable","name":"b","nameLocation":"3511:1:70","nodeType":"VariableDeclaration","scope":12888,"src":"3503:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12871,"name":"uint256","nodeType":"ElementaryTypeName","src":"3503:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3491:22:70"},"returnParameters":{"id":12878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12875,"mutability":"mutable","name":"success","nameLocation":"3542:7:70","nodeType":"VariableDeclaration","scope":12888,"src":"3537:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12874,"name":"bool","nodeType":"ElementaryTypeName","src":"3537:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12877,"mutability":"mutable","name":"result","nameLocation":"3559:6:70","nodeType":"VariableDeclaration","scope":12888,"src":"3551:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12876,"name":"uint256","nodeType":"ElementaryTypeName","src":"3551:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3536:30:70"},"scope":14327,"src":"3476:322:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12917,"nodeType":"Block","src":"3989:122:70","statements":[{"assignments":[12899,12901],"declarations":[{"constant":false,"id":12899,"mutability":"mutable","name":"success","nameLocation":"4005:7:70","nodeType":"VariableDeclaration","scope":12917,"src":"4000:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12898,"name":"bool","nodeType":"ElementaryTypeName","src":"4000:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12901,"mutability":"mutable","name":"result","nameLocation":"4022:6:70","nodeType":"VariableDeclaration","scope":12917,"src":"4014:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12900,"name":"uint256","nodeType":"ElementaryTypeName","src":"4014:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12906,"initialValue":{"arguments":[{"id":12903,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12891,"src":"4039:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12904,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12893,"src":"4042:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12902,"name":"tryAdd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12781,"src":"4032:6:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (bool,uint256)"}},"id":12905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4032:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"3999:45:70"},{"expression":{"arguments":[{"id":12908,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12899,"src":"4069:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":12909,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12901,"src":"4078:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"arguments":[{"id":12912,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4091:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12911,"name":"uint256","nodeType":"ElementaryTypeName","src":"4091:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":12910,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4086:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4086:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":12914,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4100:3:70","memberName":"max","nodeType":"MemberAccess","src":"4086:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12907,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12995,"src":"4061:7:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":12915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4061:43:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12897,"id":12916,"nodeType":"Return","src":"4054:50:70"}]},"documentation":{"id":12889,"nodeType":"StructuredDocumentation","src":"3804:103:70","text":" @dev Unsigned saturating addition, bounds to `2²⁵⁶ - 1` instead of overflowing."},"id":12918,"implemented":true,"kind":"function","modifiers":[],"name":"saturatingAdd","nameLocation":"3921:13:70","nodeType":"FunctionDefinition","parameters":{"id":12894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12891,"mutability":"mutable","name":"a","nameLocation":"3943:1:70","nodeType":"VariableDeclaration","scope":12918,"src":"3935:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12890,"name":"uint256","nodeType":"ElementaryTypeName","src":"3935:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12893,"mutability":"mutable","name":"b","nameLocation":"3954:1:70","nodeType":"VariableDeclaration","scope":12918,"src":"3946:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12892,"name":"uint256","nodeType":"ElementaryTypeName","src":"3946:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3934:22:70"},"returnParameters":{"id":12897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12896,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12918,"src":"3980:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12895,"name":"uint256","nodeType":"ElementaryTypeName","src":"3980:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3979:9:70"},"scope":14327,"src":"3912:199:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12937,"nodeType":"Block","src":"4294:73:70","statements":[{"assignments":[null,12929],"declarations":[null,{"constant":false,"id":12929,"mutability":"mutable","name":"result","nameLocation":"4315:6:70","nodeType":"VariableDeclaration","scope":12937,"src":"4307:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12928,"name":"uint256","nodeType":"ElementaryTypeName","src":"4307:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12934,"initialValue":{"arguments":[{"id":12931,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12921,"src":"4332:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12932,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12923,"src":"4335:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12930,"name":"trySub","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12816,"src":"4325:6:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (bool,uint256)"}},"id":12933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4325:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4304:33:70"},{"expression":{"id":12935,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12929,"src":"4354:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12927,"id":12936,"nodeType":"Return","src":"4347:13:70"}]},"documentation":{"id":12919,"nodeType":"StructuredDocumentation","src":"4117:95:70","text":" @dev Unsigned saturating subtraction, bounds to zero instead of overflowing."},"id":12938,"implemented":true,"kind":"function","modifiers":[],"name":"saturatingSub","nameLocation":"4226:13:70","nodeType":"FunctionDefinition","parameters":{"id":12924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12921,"mutability":"mutable","name":"a","nameLocation":"4248:1:70","nodeType":"VariableDeclaration","scope":12938,"src":"4240:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12920,"name":"uint256","nodeType":"ElementaryTypeName","src":"4240:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12923,"mutability":"mutable","name":"b","nameLocation":"4259:1:70","nodeType":"VariableDeclaration","scope":12938,"src":"4251:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12922,"name":"uint256","nodeType":"ElementaryTypeName","src":"4251:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4239:22:70"},"returnParameters":{"id":12927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12926,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12938,"src":"4285:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12925,"name":"uint256","nodeType":"ElementaryTypeName","src":"4285:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4284:9:70"},"scope":14327,"src":"4217:150:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12967,"nodeType":"Block","src":"4564:122:70","statements":[{"assignments":[12949,12951],"declarations":[{"constant":false,"id":12949,"mutability":"mutable","name":"success","nameLocation":"4580:7:70","nodeType":"VariableDeclaration","scope":12967,"src":"4575:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12948,"name":"bool","nodeType":"ElementaryTypeName","src":"4575:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12951,"mutability":"mutable","name":"result","nameLocation":"4597:6:70","nodeType":"VariableDeclaration","scope":12967,"src":"4589:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12950,"name":"uint256","nodeType":"ElementaryTypeName","src":"4589:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12956,"initialValue":{"arguments":[{"id":12953,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12941,"src":"4614:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12954,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12943,"src":"4617:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12952,"name":"tryMul","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12846,"src":"4607:6:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (bool,uint256)"}},"id":12955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4607:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4574:45:70"},{"expression":{"arguments":[{"id":12958,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12949,"src":"4644:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":12959,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12951,"src":"4653:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"arguments":[{"id":12962,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4666:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12961,"name":"uint256","nodeType":"ElementaryTypeName","src":"4666:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":12960,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4661:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4661:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":12964,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4675:3:70","memberName":"max","nodeType":"MemberAccess","src":"4661:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12957,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12995,"src":"4636:7:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":12965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4636:43:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12947,"id":12966,"nodeType":"Return","src":"4629:50:70"}]},"documentation":{"id":12939,"nodeType":"StructuredDocumentation","src":"4373:109:70","text":" @dev Unsigned saturating multiplication, bounds to `2²⁵⁶ - 1` instead of overflowing."},"id":12968,"implemented":true,"kind":"function","modifiers":[],"name":"saturatingMul","nameLocation":"4496:13:70","nodeType":"FunctionDefinition","parameters":{"id":12944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12941,"mutability":"mutable","name":"a","nameLocation":"4518:1:70","nodeType":"VariableDeclaration","scope":12968,"src":"4510:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12940,"name":"uint256","nodeType":"ElementaryTypeName","src":"4510:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12943,"mutability":"mutable","name":"b","nameLocation":"4529:1:70","nodeType":"VariableDeclaration","scope":12968,"src":"4521:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12942,"name":"uint256","nodeType":"ElementaryTypeName","src":"4521:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4509:22:70"},"returnParameters":{"id":12947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12946,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12968,"src":"4555:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12945,"name":"uint256","nodeType":"ElementaryTypeName","src":"4555:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4554:9:70"},"scope":14327,"src":"4487:199:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12994,"nodeType":"Block","src":"5158:207:70","statements":[{"id":12993,"nodeType":"UncheckedBlock","src":"5168:191:70","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12980,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12975,"src":"5306:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12981,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12973,"src":"5312:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":12982,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12975,"src":"5316:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5312:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12984,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5311:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":12987,"name":"condition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12971,"src":"5337:9:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":12985,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"5321:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":12986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5330:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"5321:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":12988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5321:26:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5311:36:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12990,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5310:38:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5306:42:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12979,"id":12992,"nodeType":"Return","src":"5299:49:70"}]}]},"documentation":{"id":12969,"nodeType":"StructuredDocumentation","src":"4692:374:70","text":" @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n one branch when needed, making this function more expensive."},"id":12995,"implemented":true,"kind":"function","modifiers":[],"name":"ternary","nameLocation":"5080:7:70","nodeType":"FunctionDefinition","parameters":{"id":12976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12971,"mutability":"mutable","name":"condition","nameLocation":"5093:9:70","nodeType":"VariableDeclaration","scope":12995,"src":"5088:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12970,"name":"bool","nodeType":"ElementaryTypeName","src":"5088:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12973,"mutability":"mutable","name":"a","nameLocation":"5112:1:70","nodeType":"VariableDeclaration","scope":12995,"src":"5104:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12972,"name":"uint256","nodeType":"ElementaryTypeName","src":"5104:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12975,"mutability":"mutable","name":"b","nameLocation":"5123:1:70","nodeType":"VariableDeclaration","scope":12995,"src":"5115:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12974,"name":"uint256","nodeType":"ElementaryTypeName","src":"5115:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5087:38:70"},"returnParameters":{"id":12979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12978,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12995,"src":"5149:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12977,"name":"uint256","nodeType":"ElementaryTypeName","src":"5149:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5148:9:70"},"scope":14327,"src":"5071:294:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13013,"nodeType":"Block","src":"5502:44:70","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13006,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12998,"src":"5527:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":13007,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13000,"src":"5531:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5527:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":13009,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12998,"src":"5534:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13010,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13000,"src":"5537:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13005,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12995,"src":"5519:7:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":13011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5519:20:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13004,"id":13012,"nodeType":"Return","src":"5512:27:70"}]},"documentation":{"id":12996,"nodeType":"StructuredDocumentation","src":"5371:59:70","text":" @dev Returns the largest of two numbers."},"id":13014,"implemented":true,"kind":"function","modifiers":[],"name":"max","nameLocation":"5444:3:70","nodeType":"FunctionDefinition","parameters":{"id":13001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12998,"mutability":"mutable","name":"a","nameLocation":"5456:1:70","nodeType":"VariableDeclaration","scope":13014,"src":"5448:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12997,"name":"uint256","nodeType":"ElementaryTypeName","src":"5448:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13000,"mutability":"mutable","name":"b","nameLocation":"5467:1:70","nodeType":"VariableDeclaration","scope":13014,"src":"5459:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12999,"name":"uint256","nodeType":"ElementaryTypeName","src":"5459:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5447:22:70"},"returnParameters":{"id":13004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13003,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13014,"src":"5493:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13002,"name":"uint256","nodeType":"ElementaryTypeName","src":"5493:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5492:9:70"},"scope":14327,"src":"5435:111:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13032,"nodeType":"Block","src":"5684:44:70","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13025,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13017,"src":"5709:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":13026,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13019,"src":"5713:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5709:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":13028,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13017,"src":"5716:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13029,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13019,"src":"5719:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13024,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12995,"src":"5701:7:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":13030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5701:20:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13023,"id":13031,"nodeType":"Return","src":"5694:27:70"}]},"documentation":{"id":13015,"nodeType":"StructuredDocumentation","src":"5552:60:70","text":" @dev Returns the smallest of two numbers."},"id":13033,"implemented":true,"kind":"function","modifiers":[],"name":"min","nameLocation":"5626:3:70","nodeType":"FunctionDefinition","parameters":{"id":13020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13017,"mutability":"mutable","name":"a","nameLocation":"5638:1:70","nodeType":"VariableDeclaration","scope":13033,"src":"5630:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13016,"name":"uint256","nodeType":"ElementaryTypeName","src":"5630:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13019,"mutability":"mutable","name":"b","nameLocation":"5649:1:70","nodeType":"VariableDeclaration","scope":13033,"src":"5641:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13018,"name":"uint256","nodeType":"ElementaryTypeName","src":"5641:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5629:22:70"},"returnParameters":{"id":13023,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13022,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13033,"src":"5675:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13021,"name":"uint256","nodeType":"ElementaryTypeName","src":"5675:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5674:9:70"},"scope":14327,"src":"5617:111:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13055,"nodeType":"Block","src":"5912:82:70","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13043,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13036,"src":"5967:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13044,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13038,"src":"5971:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5967:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13046,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5966:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13047,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13036,"src":"5977:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":13048,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13038,"src":"5981:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5977:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13050,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5976:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":13051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5986:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"5976:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5966:21:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13042,"id":13054,"nodeType":"Return","src":"5959:28:70"}]},"documentation":{"id":13034,"nodeType":"StructuredDocumentation","src":"5734:102:70","text":" @dev Returns the average of two numbers. The result is rounded towards\n zero."},"id":13056,"implemented":true,"kind":"function","modifiers":[],"name":"average","nameLocation":"5850:7:70","nodeType":"FunctionDefinition","parameters":{"id":13039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13036,"mutability":"mutable","name":"a","nameLocation":"5866:1:70","nodeType":"VariableDeclaration","scope":13056,"src":"5858:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13035,"name":"uint256","nodeType":"ElementaryTypeName","src":"5858:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13038,"mutability":"mutable","name":"b","nameLocation":"5877:1:70","nodeType":"VariableDeclaration","scope":13056,"src":"5869:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13037,"name":"uint256","nodeType":"ElementaryTypeName","src":"5869:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5857:22:70"},"returnParameters":{"id":13042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13041,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13056,"src":"5903:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13040,"name":"uint256","nodeType":"ElementaryTypeName","src":"5903:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5902:9:70"},"scope":14327,"src":"5841:153:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13096,"nodeType":"Block","src":"6286:633:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13066,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13061,"src":"6300:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6305:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6300:6:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13077,"nodeType":"IfStatement","src":"6296:150:70","trueBody":{"id":13076,"nodeType":"Block","src":"6308:138:70","statements":[{"expression":{"arguments":[{"expression":{"id":13072,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"6412:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13073,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6418:16:70","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":12407,"src":"6412:22:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13069,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"6400:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6406:5:70","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":12439,"src":"6400:11:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":13074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6400:35:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13075,"nodeType":"ExpressionStatement","src":"6400:35:70"}]}},{"id":13095,"nodeType":"UncheckedBlock","src":"6829:84:70","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13080,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13059,"src":"6876:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":13081,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6880:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6876:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13078,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"6860:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6869:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"6860:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6860:22:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13084,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13059,"src":"6887:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":13085,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6891:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6887:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13087,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6886:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13088,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13061,"src":"6896:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6886:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":13090,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6900:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6886:15:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13092,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6885:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6860:42:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13065,"id":13094,"nodeType":"Return","src":"6853:49:70"}]}]},"documentation":{"id":13057,"nodeType":"StructuredDocumentation","src":"6000:210:70","text":" @dev Returns the ceiling of the division of two numbers.\n This differs from standard division with `/` in that it rounds towards infinity instead\n of rounding towards zero."},"id":13097,"implemented":true,"kind":"function","modifiers":[],"name":"ceilDiv","nameLocation":"6224:7:70","nodeType":"FunctionDefinition","parameters":{"id":13062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13059,"mutability":"mutable","name":"a","nameLocation":"6240:1:70","nodeType":"VariableDeclaration","scope":13097,"src":"6232:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13058,"name":"uint256","nodeType":"ElementaryTypeName","src":"6232:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13061,"mutability":"mutable","name":"b","nameLocation":"6251:1:70","nodeType":"VariableDeclaration","scope":13097,"src":"6243:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13060,"name":"uint256","nodeType":"ElementaryTypeName","src":"6243:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6231:22:70"},"returnParameters":{"id":13065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13064,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13097,"src":"6277:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13063,"name":"uint256","nodeType":"ElementaryTypeName","src":"6277:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6276:9:70"},"scope":14327,"src":"6215:704:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13232,"nodeType":"Block","src":"7340:3585:70","statements":[{"id":13231,"nodeType":"UncheckedBlock","src":"7350:3569:70","statements":[{"assignments":[13110,13112],"declarations":[{"constant":false,"id":13110,"mutability":"mutable","name":"high","nameLocation":"7383:4:70","nodeType":"VariableDeclaration","scope":13231,"src":"7375:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13109,"name":"uint256","nodeType":"ElementaryTypeName","src":"7375:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13112,"mutability":"mutable","name":"low","nameLocation":"7397:3:70","nodeType":"VariableDeclaration","scope":13231,"src":"7389:11:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13111,"name":"uint256","nodeType":"ElementaryTypeName","src":"7389:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13117,"initialValue":{"arguments":[{"id":13114,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13100,"src":"7411:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13115,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13102,"src":"7414:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13113,"name":"mul512","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12746,"src":"7404:6:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256,uint256)"}},"id":13116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7404:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"7374:42:70"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13118,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13110,"src":"7498:4:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13119,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7506:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7498:9:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13126,"nodeType":"IfStatement","src":"7494:365:70","trueBody":{"id":13125,"nodeType":"Block","src":"7509:350:70","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13121,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13112,"src":"7827:3:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13122,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"7833:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7827:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13108,"id":13124,"nodeType":"Return","src":"7820:24:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13127,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"7969:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":13128,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13110,"src":"7984:4:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7969:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13145,"nodeType":"IfStatement","src":"7965:142:70","trueBody":{"id":13144,"nodeType":"Block","src":"7990:117:70","statements":[{"expression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13134,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"8028:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8043:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8028:16:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":13137,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"8046:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13138,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8052:16:70","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":12407,"src":"8046:22:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13139,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"8070:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13140,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8076:14:70","memberName":"UNDER_OVERFLOW","nodeType":"MemberAccess","referencedDeclaration":12403,"src":"8070:20:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13133,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12995,"src":"8020:7:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":13141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8020:71:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13130,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"8008:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8014:5:70","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":12439,"src":"8008:11:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":13142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8008:84:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13143,"nodeType":"ExpressionStatement","src":"8008:84:70"}]}},{"assignments":[13147],"declarations":[{"constant":false,"id":13147,"mutability":"mutable","name":"remainder","nameLocation":"8367:9:70","nodeType":"VariableDeclaration","scope":13231,"src":"8359:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13146,"name":"uint256","nodeType":"ElementaryTypeName","src":"8359:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13148,"nodeType":"VariableDeclarationStatement","src":"8359:17:70"},{"AST":{"nativeSrc":"8415:283:70","nodeType":"YulBlock","src":"8415:283:70","statements":[{"nativeSrc":"8484:38:70","nodeType":"YulAssignment","src":"8484:38:70","value":{"arguments":[{"name":"x","nativeSrc":"8504:1:70","nodeType":"YulIdentifier","src":"8504:1:70"},{"name":"y","nativeSrc":"8507:1:70","nodeType":"YulIdentifier","src":"8507:1:70"},{"name":"denominator","nativeSrc":"8510:11:70","nodeType":"YulIdentifier","src":"8510:11:70"}],"functionName":{"name":"mulmod","nativeSrc":"8497:6:70","nodeType":"YulIdentifier","src":"8497:6:70"},"nativeSrc":"8497:25:70","nodeType":"YulFunctionCall","src":"8497:25:70"},"variableNames":[{"name":"remainder","nativeSrc":"8484:9:70","nodeType":"YulIdentifier","src":"8484:9:70"}]},{"nativeSrc":"8604:37:70","nodeType":"YulAssignment","src":"8604:37:70","value":{"arguments":[{"name":"high","nativeSrc":"8616:4:70","nodeType":"YulIdentifier","src":"8616:4:70"},{"arguments":[{"name":"remainder","nativeSrc":"8625:9:70","nodeType":"YulIdentifier","src":"8625:9:70"},{"name":"low","nativeSrc":"8636:3:70","nodeType":"YulIdentifier","src":"8636:3:70"}],"functionName":{"name":"gt","nativeSrc":"8622:2:70","nodeType":"YulIdentifier","src":"8622:2:70"},"nativeSrc":"8622:18:70","nodeType":"YulFunctionCall","src":"8622:18:70"}],"functionName":{"name":"sub","nativeSrc":"8612:3:70","nodeType":"YulIdentifier","src":"8612:3:70"},"nativeSrc":"8612:29:70","nodeType":"YulFunctionCall","src":"8612:29:70"},"variableNames":[{"name":"high","nativeSrc":"8604:4:70","nodeType":"YulIdentifier","src":"8604:4:70"}]},{"nativeSrc":"8658:26:70","nodeType":"YulAssignment","src":"8658:26:70","value":{"arguments":[{"name":"low","nativeSrc":"8669:3:70","nodeType":"YulIdentifier","src":"8669:3:70"},{"name":"remainder","nativeSrc":"8674:9:70","nodeType":"YulIdentifier","src":"8674:9:70"}],"functionName":{"name":"sub","nativeSrc":"8665:3:70","nodeType":"YulIdentifier","src":"8665:3:70"},"nativeSrc":"8665:19:70","nodeType":"YulFunctionCall","src":"8665:19:70"},"variableNames":[{"name":"low","nativeSrc":"8658:3:70","nodeType":"YulIdentifier","src":"8658:3:70"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":13104,"isOffset":false,"isSlot":false,"src":"8510:11:70","valueSize":1},{"declaration":13110,"isOffset":false,"isSlot":false,"src":"8604:4:70","valueSize":1},{"declaration":13110,"isOffset":false,"isSlot":false,"src":"8616:4:70","valueSize":1},{"declaration":13112,"isOffset":false,"isSlot":false,"src":"8636:3:70","valueSize":1},{"declaration":13112,"isOffset":false,"isSlot":false,"src":"8658:3:70","valueSize":1},{"declaration":13112,"isOffset":false,"isSlot":false,"src":"8669:3:70","valueSize":1},{"declaration":13147,"isOffset":false,"isSlot":false,"src":"8484:9:70","valueSize":1},{"declaration":13147,"isOffset":false,"isSlot":false,"src":"8625:9:70","valueSize":1},{"declaration":13147,"isOffset":false,"isSlot":false,"src":"8674:9:70","valueSize":1},{"declaration":13100,"isOffset":false,"isSlot":false,"src":"8504:1:70","valueSize":1},{"declaration":13102,"isOffset":false,"isSlot":false,"src":"8507:1:70","valueSize":1}],"flags":["memory-safe"],"id":13149,"nodeType":"InlineAssembly","src":"8390:308:70"},{"assignments":[13151],"declarations":[{"constant":false,"id":13151,"mutability":"mutable","name":"twos","nameLocation":"8910:4:70","nodeType":"VariableDeclaration","scope":13231,"src":"8902:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13150,"name":"uint256","nodeType":"ElementaryTypeName","src":"8902:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13158,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13152,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"8917:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"30","id":13153,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8932:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13154,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"8936:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8932:15:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13156,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8931:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8917:31:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8902:46:70"},{"AST":{"nativeSrc":"8987:359:70","nodeType":"YulBlock","src":"8987:359:70","statements":[{"nativeSrc":"9052:37:70","nodeType":"YulAssignment","src":"9052:37:70","value":{"arguments":[{"name":"denominator","nativeSrc":"9071:11:70","nodeType":"YulIdentifier","src":"9071:11:70"},{"name":"twos","nativeSrc":"9084:4:70","nodeType":"YulIdentifier","src":"9084:4:70"}],"functionName":{"name":"div","nativeSrc":"9067:3:70","nodeType":"YulIdentifier","src":"9067:3:70"},"nativeSrc":"9067:22:70","nodeType":"YulFunctionCall","src":"9067:22:70"},"variableNames":[{"name":"denominator","nativeSrc":"9052:11:70","nodeType":"YulIdentifier","src":"9052:11:70"}]},{"nativeSrc":"9153:21:70","nodeType":"YulAssignment","src":"9153:21:70","value":{"arguments":[{"name":"low","nativeSrc":"9164:3:70","nodeType":"YulIdentifier","src":"9164:3:70"},{"name":"twos","nativeSrc":"9169:4:70","nodeType":"YulIdentifier","src":"9169:4:70"}],"functionName":{"name":"div","nativeSrc":"9160:3:70","nodeType":"YulIdentifier","src":"9160:3:70"},"nativeSrc":"9160:14:70","nodeType":"YulFunctionCall","src":"9160:14:70"},"variableNames":[{"name":"low","nativeSrc":"9153:3:70","nodeType":"YulIdentifier","src":"9153:3:70"}]},{"nativeSrc":"9293:39:70","nodeType":"YulAssignment","src":"9293:39:70","value":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"9313:1:70","nodeType":"YulLiteral","src":"9313:1:70","type":"","value":"0"},{"name":"twos","nativeSrc":"9316:4:70","nodeType":"YulIdentifier","src":"9316:4:70"}],"functionName":{"name":"sub","nativeSrc":"9309:3:70","nodeType":"YulIdentifier","src":"9309:3:70"},"nativeSrc":"9309:12:70","nodeType":"YulFunctionCall","src":"9309:12:70"},{"name":"twos","nativeSrc":"9323:4:70","nodeType":"YulIdentifier","src":"9323:4:70"}],"functionName":{"name":"div","nativeSrc":"9305:3:70","nodeType":"YulIdentifier","src":"9305:3:70"},"nativeSrc":"9305:23:70","nodeType":"YulFunctionCall","src":"9305:23:70"},{"kind":"number","nativeSrc":"9330:1:70","nodeType":"YulLiteral","src":"9330:1:70","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"9301:3:70","nodeType":"YulIdentifier","src":"9301:3:70"},"nativeSrc":"9301:31:70","nodeType":"YulFunctionCall","src":"9301:31:70"},"variableNames":[{"name":"twos","nativeSrc":"9293:4:70","nodeType":"YulIdentifier","src":"9293:4:70"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":13104,"isOffset":false,"isSlot":false,"src":"9052:11:70","valueSize":1},{"declaration":13104,"isOffset":false,"isSlot":false,"src":"9071:11:70","valueSize":1},{"declaration":13112,"isOffset":false,"isSlot":false,"src":"9153:3:70","valueSize":1},{"declaration":13112,"isOffset":false,"isSlot":false,"src":"9164:3:70","valueSize":1},{"declaration":13151,"isOffset":false,"isSlot":false,"src":"9084:4:70","valueSize":1},{"declaration":13151,"isOffset":false,"isSlot":false,"src":"9169:4:70","valueSize":1},{"declaration":13151,"isOffset":false,"isSlot":false,"src":"9293:4:70","valueSize":1},{"declaration":13151,"isOffset":false,"isSlot":false,"src":"9316:4:70","valueSize":1},{"declaration":13151,"isOffset":false,"isSlot":false,"src":"9323:4:70","valueSize":1}],"flags":["memory-safe"],"id":13159,"nodeType":"InlineAssembly","src":"8962:384:70"},{"expression":{"id":13164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13160,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13112,"src":"9409:3:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13161,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13110,"src":"9416:4:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13162,"name":"twos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13151,"src":"9423:4:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9416:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9409:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13165,"nodeType":"ExpressionStatement","src":"9409:18:70"},{"assignments":[13167],"declarations":[{"constant":false,"id":13167,"mutability":"mutable","name":"inverse","nameLocation":"9770:7:70","nodeType":"VariableDeclaration","scope":13231,"src":"9762:15:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13166,"name":"uint256","nodeType":"ElementaryTypeName","src":"9762:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13174,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"33","id":13168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9781:1:70","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13169,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"9785:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9781:15:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13171,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9780:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"hexValue":"32","id":13172,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9800:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"9780:21:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9762:39:70"},{"expression":{"id":13181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13175,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10018:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":13176,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10029:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13177,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"10033:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13178,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10047:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10033:21:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10029:25:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10018:36:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13182,"nodeType":"ExpressionStatement","src":"10018:36:70"},{"expression":{"id":13189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13183,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10088:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":13184,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10099:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13185,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"10103:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13186,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10117:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10103:21:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10099:25:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10088:36:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13190,"nodeType":"ExpressionStatement","src":"10088:36:70"},{"expression":{"id":13197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13191,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10160:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":13192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10171:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13193,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"10175:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13194,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10189:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10175:21:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10171:25:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10160:36:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13198,"nodeType":"ExpressionStatement","src":"10160:36:70"},{"expression":{"id":13205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13199,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10231:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":13200,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10242:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13201,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"10246:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13202,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10260:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10246:21:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10242:25:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10231:36:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13206,"nodeType":"ExpressionStatement","src":"10231:36:70"},{"expression":{"id":13213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13207,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10304:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":13208,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10315:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13209,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"10319:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13210,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10333:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10319:21:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10315:25:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10304:36:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13214,"nodeType":"ExpressionStatement","src":"10304:36:70"},{"expression":{"id":13221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13215,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10378:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":13216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10389:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13217,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"10393:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13218,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10407:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10393:21:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10389:25:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10378:36:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13222,"nodeType":"ExpressionStatement","src":"10378:36:70"},{"expression":{"id":13227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13223,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13107,"src":"10859:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13224,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13112,"src":"10868:3:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13225,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10874:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10868:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10859:22:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13228,"nodeType":"ExpressionStatement","src":"10859:22:70"},{"expression":{"id":13229,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13107,"src":"10902:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13108,"id":13230,"nodeType":"Return","src":"10895:13:70"}]}]},"documentation":{"id":13098,"nodeType":"StructuredDocumentation","src":"6925:312:70","text":" @dev Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n denominator == 0.\n Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n Uniswap Labs also under MIT license."},"id":13233,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"7251:6:70","nodeType":"FunctionDefinition","parameters":{"id":13105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13100,"mutability":"mutable","name":"x","nameLocation":"7266:1:70","nodeType":"VariableDeclaration","scope":13233,"src":"7258:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13099,"name":"uint256","nodeType":"ElementaryTypeName","src":"7258:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13102,"mutability":"mutable","name":"y","nameLocation":"7277:1:70","nodeType":"VariableDeclaration","scope":13233,"src":"7269:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13101,"name":"uint256","nodeType":"ElementaryTypeName","src":"7269:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13104,"mutability":"mutable","name":"denominator","nameLocation":"7288:11:70","nodeType":"VariableDeclaration","scope":13233,"src":"7280:19:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13103,"name":"uint256","nodeType":"ElementaryTypeName","src":"7280:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7257:43:70"},"returnParameters":{"id":13108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13107,"mutability":"mutable","name":"result","nameLocation":"7332:6:70","nodeType":"VariableDeclaration","scope":13233,"src":"7324:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13106,"name":"uint256","nodeType":"ElementaryTypeName","src":"7324:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7323:16:70"},"scope":14327,"src":"7242:3683:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13269,"nodeType":"Block","src":"11164:128:70","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13249,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13236,"src":"11188:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13250,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13238,"src":"11191:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13251,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13240,"src":"11194:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13248,"name":"mulDiv","nodeType":"Identifier","overloadedDeclarations":[13233,13270],"referencedDeclaration":13233,"src":"11181:6:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":13252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11181:25:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13256,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13243,"src":"11242:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}],"id":13255,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14326,"src":"11225:16:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$12718_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":13257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11225:26:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13259,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13236,"src":"11262:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13260,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13238,"src":"11265:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13261,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13240,"src":"11268:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13258,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"11255:6:70","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":13262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11255:25:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":13263,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11283:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11255:29:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11225:59:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13253,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"11209:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11218:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"11209:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11209:76:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11181:104:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13247,"id":13268,"nodeType":"Return","src":"11174:111:70"}]},"documentation":{"id":13234,"nodeType":"StructuredDocumentation","src":"10931:118:70","text":" @dev Calculates x * y / denominator with full precision, following the selected rounding direction."},"id":13270,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"11063:6:70","nodeType":"FunctionDefinition","parameters":{"id":13244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13236,"mutability":"mutable","name":"x","nameLocation":"11078:1:70","nodeType":"VariableDeclaration","scope":13270,"src":"11070:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13235,"name":"uint256","nodeType":"ElementaryTypeName","src":"11070:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13238,"mutability":"mutable","name":"y","nameLocation":"11089:1:70","nodeType":"VariableDeclaration","scope":13270,"src":"11081:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13237,"name":"uint256","nodeType":"ElementaryTypeName","src":"11081:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13240,"mutability":"mutable","name":"denominator","nameLocation":"11100:11:70","nodeType":"VariableDeclaration","scope":13270,"src":"11092:19:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13239,"name":"uint256","nodeType":"ElementaryTypeName","src":"11092:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13243,"mutability":"mutable","name":"rounding","nameLocation":"11122:8:70","nodeType":"VariableDeclaration","scope":13270,"src":"11113:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"},"typeName":{"id":13242,"nodeType":"UserDefinedTypeName","pathNode":{"id":13241,"name":"Rounding","nameLocations":["11113:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":12718,"src":"11113:8:70"},"referencedDeclaration":12718,"src":"11113:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"11069:62:70"},"returnParameters":{"id":13247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13246,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13270,"src":"11155:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13245,"name":"uint256","nodeType":"ElementaryTypeName","src":"11155:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11154:9:70"},"scope":14327,"src":"11054:238:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13319,"nodeType":"Block","src":"11500:245:70","statements":[{"id":13318,"nodeType":"UncheckedBlock","src":"11510:229:70","statements":[{"assignments":[13283,13285],"declarations":[{"constant":false,"id":13283,"mutability":"mutable","name":"high","nameLocation":"11543:4:70","nodeType":"VariableDeclaration","scope":13318,"src":"11535:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13282,"name":"uint256","nodeType":"ElementaryTypeName","src":"11535:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13285,"mutability":"mutable","name":"low","nameLocation":"11557:3:70","nodeType":"VariableDeclaration","scope":13318,"src":"11549:11:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13284,"name":"uint256","nodeType":"ElementaryTypeName","src":"11549:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13290,"initialValue":{"arguments":[{"id":13287,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13273,"src":"11571:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13288,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13275,"src":"11574:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13286,"name":"mul512","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12746,"src":"11564:6:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256,uint256)"}},"id":13289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11564:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11534:42:70"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13291,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13283,"src":"11594:4:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13292,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11602:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13293,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13277,"src":"11607:1:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11602:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11594:14:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13304,"nodeType":"IfStatement","src":"11590:86:70","trueBody":{"id":13303,"nodeType":"Block","src":"11610:66:70","statements":[{"expression":{"arguments":[{"expression":{"id":13299,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"11640:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13300,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11646:14:70","memberName":"UNDER_OVERFLOW","nodeType":"MemberAccess","referencedDeclaration":12403,"src":"11640:20:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13296,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"11628:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11634:5:70","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":12439,"src":"11628:11:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":13301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11628:33:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13302,"nodeType":"ExpressionStatement","src":"11628:33:70"}]}},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13305,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13283,"src":"11697:4:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":13308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"323536","id":13306,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11706:3:70","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13307,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13277,"src":"11712:1:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11706:7:70","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"id":13309,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11705:9:70","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"11697:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13311,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11696:19:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13312,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13285,"src":"11719:3:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13313,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13277,"src":"11726:1:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11719:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13315,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11718:10:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11696:32:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13281,"id":13317,"nodeType":"Return","src":"11689:39:70"}]}]},"documentation":{"id":13271,"nodeType":"StructuredDocumentation","src":"11298:111:70","text":" @dev Calculates floor(x * y >> n) with full precision. Throws if result overflows a uint256."},"id":13320,"implemented":true,"kind":"function","modifiers":[],"name":"mulShr","nameLocation":"11423:6:70","nodeType":"FunctionDefinition","parameters":{"id":13278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13273,"mutability":"mutable","name":"x","nameLocation":"11438:1:70","nodeType":"VariableDeclaration","scope":13320,"src":"11430:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13272,"name":"uint256","nodeType":"ElementaryTypeName","src":"11430:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13275,"mutability":"mutable","name":"y","nameLocation":"11449:1:70","nodeType":"VariableDeclaration","scope":13320,"src":"11441:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13274,"name":"uint256","nodeType":"ElementaryTypeName","src":"11441:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13277,"mutability":"mutable","name":"n","nameLocation":"11458:1:70","nodeType":"VariableDeclaration","scope":13320,"src":"11452:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":13276,"name":"uint8","nodeType":"ElementaryTypeName","src":"11452:5:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"11429:31:70"},"returnParameters":{"id":13281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13280,"mutability":"mutable","name":"result","nameLocation":"11492:6:70","nodeType":"VariableDeclaration","scope":13320,"src":"11484:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13279,"name":"uint256","nodeType":"ElementaryTypeName","src":"11484:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11483:16:70"},"scope":14327,"src":"11414:331:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13358,"nodeType":"Block","src":"11963:113:70","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13336,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13323,"src":"11987:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13337,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13325,"src":"11990:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13338,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13327,"src":"11993:1:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":13335,"name":"mulShr","nodeType":"Identifier","overloadedDeclarations":[13320,13359],"referencedDeclaration":13320,"src":"11980:6:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint8_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint8) pure returns (uint256)"}},"id":13339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11980:15:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13343,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13330,"src":"12031:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}],"id":13342,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14326,"src":"12014:16:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$12718_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":13344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12014:26:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13346,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13323,"src":"12051:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13347,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13325,"src":"12054:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13348,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12057:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13349,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13327,"src":"12062:1:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"12057:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13345,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"12044:6:70","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":13351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12044:20:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":13352,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12067:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12044:24:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12014:54:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13340,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"11998:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12007:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"11998:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11998:71:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11980:89:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13334,"id":13357,"nodeType":"Return","src":"11973:96:70"}]},"documentation":{"id":13321,"nodeType":"StructuredDocumentation","src":"11751:109:70","text":" @dev Calculates x * y >> n with full precision, following the selected rounding direction."},"id":13359,"implemented":true,"kind":"function","modifiers":[],"name":"mulShr","nameLocation":"11874:6:70","nodeType":"FunctionDefinition","parameters":{"id":13331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13323,"mutability":"mutable","name":"x","nameLocation":"11889:1:70","nodeType":"VariableDeclaration","scope":13359,"src":"11881:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13322,"name":"uint256","nodeType":"ElementaryTypeName","src":"11881:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13325,"mutability":"mutable","name":"y","nameLocation":"11900:1:70","nodeType":"VariableDeclaration","scope":13359,"src":"11892:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13324,"name":"uint256","nodeType":"ElementaryTypeName","src":"11892:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13327,"mutability":"mutable","name":"n","nameLocation":"11909:1:70","nodeType":"VariableDeclaration","scope":13359,"src":"11903:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":13326,"name":"uint8","nodeType":"ElementaryTypeName","src":"11903:5:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":13330,"mutability":"mutable","name":"rounding","nameLocation":"11921:8:70","nodeType":"VariableDeclaration","scope":13359,"src":"11912:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"},"typeName":{"id":13329,"nodeType":"UserDefinedTypeName","pathNode":{"id":13328,"name":"Rounding","nameLocations":["11912:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":12718,"src":"11912:8:70"},"referencedDeclaration":12718,"src":"11912:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"11880:50:70"},"returnParameters":{"id":13334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13333,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13359,"src":"11954:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13332,"name":"uint256","nodeType":"ElementaryTypeName","src":"11954:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11953:9:70"},"scope":14327,"src":"11865:211:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13455,"nodeType":"Block","src":"12710:1849:70","statements":[{"id":13454,"nodeType":"UncheckedBlock","src":"12720:1833:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13369,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13364,"src":"12748:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13370,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12753:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12748:6:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13374,"nodeType":"IfStatement","src":"12744:20:70","trueBody":{"expression":{"hexValue":"30","id":13372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12763:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":13368,"id":13373,"nodeType":"Return","src":"12756:8:70"}},{"assignments":[13376],"declarations":[{"constant":false,"id":13376,"mutability":"mutable","name":"remainder","nameLocation":"13243:9:70","nodeType":"VariableDeclaration","scope":13454,"src":"13235:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13375,"name":"uint256","nodeType":"ElementaryTypeName","src":"13235:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13380,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13377,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13362,"src":"13255:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":13378,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13364,"src":"13259:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13255:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13235:25:70"},{"assignments":[13382],"declarations":[{"constant":false,"id":13382,"mutability":"mutable","name":"gcd","nameLocation":"13282:3:70","nodeType":"VariableDeclaration","scope":13454,"src":"13274:11:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13381,"name":"uint256","nodeType":"ElementaryTypeName","src":"13274:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13384,"initialValue":{"id":13383,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13364,"src":"13288:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13274:15:70"},{"assignments":[13386],"declarations":[{"constant":false,"id":13386,"mutability":"mutable","name":"x","nameLocation":"13432:1:70","nodeType":"VariableDeclaration","scope":13454,"src":"13425:8:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13385,"name":"int256","nodeType":"ElementaryTypeName","src":"13425:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":13388,"initialValue":{"hexValue":"30","id":13387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13436:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13425:12:70"},{"assignments":[13390],"declarations":[{"constant":false,"id":13390,"mutability":"mutable","name":"y","nameLocation":"13458:1:70","nodeType":"VariableDeclaration","scope":13454,"src":"13451:8:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13389,"name":"int256","nodeType":"ElementaryTypeName","src":"13451:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":13392,"initialValue":{"hexValue":"31","id":13391,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13462:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"13451:12:70"},{"body":{"id":13429,"nodeType":"Block","src":"13501:882:70","statements":[{"assignments":[13397],"declarations":[{"constant":false,"id":13397,"mutability":"mutable","name":"quotient","nameLocation":"13527:8:70","nodeType":"VariableDeclaration","scope":13429,"src":"13519:16:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13396,"name":"uint256","nodeType":"ElementaryTypeName","src":"13519:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13401,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13398,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13382,"src":"13538:3:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13399,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13376,"src":"13544:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13538:15:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13519:34:70"},{"expression":{"id":13412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":13402,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13382,"src":"13573:3:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13403,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13376,"src":"13578:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13404,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"13572:16:70","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"id":13405,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13376,"src":"13678:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13406,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13382,"src":"13923:3:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13407,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13376,"src":"13929:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13408,"name":"quotient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13397,"src":"13941:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13929:20:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13923:26:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13411,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13591:376:70","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"13572:395:70","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13413,"nodeType":"ExpressionStatement","src":"13572:395:70"},{"expression":{"id":13427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":13414,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13386,"src":"13987:1:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"id":13415,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13390,"src":"13990:1:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":13416,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"13986:6:70","typeDescriptions":{"typeIdentifier":"t_tuple$_t_int256_$_t_int256_$","typeString":"tuple(int256,int256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"id":13417,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13390,"src":"14072:1:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13418,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13386,"src":"14326:1:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13419,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13390,"src":"14330:1:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":13422,"name":"quotient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13397,"src":"14341:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13421,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14334:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":13420,"name":"int256","nodeType":"ElementaryTypeName","src":"14334:6:70","typeDescriptions":{}}},"id":13423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14334:16:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14330:20:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14326:24:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":13426,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13995:373:70","typeDescriptions":{"typeIdentifier":"t_tuple$_t_int256_$_t_int256_$","typeString":"tuple(int256,int256)"}},"src":"13986:382:70","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13428,"nodeType":"ExpressionStatement","src":"13986:382:70"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13393,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13376,"src":"13485:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13498:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13485:14:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13430,"nodeType":"WhileStatement","src":"13478:905:70"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13431,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13382,"src":"14401:3:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"31","id":13432,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14408:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"14401:8:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13436,"nodeType":"IfStatement","src":"14397:22:70","trueBody":{"expression":{"hexValue":"30","id":13434,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14418:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":13368,"id":13435,"nodeType":"Return","src":"14411:8:70"}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13438,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13386,"src":"14470:1:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":13439,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14474:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14470:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13441,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13364,"src":"14477:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"id":13445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"14489:2:70","subExpression":{"id":13444,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13386,"src":"14490:1:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13443,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14481:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13442,"name":"uint256","nodeType":"ElementaryTypeName","src":"14481:7:70","typeDescriptions":{}}},"id":13446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14481:11:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14477:15:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":13450,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13386,"src":"14502:1:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13449,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14494:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13448,"name":"uint256","nodeType":"ElementaryTypeName","src":"14494:7:70","typeDescriptions":{}}},"id":13451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14494:10:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13437,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12995,"src":"14462:7:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":13452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14462:43:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13368,"id":13453,"nodeType":"Return","src":"14455:50:70"}]}]},"documentation":{"id":13360,"nodeType":"StructuredDocumentation","src":"12082:553:70","text":" @dev Calculate the modular multiplicative inverse of a number in Z/nZ.\n If n is a prime, then Z/nZ is a field. In that case all elements are inversible, except 0.\n If n is not a prime, then Z/nZ is not a field, and some elements might not be inversible.\n If the input value is not inversible, 0 is returned.\n NOTE: If you know for sure that n is (big) a prime, it may be cheaper to use Fermat's little theorem and get the\n inverse using `Math.modExp(a, n - 2, n)`. See {invModPrime}."},"id":13456,"implemented":true,"kind":"function","modifiers":[],"name":"invMod","nameLocation":"12649:6:70","nodeType":"FunctionDefinition","parameters":{"id":13365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13362,"mutability":"mutable","name":"a","nameLocation":"12664:1:70","nodeType":"VariableDeclaration","scope":13456,"src":"12656:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13361,"name":"uint256","nodeType":"ElementaryTypeName","src":"12656:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13364,"mutability":"mutable","name":"n","nameLocation":"12675:1:70","nodeType":"VariableDeclaration","scope":13456,"src":"12667:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13363,"name":"uint256","nodeType":"ElementaryTypeName","src":"12667:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12655:22:70"},"returnParameters":{"id":13368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13367,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13456,"src":"12701:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13366,"name":"uint256","nodeType":"ElementaryTypeName","src":"12701:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12700:9:70"},"scope":14327,"src":"12640:1919:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13476,"nodeType":"Block","src":"15159:82:70","statements":[{"id":13475,"nodeType":"UncheckedBlock","src":"15169:66:70","statements":[{"expression":{"arguments":[{"id":13468,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13459,"src":"15212:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13469,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13461,"src":"15215:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"32","id":13470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15219:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"15215:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13472,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13461,"src":"15222:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13466,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"15200:4:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":13467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15205:6:70","memberName":"modExp","nodeType":"MemberAccess","referencedDeclaration":13513,"src":"15200:11:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) view returns (uint256)"}},"id":13473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15200:24:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13465,"id":13474,"nodeType":"Return","src":"15193:31:70"}]}]},"documentation":{"id":13457,"nodeType":"StructuredDocumentation","src":"14565:514:70","text":" @dev Variant of {invMod}. More efficient, but only works if `p` is known to be a prime greater than `2`.\n From https://en.wikipedia.org/wiki/Fermat%27s_little_theorem[Fermat's little theorem], we know that if p is\n prime, then `a**(p-1) ≡ 1 mod p`. As a consequence, we have `a * a**(p-2) ≡ 1 mod p`, which means that\n `a**(p-2)` is the modular multiplicative inverse of a in Fp.\n NOTE: this function does NOT check that `p` is a prime greater than `2`."},"id":13477,"implemented":true,"kind":"function","modifiers":[],"name":"invModPrime","nameLocation":"15093:11:70","nodeType":"FunctionDefinition","parameters":{"id":13462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13459,"mutability":"mutable","name":"a","nameLocation":"15113:1:70","nodeType":"VariableDeclaration","scope":13477,"src":"15105:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13458,"name":"uint256","nodeType":"ElementaryTypeName","src":"15105:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13461,"mutability":"mutable","name":"p","nameLocation":"15124:1:70","nodeType":"VariableDeclaration","scope":13477,"src":"15116:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13460,"name":"uint256","nodeType":"ElementaryTypeName","src":"15116:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15104:22:70"},"returnParameters":{"id":13465,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13464,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13477,"src":"15150:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13463,"name":"uint256","nodeType":"ElementaryTypeName","src":"15150:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15149:9:70"},"scope":14327,"src":"15084:157:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13512,"nodeType":"Block","src":"16011:174:70","statements":[{"assignments":[13490,13492],"declarations":[{"constant":false,"id":13490,"mutability":"mutable","name":"success","nameLocation":"16027:7:70","nodeType":"VariableDeclaration","scope":13512,"src":"16022:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13489,"name":"bool","nodeType":"ElementaryTypeName","src":"16022:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":13492,"mutability":"mutable","name":"result","nameLocation":"16044:6:70","nodeType":"VariableDeclaration","scope":13512,"src":"16036:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13491,"name":"uint256","nodeType":"ElementaryTypeName","src":"16036:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13498,"initialValue":{"arguments":[{"id":13494,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13480,"src":"16064:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13495,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13482,"src":"16067:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13496,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13484,"src":"16070:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13493,"name":"tryModExp","nodeType":"Identifier","overloadedDeclarations":[13537,13619],"referencedDeclaration":13537,"src":"16054:9:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (uint256,uint256,uint256) view returns (bool,uint256)"}},"id":13497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16054:18:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"16021:51:70"},{"condition":{"id":13500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"16086:8:70","subExpression":{"id":13499,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13490,"src":"16087:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13509,"nodeType":"IfStatement","src":"16082:74:70","trueBody":{"id":13508,"nodeType":"Block","src":"16096:60:70","statements":[{"expression":{"arguments":[{"expression":{"id":13504,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"16122:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13505,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16128:16:70","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":12407,"src":"16122:22:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13501,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"16110:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16116:5:70","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":12439,"src":"16110:11:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":13506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16110:35:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13507,"nodeType":"ExpressionStatement","src":"16110:35:70"}]}},{"expression":{"id":13510,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13492,"src":"16172:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13488,"id":13511,"nodeType":"Return","src":"16165:13:70"}]},"documentation":{"id":13478,"nodeType":"StructuredDocumentation","src":"15247:678:70","text":" @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m)\n Requirements:\n - modulus can't be zero\n - underlying staticcall to precompile must succeed\n IMPORTANT: The result is only valid if the underlying call succeeds. When using this function, make\n sure the chain you're using it on supports the precompiled contract for modular exponentiation\n at address 0x05 as specified in https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise,\n the underlying function will succeed given the lack of a revert, but the result may be incorrectly\n interpreted as 0."},"id":13513,"implemented":true,"kind":"function","modifiers":[],"name":"modExp","nameLocation":"15939:6:70","nodeType":"FunctionDefinition","parameters":{"id":13485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13480,"mutability":"mutable","name":"b","nameLocation":"15954:1:70","nodeType":"VariableDeclaration","scope":13513,"src":"15946:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13479,"name":"uint256","nodeType":"ElementaryTypeName","src":"15946:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13482,"mutability":"mutable","name":"e","nameLocation":"15965:1:70","nodeType":"VariableDeclaration","scope":13513,"src":"15957:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13481,"name":"uint256","nodeType":"ElementaryTypeName","src":"15957:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13484,"mutability":"mutable","name":"m","nameLocation":"15976:1:70","nodeType":"VariableDeclaration","scope":13513,"src":"15968:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13483,"name":"uint256","nodeType":"ElementaryTypeName","src":"15968:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15945:33:70"},"returnParameters":{"id":13488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13487,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13513,"src":"16002:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13486,"name":"uint256","nodeType":"ElementaryTypeName","src":"16002:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16001:9:70"},"scope":14327,"src":"15930:255:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13536,"nodeType":"Block","src":"17039:1493:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13527,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13520,"src":"17053:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13528,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17058:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17053:6:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13534,"nodeType":"IfStatement","src":"17049:29:70","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":13530,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17069:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":13531,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17076:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":13532,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"17068:10:70","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":13526,"id":13533,"nodeType":"Return","src":"17061:17:70"}},{"AST":{"nativeSrc":"17113:1413:70","nodeType":"YulBlock","src":"17113:1413:70","statements":[{"nativeSrc":"17127:22:70","nodeType":"YulVariableDeclaration","src":"17127:22:70","value":{"arguments":[{"kind":"number","nativeSrc":"17144:4:70","nodeType":"YulLiteral","src":"17144:4:70","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"17138:5:70","nodeType":"YulIdentifier","src":"17138:5:70"},"nativeSrc":"17138:11:70","nodeType":"YulFunctionCall","src":"17138:11:70"},"variables":[{"name":"ptr","nativeSrc":"17131:3:70","nodeType":"YulTypedName","src":"17131:3:70","type":""}]},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"18057:3:70","nodeType":"YulIdentifier","src":"18057:3:70"},{"kind":"number","nativeSrc":"18062:4:70","nodeType":"YulLiteral","src":"18062:4:70","type":"","value":"0x20"}],"functionName":{"name":"mstore","nativeSrc":"18050:6:70","nodeType":"YulIdentifier","src":"18050:6:70"},"nativeSrc":"18050:17:70","nodeType":"YulFunctionCall","src":"18050:17:70"},"nativeSrc":"18050:17:70","nodeType":"YulExpressionStatement","src":"18050:17:70"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18091:3:70","nodeType":"YulIdentifier","src":"18091:3:70"},{"kind":"number","nativeSrc":"18096:4:70","nodeType":"YulLiteral","src":"18096:4:70","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18087:3:70","nodeType":"YulIdentifier","src":"18087:3:70"},"nativeSrc":"18087:14:70","nodeType":"YulFunctionCall","src":"18087:14:70"},{"kind":"number","nativeSrc":"18103:4:70","nodeType":"YulLiteral","src":"18103:4:70","type":"","value":"0x20"}],"functionName":{"name":"mstore","nativeSrc":"18080:6:70","nodeType":"YulIdentifier","src":"18080:6:70"},"nativeSrc":"18080:28:70","nodeType":"YulFunctionCall","src":"18080:28:70"},"nativeSrc":"18080:28:70","nodeType":"YulExpressionStatement","src":"18080:28:70"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18132:3:70","nodeType":"YulIdentifier","src":"18132:3:70"},{"kind":"number","nativeSrc":"18137:4:70","nodeType":"YulLiteral","src":"18137:4:70","type":"","value":"0x40"}],"functionName":{"name":"add","nativeSrc":"18128:3:70","nodeType":"YulIdentifier","src":"18128:3:70"},"nativeSrc":"18128:14:70","nodeType":"YulFunctionCall","src":"18128:14:70"},{"kind":"number","nativeSrc":"18144:4:70","nodeType":"YulLiteral","src":"18144:4:70","type":"","value":"0x20"}],"functionName":{"name":"mstore","nativeSrc":"18121:6:70","nodeType":"YulIdentifier","src":"18121:6:70"},"nativeSrc":"18121:28:70","nodeType":"YulFunctionCall","src":"18121:28:70"},"nativeSrc":"18121:28:70","nodeType":"YulExpressionStatement","src":"18121:28:70"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18173:3:70","nodeType":"YulIdentifier","src":"18173:3:70"},{"kind":"number","nativeSrc":"18178:4:70","nodeType":"YulLiteral","src":"18178:4:70","type":"","value":"0x60"}],"functionName":{"name":"add","nativeSrc":"18169:3:70","nodeType":"YulIdentifier","src":"18169:3:70"},"nativeSrc":"18169:14:70","nodeType":"YulFunctionCall","src":"18169:14:70"},{"name":"b","nativeSrc":"18185:1:70","nodeType":"YulIdentifier","src":"18185:1:70"}],"functionName":{"name":"mstore","nativeSrc":"18162:6:70","nodeType":"YulIdentifier","src":"18162:6:70"},"nativeSrc":"18162:25:70","nodeType":"YulFunctionCall","src":"18162:25:70"},"nativeSrc":"18162:25:70","nodeType":"YulExpressionStatement","src":"18162:25:70"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18211:3:70","nodeType":"YulIdentifier","src":"18211:3:70"},{"kind":"number","nativeSrc":"18216:4:70","nodeType":"YulLiteral","src":"18216:4:70","type":"","value":"0x80"}],"functionName":{"name":"add","nativeSrc":"18207:3:70","nodeType":"YulIdentifier","src":"18207:3:70"},"nativeSrc":"18207:14:70","nodeType":"YulFunctionCall","src":"18207:14:70"},{"name":"e","nativeSrc":"18223:1:70","nodeType":"YulIdentifier","src":"18223:1:70"}],"functionName":{"name":"mstore","nativeSrc":"18200:6:70","nodeType":"YulIdentifier","src":"18200:6:70"},"nativeSrc":"18200:25:70","nodeType":"YulFunctionCall","src":"18200:25:70"},"nativeSrc":"18200:25:70","nodeType":"YulExpressionStatement","src":"18200:25:70"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18249:3:70","nodeType":"YulIdentifier","src":"18249:3:70"},{"kind":"number","nativeSrc":"18254:4:70","nodeType":"YulLiteral","src":"18254:4:70","type":"","value":"0xa0"}],"functionName":{"name":"add","nativeSrc":"18245:3:70","nodeType":"YulIdentifier","src":"18245:3:70"},"nativeSrc":"18245:14:70","nodeType":"YulFunctionCall","src":"18245:14:70"},{"name":"m","nativeSrc":"18261:1:70","nodeType":"YulIdentifier","src":"18261:1:70"}],"functionName":{"name":"mstore","nativeSrc":"18238:6:70","nodeType":"YulIdentifier","src":"18238:6:70"},"nativeSrc":"18238:25:70","nodeType":"YulFunctionCall","src":"18238:25:70"},"nativeSrc":"18238:25:70","nodeType":"YulExpressionStatement","src":"18238:25:70"},{"nativeSrc":"18425:57:70","nodeType":"YulAssignment","src":"18425:57:70","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"18447:3:70","nodeType":"YulIdentifier","src":"18447:3:70"},"nativeSrc":"18447:5:70","nodeType":"YulFunctionCall","src":"18447:5:70"},{"kind":"number","nativeSrc":"18454:4:70","nodeType":"YulLiteral","src":"18454:4:70","type":"","value":"0x05"},{"name":"ptr","nativeSrc":"18460:3:70","nodeType":"YulIdentifier","src":"18460:3:70"},{"kind":"number","nativeSrc":"18465:4:70","nodeType":"YulLiteral","src":"18465:4:70","type":"","value":"0xc0"},{"kind":"number","nativeSrc":"18471:4:70","nodeType":"YulLiteral","src":"18471:4:70","type":"","value":"0x00"},{"kind":"number","nativeSrc":"18477:4:70","nodeType":"YulLiteral","src":"18477:4:70","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nativeSrc":"18436:10:70","nodeType":"YulIdentifier","src":"18436:10:70"},"nativeSrc":"18436:46:70","nodeType":"YulFunctionCall","src":"18436:46:70"},"variableNames":[{"name":"success","nativeSrc":"18425:7:70","nodeType":"YulIdentifier","src":"18425:7:70"}]},{"nativeSrc":"18495:21:70","nodeType":"YulAssignment","src":"18495:21:70","value":{"arguments":[{"kind":"number","nativeSrc":"18511:4:70","nodeType":"YulLiteral","src":"18511:4:70","type":"","value":"0x00"}],"functionName":{"name":"mload","nativeSrc":"18505:5:70","nodeType":"YulIdentifier","src":"18505:5:70"},"nativeSrc":"18505:11:70","nodeType":"YulFunctionCall","src":"18505:11:70"},"variableNames":[{"name":"result","nativeSrc":"18495:6:70","nodeType":"YulIdentifier","src":"18495:6:70"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":13516,"isOffset":false,"isSlot":false,"src":"18185:1:70","valueSize":1},{"declaration":13518,"isOffset":false,"isSlot":false,"src":"18223:1:70","valueSize":1},{"declaration":13520,"isOffset":false,"isSlot":false,"src":"18261:1:70","valueSize":1},{"declaration":13525,"isOffset":false,"isSlot":false,"src":"18495:6:70","valueSize":1},{"declaration":13523,"isOffset":false,"isSlot":false,"src":"18425:7:70","valueSize":1}],"flags":["memory-safe"],"id":13535,"nodeType":"InlineAssembly","src":"17088:1438:70"}]},"documentation":{"id":13514,"nodeType":"StructuredDocumentation","src":"16191:738:70","text":" @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m).\n It includes a success flag indicating if the operation succeeded. Operation will be marked as failed if trying\n to operate modulo 0 or if the underlying precompile reverted.\n IMPORTANT: The result is only valid if the success flag is true. When using this function, make sure the chain\n you're using it on supports the precompiled contract for modular exponentiation at address 0x05 as specified in\n https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise, the underlying function will succeed given the lack\n of a revert, but the result may be incorrectly interpreted as 0."},"id":13537,"implemented":true,"kind":"function","modifiers":[],"name":"tryModExp","nameLocation":"16943:9:70","nodeType":"FunctionDefinition","parameters":{"id":13521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13516,"mutability":"mutable","name":"b","nameLocation":"16961:1:70","nodeType":"VariableDeclaration","scope":13537,"src":"16953:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13515,"name":"uint256","nodeType":"ElementaryTypeName","src":"16953:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13518,"mutability":"mutable","name":"e","nameLocation":"16972:1:70","nodeType":"VariableDeclaration","scope":13537,"src":"16964:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13517,"name":"uint256","nodeType":"ElementaryTypeName","src":"16964:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13520,"mutability":"mutable","name":"m","nameLocation":"16983:1:70","nodeType":"VariableDeclaration","scope":13537,"src":"16975:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13519,"name":"uint256","nodeType":"ElementaryTypeName","src":"16975:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16952:33:70"},"returnParameters":{"id":13526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13523,"mutability":"mutable","name":"success","nameLocation":"17014:7:70","nodeType":"VariableDeclaration","scope":13537,"src":"17009:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13522,"name":"bool","nodeType":"ElementaryTypeName","src":"17009:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":13525,"mutability":"mutable","name":"result","nameLocation":"17031:6:70","nodeType":"VariableDeclaration","scope":13537,"src":"17023:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13524,"name":"uint256","nodeType":"ElementaryTypeName","src":"17023:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17008:30:70"},"scope":14327,"src":"16934:1598:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13572,"nodeType":"Block","src":"18729:179:70","statements":[{"assignments":[13550,13552],"declarations":[{"constant":false,"id":13550,"mutability":"mutable","name":"success","nameLocation":"18745:7:70","nodeType":"VariableDeclaration","scope":13572,"src":"18740:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13549,"name":"bool","nodeType":"ElementaryTypeName","src":"18740:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":13552,"mutability":"mutable","name":"result","nameLocation":"18767:6:70","nodeType":"VariableDeclaration","scope":13572,"src":"18754:19:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13551,"name":"bytes","nodeType":"ElementaryTypeName","src":"18754:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":13558,"initialValue":{"arguments":[{"id":13554,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13540,"src":"18787:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":13555,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13542,"src":"18790:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":13556,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13544,"src":"18793:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":13553,"name":"tryModExp","nodeType":"Identifier","overloadedDeclarations":[13537,13619],"referencedDeclaration":13619,"src":"18777:9:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,bytes memory,bytes memory) view returns (bool,bytes memory)"}},"id":13557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18777:18:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"18739:56:70"},{"condition":{"id":13560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"18809:8:70","subExpression":{"id":13559,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13550,"src":"18810:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13569,"nodeType":"IfStatement","src":"18805:74:70","trueBody":{"id":13568,"nodeType":"Block","src":"18819:60:70","statements":[{"expression":{"arguments":[{"expression":{"id":13564,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"18845:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"18851:16:70","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":12407,"src":"18845:22:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13561,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"18833:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18839:5:70","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":12439,"src":"18833:11:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":13566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18833:35:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13567,"nodeType":"ExpressionStatement","src":"18833:35:70"}]}},{"expression":{"id":13570,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13552,"src":"18895:6:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":13548,"id":13571,"nodeType":"Return","src":"18888:13:70"}]},"documentation":{"id":13538,"nodeType":"StructuredDocumentation","src":"18538:85:70","text":" @dev Variant of {modExp} that supports inputs of arbitrary length."},"id":13573,"implemented":true,"kind":"function","modifiers":[],"name":"modExp","nameLocation":"18637:6:70","nodeType":"FunctionDefinition","parameters":{"id":13545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13540,"mutability":"mutable","name":"b","nameLocation":"18657:1:70","nodeType":"VariableDeclaration","scope":13573,"src":"18644:14:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13539,"name":"bytes","nodeType":"ElementaryTypeName","src":"18644:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":13542,"mutability":"mutable","name":"e","nameLocation":"18673:1:70","nodeType":"VariableDeclaration","scope":13573,"src":"18660:14:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13541,"name":"bytes","nodeType":"ElementaryTypeName","src":"18660:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":13544,"mutability":"mutable","name":"m","nameLocation":"18689:1:70","nodeType":"VariableDeclaration","scope":13573,"src":"18676:14:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13543,"name":"bytes","nodeType":"ElementaryTypeName","src":"18676:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"18643:48:70"},"returnParameters":{"id":13548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13547,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13573,"src":"18715:12:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13546,"name":"bytes","nodeType":"ElementaryTypeName","src":"18715:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"18714:14:70"},"scope":14327,"src":"18628:280:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13618,"nodeType":"Block","src":"19162:771:70","statements":[{"condition":{"arguments":[{"id":13588,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13580,"src":"19187:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":13587,"name":"_zeroBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13652,"src":"19176:10:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (bytes memory) pure returns (bool)"}},"id":13589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19176:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13597,"nodeType":"IfStatement","src":"19172:47:70","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":13590,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19199:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"arguments":[{"hexValue":"30","id":13593,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19216:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":13592,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"19206:9:70","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":13591,"name":"bytes","nodeType":"ElementaryTypeName","src":"19210:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":13594,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19206:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":13595,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"19198:21:70","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"functionReturnParameters":13586,"id":13596,"nodeType":"Return","src":"19191:28:70"}},{"assignments":[13599],"declarations":[{"constant":false,"id":13599,"mutability":"mutable","name":"mLen","nameLocation":"19238:4:70","nodeType":"VariableDeclaration","scope":13618,"src":"19230:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13598,"name":"uint256","nodeType":"ElementaryTypeName","src":"19230:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13602,"initialValue":{"expression":{"id":13600,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13580,"src":"19245:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19247:6:70","memberName":"length","nodeType":"MemberAccess","src":"19245:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19230:23:70"},{"expression":{"id":13615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13603,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13585,"src":"19335:6:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":13606,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13576,"src":"19361:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19363:6:70","memberName":"length","nodeType":"MemberAccess","src":"19361:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13608,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13578,"src":"19371:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19373:6:70","memberName":"length","nodeType":"MemberAccess","src":"19371:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13610,"name":"mLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13599,"src":"19381:4:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13611,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13576,"src":"19387:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":13612,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13578,"src":"19390:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":13613,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13580,"src":"19393:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":13604,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"19344:3:70","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":13605,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"19348:12:70","memberName":"encodePacked","nodeType":"MemberAccess","src":"19344:16:70","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":13614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19344:51:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"19335:60:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13616,"nodeType":"ExpressionStatement","src":"19335:60:70"},{"AST":{"nativeSrc":"19431:496:70","nodeType":"YulBlock","src":"19431:496:70","statements":[{"nativeSrc":"19445:32:70","nodeType":"YulVariableDeclaration","src":"19445:32:70","value":{"arguments":[{"name":"result","nativeSrc":"19464:6:70","nodeType":"YulIdentifier","src":"19464:6:70"},{"kind":"number","nativeSrc":"19472:4:70","nodeType":"YulLiteral","src":"19472:4:70","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"19460:3:70","nodeType":"YulIdentifier","src":"19460:3:70"},"nativeSrc":"19460:17:70","nodeType":"YulFunctionCall","src":"19460:17:70"},"variables":[{"name":"dataPtr","nativeSrc":"19449:7:70","nodeType":"YulTypedName","src":"19449:7:70","type":""}]},{"nativeSrc":"19567:73:70","nodeType":"YulAssignment","src":"19567:73:70","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"19589:3:70","nodeType":"YulIdentifier","src":"19589:3:70"},"nativeSrc":"19589:5:70","nodeType":"YulFunctionCall","src":"19589:5:70"},{"kind":"number","nativeSrc":"19596:4:70","nodeType":"YulLiteral","src":"19596:4:70","type":"","value":"0x05"},{"name":"dataPtr","nativeSrc":"19602:7:70","nodeType":"YulIdentifier","src":"19602:7:70"},{"arguments":[{"name":"result","nativeSrc":"19617:6:70","nodeType":"YulIdentifier","src":"19617:6:70"}],"functionName":{"name":"mload","nativeSrc":"19611:5:70","nodeType":"YulIdentifier","src":"19611:5:70"},"nativeSrc":"19611:13:70","nodeType":"YulFunctionCall","src":"19611:13:70"},{"name":"dataPtr","nativeSrc":"19626:7:70","nodeType":"YulIdentifier","src":"19626:7:70"},{"name":"mLen","nativeSrc":"19635:4:70","nodeType":"YulIdentifier","src":"19635:4:70"}],"functionName":{"name":"staticcall","nativeSrc":"19578:10:70","nodeType":"YulIdentifier","src":"19578:10:70"},"nativeSrc":"19578:62:70","nodeType":"YulFunctionCall","src":"19578:62:70"},"variableNames":[{"name":"success","nativeSrc":"19567:7:70","nodeType":"YulIdentifier","src":"19567:7:70"}]},{"expression":{"arguments":[{"name":"result","nativeSrc":"19796:6:70","nodeType":"YulIdentifier","src":"19796:6:70"},{"name":"mLen","nativeSrc":"19804:4:70","nodeType":"YulIdentifier","src":"19804:4:70"}],"functionName":{"name":"mstore","nativeSrc":"19789:6:70","nodeType":"YulIdentifier","src":"19789:6:70"},"nativeSrc":"19789:20:70","nodeType":"YulFunctionCall","src":"19789:20:70"},"nativeSrc":"19789:20:70","nodeType":"YulExpressionStatement","src":"19789:20:70"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"19892:4:70","nodeType":"YulLiteral","src":"19892:4:70","type":"","value":"0x40"},{"arguments":[{"name":"dataPtr","nativeSrc":"19902:7:70","nodeType":"YulIdentifier","src":"19902:7:70"},{"name":"mLen","nativeSrc":"19911:4:70","nodeType":"YulIdentifier","src":"19911:4:70"}],"functionName":{"name":"add","nativeSrc":"19898:3:70","nodeType":"YulIdentifier","src":"19898:3:70"},"nativeSrc":"19898:18:70","nodeType":"YulFunctionCall","src":"19898:18:70"}],"functionName":{"name":"mstore","nativeSrc":"19885:6:70","nodeType":"YulIdentifier","src":"19885:6:70"},"nativeSrc":"19885:32:70","nodeType":"YulFunctionCall","src":"19885:32:70"},"nativeSrc":"19885:32:70","nodeType":"YulExpressionStatement","src":"19885:32:70"}]},"evmVersion":"cancun","externalReferences":[{"declaration":13599,"isOffset":false,"isSlot":false,"src":"19635:4:70","valueSize":1},{"declaration":13599,"isOffset":false,"isSlot":false,"src":"19804:4:70","valueSize":1},{"declaration":13599,"isOffset":false,"isSlot":false,"src":"19911:4:70","valueSize":1},{"declaration":13585,"isOffset":false,"isSlot":false,"src":"19464:6:70","valueSize":1},{"declaration":13585,"isOffset":false,"isSlot":false,"src":"19617:6:70","valueSize":1},{"declaration":13585,"isOffset":false,"isSlot":false,"src":"19796:6:70","valueSize":1},{"declaration":13583,"isOffset":false,"isSlot":false,"src":"19567:7:70","valueSize":1}],"flags":["memory-safe"],"id":13617,"nodeType":"InlineAssembly","src":"19406:521:70"}]},"documentation":{"id":13574,"nodeType":"StructuredDocumentation","src":"18914:88:70","text":" @dev Variant of {tryModExp} that supports inputs of arbitrary length."},"id":13619,"implemented":true,"kind":"function","modifiers":[],"name":"tryModExp","nameLocation":"19016:9:70","nodeType":"FunctionDefinition","parameters":{"id":13581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13576,"mutability":"mutable","name":"b","nameLocation":"19048:1:70","nodeType":"VariableDeclaration","scope":13619,"src":"19035:14:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13575,"name":"bytes","nodeType":"ElementaryTypeName","src":"19035:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":13578,"mutability":"mutable","name":"e","nameLocation":"19072:1:70","nodeType":"VariableDeclaration","scope":13619,"src":"19059:14:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13577,"name":"bytes","nodeType":"ElementaryTypeName","src":"19059:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":13580,"mutability":"mutable","name":"m","nameLocation":"19096:1:70","nodeType":"VariableDeclaration","scope":13619,"src":"19083:14:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13579,"name":"bytes","nodeType":"ElementaryTypeName","src":"19083:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19025:78:70"},"returnParameters":{"id":13586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13583,"mutability":"mutable","name":"success","nameLocation":"19132:7:70","nodeType":"VariableDeclaration","scope":13619,"src":"19127:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13582,"name":"bool","nodeType":"ElementaryTypeName","src":"19127:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":13585,"mutability":"mutable","name":"result","nameLocation":"19154:6:70","nodeType":"VariableDeclaration","scope":13619,"src":"19141:19:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13584,"name":"bytes","nodeType":"ElementaryTypeName","src":"19141:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19126:35:70"},"scope":14327,"src":"19007:926:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13651,"nodeType":"Block","src":"20088:176:70","statements":[{"body":{"id":13647,"nodeType":"Block","src":"20145:92:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":13642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":13638,"name":"byteArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"20163:9:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13640,"indexExpression":{"id":13639,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13628,"src":"20173:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20163:12:70","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13641,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20179:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20163:17:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13646,"nodeType":"IfStatement","src":"20159:68:70","trueBody":{"id":13645,"nodeType":"Block","src":"20182:45:70","statements":[{"expression":{"hexValue":"66616c7365","id":13643,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20207:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":13626,"id":13644,"nodeType":"Return","src":"20200:12:70"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13631,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13628,"src":"20118:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":13632,"name":"byteArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"20122:9:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20132:6:70","memberName":"length","nodeType":"MemberAccess","src":"20122:16:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20118:20:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13648,"initializationExpression":{"assignments":[13628],"declarations":[{"constant":false,"id":13628,"mutability":"mutable","name":"i","nameLocation":"20111:1:70","nodeType":"VariableDeclaration","scope":13648,"src":"20103:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13627,"name":"uint256","nodeType":"ElementaryTypeName","src":"20103:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13630,"initialValue":{"hexValue":"30","id":13629,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20115:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"20103:13:70"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":13636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"20140:3:70","subExpression":{"id":13635,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13628,"src":"20142:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13637,"nodeType":"ExpressionStatement","src":"20140:3:70"},"nodeType":"ForStatement","src":"20098:139:70"},{"expression":{"hexValue":"74727565","id":13649,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20253:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":13626,"id":13650,"nodeType":"Return","src":"20246:11:70"}]},"documentation":{"id":13620,"nodeType":"StructuredDocumentation","src":"19939:72:70","text":" @dev Returns whether the provided byte array is zero."},"id":13652,"implemented":true,"kind":"function","modifiers":[],"name":"_zeroBytes","nameLocation":"20025:10:70","nodeType":"FunctionDefinition","parameters":{"id":13623,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13622,"mutability":"mutable","name":"byteArray","nameLocation":"20049:9:70","nodeType":"VariableDeclaration","scope":13652,"src":"20036:22:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13621,"name":"bytes","nodeType":"ElementaryTypeName","src":"20036:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"20035:24:70"},"returnParameters":{"id":13626,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13625,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13652,"src":"20082:4:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13624,"name":"bool","nodeType":"ElementaryTypeName","src":"20082:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"20081:6:70"},"scope":14327,"src":"20016:248:70","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":13870,"nodeType":"Block","src":"20624:5124:70","statements":[{"id":13869,"nodeType":"UncheckedBlock","src":"20634:5108:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13660,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"20728:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"31","id":13661,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20733:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"20728:6:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13666,"nodeType":"IfStatement","src":"20724:53:70","trueBody":{"id":13665,"nodeType":"Block","src":"20736:41:70","statements":[{"expression":{"id":13663,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"20761:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13659,"id":13664,"nodeType":"Return","src":"20754:8:70"}]}},{"assignments":[13668],"declarations":[{"constant":false,"id":13668,"mutability":"mutable","name":"aa","nameLocation":"21712:2:70","nodeType":"VariableDeclaration","scope":13869,"src":"21704:10:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13667,"name":"uint256","nodeType":"ElementaryTypeName","src":"21704:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13670,"initialValue":{"id":13669,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"21717:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21704:14:70"},{"assignments":[13672],"declarations":[{"constant":false,"id":13672,"mutability":"mutable","name":"xn","nameLocation":"21740:2:70","nodeType":"VariableDeclaration","scope":13869,"src":"21732:10:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13671,"name":"uint256","nodeType":"ElementaryTypeName","src":"21732:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13674,"initialValue":{"hexValue":"31","id":13673,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21745:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"21732:14:70"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13675,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"21765:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"},"id":13678,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13676,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21772:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"313238","id":13677,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21777:3:70","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"21772:8:70","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}}],"id":13679,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"21771:10:70","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}},"src":"21765:16:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13690,"nodeType":"IfStatement","src":"21761:92:70","trueBody":{"id":13689,"nodeType":"Block","src":"21783:70:70","statements":[{"expression":{"id":13683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13681,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"21801:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"313238","id":13682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21808:3:70","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"21801:10:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13684,"nodeType":"ExpressionStatement","src":"21801:10:70"},{"expression":{"id":13687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13685,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"21829:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"3634","id":13686,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21836:2:70","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"21829:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13688,"nodeType":"ExpressionStatement","src":"21829:9:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13691,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"21870:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"},"id":13694,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13692,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21877:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3634","id":13693,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21882:2:70","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"21877:7:70","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"}}],"id":13695,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"21876:9:70","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"}},"src":"21870:15:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13706,"nodeType":"IfStatement","src":"21866:90:70","trueBody":{"id":13705,"nodeType":"Block","src":"21887:69:70","statements":[{"expression":{"id":13699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13697,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"21905:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3634","id":13698,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21912:2:70","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"21905:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13700,"nodeType":"ExpressionStatement","src":"21905:9:70"},{"expression":{"id":13703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13701,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"21932:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"3332","id":13702,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21939:2:70","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"21932:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13704,"nodeType":"ExpressionStatement","src":"21932:9:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13707,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"21973:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"},"id":13710,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13708,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21980:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3332","id":13709,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21985:2:70","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"21980:7:70","typeDescriptions":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"}}],"id":13711,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"21979:9:70","typeDescriptions":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"}},"src":"21973:15:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13722,"nodeType":"IfStatement","src":"21969:90:70","trueBody":{"id":13721,"nodeType":"Block","src":"21990:69:70","statements":[{"expression":{"id":13715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13713,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"22008:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3332","id":13714,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22015:2:70","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"22008:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13716,"nodeType":"ExpressionStatement","src":"22008:9:70"},{"expression":{"id":13719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13717,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"22035:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"3136","id":13718,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22042:2:70","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"22035:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13720,"nodeType":"ExpressionStatement","src":"22035:9:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13723,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"22076:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"},"id":13726,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22083:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3136","id":13725,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22088:2:70","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"22083:7:70","typeDescriptions":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"}}],"id":13727,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22082:9:70","typeDescriptions":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"}},"src":"22076:15:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13738,"nodeType":"IfStatement","src":"22072:89:70","trueBody":{"id":13737,"nodeType":"Block","src":"22093:68:70","statements":[{"expression":{"id":13731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13729,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"22111:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3136","id":13730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22118:2:70","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"22111:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13732,"nodeType":"ExpressionStatement","src":"22111:9:70"},{"expression":{"id":13735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13733,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"22138:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"38","id":13734,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22145:1:70","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"22138:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13736,"nodeType":"ExpressionStatement","src":"22138:8:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13739,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"22178:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"id":13742,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22185:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"38","id":13741,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22190:1:70","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"22185:6:70","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"}}],"id":13743,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22184:8:70","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"}},"src":"22178:14:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13754,"nodeType":"IfStatement","src":"22174:87:70","trueBody":{"id":13753,"nodeType":"Block","src":"22194:67:70","statements":[{"expression":{"id":13747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13745,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"22212:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"38","id":13746,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22219:1:70","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"22212:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13748,"nodeType":"ExpressionStatement","src":"22212:8:70"},{"expression":{"id":13751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13749,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"22238:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"34","id":13750,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22245:1:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"22238:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13752,"nodeType":"ExpressionStatement","src":"22238:8:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13755,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"22278:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"id":13758,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22285:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"34","id":13757,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22290:1:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"22285:6:70","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"}}],"id":13759,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22284:8:70","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"}},"src":"22278:14:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13770,"nodeType":"IfStatement","src":"22274:87:70","trueBody":{"id":13769,"nodeType":"Block","src":"22294:67:70","statements":[{"expression":{"id":13763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13761,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"22312:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":13762,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22319:1:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"22312:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13764,"nodeType":"ExpressionStatement","src":"22312:8:70"},{"expression":{"id":13767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13765,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"22338:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"32","id":13766,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22345:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22338:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13768,"nodeType":"ExpressionStatement","src":"22338:8:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13771,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"22378:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"id":13774,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22385:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"32","id":13773,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22390:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22385:6:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"}}],"id":13775,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22384:8:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"}},"src":"22378:14:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13782,"nodeType":"IfStatement","src":"22374:61:70","trueBody":{"id":13781,"nodeType":"Block","src":"22394:41:70","statements":[{"expression":{"id":13779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13777,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"22412:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"31","id":13778,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22419:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"22412:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13780,"nodeType":"ExpressionStatement","src":"22412:8:70"}]}},{"expression":{"id":13790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13783,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"22855:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"33","id":13784,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22861:1:70","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13785,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"22865:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22861:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13787,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22860:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13788,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22872:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"22860:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22855:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13791,"nodeType":"ExpressionStatement","src":"22855:18:70"},{"expression":{"id":13801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13792,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"24760:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13793,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"24766:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13794,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"24771:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13795,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"24775:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24771:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24766:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13798,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24765:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24782:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"24765:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24760:23:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13802,"nodeType":"ExpressionStatement","src":"24760:23:70"},{"expression":{"id":13812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13803,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"24869:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13804,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"24875:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13805,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"24880:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13806,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"24884:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24880:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24875:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13809,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24874:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24891:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"24874:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24869:23:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13813,"nodeType":"ExpressionStatement","src":"24869:23:70"},{"expression":{"id":13823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13814,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"24980:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13815,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"24986:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13816,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"24991:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13817,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"24995:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24991:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24986:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13820,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24985:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13821,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25002:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"24985:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24980:23:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13824,"nodeType":"ExpressionStatement","src":"24980:23:70"},{"expression":{"id":13834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13825,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25089:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13826,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25095:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13827,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"25100:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13828,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25104:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25100:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25095:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13831,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"25094:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25111:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25094:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25089:23:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13835,"nodeType":"ExpressionStatement","src":"25089:23:70"},{"expression":{"id":13845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13836,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25199:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13837,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25205:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13838,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"25210:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13839,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25214:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25210:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25205:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13842,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"25204:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13843,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25221:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25204:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25199:23:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13846,"nodeType":"ExpressionStatement","src":"25199:23:70"},{"expression":{"id":13856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13847,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25309:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13848,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25315:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13849,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"25320:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13850,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25324:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25320:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25315:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13853,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"25314:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13854,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25331:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25314:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25309:23:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13857,"nodeType":"ExpressionStatement","src":"25309:23:70"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13858,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25698:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13861,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25719:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13862,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"25724:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13863,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25728:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25724:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25719:11:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13859,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"25703:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25712:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"25703:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25703:28:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25698:33:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13659,"id":13868,"nodeType":"Return","src":"25691:40:70"}]}]},"documentation":{"id":13653,"nodeType":"StructuredDocumentation","src":"20270:292:70","text":" @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n towards zero.\n This method is based on Newton's method for computing square roots; the algorithm is restricted to only\n using integer operations."},"id":13871,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"20576:4:70","nodeType":"FunctionDefinition","parameters":{"id":13656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13655,"mutability":"mutable","name":"a","nameLocation":"20589:1:70","nodeType":"VariableDeclaration","scope":13871,"src":"20581:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13654,"name":"uint256","nodeType":"ElementaryTypeName","src":"20581:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20580:11:70"},"returnParameters":{"id":13659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13658,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13871,"src":"20615:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13657,"name":"uint256","nodeType":"ElementaryTypeName","src":"20615:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20614:9:70"},"scope":14327,"src":"20567:5181:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13904,"nodeType":"Block","src":"25921:171:70","statements":[{"id":13903,"nodeType":"UncheckedBlock","src":"25931:155:70","statements":[{"assignments":[13883],"declarations":[{"constant":false,"id":13883,"mutability":"mutable","name":"result","nameLocation":"25963:6:70","nodeType":"VariableDeclaration","scope":13903,"src":"25955:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13882,"name":"uint256","nodeType":"ElementaryTypeName","src":"25955:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13887,"initialValue":{"arguments":[{"id":13885,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13874,"src":"25977:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13884,"name":"sqrt","nodeType":"Identifier","overloadedDeclarations":[13871,13905],"referencedDeclaration":13871,"src":"25972:4:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":13886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25972:7:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25955:24:70"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13888,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13883,"src":"26000:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13892,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13877,"src":"26042:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}],"id":13891,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14326,"src":"26025:16:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$12718_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":13893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26025:26:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13894,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13883,"src":"26055:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13895,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13883,"src":"26064:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26055:15:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":13897,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13874,"src":"26073:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26055:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"26025:49:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13889,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"26009:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26018:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"26009:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26009:66:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26000:75:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13881,"id":13902,"nodeType":"Return","src":"25993:82:70"}]}]},"documentation":{"id":13872,"nodeType":"StructuredDocumentation","src":"25754:86:70","text":" @dev Calculates sqrt(a), following the selected rounding direction."},"id":13905,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"25854:4:70","nodeType":"FunctionDefinition","parameters":{"id":13878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13874,"mutability":"mutable","name":"a","nameLocation":"25867:1:70","nodeType":"VariableDeclaration","scope":13905,"src":"25859:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13873,"name":"uint256","nodeType":"ElementaryTypeName","src":"25859:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13877,"mutability":"mutable","name":"rounding","nameLocation":"25879:8:70","nodeType":"VariableDeclaration","scope":13905,"src":"25870:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"},"typeName":{"id":13876,"nodeType":"UserDefinedTypeName","pathNode":{"id":13875,"name":"Rounding","nameLocations":["25870:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":12718,"src":"25870:8:70"},"referencedDeclaration":12718,"src":"25870:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"25858:30:70"},"returnParameters":{"id":13881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13880,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13905,"src":"25912:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13879,"name":"uint256","nodeType":"ElementaryTypeName","src":"25912:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25911:9:70"},"scope":14327,"src":"25845:247:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13995,"nodeType":"Block","src":"26281:2334:70","statements":[{"expression":{"id":13922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13913,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26363:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13916,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13908,"src":"26383:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666666666666666666666666666666666666666666666666666666666666666","id":13917,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26387:34:70","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"},"value":"0xffffffffffffffffffffffffffffffff"},"src":"26383:38:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13914,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"26367:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26376:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"26367:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26367:55:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"37","id":13920,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26426:1:70","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"26367:60:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26363:64:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13923,"nodeType":"ExpressionStatement","src":"26363:64:70"},{"expression":{"id":13936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13924,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26503:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13927,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13908,"src":"26525:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13928,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26530:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26525:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13930,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"26524:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866666666666666666666666666666666","id":13931,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26535:18:70","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551615_by_1","typeString":"int_const 18446744073709551615"},"value":"0xffffffffffffffff"},"src":"26524:29:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13925,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"26508:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26517:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"26508:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26508:46:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"36","id":13934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26558:1:70","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"26508:51:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26503:56:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13937,"nodeType":"ExpressionStatement","src":"26503:56:70"},{"expression":{"id":13950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13938,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26634:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13941,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13908,"src":"26656:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13942,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26661:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26656:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13944,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"26655:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666666666666666","id":13945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26666:10:70","typeDescriptions":{"typeIdentifier":"t_rational_4294967295_by_1","typeString":"int_const 4294967295"},"value":"0xffffffff"},"src":"26655:21:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13939,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"26639:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26648:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"26639:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26639:38:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"35","id":13948,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26681:1:70","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"26639:43:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26634:48:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13951,"nodeType":"ExpressionStatement","src":"26634:48:70"},{"expression":{"id":13964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13952,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26757:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13955,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13908,"src":"26779:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13956,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26784:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26779:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13958,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"26778:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866666666","id":13959,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26789:6:70","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"0xffff"},"src":"26778:17:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13953,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"26762:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26771:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"26762:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26762:34:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"34","id":13962,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26800:1:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"26762:39:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26757:44:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13965,"nodeType":"ExpressionStatement","src":"26757:44:70"},{"expression":{"id":13978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13966,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26874:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13969,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13908,"src":"26896:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13970,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26901:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26896:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13972,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"26895:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666","id":13973,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26906:4:70","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"},"src":"26895:15:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13967,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"26879:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26888:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"26879:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26879:32:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"33","id":13976,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26915:1:70","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"26879:37:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26874:42:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13979,"nodeType":"ExpressionStatement","src":"26874:42:70"},{"expression":{"id":13992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13980,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26988:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13983,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13908,"src":"27010:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13984,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"27015:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27010:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13986,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27009:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866","id":13987,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27020:3:70","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"0xf"},"src":"27009:14:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13981,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"26993:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27002:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"26993:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26993:31:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"32","id":13990,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27028:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"26993:36:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26988:41:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13993,"nodeType":"ExpressionStatement","src":"26988:41:70"},{"AST":{"nativeSrc":"28490:119:70","nodeType":"YulBlock","src":"28490:119:70","statements":[{"nativeSrc":"28504:95:70","nodeType":"YulAssignment","src":"28504:95:70","value":{"arguments":[{"name":"r","nativeSrc":"28512:1:70","nodeType":"YulIdentifier","src":"28512:1:70"},{"arguments":[{"arguments":[{"name":"r","nativeSrc":"28524:1:70","nodeType":"YulIdentifier","src":"28524:1:70"},{"name":"x","nativeSrc":"28527:1:70","nodeType":"YulIdentifier","src":"28527:1:70"}],"functionName":{"name":"shr","nativeSrc":"28520:3:70","nodeType":"YulIdentifier","src":"28520:3:70"},"nativeSrc":"28520:9:70","nodeType":"YulFunctionCall","src":"28520:9:70"},{"kind":"number","nativeSrc":"28531:66:70","nodeType":"YulLiteral","src":"28531:66:70","type":"","value":"0x0000010102020202030303030303030300000000000000000000000000000000"}],"functionName":{"name":"byte","nativeSrc":"28515:4:70","nodeType":"YulIdentifier","src":"28515:4:70"},"nativeSrc":"28515:83:70","nodeType":"YulFunctionCall","src":"28515:83:70"}],"functionName":{"name":"or","nativeSrc":"28509:2:70","nodeType":"YulIdentifier","src":"28509:2:70"},"nativeSrc":"28509:90:70","nodeType":"YulFunctionCall","src":"28509:90:70"},"variableNames":[{"name":"r","nativeSrc":"28504:1:70","nodeType":"YulIdentifier","src":"28504:1:70"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":13911,"isOffset":false,"isSlot":false,"src":"28504:1:70","valueSize":1},{"declaration":13911,"isOffset":false,"isSlot":false,"src":"28512:1:70","valueSize":1},{"declaration":13911,"isOffset":false,"isSlot":false,"src":"28524:1:70","valueSize":1},{"declaration":13908,"isOffset":false,"isSlot":false,"src":"28527:1:70","valueSize":1}],"flags":["memory-safe"],"id":13994,"nodeType":"InlineAssembly","src":"28465:144:70"}]},"documentation":{"id":13906,"nodeType":"StructuredDocumentation","src":"26098:119:70","text":" @dev Return the log in base 2 of a positive value rounded towards zero.\n Returns 0 if given 0."},"id":13996,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"26231:4:70","nodeType":"FunctionDefinition","parameters":{"id":13909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13908,"mutability":"mutable","name":"x","nameLocation":"26244:1:70","nodeType":"VariableDeclaration","scope":13996,"src":"26236:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13907,"name":"uint256","nodeType":"ElementaryTypeName","src":"26236:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26235:11:70"},"returnParameters":{"id":13912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13911,"mutability":"mutable","name":"r","nameLocation":"26278:1:70","nodeType":"VariableDeclaration","scope":13996,"src":"26270:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13910,"name":"uint256","nodeType":"ElementaryTypeName","src":"26270:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26269:11:70"},"scope":14327,"src":"26222:2393:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14029,"nodeType":"Block","src":"28848:175:70","statements":[{"id":14028,"nodeType":"UncheckedBlock","src":"28858:159:70","statements":[{"assignments":[14008],"declarations":[{"constant":false,"id":14008,"mutability":"mutable","name":"result","nameLocation":"28890:6:70","nodeType":"VariableDeclaration","scope":14028,"src":"28882:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14007,"name":"uint256","nodeType":"ElementaryTypeName","src":"28882:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14012,"initialValue":{"arguments":[{"id":14010,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13999,"src":"28904:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14009,"name":"log2","nodeType":"Identifier","overloadedDeclarations":[13996,14030],"referencedDeclaration":13996,"src":"28899:4:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":14011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28899:11:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28882:28:70"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14013,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14008,"src":"28931:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":14017,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14002,"src":"28973:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}],"id":14016,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14326,"src":"28956:16:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$12718_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":14018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28956:26:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":14019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28986:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":14020,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14008,"src":"28991:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28986:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":14022,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13999,"src":"29000:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28986:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"28956:49:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14014,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"28940:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":14015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28949:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"28940:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28940:66:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28931:75:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14006,"id":14027,"nodeType":"Return","src":"28924:82:70"}]}]},"documentation":{"id":13997,"nodeType":"StructuredDocumentation","src":"28621:142:70","text":" @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":14030,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"28777:4:70","nodeType":"FunctionDefinition","parameters":{"id":14003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13999,"mutability":"mutable","name":"value","nameLocation":"28790:5:70","nodeType":"VariableDeclaration","scope":14030,"src":"28782:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13998,"name":"uint256","nodeType":"ElementaryTypeName","src":"28782:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14002,"mutability":"mutable","name":"rounding","nameLocation":"28806:8:70","nodeType":"VariableDeclaration","scope":14030,"src":"28797:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"},"typeName":{"id":14001,"nodeType":"UserDefinedTypeName","pathNode":{"id":14000,"name":"Rounding","nameLocations":["28797:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":12718,"src":"28797:8:70"},"referencedDeclaration":12718,"src":"28797:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"28781:34:70"},"returnParameters":{"id":14006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14005,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14030,"src":"28839:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14004,"name":"uint256","nodeType":"ElementaryTypeName","src":"28839:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"28838:9:70"},"scope":14327,"src":"28768:255:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14158,"nodeType":"Block","src":"29216:854:70","statements":[{"assignments":[14039],"declarations":[{"constant":false,"id":14039,"mutability":"mutable","name":"result","nameLocation":"29234:6:70","nodeType":"VariableDeclaration","scope":14158,"src":"29226:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14038,"name":"uint256","nodeType":"ElementaryTypeName","src":"29226:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14041,"initialValue":{"hexValue":"30","id":14040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29243:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"29226:18:70"},{"id":14155,"nodeType":"UncheckedBlock","src":"29254:787:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14042,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29282:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"},"id":14045,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14043,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29291:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":14044,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29297:2:70","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"29291:8:70","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"29282:17:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14058,"nodeType":"IfStatement","src":"29278:103:70","trueBody":{"id":14057,"nodeType":"Block","src":"29301:80:70","statements":[{"expression":{"id":14051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14047,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29319:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"},"id":14050,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14048,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29328:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":14049,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29334:2:70","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"29328:8:70","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"29319:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14052,"nodeType":"ExpressionStatement","src":"29319:17:70"},{"expression":{"id":14055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14053,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14039,"src":"29354:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3634","id":14054,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29364:2:70","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"29354:12:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14056,"nodeType":"ExpressionStatement","src":"29354:12:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14059,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29398:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"},"id":14062,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14060,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29407:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":14061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29413:2:70","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"29407:8:70","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"29398:17:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14075,"nodeType":"IfStatement","src":"29394:103:70","trueBody":{"id":14074,"nodeType":"Block","src":"29417:80:70","statements":[{"expression":{"id":14068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14064,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29435:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"},"id":14067,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14065,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29444:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":14066,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29450:2:70","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"29444:8:70","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"29435:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14069,"nodeType":"ExpressionStatement","src":"29435:17:70"},{"expression":{"id":14072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14070,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14039,"src":"29470:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":14071,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29480:2:70","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"29470:12:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14073,"nodeType":"ExpressionStatement","src":"29470:12:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14076,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29514:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":14079,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14077,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29523:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":14078,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29529:2:70","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"29523:8:70","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"29514:17:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14092,"nodeType":"IfStatement","src":"29510:103:70","trueBody":{"id":14091,"nodeType":"Block","src":"29533:80:70","statements":[{"expression":{"id":14085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14081,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29551:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":14084,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14082,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29560:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":14083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29566:2:70","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"29560:8:70","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"29551:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14086,"nodeType":"ExpressionStatement","src":"29551:17:70"},{"expression":{"id":14089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14087,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14039,"src":"29586:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":14088,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29596:2:70","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"29586:12:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14090,"nodeType":"ExpressionStatement","src":"29586:12:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14093,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29630:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":14096,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29639:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":14095,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29645:1:70","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"29639:7:70","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"29630:16:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14109,"nodeType":"IfStatement","src":"29626:100:70","trueBody":{"id":14108,"nodeType":"Block","src":"29648:78:70","statements":[{"expression":{"id":14102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14098,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29666:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":14101,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14099,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29675:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":14100,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29681:1:70","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"29675:7:70","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"29666:16:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14103,"nodeType":"ExpressionStatement","src":"29666:16:70"},{"expression":{"id":14106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14104,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14039,"src":"29700:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":14105,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29710:1:70","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"29700:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14107,"nodeType":"ExpressionStatement","src":"29700:11:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14110,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29743:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":14113,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29752:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":14112,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29758:1:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"29752:7:70","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"29743:16:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14126,"nodeType":"IfStatement","src":"29739:100:70","trueBody":{"id":14125,"nodeType":"Block","src":"29761:78:70","statements":[{"expression":{"id":14119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14115,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29779:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":14118,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29788:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":14117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29794:1:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"29788:7:70","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"29779:16:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14120,"nodeType":"ExpressionStatement","src":"29779:16:70"},{"expression":{"id":14123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14121,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14039,"src":"29813:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":14122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29823:1:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"29813:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14124,"nodeType":"ExpressionStatement","src":"29813:11:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14127,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29856:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":14130,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29865:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":14129,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29871:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"29865:7:70","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"29856:16:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14143,"nodeType":"IfStatement","src":"29852:100:70","trueBody":{"id":14142,"nodeType":"Block","src":"29874:78:70","statements":[{"expression":{"id":14136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14132,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29892:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":14135,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14133,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29901:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":14134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29907:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"29901:7:70","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"29892:16:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14137,"nodeType":"ExpressionStatement","src":"29892:16:70"},{"expression":{"id":14140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14138,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14039,"src":"29926:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":14139,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29936:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"29926:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14141,"nodeType":"ExpressionStatement","src":"29926:11:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14144,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29969:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"id":14147,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14145,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29978:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"31","id":14146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29984:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"29978:7:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"}},"src":"29969:16:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14154,"nodeType":"IfStatement","src":"29965:66:70","trueBody":{"id":14153,"nodeType":"Block","src":"29987:44:70","statements":[{"expression":{"id":14151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14149,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14039,"src":"30005:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":14150,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30015:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"30005:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14152,"nodeType":"ExpressionStatement","src":"30005:11:70"}]}}]},{"expression":{"id":14156,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14039,"src":"30057:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14037,"id":14157,"nodeType":"Return","src":"30050:13:70"}]},"documentation":{"id":14031,"nodeType":"StructuredDocumentation","src":"29029:120:70","text":" @dev Return the log in base 10 of a positive value rounded towards zero.\n Returns 0 if given 0."},"id":14159,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"29163:5:70","nodeType":"FunctionDefinition","parameters":{"id":14034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14033,"mutability":"mutable","name":"value","nameLocation":"29177:5:70","nodeType":"VariableDeclaration","scope":14159,"src":"29169:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14032,"name":"uint256","nodeType":"ElementaryTypeName","src":"29169:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29168:15:70"},"returnParameters":{"id":14037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14036,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14159,"src":"29207:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14035,"name":"uint256","nodeType":"ElementaryTypeName","src":"29207:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29206:9:70"},"scope":14327,"src":"29154:916:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14192,"nodeType":"Block","src":"30305:177:70","statements":[{"id":14191,"nodeType":"UncheckedBlock","src":"30315:161:70","statements":[{"assignments":[14171],"declarations":[{"constant":false,"id":14171,"mutability":"mutable","name":"result","nameLocation":"30347:6:70","nodeType":"VariableDeclaration","scope":14191,"src":"30339:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14170,"name":"uint256","nodeType":"ElementaryTypeName","src":"30339:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14175,"initialValue":{"arguments":[{"id":14173,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14162,"src":"30362:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14172,"name":"log10","nodeType":"Identifier","overloadedDeclarations":[14159,14193],"referencedDeclaration":14159,"src":"30356:5:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":14174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30356:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30339:29:70"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14176,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14171,"src":"30389:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":14180,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14165,"src":"30431:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}],"id":14179,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14326,"src":"30414:16:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$12718_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":14181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30414:26:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14182,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30444:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":14183,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14171,"src":"30450:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30444:12:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":14185,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14162,"src":"30459:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30444:20:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"30414:50:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14177,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"30398:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":14178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30407:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"30398:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30398:67:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30389:76:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14169,"id":14190,"nodeType":"Return","src":"30382:83:70"}]}]},"documentation":{"id":14160,"nodeType":"StructuredDocumentation","src":"30076:143:70","text":" @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":14193,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"30233:5:70","nodeType":"FunctionDefinition","parameters":{"id":14166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14162,"mutability":"mutable","name":"value","nameLocation":"30247:5:70","nodeType":"VariableDeclaration","scope":14193,"src":"30239:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14161,"name":"uint256","nodeType":"ElementaryTypeName","src":"30239:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14165,"mutability":"mutable","name":"rounding","nameLocation":"30263:8:70","nodeType":"VariableDeclaration","scope":14193,"src":"30254:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"},"typeName":{"id":14164,"nodeType":"UserDefinedTypeName","pathNode":{"id":14163,"name":"Rounding","nameLocations":["30254:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":12718,"src":"30254:8:70"},"referencedDeclaration":12718,"src":"30254:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"30238:34:70"},"returnParameters":{"id":14169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14168,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14193,"src":"30296:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14167,"name":"uint256","nodeType":"ElementaryTypeName","src":"30296:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30295:9:70"},"scope":14327,"src":"30224:258:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14269,"nodeType":"Block","src":"30800:675:70","statements":[{"expression":{"id":14210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14201,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14199,"src":"30882:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14204,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14196,"src":"30902:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666666666666666666666666666666666666666666666666666666666666666","id":14205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30906:34:70","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"},"value":"0xffffffffffffffffffffffffffffffff"},"src":"30902:38:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14202,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"30886:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":14203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30895:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"30886:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30886:55:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"37","id":14208,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30945:1:70","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"30886:60:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30882:64:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14211,"nodeType":"ExpressionStatement","src":"30882:64:70"},{"expression":{"id":14224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14212,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14199,"src":"31022:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14215,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14196,"src":"31044:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":14216,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14199,"src":"31049:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31044:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14218,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31043:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866666666666666666666666666666666","id":14219,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31054:18:70","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551615_by_1","typeString":"int_const 18446744073709551615"},"value":"0xffffffffffffffff"},"src":"31043:29:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14213,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"31027:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":14214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31036:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"31027:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31027:46:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"36","id":14222,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31077:1:70","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"31027:51:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31022:56:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14225,"nodeType":"ExpressionStatement","src":"31022:56:70"},{"expression":{"id":14238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14226,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14199,"src":"31153:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14229,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14196,"src":"31175:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":14230,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14199,"src":"31180:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31175:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14232,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31174:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666666666666666","id":14233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31185:10:70","typeDescriptions":{"typeIdentifier":"t_rational_4294967295_by_1","typeString":"int_const 4294967295"},"value":"0xffffffff"},"src":"31174:21:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14227,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"31158:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":14228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31167:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"31158:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31158:38:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"35","id":14236,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31200:1:70","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"31158:43:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31153:48:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14239,"nodeType":"ExpressionStatement","src":"31153:48:70"},{"expression":{"id":14252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14240,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14199,"src":"31276:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14243,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14196,"src":"31298:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":14244,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14199,"src":"31303:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31298:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14246,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31297:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866666666","id":14247,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31308:6:70","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"0xffff"},"src":"31297:17:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14241,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"31281:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":14242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31290:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"31281:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31281:34:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"34","id":14250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31319:1:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"31281:39:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31276:44:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14253,"nodeType":"ExpressionStatement","src":"31276:44:70"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14254,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14199,"src":"31426:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"33","id":14255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31431:1:70","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"31426:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14257,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31425:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14260,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14196,"src":"31453:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":14261,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14199,"src":"31458:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31453:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14263,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31452:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666","id":14264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31463:4:70","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"},"src":"31452:15:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14258,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"31436:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":14259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31445:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"31436:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31436:32:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31425:43:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14200,"id":14268,"nodeType":"Return","src":"31418:50:70"}]},"documentation":{"id":14194,"nodeType":"StructuredDocumentation","src":"30488:246:70","text":" @dev Return the log in base 256 of a positive value rounded towards zero.\n Returns 0 if given 0.\n Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string."},"id":14270,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"30748:6:70","nodeType":"FunctionDefinition","parameters":{"id":14197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14196,"mutability":"mutable","name":"x","nameLocation":"30763:1:70","nodeType":"VariableDeclaration","scope":14270,"src":"30755:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14195,"name":"uint256","nodeType":"ElementaryTypeName","src":"30755:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30754:11:70"},"returnParameters":{"id":14200,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14199,"mutability":"mutable","name":"r","nameLocation":"30797:1:70","nodeType":"VariableDeclaration","scope":14270,"src":"30789:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14198,"name":"uint256","nodeType":"ElementaryTypeName","src":"30789:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30788:11:70"},"scope":14327,"src":"30739:736:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14306,"nodeType":"Block","src":"31712:184:70","statements":[{"id":14305,"nodeType":"UncheckedBlock","src":"31722:168:70","statements":[{"assignments":[14282],"declarations":[{"constant":false,"id":14282,"mutability":"mutable","name":"result","nameLocation":"31754:6:70","nodeType":"VariableDeclaration","scope":14305,"src":"31746:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14281,"name":"uint256","nodeType":"ElementaryTypeName","src":"31746:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14286,"initialValue":{"arguments":[{"id":14284,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14273,"src":"31770:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14283,"name":"log256","nodeType":"Identifier","overloadedDeclarations":[14270,14307],"referencedDeclaration":14270,"src":"31763:6:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":14285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31763:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"31746:30:70"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14287,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14282,"src":"31797:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":14291,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14276,"src":"31839:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}],"id":14290,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14326,"src":"31822:16:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$12718_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":14292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31822:26:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":14293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31852:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14294,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14282,"src":"31858:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"33","id":14295,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31868:1:70","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"31858:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14297,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31857:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31852:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":14299,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14273,"src":"31873:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31852:26:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"31822:56:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14288,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"31806:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":14289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31815:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"31806:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31806:73:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31797:82:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14280,"id":14304,"nodeType":"Return","src":"31790:89:70"}]}]},"documentation":{"id":14271,"nodeType":"StructuredDocumentation","src":"31481:144:70","text":" @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":14307,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"31639:6:70","nodeType":"FunctionDefinition","parameters":{"id":14277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14273,"mutability":"mutable","name":"value","nameLocation":"31654:5:70","nodeType":"VariableDeclaration","scope":14307,"src":"31646:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14272,"name":"uint256","nodeType":"ElementaryTypeName","src":"31646:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14276,"mutability":"mutable","name":"rounding","nameLocation":"31670:8:70","nodeType":"VariableDeclaration","scope":14307,"src":"31661:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"},"typeName":{"id":14275,"nodeType":"UserDefinedTypeName","pathNode":{"id":14274,"name":"Rounding","nameLocations":["31661:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":12718,"src":"31661:8:70"},"referencedDeclaration":12718,"src":"31661:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"31645:34:70"},"returnParameters":{"id":14280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14279,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14307,"src":"31703:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14278,"name":"uint256","nodeType":"ElementaryTypeName","src":"31703:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31702:9:70"},"scope":14327,"src":"31630:266:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14325,"nodeType":"Block","src":"32094:48:70","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":14323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":14321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":14318,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14311,"src":"32117:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}],"id":14317,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32111:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":14316,"name":"uint8","nodeType":"ElementaryTypeName","src":"32111:5:70","typeDescriptions":{}}},"id":14319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32111:15:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"hexValue":"32","id":14320,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32129:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"32111:19:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":14322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32134:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"32111:24:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":14315,"id":14324,"nodeType":"Return","src":"32104:31:70"}]},"documentation":{"id":14308,"nodeType":"StructuredDocumentation","src":"31902:113:70","text":" @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers."},"id":14326,"implemented":true,"kind":"function","modifiers":[],"name":"unsignedRoundsUp","nameLocation":"32029:16:70","nodeType":"FunctionDefinition","parameters":{"id":14312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14311,"mutability":"mutable","name":"rounding","nameLocation":"32055:8:70","nodeType":"VariableDeclaration","scope":14326,"src":"32046:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"},"typeName":{"id":14310,"nodeType":"UserDefinedTypeName","pathNode":{"id":14309,"name":"Rounding","nameLocations":["32046:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":12718,"src":"32046:8:70"},"referencedDeclaration":12718,"src":"32046:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"32045:19:70"},"returnParameters":{"id":14315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14314,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14326,"src":"32088:4:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14313,"name":"bool","nodeType":"ElementaryTypeName","src":"32088:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"32087:6:70"},"scope":14327,"src":"32020:122:70","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":14328,"src":"281:31863:70","usedErrors":[],"usedEvents":[]}],"src":"103:32042:70"},"id":70},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","exportedSymbols":{"SafeCast":[16092]},"id":16093,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":14329,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"192:24:71"},{"abstract":false,"baseContracts":[],"canonicalName":"SafeCast","contractDependencies":[],"contractKind":"library","documentation":{"id":14330,"nodeType":"StructuredDocumentation","src":"218:550:71","text":" @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always."},"fullyImplemented":true,"id":16092,"linearizedBaseContracts":[16092],"name":"SafeCast","nameLocation":"777:8:71","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":14331,"nodeType":"StructuredDocumentation","src":"792:68:71","text":" @dev Value doesn't fit in an uint of `bits` size."},"errorSelector":"6dfcc650","id":14337,"name":"SafeCastOverflowedUintDowncast","nameLocation":"871:30:71","nodeType":"ErrorDefinition","parameters":{"id":14336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14333,"mutability":"mutable","name":"bits","nameLocation":"908:4:71","nodeType":"VariableDeclaration","scope":14337,"src":"902:10:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":14332,"name":"uint8","nodeType":"ElementaryTypeName","src":"902:5:71","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":14335,"mutability":"mutable","name":"value","nameLocation":"922:5:71","nodeType":"VariableDeclaration","scope":14337,"src":"914:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14334,"name":"uint256","nodeType":"ElementaryTypeName","src":"914:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"901:27:71"},"src":"865:64:71"},{"documentation":{"id":14338,"nodeType":"StructuredDocumentation","src":"935:75:71","text":" @dev An int value doesn't fit in an uint of `bits` size."},"errorSelector":"a8ce4432","id":14342,"name":"SafeCastOverflowedIntToUint","nameLocation":"1021:27:71","nodeType":"ErrorDefinition","parameters":{"id":14341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14340,"mutability":"mutable","name":"value","nameLocation":"1056:5:71","nodeType":"VariableDeclaration","scope":14342,"src":"1049:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":14339,"name":"int256","nodeType":"ElementaryTypeName","src":"1049:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1048:14:71"},"src":"1015:48:71"},{"documentation":{"id":14343,"nodeType":"StructuredDocumentation","src":"1069:67:71","text":" @dev Value doesn't fit in an int of `bits` size."},"errorSelector":"327269a7","id":14349,"name":"SafeCastOverflowedIntDowncast","nameLocation":"1147:29:71","nodeType":"ErrorDefinition","parameters":{"id":14348,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14345,"mutability":"mutable","name":"bits","nameLocation":"1183:4:71","nodeType":"VariableDeclaration","scope":14349,"src":"1177:10:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":14344,"name":"uint8","nodeType":"ElementaryTypeName","src":"1177:5:71","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":14347,"mutability":"mutable","name":"value","nameLocation":"1196:5:71","nodeType":"VariableDeclaration","scope":14349,"src":"1189:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":14346,"name":"int256","nodeType":"ElementaryTypeName","src":"1189:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1176:26:71"},"src":"1141:62:71"},{"documentation":{"id":14350,"nodeType":"StructuredDocumentation","src":"1209:75:71","text":" @dev An uint value doesn't fit in an int of `bits` size."},"errorSelector":"24775e06","id":14354,"name":"SafeCastOverflowedUintToInt","nameLocation":"1295:27:71","nodeType":"ErrorDefinition","parameters":{"id":14353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14352,"mutability":"mutable","name":"value","nameLocation":"1331:5:71","nodeType":"VariableDeclaration","scope":14354,"src":"1323:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14351,"name":"uint256","nodeType":"ElementaryTypeName","src":"1323:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1322:15:71"},"src":"1289:49:71"},{"body":{"id":14381,"nodeType":"Block","src":"1695:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14362,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14357,"src":"1709:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14365,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1722:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":14364,"name":"uint248","nodeType":"ElementaryTypeName","src":"1722:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"}],"id":14363,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1717:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1717:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint248","typeString":"type(uint248)"}},"id":14367,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1731:3:71","memberName":"max","nodeType":"MemberAccess","src":"1717:17:71","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"src":"1709:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14375,"nodeType":"IfStatement","src":"1705:105:71","trueBody":{"id":14374,"nodeType":"Block","src":"1736:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":14370,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1788:3:71","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":14371,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14357,"src":"1793:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14369,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"1757:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1757:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14373,"nodeType":"RevertStatement","src":"1750:49:71"}]}},{"expression":{"arguments":[{"id":14378,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14357,"src":"1834:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14377,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1826:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":14376,"name":"uint248","nodeType":"ElementaryTypeName","src":"1826:7:71","typeDescriptions":{}}},"id":14379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1826:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"functionReturnParameters":14361,"id":14380,"nodeType":"Return","src":"1819:21:71"}]},"documentation":{"id":14355,"nodeType":"StructuredDocumentation","src":"1344:280:71","text":" @dev Returns the downcasted uint248 from uint256, reverting on\n overflow (when the input is greater than largest uint248).\n Counterpart to Solidity's `uint248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":14382,"implemented":true,"kind":"function","modifiers":[],"name":"toUint248","nameLocation":"1638:9:71","nodeType":"FunctionDefinition","parameters":{"id":14358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14357,"mutability":"mutable","name":"value","nameLocation":"1656:5:71","nodeType":"VariableDeclaration","scope":14382,"src":"1648:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14356,"name":"uint256","nodeType":"ElementaryTypeName","src":"1648:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1647:15:71"},"returnParameters":{"id":14361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14360,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14382,"src":"1686:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"},"typeName":{"id":14359,"name":"uint248","nodeType":"ElementaryTypeName","src":"1686:7:71","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"visibility":"internal"}],"src":"1685:9:71"},"scope":16092,"src":"1629:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14409,"nodeType":"Block","src":"2204:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14390,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14385,"src":"2218:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14393,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2231:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":14392,"name":"uint240","nodeType":"ElementaryTypeName","src":"2231:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"}],"id":14391,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2226:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2226:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint240","typeString":"type(uint240)"}},"id":14395,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2240:3:71","memberName":"max","nodeType":"MemberAccess","src":"2226:17:71","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"src":"2218:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14403,"nodeType":"IfStatement","src":"2214:105:71","trueBody":{"id":14402,"nodeType":"Block","src":"2245:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":14398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2297:3:71","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":14399,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14385,"src":"2302:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14397,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"2266:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2266:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14401,"nodeType":"RevertStatement","src":"2259:49:71"}]}},{"expression":{"arguments":[{"id":14406,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14385,"src":"2343:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14405,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2335:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":14404,"name":"uint240","nodeType":"ElementaryTypeName","src":"2335:7:71","typeDescriptions":{}}},"id":14407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2335:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"functionReturnParameters":14389,"id":14408,"nodeType":"Return","src":"2328:21:71"}]},"documentation":{"id":14383,"nodeType":"StructuredDocumentation","src":"1853:280:71","text":" @dev Returns the downcasted uint240 from uint256, reverting on\n overflow (when the input is greater than largest uint240).\n Counterpart to Solidity's `uint240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":14410,"implemented":true,"kind":"function","modifiers":[],"name":"toUint240","nameLocation":"2147:9:71","nodeType":"FunctionDefinition","parameters":{"id":14386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14385,"mutability":"mutable","name":"value","nameLocation":"2165:5:71","nodeType":"VariableDeclaration","scope":14410,"src":"2157:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14384,"name":"uint256","nodeType":"ElementaryTypeName","src":"2157:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2156:15:71"},"returnParameters":{"id":14389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14388,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14410,"src":"2195:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"},"typeName":{"id":14387,"name":"uint240","nodeType":"ElementaryTypeName","src":"2195:7:71","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"visibility":"internal"}],"src":"2194:9:71"},"scope":16092,"src":"2138:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14437,"nodeType":"Block","src":"2713:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14418,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14413,"src":"2727:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14421,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2740:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":14420,"name":"uint232","nodeType":"ElementaryTypeName","src":"2740:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"}],"id":14419,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2735:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14422,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2735:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint232","typeString":"type(uint232)"}},"id":14423,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2749:3:71","memberName":"max","nodeType":"MemberAccess","src":"2735:17:71","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"src":"2727:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14431,"nodeType":"IfStatement","src":"2723:105:71","trueBody":{"id":14430,"nodeType":"Block","src":"2754:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":14426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2806:3:71","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":14427,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14413,"src":"2811:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14425,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"2775:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2775:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14429,"nodeType":"RevertStatement","src":"2768:49:71"}]}},{"expression":{"arguments":[{"id":14434,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14413,"src":"2852:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14433,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2844:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":14432,"name":"uint232","nodeType":"ElementaryTypeName","src":"2844:7:71","typeDescriptions":{}}},"id":14435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2844:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"functionReturnParameters":14417,"id":14436,"nodeType":"Return","src":"2837:21:71"}]},"documentation":{"id":14411,"nodeType":"StructuredDocumentation","src":"2362:280:71","text":" @dev Returns the downcasted uint232 from uint256, reverting on\n overflow (when the input is greater than largest uint232).\n Counterpart to Solidity's `uint232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":14438,"implemented":true,"kind":"function","modifiers":[],"name":"toUint232","nameLocation":"2656:9:71","nodeType":"FunctionDefinition","parameters":{"id":14414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14413,"mutability":"mutable","name":"value","nameLocation":"2674:5:71","nodeType":"VariableDeclaration","scope":14438,"src":"2666:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14412,"name":"uint256","nodeType":"ElementaryTypeName","src":"2666:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2665:15:71"},"returnParameters":{"id":14417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14416,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14438,"src":"2704:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"},"typeName":{"id":14415,"name":"uint232","nodeType":"ElementaryTypeName","src":"2704:7:71","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"visibility":"internal"}],"src":"2703:9:71"},"scope":16092,"src":"2647:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14465,"nodeType":"Block","src":"3222:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14446,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14441,"src":"3236:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14449,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3249:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":14448,"name":"uint224","nodeType":"ElementaryTypeName","src":"3249:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"}],"id":14447,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3244:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3244:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint224","typeString":"type(uint224)"}},"id":14451,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3258:3:71","memberName":"max","nodeType":"MemberAccess","src":"3244:17:71","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"3236:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14459,"nodeType":"IfStatement","src":"3232:105:71","trueBody":{"id":14458,"nodeType":"Block","src":"3263:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":14454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3315:3:71","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":14455,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14441,"src":"3320:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14453,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"3284:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3284:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14457,"nodeType":"RevertStatement","src":"3277:49:71"}]}},{"expression":{"arguments":[{"id":14462,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14441,"src":"3361:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14461,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3353:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":14460,"name":"uint224","nodeType":"ElementaryTypeName","src":"3353:7:71","typeDescriptions":{}}},"id":14463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3353:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"functionReturnParameters":14445,"id":14464,"nodeType":"Return","src":"3346:21:71"}]},"documentation":{"id":14439,"nodeType":"StructuredDocumentation","src":"2871:280:71","text":" @dev Returns the downcasted uint224 from uint256, reverting on\n overflow (when the input is greater than largest uint224).\n Counterpart to Solidity's `uint224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":14466,"implemented":true,"kind":"function","modifiers":[],"name":"toUint224","nameLocation":"3165:9:71","nodeType":"FunctionDefinition","parameters":{"id":14442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14441,"mutability":"mutable","name":"value","nameLocation":"3183:5:71","nodeType":"VariableDeclaration","scope":14466,"src":"3175:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14440,"name":"uint256","nodeType":"ElementaryTypeName","src":"3175:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3174:15:71"},"returnParameters":{"id":14445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14444,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14466,"src":"3213:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":14443,"name":"uint224","nodeType":"ElementaryTypeName","src":"3213:7:71","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"}],"src":"3212:9:71"},"scope":16092,"src":"3156:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14493,"nodeType":"Block","src":"3731:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14474,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14469,"src":"3745:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14477,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3758:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":14476,"name":"uint216","nodeType":"ElementaryTypeName","src":"3758:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"}],"id":14475,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3753:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3753:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint216","typeString":"type(uint216)"}},"id":14479,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3767:3:71","memberName":"max","nodeType":"MemberAccess","src":"3753:17:71","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"src":"3745:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14487,"nodeType":"IfStatement","src":"3741:105:71","trueBody":{"id":14486,"nodeType":"Block","src":"3772:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":14482,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3824:3:71","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":14483,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14469,"src":"3829:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14481,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"3793:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3793:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14485,"nodeType":"RevertStatement","src":"3786:49:71"}]}},{"expression":{"arguments":[{"id":14490,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14469,"src":"3870:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14489,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3862:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":14488,"name":"uint216","nodeType":"ElementaryTypeName","src":"3862:7:71","typeDescriptions":{}}},"id":14491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3862:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"functionReturnParameters":14473,"id":14492,"nodeType":"Return","src":"3855:21:71"}]},"documentation":{"id":14467,"nodeType":"StructuredDocumentation","src":"3380:280:71","text":" @dev Returns the downcasted uint216 from uint256, reverting on\n overflow (when the input is greater than largest uint216).\n Counterpart to Solidity's `uint216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":14494,"implemented":true,"kind":"function","modifiers":[],"name":"toUint216","nameLocation":"3674:9:71","nodeType":"FunctionDefinition","parameters":{"id":14470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14469,"mutability":"mutable","name":"value","nameLocation":"3692:5:71","nodeType":"VariableDeclaration","scope":14494,"src":"3684:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14468,"name":"uint256","nodeType":"ElementaryTypeName","src":"3684:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3683:15:71"},"returnParameters":{"id":14473,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14472,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14494,"src":"3722:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"},"typeName":{"id":14471,"name":"uint216","nodeType":"ElementaryTypeName","src":"3722:7:71","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"visibility":"internal"}],"src":"3721:9:71"},"scope":16092,"src":"3665:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14521,"nodeType":"Block","src":"4240:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14502,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14497,"src":"4254:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14505,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4267:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":14504,"name":"uint208","nodeType":"ElementaryTypeName","src":"4267:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"}],"id":14503,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4262:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4262:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint208","typeString":"type(uint208)"}},"id":14507,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4276:3:71","memberName":"max","nodeType":"MemberAccess","src":"4262:17:71","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"src":"4254:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14515,"nodeType":"IfStatement","src":"4250:105:71","trueBody":{"id":14514,"nodeType":"Block","src":"4281:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":14510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4333:3:71","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":14511,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14497,"src":"4338:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14509,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"4302:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4302:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14513,"nodeType":"RevertStatement","src":"4295:49:71"}]}},{"expression":{"arguments":[{"id":14518,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14497,"src":"4379:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14517,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4371:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":14516,"name":"uint208","nodeType":"ElementaryTypeName","src":"4371:7:71","typeDescriptions":{}}},"id":14519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4371:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"functionReturnParameters":14501,"id":14520,"nodeType":"Return","src":"4364:21:71"}]},"documentation":{"id":14495,"nodeType":"StructuredDocumentation","src":"3889:280:71","text":" @dev Returns the downcasted uint208 from uint256, reverting on\n overflow (when the input is greater than largest uint208).\n Counterpart to Solidity's `uint208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":14522,"implemented":true,"kind":"function","modifiers":[],"name":"toUint208","nameLocation":"4183:9:71","nodeType":"FunctionDefinition","parameters":{"id":14498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14497,"mutability":"mutable","name":"value","nameLocation":"4201:5:71","nodeType":"VariableDeclaration","scope":14522,"src":"4193:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14496,"name":"uint256","nodeType":"ElementaryTypeName","src":"4193:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4192:15:71"},"returnParameters":{"id":14501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14500,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14522,"src":"4231:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"},"typeName":{"id":14499,"name":"uint208","nodeType":"ElementaryTypeName","src":"4231:7:71","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"visibility":"internal"}],"src":"4230:9:71"},"scope":16092,"src":"4174:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14549,"nodeType":"Block","src":"4749:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14530,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14525,"src":"4763:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14533,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4776:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":14532,"name":"uint200","nodeType":"ElementaryTypeName","src":"4776:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"}],"id":14531,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4771:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14534,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4771:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint200","typeString":"type(uint200)"}},"id":14535,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4785:3:71","memberName":"max","nodeType":"MemberAccess","src":"4771:17:71","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"src":"4763:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14543,"nodeType":"IfStatement","src":"4759:105:71","trueBody":{"id":14542,"nodeType":"Block","src":"4790:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":14538,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4842:3:71","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":14539,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14525,"src":"4847:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14537,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"4811:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4811:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14541,"nodeType":"RevertStatement","src":"4804:49:71"}]}},{"expression":{"arguments":[{"id":14546,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14525,"src":"4888:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14545,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4880:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":14544,"name":"uint200","nodeType":"ElementaryTypeName","src":"4880:7:71","typeDescriptions":{}}},"id":14547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4880:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"functionReturnParameters":14529,"id":14548,"nodeType":"Return","src":"4873:21:71"}]},"documentation":{"id":14523,"nodeType":"StructuredDocumentation","src":"4398:280:71","text":" @dev Returns the downcasted uint200 from uint256, reverting on\n overflow (when the input is greater than largest uint200).\n Counterpart to Solidity's `uint200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":14550,"implemented":true,"kind":"function","modifiers":[],"name":"toUint200","nameLocation":"4692:9:71","nodeType":"FunctionDefinition","parameters":{"id":14526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14525,"mutability":"mutable","name":"value","nameLocation":"4710:5:71","nodeType":"VariableDeclaration","scope":14550,"src":"4702:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14524,"name":"uint256","nodeType":"ElementaryTypeName","src":"4702:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4701:15:71"},"returnParameters":{"id":14529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14528,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14550,"src":"4740:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"},"typeName":{"id":14527,"name":"uint200","nodeType":"ElementaryTypeName","src":"4740:7:71","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"visibility":"internal"}],"src":"4739:9:71"},"scope":16092,"src":"4683:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14577,"nodeType":"Block","src":"5258:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14558,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14553,"src":"5272:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14561,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5285:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":14560,"name":"uint192","nodeType":"ElementaryTypeName","src":"5285:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"}],"id":14559,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5280:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14562,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5280:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint192","typeString":"type(uint192)"}},"id":14563,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5294:3:71","memberName":"max","nodeType":"MemberAccess","src":"5280:17:71","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"src":"5272:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14571,"nodeType":"IfStatement","src":"5268:105:71","trueBody":{"id":14570,"nodeType":"Block","src":"5299:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":14566,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5351:3:71","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":14567,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14553,"src":"5356:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14565,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"5320:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5320:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14569,"nodeType":"RevertStatement","src":"5313:49:71"}]}},{"expression":{"arguments":[{"id":14574,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14553,"src":"5397:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14573,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5389:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":14572,"name":"uint192","nodeType":"ElementaryTypeName","src":"5389:7:71","typeDescriptions":{}}},"id":14575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5389:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"functionReturnParameters":14557,"id":14576,"nodeType":"Return","src":"5382:21:71"}]},"documentation":{"id":14551,"nodeType":"StructuredDocumentation","src":"4907:280:71","text":" @dev Returns the downcasted uint192 from uint256, reverting on\n overflow (when the input is greater than largest uint192).\n Counterpart to Solidity's `uint192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":14578,"implemented":true,"kind":"function","modifiers":[],"name":"toUint192","nameLocation":"5201:9:71","nodeType":"FunctionDefinition","parameters":{"id":14554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14553,"mutability":"mutable","name":"value","nameLocation":"5219:5:71","nodeType":"VariableDeclaration","scope":14578,"src":"5211:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14552,"name":"uint256","nodeType":"ElementaryTypeName","src":"5211:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5210:15:71"},"returnParameters":{"id":14557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14556,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14578,"src":"5249:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"},"typeName":{"id":14555,"name":"uint192","nodeType":"ElementaryTypeName","src":"5249:7:71","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"visibility":"internal"}],"src":"5248:9:71"},"scope":16092,"src":"5192:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14605,"nodeType":"Block","src":"5767:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14586,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14581,"src":"5781:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14589,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5794:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":14588,"name":"uint184","nodeType":"ElementaryTypeName","src":"5794:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"}],"id":14587,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5789:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14590,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5789:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint184","typeString":"type(uint184)"}},"id":14591,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5803:3:71","memberName":"max","nodeType":"MemberAccess","src":"5789:17:71","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"src":"5781:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14599,"nodeType":"IfStatement","src":"5777:105:71","trueBody":{"id":14598,"nodeType":"Block","src":"5808:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":14594,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5860:3:71","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":14595,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14581,"src":"5865:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14593,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"5829:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5829:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14597,"nodeType":"RevertStatement","src":"5822:49:71"}]}},{"expression":{"arguments":[{"id":14602,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14581,"src":"5906:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14601,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5898:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":14600,"name":"uint184","nodeType":"ElementaryTypeName","src":"5898:7:71","typeDescriptions":{}}},"id":14603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5898:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"functionReturnParameters":14585,"id":14604,"nodeType":"Return","src":"5891:21:71"}]},"documentation":{"id":14579,"nodeType":"StructuredDocumentation","src":"5416:280:71","text":" @dev Returns the downcasted uint184 from uint256, reverting on\n overflow (when the input is greater than largest uint184).\n Counterpart to Solidity's `uint184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":14606,"implemented":true,"kind":"function","modifiers":[],"name":"toUint184","nameLocation":"5710:9:71","nodeType":"FunctionDefinition","parameters":{"id":14582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14581,"mutability":"mutable","name":"value","nameLocation":"5728:5:71","nodeType":"VariableDeclaration","scope":14606,"src":"5720:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14580,"name":"uint256","nodeType":"ElementaryTypeName","src":"5720:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5719:15:71"},"returnParameters":{"id":14585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14584,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14606,"src":"5758:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"},"typeName":{"id":14583,"name":"uint184","nodeType":"ElementaryTypeName","src":"5758:7:71","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"visibility":"internal"}],"src":"5757:9:71"},"scope":16092,"src":"5701:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14633,"nodeType":"Block","src":"6276:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14614,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14609,"src":"6290:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14617,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6303:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":14616,"name":"uint176","nodeType":"ElementaryTypeName","src":"6303:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"}],"id":14615,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6298:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6298:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint176","typeString":"type(uint176)"}},"id":14619,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6312:3:71","memberName":"max","nodeType":"MemberAccess","src":"6298:17:71","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"src":"6290:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14627,"nodeType":"IfStatement","src":"6286:105:71","trueBody":{"id":14626,"nodeType":"Block","src":"6317:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":14622,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6369:3:71","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":14623,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14609,"src":"6374:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14621,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"6338:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6338:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14625,"nodeType":"RevertStatement","src":"6331:49:71"}]}},{"expression":{"arguments":[{"id":14630,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14609,"src":"6415:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6407:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":14628,"name":"uint176","nodeType":"ElementaryTypeName","src":"6407:7:71","typeDescriptions":{}}},"id":14631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6407:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"functionReturnParameters":14613,"id":14632,"nodeType":"Return","src":"6400:21:71"}]},"documentation":{"id":14607,"nodeType":"StructuredDocumentation","src":"5925:280:71","text":" @dev Returns the downcasted uint176 from uint256, reverting on\n overflow (when the input is greater than largest uint176).\n Counterpart to Solidity's `uint176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":14634,"implemented":true,"kind":"function","modifiers":[],"name":"toUint176","nameLocation":"6219:9:71","nodeType":"FunctionDefinition","parameters":{"id":14610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14609,"mutability":"mutable","name":"value","nameLocation":"6237:5:71","nodeType":"VariableDeclaration","scope":14634,"src":"6229:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14608,"name":"uint256","nodeType":"ElementaryTypeName","src":"6229:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6228:15:71"},"returnParameters":{"id":14613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14612,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14634,"src":"6267:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"},"typeName":{"id":14611,"name":"uint176","nodeType":"ElementaryTypeName","src":"6267:7:71","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"visibility":"internal"}],"src":"6266:9:71"},"scope":16092,"src":"6210:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14661,"nodeType":"Block","src":"6785:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14642,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14637,"src":"6799:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14645,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6812:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":14644,"name":"uint168","nodeType":"ElementaryTypeName","src":"6812:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"}],"id":14643,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6807:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14646,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6807:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint168","typeString":"type(uint168)"}},"id":14647,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6821:3:71","memberName":"max","nodeType":"MemberAccess","src":"6807:17:71","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"src":"6799:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14655,"nodeType":"IfStatement","src":"6795:105:71","trueBody":{"id":14654,"nodeType":"Block","src":"6826:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":14650,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6878:3:71","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":14651,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14637,"src":"6883:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14649,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"6847:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6847:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14653,"nodeType":"RevertStatement","src":"6840:49:71"}]}},{"expression":{"arguments":[{"id":14658,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14637,"src":"6924:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14657,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6916:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":14656,"name":"uint168","nodeType":"ElementaryTypeName","src":"6916:7:71","typeDescriptions":{}}},"id":14659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6916:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"functionReturnParameters":14641,"id":14660,"nodeType":"Return","src":"6909:21:71"}]},"documentation":{"id":14635,"nodeType":"StructuredDocumentation","src":"6434:280:71","text":" @dev Returns the downcasted uint168 from uint256, reverting on\n overflow (when the input is greater than largest uint168).\n Counterpart to Solidity's `uint168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":14662,"implemented":true,"kind":"function","modifiers":[],"name":"toUint168","nameLocation":"6728:9:71","nodeType":"FunctionDefinition","parameters":{"id":14638,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14637,"mutability":"mutable","name":"value","nameLocation":"6746:5:71","nodeType":"VariableDeclaration","scope":14662,"src":"6738:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14636,"name":"uint256","nodeType":"ElementaryTypeName","src":"6738:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6737:15:71"},"returnParameters":{"id":14641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14640,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14662,"src":"6776:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"},"typeName":{"id":14639,"name":"uint168","nodeType":"ElementaryTypeName","src":"6776:7:71","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"visibility":"internal"}],"src":"6775:9:71"},"scope":16092,"src":"6719:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14689,"nodeType":"Block","src":"7294:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14670,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14665,"src":"7308:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14673,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7321:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":14672,"name":"uint160","nodeType":"ElementaryTypeName","src":"7321:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"}],"id":14671,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7316:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14674,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7316:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint160","typeString":"type(uint160)"}},"id":14675,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7330:3:71","memberName":"max","nodeType":"MemberAccess","src":"7316:17:71","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"src":"7308:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14683,"nodeType":"IfStatement","src":"7304:105:71","trueBody":{"id":14682,"nodeType":"Block","src":"7335:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":14678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7387:3:71","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":14679,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14665,"src":"7392:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14677,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"7356:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7356:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14681,"nodeType":"RevertStatement","src":"7349:49:71"}]}},{"expression":{"arguments":[{"id":14686,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14665,"src":"7433:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14685,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7425:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":14684,"name":"uint160","nodeType":"ElementaryTypeName","src":"7425:7:71","typeDescriptions":{}}},"id":14687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7425:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"functionReturnParameters":14669,"id":14688,"nodeType":"Return","src":"7418:21:71"}]},"documentation":{"id":14663,"nodeType":"StructuredDocumentation","src":"6943:280:71","text":" @dev Returns the downcasted uint160 from uint256, reverting on\n overflow (when the input is greater than largest uint160).\n Counterpart to Solidity's `uint160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":14690,"implemented":true,"kind":"function","modifiers":[],"name":"toUint160","nameLocation":"7237:9:71","nodeType":"FunctionDefinition","parameters":{"id":14666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14665,"mutability":"mutable","name":"value","nameLocation":"7255:5:71","nodeType":"VariableDeclaration","scope":14690,"src":"7247:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14664,"name":"uint256","nodeType":"ElementaryTypeName","src":"7247:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7246:15:71"},"returnParameters":{"id":14669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14668,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14690,"src":"7285:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":14667,"name":"uint160","nodeType":"ElementaryTypeName","src":"7285:7:71","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"}],"src":"7284:9:71"},"scope":16092,"src":"7228:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14717,"nodeType":"Block","src":"7803:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14698,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14693,"src":"7817:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14701,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7830:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":14700,"name":"uint152","nodeType":"ElementaryTypeName","src":"7830:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"}],"id":14699,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7825:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14702,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7825:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint152","typeString":"type(uint152)"}},"id":14703,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7839:3:71","memberName":"max","nodeType":"MemberAccess","src":"7825:17:71","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"src":"7817:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14711,"nodeType":"IfStatement","src":"7813:105:71","trueBody":{"id":14710,"nodeType":"Block","src":"7844:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":14706,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7896:3:71","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":14707,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14693,"src":"7901:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14705,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"7865:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7865:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14709,"nodeType":"RevertStatement","src":"7858:49:71"}]}},{"expression":{"arguments":[{"id":14714,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14693,"src":"7942:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14713,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7934:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":14712,"name":"uint152","nodeType":"ElementaryTypeName","src":"7934:7:71","typeDescriptions":{}}},"id":14715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7934:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"functionReturnParameters":14697,"id":14716,"nodeType":"Return","src":"7927:21:71"}]},"documentation":{"id":14691,"nodeType":"StructuredDocumentation","src":"7452:280:71","text":" @dev Returns the downcasted uint152 from uint256, reverting on\n overflow (when the input is greater than largest uint152).\n Counterpart to Solidity's `uint152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":14718,"implemented":true,"kind":"function","modifiers":[],"name":"toUint152","nameLocation":"7746:9:71","nodeType":"FunctionDefinition","parameters":{"id":14694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14693,"mutability":"mutable","name":"value","nameLocation":"7764:5:71","nodeType":"VariableDeclaration","scope":14718,"src":"7756:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14692,"name":"uint256","nodeType":"ElementaryTypeName","src":"7756:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7755:15:71"},"returnParameters":{"id":14697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14696,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14718,"src":"7794:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"},"typeName":{"id":14695,"name":"uint152","nodeType":"ElementaryTypeName","src":"7794:7:71","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"visibility":"internal"}],"src":"7793:9:71"},"scope":16092,"src":"7737:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14745,"nodeType":"Block","src":"8312:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14726,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14721,"src":"8326:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14729,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8339:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":14728,"name":"uint144","nodeType":"ElementaryTypeName","src":"8339:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"}],"id":14727,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8334:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8334:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint144","typeString":"type(uint144)"}},"id":14731,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8348:3:71","memberName":"max","nodeType":"MemberAccess","src":"8334:17:71","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"src":"8326:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14739,"nodeType":"IfStatement","src":"8322:105:71","trueBody":{"id":14738,"nodeType":"Block","src":"8353:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":14734,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8405:3:71","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":14735,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14721,"src":"8410:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14733,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"8374:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8374:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14737,"nodeType":"RevertStatement","src":"8367:49:71"}]}},{"expression":{"arguments":[{"id":14742,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14721,"src":"8451:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14741,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8443:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":14740,"name":"uint144","nodeType":"ElementaryTypeName","src":"8443:7:71","typeDescriptions":{}}},"id":14743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8443:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"functionReturnParameters":14725,"id":14744,"nodeType":"Return","src":"8436:21:71"}]},"documentation":{"id":14719,"nodeType":"StructuredDocumentation","src":"7961:280:71","text":" @dev Returns the downcasted uint144 from uint256, reverting on\n overflow (when the input is greater than largest uint144).\n Counterpart to Solidity's `uint144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":14746,"implemented":true,"kind":"function","modifiers":[],"name":"toUint144","nameLocation":"8255:9:71","nodeType":"FunctionDefinition","parameters":{"id":14722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14721,"mutability":"mutable","name":"value","nameLocation":"8273:5:71","nodeType":"VariableDeclaration","scope":14746,"src":"8265:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14720,"name":"uint256","nodeType":"ElementaryTypeName","src":"8265:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8264:15:71"},"returnParameters":{"id":14725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14724,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14746,"src":"8303:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"},"typeName":{"id":14723,"name":"uint144","nodeType":"ElementaryTypeName","src":"8303:7:71","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"visibility":"internal"}],"src":"8302:9:71"},"scope":16092,"src":"8246:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14773,"nodeType":"Block","src":"8821:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14754,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14749,"src":"8835:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8848:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":14756,"name":"uint136","nodeType":"ElementaryTypeName","src":"8848:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"}],"id":14755,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8843:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8843:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint136","typeString":"type(uint136)"}},"id":14759,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8857:3:71","memberName":"max","nodeType":"MemberAccess","src":"8843:17:71","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"src":"8835:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14767,"nodeType":"IfStatement","src":"8831:105:71","trueBody":{"id":14766,"nodeType":"Block","src":"8862:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":14762,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8914:3:71","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":14763,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14749,"src":"8919:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14761,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"8883:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8883:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14765,"nodeType":"RevertStatement","src":"8876:49:71"}]}},{"expression":{"arguments":[{"id":14770,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14749,"src":"8960:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14769,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8952:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":14768,"name":"uint136","nodeType":"ElementaryTypeName","src":"8952:7:71","typeDescriptions":{}}},"id":14771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8952:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"functionReturnParameters":14753,"id":14772,"nodeType":"Return","src":"8945:21:71"}]},"documentation":{"id":14747,"nodeType":"StructuredDocumentation","src":"8470:280:71","text":" @dev Returns the downcasted uint136 from uint256, reverting on\n overflow (when the input is greater than largest uint136).\n Counterpart to Solidity's `uint136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":14774,"implemented":true,"kind":"function","modifiers":[],"name":"toUint136","nameLocation":"8764:9:71","nodeType":"FunctionDefinition","parameters":{"id":14750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14749,"mutability":"mutable","name":"value","nameLocation":"8782:5:71","nodeType":"VariableDeclaration","scope":14774,"src":"8774:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14748,"name":"uint256","nodeType":"ElementaryTypeName","src":"8774:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8773:15:71"},"returnParameters":{"id":14753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14752,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14774,"src":"8812:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"},"typeName":{"id":14751,"name":"uint136","nodeType":"ElementaryTypeName","src":"8812:7:71","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"visibility":"internal"}],"src":"8811:9:71"},"scope":16092,"src":"8755:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14801,"nodeType":"Block","src":"9330:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14782,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14777,"src":"9344:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14785,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9357:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":14784,"name":"uint128","nodeType":"ElementaryTypeName","src":"9357:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":14783,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9352:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14786,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9352:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":14787,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9366:3:71","memberName":"max","nodeType":"MemberAccess","src":"9352:17:71","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"9344:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14795,"nodeType":"IfStatement","src":"9340:105:71","trueBody":{"id":14794,"nodeType":"Block","src":"9371:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":14790,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9423:3:71","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":14791,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14777,"src":"9428:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14789,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"9392:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9392:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14793,"nodeType":"RevertStatement","src":"9385:49:71"}]}},{"expression":{"arguments":[{"id":14798,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14777,"src":"9469:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9461:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":14796,"name":"uint128","nodeType":"ElementaryTypeName","src":"9461:7:71","typeDescriptions":{}}},"id":14799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9461:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":14781,"id":14800,"nodeType":"Return","src":"9454:21:71"}]},"documentation":{"id":14775,"nodeType":"StructuredDocumentation","src":"8979:280:71","text":" @dev Returns the downcasted uint128 from uint256, reverting on\n overflow (when the input is greater than largest uint128).\n Counterpart to Solidity's `uint128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":14802,"implemented":true,"kind":"function","modifiers":[],"name":"toUint128","nameLocation":"9273:9:71","nodeType":"FunctionDefinition","parameters":{"id":14778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14777,"mutability":"mutable","name":"value","nameLocation":"9291:5:71","nodeType":"VariableDeclaration","scope":14802,"src":"9283:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14776,"name":"uint256","nodeType":"ElementaryTypeName","src":"9283:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9282:15:71"},"returnParameters":{"id":14781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14780,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14802,"src":"9321:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":14779,"name":"uint128","nodeType":"ElementaryTypeName","src":"9321:7:71","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9320:9:71"},"scope":16092,"src":"9264:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14829,"nodeType":"Block","src":"9839:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14810,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14805,"src":"9853:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14813,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9866:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":14812,"name":"uint120","nodeType":"ElementaryTypeName","src":"9866:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"}],"id":14811,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9861:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14814,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9861:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint120","typeString":"type(uint120)"}},"id":14815,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9875:3:71","memberName":"max","nodeType":"MemberAccess","src":"9861:17:71","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"src":"9853:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14823,"nodeType":"IfStatement","src":"9849:105:71","trueBody":{"id":14822,"nodeType":"Block","src":"9880:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":14818,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9932:3:71","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":14819,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14805,"src":"9937:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14817,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"9901:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9901:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14821,"nodeType":"RevertStatement","src":"9894:49:71"}]}},{"expression":{"arguments":[{"id":14826,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14805,"src":"9978:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14825,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9970:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":14824,"name":"uint120","nodeType":"ElementaryTypeName","src":"9970:7:71","typeDescriptions":{}}},"id":14827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9970:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"functionReturnParameters":14809,"id":14828,"nodeType":"Return","src":"9963:21:71"}]},"documentation":{"id":14803,"nodeType":"StructuredDocumentation","src":"9488:280:71","text":" @dev Returns the downcasted uint120 from uint256, reverting on\n overflow (when the input is greater than largest uint120).\n Counterpart to Solidity's `uint120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":14830,"implemented":true,"kind":"function","modifiers":[],"name":"toUint120","nameLocation":"9782:9:71","nodeType":"FunctionDefinition","parameters":{"id":14806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14805,"mutability":"mutable","name":"value","nameLocation":"9800:5:71","nodeType":"VariableDeclaration","scope":14830,"src":"9792:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14804,"name":"uint256","nodeType":"ElementaryTypeName","src":"9792:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9791:15:71"},"returnParameters":{"id":14809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14808,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14830,"src":"9830:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"},"typeName":{"id":14807,"name":"uint120","nodeType":"ElementaryTypeName","src":"9830:7:71","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"visibility":"internal"}],"src":"9829:9:71"},"scope":16092,"src":"9773:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14857,"nodeType":"Block","src":"10348:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14838,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14833,"src":"10362:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14841,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10375:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":14840,"name":"uint112","nodeType":"ElementaryTypeName","src":"10375:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"}],"id":14839,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10370:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10370:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint112","typeString":"type(uint112)"}},"id":14843,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10384:3:71","memberName":"max","nodeType":"MemberAccess","src":"10370:17:71","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"src":"10362:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14851,"nodeType":"IfStatement","src":"10358:105:71","trueBody":{"id":14850,"nodeType":"Block","src":"10389:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":14846,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10441:3:71","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":14847,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14833,"src":"10446:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14845,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"10410:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10410:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14849,"nodeType":"RevertStatement","src":"10403:49:71"}]}},{"expression":{"arguments":[{"id":14854,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14833,"src":"10487:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14853,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10479:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":14852,"name":"uint112","nodeType":"ElementaryTypeName","src":"10479:7:71","typeDescriptions":{}}},"id":14855,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10479:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"functionReturnParameters":14837,"id":14856,"nodeType":"Return","src":"10472:21:71"}]},"documentation":{"id":14831,"nodeType":"StructuredDocumentation","src":"9997:280:71","text":" @dev Returns the downcasted uint112 from uint256, reverting on\n overflow (when the input is greater than largest uint112).\n Counterpart to Solidity's `uint112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":14858,"implemented":true,"kind":"function","modifiers":[],"name":"toUint112","nameLocation":"10291:9:71","nodeType":"FunctionDefinition","parameters":{"id":14834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14833,"mutability":"mutable","name":"value","nameLocation":"10309:5:71","nodeType":"VariableDeclaration","scope":14858,"src":"10301:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14832,"name":"uint256","nodeType":"ElementaryTypeName","src":"10301:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10300:15:71"},"returnParameters":{"id":14837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14836,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14858,"src":"10339:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"},"typeName":{"id":14835,"name":"uint112","nodeType":"ElementaryTypeName","src":"10339:7:71","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"visibility":"internal"}],"src":"10338:9:71"},"scope":16092,"src":"10282:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14885,"nodeType":"Block","src":"10857:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14866,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14861,"src":"10871:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14869,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10884:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":14868,"name":"uint104","nodeType":"ElementaryTypeName","src":"10884:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"}],"id":14867,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10879:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10879:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint104","typeString":"type(uint104)"}},"id":14871,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10893:3:71","memberName":"max","nodeType":"MemberAccess","src":"10879:17:71","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"src":"10871:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14879,"nodeType":"IfStatement","src":"10867:105:71","trueBody":{"id":14878,"nodeType":"Block","src":"10898:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":14874,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10950:3:71","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":14875,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14861,"src":"10955:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14873,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"10919:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10919:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14877,"nodeType":"RevertStatement","src":"10912:49:71"}]}},{"expression":{"arguments":[{"id":14882,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14861,"src":"10996:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14881,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10988:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":14880,"name":"uint104","nodeType":"ElementaryTypeName","src":"10988:7:71","typeDescriptions":{}}},"id":14883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10988:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"functionReturnParameters":14865,"id":14884,"nodeType":"Return","src":"10981:21:71"}]},"documentation":{"id":14859,"nodeType":"StructuredDocumentation","src":"10506:280:71","text":" @dev Returns the downcasted uint104 from uint256, reverting on\n overflow (when the input is greater than largest uint104).\n Counterpart to Solidity's `uint104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":14886,"implemented":true,"kind":"function","modifiers":[],"name":"toUint104","nameLocation":"10800:9:71","nodeType":"FunctionDefinition","parameters":{"id":14862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14861,"mutability":"mutable","name":"value","nameLocation":"10818:5:71","nodeType":"VariableDeclaration","scope":14886,"src":"10810:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14860,"name":"uint256","nodeType":"ElementaryTypeName","src":"10810:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10809:15:71"},"returnParameters":{"id":14865,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14864,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14886,"src":"10848:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"},"typeName":{"id":14863,"name":"uint104","nodeType":"ElementaryTypeName","src":"10848:7:71","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"visibility":"internal"}],"src":"10847:9:71"},"scope":16092,"src":"10791:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14913,"nodeType":"Block","src":"11360:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14894,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14889,"src":"11374:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14897,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11387:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":14896,"name":"uint96","nodeType":"ElementaryTypeName","src":"11387:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"}],"id":14895,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11382:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14898,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11382:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint96","typeString":"type(uint96)"}},"id":14899,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11395:3:71","memberName":"max","nodeType":"MemberAccess","src":"11382:16:71","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"11374:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14907,"nodeType":"IfStatement","src":"11370:103:71","trueBody":{"id":14906,"nodeType":"Block","src":"11400:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":14902,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11452:2:71","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":14903,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14889,"src":"11456:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14901,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"11421:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11421:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14905,"nodeType":"RevertStatement","src":"11414:48:71"}]}},{"expression":{"arguments":[{"id":14910,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14889,"src":"11496:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14909,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11489:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":14908,"name":"uint96","nodeType":"ElementaryTypeName","src":"11489:6:71","typeDescriptions":{}}},"id":14911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11489:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"functionReturnParameters":14893,"id":14912,"nodeType":"Return","src":"11482:20:71"}]},"documentation":{"id":14887,"nodeType":"StructuredDocumentation","src":"11015:276:71","text":" @dev Returns the downcasted uint96 from uint256, reverting on\n overflow (when the input is greater than largest uint96).\n Counterpart to Solidity's `uint96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":14914,"implemented":true,"kind":"function","modifiers":[],"name":"toUint96","nameLocation":"11305:8:71","nodeType":"FunctionDefinition","parameters":{"id":14890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14889,"mutability":"mutable","name":"value","nameLocation":"11322:5:71","nodeType":"VariableDeclaration","scope":14914,"src":"11314:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14888,"name":"uint256","nodeType":"ElementaryTypeName","src":"11314:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11313:15:71"},"returnParameters":{"id":14893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14892,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14914,"src":"11352:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":14891,"name":"uint96","nodeType":"ElementaryTypeName","src":"11352:6:71","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"11351:8:71"},"scope":16092,"src":"11296:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14941,"nodeType":"Block","src":"11860:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14922,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14917,"src":"11874:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11887:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":14924,"name":"uint88","nodeType":"ElementaryTypeName","src":"11887:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"}],"id":14923,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11882:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14926,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11882:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint88","typeString":"type(uint88)"}},"id":14927,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11895:3:71","memberName":"max","nodeType":"MemberAccess","src":"11882:16:71","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"src":"11874:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14935,"nodeType":"IfStatement","src":"11870:103:71","trueBody":{"id":14934,"nodeType":"Block","src":"11900:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":14930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11952:2:71","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":14931,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14917,"src":"11956:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14929,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"11921:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11921:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14933,"nodeType":"RevertStatement","src":"11914:48:71"}]}},{"expression":{"arguments":[{"id":14938,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14917,"src":"11996:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14937,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11989:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":14936,"name":"uint88","nodeType":"ElementaryTypeName","src":"11989:6:71","typeDescriptions":{}}},"id":14939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11989:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"functionReturnParameters":14921,"id":14940,"nodeType":"Return","src":"11982:20:71"}]},"documentation":{"id":14915,"nodeType":"StructuredDocumentation","src":"11515:276:71","text":" @dev Returns the downcasted uint88 from uint256, reverting on\n overflow (when the input is greater than largest uint88).\n Counterpart to Solidity's `uint88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":14942,"implemented":true,"kind":"function","modifiers":[],"name":"toUint88","nameLocation":"11805:8:71","nodeType":"FunctionDefinition","parameters":{"id":14918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14917,"mutability":"mutable","name":"value","nameLocation":"11822:5:71","nodeType":"VariableDeclaration","scope":14942,"src":"11814:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14916,"name":"uint256","nodeType":"ElementaryTypeName","src":"11814:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11813:15:71"},"returnParameters":{"id":14921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14920,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14942,"src":"11852:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"},"typeName":{"id":14919,"name":"uint88","nodeType":"ElementaryTypeName","src":"11852:6:71","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"visibility":"internal"}],"src":"11851:8:71"},"scope":16092,"src":"11796:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14969,"nodeType":"Block","src":"12360:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14950,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14945,"src":"12374:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14953,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12387:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":14952,"name":"uint80","nodeType":"ElementaryTypeName","src":"12387:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"}],"id":14951,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12382:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12382:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint80","typeString":"type(uint80)"}},"id":14955,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12395:3:71","memberName":"max","nodeType":"MemberAccess","src":"12382:16:71","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"src":"12374:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14963,"nodeType":"IfStatement","src":"12370:103:71","trueBody":{"id":14962,"nodeType":"Block","src":"12400:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":14958,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12452:2:71","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":14959,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14945,"src":"12456:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14957,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"12421:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12421:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14961,"nodeType":"RevertStatement","src":"12414:48:71"}]}},{"expression":{"arguments":[{"id":14966,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14945,"src":"12496:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14965,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12489:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":14964,"name":"uint80","nodeType":"ElementaryTypeName","src":"12489:6:71","typeDescriptions":{}}},"id":14967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12489:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"functionReturnParameters":14949,"id":14968,"nodeType":"Return","src":"12482:20:71"}]},"documentation":{"id":14943,"nodeType":"StructuredDocumentation","src":"12015:276:71","text":" @dev Returns the downcasted uint80 from uint256, reverting on\n overflow (when the input is greater than largest uint80).\n Counterpart to Solidity's `uint80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":14970,"implemented":true,"kind":"function","modifiers":[],"name":"toUint80","nameLocation":"12305:8:71","nodeType":"FunctionDefinition","parameters":{"id":14946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14945,"mutability":"mutable","name":"value","nameLocation":"12322:5:71","nodeType":"VariableDeclaration","scope":14970,"src":"12314:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14944,"name":"uint256","nodeType":"ElementaryTypeName","src":"12314:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12313:15:71"},"returnParameters":{"id":14949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14948,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14970,"src":"12352:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":14947,"name":"uint80","nodeType":"ElementaryTypeName","src":"12352:6:71","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"12351:8:71"},"scope":16092,"src":"12296:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14997,"nodeType":"Block","src":"12860:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14978,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14973,"src":"12874:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14981,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12887:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":14980,"name":"uint72","nodeType":"ElementaryTypeName","src":"12887:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"}],"id":14979,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12882:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14982,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12882:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint72","typeString":"type(uint72)"}},"id":14983,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12895:3:71","memberName":"max","nodeType":"MemberAccess","src":"12882:16:71","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"src":"12874:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14991,"nodeType":"IfStatement","src":"12870:103:71","trueBody":{"id":14990,"nodeType":"Block","src":"12900:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":14986,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12952:2:71","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":14987,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14973,"src":"12956:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14985,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"12921:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12921:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14989,"nodeType":"RevertStatement","src":"12914:48:71"}]}},{"expression":{"arguments":[{"id":14994,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14973,"src":"12996:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14993,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12989:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":14992,"name":"uint72","nodeType":"ElementaryTypeName","src":"12989:6:71","typeDescriptions":{}}},"id":14995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12989:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"functionReturnParameters":14977,"id":14996,"nodeType":"Return","src":"12982:20:71"}]},"documentation":{"id":14971,"nodeType":"StructuredDocumentation","src":"12515:276:71","text":" @dev Returns the downcasted uint72 from uint256, reverting on\n overflow (when the input is greater than largest uint72).\n Counterpart to Solidity's `uint72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":14998,"implemented":true,"kind":"function","modifiers":[],"name":"toUint72","nameLocation":"12805:8:71","nodeType":"FunctionDefinition","parameters":{"id":14974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14973,"mutability":"mutable","name":"value","nameLocation":"12822:5:71","nodeType":"VariableDeclaration","scope":14998,"src":"12814:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14972,"name":"uint256","nodeType":"ElementaryTypeName","src":"12814:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12813:15:71"},"returnParameters":{"id":14977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14976,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14998,"src":"12852:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"},"typeName":{"id":14975,"name":"uint72","nodeType":"ElementaryTypeName","src":"12852:6:71","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"visibility":"internal"}],"src":"12851:8:71"},"scope":16092,"src":"12796:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15025,"nodeType":"Block","src":"13360:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15006,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15001,"src":"13374:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15009,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13387:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":15008,"name":"uint64","nodeType":"ElementaryTypeName","src":"13387:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"}],"id":15007,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13382:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15010,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13382:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint64","typeString":"type(uint64)"}},"id":15011,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13395:3:71","memberName":"max","nodeType":"MemberAccess","src":"13382:16:71","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"13374:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15019,"nodeType":"IfStatement","src":"13370:103:71","trueBody":{"id":15018,"nodeType":"Block","src":"13400:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":15014,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13452:2:71","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":15015,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15001,"src":"13456:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15013,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"13421:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13421:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15017,"nodeType":"RevertStatement","src":"13414:48:71"}]}},{"expression":{"arguments":[{"id":15022,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15001,"src":"13496:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15021,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13489:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":15020,"name":"uint64","nodeType":"ElementaryTypeName","src":"13489:6:71","typeDescriptions":{}}},"id":15023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13489:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":15005,"id":15024,"nodeType":"Return","src":"13482:20:71"}]},"documentation":{"id":14999,"nodeType":"StructuredDocumentation","src":"13015:276:71","text":" @dev Returns the downcasted uint64 from uint256, reverting on\n overflow (when the input is greater than largest uint64).\n Counterpart to Solidity's `uint64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":15026,"implemented":true,"kind":"function","modifiers":[],"name":"toUint64","nameLocation":"13305:8:71","nodeType":"FunctionDefinition","parameters":{"id":15002,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15001,"mutability":"mutable","name":"value","nameLocation":"13322:5:71","nodeType":"VariableDeclaration","scope":15026,"src":"13314:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15000,"name":"uint256","nodeType":"ElementaryTypeName","src":"13314:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13313:15:71"},"returnParameters":{"id":15005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15004,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15026,"src":"13352:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":15003,"name":"uint64","nodeType":"ElementaryTypeName","src":"13352:6:71","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"13351:8:71"},"scope":16092,"src":"13296:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15053,"nodeType":"Block","src":"13860:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15034,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15029,"src":"13874:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15037,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13887:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":15036,"name":"uint56","nodeType":"ElementaryTypeName","src":"13887:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"}],"id":15035,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13882:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13882:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint56","typeString":"type(uint56)"}},"id":15039,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13895:3:71","memberName":"max","nodeType":"MemberAccess","src":"13882:16:71","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"src":"13874:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15047,"nodeType":"IfStatement","src":"13870:103:71","trueBody":{"id":15046,"nodeType":"Block","src":"13900:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":15042,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13952:2:71","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":15043,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15029,"src":"13956:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15041,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"13921:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13921:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15045,"nodeType":"RevertStatement","src":"13914:48:71"}]}},{"expression":{"arguments":[{"id":15050,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15029,"src":"13996:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15049,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13989:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":15048,"name":"uint56","nodeType":"ElementaryTypeName","src":"13989:6:71","typeDescriptions":{}}},"id":15051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13989:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"functionReturnParameters":15033,"id":15052,"nodeType":"Return","src":"13982:20:71"}]},"documentation":{"id":15027,"nodeType":"StructuredDocumentation","src":"13515:276:71","text":" @dev Returns the downcasted uint56 from uint256, reverting on\n overflow (when the input is greater than largest uint56).\n Counterpart to Solidity's `uint56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":15054,"implemented":true,"kind":"function","modifiers":[],"name":"toUint56","nameLocation":"13805:8:71","nodeType":"FunctionDefinition","parameters":{"id":15030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15029,"mutability":"mutable","name":"value","nameLocation":"13822:5:71","nodeType":"VariableDeclaration","scope":15054,"src":"13814:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15028,"name":"uint256","nodeType":"ElementaryTypeName","src":"13814:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13813:15:71"},"returnParameters":{"id":15033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15032,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15054,"src":"13852:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"},"typeName":{"id":15031,"name":"uint56","nodeType":"ElementaryTypeName","src":"13852:6:71","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"visibility":"internal"}],"src":"13851:8:71"},"scope":16092,"src":"13796:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15081,"nodeType":"Block","src":"14360:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15062,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15057,"src":"14374:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15065,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14387:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":15064,"name":"uint48","nodeType":"ElementaryTypeName","src":"14387:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"}],"id":15063,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14382:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15066,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14382:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint48","typeString":"type(uint48)"}},"id":15067,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14395:3:71","memberName":"max","nodeType":"MemberAccess","src":"14382:16:71","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"14374:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15075,"nodeType":"IfStatement","src":"14370:103:71","trueBody":{"id":15074,"nodeType":"Block","src":"14400:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":15070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14452:2:71","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":15071,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15057,"src":"14456:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15069,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"14421:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14421:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15073,"nodeType":"RevertStatement","src":"14414:48:71"}]}},{"expression":{"arguments":[{"id":15078,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15057,"src":"14496:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15077,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14489:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":15076,"name":"uint48","nodeType":"ElementaryTypeName","src":"14489:6:71","typeDescriptions":{}}},"id":15079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14489:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":15061,"id":15080,"nodeType":"Return","src":"14482:20:71"}]},"documentation":{"id":15055,"nodeType":"StructuredDocumentation","src":"14015:276:71","text":" @dev Returns the downcasted uint48 from uint256, reverting on\n overflow (when the input is greater than largest uint48).\n Counterpart to Solidity's `uint48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":15082,"implemented":true,"kind":"function","modifiers":[],"name":"toUint48","nameLocation":"14305:8:71","nodeType":"FunctionDefinition","parameters":{"id":15058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15057,"mutability":"mutable","name":"value","nameLocation":"14322:5:71","nodeType":"VariableDeclaration","scope":15082,"src":"14314:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15056,"name":"uint256","nodeType":"ElementaryTypeName","src":"14314:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14313:15:71"},"returnParameters":{"id":15061,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15060,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15082,"src":"14352:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":15059,"name":"uint48","nodeType":"ElementaryTypeName","src":"14352:6:71","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"14351:8:71"},"scope":16092,"src":"14296:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15109,"nodeType":"Block","src":"14860:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15090,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15085,"src":"14874:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15093,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14887:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":15092,"name":"uint40","nodeType":"ElementaryTypeName","src":"14887:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"}],"id":15091,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14882:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14882:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint40","typeString":"type(uint40)"}},"id":15095,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14895:3:71","memberName":"max","nodeType":"MemberAccess","src":"14882:16:71","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"14874:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15103,"nodeType":"IfStatement","src":"14870:103:71","trueBody":{"id":15102,"nodeType":"Block","src":"14900:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":15098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14952:2:71","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":15099,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15085,"src":"14956:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15097,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"14921:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14921:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15101,"nodeType":"RevertStatement","src":"14914:48:71"}]}},{"expression":{"arguments":[{"id":15106,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15085,"src":"14996:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15105,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14989:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":15104,"name":"uint40","nodeType":"ElementaryTypeName","src":"14989:6:71","typeDescriptions":{}}},"id":15107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14989:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":15089,"id":15108,"nodeType":"Return","src":"14982:20:71"}]},"documentation":{"id":15083,"nodeType":"StructuredDocumentation","src":"14515:276:71","text":" @dev Returns the downcasted uint40 from uint256, reverting on\n overflow (when the input is greater than largest uint40).\n Counterpart to Solidity's `uint40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":15110,"implemented":true,"kind":"function","modifiers":[],"name":"toUint40","nameLocation":"14805:8:71","nodeType":"FunctionDefinition","parameters":{"id":15086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15085,"mutability":"mutable","name":"value","nameLocation":"14822:5:71","nodeType":"VariableDeclaration","scope":15110,"src":"14814:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15084,"name":"uint256","nodeType":"ElementaryTypeName","src":"14814:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14813:15:71"},"returnParameters":{"id":15089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15088,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15110,"src":"14852:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":15087,"name":"uint40","nodeType":"ElementaryTypeName","src":"14852:6:71","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"14851:8:71"},"scope":16092,"src":"14796:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15137,"nodeType":"Block","src":"15360:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15118,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15113,"src":"15374:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15121,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15387:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":15120,"name":"uint32","nodeType":"ElementaryTypeName","src":"15387:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"}],"id":15119,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15382:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15382:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint32","typeString":"type(uint32)"}},"id":15123,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15395:3:71","memberName":"max","nodeType":"MemberAccess","src":"15382:16:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"15374:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15131,"nodeType":"IfStatement","src":"15370:103:71","trueBody":{"id":15130,"nodeType":"Block","src":"15400:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":15126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15452:2:71","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":15127,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15113,"src":"15456:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15125,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"15421:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15421:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15129,"nodeType":"RevertStatement","src":"15414:48:71"}]}},{"expression":{"arguments":[{"id":15134,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15113,"src":"15496:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15133,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15489:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":15132,"name":"uint32","nodeType":"ElementaryTypeName","src":"15489:6:71","typeDescriptions":{}}},"id":15135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15489:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":15117,"id":15136,"nodeType":"Return","src":"15482:20:71"}]},"documentation":{"id":15111,"nodeType":"StructuredDocumentation","src":"15015:276:71","text":" @dev Returns the downcasted uint32 from uint256, reverting on\n overflow (when the input is greater than largest uint32).\n Counterpart to Solidity's `uint32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":15138,"implemented":true,"kind":"function","modifiers":[],"name":"toUint32","nameLocation":"15305:8:71","nodeType":"FunctionDefinition","parameters":{"id":15114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15113,"mutability":"mutable","name":"value","nameLocation":"15322:5:71","nodeType":"VariableDeclaration","scope":15138,"src":"15314:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15112,"name":"uint256","nodeType":"ElementaryTypeName","src":"15314:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15313:15:71"},"returnParameters":{"id":15117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15116,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15138,"src":"15352:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":15115,"name":"uint32","nodeType":"ElementaryTypeName","src":"15352:6:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"15351:8:71"},"scope":16092,"src":"15296:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15165,"nodeType":"Block","src":"15860:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15146,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15141,"src":"15874:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15149,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15887:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":15148,"name":"uint24","nodeType":"ElementaryTypeName","src":"15887:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"}],"id":15147,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15882:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15150,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15882:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint24","typeString":"type(uint24)"}},"id":15151,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15895:3:71","memberName":"max","nodeType":"MemberAccess","src":"15882:16:71","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"src":"15874:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15159,"nodeType":"IfStatement","src":"15870:103:71","trueBody":{"id":15158,"nodeType":"Block","src":"15900:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":15154,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15952:2:71","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":15155,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15141,"src":"15956:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15153,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"15921:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15921:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15157,"nodeType":"RevertStatement","src":"15914:48:71"}]}},{"expression":{"arguments":[{"id":15162,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15141,"src":"15996:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15161,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15989:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":15160,"name":"uint24","nodeType":"ElementaryTypeName","src":"15989:6:71","typeDescriptions":{}}},"id":15163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15989:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"functionReturnParameters":15145,"id":15164,"nodeType":"Return","src":"15982:20:71"}]},"documentation":{"id":15139,"nodeType":"StructuredDocumentation","src":"15515:276:71","text":" @dev Returns the downcasted uint24 from uint256, reverting on\n overflow (when the input is greater than largest uint24).\n Counterpart to Solidity's `uint24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":15166,"implemented":true,"kind":"function","modifiers":[],"name":"toUint24","nameLocation":"15805:8:71","nodeType":"FunctionDefinition","parameters":{"id":15142,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15141,"mutability":"mutable","name":"value","nameLocation":"15822:5:71","nodeType":"VariableDeclaration","scope":15166,"src":"15814:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15140,"name":"uint256","nodeType":"ElementaryTypeName","src":"15814:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15813:15:71"},"returnParameters":{"id":15145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15144,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15166,"src":"15852:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"},"typeName":{"id":15143,"name":"uint24","nodeType":"ElementaryTypeName","src":"15852:6:71","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"visibility":"internal"}],"src":"15851:8:71"},"scope":16092,"src":"15796:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15193,"nodeType":"Block","src":"16360:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15174,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15169,"src":"16374:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15177,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16387:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":15176,"name":"uint16","nodeType":"ElementaryTypeName","src":"16387:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"}],"id":15175,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16382:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16382:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint16","typeString":"type(uint16)"}},"id":15179,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16395:3:71","memberName":"max","nodeType":"MemberAccess","src":"16382:16:71","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"16374:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15187,"nodeType":"IfStatement","src":"16370:103:71","trueBody":{"id":15186,"nodeType":"Block","src":"16400:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":15182,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16452:2:71","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":15183,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15169,"src":"16456:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15181,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"16421:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16421:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15185,"nodeType":"RevertStatement","src":"16414:48:71"}]}},{"expression":{"arguments":[{"id":15190,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15169,"src":"16496:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15189,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16489:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":15188,"name":"uint16","nodeType":"ElementaryTypeName","src":"16489:6:71","typeDescriptions":{}}},"id":15191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16489:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":15173,"id":15192,"nodeType":"Return","src":"16482:20:71"}]},"documentation":{"id":15167,"nodeType":"StructuredDocumentation","src":"16015:276:71","text":" @dev Returns the downcasted uint16 from uint256, reverting on\n overflow (when the input is greater than largest uint16).\n Counterpart to Solidity's `uint16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":15194,"implemented":true,"kind":"function","modifiers":[],"name":"toUint16","nameLocation":"16305:8:71","nodeType":"FunctionDefinition","parameters":{"id":15170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15169,"mutability":"mutable","name":"value","nameLocation":"16322:5:71","nodeType":"VariableDeclaration","scope":15194,"src":"16314:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15168,"name":"uint256","nodeType":"ElementaryTypeName","src":"16314:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16313:15:71"},"returnParameters":{"id":15173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15172,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15194,"src":"16352:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":15171,"name":"uint16","nodeType":"ElementaryTypeName","src":"16352:6:71","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"16351:8:71"},"scope":16092,"src":"16296:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15221,"nodeType":"Block","src":"16854:146:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15202,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15197,"src":"16868:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15205,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16881:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":15204,"name":"uint8","nodeType":"ElementaryTypeName","src":"16881:5:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":15203,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16876:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15206,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16876:11:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":15207,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16888:3:71","memberName":"max","nodeType":"MemberAccess","src":"16876:15:71","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"16868:23:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15215,"nodeType":"IfStatement","src":"16864:101:71","trueBody":{"id":15214,"nodeType":"Block","src":"16893:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":15210,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16945:1:71","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":15211,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15197,"src":"16948:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15209,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"16914:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16914:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15213,"nodeType":"RevertStatement","src":"16907:47:71"}]}},{"expression":{"arguments":[{"id":15218,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15197,"src":"16987:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15217,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16981:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":15216,"name":"uint8","nodeType":"ElementaryTypeName","src":"16981:5:71","typeDescriptions":{}}},"id":15219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16981:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":15201,"id":15220,"nodeType":"Return","src":"16974:19:71"}]},"documentation":{"id":15195,"nodeType":"StructuredDocumentation","src":"16515:272:71","text":" @dev Returns the downcasted uint8 from uint256, reverting on\n overflow (when the input is greater than largest uint8).\n Counterpart to Solidity's `uint8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":15222,"implemented":true,"kind":"function","modifiers":[],"name":"toUint8","nameLocation":"16801:7:71","nodeType":"FunctionDefinition","parameters":{"id":15198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15197,"mutability":"mutable","name":"value","nameLocation":"16817:5:71","nodeType":"VariableDeclaration","scope":15222,"src":"16809:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15196,"name":"uint256","nodeType":"ElementaryTypeName","src":"16809:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16808:15:71"},"returnParameters":{"id":15201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15200,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15222,"src":"16847:5:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":15199,"name":"uint8","nodeType":"ElementaryTypeName","src":"16847:5:71","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"16846:7:71"},"scope":16092,"src":"16792:208:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15244,"nodeType":"Block","src":"17236:128:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15230,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15225,"src":"17250:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":15231,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17258:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17250:9:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15238,"nodeType":"IfStatement","src":"17246:81:71","trueBody":{"id":15237,"nodeType":"Block","src":"17261:66:71","statements":[{"errorCall":{"arguments":[{"id":15234,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15225,"src":"17310:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15233,"name":"SafeCastOverflowedIntToUint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14342,"src":"17282:27:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_int256_$returns$_t_error_$","typeString":"function (int256) pure returns (error)"}},"id":15235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17282:34:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15236,"nodeType":"RevertStatement","src":"17275:41:71"}]}},{"expression":{"arguments":[{"id":15241,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15225,"src":"17351:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15240,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17343:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":15239,"name":"uint256","nodeType":"ElementaryTypeName","src":"17343:7:71","typeDescriptions":{}}},"id":15242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17343:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15229,"id":15243,"nodeType":"Return","src":"17336:21:71"}]},"documentation":{"id":15223,"nodeType":"StructuredDocumentation","src":"17006:160:71","text":" @dev Converts a signed int256 into an unsigned uint256.\n Requirements:\n - input must be greater than or equal to 0."},"id":15245,"implemented":true,"kind":"function","modifiers":[],"name":"toUint256","nameLocation":"17180:9:71","nodeType":"FunctionDefinition","parameters":{"id":15226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15225,"mutability":"mutable","name":"value","nameLocation":"17197:5:71","nodeType":"VariableDeclaration","scope":15245,"src":"17190:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15224,"name":"int256","nodeType":"ElementaryTypeName","src":"17190:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17189:14:71"},"returnParameters":{"id":15229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15228,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15245,"src":"17227:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15227,"name":"uint256","nodeType":"ElementaryTypeName","src":"17227:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17226:9:71"},"scope":16092,"src":"17171:193:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15270,"nodeType":"Block","src":"17761:150:71","statements":[{"expression":{"id":15258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15253,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"17771:10:71","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15256,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15248,"src":"17791:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15255,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17784:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int248_$","typeString":"type(int248)"},"typeName":{"id":15254,"name":"int248","nodeType":"ElementaryTypeName","src":"17784:6:71","typeDescriptions":{}}},"id":15257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17784:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"src":"17771:26:71","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"id":15259,"nodeType":"ExpressionStatement","src":"17771:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15260,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"17811:10:71","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15261,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15248,"src":"17825:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17811:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15269,"nodeType":"IfStatement","src":"17807:98:71","trueBody":{"id":15268,"nodeType":"Block","src":"17832:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":15264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17883:3:71","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":15265,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15248,"src":"17888:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15263,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"17853:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17853:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15267,"nodeType":"RevertStatement","src":"17846:48:71"}]}}]},"documentation":{"id":15246,"nodeType":"StructuredDocumentation","src":"17370:312:71","text":" @dev Returns the downcasted int248 from int256, reverting on\n overflow (when the input is less than smallest int248 or\n greater than largest int248).\n Counterpart to Solidity's `int248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":15271,"implemented":true,"kind":"function","modifiers":[],"name":"toInt248","nameLocation":"17696:8:71","nodeType":"FunctionDefinition","parameters":{"id":15249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15248,"mutability":"mutable","name":"value","nameLocation":"17712:5:71","nodeType":"VariableDeclaration","scope":15271,"src":"17705:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15247,"name":"int256","nodeType":"ElementaryTypeName","src":"17705:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17704:14:71"},"returnParameters":{"id":15252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15251,"mutability":"mutable","name":"downcasted","nameLocation":"17749:10:71","nodeType":"VariableDeclaration","scope":15271,"src":"17742:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"},"typeName":{"id":15250,"name":"int248","nodeType":"ElementaryTypeName","src":"17742:6:71","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"visibility":"internal"}],"src":"17741:19:71"},"scope":16092,"src":"17687:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15296,"nodeType":"Block","src":"18308:150:71","statements":[{"expression":{"id":15284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15279,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15277,"src":"18318:10:71","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15282,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15274,"src":"18338:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15281,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18331:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int240_$","typeString":"type(int240)"},"typeName":{"id":15280,"name":"int240","nodeType":"ElementaryTypeName","src":"18331:6:71","typeDescriptions":{}}},"id":15283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18331:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"src":"18318:26:71","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"id":15285,"nodeType":"ExpressionStatement","src":"18318:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15286,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15277,"src":"18358:10:71","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15287,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15274,"src":"18372:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18358:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15295,"nodeType":"IfStatement","src":"18354:98:71","trueBody":{"id":15294,"nodeType":"Block","src":"18379:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":15290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18430:3:71","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":15291,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15274,"src":"18435:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15289,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"18400:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18400:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15293,"nodeType":"RevertStatement","src":"18393:48:71"}]}}]},"documentation":{"id":15272,"nodeType":"StructuredDocumentation","src":"17917:312:71","text":" @dev Returns the downcasted int240 from int256, reverting on\n overflow (when the input is less than smallest int240 or\n greater than largest int240).\n Counterpart to Solidity's `int240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":15297,"implemented":true,"kind":"function","modifiers":[],"name":"toInt240","nameLocation":"18243:8:71","nodeType":"FunctionDefinition","parameters":{"id":15275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15274,"mutability":"mutable","name":"value","nameLocation":"18259:5:71","nodeType":"VariableDeclaration","scope":15297,"src":"18252:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15273,"name":"int256","nodeType":"ElementaryTypeName","src":"18252:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18251:14:71"},"returnParameters":{"id":15278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15277,"mutability":"mutable","name":"downcasted","nameLocation":"18296:10:71","nodeType":"VariableDeclaration","scope":15297,"src":"18289:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"},"typeName":{"id":15276,"name":"int240","nodeType":"ElementaryTypeName","src":"18289:6:71","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"visibility":"internal"}],"src":"18288:19:71"},"scope":16092,"src":"18234:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15322,"nodeType":"Block","src":"18855:150:71","statements":[{"expression":{"id":15310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15305,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15303,"src":"18865:10:71","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15308,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15300,"src":"18885:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15307,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18878:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int232_$","typeString":"type(int232)"},"typeName":{"id":15306,"name":"int232","nodeType":"ElementaryTypeName","src":"18878:6:71","typeDescriptions":{}}},"id":15309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18878:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"src":"18865:26:71","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"id":15311,"nodeType":"ExpressionStatement","src":"18865:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15312,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15303,"src":"18905:10:71","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15313,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15300,"src":"18919:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18905:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15321,"nodeType":"IfStatement","src":"18901:98:71","trueBody":{"id":15320,"nodeType":"Block","src":"18926:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":15316,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18977:3:71","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":15317,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15300,"src":"18982:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15315,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"18947:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18947:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15319,"nodeType":"RevertStatement","src":"18940:48:71"}]}}]},"documentation":{"id":15298,"nodeType":"StructuredDocumentation","src":"18464:312:71","text":" @dev Returns the downcasted int232 from int256, reverting on\n overflow (when the input is less than smallest int232 or\n greater than largest int232).\n Counterpart to Solidity's `int232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":15323,"implemented":true,"kind":"function","modifiers":[],"name":"toInt232","nameLocation":"18790:8:71","nodeType":"FunctionDefinition","parameters":{"id":15301,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15300,"mutability":"mutable","name":"value","nameLocation":"18806:5:71","nodeType":"VariableDeclaration","scope":15323,"src":"18799:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15299,"name":"int256","nodeType":"ElementaryTypeName","src":"18799:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18798:14:71"},"returnParameters":{"id":15304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15303,"mutability":"mutable","name":"downcasted","nameLocation":"18843:10:71","nodeType":"VariableDeclaration","scope":15323,"src":"18836:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"},"typeName":{"id":15302,"name":"int232","nodeType":"ElementaryTypeName","src":"18836:6:71","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"visibility":"internal"}],"src":"18835:19:71"},"scope":16092,"src":"18781:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15348,"nodeType":"Block","src":"19402:150:71","statements":[{"expression":{"id":15336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15331,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15329,"src":"19412:10:71","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15334,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15326,"src":"19432:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15333,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19425:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int224_$","typeString":"type(int224)"},"typeName":{"id":15332,"name":"int224","nodeType":"ElementaryTypeName","src":"19425:6:71","typeDescriptions":{}}},"id":15335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19425:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"src":"19412:26:71","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"id":15337,"nodeType":"ExpressionStatement","src":"19412:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15338,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15329,"src":"19452:10:71","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15339,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15326,"src":"19466:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19452:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15347,"nodeType":"IfStatement","src":"19448:98:71","trueBody":{"id":15346,"nodeType":"Block","src":"19473:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":15342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19524:3:71","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":15343,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15326,"src":"19529:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15341,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"19494:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19494:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15345,"nodeType":"RevertStatement","src":"19487:48:71"}]}}]},"documentation":{"id":15324,"nodeType":"StructuredDocumentation","src":"19011:312:71","text":" @dev Returns the downcasted int224 from int256, reverting on\n overflow (when the input is less than smallest int224 or\n greater than largest int224).\n Counterpart to Solidity's `int224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":15349,"implemented":true,"kind":"function","modifiers":[],"name":"toInt224","nameLocation":"19337:8:71","nodeType":"FunctionDefinition","parameters":{"id":15327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15326,"mutability":"mutable","name":"value","nameLocation":"19353:5:71","nodeType":"VariableDeclaration","scope":15349,"src":"19346:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15325,"name":"int256","nodeType":"ElementaryTypeName","src":"19346:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19345:14:71"},"returnParameters":{"id":15330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15329,"mutability":"mutable","name":"downcasted","nameLocation":"19390:10:71","nodeType":"VariableDeclaration","scope":15349,"src":"19383:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"},"typeName":{"id":15328,"name":"int224","nodeType":"ElementaryTypeName","src":"19383:6:71","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"visibility":"internal"}],"src":"19382:19:71"},"scope":16092,"src":"19328:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15374,"nodeType":"Block","src":"19949:150:71","statements":[{"expression":{"id":15362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15357,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15355,"src":"19959:10:71","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15360,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15352,"src":"19979:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15359,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19972:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int216_$","typeString":"type(int216)"},"typeName":{"id":15358,"name":"int216","nodeType":"ElementaryTypeName","src":"19972:6:71","typeDescriptions":{}}},"id":15361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19972:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"src":"19959:26:71","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"id":15363,"nodeType":"ExpressionStatement","src":"19959:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15364,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15355,"src":"19999:10:71","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15365,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15352,"src":"20013:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19999:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15373,"nodeType":"IfStatement","src":"19995:98:71","trueBody":{"id":15372,"nodeType":"Block","src":"20020:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":15368,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20071:3:71","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":15369,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15352,"src":"20076:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15367,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"20041:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20041:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15371,"nodeType":"RevertStatement","src":"20034:48:71"}]}}]},"documentation":{"id":15350,"nodeType":"StructuredDocumentation","src":"19558:312:71","text":" @dev Returns the downcasted int216 from int256, reverting on\n overflow (when the input is less than smallest int216 or\n greater than largest int216).\n Counterpart to Solidity's `int216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":15375,"implemented":true,"kind":"function","modifiers":[],"name":"toInt216","nameLocation":"19884:8:71","nodeType":"FunctionDefinition","parameters":{"id":15353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15352,"mutability":"mutable","name":"value","nameLocation":"19900:5:71","nodeType":"VariableDeclaration","scope":15375,"src":"19893:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15351,"name":"int256","nodeType":"ElementaryTypeName","src":"19893:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19892:14:71"},"returnParameters":{"id":15356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15355,"mutability":"mutable","name":"downcasted","nameLocation":"19937:10:71","nodeType":"VariableDeclaration","scope":15375,"src":"19930:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"},"typeName":{"id":15354,"name":"int216","nodeType":"ElementaryTypeName","src":"19930:6:71","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"visibility":"internal"}],"src":"19929:19:71"},"scope":16092,"src":"19875:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15400,"nodeType":"Block","src":"20496:150:71","statements":[{"expression":{"id":15388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15383,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15381,"src":"20506:10:71","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15386,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15378,"src":"20526:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15385,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20519:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int208_$","typeString":"type(int208)"},"typeName":{"id":15384,"name":"int208","nodeType":"ElementaryTypeName","src":"20519:6:71","typeDescriptions":{}}},"id":15387,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20519:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"src":"20506:26:71","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"id":15389,"nodeType":"ExpressionStatement","src":"20506:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15390,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15381,"src":"20546:10:71","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15391,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15378,"src":"20560:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20546:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15399,"nodeType":"IfStatement","src":"20542:98:71","trueBody":{"id":15398,"nodeType":"Block","src":"20567:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":15394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20618:3:71","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":15395,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15378,"src":"20623:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15393,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"20588:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20588:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15397,"nodeType":"RevertStatement","src":"20581:48:71"}]}}]},"documentation":{"id":15376,"nodeType":"StructuredDocumentation","src":"20105:312:71","text":" @dev Returns the downcasted int208 from int256, reverting on\n overflow (when the input is less than smallest int208 or\n greater than largest int208).\n Counterpart to Solidity's `int208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":15401,"implemented":true,"kind":"function","modifiers":[],"name":"toInt208","nameLocation":"20431:8:71","nodeType":"FunctionDefinition","parameters":{"id":15379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15378,"mutability":"mutable","name":"value","nameLocation":"20447:5:71","nodeType":"VariableDeclaration","scope":15401,"src":"20440:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15377,"name":"int256","nodeType":"ElementaryTypeName","src":"20440:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20439:14:71"},"returnParameters":{"id":15382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15381,"mutability":"mutable","name":"downcasted","nameLocation":"20484:10:71","nodeType":"VariableDeclaration","scope":15401,"src":"20477:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"},"typeName":{"id":15380,"name":"int208","nodeType":"ElementaryTypeName","src":"20477:6:71","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"visibility":"internal"}],"src":"20476:19:71"},"scope":16092,"src":"20422:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15426,"nodeType":"Block","src":"21043:150:71","statements":[{"expression":{"id":15414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15409,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15407,"src":"21053:10:71","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15412,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15404,"src":"21073:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15411,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21066:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int200_$","typeString":"type(int200)"},"typeName":{"id":15410,"name":"int200","nodeType":"ElementaryTypeName","src":"21066:6:71","typeDescriptions":{}}},"id":15413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21066:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"src":"21053:26:71","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"id":15415,"nodeType":"ExpressionStatement","src":"21053:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15416,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15407,"src":"21093:10:71","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15417,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15404,"src":"21107:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21093:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15425,"nodeType":"IfStatement","src":"21089:98:71","trueBody":{"id":15424,"nodeType":"Block","src":"21114:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":15420,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21165:3:71","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":15421,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15404,"src":"21170:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15419,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"21135:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21135:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15423,"nodeType":"RevertStatement","src":"21128:48:71"}]}}]},"documentation":{"id":15402,"nodeType":"StructuredDocumentation","src":"20652:312:71","text":" @dev Returns the downcasted int200 from int256, reverting on\n overflow (when the input is less than smallest int200 or\n greater than largest int200).\n Counterpart to Solidity's `int200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":15427,"implemented":true,"kind":"function","modifiers":[],"name":"toInt200","nameLocation":"20978:8:71","nodeType":"FunctionDefinition","parameters":{"id":15405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15404,"mutability":"mutable","name":"value","nameLocation":"20994:5:71","nodeType":"VariableDeclaration","scope":15427,"src":"20987:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15403,"name":"int256","nodeType":"ElementaryTypeName","src":"20987:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20986:14:71"},"returnParameters":{"id":15408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15407,"mutability":"mutable","name":"downcasted","nameLocation":"21031:10:71","nodeType":"VariableDeclaration","scope":15427,"src":"21024:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"},"typeName":{"id":15406,"name":"int200","nodeType":"ElementaryTypeName","src":"21024:6:71","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"visibility":"internal"}],"src":"21023:19:71"},"scope":16092,"src":"20969:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15452,"nodeType":"Block","src":"21590:150:71","statements":[{"expression":{"id":15440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15435,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15433,"src":"21600:10:71","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15438,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15430,"src":"21620:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15437,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21613:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int192_$","typeString":"type(int192)"},"typeName":{"id":15436,"name":"int192","nodeType":"ElementaryTypeName","src":"21613:6:71","typeDescriptions":{}}},"id":15439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21613:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"src":"21600:26:71","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"id":15441,"nodeType":"ExpressionStatement","src":"21600:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15442,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15433,"src":"21640:10:71","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15443,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15430,"src":"21654:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21640:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15451,"nodeType":"IfStatement","src":"21636:98:71","trueBody":{"id":15450,"nodeType":"Block","src":"21661:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":15446,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21712:3:71","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":15447,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15430,"src":"21717:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15445,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"21682:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21682:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15449,"nodeType":"RevertStatement","src":"21675:48:71"}]}}]},"documentation":{"id":15428,"nodeType":"StructuredDocumentation","src":"21199:312:71","text":" @dev Returns the downcasted int192 from int256, reverting on\n overflow (when the input is less than smallest int192 or\n greater than largest int192).\n Counterpart to Solidity's `int192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":15453,"implemented":true,"kind":"function","modifiers":[],"name":"toInt192","nameLocation":"21525:8:71","nodeType":"FunctionDefinition","parameters":{"id":15431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15430,"mutability":"mutable","name":"value","nameLocation":"21541:5:71","nodeType":"VariableDeclaration","scope":15453,"src":"21534:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15429,"name":"int256","nodeType":"ElementaryTypeName","src":"21534:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"21533:14:71"},"returnParameters":{"id":15434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15433,"mutability":"mutable","name":"downcasted","nameLocation":"21578:10:71","nodeType":"VariableDeclaration","scope":15453,"src":"21571:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"},"typeName":{"id":15432,"name":"int192","nodeType":"ElementaryTypeName","src":"21571:6:71","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"visibility":"internal"}],"src":"21570:19:71"},"scope":16092,"src":"21516:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15478,"nodeType":"Block","src":"22137:150:71","statements":[{"expression":{"id":15466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15461,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15459,"src":"22147:10:71","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15464,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15456,"src":"22167:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15463,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22160:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int184_$","typeString":"type(int184)"},"typeName":{"id":15462,"name":"int184","nodeType":"ElementaryTypeName","src":"22160:6:71","typeDescriptions":{}}},"id":15465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22160:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"src":"22147:26:71","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"id":15467,"nodeType":"ExpressionStatement","src":"22147:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15468,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15459,"src":"22187:10:71","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15469,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15456,"src":"22201:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22187:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15477,"nodeType":"IfStatement","src":"22183:98:71","trueBody":{"id":15476,"nodeType":"Block","src":"22208:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":15472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22259:3:71","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":15473,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15456,"src":"22264:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15471,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"22229:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22229:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15475,"nodeType":"RevertStatement","src":"22222:48:71"}]}}]},"documentation":{"id":15454,"nodeType":"StructuredDocumentation","src":"21746:312:71","text":" @dev Returns the downcasted int184 from int256, reverting on\n overflow (when the input is less than smallest int184 or\n greater than largest int184).\n Counterpart to Solidity's `int184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":15479,"implemented":true,"kind":"function","modifiers":[],"name":"toInt184","nameLocation":"22072:8:71","nodeType":"FunctionDefinition","parameters":{"id":15457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15456,"mutability":"mutable","name":"value","nameLocation":"22088:5:71","nodeType":"VariableDeclaration","scope":15479,"src":"22081:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15455,"name":"int256","nodeType":"ElementaryTypeName","src":"22081:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22080:14:71"},"returnParameters":{"id":15460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15459,"mutability":"mutable","name":"downcasted","nameLocation":"22125:10:71","nodeType":"VariableDeclaration","scope":15479,"src":"22118:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"},"typeName":{"id":15458,"name":"int184","nodeType":"ElementaryTypeName","src":"22118:6:71","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"visibility":"internal"}],"src":"22117:19:71"},"scope":16092,"src":"22063:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15504,"nodeType":"Block","src":"22684:150:71","statements":[{"expression":{"id":15492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15487,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15485,"src":"22694:10:71","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15490,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15482,"src":"22714:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15489,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22707:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int176_$","typeString":"type(int176)"},"typeName":{"id":15488,"name":"int176","nodeType":"ElementaryTypeName","src":"22707:6:71","typeDescriptions":{}}},"id":15491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22707:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"src":"22694:26:71","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"id":15493,"nodeType":"ExpressionStatement","src":"22694:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15494,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15485,"src":"22734:10:71","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15495,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15482,"src":"22748:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22734:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15503,"nodeType":"IfStatement","src":"22730:98:71","trueBody":{"id":15502,"nodeType":"Block","src":"22755:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":15498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22806:3:71","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":15499,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15482,"src":"22811:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15497,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"22776:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22776:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15501,"nodeType":"RevertStatement","src":"22769:48:71"}]}}]},"documentation":{"id":15480,"nodeType":"StructuredDocumentation","src":"22293:312:71","text":" @dev Returns the downcasted int176 from int256, reverting on\n overflow (when the input is less than smallest int176 or\n greater than largest int176).\n Counterpart to Solidity's `int176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":15505,"implemented":true,"kind":"function","modifiers":[],"name":"toInt176","nameLocation":"22619:8:71","nodeType":"FunctionDefinition","parameters":{"id":15483,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15482,"mutability":"mutable","name":"value","nameLocation":"22635:5:71","nodeType":"VariableDeclaration","scope":15505,"src":"22628:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15481,"name":"int256","nodeType":"ElementaryTypeName","src":"22628:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22627:14:71"},"returnParameters":{"id":15486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15485,"mutability":"mutable","name":"downcasted","nameLocation":"22672:10:71","nodeType":"VariableDeclaration","scope":15505,"src":"22665:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"},"typeName":{"id":15484,"name":"int176","nodeType":"ElementaryTypeName","src":"22665:6:71","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"visibility":"internal"}],"src":"22664:19:71"},"scope":16092,"src":"22610:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15530,"nodeType":"Block","src":"23231:150:71","statements":[{"expression":{"id":15518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15513,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15511,"src":"23241:10:71","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15516,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15508,"src":"23261:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15515,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23254:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int168_$","typeString":"type(int168)"},"typeName":{"id":15514,"name":"int168","nodeType":"ElementaryTypeName","src":"23254:6:71","typeDescriptions":{}}},"id":15517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23254:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"src":"23241:26:71","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"id":15519,"nodeType":"ExpressionStatement","src":"23241:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15520,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15511,"src":"23281:10:71","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15521,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15508,"src":"23295:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23281:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15529,"nodeType":"IfStatement","src":"23277:98:71","trueBody":{"id":15528,"nodeType":"Block","src":"23302:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":15524,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23353:3:71","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":15525,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15508,"src":"23358:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15523,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"23323:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23323:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15527,"nodeType":"RevertStatement","src":"23316:48:71"}]}}]},"documentation":{"id":15506,"nodeType":"StructuredDocumentation","src":"22840:312:71","text":" @dev Returns the downcasted int168 from int256, reverting on\n overflow (when the input is less than smallest int168 or\n greater than largest int168).\n Counterpart to Solidity's `int168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":15531,"implemented":true,"kind":"function","modifiers":[],"name":"toInt168","nameLocation":"23166:8:71","nodeType":"FunctionDefinition","parameters":{"id":15509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15508,"mutability":"mutable","name":"value","nameLocation":"23182:5:71","nodeType":"VariableDeclaration","scope":15531,"src":"23175:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15507,"name":"int256","nodeType":"ElementaryTypeName","src":"23175:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23174:14:71"},"returnParameters":{"id":15512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15511,"mutability":"mutable","name":"downcasted","nameLocation":"23219:10:71","nodeType":"VariableDeclaration","scope":15531,"src":"23212:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"},"typeName":{"id":15510,"name":"int168","nodeType":"ElementaryTypeName","src":"23212:6:71","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"visibility":"internal"}],"src":"23211:19:71"},"scope":16092,"src":"23157:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15556,"nodeType":"Block","src":"23778:150:71","statements":[{"expression":{"id":15544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15539,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15537,"src":"23788:10:71","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15542,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15534,"src":"23808:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15541,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23801:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int160_$","typeString":"type(int160)"},"typeName":{"id":15540,"name":"int160","nodeType":"ElementaryTypeName","src":"23801:6:71","typeDescriptions":{}}},"id":15543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23801:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"src":"23788:26:71","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"id":15545,"nodeType":"ExpressionStatement","src":"23788:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15546,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15537,"src":"23828:10:71","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15547,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15534,"src":"23842:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23828:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15555,"nodeType":"IfStatement","src":"23824:98:71","trueBody":{"id":15554,"nodeType":"Block","src":"23849:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":15550,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23900:3:71","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":15551,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15534,"src":"23905:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15549,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"23870:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23870:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15553,"nodeType":"RevertStatement","src":"23863:48:71"}]}}]},"documentation":{"id":15532,"nodeType":"StructuredDocumentation","src":"23387:312:71","text":" @dev Returns the downcasted int160 from int256, reverting on\n overflow (when the input is less than smallest int160 or\n greater than largest int160).\n Counterpart to Solidity's `int160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":15557,"implemented":true,"kind":"function","modifiers":[],"name":"toInt160","nameLocation":"23713:8:71","nodeType":"FunctionDefinition","parameters":{"id":15535,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15534,"mutability":"mutable","name":"value","nameLocation":"23729:5:71","nodeType":"VariableDeclaration","scope":15557,"src":"23722:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15533,"name":"int256","nodeType":"ElementaryTypeName","src":"23722:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23721:14:71"},"returnParameters":{"id":15538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15537,"mutability":"mutable","name":"downcasted","nameLocation":"23766:10:71","nodeType":"VariableDeclaration","scope":15557,"src":"23759:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"},"typeName":{"id":15536,"name":"int160","nodeType":"ElementaryTypeName","src":"23759:6:71","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"visibility":"internal"}],"src":"23758:19:71"},"scope":16092,"src":"23704:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15582,"nodeType":"Block","src":"24325:150:71","statements":[{"expression":{"id":15570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15565,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15563,"src":"24335:10:71","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15568,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15560,"src":"24355:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15567,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24348:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int152_$","typeString":"type(int152)"},"typeName":{"id":15566,"name":"int152","nodeType":"ElementaryTypeName","src":"24348:6:71","typeDescriptions":{}}},"id":15569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24348:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"src":"24335:26:71","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"id":15571,"nodeType":"ExpressionStatement","src":"24335:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15572,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15563,"src":"24375:10:71","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15573,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15560,"src":"24389:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24375:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15581,"nodeType":"IfStatement","src":"24371:98:71","trueBody":{"id":15580,"nodeType":"Block","src":"24396:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":15576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24447:3:71","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":15577,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15560,"src":"24452:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15575,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"24417:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24417:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15579,"nodeType":"RevertStatement","src":"24410:48:71"}]}}]},"documentation":{"id":15558,"nodeType":"StructuredDocumentation","src":"23934:312:71","text":" @dev Returns the downcasted int152 from int256, reverting on\n overflow (when the input is less than smallest int152 or\n greater than largest int152).\n Counterpart to Solidity's `int152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":15583,"implemented":true,"kind":"function","modifiers":[],"name":"toInt152","nameLocation":"24260:8:71","nodeType":"FunctionDefinition","parameters":{"id":15561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15560,"mutability":"mutable","name":"value","nameLocation":"24276:5:71","nodeType":"VariableDeclaration","scope":15583,"src":"24269:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15559,"name":"int256","nodeType":"ElementaryTypeName","src":"24269:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24268:14:71"},"returnParameters":{"id":15564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15563,"mutability":"mutable","name":"downcasted","nameLocation":"24313:10:71","nodeType":"VariableDeclaration","scope":15583,"src":"24306:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"},"typeName":{"id":15562,"name":"int152","nodeType":"ElementaryTypeName","src":"24306:6:71","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"visibility":"internal"}],"src":"24305:19:71"},"scope":16092,"src":"24251:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15608,"nodeType":"Block","src":"24872:150:71","statements":[{"expression":{"id":15596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15591,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15589,"src":"24882:10:71","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15594,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15586,"src":"24902:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15593,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24895:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int144_$","typeString":"type(int144)"},"typeName":{"id":15592,"name":"int144","nodeType":"ElementaryTypeName","src":"24895:6:71","typeDescriptions":{}}},"id":15595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24895:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"src":"24882:26:71","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"id":15597,"nodeType":"ExpressionStatement","src":"24882:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15598,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15589,"src":"24922:10:71","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15599,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15586,"src":"24936:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24922:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15607,"nodeType":"IfStatement","src":"24918:98:71","trueBody":{"id":15606,"nodeType":"Block","src":"24943:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":15602,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24994:3:71","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":15603,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15586,"src":"24999:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15601,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"24964:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24964:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15605,"nodeType":"RevertStatement","src":"24957:48:71"}]}}]},"documentation":{"id":15584,"nodeType":"StructuredDocumentation","src":"24481:312:71","text":" @dev Returns the downcasted int144 from int256, reverting on\n overflow (when the input is less than smallest int144 or\n greater than largest int144).\n Counterpart to Solidity's `int144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":15609,"implemented":true,"kind":"function","modifiers":[],"name":"toInt144","nameLocation":"24807:8:71","nodeType":"FunctionDefinition","parameters":{"id":15587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15586,"mutability":"mutable","name":"value","nameLocation":"24823:5:71","nodeType":"VariableDeclaration","scope":15609,"src":"24816:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15585,"name":"int256","nodeType":"ElementaryTypeName","src":"24816:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24815:14:71"},"returnParameters":{"id":15590,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15589,"mutability":"mutable","name":"downcasted","nameLocation":"24860:10:71","nodeType":"VariableDeclaration","scope":15609,"src":"24853:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"},"typeName":{"id":15588,"name":"int144","nodeType":"ElementaryTypeName","src":"24853:6:71","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"visibility":"internal"}],"src":"24852:19:71"},"scope":16092,"src":"24798:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15634,"nodeType":"Block","src":"25419:150:71","statements":[{"expression":{"id":15622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15617,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15615,"src":"25429:10:71","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15620,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15612,"src":"25449:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15619,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25442:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int136_$","typeString":"type(int136)"},"typeName":{"id":15618,"name":"int136","nodeType":"ElementaryTypeName","src":"25442:6:71","typeDescriptions":{}}},"id":15621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25442:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"src":"25429:26:71","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"id":15623,"nodeType":"ExpressionStatement","src":"25429:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15624,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15615,"src":"25469:10:71","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15625,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15612,"src":"25483:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"25469:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15633,"nodeType":"IfStatement","src":"25465:98:71","trueBody":{"id":15632,"nodeType":"Block","src":"25490:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":15628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25541:3:71","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":15629,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15612,"src":"25546:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15627,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"25511:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25511:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15631,"nodeType":"RevertStatement","src":"25504:48:71"}]}}]},"documentation":{"id":15610,"nodeType":"StructuredDocumentation","src":"25028:312:71","text":" @dev Returns the downcasted int136 from int256, reverting on\n overflow (when the input is less than smallest int136 or\n greater than largest int136).\n Counterpart to Solidity's `int136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":15635,"implemented":true,"kind":"function","modifiers":[],"name":"toInt136","nameLocation":"25354:8:71","nodeType":"FunctionDefinition","parameters":{"id":15613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15612,"mutability":"mutable","name":"value","nameLocation":"25370:5:71","nodeType":"VariableDeclaration","scope":15635,"src":"25363:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15611,"name":"int256","nodeType":"ElementaryTypeName","src":"25363:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25362:14:71"},"returnParameters":{"id":15616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15615,"mutability":"mutable","name":"downcasted","nameLocation":"25407:10:71","nodeType":"VariableDeclaration","scope":15635,"src":"25400:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"},"typeName":{"id":15614,"name":"int136","nodeType":"ElementaryTypeName","src":"25400:6:71","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"visibility":"internal"}],"src":"25399:19:71"},"scope":16092,"src":"25345:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15660,"nodeType":"Block","src":"25966:150:71","statements":[{"expression":{"id":15648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15643,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15641,"src":"25976:10:71","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15646,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15638,"src":"25996:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15645,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25989:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"},"typeName":{"id":15644,"name":"int128","nodeType":"ElementaryTypeName","src":"25989:6:71","typeDescriptions":{}}},"id":15647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25989:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"src":"25976:26:71","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"id":15649,"nodeType":"ExpressionStatement","src":"25976:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15650,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15641,"src":"26016:10:71","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15651,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15638,"src":"26030:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26016:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15659,"nodeType":"IfStatement","src":"26012:98:71","trueBody":{"id":15658,"nodeType":"Block","src":"26037:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":15654,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26088:3:71","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":15655,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15638,"src":"26093:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15653,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"26058:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26058:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15657,"nodeType":"RevertStatement","src":"26051:48:71"}]}}]},"documentation":{"id":15636,"nodeType":"StructuredDocumentation","src":"25575:312:71","text":" @dev Returns the downcasted int128 from int256, reverting on\n overflow (when the input is less than smallest int128 or\n greater than largest int128).\n Counterpart to Solidity's `int128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":15661,"implemented":true,"kind":"function","modifiers":[],"name":"toInt128","nameLocation":"25901:8:71","nodeType":"FunctionDefinition","parameters":{"id":15639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15638,"mutability":"mutable","name":"value","nameLocation":"25917:5:71","nodeType":"VariableDeclaration","scope":15661,"src":"25910:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15637,"name":"int256","nodeType":"ElementaryTypeName","src":"25910:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25909:14:71"},"returnParameters":{"id":15642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15641,"mutability":"mutable","name":"downcasted","nameLocation":"25954:10:71","nodeType":"VariableDeclaration","scope":15661,"src":"25947:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"},"typeName":{"id":15640,"name":"int128","nodeType":"ElementaryTypeName","src":"25947:6:71","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"visibility":"internal"}],"src":"25946:19:71"},"scope":16092,"src":"25892:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15686,"nodeType":"Block","src":"26513:150:71","statements":[{"expression":{"id":15674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15669,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"26523:10:71","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15672,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15664,"src":"26543:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15671,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26536:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int120_$","typeString":"type(int120)"},"typeName":{"id":15670,"name":"int120","nodeType":"ElementaryTypeName","src":"26536:6:71","typeDescriptions":{}}},"id":15673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26536:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"src":"26523:26:71","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"id":15675,"nodeType":"ExpressionStatement","src":"26523:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15676,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"26563:10:71","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15677,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15664,"src":"26577:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26563:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15685,"nodeType":"IfStatement","src":"26559:98:71","trueBody":{"id":15684,"nodeType":"Block","src":"26584:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":15680,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26635:3:71","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":15681,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15664,"src":"26640:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15679,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"26605:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26605:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15683,"nodeType":"RevertStatement","src":"26598:48:71"}]}}]},"documentation":{"id":15662,"nodeType":"StructuredDocumentation","src":"26122:312:71","text":" @dev Returns the downcasted int120 from int256, reverting on\n overflow (when the input is less than smallest int120 or\n greater than largest int120).\n Counterpart to Solidity's `int120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":15687,"implemented":true,"kind":"function","modifiers":[],"name":"toInt120","nameLocation":"26448:8:71","nodeType":"FunctionDefinition","parameters":{"id":15665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15664,"mutability":"mutable","name":"value","nameLocation":"26464:5:71","nodeType":"VariableDeclaration","scope":15687,"src":"26457:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15663,"name":"int256","nodeType":"ElementaryTypeName","src":"26457:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"26456:14:71"},"returnParameters":{"id":15668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15667,"mutability":"mutable","name":"downcasted","nameLocation":"26501:10:71","nodeType":"VariableDeclaration","scope":15687,"src":"26494:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"},"typeName":{"id":15666,"name":"int120","nodeType":"ElementaryTypeName","src":"26494:6:71","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"visibility":"internal"}],"src":"26493:19:71"},"scope":16092,"src":"26439:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15712,"nodeType":"Block","src":"27060:150:71","statements":[{"expression":{"id":15700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15695,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15693,"src":"27070:10:71","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15698,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15690,"src":"27090:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15697,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27083:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int112_$","typeString":"type(int112)"},"typeName":{"id":15696,"name":"int112","nodeType":"ElementaryTypeName","src":"27083:6:71","typeDescriptions":{}}},"id":15699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27083:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"src":"27070:26:71","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"id":15701,"nodeType":"ExpressionStatement","src":"27070:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15702,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15693,"src":"27110:10:71","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15703,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15690,"src":"27124:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27110:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15711,"nodeType":"IfStatement","src":"27106:98:71","trueBody":{"id":15710,"nodeType":"Block","src":"27131:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":15706,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27182:3:71","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":15707,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15690,"src":"27187:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15705,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"27152:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27152:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15709,"nodeType":"RevertStatement","src":"27145:48:71"}]}}]},"documentation":{"id":15688,"nodeType":"StructuredDocumentation","src":"26669:312:71","text":" @dev Returns the downcasted int112 from int256, reverting on\n overflow (when the input is less than smallest int112 or\n greater than largest int112).\n Counterpart to Solidity's `int112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":15713,"implemented":true,"kind":"function","modifiers":[],"name":"toInt112","nameLocation":"26995:8:71","nodeType":"FunctionDefinition","parameters":{"id":15691,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15690,"mutability":"mutable","name":"value","nameLocation":"27011:5:71","nodeType":"VariableDeclaration","scope":15713,"src":"27004:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15689,"name":"int256","nodeType":"ElementaryTypeName","src":"27004:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"27003:14:71"},"returnParameters":{"id":15694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15693,"mutability":"mutable","name":"downcasted","nameLocation":"27048:10:71","nodeType":"VariableDeclaration","scope":15713,"src":"27041:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"},"typeName":{"id":15692,"name":"int112","nodeType":"ElementaryTypeName","src":"27041:6:71","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"visibility":"internal"}],"src":"27040:19:71"},"scope":16092,"src":"26986:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15738,"nodeType":"Block","src":"27607:150:71","statements":[{"expression":{"id":15726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15721,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15719,"src":"27617:10:71","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15724,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15716,"src":"27637:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15723,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27630:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int104_$","typeString":"type(int104)"},"typeName":{"id":15722,"name":"int104","nodeType":"ElementaryTypeName","src":"27630:6:71","typeDescriptions":{}}},"id":15725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27630:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"src":"27617:26:71","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"id":15727,"nodeType":"ExpressionStatement","src":"27617:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15728,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15719,"src":"27657:10:71","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15729,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15716,"src":"27671:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27657:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15737,"nodeType":"IfStatement","src":"27653:98:71","trueBody":{"id":15736,"nodeType":"Block","src":"27678:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":15732,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27729:3:71","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":15733,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15716,"src":"27734:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15731,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"27699:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27699:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15735,"nodeType":"RevertStatement","src":"27692:48:71"}]}}]},"documentation":{"id":15714,"nodeType":"StructuredDocumentation","src":"27216:312:71","text":" @dev Returns the downcasted int104 from int256, reverting on\n overflow (when the input is less than smallest int104 or\n greater than largest int104).\n Counterpart to Solidity's `int104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":15739,"implemented":true,"kind":"function","modifiers":[],"name":"toInt104","nameLocation":"27542:8:71","nodeType":"FunctionDefinition","parameters":{"id":15717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15716,"mutability":"mutable","name":"value","nameLocation":"27558:5:71","nodeType":"VariableDeclaration","scope":15739,"src":"27551:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15715,"name":"int256","nodeType":"ElementaryTypeName","src":"27551:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"27550:14:71"},"returnParameters":{"id":15720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15719,"mutability":"mutable","name":"downcasted","nameLocation":"27595:10:71","nodeType":"VariableDeclaration","scope":15739,"src":"27588:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"},"typeName":{"id":15718,"name":"int104","nodeType":"ElementaryTypeName","src":"27588:6:71","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"visibility":"internal"}],"src":"27587:19:71"},"scope":16092,"src":"27533:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15764,"nodeType":"Block","src":"28147:148:71","statements":[{"expression":{"id":15752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15747,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15745,"src":"28157:10:71","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15750,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15742,"src":"28176:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15749,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28170:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int96_$","typeString":"type(int96)"},"typeName":{"id":15748,"name":"int96","nodeType":"ElementaryTypeName","src":"28170:5:71","typeDescriptions":{}}},"id":15751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28170:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"src":"28157:25:71","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"id":15753,"nodeType":"ExpressionStatement","src":"28157:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15754,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15745,"src":"28196:10:71","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15755,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15742,"src":"28210:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28196:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15763,"nodeType":"IfStatement","src":"28192:97:71","trueBody":{"id":15762,"nodeType":"Block","src":"28217:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":15758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28268:2:71","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":15759,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15742,"src":"28272:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15757,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"28238:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28238:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15761,"nodeType":"RevertStatement","src":"28231:47:71"}]}}]},"documentation":{"id":15740,"nodeType":"StructuredDocumentation","src":"27763:307:71","text":" @dev Returns the downcasted int96 from int256, reverting on\n overflow (when the input is less than smallest int96 or\n greater than largest int96).\n Counterpart to Solidity's `int96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":15765,"implemented":true,"kind":"function","modifiers":[],"name":"toInt96","nameLocation":"28084:7:71","nodeType":"FunctionDefinition","parameters":{"id":15743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15742,"mutability":"mutable","name":"value","nameLocation":"28099:5:71","nodeType":"VariableDeclaration","scope":15765,"src":"28092:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15741,"name":"int256","nodeType":"ElementaryTypeName","src":"28092:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28091:14:71"},"returnParameters":{"id":15746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15745,"mutability":"mutable","name":"downcasted","nameLocation":"28135:10:71","nodeType":"VariableDeclaration","scope":15765,"src":"28129:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"},"typeName":{"id":15744,"name":"int96","nodeType":"ElementaryTypeName","src":"28129:5:71","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"visibility":"internal"}],"src":"28128:18:71"},"scope":16092,"src":"28075:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15790,"nodeType":"Block","src":"28685:148:71","statements":[{"expression":{"id":15778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15773,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15771,"src":"28695:10:71","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15776,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15768,"src":"28714:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15775,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28708:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int88_$","typeString":"type(int88)"},"typeName":{"id":15774,"name":"int88","nodeType":"ElementaryTypeName","src":"28708:5:71","typeDescriptions":{}}},"id":15777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28708:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"src":"28695:25:71","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"id":15779,"nodeType":"ExpressionStatement","src":"28695:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15780,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15771,"src":"28734:10:71","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15781,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15768,"src":"28748:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28734:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15789,"nodeType":"IfStatement","src":"28730:97:71","trueBody":{"id":15788,"nodeType":"Block","src":"28755:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":15784,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28806:2:71","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":15785,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15768,"src":"28810:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15783,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"28776:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28776:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15787,"nodeType":"RevertStatement","src":"28769:47:71"}]}}]},"documentation":{"id":15766,"nodeType":"StructuredDocumentation","src":"28301:307:71","text":" @dev Returns the downcasted int88 from int256, reverting on\n overflow (when the input is less than smallest int88 or\n greater than largest int88).\n Counterpart to Solidity's `int88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":15791,"implemented":true,"kind":"function","modifiers":[],"name":"toInt88","nameLocation":"28622:7:71","nodeType":"FunctionDefinition","parameters":{"id":15769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15768,"mutability":"mutable","name":"value","nameLocation":"28637:5:71","nodeType":"VariableDeclaration","scope":15791,"src":"28630:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15767,"name":"int256","nodeType":"ElementaryTypeName","src":"28630:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28629:14:71"},"returnParameters":{"id":15772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15771,"mutability":"mutable","name":"downcasted","nameLocation":"28673:10:71","nodeType":"VariableDeclaration","scope":15791,"src":"28667:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"},"typeName":{"id":15770,"name":"int88","nodeType":"ElementaryTypeName","src":"28667:5:71","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"visibility":"internal"}],"src":"28666:18:71"},"scope":16092,"src":"28613:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15816,"nodeType":"Block","src":"29223:148:71","statements":[{"expression":{"id":15804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15799,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15797,"src":"29233:10:71","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15802,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15794,"src":"29252:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15801,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29246:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int80_$","typeString":"type(int80)"},"typeName":{"id":15800,"name":"int80","nodeType":"ElementaryTypeName","src":"29246:5:71","typeDescriptions":{}}},"id":15803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29246:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"src":"29233:25:71","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"id":15805,"nodeType":"ExpressionStatement","src":"29233:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15806,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15797,"src":"29272:10:71","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15807,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15794,"src":"29286:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29272:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15815,"nodeType":"IfStatement","src":"29268:97:71","trueBody":{"id":15814,"nodeType":"Block","src":"29293:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":15810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29344:2:71","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":15811,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15794,"src":"29348:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15809,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"29314:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29314:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15813,"nodeType":"RevertStatement","src":"29307:47:71"}]}}]},"documentation":{"id":15792,"nodeType":"StructuredDocumentation","src":"28839:307:71","text":" @dev Returns the downcasted int80 from int256, reverting on\n overflow (when the input is less than smallest int80 or\n greater than largest int80).\n Counterpart to Solidity's `int80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":15817,"implemented":true,"kind":"function","modifiers":[],"name":"toInt80","nameLocation":"29160:7:71","nodeType":"FunctionDefinition","parameters":{"id":15795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15794,"mutability":"mutable","name":"value","nameLocation":"29175:5:71","nodeType":"VariableDeclaration","scope":15817,"src":"29168:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15793,"name":"int256","nodeType":"ElementaryTypeName","src":"29168:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29167:14:71"},"returnParameters":{"id":15798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15797,"mutability":"mutable","name":"downcasted","nameLocation":"29211:10:71","nodeType":"VariableDeclaration","scope":15817,"src":"29205:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"},"typeName":{"id":15796,"name":"int80","nodeType":"ElementaryTypeName","src":"29205:5:71","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"visibility":"internal"}],"src":"29204:18:71"},"scope":16092,"src":"29151:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15842,"nodeType":"Block","src":"29761:148:71","statements":[{"expression":{"id":15830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15825,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15823,"src":"29771:10:71","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15828,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15820,"src":"29790:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15827,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29784:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int72_$","typeString":"type(int72)"},"typeName":{"id":15826,"name":"int72","nodeType":"ElementaryTypeName","src":"29784:5:71","typeDescriptions":{}}},"id":15829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29784:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"src":"29771:25:71","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"id":15831,"nodeType":"ExpressionStatement","src":"29771:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15832,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15823,"src":"29810:10:71","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15833,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15820,"src":"29824:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29810:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15841,"nodeType":"IfStatement","src":"29806:97:71","trueBody":{"id":15840,"nodeType":"Block","src":"29831:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":15836,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29882:2:71","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":15837,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15820,"src":"29886:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15835,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"29852:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29852:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15839,"nodeType":"RevertStatement","src":"29845:47:71"}]}}]},"documentation":{"id":15818,"nodeType":"StructuredDocumentation","src":"29377:307:71","text":" @dev Returns the downcasted int72 from int256, reverting on\n overflow (when the input is less than smallest int72 or\n greater than largest int72).\n Counterpart to Solidity's `int72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":15843,"implemented":true,"kind":"function","modifiers":[],"name":"toInt72","nameLocation":"29698:7:71","nodeType":"FunctionDefinition","parameters":{"id":15821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15820,"mutability":"mutable","name":"value","nameLocation":"29713:5:71","nodeType":"VariableDeclaration","scope":15843,"src":"29706:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15819,"name":"int256","nodeType":"ElementaryTypeName","src":"29706:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29705:14:71"},"returnParameters":{"id":15824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15823,"mutability":"mutable","name":"downcasted","nameLocation":"29749:10:71","nodeType":"VariableDeclaration","scope":15843,"src":"29743:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"},"typeName":{"id":15822,"name":"int72","nodeType":"ElementaryTypeName","src":"29743:5:71","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"visibility":"internal"}],"src":"29742:18:71"},"scope":16092,"src":"29689:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15868,"nodeType":"Block","src":"30299:148:71","statements":[{"expression":{"id":15856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15851,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15849,"src":"30309:10:71","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15854,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15846,"src":"30328:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15853,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30322:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"},"typeName":{"id":15852,"name":"int64","nodeType":"ElementaryTypeName","src":"30322:5:71","typeDescriptions":{}}},"id":15855,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30322:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"src":"30309:25:71","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"id":15857,"nodeType":"ExpressionStatement","src":"30309:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15858,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15849,"src":"30348:10:71","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15859,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15846,"src":"30362:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30348:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15867,"nodeType":"IfStatement","src":"30344:97:71","trueBody":{"id":15866,"nodeType":"Block","src":"30369:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":15862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30420:2:71","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":15863,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15846,"src":"30424:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15861,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"30390:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30390:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15865,"nodeType":"RevertStatement","src":"30383:47:71"}]}}]},"documentation":{"id":15844,"nodeType":"StructuredDocumentation","src":"29915:307:71","text":" @dev Returns the downcasted int64 from int256, reverting on\n overflow (when the input is less than smallest int64 or\n greater than largest int64).\n Counterpart to Solidity's `int64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":15869,"implemented":true,"kind":"function","modifiers":[],"name":"toInt64","nameLocation":"30236:7:71","nodeType":"FunctionDefinition","parameters":{"id":15847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15846,"mutability":"mutable","name":"value","nameLocation":"30251:5:71","nodeType":"VariableDeclaration","scope":15869,"src":"30244:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15845,"name":"int256","nodeType":"ElementaryTypeName","src":"30244:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30243:14:71"},"returnParameters":{"id":15850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15849,"mutability":"mutable","name":"downcasted","nameLocation":"30287:10:71","nodeType":"VariableDeclaration","scope":15869,"src":"30281:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"},"typeName":{"id":15848,"name":"int64","nodeType":"ElementaryTypeName","src":"30281:5:71","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"visibility":"internal"}],"src":"30280:18:71"},"scope":16092,"src":"30227:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15894,"nodeType":"Block","src":"30837:148:71","statements":[{"expression":{"id":15882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15877,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15875,"src":"30847:10:71","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15880,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15872,"src":"30866:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15879,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30860:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int56_$","typeString":"type(int56)"},"typeName":{"id":15878,"name":"int56","nodeType":"ElementaryTypeName","src":"30860:5:71","typeDescriptions":{}}},"id":15881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30860:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"src":"30847:25:71","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"id":15883,"nodeType":"ExpressionStatement","src":"30847:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15884,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15875,"src":"30886:10:71","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15885,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15872,"src":"30900:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30886:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15893,"nodeType":"IfStatement","src":"30882:97:71","trueBody":{"id":15892,"nodeType":"Block","src":"30907:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":15888,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30958:2:71","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":15889,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15872,"src":"30962:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15887,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"30928:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30928:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15891,"nodeType":"RevertStatement","src":"30921:47:71"}]}}]},"documentation":{"id":15870,"nodeType":"StructuredDocumentation","src":"30453:307:71","text":" @dev Returns the downcasted int56 from int256, reverting on\n overflow (when the input is less than smallest int56 or\n greater than largest int56).\n Counterpart to Solidity's `int56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":15895,"implemented":true,"kind":"function","modifiers":[],"name":"toInt56","nameLocation":"30774:7:71","nodeType":"FunctionDefinition","parameters":{"id":15873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15872,"mutability":"mutable","name":"value","nameLocation":"30789:5:71","nodeType":"VariableDeclaration","scope":15895,"src":"30782:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15871,"name":"int256","nodeType":"ElementaryTypeName","src":"30782:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30781:14:71"},"returnParameters":{"id":15876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15875,"mutability":"mutable","name":"downcasted","nameLocation":"30825:10:71","nodeType":"VariableDeclaration","scope":15895,"src":"30819:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"},"typeName":{"id":15874,"name":"int56","nodeType":"ElementaryTypeName","src":"30819:5:71","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"visibility":"internal"}],"src":"30818:18:71"},"scope":16092,"src":"30765:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15920,"nodeType":"Block","src":"31375:148:71","statements":[{"expression":{"id":15908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15903,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15901,"src":"31385:10:71","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15906,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15898,"src":"31404:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15905,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31398:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int48_$","typeString":"type(int48)"},"typeName":{"id":15904,"name":"int48","nodeType":"ElementaryTypeName","src":"31398:5:71","typeDescriptions":{}}},"id":15907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31398:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"src":"31385:25:71","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"id":15909,"nodeType":"ExpressionStatement","src":"31385:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15910,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15901,"src":"31424:10:71","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15911,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15898,"src":"31438:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31424:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15919,"nodeType":"IfStatement","src":"31420:97:71","trueBody":{"id":15918,"nodeType":"Block","src":"31445:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":15914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31496:2:71","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":15915,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15898,"src":"31500:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15913,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"31466:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31466:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15917,"nodeType":"RevertStatement","src":"31459:47:71"}]}}]},"documentation":{"id":15896,"nodeType":"StructuredDocumentation","src":"30991:307:71","text":" @dev Returns the downcasted int48 from int256, reverting on\n overflow (when the input is less than smallest int48 or\n greater than largest int48).\n Counterpart to Solidity's `int48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":15921,"implemented":true,"kind":"function","modifiers":[],"name":"toInt48","nameLocation":"31312:7:71","nodeType":"FunctionDefinition","parameters":{"id":15899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15898,"mutability":"mutable","name":"value","nameLocation":"31327:5:71","nodeType":"VariableDeclaration","scope":15921,"src":"31320:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15897,"name":"int256","nodeType":"ElementaryTypeName","src":"31320:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31319:14:71"},"returnParameters":{"id":15902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15901,"mutability":"mutable","name":"downcasted","nameLocation":"31363:10:71","nodeType":"VariableDeclaration","scope":15921,"src":"31357:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"},"typeName":{"id":15900,"name":"int48","nodeType":"ElementaryTypeName","src":"31357:5:71","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"visibility":"internal"}],"src":"31356:18:71"},"scope":16092,"src":"31303:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15946,"nodeType":"Block","src":"31913:148:71","statements":[{"expression":{"id":15934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15929,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15927,"src":"31923:10:71","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15932,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15924,"src":"31942:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15931,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31936:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int40_$","typeString":"type(int40)"},"typeName":{"id":15930,"name":"int40","nodeType":"ElementaryTypeName","src":"31936:5:71","typeDescriptions":{}}},"id":15933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31936:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"src":"31923:25:71","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"id":15935,"nodeType":"ExpressionStatement","src":"31923:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15936,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15927,"src":"31962:10:71","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15937,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15924,"src":"31976:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31962:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15945,"nodeType":"IfStatement","src":"31958:97:71","trueBody":{"id":15944,"nodeType":"Block","src":"31983:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":15940,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32034:2:71","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":15941,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15924,"src":"32038:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15939,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"32004:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32004:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15943,"nodeType":"RevertStatement","src":"31997:47:71"}]}}]},"documentation":{"id":15922,"nodeType":"StructuredDocumentation","src":"31529:307:71","text":" @dev Returns the downcasted int40 from int256, reverting on\n overflow (when the input is less than smallest int40 or\n greater than largest int40).\n Counterpart to Solidity's `int40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":15947,"implemented":true,"kind":"function","modifiers":[],"name":"toInt40","nameLocation":"31850:7:71","nodeType":"FunctionDefinition","parameters":{"id":15925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15924,"mutability":"mutable","name":"value","nameLocation":"31865:5:71","nodeType":"VariableDeclaration","scope":15947,"src":"31858:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15923,"name":"int256","nodeType":"ElementaryTypeName","src":"31858:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31857:14:71"},"returnParameters":{"id":15928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15927,"mutability":"mutable","name":"downcasted","nameLocation":"31901:10:71","nodeType":"VariableDeclaration","scope":15947,"src":"31895:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"},"typeName":{"id":15926,"name":"int40","nodeType":"ElementaryTypeName","src":"31895:5:71","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"visibility":"internal"}],"src":"31894:18:71"},"scope":16092,"src":"31841:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15972,"nodeType":"Block","src":"32451:148:71","statements":[{"expression":{"id":15960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15955,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15953,"src":"32461:10:71","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15958,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15950,"src":"32480:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15957,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32474:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"},"typeName":{"id":15956,"name":"int32","nodeType":"ElementaryTypeName","src":"32474:5:71","typeDescriptions":{}}},"id":15959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32474:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"src":"32461:25:71","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"id":15961,"nodeType":"ExpressionStatement","src":"32461:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15962,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15953,"src":"32500:10:71","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15963,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15950,"src":"32514:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"32500:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15971,"nodeType":"IfStatement","src":"32496:97:71","trueBody":{"id":15970,"nodeType":"Block","src":"32521:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":15966,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32572:2:71","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":15967,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15950,"src":"32576:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15965,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"32542:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32542:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15969,"nodeType":"RevertStatement","src":"32535:47:71"}]}}]},"documentation":{"id":15948,"nodeType":"StructuredDocumentation","src":"32067:307:71","text":" @dev Returns the downcasted int32 from int256, reverting on\n overflow (when the input is less than smallest int32 or\n greater than largest int32).\n Counterpart to Solidity's `int32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":15973,"implemented":true,"kind":"function","modifiers":[],"name":"toInt32","nameLocation":"32388:7:71","nodeType":"FunctionDefinition","parameters":{"id":15951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15950,"mutability":"mutable","name":"value","nameLocation":"32403:5:71","nodeType":"VariableDeclaration","scope":15973,"src":"32396:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15949,"name":"int256","nodeType":"ElementaryTypeName","src":"32396:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32395:14:71"},"returnParameters":{"id":15954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15953,"mutability":"mutable","name":"downcasted","nameLocation":"32439:10:71","nodeType":"VariableDeclaration","scope":15973,"src":"32433:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"},"typeName":{"id":15952,"name":"int32","nodeType":"ElementaryTypeName","src":"32433:5:71","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"visibility":"internal"}],"src":"32432:18:71"},"scope":16092,"src":"32379:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15998,"nodeType":"Block","src":"32989:148:71","statements":[{"expression":{"id":15986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15981,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15979,"src":"32999:10:71","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15984,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15976,"src":"33018:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15983,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33012:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int24_$","typeString":"type(int24)"},"typeName":{"id":15982,"name":"int24","nodeType":"ElementaryTypeName","src":"33012:5:71","typeDescriptions":{}}},"id":15985,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33012:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"src":"32999:25:71","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"id":15987,"nodeType":"ExpressionStatement","src":"32999:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15988,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15979,"src":"33038:10:71","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15989,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15976,"src":"33052:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33038:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15997,"nodeType":"IfStatement","src":"33034:97:71","trueBody":{"id":15996,"nodeType":"Block","src":"33059:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":15992,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33110:2:71","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":15993,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15976,"src":"33114:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15991,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"33080:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33080:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15995,"nodeType":"RevertStatement","src":"33073:47:71"}]}}]},"documentation":{"id":15974,"nodeType":"StructuredDocumentation","src":"32605:307:71","text":" @dev Returns the downcasted int24 from int256, reverting on\n overflow (when the input is less than smallest int24 or\n greater than largest int24).\n Counterpart to Solidity's `int24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":15999,"implemented":true,"kind":"function","modifiers":[],"name":"toInt24","nameLocation":"32926:7:71","nodeType":"FunctionDefinition","parameters":{"id":15977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15976,"mutability":"mutable","name":"value","nameLocation":"32941:5:71","nodeType":"VariableDeclaration","scope":15999,"src":"32934:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15975,"name":"int256","nodeType":"ElementaryTypeName","src":"32934:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32933:14:71"},"returnParameters":{"id":15980,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15979,"mutability":"mutable","name":"downcasted","nameLocation":"32977:10:71","nodeType":"VariableDeclaration","scope":15999,"src":"32971:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"},"typeName":{"id":15978,"name":"int24","nodeType":"ElementaryTypeName","src":"32971:5:71","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"visibility":"internal"}],"src":"32970:18:71"},"scope":16092,"src":"32917:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":16024,"nodeType":"Block","src":"33527:148:71","statements":[{"expression":{"id":16012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16007,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16005,"src":"33537:10:71","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16010,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16002,"src":"33556:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":16009,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33550:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"},"typeName":{"id":16008,"name":"int16","nodeType":"ElementaryTypeName","src":"33550:5:71","typeDescriptions":{}}},"id":16011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33550:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"src":"33537:25:71","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"id":16013,"nodeType":"ExpressionStatement","src":"33537:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":16016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16014,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16005,"src":"33576:10:71","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":16015,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16002,"src":"33590:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33576:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16023,"nodeType":"IfStatement","src":"33572:97:71","trueBody":{"id":16022,"nodeType":"Block","src":"33597:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":16018,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33648:2:71","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":16019,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16002,"src":"33652:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":16017,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"33618:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":16020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33618:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16021,"nodeType":"RevertStatement","src":"33611:47:71"}]}}]},"documentation":{"id":16000,"nodeType":"StructuredDocumentation","src":"33143:307:71","text":" @dev Returns the downcasted int16 from int256, reverting on\n overflow (when the input is less than smallest int16 or\n greater than largest int16).\n Counterpart to Solidity's `int16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":16025,"implemented":true,"kind":"function","modifiers":[],"name":"toInt16","nameLocation":"33464:7:71","nodeType":"FunctionDefinition","parameters":{"id":16003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16002,"mutability":"mutable","name":"value","nameLocation":"33479:5:71","nodeType":"VariableDeclaration","scope":16025,"src":"33472:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":16001,"name":"int256","nodeType":"ElementaryTypeName","src":"33472:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"33471:14:71"},"returnParameters":{"id":16006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16005,"mutability":"mutable","name":"downcasted","nameLocation":"33515:10:71","nodeType":"VariableDeclaration","scope":16025,"src":"33509:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"},"typeName":{"id":16004,"name":"int16","nodeType":"ElementaryTypeName","src":"33509:5:71","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"visibility":"internal"}],"src":"33508:18:71"},"scope":16092,"src":"33455:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":16050,"nodeType":"Block","src":"34058:146:71","statements":[{"expression":{"id":16038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16033,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16031,"src":"34068:10:71","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16036,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16028,"src":"34086:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":16035,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34081:4:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"},"typeName":{"id":16034,"name":"int8","nodeType":"ElementaryTypeName","src":"34081:4:71","typeDescriptions":{}}},"id":16037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34081:11:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"src":"34068:24:71","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"id":16039,"nodeType":"ExpressionStatement","src":"34068:24:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":16042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16040,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16031,"src":"34106:10:71","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":16041,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16028,"src":"34120:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"34106:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16049,"nodeType":"IfStatement","src":"34102:96:71","trueBody":{"id":16048,"nodeType":"Block","src":"34127:71:71","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":16044,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34178:1:71","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":16045,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16028,"src":"34181:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":16043,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"34148:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":16046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34148:39:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16047,"nodeType":"RevertStatement","src":"34141:46:71"}]}}]},"documentation":{"id":16026,"nodeType":"StructuredDocumentation","src":"33681:302:71","text":" @dev Returns the downcasted int8 from int256, reverting on\n overflow (when the input is less than smallest int8 or\n greater than largest int8).\n Counterpart to Solidity's `int8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":16051,"implemented":true,"kind":"function","modifiers":[],"name":"toInt8","nameLocation":"33997:6:71","nodeType":"FunctionDefinition","parameters":{"id":16029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16028,"mutability":"mutable","name":"value","nameLocation":"34011:5:71","nodeType":"VariableDeclaration","scope":16051,"src":"34004:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":16027,"name":"int256","nodeType":"ElementaryTypeName","src":"34004:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"34003:14:71"},"returnParameters":{"id":16032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16031,"mutability":"mutable","name":"downcasted","nameLocation":"34046:10:71","nodeType":"VariableDeclaration","scope":16051,"src":"34041:15:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"},"typeName":{"id":16030,"name":"int8","nodeType":"ElementaryTypeName","src":"34041:4:71","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"visibility":"internal"}],"src":"34040:17:71"},"scope":16092,"src":"33988:216:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":16080,"nodeType":"Block","src":"34444:250:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16059,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16054,"src":"34557:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"expression":{"arguments":[{"id":16064,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34578:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":16063,"name":"int256","nodeType":"ElementaryTypeName","src":"34578:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":16062,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"34573:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":16065,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34573:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":16066,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34586:3:71","memberName":"max","nodeType":"MemberAccess","src":"34573:16:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":16061,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34565:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16060,"name":"uint256","nodeType":"ElementaryTypeName","src":"34565:7:71","typeDescriptions":{}}},"id":16067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34565:25:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34557:33:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16074,"nodeType":"IfStatement","src":"34553:105:71","trueBody":{"id":16073,"nodeType":"Block","src":"34592:66:71","statements":[{"errorCall":{"arguments":[{"id":16070,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16054,"src":"34641:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16069,"name":"SafeCastOverflowedUintToInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14354,"src":"34613:27:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":16071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34613:34:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16072,"nodeType":"RevertStatement","src":"34606:41:71"}]}},{"expression":{"arguments":[{"id":16077,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16054,"src":"34681:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16076,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34674:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":16075,"name":"int256","nodeType":"ElementaryTypeName","src":"34674:6:71","typeDescriptions":{}}},"id":16078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34674:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":16058,"id":16079,"nodeType":"Return","src":"34667:20:71"}]},"documentation":{"id":16052,"nodeType":"StructuredDocumentation","src":"34210:165:71","text":" @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256."},"id":16081,"implemented":true,"kind":"function","modifiers":[],"name":"toInt256","nameLocation":"34389:8:71","nodeType":"FunctionDefinition","parameters":{"id":16055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16054,"mutability":"mutable","name":"value","nameLocation":"34406:5:71","nodeType":"VariableDeclaration","scope":16081,"src":"34398:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16053,"name":"uint256","nodeType":"ElementaryTypeName","src":"34398:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34397:15:71"},"returnParameters":{"id":16058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16057,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16081,"src":"34436:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":16056,"name":"int256","nodeType":"ElementaryTypeName","src":"34436:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"34435:8:71"},"scope":16092,"src":"34380:314:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":16090,"nodeType":"Block","src":"34853:87:71","statements":[{"AST":{"nativeSrc":"34888:46:71","nodeType":"YulBlock","src":"34888:46:71","statements":[{"nativeSrc":"34902:22:71","nodeType":"YulAssignment","src":"34902:22:71","value":{"arguments":[{"arguments":[{"name":"b","nativeSrc":"34921:1:71","nodeType":"YulIdentifier","src":"34921:1:71"}],"functionName":{"name":"iszero","nativeSrc":"34914:6:71","nodeType":"YulIdentifier","src":"34914:6:71"},"nativeSrc":"34914:9:71","nodeType":"YulFunctionCall","src":"34914:9:71"}],"functionName":{"name":"iszero","nativeSrc":"34907:6:71","nodeType":"YulIdentifier","src":"34907:6:71"},"nativeSrc":"34907:17:71","nodeType":"YulFunctionCall","src":"34907:17:71"},"variableNames":[{"name":"u","nativeSrc":"34902:1:71","nodeType":"YulIdentifier","src":"34902:1:71"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16084,"isOffset":false,"isSlot":false,"src":"34921:1:71","valueSize":1},{"declaration":16087,"isOffset":false,"isSlot":false,"src":"34902:1:71","valueSize":1}],"flags":["memory-safe"],"id":16089,"nodeType":"InlineAssembly","src":"34863:71:71"}]},"documentation":{"id":16082,"nodeType":"StructuredDocumentation","src":"34700:90:71","text":" @dev Cast a boolean (false or true) to a uint256 (0 or 1) with no jump."},"id":16091,"implemented":true,"kind":"function","modifiers":[],"name":"toUint","nameLocation":"34804:6:71","nodeType":"FunctionDefinition","parameters":{"id":16085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16084,"mutability":"mutable","name":"b","nameLocation":"34816:1:71","nodeType":"VariableDeclaration","scope":16091,"src":"34811:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16083,"name":"bool","nodeType":"ElementaryTypeName","src":"34811:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34810:8:71"},"returnParameters":{"id":16088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16087,"mutability":"mutable","name":"u","nameLocation":"34850:1:71","nodeType":"VariableDeclaration","scope":16091,"src":"34842:9:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16086,"name":"uint256","nodeType":"ElementaryTypeName","src":"34842:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34841:11:71"},"scope":16092,"src":"34795:145:71","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":16093,"src":"769:34173:71","usedErrors":[14337,14342,14349,14354],"usedEvents":[]}],"src":"192:34751:71"},"id":71},"@openzeppelin/contracts/utils/structs/EnumerableSet.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/structs/EnumerableSet.sol","exportedSymbols":{"Arrays":[12304],"EnumerableSet":[17618],"Math":[14327]},"id":17619,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":16094,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"205:24:72"},{"absolutePath":"@openzeppelin/contracts/utils/Arrays.sol","file":"../Arrays.sol","id":16096,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17619,"sourceUnit":12305,"src":"231:37:72","symbolAliases":[{"foreign":{"id":16095,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12304,"src":"239:6:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","file":"../math/Math.sol","id":16098,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17619,"sourceUnit":14328,"src":"269:38:72","symbolAliases":[{"foreign":{"id":16097,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"277:4:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"EnumerableSet","contractDependencies":[],"contractKind":"library","documentation":{"id":16099,"nodeType":"StructuredDocumentation","src":"309:1276:72","text":" @dev Library for managing\n https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n types.\n Sets have the following properties:\n - Elements are added, removed, and checked for existence in constant time\n (O(1)).\n - Elements are enumerated in O(n). No guarantees are made on the ordering.\n - Set can be cleared (all elements removed) in O(n).\n ```solidity\n contract Example {\n // Add the library methods\n using EnumerableSet for EnumerableSet.AddressSet;\n // Declare a set state variable\n EnumerableSet.AddressSet private mySet;\n }\n ```\n The following types are supported:\n - `bytes32` (`Bytes32Set`) since v3.3.0\n - `address` (`AddressSet`) since v3.3.0\n - `uint256` (`UintSet`) since v3.3.0\n - `string` (`StringSet`) since v5.4.0\n - `bytes` (`BytesSet`) since v5.4.0\n [WARNING]\n ====\n Trying to delete such a structure from storage will likely result in data corruption, rendering the structure\n unusable.\n See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.\n In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an\n array of EnumerableSet.\n ===="},"fullyImplemented":true,"id":17618,"linearizedBaseContracts":[17618],"name":"EnumerableSet","nameLocation":"1594:13:72","nodeType":"ContractDefinition","nodes":[{"canonicalName":"EnumerableSet.Set","id":16107,"members":[{"constant":false,"id":16102,"mutability":"mutable","name":"_values","nameLocation":"2118:7:72","nodeType":"VariableDeclaration","scope":16107,"src":"2108:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16100,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2108:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16101,"nodeType":"ArrayTypeName","src":"2108:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":16106,"mutability":"mutable","name":"_positions","nameLocation":"2310:10:72","nodeType":"VariableDeclaration","scope":16107,"src":"2276:44:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"typeName":{"id":16105,"keyName":"value","keyNameLocation":"2292:5:72","keyType":{"id":16103,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2284:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"2276:33:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":16104,"name":"uint256","nodeType":"ElementaryTypeName","src":"2301:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"name":"Set","nameLocation":"2061:3:72","nodeType":"StructDefinition","scope":17618,"src":"2054:273:72","visibility":"public"},{"body":{"id":16148,"nodeType":"Block","src":"2566:337:72","statements":[{"condition":{"id":16122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2580:22:72","subExpression":{"arguments":[{"id":16119,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16111,"src":"2591:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},{"id":16120,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16113,"src":"2596:5:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16118,"name":"_contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16295,"src":"2581:9:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"}},"id":16121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2581:21:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":16146,"nodeType":"Block","src":"2860:37:72","statements":[{"expression":{"hexValue":"66616c7365","id":16144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2881:5:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":16117,"id":16145,"nodeType":"Return","src":"2874:12:72"}]},"id":16147,"nodeType":"IfStatement","src":"2576:321:72","trueBody":{"id":16143,"nodeType":"Block","src":"2604:250:72","statements":[{"expression":{"arguments":[{"id":16128,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16113,"src":"2635:5:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"expression":{"id":16123,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16111,"src":"2618:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16126,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2622:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"2618:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2630:4:72","memberName":"push","nodeType":"MemberAccess","src":"2618:16:72","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$_t_bytes32_$returns$__$attached_to$_t_array$_t_bytes32_$dyn_storage_ptr_$","typeString":"function (bytes32[] storage pointer,bytes32)"}},"id":16129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2618:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16130,"nodeType":"ExpressionStatement","src":"2618:23:72"},{"expression":{"id":16139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":16131,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16111,"src":"2776:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16134,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2780:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16106,"src":"2776:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16135,"indexExpression":{"id":16133,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16113,"src":"2791:5:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2776:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":16136,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16111,"src":"2800:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16137,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2804:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"2800:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2812:6:72","memberName":"length","nodeType":"MemberAccess","src":"2800:18:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2776:42:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16140,"nodeType":"ExpressionStatement","src":"2776:42:72"},{"expression":{"hexValue":"74727565","id":16141,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2839:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":16117,"id":16142,"nodeType":"Return","src":"2832:11:72"}]}}]},"documentation":{"id":16108,"nodeType":"StructuredDocumentation","src":"2333:159:72","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":16149,"implemented":true,"kind":"function","modifiers":[],"name":"_add","nameLocation":"2506:4:72","nodeType":"FunctionDefinition","parameters":{"id":16114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16111,"mutability":"mutable","name":"set","nameLocation":"2523:3:72","nodeType":"VariableDeclaration","scope":16149,"src":"2511:15:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16110,"nodeType":"UserDefinedTypeName","pathNode":{"id":16109,"name":"Set","nameLocations":["2511:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"2511:3:72"},"referencedDeclaration":16107,"src":"2511:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"},{"constant":false,"id":16113,"mutability":"mutable","name":"value","nameLocation":"2536:5:72","nodeType":"VariableDeclaration","scope":16149,"src":"2528:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16112,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2528:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2510:32:72"},"returnParameters":{"id":16117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16116,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16149,"src":"2560:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16115,"name":"bool","nodeType":"ElementaryTypeName","src":"2560:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2559:6:72"},"scope":17618,"src":"2497:406:72","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":16232,"nodeType":"Block","src":"3143:1296:72","statements":[{"assignments":[16161],"declarations":[{"constant":false,"id":16161,"mutability":"mutable","name":"position","nameLocation":"3255:8:72","nodeType":"VariableDeclaration","scope":16232,"src":"3247:16:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16160,"name":"uint256","nodeType":"ElementaryTypeName","src":"3247:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16166,"initialValue":{"baseExpression":{"expression":{"id":16162,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16153,"src":"3266:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16163,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3270:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16106,"src":"3266:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16165,"indexExpression":{"id":16164,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16155,"src":"3281:5:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3266:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3247:40:72"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16167,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16161,"src":"3302:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":16168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3314:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3302:13:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":16230,"nodeType":"Block","src":"4396:37:72","statements":[{"expression":{"hexValue":"66616c7365","id":16228,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4417:5:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":16159,"id":16229,"nodeType":"Return","src":"4410:12:72"}]},"id":16231,"nodeType":"IfStatement","src":"3298:1135:72","trueBody":{"id":16227,"nodeType":"Block","src":"3317:1073:72","statements":[{"assignments":[16171],"declarations":[{"constant":false,"id":16171,"mutability":"mutable","name":"valueIndex","nameLocation":"3677:10:72","nodeType":"VariableDeclaration","scope":16227,"src":"3669:18:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16170,"name":"uint256","nodeType":"ElementaryTypeName","src":"3669:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16175,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16172,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16161,"src":"3690:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":16173,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3701:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3690:12:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3669:33:72"},{"assignments":[16177],"declarations":[{"constant":false,"id":16177,"mutability":"mutable","name":"lastIndex","nameLocation":"3724:9:72","nodeType":"VariableDeclaration","scope":16227,"src":"3716:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16176,"name":"uint256","nodeType":"ElementaryTypeName","src":"3716:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16183,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":16178,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16153,"src":"3736:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16179,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3740:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"3736:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3748:6:72","memberName":"length","nodeType":"MemberAccess","src":"3736:18:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":16181,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3757:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3736:22:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3716:42:72"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16184,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16171,"src":"3777:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":16185,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16177,"src":"3791:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3777:23:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16211,"nodeType":"IfStatement","src":"3773:378:72","trueBody":{"id":16210,"nodeType":"Block","src":"3802:349:72","statements":[{"assignments":[16188],"declarations":[{"constant":false,"id":16188,"mutability":"mutable","name":"lastValue","nameLocation":"3828:9:72","nodeType":"VariableDeclaration","scope":16210,"src":"3820:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16187,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3820:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":16193,"initialValue":{"baseExpression":{"expression":{"id":16189,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16153,"src":"3840:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16190,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3844:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"3840:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16192,"indexExpression":{"id":16191,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16177,"src":"3852:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3840:22:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3820:42:72"},{"expression":{"id":16200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":16194,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16153,"src":"3961:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16197,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3965:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"3961:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16198,"indexExpression":{"id":16196,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16171,"src":"3973:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3961:23:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16199,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16188,"src":"3987:9:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3961:35:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16201,"nodeType":"ExpressionStatement","src":"3961:35:72"},{"expression":{"id":16208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":16202,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16153,"src":"4100:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16205,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4104:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16106,"src":"4100:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16206,"indexExpression":{"id":16204,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16188,"src":"4115:9:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4100:25:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16207,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16161,"src":"4128:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4100:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16209,"nodeType":"ExpressionStatement","src":"4100:36:72"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":16212,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16153,"src":"4229:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16215,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4233:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"4229:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4241:3:72","memberName":"pop","nodeType":"MemberAccess","src":"4229:15:72","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_bytes32_$dyn_storage_ptr_$","typeString":"function (bytes32[] storage pointer)"}},"id":16217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4229:17:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16218,"nodeType":"ExpressionStatement","src":"4229:17:72"},{"expression":{"id":16223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"4325:28:72","subExpression":{"baseExpression":{"expression":{"id":16219,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16153,"src":"4332:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16220,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4336:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16106,"src":"4332:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16222,"indexExpression":{"id":16221,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16155,"src":"4347:5:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4332:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16224,"nodeType":"ExpressionStatement","src":"4325:28:72"},{"expression":{"hexValue":"74727565","id":16225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4375:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":16159,"id":16226,"nodeType":"Return","src":"4368:11:72"}]}}]},"documentation":{"id":16150,"nodeType":"StructuredDocumentation","src":"2909:157:72","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":16233,"implemented":true,"kind":"function","modifiers":[],"name":"_remove","nameLocation":"3080:7:72","nodeType":"FunctionDefinition","parameters":{"id":16156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16153,"mutability":"mutable","name":"set","nameLocation":"3100:3:72","nodeType":"VariableDeclaration","scope":16233,"src":"3088:15:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16152,"nodeType":"UserDefinedTypeName","pathNode":{"id":16151,"name":"Set","nameLocations":["3088:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"3088:3:72"},"referencedDeclaration":16107,"src":"3088:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"},{"constant":false,"id":16155,"mutability":"mutable","name":"value","nameLocation":"3113:5:72","nodeType":"VariableDeclaration","scope":16233,"src":"3105:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16154,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3105:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3087:32:72"},"returnParameters":{"id":16159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16158,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16233,"src":"3137:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16157,"name":"bool","nodeType":"ElementaryTypeName","src":"3137:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3136:6:72"},"scope":17618,"src":"3071:1368:72","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":16275,"nodeType":"Block","src":"4824:196:72","statements":[{"assignments":[16241],"declarations":[{"constant":false,"id":16241,"mutability":"mutable","name":"len","nameLocation":"4842:3:72","nodeType":"VariableDeclaration","scope":16275,"src":"4834:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16240,"name":"uint256","nodeType":"ElementaryTypeName","src":"4834:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16245,"initialValue":{"arguments":[{"id":16243,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16237,"src":"4856:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}],"id":16242,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16309,"src":"4848:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (uint256)"}},"id":16244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4848:12:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4834:26:72"},{"body":{"id":16265,"nodeType":"Block","src":"4904:62:72","statements":[{"expression":{"id":16263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"4918:37:72","subExpression":{"baseExpression":{"expression":{"id":16256,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16237,"src":"4925:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16257,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4929:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16106,"src":"4925:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16262,"indexExpression":{"baseExpression":{"expression":{"id":16258,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16237,"src":"4940:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16259,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4944:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"4940:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16261,"indexExpression":{"id":16260,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16247,"src":"4952:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4940:14:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4925:30:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16264,"nodeType":"ExpressionStatement","src":"4918:37:72"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16250,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16247,"src":"4890:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":16251,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16241,"src":"4894:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4890:7:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16266,"initializationExpression":{"assignments":[16247],"declarations":[{"constant":false,"id":16247,"mutability":"mutable","name":"i","nameLocation":"4883:1:72","nodeType":"VariableDeclaration","scope":16266,"src":"4875:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16246,"name":"uint256","nodeType":"ElementaryTypeName","src":"4875:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16249,"initialValue":{"hexValue":"30","id":16248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4887:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4875:13:72"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":16254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4899:3:72","subExpression":{"id":16253,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16247,"src":"4901:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16255,"nodeType":"ExpressionStatement","src":"4899:3:72"},"nodeType":"ForStatement","src":"4870:96:72"},{"expression":{"arguments":[{"expression":{"id":16270,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16237,"src":"4998:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16271,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5002:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"4998:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},{"hexValue":"30","id":16272,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5011:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":16267,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12304,"src":"4975:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Arrays_$12304_$","typeString":"type(library Arrays)"}},"id":16269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4982:15:72","memberName":"unsafeSetLength","nodeType":"MemberAccess","referencedDeclaration":12270,"src":"4975:22:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$_t_uint256_$returns$__$","typeString":"function (bytes32[] storage pointer,uint256)"}},"id":16273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4975:38:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16274,"nodeType":"ExpressionStatement","src":"4975:38:72"}]},"documentation":{"id":16234,"nodeType":"StructuredDocumentation","src":"4445:333:72","text":" @dev Removes all the values from a set. O(n).\n WARNING: This function has an unbounded cost that scales with set size. Developers should keep in mind that\n using it may render the function uncallable if the set grows to the point where clearing it consumes too much\n gas to fit in a block."},"id":16276,"implemented":true,"kind":"function","modifiers":[],"name":"_clear","nameLocation":"4792:6:72","nodeType":"FunctionDefinition","parameters":{"id":16238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16237,"mutability":"mutable","name":"set","nameLocation":"4811:3:72","nodeType":"VariableDeclaration","scope":16276,"src":"4799:15:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16236,"nodeType":"UserDefinedTypeName","pathNode":{"id":16235,"name":"Set","nameLocations":["4799:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"4799:3:72"},"referencedDeclaration":16107,"src":"4799:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"src":"4798:17:72"},"returnParameters":{"id":16239,"nodeType":"ParameterList","parameters":[],"src":"4824:0:72"},"scope":17618,"src":"4783:237:72","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":16294,"nodeType":"Block","src":"5180:50:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":16287,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16280,"src":"5197:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16288,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5201:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16106,"src":"5197:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16290,"indexExpression":{"id":16289,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16282,"src":"5212:5:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5197:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":16291,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5222:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5197:26:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16286,"id":16293,"nodeType":"Return","src":"5190:33:72"}]},"documentation":{"id":16277,"nodeType":"StructuredDocumentation","src":"5026:70:72","text":" @dev Returns true if the value is in the set. O(1)."},"id":16295,"implemented":true,"kind":"function","modifiers":[],"name":"_contains","nameLocation":"5110:9:72","nodeType":"FunctionDefinition","parameters":{"id":16283,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16280,"mutability":"mutable","name":"set","nameLocation":"5132:3:72","nodeType":"VariableDeclaration","scope":16295,"src":"5120:15:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16279,"nodeType":"UserDefinedTypeName","pathNode":{"id":16278,"name":"Set","nameLocations":["5120:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"5120:3:72"},"referencedDeclaration":16107,"src":"5120:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"},{"constant":false,"id":16282,"mutability":"mutable","name":"value","nameLocation":"5145:5:72","nodeType":"VariableDeclaration","scope":16295,"src":"5137:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16281,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5137:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5119:32:72"},"returnParameters":{"id":16286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16285,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16295,"src":"5174:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16284,"name":"bool","nodeType":"ElementaryTypeName","src":"5174:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5173:6:72"},"scope":17618,"src":"5101:129:72","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":16308,"nodeType":"Block","src":"5376:42:72","statements":[{"expression":{"expression":{"expression":{"id":16304,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16299,"src":"5393:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16305,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5397:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"5393:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5405:6:72","memberName":"length","nodeType":"MemberAccess","src":"5393:18:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16303,"id":16307,"nodeType":"Return","src":"5386:25:72"}]},"documentation":{"id":16296,"nodeType":"StructuredDocumentation","src":"5236:70:72","text":" @dev Returns the number of values on the set. O(1)."},"id":16309,"implemented":true,"kind":"function","modifiers":[],"name":"_length","nameLocation":"5320:7:72","nodeType":"FunctionDefinition","parameters":{"id":16300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16299,"mutability":"mutable","name":"set","nameLocation":"5340:3:72","nodeType":"VariableDeclaration","scope":16309,"src":"5328:15:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16298,"nodeType":"UserDefinedTypeName","pathNode":{"id":16297,"name":"Set","nameLocations":["5328:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"5328:3:72"},"referencedDeclaration":16107,"src":"5328:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"src":"5327:17:72"},"returnParameters":{"id":16303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16302,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16309,"src":"5367:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16301,"name":"uint256","nodeType":"ElementaryTypeName","src":"5367:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5366:9:72"},"scope":17618,"src":"5311:107:72","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":16325,"nodeType":"Block","src":"5836:42:72","statements":[{"expression":{"baseExpression":{"expression":{"id":16320,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16313,"src":"5853:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16321,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5857:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"5853:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16323,"indexExpression":{"id":16322,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16315,"src":"5865:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5853:18:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":16319,"id":16324,"nodeType":"Return","src":"5846:25:72"}]},"documentation":{"id":16310,"nodeType":"StructuredDocumentation","src":"5424:331:72","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":16326,"implemented":true,"kind":"function","modifiers":[],"name":"_at","nameLocation":"5769:3:72","nodeType":"FunctionDefinition","parameters":{"id":16316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16313,"mutability":"mutable","name":"set","nameLocation":"5785:3:72","nodeType":"VariableDeclaration","scope":16326,"src":"5773:15:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16312,"nodeType":"UserDefinedTypeName","pathNode":{"id":16311,"name":"Set","nameLocations":["5773:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"5773:3:72"},"referencedDeclaration":16107,"src":"5773:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"},{"constant":false,"id":16315,"mutability":"mutable","name":"index","nameLocation":"5798:5:72","nodeType":"VariableDeclaration","scope":16326,"src":"5790:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16314,"name":"uint256","nodeType":"ElementaryTypeName","src":"5790:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5772:32:72"},"returnParameters":{"id":16319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16318,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16326,"src":"5827:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16317,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5827:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5826:9:72"},"scope":17618,"src":"5760:118:72","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":16339,"nodeType":"Block","src":"6492:35:72","statements":[{"expression":{"expression":{"id":16336,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16330,"src":"6509:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16337,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6513:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"6509:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"functionReturnParameters":16335,"id":16338,"nodeType":"Return","src":"6502:18:72"}]},"documentation":{"id":16327,"nodeType":"StructuredDocumentation","src":"5884:529:72","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16340,"implemented":true,"kind":"function","modifiers":[],"name":"_values","nameLocation":"6427:7:72","nodeType":"FunctionDefinition","parameters":{"id":16331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16330,"mutability":"mutable","name":"set","nameLocation":"6447:3:72","nodeType":"VariableDeclaration","scope":16340,"src":"6435:15:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16329,"nodeType":"UserDefinedTypeName","pathNode":{"id":16328,"name":"Set","nameLocations":["6435:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"6435:3:72"},"referencedDeclaration":16107,"src":"6435:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"src":"6434:17:72"},"returnParameters":{"id":16335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16334,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16340,"src":"6474:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16332,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6474:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16333,"nodeType":"ArrayTypeName","src":"6474:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"6473:18:72"},"scope":17618,"src":"6418:109:72","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":16418,"nodeType":"Block","src":"7173:392:72","statements":[{"id":16417,"nodeType":"UncheckedBlock","src":"7183:376:72","statements":[{"expression":{"id":16362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16354,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16348,"src":"7207:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16357,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16348,"src":"7222:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":16359,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16344,"src":"7235:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}],"id":16358,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16309,"src":"7227:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (uint256)"}},"id":16360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7227:12:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16355,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"7213:4:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":16356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7218:3:72","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":13033,"src":"7213:8:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":16361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7213:27:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7207:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16363,"nodeType":"ExpressionStatement","src":"7207:33:72"},{"expression":{"id":16370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16364,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16346,"src":"7254:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16367,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16346,"src":"7271:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16368,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16348,"src":"7278:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16365,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"7262:4:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":16366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7267:3:72","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":13033,"src":"7262:8:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":16369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7262:20:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7254:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16371,"nodeType":"ExpressionStatement","src":"7254:28:72"},{"assignments":[16373],"declarations":[{"constant":false,"id":16373,"mutability":"mutable","name":"len","nameLocation":"7305:3:72","nodeType":"VariableDeclaration","scope":16417,"src":"7297:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16372,"name":"uint256","nodeType":"ElementaryTypeName","src":"7297:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16377,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16374,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16348,"src":"7311:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":16375,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16346,"src":"7317:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7311:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7297:25:72"},{"assignments":[16382],"declarations":[{"constant":false,"id":16382,"mutability":"mutable","name":"result","nameLocation":"7353:6:72","nodeType":"VariableDeclaration","scope":16417,"src":"7336:23:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16380,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7336:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16381,"nodeType":"ArrayTypeName","src":"7336:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16388,"initialValue":{"arguments":[{"id":16386,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16373,"src":"7376:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16385,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"7362:13:72","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":16383,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7366:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16384,"nodeType":"ArrayTypeName","src":"7366:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":16387,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7362:18:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"7336:44:72"},{"body":{"id":16413,"nodeType":"Block","src":"7428:94:72","statements":[{"expression":{"id":16411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":16399,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16382,"src":"7446:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":16401,"indexExpression":{"id":16400,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16390,"src":"7453:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7446:9:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"expression":{"id":16404,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16344,"src":"7478:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16405,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7482:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"7478:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16406,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16346,"src":"7491:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16407,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16390,"src":"7499:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7491:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16402,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12304,"src":"7458:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Arrays_$12304_$","typeString":"type(library Arrays)"}},"id":16403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7465:12:72","memberName":"unsafeAccess","nodeType":"MemberAccess","referencedDeclaration":12105,"src":"7458:19:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_bytes32_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_Bytes32Slot_$12582_storage_ptr_$","typeString":"function (bytes32[] storage pointer,uint256) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":16409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7458:43:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$12582_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":16410,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7502:5:72","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12581,"src":"7458:49:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7446:61:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16412,"nodeType":"ExpressionStatement","src":"7446:61:72"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16393,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16390,"src":"7414:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":16394,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16373,"src":"7418:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7414:7:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16414,"initializationExpression":{"assignments":[16390],"declarations":[{"constant":false,"id":16390,"mutability":"mutable","name":"i","nameLocation":"7407:1:72","nodeType":"VariableDeclaration","scope":16414,"src":"7399:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16389,"name":"uint256","nodeType":"ElementaryTypeName","src":"7399:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16392,"initialValue":{"hexValue":"30","id":16391,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7411:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7399:13:72"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":16397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7423:3:72","subExpression":{"id":16396,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16390,"src":"7425:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16398,"nodeType":"ExpressionStatement","src":"7423:3:72"},"nodeType":"ForStatement","src":"7394:128:72"},{"expression":{"id":16415,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16382,"src":"7542:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":16353,"id":16416,"nodeType":"Return","src":"7535:13:72"}]}]},"documentation":{"id":16341,"nodeType":"StructuredDocumentation","src":"6533:533:72","text":" @dev Return a slice of the set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16419,"implemented":true,"kind":"function","modifiers":[],"name":"_values","nameLocation":"7080:7:72","nodeType":"FunctionDefinition","parameters":{"id":16349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16344,"mutability":"mutable","name":"set","nameLocation":"7100:3:72","nodeType":"VariableDeclaration","scope":16419,"src":"7088:15:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16343,"nodeType":"UserDefinedTypeName","pathNode":{"id":16342,"name":"Set","nameLocations":["7088:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"7088:3:72"},"referencedDeclaration":16107,"src":"7088:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"},{"constant":false,"id":16346,"mutability":"mutable","name":"start","nameLocation":"7113:5:72","nodeType":"VariableDeclaration","scope":16419,"src":"7105:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16345,"name":"uint256","nodeType":"ElementaryTypeName","src":"7105:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16348,"mutability":"mutable","name":"end","nameLocation":"7128:3:72","nodeType":"VariableDeclaration","scope":16419,"src":"7120:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16347,"name":"uint256","nodeType":"ElementaryTypeName","src":"7120:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7087:45:72"},"returnParameters":{"id":16353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16352,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16419,"src":"7155:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16350,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7155:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16351,"nodeType":"ArrayTypeName","src":"7155:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"7154:18:72"},"scope":17618,"src":"7071:494:72","stateMutability":"view","virtual":false,"visibility":"private"},{"canonicalName":"EnumerableSet.Bytes32Set","id":16423,"members":[{"constant":false,"id":16422,"mutability":"mutable","name":"_inner","nameLocation":"7622:6:72","nodeType":"VariableDeclaration","scope":16423,"src":"7618:10:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16421,"nodeType":"UserDefinedTypeName","pathNode":{"id":16420,"name":"Set","nameLocations":["7618:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"7618:3:72"},"referencedDeclaration":16107,"src":"7618:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"name":"Bytes32Set","nameLocation":"7597:10:72","nodeType":"StructDefinition","scope":17618,"src":"7590:45:72","visibility":"public"},{"body":{"id":16440,"nodeType":"Block","src":"7881:47:72","statements":[{"expression":{"arguments":[{"expression":{"id":16435,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16427,"src":"7903:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16436,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7907:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16422,"src":"7903:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16437,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16429,"src":"7915:5:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16434,"name":"_add","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16149,"src":"7898:4:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":16438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7898:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16433,"id":16439,"nodeType":"Return","src":"7891:30:72"}]},"documentation":{"id":16424,"nodeType":"StructuredDocumentation","src":"7641:159:72","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":16441,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"7814:3:72","nodeType":"FunctionDefinition","parameters":{"id":16430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16427,"mutability":"mutable","name":"set","nameLocation":"7837:3:72","nodeType":"VariableDeclaration","scope":16441,"src":"7818:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16426,"nodeType":"UserDefinedTypeName","pathNode":{"id":16425,"name":"Bytes32Set","nameLocations":["7818:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16423,"src":"7818:10:72"},"referencedDeclaration":16423,"src":"7818:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"},{"constant":false,"id":16429,"mutability":"mutable","name":"value","nameLocation":"7850:5:72","nodeType":"VariableDeclaration","scope":16441,"src":"7842:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16428,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7842:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7817:39:72"},"returnParameters":{"id":16433,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16432,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16441,"src":"7875:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16431,"name":"bool","nodeType":"ElementaryTypeName","src":"7875:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7874:6:72"},"scope":17618,"src":"7805:123:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16458,"nodeType":"Block","src":"8175:50:72","statements":[{"expression":{"arguments":[{"expression":{"id":16453,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16445,"src":"8200:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16454,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8204:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16422,"src":"8200:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16455,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16447,"src":"8212:5:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16452,"name":"_remove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16233,"src":"8192:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":16456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8192:26:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16451,"id":16457,"nodeType":"Return","src":"8185:33:72"}]},"documentation":{"id":16442,"nodeType":"StructuredDocumentation","src":"7934:157:72","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":16459,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"8105:6:72","nodeType":"FunctionDefinition","parameters":{"id":16448,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16445,"mutability":"mutable","name":"set","nameLocation":"8131:3:72","nodeType":"VariableDeclaration","scope":16459,"src":"8112:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16444,"nodeType":"UserDefinedTypeName","pathNode":{"id":16443,"name":"Bytes32Set","nameLocations":["8112:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16423,"src":"8112:10:72"},"referencedDeclaration":16423,"src":"8112:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"},{"constant":false,"id":16447,"mutability":"mutable","name":"value","nameLocation":"8144:5:72","nodeType":"VariableDeclaration","scope":16459,"src":"8136:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16446,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8136:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8111:39:72"},"returnParameters":{"id":16451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16450,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16459,"src":"8169:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16449,"name":"bool","nodeType":"ElementaryTypeName","src":"8169:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8168:6:72"},"scope":17618,"src":"8096:129:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16471,"nodeType":"Block","src":"8587:35:72","statements":[{"expression":{"arguments":[{"expression":{"id":16467,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16463,"src":"8604:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16468,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8608:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16422,"src":"8604:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16466,"name":"_clear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16276,"src":"8597:6:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16107_storage_ptr_$returns$__$","typeString":"function (struct EnumerableSet.Set storage pointer)"}},"id":16469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8597:18:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16470,"nodeType":"ExpressionStatement","src":"8597:18:72"}]},"documentation":{"id":16460,"nodeType":"StructuredDocumentation","src":"8231:303:72","text":" @dev Removes all the values from a set. O(n).\n WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block."},"id":16472,"implemented":true,"kind":"function","modifiers":[],"name":"clear","nameLocation":"8548:5:72","nodeType":"FunctionDefinition","parameters":{"id":16464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16463,"mutability":"mutable","name":"set","nameLocation":"8573:3:72","nodeType":"VariableDeclaration","scope":16472,"src":"8554:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16462,"nodeType":"UserDefinedTypeName","pathNode":{"id":16461,"name":"Bytes32Set","nameLocations":["8554:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16423,"src":"8554:10:72"},"referencedDeclaration":16423,"src":"8554:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"}],"src":"8553:24:72"},"returnParameters":{"id":16465,"nodeType":"ParameterList","parameters":[],"src":"8587:0:72"},"scope":17618,"src":"8539:83:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16489,"nodeType":"Block","src":"8789:52:72","statements":[{"expression":{"arguments":[{"expression":{"id":16484,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16476,"src":"8816:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16485,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8820:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16422,"src":"8816:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16486,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16478,"src":"8828:5:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16483,"name":"_contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16295,"src":"8806:9:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"}},"id":16487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8806:28:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16482,"id":16488,"nodeType":"Return","src":"8799:35:72"}]},"documentation":{"id":16473,"nodeType":"StructuredDocumentation","src":"8628:70:72","text":" @dev Returns true if the value is in the set. O(1)."},"id":16490,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"8712:8:72","nodeType":"FunctionDefinition","parameters":{"id":16479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16476,"mutability":"mutable","name":"set","nameLocation":"8740:3:72","nodeType":"VariableDeclaration","scope":16490,"src":"8721:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16475,"nodeType":"UserDefinedTypeName","pathNode":{"id":16474,"name":"Bytes32Set","nameLocations":["8721:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16423,"src":"8721:10:72"},"referencedDeclaration":16423,"src":"8721:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"},{"constant":false,"id":16478,"mutability":"mutable","name":"value","nameLocation":"8753:5:72","nodeType":"VariableDeclaration","scope":16490,"src":"8745:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16477,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8745:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8720:39:72"},"returnParameters":{"id":16482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16481,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16490,"src":"8783:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16480,"name":"bool","nodeType":"ElementaryTypeName","src":"8783:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8782:6:72"},"scope":17618,"src":"8703:138:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16504,"nodeType":"Block","src":"8994:43:72","statements":[{"expression":{"arguments":[{"expression":{"id":16500,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16494,"src":"9019:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16501,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9023:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16422,"src":"9019:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16499,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16309,"src":"9011:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (uint256)"}},"id":16502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9011:19:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16498,"id":16503,"nodeType":"Return","src":"9004:26:72"}]},"documentation":{"id":16491,"nodeType":"StructuredDocumentation","src":"8847:70:72","text":" @dev Returns the number of values in the set. O(1)."},"id":16505,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"8931:6:72","nodeType":"FunctionDefinition","parameters":{"id":16495,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16494,"mutability":"mutable","name":"set","nameLocation":"8957:3:72","nodeType":"VariableDeclaration","scope":16505,"src":"8938:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16493,"nodeType":"UserDefinedTypeName","pathNode":{"id":16492,"name":"Bytes32Set","nameLocations":["8938:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16423,"src":"8938:10:72"},"referencedDeclaration":16423,"src":"8938:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"}],"src":"8937:24:72"},"returnParameters":{"id":16498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16497,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16505,"src":"8985:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16496,"name":"uint256","nodeType":"ElementaryTypeName","src":"8985:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8984:9:72"},"scope":17618,"src":"8922:115:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16522,"nodeType":"Block","src":"9462:46:72","statements":[{"expression":{"arguments":[{"expression":{"id":16517,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16509,"src":"9483:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16518,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9487:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16422,"src":"9483:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16519,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16511,"src":"9495:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16516,"name":"_at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16326,"src":"9479:3:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256) view returns (bytes32)"}},"id":16520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9479:22:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":16515,"id":16521,"nodeType":"Return","src":"9472:29:72"}]},"documentation":{"id":16506,"nodeType":"StructuredDocumentation","src":"9043:331:72","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":16523,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"9388:2:72","nodeType":"FunctionDefinition","parameters":{"id":16512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16509,"mutability":"mutable","name":"set","nameLocation":"9410:3:72","nodeType":"VariableDeclaration","scope":16523,"src":"9391:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16508,"nodeType":"UserDefinedTypeName","pathNode":{"id":16507,"name":"Bytes32Set","nameLocations":["9391:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16423,"src":"9391:10:72"},"referencedDeclaration":16423,"src":"9391:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"},{"constant":false,"id":16511,"mutability":"mutable","name":"index","nameLocation":"9423:5:72","nodeType":"VariableDeclaration","scope":16523,"src":"9415:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16510,"name":"uint256","nodeType":"ElementaryTypeName","src":"9415:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9390:39:72"},"returnParameters":{"id":16515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16514,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16523,"src":"9453:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16513,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9453:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9452:9:72"},"scope":17618,"src":"9379:129:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16552,"nodeType":"Block","src":"10129:192:72","statements":[{"assignments":[16537],"declarations":[{"constant":false,"id":16537,"mutability":"mutable","name":"store","nameLocation":"10156:5:72","nodeType":"VariableDeclaration","scope":16552,"src":"10139:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16535,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10139:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16536,"nodeType":"ArrayTypeName","src":"10139:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16542,"initialValue":{"arguments":[{"expression":{"id":16539,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16527,"src":"10172:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16540,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10176:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16422,"src":"10172:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16538,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[16340,16419],"referencedDeclaration":16340,"src":"10164:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (bytes32[] memory)"}},"id":16541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10164:19:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10139:44:72"},{"assignments":[16547],"declarations":[{"constant":false,"id":16547,"mutability":"mutable","name":"result","nameLocation":"10210:6:72","nodeType":"VariableDeclaration","scope":16552,"src":"10193:23:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16545,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10193:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16546,"nodeType":"ArrayTypeName","src":"10193:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16548,"nodeType":"VariableDeclarationStatement","src":"10193:23:72"},{"AST":{"nativeSrc":"10252:39:72","nodeType":"YulBlock","src":"10252:39:72","statements":[{"nativeSrc":"10266:15:72","nodeType":"YulAssignment","src":"10266:15:72","value":{"name":"store","nativeSrc":"10276:5:72","nodeType":"YulIdentifier","src":"10276:5:72"},"variableNames":[{"name":"result","nativeSrc":"10266:6:72","nodeType":"YulIdentifier","src":"10266:6:72"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16547,"isOffset":false,"isSlot":false,"src":"10266:6:72","valueSize":1},{"declaration":16537,"isOffset":false,"isSlot":false,"src":"10276:5:72","valueSize":1}],"flags":["memory-safe"],"id":16549,"nodeType":"InlineAssembly","src":"10227:64:72"},{"expression":{"id":16550,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16547,"src":"10308:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":16532,"id":16551,"nodeType":"Return","src":"10301:13:72"}]},"documentation":{"id":16524,"nodeType":"StructuredDocumentation","src":"9514:529:72","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16553,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"10057:6:72","nodeType":"FunctionDefinition","parameters":{"id":16528,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16527,"mutability":"mutable","name":"set","nameLocation":"10083:3:72","nodeType":"VariableDeclaration","scope":16553,"src":"10064:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16526,"nodeType":"UserDefinedTypeName","pathNode":{"id":16525,"name":"Bytes32Set","nameLocations":["10064:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16423,"src":"10064:10:72"},"referencedDeclaration":16423,"src":"10064:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"}],"src":"10063:24:72"},"returnParameters":{"id":16532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16531,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16553,"src":"10111:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16529,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10111:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16530,"nodeType":"ArrayTypeName","src":"10111:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"10110:18:72"},"scope":17618,"src":"10048:273:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16588,"nodeType":"Block","src":"10974:204:72","statements":[{"assignments":[16571],"declarations":[{"constant":false,"id":16571,"mutability":"mutable","name":"store","nameLocation":"11001:5:72","nodeType":"VariableDeclaration","scope":16588,"src":"10984:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16569,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10984:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16570,"nodeType":"ArrayTypeName","src":"10984:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16578,"initialValue":{"arguments":[{"expression":{"id":16573,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16557,"src":"11017:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16574,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11021:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16422,"src":"11017:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16575,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16559,"src":"11029:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16576,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16561,"src":"11036:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16572,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[16340,16419],"referencedDeclaration":16419,"src":"11009:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256,uint256) view returns (bytes32[] memory)"}},"id":16577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11009:31:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10984:56:72"},{"assignments":[16583],"declarations":[{"constant":false,"id":16583,"mutability":"mutable","name":"result","nameLocation":"11067:6:72","nodeType":"VariableDeclaration","scope":16588,"src":"11050:23:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16581,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11050:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16582,"nodeType":"ArrayTypeName","src":"11050:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16584,"nodeType":"VariableDeclarationStatement","src":"11050:23:72"},{"AST":{"nativeSrc":"11109:39:72","nodeType":"YulBlock","src":"11109:39:72","statements":[{"nativeSrc":"11123:15:72","nodeType":"YulAssignment","src":"11123:15:72","value":{"name":"store","nativeSrc":"11133:5:72","nodeType":"YulIdentifier","src":"11133:5:72"},"variableNames":[{"name":"result","nativeSrc":"11123:6:72","nodeType":"YulIdentifier","src":"11123:6:72"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16583,"isOffset":false,"isSlot":false,"src":"11123:6:72","valueSize":1},{"declaration":16571,"isOffset":false,"isSlot":false,"src":"11133:5:72","valueSize":1}],"flags":["memory-safe"],"id":16585,"nodeType":"InlineAssembly","src":"11084:64:72"},{"expression":{"id":16586,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16583,"src":"11165:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":16566,"id":16587,"nodeType":"Return","src":"11158:13:72"}]},"documentation":{"id":16554,"nodeType":"StructuredDocumentation","src":"10327:533:72","text":" @dev Return a slice of the set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16589,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"10874:6:72","nodeType":"FunctionDefinition","parameters":{"id":16562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16557,"mutability":"mutable","name":"set","nameLocation":"10900:3:72","nodeType":"VariableDeclaration","scope":16589,"src":"10881:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16556,"nodeType":"UserDefinedTypeName","pathNode":{"id":16555,"name":"Bytes32Set","nameLocations":["10881:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16423,"src":"10881:10:72"},"referencedDeclaration":16423,"src":"10881:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"},{"constant":false,"id":16559,"mutability":"mutable","name":"start","nameLocation":"10913:5:72","nodeType":"VariableDeclaration","scope":16589,"src":"10905:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16558,"name":"uint256","nodeType":"ElementaryTypeName","src":"10905:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16561,"mutability":"mutable","name":"end","nameLocation":"10928:3:72","nodeType":"VariableDeclaration","scope":16589,"src":"10920:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16560,"name":"uint256","nodeType":"ElementaryTypeName","src":"10920:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10880:52:72"},"returnParameters":{"id":16566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16565,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16589,"src":"10956:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16563,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10956:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16564,"nodeType":"ArrayTypeName","src":"10956:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"10955:18:72"},"scope":17618,"src":"10865:313:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"EnumerableSet.AddressSet","id":16593,"members":[{"constant":false,"id":16592,"mutability":"mutable","name":"_inner","nameLocation":"11235:6:72","nodeType":"VariableDeclaration","scope":16593,"src":"11231:10:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16591,"nodeType":"UserDefinedTypeName","pathNode":{"id":16590,"name":"Set","nameLocations":["11231:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"11231:3:72"},"referencedDeclaration":16107,"src":"11231:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"name":"AddressSet","nameLocation":"11210:10:72","nodeType":"StructDefinition","scope":17618,"src":"11203:45:72","visibility":"public"},{"body":{"id":16619,"nodeType":"Block","src":"11494:74:72","statements":[{"expression":{"arguments":[{"expression":{"id":16605,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16597,"src":"11516:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16606,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11520:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16592,"src":"11516:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"arguments":[{"arguments":[{"id":16613,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16599,"src":"11552:5:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16612,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11544:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":16611,"name":"uint160","nodeType":"ElementaryTypeName","src":"11544:7:72","typeDescriptions":{}}},"id":16614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11544:14:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":16610,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11536:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16609,"name":"uint256","nodeType":"ElementaryTypeName","src":"11536:7:72","typeDescriptions":{}}},"id":16615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11536:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16608,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11528:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16607,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11528:7:72","typeDescriptions":{}}},"id":16616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11528:32:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16604,"name":"_add","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16149,"src":"11511:4:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":16617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11511:50:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16603,"id":16618,"nodeType":"Return","src":"11504:57:72"}]},"documentation":{"id":16594,"nodeType":"StructuredDocumentation","src":"11254:159:72","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":16620,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"11427:3:72","nodeType":"FunctionDefinition","parameters":{"id":16600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16597,"mutability":"mutable","name":"set","nameLocation":"11450:3:72","nodeType":"VariableDeclaration","scope":16620,"src":"11431:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16596,"nodeType":"UserDefinedTypeName","pathNode":{"id":16595,"name":"AddressSet","nameLocations":["11431:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"11431:10:72"},"referencedDeclaration":16593,"src":"11431:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":16599,"mutability":"mutable","name":"value","nameLocation":"11463:5:72","nodeType":"VariableDeclaration","scope":16620,"src":"11455:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16598,"name":"address","nodeType":"ElementaryTypeName","src":"11455:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11430:39:72"},"returnParameters":{"id":16603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16602,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16620,"src":"11488:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16601,"name":"bool","nodeType":"ElementaryTypeName","src":"11488:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11487:6:72"},"scope":17618,"src":"11418:150:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16646,"nodeType":"Block","src":"11815:77:72","statements":[{"expression":{"arguments":[{"expression":{"id":16632,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16624,"src":"11840:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16633,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11844:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16592,"src":"11840:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"arguments":[{"arguments":[{"id":16640,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16626,"src":"11876:5:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16639,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11868:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":16638,"name":"uint160","nodeType":"ElementaryTypeName","src":"11868:7:72","typeDescriptions":{}}},"id":16641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11868:14:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":16637,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11860:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16636,"name":"uint256","nodeType":"ElementaryTypeName","src":"11860:7:72","typeDescriptions":{}}},"id":16642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11860:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16635,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11852:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16634,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11852:7:72","typeDescriptions":{}}},"id":16643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11852:32:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16631,"name":"_remove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16233,"src":"11832:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":16644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11832:53:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16630,"id":16645,"nodeType":"Return","src":"11825:60:72"}]},"documentation":{"id":16621,"nodeType":"StructuredDocumentation","src":"11574:157:72","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":16647,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"11745:6:72","nodeType":"FunctionDefinition","parameters":{"id":16627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16624,"mutability":"mutable","name":"set","nameLocation":"11771:3:72","nodeType":"VariableDeclaration","scope":16647,"src":"11752:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16623,"nodeType":"UserDefinedTypeName","pathNode":{"id":16622,"name":"AddressSet","nameLocations":["11752:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"11752:10:72"},"referencedDeclaration":16593,"src":"11752:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":16626,"mutability":"mutable","name":"value","nameLocation":"11784:5:72","nodeType":"VariableDeclaration","scope":16647,"src":"11776:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16625,"name":"address","nodeType":"ElementaryTypeName","src":"11776:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11751:39:72"},"returnParameters":{"id":16630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16629,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16647,"src":"11809:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16628,"name":"bool","nodeType":"ElementaryTypeName","src":"11809:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11808:6:72"},"scope":17618,"src":"11736:156:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16659,"nodeType":"Block","src":"12254:35:72","statements":[{"expression":{"arguments":[{"expression":{"id":16655,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16651,"src":"12271:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16656,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12275:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16592,"src":"12271:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16654,"name":"_clear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16276,"src":"12264:6:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16107_storage_ptr_$returns$__$","typeString":"function (struct EnumerableSet.Set storage pointer)"}},"id":16657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12264:18:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16658,"nodeType":"ExpressionStatement","src":"12264:18:72"}]},"documentation":{"id":16648,"nodeType":"StructuredDocumentation","src":"11898:303:72","text":" @dev Removes all the values from a set. O(n).\n WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block."},"id":16660,"implemented":true,"kind":"function","modifiers":[],"name":"clear","nameLocation":"12215:5:72","nodeType":"FunctionDefinition","parameters":{"id":16652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16651,"mutability":"mutable","name":"set","nameLocation":"12240:3:72","nodeType":"VariableDeclaration","scope":16660,"src":"12221:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16650,"nodeType":"UserDefinedTypeName","pathNode":{"id":16649,"name":"AddressSet","nameLocations":["12221:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"12221:10:72"},"referencedDeclaration":16593,"src":"12221:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"12220:24:72"},"returnParameters":{"id":16653,"nodeType":"ParameterList","parameters":[],"src":"12254:0:72"},"scope":17618,"src":"12206:83:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16686,"nodeType":"Block","src":"12456:79:72","statements":[{"expression":{"arguments":[{"expression":{"id":16672,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16664,"src":"12483:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16673,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12487:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16592,"src":"12483:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"arguments":[{"arguments":[{"id":16680,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16666,"src":"12519:5:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16679,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12511:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":16678,"name":"uint160","nodeType":"ElementaryTypeName","src":"12511:7:72","typeDescriptions":{}}},"id":16681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12511:14:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":16677,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12503:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16676,"name":"uint256","nodeType":"ElementaryTypeName","src":"12503:7:72","typeDescriptions":{}}},"id":16682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12503:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16675,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12495:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16674,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12495:7:72","typeDescriptions":{}}},"id":16683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12495:32:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16671,"name":"_contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16295,"src":"12473:9:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"}},"id":16684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12473:55:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16670,"id":16685,"nodeType":"Return","src":"12466:62:72"}]},"documentation":{"id":16661,"nodeType":"StructuredDocumentation","src":"12295:70:72","text":" @dev Returns true if the value is in the set. O(1)."},"id":16687,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"12379:8:72","nodeType":"FunctionDefinition","parameters":{"id":16667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16664,"mutability":"mutable","name":"set","nameLocation":"12407:3:72","nodeType":"VariableDeclaration","scope":16687,"src":"12388:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16663,"nodeType":"UserDefinedTypeName","pathNode":{"id":16662,"name":"AddressSet","nameLocations":["12388:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"12388:10:72"},"referencedDeclaration":16593,"src":"12388:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":16666,"mutability":"mutable","name":"value","nameLocation":"12420:5:72","nodeType":"VariableDeclaration","scope":16687,"src":"12412:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16665,"name":"address","nodeType":"ElementaryTypeName","src":"12412:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12387:39:72"},"returnParameters":{"id":16670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16669,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16687,"src":"12450:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16668,"name":"bool","nodeType":"ElementaryTypeName","src":"12450:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12449:6:72"},"scope":17618,"src":"12370:165:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16701,"nodeType":"Block","src":"12688:43:72","statements":[{"expression":{"arguments":[{"expression":{"id":16697,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16691,"src":"12713:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16698,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12717:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16592,"src":"12713:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16696,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16309,"src":"12705:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (uint256)"}},"id":16699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12705:19:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16695,"id":16700,"nodeType":"Return","src":"12698:26:72"}]},"documentation":{"id":16688,"nodeType":"StructuredDocumentation","src":"12541:70:72","text":" @dev Returns the number of values in the set. O(1)."},"id":16702,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"12625:6:72","nodeType":"FunctionDefinition","parameters":{"id":16692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16691,"mutability":"mutable","name":"set","nameLocation":"12651:3:72","nodeType":"VariableDeclaration","scope":16702,"src":"12632:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16690,"nodeType":"UserDefinedTypeName","pathNode":{"id":16689,"name":"AddressSet","nameLocations":["12632:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"12632:10:72"},"referencedDeclaration":16593,"src":"12632:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"12631:24:72"},"returnParameters":{"id":16695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16694,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16702,"src":"12679:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16693,"name":"uint256","nodeType":"ElementaryTypeName","src":"12679:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12678:9:72"},"scope":17618,"src":"12616:115:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16728,"nodeType":"Block","src":"13156:73:72","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":16720,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16706,"src":"13201:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16721,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13205:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16592,"src":"13201:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16722,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16708,"src":"13213:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16719,"name":"_at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16326,"src":"13197:3:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256) view returns (bytes32)"}},"id":16723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13197:22:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16718,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13189:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16717,"name":"uint256","nodeType":"ElementaryTypeName","src":"13189:7:72","typeDescriptions":{}}},"id":16724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13189:31:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16716,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13181:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":16715,"name":"uint160","nodeType":"ElementaryTypeName","src":"13181:7:72","typeDescriptions":{}}},"id":16725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13181:40:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":16714,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13173:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16713,"name":"address","nodeType":"ElementaryTypeName","src":"13173:7:72","typeDescriptions":{}}},"id":16726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13173:49:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":16712,"id":16727,"nodeType":"Return","src":"13166:56:72"}]},"documentation":{"id":16703,"nodeType":"StructuredDocumentation","src":"12737:331:72","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":16729,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"13082:2:72","nodeType":"FunctionDefinition","parameters":{"id":16709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16706,"mutability":"mutable","name":"set","nameLocation":"13104:3:72","nodeType":"VariableDeclaration","scope":16729,"src":"13085:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16705,"nodeType":"UserDefinedTypeName","pathNode":{"id":16704,"name":"AddressSet","nameLocations":["13085:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"13085:10:72"},"referencedDeclaration":16593,"src":"13085:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":16708,"mutability":"mutable","name":"index","nameLocation":"13117:5:72","nodeType":"VariableDeclaration","scope":16729,"src":"13109:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16707,"name":"uint256","nodeType":"ElementaryTypeName","src":"13109:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13084:39:72"},"returnParameters":{"id":16712,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16711,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16729,"src":"13147:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16710,"name":"address","nodeType":"ElementaryTypeName","src":"13147:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13146:9:72"},"scope":17618,"src":"13073:156:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16758,"nodeType":"Block","src":"13850:192:72","statements":[{"assignments":[16743],"declarations":[{"constant":false,"id":16743,"mutability":"mutable","name":"store","nameLocation":"13877:5:72","nodeType":"VariableDeclaration","scope":16758,"src":"13860:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16741,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13860:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16742,"nodeType":"ArrayTypeName","src":"13860:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16748,"initialValue":{"arguments":[{"expression":{"id":16745,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16733,"src":"13893:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16746,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13897:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16592,"src":"13893:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16744,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[16340,16419],"referencedDeclaration":16340,"src":"13885:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (bytes32[] memory)"}},"id":16747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13885:19:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"13860:44:72"},{"assignments":[16753],"declarations":[{"constant":false,"id":16753,"mutability":"mutable","name":"result","nameLocation":"13931:6:72","nodeType":"VariableDeclaration","scope":16758,"src":"13914:23:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":16751,"name":"address","nodeType":"ElementaryTypeName","src":"13914:7:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16752,"nodeType":"ArrayTypeName","src":"13914:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":16754,"nodeType":"VariableDeclarationStatement","src":"13914:23:72"},{"AST":{"nativeSrc":"13973:39:72","nodeType":"YulBlock","src":"13973:39:72","statements":[{"nativeSrc":"13987:15:72","nodeType":"YulAssignment","src":"13987:15:72","value":{"name":"store","nativeSrc":"13997:5:72","nodeType":"YulIdentifier","src":"13997:5:72"},"variableNames":[{"name":"result","nativeSrc":"13987:6:72","nodeType":"YulIdentifier","src":"13987:6:72"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16753,"isOffset":false,"isSlot":false,"src":"13987:6:72","valueSize":1},{"declaration":16743,"isOffset":false,"isSlot":false,"src":"13997:5:72","valueSize":1}],"flags":["memory-safe"],"id":16755,"nodeType":"InlineAssembly","src":"13948:64:72"},{"expression":{"id":16756,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16753,"src":"14029:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":16738,"id":16757,"nodeType":"Return","src":"14022:13:72"}]},"documentation":{"id":16730,"nodeType":"StructuredDocumentation","src":"13235:529:72","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16759,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"13778:6:72","nodeType":"FunctionDefinition","parameters":{"id":16734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16733,"mutability":"mutable","name":"set","nameLocation":"13804:3:72","nodeType":"VariableDeclaration","scope":16759,"src":"13785:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16732,"nodeType":"UserDefinedTypeName","pathNode":{"id":16731,"name":"AddressSet","nameLocations":["13785:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"13785:10:72"},"referencedDeclaration":16593,"src":"13785:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"13784:24:72"},"returnParameters":{"id":16738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16737,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16759,"src":"13832:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":16735,"name":"address","nodeType":"ElementaryTypeName","src":"13832:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16736,"nodeType":"ArrayTypeName","src":"13832:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"13831:18:72"},"scope":17618,"src":"13769:273:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16794,"nodeType":"Block","src":"14695:204:72","statements":[{"assignments":[16777],"declarations":[{"constant":false,"id":16777,"mutability":"mutable","name":"store","nameLocation":"14722:5:72","nodeType":"VariableDeclaration","scope":16794,"src":"14705:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16775,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14705:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16776,"nodeType":"ArrayTypeName","src":"14705:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16784,"initialValue":{"arguments":[{"expression":{"id":16779,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16763,"src":"14738:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16780,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14742:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16592,"src":"14738:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16781,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16765,"src":"14750:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16782,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16767,"src":"14757:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16778,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[16340,16419],"referencedDeclaration":16419,"src":"14730:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256,uint256) view returns (bytes32[] memory)"}},"id":16783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14730:31:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"14705:56:72"},{"assignments":[16789],"declarations":[{"constant":false,"id":16789,"mutability":"mutable","name":"result","nameLocation":"14788:6:72","nodeType":"VariableDeclaration","scope":16794,"src":"14771:23:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":16787,"name":"address","nodeType":"ElementaryTypeName","src":"14771:7:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16788,"nodeType":"ArrayTypeName","src":"14771:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":16790,"nodeType":"VariableDeclarationStatement","src":"14771:23:72"},{"AST":{"nativeSrc":"14830:39:72","nodeType":"YulBlock","src":"14830:39:72","statements":[{"nativeSrc":"14844:15:72","nodeType":"YulAssignment","src":"14844:15:72","value":{"name":"store","nativeSrc":"14854:5:72","nodeType":"YulIdentifier","src":"14854:5:72"},"variableNames":[{"name":"result","nativeSrc":"14844:6:72","nodeType":"YulIdentifier","src":"14844:6:72"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16789,"isOffset":false,"isSlot":false,"src":"14844:6:72","valueSize":1},{"declaration":16777,"isOffset":false,"isSlot":false,"src":"14854:5:72","valueSize":1}],"flags":["memory-safe"],"id":16791,"nodeType":"InlineAssembly","src":"14805:64:72"},{"expression":{"id":16792,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16789,"src":"14886:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":16772,"id":16793,"nodeType":"Return","src":"14879:13:72"}]},"documentation":{"id":16760,"nodeType":"StructuredDocumentation","src":"14048:533:72","text":" @dev Return a slice of the set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16795,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"14595:6:72","nodeType":"FunctionDefinition","parameters":{"id":16768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16763,"mutability":"mutable","name":"set","nameLocation":"14621:3:72","nodeType":"VariableDeclaration","scope":16795,"src":"14602:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16762,"nodeType":"UserDefinedTypeName","pathNode":{"id":16761,"name":"AddressSet","nameLocations":["14602:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"14602:10:72"},"referencedDeclaration":16593,"src":"14602:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":16765,"mutability":"mutable","name":"start","nameLocation":"14634:5:72","nodeType":"VariableDeclaration","scope":16795,"src":"14626:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16764,"name":"uint256","nodeType":"ElementaryTypeName","src":"14626:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16767,"mutability":"mutable","name":"end","nameLocation":"14649:3:72","nodeType":"VariableDeclaration","scope":16795,"src":"14641:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16766,"name":"uint256","nodeType":"ElementaryTypeName","src":"14641:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14601:52:72"},"returnParameters":{"id":16772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16771,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16795,"src":"14677:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":16769,"name":"address","nodeType":"ElementaryTypeName","src":"14677:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16770,"nodeType":"ArrayTypeName","src":"14677:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"14676:18:72"},"scope":17618,"src":"14586:313:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"EnumerableSet.UintSet","id":16799,"members":[{"constant":false,"id":16798,"mutability":"mutable","name":"_inner","nameLocation":"14950:6:72","nodeType":"VariableDeclaration","scope":16799,"src":"14946:10:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16797,"nodeType":"UserDefinedTypeName","pathNode":{"id":16796,"name":"Set","nameLocations":["14946:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"14946:3:72"},"referencedDeclaration":16107,"src":"14946:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"name":"UintSet","nameLocation":"14928:7:72","nodeType":"StructDefinition","scope":17618,"src":"14921:42:72","visibility":"public"},{"body":{"id":16819,"nodeType":"Block","src":"15206:56:72","statements":[{"expression":{"arguments":[{"expression":{"id":16811,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16803,"src":"15228:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16812,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15232:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16798,"src":"15228:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"id":16815,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16805,"src":"15248:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16814,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15240:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16813,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15240:7:72","typeDescriptions":{}}},"id":16816,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15240:14:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16810,"name":"_add","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16149,"src":"15223:4:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":16817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15223:32:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16809,"id":16818,"nodeType":"Return","src":"15216:39:72"}]},"documentation":{"id":16800,"nodeType":"StructuredDocumentation","src":"14969:159:72","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":16820,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"15142:3:72","nodeType":"FunctionDefinition","parameters":{"id":16806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16803,"mutability":"mutable","name":"set","nameLocation":"15162:3:72","nodeType":"VariableDeclaration","scope":16820,"src":"15146:19:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16802,"nodeType":"UserDefinedTypeName","pathNode":{"id":16801,"name":"UintSet","nameLocations":["15146:7:72"],"nodeType":"IdentifierPath","referencedDeclaration":16799,"src":"15146:7:72"},"referencedDeclaration":16799,"src":"15146:7:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"},{"constant":false,"id":16805,"mutability":"mutable","name":"value","nameLocation":"15175:5:72","nodeType":"VariableDeclaration","scope":16820,"src":"15167:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16804,"name":"uint256","nodeType":"ElementaryTypeName","src":"15167:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15145:36:72"},"returnParameters":{"id":16809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16808,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16820,"src":"15200:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16807,"name":"bool","nodeType":"ElementaryTypeName","src":"15200:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15199:6:72"},"scope":17618,"src":"15133:129:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16840,"nodeType":"Block","src":"15506:59:72","statements":[{"expression":{"arguments":[{"expression":{"id":16832,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16824,"src":"15531:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16833,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15535:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16798,"src":"15531:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"id":16836,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16826,"src":"15551:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16835,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15543:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16834,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15543:7:72","typeDescriptions":{}}},"id":16837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15543:14:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16831,"name":"_remove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16233,"src":"15523:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":16838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15523:35:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16830,"id":16839,"nodeType":"Return","src":"15516:42:72"}]},"documentation":{"id":16821,"nodeType":"StructuredDocumentation","src":"15268:157:72","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":16841,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"15439:6:72","nodeType":"FunctionDefinition","parameters":{"id":16827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16824,"mutability":"mutable","name":"set","nameLocation":"15462:3:72","nodeType":"VariableDeclaration","scope":16841,"src":"15446:19:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16823,"nodeType":"UserDefinedTypeName","pathNode":{"id":16822,"name":"UintSet","nameLocations":["15446:7:72"],"nodeType":"IdentifierPath","referencedDeclaration":16799,"src":"15446:7:72"},"referencedDeclaration":16799,"src":"15446:7:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"},{"constant":false,"id":16826,"mutability":"mutable","name":"value","nameLocation":"15475:5:72","nodeType":"VariableDeclaration","scope":16841,"src":"15467:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16825,"name":"uint256","nodeType":"ElementaryTypeName","src":"15467:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15445:36:72"},"returnParameters":{"id":16830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16829,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16841,"src":"15500:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16828,"name":"bool","nodeType":"ElementaryTypeName","src":"15500:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15499:6:72"},"scope":17618,"src":"15430:135:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16853,"nodeType":"Block","src":"15924:35:72","statements":[{"expression":{"arguments":[{"expression":{"id":16849,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16845,"src":"15941:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16850,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15945:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16798,"src":"15941:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16848,"name":"_clear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16276,"src":"15934:6:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16107_storage_ptr_$returns$__$","typeString":"function (struct EnumerableSet.Set storage pointer)"}},"id":16851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15934:18:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16852,"nodeType":"ExpressionStatement","src":"15934:18:72"}]},"documentation":{"id":16842,"nodeType":"StructuredDocumentation","src":"15571:303:72","text":" @dev Removes all the values from a set. O(n).\n WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block."},"id":16854,"implemented":true,"kind":"function","modifiers":[],"name":"clear","nameLocation":"15888:5:72","nodeType":"FunctionDefinition","parameters":{"id":16846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16845,"mutability":"mutable","name":"set","nameLocation":"15910:3:72","nodeType":"VariableDeclaration","scope":16854,"src":"15894:19:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16844,"nodeType":"UserDefinedTypeName","pathNode":{"id":16843,"name":"UintSet","nameLocations":["15894:7:72"],"nodeType":"IdentifierPath","referencedDeclaration":16799,"src":"15894:7:72"},"referencedDeclaration":16799,"src":"15894:7:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"}],"src":"15893:21:72"},"returnParameters":{"id":16847,"nodeType":"ParameterList","parameters":[],"src":"15924:0:72"},"scope":17618,"src":"15879:80:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16874,"nodeType":"Block","src":"16123:61:72","statements":[{"expression":{"arguments":[{"expression":{"id":16866,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16858,"src":"16150:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16867,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16154:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16798,"src":"16150:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"id":16870,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16860,"src":"16170:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16869,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16162:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16868,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16162:7:72","typeDescriptions":{}}},"id":16871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16162:14:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16865,"name":"_contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16295,"src":"16140:9:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"}},"id":16872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16140:37:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16864,"id":16873,"nodeType":"Return","src":"16133:44:72"}]},"documentation":{"id":16855,"nodeType":"StructuredDocumentation","src":"15965:70:72","text":" @dev Returns true if the value is in the set. O(1)."},"id":16875,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"16049:8:72","nodeType":"FunctionDefinition","parameters":{"id":16861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16858,"mutability":"mutable","name":"set","nameLocation":"16074:3:72","nodeType":"VariableDeclaration","scope":16875,"src":"16058:19:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16857,"nodeType":"UserDefinedTypeName","pathNode":{"id":16856,"name":"UintSet","nameLocations":["16058:7:72"],"nodeType":"IdentifierPath","referencedDeclaration":16799,"src":"16058:7:72"},"referencedDeclaration":16799,"src":"16058:7:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"},{"constant":false,"id":16860,"mutability":"mutable","name":"value","nameLocation":"16087:5:72","nodeType":"VariableDeclaration","scope":16875,"src":"16079:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16859,"name":"uint256","nodeType":"ElementaryTypeName","src":"16079:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16057:36:72"},"returnParameters":{"id":16864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16863,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16875,"src":"16117:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16862,"name":"bool","nodeType":"ElementaryTypeName","src":"16117:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"16116:6:72"},"scope":17618,"src":"16040:144:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16889,"nodeType":"Block","src":"16334:43:72","statements":[{"expression":{"arguments":[{"expression":{"id":16885,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16879,"src":"16359:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16886,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16363:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16798,"src":"16359:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16884,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16309,"src":"16351:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (uint256)"}},"id":16887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16351:19:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16883,"id":16888,"nodeType":"Return","src":"16344:26:72"}]},"documentation":{"id":16876,"nodeType":"StructuredDocumentation","src":"16190:70:72","text":" @dev Returns the number of values in the set. O(1)."},"id":16890,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"16274:6:72","nodeType":"FunctionDefinition","parameters":{"id":16880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16879,"mutability":"mutable","name":"set","nameLocation":"16297:3:72","nodeType":"VariableDeclaration","scope":16890,"src":"16281:19:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16878,"nodeType":"UserDefinedTypeName","pathNode":{"id":16877,"name":"UintSet","nameLocations":["16281:7:72"],"nodeType":"IdentifierPath","referencedDeclaration":16799,"src":"16281:7:72"},"referencedDeclaration":16799,"src":"16281:7:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"}],"src":"16280:21:72"},"returnParameters":{"id":16883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16882,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16890,"src":"16325:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16881,"name":"uint256","nodeType":"ElementaryTypeName","src":"16325:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16324:9:72"},"scope":17618,"src":"16265:112:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16910,"nodeType":"Block","src":"16799:55:72","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":16904,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16894,"src":"16828:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16905,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16832:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16798,"src":"16828:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16906,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16896,"src":"16840:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16903,"name":"_at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16326,"src":"16824:3:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256) view returns (bytes32)"}},"id":16907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16824:22:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16902,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16816:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16901,"name":"uint256","nodeType":"ElementaryTypeName","src":"16816:7:72","typeDescriptions":{}}},"id":16908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16816:31:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16900,"id":16909,"nodeType":"Return","src":"16809:38:72"}]},"documentation":{"id":16891,"nodeType":"StructuredDocumentation","src":"16383:331:72","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":16911,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"16728:2:72","nodeType":"FunctionDefinition","parameters":{"id":16897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16894,"mutability":"mutable","name":"set","nameLocation":"16747:3:72","nodeType":"VariableDeclaration","scope":16911,"src":"16731:19:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16893,"nodeType":"UserDefinedTypeName","pathNode":{"id":16892,"name":"UintSet","nameLocations":["16731:7:72"],"nodeType":"IdentifierPath","referencedDeclaration":16799,"src":"16731:7:72"},"referencedDeclaration":16799,"src":"16731:7:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"},{"constant":false,"id":16896,"mutability":"mutable","name":"index","nameLocation":"16760:5:72","nodeType":"VariableDeclaration","scope":16911,"src":"16752:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16895,"name":"uint256","nodeType":"ElementaryTypeName","src":"16752:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16730:36:72"},"returnParameters":{"id":16900,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16899,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16911,"src":"16790:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16898,"name":"uint256","nodeType":"ElementaryTypeName","src":"16790:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16789:9:72"},"scope":17618,"src":"16719:135:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16940,"nodeType":"Block","src":"17472:192:72","statements":[{"assignments":[16925],"declarations":[{"constant":false,"id":16925,"mutability":"mutable","name":"store","nameLocation":"17499:5:72","nodeType":"VariableDeclaration","scope":16940,"src":"17482:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16923,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17482:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16924,"nodeType":"ArrayTypeName","src":"17482:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16930,"initialValue":{"arguments":[{"expression":{"id":16927,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16915,"src":"17515:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16928,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17519:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16798,"src":"17515:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16926,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[16340,16419],"referencedDeclaration":16340,"src":"17507:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (bytes32[] memory)"}},"id":16929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17507:19:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"17482:44:72"},{"assignments":[16935],"declarations":[{"constant":false,"id":16935,"mutability":"mutable","name":"result","nameLocation":"17553:6:72","nodeType":"VariableDeclaration","scope":16940,"src":"17536:23:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16933,"name":"uint256","nodeType":"ElementaryTypeName","src":"17536:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16934,"nodeType":"ArrayTypeName","src":"17536:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":16936,"nodeType":"VariableDeclarationStatement","src":"17536:23:72"},{"AST":{"nativeSrc":"17595:39:72","nodeType":"YulBlock","src":"17595:39:72","statements":[{"nativeSrc":"17609:15:72","nodeType":"YulAssignment","src":"17609:15:72","value":{"name":"store","nativeSrc":"17619:5:72","nodeType":"YulIdentifier","src":"17619:5:72"},"variableNames":[{"name":"result","nativeSrc":"17609:6:72","nodeType":"YulIdentifier","src":"17609:6:72"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16935,"isOffset":false,"isSlot":false,"src":"17609:6:72","valueSize":1},{"declaration":16925,"isOffset":false,"isSlot":false,"src":"17619:5:72","valueSize":1}],"flags":["memory-safe"],"id":16937,"nodeType":"InlineAssembly","src":"17570:64:72"},{"expression":{"id":16938,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16935,"src":"17651:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":16920,"id":16939,"nodeType":"Return","src":"17644:13:72"}]},"documentation":{"id":16912,"nodeType":"StructuredDocumentation","src":"16860:529:72","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16941,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"17403:6:72","nodeType":"FunctionDefinition","parameters":{"id":16916,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16915,"mutability":"mutable","name":"set","nameLocation":"17426:3:72","nodeType":"VariableDeclaration","scope":16941,"src":"17410:19:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16914,"nodeType":"UserDefinedTypeName","pathNode":{"id":16913,"name":"UintSet","nameLocations":["17410:7:72"],"nodeType":"IdentifierPath","referencedDeclaration":16799,"src":"17410:7:72"},"referencedDeclaration":16799,"src":"17410:7:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"}],"src":"17409:21:72"},"returnParameters":{"id":16920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16919,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16941,"src":"17454:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16917,"name":"uint256","nodeType":"ElementaryTypeName","src":"17454:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16918,"nodeType":"ArrayTypeName","src":"17454:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"17453:18:72"},"scope":17618,"src":"17394:270:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16976,"nodeType":"Block","src":"18314:204:72","statements":[{"assignments":[16959],"declarations":[{"constant":false,"id":16959,"mutability":"mutable","name":"store","nameLocation":"18341:5:72","nodeType":"VariableDeclaration","scope":16976,"src":"18324:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16957,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18324:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16958,"nodeType":"ArrayTypeName","src":"18324:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16966,"initialValue":{"arguments":[{"expression":{"id":16961,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16945,"src":"18357:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16962,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18361:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16798,"src":"18357:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16963,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16947,"src":"18369:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16964,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16949,"src":"18376:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16960,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[16340,16419],"referencedDeclaration":16419,"src":"18349:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256,uint256) view returns (bytes32[] memory)"}},"id":16965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18349:31:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"18324:56:72"},{"assignments":[16971],"declarations":[{"constant":false,"id":16971,"mutability":"mutable","name":"result","nameLocation":"18407:6:72","nodeType":"VariableDeclaration","scope":16976,"src":"18390:23:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16969,"name":"uint256","nodeType":"ElementaryTypeName","src":"18390:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16970,"nodeType":"ArrayTypeName","src":"18390:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":16972,"nodeType":"VariableDeclarationStatement","src":"18390:23:72"},{"AST":{"nativeSrc":"18449:39:72","nodeType":"YulBlock","src":"18449:39:72","statements":[{"nativeSrc":"18463:15:72","nodeType":"YulAssignment","src":"18463:15:72","value":{"name":"store","nativeSrc":"18473:5:72","nodeType":"YulIdentifier","src":"18473:5:72"},"variableNames":[{"name":"result","nativeSrc":"18463:6:72","nodeType":"YulIdentifier","src":"18463:6:72"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16971,"isOffset":false,"isSlot":false,"src":"18463:6:72","valueSize":1},{"declaration":16959,"isOffset":false,"isSlot":false,"src":"18473:5:72","valueSize":1}],"flags":["memory-safe"],"id":16973,"nodeType":"InlineAssembly","src":"18424:64:72"},{"expression":{"id":16974,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16971,"src":"18505:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":16954,"id":16975,"nodeType":"Return","src":"18498:13:72"}]},"documentation":{"id":16942,"nodeType":"StructuredDocumentation","src":"17670:533:72","text":" @dev Return a slice of the set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16977,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"18217:6:72","nodeType":"FunctionDefinition","parameters":{"id":16950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16945,"mutability":"mutable","name":"set","nameLocation":"18240:3:72","nodeType":"VariableDeclaration","scope":16977,"src":"18224:19:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16944,"nodeType":"UserDefinedTypeName","pathNode":{"id":16943,"name":"UintSet","nameLocations":["18224:7:72"],"nodeType":"IdentifierPath","referencedDeclaration":16799,"src":"18224:7:72"},"referencedDeclaration":16799,"src":"18224:7:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"},{"constant":false,"id":16947,"mutability":"mutable","name":"start","nameLocation":"18253:5:72","nodeType":"VariableDeclaration","scope":16977,"src":"18245:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16946,"name":"uint256","nodeType":"ElementaryTypeName","src":"18245:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16949,"mutability":"mutable","name":"end","nameLocation":"18268:3:72","nodeType":"VariableDeclaration","scope":16977,"src":"18260:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16948,"name":"uint256","nodeType":"ElementaryTypeName","src":"18260:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18223:49:72"},"returnParameters":{"id":16954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16953,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16977,"src":"18296:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16951,"name":"uint256","nodeType":"ElementaryTypeName","src":"18296:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16952,"nodeType":"ArrayTypeName","src":"18296:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"18295:18:72"},"scope":17618,"src":"18208:310:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"EnumerableSet.StringSet","id":16985,"members":[{"constant":false,"id":16980,"mutability":"mutable","name":"_values","nameLocation":"18593:7:72","nodeType":"VariableDeclaration","scope":16985,"src":"18584:16:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":16978,"name":"string","nodeType":"ElementaryTypeName","src":"18584:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":16979,"nodeType":"ArrayTypeName","src":"18584:8:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":16984,"mutability":"mutable","name":"_positions","nameLocation":"18784:10:72","nodeType":"VariableDeclaration","scope":16985,"src":"18751:43:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string => uint256)"},"typeName":{"id":16983,"keyName":"value","keyNameLocation":"18766:5:72","keyType":{"id":16981,"name":"string","nodeType":"ElementaryTypeName","src":"18759:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"nodeType":"Mapping","src":"18751:32:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":16982,"name":"uint256","nodeType":"ElementaryTypeName","src":"18775:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"name":"StringSet","nameLocation":"18531:9:72","nodeType":"StructDefinition","scope":17618,"src":"18524:277:72","visibility":"public"},{"body":{"id":17026,"nodeType":"Block","src":"19052:336:72","statements":[{"condition":{"id":17000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"19066:21:72","subExpression":{"arguments":[{"id":16997,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16989,"src":"19076:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},{"id":16998,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16991,"src":"19081:5:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":16996,"name":"contains","nodeType":"Identifier","overloadedDeclarations":[16490,16687,16875,17173,17493],"referencedDeclaration":17173,"src":"19067:8:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_StringSet_$16985_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.StringSet storage pointer,string memory) view returns (bool)"}},"id":16999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19067:20:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17024,"nodeType":"Block","src":"19345:37:72","statements":[{"expression":{"hexValue":"66616c7365","id":17022,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19366:5:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":16995,"id":17023,"nodeType":"Return","src":"19359:12:72"}]},"id":17025,"nodeType":"IfStatement","src":"19062:320:72","trueBody":{"id":17021,"nodeType":"Block","src":"19089:250:72","statements":[{"expression":{"arguments":[{"id":17006,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16991,"src":"19120:5:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"expression":{"id":17001,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16989,"src":"19103:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17004,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19107:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"19103:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19115:4:72","memberName":"push","nodeType":"MemberAccess","src":"19103:16:72","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_string_storage_$dyn_storage_ptr_$_t_string_storage_$returns$__$attached_to$_t_array$_t_string_storage_$dyn_storage_ptr_$","typeString":"function (string storage ref[] storage pointer,string storage ref)"}},"id":17007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19103:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17008,"nodeType":"ExpressionStatement","src":"19103:23:72"},{"expression":{"id":17017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17009,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16989,"src":"19261:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17012,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19265:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16984,"src":"19261:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string memory => uint256)"}},"id":17013,"indexExpression":{"id":17011,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16991,"src":"19276:5:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"19261:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":17014,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16989,"src":"19285:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17015,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19289:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"19285:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19297:6:72","memberName":"length","nodeType":"MemberAccess","src":"19285:18:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19261:42:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17018,"nodeType":"ExpressionStatement","src":"19261:42:72"},{"expression":{"hexValue":"74727565","id":17019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19324:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":16995,"id":17020,"nodeType":"Return","src":"19317:11:72"}]}}]},"documentation":{"id":16986,"nodeType":"StructuredDocumentation","src":"18807:159:72","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":17027,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"18980:3:72","nodeType":"FunctionDefinition","parameters":{"id":16992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16989,"mutability":"mutable","name":"set","nameLocation":"19002:3:72","nodeType":"VariableDeclaration","scope":17027,"src":"18984:21:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":16988,"nodeType":"UserDefinedTypeName","pathNode":{"id":16987,"name":"StringSet","nameLocations":["18984:9:72"],"nodeType":"IdentifierPath","referencedDeclaration":16985,"src":"18984:9:72"},"referencedDeclaration":16985,"src":"18984:9:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"},{"constant":false,"id":16991,"mutability":"mutable","name":"value","nameLocation":"19021:5:72","nodeType":"VariableDeclaration","scope":17027,"src":"19007:19:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":16990,"name":"string","nodeType":"ElementaryTypeName","src":"19007:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"18983:44:72"},"returnParameters":{"id":16995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16994,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17027,"src":"19046:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16993,"name":"bool","nodeType":"ElementaryTypeName","src":"19046:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19045:6:72"},"scope":17618,"src":"18971:417:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17110,"nodeType":"Block","src":"19640:1302:72","statements":[{"assignments":[17039],"declarations":[{"constant":false,"id":17039,"mutability":"mutable","name":"position","nameLocation":"19752:8:72","nodeType":"VariableDeclaration","scope":17110,"src":"19744:16:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17038,"name":"uint256","nodeType":"ElementaryTypeName","src":"19744:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17044,"initialValue":{"baseExpression":{"expression":{"id":17040,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17031,"src":"19763:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17041,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19767:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16984,"src":"19763:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string memory => uint256)"}},"id":17043,"indexExpression":{"id":17042,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17033,"src":"19778:5:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19763:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19744:40:72"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17045,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17039,"src":"19799:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":17046,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19811:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"19799:13:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17108,"nodeType":"Block","src":"20899:37:72","statements":[{"expression":{"hexValue":"66616c7365","id":17106,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20920:5:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":17037,"id":17107,"nodeType":"Return","src":"20913:12:72"}]},"id":17109,"nodeType":"IfStatement","src":"19795:1141:72","trueBody":{"id":17105,"nodeType":"Block","src":"19814:1079:72","statements":[{"assignments":[17049],"declarations":[{"constant":false,"id":17049,"mutability":"mutable","name":"valueIndex","nameLocation":"20174:10:72","nodeType":"VariableDeclaration","scope":17105,"src":"20166:18:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17048,"name":"uint256","nodeType":"ElementaryTypeName","src":"20166:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17053,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17050,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17039,"src":"20187:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":17051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20198:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"20187:12:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20166:33:72"},{"assignments":[17055],"declarations":[{"constant":false,"id":17055,"mutability":"mutable","name":"lastIndex","nameLocation":"20221:9:72","nodeType":"VariableDeclaration","scope":17105,"src":"20213:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17054,"name":"uint256","nodeType":"ElementaryTypeName","src":"20213:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17061,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":17056,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17031,"src":"20233:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17057,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20237:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"20233:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20245:6:72","memberName":"length","nodeType":"MemberAccess","src":"20233:18:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":17059,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20254:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"20233:22:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20213:42:72"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17062,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17049,"src":"20274:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":17063,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17055,"src":"20288:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20274:23:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17089,"nodeType":"IfStatement","src":"20270:384:72","trueBody":{"id":17088,"nodeType":"Block","src":"20299:355:72","statements":[{"assignments":[17066],"declarations":[{"constant":false,"id":17066,"mutability":"mutable","name":"lastValue","nameLocation":"20331:9:72","nodeType":"VariableDeclaration","scope":17088,"src":"20317:23:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17065,"name":"string","nodeType":"ElementaryTypeName","src":"20317:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":17071,"initialValue":{"baseExpression":{"expression":{"id":17067,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17031,"src":"20343:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17068,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20347:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"20343:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17070,"indexExpression":{"id":17069,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17055,"src":"20355:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20343:22:72","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"VariableDeclarationStatement","src":"20317:48:72"},{"expression":{"id":17078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17072,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17031,"src":"20464:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17075,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20468:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"20464:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17076,"indexExpression":{"id":17074,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17049,"src":"20476:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20464:23:72","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17077,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17066,"src":"20490:9:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"20464:35:72","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":17079,"nodeType":"ExpressionStatement","src":"20464:35:72"},{"expression":{"id":17086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17080,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17031,"src":"20603:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17083,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20607:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16984,"src":"20603:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string memory => uint256)"}},"id":17084,"indexExpression":{"id":17082,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17066,"src":"20618:9:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20603:25:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17085,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17039,"src":"20631:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20603:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17087,"nodeType":"ExpressionStatement","src":"20603:36:72"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":17090,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17031,"src":"20732:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17093,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20736:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"20732:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20744:3:72","memberName":"pop","nodeType":"MemberAccess","src":"20732:15:72","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_string_storage_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_string_storage_$dyn_storage_ptr_$","typeString":"function (string storage ref[] storage pointer)"}},"id":17095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20732:17:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17096,"nodeType":"ExpressionStatement","src":"20732:17:72"},{"expression":{"id":17101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"20828:28:72","subExpression":{"baseExpression":{"expression":{"id":17097,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17031,"src":"20835:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17098,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20839:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16984,"src":"20835:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string memory => uint256)"}},"id":17100,"indexExpression":{"id":17099,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17033,"src":"20850:5:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20835:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17102,"nodeType":"ExpressionStatement","src":"20828:28:72"},{"expression":{"hexValue":"74727565","id":17103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20878:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":17037,"id":17104,"nodeType":"Return","src":"20871:11:72"}]}}]},"documentation":{"id":17028,"nodeType":"StructuredDocumentation","src":"19394:157:72","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":17111,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"19565:6:72","nodeType":"FunctionDefinition","parameters":{"id":17034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17031,"mutability":"mutable","name":"set","nameLocation":"19590:3:72","nodeType":"VariableDeclaration","scope":17111,"src":"19572:21:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17030,"nodeType":"UserDefinedTypeName","pathNode":{"id":17029,"name":"StringSet","nameLocations":["19572:9:72"],"nodeType":"IdentifierPath","referencedDeclaration":16985,"src":"19572:9:72"},"referencedDeclaration":16985,"src":"19572:9:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"},{"constant":false,"id":17033,"mutability":"mutable","name":"value","nameLocation":"19609:5:72","nodeType":"VariableDeclaration","scope":17111,"src":"19595:19:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17032,"name":"string","nodeType":"ElementaryTypeName","src":"19595:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"19571:44:72"},"returnParameters":{"id":17037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17036,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17111,"src":"19634:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17035,"name":"bool","nodeType":"ElementaryTypeName","src":"19634:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19633:6:72"},"scope":17618,"src":"19556:1386:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17153,"nodeType":"Block","src":"21303:195:72","statements":[{"assignments":[17119],"declarations":[{"constant":false,"id":17119,"mutability":"mutable","name":"len","nameLocation":"21321:3:72","nodeType":"VariableDeclaration","scope":17153,"src":"21313:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17118,"name":"uint256","nodeType":"ElementaryTypeName","src":"21313:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17123,"initialValue":{"arguments":[{"id":17121,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17115,"src":"21334:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}],"id":17120,"name":"length","nodeType":"Identifier","overloadedDeclarations":[16505,16702,16890,17187,17507],"referencedDeclaration":17187,"src":"21327:6:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_StringSet_$16985_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.StringSet storage pointer) view returns (uint256)"}},"id":17122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21327:11:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21313:25:72"},{"body":{"id":17143,"nodeType":"Block","src":"21382:62:72","statements":[{"expression":{"id":17141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"21396:37:72","subExpression":{"baseExpression":{"expression":{"id":17134,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17115,"src":"21403:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17135,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21407:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16984,"src":"21403:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string memory => uint256)"}},"id":17140,"indexExpression":{"baseExpression":{"expression":{"id":17136,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17115,"src":"21418:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17137,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21422:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"21418:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17139,"indexExpression":{"id":17138,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17125,"src":"21430:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21418:14:72","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21403:30:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17142,"nodeType":"ExpressionStatement","src":"21396:37:72"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17128,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17125,"src":"21368:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17129,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17119,"src":"21372:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21368:7:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17144,"initializationExpression":{"assignments":[17125],"declarations":[{"constant":false,"id":17125,"mutability":"mutable","name":"i","nameLocation":"21361:1:72","nodeType":"VariableDeclaration","scope":17144,"src":"21353:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17124,"name":"uint256","nodeType":"ElementaryTypeName","src":"21353:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17127,"initialValue":{"hexValue":"30","id":17126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21365:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"21353:13:72"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":17132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"21377:3:72","subExpression":{"id":17131,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17125,"src":"21379:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17133,"nodeType":"ExpressionStatement","src":"21377:3:72"},"nodeType":"ForStatement","src":"21348:96:72"},{"expression":{"arguments":[{"expression":{"id":17148,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17115,"src":"21476:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17149,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21480:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"21476:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},{"hexValue":"30","id":17150,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21489:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":17145,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12304,"src":"21453:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Arrays_$12304_$","typeString":"type(library Arrays)"}},"id":17147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21460:15:72","memberName":"unsafeSetLength","nodeType":"MemberAccess","referencedDeclaration":12303,"src":"21453:22:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_string_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$","typeString":"function (string storage ref[] storage pointer,uint256)"}},"id":17151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21453:38:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17152,"nodeType":"ExpressionStatement","src":"21453:38:72"}]},"documentation":{"id":17112,"nodeType":"StructuredDocumentation","src":"20948:303:72","text":" @dev Removes all the values from a set. O(n).\n WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block."},"id":17154,"implemented":true,"kind":"function","modifiers":[],"name":"clear","nameLocation":"21265:5:72","nodeType":"FunctionDefinition","parameters":{"id":17116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17115,"mutability":"mutable","name":"set","nameLocation":"21289:3:72","nodeType":"VariableDeclaration","scope":17154,"src":"21271:21:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17114,"nodeType":"UserDefinedTypeName","pathNode":{"id":17113,"name":"StringSet","nameLocations":["21271:9:72"],"nodeType":"IdentifierPath","referencedDeclaration":16985,"src":"21271:9:72"},"referencedDeclaration":16985,"src":"21271:9:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"}],"src":"21270:23:72"},"returnParameters":{"id":17117,"nodeType":"ParameterList","parameters":[],"src":"21303:0:72"},"scope":17618,"src":"21256:242:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17172,"nodeType":"Block","src":"21670:50:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":17165,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17158,"src":"21687:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17166,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21691:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16984,"src":"21687:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string memory => uint256)"}},"id":17168,"indexExpression":{"id":17167,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17160,"src":"21702:5:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21687:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":17169,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21712:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21687:26:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17164,"id":17171,"nodeType":"Return","src":"21680:33:72"}]},"documentation":{"id":17155,"nodeType":"StructuredDocumentation","src":"21504:70:72","text":" @dev Returns true if the value is in the set. O(1)."},"id":17173,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"21588:8:72","nodeType":"FunctionDefinition","parameters":{"id":17161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17158,"mutability":"mutable","name":"set","nameLocation":"21615:3:72","nodeType":"VariableDeclaration","scope":17173,"src":"21597:21:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17157,"nodeType":"UserDefinedTypeName","pathNode":{"id":17156,"name":"StringSet","nameLocations":["21597:9:72"],"nodeType":"IdentifierPath","referencedDeclaration":16985,"src":"21597:9:72"},"referencedDeclaration":16985,"src":"21597:9:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"},{"constant":false,"id":17160,"mutability":"mutable","name":"value","nameLocation":"21634:5:72","nodeType":"VariableDeclaration","scope":17173,"src":"21620:19:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17159,"name":"string","nodeType":"ElementaryTypeName","src":"21620:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"21596:44:72"},"returnParameters":{"id":17164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17163,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17173,"src":"21664:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17162,"name":"bool","nodeType":"ElementaryTypeName","src":"21664:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"21663:6:72"},"scope":17618,"src":"21579:141:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17186,"nodeType":"Block","src":"21872:42:72","statements":[{"expression":{"expression":{"expression":{"id":17182,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17177,"src":"21889:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17183,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21893:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"21889:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21901:6:72","memberName":"length","nodeType":"MemberAccess","src":"21889:18:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17181,"id":17185,"nodeType":"Return","src":"21882:25:72"}]},"documentation":{"id":17174,"nodeType":"StructuredDocumentation","src":"21726:70:72","text":" @dev Returns the number of values on the set. O(1)."},"id":17187,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"21810:6:72","nodeType":"FunctionDefinition","parameters":{"id":17178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17177,"mutability":"mutable","name":"set","nameLocation":"21835:3:72","nodeType":"VariableDeclaration","scope":17187,"src":"21817:21:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17176,"nodeType":"UserDefinedTypeName","pathNode":{"id":17175,"name":"StringSet","nameLocations":["21817:9:72"],"nodeType":"IdentifierPath","referencedDeclaration":16985,"src":"21817:9:72"},"referencedDeclaration":16985,"src":"21817:9:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"}],"src":"21816:23:72"},"returnParameters":{"id":17181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17180,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17187,"src":"21863:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17179,"name":"uint256","nodeType":"ElementaryTypeName","src":"21863:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21862:9:72"},"scope":17618,"src":"21801:113:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17203,"nodeType":"Block","src":"22344:42:72","statements":[{"expression":{"baseExpression":{"expression":{"id":17198,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17191,"src":"22361:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17199,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22365:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"22361:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17201,"indexExpression":{"id":17200,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17193,"src":"22373:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22361:18:72","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":17197,"id":17202,"nodeType":"Return","src":"22354:25:72"}]},"documentation":{"id":17188,"nodeType":"StructuredDocumentation","src":"21920:331:72","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":17204,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"22265:2:72","nodeType":"FunctionDefinition","parameters":{"id":17194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17191,"mutability":"mutable","name":"set","nameLocation":"22286:3:72","nodeType":"VariableDeclaration","scope":17204,"src":"22268:21:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17190,"nodeType":"UserDefinedTypeName","pathNode":{"id":17189,"name":"StringSet","nameLocations":["22268:9:72"],"nodeType":"IdentifierPath","referencedDeclaration":16985,"src":"22268:9:72"},"referencedDeclaration":16985,"src":"22268:9:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"},{"constant":false,"id":17193,"mutability":"mutable","name":"index","nameLocation":"22299:5:72","nodeType":"VariableDeclaration","scope":17204,"src":"22291:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17192,"name":"uint256","nodeType":"ElementaryTypeName","src":"22291:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22267:38:72"},"returnParameters":{"id":17197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17196,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17204,"src":"22329:13:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17195,"name":"string","nodeType":"ElementaryTypeName","src":"22329:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"22328:15:72"},"scope":17618,"src":"22256:130:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17217,"nodeType":"Block","src":"23005:35:72","statements":[{"expression":{"expression":{"id":17214,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17208,"src":"23022:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17215,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23026:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"23022:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"functionReturnParameters":17213,"id":17216,"nodeType":"Return","src":"23015:18:72"}]},"documentation":{"id":17205,"nodeType":"StructuredDocumentation","src":"22392:529:72","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":17218,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"22935:6:72","nodeType":"FunctionDefinition","parameters":{"id":17209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17208,"mutability":"mutable","name":"set","nameLocation":"22960:3:72","nodeType":"VariableDeclaration","scope":17218,"src":"22942:21:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17207,"nodeType":"UserDefinedTypeName","pathNode":{"id":17206,"name":"StringSet","nameLocations":["22942:9:72"],"nodeType":"IdentifierPath","referencedDeclaration":16985,"src":"22942:9:72"},"referencedDeclaration":16985,"src":"22942:9:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"}],"src":"22941:23:72"},"returnParameters":{"id":17213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17212,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17218,"src":"22988:15:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":17210,"name":"string","nodeType":"ElementaryTypeName","src":"22988:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":17211,"nodeType":"ArrayTypeName","src":"22988:8:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"}],"src":"22987:17:72"},"scope":17618,"src":"22926:114:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17296,"nodeType":"Block","src":"23691:389:72","statements":[{"id":17295,"nodeType":"UncheckedBlock","src":"23701:373:72","statements":[{"expression":{"id":17240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17232,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17226,"src":"23725:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17235,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17226,"src":"23740:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":17237,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17222,"src":"23752:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}],"id":17236,"name":"length","nodeType":"Identifier","overloadedDeclarations":[16505,16702,16890,17187,17507],"referencedDeclaration":17187,"src":"23745:6:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_StringSet_$16985_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.StringSet storage pointer) view returns (uint256)"}},"id":17238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23745:11:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17233,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"23731:4:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":17234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23736:3:72","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":13033,"src":"23731:8:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23731:26:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23725:32:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17241,"nodeType":"ExpressionStatement","src":"23725:32:72"},{"expression":{"id":17248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17242,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17224,"src":"23771:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17245,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17224,"src":"23788:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17246,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17226,"src":"23795:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17243,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"23779:4:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":17244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23784:3:72","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":13033,"src":"23779:8:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23779:20:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23771:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17249,"nodeType":"ExpressionStatement","src":"23771:28:72"},{"assignments":[17251],"declarations":[{"constant":false,"id":17251,"mutability":"mutable","name":"len","nameLocation":"23822:3:72","nodeType":"VariableDeclaration","scope":17295,"src":"23814:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17250,"name":"uint256","nodeType":"ElementaryTypeName","src":"23814:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17255,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17252,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17226,"src":"23828:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17253,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17224,"src":"23834:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23828:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23814:25:72"},{"assignments":[17260],"declarations":[{"constant":false,"id":17260,"mutability":"mutable","name":"result","nameLocation":"23869:6:72","nodeType":"VariableDeclaration","scope":17295,"src":"23853:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":17258,"name":"string","nodeType":"ElementaryTypeName","src":"23853:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":17259,"nodeType":"ArrayTypeName","src":"23853:8:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"}],"id":17266,"initialValue":{"arguments":[{"id":17264,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17251,"src":"23891:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17263,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"23878:12:72","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_string_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (string memory[] memory)"},"typeName":{"baseType":{"id":17261,"name":"string","nodeType":"ElementaryTypeName","src":"23882:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":17262,"nodeType":"ArrayTypeName","src":"23882:8:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}}},"id":17265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23878:17:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"23853:42:72"},{"body":{"id":17291,"nodeType":"Block","src":"23943:94:72","statements":[{"expression":{"id":17289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17277,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17260,"src":"23961:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"id":17279,"indexExpression":{"id":17278,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17268,"src":"23968:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23961:9:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"expression":{"id":17282,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17222,"src":"23993:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17283,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23997:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"23993:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17284,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17224,"src":"24006:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":17285,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17268,"src":"24014:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24006:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17280,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12304,"src":"23973:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Arrays_$12304_$","typeString":"type(library Arrays)"}},"id":17281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23980:12:72","memberName":"unsafeAccess","nodeType":"MemberAccess","referencedDeclaration":12183,"src":"23973:19:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_string_storage_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_StringSlot_$12591_storage_ptr_$","typeString":"function (string storage ref[] storage pointer,uint256) pure returns (struct StorageSlot.StringSlot storage pointer)"}},"id":17287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23973:43:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12591_storage_ptr","typeString":"struct StorageSlot.StringSlot storage pointer"}},"id":17288,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24017:5:72","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12590,"src":"23973:49:72","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"src":"23961:61:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":17290,"nodeType":"ExpressionStatement","src":"23961:61:72"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17271,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17268,"src":"23929:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17272,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17251,"src":"23933:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23929:7:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17292,"initializationExpression":{"assignments":[17268],"declarations":[{"constant":false,"id":17268,"mutability":"mutable","name":"i","nameLocation":"23922:1:72","nodeType":"VariableDeclaration","scope":17292,"src":"23914:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17267,"name":"uint256","nodeType":"ElementaryTypeName","src":"23914:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17270,"initialValue":{"hexValue":"30","id":17269,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23926:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"23914:13:72"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":17275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"23938:3:72","subExpression":{"id":17274,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17268,"src":"23940:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17276,"nodeType":"ExpressionStatement","src":"23938:3:72"},"nodeType":"ForStatement","src":"23909:128:72"},{"expression":{"id":17293,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17260,"src":"24057:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"functionReturnParameters":17231,"id":17294,"nodeType":"Return","src":"24050:13:72"}]}]},"documentation":{"id":17219,"nodeType":"StructuredDocumentation","src":"23046:533:72","text":" @dev Return a slice of the set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":17297,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"23593:6:72","nodeType":"FunctionDefinition","parameters":{"id":17227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17222,"mutability":"mutable","name":"set","nameLocation":"23618:3:72","nodeType":"VariableDeclaration","scope":17297,"src":"23600:21:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17221,"nodeType":"UserDefinedTypeName","pathNode":{"id":17220,"name":"StringSet","nameLocations":["23600:9:72"],"nodeType":"IdentifierPath","referencedDeclaration":16985,"src":"23600:9:72"},"referencedDeclaration":16985,"src":"23600:9:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"},{"constant":false,"id":17224,"mutability":"mutable","name":"start","nameLocation":"23631:5:72","nodeType":"VariableDeclaration","scope":17297,"src":"23623:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17223,"name":"uint256","nodeType":"ElementaryTypeName","src":"23623:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17226,"mutability":"mutable","name":"end","nameLocation":"23646:3:72","nodeType":"VariableDeclaration","scope":17297,"src":"23638:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17225,"name":"uint256","nodeType":"ElementaryTypeName","src":"23638:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23599:51:72"},"returnParameters":{"id":17231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17230,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17297,"src":"23674:15:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":17228,"name":"string","nodeType":"ElementaryTypeName","src":"23674:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":17229,"nodeType":"ArrayTypeName","src":"23674:8:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"}],"src":"23673:17:72"},"scope":17618,"src":"23584:496:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"EnumerableSet.BytesSet","id":17305,"members":[{"constant":false,"id":17300,"mutability":"mutable","name":"_values","nameLocation":"24153:7:72","nodeType":"VariableDeclaration","scope":17305,"src":"24145:15:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":17298,"name":"bytes","nodeType":"ElementaryTypeName","src":"24145:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":17299,"nodeType":"ArrayTypeName","src":"24145:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"},{"constant":false,"id":17304,"mutability":"mutable","name":"_positions","nameLocation":"24343:10:72","nodeType":"VariableDeclaration","scope":17305,"src":"24311:42:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes => uint256)"},"typeName":{"id":17303,"keyName":"value","keyNameLocation":"24325:5:72","keyType":{"id":17301,"name":"bytes","nodeType":"ElementaryTypeName","src":"24319:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"nodeType":"Mapping","src":"24311:31:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":17302,"name":"uint256","nodeType":"ElementaryTypeName","src":"24334:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"name":"BytesSet","nameLocation":"24093:8:72","nodeType":"StructDefinition","scope":17618,"src":"24086:274:72","visibility":"public"},{"body":{"id":17346,"nodeType":"Block","src":"24609:336:72","statements":[{"condition":{"id":17320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"24623:21:72","subExpression":{"arguments":[{"id":17317,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"24633:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},{"id":17318,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17311,"src":"24638:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":17316,"name":"contains","nodeType":"Identifier","overloadedDeclarations":[16490,16687,16875,17173,17493],"referencedDeclaration":17493,"src":"24624:8:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_BytesSet_$17305_storage_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.BytesSet storage pointer,bytes memory) view returns (bool)"}},"id":17319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24624:20:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17344,"nodeType":"Block","src":"24902:37:72","statements":[{"expression":{"hexValue":"66616c7365","id":17342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"24923:5:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":17315,"id":17343,"nodeType":"Return","src":"24916:12:72"}]},"id":17345,"nodeType":"IfStatement","src":"24619:320:72","trueBody":{"id":17341,"nodeType":"Block","src":"24646:250:72","statements":[{"expression":{"arguments":[{"id":17326,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17311,"src":"24677:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"expression":{"id":17321,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"24660:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17324,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24664:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"24660:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24672:4:72","memberName":"push","nodeType":"MemberAccess","src":"24660:16:72","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_bytes_storage_$dyn_storage_ptr_$_t_bytes_storage_$returns$__$attached_to$_t_array$_t_bytes_storage_$dyn_storage_ptr_$","typeString":"function (bytes storage ref[] storage pointer,bytes storage ref)"}},"id":17327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24660:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17328,"nodeType":"ExpressionStatement","src":"24660:23:72"},{"expression":{"id":17337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17329,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"24818:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17332,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24822:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":17304,"src":"24818:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes memory => uint256)"}},"id":17333,"indexExpression":{"id":17331,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17311,"src":"24833:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24818:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":17334,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"24842:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17335,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24846:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"24842:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24854:6:72","memberName":"length","nodeType":"MemberAccess","src":"24842:18:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24818:42:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17338,"nodeType":"ExpressionStatement","src":"24818:42:72"},{"expression":{"hexValue":"74727565","id":17339,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"24881:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":17315,"id":17340,"nodeType":"Return","src":"24874:11:72"}]}}]},"documentation":{"id":17306,"nodeType":"StructuredDocumentation","src":"24366:159:72","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":17347,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"24539:3:72","nodeType":"FunctionDefinition","parameters":{"id":17312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17309,"mutability":"mutable","name":"set","nameLocation":"24560:3:72","nodeType":"VariableDeclaration","scope":17347,"src":"24543:20:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17308,"nodeType":"UserDefinedTypeName","pathNode":{"id":17307,"name":"BytesSet","nameLocations":["24543:8:72"],"nodeType":"IdentifierPath","referencedDeclaration":17305,"src":"24543:8:72"},"referencedDeclaration":17305,"src":"24543:8:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"},{"constant":false,"id":17311,"mutability":"mutable","name":"value","nameLocation":"24578:5:72","nodeType":"VariableDeclaration","scope":17347,"src":"24565:18:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17310,"name":"bytes","nodeType":"ElementaryTypeName","src":"24565:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"24542:42:72"},"returnParameters":{"id":17315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17314,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17347,"src":"24603:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17313,"name":"bool","nodeType":"ElementaryTypeName","src":"24603:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"24602:6:72"},"scope":17618,"src":"24530:415:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17430,"nodeType":"Block","src":"25195:1301:72","statements":[{"assignments":[17359],"declarations":[{"constant":false,"id":17359,"mutability":"mutable","name":"position","nameLocation":"25307:8:72","nodeType":"VariableDeclaration","scope":17430,"src":"25299:16:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17358,"name":"uint256","nodeType":"ElementaryTypeName","src":"25299:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17364,"initialValue":{"baseExpression":{"expression":{"id":17360,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17351,"src":"25318:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17361,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25322:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":17304,"src":"25318:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes memory => uint256)"}},"id":17363,"indexExpression":{"id":17362,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17353,"src":"25333:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25318:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25299:40:72"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17365,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17359,"src":"25354:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":17366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25366:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"25354:13:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17428,"nodeType":"Block","src":"26453:37:72","statements":[{"expression":{"hexValue":"66616c7365","id":17426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26474:5:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":17357,"id":17427,"nodeType":"Return","src":"26467:12:72"}]},"id":17429,"nodeType":"IfStatement","src":"25350:1140:72","trueBody":{"id":17425,"nodeType":"Block","src":"25369:1078:72","statements":[{"assignments":[17369],"declarations":[{"constant":false,"id":17369,"mutability":"mutable","name":"valueIndex","nameLocation":"25729:10:72","nodeType":"VariableDeclaration","scope":17425,"src":"25721:18:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17368,"name":"uint256","nodeType":"ElementaryTypeName","src":"25721:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17373,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17370,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17359,"src":"25742:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":17371,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25753:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25742:12:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25721:33:72"},{"assignments":[17375],"declarations":[{"constant":false,"id":17375,"mutability":"mutable","name":"lastIndex","nameLocation":"25776:9:72","nodeType":"VariableDeclaration","scope":17425,"src":"25768:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17374,"name":"uint256","nodeType":"ElementaryTypeName","src":"25768:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17381,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":17376,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17351,"src":"25788:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17377,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25792:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"25788:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25800:6:72","memberName":"length","nodeType":"MemberAccess","src":"25788:18:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":17379,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25809:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25788:22:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25768:42:72"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17382,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17369,"src":"25829:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":17383,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17375,"src":"25843:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25829:23:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17409,"nodeType":"IfStatement","src":"25825:383:72","trueBody":{"id":17408,"nodeType":"Block","src":"25854:354:72","statements":[{"assignments":[17386],"declarations":[{"constant":false,"id":17386,"mutability":"mutable","name":"lastValue","nameLocation":"25885:9:72","nodeType":"VariableDeclaration","scope":17408,"src":"25872:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17385,"name":"bytes","nodeType":"ElementaryTypeName","src":"25872:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":17391,"initialValue":{"baseExpression":{"expression":{"id":17387,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17351,"src":"25897:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17388,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25901:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"25897:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17390,"indexExpression":{"id":17389,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17375,"src":"25909:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25897:22:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"nodeType":"VariableDeclarationStatement","src":"25872:47:72"},{"expression":{"id":17398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17392,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17351,"src":"26018:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17395,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26022:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"26018:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17396,"indexExpression":{"id":17394,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17369,"src":"26030:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26018:23:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17397,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17386,"src":"26044:9:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"26018:35:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"id":17399,"nodeType":"ExpressionStatement","src":"26018:35:72"},{"expression":{"id":17406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17400,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17351,"src":"26157:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17403,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26161:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":17304,"src":"26157:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes memory => uint256)"}},"id":17404,"indexExpression":{"id":17402,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17386,"src":"26172:9:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26157:25:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17405,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17359,"src":"26185:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26157:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17407,"nodeType":"ExpressionStatement","src":"26157:36:72"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":17410,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17351,"src":"26286:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17413,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26290:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"26286:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26298:3:72","memberName":"pop","nodeType":"MemberAccess","src":"26286:15:72","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_bytes_storage_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_bytes_storage_$dyn_storage_ptr_$","typeString":"function (bytes storage ref[] storage pointer)"}},"id":17415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26286:17:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17416,"nodeType":"ExpressionStatement","src":"26286:17:72"},{"expression":{"id":17421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"26382:28:72","subExpression":{"baseExpression":{"expression":{"id":17417,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17351,"src":"26389:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17418,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26393:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":17304,"src":"26389:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes memory => uint256)"}},"id":17420,"indexExpression":{"id":17419,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17353,"src":"26404:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26389:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17422,"nodeType":"ExpressionStatement","src":"26382:28:72"},{"expression":{"hexValue":"74727565","id":17423,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26432:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":17357,"id":17424,"nodeType":"Return","src":"26425:11:72"}]}}]},"documentation":{"id":17348,"nodeType":"StructuredDocumentation","src":"24951:157:72","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":17431,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"25122:6:72","nodeType":"FunctionDefinition","parameters":{"id":17354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17351,"mutability":"mutable","name":"set","nameLocation":"25146:3:72","nodeType":"VariableDeclaration","scope":17431,"src":"25129:20:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17350,"nodeType":"UserDefinedTypeName","pathNode":{"id":17349,"name":"BytesSet","nameLocations":["25129:8:72"],"nodeType":"IdentifierPath","referencedDeclaration":17305,"src":"25129:8:72"},"referencedDeclaration":17305,"src":"25129:8:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"},{"constant":false,"id":17353,"mutability":"mutable","name":"value","nameLocation":"25164:5:72","nodeType":"VariableDeclaration","scope":17431,"src":"25151:18:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17352,"name":"bytes","nodeType":"ElementaryTypeName","src":"25151:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"25128:42:72"},"returnParameters":{"id":17357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17356,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17431,"src":"25189:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17355,"name":"bool","nodeType":"ElementaryTypeName","src":"25189:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"25188:6:72"},"scope":17618,"src":"25113:1383:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17473,"nodeType":"Block","src":"26856:195:72","statements":[{"assignments":[17439],"declarations":[{"constant":false,"id":17439,"mutability":"mutable","name":"len","nameLocation":"26874:3:72","nodeType":"VariableDeclaration","scope":17473,"src":"26866:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17438,"name":"uint256","nodeType":"ElementaryTypeName","src":"26866:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17443,"initialValue":{"arguments":[{"id":17441,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17435,"src":"26887:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}],"id":17440,"name":"length","nodeType":"Identifier","overloadedDeclarations":[16505,16702,16890,17187,17507],"referencedDeclaration":17507,"src":"26880:6:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_BytesSet_$17305_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.BytesSet storage pointer) view returns (uint256)"}},"id":17442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26880:11:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"26866:25:72"},{"body":{"id":17463,"nodeType":"Block","src":"26935:62:72","statements":[{"expression":{"id":17461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"26949:37:72","subExpression":{"baseExpression":{"expression":{"id":17454,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17435,"src":"26956:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17455,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26960:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":17304,"src":"26956:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes memory => uint256)"}},"id":17460,"indexExpression":{"baseExpression":{"expression":{"id":17456,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17435,"src":"26971:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17457,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26975:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"26971:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17459,"indexExpression":{"id":17458,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17445,"src":"26983:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26971:14:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26956:30:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17462,"nodeType":"ExpressionStatement","src":"26949:37:72"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17448,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17445,"src":"26921:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17449,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17439,"src":"26925:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26921:7:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17464,"initializationExpression":{"assignments":[17445],"declarations":[{"constant":false,"id":17445,"mutability":"mutable","name":"i","nameLocation":"26914:1:72","nodeType":"VariableDeclaration","scope":17464,"src":"26906:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17444,"name":"uint256","nodeType":"ElementaryTypeName","src":"26906:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17447,"initialValue":{"hexValue":"30","id":17446,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26918:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"26906:13:72"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":17452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"26930:3:72","subExpression":{"id":17451,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17445,"src":"26932:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17453,"nodeType":"ExpressionStatement","src":"26930:3:72"},"nodeType":"ForStatement","src":"26901:96:72"},{"expression":{"arguments":[{"expression":{"id":17468,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17435,"src":"27029:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17469,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27033:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"27029:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},{"hexValue":"30","id":17470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27042:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":17465,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12304,"src":"27006:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Arrays_$12304_$","typeString":"type(library Arrays)"}},"id":17467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27013:15:72","memberName":"unsafeSetLength","nodeType":"MemberAccess","referencedDeclaration":12292,"src":"27006:22:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_bytes_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$","typeString":"function (bytes storage ref[] storage pointer,uint256)"}},"id":17471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27006:38:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17472,"nodeType":"ExpressionStatement","src":"27006:38:72"}]},"documentation":{"id":17432,"nodeType":"StructuredDocumentation","src":"26502:303:72","text":" @dev Removes all the values from a set. O(n).\n WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block."},"id":17474,"implemented":true,"kind":"function","modifiers":[],"name":"clear","nameLocation":"26819:5:72","nodeType":"FunctionDefinition","parameters":{"id":17436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17435,"mutability":"mutable","name":"set","nameLocation":"26842:3:72","nodeType":"VariableDeclaration","scope":17474,"src":"26825:20:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17434,"nodeType":"UserDefinedTypeName","pathNode":{"id":17433,"name":"BytesSet","nameLocations":["26825:8:72"],"nodeType":"IdentifierPath","referencedDeclaration":17305,"src":"26825:8:72"},"referencedDeclaration":17305,"src":"26825:8:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"}],"src":"26824:22:72"},"returnParameters":{"id":17437,"nodeType":"ParameterList","parameters":[],"src":"26856:0:72"},"scope":17618,"src":"26810:241:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17492,"nodeType":"Block","src":"27221:50:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":17485,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17478,"src":"27238:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17486,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27242:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":17304,"src":"27238:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes memory => uint256)"}},"id":17488,"indexExpression":{"id":17487,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17480,"src":"27253:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27238:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":17489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27263:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"27238:26:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17484,"id":17491,"nodeType":"Return","src":"27231:33:72"}]},"documentation":{"id":17475,"nodeType":"StructuredDocumentation","src":"27057:70:72","text":" @dev Returns true if the value is in the set. O(1)."},"id":17493,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"27141:8:72","nodeType":"FunctionDefinition","parameters":{"id":17481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17478,"mutability":"mutable","name":"set","nameLocation":"27167:3:72","nodeType":"VariableDeclaration","scope":17493,"src":"27150:20:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17477,"nodeType":"UserDefinedTypeName","pathNode":{"id":17476,"name":"BytesSet","nameLocations":["27150:8:72"],"nodeType":"IdentifierPath","referencedDeclaration":17305,"src":"27150:8:72"},"referencedDeclaration":17305,"src":"27150:8:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"},{"constant":false,"id":17480,"mutability":"mutable","name":"value","nameLocation":"27185:5:72","nodeType":"VariableDeclaration","scope":17493,"src":"27172:18:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17479,"name":"bytes","nodeType":"ElementaryTypeName","src":"27172:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"27149:42:72"},"returnParameters":{"id":17484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17483,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17493,"src":"27215:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17482,"name":"bool","nodeType":"ElementaryTypeName","src":"27215:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"27214:6:72"},"scope":17618,"src":"27132:139:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17506,"nodeType":"Block","src":"27422:42:72","statements":[{"expression":{"expression":{"expression":{"id":17502,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17497,"src":"27439:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17503,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27443:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"27439:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27451:6:72","memberName":"length","nodeType":"MemberAccess","src":"27439:18:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17501,"id":17505,"nodeType":"Return","src":"27432:25:72"}]},"documentation":{"id":17494,"nodeType":"StructuredDocumentation","src":"27277:70:72","text":" @dev Returns the number of values on the set. O(1)."},"id":17507,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"27361:6:72","nodeType":"FunctionDefinition","parameters":{"id":17498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17497,"mutability":"mutable","name":"set","nameLocation":"27385:3:72","nodeType":"VariableDeclaration","scope":17507,"src":"27368:20:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17496,"nodeType":"UserDefinedTypeName","pathNode":{"id":17495,"name":"BytesSet","nameLocations":["27368:8:72"],"nodeType":"IdentifierPath","referencedDeclaration":17305,"src":"27368:8:72"},"referencedDeclaration":17305,"src":"27368:8:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"}],"src":"27367:22:72"},"returnParameters":{"id":17501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17500,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17507,"src":"27413:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17499,"name":"uint256","nodeType":"ElementaryTypeName","src":"27413:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27412:9:72"},"scope":17618,"src":"27352:112:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17523,"nodeType":"Block","src":"27892:42:72","statements":[{"expression":{"baseExpression":{"expression":{"id":17518,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17511,"src":"27909:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17519,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27913:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"27909:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17521,"indexExpression":{"id":17520,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17513,"src":"27921:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27909:18:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"functionReturnParameters":17517,"id":17522,"nodeType":"Return","src":"27902:25:72"}]},"documentation":{"id":17508,"nodeType":"StructuredDocumentation","src":"27470:331:72","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":17524,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"27815:2:72","nodeType":"FunctionDefinition","parameters":{"id":17514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17511,"mutability":"mutable","name":"set","nameLocation":"27835:3:72","nodeType":"VariableDeclaration","scope":17524,"src":"27818:20:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17510,"nodeType":"UserDefinedTypeName","pathNode":{"id":17509,"name":"BytesSet","nameLocations":["27818:8:72"],"nodeType":"IdentifierPath","referencedDeclaration":17305,"src":"27818:8:72"},"referencedDeclaration":17305,"src":"27818:8:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"},{"constant":false,"id":17513,"mutability":"mutable","name":"index","nameLocation":"27848:5:72","nodeType":"VariableDeclaration","scope":17524,"src":"27840:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17512,"name":"uint256","nodeType":"ElementaryTypeName","src":"27840:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27817:37:72"},"returnParameters":{"id":17517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17516,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17524,"src":"27878:12:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17515,"name":"bytes","nodeType":"ElementaryTypeName","src":"27878:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"27877:14:72"},"scope":17618,"src":"27806:128:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17537,"nodeType":"Block","src":"28551:35:72","statements":[{"expression":{"expression":{"id":17534,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17528,"src":"28568:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17535,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28572:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"28568:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"functionReturnParameters":17533,"id":17536,"nodeType":"Return","src":"28561:18:72"}]},"documentation":{"id":17525,"nodeType":"StructuredDocumentation","src":"27940:529:72","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":17538,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"28483:6:72","nodeType":"FunctionDefinition","parameters":{"id":17529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17528,"mutability":"mutable","name":"set","nameLocation":"28507:3:72","nodeType":"VariableDeclaration","scope":17538,"src":"28490:20:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17527,"nodeType":"UserDefinedTypeName","pathNode":{"id":17526,"name":"BytesSet","nameLocations":["28490:8:72"],"nodeType":"IdentifierPath","referencedDeclaration":17305,"src":"28490:8:72"},"referencedDeclaration":17305,"src":"28490:8:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"}],"src":"28489:22:72"},"returnParameters":{"id":17533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17532,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17538,"src":"28535:14:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":17530,"name":"bytes","nodeType":"ElementaryTypeName","src":"28535:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":17531,"nodeType":"ArrayTypeName","src":"28535:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"28534:16:72"},"scope":17618,"src":"28474:112:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17616,"nodeType":"Block","src":"29235:387:72","statements":[{"id":17615,"nodeType":"UncheckedBlock","src":"29245:371:72","statements":[{"expression":{"id":17560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17552,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17546,"src":"29269:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17555,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17546,"src":"29284:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":17557,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17542,"src":"29296:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}],"id":17556,"name":"length","nodeType":"Identifier","overloadedDeclarations":[16505,16702,16890,17187,17507],"referencedDeclaration":17507,"src":"29289:6:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_BytesSet_$17305_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.BytesSet storage pointer) view returns (uint256)"}},"id":17558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29289:11:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17553,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"29275:4:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":17554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29280:3:72","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":13033,"src":"29275:8:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29275:26:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29269:32:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17561,"nodeType":"ExpressionStatement","src":"29269:32:72"},{"expression":{"id":17568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17562,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17544,"src":"29315:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17565,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17544,"src":"29332:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17566,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17546,"src":"29339:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17563,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"29323:4:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":17564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29328:3:72","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":13033,"src":"29323:8:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29323:20:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29315:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17569,"nodeType":"ExpressionStatement","src":"29315:28:72"},{"assignments":[17571],"declarations":[{"constant":false,"id":17571,"mutability":"mutable","name":"len","nameLocation":"29366:3:72","nodeType":"VariableDeclaration","scope":17615,"src":"29358:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17570,"name":"uint256","nodeType":"ElementaryTypeName","src":"29358:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17575,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17572,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17546,"src":"29372:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17573,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17544,"src":"29378:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29372:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29358:25:72"},{"assignments":[17580],"declarations":[{"constant":false,"id":17580,"mutability":"mutable","name":"result","nameLocation":"29412:6:72","nodeType":"VariableDeclaration","scope":17615,"src":"29397:21:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":17578,"name":"bytes","nodeType":"ElementaryTypeName","src":"29397:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":17579,"nodeType":"ArrayTypeName","src":"29397:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"id":17586,"initialValue":{"arguments":[{"id":17584,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17571,"src":"29433:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17583,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"29421:11:72","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory[] memory)"},"typeName":{"baseType":{"id":17581,"name":"bytes","nodeType":"ElementaryTypeName","src":"29425:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":17582,"nodeType":"ArrayTypeName","src":"29425:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}}},"id":17585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29421:16:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"29397:40:72"},{"body":{"id":17611,"nodeType":"Block","src":"29485:94:72","statements":[{"expression":{"id":17609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17597,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17580,"src":"29503:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"id":17599,"indexExpression":{"id":17598,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17588,"src":"29510:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"29503:9:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"expression":{"id":17602,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17542,"src":"29535:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17603,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29539:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"29535:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17604,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17544,"src":"29548:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":17605,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17588,"src":"29556:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29548:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17600,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12304,"src":"29515:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Arrays_$12304_$","typeString":"type(library Arrays)"}},"id":17601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29522:12:72","memberName":"unsafeAccess","nodeType":"MemberAccess","referencedDeclaration":12157,"src":"29515:19:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_bytes_storage_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_BytesSlot_$12594_storage_ptr_$","typeString":"function (bytes storage ref[] storage pointer,uint256) pure returns (struct StorageSlot.BytesSlot storage pointer)"}},"id":17607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29515:43:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12594_storage_ptr","typeString":"struct StorageSlot.BytesSlot storage pointer"}},"id":17608,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29559:5:72","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12593,"src":"29515:49:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"src":"29503:61:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":17610,"nodeType":"ExpressionStatement","src":"29503:61:72"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17591,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17588,"src":"29471:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17592,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17571,"src":"29475:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29471:7:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17612,"initializationExpression":{"assignments":[17588],"declarations":[{"constant":false,"id":17588,"mutability":"mutable","name":"i","nameLocation":"29464:1:72","nodeType":"VariableDeclaration","scope":17612,"src":"29456:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17587,"name":"uint256","nodeType":"ElementaryTypeName","src":"29456:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17590,"initialValue":{"hexValue":"30","id":17589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29468:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"29456:13:72"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":17595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"29480:3:72","subExpression":{"id":17594,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17588,"src":"29482:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17596,"nodeType":"ExpressionStatement","src":"29480:3:72"},"nodeType":"ForStatement","src":"29451:128:72"},{"expression":{"id":17613,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17580,"src":"29599:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"functionReturnParameters":17551,"id":17614,"nodeType":"Return","src":"29592:13:72"}]}]},"documentation":{"id":17539,"nodeType":"StructuredDocumentation","src":"28592:533:72","text":" @dev Return a slice of the set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":17617,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"29139:6:72","nodeType":"FunctionDefinition","parameters":{"id":17547,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17542,"mutability":"mutable","name":"set","nameLocation":"29163:3:72","nodeType":"VariableDeclaration","scope":17617,"src":"29146:20:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17541,"nodeType":"UserDefinedTypeName","pathNode":{"id":17540,"name":"BytesSet","nameLocations":["29146:8:72"],"nodeType":"IdentifierPath","referencedDeclaration":17305,"src":"29146:8:72"},"referencedDeclaration":17305,"src":"29146:8:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"},{"constant":false,"id":17544,"mutability":"mutable","name":"start","nameLocation":"29176:5:72","nodeType":"VariableDeclaration","scope":17617,"src":"29168:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17543,"name":"uint256","nodeType":"ElementaryTypeName","src":"29168:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17546,"mutability":"mutable","name":"end","nameLocation":"29191:3:72","nodeType":"VariableDeclaration","scope":17617,"src":"29183:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17545,"name":"uint256","nodeType":"ElementaryTypeName","src":"29183:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29145:50:72"},"returnParameters":{"id":17551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17550,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17617,"src":"29219:14:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":17548,"name":"bytes","nodeType":"ElementaryTypeName","src":"29219:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":17549,"nodeType":"ArrayTypeName","src":"29219:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"29218:16:72"},"scope":17618,"src":"29130:492:72","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":17619,"src":"1586:28038:72","usedErrors":[],"usedEvents":[]}],"src":"205:29420:72"},"id":72},"contracts/BalancerContractRegistry.sol":{"ast":{"absolutePath":"contracts/BalancerContractRegistry.sol","exportedSymbols":{"BalancerContractRegistry":[18179],"ContractType":[43],"IBalancerContractRegistry":[212],"IVault":[2545],"SingletonAuthentication":[9289]},"id":18180,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":17620,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:73"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","id":17623,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18180,"sourceUnit":213,"src":"72:152:73","symbolAliases":[{"foreign":{"id":17621,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":212,"src":"85:25:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":17622,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43,"src":"116:12:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":17625,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18180,"sourceUnit":2546,"src":"225:81:73","symbolAliases":[{"foreign":{"id":17624,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"234:6:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":17627,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18180,"sourceUnit":9290,"src":"308:104:73","symbolAliases":[{"foreign":{"id":17626,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9289,"src":"317:23:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":17629,"name":"IBalancerContractRegistry","nameLocations":["2778:25:73"],"nodeType":"IdentifierPath","referencedDeclaration":212,"src":"2778:25:73"},"id":17630,"nodeType":"InheritanceSpecifier","src":"2778:25:73"},{"baseName":{"id":17631,"name":"SingletonAuthentication","nameLocations":["2805:23:73"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"2805:23:73"},"id":17632,"nodeType":"InheritanceSpecifier","src":"2805:23:73"}],"canonicalName":"BalancerContractRegistry","contractDependencies":[],"contractKind":"contract","documentation":{"id":17628,"nodeType":"StructuredDocumentation","src":"414:2326:73","text":" @notice On-chain registry of standard Balancer contracts.\n @dev Maintain a registry of official Balancer Factories, Routers, Hooks, and valid ERC4626 tokens, for two main\n purposes. The first is to support the many instances where we need to know that a contract is \"trusted\" (i.e.,\n is safe and behaves in the required manner). For instance, some hooks depend critically on the identity of the\n msg.sender, which must be passed down through the Router. Since Routers are permissionless, a malicious one could\n spoof the sender and \"fool\" the hook. The hook must therefore \"trust\" the Router.\n It is also important for the front-end to know when a particular wrapped token should be used with buffers. Not all\n \"ERC4626\" wrapped tokens are fully conforming, and buffer operations with non-conforming tokens may fail in various\n unexpected ways. It is not enough to simply check whether a buffer exists (e.g., by calling `getBufferAsset`),\n since best practice is for the pool creator to initialize buffers for all such tokens regardless. They are\n permissionless, and could otherwise be initialized by anyone in unexpected ways. This registry could be used to\n keep track of \"known good\" buffers, such that `isActiveBalancerContract(ContractType.ERC4626,
)` returns\n true for fully-compliant tokens with properly initialized buffers.\n Current solutions involve passing in the address of the trusted Router on deployment: but what if it needs to\n support multiple Routers? Or if the Router is deprecated and replaced? Instead, we can pass the registry address,\n and query this contract to determine whether the Router is a \"trusted\" one.\n The second use case is for off-chain queries, or other protocols that need to easily determine, say, the \"latest\"\n Weighted Pool Factory. This contract provides `isActiveBalancerContract(type, address)` for the first case, and\n `getBalancerContract(type, name)` for the second. It is also possible to query all known information about an\n address, using `getBalancerContractInfo(address)`, which returns a struct with the detailed state.\n Note that the `SingletonAuthentication` base contract provides `getVault`, so it is also possible to ask this\n contract for the Vault address, so it doesn't need to be a type."},"fullyImplemented":true,"id":18179,"linearizedBaseContracts":[18179,9289,7535,4385,14,212],"name":"BalancerContractRegistry","nameLocation":"2750:24:73","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":17636,"mutability":"mutable","name":"_contractRegistry","nameLocation":"3006:17:73","nodeType":"VariableDeclaration","scope":18179,"src":"2954:69:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"typeName":{"id":17635,"keyName":"contractId","keyNameLocation":"2970:10:73","keyType":{"id":17633,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2962:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"2954:43:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"valueName":"addr","valueNameLocation":"2992:4:73","valueType":{"id":17634,"name":"address","nodeType":"ElementaryTypeName","src":"2984:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"constant":false,"id":17641,"mutability":"mutable","name":"_contractInfo","nameLocation":"3891:13:73","nodeType":"VariableDeclaration","scope":18179,"src":"3840:64:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo)"},"typeName":{"id":17640,"keyName":"addr","keyNameLocation":"3856:4:73","keyType":{"id":17637,"name":"address","nodeType":"ElementaryTypeName","src":"3848:7:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3840:42:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo)"},"valueName":"info","valueNameLocation":"3877:4:73","valueType":{"id":17639,"nodeType":"UserDefinedTypeName","pathNode":{"id":17638,"name":"ContractInfo","nameLocations":["3864:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"3864:12:73"},"referencedDeclaration":52,"src":"3864:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}}},"visibility":"private"},{"constant":false,"id":17645,"mutability":"mutable","name":"_contractAliases","nameLocation":"4259:16:73","nodeType":"VariableDeclaration","scope":18179,"src":"4202:73:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"typeName":{"id":17644,"keyName":"contractAliasId","keyNameLocation":"4218:15:73","keyType":{"id":17642,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4210:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"4202:48:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"valueName":"addr","valueNameLocation":"4245:4:73","valueType":{"id":17643,"name":"address","nodeType":"ElementaryTypeName","src":"4237:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"documentation":{"id":17646,"nodeType":"StructuredDocumentation","src":"4282:306:73","text":" @notice A `_contractRegistry` entry has no corresponding `_contractInfo`.\n @dev This should never happen.\n @param contractName The name of the contract that has a registry entry but no contract info\n @param contractAddress The address of the contract with missing state"},"errorSelector":"36a7ac0a","id":17652,"name":"InconsistentState","nameLocation":"4599:17:73","nodeType":"ErrorDefinition","parameters":{"id":17651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17648,"mutability":"mutable","name":"contractName","nameLocation":"4624:12:73","nodeType":"VariableDeclaration","scope":17652,"src":"4617:19:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17647,"name":"string","nodeType":"ElementaryTypeName","src":"4617:6:73","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":17650,"mutability":"mutable","name":"contractAddress","nameLocation":"4646:15:73","nodeType":"VariableDeclaration","scope":17652,"src":"4638:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17649,"name":"address","nodeType":"ElementaryTypeName","src":"4638:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4616:46:73"},"src":"4593:70:73"},{"body":{"id":17661,"nodeType":"Block","src":"4726:64:73","statements":[]},"id":17662,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":17658,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17655,"src":"4719:5:73","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"id":17659,"kind":"baseConstructorSpecifier","modifierName":{"id":17657,"name":"SingletonAuthentication","nameLocations":["4695:23:73"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"4695:23:73"},"nodeType":"ModifierInvocation","src":"4695:30:73"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":17656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17655,"mutability":"mutable","name":"vault","nameLocation":"4688:5:73","nodeType":"VariableDeclaration","scope":17662,"src":"4681:12:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":17654,"nodeType":"UserDefinedTypeName","pathNode":{"id":17653,"name":"IVault","nameLocations":["4681:6:73"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"4681:6:73"},"referencedDeclaration":2545,"src":"4681:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"4680:14:73"},"returnParameters":{"id":17660,"nodeType":"ParameterList","parameters":[],"src":"4726:0:73"},"scope":18179,"src":"4669:121:73","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[150],"body":{"id":17788,"nodeType":"Block","src":"7250:1696:73","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17675,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17670,"src":"7303:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":17678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7330:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17677,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7322:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17676,"name":"address","nodeType":"ElementaryTypeName","src":"7322:7:73","typeDescriptions":{}}},"id":17679,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7322:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7303:29:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17685,"nodeType":"IfStatement","src":"7299:88:73","trueBody":{"id":17684,"nodeType":"Block","src":"7334:53:73","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17681,"name":"ZeroContractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133,"src":"7355:19:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7355:21:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17683,"nodeType":"RevertStatement","src":"7348:28:73"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":17688,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17668,"src":"7407:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17687,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7401:5:73","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":17686,"name":"bytes","nodeType":"ElementaryTypeName","src":"7401:5:73","typeDescriptions":{}}},"id":17689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7401:19:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":17690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7421:6:73","memberName":"length","nodeType":"MemberAccess","src":"7401:26:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7431:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7401:31:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17697,"nodeType":"IfStatement","src":"7397:90:73","trueBody":{"id":17696,"nodeType":"Block","src":"7434:53:73","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17693,"name":"InvalidContractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":136,"src":"7455:19:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7455:21:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17695,"nodeType":"RevertStatement","src":"7448:28:73"}]}},{"assignments":[17700],"declarations":[{"constant":false,"id":17700,"mutability":"mutable","name":"info","nameLocation":"7565:4:73","nodeType":"VariableDeclaration","scope":17788,"src":"7545:24:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":17699,"nodeType":"UserDefinedTypeName","pathNode":{"id":17698,"name":"ContractInfo","nameLocations":["7545:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"7545:12:73"},"referencedDeclaration":52,"src":"7545:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":17704,"initialValue":{"baseExpression":{"id":17701,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"7572:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17703,"indexExpression":{"id":17702,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17670,"src":"7586:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7572:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7545:57:73"},{"condition":{"expression":{"id":17705,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17700,"src":"7616:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17706,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7621:12:73","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":49,"src":"7616:17:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17714,"nodeType":"IfStatement","src":"7612:123:73","trueBody":{"id":17713,"nodeType":"Block","src":"7635:100:73","statements":[{"errorCall":{"arguments":[{"expression":{"id":17708,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17700,"src":"7689:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17709,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7694:12:73","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":47,"src":"7689:17:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":17710,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17670,"src":"7708:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17707,"name":"ContractAddressAlreadyRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":92,"src":"7656:32:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_ContractType_$43_$_t_address_$returns$_t_error_$","typeString":"function (enum ContractType,address) pure returns (error)"}},"id":17711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7656:68:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17712,"nodeType":"RevertStatement","src":"7649:75:73"}]}},{"assignments":[17716],"declarations":[{"constant":false,"id":17716,"mutability":"mutable","name":"contractId","nameLocation":"7828:10:73","nodeType":"VariableDeclaration","scope":17788,"src":"7820:18:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17715,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7820:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":17720,"initialValue":{"arguments":[{"id":17718,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17668,"src":"7856:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17717,"name":"_getContractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18178,"src":"7841:14:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":17719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7841:28:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"7820:49:73"},{"assignments":[17722],"declarations":[{"constant":false,"id":17722,"mutability":"mutable","name":"existingRegistryAddress","nameLocation":"7887:23:73","nodeType":"VariableDeclaration","scope":17788,"src":"7879:31:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17721,"name":"address","nodeType":"ElementaryTypeName","src":"7879:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17726,"initialValue":{"baseExpression":{"id":17723,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17636,"src":"7913:17:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":17725,"indexExpression":{"id":17724,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17716,"src":"7931:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7913:29:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"7879:63:73"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17727,"name":"existingRegistryAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17722,"src":"7956:23:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":17730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7991:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17729,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7983:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17728,"name":"address","nodeType":"ElementaryTypeName","src":"7983:7:73","typeDescriptions":{}}},"id":17731,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7983:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7956:37:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17746,"nodeType":"IfStatement","src":"7952:197:73","trueBody":{"id":17745,"nodeType":"Block","src":"7995:154:73","statements":[{"expression":{"id":17737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17733,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17700,"src":"8009:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":17734,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"8016:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17736,"indexExpression":{"id":17735,"name":"existingRegistryAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17722,"src":"8030:23:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8016:38:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"src":"8009:45:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17738,"nodeType":"ExpressionStatement","src":"8009:45:73"},{"errorCall":{"arguments":[{"expression":{"id":17740,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17700,"src":"8106:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17741,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8111:12:73","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":47,"src":"8106:17:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":17742,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17668,"src":"8125:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17739,"name":"ContractNameAlreadyRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100,"src":"8076:29:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_ContractType_$43_$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (enum ContractType,string memory) pure returns (error)"}},"id":17743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8076:62:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17744,"nodeType":"RevertStatement","src":"8069:69:73"}]}},{"assignments":[17748],"declarations":[{"constant":false,"id":17748,"mutability":"mutable","name":"existingAliasAddress","nameLocation":"8222:20:73","nodeType":"VariableDeclaration","scope":17788,"src":"8214:28:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17747,"name":"address","nodeType":"ElementaryTypeName","src":"8214:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17752,"initialValue":{"baseExpression":{"id":17749,"name":"_contractAliases","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17645,"src":"8245:16:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":17751,"indexExpression":{"id":17750,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17716,"src":"8262:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8245:28:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8214:59:73"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17753,"name":"existingAliasAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17748,"src":"8287:20:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":17756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8319:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17755,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8311:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17754,"name":"address","nodeType":"ElementaryTypeName","src":"8311:7:73","typeDescriptions":{}}},"id":17757,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8311:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8287:34:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17765,"nodeType":"IfStatement","src":"8283:132:73","trueBody":{"id":17764,"nodeType":"Block","src":"8323:92:73","statements":[{"errorCall":{"arguments":[{"id":17760,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17668,"src":"8369:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":17761,"name":"existingAliasAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17748,"src":"8383:20:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17759,"name":"ContractNameInUseAsAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":107,"src":"8344:24:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$_t_address_$returns$_t_error_$","typeString":"function (string memory,address) pure returns (error)"}},"id":17762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8344:60:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17763,"nodeType":"RevertStatement","src":"8337:67:73"}]}},{"expression":{"id":17770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17766,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17636,"src":"8494:17:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":17768,"indexExpression":{"id":17767,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17716,"src":"8512:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8494:29:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17769,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17670,"src":"8526:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8494:47:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":17771,"nodeType":"ExpressionStatement","src":"8494:47:73"},{"expression":{"id":17780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17772,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"8695:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17774,"indexExpression":{"id":17773,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17670,"src":"8709:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8695:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17776,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17666,"src":"8769:12:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"hexValue":"74727565","id":17777,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8809:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"74727565","id":17778,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8837:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":17775,"name":"ContractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52,"src":"8728:12:73","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ContractInfo_$52_storage_ptr_$","typeString":"type(struct IBalancerContractRegistry.ContractInfo storage pointer)"}},"id":17779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["8755:12:73","8795:12:73","8827:8:73"],"names":["contractType","isRegistered","isActive"],"nodeType":"FunctionCall","src":"8728:124:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"src":"8695:157:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"id":17781,"nodeType":"ExpressionStatement","src":"8695:157:73"},{"eventCall":{"arguments":[{"id":17783,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17666,"src":"8895:12:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":17784,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17668,"src":"8909:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":17785,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17670,"src":"8923:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17782,"name":"BalancerContractRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62,"src":"8868:26:73","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_enum$_ContractType_$43_$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (enum ContractType,string memory,address)"}},"id":17786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8868:71:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17787,"nodeType":"EmitStatement","src":"8863:76:73"}]},"documentation":{"id":17663,"nodeType":"StructuredDocumentation","src":"7038:41:73","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"e0376ab4","id":17789,"implemented":true,"kind":"function","modifiers":[{"id":17673,"kind":"modifierInvocation","modifierName":{"id":17672,"name":"authenticate","nameLocations":["7237:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"7237:12:73"},"nodeType":"ModifierInvocation","src":"7237:12:73"}],"name":"registerBalancerContract","nameLocation":"7093:24:73","nodeType":"FunctionDefinition","parameters":{"id":17671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17666,"mutability":"mutable","name":"contractType","nameLocation":"7140:12:73","nodeType":"VariableDeclaration","scope":17789,"src":"7127:25:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":17665,"nodeType":"UserDefinedTypeName","pathNode":{"id":17664,"name":"ContractType","nameLocations":["7127:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"7127:12:73"},"referencedDeclaration":43,"src":"7127:12:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":17668,"mutability":"mutable","name":"contractName","nameLocation":"7176:12:73","nodeType":"VariableDeclaration","scope":17789,"src":"7162:26:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17667,"name":"string","nodeType":"ElementaryTypeName","src":"7162:6:73","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":17670,"mutability":"mutable","name":"contractAddress","nameLocation":"7206:15:73","nodeType":"VariableDeclaration","scope":17789,"src":"7198:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17669,"name":"address","nodeType":"ElementaryTypeName","src":"7198:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7117:110:73"},"returnParameters":{"id":17674,"nodeType":"ParameterList","parameters":[],"src":"7250:0:73"},"scope":18179,"src":"7084:1862:73","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[156],"body":{"id":17868,"nodeType":"Block","src":"9084:851:73","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":17799,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17792,"src":"9104:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17798,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9098:5:73","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":17797,"name":"bytes","nodeType":"ElementaryTypeName","src":"9098:5:73","typeDescriptions":{}}},"id":17800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9098:19:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":17801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9118:6:73","memberName":"length","nodeType":"MemberAccess","src":"9098:26:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9128:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9098:31:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17808,"nodeType":"IfStatement","src":"9094:90:73","trueBody":{"id":17807,"nodeType":"Block","src":"9131:53:73","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17804,"name":"InvalidContractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":136,"src":"9152:19:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9152:21:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17806,"nodeType":"RevertStatement","src":"9145:28:73"}]}},{"assignments":[17810],"declarations":[{"constant":false,"id":17810,"mutability":"mutable","name":"contractId","nameLocation":"9243:10:73","nodeType":"VariableDeclaration","scope":17868,"src":"9235:18:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17809,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9235:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":17814,"initialValue":{"arguments":[{"id":17812,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17792,"src":"9271:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17811,"name":"_getContractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18178,"src":"9256:14:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":17813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9256:28:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9235:49:73"},{"assignments":[17816],"declarations":[{"constant":false,"id":17816,"mutability":"mutable","name":"contractAddress","nameLocation":"9302:15:73","nodeType":"VariableDeclaration","scope":17868,"src":"9294:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17815,"name":"address","nodeType":"ElementaryTypeName","src":"9294:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17820,"initialValue":{"baseExpression":{"id":17817,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17636,"src":"9320:17:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":17819,"indexExpression":{"id":17818,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17810,"src":"9338:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9320:29:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"9294:55:73"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17821,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17816,"src":"9364:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":17824,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9391:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17823,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9383:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17822,"name":"address","nodeType":"ElementaryTypeName","src":"9383:7:73","typeDescriptions":{}}},"id":17825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9383:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9364:29:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17832,"nodeType":"IfStatement","src":"9360:106:73","trueBody":{"id":17831,"nodeType":"Block","src":"9395:71:73","statements":[{"errorCall":{"arguments":[{"id":17828,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17792,"src":"9442:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17827,"name":"ContractNameNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120,"src":"9416:25:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":17829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9416:39:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17830,"nodeType":"RevertStatement","src":"9409:46:73"}]}},{"assignments":[17835],"declarations":[{"constant":false,"id":17835,"mutability":"mutable","name":"info","nameLocation":"9496:4:73","nodeType":"VariableDeclaration","scope":17868,"src":"9476:24:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":17834,"nodeType":"UserDefinedTypeName","pathNode":{"id":17833,"name":"ContractInfo","nameLocations":["9476:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"9476:12:73"},"referencedDeclaration":52,"src":"9476:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":17839,"initialValue":{"baseExpression":{"id":17836,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"9503:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17838,"indexExpression":{"id":17837,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17816,"src":"9517:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9503:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"9476:57:73"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17840,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17835,"src":"9633:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17841,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9638:12:73","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":49,"src":"9633:17:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":17842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9654:5:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"9633:26:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17850,"nodeType":"IfStatement","src":"9629:112:73","trueBody":{"id":17849,"nodeType":"Block","src":"9661:80:73","statements":[{"errorCall":{"arguments":[{"id":17845,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17792,"src":"9700:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":17846,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17816,"src":"9714:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17844,"name":"InconsistentState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17652,"src":"9682:17:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$_t_address_$returns$_t_error_$","typeString":"function (string memory,address) pure returns (error)"}},"id":17847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9682:48:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17848,"nodeType":"RevertStatement","src":"9675:55:73"}]}},{"expression":{"id":17854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"9751:36:73","subExpression":{"baseExpression":{"id":17851,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17636,"src":"9758:17:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":17853,"indexExpression":{"id":17852,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17810,"src":"9776:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9758:29:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17855,"nodeType":"ExpressionStatement","src":"9751:36:73"},{"expression":{"id":17859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"9797:37:73","subExpression":{"baseExpression":{"id":17856,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"9804:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17858,"indexExpression":{"id":17857,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17816,"src":"9818:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9804:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17860,"nodeType":"ExpressionStatement","src":"9797:37:73"},{"eventCall":{"arguments":[{"expression":{"id":17862,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17835,"src":"9879:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17863,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9884:12:73","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":47,"src":"9879:17:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":17864,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17792,"src":"9898:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":17865,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17816,"src":"9912:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17861,"name":"BalancerContractDeregistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72,"src":"9850:28:73","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_enum$_ContractType_$43_$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (enum ContractType,string memory,address)"}},"id":17866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9850:78:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17867,"nodeType":"EmitStatement","src":"9845:83:73"}]},"documentation":{"id":17790,"nodeType":"StructuredDocumentation","src":"8952:41:73","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"c7f90793","id":17869,"implemented":true,"kind":"function","modifiers":[{"id":17795,"kind":"modifierInvocation","modifierName":{"id":17794,"name":"authenticate","nameLocations":["9071:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"9071:12:73"},"nodeType":"ModifierInvocation","src":"9071:12:73"}],"name":"deregisterBalancerContract","nameLocation":"9007:26:73","nodeType":"FunctionDefinition","parameters":{"id":17793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17792,"mutability":"mutable","name":"contractName","nameLocation":"9048:12:73","nodeType":"VariableDeclaration","scope":17869,"src":"9034:26:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17791,"name":"string","nodeType":"ElementaryTypeName","src":"9034:6:73","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"9033:28:73"},"returnParameters":{"id":17796,"nodeType":"ParameterList","parameters":[],"src":"9084:0:73"},"scope":18179,"src":"8998:937:73","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[162],"body":{"id":17931,"nodeType":"Block","src":"10069:949:73","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17877,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17872,"src":"10083:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":17880,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10110:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17879,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10102:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17878,"name":"address","nodeType":"ElementaryTypeName","src":"10102:7:73","typeDescriptions":{}}},"id":17881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10102:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10083:29:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17887,"nodeType":"IfStatement","src":"10079:88:73","trueBody":{"id":17886,"nodeType":"Block","src":"10114:53:73","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17883,"name":"ZeroContractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133,"src":"10135:19:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10135:21:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17885,"nodeType":"RevertStatement","src":"10128:28:73"}]}},{"assignments":[17890],"declarations":[{"constant":false,"id":17890,"mutability":"mutable","name":"info","nameLocation":"10197:4:73","nodeType":"VariableDeclaration","scope":17931,"src":"10177:24:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":17889,"nodeType":"UserDefinedTypeName","pathNode":{"id":17888,"name":"ContractInfo","nameLocations":["10177:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"10177:12:73"},"referencedDeclaration":52,"src":"10177:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":17894,"initialValue":{"baseExpression":{"id":17891,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"10204:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17893,"indexExpression":{"id":17892,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17872,"src":"10218:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10204:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"10177:57:73"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17895,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17890,"src":"10304:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17896,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10309:12:73","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":49,"src":"10304:17:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":17897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10325:5:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10304:26:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17904,"nodeType":"IfStatement","src":"10300:109:73","trueBody":{"id":17903,"nodeType":"Block","src":"10332:77:73","statements":[{"errorCall":{"arguments":[{"id":17900,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17872,"src":"10382:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17899,"name":"ContractAddressNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":125,"src":"10353:28:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":17901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10353:45:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17902,"nodeType":"RevertStatement","src":"10346:52:73"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17905,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17890,"src":"10503:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17906,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10508:8:73","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":51,"src":"10503:13:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":17907,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10520:5:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10503:22:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17914,"nodeType":"IfStatement","src":"10499:102:73","trueBody":{"id":17913,"nodeType":"Block","src":"10527:74:73","statements":[{"errorCall":{"arguments":[{"id":17910,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17872,"src":"10574:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17909,"name":"ContractAlreadyDeprecated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":130,"src":"10548:25:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":17911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10548:42:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17912,"nodeType":"RevertStatement","src":"10541:49:73"}]}},{"expression":{"id":17919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17915,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17890,"src":"10884:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17917,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10889:8:73","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":51,"src":"10884:13:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":17918,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10900:5:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10884:21:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17920,"nodeType":"ExpressionStatement","src":"10884:21:73"},{"expression":{"id":17925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17921,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"10915:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17923,"indexExpression":{"id":17922,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17872,"src":"10929:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10915:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17924,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17890,"src":"10948:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"src":"10915:37:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"id":17926,"nodeType":"ExpressionStatement","src":"10915:37:73"},{"eventCall":{"arguments":[{"id":17928,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17872,"src":"10995:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17927,"name":"BalancerContractDeprecated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77,"src":"10968:26:73","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":17929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10968:43:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17930,"nodeType":"EmitStatement","src":"10963:48:73"}]},"documentation":{"id":17870,"nodeType":"StructuredDocumentation","src":"9941:41:73","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"44969a9c","id":17932,"implemented":true,"kind":"function","modifiers":[{"id":17875,"kind":"modifierInvocation","modifierName":{"id":17874,"name":"authenticate","nameLocations":["10056:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"10056:12:73"},"nodeType":"ModifierInvocation","src":"10056:12:73"}],"name":"deprecateBalancerContract","nameLocation":"9996:25:73","nodeType":"FunctionDefinition","parameters":{"id":17873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17872,"mutability":"mutable","name":"contractAddress","nameLocation":"10030:15:73","nodeType":"VariableDeclaration","scope":17932,"src":"10022:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17871,"name":"address","nodeType":"ElementaryTypeName","src":"10022:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10021:25:73"},"returnParameters":{"id":17876,"nodeType":"ParameterList","parameters":[],"src":"10069:0:73"},"scope":18179,"src":"9987:1031:73","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[170],"body":{"id":18025,"nodeType":"Block","src":"11210:1370:73","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":17944,"name":"contractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17935,"src":"11269:13:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17943,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11263:5:73","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":17942,"name":"bytes","nodeType":"ElementaryTypeName","src":"11263:5:73","typeDescriptions":{}}},"id":17945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11263:20:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":17946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11284:6:73","memberName":"length","nodeType":"MemberAccess","src":"11263:27:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17947,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11294:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11263:32:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17953,"nodeType":"IfStatement","src":"11259:92:73","trueBody":{"id":17952,"nodeType":"Block","src":"11297:54:73","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17949,"name":"InvalidContractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":139,"src":"11318:20:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11318:22:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17951,"nodeType":"RevertStatement","src":"11311:29:73"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17954,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17937,"src":"11365:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":17957,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11392:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17956,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11384:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17955,"name":"address","nodeType":"ElementaryTypeName","src":"11384:7:73","typeDescriptions":{}}},"id":17958,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11384:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11365:29:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17964,"nodeType":"IfStatement","src":"11361:88:73","trueBody":{"id":17963,"nodeType":"Block","src":"11396:53:73","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17960,"name":"ZeroContractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133,"src":"11417:19:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11417:21:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17962,"nodeType":"RevertStatement","src":"11410:28:73"}]}},{"assignments":[17967],"declarations":[{"constant":false,"id":17967,"mutability":"mutable","name":"info","nameLocation":"11533:4:73","nodeType":"VariableDeclaration","scope":18025,"src":"11513:24:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":17966,"nodeType":"UserDefinedTypeName","pathNode":{"id":17965,"name":"ContractInfo","nameLocations":["11513:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"11513:12:73"},"referencedDeclaration":52,"src":"11513:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":17971,"initialValue":{"baseExpression":{"id":17968,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"11540:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17970,"indexExpression":{"id":17969,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17937,"src":"11554:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11540:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"11513:57:73"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17972,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17967,"src":"11584:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17973,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11589:12:73","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":49,"src":"11584:17:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":17974,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11605:5:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"11584:26:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17981,"nodeType":"IfStatement","src":"11580:109:73","trueBody":{"id":17980,"nodeType":"Block","src":"11612:77:73","statements":[{"errorCall":{"arguments":[{"id":17977,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17937,"src":"11662:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17976,"name":"ContractAddressNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":125,"src":"11633:28:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":17978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11633:45:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17979,"nodeType":"RevertStatement","src":"11626:52:73"}]}},{"assignments":[17983],"declarations":[{"constant":false,"id":17983,"mutability":"mutable","name":"contractId","nameLocation":"12061:10:73","nodeType":"VariableDeclaration","scope":18025,"src":"12053:18:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17982,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12053:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":17987,"initialValue":{"arguments":[{"id":17985,"name":"contractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17935,"src":"12089:13:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17984,"name":"_getContractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18178,"src":"12074:14:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":17986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12074:29:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"12053:50:73"},{"assignments":[17989],"declarations":[{"constant":false,"id":17989,"mutability":"mutable","name":"existingRegistryAddress","nameLocation":"12121:23:73","nodeType":"VariableDeclaration","scope":18025,"src":"12113:31:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17988,"name":"address","nodeType":"ElementaryTypeName","src":"12113:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17993,"initialValue":{"baseExpression":{"id":17990,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17636,"src":"12147:17:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":17992,"indexExpression":{"id":17991,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17983,"src":"12165:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12147:29:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"12113:63:73"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17994,"name":"existingRegistryAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17989,"src":"12190:23:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":17997,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12225:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17996,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12217:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17995,"name":"address","nodeType":"ElementaryTypeName","src":"12217:7:73","typeDescriptions":{}}},"id":17998,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12217:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12190:37:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18013,"nodeType":"IfStatement","src":"12186:193:73","trueBody":{"id":18012,"nodeType":"Block","src":"12229:150:73","statements":[{"expression":{"id":18004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18000,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17967,"src":"12243:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":18001,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"12250:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":18003,"indexExpression":{"id":18002,"name":"existingRegistryAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17989,"src":"12264:23:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12250:38:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"src":"12243:45:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":18005,"nodeType":"ExpressionStatement","src":"12243:45:73"},{"errorCall":{"arguments":[{"expression":{"id":18007,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17967,"src":"12335:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":18008,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12340:12:73","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":47,"src":"12335:17:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":18009,"name":"contractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17935,"src":"12354:13:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":18006,"name":"ContractAliasInUseAsName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":115,"src":"12310:24:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_ContractType_$43_$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (enum ContractType,string memory) pure returns (error)"}},"id":18010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12310:58:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18011,"nodeType":"RevertStatement","src":"12303:65:73"}]}},{"expression":{"id":18018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":18014,"name":"_contractAliases","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17645,"src":"12459:16:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":18016,"indexExpression":{"id":18015,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17983,"src":"12476:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12459:28:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18017,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17937,"src":"12490:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12459:46:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18019,"nodeType":"ExpressionStatement","src":"12459:46:73"},{"eventCall":{"arguments":[{"id":18021,"name":"contractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17935,"src":"12542:13:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":18022,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17937,"src":"12557:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18020,"name":"ContractAliasUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":84,"src":"12521:20:73","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (string memory,address)"}},"id":18023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12521:52:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18024,"nodeType":"EmitStatement","src":"12516:57:73"}]},"documentation":{"id":17933,"nodeType":"StructuredDocumentation","src":"11024:41:73","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"2967af96","id":18026,"implemented":true,"kind":"function","modifiers":[{"id":17940,"kind":"modifierInvocation","modifierName":{"id":17939,"name":"authenticate","nameLocations":["11197:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"11197:12:73"},"nodeType":"ModifierInvocation","src":"11197:12:73"}],"name":"addOrUpdateBalancerContractAlias","nameLocation":"11079:32:73","nodeType":"FunctionDefinition","parameters":{"id":17938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17935,"mutability":"mutable","name":"contractAlias","nameLocation":"11135:13:73","nodeType":"VariableDeclaration","scope":18026,"src":"11121:27:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17934,"name":"string","nodeType":"ElementaryTypeName","src":"11121:6:73","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":17937,"mutability":"mutable","name":"contractAddress","nameLocation":"11166:15:73","nodeType":"VariableDeclaration","scope":18026,"src":"11158:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17936,"name":"address","nodeType":"ElementaryTypeName","src":"11158:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11111:76:73"},"returnParameters":{"id":17941,"nodeType":"ParameterList","parameters":[],"src":"11210:0:73"},"scope":18179,"src":"11070:1510:73","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[181],"body":{"id":18042,"nodeType":"Block","src":"12747:80:73","statements":[{"expression":{"arguments":[{"id":18038,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18030,"src":"12790:12:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":18039,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18032,"src":"12804:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18037,"name":"_isActiveBalancerContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18069,"src":"12764:25:73","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_enum$_ContractType_$43_$_t_address_$returns$_t_bool_$","typeString":"function (enum ContractType,address) view returns (bool)"}},"id":18040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12764:56:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":18036,"id":18041,"nodeType":"Return","src":"12757:63:73"}]},"documentation":{"id":18027,"nodeType":"StructuredDocumentation","src":"12586:41:73","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"ae2733a4","id":18043,"implemented":true,"kind":"function","modifiers":[],"name":"isActiveBalancerContract","nameLocation":"12641:24:73","nodeType":"FunctionDefinition","parameters":{"id":18033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18030,"mutability":"mutable","name":"contractType","nameLocation":"12679:12:73","nodeType":"VariableDeclaration","scope":18043,"src":"12666:25:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":18029,"nodeType":"UserDefinedTypeName","pathNode":{"id":18028,"name":"ContractType","nameLocations":["12666:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"12666:12:73"},"referencedDeclaration":43,"src":"12666:12:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":18032,"mutability":"mutable","name":"contractAddress","nameLocation":"12701:15:73","nodeType":"VariableDeclaration","scope":18043,"src":"12693:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18031,"name":"address","nodeType":"ElementaryTypeName","src":"12693:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12665:52:73"},"returnParameters":{"id":18036,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18035,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18043,"src":"12741:4:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18034,"name":"bool","nodeType":"ElementaryTypeName","src":"12741:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12740:6:73"},"scope":18179,"src":"12632:195:73","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":18068,"nodeType":"Block","src":"12971:235:73","statements":[{"assignments":[18055],"declarations":[{"constant":false,"id":18055,"mutability":"mutable","name":"info","nameLocation":"13001:4:73","nodeType":"VariableDeclaration","scope":18068,"src":"12981:24:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":18054,"nodeType":"UserDefinedTypeName","pathNode":{"id":18053,"name":"ContractInfo","nameLocations":["12981:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"12981:12:73"},"referencedDeclaration":52,"src":"12981:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":18059,"initialValue":{"baseExpression":{"id":18056,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"13008:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":18058,"indexExpression":{"id":18057,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18048,"src":"13022:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13008:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"12981:57:73"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18060,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18055,"src":"13149:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":18061,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13154:8:73","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":51,"src":"13149:13:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"id":18065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18062,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18055,"src":"13166:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":18063,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13171:12:73","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":47,"src":"13166:17:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":18064,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18046,"src":"13187:12:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"src":"13166:33:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13149:50:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":18052,"id":18067,"nodeType":"Return","src":"13142:57:73"}]},"id":18069,"implemented":true,"kind":"function","modifiers":[],"name":"_isActiveBalancerContract","nameLocation":"12842:25:73","nodeType":"FunctionDefinition","parameters":{"id":18049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18046,"mutability":"mutable","name":"contractType","nameLocation":"12890:12:73","nodeType":"VariableDeclaration","scope":18069,"src":"12877:25:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":18045,"nodeType":"UserDefinedTypeName","pathNode":{"id":18044,"name":"ContractType","nameLocations":["12877:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"12877:12:73"},"referencedDeclaration":43,"src":"12877:12:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":18048,"mutability":"mutable","name":"contractAddress","nameLocation":"12920:15:73","nodeType":"VariableDeclaration","scope":18069,"src":"12912:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18047,"name":"address","nodeType":"ElementaryTypeName","src":"12912:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12867:74:73"},"returnParameters":{"id":18052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18051,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18069,"src":"12965:4:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18050,"name":"bool","nodeType":"ElementaryTypeName","src":"12965:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12964:6:73"},"scope":18179,"src":"12833:373:73","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[194],"body":{"id":18133,"nodeType":"Block","src":"13427:833:73","statements":[{"assignments":[18083],"declarations":[{"constant":false,"id":18083,"mutability":"mutable","name":"contractId","nameLocation":"13445:10:73","nodeType":"VariableDeclaration","scope":18133,"src":"13437:18:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18082,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13437:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":18087,"initialValue":{"arguments":[{"id":18085,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18075,"src":"13473:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":18084,"name":"_getContractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18178,"src":"13458:14:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":18086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13458:28:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13437:49:73"},{"assignments":[18089],"declarations":[{"constant":false,"id":18089,"mutability":"mutable","name":"registeredAddress","nameLocation":"13504:17:73","nodeType":"VariableDeclaration","scope":18133,"src":"13496:25:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18088,"name":"address","nodeType":"ElementaryTypeName","src":"13496:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":18093,"initialValue":{"baseExpression":{"id":18090,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17636,"src":"13524:17:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":18092,"indexExpression":{"id":18091,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18083,"src":"13542:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13524:29:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"13496:57:73"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18094,"name":"registeredAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18089,"src":"13641:17:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":18097,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13670:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":18096,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13662:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18095,"name":"address","nodeType":"ElementaryTypeName","src":"13662:7:73","typeDescriptions":{}}},"id":18098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13662:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13641:31:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18107,"nodeType":"IfStatement","src":"13637:110:73","trueBody":{"id":18106,"nodeType":"Block","src":"13674:73:73","statements":[{"expression":{"id":18104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18100,"name":"registeredAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18089,"src":"13688:17:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":18101,"name":"_contractAliases","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17645,"src":"13708:16:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":18103,"indexExpression":{"id":18102,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18083,"src":"13725:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13708:28:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13688:48:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18105,"nodeType":"ExpressionStatement","src":"13688:48:73"}]}},{"assignments":[18110],"declarations":[{"constant":false,"id":18110,"mutability":"mutable","name":"info","nameLocation":"13777:4:73","nodeType":"VariableDeclaration","scope":18133,"src":"13757:24:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":18109,"nodeType":"UserDefinedTypeName","pathNode":{"id":18108,"name":"ContractInfo","nameLocations":["13757:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"13757:12:73"},"referencedDeclaration":52,"src":"13757:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":18114,"initialValue":{"baseExpression":{"id":18111,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"13784:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":18113,"indexExpression":{"id":18112,"name":"registeredAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18089,"src":"13798:17:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13784:32:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"13757:59:73"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18115,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18110,"src":"14100:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":18116,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14105:12:73","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":49,"src":"14100:17:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"id":18120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18117,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18110,"src":"14121:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":18118,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14126:12:73","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":47,"src":"14121:17:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":18119,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18073,"src":"14142:12:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"src":"14121:33:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14100:54:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18132,"nodeType":"IfStatement","src":"14096:158:73","trueBody":{"id":18131,"nodeType":"Block","src":"14156:98:73","statements":[{"expression":{"id":18124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18122,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18078,"src":"14170:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18123,"name":"registeredAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18089,"src":"14188:17:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14170:35:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18125,"nodeType":"ExpressionStatement","src":"14170:35:73"},{"expression":{"id":18129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18126,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18080,"src":"14219:8:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":18127,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18110,"src":"14230:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":18128,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14235:8:73","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":51,"src":"14230:13:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14219:24:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18130,"nodeType":"ExpressionStatement","src":"14219:24:73"}]}}]},"documentation":{"id":18070,"nodeType":"StructuredDocumentation","src":"13212:41:73","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"41d8c0bb","id":18134,"implemented":true,"kind":"function","modifiers":[],"name":"getBalancerContract","nameLocation":"13267:19:73","nodeType":"FunctionDefinition","parameters":{"id":18076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18073,"mutability":"mutable","name":"contractType","nameLocation":"13309:12:73","nodeType":"VariableDeclaration","scope":18134,"src":"13296:25:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":18072,"nodeType":"UserDefinedTypeName","pathNode":{"id":18071,"name":"ContractType","nameLocations":["13296:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"13296:12:73"},"referencedDeclaration":43,"src":"13296:12:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":18075,"mutability":"mutable","name":"contractName","nameLocation":"13345:12:73","nodeType":"VariableDeclaration","scope":18134,"src":"13331:26:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":18074,"name":"string","nodeType":"ElementaryTypeName","src":"13331:6:73","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"13286:77:73"},"returnParameters":{"id":18081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18078,"mutability":"mutable","name":"contractAddress","nameLocation":"13395:15:73","nodeType":"VariableDeclaration","scope":18134,"src":"13387:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18077,"name":"address","nodeType":"ElementaryTypeName","src":"13387:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18080,"mutability":"mutable","name":"isActive","nameLocation":"13417:8:73","nodeType":"VariableDeclaration","scope":18134,"src":"13412:13:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18079,"name":"bool","nodeType":"ElementaryTypeName","src":"13412:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13386:40:73"},"scope":18179,"src":"13258:1002:73","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[203],"body":{"id":18147,"nodeType":"Block","src":"14419:54:73","statements":[{"expression":{"baseExpression":{"id":18143,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"14436:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":18145,"indexExpression":{"id":18144,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18137,"src":"14450:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14436:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"functionReturnParameters":18142,"id":18146,"nodeType":"Return","src":"14429:37:73"}]},"documentation":{"id":18135,"nodeType":"StructuredDocumentation","src":"14266:41:73","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"8554c327","id":18148,"implemented":true,"kind":"function","modifiers":[],"name":"getBalancerContractInfo","nameLocation":"14321:23:73","nodeType":"FunctionDefinition","parameters":{"id":18138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18137,"mutability":"mutable","name":"contractAddress","nameLocation":"14353:15:73","nodeType":"VariableDeclaration","scope":18148,"src":"14345:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18136,"name":"address","nodeType":"ElementaryTypeName","src":"14345:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14344:25:73"},"returnParameters":{"id":18142,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18141,"mutability":"mutable","name":"info","nameLocation":"14413:4:73","nodeType":"VariableDeclaration","scope":18148,"src":"14393:24:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":18140,"nodeType":"UserDefinedTypeName","pathNode":{"id":18139,"name":"ContractInfo","nameLocations":["14393:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"14393:12:73"},"referencedDeclaration":52,"src":"14393:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"src":"14392:26:73"},"scope":18179,"src":"14312:161:73","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[211],"body":{"id":18162,"nodeType":"Block","src":"14595:78:73","statements":[{"expression":{"arguments":[{"expression":{"id":18157,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43,"src":"14638:12:73","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ContractType_$43_$","typeString":"type(enum ContractType)"}},"id":18158,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14651:6:73","memberName":"ROUTER","nodeType":"MemberAccess","referencedDeclaration":40,"src":"14638:19:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":18159,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18151,"src":"14659:6:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18156,"name":"_isActiveBalancerContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18069,"src":"14612:25:73","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_enum$_ContractType_$43_$_t_address_$returns$_t_bool_$","typeString":"function (enum ContractType,address) view returns (bool)"}},"id":18160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14612:54:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":18155,"id":18161,"nodeType":"Return","src":"14605:61:73"}]},"documentation":{"id":18149,"nodeType":"StructuredDocumentation","src":"14479:41:73","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"264e97e0","id":18163,"implemented":true,"kind":"function","modifiers":[],"name":"isTrustedRouter","nameLocation":"14534:15:73","nodeType":"FunctionDefinition","parameters":{"id":18152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18151,"mutability":"mutable","name":"router","nameLocation":"14558:6:73","nodeType":"VariableDeclaration","scope":18163,"src":"14550:14:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18150,"name":"address","nodeType":"ElementaryTypeName","src":"14550:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14549:16:73"},"returnParameters":{"id":18155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18154,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18163,"src":"14589:4:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18153,"name":"bool","nodeType":"ElementaryTypeName","src":"14589:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14588:6:73"},"scope":18179,"src":"14525:148:73","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":18177,"nodeType":"Block","src":"14763:65:73","statements":[{"expression":{"arguments":[{"arguments":[{"id":18173,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18165,"src":"14807:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":18171,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"14790:3:73","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18172,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14794:12:73","memberName":"encodePacked","nodeType":"MemberAccess","src":"14790:16:73","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":18174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14790:30:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":18170,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14780:9:73","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":18175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14780:41:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":18169,"id":18176,"nodeType":"Return","src":"14773:48:73"}]},"id":18178,"implemented":true,"kind":"function","modifiers":[],"name":"_getContractId","nameLocation":"14688:14:73","nodeType":"FunctionDefinition","parameters":{"id":18166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18165,"mutability":"mutable","name":"contractName","nameLocation":"14717:12:73","nodeType":"VariableDeclaration","scope":18178,"src":"14703:26:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":18164,"name":"string","nodeType":"ElementaryTypeName","src":"14703:6:73","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"14702:28:73"},"returnParameters":{"id":18169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18168,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18178,"src":"14754:7:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18167,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14754:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14753:9:73"},"scope":18179,"src":"14679:149:73","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":18180,"src":"2741:12089:73","usedErrors":[5,92,100,107,115,120,125,130,133,136,139,7355,17652],"usedEvents":[62,72,77,84]}],"src":"46:14785:73"},"id":73},"contracts/BalancerFeeBurner.sol":{"ast":{"absolutePath":"contracts/BalancerFeeBurner.sol","exportedSymbols":{"AddLiquidityKind":[4241],"AddLiquidityParams":[4257],"AfterSwapParams":[4235],"BalancerFeeBurner":[18527],"BufferWrapOrUnwrapParams":[4296],"FEE_BITLENGTH":[4299],"FEE_SCALING_FACTOR":[4302],"FeeBurnerAuthentication":[19845],"HookFlags":[4061],"HooksConfig":[4085],"IBalancerFeeBurner":[276],"IERC20":[10576],"IERC4626":[9846],"IProtocolFeeBurner":[948],"IProtocolFeeSweeper":[1137],"IRateProvider":[24],"IVault":[2545],"IVaultErrors":[3202],"LiquidityManagement":[4014],"MAX_FEE_PERCENTAGE":[4305],"PoolConfig":[4039],"PoolConfigBits":[4016],"PoolData":[4163],"PoolRoleAccounts":[4111],"PoolSwapParams":[4206],"ReentrancyGuardTransient":[7012],"RemoveLiquidityKind":[4262],"RemoveLiquidityParams":[4278],"Rounding":[4166],"SafeERC20":[11066],"SwapKind":[4169],"SwapState":[4095],"TokenConfig":[4128],"TokenInfo":[4138],"TokenType":[4115],"VaultGuard":[9338],"VaultState":[4103],"VaultSwapParams":[4188],"WrappingDirection":[4281]},"id":18528,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":18181,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:74"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":18183,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":11067,"src":"72:84:74","symbolAliases":[{"foreign":{"id":18182,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11066,"src":"81:9:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":18185,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":10577,"src":"157:72:74","symbolAliases":[{"foreign":{"id":18184,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"166:6:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","id":18187,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":949,"src":"231:116:74","symbolAliases":[{"foreign":{"id":18186,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"240:18:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol","id":18189,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":277,"src":"348:116:74","symbolAliases":[{"foreign":{"id":18188,"name":"IBalancerFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":276,"src":"357:18:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":18191,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":1138,"src":"465:118:74","symbolAliases":[{"foreign":{"id":18190,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1137,"src":"474:19:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":18193,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":3203,"src":"584:93:74","symbolAliases":[{"foreign":{"id":18192,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"593:12:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":18195,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":2546,"src":"678:81:74","symbolAliases":[{"foreign":{"id":18194,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"687:6:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":18196,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":4306,"src":"760:69:74","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":18198,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":7013,"src":"831:132:74","symbolAliases":[{"foreign":{"id":18197,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7012,"src":"844:24:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","file":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","id":18200,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":9339,"src":"964:78:74","symbolAliases":[{"foreign":{"id":18199,"name":"VaultGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9338,"src":"973:10:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/FeeBurnerAuthentication.sol","file":"./FeeBurnerAuthentication.sol","id":18202,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":19846,"src":"1044:72:74","symbolAliases":[{"foreign":{"id":18201,"name":"FeeBurnerAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19845,"src":"1053:23:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":18203,"name":"IBalancerFeeBurner","nameLocations":["1148:18:74"],"nodeType":"IdentifierPath","referencedDeclaration":276,"src":"1148:18:74"},"id":18204,"nodeType":"InheritanceSpecifier","src":"1148:18:74"},{"baseName":{"id":18205,"name":"ReentrancyGuardTransient","nameLocations":["1168:24:74"],"nodeType":"IdentifierPath","referencedDeclaration":7012,"src":"1168:24:74"},"id":18206,"nodeType":"InheritanceSpecifier","src":"1168:24:74"},{"baseName":{"id":18207,"name":"VaultGuard","nameLocations":["1194:10:74"],"nodeType":"IdentifierPath","referencedDeclaration":9338,"src":"1194:10:74"},"id":18208,"nodeType":"InheritanceSpecifier","src":"1194:10:74"},{"baseName":{"id":18209,"name":"FeeBurnerAuthentication","nameLocations":["1206:23:74"],"nodeType":"IdentifierPath","referencedDeclaration":19845,"src":"1206:23:74"},"id":18210,"nodeType":"InheritanceSpecifier","src":"1206:23:74"}],"canonicalName":"BalancerFeeBurner","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":18527,"linearizedBaseContracts":[18527,19845,9572,9486,12366,9338,7012,276,948],"name":"BalancerFeeBurner","nameLocation":"1127:17:74","nodeType":"ContractDefinition","nodes":[{"global":false,"id":18214,"libraryName":{"id":18211,"name":"SafeERC20","nameLocations":["1242:9:74"],"nodeType":"IdentifierPath","referencedDeclaration":11066,"src":"1242:9:74"},"nodeType":"UsingForDirective","src":"1236:27:74","typeName":{"id":18213,"nodeType":"UserDefinedTypeName","pathNode":{"id":18212,"name":"IERC20","nameLocations":["1256:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1256:6:74"},"referencedDeclaration":10576,"src":"1256:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}},{"constant":false,"id":18221,"mutability":"mutable","name":"_burnSteps","nameLocation":"1318:10:74","nodeType":"VariableDeclaration","scope":18527,"src":"1269:59:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_$","typeString":"mapping(contract IERC20 => struct IBalancerFeeBurner.SwapPathStep[])"},"typeName":{"id":18220,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":18216,"nodeType":"UserDefinedTypeName","pathNode":{"id":18215,"name":"IERC20","nameLocations":["1277:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1277:6:74"},"referencedDeclaration":10576,"src":"1277:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"1269:39:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_$","typeString":"mapping(contract IERC20 => struct IBalancerFeeBurner.SwapPathStep[])"},"valueName":"steps","valueNameLocation":"1302:5:74","valueType":{"baseType":{"id":18218,"nodeType":"UserDefinedTypeName","pathNode":{"id":18217,"name":"SwapPathStep","nameLocations":["1287:12:74"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"1287:12:74"},"referencedDeclaration":227,"src":"1287:12:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"id":18219,"nodeType":"ArrayTypeName","src":"1287:14:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"}}},"visibility":"internal"},{"body":{"id":18243,"nodeType":"Block","src":"1531:57:74","statements":[{"expression":{"id":18241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18239,"name":"protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19771,"src":"1541:18:74","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18240,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18227,"src":"1562:19:74","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"src":"1541:40:74","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"id":18242,"nodeType":"ExpressionStatement","src":"1541:40:74"}]},"id":18244,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":18232,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18224,"src":"1465:5:74","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"id":18233,"kind":"baseConstructorSpecifier","modifierName":{"id":18231,"name":"VaultGuard","nameLocations":["1454:10:74"],"nodeType":"IdentifierPath","referencedDeclaration":9338,"src":"1454:10:74"},"nodeType":"ModifierInvocation","src":"1454:17:74"},{"arguments":[{"id":18235,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18227,"src":"1496:19:74","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},{"id":18236,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18229,"src":"1517:12:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":18237,"kind":"baseConstructorSpecifier","modifierName":{"id":18234,"name":"FeeBurnerAuthentication","nameLocations":["1472:23:74"],"nodeType":"IdentifierPath","referencedDeclaration":19845,"src":"1472:23:74"},"nodeType":"ModifierInvocation","src":"1472:58:74"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":18230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18224,"mutability":"mutable","name":"vault","nameLocation":"1363:5:74","nodeType":"VariableDeclaration","scope":18244,"src":"1356:12:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":18223,"nodeType":"UserDefinedTypeName","pathNode":{"id":18222,"name":"IVault","nameLocations":["1356:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1356:6:74"},"referencedDeclaration":2545,"src":"1356:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":18227,"mutability":"mutable","name":"_protocolFeeSweeper","nameLocation":"1398:19:74","nodeType":"VariableDeclaration","scope":18244,"src":"1378:39:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":18226,"nodeType":"UserDefinedTypeName","pathNode":{"id":18225,"name":"IProtocolFeeSweeper","nameLocations":["1378:19:74"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"1378:19:74"},"referencedDeclaration":1137,"src":"1378:19:74","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"visibility":"internal"},{"constant":false,"id":18229,"mutability":"mutable","name":"initialOwner","nameLocation":"1435:12:74","nodeType":"VariableDeclaration","scope":18244,"src":"1427:20:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18228,"name":"address","nodeType":"ElementaryTypeName","src":"1427:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1346:107:74"},"returnParameters":{"id":18238,"nodeType":"ParameterList","parameters":[],"src":"1531:0:74"},"scope":18527,"src":"1335:253:74","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[264],"body":{"id":18284,"nodeType":"Block","src":"1735:157:74","statements":[{"expression":{"id":18260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"1745:27:74","subExpression":{"baseExpression":{"id":18257,"name":"_burnSteps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18221,"src":"1752:10:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_$","typeString":"mapping(contract IERC20 => struct IBalancerFeeBurner.SwapPathStep storage ref[] storage ref)"}},"id":18259,"indexExpression":{"id":18258,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18248,"src":"1763:8:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1752:20:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage","typeString":"struct IBalancerFeeBurner.SwapPathStep storage ref[] storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18261,"nodeType":"ExpressionStatement","src":"1745:27:74"},{"body":{"id":18282,"nodeType":"Block","src":"1826:60:74","statements":[{"expression":{"arguments":[{"baseExpression":{"id":18277,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18252,"src":"1866:5:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep calldata[] calldata"}},"id":18279,"indexExpression":{"id":18278,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18263,"src":"1872:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1866:8:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_calldata_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SwapPathStep_$227_calldata_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep calldata"}],"expression":{"baseExpression":{"id":18273,"name":"_burnSteps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18221,"src":"1840:10:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_$","typeString":"mapping(contract IERC20 => struct IBalancerFeeBurner.SwapPathStep storage ref[] storage ref)"}},"id":18275,"indexExpression":{"id":18274,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18248,"src":"1851:8:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1840:20:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage","typeString":"struct IBalancerFeeBurner.SwapPathStep storage ref[] storage ref"}},"id":18276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1861:4:74","memberName":"push","nodeType":"MemberAccess","src":"1840:25:74","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr_$_t_struct$_SwapPathStep_$227_storage_$returns$__$attached_to$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr_$","typeString":"function (struct IBalancerFeeBurner.SwapPathStep storage ref[] storage pointer,struct IBalancerFeeBurner.SwapPathStep storage ref)"}},"id":18280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1840:35:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18281,"nodeType":"ExpressionStatement","src":"1840:35:74"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18266,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18263,"src":"1803:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":18267,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18252,"src":"1807:5:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep calldata[] calldata"}},"id":18268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1813:6:74","memberName":"length","nodeType":"MemberAccess","src":"1807:12:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1803:16:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18283,"initializationExpression":{"assignments":[18263],"declarations":[{"constant":false,"id":18263,"mutability":"mutable","name":"i","nameLocation":"1796:1:74","nodeType":"VariableDeclaration","scope":18283,"src":"1788:9:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18262,"name":"uint256","nodeType":"ElementaryTypeName","src":"1788:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18265,"initialValue":{"hexValue":"30","id":18264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1800:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1788:13:74"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":18271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1821:3:74","subExpression":{"id":18270,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18263,"src":"1821:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18272,"nodeType":"ExpressionStatement","src":"1821:3:74"},"nodeType":"ForStatement","src":"1783:103:74"}]},"documentation":{"id":18245,"nodeType":"StructuredDocumentation","src":"1594:34:74","text":"@inheritdoc IBalancerFeeBurner"},"functionSelector":"e3746cb2","id":18285,"implemented":true,"kind":"function","modifiers":[{"id":18255,"kind":"modifierInvocation","modifierName":{"id":18254,"name":"onlyFeeRecipientOrOwner","nameLocations":["1711:23:74"],"nodeType":"IdentifierPath","referencedDeclaration":19814,"src":"1711:23:74"},"nodeType":"ModifierInvocation","src":"1711:23:74"}],"name":"setBurnPath","nameLocation":"1642:11:74","nodeType":"FunctionDefinition","parameters":{"id":18253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18248,"mutability":"mutable","name":"feeToken","nameLocation":"1661:8:74","nodeType":"VariableDeclaration","scope":18285,"src":"1654:15:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18247,"nodeType":"UserDefinedTypeName","pathNode":{"id":18246,"name":"IERC20","nameLocations":["1654:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1654:6:74"},"referencedDeclaration":10576,"src":"1654:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18252,"mutability":"mutable","name":"steps","nameLocation":"1695:5:74","nodeType":"VariableDeclaration","scope":18285,"src":"1671:29:74","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"},"typeName":{"baseType":{"id":18250,"nodeType":"UserDefinedTypeName","pathNode":{"id":18249,"name":"SwapPathStep","nameLocations":["1671:12:74"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"1671:12:74"},"referencedDeclaration":227,"src":"1671:12:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"id":18251,"nodeType":"ArrayTypeName","src":"1671:14:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"}},"visibility":"internal"}],"src":"1653:48:74"},"returnParameters":{"id":18256,"nodeType":"ParameterList","parameters":[],"src":"1735:0:74"},"scope":18527,"src":"1633:259:74","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[275],"body":{"id":18311,"nodeType":"Block","src":"2025:132:74","statements":[{"expression":{"id":18300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18296,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18294,"src":"2035:5:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":18297,"name":"_burnSteps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18221,"src":"2043:10:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_$","typeString":"mapping(contract IERC20 => struct IBalancerFeeBurner.SwapPathStep storage ref[] storage ref)"}},"id":18299,"indexExpression":{"id":18298,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18289,"src":"2054:8:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2043:20:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage","typeString":"struct IBalancerFeeBurner.SwapPathStep storage ref[] storage ref"}},"src":"2035:28:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"id":18301,"nodeType":"ExpressionStatement","src":"2035:28:74"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18302,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18294,"src":"2078:5:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"id":18303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2084:6:74","memberName":"length","nodeType":"MemberAccess","src":"2078:12:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":18304,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2094:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2078:17:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18310,"nodeType":"IfStatement","src":"2074:77:74","trueBody":{"id":18309,"nodeType":"Block","src":"2097:54:74","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18306,"name":"BurnPathDoesNotExist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":250,"src":"2118:20:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2118:22:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18308,"nodeType":"RevertStatement","src":"2111:29:74"}]}}]},"documentation":{"id":18286,"nodeType":"StructuredDocumentation","src":"1898:34:74","text":"@inheritdoc IBalancerFeeBurner"},"functionSelector":"c1cfb02a","id":18312,"implemented":true,"kind":"function","modifiers":[],"name":"getBurnPath","nameLocation":"1946:11:74","nodeType":"FunctionDefinition","parameters":{"id":18290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18289,"mutability":"mutable","name":"feeToken","nameLocation":"1965:8:74","nodeType":"VariableDeclaration","scope":18312,"src":"1958:15:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18288,"nodeType":"UserDefinedTypeName","pathNode":{"id":18287,"name":"IERC20","nameLocations":["1958:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1958:6:74"},"referencedDeclaration":10576,"src":"1958:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1957:17:74"},"returnParameters":{"id":18295,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18294,"mutability":"mutable","name":"steps","nameLocation":"2018:5:74","nodeType":"VariableDeclaration","scope":18312,"src":"1996:27:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"},"typeName":{"baseType":{"id":18292,"nodeType":"UserDefinedTypeName","pathNode":{"id":18291,"name":"SwapPathStep","nameLocations":["1996:12:74"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"1996:12:74"},"referencedDeclaration":227,"src":"1996:12:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"id":18293,"nodeType":"ArrayTypeName","src":"1996:14:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"}},"visibility":"internal"}],"src":"1995:29:74"},"scope":18527,"src":"1937:220:74","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[947],"body":{"id":18355,"nodeType":"Block","src":"2444:518:74","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":18339,"name":"BalancerFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18527,"src":"2513:17:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BalancerFeeBurner_$18527_$","typeString":"type(contract BalancerFeeBurner)"}},"id":18340,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2531:8:74","memberName":"burnHook","nodeType":"MemberAccess","referencedDeclaration":18526,"src":"2513:26:74","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_BurnHookParams_$247_calldata_ptr_$returns$__$","typeString":"function BalancerFeeBurner.burnHook(struct IBalancerFeeBurner.BurnHookParams calldata)"}},{"arguments":[{"id":18342,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18315,"src":"2600:4:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18343,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2634:3:74","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2638:6:74","memberName":"sender","nodeType":"MemberAccess","src":"2634:10:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18345,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18318,"src":"2676:8:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18346,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18320,"src":"2722:14:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18347,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18323,"src":"2771:11:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18348,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18325,"src":"2818:12:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18349,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18327,"src":"2863:9:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18350,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18329,"src":"2904:8:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18341,"name":"BurnHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":247,"src":"2557:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_BurnHookParams_$247_storage_ptr_$","typeString":"type(struct IBalancerFeeBurner.BurnHookParams storage pointer)"}},"id":18351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["2594:4:74","2626:6:74","2666:8:74","2706:14:74","2758:11:74","2804:12:74","2852:9:74","2894:8:74"],"names":["pool","sender","feeToken","feeTokenAmount","targetToken","minAmountOut","recipient","deadline"],"nodeType":"FunctionCall","src":"2557:374:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_memory_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_BurnHookParams_$247_calldata_ptr_$returns$__$","typeString":"function BalancerFeeBurner.burnHook(struct IBalancerFeeBurner.BurnHookParams calldata)"},{"typeIdentifier":"t_struct$_BurnHookParams_$247_memory_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams memory"}],"expression":{"id":18337,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2481:3:74","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18338,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2485:10:74","memberName":"encodeCall","nodeType":"MemberAccess","src":"2481:14:74","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":18352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2481:464:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18334,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"2454:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":18336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2461:6:74","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":3874,"src":"2454:13:74","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":18353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2454:501:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":18354,"nodeType":"ExpressionStatement","src":"2454:501:74"}]},"documentation":{"id":18313,"nodeType":"StructuredDocumentation","src":"2163:34:74","text":"@inheritdoc IProtocolFeeBurner"},"functionSelector":"de557a32","id":18356,"implemented":true,"kind":"function","modifiers":[{"id":18332,"kind":"modifierInvocation","modifierName":{"id":18331,"name":"onlyProtocolFeeSweeper","nameLocations":["2421:22:74"],"nodeType":"IdentifierPath","referencedDeclaration":19793,"src":"2421:22:74"},"nodeType":"ModifierInvocation","src":"2421:22:74"}],"name":"burn","nameLocation":"2211:4:74","nodeType":"FunctionDefinition","parameters":{"id":18330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18315,"mutability":"mutable","name":"pool","nameLocation":"2233:4:74","nodeType":"VariableDeclaration","scope":18356,"src":"2225:12:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18314,"name":"address","nodeType":"ElementaryTypeName","src":"2225:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18318,"mutability":"mutable","name":"feeToken","nameLocation":"2254:8:74","nodeType":"VariableDeclaration","scope":18356,"src":"2247:15:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18317,"nodeType":"UserDefinedTypeName","pathNode":{"id":18316,"name":"IERC20","nameLocations":["2247:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2247:6:74"},"referencedDeclaration":10576,"src":"2247:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18320,"mutability":"mutable","name":"feeTokenAmount","nameLocation":"2280:14:74","nodeType":"VariableDeclaration","scope":18356,"src":"2272:22:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18319,"name":"uint256","nodeType":"ElementaryTypeName","src":"2272:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18323,"mutability":"mutable","name":"targetToken","nameLocation":"2311:11:74","nodeType":"VariableDeclaration","scope":18356,"src":"2304:18:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18322,"nodeType":"UserDefinedTypeName","pathNode":{"id":18321,"name":"IERC20","nameLocations":["2304:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2304:6:74"},"referencedDeclaration":10576,"src":"2304:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18325,"mutability":"mutable","name":"minAmountOut","nameLocation":"2340:12:74","nodeType":"VariableDeclaration","scope":18356,"src":"2332:20:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18324,"name":"uint256","nodeType":"ElementaryTypeName","src":"2332:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18327,"mutability":"mutable","name":"recipient","nameLocation":"2370:9:74","nodeType":"VariableDeclaration","scope":18356,"src":"2362:17:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18326,"name":"address","nodeType":"ElementaryTypeName","src":"2362:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18329,"mutability":"mutable","name":"deadline","nameLocation":"2397:8:74","nodeType":"VariableDeclaration","scope":18356,"src":"2389:16:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18328,"name":"uint256","nodeType":"ElementaryTypeName","src":"2389:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2215:196:74"},"returnParameters":{"id":18333,"nodeType":"ParameterList","parameters":[],"src":"2444:0:74"},"scope":18527,"src":"2202:760:74","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18525,"nodeType":"Block","src":"3050:1921:74","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18366,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3216:5:74","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":18367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3222:9:74","memberName":"timestamp","nodeType":"MemberAccess","src":"3216:15:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":18368,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18359,"src":"3234:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3241:8:74","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":246,"src":"3234:15:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3216:33:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18375,"nodeType":"IfStatement","src":"3212:85:74","trueBody":{"id":18374,"nodeType":"Block","src":"3251:46:74","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18371,"name":"SwapDeadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":927,"src":"3272:12:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3272:14:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18373,"nodeType":"RevertStatement","src":"3265:21:74"}]}},{"assignments":[18378],"declarations":[{"constant":false,"id":18378,"mutability":"mutable","name":"feeToken","nameLocation":"3314:8:74","nodeType":"VariableDeclaration","scope":18525,"src":"3307:15:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18377,"nodeType":"UserDefinedTypeName","pathNode":{"id":18376,"name":"IERC20","nameLocations":["3307:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3307:6:74"},"referencedDeclaration":10576,"src":"3307:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":18381,"initialValue":{"expression":{"id":18379,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18359,"src":"3325:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3332:8:74","memberName":"feeToken","nodeType":"MemberAccess","referencedDeclaration":235,"src":"3325:15:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3307:33:74"},{"assignments":[18384],"declarations":[{"constant":false,"id":18384,"mutability":"mutable","name":"targetToken","nameLocation":"3357:11:74","nodeType":"VariableDeclaration","scope":18525,"src":"3350:18:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18383,"nodeType":"UserDefinedTypeName","pathNode":{"id":18382,"name":"IERC20","nameLocations":["3350:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3350:6:74"},"referencedDeclaration":10576,"src":"3350:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":18387,"initialValue":{"expression":{"id":18385,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18359,"src":"3371:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3378:11:74","memberName":"targetToken","nodeType":"MemberAccess","referencedDeclaration":240,"src":"3371:18:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3350:39:74"},{"assignments":[18389],"declarations":[{"constant":false,"id":18389,"mutability":"mutable","name":"feeTokenAmount","nameLocation":"3407:14:74","nodeType":"VariableDeclaration","scope":18525,"src":"3399:22:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18388,"name":"uint256","nodeType":"ElementaryTypeName","src":"3399:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18392,"initialValue":{"expression":{"id":18390,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18359,"src":"3424:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3431:14:74","memberName":"feeTokenAmount","nodeType":"MemberAccess","referencedDeclaration":237,"src":"3424:21:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3399:46:74"},{"assignments":[18397],"declarations":[{"constant":false,"id":18397,"mutability":"mutable","name":"steps","nameLocation":"3478:5:74","nodeType":"VariableDeclaration","scope":18525,"src":"3456:27:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"},"typeName":{"baseType":{"id":18395,"nodeType":"UserDefinedTypeName","pathNode":{"id":18394,"name":"SwapPathStep","nameLocations":["3456:12:74"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"3456:12:74"},"referencedDeclaration":227,"src":"3456:12:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"id":18396,"nodeType":"ArrayTypeName","src":"3456:14:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"}},"visibility":"internal"}],"id":18401,"initialValue":{"arguments":[{"id":18399,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18378,"src":"3498:8:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":18398,"name":"getBurnPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18312,"src":"3486:11:74","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10576_$returns$_t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr_$","typeString":"function (contract IERC20) view returns (struct IBalancerFeeBurner.SwapPathStep memory[] memory)"}},"id":18400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3486:21:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"3456:51:74"},{"assignments":[18403],"declarations":[{"constant":false,"id":18403,"mutability":"mutable","name":"lastStepIndex","nameLocation":"3525:13:74","nodeType":"VariableDeclaration","scope":18525,"src":"3517:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18402,"name":"uint256","nodeType":"ElementaryTypeName","src":"3517:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18408,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18404,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18397,"src":"3541:5:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"id":18405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3547:6:74","memberName":"length","nodeType":"MemberAccess","src":"3541:12:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":18406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3556:1:74","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3541:16:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3517:40:74"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"id":18414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":18409,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18397,"src":"3571:5:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"id":18411,"indexExpression":{"id":18410,"name":"lastStepIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18403,"src":"3577:13:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3571:20:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory"}},"id":18412,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3592:8:74","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":226,"src":"3571:29:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":18413,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18384,"src":"3604:11:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"3571:44:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18419,"nodeType":"IfStatement","src":"3567:106:74","trueBody":{"id":18418,"nodeType":"Block","src":"3617:56:74","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18415,"name":"TargetTokenOutMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":253,"src":"3638:22:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3638:24:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18417,"nodeType":"RevertStatement","src":"3631:31:74"}]}},{"expression":{"arguments":[{"expression":{"id":18423,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18359,"src":"3757:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3764:6:74","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":232,"src":"3757:13:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":18427,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"3780:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}],"id":18426,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3772:7:74","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18425,"name":"address","nodeType":"ElementaryTypeName","src":"3772:7:74","typeDescriptions":{}}},"id":18428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3772:15:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18429,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18389,"src":"3789:14:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18420,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18378,"src":"3731:8:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":18422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3740:16:74","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":10674,"src":"3731:25:74","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":18430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3731:73:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18431,"nodeType":"ExpressionStatement","src":"3731:73:74"},{"expression":{"arguments":[{"id":18435,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18378,"src":"3828:8:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18436,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18389,"src":"3838:14:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18432,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"3814:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":18434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3821:6:74","memberName":"settle","nodeType":"MemberAccess","referencedDeclaration":3885,"src":"3814:13:74","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$10576_$_t_uint256_$returns$_t_uint256_$","typeString":"function (contract IERC20,uint256) external returns (uint256)"}},"id":18437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3814:39:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18438,"nodeType":"ExpressionStatement","src":"3814:39:74"},{"assignments":[18441],"declarations":[{"constant":false,"id":18441,"mutability":"mutable","name":"stepTokenIn","nameLocation":"3941:11:74","nodeType":"VariableDeclaration","scope":18525,"src":"3934:18:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18440,"nodeType":"UserDefinedTypeName","pathNode":{"id":18439,"name":"IERC20","nameLocations":["3934:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3934:6:74"},"referencedDeclaration":10576,"src":"3934:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":18443,"initialValue":{"id":18442,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18378,"src":"3955:8:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3934:29:74"},{"assignments":[18445],"declarations":[{"constant":false,"id":18445,"mutability":"mutable","name":"stepExactAmountIn","nameLocation":"3981:17:74","nodeType":"VariableDeclaration","scope":18525,"src":"3973:25:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18444,"name":"uint256","nodeType":"ElementaryTypeName","src":"3973:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18447,"initialValue":{"id":18446,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18389,"src":"4001:14:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3973:42:74"},{"body":{"id":18503,"nodeType":"Block","src":"4068:607:74","statements":[{"assignments":[18461],"declarations":[{"constant":false,"id":18461,"mutability":"mutable","name":"step","nameLocation":"4102:4:74","nodeType":"VariableDeclaration","scope":18503,"src":"4082:24:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"},"typeName":{"id":18460,"nodeType":"UserDefinedTypeName","pathNode":{"id":18459,"name":"SwapPathStep","nameLocations":["4082:12:74"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"4082:12:74"},"referencedDeclaration":227,"src":"4082:12:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"visibility":"internal"}],"id":18465,"initialValue":{"baseExpression":{"id":18462,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18397,"src":"4109:5:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"id":18464,"indexExpression":{"id":18463,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18449,"src":"4115:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4109:8:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory"}},"nodeType":"VariableDeclarationStatement","src":"4082:35:74"},{"assignments":[null,null,18467],"declarations":[null,null,{"constant":false,"id":18467,"mutability":"mutable","name":"amountOut","nameLocation":"4145:9:74","nodeType":"VariableDeclaration","scope":18503,"src":"4137:17:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18466,"name":"uint256","nodeType":"ElementaryTypeName","src":"4137:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18493,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":18471,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4169,"src":"4231:8:74","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4169_$","typeString":"type(enum SwapKind)"}},"id":18472,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4240:8:74","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4167,"src":"4231:17:74","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"}},{"expression":{"id":18473,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18461,"src":"4276:4:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory"}},"id":18474,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4281:4:74","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":223,"src":"4276:9:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18475,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18441,"src":"4316:11:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"expression":{"id":18476,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18461,"src":"4359:4:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory"}},"id":18477,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4364:8:74","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":226,"src":"4359:13:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18478,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18445,"src":"4410:17:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"condition":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18479,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18449,"src":"4460:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":18480,"name":"lastStepIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18403,"src":"4465:13:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4460:18:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":18482,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4459:20:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":18485,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4504:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":18486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"4459:46:74","trueExpression":{"expression":{"id":18483,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18359,"src":"4482:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4489:12:74","memberName":"minAmountOut","nodeType":"MemberAccess","referencedDeclaration":242,"src":"4482:19:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"","id":18489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4543:2:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":18488,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4537:5:74","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":18487,"name":"bytes","nodeType":"ElementaryTypeName","src":"4537:5:74","typeDescriptions":{}}},"id":18490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4537:9:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":18470,"name":"VaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4188,"src":"4187:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_VaultSwapParams_$4188_storage_ptr_$","typeString":"type(struct VaultSwapParams storage pointer)"}},"id":18491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["4225:4:74","4270:4:74","4307:7:74","4349:8:74","4394:14:74","4449:8:74","4527:8:74"],"names":["kind","pool","tokenIn","tokenOut","amountGivenRaw","limitRaw","userData"],"nodeType":"FunctionCall","src":"4187:378:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4188_memory_ptr","typeString":"struct VaultSwapParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$4188_memory_ptr","typeString":"struct VaultSwapParams memory"}],"expression":{"id":18468,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"4158:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":18469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4165:4:74","memberName":"swap","nodeType":"MemberAccess","referencedDeclaration":3909,"src":"4158:11:74","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_VaultSwapParams_$4188_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct VaultSwapParams memory) external returns (uint256,uint256,uint256)"}},"id":18492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4158:421:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4132:447:74"},{"expression":{"id":18497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18494,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18441,"src":"4594:11:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":18495,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18461,"src":"4608:4:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory"}},"id":18496,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4613:8:74","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":226,"src":"4608:13:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"4594:27:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":18498,"nodeType":"ExpressionStatement","src":"4594:27:74"},{"expression":{"id":18501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18499,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18445,"src":"4635:17:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18500,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18467,"src":"4655:9:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4635:29:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18502,"nodeType":"ExpressionStatement","src":"4635:29:74"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18452,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18449,"src":"4045:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":18453,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18397,"src":"4049:5:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"id":18454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4055:6:74","memberName":"length","nodeType":"MemberAccess","src":"4049:12:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4045:16:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18504,"initializationExpression":{"assignments":[18449],"declarations":[{"constant":false,"id":18449,"mutability":"mutable","name":"i","nameLocation":"4038:1:74","nodeType":"VariableDeclaration","scope":18504,"src":"4030:9:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18448,"name":"uint256","nodeType":"ElementaryTypeName","src":"4030:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18451,"initialValue":{"hexValue":"30","id":18450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4042:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4030:13:74"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":18457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4063:3:74","subExpression":{"id":18456,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18449,"src":"4063:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18458,"nodeType":"ExpressionStatement","src":"4063:3:74"},"nodeType":"ForStatement","src":"4025:650:74"},{"expression":{"arguments":[{"id":18508,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18441,"src":"4793:11:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"expression":{"id":18509,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18359,"src":"4806:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4813:9:74","memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":244,"src":"4806:16:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18511,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18445,"src":"4824:17:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18505,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"4779:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":18507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4786:6:74","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":3896,"src":"4779:13:74","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":18512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4779:63:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18513,"nodeType":"ExpressionStatement","src":"4779:63:74"},{"eventCall":{"arguments":[{"expression":{"id":18515,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18359,"src":"4876:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4883:4:74","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":230,"src":"4876:11:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18517,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18378,"src":"4889:8:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18518,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18389,"src":"4899:14:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18519,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18384,"src":"4915:11:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18520,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18445,"src":"4928:17:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18521,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18359,"src":"4947:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4954:9:74","memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":244,"src":"4947:16:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18514,"name":"ProtocolFeeBurned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":914,"src":"4858:17:74","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address)"}},"id":18523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4858:106:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18524,"nodeType":"EmitStatement","src":"4853:111:74"}]},"functionSelector":"c66472de","id":18526,"implemented":true,"kind":"function","modifiers":[{"id":18362,"kind":"modifierInvocation","modifierName":{"id":18361,"name":"nonReentrant","nameLocations":["3027:12:74"],"nodeType":"IdentifierPath","referencedDeclaration":6967,"src":"3027:12:74"},"nodeType":"ModifierInvocation","src":"3027:12:74"},{"id":18364,"kind":"modifierInvocation","modifierName":{"id":18363,"name":"onlyVault","nameLocations":["3040:9:74"],"nodeType":"IdentifierPath","referencedDeclaration":9317,"src":"3040:9:74"},"nodeType":"ModifierInvocation","src":"3040:9:74"}],"name":"burnHook","nameLocation":"2977:8:74","nodeType":"FunctionDefinition","parameters":{"id":18360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18359,"mutability":"mutable","name":"params","nameLocation":"3010:6:74","nodeType":"VariableDeclaration","scope":18526,"src":"2986:30:74","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams"},"typeName":{"id":18358,"nodeType":"UserDefinedTypeName","pathNode":{"id":18357,"name":"BurnHookParams","nameLocations":["2986:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":247,"src":"2986:14:74"},"referencedDeclaration":247,"src":"2986:14:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_storage_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams"}},"visibility":"internal"}],"src":"2985:32:74"},"returnParameters":{"id":18365,"nodeType":"ParameterList","parameters":[],"src":"3050:0:74"},"scope":18527,"src":"2968:2003:74","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":18528,"src":"1118:3855:74","usedErrors":[250,253,924,927,3074,6956,9352,9357,10614,19774,19777],"usedEvents":[914,9363,9501]}],"src":"46:4928:74"},"id":74},"contracts/CallAndRevert.sol":{"ast":{"absolutePath":"contracts/CallAndRevert.sol","exportedSymbols":{"Address":[11326],"CallAndRevert":[18633],"RevertCodec":[4959]},"id":18634,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":18529,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:75"},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":18531,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18634,"sourceUnit":11327,"src":"72:68:75","symbolAliases":[{"foreign":{"id":18530,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11326,"src":"81:7:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol","id":18533,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18634,"sourceUnit":4960,"src":"142:97:75","symbolAliases":[{"foreign":{"id":18532,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4959,"src":"151:11:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"CallAndRevert","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":18633,"linearizedBaseContracts":[18633],"name":"CallAndRevert","nameLocation":"250:13:75","nodeType":"ContractDefinition","nodes":[{"errorSelector":"28f95541","id":18535,"name":"QuoteResultSpoofed","nameLocation":"276:18:75","nodeType":"ErrorDefinition","parameters":{"id":18534,"nodeType":"ParameterList","parameters":[],"src":"294:2:75"},"src":"270:27:75"},{"body":{"id":18571,"nodeType":"Block","src":"394:233:75","statements":[{"clauses":[{"block":{"id":18558,"nodeType":"Block","src":"469:53:75","statements":[{"expression":{"arguments":[{"hexValue":"556e65787065637465642073756363657373","id":18555,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"490:20:75","typeDescriptions":{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""},"value":"Unexpected success"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""}],"id":18554,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"483:6:75","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":18556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"483:28:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18557,"nodeType":"ExpressionStatement","src":"483:28:75"}]},"errorName":"","id":18559,"nodeType":"TryCatchClause","src":"469:53:75"},{"block":{"id":18568,"nodeType":"Block","src":"551:70:75","statements":[{"expression":{"arguments":[{"id":18565,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18561,"src":"603:6:75","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18563,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4959,"src":"572:11:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4959_$","typeString":"type(library RevertCodec)"}},"id":18564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"584:18:75","memberName":"catchEncodedResult","nodeType":"MemberAccess","referencedDeclaration":4921,"src":"572:30:75","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (bytes memory)"}},"id":18566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"572:38:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":18543,"id":18567,"nodeType":"Return","src":"565:45:75"}]},"errorName":"","id":18569,"nodeType":"TryCatchClause","parameters":{"id":18562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18561,"mutability":"mutable","name":"result","nameLocation":"543:6:75","nodeType":"VariableDeclaration","scope":18569,"src":"530:19:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18560,"name":"bytes","nodeType":"ElementaryTypeName","src":"530:5:75","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"529:21:75"},"src":"523:98:75"}],"externalCall":{"arguments":[{"id":18551,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18537,"src":"455:6:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18552,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18539,"src":"463:4:75","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"arguments":[{"id":18547,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"430:4:75","typeDescriptions":{"typeIdentifier":"t_contract$_CallAndRevert_$18633","typeString":"contract CallAndRevert"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CallAndRevert_$18633","typeString":"contract CallAndRevert"}],"id":18546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"422:7:75","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18545,"name":"address","nodeType":"ElementaryTypeName","src":"422:7:75","typeDescriptions":{}}},"id":18548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"422:13:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18544,"name":"CallAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18633,"src":"408:13:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CallAndRevert_$18633_$","typeString":"type(contract CallAndRevert)"}},"id":18549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"408:28:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_CallAndRevert_$18633","typeString":"contract CallAndRevert"}},"id":18550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"437:17:75","memberName":"callAndRevertHook","nodeType":"MemberAccess","referencedDeclaration":18632,"src":"408:46:75","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory) external"}},"id":18553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"408:60:75","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18570,"nodeType":"TryStatement","src":"404:217:75"}]},"id":18572,"implemented":true,"kind":"function","modifiers":[],"name":"_callAndRevert","nameLocation":"312:14:75","nodeType":"FunctionDefinition","parameters":{"id":18540,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18537,"mutability":"mutable","name":"target","nameLocation":"335:6:75","nodeType":"VariableDeclaration","scope":18572,"src":"327:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18536,"name":"address","nodeType":"ElementaryTypeName","src":"327:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18539,"mutability":"mutable","name":"data","nameLocation":"356:4:75","nodeType":"VariableDeclaration","scope":18572,"src":"343:17:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18538,"name":"bytes","nodeType":"ElementaryTypeName","src":"343:5:75","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"326:35:75"},"returnParameters":{"id":18543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18542,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18572,"src":"380:12:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18541,"name":"bytes","nodeType":"ElementaryTypeName","src":"380:5:75","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"379:14:75"},"scope":18633,"src":"303:324:75","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":18631,"nodeType":"Block","src":"704:860:75","statements":[{"assignments":[18580,18582],"declarations":[{"constant":false,"id":18580,"mutability":"mutable","name":"success","nameLocation":"779:7:75","nodeType":"VariableDeclaration","scope":18631,"src":"774:12:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18579,"name":"bool","nodeType":"ElementaryTypeName","src":"774:4:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":18582,"mutability":"mutable","name":"result","nameLocation":"801:6:75","nodeType":"VariableDeclaration","scope":18631,"src":"788:19:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18581,"name":"bytes","nodeType":"ElementaryTypeName","src":"788:5:75","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":18588,"initialValue":{"arguments":[{"id":18586,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18576,"src":"825:4:75","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"components":[{"id":18583,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18574,"src":"812:6:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":18584,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"811:8:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"820:4:75","memberName":"call","nodeType":"MemberAccess","src":"811:13:75","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":18587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"811:19:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"773:57:75"},{"condition":{"id":18589,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18580,"src":"844:7:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":18629,"nodeType":"Block","src":"1127:431:75","statements":[{"assignments":[18607],"declarations":[{"constant":false,"id":18607,"mutability":"mutable","name":"errorSelector","nameLocation":"1260:13:75","nodeType":"VariableDeclaration","scope":18629,"src":"1253:20:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":18606,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1253:6:75","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":18612,"initialValue":{"arguments":[{"id":18610,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18582,"src":"1302:6:75","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18608,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4959,"src":"1276:11:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4959_$","typeString":"type(library RevertCodec)"}},"id":18609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1288:13:75","memberName":"parseSelector","nodeType":"MemberAccess","referencedDeclaration":4940,"src":"1276:25:75","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$","typeString":"function (bytes memory) pure returns (bytes4)"}},"id":18611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1276:33:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"1253:56:75"},{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":18617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18613,"name":"errorSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18607,"src":"1327:13:75","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":18614,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4959,"src":"1344:11:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4959_$","typeString":"type(library RevertCodec)"}},"id":18615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1356:6:75","memberName":"Result","nodeType":"MemberAccess","referencedDeclaration":4877,"src":"1344:18:75","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$","typeString":"function (bytes memory) pure returns (error)"}},"id":18616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1363:8:75","memberName":"selector","nodeType":"MemberAccess","src":"1344:27:75","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"1327:44:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18622,"nodeType":"IfStatement","src":"1323:110:75","trueBody":{"id":18621,"nodeType":"Block","src":"1373:60:75","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18618,"name":"QuoteResultSpoofed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18535,"src":"1398:18:75","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1398:20:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18620,"nodeType":"RevertStatement","src":"1391:27:75"}]}},{"expression":{"arguments":[{"id":18626,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18582,"src":"1540:6:75","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18623,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4959,"src":"1513:11:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4959_$","typeString":"type(library RevertCodec)"}},"id":18625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1525:14:75","memberName":"bubbleUpRevert","nodeType":"MemberAccess","referencedDeclaration":4958,"src":"1513:26:75","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":18627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1513:34:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18628,"nodeType":"ExpressionStatement","src":"1513:34:75"}]},"id":18630,"nodeType":"IfStatement","src":"840:718:75","trueBody":{"id":18605,"nodeType":"Block","src":"853:268:75","statements":[{"expression":{"arguments":[{"expression":{"id":18593,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"990:3:75","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"994:6:75","memberName":"sender","nodeType":"MemberAccess","src":"990:10:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18595,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18580,"src":"1002:7:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":18596,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18582,"src":"1011:6:75","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18590,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11326,"src":"955:7:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$11326_$","typeString":"type(library Address)"}},"id":18592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"963:26:75","memberName":"verifyCallResultFromTarget","nodeType":"MemberAccess","referencedDeclaration":11283,"src":"955:34:75","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":18597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"955:63:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":18598,"nodeType":"ExpressionStatement","src":"955:63:75"},{"errorCall":{"arguments":[{"id":18602,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18582,"src":"1103:6:75","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18599,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4959,"src":"1084:11:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4959_$","typeString":"type(library RevertCodec)"}},"id":18601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1096:6:75","memberName":"Result","nodeType":"MemberAccess","referencedDeclaration":4877,"src":"1084:18:75","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$","typeString":"function (bytes memory) pure returns (error)"}},"id":18603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1084:26:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18604,"nodeType":"RevertStatement","src":"1077:33:75"}]}}]},"functionSelector":"a7699638","id":18632,"implemented":true,"kind":"function","modifiers":[],"name":"callAndRevertHook","nameLocation":"642:17:75","nodeType":"FunctionDefinition","parameters":{"id":18577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18574,"mutability":"mutable","name":"target","nameLocation":"668:6:75","nodeType":"VariableDeclaration","scope":18632,"src":"660:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18573,"name":"address","nodeType":"ElementaryTypeName","src":"660:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18576,"mutability":"mutable","name":"data","nameLocation":"689:4:75","nodeType":"VariableDeclaration","scope":18632,"src":"676:17:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18575,"name":"bytes","nodeType":"ElementaryTypeName","src":"676:5:75","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"659:35:75"},"returnParameters":{"id":18578,"nodeType":"ParameterList","parameters":[],"src":"704:0:75"},"scope":18633,"src":"633:931:75","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":18634,"src":"241:1325:75","usedErrors":[4877,4880,11076,12379,18535],"usedEvents":[]}],"src":"46:1521:75"},"id":75},"contracts/CowSwapFeeBurner.sol":{"ast":{"absolutePath":"contracts/CowSwapFeeBurner.sol","exportedSymbols":{"CowSwapFeeBurner":[19528],"FeeBurnerAuthentication":[19845],"GPv2Order":[357],"IComposableCow":[326],"ICowConditionalOrder":[418],"ICowConditionalOrderGenerator":[454],"ICowSwapFeeBurner":[566],"IERC1271":[9586],"IERC165":[12706],"IERC20":[10576],"IProtocolFeeBurner":[948],"IProtocolFeeSweeper":[1137],"IVault":[2545],"ReentrancyGuardTransient":[7012],"SafeERC20":[11066],"Version":[4999]},"id":19529,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":18635,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:76"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":18637,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":11067,"src":"72:84:76","symbolAliases":[{"foreign":{"id":18636,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11066,"src":"81:9:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"@openzeppelin/contracts/utils/introspection/IERC165.sol","id":18639,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":12707,"src":"157:82:76","symbolAliases":[{"foreign":{"id":18638,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12706,"src":"166:7:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1271.sol","file":"@openzeppelin/contracts/interfaces/IERC1271.sol","id":18641,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":9587,"src":"240:75:76","symbolAliases":[{"foreign":{"id":18640,"name":"IERC1271","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9586,"src":"249:8:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":18643,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":10577,"src":"316:72:76","symbolAliases":[{"foreign":{"id":18642,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"325:6:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","id":18645,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":949,"src":"390:116:76","symbolAliases":[{"foreign":{"id":18644,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"399:18:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol","id":18647,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":567,"src":"507:114:76","symbolAliases":[{"foreign":{"id":18646,"name":"ICowSwapFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":566,"src":"516:17:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":18649,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":1138,"src":"622:118:76","symbolAliases":[{"foreign":{"id":18648,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1137,"src":"631:19:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","id":18651,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":327,"src":"741:108:76","symbolAliases":[{"foreign":{"id":18650,"name":"IComposableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":326,"src":"750:14:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol","id":18653,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":455,"src":"850:142:76","symbolAliases":[{"foreign":{"id":18652,"name":"ICowConditionalOrderGenerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":454,"src":"863:29:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","id":18656,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":419,"src":"993:139:76","symbolAliases":[{"foreign":{"id":18654,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"1006:20:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":18655,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":357,"src":"1032:9:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":18658,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":2546,"src":"1133:81:76","symbolAliases":[{"foreign":{"id":18657,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"1142:6:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","id":18660,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":5000,"src":"1216:89:76","symbolAliases":[{"foreign":{"id":18659,"name":"Version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4999,"src":"1225:7:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":18662,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":7013,"src":"1306:132:76","symbolAliases":[{"foreign":{"id":18661,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7012,"src":"1319:24:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/FeeBurnerAuthentication.sol","file":"./FeeBurnerAuthentication.sol","id":18664,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":19846,"src":"1440:72:76","symbolAliases":[{"foreign":{"id":18663,"name":"FeeBurnerAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19845,"src":"1449:23:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":18666,"name":"ICowSwapFeeBurner","nameLocations":["1843:17:76"],"nodeType":"IdentifierPath","referencedDeclaration":566,"src":"1843:17:76"},"id":18667,"nodeType":"InheritanceSpecifier","src":"1843:17:76"},{"baseName":{"id":18668,"name":"FeeBurnerAuthentication","nameLocations":["1862:23:76"],"nodeType":"IdentifierPath","referencedDeclaration":19845,"src":"1862:23:76"},"id":18669,"nodeType":"InheritanceSpecifier","src":"1862:23:76"},{"baseName":{"id":18670,"name":"ReentrancyGuardTransient","nameLocations":["1887:24:76"],"nodeType":"IdentifierPath","referencedDeclaration":7012,"src":"1887:24:76"},"id":18671,"nodeType":"InheritanceSpecifier","src":"1887:24:76"},{"baseName":{"id":18672,"name":"Version","nameLocations":["1913:7:76"],"nodeType":"IdentifierPath","referencedDeclaration":4999,"src":"1913:7:76"},"id":18673,"nodeType":"InheritanceSpecifier","src":"1913:7:76"}],"canonicalName":"CowSwapFeeBurner","contractDependencies":[],"contractKind":"contract","documentation":{"id":18665,"nodeType":"StructuredDocumentation","src":"1551:262:76","text":" @title CowSwapFeeBurner\n @notice A contract that burns protocol fees using CowSwap.\n @dev The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function.\n Only one order per token is allowed at a time."},"fullyImplemented":true,"id":19528,"linearizedBaseContracts":[19528,4999,34,7012,19845,9572,9486,12366,566,454,12706,418,948,9586],"name":"CowSwapFeeBurner","nameLocation":"1823:16:76","nodeType":"ContractDefinition","nodes":[{"global":false,"id":18677,"libraryName":{"id":18674,"name":"SafeERC20","nameLocations":["1933:9:76"],"nodeType":"IdentifierPath","referencedDeclaration":11066,"src":"1933:9:76"},"nodeType":"UsingForDirective","src":"1927:27:76","typeName":{"id":18676,"nodeType":"UserDefinedTypeName","pathNode":{"id":18675,"name":"IERC20","nameLocations":["1947:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1947:6:76"},"referencedDeclaration":10576,"src":"1947:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}},{"canonicalName":"CowSwapFeeBurner.ShortOrder","id":18687,"members":[{"constant":false,"id":18680,"mutability":"mutable","name":"tokenOut","nameLocation":"1995:8:76","nodeType":"VariableDeclaration","scope":18687,"src":"1988:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18679,"nodeType":"UserDefinedTypeName","pathNode":{"id":18678,"name":"IERC20","nameLocations":["1988:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1988:6:76"},"referencedDeclaration":10576,"src":"1988:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18682,"mutability":"mutable","name":"receiver","nameLocation":"2021:8:76","nodeType":"VariableDeclaration","scope":18687,"src":"2013:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18681,"name":"address","nodeType":"ElementaryTypeName","src":"2013:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18684,"mutability":"mutable","name":"minAmountOut","nameLocation":"2047:12:76","nodeType":"VariableDeclaration","scope":18687,"src":"2039:20:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18683,"name":"uint256","nodeType":"ElementaryTypeName","src":"2039:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18686,"mutability":"mutable","name":"deadline","nameLocation":"2076:8:76","nodeType":"VariableDeclaration","scope":18687,"src":"2069:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":18685,"name":"uint32","nodeType":"ElementaryTypeName","src":"2069:6:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"name":"ShortOrder","nameLocation":"1967:10:76","nodeType":"StructDefinition","scope":19528,"src":"1960:131:76","visibility":"public"},{"constant":true,"id":18690,"mutability":"constant","name":"_SIGNATURE_VERIFIER_MUXER_INTERFACE","nameLocation":"2122:35:76","nodeType":"VariableDeclaration","scope":19528,"src":"2097:73:76","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":18688,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2097:6:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"value":{"hexValue":"30783632616638646332","id":18689,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2160:10:76","typeDescriptions":{"typeIdentifier":"t_rational_1655672258_by_1","typeString":"int_const 1655672258"},"value":"0x62af8dc2"},"visibility":"internal"},{"constant":false,"id":18695,"mutability":"immutable","name":"_sellKind","nameLocation":"2203:9:76","nodeType":"VariableDeclaration","scope":19528,"src":"2176:56:76","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18691,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2176:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"73656c6c","id":18693,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2225:6:76","typeDescriptions":{"typeIdentifier":"t_stringliteral_f3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775","typeString":"literal_string \"sell\""},"value":"sell"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_f3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775","typeString":"literal_string \"sell\""}],"id":18692,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2215:9:76","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":18694,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2215:17:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":18700,"mutability":"immutable","name":"_tokenBalance","nameLocation":"2265:13:76","nodeType":"VariableDeclaration","scope":19528,"src":"2238:61:76","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18696,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2238:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"6572633230","id":18698,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2291:7:76","typeDescriptions":{"typeIdentifier":"t_stringliteral_5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9","typeString":"literal_string \"erc20\""},"value":"erc20"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9","typeString":"literal_string \"erc20\""}],"id":18697,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2281:9:76","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":18699,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2281:18:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"functionSelector":"93504c52","id":18703,"mutability":"immutable","name":"composableCow","nameLocation":"2338:13:76","nodeType":"VariableDeclaration","scope":19528,"src":"2306:45:76","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"},"typeName":{"id":18702,"nodeType":"UserDefinedTypeName","pathNode":{"id":18701,"name":"IComposableCow","nameLocations":["2306:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":326,"src":"2306:14:76"},"referencedDeclaration":326,"src":"2306:14:76","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"visibility":"public"},{"constant":false,"functionSelector":"9b552cc2","id":18705,"mutability":"immutable","name":"vaultRelayer","nameLocation":"2382:12:76","nodeType":"VariableDeclaration","scope":19528,"src":"2357:37:76","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18704,"name":"address","nodeType":"ElementaryTypeName","src":"2357:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"8aebd348","id":18707,"mutability":"immutable","name":"appData","nameLocation":"2425:7:76","nodeType":"VariableDeclaration","scope":19528,"src":"2400:32:76","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18706,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2400:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"constant":false,"id":18713,"mutability":"mutable","name":"_orders","nameLocation":"2562:7:76","nodeType":"VariableDeclaration","scope":19528,"src":"2511:58:76","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_struct$_ShortOrder_$18687_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder)"},"typeName":{"id":18712,"keyName":"token","keyNameLocation":"2526:5:76","keyType":{"id":18709,"nodeType":"UserDefinedTypeName","pathNode":{"id":18708,"name":"IERC20","nameLocations":["2519:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2519:6:76"},"referencedDeclaration":10576,"src":"2519:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"2511:41:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_struct$_ShortOrder_$18687_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder)"},"valueName":"order","valueNameLocation":"2546:5:76","valueType":{"id":18711,"nodeType":"UserDefinedTypeName","pathNode":{"id":18710,"name":"ShortOrder","nameLocations":["2535:10:76"],"nodeType":"IdentifierPath","referencedDeclaration":18687,"src":"2535:10:76"},"referencedDeclaration":18687,"src":"2535:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"}}},"visibility":"internal"},{"body":{"id":18749,"nodeType":"Block","src":"2883:116:76","statements":[{"expression":{"id":18739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18737,"name":"composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18703,"src":"2893:13:76","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18738,"name":"_composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18719,"src":"2909:14:76","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"src":"2893:30:76","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"id":18740,"nodeType":"ExpressionStatement","src":"2893:30:76"},{"expression":{"id":18743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18741,"name":"vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18705,"src":"2933:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18742,"name":"_cowVaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18721,"src":"2948:16:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2933:31:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18744,"nodeType":"ExpressionStatement","src":"2933:31:76"},{"expression":{"id":18747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18745,"name":"appData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18707,"src":"2974:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18746,"name":"_appData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18723,"src":"2984:8:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2974:18:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":18748,"nodeType":"ExpressionStatement","src":"2974:18:76"}]},"id":18750,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":18730,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18727,"src":"2813:8:76","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":18731,"kind":"baseConstructorSpecifier","modifierName":{"id":18729,"name":"Version","nameLocations":["2805:7:76"],"nodeType":"IdentifierPath","referencedDeclaration":4999,"src":"2805:7:76"},"nodeType":"ModifierInvocation","src":"2805:17:76"},{"arguments":[{"id":18733,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18716,"src":"2847:19:76","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},{"id":18734,"name":"_initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"2868:13:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":18735,"kind":"baseConstructorSpecifier","modifierName":{"id":18732,"name":"FeeBurnerAuthentication","nameLocations":["2823:23:76"],"nodeType":"IdentifierPath","referencedDeclaration":19845,"src":"2823:23:76"},"nodeType":"ModifierInvocation","src":"2823:59:76"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":18728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18716,"mutability":"mutable","name":"_protocolFeeSweeper","nameLocation":"2617:19:76","nodeType":"VariableDeclaration","scope":18750,"src":"2597:39:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":18715,"nodeType":"UserDefinedTypeName","pathNode":{"id":18714,"name":"IProtocolFeeSweeper","nameLocations":["2597:19:76"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"2597:19:76"},"referencedDeclaration":1137,"src":"2597:19:76","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"visibility":"internal"},{"constant":false,"id":18719,"mutability":"mutable","name":"_composableCow","nameLocation":"2661:14:76","nodeType":"VariableDeclaration","scope":18750,"src":"2646:29:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"},"typeName":{"id":18718,"nodeType":"UserDefinedTypeName","pathNode":{"id":18717,"name":"IComposableCow","nameLocations":["2646:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":326,"src":"2646:14:76"},"referencedDeclaration":326,"src":"2646:14:76","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"visibility":"internal"},{"constant":false,"id":18721,"mutability":"mutable","name":"_cowVaultRelayer","nameLocation":"2693:16:76","nodeType":"VariableDeclaration","scope":18750,"src":"2685:24:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18720,"name":"address","nodeType":"ElementaryTypeName","src":"2685:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18723,"mutability":"mutable","name":"_appData","nameLocation":"2727:8:76","nodeType":"VariableDeclaration","scope":18750,"src":"2719:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18722,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2719:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":18725,"mutability":"mutable","name":"_initialOwner","nameLocation":"2753:13:76","nodeType":"VariableDeclaration","scope":18750,"src":"2745:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18724,"name":"address","nodeType":"ElementaryTypeName","src":"2745:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18727,"mutability":"mutable","name":"_version","nameLocation":"2790:8:76","nodeType":"VariableDeclaration","scope":18750,"src":"2776:22:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":18726,"name":"string","nodeType":"ElementaryTypeName","src":"2776:6:76","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2587:217:76"},"returnParameters":{"id":18736,"nodeType":"ParameterList","parameters":[],"src":"2883:0:76"},"scope":19528,"src":"2576:423:76","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[526],"body":{"id":18764,"nodeType":"Block","src":"3331:42:76","statements":[{"expression":{"arguments":[{"id":18761,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18754,"src":"3358:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":18760,"name":"_getOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19375,"src":"3348:9:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10576_$returns$_t_struct$_GPv2Order_$357_memory_ptr_$","typeString":"function (contract IERC20) view returns (struct GPv2Order memory)"}},"id":18762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3348:18:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}},"functionReturnParameters":18759,"id":18763,"nodeType":"Return","src":"3341:25:76"}]},"documentation":{"id":18751,"nodeType":"StructuredDocumentation","src":"3218:33:76","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"6eba2b13","id":18765,"implemented":true,"kind":"function","modifiers":[],"name":"getOrder","nameLocation":"3265:8:76","nodeType":"FunctionDefinition","parameters":{"id":18755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18754,"mutability":"mutable","name":"tokenIn","nameLocation":"3281:7:76","nodeType":"VariableDeclaration","scope":18765,"src":"3274:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18753,"nodeType":"UserDefinedTypeName","pathNode":{"id":18752,"name":"IERC20","nameLocations":["3274:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3274:6:76"},"referencedDeclaration":10576,"src":"3274:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"3273:16:76"},"returnParameters":{"id":18759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18758,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18765,"src":"3313:16:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":18757,"nodeType":"UserDefinedTypeName","pathNode":{"id":18756,"name":"GPv2Order","nameLocations":["3313:9:76"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"3313:9:76"},"referencedDeclaration":357,"src":"3313:9:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"3312:18:76"},"scope":19528,"src":"3256:117:76","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[536],"body":{"id":18782,"nodeType":"Block","src":"3500:64:76","statements":[{"expression":{"id":18780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":18775,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18773,"src":"3511:6:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},null],"id":18776,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3510:10:76","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$__$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":18778,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18769,"src":"3549:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":18777,"name":"_getOrderStatusAndBalance","nodeType":"Identifier","overloadedDeclarations":[19392,19466],"referencedDeclaration":19392,"src":"3523:25:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10576_$returns$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"function (contract IERC20) view returns (enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"id":18779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3523:34:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"src":"3510:47:76","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18781,"nodeType":"ExpressionStatement","src":"3510:47:76"}]},"documentation":{"id":18766,"nodeType":"StructuredDocumentation","src":"3379:33:76","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"6f9d75cd","id":18783,"implemented":true,"kind":"function","modifiers":[],"name":"getOrderStatus","nameLocation":"3426:14:76","nodeType":"FunctionDefinition","parameters":{"id":18770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18769,"mutability":"mutable","name":"tokenIn","nameLocation":"3448:7:76","nodeType":"VariableDeclaration","scope":18783,"src":"3441:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18768,"nodeType":"UserDefinedTypeName","pathNode":{"id":18767,"name":"IERC20","nameLocations":["3441:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3441:6:76"},"referencedDeclaration":10576,"src":"3441:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"3440:16:76"},"returnParameters":{"id":18774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18773,"mutability":"mutable","name":"status","nameLocation":"3492:6:76","nodeType":"VariableDeclaration","scope":18783,"src":"3480:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":18772,"nodeType":"UserDefinedTypeName","pathNode":{"id":18771,"name":"OrderStatus","nameLocations":["3480:11:76"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"3480:11:76"},"referencedDeclaration":480,"src":"3480:11:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"}],"src":"3479:20:76"},"scope":19528,"src":"3417:147:76","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[547],"body":{"id":18870,"nodeType":"Block","src":"3717:689:76","statements":[{"assignments":[18798,18800],"declarations":[{"constant":false,"id":18798,"mutability":"mutable","name":"status","nameLocation":"3740:6:76","nodeType":"VariableDeclaration","scope":18870,"src":"3728:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":18797,"nodeType":"UserDefinedTypeName","pathNode":{"id":18796,"name":"OrderStatus","nameLocations":["3728:11:76"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"3728:11:76"},"referencedDeclaration":480,"src":"3728:11:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"},{"constant":false,"id":18800,"mutability":"mutable","name":"amount","nameLocation":"3756:6:76","nodeType":"VariableDeclaration","scope":18870,"src":"3748:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18799,"name":"uint256","nodeType":"ElementaryTypeName","src":"3748:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18804,"initialValue":{"arguments":[{"id":18802,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18787,"src":"3792:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":18801,"name":"_getOrderStatusAndBalance","nodeType":"Identifier","overloadedDeclarations":[19392,19466],"referencedDeclaration":19392,"src":"3766:25:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10576_$returns$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"function (contract IERC20) view returns (enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"id":18803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3766:34:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"3727:73:76"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"id":18808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18805,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18798,"src":"3815:6:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":18806,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"3825:11:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":18807,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3837:6:76","memberName":"Failed","nodeType":"MemberAccess","referencedDeclaration":479,"src":"3825:18:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"src":"3815:28:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18814,"nodeType":"IfStatement","src":"3811:98:76","trueBody":{"id":18813,"nodeType":"Block","src":"3845:64:76","statements":[{"errorCall":{"arguments":[{"id":18810,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18798,"src":"3891:6:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}],"id":18809,"name":"OrderHasUnexpectedStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":513,"src":"3866:24:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_OrderStatus_$480_$returns$_t_error_$","typeString":"function (enum ICowSwapFeeBurner.OrderStatus) pure returns (error)"}},"id":18811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3866:32:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18812,"nodeType":"RevertStatement","src":"3859:39:76"}]}},{"expression":{"arguments":[{"id":18816,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18789,"src":"3938:12:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18815,"name":"_checkMinAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19497,"src":"3919:18:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":18817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3919:32:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18818,"nodeType":"ExpressionStatement","src":"3919:32:76"},{"expression":{"arguments":[{"id":18820,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18791,"src":"3976:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18819,"name":"_checkDeadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19482,"src":"3961:14:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":18821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3961:24:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18822,"nodeType":"ExpressionStatement","src":"3961:24:76"},{"expression":{"id":18828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":18823,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18713,"src":"3996:7:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_struct$_ShortOrder_$18687_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":18825,"indexExpression":{"id":18824,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18787,"src":"4004:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3996:16:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"id":18826,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4013:12:76","memberName":"minAmountOut","nodeType":"MemberAccess","referencedDeclaration":18684,"src":"3996:29:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18827,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18789,"src":"4028:12:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3996:44:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18829,"nodeType":"ExpressionStatement","src":"3996:44:76"},{"expression":{"id":18838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":18830,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18713,"src":"4050:7:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_struct$_ShortOrder_$18687_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":18832,"indexExpression":{"id":18831,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18787,"src":"4058:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4050:16:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"id":18833,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4067:8:76","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":18686,"src":"4050:25:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":18836,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18791,"src":"4085:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18835,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4078:6:76","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":18834,"name":"uint32","nodeType":"ElementaryTypeName","src":"4078:6:76","typeDescriptions":{}}},"id":18837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4078:16:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"4050:44:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":18839,"nodeType":"ExpressionStatement","src":"4050:44:76"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":18844,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4198:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}],"id":18843,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4190:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18842,"name":"address","nodeType":"ElementaryTypeName","src":"4190:7:76","typeDescriptions":{}}},"id":18845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4190:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18846,"name":"vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18705,"src":"4205:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18840,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18787,"src":"4172:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":18841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4180:9:76","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":10553,"src":"4172:17:76","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":18847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4172:46:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":18848,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18800,"src":"4221:6:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4172:55:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18858,"nodeType":"IfStatement","src":"4168:128:76","trueBody":{"id":18857,"nodeType":"Block","src":"4229:67:76","statements":[{"expression":{"arguments":[{"id":18853,"name":"vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18705,"src":"4264:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18854,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18800,"src":"4278:6:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18850,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18787,"src":"4243:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":18852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4251:12:76","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":10850,"src":"4243:20:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":18855,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4243:42:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18856,"nodeType":"ExpressionStatement","src":"4243:42:76"}]}},{"expression":{"arguments":[{"id":18860,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18787,"src":"4322:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":18859,"name":"_createCowOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19527,"src":"4306:15:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$returns$__$","typeString":"function (contract IERC20)"}},"id":18861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4306:24:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18862,"nodeType":"ExpressionStatement","src":"4306:24:76"},{"eventCall":{"arguments":[{"id":18864,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18787,"src":"4359:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18865,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18800,"src":"4368:6:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18866,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18789,"src":"4376:12:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18867,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18791,"src":"4390:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18863,"name":"OrderRetried","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":492,"src":"4346:12:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC20_$10576_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256,uint256,uint256)"}},"id":18868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4346:53:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18869,"nodeType":"EmitStatement","src":"4341:58:76"}]},"documentation":{"id":18784,"nodeType":"StructuredDocumentation","src":"3570:33:76","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"d83b06a4","id":18871,"implemented":true,"kind":"function","modifiers":[{"id":18794,"kind":"modifierInvocation","modifierName":{"id":18793,"name":"onlyFeeRecipientOrOwner","nameLocations":["3693:23:76"],"nodeType":"IdentifierPath","referencedDeclaration":19814,"src":"3693:23:76"},"nodeType":"ModifierInvocation","src":"3693:23:76"}],"name":"retryOrder","nameLocation":"3617:10:76","nodeType":"FunctionDefinition","parameters":{"id":18792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18787,"mutability":"mutable","name":"tokenIn","nameLocation":"3635:7:76","nodeType":"VariableDeclaration","scope":18871,"src":"3628:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18786,"nodeType":"UserDefinedTypeName","pathNode":{"id":18785,"name":"IERC20","nameLocations":["3628:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3628:6:76"},"referencedDeclaration":10576,"src":"3628:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18789,"mutability":"mutable","name":"minAmountOut","nameLocation":"3652:12:76","nodeType":"VariableDeclaration","scope":18871,"src":"3644:20:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18788,"name":"uint256","nodeType":"ElementaryTypeName","src":"3644:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18791,"mutability":"mutable","name":"deadline","nameLocation":"3674:8:76","nodeType":"VariableDeclaration","scope":18871,"src":"3666:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18790,"name":"uint256","nodeType":"ElementaryTypeName","src":"3666:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3627:56:76"},"returnParameters":{"id":18795,"nodeType":"ParameterList","parameters":[],"src":"3717:0:76"},"scope":19528,"src":"3608:798:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[556],"body":{"id":18907,"nodeType":"Block","src":"4538:248:76","statements":[{"assignments":[18884,18886],"declarations":[{"constant":false,"id":18884,"mutability":"mutable","name":"status","nameLocation":"4561:6:76","nodeType":"VariableDeclaration","scope":18907,"src":"4549:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":18883,"nodeType":"UserDefinedTypeName","pathNode":{"id":18882,"name":"OrderStatus","nameLocations":["4549:11:76"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"4549:11:76"},"referencedDeclaration":480,"src":"4549:11:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"},{"constant":false,"id":18886,"mutability":"mutable","name":"amount","nameLocation":"4577:6:76","nodeType":"VariableDeclaration","scope":18907,"src":"4569:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18885,"name":"uint256","nodeType":"ElementaryTypeName","src":"4569:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18890,"initialValue":{"arguments":[{"id":18888,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18875,"src":"4613:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":18887,"name":"_getOrderStatusAndBalance","nodeType":"Identifier","overloadedDeclarations":[19392,19466],"referencedDeclaration":19392,"src":"4587:25:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10576_$returns$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"function (contract IERC20) view returns (enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"id":18889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4587:34:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4548:73:76"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"id":18894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18891,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18884,"src":"4636:6:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":18892,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"4646:11:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":18893,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4658:6:76","memberName":"Failed","nodeType":"MemberAccess","referencedDeclaration":479,"src":"4646:18:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"src":"4636:28:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18900,"nodeType":"IfStatement","src":"4632:98:76","trueBody":{"id":18899,"nodeType":"Block","src":"4666:64:76","statements":[{"errorCall":{"arguments":[{"id":18896,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18884,"src":"4712:6:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}],"id":18895,"name":"OrderHasUnexpectedStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":513,"src":"4687:24:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_OrderStatus_$480_$returns$_t_error_$","typeString":"function (enum ICowSwapFeeBurner.OrderStatus) pure returns (error)"}},"id":18897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4687:32:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18898,"nodeType":"RevertStatement","src":"4680:39:76"}]}},{"expression":{"arguments":[{"id":18902,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18875,"src":"4753:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18903,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18877,"src":"4762:8:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18904,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18886,"src":"4772:6:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18901,"name":"_cancelOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18969,"src":"4740:12:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":18905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4740:39:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18906,"nodeType":"ExpressionStatement","src":"4740:39:76"}]},"documentation":{"id":18872,"nodeType":"StructuredDocumentation","src":"4412:33:76","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"60e092c6","id":18908,"implemented":true,"kind":"function","modifiers":[{"id":18880,"kind":"modifierInvocation","modifierName":{"id":18879,"name":"onlyFeeRecipientOrOwner","nameLocations":["4514:23:76"],"nodeType":"IdentifierPath","referencedDeclaration":19814,"src":"4514:23:76"},"nodeType":"ModifierInvocation","src":"4514:23:76"}],"name":"cancelOrder","nameLocation":"4459:11:76","nodeType":"FunctionDefinition","parameters":{"id":18878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18875,"mutability":"mutable","name":"tokenIn","nameLocation":"4478:7:76","nodeType":"VariableDeclaration","scope":18908,"src":"4471:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18874,"nodeType":"UserDefinedTypeName","pathNode":{"id":18873,"name":"IERC20","nameLocations":["4471:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4471:6:76"},"referencedDeclaration":10576,"src":"4471:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18877,"mutability":"mutable","name":"receiver","nameLocation":"4495:8:76","nodeType":"VariableDeclaration","scope":18908,"src":"4487:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18876,"name":"address","nodeType":"ElementaryTypeName","src":"4487:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4470:34:76"},"returnParameters":{"id":18881,"nodeType":"ParameterList","parameters":[],"src":"4538:0:76"},"scope":19528,"src":"4450:336:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[565],"body":{"id":18931,"nodeType":"Block","src":"4927:82:76","statements":[{"expression":{"arguments":[{"id":18920,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18912,"src":"4950:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18921,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18914,"src":"4959:8:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":18926,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4995:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}],"id":18925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4987:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18924,"name":"address","nodeType":"ElementaryTypeName","src":"4987:7:76","typeDescriptions":{}}},"id":18927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4987:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18922,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18912,"src":"4969:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":18923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4977:9:76","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10533,"src":"4969:17:76","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":18928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4969:32:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18919,"name":"_cancelOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18969,"src":"4937:12:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":18929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4937:65:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18930,"nodeType":"ExpressionStatement","src":"4937:65:76"}]},"documentation":{"id":18909,"nodeType":"StructuredDocumentation","src":"4792:33:76","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"68bce712","id":18932,"implemented":true,"kind":"function","modifiers":[{"id":18917,"kind":"modifierInvocation","modifierName":{"id":18916,"name":"onlyFeeRecipientOrOwner","nameLocations":["4903:23:76"],"nodeType":"IdentifierPath","referencedDeclaration":19814,"src":"4903:23:76"},"nodeType":"ModifierInvocation","src":"4903:23:76"}],"name":"emergencyCancelOrder","nameLocation":"4839:20:76","nodeType":"FunctionDefinition","parameters":{"id":18915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18912,"mutability":"mutable","name":"tokenIn","nameLocation":"4867:7:76","nodeType":"VariableDeclaration","scope":18932,"src":"4860:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18911,"nodeType":"UserDefinedTypeName","pathNode":{"id":18910,"name":"IERC20","nameLocations":["4860:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4860:6:76"},"referencedDeclaration":10576,"src":"4860:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18914,"mutability":"mutable","name":"receiver","nameLocation":"4884:8:76","nodeType":"VariableDeclaration","scope":18932,"src":"4876:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18913,"name":"address","nodeType":"ElementaryTypeName","src":"4876:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4859:34:76"},"returnParameters":{"id":18918,"nodeType":"ParameterList","parameters":[],"src":"4927:0:76"},"scope":19528,"src":"4830:179:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18968,"nodeType":"Block","src":"5096:203:76","statements":[{"expression":{"arguments":[{"id":18945,"name":"vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18705,"src":"5127:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":18946,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5141:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":18942,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18935,"src":"5106:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":18944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5114:12:76","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":10850,"src":"5106:20:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":18947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5106:37:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18948,"nodeType":"ExpressionStatement","src":"5106:37:76"},{"expression":{"id":18952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"5153:23:76","subExpression":{"baseExpression":{"id":18949,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18713,"src":"5160:7:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_struct$_ShortOrder_$18687_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":18951,"indexExpression":{"id":18950,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18935,"src":"5168:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5160:16:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18953,"nodeType":"ExpressionStatement","src":"5153:23:76"},{"expression":{"arguments":[{"id":18957,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18935,"src":"5210:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18958,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18937,"src":"5219:8:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18959,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18939,"src":"5229:6:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18954,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11066,"src":"5187:9:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeERC20_$11066_$","typeString":"type(library SafeERC20)"}},"id":18956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5197:12:76","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10647,"src":"5187:22:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":18960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5187:49:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18961,"nodeType":"ExpressionStatement","src":"5187:49:76"},{"eventCall":{"arguments":[{"id":18963,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18935,"src":"5266:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18964,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18939,"src":"5275:6:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18965,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18937,"src":"5283:8:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18962,"name":"OrderCanceled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":502,"src":"5252:13:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$returns$__$","typeString":"function (contract IERC20,uint256,address)"}},"id":18966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5252:40:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18967,"nodeType":"EmitStatement","src":"5247:45:76"}]},"id":18969,"implemented":true,"kind":"function","modifiers":[],"name":"_cancelOrder","nameLocation":"5024:12:76","nodeType":"FunctionDefinition","parameters":{"id":18940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18935,"mutability":"mutable","name":"tokenIn","nameLocation":"5044:7:76","nodeType":"VariableDeclaration","scope":18969,"src":"5037:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18934,"nodeType":"UserDefinedTypeName","pathNode":{"id":18933,"name":"IERC20","nameLocations":["5037:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"5037:6:76"},"referencedDeclaration":10576,"src":"5037:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18937,"mutability":"mutable","name":"receiver","nameLocation":"5061:8:76","nodeType":"VariableDeclaration","scope":18969,"src":"5053:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18936,"name":"address","nodeType":"ElementaryTypeName","src":"5053:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18939,"mutability":"mutable","name":"amount","nameLocation":"5079:6:76","nodeType":"VariableDeclaration","scope":18969,"src":"5071:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18938,"name":"uint256","nodeType":"ElementaryTypeName","src":"5071:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5036:50:76"},"returnParameters":{"id":18941,"nodeType":"ParameterList","parameters":[],"src":"5096:0:76"},"scope":19528,"src":"5015:284:76","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[947],"body":{"id":19004,"nodeType":"Block","src":"5839:248:76","statements":[{"expression":{"arguments":[{"id":18994,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18972,"src":"5868:4:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18995,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18975,"src":"5886:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18996,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18977,"src":"5908:21:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18997,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18980,"src":"5943:11:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18998,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18982,"src":"5968:23:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18999,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18984,"src":"6005:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19000,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18986,"src":"6028:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":19001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6050:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":18993,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19125,"src":"5849:5:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address,uint256,bool)"}},"id":19002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5849:231:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19003,"nodeType":"ExpressionStatement","src":"5849:231:76"}]},"documentation":{"id":18970,"nodeType":"StructuredDocumentation","src":"5519:34:76","text":"@inheritdoc IProtocolFeeBurner"},"functionSelector":"de557a32","id":19005,"implemented":true,"kind":"function","modifiers":[{"id":18989,"kind":"modifierInvocation","modifierName":{"id":18988,"name":"onlyProtocolFeeSweeper","nameLocations":["5803:22:76"],"nodeType":"IdentifierPath","referencedDeclaration":19793,"src":"5803:22:76"},"nodeType":"ModifierInvocation","src":"5803:22:76"},{"id":18991,"kind":"modifierInvocation","modifierName":{"id":18990,"name":"nonReentrant","nameLocations":["5826:12:76"],"nodeType":"IdentifierPath","referencedDeclaration":6967,"src":"5826:12:76"},"nodeType":"ModifierInvocation","src":"5826:12:76"}],"name":"burn","nameLocation":"5567:4:76","nodeType":"FunctionDefinition","parameters":{"id":18987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18972,"mutability":"mutable","name":"pool","nameLocation":"5589:4:76","nodeType":"VariableDeclaration","scope":19005,"src":"5581:12:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18971,"name":"address","nodeType":"ElementaryTypeName","src":"5581:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18975,"mutability":"mutable","name":"feeToken","nameLocation":"5610:8:76","nodeType":"VariableDeclaration","scope":19005,"src":"5603:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18974,"nodeType":"UserDefinedTypeName","pathNode":{"id":18973,"name":"IERC20","nameLocations":["5603:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"5603:6:76"},"referencedDeclaration":10576,"src":"5603:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18977,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"5636:21:76","nodeType":"VariableDeclaration","scope":19005,"src":"5628:29:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18976,"name":"uint256","nodeType":"ElementaryTypeName","src":"5628:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18980,"mutability":"mutable","name":"targetToken","nameLocation":"5674:11:76","nodeType":"VariableDeclaration","scope":19005,"src":"5667:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18979,"nodeType":"UserDefinedTypeName","pathNode":{"id":18978,"name":"IERC20","nameLocations":["5667:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"5667:6:76"},"referencedDeclaration":10576,"src":"5667:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18982,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"5703:23:76","nodeType":"VariableDeclaration","scope":19005,"src":"5695:31:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18981,"name":"uint256","nodeType":"ElementaryTypeName","src":"5695:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18984,"mutability":"mutable","name":"recipient","nameLocation":"5744:9:76","nodeType":"VariableDeclaration","scope":19005,"src":"5736:17:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18983,"name":"address","nodeType":"ElementaryTypeName","src":"5736:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18986,"mutability":"mutable","name":"deadline","nameLocation":"5771:8:76","nodeType":"VariableDeclaration","scope":19005,"src":"5763:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18985,"name":"uint256","nodeType":"ElementaryTypeName","src":"5763:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5571:214:76"},"returnParameters":{"id":18992,"nodeType":"ParameterList","parameters":[],"src":"5839:0:76"},"scope":19528,"src":"5558:529:76","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":19124,"nodeType":"Block","src":"6351:1294:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"id":19028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19026,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19015,"src":"6365:11:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":19027,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19010,"src":"6380:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"6365:23:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19034,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19012,"src":"6497:14:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19035,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6515:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6497:19:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19042,"nodeType":"IfStatement","src":"6493:107:76","trueBody":{"id":19041,"nodeType":"Block","src":"6518:82:76","statements":[{"errorCall":{"arguments":[{"hexValue":"46656520746f6b656e20616d6f756e74206973207a65726f","id":19038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6562:26:76","typeDescriptions":{"typeIdentifier":"t_stringliteral_b445072e620860f3c79effa94f581ab6f5797ea12e86e8179c8038523c5a8d3b","typeString":"literal_string \"Fee token amount is zero\""},"value":"Fee token amount is zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_b445072e620860f3c79effa94f581ab6f5797ea12e86e8179c8038523c5a8d3b","typeString":"literal_string \"Fee token amount is zero\""}],"id":19037,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":507,"src":"6539:22:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":19039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6539:50:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19040,"nodeType":"RevertStatement","src":"6532:57:76"}]}},"id":19043,"nodeType":"IfStatement","src":"6361:239:76","trueBody":{"id":19033,"nodeType":"Block","src":"6390:97:76","statements":[{"errorCall":{"arguments":[{"hexValue":"46656520746f6b656e20616e642074617267657420746f6b656e20617265207468652073616d65","id":19030,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6434:41:76","typeDescriptions":{"typeIdentifier":"t_stringliteral_6f1e2122d98657c4f58b636400b0d4c24b5cda47622dbb3183030f888f336810","typeString":"literal_string \"Fee token and target token are the same\""},"value":"Fee token and target token are the same"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_6f1e2122d98657c4f58b636400b0d4c24b5cda47622dbb3183030f888f336810","typeString":"literal_string \"Fee token and target token are the same\""}],"id":19029,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":507,"src":"6411:22:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":19031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6411:65:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19032,"nodeType":"RevertStatement","src":"6404:72:76"}]}},{"expression":{"arguments":[{"id":19045,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19017,"src":"6629:23:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19044,"name":"_checkMinAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19497,"src":"6610:18:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":19046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6610:43:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19047,"nodeType":"ExpressionStatement","src":"6610:43:76"},{"expression":{"arguments":[{"id":19049,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19021,"src":"6678:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19048,"name":"_checkDeadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19482,"src":"6663:14:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":19050,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6663:24:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19051,"nodeType":"ExpressionStatement","src":"6663:24:76"},{"condition":{"id":19052,"name":"pullFeeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19023,"src":"6702:12:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19066,"nodeType":"IfStatement","src":"6698:111:76","trueBody":{"id":19065,"nodeType":"Block","src":"6716:93:76","statements":[{"expression":{"arguments":[{"expression":{"id":19056,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6756:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6760:6:76","memberName":"sender","nodeType":"MemberAccess","src":"6756:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":19060,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6776:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}],"id":19059,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6768:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19058,"name":"address","nodeType":"ElementaryTypeName","src":"6768:7:76","typeDescriptions":{}}},"id":19061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6768:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19062,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19012,"src":"6783:14:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19053,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19010,"src":"6730:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":19055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6739:16:76","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":10674,"src":"6730:25:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":19063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6730:68:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19064,"nodeType":"ExpressionStatement","src":"6730:68:76"}]}},{"assignments":[19069,null],"declarations":[{"constant":false,"id":19069,"mutability":"mutable","name":"status","nameLocation":"6832:6:76","nodeType":"VariableDeclaration","scope":19124,"src":"6820:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":19068,"nodeType":"UserDefinedTypeName","pathNode":{"id":19067,"name":"OrderStatus","nameLocations":["6820:11:76"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"6820:11:76"},"referencedDeclaration":480,"src":"6820:11:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"},null],"id":19074,"initialValue":{"arguments":[{"id":19071,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19010,"src":"6870:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":19072,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19012,"src":"6880:14:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19070,"name":"_getOrderStatusAndBalance","nodeType":"Identifier","overloadedDeclarations":[19392,19466],"referencedDeclaration":19466,"src":"6844:25:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10576_$_t_uint256_$returns$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"function (contract IERC20,uint256) view returns (enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"id":19073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6844:51:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"6819:76:76"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"id":19078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19075,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19069,"src":"6909:6:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":19076,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"6919:11:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":19077,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6931:11:76","memberName":"Nonexistent","nodeType":"MemberAccess","referencedDeclaration":476,"src":"6919:23:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"src":"6909:33:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"id":19082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19079,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19069,"src":"6946:6:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":19080,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"6956:11:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":19081,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6968:6:76","memberName":"Filled","nodeType":"MemberAccess","referencedDeclaration":478,"src":"6956:18:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"src":"6946:28:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6909:65:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19089,"nodeType":"IfStatement","src":"6905:310:76","trueBody":{"id":19088,"nodeType":"Block","src":"6976:239:76","statements":[{"errorCall":{"arguments":[{"id":19085,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19069,"src":"7197:6:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}],"id":19084,"name":"OrderHasUnexpectedStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":513,"src":"7172:24:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_OrderStatus_$480_$returns$_t_error_$","typeString":"function (enum ICowSwapFeeBurner.OrderStatus) pure returns (error)"}},"id":19086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7172:32:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19087,"nodeType":"RevertStatement","src":"7165:39:76"}]}},{"expression":{"arguments":[{"id":19091,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19010,"src":"7241:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":19090,"name":"_createCowOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19527,"src":"7225:15:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$returns$__$","typeString":"function (contract IERC20)"}},"id":19092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7225:25:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19093,"nodeType":"ExpressionStatement","src":"7225:25:76"},{"expression":{"arguments":[{"id":19097,"name":"vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18705,"src":"7283:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19098,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19012,"src":"7297:14:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19094,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19010,"src":"7261:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":19096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7270:12:76","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":10850,"src":"7261:21:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":19099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7261:51:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19100,"nodeType":"ExpressionStatement","src":"7261:51:76"},{"expression":{"id":19113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":19101,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18713,"src":"7323:7:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_struct$_ShortOrder_$18687_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":19103,"indexExpression":{"id":19102,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19010,"src":"7331:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7323:17:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19105,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19015,"src":"7378:11:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":19106,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19019,"src":"7413:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19107,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19017,"src":"7450:23:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":19110,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19021,"src":"7504:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19109,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7497:6:76","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":19108,"name":"uint32","nodeType":"ElementaryTypeName","src":"7497:6:76","typeDescriptions":{}}},"id":19111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7497:16:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":19104,"name":"ShortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18687,"src":"7343:10:76","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ShortOrder_$18687_storage_ptr_$","typeString":"type(struct CowSwapFeeBurner.ShortOrder storage pointer)"}},"id":19112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["7368:8:76","7403:8:76","7436:12:76","7487:8:76"],"names":["tokenOut","receiver","minAmountOut","deadline"],"nodeType":"FunctionCall","src":"7343:181:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"src":"7323:201:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"id":19114,"nodeType":"ExpressionStatement","src":"7323:201:76"},{"eventCall":{"arguments":[{"id":19116,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19007,"src":"7558:4:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19117,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19010,"src":"7564:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":19118,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19012,"src":"7574:14:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19119,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19015,"src":"7590:11:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":19120,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19017,"src":"7603:23:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19121,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19019,"src":"7628:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":19115,"name":"ProtocolFeeBurned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":914,"src":"7540:17:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address)"}},"id":19122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7540:98:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19123,"nodeType":"EmitStatement","src":"7535:103:76"}]},"id":19125,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"6102:5:76","nodeType":"FunctionDefinition","parameters":{"id":19024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19007,"mutability":"mutable","name":"pool","nameLocation":"6125:4:76","nodeType":"VariableDeclaration","scope":19125,"src":"6117:12:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19006,"name":"address","nodeType":"ElementaryTypeName","src":"6117:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19010,"mutability":"mutable","name":"feeToken","nameLocation":"6146:8:76","nodeType":"VariableDeclaration","scope":19125,"src":"6139:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19009,"nodeType":"UserDefinedTypeName","pathNode":{"id":19008,"name":"IERC20","nameLocations":["6139:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6139:6:76"},"referencedDeclaration":10576,"src":"6139:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":19012,"mutability":"mutable","name":"feeTokenAmount","nameLocation":"6172:14:76","nodeType":"VariableDeclaration","scope":19125,"src":"6164:22:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19011,"name":"uint256","nodeType":"ElementaryTypeName","src":"6164:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19015,"mutability":"mutable","name":"targetToken","nameLocation":"6203:11:76","nodeType":"VariableDeclaration","scope":19125,"src":"6196:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19014,"nodeType":"UserDefinedTypeName","pathNode":{"id":19013,"name":"IERC20","nameLocations":["6196:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6196:6:76"},"referencedDeclaration":10576,"src":"6196:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":19017,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"6232:23:76","nodeType":"VariableDeclaration","scope":19125,"src":"6224:31:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19016,"name":"uint256","nodeType":"ElementaryTypeName","src":"6224:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19019,"mutability":"mutable","name":"recipient","nameLocation":"6273:9:76","nodeType":"VariableDeclaration","scope":19125,"src":"6265:17:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19018,"name":"address","nodeType":"ElementaryTypeName","src":"6265:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19021,"mutability":"mutable","name":"deadline","nameLocation":"6300:8:76","nodeType":"VariableDeclaration","scope":19125,"src":"6292:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19020,"name":"uint256","nodeType":"ElementaryTypeName","src":"6292:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19023,"mutability":"mutable","name":"pullFeeToken","nameLocation":"6323:12:76","nodeType":"VariableDeclaration","scope":19125,"src":"6318:17:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19022,"name":"bool","nodeType":"ElementaryTypeName","src":"6318:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6107:234:76"},"returnParameters":{"id":19025,"nodeType":"ParameterList","parameters":[],"src":"6351:0:76"},"scope":19528,"src":"6093:1552:76","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[453],"body":{"id":19159,"nodeType":"Block","src":"8100:112:76","statements":[{"assignments":[19144],"declarations":[{"constant":false,"id":19144,"mutability":"mutable","name":"tokenIn","nameLocation":"8117:7:76","nodeType":"VariableDeclaration","scope":19159,"src":"8110:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19143,"nodeType":"UserDefinedTypeName","pathNode":{"id":19142,"name":"IERC20","nameLocations":["8110:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"8110:6:76"},"referencedDeclaration":10576,"src":"8110:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":19154,"initialValue":{"arguments":[{"arguments":[{"id":19148,"name":"staticInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19134,"src":"8145:11:76","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"components":[{"id":19150,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8159:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19149,"name":"address","nodeType":"ElementaryTypeName","src":"8159:7:76","typeDescriptions":{}}}],"id":19151,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"8158:9:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}],"expression":{"id":19146,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8134:3:76","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19147,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8138:6:76","memberName":"decode","nodeType":"MemberAccess","src":"8134:10:76","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":19152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8134:34:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":19145,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"8127:6:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10576_$","typeString":"type(contract IERC20)"}},"id":19153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8127:42:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"8110:59:76"},{"expression":{"arguments":[{"id":19156,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19144,"src":"8197:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":19155,"name":"_getOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19375,"src":"8187:9:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10576_$returns$_t_struct$_GPv2Order_$357_memory_ptr_$","typeString":"function (contract IERC20) view returns (struct GPv2Order memory)"}},"id":19157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8187:18:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}},"functionReturnParameters":19141,"id":19158,"nodeType":"Return","src":"8180:25:76"}]},"documentation":{"id":19126,"nodeType":"StructuredDocumentation","src":"7867:45:76","text":"@inheritdoc ICowConditionalOrderGenerator"},"functionSelector":"b8296fc4","id":19160,"implemented":true,"kind":"function","modifiers":[],"name":"getTradeableOrder","nameLocation":"7926:17:76","nodeType":"FunctionDefinition","parameters":{"id":19137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19128,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19160,"src":"7953:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19127,"name":"address","nodeType":"ElementaryTypeName","src":"7953:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19130,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19160,"src":"7970:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19129,"name":"address","nodeType":"ElementaryTypeName","src":"7970:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19132,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19160,"src":"7987:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19131,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7987:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19134,"mutability":"mutable","name":"staticInput","nameLocation":"8019:11:76","nodeType":"VariableDeclaration","scope":19160,"src":"8004:26:76","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":19133,"name":"bytes","nodeType":"ElementaryTypeName","src":"8004:5:76","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19136,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19160,"src":"8040:14:76","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":19135,"name":"bytes","nodeType":"ElementaryTypeName","src":"8040:5:76","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7943:117:76"},"returnParameters":{"id":19141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19140,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19160,"src":"8082:16:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":19139,"nodeType":"UserDefinedTypeName","pathNode":{"id":19138,"name":"GPv2Order","nameLocations":["8082:9:76"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"8082:9:76"},"referencedDeclaration":357,"src":"8082:9:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"8081:18:76"},"scope":19528,"src":"7917:295:76","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[417],"body":{"id":19225,"nodeType":"Block","src":"8506:418:76","statements":[{"assignments":[19183],"declarations":[{"constant":false,"id":19183,"mutability":"mutable","name":"savedOrder","nameLocation":"8533:10:76","nodeType":"VariableDeclaration","scope":19225,"src":"8516:27:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":19182,"nodeType":"UserDefinedTypeName","pathNode":{"id":19181,"name":"GPv2Order","nameLocations":["8516:9:76"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"8516:9:76"},"referencedDeclaration":357,"src":"8516:9:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"id":19191,"initialValue":{"arguments":[{"id":19185,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19163,"src":"8564:5:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19186,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19165,"src":"8571:6:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19187,"name":"ctx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19171,"src":"8579:3:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":19188,"name":"staticInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19173,"src":"8584:11:76","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":19189,"name":"offchainInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19175,"src":"8597:13:76","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":19184,"name":"getTradeableOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19160,"src":"8546:17:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_bytes32_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$returns$_t_struct$_GPv2Order_$357_memory_ptr_$","typeString":"function (address,address,bytes32,bytes calldata,bytes calldata) view returns (struct GPv2Order memory)"}},"id":19190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8546:65:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}},"nodeType":"VariableDeclarationStatement","src":"8516:95:76"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19192,"name":"_order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19178,"src":"8626:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_calldata_ptr","typeString":"struct GPv2Order calldata"}},"id":19193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8633:9:76","memberName":"buyAmount","nodeType":"MemberAccess","referencedDeclaration":342,"src":"8626:16:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":19194,"name":"savedOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19183,"src":"8645:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}},"id":19195,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8656:9:76","memberName":"buyAmount","nodeType":"MemberAccess","referencedDeclaration":342,"src":"8645:20:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8626:39:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19205,"nodeType":"IfStatement","src":"8622:109:76","trueBody":{"id":19204,"nodeType":"Block","src":"8667:64:76","statements":[{"expression":{"id":19202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19197,"name":"savedOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19183,"src":"8681:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}},"id":19199,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8692:9:76","memberName":"buyAmount","nodeType":"MemberAccess","referencedDeclaration":342,"src":"8681:20:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":19200,"name":"_order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19178,"src":"8704:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_calldata_ptr","typeString":"struct GPv2Order calldata"}},"id":19201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8711:9:76","memberName":"buyAmount","nodeType":"MemberAccess","referencedDeclaration":342,"src":"8704:16:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8681:39:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19203,"nodeType":"ExpressionStatement","src":"8681:39:76"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":19218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":19209,"name":"savedOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19183,"src":"8766:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}],"expression":{"id":19207,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8755:3:76","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19208,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8759:6:76","memberName":"encode","nodeType":"MemberAccess","src":"8755:10:76","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":19210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8755:22:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":19206,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8745:9:76","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":19211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8745:33:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"arguments":[{"id":19215,"name":"_order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19178,"src":"8803:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_calldata_ptr","typeString":"struct GPv2Order calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_GPv2Order_$357_calldata_ptr","typeString":"struct GPv2Order calldata"}],"expression":{"id":19213,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8792:3:76","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19214,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8796:6:76","memberName":"encode","nodeType":"MemberAccess","src":"8792:10:76","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":19216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8792:18:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":19212,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8782:9:76","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":19217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8782:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8745:66:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19224,"nodeType":"IfStatement","src":"8741:177:76","trueBody":{"id":19223,"nodeType":"Block","src":"8813:105:76","statements":[{"errorCall":{"arguments":[{"hexValue":"566572696679206f7264657220646f6573206e6f74206d617463682077697468206578697374696e67206f72646572","id":19220,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8857:49:76","typeDescriptions":{"typeIdentifier":"t_stringliteral_3f6784218a78441e96d7b8e76c001b98428b2ffe16b12c01b01268c6807c247f","typeString":"literal_string \"Verify order does not match with existing order\""},"value":"Verify order does not match with existing order"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_3f6784218a78441e96d7b8e76c001b98428b2ffe16b12c01b01268c6807c247f","typeString":"literal_string \"Verify order does not match with existing order\""}],"id":19219,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":507,"src":"8834:22:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":19221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8834:73:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19222,"nodeType":"RevertStatement","src":"8827:80:76"}]}}]},"documentation":{"id":19161,"nodeType":"StructuredDocumentation","src":"8218:36:76","text":"@inheritdoc ICowConditionalOrder"},"functionSelector":"14a2a784","id":19226,"implemented":true,"kind":"function","modifiers":[],"name":"verify","nameLocation":"8268:6:76","nodeType":"FunctionDefinition","parameters":{"id":19179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19163,"mutability":"mutable","name":"owner","nameLocation":"8292:5:76","nodeType":"VariableDeclaration","scope":19226,"src":"8284:13:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19162,"name":"address","nodeType":"ElementaryTypeName","src":"8284:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19165,"mutability":"mutable","name":"sender","nameLocation":"8315:6:76","nodeType":"VariableDeclaration","scope":19226,"src":"8307:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19164,"name":"address","nodeType":"ElementaryTypeName","src":"8307:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19167,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19226,"src":"8331:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19166,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8331:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19169,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19226,"src":"8348:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19168,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8348:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19171,"mutability":"mutable","name":"ctx","nameLocation":"8373:3:76","nodeType":"VariableDeclaration","scope":19226,"src":"8365:11:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19170,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8365:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19173,"mutability":"mutable","name":"staticInput","nameLocation":"8401:11:76","nodeType":"VariableDeclaration","scope":19226,"src":"8386:26:76","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":19172,"name":"bytes","nodeType":"ElementaryTypeName","src":"8386:5:76","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19175,"mutability":"mutable","name":"offchainInput","nameLocation":"8437:13:76","nodeType":"VariableDeclaration","scope":19226,"src":"8422:28:76","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":19174,"name":"bytes","nodeType":"ElementaryTypeName","src":"8422:5:76","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19178,"mutability":"mutable","name":"_order","nameLocation":"8479:6:76","nodeType":"VariableDeclaration","scope":19226,"src":"8460:25:76","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_calldata_ptr","typeString":"struct GPv2Order"},"typeName":{"id":19177,"nodeType":"UserDefinedTypeName","pathNode":{"id":19176,"name":"GPv2Order","nameLocations":["8460:9:76"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"8460:9:76"},"referencedDeclaration":357,"src":"8460:9:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"8274:217:76"},"returnParameters":{"id":19180,"nodeType":"ParameterList","parameters":[],"src":"8506:0:76"},"scope":19528,"src":"8259:665:76","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[9585],"body":{"id":19277,"nodeType":"Block","src":"9268:530:76","statements":[{"assignments":[19238,19241],"declarations":[{"constant":false,"id":19238,"mutability":"mutable","name":"order","nameLocation":"9296:5:76","nodeType":"VariableDeclaration","scope":19277,"src":"9279:22:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":19237,"nodeType":"UserDefinedTypeName","pathNode":{"id":19236,"name":"GPv2Order","nameLocations":["9279:9:76"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"9279:9:76"},"referencedDeclaration":357,"src":"9279:9:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"},{"constant":false,"id":19241,"mutability":"mutable","name":"payload","nameLocation":"9333:7:76","nodeType":"VariableDeclaration","scope":19277,"src":"9303:37:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Payload_$291_memory_ptr","typeString":"struct IComposableCow.Payload"},"typeName":{"id":19240,"nodeType":"UserDefinedTypeName","pathNode":{"id":19239,"name":"IComposableCow.Payload","nameLocations":["9303:14:76","9318:7:76"],"nodeType":"IdentifierPath","referencedDeclaration":291,"src":"9303:22:76"},"referencedDeclaration":291,"src":"9303:22:76","typeDescriptions":{"typeIdentifier":"t_struct$_Payload_$291_storage_ptr","typeString":"struct IComposableCow.Payload"}},"visibility":"internal"}],"id":19250,"initialValue":{"arguments":[{"id":19244,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19231,"src":"9368:9:76","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":19245,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":357,"src":"9392:9:76","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_GPv2Order_$357_storage_ptr_$","typeString":"type(struct GPv2Order storage pointer)"}},{"expression":{"id":19246,"name":"IComposableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":326,"src":"9403:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IComposableCow_$326_$","typeString":"type(contract IComposableCow)"}},"id":19247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9418:7:76","memberName":"Payload","nodeType":"MemberAccess","referencedDeclaration":291,"src":"9403:22:76","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Payload_$291_storage_ptr_$","typeString":"type(struct IComposableCow.Payload storage pointer)"}}],"id":19248,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9391:35:76","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_struct$_GPv2Order_$357_storage_ptr_$_$_t_type$_t_struct$_Payload_$291_storage_ptr_$_$","typeString":"tuple(type(struct GPv2Order storage pointer),type(struct IComposableCow.Payload storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_struct$_GPv2Order_$357_storage_ptr_$_$_t_type$_t_struct$_Payload_$291_storage_ptr_$_$","typeString":"tuple(type(struct GPv2Order storage pointer),type(struct IComposableCow.Payload storage pointer))"}],"expression":{"id":19242,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"9344:3:76","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19243,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9348:6:76","memberName":"decode","nodeType":"MemberAccess","src":"9344:10:76","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":19249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9344:92:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_struct$_GPv2Order_$357_memory_ptr_$_t_struct$_Payload_$291_memory_ptr_$","typeString":"tuple(struct GPv2Order memory,struct IComposableCow.Payload memory)"}},"nodeType":"VariableDeclarationStatement","src":"9278:158:76"},{"expression":{"arguments":[{"arguments":[{"id":19255,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9572:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}],"id":19254,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9564:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19253,"name":"address","nodeType":"ElementaryTypeName","src":"9564:7:76","typeDescriptions":{}}},"id":19256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9564:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19257,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9595:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9599:6:76","memberName":"sender","nodeType":"MemberAccess","src":"9595:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19259,"name":"_hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19229,"src":"9623:5:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19260,"name":"composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18703,"src":"9646:13:76","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"id":19261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9660:15:76","memberName":"domainSeparator","nodeType":"MemberAccess","referencedDeclaration":305,"src":"9646:29:76","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":19262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9646:31:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"hexValue":"30","id":19265,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9703:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":19264,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9695:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":19263,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9695:7:76","typeDescriptions":{}}},"id":19266,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9695:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":19269,"name":"order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19238,"src":"9734:5:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}],"expression":{"id":19267,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"9723:3:76","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19268,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9727:6:76","memberName":"encode","nodeType":"MemberAccess","src":"9723:10:76","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":19270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9723:17:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":19273,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19241,"src":"9769:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_Payload_$291_memory_ptr","typeString":"struct IComposableCow.Payload memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Payload_$291_memory_ptr","typeString":"struct IComposableCow.Payload memory"}],"expression":{"id":19271,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"9758:3:76","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19272,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9762:6:76","memberName":"encode","nodeType":"MemberAccess","src":"9758:10:76","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":19274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9758:19:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":19251,"name":"composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18703,"src":"9512:13:76","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"id":19252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9526:20:76","memberName":"isValidSafeSignature","nodeType":"MemberAccess","referencedDeclaration":325,"src":"9512:34:76","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes4_$","typeString":"function (address,address,bytes32,bytes32,bytes32,bytes memory,bytes memory) view external returns (bytes4)"}},"id":19275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9512:279:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"functionReturnParameters":19235,"id":19276,"nodeType":"Return","src":"9493:298:76"}]},"documentation":{"id":19227,"nodeType":"StructuredDocumentation","src":"9143:24:76","text":"@inheritdoc IERC1271"},"functionSelector":"1626ba7e","id":19278,"implemented":true,"kind":"function","modifiers":[],"name":"isValidSignature","nameLocation":"9181:16:76","nodeType":"FunctionDefinition","parameters":{"id":19232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19229,"mutability":"mutable","name":"_hash","nameLocation":"9206:5:76","nodeType":"VariableDeclaration","scope":19278,"src":"9198:13:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19228,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9198:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19231,"mutability":"mutable","name":"signature","nameLocation":"9226:9:76","nodeType":"VariableDeclaration","scope":19278,"src":"9213:22:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19230,"name":"bytes","nodeType":"ElementaryTypeName","src":"9213:5:76","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9197:39:76"},"returnParameters":{"id":19235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19234,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19278,"src":"9260:6:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":19233,"name":"bytes4","nodeType":"ElementaryTypeName","src":"9260:6:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"9259:8:76"},"scope":19528,"src":"9172:626:76","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[12705],"body":{"id":19322,"nodeType":"Block","src":"9906:504:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":19288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19286,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19281,"src":"10011:11:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":19287,"name":"_SIGNATURE_VERIFIER_MUXER_INTERFACE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18690,"src":"10026:35:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10011:50:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19293,"nodeType":"IfStatement","src":"10007:123:76","trueBody":{"id":19292,"nodeType":"Block","src":"10063:67:76","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19289,"name":"InterfaceIsSignatureVerifierMuxer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":516,"src":"10084:33:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10084:35:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19291,"nodeType":"RevertStatement","src":"10077:42:76"}]}},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":19299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19294,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19281,"src":"10159:11:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":19296,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"10179:20:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrder_$418_$","typeString":"type(contract ICowConditionalOrder)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrder_$418_$","typeString":"type(contract ICowConditionalOrder)"}],"id":19295,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10174:4:76","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":19297,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10174:26:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_ICowConditionalOrder_$418","typeString":"type(contract ICowConditionalOrder)"}},"id":19298,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10201:11:76","memberName":"interfaceId","nodeType":"MemberAccess","src":"10174:38:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10159:53:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":19305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19300,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19281,"src":"10228:11:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":19302,"name":"ICowConditionalOrderGenerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":454,"src":"10248:29:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrderGenerator_$454_$","typeString":"type(contract ICowConditionalOrderGenerator)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrderGenerator_$454_$","typeString":"type(contract ICowConditionalOrderGenerator)"}],"id":19301,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10243:4:76","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":19303,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10243:35:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_ICowConditionalOrderGenerator_$454","typeString":"type(contract ICowConditionalOrderGenerator)"}},"id":19304,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10279:11:76","memberName":"interfaceId","nodeType":"MemberAccess","src":"10243:47:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10228:62:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10159:131:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":19312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19307,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19281,"src":"10306:11:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":19309,"name":"IERC1271","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9586,"src":"10326:8:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC1271_$9586_$","typeString":"type(contract IERC1271)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC1271_$9586_$","typeString":"type(contract IERC1271)"}],"id":19308,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10321:4:76","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":19310,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10321:14:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC1271_$9586","typeString":"type(contract IERC1271)"}},"id":19311,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10336:11:76","memberName":"interfaceId","nodeType":"MemberAccess","src":"10321:26:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10306:41:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10159:188:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":19319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19314,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19281,"src":"10363:11:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":19316,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12706,"src":"10383:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC165_$12706_$","typeString":"type(contract IERC165)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC165_$12706_$","typeString":"type(contract IERC165)"}],"id":19315,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10378:4:76","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":19317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10378:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC165_$12706","typeString":"type(contract IERC165)"}},"id":19318,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10392:11:76","memberName":"interfaceId","nodeType":"MemberAccess","src":"10378:25:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10363:40:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10159:244:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":19285,"id":19321,"nodeType":"Return","src":"10140:263:76"}]},"documentation":{"id":19279,"nodeType":"StructuredDocumentation","src":"9804:23:76","text":"@inheritdoc IERC165"},"functionSelector":"01ffc9a7","id":19323,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"9841:17:76","nodeType":"FunctionDefinition","parameters":{"id":19282,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19281,"mutability":"mutable","name":"interfaceId","nameLocation":"9866:11:76","nodeType":"VariableDeclaration","scope":19323,"src":"9859:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":19280,"name":"bytes4","nodeType":"ElementaryTypeName","src":"9859:6:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"9858:20:76"},"returnParameters":{"id":19285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19284,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19323,"src":"9900:4:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19283,"name":"bool","nodeType":"ElementaryTypeName","src":"9900:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9899:6:76"},"scope":19528,"src":"9832:578:76","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":19374,"nodeType":"Block","src":"10704:753:76","statements":[{"assignments":[19334],"declarations":[{"constant":false,"id":19334,"mutability":"mutable","name":"shortOrder","nameLocation":"10732:10:76","nodeType":"VariableDeclaration","scope":19374,"src":"10714:28:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"},"typeName":{"id":19333,"nodeType":"UserDefinedTypeName","pathNode":{"id":19332,"name":"ShortOrder","nameLocations":["10714:10:76"],"nodeType":"IdentifierPath","referencedDeclaration":18687,"src":"10714:10:76"},"referencedDeclaration":18687,"src":"10714:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"}},"visibility":"internal"}],"id":19338,"initialValue":{"baseExpression":{"id":19335,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18713,"src":"10745:7:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_struct$_ShortOrder_$18687_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":19337,"indexExpression":{"id":19336,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19326,"src":"10753:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10745:16:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"nodeType":"VariableDeclarationStatement","src":"10714:47:76"},{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":19342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19339,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19334,"src":"10776:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":19340,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10787:8:76","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":18686,"src":"10776:19:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19341,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10799:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10776:24:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19348,"nodeType":"IfStatement","src":"10772:99:76","trueBody":{"id":19347,"nodeType":"Block","src":"10802:69:76","statements":[{"errorCall":{"arguments":[{"hexValue":"4f7264657220646f6573206e6f74206578697374","id":19344,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10837:22:76","typeDescriptions":{"typeIdentifier":"t_stringliteral_df3ce9a0158242e1c2e1bf99ceae8d44147108f9cc20b5e90ddb75a5171b5b80","typeString":"literal_string \"Order does not exist\""},"value":"Order does not exist"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_df3ce9a0158242e1c2e1bf99ceae8d44147108f9cc20b5e90ddb75a5171b5b80","typeString":"literal_string \"Order does not exist\""}],"id":19343,"name":"OrderNotValid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":372,"src":"10823:13:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":19345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10823:37:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19346,"nodeType":"RevertStatement","src":"10816:44:76"}]}},{"expression":{"arguments":[{"id":19350,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19326,"src":"10939:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"expression":{"id":19351,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19334,"src":"10974:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":19352,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10985:8:76","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":18680,"src":"10974:19:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"expression":{"id":19353,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19334,"src":"11021:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":19354,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11032:8:76","memberName":"receiver","nodeType":"MemberAccess","referencedDeclaration":18682,"src":"11021:19:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":19359,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11096:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}],"id":19358,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11088:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19357,"name":"address","nodeType":"ElementaryTypeName","src":"11088:7:76","typeDescriptions":{}}},"id":19360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11088:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19355,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19326,"src":"11070:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":19356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11078:9:76","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10533,"src":"11070:17:76","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11070:32:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19362,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19334,"src":"11131:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":19363,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11142:12:76","memberName":"minAmountOut","nodeType":"MemberAccess","referencedDeclaration":18684,"src":"11131:23:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19364,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19334,"src":"11181:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":19365,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11192:8:76","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":18686,"src":"11181:19:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":19366,"name":"appData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18707,"src":"11227:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"30","id":19367,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11263:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":19368,"name":"_sellKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18695,"src":"11288:9:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"74727565","id":19369,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11334:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":19370,"name":"_tokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18700,"src":"11374:13:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":19371,"name":"_tokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18700,"src":"11422:13:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":19349,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":357,"src":"10900:9:76","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_GPv2Order_$357_storage_ptr_$","typeString":"type(struct GPv2Order storage pointer)"}},"id":19372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["10928:9:76","10964:8:76","11011:8:76","11058:10:76","11120:9:76","11172:7:76","11218:7:76","11252:9:76","11282:4:76","11315:17:76","11356:16:76","11405:15:76"],"names":["sellToken","buyToken","receiver","sellAmount","buyAmount","validTo","appData","feeAmount","kind","partiallyFillable","sellTokenBalance","buyTokenBalance"],"nodeType":"FunctionCall","src":"10900:550:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}},"functionReturnParameters":19331,"id":19373,"nodeType":"Return","src":"10881:569:76"}]},"id":19375,"implemented":true,"kind":"function","modifiers":[],"name":"_getOrder","nameLocation":"10638:9:76","nodeType":"FunctionDefinition","parameters":{"id":19327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19326,"mutability":"mutable","name":"tokenIn","nameLocation":"10655:7:76","nodeType":"VariableDeclaration","scope":19375,"src":"10648:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19325,"nodeType":"UserDefinedTypeName","pathNode":{"id":19324,"name":"IERC20","nameLocations":["10648:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"10648:6:76"},"referencedDeclaration":10576,"src":"10648:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"10647:16:76"},"returnParameters":{"id":19331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19330,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19375,"src":"10686:16:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":19329,"nodeType":"UserDefinedTypeName","pathNode":{"id":19328,"name":"GPv2Order","nameLocations":["10686:9:76"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"10686:9:76"},"referencedDeclaration":357,"src":"10686:9:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"10685:18:76"},"scope":19528,"src":"10629:828:76","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":19391,"nodeType":"Block","src":"11558:61:76","statements":[{"expression":{"arguments":[{"id":19387,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19378,"src":"11601:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"hexValue":"30","id":19388,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11610:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":19386,"name":"_getOrderStatusAndBalance","nodeType":"Identifier","overloadedDeclarations":[19392,19466],"referencedDeclaration":19466,"src":"11575:25:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10576_$_t_uint256_$returns$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"function (contract IERC20,uint256) view returns (enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"id":19389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11575:37:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"functionReturnParameters":19385,"id":19390,"nodeType":"Return","src":"11568:44:76"}]},"id":19392,"implemented":true,"kind":"function","modifiers":[],"name":"_getOrderStatusAndBalance","nameLocation":"11472:25:76","nodeType":"FunctionDefinition","parameters":{"id":19379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19378,"mutability":"mutable","name":"tokenIn","nameLocation":"11505:7:76","nodeType":"VariableDeclaration","scope":19392,"src":"11498:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19377,"nodeType":"UserDefinedTypeName","pathNode":{"id":19376,"name":"IERC20","nameLocations":["11498:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"11498:6:76"},"referencedDeclaration":10576,"src":"11498:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"11497:16:76"},"returnParameters":{"id":19385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19382,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19392,"src":"11536:11:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":19381,"nodeType":"UserDefinedTypeName","pathNode":{"id":19380,"name":"OrderStatus","nameLocations":["11536:11:76"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"11536:11:76"},"referencedDeclaration":480,"src":"11536:11:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"},{"constant":false,"id":19384,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19392,"src":"11549:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19383,"name":"uint256","nodeType":"ElementaryTypeName","src":"11549:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11535:22:76"},"scope":19528,"src":"11463:156:76","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":19465,"nodeType":"Block","src":"11764:970:76","statements":[{"assignments":[19407],"declarations":[{"constant":false,"id":19407,"mutability":"mutable","name":"shortOrder","nameLocation":"11793:10:76","nodeType":"VariableDeclaration","scope":19465,"src":"11774:29:76","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"},"typeName":{"id":19406,"nodeType":"UserDefinedTypeName","pathNode":{"id":19405,"name":"ShortOrder","nameLocations":["11774:10:76"],"nodeType":"IdentifierPath","referencedDeclaration":18687,"src":"11774:10:76"},"referencedDeclaration":18687,"src":"11774:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"}},"visibility":"internal"}],"id":19411,"initialValue":{"baseExpression":{"id":19408,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18713,"src":"11806:7:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_struct$_ShortOrder_$18687_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":19410,"indexExpression":{"id":19409,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19395,"src":"11814:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11806:16:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"nodeType":"VariableDeclarationStatement","src":"11774:48:76"},{"assignments":[19413],"declarations":[{"constant":false,"id":19413,"mutability":"mutable","name":"deadline","nameLocation":"11841:8:76","nodeType":"VariableDeclaration","scope":19465,"src":"11833:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19412,"name":"uint256","nodeType":"ElementaryTypeName","src":"11833:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19416,"initialValue":{"expression":{"id":19414,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19407,"src":"11852:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder storage pointer"}},"id":19415,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11863:8:76","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":18686,"src":"11852:19:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"11833:38:76"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19417,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19413,"src":"11886:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19418,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11898:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11886:13:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19426,"nodeType":"IfStatement","src":"11882:147:76","trueBody":{"id":19425,"nodeType":"Block","src":"11901:128:76","statements":[{"expression":{"components":[{"expression":{"id":19420,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"11991:11:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":19421,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12003:11:76","memberName":"Nonexistent","nodeType":"MemberAccess","referencedDeclaration":476,"src":"11991:23:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},{"hexValue":"30","id":19422,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12016:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":19423,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"11990:28:76","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_rational_0_by_1_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,int_const 0)"}},"functionReturnParameters":19404,"id":19424,"nodeType":"Return","src":"11983:35:76"}]}},{"assignments":[19428],"declarations":[{"constant":false,"id":19428,"mutability":"mutable","name":"balance","nameLocation":"12138:7:76","nodeType":"VariableDeclaration","scope":19465,"src":"12130:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19427,"name":"uint256","nodeType":"ElementaryTypeName","src":"12130:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19438,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":19433,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12174:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}],"id":19432,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12166:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19431,"name":"address","nodeType":"ElementaryTypeName","src":"12166:7:76","typeDescriptions":{}}},"id":19434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12166:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19429,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19395,"src":"12148:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":19430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12156:9:76","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10533,"src":"12148:17:76","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12148:32:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":19436,"name":"balanceDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19397,"src":"12183:12:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12148:47:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12130:65:76"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19439,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19428,"src":"12209:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19440,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12220:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12209:12:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19448,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"12454:5:76","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":19449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12460:9:76","memberName":"timestamp","nodeType":"MemberAccess","src":"12454:15:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":19450,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19413,"src":"12472:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12454:26:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19458,"nodeType":"IfStatement","src":"12450:182:76","trueBody":{"id":19457,"nodeType":"Block","src":"12482:150:76","statements":[{"expression":{"components":[{"expression":{"id":19452,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"12593:11:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":19453,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12605:6:76","memberName":"Failed","nodeType":"MemberAccess","referencedDeclaration":479,"src":"12593:18:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},{"id":19454,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19428,"src":"12613:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19455,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12592:29:76","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"functionReturnParameters":19404,"id":19456,"nodeType":"Return","src":"12585:36:76"}]}},"id":19459,"nodeType":"IfStatement","src":"12205:427:76","trueBody":{"id":19447,"nodeType":"Block","src":"12223:221:76","statements":[{"expression":{"components":[{"expression":{"id":19442,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"12405:11:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":19443,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12417:6:76","memberName":"Filled","nodeType":"MemberAccess","referencedDeclaration":478,"src":"12405:18:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},{"id":19444,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19428,"src":"12425:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19445,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12404:29:76","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"functionReturnParameters":19404,"id":19446,"nodeType":"Return","src":"12397:36:76"}]}},{"expression":{"components":[{"expression":{"id":19460,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"12699:11:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":19461,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12711:6:76","memberName":"Active","nodeType":"MemberAccess","referencedDeclaration":477,"src":"12699:18:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},{"id":19462,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19428,"src":"12719:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19463,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12698:29:76","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"functionReturnParameters":19404,"id":19464,"nodeType":"Return","src":"12691:36:76"}]},"id":19466,"implemented":true,"kind":"function","modifiers":[],"name":"_getOrderStatusAndBalance","nameLocation":"11634:25:76","nodeType":"FunctionDefinition","parameters":{"id":19398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19395,"mutability":"mutable","name":"tokenIn","nameLocation":"11676:7:76","nodeType":"VariableDeclaration","scope":19466,"src":"11669:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19394,"nodeType":"UserDefinedTypeName","pathNode":{"id":19393,"name":"IERC20","nameLocations":["11669:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"11669:6:76"},"referencedDeclaration":10576,"src":"11669:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":19397,"mutability":"mutable","name":"balanceDelta","nameLocation":"11701:12:76","nodeType":"VariableDeclaration","scope":19466,"src":"11693:20:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19396,"name":"uint256","nodeType":"ElementaryTypeName","src":"11693:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11659:60:76"},"returnParameters":{"id":19404,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19401,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19466,"src":"11742:11:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":19400,"nodeType":"UserDefinedTypeName","pathNode":{"id":19399,"name":"OrderStatus","nameLocations":["11742:11:76"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"11742:11:76"},"referencedDeclaration":480,"src":"11742:11:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"},{"constant":false,"id":19403,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19466,"src":"11755:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19402,"name":"uint256","nodeType":"ElementaryTypeName","src":"11755:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11741:22:76"},"scope":19528,"src":"11625:1109:76","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":19481,"nodeType":"Block","src":"12795:129:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19471,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"12809:5:76","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":19472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12815:9:76","memberName":"timestamp","nodeType":"MemberAccess","src":"12809:15:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":19473,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19468,"src":"12827:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12809:26:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19480,"nodeType":"IfStatement","src":"12805:113:76","trueBody":{"id":19479,"nodeType":"Block","src":"12837:81:76","statements":[{"errorCall":{"arguments":[{"hexValue":"446561646c696e6520697320696e207468652070617374","id":19476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12881:25:76","typeDescriptions":{"typeIdentifier":"t_stringliteral_374fef2b87445dfdf2e706ba431b442bbacba974d397ef19ac6a95faebd7ce25","typeString":"literal_string \"Deadline is in the past\""},"value":"Deadline is in the past"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_374fef2b87445dfdf2e706ba431b442bbacba974d397ef19ac6a95faebd7ce25","typeString":"literal_string \"Deadline is in the past\""}],"id":19475,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":507,"src":"12858:22:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":19477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12858:49:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19478,"nodeType":"RevertStatement","src":"12851:56:76"}]}}]},"id":19482,"implemented":true,"kind":"function","modifiers":[],"name":"_checkDeadline","nameLocation":"12749:14:76","nodeType":"FunctionDefinition","parameters":{"id":19469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19468,"mutability":"mutable","name":"deadline","nameLocation":"12772:8:76","nodeType":"VariableDeclaration","scope":19482,"src":"12764:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19467,"name":"uint256","nodeType":"ElementaryTypeName","src":"12764:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12763:18:76"},"returnParameters":{"id":19470,"nodeType":"ParameterList","parameters":[],"src":"12795:0:76"},"scope":19528,"src":"12740:184:76","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":19496,"nodeType":"Block","src":"12993:119:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19487,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19484,"src":"13007:12:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13023:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13007:17:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19495,"nodeType":"IfStatement","src":"13003:103:76","trueBody":{"id":19494,"nodeType":"Block","src":"13026:80:76","statements":[{"errorCall":{"arguments":[{"hexValue":"4d696e20616d6f756e74206f7574206973207a65726f","id":19491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13070:24:76","typeDescriptions":{"typeIdentifier":"t_stringliteral_383d66dc4e6ecb7962cb5aa0d856bd222cb47a243a02d6668869f54ee5707233","typeString":"literal_string \"Min amount out is zero\""},"value":"Min amount out is zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_383d66dc4e6ecb7962cb5aa0d856bd222cb47a243a02d6668869f54ee5707233","typeString":"literal_string \"Min amount out is zero\""}],"id":19490,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":507,"src":"13047:22:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":19492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13047:48:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19493,"nodeType":"RevertStatement","src":"13040:55:76"}]}}]},"id":19497,"implemented":true,"kind":"function","modifiers":[],"name":"_checkMinAmountOut","nameLocation":"12939:18:76","nodeType":"FunctionDefinition","parameters":{"id":19485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19484,"mutability":"mutable","name":"minAmountOut","nameLocation":"12966:12:76","nodeType":"VariableDeclaration","scope":19497,"src":"12958:20:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19483,"name":"uint256","nodeType":"ElementaryTypeName","src":"12958:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12957:22:76"},"returnParameters":{"id":19486,"nodeType":"ParameterList","parameters":[],"src":"12993:0:76"},"scope":19528,"src":"12930:182:76","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":19526,"nodeType":"Block","src":"13167:283:76","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":19511,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"13311:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}],"id":19510,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13303:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19509,"name":"address","nodeType":"ElementaryTypeName","src":"13303:7:76","typeDescriptions":{}}},"id":19512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13303:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19508,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"13282:20:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrder_$418_$","typeString":"type(contract ICowConditionalOrder)"}},"id":19513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13282:35:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICowConditionalOrder_$418","typeString":"contract ICowConditionalOrder"}},{"arguments":[{"hexValue":"30","id":19516,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13349:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":19515,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13341:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":19514,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13341:7:76","typeDescriptions":{}}},"id":19517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13341:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":19520,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19500,"src":"13392:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"expression":{"id":19518,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"13381:3:76","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19519,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13385:6:76","memberName":"encode","nodeType":"MemberAccess","src":"13381:10:76","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":19521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13381:19:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ICowConditionalOrder_$418","typeString":"contract ICowConditionalOrder"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":19506,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"13211:20:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrder_$418_$","typeString":"type(contract ICowConditionalOrder)"}},"id":19507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13232:22:76","memberName":"ConditionalOrderParams","nodeType":"MemberAccess","referencedDeclaration":367,"src":"13211:43:76","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ConditionalOrderParams_$367_storage_ptr_$","typeString":"type(struct ICowConditionalOrder.ConditionalOrderParams storage pointer)"}},"id":19522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["13273:7:76","13335:4:76","13369:10:76"],"names":["handler","salt","staticData"],"nodeType":"FunctionCall","src":"13211:204:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_memory_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams memory"}},{"hexValue":"74727565","id":19523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"13429:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_memory_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":19503,"name":"composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18703,"src":"13177:13:76","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"id":19505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13191:6:76","memberName":"create","nodeType":"MemberAccess","referencedDeclaration":300,"src":"13177:20:76","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_ConditionalOrderParams_$367_memory_ptr_$_t_bool_$returns$__$","typeString":"function (struct ICowConditionalOrder.ConditionalOrderParams memory,bool) external"}},"id":19524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13177:266:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19525,"nodeType":"ExpressionStatement","src":"13177:266:76"}]},"id":19527,"implemented":true,"kind":"function","modifiers":[],"name":"_createCowOrder","nameLocation":"13127:15:76","nodeType":"FunctionDefinition","parameters":{"id":19501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19500,"mutability":"mutable","name":"tokenIn","nameLocation":"13150:7:76","nodeType":"VariableDeclaration","scope":19527,"src":"13143:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19499,"nodeType":"UserDefinedTypeName","pathNode":{"id":19498,"name":"IERC20","nameLocations":["13143:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"13143:6:76"},"referencedDeclaration":10576,"src":"13143:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"13142:16:76"},"returnParameters":{"id":19502,"nodeType":"ParameterList","parameters":[],"src":"13167:0:76"},"scope":19528,"src":"13118:332:76","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":19529,"src":"1814:11638:76","usedErrors":[372,377,384,391,396,507,513,516,924,927,6956,9352,9357,10614,19774,19777],"usedEvents":[436,492,502,914,9363,9501]}],"src":"46:13407:76"},"id":76},"contracts/ERC4626CowSwapFeeBurner.sol":{"ast":{"absolutePath":"contracts/ERC4626CowSwapFeeBurner.sol","exportedSymbols":{"CowSwapFeeBurner":[19528],"ERC4626CowSwapFeeBurner":[19756],"IComposableCow":[326],"IERC20":[10576],"IERC4626":[9846],"IProtocolFeeSweeper":[1137],"IVault":[2545],"PackedTokenBalance":[4869],"ReentrancyGuardTransient":[7012],"SafeERC20":[11066]},"id":19757,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":19530,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:77"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":19532,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19757,"sourceUnit":9847,"src":"72:75:77","symbolAliases":[{"foreign":{"id":19531,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"81:8:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":19534,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19757,"sourceUnit":11067,"src":"148:84:77","symbolAliases":[{"foreign":{"id":19533,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11066,"src":"157:9:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":19536,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19757,"sourceUnit":10577,"src":"233:72:77","symbolAliases":[{"foreign":{"id":19535,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"242:6:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","id":19538,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19757,"sourceUnit":327,"src":"307:108:77","symbolAliases":[{"foreign":{"id":19537,"name":"IComposableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":326,"src":"316:14:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":19540,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19757,"sourceUnit":1138,"src":"416:118:77","symbolAliases":[{"foreign":{"id":19539,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1137,"src":"425:19:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":19542,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19757,"sourceUnit":2546,"src":"535:81:77","symbolAliases":[{"foreign":{"id":19541,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"544:6:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":19544,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19757,"sourceUnit":7013,"src":"618:132:77","symbolAliases":[{"foreign":{"id":19543,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7012,"src":"631:24:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","id":19546,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19757,"sourceUnit":4870,"src":"751:111:77","symbolAliases":[{"foreign":{"id":19545,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4869,"src":"760:18:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/CowSwapFeeBurner.sol","file":"./CowSwapFeeBurner.sol","id":19548,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19757,"sourceUnit":19529,"src":"864:58:77","symbolAliases":[{"foreign":{"id":19547,"name":"CowSwapFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19528,"src":"873:16:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":19550,"name":"CowSwapFeeBurner","nameLocations":["1284:16:77"],"nodeType":"IdentifierPath","referencedDeclaration":19528,"src":"1284:16:77"},"id":19551,"nodeType":"InheritanceSpecifier","src":"1284:16:77"}],"canonicalName":"ERC4626CowSwapFeeBurner","contractDependencies":[],"contractKind":"contract","documentation":{"id":19549,"nodeType":"StructuredDocumentation","src":"924:323:77","text":" @title ERC4626CowSwapFeeBurner\n @notice A contract that burns ERC4626 protocol fee tokens using CowSwap, previously redeeming underlying assets.\n @dev The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function.\n Only one order per token is allowed at a time."},"fullyImplemented":true,"id":19756,"linearizedBaseContracts":[19756,19528,4999,34,7012,19845,9572,9486,12366,566,454,12706,418,948,9586],"name":"ERC4626CowSwapFeeBurner","nameLocation":"1257:23:77","nodeType":"ContractDefinition","nodes":[{"global":false,"id":19555,"libraryName":{"id":19552,"name":"SafeERC20","nameLocations":["1313:9:77"],"nodeType":"IdentifierPath","referencedDeclaration":11066,"src":"1313:9:77"},"nodeType":"UsingForDirective","src":"1307:27:77","typeName":{"id":19554,"nodeType":"UserDefinedTypeName","pathNode":{"id":19553,"name":"IERC20","nameLocations":["1327:6:77"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1327:6:77"},"referencedDeclaration":10576,"src":"1327:6:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}},{"documentation":{"id":19556,"nodeType":"StructuredDocumentation","src":"1340:35:77","text":"@notice The amount out is zero."},"errorSelector":"5db1dd1e","id":19561,"name":"AmountOutIsZero","nameLocation":"1386:15:77","nodeType":"ErrorDefinition","parameters":{"id":19560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19559,"mutability":"mutable","name":"token","nameLocation":"1409:5:77","nodeType":"VariableDeclaration","scope":19561,"src":"1402:12:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19558,"nodeType":"UserDefinedTypeName","pathNode":{"id":19557,"name":"IERC20","nameLocations":["1402:6:77"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1402:6:77"},"referencedDeclaration":10576,"src":"1402:6:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1401:14:77"},"src":"1380:36:77"},{"body":{"id":19586,"nodeType":"Block","src":"1758:64:77","statements":[]},"id":19587,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":19578,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19564,"src":"1668:19:77","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},{"id":19579,"name":"_composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19567,"src":"1689:14:77","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},{"id":19580,"name":"_cowVaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19569,"src":"1705:16:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19581,"name":"_appData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19571,"src":"1723:8:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":19582,"name":"_initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19573,"src":"1733:13:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19583,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19575,"src":"1748:8:77","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":19584,"kind":"baseConstructorSpecifier","modifierName":{"id":19577,"name":"CowSwapFeeBurner","nameLocations":["1651:16:77"],"nodeType":"IdentifierPath","referencedDeclaration":19528,"src":"1651:16:77"},"nodeType":"ModifierInvocation","src":"1651:106:77"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19564,"mutability":"mutable","name":"_protocolFeeSweeper","nameLocation":"1463:19:77","nodeType":"VariableDeclaration","scope":19587,"src":"1443:39:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":19563,"nodeType":"UserDefinedTypeName","pathNode":{"id":19562,"name":"IProtocolFeeSweeper","nameLocations":["1443:19:77"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"1443:19:77"},"referencedDeclaration":1137,"src":"1443:19:77","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"visibility":"internal"},{"constant":false,"id":19567,"mutability":"mutable","name":"_composableCow","nameLocation":"1507:14:77","nodeType":"VariableDeclaration","scope":19587,"src":"1492:29:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"},"typeName":{"id":19566,"nodeType":"UserDefinedTypeName","pathNode":{"id":19565,"name":"IComposableCow","nameLocations":["1492:14:77"],"nodeType":"IdentifierPath","referencedDeclaration":326,"src":"1492:14:77"},"referencedDeclaration":326,"src":"1492:14:77","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"visibility":"internal"},{"constant":false,"id":19569,"mutability":"mutable","name":"_cowVaultRelayer","nameLocation":"1539:16:77","nodeType":"VariableDeclaration","scope":19587,"src":"1531:24:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19568,"name":"address","nodeType":"ElementaryTypeName","src":"1531:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19571,"mutability":"mutable","name":"_appData","nameLocation":"1573:8:77","nodeType":"VariableDeclaration","scope":19587,"src":"1565:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19570,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1565:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19573,"mutability":"mutable","name":"_initialOwner","nameLocation":"1599:13:77","nodeType":"VariableDeclaration","scope":19587,"src":"1591:21:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19572,"name":"address","nodeType":"ElementaryTypeName","src":"1591:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19575,"mutability":"mutable","name":"_version","nameLocation":"1636:8:77","nodeType":"VariableDeclaration","scope":19587,"src":"1622:22:77","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":19574,"name":"string","nodeType":"ElementaryTypeName","src":"1622:6:77","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1433:217:77"},"returnParameters":{"id":19585,"nodeType":"ParameterList","parameters":[],"src":"1758:0:77"},"scope":19756,"src":"1422:400:77","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[19005],"body":{"id":19754,"nodeType":"Block","src":"3109:2098:77","statements":[{"assignments":[19614],"declarations":[{"constant":false,"id":19614,"mutability":"mutable","name":"erc4626Token","nameLocation":"3128:12:77","nodeType":"VariableDeclaration","scope":19754,"src":"3119:21:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":19613,"nodeType":"UserDefinedTypeName","pathNode":{"id":19612,"name":"IERC4626","nameLocations":["3119:8:77"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"3119:8:77"},"referencedDeclaration":9846,"src":"3119:8:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"id":19621,"initialValue":{"arguments":[{"arguments":[{"id":19618,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19593,"src":"3160:8:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":19617,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3152:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19616,"name":"address","nodeType":"ElementaryTypeName","src":"3152:7:77","typeDescriptions":{}}},"id":19619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3152:17:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19615,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"3143:8:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9846_$","typeString":"type(contract IERC4626)"}},"id":19620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3143:27:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"nodeType":"VariableDeclarationStatement","src":"3119:51:77"},{"assignments":[19624],"declarations":[{"constant":false,"id":19624,"mutability":"mutable","name":"underlyingToken","nameLocation":"3187:15:77","nodeType":"VariableDeclaration","scope":19754,"src":"3180:22:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19623,"nodeType":"UserDefinedTypeName","pathNode":{"id":19622,"name":"IERC20","nameLocations":["3180:6:77"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3180:6:77"},"referencedDeclaration":10576,"src":"3180:6:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":19630,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19626,"name":"erc4626Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19614,"src":"3212:12:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"id":19627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3225:5:77","memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":9715,"src":"3212:18:77","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":19628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3212:20:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19625,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"3205:6:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10576_$","typeString":"type(contract IERC20)"}},"id":19629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3205:28:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3180:53:77"},{"expression":{"arguments":[{"expression":{"id":19638,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3439:3:77","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3443:6:77","memberName":"sender","nodeType":"MemberAccess","src":"3439:10:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":19642,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3459:4:77","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}],"id":19641,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3451:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19640,"name":"address","nodeType":"ElementaryTypeName","src":"3451:7:77","typeDescriptions":{}}},"id":19643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3451:13:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19644,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"3466:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"arguments":[{"id":19634,"name":"erc4626Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19614,"src":"3407:12:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"id":19633,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3399:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19632,"name":"address","nodeType":"ElementaryTypeName","src":"3399:7:77","typeDescriptions":{}}},"id":19635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3399:21:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19631,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"3392:6:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10576_$","typeString":"type(contract IERC20)"}},"id":19636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3392:29:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":19637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3422:16:77","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":10674,"src":"3392:46:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":19645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3392:96:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19646,"nodeType":"ExpressionStatement","src":"3392:96:77"},{"assignments":[19648,19650],"declarations":[{"constant":false,"id":19648,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"3508:23:77","nodeType":"VariableDeclaration","scope":19754,"src":"3500:31:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19647,"name":"uint256","nodeType":"ElementaryTypeName","src":"3500:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19650,"mutability":"mutable","name":"minERC4626AmountOut","nameLocation":"3541:19:77","nodeType":"VariableDeclaration","scope":19754,"src":"3533:27:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19649,"name":"uint256","nodeType":"ElementaryTypeName","src":"3533:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19658,"initialValue":{"arguments":[{"arguments":[{"id":19655,"name":"encodedMinAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19600,"src":"3622:20:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19654,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3614:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":19653,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3614:7:77","typeDescriptions":{}}},"id":19656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3614:29:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":19651,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4869,"src":"3564:18:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$4869_$","typeString":"type(library PackedTokenBalance)"}},"id":19652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3583:17:77","memberName":"fromPackedBalance","nodeType":"MemberAccess","referencedDeclaration":4847,"src":"3564:36:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256,uint256)"}},"id":19657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3564:89:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"3499:154:77"},{"assignments":[19660],"declarations":[{"constant":false,"id":19660,"mutability":"mutable","name":"feeTokenBalanceBefore","nameLocation":"3672:21:77","nodeType":"VariableDeclaration","scope":19754,"src":"3664:29:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19659,"name":"uint256","nodeType":"ElementaryTypeName","src":"3664:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19668,"initialValue":{"arguments":[{"arguments":[{"id":19665,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3730:4:77","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}],"id":19664,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3722:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19663,"name":"address","nodeType":"ElementaryTypeName","src":"3722:7:77","typeDescriptions":{}}},"id":19666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3722:13:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19661,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19624,"src":"3696:15:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":19662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3712:9:77","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10533,"src":"3696:25:77","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3696:40:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3664:72:77"},{"expression":{"arguments":[{"id":19672,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"3767:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":19675,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3798:4:77","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}],"id":19674,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3790:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19673,"name":"address","nodeType":"ElementaryTypeName","src":"3790:7:77","typeDescriptions":{}}},"id":19676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3790:13:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":19679,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3813:4:77","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}],"id":19678,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3805:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19677,"name":"address","nodeType":"ElementaryTypeName","src":"3805:7:77","typeDescriptions":{}}},"id":19680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3805:13:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19669,"name":"erc4626Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19614,"src":"3747:12:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"id":19671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3760:6:77","memberName":"redeem","nodeType":"MemberAccess","referencedDeclaration":9845,"src":"3747:19:77","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) external returns (uint256)"}},"id":19681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3747:72:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19682,"nodeType":"ExpressionStatement","src":"3747:72:77"},{"assignments":[19684],"declarations":[{"constant":false,"id":19684,"mutability":"mutable","name":"feeTokenBalanceAfter","nameLocation":"3838:20:77","nodeType":"VariableDeclaration","scope":19754,"src":"3830:28:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19683,"name":"uint256","nodeType":"ElementaryTypeName","src":"3830:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19692,"initialValue":{"arguments":[{"arguments":[{"id":19689,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3895:4:77","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}],"id":19688,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3887:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19687,"name":"address","nodeType":"ElementaryTypeName","src":"3887:7:77","typeDescriptions":{}}},"id":19690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3887:13:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19685,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19624,"src":"3861:15:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":19686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3877:9:77","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10533,"src":"3861:25:77","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3861:40:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3830:71:77"},{"expression":{"id":19697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19693,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"3911:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19694,"name":"feeTokenBalanceAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19684,"src":"3935:20:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":19695,"name":"feeTokenBalanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19660,"src":"3958:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3935:44:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3911:68:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19698,"nodeType":"ExpressionStatement","src":"3911:68:77"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19699,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"3994:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":19700,"name":"minERC4626AmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19650,"src":"4018:19:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3994:43:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19709,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"4159:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4184:1:77","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4159:26:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19717,"nodeType":"IfStatement","src":"4155:96:77","trueBody":{"id":19716,"nodeType":"Block","src":"4187:64:77","statements":[{"errorCall":{"arguments":[{"id":19713,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19624,"src":"4224:15:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":19712,"name":"AmountOutIsZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19561,"src":"4208:15:77","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$10576_$returns$_t_error_$","typeString":"function (contract IERC20) pure returns (error)"}},"id":19714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4208:32:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19715,"nodeType":"RevertStatement","src":"4201:39:77"}]}},"id":19718,"nodeType":"IfStatement","src":"3990:261:77","trueBody":{"id":19708,"nodeType":"Block","src":"4039:110:77","statements":[{"errorCall":{"arguments":[{"id":19703,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19624,"src":"4078:15:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":19704,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"4095:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19705,"name":"minERC4626AmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19650,"src":"4118:19:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19702,"name":"AmountOutBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":924,"src":"4060:17:77","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$10576_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":19706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4060:78:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19707,"nodeType":"RevertStatement","src":"4053:85:77"}]}},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"id":19721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19719,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19624,"src":"4484:15:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":19720,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19598,"src":"4503:11:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"4484:30:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":19752,"nodeType":"Block","src":"4904:297:77","statements":[{"expression":{"arguments":[{"id":19742,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19590,"src":"4941:4:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19743,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19624,"src":"4963:15:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":19744,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"4996:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19745,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19598,"src":"5035:11:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":19746,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19648,"src":"5064:23:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19747,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19602,"src":"5105:9:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19748,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19604,"src":"5132:8:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":19749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5158:5:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":19741,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19125,"src":"4918:5:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address,uint256,bool)"}},"id":19750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4918:272:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19751,"nodeType":"ExpressionStatement","src":"4918:272:77"}]},"id":19753,"nodeType":"IfStatement","src":"4480:721:77","trueBody":{"id":19740,"nodeType":"Block","src":"4516:382:77","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19722,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"4644:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":19723,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19648,"src":"4668:23:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4644:47:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19732,"nodeType":"IfStatement","src":"4640:171:77","trueBody":{"id":19731,"nodeType":"Block","src":"4693:118:77","statements":[{"errorCall":{"arguments":[{"id":19726,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19598,"src":"4736:11:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":19727,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"4749:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19728,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19648,"src":"4772:23:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19725,"name":"AmountOutBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":924,"src":"4718:17:77","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$10576_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":19729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4718:78:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19730,"nodeType":"RevertStatement","src":"4711:85:77"}]}},{"expression":{"arguments":[{"id":19736,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19602,"src":"4854:9:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19737,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"4865:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19733,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19624,"src":"4825:15:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":19735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4841:12:77","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10647,"src":"4825:28:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":19738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4825:62:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19739,"nodeType":"ExpressionStatement","src":"4825:62:77"}]}}]},"documentation":{"id":19588,"nodeType":"StructuredDocumentation","src":"1828:997:77","text":" @notice Treats `feeToken` as an ERC4626, redeems `exactFeeTokenAmountIn`, swaps the underlying asset for\n `targetToken`, and sends the proceeds to the `recipient`.\n @dev Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\n @param pool The pool the fees came from (only used for documentation in the event)\n @param feeToken The token collected from the pool\n @param exactFeeTokenAmountIn The number of fee tokens collected\n @param targetToken The desired target token (`tokenOut` of the swap)\n @param encodedMinAmountsOut The minimum amounts out for the swap, encoded as a 256-bit integer:\n - Upper 128 bits: the minimum amount of the target token to receive\n - Lower 128 bits: the minimum amount of the ERC4626 token to receive\n @param recipient The recipient of the swap proceeds\n @param deadline Deadline for the burn operation (i.e., swap), after which it will revert"},"functionSelector":"de557a32","id":19755,"implemented":true,"kind":"function","modifiers":[{"id":19608,"kind":"modifierInvocation","modifierName":{"id":19607,"name":"onlyProtocolFeeSweeper","nameLocations":["3073:22:77"],"nodeType":"IdentifierPath","referencedDeclaration":19793,"src":"3073:22:77"},"nodeType":"ModifierInvocation","src":"3073:22:77"},{"id":19610,"kind":"modifierInvocation","modifierName":{"id":19609,"name":"nonReentrant","nameLocations":["3096:12:77"],"nodeType":"IdentifierPath","referencedDeclaration":6967,"src":"3096:12:77"},"nodeType":"ModifierInvocation","src":"3096:12:77"}],"name":"burn","nameLocation":"2839:4:77","nodeType":"FunctionDefinition","overrides":{"id":19606,"nodeType":"OverrideSpecifier","overrides":[],"src":"3064:8:77"},"parameters":{"id":19605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19590,"mutability":"mutable","name":"pool","nameLocation":"2861:4:77","nodeType":"VariableDeclaration","scope":19755,"src":"2853:12:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19589,"name":"address","nodeType":"ElementaryTypeName","src":"2853:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19593,"mutability":"mutable","name":"feeToken","nameLocation":"2882:8:77","nodeType":"VariableDeclaration","scope":19755,"src":"2875:15:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19592,"nodeType":"UserDefinedTypeName","pathNode":{"id":19591,"name":"IERC20","nameLocations":["2875:6:77"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2875:6:77"},"referencedDeclaration":10576,"src":"2875:6:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":19595,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"2908:21:77","nodeType":"VariableDeclaration","scope":19755,"src":"2900:29:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19594,"name":"uint256","nodeType":"ElementaryTypeName","src":"2900:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19598,"mutability":"mutable","name":"targetToken","nameLocation":"2946:11:77","nodeType":"VariableDeclaration","scope":19755,"src":"2939:18:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19597,"nodeType":"UserDefinedTypeName","pathNode":{"id":19596,"name":"IERC20","nameLocations":["2939:6:77"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2939:6:77"},"referencedDeclaration":10576,"src":"2939:6:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":19600,"mutability":"mutable","name":"encodedMinAmountsOut","nameLocation":"2975:20:77","nodeType":"VariableDeclaration","scope":19755,"src":"2967:28:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19599,"name":"uint256","nodeType":"ElementaryTypeName","src":"2967:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19602,"mutability":"mutable","name":"recipient","nameLocation":"3013:9:77","nodeType":"VariableDeclaration","scope":19755,"src":"3005:17:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19601,"name":"address","nodeType":"ElementaryTypeName","src":"3005:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19604,"mutability":"mutable","name":"deadline","nameLocation":"3040:8:77","nodeType":"VariableDeclaration","scope":19755,"src":"3032:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19603,"name":"uint256","nodeType":"ElementaryTypeName","src":"3032:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2843:211:77"},"returnParameters":{"id":19611,"nodeType":"ParameterList","parameters":[],"src":"3109:0:77"},"scope":19756,"src":"2830:2377:77","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":19757,"src":"1248:3961:77","usedErrors":[372,377,384,391,396,507,513,516,924,927,6956,9352,9357,10614,19561,19774,19777],"usedEvents":[436,492,502,914,9363,9501]}],"src":"46:5164:77"},"id":77},"contracts/FeeBurnerAuthentication.sol":{"ast":{"absolutePath":"contracts/FeeBurnerAuthentication.sol","exportedSymbols":{"FeeBurnerAuthentication":[19845],"IProtocolFeeSweeper":[1137],"IVault":[2545],"Ownable":[9486],"Ownable2Step":[9572]},"id":19846,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":19758,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:78"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":19760,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19846,"sourceUnit":2546,"src":"72:81:78","symbolAliases":[{"foreign":{"id":19759,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"81:6:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"@openzeppelin/contracts/access/Ownable.sol","id":19762,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19846,"sourceUnit":9487,"src":"154:69:78","symbolAliases":[{"foreign":{"id":19761,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9486,"src":"163:7:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/Ownable2Step.sol","file":"@openzeppelin/contracts/access/Ownable2Step.sol","id":19764,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19846,"sourceUnit":9573,"src":"224:79:78","symbolAliases":[{"foreign":{"id":19763,"name":"Ownable2Step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9572,"src":"233:12:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":19766,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19846,"sourceUnit":1138,"src":"304:118:78","symbolAliases":[{"foreign":{"id":19765,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1137,"src":"313:19:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":19767,"name":"Ownable2Step","nameLocations":["460:12:78"],"nodeType":"IdentifierPath","referencedDeclaration":9572,"src":"460:12:78"},"id":19768,"nodeType":"InheritanceSpecifier","src":"460:12:78"}],"canonicalName":"FeeBurnerAuthentication","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":19845,"linearizedBaseContracts":[19845,9572,9486,12366],"name":"FeeBurnerAuthentication","nameLocation":"433:23:78","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"178ac96e","id":19771,"mutability":"immutable","name":"protocolFeeSweeper","nameLocation":"516:18:78","nodeType":"VariableDeclaration","scope":19845,"src":"479:55:78","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":19770,"nodeType":"UserDefinedTypeName","pathNode":{"id":19769,"name":"IProtocolFeeSweeper","nameLocations":["479:19:78"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"479:19:78"},"referencedDeclaration":1137,"src":"479:19:78","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"visibility":"public"},{"documentation":{"id":19772,"nodeType":"StructuredDocumentation","src":"541:40:78","text":"@notice The fee protocol is invalid."},"errorSelector":"932c92a5","id":19774,"name":"InvalidProtocolFeeSweeper","nameLocation":"592:25:78","nodeType":"ErrorDefinition","parameters":{"id":19773,"nodeType":"ParameterList","parameters":[],"src":"617:2:78"},"src":"586:34:78"},{"documentation":{"id":19775,"nodeType":"StructuredDocumentation","src":"626:67:78","text":"@notice The sender does not have permission to call a function."},"errorSelector":"23dada53","id":19777,"name":"SenderNotAllowed","nameLocation":"704:16:78","nodeType":"ErrorDefinition","parameters":{"id":19776,"nodeType":"ParameterList","parameters":[],"src":"720:2:78"},"src":"698:25:78"},{"body":{"id":19792,"nodeType":"Block","src":"763:124:78","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19779,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"777:3:78","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"781:6:78","memberName":"sender","nodeType":"MemberAccess","src":"777:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":19783,"name":"protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19771,"src":"799:18:78","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}],"id":19782,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"791:7:78","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19781,"name":"address","nodeType":"ElementaryTypeName","src":"791:7:78","typeDescriptions":{}}},"id":19784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"791:27:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"777:41:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19790,"nodeType":"IfStatement","src":"773:97:78","trueBody":{"id":19789,"nodeType":"Block","src":"820:50:78","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19786,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"841:16:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"841:18:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19788,"nodeType":"RevertStatement","src":"834:25:78"}]}},{"id":19791,"nodeType":"PlaceholderStatement","src":"879:1:78"}]},"id":19793,"name":"onlyProtocolFeeSweeper","nameLocation":"738:22:78","nodeType":"ModifierDefinition","parameters":{"id":19778,"nodeType":"ParameterList","parameters":[],"src":"760:2:78"},"src":"729:158:78","virtual":false,"visibility":"internal"},{"body":{"id":19813,"nodeType":"Block","src":"928:158:78","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19795,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"942:3:78","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"946:6:78","memberName":"sender","nodeType":"MemberAccess","src":"942:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19797,"name":"protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19771,"src":"956:18:78","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"id":19798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"975:15:78","memberName":"getFeeRecipient","nodeType":"MemberAccess","referencedDeclaration":1093,"src":"956:34:78","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":19799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"956:36:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"942:50:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19801,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"996:3:78","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1000:6:78","memberName":"sender","nodeType":"MemberAccess","src":"996:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":19803,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9406,"src":"1010:5:78","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":19804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1010:7:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"996:21:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"942:75:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19811,"nodeType":"IfStatement","src":"938:131:78","trueBody":{"id":19810,"nodeType":"Block","src":"1019:50:78","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19807,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"1040:16:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1040:18:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19809,"nodeType":"RevertStatement","src":"1033:25:78"}]}},{"id":19812,"nodeType":"PlaceholderStatement","src":"1078:1:78"}]},"id":19814,"name":"onlyFeeRecipientOrOwner","nameLocation":"902:23:78","nodeType":"ModifierDefinition","parameters":{"id":19794,"nodeType":"ParameterList","parameters":[],"src":"925:2:78"},"src":"893:193:78","virtual":false,"visibility":"internal"},{"body":{"id":19843,"nodeType":"Block","src":"1189:174:78","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":19827,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19817,"src":"1211:19:78","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}],"id":19826,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1203:7:78","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19825,"name":"address","nodeType":"ElementaryTypeName","src":"1203:7:78","typeDescriptions":{}}},"id":19828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1203:28:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":19831,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1243:1:78","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":19830,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1235:7:78","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19829,"name":"address","nodeType":"ElementaryTypeName","src":"1235:7:78","typeDescriptions":{}}},"id":19832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1235:10:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1203:42:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19838,"nodeType":"IfStatement","src":"1199:107:78","trueBody":{"id":19837,"nodeType":"Block","src":"1247:59:78","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19834,"name":"InvalidProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19774,"src":"1268:25:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1268:27:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19836,"nodeType":"RevertStatement","src":"1261:34:78"}]}},{"expression":{"id":19841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19839,"name":"protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19771,"src":"1316:18:78","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19840,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19817,"src":"1337:19:78","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"src":"1316:40:78","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"id":19842,"nodeType":"ExpressionStatement","src":"1316:40:78"}]},"id":19844,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":19822,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19819,"src":"1175:12:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":19823,"kind":"baseConstructorSpecifier","modifierName":{"id":19821,"name":"Ownable","nameLocations":["1167:7:78"],"nodeType":"IdentifierPath","referencedDeclaration":9486,"src":"1167:7:78"},"nodeType":"ModifierInvocation","src":"1167:21:78"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19817,"mutability":"mutable","name":"_protocolFeeSweeper","nameLocation":"1124:19:78","nodeType":"VariableDeclaration","scope":19844,"src":"1104:39:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":19816,"nodeType":"UserDefinedTypeName","pathNode":{"id":19815,"name":"IProtocolFeeSweeper","nameLocations":["1104:19:78"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"1104:19:78"},"referencedDeclaration":1137,"src":"1104:19:78","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"visibility":"internal"},{"constant":false,"id":19819,"mutability":"mutable","name":"initialOwner","nameLocation":"1153:12:78","nodeType":"VariableDeclaration","scope":19844,"src":"1145:20:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19818,"name":"address","nodeType":"ElementaryTypeName","src":"1145:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1103:63:78"},"returnParameters":{"id":19824,"nodeType":"ParameterList","parameters":[],"src":"1189:0:78"},"scope":19845,"src":"1092:271:78","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":19846,"src":"424:941:78","usedErrors":[9352,9357,19774,19777],"usedEvents":[9363,9501]}],"src":"46:1320:78"},"id":78},"contracts/HyperEVMRateProvider.sol":{"ast":{"absolutePath":"contracts/HyperEVMRateProvider.sol","exportedSymbols":{"HyperEVMRateProvider":[19947],"HyperSpotPricePrecompile":[24562],"HyperTokenInfoPrecompile":[24631],"IHyperEVMRateProvider":[587],"IRateProvider":[24]},"id":19948,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":19847,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"45:24:79"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol","id":19849,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19948,"sourceUnit":588,"src":"71:126:79","symbolAliases":[{"foreign":{"id":19848,"name":"IHyperEVMRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":587,"src":"84:21:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","id":19851,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19948,"sourceUnit":25,"src":"198:112:79","symbolAliases":[{"foreign":{"id":19850,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24,"src":"207:13:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/utils/HyperSpotPricePrecompile.sol","file":"./utils/HyperSpotPricePrecompile.sol","id":19853,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19948,"sourceUnit":24563,"src":"312:80:79","symbolAliases":[{"foreign":{"id":19852,"name":"HyperSpotPricePrecompile","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24562,"src":"321:24:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/utils/HyperTokenInfoPrecompile.sol","file":"./utils/HyperTokenInfoPrecompile.sol","id":19855,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19948,"sourceUnit":24632,"src":"393:80:79","symbolAliases":[{"foreign":{"id":19854,"name":"HyperTokenInfoPrecompile","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24631,"src":"402:24:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":19857,"name":"IRateProvider","nameLocations":["839:13:79"],"nodeType":"IdentifierPath","referencedDeclaration":24,"src":"839:13:79"},"id":19858,"nodeType":"InheritanceSpecifier","src":"839:13:79"},{"baseName":{"id":19859,"name":"IHyperEVMRateProvider","nameLocations":["854:21:79"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"854:21:79"},"id":19860,"nodeType":"InheritanceSpecifier","src":"854:21:79"}],"canonicalName":"HyperEVMRateProvider","contractDependencies":[],"contractKind":"contract","documentation":{"id":19856,"nodeType":"StructuredDocumentation","src":"475:330:79","text":" @notice A rate provider for the HyperEVM.\n @dev HyperEVM has precompiles that allow to fetch the spot price of a token (in terms of USD or other tokens).\n This contract uses the spot price and the token info precompiles to return the rate of a token on-chain,\n scaled with 18 decimals (compatible with the Vault)."},"fullyImplemented":true,"id":19947,"linearizedBaseContracts":[19947,587,24],"name":"HyperEVMRateProvider","nameLocation":"815:20:79","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":19862,"mutability":"immutable","name":"_spotPriceMultiplier","nameLocation":"908:20:79","nodeType":"VariableDeclaration","scope":19947,"src":"882:46:79","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19861,"name":"uint256","nodeType":"ElementaryTypeName","src":"882:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":19864,"mutability":"immutable","name":"_pairIndex","nameLocation":"959:10:79","nodeType":"VariableDeclaration","scope":19947,"src":"934:35:79","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19863,"name":"uint32","nodeType":"ElementaryTypeName","src":"934:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"private"},{"constant":false,"id":19866,"mutability":"immutable","name":"_tokenIndex","nameLocation":"1000:11:79","nodeType":"VariableDeclaration","scope":19947,"src":"975:36:79","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19865,"name":"uint32","nodeType":"ElementaryTypeName","src":"975:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"private"},{"body":{"id":19900,"nodeType":"Block","src":"1067:720:79","statements":[{"assignments":[19874],"declarations":[{"constant":false,"id":19874,"mutability":"mutable","name":"szDecimals","nameLocation":"1083:10:79","nodeType":"VariableDeclaration","scope":19900,"src":"1077:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":19873,"name":"uint8","nodeType":"ElementaryTypeName","src":"1077:5:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":19879,"initialValue":{"arguments":[{"id":19877,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19868,"src":"1132:10:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":19875,"name":"HyperTokenInfoPrecompile","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24631,"src":"1096:24:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_HyperTokenInfoPrecompile_$24631_$","typeString":"type(library HyperTokenInfoPrecompile)"}},"id":19876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1121:10:79","memberName":"szDecimals","nodeType":"MemberAccess","referencedDeclaration":24630,"src":"1096:35:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint32_$returns$_t_uint8_$","typeString":"function (uint32) view returns (uint8)"}},"id":19878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1096:47:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"1077:66:79"},{"expression":{"id":19890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19880,"name":"_spotPriceMultiplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19862,"src":"1659:20:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31653138","id":19881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1682:4:79","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":19882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1690:2:79","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":19885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"38","id":19883,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1697:1:79","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":19884,"name":"szDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19874,"src":"1701:10:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1697:14:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":19886,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1696:16:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1690:22:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19888,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1689:24:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1682:31:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1659:54:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19891,"nodeType":"ExpressionStatement","src":"1659:54:79"},{"expression":{"id":19894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19892,"name":"_pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19864,"src":"1724:10:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19893,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19870,"src":"1737:9:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"1724:22:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":19895,"nodeType":"ExpressionStatement","src":"1724:22:79"},{"expression":{"id":19898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19896,"name":"_tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19866,"src":"1756:11:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19897,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19868,"src":"1770:10:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"1756:24:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":19899,"nodeType":"ExpressionStatement","src":"1756:24:79"}]},"id":19901,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19868,"mutability":"mutable","name":"tokenIndex","nameLocation":"1037:10:79","nodeType":"VariableDeclaration","scope":19901,"src":"1030:17:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19867,"name":"uint32","nodeType":"ElementaryTypeName","src":"1030:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":19870,"mutability":"mutable","name":"pairIndex","nameLocation":"1056:9:79","nodeType":"VariableDeclaration","scope":19901,"src":"1049:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19869,"name":"uint32","nodeType":"ElementaryTypeName","src":"1049:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1029:37:79"},"returnParameters":{"id":19872,"nodeType":"ParameterList","parameters":[],"src":"1067:0:79"},"scope":19947,"src":"1018:769:79","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[586],"body":{"id":19909,"nodeType":"Block","src":"1901:44:79","statements":[{"expression":{"id":19907,"name":"_spotPriceMultiplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19862,"src":"1918:20:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19906,"id":19908,"nodeType":"Return","src":"1911:27:79"}]},"documentation":{"id":19902,"nodeType":"StructuredDocumentation","src":"1793:37:79","text":"@inheritdoc IHyperEVMRateProvider"},"functionSelector":"a747d56f","id":19910,"implemented":true,"kind":"function","modifiers":[],"name":"getSpotPriceMultiplier","nameLocation":"1844:22:79","nodeType":"FunctionDefinition","parameters":{"id":19903,"nodeType":"ParameterList","parameters":[],"src":"1866:2:79"},"returnParameters":{"id":19906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19905,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19910,"src":"1892:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19904,"name":"uint256","nodeType":"ElementaryTypeName","src":"1892:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1891:9:79"},"scope":19947,"src":"1835:110:79","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[574],"body":{"id":19918,"nodeType":"Block","src":"2049:35:79","statements":[{"expression":{"id":19916,"name":"_tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19866,"src":"2066:11:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":19915,"id":19917,"nodeType":"Return","src":"2059:18:79"}]},"documentation":{"id":19911,"nodeType":"StructuredDocumentation","src":"1951:37:79","text":"@inheritdoc IHyperEVMRateProvider"},"functionSelector":"295d3ee8","id":19919,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenIndex","nameLocation":"2002:13:79","nodeType":"FunctionDefinition","parameters":{"id":19912,"nodeType":"ParameterList","parameters":[],"src":"2015:2:79"},"returnParameters":{"id":19915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19914,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19919,"src":"2041:6:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19913,"name":"uint32","nodeType":"ElementaryTypeName","src":"2041:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2040:8:79"},"scope":19947,"src":"1993:91:79","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[580],"body":{"id":19927,"nodeType":"Block","src":"2187:34:79","statements":[{"expression":{"id":19925,"name":"_pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19864,"src":"2204:10:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":19924,"id":19926,"nodeType":"Return","src":"2197:17:79"}]},"documentation":{"id":19920,"nodeType":"StructuredDocumentation","src":"2090:37:79","text":"@inheritdoc IHyperEVMRateProvider"},"functionSelector":"81bfa5d1","id":19928,"implemented":true,"kind":"function","modifiers":[],"name":"getPairIndex","nameLocation":"2141:12:79","nodeType":"FunctionDefinition","parameters":{"id":19921,"nodeType":"ParameterList","parameters":[],"src":"2153:2:79"},"returnParameters":{"id":19924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19923,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19928,"src":"2179:6:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19922,"name":"uint32","nodeType":"ElementaryTypeName","src":"2179:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2178:8:79"},"scope":19947,"src":"2132:89:79","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[23],"body":{"id":19945,"nodeType":"Block","src":"2312:132:79","statements":[{"assignments":[19935],"declarations":[{"constant":false,"id":19935,"mutability":"mutable","name":"spotPrice","nameLocation":"2330:9:79","nodeType":"VariableDeclaration","scope":19945,"src":"2322:17:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19934,"name":"uint256","nodeType":"ElementaryTypeName","src":"2322:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19940,"initialValue":{"arguments":[{"id":19938,"name":"_pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19864,"src":"2377:10:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":19936,"name":"HyperSpotPricePrecompile","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24562,"src":"2342:24:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_HyperSpotPricePrecompile_$24562_$","typeString":"type(library HyperSpotPricePrecompile)"}},"id":19937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2367:9:79","memberName":"spotPrice","nodeType":"MemberAccess","referencedDeclaration":24561,"src":"2342:34:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint32_$returns$_t_uint256_$","typeString":"function (uint32) view returns (uint256)"}},"id":19939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2342:46:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2322:66:79"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19941,"name":"spotPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19935,"src":"2405:9:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":19942,"name":"_spotPriceMultiplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19862,"src":"2417:20:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2405:32:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19933,"id":19944,"nodeType":"Return","src":"2398:39:79"}]},"documentation":{"id":19929,"nodeType":"StructuredDocumentation","src":"2227:29:79","text":"@inheritdoc IRateProvider"},"functionSelector":"679aefce","id":19946,"implemented":true,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"2270:7:79","nodeType":"FunctionDefinition","parameters":{"id":19930,"nodeType":"ParameterList","parameters":[],"src":"2277:2:79"},"returnParameters":{"id":19933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19932,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19946,"src":"2303:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19931,"name":"uint256","nodeType":"ElementaryTypeName","src":"2303:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2302:9:79"},"scope":19947,"src":"2261:183:79","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":19948,"src":"806:1640:79","usedErrors":[24510,24513,24589],"usedEvents":[]}],"src":"45:2402:79"},"id":79},"contracts/HyperEVMRateProviderFactory.sol":{"ast":{"absolutePath":"contracts/HyperEVMRateProviderFactory.sol","exportedSymbols":{"HyperEVMRateProvider":[19947],"HyperEVMRateProviderFactory":[20195],"IHyperEVMRateProvider":[587],"IHyperEVMRateProviderFactory":[664],"IVault":[2545],"SingletonAuthentication":[9289],"Version":[4999]},"id":20196,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":19949,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:80"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol","id":19951,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20196,"sourceUnit":665,"src":"72:140:80","symbolAliases":[{"foreign":{"id":19950,"name":"IHyperEVMRateProviderFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":664,"src":"85:28:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol","id":19953,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20196,"sourceUnit":588,"src":"213:126:80","symbolAliases":[{"foreign":{"id":19952,"name":"IHyperEVMRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":587,"src":"226:21:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":19955,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20196,"sourceUnit":2546,"src":"340:81:80","symbolAliases":[{"foreign":{"id":19954,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"349:6:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":19957,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20196,"sourceUnit":9290,"src":"423:104:80","symbolAliases":[{"foreign":{"id":19956,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9289,"src":"432:23:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","id":19959,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20196,"sourceUnit":5000,"src":"528:89:80","symbolAliases":[{"foreign":{"id":19958,"name":"Version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4999,"src":"537:7:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/HyperEVMRateProvider.sol","file":"./HyperEVMRateProvider.sol","id":19961,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20196,"sourceUnit":19948,"src":"619:66:80","symbolAliases":[{"foreign":{"id":19960,"name":"HyperEVMRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19947,"src":"628:20:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":19963,"name":"IHyperEVMRateProviderFactory","nameLocations":["799:28:80"],"nodeType":"IdentifierPath","referencedDeclaration":664,"src":"799:28:80"},"id":19964,"nodeType":"InheritanceSpecifier","src":"799:28:80"},{"baseName":{"id":19965,"name":"SingletonAuthentication","nameLocations":["829:23:80"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"829:23:80"},"id":19966,"nodeType":"InheritanceSpecifier","src":"829:23:80"},{"baseName":{"id":19967,"name":"Version","nameLocations":["854:7:80"],"nodeType":"IdentifierPath","referencedDeclaration":4999,"src":"854:7:80"},"id":19968,"nodeType":"InheritanceSpecifier","src":"854:7:80"}],"canonicalName":"HyperEVMRateProviderFactory","contractDependencies":[19947],"contractKind":"contract","documentation":{"id":19962,"nodeType":"StructuredDocumentation","src":"687:72:80","text":"@notice Factory for deploying and managing HyperEVM rate providers."},"fullyImplemented":true,"id":20195,"linearizedBaseContracts":[20195,4999,34,9289,7535,4385,14,664],"name":"HyperEVMRateProviderFactory","nameLocation":"768:27:80","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":19970,"mutability":"immutable","name":"_rateProviderVersion","nameLocation":"895:20:80","nodeType":"VariableDeclaration","scope":20195,"src":"868:47:80","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19969,"name":"uint256","nodeType":"ElementaryTypeName","src":"868:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19972,"mutability":"mutable","name":"_isDisabled","nameLocation":"935:11:80","nodeType":"VariableDeclaration","scope":20195,"src":"921:25:80","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19971,"name":"bool","nodeType":"ElementaryTypeName","src":"921:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":19977,"mutability":"mutable","name":"_rateProviders","nameLocation":"1032:14:80","nodeType":"VariableDeclaration","scope":20195,"src":"953:93:80","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_contract$_IHyperEVMRateProvider_$587_$","typeString":"mapping(bytes32 => contract IHyperEVMRateProvider)"},"typeName":{"id":19976,"keyName":"rateProviderId","keyNameLocation":"969:14:80","keyType":{"id":19973,"name":"bytes32","nodeType":"ElementaryTypeName","src":"961:7:80","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"953:69:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_contract$_IHyperEVMRateProvider_$587_$","typeString":"mapping(bytes32 => contract IHyperEVMRateProvider)"},"valueName":"rateProvider","valueNameLocation":"1009:12:80","valueType":{"id":19975,"nodeType":"UserDefinedTypeName","pathNode":{"id":19974,"name":"IHyperEVMRateProvider","nameLocations":["987:21:80"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"987:21:80"},"referencedDeclaration":587,"src":"987:21:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}}},"visibility":"internal"},{"constant":false,"id":19982,"mutability":"mutable","name":"_isRateProviderFromFactory","nameLocation":"1126:26:80","nodeType":"VariableDeclaration","scope":20195,"src":"1052:100:80","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IHyperEVMRateProvider_$587_$_t_bool_$","typeString":"mapping(contract IHyperEVMRateProvider => bool)"},"typeName":{"id":19981,"keyName":"rateProvider","keyNameLocation":"1082:12:80","keyType":{"id":19979,"nodeType":"UserDefinedTypeName","pathNode":{"id":19978,"name":"IHyperEVMRateProvider","nameLocations":["1060:21:80"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"1060:21:80"},"referencedDeclaration":587,"src":"1060:21:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"nodeType":"Mapping","src":"1052:64:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IHyperEVMRateProvider_$587_$_t_bool_$","typeString":"mapping(contract IHyperEVMRateProvider => bool)"},"valueName":"creationFlag","valueNameLocation":"1103:12:80","valueType":{"id":19980,"name":"bool","nodeType":"ElementaryTypeName","src":"1098:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"body":{"id":20002,"nodeType":"Block","src":"1329:59:80","statements":[{"expression":{"id":20000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19998,"name":"_rateProviderVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19970,"src":"1339:20:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19999,"name":"rateProviderVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19989,"src":"1362:19:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1339:42:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20001,"nodeType":"ExpressionStatement","src":"1339:42:80"}]},"id":20003,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":19992,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19985,"src":"1298:5:80","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"id":19993,"kind":"baseConstructorSpecifier","modifierName":{"id":19991,"name":"SingletonAuthentication","nameLocations":["1274:23:80"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"1274:23:80"},"nodeType":"ModifierInvocation","src":"1274:30:80"},{"arguments":[{"id":19995,"name":"factoryVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19987,"src":"1313:14:80","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":19996,"kind":"baseConstructorSpecifier","modifierName":{"id":19994,"name":"Version","nameLocations":["1305:7:80"],"nodeType":"IdentifierPath","referencedDeclaration":4999,"src":"1305:7:80"},"nodeType":"ModifierInvocation","src":"1305:23:80"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19985,"mutability":"mutable","name":"vault","nameLocation":"1187:5:80","nodeType":"VariableDeclaration","scope":20003,"src":"1180:12:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":19984,"nodeType":"UserDefinedTypeName","pathNode":{"id":19983,"name":"IVault","nameLocations":["1180:6:80"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1180:6:80"},"referencedDeclaration":2545,"src":"1180:6:80","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":19987,"mutability":"mutable","name":"factoryVersion","nameLocation":"1216:14:80","nodeType":"VariableDeclaration","scope":20003,"src":"1202:28:80","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":19986,"name":"string","nodeType":"ElementaryTypeName","src":"1202:6:80","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":19989,"mutability":"mutable","name":"rateProviderVersion","nameLocation":"1248:19:80","nodeType":"VariableDeclaration","scope":20003,"src":"1240:27:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19988,"name":"uint256","nodeType":"ElementaryTypeName","src":"1240:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1170:103:80"},"returnParameters":{"id":19997,"nodeType":"ParameterList","parameters":[],"src":"1329:0:80"},"scope":20195,"src":"1159:229:80","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[628],"body":{"id":20011,"nodeType":"Block","src":"1509:44:80","statements":[{"expression":{"id":20009,"name":"_rateProviderVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19970,"src":"1526:20:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20008,"id":20010,"nodeType":"Return","src":"1519:27:80"}]},"documentation":{"id":20004,"nodeType":"StructuredDocumentation","src":"1394:44:80","text":"@inheritdoc IHyperEVMRateProviderFactory"},"functionSelector":"381c7a4f","id":20012,"implemented":true,"kind":"function","modifiers":[],"name":"getRateProviderVersion","nameLocation":"1452:22:80","nodeType":"FunctionDefinition","parameters":{"id":20005,"nodeType":"ParameterList","parameters":[],"src":"1474:2:80"},"returnParameters":{"id":20008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20007,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20012,"src":"1500:7:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20006,"name":"uint256","nodeType":"ElementaryTypeName","src":"1500:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1499:9:80"},"scope":20195,"src":"1443:110:80","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[639],"body":{"id":20091,"nodeType":"Block","src":"1715:645:80","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":20023,"name":"_ensureEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20194,"src":"1725:14:80","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":20024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1725:16:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20025,"nodeType":"ExpressionStatement","src":"1725:16:80"},{"assignments":[20027],"declarations":[{"constant":false,"id":20027,"mutability":"mutable","name":"rateProviderId","nameLocation":"1760:14:80","nodeType":"VariableDeclaration","scope":20091,"src":"1752:22:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20026,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1752:7:80","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":20032,"initialValue":{"arguments":[{"id":20029,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20015,"src":"1800:10:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20030,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20017,"src":"1812:9:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":20028,"name":"_computeRateProviderId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20184,"src":"1777:22:80","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (uint32,uint32) pure returns (bytes32)"}},"id":20031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1777:45:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1752:70:80"},{"assignments":[20034],"declarations":[{"constant":false,"id":20034,"mutability":"mutable","name":"existingRateProvider","nameLocation":"1841:20:80","nodeType":"VariableDeclaration","scope":20091,"src":"1833:28:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20033,"name":"address","nodeType":"ElementaryTypeName","src":"1833:7:80","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":20041,"initialValue":{"arguments":[{"baseExpression":{"id":20037,"name":"_rateProviders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19977,"src":"1872:14:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_contract$_IHyperEVMRateProvider_$587_$","typeString":"mapping(bytes32 => contract IHyperEVMRateProvider)"}},"id":20039,"indexExpression":{"id":20038,"name":"rateProviderId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20027,"src":"1887:14:80","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1872:30:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}],"id":20036,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1864:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20035,"name":"address","nodeType":"ElementaryTypeName","src":"1864:7:80","typeDescriptions":{}}},"id":20040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1864:39:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1833:70:80"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20042,"name":"existingRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20034,"src":"1918:20:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":20045,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1950:1:80","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":20044,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1942:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20043,"name":"address","nodeType":"ElementaryTypeName","src":"1942:7:80","typeDescriptions":{}}},"id":20046,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1942:10:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1918:34:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20055,"nodeType":"IfStatement","src":"1914:142:80","trueBody":{"id":20054,"nodeType":"Block","src":"1954:102:80","statements":[{"errorCall":{"arguments":[{"id":20049,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20015,"src":"2001:10:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20050,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20017,"src":"2013:9:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20051,"name":"existingRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20034,"src":"2024:20:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20048,"name":"RateProviderAlreadyExists","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":612,"src":"1975:25:80","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint32_$_t_uint32_$_t_address_$returns$_t_error_$","typeString":"function (uint32,uint32,address) pure returns (error)"}},"id":20052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1975:70:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20053,"nodeType":"RevertStatement","src":"1968:77:80"}]}},{"expression":{"id":20068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20056,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20021,"src":"2066:12:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"id":20063,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20015,"src":"2136:10:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20064,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20017,"src":"2148:9:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":20062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"2111:24:80","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$_t_uint32_$_t_uint32_$returns$_t_contract$_HyperEVMRateProvider_$19947_$","typeString":"function (uint32,uint32) returns (contract HyperEVMRateProvider)"},"typeName":{"id":20061,"nodeType":"UserDefinedTypeName","pathNode":{"id":20060,"name":"HyperEVMRateProvider","nameLocations":["2115:20:80"],"nodeType":"IdentifierPath","referencedDeclaration":19947,"src":"2115:20:80"},"referencedDeclaration":19947,"src":"2115:20:80","typeDescriptions":{"typeIdentifier":"t_contract$_HyperEVMRateProvider_$19947","typeString":"contract HyperEVMRateProvider"}}},"id":20065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2111:47:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_HyperEVMRateProvider_$19947","typeString":"contract HyperEVMRateProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_HyperEVMRateProvider_$19947","typeString":"contract HyperEVMRateProvider"}],"id":20059,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2103:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20058,"name":"address","nodeType":"ElementaryTypeName","src":"2103:7:80","typeDescriptions":{}}},"id":20066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2103:56:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20057,"name":"IHyperEVMRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":587,"src":"2081:21:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IHyperEVMRateProvider_$587_$","typeString":"type(contract IHyperEVMRateProvider)"}},"id":20067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2081:79:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"src":"2066:94:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"id":20069,"nodeType":"ExpressionStatement","src":"2066:94:80"},{"expression":{"id":20074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20070,"name":"_rateProviders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19977,"src":"2170:14:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_contract$_IHyperEVMRateProvider_$587_$","typeString":"mapping(bytes32 => contract IHyperEVMRateProvider)"}},"id":20072,"indexExpression":{"id":20071,"name":"rateProviderId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20027,"src":"2185:14:80","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2170:30:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20073,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20021,"src":"2203:12:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"src":"2170:45:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"id":20075,"nodeType":"ExpressionStatement","src":"2170:45:80"},{"expression":{"id":20080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20076,"name":"_isRateProviderFromFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19982,"src":"2225:26:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IHyperEVMRateProvider_$587_$_t_bool_$","typeString":"mapping(contract IHyperEVMRateProvider => bool)"}},"id":20078,"indexExpression":{"id":20077,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20021,"src":"2252:12:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2225:40:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":20079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2268:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2225:47:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20081,"nodeType":"ExpressionStatement","src":"2225:47:80"},{"eventCall":{"arguments":[{"id":20083,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20015,"src":"2308:10:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20084,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20017,"src":"2320:9:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"arguments":[{"id":20087,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20021,"src":"2339:12:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}],"id":20086,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2331:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20085,"name":"address","nodeType":"ElementaryTypeName","src":"2331:7:80","typeDescriptions":{}}},"id":20088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2331:21:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20082,"name":"RateProviderCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":600,"src":"2288:19:80","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,uint256,address)"}},"id":20089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2288:65:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20090,"nodeType":"EmitStatement","src":"2283:70:80"}]},"documentation":{"id":20013,"nodeType":"StructuredDocumentation","src":"1559:44:80","text":"@inheritdoc IHyperEVMRateProviderFactory"},"functionSelector":"568acb79","id":20092,"implemented":true,"kind":"function","modifiers":[],"name":"create","nameLocation":"1617:6:80","nodeType":"FunctionDefinition","parameters":{"id":20018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20015,"mutability":"mutable","name":"tokenIndex","nameLocation":"1631:10:80","nodeType":"VariableDeclaration","scope":20092,"src":"1624:17:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20014,"name":"uint32","nodeType":"ElementaryTypeName","src":"1624:6:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":20017,"mutability":"mutable","name":"pairIndex","nameLocation":"1650:9:80","nodeType":"VariableDeclaration","scope":20092,"src":"1643:16:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20016,"name":"uint32","nodeType":"ElementaryTypeName","src":"1643:6:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1623:37:80"},"returnParameters":{"id":20022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20021,"mutability":"mutable","name":"rateProvider","nameLocation":"1701:12:80","nodeType":"VariableDeclaration","scope":20092,"src":"1679:34:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"},"typeName":{"id":20020,"nodeType":"UserDefinedTypeName","pathNode":{"id":20019,"name":"IHyperEVMRateProvider","nameLocations":["1679:21:80"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"1679:21:80"},"referencedDeclaration":587,"src":"1679:21:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"visibility":"internal"}],"src":"1678:36:80"},"scope":20195,"src":"1608:752:80","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[650],"body":{"id":20134,"nodeType":"Block","src":"2558:296:80","statements":[{"assignments":[20104],"declarations":[{"constant":false,"id":20104,"mutability":"mutable","name":"rateProviderId","nameLocation":"2576:14:80","nodeType":"VariableDeclaration","scope":20134,"src":"2568:22:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20103,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2568:7:80","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":20109,"initialValue":{"arguments":[{"id":20106,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20095,"src":"2616:10:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20107,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20097,"src":"2628:9:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":20105,"name":"_computeRateProviderId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20184,"src":"2593:22:80","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (uint32,uint32) pure returns (bytes32)"}},"id":20108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2593:45:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2568:70:80"},{"expression":{"id":20114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20110,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20101,"src":"2648:12:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":20111,"name":"_rateProviders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19977,"src":"2663:14:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_contract$_IHyperEVMRateProvider_$587_$","typeString":"mapping(bytes32 => contract IHyperEVMRateProvider)"}},"id":20113,"indexExpression":{"id":20112,"name":"rateProviderId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20104,"src":"2678:14:80","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2663:30:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"src":"2648:45:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"id":20115,"nodeType":"ExpressionStatement","src":"2648:45:80"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":20118,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20101,"src":"2715:12:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}],"id":20117,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2707:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20116,"name":"address","nodeType":"ElementaryTypeName","src":"2707:7:80","typeDescriptions":{}}},"id":20119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2707:21:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":20122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2740:1:80","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":20121,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2732:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20120,"name":"address","nodeType":"ElementaryTypeName","src":"2732:7:80","typeDescriptions":{}}},"id":20123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2732:10:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2707:35:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20131,"nodeType":"IfStatement","src":"2703:116:80","trueBody":{"id":20130,"nodeType":"Block","src":"2744:75:80","statements":[{"errorCall":{"arguments":[{"id":20126,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20095,"src":"2786:10:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20127,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20097,"src":"2798:9:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":20125,"name":"RateProviderNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":619,"src":"2765:20:80","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint32_$_t_uint32_$returns$_t_error_$","typeString":"function (uint32,uint32) pure returns (error)"}},"id":20128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2765:43:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20129,"nodeType":"RevertStatement","src":"2758:50:80"}]}},{"expression":{"id":20132,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20101,"src":"2835:12:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"functionReturnParameters":20102,"id":20133,"nodeType":"Return","src":"2828:19:80"}]},"documentation":{"id":20093,"nodeType":"StructuredDocumentation","src":"2366:44:80","text":"@inheritdoc IHyperEVMRateProviderFactory"},"functionSelector":"99b8113f","id":20135,"implemented":true,"kind":"function","modifiers":[],"name":"getRateProvider","nameLocation":"2424:15:80","nodeType":"FunctionDefinition","parameters":{"id":20098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20095,"mutability":"mutable","name":"tokenIndex","nameLocation":"2456:10:80","nodeType":"VariableDeclaration","scope":20135,"src":"2449:17:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20094,"name":"uint32","nodeType":"ElementaryTypeName","src":"2449:6:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":20097,"mutability":"mutable","name":"pairIndex","nameLocation":"2483:9:80","nodeType":"VariableDeclaration","scope":20135,"src":"2476:16:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20096,"name":"uint32","nodeType":"ElementaryTypeName","src":"2476:6:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2439:59:80"},"returnParameters":{"id":20102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20101,"mutability":"mutable","name":"rateProvider","nameLocation":"2544:12:80","nodeType":"VariableDeclaration","scope":20135,"src":"2522:34:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"},"typeName":{"id":20100,"nodeType":"UserDefinedTypeName","pathNode":{"id":20099,"name":"IHyperEVMRateProvider","nameLocations":["2522:21:80"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"2522:21:80"},"referencedDeclaration":587,"src":"2522:21:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"visibility":"internal"}],"src":"2521:36:80"},"scope":20195,"src":"2415:439:80","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[659],"body":{"id":20148,"nodeType":"Block","src":"3009:64:80","statements":[{"expression":{"baseExpression":{"id":20144,"name":"_isRateProviderFromFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19982,"src":"3026:26:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IHyperEVMRateProvider_$587_$_t_bool_$","typeString":"mapping(contract IHyperEVMRateProvider => bool)"}},"id":20146,"indexExpression":{"id":20145,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20139,"src":"3053:12:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3026:40:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":20143,"id":20147,"nodeType":"Return","src":"3019:47:80"}]},"documentation":{"id":20136,"nodeType":"StructuredDocumentation","src":"2860:44:80","text":"@inheritdoc IHyperEVMRateProviderFactory"},"functionSelector":"19912f71","id":20149,"implemented":true,"kind":"function","modifiers":[],"name":"isRateProviderFromFactory","nameLocation":"2918:25:80","nodeType":"FunctionDefinition","parameters":{"id":20140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20139,"mutability":"mutable","name":"rateProvider","nameLocation":"2966:12:80","nodeType":"VariableDeclaration","scope":20149,"src":"2944:34:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"},"typeName":{"id":20138,"nodeType":"UserDefinedTypeName","pathNode":{"id":20137,"name":"IHyperEVMRateProvider","nameLocations":["2944:21:80"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"2944:21:80"},"referencedDeclaration":587,"src":"2944:21:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"visibility":"internal"}],"src":"2943:36:80"},"returnParameters":{"id":20143,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20142,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20149,"src":"3003:4:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20141,"name":"bool","nodeType":"ElementaryTypeName","src":"3003:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3002:6:80"},"scope":20195,"src":"2909:164:80","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[663],"body":{"id":20165,"nodeType":"Block","src":"3169:106:80","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":20155,"name":"_ensureEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20194,"src":"3179:14:80","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":20156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3179:16:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20157,"nodeType":"ExpressionStatement","src":"3179:16:80"},{"expression":{"id":20160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20158,"name":"_isDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19972,"src":"3206:11:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":20159,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3220:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"3206:18:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20161,"nodeType":"ExpressionStatement","src":"3206:18:80"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20162,"name":"RateProviderFactoryDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":603,"src":"3239:27:80","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":20163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3239:29:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20164,"nodeType":"EmitStatement","src":"3234:34:80"}]},"documentation":{"id":20150,"nodeType":"StructuredDocumentation","src":"3079:44:80","text":"@inheritdoc IHyperEVMRateProviderFactory"},"functionSelector":"2f2770db","id":20166,"implemented":true,"kind":"function","modifiers":[{"id":20153,"kind":"modifierInvocation","modifierName":{"id":20152,"name":"authenticate","nameLocations":["3156:12:80"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"3156:12:80"},"nodeType":"ModifierInvocation","src":"3156:12:80"}],"name":"disable","nameLocation":"3137:7:80","nodeType":"FunctionDefinition","parameters":{"id":20151,"nodeType":"ParameterList","parameters":[],"src":"3144:2:80"},"returnParameters":{"id":20154,"nodeType":"ParameterList","parameters":[],"src":"3169:0:80"},"scope":20195,"src":"3128:147:80","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20183,"nodeType":"Block","src":"3382:68:80","statements":[{"expression":{"arguments":[{"arguments":[{"id":20178,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20168,"src":"3420:10:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20179,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20170,"src":"3432:9:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":20176,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3409:3:80","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":20177,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3413:6:80","memberName":"encode","nodeType":"MemberAccess","src":"3409:10:80","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":20180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3409:33:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":20175,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3399:9:80","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":20181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3399:44:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":20174,"id":20182,"nodeType":"Return","src":"3392:51:80"}]},"id":20184,"implemented":true,"kind":"function","modifiers":[],"name":"_computeRateProviderId","nameLocation":"3290:22:80","nodeType":"FunctionDefinition","parameters":{"id":20171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20168,"mutability":"mutable","name":"tokenIndex","nameLocation":"3320:10:80","nodeType":"VariableDeclaration","scope":20184,"src":"3313:17:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20167,"name":"uint32","nodeType":"ElementaryTypeName","src":"3313:6:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":20170,"mutability":"mutable","name":"pairIndex","nameLocation":"3339:9:80","nodeType":"VariableDeclaration","scope":20184,"src":"3332:16:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20169,"name":"uint32","nodeType":"ElementaryTypeName","src":"3332:6:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"3312:37:80"},"returnParameters":{"id":20174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20173,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20184,"src":"3373:7:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20172,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3373:7:80","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3372:9:80"},"scope":20195,"src":"3281:169:80","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":20193,"nodeType":"Block","src":"3496:96:80","statements":[{"condition":{"id":20187,"name":"_isDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19972,"src":"3510:11:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20192,"nodeType":"IfStatement","src":"3506:80:80","trueBody":{"id":20191,"nodeType":"Block","src":"3523:63:80","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20188,"name":"RateProviderFactoryIsDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":622,"src":"3544:29:80","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":20189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3544:31:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20190,"nodeType":"RevertStatement","src":"3537:38:80"}]}}]},"id":20194,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureEnabled","nameLocation":"3465:14:80","nodeType":"FunctionDefinition","parameters":{"id":20185,"nodeType":"ParameterList","parameters":[],"src":"3479:2:80"},"returnParameters":{"id":20186,"nodeType":"ParameterList","parameters":[],"src":"3496:0:80"},"scope":20195,"src":"3456:136:80","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":20196,"src":"759:2835:80","usedErrors":[5,612,619,622,7355],"usedEvents":[600,603]}],"src":"46:3549:80"},"id":80},"contracts/OwnableAuthentication.sol":{"ast":{"absolutePath":"contracts/OwnableAuthentication.sol","exportedSymbols":{"Authentication":[4385],"IAuthorizer":[1341],"IVault":[2545],"Ownable":[9486],"Ownable2Step":[9572],"OwnableAuthentication":[20330]},"id":20331,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":20197,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:81"},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"@openzeppelin/contracts/access/Ownable.sol","id":20199,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20331,"sourceUnit":9487,"src":"72:69:81","symbolAliases":[{"foreign":{"id":20198,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9486,"src":"81:7:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/Ownable2Step.sol","file":"@openzeppelin/contracts/access/Ownable2Step.sol","id":20201,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20331,"sourceUnit":9573,"src":"142:79:81","symbolAliases":[{"foreign":{"id":20200,"name":"Ownable2Step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9572,"src":"151:12:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":20203,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20331,"sourceUnit":1342,"src":"223:91:81","symbolAliases":[{"foreign":{"id":20202,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"232:11:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":20205,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20331,"sourceUnit":2546,"src":"315:81:81","symbolAliases":[{"foreign":{"id":20204,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"324:6:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","id":20207,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20331,"sourceUnit":4386,"src":"398:103:81","symbolAliases":[{"foreign":{"id":20206,"name":"Authentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4385,"src":"407:14:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":20209,"name":"Ownable2Step","nameLocations":["1243:12:81"],"nodeType":"IdentifierPath","referencedDeclaration":9572,"src":"1243:12:81"},"id":20210,"nodeType":"InheritanceSpecifier","src":"1243:12:81"},{"baseName":{"id":20211,"name":"Authentication","nameLocations":["1257:14:81"],"nodeType":"IdentifierPath","referencedDeclaration":4385,"src":"1257:14:81"},"id":20212,"nodeType":"InheritanceSpecifier","src":"1257:14:81"}],"canonicalName":"OwnableAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":20208,"nodeType":"StructuredDocumentation","src":"503:705:81","text":" @notice OwnableAuthentication is a contract that combines ownership management with authentication.\n @dev Use it to pre-wire admin multisigs upon deployment to a contract that requires permissioned functions to work,\n where the impact of the owner going rogue is minimal. Contract registries, fee burners, and other utility contracts\n are good examples.\n In turn, the pre-configured owner can speed up operations as it can perform any action right after deployment without\n waiting for governance to set up the authorizer, which can take whole weeks.\n On the other hand, governance can always revoke or change the owner at any given time, keeping superior powers\n above the owner."},"fullyImplemented":true,"id":20330,"linearizedBaseContracts":[20330,4385,14,9572,9486,12366],"name":"OwnableAuthentication","nameLocation":"1218:21:81","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":20213,"nodeType":"StructuredDocumentation","src":"1278:39:81","text":"@notice The vault has not been set."},"errorSelector":"c8e28160","id":20215,"name":"VaultNotSet","nameLocation":"1328:11:81","nodeType":"ErrorDefinition","parameters":{"id":20214,"nodeType":"ParameterList","parameters":[],"src":"1339:2:81"},"src":"1322:20:81"},{"constant":false,"functionSelector":"fbfa77cf","id":20218,"mutability":"immutable","name":"vault","nameLocation":"1372:5:81","nodeType":"VariableDeclaration","scope":20330,"src":"1348:29:81","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":20217,"nodeType":"UserDefinedTypeName","pathNode":{"id":20216,"name":"IVault","nameLocations":["1348:6:81"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1348:6:81"},"referencedDeclaration":2545,"src":"1348:6:81","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"public"},{"body":{"id":20262,"nodeType":"Block","src":"1534:121:81","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":20246,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20221,"src":"1556:6:81","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}],"id":20245,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1548:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20244,"name":"address","nodeType":"ElementaryTypeName","src":"1548:7:81","typeDescriptions":{}}},"id":20247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1548:15:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":20250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1575:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":20249,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1567:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20248,"name":"address","nodeType":"ElementaryTypeName","src":"1567:7:81","typeDescriptions":{}}},"id":20251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1567:10:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1548:29:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20257,"nodeType":"IfStatement","src":"1544:80:81","trueBody":{"id":20256,"nodeType":"Block","src":"1579:45:81","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20253,"name":"VaultNotSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20215,"src":"1600:11:81","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":20254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1600:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20255,"nodeType":"RevertStatement","src":"1593:20:81"}]}},{"expression":{"id":20260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20258,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"1634:5:81","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20259,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20221,"src":"1642:6:81","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"src":"1634:14:81","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":20261,"nodeType":"ExpressionStatement","src":"1634:14:81"}]},"id":20263,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":20226,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20223,"src":"1463:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":20227,"kind":"baseConstructorSpecifier","modifierName":{"id":20225,"name":"Ownable","nameLocations":["1455:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":9486,"src":"1455:7:81"},"nodeType":"ModifierInvocation","src":"1455:21:81"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":20237,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1524:4:81","typeDescriptions":{"typeIdentifier":"t_contract$_OwnableAuthentication_$20330","typeString":"contract OwnableAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_OwnableAuthentication_$20330","typeString":"contract OwnableAuthentication"}],"id":20236,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1516:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20235,"name":"address","nodeType":"ElementaryTypeName","src":"1516:7:81","typeDescriptions":{}}},"id":20238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1516:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20234,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1508:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":20233,"name":"uint160","nodeType":"ElementaryTypeName","src":"1508:7:81","typeDescriptions":{}}},"id":20239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1508:22:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":20232,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1500:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":20231,"name":"uint256","nodeType":"ElementaryTypeName","src":"1500:7:81","typeDescriptions":{}}},"id":20240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1500:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20230,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1492:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":20229,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1492:7:81","typeDescriptions":{}}},"id":20241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1492:40:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":20242,"kind":"baseConstructorSpecifier","modifierName":{"id":20228,"name":"Authentication","nameLocations":["1477:14:81"],"nodeType":"IdentifierPath","referencedDeclaration":4385,"src":"1477:14:81"},"nodeType":"ModifierInvocation","src":"1477:56:81"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":20224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20221,"mutability":"mutable","name":"vault_","nameLocation":"1412:6:81","nodeType":"VariableDeclaration","scope":20263,"src":"1405:13:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":20220,"nodeType":"UserDefinedTypeName","pathNode":{"id":20219,"name":"IVault","nameLocations":["1405:6:81"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1405:6:81"},"referencedDeclaration":2545,"src":"1405:6:81","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":20223,"mutability":"mutable","name":"initialOwner","nameLocation":"1436:12:81","nodeType":"VariableDeclaration","scope":20263,"src":"1428:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20222,"name":"address","nodeType":"ElementaryTypeName","src":"1428:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1395:59:81"},"returnParameters":{"id":20243,"nodeType":"ParameterList","parameters":[],"src":"1534:0:81"},"scope":20330,"src":"1384:271:81","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":20274,"nodeType":"Block","src":"1793:45:81","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20270,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"1810:5:81","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":20271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1816:13:81","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":3859,"src":"1810:19:81","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1341_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":20272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1810:21:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"functionReturnParameters":20269,"id":20273,"nodeType":"Return","src":"1803:28:81"}]},"documentation":{"id":20264,"nodeType":"StructuredDocumentation","src":"1661:66:81","text":"@notice Returns the authorizer address according to the Vault."},"functionSelector":"aaabadc5","id":20275,"implemented":true,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"1741:13:81","nodeType":"FunctionDefinition","parameters":{"id":20265,"nodeType":"ParameterList","parameters":[],"src":"1754:2:81"},"returnParameters":{"id":20269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20268,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20275,"src":"1780:11:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"},"typeName":{"id":20267,"nodeType":"UserDefinedTypeName","pathNode":{"id":20266,"name":"IAuthorizer","nameLocations":["1780:11:81"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"1780:11:81"},"referencedDeclaration":1341,"src":"1780:11:81","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"1779:13:81"},"scope":20330,"src":"1732:106:81","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":20297,"nodeType":"Block","src":"2332:208:81","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20283,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2423:3:81","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2427:6:81","memberName":"sender","nodeType":"MemberAccess","src":"2423:10:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":20285,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9406,"src":"2437:5:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":20286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2437:7:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2423:21:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20292,"nodeType":"IfStatement","src":"2419:77:81","trueBody":{"id":20291,"nodeType":"Block","src":"2446:50:81","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20288,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"2467:16:81","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":20289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2467:18:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20290,"nodeType":"RevertStatement","src":"2460:25:81"}]}},{"expression":{"arguments":[{"id":20294,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20278,"src":"2524:8:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20293,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[9547],"referencedDeclaration":9547,"src":"2505:18:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":20295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2505:28:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20296,"nodeType":"ExpressionStatement","src":"2505:28:81"}]},"documentation":{"id":20276,"nodeType":"StructuredDocumentation","src":"1844:411:81","text":" @notice Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\n @dev This allows governance to revoke the owner at any time, preserving control above the owner at all times.\n address(0) is also a valid owner, as governance can simply choose to revoke ownership.\n Ownership can always be forced back to any address later on."},"functionSelector":"a89b1128","id":20298,"implemented":true,"kind":"function","modifiers":[{"id":20281,"kind":"modifierInvocation","modifierName":{"id":20280,"name":"authenticate","nameLocations":["2319:12:81"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"2319:12:81"},"nodeType":"ModifierInvocation","src":"2319:12:81"}],"name":"forceTransferOwnership","nameLocation":"2269:22:81","nodeType":"FunctionDefinition","parameters":{"id":20279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20278,"mutability":"mutable","name":"newOwner","nameLocation":"2300:8:81","nodeType":"VariableDeclaration","scope":20298,"src":"2292:16:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20277,"name":"address","nodeType":"ElementaryTypeName","src":"2292:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2291:18:81"},"returnParameters":{"id":20282,"nodeType":"ParameterList","parameters":[],"src":"2332:0:81"},"scope":20330,"src":"2260:280:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4384],"body":{"id":20328,"nodeType":"Block","src":"2645:283:81","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20308,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20302,"src":"2721:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":20309,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9406,"src":"2729:5:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":20310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2729:7:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2721:15:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20315,"nodeType":"IfStatement","src":"2717:57:81","trueBody":{"id":20314,"nodeType":"Block","src":"2738:36:81","statements":[{"expression":{"hexValue":"74727565","id":20312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2759:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":20307,"id":20313,"nodeType":"Return","src":"2752:11:81"}]}},{"expression":{"arguments":[{"id":20320,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20300,"src":"2891:8:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":20321,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20302,"src":"2901:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":20324,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2915:4:81","typeDescriptions":{"typeIdentifier":"t_contract$_OwnableAuthentication_$20330","typeString":"contract OwnableAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_OwnableAuthentication_$20330","typeString":"contract OwnableAuthentication"}],"id":20323,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2907:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20322,"name":"address","nodeType":"ElementaryTypeName","src":"2907:7:81","typeDescriptions":{}}},"id":20325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2907:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20316,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"2858:5:81","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":20317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2864:13:81","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":3859,"src":"2858:19:81","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1341_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":20318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2858:21:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"id":20319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2880:10:81","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":1340,"src":"2858:32:81","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":20326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2858:63:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":20307,"id":20327,"nodeType":"Return","src":"2851:70:81"}]},"id":20329,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"2555:11:81","nodeType":"FunctionDefinition","overrides":{"id":20304,"nodeType":"OverrideSpecifier","overrides":[],"src":"2621:8:81"},"parameters":{"id":20303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20300,"mutability":"mutable","name":"actionId","nameLocation":"2575:8:81","nodeType":"VariableDeclaration","scope":20329,"src":"2567:16:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20299,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2567:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20302,"mutability":"mutable","name":"user","nameLocation":"2593:4:81","nodeType":"VariableDeclaration","scope":20329,"src":"2585:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20301,"name":"address","nodeType":"ElementaryTypeName","src":"2585:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2566:32:81"},"returnParameters":{"id":20307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20306,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20329,"src":"2639:4:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20305,"name":"bool","nodeType":"ElementaryTypeName","src":"2639:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2638:6:81"},"scope":20330,"src":"2546:382:81","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":20331,"src":"1209:1721:81","usedErrors":[5,9352,9357,20215],"usedEvents":[9363,9501]}],"src":"46:2885:81"},"id":81},"contracts/PoolHelperCommon.sol":{"ast":{"absolutePath":"contracts/PoolHelperCommon.sol","exportedSymbols":{"Arrays":[12304],"EnumerableSet":[17618],"IPoolHelperCommon":[865],"IVault":[2545],"IVaultErrors":[3202],"Math":[14327],"OwnableAuthentication":[20330],"PoolHelperCommon":[21059]},"id":21060,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":20332,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:82"},{"absolutePath":"@openzeppelin/contracts/utils/structs/EnumerableSet.sol","file":"@openzeppelin/contracts/utils/structs/EnumerableSet.sol","id":20333,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21060,"sourceUnit":17619,"src":"72:65:82","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol","id":20335,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21060,"sourceUnit":866,"src":"139:114:82","symbolAliases":[{"foreign":{"id":20334,"name":"IPoolHelperCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":865,"src":"148:17:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":20337,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21060,"sourceUnit":3203,"src":"254:93:82","symbolAliases":[{"foreign":{"id":20336,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"263:12:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":20339,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21060,"sourceUnit":2546,"src":"348:81:82","symbolAliases":[{"foreign":{"id":20338,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"357:6:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/OwnableAuthentication.sol","file":"./OwnableAuthentication.sol","id":20341,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21060,"sourceUnit":20331,"src":"431:68:82","symbolAliases":[{"foreign":{"id":20340,"name":"OwnableAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20330,"src":"440:21:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":20343,"name":"IPoolHelperCommon","nameLocations":["619:17:82"],"nodeType":"IdentifierPath","referencedDeclaration":865,"src":"619:17:82"},"id":20344,"nodeType":"InheritanceSpecifier","src":"619:17:82"},{"baseName":{"id":20345,"name":"OwnableAuthentication","nameLocations":["638:21:82"],"nodeType":"IdentifierPath","referencedDeclaration":20330,"src":"638:21:82"},"id":20346,"nodeType":"InheritanceSpecifier","src":"638:21:82"}],"canonicalName":"PoolHelperCommon","contractDependencies":[],"contractKind":"contract","documentation":{"id":20342,"nodeType":"StructuredDocumentation","src":"501:80:82","text":"@notice Common code for helper functions that operate on a subset of pools."},"fullyImplemented":true,"id":21059,"linearizedBaseContracts":[21059,20330,4385,14,9572,9486,12366,865],"name":"PoolHelperCommon","nameLocation":"599:16:82","nodeType":"ContractDefinition","nodes":[{"global":false,"id":20350,"libraryName":{"id":20347,"name":"EnumerableSet","nameLocations":["672:13:82"],"nodeType":"IdentifierPath","referencedDeclaration":17618,"src":"672:13:82"},"nodeType":"UsingForDirective","src":"666:49:82","typeName":{"id":20349,"nodeType":"UserDefinedTypeName","pathNode":{"id":20348,"name":"EnumerableSet.AddressSet","nameLocations":["690:13:82","704:10:82"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"690:24:82"},"referencedDeclaration":16593,"src":"690:24:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}}},{"constant":false,"id":20353,"mutability":"mutable","name":"_nextPoolSetId","nameLocation":"836:14:82","nodeType":"VariableDeclaration","scope":21059,"src":"820:34:82","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20351,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":20352,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"853:1:82","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"private"},{"constant":false,"id":20357,"mutability":"mutable","name":"_poolSetManagers","nameLocation":"971:16:82","nodeType":"VariableDeclaration","scope":21059,"src":"917:70:82","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":20356,"keyName":"poolSetId","keyNameLocation":"933:9:82","keyType":{"id":20354,"name":"uint256","nodeType":"ElementaryTypeName","src":"925:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"917:45:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueName":"manager","valueNameLocation":"954:7:82","valueType":{"id":20355,"name":"address","nodeType":"ElementaryTypeName","src":"946:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"constant":false,"id":20361,"mutability":"mutable","name":"_poolSetLookup","nameLocation":"1185:14:82","nodeType":"VariableDeclaration","scope":21059,"src":"1131:68:82","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":20360,"keyName":"manager","keyNameLocation":"1147:7:82","keyType":{"id":20358,"name":"address","nodeType":"ElementaryTypeName","src":"1139:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1131:45:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolSetId","valueNameLocation":"1166:9:82","valueType":{"id":20359,"name":"uint256","nodeType":"ElementaryTypeName","src":"1158:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":20366,"mutability":"mutable","name":"_poolSets","nameLocation":"1347:9:82","nodeType":"VariableDeclaration","scope":21059,"src":"1278:78:82","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet)"},"typeName":{"id":20365,"keyName":"poolSetId","keyNameLocation":"1294:9:82","keyType":{"id":20362,"name":"uint256","nodeType":"ElementaryTypeName","src":"1286:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"1278:60:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet)"},"valueName":"pools","valueNameLocation":"1332:5:82","valueType":{"id":20364,"nodeType":"UserDefinedTypeName","pathNode":{"id":20363,"name":"EnumerableSet.AddressSet","nameLocations":["1307:13:82","1321:10:82"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"1307:24:82"},"referencedDeclaration":16593,"src":"1307:24:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}}},"visibility":"private"},{"body":{"id":20375,"nodeType":"Block","src":"1485:58:82","statements":[{"expression":{"arguments":[{"id":20371,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20368,"src":"1515:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20370,"name":"_ensureValidPoolSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21058,"src":"1495:19:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":20372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1495:30:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20373,"nodeType":"ExpressionStatement","src":"1495:30:82"},{"id":20374,"nodeType":"PlaceholderStatement","src":"1535:1:82"}]},"id":20376,"name":"withValidPoolSet","nameLocation":"1449:16:82","nodeType":"ModifierDefinition","parameters":{"id":20369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20368,"mutability":"mutable","name":"poolSetId","nameLocation":"1474:9:82","nodeType":"VariableDeclaration","scope":20376,"src":"1466:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20367,"name":"uint256","nodeType":"ElementaryTypeName","src":"1466:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1465:19:82"},"src":"1440:103:82","virtual":false,"visibility":"internal"},{"body":{"id":20391,"nodeType":"Block","src":"1691:111:82","statements":[{"assignments":[20381],"declarations":[{"constant":false,"id":20381,"mutability":"mutable","name":"poolSetId","nameLocation":"1709:9:82","nodeType":"VariableDeclaration","scope":20391,"src":"1701:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20380,"name":"uint256","nodeType":"ElementaryTypeName","src":"1701:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20384,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":20382,"name":"_getValidPoolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20976,"src":"1721:18:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":20383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1721:20:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1701:40:82"},{"expression":{"arguments":[{"id":20386,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20381,"src":"1768:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20387,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20378,"src":"1779:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20385,"name":"_ensurePoolInSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21027,"src":"1751:16:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address) view"}},"id":20388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1751:33:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20389,"nodeType":"ExpressionStatement","src":"1751:33:82"},{"id":20390,"nodeType":"PlaceholderStatement","src":"1794:1:82"}]},"id":20392,"name":"withValidPoolForSender","nameLocation":"1654:22:82","nodeType":"ModifierDefinition","parameters":{"id":20379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20378,"mutability":"mutable","name":"pool","nameLocation":"1685:4:82","nodeType":"VariableDeclaration","scope":20392,"src":"1677:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20377,"name":"address","nodeType":"ElementaryTypeName","src":"1677:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1676:14:82"},"src":"1645:157:82","virtual":false,"visibility":"internal"},{"body":{"id":20401,"nodeType":"Block","src":"1932:56:82","statements":[{"expression":{"arguments":[{"id":20397,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20394,"src":"1962:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20396,"name":"_ensureValidManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21004,"src":"1942:19:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":20398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1942:28:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20399,"nodeType":"ExpressionStatement","src":"1942:28:82"},{"id":20400,"nodeType":"PlaceholderStatement","src":"1980:1:82"}]},"id":20402,"name":"withValidManager","nameLocation":"1898:16:82","nodeType":"ModifierDefinition","parameters":{"id":20395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20394,"mutability":"mutable","name":"manager","nameLocation":"1923:7:82","nodeType":"VariableDeclaration","scope":20402,"src":"1915:15:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20393,"name":"address","nodeType":"ElementaryTypeName","src":"1915:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1914:17:82"},"src":"1889:99:82","virtual":false,"visibility":"internal"},{"body":{"id":20414,"nodeType":"Block","src":"2085:64:82","statements":[]},"id":20415,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":20410,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20405,"src":"2064:5:82","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},{"id":20411,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20407,"src":"2071:12:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":20412,"kind":"baseConstructorSpecifier","modifierName":{"id":20409,"name":"OwnableAuthentication","nameLocations":["2042:21:82"],"nodeType":"IdentifierPath","referencedDeclaration":20330,"src":"2042:21:82"},"nodeType":"ModifierInvocation","src":"2042:42:82"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":20408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20405,"mutability":"mutable","name":"vault","nameLocation":"2013:5:82","nodeType":"VariableDeclaration","scope":20415,"src":"2006:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":20404,"nodeType":"UserDefinedTypeName","pathNode":{"id":20403,"name":"IVault","nameLocations":["2006:6:82"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"2006:6:82"},"referencedDeclaration":2545,"src":"2006:6:82","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":20407,"mutability":"mutable","name":"initialOwner","nameLocation":"2028:12:82","nodeType":"VariableDeclaration","scope":20415,"src":"2020:20:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20406,"name":"address","nodeType":"ElementaryTypeName","src":"2020:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2005:36:82"},"returnParameters":{"id":20413,"nodeType":"ParameterList","parameters":[],"src":"2085:0:82"},"scope":21059,"src":"1994:155:82","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[758],"body":{"id":20432,"nodeType":"Block","src":"2537:54:82","statements":[{"expression":{"arguments":[{"id":20429,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20418,"src":"2569:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20428,"name":"_createPoolSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20497,"src":"2554:14:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$","typeString":"function (address) returns (uint256)"}},"id":20430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2554:30:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20427,"id":20431,"nodeType":"Return","src":"2547:37:82"}]},"documentation":{"id":20416,"nodeType":"StructuredDocumentation","src":"2368:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"e909c19b","id":20433,"implemented":true,"kind":"function","modifiers":[{"id":20421,"kind":"modifierInvocation","modifierName":{"id":20420,"name":"onlyOwner","nameLocations":["2476:9:82"],"nodeType":"IdentifierPath","referencedDeclaration":9397,"src":"2476:9:82"},"nodeType":"ModifierInvocation","src":"2476:9:82"},{"arguments":[{"id":20423,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20418,"src":"2503:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":20424,"kind":"modifierInvocation","modifierName":{"id":20422,"name":"withValidManager","nameLocations":["2486:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20402,"src":"2486:16:82"},"nodeType":"ModifierInvocation","src":"2486:32:82"}],"name":"createPoolSet","nameLocation":"2415:13:82","nodeType":"FunctionDefinition","parameters":{"id":20419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20418,"mutability":"mutable","name":"initialManager","nameLocation":"2446:14:82","nodeType":"VariableDeclaration","scope":20433,"src":"2438:22:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20417,"name":"address","nodeType":"ElementaryTypeName","src":"2438:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2428:38:82"},"returnParameters":{"id":20427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20426,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20433,"src":"2528:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20425,"name":"uint256","nodeType":"ElementaryTypeName","src":"2528:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2527:9:82"},"scope":21059,"src":"2406:185:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[750],"body":{"id":20466,"nodeType":"Block","src":"2811:153:82","statements":[{"expression":{"id":20453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20449,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20447,"src":"2821:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":20451,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20436,"src":"2848:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20450,"name":"_createPoolSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20497,"src":"2833:14:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$","typeString":"function (address) returns (uint256)"}},"id":20452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2833:30:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2821:42:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20454,"nodeType":"ExpressionStatement","src":"2821:42:82"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20455,"name":"newPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20439,"src":"2878:8:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2887:6:82","memberName":"length","nodeType":"MemberAccess","src":"2878:15:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":20457,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2896:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2878:19:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20465,"nodeType":"IfStatement","src":"2874:84:82","trueBody":{"id":20464,"nodeType":"Block","src":"2899:59:82","statements":[{"expression":{"arguments":[{"id":20460,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20447,"src":"2927:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20461,"name":"newPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20439,"src":"2938:8:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":20459,"name":"addPoolsToSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20699,"src":"2913:13:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (uint256,address[] memory)"}},"id":20462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2913:34:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20463,"nodeType":"ExpressionStatement","src":"2913:34:82"}]}}]},"documentation":{"id":20434,"nodeType":"StructuredDocumentation","src":"2597:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"3e035f9b","id":20467,"implemented":true,"kind":"function","modifiers":[{"id":20442,"kind":"modifierInvocation","modifierName":{"id":20441,"name":"onlyOwner","nameLocations":["2740:9:82"],"nodeType":"IdentifierPath","referencedDeclaration":9397,"src":"2740:9:82"},"nodeType":"ModifierInvocation","src":"2740:9:82"},{"arguments":[{"id":20444,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20436,"src":"2767:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":20445,"kind":"modifierInvocation","modifierName":{"id":20443,"name":"withValidManager","nameLocations":["2750:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20402,"src":"2750:16:82"},"nodeType":"ModifierInvocation","src":"2750:32:82"}],"name":"createPoolSet","nameLocation":"2644:13:82","nodeType":"FunctionDefinition","parameters":{"id":20440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20436,"mutability":"mutable","name":"initialManager","nameLocation":"2675:14:82","nodeType":"VariableDeclaration","scope":20467,"src":"2667:22:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20435,"name":"address","nodeType":"ElementaryTypeName","src":"2667:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20439,"mutability":"mutable","name":"newPools","nameLocation":"2716:8:82","nodeType":"VariableDeclaration","scope":20467,"src":"2699:25:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":20437,"name":"address","nodeType":"ElementaryTypeName","src":"2699:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20438,"nodeType":"ArrayTypeName","src":"2699:9:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2657:73:82"},"returnParameters":{"id":20448,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20447,"mutability":"mutable","name":"poolSetId","nameLocation":"2800:9:82","nodeType":"VariableDeclaration","scope":20467,"src":"2792:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20446,"name":"uint256","nodeType":"ElementaryTypeName","src":"2792:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2791:19:82"},"scope":21059,"src":"2635:329:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20496,"nodeType":"Block","src":"3055:257:82","statements":[{"expression":{"id":20477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20474,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20472,"src":"3065:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3077:16:82","subExpression":{"id":20475,"name":"_nextPoolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20353,"src":"3077:14:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3065:28:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20478,"nodeType":"ExpressionStatement","src":"3065:28:82"},{"expression":{"id":20483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20479,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20357,"src":"3152:16:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20481,"indexExpression":{"id":20480,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20472,"src":"3169:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3152:27:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20482,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20469,"src":"3182:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3152:44:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20484,"nodeType":"ExpressionStatement","src":"3152:44:82"},{"expression":{"id":20489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20485,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20361,"src":"3206:14:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20487,"indexExpression":{"id":20486,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20469,"src":"3221:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3206:30:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20488,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20472,"src":"3239:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3206:42:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20490,"nodeType":"ExpressionStatement","src":"3206:42:82"},{"eventCall":{"arguments":[{"id":20492,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20472,"src":"3279:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20493,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20469,"src":"3290:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20491,"name":"PoolSetCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":674,"src":"3264:14:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":20494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3264:41:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20495,"nodeType":"EmitStatement","src":"3259:46:82"}]},"id":20497,"implemented":true,"kind":"function","modifiers":[],"name":"_createPoolSet","nameLocation":"2979:14:82","nodeType":"FunctionDefinition","parameters":{"id":20470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20469,"mutability":"mutable","name":"initialManager","nameLocation":"3002:14:82","nodeType":"VariableDeclaration","scope":20497,"src":"2994:22:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20468,"name":"address","nodeType":"ElementaryTypeName","src":"2994:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2993:24:82"},"returnParameters":{"id":20473,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20472,"mutability":"mutable","name":"poolSetId","nameLocation":"3044:9:82","nodeType":"VariableDeclaration","scope":20497,"src":"3036:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20471,"name":"uint256","nodeType":"ElementaryTypeName","src":"3036:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3035:19:82"},"scope":21059,"src":"2970:342:82","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[764],"body":{"id":20581,"nodeType":"Block","src":"3446:745:82","statements":[{"assignments":[20512],"declarations":[{"constant":false,"id":20512,"mutability":"mutable","name":"poolSet","nameLocation":"3489:7:82","nodeType":"VariableDeclaration","scope":20581,"src":"3456:40:82","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":20511,"nodeType":"UserDefinedTypeName","pathNode":{"id":20510,"name":"EnumerableSet.AddressSet","nameLocations":["3456:13:82","3470:10:82"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"3456:24:82"},"referencedDeclaration":16593,"src":"3456:24:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"}],"id":20516,"initialValue":{"baseExpression":{"id":20513,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"3499:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20515,"indexExpression":{"id":20514,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20500,"src":"3509:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3499:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3456:63:82"},{"assignments":[20518],"declarations":[{"constant":false,"id":20518,"mutability":"mutable","name":"numPools","nameLocation":"3580:8:82","nodeType":"VariableDeclaration","scope":20581,"src":"3572:16:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20517,"name":"uint256","nodeType":"ElementaryTypeName","src":"3572:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20522,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20519,"name":"poolSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20512,"src":"3591:7:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":20520,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3599:6:82","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":16702,"src":"3591:14:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16593_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":20521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3591:16:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3572:35:82"},{"body":{"id":20548,"nodeType":"Block","src":"3639:216:82","statements":[{"id":20529,"nodeType":"UncheckedBlock","src":"3653:53:82","statements":[{"expression":{"id":20527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":true,"src":"3681:10:82","subExpression":{"id":20526,"name":"numPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20518,"src":"3683:8:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20528,"nodeType":"ExpressionStatement","src":"3681:10:82"}]},{"assignments":[20531],"declarations":[{"constant":false,"id":20531,"mutability":"mutable","name":"pool","nameLocation":"3728:4:82","nodeType":"VariableDeclaration","scope":20548,"src":"3720:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20530,"name":"address","nodeType":"ElementaryTypeName","src":"3720:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":20536,"initialValue":{"arguments":[{"id":20534,"name":"numPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20518,"src":"3746:8:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":20532,"name":"poolSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20512,"src":"3735:7:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":20533,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3743:2:82","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":16729,"src":"3735:10:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16593_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":20535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3735:20:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3720:35:82"},{"eventCall":{"arguments":[{"id":20538,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20531,"src":"3793:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20539,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20500,"src":"3799:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20537,"name":"PoolRemovedFromSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":695,"src":"3774:18:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":20540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3774:35:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20541,"nodeType":"EmitStatement","src":"3769:40:82"},{"expression":{"arguments":[{"id":20545,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20531,"src":"3839:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":20542,"name":"poolSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20512,"src":"3824:7:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":20544,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3832:6:82","memberName":"remove","nodeType":"MemberAccess","referencedDeclaration":16647,"src":"3824:14:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$16593_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":20546,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3824:20:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20547,"nodeType":"ExpressionStatement","src":"3824:20:82"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20523,"name":"numPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20518,"src":"3625:8:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":20524,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3636:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3625:12:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20549,"nodeType":"WhileStatement","src":"3618:237:82"},{"expression":{"id":20553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"3899:27:82","subExpression":{"baseExpression":{"id":20550,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"3906:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20552,"indexExpression":{"id":20551,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20500,"src":"3916:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3906:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20554,"nodeType":"ExpressionStatement","src":"3899:27:82"},{"assignments":[20556],"declarations":[{"constant":false,"id":20556,"mutability":"mutable","name":"manager","nameLocation":"3945:7:82","nodeType":"VariableDeclaration","scope":20581,"src":"3937:15:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20555,"name":"address","nodeType":"ElementaryTypeName","src":"3937:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":20560,"initialValue":{"baseExpression":{"id":20557,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20357,"src":"3955:16:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20559,"indexExpression":{"id":20558,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20500,"src":"3972:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3955:27:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3937:45:82"},{"expression":{"id":20568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20561,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20357,"src":"4055:16:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20563,"indexExpression":{"id":20562,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20500,"src":"4072:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4055:27:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":20566,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4093:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":20565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4085:7:82","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20564,"name":"address","nodeType":"ElementaryTypeName","src":"4085:7:82","typeDescriptions":{}}},"id":20567,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4085:10:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4055:40:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20569,"nodeType":"ExpressionStatement","src":"4055:40:82"},{"expression":{"id":20574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20570,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20361,"src":"4105:14:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20572,"indexExpression":{"id":20571,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20556,"src":"4120:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4105:23:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":20573,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4131:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4105:27:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20575,"nodeType":"ExpressionStatement","src":"4105:27:82"},{"eventCall":{"arguments":[{"id":20577,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20500,"src":"4165:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20578,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20556,"src":"4176:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20576,"name":"PoolSetDestroyed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":681,"src":"4148:16:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":20579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4148:36:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20580,"nodeType":"EmitStatement","src":"4143:41:82"}]},"documentation":{"id":20498,"nodeType":"StructuredDocumentation","src":"3318:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"7c1ec460","id":20582,"implemented":true,"kind":"function","modifiers":[{"id":20503,"kind":"modifierInvocation","modifierName":{"id":20502,"name":"onlyOwner","nameLocations":["3408:9:82"],"nodeType":"IdentifierPath","referencedDeclaration":9397,"src":"3408:9:82"},"nodeType":"ModifierInvocation","src":"3408:9:82"},{"arguments":[{"id":20505,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20500,"src":"3435:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20506,"kind":"modifierInvocation","modifierName":{"id":20504,"name":"withValidPoolSet","nameLocations":["3418:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20376,"src":"3418:16:82"},"nodeType":"ModifierInvocation","src":"3418:27:82"}],"name":"destroyPoolSet","nameLocation":"3365:14:82","nodeType":"FunctionDefinition","parameters":{"id":20501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20500,"mutability":"mutable","name":"poolSetId","nameLocation":"3388:9:82","nodeType":"VariableDeclaration","scope":20582,"src":"3380:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20499,"name":"uint256","nodeType":"ElementaryTypeName","src":"3380:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3379:19:82"},"returnParameters":{"id":20507,"nodeType":"ParameterList","parameters":[],"src":"3446:0:82"},"scope":21059,"src":"3356:835:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[770],"body":{"id":20622,"nodeType":"Block","src":"4327:332:82","statements":[{"assignments":[20592],"declarations":[{"constant":false,"id":20592,"mutability":"mutable","name":"poolSetId","nameLocation":"4345:9:82","nodeType":"VariableDeclaration","scope":20622,"src":"4337:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20591,"name":"uint256","nodeType":"ElementaryTypeName","src":"4337:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20595,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":20593,"name":"_getValidPoolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20976,"src":"4357:18:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":20594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4357:20:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4337:40:82"},{"expression":{"id":20600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20596,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20357,"src":"4388:16:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20598,"indexExpression":{"id":20597,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20592,"src":"4405:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4388:27:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20599,"name":"newManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20585,"src":"4418:10:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4388:40:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20601,"nodeType":"ExpressionStatement","src":"4388:40:82"},{"expression":{"id":20607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20602,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20361,"src":"4496:14:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20605,"indexExpression":{"expression":{"id":20603,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4511:3:82","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4515:6:82","memberName":"sender","nodeType":"MemberAccess","src":"4511:10:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4496:26:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":20606,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4525:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4496:30:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20608,"nodeType":"ExpressionStatement","src":"4496:30:82"},{"expression":{"id":20613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20609,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20361,"src":"4536:14:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20611,"indexExpression":{"id":20610,"name":"newManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20585,"src":"4551:10:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4536:26:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20612,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20592,"src":"4565:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4536:38:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20614,"nodeType":"ExpressionStatement","src":"4536:38:82"},{"eventCall":{"arguments":[{"id":20616,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20592,"src":"4618:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20617,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4629:3:82","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4633:6:82","memberName":"sender","nodeType":"MemberAccess","src":"4629:10:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20619,"name":"newManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20585,"src":"4641:10:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20615,"name":"PoolSetOwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":704,"src":"4590:27:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (uint256,address,address)"}},"id":20620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4590:62:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20621,"nodeType":"EmitStatement","src":"4585:67:82"}]},"documentation":{"id":20583,"nodeType":"StructuredDocumentation","src":"4197:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"3700f987","id":20623,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":20588,"name":"newManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20585,"src":"4315:10:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":20589,"kind":"modifierInvocation","modifierName":{"id":20587,"name":"withValidManager","nameLocations":["4298:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20402,"src":"4298:16:82"},"nodeType":"ModifierInvocation","src":"4298:28:82"}],"name":"transferPoolSetOwnership","nameLocation":"4244:24:82","nodeType":"FunctionDefinition","parameters":{"id":20586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20585,"mutability":"mutable","name":"newManager","nameLocation":"4277:10:82","nodeType":"VariableDeclaration","scope":20623,"src":"4269:18:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20584,"name":"address","nodeType":"ElementaryTypeName","src":"4269:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4268:20:82"},"returnParameters":{"id":20590,"nodeType":"ParameterList","parameters":[],"src":"4327:0:82"},"scope":21059,"src":"4235:424:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[779],"body":{"id":20698,"nodeType":"Block","src":"5028:630:82","statements":[{"assignments":[20638],"declarations":[{"constant":false,"id":20638,"mutability":"mutable","name":"numPools","nameLocation":"5046:8:82","nodeType":"VariableDeclaration","scope":20698,"src":"5038:16:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20637,"name":"uint256","nodeType":"ElementaryTypeName","src":"5038:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20641,"initialValue":{"expression":{"id":20639,"name":"newPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20629,"src":"5057:8:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5066:6:82","memberName":"length","nodeType":"MemberAccess","src":"5057:15:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5038:34:82"},{"body":{"id":20696,"nodeType":"Block","src":"5122:530:82","statements":[{"assignments":[20653],"declarations":[{"constant":false,"id":20653,"mutability":"mutable","name":"pool","nameLocation":"5144:4:82","nodeType":"VariableDeclaration","scope":20696,"src":"5136:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20652,"name":"address","nodeType":"ElementaryTypeName","src":"5136:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":20657,"initialValue":{"baseExpression":{"id":20654,"name":"newPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20629,"src":"5151:8:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20656,"indexExpression":{"id":20655,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20643,"src":"5160:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5151:11:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5136:26:82"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":20660,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20653,"src":"5255:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":20658,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"5232:5:82","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":20659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5238:16:82","memberName":"isPoolRegistered","nodeType":"MemberAccess","referencedDeclaration":3540,"src":"5232:22:82","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":20661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5232:28:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":20662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5264:5:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"5232:37:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20671,"nodeType":"IfStatement","src":"5228:119:82","trueBody":{"id":20670,"nodeType":"Block","src":"5271:76:82","statements":[{"errorCall":{"arguments":[{"id":20667,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20653,"src":"5327:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":20664,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"5296:12:82","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3202_$","typeString":"type(contract IVaultErrors)"}},"id":20666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5309:17:82","memberName":"PoolNotRegistered","nodeType":"MemberAccess","referencedDeclaration":2857,"src":"5296:30:82","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":20668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5296:36:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20669,"nodeType":"RevertStatement","src":"5289:43:82"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":20676,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20653,"src":"5390:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":20672,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"5365:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20674,"indexExpression":{"id":20673,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20626,"src":"5375:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5365:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20675,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5386:3:82","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":16620,"src":"5365:24:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$16593_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":20677,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5365:30:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":20678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5399:5:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"5365:39:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20686,"nodeType":"IfStatement","src":"5361:118:82","trueBody":{"id":20685,"nodeType":"Block","src":"5406:73:82","statements":[{"errorCall":{"arguments":[{"id":20681,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20653,"src":"5448:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20682,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20626,"src":"5454:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20680,"name":"PoolAlreadyInSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":711,"src":"5431:16:82","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256) pure returns (error)"}},"id":20683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5431:33:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20684,"nodeType":"RevertStatement","src":"5424:40:82"}]}},{"expression":{"arguments":[{"id":20688,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20653,"src":"5585:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20687,"name":"_validatePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21034,"src":"5571:13:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":20689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5571:19:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20690,"nodeType":"ExpressionStatement","src":"5571:19:82"},{"eventCall":{"arguments":[{"id":20692,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20653,"src":"5625:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20693,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20626,"src":"5631:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20691,"name":"PoolAddedToSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":688,"src":"5610:14:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":20694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5610:31:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20695,"nodeType":"EmitStatement","src":"5605:36:82"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20646,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20643,"src":"5103:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":20647,"name":"numPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20638,"src":"5107:8:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5103:12:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20697,"initializationExpression":{"assignments":[20643],"declarations":[{"constant":false,"id":20643,"mutability":"mutable","name":"i","nameLocation":"5096:1:82","nodeType":"VariableDeclaration","scope":20697,"src":"5088:9:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20642,"name":"uint256","nodeType":"ElementaryTypeName","src":"5088:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20645,"initialValue":{"hexValue":"30","id":20644,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5100:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5088:13:82"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":20650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5117:3:82","subExpression":{"id":20649,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20643,"src":"5117:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20651,"nodeType":"ExpressionStatement","src":"5117:3:82"},"nodeType":"ForStatement","src":"5083:569:82"}]},"documentation":{"id":20624,"nodeType":"StructuredDocumentation","src":"4876:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"ebf3a8d0","id":20699,"implemented":true,"kind":"function","modifiers":[{"id":20632,"kind":"modifierInvocation","modifierName":{"id":20631,"name":"onlyOwner","nameLocations":["4990:9:82"],"nodeType":"IdentifierPath","referencedDeclaration":9397,"src":"4990:9:82"},"nodeType":"ModifierInvocation","src":"4990:9:82"},{"arguments":[{"id":20634,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20626,"src":"5017:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20635,"kind":"modifierInvocation","modifierName":{"id":20633,"name":"withValidPoolSet","nameLocations":["5000:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20376,"src":"5000:16:82"},"nodeType":"ModifierInvocation","src":"5000:27:82"}],"name":"addPoolsToSet","nameLocation":"4923:13:82","nodeType":"FunctionDefinition","parameters":{"id":20630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20626,"mutability":"mutable","name":"poolSetId","nameLocation":"4945:9:82","nodeType":"VariableDeclaration","scope":20699,"src":"4937:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20625,"name":"uint256","nodeType":"ElementaryTypeName","src":"4937:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20629,"mutability":"mutable","name":"newPools","nameLocation":"4973:8:82","nodeType":"VariableDeclaration","scope":20699,"src":"4956:25:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":20627,"name":"address","nodeType":"ElementaryTypeName","src":"4956:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20628,"nodeType":"ArrayTypeName","src":"4956:9:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4936:46:82"},"returnParameters":{"id":20636,"nodeType":"ParameterList","parameters":[],"src":"5028:0:82"},"scope":21059,"src":"4914:744:82","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[788],"body":{"id":20756,"nodeType":"Block","src":"5840:331:82","statements":[{"assignments":[20714],"declarations":[{"constant":false,"id":20714,"mutability":"mutable","name":"numPools","nameLocation":"5858:8:82","nodeType":"VariableDeclaration","scope":20756,"src":"5850:16:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20713,"name":"uint256","nodeType":"ElementaryTypeName","src":"5850:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20717,"initialValue":{"expression":{"id":20715,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20705,"src":"5869:5:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5875:6:82","memberName":"length","nodeType":"MemberAccess","src":"5869:12:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5850:31:82"},{"body":{"id":20754,"nodeType":"Block","src":"5931:234:82","statements":[{"assignments":[20729],"declarations":[{"constant":false,"id":20729,"mutability":"mutable","name":"pool","nameLocation":"5953:4:82","nodeType":"VariableDeclaration","scope":20754,"src":"5945:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20728,"name":"address","nodeType":"ElementaryTypeName","src":"5945:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":20733,"initialValue":{"baseExpression":{"id":20730,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20705,"src":"5960:5:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20732,"indexExpression":{"id":20731,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20719,"src":"5966:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5960:8:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5945:23:82"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":20738,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20729,"src":"6015:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":20734,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"5987:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20736,"indexExpression":{"id":20735,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20702,"src":"5997:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5987:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20737,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6008:6:82","memberName":"remove","nodeType":"MemberAccess","referencedDeclaration":16647,"src":"5987:27:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$16593_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":20739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5987:33:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":20740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6024:5:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"5987:42:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20748,"nodeType":"IfStatement","src":"5983:117:82","trueBody":{"id":20747,"nodeType":"Block","src":"6031:69:82","statements":[{"errorCall":{"arguments":[{"id":20743,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20729,"src":"6069:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20744,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20702,"src":"6075:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20742,"name":"PoolNotInSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":718,"src":"6056:12:82","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256) pure returns (error)"}},"id":20745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6056:29:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20746,"nodeType":"RevertStatement","src":"6049:36:82"}]}},{"eventCall":{"arguments":[{"id":20750,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20729,"src":"6138:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20751,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20702,"src":"6144:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20749,"name":"PoolRemovedFromSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":695,"src":"6119:18:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":20752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6119:35:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20753,"nodeType":"EmitStatement","src":"6114:40:82"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20722,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20719,"src":"5912:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":20723,"name":"numPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20714,"src":"5916:8:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5912:12:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20755,"initializationExpression":{"assignments":[20719],"declarations":[{"constant":false,"id":20719,"mutability":"mutable","name":"i","nameLocation":"5905:1:82","nodeType":"VariableDeclaration","scope":20755,"src":"5897:9:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20718,"name":"uint256","nodeType":"ElementaryTypeName","src":"5897:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20721,"initialValue":{"hexValue":"30","id":20720,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5909:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5897:13:82"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":20726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5926:3:82","subExpression":{"id":20725,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20719,"src":"5926:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20727,"nodeType":"ExpressionStatement","src":"5926:3:82"},"nodeType":"ForStatement","src":"5892:273:82"}]},"documentation":{"id":20700,"nodeType":"StructuredDocumentation","src":"5664:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"2da55a1d","id":20757,"implemented":true,"kind":"function","modifiers":[{"id":20708,"kind":"modifierInvocation","modifierName":{"id":20707,"name":"onlyOwner","nameLocations":["5802:9:82"],"nodeType":"IdentifierPath","referencedDeclaration":9397,"src":"5802:9:82"},"nodeType":"ModifierInvocation","src":"5802:9:82"},{"arguments":[{"id":20710,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20702,"src":"5829:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20711,"kind":"modifierInvocation","modifierName":{"id":20709,"name":"withValidPoolSet","nameLocations":["5812:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20376,"src":"5812:16:82"},"nodeType":"ModifierInvocation","src":"5812:27:82"}],"name":"removePoolsFromSet","nameLocation":"5711:18:82","nodeType":"FunctionDefinition","parameters":{"id":20706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20702,"mutability":"mutable","name":"poolSetId","nameLocation":"5747:9:82","nodeType":"VariableDeclaration","scope":20757,"src":"5739:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20701,"name":"uint256","nodeType":"ElementaryTypeName","src":"5739:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20705,"mutability":"mutable","name":"pools","nameLocation":"5783:5:82","nodeType":"VariableDeclaration","scope":20757,"src":"5766:22:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":20703,"name":"address","nodeType":"ElementaryTypeName","src":"5766:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20704,"nodeType":"ArrayTypeName","src":"5766:9:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5729:65:82"},"returnParameters":{"id":20712,"nodeType":"ParameterList","parameters":[],"src":"5840:0:82"},"scope":21059,"src":"5702:469:82","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[794],"body":{"id":20768,"nodeType":"Block","src":"6517:50:82","statements":[{"expression":{"baseExpression":{"id":20763,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20361,"src":"6534:14:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20766,"indexExpression":{"expression":{"id":20764,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6549:3:82","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6553:6:82","memberName":"sender","nodeType":"MemberAccess","src":"6549:10:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6534:26:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20762,"id":20767,"nodeType":"Return","src":"6527:33:82"}]},"documentation":{"id":20758,"nodeType":"StructuredDocumentation","src":"6416:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"ce998aba","id":20769,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolSetIdForCaller","nameLocation":"6463:21:82","nodeType":"FunctionDefinition","parameters":{"id":20759,"nodeType":"ParameterList","parameters":[],"src":"6484:2:82"},"returnParameters":{"id":20762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20761,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20769,"src":"6508:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20760,"name":"uint256","nodeType":"ElementaryTypeName","src":"6508:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6507:9:82"},"scope":21059,"src":"6454:113:82","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[802],"body":{"id":20781,"nodeType":"Block","src":"6690:47:82","statements":[{"expression":{"baseExpression":{"id":20777,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20361,"src":"6707:14:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20779,"indexExpression":{"id":20778,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20772,"src":"6722:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6707:23:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20776,"id":20780,"nodeType":"Return","src":"6700:30:82"}]},"documentation":{"id":20770,"nodeType":"StructuredDocumentation","src":"6573:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"25c427ed","id":20782,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolSetIdForManager","nameLocation":"6620:22:82","nodeType":"FunctionDefinition","parameters":{"id":20773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20772,"mutability":"mutable","name":"manager","nameLocation":"6651:7:82","nodeType":"VariableDeclaration","scope":20782,"src":"6643:15:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20771,"name":"address","nodeType":"ElementaryTypeName","src":"6643:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6642:17:82"},"returnParameters":{"id":20776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20775,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20782,"src":"6681:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20774,"name":"uint256","nodeType":"ElementaryTypeName","src":"6681:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6680:9:82"},"scope":21059,"src":"6611:126:82","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[810],"body":{"id":20799,"nodeType":"Block","src":"6888:53:82","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":20793,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"6905:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20795,"indexExpression":{"id":20794,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20785,"src":"6915:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6905:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20796,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6926:6:82","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":16702,"src":"6905:27:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16593_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":20797,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6905:29:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20792,"id":20798,"nodeType":"Return","src":"6898:36:82"}]},"documentation":{"id":20783,"nodeType":"StructuredDocumentation","src":"6743:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"62d53462","id":20800,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":20788,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20785,"src":"6859:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20789,"kind":"modifierInvocation","modifierName":{"id":20787,"name":"withValidPoolSet","nameLocations":["6842:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20376,"src":"6842:16:82"},"nodeType":"ModifierInvocation","src":"6842:27:82"}],"name":"getPoolCountForSet","nameLocation":"6790:18:82","nodeType":"FunctionDefinition","parameters":{"id":20786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20785,"mutability":"mutable","name":"poolSetId","nameLocation":"6817:9:82","nodeType":"VariableDeclaration","scope":20800,"src":"6809:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20784,"name":"uint256","nodeType":"ElementaryTypeName","src":"6809:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6808:19:82"},"returnParameters":{"id":20792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20791,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20800,"src":"6879:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20790,"name":"uint256","nodeType":"ElementaryTypeName","src":"6879:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6878:9:82"},"scope":21059,"src":"6781:160:82","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[818],"body":{"id":20817,"nodeType":"Block","src":"7059:65:82","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":20808,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20357,"src":"7076:16:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20810,"indexExpression":{"id":20809,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20803,"src":"7093:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7076:27:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":20813,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7115:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":20812,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7107:7:82","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20811,"name":"address","nodeType":"ElementaryTypeName","src":"7107:7:82","typeDescriptions":{}}},"id":20814,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7107:10:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7076:41:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":20807,"id":20816,"nodeType":"Return","src":"7069:48:82"}]},"documentation":{"id":20801,"nodeType":"StructuredDocumentation","src":"6947:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"255dae41","id":20818,"implemented":true,"kind":"function","modifiers":[],"name":"isValidPoolSetId","nameLocation":"6994:16:82","nodeType":"FunctionDefinition","parameters":{"id":20804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20803,"mutability":"mutable","name":"poolSetId","nameLocation":"7019:9:82","nodeType":"VariableDeclaration","scope":20818,"src":"7011:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20802,"name":"uint256","nodeType":"ElementaryTypeName","src":"7011:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7010:19:82"},"returnParameters":{"id":20807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20806,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20818,"src":"7053:4:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20805,"name":"bool","nodeType":"ElementaryTypeName","src":"7053:4:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7052:6:82"},"scope":21059,"src":"6985:139:82","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[828],"body":{"id":20838,"nodeType":"Block","src":"7279:59:82","statements":[{"expression":{"arguments":[{"id":20835,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20821,"src":"7326:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":20831,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"7296:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20833,"indexExpression":{"id":20832,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20823,"src":"7306:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7296:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20834,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7317:8:82","memberName":"contains","nodeType":"MemberAccess","referencedDeclaration":16687,"src":"7296:29:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16593_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"}},"id":20836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7296:35:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":20830,"id":20837,"nodeType":"Return","src":"7289:42:82"}]},"documentation":{"id":20819,"nodeType":"StructuredDocumentation","src":"7130:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"182551da","id":20839,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":20826,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20823,"src":"7253:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20827,"kind":"modifierInvocation","modifierName":{"id":20825,"name":"withValidPoolSet","nameLocations":["7236:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20376,"src":"7236:16:82"},"nodeType":"ModifierInvocation","src":"7236:27:82"}],"name":"isPoolInSet","nameLocation":"7177:11:82","nodeType":"FunctionDefinition","parameters":{"id":20824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20821,"mutability":"mutable","name":"pool","nameLocation":"7197:4:82","nodeType":"VariableDeclaration","scope":20839,"src":"7189:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20820,"name":"address","nodeType":"ElementaryTypeName","src":"7189:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20823,"mutability":"mutable","name":"poolSetId","nameLocation":"7211:9:82","nodeType":"VariableDeclaration","scope":20839,"src":"7203:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20822,"name":"uint256","nodeType":"ElementaryTypeName","src":"7203:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7188:33:82"},"returnParameters":{"id":20830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20829,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20839,"src":"7273:4:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20828,"name":"bool","nodeType":"ElementaryTypeName","src":"7273:4:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7272:6:82"},"scope":21059,"src":"7168:170:82","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[837],"body":{"id":20857,"nodeType":"Block","src":"7516:53:82","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":20851,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"7533:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20853,"indexExpression":{"id":20852,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20842,"src":"7543:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7533:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20854,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7554:6:82","memberName":"values","nodeType":"MemberAccess","referencedDeclaration":16759,"src":"7533:27:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16593_storage_ptr_$returns$_t_array$_t_address_$dyn_memory_ptr_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (address[] memory)"}},"id":20855,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7533:29:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":20850,"id":20856,"nodeType":"Return","src":"7526:36:82"}]},"documentation":{"id":20840,"nodeType":"StructuredDocumentation","src":"7344:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"94fc4058","id":20858,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":20845,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20842,"src":"7472:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20846,"kind":"modifierInvocation","modifierName":{"id":20844,"name":"withValidPoolSet","nameLocations":["7455:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20376,"src":"7455:16:82"},"nodeType":"ModifierInvocation","src":"7455:27:82"}],"name":"getAllPoolsInSet","nameLocation":"7391:16:82","nodeType":"FunctionDefinition","parameters":{"id":20843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20842,"mutability":"mutable","name":"poolSetId","nameLocation":"7425:9:82","nodeType":"VariableDeclaration","scope":20858,"src":"7417:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20841,"name":"uint256","nodeType":"ElementaryTypeName","src":"7417:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7407:33:82"},"returnParameters":{"id":20850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20849,"mutability":"mutable","name":"pools","nameLocation":"7509:5:82","nodeType":"VariableDeclaration","scope":20858,"src":"7492:22:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":20847,"name":"address","nodeType":"ElementaryTypeName","src":"7492:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20848,"nodeType":"ArrayTypeName","src":"7492:9:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"7491:24:82"},"scope":21059,"src":"7382:187:82","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[850],"body":{"id":20934,"nodeType":"Block","src":"7784:349:82","statements":[{"assignments":[20875],"declarations":[{"constant":false,"id":20875,"mutability":"mutable","name":"spanLength","nameLocation":"7802:10:82","nodeType":"VariableDeclaration","scope":20934,"src":"7794:18:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20874,"name":"uint256","nodeType":"ElementaryTypeName","src":"7794:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20881,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":20876,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"7815:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20878,"indexExpression":{"id":20877,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20861,"src":"7825:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7815:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20879,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7836:6:82","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":16702,"src":"7815:27:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16593_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":20880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7815:29:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7794:50:82"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20882,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20863,"src":"7859:4:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":20883,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20865,"src":"7866:2:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7859:9:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20885,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20865,"src":"7872:2:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":20886,"name":"spanLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20875,"src":"7877:10:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7872:15:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7859:28:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20889,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20863,"src":"7891:4:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":20890,"name":"spanLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20875,"src":"7899:10:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7891:18:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7859:50:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20898,"nodeType":"IfStatement","src":"7855:115:82","trueBody":{"id":20897,"nodeType":"Block","src":"7911:59:82","statements":[{"errorCall":{"arguments":[{"id":20894,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20861,"src":"7949:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20893,"name":"IndexOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":739,"src":"7932:16:82","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":20895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7932:27:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20896,"nodeType":"RevertStatement","src":"7925:34:82"}]}},{"expression":{"id":20907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20899,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20872,"src":"7980:5:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20903,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20865,"src":"8002:2:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":20904,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20863,"src":"8007:4:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8002:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20902,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"7988:13:82","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":20900,"name":"address","nodeType":"ElementaryTypeName","src":"7992:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20901,"nodeType":"ArrayTypeName","src":"7992:9:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":20906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7988:24:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"7980:32:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20908,"nodeType":"ExpressionStatement","src":"7980:32:82"},{"body":{"id":20932,"nodeType":"Block","src":"8058:69:82","statements":[{"expression":{"id":20930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20919,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20872,"src":"8072:5:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20923,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20920,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20910,"src":"8078:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":20921,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20863,"src":"8082:4:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8078:8:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8072:15:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":20928,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20910,"src":"8114:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":20924,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"8090:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20926,"indexExpression":{"id":20925,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20861,"src":"8100:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8090:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20927,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8111:2:82","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":16729,"src":"8090:23:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16593_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":20929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8090:26:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8072:44:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20931,"nodeType":"ExpressionStatement","src":"8072:44:82"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20913,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20910,"src":"8045:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":20914,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20865,"src":"8049:2:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8045:6:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20933,"initializationExpression":{"assignments":[20910],"declarations":[{"constant":false,"id":20910,"mutability":"mutable","name":"i","nameLocation":"8035:1:82","nodeType":"VariableDeclaration","scope":20933,"src":"8027:9:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20909,"name":"uint256","nodeType":"ElementaryTypeName","src":"8027:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20912,"initialValue":{"id":20911,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20863,"src":"8039:4:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8027:16:82"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":20917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8053:3:82","subExpression":{"id":20916,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20910,"src":"8053:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20918,"nodeType":"ExpressionStatement","src":"8053:3:82"},"nodeType":"ForStatement","src":"8022:105:82"}]},"documentation":{"id":20859,"nodeType":"StructuredDocumentation","src":"7575:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"8c60ebd0","id":20935,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":20868,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20861,"src":"7740:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20869,"kind":"modifierInvocation","modifierName":{"id":20867,"name":"withValidPoolSet","nameLocations":["7723:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20376,"src":"7723:16:82"},"nodeType":"ModifierInvocation","src":"7723:27:82"}],"name":"getPoolsInSet","nameLocation":"7622:13:82","nodeType":"FunctionDefinition","parameters":{"id":20866,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20861,"mutability":"mutable","name":"poolSetId","nameLocation":"7653:9:82","nodeType":"VariableDeclaration","scope":20935,"src":"7645:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20860,"name":"uint256","nodeType":"ElementaryTypeName","src":"7645:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20863,"mutability":"mutable","name":"from","nameLocation":"7680:4:82","nodeType":"VariableDeclaration","scope":20935,"src":"7672:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20862,"name":"uint256","nodeType":"ElementaryTypeName","src":"7672:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20865,"mutability":"mutable","name":"to","nameLocation":"7702:2:82","nodeType":"VariableDeclaration","scope":20935,"src":"7694:10:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20864,"name":"uint256","nodeType":"ElementaryTypeName","src":"7694:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7635:75:82"},"returnParameters":{"id":20873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20872,"mutability":"mutable","name":"pools","nameLocation":"7777:5:82","nodeType":"VariableDeclaration","scope":20935,"src":"7760:22:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":20870,"name":"address","nodeType":"ElementaryTypeName","src":"7760:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20871,"nodeType":"ArrayTypeName","src":"7760:9:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"7759:24:82"},"scope":21059,"src":"7613:520:82","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[856],"body":{"id":20943,"nodeType":"Block","src":"8237:38:82","statements":[{"expression":{"id":20941,"name":"_nextPoolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20353,"src":"8254:14:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20940,"id":20942,"nodeType":"Return","src":"8247:21:82"}]},"documentation":{"id":20936,"nodeType":"StructuredDocumentation","src":"8139:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"c482e822","id":20944,"implemented":true,"kind":"function","modifiers":[],"name":"getNextPoolSetId","nameLocation":"8186:16:82","nodeType":"FunctionDefinition","parameters":{"id":20937,"nodeType":"ParameterList","parameters":[],"src":"8202:2:82"},"returnParameters":{"id":20940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20939,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20944,"src":"8228:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20938,"name":"uint256","nodeType":"ElementaryTypeName","src":"8228:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8227:9:82"},"scope":21059,"src":"8177:98:82","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[864],"body":{"id":20956,"nodeType":"Block","src":"8400:51:82","statements":[{"expression":{"baseExpression":{"id":20952,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20357,"src":"8417:16:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20954,"indexExpression":{"id":20953,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20947,"src":"8434:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8417:27:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":20951,"id":20955,"nodeType":"Return","src":"8410:34:82"}]},"documentation":{"id":20945,"nodeType":"StructuredDocumentation","src":"8281:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"f167a1e6","id":20957,"implemented":true,"kind":"function","modifiers":[],"name":"getManagerForPoolSet","nameLocation":"8328:20:82","nodeType":"FunctionDefinition","parameters":{"id":20948,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20947,"mutability":"mutable","name":"poolSetId","nameLocation":"8357:9:82","nodeType":"VariableDeclaration","scope":20957,"src":"8349:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20946,"name":"uint256","nodeType":"ElementaryTypeName","src":"8349:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8348:19:82"},"returnParameters":{"id":20951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20950,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20957,"src":"8391:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20949,"name":"address","nodeType":"ElementaryTypeName","src":"8391:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8390:9:82"},"scope":21059,"src":"8319:132:82","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":20975,"nodeType":"Block","src":"8830:141:82","statements":[{"expression":{"id":20965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20962,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20960,"src":"8840:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":20963,"name":"getPoolSetIdForCaller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20769,"src":"8852:21:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":20964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8852:23:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8840:35:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20966,"nodeType":"ExpressionStatement","src":"8840:35:82"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20967,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20960,"src":"8890:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":20968,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8903:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8890:14:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20974,"nodeType":"IfStatement","src":"8886:79:82","trueBody":{"id":20973,"nodeType":"Block","src":"8906:59:82","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20970,"name":"SenderIsNotPoolSetManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":734,"src":"8927:25:82","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":20971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8927:27:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20972,"nodeType":"RevertStatement","src":"8920:34:82"}]}}]},"id":20976,"implemented":true,"kind":"function","modifiers":[],"name":"_getValidPoolSetId","nameLocation":"8767:18:82","nodeType":"FunctionDefinition","parameters":{"id":20958,"nodeType":"ParameterList","parameters":[],"src":"8785:2:82"},"returnParameters":{"id":20961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20960,"mutability":"mutable","name":"poolSetId","nameLocation":"8819:9:82","nodeType":"VariableDeclaration","scope":20976,"src":"8811:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20959,"name":"uint256","nodeType":"ElementaryTypeName","src":"8811:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8810:19:82"},"scope":21059,"src":"8758:213:82","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":21003,"nodeType":"Block","src":"9037:206:82","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20981,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20978,"src":"9051:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":20984,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9070:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":20983,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9062:7:82","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20982,"name":"address","nodeType":"ElementaryTypeName","src":"9062:7:82","typeDescriptions":{}}},"id":20985,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9062:10:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9051:21:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20991,"nodeType":"IfStatement","src":"9047:82:82","trueBody":{"id":20990,"nodeType":"Block","src":"9074:55:82","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20987,"name":"InvalidPoolSetManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"9095:21:82","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":20988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9095:23:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20989,"nodeType":"RevertStatement","src":"9088:30:82"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":20992,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20361,"src":"9143:14:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20994,"indexExpression":{"id":20993,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20978,"src":"9158:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9143:23:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":20995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9170:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9143:28:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21002,"nodeType":"IfStatement","src":"9139:98:82","trueBody":{"id":21001,"nodeType":"Block","src":"9173:64:82","statements":[{"errorCall":{"arguments":[{"id":20998,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20978,"src":"9218:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20997,"name":"PoolSetManagerNotUnique","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":731,"src":"9194:23:82","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":20999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9194:32:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":21000,"nodeType":"RevertStatement","src":"9187:39:82"}]}}]},"id":21004,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidManager","nameLocation":"8986:19:82","nodeType":"FunctionDefinition","parameters":{"id":20979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20978,"mutability":"mutable","name":"manager","nameLocation":"9014:7:82","nodeType":"VariableDeclaration","scope":21004,"src":"9006:15:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20977,"name":"address","nodeType":"ElementaryTypeName","src":"9006:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9005:17:82"},"returnParameters":{"id":20980,"nodeType":"ParameterList","parameters":[],"src":"9037:0:82"},"scope":21059,"src":"8977:266:82","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":21026,"nodeType":"Block","src":"9322:127:82","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":21015,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21008,"src":"9366:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":21011,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"9336:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":21013,"indexExpression":{"id":21012,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21006,"src":"9346:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9336:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":21014,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9357:8:82","memberName":"contains","nodeType":"MemberAccess","referencedDeclaration":16687,"src":"9336:29:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16593_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"}},"id":21016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9336:35:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":21017,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9375:5:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"9336:44:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21025,"nodeType":"IfStatement","src":"9332:111:82","trueBody":{"id":21024,"nodeType":"Block","src":"9382:61:82","statements":[{"errorCall":{"arguments":[{"id":21020,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21008,"src":"9416:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21021,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21006,"src":"9422:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21019,"name":"PoolNotInSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":718,"src":"9403:12:82","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256) pure returns (error)"}},"id":21022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9403:29:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":21023,"nodeType":"RevertStatement","src":"9396:36:82"}]}}]},"id":21027,"implemented":true,"kind":"function","modifiers":[],"name":"_ensurePoolInSet","nameLocation":"9258:16:82","nodeType":"FunctionDefinition","parameters":{"id":21009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21006,"mutability":"mutable","name":"poolSetId","nameLocation":"9283:9:82","nodeType":"VariableDeclaration","scope":21027,"src":"9275:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21005,"name":"uint256","nodeType":"ElementaryTypeName","src":"9275:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21008,"mutability":"mutable","name":"pool","nameLocation":"9302:4:82","nodeType":"VariableDeclaration","scope":21027,"src":"9294:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21007,"name":"address","nodeType":"ElementaryTypeName","src":"9294:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9274:33:82"},"returnParameters":{"id":21010,"nodeType":"ParameterList","parameters":[],"src":"9322:0:82"},"scope":21059,"src":"9249:200:82","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":21033,"nodeType":"Block","src":"9607:64:82","statements":[]},"documentation":{"id":21028,"nodeType":"StructuredDocumentation","src":"9455:88:82","text":"@dev Optional function called in `addPoolsToSet` for optional additional validation."},"id":21034,"implemented":true,"kind":"function","modifiers":[],"name":"_validatePool","nameLocation":"9557:13:82","nodeType":"FunctionDefinition","parameters":{"id":21031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21030,"mutability":"mutable","name":"pool","nameLocation":"9579:4:82","nodeType":"VariableDeclaration","scope":21034,"src":"9571:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21029,"name":"address","nodeType":"ElementaryTypeName","src":"9571:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9570:14:82"},"returnParameters":{"id":21032,"nodeType":"ParameterList","parameters":[],"src":"9607:0:82"},"scope":21059,"src":"9548:123:82","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":21057,"nodeType":"Block","src":"9739:140:82","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21039,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21036,"src":"9753:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":21040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9766:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9753:14:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":21049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":21042,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20357,"src":"9771:16:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":21044,"indexExpression":{"id":21043,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21036,"src":"9788:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9771:27:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":21047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9810:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":21046,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9802:7:82","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21045,"name":"address","nodeType":"ElementaryTypeName","src":"9802:7:82","typeDescriptions":{}}},"id":21048,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9802:10:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9771:41:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9753:59:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21056,"nodeType":"IfStatement","src":"9749:124:82","trueBody":{"id":21055,"nodeType":"Block","src":"9814:59:82","statements":[{"errorCall":{"arguments":[{"id":21052,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21036,"src":"9852:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21051,"name":"InvalidPoolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":723,"src":"9835:16:82","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":21053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9835:27:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":21054,"nodeType":"RevertStatement","src":"9828:34:82"}]}}]},"id":21058,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidPoolSet","nameLocation":"9686:19:82","nodeType":"FunctionDefinition","parameters":{"id":21037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21036,"mutability":"mutable","name":"poolSetId","nameLocation":"9714:9:82","nodeType":"VariableDeclaration","scope":21058,"src":"9706:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21035,"name":"uint256","nodeType":"ElementaryTypeName","src":"9706:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9705:19:82"},"returnParameters":{"id":21038,"nodeType":"ParameterList","parameters":[],"src":"9739:0:82"},"scope":21059,"src":"9677:202:82","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":21060,"src":"581:9300:82","usedErrors":[5,711,718,723,726,731,734,739,2857,9352,9357,20215],"usedEvents":[674,681,688,695,704,9363,9501]}],"src":"46:9836:82"},"id":82},"contracts/PoolPauseHelper.sol":{"ast":{"absolutePath":"contracts/PoolPauseHelper.sol","exportedSymbols":{"IPoolPauseHelper":[876],"IVault":[2545],"PoolHelperCommon":[21059],"PoolPauseHelper":[21132]},"id":21133,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":21061,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:83"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol","id":21063,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21133,"sourceUnit":877,"src":"72:112:83","symbolAliases":[{"foreign":{"id":21062,"name":"IPoolPauseHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":876,"src":"81:16:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":21065,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21133,"sourceUnit":2546,"src":"185:81:83","symbolAliases":[{"foreign":{"id":21064,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"194:6:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/PoolHelperCommon.sol","file":"./PoolHelperCommon.sol","id":21067,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21133,"sourceUnit":21060,"src":"268:58:83","symbolAliases":[{"foreign":{"id":21066,"name":"PoolHelperCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21059,"src":"277:16:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":21068,"name":"IPoolPauseHelper","nameLocations":["356:16:83"],"nodeType":"IdentifierPath","referencedDeclaration":876,"src":"356:16:83"},"id":21069,"nodeType":"InheritanceSpecifier","src":"356:16:83"},{"baseName":{"id":21070,"name":"PoolHelperCommon","nameLocations":["374:16:83"],"nodeType":"IdentifierPath","referencedDeclaration":21059,"src":"374:16:83"},"id":21071,"nodeType":"InheritanceSpecifier","src":"374:16:83"}],"canonicalName":"PoolPauseHelper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":21132,"linearizedBaseContracts":[21132,21059,20330,4385,14,9572,9486,12366,865,876],"name":"PoolPauseHelper","nameLocation":"337:15:83","nodeType":"ContractDefinition","nodes":[{"body":{"id":21083,"nodeType":"Block","src":"483:64:83","statements":[]},"id":21084,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":21079,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21074,"src":"462:5:83","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},{"id":21080,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21076,"src":"469:12:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21081,"kind":"baseConstructorSpecifier","modifierName":{"id":21078,"name":"PoolHelperCommon","nameLocations":["445:16:83"],"nodeType":"IdentifierPath","referencedDeclaration":21059,"src":"445:16:83"},"nodeType":"ModifierInvocation","src":"445:37:83"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":21077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21074,"mutability":"mutable","name":"vault","nameLocation":"416:5:83","nodeType":"VariableDeclaration","scope":21084,"src":"409:12:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":21073,"nodeType":"UserDefinedTypeName","pathNode":{"id":21072,"name":"IVault","nameLocations":["409:6:83"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"409:6:83"},"referencedDeclaration":2545,"src":"409:6:83","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":21076,"mutability":"mutable","name":"initialOwner","nameLocation":"431:12:83","nodeType":"VariableDeclaration","scope":21084,"src":"423:20:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21075,"name":"address","nodeType":"ElementaryTypeName","src":"423:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"408:36:83"},"returnParameters":{"id":21082,"nodeType":"ParameterList","parameters":[],"src":"483:0:83"},"scope":21132,"src":"397:150:83","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[875],"body":{"id":21130,"nodeType":"Block","src":"853:326:83","statements":[{"assignments":[21092],"declarations":[{"constant":false,"id":21092,"mutability":"mutable","name":"poolSetId","nameLocation":"922:9:83","nodeType":"VariableDeclaration","scope":21130,"src":"914:17:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21091,"name":"uint256","nodeType":"ElementaryTypeName","src":"914:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21095,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":21093,"name":"_getValidPoolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20976,"src":"934:18:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":21094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"934:20:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"914:40:83"},{"assignments":[21097],"declarations":[{"constant":false,"id":21097,"mutability":"mutable","name":"length","nameLocation":"973:6:83","nodeType":"VariableDeclaration","scope":21130,"src":"965:14:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21096,"name":"uint256","nodeType":"ElementaryTypeName","src":"965:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21100,"initialValue":{"expression":{"id":21098,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21088,"src":"982:5:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":21099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"988:6:83","memberName":"length","nodeType":"MemberAccess","src":"982:12:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"965:29:83"},{"body":{"id":21128,"nodeType":"Block","src":"1042:131:83","statements":[{"assignments":[21112],"declarations":[{"constant":false,"id":21112,"mutability":"mutable","name":"pool","nameLocation":"1064:4:83","nodeType":"VariableDeclaration","scope":21128,"src":"1056:12:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21111,"name":"address","nodeType":"ElementaryTypeName","src":"1056:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":21116,"initialValue":{"baseExpression":{"id":21113,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21088,"src":"1071:5:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":21115,"indexExpression":{"id":21114,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21102,"src":"1077:1:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1071:8:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1056:23:83"},{"expression":{"arguments":[{"id":21118,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21092,"src":"1110:9:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21119,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21112,"src":"1121:4:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21117,"name":"_ensurePoolInSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21027,"src":"1093:16:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address) view"}},"id":21120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1093:33:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21121,"nodeType":"ExpressionStatement","src":"1093:33:83"},{"expression":{"arguments":[{"id":21125,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21112,"src":"1157:4:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":21122,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"1141:5:83","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":21124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1147:9:83","memberName":"pausePool","nodeType":"MemberAccess","referencedDeclaration":2647,"src":"1141:15:83","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":21126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1141:21:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21127,"nodeType":"ExpressionStatement","src":"1141:21:83"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21105,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21102,"src":"1025:1:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":21106,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21097,"src":"1029:6:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1025:10:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21129,"initializationExpression":{"assignments":[21102],"declarations":[{"constant":false,"id":21102,"mutability":"mutable","name":"i","nameLocation":"1018:1:83","nodeType":"VariableDeclaration","scope":21129,"src":"1010:9:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21101,"name":"uint256","nodeType":"ElementaryTypeName","src":"1010:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21104,"initialValue":{"hexValue":"30","id":21103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1022:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1010:13:83"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1037:3:83","subExpression":{"id":21108,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21102,"src":"1037:1:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21110,"nodeType":"ExpressionStatement","src":"1037:3:83"},"nodeType":"ForStatement","src":"1005:168:83"}]},"documentation":{"id":21085,"nodeType":"StructuredDocumentation","src":"765:32:83","text":"@inheritdoc IPoolPauseHelper"},"functionSelector":"a20dc529","id":21131,"implemented":true,"kind":"function","modifiers":[],"name":"pausePools","nameLocation":"811:10:83","nodeType":"FunctionDefinition","parameters":{"id":21089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21088,"mutability":"mutable","name":"pools","nameLocation":"839:5:83","nodeType":"VariableDeclaration","scope":21131,"src":"822:22:83","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":21086,"name":"address","nodeType":"ElementaryTypeName","src":"822:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":21087,"nodeType":"ArrayTypeName","src":"822:9:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"821:24:83"},"returnParameters":{"id":21090,"nodeType":"ParameterList","parameters":[],"src":"853:0:83"},"scope":21132,"src":"802:377:83","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":21133,"src":"328:853:83","usedErrors":[5,711,718,723,726,731,734,739,2857,9352,9357,20215],"usedEvents":[674,681,688,695,704,9363,9501]}],"src":"46:1136:83"},"id":83},"contracts/PoolSwapFeeHelper.sol":{"ast":{"absolutePath":"contracts/PoolSwapFeeHelper.sol","exportedSymbols":{"IPoolSwapFeeHelper":[893],"IVault":[2545],"PoolHelperCommon":[21059],"PoolSwapFeeHelper":[21201]},"id":21202,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":21134,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:84"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol","id":21136,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21202,"sourceUnit":894,"src":"72:116:84","symbolAliases":[{"foreign":{"id":21135,"name":"IPoolSwapFeeHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":893,"src":"81:18:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":21138,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21202,"sourceUnit":2546,"src":"189:81:84","symbolAliases":[{"foreign":{"id":21137,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"198:6:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/PoolHelperCommon.sol","file":"./PoolHelperCommon.sol","id":21140,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21202,"sourceUnit":21060,"src":"272:58:84","symbolAliases":[{"foreign":{"id":21139,"name":"PoolHelperCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21059,"src":"281:16:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":21141,"name":"IPoolSwapFeeHelper","nameLocations":["362:18:84"],"nodeType":"IdentifierPath","referencedDeclaration":893,"src":"362:18:84"},"id":21142,"nodeType":"InheritanceSpecifier","src":"362:18:84"},{"baseName":{"id":21143,"name":"PoolHelperCommon","nameLocations":["382:16:84"],"nodeType":"IdentifierPath","referencedDeclaration":21059,"src":"382:16:84"},"id":21144,"nodeType":"InheritanceSpecifier","src":"382:16:84"}],"canonicalName":"PoolSwapFeeHelper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":21201,"linearizedBaseContracts":[21201,21059,20330,4385,14,9572,9486,12366,865,893],"name":"PoolSwapFeeHelper","nameLocation":"341:17:84","nodeType":"ContractDefinition","nodes":[{"body":{"id":21156,"nodeType":"Block","src":"491:64:84","statements":[]},"id":21157,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":21152,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21147,"src":"470:5:84","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},{"id":21153,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21149,"src":"477:12:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21154,"kind":"baseConstructorSpecifier","modifierName":{"id":21151,"name":"PoolHelperCommon","nameLocations":["453:16:84"],"nodeType":"IdentifierPath","referencedDeclaration":21059,"src":"453:16:84"},"nodeType":"ModifierInvocation","src":"453:37:84"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":21150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21147,"mutability":"mutable","name":"vault","nameLocation":"424:5:84","nodeType":"VariableDeclaration","scope":21157,"src":"417:12:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":21146,"nodeType":"UserDefinedTypeName","pathNode":{"id":21145,"name":"IVault","nameLocations":["417:6:84"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"417:6:84"},"referencedDeclaration":2545,"src":"417:6:84","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":21149,"mutability":"mutable","name":"initialOwner","nameLocation":"439:12:84","nodeType":"VariableDeclaration","scope":21157,"src":"431:20:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21148,"name":"address","nodeType":"ElementaryTypeName","src":"431:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"416:36:84"},"returnParameters":{"id":21155,"nodeType":"ParameterList","parameters":[],"src":"491:0:84"},"scope":21201,"src":"405:150:84","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[892],"body":{"id":21175,"nodeType":"Block","src":"925:74:84","statements":[{"expression":{"arguments":[{"id":21171,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21160,"src":"968:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21172,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21162,"src":"974:17:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":21168,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"935:5:84","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":21170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"941:26:84","memberName":"setStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2661,"src":"935:32:84","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":21173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"935:57:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21174,"nodeType":"ExpressionStatement","src":"935:57:84"}]},"documentation":{"id":21158,"nodeType":"StructuredDocumentation","src":"773:34:84","text":"@inheritdoc IPoolSwapFeeHelper"},"functionSelector":"d15126ba","id":21176,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":21165,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21160,"src":"919:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21166,"kind":"modifierInvocation","modifierName":{"id":21164,"name":"withValidPoolForSender","nameLocations":["896:22:84"],"nodeType":"IdentifierPath","referencedDeclaration":20392,"src":"896:22:84"},"nodeType":"ModifierInvocation","src":"896:28:84"}],"name":"setStaticSwapFeePercentage","nameLocation":"821:26:84","nodeType":"FunctionDefinition","parameters":{"id":21163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21160,"mutability":"mutable","name":"pool","nameLocation":"856:4:84","nodeType":"VariableDeclaration","scope":21176,"src":"848:12:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21159,"name":"address","nodeType":"ElementaryTypeName","src":"848:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21162,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"870:17:84","nodeType":"VariableDeclaration","scope":21176,"src":"862:25:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21161,"name":"uint256","nodeType":"ElementaryTypeName","src":"862:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"847:41:84"},"returnParameters":{"id":21167,"nodeType":"ParameterList","parameters":[],"src":"925:0:84"},"scope":21201,"src":"812:187:84","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[21034],"body":{"id":21199,"nodeType":"Block","src":"1348:187:84","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":21192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":21185,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21179,"src":"1437:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":21183,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"1411:5:84","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":21184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1417:19:84","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":3776,"src":"1411:25:84","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$4111_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":21186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1411:31:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":21187,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1443:14:84","memberName":"swapFeeManager","nodeType":"MemberAccess","referencedDeclaration":4108,"src":"1411:46:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":21190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1469:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":21189,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1461:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21188,"name":"address","nodeType":"ElementaryTypeName","src":"1461:7:84","typeDescriptions":{}}},"id":21191,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1461:10:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1411:60:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21198,"nodeType":"IfStatement","src":"1407:122:84","trueBody":{"id":21197,"nodeType":"Block","src":"1473:56:84","statements":[{"errorCall":{"arguments":[{"id":21194,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21179,"src":"1513:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21193,"name":"PoolHasSwapManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":884,"src":"1494:18:84","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":21195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1494:24:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":21196,"nodeType":"RevertStatement","src":"1487:31:84"}]}}]},"documentation":{"id":21177,"nodeType":"StructuredDocumentation","src":"1251:32:84","text":"@inheritdoc PoolHelperCommon"},"id":21200,"implemented":true,"kind":"function","modifiers":[],"name":"_validatePool","nameLocation":"1297:13:84","nodeType":"FunctionDefinition","overrides":{"id":21181,"nodeType":"OverrideSpecifier","overrides":[],"src":"1339:8:84"},"parameters":{"id":21180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21179,"mutability":"mutable","name":"pool","nameLocation":"1319:4:84","nodeType":"VariableDeclaration","scope":21200,"src":"1311:12:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21178,"name":"address","nodeType":"ElementaryTypeName","src":"1311:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1310:14:84"},"returnParameters":{"id":21182,"nodeType":"ParameterList","parameters":[],"src":"1348:0:84"},"scope":21201,"src":"1288:247:84","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":21202,"src":"332:1205:84","usedErrors":[5,711,718,723,726,731,734,739,884,2857,9352,9357,20215],"usedEvents":[674,681,688,695,704,9363,9501]}],"src":"46:1492:84"},"id":84},"contracts/PriceImpactHelper.sol":{"ast":{"absolutePath":"contracts/PriceImpactHelper.sol","exportedSymbols":{"CallAndRevert":[18633],"FixedPoint":[5298],"IERC20":[10576],"IRouter":[2302],"IRouterQueries":[2507],"IVault":[2545],"PriceImpactHelper":[21889],"SafeCast":[16092]},"id":21890,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":21203,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:85"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":21205,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21890,"sourceUnit":10577,"src":"72:72:85","symbolAliases":[{"foreign":{"id":21204,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":21207,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21890,"sourceUnit":16093,"src":"145:75:85","symbolAliases":[{"foreign":{"id":21206,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"154:8:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":21209,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21890,"sourceUnit":2546,"src":"222:81:85","symbolAliases":[{"foreign":{"id":21208,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"231:6:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","id":21211,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21890,"sourceUnit":2303,"src":"304:83:85","symbolAliases":[{"foreign":{"id":21210,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2302,"src":"313:7:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol","id":21213,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21890,"sourceUnit":2508,"src":"388:97:85","symbolAliases":[{"foreign":{"id":21212,"name":"IRouterQueries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2507,"src":"397:14:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":21215,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21890,"sourceUnit":5299,"src":"487:92:85","symbolAliases":[{"foreign":{"id":21214,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5298,"src":"496:10:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/CallAndRevert.sol","file":"./CallAndRevert.sol","id":21217,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21890,"sourceUnit":18634,"src":"581:52:85","symbolAliases":[{"foreign":{"id":21216,"name":"CallAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18633,"src":"590:13:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":21218,"name":"CallAndRevert","nameLocations":["665:13:85"],"nodeType":"IdentifierPath","referencedDeclaration":18633,"src":"665:13:85"},"id":21219,"nodeType":"InheritanceSpecifier","src":"665:13:85"}],"canonicalName":"PriceImpactHelper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":21889,"linearizedBaseContracts":[21889,18633],"name":"PriceImpactHelper","nameLocation":"644:17:85","nodeType":"ContractDefinition","nodes":[{"global":false,"id":21222,"libraryName":{"id":21220,"name":"FixedPoint","nameLocations":["691:10:85"],"nodeType":"IdentifierPath","referencedDeclaration":5298,"src":"691:10:85"},"nodeType":"UsingForDirective","src":"685:29:85","typeName":{"id":21221,"name":"uint256","nodeType":"ElementaryTypeName","src":"706:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":21224,"libraryName":{"id":21223,"name":"SafeCast","nameLocations":["725:8:85"],"nodeType":"IdentifierPath","referencedDeclaration":16092,"src":"725:8:85"},"nodeType":"UsingForDirective","src":"719:21:85"},{"constant":false,"id":21227,"mutability":"immutable","name":"_vault","nameLocation":"772:6:85","nodeType":"VariableDeclaration","scope":21889,"src":"746:32:85","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":21226,"nodeType":"UserDefinedTypeName","pathNode":{"id":21225,"name":"IVault","nameLocations":["746:6:85"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"746:6:85"},"referencedDeclaration":2545,"src":"746:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":21230,"mutability":"immutable","name":"_router","nameLocation":"811:7:85","nodeType":"VariableDeclaration","scope":21889,"src":"784:34:85","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"},"typeName":{"id":21229,"nodeType":"UserDefinedTypeName","pathNode":{"id":21228,"name":"IRouter","nameLocations":["784:7:85"],"nodeType":"IdentifierPath","referencedDeclaration":2302,"src":"784:7:85"},"referencedDeclaration":2302,"src":"784:7:85","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}},"visibility":"internal"},{"body":{"id":21247,"nodeType":"Block","src":"867:57:85","statements":[{"expression":{"id":21241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21239,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21227,"src":"877:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21240,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21233,"src":"886:5:85","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"src":"877:14:85","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":21242,"nodeType":"ExpressionStatement","src":"877:14:85"},{"expression":{"id":21245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21243,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21230,"src":"901:7:85","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21244,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21236,"src":"911:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}},"src":"901:16:85","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}},"id":21246,"nodeType":"ExpressionStatement","src":"901:16:85"}]},"id":21248,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":21237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21233,"mutability":"mutable","name":"vault","nameLocation":"844:5:85","nodeType":"VariableDeclaration","scope":21248,"src":"837:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":21232,"nodeType":"UserDefinedTypeName","pathNode":{"id":21231,"name":"IVault","nameLocations":["837:6:85"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"837:6:85"},"referencedDeclaration":2545,"src":"837:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":21236,"mutability":"mutable","name":"router","nameLocation":"859:6:85","nodeType":"VariableDeclaration","scope":21248,"src":"851:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"},"typeName":{"id":21235,"nodeType":"UserDefinedTypeName","pathNode":{"id":21234,"name":"IRouter","nameLocations":["851:7:85"],"nodeType":"IdentifierPath","referencedDeclaration":2302,"src":"851:7:85"},"referencedDeclaration":2302,"src":"851:7:85","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}},"visibility":"internal"}],"src":"836:30:85"},"returnParameters":{"id":21238,"nodeType":"ParameterList","parameters":[],"src":"867:0:85"},"scope":21889,"src":"825:99:85","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":21384,"nodeType":"Block","src":"1330:1364:85","statements":[{"assignments":[21261],"declarations":[{"constant":false,"id":21261,"mutability":"mutable","name":"bptAmountOut","nameLocation":"1348:12:85","nodeType":"VariableDeclaration","scope":21384,"src":"1340:20:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21260,"name":"uint256","nodeType":"ElementaryTypeName","src":"1340:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21267,"initialValue":{"arguments":[{"id":21263,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21250,"src":"1392:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21264,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21253,"src":"1398:14:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":21265,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21255,"src":"1414:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21262,"name":"_queryAddLiquidityUnbalanced","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21421,"src":"1363:28:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256[] memory,address) returns (uint256)"}},"id":21266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1363:58:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1340:81:85"},{"assignments":[21272],"declarations":[{"constant":false,"id":21272,"mutability":"mutable","name":"proportionalAmountsOut","nameLocation":"1448:22:85","nodeType":"VariableDeclaration","scope":21384,"src":"1431:39:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21270,"name":"uint256","nodeType":"ElementaryTypeName","src":"1431:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21271,"nodeType":"ArrayTypeName","src":"1431:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":21278,"initialValue":{"arguments":[{"id":21274,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21250,"src":"1507:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21275,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21261,"src":"1513:12:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21276,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21255,"src":"1527:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21273,"name":"_queryRemoveLiquidityProportional","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21458,"src":"1473:33:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address,uint256,address) returns (uint256[] memory)"}},"id":21277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1473:61:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1431:103:85"},{"assignments":[21283],"declarations":[{"constant":false,"id":21283,"mutability":"mutable","name":"deltas","nameLocation":"1633:6:85","nodeType":"VariableDeclaration","scope":21384,"src":"1617:22:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21281,"name":"int256","nodeType":"ElementaryTypeName","src":"1617:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21282,"nodeType":"ArrayTypeName","src":"1617:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"id":21290,"initialValue":{"arguments":[{"expression":{"id":21287,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21253,"src":"1655:14:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1670:6:85","memberName":"length","nodeType":"MemberAccess","src":"1655:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21286,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1642:12:85","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_int256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (int256[] memory)"},"typeName":{"baseType":{"id":21284,"name":"int256","nodeType":"ElementaryTypeName","src":"1646:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21285,"nodeType":"ArrayTypeName","src":"1646:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}}},"id":21289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1642:35:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1617:60:85"},{"body":{"id":21318,"nodeType":"Block","src":"1739:104:85","statements":[{"expression":{"id":21316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21302,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21283,"src":"1753:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21304,"indexExpression":{"id":21303,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21292,"src":"1760:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1753:9:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":21305,"name":"proportionalAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21272,"src":"1765:22:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21307,"indexExpression":{"id":21306,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21292,"src":"1788:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1765:25:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1791:8:85","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":16081,"src":"1765:34:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":21309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1765:36:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":21310,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21253,"src":"1804:14:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21312,"indexExpression":{"id":21311,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21292,"src":"1819:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1804:17:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1822:8:85","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":16081,"src":"1804:26:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":21314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1804:28:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1765:67:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1753:79:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21317,"nodeType":"ExpressionStatement","src":"1753:79:85"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21295,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21292,"src":"1707:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":21296,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21253,"src":"1711:14:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1726:6:85","memberName":"length","nodeType":"MemberAccess","src":"1711:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1707:25:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21319,"initializationExpression":{"assignments":[21292],"declarations":[{"constant":false,"id":21292,"mutability":"mutable","name":"i","nameLocation":"1700:1:85","nodeType":"VariableDeclaration","scope":21319,"src":"1692:9:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21291,"name":"uint256","nodeType":"ElementaryTypeName","src":"1692:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21294,"initialValue":{"hexValue":"30","id":21293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1704:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1692:13:85"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1734:3:85","subExpression":{"id":21299,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21292,"src":"1734:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21301,"nodeType":"ExpressionStatement","src":"1734:3:85"},"nodeType":"ForStatement","src":"1687:156:85"},{"assignments":[21324],"declarations":[{"constant":false,"id":21324,"mutability":"mutable","name":"deltaBPTs","nameLocation":"1976:9:85","nodeType":"VariableDeclaration","scope":21384,"src":"1960:25:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21322,"name":"int256","nodeType":"ElementaryTypeName","src":"1960:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21323,"nodeType":"ArrayTypeName","src":"1960:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"id":21331,"initialValue":{"arguments":[{"expression":{"id":21328,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21253,"src":"2001:14:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2016:6:85","memberName":"length","nodeType":"MemberAccess","src":"2001:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21327,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1988:12:85","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_int256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (int256[] memory)"},"typeName":{"baseType":{"id":21325,"name":"int256","nodeType":"ElementaryTypeName","src":"1992:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21326,"nodeType":"ArrayTypeName","src":"1992:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}}},"id":21330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1988:35:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1960:63:85"},{"body":{"id":21354,"nodeType":"Block","src":"2085:107:85","statements":[{"expression":{"id":21352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21343,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21324,"src":"2099:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21345,"indexExpression":{"id":21344,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21333,"src":"2109:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2099:12:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":21347,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21250,"src":"2157:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21348,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21333,"src":"2163:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21349,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21283,"src":"2166:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":21350,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21255,"src":"2174:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21346,"name":"_queryAddLiquidityUnbalancedForTokenDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21618,"src":"2114:42:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_int256_$","typeString":"function (address,uint256,int256[] memory,address) returns (int256)"}},"id":21351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2114:67:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"2099:82:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21353,"nodeType":"ExpressionStatement","src":"2099:82:85"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21336,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21333,"src":"2053:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":21337,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21253,"src":"2057:14:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2072:6:85","memberName":"length","nodeType":"MemberAccess","src":"2057:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2053:25:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21355,"initializationExpression":{"assignments":[21333],"declarations":[{"constant":false,"id":21333,"mutability":"mutable","name":"i","nameLocation":"2046:1:85","nodeType":"VariableDeclaration","scope":21355,"src":"2038:9:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21332,"name":"uint256","nodeType":"ElementaryTypeName","src":"2038:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21335,"initialValue":{"hexValue":"30","id":21334,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2050:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2038:13:85"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2080:3:85","subExpression":{"id":21340,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21333,"src":"2080:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21342,"nodeType":"ExpressionStatement","src":"2080:3:85"},"nodeType":"ForStatement","src":"2033:159:85"},{"assignments":[21357],"declarations":[{"constant":false,"id":21357,"mutability":"mutable","name":"remainingDeltaIndex","nameLocation":"2290:19:85","nodeType":"VariableDeclaration","scope":21384,"src":"2282:27:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21356,"name":"uint256","nodeType":"ElementaryTypeName","src":"2282:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21364,"initialValue":{"arguments":[{"id":21359,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21250,"src":"2327:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21360,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21283,"src":"2333:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":21361,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21324,"src":"2341:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":21362,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21255,"src":"2352:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21358,"name":"_zeroOutDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21782,"src":"2312:14:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_int256_$dyn_memory_ptr_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$","typeString":"function (address,int256[] memory,int256[] memory,address) returns (uint256)"}},"id":21363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2312:47:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2282:77:85"},{"assignments":[21366],"declarations":[{"constant":false,"id":21366,"mutability":"mutable","name":"delta","nameLocation":"2566:5:85","nodeType":"VariableDeclaration","scope":21384,"src":"2558:13:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21365,"name":"uint256","nodeType":"ElementaryTypeName","src":"2558:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21374,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"id":21370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"2575:28:85","subExpression":{"baseExpression":{"id":21367,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21283,"src":"2576:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21369,"indexExpression":{"id":21368,"name":"remainingDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21357,"src":"2583:19:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2576:27:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":21371,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2574:30:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2605:9:85","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":15245,"src":"2574:40:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":21373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2574:42:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2558:58:85"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"id":21377,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21253,"src":"2647:14:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21379,"indexExpression":{"id":21378,"name":"remainingDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21357,"src":"2662:19:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2647:35:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":21375,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21366,"src":"2633:5:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2639:7:85","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":5080,"src":"2633:13:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":21380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2633:50:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":21381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2686:1:85","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2633:54:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21259,"id":21383,"nodeType":"Return","src":"2626:61:85"}]},"functionSelector":"48406a54","id":21385,"implemented":true,"kind":"function","modifiers":[],"name":"calculateAddLiquidityUnbalancedPriceImpact","nameLocation":"1155:42:85","nodeType":"FunctionDefinition","parameters":{"id":21256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21250,"mutability":"mutable","name":"pool","nameLocation":"1215:4:85","nodeType":"VariableDeclaration","scope":21385,"src":"1207:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21249,"name":"address","nodeType":"ElementaryTypeName","src":"1207:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21253,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"1246:14:85","nodeType":"VariableDeclaration","scope":21385,"src":"1229:31:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21251,"name":"uint256","nodeType":"ElementaryTypeName","src":"1229:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21252,"nodeType":"ArrayTypeName","src":"1229:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":21255,"mutability":"mutable","name":"sender","nameLocation":"1278:6:85","nodeType":"VariableDeclaration","scope":21385,"src":"1270:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21254,"name":"address","nodeType":"ElementaryTypeName","src":"1270:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1197:93:85"},"returnParameters":{"id":21259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21258,"mutability":"mutable","name":"priceImpact","nameLocation":"1317:11:85","nodeType":"VariableDeclaration","scope":21385,"src":"1309:19:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21257,"name":"uint256","nodeType":"ElementaryTypeName","src":"1309:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1308:21:85"},"scope":21889,"src":"1146:1548:85","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":21420,"nodeType":"Block","src":"3076:448:85","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":21402,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21230,"src":"3177:7:85","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}],"id":21401,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3169:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21400,"name":"address","nodeType":"ElementaryTypeName","src":"3169:7:85","typeDescriptions":{}}},"id":21403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3169:16:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":21406,"name":"IRouterQueries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2507,"src":"3255:14:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouterQueries_$2507_$","typeString":"type(contract IRouterQueries)"}},"id":21407,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3270:27:85","memberName":"queryAddLiquidityUnbalanced","nodeType":"MemberAccess","referencedDeclaration":2345,"src":"3255:42:85","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function IRouterQueries.queryAddLiquidityUnbalanced(address,uint256[] memory,address,bytes memory) returns (uint256)"}},"id":21408,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3298:8:85","memberName":"selector","nodeType":"MemberAccess","src":"3255:51:85","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":21409,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21387,"src":"3332:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21410,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21390,"src":"3362:14:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":21411,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21392,"src":"3402:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":21412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3434:2:85","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":21404,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3207:3:85","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21405,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3211:18:85","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"3207:22:85","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":21413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3207:251:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":21399,"name":"_callAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18572,"src":"3133:14:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":21414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3133:343:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":21416,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3495:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":21415,"name":"uint256","nodeType":"ElementaryTypeName","src":"3495:7:85","typeDescriptions":{}}}],"id":21417,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3494:9:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":21397,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3105:3:85","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21398,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3109:6:85","memberName":"decode","nodeType":"MemberAccess","src":"3105:10:85","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":21418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3105:412:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21396,"id":21419,"nodeType":"Return","src":"3086:431:85"}]},"id":21421,"implemented":true,"kind":"function","modifiers":[],"name":"_queryAddLiquidityUnbalanced","nameLocation":"2927:28:85","nodeType":"FunctionDefinition","parameters":{"id":21393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21387,"mutability":"mutable","name":"pool","nameLocation":"2973:4:85","nodeType":"VariableDeclaration","scope":21421,"src":"2965:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21386,"name":"address","nodeType":"ElementaryTypeName","src":"2965:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21390,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"3004:14:85","nodeType":"VariableDeclaration","scope":21421,"src":"2987:31:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21388,"name":"uint256","nodeType":"ElementaryTypeName","src":"2987:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21389,"nodeType":"ArrayTypeName","src":"2987:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":21392,"mutability":"mutable","name":"sender","nameLocation":"3036:6:85","nodeType":"VariableDeclaration","scope":21421,"src":"3028:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21391,"name":"address","nodeType":"ElementaryTypeName","src":"3028:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2955:93:85"},"returnParameters":{"id":21396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21395,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21421,"src":"3067:7:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21394,"name":"uint256","nodeType":"ElementaryTypeName","src":"3067:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3066:9:85"},"scope":21889,"src":"2918:606:85","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21457,"nodeType":"Block","src":"3691:453:85","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":21438,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21230,"src":"3792:7:85","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}],"id":21437,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3784:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21436,"name":"address","nodeType":"ElementaryTypeName","src":"3784:7:85","typeDescriptions":{}}},"id":21439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3784:16:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":21442,"name":"IRouterQueries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2507,"src":"3870:14:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouterQueries_$2507_$","typeString":"type(contract IRouterQueries)"}},"id":21443,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3885:32:85","memberName":"queryRemoveLiquidityProportional","nodeType":"MemberAccess","referencedDeclaration":2399,"src":"3870:47:85","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function IRouterQueries.queryRemoveLiquidityProportional(address,uint256,address,bytes memory) returns (uint256[] memory)"}},"id":21444,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3918:8:85","memberName":"selector","nodeType":"MemberAccess","src":"3870:56:85","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":21445,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21423,"src":"3952:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21446,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21425,"src":"3982:12:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21447,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21427,"src":"4020:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":21448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4052:2:85","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":21440,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3822:3:85","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21441,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3826:18:85","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"3822:22:85","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":21449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3822:254:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":21435,"name":"_callAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18572,"src":"3748:14:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":21450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3748:346:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":21452,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4113:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":21451,"name":"uint256","nodeType":"ElementaryTypeName","src":"4113:7:85","typeDescriptions":{}}},"id":21453,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"4113:9:85","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}}],"id":21454,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4112:11:85","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}],"expression":{"id":21433,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3720:3:85","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21434,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3724:6:85","memberName":"decode","nodeType":"MemberAccess","src":"3720:10:85","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":21455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3720:417:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":21432,"id":21456,"nodeType":"Return","src":"3701:436:85"}]},"id":21458,"implemented":true,"kind":"function","modifiers":[],"name":"_queryRemoveLiquidityProportional","nameLocation":"3539:33:85","nodeType":"FunctionDefinition","parameters":{"id":21428,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21423,"mutability":"mutable","name":"pool","nameLocation":"3590:4:85","nodeType":"VariableDeclaration","scope":21458,"src":"3582:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21422,"name":"address","nodeType":"ElementaryTypeName","src":"3582:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21425,"mutability":"mutable","name":"bptAmountOut","nameLocation":"3612:12:85","nodeType":"VariableDeclaration","scope":21458,"src":"3604:20:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21424,"name":"uint256","nodeType":"ElementaryTypeName","src":"3604:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21427,"mutability":"mutable","name":"sender","nameLocation":"3642:6:85","nodeType":"VariableDeclaration","scope":21458,"src":"3634:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21426,"name":"address","nodeType":"ElementaryTypeName","src":"3634:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3572:82:85"},"returnParameters":{"id":21432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21431,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21458,"src":"3673:16:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21429,"name":"uint256","nodeType":"ElementaryTypeName","src":"3673:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21430,"nodeType":"ArrayTypeName","src":"3673:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3672:18:85"},"scope":21889,"src":"3530:614:85","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21500,"nodeType":"Block","src":"4342:509:85","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":21480,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21230,"src":"4443:7:85","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}],"id":21479,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4435:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21478,"name":"address","nodeType":"ElementaryTypeName","src":"4435:7:85","typeDescriptions":{}}},"id":21481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4435:16:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":21484,"name":"IRouterQueries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2507,"src":"4521:14:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouterQueries_$2507_$","typeString":"type(contract IRouterQueries)"}},"id":21485,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4536:27:85","memberName":"querySwapSingleTokenExactIn","nodeType":"MemberAccess","referencedDeclaration":2486,"src":"4521:42:85","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$_t_bytes_calldata_ptr_$returns$_t_uint256_$","typeString":"function IRouterQueries.querySwapSingleTokenExactIn(address,contract IERC20,contract IERC20,uint256,address,bytes calldata) returns (uint256)"}},"id":21486,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4564:8:85","memberName":"selector","nodeType":"MemberAccess","src":"4521:51:85","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":21487,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21460,"src":"4598:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21488,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21463,"src":"4628:7:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":21489,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21466,"src":"4661:8:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":21490,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21468,"src":"4695:8:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21491,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21470,"src":"4729:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":21492,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4761:2:85","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":21482,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4473:3:85","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21483,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4477:18:85","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"4473:22:85","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":21493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4473:312:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":21477,"name":"_callAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18572,"src":"4399:14:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":21494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4399:404:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":21496,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4822:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":21495,"name":"uint256","nodeType":"ElementaryTypeName","src":"4822:7:85","typeDescriptions":{}}}],"id":21497,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4821:9:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":21475,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4371:3:85","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21476,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4375:6:85","memberName":"decode","nodeType":"MemberAccess","src":"4371:10:85","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":21498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4371:473:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21474,"id":21499,"nodeType":"Return","src":"4352:492:85"}]},"id":21501,"implemented":true,"kind":"function","modifiers":[],"name":"_querySwapSingleTokenExactIn","nameLocation":"4159:28:85","nodeType":"FunctionDefinition","parameters":{"id":21471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21460,"mutability":"mutable","name":"pool","nameLocation":"4205:4:85","nodeType":"VariableDeclaration","scope":21501,"src":"4197:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21459,"name":"address","nodeType":"ElementaryTypeName","src":"4197:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21463,"mutability":"mutable","name":"tokenIn","nameLocation":"4226:7:85","nodeType":"VariableDeclaration","scope":21501,"src":"4219:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":21462,"nodeType":"UserDefinedTypeName","pathNode":{"id":21461,"name":"IERC20","nameLocations":["4219:6:85"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4219:6:85"},"referencedDeclaration":10576,"src":"4219:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":21466,"mutability":"mutable","name":"tokenOut","nameLocation":"4250:8:85","nodeType":"VariableDeclaration","scope":21501,"src":"4243:15:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":21465,"nodeType":"UserDefinedTypeName","pathNode":{"id":21464,"name":"IERC20","nameLocations":["4243:6:85"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4243:6:85"},"referencedDeclaration":10576,"src":"4243:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":21468,"mutability":"mutable","name":"amountIn","nameLocation":"4276:8:85","nodeType":"VariableDeclaration","scope":21501,"src":"4268:16:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21467,"name":"uint256","nodeType":"ElementaryTypeName","src":"4268:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21470,"mutability":"mutable","name":"sender","nameLocation":"4302:6:85","nodeType":"VariableDeclaration","scope":21501,"src":"4294:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21469,"name":"address","nodeType":"ElementaryTypeName","src":"4294:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4187:127:85"},"returnParameters":{"id":21474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21473,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21501,"src":"4333:7:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21472,"name":"uint256","nodeType":"ElementaryTypeName","src":"4333:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4332:9:85"},"scope":21889,"src":"4150:701:85","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21543,"nodeType":"Block","src":"5051:511:85","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":21523,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21230,"src":"5152:7:85","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}],"id":21522,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5144:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21521,"name":"address","nodeType":"ElementaryTypeName","src":"5144:7:85","typeDescriptions":{}}},"id":21524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5144:16:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":21527,"name":"IRouterQueries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2507,"src":"5230:14:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouterQueries_$2507_$","typeString":"type(contract IRouterQueries)"}},"id":21528,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5245:28:85","memberName":"querySwapSingleTokenExactOut","nodeType":"MemberAccess","referencedDeclaration":2506,"src":"5230:43:85","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$_t_bytes_calldata_ptr_$returns$_t_uint256_$","typeString":"function IRouterQueries.querySwapSingleTokenExactOut(address,contract IERC20,contract IERC20,uint256,address,bytes calldata) returns (uint256)"}},"id":21529,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5274:8:85","memberName":"selector","nodeType":"MemberAccess","src":"5230:52:85","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":21530,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21503,"src":"5308:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21531,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21506,"src":"5338:7:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":21532,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21509,"src":"5371:8:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":21533,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21511,"src":"5405:9:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21534,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21513,"src":"5440:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":21535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5472:2:85","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":21525,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5182:3:85","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21526,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5186:18:85","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"5182:22:85","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":21536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5182:314:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":21520,"name":"_callAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18572,"src":"5108:14:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":21537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5108:406:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":21539,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5533:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":21538,"name":"uint256","nodeType":"ElementaryTypeName","src":"5533:7:85","typeDescriptions":{}}}],"id":21540,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5532:9:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":21518,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5080:3:85","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21519,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5084:6:85","memberName":"decode","nodeType":"MemberAccess","src":"5080:10:85","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":21541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5080:475:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21517,"id":21542,"nodeType":"Return","src":"5061:494:85"}]},"id":21544,"implemented":true,"kind":"function","modifiers":[],"name":"_querySwapSingleTokenExactOut","nameLocation":"4866:29:85","nodeType":"FunctionDefinition","parameters":{"id":21514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21503,"mutability":"mutable","name":"pool","nameLocation":"4913:4:85","nodeType":"VariableDeclaration","scope":21544,"src":"4905:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21502,"name":"address","nodeType":"ElementaryTypeName","src":"4905:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21506,"mutability":"mutable","name":"tokenIn","nameLocation":"4934:7:85","nodeType":"VariableDeclaration","scope":21544,"src":"4927:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":21505,"nodeType":"UserDefinedTypeName","pathNode":{"id":21504,"name":"IERC20","nameLocations":["4927:6:85"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4927:6:85"},"referencedDeclaration":10576,"src":"4927:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":21509,"mutability":"mutable","name":"tokenOut","nameLocation":"4958:8:85","nodeType":"VariableDeclaration","scope":21544,"src":"4951:15:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":21508,"nodeType":"UserDefinedTypeName","pathNode":{"id":21507,"name":"IERC20","nameLocations":["4951:6:85"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4951:6:85"},"referencedDeclaration":10576,"src":"4951:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":21511,"mutability":"mutable","name":"amountOut","nameLocation":"4984:9:85","nodeType":"VariableDeclaration","scope":21544,"src":"4976:17:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21510,"name":"uint256","nodeType":"ElementaryTypeName","src":"4976:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21513,"mutability":"mutable","name":"sender","nameLocation":"5011:6:85","nodeType":"VariableDeclaration","scope":21544,"src":"5003:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21512,"name":"address","nodeType":"ElementaryTypeName","src":"5003:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4895:128:85"},"returnParameters":{"id":21517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21516,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21544,"src":"5042:7:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21515,"name":"uint256","nodeType":"ElementaryTypeName","src":"5042:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5041:9:85"},"scope":21889,"src":"4857:705:85","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21617,"nodeType":"Block","src":"5973:412:85","statements":[{"assignments":[21562],"declarations":[{"constant":false,"id":21562,"mutability":"mutable","name":"zerosWithSingleDelta","nameLocation":"6000:20:85","nodeType":"VariableDeclaration","scope":21617,"src":"5983:37:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21560,"name":"uint256","nodeType":"ElementaryTypeName","src":"5983:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21561,"nodeType":"ArrayTypeName","src":"5983:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":21569,"initialValue":{"arguments":[{"expression":{"id":21566,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21551,"src":"6037:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6044:6:85","memberName":"length","nodeType":"MemberAccess","src":"6037:13:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"6023:13:85","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":21563,"name":"uint256","nodeType":"ElementaryTypeName","src":"6027:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21564,"nodeType":"ArrayTypeName","src":"6027:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":21568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6023:28:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"5983:68:85"},{"assignments":[21571],"declarations":[{"constant":false,"id":21571,"mutability":"mutable","name":"delta","nameLocation":"6068:5:85","nodeType":"VariableDeclaration","scope":21617,"src":"6061:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":21570,"name":"int256","nodeType":"ElementaryTypeName","src":"6061:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":21575,"initialValue":{"baseExpression":{"id":21572,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21551,"src":"6076:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21574,"indexExpression":{"id":21573,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21548,"src":"6083:10:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6076:18:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"6061:33:85"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21576,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21571,"src":"6109:5:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":21577,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6118:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6109:10:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21582,"nodeType":"IfStatement","src":"6105:49:85","trueBody":{"id":21581,"nodeType":"Block","src":"6121:33:85","statements":[{"expression":{"hexValue":"30","id":21579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6142:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":21557,"id":21580,"nodeType":"Return","src":"6135:8:85"}]}},{"expression":{"id":21596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21583,"name":"zerosWithSingleDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21562,"src":"6164:20:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21585,"indexExpression":{"id":21584,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21548,"src":"6185:10:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6164:32:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21588,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21571,"src":"6207:5:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":21589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6215:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6207:9:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":21593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"6227:6:85","subExpression":{"id":21592,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21571,"src":"6228:5:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6207:26:85","trueExpression":{"id":21591,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21571,"src":"6219:5:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":21587,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6199:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":21586,"name":"uint256","nodeType":"ElementaryTypeName","src":"6199:7:85","typeDescriptions":{}}},"id":21595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6199:35:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6164:70:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21597,"nodeType":"ExpressionStatement","src":"6164:70:85"},{"assignments":[21599],"declarations":[{"constant":false,"id":21599,"mutability":"mutable","name":"result","nameLocation":"6251:6:85","nodeType":"VariableDeclaration","scope":21617,"src":"6244:13:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":21598,"name":"int256","nodeType":"ElementaryTypeName","src":"6244:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":21608,"initialValue":{"arguments":[{"arguments":[{"id":21603,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21546,"src":"6296:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21604,"name":"zerosWithSingleDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21562,"src":"6302:20:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":21605,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21553,"src":"6324:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21602,"name":"_queryAddLiquidityUnbalanced","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21421,"src":"6267:28:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256[] memory,address) returns (uint256)"}},"id":21606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6267:64:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21601,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6260:6:85","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":21600,"name":"int256","nodeType":"ElementaryTypeName","src":"6260:6:85","typeDescriptions":{}}},"id":21607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6260:72:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"6244:88:85"},{"expression":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21609,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21571,"src":"6350:5:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":21610,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6358:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6350:9:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":21614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"6371:7:85","subExpression":{"id":21613,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21599,"src":"6372:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6350:28:85","trueExpression":{"id":21612,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21599,"src":"6362:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":21557,"id":21616,"nodeType":"Return","src":"6343:35:85"}]},"id":21618,"implemented":true,"kind":"function","modifiers":[],"name":"_queryAddLiquidityUnbalancedForTokenDeltas","nameLocation":"5792:42:85","nodeType":"FunctionDefinition","parameters":{"id":21554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21546,"mutability":"mutable","name":"pool","nameLocation":"5852:4:85","nodeType":"VariableDeclaration","scope":21618,"src":"5844:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21545,"name":"address","nodeType":"ElementaryTypeName","src":"5844:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21548,"mutability":"mutable","name":"tokenIndex","nameLocation":"5874:10:85","nodeType":"VariableDeclaration","scope":21618,"src":"5866:18:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21547,"name":"uint256","nodeType":"ElementaryTypeName","src":"5866:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21551,"mutability":"mutable","name":"deltas","nameLocation":"5910:6:85","nodeType":"VariableDeclaration","scope":21618,"src":"5894:22:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21549,"name":"int256","nodeType":"ElementaryTypeName","src":"5894:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21550,"nodeType":"ArrayTypeName","src":"5894:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":21553,"mutability":"mutable","name":"sender","nameLocation":"5934:6:85","nodeType":"VariableDeclaration","scope":21618,"src":"5926:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21552,"name":"address","nodeType":"ElementaryTypeName","src":"5926:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5834:112:85"},"returnParameters":{"id":21557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21556,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21618,"src":"5965:6:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":21555,"name":"int256","nodeType":"ElementaryTypeName","src":"5965:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"5964:8:85"},"scope":21889,"src":"5783:602:85","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21781,"nodeType":"Block","src":"6561:1945:85","statements":[{"assignments":[21634],"declarations":[{"constant":false,"id":21634,"mutability":"mutable","name":"maxNegativeDeltaIndex","nameLocation":"6650:21:85","nodeType":"VariableDeclaration","scope":21781,"src":"6642:29:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21633,"name":"uint256","nodeType":"ElementaryTypeName","src":"6642:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21636,"initialValue":{"hexValue":"30","id":21635,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6674:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6642:33:85"},{"assignments":[21641],"declarations":[{"constant":false,"id":21641,"mutability":"mutable","name":"poolTokens","nameLocation":"6701:10:85","nodeType":"VariableDeclaration","scope":21781,"src":"6685:26:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":21639,"nodeType":"UserDefinedTypeName","pathNode":{"id":21638,"name":"IERC20","nameLocations":["6685:6:85"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6685:6:85"},"referencedDeclaration":10576,"src":"6685:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":21640,"nodeType":"ArrayTypeName","src":"6685:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":21646,"initialValue":{"arguments":[{"id":21644,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21620,"src":"6735:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":21642,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21227,"src":"6714:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":21643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6721:13:85","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":3579,"src":"6714:20:85","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":21645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6714:26:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"6685:55:85"},{"body":{"id":21777,"nodeType":"Block","src":"6799:1662:85","statements":[{"assignments":[21661],"declarations":[{"constant":false,"id":21661,"mutability":"mutable","name":"minPositiveDeltaIndex","nameLocation":"6888:21:85","nodeType":"VariableDeclaration","scope":21777,"src":"6880:29:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21660,"name":"uint256","nodeType":"ElementaryTypeName","src":"6880:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21665,"initialValue":{"arguments":[{"id":21663,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21626,"src":"6930:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}],"id":21662,"name":"_minPositiveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21835,"src":"6912:17:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (int256[] memory) pure returns (uint256)"}},"id":21664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6912:28:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6880:60:85"},{"expression":{"id":21670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21666,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21634,"src":"6954:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":21668,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21626,"src":"6996:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}],"id":21667,"name":"_maxNegativeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21888,"src":"6978:17:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (int256[] memory) pure returns (uint256)"}},"id":21669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6978:28:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6954:52:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21671,"nodeType":"ExpressionStatement","src":"6954:52:85"},{"assignments":[21673],"declarations":[{"constant":false,"id":21673,"mutability":"mutable","name":"givenTokenIndex","nameLocation":"7029:15:85","nodeType":"VariableDeclaration","scope":21777,"src":"7021:23:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21672,"name":"uint256","nodeType":"ElementaryTypeName","src":"7021:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21674,"nodeType":"VariableDeclarationStatement","src":"7021:23:85"},{"assignments":[21676],"declarations":[{"constant":false,"id":21676,"mutability":"mutable","name":"resultTokenIndex","nameLocation":"7066:16:85","nodeType":"VariableDeclaration","scope":21777,"src":"7058:24:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21675,"name":"uint256","nodeType":"ElementaryTypeName","src":"7058:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21677,"nodeType":"VariableDeclarationStatement","src":"7058:24:85"},{"assignments":[21679],"declarations":[{"constant":false,"id":21679,"mutability":"mutable","name":"resultAmount","nameLocation":"7104:12:85","nodeType":"VariableDeclaration","scope":21777,"src":"7096:20:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21678,"name":"uint256","nodeType":"ElementaryTypeName","src":"7096:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21680,"nodeType":"VariableDeclarationStatement","src":"7096:20:85"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":21681,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21626,"src":"7135:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21683,"indexExpression":{"id":21682,"name":"minPositiveDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21661,"src":"7145:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7135:32:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":21687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"7170:33:85","subExpression":{"baseExpression":{"id":21684,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21626,"src":"7171:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21686,"indexExpression":{"id":21685,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21634,"src":"7181:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7171:32:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7135:68:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":21744,"nodeType":"Block","src":"7630:423:85","statements":[{"expression":{"id":21718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21716,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21673,"src":"7648:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21717,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21634,"src":"7666:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7648:39:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21719,"nodeType":"ExpressionStatement","src":"7648:39:85"},{"expression":{"id":21722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21720,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21676,"src":"7705:16:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21721,"name":"minPositiveDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21661,"src":"7724:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7705:40:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21723,"nodeType":"ExpressionStatement","src":"7705:40:85"},{"expression":{"id":21742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21724,"name":"resultAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21679,"src":"7763:12:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":21726,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21620,"src":"7829:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":21727,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21641,"src":"7855:10:85","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":21729,"indexExpression":{"id":21728,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21676,"src":"7866:16:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7855:28:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"baseExpression":{"id":21730,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21641,"src":"7905:10:85","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":21732,"indexExpression":{"id":21731,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21673,"src":"7916:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7905:27:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"id":21736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"7955:24:85","subExpression":{"baseExpression":{"id":21733,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21623,"src":"7956:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21735,"indexExpression":{"id":21734,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21673,"src":"7963:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7956:23:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":21737,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7954:26:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7981:9:85","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":15245,"src":"7954:36:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":21739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7954:38:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21740,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21628,"src":"8014:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21725,"name":"_querySwapSingleTokenExactOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21544,"src":"7778:29:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,contract IERC20,contract IERC20,uint256,address) returns (uint256)"}},"id":21741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7778:260:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7763:275:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21743,"nodeType":"ExpressionStatement","src":"7763:275:85"}]},"id":21745,"nodeType":"IfStatement","src":"7131:922:85","trueBody":{"id":21715,"nodeType":"Block","src":"7205:419:85","statements":[{"expression":{"id":21691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21689,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21673,"src":"7223:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21690,"name":"minPositiveDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21661,"src":"7241:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7223:39:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21692,"nodeType":"ExpressionStatement","src":"7223:39:85"},{"expression":{"id":21695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21693,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21676,"src":"7280:16:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21694,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21634,"src":"7299:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7280:40:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21696,"nodeType":"ExpressionStatement","src":"7280:40:85"},{"expression":{"id":21713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21697,"name":"resultAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21679,"src":"7338:12:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":21699,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21620,"src":"7403:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":21700,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21641,"src":"7429:10:85","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":21702,"indexExpression":{"id":21701,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21673,"src":"7440:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7429:27:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"baseExpression":{"id":21703,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21641,"src":"7478:10:85","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":21705,"indexExpression":{"id":21704,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21676,"src":"7489:16:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7478:28:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":21706,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21623,"src":"7528:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21708,"indexExpression":{"id":21707,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21673,"src":"7535:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7528:23:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7552:9:85","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":15245,"src":"7528:33:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":21710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7528:35:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21711,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21628,"src":"7585:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21698,"name":"_querySwapSingleTokenExactIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21501,"src":"7353:28:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,contract IERC20,contract IERC20,uint256,address) returns (uint256)"}},"id":21712,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7353:256:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7338:271:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21714,"nodeType":"ExpressionStatement","src":"7338:271:85"}]}},{"expression":{"id":21750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21746,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21623,"src":"8110:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21748,"indexExpression":{"id":21747,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21673,"src":"8117:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8110:23:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":21749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8136:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8110:27:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21751,"nodeType":"ExpressionStatement","src":"8110:27:85"},{"expression":{"id":21756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21752,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21626,"src":"8151:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21754,"indexExpression":{"id":21753,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21673,"src":"8161:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8151:26:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":21755,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8180:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8151:30:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21757,"nodeType":"ExpressionStatement","src":"8151:30:85"},{"expression":{"id":21764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21758,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21623,"src":"8195:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21760,"indexExpression":{"id":21759,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21676,"src":"8202:16:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8195:24:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":21761,"name":"resultAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21679,"src":"8223:12:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8236:8:85","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":16081,"src":"8223:21:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":21763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8223:23:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"8195:51:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21765,"nodeType":"ExpressionStatement","src":"8195:51:85"},{"expression":{"id":21775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21766,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21626,"src":"8260:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21768,"indexExpression":{"id":21767,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21676,"src":"8270:16:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8260:27:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":21770,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21620,"src":"8350:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21771,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21676,"src":"8372:16:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21772,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21623,"src":"8406:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":21773,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21628,"src":"8430:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21769,"name":"_queryAddLiquidityUnbalancedForTokenDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21618,"src":"8290:42:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_int256_$","typeString":"function (address,uint256,int256[] memory,address) returns (int256)"}},"id":21774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8290:160:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"8260:190:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21776,"nodeType":"ExpressionStatement","src":"8260:190:85"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21651,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21648,"src":"6771:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21652,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21623,"src":"6775:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6782:6:85","memberName":"length","nodeType":"MemberAccess","src":"6775:13:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":21654,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6791:1:85","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6775:17:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6771:21:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21778,"initializationExpression":{"assignments":[21648],"declarations":[{"constant":false,"id":21648,"mutability":"mutable","name":"i","nameLocation":"6764:1:85","nodeType":"VariableDeclaration","scope":21778,"src":"6756:9:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21647,"name":"uint256","nodeType":"ElementaryTypeName","src":"6756:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21650,"initialValue":{"hexValue":"30","id":21649,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6768:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6756:13:85"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"6794:3:85","subExpression":{"id":21657,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21648,"src":"6794:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21659,"nodeType":"ExpressionStatement","src":"6794:3:85"},"nodeType":"ForStatement","src":"6751:1710:85"},{"expression":{"id":21779,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21634,"src":"8478:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21632,"id":21780,"nodeType":"Return","src":"8471:28:85"}]},"id":21782,"implemented":true,"kind":"function","modifiers":[],"name":"_zeroOutDeltas","nameLocation":"6400:14:85","nodeType":"FunctionDefinition","parameters":{"id":21629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21620,"mutability":"mutable","name":"pool","nameLocation":"6432:4:85","nodeType":"VariableDeclaration","scope":21782,"src":"6424:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21619,"name":"address","nodeType":"ElementaryTypeName","src":"6424:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21623,"mutability":"mutable","name":"deltas","nameLocation":"6462:6:85","nodeType":"VariableDeclaration","scope":21782,"src":"6446:22:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21621,"name":"int256","nodeType":"ElementaryTypeName","src":"6446:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21622,"nodeType":"ArrayTypeName","src":"6446:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":21626,"mutability":"mutable","name":"deltaBPTs","nameLocation":"6494:9:85","nodeType":"VariableDeclaration","scope":21782,"src":"6478:25:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21624,"name":"int256","nodeType":"ElementaryTypeName","src":"6478:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21625,"nodeType":"ArrayTypeName","src":"6478:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":21628,"mutability":"mutable","name":"sender","nameLocation":"6521:6:85","nodeType":"VariableDeclaration","scope":21782,"src":"6513:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21627,"name":"address","nodeType":"ElementaryTypeName","src":"6513:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6414:119:85"},"returnParameters":{"id":21632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21631,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21782,"src":"6552:7:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21630,"name":"uint256","nodeType":"ElementaryTypeName","src":"6552:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6551:9:85"},"scope":21889,"src":"6391:2115:85","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21834,"nodeType":"Block","src":"8702:232:85","statements":[{"assignments":[21791],"declarations":[{"constant":false,"id":21791,"mutability":"mutable","name":"min","nameLocation":"8719:3:85","nodeType":"VariableDeclaration","scope":21834,"src":"8712:10:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":21790,"name":"int256","nodeType":"ElementaryTypeName","src":"8712:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":21797,"initialValue":{"expression":{"arguments":[{"id":21794,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8730:6:85","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":21793,"name":"int256","nodeType":"ElementaryTypeName","src":"8730:6:85","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":21792,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8725:4:85","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":21795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8725:12:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":21796,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8738:3:85","memberName":"max","nodeType":"MemberAccess","src":"8725:16:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"8712:29:85"},{"body":{"id":21832,"nodeType":"Block","src":"8794:134:85","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":21809,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21785,"src":"8812:5:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21811,"indexExpression":{"id":21810,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21799,"src":"8818:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8812:8:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":21812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8823:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8812:12:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":21814,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21785,"src":"8828:5:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21816,"indexExpression":{"id":21815,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21799,"src":"8834:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8828:8:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":21817,"name":"min","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21791,"src":"8839:3:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"8828:14:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8812:30:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21831,"nodeType":"IfStatement","src":"8808:110:85","trueBody":{"id":21830,"nodeType":"Block","src":"8844:74:85","statements":[{"expression":{"id":21824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21820,"name":"min","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21791,"src":"8862:3:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":21821,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21785,"src":"8868:5:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21823,"indexExpression":{"id":21822,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21799,"src":"8874:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8868:8:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"8862:14:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21825,"nodeType":"ExpressionStatement","src":"8862:14:85"},{"expression":{"id":21828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21826,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21788,"src":"8894:5:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21827,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21799,"src":"8902:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8894:9:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21829,"nodeType":"ExpressionStatement","src":"8894:9:85"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21802,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21799,"src":"8771:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":21803,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21785,"src":"8775:5:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8781:6:85","memberName":"length","nodeType":"MemberAccess","src":"8775:12:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8771:16:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21833,"initializationExpression":{"assignments":[21799],"declarations":[{"constant":false,"id":21799,"mutability":"mutable","name":"i","nameLocation":"8764:1:85","nodeType":"VariableDeclaration","scope":21833,"src":"8756:9:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21798,"name":"uint256","nodeType":"ElementaryTypeName","src":"8756:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21801,"initialValue":{"hexValue":"30","id":21800,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8768:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8756:13:85"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8789:3:85","subExpression":{"id":21806,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21799,"src":"8789:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21808,"nodeType":"ExpressionStatement","src":"8789:3:85"},"nodeType":"ForStatement","src":"8751:177:85"}]},"id":21835,"implemented":true,"kind":"function","modifiers":[],"name":"_minPositiveIndex","nameLocation":"8623:17:85","nodeType":"FunctionDefinition","parameters":{"id":21786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21785,"mutability":"mutable","name":"array","nameLocation":"8657:5:85","nodeType":"VariableDeclaration","scope":21835,"src":"8641:21:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21783,"name":"int256","nodeType":"ElementaryTypeName","src":"8641:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21784,"nodeType":"ArrayTypeName","src":"8641:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"8640:23:85"},"returnParameters":{"id":21789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21788,"mutability":"mutable","name":"index","nameLocation":"8695:5:85","nodeType":"VariableDeclaration","scope":21835,"src":"8687:13:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21787,"name":"uint256","nodeType":"ElementaryTypeName","src":"8687:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8686:15:85"},"scope":21889,"src":"8614:320:85","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":21887,"nodeType":"Block","src":"9129:232:85","statements":[{"assignments":[21844],"declarations":[{"constant":false,"id":21844,"mutability":"mutable","name":"max","nameLocation":"9146:3:85","nodeType":"VariableDeclaration","scope":21887,"src":"9139:10:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":21843,"name":"int256","nodeType":"ElementaryTypeName","src":"9139:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":21850,"initialValue":{"expression":{"arguments":[{"id":21847,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9157:6:85","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":21846,"name":"int256","nodeType":"ElementaryTypeName","src":"9157:6:85","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":21845,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9152:4:85","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":21848,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9152:12:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":21849,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9165:3:85","memberName":"min","nodeType":"MemberAccess","src":"9152:16:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"9139:29:85"},{"body":{"id":21885,"nodeType":"Block","src":"9221:134:85","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":21862,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21838,"src":"9239:5:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21864,"indexExpression":{"id":21863,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21852,"src":"9245:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9239:8:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":21865,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9250:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9239:12:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":21867,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21838,"src":"9255:5:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21869,"indexExpression":{"id":21868,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21852,"src":"9261:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9255:8:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":21870,"name":"max","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21844,"src":"9266:3:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9255:14:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9239:30:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21884,"nodeType":"IfStatement","src":"9235:110:85","trueBody":{"id":21883,"nodeType":"Block","src":"9271:74:85","statements":[{"expression":{"id":21877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21873,"name":"max","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21844,"src":"9289:3:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":21874,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21838,"src":"9295:5:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21876,"indexExpression":{"id":21875,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21852,"src":"9301:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9295:8:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9289:14:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21878,"nodeType":"ExpressionStatement","src":"9289:14:85"},{"expression":{"id":21881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21879,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21841,"src":"9321:5:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21880,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21852,"src":"9329:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9321:9:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21882,"nodeType":"ExpressionStatement","src":"9321:9:85"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21855,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21852,"src":"9198:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":21856,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21838,"src":"9202:5:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9208:6:85","memberName":"length","nodeType":"MemberAccess","src":"9202:12:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9198:16:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21886,"initializationExpression":{"assignments":[21852],"declarations":[{"constant":false,"id":21852,"mutability":"mutable","name":"i","nameLocation":"9191:1:85","nodeType":"VariableDeclaration","scope":21886,"src":"9183:9:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21851,"name":"uint256","nodeType":"ElementaryTypeName","src":"9183:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21854,"initialValue":{"hexValue":"30","id":21853,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9195:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9183:13:85"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9216:3:85","subExpression":{"id":21859,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21852,"src":"9216:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21861,"nodeType":"ExpressionStatement","src":"9216:3:85"},"nodeType":"ForStatement","src":"9178:177:85"}]},"id":21888,"implemented":true,"kind":"function","modifiers":[],"name":"_maxNegativeIndex","nameLocation":"9050:17:85","nodeType":"FunctionDefinition","parameters":{"id":21839,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21838,"mutability":"mutable","name":"array","nameLocation":"9084:5:85","nodeType":"VariableDeclaration","scope":21888,"src":"9068:21:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21836,"name":"int256","nodeType":"ElementaryTypeName","src":"9068:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21837,"nodeType":"ArrayTypeName","src":"9068:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"9067:23:85"},"returnParameters":{"id":21842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21841,"mutability":"mutable","name":"index","nameLocation":"9122:5:85","nodeType":"VariableDeclaration","scope":21888,"src":"9114:13:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21840,"name":"uint256","nodeType":"ElementaryTypeName","src":"9114:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9113:15:85"},"scope":21889,"src":"9041:320:85","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":21890,"src":"635:8728:85","usedErrors":[4877,4880,11076,12379,14342,14354,18535],"usedEvents":[]}],"src":"46:9318:85"},"id":85},"contracts/ProtocolFeeHelper.sol":{"ast":{"absolutePath":"contracts/ProtocolFeeHelper.sol","exportedSymbols":{"IProtocolFeeController":[1955],"IProtocolFeeHelper":[968],"IVault":[2545],"PoolHelperCommon":[21059],"ProtocolFeeHelper":[21966]},"id":21967,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":21891,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:86"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol","id":21893,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21967,"sourceUnit":969,"src":"72:116:86","symbolAliases":[{"foreign":{"id":21892,"name":"IProtocolFeeHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":968,"src":"81:18:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":21895,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21967,"sourceUnit":1956,"src":"189:113:86","symbolAliases":[{"foreign":{"id":21894,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"198:22:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":21897,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21967,"sourceUnit":2546,"src":"303:81:86","symbolAliases":[{"foreign":{"id":21896,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"312:6:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/PoolHelperCommon.sol","file":"./PoolHelperCommon.sol","id":21899,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21967,"sourceUnit":21060,"src":"386:58:86","symbolAliases":[{"foreign":{"id":21898,"name":"PoolHelperCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21059,"src":"395:16:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":21900,"name":"IProtocolFeeHelper","nameLocations":["476:18:86"],"nodeType":"IdentifierPath","referencedDeclaration":968,"src":"476:18:86"},"id":21901,"nodeType":"InheritanceSpecifier","src":"476:18:86"},{"baseName":{"id":21902,"name":"PoolHelperCommon","nameLocations":["496:16:86"],"nodeType":"IdentifierPath","referencedDeclaration":21059,"src":"496:16:86"},"id":21903,"nodeType":"InheritanceSpecifier","src":"496:16:86"}],"canonicalName":"ProtocolFeeHelper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":21966,"linearizedBaseContracts":[21966,21059,20330,4385,14,9572,9486,12366,865,968],"name":"ProtocolFeeHelper","nameLocation":"455:17:86","nodeType":"ContractDefinition","nodes":[{"body":{"id":21915,"nodeType":"Block","src":"605:64:86","statements":[]},"id":21916,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":21911,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21906,"src":"584:5:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},{"id":21912,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21908,"src":"591:12:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21913,"kind":"baseConstructorSpecifier","modifierName":{"id":21910,"name":"PoolHelperCommon","nameLocations":["567:16:86"],"nodeType":"IdentifierPath","referencedDeclaration":21059,"src":"567:16:86"},"nodeType":"ModifierInvocation","src":"567:37:86"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":21909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21906,"mutability":"mutable","name":"vault","nameLocation":"538:5:86","nodeType":"VariableDeclaration","scope":21916,"src":"531:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":21905,"nodeType":"UserDefinedTypeName","pathNode":{"id":21904,"name":"IVault","nameLocations":["531:6:86"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"531:6:86"},"referencedDeclaration":2545,"src":"531:6:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":21908,"mutability":"mutable","name":"initialOwner","nameLocation":"553:12:86","nodeType":"VariableDeclaration","scope":21916,"src":"545:20:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21907,"name":"address","nodeType":"ElementaryTypeName","src":"545:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"530:36:86"},"returnParameters":{"id":21914,"nodeType":"ParameterList","parameters":[],"src":"605:0:86"},"scope":21966,"src":"519:150:86","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[959],"body":{"id":21934,"nodeType":"Block","src":"1076:109:86","statements":[{"expression":{"arguments":[{"id":21930,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21919,"src":"1143:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21931,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21921,"src":"1149:28:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":21927,"name":"_getProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21965,"src":"1086:25:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view returns (contract IProtocolFeeController)"}},"id":21928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1086:27:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":21929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1114:28:86","memberName":"setProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1897,"src":"1086:56:86","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":21932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1086:92:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21933,"nodeType":"ExpressionStatement","src":"1086:92:86"}]},"documentation":{"id":21917,"nodeType":"StructuredDocumentation","src":"887:34:86","text":"@inheritdoc IProtocolFeeHelper"},"functionSelector":"fd267f39","id":21935,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":21924,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21919,"src":"1070:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21925,"kind":"modifierInvocation","modifierName":{"id":21923,"name":"withValidPoolForSender","nameLocations":["1047:22:86"],"nodeType":"IdentifierPath","referencedDeclaration":20392,"src":"1047:22:86"},"nodeType":"ModifierInvocation","src":"1047:28:86"}],"name":"setProtocolSwapFeePercentage","nameLocation":"935:28:86","nodeType":"FunctionDefinition","parameters":{"id":21922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21919,"mutability":"mutable","name":"pool","nameLocation":"981:4:86","nodeType":"VariableDeclaration","scope":21935,"src":"973:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21918,"name":"address","nodeType":"ElementaryTypeName","src":"973:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21921,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"1003:28:86","nodeType":"VariableDeclaration","scope":21935,"src":"995:36:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21920,"name":"uint256","nodeType":"ElementaryTypeName","src":"995:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"963:74:86"},"returnParameters":{"id":21926,"nodeType":"ParameterList","parameters":[],"src":"1076:0:86"},"scope":21966,"src":"926:259:86","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[967],"body":{"id":21953,"nodeType":"Block","src":"1382:111:86","statements":[{"expression":{"arguments":[{"id":21949,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21938,"src":"1450:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21950,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21940,"src":"1456:29:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":21946,"name":"_getProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21965,"src":"1392:25:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view returns (contract IProtocolFeeController)"}},"id":21947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1392:27:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":21948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1420:29:86","memberName":"setProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1905,"src":"1392:57:86","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":21951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1392:94:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21952,"nodeType":"ExpressionStatement","src":"1392:94:86"}]},"documentation":{"id":21936,"nodeType":"StructuredDocumentation","src":"1191:34:86","text":"@inheritdoc IProtocolFeeHelper"},"functionSelector":"abaa3356","id":21954,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":21943,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21938,"src":"1376:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21944,"kind":"modifierInvocation","modifierName":{"id":21942,"name":"withValidPoolForSender","nameLocations":["1353:22:86"],"nodeType":"IdentifierPath","referencedDeclaration":20392,"src":"1353:22:86"},"nodeType":"ModifierInvocation","src":"1353:28:86"}],"name":"setProtocolYieldFeePercentage","nameLocation":"1239:29:86","nodeType":"FunctionDefinition","parameters":{"id":21941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21938,"mutability":"mutable","name":"pool","nameLocation":"1286:4:86","nodeType":"VariableDeclaration","scope":21954,"src":"1278:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21937,"name":"address","nodeType":"ElementaryTypeName","src":"1278:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21940,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"1308:29:86","nodeType":"VariableDeclaration","scope":21954,"src":"1300:37:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21939,"name":"uint256","nodeType":"ElementaryTypeName","src":"1300:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1268:75:86"},"returnParameters":{"id":21945,"nodeType":"ParameterList","parameters":[],"src":"1382:0:86"},"scope":21966,"src":"1230:263:86","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":21964,"nodeType":"Block","src":"1925:56:86","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":21960,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"1942:5:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":21961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1948:24:86","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":3794,"src":"1942:30:86","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":21962,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1942:32:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"functionReturnParameters":21959,"id":21963,"nodeType":"Return","src":"1935:39:86"}]},"id":21965,"implemented":true,"kind":"function","modifiers":[],"name":"_getProtocolFeeController","nameLocation":"1850:25:86","nodeType":"FunctionDefinition","parameters":{"id":21955,"nodeType":"ParameterList","parameters":[],"src":"1875:2:86"},"returnParameters":{"id":21959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21958,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21965,"src":"1901:22:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":21957,"nodeType":"UserDefinedTypeName","pathNode":{"id":21956,"name":"IProtocolFeeController","nameLocations":["1901:22:86"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"1901:22:86"},"referencedDeclaration":1955,"src":"1901:22:86","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"1900:24:86"},"scope":21966,"src":"1841:140:86","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":21967,"src":"446:1537:86","usedErrors":[5,711,718,723,726,731,734,739,2857,9352,9357,20215],"usedEvents":[674,681,688,695,704,9363,9501]}],"src":"46:1938:86"},"id":86},"contracts/ProtocolFeePercentagesProvider.sol":{"ast":{"absolutePath":"contracts/ProtocolFeePercentagesProvider.sol","exportedSymbols":{"ContractType":[43],"FEE_SCALING_FACTOR":[4302],"IBalancerContractRegistry":[212],"IBasePoolFactory":[1415],"IProtocolFeeController":[1955],"IProtocolFeePercentagesProvider":[2034],"IVault":[2545],"IVaultErrors":[3202],"ProtocolFeeController":[9230],"ProtocolFeePercentagesProvider":[22329],"SafeCast":[16092],"SingletonAuthentication":[9289]},"id":22330,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":21968,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:87"},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":21970,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":16093,"src":"72:75:87","symbolAliases":[{"foreign":{"id":21969,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"81:8:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":21972,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":1956,"src":"149:113:87","symbolAliases":[{"foreign":{"id":21971,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"158:22:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","id":21974,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":1416,"src":"263:101:87","symbolAliases":[{"foreign":{"id":21973,"name":"IBasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1415,"src":"272:16:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":21976,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":4306,"src":"365:97:87","symbolAliases":[{"foreign":{"id":21975,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4302,"src":"374:18:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol","id":21978,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":2035,"src":"463:135:87","symbolAliases":[{"foreign":{"id":21977,"name":"IProtocolFeePercentagesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2034,"src":"476:31:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","id":21981,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":213,"src":"599:152:87","symbolAliases":[{"foreign":{"id":21979,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":212,"src":"612:25:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":21980,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43,"src":"643:12:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":21983,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":3203,"src":"752:93:87","symbolAliases":[{"foreign":{"id":21982,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"761:12:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":21985,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":2546,"src":"846:81:87","symbolAliases":[{"foreign":{"id":21984,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"855:6:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":21987,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":9290,"src":"929:104:87","symbolAliases":[{"foreign":{"id":21986,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9289,"src":"938:23:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","file":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","id":21989,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":9231,"src":"1034:100:87","symbolAliases":[{"foreign":{"id":21988,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9230,"src":"1043:21:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":21990,"name":"IProtocolFeePercentagesProvider","nameLocations":["1179:31:87"],"nodeType":"IdentifierPath","referencedDeclaration":2034,"src":"1179:31:87"},"id":21991,"nodeType":"InheritanceSpecifier","src":"1179:31:87"},{"baseName":{"id":21992,"name":"SingletonAuthentication","nameLocations":["1212:23:87"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"1212:23:87"},"id":21993,"nodeType":"InheritanceSpecifier","src":"1212:23:87"}],"canonicalName":"ProtocolFeePercentagesProvider","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":22329,"linearizedBaseContracts":[22329,9289,7535,4385,14,2034],"name":"ProtocolFeePercentagesProvider","nameLocation":"1145:30:87","nodeType":"ContractDefinition","nodes":[{"global":false,"id":21996,"libraryName":{"id":21994,"name":"SafeCast","nameLocations":["1248:8:87"],"nodeType":"IdentifierPath","referencedDeclaration":16092,"src":"1248:8:87"},"nodeType":"UsingForDirective","src":"1242:27:87","typeName":{"id":21995,"name":"uint256","nodeType":"ElementaryTypeName","src":"1261:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"canonicalName":"ProtocolFeePercentagesProvider.FactoryProtocolFees","documentation":{"id":21997,"nodeType":"StructuredDocumentation","src":"1275:425:87","text":" @dev Data structure to store default protocol fees by factory. Fee percentages are 18-decimal floating point\n numbers, so we know they fit in 64 bits, allowing the fees to be stored in a single slot.\n @param protocolSwapFee The protocol swap fee\n @param protocolYieldFee The protocol yield fee\n @param areFactoryFeesSet Flag indicating fees have been set (allows zero values)"},"id":22004,"members":[{"constant":false,"id":21999,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"1749:25:87","nodeType":"VariableDeclaration","scope":22004,"src":"1742:32:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":21998,"name":"uint64","nodeType":"ElementaryTypeName","src":"1742:6:87","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":22001,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"1791:26:87","nodeType":"VariableDeclaration","scope":22004,"src":"1784:33:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":22000,"name":"uint64","nodeType":"ElementaryTypeName","src":"1784:6:87","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":22003,"mutability":"mutable","name":"areFactoryFeesSet","nameLocation":"1832:17:87","nodeType":"VariableDeclaration","scope":22004,"src":"1827:22:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22002,"name":"bool","nodeType":"ElementaryTypeName","src":"1827:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"FactoryProtocolFees","nameLocation":"1712:19:87","nodeType":"StructDefinition","scope":22329,"src":"1705:151:87","visibility":"public"},{"constant":false,"id":22007,"mutability":"immutable","name":"_trustedContractRegistry","nameLocation":"1906:24:87","nodeType":"VariableDeclaration","scope":22329,"src":"1862:68:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":22006,"nodeType":"UserDefinedTypeName","pathNode":{"id":22005,"name":"IBalancerContractRegistry","nameLocations":["1862:25:87"],"nodeType":"IdentifierPath","referencedDeclaration":212,"src":"1862:25:87"},"referencedDeclaration":212,"src":"1862:25:87","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"visibility":"private"},{"constant":false,"id":22010,"mutability":"immutable","name":"_protocolFeeController","nameLocation":"1977:22:87","nodeType":"VariableDeclaration","scope":22329,"src":"1936:63:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":22009,"nodeType":"UserDefinedTypeName","pathNode":{"id":22008,"name":"IProtocolFeeController","nameLocations":["1936:22:87"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"1936:22:87"},"referencedDeclaration":1955,"src":"1936:22:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"private"},{"constant":false,"id":22012,"mutability":"immutable","name":"_maxProtocolSwapFeePercentage","nameLocation":"2032:29:87","nodeType":"VariableDeclaration","scope":22329,"src":"2006:55:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22011,"name":"uint256","nodeType":"ElementaryTypeName","src":"2006:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":22014,"mutability":"immutable","name":"_maxProtocolYieldFeePercentage","nameLocation":"2093:30:87","nodeType":"VariableDeclaration","scope":22329,"src":"2067:56:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22013,"name":"uint256","nodeType":"ElementaryTypeName","src":"2067:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":22020,"mutability":"mutable","name":"_factoryDefaultFeePercentages","nameLocation":"2233:29:87","nodeType":"VariableDeclaration","scope":22329,"src":"2176:86:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IBasePoolFactory_$1415_$_t_struct$_FactoryProtocolFees_$22004_storage_$","typeString":"mapping(contract IBasePoolFactory => struct ProtocolFeePercentagesProvider.FactoryProtocolFees)"},"typeName":{"id":22019,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":22016,"nodeType":"UserDefinedTypeName","pathNode":{"id":22015,"name":"IBasePoolFactory","nameLocations":["2184:16:87"],"nodeType":"IdentifierPath","referencedDeclaration":1415,"src":"2184:16:87"},"referencedDeclaration":1415,"src":"2184:16:87","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePoolFactory_$1415","typeString":"contract IBasePoolFactory"}},"nodeType":"Mapping","src":"2176:48:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IBasePoolFactory_$1415_$_t_struct$_FactoryProtocolFees_$22004_storage_$","typeString":"mapping(contract IBasePoolFactory => struct ProtocolFeePercentagesProvider.FactoryProtocolFees)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":22018,"nodeType":"UserDefinedTypeName","pathNode":{"id":22017,"name":"FactoryProtocolFees","nameLocations":["2204:19:87"],"nodeType":"IdentifierPath","referencedDeclaration":22004,"src":"2204:19:87"},"referencedDeclaration":22004,"src":"2204:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_storage_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"}}},"visibility":"private"},{"body":{"id":22069,"nodeType":"Block","src":"2377:576:87","statements":[{"assignments":[22034],"declarations":[{"constant":false,"id":22034,"mutability":"mutable","name":"protocolFeeController","nameLocation":"2410:21:87","nodeType":"VariableDeclaration","scope":22069,"src":"2387:44:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":22033,"nodeType":"UserDefinedTypeName","pathNode":{"id":22032,"name":"IProtocolFeeController","nameLocations":["2387:22:87"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"2387:22:87"},"referencedDeclaration":1955,"src":"2387:22:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"id":22038,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22035,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22023,"src":"2434:5:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":22036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2440:24:87","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":3794,"src":"2434:30:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":22037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2434:32:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"nodeType":"VariableDeclarationStatement","src":"2387:79:87"},{"expression":{"id":22041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22039,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22010,"src":"2477:22:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22040,"name":"protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22034,"src":"2502:21:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"src":"2477:46:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":22042,"nodeType":"ExpressionStatement","src":"2477:46:87"},{"expression":{"id":22045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22043,"name":"_trustedContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22007,"src":"2533:24:87","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22044,"name":"trustedContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22026,"src":"2560:23:87","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"src":"2533:50:87","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"id":22046,"nodeType":"ExpressionStatement","src":"2533:50:87"},{"expression":{"id":22056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22047,"name":"_maxProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22012,"src":"2668:29:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":22051,"name":"protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22034,"src":"2730:21:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}],"id":22050,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2722:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22049,"name":"address","nodeType":"ElementaryTypeName","src":"2722:7:87","typeDescriptions":{}}},"id":22052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2722:30:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22048,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9230,"src":"2700:21:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$9230_$","typeString":"type(contract ProtocolFeeController)"}},"id":22053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2700:53:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$9230","typeString":"contract ProtocolFeeController"}},"id":22054,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2767:32:87","memberName":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nodeType":"MemberAccess","referencedDeclaration":7591,"src":"2700:99:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":22055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2700:101:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2668:133:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22057,"nodeType":"ExpressionStatement","src":"2668:133:87"},{"expression":{"id":22067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22058,"name":"_maxProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22014,"src":"2811:30:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":22062,"name":"protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22034,"src":"2874:21:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}],"id":22061,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2866:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22060,"name":"address","nodeType":"ElementaryTypeName","src":"2866:7:87","typeDescriptions":{}}},"id":22063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2866:30:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22059,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9230,"src":"2844:21:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$9230_$","typeString":"type(contract ProtocolFeeController)"}},"id":22064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2844:53:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$9230","typeString":"contract ProtocolFeeController"}},"id":22065,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2911:33:87","memberName":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nodeType":"MemberAccess","referencedDeclaration":7594,"src":"2844:100:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":22066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2844:102:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2811:135:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22068,"nodeType":"ExpressionStatement","src":"2811:135:87"}]},"id":22070,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":22029,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22023,"src":"2370:5:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"id":22030,"kind":"baseConstructorSpecifier","modifierName":{"id":22028,"name":"SingletonAuthentication","nameLocations":["2346:23:87"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"2346:23:87"},"nodeType":"ModifierInvocation","src":"2346:30:87"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22023,"mutability":"mutable","name":"vault","nameLocation":"2288:5:87","nodeType":"VariableDeclaration","scope":22070,"src":"2281:12:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":22022,"nodeType":"UserDefinedTypeName","pathNode":{"id":22021,"name":"IVault","nameLocations":["2281:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"2281:6:87"},"referencedDeclaration":2545,"src":"2281:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":22026,"mutability":"mutable","name":"trustedContractRegistry","nameLocation":"2321:23:87","nodeType":"VariableDeclaration","scope":22070,"src":"2295:49:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":22025,"nodeType":"UserDefinedTypeName","pathNode":{"id":22024,"name":"IBalancerContractRegistry","nameLocations":["2295:25:87"],"nodeType":"IdentifierPath","referencedDeclaration":212,"src":"2295:25:87"},"referencedDeclaration":212,"src":"2295:25:87","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"visibility":"internal"}],"src":"2280:65:87"},"returnParameters":{"id":22031,"nodeType":"ParameterList","parameters":[],"src":"2377:0:87"},"scope":22329,"src":"2269:684:87","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1997],"body":{"id":22079,"nodeType":"Block","src":"3094:46:87","statements":[{"expression":{"id":22077,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22010,"src":"3111:22:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"functionReturnParameters":22076,"id":22078,"nodeType":"Return","src":"3104:29:87"}]},"documentation":{"id":22071,"nodeType":"StructuredDocumentation","src":"2959:47:87","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"85f2dbd4","id":22080,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"3020:24:87","nodeType":"FunctionDefinition","parameters":{"id":22072,"nodeType":"ParameterList","parameters":[],"src":"3044:2:87"},"returnParameters":{"id":22076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22075,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22080,"src":"3070:22:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":22074,"nodeType":"UserDefinedTypeName","pathNode":{"id":22073,"name":"IProtocolFeeController","nameLocations":["3070:22:87"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"3070:22:87"},"referencedDeclaration":1955,"src":"3070:22:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"3069:24:87"},"scope":22329,"src":"3011:129:87","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2004],"body":{"id":22089,"nodeType":"Block","src":"3287:48:87","statements":[{"expression":{"id":22087,"name":"_trustedContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22007,"src":"3304:24:87","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"functionReturnParameters":22086,"id":22088,"nodeType":"Return","src":"3297:31:87"}]},"documentation":{"id":22081,"nodeType":"StructuredDocumentation","src":"3146:47:87","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"deb27a7a","id":22090,"implemented":true,"kind":"function","modifiers":[],"name":"getBalancerContractRegistry","nameLocation":"3207:27:87","nodeType":"FunctionDefinition","parameters":{"id":22082,"nodeType":"ParameterList","parameters":[],"src":"3234:2:87"},"returnParameters":{"id":22086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22085,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22090,"src":"3260:25:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":22084,"nodeType":"UserDefinedTypeName","pathNode":{"id":22083,"name":"IBalancerContractRegistry","nameLocations":["3260:25:87"],"nodeType":"IdentifierPath","referencedDeclaration":212,"src":"3260:25:87"},"referencedDeclaration":212,"src":"3260:25:87","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"visibility":"internal"}],"src":"3259:27:87"},"scope":22329,"src":"3198:137:87","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2014],"body":{"id":22117,"nodeType":"Block","src":"3568:245:87","statements":[{"assignments":[22102],"declarations":[{"constant":false,"id":22102,"mutability":"mutable","name":"factoryFees","nameLocation":"3605:11:87","nodeType":"VariableDeclaration","scope":22117,"src":"3578:38:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"},"typeName":{"id":22101,"nodeType":"UserDefinedTypeName","pathNode":{"id":22100,"name":"FactoryProtocolFees","nameLocations":["3578:19:87"],"nodeType":"IdentifierPath","referencedDeclaration":22004,"src":"3578:19:87"},"referencedDeclaration":22004,"src":"3578:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_storage_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"}},"visibility":"internal"}],"id":22106,"initialValue":{"arguments":[{"id":22104,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22093,"src":"3645:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22103,"name":"_getValidatedProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22281,"src":"3619:25:87","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_struct$_FactoryProtocolFees_$22004_memory_ptr_$","typeString":"function (address) view returns (struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory)"}},"id":22105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3619:34:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"nodeType":"VariableDeclarationStatement","src":"3578:75:87"},{"expression":{"id":22110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22107,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22096,"src":"3664:25:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":22108,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22102,"src":"3692:11:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":22109,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3704:25:87","memberName":"protocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":21999,"src":"3692:37:87","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"3664:65:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22111,"nodeType":"ExpressionStatement","src":"3664:65:87"},{"expression":{"id":22115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22112,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22098,"src":"3739:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":22113,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22102,"src":"3768:11:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":22114,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3780:26:87","memberName":"protocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":22001,"src":"3768:38:87","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"3739:67:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22116,"nodeType":"ExpressionStatement","src":"3739:67:87"}]},"documentation":{"id":22091,"nodeType":"StructuredDocumentation","src":"3341:47:87","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"f2c24ec8","id":22118,"implemented":true,"kind":"function","modifiers":[],"name":"getFactorySpecificProtocolFeePercentages","nameLocation":"3402:40:87","nodeType":"FunctionDefinition","parameters":{"id":22094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22093,"mutability":"mutable","name":"factory","nameLocation":"3460:7:87","nodeType":"VariableDeclaration","scope":22118,"src":"3452:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22092,"name":"address","nodeType":"ElementaryTypeName","src":"3452:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3442:31:87"},"returnParameters":{"id":22099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22096,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"3505:25:87","nodeType":"VariableDeclaration","scope":22118,"src":"3497:33:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22095,"name":"uint256","nodeType":"ElementaryTypeName","src":"3497:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22098,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"3540:26:87","nodeType":"VariableDeclaration","scope":22118,"src":"3532:34:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22097,"name":"uint256","nodeType":"ElementaryTypeName","src":"3532:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3496:71:87"},"scope":22329,"src":"3393:420:87","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2024],"body":{"id":22194,"nodeType":"Block","src":"4061:1303:87","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22130,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22123,"src":"4180:25:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":22131,"name":"_maxProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22012,"src":"4208:29:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4180:57:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22139,"nodeType":"IfStatement","src":"4176:152:87","trueBody":{"id":22138,"nodeType":"Block","src":"4239:89:87","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22133,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"4260:22:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$1955_$","typeString":"type(contract IProtocolFeeController)"}},"id":22135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4283:32:87","memberName":"ProtocolSwapFeePercentageTooHigh","nodeType":"MemberAccess","referencedDeclaration":1736,"src":"4260:55:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4260:57:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22137,"nodeType":"RevertStatement","src":"4253:64:87"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22140,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22125,"src":"4342:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":22141,"name":"_maxProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22014,"src":"4371:30:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4342:59:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22149,"nodeType":"IfStatement","src":"4338:155:87","trueBody":{"id":22148,"nodeType":"Block","src":"4403:90:87","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22143,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"4424:22:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$1955_$","typeString":"type(contract IProtocolFeeController)"}},"id":22145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4447:33:87","memberName":"ProtocolYieldFeePercentageTooHigh","nodeType":"MemberAccess","referencedDeclaration":1739,"src":"4424:56:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4424:58:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22147,"nodeType":"RevertStatement","src":"4417:65:87"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":22152,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43,"src":"4597:12:87","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ContractType_$43_$","typeString":"type(enum ContractType)"}},"id":22153,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4610:12:87","memberName":"POOL_FACTORY","nodeType":"MemberAccess","referencedDeclaration":39,"src":"4597:25:87","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":22154,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22121,"src":"4624:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22150,"name":"_trustedContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22007,"src":"4547:24:87","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"id":22151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4572:24:87","memberName":"isActiveBalancerContract","nodeType":"MemberAccess","referencedDeclaration":181,"src":"4547:49:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_enum$_ContractType_$43_$_t_address_$returns$_t_bool_$","typeString":"function (enum ContractType,address) view external returns (bool)"}},"id":22155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4547:85:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":22156,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4636:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"4547:94:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22163,"nodeType":"IfStatement","src":"4543:155:87","trueBody":{"id":22162,"nodeType":"Block","src":"4643:55:87","statements":[{"errorCall":{"arguments":[{"id":22159,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22121,"src":"4679:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22158,"name":"UnknownFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1978,"src":"4664:14:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":22160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4664:23:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22161,"nodeType":"RevertStatement","src":"4657:30:87"}]}},{"expression":{"arguments":[{"id":22165,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22123,"src":"4776:25:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22164,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22328,"src":"4754:21:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":22166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4754:48:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22167,"nodeType":"ExpressionStatement","src":"4754:48:87"},{"expression":{"arguments":[{"id":22169,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22125,"src":"4834:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22168,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22328,"src":"4812:21:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":22170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4812:49:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22171,"nodeType":"ExpressionStatement","src":"4812:49:87"},{"expression":{"id":22186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":22172,"name":"_factoryDefaultFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22020,"src":"4954:29:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IBasePoolFactory_$1415_$_t_struct$_FactoryProtocolFees_$22004_storage_$","typeString":"mapping(contract IBasePoolFactory => struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref)"}},"id":22176,"indexExpression":{"arguments":[{"id":22174,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22121,"src":"5001:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22173,"name":"IBasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1415,"src":"4984:16:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePoolFactory_$1415_$","typeString":"type(contract IBasePoolFactory)"}},"id":22175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4984:25:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePoolFactory_$1415","typeString":"contract IBasePoolFactory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4954:56:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_storage","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22178,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22123,"src":"5074:25:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5100:8:87","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15026,"src":"5074:34:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":22180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5074:36:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22181,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22125,"src":"5152:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5179:8:87","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15026,"src":"5152:35:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":22183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5152:37:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"hexValue":"74727565","id":22184,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5222:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":22177,"name":"FactoryProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22004,"src":"5013:19:87","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_FactoryProtocolFees_$22004_storage_ptr_$","typeString":"type(struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage pointer)"}},"id":22185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["5047:25:87","5124:26:87","5203:17:87"],"names":["protocolSwapFeePercentage","protocolYieldFeePercentage","areFactoryFeesSet"],"nodeType":"FunctionCall","src":"5013:224:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"src":"4954:283:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_storage","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref"}},"id":22187,"nodeType":"ExpressionStatement","src":"4954:283:87"},{"eventCall":{"arguments":[{"id":22189,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22121,"src":"5294:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22190,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22123,"src":"5303:25:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22191,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22125,"src":"5330:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22188,"name":"FactorySpecificProtocolFeePercentagesSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1970,"src":"5253:40:87","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":22192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5253:104:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22193,"nodeType":"EmitStatement","src":"5248:109:87"}]},"documentation":{"id":22119,"nodeType":"StructuredDocumentation","src":"3819:47:87","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"00859689","id":22195,"implemented":true,"kind":"function","modifiers":[{"id":22128,"kind":"modifierInvocation","modifierName":{"id":22127,"name":"authenticate","nameLocations":["4048:12:87"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"4048:12:87"},"nodeType":"ModifierInvocation","src":"4048:12:87"}],"name":"setFactorySpecificProtocolFeePercentages","nameLocation":"3880:40:87","nodeType":"FunctionDefinition","parameters":{"id":22126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22121,"mutability":"mutable","name":"factory","nameLocation":"3938:7:87","nodeType":"VariableDeclaration","scope":22195,"src":"3930:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22120,"name":"address","nodeType":"ElementaryTypeName","src":"3930:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22123,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"3963:25:87","nodeType":"VariableDeclaration","scope":22195,"src":"3955:33:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22122,"name":"uint256","nodeType":"ElementaryTypeName","src":"3955:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22125,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"4006:26:87","nodeType":"VariableDeclaration","scope":22195,"src":"3998:34:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22124,"name":"uint256","nodeType":"ElementaryTypeName","src":"3998:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3920:118:87"},"returnParameters":{"id":22129,"nodeType":"ParameterList","parameters":[],"src":"4061:0:87"},"scope":22329,"src":"3871:1493:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2033],"body":{"id":22253,"nodeType":"Block","src":"5515:1005:87","statements":[{"assignments":[22206],"declarations":[{"constant":false,"id":22206,"mutability":"mutable","name":"factoryFees","nameLocation":"5848:11:87","nodeType":"VariableDeclaration","scope":22253,"src":"5821:38:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"},"typeName":{"id":22205,"nodeType":"UserDefinedTypeName","pathNode":{"id":22204,"name":"FactoryProtocolFees","nameLocations":["5821:19:87"],"nodeType":"IdentifierPath","referencedDeclaration":22004,"src":"5821:19:87"},"referencedDeclaration":22004,"src":"5821:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_storage_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"}},"visibility":"internal"}],"id":22210,"initialValue":{"arguments":[{"id":22208,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22198,"src":"5888:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22207,"name":"_getValidatedProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22281,"src":"5862:25:87","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_struct$_FactoryProtocolFees_$22004_memory_ptr_$","typeString":"function (address) view returns (struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory)"}},"id":22209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5862:34:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"nodeType":"VariableDeclarationStatement","src":"5821:75:87"},{"body":{"id":22251,"nodeType":"Block","src":"5950:564:87","statements":[{"assignments":[22223],"declarations":[{"constant":false,"id":22223,"mutability":"mutable","name":"currentPool","nameLocation":"5972:11:87","nodeType":"VariableDeclaration","scope":22251,"src":"5964:19:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22222,"name":"address","nodeType":"ElementaryTypeName","src":"5964:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":22227,"initialValue":{"baseExpression":{"id":22224,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22201,"src":"5986:5:87","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":22226,"indexExpression":{"id":22225,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22212,"src":"5992:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5986:8:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5964:30:87"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":22232,"name":"currentPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22223,"src":"6212:11:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":22229,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22198,"src":"6185:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22228,"name":"IBasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1415,"src":"6168:16:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePoolFactory_$1415_$","typeString":"type(contract IBasePoolFactory)"}},"id":22230,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6168:25:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePoolFactory_$1415","typeString":"contract IBasePoolFactory"}},"id":22231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6194:17:87","memberName":"isPoolFromFactory","nodeType":"MemberAccess","referencedDeclaration":1370,"src":"6168:43:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":22233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6168:56:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":22234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6228:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"6168:65:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22242,"nodeType":"IfStatement","src":"6164:151:87","trueBody":{"id":22241,"nodeType":"Block","src":"6235:80:87","statements":[{"errorCall":{"arguments":[{"id":22237,"name":"currentPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22223,"src":"6279:11:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22238,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22198,"src":"6292:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":22236,"name":"PoolNotFromFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1990,"src":"6260:18:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address) pure returns (error)"}},"id":22239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6260:40:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22240,"nodeType":"RevertStatement","src":"6253:47:87"}]}},{"expression":{"arguments":[{"id":22244,"name":"currentPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22223,"src":"6367:11:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":22245,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22206,"src":"6396:11:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":22246,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6408:25:87","memberName":"protocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":21999,"src":"6396:37:87","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":22247,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22206,"src":"6451:11:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":22248,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6463:26:87","memberName":"protocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":22001,"src":"6451:38:87","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":22243,"name":"_setPoolProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22306,"src":"6329:20:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":22249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6329:174:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22250,"nodeType":"ExpressionStatement","src":"6329:174:87"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22215,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22212,"src":"5927:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":22216,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22201,"src":"5931:5:87","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":22217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5937:6:87","memberName":"length","nodeType":"MemberAccess","src":"5931:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5927:16:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22252,"initializationExpression":{"assignments":[22212],"declarations":[{"constant":false,"id":22212,"mutability":"mutable","name":"i","nameLocation":"5920:1:87","nodeType":"VariableDeclaration","scope":22252,"src":"5912:9:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22211,"name":"uint256","nodeType":"ElementaryTypeName","src":"5912:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22214,"initialValue":{"hexValue":"30","id":22213,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5924:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5912:13:87"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":22220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5945:3:87","subExpression":{"id":22219,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22212,"src":"5947:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22221,"nodeType":"ExpressionStatement","src":"5945:3:87"},"nodeType":"ForStatement","src":"5907:607:87"}]},"documentation":{"id":22196,"nodeType":"StructuredDocumentation","src":"5370:47:87","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"344b12d5","id":22254,"implemented":true,"kind":"function","modifiers":[],"name":"setProtocolFeePercentagesForPools","nameLocation":"5431:33:87","nodeType":"FunctionDefinition","parameters":{"id":22202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22198,"mutability":"mutable","name":"factory","nameLocation":"5473:7:87","nodeType":"VariableDeclaration","scope":22254,"src":"5465:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22197,"name":"address","nodeType":"ElementaryTypeName","src":"5465:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22201,"mutability":"mutable","name":"pools","nameLocation":"5499:5:87","nodeType":"VariableDeclaration","scope":22254,"src":"5482:22:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":22199,"name":"address","nodeType":"ElementaryTypeName","src":"5482:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":22200,"nodeType":"ArrayTypeName","src":"5482:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5464:41:87"},"returnParameters":{"id":22203,"nodeType":"ParameterList","parameters":[],"src":"5515:0:87"},"scope":22329,"src":"5422:1098:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":22280,"nodeType":"Block","src":"6640:199:87","statements":[{"expression":{"id":22268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22262,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22260,"src":"6650:11:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":22263,"name":"_factoryDefaultFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22020,"src":"6664:29:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IBasePoolFactory_$1415_$_t_struct$_FactoryProtocolFees_$22004_storage_$","typeString":"mapping(contract IBasePoolFactory => struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref)"}},"id":22267,"indexExpression":{"arguments":[{"id":22265,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22256,"src":"6711:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22264,"name":"IBasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1415,"src":"6694:16:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePoolFactory_$1415_$","typeString":"type(contract IBasePoolFactory)"}},"id":22266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6694:25:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePoolFactory_$1415","typeString":"contract IBasePoolFactory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6664:56:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_storage","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref"}},"src":"6650:70:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":22269,"nodeType":"ExpressionStatement","src":"6650:70:87"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22270,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22260,"src":"6735:11:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":22271,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6747:17:87","memberName":"areFactoryFeesSet","nodeType":"MemberAccess","referencedDeclaration":22003,"src":"6735:29:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":22272,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6768:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"6735:38:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22279,"nodeType":"IfStatement","src":"6731:102:87","trueBody":{"id":22278,"nodeType":"Block","src":"6775:58:87","statements":[{"errorCall":{"arguments":[{"id":22275,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22256,"src":"6814:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22274,"name":"FactoryFeesNotSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1983,"src":"6796:17:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":22276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6796:26:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22277,"nodeType":"RevertStatement","src":"6789:33:87"}]}}]},"id":22281,"implemented":true,"kind":"function","modifiers":[],"name":"_getValidatedProtocolFees","nameLocation":"6535:25:87","nodeType":"FunctionDefinition","parameters":{"id":22257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22256,"mutability":"mutable","name":"factory","nameLocation":"6569:7:87","nodeType":"VariableDeclaration","scope":22281,"src":"6561:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22255,"name":"address","nodeType":"ElementaryTypeName","src":"6561:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6560:17:87"},"returnParameters":{"id":22261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22260,"mutability":"mutable","name":"factoryFees","nameLocation":"6627:11:87","nodeType":"VariableDeclaration","scope":22281,"src":"6600:38:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"},"typeName":{"id":22259,"nodeType":"UserDefinedTypeName","pathNode":{"id":22258,"name":"FactoryProtocolFees","nameLocations":["6600:19:87"],"nodeType":"IdentifierPath","referencedDeclaration":22004,"src":"6600:19:87"},"referencedDeclaration":22004,"src":"6600:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_storage_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"}},"visibility":"internal"}],"src":"6599:40:87"},"scope":22329,"src":"6526:313:87","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":22305,"nodeType":"Block","src":"7217:197:87","statements":[{"expression":{"arguments":[{"id":22294,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22284,"src":"7279:4:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22295,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22286,"src":"7285:25:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22291,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22010,"src":"7227:22:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":22293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7250:28:87","memberName":"setProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1897,"src":"7227:51:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":22296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7227:84:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22297,"nodeType":"ExpressionStatement","src":"7227:84:87"},{"expression":{"arguments":[{"id":22301,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22284,"src":"7374:4:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22302,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22288,"src":"7380:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22298,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22010,"src":"7321:22:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":22300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7344:29:87","memberName":"setProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1905,"src":"7321:52:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":22303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7321:86:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22304,"nodeType":"ExpressionStatement","src":"7321:86:87"}]},"documentation":{"id":22282,"nodeType":"StructuredDocumentation","src":"6845:214:87","text":" @dev These are permissioned functions on `ProtocolFeeController`, so governance will need to allow this contract\n to call `setProtocolSwapFeePercentage` and `setProtocolYieldFeePercentage`."},"id":22306,"implemented":true,"kind":"function","modifiers":[],"name":"_setPoolProtocolFees","nameLocation":"7073:20:87","nodeType":"FunctionDefinition","parameters":{"id":22289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22284,"mutability":"mutable","name":"pool","nameLocation":"7111:4:87","nodeType":"VariableDeclaration","scope":22306,"src":"7103:12:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22283,"name":"address","nodeType":"ElementaryTypeName","src":"7103:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22286,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"7133:25:87","nodeType":"VariableDeclaration","scope":22306,"src":"7125:33:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22285,"name":"uint256","nodeType":"ElementaryTypeName","src":"7125:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22288,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"7176:26:87","nodeType":"VariableDeclaration","scope":22306,"src":"7168:34:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22287,"name":"uint256","nodeType":"ElementaryTypeName","src":"7168:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7093:115:87"},"returnParameters":{"id":22290,"nodeType":"ParameterList","parameters":[],"src":"7217:0:87"},"scope":22329,"src":"7064:350:87","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":22327,"nodeType":"Block","src":"7661:682:87","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22312,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22309,"src":"8196:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":22313,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4302,"src":"8212:18:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8196:34:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22315,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8195:36:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":22316,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4302,"src":"8234:18:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8195:57:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":22318,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22309,"src":"8256:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8195:74:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22326,"nodeType":"IfStatement","src":"8191:146:87","trueBody":{"id":22325,"nodeType":"Block","src":"8271:66:87","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22320,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"8292:12:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3202_$","typeString":"type(contract IVaultErrors)"}},"id":22322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8305:19:87","memberName":"FeePrecisionTooHigh","nodeType":"MemberAccess","referencedDeclaration":3050,"src":"8292:32:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8292:34:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22324,"nodeType":"RevertStatement","src":"8285:41:87"}]}}]},"documentation":{"id":22307,"nodeType":"StructuredDocumentation","src":"7420:169:87","text":" @dev This is a duplicate of the corresponding function in `ProtocolFeeController`, as it isn't exposed in the\n deployed version of the contract."},"id":22328,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidPrecision","nameLocation":"7603:21:87","nodeType":"FunctionDefinition","parameters":{"id":22310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22309,"mutability":"mutable","name":"feePercentage","nameLocation":"7633:13:87","nodeType":"VariableDeclaration","scope":22328,"src":"7625:21:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22308,"name":"uint256","nodeType":"ElementaryTypeName","src":"7625:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7624:23:87"},"returnParameters":{"id":22311,"nodeType":"ParameterList","parameters":[],"src":"7661:0:87"},"scope":22329,"src":"7594:749:87","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":22330,"src":"1136:7209:87","usedErrors":[5,1736,1739,1973,1978,1983,1990,3050,7355,14337],"usedEvents":[1970]}],"src":"46:8300:87"},"id":87},"contracts/ProtocolFeeSweeper.sol":{"ast":{"absolutePath":"contracts/ProtocolFeeSweeper.sol","exportedSymbols":{"IERC20":[10576],"IERC4626":[9846],"IProtocolFeeBurner":[948],"IProtocolFeeController":[1955],"IProtocolFeeSweeper":[1137],"IVault":[2545],"ProtocolFeeSweeper":[23007],"ReentrancyGuardTransient":[7012],"SafeERC20":[11066],"SingletonAuthentication":[9289]},"id":23008,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":22331,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:88"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":22333,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23008,"sourceUnit":11067,"src":"72:84:88","symbolAliases":[{"foreign":{"id":22332,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11066,"src":"81:9:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":22335,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23008,"sourceUnit":9847,"src":"157:75:88","symbolAliases":[{"foreign":{"id":22334,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"166:8:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":22337,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23008,"sourceUnit":10577,"src":"233:72:88","symbolAliases":[{"foreign":{"id":22336,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"242:6:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":22339,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23008,"sourceUnit":1138,"src":"307:118:88","symbolAliases":[{"foreign":{"id":22338,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1137,"src":"316:19:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","id":22341,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23008,"sourceUnit":949,"src":"426:116:88","symbolAliases":[{"foreign":{"id":22340,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"435:18:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":22343,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23008,"sourceUnit":1956,"src":"543:113:88","symbolAliases":[{"foreign":{"id":22342,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"552:22:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":22345,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23008,"sourceUnit":2546,"src":"657:81:88","symbolAliases":[{"foreign":{"id":22344,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"666:6:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":22347,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23008,"sourceUnit":9290,"src":"740:104:88","symbolAliases":[{"foreign":{"id":22346,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9289,"src":"749:23:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":22349,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23008,"sourceUnit":7013,"src":"845:132:88","symbolAliases":[{"foreign":{"id":22348,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7012,"src":"858:24:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":22351,"name":"IProtocolFeeSweeper","nameLocations":["1744:19:88"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"1744:19:88"},"id":22352,"nodeType":"InheritanceSpecifier","src":"1744:19:88"},{"baseName":{"id":22353,"name":"SingletonAuthentication","nameLocations":["1765:23:88"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"1765:23:88"},"id":22354,"nodeType":"InheritanceSpecifier","src":"1765:23:88"},{"baseName":{"id":22355,"name":"ReentrancyGuardTransient","nameLocations":["1790:24:88"],"nodeType":"IdentifierPath","referencedDeclaration":7012,"src":"1790:24:88"},"id":22356,"nodeType":"InheritanceSpecifier","src":"1790:24:88"}],"canonicalName":"ProtocolFeeSweeper","contractDependencies":[],"contractKind":"contract","documentation":{"id":22350,"nodeType":"StructuredDocumentation","src":"979:733:88","text":" @notice Withdraw protocol fees, convert them to a target token, and forward to a recipient.\n @dev This withdraws all protocol fees previously collected and allocated to the protocol by the\n `ProtocolFeeController`, processes them with a configurable \"burner\" (e.g., from CowSwap) and forwards them to\n a recipient address.\n An off-chain process can call `collectAggregateFees(pool)` on the fee controller for a given pool, which will\n collect and allocate the fees to the protocol and pool creator. `getProtocolFeeAmounts(pool)` returns the fee\n amounts available for withdrawal. If these are great enough, `sweepProtocolFeesForToken` here will withdraw,\n convert, and forward them to the final recipient."},"fullyImplemented":true,"id":23007,"linearizedBaseContracts":[23007,7012,9289,7535,4385,14,1137],"name":"ProtocolFeeSweeper","nameLocation":"1722:18:88","nodeType":"ContractDefinition","nodes":[{"global":false,"id":22360,"libraryName":{"id":22357,"name":"SafeERC20","nameLocations":["1827:9:88"],"nodeType":"IdentifierPath","referencedDeclaration":11066,"src":"1827:9:88"},"nodeType":"UsingForDirective","src":"1821:27:88","typeName":{"id":22359,"nodeType":"UserDefinedTypeName","pathNode":{"id":22358,"name":"IERC20","nameLocations":["1841:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1841:6:88"},"referencedDeclaration":10576,"src":"1841:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}},{"documentation":{"id":22361,"nodeType":"StructuredDocumentation","src":"1854:78:88","text":"@notice All pool tokens are ERC20, so this contract should not handle ETH."},"errorSelector":"f2238896","id":22363,"name":"CannotReceiveEth","nameLocation":"1943:16:88","nodeType":"ErrorDefinition","parameters":{"id":22362,"nodeType":"ParameterList","parameters":[],"src":"1959:2:88"},"src":"1937:25:88"},{"constant":false,"id":22366,"mutability":"mutable","name":"_targetToken","nameLocation":"2094:12:88","nodeType":"VariableDeclaration","scope":23007,"src":"2079:27:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":22365,"nodeType":"UserDefinedTypeName","pathNode":{"id":22364,"name":"IERC20","nameLocations":["2079:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2079:6:88"},"referencedDeclaration":10576,"src":"2079:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"private"},{"constant":false,"id":22368,"mutability":"mutable","name":"_feeRecipient","nameLocation":"2186:13:88","nodeType":"VariableDeclaration","scope":23007,"src":"2170:29:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22367,"name":"address","nodeType":"ElementaryTypeName","src":"2170:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":22373,"mutability":"mutable","name":"_protocolFeeBurners","nameLocation":"2319:19:88","nodeType":"VariableDeclaration","scope":23007,"src":"2254:84:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"},"typeName":{"id":22372,"keyName":"feeBurner","keyNameLocation":"2281:9:88","keyType":{"id":22370,"nodeType":"UserDefinedTypeName","pathNode":{"id":22369,"name":"IProtocolFeeBurner","nameLocations":["2262:18:88"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"2262:18:88"},"referencedDeclaration":948,"src":"2262:18:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"nodeType":"Mapping","src":"2254:56:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"},"valueName":"isApproved","valueNameLocation":"2299:10:88","valueType":{"id":22371,"name":"bool","nodeType":"ElementaryTypeName","src":"2294:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"private"},{"body":{"id":22385,"nodeType":"Block","src":"2481:84:88","statements":[{"expression":{"arguments":[{"arguments":[{"id":22379,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2526:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}],"id":22378,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2518:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22377,"name":"address","nodeType":"ElementaryTypeName","src":"2518:7:88","typeDescriptions":{}}},"id":22380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2518:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22381,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22368,"src":"2533:13:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":22376,"name":"_ensureAuthenticatedByRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7534,"src":"2491:26:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) view"}},"id":22382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2491:56:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22383,"nodeType":"ExpressionStatement","src":"2491:56:88"},{"id":22384,"nodeType":"PlaceholderStatement","src":"2557:1:88"}]},"documentation":{"id":22374,"nodeType":"StructuredDocumentation","src":"2345:91:88","text":"@notice Allows calls from fee recipient or governance allowed accounts (non-exclusive)."},"id":22386,"name":"onlyFeeRecipientOrGovernance","nameLocation":"2450:28:88","nodeType":"ModifierDefinition","parameters":{"id":22375,"nodeType":"ParameterList","parameters":[],"src":"2478:2:88"},"src":"2441:124:88","virtual":false,"visibility":"internal"},{"body":{"id":22401,"nodeType":"Block","src":"2751:47:88","statements":[{"expression":{"arguments":[{"id":22398,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22391,"src":"2778:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22397,"name":"_setFeeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22815,"src":"2761:16:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":22399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2761:30:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22400,"nodeType":"ExpressionStatement","src":"2761:30:88"}]},"id":22402,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":22394,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22389,"src":"2744:5:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"id":22395,"kind":"baseConstructorSpecifier","modifierName":{"id":22393,"name":"SingletonAuthentication","nameLocations":["2720:23:88"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"2720:23:88"},"nodeType":"ModifierInvocation","src":"2720:30:88"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22389,"mutability":"mutable","name":"vault","nameLocation":"2691:5:88","nodeType":"VariableDeclaration","scope":22402,"src":"2684:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":22388,"nodeType":"UserDefinedTypeName","pathNode":{"id":22387,"name":"IVault","nameLocations":["2684:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"2684:6:88"},"referencedDeclaration":2545,"src":"2684:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":22391,"mutability":"mutable","name":"feeRecipient","nameLocation":"2706:12:88","nodeType":"VariableDeclaration","scope":22402,"src":"2698:20:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22390,"name":"address","nodeType":"ElementaryTypeName","src":"2698:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2683:36:88"},"returnParameters":{"id":22396,"nodeType":"ParameterList","parameters":[],"src":"2751:0:88"},"scope":23007,"src":"2672:126:88","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1057],"body":{"id":22431,"nodeType":"Block","src":"3088:112:88","statements":[{"expression":{"arguments":[{"id":22423,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22405,"src":"3125:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22424,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22408,"src":"3131:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":22425,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22410,"src":"3141:23:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22426,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22412,"src":"3166:8:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22427,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22415,"src":"3176:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},{"hexValue":"66616c7365","id":22428,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3187:5:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":22422,"name":"_sweepProtocolFeesForToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22650,"src":"3098:26:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_uint256_$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,uint256,contract IProtocolFeeBurner,bool)"}},"id":22429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3098:95:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22430,"nodeType":"ExpressionStatement","src":"3098:95:88"}]},"documentation":{"id":22403,"nodeType":"StructuredDocumentation","src":"2804:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"b9746995","id":22432,"implemented":true,"kind":"function","modifiers":[{"id":22418,"kind":"modifierInvocation","modifierName":{"id":22417,"name":"nonReentrant","nameLocations":["3046:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":6967,"src":"3046:12:88"},"nodeType":"ModifierInvocation","src":"3046:12:88"},{"id":22420,"kind":"modifierInvocation","modifierName":{"id":22419,"name":"onlyFeeRecipientOrGovernance","nameLocations":["3059:28:88"],"nodeType":"IdentifierPath","referencedDeclaration":22386,"src":"3059:28:88"},"nodeType":"ModifierInvocation","src":"3059:28:88"}],"name":"sweepProtocolFeesForToken","nameLocation":"2853:25:88","nodeType":"FunctionDefinition","parameters":{"id":22416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22405,"mutability":"mutable","name":"pool","nameLocation":"2896:4:88","nodeType":"VariableDeclaration","scope":22432,"src":"2888:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22404,"name":"address","nodeType":"ElementaryTypeName","src":"2888:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22408,"mutability":"mutable","name":"feeToken","nameLocation":"2917:8:88","nodeType":"VariableDeclaration","scope":22432,"src":"2910:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":22407,"nodeType":"UserDefinedTypeName","pathNode":{"id":22406,"name":"IERC20","nameLocations":["2910:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2910:6:88"},"referencedDeclaration":10576,"src":"2910:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":22410,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"2943:23:88","nodeType":"VariableDeclaration","scope":22432,"src":"2935:31:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22409,"name":"uint256","nodeType":"ElementaryTypeName","src":"2935:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22412,"mutability":"mutable","name":"deadline","nameLocation":"2984:8:88","nodeType":"VariableDeclaration","scope":22432,"src":"2976:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22411,"name":"uint256","nodeType":"ElementaryTypeName","src":"2976:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22415,"mutability":"mutable","name":"feeBurner","nameLocation":"3021:9:88","nodeType":"VariableDeclaration","scope":22432,"src":"3002:28:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":22414,"nodeType":"UserDefinedTypeName","pathNode":{"id":22413,"name":"IProtocolFeeBurner","nameLocations":["3002:18:88"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"3002:18:88"},"referencedDeclaration":948,"src":"3002:18:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"2878:158:88"},"returnParameters":{"id":22421,"nodeType":"ParameterList","parameters":[],"src":"3088:0:88"},"scope":23007,"src":"2844:356:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1073],"body":{"id":22466,"nodeType":"Block","src":"3499:128:88","statements":[{"expression":{"arguments":[{"id":22453,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22435,"src":"3536:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":22457,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22438,"src":"3557:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"id":22456,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3549:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22455,"name":"address","nodeType":"ElementaryTypeName","src":"3549:7:88","typeDescriptions":{}}},"id":22458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3549:17:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22454,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"3542:6:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10576_$","typeString":"type(contract IERC20)"}},"id":22459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3542:25:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":22460,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22440,"src":"3569:23:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22461,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22442,"src":"3594:8:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22462,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22445,"src":"3604:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},{"hexValue":"74727565","id":22463,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3615:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":22452,"name":"_sweepProtocolFeesForToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22650,"src":"3509:26:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_uint256_$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,uint256,contract IProtocolFeeBurner,bool)"}},"id":22464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3509:111:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22465,"nodeType":"ExpressionStatement","src":"3509:111:88"}]},"documentation":{"id":22433,"nodeType":"StructuredDocumentation","src":"3206:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"88f6d2a4","id":22467,"implemented":true,"kind":"function","modifiers":[{"id":22448,"kind":"modifierInvocation","modifierName":{"id":22447,"name":"nonReentrant","nameLocations":["3457:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":6967,"src":"3457:12:88"},"nodeType":"ModifierInvocation","src":"3457:12:88"},{"id":22450,"kind":"modifierInvocation","modifierName":{"id":22449,"name":"onlyFeeRecipientOrGovernance","nameLocations":["3470:28:88"],"nodeType":"IdentifierPath","referencedDeclaration":22386,"src":"3470:28:88"},"nodeType":"ModifierInvocation","src":"3470:28:88"}],"name":"sweepProtocolFeesForWrappedToken","nameLocation":"3255:32:88","nodeType":"FunctionDefinition","parameters":{"id":22446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22435,"mutability":"mutable","name":"pool","nameLocation":"3305:4:88","nodeType":"VariableDeclaration","scope":22467,"src":"3297:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22434,"name":"address","nodeType":"ElementaryTypeName","src":"3297:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22438,"mutability":"mutable","name":"feeToken","nameLocation":"3328:8:88","nodeType":"VariableDeclaration","scope":22467,"src":"3319:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":22437,"nodeType":"UserDefinedTypeName","pathNode":{"id":22436,"name":"IERC4626","nameLocations":["3319:8:88"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"3319:8:88"},"referencedDeclaration":9846,"src":"3319:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":22440,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"3354:23:88","nodeType":"VariableDeclaration","scope":22467,"src":"3346:31:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22439,"name":"uint256","nodeType":"ElementaryTypeName","src":"3346:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22442,"mutability":"mutable","name":"deadline","nameLocation":"3395:8:88","nodeType":"VariableDeclaration","scope":22467,"src":"3387:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22441,"name":"uint256","nodeType":"ElementaryTypeName","src":"3387:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22445,"mutability":"mutable","name":"feeBurner","nameLocation":"3432:9:88","nodeType":"VariableDeclaration","scope":22467,"src":"3413:28:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":22444,"nodeType":"UserDefinedTypeName","pathNode":{"id":22443,"name":"IProtocolFeeBurner","nameLocations":["3413:18:88"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"3413:18:88"},"referencedDeclaration":948,"src":"3413:18:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"3287:160:88"},"returnParameters":{"id":22451,"nodeType":"ParameterList","parameters":[],"src":"3499:0:88"},"scope":23007,"src":"3246:381:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":22649,"nodeType":"Block","src":"3863:2820:88","statements":[{"assignments":[22485],"declarations":[{"constant":false,"id":22485,"mutability":"mutable","name":"feeBurnerProvided","nameLocation":"3878:17:88","nodeType":"VariableDeclaration","scope":22649,"src":"3873:22:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22484,"name":"bool","nodeType":"ElementaryTypeName","src":"3873:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":22489,"initialValue":{"arguments":[{"id":22487,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22479,"src":"3917:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22486,"name":"_getValidFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22701,"src":"3898:18:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IProtocolFeeBurner_$948_$returns$_t_bool_$","typeString":"function (contract IProtocolFeeBurner) view returns (bool)"}},"id":22488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3898:29:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3873:54:88"},{"assignments":[22491],"declarations":[{"constant":false,"id":22491,"mutability":"mutable","name":"existingBalance","nameLocation":"3946:15:88","nodeType":"VariableDeclaration","scope":22649,"src":"3938:23:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22490,"name":"uint256","nodeType":"ElementaryTypeName","src":"3938:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22499,"initialValue":{"arguments":[{"arguments":[{"id":22496,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3991:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}],"id":22495,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3983:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22494,"name":"address","nodeType":"ElementaryTypeName","src":"3983:7:88","typeDescriptions":{}}},"id":22497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3983:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22492,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"3964:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3973:9:88","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10533,"src":"3964:18:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":22498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3964:33:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3938:59:88"},{"assignments":[22502],"declarations":[{"constant":false,"id":22502,"mutability":"mutable","name":"feeController","nameLocation":"4229:13:88","nodeType":"VariableDeclaration","scope":22649,"src":"4206:36:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":22501,"nodeType":"UserDefinedTypeName","pathNode":{"id":22500,"name":"IProtocolFeeController","nameLocations":["4206:22:88"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"4206:22:88"},"referencedDeclaration":1955,"src":"4206:22:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"id":22505,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":22503,"name":"getProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22743,"src":"4245:24:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view returns (contract IProtocolFeeController)"}},"id":22504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4245:26:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"nodeType":"VariableDeclarationStatement","src":"4206:65:88"},{"expression":{"arguments":[{"id":22509,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22469,"src":"4463:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22506,"name":"feeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22502,"src":"4428:13:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":22508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4442:20:88","memberName":"collectAggregateFees","nodeType":"MemberAccess","referencedDeclaration":1767,"src":"4428:34:88","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":22510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4428:40:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22511,"nodeType":"ExpressionStatement","src":"4428:40:88"},{"expression":{"arguments":[{"id":22515,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22469,"src":"4615:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":22518,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4629:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}],"id":22517,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4621:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22516,"name":"address","nodeType":"ElementaryTypeName","src":"4621:7:88","typeDescriptions":{}}},"id":22519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4621:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22520,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"4636:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"expression":{"id":22512,"name":"feeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22502,"src":"4572:13:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":22514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4586:28:88","memberName":"withdrawProtocolFeesForToken","nodeType":"MemberAccess","referencedDeclaration":1940,"src":"4572:42:88","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$10576_$returns$__$","typeString":"function (address,address,contract IERC20) external"}},"id":22521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4572:73:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22522,"nodeType":"ExpressionStatement","src":"4572:73:88"},{"assignments":[22524],"declarations":[{"constant":false,"id":22524,"mutability":"mutable","name":"withdrawnBalance","nameLocation":"4664:16:88","nodeType":"VariableDeclaration","scope":22649,"src":"4656:24:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22523,"name":"uint256","nodeType":"ElementaryTypeName","src":"4656:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22534,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":22529,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4710:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}],"id":22528,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4702:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22527,"name":"address","nodeType":"ElementaryTypeName","src":"4702:7:88","typeDescriptions":{}}},"id":22530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4702:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22525,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"4683:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4692:9:88","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10533,"src":"4683:18:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":22531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4683:33:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":22532,"name":"existingBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22491,"src":"4719:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4683:51:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4656:78:88"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22535,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22524,"src":"4749:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":22536,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4768:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4749:20:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22648,"nodeType":"IfStatement","src":"4745:1932:88","trueBody":{"id":22647,"nodeType":"Block","src":"4771:1906:88","statements":[{"condition":{"id":22538,"name":"feeBurnerProvided","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22485,"src":"4789:17:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22645,"nodeType":"Block","src":"6490:177:88","statements":[{"expression":{"arguments":[{"id":22640,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22469,"src":"6619:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22641,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"6625:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":22642,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22524,"src":"6635:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22639,"name":"_transferFeeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22730,"src":"6601:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":22643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6601:51:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22644,"nodeType":"ExpressionStatement","src":"6601:51:88"}]},"id":22646,"nodeType":"IfStatement","src":"4785:1882:88","trueBody":{"id":22638,"nodeType":"Block","src":"4808:1676:88","statements":[{"assignments":[22541],"declarations":[{"constant":false,"id":22541,"mutability":"mutable","name":"targetToken","nameLocation":"4833:11:88","nodeType":"VariableDeclaration","scope":22638,"src":"4826:18:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":22540,"nodeType":"UserDefinedTypeName","pathNode":{"id":22539,"name":"IERC20","nameLocations":["4826:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4826:6:88"},"referencedDeclaration":10576,"src":"4826:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":22543,"initialValue":{"id":22542,"name":"_targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22366,"src":"4847:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"4826:33:88"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"id":22546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22544,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"4986:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":22545,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22541,"src":"4998:11:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"4986:23:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22636,"nodeType":"Block","src":"5225:1245:88","statements":[{"condition":{"id":22560,"name":"shouldUnwrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22481,"src":"5251:12:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22595,"nodeType":"IfStatement","src":"5247:296:88","trueBody":{"id":22594,"nodeType":"Block","src":"5265:278:88","statements":[{"assignments":[22563],"declarations":[{"constant":false,"id":22563,"mutability":"mutable","name":"erc4626Token","nameLocation":"5300:12:88","nodeType":"VariableDeclaration","scope":22594,"src":"5291:21:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":22562,"nodeType":"UserDefinedTypeName","pathNode":{"id":22561,"name":"IERC4626","nameLocations":["5291:8:88"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"5291:8:88"},"referencedDeclaration":9846,"src":"5291:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"id":22570,"initialValue":{"arguments":[{"arguments":[{"id":22567,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"5332:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":22566,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5324:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22565,"name":"address","nodeType":"ElementaryTypeName","src":"5324:7:88","typeDescriptions":{}}},"id":22568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5324:17:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22564,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"5315:8:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9846_$","typeString":"type(contract IERC4626)"}},"id":22569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5315:27:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"nodeType":"VariableDeclarationStatement","src":"5291:51:88"},{"expression":{"id":22577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22571,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"5369:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22573,"name":"erc4626Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22563,"src":"5387:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"id":22574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5400:5:88","memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":9715,"src":"5387:18:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":22575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5387:20:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22572,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"5380:6:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10576_$","typeString":"type(contract IERC20)"}},"id":22576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5380:28:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"5369:39:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22578,"nodeType":"ExpressionStatement","src":"5369:39:88"},{"expression":{"id":22592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22579,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22524,"src":"5434:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":22582,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22524,"src":"5473:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":22585,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5499:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}],"id":22584,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5491:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22583,"name":"address","nodeType":"ElementaryTypeName","src":"5491:7:88","typeDescriptions":{}}},"id":22586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5491:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":22589,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5514:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}],"id":22588,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5506:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22587,"name":"address","nodeType":"ElementaryTypeName","src":"5506:7:88","typeDescriptions":{}}},"id":22590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5506:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22580,"name":"erc4626Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22563,"src":"5453:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"id":22581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5466:6:88","memberName":"redeem","nodeType":"MemberAccess","referencedDeclaration":9845,"src":"5453:19:88","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) external returns (uint256)"}},"id":22591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5453:67:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5434:86:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22593,"nodeType":"ExpressionStatement","src":"5434:86:88"}]}},{"expression":{"arguments":[{"arguments":[{"id":22601,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22479,"src":"5828:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22600,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5820:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22599,"name":"address","nodeType":"ElementaryTypeName","src":"5820:7:88","typeDescriptions":{}}},"id":22602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5820:18:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22603,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22524,"src":"5840:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22596,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"5798:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5807:12:88","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":10850,"src":"5798:21:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":22604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5798:59:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22605,"nodeType":"ExpressionStatement","src":"5798:59:88"},{"expression":{"arguments":[{"id":22609,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22469,"src":"6019:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22610,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"6049:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":22611,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22524,"src":"6083:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22612,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22541,"src":"6125:11:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":22613,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22474,"src":"6162:23:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22614,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22368,"src":"6211:13:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22615,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22476,"src":"6250:8:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22606,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22479,"src":"5979:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"id":22608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5989:4:88","memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":947,"src":"5979:14:88","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address,uint256) external"}},"id":22616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5979:301:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22617,"nodeType":"ExpressionStatement","src":"5979:301:88"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":22622,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6334:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}],"id":22621,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6326:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22620,"name":"address","nodeType":"ElementaryTypeName","src":"6326:7:88","typeDescriptions":{}}},"id":22623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6326:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":22626,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22479,"src":"6349:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22625,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6341:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22624,"name":"address","nodeType":"ElementaryTypeName","src":"6341:7:88","typeDescriptions":{}}},"id":22627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6341:18:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22618,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"6307:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6316:9:88","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":10553,"src":"6307:18:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":22628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6307:53:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":22629,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6363:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6307:57:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22635,"nodeType":"IfStatement","src":"6303:149:88","trueBody":{"id":22634,"nodeType":"Block","src":"6366:86:88","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22631,"name":"BurnerDidNotConsumeAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1038,"src":"6399:28:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6399:30:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22633,"nodeType":"RevertStatement","src":"6392:37:88"}]}}]},"id":22637,"nodeType":"IfStatement","src":"4982:1488:88","trueBody":{"id":22559,"nodeType":"Block","src":"5011:208:88","statements":[{"condition":{"id":22547,"name":"shouldUnwrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22481,"src":"5037:12:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22552,"nodeType":"IfStatement","src":"5033:94:88","trueBody":{"id":22551,"nodeType":"Block","src":"5051:76:88","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22548,"name":"UnwrapIsNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1041,"src":"5084:18:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5084:20:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22550,"nodeType":"RevertStatement","src":"5077:27:88"}]}},{"expression":{"arguments":[{"id":22554,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22469,"src":"5167:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22555,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"5173:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":22556,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22524,"src":"5183:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22553,"name":"_transferFeeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22730,"src":"5149:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":22557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5149:51:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22558,"nodeType":"ExpressionStatement","src":"5149:51:88"}]}}]}}]}}]},"id":22650,"implemented":true,"kind":"function","modifiers":[],"name":"_sweepProtocolFeesForToken","nameLocation":"3642:26:88","nodeType":"FunctionDefinition","parameters":{"id":22482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22469,"mutability":"mutable","name":"pool","nameLocation":"3686:4:88","nodeType":"VariableDeclaration","scope":22650,"src":"3678:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22468,"name":"address","nodeType":"ElementaryTypeName","src":"3678:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22472,"mutability":"mutable","name":"feeToken","nameLocation":"3707:8:88","nodeType":"VariableDeclaration","scope":22650,"src":"3700:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":22471,"nodeType":"UserDefinedTypeName","pathNode":{"id":22470,"name":"IERC20","nameLocations":["3700:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3700:6:88"},"referencedDeclaration":10576,"src":"3700:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":22474,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"3733:23:88","nodeType":"VariableDeclaration","scope":22650,"src":"3725:31:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22473,"name":"uint256","nodeType":"ElementaryTypeName","src":"3725:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22476,"mutability":"mutable","name":"deadline","nameLocation":"3774:8:88","nodeType":"VariableDeclaration","scope":22650,"src":"3766:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22475,"name":"uint256","nodeType":"ElementaryTypeName","src":"3766:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22479,"mutability":"mutable","name":"feeBurner","nameLocation":"3811:9:88","nodeType":"VariableDeclaration","scope":22650,"src":"3792:28:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":22478,"nodeType":"UserDefinedTypeName","pathNode":{"id":22477,"name":"IProtocolFeeBurner","nameLocations":["3792:18:88"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"3792:18:88"},"referencedDeclaration":948,"src":"3792:18:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"},{"constant":false,"id":22481,"mutability":"mutable","name":"shouldUnwrap","nameLocation":"3835:12:88","nodeType":"VariableDeclaration","scope":22650,"src":"3830:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22480,"name":"bool","nodeType":"ElementaryTypeName","src":"3830:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3668:185:88"},"returnParameters":{"id":22483,"nodeType":"ParameterList","parameters":[],"src":"3863:0:88"},"scope":23007,"src":"3633:3050:88","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":22700,"nodeType":"Block","src":"6793:572:88","statements":[{"expression":{"id":22668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22658,"name":"feeBurnerProvided","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22656,"src":"6803:17:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":22661,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22653,"src":"6831:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22660,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6823:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22659,"name":"address","nodeType":"ElementaryTypeName","src":"6823:7:88","typeDescriptions":{}}},"id":22662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6823:18:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":22665,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6853:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":22664,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6845:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22663,"name":"address","nodeType":"ElementaryTypeName","src":"6845:7:88","typeDescriptions":{}}},"id":22666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6845:10:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6823:32:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6803:52:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22669,"nodeType":"ExpressionStatement","src":"6803:52:88"},{"condition":{"id":22670,"name":"feeBurnerProvided","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22656,"src":"7045:17:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22699,"nodeType":"IfStatement","src":"7041:318:88","trueBody":{"id":22698,"nodeType":"Block","src":"7064:295:88","statements":[{"condition":{"baseExpression":{"id":22671,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22373,"src":"7082:19:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":22673,"indexExpression":{"id":22672,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22653,"src":"7102:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7082:30:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22696,"nodeType":"Block","src":"7261:88:88","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":22692,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22653,"src":"7323:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22691,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7315:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22690,"name":"address","nodeType":"ElementaryTypeName","src":"7315:7:88","typeDescriptions":{}}},"id":22693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7315:18:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22689,"name":"UnsupportedProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1025,"src":"7286:28:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":22694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7286:48:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22695,"nodeType":"RevertStatement","src":"7279:55:88"}]},"id":22697,"nodeType":"IfStatement","src":"7078:271:88","trueBody":{"id":22688,"nodeType":"Block","src":"7114:141:88","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":22676,"name":"_targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22366,"src":"7144:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":22675,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7136:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22674,"name":"address","nodeType":"ElementaryTypeName","src":"7136:7:88","typeDescriptions":{}}},"id":22677,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7136:21:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":22680,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7169:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":22679,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7161:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22678,"name":"address","nodeType":"ElementaryTypeName","src":"7161:7:88","typeDescriptions":{}}},"id":22681,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7161:10:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7136:35:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22687,"nodeType":"IfStatement","src":"7132:109:88","trueBody":{"id":22686,"nodeType":"Block","src":"7173:68:88","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22683,"name":"InvalidTargetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1017,"src":"7202:18:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7202:20:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22685,"nodeType":"RevertStatement","src":"7195:27:88"}]}}]}}]}}]},"id":22701,"implemented":true,"kind":"function","modifiers":[],"name":"_getValidFeeBurner","nameLocation":"6698:18:88","nodeType":"FunctionDefinition","parameters":{"id":22654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22653,"mutability":"mutable","name":"feeBurner","nameLocation":"6736:9:88","nodeType":"VariableDeclaration","scope":22701,"src":"6717:28:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":22652,"nodeType":"UserDefinedTypeName","pathNode":{"id":22651,"name":"IProtocolFeeBurner","nameLocations":["6717:18:88"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"6717:18:88"},"referencedDeclaration":948,"src":"6717:18:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"6716:30:88"},"returnParameters":{"id":22657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22656,"mutability":"mutable","name":"feeBurnerProvided","nameLocation":"6774:17:88","nodeType":"VariableDeclaration","scope":22701,"src":"6769:22:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22655,"name":"bool","nodeType":"ElementaryTypeName","src":"6769:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6768:24:88"},"scope":23007,"src":"6689:676:88","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":22729,"nodeType":"Block","src":"7468:197:88","statements":[{"assignments":[22712],"declarations":[{"constant":false,"id":22712,"mutability":"mutable","name":"recipient","nameLocation":"7486:9:88","nodeType":"VariableDeclaration","scope":22729,"src":"7478:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22711,"name":"address","nodeType":"ElementaryTypeName","src":"7478:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":22714,"initialValue":{"id":22713,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22368,"src":"7498:13:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"7478:33:88"},{"expression":{"arguments":[{"id":22718,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22712,"src":"7543:9:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22719,"name":"withdrawnTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22708,"src":"7554:21:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22715,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22706,"src":"7521:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7530:12:88","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10647,"src":"7521:21:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":22720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7521:55:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22721,"nodeType":"ExpressionStatement","src":"7521:55:88"},{"eventCall":{"arguments":[{"id":22723,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22703,"src":"7609:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22724,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22706,"src":"7615:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":22725,"name":"withdrawnTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22708,"src":"7625:21:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22726,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22712,"src":"7648:9:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":22722,"name":"ProtocolFeeSwept","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1001,"src":"7592:16:88","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,contract IERC20,uint256,address)"}},"id":22727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7592:66:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22728,"nodeType":"EmitStatement","src":"7587:71:88"}]},"id":22730,"implemented":true,"kind":"function","modifiers":[],"name":"_transferFeeToken","nameLocation":"7380:17:88","nodeType":"FunctionDefinition","parameters":{"id":22709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22703,"mutability":"mutable","name":"pool","nameLocation":"7406:4:88","nodeType":"VariableDeclaration","scope":22730,"src":"7398:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22702,"name":"address","nodeType":"ElementaryTypeName","src":"7398:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22706,"mutability":"mutable","name":"feeToken","nameLocation":"7419:8:88","nodeType":"VariableDeclaration","scope":22730,"src":"7412:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":22705,"nodeType":"UserDefinedTypeName","pathNode":{"id":22704,"name":"IERC20","nameLocations":["7412:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"7412:6:88"},"referencedDeclaration":10576,"src":"7412:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":22708,"mutability":"mutable","name":"withdrawnTokenBalance","nameLocation":"7437:21:88","nodeType":"VariableDeclaration","scope":22730,"src":"7429:29:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22707,"name":"uint256","nodeType":"ElementaryTypeName","src":"7429:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7397:62:88"},"returnParameters":{"id":22710,"nodeType":"ParameterList","parameters":[],"src":"7468:0:88"},"scope":23007,"src":"7371:294:88","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"baseFunctions":[1080],"body":{"id":22742,"nodeType":"Block","src":"7792:61:88","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":22737,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9275,"src":"7809:8:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$2545_$","typeString":"function () view returns (contract IVault)"}},"id":22738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7809:10:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":22739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7820:24:88","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":3794,"src":"7809:35:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":22740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7809:37:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"functionReturnParameters":22736,"id":22741,"nodeType":"Return","src":"7802:44:88"}]},"documentation":{"id":22731,"nodeType":"StructuredDocumentation","src":"7671:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"85f2dbd4","id":22743,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"7720:24:88","nodeType":"FunctionDefinition","parameters":{"id":22732,"nodeType":"ParameterList","parameters":[],"src":"7744:2:88"},"returnParameters":{"id":22736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22735,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22743,"src":"7768:22:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":22734,"nodeType":"UserDefinedTypeName","pathNode":{"id":22733,"name":"IProtocolFeeController","nameLocations":["7768:22:88"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"7768:22:88"},"referencedDeclaration":1955,"src":"7768:22:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"7767:24:88"},"scope":23007,"src":"7711:142:88","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1087],"body":{"id":22752,"nodeType":"Block","src":"7956:36:88","statements":[{"expression":{"id":22750,"name":"_targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22366,"src":"7973:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"functionReturnParameters":22749,"id":22751,"nodeType":"Return","src":"7966:19:88"}]},"documentation":{"id":22744,"nodeType":"StructuredDocumentation","src":"7859:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"80db0d51","id":22753,"implemented":true,"kind":"function","modifiers":[],"name":"getTargetToken","nameLocation":"7908:14:88","nodeType":"FunctionDefinition","parameters":{"id":22745,"nodeType":"ParameterList","parameters":[],"src":"7922:2:88"},"returnParameters":{"id":22749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22748,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22753,"src":"7948:6:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":22747,"nodeType":"UserDefinedTypeName","pathNode":{"id":22746,"name":"IERC20","nameLocations":["7948:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"7948:6:88"},"referencedDeclaration":10576,"src":"7948:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"7947:8:88"},"scope":23007,"src":"7899:93:88","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1093],"body":{"id":22761,"nodeType":"Block","src":"8097:37:88","statements":[{"expression":{"id":22759,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22368,"src":"8114:13:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":22758,"id":22760,"nodeType":"Return","src":"8107:20:88"}]},"documentation":{"id":22754,"nodeType":"StructuredDocumentation","src":"7998:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"4ccb20c0","id":22762,"implemented":true,"kind":"function","modifiers":[],"name":"getFeeRecipient","nameLocation":"8047:15:88","nodeType":"FunctionDefinition","parameters":{"id":22755,"nodeType":"ParameterList","parameters":[],"src":"8062:2:88"},"returnParameters":{"id":22758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22757,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22762,"src":"8088:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22756,"name":"address","nodeType":"ElementaryTypeName","src":"8088:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8087:9:88"},"scope":23007,"src":"8038:96:88","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1101],"body":{"id":22776,"nodeType":"Block","src":"8273:82:88","statements":[{"expression":{"baseExpression":{"id":22770,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22373,"src":"8290:19:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":22774,"indexExpression":{"arguments":[{"id":22772,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22765,"src":"8329:17:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22771,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"8310:18:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeBurner_$948_$","typeString":"type(contract IProtocolFeeBurner)"}},"id":22773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8310:37:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8290:58:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":22769,"id":22775,"nodeType":"Return","src":"8283:65:88"}]},"documentation":{"id":22763,"nodeType":"StructuredDocumentation","src":"8140:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"9c5cee9b","id":22777,"implemented":true,"kind":"function","modifiers":[],"name":"isApprovedProtocolFeeBurner","nameLocation":"8189:27:88","nodeType":"FunctionDefinition","parameters":{"id":22766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22765,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"8225:17:88","nodeType":"VariableDeclaration","scope":22777,"src":"8217:25:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22764,"name":"address","nodeType":"ElementaryTypeName","src":"8217:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8216:27:88"},"returnParameters":{"id":22769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22768,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22777,"src":"8267:4:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22767,"name":"bool","nodeType":"ElementaryTypeName","src":"8267:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8266:6:88"},"scope":23007,"src":"8180:175:88","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1107],"body":{"id":22789,"nodeType":"Block","src":"8704:47:88","statements":[{"expression":{"arguments":[{"id":22786,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22780,"src":"8731:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22785,"name":"_setFeeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22815,"src":"8714:16:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":22787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8714:30:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22788,"nodeType":"ExpressionStatement","src":"8714:30:88"}]},"documentation":{"id":22778,"nodeType":"StructuredDocumentation","src":"8579:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"e74b981b","id":22790,"implemented":true,"kind":"function","modifiers":[{"id":22783,"kind":"modifierInvocation","modifierName":{"id":22782,"name":"onlyFeeRecipientOrGovernance","nameLocations":["8675:28:88"],"nodeType":"IdentifierPath","referencedDeclaration":22386,"src":"8675:28:88"},"nodeType":"ModifierInvocation","src":"8675:28:88"}],"name":"setFeeRecipient","nameLocation":"8628:15:88","nodeType":"FunctionDefinition","parameters":{"id":22781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22780,"mutability":"mutable","name":"feeRecipient","nameLocation":"8652:12:88","nodeType":"VariableDeclaration","scope":22790,"src":"8644:20:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22779,"name":"address","nodeType":"ElementaryTypeName","src":"8644:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8643:22:88"},"returnParameters":{"id":22784,"nodeType":"ParameterList","parameters":[],"src":"8704:0:88"},"scope":23007,"src":"8619:132:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":22814,"nodeType":"Block","src":"8814:707:88","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22795,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22792,"src":"9350:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":22798,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9374:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":22797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9366:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22796,"name":"address","nodeType":"ElementaryTypeName","src":"9366:7:88","typeDescriptions":{}}},"id":22799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9366:10:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9350:26:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22805,"nodeType":"IfStatement","src":"9346:85:88","trueBody":{"id":22804,"nodeType":"Block","src":"9378:53:88","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22801,"name":"InvalidFeeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1014,"src":"9399:19:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9399:21:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22803,"nodeType":"RevertStatement","src":"9392:28:88"}]}},{"expression":{"id":22808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22806,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22368,"src":"9441:13:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22807,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22792,"src":"9457:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9441:28:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":22809,"nodeType":"ExpressionStatement","src":"9441:28:88"},{"eventCall":{"arguments":[{"id":22811,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22792,"src":"9501:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22810,"name":"FeeRecipientSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":989,"src":"9485:15:88","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":22812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9485:29:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22813,"nodeType":"EmitStatement","src":"9480:34:88"}]},"id":22815,"implemented":true,"kind":"function","modifiers":[],"name":"_setFeeRecipient","nameLocation":"8766:16:88","nodeType":"FunctionDefinition","parameters":{"id":22793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22792,"mutability":"mutable","name":"feeRecipient","nameLocation":"8791:12:88","nodeType":"VariableDeclaration","scope":22815,"src":"8783:20:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22791,"name":"address","nodeType":"ElementaryTypeName","src":"8783:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8782:22:88"},"returnParameters":{"id":22794,"nodeType":"ParameterList","parameters":[],"src":"8814:0:88"},"scope":23007,"src":"8757:764:88","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1114],"body":{"id":22832,"nodeType":"Block","src":"9649:86:88","statements":[{"expression":{"id":22826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22824,"name":"_targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22366,"src":"9659:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22825,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22819,"src":"9674:11:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"9659:26:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22827,"nodeType":"ExpressionStatement","src":"9659:26:88"},{"eventCall":{"arguments":[{"id":22829,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22819,"src":"9716:11:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":22828,"name":"TargetTokenSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":984,"src":"9701:14:88","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC20_$10576_$returns$__$","typeString":"function (contract IERC20)"}},"id":22830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9701:27:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22831,"nodeType":"EmitStatement","src":"9696:32:88"}]},"documentation":{"id":22816,"nodeType":"StructuredDocumentation","src":"9527:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"1b66cb00","id":22833,"implemented":true,"kind":"function","modifiers":[{"id":22822,"kind":"modifierInvocation","modifierName":{"id":22821,"name":"onlyFeeRecipientOrGovernance","nameLocations":["9620:28:88"],"nodeType":"IdentifierPath","referencedDeclaration":22386,"src":"9620:28:88"},"nodeType":"ModifierInvocation","src":"9620:28:88"}],"name":"setTargetToken","nameLocation":"9576:14:88","nodeType":"FunctionDefinition","parameters":{"id":22820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22819,"mutability":"mutable","name":"targetToken","nameLocation":"9598:11:88","nodeType":"VariableDeclaration","scope":22833,"src":"9591:18:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":22818,"nodeType":"UserDefinedTypeName","pathNode":{"id":22817,"name":"IERC20","nameLocations":["9591:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"9591:6:88"},"referencedDeclaration":10576,"src":"9591:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"9590:20:88"},"returnParameters":{"id":22823,"nodeType":"ParameterList","parameters":[],"src":"9649:0:88"},"scope":23007,"src":"9567:168:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1121],"body":{"id":22881,"nodeType":"Block","src":"9887:500:88","statements":[{"condition":{"baseExpression":{"id":22842,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22373,"src":"9901:19:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":22844,"indexExpression":{"id":22843,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22837,"src":"9921:17:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9901:38:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22853,"nodeType":"IfStatement","src":"9897:133:88","trueBody":{"id":22852,"nodeType":"Block","src":"9941:89:88","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":22848,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22837,"src":"10000:17:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22847,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9992:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22846,"name":"address","nodeType":"ElementaryTypeName","src":"9992:7:88","typeDescriptions":{}}},"id":22849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9992:26:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22845,"name":"ProtocolFeeBurnerAlreadyAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1030,"src":"9962:29:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":22850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9962:57:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22851,"nodeType":"RevertStatement","src":"9955:64:88"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":22856,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22837,"src":"10167:17:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22855,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10159:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22854,"name":"address","nodeType":"ElementaryTypeName","src":"10159:7:88","typeDescriptions":{}}},"id":22857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10159:26:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":22860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10197:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":22859,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10189:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22858,"name":"address","nodeType":"ElementaryTypeName","src":"10189:7:88","typeDescriptions":{}}},"id":22861,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10189:10:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10159:40:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22867,"nodeType":"IfStatement","src":"10155:104:88","trueBody":{"id":22866,"nodeType":"Block","src":"10201:58:88","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22863,"name":"InvalidProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1020,"src":"10222:24:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10222:26:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22865,"nodeType":"RevertStatement","src":"10215:33:88"}]}},{"expression":{"id":22872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":22868,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22373,"src":"10269:19:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":22870,"indexExpression":{"id":22869,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22837,"src":"10289:17:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10269:38:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":22871,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10310:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"10269:45:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22873,"nodeType":"ExpressionStatement","src":"10269:45:88"},{"eventCall":{"arguments":[{"arguments":[{"id":22877,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22837,"src":"10361:17:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22876,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10353:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22875,"name":"address","nodeType":"ElementaryTypeName","src":"10353:7:88","typeDescriptions":{}}},"id":22878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10353:26:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22874,"name":"ProtocolFeeBurnerAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1006,"src":"10330:22:88","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":22879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10330:50:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22880,"nodeType":"EmitStatement","src":"10325:55:88"}]},"documentation":{"id":22834,"nodeType":"StructuredDocumentation","src":"9741:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"e20c482f","id":22882,"implemented":true,"kind":"function","modifiers":[{"id":22840,"kind":"modifierInvocation","modifierName":{"id":22839,"name":"onlyFeeRecipientOrGovernance","nameLocations":["9858:28:88"],"nodeType":"IdentifierPath","referencedDeclaration":22386,"src":"9858:28:88"},"nodeType":"ModifierInvocation","src":"9858:28:88"}],"name":"addProtocolFeeBurner","nameLocation":"9790:20:88","nodeType":"FunctionDefinition","parameters":{"id":22838,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22837,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"9830:17:88","nodeType":"VariableDeclaration","scope":22882,"src":"9811:36:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":22836,"nodeType":"UserDefinedTypeName","pathNode":{"id":22835,"name":"IProtocolFeeBurner","nameLocations":["9811:18:88"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"9811:18:88"},"referencedDeclaration":948,"src":"9811:18:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"9810:38:88"},"returnParameters":{"id":22841,"nodeType":"ParameterList","parameters":[],"src":"9887:0:88"},"scope":23007,"src":"9781:606:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1128],"body":{"id":22918,"nodeType":"Block","src":"10542:279:88","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":22891,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22373,"src":"10556:19:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":22893,"indexExpression":{"id":22892,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22886,"src":"10576:17:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10556:38:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":22894,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10598:5:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10556:47:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22904,"nodeType":"IfStatement","src":"10552:138:88","trueBody":{"id":22903,"nodeType":"Block","src":"10605:85:88","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":22899,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22886,"src":"10660:17:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22898,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10652:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22897,"name":"address","nodeType":"ElementaryTypeName","src":"10652:7:88","typeDescriptions":{}}},"id":22900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10652:26:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22896,"name":"ProtocolFeeBurnerNotAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1035,"src":"10626:25:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":22901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10626:53:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22902,"nodeType":"RevertStatement","src":"10619:60:88"}]}},{"expression":{"id":22909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":22905,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22373,"src":"10700:19:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":22907,"indexExpression":{"id":22906,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22886,"src":"10720:17:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10700:38:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":22908,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10741:5:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10700:46:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22910,"nodeType":"ExpressionStatement","src":"10700:46:88"},{"eventCall":{"arguments":[{"arguments":[{"id":22914,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22886,"src":"10795:17:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10787:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22912,"name":"address","nodeType":"ElementaryTypeName","src":"10787:7:88","typeDescriptions":{}}},"id":22915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10787:26:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22911,"name":"ProtocolFeeBurnerRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1011,"src":"10762:24:88","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":22916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10762:52:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22917,"nodeType":"EmitStatement","src":"10757:57:88"}]},"documentation":{"id":22883,"nodeType":"StructuredDocumentation","src":"10393:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"b11f061e","id":22919,"implemented":true,"kind":"function","modifiers":[{"id":22889,"kind":"modifierInvocation","modifierName":{"id":22888,"name":"onlyFeeRecipientOrGovernance","nameLocations":["10513:28:88"],"nodeType":"IdentifierPath","referencedDeclaration":22386,"src":"10513:28:88"},"nodeType":"ModifierInvocation","src":"10513:28:88"}],"name":"removeProtocolFeeBurner","nameLocation":"10442:23:88","nodeType":"FunctionDefinition","parameters":{"id":22887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22886,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"10485:17:88","nodeType":"VariableDeclaration","scope":22919,"src":"10466:36:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":22885,"nodeType":"UserDefinedTypeName","pathNode":{"id":22884,"name":"IProtocolFeeBurner","nameLocations":["10466:18:88"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"10466:18:88"},"referencedDeclaration":948,"src":"10466:18:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"10465:38:88"},"returnParameters":{"id":22890,"nodeType":"ParameterList","parameters":[],"src":"10542:0:88"},"scope":23007,"src":"10433:388:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1136],"body":{"id":22981,"nodeType":"Block","src":"10945:397:88","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22929,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10959:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10963:6:88","memberName":"sender","nodeType":"MemberAccess","src":"10959:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":22931,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22368,"src":"10973:13:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10959:27:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22937,"nodeType":"IfStatement","src":"10955:83:88","trueBody":{"id":22936,"nodeType":"Block","src":"10988:50:88","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22933,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"11009:16:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11009:18:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22935,"nodeType":"RevertStatement","src":"11002:25:88"}]}},{"body":{"id":22979,"nodeType":"Block","src":"11095:241:88","statements":[{"assignments":[22951],"declarations":[{"constant":false,"id":22951,"mutability":"mutable","name":"feeToken","nameLocation":"11116:8:88","nodeType":"VariableDeclaration","scope":22979,"src":"11109:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":22950,"nodeType":"UserDefinedTypeName","pathNode":{"id":22949,"name":"IERC20","nameLocations":["11109:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"11109:6:88"},"referencedDeclaration":10576,"src":"11109:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":22955,"initialValue":{"baseExpression":{"id":22952,"name":"feeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22924,"src":"11127:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":22954,"indexExpression":{"id":22953,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22939,"src":"11137:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11127:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"11109:30:88"},{"assignments":[22957],"declarations":[{"constant":false,"id":22957,"mutability":"mutable","name":"tokenBalance","nameLocation":"11161:12:88","nodeType":"VariableDeclaration","scope":22979,"src":"11153:20:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22956,"name":"uint256","nodeType":"ElementaryTypeName","src":"11153:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22965,"initialValue":{"arguments":[{"arguments":[{"id":22962,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11203:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}],"id":22961,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11195:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22960,"name":"address","nodeType":"ElementaryTypeName","src":"11195:7:88","typeDescriptions":{}}},"id":22963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11195:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22958,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22951,"src":"11176:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11185:9:88","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10533,"src":"11176:18:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":22964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11176:33:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11153:56:88"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22966,"name":"tokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22957,"src":"11228:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":22967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11243:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11228:16:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22978,"nodeType":"IfStatement","src":"11224:102:88","trueBody":{"id":22977,"nodeType":"Block","src":"11246:80:88","statements":[{"expression":{"arguments":[{"expression":{"id":22972,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11286:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11290:6:88","memberName":"sender","nodeType":"MemberAccess","src":"11286:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22974,"name":"tokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22957,"src":"11298:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22969,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22951,"src":"11264:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11273:12:88","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10647,"src":"11264:21:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":22975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11264:47:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22976,"nodeType":"ExpressionStatement","src":"11264:47:88"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22942,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22939,"src":"11068:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":22943,"name":"feeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22924,"src":"11072:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":22944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11082:6:88","memberName":"length","nodeType":"MemberAccess","src":"11072:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11068:20:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22980,"initializationExpression":{"assignments":[22939],"declarations":[{"constant":false,"id":22939,"mutability":"mutable","name":"i","nameLocation":"11061:1:88","nodeType":"VariableDeclaration","scope":22980,"src":"11053:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22938,"name":"uint256","nodeType":"ElementaryTypeName","src":"11053:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22941,"initialValue":{"hexValue":"30","id":22940,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11065:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11053:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":22947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11090:3:88","subExpression":{"id":22946,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22939,"src":"11092:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22948,"nodeType":"ExpressionStatement","src":"11090:3:88"},"nodeType":"ForStatement","src":"11048:288:88"}]},"documentation":{"id":22920,"nodeType":"StructuredDocumentation","src":"10827:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"b0edcc53","id":22982,"implemented":true,"kind":"function","modifiers":[{"id":22927,"kind":"modifierInvocation","modifierName":{"id":22926,"name":"nonReentrant","nameLocations":["10932:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":6967,"src":"10932:12:88"},"nodeType":"ModifierInvocation","src":"10932:12:88"}],"name":"recoverProtocolFees","nameLocation":"10876:19:88","nodeType":"FunctionDefinition","parameters":{"id":22925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22924,"mutability":"mutable","name":"feeTokens","nameLocation":"10912:9:88","nodeType":"VariableDeclaration","scope":22982,"src":"10896:25:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":22922,"nodeType":"UserDefinedTypeName","pathNode":{"id":22921,"name":"IERC20","nameLocations":["10896:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"10896:6:88"},"referencedDeclaration":10576,"src":"10896:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22923,"nodeType":"ArrayTypeName","src":"10896:8:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"10895:27:88"},"returnParameters":{"id":22928,"nodeType":"ParameterList","parameters":[],"src":"10945:0:88"},"scope":23007,"src":"10867:475:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":22988,"nodeType":"Block","src":"11824:42:88","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22985,"name":"CannotReceiveEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22363,"src":"11841:16:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11841:18:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22987,"nodeType":"RevertStatement","src":"11834:25:88"}]},"id":22989,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22983,"nodeType":"ParameterList","parameters":[],"src":"11804:2:88"},"returnParameters":{"id":22984,"nodeType":"ParameterList","parameters":[],"src":"11824:0:88"},"scope":23007,"src":"11797:69:88","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":23005,"nodeType":"Block","src":"11944:121:88","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22992,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11958:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11962:5:88","memberName":"value","nodeType":"MemberAccess","src":"11958:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":22994,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11970:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11958:13:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23000,"nodeType":"IfStatement","src":"11954:69:88","trueBody":{"id":22999,"nodeType":"Block","src":"11973:50:88","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22996,"name":"CannotReceiveEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22363,"src":"11994:16:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11994:18:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22998,"nodeType":"RevertStatement","src":"11987:25:88"}]}},{"expression":{"arguments":[{"hexValue":"4e6f7420696d706c656d656e746564","id":23002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12040:17:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_9f5474d7a5849b3f79e8aee7ea2c60bcd36a60a08b4fa41f97e2fccf1c4df98b","typeString":"literal_string \"Not implemented\""},"value":"Not implemented"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9f5474d7a5849b3f79e8aee7ea2c60bcd36a60a08b4fa41f97e2fccf1c4df98b","typeString":"literal_string \"Not implemented\""}],"id":23001,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"12033:6:88","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":23003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12033:25:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23004,"nodeType":"ExpressionStatement","src":"12033:25:88"}]},"id":23006,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22990,"nodeType":"ParameterList","parameters":[],"src":"11924:2:88"},"returnParameters":{"id":22991,"nodeType":"ParameterList","parameters":[],"src":"11944:0:88"},"scope":23007,"src":"11916:149:88","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":23008,"src":"1713:10354:88","usedErrors":[5,1014,1017,1020,1025,1030,1035,1038,1041,6956,7355,10614,22363],"usedEvents":[984,989,1001,1006,1011]}],"src":"46:12022:88"},"id":88},"contracts/TokenPairRegistry.sol":{"ast":{"absolutePath":"contracts/TokenPairRegistry.sol","exportedSymbols":{"EnumerableSet":[6943],"IERC20":[10576],"IERC4626":[9846],"ITokenPairRegistry":[1263],"IVault":[2545],"InputHelpers":[4718],"OwnableAuthentication":[20330],"SwapPathStep":[1275],"TokenPairRegistry":[24017]},"id":24018,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":23009,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:89"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":23011,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24018,"sourceUnit":9847,"src":"72:75:89","symbolAliases":[{"foreign":{"id":23010,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"81:8:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":23013,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24018,"sourceUnit":10577,"src":"148:72:89","symbolAliases":[{"foreign":{"id":23012,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"157:6:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol","id":23015,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24018,"sourceUnit":1264,"src":"222:116:89","symbolAliases":[{"foreign":{"id":23014,"name":"ITokenPairRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1263,"src":"231:18:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol","id":23017,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24018,"sourceUnit":1326,"src":"339:97:89","symbolAliases":[{"foreign":{"id":23016,"name":"SwapPathStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1275,"src":"348:12:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":23019,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24018,"sourceUnit":2546,"src":"437:81:89","symbolAliases":[{"foreign":{"id":23018,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"446:6:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol","id":23021,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24018,"sourceUnit":6944,"src":"520:106:89","symbolAliases":[{"foreign":{"id":23020,"name":"EnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6943,"src":"529:13:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","id":23023,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24018,"sourceUnit":4719,"src":"627:99:89","symbolAliases":[{"foreign":{"id":23022,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4718,"src":"636:12:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/OwnableAuthentication.sol","file":"./OwnableAuthentication.sol","id":23025,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24018,"sourceUnit":20331,"src":"728:68:89","symbolAliases":[{"foreign":{"id":23024,"name":"OwnableAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20330,"src":"737:21:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":23027,"name":"ITokenPairRegistry","nameLocations":["1188:18:89"],"nodeType":"IdentifierPath","referencedDeclaration":1263,"src":"1188:18:89"},"id":23028,"nodeType":"InheritanceSpecifier","src":"1188:18:89"},{"baseName":{"id":23029,"name":"OwnableAuthentication","nameLocations":["1208:21:89"],"nodeType":"IdentifierPath","referencedDeclaration":20330,"src":"1208:21:89"},"id":23030,"nodeType":"InheritanceSpecifier","src":"1208:21:89"}],"canonicalName":"TokenPairRegistry","contractDependencies":[],"contractKind":"contract","documentation":{"id":23026,"nodeType":"StructuredDocumentation","src":"798:359:89","text":" @notice Stores token pair swap paths on-chain, allowing an admin to maintain swap routes.\n @dev The paths are stored as arrays of `SwapPathStep` structs, which contain the pool or buffer\n address, the output token, and a boolean indicating whether the step is a buffer or not.\n Functions that add information to the registry are permissioned."},"fullyImplemented":true,"id":24017,"linearizedBaseContracts":[24017,20330,4385,14,9572,9486,12366,1263],"name":"TokenPairRegistry","nameLocation":"1167:17:89","nodeType":"ContractDefinition","nodes":[{"global":false,"id":23034,"libraryName":{"id":23031,"name":"EnumerableSet","nameLocations":["1242:13:89"],"nodeType":"IdentifierPath","referencedDeclaration":6943,"src":"1242:13:89"},"nodeType":"UsingForDirective","src":"1236:49:89","typeName":{"id":23033,"nodeType":"UserDefinedTypeName","pathNode":{"id":23032,"name":"EnumerableSet.AddressSet","nameLocations":["1260:13:89","1274:10:89"],"nodeType":"IdentifierPath","referencedDeclaration":6665,"src":"1260:24:89"},"referencedDeclaration":6665,"src":"1260:24:89","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}}},{"constant":false,"id":23041,"mutability":"mutable","name":"_pairsToPaths","nameLocation":"1350:13:89","nodeType":"VariableDeclaration","scope":24017,"src":"1291:72:89","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep[][])"},"typeName":{"id":23040,"keyName":"pairId","keyNameLocation":"1307:6:89","keyType":{"id":23035,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1299:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"1291:49:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep[][])"},"valueName":"paths","valueNameLocation":"1334:5:89","valueType":{"baseType":{"baseType":{"id":23037,"nodeType":"UserDefinedTypeName","pathNode":{"id":23036,"name":"SwapPathStep","nameLocations":["1317:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"1317:12:89"},"referencedDeclaration":1275,"src":"1317:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23038,"nodeType":"ArrayTypeName","src":"1317:14:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":23039,"nodeType":"ArrayTypeName","src":"1317:16:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}}},"visibility":"internal"},{"body":{"id":23053,"nodeType":"Block","src":"1461:64:89","statements":[]},"id":23054,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":23049,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23044,"src":"1440:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},{"id":23050,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23046,"src":"1447:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":23051,"kind":"baseConstructorSpecifier","modifierName":{"id":23048,"name":"OwnableAuthentication","nameLocations":["1418:21:89"],"nodeType":"IdentifierPath","referencedDeclaration":20330,"src":"1418:21:89"},"nodeType":"ModifierInvocation","src":"1418:42:89"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":23047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23044,"mutability":"mutable","name":"vault","nameLocation":"1389:5:89","nodeType":"VariableDeclaration","scope":23054,"src":"1382:12:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":23043,"nodeType":"UserDefinedTypeName","pathNode":{"id":23042,"name":"IVault","nameLocations":["1382:6:89"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1382:6:89"},"referencedDeclaration":2545,"src":"1382:6:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":23046,"mutability":"mutable","name":"initialOwner","nameLocation":"1404:12:89","nodeType":"VariableDeclaration","scope":23054,"src":"1396:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23045,"name":"address","nodeType":"ElementaryTypeName","src":"1396:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1381:36:89"},"returnParameters":{"id":23052,"nodeType":"ParameterList","parameters":[],"src":"1461:0:89"},"scope":24017,"src":"1370:155:89","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1207],"body":{"id":23081,"nodeType":"Block","src":"1685:115:89","statements":[{"assignments":[23069],"declarations":[{"constant":false,"id":23069,"mutability":"mutable","name":"tokenId","nameLocation":"1703:7:89","nodeType":"VariableDeclaration","scope":23081,"src":"1695:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23068,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1695:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23074,"initialValue":{"arguments":[{"id":23071,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23057,"src":"1729:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23072,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23059,"src":"1738:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23070,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23857,"src":"1713:15:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1713:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1695:52:89"},{"expression":{"baseExpression":{"baseExpression":{"id":23075,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23041,"src":"1764:13:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23077,"indexExpression":{"id":23076,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23069,"src":"1778:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1764:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"id":23079,"indexExpression":{"id":23078,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23061,"src":"1787:5:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1764:29:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"functionReturnParameters":23067,"id":23080,"nodeType":"Return","src":"1757:36:89"}]},"documentation":{"id":23055,"nodeType":"StructuredDocumentation","src":"1531:34:89","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"057074ff","id":23082,"implemented":true,"kind":"function","modifiers":[],"name":"getPathAt","nameLocation":"1579:9:89","nodeType":"FunctionDefinition","parameters":{"id":23062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23057,"mutability":"mutable","name":"tokenIn","nameLocation":"1597:7:89","nodeType":"VariableDeclaration","scope":23082,"src":"1589:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23056,"name":"address","nodeType":"ElementaryTypeName","src":"1589:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23059,"mutability":"mutable","name":"tokenOut","nameLocation":"1614:8:89","nodeType":"VariableDeclaration","scope":23082,"src":"1606:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23058,"name":"address","nodeType":"ElementaryTypeName","src":"1606:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23061,"mutability":"mutable","name":"index","nameLocation":"1632:5:89","nodeType":"VariableDeclaration","scope":23082,"src":"1624:13:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23060,"name":"uint256","nodeType":"ElementaryTypeName","src":"1624:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1588:50:89"},"returnParameters":{"id":23067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23066,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23082,"src":"1662:21:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":23064,"nodeType":"UserDefinedTypeName","pathNode":{"id":23063,"name":"SwapPathStep","nameLocations":["1662:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"1662:12:89"},"referencedDeclaration":1275,"src":"1662:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23065,"nodeType":"ArrayTypeName","src":"1662:14:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"}],"src":"1661:23:89"},"scope":24017,"src":"1570:230:89","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1217],"body":{"id":23104,"nodeType":"Block","src":"1934:115:89","statements":[{"assignments":[23093],"declarations":[{"constant":false,"id":23093,"mutability":"mutable","name":"tokenId","nameLocation":"1952:7:89","nodeType":"VariableDeclaration","scope":23104,"src":"1944:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23092,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1944:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23098,"initialValue":{"arguments":[{"id":23095,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23085,"src":"1978:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23096,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23087,"src":"1987:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23094,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23857,"src":"1962:15:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1962:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1944:52:89"},{"expression":{"expression":{"baseExpression":{"id":23099,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23041,"src":"2013:13:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23101,"indexExpression":{"id":23100,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23093,"src":"2027:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2013:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"id":23102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2036:6:89","memberName":"length","nodeType":"MemberAccess","src":"2013:29:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23091,"id":23103,"nodeType":"Return","src":"2006:36:89"}]},"documentation":{"id":23083,"nodeType":"StructuredDocumentation","src":"1806:34:89","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"94ee0a3b","id":23105,"implemented":true,"kind":"function","modifiers":[],"name":"getPathCount","nameLocation":"1854:12:89","nodeType":"FunctionDefinition","parameters":{"id":23088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23085,"mutability":"mutable","name":"tokenIn","nameLocation":"1875:7:89","nodeType":"VariableDeclaration","scope":23105,"src":"1867:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23084,"name":"address","nodeType":"ElementaryTypeName","src":"1867:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23087,"mutability":"mutable","name":"tokenOut","nameLocation":"1892:8:89","nodeType":"VariableDeclaration","scope":23105,"src":"1884:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23086,"name":"address","nodeType":"ElementaryTypeName","src":"1884:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1866:35:89"},"returnParameters":{"id":23091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23090,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23105,"src":"1925:7:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23089,"name":"uint256","nodeType":"ElementaryTypeName","src":"1925:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1924:9:89"},"scope":24017,"src":"1845:204:89","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1230],"body":{"id":23129,"nodeType":"Block","src":"2195:108:89","statements":[{"assignments":[23119],"declarations":[{"constant":false,"id":23119,"mutability":"mutable","name":"tokenId","nameLocation":"2213:7:89","nodeType":"VariableDeclaration","scope":23129,"src":"2205:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23118,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2205:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23124,"initialValue":{"arguments":[{"id":23121,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23108,"src":"2239:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23122,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23110,"src":"2248:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23120,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23857,"src":"2223:15:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2223:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2205:52:89"},{"expression":{"baseExpression":{"id":23125,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23041,"src":"2274:13:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23127,"indexExpression":{"id":23126,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23119,"src":"2288:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2274:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"functionReturnParameters":23117,"id":23128,"nodeType":"Return","src":"2267:29:89"}]},"documentation":{"id":23106,"nodeType":"StructuredDocumentation","src":"2055:34:89","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"7c7d370a","id":23130,"implemented":true,"kind":"function","modifiers":[],"name":"getPaths","nameLocation":"2103:8:89","nodeType":"FunctionDefinition","parameters":{"id":23111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23108,"mutability":"mutable","name":"tokenIn","nameLocation":"2120:7:89","nodeType":"VariableDeclaration","scope":23130,"src":"2112:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23107,"name":"address","nodeType":"ElementaryTypeName","src":"2112:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23110,"mutability":"mutable","name":"tokenOut","nameLocation":"2137:8:89","nodeType":"VariableDeclaration","scope":23130,"src":"2129:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23109,"name":"address","nodeType":"ElementaryTypeName","src":"2129:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2111:35:89"},"returnParameters":{"id":23117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23116,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23130,"src":"2170:23:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep[][]"},"typeName":{"baseType":{"baseType":{"id":23113,"nodeType":"UserDefinedTypeName","pathNode":{"id":23112,"name":"SwapPathStep","nameLocations":["2170:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"2170:12:89"},"referencedDeclaration":1275,"src":"2170:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23114,"nodeType":"ArrayTypeName","src":"2170:14:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":23115,"nodeType":"ArrayTypeName","src":"2170:16:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}},"visibility":"internal"}],"src":"2169:25:89"},"scope":24017,"src":"2094:209:89","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1240],"body":{"id":23279,"nodeType":"Block","src":"2433:980:89","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23142,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23137,"src":"2447:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2453:6:89","memberName":"length","nodeType":"MemberAccess","src":"2447:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":23144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2463:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2447:17:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23150,"nodeType":"IfStatement","src":"2443:66:89","trueBody":{"id":23149,"nodeType":"Block","src":"2466:43:89","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":23146,"name":"EmptyPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1167,"src":"2487:9:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":23147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2487:11:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23148,"nodeType":"RevertStatement","src":"2480:18:89"}]}},{"assignments":[23152],"declarations":[{"constant":false,"id":23152,"mutability":"mutable","name":"tokenOut","nameLocation":"2527:8:89","nodeType":"VariableDeclaration","scope":23279,"src":"2519:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23151,"name":"address","nodeType":"ElementaryTypeName","src":"2519:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":23163,"initialValue":{"arguments":[{"expression":{"baseExpression":{"id":23155,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23137,"src":"2546:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23160,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23156,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23137,"src":"2552:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2558:6:89","memberName":"length","nodeType":"MemberAccess","src":"2552:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2567:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2552:16:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2546:23:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23161,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2570:8:89","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1272,"src":"2546:32:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":23154,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2538:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23153,"name":"address","nodeType":"ElementaryTypeName","src":"2538:7:89","typeDescriptions":{}}},"id":23162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2538:41:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2519:60:89"},{"assignments":[23165],"declarations":[{"constant":false,"id":23165,"mutability":"mutable","name":"tokenId","nameLocation":"2597:7:89","nodeType":"VariableDeclaration","scope":23279,"src":"2589:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23164,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2589:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23170,"initialValue":{"arguments":[{"id":23167,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23133,"src":"2623:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23168,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23152,"src":"2632:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23166,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23857,"src":"2607:15:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2607:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2589:52:89"},{"assignments":[23172],"declarations":[{"constant":false,"id":23172,"mutability":"mutable","name":"stepTokenIn","nameLocation":"2660:11:89","nodeType":"VariableDeclaration","scope":23279,"src":"2652:19:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23171,"name":"address","nodeType":"ElementaryTypeName","src":"2652:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":23174,"initialValue":{"id":23173,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23133,"src":"2674:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2652:29:89"},{"body":{"id":23228,"nodeType":"Block","src":"2734:396:89","statements":[{"assignments":[23188],"declarations":[{"constant":false,"id":23188,"mutability":"mutable","name":"step","nameLocation":"2768:4:89","nodeType":"VariableDeclaration","scope":23228,"src":"2748:24:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep"},"typeName":{"id":23187,"nodeType":"UserDefinedTypeName","pathNode":{"id":23186,"name":"SwapPathStep","nameLocations":["2748:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"2748:12:89"},"referencedDeclaration":1275,"src":"2748:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"visibility":"internal"}],"id":23192,"initialValue":{"baseExpression":{"id":23189,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23137,"src":"2775:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23191,"indexExpression":{"id":23190,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23176,"src":"2781:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2775:8:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"nodeType":"VariableDeclarationStatement","src":"2748:35:89"},{"condition":{"expression":{"id":23193,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23188,"src":"2801:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23194,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2806:8:89","memberName":"isBuffer","nodeType":"MemberAccess","referencedDeclaration":1274,"src":"2801:13:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":23218,"nodeType":"Block","src":"2919:95:89","statements":[{"expression":{"arguments":[{"expression":{"id":23208,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23188,"src":"2952:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23209,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2957:4:89","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1269,"src":"2952:9:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23210,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23172,"src":"2963:11:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":23213,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23188,"src":"2984:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23214,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2989:8:89","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1272,"src":"2984:13:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":23212,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2976:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23211,"name":"address","nodeType":"ElementaryTypeName","src":"2976:7:89","typeDescriptions":{}}},"id":23215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2976:22:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23207,"name":"_checkPoolStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24016,"src":"2937:14:89","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address) view"}},"id":23216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2937:62:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23217,"nodeType":"ExpressionStatement","src":"2937:62:89"}]},"id":23219,"nodeType":"IfStatement","src":"2797:217:89","trueBody":{"id":23206,"nodeType":"Block","src":"2816:97:89","statements":[{"expression":{"arguments":[{"expression":{"id":23196,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23188,"src":"2851:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23197,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2856:4:89","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1269,"src":"2851:9:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23198,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23172,"src":"2862:11:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":23201,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23188,"src":"2883:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23202,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2888:8:89","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1272,"src":"2883:13:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":23200,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2875:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23199,"name":"address","nodeType":"ElementaryTypeName","src":"2875:7:89","typeDescriptions":{}}},"id":23203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2875:22:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23195,"name":"_checkBufferStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23936,"src":"2834:16:89","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address) view"}},"id":23204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2834:64:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23205,"nodeType":"ExpressionStatement","src":"2834:64:89"}]}},{"expression":{"id":23226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23220,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23172,"src":"3083:11:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":23223,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23188,"src":"3105:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23224,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3110:8:89","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1272,"src":"3105:13:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":23222,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3097:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23221,"name":"address","nodeType":"ElementaryTypeName","src":"3097:7:89","typeDescriptions":{}}},"id":23225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3097:22:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3083:36:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":23227,"nodeType":"ExpressionStatement","src":"3083:36:89"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23179,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23176,"src":"2711:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23180,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23137,"src":"2715:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2721:6:89","memberName":"length","nodeType":"MemberAccess","src":"2715:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2711:16:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23229,"initializationExpression":{"assignments":[23176],"declarations":[{"constant":false,"id":23176,"mutability":"mutable","name":"i","nameLocation":"2704:1:89","nodeType":"VariableDeclaration","scope":23229,"src":"2696:9:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23175,"name":"uint256","nodeType":"ElementaryTypeName","src":"2696:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23178,"initialValue":{"hexValue":"30","id":23177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2708:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2696:13:89"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2729:3:89","subExpression":{"id":23183,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23176,"src":"2731:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23185,"nodeType":"ExpressionStatement","src":"2729:3:89"},"nodeType":"ForStatement","src":"2691:439:89"},{"assignments":[23235],"declarations":[{"constant":false,"id":23235,"mutability":"mutable","name":"paths","nameLocation":"3165:5:89","nodeType":"VariableDeclaration","scope":23279,"src":"3140:30:89","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"},"typeName":{"baseType":{"baseType":{"id":23232,"nodeType":"UserDefinedTypeName","pathNode":{"id":23231,"name":"SwapPathStep","nameLocations":["3140:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"3140:12:89"},"referencedDeclaration":1275,"src":"3140:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23233,"nodeType":"ArrayTypeName","src":"3140:14:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":23234,"nodeType":"ArrayTypeName","src":"3140:16:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}},"visibility":"internal"}],"id":23239,"initialValue":{"baseExpression":{"id":23236,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23041,"src":"3173:13:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23238,"indexExpression":{"id":23237,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23165,"src":"3187:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3173:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3140:55:89"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23240,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23235,"src":"3205:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3211:4:89","memberName":"push","nodeType":"MemberAccess","src":"3205:10:89","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$returns$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$attached_to$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$","typeString":"function (struct SwapPathStep storage ref[] storage ref[] storage pointer) returns (struct SwapPathStep storage ref[] storage ref)"}},"id":23243,"isConstant":false,"isLValue":true,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3205:12:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"id":23244,"nodeType":"ExpressionStatement","src":"3205:12:89"},{"body":{"id":23268,"nodeType":"Block","src":"3270:63:89","statements":[{"expression":{"arguments":[{"baseExpression":{"id":23263,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23137,"src":"3313:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23265,"indexExpression":{"id":23264,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23246,"src":"3319:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3313:8:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}],"expression":{"baseExpression":{"id":23256,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23235,"src":"3284:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23261,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23257,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23235,"src":"3290:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3296:6:89","memberName":"length","nodeType":"MemberAccess","src":"3290:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23259,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3305:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3290:16:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3284:23:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"id":23262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3308:4:89","memberName":"push","nodeType":"MemberAccess","src":"3284:28:89","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr_$_t_struct$_SwapPathStep_$1275_storage_$returns$__$attached_to$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr_$","typeString":"function (struct SwapPathStep storage ref[] storage pointer,struct SwapPathStep storage ref)"}},"id":23266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3284:38:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23267,"nodeType":"ExpressionStatement","src":"3284:38:89"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23249,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23246,"src":"3247:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23250,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23137,"src":"3251:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3257:6:89","memberName":"length","nodeType":"MemberAccess","src":"3251:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3247:16:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23269,"initializationExpression":{"assignments":[23246],"declarations":[{"constant":false,"id":23246,"mutability":"mutable","name":"i","nameLocation":"3240:1:89","nodeType":"VariableDeclaration","scope":23269,"src":"3232:9:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23245,"name":"uint256","nodeType":"ElementaryTypeName","src":"3232:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23248,"initialValue":{"hexValue":"30","id":23247,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3244:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3232:13:89"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3265:3:89","subExpression":{"id":23253,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23246,"src":"3267:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23255,"nodeType":"ExpressionStatement","src":"3265:3:89"},"nodeType":"ForStatement","src":"3227:106:89"},{"eventCall":{"arguments":[{"id":23271,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23133,"src":"3357:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23272,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23152,"src":"3366:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":23273,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23041,"src":"3376:13:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23275,"indexExpression":{"id":23274,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23165,"src":"3390:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3376:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"id":23276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3399:6:89","memberName":"length","nodeType":"MemberAccess","src":"3376:29:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23270,"name":"PathAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1150,"src":"3347:9:89","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3347:59:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23278,"nodeType":"EmitStatement","src":"3342:64:89"}]},"documentation":{"id":23131,"nodeType":"StructuredDocumentation","src":"2309:34:89","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"815ca70f","id":23280,"implemented":true,"kind":"function","modifiers":[{"id":23140,"kind":"modifierInvocation","modifierName":{"id":23139,"name":"authenticate","nameLocations":["2420:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"2420:12:89"},"nodeType":"ModifierInvocation","src":"2420:12:89"}],"name":"addPath","nameLocation":"2357:7:89","nodeType":"FunctionDefinition","parameters":{"id":23138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23133,"mutability":"mutable","name":"tokenIn","nameLocation":"2373:7:89","nodeType":"VariableDeclaration","scope":23280,"src":"2365:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23132,"name":"address","nodeType":"ElementaryTypeName","src":"2365:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23137,"mutability":"mutable","name":"steps","nameLocation":"2404:5:89","nodeType":"VariableDeclaration","scope":23280,"src":"2382:27:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":23135,"nodeType":"UserDefinedTypeName","pathNode":{"id":23134,"name":"SwapPathStep","nameLocations":["2382:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"2382:12:89"},"referencedDeclaration":1275,"src":"2382:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23136,"nodeType":"ArrayTypeName","src":"2382:14:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"}],"src":"2364:46:89"},"returnParameters":{"id":23141,"nodeType":"ParameterList","parameters":[],"src":"2433:0:89"},"scope":24017,"src":"2348:1065:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1246],"body":{"id":23317,"nodeType":"Block","src":"3525:301:89","statements":[{"condition":{"arguments":[{"id":23290,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23283,"src":"3562:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23288,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"3539:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3545:16:89","memberName":"isPoolRegistered","nodeType":"MemberAccess","referencedDeclaration":3540,"src":"3539:22:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":23291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3539:36:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"arguments":[{"arguments":[{"id":23300,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23283,"src":"3676:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23299,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"3667:8:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9846_$","typeString":"type(contract IERC4626)"}},"id":23301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3667:22:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"expression":{"id":23297,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"3634:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3640:26:89","memberName":"isERC4626BufferInitialized","nodeType":"MemberAccess","referencedDeclaration":3728,"src":"3634:32:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_IERC4626_$9846_$returns$_t_bool_$","typeString":"function (contract IERC4626) view external returns (bool)"}},"id":23302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3634:56:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":23314,"nodeType":"Block","src":"3757:63:89","statements":[{"errorCall":{"arguments":[{"id":23311,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23283,"src":"3796:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23310,"name":"InvalidSimplePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1172,"src":"3778:17:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":23312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3778:31:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23313,"nodeType":"RevertStatement","src":"3771:38:89"}]},"id":23315,"nodeType":"IfStatement","src":"3630:190:89","trueBody":{"id":23309,"nodeType":"Block","src":"3692:59:89","statements":[{"expression":{"arguments":[{"arguments":[{"id":23305,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23283,"src":"3726:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23304,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"3717:8:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9846_$","typeString":"type(contract IERC4626)"}},"id":23306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3717:22:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"id":23303,"name":"_addBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23527,"src":"3706:10:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC4626_$9846_$returns$__$","typeString":"function (contract IERC4626)"}},"id":23307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3706:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23308,"nodeType":"ExpressionStatement","src":"3706:34:89"}]}},"id":23316,"nodeType":"IfStatement","src":"3535:285:89","trueBody":{"id":23296,"nodeType":"Block","src":"3577:47:89","statements":[{"expression":{"arguments":[{"id":23293,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23283,"src":"3600:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23292,"name":"_addPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23499,"src":"3591:8:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":23294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3591:22:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23295,"nodeType":"ExpressionStatement","src":"3591:22:89"}]}}]},"documentation":{"id":23281,"nodeType":"StructuredDocumentation","src":"3419:34:89","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"f335b520","id":23318,"implemented":true,"kind":"function","modifiers":[{"id":23286,"kind":"modifierInvocation","modifierName":{"id":23285,"name":"authenticate","nameLocations":["3512:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"3512:12:89"},"nodeType":"ModifierInvocation","src":"3512:12:89"}],"name":"addSimplePath","nameLocation":"3467:13:89","nodeType":"FunctionDefinition","parameters":{"id":23284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23283,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"3489:12:89","nodeType":"VariableDeclaration","scope":23318,"src":"3481:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23282,"name":"address","nodeType":"ElementaryTypeName","src":"3481:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3480:22:89"},"returnParameters":{"id":23287,"nodeType":"ParameterList","parameters":[],"src":"3525:0:89"},"scope":24017,"src":"3458:368:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1256],"body":{"id":23393,"nodeType":"Block","src":"3970:583:89","statements":[{"assignments":[23331],"declarations":[{"constant":false,"id":23331,"mutability":"mutable","name":"tokenId","nameLocation":"3988:7:89","nodeType":"VariableDeclaration","scope":23393,"src":"3980:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23330,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3980:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23336,"initialValue":{"arguments":[{"id":23333,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23321,"src":"4014:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23334,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23323,"src":"4023:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23332,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23857,"src":"3998:15:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3998:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3980:52:89"},{"assignments":[23342],"declarations":[{"constant":false,"id":23342,"mutability":"mutable","name":"paths","nameLocation":"4067:5:89","nodeType":"VariableDeclaration","scope":23393,"src":"4042:30:89","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"},"typeName":{"baseType":{"baseType":{"id":23339,"nodeType":"UserDefinedTypeName","pathNode":{"id":23338,"name":"SwapPathStep","nameLocations":["4042:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"4042:12:89"},"referencedDeclaration":1275,"src":"4042:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23340,"nodeType":"ArrayTypeName","src":"4042:14:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":23341,"nodeType":"ArrayTypeName","src":"4042:16:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}},"visibility":"internal"}],"id":23346,"initialValue":{"baseExpression":{"id":23343,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23041,"src":"4075:13:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23345,"indexExpression":{"id":23344,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23331,"src":"4089:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4075:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"4042:55:89"},{"assignments":[23348],"declarations":[{"constant":false,"id":23348,"mutability":"mutable","name":"pathsLength","nameLocation":"4115:11:89","nodeType":"VariableDeclaration","scope":23393,"src":"4107:19:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23347,"name":"uint256","nodeType":"ElementaryTypeName","src":"4107:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23351,"initialValue":{"expression":{"id":23349,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23342,"src":"4129:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4135:6:89","memberName":"length","nodeType":"MemberAccess","src":"4129:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4107:34:89"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23352,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23325,"src":"4156:5:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":23353,"name":"pathsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23348,"src":"4165:11:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4156:20:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23359,"nodeType":"IfStatement","src":"4152:76:89","trueBody":{"id":23358,"nodeType":"Block","src":"4178:50:89","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":23355,"name":"IndexOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1193,"src":"4199:16:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":23356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4199:18:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23357,"nodeType":"RevertStatement","src":"4192:25:89"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23360,"name":"pathsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23348,"src":"4242:11:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":23361,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4256:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4242:15:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23363,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23325,"src":"4261:5:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23364,"name":"pathsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23348,"src":"4270:11:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23365,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4284:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4270:15:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4261:24:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4242:43:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23380,"nodeType":"IfStatement","src":"4238:111:89","trueBody":{"id":23379,"nodeType":"Block","src":"4287:62:89","statements":[{"expression":{"id":23377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":23369,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23342,"src":"4301:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23371,"indexExpression":{"id":23370,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23325,"src":"4307:5:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4301:12:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":23372,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23342,"src":"4316:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23376,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23373,"name":"pathsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23348,"src":"4322:11:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23374,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4336:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4322:15:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4316:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"src":"4301:37:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"id":23378,"nodeType":"ExpressionStatement","src":"4301:37:89"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23381,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23342,"src":"4475:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4481:3:89","memberName":"pop","nodeType":"MemberAccess","src":"4475:9:89","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$","typeString":"function (struct SwapPathStep storage ref[] storage ref[] storage pointer)"}},"id":23384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4475:11:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23385,"nodeType":"ExpressionStatement","src":"4475:11:89"},{"eventCall":{"arguments":[{"id":23387,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23321,"src":"4514:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23388,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23323,"src":"4523:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":23389,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23342,"src":"4533:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4539:6:89","memberName":"length","nodeType":"MemberAccess","src":"4533:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23386,"name":"PathRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1159,"src":"4502:11:89","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23391,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4502:44:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23392,"nodeType":"EmitStatement","src":"4497:49:89"}]},"documentation":{"id":23319,"nodeType":"StructuredDocumentation","src":"3832:34:89","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"32fffdbd","id":23394,"implemented":true,"kind":"function","modifiers":[{"id":23328,"kind":"modifierInvocation","modifierName":{"id":23327,"name":"authenticate","nameLocations":["3957:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"3957:12:89"},"nodeType":"ModifierInvocation","src":"3957:12:89"}],"name":"removePathAtIndex","nameLocation":"3880:17:89","nodeType":"FunctionDefinition","parameters":{"id":23326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23321,"mutability":"mutable","name":"tokenIn","nameLocation":"3906:7:89","nodeType":"VariableDeclaration","scope":23394,"src":"3898:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23320,"name":"address","nodeType":"ElementaryTypeName","src":"3898:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23323,"mutability":"mutable","name":"tokenOut","nameLocation":"3923:8:89","nodeType":"VariableDeclaration","scope":23394,"src":"3915:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23322,"name":"address","nodeType":"ElementaryTypeName","src":"3915:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23325,"mutability":"mutable","name":"index","nameLocation":"3941:5:89","nodeType":"VariableDeclaration","scope":23394,"src":"3933:13:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23324,"name":"uint256","nodeType":"ElementaryTypeName","src":"3933:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3897:50:89"},"returnParameters":{"id":23329,"nodeType":"ParameterList","parameters":[],"src":"3970:0:89"},"scope":24017,"src":"3871:682:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1262],"body":{"id":23431,"nodeType":"Block","src":"4668:307:89","statements":[{"condition":{"arguments":[{"id":23404,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23397,"src":"4705:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23402,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"4682:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4688:16:89","memberName":"isPoolRegistered","nodeType":"MemberAccess","referencedDeclaration":3540,"src":"4682:22:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":23405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4682:36:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"arguments":[{"arguments":[{"id":23414,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23397,"src":"4822:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23413,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"4813:8:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9846_$","typeString":"type(contract IERC4626)"}},"id":23415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4813:22:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"expression":{"id":23411,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"4780:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4786:26:89","memberName":"isERC4626BufferInitialized","nodeType":"MemberAccess","referencedDeclaration":3728,"src":"4780:32:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_IERC4626_$9846_$returns$_t_bool_$","typeString":"function (contract IERC4626) view external returns (bool)"}},"id":23416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4780:56:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":23428,"nodeType":"Block","src":"4906:63:89","statements":[{"errorCall":{"arguments":[{"id":23425,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23397,"src":"4945:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23424,"name":"InvalidSimplePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1172,"src":"4927:17:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":23426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4927:31:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23427,"nodeType":"RevertStatement","src":"4920:38:89"}]},"id":23429,"nodeType":"IfStatement","src":"4776:193:89","trueBody":{"id":23423,"nodeType":"Block","src":"4838:62:89","statements":[{"expression":{"arguments":[{"arguments":[{"id":23419,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23397,"src":"4875:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23418,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"4866:8:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9846_$","typeString":"type(contract IERC4626)"}},"id":23420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4866:22:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"id":23417,"name":"_removeBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23839,"src":"4852:13:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC4626_$9846_$returns$__$","typeString":"function (contract IERC4626)"}},"id":23421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4852:37:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23422,"nodeType":"ExpressionStatement","src":"4852:37:89"}]}},"id":23430,"nodeType":"IfStatement","src":"4678:291:89","trueBody":{"id":23410,"nodeType":"Block","src":"4720:50:89","statements":[{"expression":{"arguments":[{"id":23407,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23397,"src":"4746:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23406,"name":"_removePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23683,"src":"4734:11:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":23408,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4734:25:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23409,"nodeType":"ExpressionStatement","src":"4734:25:89"}]}}]},"documentation":{"id":23395,"nodeType":"StructuredDocumentation","src":"4559:34:89","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"bc138aa3","id":23432,"implemented":true,"kind":"function","modifiers":[{"id":23400,"kind":"modifierInvocation","modifierName":{"id":23399,"name":"authenticate","nameLocations":["4655:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"4655:12:89"},"nodeType":"ModifierInvocation","src":"4655:12:89"}],"name":"removeSimplePath","nameLocation":"4607:16:89","nodeType":"FunctionDefinition","parameters":{"id":23398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23397,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"4632:12:89","nodeType":"VariableDeclaration","scope":23432,"src":"4624:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23396,"name":"address","nodeType":"ElementaryTypeName","src":"4624:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4623:22:89"},"returnParameters":{"id":23401,"nodeType":"ParameterList","parameters":[],"src":"4668:0:89"},"scope":24017,"src":"4598:377:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":23498,"nodeType":"Block","src":"5022:337:89","statements":[{"assignments":[23441],"declarations":[{"constant":false,"id":23441,"mutability":"mutable","name":"tokens","nameLocation":"5048:6:89","nodeType":"VariableDeclaration","scope":23498,"src":"5032:22:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":23439,"nodeType":"UserDefinedTypeName","pathNode":{"id":23438,"name":"IERC20","nameLocations":["5032:6:89"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"5032:6:89"},"referencedDeclaration":10576,"src":"5032:6:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":23440,"nodeType":"ArrayTypeName","src":"5032:8:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":23446,"initialValue":{"arguments":[{"id":23444,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23434,"src":"5077:4:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23442,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"5057:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5063:13:89","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":3579,"src":"5057:19:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":23445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5057:25:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"5032:50:89"},{"assignments":[23448],"declarations":[{"constant":false,"id":23448,"mutability":"mutable","name":"tokenPairs","nameLocation":"5101:10:89","nodeType":"VariableDeclaration","scope":23498,"src":"5093:18:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23447,"name":"uint256","nodeType":"ElementaryTypeName","src":"5093:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23453,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23449,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23441,"src":"5114:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5121:6:89","memberName":"length","nodeType":"MemberAccess","src":"5114:13:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23451,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5130:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5114:17:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5093:38:89"},{"body":{"id":23496,"nodeType":"Block","src":"5182:171:89","statements":[{"body":{"id":23494,"nodeType":"Block","src":"5244:99:89","statements":[{"expression":{"arguments":[{"id":23478,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23434,"src":"5276:4:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":23481,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23441,"src":"5290:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23483,"indexExpression":{"id":23482,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23455,"src":"5297:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5290:9:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":23480,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5282:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23479,"name":"address","nodeType":"ElementaryTypeName","src":"5282:7:89","typeDescriptions":{}}},"id":23484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5282:18:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":23487,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23441,"src":"5310:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23489,"indexExpression":{"id":23488,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23465,"src":"5317:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5310:9:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":23486,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5302:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23485,"name":"address","nodeType":"ElementaryTypeName","src":"5302:7:89","typeDescriptions":{}}},"id":23490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5302:18:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"66616c7365","id":23491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5322:5:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23477,"name":"_addTokenPair","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23553,"src":"5262:13:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,address,bool)"}},"id":23492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5262:66:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23493,"nodeType":"ExpressionStatement","src":"5262:66:89"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23470,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23465,"src":"5220:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23471,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23441,"src":"5224:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5231:6:89","memberName":"length","nodeType":"MemberAccess","src":"5224:13:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5220:17:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23495,"initializationExpression":{"assignments":[23465],"declarations":[{"constant":false,"id":23465,"mutability":"mutable","name":"j","nameLocation":"5209:1:89","nodeType":"VariableDeclaration","scope":23495,"src":"5201:9:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23464,"name":"uint256","nodeType":"ElementaryTypeName","src":"5201:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23469,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23466,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23455,"src":"5213:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":23467,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5217:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5213:5:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5201:17:89"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5239:3:89","subExpression":{"id":23474,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23465,"src":"5241:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23476,"nodeType":"ExpressionStatement","src":"5239:3:89"},"nodeType":"ForStatement","src":"5196:147:89"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23458,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23455,"src":"5161:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":23459,"name":"tokenPairs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23448,"src":"5165:10:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5161:14:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23497,"initializationExpression":{"assignments":[23455],"declarations":[{"constant":false,"id":23455,"mutability":"mutable","name":"i","nameLocation":"5154:1:89","nodeType":"VariableDeclaration","scope":23497,"src":"5146:9:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23454,"name":"uint256","nodeType":"ElementaryTypeName","src":"5146:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23457,"initialValue":{"hexValue":"30","id":23456,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5158:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5146:13:89"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5177:3:89","subExpression":{"id":23461,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23455,"src":"5179:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23463,"nodeType":"ExpressionStatement","src":"5177:3:89"},"nodeType":"ForStatement","src":"5141:212:89"}]},"id":23499,"implemented":true,"kind":"function","modifiers":[],"name":"_addPool","nameLocation":"4990:8:89","nodeType":"FunctionDefinition","parameters":{"id":23435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23434,"mutability":"mutable","name":"pool","nameLocation":"5007:4:89","nodeType":"VariableDeclaration","scope":23499,"src":"4999:12:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23433,"name":"address","nodeType":"ElementaryTypeName","src":"4999:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4998:14:89"},"returnParameters":{"id":23436,"nodeType":"ParameterList","parameters":[],"src":"5022:0:89"},"scope":24017,"src":"4981:378:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23526,"nodeType":"Block","src":"5493:169:89","statements":[{"assignments":[23507],"declarations":[{"constant":false,"id":23507,"mutability":"mutable","name":"underlyingToken","nameLocation":"5511:15:89","nodeType":"VariableDeclaration","scope":23526,"src":"5503:23:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23506,"name":"address","nodeType":"ElementaryTypeName","src":"5503:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":23512,"initialValue":{"arguments":[{"id":23510,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23503,"src":"5550:12:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"expression":{"id":23508,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"5529:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5535:14:89","memberName":"getBufferAsset","nodeType":"MemberAccess","referencedDeclaration":2796,"src":"5529:20:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_IERC4626_$9846_$returns$_t_address_$","typeString":"function (contract IERC4626) view external returns (address)"}},"id":23511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5529:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5503:60:89"},{"expression":{"arguments":[{"arguments":[{"id":23516,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23503,"src":"5595:12:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"id":23515,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5587:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23514,"name":"address","nodeType":"ElementaryTypeName","src":"5587:7:89","typeDescriptions":{}}},"id":23517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5587:21:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23518,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23507,"src":"5610:15:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":23521,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23503,"src":"5635:12:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"id":23520,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5627:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23519,"name":"address","nodeType":"ElementaryTypeName","src":"5627:7:89","typeDescriptions":{}}},"id":23522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5627:21:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"74727565","id":23523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5650:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23513,"name":"_addTokenPair","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23553,"src":"5573:13:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,address,bool)"}},"id":23524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5573:82:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23525,"nodeType":"ExpressionStatement","src":"5573:82:89"}]},"documentation":{"id":23500,"nodeType":"StructuredDocumentation","src":"5365:71:89","text":"@dev Always wrap, as long as it's a registered buffer in the Vault."},"id":23527,"implemented":true,"kind":"function","modifiers":[],"name":"_addBuffer","nameLocation":"5450:10:89","nodeType":"FunctionDefinition","parameters":{"id":23504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23503,"mutability":"mutable","name":"wrappedToken","nameLocation":"5470:12:89","nodeType":"VariableDeclaration","scope":23527,"src":"5461:21:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":23502,"nodeType":"UserDefinedTypeName","pathNode":{"id":23501,"name":"IERC4626","nameLocations":["5461:8:89"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"5461:8:89"},"referencedDeclaration":9846,"src":"5461:8:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"5460:23:89"},"returnParameters":{"id":23505,"nodeType":"ParameterList","parameters":[],"src":"5493:0:89"},"scope":24017,"src":"5441:221:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23552,"nodeType":"Block","src":"5769:143:89","statements":[{"expression":{"arguments":[{"id":23539,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23529,"src":"5798:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23540,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23531,"src":"5812:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23541,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23533,"src":"5820:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23542,"name":"isBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23535,"src":"5828:8:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23538,"name":"_addSimplePairStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23617,"src":"5779:18:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,address,bool)"}},"id":23543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5779:58:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23544,"nodeType":"ExpressionStatement","src":"5779:58:89"},{"expression":{"arguments":[{"id":23546,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23529,"src":"5866:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23547,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23533,"src":"5880:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23548,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23531,"src":"5888:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23549,"name":"isBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23535,"src":"5896:8:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23545,"name":"_addSimplePairStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23617,"src":"5847:18:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,address,bool)"}},"id":23550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5847:58:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23551,"nodeType":"ExpressionStatement","src":"5847:58:89"}]},"id":23553,"implemented":true,"kind":"function","modifiers":[],"name":"_addTokenPair","nameLocation":"5677:13:89","nodeType":"FunctionDefinition","parameters":{"id":23536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23529,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"5699:12:89","nodeType":"VariableDeclaration","scope":23553,"src":"5691:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23528,"name":"address","nodeType":"ElementaryTypeName","src":"5691:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23531,"mutability":"mutable","name":"tokenA","nameLocation":"5721:6:89","nodeType":"VariableDeclaration","scope":23553,"src":"5713:14:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23530,"name":"address","nodeType":"ElementaryTypeName","src":"5713:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23533,"mutability":"mutable","name":"tokenB","nameLocation":"5737:6:89","nodeType":"VariableDeclaration","scope":23553,"src":"5729:14:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23532,"name":"address","nodeType":"ElementaryTypeName","src":"5729:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23535,"mutability":"mutable","name":"isBuffer","nameLocation":"5750:8:89","nodeType":"VariableDeclaration","scope":23553,"src":"5745:13:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23534,"name":"bool","nodeType":"ElementaryTypeName","src":"5745:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5690:69:89"},"returnParameters":{"id":23537,"nodeType":"ParameterList","parameters":[],"src":"5769:0:89"},"scope":24017,"src":"5668:244:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23616,"nodeType":"Block","src":"6027:396:89","statements":[{"assignments":[23565],"declarations":[{"constant":false,"id":23565,"mutability":"mutable","name":"tokenId","nameLocation":"6045:7:89","nodeType":"VariableDeclaration","scope":23616,"src":"6037:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23564,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6037:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23570,"initialValue":{"arguments":[{"id":23567,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23557,"src":"6071:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23568,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23559,"src":"6080:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23566,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23857,"src":"6055:15:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6055:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6037:52:89"},{"assignments":[23573],"declarations":[{"constant":false,"id":23573,"mutability":"mutable","name":"step","nameLocation":"6119:4:89","nodeType":"VariableDeclaration","scope":23616,"src":"6099:24:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep"},"typeName":{"id":23572,"nodeType":"UserDefinedTypeName","pathNode":{"id":23571,"name":"SwapPathStep","nameLocations":["6099:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"6099:12:89"},"referencedDeclaration":1275,"src":"6099:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"visibility":"internal"}],"id":23581,"initialValue":{"arguments":[{"id":23575,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23555,"src":"6147:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":23577,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23559,"src":"6178:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23576,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"6171:6:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10576_$","typeString":"type(contract IERC20)"}},"id":23578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6171:16:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":23579,"name":"isBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23561,"src":"6199:8:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23574,"name":"SwapPathStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1275,"src":"6126:12:89","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_SwapPathStep_$1275_storage_ptr_$","typeString":"type(struct SwapPathStep storage pointer)"}},"id":23580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["6141:4:89","6161:8:89","6189:8:89"],"names":["pool","tokenOut","isBuffer"],"nodeType":"FunctionCall","src":"6126:84:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"nodeType":"VariableDeclarationStatement","src":"6099:111:89"},{"assignments":[23587],"declarations":[{"constant":false,"id":23587,"mutability":"mutable","name":"paths","nameLocation":"6246:5:89","nodeType":"VariableDeclaration","scope":23616,"src":"6221:30:89","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"},"typeName":{"baseType":{"baseType":{"id":23584,"nodeType":"UserDefinedTypeName","pathNode":{"id":23583,"name":"SwapPathStep","nameLocations":["6221:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"6221:12:89"},"referencedDeclaration":1275,"src":"6221:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23585,"nodeType":"ArrayTypeName","src":"6221:14:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":23586,"nodeType":"ArrayTypeName","src":"6221:16:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}},"visibility":"internal"}],"id":23591,"initialValue":{"baseExpression":{"id":23588,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23041,"src":"6254:13:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23590,"indexExpression":{"id":23589,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23565,"src":"6268:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6254:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"6221:55:89"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23592,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23587,"src":"6286:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6292:4:89","memberName":"push","nodeType":"MemberAccess","src":"6286:10:89","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$returns$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$attached_to$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$","typeString":"function (struct SwapPathStep storage ref[] storage ref[] storage pointer) returns (struct SwapPathStep storage ref[] storage ref)"}},"id":23595,"isConstant":false,"isLValue":true,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6286:12:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"id":23596,"nodeType":"ExpressionStatement","src":"6286:12:89"},{"expression":{"arguments":[{"id":23604,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23573,"src":"6337:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}],"expression":{"baseExpression":{"id":23597,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23587,"src":"6308:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23602,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23598,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23587,"src":"6314:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6320:6:89","memberName":"length","nodeType":"MemberAccess","src":"6314:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6329:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6314:16:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6308:23:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"id":23603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6332:4:89","memberName":"push","nodeType":"MemberAccess","src":"6308:28:89","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr_$_t_struct$_SwapPathStep_$1275_storage_$returns$__$attached_to$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr_$","typeString":"function (struct SwapPathStep storage ref[] storage pointer,struct SwapPathStep storage ref)"}},"id":23605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6308:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23606,"nodeType":"ExpressionStatement","src":"6308:34:89"},{"eventCall":{"arguments":[{"id":23608,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23557,"src":"6367:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23609,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23559,"src":"6376:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":23610,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23041,"src":"6386:13:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23612,"indexExpression":{"id":23611,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23565,"src":"6400:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6386:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"id":23613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6409:6:89","memberName":"length","nodeType":"MemberAccess","src":"6386:29:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23607,"name":"PathAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1150,"src":"6357:9:89","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6357:59:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23615,"nodeType":"EmitStatement","src":"6352:64:89"}]},"id":23617,"implemented":true,"kind":"function","modifiers":[],"name":"_addSimplePairStep","nameLocation":"5927:18:89","nodeType":"FunctionDefinition","parameters":{"id":23562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23555,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"5954:12:89","nodeType":"VariableDeclaration","scope":23617,"src":"5946:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23554,"name":"address","nodeType":"ElementaryTypeName","src":"5946:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23557,"mutability":"mutable","name":"tokenIn","nameLocation":"5976:7:89","nodeType":"VariableDeclaration","scope":23617,"src":"5968:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23556,"name":"address","nodeType":"ElementaryTypeName","src":"5968:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23559,"mutability":"mutable","name":"tokenOut","nameLocation":"5993:8:89","nodeType":"VariableDeclaration","scope":23617,"src":"5985:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23558,"name":"address","nodeType":"ElementaryTypeName","src":"5985:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23561,"mutability":"mutable","name":"isBuffer","nameLocation":"6008:8:89","nodeType":"VariableDeclaration","scope":23617,"src":"6003:13:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23560,"name":"bool","nodeType":"ElementaryTypeName","src":"6003:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5945:72:89"},"returnParameters":{"id":23563,"nodeType":"ParameterList","parameters":[],"src":"6027:0:89"},"scope":24017,"src":"5918:505:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23682,"nodeType":"Block","src":"6473:333:89","statements":[{"assignments":[23626],"declarations":[{"constant":false,"id":23626,"mutability":"mutable","name":"tokens","nameLocation":"6499:6:89","nodeType":"VariableDeclaration","scope":23682,"src":"6483:22:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":23624,"nodeType":"UserDefinedTypeName","pathNode":{"id":23623,"name":"IERC20","nameLocations":["6483:6:89"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6483:6:89"},"referencedDeclaration":10576,"src":"6483:6:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":23625,"nodeType":"ArrayTypeName","src":"6483:8:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":23631,"initialValue":{"arguments":[{"id":23629,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23619,"src":"6528:4:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23627,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"6508:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6514:13:89","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":3579,"src":"6508:19:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":23630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6508:25:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"6483:50:89"},{"assignments":[23633],"declarations":[{"constant":false,"id":23633,"mutability":"mutable","name":"tokenPairs","nameLocation":"6552:10:89","nodeType":"VariableDeclaration","scope":23682,"src":"6544:18:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23632,"name":"uint256","nodeType":"ElementaryTypeName","src":"6544:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23638,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23634,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23626,"src":"6565:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6572:6:89","memberName":"length","nodeType":"MemberAccess","src":"6565:13:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23636,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6581:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6565:17:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6544:38:89"},{"body":{"id":23680,"nodeType":"Block","src":"6633:167:89","statements":[{"body":{"id":23678,"nodeType":"Block","src":"6695:95:89","statements":[{"expression":{"arguments":[{"id":23663,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23619,"src":"6730:4:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":23666,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23626,"src":"6744:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23668,"indexExpression":{"id":23667,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23640,"src":"6751:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6744:9:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":23665,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6736:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23664,"name":"address","nodeType":"ElementaryTypeName","src":"6736:7:89","typeDescriptions":{}}},"id":23669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6736:18:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":23672,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23626,"src":"6764:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23674,"indexExpression":{"id":23673,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23650,"src":"6771:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6764:9:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":23671,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6756:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23670,"name":"address","nodeType":"ElementaryTypeName","src":"6756:7:89","typeDescriptions":{}}},"id":23675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6756:18:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23662,"name":"_removeTokenPair","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23705,"src":"6713:16:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":23676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6713:62:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23677,"nodeType":"ExpressionStatement","src":"6713:62:89"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23655,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23650,"src":"6671:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23656,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23626,"src":"6675:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6682:6:89","memberName":"length","nodeType":"MemberAccess","src":"6675:13:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6671:17:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23679,"initializationExpression":{"assignments":[23650],"declarations":[{"constant":false,"id":23650,"mutability":"mutable","name":"j","nameLocation":"6660:1:89","nodeType":"VariableDeclaration","scope":23679,"src":"6652:9:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23649,"name":"uint256","nodeType":"ElementaryTypeName","src":"6652:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23654,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23651,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23640,"src":"6664:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":23652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6668:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6664:5:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6652:17:89"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"6690:3:89","subExpression":{"id":23659,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23650,"src":"6692:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23661,"nodeType":"ExpressionStatement","src":"6690:3:89"},"nodeType":"ForStatement","src":"6647:143:89"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23643,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23640,"src":"6612:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":23644,"name":"tokenPairs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23633,"src":"6616:10:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6612:14:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23681,"initializationExpression":{"assignments":[23640],"declarations":[{"constant":false,"id":23640,"mutability":"mutable","name":"i","nameLocation":"6605:1:89","nodeType":"VariableDeclaration","scope":23681,"src":"6597:9:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23639,"name":"uint256","nodeType":"ElementaryTypeName","src":"6597:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23642,"initialValue":{"hexValue":"30","id":23641,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6609:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6597:13:89"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"6628:3:89","subExpression":{"id":23646,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23640,"src":"6630:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23648,"nodeType":"ExpressionStatement","src":"6628:3:89"},"nodeType":"ForStatement","src":"6592:208:89"}]},"id":23683,"implemented":true,"kind":"function","modifiers":[],"name":"_removePool","nameLocation":"6438:11:89","nodeType":"FunctionDefinition","parameters":{"id":23620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23619,"mutability":"mutable","name":"pool","nameLocation":"6458:4:89","nodeType":"VariableDeclaration","scope":23683,"src":"6450:12:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23618,"name":"address","nodeType":"ElementaryTypeName","src":"6450:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6449:14:89"},"returnParameters":{"id":23621,"nodeType":"ParameterList","parameters":[],"src":"6473:0:89"},"scope":24017,"src":"6429:377:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23704,"nodeType":"Block","src":"6901:129:89","statements":[{"expression":{"arguments":[{"id":23693,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23685,"src":"6933:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23694,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23687,"src":"6947:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23695,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23689,"src":"6955:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23692,"name":"_removeSimplePairStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"6911:21:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":23696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6911:51:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23697,"nodeType":"ExpressionStatement","src":"6911:51:89"},{"expression":{"arguments":[{"id":23699,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23685,"src":"6994:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23700,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23689,"src":"7008:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23701,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23687,"src":"7016:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23698,"name":"_removeSimplePairStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"6972:21:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":23702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6972:51:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23703,"nodeType":"ExpressionStatement","src":"6972:51:89"}]},"id":23705,"implemented":true,"kind":"function","modifiers":[],"name":"_removeTokenPair","nameLocation":"6821:16:89","nodeType":"FunctionDefinition","parameters":{"id":23690,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23685,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"6846:12:89","nodeType":"VariableDeclaration","scope":23705,"src":"6838:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23684,"name":"address","nodeType":"ElementaryTypeName","src":"6838:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23687,"mutability":"mutable","name":"tokenA","nameLocation":"6868:6:89","nodeType":"VariableDeclaration","scope":23705,"src":"6860:14:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23686,"name":"address","nodeType":"ElementaryTypeName","src":"6860:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23689,"mutability":"mutable","name":"tokenB","nameLocation":"6884:6:89","nodeType":"VariableDeclaration","scope":23705,"src":"6876:14:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23688,"name":"address","nodeType":"ElementaryTypeName","src":"6876:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6837:54:89"},"returnParameters":{"id":23691,"nodeType":"ParameterList","parameters":[],"src":"6901:0:89"},"scope":24017,"src":"6812:218:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23812,"nodeType":"Block","src":"7133:1025:89","statements":[{"assignments":[23715],"declarations":[{"constant":false,"id":23715,"mutability":"mutable","name":"tokenId","nameLocation":"7151:7:89","nodeType":"VariableDeclaration","scope":23812,"src":"7143:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23714,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7143:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23720,"initialValue":{"arguments":[{"id":23717,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23709,"src":"7177:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23718,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23711,"src":"7186:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23716,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23857,"src":"7161:15:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7161:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"7143:52:89"},{"assignments":[23726],"declarations":[{"constant":false,"id":23726,"mutability":"mutable","name":"paths","nameLocation":"7231:5:89","nodeType":"VariableDeclaration","scope":23812,"src":"7206:30:89","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"},"typeName":{"baseType":{"baseType":{"id":23723,"nodeType":"UserDefinedTypeName","pathNode":{"id":23722,"name":"SwapPathStep","nameLocations":["7206:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"7206:12:89"},"referencedDeclaration":1275,"src":"7206:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23724,"nodeType":"ArrayTypeName","src":"7206:14:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":23725,"nodeType":"ArrayTypeName","src":"7206:16:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}},"visibility":"internal"}],"id":23730,"initialValue":{"baseExpression":{"id":23727,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23041,"src":"7239:13:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23729,"indexExpression":{"id":23728,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23715,"src":"7253:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7239:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7206:55:89"},{"body":{"id":23804,"nodeType":"Block","src":"7392:582:89","statements":[{"assignments":[23746],"declarations":[{"constant":false,"id":23746,"mutability":"mutable","name":"steps","nameLocation":"7429:5:89","nodeType":"VariableDeclaration","scope":23804,"src":"7406:28:89","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":23744,"nodeType":"UserDefinedTypeName","pathNode":{"id":23743,"name":"SwapPathStep","nameLocations":["7406:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"7406:12:89"},"referencedDeclaration":1275,"src":"7406:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23745,"nodeType":"ArrayTypeName","src":"7406:14:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"}],"id":23750,"initialValue":{"baseExpression":{"id":23747,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"7437:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23749,"indexExpression":{"id":23748,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23732,"src":"7443:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7437:8:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7406:39:89"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23751,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23746,"src":"7464:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage pointer"}},"id":23752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7470:6:89","memberName":"length","nodeType":"MemberAccess","src":"7464:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":23753,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7480:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7464:17:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":23755,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23746,"src":"7485:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage pointer"}},"id":23757,"indexExpression":{"hexValue":"30","id":23756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7491:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7485:8:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage","typeString":"struct SwapPathStep storage ref"}},"id":23758,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7494:4:89","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1269,"src":"7485:13:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":23759,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23707,"src":"7502:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7485:29:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7464:50:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"baseExpression":{"id":23764,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23746,"src":"7526:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage pointer"}},"id":23766,"indexExpression":{"hexValue":"30","id":23765,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7532:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7526:8:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage","typeString":"struct SwapPathStep storage ref"}},"id":23767,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7535:8:89","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1272,"src":"7526:17:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":23763,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7518:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23762,"name":"address","nodeType":"ElementaryTypeName","src":"7518:7:89","typeDescriptions":{}}},"id":23768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7518:26:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":23769,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23711,"src":"7548:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7518:38:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7464:92:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23803,"nodeType":"IfStatement","src":"7460:504:89","trueBody":{"id":23802,"nodeType":"Block","src":"7558:406:89","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23772,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"7691:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7697:6:89","memberName":"length","nodeType":"MemberAccess","src":"7691:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":23774,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7706:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7691:16:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23788,"nodeType":"IfStatement","src":"7687:97:89","trueBody":{"id":23787,"nodeType":"Block","src":"7709:75:89","statements":[{"expression":{"id":23785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":23776,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"7731:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23778,"indexExpression":{"id":23777,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23732,"src":"7737:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7731:8:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":23779,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"7742:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23784,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23780,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"7748:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7754:6:89","memberName":"length","nodeType":"MemberAccess","src":"7748:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23782,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7763:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7748:16:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7742:23:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"src":"7731:34:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"id":23786,"nodeType":"ExpressionStatement","src":"7731:34:89"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23789,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"7846:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7852:3:89","memberName":"pop","nodeType":"MemberAccess","src":"7846:9:89","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$","typeString":"function (struct SwapPathStep storage ref[] storage ref[] storage pointer)"}},"id":23792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7846:11:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23793,"nodeType":"ExpressionStatement","src":"7846:11:89"},{"eventCall":{"arguments":[{"id":23795,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23709,"src":"7892:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23796,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23711,"src":"7901:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":23797,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"7911:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7917:6:89","memberName":"length","nodeType":"MemberAccess","src":"7911:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23794,"name":"PathRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1159,"src":"7880:11:89","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7880:44:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23800,"nodeType":"EmitStatement","src":"7875:49:89"},{"functionReturnParameters":23713,"id":23801,"nodeType":"Return","src":"7943:7:89"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23735,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23732,"src":"7369:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23736,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"7373:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7379:6:89","memberName":"length","nodeType":"MemberAccess","src":"7373:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7369:16:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23805,"initializationExpression":{"assignments":[23732],"declarations":[{"constant":false,"id":23732,"mutability":"mutable","name":"i","nameLocation":"7362:1:89","nodeType":"VariableDeclaration","scope":23805,"src":"7354:9:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23731,"name":"uint256","nodeType":"ElementaryTypeName","src":"7354:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23734,"initialValue":{"hexValue":"30","id":23733,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7366:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7354:13:89"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7387:3:89","subExpression":{"id":23739,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23732,"src":"7389:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23741,"nodeType":"ExpressionStatement","src":"7387:3:89"},"nodeType":"ForStatement","src":"7349:625:89"},{"errorCall":{"arguments":[{"id":23807,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23707,"src":"8119:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23808,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23709,"src":"8133:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23809,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23711,"src":"8142:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23806,"name":"InvalidRemovePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1181,"src":"8101:17:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address,address) pure returns (error)"}},"id":23810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8101:50:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23811,"nodeType":"RevertStatement","src":"8094:57:89"}]},"id":23813,"implemented":true,"kind":"function","modifiers":[],"name":"_removeSimplePairStep","nameLocation":"7045:21:89","nodeType":"FunctionDefinition","parameters":{"id":23712,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23707,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"7075:12:89","nodeType":"VariableDeclaration","scope":23813,"src":"7067:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23706,"name":"address","nodeType":"ElementaryTypeName","src":"7067:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23709,"mutability":"mutable","name":"tokenIn","nameLocation":"7097:7:89","nodeType":"VariableDeclaration","scope":23813,"src":"7089:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23708,"name":"address","nodeType":"ElementaryTypeName","src":"7089:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23711,"mutability":"mutable","name":"tokenOut","nameLocation":"7114:8:89","nodeType":"VariableDeclaration","scope":23813,"src":"7106:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23710,"name":"address","nodeType":"ElementaryTypeName","src":"7106:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7066:57:89"},"returnParameters":{"id":23713,"nodeType":"ParameterList","parameters":[],"src":"7133:0:89"},"scope":24017,"src":"7036:1122:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23838,"nodeType":"Block","src":"8219:166:89","statements":[{"assignments":[23820],"declarations":[{"constant":false,"id":23820,"mutability":"mutable","name":"underlyingToken","nameLocation":"8237:15:89","nodeType":"VariableDeclaration","scope":23838,"src":"8229:23:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23819,"name":"address","nodeType":"ElementaryTypeName","src":"8229:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":23825,"initialValue":{"arguments":[{"id":23823,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23816,"src":"8276:12:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"expression":{"id":23821,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"8255:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8261:14:89","memberName":"getBufferAsset","nodeType":"MemberAccess","referencedDeclaration":2796,"src":"8255:20:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_IERC4626_$9846_$returns$_t_address_$","typeString":"function (contract IERC4626) view external returns (address)"}},"id":23824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8255:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8229:60:89"},{"expression":{"arguments":[{"arguments":[{"id":23829,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23816,"src":"8324:12:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"id":23828,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8316:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23827,"name":"address","nodeType":"ElementaryTypeName","src":"8316:7:89","typeDescriptions":{}}},"id":23830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8316:21:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23831,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23820,"src":"8339:15:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":23834,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23816,"src":"8364:12:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"id":23833,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8356:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23832,"name":"address","nodeType":"ElementaryTypeName","src":"8356:7:89","typeDescriptions":{}}},"id":23835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8356:21:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23826,"name":"_removeTokenPair","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23705,"src":"8299:16:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":23836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8299:79:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23837,"nodeType":"ExpressionStatement","src":"8299:79:89"}]},"id":23839,"implemented":true,"kind":"function","modifiers":[],"name":"_removeBuffer","nameLocation":"8173:13:89","nodeType":"FunctionDefinition","parameters":{"id":23817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23816,"mutability":"mutable","name":"wrappedToken","nameLocation":"8196:12:89","nodeType":"VariableDeclaration","scope":23839,"src":"8187:21:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":23815,"nodeType":"UserDefinedTypeName","pathNode":{"id":23814,"name":"IERC4626","nameLocations":["8187:8:89"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"8187:8:89"},"referencedDeclaration":9846,"src":"8187:8:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"8186:23:89"},"returnParameters":{"id":23818,"nodeType":"ParameterList","parameters":[],"src":"8219:0:89"},"scope":24017,"src":"8164:221:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23856,"nodeType":"Block","src":"8483:70:89","statements":[{"expression":{"arguments":[{"arguments":[{"id":23851,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23841,"src":"8527:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23852,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23843,"src":"8536:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23849,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8510:3:89","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":23850,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8514:12:89","memberName":"encodePacked","nodeType":"MemberAccess","src":"8510:16:89","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":23853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8510:35:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":23848,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8500:9:89","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":23854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8500:46:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":23847,"id":23855,"nodeType":"Return","src":"8493:53:89"}]},"id":23857,"implemented":true,"kind":"function","modifiers":[],"name":"_getTokenPairId","nameLocation":"8400:15:89","nodeType":"FunctionDefinition","parameters":{"id":23844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23841,"mutability":"mutable","name":"tokenIn","nameLocation":"8424:7:89","nodeType":"VariableDeclaration","scope":23857,"src":"8416:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23840,"name":"address","nodeType":"ElementaryTypeName","src":"8416:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23843,"mutability":"mutable","name":"tokenOut","nameLocation":"8441:8:89","nodeType":"VariableDeclaration","scope":23857,"src":"8433:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23842,"name":"address","nodeType":"ElementaryTypeName","src":"8433:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8415:35:89"},"returnParameters":{"id":23847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23846,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23857,"src":"8474:7:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23845,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8474:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8473:9:89"},"scope":24017,"src":"8391:162:89","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":23935,"nodeType":"Block","src":"8650:746:89","statements":[{"assignments":[23867],"declarations":[{"constant":false,"id":23867,"mutability":"mutable","name":"underlying","nameLocation":"8668:10:89","nodeType":"VariableDeclaration","scope":23935,"src":"8660:18:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23866,"name":"address","nodeType":"ElementaryTypeName","src":"8660:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":23877,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":23873,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23859,"src":"8719:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23872,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"8710:8:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9846_$","typeString":"type(contract IERC4626)"}},"id":23874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8710:16:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"expression":{"id":23870,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"8689:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8695:14:89","memberName":"getBufferAsset","nodeType":"MemberAccess","referencedDeclaration":2796,"src":"8689:20:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_IERC4626_$9846_$returns$_t_address_$","typeString":"function (contract IERC4626) view external returns (address)"}},"id":23875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8689:38:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23869,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8681:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23868,"name":"address","nodeType":"ElementaryTypeName","src":"8681:7:89","typeDescriptions":{}}},"id":23876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8681:47:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8660:68:89"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23878,"name":"underlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23867,"src":"8743:10:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":23881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8765:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":23880,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8757:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23879,"name":"address","nodeType":"ElementaryTypeName","src":"8757:7:89","typeDescriptions":{}}},"id":23882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8757:10:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8743:24:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23889,"nodeType":"IfStatement","src":"8739:90:89","trueBody":{"id":23888,"nodeType":"Block","src":"8769:60:89","statements":[{"errorCall":{"arguments":[{"id":23885,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23859,"src":"8811:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23884,"name":"BufferNotInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1164,"src":"8790:20:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":23886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8790:28:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23887,"nodeType":"RevertStatement","src":"8783:35:89"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23890,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23861,"src":"8843:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":23891,"name":"underlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23867,"src":"8854:10:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8843:21:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23908,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23861,"src":"9048:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":23909,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23859,"src":"9059:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9048:17:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":23932,"nodeType":"Block","src":"9252:138:89","statements":[{"errorCall":{"arguments":[{"id":23927,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23859,"src":"9353:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23928,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23861,"src":"9361:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23929,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23863,"src":"9370:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23926,"name":"InvalidBufferPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1190,"src":"9335:17:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address,address) pure returns (error)"}},"id":23930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9335:44:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23931,"nodeType":"RevertStatement","src":"9328:51:89"}]},"id":23933,"nodeType":"IfStatement","src":"9044:346:89","trueBody":{"id":23925,"nodeType":"Block","src":"9067:179:89","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23911,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23863,"src":"9119:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":23914,"name":"underlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23867,"src":"9139:10:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9131:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23912,"name":"address","nodeType":"ElementaryTypeName","src":"9131:7:89","typeDescriptions":{}}},"id":23915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9131:19:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9119:31:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23924,"nodeType":"IfStatement","src":"9115:121:89","trueBody":{"id":23923,"nodeType":"Block","src":"9152:84:89","statements":[{"errorCall":{"arguments":[{"id":23918,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23859,"src":"9195:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23919,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23861,"src":"9203:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23920,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23863,"src":"9212:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23917,"name":"InvalidBufferPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1190,"src":"9177:17:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address,address) pure returns (error)"}},"id":23921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9177:44:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23922,"nodeType":"RevertStatement","src":"9170:51:89"}]}}]}},"id":23934,"nodeType":"IfStatement","src":"8839:551:89","trueBody":{"id":23907,"nodeType":"Block","src":"8866:172:89","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23893,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23863,"src":"8915:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":23896,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23859,"src":"8935:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23895,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8927:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23894,"name":"address","nodeType":"ElementaryTypeName","src":"8927:7:89","typeDescriptions":{}}},"id":23897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8927:15:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8915:27:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23906,"nodeType":"IfStatement","src":"8911:117:89","trueBody":{"id":23905,"nodeType":"Block","src":"8944:84:89","statements":[{"errorCall":{"arguments":[{"id":23900,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23859,"src":"8987:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23901,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23861,"src":"8995:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23902,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23863,"src":"9004:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23899,"name":"InvalidBufferPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1190,"src":"8969:17:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address,address) pure returns (error)"}},"id":23903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8969:44:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23904,"nodeType":"RevertStatement","src":"8962:51:89"}]}}]}}]},"id":23936,"implemented":true,"kind":"function","modifiers":[],"name":"_checkBufferStep","nameLocation":"8568:16:89","nodeType":"FunctionDefinition","parameters":{"id":23864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23859,"mutability":"mutable","name":"buffer","nameLocation":"8593:6:89","nodeType":"VariableDeclaration","scope":23936,"src":"8585:14:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23858,"name":"address","nodeType":"ElementaryTypeName","src":"8585:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23861,"mutability":"mutable","name":"tokenIn","nameLocation":"8609:7:89","nodeType":"VariableDeclaration","scope":23936,"src":"8601:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23860,"name":"address","nodeType":"ElementaryTypeName","src":"8601:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23863,"mutability":"mutable","name":"tokenOut","nameLocation":"8626:8:89","nodeType":"VariableDeclaration","scope":23936,"src":"8618:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23862,"name":"address","nodeType":"ElementaryTypeName","src":"8618:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8584:51:89"},"returnParameters":{"id":23865,"nodeType":"ParameterList","parameters":[],"src":"8650:0:89"},"scope":24017,"src":"8559:837:89","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":24015,"nodeType":"Block","src":"9489:492:89","statements":[{"assignments":[23949],"declarations":[{"constant":false,"id":23949,"mutability":"mutable","name":"tokens","nameLocation":"9515:6:89","nodeType":"VariableDeclaration","scope":24015,"src":"9499:22:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":23947,"nodeType":"UserDefinedTypeName","pathNode":{"id":23946,"name":"IERC20","nameLocations":["9499:6:89"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"9499:6:89"},"referencedDeclaration":10576,"src":"9499:6:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":23948,"nodeType":"ArrayTypeName","src":"9499:8:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":23954,"initialValue":{"arguments":[{"id":23952,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23938,"src":"9544:4:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23950,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"9524:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9530:13:89","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":3579,"src":"9524:19:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":23953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9524:25:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"9499:50:89"},{"assignments":[23956],"declarations":[{"constant":false,"id":23956,"mutability":"mutable","name":"foundIn","nameLocation":"9565:7:89","nodeType":"VariableDeclaration","scope":24015,"src":"9560:12:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23955,"name":"bool","nodeType":"ElementaryTypeName","src":"9560:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":23958,"initialValue":{"hexValue":"66616c7365","id":23957,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9575:5:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"9560:20:89"},{"assignments":[23960],"declarations":[{"constant":false,"id":23960,"mutability":"mutable","name":"foundOut","nameLocation":"9595:8:89","nodeType":"VariableDeclaration","scope":24015,"src":"9590:13:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23959,"name":"bool","nodeType":"ElementaryTypeName","src":"9590:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":23962,"initialValue":{"hexValue":"66616c7365","id":23961,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9606:5:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"9590:21:89"},{"body":{"id":24000,"nodeType":"Block","src":"9666:201:89","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"id":23980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":23974,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23949,"src":"9684:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23976,"indexExpression":{"id":23975,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23964,"src":"9691:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9684:9:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":23978,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23940,"src":"9704:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23977,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"9697:6:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10576_$","typeString":"type(contract IERC20)"}},"id":23979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9697:15:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"9684:28:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23986,"nodeType":"IfStatement","src":"9680:81:89","trueBody":{"id":23985,"nodeType":"Block","src":"9714:47:89","statements":[{"expression":{"id":23983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23981,"name":"foundIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23956,"src":"9732:7:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":23982,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9742:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"9732:14:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23984,"nodeType":"ExpressionStatement","src":"9732:14:89"}]}},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"id":23993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":23987,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23949,"src":"9778:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23989,"indexExpression":{"id":23988,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23964,"src":"9785:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9778:9:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":23991,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23942,"src":"9798:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23990,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"9791:6:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10576_$","typeString":"type(contract IERC20)"}},"id":23992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9791:16:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"9778:29:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23999,"nodeType":"IfStatement","src":"9774:83:89","trueBody":{"id":23998,"nodeType":"Block","src":"9809:48:89","statements":[{"expression":{"id":23996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23994,"name":"foundOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23960,"src":"9827:8:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":23995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9838:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"9827:15:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23997,"nodeType":"ExpressionStatement","src":"9827:15:89"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23967,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23964,"src":"9642:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23968,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23949,"src":"9646:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9653:6:89","memberName":"length","nodeType":"MemberAccess","src":"9646:13:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9642:17:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24001,"initializationExpression":{"assignments":[23964],"declarations":[{"constant":false,"id":23964,"mutability":"mutable","name":"i","nameLocation":"9635:1:89","nodeType":"VariableDeclaration","scope":24001,"src":"9627:9:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23963,"name":"uint256","nodeType":"ElementaryTypeName","src":"9627:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23966,"initialValue":{"hexValue":"30","id":23965,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9639:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9627:13:89"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"9661:3:89","subExpression":{"id":23971,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23964,"src":"9663:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23973,"nodeType":"ExpressionStatement","src":"9661:3:89"},"nodeType":"ForStatement","src":"9622:245:89"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":24008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":24004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24002,"name":"foundIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23956,"src":"9881:7:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":24003,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9892:5:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"9881:16:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":24007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24005,"name":"foundOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23960,"src":"9901:8:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":24006,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9913:5:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"9901:17:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9881:37:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24014,"nodeType":"IfStatement","src":"9877:98:89","trueBody":{"id":24013,"nodeType":"Block","src":"9920:55:89","statements":[{"errorCall":{"arguments":[{"id":24010,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23938,"src":"9959:4:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24009,"name":"InvalidSimplePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1172,"src":"9941:17:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":24011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9941:23:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24012,"nodeType":"RevertStatement","src":"9934:30:89"}]}}]},"id":24016,"implemented":true,"kind":"function","modifiers":[],"name":"_checkPoolStep","nameLocation":"9411:14:89","nodeType":"FunctionDefinition","parameters":{"id":23943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23938,"mutability":"mutable","name":"pool","nameLocation":"9434:4:89","nodeType":"VariableDeclaration","scope":24016,"src":"9426:12:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23937,"name":"address","nodeType":"ElementaryTypeName","src":"9426:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23940,"mutability":"mutable","name":"tokenIn","nameLocation":"9448:7:89","nodeType":"VariableDeclaration","scope":24016,"src":"9440:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23939,"name":"address","nodeType":"ElementaryTypeName","src":"9440:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23942,"mutability":"mutable","name":"tokenOut","nameLocation":"9465:8:89","nodeType":"VariableDeclaration","scope":24016,"src":"9457:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23941,"name":"address","nodeType":"ElementaryTypeName","src":"9457:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9425:49:89"},"returnParameters":{"id":23944,"nodeType":"ParameterList","parameters":[],"src":"9489:0:89"},"scope":24017,"src":"9402:579:89","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":24018,"src":"1158:8825:89","usedErrors":[5,1164,1167,1172,1181,1190,1193,9352,9357,20215],"usedEvents":[1150,1159,9363,9501]}],"src":"46:9938:89"},"id":89},"contracts/test/FeeBurnerAuthenticationMock.sol":{"ast":{"absolutePath":"contracts/test/FeeBurnerAuthenticationMock.sol","exportedSymbols":{"FeeBurnerAuthentication":[19845],"FeeBurnerAuthenticationMock":[24053],"IProtocolFeeSweeper":[1137],"IVault":[2545]},"id":24054,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24019,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:90"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":24021,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24054,"sourceUnit":2546,"src":"72:81:90","symbolAliases":[{"foreign":{"id":24020,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"81:6:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":24023,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24054,"sourceUnit":1138,"src":"154:118:90","symbolAliases":[{"foreign":{"id":24022,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1137,"src":"163:19:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/FeeBurnerAuthentication.sol","file":"../FeeBurnerAuthentication.sol","id":24025,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24054,"sourceUnit":19846,"src":"274:73:90","symbolAliases":[{"foreign":{"id":24024,"name":"FeeBurnerAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19845,"src":"283:23:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24026,"name":"FeeBurnerAuthentication","nameLocations":["389:23:90"],"nodeType":"IdentifierPath","referencedDeclaration":19845,"src":"389:23:90"},"id":24027,"nodeType":"InheritanceSpecifier","src":"389:23:90"}],"canonicalName":"FeeBurnerAuthenticationMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":24053,"linearizedBaseContracts":[24053,19845,9572,9486,12366],"name":"FeeBurnerAuthenticationMock","nameLocation":"358:27:90","nodeType":"ContractDefinition","nodes":[{"body":{"id":24039,"nodeType":"Block","src":"573:64:90","statements":[]},"id":24040,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":24035,"name":"protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24030,"src":"539:18:90","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},{"id":24036,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24032,"src":"559:12:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":24037,"kind":"baseConstructorSpecifier","modifierName":{"id":24034,"name":"FeeBurnerAuthentication","nameLocations":["515:23:90"],"nodeType":"IdentifierPath","referencedDeclaration":19845,"src":"515:23:90"},"nodeType":"ModifierInvocation","src":"515:57:90"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24030,"mutability":"mutable","name":"protocolFeeSweeper","nameLocation":"460:18:90","nodeType":"VariableDeclaration","scope":24040,"src":"440:38:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":24029,"nodeType":"UserDefinedTypeName","pathNode":{"id":24028,"name":"IProtocolFeeSweeper","nameLocations":["440:19:90"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"440:19:90"},"referencedDeclaration":1137,"src":"440:19:90","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"visibility":"internal"},{"constant":false,"id":24032,"mutability":"mutable","name":"initialOwner","nameLocation":"496:12:90","nodeType":"VariableDeclaration","scope":24040,"src":"488:20:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24031,"name":"address","nodeType":"ElementaryTypeName","src":"488:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"430:84:90"},"returnParameters":{"id":24038,"nodeType":"ParameterList","parameters":[],"src":"573:0:90"},"scope":24053,"src":"419:218:90","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":24045,"nodeType":"Block","src":"715:2:90","statements":[]},"functionSelector":"8ec20833","id":24046,"implemented":true,"kind":"function","modifiers":[{"id":24043,"kind":"modifierInvocation","modifierName":{"id":24042,"name":"onlyProtocolFeeSweeper","nameLocations":["692:22:90"],"nodeType":"IdentifierPath","referencedDeclaration":19793,"src":"692:22:90"},"nodeType":"ModifierInvocation","src":"692:22:90"}],"name":"manualOnlyProtocolFeeSweeper","nameLocation":"652:28:90","nodeType":"FunctionDefinition","parameters":{"id":24041,"nodeType":"ParameterList","parameters":[],"src":"680:2:90"},"returnParameters":{"id":24044,"nodeType":"ParameterList","parameters":[],"src":"715:0:90"},"scope":24053,"src":"643:74:90","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24051,"nodeType":"Block","src":"797:2:90","statements":[]},"functionSelector":"f405ce44","id":24052,"implemented":true,"kind":"function","modifiers":[{"id":24049,"kind":"modifierInvocation","modifierName":{"id":24048,"name":"onlyFeeRecipientOrOwner","nameLocations":["773:23:90"],"nodeType":"IdentifierPath","referencedDeclaration":19814,"src":"773:23:90"},"nodeType":"ModifierInvocation","src":"773:23:90"}],"name":"manualOnlyFeeRecipientOrOwner","nameLocation":"732:29:90","nodeType":"FunctionDefinition","parameters":{"id":24047,"nodeType":"ParameterList","parameters":[],"src":"761:2:90"},"returnParameters":{"id":24050,"nodeType":"ParameterList","parameters":[],"src":"797:0:90"},"scope":24053,"src":"723:76:90","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":24054,"src":"349:452:90","usedErrors":[9352,9357,19774,19777],"usedEvents":[9363,9501]}],"src":"46:756:90"},"id":90},"contracts/test/OwnableAuthenticationMock.sol":{"ast":{"absolutePath":"contracts/test/OwnableAuthenticationMock.sol","exportedSymbols":{"Authentication":[4385],"IAuthorizer":[1341],"IVault":[2545],"Ownable":[9486],"Ownable2Step":[9572],"OwnableAuthentication":[20330],"OwnableAuthenticationMock":[24089]},"id":24090,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24055,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:91"},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"@openzeppelin/contracts/access/Ownable.sol","id":24057,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24090,"sourceUnit":9487,"src":"72:69:91","symbolAliases":[{"foreign":{"id":24056,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9486,"src":"81:7:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/Ownable2Step.sol","file":"@openzeppelin/contracts/access/Ownable2Step.sol","id":24059,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24090,"sourceUnit":9573,"src":"142:79:91","symbolAliases":[{"foreign":{"id":24058,"name":"Ownable2Step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9572,"src":"151:12:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":24061,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24090,"sourceUnit":1342,"src":"223:91:91","symbolAliases":[{"foreign":{"id":24060,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"232:11:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":24063,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24090,"sourceUnit":2546,"src":"315:81:91","symbolAliases":[{"foreign":{"id":24062,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"324:6:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","id":24065,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24090,"sourceUnit":4386,"src":"398:103:91","symbolAliases":[{"foreign":{"id":24064,"name":"Authentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4385,"src":"407:14:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/OwnableAuthentication.sol","file":"../OwnableAuthentication.sol","id":24067,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24090,"sourceUnit":20331,"src":"503:69:91","symbolAliases":[{"foreign":{"id":24066,"name":"OwnableAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20330,"src":"512:21:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24068,"name":"OwnableAuthentication","nameLocations":["612:21:91"],"nodeType":"IdentifierPath","referencedDeclaration":20330,"src":"612:21:91"},"id":24069,"nodeType":"InheritanceSpecifier","src":"612:21:91"}],"canonicalName":"OwnableAuthenticationMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":24089,"linearizedBaseContracts":[24089,20330,4385,14,9572,9486,12366],"name":"OwnableAuthenticationMock","nameLocation":"583:25:91","nodeType":"ContractDefinition","nodes":[{"body":{"id":24081,"nodeType":"Block","src":"731:64:91","statements":[]},"id":24082,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":24077,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24072,"src":"710:5:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},{"id":24078,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24074,"src":"717:12:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":24079,"kind":"baseConstructorSpecifier","modifierName":{"id":24076,"name":"OwnableAuthentication","nameLocations":["688:21:91"],"nodeType":"IdentifierPath","referencedDeclaration":20330,"src":"688:21:91"},"nodeType":"ModifierInvocation","src":"688:42:91"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24072,"mutability":"mutable","name":"vault","nameLocation":"659:5:91","nodeType":"VariableDeclaration","scope":24082,"src":"652:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":24071,"nodeType":"UserDefinedTypeName","pathNode":{"id":24070,"name":"IVault","nameLocations":["652:6:91"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"652:6:91"},"referencedDeclaration":2545,"src":"652:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":24074,"mutability":"mutable","name":"initialOwner","nameLocation":"674:12:91","nodeType":"VariableDeclaration","scope":24082,"src":"666:20:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24073,"name":"address","nodeType":"ElementaryTypeName","src":"666:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"651:36:91"},"returnParameters":{"id":24080,"nodeType":"ParameterList","parameters":[],"src":"731:0:91"},"scope":24089,"src":"640:155:91","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":24087,"nodeType":"Block","src":"860:64:91","statements":[]},"functionSelector":"c1d08010","id":24088,"implemented":true,"kind":"function","modifiers":[{"id":24085,"kind":"modifierInvocation","modifierName":{"id":24084,"name":"authenticate","nameLocations":["847:12:91"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"847:12:91"},"nodeType":"ModifierInvocation","src":"847:12:91"}],"name":"permissionedFunction","nameLocation":"810:20:91","nodeType":"FunctionDefinition","parameters":{"id":24083,"nodeType":"ParameterList","parameters":[],"src":"830:2:91"},"returnParameters":{"id":24086,"nodeType":"ParameterList","parameters":[],"src":"860:0:91"},"scope":24089,"src":"801:123:91","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":24090,"src":"574:352:91","usedErrors":[5,9352,9357,20215],"usedEvents":[9363,9501]}],"src":"46:881:91"},"id":91},"contracts/test/PoolHelperMock.sol":{"ast":{"absolutePath":"contracts/test/PoolHelperMock.sol","exportedSymbols":{"IVault":[2545],"PoolHelperCommon":[21059],"PoolHelperMock":[24111]},"id":24112,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24091,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:92"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":24093,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24112,"sourceUnit":2546,"src":"72:81:92","symbolAliases":[{"foreign":{"id":24092,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"81:6:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/PoolHelperCommon.sol","file":"../PoolHelperCommon.sol","id":24095,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24112,"sourceUnit":21060,"src":"155:59:92","symbolAliases":[{"foreign":{"id":24094,"name":"PoolHelperCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21059,"src":"164:16:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24096,"name":"PoolHelperCommon","nameLocations":["243:16:92"],"nodeType":"IdentifierPath","referencedDeclaration":21059,"src":"243:16:92"},"id":24097,"nodeType":"InheritanceSpecifier","src":"243:16:92"}],"canonicalName":"PoolHelperMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":24111,"linearizedBaseContracts":[24111,21059,20330,4385,14,9572,9486,12366,865],"name":"PoolHelperMock","nameLocation":"225:14:92","nodeType":"ContractDefinition","nodes":[{"body":{"id":24109,"nodeType":"Block","src":"352:64:92","statements":[]},"id":24110,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":24105,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24100,"src":"331:5:92","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},{"id":24106,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24102,"src":"338:12:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":24107,"kind":"baseConstructorSpecifier","modifierName":{"id":24104,"name":"PoolHelperCommon","nameLocations":["314:16:92"],"nodeType":"IdentifierPath","referencedDeclaration":21059,"src":"314:16:92"},"nodeType":"ModifierInvocation","src":"314:37:92"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24100,"mutability":"mutable","name":"vault","nameLocation":"285:5:92","nodeType":"VariableDeclaration","scope":24110,"src":"278:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":24099,"nodeType":"UserDefinedTypeName","pathNode":{"id":24098,"name":"IVault","nameLocations":["278:6:92"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"278:6:92"},"referencedDeclaration":2545,"src":"278:6:92","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":24102,"mutability":"mutable","name":"initialOwner","nameLocation":"300:12:92","nodeType":"VariableDeclaration","scope":24110,"src":"292:20:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24101,"name":"address","nodeType":"ElementaryTypeName","src":"292:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"277:36:92"},"returnParameters":{"id":24108,"nodeType":"ParameterList","parameters":[],"src":"352:0:92"},"scope":24111,"src":"266:150:92","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":24112,"src":"216:202:92","usedErrors":[5,711,718,723,726,731,734,739,2857,9352,9357,20215],"usedEvents":[674,681,688,695,704,9363,9501]}],"src":"46:373:92"},"id":92},"contracts/test/PriceImpactHelperMock.sol":{"ast":{"absolutePath":"contracts/test/PriceImpactHelperMock.sol","exportedSymbols":{"IRouter":[2302],"IVault":[2545],"PriceImpactHelper":[21889],"PriceImpactHelperMock":[24207]},"id":24208,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24113,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:93"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":24115,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24208,"sourceUnit":2546,"src":"72:81:93","symbolAliases":[{"foreign":{"id":24114,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"81:6:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","id":24117,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24208,"sourceUnit":2303,"src":"154:83:93","symbolAliases":[{"foreign":{"id":24116,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2302,"src":"163:7:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/PriceImpactHelper.sol","file":"../PriceImpactHelper.sol","id":24119,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24208,"sourceUnit":21890,"src":"239:61:93","symbolAliases":[{"foreign":{"id":24118,"name":"PriceImpactHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21889,"src":"248:17:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24120,"name":"PriceImpactHelper","nameLocations":["336:17:93"],"nodeType":"IdentifierPath","referencedDeclaration":21889,"src":"336:17:93"},"id":24121,"nodeType":"InheritanceSpecifier","src":"336:17:93"}],"canonicalName":"PriceImpactHelperMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":24207,"linearizedBaseContracts":[24207,21889,18633],"name":"PriceImpactHelperMock","nameLocation":"311:21:93","nodeType":"ContractDefinition","nodes":[{"body":{"id":24134,"nodeType":"Block","src":"435:2:93","statements":[]},"id":24135,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":24130,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24124,"src":"420:5:93","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},{"id":24131,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24127,"src":"427:6:93","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}}],"id":24132,"kind":"baseConstructorSpecifier","modifierName":{"id":24129,"name":"PriceImpactHelper","nameLocations":["402:17:93"],"nodeType":"IdentifierPath","referencedDeclaration":21889,"src":"402:17:93"},"nodeType":"ModifierInvocation","src":"402:32:93"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24124,"mutability":"mutable","name":"vault","nameLocation":"379:5:93","nodeType":"VariableDeclaration","scope":24135,"src":"372:12:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":24123,"nodeType":"UserDefinedTypeName","pathNode":{"id":24122,"name":"IVault","nameLocations":["372:6:93"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"372:6:93"},"referencedDeclaration":2545,"src":"372:6:93","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":24127,"mutability":"mutable","name":"router","nameLocation":"394:6:93","nodeType":"VariableDeclaration","scope":24135,"src":"386:14:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"},"typeName":{"id":24126,"nodeType":"UserDefinedTypeName","pathNode":{"id":24125,"name":"IRouter","nameLocations":["386:7:93"],"nodeType":"IdentifierPath","referencedDeclaration":2302,"src":"386:7:93"},"referencedDeclaration":2302,"src":"386:7:93","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}},"visibility":"internal"}],"src":"371:30:93"},"returnParameters":{"id":24133,"nodeType":"ParameterList","parameters":[],"src":"435:0:93"},"scope":24207,"src":"360:77:93","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":24156,"nodeType":"Block","src":"641:100:93","statements":[{"expression":{"arguments":[{"id":24150,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24137,"src":"701:4:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24151,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24139,"src":"707:10:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24152,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24142,"src":"719:6:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":24153,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24144,"src":"727:6:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":24149,"name":"_queryAddLiquidityUnbalancedForTokenDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21618,"src":"658:42:93","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_int256_$","typeString":"function (address,uint256,int256[] memory,address) returns (int256)"}},"id":24154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"658:76:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":24148,"id":24155,"nodeType":"Return","src":"651:83:93"}]},"functionSelector":"e3a50d82","id":24157,"implemented":true,"kind":"function","modifiers":[],"name":"queryAddLiquidityUnbalancedForTokenDeltas","nameLocation":"452:41:93","nodeType":"FunctionDefinition","parameters":{"id":24145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24137,"mutability":"mutable","name":"pool","nameLocation":"511:4:93","nodeType":"VariableDeclaration","scope":24157,"src":"503:12:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24136,"name":"address","nodeType":"ElementaryTypeName","src":"503:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24139,"mutability":"mutable","name":"tokenIndex","nameLocation":"533:10:93","nodeType":"VariableDeclaration","scope":24157,"src":"525:18:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24138,"name":"uint256","nodeType":"ElementaryTypeName","src":"525:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24142,"mutability":"mutable","name":"deltas","nameLocation":"569:6:93","nodeType":"VariableDeclaration","scope":24157,"src":"553:22:93","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":24140,"name":"int256","nodeType":"ElementaryTypeName","src":"553:6:93","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":24141,"nodeType":"ArrayTypeName","src":"553:8:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":24144,"mutability":"mutable","name":"sender","nameLocation":"593:6:93","nodeType":"VariableDeclaration","scope":24157,"src":"585:14:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24143,"name":"address","nodeType":"ElementaryTypeName","src":"585:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"493:112:93"},"returnParameters":{"id":24148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24147,"mutability":"mutable","name":"deltaBPT","nameLocation":"631:8:93","nodeType":"VariableDeclaration","scope":24157,"src":"624:15:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":24146,"name":"int256","nodeType":"ElementaryTypeName","src":"624:6:93","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"623:17:93"},"scope":24207,"src":"443:298:93","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24179,"nodeType":"Block","src":"916:71:93","statements":[{"expression":{"arguments":[{"id":24173,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24159,"src":"948:4:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24174,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24162,"src":"954:6:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":24175,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24165,"src":"962:9:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":24176,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24167,"src":"973:6:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":24172,"name":"_zeroOutDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21782,"src":"933:14:93","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_int256_$dyn_memory_ptr_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$","typeString":"function (address,int256[] memory,int256[] memory,address) returns (uint256)"}},"id":24177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"933:47:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24171,"id":24178,"nodeType":"Return","src":"926:54:93"}]},"functionSelector":"3b064ca3","id":24180,"implemented":true,"kind":"function","modifiers":[],"name":"zeroOutDeltas","nameLocation":"756:13:93","nodeType":"FunctionDefinition","parameters":{"id":24168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24159,"mutability":"mutable","name":"pool","nameLocation":"787:4:93","nodeType":"VariableDeclaration","scope":24180,"src":"779:12:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24158,"name":"address","nodeType":"ElementaryTypeName","src":"779:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24162,"mutability":"mutable","name":"deltas","nameLocation":"817:6:93","nodeType":"VariableDeclaration","scope":24180,"src":"801:22:93","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":24160,"name":"int256","nodeType":"ElementaryTypeName","src":"801:6:93","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":24161,"nodeType":"ArrayTypeName","src":"801:8:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":24165,"mutability":"mutable","name":"deltaBPTs","nameLocation":"849:9:93","nodeType":"VariableDeclaration","scope":24180,"src":"833:25:93","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":24163,"name":"int256","nodeType":"ElementaryTypeName","src":"833:6:93","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":24164,"nodeType":"ArrayTypeName","src":"833:8:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":24167,"mutability":"mutable","name":"sender","nameLocation":"876:6:93","nodeType":"VariableDeclaration","scope":24180,"src":"868:14:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24166,"name":"address","nodeType":"ElementaryTypeName","src":"868:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"769:119:93"},"returnParameters":{"id":24171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24170,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24180,"src":"907:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24169,"name":"uint256","nodeType":"ElementaryTypeName","src":"907:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"906:9:93"},"scope":24207,"src":"747:240:93","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24192,"nodeType":"Block","src":"1074:48:93","statements":[{"expression":{"arguments":[{"id":24189,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24183,"src":"1109:5:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}],"id":24188,"name":"_minPositiveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21835,"src":"1091:17:93","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (int256[] memory) pure returns (uint256)"}},"id":24190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1091:24:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24187,"id":24191,"nodeType":"Return","src":"1084:31:93"}]},"functionSelector":"0d4277d1","id":24193,"implemented":true,"kind":"function","modifiers":[],"name":"minPositiveIndex","nameLocation":"1002:16:93","nodeType":"FunctionDefinition","parameters":{"id":24184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24183,"mutability":"mutable","name":"array","nameLocation":"1035:5:93","nodeType":"VariableDeclaration","scope":24193,"src":"1019:21:93","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":24181,"name":"int256","nodeType":"ElementaryTypeName","src":"1019:6:93","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":24182,"nodeType":"ArrayTypeName","src":"1019:8:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"1018:23:93"},"returnParameters":{"id":24187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24186,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24193,"src":"1065:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24185,"name":"uint256","nodeType":"ElementaryTypeName","src":"1065:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1064:9:93"},"scope":24207,"src":"993:129:93","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":24205,"nodeType":"Block","src":"1209:48:93","statements":[{"expression":{"arguments":[{"id":24202,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24196,"src":"1244:5:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}],"id":24201,"name":"_maxNegativeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21888,"src":"1226:17:93","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (int256[] memory) pure returns (uint256)"}},"id":24203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1226:24:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24200,"id":24204,"nodeType":"Return","src":"1219:31:93"}]},"functionSelector":"01ef39ee","id":24206,"implemented":true,"kind":"function","modifiers":[],"name":"maxNegativeIndex","nameLocation":"1137:16:93","nodeType":"FunctionDefinition","parameters":{"id":24197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24196,"mutability":"mutable","name":"array","nameLocation":"1170:5:93","nodeType":"VariableDeclaration","scope":24206,"src":"1154:21:93","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":24194,"name":"int256","nodeType":"ElementaryTypeName","src":"1154:6:93","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":24195,"nodeType":"ArrayTypeName","src":"1154:8:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"1153:23:93"},"returnParameters":{"id":24200,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24199,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24206,"src":"1200:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24198,"name":"uint256","nodeType":"ElementaryTypeName","src":"1200:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1199:9:93"},"scope":24207,"src":"1128:129:93","stateMutability":"pure","virtual":false,"visibility":"external"}],"scope":24208,"src":"302:957:93","usedErrors":[4877,4880,11076,12379,14342,14354,18535],"usedEvents":[]}],"src":"46:1214:93"},"id":93},"contracts/test/ProtocolFeeBurnerMock.sol":{"ast":{"absolutePath":"contracts/test/ProtocolFeeBurnerMock.sol","exportedSymbols":{"ERC20TestToken":[7343],"FixedPoint":[5298],"IERC20":[10576],"IProtocolFeeBurner":[948],"ProtocolFeeBurnerMock":[24339],"SafeERC20":[11066]},"id":24340,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24209,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:94"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":24211,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24340,"sourceUnit":10577,"src":"72:72:94","symbolAliases":[{"foreign":{"id":24210,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":24213,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24340,"sourceUnit":11067,"src":"145:84:94","symbolAliases":[{"foreign":{"id":24212,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11066,"src":"154:9:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","id":24215,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24340,"sourceUnit":949,"src":"231:116:94","symbolAliases":[{"foreign":{"id":24214,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"240:18:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol","file":"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol","id":24217,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24340,"sourceUnit":7344,"src":"349:100:94","symbolAliases":[{"foreign":{"id":24216,"name":"ERC20TestToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7343,"src":"358:14:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":24219,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24340,"sourceUnit":5299,"src":"450:92:94","symbolAliases":[{"foreign":{"id":24218,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5298,"src":"459:10:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24220,"name":"IProtocolFeeBurner","nameLocations":["578:18:94"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"578:18:94"},"id":24221,"nodeType":"InheritanceSpecifier","src":"578:18:94"}],"canonicalName":"ProtocolFeeBurnerMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":24339,"linearizedBaseContracts":[24339,948],"name":"ProtocolFeeBurnerMock","nameLocation":"553:21:94","nodeType":"ContractDefinition","nodes":[{"global":false,"id":24224,"libraryName":{"id":24222,"name":"FixedPoint","nameLocations":["609:10:94"],"nodeType":"IdentifierPath","referencedDeclaration":5298,"src":"609:10:94"},"nodeType":"UsingForDirective","src":"603:29:94","typeName":{"id":24223,"name":"uint256","nodeType":"ElementaryTypeName","src":"624:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":24228,"libraryName":{"id":24225,"name":"SafeERC20","nameLocations":["643:9:94"],"nodeType":"IdentifierPath","referencedDeclaration":11066,"src":"643:9:94"},"nodeType":"UsingForDirective","src":"637:27:94","typeName":{"id":24227,"nodeType":"UserDefinedTypeName","pathNode":{"id":24226,"name":"IERC20","nameLocations":["657:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"657:6:94"},"referencedDeclaration":10576,"src":"657:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}},{"constant":false,"id":24232,"mutability":"mutable","name":"_tokenRatio","nameLocation":"686:11:94","nodeType":"VariableDeclaration","scope":24339,"src":"670:44:94","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24229,"name":"uint256","nodeType":"ElementaryTypeName","src":"670:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"expression":{"id":24230,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5298,"src":"700:10:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$5298_$","typeString":"type(library FixedPoint)"}},"id":24231,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"711:3:94","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":5010,"src":"700:14:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":24235,"mutability":"mutable","name":"transferFromEnabled","nameLocation":"726:19:94","nodeType":"VariableDeclaration","scope":24339,"src":"721:31:94","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24233,"name":"bool","nodeType":"ElementaryTypeName","src":"721:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":{"hexValue":"74727565","id":24234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"748:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"visibility":"internal"},{"baseFunctions":[947],"body":{"id":24317,"nodeType":"Block","src":"1024:818:94","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24255,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1038:5:94","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":24256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1044:9:94","memberName":"timestamp","nodeType":"MemberAccess","src":"1038:15:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":24257,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24252,"src":"1056:8:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1038:26:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24263,"nodeType":"IfStatement","src":"1034:78:94","trueBody":{"id":24262,"nodeType":"Block","src":"1066:46:94","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24259,"name":"SwapDeadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":927,"src":"1087:12:94","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1087:14:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24261,"nodeType":"RevertStatement","src":"1080:21:94"}]}},{"condition":{"id":24264,"name":"transferFromEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24235,"src":"1126:19:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24278,"nodeType":"IfStatement","src":"1122:125:94","trueBody":{"id":24277,"nodeType":"Block","src":"1147:100:94","statements":[{"expression":{"arguments":[{"expression":{"id":24268,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1187:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1191:6:94","memberName":"sender","nodeType":"MemberAccess","src":"1187:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":24272,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1207:4:94","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeBurnerMock_$24339","typeString":"contract ProtocolFeeBurnerMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeBurnerMock_$24339","typeString":"contract ProtocolFeeBurnerMock"}],"id":24271,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1199:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24270,"name":"address","nodeType":"ElementaryTypeName","src":"1199:7:94","typeDescriptions":{}}},"id":24273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1199:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24274,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24243,"src":"1214:21:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24265,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24241,"src":"1161:8:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":24267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1170:16:94","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":10674,"src":"1161:25:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":24275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1161:75:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24276,"nodeType":"ExpressionStatement","src":"1161:75:94"}]}},{"expression":{"arguments":[{"id":24286,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24250,"src":"1383:9:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24287,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24243,"src":"1394:21:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"arguments":[{"id":24282,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24246,"src":"1364:11:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":24281,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1356:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24280,"name":"address","nodeType":"ElementaryTypeName","src":"1356:7:94","typeDescriptions":{}}},"id":24283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1356:20:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24279,"name":"ERC20TestToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7343,"src":"1341:14:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20TestToken_$7343_$","typeString":"type(contract ERC20TestToken)"}},"id":24284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1341:36:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ERC20TestToken_$7343","typeString":"contract ERC20TestToken"}},"id":24285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1378:4:94","memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":7276,"src":"1341:41:94","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":24288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1341:75:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24289,"nodeType":"ExpressionStatement","src":"1341:75:94"},{"assignments":[24291],"declarations":[{"constant":false,"id":24291,"mutability":"mutable","name":"targetTokenAmount","nameLocation":"1435:17:94","nodeType":"VariableDeclaration","scope":24317,"src":"1427:25:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24290,"name":"uint256","nodeType":"ElementaryTypeName","src":"1427:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24296,"initialValue":{"arguments":[{"id":24294,"name":"_tokenRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24232,"src":"1485:11:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24292,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24243,"src":"1455:21:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1477:7:94","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":5043,"src":"1455:29:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1455:42:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1427:70:94"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24297,"name":"targetTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24291,"src":"1511:17:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":24298,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24248,"src":"1531:12:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1511:32:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24307,"nodeType":"IfStatement","src":"1507:133:94","trueBody":{"id":24306,"nodeType":"Block","src":"1545:95:94","statements":[{"errorCall":{"arguments":[{"id":24301,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24246,"src":"1584:11:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":24302,"name":"targetTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24291,"src":"1597:17:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24303,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24248,"src":"1616:12:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24300,"name":"AmountOutBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":924,"src":"1566:17:94","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$10576_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":24304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1566:63:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24305,"nodeType":"RevertStatement","src":"1559:70:94"}]}},{"eventCall":{"arguments":[{"id":24309,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24238,"src":"1754:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24310,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24241,"src":"1760:8:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":24311,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24243,"src":"1770:21:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24312,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24246,"src":"1793:11:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":24313,"name":"targetTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24291,"src":"1806:17:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24314,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24250,"src":"1825:9:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":24308,"name":"ProtocolFeeBurned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":914,"src":"1736:17:94","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address)"}},"id":24315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1736:99:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24316,"nodeType":"EmitStatement","src":"1731:104:94"}]},"documentation":{"id":24236,"nodeType":"StructuredDocumentation","src":"759:34:94","text":"@inheritdoc IProtocolFeeBurner"},"functionSelector":"de557a32","id":24318,"implemented":true,"kind":"function","modifiers":[],"name":"burn","nameLocation":"807:4:94","nodeType":"FunctionDefinition","parameters":{"id":24253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24238,"mutability":"mutable","name":"pool","nameLocation":"829:4:94","nodeType":"VariableDeclaration","scope":24318,"src":"821:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24237,"name":"address","nodeType":"ElementaryTypeName","src":"821:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24241,"mutability":"mutable","name":"feeToken","nameLocation":"850:8:94","nodeType":"VariableDeclaration","scope":24318,"src":"843:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":24240,"nodeType":"UserDefinedTypeName","pathNode":{"id":24239,"name":"IERC20","nameLocations":["843:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"843:6:94"},"referencedDeclaration":10576,"src":"843:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":24243,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"876:21:94","nodeType":"VariableDeclaration","scope":24318,"src":"868:29:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24242,"name":"uint256","nodeType":"ElementaryTypeName","src":"868:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24246,"mutability":"mutable","name":"targetToken","nameLocation":"914:11:94","nodeType":"VariableDeclaration","scope":24318,"src":"907:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":24245,"nodeType":"UserDefinedTypeName","pathNode":{"id":24244,"name":"IERC20","nameLocations":["907:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"907:6:94"},"referencedDeclaration":10576,"src":"907:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":24248,"mutability":"mutable","name":"minAmountOut","nameLocation":"943:12:94","nodeType":"VariableDeclaration","scope":24318,"src":"935:20:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24247,"name":"uint256","nodeType":"ElementaryTypeName","src":"935:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24250,"mutability":"mutable","name":"recipient","nameLocation":"973:9:94","nodeType":"VariableDeclaration","scope":24318,"src":"965:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24249,"name":"address","nodeType":"ElementaryTypeName","src":"965:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24252,"mutability":"mutable","name":"deadline","nameLocation":"1000:8:94","nodeType":"VariableDeclaration","scope":24318,"src":"992:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24251,"name":"uint256","nodeType":"ElementaryTypeName","src":"992:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"811:203:94"},"returnParameters":{"id":24254,"nodeType":"ParameterList","parameters":[],"src":"1024:0:94"},"scope":24339,"src":"798:1044:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24327,"nodeType":"Block","src":"1895:36:94","statements":[{"expression":{"id":24325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24323,"name":"_tokenRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24232,"src":"1905:11:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24324,"name":"ratio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24320,"src":"1919:5:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1905:19:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24326,"nodeType":"ExpressionStatement","src":"1905:19:94"}]},"functionSelector":"e38e91f9","id":24328,"implemented":true,"kind":"function","modifiers":[],"name":"setTokenRatio","nameLocation":"1857:13:94","nodeType":"FunctionDefinition","parameters":{"id":24321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24320,"mutability":"mutable","name":"ratio","nameLocation":"1879:5:94","nodeType":"VariableDeclaration","scope":24328,"src":"1871:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24319,"name":"uint256","nodeType":"ElementaryTypeName","src":"1871:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1870:15:94"},"returnParameters":{"id":24322,"nodeType":"ParameterList","parameters":[],"src":"1895:0:94"},"scope":24339,"src":"1848:83:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24337,"nodeType":"Block","src":"1992:46:94","statements":[{"expression":{"id":24335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24333,"name":"transferFromEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24235,"src":"2002:19:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24334,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24330,"src":"2024:7:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2002:29:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24336,"nodeType":"ExpressionStatement","src":"2002:29:94"}]},"functionSelector":"7d341ad6","id":24338,"implemented":true,"kind":"function","modifiers":[],"name":"setTransferFromEnabled","nameLocation":"1946:22:94","nodeType":"FunctionDefinition","parameters":{"id":24331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24330,"mutability":"mutable","name":"enabled","nameLocation":"1974:7:94","nodeType":"VariableDeclaration","scope":24338,"src":"1969:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24329,"name":"bool","nodeType":"ElementaryTypeName","src":"1969:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1968:14:94"},"returnParameters":{"id":24332,"nodeType":"ParameterList","parameters":[],"src":"1992:0:94"},"scope":24339,"src":"1937:101:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":24340,"src":"544:1496:94","usedErrors":[924,927,10614],"usedEvents":[914]}],"src":"46:1995:94"},"id":94},"contracts/test/VaultMockForFeeSweeper.sol":{"ast":{"absolutePath":"contracts/test/VaultMockForFeeSweeper.sol","exportedSymbols":{"IAuthorizer":[1341],"IERC20":[10576],"IProtocolFeeController":[1955],"SafeERC20":[11066],"VaultMockForFeeSweeper":[24501]},"id":24502,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24341,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:95"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":24343,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24502,"sourceUnit":10577,"src":"72:72:95","symbolAliases":[{"foreign":{"id":24342,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":24345,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24502,"sourceUnit":11067,"src":"145:84:95","symbolAliases":[{"foreign":{"id":24344,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11066,"src":"154:9:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":24347,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24502,"sourceUnit":1342,"src":"230:91:95","symbolAliases":[{"foreign":{"id":24346,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"239:11:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":24349,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24502,"sourceUnit":1956,"src":"322:113:95","symbolAliases":[{"foreign":{"id":24348,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"331:22:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24350,"name":"IAuthorizer","nameLocations":["472:11:95"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"472:11:95"},"id":24351,"nodeType":"InheritanceSpecifier","src":"472:11:95"}],"canonicalName":"VaultMockForFeeSweeper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":24501,"linearizedBaseContracts":[24501,1341],"name":"VaultMockForFeeSweeper","nameLocation":"446:22:95","nodeType":"ContractDefinition","nodes":[{"global":false,"id":24355,"libraryName":{"id":24352,"name":"SafeERC20","nameLocations":["496:9:95"],"nodeType":"IdentifierPath","referencedDeclaration":11066,"src":"496:9:95"},"nodeType":"UsingForDirective","src":"490:27:95","typeName":{"id":24354,"nodeType":"UserDefinedTypeName","pathNode":{"id":24353,"name":"IERC20","nameLocations":["510:6:95"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"510:6:95"},"referencedDeclaration":10576,"src":"510:6:95","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}},{"constant":false,"functionSelector":"022914a7","id":24359,"mutability":"mutable","name":"owners","nameLocation":"555:6:95","nodeType":"VariableDeclaration","scope":24501,"src":"523:38:95","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":24358,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":24356,"name":"address","nodeType":"ElementaryTypeName","src":"531:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"523:24:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":24357,"name":"bool","nodeType":"ElementaryTypeName","src":"542:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"body":{"id":24369,"nodeType":"Block","src":"582:42:95","statements":[{"expression":{"id":24367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":24362,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24359,"src":"592:6:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24365,"indexExpression":{"expression":{"id":24363,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"599:3:95","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"603:6:95","memberName":"sender","nodeType":"MemberAccess","src":"599:10:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"592:18:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":24366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"613:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"592:25:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24368,"nodeType":"ExpressionStatement","src":"592:25:95"}]},"id":24370,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24360,"nodeType":"ParameterList","parameters":[],"src":"579:2:95"},"returnParameters":{"id":24361,"nodeType":"ParameterList","parameters":[],"src":"582:0:95"},"scope":24501,"src":"568:56:95","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":24381,"nodeType":"Block","src":"651:95:95","statements":[{"expression":{"arguments":[{"baseExpression":{"id":24373,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24359,"src":"669:6:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24376,"indexExpression":{"expression":{"id":24374,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"676:3:95","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"680:6:95","memberName":"sender","nodeType":"MemberAccess","src":"676:10:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"669:18:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5661756c744d6f636b466f72466565537765657065723a204e6f7420616e206f776e6572","id":24377,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"689:38:95","typeDescriptions":{"typeIdentifier":"t_stringliteral_6a76a808db8d5a9ae25f2134deb57202faa17546f067bc3832f5e2fabe514229","typeString":"literal_string \"VaultMockForFeeSweeper: Not an owner\""},"value":"VaultMockForFeeSweeper: Not an owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6a76a808db8d5a9ae25f2134deb57202faa17546f067bc3832f5e2fabe514229","typeString":"literal_string \"VaultMockForFeeSweeper: Not an owner\""}],"id":24372,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"661:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24378,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"661:67:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24379,"nodeType":"ExpressionStatement","src":"661:67:95"},{"id":24380,"nodeType":"PlaceholderStatement","src":"738:1:95"}]},"id":24382,"name":"onlyOwner","nameLocation":"639:9:95","nodeType":"ModifierDefinition","parameters":{"id":24371,"nodeType":"ParameterList","parameters":[],"src":"648:2:95"},"src":"630:116:95","virtual":false,"visibility":"internal"},{"body":{"id":24395,"nodeType":"Block","src":"824:50:95","statements":[{"expression":{"arguments":[{"arguments":[{"id":24391,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"861:4:95","typeDescriptions":{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$24501","typeString":"contract VaultMockForFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$24501","typeString":"contract VaultMockForFeeSweeper"}],"id":24390,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"853:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24389,"name":"address","nodeType":"ElementaryTypeName","src":"853:7:95","typeDescriptions":{}}},"id":24392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"853:13:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24388,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"841:11:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthorizer_$1341_$","typeString":"type(contract IAuthorizer)"}},"id":24393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"841:26:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"functionReturnParameters":24387,"id":24394,"nodeType":"Return","src":"834:33:95"}]},"functionSelector":"aaabadc5","id":24396,"implemented":true,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"761:13:95","nodeType":"FunctionDefinition","parameters":{"id":24383,"nodeType":"ParameterList","parameters":[],"src":"774:2:95"},"returnParameters":{"id":24387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24386,"mutability":"mutable","name":"authorizer","nameLocation":"812:10:95","nodeType":"VariableDeclaration","scope":24396,"src":"800:22:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"},"typeName":{"id":24385,"nodeType":"UserDefinedTypeName","pathNode":{"id":24384,"name":"IAuthorizer","nameLocations":["800:11:95"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"800:11:95"},"referencedDeclaration":1341,"src":"800:11:95","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"799:24:95"},"scope":24501,"src":"752:122:95","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1340],"body":{"id":24411,"nodeType":"Block","src":"964:39:95","statements":[{"expression":{"baseExpression":{"id":24407,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24359,"src":"981:6:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24409,"indexExpression":{"id":24408,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24400,"src":"988:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"981:15:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":24406,"id":24410,"nodeType":"Return","src":"974:22:95"}]},"functionSelector":"9be2a884","id":24412,"implemented":true,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"889:10:95","nodeType":"FunctionDefinition","parameters":{"id":24403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24398,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24412,"src":"900:7:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24397,"name":"bytes32","nodeType":"ElementaryTypeName","src":"900:7:95","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":24400,"mutability":"mutable","name":"account","nameLocation":"917:7:95","nodeType":"VariableDeclaration","scope":24412,"src":"909:15:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24399,"name":"address","nodeType":"ElementaryTypeName","src":"909:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24402,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24412,"src":"926:7:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24401,"name":"address","nodeType":"ElementaryTypeName","src":"926:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"899:35:95"},"returnParameters":{"id":24406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24405,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24412,"src":"958:4:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24404,"name":"bool","nodeType":"ElementaryTypeName","src":"958:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"957:6:95"},"scope":24501,"src":"880:123:95","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":24425,"nodeType":"Block","src":"1084:39:95","statements":[{"expression":{"baseExpression":{"id":24421,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24359,"src":"1101:6:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24423,"indexExpression":{"id":24422,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24416,"src":"1108:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1101:15:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":24420,"id":24424,"nodeType":"Return","src":"1094:22:95"}]},"functionSelector":"c6a92e16","id":24426,"implemented":true,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"1018:10:95","nodeType":"FunctionDefinition","parameters":{"id":24417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24414,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24426,"src":"1029:7:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24413,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1029:7:95","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":24416,"mutability":"mutable","name":"account","nameLocation":"1046:7:95","nodeType":"VariableDeclaration","scope":24426,"src":"1038:15:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24415,"name":"address","nodeType":"ElementaryTypeName","src":"1038:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1028:26:95"},"returnParameters":{"id":24420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24419,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24426,"src":"1078:4:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24418,"name":"bool","nodeType":"ElementaryTypeName","src":"1078:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1077:6:95"},"scope":24501,"src":"1009:114:95","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":24439,"nodeType":"Block","src":"1182:38:95","statements":[{"expression":{"id":24437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":24433,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24359,"src":"1192:6:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24435,"indexExpression":{"id":24434,"name":"owner_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24428,"src":"1199:6:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1192:14:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":24436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1209:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1192:21:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24438,"nodeType":"ExpressionStatement","src":"1192:21:95"}]},"functionSelector":"7065cb48","id":24440,"implemented":true,"kind":"function","modifiers":[{"id":24431,"kind":"modifierInvocation","modifierName":{"id":24430,"name":"onlyOwner","nameLocations":["1172:9:95"],"nodeType":"IdentifierPath","referencedDeclaration":24382,"src":"1172:9:95"},"nodeType":"ModifierInvocation","src":"1172:9:95"}],"name":"addOwner","nameLocation":"1138:8:95","nodeType":"FunctionDefinition","parameters":{"id":24429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24428,"mutability":"mutable","name":"owner_","nameLocation":"1155:6:95","nodeType":"VariableDeclaration","scope":24440,"src":"1147:14:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24427,"name":"address","nodeType":"ElementaryTypeName","src":"1147:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1146:16:95"},"returnParameters":{"id":24432,"nodeType":"ParameterList","parameters":[],"src":"1182:0:95"},"scope":24501,"src":"1129:91:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24453,"nodeType":"Block","src":"1282:39:95","statements":[{"expression":{"id":24451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":24447,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24359,"src":"1292:6:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24449,"indexExpression":{"id":24448,"name":"owner_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24442,"src":"1299:6:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1292:14:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":24450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1309:5:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1292:22:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24452,"nodeType":"ExpressionStatement","src":"1292:22:95"}]},"functionSelector":"173825d9","id":24454,"implemented":true,"kind":"function","modifiers":[{"id":24445,"kind":"modifierInvocation","modifierName":{"id":24444,"name":"onlyOwner","nameLocations":["1272:9:95"],"nodeType":"IdentifierPath","referencedDeclaration":24382,"src":"1272:9:95"},"nodeType":"ModifierInvocation","src":"1272:9:95"}],"name":"removeOwner","nameLocation":"1235:11:95","nodeType":"FunctionDefinition","parameters":{"id":24443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24442,"mutability":"mutable","name":"owner_","nameLocation":"1255:6:95","nodeType":"VariableDeclaration","scope":24454,"src":"1247:14:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24441,"name":"address","nodeType":"ElementaryTypeName","src":"1247:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1246:16:95"},"returnParameters":{"id":24446,"nodeType":"ParameterList","parameters":[],"src":"1282:0:95"},"scope":24501,"src":"1226:95:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24467,"nodeType":"Block","src":"1432:61:95","statements":[{"expression":{"arguments":[{"arguments":[{"id":24463,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1480:4:95","typeDescriptions":{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$24501","typeString":"contract VaultMockForFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$24501","typeString":"contract VaultMockForFeeSweeper"}],"id":24462,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1472:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24461,"name":"address","nodeType":"ElementaryTypeName","src":"1472:7:95","typeDescriptions":{}}},"id":24464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1472:13:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24460,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"1449:22:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$1955_$","typeString":"type(contract IProtocolFeeController)"}},"id":24465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1449:37:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"functionReturnParameters":24459,"id":24466,"nodeType":"Return","src":"1442:44:95"}]},"functionSelector":"85f2dbd4","id":24468,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"1336:24:95","nodeType":"FunctionDefinition","parameters":{"id":24455,"nodeType":"ParameterList","parameters":[],"src":"1360:2:95"},"returnParameters":{"id":24459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24458,"mutability":"mutable","name":"protocolFeeController","nameLocation":"1409:21:95","nodeType":"VariableDeclaration","scope":24468,"src":"1386:44:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":24457,"nodeType":"UserDefinedTypeName","pathNode":{"id":24456,"name":"IProtocolFeeController","nameLocations":["1386:22:95"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"1386:22:95"},"referencedDeclaration":1955,"src":"1386:22:95","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"1385:46:95"},"scope":24501,"src":"1327:166:95","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":24473,"nodeType":"Block","src":"1547:2:95","statements":[]},"functionSelector":"8f4ab9ca","id":24474,"implemented":true,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"1508:20:95","nodeType":"FunctionDefinition","parameters":{"id":24471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24470,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24474,"src":"1529:7:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24469,"name":"address","nodeType":"ElementaryTypeName","src":"1529:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1528:9:95"},"returnParameters":{"id":24472,"nodeType":"ParameterList","parameters":[],"src":"1547:0:95"},"scope":24501,"src":"1499:50:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24499,"nodeType":"Block","src":"1654:78:95","statements":[{"expression":{"arguments":[{"id":24489,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24478,"src":"1683:9:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":24494,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1718:4:95","typeDescriptions":{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$24501","typeString":"contract VaultMockForFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$24501","typeString":"contract VaultMockForFeeSweeper"}],"id":24493,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1710:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24492,"name":"address","nodeType":"ElementaryTypeName","src":"1710:7:95","typeDescriptions":{}}},"id":24495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1710:13:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24490,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24481,"src":"1694:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":24491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1700:9:95","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10533,"src":"1694:15:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":24496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1694:30:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24486,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24481,"src":"1664:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":24488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1670:12:95","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10647,"src":"1664:18:95","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":24497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1664:61:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24498,"nodeType":"ExpressionStatement","src":"1664:61:95"}]},"functionSelector":"b53a70b2","id":24500,"implemented":true,"kind":"function","modifiers":[{"id":24484,"kind":"modifierInvocation","modifierName":{"id":24483,"name":"onlyOwner","nameLocations":["1644:9:95"],"nodeType":"IdentifierPath","referencedDeclaration":24382,"src":"1644:9:95"},"nodeType":"ModifierInvocation","src":"1644:9:95"}],"name":"withdrawProtocolFeesForToken","nameLocation":"1564:28:95","nodeType":"FunctionDefinition","parameters":{"id":24482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24476,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24500,"src":"1593:7:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24475,"name":"address","nodeType":"ElementaryTypeName","src":"1593:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24478,"mutability":"mutable","name":"recipient","nameLocation":"1610:9:95","nodeType":"VariableDeclaration","scope":24500,"src":"1602:17:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24477,"name":"address","nodeType":"ElementaryTypeName","src":"1602:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24481,"mutability":"mutable","name":"token","nameLocation":"1628:5:95","nodeType":"VariableDeclaration","scope":24500,"src":"1621:12:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":24480,"nodeType":"UserDefinedTypeName","pathNode":{"id":24479,"name":"IERC20","nameLocations":["1621:6:95"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1621:6:95"},"referencedDeclaration":10576,"src":"1621:6:95","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1592:42:95"},"returnParameters":{"id":24485,"nodeType":"ParameterList","parameters":[],"src":"1654:0:95"},"scope":24501,"src":"1555:177:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":24502,"src":"437:1297:95","usedErrors":[10614],"usedEvents":[]}],"src":"46:1689:95"},"id":95},"contracts/utils/HyperSpotPricePrecompile.sol":{"ast":{"absolutePath":"contracts/utils/HyperSpotPricePrecompile.sol","exportedSymbols":{"HyperSpotPricePrecompile":[24562]},"id":24563,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24503,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"45:24:96"},{"abstract":false,"baseContracts":[],"canonicalName":"HyperSpotPricePrecompile","contractDependencies":[],"contractKind":"library","documentation":{"id":24504,"nodeType":"StructuredDocumentation","src":"71:296:96","text":" @notice Library to interact with the Hyperliquid spot price precompile.\n @dev The precompile is a special type of code, executed in the Hypercore's node. For more information, see\n https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore ."},"fullyImplemented":true,"id":24562,"linearizedBaseContracts":[24562],"name":"HyperSpotPricePrecompile","nameLocation":"376:24:96","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"ef89de08","id":24507,"mutability":"constant","name":"SPOT_PRICE_PRECOMPILE_ADDRESS","nameLocation":"431:29:96","nodeType":"VariableDeclaration","scope":24562,"src":"407:98:96","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24505,"name":"address","nodeType":"ElementaryTypeName","src":"407:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307830303030303030303030303030303030303030303030303030303030303030303030303030383038","id":24506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"463:42:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x0000000000000000000000000000000000000808"},"visibility":"public"},{"documentation":{"id":24508,"nodeType":"StructuredDocumentation","src":"512:70:96","text":"@notice The precompile had an error while fetching the spot price."},"errorSelector":"79827df5","id":24510,"name":"SpotPricePrecompileFailed","nameLocation":"593:25:96","nodeType":"ErrorDefinition","parameters":{"id":24509,"nodeType":"ParameterList","parameters":[],"src":"618:2:96"},"src":"587:34:96"},{"documentation":{"id":24511,"nodeType":"StructuredDocumentation","src":"627:35:96","text":"@notice The spot price is zero."},"errorSelector":"44526c24","id":24513,"name":"SpotPriceIsZero","nameLocation":"673:15:96","nodeType":"ErrorDefinition","parameters":{"id":24512,"nodeType":"ParameterList","parameters":[],"src":"688:2:96"},"src":"667:24:96"},{"body":{"id":24560,"nodeType":"Block","src":"766:375:96","statements":[{"assignments":[24521,24523],"declarations":[{"constant":false,"id":24521,"mutability":"mutable","name":"success","nameLocation":"782:7:96","nodeType":"VariableDeclaration","scope":24560,"src":"777:12:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24520,"name":"bool","nodeType":"ElementaryTypeName","src":"777:4:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":24523,"mutability":"mutable","name":"spotPriceBytes","nameLocation":"804:14:96","nodeType":"VariableDeclaration","scope":24560,"src":"791:27:96","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":24522,"name":"bytes","nodeType":"ElementaryTypeName","src":"791:5:96","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":24531,"initialValue":{"arguments":[{"arguments":[{"id":24528,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24515,"src":"874:9:96","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":24526,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"863:3:96","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":24527,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"867:6:96","memberName":"encode","nodeType":"MemberAccess","src":"863:10:96","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":24529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"863:21:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":24524,"name":"SPOT_PRICE_PRECOMPILE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24507,"src":"822:29:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":24525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"852:10:96","memberName":"staticcall","nodeType":"MemberAccess","src":"822:40:96","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":24530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"822:63:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"776:109:96"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":24534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24532,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24521,"src":"899:7:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":24533,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"910:5:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"899:16:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24539,"nodeType":"IfStatement","src":"895:81:96","trueBody":{"id":24538,"nodeType":"Block","src":"917:59:96","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24535,"name":"SpotPricePrecompileFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24510,"src":"938:25:96","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"938:27:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24537,"nodeType":"RevertStatement","src":"931:34:96"}]}},{"assignments":[24541],"declarations":[{"constant":false,"id":24541,"mutability":"mutable","name":"price","nameLocation":"993:5:96","nodeType":"VariableDeclaration","scope":24560,"src":"985:13:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24540,"name":"uint256","nodeType":"ElementaryTypeName","src":"985:7:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24549,"initialValue":{"arguments":[{"id":24544,"name":"spotPriceBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24523,"src":"1012:14:96","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":24546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1029:7:96","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":24545,"name":"uint256","nodeType":"ElementaryTypeName","src":"1029:7:96","typeDescriptions":{}}}],"id":24547,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1028:9:96","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":24542,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1001:3:96","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":24543,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1005:6:96","memberName":"decode","nodeType":"MemberAccess","src":"1001:10:96","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":24548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1001:37:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"985:53:96"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24550,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24541,"src":"1052:5:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":24551,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1061:1:96","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1052:10:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24557,"nodeType":"IfStatement","src":"1048:65:96","trueBody":{"id":24556,"nodeType":"Block","src":"1064:49:96","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24553,"name":"SpotPriceIsZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24513,"src":"1085:15:96","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1085:17:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24555,"nodeType":"RevertStatement","src":"1078:24:96"}]}},{"expression":{"id":24558,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24541,"src":"1129:5:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24519,"id":24559,"nodeType":"Return","src":"1122:12:96"}]},"id":24561,"implemented":true,"kind":"function","modifiers":[],"name":"spotPrice","nameLocation":"706:9:96","nodeType":"FunctionDefinition","parameters":{"id":24516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24515,"mutability":"mutable","name":"pairIndex","nameLocation":"723:9:96","nodeType":"VariableDeclaration","scope":24561,"src":"716:16:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":24514,"name":"uint32","nodeType":"ElementaryTypeName","src":"716:6:96","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"715:18:96"},"returnParameters":{"id":24519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24518,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24561,"src":"757:7:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24517,"name":"uint256","nodeType":"ElementaryTypeName","src":"757:7:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"756:9:96"},"scope":24562,"src":"697:444:96","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":24563,"src":"368:775:96","usedErrors":[24510,24513],"usedEvents":[]}],"src":"45:1099:96"},"id":96},"contracts/utils/HyperTokenInfoPrecompile.sol":{"ast":{"absolutePath":"contracts/utils/HyperTokenInfoPrecompile.sol","exportedSymbols":{"HyperTokenInfoPrecompile":[24631]},"id":24632,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24564,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"45:24:97"},{"abstract":false,"baseContracts":[],"canonicalName":"HyperTokenInfoPrecompile","contractDependencies":[],"contractKind":"library","documentation":{"id":24565,"nodeType":"StructuredDocumentation","src":"71:296:97","text":" @notice Library to interact with the Hyperliquid token info precompile.\n @dev The precompile is a special type of code, executed in the Hypercore's node. For more information, see\n https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore ."},"fullyImplemented":true,"id":24631,"linearizedBaseContracts":[24631],"name":"HyperTokenInfoPrecompile","nameLocation":"376:24:97","nodeType":"ContractDefinition","nodes":[{"canonicalName":"HyperTokenInfoPrecompile.HyperTokenInfo","id":24583,"members":[{"constant":false,"id":24567,"mutability":"mutable","name":"name","nameLocation":"518:4:97","nodeType":"VariableDeclaration","scope":24583,"src":"511:11:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":24566,"name":"string","nodeType":"ElementaryTypeName","src":"511:6:97","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":24570,"mutability":"mutable","name":"spots","nameLocation":"541:5:97","nodeType":"VariableDeclaration","scope":24583,"src":"532:14:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint64_$dyn_storage_ptr","typeString":"uint64[]"},"typeName":{"baseType":{"id":24568,"name":"uint64","nodeType":"ElementaryTypeName","src":"532:6:97","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":24569,"nodeType":"ArrayTypeName","src":"532:8:97","typeDescriptions":{"typeIdentifier":"t_array$_t_uint64_$dyn_storage_ptr","typeString":"uint64[]"}},"visibility":"internal"},{"constant":false,"id":24572,"mutability":"mutable","name":"deployerTradingFeeShare","nameLocation":"563:23:97","nodeType":"VariableDeclaration","scope":24583,"src":"556:30:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":24571,"name":"uint64","nodeType":"ElementaryTypeName","src":"556:6:97","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":24574,"mutability":"mutable","name":"deployer","nameLocation":"604:8:97","nodeType":"VariableDeclaration","scope":24583,"src":"596:16:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24573,"name":"address","nodeType":"ElementaryTypeName","src":"596:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24576,"mutability":"mutable","name":"evmContract","nameLocation":"630:11:97","nodeType":"VariableDeclaration","scope":24583,"src":"622:19:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24575,"name":"address","nodeType":"ElementaryTypeName","src":"622:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24578,"mutability":"mutable","name":"szDecimals","nameLocation":"657:10:97","nodeType":"VariableDeclaration","scope":24583,"src":"651:16:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24577,"name":"uint8","nodeType":"ElementaryTypeName","src":"651:5:97","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":24580,"mutability":"mutable","name":"weiDecimals","nameLocation":"683:11:97","nodeType":"VariableDeclaration","scope":24583,"src":"677:17:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24579,"name":"uint8","nodeType":"ElementaryTypeName","src":"677:5:97","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":24582,"mutability":"mutable","name":"evmExtraWeiDecimals","nameLocation":"709:19:97","nodeType":"VariableDeclaration","scope":24583,"src":"704:24:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"},"typeName":{"id":24581,"name":"int8","nodeType":"ElementaryTypeName","src":"704:4:97","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"visibility":"internal"}],"name":"HyperTokenInfo","nameLocation":"486:14:97","nodeType":"StructDefinition","scope":24631,"src":"479:256:97","visibility":"public"},{"constant":true,"functionSelector":"19dd39d3","id":24586,"mutability":"constant","name":"TOKEN_INFO_PRECOMPILE_ADDRESS","nameLocation":"765:29:97","nodeType":"VariableDeclaration","scope":24631,"src":"741:98:97","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24584,"name":"address","nodeType":"ElementaryTypeName","src":"741:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307830303030303030303030303030303030303030303030303030303030303030303030303030383043","id":24585,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"797:42:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x000000000000000000000000000000000000080C"},"visibility":"public"},{"documentation":{"id":24587,"nodeType":"StructuredDocumentation","src":"846:70:97","text":"@notice The precompile had an error while fetching the token info."},"errorSelector":"61c18134","id":24589,"name":"TokenInfoPrecompileFailed","nameLocation":"927:25:97","nodeType":"ErrorDefinition","parameters":{"id":24588,"nodeType":"ParameterList","parameters":[],"src":"952:2:97"},"src":"921:34:97"},{"body":{"id":24629,"nodeType":"Block","src":"1030:320:97","statements":[{"assignments":[24597,24599],"declarations":[{"constant":false,"id":24597,"mutability":"mutable","name":"success","nameLocation":"1046:7:97","nodeType":"VariableDeclaration","scope":24629,"src":"1041:12:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24596,"name":"bool","nodeType":"ElementaryTypeName","src":"1041:4:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":24599,"mutability":"mutable","name":"out","nameLocation":"1068:3:97","nodeType":"VariableDeclaration","scope":24629,"src":"1055:16:97","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":24598,"name":"bytes","nodeType":"ElementaryTypeName","src":"1055:5:97","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":24607,"initialValue":{"arguments":[{"arguments":[{"id":24604,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24591,"src":"1127:10:97","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":24602,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1116:3:97","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":24603,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1120:6:97","memberName":"encode","nodeType":"MemberAccess","src":"1116:10:97","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":24605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1116:22:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":24600,"name":"TOKEN_INFO_PRECOMPILE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24586,"src":"1075:29:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":24601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1105:10:97","memberName":"staticcall","nodeType":"MemberAccess","src":"1075:40:97","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":24606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1075:64:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1040:99:97"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":24610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24608,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24597,"src":"1153:7:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":24609,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1164:5:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1153:16:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24615,"nodeType":"IfStatement","src":"1149:81:97","trueBody":{"id":24614,"nodeType":"Block","src":"1171:59:97","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24611,"name":"TokenInfoPrecompileFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24589,"src":"1192:25:97","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1192:27:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24613,"nodeType":"RevertStatement","src":"1185:34:97"}]}},{"assignments":[24618],"declarations":[{"constant":false,"id":24618,"mutability":"mutable","name":"tokenInfo","nameLocation":"1261:9:97","nodeType":"VariableDeclaration","scope":24629,"src":"1239:31:97","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HyperTokenInfo_$24583_memory_ptr","typeString":"struct HyperTokenInfoPrecompile.HyperTokenInfo"},"typeName":{"id":24617,"nodeType":"UserDefinedTypeName","pathNode":{"id":24616,"name":"HyperTokenInfo","nameLocations":["1239:14:97"],"nodeType":"IdentifierPath","referencedDeclaration":24583,"src":"1239:14:97"},"referencedDeclaration":24583,"src":"1239:14:97","typeDescriptions":{"typeIdentifier":"t_struct$_HyperTokenInfo_$24583_storage_ptr","typeString":"struct HyperTokenInfoPrecompile.HyperTokenInfo"}},"visibility":"internal"}],"id":24625,"initialValue":{"arguments":[{"id":24621,"name":"out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24599,"src":"1284:3:97","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":24622,"name":"HyperTokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24583,"src":"1290:14:97","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_HyperTokenInfo_$24583_storage_ptr_$","typeString":"type(struct HyperTokenInfoPrecompile.HyperTokenInfo storage pointer)"}}],"id":24623,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1289:16:97","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_HyperTokenInfo_$24583_storage_ptr_$","typeString":"type(struct HyperTokenInfoPrecompile.HyperTokenInfo storage pointer)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_struct$_HyperTokenInfo_$24583_storage_ptr_$","typeString":"type(struct HyperTokenInfoPrecompile.HyperTokenInfo storage pointer)"}],"expression":{"id":24619,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1273:3:97","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":24620,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1277:6:97","memberName":"decode","nodeType":"MemberAccess","src":"1273:10:97","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":24624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1273:33:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_HyperTokenInfo_$24583_memory_ptr","typeString":"struct HyperTokenInfoPrecompile.HyperTokenInfo memory"}},"nodeType":"VariableDeclarationStatement","src":"1239:67:97"},{"expression":{"expression":{"id":24626,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24618,"src":"1323:9:97","typeDescriptions":{"typeIdentifier":"t_struct$_HyperTokenInfo_$24583_memory_ptr","typeString":"struct HyperTokenInfoPrecompile.HyperTokenInfo memory"}},"id":24627,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1333:10:97","memberName":"szDecimals","nodeType":"MemberAccess","referencedDeclaration":24578,"src":"1323:20:97","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":24595,"id":24628,"nodeType":"Return","src":"1316:27:97"}]},"id":24630,"implemented":true,"kind":"function","modifiers":[],"name":"szDecimals","nameLocation":"970:10:97","nodeType":"FunctionDefinition","parameters":{"id":24592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24591,"mutability":"mutable","name":"tokenIndex","nameLocation":"988:10:97","nodeType":"VariableDeclaration","scope":24630,"src":"981:17:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":24590,"name":"uint32","nodeType":"ElementaryTypeName","src":"981:6:97","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"980:19:97"},"returnParameters":{"id":24595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24594,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24630,"src":"1023:5:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24593,"name":"uint8","nodeType":"ElementaryTypeName","src":"1023:5:97","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1022:7:97"},"scope":24631,"src":"961:389:97","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":24632,"src":"368:984:97","usedErrors":[24589],"usedEvents":[]}],"src":"45:1308:97"},"id":97}},"contracts":{"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"IAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Simple interface for permissioned calling of external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":\"IAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"IRateProvider":{"abi":[{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getRate()":"679aefce"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"rate\":\"The current token rate\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"}},\"notice\":\"General interface for token exchange rates.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":\"IRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol":{"IVersion":{"abi":[{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"version()\":{\"details\":\"For standard Balancer contracts, returns a JSON representation of the contract version containing name, version number and task ID. See real examples in the deployment repo; local tests just use plain text strings.\",\"returns\":{\"_0\":\"version The version string corresponding to the current deployed contract\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"version()\":{\"notice\":\"Return arbitrary text representing the version of a contract.\"}},\"notice\":\"Simple interface to retrieve the version of a deployed contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":\"IVersion\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"IBalancerContractRegistry":{"abi":[{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressNotRegistered","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractAliasInUseAsName","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAlreadyDeprecated","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractNameInUseAsAlias","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameNotRegistered","type":"error"},{"inputs":[],"name":"InvalidContractAlias","type":"error"},{"inputs":[],"name":"InvalidContractName","type":"error"},{"inputs":[],"name":"ZeroContractAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeprecated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"contractAlias","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAliasUpdated","type":"event"},{"inputs":[{"internalType":"string","name":"contractAlias","type":"string"},{"internalType":"address","name":"existingContract","type":"address"}],"name":"addOrUpdateBalancerContractAlias","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"deprecateBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"deregisterBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"getBalancerContract","outputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"getBalancerContractInfo","outputs":[{"components":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"bool","name":"isRegistered","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"}],"internalType":"struct IBalancerContractRegistry.ContractInfo","name":"info","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"isActiveBalancerContract","outputs":[{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"isTrustedRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"registerBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addOrUpdateBalancerContractAlias(string,address)":"2967af96","deprecateBalancerContract(address)":"44969a9c","deregisterBalancerContract(string)":"c7f90793","getBalancerContract(uint8,string)":"41d8c0bb","getBalancerContractInfo(address)":"8554c327","isActiveBalancerContract(uint8,address)":"ae2733a4","isTrustedRouter(address)":"264e97e0","registerBalancerContract(uint8,string,address)":"e0376ab4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractAliasInUseAsName\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAlreadyDeprecated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractNameInUseAsAlias\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractAlias\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractName\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroContractAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAliasUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"existingContract\",\"type\":\"address\"}],\"name\":\"addOrUpdateBalancerContractAlias\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"deprecateBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"deregisterBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"getBalancerContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"getBalancerContractInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"internalType\":\"struct IBalancerContractRegistry.ContractInfo\",\"name\":\"info\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"isActiveBalancerContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"isTrustedRouter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"registerBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"details\":\"Both names and addresses must be unique in the primary registration mapping. Though there are two mappings to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent name => address => state mapping.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractType\":\"The contract type, provided for documentation purposes\"}}],\"ContractAddressNotRegistered(address)\":[{\"details\":\"A contract being deprecated was never registered, or the target of an alias isn't a previously registered contract.\",\"params\":{\"contractAddress\":\"The address of the contract that was not registered\"}}],\"ContractAliasInUseAsName(uint8,string)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractName\":\"The name of the previously registered contract (and proposed alias)\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractAlreadyDeprecated(address)\":[{\"params\":{\"contractAddress\":\"The address of the previously deprecated contract\"}}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"details\":\"Note that names must be unique; it is not possible to register two contracts with the same name and different types, or the same name and different addresses.\",\"params\":{\"contractName\":\"The name of the previously registered contract\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractNameInUseAsAlias(string,address)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractName\":\"The name of the previously registered contract\"}}],\"ContractNameNotRegistered(string)\":[{\"params\":{\"contractName\":\"The name of the unregistered contract\"}}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"details\":\"This sets the `isActive` flag to false.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"BalancerContractDeregistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deregistered\",\"contractName\":\"The name of the contract being deregistered\",\"contractType\":\"The type of contract being deregistered\"}},\"BalancerContractRegistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being registered\",\"contractName\":\"The name of the contract being registered\",\"contractType\":\"The type of contract being registered\"}},\"ContractAliasUpdated(string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deprecated\",\"contractAlias\":\"The alias name\"}}},\"kind\":\"dev\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"details\":\"This is a permissioned function to support querying by a contract alias. For instance, we might create a `WeightedPool` alias meaning the \\\"latest\\\" version of the `WeightedPoolFactory`, so that off-chain users don't need to track specific versions. Once added, an alias can also be updated to point to a different address (e.g., when migrating from the v2 to the v3 weighted pool).\",\"params\":{\"contractAlias\":\"An alternate name that can be used to fetch a contract address\",\"existingContract\":\"The target address of the contract alias\"}},\"deprecateBalancerContract(address)\":{\"details\":\"This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are enforced unique, so either the name or address could be specified in principle.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"deregisterBalancerContract(string)\":{\"details\":\"This is a permissioned function, and makes it possible to correct errors without complex update logic. If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete it, and register it again with the correct data. It must start with the name, as this is the registry key, required for complete deletion. Note that there might still be an alias targeting the address being deleted, but accessing it will just return inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to the correct address.\",\"params\":{\"contractName\":\"The name of the contract being deprecated (cannot be an alias)\"}},\"getBalancerContract(uint8,string)\":{\"details\":\"This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias (e.g., `WeightedPool`).\",\"params\":{\"contractName\":\"The name of the contract\",\"contractType\":\"The type of the contract\"},\"returns\":{\"contractAddress\":\"The address of the associated contract, if registered, or zero\",\"isActive\":\"True if the contract was registered and not deprecated\"}},\"getBalancerContractInfo(address)\":{\"params\":{\"contractAddress\":\"The address of the associated contract\"},\"returns\":{\"info\":\"ContractInfo struct corresponding to the address\"}},\"isActiveBalancerContract(uint8,address)\":{\"params\":{\"contractAddress\":\"The address of the contract\",\"contractType\":\"The type of contract\"},\"returns\":{\"isActive\":\"True if the given address is a registered and active contract of the specified type\"}},\"registerBalancerContract(uint8,string,address)\":{\"details\":\"This is a permissioned function, and does only basic validation of the address (non-zero) and the name (not blank). Governance must ensure this is called with valid information. Emits the `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or already in use.\",\"params\":{\"contractAddress\":\"The address of the contract\",\"contractName\":\"A text description of the contract, usually the deployed version (e.g., \\\"v3-pool-weighted\\\")\",\"contractType\":\"The type of contract being registered\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"notice\":\"A contract has already been registered under the given address.\"}],\"ContractAddressNotRegistered(address)\":[{\"notice\":\"An operation that requires a valid contract specified an unrecognized address.\"}],\"ContractAliasInUseAsName(uint8,string)\":[{\"notice\":\"The proposed alias has already been registered as a contract.\"}],\"ContractAlreadyDeprecated(address)\":[{\"notice\":\"Contracts can only be deprecated once.\"}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"notice\":\"A contract has already been registered under the given name.\"}],\"ContractNameInUseAsAlias(string,address)\":[{\"notice\":\"The proposed contract name has already been added as an alias.\"}],\"ContractNameNotRegistered(string)\":[{\"notice\":\"Thrown when attempting to deregister a contract that was not previously registered.\"}],\"InvalidContractAlias()\":[{\"notice\":\"Cannot add an empty string as an alias.\"}],\"InvalidContractName()\":[{\"notice\":\"Cannot register (or deregister) a contract with an empty string as a name.\"}],\"ZeroContractAddress()\":[{\"notice\":\"Cannot register or deprecate contracts, or add an alias targeting the zero address.\"}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"notice\":\"Emitted when a registered contract is deprecated.\"},\"BalancerContractDeregistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is deregistered (deleted).\"},\"BalancerContractRegistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is registered.\"},\"ContractAliasUpdated(string,address)\":{\"notice\":\"Emitted when an alias is added or updated.\"}},\"kind\":\"user\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"notice\":\"Add an alias for a registered contract.\"},\"deprecateBalancerContract(address)\":{\"notice\":\"Deprecate an official Balancer contract.\"},\"deregisterBalancerContract(string)\":{\"notice\":\"Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"},\"getBalancerContract(uint8,string)\":{\"notice\":\"Look up a registered contract by type and name.\"},\"getBalancerContractInfo(address)\":{\"notice\":\"Look up complete information about a registered contract by address.\"},\"isActiveBalancerContract(uint8,address)\":{\"notice\":\"Determine whether an address is an official contract of the specified type.\"},\"isTrustedRouter(address)\":{\"notice\":\"Returns `true` if the given address is an active contract under the ROUTER type.\"},\"registerBalancerContract(uint8,string,address)\":{\"notice\":\"Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":\"IBalancerContractRegistry\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol":{"IBalancerFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BurnPathDoesNotExist","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"inputs":[],"name":"TargetTokenOutMismatch","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"feeToken","type":"address"}],"name":"getBurnPath","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"}],"internalType":"struct IBalancerFeeBurner.SwapPathStep[]","name":"steps","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"}],"internalType":"struct IBalancerFeeBurner.SwapPathStep[]","name":"steps","type":"tuple[]"}],"name":"setBurnPath","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","getBurnPath(address)":"c1cfb02a","setBurnPath(address,(address,address)[])":"e3746cb2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BurnPathDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetTokenOutMismatch\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"getBurnPath\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"internalType\":\"struct IBalancerFeeBurner.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"internalType\":\"struct IBalancerFeeBurner.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"}],\"name\":\"setBurnPath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}},\"getBurnPath(address)\":{\"params\":{\"feeToken\":\"The fee token to get the path for\"},\"returns\":{\"steps\":\"The steps in the burn path\"}},\"setBurnPath(address,(address,address)[])\":{\"details\":\"This is the sequence of swaps required to convert the `feeToken` to the `targetToken`. This is a permissioned function.\",\"params\":{\"feeToken\":\"The fee token to set the path for\",\"steps\":\"The steps in the burn path\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BurnPathDoesNotExist()\":[{\"notice\":\"Burn path not set for the fee token.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}],\"TargetTokenOutMismatch()\":[{\"notice\":\"The last token in the path is not the same as the target token.\"}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"},\"getBurnPath(address)\":{\"notice\":\"Get the burn path for a fee token.\"},\"setBurnPath(address,(address,address)[])\":{\"notice\":\"Set the burn path for a fee token.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol\":\"IBalancerFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol\":{\"keccak256\":\"0xb5dc03fa23c5481ff4bebe9136c73e363a96e5beaf89d22f4eedb142331a0478\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d33361a79282a589f7b167caa04acb3b7eba0cc85b11a21f8504187151542ed6\",\"dweb:/ipfs/Qmc5WZFBfq9oZEQ4Zhv6VgJpeBJA7v68Jc1cKTJ5iFBuhM\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol":{"IComposableCow":{"abi":[{"inputs":[{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"},{"internalType":"bool","name":"dispatch","type":"bool"}],"name":"create","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"domainSeparator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"safe","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes32","name":"_domainSeparator","type":"bytes32"},{"internalType":"bytes32","name":"typeHash","type":"bytes32"},{"internalType":"bytes","name":"encodeData","type":"bytes"},{"internalType":"bytes","name":"payload","type":"bytes"}],"name":"isValidSafeSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"create((address,bytes32,bytes),bool)":"6bfae1ca","domainSeparator()":"f698da25","isValidSafeSignature(address,address,bytes32,bytes32,bytes32,bytes,bytes)":"53f00b14"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"dispatch\",\"type\":\"bool\"}],\"name\":\"create\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"safe\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_domainSeparator\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"typeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"encodeData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"isValidSafeSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"create((address,bytes32,bytes),bool)\":{\"params\":{\"dispatch\":\"If true, submit the order (always true in the CowSwapBurner)\",\"params\":\"Order parameters\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"create((address,bytes32,bytes),bool)\":{\"notice\":\"Construct a CoW order.\"},\"isValidSafeSignature(address,address,bytes32,bytes32,bytes32,bytes,bytes)\":{\"notice\":\"Delegated ERC-1271 signature validation with an enhanced context.\"}},\"notice\":\"Utility contract used to validate orders in the `CowSwapFeeBurner`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\":\"IComposableCow\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\":{\"keccak256\":\"0xc82721c94d5e741f168aed4c94dc6a9006cb3348bee7398a5e3fa9b7e28557bd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://784c16c17fb89736ec5be650668d81a548acec3ccc2073e2be0f79029f84f512\",\"dweb:/ipfs/QmSk9seqC2YEJqy5pPdXKjmhEKoQhXQdQXCN4f9R8jcXKX\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol":{"ICowConditionalOrder":{"abi":[{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"OrderNotValid","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollNever","type":"error"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtBlock","type":"error"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtEpoch","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryNextBlock","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes32","name":"domainSeparator","type":"bytes32"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"},{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"order","type":"tuple"}],"name":"verify","outputs":[],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))":"14a2a784"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"OrderNotValid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollNever\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtEpoch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryNextBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"domainSeparator\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"CoW Protocol Developers + mfw78 \",\"errors\":{\"OrderNotValid(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"PollNever(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be deleted\"}}],\"PollTryAtBlock(uint256,string)\":[{\"params\":{\"blockNumber\":\"The block number when polling should resume\",\"reason\":\"Text description of the reason it should be retried\"}}],\"PollTryAtEpoch(uint256,string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\",\"timestamp\":\"The unix timestamp when polling should resume\"}}],\"PollTryNextBlock(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\"}}]},\"kind\":\"dev\",\"methods\":{\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"details\":\"Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe. **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over the order verification logic, and to allow a watchtower / user to propose a discrete order without it being generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\",\"params\":{\"_hash\":\"`EIP712` order digest\",\"ctx\":\"See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\",\"domainSeparator\":\"`EIP712` domain separator\",\"offchainInput\":\"Type-specific data NOT known at time of creation for a specific discrete order (or zero)\",\"order\":\"The proposed discrete order's `GPv2Order` data struct\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` calling `isValidSignature`\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"OrderNotValid(string)\":[{\"notice\":\"This error is returned by the `getTradeableOrder` function if the order conditions are not met.\"}],\"PollNever(string)\":[{\"notice\":\"The conditional order should not be polled again (i.e., deleted).\"}],\"PollTryAtBlock(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific block number.\"}],\"PollTryAtEpoch(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific epoch (unix timestamp).\"}],\"PollTryNextBlock(string)\":[{\"notice\":\"Polling should be retried at the next block.\"}]},\"kind\":\"user\",\"methods\":{\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"notice\":\"Verify that a given discrete order is valid.\"}},\"notice\":\"Conditional Order Interface - verify a Cow order.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":\"ICowConditionalOrder\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol":{"ICowConditionalOrderGenerator":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"indexed":false,"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"}],"name":"ConditionalOrderCreated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"}],"name":"getTradeableOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getTradeableOrder(address,address,bytes32,bytes,bytes)":"b8296fc4","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"ConditionalOrderCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"}],\"name\":\"getTradeableOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"mfw78 \",\"events\":{\"ConditionalOrderCreated(address,(address,bytes32,bytes))\":{\"details\":\"Emitted when a new conditional order is created.\",\"params\":{\"owner\":\"The address that created the conditional order\",\"params\":\"The conditional order data\"}}},\"kind\":\"dev\",\"methods\":{\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"details\":\"**MUST** revert if the order conditions are not met.\",\"params\":{\"ctx\":\"The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\",\"offchainInput\":\"Off-chain input (similar to Balancer `userData`); currently unused\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` of the parent `isValidSignature` call\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"},\"returns\":{\"_0\":\"order Tradeable order for submission to the CoW Protocol API\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"notice\":\"Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\"}},\"notice\":\"Conditional Order Generator Interface\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":\"ICowConditionalOrderGenerator\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":{\"keccak256\":\"0x7b8f0149ba41d28c3d0cd956911816b083f7ccec35ddc7bb7fdb829c3c11d9b2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2d39a71115b9018711726b6c7498038e6d3a41338fa635c88cc8025b4e0e5f34\",\"dweb:/ipfs/QmYqnnkXCd1yjs6kpQgxNUotpudgN37X5FTFNFyKE62PMj\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol":{"ICowSwapFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"InterfaceIsSignatureVerifierMuxer","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"InvalidOrderParameters","type":"error"},{"inputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"actualStatus","type":"uint8"}],"name":"OrderHasUnexpectedStatus","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"OrderNotValid","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollNever","type":"error"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtBlock","type":"error"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtEpoch","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryNextBlock","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"indexed":false,"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"}],"name":"ConditionalOrderCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"OrderCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"OrderRetried","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"emergencyCancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"orderData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrderStatus","outputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"orderStatus","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"}],"name":"getTradeableOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"magicValue","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"retryOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes32","name":"domainSeparator","type":"bytes32"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"},{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"order","type":"tuple"}],"name":"verify","outputs":[],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","cancelOrder(address,address)":"60e092c6","emergencyCancelOrder(address,address)":"68bce712","getOrder(address)":"6eba2b13","getOrderStatus(address)":"6f9d75cd","getTradeableOrder(address,address,bytes32,bytes,bytes)":"b8296fc4","isValidSignature(bytes32,bytes)":"1626ba7e","retryOrder(address,uint256,uint256)":"d83b06a4","supportsInterface(bytes4)":"01ffc9a7","verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))":"14a2a784"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InterfaceIsSignatureVerifierMuxer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"InvalidOrderParameters\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"actualStatus\",\"type\":\"uint8\"}],\"name\":\"OrderHasUnexpectedStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"OrderNotValid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollNever\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtEpoch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryNextBlock\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"ConditionalOrderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"OrderCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"OrderRetried\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"cancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"emergencyCancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"orderData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrderStatus\",\"outputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"orderStatus\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"}],\"name\":\"getTradeableOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"magicValue\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"retryOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"domainSeparator\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"InvalidOrderParameters(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"OrderHasUnexpectedStatus(uint8)\":[{\"details\":\"`revertOrder` should only be called when the OrderStatus is `Failed`.\",\"params\":{\"actualStatus\":\"The status of the order when `revertOrder` was called\"}}],\"OrderNotValid(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"PollNever(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be deleted\"}}],\"PollTryAtBlock(uint256,string)\":[{\"params\":{\"blockNumber\":\"The block number when polling should resume\",\"reason\":\"Text description of the reason it should be retried\"}}],\"PollTryAtEpoch(uint256,string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\",\"timestamp\":\"The unix timestamp when polling should resume\"}}],\"PollTryNextBlock(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\"}}]},\"events\":{\"ConditionalOrderCreated(address,(address,bytes32,bytes))\":{\"details\":\"Emitted when a new conditional order is created.\",\"params\":{\"owner\":\"The address that created the conditional order\",\"params\":\"The conditional order data\"}},\"OrderCanceled(address,uint256,address)\":{\"params\":{\"exactAmountIn\":\"The number of tokens in the order\",\"receiver\":\"The account that received the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"OrderRetried(address,uint256,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the new order to be filled\",\"exactAmountIn\":\"The number of tokens in the order\",\"minAmountOut\":\"The minimum number of target tokens required\",\"tokenIn\":\"The token used to identify the order\"}},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}},\"cancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"emergencyCancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"getOrder(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"orderData\":\"The order data for the given token\"}},\"getOrderStatus(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"orderStatus\":\"The status of the order for the given token\"}},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"details\":\"**MUST** revert if the order conditions are not met.\",\"params\":{\"ctx\":\"The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\",\"offchainInput\":\"Off-chain input (similar to Balancer `userData`); currently unused\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` of the parent `isValidSignature` call\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"},\"returns\":{\"_0\":\"order Tradeable order for submission to the CoW Protocol API\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"Should return whether the signature provided is valid for the provided data\",\"params\":{\"hash\":\"Hash of the data to be signed\",\"signature\":\"Signature byte array associated with `hash`\"}},\"retryOrder(address,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the order to be filled.\",\"minAmountOut\":\"The minimum number of target tokens to receive (tokenOut)\",\"tokenIn\":\"The token used to identify the order\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"details\":\"Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe. **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over the order verification logic, and to allow a watchtower / user to propose a discrete order without it being generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\",\"params\":{\"_hash\":\"`EIP712` order digest\",\"ctx\":\"See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\",\"domainSeparator\":\"`EIP712` domain separator\",\"offchainInput\":\"Type-specific data NOT known at time of creation for a specific discrete order (or zero)\",\"order\":\"The proposed discrete order's `GPv2Order` data struct\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` calling `isValidSignature`\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"InterfaceIsSignatureVerifierMuxer()\":[{\"notice\":\"Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\"}],\"InvalidOrderParameters(string)\":[{\"notice\":\"The order parameters were invalid.\"}],\"OrderHasUnexpectedStatus(uint8)\":[{\"notice\":\"Attempt to revert an order that had not failed.\"}],\"OrderNotValid(string)\":[{\"notice\":\"This error is returned by the `getTradeableOrder` function if the order conditions are not met.\"}],\"PollNever(string)\":[{\"notice\":\"The conditional order should not be polled again (i.e., deleted).\"}],\"PollTryAtBlock(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific block number.\"}],\"PollTryAtEpoch(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific epoch (unix timestamp).\"}],\"PollTryNextBlock(string)\":[{\"notice\":\"Polling should be retried at the next block.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"OrderCanceled(address,uint256,address)\":{\"notice\":\"An order was canceled after failure.\"},\"OrderRetried(address,uint256,uint256,uint256)\":{\"notice\":\"An order was retried after failing.\"},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"},\"cancelOrder(address,address)\":{\"notice\":\"Return tokens from an order that has failed.\"},\"emergencyCancelOrder(address,address)\":{\"notice\":\"Emergency return tokens from an order regardless of status.\"},\"getOrder(address)\":{\"notice\":\"Get the order at the sell token.\"},\"getOrderStatus(address)\":{\"notice\":\"Get the status of the order at the sell token.\"},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"notice\":\"Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\"},\"retryOrder(address,uint256,uint256)\":{\"notice\":\"Retry an order that has not been filled yet and expired.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"notice\":\"Verify that a given discrete order is valid.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\":\"ICowSwapFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":{\"keccak256\":\"0x7b8f0149ba41d28c3d0cd956911816b083f7ccec35ddc7bb7fdb829c3c11d9b2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2d39a71115b9018711726b6c7498038e6d3a41338fa635c88cc8025b4e0e5f34\",\"dweb:/ipfs/QmYqnnkXCd1yjs6kpQgxNUotpudgN37X5FTFNFyKE62PMj\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\":{\"keccak256\":\"0xc3717c516d816bd012f47a18bfd69f7887ce262435c10be9748beb4b11aee033\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://237a9295364524846f26c1b92b523e6039b414d3b691f77ba55c6deefa4b14bc\",\"dweb:/ipfs/QmXYg1paW7kDeXCFkiunzSWSWT3DD2p15CHnJZzDyEQ6Jo\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@openzeppelin/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x66c7ec42c6c43712be2107a50ab4529379bc76a632b425babec698d9da921ac6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dce2778f0b638adfc5ba29c2c618c855fe725fa74a16846386aa1d56a834aa04\",\"dweb:/ipfs/QmPV9oWnzQdi58od266j62xvviavLNHqKLZfm6k2K1qy9E\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol":{"IHyperEVMRateProvider":{"abi":[{"inputs":[],"name":"getPairIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSpotPriceMultiplier","outputs":[{"internalType":"uint256","name":"spotPriceMultiplier","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getPairIndex()":"81bfa5d1","getSpotPriceMultiplier()":"a747d56f","getTokenIndex()":"295d3ee8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getPairIndex\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSpotPriceMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"spotPriceMultiplier\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenIndex\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getPairIndex()\":{\"details\":\"Hypercore has an index that identifies a pair of tokens to fetch the spot price.\",\"returns\":{\"_0\":\"pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\"}},\"getSpotPriceMultiplier()\":{\"details\":\"Hypercore returns the spot price with a different number of decimals for each token. So, to make this rate provider compatible with the vault, we need to scale the spot price to 18 decimals using this multiplier.\",\"returns\":{\"spotPriceMultiplier\":\"The spot price multiplier\"}},\"getTokenIndex()\":{\"returns\":{\"_0\":\"tokenIndex The index of the token on the Hyperliquid public API\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getPairIndex()\":{\"notice\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API.\"},\"getSpotPriceMultiplier()\":{\"notice\":\"The spot price multiplier.\"},\"getTokenIndex()\":{\"notice\":\"The index of the token on the Hyperliquid public API.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\":\"IHyperEVMRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\":{\"keccak256\":\"0xa2b797f83f03ad80f6512aecc2c1aed8d8aac3ffe968e0f696ec98ec4c200cd5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93ec4d5a140fed3f7885318e2816d2c498ec44730a320d491d47c990660bc268\",\"dweb:/ipfs/QmPK2pHX4dEYf77K6vyT1LMU83neZP5xe5AzcBsv7oJoLm\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol":{"IHyperEVMRateProviderFactory":{"abi":[{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"},{"internalType":"address","name":"rateProvider","type":"address"}],"name":"RateProviderAlreadyExists","type":"error"},{"inputs":[],"name":"RateProviderFactoryIsDisabled","type":"error"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"name":"RateProviderNotFound","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"rateProvider","type":"address"}],"name":"RateProviderCreated","type":"event"},{"anonymous":false,"inputs":[],"name":"RateProviderFactoryDisabled","type":"event"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"name":"create","outputs":[{"internalType":"contract IHyperEVMRateProvider","name":"rateProvider","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"name":"getRateProvider","outputs":[{"internalType":"contract IHyperEVMRateProvider","name":"rateProvider","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRateProviderVersion","outputs":[{"internalType":"uint256","name":"rateProviderVersion","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IHyperEVMRateProvider","name":"rateProvider","type":"address"}],"name":"isRateProviderFromFactory","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"create(uint32,uint32)":"568acb79","disable()":"2f2770db","getRateProvider(uint32,uint32)":"99b8113f","getRateProviderVersion()":"381c7a4f","isRateProviderFromFactory(address)":"19912f71"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"name\":\"RateProviderAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateProviderFactoryIsDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"name\":\"RateProviderNotFound\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pairIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"name\":\"RateProviderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"RateProviderFactoryDisabled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"contract IHyperEVMRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"name\":\"getRateProvider\",\"outputs\":[{\"internalType\":\"contract IHyperEVMRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProviderVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rateProviderVersion\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IHyperEVMRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"name\":\"isRateProviderFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"RateProviderAlreadyExists(uint32,uint32,address)\":[{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"rateProvider\":\"The address of the deployed rate provider\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"}}],\"RateProviderNotFound(uint32,uint32)\":[{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"}}]},\"events\":{\"RateProviderCreated(uint256,uint256,address)\":{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"rateProvider\":\"The address of the deployed rate provider\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"}}},\"kind\":\"dev\",\"methods\":{\"create(uint32,uint32)\":{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"},\"returns\":{\"rateProvider\":\"The address of the deployed rate provider\"}},\"disable()\":{\"details\":\"A disabled rate provider factory cannot create new rate providers and cannot be re-enabled. However, already created rate providers are still usable. This is a permissioned function.\"},\"getRateProvider(uint32,uint32)\":{\"details\":\"Reverts if the rate provider was not found for the given token and pair.\",\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"},\"returns\":{\"rateProvider\":\"The address of the rate provider for the given token and pair\"}},\"getRateProviderVersion()\":{\"returns\":{\"rateProviderVersion\":\"The rate provider version number\"}},\"isRateProviderFromFactory(address)\":{\"params\":{\"rateProvider\":\"The rate provider to check\"},\"returns\":{\"success\":\"True if the rate provider was created by this factory; false otherwise\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"RateProviderAlreadyExists(uint32,uint32,address)\":[{\"notice\":\"A rate provider already exists for the given token and pair.\"}],\"RateProviderFactoryIsDisabled()\":[{\"notice\":\"The factory is disabled.\"}],\"RateProviderNotFound(uint32,uint32)\":[{\"notice\":\"The rate provider was not found for the given token and pair.\"}]},\"events\":{\"RateProviderCreated(uint256,uint256,address)\":{\"notice\":\"A new HyperEVM Rate Provider was created.\"},\"RateProviderFactoryDisabled()\":{\"notice\":\"Emitted when the factory is disabled.\"}},\"kind\":\"user\",\"methods\":{\"create(uint32,uint32)\":{\"notice\":\"Creates a new HyperEVM Rate Provider for the given token and pair.\"},\"disable()\":{\"notice\":\"Disables the rate provider factory.\"},\"getRateProvider(uint32,uint32)\":{\"notice\":\"Gets the rate provider for the given token and pair.\"},\"getRateProviderVersion()\":{\"notice\":\"Returns a number representing the rate provider version.\"},\"isRateProviderFromFactory(address)\":{\"notice\":\"Checks whether the given rate provider was created by this factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol\":\"IHyperEVMRateProviderFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\":{\"keccak256\":\"0xa2b797f83f03ad80f6512aecc2c1aed8d8aac3ffe968e0f696ec98ec4c200cd5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93ec4d5a140fed3f7885318e2816d2c498ec44730a320d491d47c990660bc268\",\"dweb:/ipfs/QmPK2pHX4dEYf77K6vyT1LMU83neZP5xe5AzcBsv7oJoLm\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol\":{\"keccak256\":\"0x9b1db72d212780046987be96919d7bc0bf9829faac6d47820a5d5f038d356d96\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://157ccbf98c1631eb1efc363e9cfb64646744b6a0c1e17f021a49c1c3649ae382\",\"dweb:/ipfs/QmUVnwLEJ8qghiReoZKUApRDP7cp4EdxKj7vEeyrZ8s453\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol":{"IPoolHelperCommon":{"abi":[{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"InvalidPoolSetId","type":"error"},{"inputs":[],"name":"InvalidPoolSetManager","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"poolSetManager","type":"address"}],"name":"PoolSetManagerNotUnique","type":"error"},{"inputs":[],"name":"SenderIsNotPoolSetManager","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolRemovedFromSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"initialManager","type":"address"}],"name":"PoolSetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"PoolSetDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"PoolSetOwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPoolsToSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"destroyPoolSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getAllPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getManagerForPoolSet","outputs":[{"internalType":"address","name":"manager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextPoolSetId","outputs":[{"internalType":"uint256","name":"nextPoolSetId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getPoolCountForSet","outputs":[{"internalType":"uint256","name":"poolCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolSetIdForCaller","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"getPoolSetIdForManager","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isPoolInSet","outputs":[{"internalType":"bool","name":"poolInSet","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isValidPoolSetId","outputs":[{"internalType":"bool","name":"isValid","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePoolsFromSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferPoolSetOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addPoolsToSet(uint256,address[])":"ebf3a8d0","createPoolSet(address)":"e909c19b","createPoolSet(address,address[])":"3e035f9b","destroyPoolSet(uint256)":"7c1ec460","getAllPoolsInSet(uint256)":"94fc4058","getManagerForPoolSet(uint256)":"f167a1e6","getNextPoolSetId()":"c482e822","getPoolCountForSet(uint256)":"62d53462","getPoolSetIdForCaller()":"ce998aba","getPoolSetIdForManager(address)":"25c427ed","getPoolsInSet(uint256,uint256,uint256)":"8c60ebd0","isPoolInSet(address,uint256)":"182551da","isValidPoolSetId(uint256)":"255dae41","removePoolsFromSet(uint256,address[])":"2da55a1d","transferPoolSetOwnership(address)":"3700f987"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"InvalidPoolSetId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolSetManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolSetManager\",\"type\":\"address\"}],\"name\":\"PoolSetManagerNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderIsNotPoolSetManager\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"PoolSetCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"PoolSetDestroyed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"PoolSetOwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPoolsToSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"destroyPoolSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getAllPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getManagerForPoolSet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextPoolSetId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nextPoolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getPoolCountForSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSetIdForCaller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getPoolSetIdForManager\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isPoolInSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolInSet\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isValidPoolSetId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isValid\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePoolsFromSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferPoolSetOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"params\":{\"poolSetId\":\"Id of the set involved in the operation\"}}],\"InvalidPoolSetId(uint256)\":[{\"details\":\"This can mean the value is invalid, or it was never created, or it was destroyed.\",\"params\":{\"poolSetId\":\"The id of the invalid set\"}}],\"PoolAlreadyInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolSetManagerNotUnique(address)\":[{\"details\":\"Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\",\"params\":{\"poolSetManager\":\"Address of the manager that is already assigned to another pool set id\"}}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolRemovedFromSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetCreated(uint256,address)\":{\"details\":\"Pools are organized into separate sets, controlled by a manager, which can be changed independently.\",\"params\":{\"initialManager\":\"Address of the pool set manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetDestroyed(uint256,address)\":{\"params\":{\"manager\":\"The address of the set's last manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"details\":\"Managers can only control one pool set. Transfers to existing managers of other sets will revert.\",\"params\":{\"newManager\":\"Address of the new manager\",\"oldManager\":\"Address of the previous manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}},\"kind\":\"dev\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may add pools to a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"newPools\":\"List of pools to add\",\"poolSetId\":\"Id of the set to which the new pools belong\"}},\"createPoolSet(address)\":{\"details\":\"Convenience function to create a pool set with no initial pools. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\"}},\"createPoolSet(address,address[])\":{\"details\":\"The `newPools` list can be empty, in which case this will only create the set. Pools can then be added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\",\"newPools\":\"Set of pools to add to the set\"}},\"destroyPoolSet(uint256)\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may destroy sets, effectively removing control of any pools in the set from the associated manager. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set being destroyed\"}},\"getAllPoolsInSet(uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"pools\":\"List of pools\"}},\"getManagerForPoolSet(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"manager\":\"The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\"}},\"getNextPoolSetId()\":{\"returns\":{\"nextPoolSetId\":\"The pool set id that will be used on the next call of `createPoolSet`\"}},\"getPoolCountForSet(uint256)\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction. Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"poolCount\":\"The current number of pools in the set\"}},\"getPoolSetIdForCaller()\":{\"returns\":{\"poolSetId\":\"The numeric pool set id, or zero if the caller is not a pool set manager\"}},\"getPoolSetIdForManager(address)\":{\"returns\":{\"poolSetId\":\"The numeric pool set id, or zero if the address given is not a pool set manager\"}},\"getPoolsInSet(uint256,uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`). Reverts if the poolSetId is not valid.\",\"params\":{\"from\":\"Start index\",\"poolSetId\":\"Id of the set containing the pools\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"isPoolInSet(address,uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"pool\":\"Address of the pool to check\",\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"poolInSet\":\"True if the pool is in the given set, false otherwise\"}},\"isValidPoolSetId(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"isValid\":\"True if the poolSetId exists\"}},\"removePoolsFromSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may remove pools from a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set to which the pools belong\",\"pools\":\"List of pools to remove from the set\"}},\"transferPoolSetOwnership(address)\":{\"details\":\"This is a permissioned function. Only the current manager of a set can call this to set a new manager. Since managers can only control a single set, there is no need to specify the id in the call. Note that this is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts if the new manager address is zero or already the manager of a pool set.\",\"params\":{\"newManager\":\"The address of the new manager\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"InvalidPoolSetId(uint256)\":[{\"notice\":\"Pool set id associated with an operation is invalid.\"}],\"InvalidPoolSetManager()\":[{\"notice\":\"The initial manager of a pool set cannot be zero.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolNotInSet(address,uint256)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolSetManagerNotUnique(address)\":[{\"notice\":\"Pool set managers can only manage a single pool set.\"}],\"SenderIsNotPoolSetManager()\":[{\"notice\":\"Permissioned operations on pools can only be performed by the pool set manager.\"}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"notice\":\"The owner added a pool to the given set.\"},\"PoolRemovedFromSet(address,uint256)\":{\"notice\":\"The owner removed a pool from the given set.\"},\"PoolSetCreated(uint256,address)\":{\"notice\":\"The owner created a new pool set.\"},\"PoolSetDestroyed(uint256,address)\":{\"notice\":\"The owner destroyed a pool set.\"},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"notice\":\"The current manager of a pool set transferred ownership to a new address.\"}},\"kind\":\"user\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"createPoolSet(address)\":{\"notice\":\"Create a new empty set with an initial manager.\"},\"createPoolSet(address,address[])\":{\"notice\":\"Create a new set with an initial manager, optionally initialized with a set of pools.\"},\"destroyPoolSet(uint256)\":{\"notice\":\"Simple way to remove an entire set of pools from control of the helper function.\"},\"getAllPoolsInSet(uint256)\":{\"notice\":\"Get the full set of pools from a given set.\"},\"getManagerForPoolSet(uint256)\":{\"notice\":\"Get the manager address associated with a given poolSetId.\"},\"getNextPoolSetId()\":{\"notice\":\"Utility function to predict the next pool set id.\"},\"getPoolCountForSet(uint256)\":{\"notice\":\"Get the number of pools associated with the given set.\"},\"getPoolSetIdForCaller()\":{\"notice\":\"Get the pool set id associated with the caller.\"},\"getPoolSetIdForManager(address)\":{\"notice\":\"Get the pool set id associated with a given manager address.\"},\"getPoolsInSet(uint256,uint256,uint256)\":{\"notice\":\"Get a range of pools from a given set.\"},\"isPoolInSet(address,uint256)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"isValidPoolSetId(uint256)\":{\"notice\":\"Check whether a poolSetId has been created.\"},\"removePoolsFromSet(uint256,address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"transferPoolSetOwnership(address)\":{\"notice\":\"Transfer ownership of a pool set from the current manager to a new manager.\"}},\"notice\":\"Common interface for helper functions that operate on a subset of pools.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":\"IPoolHelperCommon\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xdb8365416c9dd9d7be16677c13819065511e9bc7705d6bad85fd52b65d3b3c39\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b90206982d126075b074f0a77ea9cb3ec173ed9fe9e4504b12d6807532b1b7ff\",\"dweb:/ipfs/QmYjKTu4Mrew94sSxfQ8jP4yT7wZFgghSRyB9A2kDdSy8X\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol":{"IPoolPauseHelper":{"abi":[{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"pausePools","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"pausePools(address[])":"a20dc529"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"pausePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Governance can add a set of pools to this contract, then grant pause permission to accounts here, which allows greater granularity than setting the permission directly on the Vault. Note that governance must grant this contract permission to pause pools from the Vault. Unpausing is not addressed here, and must still be done through the Vault.\",\"kind\":\"dev\",\"methods\":{\"pausePools(address[])\":{\"details\":\"This is a permissioned function. Governance must first grant this contract permission to call `pausePool` on the Vault, then grant another account permission to call `pausePools` here. Note that this is not necessarily the same account that can add or remove pools from the pausable list. Note that there is no `unpause`. This is a helper contract designed to react quickly to emergencies. Unpausing is a more deliberate action that should be performed by accounts approved by governance for this purpose, or by the individual pools' pause managers.\",\"params\":{\"pools\":\"List of pools to pause\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"pausePools(address[])\":{\"notice\":\"Pause a set of pools.\"}},\"notice\":\"Maintain a set of pools that can be paused from this helper contract, vs. directly from the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol\":\"IPoolPauseHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol\":{\"keccak256\":\"0x5d5225c4c283e407458f36d0a10770445b0bd570333fce8d1365af978e8d7829\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://27d0e427a303790222bb696a940882129bafcd3ff57215179d4434d6506b8372\",\"dweb:/ipfs/QmNvL9juq6FzUXHHEufHreckXsPupv2rJw2CC3EBZQiEY5\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol":{"IPoolSwapFeeHelper":{"abi":[{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolHasSwapManager","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"setStaticSwapFeePercentage(address,uint256)":"d15126ba"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolHasSwapManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Governance can add a set of pools to this contract, then grant swap fee setting permission to accounts on this contract, which allows greater granularity than setting the permission directly on the Vault. Note that governance must grant this contract permission to set swap fees from the Vault, and only pools that allow governance to set fees can be added (i.e., they must not have swap managers).\",\"errors\":{\"PoolHasSwapManager(address)\":[{\"details\":\"The swap manager is an exclusive role. If it is set to a non-zero value during pool registration, only the swap manager can change the fee. This helper can only set fees on pools that allow governance to grant this permission.\",\"params\":{\"pool\":\"Address of the pool being added\"}}]},\"kind\":\"dev\",\"methods\":{\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function. Governance must grant this contract permission to call `setStaticSwapFeePercentage` on the Vault. Note that since the swap manager is an exclusive role, the swap fee cannot be changed by governance if it is set, and the pool cannot be added to the set.\",\"params\":{\"pool\":\"The address of the pool\",\"swapFeePercentage\":\"The new swap fee percentage\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"PoolHasSwapManager(address)\":[{\"notice\":\"Cannot add a pool that has a swap manager.\"}]},\"kind\":\"user\",\"methods\":{\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Set the static swap fee percentage on a given pool.\"}},\"notice\":\"Maintain a set of pools whose static swap fee percentages can be changed from here, vs. from the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol\":\"IPoolSwapFeeHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol\":{\"keccak256\":\"0x28f0e2ffd4fda0cb7b1f55d368e5bf8672d6f907e0171674a8a93c7c65c4a29b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37bb56bb5e66cead63626efaacae7dad39f3fd725d001825db861f22aceb0124\",\"dweb:/ipfs/QmdNskvPgTo6R3AmuA3zp8vY9waoEbKsTPWHp5v6aAbhkE\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol":{"IProtocolFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"burn(address,address,uint256,address,uint256,address,uint256)":"de557a32"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":\"IProtocolFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol":{"IProtocolFeeHelper":{"abi":[{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Governance can add a set of pools to this contract, then grant permission to call protocol swap- or yield- setting functions here, which allows greater granularity than setting permissions directly on the fee controller. Note that governance must grant this contract permission to call the pool protocol fee setting functions on the controller.\",\"kind\":\"dev\",\"methods\":{\"setProtocolSwapFeePercentage(address,uint256)\":{\"details\":\"This contract must be granted permission to set swap and yield protocol fees, but governance can independently grant permission to call the swap and yield fee setters.\",\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\",\"pool\":\"The address of the pool\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"details\":\"This contract must be granted permission to set swap and yield protocol fees, but governance can independently grant permission to call the swap and yield fee setters.\",\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\",\"pool\":\"The address of the pool\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Set the protocol swap fee for a pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Set the protocol yield fee for a pool.\"}},\"notice\":\"Maintain a set of pools whose protocol fees can be set from this helper contract, vs. the fee controller.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol\":\"IProtocolFeeHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol\":{\"keccak256\":\"0x79b4a52c34d448b3a67d91d37319c08b2a2c45e1ef94c66f1102d1df05f672f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d85fcc28f6c2cfbeefdb307c551d8904f82b6c2fc3e5bc2e5deb111a6a1007f1\",\"dweb:/ipfs/QmWa96ZJajKfwhGemApEoFCpFmStKHaMLUaZwpTQjYjoF3\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol":{"IProtocolFeeSweeper":{"abi":[{"inputs":[],"name":"BurnerDidNotConsumeAllowance","type":"error"},{"inputs":[],"name":"InvalidFeeRecipient","type":"error"},{"inputs":[],"name":"InvalidProtocolFeeBurner","type":"error"},{"inputs":[],"name":"InvalidTargetToken","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerAlreadyAdded","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerNotAdded","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"UnsupportedProtocolFeeBurner","type":"error"},{"inputs":[],"name":"UnwrapIsNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"feeRecipient","type":"address"}],"name":"FeeRecipientSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"feeTokenAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeSwept","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TargetTokenSet","type":"event"},{"inputs":[{"internalType":"contract IProtocolFeeBurner","name":"protocolFeeBurner","type":"address"}],"name":"addProtocolFeeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFeeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTargetToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"isApprovedProtocolFeeBurner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"feeTokens","type":"address[]"}],"name":"recoverProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeBurner","name":"protocolFeeBurner","type":"address"}],"name":"removeProtocolFeeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feeRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"targetToken","type":"address"}],"name":"setTargetToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"contract IProtocolFeeBurner","name":"feeBurner","type":"address"}],"name":"sweepProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC4626","name":"feeToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"contract IProtocolFeeBurner","name":"feeBurner","type":"address"}],"name":"sweepProtocolFeesForWrappedToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addProtocolFeeBurner(address)":"e20c482f","getFeeRecipient()":"4ccb20c0","getProtocolFeeController()":"85f2dbd4","getTargetToken()":"80db0d51","isApprovedProtocolFeeBurner(address)":"9c5cee9b","recoverProtocolFees(address[])":"b0edcc53","removeProtocolFeeBurner(address)":"b11f061e","setFeeRecipient(address)":"e74b981b","setTargetToken(address)":"1b66cb00","sweepProtocolFeesForToken(address,address,uint256,uint256,address)":"b9746995","sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)":"88f6d2a4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BurnerDidNotConsumeAllowance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidFeeRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeBurner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTargetToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerNotAdded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"UnsupportedProtocolFeeBurner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnwrapIsNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"FeeRecipientSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeSwept\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TargetTokenSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"addProtocolFeeBurner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTargetToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"isApprovedProtocolFeeBurner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"feeTokens\",\"type\":\"address[]\"}],\"name\":\"recoverProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"removeProtocolFeeBurner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"setFeeRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"}],\"name\":\"setTargetToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"feeBurner\",\"type\":\"address\"}],\"name\":\"sweepProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC4626\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"feeBurner\",\"type\":\"address\"}],\"name\":\"sweepProtocolFeesForWrappedToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"BurnerDidNotConsumeAllowance()\":[{\"details\":\"The fee sweeper approves the burner to pull tokens. If it doesn't do so, revert to avoid a \\\"hanging\\\" approval that could be exploited later.\"}],\"ProtocolFeeBurnerAlreadyAdded(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of an approved protocol fee burner\"}}],\"ProtocolFeeBurnerNotAdded(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of a protocol fee burner to be removed from the allowlist\"}}],\"UnsupportedProtocolFeeBurner(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of the unsupported fee burner\"}}]},\"events\":{\"FeeRecipientSet(address)\":{\"params\":{\"feeRecipient\":\"The final destination of collected protocol fees\"}},\"ProtocolFeeBurnerAdded(address)\":{\"details\":\"`sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\",\"params\":{\"protocolFeeBurner\":\"The address of the approved protocol fee burner that was added\"}},\"ProtocolFeeBurnerRemoved(address)\":{\"details\":\"`sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\",\"params\":{\"protocolFeeBurner\":\"The address of the approved protocol fee burner that was removed\"}},\"ProtocolFeeSwept(address,address,uint256,address)\":{\"details\":\"This can happen if no target token or burner contract was specified, or the fee token is the target token.\",\"params\":{\"feeToken\":\"The token the fee was collected in (also the target token in this case; no swap necessary)\",\"feeTokenAmount\":\"The number of feeTokens\",\"pool\":\"The pool on which the fee was collected\",\"recipient\":\"The recipient of the fee tokens\"}},\"TargetTokenSet(address)\":{\"params\":{\"token\":\"The preferred token for receiving protocol fees\"}}},\"kind\":\"dev\",\"methods\":{\"addProtocolFeeBurner(address)\":{\"details\":\"This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol fee burners.\",\"params\":{\"protocolFeeBurner\":\"The address of an approved protocol fee burner to be added\"}},\"getFeeRecipient()\":{\"details\":\"Can be changed by `setFeeRecipient`.\",\"returns\":{\"_0\":\"feeRecipient The current fee recipient\"}},\"getProtocolFeeController()\":{\"details\":\"It is not immutable in the Vault, so we need to fetch it every time.\",\"returns\":{\"_0\":\"protocolFeeController The address of the current `ProtocolFeeController`\"}},\"getTargetToken()\":{\"details\":\"This is the token the burner will swap all fee tokens for. Can be changed by `setTargetToken`.\",\"returns\":{\"_0\":\"targetToken The current target token\"}},\"isApprovedProtocolFeeBurner(address)\":{\"params\":{\"protocolFeeBurner\":\"The address to be checked\"},\"returns\":{\"_0\":\"isApproved True if the given address is on the approved protocol fee burner allowlist\"}},\"recoverProtocolFees(address[])\":{\"details\":\"It will recover the full balance of all the tokens. This can only be called by the `feeRecipient`.\",\"params\":{\"feeTokens\":\"The tokens to recover\"}},\"removeProtocolFeeBurner(address)\":{\"details\":\"This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol fee burners.\",\"params\":{\"protocolFeeBurner\":\"The address of a protocol fee burner on the allowlist to be removed\"}},\"setFeeRecipient(address)\":{\"details\":\"This is a permissioned function.\",\"params\":{\"feeRecipient\":\"The address of the new fee recipient\"}},\"setTargetToken(address)\":{\"details\":\"This is the token for which the burner will attempt to swap all collected fee tokens.\",\"params\":{\"targetToken\":\"The address of the target token\"}},\"sweepProtocolFeesForToken(address,address,uint256,uint256,address)\":{\"details\":\"This will withdraw the fee token from the controller to this contract, and attempt to convert and forward the proceeds to the fee recipient. Note that this requires governance to grant this contract permission to call `withdrawProtocolFeesForToken` on the `ProtocolFeeController`. This is a permissioned call, since it involves a swap and a permissionless sweep could be triggered at times disadvantageous to the protocol (e.g., flash crashes). The general design is for an off-chain process to periodically collect fees from the Vault and check the protocol fee amounts available for withdrawal. Once these are greater than a threshold, compute the expected proceeds to determine the limits (amount and deadline), then call the sweeper to put in the order with the burner.\",\"params\":{\"deadline\":\"Deadline for the burn operation (swap), after which it will revert\",\"feeBurner\":\"The protocol fee burner to be used (or the zero address to fall back on direct transfer)\",\"feeToken\":\"The fee token in the pool\",\"minTargetTokenAmountOut\":\"The minimum number of target tokens to be received\",\"pool\":\"The pool that incurred the fees we're withdrawing\"}},\"sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)\":{\"params\":{\"deadline\":\"Deadline for the burn operation (swap), after which it will revert\",\"feeBurner\":\"The protocol fee burner to be used (or the zero address to fall back on direct transfer)\",\"feeToken\":\"The fee token in the pool\",\"minTargetTokenAmountOut\":\"The minimum number of target tokens to be received\",\"pool\":\"The pool that incurred the fees we're withdrawing\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BurnerDidNotConsumeAllowance()\":[{\"notice\":\"The burner did not consume its entire allowance.\"}],\"InvalidFeeRecipient()\":[{\"notice\":\"The fee recipient is invalid.\"}],\"InvalidProtocolFeeBurner()\":[{\"notice\":\"The protocol fee burner to be added is invalid.\"}],\"InvalidTargetToken()\":[{\"notice\":\"The target token is invalid.\"}],\"ProtocolFeeBurnerAlreadyAdded(address)\":[{\"notice\":\"Protocol fee burners can only be added to the allowlist once.\"}],\"ProtocolFeeBurnerNotAdded(address)\":[{\"notice\":\"Protocol fee burners must be added to the allowlist before being removed.\"}],\"UnsupportedProtocolFeeBurner(address)\":[{\"notice\":\"The specified fee burner has not been approved.\"}],\"UnwrapIsNotAllowed()\":[{\"notice\":\"Unwrapping is not allowed for the operation.\"}]},\"events\":{\"FeeRecipientSet(address)\":{\"notice\":\"Emitted when the fee recipient address is set or updated.\"},\"ProtocolFeeBurnerAdded(address)\":{\"notice\":\"Emitted when a burner is added to the protocol fee burner allowlist.\"},\"ProtocolFeeBurnerRemoved(address)\":{\"notice\":\"Emitted when a burner is removed from the protocol fee burner allowlist.\"},\"ProtocolFeeSwept(address,address,uint256,address)\":{\"notice\":\"Emitted when a fee token is transferred directly, vs. calling the burner.\"},\"TargetTokenSet(address)\":{\"notice\":\"Emitted when the target token is set or updated.\"}},\"kind\":\"user\",\"methods\":{\"addProtocolFeeBurner(address)\":{\"notice\":\"Add an approved fee burner to the allowlist.\"},\"getFeeRecipient()\":{\"notice\":\"Getter for the current fee recipient.\"},\"getProtocolFeeController()\":{\"notice\":\"Return the address of the current `ProtocolFeeController` from the Vault.\"},\"getTargetToken()\":{\"notice\":\"Getter for the target token.\"},\"isApprovedProtocolFeeBurner(address)\":{\"notice\":\"Check whether a given address corresponds to an approved protocol fee burner.\"},\"recoverProtocolFees(address[])\":{\"notice\":\"Retrieve any tokens \\\"stuck\\\" in this contract (e.g., dust, or failed conversions).\"},\"removeProtocolFeeBurner(address)\":{\"notice\":\"Remove a fee burner from the allowlist.\"},\"setFeeRecipient(address)\":{\"notice\":\"Update the fee recipient address.\"},\"setTargetToken(address)\":{\"notice\":\"Update the address of the target token.\"},\"sweepProtocolFeesForToken(address,address,uint256,uint256,address)\":{\"notice\":\"Withdraw, convert, and forward protocol fees for a given pool and token.\"},\"sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)\":{\"notice\":\"The same as `sweepProtocolFeesForToken`, but for wrapped tokens.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":\"IProtocolFeeSweeper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol":{"ITokenPairRegistry":{"abi":[{"inputs":[{"internalType":"address","name":"buffer","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"EmptyPath","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"address","name":"buffer","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"InvalidBufferPath","type":"error"},{"inputs":[{"internalType":"address","name":"poolOrBuffer","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"InvalidRemovePath","type":"error"},{"inputs":[{"internalType":"address","name":"path","type":"address"}],"name":"InvalidSimplePath","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"pathsLength","type":"uint256"}],"name":"PathAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"pathsLength","type":"uint256"}],"name":"PathRemoved","type":"event"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct SwapPathStep[]","name":"steps","type":"tuple[]"}],"name":"addPath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolOrBuffer","type":"address"}],"name":"addSimplePath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getPathAt","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct SwapPathStep[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getPathCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getPaths","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct SwapPathStep[][]","name":"","type":"tuple[][]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removePathAtIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolOrBuffer","type":"address"}],"name":"removeSimplePath","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addPath(address,(address,address,bool)[])":"815ca70f","addSimplePath(address)":"f335b520","getPathAt(address,address,uint256)":"057074ff","getPathCount(address,address)":"94ee0a3b","getPaths(address,address)":"7c7d370a","removePathAtIndex(address,address,uint256)":"32fffdbd","removeSimplePath(address)":"bc138aa3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"buffer\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyPath\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"buffer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"InvalidBufferPath\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolOrBuffer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"InvalidRemovePath\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"path\",\"type\":\"address\"}],\"name\":\"InvalidSimplePath\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pathsLength\",\"type\":\"uint256\"}],\"name\":\"PathAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pathsLength\",\"type\":\"uint256\"}],\"name\":\"PathRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"}],\"name\":\"addPath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolOrBuffer\",\"type\":\"address\"}],\"name\":\"addSimplePath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getPathAt\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct SwapPathStep[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"getPathCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"getPaths\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct SwapPathStep[][]\",\"name\":\"\",\"type\":\"tuple[][]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"removePathAtIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolOrBuffer\",\"type\":\"address\"}],\"name\":\"removeSimplePath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"BufferNotInitialized(address)\":[{\"params\":{\"buffer\":\"The address of the uninitialized buffer\"}}],\"InvalidBufferPath(address,address,address)\":[{\"params\":{\"buffer\":\"The address of the buffer\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}}],\"InvalidRemovePath(address,address,address)\":[{\"params\":{\"poolOrBuffer\":\"The address of the pool or buffer\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}}],\"InvalidSimplePath(address)\":[{\"params\":{\"path\":\"Pool or buffer address\"}}]},\"events\":{\"PathAdded(address,address,uint256)\":{\"params\":{\"pathsLength\":\"The number of paths added for the token pair\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}},\"PathRemoved(address,address,uint256)\":{\"params\":{\"pathsLength\":\"The number of paths associated with the token pair after the removal\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}}},\"kind\":\"dev\",\"methods\":{\"addPath(address,(address,address,bool)[])\":{\"details\":\"This function is permissioned. Use it to register boosted pool paths with leading / trailing buffer steps. The registry will validate that each step is valid (i.e. each pool step contains the `tokenIn` and `tokenOut`, and each buffer step has the correct wrapped / underlying token).\",\"params\":{\"steps\":\"An array of `SwapPathStep` structs representing the path steps to reach the output token\",\"tokenIn\":\"The address of the input token in the pair\"}},\"addSimplePath(address)\":{\"details\":\"This function is permissioned.\",\"params\":{\"poolOrBuffer\":\"The address of the pool or buffer\"}},\"getPathAt(address,address,uint256)\":{\"details\":\"Safe version; reverts if the index is out of bounds.\",\"params\":{\"index\":\"The index of the path in the list of paths for the token pair\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"},\"returns\":{\"_0\":\"The path at the specified index for the token pair\"}},\"getPathCount(address,address)\":{\"params\":{\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"},\"returns\":{\"_0\":\"The number of paths registered for the token pair\"}},\"getPaths(address,address)\":{\"params\":{\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"},\"returns\":{\"_0\":\"An array of path addresses registered for the token pair\"}},\"removePathAtIndex(address,address,uint256)\":{\"details\":\"This function is permissioned.\",\"params\":{\"index\":\"The index of the path to remove in the list of paths for the token pair\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}},\"removeSimplePath(address)\":{\"details\":\"This function is permissioned.\",\"params\":{\"poolOrBuffer\":\"The address of the pool or buffer\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BufferNotInitialized(address)\":[{\"notice\":\"The given buffer address does not correspond to an initialized buffer.\"}],\"EmptyPath()\":[{\"notice\":\"The path to add cannot be empty.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"Attempted to remove a path at an index beyond the registered length.\"}],\"InvalidBufferPath(address,address,address)\":[{\"notice\":\"The output token does not match the expected address in a wrap or unwrap operation.\"}],\"InvalidRemovePath(address,address,address)\":[{\"notice\":\"The given pool or buffer is not registered as a path for the token pair.\"}],\"InvalidSimplePath(address)\":[{\"notice\":\"The given address is not a valid pool or buffer.\"}]},\"events\":{\"PathAdded(address,address,uint256)\":{\"notice\":\"Emitted when a new token pair is added to the registry.\"},\"PathRemoved(address,address,uint256)\":{\"notice\":\"Emitted when an existing token pair is removed from the registry.\"}},\"kind\":\"user\",\"methods\":{\"addPath(address,(address,address,bool)[])\":{\"notice\":\"Adds an arbitrary path between `tokenIn` and the last step's `tokenOut` to the registry.\"},\"addSimplePath(address)\":{\"notice\":\"Adds a pool or buffer to the registry with all token pairs it supports.\"},\"getPathAt(address,address,uint256)\":{\"notice\":\"Returns the path for a given token pair at a specific index.\"},\"getPathCount(address,address)\":{\"notice\":\"Returns the number of paths registered for a given token pair.\"},\"getPaths(address,address)\":{\"notice\":\"Returns the paths registered for a given token pair.\"},\"removePathAtIndex(address,address,uint256)\":{\"notice\":\"Removes an arbitrary path from the registry at a given index.\"},\"removeSimplePath(address)\":{\"notice\":\"Removes all token paths registered for a given pool or buffer.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol\":\"ITokenPairRegistry\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol\":{\"keccak256\":\"0xd4b893a6f835f8bdf514b99a4bd0ba00cd54d0b575f675abd95efd99742b0fb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3cf813c85596cffa3198175d9d288c643937b6629166832cebd3878d192e04c3\",\"dweb:/ipfs/QmXnK5iKZ9ZJ4sEUqJbTJ2UWpqbbehkwLZT8WraPcnDCDh\"]},\"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol\":{\"keccak256\":\"0x956f0a455276ada0193331696b9e3402d8b32fbacc5a5d7fa659ff4b5a2fc47a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03169eeb5ca1b2594fce7f13fb06e268545044c4501b6d1f98b8e86dff788afc\",\"dweb:/ipfs/QmPLsewKZZoG4QaeQEn1WGsaCKyABsYku4KgLQtumTAyVv\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"IAuthorizer":{"abi":[{"inputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"canPerform(bytes32,address,address)":"9be2a884"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"success\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"notice\":\"Interface to the Vault's permission system.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":\"IAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol":{"IBasePoolFactory":{"abi":[{"inputs":[],"name":"Disabled","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"anonymous":false,"inputs":[],"name":"FactoryDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreated","type":"event"},{"inputs":[],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"constructorArgs","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"getDeploymentAddress","outputs":[{"internalType":"address","name":"deploymentAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolCount","outputs":[{"internalType":"uint256","name":"poolCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPools","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getPoolsInRange","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDisabled","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolFromFactory","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"disable()":"2f2770db","getActionId(bytes4)":"851c1bb3","getDeploymentAddress(bytes,bytes32)":"44f6fec7","getPoolCount()":"8eec5d70","getPools()":"673a2a1f","getPoolsInRange(uint256,uint256)":"53a72f7e","isDisabled()":"6c57f5a9","isPoolFromFactory(address)":"6634b753"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Disabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"FactoryDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"getDeploymentAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getPoolsInRange\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types (e.g., address prediction, tracking deployed pools, and governance-facilitated migration).\",\"events\":{\"PoolCreated(address)\":{\"params\":{\"pool\":\"The address of the new pool\"}}},\"kind\":\"dev\",\"methods\":{\"disable()\":{\"details\":\"Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getDeploymentAddress(bytes,bytes32)\":{\"params\":{\"constructorArgs\":\"The arguments used to create the pool\",\"salt\":\"The salt used to deploy the pool\"},\"returns\":{\"deploymentAddress\":\"The predicted address of the pool, given the salt\"}},\"getPoolCount()\":{\"details\":\"This can then be used to \\\"paginate\\\" calls to `getPools` to control gas costs.\",\"returns\":{\"poolCount\":\"The number of pools deployed by this factory\"}},\"getPools()\":{\"returns\":{\"pools\":\"The list of pools deployed by this factory\"}},\"getPoolsInRange(uint256,uint256)\":{\"details\":\"`start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply stop at the end and return fewer results than requested.\",\"params\":{\"count\":\"The maximum number of pools to return\",\"start\":\"The index of the first pool to return\"},\"returns\":{\"pools\":\"The list of pools deployed by this factory, starting at `start` and returning up to `count` pools\"}},\"isDisabled()\":{\"returns\":{\"success\":\"True if this factory was disabled\"}},\"isPoolFromFactory(address)\":{\"params\":{\"pool\":\"The pool to check\"},\"returns\":{\"success\":\"True if `pool` was created by this factory\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"Disabled()\":[{\"notice\":\"Attempted pool creation after the factory was disabled.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"A pool index is beyond the current bounds of the array.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"events\":{\"FactoryDisabled()\":{\"notice\":\"The factory was disabled by governance.\"},\"PoolCreated(address)\":{\"notice\":\"A pool was deployed.\"}},\"kind\":\"user\",\"methods\":{\"disable()\":{\"notice\":\"Disable the factory, preventing the creation of more pools.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getDeploymentAddress(bytes,bytes32)\":{\"notice\":\"Return the address where a new pool will be deployed, based on the factory address and salt.\"},\"getPoolCount()\":{\"notice\":\"Return the total number of pools deployed by this factory.\"},\"getPools()\":{\"notice\":\"Return the complete list of pools deployed by this factory.\"},\"getPoolsInRange(uint256,uint256)\":{\"notice\":\"Return a subset of the list of pools deployed by this factory.\"},\"isDisabled()\":{\"notice\":\"Check whether this factory has been disabled by governance.\"},\"isPoolFromFactory(address)\":{\"notice\":\"Check whether a pool was deployed by this factory.\"}},\"notice\":\"Base interface for a Balancer Pool Factory.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":\"IBasePoolFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0x6f8c558b0520faae0c4576f30225b5a97821a4cd210878a0ba10c102a2f753f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b40aa7a5ee39fa2e297c684fd29ad45d866f1fc61cd997120a417b02a4d908aa\",\"dweb:/ipfs/QmYP5pQAF7SDLgy3aerqfnc4VwdmfQix2jcQUNL3o83BY9\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"IHooks":{"abi":[{"inputs":[],"name":"getHookFlags","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"hookFlags","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"amountsInScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsInRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsOutRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountInScaled18","type":"uint256"},{"internalType":"uint256","name":"amountOutScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenInBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenOutBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AfterSwapParams","name":"params","type":"tuple"}],"name":"onAfterSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"hookAdjustedAmountCalculatedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"}],"name":"onBeforeSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"}],"name":"onComputeDynamicSwapFeePercentage","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"onRegister","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getHookFlags()":"d77153a7","onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)":"976907cc","onAfterInitialize(uint256[],uint256,bytes)":"38be241d","onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)":"2754888d","onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))":"18b6eb55","onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)":"45421ec7","onBeforeInitialize(uint256[],bytes)":"1c149e28","onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)":"ba5f9f40","onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)":"5211fa77","onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)":"a0e8f5ac","onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))":"0b89f182"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"hookFlags\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsInRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsOutRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"hookAdjustedAmountCalculatedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that they are called in the correct order, and with the correct arguments. To maintain this security, these functions should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`, then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\",\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"hookFlags\":\"Flags indicating which hooks the contract supports\"}},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsInRaw\":\"New amountsInRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsOutRaw\":\"New amountsOutRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"hookAdjustedAmountCalculatedRaw\":\"New amount calculated, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"dynamicSwapFeePercentage\":\"Value of the swap fee percentage, as an 18-decimal FP value\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"success\":\"True if the hook allowed the registration, false otherwise\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"}},\"notice\":\"Interface for pool hooks.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":\"IHooks\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"IProtocolFeeController":{"abi":[{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolRegisteredWithFeeController","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"aggregateFeePercentage","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"collectAggregateFees(address)":"8f4ab9ca","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","isPoolRegistered(address)":"c673bdaf","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolRegisteredWithFeeController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"aggregateFeePercentage\":\"The computed aggregate percentage\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"protocolSwapFeePercentage\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"protocolYieldFeePercentage\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolSwapFeePercentage\":\"The protocol swap fee percentage for the given pool\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage for the given pool\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"notice\":\"Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator yield fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Contract that handles protocol and pool creator fees for the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":\"IProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol":{"IProtocolFeePercentagesProvider":{"abi":[{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"FactoryFeesNotSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"factory","type":"address"}],"name":"PoolNotFromFactory","type":"error"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"UnknownFactory","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"indexed":false,"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"name":"FactorySpecificProtocolFeePercentagesSet","type":"event"},{"inputs":[],"name":"getBalancerContractRegistry","outputs":[{"internalType":"contract IBalancerContractRegistry","name":"balancerContractRegistry","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"getFactorySpecificProtocolFeePercentages","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"name":"setFactorySpecificProtocolFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"setProtocolFeePercentagesForPools","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getBalancerContractRegistry()":"deb27a7a","getFactorySpecificProtocolFeePercentages(address)":"f2c24ec8","getProtocolFeeController()":"85f2dbd4","setFactorySpecificProtocolFeePercentages(address,uint256,uint256)":"00859689","setProtocolFeePercentagesForPools(address,address[])":"344b12d5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"FactoryFeesNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"PoolNotFromFactory\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"UnknownFactory\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"FactorySpecificProtocolFeePercentagesSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getBalancerContractRegistry\",\"outputs\":[{\"internalType\":\"contract IBalancerContractRegistry\",\"name\":\"balancerContractRegistry\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"getFactorySpecificProtocolFeePercentages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setFactorySpecificProtocolFeePercentages\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"setProtocolFeePercentagesForPools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"FactoryFeesNotSet(address)\":[{\"details\":\"This error can by thrown by `getFactorySpecificProtocolFeePercentages` or `setProtocolFeePercentagesForPools`, as both require that valid fee percentages have been set. You need to set the factory fees before you can apply them to pools from that factory.\",\"params\":{\"factory\":\"The factory address where fees have not been set\"}}],\"PoolNotFromFactory(address,address)\":[{\"details\":\"Occurs when one of the pools supplied to `setProtocolFeePercentagesForPools` is not from the given factory.\",\"params\":{\"factory\":\"The address of the factory\",\"pool\":\"The address of the unrecognized pool\"}}],\"UnknownFactory(address)\":[{\"params\":{\"factory\":\"The address of the unknown factory\"}}]},\"events\":{\"FactorySpecificProtocolFeePercentagesSet(address,uint256,uint256)\":{\"params\":{\"factory\":\"The pool factory\",\"protocolSwapFeePercentage\":\"The protocol swap fee percentage intended for pools from this factory\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage intended for pools from this factory\"}}},\"kind\":\"dev\",\"methods\":{\"getBalancerContractRegistry()\":{\"returns\":{\"balancerContractRegistry\":\"The address of the Balancer contract registry\"}},\"getFactorySpecificProtocolFeePercentages(address)\":{\"params\":{\"factory\":\"The address of the factory\"},\"returns\":{\"protocolSwapFeePercentage\":\"The protocol swap fee percentage set for that factory\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage set for that factory\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"The address of the fee controller\"}},\"setFactorySpecificProtocolFeePercentages(address,uint256,uint256)\":{\"details\":\"This is a permissioned call. After the fee percentages have been set, and governance has granted this contract permission to set fee percentages on pools, anyone can call `setProtocolFeePercentagesForPools` to update the fee percentages on a set of pools from that factory.\",\"params\":{\"factory\":\"The address of the factory\",\"protocolSwapFeePercentage\":\"The new protocol swap fee percentage\",\"protocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setProtocolFeePercentagesForPools(address,address[])\":{\"details\":\"This call is permissionless. Anyone can update the fee percentages, once they're set by governance. Note that governance must also grant this contract permission to set protocol fee percentages on pools.\",\"params\":{\"factory\":\"The address of the factory\",\"pools\":\"The pools whose fees will be set according to `setFactorySpecificProtocolFeePercentages`\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"FactoryFeesNotSet(address)\":[{\"notice\":\"`setFactorySpecificProtocolFeePercentages` has not been called for this factory address.\"}],\"PoolNotFromFactory(address,address)\":[{\"notice\":\"The given pool is not from the expected factory.\"}],\"UnknownFactory(address)\":[{\"notice\":\"Fees can only be set on recognized factories (i.e., registered in the `BalancerContractRegistry`).\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The protocol fee controller was configured with an incorrect Vault address.\"}]},\"events\":{\"FactorySpecificProtocolFeePercentagesSet(address,uint256,uint256)\":{\"notice\":\"Protocol fee percentages have been set for the given factory.\"}},\"kind\":\"user\",\"methods\":{\"getBalancerContractRegistry()\":{\"notice\":\"Get the address of the `BalancerContractRegistry` used to validate factory contracts.\"},\"getFactorySpecificProtocolFeePercentages(address)\":{\"notice\":\"Query the protocol fee percentages for a given factory.\"},\"getProtocolFeeController()\":{\"notice\":\"Get the address of the `ProtocolFeeController` used to set fees.\"},\"setFactorySpecificProtocolFeePercentages(address,uint256,uint256)\":{\"notice\":\"Assign intended protocol fee percentages for a given factory.\"},\"setProtocolFeePercentagesForPools(address,address[])\":{\"notice\":\"Update the protocol fees for a set of pools from a given factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol\":\"IProtocolFeePercentagesProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xcb2fa9725bb158d1bd24984d39da7b69628d390740ef13b5578ecab903e0be0b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://fa02bc7433e3c93261e6644049bc2bddb474a7071874eaad4b4150af1afbb43f\",\"dweb:/ipfs/QmR2jYnyT7zg3wWbn4qpUhzpMoYVd9iZ7HsE1FNJqrFtUM\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol":{"IRouter":{"abi":[{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityCustom","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityUnbalanced","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityCustom","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityUnbalanced","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquidityCustom","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"}],"name":"queryRemoveLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquiditySingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapSingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapSingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquidityCustom","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquiditySingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapSingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapSingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityCustom(address,uint256[],uint256,bool,bytes)":"0ca078ec","addLiquidityProportional(address,uint256[],uint256,bool,bytes)":"724dba33","addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)":"72657d17","addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)":"c08bc851","donate(address,uint256[],bool,bytes)":"bf6ee3fd","initialize(address,address[],uint256[],uint256,bool,bytes)":"026b3d95","queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)":"452db952","queryAddLiquidityProportional(address,uint256,address,bytes)":"9de90518","queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)":"1d56798d","queryAddLiquidityUnbalanced(address,uint256[],address,bytes)":"da001f7d","queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)":"c330c7be","queryRemoveLiquidityProportional(address,uint256,address,bytes)":"0f710888","queryRemoveLiquidityRecovery(address,uint256)":"b037ed36","queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)":"23b39241","queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)":"53d0bb98","querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)":"3ebc54e5","querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)":"175d4408","removeLiquidityCustom(address,uint256,uint256[],bool,bytes)":"82bf2b24","removeLiquidityProportional(address,uint256,uint256[],bool,bytes)":"51682750","removeLiquidityRecovery(address,uint256,uint256[])":"08c04793","removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)":"ecb2182c","removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)":"e7326def","swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)":"750283bc","swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)":"94e86ef8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityUnbalanced\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"donate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityUnbalanced\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"}],\"name\":\"queryRemoveLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquiditySingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapSingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapSingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquiditySingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapSingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapSingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addLiquidityCustom(address,uint256[],uint256,bool,bytes)\":{\"details\":\"The given maximum and minimum amounts given may be interpreted as exact depending on the pool type. In any case the caller can expect them to be hard boundaries for the request.\",\"params\":{\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsIn\":\"Actual amounts of tokens added, sorted in token registration order\",\"bptAmountOut\":\"Actual amount of pool tokens received\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityProportional(address,uint256[],uint256,bool,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsIn\":\"Actual amounts of tokens added, sorted in token registration order\"}},\"addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"maxAmountIn\":\"Maximum amount of tokens to be added\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token used to add liquidity\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountIn\":\"Actual amount of tokens added\"}},\"addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountOut\":\"Actual amount of pool tokens received\"}},\"donate(address,uint256[],bool,bytes)\":{\"details\":\"To support donation, the pool config `enableDonation` flag must be set to true.\",\"params\":{\"amountsIn\":\"Amounts of tokens to be donated, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to donate liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"}},\"initialize(address,address[],uint256[],uint256,bool,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokens\":\"Pool tokens, in token registration order\",\"userData\":\"Additional (optional) data sent with the request to add initial liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountOut\":\"Actual amount of pool tokens minted in exchange for initial liquidity\"}},\"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)\":{\"params\":{\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Expected minimum amount of pool tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsIn\":\"Expected amounts of tokens to add, sorted in token registration order\",\"bptAmountOut\":\"Expected amount of pool tokens to receive\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryAddLiquidityProportional(address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsIn\":\"Expected amounts of tokens to add, sorted in token registration order\"}},\"queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Expected exact amount of pool tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token used to add liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountIn\":\"Expected amount of tokens to add\"}},\"queryAddLiquidityUnbalanced(address,uint256[],address,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"bptAmountOut\":\"Expected amount of pool tokens to receive\"}},\"queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)\":{\"params\":{\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"minAmountsOut\":\"Expected minimum amounts of tokens to receive, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\",\"bptAmountIn\":\"Expected amount of pool tokens to burn\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryRemoveLiquidityProportional(address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\"}},\"queryRemoveLiquidityRecovery(address,uint256)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\"}},\"queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountOut\":\"Expected amount of tokens to receive\"}},\"queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountOut\":\"Expected exact amount of tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"bptAmountIn\":\"Expected amount of pool tokens to burn\"}},\"querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountIn\":\"Exact amounts of input tokens to send\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountOut\":\"Calculated amount of output tokens to be received in exchange for the given input tokens\"}},\"querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountOut\":\"Exact amounts of input tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountIn\":\"Calculated amount of input tokens to be sent in exchange for the requested output tokens\"}},\"removeLiquidityCustom(address,uint256,uint256[],bool,bytes)\":{\"details\":\"The given maximum and minimum amounts given may be interpreted as exact depending on the pool type. In any case the caller can expect them to be hard boundaries for the request.\",\"params\":{\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\",\"bptAmountIn\":\"Actual amount of pool tokens burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityProportional(address,uint256,uint256[],bool,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\"}},\"removeLiquidityRecovery(address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\"}},\"removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountOut\":\"Minimum amount of tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountOut\":\"Actual amount of tokens received\"}},\"removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)\":{\"params\":{\"exactAmountOut\":\"Exact amount of tokens to be received\",\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"pool\":\"Address of the liquidity pool\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountIn\":\"Actual amount of pool tokens burned\"}},\"swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap, after which it will revert\",\"exactAmountIn\":\"Exact amounts of input tokens to send\",\"minAmountOut\":\"Minimum amount of tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the swap request\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountOut\":\"Calculated amount of output tokens to be received in exchange for the given input tokens\"}},\"swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap, after which it will revert\",\"exactAmountOut\":\"Exact amounts of input tokens to receive\",\"maxAmountIn\":\"Maximum amount of tokens to be sent\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the swap request\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountIn\":\"Calculated amount of input tokens to be sent in exchange for the requested output tokens\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityCustom(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with a custom request.\"},\"addLiquidityProportional(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with proportional token amounts, receiving an exact amount of pool tokens.\"},\"addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool in a single token, receiving an exact amount of pool tokens.\"},\"addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with arbitrary token amounts.\"},\"donate(address,uint256[],bool,bytes)\":{\"notice\":\"Adds liquidity to a pool by donating the amounts in (no BPT out).\"},\"initialize(address,address[],uint256[],uint256,bool,bytes)\":{\"notice\":\"Initialize a liquidity pool.\"},\"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquidityCustom` operation without actually executing it.\"},\"queryAddLiquidityProportional(address,uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquidityProportional` operation without actually executing it.\"},\"queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquiditySingleTokenExactOut` operation without actually executing it.\"},\"queryAddLiquidityUnbalanced(address,uint256[],address,bytes)\":{\"notice\":\"Queries an `addLiquidityUnbalanced` operation without actually executing it.\"},\"queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)\":{\"notice\":\"Queries a `removeLiquidityCustom` operation without actually executing it.\"},\"queryRemoveLiquidityProportional(address,uint256,address,bytes)\":{\"notice\":\"Queries a `removeLiquidityProportional` operation without actually executing it.\"},\"queryRemoveLiquidityRecovery(address,uint256)\":{\"notice\":\"Queries a `removeLiquidityRecovery` operation without actually executing it.\"},\"queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)\":{\"notice\":\"Queries a `removeLiquiditySingleTokenExactIn` operation without actually executing it.\"},\"queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"notice\":\"Queries a `removeLiquiditySingleTokenExactOut` operation without actually executing it.\"},\"querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)\":{\"notice\":\"Queries a swap operation specifying an exact input token amount without actually executing it.\"},\"querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)\":{\"notice\":\"Queries a swap operation specifying an exact output token amount without actually executing it.\"},\"removeLiquidityCustom(address,uint256,uint256[],bool,bytes)\":{\"notice\":\"Removes liquidity from a pool with a custom request.\"},\"removeLiquidityProportional(address,uint256,uint256[],bool,bytes)\":{\"notice\":\"Removes liquidity with proportional token amounts from a pool, burning an exact pool token amount.\"},\"removeLiquidityRecovery(address,uint256,uint256[])\":{\"notice\":\"Removes liquidity proportionally, burning an exact pool token amount. Only available in Recovery Mode.\"},\"removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)\":{\"notice\":\"Removes liquidity from a pool via a single token, burning an exact pool token amount.\"},\"removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)\":{\"notice\":\"Removes liquidity from a pool via a single token, specifying the exact amount of tokens to receive.\"},\"swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation specifying an exact input token amount.\"},\"swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation specifying an exact output token amount.\"}},\"notice\":\"User-friendly interface to basic Vault operations: swap, add/remove liquidity, and associated queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":\"IRouter\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":{\"keccak256\":\"0x5a0ee9f30170b2df308aa992f331d2070f389c1c7261b166ad8dcf058b079c00\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://89a654106d847701efa4cffbe73d98aea2bc0f9a041a28b4762f127fce48eba3\",\"dweb:/ipfs/QmVZKnQqxmydspv6P6e4137QHiNnhP6J7fzWh9XFuJj6At\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol\":{\"keccak256\":\"0x7a46d0e972ea96fe2190b4975d71fa033fbc65cb596f3c584a47b37b2b58ade1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://56e07234b208282d0751b31eefbed6d48cfacddd9c2dbad7f4fbc55789bdc0ca\",\"dweb:/ipfs/QmTRLGeyZNzKY3S4JUWwDshCMfnY6WMFq2BGD5BozWFAnC\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol":{"IRouterQueries":{"abi":[{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityCustom","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityUnbalanced","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquidityCustom","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"}],"name":"queryRemoveLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquiditySingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapSingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapSingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)":"452db952","queryAddLiquidityProportional(address,uint256,address,bytes)":"9de90518","queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)":"1d56798d","queryAddLiquidityUnbalanced(address,uint256[],address,bytes)":"da001f7d","queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)":"c330c7be","queryRemoveLiquidityProportional(address,uint256,address,bytes)":"0f710888","queryRemoveLiquidityRecovery(address,uint256)":"b037ed36","queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)":"23b39241","queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)":"53d0bb98","querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)":"3ebc54e5","querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)":"175d4408"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityUnbalanced\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"}],\"name\":\"queryRemoveLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquiditySingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapSingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapSingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)\":{\"params\":{\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Expected minimum amount of pool tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsIn\":\"Expected amounts of tokens to add, sorted in token registration order\",\"bptAmountOut\":\"Expected amount of pool tokens to receive\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryAddLiquidityProportional(address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsIn\":\"Expected amounts of tokens to add, sorted in token registration order\"}},\"queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Expected exact amount of pool tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token used to add liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountIn\":\"Expected amount of tokens to add\"}},\"queryAddLiquidityUnbalanced(address,uint256[],address,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"bptAmountOut\":\"Expected amount of pool tokens to receive\"}},\"queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)\":{\"params\":{\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"minAmountsOut\":\"Expected minimum amounts of tokens to receive, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\",\"bptAmountIn\":\"Expected amount of pool tokens to burn\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryRemoveLiquidityProportional(address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\"}},\"queryRemoveLiquidityRecovery(address,uint256)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\"}},\"queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountOut\":\"Expected amount of tokens to receive\"}},\"queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountOut\":\"Expected exact amount of tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"bptAmountIn\":\"Expected amount of pool tokens to burn\"}},\"querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountIn\":\"Exact amounts of input tokens to send\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountOut\":\"Calculated amount of output tokens to be received in exchange for the given input tokens\"}},\"querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountOut\":\"Exact amounts of input tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountIn\":\"Calculated amount of input tokens to be sent in exchange for the requested output tokens\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquidityCustom` operation without actually executing it.\"},\"queryAddLiquidityProportional(address,uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquidityProportional` operation without actually executing it.\"},\"queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquiditySingleTokenExactOut` operation without actually executing it.\"},\"queryAddLiquidityUnbalanced(address,uint256[],address,bytes)\":{\"notice\":\"Queries an `addLiquidityUnbalanced` operation without actually executing it.\"},\"queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)\":{\"notice\":\"Queries a `removeLiquidityCustom` operation without actually executing it.\"},\"queryRemoveLiquidityProportional(address,uint256,address,bytes)\":{\"notice\":\"Queries a `removeLiquidityProportional` operation without actually executing it.\"},\"queryRemoveLiquidityRecovery(address,uint256)\":{\"notice\":\"Queries a `removeLiquidityRecovery` operation without actually executing it.\"},\"queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)\":{\"notice\":\"Queries a `removeLiquiditySingleTokenExactIn` operation without actually executing it.\"},\"queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"notice\":\"Queries a `removeLiquiditySingleTokenExactOut` operation without actually executing it.\"},\"querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)\":{\"notice\":\"Queries a swap operation specifying an exact input token amount without actually executing it.\"},\"querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)\":{\"notice\":\"Queries a swap operation specifying an exact output token amount without actually executing it.\"}},\"notice\":\"User-friendly interface for querying expected results of swap and liquidity operations without execution.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol\":\"IRouterQueries\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol\":{\"keccak256\":\"0x7a46d0e972ea96fe2190b4975d71fa033fbc65cb596f3c584a47b37b2b58ade1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://56e07234b208282d0751b31eefbed6d48cfacddd9c2dbad7f4fbc55789bdc0ca\",\"dweb:/ipfs/QmTRLGeyZNzKY3S4JUWwDshCMfnY6WMFq2BGD5BozWFAnC\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"IVault":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","areBuffersPaused()":"55cba7fe","balanceOf(address,address)":"f7888aec","collectAggregateFees(address)":"8f4ab9ca","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getActionId(bytes4)":"851c1bb3","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getNonzeroDeltaCount()":"db817187","getPauseWindowEndTime()":"8a8d123a","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolMinimumTotalSupply()":"d0965a6b","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","getVaultExtension()":"b9a8effa","getVaultPausedState()":"85c8c015","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","sendTo(address,address,uint256)":"ae639329","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","totalSupply(address)":"e4dc2aa4","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The main Vault address.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"}},\"notice\":\"Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":\"IVault\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"IVaultAdmin":{"abi":[{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","areBuffersPaused()":"55cba7fe","collectAggregateFees(address)":"8f4ab9ca","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getPauseWindowEndTime()":"8a8d123a","getPoolMinimumTotalSupply()":"d0965a6b","getVaultPausedState()":"85c8c015","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations, as two delegate calls add gas to each call. Most of the permissioned calls are here.\",\"kind\":\"dev\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultAdmin` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":\"IVaultAdmin\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"IVaultErrors":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Errors are declared inside an interface (namespace) to improve DX with Typechain.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":\"IVaultErrors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"IVaultEvents":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Events are declared inside an interface (namespace) to improve DX with Typechain.\",\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":\"IVaultEvents\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"IVaultExtension":{"abi":[{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","balanceOf(address,address)":"f7888aec","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getNonzeroDeltaCount()":"db817187","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","totalSupply(address)":"e4dc2aa4","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultExtension` handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and liquidity operations.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultExtension` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":\"IVaultExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"IVaultMain":{"abi":[{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getVaultExtension()":"b9a8effa","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","sendTo(address,address,uint256)":"ae639329","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These are generally \\\"critical path\\\" functions (swap, add/remove liquidity) that are in the main contract for technical or performance reasons.\",\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"}},\"notice\":\"Interface for functions defined on the main Vault contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":\"IVaultMain\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"Authentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be applied to external functions to make them only callable by authorized accounts. Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in multi-contract systems. There are two main uses for it: - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers unique. The contract's own address is a good option. - if the contract belongs to a family that shares action identifiers for the same functions, an identifier shared by the entire family (and no other contract) should be used instead.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Building block for performing access control on external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":\"Authentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"CastingHelpers":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220e9081fce80f38c059235d9524780acd21311a200d48125c1469c6ff45999e06d64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 ADDMOD 0x1F 0xCE DUP1 RETURN DUP13 SDIV SWAP3 CALLDATALOAD 0xD9 MSTORE SELFBALANCE DUP1 0xAC 0xD2 SGT GT LOG2 STOP 0xD4 DUP2 0x25 0xC1 CHAINID SWAP13 PUSH16 0xF45999E06D64736F6C634300081B0033 ","sourceMap":"217:637:34:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220e9081fce80f38c059235d9524780acd21311a200d48125c1469c6ff45999e06d64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 ADDMOD 0x1F 0xCE DUP1 RETURN DUP13 SDIV SWAP3 CALLDATALOAD 0xD9 MSTORE SELFBALANCE DUP1 0xAC 0xD2 SGT GT LOG2 STOP 0xD4 DUP2 0x25 0xC1 CHAINID SWAP13 PUSH16 0xF45999E06D64736F6C634300081B0033 ","sourceMap":"217:637:34:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library of helper functions related to typecasting arrays.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":\"CastingHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"InputHelpers":{"abi":[{"inputs":[],"name":"AllZeroInputs","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"MultipleNonZeroInputs","type":"error"},{"inputs":[],"name":"TokensNotSorted","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220c06cd98b5468c19b7a0b0585eb53f652e511f5829c7f8ba0d9bf6ae0c0f10d4664736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 PUSH13 0xD98B5468C19B7A0B0585EB53F6 MSTORE 0xE5 GT CREATE2 DUP3 SWAP13 PUSH32 0x8BA0D9BF6AE0C0F10D4664736F6C634300081B00330000000000000000000000 ","sourceMap":"202:4350:35:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220c06cd98b5468c19b7a0b0585eb53f652e511f5829c7f8ba0d9bf6ae0c0f10d4664736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 PUSH13 0xD98B5468C19B7A0B0585EB53F6 MSTORE 0xE5 GT CREATE2 DUP3 SWAP13 PUSH32 0x8BA0D9BF6AE0C0F10D4664736F6C634300081B00330000000000000000000000 ","sourceMap":"202:4350:35:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AllZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MultipleNonZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokensNotSorted\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have one non-zero value, corresponding to the token being added or removed. This error results if all entries are zero.\"}],\"MultipleNonZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value, corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\"}],\"TokensNotSorted()\":[{\"details\":\"Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"notice\":\"No valid input was given for a single token operation.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"MultipleNonZeroInputs()\":[{\"notice\":\"More than one non-zero value was given for a single token operation.\"}],\"TokensNotSorted()\":[{\"notice\":\"The tokens supplied to an array argument were not sorted in numerical order.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":\"InputHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol":{"PackedTokenBalance":{"abi":[{"inputs":[],"name":"BalanceOverflow","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220265998fb316c28ac65c9ec2c43c675f998fe014909885d4b69f27704422da06f64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x26 MSIZE SWAP9 0xFB BALANCE PUSH13 0x28AC65C9EC2C43C675F998FE01 BLOBHASH MULMOD DUP9 TSTORE 0x4B PUSH10 0xF27704422DA06F64736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"982:2131:36:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220265998fb316c28ac65c9ec2c43c675f998fe014909885d4b69f27704422da06f64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x26 MSIZE SWAP9 0xFB BALANCE PUSH13 0x28AC65C9EC2C43C675F998FE01 BLOBHASH MULMOD DUP9 TSTORE 0x4B PUSH10 0xF27704422DA06F64736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"982:2131:36:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BalanceOverflow\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"We could use a Solidity struct to pack balance values together in a single storage slot, but unfortunately Solidity only allows for structs to live in either storage, calldata or memory. Because a memory struct still takes up a slot in the stack (to store its memory location), and because the entire balance fits in a single stack slot (two 128 bit values), using memory is strictly less gas performant. Therefore, we do manual packing and unpacking. We could also use custom types now, but given the simplicity here, and the existing EnumerableMap type, it seemed easier to leave it as a bytes32.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"BalanceOverflow()\":[{\"notice\":\"One of the balances is above the maximum value that can be stored.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"This library represents a data structure for packing a token's current raw and derived balances. A derived balance can be the \\\"last\\\" live balance scaled18 of the raw token, or the balance of the wrapped version of the token in a vault buffer, among others.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":\"PackedTokenBalance\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol":{"RevertCodec":{"abi":[{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212208683019c0f17e585a20b0fc05084b8273a26fbb5ee6a380f717073becaabfbfa64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP7 DUP4 ADD SWAP13 0xF OR 0xE5 DUP6 LOG2 SIGNEXTEND 0xF 0xC0 POP DUP5 0xB8 0x27 GASPRICE 0x26 0xFB 0xB5 0xEE PUSH11 0x380F717073BECAABFBFA64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"231:2016:37:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212208683019c0f17e585a20b0fc05084b8273a26fbb5ee6a380f717073becaabfbfa64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP7 DUP4 ADD SWAP13 0xF OR 0xE5 DUP6 LOG2 SIGNEXTEND 0xF 0xC0 POP DUP5 0xB8 0x27 GASPRICE 0x26 0xFB 0xB5 0xEE PUSH11 0x380F717073BECAABFBFA64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"231:2016:37:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Support `quoteAndRevert`: a v2-style query which always reverts, and returns the result in the return data.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":\"RevertCodec\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol":{"Version":{"abi":[{"inputs":[{"internalType":"string","name":"version_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"allocate_memory":{"entryPoint":463,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6080604052346101cb5761041880380380610019816101cf565b928339810190602080828403126101cb5781516001600160401b03928382116101cb570192601f908082860112156101cb5784518481116101b757601f1995610067828501881686016101cf565b928284528583830101116101cb57815f92868093018386015e8301015280519384116101b7575f54926001938481811c911680156101ad575b8282101461019957838111610156575b50809285116001146100f65750839450908392915f946100eb575b50501b915f199060031b1c1916175f555b60405161022390816101f58239f35b015192505f806100cb565b9294849081165f8052845f20945f905b8883831061013c5750505010610124575b505050811b015f556100dc565b01515f1960f88460031b161c191690555f8080610117565b858701518855909601959485019487935090810190610106565b5f8052815f208480880160051c820192848910610190575b0160051c019085905b8281106101855750506100b0565b5f8155018590610177565b9250819261016e565b634e487b7160e01b5f52602260045260245ffd5b90607f16906100a0565b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176101b75760405256fe6080600436101561000e575f80fd5b5f3560e01c6354fd4d5014610021575f80fd5b346101e9575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e9575f5f546001908060011c92600182169384156101e1575b60209384821086146101b4578187528487019587948690821561017b575050600114610124575b505003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090811684019367ffffffffffffffff8511818610176100f7576040938593601f9285875281865251918280928701528686015e5f85828601015201168101030190f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80805285935091907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b828410610163575050508201015f8061008d565b8054848a01860152889550869490930192810161014f565b915093507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168552151560051b8201015f8061008d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b607f16610066565b5f80fdfea26469706673582212208f8983b58d785cd472d19f393d5480e584109f683297852db2ac88152dfc995864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x1CB JUMPI PUSH2 0x418 DUP1 CODESIZE SUB DUP1 PUSH2 0x19 DUP2 PUSH2 0x1CF JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD SWAP1 PUSH1 0x20 DUP1 DUP3 DUP5 SUB SLT PUSH2 0x1CB JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 DUP4 DUP3 GT PUSH2 0x1CB JUMPI ADD SWAP3 PUSH1 0x1F SWAP1 DUP1 DUP3 DUP7 ADD SLT ISZERO PUSH2 0x1CB JUMPI DUP5 MLOAD DUP5 DUP2 GT PUSH2 0x1B7 JUMPI PUSH1 0x1F NOT SWAP6 PUSH2 0x67 DUP3 DUP6 ADD DUP9 AND DUP7 ADD PUSH2 0x1CF JUMP JUMPDEST SWAP3 DUP3 DUP5 MSTORE DUP6 DUP4 DUP4 ADD ADD GT PUSH2 0x1CB JUMPI DUP2 PUSH0 SWAP3 DUP7 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x1B7 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x1AD JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x199 JUMPI DUP4 DUP2 GT PUSH2 0x156 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0xF6 JUMPI POP DUP4 SWAP5 POP SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP5 PUSH2 0xEB JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x223 SWAP1 DUP2 PUSH2 0x1F5 DUP3 CODECOPY RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0xCB JUMP JUMPDEST SWAP3 SWAP5 DUP5 SWAP1 DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x13C JUMPI POP POP POP LT PUSH2 0x124 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0xDC JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x117 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x106 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x190 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP6 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x185 JUMPI POP POP PUSH2 0xB0 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x177 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x16E JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xA0 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x1B7 JUMPI PUSH1 0x40 MSTORE JUMP INVALID PUSH1 0x80 PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0xE JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x54FD4D50 EQ PUSH2 0x21 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1E9 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1E9 JUMPI PUSH0 PUSH0 SLOAD PUSH1 0x1 SWAP1 DUP1 PUSH1 0x1 SHR SWAP3 PUSH1 0x1 DUP3 AND SWAP4 DUP5 ISZERO PUSH2 0x1E1 JUMPI JUMPDEST PUSH1 0x20 SWAP4 DUP5 DUP3 LT DUP7 EQ PUSH2 0x1B4 JUMPI DUP2 DUP8 MSTORE DUP5 DUP8 ADD SWAP6 DUP8 SWAP5 DUP7 SWAP1 DUP3 ISZERO PUSH2 0x17B JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x124 JUMPI JUMPDEST POP POP SUB PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND DUP5 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT DUP2 DUP7 LT OR PUSH2 0xF7 JUMPI PUSH1 0x40 SWAP4 DUP6 SWAP4 PUSH1 0x1F SWAP3 DUP6 DUP8 MSTORE DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP4 POP SWAP2 SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x163 JUMPI POP POP POP DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP7 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x14F JUMP JUMPDEST SWAP2 POP SWAP4 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP6 MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x7F AND PUSH2 0x66 JUMP JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 DUP10 DUP4 0xB5 DUP14 PUSH25 0x5CD472D19F393D5480E584109F683297852DB2AC88152DFC99 PC PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"666:520:38:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;666:520:38;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;666:520:38;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;-1:-1:-1;666:520:38;;;-1:-1:-1;666:520:38;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;-1:-1:-1;666:520:38;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;-1:-1:-1;666:520:38;;-1:-1:-1;666:520:38;;;;;;;;;-1:-1:-1;;666:520:38;;;-1:-1:-1;;;;;666:520:38;;;;;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080600436101561000e575f80fd5b5f3560e01c6354fd4d5014610021575f80fd5b346101e9575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e9575f5f546001908060011c92600182169384156101e1575b60209384821086146101b4578187528487019587948690821561017b575050600114610124575b505003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090811684019367ffffffffffffffff8511818610176100f7576040938593601f9285875281865251918280928701528686015e5f85828601015201168101030190f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80805285935091907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b828410610163575050508201015f8061008d565b8054848a01860152889550869490930192810161014f565b915093507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168552151560051b8201015f8061008d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b607f16610066565b5f80fdfea26469706673582212208f8983b58d785cd472d19f393d5480e584109f683297852db2ac88152dfc995864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0xE JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x54FD4D50 EQ PUSH2 0x21 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1E9 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1E9 JUMPI PUSH0 PUSH0 SLOAD PUSH1 0x1 SWAP1 DUP1 PUSH1 0x1 SHR SWAP3 PUSH1 0x1 DUP3 AND SWAP4 DUP5 ISZERO PUSH2 0x1E1 JUMPI JUMPDEST PUSH1 0x20 SWAP4 DUP5 DUP3 LT DUP7 EQ PUSH2 0x1B4 JUMPI DUP2 DUP8 MSTORE DUP5 DUP8 ADD SWAP6 DUP8 SWAP5 DUP7 SWAP1 DUP3 ISZERO PUSH2 0x17B JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x124 JUMPI JUMPDEST POP POP SUB PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND DUP5 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT DUP2 DUP7 LT OR PUSH2 0xF7 JUMPI PUSH1 0x40 SWAP4 DUP6 SWAP4 PUSH1 0x1F SWAP3 DUP6 DUP8 MSTORE DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP4 POP SWAP2 SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x163 JUMPI POP POP POP DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP7 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x14F JUMP JUMPDEST SWAP2 POP SWAP4 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP6 MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x7F AND PUSH2 0x66 JUMP JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 DUP10 DUP4 0xB5 DUP14 PUSH25 0x5CD472D19F393D5480E584109F683297852DB2AC88152DFC99 PC PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"666:520:38:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;666:520:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"methodIdentifiers":{"version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"version_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The version is set at deployment time and cannot be changed. It would be immutable, but immutable strings are not yet supported. Contracts like factories and pools should have versions. These typically take the form of JSON strings containing detailed information about the deployment. For instance: `{name: 'ChildChainGaugeFactory', version: 2, deployment: '20230316-child-chain-gauge-factory-v2'}`\",\"kind\":\"dev\",\"methods\":{\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"Retrieves a contract's version from storage.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":\"Version\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"FixedPoint":{"abi":[{"inputs":[],"name":"ZeroDivision","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220e9cc622b7f35aaf8f3efa30ad767c4a02aedd5ccde9b7738c8491078c2823d0164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xCC PUSH3 0x2B7F35 0xAA 0xF8 RETURN 0xEF LOG3 EXP 0xD7 PUSH8 0xC4A02AEDD5CCDE9B PUSH24 0x38C8491078C2823D0164736F6C634300081B003300000000 ","sourceMap":"239:5688:39:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220e9cc622b7f35aaf8f3efa30ad767c4a02aedd5ccde9b7738c8491078c2823d0164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xCC PUSH3 0x2B7F35 0xAA 0xF8 RETURN 0xEF LOG3 EXP 0xD7 PUSH8 0xC4A02AEDD5CCDE9B PUSH24 0x38C8491078C2823D0164736F6C634300081B003300000000 ","sourceMap":"239:5688:39:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":\"FixedPoint\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"LogExpMath":{"abi":[{"inputs":[],"name":"BaseOutOfBounds","type":"error"},{"inputs":[],"name":"ExponentOutOfBounds","type":"error"},{"inputs":[],"name":"InvalidExponent","type":"error"},{"inputs":[],"name":"OutOfBounds","type":"error"},{"inputs":[],"name":"ProductOutOfBounds","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220f7e8e3ef4405ba858296891409b167de675961dcc03dc03125ef5eed9c9eb29264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xE8 0xE3 0xEF PREVRANDAO SDIV 0xBA DUP6 DUP3 SWAP7 DUP10 EQ MULMOD 0xB1 PUSH8 0xDE675961DCC03DC0 BALANCE 0x25 0xEF MCOPY 0xED SWAP13 SWAP15 0xB2 SWAP3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"595:21889:40:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220f7e8e3ef4405ba858296891409b167de675961dcc03dc03125ef5eed9c9eb29264736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xE8 0xE3 0xEF PREVRANDAO SDIV 0xBA DUP6 DUP3 SWAP7 DUP10 EQ MULMOD 0xB1 PUSH8 0xDE675961DCC03DC0 BALANCE 0x25 0xEF MCOPY 0xED SWAP13 SWAP15 0xB2 SWAP3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"595:21889:40:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BaseOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExponentOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExponent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProductOutOfBounds\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Fernando Martinelli - @fernandomartinelliSergio Yuhjtman - @sergioyuhjtmanDaniel Fernandez - @dmf7z\",\"details\":\"Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument). Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural exponentiation and logarithm (where the base is Euler's number). All math operations are unchecked in order to save gas.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"BaseOutOfBounds()\":[{\"notice\":\"This error is thrown when a base is not within an acceptable range.\"}],\"ExponentOutOfBounds()\":[{\"notice\":\"This error is thrown when a exponent is not within an acceptable range.\"}],\"InvalidExponent()\":[{\"notice\":\"This error is thrown when an exponent used in the exp function is not within an acceptable range.\"}],\"OutOfBounds()\":[{\"notice\":\"This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\"}],\"ProductOutOfBounds()\":[{\"notice\":\"This error is thrown when the exponent * ln(base) is not within an acceptable range.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":\"LogExpMath\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol":{"EnumerableSet":{"abi":[{"inputs":[],"name":"ElementNotFound","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212200aac404458ad1711bfb2281203a6d085e847bce016f980c2f3cf043c51d8ae8664736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXP 0xAC BLOCKHASH PREVRANDAO PC 0xAD OR GT 0xBF 0xB2 0x28 SLT SUB 0xA6 0xD0 DUP6 0xE8 SELFBALANCE 0xBC 0xE0 AND 0xF9 DUP1 0xC2 RETURN 0xCF DIV EXTCODECOPY MLOAD 0xD8 0xAE DUP7 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1016:5342:41:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212200aac404458ad1711bfb2281203a6d085e847bce016f980c2f3cf043c51d8ae8664736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXP 0xAC BLOCKHASH PREVRANDAO PC 0xAD OR GT 0xBF 0xB2 0x28 SLT SUB 0xA6 0xD0 DUP6 0xE8 SELFBALANCE 0xBC 0xE0 AND 0xF9 DUP1 0xC2 RETURN 0xCF DIV EXTCODECOPY MLOAD 0xD8 0xAE DUP7 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1016:5342:41:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ElementNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"See https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types. Based on the EnumerableSet library from OpenZeppelin Contracts, altered to remove the base private functions that work on bytes32, replacing them with a native implementation for address values, to reduce bytecode size and runtime costs. The `unchecked_at` function was also added, which allows for more gas efficient data reads in some scenarios. Sets have the following properties: - Elements are added, removed, and checked for existence in constant time (O(1)). - Elements are enumerated in O(n). No guarantees are made on the ordering. ``` contract Example { // Add the library methods using EnumerableSet for EnumerableSet.AddressSet; // Declare a set state variable EnumerableSet.AddressSet private mySet; } ```\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ElementNotFound()\":[{\"notice\":\"An element that is not present in the set.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for managing sets of primitive types.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\":\"EnumerableSet\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\":{\"keccak256\":\"0xa981b2a584a81920bc4bd25570ce31f83890bdd41174e11d230e9da179a29468\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5908435bef8ce18bed32900d668530bade6d9207059cbc3ad2460c5e41eba532\",\"dweb:/ipfs/QmZZePBFw5vkoZZNKt9q5PBCFNuGS9LJABAMjAaG6kg6u8\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ReentrancyGuardTransient":{"abi":[{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"NOTE: This variant only works on networks where EIP-1153 is available.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Variant of {ReentrancyGuard} that uses transient storage.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":\"ReentrancyGuardTransient\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"StorageSlotExtension":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212207d1ece238b2a90fbead6c43dfa8046238cc35e0b4dec12d000c4f2cebfef20e164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x1ECE238B2A90FBEAD6C43DFA8046238CC35E0B4DEC12D000C4F2CEBFEF20 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"278:4371:43:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212207d1ece238b2a90fbead6c43dfa8046238cc35e0b4dec12d000c4f2cebfef20e164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x1ECE238B2A90FBEAD6C43DFA8046238CC35E0B4DEC12D000C4F2CEBFEF20 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"278:4371:43:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"TIP: Consider using this library along with {SlotDerivation}.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":\"StorageSlotExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol":{"ERC20TestToken":{"abi":[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"ZeroTransfer","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_string_fromMemory":{"entryPoint":795,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":758,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"60a0604052346102f257610d7d80380380610019816102f6565b92833981016060828203126102f25781516001600160401b03908181116102f2578261004691850161031b565b90602092838501518281116102f25760409161006391870161031b565b9401519360ff851685036102f2578251828111610209576003918254916001958684811c941680156102e8575b888510146102d4578190601f94858111610286575b508890858311600114610228575f9261021d575b50505f1982861b1c191690861b1783555b80519384116102095760049586548681811c911680156101ff575b828210146101ec578381116101a9575b508092851160011461014457509383949184925f95610139575b50501b925f19911b1c19161790555b608052604051610a10908161036d8239608051816104ff0152f35b015193505f8061010f565b92919084601f198116885f52855f20955f905b8983831061018f5750505010610176575b50505050811b01905561011e565b01519060f8845f19921b161c191690555f808080610168565b858701518955909701969485019488935090810190610157565b875f52815f208480880160051c8201928489106101e3575b0160051c019087905b8281106101d85750506100f5565b5f81550187906101ca565b925081926101c1565b602288634e487b7160e01b5f525260245ffd5b90607f16906100e5565b634e487b7160e01b5f52604160045260245ffd5b015190505f806100b9565b90889350601f19831691875f528a5f20925f5b8c8282106102705750508411610259575b505050811b0183556100ca565b01515f1983881b60f8161c191690555f808061024c565b8385015186558c9790950194938401930161023b565b909150855f52885f208580850160051c8201928b86106102cb575b918a91869594930160051c01915b8281106102bd5750506100a5565b5f81558594508a91016102af565b925081926102a1565b634e487b7160e01b5f52602260045260245ffd5b93607f1693610090565b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761020957604052565b81601f820112156102f2578051906001600160401b0382116102095761034a601f8301601f19166020016102f6565b92828452602083830101116102f257815f9260208093018386015e830101529056fe6080604090808252600480361015610015575f80fd5b5f3560e01c91826306fdde031461077557508163095ea7b31461069657816318160ddd1461067857816323b872dd14610523578163313ce567146104e657816340c10f191461040557816370a08231146103c257816395d89b41146102415781639dc29fac14610151578163a9059cbb146100f3575063dd62ed3e14610099575f80fd5b346100ef57806003193601126100ef576020906100b4610888565b6100bc6108ab565b9073ffffffffffffffffffffffffffffffffffffffff8091165f5260018452825f2091165f528252805f20549051908152f35b5f80fd5b82346100ef57806003193601126100ef5761010c610888565b60243592831561012b575060209261012491336108ce565b5160018152f35b7f10cadee3000000000000000000000000000000000000000000000000000000005f525ffd5b9050346100ef57816003193601126100ef5761016b610888565b9173ffffffffffffffffffffffffffffffffffffffff602435931691821561021657825f525f602052815f2054908482106101e35750837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef925f956020938688528785520381872055816002540360025551908152a3005b909291507fe450d38c000000000000000000000000000000000000000000000000000000005f525260245260445260645ffd5b5f907f96c6fd1e0000000000000000000000000000000000000000000000000000000082525260245ffd5b9050346100ef575f6003193601126100ef5781515f928254936001948060011c600182169687156103b8575b602092838310891461038c57869798838897985290815f1461034f57506001146102f2575b50505003601f01601f191682019267ffffffffffffffff8411838510176102c657508291826102c292528261085e565b0390f35b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5f888152929493507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8284106103395750505090601f1992601f92820101918193610292565b805488850187015287945092850192810161031c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016848701525050151560051b830101905081601f601f19610292565b6022887f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b90607f169061026d565b82346100ef5760206003193601126100ef5760209073ffffffffffffffffffffffffffffffffffffffff6103f4610888565b165f525f8252805f20549051908152f35b82346100ef57806003193601126100ef5761041e610888565b9073ffffffffffffffffffffffffffffffffffffffff60243592169283156104bb576002549083820180921161048f57505f927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9260209260025585855284835280852082815401905551908152a3005b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5f907fec442f050000000000000000000000000000000000000000000000000000000082525260245ffd5b82346100ef575f6003193601126100ef576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b82346100ef5760606003193601126100ef5761053d610888565b6105456108ab565b9060443593841561012b5773ffffffffffffffffffffffffffffffffffffffff8216805f526001602052845f20335f52602052845f2054917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83106105b3575b6020866101248988886108ce565b8683106106445781156106195733156105ee575091856101249492602097945f5260018852865f20335f52885203855f2055919481936105a5565b5f907f94280d620000000000000000000000000000000000000000000000000000000082525260245ffd5b5f907fe602df050000000000000000000000000000000000000000000000000000000082525260245ffd5b8287917ffb8f41b2000000000000000000000000000000000000000000000000000000005f5233905260245260445260645ffd5b82346100ef575f6003193601126100ef576020906002549051908152f35b82346100ef57806003193601126100ef576106af610888565b60243590331561074a5773ffffffffffffffffffffffffffffffffffffffff1690811561071f5760209350335f5260018452825f20825f52845280835f205582519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925843392a35160018152f35b5f847f94280d620000000000000000000000000000000000000000000000000000000082525260245ffd5b5f847fe602df050000000000000000000000000000000000000000000000000000000082525260245ffd5b909150346100ef575f6003193601126100ef575f92600354936001948060011c60018216968715610854575b602092838310891461038c57869798838897985290815f1461034f57506001146107f55750505003601f01601f191682019267ffffffffffffffff8411838510176102c657508291826102c292528261085e565b60035f908152929493507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b82841061083e5750505090601f1992601f92820101918193610292565b8054888501870152879450928501928101610821565b90607f16906107a1565b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b73ffffffffffffffffffffffffffffffffffffffff8091169182156109ae571691821561098257815f525f60205260405f205481811061095057817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f5260405f20818154019055604051908152a3565b827fe450d38c000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffdfea2646970667358221220d611776b0f7247c5a2ec86a2487d61ab1ee6f4add9f4210fafcda4f60fdaf6b464736f6c634300081b0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x2F2 JUMPI PUSH2 0xD7D DUP1 CODESIZE SUB DUP1 PUSH2 0x19 DUP2 PUSH2 0x2F6 JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD PUSH1 0x60 DUP3 DUP3 SUB SLT PUSH2 0x2F2 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 DUP2 GT PUSH2 0x2F2 JUMPI DUP3 PUSH2 0x46 SWAP2 DUP6 ADD PUSH2 0x31B JUMP JUMPDEST SWAP1 PUSH1 0x20 SWAP3 DUP4 DUP6 ADD MLOAD DUP3 DUP2 GT PUSH2 0x2F2 JUMPI PUSH1 0x40 SWAP2 PUSH2 0x63 SWAP2 DUP8 ADD PUSH2 0x31B JUMP JUMPDEST SWAP5 ADD MLOAD SWAP4 PUSH1 0xFF DUP6 AND DUP6 SUB PUSH2 0x2F2 JUMPI DUP3 MLOAD DUP3 DUP2 GT PUSH2 0x209 JUMPI PUSH1 0x3 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x1 SWAP6 DUP7 DUP5 DUP2 SHR SWAP5 AND DUP1 ISZERO PUSH2 0x2E8 JUMPI JUMPDEST DUP9 DUP6 LT EQ PUSH2 0x2D4 JUMPI DUP2 SWAP1 PUSH1 0x1F SWAP5 DUP6 DUP2 GT PUSH2 0x286 JUMPI JUMPDEST POP DUP9 SWAP1 DUP6 DUP4 GT PUSH1 0x1 EQ PUSH2 0x228 JUMPI PUSH0 SWAP3 PUSH2 0x21D JUMPI JUMPDEST POP POP PUSH0 NOT DUP3 DUP7 SHL SHR NOT AND SWAP1 DUP7 SHL OR DUP4 SSTORE JUMPDEST DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x209 JUMPI PUSH1 0x4 SWAP6 DUP7 SLOAD DUP7 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x1FF JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x1EC JUMPI DUP4 DUP2 GT PUSH2 0x1A9 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x144 JUMPI POP SWAP4 DUP4 SWAP5 SWAP2 DUP5 SWAP3 PUSH0 SWAP6 PUSH2 0x139 JUMPI JUMPDEST POP POP SHL SWAP3 PUSH0 NOT SWAP2 SHL SHR NOT AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x80 MSTORE PUSH1 0x40 MLOAD PUSH2 0xA10 SWAP1 DUP2 PUSH2 0x36D DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x4FF ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP4 POP PUSH0 DUP1 PUSH2 0x10F JUMP JUMPDEST SWAP3 SWAP2 SWAP1 DUP5 PUSH1 0x1F NOT DUP2 AND DUP9 PUSH0 MSTORE DUP6 PUSH0 KECCAK256 SWAP6 PUSH0 SWAP1 JUMPDEST DUP10 DUP4 DUP4 LT PUSH2 0x18F JUMPI POP POP POP LT PUSH2 0x176 JUMPI JUMPDEST POP POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH2 0x11E JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xF8 DUP5 PUSH0 NOT SWAP3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 DUP1 PUSH2 0x168 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP10 SSTORE SWAP1 SWAP8 ADD SWAP7 SWAP5 DUP6 ADD SWAP5 DUP9 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x157 JUMP JUMPDEST DUP8 PUSH0 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x1E3 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP8 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x1D8 JUMPI POP POP PUSH2 0xF5 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP8 SWAP1 PUSH2 0x1CA JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x1C1 JUMP JUMPDEST PUSH1 0x22 DUP9 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xE5 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0xB9 JUMP JUMPDEST SWAP1 DUP9 SWAP4 POP PUSH1 0x1F NOT DUP4 AND SWAP2 DUP8 PUSH0 MSTORE DUP11 PUSH0 KECCAK256 SWAP3 PUSH0 JUMPDEST DUP13 DUP3 DUP3 LT PUSH2 0x270 JUMPI POP POP DUP5 GT PUSH2 0x259 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP4 SSTORE PUSH2 0xCA JUMP JUMPDEST ADD MLOAD PUSH0 NOT DUP4 DUP9 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x24C JUMP JUMPDEST DUP4 DUP6 ADD MLOAD DUP7 SSTORE DUP13 SWAP8 SWAP1 SWAP6 ADD SWAP5 SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0x23B JUMP JUMPDEST SWAP1 SWAP2 POP DUP6 PUSH0 MSTORE DUP9 PUSH0 KECCAK256 DUP6 DUP1 DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP12 DUP7 LT PUSH2 0x2CB JUMPI JUMPDEST SWAP2 DUP11 SWAP2 DUP7 SWAP6 SWAP5 SWAP4 ADD PUSH1 0x5 SHR ADD SWAP2 JUMPDEST DUP3 DUP2 LT PUSH2 0x2BD JUMPI POP POP PUSH2 0xA5 JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP DUP11 SWAP2 ADD PUSH2 0x2AF JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x2A1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP4 PUSH1 0x7F AND SWAP4 PUSH2 0x90 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x209 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x2F2 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x209 JUMPI PUSH2 0x34A PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x2F6 JUMP JUMPDEST SWAP3 DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x2F2 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x6FDDE03 EQ PUSH2 0x775 JUMPI POP DUP2 PUSH4 0x95EA7B3 EQ PUSH2 0x696 JUMPI DUP2 PUSH4 0x18160DDD EQ PUSH2 0x678 JUMPI DUP2 PUSH4 0x23B872DD EQ PUSH2 0x523 JUMPI DUP2 PUSH4 0x313CE567 EQ PUSH2 0x4E6 JUMPI DUP2 PUSH4 0x40C10F19 EQ PUSH2 0x405 JUMPI DUP2 PUSH4 0x70A08231 EQ PUSH2 0x3C2 JUMPI DUP2 PUSH4 0x95D89B41 EQ PUSH2 0x241 JUMPI DUP2 PUSH4 0x9DC29FAC EQ PUSH2 0x151 JUMPI DUP2 PUSH4 0xA9059CBB EQ PUSH2 0xF3 JUMPI POP PUSH4 0xDD62ED3E EQ PUSH2 0x99 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH2 0xB4 PUSH2 0x888 JUMP JUMPDEST PUSH2 0xBC PUSH2 0x8AB JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x10C PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP3 DUP4 ISZERO PUSH2 0x12B JUMPI POP PUSH1 0x20 SWAP3 PUSH2 0x124 SWAP2 CALLER PUSH2 0x8CE JUMP JUMPDEST MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0x10CADEE300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xEF JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x16B PUSH2 0x888 JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD SWAP4 AND SWAP2 DUP3 ISZERO PUSH2 0x216 JUMPI DUP3 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SLOAD SWAP1 DUP5 DUP3 LT PUSH2 0x1E3 JUMPI POP DUP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH0 SWAP6 PUSH1 0x20 SWAP4 DUP7 DUP9 MSTORE DUP8 DUP6 MSTORE SUB DUP2 DUP8 KECCAK256 SSTORE DUP2 PUSH1 0x2 SLOAD SUB PUSH1 0x2 SSTORE MLOAD SWAP1 DUP2 MSTORE LOG3 STOP JUMPDEST SWAP1 SWAP3 SWAP2 POP PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI DUP2 MLOAD PUSH0 SWAP3 DUP3 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP1 PUSH1 0x1 SHR PUSH1 0x1 DUP3 AND SWAP7 DUP8 ISZERO PUSH2 0x3B8 JUMPI JUMPDEST PUSH1 0x20 SWAP3 DUP4 DUP4 LT DUP10 EQ PUSH2 0x38C JUMPI DUP7 SWAP8 SWAP9 DUP4 DUP9 SWAP8 SWAP9 MSTORE SWAP1 DUP2 PUSH0 EQ PUSH2 0x34F JUMPI POP PUSH1 0x1 EQ PUSH2 0x2F2 JUMPI JUMPDEST POP POP POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT DUP4 DUP6 LT OR PUSH2 0x2C6 JUMPI POP DUP3 SWAP2 DUP3 PUSH2 0x2C2 SWAP3 MSTORE DUP3 PUSH2 0x85E JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP9 DUP2 MSTORE SWAP3 SWAP5 SWAP4 POP PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x339 JUMPI POP POP POP SWAP1 PUSH1 0x1F NOT SWAP3 PUSH1 0x1F SWAP3 DUP3 ADD ADD SWAP2 DUP2 SWAP4 PUSH2 0x292 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP8 ADD MSTORE DUP8 SWAP5 POP SWAP3 DUP6 ADD SWAP3 DUP2 ADD PUSH2 0x31C JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP5 DUP8 ADD MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP2 PUSH1 0x1F PUSH1 0x1F NOT PUSH2 0x292 JUMP JUMPDEST PUSH1 0x22 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x26D JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3F4 PUSH2 0x888 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x41E PUSH2 0x888 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD SWAP3 AND SWAP3 DUP4 ISZERO PUSH2 0x4BB JUMPI PUSH1 0x2 SLOAD SWAP1 DUP4 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x48F JUMPI POP PUSH0 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH1 0x20 SWAP3 PUSH1 0x2 SSTORE DUP6 DUP6 MSTORE DUP5 DUP4 MSTORE DUP1 DUP6 KECCAK256 DUP3 DUP2 SLOAD ADD SWAP1 SSTORE MLOAD SWAP1 DUP2 MSTORE LOG3 STOP JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x53D PUSH2 0x888 JUMP JUMPDEST PUSH2 0x545 PUSH2 0x8AB JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP4 DUP5 ISZERO PUSH2 0x12B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 SLOAD SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 LT PUSH2 0x5B3 JUMPI JUMPDEST PUSH1 0x20 DUP7 PUSH2 0x124 DUP10 DUP9 DUP9 PUSH2 0x8CE JUMP JUMPDEST DUP7 DUP4 LT PUSH2 0x644 JUMPI DUP2 ISZERO PUSH2 0x619 JUMPI CALLER ISZERO PUSH2 0x5EE JUMPI POP SWAP2 DUP6 PUSH2 0x124 SWAP5 SWAP3 PUSH1 0x20 SWAP8 SWAP5 PUSH0 MSTORE PUSH1 0x1 DUP9 MSTORE DUP7 PUSH0 KECCAK256 CALLER PUSH0 MSTORE DUP9 MSTORE SUB DUP6 PUSH0 KECCAK256 SSTORE SWAP2 SWAP5 DUP2 SWAP4 PUSH2 0x5A5 JUMP JUMPDEST PUSH0 SWAP1 PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP8 SWAP2 PUSH32 0xFB8F41B200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x6AF PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 CALLER ISZERO PUSH2 0x74A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 ISZERO PUSH2 0x71F JUMPI PUSH1 0x20 SWAP4 POP CALLER PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP3 PUSH0 KECCAK256 DUP3 PUSH0 MSTORE DUP5 MSTORE DUP1 DUP4 PUSH0 KECCAK256 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP5 CALLER SWAP3 LOG3 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP5 PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP5 PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH0 SWAP3 PUSH1 0x3 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP1 PUSH1 0x1 SHR PUSH1 0x1 DUP3 AND SWAP7 DUP8 ISZERO PUSH2 0x854 JUMPI JUMPDEST PUSH1 0x20 SWAP3 DUP4 DUP4 LT DUP10 EQ PUSH2 0x38C JUMPI DUP7 SWAP8 SWAP9 DUP4 DUP9 SWAP8 SWAP9 MSTORE SWAP1 DUP2 PUSH0 EQ PUSH2 0x34F JUMPI POP PUSH1 0x1 EQ PUSH2 0x7F5 JUMPI POP POP POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT DUP4 DUP6 LT OR PUSH2 0x2C6 JUMPI POP DUP3 SWAP2 DUP3 PUSH2 0x2C2 SWAP3 MSTORE DUP3 PUSH2 0x85E JUMP JUMPDEST PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE SWAP3 SWAP5 SWAP4 POP PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B JUMPDEST DUP3 DUP5 LT PUSH2 0x83E JUMPI POP POP POP SWAP1 PUSH1 0x1F NOT SWAP3 PUSH1 0x1F SWAP3 DUP3 ADD ADD SWAP2 DUP2 SWAP4 PUSH2 0x292 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP8 ADD MSTORE DUP8 SWAP5 POP SWAP3 DUP6 ADD SWAP3 DUP2 ADD PUSH2 0x821 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x7A1 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 PUSH1 0x40 SWAP5 DUP2 DUP6 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP3 DUP9 ADD MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xEF JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xEF JUMPI JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP2 DUP3 ISZERO PUSH2 0x9AE JUMPI AND SWAP2 DUP3 ISZERO PUSH2 0x982 JUMPI DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 DUP2 LT PUSH2 0x950 JUMPI DUP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH1 0x20 SWAP3 DUP6 PUSH0 MSTORE PUSH0 DUP5 MSTORE SUB PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP5 PUSH0 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 DUP2 SLOAD ADD SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG3 JUMP JUMPDEST DUP3 PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD6 GT PUSH24 0x6B0F7247C5A2EC86A2487D61AB1EE6F4ADD9F4210FAFCDA4 0xF6 0xF 0xDA 0xF6 0xB4 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"144:1033:44:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;144:1033:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1648:13:57;144:1033:44;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;-1:-1:-1;144:1033:44;;;;-1:-1:-1;;;;144:1033:44;;;;;;;;;;;;;;;;;;;;1671:17:57;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;;;;;413:21;;144:1033;;;;;;;;413:21;144:1033;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;-1:-1:-1;144:1033:44;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;-1:-1:-1;144:1033:44;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;-1:-1:-1;144:1033:44;;1671:17:57;144:1033:44;;-1:-1:-1;144:1033:44;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;-1:-1:-1;144:1033:44;;-1:-1:-1;144:1033:44;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;-1:-1:-1;144:1033:44;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;-1:-1:-1;;144:1033:44;;;-1:-1:-1;;;;;144:1033:44;;;;;;;;;;:::o;:::-;;;;;;;;;;;;-1:-1:-1;;;;;144:1033:44;;;;;;;;-1:-1:-1;;144:1033:44;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":2219,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_3917":{"entryPoint":2184,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_string":{"entryPoint":2142,"id":null,"parameterSlots":2,"returnSlots":1},"fun_transfer":{"entryPoint":2254,"id":10228,"parameterSlots":3,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"7233":[{"length":32,"start":1279}]},"linkReferences":{},"object":"6080604090808252600480361015610015575f80fd5b5f3560e01c91826306fdde031461077557508163095ea7b31461069657816318160ddd1461067857816323b872dd14610523578163313ce567146104e657816340c10f191461040557816370a08231146103c257816395d89b41146102415781639dc29fac14610151578163a9059cbb146100f3575063dd62ed3e14610099575f80fd5b346100ef57806003193601126100ef576020906100b4610888565b6100bc6108ab565b9073ffffffffffffffffffffffffffffffffffffffff8091165f5260018452825f2091165f528252805f20549051908152f35b5f80fd5b82346100ef57806003193601126100ef5761010c610888565b60243592831561012b575060209261012491336108ce565b5160018152f35b7f10cadee3000000000000000000000000000000000000000000000000000000005f525ffd5b9050346100ef57816003193601126100ef5761016b610888565b9173ffffffffffffffffffffffffffffffffffffffff602435931691821561021657825f525f602052815f2054908482106101e35750837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef925f956020938688528785520381872055816002540360025551908152a3005b909291507fe450d38c000000000000000000000000000000000000000000000000000000005f525260245260445260645ffd5b5f907f96c6fd1e0000000000000000000000000000000000000000000000000000000082525260245ffd5b9050346100ef575f6003193601126100ef5781515f928254936001948060011c600182169687156103b8575b602092838310891461038c57869798838897985290815f1461034f57506001146102f2575b50505003601f01601f191682019267ffffffffffffffff8411838510176102c657508291826102c292528261085e565b0390f35b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5f888152929493507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8284106103395750505090601f1992601f92820101918193610292565b805488850187015287945092850192810161031c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016848701525050151560051b830101905081601f601f19610292565b6022887f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b90607f169061026d565b82346100ef5760206003193601126100ef5760209073ffffffffffffffffffffffffffffffffffffffff6103f4610888565b165f525f8252805f20549051908152f35b82346100ef57806003193601126100ef5761041e610888565b9073ffffffffffffffffffffffffffffffffffffffff60243592169283156104bb576002549083820180921161048f57505f927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9260209260025585855284835280852082815401905551908152a3005b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5f907fec442f050000000000000000000000000000000000000000000000000000000082525260245ffd5b82346100ef575f6003193601126100ef576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b82346100ef5760606003193601126100ef5761053d610888565b6105456108ab565b9060443593841561012b5773ffffffffffffffffffffffffffffffffffffffff8216805f526001602052845f20335f52602052845f2054917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83106105b3575b6020866101248988886108ce565b8683106106445781156106195733156105ee575091856101249492602097945f5260018852865f20335f52885203855f2055919481936105a5565b5f907f94280d620000000000000000000000000000000000000000000000000000000082525260245ffd5b5f907fe602df050000000000000000000000000000000000000000000000000000000082525260245ffd5b8287917ffb8f41b2000000000000000000000000000000000000000000000000000000005f5233905260245260445260645ffd5b82346100ef575f6003193601126100ef576020906002549051908152f35b82346100ef57806003193601126100ef576106af610888565b60243590331561074a5773ffffffffffffffffffffffffffffffffffffffff1690811561071f5760209350335f5260018452825f20825f52845280835f205582519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925843392a35160018152f35b5f847f94280d620000000000000000000000000000000000000000000000000000000082525260245ffd5b5f847fe602df050000000000000000000000000000000000000000000000000000000082525260245ffd5b909150346100ef575f6003193601126100ef575f92600354936001948060011c60018216968715610854575b602092838310891461038c57869798838897985290815f1461034f57506001146107f55750505003601f01601f191682019267ffffffffffffffff8411838510176102c657508291826102c292528261085e565b60035f908152929493507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b82841061083e5750505090601f1992601f92820101918193610292565b8054888501870152879450928501928101610821565b90607f16906107a1565b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b73ffffffffffffffffffffffffffffffffffffffff8091169182156109ae571691821561098257815f525f60205260405f205481811061095057817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f5260405f20818154019055604051908152a3565b827fe450d38c000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffdfea2646970667358221220d611776b0f7247c5a2ec86a2487d61ab1ee6f4add9f4210fafcda4f60fdaf6b464736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x6FDDE03 EQ PUSH2 0x775 JUMPI POP DUP2 PUSH4 0x95EA7B3 EQ PUSH2 0x696 JUMPI DUP2 PUSH4 0x18160DDD EQ PUSH2 0x678 JUMPI DUP2 PUSH4 0x23B872DD EQ PUSH2 0x523 JUMPI DUP2 PUSH4 0x313CE567 EQ PUSH2 0x4E6 JUMPI DUP2 PUSH4 0x40C10F19 EQ PUSH2 0x405 JUMPI DUP2 PUSH4 0x70A08231 EQ PUSH2 0x3C2 JUMPI DUP2 PUSH4 0x95D89B41 EQ PUSH2 0x241 JUMPI DUP2 PUSH4 0x9DC29FAC EQ PUSH2 0x151 JUMPI DUP2 PUSH4 0xA9059CBB EQ PUSH2 0xF3 JUMPI POP PUSH4 0xDD62ED3E EQ PUSH2 0x99 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH2 0xB4 PUSH2 0x888 JUMP JUMPDEST PUSH2 0xBC PUSH2 0x8AB JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x10C PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP3 DUP4 ISZERO PUSH2 0x12B JUMPI POP PUSH1 0x20 SWAP3 PUSH2 0x124 SWAP2 CALLER PUSH2 0x8CE JUMP JUMPDEST MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0x10CADEE300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xEF JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x16B PUSH2 0x888 JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD SWAP4 AND SWAP2 DUP3 ISZERO PUSH2 0x216 JUMPI DUP3 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SLOAD SWAP1 DUP5 DUP3 LT PUSH2 0x1E3 JUMPI POP DUP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH0 SWAP6 PUSH1 0x20 SWAP4 DUP7 DUP9 MSTORE DUP8 DUP6 MSTORE SUB DUP2 DUP8 KECCAK256 SSTORE DUP2 PUSH1 0x2 SLOAD SUB PUSH1 0x2 SSTORE MLOAD SWAP1 DUP2 MSTORE LOG3 STOP JUMPDEST SWAP1 SWAP3 SWAP2 POP PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI DUP2 MLOAD PUSH0 SWAP3 DUP3 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP1 PUSH1 0x1 SHR PUSH1 0x1 DUP3 AND SWAP7 DUP8 ISZERO PUSH2 0x3B8 JUMPI JUMPDEST PUSH1 0x20 SWAP3 DUP4 DUP4 LT DUP10 EQ PUSH2 0x38C JUMPI DUP7 SWAP8 SWAP9 DUP4 DUP9 SWAP8 SWAP9 MSTORE SWAP1 DUP2 PUSH0 EQ PUSH2 0x34F JUMPI POP PUSH1 0x1 EQ PUSH2 0x2F2 JUMPI JUMPDEST POP POP POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT DUP4 DUP6 LT OR PUSH2 0x2C6 JUMPI POP DUP3 SWAP2 DUP3 PUSH2 0x2C2 SWAP3 MSTORE DUP3 PUSH2 0x85E JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP9 DUP2 MSTORE SWAP3 SWAP5 SWAP4 POP PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x339 JUMPI POP POP POP SWAP1 PUSH1 0x1F NOT SWAP3 PUSH1 0x1F SWAP3 DUP3 ADD ADD SWAP2 DUP2 SWAP4 PUSH2 0x292 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP8 ADD MSTORE DUP8 SWAP5 POP SWAP3 DUP6 ADD SWAP3 DUP2 ADD PUSH2 0x31C JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP5 DUP8 ADD MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP2 PUSH1 0x1F PUSH1 0x1F NOT PUSH2 0x292 JUMP JUMPDEST PUSH1 0x22 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x26D JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3F4 PUSH2 0x888 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x41E PUSH2 0x888 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD SWAP3 AND SWAP3 DUP4 ISZERO PUSH2 0x4BB JUMPI PUSH1 0x2 SLOAD SWAP1 DUP4 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x48F JUMPI POP PUSH0 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH1 0x20 SWAP3 PUSH1 0x2 SSTORE DUP6 DUP6 MSTORE DUP5 DUP4 MSTORE DUP1 DUP6 KECCAK256 DUP3 DUP2 SLOAD ADD SWAP1 SSTORE MLOAD SWAP1 DUP2 MSTORE LOG3 STOP JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x53D PUSH2 0x888 JUMP JUMPDEST PUSH2 0x545 PUSH2 0x8AB JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP4 DUP5 ISZERO PUSH2 0x12B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 SLOAD SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 LT PUSH2 0x5B3 JUMPI JUMPDEST PUSH1 0x20 DUP7 PUSH2 0x124 DUP10 DUP9 DUP9 PUSH2 0x8CE JUMP JUMPDEST DUP7 DUP4 LT PUSH2 0x644 JUMPI DUP2 ISZERO PUSH2 0x619 JUMPI CALLER ISZERO PUSH2 0x5EE JUMPI POP SWAP2 DUP6 PUSH2 0x124 SWAP5 SWAP3 PUSH1 0x20 SWAP8 SWAP5 PUSH0 MSTORE PUSH1 0x1 DUP9 MSTORE DUP7 PUSH0 KECCAK256 CALLER PUSH0 MSTORE DUP9 MSTORE SUB DUP6 PUSH0 KECCAK256 SSTORE SWAP2 SWAP5 DUP2 SWAP4 PUSH2 0x5A5 JUMP JUMPDEST PUSH0 SWAP1 PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP8 SWAP2 PUSH32 0xFB8F41B200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x6AF PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 CALLER ISZERO PUSH2 0x74A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 ISZERO PUSH2 0x71F JUMPI PUSH1 0x20 SWAP4 POP CALLER PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP3 PUSH0 KECCAK256 DUP3 PUSH0 MSTORE DUP5 MSTORE DUP1 DUP4 PUSH0 KECCAK256 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP5 CALLER SWAP3 LOG3 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP5 PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP5 PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH0 SWAP3 PUSH1 0x3 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP1 PUSH1 0x1 SHR PUSH1 0x1 DUP3 AND SWAP7 DUP8 ISZERO PUSH2 0x854 JUMPI JUMPDEST PUSH1 0x20 SWAP3 DUP4 DUP4 LT DUP10 EQ PUSH2 0x38C JUMPI DUP7 SWAP8 SWAP9 DUP4 DUP9 SWAP8 SWAP9 MSTORE SWAP1 DUP2 PUSH0 EQ PUSH2 0x34F JUMPI POP PUSH1 0x1 EQ PUSH2 0x7F5 JUMPI POP POP POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT DUP4 DUP6 LT OR PUSH2 0x2C6 JUMPI POP DUP3 SWAP2 DUP3 PUSH2 0x2C2 SWAP3 MSTORE DUP3 PUSH2 0x85E JUMP JUMPDEST PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE SWAP3 SWAP5 SWAP4 POP PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B JUMPDEST DUP3 DUP5 LT PUSH2 0x83E JUMPI POP POP POP SWAP1 PUSH1 0x1F NOT SWAP3 PUSH1 0x1F SWAP3 DUP3 ADD ADD SWAP2 DUP2 SWAP4 PUSH2 0x292 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP8 ADD MSTORE DUP8 SWAP5 POP SWAP3 DUP6 ADD SWAP3 DUP2 ADD PUSH2 0x821 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x7A1 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 PUSH1 0x40 SWAP5 DUP2 DUP6 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP3 DUP9 ADD MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xEF JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xEF JUMPI JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP2 DUP3 ISZERO PUSH2 0x9AE JUMPI AND SWAP2 DUP3 ISZERO PUSH2 0x982 JUMPI DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 DUP2 LT PUSH2 0x950 JUMPI DUP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH1 0x20 SWAP3 DUP6 PUSH0 MSTORE PUSH0 DUP5 MSTORE SUB PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP5 PUSH0 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 DUP2 SLOAD ADD SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG3 JUMP JUMPDEST DUP3 PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD6 GT PUSH24 0x6B0F7247C5A2EC86A2487D61AB1EE6F4ADD9F4210FAFCDA4 0xF6 0xF 0xDA 0xF6 0xB4 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"144:1033:44:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;3561:11:57;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;:::i;:::-;;;837:10;;;833:62;;735:10:64;144:1033:44;735:10:64;3388:5:57;735:10:64;;3388:5:57;:::i;:::-;144:1033:44;;;;;833:62;870:14;144:1033;870:14;144:1033;870:14;144:1033;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;:::i;:::-;;;;;;;7958:21:57;;;7954:89;;144:1033:44;;;;;;;;;;6244:19:57;;;;6240:115;;144:1033:44;;6987:25:57;144:1033:44;;;;;;;;;;;;;;;;;6714:21:57;144:1033:44;;6714:21:57;144:1033:44;;;;;6987:25:57;144:1033:44;6240:115:57;6290:50;;;;;144:1033:44;6290:50:57;144:1033:44;;;;;;;6290:50:57;7954:89;144:1033:44;8002:30:57;;;;144:1033:44;;;8002:30:57;144:1033:44;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;144:1033:44;;;-1:-1:-1;;144:1033:44;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;;-1:-1:-1;144:1033:44;;-1:-1:-1;;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;:::i;:::-;;;;;;;7432:21:57;;;7428:91;;6137:21;144:1033:44;;;;;;;;;;;;;6987:25:57;144:1033:44;;;6137:21:57;144:1033:44;;;;;;;;;;;;;;;;;;;;6987:25:57;144:1033:44;;;;;;;;;;;7428:91:57;144:1033:44;7476:32:57;;;;144:1033:44;;;7476:32:57;144:1033:44;;;;;;-1:-1:-1;;144:1033:44;;;;;;;;;521:9;144:1033;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;:::i;:::-;;;:::i;:::-;;;;1058:10;;;1054:62;;144:1033;;;;;;;;;;;;735:10:64;144:1033:44;;;;;;;;10484:36:57;10503:17;10484:36;;10480:309;;144:1033:44;;4890:5:57;;;;;;:::i;10480:309::-;10540:24;;;10536:130;;9717:19;;9713:89;;735:10:64;9815:21:57;9811:90;;144:1033:44;;;4890:5:57;144:1033:44;;;;;;;;;;;;;735:10:64;144:1033:44;;;;;;;;;10480:309:57;;;;;;9811:90;144:1033:44;9859:31:57;;;;144:1033:44;;;9859:31:57;9713:89;144:1033:44;9759:32:57;;;;144:1033:44;;;9759:32:57;10536:130;10591:60;;;;144:1033:44;10591:60:57;735:10:64;144:1033:44;;;;;;;;10591:60:57;144:1033:44;;;;;;-1:-1:-1;;144:1033:44;;;;;;;2881:12:57;144:1033:44;;;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;:::i;:::-;;;735:10:64;;9717:19:57;9713:89;;144:1033:44;;9815:21:57;;;9811:90;;144:1033:44;735:10:64;;;144:1033:44;;8746:4:57;144:1033:44;;;;;;;;;;;;;;;;;;;;9989:31:57;735:10:64;;9989:31:57;;144:1033:44;8746:4:57;144:1033:44;;;9811:90:57;144:1033:44;9859:31:57;;;;144:1033:44;;;9859:31:57;9713:89;144:1033:44;9759:32:57;;;;144:1033:44;;;9759:32:57;144:1033:44;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;1837:5:57;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;144:1033:44;;;-1:-1:-1;;144:1033:44;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1837:5:57;144:1033:44;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;5297:300:57:-;144:1033:44;;;;5380:18:57;;;5376:86;;144:1033:44;5475:16:57;;;5471:86;;144:1033:44;5997:540:57;144:1033:44;5997:540:57;144:1033:44;;;5997:540:57;144:1033:44;;6244:19:57;;;6240:115;;144:1033:44;6987:25:57;144:1033:44;;;;5997:540:57;144:1033:44;5997:540:57;144:1033:44;;;;5997:540:57;144:1033:44;;;5997:540:57;144:1033:44;;5997:540:57;144:1033:44;;;;;;;;;;;;6987:25:57;5297:300::o;6240:115::-;6290:50;;5997:540;6290:50;;144:1033:44;;;;;;5997:540:57;6290:50;5471:86;5514:32;5396:1;5514:32;5396:1;5514:32;144:1033:44;;5396:1:57;5514:32;5376:86;5421:30;5396:1;5421:30;5396:1;5421:30;144:1033:44;;5396:1:57;5421:30"},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(address,uint256)":"9dc29fac","decimals()":"313ce567","mint(address,uint256)":"40c10f19","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroTransfer\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ZeroTransfer()\":[{\"details\":\"Simulate tokens that don't allow zero transfers.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol\":\"ERC20TestToken\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol\":{\"keccak256\":\"0x6c1d91dd0f44221f140ab22e9e981ef1f9028018428f0c9cb41577e757e1b4b8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c42dce6530450a6476970b6bd0aa8feec8b12c5b3837702f94395ab3157cede7\",\"dweb:/ipfs/QmYb3V9wcMTjdN1XwNdQM4ZHG9EcFvKLZNKDFRyraBW5DQ\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x86b7b71a6aedefdad89b607378eeab1dcc5389b9ea7d17346d08af01d7190994\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1dc2db8d94a21eac8efe03adf574c419b08536409b416057a2b5b95cb772c43c\",\"dweb:/ipfs/QmZfqJCKVU1ScuX2A7s8WZdQEaikwJbDH5JBrBdKTUT4Gu\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol":{"CommonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Base contract for performing access control on external functions within pools.\",\"errors\":{\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":\"CommonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"ProtocolFeeController":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault_","type":"address"},{"internalType":"uint256","name":"initialGlobalSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"initialGlobalYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[],"name":"InvalidMigrationSource","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolRegisteredWithFeeController","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[],"name":"MAX_CREATOR_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFeesHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"migratePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"fun_ensureValidPrecision":{"entryPoint":488,"id":9229,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"60e0346101d057601f612e8638819003918201601f19168301916001600160401b038311848410176101d4578084926060946040528339810103126101d05780516001600160a01b03811691908281036101d057604060208301519201519230608052156101c1578060a05260c0526706f05b59d3b20000908181116101b2576020816100ac7fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d936101e8565b805f55604051908152a181116101a3576020816100e97f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6936101e8565b80600155604051908152a1604051612c5a908161022c823960805181612172015260a051818181610ed6015281816110fc0152612809015260c0518181816102530152818161036e015281816103f8015281816105170152818161058501528181610864015281816108d201528181610c7d01528181610db3015281816115d60152818161177b0152818161191c01528181611a7601528181611be401528181612319015281816125d40152818161275001526129540152f35b6353c24f4760e11b5f5260045ffd5b637e6eb7fb60e01b5f5260045ffd5b630647140b60e51b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b64174876e800808204818102918183041490151715610217570361020857565b63419fd9e760e11b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c9081630252aab514611fa6575080630874327f14611b935780630b8e059b14611b5b5780630ddd60c614611b3a5780631377c16c14611a1b5780632772d156146118385780632e1d388d146119f95780633af52712146118c157806352f125f01461189657806355fb76af146118795780635c15a0b41461183d5780635e32e4e81461183857806371447ea81461169357806371ecc8fb146114ef57806377ff76e71461125b5780637869ee181461123f5780637a2b97dc146111d4578063851c1bb3146111845780638a3c5c69146111205780638d928af8146110dd5780638df44c54146110555780638f4ab9ca146110345780639e95f3fd14610fa8578063a93df2a414610f43578063aaabadc514610e90578063abaa335614610ce7578063b53a70b214610c00578063c673bdaf14610bc3578063cf7b287f14610b5d578063f706144514610b28578063fa399f2a14610392578063fbfa77cf1461034f5763fd267f3914610187575f80fd5b34610323576040600319360112610323576101a0611fda565b602435906101ac6127a4565b6706f05b59d3b200008211610327576101c482612a29565b6101cd81612254565b6101d68261243d565b916040516101e381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600260205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169161027d81612b35565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e92602092610309575b50604051908152a2005b610312906120ac565b5f6102ff565b6040513d5f823e3d90fd5b5f80fd5b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576103ab611fda565b6103b3612746565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f81602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610318575f905f92610acb575b506001600160a01b0383165f52600260205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610ac1575b84610ab1575b61047287612915565b94905f5b8681106108225789896001600160a01b0382165f52600360205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610818575b85610806575b6104c784612915565b96905f5b8881106104d457005b6104de8189612213565b516104ec575b6001016104cb565b986001600160a01b036104ff8b84612213565b51169061050c8b8a612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561080257604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107f7579082916107e0575b506107b357505f99816105c8828b612213565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107385761060e818a612213565b5186156107105761061e9061248f565b6001670de0b6b3a764000061065f8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c8783010401901515026124ac565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f20610693848254612482565b905561069f828b612213565b519081848103116106e3576001936106d9916001600160a01b038c165f52600860205260405f20905f5260205260405f2092038254612482565b90555b90506104e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001918561077d5761074a828b612213565b51906001600160a01b038a165f52600760205260405f20905f5260205261077660405f20918254612482565b90556106dc565b610787828b612213565b51906001600160a01b038a165f52600860205260405f20905f5260205261077660405f20918254612482565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6107e9906120ac565b6107f457808c6105b5565b80fd5b6040513d84823e3d90fd5b5080fd5b905061081281836124bf565b906104be565b82151595506104b8565b61082c8187612213565b5161083a575b600101610476565b6001600160a01b0361084c8284612213565b5116906108598188612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561032357604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857610aa2575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610937868d612213565b51936040519485521692a38815610a27576109528188612213565b518515610710576109629061248f565b6001670de0b6b3a76400006109a3897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b8783010401901515026124ac565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f206109d7848254612482565b90556109e38289612213565b519081848103116106e357600193610a1d916001600160a01b038f165f52600860205260405f20905f5260205260405f2092038254612482565b90555b9050610832565b60019184610a6c57610a398289612213565b51906001600160a01b038d165f52600760205260405f20905f52602052610a6560405f20918254612482565b9055610a20565b610a768289612213565b51906001600160a01b038d165f52600860205260405f20905f52602052610a6560405f20918254612482565b610aab906120ac565b8b6108ff565b50610abc83826124bf565b610469565b8115159450610463565b9150503d805f833e610add81836120dc565b8101906040818303126103235780519167ffffffffffffffff928381116103235781610b0a9184016123dc565b92602083015190811161032357610b2192016123dc565b908361042a565b3461032357604060031936011261032357610b5b610b44611fda565b610b4c611ff0565b90610b5681612500565b61268f565b005b3461032357604060031936011261032357610b76611fda565b610b7e611ff0565b90610b876127a4565b610b9081612915565b915f5b838110610b9c57005b80610bbd6001600160a01b03610bb460019487612213565b51168785612a71565b01610b93565b34610323576020600319360112610323576001600160a01b03610be4611fda565b165f526004602052602060ff60405f2054166040519015158152f35b3461032357606060031936011261032357610c19611fda565b610c21611ff0565b604435906001600160a01b039283831680840361032357604090610c436127a4565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561031857610cb4575b610b5b9350612a71565b6040843d604011610cdf575b81610ccd604093836120dc565b8101031261032357610b5b9350610caa565b3d9150610cc0565b3461032357604060031936011261032357610d00611fda565b60243590610d0c6127a4565b6706f05b59d3b200008211610e6857610d2482612a29565b610d2d81612254565b610d368261243d565b91604051610d4381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610ddd81612b03565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd926020926103095750604051908152a2005b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610318576020925f92610f14575b5060405191168152f35b610f35919250833d8511610f3c575b610f2d81836120dc565b8101906123bd565b9083610f0a565b503d610f23565b3461032357602060031936011261032357600435610f5f6127a4565b6706f05b59d3b200008111610e6857602081610f9b7f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f693612a29565b80600155604051908152a1005b346103235760208060031936011261032357610fc2611fda565b90610fcc82612915565b90610fd6826121c4565b925f946001600160a01b03809116955b848110610fff5760405180610ffb8882612028565b0390f35b600190875f526008845260405f20836110188388612213565b51165f52845260405f205461102d8289612213565b5201610fe6565b3461032357602060031936011261032357610b5b611050611fda565b612254565b34610323576020806003193601126103235761106f611fda565b9061107982612915565b90611083826121c4565b925f946001600160a01b03809116955b8481106110a85760405180610ffb8882612028565b600190875f526007845260405f20836110c18388612213565b51165f52845260405f20546110d68289612213565b5201611093565b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103235760206003193601126103235760043561113c6127a4565b6706f05b59d3b200008111610327576020816111787fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d93612a29565b805f55604051908152a1005b34610323576020600319360112610323576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610323576111cc602091612147565b604051908152f35b34610323576020600319360112610323576001600160a01b036111f5611fda565b165f526003602052602060405f206040519061121082612063565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610323575f6003193601126103235760205f54604051908152f35b3461032357606060031936011261032357611274611fda565b61127c611ff0565b90604435918215159081840361032357611294612746565b6001600160a01b0380931691825f52826020926004845260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146114e457835f9687925b8915611469578483878c5f9b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb985b6113698461243d565b6040519061137682612063565b67ffffffffffffffff809116825260036113e6868401948686528b5f5260028852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a1692161717905561243d565b956040839051976113f689612063565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055604061143a905192839283909291602090604083019483521515910152565b0390a28d518c815290151560208201529081906040820190565b0390a289519586521693a38351928352820152f35b8483878c6001549b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb98611360565b835f549687926112e5565b346103235760208060031936011261032357611509611fda565b61151281612254565b6001600160a01b039182821692835f526002825260405f20906040519161153883612063565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f549381611688575b5061156957005b6115728361243d565b90806040519261158184612063565b168252848201905f8252875f526002865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261160081612b35565b843b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e936103095750604051908152a2005b905083141587611562565b3461032357602080600319360112610323576116ad611fda565b6116b681612254565b6001600160a01b039182821692835f526003825260405f2090604051916116dc83612063565b549167ffffffffffffffff9060ff8285169485835260401c161590858215910152600154938161182d575b5061170e57005b6117178361243d565b90806040519261172684612063565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926117a581612b03565b843b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd936103095750604051908152a2005b905083141587611707565b612006565b34610323576020600319360112610323576001600160a01b0361185e611fda565b165f526002602052602060405f206040519061121082612063565b34610323575f600319360112610323576020600154604051908152f35b3461032357602060031936011261032357610b5b6118b2611fda565b6118bb81612595565b9061268f565b34610323576040600319360112610323576118da611fda565b602435906118e781612500565b670de0ad9b58f1600082116119d1576118ff81612254565b6001600160a01b039182821692835f5260066020528160405f20557f0000000000000000000000000000000000000000000000000000000000000000169161194681612b03565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34926020926103095750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020604051670de0ad9b58f160008152f35b3461032357604060031936011261032357611a34611fda565b60243590611a4181612500565b670de0ad9b58f1600082116119d157611a5981612254565b6001600160a01b039182821692835f5260056020528160405f20557f00000000000000000000000000000000000000000000000000000000000000001691611aa081612b35565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611b2b5750604051908152a2005b611b34906120ac565b846102ff565b346103235760406003193601126103235760206111cc6024356004356124bf565b34610323576020600319360112610323576001600160a01b03611b7c611fda565b165f526005602052602060405f2054604051908152f35b346103235760208060031936011261032357611bad611fda565b906001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528281600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156103185782915f91611f6c575b501692308414611f44571690815f526004815260ff60405f205416611f1857815f526004815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152826004820152604081602481875afa908115610318575f905f92611ef4575b50611cb79061243d565b9060405190611cc582612063565b67ffffffffffffffff80931682528382019015158152845f52600284528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc0000000000000000000000000000000000000000000000000000000083528560048401526040836024818a5afa928315610318575f905f94611ec0575b50611d7b9061243d565b938060405195611d8a87612063565b1685528585019315158452865f526003865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528260048201528181602481875afa5f9181611e8e575b50938291602495611e7c575b50604051948580927f0252aab50000000000000000000000000000000000000000000000000000000082528660048301525afa5f9381611e4d575b50611e3e57005b6006915f525260405f20555f80f35b9093508181813d8311611e75575b611e6581836120dc565b8101031261032357519284611e37565b503d611e5b565b845f526005835260405f205585611dfc565b9150938282813d8311611eb9575b611ea681836120dc565b8101031261032357905190936024611df0565b503d611e9c565b611d7b9450611ee7915060403d604011611eed575b611edf81836120dc565b81019061212a565b93611d71565b503d611ed5565b611cb79250611f12915060403d604011611eed57611edf81836120dc565b91611cad565b507fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250848092503d8311611f9f575b611f8581836120dc565b810103126103235751818116810361032357819085611c15565b503d611f7b565b34610323576020600319360112610323576020906001600160a01b03611fca611fda565b165f526006825260405f20548152f35b600435906001600160a01b038216820361032357565b602435906001600160a01b038216820361032357565b34610323575f6003193601126103235760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b82811061204f575050505090565b835185529381019392810192600101612041565b6040810190811067ffffffffffffffff82111761207f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161207f57604052565b6060810190811067ffffffffffffffff82111761207f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761207f57604052565b5190811515820361032357565b91908260409103126103235761214460208351930161211d565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526121a6816120c0565b51902090565b67ffffffffffffffff811161207f5760051b60200190565b906121ce826121ac565b6121db60405191826120dc565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061220982946121ac565b0190602036910137565b80518210156122275760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b601f9060445f6001600160a01b03926040519360209481868201937ffa399f2a000000000000000000000000000000000000000000000000000000008552166024820152602481526122a5816120c0565b836040519586809581947f48c894910000000000000000000000000000000000000000000000000000000083528a60048401525180918160248501528484015e838382840101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09a8b91011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af180156103185761234a57505050565b3d805f833e61235981836120dc565b810192828285031261032357815167ffffffffffffffff9283821161032357019380601f8601121561032357845192831161207f576123a28460405193601f86011601836120dc565b8282528383860101116103235781835f95018483015e010152565b9081602091031261032357516001600160a01b03811681036103235790565b9080601f83011215610323578151906020916123f7816121ac565b9361240560405195866120dc565b81855260208086019260051b82010192831161032357602001905b82821061242e575050505090565b81518152908301908301612420565b67ffffffffffffffff90818111612452571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b919082018092116106e357565b90670de0b6b3a7640000918281029281840414901517156106e357565b818102929181159184041417156106e357565b906124ec64174876e8009283926124e5670de0b6b3a764000091838303838510026124ac565b0490612482565b048181029181830414901517156106e35790565b6001600160a01b03908161251382612595565b168015612554573303612524575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361032357565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa908115612685575f9161260c575b5001511690565b90506060813d60601161267d575b81612627606093836120dc565b81010312610323578151906060820182811067ffffffffffffffff82111761207f57612673918491825261265a81612581565b845261266860208201612581565b602085015201612581565b828201525f612605565b3d915061261a565b82513d5f823e3d90fd5b9061269982612915565b92905f5b8481106126ab575050505050565b6001906001600160a01b03806126c18386612213565b5116818616805f5260086020818152604094855f20855f528252855f205495866126f3575b505050505050500161269d565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612732878d88612b67565b519586528a1694a45f8080808080806126e6565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361277857565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6127d07fffffffff000000000000000000000000000000000000000000000000000000005f3516612147565b6001600160a01b036040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103185784925f926128f3575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610318575f926128bd575b50501561289557565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116128ec575b6128d481836120dc565b81010312610323576128e59061211d565b5f8061288c565b503d6128ca565b606491925061290e90843d8611610f3c57610f2d81836120dc565b919061283b565b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610318575f9361298b575b5050815190565b909192503d805f833e61299e81836120dc565b810160209182818303126103235780519067ffffffffffffffff821161032357019281601f850112156103235783516129d6816121ac565b946129e460405196876120dc565b818652848087019260051b820101938411610323578401905b838210612a11575050505050905f80612984565b815183811681036103235781529084019084016129fd565b64174876e8008082048181029181830414901517156106e35703612a4957565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612aaa575b505050505050565b82612aef877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612b67565b6040519687521694a45f8080808080612aa2565b6001600160a01b03165f52600360205261214467ffffffffffffffff60405f205416600660205260405f2054906124bf565b6001600160a01b03165f52600260205261214467ffffffffffffffff60405f205416600560205260405f2054906124bf565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208083019182526001600160a01b0394909416602483015260448083019590955293815290925f91612bbf6064826120dc565b519082855af115610318575f513d612c1b57506001600160a01b0381163b155b612be65750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415612bdf56fea2646970667358221220af4d7b7326f3e2d7a8e0ba230faabb4ec5497c4f0aa75f9bd32c889273f022e164736f6c634300081b0033","opcodes":"PUSH1 0xE0 CALLVALUE PUSH2 0x1D0 JUMPI PUSH1 0x1F PUSH2 0x2E86 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x1D4 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x60 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x1D0 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP2 SWAP1 DUP3 DUP2 SUB PUSH2 0x1D0 JUMPI PUSH1 0x40 PUSH1 0x20 DUP4 ADD MLOAD SWAP3 ADD MLOAD SWAP3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0x1C1 JUMPI DUP1 PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE PUSH8 0x6F05B59D3B20000 SWAP1 DUP2 DUP2 GT PUSH2 0x1B2 JUMPI PUSH1 0x20 DUP2 PUSH2 0xAC PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x1E8 JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 DUP2 GT PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP2 PUSH2 0xE9 PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x1E8 JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 PUSH1 0x40 MLOAD PUSH2 0x2C5A SWAP1 DUP2 PUSH2 0x22C DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x2172 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0xED6 ADD MSTORE DUP2 DUP2 PUSH2 0x10FC ADD MSTORE PUSH2 0x2809 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x253 ADD MSTORE DUP2 DUP2 PUSH2 0x36E ADD MSTORE DUP2 DUP2 PUSH2 0x3F8 ADD MSTORE DUP2 DUP2 PUSH2 0x517 ADD MSTORE DUP2 DUP2 PUSH2 0x585 ADD MSTORE DUP2 DUP2 PUSH2 0x864 ADD MSTORE DUP2 DUP2 PUSH2 0x8D2 ADD MSTORE DUP2 DUP2 PUSH2 0xC7D ADD MSTORE DUP2 DUP2 PUSH2 0xDB3 ADD MSTORE DUP2 DUP2 PUSH2 0x15D6 ADD MSTORE DUP2 DUP2 PUSH2 0x177B ADD MSTORE DUP2 DUP2 PUSH2 0x191C ADD MSTORE DUP2 DUP2 PUSH2 0x1A76 ADD MSTORE DUP2 DUP2 PUSH2 0x1BE4 ADD MSTORE DUP2 DUP2 PUSH2 0x2319 ADD MSTORE DUP2 DUP2 PUSH2 0x25D4 ADD MSTORE DUP2 DUP2 PUSH2 0x2750 ADD MSTORE PUSH2 0x2954 ADD MSTORE RETURN JUMPDEST PUSH4 0x53C24F47 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x7E6EB7FB PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x217 JUMPI SUB PUSH2 0x208 JUMPI JUMP JUMPDEST PUSH4 0x419FD9E7 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x1FA6 JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1B93 JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1B5B JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1B3A JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1A1B JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x19F9 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x18C1 JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x1896 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x1879 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x183D JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x1693 JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x14EF JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x125B JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x123F JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x11D4 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1184 JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1120 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x10DD JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0x1055 JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x1034 JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0xFA8 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0xF43 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xE90 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xC00 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xBC3 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xB5D JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB28 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x34F JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x187 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A0 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AC PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x327 JUMPI PUSH2 0x1C4 DUP3 PUSH2 0x2A29 JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH2 0x1D6 DUP3 PUSH2 0x243D JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1E3 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x27D DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x312 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH0 PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x3AB PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0x2746 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0xACB JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAC1 JUMPI JUMPDEST DUP5 PUSH2 0xAB1 JUMPI JUMPDEST PUSH2 0x472 DUP8 PUSH2 0x2915 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x822 JUMPI DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x818 JUMPI JUMPDEST DUP6 PUSH2 0x806 JUMPI JUMPDEST PUSH2 0x4C7 DUP5 PUSH2 0x2915 JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x4D4 JUMPI STOP JUMPDEST PUSH2 0x4DE DUP2 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x4EC JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4CB JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4FF DUP12 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x50C DUP12 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x7F7 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x7E0 JUMPI JUMPDEST POP PUSH2 0x7B3 JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5C8 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x738 JUMPI PUSH2 0x60E DUP2 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x710 JUMPI PUSH2 0x61E SWAP1 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x65F DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24AC JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x693 DUP5 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x69F DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0x6D9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x4E4 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x77D JUMPI PUSH2 0x74A DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6DC JUMP JUMPDEST PUSH2 0x787 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x7E9 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH2 0x7F4 JUMPI DUP1 DUP13 PUSH2 0x5B5 JUMP JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x812 DUP2 DUP4 PUSH2 0x24BF JUMP JUMPDEST SWAP1 PUSH2 0x4BE JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x82C DUP2 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x83A JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x84C DUP3 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x859 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xAA2 JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x937 DUP7 DUP14 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA27 JUMPI PUSH2 0x952 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x710 JUMPI PUSH2 0x962 SWAP1 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9A3 DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24AC JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x9D7 DUP5 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x9E3 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA1D SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA6C JUMPI PUSH2 0xA39 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA20 JUMP JUMPDEST PUSH2 0xA76 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST PUSH2 0xAAB SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP12 PUSH2 0x8FF JUMP JUMPDEST POP PUSH2 0xABC DUP4 DUP3 PUSH2 0x24BF JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x463 JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xADD DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x323 JUMPI DUP2 PUSH2 0xB0A SWAP2 DUP5 ADD PUSH2 0x23DC JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x323 JUMPI PUSH2 0xB21 SWAP3 ADD PUSH2 0x23DC JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x42A JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xB44 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB4C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB56 DUP2 PUSH2 0x2500 JUMP JUMPDEST PUSH2 0x268F JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB76 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB7E PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB87 PUSH2 0x27A4 JUMP JUMPDEST PUSH2 0xB90 DUP2 PUSH2 0x2915 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB9C JUMPI STOP JUMPDEST DUP1 PUSH2 0xBBD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBB4 PUSH1 0x1 SWAP5 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP8 DUP6 PUSH2 0x2A71 JUMP JUMPDEST ADD PUSH2 0xB93 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBE4 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xC19 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xC21 PUSH2 0x1FF0 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xC43 PUSH2 0x27A4 JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xCB4 JUMPI JUMPDEST PUSH2 0xB5B SWAP4 POP PUSH2 0x2A71 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xCDF JUMPI JUMPDEST DUP2 PUSH2 0xCCD PUSH1 0x40 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0xB5B SWAP4 POP PUSH2 0xCAA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCC0 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xD00 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xD0C PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xE68 JUMPI PUSH2 0xD24 DUP3 PUSH2 0x2A29 JUMP JUMPDEST PUSH2 0xD2D DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH2 0xD36 DUP3 PUSH2 0x243D JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xD43 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xDDD DUP2 PUSH2 0x2B03 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xF14 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xF35 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF3C JUMPI JUMPDEST PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x23BD JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xF0A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF23 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xF5F PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xE68 JUMPI PUSH1 0x20 DUP2 PUSH2 0xF9B PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x2A29 JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xFC2 PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0xFCC DUP3 PUSH2 0x2915 JUMP JUMPDEST SWAP1 PUSH2 0xFD6 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0xFFF JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1018 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x102D DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0xFE6 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x1050 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x2254 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x106F PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0x1079 DUP3 PUSH2 0x2915 JUMP JUMPDEST SWAP1 PUSH2 0x1083 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x10A8 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x10C1 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x10D6 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0x1093 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x113C PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x327 JUMPI PUSH1 0x20 DUP2 PUSH2 0x1178 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x2A29 JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI PUSH2 0x11CC PUSH1 0x20 SWAP2 PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x11F5 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1274 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x127C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO SWAP1 DUP2 DUP5 SUB PUSH2 0x323 JUMPI PUSH2 0x1294 PUSH2 0x2746 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP2 DUP3 PUSH0 MSTORE DUP3 PUSH1 0x20 SWAP3 PUSH1 0x4 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x14E4 JUMPI DUP4 PUSH0 SWAP7 DUP8 SWAP3 JUMPDEST DUP10 ISZERO PUSH2 0x1469 JUMPI DUP5 DUP4 DUP8 DUP13 PUSH0 SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 JUMPDEST PUSH2 0x1369 DUP5 PUSH2 0x243D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1376 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x3 PUSH2 0x13E6 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x2 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x243D JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x13F6 DUP10 PUSH2 0x2063 JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 PUSH2 0x143A SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP14 MLOAD DUP13 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 DUP10 MLOAD SWAP6 DUP7 MSTORE AND SWAP4 LOG3 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP5 DUP4 DUP8 DUP13 PUSH1 0x1 SLOAD SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 PUSH2 0x1360 JUMP JUMPDEST DUP4 PUSH0 SLOAD SWAP7 DUP8 SWAP3 PUSH2 0x12E5 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1509 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x1512 DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1538 DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x1688 JUMPI JUMPDEST POP PUSH2 0x1569 JUMPI STOP JUMPDEST PUSH2 0x1572 DUP4 PUSH2 0x243D JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1581 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x1600 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1562 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x16AD PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x16B6 DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x16DC DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x182D JUMPI JUMPDEST POP PUSH2 0x170E JUMPI STOP JUMPDEST PUSH2 0x1717 DUP4 PUSH2 0x243D JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1726 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x17A5 DUP2 PUSH2 0x2B03 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1707 JUMP JUMPDEST PUSH2 0x2006 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x185E PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x18B2 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x18BB DUP2 PUSH2 0x2595 JUMP JUMPDEST SWAP1 PUSH2 0x268F JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x18DA PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x18E7 DUP2 PUSH2 0x2500 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x18FF DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1946 DUP2 PUSH2 0x2B03 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A34 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1A41 DUP2 PUSH2 0x2500 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x1A59 DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1AA0 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1B2B JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1B34 SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP5 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x11CC PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x24BF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1B7C PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1BAD PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1F6C JUMPI JUMPDEST POP AND SWAP3 ADDRESS DUP5 EQ PUSH2 0x1F44 JUMPI AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x1F18 JUMPI DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x1EF4 JUMPI JUMPDEST POP PUSH2 0x1CB7 SWAP1 PUSH2 0x243D JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1CC5 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP5 PUSH0 MSTORE PUSH1 0x2 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP6 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x1EC0 JUMPI JUMPDEST POP PUSH2 0x1D7B SWAP1 PUSH2 0x243D JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1D8A DUP8 PUSH2 0x2063 JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP7 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL PUSH0 SWAP2 DUP2 PUSH2 0x1E8E JUMPI JUMPDEST POP SWAP4 DUP3 SWAP2 PUSH1 0x24 SWAP6 PUSH2 0x1E7C JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL PUSH0 SWAP4 DUP2 PUSH2 0x1E4D JUMPI JUMPDEST POP PUSH2 0x1E3E JUMPI STOP JUMPDEST PUSH1 0x6 SWAP2 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1E75 JUMPI JUMPDEST PUSH2 0x1E65 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD SWAP3 DUP5 PUSH2 0x1E37 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E5B JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP6 PUSH2 0x1DFC JUMP JUMPDEST SWAP2 POP SWAP4 DUP3 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1EB9 JUMPI JUMPDEST PUSH2 0x1EA6 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI SWAP1 MLOAD SWAP1 SWAP4 PUSH1 0x24 PUSH2 0x1DF0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E9C JUMP JUMPDEST PUSH2 0x1D7B SWAP5 POP PUSH2 0x1EE7 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI JUMPDEST PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x212A JUMP JUMPDEST SWAP4 PUSH2 0x1D71 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1ED5 JUMP JUMPDEST PUSH2 0x1CB7 SWAP3 POP PUSH2 0x1F12 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 PUSH2 0x1CAD JUMP JUMPDEST POP PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP5 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1F9F JUMPI JUMPDEST PUSH2 0x1F85 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1C15 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1F7B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1FCA PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x204F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2041 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2144 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x211D JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x21A6 DUP2 PUSH2 0x20C0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x21CE DUP3 PUSH2 0x21AC JUMP JUMPDEST PUSH2 0x21DB PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2209 DUP3 SWAP5 PUSH2 0x21AC JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2227 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1F SWAP1 PUSH1 0x44 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x40 MLOAD SWAP4 PUSH1 0x20 SWAP5 DUP2 DUP7 DUP3 ADD SWAP4 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x22A5 DUP2 PUSH2 0x20C0 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP6 DUP2 SWAP5 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP11 PUSH1 0x4 DUP5 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP6 ADD MSTORE DUP5 DUP5 ADD MCOPY DUP4 DUP4 DUP3 DUP5 ADD ADD MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP11 DUP12 SWAP2 ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0x234A JUMPI POP POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2359 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP3 DUP3 DUP3 DUP6 SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP3 GT PUSH2 0x323 JUMPI ADD SWAP4 DUP1 PUSH1 0x1F DUP7 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP5 MLOAD SWAP3 DUP4 GT PUSH2 0x207F JUMPI PUSH2 0x23A2 DUP5 PUSH1 0x40 MLOAD SWAP4 PUSH1 0x1F DUP7 ADD AND ADD DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x323 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x323 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x23F7 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP4 PUSH2 0x2405 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x323 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x242E JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2420 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2452 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x24EC PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x24E5 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x24AC JUMP JUMPDEST DIV SWAP1 PUSH2 0x2482 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x2513 DUP3 PUSH2 0x2595 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x2554 JUMPI CALLER SUB PUSH2 0x2524 JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2685 JUMPI PUSH0 SWAP2 PUSH2 0x260C JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x267D JUMPI JUMPDEST DUP2 PUSH2 0x2627 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH2 0x2673 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x265A DUP2 PUSH2 0x2581 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x2668 PUSH1 0x20 DUP3 ADD PUSH2 0x2581 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x2581 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x2605 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x261A JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x2699 DUP3 PUSH2 0x2915 JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x26AB JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x26C1 DUP4 DUP7 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x26F3 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x269D JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2732 DUP8 DUP14 DUP9 PUSH2 0x2B67 JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x26E6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x2778 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x27D0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x28F3 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x28BD JUMPI JUMPDEST POP POP ISZERO PUSH2 0x2895 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x28EC JUMPI JUMPDEST PUSH2 0x28D4 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0x28E5 SWAP1 PUSH2 0x211D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x288C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x28CA JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x290E SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xF3C JUMPI PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x283B JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP4 PUSH2 0x298B JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x299E DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP4 MLOAD PUSH2 0x29D6 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP5 PUSH2 0x29E4 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x323 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2A11 JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x2984 JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x29FD JUMP JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SUB PUSH2 0x2A49 JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2AAA JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2AEF DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2B67 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2AA2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24BF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24BF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP1 SWAP3 PUSH0 SWAP2 PUSH2 0x2BBF PUSH1 0x64 DUP3 PUSH2 0x20DC JUMP JUMPDEST MLOAD SWAP1 DUP3 DUP6 GAS CALL ISZERO PUSH2 0x318 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x2C1B JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x2BE6 JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x2BDF JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF 0x4D PUSH28 0x7326F3E2D7A8E0BA230FAABB4EC5497C4F0AA75F9BD32C889273F022 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"3120:30799:46:-:0;;;;;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;-1:-1:-1;;;;;3120:30799:46;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3120:30799:46;;;;;;;;;;;;;;;;;922:4:47;;1347:46:33;;943:28:45;939:79;;1028:14;;;409::48;;4720:5:46;7248:55;;;;7244:127;;3120:30799;7402:20;;25803:68;7402:20;;:::i;:::-;3120:30799;-1:-1:-1;3120:30799:46;;;;;;25803:68;7581:57;;7577:130;;3120:30799;7738:21;;26371:70;7738:21;;:::i;:::-;3120:30799;;;;;;;;26371:70;3120:30799;;;;;;;;1347:46:33;3120:30799:46;;;;;1028:14:45;3120:30799:46;;;;;;;;;;;;;;;409:14:48;3120:30799:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7577:130;7661:35;;;-1:-1:-1;7661:35:46;;-1:-1:-1;7661:35:46;7244:127;7326:34;;;-1:-1:-1;7326:34:46;;-1:-1:-1;7326:34:46;939:79:45;994:13;;;-1:-1:-1;994:13:45;;-1:-1:-1;994:13:45;3120:30799:46;-1:-1:-1;3120:30799:46;;;;;;-1:-1:-1;3120:30799:46;;;;;-1:-1:-1;3120:30799:46;33168:749;19669:4:32;;;;;;;;;;;;;;;;;;33769:74:46;33765:146;;33168:749::o;33765:146::-;33866:34;;;-1:-1:-1;33866:34:46;;-1:-1:-1;33866:34:46;19669:4:32;3120:30799:46;;;-1:-1:-1;19669:4:32;;;;;-1:-1:-1;19669:4:32"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":8176,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_18470":{"entryPoint":8154,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":9601,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":9180,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":8477,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":9149,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_bool_fromMemory":{"entryPoint":8490,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":8232,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_bool":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":8644,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":8620,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":9346,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":9388,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_18620":{"entryPoint":9359,"id":null,"parameterSlots":1,"returnSlots":1},"external_fun_MAX_PROTOCOL_SWAP_FEE_PERCENTAGE":{"entryPoint":8198,"id":null,"parameterSlots":0,"returnSlots":0},"finalize_allocation":{"entryPoint":8412,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_18472":{"entryPoint":8291,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_18605":{"entryPoint":8364,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_42900":{"entryPoint":8384,"id":null,"parameterSlots":1,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":10148,"id":4356,"parameterSlots":0,"returnSlots":0},"fun_collectAggregateFees":{"entryPoint":8788,"id":7768,"parameterSlots":1,"returnSlots":0},"fun_computeAggregateFeePercentage":{"entryPoint":9407,"id":8415,"parameterSlots":2,"returnSlots":1},"fun_ensureCallerIsPoolCreator":{"entryPoint":9472,"id":8451,"parameterSlots":1,"returnSlots":0},"fun_ensureOnlyVault":{"entryPoint":10054,"id":9337,"parameterSlots":0,"returnSlots":0},"fun_ensureValidPrecision":{"entryPoint":10793,"id":9229,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":8519,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage":{"entryPoint":11011,"id":8385,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage_18606":{"entryPoint":11061,"id":8385,"parameterSlots":1,"returnSlots":1},"fun_getPoolCreator":{"entryPoint":9621,"id":8494,"parameterSlots":1,"returnSlots":1},"fun_getPoolTokensAndCount":{"entryPoint":10517,"id":8475,"parameterSlots":1,"returnSlots":2},"fun_safeTransfer":{"entryPoint":11111,"id":10647,"parameterSlots":3,"returnSlots":0},"fun_toUint64":{"entryPoint":9277,"id":15026,"parameterSlots":1,"returnSlots":1},"fun_withdrawPoolCreatorFees":{"entryPoint":9871,"id":9132,"parameterSlots":2,"returnSlots":0},"fun_withdrawProtocolFees":{"entryPoint":10865,"id":9028,"parameterSlots":3,"returnSlots":0},"memory_array_index_access_contract_IERC20_dyn":{"entryPoint":8723,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":8562}],"7358":[{"length":32,"start":3798},{"length":32,"start":4348},{"length":32,"start":10249}],"9299":[{"length":32,"start":595},{"length":32,"start":878},{"length":32,"start":1016},{"length":32,"start":1303},{"length":32,"start":1413},{"length":32,"start":2148},{"length":32,"start":2258},{"length":32,"start":3197},{"length":32,"start":3507},{"length":32,"start":5590},{"length":32,"start":6011},{"length":32,"start":6428},{"length":32,"start":6774},{"length":32,"start":7140},{"length":32,"start":8985},{"length":32,"start":9684},{"length":32,"start":10064},{"length":32,"start":10580}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c9081630252aab514611fa6575080630874327f14611b935780630b8e059b14611b5b5780630ddd60c614611b3a5780631377c16c14611a1b5780632772d156146118385780632e1d388d146119f95780633af52712146118c157806352f125f01461189657806355fb76af146118795780635c15a0b41461183d5780635e32e4e81461183857806371447ea81461169357806371ecc8fb146114ef57806377ff76e71461125b5780637869ee181461123f5780637a2b97dc146111d4578063851c1bb3146111845780638a3c5c69146111205780638d928af8146110dd5780638df44c54146110555780638f4ab9ca146110345780639e95f3fd14610fa8578063a93df2a414610f43578063aaabadc514610e90578063abaa335614610ce7578063b53a70b214610c00578063c673bdaf14610bc3578063cf7b287f14610b5d578063f706144514610b28578063fa399f2a14610392578063fbfa77cf1461034f5763fd267f3914610187575f80fd5b34610323576040600319360112610323576101a0611fda565b602435906101ac6127a4565b6706f05b59d3b200008211610327576101c482612a29565b6101cd81612254565b6101d68261243d565b916040516101e381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600260205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169161027d81612b35565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e92602092610309575b50604051908152a2005b610312906120ac565b5f6102ff565b6040513d5f823e3d90fd5b5f80fd5b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576103ab611fda565b6103b3612746565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f81602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610318575f905f92610acb575b506001600160a01b0383165f52600260205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610ac1575b84610ab1575b61047287612915565b94905f5b8681106108225789896001600160a01b0382165f52600360205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610818575b85610806575b6104c784612915565b96905f5b8881106104d457005b6104de8189612213565b516104ec575b6001016104cb565b986001600160a01b036104ff8b84612213565b51169061050c8b8a612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561080257604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107f7579082916107e0575b506107b357505f99816105c8828b612213565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107385761060e818a612213565b5186156107105761061e9061248f565b6001670de0b6b3a764000061065f8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c8783010401901515026124ac565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f20610693848254612482565b905561069f828b612213565b519081848103116106e3576001936106d9916001600160a01b038c165f52600860205260405f20905f5260205260405f2092038254612482565b90555b90506104e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001918561077d5761074a828b612213565b51906001600160a01b038a165f52600760205260405f20905f5260205261077660405f20918254612482565b90556106dc565b610787828b612213565b51906001600160a01b038a165f52600860205260405f20905f5260205261077660405f20918254612482565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6107e9906120ac565b6107f457808c6105b5565b80fd5b6040513d84823e3d90fd5b5080fd5b905061081281836124bf565b906104be565b82151595506104b8565b61082c8187612213565b5161083a575b600101610476565b6001600160a01b0361084c8284612213565b5116906108598188612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561032357604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857610aa2575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610937868d612213565b51936040519485521692a38815610a27576109528188612213565b518515610710576109629061248f565b6001670de0b6b3a76400006109a3897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b8783010401901515026124ac565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f206109d7848254612482565b90556109e38289612213565b519081848103116106e357600193610a1d916001600160a01b038f165f52600860205260405f20905f5260205260405f2092038254612482565b90555b9050610832565b60019184610a6c57610a398289612213565b51906001600160a01b038d165f52600760205260405f20905f52602052610a6560405f20918254612482565b9055610a20565b610a768289612213565b51906001600160a01b038d165f52600860205260405f20905f52602052610a6560405f20918254612482565b610aab906120ac565b8b6108ff565b50610abc83826124bf565b610469565b8115159450610463565b9150503d805f833e610add81836120dc565b8101906040818303126103235780519167ffffffffffffffff928381116103235781610b0a9184016123dc565b92602083015190811161032357610b2192016123dc565b908361042a565b3461032357604060031936011261032357610b5b610b44611fda565b610b4c611ff0565b90610b5681612500565b61268f565b005b3461032357604060031936011261032357610b76611fda565b610b7e611ff0565b90610b876127a4565b610b9081612915565b915f5b838110610b9c57005b80610bbd6001600160a01b03610bb460019487612213565b51168785612a71565b01610b93565b34610323576020600319360112610323576001600160a01b03610be4611fda565b165f526004602052602060ff60405f2054166040519015158152f35b3461032357606060031936011261032357610c19611fda565b610c21611ff0565b604435906001600160a01b039283831680840361032357604090610c436127a4565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561031857610cb4575b610b5b9350612a71565b6040843d604011610cdf575b81610ccd604093836120dc565b8101031261032357610b5b9350610caa565b3d9150610cc0565b3461032357604060031936011261032357610d00611fda565b60243590610d0c6127a4565b6706f05b59d3b200008211610e6857610d2482612a29565b610d2d81612254565b610d368261243d565b91604051610d4381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610ddd81612b03565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd926020926103095750604051908152a2005b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610318576020925f92610f14575b5060405191168152f35b610f35919250833d8511610f3c575b610f2d81836120dc565b8101906123bd565b9083610f0a565b503d610f23565b3461032357602060031936011261032357600435610f5f6127a4565b6706f05b59d3b200008111610e6857602081610f9b7f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f693612a29565b80600155604051908152a1005b346103235760208060031936011261032357610fc2611fda565b90610fcc82612915565b90610fd6826121c4565b925f946001600160a01b03809116955b848110610fff5760405180610ffb8882612028565b0390f35b600190875f526008845260405f20836110188388612213565b51165f52845260405f205461102d8289612213565b5201610fe6565b3461032357602060031936011261032357610b5b611050611fda565b612254565b34610323576020806003193601126103235761106f611fda565b9061107982612915565b90611083826121c4565b925f946001600160a01b03809116955b8481106110a85760405180610ffb8882612028565b600190875f526007845260405f20836110c18388612213565b51165f52845260405f20546110d68289612213565b5201611093565b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103235760206003193601126103235760043561113c6127a4565b6706f05b59d3b200008111610327576020816111787fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d93612a29565b805f55604051908152a1005b34610323576020600319360112610323576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610323576111cc602091612147565b604051908152f35b34610323576020600319360112610323576001600160a01b036111f5611fda565b165f526003602052602060405f206040519061121082612063565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610323575f6003193601126103235760205f54604051908152f35b3461032357606060031936011261032357611274611fda565b61127c611ff0565b90604435918215159081840361032357611294612746565b6001600160a01b0380931691825f52826020926004845260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146114e457835f9687925b8915611469578483878c5f9b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb985b6113698461243d565b6040519061137682612063565b67ffffffffffffffff809116825260036113e6868401948686528b5f5260028852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a1692161717905561243d565b956040839051976113f689612063565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055604061143a905192839283909291602090604083019483521515910152565b0390a28d518c815290151560208201529081906040820190565b0390a289519586521693a38351928352820152f35b8483878c6001549b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb98611360565b835f549687926112e5565b346103235760208060031936011261032357611509611fda565b61151281612254565b6001600160a01b039182821692835f526002825260405f20906040519161153883612063565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f549381611688575b5061156957005b6115728361243d565b90806040519261158184612063565b168252848201905f8252875f526002865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261160081612b35565b843b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e936103095750604051908152a2005b905083141587611562565b3461032357602080600319360112610323576116ad611fda565b6116b681612254565b6001600160a01b039182821692835f526003825260405f2090604051916116dc83612063565b549167ffffffffffffffff9060ff8285169485835260401c161590858215910152600154938161182d575b5061170e57005b6117178361243d565b90806040519261172684612063565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926117a581612b03565b843b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd936103095750604051908152a2005b905083141587611707565b612006565b34610323576020600319360112610323576001600160a01b0361185e611fda565b165f526002602052602060405f206040519061121082612063565b34610323575f600319360112610323576020600154604051908152f35b3461032357602060031936011261032357610b5b6118b2611fda565b6118bb81612595565b9061268f565b34610323576040600319360112610323576118da611fda565b602435906118e781612500565b670de0ad9b58f1600082116119d1576118ff81612254565b6001600160a01b039182821692835f5260066020528160405f20557f0000000000000000000000000000000000000000000000000000000000000000169161194681612b03565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34926020926103095750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020604051670de0ad9b58f160008152f35b3461032357604060031936011261032357611a34611fda565b60243590611a4181612500565b670de0ad9b58f1600082116119d157611a5981612254565b6001600160a01b039182821692835f5260056020528160405f20557f00000000000000000000000000000000000000000000000000000000000000001691611aa081612b35565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611b2b5750604051908152a2005b611b34906120ac565b846102ff565b346103235760406003193601126103235760206111cc6024356004356124bf565b34610323576020600319360112610323576001600160a01b03611b7c611fda565b165f526005602052602060405f2054604051908152f35b346103235760208060031936011261032357611bad611fda565b906001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528281600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156103185782915f91611f6c575b501692308414611f44571690815f526004815260ff60405f205416611f1857815f526004815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152826004820152604081602481875afa908115610318575f905f92611ef4575b50611cb79061243d565b9060405190611cc582612063565b67ffffffffffffffff80931682528382019015158152845f52600284528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc0000000000000000000000000000000000000000000000000000000083528560048401526040836024818a5afa928315610318575f905f94611ec0575b50611d7b9061243d565b938060405195611d8a87612063565b1685528585019315158452865f526003865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528260048201528181602481875afa5f9181611e8e575b50938291602495611e7c575b50604051948580927f0252aab50000000000000000000000000000000000000000000000000000000082528660048301525afa5f9381611e4d575b50611e3e57005b6006915f525260405f20555f80f35b9093508181813d8311611e75575b611e6581836120dc565b8101031261032357519284611e37565b503d611e5b565b845f526005835260405f205585611dfc565b9150938282813d8311611eb9575b611ea681836120dc565b8101031261032357905190936024611df0565b503d611e9c565b611d7b9450611ee7915060403d604011611eed575b611edf81836120dc565b81019061212a565b93611d71565b503d611ed5565b611cb79250611f12915060403d604011611eed57611edf81836120dc565b91611cad565b507fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250848092503d8311611f9f575b611f8581836120dc565b810103126103235751818116810361032357819085611c15565b503d611f7b565b34610323576020600319360112610323576020906001600160a01b03611fca611fda565b165f526006825260405f20548152f35b600435906001600160a01b038216820361032357565b602435906001600160a01b038216820361032357565b34610323575f6003193601126103235760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b82811061204f575050505090565b835185529381019392810192600101612041565b6040810190811067ffffffffffffffff82111761207f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161207f57604052565b6060810190811067ffffffffffffffff82111761207f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761207f57604052565b5190811515820361032357565b91908260409103126103235761214460208351930161211d565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526121a6816120c0565b51902090565b67ffffffffffffffff811161207f5760051b60200190565b906121ce826121ac565b6121db60405191826120dc565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061220982946121ac565b0190602036910137565b80518210156122275760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b601f9060445f6001600160a01b03926040519360209481868201937ffa399f2a000000000000000000000000000000000000000000000000000000008552166024820152602481526122a5816120c0565b836040519586809581947f48c894910000000000000000000000000000000000000000000000000000000083528a60048401525180918160248501528484015e838382840101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09a8b91011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af180156103185761234a57505050565b3d805f833e61235981836120dc565b810192828285031261032357815167ffffffffffffffff9283821161032357019380601f8601121561032357845192831161207f576123a28460405193601f86011601836120dc565b8282528383860101116103235781835f95018483015e010152565b9081602091031261032357516001600160a01b03811681036103235790565b9080601f83011215610323578151906020916123f7816121ac565b9361240560405195866120dc565b81855260208086019260051b82010192831161032357602001905b82821061242e575050505090565b81518152908301908301612420565b67ffffffffffffffff90818111612452571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b919082018092116106e357565b90670de0b6b3a7640000918281029281840414901517156106e357565b818102929181159184041417156106e357565b906124ec64174876e8009283926124e5670de0b6b3a764000091838303838510026124ac565b0490612482565b048181029181830414901517156106e35790565b6001600160a01b03908161251382612595565b168015612554573303612524575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361032357565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa908115612685575f9161260c575b5001511690565b90506060813d60601161267d575b81612627606093836120dc565b81010312610323578151906060820182811067ffffffffffffffff82111761207f57612673918491825261265a81612581565b845261266860208201612581565b602085015201612581565b828201525f612605565b3d915061261a565b82513d5f823e3d90fd5b9061269982612915565b92905f5b8481106126ab575050505050565b6001906001600160a01b03806126c18386612213565b5116818616805f5260086020818152604094855f20855f528252855f205495866126f3575b505050505050500161269d565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612732878d88612b67565b519586528a1694a45f8080808080806126e6565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361277857565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6127d07fffffffff000000000000000000000000000000000000000000000000000000005f3516612147565b6001600160a01b036040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103185784925f926128f3575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610318575f926128bd575b50501561289557565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116128ec575b6128d481836120dc565b81010312610323576128e59061211d565b5f8061288c565b503d6128ca565b606491925061290e90843d8611610f3c57610f2d81836120dc565b919061283b565b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610318575f9361298b575b5050815190565b909192503d805f833e61299e81836120dc565b810160209182818303126103235780519067ffffffffffffffff821161032357019281601f850112156103235783516129d6816121ac565b946129e460405196876120dc565b818652848087019260051b820101938411610323578401905b838210612a11575050505050905f80612984565b815183811681036103235781529084019084016129fd565b64174876e8008082048181029181830414901517156106e35703612a4957565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612aaa575b505050505050565b82612aef877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612b67565b6040519687521694a45f8080808080612aa2565b6001600160a01b03165f52600360205261214467ffffffffffffffff60405f205416600660205260405f2054906124bf565b6001600160a01b03165f52600260205261214467ffffffffffffffff60405f205416600560205260405f2054906124bf565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208083019182526001600160a01b0394909416602483015260448083019590955293815290925f91612bbf6064826120dc565b519082855af115610318575f513d612c1b57506001600160a01b0381163b155b612be65750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415612bdf56fea2646970667358221220af4d7b7326f3e2d7a8e0ba230faabb4ec5497c4f0aa75f9bd32c889273f022e164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x1FA6 JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1B93 JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1B5B JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1B3A JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1A1B JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x19F9 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x18C1 JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x1896 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x1879 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x183D JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x1693 JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x14EF JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x125B JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x123F JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x11D4 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1184 JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1120 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x10DD JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0x1055 JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x1034 JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0xFA8 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0xF43 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xE90 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xC00 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xBC3 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xB5D JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB28 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x34F JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x187 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A0 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AC PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x327 JUMPI PUSH2 0x1C4 DUP3 PUSH2 0x2A29 JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH2 0x1D6 DUP3 PUSH2 0x243D JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1E3 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x27D DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x312 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH0 PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x3AB PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0x2746 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0xACB JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAC1 JUMPI JUMPDEST DUP5 PUSH2 0xAB1 JUMPI JUMPDEST PUSH2 0x472 DUP8 PUSH2 0x2915 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x822 JUMPI DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x818 JUMPI JUMPDEST DUP6 PUSH2 0x806 JUMPI JUMPDEST PUSH2 0x4C7 DUP5 PUSH2 0x2915 JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x4D4 JUMPI STOP JUMPDEST PUSH2 0x4DE DUP2 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x4EC JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4CB JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4FF DUP12 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x50C DUP12 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x7F7 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x7E0 JUMPI JUMPDEST POP PUSH2 0x7B3 JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5C8 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x738 JUMPI PUSH2 0x60E DUP2 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x710 JUMPI PUSH2 0x61E SWAP1 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x65F DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24AC JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x693 DUP5 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x69F DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0x6D9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x4E4 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x77D JUMPI PUSH2 0x74A DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6DC JUMP JUMPDEST PUSH2 0x787 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x7E9 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH2 0x7F4 JUMPI DUP1 DUP13 PUSH2 0x5B5 JUMP JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x812 DUP2 DUP4 PUSH2 0x24BF JUMP JUMPDEST SWAP1 PUSH2 0x4BE JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x82C DUP2 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x83A JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x84C DUP3 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x859 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xAA2 JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x937 DUP7 DUP14 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA27 JUMPI PUSH2 0x952 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x710 JUMPI PUSH2 0x962 SWAP1 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9A3 DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24AC JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x9D7 DUP5 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x9E3 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA1D SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA6C JUMPI PUSH2 0xA39 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA20 JUMP JUMPDEST PUSH2 0xA76 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST PUSH2 0xAAB SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP12 PUSH2 0x8FF JUMP JUMPDEST POP PUSH2 0xABC DUP4 DUP3 PUSH2 0x24BF JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x463 JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xADD DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x323 JUMPI DUP2 PUSH2 0xB0A SWAP2 DUP5 ADD PUSH2 0x23DC JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x323 JUMPI PUSH2 0xB21 SWAP3 ADD PUSH2 0x23DC JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x42A JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xB44 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB4C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB56 DUP2 PUSH2 0x2500 JUMP JUMPDEST PUSH2 0x268F JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB76 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB7E PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB87 PUSH2 0x27A4 JUMP JUMPDEST PUSH2 0xB90 DUP2 PUSH2 0x2915 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB9C JUMPI STOP JUMPDEST DUP1 PUSH2 0xBBD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBB4 PUSH1 0x1 SWAP5 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP8 DUP6 PUSH2 0x2A71 JUMP JUMPDEST ADD PUSH2 0xB93 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBE4 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xC19 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xC21 PUSH2 0x1FF0 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xC43 PUSH2 0x27A4 JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xCB4 JUMPI JUMPDEST PUSH2 0xB5B SWAP4 POP PUSH2 0x2A71 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xCDF JUMPI JUMPDEST DUP2 PUSH2 0xCCD PUSH1 0x40 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0xB5B SWAP4 POP PUSH2 0xCAA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCC0 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xD00 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xD0C PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xE68 JUMPI PUSH2 0xD24 DUP3 PUSH2 0x2A29 JUMP JUMPDEST PUSH2 0xD2D DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH2 0xD36 DUP3 PUSH2 0x243D JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xD43 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xDDD DUP2 PUSH2 0x2B03 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xF14 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xF35 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF3C JUMPI JUMPDEST PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x23BD JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xF0A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF23 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xF5F PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xE68 JUMPI PUSH1 0x20 DUP2 PUSH2 0xF9B PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x2A29 JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xFC2 PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0xFCC DUP3 PUSH2 0x2915 JUMP JUMPDEST SWAP1 PUSH2 0xFD6 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0xFFF JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1018 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x102D DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0xFE6 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x1050 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x2254 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x106F PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0x1079 DUP3 PUSH2 0x2915 JUMP JUMPDEST SWAP1 PUSH2 0x1083 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x10A8 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x10C1 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x10D6 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0x1093 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x113C PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x327 JUMPI PUSH1 0x20 DUP2 PUSH2 0x1178 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x2A29 JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI PUSH2 0x11CC PUSH1 0x20 SWAP2 PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x11F5 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1274 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x127C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO SWAP1 DUP2 DUP5 SUB PUSH2 0x323 JUMPI PUSH2 0x1294 PUSH2 0x2746 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP2 DUP3 PUSH0 MSTORE DUP3 PUSH1 0x20 SWAP3 PUSH1 0x4 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x14E4 JUMPI DUP4 PUSH0 SWAP7 DUP8 SWAP3 JUMPDEST DUP10 ISZERO PUSH2 0x1469 JUMPI DUP5 DUP4 DUP8 DUP13 PUSH0 SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 JUMPDEST PUSH2 0x1369 DUP5 PUSH2 0x243D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1376 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x3 PUSH2 0x13E6 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x2 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x243D JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x13F6 DUP10 PUSH2 0x2063 JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 PUSH2 0x143A SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP14 MLOAD DUP13 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 DUP10 MLOAD SWAP6 DUP7 MSTORE AND SWAP4 LOG3 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP5 DUP4 DUP8 DUP13 PUSH1 0x1 SLOAD SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 PUSH2 0x1360 JUMP JUMPDEST DUP4 PUSH0 SLOAD SWAP7 DUP8 SWAP3 PUSH2 0x12E5 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1509 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x1512 DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1538 DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x1688 JUMPI JUMPDEST POP PUSH2 0x1569 JUMPI STOP JUMPDEST PUSH2 0x1572 DUP4 PUSH2 0x243D JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1581 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x1600 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1562 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x16AD PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x16B6 DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x16DC DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x182D JUMPI JUMPDEST POP PUSH2 0x170E JUMPI STOP JUMPDEST PUSH2 0x1717 DUP4 PUSH2 0x243D JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1726 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x17A5 DUP2 PUSH2 0x2B03 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1707 JUMP JUMPDEST PUSH2 0x2006 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x185E PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x18B2 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x18BB DUP2 PUSH2 0x2595 JUMP JUMPDEST SWAP1 PUSH2 0x268F JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x18DA PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x18E7 DUP2 PUSH2 0x2500 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x18FF DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1946 DUP2 PUSH2 0x2B03 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A34 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1A41 DUP2 PUSH2 0x2500 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x1A59 DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1AA0 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1B2B JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1B34 SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP5 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x11CC PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x24BF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1B7C PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1BAD PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1F6C JUMPI JUMPDEST POP AND SWAP3 ADDRESS DUP5 EQ PUSH2 0x1F44 JUMPI AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x1F18 JUMPI DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x1EF4 JUMPI JUMPDEST POP PUSH2 0x1CB7 SWAP1 PUSH2 0x243D JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1CC5 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP5 PUSH0 MSTORE PUSH1 0x2 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP6 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x1EC0 JUMPI JUMPDEST POP PUSH2 0x1D7B SWAP1 PUSH2 0x243D JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1D8A DUP8 PUSH2 0x2063 JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP7 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL PUSH0 SWAP2 DUP2 PUSH2 0x1E8E JUMPI JUMPDEST POP SWAP4 DUP3 SWAP2 PUSH1 0x24 SWAP6 PUSH2 0x1E7C JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL PUSH0 SWAP4 DUP2 PUSH2 0x1E4D JUMPI JUMPDEST POP PUSH2 0x1E3E JUMPI STOP JUMPDEST PUSH1 0x6 SWAP2 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1E75 JUMPI JUMPDEST PUSH2 0x1E65 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD SWAP3 DUP5 PUSH2 0x1E37 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E5B JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP6 PUSH2 0x1DFC JUMP JUMPDEST SWAP2 POP SWAP4 DUP3 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1EB9 JUMPI JUMPDEST PUSH2 0x1EA6 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI SWAP1 MLOAD SWAP1 SWAP4 PUSH1 0x24 PUSH2 0x1DF0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E9C JUMP JUMPDEST PUSH2 0x1D7B SWAP5 POP PUSH2 0x1EE7 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI JUMPDEST PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x212A JUMP JUMPDEST SWAP4 PUSH2 0x1D71 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1ED5 JUMP JUMPDEST PUSH2 0x1CB7 SWAP3 POP PUSH2 0x1F12 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 PUSH2 0x1CAD JUMP JUMPDEST POP PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP5 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1F9F JUMPI JUMPDEST PUSH2 0x1F85 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1C15 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1F7B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1FCA PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x204F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2041 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2144 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x211D JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x21A6 DUP2 PUSH2 0x20C0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x21CE DUP3 PUSH2 0x21AC JUMP JUMPDEST PUSH2 0x21DB PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2209 DUP3 SWAP5 PUSH2 0x21AC JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2227 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1F SWAP1 PUSH1 0x44 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x40 MLOAD SWAP4 PUSH1 0x20 SWAP5 DUP2 DUP7 DUP3 ADD SWAP4 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x22A5 DUP2 PUSH2 0x20C0 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP6 DUP2 SWAP5 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP11 PUSH1 0x4 DUP5 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP6 ADD MSTORE DUP5 DUP5 ADD MCOPY DUP4 DUP4 DUP3 DUP5 ADD ADD MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP11 DUP12 SWAP2 ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0x234A JUMPI POP POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2359 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP3 DUP3 DUP3 DUP6 SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP3 GT PUSH2 0x323 JUMPI ADD SWAP4 DUP1 PUSH1 0x1F DUP7 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP5 MLOAD SWAP3 DUP4 GT PUSH2 0x207F JUMPI PUSH2 0x23A2 DUP5 PUSH1 0x40 MLOAD SWAP4 PUSH1 0x1F DUP7 ADD AND ADD DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x323 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x323 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x23F7 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP4 PUSH2 0x2405 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x323 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x242E JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2420 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2452 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x24EC PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x24E5 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x24AC JUMP JUMPDEST DIV SWAP1 PUSH2 0x2482 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x2513 DUP3 PUSH2 0x2595 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x2554 JUMPI CALLER SUB PUSH2 0x2524 JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2685 JUMPI PUSH0 SWAP2 PUSH2 0x260C JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x267D JUMPI JUMPDEST DUP2 PUSH2 0x2627 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH2 0x2673 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x265A DUP2 PUSH2 0x2581 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x2668 PUSH1 0x20 DUP3 ADD PUSH2 0x2581 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x2581 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x2605 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x261A JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x2699 DUP3 PUSH2 0x2915 JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x26AB JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x26C1 DUP4 DUP7 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x26F3 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x269D JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2732 DUP8 DUP14 DUP9 PUSH2 0x2B67 JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x26E6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x2778 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x27D0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x28F3 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x28BD JUMPI JUMPDEST POP POP ISZERO PUSH2 0x2895 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x28EC JUMPI JUMPDEST PUSH2 0x28D4 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0x28E5 SWAP1 PUSH2 0x211D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x288C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x28CA JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x290E SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xF3C JUMPI PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x283B JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP4 PUSH2 0x298B JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x299E DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP4 MLOAD PUSH2 0x29D6 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP5 PUSH2 0x29E4 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x323 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2A11 JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x2984 JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x29FD JUMP JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SUB PUSH2 0x2A49 JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2AAA JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2AEF DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2B67 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2AA2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24BF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24BF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP1 SWAP3 PUSH0 SWAP2 PUSH2 0x2BBF PUSH1 0x64 DUP3 PUSH2 0x20DC JUMP JUMPDEST MLOAD SWAP1 DUP3 DUP6 GAS CALL ISZERO PUSH2 0x318 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x2C1B JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x2BE6 JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x2BDF JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF 0x4D PUSH28 0x7326F3E2D7A8E0BA230FAABB4EC5497C4F0AA75F9BD32C889273F022 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"3120:30799:46:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1581:26:47;3120:30799:46;1581:26:47;;;3120:30799:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;;;1525:73:33;;;:::i;:::-;4720:5:46;7248:55;;7244:127;;7402:20;;;:::i;:::-;8176:4;;;:::i;:::-;31750:39;;;:::i;:::-;3120:30799;;;;;;:::i;:::-;;;;;;;31707:129;;;3120:30799;26774:4;3120:30799;;-1:-1:-1;;;;;3120:30799:46;;;;;;;;31667:31;31707:129;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;31931:6;3120:30799;31977:54;;;;:::i;:::-;31931:101;;;;;3120:30799;;;31931:101;;-1:-1:-1;;;;;3120:30799:46;;;;;31931:101;;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;-1:-1:-1;;31931:101:46;;;;;;;32048:68;31931:101;31707:129;31931:101;;;3120:30799;;;;;;;32048:68;3120:30799;31931:101;;;;:::i;:::-;3120:30799;31931:101;;;3120:30799;;;;;;;;;31931:101;3120:30799;;;7244:127;7326:34;3120:30799;7326:34;3120:30799;;7326:34;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;;;;-1:-1:-1;;;;;8671:6:46;3120:30799;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;436:67:48;;:::i;:::-;3120:30799:46;;;9345:33;;-1:-1:-1;;;;;3120:30799:46;;;9345:33;;3120:30799;;9345:6;3120:30799;9345:6;;-1:-1:-1;;;;;9345:6:46;3120:30799;9345:33;;;;;;;3120:30799;;;9345:33;;;3120:30799;;-1:-1:-1;;;;;3120:30799:46;;;;;;;;;;;;;;11336:30;3120:30799;;;;;;11435:30;3120:30799;11499:28;;;;:57;;;;3120:30799;11566:199;;;3120:30799;11825:28;;;:::i;:::-;11868:13;;3120:30799;11883:13;;;;;;11091:20;;-1:-1:-1;;;;;3120:30799:46;;;;11192:32;3120:30799;;;;;;;;11290:134;3120:30799;;11387:31;3120:30799;;;;;;11435:30;3120:30799;11499:28;;;:57;;;;11863:1939;11566:199;;;11863:1939;11825:28;;;:::i;:::-;11868:13;;3120:30799;11883:13;;;;;;3120:30799;11898:3;11921:13;;;;:::i;:::-;3120:30799;11917:1875;;11898:3;3120:30799;;11868:13;;11917:1875;11973:13;-1:-1:-1;;;;;11973:13:46;;;;:::i;:::-;3120:30799;;12041:13;;;;;:::i;:::-;3120:30799;-1:-1:-1;;;;;9345:6:46;3120:30799;12005:50;;;;3120:30799;;12005:50;3120:30799;12005:50;;;3120:30799;12005:50;;3120:30799;12034:4;3120:30799;;;;;;;;9345:6;;3120:30799;9345:6;;-1:-1:-1;;;;;9345:6:46;3120:30799;12005:50;;;;;;;;;;;11917:1875;3120:30799;;;12230:240;3120:30799;12437:13;;;;;;:::i;:::-;3120:30799;;;;;;12398:53;3120:30799;-1:-1:-1;;;;;3120:30799:46;;12398:53;;12488:1290;;;;13094:13;;;;:::i;:::-;3120:30799;2004:6:39;;2000:58;;2153:5;;;:::i;:::-;3120:30799:46;465:4:39;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;3120:30799:46;-1:-1:-1;;;;;3120:30799:46;;;;13254:19;3120:30799;;;;;;;;;;;;;13254:51;3120:30799;;;13254:51;:::i;:::-;3120:30799;;13366:13;;;;:::i;:::-;3120:30799;;;;;;;;;;;13327:70;3120:30799;-1:-1:-1;;;;;3120:30799:46;;;;13327:22;3120:30799;;;;;;;;;;;;;;;;;13327:70;:::i;:::-;3120:30799;;12488:1290;11917:1875;;;;3120:30799;;;;;;;;;;2000:58:39;2033:14;3120:30799:46;2033:14:39;3120:30799:46;;2033:14:39;12488:1290:46;3120:30799;;11499:28;;;13617:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:46;;;;13581:19;3120:30799;;;;;;;;;;13581:49;3120:30799;;;;;;13581:49;:::i;:::-;3120:30799;;12488:1290;;13520:240;13724:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:46;;;;13685:22;3120:30799;;;;;;;;;;13685:52;3120:30799;;;;;;13685:52;:::i;3120:30799::-;;;;;;;;;;12005:50;;;;:::i;:::-;3120:30799;;12005:50;;;;3120:30799;;;12005:50;3120:30799;;;;;;;;;12005:50;3120:30799;;;11566:199;11675:79;;;;;;:::i;:::-;11566:199;;;11499:57;11531:25;;;;-1:-1:-1;11499:57:46;;11898:3;11921:13;;;;:::i;:::-;3120:30799;11917:1875;;11898:3;3120:30799;;11868:13;;11917:1875;-1:-1:-1;;;;;11973:13:46;;;;:::i;:::-;3120:30799;;12041:13;;;;;:::i;:::-;3120:30799;-1:-1:-1;;;;;9345:6:46;3120:30799;12005:50;;;;3120:30799;;12005:50;3120:30799;12005:50;;;3120:30799;12005:50;;3120:30799;12034:4;3120:30799;;;;;;;;;9345:6;3120:30799;9345:6;;-1:-1:-1;;;;;9345:6:46;3120:30799;12005:50;;;;;;;;11917:1875;12332:13;;;12294:52;3120:30799;-1:-1:-1;;;;;12332:13:46;;;;:::i;:::-;3120:30799;;;;;;;;12294:52;;12488:1290;;;;13094:13;;;;:::i;:::-;3120:30799;2004:6:39;;2000:58;;2153:5;;;:::i;:::-;3120:30799:46;465:4:39;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;3120:30799:46;-1:-1:-1;;;;;3120:30799:46;;;;13254:19;3120:30799;;;;;;;;;;;;;13254:51;3120:30799;;;13254:51;:::i;:::-;3120:30799;;13366:13;;;;:::i;:::-;3120:30799;;;;;;;;;;;13327:70;3120:30799;-1:-1:-1;;;;;3120:30799:46;;;;13327:22;3120:30799;;;;;;;;;;;;;;;;;13327:70;:::i;:::-;3120:30799;;12488:1290;11917:1875;;;;12488:1290;3120:30799;;11499:28;;;13617:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:46;;;;13581:19;3120:30799;;;;;;;;;;13581:49;3120:30799;;;;;;13581:49;:::i;:::-;3120:30799;;12488:1290;;13520:240;13724:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:46;;;;13685:22;3120:30799;;;;;;;;;;13685:52;3120:30799;;;;;;13685:52;:::i;12005:50::-;;;;:::i;:::-;;;;11566:199;11675:79;;;;;:::i;:::-;11566:199;;11499:57;11531:25;;;;-1:-1:-1;11499:57:46;;9345:33;;;;;;3120:30799;9345:33;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;9345:33;;;;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;30298:9;3120:30799;;:::i;:::-;;;:::i;:::-;7088:4;;;;:::i;:::-;30298:9;:::i;:::-;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;;;:::i;:::-;1525:73:33;;;:::i;:::-;29131:28:46;;;:::i;:::-;29175:13;3120:30799;29190:13;;;;;;3120:30799;29205:3;29239:13;29306:5;-1:-1:-1;;;;;29239:13:46;3120:30799;29239:13;;;:::i;:::-;3120:30799;;29306:5;;;:::i;:::-;3120:30799;29175:13;;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;-1:-1:-1;;;;;3120:30799:46;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;;;:::i;:::-;;;;-1:-1:-1;;;;;3120:30799:46;;;;;;;;;;1525:73:33;;;:::i;:::-;3120:30799:46;;;29588:52;;;;3120:30799;29588:52;;3120:30799;;;;29588:52;;3120:30799;;;;;29588:6;3120:30799;29588:52;;;;;;;;3120:30799;29689:5;;;;:::i;29588:52::-;3120:30799;29588:52;;3120:30799;29588:52;;;;;;3120:30799;29588:52;;;:::i;:::-;;;3120:30799;;;;29689:5;;-1:-1:-1;29588:52:46;;;;;-1:-1:-1;29588:52:46;;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;;;1525:73:33;;;:::i;:::-;4720:5:46;7581:57;;7577:130;;7738:21;;;:::i;:::-;8176:4;;;:::i;:::-;32783:40;;;:::i;:::-;3120:30799;;;;;;:::i;:::-;;;;;;;32740:130;;;3120:30799;27118:4;3120:30799;;-1:-1:-1;;;;;3120:30799:46;;;;;;;;32699:32;32740:130;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;32966:6;3120:30799;33013:55;;;;:::i;:::-;32966:103;;;;;3120:30799;;;32966:103;;-1:-1:-1;;;;;3120:30799:46;;;;;32966:103;;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;-1:-1:-1;;32966:103:46;;;;;;;33085:70;32966:103;32740:130;32966:103;;;3120:30799;;;;;;33085:70;3120:30799;7577:130;7661:35;3120:30799;7661:35;3120:30799;;7661:35;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;;;;1581:26:47;;-1:-1:-1;;;;;1581:26:47;3120:30799:46;;;1124:6:45;3120:30799:46;;1581:26:47;;;;;;;;;3120:30799:46;1581:26:47;;;3120:30799:46;;;;;;;;;1581:26:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;3120:30799:46;;;;;-1:-1:-1;;3120:30799:46;;;;;;;1525:73:33;;:::i;:::-;4720:5:46;7581:57;;7577:130;;3120:30799;7738:21;;26371:70;7738:21;;:::i;:::-;3120:30799;;;;;;;;26371:70;3120:30799;;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;15924:28;;;;:::i;:::-;15976:24;;;;:::i;:::-;16015:13;3120:30799;;-1:-1:-1;;;;;3120:30799:46;;;16010:124;16030:13;;;;;;3120:30799;;;;;;;:::i;:::-;;;;16045:3;3120:30799;;;;;16080:22;3120:30799;;;;;16109:13;;;;;:::i;:::-;3120:30799;;;;;;;;;;16064:59;;;;:::i;:::-;3120:30799;;16015:13;;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;15502:28;;;;:::i;:::-;15554:24;;;;:::i;:::-;15593:13;3120:30799;;-1:-1:-1;;;;;3120:30799:46;;;15588:121;15608:13;;;;;;3120:30799;;;;;;;:::i;15623:3::-;3120:30799;;;;;15658:19;3120:30799;;;;;15684:13;;;;;:::i;:::-;3120:30799;;;;;;;;;;15642:56;;;;:::i;:::-;3120:30799;;15593:13;;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;;;;-1:-1:-1;;;;;1124:6:45;3120:30799:46;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;1525:73:33;;:::i;:::-;4720:5:46;7248:55;;7244:127;;3120:30799;7402:20;;25803:68;7402:20;;:::i;:::-;3120:30799;;;;;;;;25803:68;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;-1:-1:-1;;;;;3120:30799:46;;:::i;:::-;;;;14798:32;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;436:67:48;;:::i;:::-;-1:-1:-1;;;;;3120:30799:46;;;;;;;;;;;;;;;;23815:4;3120:30799;;;;;;;23948:56;;;;;;3120:30799;23948:56;;;;24044:57;;;;;;;;3120:30799;24044:57;25031:90;3120:30799;24044:57;25244:69;24044:57;;;25136:92;24044:57;25136:92;24044:57;;24632:37;;;:::i;:::-;3120:30799;;;;;;:::i;:::-;;;;;;;24733:32;24817:38;24589:134;;;3120:30799;;;;;;;24549:31;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24817:38;:::i;:::-;3120:30799;;;;;;;;;:::i;:::-;;;;24774:135;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25031:90;3120:30799;;25031:90;;;;3120:30799;;;;;;;;;;;;;;;;;25031:90;;;;3120:30799;;;;;;;;;;;;;;;;;;;;25136:92;;;;3120:30799;;;;;;25244:69;;3120:30799;;;;;;;;;24044:57;3120:30799;;;;23815:4;3120:30799;24044:57;25031:90;3120:30799;24044:57;25244:69;24044:57;;;25136:92;24044:57;25136:92;24044:57;;;23948:56;3120:30799;;;23948:56;;;;;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:46;;;;;;;;16627:31;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;16753:81;;;;3120:30799;16749:176;;;3120:30799;16749:176;31750:39;;;:::i;:::-;3120:30799;;;;;;;;:::i;:::-;;;;31707:129;;;3120:30799;;;;;;;16627:31;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;31931:6;3120:30799;31977:54;;;;:::i;:::-;31931:101;;;;;3120:30799;;;31931:101;;-1:-1:-1;;;;;3120:30799:46;;;;;31931:101;;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;-1:-1:-1;;31931:101:46;;;;;;;32048:68;31931:101;;;3120:30799;;;;;;32048:68;3120:30799;16753:81;16786:48;;;;;16753:81;;;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:46;;;;;;;;17109:32;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;17190:33;3120:30799;17238:82;;;;3120:30799;17234:179;;;3120:30799;17234:179;32783:40;;;:::i;:::-;3120:30799;;;;;;;;:::i;:::-;;;;32740:130;;;3120:30799;;;;;;;17109:32;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;32966:6;3120:30799;33013:55;;;;:::i;:::-;32966:103;;;;;3120:30799;;;32966:103;;-1:-1:-1;;;;;3120:30799:46;;;;;32966:103;;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;-1:-1:-1;;32966:103:46;;;;;;;33085:70;32966:103;;;3120:30799;;;;;;33085:70;3120:30799;17238:82;17271:49;;;;;17238:82;;;3120:30799;;:::i;:::-;;;;;-1:-1:-1;;3120:30799:46;;;;;-1:-1:-1;;;;;3120:30799:46;;:::i;:::-;;;;14517:31;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;3120:30799:46;;;;;;14136:33;3120:30799;;;;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;30461:21;3120:30799;;:::i;:::-;30461:21;;;:::i;:::-;;;:::i;3120:30799::-;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;;;7088:4;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:46;;;;;;;;28563:31;3120:30799;;;;;;;28729:6;3120:30799;28776:55;;;;:::i;:::-;28729:103;;;;;3120:30799;;;28729:103;;-1:-1:-1;;;;;3120:30799:46;;;;;28729:103;;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;-1:-1:-1;;28729:103:46;;;;;;;28852:68;28729:103;3120:30799;28729:103;;;3120:30799;;;;;;28852:68;3120:30799;7864:127;7947:33;3120:30799;7947:33;3120:30799;;7947:33;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;;;;4975:9;3120:30799;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;;;7088:4;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:46;;;;;;;;28180:30;3120:30799;;;;;;;28344:6;3120:30799;28390:54;;;;:::i;:::-;28344:101;;;;;3120:30799;;;28344:101;;-1:-1:-1;;;;;3120:30799:46;;;;;28344:101;;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;-1:-1:-1;;28344:101:46;;;;;;;28465:67;28344:101;3120:30799;28344:101;;;3120:30799;;;;;;28465:67;3120:30799;28344:101;;;;:::i;:::-;;;;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;;16364:79;3120:30799;;;;16364:79;:::i;3120:30799::-;;;;;-1:-1:-1;;3120:30799:46;;;;;-1:-1:-1;;;;;3120:30799:46;;:::i;:::-;;;;15055:30;3120:30799;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;;-1:-1:-1;;;;;3120:30799:46;;;21277:33;;:6;;3120:30799;21277:6;;;3120:30799;21277:33;;;;;;;;3120:30799;21277:33;;;3120:30799;;;21362:4;;21325:42;;21321:104;;3120:30799;;;;;;;;;;;;;;21435:87;;3120:30799;;;;;;;;;21557:4;3120:30799;;;;;;;;;;21634:49;;;3120:30799;21634:49;;3120:30799;;21634:49;3120:30799;21634:49;;;;;;;;;3120:30799;;;21634:49;;;3120:30799;21776:36;;;;:::i;:::-;3120:30799;;;;;;;:::i;:::-;;;;;;;21733:133;;;3120:30799;;;;;;;;21693:31;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21941:72;3120:30799;21941:72;;;3120:30799;21941:72;;3120:30799;;21941:72;3120:30799;21941:72;;;;;;;;;3120:30799;;;21941:72;;;3120:30799;22107:37;;;;:::i;:::-;3120:30799;;;;;;;;:::i;:::-;;;;22064:135;;;3120:30799;;;;;;;;22023:32;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;22731:54;;;3120:30799;22731:54;;3120:30799;22731:54;;3120:30799;22731:54;;;;3120:30799;;22731:54;;;3120:30799;22727:277;;;;3120:30799;22727:277;;;3120:30799;;;;23018:55;;;;3120:30799;23018:55;;;3120:30799;23018:55;;3120:30799;23018:55;;3120:30799;;23018:55;;;3120:30799;23014:281;;;3120:30799;23014:281;23136:31;3120:30799;;;;;;;;;;;23018:55;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;23018:55;;;;;;;;;22727:277;3120:30799;;;22847:30;3120:30799;;;;;;22727:277;;;22731:54;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;22731:54;;3120:30799;22731:54;;;;;;;21941:72;22107:37;21941:72;;;;;3120:30799;21941:72;3120:30799;21941:72;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;21634:49;21776:36;21634:49;;;;;3120:30799;21634:49;3120:30799;21634:49;;;;;;;:::i;:::-;;;;21435:87;21484:27;;3120:30799;21484:27;3120:30799;;;;21484:27;21321:104;21390:24;3120:30799;21390:24;3120:30799;;21390:24;21277:33;;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;21277:33;;;;;;;;;;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;;;-1:-1:-1;;;;;3120:30799:46;;:::i;:::-;;;;15252:31;3120:30799;;;;;;;;;;;;;-1:-1:-1;;;;;3120:30799:46;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;3120:30799:46;;;;;;:::o;:::-;;;;;-1:-1:-1;;3120:30799:46;;;;;;;;4720:5;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;1931:430:33:-;3120:30799:46;;;2303:50:33;;;2320:22;;3120:30799:46;;;;;;;2303:50:33;;;;;;:::i;:::-;3120:30799:46;2293:61:33;;1931:430;:::o;3120:30799:46:-;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;8733:151;3120:30799;8733:151;3120:30799;-1:-1:-1;;;;;;3120:30799:46;;;8808:68;;;;;;;;;;;3120:30799;8808:68;;;3120:30799;8808:68;;;;;;:::i;:::-;3120:30799;;;8794:83;;;;;;3120:30799;8794:83;;;8808:68;8794:83;;3120:30799;;;;;8808:68;3120:30799;;;;;;;;;;;;;;8808:68;3120:30799;;;;;;;8794:83;;:6;;3120:30799;8794:83;;;;;;;;8733:151;;;:::o;8794:83::-;;;-1:-1:-1;8794:83:46;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;3120:30799:46;;;;;;;;;8733:151::o;3120:30799::-;;;;;;;;;;-1:-1:-1;;;;;3120:30799:46;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;13296:213:71;3120:30799:46;13374:24:71;;;;13370:103;;3120:30799:46;13296:213:71;:::o;13370:103::-;13421:41;;;13452:2;13421:41;3120:30799:46;;;;13421:41:71;;3120:30799:46;;;;;;;;;;:::o;19669:4:32:-;;465::39;19669::32;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;18132:1064:46:-;;18361:104;19669:4:32;5832:87:39;;;838:5;5832:87;;;;;;;;;838:5;:::i;:::-;19669:4:32;18361:104:46;;:::i;:::-;19669:4:32;;;;;;;;;;;;;;;18132:1064:46;:::o;19202:340::-;-1:-1:-1;;;;;19298:21:46;;;;;:::i;:::-;3120:30799;19334:25;;19330:93;;19452:10;19437:25;19433:103;;19202:340;;:::o;19433:103::-;19485:40;19357:1;19485:40;19452:10;19485:40;3120:30799;;;;;19357:1;19485:40;19330:93;19382:30;;19357:1;19382:30;3120:30799;19382:30;3120:30799;;19357:1;19382:30;3120:30799;;;-1:-1:-1;;;;;3120:30799:46;;;;;;:::o;19813:201::-;3120:30799;;;;19933:32;;-1:-1:-1;;;;;3120:30799:46;;;19933:32;;;3120:30799;19933:32;3120:30799;;;19933:6;3120:30799;;19933:32;;;;;;;-1:-1:-1;19933:32:46;;;19813:201;19983:24;;3120:30799;;19813:201;:::o;19933:32::-;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;;19933:32;3120:30799;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;19933:32;;;;;;-1:-1:-1;19933:32:46;;;3120:30799;;;-1:-1:-1;3120:30799:46;;;;;30496:616;;30631:28;;;:::i;:::-;30675:13;;30687:1;30690:13;;;;;;30496:616;;;;;:::o;30705:3::-;3120:30799;;-1:-1:-1;;;;;30739:13:46;;;;;:::i;:::-;3120:30799;;;;;;30687:1;3120:30799;30794:22;3120:30799;;;;;;;30687:1;3120:30799;;30687:1;3120:30799;;;;30687:1;3120:30799;;30847:20;;30843:253;;30705:3;;;;;;;;3120:30799;30675:13;;30843:253;31015:66;3120:30799;;30687:1;3120:30799;;;;30687:1;3120:30799;;30687:1;3120:30799;;;30687:1;3120:30799;;;;30974:16;;;;;:::i;:::-;3120:30799;;;;;;31015:66;;30843:253;;;;;;;;;509:165:48;-1:-1:-1;;;;;586:6:48;3120:30799:46;564:10:48;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;3120:30799:46;;616:41:48;;1688:201:33;1762:20;1774:7;;;;1762:20;:::i;:::-;-1:-1:-1;;;;;3120:30799:46;;;1336:22:45;;;:6;;;:22;:6;;;3120:30799:46;1336:22:45;;;;;;;;;1774:7:33;1336:22:45;;;1688:201:33;3120:30799:46;;;;;1336:64:45;;;;;3120:30799:46;1336:64:45;;:22;:64;;3120:30799:46;1820:10:33;3120:30799:46;;;;1394:4:45;3120:30799:46;;;;;1336:64:45;;;;;;;1774:7:33;1336:64:45;;;1688:201:33;1797:34;;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;1336:22:45;1774:7:33;1854:18;1336:64:45;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799:46;;;;;;;:::i;:::-;1336:64:45;;;;;;;;;:22;3120:30799:46;1336:22:45;;;;;;;;;;;;;;;:::i;:::-;;;;;19548:199:46;;-1:-1:-1;;;;;3120:30799:46;;;19679:26;3120:30799;19679:26;;3120:30799;19679:26;;;3120:30799;19679:26;:6;3120:30799;19679:6;;;3120:30799;19679:26;;;;;;;;;;;19548:199;19670:35;;;3120:30799;19548:199;:::o;19679:26::-;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;19679:26;;;;;;;;;;3120:30799;;;;;;;;;;;;;;;;;;;;33168:749;19669:4:32;;;;;;;;;;;;;;;;;;33769:74:46;33765:146;;33168:749::o;33765:146::-;33866:34;-1:-1:-1;33866:34:46;;-1:-1:-1;33866:34:46;29708:403;;;-1:-1:-1;;;;;3120:30799:46;;;;;-1:-1:-1;3120:30799:46;29832:19;3120:30799;;;-1:-1:-1;3120:30799:46;;;;;;;-1:-1:-1;3120:30799:46;;;;-1:-1:-1;3120:30799:46;;29878:20;;29874:231;;29708:403;;;;;;;:::o;29874:231::-;3120:30799;29994:16;3120:30799;30031:63;3120:30799;;;;-1:-1:-1;3120:30799:46;29832:19;3120:30799;;;-1:-1:-1;3120:30799:46;;-1:-1:-1;3120:30799:46;;;-1:-1:-1;3120:30799:46;;;;29994:16;:::i;:::-;3120:30799;;;;;;30031:63;;29874:231;;;;;;;;17425:701;-1:-1:-1;;;;;3120:30799:46;17624:399;3120:30799;17882:32;3120:30799;;18040:79;3120:30799;;17624:399;3120:30799;;;17975:31;3120:30799;;;17624:399;3120:30799;;18040:79;;:::i;17425:701::-;-1:-1:-1;;;;;3120:30799:46;-1:-1:-1;3120:30799:46;;;;18040:79;3120:30799;;-1:-1:-1;3120:30799:46;;;17791:30;3120:30799;;;-1:-1:-1;3120:30799:46;;18040:79;;:::i;1219:160:60:-;3120:30799:46;;;1328:43:60;;;;;;;-1:-1:-1;;;;;3120:30799:46;;;;1328:43:60;;;3120:30799:46;;;;;;;;;1328:43:60;;;1219:160;;-1:-1:-1;;1328:43:60;3120:30799:46;;1328:43:60;:::i;:::-;8507:421;;;;;;;;;-1:-1:-1;8507:421:60;;8942:15;;3120:30799:46;-1:-1:-1;;;;;3120:30799:46;;8960:26:60;:31;8942:68;8938:146;;1219:160;:::o;8938:146::-;-1:-1:-1;;;;;9033:40:60;;-1:-1:-1;9033:40:60;3120:30799:46;9033:40:60;3120:30799:46;1328:43:60;-1:-1:-1;9033:40:60;8942:68;9009:1;8994:16;;8942:68;"},"methodIdentifiers":{"MAX_CREATOR_FEE_PERCENTAGE()":"2e1d388d","MAX_PROTOCOL_SWAP_FEE_PERCENTAGE()":"2772d156","MAX_PROTOCOL_YIELD_FEE_PERCENTAGE()":"5e32e4e8","collectAggregateFees(address)":"8f4ab9ca","collectAggregateFeesHook(address)":"fa399f2a","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","getVault()":"8d928af8","isPoolRegistered(address)":"c673bdaf","migratePool(address)":"0874327f","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialGlobalSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialGlobalYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMigrationSource\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolRegisteredWithFeeController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_CREATOR_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFeesHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"migratePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract stores global default protocol swap and yield fees, and also tracks the values of those fees for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`). The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows the component fee percentages, and how to compute the aggregate from the components. This is done for performance reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \\\"cut\\\", and stores the fee amounts separately from the pool balances. The pool creator fees are \\\"net\\\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided between the pool creator and the LPs. There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any time by governance and the pool creator, respectively. Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator fees are computed \\\"net\\\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible. A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs. This contract is deployed with the Vault, but can be changed by governance.\",\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"PoolAlreadyRegistered(address)\":[{\"details\":\"This can happen if there is an error in the migration, or if governance somehow grants permission to `migratePool`, which should never happen.\",\"params\":{\"pool\":\"The pool\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"collectAggregateFeesHook(address)\":{\"details\":\"Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount transferred so that the transaction settles when the hook returns.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"_0\":\"The computed aggregate percentage\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol swap fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol yield fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getVault()\":{\"details\":\"This function is virtual to allow for overriding in derived contracts which also inherits contracts with `getVault()` definition.\",\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"migratePool(address)\":{\"details\":\"Permission should NEVER be granted to this function outside of a migration contract. It is necessary to permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool deployment. Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe, guaranteeing that it is impossible to use this function to change anything after registration. A pool can only be registered / configured once - either copied to a new controller in the migration context, or added normally through the Vault calling `registerPool`.\",\"params\":{\"pool\":\"The address of the pool to be migrated\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"InvalidMigrationSource()\":[{\"notice\":\"Migration source cannot be this contract.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"Prevent pool data from being registered more than once.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"notice\":\"Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator yield fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"migratePool(address)\":{\"notice\":\"Not exposed in the interface, this enables migration of hidden pool state.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Helper contract to manage protocol and creator fees outside the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":\"ProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0x4e6eceea41f31faa3f4228315c1d54c0d6f7befaaa1d158775e0b2a860c9de12\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6fc6d998ca7860d5c8f08a4fc045d5d1ebdcb4c777e934f6cd081d05252a024f\",\"dweb:/ipfs/QmbsPGHVrBdVfpcWkm3BNWPQXUZWbvPb6VGiEbf5ezvAmj\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x11ec2b653633cbcc6a99d426df178007a98d1154a39a1ada961239be39eec069\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://40eed42ee57746bbf4711bb4aee856328cd70cc02aa3ff05e8dd719868fcd524\",\"dweb:/ipfs/QmX5uAoB9W6UUehgSRvVW6hun3XE53eZwKsm4kHVqtJs8C\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"SingletonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getVault()":"8d928af8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same function name.\",\"errors\":{\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getVault()\":{\"details\":\"This function is virtual to allow for overriding in derived contracts which also inherits contracts with `getVault()` definition.\",\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"}},\"notice\":\"Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":\"SingletonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x11ec2b653633cbcc6a99d426df178007a98d1154a39a1ada961239be39eec069\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://40eed42ee57746bbf4711bb4aee856328cd70cc02aa3ff05e8dd719868fcd524\",\"dweb:/ipfs/QmX5uAoB9W6UUehgSRvVW6hun3XE53eZwKsm4kHVqtJs8C\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"VaultGuard":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a034606057601f60b238819003918201601f19168301916001600160401b03831184841017606457808492602094604052833981010312606057516001600160a01b03811681036060576080526040516039908160798239608051815050f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe5f80fdfea26469706673582212209ea97d26b149f4c03cd27efa4222c040e10233d68d11499b8658e8caa36dc86f64736f6c634300081b0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH1 0x60 JUMPI PUSH1 0x1F PUSH1 0xB2 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH1 0x64 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH1 0x60 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH1 0x60 JUMPI PUSH1 0x80 MSTORE PUSH1 0x40 MLOAD PUSH1 0x39 SWAP1 DUP2 PUSH1 0x79 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 0xA9 PUSH30 0x26B149F4C03CD27EFA4222C040E10233D68D11499B8658E8CAA36DC86F64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"308:368:48:-:0;;;;;;;;;;;;;-1:-1:-1;;308:368:48;;;;-1:-1:-1;;;;;308:368:48;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;308:368:48;;;;;;409:14;;308:368;;;;;;;;409:14;308:368;;;;;;-1:-1:-1;308:368:48;;;;;;-1:-1:-1;308:368:48;;;;;-1:-1:-1;308:368:48"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212209ea97d26b149f4c03cd27efa4222c040e10233d68d11499b8658e8caa36dc86f64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 0xA9 PUSH30 0x26B149F4C03CD27EFA4222C040E10233D68D11499B8658E8CAA36DC86F64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"308:368:48:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contract that shares the modifier `onlyVault`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":\"VaultGuard\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@openzeppelin/contracts/access/Ownable.sol":{"Ownable":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. The initial owner is set to the address provided by the deployer. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the address provided by the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"}},"@openzeppelin/contracts/access/Ownable2Step.sol":{"Ownable2Step":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"acceptOwnership()":"79ba5097","owner()":"8da5cb5b","pendingOwner()":"e30c3978","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. This extension of the {Ownable} contract includes a two-step mechanism to transfer ownership, where the new owner must call {acceptOwnership} in order to replace the old one. This can help prevent common mistakes, such as transfers of ownership to incorrect accounts, or to contracts that are unable to interact with the permission system. The initial owner is specified at deployment time in the constructor for `Ownable`. This can later be changed with {transferOwnership} and {acceptOwnership}. This module is used through inheritance. It will make available all functions from parent (Ownable).\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable2Step.sol\":\"Ownable2Step\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC1271.sol":{"IERC1271":{"abi":[{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"magicValue","type":"bytes4"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"isValidSignature(bytes32,bytes)":"1626ba7e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"magicValue\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-1271 standard signature validation method for contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\",\"kind\":\"dev\",\"methods\":{\"isValidSignature(bytes32,bytes)\":{\"details\":\"Should return whether the signature provided is valid for the provided data\",\"params\":{\"hash\":\"Hash of the data to be signed\",\"signature\":\"Signature byte array associated with `hash`\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC1271.sol\":\"IERC1271\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x66c7ec42c6c43712be2107a50ab4529379bc76a632b425babec698d9da921ac6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dce2778f0b638adfc5ba29c2c618c855fe725fa74a16846386aa1d56a834aa04\",\"dweb:/ipfs/QmPV9oWnzQdi58od266j62xvviavLNHqKLZfm6k2K1qy9E\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC1363.sol":{"IERC1363":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferFromAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFromAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","approveAndCall(address,uint256)":"3177029f","approveAndCall(address,uint256,bytes)":"cae9ca51","balanceOf(address)":"70a08231","supportsInterface(bytes4)":"01ffc9a7","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferAndCall(address,uint256)":"1296ee62","transferAndCall(address,uint256,bytes)":"4000aea0","transferFrom(address,address,uint256)":"23b872dd","transferFromAndCall(address,address,uint256)":"d8fbe994","transferFromAndCall(address,address,uint256,bytes)":"c1d34b89"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"transferAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"transferFromAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFromAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363]. Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"approveAndCall(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\",\"params\":{\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"approveAndCall(address,uint256,bytes)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `spender`.\",\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferAndCall(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to` and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferAndCall(address,uint256,bytes)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to` and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `to`.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFromAndCall(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"from\":\"The address which you want to send tokens from.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferFromAndCall(address,address,uint256,bytes)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `to`.\",\"from\":\"The address which you want to send tokens from.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}}},\"title\":\"IERC1363\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":\"IERC1363\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"IERC4626":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"assetTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"totalManagedAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","asset()":"38d52e0f","balanceOf(address)":"70a08231","convertToAssets(uint256)":"07a2d13a","convertToShares(uint256)":"c6e6f592","decimals()":"313ce567","deposit(uint256,address)":"6e553f65","maxDeposit(address)":"402d267d","maxMint(address)":"c63d75b6","maxRedeem(address)":"d905777e","maxWithdraw(address)":"ce96cb77","mint(uint256,address)":"94bf804d","name()":"06fdde03","previewDeposit(uint256)":"ef8b30f7","previewMint(uint256)":"b3d7f6b9","previewRedeem(uint256)":"4cdad506","previewWithdraw(uint256)":"0a28a477","redeem(uint256,address,address)":"ba087652","symbol()":"95d89b41","totalAssets()":"01e1d114","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256,address,address)":"b460af94"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"assetTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalManagedAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-4626 \\\"Tokenized Vault Standard\\\", as defined in https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"asset()\":{\"details\":\"Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"convertToAssets(uint256)\":{\"details\":\"Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"convertToShares(uint256)\":{\"details\":\"Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"deposit(uint256,address)\":{\"details\":\"Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"maxDeposit(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert.\"},\"maxMint(address)\":{\"details\":\"Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert.\"},\"maxRedeem(address)\":{\"details\":\"Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert.\"},\"maxWithdraw(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert.\"},\"mint(uint256,address)\":{\"details\":\"Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"previewDeposit(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"previewMint(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting.\"},\"previewRedeem(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their redemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming.\"},\"previewWithdraw(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if called in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"redeem(uint256,address,address)\":{\"details\":\"Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalAssets()\":{\"details\":\"Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"withdraw(uint256,address,address)\":{\"details\":\"Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":\"IERC4626\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"IERC1155Errors":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC1155InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC1155InvalidApprover","type":"error"},{"inputs":[{"internalType":"uint256","name":"idsLength","type":"uint256"},{"internalType":"uint256","name":"valuesLength","type":"uint256"}],"name":"ERC1155InvalidArrayLength","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC1155InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC1155InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC1155InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC1155MissingApprovalForAll","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC1155InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valuesLength\",\"type\":\"uint256\"}],\"name\":\"ERC1155InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC1155MissingApprovalForAll\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-1155 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\",\"errors\":{\"ERC1155InsufficientBalance(address,uint256,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC1155InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC1155InvalidArrayLength(uint256,uint256)\":[{\"details\":\"Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.\",\"params\":{\"idsLength\":\"Length of the array of token identifiers\",\"valuesLength\":\"Length of the array of token amounts\"}}],\"ERC1155InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC1155InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC1155InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC1155MissingApprovalForAll(address,address)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"owner\":\"Address of the current owner of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC1155Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]}},\"version\":1}"},"IERC20Errors":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-20 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC20Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]}},\"version\":1}"},"IERC721Errors":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-721 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\",\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC721Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"ERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. TIP: For a detailed writeup see our guide https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. The default value of {decimals} is 18. To change this, you should override this function so it returns a different value. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC-20 applications.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}. Both values are immutable: they can only be set once during construction.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x86b7b71a6aedefdad89b607378eeab1dcc5389b9ea7d17346d08af01d7190994\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1dc2db8d94a21eac8efe03adf574c419b08536409b416057a2b5b95cb772c43c\",\"dweb:/ipfs/QmZfqJCKVU1ScuX2A7s8WZdQEaikwJbDH5JBrBdKTUT4Gu\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-20 standard as defined in the ERC.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"IERC20Metadata":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC-20 standard.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"SafeERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"currentAllowance","type":"uint256"},{"internalType":"uint256","name":"requestedDecrease","type":"uint256"}],"name":"SafeERC20FailedDecreaseAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220c02e7587c1a65f70d95976176a4a59c967d812468140f9a9a81961c484a31fe064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 0x2E PUSH22 0x87C1A65F70D95976176A4A59C967D812468140F9A9A8 NOT PUSH2 0xC484 LOG3 0x1F 0xE0 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"698:9376:60:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220c02e7587c1a65f70d95976176a4a59c967d812468140f9a9a81961c484a31fe064736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 0x2E PUSH22 0x87C1A65F70D95976176A4A59C967D812468140F9A9A8 NOT PUSH2 0xC484 LOG3 0x1F 0xE0 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"698:9376:60:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentAllowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestedDecrease\",\"type\":\"uint256\"}],\"name\":\"SafeERC20FailedDecreaseAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers around ERC-20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"errors\":{\"SafeERC20FailedDecreaseAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failed `decreaseAllowance` request.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Address.sol":{"Address":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212204385f4cd6447e53a0205cff6ac1dc012b351818d753d8981fc2ec08565c7c51f64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER DUP6 DELEGATECALL 0xCD PUSH5 0x47E53A0205 0xCF 0xF6 0xAC SAR 0xC0 SLT 0xB3 MLOAD DUP2 DUP14 PUSH22 0x3D8981FC2EC08565C7C51F64736F6C634300081B0033 ","sourceMap":"233:5762:61:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212204385f4cd6447e53a0205cff6ac1dc012b351818d753d8981fc2ec08565c7c51f64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER DUP6 DELEGATECALL 0xCD PUSH5 0x47E53A0205 0xCF 0xF6 0xAC SAR 0xC0 SLT 0xB3 MLOAD DUP2 DUP14 PUSH22 0x3D8981FC2EC08565C7C51F64736F6C634300081B0033 ","sourceMap":"233:5762:61:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Arrays.sol":{"Arrays":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220cbd9a331635a2589b744c73b8a85714084d77a1b4148890124e190babea0d78264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCB 0xD9 LOG3 BALANCE PUSH4 0x5A2589B7 PREVRANDAO 0xC7 EXTCODESIZE DUP11 DUP6 PUSH18 0x4084D77A1B4148890124E190BABEA0D78264 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"459:20446:62:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220cbd9a331635a2589b744c73b8a85714084d77a1b4148890124e190babea0d78264736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCB 0xD9 LOG3 BALANCE PUSH4 0x5A2589B7 PREVRANDAO 0xC7 EXTCODESIZE DUP11 DUP6 PUSH18 0x4084D77A1B4148890124E190BABEA0D78264 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"459:20446:62:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to array types.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Arrays.sol\":\"Arrays\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Comparators.sol":{"Comparators":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212209d94b32f08ee29ade43f617a13d834ad280aea2e26fc72cf6d53009e7fea5ad664736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 SWAP5 0xB3 0x2F ADDMOD 0xEE 0x29 0xAD 0xE4 EXTCODEHASH PUSH2 0x7A13 0xD8 CALLVALUE 0xAD 0x28 EXP 0xEA 0x2E 0x26 0xFC PUSH19 0xCF6D53009E7FEA5AD664736F6C634300081B00 CALLER ","sourceMap":"224:218:63:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212209d94b32f08ee29ade43f617a13d834ad280aea2e26fc72cf6d53009e7fea5ad664736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 SWAP5 0xB3 0x2F ADDMOD 0xEE 0x29 0xAD 0xE4 EXTCODEHASH PUSH2 0x7A13 0xD8 CALLVALUE 0xAD 0x28 EXP 0xEA 0x2E 0x26 0xFC PUSH19 0xCF6D53009E7FEA5AD664736F6C634300081B00 CALLER ","sourceMap":"224:218:63:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides a set of functions to compare values. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Comparators.sol\":\"Comparators\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Context.sol":{"Context":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Errors.sol":{"Errors":{"abi":[{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"FailedDeployment","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"MissingPrecompile","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220ab00708f1b97d5c518c4e3df8b698f3e9a310b84361854f4263e8e2911afeb1c64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAB STOP PUSH17 0x8F1B97D5C518C4E3DF8B698F3E9A310B84 CALLDATASIZE XOR SLOAD DELEGATECALL 0x26 RETURNDATACOPY DUP15 0x29 GT 0xAF 0xEB SHR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"411:484:65:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220ab00708f1b97d5c518c4e3df8b698f3e9a310b84361854f4263e8e2911afeb1c64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAB STOP PUSH17 0x8F1B97D5C518C4E3DF8B698F3E9A310B84 CALLDATASIZE XOR SLOAD DELEGATECALL 0x26 RETURNDATACOPY DUP15 0x29 GT 0xAF 0xEB SHR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"411:484:65:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"MissingPrecompile\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of common custom errors used in multiple contracts IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library. It is recommended to avoid relying on the error API for critical functionality. _Available since v5.1._\",\"errors\":{\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"MissingPrecompile(address)\":[{\"details\":\"A necessary precompile is missing.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Errors.sol\":\"Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Panic.sol":{"Panic":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220d3a5982222b30002df369035be4874e942e654df250dc0553547f71f3c32ebdc64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 0xA5 SWAP9 0x22 0x22 0xB3 STOP MUL 0xDF CALLDATASIZE SWAP1 CALLDATALOAD 0xBE BASEFEE PUSH21 0xE942E654DF250DC0553547F71F3C32EBDC64736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"657:1315:66:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220d3a5982222b30002df369035be4874e942e654df250dc0553547f71f3c32ebdc64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 0xA5 SWAP9 0x22 0x22 0xB3 STOP MUL 0xDF CALLDATASIZE SWAP1 CALLDATALOAD 0xBE BASEFEE PUSH21 0xE942E654DF250DC0553547F71F3C32EBDC64736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"657:1315:66:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Helper library for emitting standardized panic codes. ```solidity contract Example { using Panic for uint256; // Use any of the declared internal constants function foo() { Panic.GENERIC.panic(); } // Alternatively function foo() { Panic.panic(Panic.GENERIC); } } ``` Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil]. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"ARRAY_OUT_OF_BOUNDS\":{\"details\":\"array out of bounds access\"},\"ASSERT\":{\"details\":\"used by the assert() builtin\"},\"DIVISION_BY_ZERO\":{\"details\":\"division or modulo by zero\"},\"EMPTY_ARRAY_POP\":{\"details\":\"empty array pop\"},\"ENUM_CONVERSION_ERROR\":{\"details\":\"enum conversion error\"},\"GENERIC\":{\"details\":\"generic / unspecified error\"},\"INVALID_INTERNAL_FUNCTION\":{\"details\":\"calling invalid internal function\"},\"RESOURCE_ERROR\":{\"details\":\"resource error (too large allocation or too large array)\"},\"STORAGE_ENCODING_ERROR\":{\"details\":\"invalid encoding in storage\"},\"UNDER_OVERFLOW\":{\"details\":\"arithmetic underflow or overflow\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Panic.sol\":\"Panic\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/SlotDerivation.sol":{"SlotDerivation":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212201892b12973f073d5474d992dc8add6f831fd6b74ac6b26720bef437f409ab99064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 XOR SWAP3 0xB1 0x29 PUSH20 0xF073D5474D992DC8ADD6F831FD6B74AC6B26720B 0xEF NUMBER PUSH32 0x409AB99064736F6C634300081B00330000000000000000000000000000000000 ","sourceMap":"1599:3723:67:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212201892b12973f073d5474d992dc8add6f831fd6b74ac6b26720bef437f409ab99064736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 XOR SWAP3 0xB1 0x29 PUSH20 0xF073D5474D992DC8ADD6F831FD6B74AC6B26720B 0xEF NUMBER PUSH32 0x409AB99064736F6C634300081B00330000000000000000000000000000000000 ","sourceMap":"1599:3723:67:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for computing storage (and transient storage) locations from namespaces and deriving slots corresponding to standard patterns. The derivation method for array and mapping matches the storage layout used by the solidity language / compiler. See https://docs.soliditylang.org/en/v0.8.20/internals/layout_in_storage.html#mappings-and-dynamic-arrays[Solidity docs for mappings and dynamic arrays.]. Example usage: ```solidity contract Example { // Add the library methods using StorageSlot for bytes32; using SlotDerivation for bytes32; // Declare a namespace string private constant _NAMESPACE = \\\"\\\"; // eg. OpenZeppelin.Slot function setValueInNamespace(uint256 key, address newValue) internal { _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value = newValue; } function getValueInNamespace(uint256 key) internal view returns (address) { return _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value; } } ``` TIP: Consider using this library along with {StorageSlot}. NOTE: This library provides a way to manipulate storage locations in a non-standard way. Tooling for checking upgrade safety will ignore the slots accessed through this library. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/SlotDerivation.sol\":\"SlotDerivation\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/StorageSlot.sol":{"StorageSlot":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122050f73745e69e49cc88dab61e2fa7aa0ad76b60b422dec0938ad4ec0227727c1164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 POP 0xF7 CALLDATACOPY GASLIMIT 0xE6 SWAP15 BLOBHASH 0xCC DUP9 0xDA 0xB6 0x1E 0x2F 0xA7 0xAA EXP 0xD7 PUSH12 0x60B422DEC0938AD4EC022772 PUSH29 0x1164736F6C634300081B00330000000000000000000000000000000000 ","sourceMap":"1407:2774:68:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122050f73745e69e49cc88dab61e2fa7aa0ad76b60b422dec0938ad4ec0227727c1164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 POP 0xF7 CALLDATACOPY GASLIMIT 0xE6 SWAP15 BLOBHASH 0xCC DUP9 0xDA 0xB6 0x1E 0x2F 0xA7 0xAA EXP 0xD7 PUSH12 0x60B422DEC0938AD4EC022772 PUSH29 0x1164736F6C634300081B00330000000000000000000000000000000000 ","sourceMap":"1407:2774:68:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC-1967 implementation slot: ```solidity contract ERC1967 { // Define the slot. Alternatively, use the SlotDerivation library to derive the slot. bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; function _getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } function _setImplementation(address newImplementation) internal { require(newImplementation.code.length > 0); StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } } ``` TIP: Consider using this library along with {SlotDerivation}.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":\"StorageSlot\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"IERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[ERC]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/Math.sol":{"Math":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122087ec85cb5079d131873b16a6f4b17a530d66b2989d93c63b79ade7f83e19b13064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP8 0xEC DUP6 0xCB POP PUSH26 0xD131873B16A6F4B17A530D66B2989D93C63B79ADE7F83E19B130 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"281:31863:70:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122087ec85cb5079d131873b16a6f4b17a530d66b2989d93c63b79ade7f83e19b13064736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP8 0xEC DUP6 0xCB POP PUSH26 0xD131873B16A6F4B17A530D66B2989D93C63B79ADE7F83E19B130 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"281:31863:70:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/Math.sol\":\"Math\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"SafeCast":{"abi":[{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntDowncast","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220702df93c9db3f38b430ad452d58a6ea14360067cf2e8ad9900c318aeb6fd362a64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH17 0x2DF93C9DB3F38B430AD452D58A6EA14360 MOD PUSH29 0xF2E8AD9900C318AEB6FD362A64736F6C634300081B0033000000000000 ","sourceMap":"769:34173:71:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220702df93c9db3f38b430ad452d58a6ea14360067cf2e8ad9900c318aeb6fd362a64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH17 0x2DF93C9DB3F38B430AD452D58A6EA14360 MOD PUSH29 0xF2E8AD9900C318AEB6FD362A64736F6C634300081B0033000000000000 ","sourceMap":"769:34173:71:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"errors\":{\"SafeCastOverflowedIntDowncast(uint8,int256)\":[{\"details\":\"Value doesn't fit in an int of `bits` size.\"}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/structs/EnumerableSet.sol":{"EnumerableSet":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220c0b5b7ddd8fef2ff26e5d1b8c3db2fb9eb5b37c8ccdbd78eddfb09615800e3f264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 0xB5 0xB7 0xDD 0xD8 INVALID CALLCODE SELFDESTRUCT 0x26 0xE5 0xD1 0xB8 0xC3 0xDB 0x2F 0xB9 0xEB JUMPDEST CALLDATACOPY 0xC8 0xCC 0xDB 0xD7 DUP15 0xDD 0xFB MULMOD PUSH2 0x5800 0xE3 CALLCODE PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1586:28038:72:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220c0b5b7ddd8fef2ff26e5d1b8c3db2fb9eb5b37c8ccdbd78eddfb09615800e3f264736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 0xB5 0xB7 0xDD 0xD8 INVALID CALLCODE SELFDESTRUCT 0x26 0xE5 0xD1 0xB8 0xC3 0xDB 0x2F 0xB9 0xEB JUMPDEST CALLDATACOPY 0xC8 0xCC 0xDB 0xD7 DUP15 0xDD 0xFB MULMOD PUSH2 0x5800 0xE3 CALLCODE PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1586:28038:72:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for managing https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types. Sets have the following properties: - Elements are added, removed, and checked for existence in constant time (O(1)). - Elements are enumerated in O(n). No guarantees are made on the ordering. - Set can be cleared (all elements removed) in O(n). ```solidity contract Example { // Add the library methods using EnumerableSet for EnumerableSet.AddressSet; // Declare a set state variable EnumerableSet.AddressSet private mySet; } ``` The following types are supported: - `bytes32` (`Bytes32Set`) since v3.3.0 - `address` (`AddressSet`) since v3.3.0 - `uint256` (`UintSet`) since v3.3.0 - `string` (`StringSet`) since v5.4.0 - `bytes` (`BytesSet`) since v5.4.0 [WARNING] ==== Trying to delete such a structure from storage will likely result in data corruption, rendering the structure unusable. See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an array of EnumerableSet. ====\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":\"EnumerableSet\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]}},\"version\":1}"}},"contracts/BalancerContractRegistry.sol":{"BalancerContractRegistry":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressNotRegistered","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractAliasInUseAsName","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAlreadyDeprecated","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractNameInUseAsAlias","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameNotRegistered","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"InconsistentState","type":"error"},{"inputs":[],"name":"InvalidContractAlias","type":"error"},{"inputs":[],"name":"InvalidContractName","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[],"name":"ZeroContractAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeprecated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"contractAlias","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAliasUpdated","type":"event"},{"inputs":[{"internalType":"string","name":"contractAlias","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"addOrUpdateBalancerContractAlias","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"deprecateBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"deregisterBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"getBalancerContract","outputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"getBalancerContractInfo","outputs":[{"components":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"bool","name":"isRegistered","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"}],"internalType":"struct IBalancerContractRegistry.ContractInfo","name":"info","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"isActiveBalancerContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"isTrustedRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"registerBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461009a57601f6112ec38819003918201601f19168301916001600160401b0383118484101761009e5780849260209460405283398101031261009a57516001600160a01b03811680820361009a57306080521561008b5760a05260405161123990816100b3823960805181610fb7015260a0518181816106c60152818161076701526110c30152f35b630647140b60e51b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080604081815260049182361015610015575f80fd5b5f3560e01c908163264e97e014610cfb575080632967af9614610b0457806341d8c0bb146109f157806344969a9c14610886578063851c1bb3146108365780638554c3271461078b5780638d928af81461073b578063aaabadc514610672578063ae2733a41461059f578063c7f90793146103dd5763e0376ab414610098575f80fd5b346103d95760606003193601126103d957813560058110156103d95760243567ffffffffffffffff81116103d9576100d39036908501610e66565b6044359273ffffffffffffffffffffffffffffffffffffffff948585168095036103d9576100ff611051565b84156103b35782511561038d57845f52602060018152825f209683519761012589610ddc565b549760ff986101368a821683610f14565b89808260081c16151591828685015260101c16151586830152610354575061015d856111db565b90815f525f835280855f205416806102c65750815f5260028352845f2054168061028d57505f525f8152825f20867fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790558251926101be84610ddc565b6101c88685610f14565b8184019060018252600181860193818552895f52525f20935192600584101561026157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000061023a96979862ff000061ff0087549451151560081b169451151560101b16941691161717179055610f70565b907fb12ed936cf481273b3ed037dc706d110c49bd7ba6743e67082cd772a6e9102e25f80a4005b6021907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b836102c2879287519384937f6d4f9990000000000000000000000000000000000000000000000000000000008552840161101d565b0390fd5b846102c288610311878e8b965f5260018252865f20918751926102e884610ddc565b54906102f683831685610f14565b828260081c1615159084015260101c16151586820152610f20565b9361034581519586957fa1e69ed3000000000000000000000000000000000000000000000000000000008752860190610eda565b60248401526044830190610f2d565b518790846005821015610261577f25a14e0c000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b7f830c907e000000000000000000000000000000000000000000000000000000005f525ffd5b7fb4d92c53000000000000000000000000000000000000000000000000000000005f525ffd5b5f80fd5b5090346103d957602091826003193601126103d957813567ffffffffffffffff81116103d9576104109036908401610e66565b90610419611051565b81511561057857610429826111db565b90815f525f855273ffffffffffffffffffffffffffffffffffffffff815f20541694851561053e57855f5260018152815f209282519361046885610ddc565b5461047660ff821686610f14565b60ff808260081c16159182158588015260101c1615158486015261050b575f929160019184528381528284207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055878452528120555191600583101561026157506104e490610f70565b907ffa2e7bfe3791287aa74ffe867372b78e61b60e0516978c4952f83f7416fafb7c5f80a4005b82517f36a7ac0a000000000000000000000000000000000000000000000000000000008152806102c28988838b0161101d565b846102c28584519384937fcd3599f90000000000000000000000000000000000000000000000000000000085528401526024830190610f2d565b827f830c907e000000000000000000000000000000000000000000000000000000005f525ffd5b50346103d957806003193601126103d95781359060058210156103d95773ffffffffffffffffffffffffffffffffffffffff6105d9610db9565b165f526001602052805f209160ff8251936105f385610ddc565b5461060082821686610f14565b818160081c161515602086015260101c1615159283838201528361062b575b60208484519015158152f35b90919250516005811015610646576020935014905f8061061f565b6021847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346103d9575f6003193601126103d95773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561073157926020935f93610702575b505191168152f35b610723919350843d861161072a575b61071b8183610e25565b810190610ff1565b915f6106fa565b503d610711565b83513d5f823e3d90fd5b50346103d9575f6003193601126103d9576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103d95760206003193601126103d95760609073ffffffffffffffffffffffffffffffffffffffff6107bd610d96565b5f8380516107ca81610ddc565b8281528260208201520152165f526001602052805f20908051916107ed83610ddc565b546107fb60ff821684610f14565b6020830160ff8260081c161515815260ff8385019260101c16151582526108258351809551610eda565b511515602084015251151590820152f35b5090346103d95760206003193601126103d95735907fffffffff00000000000000000000000000000000000000000000000000000000821682036103d95761087f602092610f8c565b9051908152f35b50346103d95760206003193601126103d95773ffffffffffffffffffffffffffffffffffffffff6108b5610d96565b6108bd611051565b169182156103b357825f526001602052815f20918051926108dd84610ddc565b54906108ec60ff831685610f14565b602084019060ff8360081c16158015835260ff8287019460101c16151584526109c65782511561099b575f8352855f5260016020525f20935192600584101561026157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000060ff62ff000061ff0087549451151560081b169451151560101b169416911617171790557f07b81cace396ea12f83465895486ac006cd17917e41b9759ad5e663404f1497b5f80a2005b85847f1f118c35000000000000000000000000000000000000000000000000000000005f525260245ffd5b85847ff5b5d364000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346103d957816003193601126103d957803560058110156103d95760243567ffffffffffffffff81116103d957610a2d9036908401610e66565b905f92610a3a5f936111db565b5f525f60205273ffffffffffffffffffffffffffffffffffffffff9182865f205416908115610af1575b8382165f526001602052865f2090875191610a7e83610ddc565b5493610a8d60ff861684610f14565b60ff8560081c1615159283602082015260ff8a82019660101c161515865283610ada575b505050610aca575b505083519216825215156020820152f35b9051909350151591505f80610ab9565b5191925060058210156102615750145f8080610ab1565b9050600260205282865f20541690610a64565b5090346103d957816003193601126103d957803567ffffffffffffffff81116103d957610b349036908301610e66565b610b3c610db9565b91610b45611051565b815115610cd55773ffffffffffffffffffffffffffffffffffffffff809316928315610cae57835f5260209160018352855f20865190610b8482610ddc565b5460ff91610b9483831682610f14565b8883808460081c16159384158985015260101c161515910152610c8357610bba856111db565b92835f525f8552875f20541680610c2d5786610c07878a600289895f52525f20837fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055610f70565b7f06618a6a1a6a413a59097e7c362ee8260afae8f07bd94bc0938e5730584654835f80a3005b85610c4f868a95946102c2945f5260018252865f20918751926102e884610ddc565b9361034581519586957f4466cf0c000000000000000000000000000000000000000000000000000000008752860190610eda565b85827ff5b5d364000000000000000000000000000000000000000000000000000000005f525260245ffd5b507fb4d92c53000000000000000000000000000000000000000000000000000000005f525ffd5b7f907f9fd9000000000000000000000000000000000000000000000000000000005f525ffd5b919050346103d95760206003193601126103d95773ffffffffffffffffffffffffffffffffffffffff610d2c610d96565b165f52600160205260ff815f20610d4284610ddc565b54610d4f82821685610f14565b818160081c161515602085015260101c16151591828282015282610d7a575b60208383519015158152f35b909150519160058310156102615750600260209214905f610d6e565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036103d957565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036103d957565b6060810190811067ffffffffffffffff821117610df857604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610df857604052565b81601f820112156103d95780359067ffffffffffffffff8211610df85760405192610eb960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185610e25565b828452602083830101116103d957815f926020809301838601378301015290565b906005821015610ee75752565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6005821015610ee75752565b516005811015610ee75790565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b602090604051918183925191829101835e81015f815203902090565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152610feb81610ddc565b51902090565b908160209103126103d9575173ffffffffffffffffffffffffffffffffffffffff811681036103d95790565b9073ffffffffffffffffffffffffffffffffffffffff61104a602092959495604085526040850190610f2d565b9416910152565b61107d7fffffffff000000000000000000000000000000000000000000000000000000005f3516610f8c565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111ae5784925f926111b9575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa9182156111ae575f92611177575b50501561114f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116111a7575b61118e8183610e25565b810103126103d9575180151581036103d9575f80611146565b503d611184565b6040513d5f823e3d90fd5b60649192506111d490843d861161072a5761071b8183610e25565b91906110f5565b604051610feb6020828180820195805191829101875e81015f83820152038084520182610e2556fea2646970667358221220ae533797c8ccb00c86c707d40115e8325a9f65d02dbf3131321a1ba62c35008864736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x9A JUMPI PUSH1 0x1F PUSH2 0x12EC CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x9E JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x9A JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 DUP3 SUB PUSH2 0x9A JUMPI ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0x8B JUMPI PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x1239 SWAP1 DUP2 PUSH2 0xB3 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0xFB7 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x6C6 ADD MSTORE DUP2 DUP2 PUSH2 0x767 ADD MSTORE PUSH2 0x10C3 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x264E97E0 EQ PUSH2 0xCFB JUMPI POP DUP1 PUSH4 0x2967AF96 EQ PUSH2 0xB04 JUMPI DUP1 PUSH4 0x41D8C0BB EQ PUSH2 0x9F1 JUMPI DUP1 PUSH4 0x44969A9C EQ PUSH2 0x886 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x836 JUMPI DUP1 PUSH4 0x8554C327 EQ PUSH2 0x78B JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x73B JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x672 JUMPI DUP1 PUSH4 0xAE2733A4 EQ PUSH2 0x59F JUMPI DUP1 PUSH4 0xC7F90793 EQ PUSH2 0x3DD JUMPI PUSH4 0xE0376AB4 EQ PUSH2 0x98 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xD3 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0xE66 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 AND DUP1 SWAP6 SUB PUSH2 0x3D9 JUMPI PUSH2 0xFF PUSH2 0x1051 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x3B3 JUMPI DUP3 MLOAD ISZERO PUSH2 0x38D JUMPI DUP5 PUSH0 MSTORE PUSH1 0x20 PUSH1 0x1 DUP2 MSTORE DUP3 PUSH0 KECCAK256 SWAP7 DUP4 MLOAD SWAP8 PUSH2 0x125 DUP10 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP8 PUSH1 0xFF SWAP9 PUSH2 0x136 DUP11 DUP3 AND DUP4 PUSH2 0xF14 JUMP JUMPDEST DUP10 DUP1 DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP2 DUP3 DUP7 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 DUP4 ADD MSTORE PUSH2 0x354 JUMPI POP PUSH2 0x15D DUP6 PUSH2 0x11DB JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH0 DUP4 MSTORE DUP1 DUP6 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x2C6 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 DUP4 MSTORE DUP5 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x28D JUMPI POP PUSH0 MSTORE PUSH0 DUP2 MSTORE DUP3 PUSH0 KECCAK256 DUP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP3 MLOAD SWAP3 PUSH2 0x1BE DUP5 PUSH2 0xDDC JUMP JUMPDEST PUSH2 0x1C8 DUP7 DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP5 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 DUP2 DUP7 ADD SWAP4 DUP2 DUP6 MSTORE DUP10 PUSH0 MSTORE MSTORE PUSH0 KECCAK256 SWAP4 MLOAD SWAP3 PUSH1 0x5 DUP5 LT ISZERO PUSH2 0x261 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 PUSH2 0x23A SWAP7 SWAP8 SWAP9 PUSH3 0xFF0000 PUSH2 0xFF00 DUP8 SLOAD SWAP5 MLOAD ISZERO ISZERO PUSH1 0x8 SHL AND SWAP5 MLOAD ISZERO ISZERO PUSH1 0x10 SHL AND SWAP5 AND SWAP2 AND OR OR OR SWAP1 SSTORE PUSH2 0xF70 JUMP JUMPDEST SWAP1 PUSH32 0xB12ED936CF481273B3ED037DC706D110C49BD7BA6743E67082CD772A6E9102E2 PUSH0 DUP1 LOG4 STOP JUMPDEST PUSH1 0x21 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 PUSH2 0x2C2 DUP8 SWAP3 DUP8 MLOAD SWAP4 DUP5 SWAP4 PUSH32 0x6D4F999000000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD PUSH2 0x101D JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST DUP5 PUSH2 0x2C2 DUP9 PUSH2 0x311 DUP8 DUP15 DUP12 SWAP7 PUSH0 MSTORE PUSH1 0x1 DUP3 MSTORE DUP7 PUSH0 KECCAK256 SWAP2 DUP8 MLOAD SWAP3 PUSH2 0x2E8 DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x2F6 DUP4 DUP4 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP3 DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP1 DUP5 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 DUP3 ADD MSTORE PUSH2 0xF20 JUMP JUMPDEST SWAP4 PUSH2 0x345 DUP2 MLOAD SWAP6 DUP7 SWAP6 PUSH32 0xA1E69ED300000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD SWAP1 PUSH2 0xEDA JUMP JUMPDEST PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST MLOAD DUP8 SWAP1 DUP5 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x261 JUMPI PUSH32 0x25A14E0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH32 0x830C907E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0xB4D92C5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0x410 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xE66 JUMP JUMPDEST SWAP1 PUSH2 0x419 PUSH2 0x1051 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x578 JUMPI PUSH2 0x429 DUP3 PUSH2 0x11DB JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH0 DUP6 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP5 DUP6 ISZERO PUSH2 0x53E JUMPI DUP6 PUSH0 MSTORE PUSH1 0x1 DUP2 MSTORE DUP2 PUSH0 KECCAK256 SWAP3 DUP3 MLOAD SWAP4 PUSH2 0x468 DUP6 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x476 PUSH1 0xFF DUP3 AND DUP7 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0xFF DUP1 DUP3 PUSH1 0x8 SHR AND ISZERO SWAP2 DUP3 ISZERO DUP6 DUP9 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP5 DUP7 ADD MSTORE PUSH2 0x50B JUMPI PUSH0 SWAP3 SWAP2 PUSH1 0x1 SWAP2 DUP5 MSTORE DUP4 DUP2 MSTORE DUP3 DUP5 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 SLOAD AND SWAP1 SSTORE DUP8 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE MLOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x261 JUMPI POP PUSH2 0x4E4 SWAP1 PUSH2 0xF70 JUMP JUMPDEST SWAP1 PUSH32 0xFA2E7BFE3791287AA74FFE867372B78E61B60E0516978C4952F83F7416FAFB7C PUSH0 DUP1 LOG4 STOP JUMPDEST DUP3 MLOAD PUSH32 0x36A7AC0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP1 PUSH2 0x2C2 DUP10 DUP9 DUP4 DUP12 ADD PUSH2 0x101D JUMP JUMPDEST DUP5 PUSH2 0x2C2 DUP6 DUP5 MLOAD SWAP4 DUP5 SWAP4 PUSH32 0xCD3599F900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST DUP3 PUSH32 0x830C907E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5D9 PUSH2 0xDB9 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SWAP2 PUSH1 0xFF DUP3 MLOAD SWAP4 PUSH2 0x5F3 DUP6 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x600 DUP3 DUP3 AND DUP7 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x8 SHR AND ISZERO ISZERO PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP3 DUP4 DUP4 DUP3 ADD MSTORE DUP4 PUSH2 0x62B JUMPI JUMPDEST PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x646 JUMPI PUSH1 0x20 SWAP4 POP EQ SWAP1 PUSH0 DUP1 PUSH2 0x61F JUMP JUMPDEST PUSH1 0x21 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x731 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x702 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x723 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x72A JUMPI JUMPDEST PUSH2 0x71B DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xFF1 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x6FA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x711 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH1 0x60 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x7BD PUSH2 0xD96 JUMP JUMPDEST PUSH0 DUP4 DUP1 MLOAD PUSH2 0x7CA DUP2 PUSH2 0xDDC JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SWAP1 DUP1 MLOAD SWAP2 PUSH2 0x7ED DUP4 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x7FB PUSH1 0xFF DUP3 AND DUP5 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD PUSH1 0xFF DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO DUP2 MSTORE PUSH1 0xFF DUP4 DUP6 ADD SWAP3 PUSH1 0x10 SHR AND ISZERO ISZERO DUP3 MSTORE PUSH2 0x825 DUP4 MLOAD DUP1 SWAP6 MLOAD PUSH2 0xEDA JUMP JUMPDEST MLOAD ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI PUSH2 0x87F PUSH1 0x20 SWAP3 PUSH2 0xF8C JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x8B5 PUSH2 0xD96 JUMP JUMPDEST PUSH2 0x8BD PUSH2 0x1051 JUMP JUMPDEST AND SWAP2 DUP3 ISZERO PUSH2 0x3B3 JUMPI DUP3 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP3 PUSH2 0x8DD DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x8EC PUSH1 0xFF DUP4 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD SWAP1 PUSH1 0xFF DUP4 PUSH1 0x8 SHR AND ISZERO DUP1 ISZERO DUP4 MSTORE PUSH1 0xFF DUP3 DUP8 ADD SWAP5 PUSH1 0x10 SHR AND ISZERO ISZERO DUP5 MSTORE PUSH2 0x9C6 JUMPI DUP3 MLOAD ISZERO PUSH2 0x99B JUMPI PUSH0 DUP4 MSTORE DUP6 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH0 KECCAK256 SWAP4 MLOAD SWAP3 PUSH1 0x5 DUP5 LT ISZERO PUSH2 0x261 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 PUSH1 0xFF PUSH3 0xFF0000 PUSH2 0xFF00 DUP8 SLOAD SWAP5 MLOAD ISZERO ISZERO PUSH1 0x8 SHL AND SWAP5 MLOAD ISZERO ISZERO PUSH1 0x10 SHL AND SWAP5 AND SWAP2 AND OR OR OR SWAP1 SSTORE PUSH32 0x7B81CACE396EA12F83465895486AC006CD17917E41B9759AD5E663404F1497B PUSH0 DUP1 LOG2 STOP JUMPDEST DUP6 DUP5 PUSH32 0x1F118C3500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP6 DUP5 PUSH32 0xF5B5D36400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xA2D SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xE66 JUMP JUMPDEST SWAP1 PUSH0 SWAP3 PUSH2 0xA3A PUSH0 SWAP4 PUSH2 0x11DB JUMP JUMPDEST PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP7 PUSH0 KECCAK256 SLOAD AND SWAP1 DUP2 ISZERO PUSH2 0xAF1 JUMPI JUMPDEST DUP4 DUP3 AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SWAP1 DUP8 MLOAD SWAP2 PUSH2 0xA7E DUP4 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP4 PUSH2 0xA8D PUSH1 0xFF DUP7 AND DUP5 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0xFF DUP6 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP3 DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP11 DUP3 ADD SWAP7 PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 MSTORE DUP4 PUSH2 0xADA JUMPI JUMPDEST POP POP POP PUSH2 0xACA JUMPI JUMPDEST POP POP DUP4 MLOAD SWAP3 AND DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 MLOAD SWAP1 SWAP4 POP ISZERO ISZERO SWAP2 POP PUSH0 DUP1 PUSH2 0xAB9 JUMP JUMPDEST MLOAD SWAP2 SWAP3 POP PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x261 JUMPI POP EQ PUSH0 DUP1 DUP1 PUSH2 0xAB1 JUMP JUMPDEST SWAP1 POP PUSH1 0x2 PUSH1 0x20 MSTORE DUP3 DUP7 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0xA64 JUMP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xB34 SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0xE66 JUMP JUMPDEST PUSH2 0xB3C PUSH2 0xDB9 JUMP JUMPDEST SWAP2 PUSH2 0xB45 PUSH2 0x1051 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0xCD5 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP4 AND SWAP3 DUP4 ISZERO PUSH2 0xCAE JUMPI DUP4 PUSH0 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x1 DUP4 MSTORE DUP6 PUSH0 KECCAK256 DUP7 MLOAD SWAP1 PUSH2 0xB84 DUP3 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH1 0xFF SWAP2 PUSH2 0xB94 DUP4 DUP4 AND DUP3 PUSH2 0xF14 JUMP JUMPDEST DUP9 DUP4 DUP1 DUP5 PUSH1 0x8 SHR AND ISZERO SWAP4 DUP5 ISZERO DUP10 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP2 ADD MSTORE PUSH2 0xC83 JUMPI PUSH2 0xBBA DUP6 PUSH2 0x11DB JUMP JUMPDEST SWAP3 DUP4 PUSH0 MSTORE PUSH0 DUP6 MSTORE DUP8 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0xC2D JUMPI DUP7 PUSH2 0xC07 DUP8 DUP11 PUSH1 0x2 DUP10 DUP10 PUSH0 MSTORE MSTORE PUSH0 KECCAK256 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0xF70 JUMP JUMPDEST PUSH32 0x6618A6A1A6A413A59097E7C362EE8260AFAE8F07BD94BC0938E573058465483 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP6 PUSH2 0xC4F DUP7 DUP11 SWAP6 SWAP5 PUSH2 0x2C2 SWAP5 PUSH0 MSTORE PUSH1 0x1 DUP3 MSTORE DUP7 PUSH0 KECCAK256 SWAP2 DUP8 MLOAD SWAP3 PUSH2 0x2E8 DUP5 PUSH2 0xDDC JUMP JUMPDEST SWAP4 PUSH2 0x345 DUP2 MLOAD SWAP6 DUP7 SWAP6 PUSH32 0x4466CF0C00000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD SWAP1 PUSH2 0xEDA JUMP JUMPDEST DUP6 DUP3 PUSH32 0xF5B5D36400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH32 0xB4D92C5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0x907F9FD900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xD2C PUSH2 0xD96 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 PUSH2 0xD42 DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0xD4F DUP3 DUP3 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x8 SHR AND ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP2 DUP3 DUP3 DUP3 ADD MSTORE DUP3 PUSH2 0xD7A JUMPI JUMPDEST PUSH1 0x20 DUP4 DUP4 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP MLOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x261 JUMPI POP PUSH1 0x2 PUSH1 0x20 SWAP3 EQ SWAP1 PUSH0 PUSH2 0xD6E JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDF8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDF8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xDF8 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0xEB9 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND ADD DUP6 PUSH2 0xE25 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x3D9 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xEE7 JUMPI MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xEE7 JUMPI MSTORE JUMP JUMPDEST MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0xEE7 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP2 DUP4 SWAP3 MLOAD SWAP2 DUP3 SWAP2 ADD DUP4 MCOPY DUP2 ADD PUSH0 DUP2 MSTORE SUB SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0xFEB DUP2 PUSH2 0xDDC JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x3D9 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x3D9 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x104A PUSH1 0x20 SWAP3 SWAP6 SWAP5 SWAP6 PUSH1 0x40 DUP6 MSTORE PUSH1 0x40 DUP6 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST SWAP5 AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH2 0x107D PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0xF8C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x11AE JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x11B9 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x11AE JUMPI PUSH0 SWAP3 PUSH2 0x1177 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x114F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x11A7 JUMPI JUMPDEST PUSH2 0x118E DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3D9 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x3D9 JUMPI PUSH0 DUP1 PUSH2 0x1146 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1184 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x11D4 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x72A JUMPI PUSH2 0x71B DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x10F5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFEB PUSH1 0x20 DUP3 DUP2 DUP1 DUP3 ADD SWAP6 DUP1 MLOAD SWAP2 DUP3 SWAP2 ADD DUP8 MCOPY DUP2 ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB DUP1 DUP5 MSTORE ADD DUP3 PUSH2 0xE25 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE MSTORE8 CALLDATACOPY SWAP8 0xC8 0xCC 0xB0 0xC DUP7 0xC7 SMOD 0xD4 ADD ISZERO 0xE8 ORIGIN GAS SWAP16 PUSH6 0xD02DBF313132 BYTE SHL 0xA6 0x2C CALLDATALOAD STOP DUP9 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"2741:12089:73:-:0;;;;;;;;;;;;;-1:-1:-1;;2741:12089:73;;;;-1:-1:-1;;;;;2741:12089:73;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2741:12089:73;;;;;;;922:4:47;1347:46:33;;943:28:45;939:79;;1028:14;;2741:12089:73;;;;;;;;1347:46:33;2741:12089:73;;;;;1028:14:45;2741:12089:73;;;;;;;;;;;;;;;;939:79:45;994:13;;;-1:-1:-1;994:13:45;;-1:-1:-1;994:13:45;2741:12089:73;-1:-1:-1;2741:12089:73;;;;;;-1:-1:-1;2741:12089:73;;;;;-1:-1:-1;2741:12089:73"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":3478,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_12134":{"entryPoint":3513,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":4081,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_string":{"entryPoint":3686,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_enum_ContractType":{"entryPoint":3802,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_string":{"entryPoint":3885,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string_address":{"entryPoint":4125,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":3621,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_12135":{"entryPoint":3548,"id":null,"parameterSlots":1,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":4177,"id":4356,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":3980,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_getContractId":{"entryPoint":4571,"id":18178,"parameterSlots":1,"returnSlots":1},"packed_hashed_string_to_string":{"entryPoint":3952,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_memoryt_enum_ContractType":{"entryPoint":3872,"id":null,"parameterSlots":1,"returnSlots":1},"write_to_memory_enum_ContractType":{"entryPoint":3860,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":4023}],"7358":[{"length":32,"start":1734},{"length":32,"start":1895},{"length":32,"start":4291}]},"linkReferences":{},"object":"6080604081815260049182361015610015575f80fd5b5f3560e01c908163264e97e014610cfb575080632967af9614610b0457806341d8c0bb146109f157806344969a9c14610886578063851c1bb3146108365780638554c3271461078b5780638d928af81461073b578063aaabadc514610672578063ae2733a41461059f578063c7f90793146103dd5763e0376ab414610098575f80fd5b346103d95760606003193601126103d957813560058110156103d95760243567ffffffffffffffff81116103d9576100d39036908501610e66565b6044359273ffffffffffffffffffffffffffffffffffffffff948585168095036103d9576100ff611051565b84156103b35782511561038d57845f52602060018152825f209683519761012589610ddc565b549760ff986101368a821683610f14565b89808260081c16151591828685015260101c16151586830152610354575061015d856111db565b90815f525f835280855f205416806102c65750815f5260028352845f2054168061028d57505f525f8152825f20867fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790558251926101be84610ddc565b6101c88685610f14565b8184019060018252600181860193818552895f52525f20935192600584101561026157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000061023a96979862ff000061ff0087549451151560081b169451151560101b16941691161717179055610f70565b907fb12ed936cf481273b3ed037dc706d110c49bd7ba6743e67082cd772a6e9102e25f80a4005b6021907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b836102c2879287519384937f6d4f9990000000000000000000000000000000000000000000000000000000008552840161101d565b0390fd5b846102c288610311878e8b965f5260018252865f20918751926102e884610ddc565b54906102f683831685610f14565b828260081c1615159084015260101c16151586820152610f20565b9361034581519586957fa1e69ed3000000000000000000000000000000000000000000000000000000008752860190610eda565b60248401526044830190610f2d565b518790846005821015610261577f25a14e0c000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b7f830c907e000000000000000000000000000000000000000000000000000000005f525ffd5b7fb4d92c53000000000000000000000000000000000000000000000000000000005f525ffd5b5f80fd5b5090346103d957602091826003193601126103d957813567ffffffffffffffff81116103d9576104109036908401610e66565b90610419611051565b81511561057857610429826111db565b90815f525f855273ffffffffffffffffffffffffffffffffffffffff815f20541694851561053e57855f5260018152815f209282519361046885610ddc565b5461047660ff821686610f14565b60ff808260081c16159182158588015260101c1615158486015261050b575f929160019184528381528284207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055878452528120555191600583101561026157506104e490610f70565b907ffa2e7bfe3791287aa74ffe867372b78e61b60e0516978c4952f83f7416fafb7c5f80a4005b82517f36a7ac0a000000000000000000000000000000000000000000000000000000008152806102c28988838b0161101d565b846102c28584519384937fcd3599f90000000000000000000000000000000000000000000000000000000085528401526024830190610f2d565b827f830c907e000000000000000000000000000000000000000000000000000000005f525ffd5b50346103d957806003193601126103d95781359060058210156103d95773ffffffffffffffffffffffffffffffffffffffff6105d9610db9565b165f526001602052805f209160ff8251936105f385610ddc565b5461060082821686610f14565b818160081c161515602086015260101c1615159283838201528361062b575b60208484519015158152f35b90919250516005811015610646576020935014905f8061061f565b6021847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346103d9575f6003193601126103d95773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561073157926020935f93610702575b505191168152f35b610723919350843d861161072a575b61071b8183610e25565b810190610ff1565b915f6106fa565b503d610711565b83513d5f823e3d90fd5b50346103d9575f6003193601126103d9576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103d95760206003193601126103d95760609073ffffffffffffffffffffffffffffffffffffffff6107bd610d96565b5f8380516107ca81610ddc565b8281528260208201520152165f526001602052805f20908051916107ed83610ddc565b546107fb60ff821684610f14565b6020830160ff8260081c161515815260ff8385019260101c16151582526108258351809551610eda565b511515602084015251151590820152f35b5090346103d95760206003193601126103d95735907fffffffff00000000000000000000000000000000000000000000000000000000821682036103d95761087f602092610f8c565b9051908152f35b50346103d95760206003193601126103d95773ffffffffffffffffffffffffffffffffffffffff6108b5610d96565b6108bd611051565b169182156103b357825f526001602052815f20918051926108dd84610ddc565b54906108ec60ff831685610f14565b602084019060ff8360081c16158015835260ff8287019460101c16151584526109c65782511561099b575f8352855f5260016020525f20935192600584101561026157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000060ff62ff000061ff0087549451151560081b169451151560101b169416911617171790557f07b81cace396ea12f83465895486ac006cd17917e41b9759ad5e663404f1497b5f80a2005b85847f1f118c35000000000000000000000000000000000000000000000000000000005f525260245ffd5b85847ff5b5d364000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346103d957816003193601126103d957803560058110156103d95760243567ffffffffffffffff81116103d957610a2d9036908401610e66565b905f92610a3a5f936111db565b5f525f60205273ffffffffffffffffffffffffffffffffffffffff9182865f205416908115610af1575b8382165f526001602052865f2090875191610a7e83610ddc565b5493610a8d60ff861684610f14565b60ff8560081c1615159283602082015260ff8a82019660101c161515865283610ada575b505050610aca575b505083519216825215156020820152f35b9051909350151591505f80610ab9565b5191925060058210156102615750145f8080610ab1565b9050600260205282865f20541690610a64565b5090346103d957816003193601126103d957803567ffffffffffffffff81116103d957610b349036908301610e66565b610b3c610db9565b91610b45611051565b815115610cd55773ffffffffffffffffffffffffffffffffffffffff809316928315610cae57835f5260209160018352855f20865190610b8482610ddc565b5460ff91610b9483831682610f14565b8883808460081c16159384158985015260101c161515910152610c8357610bba856111db565b92835f525f8552875f20541680610c2d5786610c07878a600289895f52525f20837fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055610f70565b7f06618a6a1a6a413a59097e7c362ee8260afae8f07bd94bc0938e5730584654835f80a3005b85610c4f868a95946102c2945f5260018252865f20918751926102e884610ddc565b9361034581519586957f4466cf0c000000000000000000000000000000000000000000000000000000008752860190610eda565b85827ff5b5d364000000000000000000000000000000000000000000000000000000005f525260245ffd5b507fb4d92c53000000000000000000000000000000000000000000000000000000005f525ffd5b7f907f9fd9000000000000000000000000000000000000000000000000000000005f525ffd5b919050346103d95760206003193601126103d95773ffffffffffffffffffffffffffffffffffffffff610d2c610d96565b165f52600160205260ff815f20610d4284610ddc565b54610d4f82821685610f14565b818160081c161515602085015260101c16151591828282015282610d7a575b60208383519015158152f35b909150519160058310156102615750600260209214905f610d6e565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036103d957565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036103d957565b6060810190811067ffffffffffffffff821117610df857604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610df857604052565b81601f820112156103d95780359067ffffffffffffffff8211610df85760405192610eb960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185610e25565b828452602083830101116103d957815f926020809301838601378301015290565b906005821015610ee75752565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6005821015610ee75752565b516005811015610ee75790565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b602090604051918183925191829101835e81015f815203902090565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152610feb81610ddc565b51902090565b908160209103126103d9575173ffffffffffffffffffffffffffffffffffffffff811681036103d95790565b9073ffffffffffffffffffffffffffffffffffffffff61104a602092959495604085526040850190610f2d565b9416910152565b61107d7fffffffff000000000000000000000000000000000000000000000000000000005f3516610f8c565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111ae5784925f926111b9575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa9182156111ae575f92611177575b50501561114f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116111a7575b61118e8183610e25565b810103126103d9575180151581036103d9575f80611146565b503d611184565b6040513d5f823e3d90fd5b60649192506111d490843d861161072a5761071b8183610e25565b91906110f5565b604051610feb6020828180820195805191829101875e81015f83820152038084520182610e2556fea2646970667358221220ae533797c8ccb00c86c707d40115e8325a9f65d02dbf3131321a1ba62c35008864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x264E97E0 EQ PUSH2 0xCFB JUMPI POP DUP1 PUSH4 0x2967AF96 EQ PUSH2 0xB04 JUMPI DUP1 PUSH4 0x41D8C0BB EQ PUSH2 0x9F1 JUMPI DUP1 PUSH4 0x44969A9C EQ PUSH2 0x886 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x836 JUMPI DUP1 PUSH4 0x8554C327 EQ PUSH2 0x78B JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x73B JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x672 JUMPI DUP1 PUSH4 0xAE2733A4 EQ PUSH2 0x59F JUMPI DUP1 PUSH4 0xC7F90793 EQ PUSH2 0x3DD JUMPI PUSH4 0xE0376AB4 EQ PUSH2 0x98 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xD3 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0xE66 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 AND DUP1 SWAP6 SUB PUSH2 0x3D9 JUMPI PUSH2 0xFF PUSH2 0x1051 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x3B3 JUMPI DUP3 MLOAD ISZERO PUSH2 0x38D JUMPI DUP5 PUSH0 MSTORE PUSH1 0x20 PUSH1 0x1 DUP2 MSTORE DUP3 PUSH0 KECCAK256 SWAP7 DUP4 MLOAD SWAP8 PUSH2 0x125 DUP10 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP8 PUSH1 0xFF SWAP9 PUSH2 0x136 DUP11 DUP3 AND DUP4 PUSH2 0xF14 JUMP JUMPDEST DUP10 DUP1 DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP2 DUP3 DUP7 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 DUP4 ADD MSTORE PUSH2 0x354 JUMPI POP PUSH2 0x15D DUP6 PUSH2 0x11DB JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH0 DUP4 MSTORE DUP1 DUP6 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x2C6 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 DUP4 MSTORE DUP5 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x28D JUMPI POP PUSH0 MSTORE PUSH0 DUP2 MSTORE DUP3 PUSH0 KECCAK256 DUP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP3 MLOAD SWAP3 PUSH2 0x1BE DUP5 PUSH2 0xDDC JUMP JUMPDEST PUSH2 0x1C8 DUP7 DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP5 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 DUP2 DUP7 ADD SWAP4 DUP2 DUP6 MSTORE DUP10 PUSH0 MSTORE MSTORE PUSH0 KECCAK256 SWAP4 MLOAD SWAP3 PUSH1 0x5 DUP5 LT ISZERO PUSH2 0x261 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 PUSH2 0x23A SWAP7 SWAP8 SWAP9 PUSH3 0xFF0000 PUSH2 0xFF00 DUP8 SLOAD SWAP5 MLOAD ISZERO ISZERO PUSH1 0x8 SHL AND SWAP5 MLOAD ISZERO ISZERO PUSH1 0x10 SHL AND SWAP5 AND SWAP2 AND OR OR OR SWAP1 SSTORE PUSH2 0xF70 JUMP JUMPDEST SWAP1 PUSH32 0xB12ED936CF481273B3ED037DC706D110C49BD7BA6743E67082CD772A6E9102E2 PUSH0 DUP1 LOG4 STOP JUMPDEST PUSH1 0x21 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 PUSH2 0x2C2 DUP8 SWAP3 DUP8 MLOAD SWAP4 DUP5 SWAP4 PUSH32 0x6D4F999000000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD PUSH2 0x101D JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST DUP5 PUSH2 0x2C2 DUP9 PUSH2 0x311 DUP8 DUP15 DUP12 SWAP7 PUSH0 MSTORE PUSH1 0x1 DUP3 MSTORE DUP7 PUSH0 KECCAK256 SWAP2 DUP8 MLOAD SWAP3 PUSH2 0x2E8 DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x2F6 DUP4 DUP4 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP3 DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP1 DUP5 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 DUP3 ADD MSTORE PUSH2 0xF20 JUMP JUMPDEST SWAP4 PUSH2 0x345 DUP2 MLOAD SWAP6 DUP7 SWAP6 PUSH32 0xA1E69ED300000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD SWAP1 PUSH2 0xEDA JUMP JUMPDEST PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST MLOAD DUP8 SWAP1 DUP5 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x261 JUMPI PUSH32 0x25A14E0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH32 0x830C907E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0xB4D92C5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0x410 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xE66 JUMP JUMPDEST SWAP1 PUSH2 0x419 PUSH2 0x1051 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x578 JUMPI PUSH2 0x429 DUP3 PUSH2 0x11DB JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH0 DUP6 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP5 DUP6 ISZERO PUSH2 0x53E JUMPI DUP6 PUSH0 MSTORE PUSH1 0x1 DUP2 MSTORE DUP2 PUSH0 KECCAK256 SWAP3 DUP3 MLOAD SWAP4 PUSH2 0x468 DUP6 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x476 PUSH1 0xFF DUP3 AND DUP7 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0xFF DUP1 DUP3 PUSH1 0x8 SHR AND ISZERO SWAP2 DUP3 ISZERO DUP6 DUP9 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP5 DUP7 ADD MSTORE PUSH2 0x50B JUMPI PUSH0 SWAP3 SWAP2 PUSH1 0x1 SWAP2 DUP5 MSTORE DUP4 DUP2 MSTORE DUP3 DUP5 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 SLOAD AND SWAP1 SSTORE DUP8 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE MLOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x261 JUMPI POP PUSH2 0x4E4 SWAP1 PUSH2 0xF70 JUMP JUMPDEST SWAP1 PUSH32 0xFA2E7BFE3791287AA74FFE867372B78E61B60E0516978C4952F83F7416FAFB7C PUSH0 DUP1 LOG4 STOP JUMPDEST DUP3 MLOAD PUSH32 0x36A7AC0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP1 PUSH2 0x2C2 DUP10 DUP9 DUP4 DUP12 ADD PUSH2 0x101D JUMP JUMPDEST DUP5 PUSH2 0x2C2 DUP6 DUP5 MLOAD SWAP4 DUP5 SWAP4 PUSH32 0xCD3599F900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST DUP3 PUSH32 0x830C907E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5D9 PUSH2 0xDB9 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SWAP2 PUSH1 0xFF DUP3 MLOAD SWAP4 PUSH2 0x5F3 DUP6 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x600 DUP3 DUP3 AND DUP7 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x8 SHR AND ISZERO ISZERO PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP3 DUP4 DUP4 DUP3 ADD MSTORE DUP4 PUSH2 0x62B JUMPI JUMPDEST PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x646 JUMPI PUSH1 0x20 SWAP4 POP EQ SWAP1 PUSH0 DUP1 PUSH2 0x61F JUMP JUMPDEST PUSH1 0x21 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x731 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x702 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x723 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x72A JUMPI JUMPDEST PUSH2 0x71B DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xFF1 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x6FA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x711 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH1 0x60 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x7BD PUSH2 0xD96 JUMP JUMPDEST PUSH0 DUP4 DUP1 MLOAD PUSH2 0x7CA DUP2 PUSH2 0xDDC JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SWAP1 DUP1 MLOAD SWAP2 PUSH2 0x7ED DUP4 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x7FB PUSH1 0xFF DUP3 AND DUP5 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD PUSH1 0xFF DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO DUP2 MSTORE PUSH1 0xFF DUP4 DUP6 ADD SWAP3 PUSH1 0x10 SHR AND ISZERO ISZERO DUP3 MSTORE PUSH2 0x825 DUP4 MLOAD DUP1 SWAP6 MLOAD PUSH2 0xEDA JUMP JUMPDEST MLOAD ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI PUSH2 0x87F PUSH1 0x20 SWAP3 PUSH2 0xF8C JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x8B5 PUSH2 0xD96 JUMP JUMPDEST PUSH2 0x8BD PUSH2 0x1051 JUMP JUMPDEST AND SWAP2 DUP3 ISZERO PUSH2 0x3B3 JUMPI DUP3 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP3 PUSH2 0x8DD DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x8EC PUSH1 0xFF DUP4 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD SWAP1 PUSH1 0xFF DUP4 PUSH1 0x8 SHR AND ISZERO DUP1 ISZERO DUP4 MSTORE PUSH1 0xFF DUP3 DUP8 ADD SWAP5 PUSH1 0x10 SHR AND ISZERO ISZERO DUP5 MSTORE PUSH2 0x9C6 JUMPI DUP3 MLOAD ISZERO PUSH2 0x99B JUMPI PUSH0 DUP4 MSTORE DUP6 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH0 KECCAK256 SWAP4 MLOAD SWAP3 PUSH1 0x5 DUP5 LT ISZERO PUSH2 0x261 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 PUSH1 0xFF PUSH3 0xFF0000 PUSH2 0xFF00 DUP8 SLOAD SWAP5 MLOAD ISZERO ISZERO PUSH1 0x8 SHL AND SWAP5 MLOAD ISZERO ISZERO PUSH1 0x10 SHL AND SWAP5 AND SWAP2 AND OR OR OR SWAP1 SSTORE PUSH32 0x7B81CACE396EA12F83465895486AC006CD17917E41B9759AD5E663404F1497B PUSH0 DUP1 LOG2 STOP JUMPDEST DUP6 DUP5 PUSH32 0x1F118C3500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP6 DUP5 PUSH32 0xF5B5D36400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xA2D SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xE66 JUMP JUMPDEST SWAP1 PUSH0 SWAP3 PUSH2 0xA3A PUSH0 SWAP4 PUSH2 0x11DB JUMP JUMPDEST PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP7 PUSH0 KECCAK256 SLOAD AND SWAP1 DUP2 ISZERO PUSH2 0xAF1 JUMPI JUMPDEST DUP4 DUP3 AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SWAP1 DUP8 MLOAD SWAP2 PUSH2 0xA7E DUP4 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP4 PUSH2 0xA8D PUSH1 0xFF DUP7 AND DUP5 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0xFF DUP6 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP3 DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP11 DUP3 ADD SWAP7 PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 MSTORE DUP4 PUSH2 0xADA JUMPI JUMPDEST POP POP POP PUSH2 0xACA JUMPI JUMPDEST POP POP DUP4 MLOAD SWAP3 AND DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 MLOAD SWAP1 SWAP4 POP ISZERO ISZERO SWAP2 POP PUSH0 DUP1 PUSH2 0xAB9 JUMP JUMPDEST MLOAD SWAP2 SWAP3 POP PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x261 JUMPI POP EQ PUSH0 DUP1 DUP1 PUSH2 0xAB1 JUMP JUMPDEST SWAP1 POP PUSH1 0x2 PUSH1 0x20 MSTORE DUP3 DUP7 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0xA64 JUMP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xB34 SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0xE66 JUMP JUMPDEST PUSH2 0xB3C PUSH2 0xDB9 JUMP JUMPDEST SWAP2 PUSH2 0xB45 PUSH2 0x1051 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0xCD5 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP4 AND SWAP3 DUP4 ISZERO PUSH2 0xCAE JUMPI DUP4 PUSH0 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x1 DUP4 MSTORE DUP6 PUSH0 KECCAK256 DUP7 MLOAD SWAP1 PUSH2 0xB84 DUP3 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH1 0xFF SWAP2 PUSH2 0xB94 DUP4 DUP4 AND DUP3 PUSH2 0xF14 JUMP JUMPDEST DUP9 DUP4 DUP1 DUP5 PUSH1 0x8 SHR AND ISZERO SWAP4 DUP5 ISZERO DUP10 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP2 ADD MSTORE PUSH2 0xC83 JUMPI PUSH2 0xBBA DUP6 PUSH2 0x11DB JUMP JUMPDEST SWAP3 DUP4 PUSH0 MSTORE PUSH0 DUP6 MSTORE DUP8 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0xC2D JUMPI DUP7 PUSH2 0xC07 DUP8 DUP11 PUSH1 0x2 DUP10 DUP10 PUSH0 MSTORE MSTORE PUSH0 KECCAK256 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0xF70 JUMP JUMPDEST PUSH32 0x6618A6A1A6A413A59097E7C362EE8260AFAE8F07BD94BC0938E573058465483 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP6 PUSH2 0xC4F DUP7 DUP11 SWAP6 SWAP5 PUSH2 0x2C2 SWAP5 PUSH0 MSTORE PUSH1 0x1 DUP3 MSTORE DUP7 PUSH0 KECCAK256 SWAP2 DUP8 MLOAD SWAP3 PUSH2 0x2E8 DUP5 PUSH2 0xDDC JUMP JUMPDEST SWAP4 PUSH2 0x345 DUP2 MLOAD SWAP6 DUP7 SWAP6 PUSH32 0x4466CF0C00000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD SWAP1 PUSH2 0xEDA JUMP JUMPDEST DUP6 DUP3 PUSH32 0xF5B5D36400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH32 0xB4D92C5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0x907F9FD900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xD2C PUSH2 0xD96 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 PUSH2 0xD42 DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0xD4F DUP3 DUP3 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x8 SHR AND ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP2 DUP3 DUP3 DUP3 ADD MSTORE DUP3 PUSH2 0xD7A JUMPI JUMPDEST PUSH1 0x20 DUP4 DUP4 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP MLOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x261 JUMPI POP PUSH1 0x2 PUSH1 0x20 SWAP3 EQ SWAP1 PUSH0 PUSH2 0xD6E JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDF8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDF8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xDF8 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0xEB9 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND ADD DUP6 PUSH2 0xE25 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x3D9 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xEE7 JUMPI MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xEE7 JUMPI MSTORE JUMP JUMPDEST MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0xEE7 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP2 DUP4 SWAP3 MLOAD SWAP2 DUP3 SWAP2 ADD DUP4 MCOPY DUP2 ADD PUSH0 DUP2 MSTORE SUB SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0xFEB DUP2 PUSH2 0xDDC JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x3D9 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x3D9 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x104A PUSH1 0x20 SWAP3 SWAP6 SWAP5 SWAP6 PUSH1 0x40 DUP6 MSTORE PUSH1 0x40 DUP6 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST SWAP5 AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH2 0x107D PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0xF8C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x11AE JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x11B9 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x11AE JUMPI PUSH0 SWAP3 PUSH2 0x1177 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x114F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x11A7 JUMPI JUMPDEST PUSH2 0x118E DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3D9 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x3D9 JUMPI PUSH0 DUP1 PUSH2 0x1146 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1184 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x11D4 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x72A JUMPI PUSH2 0x71B DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x10F5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFEB PUSH1 0x20 DUP3 DUP2 DUP1 DUP3 ADD SWAP6 DUP1 MLOAD SWAP2 DUP3 SWAP2 ADD DUP8 MCOPY DUP2 ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB DUP1 DUP5 MSTORE ADD DUP3 PUSH2 0xE25 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE MSTORE8 CALLDATACOPY SWAP8 0xC8 0xCC 0xB0 0xC DUP7 0xC7 SMOD 0xD4 ADD ISZERO 0xE8 ORIGIN GAS SWAP16 PUSH6 0xD02DBF313132 BYTE SHL 0xA6 0x2C CALLDATALOAD STOP DUP9 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"2741:12089:73:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1581:26:47;2741:12089:73;1581:26:47;;;2741:12089:73;;;;;;;;;;;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;1525:73:33;;:::i;:::-;7303:29:73;;7299:88;;2741:12089;;7401:31;7397:90;;2741:12089;;;;7572:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;7612:123;;7841:28;;;;:::i;:::-;2741:12089;;;;;;;;;;;;;7956:37;7952:197;;2741:12089;;;;8245:16;2741:12089;;;;;;;8287:34;8283:132;;2741:12089;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8728:124;;;;:::i;:::-;;;;2741:12089;7572:13;2741:12089;;7572:13;8728:124;;;2741:12089;;;;;;;;;;;;;;;;;;;;;8868:71;2741:12089;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8868:71;:::i;:::-;;;2741:12089;8868:71;;2741:12089;;;;;;;;;;;8283:132;2741:12089;8344:60;2741:12089;;;;8344:60;;;;;;;;;:::i;:::-;;;;7952:197;2741:12089;;;8106:17;2741:12089;;;;;;7572:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8106:17;:::i;:::-;2741:12089;;;;8076:62;;;;;;;;2741:12089;;:::i;:::-;;;;;;;;;;:::i;7612:123::-;2741:12089;;;;;;;;;;7656:68;2741:12089;7656:68;2741:12089;;;;;7656:68;7397:90;7455:21;2741:12089;7455:21;2741:12089;7455:21;7299:88;7355:21;2741:12089;7355:21;2741:12089;7355:21;2741:12089;;;;;;;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;;;;;;;;;;;;:::i;:::-;1525:73:33;;;:::i;:::-;2741:12089:73;;9098:31;9094:90;;9256:28;;;:::i;:::-;2741:12089;;;;;;;;;;;;;9364:29;;;9360:106;;2741:12089;;;9503:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;9629:112;;2741:12089;;;9503:13;2741:12089;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9850:78;;;;:::i;:::-;;;2741:12089;9850:78;;2741:12089;9629:112;2741:12089;;9682:48;;;2741:12089;9682:48;2741:12089;;9682:48;;;;:::i;9360:106::-;2741:12089;;;;;9416:39;;;;;;;;2741:12089;;;;;;:::i;9094:90::-;9152:21;;2741:12089;9152:21;2741:12089;9152:21;2741:12089;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;;;;;;;;;;:::i;:::-;;;;13008:13;2741:12089;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13149:50;;;2741:12089;;;;;;;;;;;13149:50;2741:12089;;;;;;;;;;;;;;13166:33;13149:50;;;;;2741:12089;;;;;;;;;;;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;1581:26:47;2741:12089:73;;1581:26:47;;2741:12089:73;1581:26:47;;1124:6:45;;;2741:12089:73;1581:26:47;;;;;;;;;;2741:12089:73;1581:26:47;;;2741:12089:73;;;;;;;;1581:26:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;2741:12089:73;;;;;;;;;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;;1124:6:45;2741:12089:73;;;;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;14436:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;:::i;:::-;1525:73:33;;:::i;:::-;2741:12089:73;10083:29;;;10079:88;;2741:12089;;;10204:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;10300:109;;2741:12089;;;10499:102;;2741:12089;;;;;;10204:13;2741:12089;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10968:43;2741:12089;10968:43;;2741:12089;10499:102;10548:42;;;2741:12089;10548:42;2741:12089;;;10548:42;10300:109;10353:45;;;2741:12089;10353:45;2741:12089;;;10353:45;2741:12089;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13412:13;13458:28;2741:12089;13458:28;;:::i;:::-;2741:12089;;;;;;;;;;;;;13641:31;;;13637:110;;2741:12089;;;;;;13784:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;14100:54;;;2741:12089;14096:158;;;;;2741:12089;;;;;;;;;;;;;;;;14096:158;2741:12089;;14170:35;;-1:-1:-1;2741:12089:73;;;-1:-1:-1;14096:158:73;;;;14100:54;2741:12089;;;-1:-1:-1;2741:12089:73;;;;;;;14121:33;14100:54;;;;;13637:110;2741:12089;;13708:16;2741:12089;;;;;;;;13637:110;;;2741:12089;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;1525:73:33;;;:::i;:::-;2741:12089:73;;11263:32;11259:92;;2741:12089;;;;11365:29;;;11361:88;;2741:12089;;;;;11540:13;2741:12089;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;11580:109;;12074:29;;;:::i;:::-;2741:12089;;;;;;;;;;;;12190:37;12186:193;;2741:12089;12521:52;2741:12089;;12459:16;2741:12089;;;;;;;;;;;;;;;12521:52;:::i;:::-;;2741:12089;12521:52;;2741:12089;12186:193;2741:12089;12335:17;2741:12089;;;;;;;;11540:13;2741:12089;;;;;;;;;;;;:::i;12335:17::-;2741:12089;;;;12310:58;;;;;;;;2741:12089;;:::i;11580:109::-;11633:45;;;2741:12089;11633:45;2741:12089;;;11633:45;11361:88;11417:21;;2741:12089;11417:21;2741:12089;11417:21;11259:92;11318:22;2741:12089;11318:22;2741:12089;11318:22;2741:12089;;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;:::i;:::-;;;;13008:13;2741:12089;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13149:50;;;2741:12089;;;;;;;;;;;13149:50;2741:12089;;;;;;;;;;;;14638:19;2741:12089;;13166:33;13149:50;;;;2741:12089;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;2741:12089:73;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;-1:-1:-1;2741:12089:73;;;;;-1:-1:-1;2741:12089:73;;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2741:12089:73;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;2741:12089:73;;;;;;:::o;1931:430:33:-;2741:12089:73;;;2303:50:33;;;2320:22;;2741:12089:73;;;;;;;2303:50:33;;;;;;:::i;:::-;2741:12089:73;2293:61:33;;1931:430;:::o;2741:12089:73:-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;1688:201:33:-;1762:20;1774:7;;;;1762:20;:::i;:::-;2741:12089:73;;;;1336:22:45;;;:6;;;:22;:6;;;2741:12089:73;1336:22:45;;;;;;;;;1774:7:33;1336:22:45;;;1688:201:33;2741:12089:73;;;;;1336:64:45;;;;;2741:12089:73;1336:64:45;;:22;:64;;2741:12089:73;1820:10:33;2741:12089:73;;;;1394:4:45;2741:12089:73;;;;;1336:64:45;;;;;;;1774:7:33;1336:64:45;;;1688:201:33;1797:34;;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;1336:22:45;1774:7:33;1854:18;1336:64:45;;;;;;;;;;;;;;;;:::i;:::-;;;2741:12089:73;;;;;;;;;;;;1336:64:45;;;;;;;;;;2741:12089:73;;;1774:7:33;2741:12089:73;;;;;1336:22:45;2741:12089:73;1336:22:45;;;;;;;;;;;;;;;:::i;:::-;;;;;14679:149:73;2741:12089;;14790:30;;;;;;;2741:12089;;;;;;;;;;;-1:-1:-1;2741:12089:73;;;;14790:30;;;;;;;:::i"},"methodIdentifiers":{"addOrUpdateBalancerContractAlias(string,address)":"2967af96","deprecateBalancerContract(address)":"44969a9c","deregisterBalancerContract(string)":"c7f90793","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getBalancerContract(uint8,string)":"41d8c0bb","getBalancerContractInfo(address)":"8554c327","getVault()":"8d928af8","isActiveBalancerContract(uint8,address)":"ae2733a4","isTrustedRouter(address)":"264e97e0","registerBalancerContract(uint8,string,address)":"e0376ab4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractAliasInUseAsName\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAlreadyDeprecated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractNameInUseAsAlias\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"InconsistentState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractAlias\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractName\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroContractAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAliasUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"addOrUpdateBalancerContractAlias\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"deprecateBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"deregisterBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"getBalancerContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"getBalancerContractInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"internalType\":\"struct IBalancerContractRegistry.ContractInfo\",\"name\":\"info\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"isActiveBalancerContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"isTrustedRouter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"registerBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Maintain a registry of official Balancer Factories, Routers, Hooks, and valid ERC4626 tokens, for two main purposes. The first is to support the many instances where we need to know that a contract is \\\"trusted\\\" (i.e., is safe and behaves in the required manner). For instance, some hooks depend critically on the identity of the msg.sender, which must be passed down through the Router. Since Routers are permissionless, a malicious one could spoof the sender and \\\"fool\\\" the hook. The hook must therefore \\\"trust\\\" the Router. It is also important for the front-end to know when a particular wrapped token should be used with buffers. Not all \\\"ERC4626\\\" wrapped tokens are fully conforming, and buffer operations with non-conforming tokens may fail in various unexpected ways. It is not enough to simply check whether a buffer exists (e.g., by calling `getBufferAsset`), since best practice is for the pool creator to initialize buffers for all such tokens regardless. They are permissionless, and could otherwise be initialized by anyone in unexpected ways. This registry could be used to keep track of \\\"known good\\\" buffers, such that `isActiveBalancerContract(ContractType.ERC4626,
)` returns true for fully-compliant tokens with properly initialized buffers. Current solutions involve passing in the address of the trusted Router on deployment: but what if it needs to support multiple Routers? Or if the Router is deprecated and replaced? Instead, we can pass the registry address, and query this contract to determine whether the Router is a \\\"trusted\\\" one. The second use case is for off-chain queries, or other protocols that need to easily determine, say, the \\\"latest\\\" Weighted Pool Factory. This contract provides `isActiveBalancerContract(type, address)` for the first case, and `getBalancerContract(type, name)` for the second. It is also possible to query all known information about an address, using `getBalancerContractInfo(address)`, which returns a struct with the detailed state. Note that the `SingletonAuthentication` base contract provides `getVault`, so it is also possible to ask this contract for the Vault address, so it doesn't need to be a type.\",\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"details\":\"Both names and addresses must be unique in the primary registration mapping. Though there are two mappings to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent name => address => state mapping.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractType\":\"The contract type, provided for documentation purposes\"}}],\"ContractAddressNotRegistered(address)\":[{\"details\":\"A contract being deprecated was never registered, or the target of an alias isn't a previously registered contract.\",\"params\":{\"contractAddress\":\"The address of the contract that was not registered\"}}],\"ContractAliasInUseAsName(uint8,string)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractName\":\"The name of the previously registered contract (and proposed alias)\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractAlreadyDeprecated(address)\":[{\"params\":{\"contractAddress\":\"The address of the previously deprecated contract\"}}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"details\":\"Note that names must be unique; it is not possible to register two contracts with the same name and different types, or the same name and different addresses.\",\"params\":{\"contractName\":\"The name of the previously registered contract\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractNameInUseAsAlias(string,address)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractName\":\"The name of the previously registered contract\"}}],\"ContractNameNotRegistered(string)\":[{\"params\":{\"contractName\":\"The name of the unregistered contract\"}}],\"InconsistentState(string,address)\":[{\"details\":\"This should never happen.\",\"params\":{\"contractAddress\":\"The address of the contract with missing state\",\"contractName\":\"The name of the contract that has a registry entry but no contract info\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"details\":\"This sets the `isActive` flag to false.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"BalancerContractDeregistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deregistered\",\"contractName\":\"The name of the contract being deregistered\",\"contractType\":\"The type of contract being deregistered\"}},\"BalancerContractRegistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being registered\",\"contractName\":\"The name of the contract being registered\",\"contractType\":\"The type of contract being registered\"}},\"ContractAliasUpdated(string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deprecated\",\"contractAlias\":\"The alias name\"}}},\"kind\":\"dev\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"details\":\"This is a permissioned function to support querying by a contract alias. For instance, we might create a `WeightedPool` alias meaning the \\\"latest\\\" version of the `WeightedPoolFactory`, so that off-chain users don't need to track specific versions. Once added, an alias can also be updated to point to a different address (e.g., when migrating from the v2 to the v3 weighted pool).\",\"params\":{\"contractAlias\":\"An alternate name that can be used to fetch a contract address\",\"existingContract\":\"The target address of the contract alias\"}},\"deprecateBalancerContract(address)\":{\"details\":\"This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are enforced unique, so either the name or address could be specified in principle.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"deregisterBalancerContract(string)\":{\"details\":\"This is a permissioned function, and makes it possible to correct errors without complex update logic. If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete it, and register it again with the correct data. It must start with the name, as this is the registry key, required for complete deletion. Note that there might still be an alias targeting the address being deleted, but accessing it will just return inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to the correct address.\",\"params\":{\"contractName\":\"The name of the contract being deprecated (cannot be an alias)\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getBalancerContract(uint8,string)\":{\"details\":\"This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias (e.g., `WeightedPool`).\",\"params\":{\"contractName\":\"The name of the contract\",\"contractType\":\"The type of the contract\"},\"returns\":{\"contractAddress\":\"The address of the associated contract, if registered, or zero\",\"isActive\":\"True if the contract was registered and not deprecated\"}},\"getBalancerContractInfo(address)\":{\"params\":{\"contractAddress\":\"The address of the associated contract\"},\"returns\":{\"info\":\"ContractInfo struct corresponding to the address\"}},\"getVault()\":{\"details\":\"This function is virtual to allow for overriding in derived contracts which also inherits contracts with `getVault()` definition.\",\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isActiveBalancerContract(uint8,address)\":{\"params\":{\"contractAddress\":\"The address of the contract\",\"contractType\":\"The type of contract\"},\"returns\":{\"_0\":\"True if the given address is a registered and active contract of the specified type\"}},\"registerBalancerContract(uint8,string,address)\":{\"details\":\"This is a permissioned function, and does only basic validation of the address (non-zero) and the name (not blank). Governance must ensure this is called with valid information. Emits the `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or already in use.\",\"params\":{\"contractAddress\":\"The address of the contract\",\"contractName\":\"A text description of the contract, usually the deployed version (e.g., \\\"v3-pool-weighted\\\")\",\"contractType\":\"The type of contract being registered\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"notice\":\"A contract has already been registered under the given address.\"}],\"ContractAddressNotRegistered(address)\":[{\"notice\":\"An operation that requires a valid contract specified an unrecognized address.\"}],\"ContractAliasInUseAsName(uint8,string)\":[{\"notice\":\"The proposed alias has already been registered as a contract.\"}],\"ContractAlreadyDeprecated(address)\":[{\"notice\":\"Contracts can only be deprecated once.\"}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"notice\":\"A contract has already been registered under the given name.\"}],\"ContractNameInUseAsAlias(string,address)\":[{\"notice\":\"The proposed contract name has already been added as an alias.\"}],\"ContractNameNotRegistered(string)\":[{\"notice\":\"Thrown when attempting to deregister a contract that was not previously registered.\"}],\"InconsistentState(string,address)\":[{\"notice\":\"A `_contractRegistry` entry has no corresponding `_contractInfo`.\"}],\"InvalidContractAlias()\":[{\"notice\":\"Cannot add an empty string as an alias.\"}],\"InvalidContractName()\":[{\"notice\":\"Cannot register (or deregister) a contract with an empty string as a name.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"ZeroContractAddress()\":[{\"notice\":\"Cannot register or deprecate contracts, or add an alias targeting the zero address.\"}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"notice\":\"Emitted when a registered contract is deprecated.\"},\"BalancerContractDeregistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is deregistered (deleted).\"},\"BalancerContractRegistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is registered.\"},\"ContractAliasUpdated(string,address)\":{\"notice\":\"Emitted when an alias is added or updated.\"}},\"kind\":\"user\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"notice\":\"Add an alias for a registered contract.\"},\"deprecateBalancerContract(address)\":{\"notice\":\"Deprecate an official Balancer contract.\"},\"deregisterBalancerContract(string)\":{\"notice\":\"Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getBalancerContract(uint8,string)\":{\"notice\":\"Look up a registered contract by type and name.\"},\"getBalancerContractInfo(address)\":{\"notice\":\"Look up complete information about a registered contract by address.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isActiveBalancerContract(uint8,address)\":{\"notice\":\"Determine whether an address is an official contract of the specified type.\"},\"isTrustedRouter(address)\":{\"notice\":\"Returns `true` if the given address is an active contract under the ROUTER type.\"},\"registerBalancerContract(uint8,string,address)\":{\"notice\":\"Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"}},\"notice\":\"On-chain registry of standard Balancer contracts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/BalancerContractRegistry.sol\":\"BalancerContractRegistry\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x11ec2b653633cbcc6a99d426df178007a98d1154a39a1ada961239be39eec069\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://40eed42ee57746bbf4711bb4aee856328cd70cc02aa3ff05e8dd719868fcd524\",\"dweb:/ipfs/QmX5uAoB9W6UUehgSRvVW6hun3XE53eZwKsm4kHVqtJs8C\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"contracts/BalancerContractRegistry.sol\":{\"keccak256\":\"0xe663b63efd85bfd87be43f71aa1ab26bea25b774d28a7395247dae4c7c574549\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://56b5ebe6871f2531c7c5f640ecc3a71819502aabaed032ae7b1b097c1de6bbec\",\"dweb:/ipfs/QmVNHtCJWMuQcQBq5zbucsTXAHdGpzgGNkvt7TAxHtvxGW\"]}},\"version\":1}"}},"contracts/BalancerFeeBurner.sol":{"BalancerFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IProtocolFeeSweeper","name":"_protocolFeeSweeper","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BurnPathDoesNotExist","type":"error"},{"inputs":[],"name":"InvalidProtocolFeeSweeper","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"inputs":[],"name":"TargetTokenOutMismatch","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"feeTokenAmount","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"feeTokenAmount","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct IBalancerFeeBurner.BurnHookParams","name":"params","type":"tuple"}],"name":"burnHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"feeToken","type":"address"}],"name":"getBurnPath","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"}],"internalType":"struct IBalancerFeeBurner.SwapPathStep[]","name":"steps","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeSweeper","outputs":[{"internalType":"contract IProtocolFeeSweeper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"}],"internalType":"struct IBalancerFeeBurner.SwapPathStep[]","name":"steps","type":"tuple[]"}],"name":"setBurnPath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461013e57601f61162a38819003918201601f19168301916001600160401b038311848410176101425780849260609460405283398101031261013e5780516001600160a01b0391828216820361013e576020810151918383169182840361013e57604001519084821680920361013e57608052801561012b5760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a31561011c5760a0526114d390816101578239608051818181610622015281816107c80152818161093a01528181610a3101528181610c5101528181610d540152610de7015260a0518181816101bd015281816104b201526112530152f35b63932c92a560e01b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f905f3560e01c908163178ac96e1461122957508063715018a6146111a457806379ba5097146110ed5780638da5cb5b146110bb578063c1cfb02a1461103a578063c66472de14610754578063de557a3214610456578063e30c397814610422578063e3746cb21461011d5763f2fde38b1461008c575f80fd5b3461011a57602060031936011261011a576100a5611277565b6100ad61147d565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b503461011a57604060031936011261011a57610137611277565b602480359167ffffffffffffffff9182841161041e573660238501121561041e57836004013592831161041e5760069336828560061b8301011161041a5773ffffffffffffffffffffffffffffffffffffffff90604051937f4ccb20c00000000000000000000000000000000000000000000000000000000085526020948581600481877f0000000000000000000000000000000000000000000000000000000000000000165afa801561040f5784918a916103d1575b5016331415806103c4575b61039c57821680885260029060028652604089208054908a815581610318575b5050885b878110610228578980f35b818a5282875260408a20818a1b8501908054680100000000000000008110156102ec576001918282018082558210156102c0578d52898d20600194939291821b019088906102b2906044908361027f878f016113b5565b16947fffffffffffffffffffffffff000000000000000000000000000000000000000095868254161781550194016113b5565b16908254161790550161021d565b898e7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b888d7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6001907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83168303610370578b5283888c209260011b8301925b838110610360575050610219565b8c81558c83820155018490610352565b878c7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004887f23dada53000000000000000000000000000000000000000000000000000000008152fd5b50828854163314156101f9565b809250878092503d8311610408575b6103ea818361129a565b81010312610404575183811681036104045783905f6101ee565b8880fd5b503d6103e0565b6040513d8b823e3d90fd5b8580fd5b8480fd5b503461011a578060031936011261011a57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461011a5760e060031936011261011a57610470611277565b60243573ffffffffffffffffffffffffffffffffffffffff9182821680920361075057606435928084168094036107505760a4359381851680950361075057817f0000000000000000000000000000000000000000000000000000000000000000163303610728576040519261010084019567ffffffffffffffff96858110888211176106ec5784928391604052168552602095828787019433865260408801928352606088016044358152608089019182528260a08a0194608435865260c08b019687528160e08c019960c4358b528d826040519e8f9283017fc66472de00000000000000000000000000000000000000000000000000000000905251169060240152511660448c0152511660648a0152516084890152511660a48701525160c4860152511660e484015251610104908184015282526101409182810191818310868411176106ec57828791816040527f48c894910000000000000000000000000000000000000000000000000000000082528661014485015281837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08661061d61016482018261143a565b0301927f0000000000000000000000000000000000000000000000000000000000000000165af1801561071d57610652578580f35b3d8087843e610661818461129a565b81019184828585019403126107195751908582116107195701918161015f8401121561041a57820151916101609483116106ec578594604051926106cc867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116018561129a565b84845281858401011161041a578391018483015e0101525f808080808580f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8680fd5b6040513d88823e3d90fd5b6004867f23dada53000000000000000000000000000000000000000000000000000000008152fd5b5f80fd5b503461075057610100600319360112610750577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6110125760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610fe65760e4354211610fbe5773ffffffffffffffffffffffffffffffffffffffff60443516604435036107505760843573ffffffffffffffffffffffffffffffffffffffff81168103610750576108436044356112db565b91825190817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810111610f915773ffffffffffffffffffffffffffffffffffffffff831673ffffffffffffffffffffffffffffffffffffffff60206108ca7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8601886113d6565b5101511603610f695760243573ffffffffffffffffffffffffffffffffffffffff811680910361075057604051907f23b872dd000000000000000000000000000000000000000000000000000000006020830152602482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660448201526064356064820152606481528060a081011067ffffffffffffffff60a0830111176106ec575f8160a0602093016040528281519101826044355af115610cf3575f513d610f60575073ffffffffffffffffffffffffffffffffffffffff604435163b155b610f1c576040517f15afd40900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff60443516600482015260643560248201526020816044815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610cf357610eed575b50604435935f916064355b8251841015610d3257610a7c84846113d6565b519073ffffffffffffffffffffffffffffffffffffffff8251169073ffffffffffffffffffffffffffffffffffffffff602084015116907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff880187145f14610d2b5760a435915b6040519384602081011067ffffffffffffffff6020870111176106ec57602085016040525f85526040519b8c67ffffffffffffffff60e08281810110920111176106ec5773ffffffffffffffffffffffffffffffffffffffff9160208e60e081016040525f815201521660408c015260608b015260808a015260a089015260c0880152604051967f2bfb780c000000000000000000000000000000000000000000000000000000008852602060048901528051906002821015610cfe5788610c3760c08293606095602485015273ffffffffffffffffffffffffffffffffffffffff602082015116604485015273ffffffffffffffffffffffffffffffffffffffff604082015116606485015273ffffffffffffffffffffffffffffffffffffffff86820151166084850152608081015160a485015260a081015160c4850152015160e060e484015261010483019061143a565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1968715610cf3575f97610ca8575b5073ffffffffffffffffffffffffffffffffffffffff602060019201511696930192610a69565b9096506060813d606011610ceb575b81610cc46060938361129a565b8101031261075057604001519573ffffffffffffffffffffffffffffffffffffffff610c81565b3d9150610cb7565b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f91610ae3565b859087610d3d611417565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156107505773ffffffffffffffffffffffffffffffffffffffff9081604051937fae6393290000000000000000000000000000000000000000000000000000000085521660048401521660248201528160448201525f816064818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610cf357610ed0575b506004359173ffffffffffffffffffffffffffffffffffffffff83168093036107505773ffffffffffffffffffffffffffffffffffffffff9081610e56611417565b604051946064358652602086015216604084015216917f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d606073ffffffffffffffffffffffffffffffffffffffff6044351693a4807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b90925067ffffffffffffffff81116106ec576040525f9183610e14565b6020813d602011610f14575b81610f066020938361129a565b810103126107505751610a5e565b3d9150610ef9565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff6044351660045260245ffd5b600114156109c3565b7fa682e903000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7fe08b8af0000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610750576020806003193601126107505761105c611057611277565b6112db565b60405190828201838352815180915283604084019201935f5b8281106110825784840385f35b8551805173ffffffffffffffffffffffffffffffffffffffff908116865290830151168483015294810194604090930192600101611075565b34610750575f60031936011261075057602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610750575f6003193601126107505760015473ffffffffffffffffffffffffffffffffffffffff3381831603611178577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b34610750575f600319360112610750576111bc61147d565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610750575f6003193601126107505760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361075057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106ec57604052565b9073ffffffffffffffffffffffffffffffffffffffff8092165f52600260206002815260409160405f209485549267ffffffffffffffff968785116106ec57916040519761132e838760051b018a61129a565b8589525f93845282842091838a015b87861061137e5750505050505050505081511561135657565b7ff9aa0315000000000000000000000000000000000000000000000000000000005f5260045ffd5b8851898101818110858211176106ec57600192899288928d528588541681528585890154168382015281520194019501949261133d565b3573ffffffffffffffffffffffffffffffffffffffff811681036107505790565b80518210156113ea5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b60c43573ffffffffffffffffffffffffffffffffffffffff811681036107505790565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f541633036111785756fea2646970667358221220bdadc1f960d3e63533605b5824854ab1992a4aaef56fd475a3e09a574f3dbd5164736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x13E JUMPI PUSH1 0x1F PUSH2 0x162A CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x142 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x60 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x13E JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND DUP3 SUB PUSH2 0x13E JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP2 DUP4 DUP4 AND SWAP2 DUP3 DUP5 SUB PUSH2 0x13E JUMPI PUSH1 0x40 ADD MLOAD SWAP1 DUP5 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x13E JUMPI PUSH1 0x80 MSTORE DUP1 ISZERO PUSH2 0x12B JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ISZERO PUSH2 0x11C JUMPI PUSH1 0xA0 MSTORE PUSH2 0x14D3 SWAP1 DUP2 PUSH2 0x157 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH2 0x622 ADD MSTORE DUP2 DUP2 PUSH2 0x7C8 ADD MSTORE DUP2 DUP2 PUSH2 0x93A ADD MSTORE DUP2 DUP2 PUSH2 0xA31 ADD MSTORE DUP2 DUP2 PUSH2 0xC51 ADD MSTORE DUP2 DUP2 PUSH2 0xD54 ADD MSTORE PUSH2 0xDE7 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1BD ADD MSTORE DUP2 DUP2 PUSH2 0x4B2 ADD MSTORE PUSH2 0x1253 ADD MSTORE RETURN JUMPDEST PUSH4 0x932C92A5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP1 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x178AC96E EQ PUSH2 0x1229 JUMPI POP DUP1 PUSH4 0x715018A6 EQ PUSH2 0x11A4 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x10ED JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x10BB JUMPI DUP1 PUSH4 0xC1CFB02A EQ PUSH2 0x103A JUMPI DUP1 PUSH4 0xC66472DE EQ PUSH2 0x754 JUMPI DUP1 PUSH4 0xDE557A32 EQ PUSH2 0x456 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x422 JUMPI DUP1 PUSH4 0xE3746CB2 EQ PUSH2 0x11D JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0x8C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x11A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH2 0xA5 PUSH2 0x1277 JUMP JUMPDEST PUSH2 0xAD PUSH2 0x147D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE DUP3 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x11A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH2 0x137 PUSH2 0x1277 JUMP JUMPDEST PUSH1 0x24 DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 GT PUSH2 0x41E JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x41E JUMPI DUP4 PUSH1 0x4 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0x41E JUMPI PUSH1 0x6 SWAP4 CALLDATASIZE DUP3 DUP6 PUSH1 0x6 SHL DUP4 ADD ADD GT PUSH2 0x41A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 DUP2 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x40F JUMPI DUP5 SWAP2 DUP11 SWAP2 PUSH2 0x3D1 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0x3C4 JUMPI JUMPDEST PUSH2 0x39C JUMPI DUP3 AND DUP1 DUP9 MSTORE PUSH1 0x2 SWAP1 PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 DUP10 KECCAK256 DUP1 SLOAD SWAP1 DUP11 DUP2 SSTORE DUP2 PUSH2 0x318 JUMPI JUMPDEST POP POP DUP9 JUMPDEST DUP8 DUP2 LT PUSH2 0x228 JUMPI DUP10 DUP1 RETURN JUMPDEST DUP2 DUP11 MSTORE DUP3 DUP8 MSTORE PUSH1 0x40 DUP11 KECCAK256 DUP2 DUP11 SHL DUP6 ADD SWAP1 DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x2EC JUMPI PUSH1 0x1 SWAP2 DUP3 DUP3 ADD DUP1 DUP3 SSTORE DUP3 LT ISZERO PUSH2 0x2C0 JUMPI DUP14 MSTORE DUP10 DUP14 KECCAK256 PUSH1 0x1 SWAP5 SWAP4 SWAP3 SWAP2 DUP3 SHL ADD SWAP1 DUP9 SWAP1 PUSH2 0x2B2 SWAP1 PUSH1 0x44 SWAP1 DUP4 PUSH2 0x27F DUP8 DUP16 ADD PUSH2 0x13B5 JUMP JUMPDEST AND SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP6 DUP7 DUP3 SLOAD AND OR DUP2 SSTORE ADD SWAP5 ADD PUSH2 0x13B5 JUMP JUMPDEST AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE ADD PUSH2 0x21D JUMP JUMPDEST DUP10 DUP15 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE REVERT JUMPDEST DUP9 DUP14 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH1 0x1 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP4 SUB PUSH2 0x370 JUMPI DUP12 MSTORE DUP4 DUP9 DUP13 KECCAK256 SWAP3 PUSH1 0x1 SHL DUP4 ADD SWAP3 JUMPDEST DUP4 DUP2 LT PUSH2 0x360 JUMPI POP POP PUSH2 0x219 JUMP JUMPDEST DUP13 DUP2 SSTORE DUP13 DUP4 DUP3 ADD SSTORE ADD DUP5 SWAP1 PUSH2 0x352 JUMP JUMPDEST DUP8 DUP13 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP9 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP DUP3 DUP9 SLOAD AND CALLER EQ ISZERO PUSH2 0x1F9 JUMP JUMPDEST DUP1 SWAP3 POP DUP8 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x408 JUMPI JUMPDEST PUSH2 0x3EA DUP2 DUP4 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x404 JUMPI MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x404 JUMPI DUP4 SWAP1 PUSH0 PUSH2 0x1EE JUMP JUMPDEST DUP9 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x3E0 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x11A JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x11A JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH2 0x470 PUSH2 0x1277 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x750 JUMPI PUSH1 0x64 CALLDATALOAD SWAP3 DUP1 DUP5 AND DUP1 SWAP5 SUB PUSH2 0x750 JUMPI PUSH1 0xA4 CALLDATALOAD SWAP4 DUP2 DUP6 AND DUP1 SWAP6 SUB PUSH2 0x750 JUMPI DUP2 PUSH32 0x0 AND CALLER SUB PUSH2 0x728 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x100 DUP5 ADD SWAP6 PUSH8 0xFFFFFFFFFFFFFFFF SWAP7 DUP6 DUP2 LT DUP9 DUP3 GT OR PUSH2 0x6EC JUMPI DUP5 SWAP3 DUP4 SWAP2 PUSH1 0x40 MSTORE AND DUP6 MSTORE PUSH1 0x20 SWAP6 DUP3 DUP8 DUP8 ADD SWAP5 CALLER DUP7 MSTORE PUSH1 0x40 DUP9 ADD SWAP3 DUP4 MSTORE PUSH1 0x60 DUP9 ADD PUSH1 0x44 CALLDATALOAD DUP2 MSTORE PUSH1 0x80 DUP10 ADD SWAP2 DUP3 MSTORE DUP3 PUSH1 0xA0 DUP11 ADD SWAP5 PUSH1 0x84 CALLDATALOAD DUP7 MSTORE PUSH1 0xC0 DUP12 ADD SWAP7 DUP8 MSTORE DUP2 PUSH1 0xE0 DUP13 ADD SWAP10 PUSH1 0xC4 CALLDATALOAD DUP12 MSTORE DUP14 DUP3 PUSH1 0x40 MLOAD SWAP15 DUP16 SWAP3 DUP4 ADD PUSH32 0xC66472DE00000000000000000000000000000000000000000000000000000000 SWAP1 MSTORE MLOAD AND SWAP1 PUSH1 0x24 ADD MSTORE MLOAD AND PUSH1 0x44 DUP13 ADD MSTORE MLOAD AND PUSH1 0x64 DUP11 ADD MSTORE MLOAD PUSH1 0x84 DUP10 ADD MSTORE MLOAD AND PUSH1 0xA4 DUP8 ADD MSTORE MLOAD PUSH1 0xC4 DUP7 ADD MSTORE MLOAD AND PUSH1 0xE4 DUP5 ADD MSTORE MLOAD PUSH2 0x104 SWAP1 DUP2 DUP5 ADD MSTORE DUP3 MSTORE PUSH2 0x140 SWAP2 DUP3 DUP2 ADD SWAP2 DUP2 DUP4 LT DUP7 DUP5 GT OR PUSH2 0x6EC JUMPI DUP3 DUP8 SWAP2 DUP2 PUSH1 0x40 MSTORE PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH2 0x144 DUP6 ADD MSTORE DUP2 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC0 DUP7 PUSH2 0x61D PUSH2 0x164 DUP3 ADD DUP3 PUSH2 0x143A JUMP JUMPDEST SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x71D JUMPI PUSH2 0x652 JUMPI DUP6 DUP1 RETURN JUMPDEST RETURNDATASIZE DUP1 DUP8 DUP5 RETURNDATACOPY PUSH2 0x661 DUP2 DUP5 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SWAP2 DUP5 DUP3 DUP6 DUP6 ADD SWAP5 SUB SLT PUSH2 0x719 JUMPI MLOAD SWAP1 DUP6 DUP3 GT PUSH2 0x719 JUMPI ADD SWAP2 DUP2 PUSH2 0x15F DUP5 ADD SLT ISZERO PUSH2 0x41A JUMPI DUP3 ADD MLOAD SWAP2 PUSH2 0x160 SWAP5 DUP4 GT PUSH2 0x6EC JUMPI DUP6 SWAP5 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x6CC DUP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP9 ADD AND ADD DUP6 PUSH2 0x129A JUMP JUMPDEST DUP5 DUP5 MSTORE DUP2 DUP6 DUP5 ADD ADD GT PUSH2 0x41A JUMPI DUP4 SWAP2 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE PUSH0 DUP1 DUP1 DUP1 DUP1 DUP6 DUP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP7 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x750 JUMPI PUSH2 0x100 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x1012 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0xFE6 JUMPI PUSH1 0xE4 CALLDATALOAD TIMESTAMP GT PUSH2 0xFBE JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD SUB PUSH2 0x750 JUMPI PUSH1 0x84 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x750 JUMPI PUSH2 0x843 PUSH1 0x44 CALLDATALOAD PUSH2 0x12DB JUMP JUMPDEST SWAP2 DUP3 MLOAD SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD GT PUSH2 0xF91 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 PUSH2 0x8CA PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 ADD DUP9 PUSH2 0x13D6 JUMP JUMPDEST MLOAD ADD MLOAD AND SUB PUSH2 0xF69 JUMPI PUSH1 0x24 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x750 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE DUP1 PUSH1 0xA0 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP4 ADD GT OR PUSH2 0x6EC JUMPI PUSH0 DUP2 PUSH1 0xA0 PUSH1 0x20 SWAP4 ADD PUSH1 0x40 MSTORE DUP3 DUP2 MLOAD SWAP2 ADD DUP3 PUSH1 0x44 CALLDATALOAD GAS CALL ISZERO PUSH2 0xCF3 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0xF60 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0xF1C JUMPI PUSH1 0x40 MLOAD PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xCF3 JUMPI PUSH2 0xEED JUMPI JUMPDEST POP PUSH1 0x44 CALLDATALOAD SWAP4 PUSH0 SWAP2 PUSH1 0x64 CALLDATALOAD JUMPDEST DUP3 MLOAD DUP5 LT ISZERO PUSH2 0xD32 JUMPI PUSH2 0xA7C DUP5 DUP5 PUSH2 0x13D6 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD AND SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP5 ADD MLOAD AND SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 ADD DUP8 EQ PUSH0 EQ PUSH2 0xD2B JUMPI PUSH1 0xA4 CALLDATALOAD SWAP2 JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH1 0x20 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x20 DUP8 ADD GT OR PUSH2 0x6EC JUMPI PUSH1 0x20 DUP6 ADD PUSH1 0x40 MSTORE PUSH0 DUP6 MSTORE PUSH1 0x40 MLOAD SWAP12 DUP13 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xE0 DUP3 DUP2 DUP2 ADD LT SWAP3 ADD GT OR PUSH2 0x6EC JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x20 DUP15 PUSH1 0xE0 DUP2 ADD PUSH1 0x40 MSTORE PUSH0 DUP2 MSTORE ADD MSTORE AND PUSH1 0x40 DUP13 ADD MSTORE PUSH1 0x60 DUP12 ADD MSTORE PUSH1 0x80 DUP11 ADD MSTORE PUSH1 0xA0 DUP10 ADD MSTORE PUSH1 0xC0 DUP9 ADD MSTORE PUSH1 0x40 MLOAD SWAP7 PUSH32 0x2BFB780C00000000000000000000000000000000000000000000000000000000 DUP9 MSTORE PUSH1 0x20 PUSH1 0x4 DUP10 ADD MSTORE DUP1 MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0xCFE JUMPI DUP9 PUSH2 0xC37 PUSH1 0xC0 DUP3 SWAP4 PUSH1 0x60 SWAP6 PUSH1 0x24 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x44 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x64 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP3 ADD MLOAD AND PUSH1 0x84 DUP6 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA4 DUP6 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC4 DUP6 ADD MSTORE ADD MLOAD PUSH1 0xE0 PUSH1 0xE4 DUP5 ADD MSTORE PUSH2 0x104 DUP4 ADD SWAP1 PUSH2 0x143A JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP7 DUP8 ISZERO PUSH2 0xCF3 JUMPI PUSH0 SWAP8 PUSH2 0xCA8 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 PUSH1 0x1 SWAP3 ADD MLOAD AND SWAP7 SWAP4 ADD SWAP3 PUSH2 0xA69 JUMP JUMPDEST SWAP1 SWAP7 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0xCEB JUMPI JUMPDEST DUP2 PUSH2 0xCC4 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x750 JUMPI PUSH1 0x40 ADD MLOAD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xC81 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCB7 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP2 PUSH2 0xAE3 JUMP JUMPDEST DUP6 SWAP1 DUP8 PUSH2 0xD3D PUSH2 0x1417 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x750 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE DUP2 PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xCF3 JUMPI PUSH2 0xED0 JUMPI JUMPDEST POP PUSH1 0x4 CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP1 SWAP4 SUB PUSH2 0x750 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH2 0xE56 PUSH2 0x1417 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 PUSH1 0x64 CALLDATALOAD DUP7 MSTORE PUSH1 0x20 DUP7 ADD MSTORE AND PUSH1 0x40 DUP5 ADD MSTORE AND SWAP2 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND SWAP4 LOG4 DUP1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST SWAP1 SWAP3 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6EC JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF14 JUMPI JUMPDEST DUP2 PUSH2 0xF06 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x750 JUMPI MLOAD PUSH2 0xA5E JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xEF9 JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x9C3 JUMP JUMPDEST PUSH32 0xA682E90300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH2 0x105C PUSH2 0x1057 PUSH2 0x1277 JUMP JUMPDEST PUSH2 0x12DB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP3 DUP3 ADD DUP4 DUP4 MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE DUP4 PUSH1 0x40 DUP5 ADD SWAP3 ADD SWAP4 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1082 JUMPI DUP5 DUP5 SUB DUP6 RETURN JUMPDEST DUP6 MLOAD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP7 MSTORE SWAP1 DUP4 ADD MLOAD AND DUP5 DUP4 ADD MSTORE SWAP5 DUP2 ADD SWAP5 PUSH1 0x40 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1075 JUMP JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0x1178 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH2 0x11BC PUSH2 0x147D JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x750 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x6EC JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 SWAP2 PUSH1 0x40 PUSH0 KECCAK256 SWAP5 DUP6 SLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP6 GT PUSH2 0x6EC JUMPI SWAP2 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x132E DUP4 DUP8 PUSH1 0x5 SHL ADD DUP11 PUSH2 0x129A JUMP JUMPDEST DUP6 DUP10 MSTORE PUSH0 SWAP4 DUP5 MSTORE DUP3 DUP5 KECCAK256 SWAP2 DUP4 DUP11 ADD JUMPDEST DUP8 DUP7 LT PUSH2 0x137E JUMPI POP POP POP POP POP POP POP POP POP DUP2 MLOAD ISZERO PUSH2 0x1356 JUMPI JUMP JUMPDEST PUSH32 0xF9AA031500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP9 MLOAD DUP10 DUP2 ADD DUP2 DUP2 LT DUP6 DUP3 GT OR PUSH2 0x6EC JUMPI PUSH1 0x1 SWAP3 DUP10 SWAP3 DUP9 SWAP3 DUP14 MSTORE DUP6 DUP9 SLOAD AND DUP2 MSTORE DUP6 DUP6 DUP10 ADD SLOAD AND DUP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP5 ADD SWAP6 ADD SWAP5 SWAP3 PUSH2 0x133D JUMP JUMPDEST CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x750 JUMPI SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x13EA JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xC4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x750 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x1178 JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBD 0xAD 0xC1 0xF9 PUSH1 0xD3 0xE6 CALLDATALOAD CALLER PUSH1 0x5B PC 0x24 DUP6 BLOBBASEFEE 0xB1 SWAP10 0x2A BLOBBASEFEE 0xAE CREATE2 PUSH16 0xD475A3E09A574F3DBD5164736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1118:3855:74:-:0;;;;;;;;;;;;;-1:-1:-1;;1118:3855:74;;;;-1:-1:-1;;;;;1118:3855:74;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1118:3855:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;409:14:48;;1273:26:49;;1269:95;;1118:3855:74;;;;;;;;2093:20:50;1118:3855:74;;2093:20:50;1118:3855:74;;-1:-1:-1;1118:3855:74;;;;;-1:-1:-1;1118:3855:74;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1203:42:78;1199:107;;1316:40;1541::74;1118:3855;;;;;;409:14:48;1118:3855:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1316:40:78;1118:3855:74;;;;;;;;;;;;;;;;1199:107:78;1268:27;;;-1:-1:-1;1268:27:78;;-1:-1:-1;1268:27:78;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;1118:3855:74;;-1:-1:-1;1322:31:49;1118:3855:74;-1:-1:-1;1118:3855:74;;;;;;-1:-1:-1;1118:3855:74;;;;;-1:-1:-1;1118:3855:74"},"deployedBytecode":{"functionDebugData":{"abi_decode_contract_IERC20":{"entryPoint":4727,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_bytes":{"entryPoint":5178,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":4762,"id":null,"parameterSlots":2,"returnSlots":0},"fun_checkOwner":{"entryPoint":5245,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_getBurnPath":{"entryPoint":4827,"id":18312,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_struct_SwapPathStep_dyn":{"entryPoint":5078,"id":null,"parameterSlots":2,"returnSlots":1},"read_from_calldatat_address":{"entryPoint":5143,"id":null,"parameterSlots":0,"returnSlots":1},"read_from_calldatat_contract_IERC20":{"entryPoint":5045,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"9299":[{"length":32,"start":1570},{"length":32,"start":1992},{"length":32,"start":2362},{"length":32,"start":2609},{"length":32,"start":3153},{"length":32,"start":3412},{"length":32,"start":3559}],"19771":[{"length":32,"start":445},{"length":32,"start":1202},{"length":32,"start":4691}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f905f3560e01c908163178ac96e1461122957508063715018a6146111a457806379ba5097146110ed5780638da5cb5b146110bb578063c1cfb02a1461103a578063c66472de14610754578063de557a3214610456578063e30c397814610422578063e3746cb21461011d5763f2fde38b1461008c575f80fd5b3461011a57602060031936011261011a576100a5611277565b6100ad61147d565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b503461011a57604060031936011261011a57610137611277565b602480359167ffffffffffffffff9182841161041e573660238501121561041e57836004013592831161041e5760069336828560061b8301011161041a5773ffffffffffffffffffffffffffffffffffffffff90604051937f4ccb20c00000000000000000000000000000000000000000000000000000000085526020948581600481877f0000000000000000000000000000000000000000000000000000000000000000165afa801561040f5784918a916103d1575b5016331415806103c4575b61039c57821680885260029060028652604089208054908a815581610318575b5050885b878110610228578980f35b818a5282875260408a20818a1b8501908054680100000000000000008110156102ec576001918282018082558210156102c0578d52898d20600194939291821b019088906102b2906044908361027f878f016113b5565b16947fffffffffffffffffffffffff000000000000000000000000000000000000000095868254161781550194016113b5565b16908254161790550161021d565b898e7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b888d7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6001907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83168303610370578b5283888c209260011b8301925b838110610360575050610219565b8c81558c83820155018490610352565b878c7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004887f23dada53000000000000000000000000000000000000000000000000000000008152fd5b50828854163314156101f9565b809250878092503d8311610408575b6103ea818361129a565b81010312610404575183811681036104045783905f6101ee565b8880fd5b503d6103e0565b6040513d8b823e3d90fd5b8580fd5b8480fd5b503461011a578060031936011261011a57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461011a5760e060031936011261011a57610470611277565b60243573ffffffffffffffffffffffffffffffffffffffff9182821680920361075057606435928084168094036107505760a4359381851680950361075057817f0000000000000000000000000000000000000000000000000000000000000000163303610728576040519261010084019567ffffffffffffffff96858110888211176106ec5784928391604052168552602095828787019433865260408801928352606088016044358152608089019182528260a08a0194608435865260c08b019687528160e08c019960c4358b528d826040519e8f9283017fc66472de00000000000000000000000000000000000000000000000000000000905251169060240152511660448c0152511660648a0152516084890152511660a48701525160c4860152511660e484015251610104908184015282526101409182810191818310868411176106ec57828791816040527f48c894910000000000000000000000000000000000000000000000000000000082528661014485015281837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08661061d61016482018261143a565b0301927f0000000000000000000000000000000000000000000000000000000000000000165af1801561071d57610652578580f35b3d8087843e610661818461129a565b81019184828585019403126107195751908582116107195701918161015f8401121561041a57820151916101609483116106ec578594604051926106cc867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116018561129a565b84845281858401011161041a578391018483015e0101525f808080808580f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8680fd5b6040513d88823e3d90fd5b6004867f23dada53000000000000000000000000000000000000000000000000000000008152fd5b5f80fd5b503461075057610100600319360112610750577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6110125760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610fe65760e4354211610fbe5773ffffffffffffffffffffffffffffffffffffffff60443516604435036107505760843573ffffffffffffffffffffffffffffffffffffffff81168103610750576108436044356112db565b91825190817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810111610f915773ffffffffffffffffffffffffffffffffffffffff831673ffffffffffffffffffffffffffffffffffffffff60206108ca7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8601886113d6565b5101511603610f695760243573ffffffffffffffffffffffffffffffffffffffff811680910361075057604051907f23b872dd000000000000000000000000000000000000000000000000000000006020830152602482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660448201526064356064820152606481528060a081011067ffffffffffffffff60a0830111176106ec575f8160a0602093016040528281519101826044355af115610cf3575f513d610f60575073ffffffffffffffffffffffffffffffffffffffff604435163b155b610f1c576040517f15afd40900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff60443516600482015260643560248201526020816044815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610cf357610eed575b50604435935f916064355b8251841015610d3257610a7c84846113d6565b519073ffffffffffffffffffffffffffffffffffffffff8251169073ffffffffffffffffffffffffffffffffffffffff602084015116907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff880187145f14610d2b5760a435915b6040519384602081011067ffffffffffffffff6020870111176106ec57602085016040525f85526040519b8c67ffffffffffffffff60e08281810110920111176106ec5773ffffffffffffffffffffffffffffffffffffffff9160208e60e081016040525f815201521660408c015260608b015260808a015260a089015260c0880152604051967f2bfb780c000000000000000000000000000000000000000000000000000000008852602060048901528051906002821015610cfe5788610c3760c08293606095602485015273ffffffffffffffffffffffffffffffffffffffff602082015116604485015273ffffffffffffffffffffffffffffffffffffffff604082015116606485015273ffffffffffffffffffffffffffffffffffffffff86820151166084850152608081015160a485015260a081015160c4850152015160e060e484015261010483019061143a565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1968715610cf3575f97610ca8575b5073ffffffffffffffffffffffffffffffffffffffff602060019201511696930192610a69565b9096506060813d606011610ceb575b81610cc46060938361129a565b8101031261075057604001519573ffffffffffffffffffffffffffffffffffffffff610c81565b3d9150610cb7565b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f91610ae3565b859087610d3d611417565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156107505773ffffffffffffffffffffffffffffffffffffffff9081604051937fae6393290000000000000000000000000000000000000000000000000000000085521660048401521660248201528160448201525f816064818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610cf357610ed0575b506004359173ffffffffffffffffffffffffffffffffffffffff83168093036107505773ffffffffffffffffffffffffffffffffffffffff9081610e56611417565b604051946064358652602086015216604084015216917f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d606073ffffffffffffffffffffffffffffffffffffffff6044351693a4807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b90925067ffffffffffffffff81116106ec576040525f9183610e14565b6020813d602011610f14575b81610f066020938361129a565b810103126107505751610a5e565b3d9150610ef9565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff6044351660045260245ffd5b600114156109c3565b7fa682e903000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7fe08b8af0000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610750576020806003193601126107505761105c611057611277565b6112db565b60405190828201838352815180915283604084019201935f5b8281106110825784840385f35b8551805173ffffffffffffffffffffffffffffffffffffffff908116865290830151168483015294810194604090930192600101611075565b34610750575f60031936011261075057602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610750575f6003193601126107505760015473ffffffffffffffffffffffffffffffffffffffff3381831603611178577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b34610750575f600319360112610750576111bc61147d565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610750575f6003193601126107505760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361075057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106ec57604052565b9073ffffffffffffffffffffffffffffffffffffffff8092165f52600260206002815260409160405f209485549267ffffffffffffffff968785116106ec57916040519761132e838760051b018a61129a565b8589525f93845282842091838a015b87861061137e5750505050505050505081511561135657565b7ff9aa0315000000000000000000000000000000000000000000000000000000005f5260045ffd5b8851898101818110858211176106ec57600192899288928d528588541681528585890154168382015281520194019501949261133d565b3573ffffffffffffffffffffffffffffffffffffffff811681036107505790565b80518210156113ea5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b60c43573ffffffffffffffffffffffffffffffffffffffff811681036107505790565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f541633036111785756fea2646970667358221220bdadc1f960d3e63533605b5824854ab1992a4aaef56fd475a3e09a574f3dbd5164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP1 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x178AC96E EQ PUSH2 0x1229 JUMPI POP DUP1 PUSH4 0x715018A6 EQ PUSH2 0x11A4 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x10ED JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x10BB JUMPI DUP1 PUSH4 0xC1CFB02A EQ PUSH2 0x103A JUMPI DUP1 PUSH4 0xC66472DE EQ PUSH2 0x754 JUMPI DUP1 PUSH4 0xDE557A32 EQ PUSH2 0x456 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x422 JUMPI DUP1 PUSH4 0xE3746CB2 EQ PUSH2 0x11D JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0x8C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x11A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH2 0xA5 PUSH2 0x1277 JUMP JUMPDEST PUSH2 0xAD PUSH2 0x147D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE DUP3 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x11A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH2 0x137 PUSH2 0x1277 JUMP JUMPDEST PUSH1 0x24 DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 GT PUSH2 0x41E JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x41E JUMPI DUP4 PUSH1 0x4 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0x41E JUMPI PUSH1 0x6 SWAP4 CALLDATASIZE DUP3 DUP6 PUSH1 0x6 SHL DUP4 ADD ADD GT PUSH2 0x41A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 DUP2 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x40F JUMPI DUP5 SWAP2 DUP11 SWAP2 PUSH2 0x3D1 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0x3C4 JUMPI JUMPDEST PUSH2 0x39C JUMPI DUP3 AND DUP1 DUP9 MSTORE PUSH1 0x2 SWAP1 PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 DUP10 KECCAK256 DUP1 SLOAD SWAP1 DUP11 DUP2 SSTORE DUP2 PUSH2 0x318 JUMPI JUMPDEST POP POP DUP9 JUMPDEST DUP8 DUP2 LT PUSH2 0x228 JUMPI DUP10 DUP1 RETURN JUMPDEST DUP2 DUP11 MSTORE DUP3 DUP8 MSTORE PUSH1 0x40 DUP11 KECCAK256 DUP2 DUP11 SHL DUP6 ADD SWAP1 DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x2EC JUMPI PUSH1 0x1 SWAP2 DUP3 DUP3 ADD DUP1 DUP3 SSTORE DUP3 LT ISZERO PUSH2 0x2C0 JUMPI DUP14 MSTORE DUP10 DUP14 KECCAK256 PUSH1 0x1 SWAP5 SWAP4 SWAP3 SWAP2 DUP3 SHL ADD SWAP1 DUP9 SWAP1 PUSH2 0x2B2 SWAP1 PUSH1 0x44 SWAP1 DUP4 PUSH2 0x27F DUP8 DUP16 ADD PUSH2 0x13B5 JUMP JUMPDEST AND SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP6 DUP7 DUP3 SLOAD AND OR DUP2 SSTORE ADD SWAP5 ADD PUSH2 0x13B5 JUMP JUMPDEST AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE ADD PUSH2 0x21D JUMP JUMPDEST DUP10 DUP15 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE REVERT JUMPDEST DUP9 DUP14 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH1 0x1 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP4 SUB PUSH2 0x370 JUMPI DUP12 MSTORE DUP4 DUP9 DUP13 KECCAK256 SWAP3 PUSH1 0x1 SHL DUP4 ADD SWAP3 JUMPDEST DUP4 DUP2 LT PUSH2 0x360 JUMPI POP POP PUSH2 0x219 JUMP JUMPDEST DUP13 DUP2 SSTORE DUP13 DUP4 DUP3 ADD SSTORE ADD DUP5 SWAP1 PUSH2 0x352 JUMP JUMPDEST DUP8 DUP13 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP9 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP DUP3 DUP9 SLOAD AND CALLER EQ ISZERO PUSH2 0x1F9 JUMP JUMPDEST DUP1 SWAP3 POP DUP8 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x408 JUMPI JUMPDEST PUSH2 0x3EA DUP2 DUP4 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x404 JUMPI MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x404 JUMPI DUP4 SWAP1 PUSH0 PUSH2 0x1EE JUMP JUMPDEST DUP9 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x3E0 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x11A JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x11A JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH2 0x470 PUSH2 0x1277 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x750 JUMPI PUSH1 0x64 CALLDATALOAD SWAP3 DUP1 DUP5 AND DUP1 SWAP5 SUB PUSH2 0x750 JUMPI PUSH1 0xA4 CALLDATALOAD SWAP4 DUP2 DUP6 AND DUP1 SWAP6 SUB PUSH2 0x750 JUMPI DUP2 PUSH32 0x0 AND CALLER SUB PUSH2 0x728 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x100 DUP5 ADD SWAP6 PUSH8 0xFFFFFFFFFFFFFFFF SWAP7 DUP6 DUP2 LT DUP9 DUP3 GT OR PUSH2 0x6EC JUMPI DUP5 SWAP3 DUP4 SWAP2 PUSH1 0x40 MSTORE AND DUP6 MSTORE PUSH1 0x20 SWAP6 DUP3 DUP8 DUP8 ADD SWAP5 CALLER DUP7 MSTORE PUSH1 0x40 DUP9 ADD SWAP3 DUP4 MSTORE PUSH1 0x60 DUP9 ADD PUSH1 0x44 CALLDATALOAD DUP2 MSTORE PUSH1 0x80 DUP10 ADD SWAP2 DUP3 MSTORE DUP3 PUSH1 0xA0 DUP11 ADD SWAP5 PUSH1 0x84 CALLDATALOAD DUP7 MSTORE PUSH1 0xC0 DUP12 ADD SWAP7 DUP8 MSTORE DUP2 PUSH1 0xE0 DUP13 ADD SWAP10 PUSH1 0xC4 CALLDATALOAD DUP12 MSTORE DUP14 DUP3 PUSH1 0x40 MLOAD SWAP15 DUP16 SWAP3 DUP4 ADD PUSH32 0xC66472DE00000000000000000000000000000000000000000000000000000000 SWAP1 MSTORE MLOAD AND SWAP1 PUSH1 0x24 ADD MSTORE MLOAD AND PUSH1 0x44 DUP13 ADD MSTORE MLOAD AND PUSH1 0x64 DUP11 ADD MSTORE MLOAD PUSH1 0x84 DUP10 ADD MSTORE MLOAD AND PUSH1 0xA4 DUP8 ADD MSTORE MLOAD PUSH1 0xC4 DUP7 ADD MSTORE MLOAD AND PUSH1 0xE4 DUP5 ADD MSTORE MLOAD PUSH2 0x104 SWAP1 DUP2 DUP5 ADD MSTORE DUP3 MSTORE PUSH2 0x140 SWAP2 DUP3 DUP2 ADD SWAP2 DUP2 DUP4 LT DUP7 DUP5 GT OR PUSH2 0x6EC JUMPI DUP3 DUP8 SWAP2 DUP2 PUSH1 0x40 MSTORE PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH2 0x144 DUP6 ADD MSTORE DUP2 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC0 DUP7 PUSH2 0x61D PUSH2 0x164 DUP3 ADD DUP3 PUSH2 0x143A JUMP JUMPDEST SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x71D JUMPI PUSH2 0x652 JUMPI DUP6 DUP1 RETURN JUMPDEST RETURNDATASIZE DUP1 DUP8 DUP5 RETURNDATACOPY PUSH2 0x661 DUP2 DUP5 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SWAP2 DUP5 DUP3 DUP6 DUP6 ADD SWAP5 SUB SLT PUSH2 0x719 JUMPI MLOAD SWAP1 DUP6 DUP3 GT PUSH2 0x719 JUMPI ADD SWAP2 DUP2 PUSH2 0x15F DUP5 ADD SLT ISZERO PUSH2 0x41A JUMPI DUP3 ADD MLOAD SWAP2 PUSH2 0x160 SWAP5 DUP4 GT PUSH2 0x6EC JUMPI DUP6 SWAP5 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x6CC DUP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP9 ADD AND ADD DUP6 PUSH2 0x129A JUMP JUMPDEST DUP5 DUP5 MSTORE DUP2 DUP6 DUP5 ADD ADD GT PUSH2 0x41A JUMPI DUP4 SWAP2 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE PUSH0 DUP1 DUP1 DUP1 DUP1 DUP6 DUP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP7 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x750 JUMPI PUSH2 0x100 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x1012 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0xFE6 JUMPI PUSH1 0xE4 CALLDATALOAD TIMESTAMP GT PUSH2 0xFBE JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD SUB PUSH2 0x750 JUMPI PUSH1 0x84 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x750 JUMPI PUSH2 0x843 PUSH1 0x44 CALLDATALOAD PUSH2 0x12DB JUMP JUMPDEST SWAP2 DUP3 MLOAD SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD GT PUSH2 0xF91 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 PUSH2 0x8CA PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 ADD DUP9 PUSH2 0x13D6 JUMP JUMPDEST MLOAD ADD MLOAD AND SUB PUSH2 0xF69 JUMPI PUSH1 0x24 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x750 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE DUP1 PUSH1 0xA0 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP4 ADD GT OR PUSH2 0x6EC JUMPI PUSH0 DUP2 PUSH1 0xA0 PUSH1 0x20 SWAP4 ADD PUSH1 0x40 MSTORE DUP3 DUP2 MLOAD SWAP2 ADD DUP3 PUSH1 0x44 CALLDATALOAD GAS CALL ISZERO PUSH2 0xCF3 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0xF60 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0xF1C JUMPI PUSH1 0x40 MLOAD PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xCF3 JUMPI PUSH2 0xEED JUMPI JUMPDEST POP PUSH1 0x44 CALLDATALOAD SWAP4 PUSH0 SWAP2 PUSH1 0x64 CALLDATALOAD JUMPDEST DUP3 MLOAD DUP5 LT ISZERO PUSH2 0xD32 JUMPI PUSH2 0xA7C DUP5 DUP5 PUSH2 0x13D6 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD AND SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP5 ADD MLOAD AND SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 ADD DUP8 EQ PUSH0 EQ PUSH2 0xD2B JUMPI PUSH1 0xA4 CALLDATALOAD SWAP2 JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH1 0x20 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x20 DUP8 ADD GT OR PUSH2 0x6EC JUMPI PUSH1 0x20 DUP6 ADD PUSH1 0x40 MSTORE PUSH0 DUP6 MSTORE PUSH1 0x40 MLOAD SWAP12 DUP13 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xE0 DUP3 DUP2 DUP2 ADD LT SWAP3 ADD GT OR PUSH2 0x6EC JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x20 DUP15 PUSH1 0xE0 DUP2 ADD PUSH1 0x40 MSTORE PUSH0 DUP2 MSTORE ADD MSTORE AND PUSH1 0x40 DUP13 ADD MSTORE PUSH1 0x60 DUP12 ADD MSTORE PUSH1 0x80 DUP11 ADD MSTORE PUSH1 0xA0 DUP10 ADD MSTORE PUSH1 0xC0 DUP9 ADD MSTORE PUSH1 0x40 MLOAD SWAP7 PUSH32 0x2BFB780C00000000000000000000000000000000000000000000000000000000 DUP9 MSTORE PUSH1 0x20 PUSH1 0x4 DUP10 ADD MSTORE DUP1 MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0xCFE JUMPI DUP9 PUSH2 0xC37 PUSH1 0xC0 DUP3 SWAP4 PUSH1 0x60 SWAP6 PUSH1 0x24 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x44 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x64 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP3 ADD MLOAD AND PUSH1 0x84 DUP6 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA4 DUP6 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC4 DUP6 ADD MSTORE ADD MLOAD PUSH1 0xE0 PUSH1 0xE4 DUP5 ADD MSTORE PUSH2 0x104 DUP4 ADD SWAP1 PUSH2 0x143A JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP7 DUP8 ISZERO PUSH2 0xCF3 JUMPI PUSH0 SWAP8 PUSH2 0xCA8 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 PUSH1 0x1 SWAP3 ADD MLOAD AND SWAP7 SWAP4 ADD SWAP3 PUSH2 0xA69 JUMP JUMPDEST SWAP1 SWAP7 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0xCEB JUMPI JUMPDEST DUP2 PUSH2 0xCC4 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x750 JUMPI PUSH1 0x40 ADD MLOAD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xC81 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCB7 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP2 PUSH2 0xAE3 JUMP JUMPDEST DUP6 SWAP1 DUP8 PUSH2 0xD3D PUSH2 0x1417 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x750 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE DUP2 PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xCF3 JUMPI PUSH2 0xED0 JUMPI JUMPDEST POP PUSH1 0x4 CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP1 SWAP4 SUB PUSH2 0x750 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH2 0xE56 PUSH2 0x1417 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 PUSH1 0x64 CALLDATALOAD DUP7 MSTORE PUSH1 0x20 DUP7 ADD MSTORE AND PUSH1 0x40 DUP5 ADD MSTORE AND SWAP2 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND SWAP4 LOG4 DUP1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST SWAP1 SWAP3 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6EC JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF14 JUMPI JUMPDEST DUP2 PUSH2 0xF06 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x750 JUMPI MLOAD PUSH2 0xA5E JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xEF9 JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x9C3 JUMP JUMPDEST PUSH32 0xA682E90300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH2 0x105C PUSH2 0x1057 PUSH2 0x1277 JUMP JUMPDEST PUSH2 0x12DB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP3 DUP3 ADD DUP4 DUP4 MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE DUP4 PUSH1 0x40 DUP5 ADD SWAP3 ADD SWAP4 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1082 JUMPI DUP5 DUP5 SUB DUP6 RETURN JUMPDEST DUP6 MLOAD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP7 MSTORE SWAP1 DUP4 ADD MLOAD AND DUP5 DUP4 ADD MSTORE SWAP5 DUP2 ADD SWAP5 PUSH1 0x40 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1075 JUMP JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0x1178 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH2 0x11BC PUSH2 0x147D JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x750 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x6EC JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 SWAP2 PUSH1 0x40 PUSH0 KECCAK256 SWAP5 DUP6 SLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP6 GT PUSH2 0x6EC JUMPI SWAP2 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x132E DUP4 DUP8 PUSH1 0x5 SHL ADD DUP11 PUSH2 0x129A JUMP JUMPDEST DUP6 DUP10 MSTORE PUSH0 SWAP4 DUP5 MSTORE DUP3 DUP5 KECCAK256 SWAP2 DUP4 DUP11 ADD JUMPDEST DUP8 DUP7 LT PUSH2 0x137E JUMPI POP POP POP POP POP POP POP POP POP DUP2 MLOAD ISZERO PUSH2 0x1356 JUMPI JUMP JUMPDEST PUSH32 0xF9AA031500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP9 MLOAD DUP10 DUP2 ADD DUP2 DUP2 LT DUP6 DUP3 GT OR PUSH2 0x6EC JUMPI PUSH1 0x1 SWAP3 DUP10 SWAP3 DUP9 SWAP3 DUP14 MSTORE DUP6 DUP9 SLOAD AND DUP2 MSTORE DUP6 DUP6 DUP10 ADD SLOAD AND DUP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP5 ADD SWAP6 ADD SWAP5 SWAP3 PUSH2 0x133D JUMP JUMPDEST CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x750 JUMPI SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x13EA JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xC4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x750 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x1178 JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBD 0xAD 0xC1 0xF9 PUSH1 0xD3 0xE6 CALLDATALOAD CALLER PUSH1 0x5B PC 0x24 DUP6 BLOBBASEFEE 0xB1 SWAP10 0x2A BLOBBASEFEE 0xAE CREATE2 PUSH16 0xD475A3E09A574F3DBD5164736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1118:3855:74:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1118:3855:74;;;;;;;:::i;:::-;1500:62:49;;:::i;:::-;1118:3855:74;;;;;;;1738:24:50;1118:3855:74;;;1738:24:50;1118:3855:74;;;;1777:43:50;;;;1118:3855:74;;;;;;;;;;;-1:-1:-1;;1118:3855:74;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;956:36:78;1118:3855:74;956:36:78;;1118:3855:74;956:18:78;;;1118:3855:74;956:18:78;;;1118:3855:74;956:36:78;;;;;;;;;;;;1118:3855:74;;;942:10:78;:50;;:75;;;1118:3855:74;938:131:78;;1118:3855:74;;;;;1752:10;1118:3855;1752:10;1118:3855;;;;;;;;;;;;;;;1788:13;;;1803:16;;;;;;1118:3855;;;1821:3;1118:3855;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1788:13;;1118:3855;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;938:131:78;1118:3855:74;1040:18:78;;;;;942:75;1118:3855:74;;;;;942:10:78;996:21;;942:75;;956:36;;;;;;;;;;;;;;;;;;:::i;:::-;;;1118:3855:74;;;;;;;;;;;;956:36:78;;;;;1118:3855:74;;;;956:36:78;;;;;;1118:3855:74;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1118:3855:74;;;;;;;1311:13:50;1118:3855:74;;;;;;;;;;;;;;-1:-1:-1;;1118:3855:74;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;799:18:78;;1118:3855:74;777:10:78;:41;773:97;;1118:3855:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;2557:374;;;;;777:10:78;;1118:3855:74;;;2557:374;;1118:3855;;;;2557:374;;1118:3855;;;;;2557:374;;1118:3855;;;2557:374;1118:3855;2557:374;;1118:3855;;;;;;2557:374;;1118:3855;;;2557:374;1118:3855;2557:374;;1118:3855;;;;;;;;;2481:464;;;;;;;;1118:3855;;2481:464;1118:3855;2481:464;1118:3855;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2481:464;;1118:3855;;;;;;;;;;;;;;;;;;;;;;2454:501;;;;;;1118:3855;;;2454:501;1118:3855;;;;;;;:::i;:::-;2454:501;;:6;;1118:3855;2454:501;;;;;;;;1118:3855;;;2454:501;;;;;;;;;;:::i;:::-;;;;;;;;;1118:3855;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;2454:501;;;;;1118:3855;;;;;;;;;;;;;;;;;2454:501;1118:3855;;;;;;;;;773:97:78;1118:3855:74;841:18:78;;;;;1118:3855:74;;;;;;;;;;-1:-1:-1;;1118:3855:74;;;;;551:66:42;2806:53:43;1316:93:42;;1529:4;551:66;3051:52:43;1118:3855:74;586:6:48;1118:3855:74;564:10:48;:29;560:108;;3234:15:74;1118:3855;3216:15;:33;3212:85;;1118:3855;3325:15;1118:3855;;3325:15;1118:3855;;;;3371:18;1118:3855;;;;;;;;3486:21;3325:15;1118:3855;3486:21;:::i;:::-;1118:3855;;;;;;;;;;;;;;;3571:29;:20;1118:3855;;;3571:20;;:::i;:::-;;:29;1118:3855;;3571:44;3567:106;;3757:13;1118:3855;;;;;;;;;;;1745:53:60;1118:3855:74;3571:29;1745:53:60;;;3757:13:74;1745:53:60;;1118:3855:74;;586:6:48;1118:3855:74;3325:15;1118:3855;;;3424:21;1118:3855;3424:21;1118:3855;;;3424:21;1745:53:60;;1118:3855:74;;;;;;;;;;;;;;;;3571:29;1118:3855;;;;8507:421:60;;;1745:53;;1118:3855:74;3325:15;1118:3855;8507:421:60;;;;;1118:3855:74;8507:421:60;;8942:15;;1118:3855:74;;3325:15;1118:3855;;8960:26:60;:31;8942:68;8938:146;;1118:3855:74;;;3814:39;;1118:3855;3325:15;1118:3855;;;3814:39;;1118:3855;3424:21;1118:3855;3757:13;1118:3855;;;3571:29;586:6:48;3325:15:74;586:6:48;1118:3855:74;;586:6:48;1118:3855:74;3814:39;;;;;;;;8942:68:60;-1:-1:-1;3325:15:74;1118:3855;;;;3424:21;1118:3855;4063:3;1118:3855;;4045:16;;;;;4109:8;;;;:::i;:::-;;1118:3855;;;;;4359:13;1118:3855;3571:29;4359:13;;1118:3855;;4459:46;1118:3855;;;4460:18;;4459:46;1118:3855;;;;;4459:46;;1118:3855;;;;3571:29;1118:3855;;;;3571:29;1118:3855;;;;;;3571:29;1118:3855;;;;;;;;;;;;;;;;;;;;;;;;;;3571:29;1118:3855;;;;;;;;;4187:378;1118:3855;;;4187:378;;1118:3855;3424:21;4187:378;;1118:3855;3371:18;4187:378;;1118:3855;;4187:378;;1118:3855;4187:378;;;1118:3855;;;4158:421;1118:3855;4158:421;;3571:29;1118:3855;4158:421;;1118:3855;;;;;;;;;;;;4187:378;1118:3855;;3424:21;1118:3855;3757:13;1118:3855;;;;3571:29;4187:378;;1118:3855;;3325:15;1118:3855;;;;;4187:378;;1118:3855;;3424:21;1118:3855;;;;4187:378;;;1118:3855;;3371:18;1118:3855;;;3371:18;4187:378;;1118:3855;;;;;;4187:378;;1118:3855;;;;;4187:378;1118:3855;;3234:15;1118:3855;;;;;;;;:::i;:::-;4158:421;586:6:48;1118:3855:74;;586:6:48;1118:3855:74;4158:421;;;;;;;1118:3855;4158:421;;;4459:46;4359:13;1118:3855;3571:29;1529:4:42;4359:13:74;;1118:3855;;4635:29;4063:3;1118:3855;4030:13;;;4158:421;;;;3424:21;4158:421;;3424:21;4158:421;;;;;;3424:21;4158:421;;;:::i;:::-;;;1118:3855;;;;;;;;;4158:421;;;;;-1:-1:-1;4158:421:74;;;1118:3855;;;;;;;;;;;;;;;;3757:13;1118:3855;;4459:46;1118:3855;4459:46;;;4045:16;;;;4806;;:::i;:::-;1118:3855;586:6:48;1118:3855:74;4779:63;;;;1118:3855;;;;;4779:63;1118:3855;4779:63;;1118:3855;;4779:63;;1118:3855;;3757:13;1118:3855;;;;3325:15;1118:3855;;;;586:6:48;3424:21:74;586:6:48;;1118:3855:74;586:6:48;1118:3855:74;4779:63;;;;;;;;4025:650;1118:3855;;;;;;;;;;;;;4947:16;;;;:::i;:::-;1118:3855;;;3424:21;1118:3855;;;3571:29;1118:3855;;;;;;;;;;4858:106;3424:21;1118:3855;3325:15;1118:3855;;4858:106;;3051:52:43;551:66:42;3051:52:43;1118:3855:74;;4779:63;1118:3855;;;;;;;;;;;4779:63;;;;3814:39;3571:29;3814:39;;3571:29;3814:39;;;;;;3571:29;3814:39;;;:::i;:::-;;;1118:3855;;;;;3814:39;;;;;-1:-1:-1;3814:39:74;;8938:146:60;9033:40;1118:3855:74;9033:40:60;1118:3855:74;3325:15;1118:3855;;;;3757:13;1118:3855;9033:40:60;8942:68;1529:4:42;8994:16:60;;8942:68;;3567:106:74;3638:24;1118:3855;3638:24;1118:3855;;3638:24;1118:3855;;;;;;;;;;3212:85;3272:14;1118:3855;3272:14;1118:3855;;3272:14;560:108:48;616:41;1118:3855:74;616:41:48;564:10;1118:3855:74;;;;616:41:48;1316:93:42;1368:30;1118:3855:74;1368:30:42;1118:3855:74;;1368:30:42;1118:3855:74;;;;;;-1:-1:-1;;1118:3855:74;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1118:3855:74;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1118:3855:74;;;;;1311:13:50;1118:3855:74;;735:10:64;1118:3855:74;;;2339:24:50;2335:96;;1118:3855:74;;;;1311:13:50;1118:3855:74;;;735:10:64;;1118:3855:74;;;;;;735:10:64;1118:3855:74;;3052:40:49;1118:3855:74;3052:40:49;;1118:3855:74;2335:96:50;2386:34;1118:3855:74;2386:34:50;735:10:64;1118:3855:74;;;;2386:34:50;1118:3855:74;;;;;-1:-1:-1;;1118:3855:74;;;;;1500:62:49;;:::i;:::-;1118:3855:74;;;;2093:20:50;1118:3855:74;;2093:20:50;1118:3855:74;;;;;;;;;3052:40:49;;;;1118:3855:74;;;;;;-1:-1:-1;;1118:3855:74;;;;;;479:55:78;1118:3855:74;479:55:78;1118:3855:74;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;1937:220::-;;1118:3855;;;;-1:-1:-1;1118:3855:74;2043:10;1118:3855;2043:10;1118:3855;;;;;-1:-1:-1;1118:3855:74;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;1118:3855:74;;;;;;;;;;;;;;;;2035:28;;;;;;;;;;1118:3855;2078:17;2074:77;;1937:220::o;2074:77::-;2118:22;-1:-1:-1;2118:22:74;;-1:-1:-1;2118:22:74;1118:3855;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;4806:16;1118:3855;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1118:3855:74;;;;;;;;;;;:::o;1796:162:49:-;1118:3855:74;1710:6:49;1118:3855:74;;735:10:64;1855:23:49;1851:101;;1796:162::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","burnHook((address,address,address,uint256,address,uint256,address,uint256))":"c66472de","getBurnPath(address)":"c1cfb02a","owner()":"8da5cb5b","pendingOwner()":"e30c3978","protocolFeeSweeper()":"178ac96e","renounceOwnership()":"715018a6","setBurnPath(address,(address,address)[])":"e3746cb2","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"_protocolFeeSweeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BurnPathDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeSweeper\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetTokenOutMismatch\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IBalancerFeeBurner.BurnHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"burnHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"getBurnPath\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"internalType\":\"struct IBalancerFeeBurner.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFeeSweeper\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"internalType\":\"struct IBalancerFeeBurner.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"}],\"name\":\"setBurnPath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}},\"getBurnPath(address)\":{\"params\":{\"feeToken\":\"The fee token to get the path for\"},\"returns\":{\"steps\":\"The steps in the burn path\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setBurnPath(address,(address,address)[])\":{\"details\":\"This is the sequence of swaps required to convert the `feeToken` to the `targetToken`. This is a permissioned function.\",\"params\":{\"feeToken\":\"The fee token to set the path for\",\"steps\":\"The steps in the burn path\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BurnPathDoesNotExist()\":[{\"notice\":\"Burn path not set for the fee token.\"}],\"InvalidProtocolFeeSweeper()\":[{\"notice\":\"The fee protocol is invalid.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}],\"TargetTokenOutMismatch()\":[{\"notice\":\"The last token in the path is not the same as the target token.\"}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"},\"getBurnPath(address)\":{\"notice\":\"Get the burn path for a fee token.\"},\"setBurnPath(address,(address,address)[])\":{\"notice\":\"Set the burn path for a fee token.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/BalancerFeeBurner.sol\":\"BalancerFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol\":{\"keccak256\":\"0xb5dc03fa23c5481ff4bebe9136c73e363a96e5beaf89d22f4eedb142331a0478\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d33361a79282a589f7b167caa04acb3b7eba0cc85b11a21f8504187151542ed6\",\"dweb:/ipfs/Qmc5WZFBfq9oZEQ4Zhv6VgJpeBJA7v68Jc1cKTJ5iFBuhM\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/BalancerFeeBurner.sol\":{\"keccak256\":\"0x79faa46e1a6171ee5b9fd9a2f980e100a3cd1ba824db5202d75dc2de4348e5c6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://83cb2621d9eda7eaec004401b4770f923c1f65e2596f9051ff6b72addc0af0d4\",\"dweb:/ipfs/QmWTSXD85nqakqZA2ygrn254sLX2XGugV6YtzUbaym1wAy\"]},\"contracts/FeeBurnerAuthentication.sol\":{\"keccak256\":\"0x4861db67bf113a4775c165241802df34a6c0e9fefaec82e8aaf969b5879759f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f522b3af683e09e1b67ed515be9972e7cf9514a584e264c4ca9656cc12c2f06\",\"dweb:/ipfs/QmNYqMsvWcNqACozLm3cYeR4oC3KKfKNBDSqR3vcpjv3zo\"]}},\"version\":1}"}},"contracts/CallAndRevert.sol":{"CallAndRevert":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callAndRevertHook","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608080604052346015576103b0908161001a8239f35b5f80fdfe6080604052600480361015610012575f80fd5b5f3560e01c63a769963814610025575f80fd5b346102325760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102325780359073ffffffffffffffffffffffffffffffffffffffff82168203610232576024359167ffffffffffffffff8311610232573660238401121561023257828201356100a76100a2826102a7565b610236565b91818352602094858401903660248583010111610232575f948588868297602484960187378301015251925af1903d1561022957823d926100ea6100a2856102a7565b9384523d5f8386013e5b8015610179577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0918461012c604496601f94336102e1565b506040519687957f5ab64fb80000000000000000000000000000000000000000000000000000000087528601528051918291826024880152018686015e5f85828601015201168101030190fd5b5050808251106101dd577f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000848401511614610203578151156101dd575080519101fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f525ffd5b7f28f95541000000000000000000000000000000000000000000000000000000005f525ffd5b826060926100f4565b5f80fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff82111761027a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161027a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9061031e57508051156102f657602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610371575b61032f575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561032756fea2646970667358221220fe11d0a57628ea08877b4090e16e969cdadbb042c6375ec75ff301a9774ed5e964736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x15 JUMPI PUSH2 0x3B0 SWAP1 DUP2 PUSH2 0x1A DUP3 CODECOPY RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0xA7699638 EQ PUSH2 0x25 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x232 JUMPI PUSH1 0x40 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x232 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x232 JUMPI PUSH1 0x24 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x232 JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x232 JUMPI DUP3 DUP3 ADD CALLDATALOAD PUSH2 0xA7 PUSH2 0xA2 DUP3 PUSH2 0x2A7 JUMP JUMPDEST PUSH2 0x236 JUMP JUMPDEST SWAP2 DUP2 DUP4 MSTORE PUSH1 0x20 SWAP5 DUP6 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0x232 JUMPI PUSH0 SWAP5 DUP6 DUP9 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL SWAP1 RETURNDATASIZE ISZERO PUSH2 0x229 JUMPI DUP3 RETURNDATASIZE SWAP3 PUSH2 0xEA PUSH2 0xA2 DUP6 PUSH2 0x2A7 JUMP JUMPDEST SWAP4 DUP5 MSTORE RETURNDATASIZE PUSH0 DUP4 DUP7 ADD RETURNDATACOPY JUMPDEST DUP1 ISZERO PUSH2 0x179 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 DUP5 PUSH2 0x12C PUSH1 0x44 SWAP7 PUSH1 0x1F SWAP5 CALLER PUSH2 0x2E1 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP9 ADD MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST POP POP DUP1 DUP3 MLOAD LT PUSH2 0x1DD JUMPI PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 DUP5 ADD MLOAD AND EQ PUSH2 0x203 JUMPI DUP2 MLOAD ISZERO PUSH2 0x1DD JUMPI POP DUP1 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH1 0x60 SWAP3 PUSH2 0xF4 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x40 MLOAD SWAP4 ADD AND DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x27A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x27A JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x31E JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2F6 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x371 JUMPI JUMPDEST PUSH2 0x32F JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x327 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID GT 0xD0 0xA5 PUSH23 0x28EA08877B4090E16E969CDADBB042C6375EC75FF301A9 PUSH24 0x4ED5E964736F6C634300081B003300000000000000000000 ","sourceMap":"241:1325:75:-:0;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"allocate_memory":{"entryPoint":566,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":679,"id":null,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":737,"id":11283,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600480361015610012575f80fd5b5f3560e01c63a769963814610025575f80fd5b346102325760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102325780359073ffffffffffffffffffffffffffffffffffffffff82168203610232576024359167ffffffffffffffff8311610232573660238401121561023257828201356100a76100a2826102a7565b610236565b91818352602094858401903660248583010111610232575f948588868297602484960187378301015251925af1903d1561022957823d926100ea6100a2856102a7565b9384523d5f8386013e5b8015610179577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0918461012c604496601f94336102e1565b506040519687957f5ab64fb80000000000000000000000000000000000000000000000000000000087528601528051918291826024880152018686015e5f85828601015201168101030190fd5b5050808251106101dd577f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000848401511614610203578151156101dd575080519101fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f525ffd5b7f28f95541000000000000000000000000000000000000000000000000000000005f525ffd5b826060926100f4565b5f80fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff82111761027a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161027a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9061031e57508051156102f657602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610371575b61032f575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561032756fea2646970667358221220fe11d0a57628ea08877b4090e16e969cdadbb042c6375ec75ff301a9774ed5e964736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0xA7699638 EQ PUSH2 0x25 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x232 JUMPI PUSH1 0x40 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x232 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x232 JUMPI PUSH1 0x24 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x232 JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x232 JUMPI DUP3 DUP3 ADD CALLDATALOAD PUSH2 0xA7 PUSH2 0xA2 DUP3 PUSH2 0x2A7 JUMP JUMPDEST PUSH2 0x236 JUMP JUMPDEST SWAP2 DUP2 DUP4 MSTORE PUSH1 0x20 SWAP5 DUP6 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0x232 JUMPI PUSH0 SWAP5 DUP6 DUP9 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL SWAP1 RETURNDATASIZE ISZERO PUSH2 0x229 JUMPI DUP3 RETURNDATASIZE SWAP3 PUSH2 0xEA PUSH2 0xA2 DUP6 PUSH2 0x2A7 JUMP JUMPDEST SWAP4 DUP5 MSTORE RETURNDATASIZE PUSH0 DUP4 DUP7 ADD RETURNDATACOPY JUMPDEST DUP1 ISZERO PUSH2 0x179 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 DUP5 PUSH2 0x12C PUSH1 0x44 SWAP7 PUSH1 0x1F SWAP5 CALLER PUSH2 0x2E1 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP9 ADD MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST POP POP DUP1 DUP3 MLOAD LT PUSH2 0x1DD JUMPI PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 DUP5 ADD MLOAD AND EQ PUSH2 0x203 JUMPI DUP2 MLOAD ISZERO PUSH2 0x1DD JUMPI POP DUP1 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH1 0x60 SWAP3 PUSH2 0xF4 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x40 MLOAD SWAP4 ADD AND DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x27A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x27A JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x31E JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2F6 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x371 JUMPI JUMPDEST PUSH2 0x32F JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x327 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID GT 0xD0 0xA5 PUSH23 0x28EA08877B4090E16E969CDADBB042C6375EC75FF301A9 PUSH24 0x4ED5E964736F6C634300081B003300000000000000000000 ","sourceMap":"241:1325:75:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;811:19;;;;;241:1325;;;;;;;;;;;:::i;:::-;;;;;;;;;;;840:718;;;;241:1325;990:10;;955:63;241:1325;990:10;241:1325;990:10;;955:63;:::i;:::-;;241:1325;;1084:26;;;;;;;;241:1325;;;;;;;;;;;;;;;;;;;;;;;;;;;1084:26;;;;840:718;241:1325;;;;;1443:21:37;1439:82;;1344:27:75;241:1325;1530:151:37;;;;241:1325:75;1327:44;1323:110;;241:1325;;1881:21:37;:17;;2008:160;;;;;;1877:362;2205:23;241:1325:75;2205:23:37;241:1325:75;2205:23:37;1323:110:75;1398:20;241:1325;1398:20;241:1325;1398:20;241:1325;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;4437:582:61:-;;4609:8;;-1:-1:-1;241:1325:75;;5690:21:61;:17;;5815:105;;;;;;5686:301;5957:19;5710:1;5957:19;;5710:1;5957:19;4605:408;241:1325:75;;4857:22:61;:49;;;4605:408;4853:119;;4985:17;;:::o;4853:119::-;241:1325:75;4933:24:61;;4878:1;4933:24;241:1325:75;4933:24:61;241:1325:75;;4878:1:61;4933:24;4857:49;4883:18;;;:23;4857:49;"},"methodIdentifiers":{"callAndRevertHook(address,bytes)":"a7699638"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callAndRevertHook\",\"outputs\":[],\"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.\"}],\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/CallAndRevert.sol\":\"CallAndRevert\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"contracts/CallAndRevert.sol\":{\"keccak256\":\"0xe0f09e833265592b398c7607db658e3541b800f66c9536ee129ae6863e4185f2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bc7dd31dd95f738debb5ca8c8b80e90384c1d8b72dc70e02dd7ae22e7c77f337\",\"dweb:/ipfs/QmNaJXyazNRD1fbqs6QJSwB3VWKu3ZjHqecMqKg57UeMuS\"]}},\"version\":1}"}},"contracts/CowSwapFeeBurner.sol":{"CowSwapFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IProtocolFeeSweeper","name":"_protocolFeeSweeper","type":"address"},{"internalType":"contract IComposableCow","name":"_composableCow","type":"address"},{"internalType":"address","name":"_cowVaultRelayer","type":"address"},{"internalType":"bytes32","name":"_appData","type":"bytes32"},{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"string","name":"_version","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"InterfaceIsSignatureVerifierMuxer","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"InvalidOrderParameters","type":"error"},{"inputs":[],"name":"InvalidProtocolFeeSweeper","type":"error"},{"inputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"actualStatus","type":"uint8"}],"name":"OrderHasUnexpectedStatus","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"OrderNotValid","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollNever","type":"error"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtBlock","type":"error"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtEpoch","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryNextBlock","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"indexed":false,"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"}],"name":"ConditionalOrderCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"OrderCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"OrderRetried","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"appData","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"composableCow","outputs":[{"internalType":"contract IComposableCow","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"emergencyCancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrderStatus","outputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"getTradeableOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeSweeper","outputs":[{"internalType":"contract IProtocolFeeSweeper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"retryOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vaultRelayer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"},{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"_order","type":"tuple"}],"name":"verify","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_address_fromMemory":{"entryPoint":909,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory":{"entryPoint":872,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"61014060405234610364576129dc8038038061001a81610368565b92833981019060c0818303126103645780516001600160a01b0391828216919082820361036457602093848201519381851685036103645761005e6040840161038d565b966060840151966100716080860161038d565b9560a086015160018060401b0396878211610364570193601f9484868201121561036457805198888a1161032e57601f19996100b28882018c168701610368565b968188528682850101116103645785815f92828c9601838b015e8801015216801561035157600180546001600160a01b031990811682555f805491821684178155919816907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a31561034257608052815194851161032e576002548481811c91168015610324575b82821014610310578381116102cc575b508092851160011461026a5750839450908392915f9461025f575b50501b915f199060031b1c1916176002555b7ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677560a0527f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc960c05260e0526101009182526101209081526040519061263a92836103a2843960805183818161021e0152818161066401528181610cef01528181610e5f01526110aa015260a05183611ff8015260c05183611f87015260e051838181610a590152818161135b0152818161156101526122cf0152518281816103d80152818161071b01528181610a090152611d7a015251818181610ac60152611fcc0152f35b015192505f80610167565b92948490811660025f52845f20945f905b888383106102b2575050501061029a575b505050811b01600255610179565b01515f1960f88460031b161c191690555f808061028c565b85870151885590960195948501948793509081019061027b565b60025f52815f208480880160051c820192848910610307575b0160051c019085905b8281106102fc57505061014c565b5f81550185906102ee565b925081926102e5565b634e487b7160e01b5f52602260045260245ffd5b90607f169061013c565b634e487b7160e01b5f52604160045260245ffd5b63932c92a560e01b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761032e57604052565b51906001600160a01b03821682036103645756fe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a7146119505750806314a2a784146116785780631626ba7e146110ce578063178ac96e1461107e57806354fd4d5014610f3e57806360e092c614610dfa57806368bce71214610c875780636eba2b1314610c5a5780636f9d75cd14610c25578063715018a614610ba057806379ba509714610ae95780638aebd34814610aaf5780638da5cb5b14610a7d57806393504c5214610a2d5780639b552cc2146109dd578063b8296fc4146108c3578063d83b06a4146105fe578063de557a32146101bc578063e30c3978146101895763f2fde38b146100f8575f80fd5b3461018557602060031936011261018557610111611a9f565b6101196120cb565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b34610185575f60031936011261018557602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346101855760e0600319360112610185576101d5611a9f565b6101dd611ac2565b90604435916064359073ffffffffffffffffffffffffffffffffffffffff93848316809303610185576084359360a4358681168091036101855760c43595877f00000000000000000000000000000000000000000000000000000000000000001633036105d6577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0096875c6105ae576001885d858916958787036102ff5760846040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f46656520746f6b656e20616e642074617267657420746f6b656e20617265207460448201527f68652073616d65000000000000000000000000000000000000000000000000006064820152fd5b85156105505761030e836120eb565b61031782612150565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523060448201528660648201526064815260a081019080821067ffffffffffffffff8311176105235761037b916040528261257d565b610385868261247d565b506004811015806104e95781151580610516575b6104ba575050925f99927f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d95926103fd88876103d66060996122b7565b7f0000000000000000000000000000000000000000000000000000000000000000906121b6565b63ffffffff600360405161041081611b4c565b8c8152602081018681526040820190868252848b8401961686525f8e9052836020525f60408b91209351167fffffffffffffffffffffffff000000000000000000000000000000000000000090818554161784558a6001850192511690825416179055516002820155019151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000825416179055604051968752602087015260408601521692a45d005b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f526104e95760045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b50505f6002821415610399565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f46656520746f6b656e20616d6f756e74206973207a65726f00000000000000006044820152fd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461018557606060031936011261018557610617611a9f565b60243560443573ffffffffffffffffffffffffffffffffffffffff916040517f4ccb20c00000000000000000000000000000000000000000000000000000000081526020908181600481887f0000000000000000000000000000000000000000000000000000000000000000165afa80156108485785915f9161088b575b50163314158061087e575b6105d6576106ad856123aa565b919060048110156104e9576003810361085357506106ca836120eb565b6106d384612150565b84861694855f5260038252600360405f208560028201550163ffffffff86167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790557f000000000000000000000000000000000000000000000000000000000000000090604051907fdd62ed3e0000000000000000000000000000000000000000000000000000000082523060048301528216602482015282816044818a5afa908115610848575f916107ea575b507f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a97849392846080999897966107c394106107d9575b50506122b7565b60405194855284015260408301526060820152a1005b6107e391836121b6565b89846107bc565b90508281819398979695943d8311610841575b6108078183611b68565b81010312610185575194959394929391929091907f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a610785565b503d6107fd565b6040513d5f823e3d90fd5b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50835f54163314156106a0565b809250838092503d83116108bc575b6108a48183611b68565b81010312610185576108b68591611bcc565b87610695565b503d61089a565b346101855760a0600319360112610185576108dc611a9f565b506108e5611ac2565b5067ffffffffffffffff60643581811161018557610907903690600401611ae5565b608492919235918211610185576109d992610929610930933690600401611ae5565b5050611ccb565b6040519182918291909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b0390f35b34610185575f60031936011261018557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610185575f60031936011261018557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610185575f60031936011261018557602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610185575f6003193601126101855760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610185575f6003193601126101855760015473ffffffffffffffffffffffffffffffffffffffff3381831603610b74577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b34610185575f60031936011261018557610bb86120cb565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461018557602060031936011261018557610c46610c41611a9f565b6123aa565b5060405160048210156104e9576020918152f35b34610185576020600319360112610185576109d9610930610c79611a9f565b610c81611c73565b50611ebd565b3461018557604060031936011261018557610ca0611a9f565b610ca8611ac2565b6040517f4ccb20c000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff926020929183816004817f000000000000000000000000000000000000000000000000000000000000000089165afa80156108485785915f91610dc2575b501633141580610db5575b6105d65782602494604051958680927f70a0823100000000000000000000000000000000000000000000000000000000825230600483015285165afa928315610848575f93610d83575b50610d819350611d09565b005b90925083813d8311610dae575b610d9a8183611b68565b8101031261018557610d8192519184610d76565b503d610d90565b50835f5416331415610d2c565b809250858092503d8311610df3575b610ddb8183611b68565b8101031261018557610ded8591611bcc565b86610d21565b503d610dd1565b3461018557604060031936011261018557610e13611a9f565b610e1b611ac2565b73ffffffffffffffffffffffffffffffffffffffff6040517f4ccb20c0000000000000000000000000000000000000000000000000000000008152602081600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156108485782915f91610f02575b50163314159081610ef4575b506105d657610eaa826123aa565b91909260048410156104e95760038403610ec857610d819350611d09565b837fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90505f541633141583610e9c565b9150506020813d602011610f36575b81610f1e60209383611b68565b8101031261018557610f308291611bcc565b85610e90565b3d9150610f11565b34610185575f600319360112610185576040515f6002549060018260011c9160018416918215611074575b60209485851084146110475785879486865291825f14611009575050600114610fae575b50610f9a92500383611b68565b6109d9604051928284938452830190611ba7565b84915060025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace905f915b858310610ff1575050610f9a935082010185610f8d565b80548389018501528794508693909201918101610fda565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685820152610f9a95151560051b8501019250879150610f8d9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f1692610f69565b34610185575f60031936011261018557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101855760406003193601126101855760243567ffffffffffffffff80821161018557366023830112156101855781600401359161110c83611b8b565b9261111a6040519485611b68565b8084526020840191366024838301011161018557815f92602460209301853785010152825183019160208301938084036101a09081811261018557610180809112610185576111746040519561116f87611b13565b611bcc565b855261118260408401611bcc565b602086015261119360608401611bcc565b60408601526080830151606086015260a0830151608086015260c083015163ffffffff811681036101855760a086015260e083015160c0860152610100908184015160e08701526101209182850151908701526101409182850151908115158203610185578701526101609182850151908701528301519085015281015190828211610185570193606085850312610185576040519461123286611b30565b602081015183811161018557810182603f8201121561018557602081015190848211610523578160051b6040519261126d6020830185611b68565b8352604060208401918301019185831161018557604001905b828210611668575050508652604081015183811161018557606090820180960312610185576040516112b781611b30565b60208601519573ffffffffffffffffffffffffffffffffffffffff9687811681036101855782526040810151602083015260608101518581116101855760208591611303930101611bed565b604082015260208701526060810151928311610185576113269201602001611bed565b6040840152604051907ff698da25000000000000000000000000000000000000000000000000000000008252602082600481867f0000000000000000000000000000000000000000000000000000000000000000165afa918215610848575f92611632575b509061144e611440926040519384916020830191909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101845283611b68565b604051809460208083015260a08201815190606060408501528151809152602060c085019201905f5b8181106116195785602061154b8b8b8b6114eb866114dd8d8d60406114cb8b840151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09384888303016060890152611c33565b92015190848303016080850152611ba7565b03601f198101885287611b68565b61155d604051968795869485947f53f00b14000000000000000000000000000000000000000000000000000000008652306004870152336024870152600435604487015260648601525f608486015260e060a486015260e4850190611ba7565b906003198483030160c4850152611ba7565b03917f0000000000000000000000000000000000000000000000000000000000000000165afa8015610848575f906115bd575b6020907fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b506020813d602011611611575b816115d760209383611b68565b8101031261018557517fffffffff000000000000000000000000000000000000000000000000000000008116810361018557602090611590565b3d91506115ca565b8251845289955060209384019390920191600101611477565b91506020823d602011611660575b8161164d60209383611b68565b810103126101855790519061144e61138b565b3d9150611640565b8151815260209182019101611286565b346101855761026060031936011261018557611692611a9f565b5061169b611ac2565b5067ffffffffffffffff60a435818111610185576116bd903690600401611ae5565b919060c435828111610185576116d7903690600401611ae5565b505061018092837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c3601126101855761170f91611ccb565b916101643592836080820180518211611948575b50506040516117e5816117d760208201948591909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101835282611b68565b51902090604051602081019460e43573ffffffffffffffffffffffffffffffffffffffff90818116809103610185578752610104358181168091036101855760408401526101243590811680910361018557606083015261014435608083015260a08201526101843563ffffffff81168091036101855760c08201526101a492833560e08301526101c49081356101008401526101e49687356101208501526102049485358015158091036101855761014086015261022435610160860152610244358186015284526101a0840196871184881017610523578660405283519020036118cd57005b608495602f7f566572696679206f7264657220646f6573206e6f74206d6174636820776974689260207f206578697374696e67206f726465720000000000000000000000000000000000977f8d8a6110000000000000000000000000000000000000000000000000000000008a528601528401528201520152fd5b528385611723565b3461018557602060031936011261018557600435907fffffffff000000000000000000000000000000000000000000000000000000008216809203610185577f62af8dc2000000000000000000000000000000000000000000000000000000008214611a7757817f14a2a7840000000000000000000000000000000000000000000000000000000060209314908115611a4d575b8115611a23575b81156119f9575b5015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836119f2565b7f1626ba7e00000000000000000000000000000000000000000000000000000000811491506119eb565b7fb8296fc400000000000000000000000000000000000000000000000000000000811491506119e4565b7f32798566000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361018557565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361018557565b9181601f840112156101855782359167ffffffffffffffff8311610185576020838186019501011161018557565b610180810190811067ffffffffffffffff82111761052357604052565b6060810190811067ffffffffffffffff82111761052357604052565b6080810190811067ffffffffffffffff82111761052357604052565b90601f601f19910116810190811067ffffffffffffffff82111761052357604052565b67ffffffffffffffff811161052357601f01601f191660200190565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b519073ffffffffffffffffffffffffffffffffffffffff8216820361018557565b81601f8201121561018557805190611c0482611b8b565b92611c126040519485611b68565b8284526020838301011161018557815f9260208093018386015e8301015290565b9060606040611c709373ffffffffffffffffffffffffffffffffffffffff8151168452602081015160208501520151918160408201520190611ba7565b90565b60405190611c8082611b13565b5f610160838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b9081602091611cd8611c73565b5081010312610185573573ffffffffffffffffffffffffffffffffffffffff811680910361018557611c7090611ebd565b6060917f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a936040918251916020808401937f095ea7b3000000000000000000000000000000000000000000000000000000009081865273ffffffffffffffffffffffffffffffffffffffff95835f887f0000000000000000000000000000000000000000000000000000000000000000169283602486015281604486015260448552611db485611b4c565b845190828d5af15f513d82611e9f575b505015611e64575b5050508584165f81815260038084528782208281556001810183905560028101839055015585517fa9059cbb000000000000000000000000000000000000000000000000000000008184015273ffffffffffffffffffffffffffffffffffffffff85166024820152604481018490529096611e549190611e4f8260648101611440565b61257d565b84519586528501521690820152a1565b611e9792611e91918951918683015260248201525f604482015260448152611e8b81611b4c565b8961257d565b8761257d565b5f8080611dcc565b909150611eb557508689163b15155b5f80611dc4565b600114611eae565b611ec5611c73565b5073ffffffffffffffffffffffffffffffffffffffff80911690815f52602090600382526040805f206003825192611efc84611b4c565b848354168452846001840154169486850195865260028401549382860194855263ffffffff9384910154169460608101958087521561206e5781905116955116918151937f70a0823100000000000000000000000000000000000000000000000000000000855230600486015287856024818c5afa948515612064575f95612035575b5051945116947f000000000000000000000000000000000000000000000000000000000000000096825198611fb38a611b13565b89528801528601526060850152608084015260a08301527f000000000000000000000000000000000000000000000000000000000000000060c08301525f60e08301527f000000000000000000000000000000000000000000000000000000000000000061010083015260016101208301528061014083015261016082015290565b9094508781813d831161205d575b61204d8183611b68565b810103126101855751935f611f7f565b503d612043565b83513d5f823e3d90fd5b6064888451907fc8fc27250000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4f7264657220646f6573206e6f742065786973740000000000000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff5f54163303610b7457565b156120f257565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d696e20616d6f756e74206f7574206973207a65726f000000000000000000006044820152fd5b421161215857565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f446561646c696e6520697320696e2074686520706173740000000000000000006044820152fd5b6040519160205f818501612219866114dd7f095ea7b300000000000000000000000000000000000000000000000000000000998a855287602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b85519082865af15f513d82612285575b505015612237575b50505050565b61227c9373ffffffffffffffffffffffffffffffffffffffff611e4f926040519260208401521660248201525f60448201526044815261227681611b4c565b8261257d565b5f808080612231565b9091506122af575073ffffffffffffffffffffffffffffffffffffffff82163b15155b5f80612229565b6001146122a8565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691604091825191166020820152602081528181019267ffffffffffffffff91808510838611176105235784845261232585611b30565b3085525f60608201526080810152803b156101855761237d5f9491859285519687809481937f6bfae1ca0000000000000000000000000000000000000000000000000000000083528960048401526044830190611c33565b6001602483015203925af180156123a05761239757505050565b82116105235752565b82513d5f823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff1690815f52600360205263ffffffff600360405f200154168015612475576020602493604051948580927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa928315610848575f93612441575b508261242f575060029190565b421161243b5760019190565b60039190565b9092506020813d60201161246d575b8161245d60209383611b68565b810103126101855751915f612422565b3d9150612450565b505f91508190565b73ffffffffffffffffffffffffffffffffffffffff909291921691825f52600360205263ffffffff600360405f20015416908115612573576020602494604051958680927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa938415610848575f9461253f575b5080840393808511612512570361242f575060029190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9093506020813d60201161256b575b8161255b60209383611b68565b810103126101855751925f6124fa565b3d915061254e565b505090505f905f90565b905f602091828151910182855af115610848575f513d6125fb575073ffffffffffffffffffffffffffffffffffffffff81163b155b6125b95750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b600114156125b256fea2646970667358221220bb788be1190a2f5816caa3342d23eb0fcb57bf52424d3d75a53808fcc8e303f864736f6c634300081b0033","opcodes":"PUSH2 0x140 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x364 JUMPI PUSH2 0x29DC DUP1 CODESIZE SUB DUP1 PUSH2 0x1A DUP2 PUSH2 0x368 JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD SWAP1 PUSH1 0xC0 DUP2 DUP4 SUB SLT PUSH2 0x364 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP2 SWAP1 DUP3 DUP3 SUB PUSH2 0x364 JUMPI PUSH1 0x20 SWAP4 DUP5 DUP3 ADD MLOAD SWAP4 DUP2 DUP6 AND DUP6 SUB PUSH2 0x364 JUMPI PUSH2 0x5E PUSH1 0x40 DUP5 ADD PUSH2 0x38D JUMP JUMPDEST SWAP7 PUSH1 0x60 DUP5 ADD MLOAD SWAP7 PUSH2 0x71 PUSH1 0x80 DUP7 ADD PUSH2 0x38D JUMP JUMPDEST SWAP6 PUSH1 0xA0 DUP7 ADD MLOAD PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB SWAP7 DUP8 DUP3 GT PUSH2 0x364 JUMPI ADD SWAP4 PUSH1 0x1F SWAP5 DUP5 DUP7 DUP3 ADD SLT ISZERO PUSH2 0x364 JUMPI DUP1 MLOAD SWAP9 DUP9 DUP11 GT PUSH2 0x32E JUMPI PUSH1 0x1F NOT SWAP10 PUSH2 0xB2 DUP9 DUP3 ADD DUP13 AND DUP8 ADD PUSH2 0x368 JUMP JUMPDEST SWAP7 DUP2 DUP9 MSTORE DUP7 DUP3 DUP6 ADD ADD GT PUSH2 0x364 JUMPI DUP6 DUP2 PUSH0 SWAP3 DUP3 DUP13 SWAP7 ADD DUP4 DUP12 ADD MCOPY DUP9 ADD ADD MSTORE AND DUP1 ISZERO PUSH2 0x351 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP3 SSTORE PUSH0 DUP1 SLOAD SWAP2 DUP3 AND DUP5 OR DUP2 SSTORE SWAP2 SWAP9 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP1 LOG3 ISZERO PUSH2 0x342 JUMPI PUSH1 0x80 MSTORE DUP2 MLOAD SWAP5 DUP6 GT PUSH2 0x32E JUMPI PUSH1 0x2 SLOAD DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x324 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x310 JUMPI DUP4 DUP2 GT PUSH2 0x2CC JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x26A JUMPI POP DUP4 SWAP5 POP SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP5 PUSH2 0x25F JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x2 SSTORE JUMPDEST PUSH32 0xF3B277728B3FEE749481EB3E0B3B48980DBBAB78658FC419025CB16EEE346775 PUSH1 0xA0 MSTORE PUSH32 0x5A28E9363BB942B639270062AA6BB295F434BCDFC42C97267BF003F272060DC9 PUSH1 0xC0 MSTORE PUSH1 0xE0 MSTORE PUSH2 0x100 SWAP2 DUP3 MSTORE PUSH2 0x120 SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH2 0x263A SWAP3 DUP4 PUSH2 0x3A2 DUP5 CODECOPY PUSH1 0x80 MLOAD DUP4 DUP2 DUP2 PUSH2 0x21E ADD MSTORE DUP2 DUP2 PUSH2 0x664 ADD MSTORE DUP2 DUP2 PUSH2 0xCEF ADD MSTORE DUP2 DUP2 PUSH2 0xE5F ADD MSTORE PUSH2 0x10AA ADD MSTORE PUSH1 0xA0 MLOAD DUP4 PUSH2 0x1FF8 ADD MSTORE PUSH1 0xC0 MLOAD DUP4 PUSH2 0x1F87 ADD MSTORE PUSH1 0xE0 MLOAD DUP4 DUP2 DUP2 PUSH2 0xA59 ADD MSTORE DUP2 DUP2 PUSH2 0x135B ADD MSTORE DUP2 DUP2 PUSH2 0x1561 ADD MSTORE PUSH2 0x22CF ADD MSTORE MLOAD DUP3 DUP2 DUP2 PUSH2 0x3D8 ADD MSTORE DUP2 DUP2 PUSH2 0x71B ADD MSTORE DUP2 DUP2 PUSH2 0xA09 ADD MSTORE PUSH2 0x1D7A ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0xAC6 ADD MSTORE PUSH2 0x1FCC ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x167 JUMP JUMPDEST SWAP3 SWAP5 DUP5 SWAP1 DUP2 AND PUSH1 0x2 PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x2B2 JUMPI POP POP POP LT PUSH2 0x29A JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x2 SSTORE PUSH2 0x179 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x28C JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x27B JUMP JUMPDEST PUSH1 0x2 PUSH0 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x307 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP6 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x2FC JUMPI POP POP PUSH2 0x14C JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x2EE JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x2E5 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x13C JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x932C92A5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x32E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x364 JUMPI JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x1950 JUMPI POP DUP1 PUSH4 0x14A2A784 EQ PUSH2 0x1678 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0x10CE JUMPI DUP1 PUSH4 0x178AC96E EQ PUSH2 0x107E JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0xF3E JUMPI DUP1 PUSH4 0x60E092C6 EQ PUSH2 0xDFA JUMPI DUP1 PUSH4 0x68BCE712 EQ PUSH2 0xC87 JUMPI DUP1 PUSH4 0x6EBA2B13 EQ PUSH2 0xC5A JUMPI DUP1 PUSH4 0x6F9D75CD EQ PUSH2 0xC25 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xBA0 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xAE9 JUMPI DUP1 PUSH4 0x8AEBD348 EQ PUSH2 0xAAF JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xA7D JUMPI DUP1 PUSH4 0x93504C52 EQ PUSH2 0xA2D JUMPI DUP1 PUSH4 0x9B552CC2 EQ PUSH2 0x9DD JUMPI DUP1 PUSH4 0xB8296FC4 EQ PUSH2 0x8C3 JUMPI DUP1 PUSH4 0xD83B06A4 EQ PUSH2 0x5FE JUMPI DUP1 PUSH4 0xDE557A32 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x189 JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0xF8 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x111 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0x119 PUSH2 0x20CB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x1D5 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0x1DD PUSH2 0x1AC2 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP4 AND DUP1 SWAP4 SUB PUSH2 0x185 JUMPI PUSH1 0x84 CALLDATALOAD SWAP4 PUSH1 0xA4 CALLDATALOAD DUP7 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0xC4 CALLDATALOAD SWAP6 DUP8 PUSH32 0x0 AND CALLER SUB PUSH2 0x5D6 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SWAP7 DUP8 TLOAD PUSH2 0x5AE JUMPI PUSH1 0x1 DUP9 TSTORE DUP6 DUP10 AND SWAP6 DUP8 DUP8 SUB PUSH2 0x2FF JUMPI PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616E642074617267657420746F6B656E206172652074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x68652073616D6500000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST DUP6 ISZERO PUSH2 0x550 JUMPI PUSH2 0x30E DUP4 PUSH2 0x20EB JUMP JUMPDEST PUSH2 0x317 DUP3 PUSH2 0x2150 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE DUP7 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE PUSH1 0xA0 DUP2 ADD SWAP1 DUP1 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x523 JUMPI PUSH2 0x37B SWAP2 PUSH1 0x40 MSTORE DUP3 PUSH2 0x257D JUMP JUMPDEST PUSH2 0x385 DUP7 DUP3 PUSH2 0x247D JUMP JUMPDEST POP PUSH1 0x4 DUP2 LT ISZERO DUP1 PUSH2 0x4E9 JUMPI DUP2 ISZERO ISZERO DUP1 PUSH2 0x516 JUMPI JUMPDEST PUSH2 0x4BA JUMPI POP POP SWAP3 PUSH0 SWAP10 SWAP3 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP6 SWAP3 PUSH2 0x3FD DUP9 DUP8 PUSH2 0x3D6 PUSH1 0x60 SWAP10 PUSH2 0x22B7 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0x21B6 JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 MLOAD PUSH2 0x410 DUP2 PUSH2 0x1B4C JUMP JUMPDEST DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 DUP2 MSTORE PUSH1 0x40 DUP3 ADD SWAP1 DUP7 DUP3 MSTORE DUP5 DUP12 DUP5 ADD SWAP7 AND DUP7 MSTORE PUSH0 DUP15 SWAP1 MSTORE DUP4 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP12 SWAP2 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 SLOAD AND OR DUP5 SSTORE DUP11 PUSH1 0x1 DUP6 ADD SWAP3 MLOAD AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE MLOAD PUSH1 0x2 DUP3 ADD SSTORE ADD SWAP2 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x40 DUP7 ADD MSTORE AND SWAP3 LOG4 TSTORE STOP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH2 0x4E9 JUMPI PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP PUSH0 PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x399 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616D6F756E74206973207A65726F0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x617 PUSH2 0x1A9F JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0x88B JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0x87E JUMPI JUMPDEST PUSH2 0x5D6 JUMPI PUSH2 0x6AD DUP6 PUSH2 0x23AA JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x3 DUP2 SUB PUSH2 0x853 JUMPI POP PUSH2 0x6CA DUP4 PUSH2 0x20EB JUMP JUMPDEST PUSH2 0x6D3 DUP5 PUSH2 0x2150 JUMP JUMPDEST DUP5 DUP7 AND SWAP5 DUP6 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH1 0x2 DUP3 ADD SSTORE ADD PUSH4 0xFFFFFFFF DUP7 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0x0 SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x44 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP2 PUSH2 0x7EA JUMPI JUMPDEST POP PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A SWAP8 DUP5 SWAP4 SWAP3 DUP5 PUSH1 0x80 SWAP10 SWAP9 SWAP8 SWAP7 PUSH2 0x7C3 SWAP5 LT PUSH2 0x7D9 JUMPI JUMPDEST POP POP PUSH2 0x22B7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE LOG1 STOP JUMPDEST PUSH2 0x7E3 SWAP2 DUP4 PUSH2 0x21B6 JUMP JUMPDEST DUP10 DUP5 PUSH2 0x7BC JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 SWAP4 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 RETURNDATASIZE DUP4 GT PUSH2 0x841 JUMPI JUMPDEST PUSH2 0x807 DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP5 SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A PUSH2 0x785 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x7FD JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0x6A0 JUMP JUMPDEST DUP1 SWAP3 POP DUP4 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x8BC JUMPI JUMPDEST PUSH2 0x8A4 DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0x8B6 DUP6 SWAP2 PUSH2 0x1BCC JUMP JUMPDEST DUP8 PUSH2 0x695 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x89A JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x8DC PUSH2 0x1A9F JUMP JUMPDEST POP PUSH2 0x8E5 PUSH2 0x1AC2 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x185 JUMPI PUSH2 0x907 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST PUSH1 0x84 SWAP3 SWAP2 SWAP3 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x185 JUMPI PUSH2 0x9D9 SWAP3 PUSH2 0x929 PUSH2 0x930 SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST POP POP PUSH2 0x1CCB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0xB74 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xBB8 PUSH2 0x20CB JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xC46 PUSH2 0xC41 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0x23AA JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x20 SWAP2 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x9D9 PUSH2 0x930 PUSH2 0xC79 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0xC81 PUSH2 0x1C73 JUMP JUMPDEST POP PUSH2 0x1EBD JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xCA0 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0xCA8 PUSH2 0x1AC2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 PUSH1 0x20 SWAP3 SWAP2 DUP4 DUP2 PUSH1 0x4 DUP2 PUSH32 0x0 DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0xDC2 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0xDB5 JUMPI JUMPDEST PUSH2 0x5D6 JUMPI DUP3 PUSH1 0x24 SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP4 PUSH2 0xD83 JUMPI JUMPDEST POP PUSH2 0xD81 SWAP4 POP PUSH2 0x1D09 JUMP JUMPDEST STOP JUMPDEST SWAP1 SWAP3 POP DUP4 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xDAE JUMPI JUMPDEST PUSH2 0xD9A DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0xD81 SWAP3 MLOAD SWAP2 DUP5 PUSH2 0xD76 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xD90 JUMP JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0xD2C JUMP JUMPDEST DUP1 SWAP3 POP DUP6 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xDF3 JUMPI JUMPDEST PUSH2 0xDDB DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0xDED DUP6 SWAP2 PUSH2 0x1BCC JUMP JUMPDEST DUP7 PUSH2 0xD21 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xDD1 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xE13 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0xE1B PUSH2 0x1AC2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0xF02 JUMPI JUMPDEST POP AND CALLER EQ ISZERO SWAP1 DUP2 PUSH2 0xEF4 JUMPI JUMPDEST POP PUSH2 0x5D6 JUMPI PUSH2 0xEAA DUP3 PUSH2 0x23AA JUMP JUMPDEST SWAP2 SWAP1 SWAP3 PUSH1 0x4 DUP5 LT ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x3 DUP5 SUB PUSH2 0xEC8 JUMPI PUSH2 0xD81 SWAP4 POP PUSH2 0x1D09 JUMP JUMPDEST DUP4 PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH0 SLOAD AND CALLER EQ ISZERO DUP4 PUSH2 0xE9C JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF36 JUMPI JUMPDEST DUP2 PUSH2 0xF1E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0xF30 DUP3 SWAP2 PUSH2 0x1BCC JUMP JUMPDEST DUP6 PUSH2 0xE90 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF11 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH1 0x2 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x1074 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x1047 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x1009 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xFAE JUMPI JUMPDEST POP PUSH2 0xF9A SWAP3 POP SUB DUP4 PUSH2 0x1B68 JUMP JUMPDEST PUSH2 0x9D9 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x2 PUSH0 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0xFF1 JUMPI POP POP PUSH2 0xF9A SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0xF8D JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0xFDA JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0xF9A SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0xF8D SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0xF69 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT PUSH2 0x185 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x185 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x110C DUP4 PUSH2 0x1B8B JUMP JUMPDEST SWAP3 PUSH2 0x111A PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1B68 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP2 CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0x185 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH1 0x20 SWAP4 ADD DUP6 CALLDATACOPY DUP6 ADD ADD MSTORE DUP3 MLOAD DUP4 ADD SWAP2 PUSH1 0x20 DUP4 ADD SWAP4 DUP1 DUP5 SUB PUSH2 0x1A0 SWAP1 DUP2 DUP2 SLT PUSH2 0x185 JUMPI PUSH2 0x180 DUP1 SWAP2 SLT PUSH2 0x185 JUMPI PUSH2 0x1174 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x116F DUP8 PUSH2 0x1B13 JUMP JUMPDEST PUSH2 0x1BCC JUMP JUMPDEST DUP6 MSTORE PUSH2 0x1182 PUSH1 0x40 DUP5 ADD PUSH2 0x1BCC JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x1193 PUSH1 0x60 DUP5 ADD PUSH2 0x1BCC JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x185 JUMPI PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP5 ADD MLOAD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x120 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH2 0x140 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x185 JUMPI DUP8 ADD MSTORE PUSH2 0x160 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x185 JUMPI ADD SWAP4 PUSH1 0x60 DUP6 DUP6 SUB SLT PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH2 0x1232 DUP7 PUSH2 0x1B30 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x185 JUMPI DUP2 ADD DUP3 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x185 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x523 JUMPI DUP2 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP3 PUSH2 0x126D PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1B68 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD SWAP2 DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x185 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1668 JUMPI POP POP POP DUP7 MSTORE PUSH1 0x40 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x185 JUMPI PUSH1 0x60 SWAP1 DUP3 ADD DUP1 SWAP7 SUB SLT PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD PUSH2 0x12B7 DUP2 PUSH2 0x1B30 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP2 AND DUP2 SUB PUSH2 0x185 JUMPI DUP3 MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD DUP6 DUP2 GT PUSH2 0x185 JUMPI PUSH1 0x20 DUP6 SWAP2 PUSH2 0x1303 SWAP4 ADD ADD PUSH2 0x1BED JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP3 DUP4 GT PUSH2 0x185 JUMPI PUSH2 0x1326 SWAP3 ADD PUSH1 0x20 ADD PUSH2 0x1BED JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF698DA2500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP3 PUSH2 0x1632 JUMPI JUMPDEST POP SWAP1 PUSH2 0x144E PUSH2 0x1440 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x1B68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 PUSH1 0x20 DUP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP2 MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP6 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0xC0 DUP6 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1619 JUMPI DUP6 PUSH1 0x20 PUSH2 0x154B DUP12 DUP12 DUP12 PUSH2 0x14EB DUP7 PUSH2 0x14DD DUP14 DUP14 PUSH1 0x40 PUSH2 0x14CB DUP12 DUP5 ADD MLOAD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 SWAP4 DUP5 DUP9 DUP4 SUB ADD PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x1C33 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1BA7 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP9 MSTORE DUP8 PUSH2 0x1B68 JUMP JUMPDEST PUSH2 0x155D PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP5 PUSH32 0x53F00B1400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE ADDRESS PUSH1 0x4 DUP8 ADD MSTORE CALLER PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0x44 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD MSTORE PUSH0 PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0xE0 PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xE4 DUP6 ADD SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0xC4 DUP6 ADD MSTORE PUSH2 0x1BA7 JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP1 PUSH2 0x15BD JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1611 JUMPI JUMPDEST DUP2 PUSH2 0x15D7 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x185 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1590 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x15CA JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP10 SWAP6 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1477 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1660 JUMPI JUMPDEST DUP2 PUSH2 0x164D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI SWAP1 MLOAD SWAP1 PUSH2 0x144E PUSH2 0x138B JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1640 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1286 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH2 0x260 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x1692 PUSH2 0x1A9F JUMP JUMPDEST POP PUSH2 0x169B PUSH2 0x1AC2 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x185 JUMPI PUSH2 0x16BD SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x185 JUMPI PUSH2 0x16D7 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST POP POP PUSH2 0x180 SWAP3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x170F SWAP2 PUSH2 0x1CCB JUMP JUMPDEST SWAP2 PUSH2 0x164 CALLDATALOAD SWAP3 DUP4 PUSH1 0x80 DUP3 ADD DUP1 MLOAD DUP3 GT PUSH2 0x1948 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH2 0x17E5 DUP2 PUSH2 0x17D7 PUSH1 0x20 DUP3 ADD SWAP5 DUP6 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1B68 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 PUSH1 0xE4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI DUP8 MSTORE PUSH2 0x104 CALLDATALOAD DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x124 CALLDATALOAD SWAP1 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x184 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1A4 SWAP3 DUP4 CALLDATALOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x1C4 SWAP1 DUP2 CALLDATALOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x1E4 SWAP7 DUP8 CALLDATALOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x204 SWAP5 DUP6 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x224 CALLDATALOAD PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x244 CALLDATALOAD DUP2 DUP7 ADD MSTORE DUP5 MSTORE PUSH2 0x1A0 DUP5 ADD SWAP7 DUP8 GT DUP5 DUP9 LT OR PUSH2 0x523 JUMPI DUP7 PUSH1 0x40 MSTORE DUP4 MLOAD SWAP1 KECCAK256 SUB PUSH2 0x18CD JUMPI STOP JUMPDEST PUSH1 0x84 SWAP6 PUSH1 0x2F PUSH32 0x566572696679206F7264657220646F6573206E6F74206D617463682077697468 SWAP3 PUSH1 0x20 PUSH32 0x206578697374696E67206F726465720000000000000000000000000000000000 SWAP8 PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP7 ADD MSTORE DUP5 ADD MSTORE DUP3 ADD MSTORE ADD MSTORE REVERT JUMPDEST MSTORE DUP4 DUP6 PUSH2 0x1723 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x185 JUMPI PUSH32 0x62AF8DC200000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x1A77 JUMPI DUP2 PUSH32 0x14A2A78400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x1A4D JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1A23 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x19F9 JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x19F2 JUMP JUMPDEST PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x19EB JUMP JUMPDEST PUSH32 0xB8296FC400000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x19E4 JUMP JUMPDEST PUSH32 0x3279856600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x185 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x185 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x185 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x185 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x185 JUMPI JUMP JUMPDEST PUSH2 0x180 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x523 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x185 JUMPI JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x185 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1C04 DUP3 PUSH2 0x1B8B JUMP JUMPDEST SWAP3 PUSH2 0x1C12 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1B68 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x185 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x60 PUSH1 0x40 PUSH2 0x1C70 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP6 ADD MSTORE ADD MLOAD SWAP2 DUP2 PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1C80 DUP3 PUSH2 0x1B13 JUMP JUMPDEST PUSH0 PUSH2 0x160 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE DUP3 PUSH2 0x140 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 PUSH2 0x1CD8 PUSH2 0x1C73 JUMP JUMPDEST POP DUP2 ADD SUB SLT PUSH2 0x185 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH2 0x1C70 SWAP1 PUSH2 0x1EBD JUMP JUMPDEST PUSH1 0x60 SWAP2 PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP4 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 PUSH1 0x20 DUP1 DUP5 ADD SWAP4 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP7 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP4 PUSH0 DUP9 PUSH32 0x0 AND SWAP3 DUP4 PUSH1 0x24 DUP7 ADD MSTORE DUP2 PUSH1 0x44 DUP7 ADD MSTORE PUSH1 0x44 DUP6 MSTORE PUSH2 0x1DB4 DUP6 PUSH2 0x1B4C JUMP JUMPDEST DUP5 MLOAD SWAP1 DUP3 DUP14 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x1E9F JUMPI JUMPDEST POP POP ISZERO PUSH2 0x1E64 JUMPI JUMPDEST POP POP POP DUP6 DUP5 AND PUSH0 DUP2 DUP2 MSTORE PUSH1 0x3 DUP1 DUP5 MSTORE DUP8 DUP3 KECCAK256 DUP3 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP4 SWAP1 SSTORE ADD SSTORE DUP6 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 SWAP7 PUSH2 0x1E54 SWAP2 SWAP1 PUSH2 0x1E4F DUP3 PUSH1 0x64 DUP2 ADD PUSH2 0x1440 JUMP JUMPDEST PUSH2 0x257D JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 MSTORE DUP6 ADD MSTORE AND SWAP1 DUP3 ADD MSTORE LOG1 JUMP JUMPDEST PUSH2 0x1E97 SWAP3 PUSH2 0x1E91 SWAP2 DUP10 MLOAD SWAP2 DUP7 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x1E8B DUP2 PUSH2 0x1B4C JUMP JUMPDEST DUP10 PUSH2 0x257D JUMP JUMPDEST DUP8 PUSH2 0x257D JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x1DCC JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x1EB5 JUMPI POP DUP7 DUP10 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x1DC4 JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x1EAE JUMP JUMPDEST PUSH2 0x1EC5 PUSH2 0x1C73 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH1 0x3 DUP3 MLOAD SWAP3 PUSH2 0x1EFC DUP5 PUSH2 0x1B4C JUMP JUMPDEST DUP5 DUP4 SLOAD AND DUP5 MSTORE DUP5 PUSH1 0x1 DUP5 ADD SLOAD AND SWAP5 DUP7 DUP6 ADD SWAP6 DUP7 MSTORE PUSH1 0x2 DUP5 ADD SLOAD SWAP4 DUP3 DUP7 ADD SWAP5 DUP6 MSTORE PUSH4 0xFFFFFFFF SWAP4 DUP5 SWAP2 ADD SLOAD AND SWAP5 PUSH1 0x60 DUP2 ADD SWAP6 DUP1 DUP8 MSTORE ISZERO PUSH2 0x206E JUMPI DUP2 SWAP1 MLOAD AND SWAP6 MLOAD AND SWAP2 DUP2 MLOAD SWAP4 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS PUSH1 0x4 DUP7 ADD MSTORE DUP8 DUP6 PUSH1 0x24 DUP2 DUP13 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x2064 JUMPI PUSH0 SWAP6 PUSH2 0x2035 JUMPI JUMPDEST POP MLOAD SWAP5 MLOAD AND SWAP5 PUSH32 0x0 SWAP7 DUP3 MLOAD SWAP9 PUSH2 0x1FB3 DUP11 PUSH2 0x1B13 JUMP JUMPDEST DUP10 MSTORE DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH32 0x0 PUSH1 0xC0 DUP4 ADD MSTORE PUSH0 PUSH1 0xE0 DUP4 ADD MSTORE PUSH32 0x0 PUSH2 0x100 DUP4 ADD MSTORE PUSH1 0x1 PUSH2 0x120 DUP4 ADD MSTORE DUP1 PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x205D JUMPI JUMPDEST PUSH2 0x204D DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x1F7F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2043 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP9 DUP5 MLOAD SWAP1 PUSH32 0xC8FC272500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7264657220646F6573206E6F74206578697374000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0xB74 JUMPI JUMP JUMPDEST ISZERO PUSH2 0x20F2 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D696E20616D6F756E74206F7574206973207A65726F00000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST TIMESTAMP GT PUSH2 0x2158 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446561646C696E6520697320696E207468652070617374000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 PUSH0 DUP2 DUP6 ADD PUSH2 0x2219 DUP7 PUSH2 0x14DD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP10 DUP11 DUP6 MSTORE DUP8 PUSH1 0x24 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST DUP6 MLOAD SWAP1 DUP3 DUP7 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x2285 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x2237 JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x227C SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1E4F SWAP3 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x2276 DUP2 PUSH2 0x1B4C JUMP JUMPDEST DUP3 PUSH2 0x257D JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 PUSH2 0x2231 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x22AF JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x2229 JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x22A8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP2 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE DUP2 DUP2 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP1 DUP6 LT DUP4 DUP7 GT OR PUSH2 0x523 JUMPI DUP5 DUP5 MSTORE PUSH2 0x2325 DUP6 PUSH2 0x1B30 JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD MSTORE DUP1 EXTCODESIZE ISZERO PUSH2 0x185 JUMPI PUSH2 0x237D PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x6BFAE1CA00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x1C33 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x23A0 JUMPI PUSH2 0x2397 JUMPI POP POP POP JUMP JUMPDEST DUP3 GT PUSH2 0x523 JUMPI MSTORE JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND DUP1 ISZERO PUSH2 0x2475 JUMPI PUSH1 0x20 PUSH1 0x24 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP4 PUSH2 0x2441 JUMPI JUMPDEST POP DUP3 PUSH2 0x242F JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x243B JUMPI PUSH1 0x1 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x246D JUMPI JUMPDEST DUP2 PUSH2 0x245D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x2422 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2450 JUMP JUMPDEST POP PUSH0 SWAP2 POP DUP2 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 SWAP2 SWAP3 AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND SWAP1 DUP2 ISZERO PUSH2 0x2573 JUMPI PUSH1 0x20 PUSH1 0x24 SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP5 PUSH2 0x253F JUMPI JUMPDEST POP DUP1 DUP5 SUB SWAP4 DUP1 DUP6 GT PUSH2 0x2512 JUMPI SUB PUSH2 0x242F JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP4 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x256B JUMPI JUMPDEST DUP2 PUSH2 0x255B PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP3 PUSH0 PUSH2 0x24FA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x254E JUMP JUMPDEST POP POP SWAP1 POP PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 PUSH1 0x20 SWAP2 DUP3 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL ISZERO PUSH2 0x848 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x25FB JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x25B9 JUMPI POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x25B2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBB PUSH25 0x8BE1190A2F5816CAA3342D23EB0FCB57BF52424D3D75A53808 0xFC 0xC8 0xE3 SUB 0xF8 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1814:11638:76:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1814:11638:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;1273:26:49;;1269:95;;1814:11638:76;;;-1:-1:-1;;;;;;1814:11638:76;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;3052:40:49;;-1:-1:-1;3052:40:49;1203:42:78;1199:107;;1814:11638:76;1316:40:78;1814:11638:76;;;;;;;1156:21:38;1814:11638:76;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;;;1156:21:38;1814:11638:76;;2215:17;1814:11638;2215:17;2281:18;1814:11638;2281:18;2893:30;;2933:31;;;;2974:18;;;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2893:30;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;1156:21:38;-1:-1:-1;1814:11638:76;;-1:-1:-1;1814:11638:76;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;;;;;;;1156:21:38;1814:11638:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;1156:21:38;-1:-1:-1;1814:11638:76;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;-1:-1:-1;1814:11638:76;1199:107:78;1268:27;;;-1:-1:-1;1268:27:78;;-1:-1:-1;1268:27:78;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;1814:11638:76;;-1:-1:-1;1322:31:49;1814:11638:76;-1:-1:-1;1814:11638:76;;;;;;;;;-1:-1:-1;;1814:11638:76;;;-1:-1:-1;;;;;1814:11638:76;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1814:11638:76;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":6815,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_20932":{"entryPoint":6850,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":6885,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_fromMemory":{"entryPoint":7149,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC20_fromMemory":{"entryPoint":7116,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_string":{"entryPoint":7079,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_ConditionalOrderParams":{"entryPoint":7219,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_GPv2Order":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_and_zero_memory_struct_struct_GPv2Order":{"entryPoint":7283,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":7051,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":7016,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_20936":{"entryPoint":6931,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_20937":{"entryPoint":6960,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_20956":{"entryPoint":6988,"id":null,"parameterSlots":1,"returnSlots":0},"fun_callOptionalReturn":{"entryPoint":9597,"id":11024,"parameterSlots":2,"returnSlots":0},"fun_cancelOrder":{"entryPoint":7433,"id":18969,"parameterSlots":3,"returnSlots":0},"fun_checkDeadline":{"entryPoint":8528,"id":19482,"parameterSlots":1,"returnSlots":0},"fun_checkMinAmountOut":{"entryPoint":8427,"id":19497,"parameterSlots":1,"returnSlots":0},"fun_checkOwner":{"entryPoint":8395,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_createCowOrder":{"entryPoint":8887,"id":19527,"parameterSlots":1,"returnSlots":0},"fun_forceApprove":{"entryPoint":8630,"id":10850,"parameterSlots":3,"returnSlots":0},"fun_getOrder":{"entryPoint":7869,"id":19375,"parameterSlots":1,"returnSlots":1},"fun_getOrderStatusAndBalance":{"entryPoint":9341,"id":19466,"parameterSlots":2,"returnSlots":2},"fun_getOrderStatusAndBalance_20941":{"entryPoint":9130,"id":19466,"parameterSlots":1,"returnSlots":2},"fun_getTradeableOrder":{"entryPoint":7371,"id":19160,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"18695":[{"length":32,"start":8184}],"18700":[{"length":32,"start":8071}],"18703":[{"length":32,"start":2649},{"length":32,"start":4955},{"length":32,"start":5473},{"length":32,"start":8911}],"18705":[{"length":32,"start":984},{"length":32,"start":1819},{"length":32,"start":2569},{"length":32,"start":7546}],"18707":[{"length":32,"start":2758},{"length":32,"start":8140}],"19771":[{"length":32,"start":542},{"length":32,"start":1636},{"length":32,"start":3311},{"length":32,"start":3679},{"length":32,"start":4266}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a7146119505750806314a2a784146116785780631626ba7e146110ce578063178ac96e1461107e57806354fd4d5014610f3e57806360e092c614610dfa57806368bce71214610c875780636eba2b1314610c5a5780636f9d75cd14610c25578063715018a614610ba057806379ba509714610ae95780638aebd34814610aaf5780638da5cb5b14610a7d57806393504c5214610a2d5780639b552cc2146109dd578063b8296fc4146108c3578063d83b06a4146105fe578063de557a32146101bc578063e30c3978146101895763f2fde38b146100f8575f80fd5b3461018557602060031936011261018557610111611a9f565b6101196120cb565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b34610185575f60031936011261018557602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346101855760e0600319360112610185576101d5611a9f565b6101dd611ac2565b90604435916064359073ffffffffffffffffffffffffffffffffffffffff93848316809303610185576084359360a4358681168091036101855760c43595877f00000000000000000000000000000000000000000000000000000000000000001633036105d6577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0096875c6105ae576001885d858916958787036102ff5760846040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f46656520746f6b656e20616e642074617267657420746f6b656e20617265207460448201527f68652073616d65000000000000000000000000000000000000000000000000006064820152fd5b85156105505761030e836120eb565b61031782612150565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523060448201528660648201526064815260a081019080821067ffffffffffffffff8311176105235761037b916040528261257d565b610385868261247d565b506004811015806104e95781151580610516575b6104ba575050925f99927f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d95926103fd88876103d66060996122b7565b7f0000000000000000000000000000000000000000000000000000000000000000906121b6565b63ffffffff600360405161041081611b4c565b8c8152602081018681526040820190868252848b8401961686525f8e9052836020525f60408b91209351167fffffffffffffffffffffffff000000000000000000000000000000000000000090818554161784558a6001850192511690825416179055516002820155019151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000825416179055604051968752602087015260408601521692a45d005b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f526104e95760045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b50505f6002821415610399565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f46656520746f6b656e20616d6f756e74206973207a65726f00000000000000006044820152fd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461018557606060031936011261018557610617611a9f565b60243560443573ffffffffffffffffffffffffffffffffffffffff916040517f4ccb20c00000000000000000000000000000000000000000000000000000000081526020908181600481887f0000000000000000000000000000000000000000000000000000000000000000165afa80156108485785915f9161088b575b50163314158061087e575b6105d6576106ad856123aa565b919060048110156104e9576003810361085357506106ca836120eb565b6106d384612150565b84861694855f5260038252600360405f208560028201550163ffffffff86167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790557f000000000000000000000000000000000000000000000000000000000000000090604051907fdd62ed3e0000000000000000000000000000000000000000000000000000000082523060048301528216602482015282816044818a5afa908115610848575f916107ea575b507f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a97849392846080999897966107c394106107d9575b50506122b7565b60405194855284015260408301526060820152a1005b6107e391836121b6565b89846107bc565b90508281819398979695943d8311610841575b6108078183611b68565b81010312610185575194959394929391929091907f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a610785565b503d6107fd565b6040513d5f823e3d90fd5b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50835f54163314156106a0565b809250838092503d83116108bc575b6108a48183611b68565b81010312610185576108b68591611bcc565b87610695565b503d61089a565b346101855760a0600319360112610185576108dc611a9f565b506108e5611ac2565b5067ffffffffffffffff60643581811161018557610907903690600401611ae5565b608492919235918211610185576109d992610929610930933690600401611ae5565b5050611ccb565b6040519182918291909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b0390f35b34610185575f60031936011261018557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610185575f60031936011261018557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610185575f60031936011261018557602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610185575f6003193601126101855760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610185575f6003193601126101855760015473ffffffffffffffffffffffffffffffffffffffff3381831603610b74577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b34610185575f60031936011261018557610bb86120cb565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461018557602060031936011261018557610c46610c41611a9f565b6123aa565b5060405160048210156104e9576020918152f35b34610185576020600319360112610185576109d9610930610c79611a9f565b610c81611c73565b50611ebd565b3461018557604060031936011261018557610ca0611a9f565b610ca8611ac2565b6040517f4ccb20c000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff926020929183816004817f000000000000000000000000000000000000000000000000000000000000000089165afa80156108485785915f91610dc2575b501633141580610db5575b6105d65782602494604051958680927f70a0823100000000000000000000000000000000000000000000000000000000825230600483015285165afa928315610848575f93610d83575b50610d819350611d09565b005b90925083813d8311610dae575b610d9a8183611b68565b8101031261018557610d8192519184610d76565b503d610d90565b50835f5416331415610d2c565b809250858092503d8311610df3575b610ddb8183611b68565b8101031261018557610ded8591611bcc565b86610d21565b503d610dd1565b3461018557604060031936011261018557610e13611a9f565b610e1b611ac2565b73ffffffffffffffffffffffffffffffffffffffff6040517f4ccb20c0000000000000000000000000000000000000000000000000000000008152602081600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156108485782915f91610f02575b50163314159081610ef4575b506105d657610eaa826123aa565b91909260048410156104e95760038403610ec857610d819350611d09565b837fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90505f541633141583610e9c565b9150506020813d602011610f36575b81610f1e60209383611b68565b8101031261018557610f308291611bcc565b85610e90565b3d9150610f11565b34610185575f600319360112610185576040515f6002549060018260011c9160018416918215611074575b60209485851084146110475785879486865291825f14611009575050600114610fae575b50610f9a92500383611b68565b6109d9604051928284938452830190611ba7565b84915060025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace905f915b858310610ff1575050610f9a935082010185610f8d565b80548389018501528794508693909201918101610fda565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685820152610f9a95151560051b8501019250879150610f8d9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f1692610f69565b34610185575f60031936011261018557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101855760406003193601126101855760243567ffffffffffffffff80821161018557366023830112156101855781600401359161110c83611b8b565b9261111a6040519485611b68565b8084526020840191366024838301011161018557815f92602460209301853785010152825183019160208301938084036101a09081811261018557610180809112610185576111746040519561116f87611b13565b611bcc565b855261118260408401611bcc565b602086015261119360608401611bcc565b60408601526080830151606086015260a0830151608086015260c083015163ffffffff811681036101855760a086015260e083015160c0860152610100908184015160e08701526101209182850151908701526101409182850151908115158203610185578701526101609182850151908701528301519085015281015190828211610185570193606085850312610185576040519461123286611b30565b602081015183811161018557810182603f8201121561018557602081015190848211610523578160051b6040519261126d6020830185611b68565b8352604060208401918301019185831161018557604001905b828210611668575050508652604081015183811161018557606090820180960312610185576040516112b781611b30565b60208601519573ffffffffffffffffffffffffffffffffffffffff9687811681036101855782526040810151602083015260608101518581116101855760208591611303930101611bed565b604082015260208701526060810151928311610185576113269201602001611bed565b6040840152604051907ff698da25000000000000000000000000000000000000000000000000000000008252602082600481867f0000000000000000000000000000000000000000000000000000000000000000165afa918215610848575f92611632575b509061144e611440926040519384916020830191909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101845283611b68565b604051809460208083015260a08201815190606060408501528151809152602060c085019201905f5b8181106116195785602061154b8b8b8b6114eb866114dd8d8d60406114cb8b840151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09384888303016060890152611c33565b92015190848303016080850152611ba7565b03601f198101885287611b68565b61155d604051968795869485947f53f00b14000000000000000000000000000000000000000000000000000000008652306004870152336024870152600435604487015260648601525f608486015260e060a486015260e4850190611ba7565b906003198483030160c4850152611ba7565b03917f0000000000000000000000000000000000000000000000000000000000000000165afa8015610848575f906115bd575b6020907fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b506020813d602011611611575b816115d760209383611b68565b8101031261018557517fffffffff000000000000000000000000000000000000000000000000000000008116810361018557602090611590565b3d91506115ca565b8251845289955060209384019390920191600101611477565b91506020823d602011611660575b8161164d60209383611b68565b810103126101855790519061144e61138b565b3d9150611640565b8151815260209182019101611286565b346101855761026060031936011261018557611692611a9f565b5061169b611ac2565b5067ffffffffffffffff60a435818111610185576116bd903690600401611ae5565b919060c435828111610185576116d7903690600401611ae5565b505061018092837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c3601126101855761170f91611ccb565b916101643592836080820180518211611948575b50506040516117e5816117d760208201948591909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101835282611b68565b51902090604051602081019460e43573ffffffffffffffffffffffffffffffffffffffff90818116809103610185578752610104358181168091036101855760408401526101243590811680910361018557606083015261014435608083015260a08201526101843563ffffffff81168091036101855760c08201526101a492833560e08301526101c49081356101008401526101e49687356101208501526102049485358015158091036101855761014086015261022435610160860152610244358186015284526101a0840196871184881017610523578660405283519020036118cd57005b608495602f7f566572696679206f7264657220646f6573206e6f74206d6174636820776974689260207f206578697374696e67206f726465720000000000000000000000000000000000977f8d8a6110000000000000000000000000000000000000000000000000000000008a528601528401528201520152fd5b528385611723565b3461018557602060031936011261018557600435907fffffffff000000000000000000000000000000000000000000000000000000008216809203610185577f62af8dc2000000000000000000000000000000000000000000000000000000008214611a7757817f14a2a7840000000000000000000000000000000000000000000000000000000060209314908115611a4d575b8115611a23575b81156119f9575b5015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836119f2565b7f1626ba7e00000000000000000000000000000000000000000000000000000000811491506119eb565b7fb8296fc400000000000000000000000000000000000000000000000000000000811491506119e4565b7f32798566000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361018557565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361018557565b9181601f840112156101855782359167ffffffffffffffff8311610185576020838186019501011161018557565b610180810190811067ffffffffffffffff82111761052357604052565b6060810190811067ffffffffffffffff82111761052357604052565b6080810190811067ffffffffffffffff82111761052357604052565b90601f601f19910116810190811067ffffffffffffffff82111761052357604052565b67ffffffffffffffff811161052357601f01601f191660200190565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b519073ffffffffffffffffffffffffffffffffffffffff8216820361018557565b81601f8201121561018557805190611c0482611b8b565b92611c126040519485611b68565b8284526020838301011161018557815f9260208093018386015e8301015290565b9060606040611c709373ffffffffffffffffffffffffffffffffffffffff8151168452602081015160208501520151918160408201520190611ba7565b90565b60405190611c8082611b13565b5f610160838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b9081602091611cd8611c73565b5081010312610185573573ffffffffffffffffffffffffffffffffffffffff811680910361018557611c7090611ebd565b6060917f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a936040918251916020808401937f095ea7b3000000000000000000000000000000000000000000000000000000009081865273ffffffffffffffffffffffffffffffffffffffff95835f887f0000000000000000000000000000000000000000000000000000000000000000169283602486015281604486015260448552611db485611b4c565b845190828d5af15f513d82611e9f575b505015611e64575b5050508584165f81815260038084528782208281556001810183905560028101839055015585517fa9059cbb000000000000000000000000000000000000000000000000000000008184015273ffffffffffffffffffffffffffffffffffffffff85166024820152604481018490529096611e549190611e4f8260648101611440565b61257d565b84519586528501521690820152a1565b611e9792611e91918951918683015260248201525f604482015260448152611e8b81611b4c565b8961257d565b8761257d565b5f8080611dcc565b909150611eb557508689163b15155b5f80611dc4565b600114611eae565b611ec5611c73565b5073ffffffffffffffffffffffffffffffffffffffff80911690815f52602090600382526040805f206003825192611efc84611b4c565b848354168452846001840154169486850195865260028401549382860194855263ffffffff9384910154169460608101958087521561206e5781905116955116918151937f70a0823100000000000000000000000000000000000000000000000000000000855230600486015287856024818c5afa948515612064575f95612035575b5051945116947f000000000000000000000000000000000000000000000000000000000000000096825198611fb38a611b13565b89528801528601526060850152608084015260a08301527f000000000000000000000000000000000000000000000000000000000000000060c08301525f60e08301527f000000000000000000000000000000000000000000000000000000000000000061010083015260016101208301528061014083015261016082015290565b9094508781813d831161205d575b61204d8183611b68565b810103126101855751935f611f7f565b503d612043565b83513d5f823e3d90fd5b6064888451907fc8fc27250000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4f7264657220646f6573206e6f742065786973740000000000000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff5f54163303610b7457565b156120f257565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d696e20616d6f756e74206f7574206973207a65726f000000000000000000006044820152fd5b421161215857565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f446561646c696e6520697320696e2074686520706173740000000000000000006044820152fd5b6040519160205f818501612219866114dd7f095ea7b300000000000000000000000000000000000000000000000000000000998a855287602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b85519082865af15f513d82612285575b505015612237575b50505050565b61227c9373ffffffffffffffffffffffffffffffffffffffff611e4f926040519260208401521660248201525f60448201526044815261227681611b4c565b8261257d565b5f808080612231565b9091506122af575073ffffffffffffffffffffffffffffffffffffffff82163b15155b5f80612229565b6001146122a8565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691604091825191166020820152602081528181019267ffffffffffffffff91808510838611176105235784845261232585611b30565b3085525f60608201526080810152803b156101855761237d5f9491859285519687809481937f6bfae1ca0000000000000000000000000000000000000000000000000000000083528960048401526044830190611c33565b6001602483015203925af180156123a05761239757505050565b82116105235752565b82513d5f823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff1690815f52600360205263ffffffff600360405f200154168015612475576020602493604051948580927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa928315610848575f93612441575b508261242f575060029190565b421161243b5760019190565b60039190565b9092506020813d60201161246d575b8161245d60209383611b68565b810103126101855751915f612422565b3d9150612450565b505f91508190565b73ffffffffffffffffffffffffffffffffffffffff909291921691825f52600360205263ffffffff600360405f20015416908115612573576020602494604051958680927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa938415610848575f9461253f575b5080840393808511612512570361242f575060029190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9093506020813d60201161256b575b8161255b60209383611b68565b810103126101855751925f6124fa565b3d915061254e565b505090505f905f90565b905f602091828151910182855af115610848575f513d6125fb575073ffffffffffffffffffffffffffffffffffffffff81163b155b6125b95750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b600114156125b256fea2646970667358221220bb788be1190a2f5816caa3342d23eb0fcb57bf52424d3d75a53808fcc8e303f864736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x1950 JUMPI POP DUP1 PUSH4 0x14A2A784 EQ PUSH2 0x1678 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0x10CE JUMPI DUP1 PUSH4 0x178AC96E EQ PUSH2 0x107E JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0xF3E JUMPI DUP1 PUSH4 0x60E092C6 EQ PUSH2 0xDFA JUMPI DUP1 PUSH4 0x68BCE712 EQ PUSH2 0xC87 JUMPI DUP1 PUSH4 0x6EBA2B13 EQ PUSH2 0xC5A JUMPI DUP1 PUSH4 0x6F9D75CD EQ PUSH2 0xC25 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xBA0 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xAE9 JUMPI DUP1 PUSH4 0x8AEBD348 EQ PUSH2 0xAAF JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xA7D JUMPI DUP1 PUSH4 0x93504C52 EQ PUSH2 0xA2D JUMPI DUP1 PUSH4 0x9B552CC2 EQ PUSH2 0x9DD JUMPI DUP1 PUSH4 0xB8296FC4 EQ PUSH2 0x8C3 JUMPI DUP1 PUSH4 0xD83B06A4 EQ PUSH2 0x5FE JUMPI DUP1 PUSH4 0xDE557A32 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x189 JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0xF8 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x111 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0x119 PUSH2 0x20CB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x1D5 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0x1DD PUSH2 0x1AC2 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP4 AND DUP1 SWAP4 SUB PUSH2 0x185 JUMPI PUSH1 0x84 CALLDATALOAD SWAP4 PUSH1 0xA4 CALLDATALOAD DUP7 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0xC4 CALLDATALOAD SWAP6 DUP8 PUSH32 0x0 AND CALLER SUB PUSH2 0x5D6 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SWAP7 DUP8 TLOAD PUSH2 0x5AE JUMPI PUSH1 0x1 DUP9 TSTORE DUP6 DUP10 AND SWAP6 DUP8 DUP8 SUB PUSH2 0x2FF JUMPI PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616E642074617267657420746F6B656E206172652074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x68652073616D6500000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST DUP6 ISZERO PUSH2 0x550 JUMPI PUSH2 0x30E DUP4 PUSH2 0x20EB JUMP JUMPDEST PUSH2 0x317 DUP3 PUSH2 0x2150 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE DUP7 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE PUSH1 0xA0 DUP2 ADD SWAP1 DUP1 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x523 JUMPI PUSH2 0x37B SWAP2 PUSH1 0x40 MSTORE DUP3 PUSH2 0x257D JUMP JUMPDEST PUSH2 0x385 DUP7 DUP3 PUSH2 0x247D JUMP JUMPDEST POP PUSH1 0x4 DUP2 LT ISZERO DUP1 PUSH2 0x4E9 JUMPI DUP2 ISZERO ISZERO DUP1 PUSH2 0x516 JUMPI JUMPDEST PUSH2 0x4BA JUMPI POP POP SWAP3 PUSH0 SWAP10 SWAP3 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP6 SWAP3 PUSH2 0x3FD DUP9 DUP8 PUSH2 0x3D6 PUSH1 0x60 SWAP10 PUSH2 0x22B7 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0x21B6 JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 MLOAD PUSH2 0x410 DUP2 PUSH2 0x1B4C JUMP JUMPDEST DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 DUP2 MSTORE PUSH1 0x40 DUP3 ADD SWAP1 DUP7 DUP3 MSTORE DUP5 DUP12 DUP5 ADD SWAP7 AND DUP7 MSTORE PUSH0 DUP15 SWAP1 MSTORE DUP4 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP12 SWAP2 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 SLOAD AND OR DUP5 SSTORE DUP11 PUSH1 0x1 DUP6 ADD SWAP3 MLOAD AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE MLOAD PUSH1 0x2 DUP3 ADD SSTORE ADD SWAP2 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x40 DUP7 ADD MSTORE AND SWAP3 LOG4 TSTORE STOP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH2 0x4E9 JUMPI PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP PUSH0 PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x399 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616D6F756E74206973207A65726F0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x617 PUSH2 0x1A9F JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0x88B JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0x87E JUMPI JUMPDEST PUSH2 0x5D6 JUMPI PUSH2 0x6AD DUP6 PUSH2 0x23AA JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x3 DUP2 SUB PUSH2 0x853 JUMPI POP PUSH2 0x6CA DUP4 PUSH2 0x20EB JUMP JUMPDEST PUSH2 0x6D3 DUP5 PUSH2 0x2150 JUMP JUMPDEST DUP5 DUP7 AND SWAP5 DUP6 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH1 0x2 DUP3 ADD SSTORE ADD PUSH4 0xFFFFFFFF DUP7 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0x0 SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x44 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP2 PUSH2 0x7EA JUMPI JUMPDEST POP PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A SWAP8 DUP5 SWAP4 SWAP3 DUP5 PUSH1 0x80 SWAP10 SWAP9 SWAP8 SWAP7 PUSH2 0x7C3 SWAP5 LT PUSH2 0x7D9 JUMPI JUMPDEST POP POP PUSH2 0x22B7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE LOG1 STOP JUMPDEST PUSH2 0x7E3 SWAP2 DUP4 PUSH2 0x21B6 JUMP JUMPDEST DUP10 DUP5 PUSH2 0x7BC JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 SWAP4 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 RETURNDATASIZE DUP4 GT PUSH2 0x841 JUMPI JUMPDEST PUSH2 0x807 DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP5 SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A PUSH2 0x785 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x7FD JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0x6A0 JUMP JUMPDEST DUP1 SWAP3 POP DUP4 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x8BC JUMPI JUMPDEST PUSH2 0x8A4 DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0x8B6 DUP6 SWAP2 PUSH2 0x1BCC JUMP JUMPDEST DUP8 PUSH2 0x695 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x89A JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x8DC PUSH2 0x1A9F JUMP JUMPDEST POP PUSH2 0x8E5 PUSH2 0x1AC2 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x185 JUMPI PUSH2 0x907 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST PUSH1 0x84 SWAP3 SWAP2 SWAP3 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x185 JUMPI PUSH2 0x9D9 SWAP3 PUSH2 0x929 PUSH2 0x930 SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST POP POP PUSH2 0x1CCB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0xB74 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xBB8 PUSH2 0x20CB JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xC46 PUSH2 0xC41 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0x23AA JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x20 SWAP2 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x9D9 PUSH2 0x930 PUSH2 0xC79 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0xC81 PUSH2 0x1C73 JUMP JUMPDEST POP PUSH2 0x1EBD JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xCA0 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0xCA8 PUSH2 0x1AC2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 PUSH1 0x20 SWAP3 SWAP2 DUP4 DUP2 PUSH1 0x4 DUP2 PUSH32 0x0 DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0xDC2 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0xDB5 JUMPI JUMPDEST PUSH2 0x5D6 JUMPI DUP3 PUSH1 0x24 SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP4 PUSH2 0xD83 JUMPI JUMPDEST POP PUSH2 0xD81 SWAP4 POP PUSH2 0x1D09 JUMP JUMPDEST STOP JUMPDEST SWAP1 SWAP3 POP DUP4 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xDAE JUMPI JUMPDEST PUSH2 0xD9A DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0xD81 SWAP3 MLOAD SWAP2 DUP5 PUSH2 0xD76 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xD90 JUMP JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0xD2C JUMP JUMPDEST DUP1 SWAP3 POP DUP6 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xDF3 JUMPI JUMPDEST PUSH2 0xDDB DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0xDED DUP6 SWAP2 PUSH2 0x1BCC JUMP JUMPDEST DUP7 PUSH2 0xD21 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xDD1 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xE13 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0xE1B PUSH2 0x1AC2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0xF02 JUMPI JUMPDEST POP AND CALLER EQ ISZERO SWAP1 DUP2 PUSH2 0xEF4 JUMPI JUMPDEST POP PUSH2 0x5D6 JUMPI PUSH2 0xEAA DUP3 PUSH2 0x23AA JUMP JUMPDEST SWAP2 SWAP1 SWAP3 PUSH1 0x4 DUP5 LT ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x3 DUP5 SUB PUSH2 0xEC8 JUMPI PUSH2 0xD81 SWAP4 POP PUSH2 0x1D09 JUMP JUMPDEST DUP4 PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH0 SLOAD AND CALLER EQ ISZERO DUP4 PUSH2 0xE9C JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF36 JUMPI JUMPDEST DUP2 PUSH2 0xF1E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0xF30 DUP3 SWAP2 PUSH2 0x1BCC JUMP JUMPDEST DUP6 PUSH2 0xE90 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF11 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH1 0x2 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x1074 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x1047 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x1009 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xFAE JUMPI JUMPDEST POP PUSH2 0xF9A SWAP3 POP SUB DUP4 PUSH2 0x1B68 JUMP JUMPDEST PUSH2 0x9D9 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x2 PUSH0 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0xFF1 JUMPI POP POP PUSH2 0xF9A SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0xF8D JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0xFDA JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0xF9A SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0xF8D SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0xF69 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT PUSH2 0x185 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x185 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x110C DUP4 PUSH2 0x1B8B JUMP JUMPDEST SWAP3 PUSH2 0x111A PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1B68 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP2 CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0x185 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH1 0x20 SWAP4 ADD DUP6 CALLDATACOPY DUP6 ADD ADD MSTORE DUP3 MLOAD DUP4 ADD SWAP2 PUSH1 0x20 DUP4 ADD SWAP4 DUP1 DUP5 SUB PUSH2 0x1A0 SWAP1 DUP2 DUP2 SLT PUSH2 0x185 JUMPI PUSH2 0x180 DUP1 SWAP2 SLT PUSH2 0x185 JUMPI PUSH2 0x1174 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x116F DUP8 PUSH2 0x1B13 JUMP JUMPDEST PUSH2 0x1BCC JUMP JUMPDEST DUP6 MSTORE PUSH2 0x1182 PUSH1 0x40 DUP5 ADD PUSH2 0x1BCC JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x1193 PUSH1 0x60 DUP5 ADD PUSH2 0x1BCC JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x185 JUMPI PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP5 ADD MLOAD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x120 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH2 0x140 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x185 JUMPI DUP8 ADD MSTORE PUSH2 0x160 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x185 JUMPI ADD SWAP4 PUSH1 0x60 DUP6 DUP6 SUB SLT PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH2 0x1232 DUP7 PUSH2 0x1B30 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x185 JUMPI DUP2 ADD DUP3 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x185 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x523 JUMPI DUP2 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP3 PUSH2 0x126D PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1B68 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD SWAP2 DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x185 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1668 JUMPI POP POP POP DUP7 MSTORE PUSH1 0x40 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x185 JUMPI PUSH1 0x60 SWAP1 DUP3 ADD DUP1 SWAP7 SUB SLT PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD PUSH2 0x12B7 DUP2 PUSH2 0x1B30 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP2 AND DUP2 SUB PUSH2 0x185 JUMPI DUP3 MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD DUP6 DUP2 GT PUSH2 0x185 JUMPI PUSH1 0x20 DUP6 SWAP2 PUSH2 0x1303 SWAP4 ADD ADD PUSH2 0x1BED JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP3 DUP4 GT PUSH2 0x185 JUMPI PUSH2 0x1326 SWAP3 ADD PUSH1 0x20 ADD PUSH2 0x1BED JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF698DA2500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP3 PUSH2 0x1632 JUMPI JUMPDEST POP SWAP1 PUSH2 0x144E PUSH2 0x1440 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x1B68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 PUSH1 0x20 DUP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP2 MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP6 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0xC0 DUP6 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1619 JUMPI DUP6 PUSH1 0x20 PUSH2 0x154B DUP12 DUP12 DUP12 PUSH2 0x14EB DUP7 PUSH2 0x14DD DUP14 DUP14 PUSH1 0x40 PUSH2 0x14CB DUP12 DUP5 ADD MLOAD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 SWAP4 DUP5 DUP9 DUP4 SUB ADD PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x1C33 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1BA7 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP9 MSTORE DUP8 PUSH2 0x1B68 JUMP JUMPDEST PUSH2 0x155D PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP5 PUSH32 0x53F00B1400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE ADDRESS PUSH1 0x4 DUP8 ADD MSTORE CALLER PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0x44 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD MSTORE PUSH0 PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0xE0 PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xE4 DUP6 ADD SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0xC4 DUP6 ADD MSTORE PUSH2 0x1BA7 JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP1 PUSH2 0x15BD JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1611 JUMPI JUMPDEST DUP2 PUSH2 0x15D7 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x185 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1590 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x15CA JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP10 SWAP6 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1477 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1660 JUMPI JUMPDEST DUP2 PUSH2 0x164D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI SWAP1 MLOAD SWAP1 PUSH2 0x144E PUSH2 0x138B JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1640 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1286 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH2 0x260 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x1692 PUSH2 0x1A9F JUMP JUMPDEST POP PUSH2 0x169B PUSH2 0x1AC2 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x185 JUMPI PUSH2 0x16BD SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x185 JUMPI PUSH2 0x16D7 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST POP POP PUSH2 0x180 SWAP3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x170F SWAP2 PUSH2 0x1CCB JUMP JUMPDEST SWAP2 PUSH2 0x164 CALLDATALOAD SWAP3 DUP4 PUSH1 0x80 DUP3 ADD DUP1 MLOAD DUP3 GT PUSH2 0x1948 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH2 0x17E5 DUP2 PUSH2 0x17D7 PUSH1 0x20 DUP3 ADD SWAP5 DUP6 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1B68 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 PUSH1 0xE4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI DUP8 MSTORE PUSH2 0x104 CALLDATALOAD DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x124 CALLDATALOAD SWAP1 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x184 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1A4 SWAP3 DUP4 CALLDATALOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x1C4 SWAP1 DUP2 CALLDATALOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x1E4 SWAP7 DUP8 CALLDATALOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x204 SWAP5 DUP6 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x224 CALLDATALOAD PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x244 CALLDATALOAD DUP2 DUP7 ADD MSTORE DUP5 MSTORE PUSH2 0x1A0 DUP5 ADD SWAP7 DUP8 GT DUP5 DUP9 LT OR PUSH2 0x523 JUMPI DUP7 PUSH1 0x40 MSTORE DUP4 MLOAD SWAP1 KECCAK256 SUB PUSH2 0x18CD JUMPI STOP JUMPDEST PUSH1 0x84 SWAP6 PUSH1 0x2F PUSH32 0x566572696679206F7264657220646F6573206E6F74206D617463682077697468 SWAP3 PUSH1 0x20 PUSH32 0x206578697374696E67206F726465720000000000000000000000000000000000 SWAP8 PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP7 ADD MSTORE DUP5 ADD MSTORE DUP3 ADD MSTORE ADD MSTORE REVERT JUMPDEST MSTORE DUP4 DUP6 PUSH2 0x1723 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x185 JUMPI PUSH32 0x62AF8DC200000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x1A77 JUMPI DUP2 PUSH32 0x14A2A78400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x1A4D JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1A23 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x19F9 JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x19F2 JUMP JUMPDEST PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x19EB JUMP JUMPDEST PUSH32 0xB8296FC400000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x19E4 JUMP JUMPDEST PUSH32 0x3279856600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x185 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x185 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x185 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x185 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x185 JUMPI JUMP JUMPDEST PUSH2 0x180 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x523 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x185 JUMPI JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x185 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1C04 DUP3 PUSH2 0x1B8B JUMP JUMPDEST SWAP3 PUSH2 0x1C12 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1B68 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x185 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x60 PUSH1 0x40 PUSH2 0x1C70 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP6 ADD MSTORE ADD MLOAD SWAP2 DUP2 PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1C80 DUP3 PUSH2 0x1B13 JUMP JUMPDEST PUSH0 PUSH2 0x160 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE DUP3 PUSH2 0x140 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 PUSH2 0x1CD8 PUSH2 0x1C73 JUMP JUMPDEST POP DUP2 ADD SUB SLT PUSH2 0x185 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH2 0x1C70 SWAP1 PUSH2 0x1EBD JUMP JUMPDEST PUSH1 0x60 SWAP2 PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP4 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 PUSH1 0x20 DUP1 DUP5 ADD SWAP4 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP7 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP4 PUSH0 DUP9 PUSH32 0x0 AND SWAP3 DUP4 PUSH1 0x24 DUP7 ADD MSTORE DUP2 PUSH1 0x44 DUP7 ADD MSTORE PUSH1 0x44 DUP6 MSTORE PUSH2 0x1DB4 DUP6 PUSH2 0x1B4C JUMP JUMPDEST DUP5 MLOAD SWAP1 DUP3 DUP14 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x1E9F JUMPI JUMPDEST POP POP ISZERO PUSH2 0x1E64 JUMPI JUMPDEST POP POP POP DUP6 DUP5 AND PUSH0 DUP2 DUP2 MSTORE PUSH1 0x3 DUP1 DUP5 MSTORE DUP8 DUP3 KECCAK256 DUP3 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP4 SWAP1 SSTORE ADD SSTORE DUP6 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 SWAP7 PUSH2 0x1E54 SWAP2 SWAP1 PUSH2 0x1E4F DUP3 PUSH1 0x64 DUP2 ADD PUSH2 0x1440 JUMP JUMPDEST PUSH2 0x257D JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 MSTORE DUP6 ADD MSTORE AND SWAP1 DUP3 ADD MSTORE LOG1 JUMP JUMPDEST PUSH2 0x1E97 SWAP3 PUSH2 0x1E91 SWAP2 DUP10 MLOAD SWAP2 DUP7 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x1E8B DUP2 PUSH2 0x1B4C JUMP JUMPDEST DUP10 PUSH2 0x257D JUMP JUMPDEST DUP8 PUSH2 0x257D JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x1DCC JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x1EB5 JUMPI POP DUP7 DUP10 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x1DC4 JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x1EAE JUMP JUMPDEST PUSH2 0x1EC5 PUSH2 0x1C73 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH1 0x3 DUP3 MLOAD SWAP3 PUSH2 0x1EFC DUP5 PUSH2 0x1B4C JUMP JUMPDEST DUP5 DUP4 SLOAD AND DUP5 MSTORE DUP5 PUSH1 0x1 DUP5 ADD SLOAD AND SWAP5 DUP7 DUP6 ADD SWAP6 DUP7 MSTORE PUSH1 0x2 DUP5 ADD SLOAD SWAP4 DUP3 DUP7 ADD SWAP5 DUP6 MSTORE PUSH4 0xFFFFFFFF SWAP4 DUP5 SWAP2 ADD SLOAD AND SWAP5 PUSH1 0x60 DUP2 ADD SWAP6 DUP1 DUP8 MSTORE ISZERO PUSH2 0x206E JUMPI DUP2 SWAP1 MLOAD AND SWAP6 MLOAD AND SWAP2 DUP2 MLOAD SWAP4 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS PUSH1 0x4 DUP7 ADD MSTORE DUP8 DUP6 PUSH1 0x24 DUP2 DUP13 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x2064 JUMPI PUSH0 SWAP6 PUSH2 0x2035 JUMPI JUMPDEST POP MLOAD SWAP5 MLOAD AND SWAP5 PUSH32 0x0 SWAP7 DUP3 MLOAD SWAP9 PUSH2 0x1FB3 DUP11 PUSH2 0x1B13 JUMP JUMPDEST DUP10 MSTORE DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH32 0x0 PUSH1 0xC0 DUP4 ADD MSTORE PUSH0 PUSH1 0xE0 DUP4 ADD MSTORE PUSH32 0x0 PUSH2 0x100 DUP4 ADD MSTORE PUSH1 0x1 PUSH2 0x120 DUP4 ADD MSTORE DUP1 PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x205D JUMPI JUMPDEST PUSH2 0x204D DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x1F7F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2043 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP9 DUP5 MLOAD SWAP1 PUSH32 0xC8FC272500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7264657220646F6573206E6F74206578697374000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0xB74 JUMPI JUMP JUMPDEST ISZERO PUSH2 0x20F2 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D696E20616D6F756E74206F7574206973207A65726F00000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST TIMESTAMP GT PUSH2 0x2158 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446561646C696E6520697320696E207468652070617374000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 PUSH0 DUP2 DUP6 ADD PUSH2 0x2219 DUP7 PUSH2 0x14DD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP10 DUP11 DUP6 MSTORE DUP8 PUSH1 0x24 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST DUP6 MLOAD SWAP1 DUP3 DUP7 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x2285 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x2237 JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x227C SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1E4F SWAP3 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x2276 DUP2 PUSH2 0x1B4C JUMP JUMPDEST DUP3 PUSH2 0x257D JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 PUSH2 0x2231 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x22AF JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x2229 JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x22A8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP2 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE DUP2 DUP2 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP1 DUP6 LT DUP4 DUP7 GT OR PUSH2 0x523 JUMPI DUP5 DUP5 MSTORE PUSH2 0x2325 DUP6 PUSH2 0x1B30 JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD MSTORE DUP1 EXTCODESIZE ISZERO PUSH2 0x185 JUMPI PUSH2 0x237D PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x6BFAE1CA00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x1C33 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x23A0 JUMPI PUSH2 0x2397 JUMPI POP POP POP JUMP JUMPDEST DUP3 GT PUSH2 0x523 JUMPI MSTORE JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND DUP1 ISZERO PUSH2 0x2475 JUMPI PUSH1 0x20 PUSH1 0x24 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP4 PUSH2 0x2441 JUMPI JUMPDEST POP DUP3 PUSH2 0x242F JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x243B JUMPI PUSH1 0x1 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x246D JUMPI JUMPDEST DUP2 PUSH2 0x245D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x2422 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2450 JUMP JUMPDEST POP PUSH0 SWAP2 POP DUP2 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 SWAP2 SWAP3 AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND SWAP1 DUP2 ISZERO PUSH2 0x2573 JUMPI PUSH1 0x20 PUSH1 0x24 SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP5 PUSH2 0x253F JUMPI JUMPDEST POP DUP1 DUP5 SUB SWAP4 DUP1 DUP6 GT PUSH2 0x2512 JUMPI SUB PUSH2 0x242F JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP4 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x256B JUMPI JUMPDEST DUP2 PUSH2 0x255B PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP3 PUSH0 PUSH2 0x24FA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x254E JUMP JUMPDEST POP POP SWAP1 POP PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 PUSH1 0x20 SWAP2 DUP3 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL ISZERO PUSH2 0x848 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x25FB JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x25B9 JUMPI POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x25B2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBB PUSH25 0x8BE1190A2F5816CAA3342D23EB0FCB57BF52424D3D75A53808 0xFC 0xC8 0xE3 SUB 0xF8 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1814:11638:76:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;:::i;:::-;1500:62:49;;:::i;:::-;1814:11638:76;;;;;;;1738:24:50;1814:11638:76;;;1738:24:50;1814:11638:76;;;;1777:43:50;1814:11638:76;1777:43:50;;1814:11638:76;;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;1311:13:50;1814:11638:76;;;;;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;799:18:78;;;1814:11638:76;777:10:78;:41;773:97;;551:66:42;2806:53:43;;;1316:93:42;;1814:11638:76;3051:52:43;;1814:11638:76;;;;6365:23;;;1814:11638;;;;;6411:65;;;1814:11638;;6411:65;;1814:11638;;;;;;;;;;;;;;;;6411:65;6361:239;6497:19;;6493:107;;6629:23;;;:::i;:::-;6678:8;;;:::i;:::-;1814:11638;;;;1745:53:60;;;777:10:78;1814:11638:76;1745:53:60;;1814:11638:76;6776:4;1814:11638;;;;;;;;;;1745:53:60;;1814:11638:76;;;;;;;;;;;;;1745:53:60;1814:11638:76;;;1745:53:60;;:::i;:::-;6844:51:76;;;;:::i;:::-;1814:11638;;;;;;;;6909:33;;;:65;;;6361:239;6905:310;;7241:8;;;1814:11638;7241:8;;7540:98;7241:8;;7297:14;7241:8;;;1814:11638;7241:8;;:::i;:::-;7283:12;7297:14;;:::i;:::-;1814:11638;7323:7;1814:11638;;;;;:::i;:::-;;;;;7343:181;;1814:11638;;;;7343:181;;1814:11638;;;;7343:181;;;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7540:98;;3051:52:43;1814:11638:76;6905:310;7172:32;1814:11638;7172:32;1814:11638;;;;;;7172:32;1814:11638;;;;;;;;;;6909:65;1814:11638;;;6956:18;6946:28;;;6909:65;;1814:11638;;;;;;;;;;6493:107;1814:11638;;;6539:50;;;1814:11638;;6539:50;;1814:11638;;;;;;;;;;;6539:50;1316:93:42;1368:30;1814:11638:76;1368:30:42;1814:11638:76;;1368:30:42;773:97:78;841:18;1814:11638:76;841:18:78;1814:11638:76;;841:18:78;1814:11638:76;;;;;-1:-1:-1;;1814:11638:76;;;;;;;:::i;:::-;;;;;;;;;;956:36:78;;1814:11638:76;956:18:78;;;1814:11638:76;956:18:78;;;1814:11638:76;956:36:78;;;;;;;;1814:11638:76;956:36:78;;;1814:11638:76;;;942:10:78;:50;;:75;;;1814:11638:76;938:131:78;;11575:37:76;;;:::i;:::-;1814:11638;;;;;;;;3825:18;3815:28;;3811:98;;3938:12;;;;:::i;:::-;3976:8;;;:::i;:::-;1814:11638;;;;;;;3825:18;1814:11638;;3825:18;1814:11638;;;3996:29;;;;1814:11638;4050:25;1814:11638;;;;;;;;;;4205:12;1814:11638;;;4172:46;1814:11638;4172:46;;4198:4;1814:11638;4172:46;;1814:11638;;;;;;;4172:46;;1814:11638;4172:46;;;;;;;;;1814:11638;4172:46;;;1814:11638;4172:55;4346:53;4172:55;;;;;1814:11638;4172:55;;;;4322:7;4172:55;;4168:128;;1814:11638;4322:7;;;:::i;:::-;1814:11638;;;;;;;;;;;;;;;;4346:53;1814:11638;4168:128;4278:6;;;;:::i;:::-;4168:128;;;;4172:46;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1814:11638;;;;;4172:46;;;;;;1814:11638;;4172:46;;1814:11638;4346:53;4172:46;;;;;;;;1814:11638;;;;;;;;;3811:98;3866:32;1814:11638;3866:32;1814:11638;;;;3866:32;942:75:78;1814:11638:76;;;;;942:10:78;996:21;;942:75;;956:36;;;;;;;;;;;;;;;;;;:::i;:::-;;;1814:11638:76;;;;;;;;:::i;:::-;956:36:78;;;;;;;;1814:11638:76;;;;;-1:-1:-1;;1814:11638:76;;;;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;;;2357:37;1814:11638;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;;;2306:45;1814:11638;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;;2400:32;1814:11638;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;1311:13:50;1814:11638:76;;735:10:64;1814:11638:76;;;2339:24:50;2335:96;;1814:11638:76;;;;1311:13:50;1814:11638:76;;;735:10:64;;1814:11638:76;;;;;;735:10:64;1814:11638:76;;3052:40:49;1814:11638:76;3052:40:49;;1814:11638:76;2335:96:50;2386:34;1814:11638:76;2386:34:50;735:10:64;1814:11638:76;;;;2386:34:50;1814:11638:76;;;;;-1:-1:-1;;1814:11638:76;;;;;1500:62:49;;:::i;:::-;1814:11638:76;;;;2093:20:50;1814:11638:76;;2093:20:50;1814:11638:76;;;;;;;;;3052:40:49;;;;1814:11638:76;;;;;;-1:-1:-1;;1814:11638:76;;;;;11575:37;1814:11638;;:::i;:::-;11575:37;:::i;:::-;1814:11638;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;3348:18;1814:11638;;:::i;:::-;;;:::i;:::-;;3348:18;:::i;1814:11638::-;;;;;-1:-1:-1;;1814:11638:76;;;;;;;:::i;:::-;;;:::i;:::-;;;;956:36:78;;1814:11638:76;;;;;;;;;956:18:78;1814:11638:76;;956:36:78;;;;;;;;1814:11638:76;956:36:78;;;1814:11638:76;;;942:10:78;:50;;:75;;;1814:11638:76;938:131:78;;1814:11638:76;;;;;4969:32;;;;1814:11638;4969:32;;4995:4;1814:11638;4969:32;;1814:11638;;;4969:32;;;;;;;1814:11638;4969:32;;;1814:11638;4969:32;;;;;:::i;:::-;1814:11638;4969:32;;;;;;;;;;;;;;;;:::i;:::-;;;1814:11638;;;;4969:32;1814:11638;;4969:32;;;;;;;;;942:75:78;1814:11638:76;;;;;942:10:78;996:21;;942:75;;956:36;;;;;;;;;;;;;;;;;;:::i;:::-;;;1814:11638:76;;;;;;;;:::i;:::-;956:36:78;;;;;;;;1814:11638:76;;;;;-1:-1:-1;;1814:11638:76;;;;;;;:::i;:::-;;;:::i;:::-;;;;;956:36:78;;1814:11638:76;956:18:78;1814:11638:76;956:18:78;;;1814:11638:76;956:36:78;;;;;;;;1814:11638:76;956:36:78;;;1814:11638:76;;;942:10:78;:50;;:75;;;;1814:11638:76;938:131:78;;;11575:37:76;;;:::i;:::-;1814:11638;;;;;;;;;4646:18;4636:28;;4632:98;;4772:6;;;;:::i;4632:98::-;4687:32;;1814:11638;4687:32;1814:11638;;;;4687:32;942:75:78;1814:11638:76;;;;;942:10:78;996:21;;942:75;;;956:36;;;;1814:11638:76;956:36:78;;1814:11638:76;956:36:78;;;;;;1814:11638:76;956:36:78;;;:::i;:::-;;;1814:11638:76;;;;;;;;:::i;:::-;956:36:78;;;;;;-1:-1:-1;956:36:78;;1814:11638:76;;;;;-1:-1:-1;;1814:11638:76;;;;;;;;991:8:38;1814:11638:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;991:8:38;1814:11638:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;-1:-1:-1;1814:11638:76;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;;;479:55:78;1814:11638:76;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9344:92;;;1814:11638;9344:92;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;9646:31;1814:11638;9646:31;;1814:11638;9512:13;1814:11638;9512:13;;;1814:11638;9646:31;;;;;;;1814:11638;9646:31;;;1814:11638;;;9723:17;;1814:11638;;;9723:17;;;1814:11638;9723:17;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9723:17;;-1:-1:-1;;9723:17:76;;;;;;:::i;:::-;1814:11638;;9758:19;;1814:11638;9758:19;;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9758:19;1814:11638;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;9758:19;-1:-1:-1;;9758:19:76;;;;;;:::i;:::-;1814:11638;;;9512:279;;;;;;;1814:11638;9512:279;;9572:4;1814:11638;9512:279;;1814:11638;9595:10;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;1814:11638:76;;;;;;;;;:::i;:::-;9512:279;:13;;1814:11638;9512:279;;;;;;1814:11638;9512:279;;;1814:11638;;;;;;;;;;;9512:279;;1814:11638;9512:279;;1814:11638;9512:279;;;;;;1814:11638;9512:279;;;:::i;:::-;;;1814:11638;;;;;;;;;;;;;9512:279;;;;;;-1:-1:-1;9512:279:76;;1814:11638;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;9646:31;;;1814:11638;9646:31;;1814:11638;9646:31;;;;;;1814:11638;9646:31;;;:::i;:::-;;;1814:11638;;;;;;;9723:17;9646:31;;;;;-1:-1:-1;9646:31:76;;1814:11638;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;8546:65;;;:::i;:::-;1814:11638;8626:16;1814:11638;8645:20;;1814:11638;8645:20;;1814:11638;;8626:39;;8622:109;;1814:11638;;;;;8755:22;;;1814:11638;8755:22;;;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8755:22;;-1:-1:-1;;8755:22:76;;;;;;:::i;:::-;1814:11638;8745:33;;1814:11638;;;;8792:18;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8792:18;;1814:11638;;;;;;;;;;;;;;;;;8782:29;;8745:66;8741:177;;1814:11638;8741:177;1814:11638;8834:73;1814:11638;;8834:73;1814:11638;;8834:73;;;;;;1814:11638;;;;;;;;;8834:73;8622:109;1814:11638;8622:109;;;;1814:11638;;;;;-1:-1:-1;;1814:11638:76;;;;;;;;;;;;;;;;;10011:50;;10007:123;;10159:53;10174:38;1814:11638;10159:53;;:131;;;;;1814:11638;10159:188;;;;1814:11638;10159:244;;;;1814:11638;;;;;;;10159:244;10378:25;10363:40;;;10159:244;;;:188;10321:26;10306:41;;;-1:-1:-1;10159:188:76;;:131;10243:47;10228:62;;;-1:-1:-1;10159:131:76;;10007:123;10084:35;1814:11638;10084:35;1814:11638;;10084:35;1814:11638;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;1814:11638:76;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;1814:11638:76;;;;:::o;:::-;;-1:-1:-1;;1814:11638:76;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7917:295::-;;;1814:11638;7917:295;1814:11638;;:::i;:::-;;8134:34;;1814:11638;;;;;;;;;;;;;8187:18;;;:::i;5015:284::-;1814:11638;5015:284;5252:40;5015:284;1814:11638;;;;5199:47:60;;;;;1814:11638:76;;5199:47:60;;;;1814:11638:76;5127:12;;5141:1;5127:12;;1814:11638;5199:47:60;;;;;1814:11638:76;;;;;;;5199:47:60;;;;;:::i;:::-;9770:199;;;;;;;5141:1:76;9770:199:60;;9985:80;;;5015:284:76;5261:45:60;;;5257:201;;5015:284:76;-1:-1:-1;;;1814:11638:76;;;5141:1;1814:11638;;;5160:7;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;1328:43:60;;;;1814:11638:76;;;5199:47:60;1328:43;;1814:11638:76;;;;;;;;;1328:43:60;;1814:11638:76;1328:43:60;1814:11638:76;;;;1328:43:60;1814:11638:76;1328:43:60;;:::i;:::-;1814:11638:76;;;;;;;;;;;;;5252:40;5015:284::o;5257:201:60:-;5434:12;1814:11638:76;5349:43:60;1814:11638:76;;;5349:43:60;;;;;5199:47;5349:43;;1814:11638:76;5141:1;1814:11638;;;;;5349:43:60;;;;;:::i;:::-;;;:::i;:::-;5434:12;;:::i;:::-;5257:201;;;;;9985:80;9997:67;;-1:-1:-1;9997:15:60;;1814:11638:76;;;;10015:26:60;:30;;9997:67;9985:80;;;;9997:67;10063:1;10048:16;9997:67;;10629:828:76;1814:11638;;:::i;:::-;;;;;;;;-1:-1:-1;1814:11638:76;;;10745:7;1814:11638;;;;-1:-1:-1;1814:11638:76;10745:7;1814:11638;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10776:24;10772:99;;1814:11638;;;;;;;;;;11070:32;1814:11638;11070:32;;11096:4;11070:32;;;1814:11638;11070:32;;1814:11638;11070:32;;;;;;;;;-1:-1:-1;11070:32:76;;;10629:828;1814:11638;;;;;11374:13;;1814:11638;;;;;;;:::i;:::-;;;10900:550;;1814:11638;10900:550;;1814:11638;;10900:550;;1814:11638;;10900:550;;1814:11638;10900:550;;;1814:11638;11227:7;10900:550;;;1814:11638;-1:-1:-1;1814:11638:76;10900:550;;1814:11638;11288:9;10900:550;;;1814:11638;;10900:550;;;1814:11638;10900:550;;;;1814:11638;10900:550;;;1814:11638;10629:828;:::o;11070:32::-;;;;;;;;;;;;;;;;;:::i;:::-;;;1814:11638;;;;;11070:32;;;;;;;;;;1814:11638;;;-1:-1:-1;1814:11638:76;;;;;10772:99;1814:11638;;;;10823:37;;;;;;;1814:11638;;;;;;;;;;;10823:37;1796:162:49;1814:11638:76;1710:6:49;1814:11638:76;;735:10:64;1855:23:49;1851:101;;1796:162::o;12930:182:76:-;13007:17;13003:103;;12930:182::o;13003:103::-;1814:11638;;;13047:48;;;1814:11638;13047:48;;;1814:11638;;;;;;;;;;;13047:48;12740:184;12809:15;:26;12805:113;;12740:184::o;12805:113::-;1814:11638;;;12858:49;;;1814:11638;12858:49;;;1814:11638;;;;;;;;;;;12858:49;5084:380:60;1814:11638:76;;5199:47:60;;-1:-1:-1;5199:47:60;;;;1814:11638:76;5199:47:60;1814:11638:76;5199:47:60;;;;;;;;1814:11638:76;;;;;;;;;;;;;;;;;5199:47:60;9770:199;;;;;;;-1:-1:-1;9770:199:60;;9985:80;;;5084:380;5261:45;;;5257:201;;5084:380;;;;;:::o;5257:201::-;5434:12;1814:11638:76;;5349:43:60;1814:11638:76;;;5349:43:60;5199:47;5349:43;;;1814:11638:76;5199:47:60;5349:43;;1814:11638:76;-1:-1:-1;1814:11638:76;;;;;5349:43:60;;;;;:::i;:::-;;;:::i;5434:12::-;5257:201;;;;;;9985:80;9997:67;;-1:-1:-1;9997:15:60;;1814:11638:76;;;;10015:26:60;:30;;9997:67;9985:80;;;;9997:67;10063:1;10048:16;9997:67;;13118:332:76;1814:11638;13177:13;;1814:11638;;;;;;;;13381:19;;;1814:11638;13381:19;;;1814:11638;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13311:4;1814:11638;;13349:1;13211:204;;;1814:11638;13211:204;;;1814:11638;13177:266;;;;;1814:11638;13349:1;1814:11638;;;;;;13177:266;;;;;;1814:11638;13177:266;;;;;;1814:11638;;;;;;:::i;:::-;13429:4;1814:11638;;;;13177:266;;;;;;;;;;13118:332;;;:::o;13177:266::-;1814:11638;;;;;13118:332::o;13177:266::-;1814:11638;;;13349:1;1814:11638;;;;;11625:1109;1814:11638;;;;;;11806:7;1814:11638;;;11806:7;1814:11638;;;11852:19;1814:11638;;11886:13;;11882:147;;1814:11638;;;;;12148:32;;;;1814:11638;12148:32;;12174:4;12148:32;;;1814:11638;12148:32;;;;;;;1814:11638;12148:32;;;11625:1109;-1:-1:-1;12209:12:76;1814:11638;;12397:36;12405:18;12397:36;;:::o;12205:427::-;12454:15;:26;12450:182;;12699:18;12691:36;11625:1109;:::o;12450:182::-;11806:7;12585:36;;:::o;12148:32::-;;;;1814:11638;12148:32;;1814:11638;12148:32;;;;;;1814:11638;12148:32;;;:::i;:::-;;;1814:11638;;;;;12148:32;;;;;;;-1:-1:-1;12148:32:76;;11882:147;-1:-1:-1;1814:11638:76;;-1:-1:-1;1814:11638:76;;11983:35::o;11625:1109::-;1814:11638;11625:1109;;;;1814:11638;;;;;11806:7;1814:11638;;;11806:7;1814:11638;;;11852:19;1814:11638;;11886:13;;;11882:147;;1814:11638;;;;;12148:32;;;;1814:11638;12148:32;;12174:4;12148:32;;;1814:11638;12148:32;;;;;;;1814:11638;12148:32;;;11625:1109;1814:11638;;;;;;;;;;12209:12;1814:11638;;12397:36;12405:18;12397:36;;:::o;1814:11638::-;;;;;12148:32;1814:11638;;;;12148:32;;;;1814:11638;12148:32;;1814:11638;12148:32;;;;;;1814:11638;12148:32;;;:::i;:::-;;;1814:11638;;;;;12148:32;;;;;;;-1:-1:-1;12148:32:76;;11882:147;11983:35;;;;1814:11638;11983:35;1814:11638;11983:35;:::o;8370:720:60:-;;-1:-1:-1;8507:421:60;8370:720;8507:421;;;;;;;;;;;;-1:-1:-1;8507:421:60;;8942:15;;1814:11638:76;;;;8960:26:60;:31;8942:68;8938:146;;8370:720;:::o;8938:146::-;1814:11638:76;9033:40:60;;-1:-1:-1;9033:40:60;1814:11638:76;9033:40:60;1814:11638:76;;-1:-1:-1;9033:40:60;8942:68;9009:1;8994:16;;8942:68;"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","appData()":"8aebd348","burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","cancelOrder(address,address)":"60e092c6","composableCow()":"93504c52","emergencyCancelOrder(address,address)":"68bce712","getOrder(address)":"6eba2b13","getOrderStatus(address)":"6f9d75cd","getTradeableOrder(address,address,bytes32,bytes,bytes)":"b8296fc4","isValidSignature(bytes32,bytes)":"1626ba7e","owner()":"8da5cb5b","pendingOwner()":"e30c3978","protocolFeeSweeper()":"178ac96e","renounceOwnership()":"715018a6","retryOrder(address,uint256,uint256)":"d83b06a4","supportsInterface(bytes4)":"01ffc9a7","transferOwnership(address)":"f2fde38b","vaultRelayer()":"9b552cc2","verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))":"14a2a784","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"_protocolFeeSweeper\",\"type\":\"address\"},{\"internalType\":\"contract IComposableCow\",\"name\":\"_composableCow\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_cowVaultRelayer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_appData\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_version\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InterfaceIsSignatureVerifierMuxer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"InvalidOrderParameters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeSweeper\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"actualStatus\",\"type\":\"uint8\"}],\"name\":\"OrderHasUnexpectedStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"OrderNotValid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollNever\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtEpoch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryNextBlock\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"ConditionalOrderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"OrderCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"OrderRetried\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"appData\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"cancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"composableCow\",\"outputs\":[{\"internalType\":\"contract IComposableCow\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"emergencyCancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrderStatus\",\"outputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"getTradeableOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFeeSweeper\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"retryOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultRelayer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"_order\",\"type\":\"tuple\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function. Only one order per token is allowed at a time.\",\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"InvalidOrderParameters(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"OrderHasUnexpectedStatus(uint8)\":[{\"details\":\"`revertOrder` should only be called when the OrderStatus is `Failed`.\",\"params\":{\"actualStatus\":\"The status of the order when `revertOrder` was called\"}}],\"OrderNotValid(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PollNever(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be deleted\"}}],\"PollTryAtBlock(uint256,string)\":[{\"params\":{\"blockNumber\":\"The block number when polling should resume\",\"reason\":\"Text description of the reason it should be retried\"}}],\"PollTryAtEpoch(uint256,string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\",\"timestamp\":\"The unix timestamp when polling should resume\"}}],\"PollTryNextBlock(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\"}}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"ConditionalOrderCreated(address,(address,bytes32,bytes))\":{\"details\":\"Emitted when a new conditional order is created.\",\"params\":{\"owner\":\"The address that created the conditional order\",\"params\":\"The conditional order data\"}},\"OrderCanceled(address,uint256,address)\":{\"params\":{\"exactAmountIn\":\"The number of tokens in the order\",\"receiver\":\"The account that received the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"OrderRetried(address,uint256,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the new order to be filled\",\"exactAmountIn\":\"The number of tokens in the order\",\"minAmountOut\":\"The minimum number of target tokens required\",\"tokenIn\":\"The token used to identify the order\"}},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}},\"cancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"emergencyCancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"getOrder(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"_0\":\"The order data for the given token\"}},\"getOrderStatus(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"status\":\"The status of the order for the given token\"}},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"details\":\"**MUST** revert if the order conditions are not met.\",\"params\":{\"ctx\":\"The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\",\"offchainInput\":\"Off-chain input (similar to Balancer `userData`); currently unused\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` of the parent `isValidSignature` call\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"},\"returns\":{\"_0\":\"order Tradeable order for submission to the CoW Protocol API\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"Should return whether the signature provided is valid for the provided data\",\"params\":{\"hash\":\"Hash of the data to be signed\",\"signature\":\"Signature byte array associated with `hash`\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"retryOrder(address,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the order to be filled.\",\"minAmountOut\":\"The minimum number of target tokens to receive (tokenOut)\",\"tokenIn\":\"The token used to identify the order\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"details\":\"Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe. **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over the order verification logic, and to allow a watchtower / user to propose a discrete order without it being generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\",\"params\":{\"_hash\":\"`EIP712` order digest\",\"ctx\":\"See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\",\"domainSeparator\":\"`EIP712` domain separator\",\"offchainInput\":\"Type-specific data NOT known at time of creation for a specific discrete order (or zero)\",\"order\":\"The proposed discrete order's `GPv2Order` data struct\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` calling `isValidSignature`\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"title\":\"CowSwapFeeBurner\",\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"InterfaceIsSignatureVerifierMuxer()\":[{\"notice\":\"Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\"}],\"InvalidOrderParameters(string)\":[{\"notice\":\"The order parameters were invalid.\"}],\"InvalidProtocolFeeSweeper()\":[{\"notice\":\"The fee protocol is invalid.\"}],\"OrderHasUnexpectedStatus(uint8)\":[{\"notice\":\"Attempt to revert an order that had not failed.\"}],\"OrderNotValid(string)\":[{\"notice\":\"This error is returned by the `getTradeableOrder` function if the order conditions are not met.\"}],\"PollNever(string)\":[{\"notice\":\"The conditional order should not be polled again (i.e., deleted).\"}],\"PollTryAtBlock(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific block number.\"}],\"PollTryAtEpoch(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific epoch (unix timestamp).\"}],\"PollTryNextBlock(string)\":[{\"notice\":\"Polling should be retried at the next block.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"OrderCanceled(address,uint256,address)\":{\"notice\":\"An order was canceled after failure.\"},\"OrderRetried(address,uint256,uint256,uint256)\":{\"notice\":\"An order was retried after failing.\"},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"},\"cancelOrder(address,address)\":{\"notice\":\"Return tokens from an order that has failed.\"},\"emergencyCancelOrder(address,address)\":{\"notice\":\"Emergency return tokens from an order regardless of status.\"},\"getOrder(address)\":{\"notice\":\"Get the order at the sell token.\"},\"getOrderStatus(address)\":{\"notice\":\"Get the status of the order at the sell token.\"},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"notice\":\"Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\"},\"retryOrder(address,uint256,uint256)\":{\"notice\":\"Retry an order that has not been filled yet and expired.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"notice\":\"Verify that a given discrete order is valid.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"A contract that burns protocol fees using CowSwap.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/CowSwapFeeBurner.sol\":\"CowSwapFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\":{\"keccak256\":\"0xc82721c94d5e741f168aed4c94dc6a9006cb3348bee7398a5e3fa9b7e28557bd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://784c16c17fb89736ec5be650668d81a548acec3ccc2073e2be0f79029f84f512\",\"dweb:/ipfs/QmSk9seqC2YEJqy5pPdXKjmhEKoQhXQdQXCN4f9R8jcXKX\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":{\"keccak256\":\"0x7b8f0149ba41d28c3d0cd956911816b083f7ccec35ddc7bb7fdb829c3c11d9b2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2d39a71115b9018711726b6c7498038e6d3a41338fa635c88cc8025b4e0e5f34\",\"dweb:/ipfs/QmYqnnkXCd1yjs6kpQgxNUotpudgN37X5FTFNFyKE62PMj\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\":{\"keccak256\":\"0xc3717c516d816bd012f47a18bfd69f7887ce262435c10be9748beb4b11aee033\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://237a9295364524846f26c1b92b523e6039b414d3b691f77ba55c6deefa4b14bc\",\"dweb:/ipfs/QmXYg1paW7kDeXCFkiunzSWSWT3DD2p15CHnJZzDyEQ6Jo\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x66c7ec42c6c43712be2107a50ab4529379bc76a632b425babec698d9da921ac6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dce2778f0b638adfc5ba29c2c618c855fe725fa74a16846386aa1d56a834aa04\",\"dweb:/ipfs/QmPV9oWnzQdi58od266j62xvviavLNHqKLZfm6k2K1qy9E\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/CowSwapFeeBurner.sol\":{\"keccak256\":\"0xa37c5fd04da51fc47ce8bfe6c4a0b6c0b7687af60849420f11de03f62c2a9fa3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d35b60d3e201e591583d43a5133e0c7cc8984a64be325d66c09d02939b75149c\",\"dweb:/ipfs/Qmd298snw1uayUE9LsjPiwcvKcPsKto1v4zKePKXV5Q7fb\"]},\"contracts/FeeBurnerAuthentication.sol\":{\"keccak256\":\"0x4861db67bf113a4775c165241802df34a6c0e9fefaec82e8aaf969b5879759f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f522b3af683e09e1b67ed515be9972e7cf9514a584e264c4ca9656cc12c2f06\",\"dweb:/ipfs/QmNYqMsvWcNqACozLm3cYeR4oC3KKfKNBDSqR3vcpjv3zo\"]}},\"version\":1}"}},"contracts/ERC4626CowSwapFeeBurner.sol":{"ERC4626CowSwapFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IProtocolFeeSweeper","name":"_protocolFeeSweeper","type":"address"},{"internalType":"contract IComposableCow","name":"_composableCow","type":"address"},{"internalType":"address","name":"_cowVaultRelayer","type":"address"},{"internalType":"bytes32","name":"_appData","type":"bytes32"},{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"string","name":"_version","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"AmountOutIsZero","type":"error"},{"inputs":[],"name":"InterfaceIsSignatureVerifierMuxer","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"InvalidOrderParameters","type":"error"},{"inputs":[],"name":"InvalidProtocolFeeSweeper","type":"error"},{"inputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"actualStatus","type":"uint8"}],"name":"OrderHasUnexpectedStatus","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"OrderNotValid","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollNever","type":"error"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtBlock","type":"error"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtEpoch","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryNextBlock","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"indexed":false,"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"}],"name":"ConditionalOrderCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"OrderCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"OrderRetried","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"appData","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"encodedMinAmountsOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"composableCow","outputs":[{"internalType":"contract IComposableCow","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"emergencyCancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrderStatus","outputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"getTradeableOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeSweeper","outputs":[{"internalType":"contract IProtocolFeeSweeper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"retryOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vaultRelayer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"},{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"_order","type":"tuple"}],"name":"verify","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_address_fromMemory":{"entryPoint":909,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory":{"entryPoint":872,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6101406040523461036457612c4f8038038061001a81610368565b92833981019060c0818303126103645780516001600160a01b0391828216919082820361036457602093848201519381851685036103645761005e6040840161038d565b966060840151966100716080860161038d565b9560a086015160018060401b0396878211610364570193601f9484868201121561036457805198888a1161032e57601f19996100b28882018c168701610368565b968188528682850101116103645785815f92828c9601838b015e8801015216801561035157600180546001600160a01b031990811682555f805491821684178155919816907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a31561034257608052815194851161032e576002548481811c91168015610324575b82821014610310578381116102cc575b508092851160011461026a5750839450908392915f9461025f575b50501b915f199060031b1c1916176002555b7ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677560a0527f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc960c05260e052610100918252610120908152604051906128ad92836103a284396080518381816101f401528181610a490152818161106e015281816111d1015261140f015260a051836122b5015260c05183612244015260e051838181610e0c015281816116b3015281816118ac015261255001525182818161067701528181610b0001528181610dc90152612095015251818181610e6c01526122890152f35b015192505f80610167565b92948490811660025f52845f20945f905b888383106102b2575050501061029a575b505050811b01600255610179565b01515f1960f88460031b161c191690555f808061028c565b85870151885590960195948501948793509081019061027b565b60025f52815f208480880160051c820192848910610307575b0160051c019085905b8281106102fc57505061014c565b5f81550185906102ee565b925081926102e5565b634e487b7160e01b5f52602260045260245ffd5b90607f169061013c565b634e487b7160e01b5f52604160045260245ffd5b63932c92a560e01b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761032e57604052565b51906001600160a01b03821682036103645756fe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714611c815750806314a2a784146119c35780631626ba7e14611433578063178ac96e146113f057806354fd4d50146112b057806360e092c61461117957806368bce712146110135780636eba2b1314610fe65780636f9d75cd14610fb1578063715018a614610f3957806379ba509714610e8f5780638aebd34814610e555780638da5cb5b14610e3057806393504c5214610ded5780639b552cc214610daa578063b8296fc414610c9d578063d83b06a4146109f0578063de557a32146101a2578063e30c39781461017c5763f2fde38b146100f8575f80fd5b3461017857602060031936011261017857610111611dd0565b610119612388565b6001600160a01b0380911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b34610178575f6003193601126101785760206001600160a01b0360015416604051908152f35b346101785760e0600319360112610178576101bb611dd0565b6101c3611de6565b6064356001600160a01b0381168103610178576001600160a01b0360a4351660a43503610178576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036109c8577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6109a05760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051917f38d52e0f0000000000000000000000000000000000000000000000000000000083526020836004816001600160a01b0385165afa9283156108c8575f93610964575b506040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523060448201526044356064820152606481528060a081011067ffffffffffffffff60a083011117610937578060a061032092016040526001600160a01b03831661280a565b604051907f70a082310000000000000000000000000000000000000000000000000000000082523060048301526020826024816001600160a01b0388165afa9182156108c8575f92610902575b5060206001600160a01b0360645f9360405194859384927fba0876520000000000000000000000000000000000000000000000000000000084526044356004850152306024850152306044850152165af180156108c8576108d3575b50604051907f70a082310000000000000000000000000000000000000000000000000000000082523060048301526020826024816001600160a01b0388165afa80156108c8575f90610894575b6104209250611ff9565b9260843560801c84101561047057836001600160a01b03847f2f785e46000000000000000000000000000000000000000000000000000000005f521660045260245260843560801c60445260645ffd5b831561085f576001600160a01b0382166001600160a01b038416145f1461053b57506fffffffffffffffffffffffffffffffff6084351683106104ea5750906104c5916001600160a01b0360a435911661262b565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b6001600160a01b0391507f2f785e46000000000000000000000000000000000000000000000000000000005f52166004526024526fffffffffffffffffffffffffffffffff6084351660445260645ffd5b9192906001600160a01b0384166001600160a01b038216145f146105dd5760846040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f46656520746f6b656e20616e642074617267657420746f6b656e20617265207460448201527f68652073616d65000000000000000000000000000000000000000000000000006064820152fd5b8115610801576106006fffffffffffffffffffffffffffffffff6084351661239b565b61060b60c435612400565b61061e826001600160a01b038616612745565b506004811015806107c757811515806107f4575b61079857505060606001600160a01b0380807f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d94610671828a16612545565b61069e877f0000000000000000000000000000000000000000000000000000000000000000848c16612466565b8863ffffffff60036040516106b281611e63565b8585168152602081018660a43516815260408201906fffffffffffffffffffffffffffffffff608435168252878b8401968660c435168852165f52836020528760405f209351167fffffffffffffffffffffffff00000000000000000000000000000000000000009081855416178455886001850192511690825416179055516002820155019151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790556040519687526fffffffffffffffffffffffffffffffff6084351660208801528160a435166040880152169616941692a46104c5565b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f526107c75760045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b50505f6002821415610632565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f46656520746f6b656e20616d6f756e74206973207a65726f00000000000000006044820152fd5b6001600160a01b03837f5db1dd1e000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b506020823d6020116108c0575b816108ae60209383611e7f565b81010312610178576104209151610416565b3d91506108a1565b6040513d5f823e3d90fd5b6020813d6020116108fa575b816108ec60209383611e7f565b8101031261017857516103c9565b3d91506108df565b9091506020813d60201161092f575b8161091e60209383611e7f565b81010312610178575190602061036d565b3d9150610911565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b9092506020813d602011610998575b8161098060209383611e7f565b810103126101785761099190611ee3565b91846102ab565b3d9150610973565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461017857606060031936011261017857610a09611dd0565b6024356044356001600160a01b03916040517f4ccb20c00000000000000000000000000000000000000000000000000000000081526020908181600481887f0000000000000000000000000000000000000000000000000000000000000000165afa80156108c85785915f91610c65575b501633141580610c58575b6109c857610a928561267f565b919060048110156107c75760038103610c2d5750610aaf8361239b565b610ab884612400565b84861694855f5260038252600360405f208560028201550163ffffffff86167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790557f000000000000000000000000000000000000000000000000000000000000000090604051907fdd62ed3e0000000000000000000000000000000000000000000000000000000082523060048301528216602482015282816044818a5afa9081156108c8575f91610bcf575b507f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a9784939284608099989796610ba89410610bbe575b5050612545565b60405194855284015260408301526060820152a1005b610bc89183612466565b8984610ba1565b90508281819398979695943d8311610c26575b610bec8183611e7f565b81010312610178575194959394929391929091907f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a610b6a565b503d610be2565b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50835f5416331415610a85565b809250838092503d8311610c96575b610c7e8183611e7f565b8101031261017857610c908591611ee3565b87610a7a565b503d610c74565b346101785760a060031936011261017857610cb6611dd0565b50610cbf611de6565b5067ffffffffffffffff60643581811161017857610ce1903690600401611dfc565b60849291923591821161017857610da692610d03610d0a933690600401611dfc565b5050611fc8565b604051918291829190916101808101926001600160a01b038082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b0390f35b34610178575f6003193601126101785760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610178575f6003193601126101785760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610178575f6003193601126101785760206001600160a01b035f5416604051908152f35b34610178575f6003193601126101785760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610178575f600319360112610178576001546001600160a01b033381831603610f0d577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b34610178575f60031936011261017857610f51612388565b5f6001600160a01b037fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461017857602060031936011261017857610fd2610fcd611dd0565b61267f565b5060405160048210156107c7576020918152f35b3461017857602060031936011261017857610da6610d0a611005611dd0565b61100d611f70565b50612187565b346101785760406003193601126101785761102c611dd0565b611034611de6565b6040517f4ccb20c00000000000000000000000000000000000000000000000000000000081526001600160a01b03926020929183816004817f000000000000000000000000000000000000000000000000000000000000000089165afa80156108c85785915f91611141575b501633141580611134575b6109c85782602494604051958680927f70a0823100000000000000000000000000000000000000000000000000000000825230600483015285165afa9283156108c8575f93611102575b506111009350612033565b005b90925083813d831161112d575b6111198183611e7f565b8101031261017857611100925191846110f5565b503d61110f565b50835f54163314156110ab565b809250858092503d8311611172575b61115a8183611e7f565b810103126101785761116c8591611ee3565b866110a0565b503d611150565b3461017857604060031936011261017857611192611dd0565b61119a611de6565b6001600160a01b036040517f4ccb20c0000000000000000000000000000000000000000000000000000000008152602081600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156108c85782915f91611274575b50163314159081611266575b506109c85761121c8261267f565b91909260048410156107c7576003840361123a576111009350612033565b837fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90505f54163314158361120e565b9150506020813d6020116112a8575b8161129060209383611e7f565b81010312610178576112a28291611ee3565b85611202565b3d9150611283565b34610178575f600319360112610178576040515f6002549060018260011c91600184169182156113e6575b60209485851084146113b95785879486865291825f1461137b575050600114611320575b5061130c92500383611e7f565b610da6604051928284938452830190611ebe565b84915060025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace905f915b85831061136357505061130c9350820101856112ff565b8054838901850152879450869390920191810161134c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261130c95151560051b85010192508791506112ff9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f16926112db565b34610178575f6003193601126101785760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101785760406003193601126101785760243567ffffffffffffffff80821161017857366023830112156101785781600401359161147183611ea2565b9261147f6040519485611e7f565b8084526020840191366024838301011161017857815f92602460209301853785010152825183019160208301938084036101a09081811261017857610180809112610178576114d9604051956114d487611e2a565b611ee3565b85526114e760408401611ee3565b60208601526114f860608401611ee3565b60408601526080830151606086015260a0830151608086015260c083015163ffffffff811681036101785760a086015260e083015160c0860152610100908184015160e08701526101209182850151908701526101409182850151908115158203610178578701526101609182850151908701528301519085015281015190828211610178570193606085850312610178576040519461159786611e47565b602081015183811161017857810182603f8201121561017857602081015190848211610937578160051b604051926115d26020830185611e7f565b8352604060208401918301019185831161017857604001905b8282106119b35750505086526040810151838111610178576060908201809603126101785760405161161c81611e47565b6020860151956001600160a01b03968781168103610178578252604081015160208301526060810151858111610178576020859161165b930101611ef7565b6040820152602087015260608101519283116101785761167e9201602001611ef7565b6040840152604051907ff698da25000000000000000000000000000000000000000000000000000000008252602082600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9182156108c8575f9261197d575b509061179961178b92604051938491602083019190916101808101926001600160a01b038082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101845283611e7f565b604051809460208083015260a08201815190606060408501528151809152602060c085019201905f5b818110611964578560206118968b8b8b611836866118288d8d60406118168b840151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09384888303016060890152611f3d565b92015190848303016080850152611ebe565b03601f198101885287611e7f565b6118a8604051968795869485947f53f00b14000000000000000000000000000000000000000000000000000000008652306004870152336024870152600435604487015260648601525f608486015260e060a486015260e4850190611ebe565b906003198483030160c4850152611ebe565b03917f0000000000000000000000000000000000000000000000000000000000000000165afa80156108c8575f90611908575b6020907fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b506020813d60201161195c575b8161192260209383611e7f565b8101031261017857517fffffffff0000000000000000000000000000000000000000000000000000000081168103610178576020906118db565b3d9150611915565b82518452899550602093840193909201916001016117c2565b91506020823d6020116119ab575b8161199860209383611e7f565b81010312610178579051906117996116e3565b3d915061198b565b81518152602091820191016115eb565b3461017857610260600319360112610178576119dd611dd0565b506119e6611de6565b5067ffffffffffffffff60a43581811161017857611a08903690600401611dfc565b919060c43582811161017857611a22903690600401611dfc565b505061018092837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c36011261017857611a5a91611fc8565b916101643592836080820180518211611c79575b5050604051611b2381611b156020820194859190916101808101926001600160a01b038082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101835282611e7f565b51902090604051602081019460e4356001600160a01b0390818116809103610178578752610104358181168091036101785760408401526101243590811680910361017857606083015261014435608083015260a08201526101843563ffffffff81168091036101785760c08201526101a492833560e08301526101c49081356101008401526101e49687356101208501526102049485358015158091036101785761014086015261022435610160860152610244358186015284526101a084019687118488101761093757866040528351902003611bfe57005b608495602f7f566572696679206f7264657220646f6573206e6f74206d6174636820776974689260207f206578697374696e67206f726465720000000000000000000000000000000000977f8d8a6110000000000000000000000000000000000000000000000000000000008a528601528401528201520152fd5b528385611a6e565b3461017857602060031936011261017857600435907fffffffff000000000000000000000000000000000000000000000000000000008216809203610178577f62af8dc2000000000000000000000000000000000000000000000000000000008214611da857817f14a2a7840000000000000000000000000000000000000000000000000000000060209314908115611d7e575b8115611d54575b8115611d2a575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483611d23565b7f1626ba7e0000000000000000000000000000000000000000000000000000000081149150611d1c565b7fb8296fc40000000000000000000000000000000000000000000000000000000081149150611d15565b7f32798566000000000000000000000000000000000000000000000000000000005f5260045ffd5b600435906001600160a01b038216820361017857565b602435906001600160a01b038216820361017857565b9181601f840112156101785782359167ffffffffffffffff8311610178576020838186019501011161017857565b610180810190811067ffffffffffffffff82111761093757604052565b6060810190811067ffffffffffffffff82111761093757604052565b6080810190811067ffffffffffffffff82111761093757604052565b90601f601f19910116810190811067ffffffffffffffff82111761093757604052565b67ffffffffffffffff811161093757601f01601f191660200190565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b51906001600160a01b038216820361017857565b81601f8201121561017857805190611f0e82611ea2565b92611f1c6040519485611e7f565b8284526020838301011161017857815f9260208093018386015e8301015290565b9060606040611f6d936001600160a01b038151168452602081015160208501520151918160408201520190611ebe565b90565b60405190611f7d82611e2a565b5f610160838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b9081602091611fd5611f70565b508101031261017857356001600160a01b03811680910361017857611f6d90612187565b9190820391821161200657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a926060926040519160208301927f095ea7b300000000000000000000000000000000000000000000000000000000908185526001600160a01b039460205f877f00000000000000000000000000000000000000000000000000000000000000001692836024860152816044860152604485526120cf85611e63565b845190828b5af15f513d82612169575b50501561212c575b505050612118818385871696875f5260036020525f600360408220828155826001820155826002820155015561262b565b6040519384526020840152166040820152a1565b6121619261215b9160405191602083015260248201525f60448201526044815261215581611e63565b8761280a565b8561280a565b5f80806120e7565b90915061217f57508587163b15155b5f806120df565b600114612178565b61218f611f70565b506001600160a01b0380911690815f52602090600382526040805f2060038251926121b984611e63565b848354168452846001840154169486850195865260028401549382860194855263ffffffff9384910154169460608101958087521561232b5781905116955116918151937f70a0823100000000000000000000000000000000000000000000000000000000855230600486015287856024818c5afa948515612321575f956122f2575b5051945116947f0000000000000000000000000000000000000000000000000000000000000000968251986122708a611e2a565b89528801528601526060850152608084015260a08301527f000000000000000000000000000000000000000000000000000000000000000060c08301525f60e08301527f000000000000000000000000000000000000000000000000000000000000000061010083015260016101208301528061014083015261016082015290565b9094508781813d831161231a575b61230a8183611e7f565b810103126101785751935f61223c565b503d612300565b83513d5f823e3d90fd5b6064888451907fc8fc27250000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4f7264657220646f6573206e6f742065786973740000000000000000000000006044820152fd5b6001600160a01b035f54163303610f0d57565b156123a257565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d696e20616d6f756e74206f7574206973207a65726f000000000000000000006044820152fd5b421161240857565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f446561646c696e6520697320696e2074686520706173740000000000000000006044820152fd5b6040519160205f8185016124bc866118287f095ea7b300000000000000000000000000000000000000000000000000000000998a85528760248401602090939291936001600160a01b0360408201951681520152565b85519082865af15f513d82612520575b5050156124da575b50505050565b612517936001600160a01b03612512926040519260208401521660248201525f60448201526044815261250c81611e63565b8261280a565b61280a565b5f8080806124d4565b90915061253d57506001600160a01b0382163b15155b5f806124cc565b600114612536565b6001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001691604091825191166020820152602081528181019267ffffffffffffffff9180851083861117610937578484526125a685611e47565b3085525f60608201526080810152803b15610178576125fe5f9491859285519687809481937f6bfae1ca0000000000000000000000000000000000000000000000000000000083528960048401526044830190611f3d565b6001602483015203925af180156126215761261857505050565b82116109375752565b82513d5f823e3d90fd5b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b039092166024830152604482019290925261267d91612512826064810161178b565b565b6001600160a01b031690815f52600360205263ffffffff600360405f20015416801561273d576020602493604051948580927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa9283156108c8575f93612709575b50826126f7575060029190565b42116127035760019190565b60039190565b9092506020813d602011612735575b8161272560209383611e7f565b810103126101785751915f6126ea565b3d9150612718565b505f91508190565b6001600160a01b03909291921691825f52600360205263ffffffff600360405f2001541692831561280057906020602492604051938480927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa80156108c8575f906127cc575b6127bf9250611ff9565b91826126f7575060029190565b506020823d6020116127f8575b816127e660209383611e7f565b81010312610178576127bf91516127b5565b3d91506127d9565b505090505f905f90565b905f602091828151910182855af1156108c8575f513d61286e57506001600160a01b0381163b155b6128395750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6001141561283256fea26469706673582212209d7552bdbf91926dc34e36927c2968116a3141dcd8dc11b543be7c1c2655140d64736f6c634300081b0033","opcodes":"PUSH2 0x140 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x364 JUMPI PUSH2 0x2C4F DUP1 CODESIZE SUB DUP1 PUSH2 0x1A DUP2 PUSH2 0x368 JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD SWAP1 PUSH1 0xC0 DUP2 DUP4 SUB SLT PUSH2 0x364 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP2 SWAP1 DUP3 DUP3 SUB PUSH2 0x364 JUMPI PUSH1 0x20 SWAP4 DUP5 DUP3 ADD MLOAD SWAP4 DUP2 DUP6 AND DUP6 SUB PUSH2 0x364 JUMPI PUSH2 0x5E PUSH1 0x40 DUP5 ADD PUSH2 0x38D JUMP JUMPDEST SWAP7 PUSH1 0x60 DUP5 ADD MLOAD SWAP7 PUSH2 0x71 PUSH1 0x80 DUP7 ADD PUSH2 0x38D JUMP JUMPDEST SWAP6 PUSH1 0xA0 DUP7 ADD MLOAD PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB SWAP7 DUP8 DUP3 GT PUSH2 0x364 JUMPI ADD SWAP4 PUSH1 0x1F SWAP5 DUP5 DUP7 DUP3 ADD SLT ISZERO PUSH2 0x364 JUMPI DUP1 MLOAD SWAP9 DUP9 DUP11 GT PUSH2 0x32E JUMPI PUSH1 0x1F NOT SWAP10 PUSH2 0xB2 DUP9 DUP3 ADD DUP13 AND DUP8 ADD PUSH2 0x368 JUMP JUMPDEST SWAP7 DUP2 DUP9 MSTORE DUP7 DUP3 DUP6 ADD ADD GT PUSH2 0x364 JUMPI DUP6 DUP2 PUSH0 SWAP3 DUP3 DUP13 SWAP7 ADD DUP4 DUP12 ADD MCOPY DUP9 ADD ADD MSTORE AND DUP1 ISZERO PUSH2 0x351 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP3 SSTORE PUSH0 DUP1 SLOAD SWAP2 DUP3 AND DUP5 OR DUP2 SSTORE SWAP2 SWAP9 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP1 LOG3 ISZERO PUSH2 0x342 JUMPI PUSH1 0x80 MSTORE DUP2 MLOAD SWAP5 DUP6 GT PUSH2 0x32E JUMPI PUSH1 0x2 SLOAD DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x324 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x310 JUMPI DUP4 DUP2 GT PUSH2 0x2CC JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x26A JUMPI POP DUP4 SWAP5 POP SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP5 PUSH2 0x25F JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x2 SSTORE JUMPDEST PUSH32 0xF3B277728B3FEE749481EB3E0B3B48980DBBAB78658FC419025CB16EEE346775 PUSH1 0xA0 MSTORE PUSH32 0x5A28E9363BB942B639270062AA6BB295F434BCDFC42C97267BF003F272060DC9 PUSH1 0xC0 MSTORE PUSH1 0xE0 MSTORE PUSH2 0x100 SWAP2 DUP3 MSTORE PUSH2 0x120 SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH2 0x28AD SWAP3 DUP4 PUSH2 0x3A2 DUP5 CODECOPY PUSH1 0x80 MLOAD DUP4 DUP2 DUP2 PUSH2 0x1F4 ADD MSTORE DUP2 DUP2 PUSH2 0xA49 ADD MSTORE DUP2 DUP2 PUSH2 0x106E ADD MSTORE DUP2 DUP2 PUSH2 0x11D1 ADD MSTORE PUSH2 0x140F ADD MSTORE PUSH1 0xA0 MLOAD DUP4 PUSH2 0x22B5 ADD MSTORE PUSH1 0xC0 MLOAD DUP4 PUSH2 0x2244 ADD MSTORE PUSH1 0xE0 MLOAD DUP4 DUP2 DUP2 PUSH2 0xE0C ADD MSTORE DUP2 DUP2 PUSH2 0x16B3 ADD MSTORE DUP2 DUP2 PUSH2 0x18AC ADD MSTORE PUSH2 0x2550 ADD MSTORE MLOAD DUP3 DUP2 DUP2 PUSH2 0x677 ADD MSTORE DUP2 DUP2 PUSH2 0xB00 ADD MSTORE DUP2 DUP2 PUSH2 0xDC9 ADD MSTORE PUSH2 0x2095 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0xE6C ADD MSTORE PUSH2 0x2289 ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x167 JUMP JUMPDEST SWAP3 SWAP5 DUP5 SWAP1 DUP2 AND PUSH1 0x2 PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x2B2 JUMPI POP POP POP LT PUSH2 0x29A JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x2 SSTORE PUSH2 0x179 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x28C JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x27B JUMP JUMPDEST PUSH1 0x2 PUSH0 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x307 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP6 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x2FC JUMPI POP POP PUSH2 0x14C JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x2EE JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x2E5 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x13C JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x932C92A5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x32E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x364 JUMPI JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x1C81 JUMPI POP DUP1 PUSH4 0x14A2A784 EQ PUSH2 0x19C3 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0x1433 JUMPI DUP1 PUSH4 0x178AC96E EQ PUSH2 0x13F0 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x12B0 JUMPI DUP1 PUSH4 0x60E092C6 EQ PUSH2 0x1179 JUMPI DUP1 PUSH4 0x68BCE712 EQ PUSH2 0x1013 JUMPI DUP1 PUSH4 0x6EBA2B13 EQ PUSH2 0xFE6 JUMPI DUP1 PUSH4 0x6F9D75CD EQ PUSH2 0xFB1 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xF39 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xE8F JUMPI DUP1 PUSH4 0x8AEBD348 EQ PUSH2 0xE55 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xE30 JUMPI DUP1 PUSH4 0x93504C52 EQ PUSH2 0xDED JUMPI DUP1 PUSH4 0x9B552CC2 EQ PUSH2 0xDAA JUMPI DUP1 PUSH4 0xB8296FC4 EQ PUSH2 0xC9D JUMPI DUP1 PUSH4 0xD83B06A4 EQ PUSH2 0x9F0 JUMPI DUP1 PUSH4 0xDE557A32 EQ PUSH2 0x1A2 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x17C JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0xF8 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x111 PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x119 PUSH2 0x2388 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x1BB PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA4 CALLDATALOAD AND PUSH1 0xA4 CALLDATALOAD SUB PUSH2 0x178 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x9C8 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x9A0 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 DUP4 PUSH1 0x4 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP4 PUSH2 0x964 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE DUP1 PUSH1 0xA0 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP4 ADD GT OR PUSH2 0x937 JUMPI DUP1 PUSH1 0xA0 PUSH2 0x320 SWAP3 ADD PUSH1 0x40 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x280A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP3 PUSH2 0x902 JUMPI JUMPDEST POP PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x64 PUSH0 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x4 DUP6 ADD MSTORE ADDRESS PUSH1 0x24 DUP6 ADD MSTORE ADDRESS PUSH1 0x44 DUP6 ADD MSTORE AND GAS CALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH2 0x8D3 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP1 PUSH2 0x894 JUMPI JUMPDEST PUSH2 0x420 SWAP3 POP PUSH2 0x1FF9 JUMP JUMPDEST SWAP3 PUSH1 0x84 CALLDATALOAD PUSH1 0x80 SHR DUP5 LT ISZERO PUSH2 0x470 JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x80 SHR PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP4 ISZERO PUSH2 0x85F JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EQ PUSH0 EQ PUSH2 0x53B JUMPI POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND DUP4 LT PUSH2 0x4EA JUMPI POP SWAP1 PUSH2 0x4C5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA4 CALLDATALOAD SWAP2 AND PUSH2 0x262B JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 POP PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST SWAP2 SWAP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ PUSH0 EQ PUSH2 0x5DD JUMPI PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616E642074617267657420746F6B656E206172652074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x68652073616D6500000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST DUP2 ISZERO PUSH2 0x801 JUMPI PUSH2 0x600 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND PUSH2 0x239B JUMP JUMPDEST PUSH2 0x60B PUSH1 0xC4 CALLDATALOAD PUSH2 0x2400 JUMP JUMPDEST PUSH2 0x61E DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x2745 JUMP JUMPDEST POP PUSH1 0x4 DUP2 LT ISZERO DUP1 PUSH2 0x7C7 JUMPI DUP2 ISZERO ISZERO DUP1 PUSH2 0x7F4 JUMPI JUMPDEST PUSH2 0x798 JUMPI POP POP PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP1 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP5 PUSH2 0x671 DUP3 DUP11 AND PUSH2 0x2545 JUMP JUMPDEST PUSH2 0x69E DUP8 PUSH32 0x0 DUP5 DUP13 AND PUSH2 0x2466 JUMP JUMPDEST DUP9 PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 MLOAD PUSH2 0x6B2 DUP2 PUSH2 0x1E63 JUMP JUMPDEST DUP6 DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 PUSH1 0xA4 CALLDATALOAD AND DUP2 MSTORE PUSH1 0x40 DUP3 ADD SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND DUP3 MSTORE DUP8 DUP12 DUP5 ADD SWAP7 DUP7 PUSH1 0xC4 CALLDATALOAD AND DUP9 MSTORE AND PUSH0 MSTORE DUP4 PUSH1 0x20 MSTORE DUP8 PUSH1 0x40 PUSH0 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 SLOAD AND OR DUP5 SSTORE DUP9 PUSH1 0x1 DUP6 ADD SWAP3 MLOAD AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE MLOAD PUSH1 0x2 DUP3 ADD SSTORE ADD SWAP2 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND PUSH1 0x20 DUP9 ADD MSTORE DUP2 PUSH1 0xA4 CALLDATALOAD AND PUSH1 0x40 DUP9 ADD MSTORE AND SWAP7 AND SWAP5 AND SWAP3 LOG4 PUSH2 0x4C5 JUMP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH2 0x7C7 JUMPI PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP PUSH0 PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x632 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616D6F756E74206973207A65726F0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 PUSH32 0x5DB1DD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x8C0 JUMPI JUMPDEST DUP2 PUSH2 0x8AE PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x420 SWAP2 MLOAD PUSH2 0x416 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x8A1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x8FA JUMPI JUMPDEST DUP2 PUSH2 0x8EC PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD PUSH2 0x3C9 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x8DF JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x92F JUMPI JUMPDEST DUP2 PUSH2 0x91E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP1 PUSH1 0x20 PUSH2 0x36D JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x911 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x998 JUMPI JUMPDEST DUP2 PUSH2 0x980 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x991 SWAP1 PUSH2 0x1EE3 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x2AB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x973 JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xA09 PUSH2 0x1DD0 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0xC65 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0xC58 JUMPI JUMPDEST PUSH2 0x9C8 JUMPI PUSH2 0xA92 DUP6 PUSH2 0x267F JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x3 DUP2 SUB PUSH2 0xC2D JUMPI POP PUSH2 0xAAF DUP4 PUSH2 0x239B JUMP JUMPDEST PUSH2 0xAB8 DUP5 PUSH2 0x2400 JUMP JUMPDEST DUP5 DUP7 AND SWAP5 DUP6 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH1 0x2 DUP3 ADD SSTORE ADD PUSH4 0xFFFFFFFF DUP7 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0x0 SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x44 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP2 PUSH2 0xBCF JUMPI JUMPDEST POP PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A SWAP8 DUP5 SWAP4 SWAP3 DUP5 PUSH1 0x80 SWAP10 SWAP9 SWAP8 SWAP7 PUSH2 0xBA8 SWAP5 LT PUSH2 0xBBE JUMPI JUMPDEST POP POP PUSH2 0x2545 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE LOG1 STOP JUMPDEST PUSH2 0xBC8 SWAP2 DUP4 PUSH2 0x2466 JUMP JUMPDEST DUP10 DUP5 PUSH2 0xBA1 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 SWAP4 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 RETURNDATASIZE DUP4 GT PUSH2 0xC26 JUMPI JUMPDEST PUSH2 0xBEC DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP5 SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A PUSH2 0xB6A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xBE2 JUMP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0xA85 JUMP JUMPDEST DUP1 SWAP3 POP DUP4 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xC96 JUMPI JUMPDEST PUSH2 0xC7E DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0xC90 DUP6 SWAP2 PUSH2 0x1EE3 JUMP JUMPDEST DUP8 PUSH2 0xA7A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xC74 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xCB6 PUSH2 0x1DD0 JUMP JUMPDEST POP PUSH2 0xCBF PUSH2 0x1DE6 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x178 JUMPI PUSH2 0xCE1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST PUSH1 0x84 SWAP3 SWAP2 SWAP3 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x178 JUMPI PUSH2 0xDA6 SWAP3 PUSH2 0xD03 PUSH2 0xD0A SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST POP POP PUSH2 0x1FC8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB CALLER DUP2 DUP4 AND SUB PUSH2 0xF0D JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xF51 PUSH2 0x2388 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xFD2 PUSH2 0xFCD PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x267F JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x20 SWAP2 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xDA6 PUSH2 0xD0A PUSH2 0x1005 PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x100D PUSH2 0x1F70 JUMP JUMPDEST POP PUSH2 0x2187 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x102C PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x1034 PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x20 SWAP3 SWAP2 DUP4 DUP2 PUSH1 0x4 DUP2 PUSH32 0x0 DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0x1141 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0x1134 JUMPI JUMPDEST PUSH2 0x9C8 JUMPI DUP3 PUSH1 0x24 SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP4 PUSH2 0x1102 JUMPI JUMPDEST POP PUSH2 0x1100 SWAP4 POP PUSH2 0x2033 JUMP JUMPDEST STOP JUMPDEST SWAP1 SWAP3 POP DUP4 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x112D JUMPI JUMPDEST PUSH2 0x1119 DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x1100 SWAP3 MLOAD SWAP2 DUP5 PUSH2 0x10F5 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x110F JUMP JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0x10AB JUMP JUMPDEST DUP1 SWAP3 POP DUP6 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1172 JUMPI JUMPDEST PUSH2 0x115A DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x116C DUP6 SWAP2 PUSH2 0x1EE3 JUMP JUMPDEST DUP7 PUSH2 0x10A0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1150 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x1192 PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x119A PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1274 JUMPI JUMPDEST POP AND CALLER EQ ISZERO SWAP1 DUP2 PUSH2 0x1266 JUMPI JUMPDEST POP PUSH2 0x9C8 JUMPI PUSH2 0x121C DUP3 PUSH2 0x267F JUMP JUMPDEST SWAP2 SWAP1 SWAP3 PUSH1 0x4 DUP5 LT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x3 DUP5 SUB PUSH2 0x123A JUMPI PUSH2 0x1100 SWAP4 POP PUSH2 0x2033 JUMP JUMPDEST DUP4 PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH0 SLOAD AND CALLER EQ ISZERO DUP4 PUSH2 0x120E JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x12A8 JUMPI JUMPDEST DUP2 PUSH2 0x1290 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x12A2 DUP3 SWAP2 PUSH2 0x1EE3 JUMP JUMPDEST DUP6 PUSH2 0x1202 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1283 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH1 0x2 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x13E6 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x13B9 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x137B JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1320 JUMPI JUMPDEST POP PUSH2 0x130C SWAP3 POP SUB DUP4 PUSH2 0x1E7F JUMP JUMPDEST PUSH2 0xDA6 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1EBE JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x2 PUSH0 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x1363 JUMPI POP POP PUSH2 0x130C SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x12FF JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x134C JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0x130C SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x12FF SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0x12DB JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT PUSH2 0x178 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x178 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x1471 DUP4 PUSH2 0x1EA2 JUMP JUMPDEST SWAP3 PUSH2 0x147F PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1E7F JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP2 CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0x178 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH1 0x20 SWAP4 ADD DUP6 CALLDATACOPY DUP6 ADD ADD MSTORE DUP3 MLOAD DUP4 ADD SWAP2 PUSH1 0x20 DUP4 ADD SWAP4 DUP1 DUP5 SUB PUSH2 0x1A0 SWAP1 DUP2 DUP2 SLT PUSH2 0x178 JUMPI PUSH2 0x180 DUP1 SWAP2 SLT PUSH2 0x178 JUMPI PUSH2 0x14D9 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x14D4 DUP8 PUSH2 0x1E2A JUMP JUMPDEST PUSH2 0x1EE3 JUMP JUMPDEST DUP6 MSTORE PUSH2 0x14E7 PUSH1 0x40 DUP5 ADD PUSH2 0x1EE3 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x14F8 PUSH1 0x60 DUP5 ADD PUSH2 0x1EE3 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP5 ADD MLOAD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x120 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH2 0x140 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x178 JUMPI DUP8 ADD MSTORE PUSH2 0x160 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x178 JUMPI ADD SWAP4 PUSH1 0x60 DUP6 DUP6 SUB SLT PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH2 0x1597 DUP7 PUSH2 0x1E47 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x178 JUMPI DUP2 ADD DUP3 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x178 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x937 JUMPI DUP2 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP3 PUSH2 0x15D2 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1E7F JUMP JUMPDEST DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD SWAP2 DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x178 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x19B3 JUMPI POP POP POP DUP7 MSTORE PUSH1 0x40 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x178 JUMPI PUSH1 0x60 SWAP1 DUP3 ADD DUP1 SWAP7 SUB SLT PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD PUSH2 0x161C DUP2 PUSH2 0x1E47 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI DUP3 MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD DUP6 DUP2 GT PUSH2 0x178 JUMPI PUSH1 0x20 DUP6 SWAP2 PUSH2 0x165B SWAP4 ADD ADD PUSH2 0x1EF7 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP3 DUP4 GT PUSH2 0x178 JUMPI PUSH2 0x167E SWAP3 ADD PUSH1 0x20 ADD PUSH2 0x1EF7 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF698DA2500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP3 PUSH2 0x197D JUMPI JUMPDEST POP SWAP1 PUSH2 0x1799 PUSH2 0x178B SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x1E7F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 PUSH1 0x20 DUP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP2 MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP6 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0xC0 DUP6 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1964 JUMPI DUP6 PUSH1 0x20 PUSH2 0x1896 DUP12 DUP12 DUP12 PUSH2 0x1836 DUP7 PUSH2 0x1828 DUP14 DUP14 PUSH1 0x40 PUSH2 0x1816 DUP12 DUP5 ADD MLOAD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 SWAP4 DUP5 DUP9 DUP4 SUB ADD PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x1F3D JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1EBE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP9 MSTORE DUP8 PUSH2 0x1E7F JUMP JUMPDEST PUSH2 0x18A8 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP5 PUSH32 0x53F00B1400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE ADDRESS PUSH1 0x4 DUP8 ADD MSTORE CALLER PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0x44 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD MSTORE PUSH0 PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0xE0 PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xE4 DUP6 ADD SWAP1 PUSH2 0x1EBE JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0xC4 DUP6 ADD MSTORE PUSH2 0x1EBE JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP1 PUSH2 0x1908 JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x195C JUMPI JUMPDEST DUP2 PUSH2 0x1922 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x18DB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1915 JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP10 SWAP6 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x17C2 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x19AB JUMPI JUMPDEST DUP2 PUSH2 0x1998 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI SWAP1 MLOAD SWAP1 PUSH2 0x1799 PUSH2 0x16E3 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x198B JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x15EB JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH2 0x260 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x19DD PUSH2 0x1DD0 JUMP JUMPDEST POP PUSH2 0x19E6 PUSH2 0x1DE6 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x178 JUMPI PUSH2 0x1A08 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x178 JUMPI PUSH2 0x1A22 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST POP POP PUSH2 0x180 SWAP3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x1A5A SWAP2 PUSH2 0x1FC8 JUMP JUMPDEST SWAP2 PUSH2 0x164 CALLDATALOAD SWAP3 DUP4 PUSH1 0x80 DUP3 ADD DUP1 MLOAD DUP3 GT PUSH2 0x1C79 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH2 0x1B23 DUP2 PUSH2 0x1B15 PUSH1 0x20 DUP3 ADD SWAP5 DUP6 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1E7F JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 PUSH1 0xE4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI DUP8 MSTORE PUSH2 0x104 CALLDATALOAD DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x124 CALLDATALOAD SWAP1 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x184 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1A4 SWAP3 DUP4 CALLDATALOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x1C4 SWAP1 DUP2 CALLDATALOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x1E4 SWAP7 DUP8 CALLDATALOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x204 SWAP5 DUP6 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x224 CALLDATALOAD PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x244 CALLDATALOAD DUP2 DUP7 ADD MSTORE DUP5 MSTORE PUSH2 0x1A0 DUP5 ADD SWAP7 DUP8 GT DUP5 DUP9 LT OR PUSH2 0x937 JUMPI DUP7 PUSH1 0x40 MSTORE DUP4 MLOAD SWAP1 KECCAK256 SUB PUSH2 0x1BFE JUMPI STOP JUMPDEST PUSH1 0x84 SWAP6 PUSH1 0x2F PUSH32 0x566572696679206F7264657220646F6573206E6F74206D617463682077697468 SWAP3 PUSH1 0x20 PUSH32 0x206578697374696E67206F726465720000000000000000000000000000000000 SWAP8 PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP7 ADD MSTORE DUP5 ADD MSTORE DUP3 ADD MSTORE ADD MSTORE REVERT JUMPDEST MSTORE DUP4 DUP6 PUSH2 0x1A6E JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x178 JUMPI PUSH32 0x62AF8DC200000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x1DA8 JUMPI DUP2 PUSH32 0x14A2A78400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x1D7E JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1D54 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1D2A JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x1D23 JUMP JUMPDEST PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1D1C JUMP JUMPDEST PUSH32 0xB8296FC400000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1D15 JUMP JUMPDEST PUSH32 0x3279856600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x178 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x178 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x178 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x178 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x178 JUMPI JUMP JUMPDEST PUSH2 0x180 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x937 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x178 JUMPI JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x178 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1F0E DUP3 PUSH2 0x1EA2 JUMP JUMPDEST SWAP3 PUSH2 0x1F1C PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1E7F JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x178 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x60 PUSH1 0x40 PUSH2 0x1F6D SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP6 ADD MSTORE ADD MLOAD SWAP2 DUP2 PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1EBE JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1F7D DUP3 PUSH2 0x1E2A JUMP JUMPDEST PUSH0 PUSH2 0x160 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE DUP3 PUSH2 0x140 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 PUSH2 0x1FD5 PUSH2 0x1F70 JUMP JUMPDEST POP DUP2 ADD SUB SLT PUSH2 0x178 JUMPI CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH2 0x1F6D SWAP1 PUSH2 0x2187 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x2006 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP3 PUSH1 0x60 SWAP3 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD SWAP3 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH1 0x20 PUSH0 DUP8 PUSH32 0x0 AND SWAP3 DUP4 PUSH1 0x24 DUP7 ADD MSTORE DUP2 PUSH1 0x44 DUP7 ADD MSTORE PUSH1 0x44 DUP6 MSTORE PUSH2 0x20CF DUP6 PUSH2 0x1E63 JUMP JUMPDEST DUP5 MLOAD SWAP1 DUP3 DUP12 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x2169 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x212C JUMPI JUMPDEST POP POP POP PUSH2 0x2118 DUP2 DUP4 DUP6 DUP8 AND SWAP7 DUP8 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x3 PUSH1 0x40 DUP3 KECCAK256 DUP3 DUP2 SSTORE DUP3 PUSH1 0x1 DUP3 ADD SSTORE DUP3 PUSH1 0x2 DUP3 ADD SSTORE ADD SSTORE PUSH2 0x262B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE LOG1 JUMP JUMPDEST PUSH2 0x2161 SWAP3 PUSH2 0x215B SWAP2 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x2155 DUP2 PUSH2 0x1E63 JUMP JUMPDEST DUP8 PUSH2 0x280A JUMP JUMPDEST DUP6 PUSH2 0x280A JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x20E7 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x217F JUMPI POP DUP6 DUP8 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x20DF JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x2178 JUMP JUMPDEST PUSH2 0x218F PUSH2 0x1F70 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH1 0x3 DUP3 MLOAD SWAP3 PUSH2 0x21B9 DUP5 PUSH2 0x1E63 JUMP JUMPDEST DUP5 DUP4 SLOAD AND DUP5 MSTORE DUP5 PUSH1 0x1 DUP5 ADD SLOAD AND SWAP5 DUP7 DUP6 ADD SWAP6 DUP7 MSTORE PUSH1 0x2 DUP5 ADD SLOAD SWAP4 DUP3 DUP7 ADD SWAP5 DUP6 MSTORE PUSH4 0xFFFFFFFF SWAP4 DUP5 SWAP2 ADD SLOAD AND SWAP5 PUSH1 0x60 DUP2 ADD SWAP6 DUP1 DUP8 MSTORE ISZERO PUSH2 0x232B JUMPI DUP2 SWAP1 MLOAD AND SWAP6 MLOAD AND SWAP2 DUP2 MLOAD SWAP4 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS PUSH1 0x4 DUP7 ADD MSTORE DUP8 DUP6 PUSH1 0x24 DUP2 DUP13 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x2321 JUMPI PUSH0 SWAP6 PUSH2 0x22F2 JUMPI JUMPDEST POP MLOAD SWAP5 MLOAD AND SWAP5 PUSH32 0x0 SWAP7 DUP3 MLOAD SWAP9 PUSH2 0x2270 DUP11 PUSH2 0x1E2A JUMP JUMPDEST DUP10 MSTORE DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH32 0x0 PUSH1 0xC0 DUP4 ADD MSTORE PUSH0 PUSH1 0xE0 DUP4 ADD MSTORE PUSH32 0x0 PUSH2 0x100 DUP4 ADD MSTORE PUSH1 0x1 PUSH2 0x120 DUP4 ADD MSTORE DUP1 PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x231A JUMPI JUMPDEST PUSH2 0x230A DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x223C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2300 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP9 DUP5 MLOAD SWAP1 PUSH32 0xC8FC272500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7264657220646F6573206E6F74206578697374000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND CALLER SUB PUSH2 0xF0D JUMPI JUMP JUMPDEST ISZERO PUSH2 0x23A2 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D696E20616D6F756E74206F7574206973207A65726F00000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST TIMESTAMP GT PUSH2 0x2408 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446561646C696E6520697320696E207468652070617374000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 PUSH0 DUP2 DUP6 ADD PUSH2 0x24BC DUP7 PUSH2 0x1828 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP10 DUP11 DUP6 MSTORE DUP8 PUSH1 0x24 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST DUP6 MLOAD SWAP1 DUP3 DUP7 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x2520 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x24DA JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x2517 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2512 SWAP3 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x250C DUP2 PUSH2 0x1E63 JUMP JUMPDEST DUP3 PUSH2 0x280A JUMP JUMPDEST PUSH2 0x280A JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 PUSH2 0x24D4 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x253D JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x24CC JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x2536 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP2 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE DUP2 DUP2 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP1 DUP6 LT DUP4 DUP7 GT OR PUSH2 0x937 JUMPI DUP5 DUP5 MSTORE PUSH2 0x25A6 DUP6 PUSH2 0x1E47 JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD MSTORE DUP1 EXTCODESIZE ISZERO PUSH2 0x178 JUMPI PUSH2 0x25FE PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x6BFAE1CA00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x1F3D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x2621 JUMPI PUSH2 0x2618 JUMPI POP POP POP JUMP JUMPDEST DUP3 GT PUSH2 0x937 JUMPI MSTORE JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x267D SWAP2 PUSH2 0x2512 DUP3 PUSH1 0x64 DUP2 ADD PUSH2 0x178B JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND DUP1 ISZERO PUSH2 0x273D JUMPI PUSH1 0x20 PUSH1 0x24 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP4 PUSH2 0x2709 JUMPI JUMPDEST POP DUP3 PUSH2 0x26F7 JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x2703 JUMPI PUSH1 0x1 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2735 JUMPI JUMPDEST DUP2 PUSH2 0x2725 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x26EA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2718 JUMP JUMPDEST POP PUSH0 SWAP2 POP DUP2 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 SWAP2 SWAP3 AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND SWAP3 DUP4 ISZERO PUSH2 0x2800 JUMPI SWAP1 PUSH1 0x20 PUSH1 0x24 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP1 PUSH2 0x27CC JUMPI JUMPDEST PUSH2 0x27BF SWAP3 POP PUSH2 0x1FF9 JUMP JUMPDEST SWAP2 DUP3 PUSH2 0x26F7 JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x27F8 JUMPI JUMPDEST DUP2 PUSH2 0x27E6 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x27BF SWAP2 MLOAD PUSH2 0x27B5 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x27D9 JUMP JUMPDEST POP POP SWAP1 POP PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 PUSH1 0x20 SWAP2 DUP3 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL ISZERO PUSH2 0x8C8 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x286E JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x2839 JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x2832 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 PUSH22 0x52BDBF91926DC34E36927C2968116A3141DCD8DC11B5 NUMBER 0xBE PUSH29 0x1C2655140D64736F6C634300081B003300000000000000000000000000 ","sourceMap":"1248:3961:77:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;1273:26:49;;1269:95;;1248:3961:77;;;-1:-1:-1;;;;;;1248:3961:77;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;3052:40:49;;-1:-1:-1;3052:40:49;1203:42:78;1199:107;;1248:3961:77;1316:40:78;1248:3961:77;;;;;;;1156:21:38;1248:3961:77;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;;;1156:21:38;1248:3961:77;;2215:17:76;1248:3961:77;2215:17:76;2281:18;1248:3961:77;2281:18:76;2893:30;;2933:31;;;;2974:18;;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2893:30:76;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;1156:21:38;-1:-1:-1;1248:3961:77;;-1:-1:-1;1248:3961:77;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;;;;;;;1156:21:38;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;1156:21:38;-1:-1:-1;1248:3961:77;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;-1:-1:-1;1248:3961:77;1199:107:78;1268:27;;;-1:-1:-1;1268:27:78;;-1:-1:-1;1268:27:78;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;1248:3961:77;;-1:-1:-1;1322:31:49;1248:3961:77;-1:-1:-1;1248:3961:77;;;;;;;;;-1:-1:-1;;1248:3961:77;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1248:3961:77;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":7632,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_23215":{"entryPoint":7654,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":7676,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_fromMemory":{"entryPoint":7927,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC20_fromMemory":{"entryPoint":7907,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_string":{"entryPoint":7870,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_ConditionalOrderParams":{"entryPoint":7997,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_GPv2Order":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_and_zero_memory_struct_struct_GPv2Order":{"entryPoint":8048,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":7842,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":8185,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":7807,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_23219":{"entryPoint":7722,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_23220":{"entryPoint":7751,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_23239":{"entryPoint":7779,"id":null,"parameterSlots":1,"returnSlots":0},"fun_callOptionalReturn":{"entryPoint":10250,"id":11024,"parameterSlots":2,"returnSlots":0},"fun_cancelOrder":{"entryPoint":8243,"id":18969,"parameterSlots":3,"returnSlots":0},"fun_checkDeadline":{"entryPoint":9216,"id":19482,"parameterSlots":1,"returnSlots":0},"fun_checkMinAmountOut":{"entryPoint":9115,"id":19497,"parameterSlots":1,"returnSlots":0},"fun_checkOwner":{"entryPoint":9096,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_createCowOrder":{"entryPoint":9541,"id":19527,"parameterSlots":1,"returnSlots":0},"fun_forceApprove":{"entryPoint":9318,"id":10850,"parameterSlots":3,"returnSlots":0},"fun_getOrder":{"entryPoint":8583,"id":19375,"parameterSlots":1,"returnSlots":1},"fun_getOrderStatusAndBalance":{"entryPoint":10053,"id":19466,"parameterSlots":2,"returnSlots":2},"fun_getOrderStatusAndBalance_23224":{"entryPoint":9855,"id":19466,"parameterSlots":1,"returnSlots":2},"fun_getTradeableOrder":{"entryPoint":8136,"id":19160,"parameterSlots":2,"returnSlots":1},"fun_safeTransfer":{"entryPoint":9771,"id":10647,"parameterSlots":3,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"18695":[{"length":32,"start":8885}],"18700":[{"length":32,"start":8772}],"18703":[{"length":32,"start":3596},{"length":32,"start":5811},{"length":32,"start":6316},{"length":32,"start":9552}],"18705":[{"length":32,"start":1655},{"length":32,"start":2816},{"length":32,"start":3529},{"length":32,"start":8341}],"18707":[{"length":32,"start":3692},{"length":32,"start":8841}],"19771":[{"length":32,"start":500},{"length":32,"start":2633},{"length":32,"start":4206},{"length":32,"start":4561},{"length":32,"start":5135}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714611c815750806314a2a784146119c35780631626ba7e14611433578063178ac96e146113f057806354fd4d50146112b057806360e092c61461117957806368bce712146110135780636eba2b1314610fe65780636f9d75cd14610fb1578063715018a614610f3957806379ba509714610e8f5780638aebd34814610e555780638da5cb5b14610e3057806393504c5214610ded5780639b552cc214610daa578063b8296fc414610c9d578063d83b06a4146109f0578063de557a32146101a2578063e30c39781461017c5763f2fde38b146100f8575f80fd5b3461017857602060031936011261017857610111611dd0565b610119612388565b6001600160a01b0380911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b34610178575f6003193601126101785760206001600160a01b0360015416604051908152f35b346101785760e0600319360112610178576101bb611dd0565b6101c3611de6565b6064356001600160a01b0381168103610178576001600160a01b0360a4351660a43503610178576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036109c8577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6109a05760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051917f38d52e0f0000000000000000000000000000000000000000000000000000000083526020836004816001600160a01b0385165afa9283156108c8575f93610964575b506040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523060448201526044356064820152606481528060a081011067ffffffffffffffff60a083011117610937578060a061032092016040526001600160a01b03831661280a565b604051907f70a082310000000000000000000000000000000000000000000000000000000082523060048301526020826024816001600160a01b0388165afa9182156108c8575f92610902575b5060206001600160a01b0360645f9360405194859384927fba0876520000000000000000000000000000000000000000000000000000000084526044356004850152306024850152306044850152165af180156108c8576108d3575b50604051907f70a082310000000000000000000000000000000000000000000000000000000082523060048301526020826024816001600160a01b0388165afa80156108c8575f90610894575b6104209250611ff9565b9260843560801c84101561047057836001600160a01b03847f2f785e46000000000000000000000000000000000000000000000000000000005f521660045260245260843560801c60445260645ffd5b831561085f576001600160a01b0382166001600160a01b038416145f1461053b57506fffffffffffffffffffffffffffffffff6084351683106104ea5750906104c5916001600160a01b0360a435911661262b565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b6001600160a01b0391507f2f785e46000000000000000000000000000000000000000000000000000000005f52166004526024526fffffffffffffffffffffffffffffffff6084351660445260645ffd5b9192906001600160a01b0384166001600160a01b038216145f146105dd5760846040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f46656520746f6b656e20616e642074617267657420746f6b656e20617265207460448201527f68652073616d65000000000000000000000000000000000000000000000000006064820152fd5b8115610801576106006fffffffffffffffffffffffffffffffff6084351661239b565b61060b60c435612400565b61061e826001600160a01b038616612745565b506004811015806107c757811515806107f4575b61079857505060606001600160a01b0380807f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d94610671828a16612545565b61069e877f0000000000000000000000000000000000000000000000000000000000000000848c16612466565b8863ffffffff60036040516106b281611e63565b8585168152602081018660a43516815260408201906fffffffffffffffffffffffffffffffff608435168252878b8401968660c435168852165f52836020528760405f209351167fffffffffffffffffffffffff00000000000000000000000000000000000000009081855416178455886001850192511690825416179055516002820155019151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790556040519687526fffffffffffffffffffffffffffffffff6084351660208801528160a435166040880152169616941692a46104c5565b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f526107c75760045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b50505f6002821415610632565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f46656520746f6b656e20616d6f756e74206973207a65726f00000000000000006044820152fd5b6001600160a01b03837f5db1dd1e000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b506020823d6020116108c0575b816108ae60209383611e7f565b81010312610178576104209151610416565b3d91506108a1565b6040513d5f823e3d90fd5b6020813d6020116108fa575b816108ec60209383611e7f565b8101031261017857516103c9565b3d91506108df565b9091506020813d60201161092f575b8161091e60209383611e7f565b81010312610178575190602061036d565b3d9150610911565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b9092506020813d602011610998575b8161098060209383611e7f565b810103126101785761099190611ee3565b91846102ab565b3d9150610973565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461017857606060031936011261017857610a09611dd0565b6024356044356001600160a01b03916040517f4ccb20c00000000000000000000000000000000000000000000000000000000081526020908181600481887f0000000000000000000000000000000000000000000000000000000000000000165afa80156108c85785915f91610c65575b501633141580610c58575b6109c857610a928561267f565b919060048110156107c75760038103610c2d5750610aaf8361239b565b610ab884612400565b84861694855f5260038252600360405f208560028201550163ffffffff86167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790557f000000000000000000000000000000000000000000000000000000000000000090604051907fdd62ed3e0000000000000000000000000000000000000000000000000000000082523060048301528216602482015282816044818a5afa9081156108c8575f91610bcf575b507f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a9784939284608099989796610ba89410610bbe575b5050612545565b60405194855284015260408301526060820152a1005b610bc89183612466565b8984610ba1565b90508281819398979695943d8311610c26575b610bec8183611e7f565b81010312610178575194959394929391929091907f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a610b6a565b503d610be2565b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50835f5416331415610a85565b809250838092503d8311610c96575b610c7e8183611e7f565b8101031261017857610c908591611ee3565b87610a7a565b503d610c74565b346101785760a060031936011261017857610cb6611dd0565b50610cbf611de6565b5067ffffffffffffffff60643581811161017857610ce1903690600401611dfc565b60849291923591821161017857610da692610d03610d0a933690600401611dfc565b5050611fc8565b604051918291829190916101808101926001600160a01b038082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b0390f35b34610178575f6003193601126101785760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610178575f6003193601126101785760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610178575f6003193601126101785760206001600160a01b035f5416604051908152f35b34610178575f6003193601126101785760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610178575f600319360112610178576001546001600160a01b033381831603610f0d577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b34610178575f60031936011261017857610f51612388565b5f6001600160a01b037fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461017857602060031936011261017857610fd2610fcd611dd0565b61267f565b5060405160048210156107c7576020918152f35b3461017857602060031936011261017857610da6610d0a611005611dd0565b61100d611f70565b50612187565b346101785760406003193601126101785761102c611dd0565b611034611de6565b6040517f4ccb20c00000000000000000000000000000000000000000000000000000000081526001600160a01b03926020929183816004817f000000000000000000000000000000000000000000000000000000000000000089165afa80156108c85785915f91611141575b501633141580611134575b6109c85782602494604051958680927f70a0823100000000000000000000000000000000000000000000000000000000825230600483015285165afa9283156108c8575f93611102575b506111009350612033565b005b90925083813d831161112d575b6111198183611e7f565b8101031261017857611100925191846110f5565b503d61110f565b50835f54163314156110ab565b809250858092503d8311611172575b61115a8183611e7f565b810103126101785761116c8591611ee3565b866110a0565b503d611150565b3461017857604060031936011261017857611192611dd0565b61119a611de6565b6001600160a01b036040517f4ccb20c0000000000000000000000000000000000000000000000000000000008152602081600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156108c85782915f91611274575b50163314159081611266575b506109c85761121c8261267f565b91909260048410156107c7576003840361123a576111009350612033565b837fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90505f54163314158361120e565b9150506020813d6020116112a8575b8161129060209383611e7f565b81010312610178576112a28291611ee3565b85611202565b3d9150611283565b34610178575f600319360112610178576040515f6002549060018260011c91600184169182156113e6575b60209485851084146113b95785879486865291825f1461137b575050600114611320575b5061130c92500383611e7f565b610da6604051928284938452830190611ebe565b84915060025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace905f915b85831061136357505061130c9350820101856112ff565b8054838901850152879450869390920191810161134c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261130c95151560051b85010192508791506112ff9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f16926112db565b34610178575f6003193601126101785760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101785760406003193601126101785760243567ffffffffffffffff80821161017857366023830112156101785781600401359161147183611ea2565b9261147f6040519485611e7f565b8084526020840191366024838301011161017857815f92602460209301853785010152825183019160208301938084036101a09081811261017857610180809112610178576114d9604051956114d487611e2a565b611ee3565b85526114e760408401611ee3565b60208601526114f860608401611ee3565b60408601526080830151606086015260a0830151608086015260c083015163ffffffff811681036101785760a086015260e083015160c0860152610100908184015160e08701526101209182850151908701526101409182850151908115158203610178578701526101609182850151908701528301519085015281015190828211610178570193606085850312610178576040519461159786611e47565b602081015183811161017857810182603f8201121561017857602081015190848211610937578160051b604051926115d26020830185611e7f565b8352604060208401918301019185831161017857604001905b8282106119b35750505086526040810151838111610178576060908201809603126101785760405161161c81611e47565b6020860151956001600160a01b03968781168103610178578252604081015160208301526060810151858111610178576020859161165b930101611ef7565b6040820152602087015260608101519283116101785761167e9201602001611ef7565b6040840152604051907ff698da25000000000000000000000000000000000000000000000000000000008252602082600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9182156108c8575f9261197d575b509061179961178b92604051938491602083019190916101808101926001600160a01b038082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101845283611e7f565b604051809460208083015260a08201815190606060408501528151809152602060c085019201905f5b818110611964578560206118968b8b8b611836866118288d8d60406118168b840151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09384888303016060890152611f3d565b92015190848303016080850152611ebe565b03601f198101885287611e7f565b6118a8604051968795869485947f53f00b14000000000000000000000000000000000000000000000000000000008652306004870152336024870152600435604487015260648601525f608486015260e060a486015260e4850190611ebe565b906003198483030160c4850152611ebe565b03917f0000000000000000000000000000000000000000000000000000000000000000165afa80156108c8575f90611908575b6020907fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b506020813d60201161195c575b8161192260209383611e7f565b8101031261017857517fffffffff0000000000000000000000000000000000000000000000000000000081168103610178576020906118db565b3d9150611915565b82518452899550602093840193909201916001016117c2565b91506020823d6020116119ab575b8161199860209383611e7f565b81010312610178579051906117996116e3565b3d915061198b565b81518152602091820191016115eb565b3461017857610260600319360112610178576119dd611dd0565b506119e6611de6565b5067ffffffffffffffff60a43581811161017857611a08903690600401611dfc565b919060c43582811161017857611a22903690600401611dfc565b505061018092837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c36011261017857611a5a91611fc8565b916101643592836080820180518211611c79575b5050604051611b2381611b156020820194859190916101808101926001600160a01b038082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101835282611e7f565b51902090604051602081019460e4356001600160a01b0390818116809103610178578752610104358181168091036101785760408401526101243590811680910361017857606083015261014435608083015260a08201526101843563ffffffff81168091036101785760c08201526101a492833560e08301526101c49081356101008401526101e49687356101208501526102049485358015158091036101785761014086015261022435610160860152610244358186015284526101a084019687118488101761093757866040528351902003611bfe57005b608495602f7f566572696679206f7264657220646f6573206e6f74206d6174636820776974689260207f206578697374696e67206f726465720000000000000000000000000000000000977f8d8a6110000000000000000000000000000000000000000000000000000000008a528601528401528201520152fd5b528385611a6e565b3461017857602060031936011261017857600435907fffffffff000000000000000000000000000000000000000000000000000000008216809203610178577f62af8dc2000000000000000000000000000000000000000000000000000000008214611da857817f14a2a7840000000000000000000000000000000000000000000000000000000060209314908115611d7e575b8115611d54575b8115611d2a575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483611d23565b7f1626ba7e0000000000000000000000000000000000000000000000000000000081149150611d1c565b7fb8296fc40000000000000000000000000000000000000000000000000000000081149150611d15565b7f32798566000000000000000000000000000000000000000000000000000000005f5260045ffd5b600435906001600160a01b038216820361017857565b602435906001600160a01b038216820361017857565b9181601f840112156101785782359167ffffffffffffffff8311610178576020838186019501011161017857565b610180810190811067ffffffffffffffff82111761093757604052565b6060810190811067ffffffffffffffff82111761093757604052565b6080810190811067ffffffffffffffff82111761093757604052565b90601f601f19910116810190811067ffffffffffffffff82111761093757604052565b67ffffffffffffffff811161093757601f01601f191660200190565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b51906001600160a01b038216820361017857565b81601f8201121561017857805190611f0e82611ea2565b92611f1c6040519485611e7f565b8284526020838301011161017857815f9260208093018386015e8301015290565b9060606040611f6d936001600160a01b038151168452602081015160208501520151918160408201520190611ebe565b90565b60405190611f7d82611e2a565b5f610160838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b9081602091611fd5611f70565b508101031261017857356001600160a01b03811680910361017857611f6d90612187565b9190820391821161200657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a926060926040519160208301927f095ea7b300000000000000000000000000000000000000000000000000000000908185526001600160a01b039460205f877f00000000000000000000000000000000000000000000000000000000000000001692836024860152816044860152604485526120cf85611e63565b845190828b5af15f513d82612169575b50501561212c575b505050612118818385871696875f5260036020525f600360408220828155826001820155826002820155015561262b565b6040519384526020840152166040820152a1565b6121619261215b9160405191602083015260248201525f60448201526044815261215581611e63565b8761280a565b8561280a565b5f80806120e7565b90915061217f57508587163b15155b5f806120df565b600114612178565b61218f611f70565b506001600160a01b0380911690815f52602090600382526040805f2060038251926121b984611e63565b848354168452846001840154169486850195865260028401549382860194855263ffffffff9384910154169460608101958087521561232b5781905116955116918151937f70a0823100000000000000000000000000000000000000000000000000000000855230600486015287856024818c5afa948515612321575f956122f2575b5051945116947f0000000000000000000000000000000000000000000000000000000000000000968251986122708a611e2a565b89528801528601526060850152608084015260a08301527f000000000000000000000000000000000000000000000000000000000000000060c08301525f60e08301527f000000000000000000000000000000000000000000000000000000000000000061010083015260016101208301528061014083015261016082015290565b9094508781813d831161231a575b61230a8183611e7f565b810103126101785751935f61223c565b503d612300565b83513d5f823e3d90fd5b6064888451907fc8fc27250000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4f7264657220646f6573206e6f742065786973740000000000000000000000006044820152fd5b6001600160a01b035f54163303610f0d57565b156123a257565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d696e20616d6f756e74206f7574206973207a65726f000000000000000000006044820152fd5b421161240857565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f446561646c696e6520697320696e2074686520706173740000000000000000006044820152fd5b6040519160205f8185016124bc866118287f095ea7b300000000000000000000000000000000000000000000000000000000998a85528760248401602090939291936001600160a01b0360408201951681520152565b85519082865af15f513d82612520575b5050156124da575b50505050565b612517936001600160a01b03612512926040519260208401521660248201525f60448201526044815261250c81611e63565b8261280a565b61280a565b5f8080806124d4565b90915061253d57506001600160a01b0382163b15155b5f806124cc565b600114612536565b6001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001691604091825191166020820152602081528181019267ffffffffffffffff9180851083861117610937578484526125a685611e47565b3085525f60608201526080810152803b15610178576125fe5f9491859285519687809481937f6bfae1ca0000000000000000000000000000000000000000000000000000000083528960048401526044830190611f3d565b6001602483015203925af180156126215761261857505050565b82116109375752565b82513d5f823e3d90fd5b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b039092166024830152604482019290925261267d91612512826064810161178b565b565b6001600160a01b031690815f52600360205263ffffffff600360405f20015416801561273d576020602493604051948580927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa9283156108c8575f93612709575b50826126f7575060029190565b42116127035760019190565b60039190565b9092506020813d602011612735575b8161272560209383611e7f565b810103126101785751915f6126ea565b3d9150612718565b505f91508190565b6001600160a01b03909291921691825f52600360205263ffffffff600360405f2001541692831561280057906020602492604051938480927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa80156108c8575f906127cc575b6127bf9250611ff9565b91826126f7575060029190565b506020823d6020116127f8575b816127e660209383611e7f565b81010312610178576127bf91516127b5565b3d91506127d9565b505090505f905f90565b905f602091828151910182855af1156108c8575f513d61286e57506001600160a01b0381163b155b6128395750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6001141561283256fea26469706673582212209d7552bdbf91926dc34e36927c2968116a3141dcd8dc11b543be7c1c2655140d64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x1C81 JUMPI POP DUP1 PUSH4 0x14A2A784 EQ PUSH2 0x19C3 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0x1433 JUMPI DUP1 PUSH4 0x178AC96E EQ PUSH2 0x13F0 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x12B0 JUMPI DUP1 PUSH4 0x60E092C6 EQ PUSH2 0x1179 JUMPI DUP1 PUSH4 0x68BCE712 EQ PUSH2 0x1013 JUMPI DUP1 PUSH4 0x6EBA2B13 EQ PUSH2 0xFE6 JUMPI DUP1 PUSH4 0x6F9D75CD EQ PUSH2 0xFB1 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xF39 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xE8F JUMPI DUP1 PUSH4 0x8AEBD348 EQ PUSH2 0xE55 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xE30 JUMPI DUP1 PUSH4 0x93504C52 EQ PUSH2 0xDED JUMPI DUP1 PUSH4 0x9B552CC2 EQ PUSH2 0xDAA JUMPI DUP1 PUSH4 0xB8296FC4 EQ PUSH2 0xC9D JUMPI DUP1 PUSH4 0xD83B06A4 EQ PUSH2 0x9F0 JUMPI DUP1 PUSH4 0xDE557A32 EQ PUSH2 0x1A2 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x17C JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0xF8 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x111 PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x119 PUSH2 0x2388 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x1BB PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA4 CALLDATALOAD AND PUSH1 0xA4 CALLDATALOAD SUB PUSH2 0x178 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x9C8 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x9A0 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 DUP4 PUSH1 0x4 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP4 PUSH2 0x964 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE DUP1 PUSH1 0xA0 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP4 ADD GT OR PUSH2 0x937 JUMPI DUP1 PUSH1 0xA0 PUSH2 0x320 SWAP3 ADD PUSH1 0x40 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x280A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP3 PUSH2 0x902 JUMPI JUMPDEST POP PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x64 PUSH0 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x4 DUP6 ADD MSTORE ADDRESS PUSH1 0x24 DUP6 ADD MSTORE ADDRESS PUSH1 0x44 DUP6 ADD MSTORE AND GAS CALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH2 0x8D3 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP1 PUSH2 0x894 JUMPI JUMPDEST PUSH2 0x420 SWAP3 POP PUSH2 0x1FF9 JUMP JUMPDEST SWAP3 PUSH1 0x84 CALLDATALOAD PUSH1 0x80 SHR DUP5 LT ISZERO PUSH2 0x470 JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x80 SHR PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP4 ISZERO PUSH2 0x85F JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EQ PUSH0 EQ PUSH2 0x53B JUMPI POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND DUP4 LT PUSH2 0x4EA JUMPI POP SWAP1 PUSH2 0x4C5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA4 CALLDATALOAD SWAP2 AND PUSH2 0x262B JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 POP PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST SWAP2 SWAP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ PUSH0 EQ PUSH2 0x5DD JUMPI PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616E642074617267657420746F6B656E206172652074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x68652073616D6500000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST DUP2 ISZERO PUSH2 0x801 JUMPI PUSH2 0x600 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND PUSH2 0x239B JUMP JUMPDEST PUSH2 0x60B PUSH1 0xC4 CALLDATALOAD PUSH2 0x2400 JUMP JUMPDEST PUSH2 0x61E DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x2745 JUMP JUMPDEST POP PUSH1 0x4 DUP2 LT ISZERO DUP1 PUSH2 0x7C7 JUMPI DUP2 ISZERO ISZERO DUP1 PUSH2 0x7F4 JUMPI JUMPDEST PUSH2 0x798 JUMPI POP POP PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP1 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP5 PUSH2 0x671 DUP3 DUP11 AND PUSH2 0x2545 JUMP JUMPDEST PUSH2 0x69E DUP8 PUSH32 0x0 DUP5 DUP13 AND PUSH2 0x2466 JUMP JUMPDEST DUP9 PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 MLOAD PUSH2 0x6B2 DUP2 PUSH2 0x1E63 JUMP JUMPDEST DUP6 DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 PUSH1 0xA4 CALLDATALOAD AND DUP2 MSTORE PUSH1 0x40 DUP3 ADD SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND DUP3 MSTORE DUP8 DUP12 DUP5 ADD SWAP7 DUP7 PUSH1 0xC4 CALLDATALOAD AND DUP9 MSTORE AND PUSH0 MSTORE DUP4 PUSH1 0x20 MSTORE DUP8 PUSH1 0x40 PUSH0 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 SLOAD AND OR DUP5 SSTORE DUP9 PUSH1 0x1 DUP6 ADD SWAP3 MLOAD AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE MLOAD PUSH1 0x2 DUP3 ADD SSTORE ADD SWAP2 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND PUSH1 0x20 DUP9 ADD MSTORE DUP2 PUSH1 0xA4 CALLDATALOAD AND PUSH1 0x40 DUP9 ADD MSTORE AND SWAP7 AND SWAP5 AND SWAP3 LOG4 PUSH2 0x4C5 JUMP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH2 0x7C7 JUMPI PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP PUSH0 PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x632 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616D6F756E74206973207A65726F0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 PUSH32 0x5DB1DD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x8C0 JUMPI JUMPDEST DUP2 PUSH2 0x8AE PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x420 SWAP2 MLOAD PUSH2 0x416 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x8A1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x8FA JUMPI JUMPDEST DUP2 PUSH2 0x8EC PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD PUSH2 0x3C9 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x8DF JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x92F JUMPI JUMPDEST DUP2 PUSH2 0x91E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP1 PUSH1 0x20 PUSH2 0x36D JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x911 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x998 JUMPI JUMPDEST DUP2 PUSH2 0x980 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x991 SWAP1 PUSH2 0x1EE3 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x2AB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x973 JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xA09 PUSH2 0x1DD0 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0xC65 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0xC58 JUMPI JUMPDEST PUSH2 0x9C8 JUMPI PUSH2 0xA92 DUP6 PUSH2 0x267F JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x3 DUP2 SUB PUSH2 0xC2D JUMPI POP PUSH2 0xAAF DUP4 PUSH2 0x239B JUMP JUMPDEST PUSH2 0xAB8 DUP5 PUSH2 0x2400 JUMP JUMPDEST DUP5 DUP7 AND SWAP5 DUP6 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH1 0x2 DUP3 ADD SSTORE ADD PUSH4 0xFFFFFFFF DUP7 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0x0 SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x44 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP2 PUSH2 0xBCF JUMPI JUMPDEST POP PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A SWAP8 DUP5 SWAP4 SWAP3 DUP5 PUSH1 0x80 SWAP10 SWAP9 SWAP8 SWAP7 PUSH2 0xBA8 SWAP5 LT PUSH2 0xBBE JUMPI JUMPDEST POP POP PUSH2 0x2545 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE LOG1 STOP JUMPDEST PUSH2 0xBC8 SWAP2 DUP4 PUSH2 0x2466 JUMP JUMPDEST DUP10 DUP5 PUSH2 0xBA1 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 SWAP4 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 RETURNDATASIZE DUP4 GT PUSH2 0xC26 JUMPI JUMPDEST PUSH2 0xBEC DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP5 SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A PUSH2 0xB6A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xBE2 JUMP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0xA85 JUMP JUMPDEST DUP1 SWAP3 POP DUP4 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xC96 JUMPI JUMPDEST PUSH2 0xC7E DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0xC90 DUP6 SWAP2 PUSH2 0x1EE3 JUMP JUMPDEST DUP8 PUSH2 0xA7A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xC74 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xCB6 PUSH2 0x1DD0 JUMP JUMPDEST POP PUSH2 0xCBF PUSH2 0x1DE6 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x178 JUMPI PUSH2 0xCE1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST PUSH1 0x84 SWAP3 SWAP2 SWAP3 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x178 JUMPI PUSH2 0xDA6 SWAP3 PUSH2 0xD03 PUSH2 0xD0A SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST POP POP PUSH2 0x1FC8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB CALLER DUP2 DUP4 AND SUB PUSH2 0xF0D JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xF51 PUSH2 0x2388 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xFD2 PUSH2 0xFCD PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x267F JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x20 SWAP2 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xDA6 PUSH2 0xD0A PUSH2 0x1005 PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x100D PUSH2 0x1F70 JUMP JUMPDEST POP PUSH2 0x2187 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x102C PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x1034 PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x20 SWAP3 SWAP2 DUP4 DUP2 PUSH1 0x4 DUP2 PUSH32 0x0 DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0x1141 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0x1134 JUMPI JUMPDEST PUSH2 0x9C8 JUMPI DUP3 PUSH1 0x24 SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP4 PUSH2 0x1102 JUMPI JUMPDEST POP PUSH2 0x1100 SWAP4 POP PUSH2 0x2033 JUMP JUMPDEST STOP JUMPDEST SWAP1 SWAP3 POP DUP4 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x112D JUMPI JUMPDEST PUSH2 0x1119 DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x1100 SWAP3 MLOAD SWAP2 DUP5 PUSH2 0x10F5 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x110F JUMP JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0x10AB JUMP JUMPDEST DUP1 SWAP3 POP DUP6 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1172 JUMPI JUMPDEST PUSH2 0x115A DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x116C DUP6 SWAP2 PUSH2 0x1EE3 JUMP JUMPDEST DUP7 PUSH2 0x10A0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1150 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x1192 PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x119A PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1274 JUMPI JUMPDEST POP AND CALLER EQ ISZERO SWAP1 DUP2 PUSH2 0x1266 JUMPI JUMPDEST POP PUSH2 0x9C8 JUMPI PUSH2 0x121C DUP3 PUSH2 0x267F JUMP JUMPDEST SWAP2 SWAP1 SWAP3 PUSH1 0x4 DUP5 LT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x3 DUP5 SUB PUSH2 0x123A JUMPI PUSH2 0x1100 SWAP4 POP PUSH2 0x2033 JUMP JUMPDEST DUP4 PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH0 SLOAD AND CALLER EQ ISZERO DUP4 PUSH2 0x120E JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x12A8 JUMPI JUMPDEST DUP2 PUSH2 0x1290 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x12A2 DUP3 SWAP2 PUSH2 0x1EE3 JUMP JUMPDEST DUP6 PUSH2 0x1202 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1283 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH1 0x2 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x13E6 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x13B9 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x137B JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1320 JUMPI JUMPDEST POP PUSH2 0x130C SWAP3 POP SUB DUP4 PUSH2 0x1E7F JUMP JUMPDEST PUSH2 0xDA6 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1EBE JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x2 PUSH0 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x1363 JUMPI POP POP PUSH2 0x130C SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x12FF JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x134C JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0x130C SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x12FF SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0x12DB JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT PUSH2 0x178 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x178 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x1471 DUP4 PUSH2 0x1EA2 JUMP JUMPDEST SWAP3 PUSH2 0x147F PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1E7F JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP2 CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0x178 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH1 0x20 SWAP4 ADD DUP6 CALLDATACOPY DUP6 ADD ADD MSTORE DUP3 MLOAD DUP4 ADD SWAP2 PUSH1 0x20 DUP4 ADD SWAP4 DUP1 DUP5 SUB PUSH2 0x1A0 SWAP1 DUP2 DUP2 SLT PUSH2 0x178 JUMPI PUSH2 0x180 DUP1 SWAP2 SLT PUSH2 0x178 JUMPI PUSH2 0x14D9 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x14D4 DUP8 PUSH2 0x1E2A JUMP JUMPDEST PUSH2 0x1EE3 JUMP JUMPDEST DUP6 MSTORE PUSH2 0x14E7 PUSH1 0x40 DUP5 ADD PUSH2 0x1EE3 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x14F8 PUSH1 0x60 DUP5 ADD PUSH2 0x1EE3 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP5 ADD MLOAD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x120 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH2 0x140 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x178 JUMPI DUP8 ADD MSTORE PUSH2 0x160 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x178 JUMPI ADD SWAP4 PUSH1 0x60 DUP6 DUP6 SUB SLT PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH2 0x1597 DUP7 PUSH2 0x1E47 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x178 JUMPI DUP2 ADD DUP3 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x178 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x937 JUMPI DUP2 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP3 PUSH2 0x15D2 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1E7F JUMP JUMPDEST DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD SWAP2 DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x178 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x19B3 JUMPI POP POP POP DUP7 MSTORE PUSH1 0x40 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x178 JUMPI PUSH1 0x60 SWAP1 DUP3 ADD DUP1 SWAP7 SUB SLT PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD PUSH2 0x161C DUP2 PUSH2 0x1E47 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI DUP3 MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD DUP6 DUP2 GT PUSH2 0x178 JUMPI PUSH1 0x20 DUP6 SWAP2 PUSH2 0x165B SWAP4 ADD ADD PUSH2 0x1EF7 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP3 DUP4 GT PUSH2 0x178 JUMPI PUSH2 0x167E SWAP3 ADD PUSH1 0x20 ADD PUSH2 0x1EF7 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF698DA2500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP3 PUSH2 0x197D JUMPI JUMPDEST POP SWAP1 PUSH2 0x1799 PUSH2 0x178B SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x1E7F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 PUSH1 0x20 DUP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP2 MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP6 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0xC0 DUP6 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1964 JUMPI DUP6 PUSH1 0x20 PUSH2 0x1896 DUP12 DUP12 DUP12 PUSH2 0x1836 DUP7 PUSH2 0x1828 DUP14 DUP14 PUSH1 0x40 PUSH2 0x1816 DUP12 DUP5 ADD MLOAD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 SWAP4 DUP5 DUP9 DUP4 SUB ADD PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x1F3D JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1EBE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP9 MSTORE DUP8 PUSH2 0x1E7F JUMP JUMPDEST PUSH2 0x18A8 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP5 PUSH32 0x53F00B1400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE ADDRESS PUSH1 0x4 DUP8 ADD MSTORE CALLER PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0x44 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD MSTORE PUSH0 PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0xE0 PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xE4 DUP6 ADD SWAP1 PUSH2 0x1EBE JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0xC4 DUP6 ADD MSTORE PUSH2 0x1EBE JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP1 PUSH2 0x1908 JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x195C JUMPI JUMPDEST DUP2 PUSH2 0x1922 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x18DB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1915 JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP10 SWAP6 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x17C2 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x19AB JUMPI JUMPDEST DUP2 PUSH2 0x1998 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI SWAP1 MLOAD SWAP1 PUSH2 0x1799 PUSH2 0x16E3 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x198B JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x15EB JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH2 0x260 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x19DD PUSH2 0x1DD0 JUMP JUMPDEST POP PUSH2 0x19E6 PUSH2 0x1DE6 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x178 JUMPI PUSH2 0x1A08 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x178 JUMPI PUSH2 0x1A22 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST POP POP PUSH2 0x180 SWAP3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x1A5A SWAP2 PUSH2 0x1FC8 JUMP JUMPDEST SWAP2 PUSH2 0x164 CALLDATALOAD SWAP3 DUP4 PUSH1 0x80 DUP3 ADD DUP1 MLOAD DUP3 GT PUSH2 0x1C79 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH2 0x1B23 DUP2 PUSH2 0x1B15 PUSH1 0x20 DUP3 ADD SWAP5 DUP6 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1E7F JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 PUSH1 0xE4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI DUP8 MSTORE PUSH2 0x104 CALLDATALOAD DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x124 CALLDATALOAD SWAP1 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x184 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1A4 SWAP3 DUP4 CALLDATALOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x1C4 SWAP1 DUP2 CALLDATALOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x1E4 SWAP7 DUP8 CALLDATALOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x204 SWAP5 DUP6 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x224 CALLDATALOAD PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x244 CALLDATALOAD DUP2 DUP7 ADD MSTORE DUP5 MSTORE PUSH2 0x1A0 DUP5 ADD SWAP7 DUP8 GT DUP5 DUP9 LT OR PUSH2 0x937 JUMPI DUP7 PUSH1 0x40 MSTORE DUP4 MLOAD SWAP1 KECCAK256 SUB PUSH2 0x1BFE JUMPI STOP JUMPDEST PUSH1 0x84 SWAP6 PUSH1 0x2F PUSH32 0x566572696679206F7264657220646F6573206E6F74206D617463682077697468 SWAP3 PUSH1 0x20 PUSH32 0x206578697374696E67206F726465720000000000000000000000000000000000 SWAP8 PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP7 ADD MSTORE DUP5 ADD MSTORE DUP3 ADD MSTORE ADD MSTORE REVERT JUMPDEST MSTORE DUP4 DUP6 PUSH2 0x1A6E JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x178 JUMPI PUSH32 0x62AF8DC200000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x1DA8 JUMPI DUP2 PUSH32 0x14A2A78400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x1D7E JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1D54 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1D2A JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x1D23 JUMP JUMPDEST PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1D1C JUMP JUMPDEST PUSH32 0xB8296FC400000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1D15 JUMP JUMPDEST PUSH32 0x3279856600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x178 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x178 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x178 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x178 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x178 JUMPI JUMP JUMPDEST PUSH2 0x180 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x937 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x178 JUMPI JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x178 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1F0E DUP3 PUSH2 0x1EA2 JUMP JUMPDEST SWAP3 PUSH2 0x1F1C PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1E7F JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x178 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x60 PUSH1 0x40 PUSH2 0x1F6D SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP6 ADD MSTORE ADD MLOAD SWAP2 DUP2 PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1EBE JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1F7D DUP3 PUSH2 0x1E2A JUMP JUMPDEST PUSH0 PUSH2 0x160 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE DUP3 PUSH2 0x140 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 PUSH2 0x1FD5 PUSH2 0x1F70 JUMP JUMPDEST POP DUP2 ADD SUB SLT PUSH2 0x178 JUMPI CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH2 0x1F6D SWAP1 PUSH2 0x2187 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x2006 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP3 PUSH1 0x60 SWAP3 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD SWAP3 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH1 0x20 PUSH0 DUP8 PUSH32 0x0 AND SWAP3 DUP4 PUSH1 0x24 DUP7 ADD MSTORE DUP2 PUSH1 0x44 DUP7 ADD MSTORE PUSH1 0x44 DUP6 MSTORE PUSH2 0x20CF DUP6 PUSH2 0x1E63 JUMP JUMPDEST DUP5 MLOAD SWAP1 DUP3 DUP12 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x2169 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x212C JUMPI JUMPDEST POP POP POP PUSH2 0x2118 DUP2 DUP4 DUP6 DUP8 AND SWAP7 DUP8 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x3 PUSH1 0x40 DUP3 KECCAK256 DUP3 DUP2 SSTORE DUP3 PUSH1 0x1 DUP3 ADD SSTORE DUP3 PUSH1 0x2 DUP3 ADD SSTORE ADD SSTORE PUSH2 0x262B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE LOG1 JUMP JUMPDEST PUSH2 0x2161 SWAP3 PUSH2 0x215B SWAP2 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x2155 DUP2 PUSH2 0x1E63 JUMP JUMPDEST DUP8 PUSH2 0x280A JUMP JUMPDEST DUP6 PUSH2 0x280A JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x20E7 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x217F JUMPI POP DUP6 DUP8 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x20DF JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x2178 JUMP JUMPDEST PUSH2 0x218F PUSH2 0x1F70 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH1 0x3 DUP3 MLOAD SWAP3 PUSH2 0x21B9 DUP5 PUSH2 0x1E63 JUMP JUMPDEST DUP5 DUP4 SLOAD AND DUP5 MSTORE DUP5 PUSH1 0x1 DUP5 ADD SLOAD AND SWAP5 DUP7 DUP6 ADD SWAP6 DUP7 MSTORE PUSH1 0x2 DUP5 ADD SLOAD SWAP4 DUP3 DUP7 ADD SWAP5 DUP6 MSTORE PUSH4 0xFFFFFFFF SWAP4 DUP5 SWAP2 ADD SLOAD AND SWAP5 PUSH1 0x60 DUP2 ADD SWAP6 DUP1 DUP8 MSTORE ISZERO PUSH2 0x232B JUMPI DUP2 SWAP1 MLOAD AND SWAP6 MLOAD AND SWAP2 DUP2 MLOAD SWAP4 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS PUSH1 0x4 DUP7 ADD MSTORE DUP8 DUP6 PUSH1 0x24 DUP2 DUP13 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x2321 JUMPI PUSH0 SWAP6 PUSH2 0x22F2 JUMPI JUMPDEST POP MLOAD SWAP5 MLOAD AND SWAP5 PUSH32 0x0 SWAP7 DUP3 MLOAD SWAP9 PUSH2 0x2270 DUP11 PUSH2 0x1E2A JUMP JUMPDEST DUP10 MSTORE DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH32 0x0 PUSH1 0xC0 DUP4 ADD MSTORE PUSH0 PUSH1 0xE0 DUP4 ADD MSTORE PUSH32 0x0 PUSH2 0x100 DUP4 ADD MSTORE PUSH1 0x1 PUSH2 0x120 DUP4 ADD MSTORE DUP1 PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x231A JUMPI JUMPDEST PUSH2 0x230A DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x223C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2300 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP9 DUP5 MLOAD SWAP1 PUSH32 0xC8FC272500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7264657220646F6573206E6F74206578697374000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND CALLER SUB PUSH2 0xF0D JUMPI JUMP JUMPDEST ISZERO PUSH2 0x23A2 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D696E20616D6F756E74206F7574206973207A65726F00000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST TIMESTAMP GT PUSH2 0x2408 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446561646C696E6520697320696E207468652070617374000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 PUSH0 DUP2 DUP6 ADD PUSH2 0x24BC DUP7 PUSH2 0x1828 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP10 DUP11 DUP6 MSTORE DUP8 PUSH1 0x24 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST DUP6 MLOAD SWAP1 DUP3 DUP7 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x2520 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x24DA JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x2517 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2512 SWAP3 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x250C DUP2 PUSH2 0x1E63 JUMP JUMPDEST DUP3 PUSH2 0x280A JUMP JUMPDEST PUSH2 0x280A JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 PUSH2 0x24D4 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x253D JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x24CC JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x2536 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP2 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE DUP2 DUP2 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP1 DUP6 LT DUP4 DUP7 GT OR PUSH2 0x937 JUMPI DUP5 DUP5 MSTORE PUSH2 0x25A6 DUP6 PUSH2 0x1E47 JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD MSTORE DUP1 EXTCODESIZE ISZERO PUSH2 0x178 JUMPI PUSH2 0x25FE PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x6BFAE1CA00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x1F3D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x2621 JUMPI PUSH2 0x2618 JUMPI POP POP POP JUMP JUMPDEST DUP3 GT PUSH2 0x937 JUMPI MSTORE JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x267D SWAP2 PUSH2 0x2512 DUP3 PUSH1 0x64 DUP2 ADD PUSH2 0x178B JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND DUP1 ISZERO PUSH2 0x273D JUMPI PUSH1 0x20 PUSH1 0x24 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP4 PUSH2 0x2709 JUMPI JUMPDEST POP DUP3 PUSH2 0x26F7 JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x2703 JUMPI PUSH1 0x1 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2735 JUMPI JUMPDEST DUP2 PUSH2 0x2725 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x26EA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2718 JUMP JUMPDEST POP PUSH0 SWAP2 POP DUP2 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 SWAP2 SWAP3 AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND SWAP3 DUP4 ISZERO PUSH2 0x2800 JUMPI SWAP1 PUSH1 0x20 PUSH1 0x24 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP1 PUSH2 0x27CC JUMPI JUMPDEST PUSH2 0x27BF SWAP3 POP PUSH2 0x1FF9 JUMP JUMPDEST SWAP2 DUP3 PUSH2 0x26F7 JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x27F8 JUMPI JUMPDEST DUP2 PUSH2 0x27E6 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x27BF SWAP2 MLOAD PUSH2 0x27B5 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x27D9 JUMP JUMPDEST POP POP SWAP1 POP PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 PUSH1 0x20 SWAP2 DUP3 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL ISZERO PUSH2 0x8C8 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x286E JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x2839 JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x2832 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 PUSH22 0x52BDBF91926DC34E36927C2968116A3141DCD8DC11B5 NUMBER 0xBE PUSH29 0x1C2655140D64736F6C634300081B003300000000000000000000000000 ","sourceMap":"1248:3961:77:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;;:::i;:::-;1500:62:49;;:::i;:::-;-1:-1:-1;;;;;1248:3961:77;;;;;;1738:24:50;1248:3961:77;;;1738:24:50;1248:3961:77;;;;1777:43:50;1248:3961:77;1777:43:50;;1248:3961:77;;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;-1:-1:-1;;;;;1311:13:50;1248:3961:77;;;;;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;;:::i;:::-;;;:::i;:::-;;;-1:-1:-1;;;;;1248:3961:77;;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;-1:-1:-1;;;;;799:18:78;1248:3961:77;777:10:78;:41;773:97;;551:66:42;2806:53:43;1316:93:42;;1248:3961:77;551:66:42;3051:52:43;1248:3961:77;;3212:20;1248:3961;3212:20;;1248:3961;;;;-1:-1:-1;;;;;1248:3961:77;;3212:20;;;;;;;1248:3961;3212:20;;;1248:3961;;;;;;1745:53:60;;;777:10:78;1745:53:60;;;1248:3961:77;3459:4;1248:3961;;;;;;;;;;;1745:53:60;;1248:3961:77;;;;;;;;;;;;;;;1745:53:60;1248:3961:77;;;;-1:-1:-1;;;;;1248:3961:77;;1745:53:60;:::i;:::-;1248:3961:77;;3696:40;1248:3961;3696:40;;3459:4;1248:3961;3696:40;;1248:3961;;;1745:53:60;1248:3961:77;-1:-1:-1;;;;;1248:3961:77;;3696:40;;;;;;;1248:3961;3696:40;;;1248:3961;;;-1:-1:-1;;;;;1248:3961:77;;;;;3747:72;;;;;1248:3961;3747:72;;1248:3961;;;3747:72;;1248:3961;3459:4;1745:53:60;1248:3961:77;;;3459:4;1248:3961;;;;;3747:72;;;;;;;;1248:3961;;;;3861:40;1248:3961;3861:40;;3459:4;1248:3961;3861:40;;1248:3961;;;1745:53:60;1248:3961:77;-1:-1:-1;;;;;1248:3961:77;;3861:40;;;;;;1248:3961;3861:40;;;1248:3961;3935:44;;;;:::i;:::-;1248:3961;;;;;3994:43;;1248:3961;;;4060:78;-1:-1:-1;;;;;4060:78:77;;1248:3961;4060:78;1248:3961;;;1745:53:60;1248:3961:77;;;;;;;;;4060:78;3990:261;4159:26;;4155:96;;-1:-1:-1;;;;;1248:3961:77;;-1:-1:-1;;;;;1248:3961:77;;4484:30;4480:721;1248:3961;;;;1237:14:36;1248:3961:77;;1460:31:36;4644:47:77;;4640:171;;1248:3961;;4865:21;1248:3961;-1:-1:-1;;;;;1248:3961:77;;;;4865:21;:::i;:::-;1248:3961;551:66:42;3051:52:43;1248:3961:77;4640:171;-1:-1:-1;;;;;4718:78:77;;;1248:3961;4718:78;1248:3961;;;1745:53:60;1248:3961:77;1237:14:36;1248:3961:77;;1460:31:36;1248:3961:77;;;;4718:78;4480:721;1248:3961;;;-1:-1:-1;;;;;1248:3961:77;;-1:-1:-1;;;;;1248:3961:77;;6365:23:76;6361:239;1248:3961:77;;;;;;6411:65:76;;;1248:3961:77;;6411:65:76;;1248:3961:77;;1745:53:60;1248:3961:77;;;;;;;;;;;;;6411:65:76;6361:239;6497:19;;6493:107;;6629:23;1237:14:36;1248:3961:77;;1460:31:36;6629:23:76;:::i;:::-;6678:8;1248:3961:77;;6678:8:76;:::i;:::-;6844:51;1248:3961:77;-1:-1:-1;;;;;1248:3961:77;;6844:51:76;:::i;:::-;1248:3961:77;;;;;;;;6909:33:76;;;:65;;;6361:239;6905:310;;1248:3961:77;;;-1:-1:-1;;;;;1248:3961:77;;7540:98:76;1248:3961:77;7241:8:76;1248:3961:77;;;7241:8:76;:::i;:::-;7297:14;7283:12;;1248:3961:77;;;7297:14:76;:::i;:::-;1248:3961:77;;7323:7:76;1248:3961:77;;;;;:::i;:::-;;;;;;;7343:181:76;;1248:3961:77;;;;;;;7343:181:76;;1248:3961:77;1237:14:36;1248:3961:77;;1460:31:36;1248:3961:77;;7343:181:76;;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1237:14:36;1248:3961:77;;1460:31:36;1248:3961:77;;;;;;;;;;;;;;;;;7540:98:76;;4480:721:77;;6905:310:76;7172:32;1248:3961:77;7172:32:76;1248:3961:77;;;;1745:53:60;1248:3961:77;7172:32:76;1248:3961:77;;;;;;;1745:53:60;1248:3961:77;;6909:65:76;1248:3961:77;;;6956:18:76;6946:28;;;6909:65;;6493:107;1248:3961:77;;;6539:50:76;;;1248:3961:77;;6539:50:76;;1248:3961:77;;1745:53:60;1248:3961:77;;;;;;;;6539:50:76;4155:96:77;-1:-1:-1;;;;;4208:32:77;;1248:3961;4208:32;1248:3961;;;1745:53:60;1248:3961:77;4208:32;3861:40;;1248:3961;3861:40;;1248:3961;3861:40;;;;;;1248:3961;3861:40;;;:::i;:::-;;;1248:3961;;;;3935:44;1248:3961;;3861:40;;;;;-1:-1:-1;3861:40:77;;;1248:3961;;;;;;;;;3747:72;1248:3961;3747:72;;1248:3961;3747:72;;;;;;1248:3961;3747:72;;;:::i;:::-;;;1248:3961;;;;;3747:72;;;;;-1:-1:-1;3747:72:77;;3696:40;;;;1248:3961;3696:40;;1248:3961;3696:40;;;;;;1248:3961;3696:40;;;:::i;:::-;;;1248:3961;;;;;;;3696:40;;;;;-1:-1:-1;3696:40:77;;1248:3961;;;;;;;1745:53:60;1248:3961:77;;3212:20;;;;1248:3961;3212:20;;1248:3961;3212:20;;;;;;1248:3961;3212:20;;;:::i;:::-;;;1248:3961;;;;;;;:::i;:::-;3212:20;;;;;;;-1:-1:-1;3212:20:77;;1316:93:42;1368:30;1248:3961:77;1368:30:42;1248:3961:77;;1368:30:42;773:97:78;841:18;1248:3961:77;841:18:78;1248:3961:77;;841:18:78;1248:3961:77;;;;;-1:-1:-1;;1248:3961:77;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;1248:3961:77;;;;956:36:78;;1248:3961:77;956:18:78;;;1248:3961:77;956:18:78;;;1248:3961:77;956:36:78;;;;;;;;1248:3961:77;956:36:78;;;1248:3961:77;;;942:10:78;:50;;:75;;;1248:3961:77;938:131:78;;11575:37:76;;;:::i;:::-;1248:3961:77;;;;;;;;3825:18:76;3815:28;;3811:98;;3938:12;;;;:::i;:::-;3976:8;;;:::i;:::-;1248:3961:77;;;;;;;3825:18:76;1248:3961:77;;3825:18:76;1248:3961:77;;;3996:29:76;;;;1248:3961:77;4050:25:76;1248:3961:77;;;;;;;;;;4205:12:76;1248:3961:77;;;4172:46:76;1248:3961:77;4172:46:76;;4198:4;1248:3961:77;4172:46:76;;1248:3961:77;;;;;;;4172:46:76;;1248:3961:77;4172:46:76;;;;;;;;;1248:3961:77;4172:46:76;;;1248:3961:77;4172:55:76;4346:53;4172:55;;;;;1248:3961:77;4172:55:76;;;;4322:7;4172:55;;4168:128;;1248:3961:77;4322:7:76;;;:::i;:::-;1248:3961:77;;;;;;;;;;;;;;;;4346:53:76;1248:3961:77;4168:128:76;4278:6;;;;:::i;:::-;4168:128;;;;4172:46;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1248:3961:77;;;;;4172:46:76;;;;;;1248:3961:77;;4172:46:76;;1248:3961:77;4346:53:76;4172:46;;;;;;;3811:98;3866:32;1248:3961:77;3866:32:76;1248:3961:77;;;;3866:32:76;942:75:78;1248:3961:77;;;;;942:10:78;996:21;;942:75;;956:36;;;;;;;;;;;;;;;;;;:::i;:::-;;;1248:3961:77;;;;;;;;:::i;:::-;956:36:78;;;;;;;;1248:3961:77;;;;;-1:-1:-1;;1248:3961:77;;;;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;;;-1:-1:-1;;;;;2357:37:76;1248:3961:77;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;;;-1:-1:-1;;;;;2306:45:76;1248:3961:77;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;;;2400:32:76;1248:3961:77;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;1311:13:50;1248:3961:77;-1:-1:-1;;;;;735:10:64;1248:3961:77;;;2339:24:50;2335:96;;1248:3961:77;;;;1311:13:50;1248:3961:77;;;735:10:64;;1248:3961:77;;;;;;735:10:64;1248:3961:77;;3052:40:49;1248:3961:77;3052:40:49;;1248:3961:77;2335:96:50;2386:34;1248:3961:77;2386:34:50;735:10:64;1248:3961:77;;;;2386:34:50;1248:3961:77;;;;;-1:-1:-1;;1248:3961:77;;;;;1500:62:49;;:::i;:::-;1248:3961:77;-1:-1:-1;;;;;1248:3961:77;;2093:20:50;1248:3961:77;;2093:20:50;1248:3961:77;;;;;;;;;3052:40:49;;;;1248:3961:77;;;;;;-1:-1:-1;;1248:3961:77;;;;;11575:37:76;1248:3961:77;;:::i;:::-;11575:37:76;:::i;:::-;1248:3961:77;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;3348:18:76;1248:3961:77;;:::i;:::-;;;:::i;:::-;;3348:18:76;:::i;1248:3961:77:-;;;;;-1:-1:-1;;1248:3961:77;;;;;;;:::i;:::-;;;:::i;:::-;;;;956:36:78;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;956:18:78;1248:3961:77;;956:36:78;;;;;;;;1248:3961:77;956:36:78;;;1248:3961:77;;;942:10:78;:50;;:75;;;1248:3961:77;938:131:78;;1248:3961:77;;;;;4969:32:76;;;;1248:3961:77;4969:32:76;;4995:4;1248:3961:77;4969:32:76;;1248:3961:77;;;4969:32:76;;;;;;;1248:3961:77;4969:32:76;;;1248:3961:77;4969:32:76;;;;;:::i;:::-;1248:3961:77;4969:32:76;;;;;;;;;;;;;;;;:::i;:::-;;;1248:3961:77;;;;4969:32:76;1248:3961:77;;4969:32:76;;;;;;;;;942:75:78;1248:3961:77;;;;;942:10:78;996:21;;942:75;;956:36;;;;;;;;;;;;;;;;;;:::i;:::-;;;1248:3961:77;;;;;;;;:::i;:::-;956:36:78;;;;;;;;1248:3961:77;;;;;-1:-1:-1;;1248:3961:77;;;;;;;:::i;:::-;;;:::i;:::-;-1:-1:-1;;;;;1248:3961:77;;;956:36:78;;1248:3961:77;956:18:78;1248:3961:77;956:18:78;;;1248:3961:77;956:36:78;;;;;;;;1248:3961:77;956:36:78;;;1248:3961:77;;;942:10:78;:50;;:75;;;;1248:3961:77;938:131:78;;;11575:37:76;;;:::i;:::-;1248:3961:77;;;;;;;;;4646:18:76;4636:28;;4632:98;;4772:6;;;;:::i;4632:98::-;4687:32;;1248:3961:77;4687:32:76;1248:3961:77;;;;4687:32:76;942:75:78;1248:3961:77;;;;;942:10:78;996:21;;942:75;;;956:36;;;;1248:3961:77;956:36:78;;1248:3961:77;956:36:78;;;;;;1248:3961:77;956:36:78;;;:::i;:::-;;;1248:3961:77;;;;;;;;:::i;:::-;956:36:78;;;;;;-1:-1:-1;956:36:78;;1248:3961:77;;;;;-1:-1:-1;;1248:3961:77;;;;;;;;991:8:38;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;991:8:38;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;-1:-1:-1;1248:3961:77;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;;;-1:-1:-1;;;;;479:55:78;1248:3961:77;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9344:92:76;;;1248:3961:77;9344:92:76;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;9646:31:76;1248:3961:77;9646:31:76;;1248:3961:77;9512:13:76;1248:3961:77;9512:13:76;;;1248:3961:77;9646:31:76;;;;;;;1248:3961:77;9646:31:76;;;1248:3961:77;;;9723:17:76;;1248:3961:77;;;9723:17:76;;;1248:3961:77;9723:17:76;;1248:3961:77;;;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9723:17:76;;-1:-1:-1;;9723:17:76;;;;;;:::i;:::-;1248:3961:77;;9758:19:76;;1248:3961:77;9758:19:76;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9758:19:76;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;9758:19:76;-1:-1:-1;;9758:19:76;;;;;;:::i;:::-;1248:3961:77;;;9512:279:76;;;;;;;1248:3961:77;9512:279:76;;9572:4;1248:3961:77;9512:279:76;;1248:3961:77;9595:10:76;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;1248:3961:77;;;;;;;;;:::i;:::-;9512:279:76;:13;;1248:3961:77;9512:279:76;;;;;;1248:3961:77;9512:279:76;;;1248:3961:77;;;;;;;;;;;9512:279:76;;1248:3961:77;9512:279:76;;1248:3961:77;9512:279:76;;;;;;1248:3961:77;9512:279:76;;;:::i;:::-;;;1248:3961:77;;;;;;;;;;;;;9512:279:76;;;;;;-1:-1:-1;9512:279:76;;1248:3961:77;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;9646:31:76;;;1248:3961:77;9646:31:76;;1248:3961:77;9646:31:76;;;;;;1248:3961:77;9646:31:76;;;:::i;:::-;;;1248:3961:77;;;;;;;9723:17:76;9646:31;;;;;-1:-1:-1;9646:31:76;;1248:3961:77;;;;;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;8546:65:76;;;:::i;:::-;1248:3961:77;8626:16:76;1248:3961:77;8645:20:76;;1248:3961:77;8645:20:76;;1248:3961:77;;8626:39:76;;8622:109;;1248:3961:77;;;;;8755:22:76;;;1248:3961:77;8755:22:76;;;;1248:3961:77;;;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8755:22:76;;-1:-1:-1;;8755:22:76;;;;;;:::i;:::-;1248:3961:77;8745:33:76;;1248:3961:77;;;;8792:18:76;;1248:3961:77;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8792:18:76;;1248:3961:77;;;;;;;;;;;;;;;;;8782:29:76;;8745:66;8741:177;;1248:3961:77;8741:177:76;1248:3961:77;8834:73:76;1248:3961:77;;8834:73:76;1248:3961:77;;8834:73:76;;;;;;1248:3961:77;;;;;;;;;8834:73:76;8622:109;1248:3961:77;8622:109:76;;;;1248:3961:77;;;;;-1:-1:-1;;1248:3961:77;;;;;;;;;;;;;;;;;10011:50:76;;10007:123;;10159:53;10174:38;1248:3961:77;10159:53:76;;:131;;;;;1248:3961:77;10159:188:76;;;;1248:3961:77;10159:244:76;;;;1248:3961:77;;;;;;;10159:244:76;10378:25;10363:40;;;10159:244;;;:188;10321:26;10306:41;;;-1:-1:-1;10159:188:76;;:131;10243:47;10228:62;;;-1:-1:-1;10159:131:76;;10007:123;10084:35;1248:3961:77;10084:35:76;1248:3961:77;;10084:35:76;1248:3961:77;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;1248:3961:77;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;1248:3961:77;;;;:::o;:::-;;-1:-1:-1;;1248:3961:77;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1248:3961:77;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7917:295:76:-;;;1248:3961:77;7917:295:76;1248:3961:77;;:::i;:::-;;8134:34:76;;1248:3961:77;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;8187:18:76;;;:::i;1248:3961:77:-;;;;;;;;;;:::o;:::-;;;;;;;;;;5015:284:76;5252:40;5015:284;1248:3961:77;5015:284:76;1248:3961:77;;5199:47:60;;;;1248:3961:77;;5199:47:60;;;;-1:-1:-1;;;;;5127:12:76;5199:47:60;5141:1:76;5127:12;;1248:3961:77;5199:47:60;;;;;1248:3961:77;;;;;;;5199:47:60;;;;;:::i;:::-;9770:199;;;;;;;5141:1:76;9770:199:60;;9985:80;;;5015:284:76;5261:45:60;;;5257:201;;5015:284:76;1248:3961:77;;;5229:6:76;1248:3961:77;;;;;;;5141:1:76;1248:3961:77;5160:7:76;5199:47:60;1248:3961:77;5141:1:76;5160:7;1248:3961:77;;;;;;;;;;;;;;;;;;5229:6:76;:::i;:::-;1248:3961:77;;;;;5199:47:60;1248:3961:77;;;;;;;;5252:40:76;5015:284::o;5257:201:60:-;5434:12;1248:3961:77;5349:43:60;1248:3961:77;;;5349:43:60;5199:47;5349:43;;;5199:47;5349:43;;1248:3961:77;5141:1:76;1248:3961:77;;;;;5349:43:60;;;;;:::i;:::-;;;:::i;:::-;5434:12;;:::i;:::-;5257:201;;;;;9985:80;9997:67;;-1:-1:-1;9997:15:60;;1248:3961:77;;;;10015:26:60;:30;;9997:67;9985:80;;;;9997:67;10063:1;10048:16;9997:67;;10629:828:76;1248:3961:77;;:::i;:::-;;-1:-1:-1;;;;;1248:3961:77;;;;;-1:-1:-1;1248:3961:77;;;10745:7:76;1248:3961:77;;;;-1:-1:-1;1248:3961:77;10745:7:76;1248:3961:77;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10776:24:76;10772:99;;1248:3961:77;;;;;;;;;;11070:32:76;1248:3961:77;11070:32:76;;11096:4;11070:32;;;1248:3961:77;11070:32:76;;1248:3961:77;11070:32:76;;;;;;;;;-1:-1:-1;11070:32:76;;;10629:828;1248:3961:77;;;;;11374:13:76;;1248:3961:77;;;;;;;:::i;:::-;;;10900:550:76;;1248:3961:77;10900:550:76;;1248:3961:77;;10900:550:76;;1248:3961:77;;10900:550:76;;1248:3961:77;10900:550:76;;;1248:3961:77;11227:7:76;10900:550;;;1248:3961:77;-1:-1:-1;1248:3961:77;10900:550:76;;1248:3961:77;11288:9:76;10900:550;;;1248:3961:77;;10900:550:76;;;1248:3961:77;10900:550:76;;;;1248:3961:77;10900:550:76;;;1248:3961:77;10629:828:76;:::o;11070:32::-;;;;;;;;;;;;;;;;;:::i;:::-;;;1248:3961:77;;;;;11070:32:76;;;;;;;;;;1248:3961:77;;;-1:-1:-1;1248:3961:77;;;;;10772:99:76;1248:3961:77;;;;10823:37:76;;;;;;;1248:3961:77;;;;;;;;;;;10823:37:76;1796:162:49;-1:-1:-1;;;;;1710:6:49;1248:3961:77;;735:10:64;1855:23:49;1851:101;;1796:162::o;12930:182:76:-;13007:17;13003:103;;12930:182::o;13003:103::-;1248:3961:77;;;13047:48:76;;;1248:3961:77;13047:48:76;;;1248:3961:77;;;;;;;;;;;13047:48:76;12740:184;12809:15;:26;12805:113;;12740:184::o;12805:113::-;1248:3961:77;;;12858:49:76;;;1248:3961:77;12858:49:76;;;1248:3961:77;;;;;;;;;;;12858:49:76;5084:380:60;1248:3961:77;;5199:47:60;;-1:-1:-1;5199:47:60;;;;1248:3961:77;5199:47:60;1248:3961:77;5199:47:60;;;;;;;;1248:3961:77;;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;5199:47:60;9770:199;;;;;;;-1:-1:-1;9770:199:60;;9985:80;;;5084:380;5261:45;;;5257:201;;5084:380;;;;;:::o;5257:201::-;5434:12;1248:3961:77;-1:-1:-1;;;;;5349:43:60;1248:3961:77;;;5349:43:60;5199:47;5349:43;;;1248:3961:77;5199:47:60;5349:43;;1248:3961:77;-1:-1:-1;1248:3961:77;;;;;5349:43:60;;;;;:::i;:::-;;;:::i;:::-;5434:12;:::i;:::-;5257:201;;;;;;9985:80;9997:67;;-1:-1:-1;9997:15:60;;1248:3961:77;-1:-1:-1;;;;;1248:3961:77;;10015:26:60;:30;;9997:67;9985:80;;;;9997:67;10063:1;10048:16;9997:67;;13118:332:76;-1:-1:-1;;;;;13177:13:76;;1248:3961:77;;;;;;;;13381:19:76;;;1248:3961:77;13381:19:76;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13311:4:76;1248:3961:77;;13349:1:76;13211:204;;;1248:3961:77;13211:204:76;;;1248:3961:77;13177:266:76;;;;;1248:3961:77;13349:1:76;1248:3961:77;;;;;;13177:266:76;;;;;;1248:3961:77;13177:266:76;;;;;;1248:3961:77;;;;;;:::i;:::-;13429:4:76;1248:3961:77;;;;13177:266:76;;;;;;;;;;13118:332;;;:::o;13177:266::-;1248:3961:77;;;;;13118:332:76:o;13177:266::-;1248:3961:77;;;13349:1:76;1248:3961:77;;;;;1219:160:60;1248:3961:77;;;1328:43:60;;;;-1:-1:-1;;;;;1248:3961:77;;;1328:43:60;;;1248:3961:77;;;;;;;;1328:43:60;;;1248:3961:77;;;;1328:43:60;1248:3961:77;1328:43:60;1219:160::o;11625:1109:76:-;-1:-1:-1;;;;;1248:3961:77;;;;;11806:7:76;1248:3961:77;;;11806:7:76;1248:3961:77;;;11852:19:76;1248:3961:77;;11886:13:76;;11882:147;;1248:3961:77;;;;;12148:32:76;;;;1248:3961:77;12148:32:76;;12174:4;12148:32;;;1248:3961:77;12148:32:76;;;;;;;1248:3961:77;12148:32:76;;;11625:1109;-1:-1:-1;12209:12:76;;;12397:36;12405:18;12397:36;;:::o;12205:427::-;12454:15;:26;12450:182;;12699:18;12691:36;11625:1109;:::o;12450:182::-;11806:7;12585:36;;:::o;12148:32::-;;;;1248:3961:77;12148:32:76;;1248:3961:77;12148:32:76;;;;;;1248:3961:77;12148:32:76;;;:::i;:::-;;;1248:3961:77;;;;;12148:32:76;;;;;;;-1:-1:-1;12148:32:76;;11882:147;-1:-1:-1;1248:3961:77;;-1:-1:-1;1248:3961:77;;11983:35:76:o;11625:1109::-;-1:-1:-1;;;;;11625:1109:76;;;;1248:3961:77;;;;;11806:7:76;1248:3961:77;;;11806:7:76;1248:3961:77;;;11852:19:76;1248:3961:77;;11886:13:76;;;11882:147;;1248:3961:77;;;;;;12148:32:76;;;;1248:3961:77;12148:32:76;;12174:4;12148:32;;;1248:3961:77;12148:32:76;;;;;;1248:3961:77;12148:32:76;;;11625:1109;12148:47;;;;:::i;:::-;12209:12;;;;12397:36;12405:18;12397:36;;:::o;12148:32::-;;1248:3961:77;12148:32:76;;1248:3961:77;12148:32:76;;;;;;1248:3961:77;12148:32:76;;;:::i;:::-;;;1248:3961:77;;;;12148:47:76;1248:3961:77;;12148:32:76;;;;;-1:-1:-1;12148:32:76;;11882:147;11983:35;;;;1248:3961:77;11983:35:76;1248:3961:77;11983:35:76;:::o;8370:720:60:-;;-1:-1:-1;8507:421:60;8370:720;8507:421;;;;;;;;;;;;-1:-1:-1;8507:421:60;;8942:15;;1248:3961:77;-1:-1:-1;;;;;1248:3961:77;;8960:26:60;:31;8942:68;8938:146;;8370:720;:::o;8938:146::-;-1:-1:-1;;;;;9033:40:60;;-1:-1:-1;9033:40:60;1248:3961:77;9033:40:60;1248:3961:77;;-1:-1:-1;9033:40:60;8942:68;9009:1;8994:16;;8942:68;"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","appData()":"8aebd348","burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","cancelOrder(address,address)":"60e092c6","composableCow()":"93504c52","emergencyCancelOrder(address,address)":"68bce712","getOrder(address)":"6eba2b13","getOrderStatus(address)":"6f9d75cd","getTradeableOrder(address,address,bytes32,bytes,bytes)":"b8296fc4","isValidSignature(bytes32,bytes)":"1626ba7e","owner()":"8da5cb5b","pendingOwner()":"e30c3978","protocolFeeSweeper()":"178ac96e","renounceOwnership()":"715018a6","retryOrder(address,uint256,uint256)":"d83b06a4","supportsInterface(bytes4)":"01ffc9a7","transferOwnership(address)":"f2fde38b","vaultRelayer()":"9b552cc2","verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))":"14a2a784","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"_protocolFeeSweeper\",\"type\":\"address\"},{\"internalType\":\"contract IComposableCow\",\"name\":\"_composableCow\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_cowVaultRelayer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_appData\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_version\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"AmountOutIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InterfaceIsSignatureVerifierMuxer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"InvalidOrderParameters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeSweeper\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"actualStatus\",\"type\":\"uint8\"}],\"name\":\"OrderHasUnexpectedStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"OrderNotValid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollNever\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtEpoch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryNextBlock\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"ConditionalOrderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"OrderCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"OrderRetried\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"appData\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"encodedMinAmountsOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"cancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"composableCow\",\"outputs\":[{\"internalType\":\"contract IComposableCow\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"emergencyCancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrderStatus\",\"outputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"getTradeableOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFeeSweeper\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"retryOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultRelayer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"_order\",\"type\":\"tuple\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function. Only one order per token is allowed at a time.\",\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"InvalidOrderParameters(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"OrderHasUnexpectedStatus(uint8)\":[{\"details\":\"`revertOrder` should only be called when the OrderStatus is `Failed`.\",\"params\":{\"actualStatus\":\"The status of the order when `revertOrder` was called\"}}],\"OrderNotValid(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PollNever(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be deleted\"}}],\"PollTryAtBlock(uint256,string)\":[{\"params\":{\"blockNumber\":\"The block number when polling should resume\",\"reason\":\"Text description of the reason it should be retried\"}}],\"PollTryAtEpoch(uint256,string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\",\"timestamp\":\"The unix timestamp when polling should resume\"}}],\"PollTryNextBlock(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\"}}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"ConditionalOrderCreated(address,(address,bytes32,bytes))\":{\"details\":\"Emitted when a new conditional order is created.\",\"params\":{\"owner\":\"The address that created the conditional order\",\"params\":\"The conditional order data\"}},\"OrderCanceled(address,uint256,address)\":{\"params\":{\"exactAmountIn\":\"The number of tokens in the order\",\"receiver\":\"The account that received the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"OrderRetried(address,uint256,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the new order to be filled\",\"exactAmountIn\":\"The number of tokens in the order\",\"minAmountOut\":\"The minimum number of target tokens required\",\"tokenIn\":\"The token used to identify the order\"}},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"encodedMinAmountsOut\":\"The minimum amounts out for the swap, encoded as a 256-bit integer: - Upper 128 bits: the minimum amount of the target token to receive - Lower 128 bits: the minimum amount of the ERC4626 token to receive\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (`tokenOut` of the swap)\"}},\"cancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"emergencyCancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"getOrder(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"_0\":\"The order data for the given token\"}},\"getOrderStatus(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"status\":\"The status of the order for the given token\"}},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"details\":\"**MUST** revert if the order conditions are not met.\",\"params\":{\"ctx\":\"The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\",\"offchainInput\":\"Off-chain input (similar to Balancer `userData`); currently unused\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` of the parent `isValidSignature` call\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"},\"returns\":{\"_0\":\"order Tradeable order for submission to the CoW Protocol API\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"Should return whether the signature provided is valid for the provided data\",\"params\":{\"hash\":\"Hash of the data to be signed\",\"signature\":\"Signature byte array associated with `hash`\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"retryOrder(address,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the order to be filled.\",\"minAmountOut\":\"The minimum number of target tokens to receive (tokenOut)\",\"tokenIn\":\"The token used to identify the order\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"details\":\"Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe. **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over the order verification logic, and to allow a watchtower / user to propose a discrete order without it being generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\",\"params\":{\"_hash\":\"`EIP712` order digest\",\"ctx\":\"See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\",\"domainSeparator\":\"`EIP712` domain separator\",\"offchainInput\":\"Type-specific data NOT known at time of creation for a specific discrete order (or zero)\",\"order\":\"The proposed discrete order's `GPv2Order` data struct\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` calling `isValidSignature`\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"title\":\"ERC4626CowSwapFeeBurner\",\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"AmountOutIsZero(address)\":[{\"notice\":\"The amount out is zero.\"}],\"InterfaceIsSignatureVerifierMuxer()\":[{\"notice\":\"Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\"}],\"InvalidOrderParameters(string)\":[{\"notice\":\"The order parameters were invalid.\"}],\"InvalidProtocolFeeSweeper()\":[{\"notice\":\"The fee protocol is invalid.\"}],\"OrderHasUnexpectedStatus(uint8)\":[{\"notice\":\"Attempt to revert an order that had not failed.\"}],\"OrderNotValid(string)\":[{\"notice\":\"This error is returned by the `getTradeableOrder` function if the order conditions are not met.\"}],\"PollNever(string)\":[{\"notice\":\"The conditional order should not be polled again (i.e., deleted).\"}],\"PollTryAtBlock(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific block number.\"}],\"PollTryAtEpoch(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific epoch (unix timestamp).\"}],\"PollTryNextBlock(string)\":[{\"notice\":\"Polling should be retried at the next block.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"OrderCanceled(address,uint256,address)\":{\"notice\":\"An order was canceled after failure.\"},\"OrderRetried(address,uint256,uint256,uint256)\":{\"notice\":\"An order was retried after failing.\"},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Treats `feeToken` as an ERC4626, redeems `exactFeeTokenAmountIn`, swaps the underlying asset for `targetToken`, and sends the proceeds to the `recipient`.\"},\"cancelOrder(address,address)\":{\"notice\":\"Return tokens from an order that has failed.\"},\"emergencyCancelOrder(address,address)\":{\"notice\":\"Emergency return tokens from an order regardless of status.\"},\"getOrder(address)\":{\"notice\":\"Get the order at the sell token.\"},\"getOrderStatus(address)\":{\"notice\":\"Get the status of the order at the sell token.\"},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"notice\":\"Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\"},\"retryOrder(address,uint256,uint256)\":{\"notice\":\"Retry an order that has not been filled yet and expired.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"notice\":\"Verify that a given discrete order is valid.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"A contract that burns ERC4626 protocol fee tokens using CowSwap, previously redeeming underlying assets.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ERC4626CowSwapFeeBurner.sol\":\"ERC4626CowSwapFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\":{\"keccak256\":\"0xc82721c94d5e741f168aed4c94dc6a9006cb3348bee7398a5e3fa9b7e28557bd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://784c16c17fb89736ec5be650668d81a548acec3ccc2073e2be0f79029f84f512\",\"dweb:/ipfs/QmSk9seqC2YEJqy5pPdXKjmhEKoQhXQdQXCN4f9R8jcXKX\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":{\"keccak256\":\"0x7b8f0149ba41d28c3d0cd956911816b083f7ccec35ddc7bb7fdb829c3c11d9b2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2d39a71115b9018711726b6c7498038e6d3a41338fa635c88cc8025b4e0e5f34\",\"dweb:/ipfs/QmYqnnkXCd1yjs6kpQgxNUotpudgN37X5FTFNFyKE62PMj\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\":{\"keccak256\":\"0xc3717c516d816bd012f47a18bfd69f7887ce262435c10be9748beb4b11aee033\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://237a9295364524846f26c1b92b523e6039b414d3b691f77ba55c6deefa4b14bc\",\"dweb:/ipfs/QmXYg1paW7kDeXCFkiunzSWSWT3DD2p15CHnJZzDyEQ6Jo\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x66c7ec42c6c43712be2107a50ab4529379bc76a632b425babec698d9da921ac6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dce2778f0b638adfc5ba29c2c618c855fe725fa74a16846386aa1d56a834aa04\",\"dweb:/ipfs/QmPV9oWnzQdi58od266j62xvviavLNHqKLZfm6k2K1qy9E\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/CowSwapFeeBurner.sol\":{\"keccak256\":\"0xa37c5fd04da51fc47ce8bfe6c4a0b6c0b7687af60849420f11de03f62c2a9fa3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d35b60d3e201e591583d43a5133e0c7cc8984a64be325d66c09d02939b75149c\",\"dweb:/ipfs/Qmd298snw1uayUE9LsjPiwcvKcPsKto1v4zKePKXV5Q7fb\"]},\"contracts/ERC4626CowSwapFeeBurner.sol\":{\"keccak256\":\"0xc9955ccec1e4850bd1a47fcaa7297c50948fedf2988edd9a261cf2854d00f912\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://36f4d78fb2e64a3a906a9843a7efbda051a92a2821152dbe76fb6eaa7fd9a5ba\",\"dweb:/ipfs/QmVQJbvMRLsXsuWogwbgXv2PJDS5t1snq6c5mvYangeSeH\"]},\"contracts/FeeBurnerAuthentication.sol\":{\"keccak256\":\"0x4861db67bf113a4775c165241802df34a6c0e9fefaec82e8aaf969b5879759f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f522b3af683e09e1b67ed515be9972e7cf9514a584e264c4ca9656cc12c2f06\",\"dweb:/ipfs/QmNYqMsvWcNqACozLm3cYeR4oC3KKfKNBDSqR3vcpjv3zo\"]}},\"version\":1}"}},"contracts/FeeBurnerAuthentication.sol":{"FeeBurnerAuthentication":{"abi":[{"inputs":[{"internalType":"contract IProtocolFeeSweeper","name":"_protocolFeeSweeper","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidProtocolFeeSweeper","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeSweeper","outputs":[{"internalType":"contract IProtocolFeeSweeper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a0346100e957601f61043738819003918201601f19168301916001600160401b038311848410176100ed5780849260409485528339810103126100e95780516001600160a01b0391828216908183036100e957602001518381168091036100e95780156100d65760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3156100c75760805261033590816101028239608051816102bb0152f35b63932c92a560e01b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c908163178ac96e1461029157508063715018a61461020c57806379ba5097146101555780638da5cb5b14610123578063e30c3978146100f05763f2fde38b1461005e575f80fd5b346100ec5760206003193601126100ec5760043573ffffffffffffffffffffffffffffffffffffffff8082168092036100ec576100996102df565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b346100ec575f6003193601126100ec57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100ec575f6003193601126100ec57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100ec575f6003193601126100ec5760015473ffffffffffffffffffffffffffffffffffffffff33818316036101e0577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b346100ec575f6003193601126100ec576102246102df565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346100ec575f6003193601126100ec5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b73ffffffffffffffffffffffffffffffffffffffff5f541633036101e05756fea26469706673582212203ed8463bc743d2efb939cc670ea5ba6990b6c050196061d0e492a37fda001cfb64736f6c634300081b0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH2 0xE9 JUMPI PUSH1 0x1F PUSH2 0x437 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0xED JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0xE9 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0xE9 JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0xE9 JUMPI DUP1 ISZERO PUSH2 0xD6 JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ISZERO PUSH2 0xC7 JUMPI PUSH1 0x80 MSTORE PUSH2 0x335 SWAP1 DUP2 PUSH2 0x102 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x2BB ADD MSTORE RETURN JUMPDEST PUSH4 0x932C92A5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x178AC96E EQ PUSH2 0x291 JUMPI POP DUP1 PUSH4 0x715018A6 EQ PUSH2 0x20C JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0xF0 JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0x5E JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xEC JUMPI PUSH2 0x99 PUSH2 0x2DF JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0x1E0 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH2 0x224 PUSH2 0x2DF JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x1E0 JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATACOPY 0xD8 CHAINID EXTCODESIZE 0xC7 NUMBER 0xD2 0xEF 0xB9 CODECOPY 0xCC PUSH8 0xEA5BA6990B6C050 NOT PUSH1 0x61 0xD0 0xE4 SWAP3 LOG3 PUSH32 0xDA001CFB64736F6C634300081B00330000000000000000000000000000000000 ","sourceMap":"424:941:78:-:0;;;;;;;;;;;;;-1:-1:-1;;424:941:78;;;;-1:-1:-1;;;;;424:941:78;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;424:941:78;;;;;;;;;;;;;;;;;;;;;1273:26:49;;1269:95;;424:941:78;;;;;;;;2093:20:50;424:941:78;;2093:20:50;424:941:78;;-1:-1:-1;424:941:78;;;;;-1:-1:-1;424:941:78;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1203:42:78;1199:107;;1316:40;;424:941;;;;;;1316:40;424:941;;;;;;1199:107;1268:27;;;-1:-1:-1;1268:27:78;;-1:-1:-1;1268:27:78;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;424:941:78;;-1:-1:-1;1322:31:49;424:941:78;-1:-1:-1;424:941:78;;;;;;-1:-1:-1;424:941:78;;;;;-1:-1:-1;424:941:78"},"deployedBytecode":{"functionDebugData":{"fun_checkOwner":{"entryPoint":735,"id":9423,"parameterSlots":0,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"19771":[{"length":32,"start":699}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c908163178ac96e1461029157508063715018a61461020c57806379ba5097146101555780638da5cb5b14610123578063e30c3978146100f05763f2fde38b1461005e575f80fd5b346100ec5760206003193601126100ec5760043573ffffffffffffffffffffffffffffffffffffffff8082168092036100ec576100996102df565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b346100ec575f6003193601126100ec57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100ec575f6003193601126100ec57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100ec575f6003193601126100ec5760015473ffffffffffffffffffffffffffffffffffffffff33818316036101e0577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b346100ec575f6003193601126100ec576102246102df565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346100ec575f6003193601126100ec5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b73ffffffffffffffffffffffffffffffffffffffff5f541633036101e05756fea26469706673582212203ed8463bc743d2efb939cc670ea5ba6990b6c050196061d0e492a37fda001cfb64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x178AC96E EQ PUSH2 0x291 JUMPI POP DUP1 PUSH4 0x715018A6 EQ PUSH2 0x20C JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0xF0 JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0x5E JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xEC JUMPI PUSH2 0x99 PUSH2 0x2DF JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0x1E0 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH2 0x224 PUSH2 0x2DF JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x1E0 JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATACOPY 0xD8 CHAINID EXTCODESIZE 0xC7 NUMBER 0xD2 0xEF 0xB9 CODECOPY 0xCC PUSH8 0xEA5BA6990B6C050 NOT PUSH1 0x61 0xD0 0xE4 SWAP3 LOG3 PUSH32 0xDA001CFB64736F6C634300081B00330000000000000000000000000000000000 ","sourceMap":"424:941:78:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;424:941:78;;;;;;;;;;;;;;;;1500:62:49;;:::i;:::-;424:941:78;;1738:24:50;424:941:78;;;1738:24:50;424:941:78;;;;1777:43:50;424:941:78;1777:43:50;;424:941:78;;;;;;;;;;-1:-1:-1;;424:941:78;;;;;;;1311:13:50;424:941:78;;;;;;;;;;;;;-1:-1:-1;;424:941:78;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;424:941:78;;;;;1311:13:50;424:941:78;;735:10:64;424:941:78;;;2339:24:50;2335:96;;424:941:78;;;;1311:13:50;424:941:78;;;735:10:64;;424:941:78;;;;;;735:10:64;424:941:78;;3052:40:49;424:941:78;3052:40:49;;424:941:78;2335:96:50;2386:34;424:941:78;2386:34:50;735:10:64;424:941:78;;;;2386:34:50;424:941:78;;;;;-1:-1:-1;;424:941:78;;;;;1500:62:49;;:::i;:::-;424:941:78;;;;2093:20:50;424:941:78;;2093:20:50;424:941:78;;;;;;;;;3052:40:49;;;;424:941:78;;;;;;-1:-1:-1;;424:941:78;;;;;;479:55;424:941;479:55;424:941;;;;1796:162:49;424:941:78;1710:6:49;424:941:78;;735:10:64;1855:23:49;1851:101;;1796:162::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","owner()":"8da5cb5b","pendingOwner()":"e30c3978","protocolFeeSweeper()":"178ac96e","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"_protocolFeeSweeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeSweeper\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFeeSweeper\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidProtocolFeeSweeper()\":[{\"notice\":\"The fee protocol is invalid.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/FeeBurnerAuthentication.sol\":\"FeeBurnerAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"contracts/FeeBurnerAuthentication.sol\":{\"keccak256\":\"0x4861db67bf113a4775c165241802df34a6c0e9fefaec82e8aaf969b5879759f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f522b3af683e09e1b67ed515be9972e7cf9514a584e264c4ca9656cc12c2f06\",\"dweb:/ipfs/QmNYqMsvWcNqACozLm3cYeR4oC3KKfKNBDSqR3vcpjv3zo\"]}},\"version\":1}"}},"contracts/HyperEVMRateProvider.sol":{"HyperEVMRateProvider":{"abi":[{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"SpotPriceIsZero","type":"error"},{"inputs":[],"name":"SpotPricePrecompileFailed","type":"error"},{"inputs":[],"name":"TokenInfoPrecompileFailed","type":"error"},{"inputs":[],"name":"getPairIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSpotPriceMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_address_fromMemory":{"entryPoint":820,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint32_fromMemory":{"entryPoint":756,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint64_fromMemory":{"entryPoint":800,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint8_fromMemory":{"entryPoint":840,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":773,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":721,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"60e06040908082523461028a5781816106f6803803809161002082856102d1565b83398101031261028a57610033816102f4565b9061004160208092016102f4565b908351908082019163ffffffff8516835281815285810160018060401b0393828210858311176102a6575f9283928952519061080c5afa913d156102c9573d9261008a84610305565b93610097885195866102d1565b84523d5f8486013e5b156102ba57825183019082820193838184031261028a57838101519082821161028a5701928392610100938491031261028a57875194838601868110848211176102a65789528185015183811161028a57850181603f8201121561028a578281015161010b81610305565b916101188c5193846102d1565b818352838c838301011161028a57815f928d8793018386015e8301015286528885015183811161028a57850181603f8201121561028a57828101519384116102a6578360051b908a519461016e858401876102d1565b85528a8486019282010192831161028a578a849101915b83831061028e575050505084015261019f60608301610320565b868401526101af60808301610334565b60608401526101c060a08301610334565b60808401526101d160c08301610348565b918260a08501526101e460e08201610348565b60c08501520151805f0b810361028a5760e060ff9301521660080360ff81116102765760ff16604d811161027657600a0a801561026257670de0b6b3a76400000460805260a05260c0525161039f9081610357823960805181818160800152610202015260a05181818160e10152610145015260c051816103450152f35b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b819061029984610320565b8152019101908390610185565b634e487b7160e01b5f52604160045260245ffd5b631870604d60e21b5f5260045ffd5b6060926100a0565b601f909101601f19168101906001600160401b038211908210176102a657604052565b519063ffffffff8216820361028a57565b6001600160401b0381116102a657601f01601f191660200190565b51906001600160401b038216820361028a57565b51906001600160a01b038216820361028a57565b519060ff8216820361028a5756fe6080604090808252600480361015610015575f80fd5b5f3560e01c918263295d3ee81461030d57508163679aefce146101055750806381bfa5d1146100a75763a747d56f1461004c575f80fd5b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a357602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5f80fd5b50346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a3576020905163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35781519160209283810163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681528482528282019167ffffffffffffffff92818110848211176102ac578452515f918291906108085afa3d15610304573d8281116102d857835192601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168401908111848210176102ac57845282523d5f8684013e5b156102855783818051810103126100a35783015191821561025f577f000000000000000000000000000000000000000000000000000000000000000080840293840403610233575051908152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f44526c24000000000000000000000000000000000000000000000000000000005f525ffd5b827f79827df5000000000000000000000000000000000000000000000000000000005f525ffd5b6041867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b6041857f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b606091506101e5565b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35760209063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f3fea26469706673582212202408cf674357dec88ca1433641cb21e1a28b854edacb3295ccc92250b82ca41864736f6c634300081b0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x28A JUMPI DUP2 DUP2 PUSH2 0x6F6 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x20 DUP3 DUP6 PUSH2 0x2D1 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x28A JUMPI PUSH2 0x33 DUP2 PUSH2 0x2F4 JUMP JUMPDEST SWAP1 PUSH2 0x41 PUSH1 0x20 DUP1 SWAP3 ADD PUSH2 0x2F4 JUMP JUMPDEST SWAP1 DUP4 MLOAD SWAP1 DUP1 DUP3 ADD SWAP2 PUSH4 0xFFFFFFFF DUP6 AND DUP4 MSTORE DUP2 DUP2 MSTORE DUP6 DUP2 ADD PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB SWAP4 DUP3 DUP3 LT DUP6 DUP4 GT OR PUSH2 0x2A6 JUMPI PUSH0 SWAP3 DUP4 SWAP3 DUP10 MSTORE MLOAD SWAP1 PUSH2 0x80C GAS STATICCALL SWAP2 RETURNDATASIZE ISZERO PUSH2 0x2C9 JUMPI RETURNDATASIZE SWAP3 PUSH2 0x8A DUP5 PUSH2 0x305 JUMP JUMPDEST SWAP4 PUSH2 0x97 DUP9 MLOAD SWAP6 DUP7 PUSH2 0x2D1 JUMP JUMPDEST DUP5 MSTORE RETURNDATASIZE PUSH0 DUP5 DUP7 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x2BA JUMPI DUP3 MLOAD DUP4 ADD SWAP1 DUP3 DUP3 ADD SWAP4 DUP4 DUP2 DUP5 SUB SLT PUSH2 0x28A JUMPI DUP4 DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x28A JUMPI ADD SWAP3 DUP4 SWAP3 PUSH2 0x100 SWAP4 DUP5 SWAP2 SUB SLT PUSH2 0x28A JUMPI DUP8 MLOAD SWAP5 DUP4 DUP7 ADD DUP7 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2A6 JUMPI DUP10 MSTORE DUP2 DUP6 ADD MLOAD DUP4 DUP2 GT PUSH2 0x28A JUMPI DUP6 ADD DUP2 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x28A JUMPI DUP3 DUP2 ADD MLOAD PUSH2 0x10B DUP2 PUSH2 0x305 JUMP JUMPDEST SWAP2 PUSH2 0x118 DUP13 MLOAD SWAP4 DUP5 PUSH2 0x2D1 JUMP JUMPDEST DUP2 DUP4 MSTORE DUP4 DUP13 DUP4 DUP4 ADD ADD GT PUSH2 0x28A JUMPI DUP2 PUSH0 SWAP3 DUP14 DUP8 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE DUP7 MSTORE DUP9 DUP6 ADD MLOAD DUP4 DUP2 GT PUSH2 0x28A JUMPI DUP6 ADD DUP2 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x28A JUMPI DUP3 DUP2 ADD MLOAD SWAP4 DUP5 GT PUSH2 0x2A6 JUMPI DUP4 PUSH1 0x5 SHL SWAP1 DUP11 MLOAD SWAP5 PUSH2 0x16E DUP6 DUP5 ADD DUP8 PUSH2 0x2D1 JUMP JUMPDEST DUP6 MSTORE DUP11 DUP5 DUP7 ADD SWAP3 DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x28A JUMPI DUP11 DUP5 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x28E JUMPI POP POP POP POP DUP5 ADD MSTORE PUSH2 0x19F PUSH1 0x60 DUP4 ADD PUSH2 0x320 JUMP JUMPDEST DUP7 DUP5 ADD MSTORE PUSH2 0x1AF PUSH1 0x80 DUP4 ADD PUSH2 0x334 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x1C0 PUSH1 0xA0 DUP4 ADD PUSH2 0x334 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x1D1 PUSH1 0xC0 DUP4 ADD PUSH2 0x348 JUMP JUMPDEST SWAP2 DUP3 PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x1E4 PUSH1 0xE0 DUP3 ADD PUSH2 0x348 JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE ADD MLOAD DUP1 PUSH0 SIGNEXTEND DUP2 SUB PUSH2 0x28A JUMPI PUSH1 0xE0 PUSH1 0xFF SWAP4 ADD MSTORE AND PUSH1 0x8 SUB PUSH1 0xFF DUP2 GT PUSH2 0x276 JUMPI PUSH1 0xFF AND PUSH1 0x4D DUP2 GT PUSH2 0x276 JUMPI PUSH1 0xA EXP DUP1 ISZERO PUSH2 0x262 JUMPI PUSH8 0xDE0B6B3A7640000 DIV PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE MLOAD PUSH2 0x39F SWAP1 DUP2 PUSH2 0x357 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0x80 ADD MSTORE PUSH2 0x202 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xE1 ADD MSTORE PUSH2 0x145 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0x345 ADD MSTORE RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP2 SWAP1 PUSH2 0x299 DUP5 PUSH2 0x320 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 DUP4 SWAP1 PUSH2 0x185 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x1870604D PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP3 PUSH2 0xA0 JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x2A6 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x2A6 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST MLOAD SWAP1 PUSH1 0xFF DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x295D3EE8 EQ PUSH2 0x30D JUMPI POP DUP2 PUSH4 0x679AEFCE EQ PUSH2 0x105 JUMPI POP DUP1 PUSH4 0x81BFA5D1 EQ PUSH2 0xA7 JUMPI PUSH4 0xA747D56F EQ PUSH2 0x4C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP3 DUP4 DUP2 ADD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE DUP5 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP2 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2AC JUMPI DUP5 MSTORE MLOAD PUSH0 SWAP2 DUP3 SWAP2 SWAP1 PUSH2 0x808 GAS STATICCALL RETURNDATASIZE ISZERO PUSH2 0x304 JUMPI RETURNDATASIZE DUP3 DUP2 GT PUSH2 0x2D8 JUMPI DUP4 MLOAD SWAP3 PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP5 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x2AC JUMPI DUP5 MSTORE DUP3 MSTORE RETURNDATASIZE PUSH0 DUP7 DUP5 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x285 JUMPI DUP4 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xA3 JUMPI DUP4 ADD MLOAD SWAP2 DUP3 ISZERO PUSH2 0x25F JUMPI PUSH32 0x0 DUP1 DUP5 MUL SWAP4 DUP5 DIV SUB PUSH2 0x233 JUMPI POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x44526C2400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH32 0x79827DF500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP2 POP PUSH2 0x1E5 JUMP JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 ADDMOD 0xCF PUSH8 0x4357DEC88CA14336 COINBASE 0xCB 0x21 0xE1 LOG2 DUP12 DUP6 0x4E 0xDA 0xCB ORIGIN SWAP6 0xCC 0xC9 0x22 POP 0xB8 0x2C LOG4 XOR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"806:1640:79:-:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;1116:22:97;;;;806:1640:79;;;;797:42:97;;1116:22;;;806:1640:79;;;;;;;;;;;;;;;;;;-1:-1:-1;806:1640:79;;;;;1075:64:97;;797:42;1075:64;;;797:42;;;;;;;;;:::i;:::-;806:1640:79;;;;;;;:::i;:::-;797:42:97;;;-1:-1:-1;797:42:97;;;;;;1149:81;;797:42;;1273:33;;;;;;797:42;;;;;;;;1273:33;;;797:42;;;;;;;;;;;;;;;;;;;806:1640:79;;;;;;;;;;;;;;;;;797:42:97;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;806:1640:79;;;;;;;:::i;:::-;797:42:97;;;;;;;;;;;;;-1:-1:-1;797:42:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;806:1640:79;;;797:42:97;806:1640:79;797:42:97;;;806:1640:79;;:::i;:::-;797:42:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;1323:20;797:42;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;1323:20;797:42;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;797:42:97;;;;;;806:1640:79;797:42:97;;;806:1640:79;1697:1;806:1640;;;;;;;;;;;;;;;;;;;1682:4;806:1640;797:42:97;1659:54:79;1323:20:97;1724:22:79;797:42:97;1756:24:79;806:1640;;;;;;;797:42:97;806:1640:79;;;;;;;;;;1323:20:97;806:1640:79;;;;;;;;;;797:42:97;806:1640:79;;;;;;;;;;-1:-1:-1;806:1640:79;;;;;-1:-1:-1;806:1640:79;;;;;-1:-1:-1;806:1640:79;;;;;-1:-1:-1;806:1640:79;797:42:97;-1:-1:-1;797:42:97;;;;;;;;:::i;:::-;;;;;;;;;;;;806:1640:79;;;-1:-1:-1;806:1640:79;;;;;-1:-1:-1;806:1640:79;1149:81:97;1192:27;;;-1:-1:-1;1192:27:97;;-1:-1:-1;1192:27:97;797:42;;;;;806:1640:79;;;;;-1:-1:-1;;806:1640:79;;;;-1:-1:-1;;;;;806:1640:79;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;797:42:97:-;-1:-1:-1;;;;;797:42:97;;;;806:1640:79;;-1:-1:-1;;806:1640:79;797:42:97;;;:::o;:::-;;;-1:-1:-1;;;;;797:42:97;;;;;;:::o;:::-;;;-1:-1:-1;;;;;797:42:97;;;;;;:::o;:::-;;806:1640:79;;;;797:42:97;;;;:::o"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{"19862":[{"length":32,"start":128},{"length":32,"start":514}],"19864":[{"length":32,"start":225},{"length":32,"start":325}],"19866":[{"length":32,"start":837}]},"linkReferences":{},"object":"6080604090808252600480361015610015575f80fd5b5f3560e01c918263295d3ee81461030d57508163679aefce146101055750806381bfa5d1146100a75763a747d56f1461004c575f80fd5b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a357602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5f80fd5b50346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a3576020905163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35781519160209283810163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681528482528282019167ffffffffffffffff92818110848211176102ac578452515f918291906108085afa3d15610304573d8281116102d857835192601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168401908111848210176102ac57845282523d5f8684013e5b156102855783818051810103126100a35783015191821561025f577f000000000000000000000000000000000000000000000000000000000000000080840293840403610233575051908152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f44526c24000000000000000000000000000000000000000000000000000000005f525ffd5b827f79827df5000000000000000000000000000000000000000000000000000000005f525ffd5b6041867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b6041857f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b606091506101e5565b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35760209063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f3fea26469706673582212202408cf674357dec88ca1433641cb21e1a28b854edacb3295ccc92250b82ca41864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x295D3EE8 EQ PUSH2 0x30D JUMPI POP DUP2 PUSH4 0x679AEFCE EQ PUSH2 0x105 JUMPI POP DUP1 PUSH4 0x81BFA5D1 EQ PUSH2 0xA7 JUMPI PUSH4 0xA747D56F EQ PUSH2 0x4C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP3 DUP4 DUP2 ADD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE DUP5 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP2 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2AC JUMPI DUP5 MSTORE MLOAD PUSH0 SWAP2 DUP3 SWAP2 SWAP1 PUSH2 0x808 GAS STATICCALL RETURNDATASIZE ISZERO PUSH2 0x304 JUMPI RETURNDATASIZE DUP3 DUP2 GT PUSH2 0x2D8 JUMPI DUP4 MLOAD SWAP3 PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP5 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x2AC JUMPI DUP5 MSTORE DUP3 MSTORE RETURNDATASIZE PUSH0 DUP7 DUP5 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x285 JUMPI DUP4 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xA3 JUMPI DUP4 ADD MLOAD SWAP2 DUP3 ISZERO PUSH2 0x25F JUMPI PUSH32 0x0 DUP1 DUP5 MUL SWAP4 DUP5 DIV SUB PUSH2 0x233 JUMPI POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x44526C2400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH32 0x79827DF500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP2 POP PUSH2 0x1E5 JUMP JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 ADDMOD 0xCF PUSH8 0x4357DEC88CA14336 COINBASE 0xCB 0x21 0xE1 LOG2 DUP12 DUP6 0x4E 0xDA 0xCB ORIGIN SWAP6 0xCC 0xC9 0x22 POP 0xB8 0x2C LOG4 XOR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"806:1640:79:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;863:21:96;;806:1640:79;863:21:96;;;806:1640:79;;;;;;;;;;;;;;;;;;;;;1918:20;806:1640;;;;;;;;;;;;;;;;;;;;;;;2204:10;806:1640;;;;;;;;;;;;;;;;;;;863:21:96;;;;;;806:1640:79;2377:10;806:1640;;;863:21:96;;;463:42;;;;;;;;;;;;;;;;;822:63;806:1640:79;;;;822:63:96;463:42;822:63;;463:42;;;;;;;;;;806:1640:79;;;463:42:96;;;863:21;463:42;;;;;;;;;;;;;;;;;;;;;;806:1640:79;463:42:96;;;;;;895:81;;463:42;;;;1001:37;;463:42;;;;1001:37;;463:42;1052:10;;;1048:65;;2417:20:79;806:1640;;;;;;;;;;;;;;;;;;;;;;;;;1048:65:96;1085:17;806:1640:79;1085:17:96;806:1640:79;1085:17:96;895:81;938:27;;806:1640:79;938:27:96;806:1640:79;938:27:96;463:42;;;;806:1640:79;463:42:96;;;806:1640:79;463:42:96;;;;;806:1640:79;463:42:96;;;806:1640:79;463:42:96;;;;-1:-1:-1;463:42:96;;806:1640:79;;;;;;;;;;;;2066:11;806:1640;2066:11;806:1640;;;"},"methodIdentifiers":{"getPairIndex()":"81bfa5d1","getRate()":"679aefce","getSpotPriceMultiplier()":"a747d56f","getTokenIndex()":"295d3ee8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"SpotPriceIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SpotPricePrecompileFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenInfoPrecompileFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"getPairIndex\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSpotPriceMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenIndex\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"HyperEVM has precompiles that allow to fetch the spot price of a token (in terms of USD or other tokens). This contract uses the spot price and the token info precompiles to return the rate of a token on-chain, scaled with 18 decimals (compatible with the Vault).\",\"kind\":\"dev\",\"methods\":{\"getPairIndex()\":{\"details\":\"Hypercore has an index that identifies a pair of tokens to fetch the spot price.\",\"returns\":{\"_0\":\"pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\"}},\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"_0\":\"The current token rate\"}},\"getSpotPriceMultiplier()\":{\"details\":\"Hypercore returns the spot price with a different number of decimals for each token. So, to make this rate provider compatible with the vault, we need to scale the spot price to 18 decimals using this multiplier.\",\"returns\":{\"_0\":\"The spot price multiplier\"}},\"getTokenIndex()\":{\"returns\":{\"_0\":\"tokenIndex The index of the token on the Hyperliquid public API\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SpotPriceIsZero()\":[{\"notice\":\"The spot price is zero.\"}],\"SpotPricePrecompileFailed()\":[{\"notice\":\"The precompile had an error while fetching the spot price.\"}],\"TokenInfoPrecompileFailed()\":[{\"notice\":\"The precompile had an error while fetching the token info.\"}]},\"kind\":\"user\",\"methods\":{\"getPairIndex()\":{\"notice\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API.\"},\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"},\"getSpotPriceMultiplier()\":{\"notice\":\"The spot price multiplier.\"},\"getTokenIndex()\":{\"notice\":\"The index of the token on the Hyperliquid public API.\"}},\"notice\":\"A rate provider for the HyperEVM.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/HyperEVMRateProvider.sol\":\"HyperEVMRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\":{\"keccak256\":\"0xa2b797f83f03ad80f6512aecc2c1aed8d8aac3ffe968e0f696ec98ec4c200cd5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93ec4d5a140fed3f7885318e2816d2c498ec44730a320d491d47c990660bc268\",\"dweb:/ipfs/QmPK2pHX4dEYf77K6vyT1LMU83neZP5xe5AzcBsv7oJoLm\"]},\"contracts/HyperEVMRateProvider.sol\":{\"keccak256\":\"0x8946f432e7337d4db52606d91f60b1adb65648473b8fb7354a9266da5543bd0e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8abb5a40dd0a5d62be1022dd58c35b05521751e79c26f0f96c9e986857b0a0e8\",\"dweb:/ipfs/QmXh6BeSz1W8XmuKyo1TdTBHDxnTZqHSxTRtpcrE7fjwBz\"]},\"contracts/utils/HyperSpotPricePrecompile.sol\":{\"keccak256\":\"0x956b7c8f826704431ea1d94bec623d2c5b8b34442365f0b249f3a2c25c2c6c54\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3a70d1a6c57fc7cf290d9b4684c5740166cc04bc2a32aa17421edbc7f844d0ae\",\"dweb:/ipfs/QmXAypsKxGf5YAxWUcMeSHkXFfcDZv8WuZWS44HNf8wMZB\"]},\"contracts/utils/HyperTokenInfoPrecompile.sol\":{\"keccak256\":\"0xea3b203aa3635705f168c210f2d82b6fda6c63a01acb79f78111302b54fb2c8f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f96d680a8cb86611a2a2a55e675230d9fc397e5e5b875877e62055fb814d929\",\"dweb:/ipfs/Qme2iitvGmf1yBndr1n2yUE8sB1G54HQQqsCWg5HL5NNvZ\"]}},\"version\":1}"}},"contracts/HyperEVMRateProviderFactory.sol":{"HyperEVMRateProviderFactory":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"string","name":"factoryVersion","type":"string"},{"internalType":"uint256","name":"rateProviderVersion","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"},{"internalType":"address","name":"rateProvider","type":"address"}],"name":"RateProviderAlreadyExists","type":"error"},{"inputs":[],"name":"RateProviderFactoryIsDisabled","type":"error"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"name":"RateProviderNotFound","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"rateProvider","type":"address"}],"name":"RateProviderCreated","type":"event"},{"anonymous":false,"inputs":[],"name":"RateProviderFactoryDisabled","type":"event"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"name":"create","outputs":[{"internalType":"contract IHyperEVMRateProvider","name":"rateProvider","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"name":"getRateProvider","outputs":[{"internalType":"contract IHyperEVMRateProvider","name":"rateProvider","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRateProviderVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IHyperEVMRateProvider","name":"rateProvider","type":"address"}],"name":"isRateProviderFromFactory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"allocate_memory":{"entryPoint":568,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"60e060405234610234576113878038038061001981610238565b9283398101906060818303126102345780516001600160a01b0381169290838103610234576020838101516001600160401b03939192919084811161023457850191601f928284820112156102345780519686881161021157601f19976100858682018a168801610238565b948186528782850101116102345786815f9282604096018389015e8601015201519630608052156102255760a0528051938411610211575f54926001938481811c91168015610207575b828210146101f3578381116101b0575b50809285116001146101505750839450908392915f94610145575b50501b915f199060031b1c1916175f555b60c052604051611129908161025e823960805181610924015260a05181818160d70152818161021301526106a7015260c051816106010152f35b015192505f806100fa565b9294849081165f8052845f20945f905b88838310610196575050501061017e575b505050811b015f5561010b565b01515f1960f88460031b161c191690555f8080610171565b858701518855909601959485019487935090810190610160565b5f8052815f208480880160051c8201928489106101ea575b0160051c019085905b8281106101df5750506100df565b5f81550185906101d1565b925081926101c8565b634e487b7160e01b5f52602260045260245ffd5b90607f16906100cf565b634e487b7160e01b5f52604160045260245ffd5b630647140b60e51b5f5260045ffd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176102115760405256fe608060409080825260049081361015610016575f80fd5b5f358060e01c91826319912f711461081c575081632f2770db1461062457508063381c7a4f146105ea57806354fd4d501461043b578063568acb7914610286578063851c1bb3146102375780638d928af8146101e757806399b8113f146101505763aaabadc514610085575f80fd5b3461014c575f60031936011261014c5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561014257926020935f93610113575b505191168152f35b610134919350843d861161013b575b61012c818361088b565b81019061096f565b915f61010b565b503d610122565b83513d5f823e3d90fd5b5f80fd5b503461014c578160031936011261014c57610169610865565b91610172610878565b61017c81856109cf565b5f52600260205273ffffffffffffffffffffffffffffffffffffffff825f2054169283156101ae576020848451908152f35b8492507fdc120e77000000000000000000000000000000000000000000000000000000005f5263ffffffff80931690521660245260445ffd5b823461014c575f60031936011261014c576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461014c57602060031936011261014c5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361014c5761027f6020926108f9565b9051908152f35b50903461014c578060031936011261014c576102a0610865565b906102a9610878565b916102b261099b565b6102bc83826109cf565b90815f52600260205273ffffffffffffffffffffffffffffffffffffffff9485845f205416806103ff57508351906106f68083019183831067ffffffffffffffff8411176103d3575086848493610329936109fe863963ffffffff91821681529116602082015260400190565b03905ff094851561014257602095169283925f5260028652805f20837fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055825f5260038652805f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905563ffffffff809151951691167fd2dc19a986df7300887ed27436ca60160b58dcbcc7a657427d35cbf60154ba025f80a48152f35b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b8286837ff4c64ee1000000000000000000000000000000000000000000000000000000005f5263ffffffff80931690521660245260445260645ffd5b50903461014c575f60031936011261014c5780515f5f549060018260011c90600184169384156105e0575b60209788841086146105b457509187918694938286528386019690815f1461055c57506001146104e8575b505050916104c4601f927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe094038561088b565b845195869481865251918280928701528686015e5f85828601015201168101030190f35b5f8080529293507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106105465750505082010185827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610491565b8054888501860152879550928401928101610511565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687525050151560051b830101905085827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610491565b6022907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b91607f1691610466565b823461014c575f60031936011261014c57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b8391503461014c575f60031936011261014c577fffffffff0000000000000000000000000000000000000000000000000000000061066291166108f9565b73ffffffffffffffffffffffffffffffffffffffff9082517faaabadc500000000000000000000000000000000000000000000000000000000815260209182828781877f0000000000000000000000000000000000000000000000000000000000000000165afa91821561081257908392915f926107f0575b50606490865195869384927f9be2a8840000000000000000000000000000000000000000000000000000000084528a840152336024840152306044840152165afa9283156107e757505f926107b0575b50501561078a5761073a61099b565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416176001557f1e8641758c70961d246979e3c073388b65a37bad9cc604ec5511e7200e7d144b5f80a1005b7f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90809250813d83116107e0575b6107c7818361088b565b8101031261014c5751801515810361014c57828061072b565b503d6107bd565b513d5f823e3d90fd5b606491925061080b90843d861161013b5761012c818361088b565b91906106db565b85513d5f823e3d90fd5b8490843461014c57602060031936011261014c573573ffffffffffffffffffffffffffffffffffffffff811680910361014c5760209260ff915f52600384525f20541615158152f35b6004359063ffffffff8216820361014c57565b6024359063ffffffff8216820361014c57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176108cc57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176108cc5760405251902090565b9081602091031261014c575173ffffffffffffffffffffffffffffffffffffffff8116810361014c5790565b60ff600154166109a757565b7f42fb89b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b6040805163ffffffff92831660208201908152939092168282015281526109f760608261088b565b5190209056fe60e06040908082523461028a5781816106f6803803809161002082856102d1565b83398101031261028a57610033816102f4565b9061004160208092016102f4565b908351908082019163ffffffff8516835281815285810160018060401b0393828210858311176102a6575f9283928952519061080c5afa913d156102c9573d9261008a84610305565b93610097885195866102d1565b84523d5f8486013e5b156102ba57825183019082820193838184031261028a57838101519082821161028a5701928392610100938491031261028a57875194838601868110848211176102a65789528185015183811161028a57850181603f8201121561028a578281015161010b81610305565b916101188c5193846102d1565b818352838c838301011161028a57815f928d8793018386015e8301015286528885015183811161028a57850181603f8201121561028a57828101519384116102a6578360051b908a519461016e858401876102d1565b85528a8486019282010192831161028a578a849101915b83831061028e575050505084015261019f60608301610320565b868401526101af60808301610334565b60608401526101c060a08301610334565b60808401526101d160c08301610348565b918260a08501526101e460e08201610348565b60c08501520151805f0b810361028a5760e060ff9301521660080360ff81116102765760ff16604d811161027657600a0a801561026257670de0b6b3a76400000460805260a05260c0525161039f9081610357823960805181818160800152610202015260a05181818160e10152610145015260c051816103450152f35b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b819061029984610320565b8152019101908390610185565b634e487b7160e01b5f52604160045260245ffd5b631870604d60e21b5f5260045ffd5b6060926100a0565b601f909101601f19168101906001600160401b038211908210176102a657604052565b519063ffffffff8216820361028a57565b6001600160401b0381116102a657601f01601f191660200190565b51906001600160401b038216820361028a57565b51906001600160a01b038216820361028a57565b519060ff8216820361028a5756fe6080604090808252600480361015610015575f80fd5b5f3560e01c918263295d3ee81461030d57508163679aefce146101055750806381bfa5d1146100a75763a747d56f1461004c575f80fd5b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a357602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5f80fd5b50346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a3576020905163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35781519160209283810163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681528482528282019167ffffffffffffffff92818110848211176102ac578452515f918291906108085afa3d15610304573d8281116102d857835192601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168401908111848210176102ac57845282523d5f8684013e5b156102855783818051810103126100a35783015191821561025f577f000000000000000000000000000000000000000000000000000000000000000080840293840403610233575051908152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f44526c24000000000000000000000000000000000000000000000000000000005f525ffd5b827f79827df5000000000000000000000000000000000000000000000000000000005f525ffd5b6041867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b6041857f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b606091506101e5565b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35760209063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f3fea26469706673582212202408cf674357dec88ca1433641cb21e1a28b854edacb3295ccc92250b82ca41864736f6c634300081b0033a2646970667358221220aa8a7fceeb1c17bb3a1d8defc7d21eaa36f1ddbefd69587f79db9ef4b8b303cc64736f6c634300081b0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x234 JUMPI PUSH2 0x1387 DUP1 CODESIZE SUB DUP1 PUSH2 0x19 DUP2 PUSH2 0x238 JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD SWAP1 PUSH1 0x60 DUP2 DUP4 SUB SLT PUSH2 0x234 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP3 SWAP1 DUP4 DUP2 SUB PUSH2 0x234 JUMPI PUSH1 0x20 DUP4 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP4 SWAP2 SWAP3 SWAP2 SWAP1 DUP5 DUP2 GT PUSH2 0x234 JUMPI DUP6 ADD SWAP2 PUSH1 0x1F SWAP3 DUP3 DUP5 DUP3 ADD SLT ISZERO PUSH2 0x234 JUMPI DUP1 MLOAD SWAP7 DUP7 DUP9 GT PUSH2 0x211 JUMPI PUSH1 0x1F NOT SWAP8 PUSH2 0x85 DUP7 DUP3 ADD DUP11 AND DUP9 ADD PUSH2 0x238 JUMP JUMPDEST SWAP5 DUP2 DUP7 MSTORE DUP8 DUP3 DUP6 ADD ADD GT PUSH2 0x234 JUMPI DUP7 DUP2 PUSH0 SWAP3 DUP3 PUSH1 0x40 SWAP7 ADD DUP4 DUP10 ADD MCOPY DUP7 ADD ADD MSTORE ADD MLOAD SWAP7 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0x225 JUMPI PUSH1 0xA0 MSTORE DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x211 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x207 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x1F3 JUMPI DUP4 DUP2 GT PUSH2 0x1B0 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x150 JUMPI POP DUP4 SWAP5 POP SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP5 PUSH2 0x145 JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST PUSH1 0xC0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x1129 SWAP1 DUP2 PUSH2 0x25E DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x924 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xD7 ADD MSTORE DUP2 DUP2 PUSH2 0x213 ADD MSTORE PUSH2 0x6A7 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0x601 ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0xFA JUMP JUMPDEST SWAP3 SWAP5 DUP5 SWAP1 DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x196 JUMPI POP POP POP LT PUSH2 0x17E JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0x10B JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x171 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x160 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x1EA JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP6 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x1DF JUMPI POP POP PUSH2 0xDF JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x1D1 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x1C8 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xCF JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x211 JUMPI PUSH1 0x40 MSTORE JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x19912F71 EQ PUSH2 0x81C JUMPI POP DUP2 PUSH4 0x2F2770DB EQ PUSH2 0x624 JUMPI POP DUP1 PUSH4 0x381C7A4F EQ PUSH2 0x5EA JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x43B JUMPI DUP1 PUSH4 0x568ACB79 EQ PUSH2 0x286 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x237 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x1E7 JUMPI DUP1 PUSH4 0x99B8113F EQ PUSH2 0x150 JUMPI PUSH4 0xAAABADC5 EQ PUSH2 0x85 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x142 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x113 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x134 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x13B JUMPI JUMPDEST PUSH2 0x12C DUP2 DUP4 PUSH2 0x88B JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x96F JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x10B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x122 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x14C JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH2 0x169 PUSH2 0x865 JUMP JUMPDEST SWAP2 PUSH2 0x172 PUSH2 0x878 JUMP JUMPDEST PUSH2 0x17C DUP2 DUP6 PUSH2 0x9CF JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SLOAD AND SWAP3 DUP4 ISZERO PUSH2 0x1AE JUMPI PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP5 SWAP3 POP PUSH32 0xDC120E7700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH4 0xFFFFFFFF DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x14C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x14C JUMPI PUSH2 0x27F PUSH1 0x20 SWAP3 PUSH2 0x8F9 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x14C JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH2 0x2A0 PUSH2 0x865 JUMP JUMPDEST SWAP1 PUSH2 0x2A9 PUSH2 0x878 JUMP JUMPDEST SWAP2 PUSH2 0x2B2 PUSH2 0x99B JUMP JUMPDEST PUSH2 0x2BC DUP4 DUP3 PUSH2 0x9CF JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP5 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x3FF JUMPI POP DUP4 MLOAD SWAP1 PUSH2 0x6F6 DUP1 DUP4 ADD SWAP2 DUP4 DUP4 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT OR PUSH2 0x3D3 JUMPI POP DUP7 DUP5 DUP5 SWAP4 PUSH2 0x329 SWAP4 PUSH2 0x9FE DUP7 CODECOPY PUSH4 0xFFFFFFFF SWAP2 DUP3 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 PUSH0 CREATE SWAP5 DUP6 ISZERO PUSH2 0x142 JUMPI PUSH1 0x20 SWAP6 AND SWAP3 DUP4 SWAP3 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE DUP1 PUSH0 KECCAK256 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP3 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE DUP1 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH4 0xFFFFFFFF DUP1 SWAP2 MLOAD SWAP6 AND SWAP2 AND PUSH32 0xD2DC19A986DF7300887ED27436CA60160B58DCBCC7A657427D35CBF60154BA02 PUSH0 DUP1 LOG4 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP7 DUP4 PUSH32 0xF4C64EE100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH4 0xFFFFFFFF DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI DUP1 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP1 PUSH1 0x1 DUP5 AND SWAP4 DUP5 ISZERO PUSH2 0x5E0 JUMPI JUMPDEST PUSH1 0x20 SWAP8 DUP9 DUP5 LT DUP7 EQ PUSH2 0x5B4 JUMPI POP SWAP2 DUP8 SWAP2 DUP7 SWAP5 SWAP4 DUP3 DUP7 MSTORE DUP4 DUP7 ADD SWAP7 SWAP1 DUP2 PUSH0 EQ PUSH2 0x55C JUMPI POP PUSH1 0x1 EQ PUSH2 0x4E8 JUMPI JUMPDEST POP POP POP SWAP2 PUSH2 0x4C4 PUSH1 0x1F SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP5 SUB DUP6 PUSH2 0x88B JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH0 DUP1 DUP1 MSTORE SWAP3 SWAP4 POP PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x546 JUMPI POP POP POP DUP3 ADD ADD DUP6 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x491 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP7 ADD MSTORE DUP8 SWAP6 POP SWAP3 DUP5 ADD SWAP3 DUP2 ADD PUSH2 0x511 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP6 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x491 JUMP JUMPDEST PUSH1 0x22 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x466 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST DUP4 SWAP2 POP CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x662 SWAP2 AND PUSH2 0x8F9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP3 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 DUP3 DUP8 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x812 JUMPI SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP3 PUSH2 0x7F0 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP11 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x7E7 JUMPI POP PUSH0 SWAP3 PUSH2 0x7B0 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x78A JUMPI PUSH2 0x73A PUSH2 0x99B JUMP JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND OR PUSH1 0x1 SSTORE PUSH32 0x1E8641758C70961D246979E3C073388B65A37BAD9CC604EC5511E7200E7D144B PUSH0 DUP1 LOG1 STOP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x7E0 JUMPI JUMPDEST PUSH2 0x7C7 DUP2 DUP4 PUSH2 0x88B JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x14C JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x14C JUMPI DUP3 DUP1 PUSH2 0x72B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x7BD JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x80B SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x13B JUMPI PUSH2 0x12C DUP2 DUP4 PUSH2 0x88B JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x6DB JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 SWAP1 DUP5 CALLVALUE PUSH2 0x14C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x14C JUMPI PUSH1 0x20 SWAP3 PUSH1 0xFF SWAP2 PUSH0 MSTORE PUSH1 0x3 DUP5 MSTORE PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x14C JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x14C JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x8CC JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x8CC JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x14C JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x14C JUMPI SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 SLOAD AND PUSH2 0x9A7 JUMPI JUMP JUMPDEST PUSH32 0x42FB89B800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP3 DUP4 AND PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE SWAP4 SWAP1 SWAP3 AND DUP3 DUP3 ADD MSTORE DUP2 MSTORE PUSH2 0x9F7 PUSH1 0x60 DUP3 PUSH2 0x88B JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP INVALID PUSH1 0xE0 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x28A JUMPI DUP2 DUP2 PUSH2 0x6F6 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x20 DUP3 DUP6 PUSH2 0x2D1 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x28A JUMPI PUSH2 0x33 DUP2 PUSH2 0x2F4 JUMP JUMPDEST SWAP1 PUSH2 0x41 PUSH1 0x20 DUP1 SWAP3 ADD PUSH2 0x2F4 JUMP JUMPDEST SWAP1 DUP4 MLOAD SWAP1 DUP1 DUP3 ADD SWAP2 PUSH4 0xFFFFFFFF DUP6 AND DUP4 MSTORE DUP2 DUP2 MSTORE DUP6 DUP2 ADD PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB SWAP4 DUP3 DUP3 LT DUP6 DUP4 GT OR PUSH2 0x2A6 JUMPI PUSH0 SWAP3 DUP4 SWAP3 DUP10 MSTORE MLOAD SWAP1 PUSH2 0x80C GAS STATICCALL SWAP2 RETURNDATASIZE ISZERO PUSH2 0x2C9 JUMPI RETURNDATASIZE SWAP3 PUSH2 0x8A DUP5 PUSH2 0x305 JUMP JUMPDEST SWAP4 PUSH2 0x97 DUP9 MLOAD SWAP6 DUP7 PUSH2 0x2D1 JUMP JUMPDEST DUP5 MSTORE RETURNDATASIZE PUSH0 DUP5 DUP7 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x2BA JUMPI DUP3 MLOAD DUP4 ADD SWAP1 DUP3 DUP3 ADD SWAP4 DUP4 DUP2 DUP5 SUB SLT PUSH2 0x28A JUMPI DUP4 DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x28A JUMPI ADD SWAP3 DUP4 SWAP3 PUSH2 0x100 SWAP4 DUP5 SWAP2 SUB SLT PUSH2 0x28A JUMPI DUP8 MLOAD SWAP5 DUP4 DUP7 ADD DUP7 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2A6 JUMPI DUP10 MSTORE DUP2 DUP6 ADD MLOAD DUP4 DUP2 GT PUSH2 0x28A JUMPI DUP6 ADD DUP2 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x28A JUMPI DUP3 DUP2 ADD MLOAD PUSH2 0x10B DUP2 PUSH2 0x305 JUMP JUMPDEST SWAP2 PUSH2 0x118 DUP13 MLOAD SWAP4 DUP5 PUSH2 0x2D1 JUMP JUMPDEST DUP2 DUP4 MSTORE DUP4 DUP13 DUP4 DUP4 ADD ADD GT PUSH2 0x28A JUMPI DUP2 PUSH0 SWAP3 DUP14 DUP8 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE DUP7 MSTORE DUP9 DUP6 ADD MLOAD DUP4 DUP2 GT PUSH2 0x28A JUMPI DUP6 ADD DUP2 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x28A JUMPI DUP3 DUP2 ADD MLOAD SWAP4 DUP5 GT PUSH2 0x2A6 JUMPI DUP4 PUSH1 0x5 SHL SWAP1 DUP11 MLOAD SWAP5 PUSH2 0x16E DUP6 DUP5 ADD DUP8 PUSH2 0x2D1 JUMP JUMPDEST DUP6 MSTORE DUP11 DUP5 DUP7 ADD SWAP3 DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x28A JUMPI DUP11 DUP5 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x28E JUMPI POP POP POP POP DUP5 ADD MSTORE PUSH2 0x19F PUSH1 0x60 DUP4 ADD PUSH2 0x320 JUMP JUMPDEST DUP7 DUP5 ADD MSTORE PUSH2 0x1AF PUSH1 0x80 DUP4 ADD PUSH2 0x334 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x1C0 PUSH1 0xA0 DUP4 ADD PUSH2 0x334 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x1D1 PUSH1 0xC0 DUP4 ADD PUSH2 0x348 JUMP JUMPDEST SWAP2 DUP3 PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x1E4 PUSH1 0xE0 DUP3 ADD PUSH2 0x348 JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE ADD MLOAD DUP1 PUSH0 SIGNEXTEND DUP2 SUB PUSH2 0x28A JUMPI PUSH1 0xE0 PUSH1 0xFF SWAP4 ADD MSTORE AND PUSH1 0x8 SUB PUSH1 0xFF DUP2 GT PUSH2 0x276 JUMPI PUSH1 0xFF AND PUSH1 0x4D DUP2 GT PUSH2 0x276 JUMPI PUSH1 0xA EXP DUP1 ISZERO PUSH2 0x262 JUMPI PUSH8 0xDE0B6B3A7640000 DIV PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE MLOAD PUSH2 0x39F SWAP1 DUP2 PUSH2 0x357 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0x80 ADD MSTORE PUSH2 0x202 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xE1 ADD MSTORE PUSH2 0x145 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0x345 ADD MSTORE RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP2 SWAP1 PUSH2 0x299 DUP5 PUSH2 0x320 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 DUP4 SWAP1 PUSH2 0x185 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x1870604D PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP3 PUSH2 0xA0 JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x2A6 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x2A6 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST MLOAD SWAP1 PUSH1 0xFF DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x295D3EE8 EQ PUSH2 0x30D JUMPI POP DUP2 PUSH4 0x679AEFCE EQ PUSH2 0x105 JUMPI POP DUP1 PUSH4 0x81BFA5D1 EQ PUSH2 0xA7 JUMPI PUSH4 0xA747D56F EQ PUSH2 0x4C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP3 DUP4 DUP2 ADD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE DUP5 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP2 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2AC JUMPI DUP5 MSTORE MLOAD PUSH0 SWAP2 DUP3 SWAP2 SWAP1 PUSH2 0x808 GAS STATICCALL RETURNDATASIZE ISZERO PUSH2 0x304 JUMPI RETURNDATASIZE DUP3 DUP2 GT PUSH2 0x2D8 JUMPI DUP4 MLOAD SWAP3 PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP5 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x2AC JUMPI DUP5 MSTORE DUP3 MSTORE RETURNDATASIZE PUSH0 DUP7 DUP5 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x285 JUMPI DUP4 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xA3 JUMPI DUP4 ADD MLOAD SWAP2 DUP3 ISZERO PUSH2 0x25F JUMPI PUSH32 0x0 DUP1 DUP5 MUL SWAP4 DUP5 DIV SUB PUSH2 0x233 JUMPI POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x44526C2400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH32 0x79827DF500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP2 POP PUSH2 0x1E5 JUMP JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 ADDMOD 0xCF PUSH8 0x4357DEC88CA14336 COINBASE 0xCB 0x21 0xE1 LOG2 DUP12 DUP6 0x4E 0xDA 0xCB ORIGIN SWAP6 0xCC 0xC9 0x22 POP 0xB8 0x2C LOG4 XOR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAA DUP11 PUSH32 0xCEEB1C17BB3A1D8DEFC7D21EAA36F1DDBEFD69587F79DB9EF4B8B303CC64736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"759:2835:80:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;759:2835:80;;;;;;;;;;;;;;-1:-1:-1;;;;;759:2835:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;759:2835:80;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;;;922:4:47;;1347:46:33;;943:28:45;939:79;;1028:14;;759:2835:80;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;1339:42;;759:2835;;;;;;;;1347:46:33;759:2835:80;;;;;1028:14:45;759:2835:80;;;;;;;;;;;;;;;1339:42;759:2835;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;-1:-1:-1;759:2835:80;;;-1:-1:-1;759:2835:80;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;-1:-1:-1;759:2835:80;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;-1:-1:-1;759:2835:80;939:79:45;994:13;;;-1:-1:-1;994:13:45;;-1:-1:-1;994:13:45;759:2835:80;-1:-1:-1;759:2835:80;;;;;;;;;-1:-1:-1;;759:2835:80;;;-1:-1:-1;;;;;759:2835:80;;;;;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":2415,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint32":{"entryPoint":2168,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_uint32_4637":{"entryPoint":2149,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_uint32_uint32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":2187,"id":null,"parameterSlots":2,"returnSlots":0},"fun_computeRateProviderId":{"entryPoint":2511,"id":20184,"parameterSlots":2,"returnSlots":1},"fun_ensureEnabled":{"entryPoint":2459,"id":20194,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":2297,"id":4374,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":2340}],"7358":[{"length":32,"start":215},{"length":32,"start":531},{"length":32,"start":1703}],"19970":[{"length":32,"start":1537}]},"linkReferences":{},"object":"608060409080825260049081361015610016575f80fd5b5f358060e01c91826319912f711461081c575081632f2770db1461062457508063381c7a4f146105ea57806354fd4d501461043b578063568acb7914610286578063851c1bb3146102375780638d928af8146101e757806399b8113f146101505763aaabadc514610085575f80fd5b3461014c575f60031936011261014c5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561014257926020935f93610113575b505191168152f35b610134919350843d861161013b575b61012c818361088b565b81019061096f565b915f61010b565b503d610122565b83513d5f823e3d90fd5b5f80fd5b503461014c578160031936011261014c57610169610865565b91610172610878565b61017c81856109cf565b5f52600260205273ffffffffffffffffffffffffffffffffffffffff825f2054169283156101ae576020848451908152f35b8492507fdc120e77000000000000000000000000000000000000000000000000000000005f5263ffffffff80931690521660245260445ffd5b823461014c575f60031936011261014c576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461014c57602060031936011261014c5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361014c5761027f6020926108f9565b9051908152f35b50903461014c578060031936011261014c576102a0610865565b906102a9610878565b916102b261099b565b6102bc83826109cf565b90815f52600260205273ffffffffffffffffffffffffffffffffffffffff9485845f205416806103ff57508351906106f68083019183831067ffffffffffffffff8411176103d3575086848493610329936109fe863963ffffffff91821681529116602082015260400190565b03905ff094851561014257602095169283925f5260028652805f20837fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055825f5260038652805f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905563ffffffff809151951691167fd2dc19a986df7300887ed27436ca60160b58dcbcc7a657427d35cbf60154ba025f80a48152f35b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b8286837ff4c64ee1000000000000000000000000000000000000000000000000000000005f5263ffffffff80931690521660245260445260645ffd5b50903461014c575f60031936011261014c5780515f5f549060018260011c90600184169384156105e0575b60209788841086146105b457509187918694938286528386019690815f1461055c57506001146104e8575b505050916104c4601f927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe094038561088b565b845195869481865251918280928701528686015e5f85828601015201168101030190f35b5f8080529293507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106105465750505082010185827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610491565b8054888501860152879550928401928101610511565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687525050151560051b830101905085827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610491565b6022907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b91607f1691610466565b823461014c575f60031936011261014c57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b8391503461014c575f60031936011261014c577fffffffff0000000000000000000000000000000000000000000000000000000061066291166108f9565b73ffffffffffffffffffffffffffffffffffffffff9082517faaabadc500000000000000000000000000000000000000000000000000000000815260209182828781877f0000000000000000000000000000000000000000000000000000000000000000165afa91821561081257908392915f926107f0575b50606490865195869384927f9be2a8840000000000000000000000000000000000000000000000000000000084528a840152336024840152306044840152165afa9283156107e757505f926107b0575b50501561078a5761073a61099b565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416176001557f1e8641758c70961d246979e3c073388b65a37bad9cc604ec5511e7200e7d144b5f80a1005b7f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90809250813d83116107e0575b6107c7818361088b565b8101031261014c5751801515810361014c57828061072b565b503d6107bd565b513d5f823e3d90fd5b606491925061080b90843d861161013b5761012c818361088b565b91906106db565b85513d5f823e3d90fd5b8490843461014c57602060031936011261014c573573ffffffffffffffffffffffffffffffffffffffff811680910361014c5760209260ff915f52600384525f20541615158152f35b6004359063ffffffff8216820361014c57565b6024359063ffffffff8216820361014c57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176108cc57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176108cc5760405251902090565b9081602091031261014c575173ffffffffffffffffffffffffffffffffffffffff8116810361014c5790565b60ff600154166109a757565b7f42fb89b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b6040805163ffffffff92831660208201908152939092168282015281526109f760608261088b565b5190209056fe60e06040908082523461028a5781816106f6803803809161002082856102d1565b83398101031261028a57610033816102f4565b9061004160208092016102f4565b908351908082019163ffffffff8516835281815285810160018060401b0393828210858311176102a6575f9283928952519061080c5afa913d156102c9573d9261008a84610305565b93610097885195866102d1565b84523d5f8486013e5b156102ba57825183019082820193838184031261028a57838101519082821161028a5701928392610100938491031261028a57875194838601868110848211176102a65789528185015183811161028a57850181603f8201121561028a578281015161010b81610305565b916101188c5193846102d1565b818352838c838301011161028a57815f928d8793018386015e8301015286528885015183811161028a57850181603f8201121561028a57828101519384116102a6578360051b908a519461016e858401876102d1565b85528a8486019282010192831161028a578a849101915b83831061028e575050505084015261019f60608301610320565b868401526101af60808301610334565b60608401526101c060a08301610334565b60808401526101d160c08301610348565b918260a08501526101e460e08201610348565b60c08501520151805f0b810361028a5760e060ff9301521660080360ff81116102765760ff16604d811161027657600a0a801561026257670de0b6b3a76400000460805260a05260c0525161039f9081610357823960805181818160800152610202015260a05181818160e10152610145015260c051816103450152f35b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b819061029984610320565b8152019101908390610185565b634e487b7160e01b5f52604160045260245ffd5b631870604d60e21b5f5260045ffd5b6060926100a0565b601f909101601f19168101906001600160401b038211908210176102a657604052565b519063ffffffff8216820361028a57565b6001600160401b0381116102a657601f01601f191660200190565b51906001600160401b038216820361028a57565b51906001600160a01b038216820361028a57565b519060ff8216820361028a5756fe6080604090808252600480361015610015575f80fd5b5f3560e01c918263295d3ee81461030d57508163679aefce146101055750806381bfa5d1146100a75763a747d56f1461004c575f80fd5b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a357602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5f80fd5b50346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a3576020905163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35781519160209283810163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681528482528282019167ffffffffffffffff92818110848211176102ac578452515f918291906108085afa3d15610304573d8281116102d857835192601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168401908111848210176102ac57845282523d5f8684013e5b156102855783818051810103126100a35783015191821561025f577f000000000000000000000000000000000000000000000000000000000000000080840293840403610233575051908152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f44526c24000000000000000000000000000000000000000000000000000000005f525ffd5b827f79827df5000000000000000000000000000000000000000000000000000000005f525ffd5b6041867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b6041857f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b606091506101e5565b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35760209063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f3fea26469706673582212202408cf674357dec88ca1433641cb21e1a28b854edacb3295ccc92250b82ca41864736f6c634300081b0033a2646970667358221220aa8a7fceeb1c17bb3a1d8defc7d21eaa36f1ddbefd69587f79db9ef4b8b303cc64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x19912F71 EQ PUSH2 0x81C JUMPI POP DUP2 PUSH4 0x2F2770DB EQ PUSH2 0x624 JUMPI POP DUP1 PUSH4 0x381C7A4F EQ PUSH2 0x5EA JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x43B JUMPI DUP1 PUSH4 0x568ACB79 EQ PUSH2 0x286 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x237 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x1E7 JUMPI DUP1 PUSH4 0x99B8113F EQ PUSH2 0x150 JUMPI PUSH4 0xAAABADC5 EQ PUSH2 0x85 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x142 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x113 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x134 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x13B JUMPI JUMPDEST PUSH2 0x12C DUP2 DUP4 PUSH2 0x88B JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x96F JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x10B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x122 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x14C JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH2 0x169 PUSH2 0x865 JUMP JUMPDEST SWAP2 PUSH2 0x172 PUSH2 0x878 JUMP JUMPDEST PUSH2 0x17C DUP2 DUP6 PUSH2 0x9CF JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SLOAD AND SWAP3 DUP4 ISZERO PUSH2 0x1AE JUMPI PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP5 SWAP3 POP PUSH32 0xDC120E7700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH4 0xFFFFFFFF DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x14C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x14C JUMPI PUSH2 0x27F PUSH1 0x20 SWAP3 PUSH2 0x8F9 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x14C JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH2 0x2A0 PUSH2 0x865 JUMP JUMPDEST SWAP1 PUSH2 0x2A9 PUSH2 0x878 JUMP JUMPDEST SWAP2 PUSH2 0x2B2 PUSH2 0x99B JUMP JUMPDEST PUSH2 0x2BC DUP4 DUP3 PUSH2 0x9CF JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP5 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x3FF JUMPI POP DUP4 MLOAD SWAP1 PUSH2 0x6F6 DUP1 DUP4 ADD SWAP2 DUP4 DUP4 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT OR PUSH2 0x3D3 JUMPI POP DUP7 DUP5 DUP5 SWAP4 PUSH2 0x329 SWAP4 PUSH2 0x9FE DUP7 CODECOPY PUSH4 0xFFFFFFFF SWAP2 DUP3 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 PUSH0 CREATE SWAP5 DUP6 ISZERO PUSH2 0x142 JUMPI PUSH1 0x20 SWAP6 AND SWAP3 DUP4 SWAP3 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE DUP1 PUSH0 KECCAK256 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP3 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE DUP1 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH4 0xFFFFFFFF DUP1 SWAP2 MLOAD SWAP6 AND SWAP2 AND PUSH32 0xD2DC19A986DF7300887ED27436CA60160B58DCBCC7A657427D35CBF60154BA02 PUSH0 DUP1 LOG4 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP7 DUP4 PUSH32 0xF4C64EE100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH4 0xFFFFFFFF DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI DUP1 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP1 PUSH1 0x1 DUP5 AND SWAP4 DUP5 ISZERO PUSH2 0x5E0 JUMPI JUMPDEST PUSH1 0x20 SWAP8 DUP9 DUP5 LT DUP7 EQ PUSH2 0x5B4 JUMPI POP SWAP2 DUP8 SWAP2 DUP7 SWAP5 SWAP4 DUP3 DUP7 MSTORE DUP4 DUP7 ADD SWAP7 SWAP1 DUP2 PUSH0 EQ PUSH2 0x55C JUMPI POP PUSH1 0x1 EQ PUSH2 0x4E8 JUMPI JUMPDEST POP POP POP SWAP2 PUSH2 0x4C4 PUSH1 0x1F SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP5 SUB DUP6 PUSH2 0x88B JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH0 DUP1 DUP1 MSTORE SWAP3 SWAP4 POP PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x546 JUMPI POP POP POP DUP3 ADD ADD DUP6 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x491 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP7 ADD MSTORE DUP8 SWAP6 POP SWAP3 DUP5 ADD SWAP3 DUP2 ADD PUSH2 0x511 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP6 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x491 JUMP JUMPDEST PUSH1 0x22 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x466 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST DUP4 SWAP2 POP CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x662 SWAP2 AND PUSH2 0x8F9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP3 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 DUP3 DUP8 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x812 JUMPI SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP3 PUSH2 0x7F0 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP11 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x7E7 JUMPI POP PUSH0 SWAP3 PUSH2 0x7B0 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x78A JUMPI PUSH2 0x73A PUSH2 0x99B JUMP JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND OR PUSH1 0x1 SSTORE PUSH32 0x1E8641758C70961D246979E3C073388B65A37BAD9CC604EC5511E7200E7D144B PUSH0 DUP1 LOG1 STOP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x7E0 JUMPI JUMPDEST PUSH2 0x7C7 DUP2 DUP4 PUSH2 0x88B JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x14C JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x14C JUMPI DUP3 DUP1 PUSH2 0x72B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x7BD JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x80B SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x13B JUMPI PUSH2 0x12C DUP2 DUP4 PUSH2 0x88B JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x6DB JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 SWAP1 DUP5 CALLVALUE PUSH2 0x14C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x14C JUMPI PUSH1 0x20 SWAP3 PUSH1 0xFF SWAP2 PUSH0 MSTORE PUSH1 0x3 DUP5 MSTORE PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x14C JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x14C JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x8CC JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x8CC JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x14C JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x14C JUMPI SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 SLOAD AND PUSH2 0x9A7 JUMPI JUMP JUMPDEST PUSH32 0x42FB89B800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP3 DUP4 AND PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE SWAP4 SWAP1 SWAP3 AND DUP3 DUP3 ADD MSTORE DUP2 MSTORE PUSH2 0x9F7 PUSH1 0x60 DUP3 PUSH2 0x88B JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP INVALID PUSH1 0xE0 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x28A JUMPI DUP2 DUP2 PUSH2 0x6F6 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x20 DUP3 DUP6 PUSH2 0x2D1 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x28A JUMPI PUSH2 0x33 DUP2 PUSH2 0x2F4 JUMP JUMPDEST SWAP1 PUSH2 0x41 PUSH1 0x20 DUP1 SWAP3 ADD PUSH2 0x2F4 JUMP JUMPDEST SWAP1 DUP4 MLOAD SWAP1 DUP1 DUP3 ADD SWAP2 PUSH4 0xFFFFFFFF DUP6 AND DUP4 MSTORE DUP2 DUP2 MSTORE DUP6 DUP2 ADD PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB SWAP4 DUP3 DUP3 LT DUP6 DUP4 GT OR PUSH2 0x2A6 JUMPI PUSH0 SWAP3 DUP4 SWAP3 DUP10 MSTORE MLOAD SWAP1 PUSH2 0x80C GAS STATICCALL SWAP2 RETURNDATASIZE ISZERO PUSH2 0x2C9 JUMPI RETURNDATASIZE SWAP3 PUSH2 0x8A DUP5 PUSH2 0x305 JUMP JUMPDEST SWAP4 PUSH2 0x97 DUP9 MLOAD SWAP6 DUP7 PUSH2 0x2D1 JUMP JUMPDEST DUP5 MSTORE RETURNDATASIZE PUSH0 DUP5 DUP7 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x2BA JUMPI DUP3 MLOAD DUP4 ADD SWAP1 DUP3 DUP3 ADD SWAP4 DUP4 DUP2 DUP5 SUB SLT PUSH2 0x28A JUMPI DUP4 DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x28A JUMPI ADD SWAP3 DUP4 SWAP3 PUSH2 0x100 SWAP4 DUP5 SWAP2 SUB SLT PUSH2 0x28A JUMPI DUP8 MLOAD SWAP5 DUP4 DUP7 ADD DUP7 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2A6 JUMPI DUP10 MSTORE DUP2 DUP6 ADD MLOAD DUP4 DUP2 GT PUSH2 0x28A JUMPI DUP6 ADD DUP2 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x28A JUMPI DUP3 DUP2 ADD MLOAD PUSH2 0x10B DUP2 PUSH2 0x305 JUMP JUMPDEST SWAP2 PUSH2 0x118 DUP13 MLOAD SWAP4 DUP5 PUSH2 0x2D1 JUMP JUMPDEST DUP2 DUP4 MSTORE DUP4 DUP13 DUP4 DUP4 ADD ADD GT PUSH2 0x28A JUMPI DUP2 PUSH0 SWAP3 DUP14 DUP8 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE DUP7 MSTORE DUP9 DUP6 ADD MLOAD DUP4 DUP2 GT PUSH2 0x28A JUMPI DUP6 ADD DUP2 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x28A JUMPI DUP3 DUP2 ADD MLOAD SWAP4 DUP5 GT PUSH2 0x2A6 JUMPI DUP4 PUSH1 0x5 SHL SWAP1 DUP11 MLOAD SWAP5 PUSH2 0x16E DUP6 DUP5 ADD DUP8 PUSH2 0x2D1 JUMP JUMPDEST DUP6 MSTORE DUP11 DUP5 DUP7 ADD SWAP3 DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x28A JUMPI DUP11 DUP5 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x28E JUMPI POP POP POP POP DUP5 ADD MSTORE PUSH2 0x19F PUSH1 0x60 DUP4 ADD PUSH2 0x320 JUMP JUMPDEST DUP7 DUP5 ADD MSTORE PUSH2 0x1AF PUSH1 0x80 DUP4 ADD PUSH2 0x334 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x1C0 PUSH1 0xA0 DUP4 ADD PUSH2 0x334 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x1D1 PUSH1 0xC0 DUP4 ADD PUSH2 0x348 JUMP JUMPDEST SWAP2 DUP3 PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x1E4 PUSH1 0xE0 DUP3 ADD PUSH2 0x348 JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE ADD MLOAD DUP1 PUSH0 SIGNEXTEND DUP2 SUB PUSH2 0x28A JUMPI PUSH1 0xE0 PUSH1 0xFF SWAP4 ADD MSTORE AND PUSH1 0x8 SUB PUSH1 0xFF DUP2 GT PUSH2 0x276 JUMPI PUSH1 0xFF AND PUSH1 0x4D DUP2 GT PUSH2 0x276 JUMPI PUSH1 0xA EXP DUP1 ISZERO PUSH2 0x262 JUMPI PUSH8 0xDE0B6B3A7640000 DIV PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE MLOAD PUSH2 0x39F SWAP1 DUP2 PUSH2 0x357 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0x80 ADD MSTORE PUSH2 0x202 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xE1 ADD MSTORE PUSH2 0x145 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0x345 ADD MSTORE RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP2 SWAP1 PUSH2 0x299 DUP5 PUSH2 0x320 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 DUP4 SWAP1 PUSH2 0x185 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x1870604D PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP3 PUSH2 0xA0 JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x2A6 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x2A6 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST MLOAD SWAP1 PUSH1 0xFF DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x295D3EE8 EQ PUSH2 0x30D JUMPI POP DUP2 PUSH4 0x679AEFCE EQ PUSH2 0x105 JUMPI POP DUP1 PUSH4 0x81BFA5D1 EQ PUSH2 0xA7 JUMPI PUSH4 0xA747D56F EQ PUSH2 0x4C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP3 DUP4 DUP2 ADD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE DUP5 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP2 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2AC JUMPI DUP5 MSTORE MLOAD PUSH0 SWAP2 DUP3 SWAP2 SWAP1 PUSH2 0x808 GAS STATICCALL RETURNDATASIZE ISZERO PUSH2 0x304 JUMPI RETURNDATASIZE DUP3 DUP2 GT PUSH2 0x2D8 JUMPI DUP4 MLOAD SWAP3 PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP5 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x2AC JUMPI DUP5 MSTORE DUP3 MSTORE RETURNDATASIZE PUSH0 DUP7 DUP5 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x285 JUMPI DUP4 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xA3 JUMPI DUP4 ADD MLOAD SWAP2 DUP3 ISZERO PUSH2 0x25F JUMPI PUSH32 0x0 DUP1 DUP5 MUL SWAP4 DUP5 DIV SUB PUSH2 0x233 JUMPI POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x44526C2400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH32 0x79827DF500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP2 POP PUSH2 0x1E5 JUMP JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 ADDMOD 0xCF PUSH8 0x4357DEC88CA14336 COINBASE 0xCB 0x21 0xE1 LOG2 DUP12 DUP6 0x4E 0xDA 0xCB ORIGIN SWAP6 0xCC 0xC9 0x22 POP 0xB8 0x2C LOG4 XOR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAA DUP11 PUSH32 0xCEEB1C17BB3A1D8DEFC7D21EAA36F1DDBEFD69587F79DB9EF4B8B303CC64736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"759:2835:80:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;759:2835:80;;;;;;1581:26:47;759:2835:80;;1581:26:47;;759:2835:80;1581:26:47;;1124:6:45;;;759:2835:80;1581:26:47;;;;;;;;;;759:2835:80;1581:26:47;;;759:2835:80;;;;;;;;1581:26:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;759:2835:80;;;;;;;;;;;;;;;;;;;-1:-1:-1;;759:2835:80;;;;;;;:::i;:::-;;;;:::i;:::-;2593:45;;;;:::i;:::-;759:2835;;2663:14;759:2835;;;;;;;;2707:35;;;2703:116;;759:2835;;;;;;;;2703:116;2765:43;;;;759:2835;2765:43;759:2835;;;;;;;;;;;2765:43;759:2835;;;;;;-1:-1:-1;;759:2835:80;;;;;;;;;1124:6:45;759:2835:80;;;;;;;;;;-1:-1:-1;;759:2835:80;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;759:2835:80;;;;;;;:::i;:::-;;;;:::i;:::-;1679:34;;;:::i;:::-;1777:45;;;;:::i;:::-;759:2835;;;;1872:14;759:2835;;;;;;;;;;1918:34;1914:142;;759:2835;;;2111:47;;;;;;;;;;;;;;;;;;;;;;;;;759:2835;;;;;;;;;;;;;;;;2111:47;;;759:2835;2111:47;;;;;;759:2835;;;;;;;;1872:14;759:2835;;;;;;;;;;;;;;;;2225:26;759:2835;;;;;2268:4;759:2835;;;;;;;;;;;;;;;2288:65;759:2835;2288:65;;759:2835;;;2111:47;759:2835;;;;;;;;;1914:142;1975:70;;;;759:2835;1975:70;759:2835;;;;;;;;;;;;;1975:70;759:2835;;;;;;;-1:-1:-1;;759:2835:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;-1:-1:-1;;;759:2835:80;;;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;-1:-1:-1;;759:2835:80;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;759:2835:80;;;;;;;;1526:20;759:2835;;;;;;;;;;;-1:-1:-1;;759:2835:80;;;;;1774:7:33;1762:20;1774:7;;1762:20;:::i;:::-;759:2835:80;;;;;1336:22:45;;;:6;;;;;;;759:2835:80;1336:22:45;;;;;;;;;;;759:2835:80;1336:22:45;;;759:2835:80;;;;;;1336:64:45;;;;;759:2835:80;1336:64:45;;;;;759:2835:80;1820:10:33;759:2835:80;;;;1394:4:45;759:2835:80;;;;;1336:64:45;;;;;;;;759:2835:80;1336:64:45;;;759:2835:80;1797:34:33;;;1793:90;;3128:147:80;;:::i;:::-;3220:4;759:2835;;;;;3220:4;759:2835;3239:29;759:2835;3239:29;;759:2835;1793:90:33;1854:18;759:2835:80;1854:18:33;759:2835:80;1854:18:33;1336:64:45;;;;;;;;;;;;;;;;:::i;:::-;;;759:2835:80;;;;;;;;;;;;1336:64:45;;;;;;;;;;759:2835:80;;;;;;;;1336:22:45;759:2835:80;1336:22:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;759:2835:80;;;;;;;;;;;;;;;;;-1:-1:-1;;759:2835:80;;;;;;;;;;;;;;;;;;;;3026:26;759:2835;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:33;759:2835:80;;;2303:50:33;;;2320:22;;759:2835:80;;;;;;;2303:50:33;;;759:2835:80;;;;;;;;;;;;;;;2293:61:33;;1931:430;:::o;759:2835:80:-;;;;;;;;;;;;;;;;;;:::o;3456:136::-;759:2835;3510:11;759:2835;;3506:80;;3456:136::o;3506:80::-;3544:31;-1:-1:-1;3544:31:80;;-1:-1:-1;3544:31:80;3281:169;759:2835;;;;;;;3409:33;;;759:2835;;;;;;;;;;;3409:33;;;759:2835;;3409:33;:::i;:::-;759:2835;3399:44;;3281:169;:::o"},"methodIdentifiers":{"create(uint32,uint32)":"568acb79","disable()":"2f2770db","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getRateProvider(uint32,uint32)":"99b8113f","getRateProviderVersion()":"381c7a4f","getVault()":"8d928af8","isRateProviderFromFactory(address)":"19912f71","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"factoryVersion\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"rateProviderVersion\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"name\":\"RateProviderAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateProviderFactoryIsDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"name\":\"RateProviderNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pairIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"name\":\"RateProviderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"RateProviderFactoryDisabled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"contract IHyperEVMRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"name\":\"getRateProvider\",\"outputs\":[{\"internalType\":\"contract IHyperEVMRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProviderVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IHyperEVMRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"name\":\"isRateProviderFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"RateProviderAlreadyExists(uint32,uint32,address)\":[{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"rateProvider\":\"The address of the deployed rate provider\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"}}],\"RateProviderNotFound(uint32,uint32)\":[{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"RateProviderCreated(uint256,uint256,address)\":{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"rateProvider\":\"The address of the deployed rate provider\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"}}},\"kind\":\"dev\",\"methods\":{\"create(uint32,uint32)\":{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"},\"returns\":{\"rateProvider\":\"The address of the deployed rate provider\"}},\"disable()\":{\"details\":\"A disabled rate provider factory cannot create new rate providers and cannot be re-enabled. However, already created rate providers are still usable. This is a permissioned function.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getRateProvider(uint32,uint32)\":{\"details\":\"Reverts if the rate provider was not found for the given token and pair.\",\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"},\"returns\":{\"rateProvider\":\"The address of the rate provider for the given token and pair\"}},\"getRateProviderVersion()\":{\"returns\":{\"_0\":\"The rate provider version number\"}},\"getVault()\":{\"details\":\"This function is virtual to allow for overriding in derived contracts which also inherits contracts with `getVault()` definition.\",\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isRateProviderFromFactory(address)\":{\"params\":{\"rateProvider\":\"The rate provider to check\"},\"returns\":{\"_0\":\"True if the rate provider was created by this factory; false otherwise\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"RateProviderAlreadyExists(uint32,uint32,address)\":[{\"notice\":\"A rate provider already exists for the given token and pair.\"}],\"RateProviderFactoryIsDisabled()\":[{\"notice\":\"The factory is disabled.\"}],\"RateProviderNotFound(uint32,uint32)\":[{\"notice\":\"The rate provider was not found for the given token and pair.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"events\":{\"RateProviderCreated(uint256,uint256,address)\":{\"notice\":\"A new HyperEVM Rate Provider was created.\"},\"RateProviderFactoryDisabled()\":{\"notice\":\"Emitted when the factory is disabled.\"}},\"kind\":\"user\",\"methods\":{\"create(uint32,uint32)\":{\"notice\":\"Creates a new HyperEVM Rate Provider for the given token and pair.\"},\"disable()\":{\"notice\":\"Disables the rate provider factory.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getRateProvider(uint32,uint32)\":{\"notice\":\"Gets the rate provider for the given token and pair.\"},\"getRateProviderVersion()\":{\"notice\":\"Returns a number representing the rate provider version.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isRateProviderFromFactory(address)\":{\"notice\":\"Checks whether the given rate provider was created by this factory.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"Factory for deploying and managing HyperEVM rate providers.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/HyperEVMRateProviderFactory.sol\":\"HyperEVMRateProviderFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\":{\"keccak256\":\"0xa2b797f83f03ad80f6512aecc2c1aed8d8aac3ffe968e0f696ec98ec4c200cd5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93ec4d5a140fed3f7885318e2816d2c498ec44730a320d491d47c990660bc268\",\"dweb:/ipfs/QmPK2pHX4dEYf77K6vyT1LMU83neZP5xe5AzcBsv7oJoLm\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol\":{\"keccak256\":\"0x9b1db72d212780046987be96919d7bc0bf9829faac6d47820a5d5f038d356d96\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://157ccbf98c1631eb1efc363e9cfb64646744b6a0c1e17f021a49c1c3649ae382\",\"dweb:/ipfs/QmUVnwLEJ8qghiReoZKUApRDP7cp4EdxKj7vEeyrZ8s453\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x11ec2b653633cbcc6a99d426df178007a98d1154a39a1ada961239be39eec069\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://40eed42ee57746bbf4711bb4aee856328cd70cc02aa3ff05e8dd719868fcd524\",\"dweb:/ipfs/QmX5uAoB9W6UUehgSRvVW6hun3XE53eZwKsm4kHVqtJs8C\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"contracts/HyperEVMRateProvider.sol\":{\"keccak256\":\"0x8946f432e7337d4db52606d91f60b1adb65648473b8fb7354a9266da5543bd0e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8abb5a40dd0a5d62be1022dd58c35b05521751e79c26f0f96c9e986857b0a0e8\",\"dweb:/ipfs/QmXh6BeSz1W8XmuKyo1TdTBHDxnTZqHSxTRtpcrE7fjwBz\"]},\"contracts/HyperEVMRateProviderFactory.sol\":{\"keccak256\":\"0x1da29e3f6fb173fc927ed05cfec8e9c79c80c2415ab299f7f2da6a2432856ab2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://381b828fe004e8f981dec61b777d26f248eb64f48cef43e7f39c04cbdd3a4b60\",\"dweb:/ipfs/QmQhY2HhjhjvqbwKd8PdfADf6pgFBzSHJ36jcXYhg3NxGH\"]},\"contracts/utils/HyperSpotPricePrecompile.sol\":{\"keccak256\":\"0x956b7c8f826704431ea1d94bec623d2c5b8b34442365f0b249f3a2c25c2c6c54\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3a70d1a6c57fc7cf290d9b4684c5740166cc04bc2a32aa17421edbc7f844d0ae\",\"dweb:/ipfs/QmXAypsKxGf5YAxWUcMeSHkXFfcDZv8WuZWS44HNf8wMZB\"]},\"contracts/utils/HyperTokenInfoPrecompile.sol\":{\"keccak256\":\"0xea3b203aa3635705f168c210f2d82b6fda6c63a01acb79f78111302b54fb2c8f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f96d680a8cb86611a2a2a55e675230d9fc397e5e5b875877e62055fb814d929\",\"dweb:/ipfs/Qme2iitvGmf1yBndr1n2yUE8sB1G54HQQqsCWg5HL5NNvZ\"]}},\"version\":1}"}},"contracts/OwnableAuthentication.sol":{"OwnableAuthentication":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault_","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461010357601f61090238819003918201601f19168301916001600160401b038311848410176101075780849260409485528339810103126101035780516001600160a01b03918282169081830361010357602001518381168091036101035780156100f05760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100e15760a0526107e6908161011c823960805181610533015260a05181818160ae015281816101ea01526106bf0152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f35908160e01c918263715018a61461041557826379ba5097146103b1578263851c1bb3146103615782638da5cb5b1461032e578263a89b11281461025f57508163aaabadc514610196578163e30c397814610162578163f2fde38b146100d6575063fbfa77cf14610083575f80fd5b346100d2575f6003193601126100d2576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b346100d25760206003193601126100d2573573ffffffffffffffffffffffffffffffffffffffff8082168092036100d25761010f6105aa565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b82346100d2575f6003193601126100d25760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b9050346100d2575f6003193601126100d25773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561025557926020935f93610226575b505191168152f35b610247919350843d861161024e575b61023f818361049a565b81019061057e565b915f61021e565b503d610235565b83513d5f823e3d90fd5b346100d25760206003193601126100d25781359073ffffffffffffffffffffffffffffffffffffffff9081831683036100d2576102c07fffffffff000000000000000000000000000000000000000000000000000000006102c79216610508565b3390610668565b15610307575f541633146102e0576102de906105f6565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b827f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b83346100d2575f6003193601126100d25760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b8382346100d25760206003193601126100d25735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100d2576103aa602092610508565b9051908152f35b50346100d2575f6003193601126100d2573373ffffffffffffffffffffffffffffffffffffffff60015416036103ea576102de336105f6565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b346100d2575f6003193601126100d25761042d6105aa565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104db57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176104db5760405251902090565b908160209103126100d2575173ffffffffffffffffffffffffffffffffffffffff811681036100d25790565b73ffffffffffffffffffffffffffffffffffffffff5f541633036105ca57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146107a857604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156107795785935f95610784575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa918215610779575f9261074657505090565b90809250813d8311610772575b61075d818361049a565b810103126100d2575180151581036100d25790565b503d610753565b6040513d5f823e3d90fd5b6064929195506107a090853d871161024e5761023f818361049a565b9490916106f1565b50505060019056fea2646970667358221220dd9e17197a4db1c55e38f27d8795035c089ddf2da4504915c7eb1442de947e7c64736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x103 JUMPI PUSH1 0x1F PUSH2 0x902 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x107 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x103 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x103 JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x103 JUMPI DUP1 ISZERO PUSH2 0xF0 JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xE1 JUMPI PUSH1 0xA0 MSTORE PUSH2 0x7E6 SWAP1 DUP2 PUSH2 0x11C DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x533 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xAE ADD MSTORE DUP2 DUP2 PUSH2 0x1EA ADD MSTORE PUSH2 0x6BF ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x715018A6 EQ PUSH2 0x415 JUMPI DUP3 PUSH4 0x79BA5097 EQ PUSH2 0x3B1 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0x361 JUMPI DUP3 PUSH4 0x8DA5CB5B EQ PUSH2 0x32E JUMPI DUP3 PUSH4 0xA89B1128 EQ PUSH2 0x25F JUMPI POP DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x196 JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x162 JUMPI DUP2 PUSH4 0xF2FDE38B EQ PUSH2 0xD6 JUMPI POP PUSH4 0xFBFA77CF EQ PUSH2 0x83 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xD2 JUMPI PUSH2 0x10F PUSH2 0x5AA JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x255 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x226 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x247 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x24E JUMPI JUMPDEST PUSH2 0x23F DUP2 DUP4 PUSH2 0x49A JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x57E JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x21E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x235 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP4 AND DUP4 SUB PUSH2 0xD2 JUMPI PUSH2 0x2C0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x2C7 SWAP3 AND PUSH2 0x508 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x668 JUMP JUMPDEST ISZERO PUSH2 0x307 JUMPI PUSH0 SLOAD AND CALLER EQ PUSH2 0x2E0 JUMPI PUSH2 0x2DE SWAP1 PUSH2 0x5F6 JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0xD2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xD2 JUMPI PUSH2 0x3AA PUSH1 0x20 SWAP3 PUSH2 0x508 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0x3EA JUMPI PUSH2 0x2DE CALLER PUSH2 0x5F6 JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH2 0x42D PUSH2 0x5AA JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x4DB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x4DB JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xD2 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xD2 JUMPI SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x5CA JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x7A8 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x779 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x784 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x779 JUMPI PUSH0 SWAP3 PUSH2 0x746 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x772 JUMPI JUMPDEST PUSH2 0x75D DUP2 DUP4 PUSH2 0x49A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xD2 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xD2 JUMPI SWAP1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x753 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x7A0 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x24E JUMPI PUSH2 0x23F DUP2 DUP4 PUSH2 0x49A JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x6F1 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD SWAP15 OR NOT PUSH27 0x4DB1C55E38F27D8795035C089DDF2DA4504915C7EB1442DE947E7C PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1209:1721:81:-:0;;;;;;;;;;;;;-1:-1:-1;;1209:1721:81;;;;-1:-1:-1;;;;;1209:1721:81;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1209:1721:81;;;;;;;;;;;;;;;;;;;;;1273:26:49;;1269:95;;1209:1721:81;;;;;;;;2093:20:50;1209:1721:81;;2093:20:50;1209:1721:81;;-1:-1:-1;1209:1721:81;;;;;-1:-1:-1;1209:1721:81;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1524:4:81;1347:46:33;;1548:29:81;1544:80;;1634:14;;1209:1721;;;;;;1347:46:33;1209:1721:81;;;;;1634:14;1209:1721;;;;;;;;;;;;;;;;1544:80;1600:13;;;-1:-1:-1;1600:13:81;;-1:-1:-1;1600:13:81;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;1209:1721:81;;-1:-1:-1;1322:31:49;1209:1721:81;-1:-1:-1;1209:1721:81;;;;;;-1:-1:-1;1209:1721:81;;;;;-1:-1:-1;1209:1721:81"},"deployedBytecode":{"functionDebugData":{"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":1406,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":1178,"id":null,"parameterSlots":2,"returnSlots":0},"fun_canPerform":{"entryPoint":1640,"id":20329,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":1450,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":1288,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_transferOwnership":{"entryPoint":1526,"id":9547,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":1331}],"20218":[{"length":32,"start":174},{"length":32,"start":490},{"length":32,"start":1727}]},"linkReferences":{},"object":"604060808152600480361015610013575f80fd5b5f35908160e01c918263715018a61461041557826379ba5097146103b1578263851c1bb3146103615782638da5cb5b1461032e578263a89b11281461025f57508163aaabadc514610196578163e30c397814610162578163f2fde38b146100d6575063fbfa77cf14610083575f80fd5b346100d2575f6003193601126100d2576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b346100d25760206003193601126100d2573573ffffffffffffffffffffffffffffffffffffffff8082168092036100d25761010f6105aa565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b82346100d2575f6003193601126100d25760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b9050346100d2575f6003193601126100d25773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561025557926020935f93610226575b505191168152f35b610247919350843d861161024e575b61023f818361049a565b81019061057e565b915f61021e565b503d610235565b83513d5f823e3d90fd5b346100d25760206003193601126100d25781359073ffffffffffffffffffffffffffffffffffffffff9081831683036100d2576102c07fffffffff000000000000000000000000000000000000000000000000000000006102c79216610508565b3390610668565b15610307575f541633146102e0576102de906105f6565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b827f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b83346100d2575f6003193601126100d25760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b8382346100d25760206003193601126100d25735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100d2576103aa602092610508565b9051908152f35b50346100d2575f6003193601126100d2573373ffffffffffffffffffffffffffffffffffffffff60015416036103ea576102de336105f6565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b346100d2575f6003193601126100d25761042d6105aa565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104db57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176104db5760405251902090565b908160209103126100d2575173ffffffffffffffffffffffffffffffffffffffff811681036100d25790565b73ffffffffffffffffffffffffffffffffffffffff5f541633036105ca57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146107a857604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156107795785935f95610784575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa918215610779575f9261074657505090565b90809250813d8311610772575b61075d818361049a565b810103126100d2575180151581036100d25790565b503d610753565b6040513d5f823e3d90fd5b6064929195506107a090853d871161024e5761023f818361049a565b9490916106f1565b50505060019056fea2646970667358221220dd9e17197a4db1c55e38f27d8795035c089ddf2da4504915c7eb1442de947e7c64736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x715018A6 EQ PUSH2 0x415 JUMPI DUP3 PUSH4 0x79BA5097 EQ PUSH2 0x3B1 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0x361 JUMPI DUP3 PUSH4 0x8DA5CB5B EQ PUSH2 0x32E JUMPI DUP3 PUSH4 0xA89B1128 EQ PUSH2 0x25F JUMPI POP DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x196 JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x162 JUMPI DUP2 PUSH4 0xF2FDE38B EQ PUSH2 0xD6 JUMPI POP PUSH4 0xFBFA77CF EQ PUSH2 0x83 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xD2 JUMPI PUSH2 0x10F PUSH2 0x5AA JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x255 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x226 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x247 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x24E JUMPI JUMPDEST PUSH2 0x23F DUP2 DUP4 PUSH2 0x49A JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x57E JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x21E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x235 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP4 AND DUP4 SUB PUSH2 0xD2 JUMPI PUSH2 0x2C0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x2C7 SWAP3 AND PUSH2 0x508 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x668 JUMP JUMPDEST ISZERO PUSH2 0x307 JUMPI PUSH0 SLOAD AND CALLER EQ PUSH2 0x2E0 JUMPI PUSH2 0x2DE SWAP1 PUSH2 0x5F6 JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0xD2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xD2 JUMPI PUSH2 0x3AA PUSH1 0x20 SWAP3 PUSH2 0x508 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0x3EA JUMPI PUSH2 0x2DE CALLER PUSH2 0x5F6 JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH2 0x42D PUSH2 0x5AA JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x4DB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x4DB JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xD2 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xD2 JUMPI SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x5CA JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x7A8 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x779 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x784 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x779 JUMPI PUSH0 SWAP3 PUSH2 0x746 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x772 JUMPI JUMPDEST PUSH2 0x75D DUP2 DUP4 PUSH2 0x49A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xD2 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xD2 JUMPI SWAP1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x753 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x7A0 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x24E JUMPI PUSH2 0x23F DUP2 DUP4 PUSH2 0x49A JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x6F1 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD SWAP15 OR NOT PUSH27 0x4DB1C55E38F27D8795035C089DDF2DA4504915C7EB1442DE947E7C PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1209:1721:81:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21;1209:1721;1810:21;;;1209:1721;;;;;;;;;;;;;;;;;;-1:-1:-1;;1209:1721:81;;;;;;;;;1348:29;1209:1721;;;;;;;;;;;;;-1:-1:-1;;1209:1721:81;;;;;;;;;;;;;;;1500:62:49;;:::i;:::-;1209:1721:81;;1738:24:50;1209:1721:81;;;1738:24:50;1209:1721:81;;;;1777:43:50;1209:1721:81;1777:43:50;;1209:1721:81;;;;;;;-1:-1:-1;;1209:1721:81;;;;;;;;1311:13:50;1209:1721:81;;;;;;;;;;;;;;;-1:-1:-1;;1209:1721:81;;;;;;1810:21;1209:1721;;1810:21;;1209:1721;1810:21;;:5;;;1209:1721;1810:21;;;;;;;;;;1209:1721;1810:21;;;1209:1721;;;;;;;;1810:21;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;1209:1721;;;;;;;;;;;;;;-1:-1:-1;;1209:1721:81;;;;;;;;;;;;;;;;;1762:20:33;1774:7;1798:33;1774:7;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;1209:1721:81;;;1820:10:33;2423:21:81;2419:77;;2524:8;;;:::i;:::-;1209:1721;2419:77;2467:18;;1209:1721;2467:18;1209:1721;2467:18;1793:90:33;1854:18;;1209:1721:81;1854:18:33;1209:1721:81;1854:18:33;1209:1721:81;;;;;;-1:-1:-1;;1209:1721:81;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1209:1721:81;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;1209:1721:81;;;;;735:10:64;1209:1721:81;1311:13:50;1209:1721:81;;2339:24:50;2335:96;;2459:6;735:10:64;2459:6:50;:::i;2335:96::-;2386:34;1209:1721:81;2386:34:50;735:10:64;1209:1721:81;;;;2386:34:50;1209:1721:81;;;;;-1:-1:-1;;1209:1721:81;;;;;1500:62:49;;:::i;:::-;1209:1721:81;;;;2093:20:50;1209:1721:81;;2093:20:50;1209:1721:81;;;;;;;;;3052:40:49;;;;1209:1721:81;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:33;1209:1721:81;;;2303:50:33;;;2320:22;;1209:1721:81;;;;;;;2303:50:33;;;1209:1721:81;;;;;;;;;;;;;;;2293:61:33;;1931:430;:::o;1209:1721:81:-;;;;;;;;;;;;;;;;;;:::o;1796:162:49:-;1209:1721:81;1710:6:49;1209:1721:81;;735:10:64;1855:23:49;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:64;1901:40:49;1209:1721:81;;1710:6:49;1901:40;2011:153:50;1209:1721:81;;;2093:20:50;1209:1721:81;;2093:20:50;1209:1721:81;2093:20:50;1209:1721:81;;;;;;;;;;2093:20:50;1209:1721:81;;3052:40:49;2093:20:50;3052:40:49;;2011:153:50:o;2546:382:81:-;;1209:1721;;;;;;;;;2721:15;;;2717:57;;1209:1721;;2858:21;1209:1721;2858:21;;;:5;;;:21;:5;;;1209:1721;2858:21;;;;;;;;;1209:1721;2858:21;;;2546:382;1209:1721;;;;;;2858:63;;;;;1209:1721;2858:63;;:21;:63;;1209:1721;;;;;2915:4;1209:1721;;;;;2858:63;;;;;;;1209:1721;2858:63;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;;;;;;;;;;;:::i;:::-;;;1209:1721;;;;;;;;;;;;2546:382;:::o;2858:63::-;;;;;;1209:1721;;;;;;;;;2858:21;1209:1721;2858:21;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","owner()":"8da5cb5b","pendingOwner()":"e30c3978","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Use it to pre-wire admin multisigs upon deployment to a contract that requires permissioned functions to work, where the impact of the owner going rogue is minimal. Contract registries, fee burners, and other utility contracts are good examples. In turn, the pre-configured owner can speed up operations as it can perform any action right after deployment without waiting for governance to set up the authorizer, which can take whole weeks. On the other hand, governance can always revoke or change the owner at any given time, keeping superior powers above the owner.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"kind\":\"user\",\"methods\":{\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"}},\"notice\":\"OwnableAuthentication is a contract that combines ownership management with authentication.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/OwnableAuthentication.sol\":\"OwnableAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]}},\"version\":1}"}},"contracts/PoolHelperCommon.sol":{"PoolHelperCommon":{"abi":[{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"InvalidPoolSetId","type":"error"},{"inputs":[],"name":"InvalidPoolSetManager","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"poolSetManager","type":"address"}],"name":"PoolSetManagerNotUnique","type":"error"},{"inputs":[],"name":"SenderIsNotPoolSetManager","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolRemovedFromSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"initialManager","type":"address"}],"name":"PoolSetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"PoolSetDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"PoolSetOwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPoolsToSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"destroyPoolSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getAllPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getManagerForPoolSet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextPoolSetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getPoolCountForSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolSetIdForCaller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"getPoolSetIdForManager","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isPoolInSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isValidPoolSetId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePoolsFromSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferPoolSetOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"acceptOwnership()":"79ba5097","addPoolsToSet(uint256,address[])":"ebf3a8d0","createPoolSet(address)":"e909c19b","createPoolSet(address,address[])":"3e035f9b","destroyPoolSet(uint256)":"7c1ec460","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAllPoolsInSet(uint256)":"94fc4058","getAuthorizer()":"aaabadc5","getManagerForPoolSet(uint256)":"f167a1e6","getNextPoolSetId()":"c482e822","getPoolCountForSet(uint256)":"62d53462","getPoolSetIdForCaller()":"ce998aba","getPoolSetIdForManager(address)":"25c427ed","getPoolsInSet(uint256,uint256,uint256)":"8c60ebd0","isPoolInSet(address,uint256)":"182551da","isValidPoolSetId(uint256)":"255dae41","owner()":"8da5cb5b","pendingOwner()":"e30c3978","removePoolsFromSet(uint256,address[])":"2da55a1d","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","transferPoolSetOwnership(address)":"3700f987","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"InvalidPoolSetId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolSetManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolSetManager\",\"type\":\"address\"}],\"name\":\"PoolSetManagerNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderIsNotPoolSetManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"PoolSetCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"PoolSetDestroyed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"PoolSetOwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPoolsToSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"destroyPoolSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getAllPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getManagerForPoolSet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextPoolSetId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getPoolCountForSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSetIdForCaller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getPoolSetIdForManager\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isPoolInSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isValidPoolSetId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePoolsFromSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferPoolSetOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"params\":{\"poolSetId\":\"Id of the set involved in the operation\"}}],\"InvalidPoolSetId(uint256)\":[{\"details\":\"This can mean the value is invalid, or it was never created, or it was destroyed.\",\"params\":{\"poolSetId\":\"The id of the invalid set\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolSetManagerNotUnique(address)\":[{\"details\":\"Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\",\"params\":{\"poolSetManager\":\"Address of the manager that is already assigned to another pool set id\"}}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolRemovedFromSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetCreated(uint256,address)\":{\"details\":\"Pools are organized into separate sets, controlled by a manager, which can be changed independently.\",\"params\":{\"initialManager\":\"Address of the pool set manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetDestroyed(uint256,address)\":{\"params\":{\"manager\":\"The address of the set's last manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"details\":\"Managers can only control one pool set. Transfers to existing managers of other sets will revert.\",\"params\":{\"newManager\":\"Address of the new manager\",\"oldManager\":\"Address of the previous manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"addPoolsToSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may add pools to a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"newPools\":\"List of pools to add\",\"poolSetId\":\"Id of the set to which the new pools belong\"}},\"createPoolSet(address)\":{\"details\":\"Convenience function to create a pool set with no initial pools. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\"}},\"createPoolSet(address,address[])\":{\"details\":\"The `newPools` list can be empty, in which case this will only create the set. Pools can then be added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\",\"newPools\":\"Set of pools to add to the set\"}},\"destroyPoolSet(uint256)\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may destroy sets, effectively removing control of any pools in the set from the associated manager. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set being destroyed\"}},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAllPoolsInSet(uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"pools\":\"List of pools\"}},\"getManagerForPoolSet(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\"}},\"getNextPoolSetId()\":{\"returns\":{\"_0\":\"The pool set id that will be used on the next call of `createPoolSet`\"}},\"getPoolCountForSet(uint256)\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction. Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The current number of pools in the set\"}},\"getPoolSetIdForCaller()\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the caller is not a pool set manager\"}},\"getPoolSetIdForManager(address)\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the address given is not a pool set manager\"}},\"getPoolsInSet(uint256,uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`). Reverts if the poolSetId is not valid.\",\"params\":{\"from\":\"Start index\",\"poolSetId\":\"Id of the set containing the pools\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"isPoolInSet(address,uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"pool\":\"Address of the pool to check\",\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the pool is in the given set, false otherwise\"}},\"isValidPoolSetId(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the poolSetId exists\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"removePoolsFromSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may remove pools from a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set to which the pools belong\",\"pools\":\"List of pools to remove from the set\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"transferPoolSetOwnership(address)\":{\"details\":\"This is a permissioned function. Only the current manager of a set can call this to set a new manager. Since managers can only control a single set, there is no need to specify the id in the call. Note that this is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts if the new manager address is zero or already the manager of a pool set.\",\"params\":{\"newManager\":\"The address of the new manager\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"InvalidPoolSetId(uint256)\":[{\"notice\":\"Pool set id associated with an operation is invalid.\"}],\"InvalidPoolSetManager()\":[{\"notice\":\"The initial manager of a pool set cannot be zero.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolNotInSet(address,uint256)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolSetManagerNotUnique(address)\":[{\"notice\":\"Pool set managers can only manage a single pool set.\"}],\"SenderIsNotPoolSetManager()\":[{\"notice\":\"Permissioned operations on pools can only be performed by the pool set manager.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"notice\":\"The owner added a pool to the given set.\"},\"PoolRemovedFromSet(address,uint256)\":{\"notice\":\"The owner removed a pool from the given set.\"},\"PoolSetCreated(uint256,address)\":{\"notice\":\"The owner created a new pool set.\"},\"PoolSetDestroyed(uint256,address)\":{\"notice\":\"The owner destroyed a pool set.\"},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"notice\":\"The current manager of a pool set transferred ownership to a new address.\"}},\"kind\":\"user\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"createPoolSet(address)\":{\"notice\":\"Create a new empty set with an initial manager.\"},\"createPoolSet(address,address[])\":{\"notice\":\"Create a new set with an initial manager, optionally initialized with a set of pools.\"},\"destroyPoolSet(uint256)\":{\"notice\":\"Simple way to remove an entire set of pools from control of the helper function.\"},\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAllPoolsInSet(uint256)\":{\"notice\":\"Get the full set of pools from a given set.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"},\"getManagerForPoolSet(uint256)\":{\"notice\":\"Get the manager address associated with a given poolSetId.\"},\"getNextPoolSetId()\":{\"notice\":\"Utility function to predict the next pool set id.\"},\"getPoolCountForSet(uint256)\":{\"notice\":\"Get the number of pools associated with the given set.\"},\"getPoolSetIdForCaller()\":{\"notice\":\"Get the pool set id associated with the caller.\"},\"getPoolSetIdForManager(address)\":{\"notice\":\"Get the pool set id associated with a given manager address.\"},\"getPoolsInSet(uint256,uint256,uint256)\":{\"notice\":\"Get a range of pools from a given set.\"},\"isPoolInSet(address,uint256)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"isValidPoolSetId(uint256)\":{\"notice\":\"Check whether a poolSetId has been created.\"},\"removePoolsFromSet(uint256,address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"transferPoolSetOwnership(address)\":{\"notice\":\"Transfer ownership of a pool set from the current manager to a new manager.\"}},\"notice\":\"Common code for helper functions that operate on a subset of pools.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/PoolHelperCommon.sol\":\"PoolHelperCommon\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xdb8365416c9dd9d7be16677c13819065511e9bc7705d6bad85fd52b65d3b3c39\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b90206982d126075b074f0a77ea9cb3ec173ed9fe9e4504b12d6807532b1b7ff\",\"dweb:/ipfs/QmYjKTu4Mrew94sSxfQ8jP4yT7wZFgghSRyB9A2kDdSy8X\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/PoolHelperCommon.sol\":{\"keccak256\":\"0xc3bd72a44d8479bacbfa4ebca2354b315160e77c378c3dc24d8cd7a41990a83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://fed38b2ea6f2842633d8d555d298adc889605bbeb3ec32728811fbc907989519\",\"dweb:/ipfs/QmX1aEVFkPAZbbSFXn6tfJnaPYWr9TDe9YHCQAiLvgZahg\"]}},\"version\":1}"}},"contracts/PoolPauseHelper.sol":{"PoolPauseHelper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"InvalidPoolSetId","type":"error"},{"inputs":[],"name":"InvalidPoolSetManager","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"poolSetManager","type":"address"}],"name":"PoolSetManagerNotUnique","type":"error"},{"inputs":[],"name":"SenderIsNotPoolSetManager","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolRemovedFromSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"initialManager","type":"address"}],"name":"PoolSetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"PoolSetDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"PoolSetOwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPoolsToSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"destroyPoolSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getAllPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getManagerForPoolSet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextPoolSetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getPoolCountForSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolSetIdForCaller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"getPoolSetIdForManager","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isPoolInSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isValidPoolSetId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"pausePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePoolsFromSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferPoolSetOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461011e57601f61199738819003918201601f19168301916001600160401b0383118484101761012257808492604094855283398101031261011e5780516001600160a01b03918282169081830361011e576020015183811680910361011e57801561010b5760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100fc5760a0526001600255611860908161013782396080518161125c015260a05181818161015e0152818161028e015281816104f10152818161066901528181610cbe01526116fe0152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f35908160e01c918263182551da14610fde578263255dae4114610f9e57826325c427ed14610f5b5782632da55a1d14610ec25782633700f98714610e0e5782633e035f9b14610c3657826362d5346214610c05578263715018a614610b8057826379ba509714610b1c5782637c1ec460146109d0578263851c1bb3146109875782638c60ebd0146108415782638da5cb5b1461080e57826394fc40581461078e578263a20dc52914610609578263a89b11281461056657508163aaabadc51461049d578163c482e8221461047f578163ce998aba1461045b578163e30c397814610427578163e909c19b146103ea578163ebf3a8d014610250578163f167a1e61461021357508063f2fde38b146101865763fbfa77cf14610133575f80fd5b34610182575f600319360112610182576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b346101825760206003193601126101825761019f611046565b6101a761138a565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b823461018257602060031936011261018257602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f2054169051908152f35b823461018257906102603661116c565b61026b93919361138a565b61027484611325565b80519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116925f5b8681106102bb57005b826102c682846111f0565b511686517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156103e0575f916103b3575b5015610389579060058b9392845f5252610328828a5f206117d2565b1561035d575090600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a3016102b2565b90867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b5090857f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b6103d39150823d84116103d9575b6103cb8183611069565b81019061130d565b8c61030c565b503d6103c1565b8a513d5f823e3d90fd5b82346101825760206003193601126101825760209061042061040a611046565b61041261138a565b61041b816113d6565b611497565b9051908152f35b8234610182575f6003193601126101825760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b8234610182575f60031936011261018257602091335f528252805f20549051908152f35b8234610182575f600319360112610182576020906002549051908152f35b905034610182575f6003193601126101825773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561055c57926020935f9361052d575b505191168152f35b61054e919350843d8611610555575b6105468183611069565b8101906112e1565b915f610525565b503d61053c565b83513d5f823e3d90fd5b34610182576020600319360112610182576105b46105ad7fffffffff000000000000000000000000000000000000000000000000000000006105a6611046565b9316611231565b33906116a7565b156105e25773ffffffffffffffffffffffffffffffffffffffff5f541633146105e2576105e09061152c565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b8382346101825760209160206003193601126101825767ffffffffffffffff9082358281116101825761064290939293369084016110ef565b9161064b611459565b938351945f9473ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016965b88811061069457005b8161069f82856111f0565b5116845f5260058b526106c281895f206001915f520160205260405f2054151590565b1561075f57883b15610182578751907f55aca1ec000000000000000000000000000000000000000000000000000000008252878201525f80828b8160249485925af1801561075557610719575b505060010161068b565b86821161072b5750875260018b61070f565b6041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b89513d5f823e3d90fd5b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b83823461018257602090602060031936011261018257356107ae81611325565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b8282106107f7576107f386866107e9828b0383611069565b519182918261119f565b0390f35b8354875295860195600193840193909101906107d1565b8334610182575f6003193601126101825760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b838234610182576060600319360112610182578035906024356044359161086784611325565b835f526005906020906005602052865f205485851190811561097d575b8115610972575b50610947575061089b83856112a7565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06108de6108c9886110d7565b976108d68a51998a611069565b8089526110d7565b01366020880137835b8581106108fb578751806107f3898261119f565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff610925828b5f2061159e565b90549060031b1c1661094061093a88846112a7565b8a6111f0565b52016108e7565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b90508410158861088b565b8087119150610884565b8382346101825760206003193601126101825735907fffffffff000000000000000000000000000000000000000000000000000000008216820361018257610420602092611231565b8382346101825760209182600319360112610182578135916109f061138a565b6109f983611325565b825f5260058452815f208054805b610abc575050825f5260058452815f208054905f815581610a9f575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610a23575f8155600101610aa9565b5f190180610b1673ffffffffffffffffffffffffffffffffffffffff610ae2838661159e565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a3846115b3565b50610a07565b5034610182575f600319360112610182573373ffffffffffffffffffffffffffffffffffffffff6001541603610b55576105e03361152c565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b34610182575f60031936011261018257610b9861138a565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b5082346101825760206003193601126101825760209135610c2581611325565b5f5260058252805f20549051908152f35b508234610182578060031936011261018257610c50611046565b60249260243567ffffffffffffffff811161018257610c75610c7e91369084016110ef565b9261041261138a565b938251610c90575b6020858551908152f35b610c9b92919261138a565b610ca485611325565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610cf25750505050610c86565b82610cfd82846111f0565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610e04575f91610de7575b5015610dbd579060058b92835f5252610d5c818b5f206117d2565b15610d905790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610ce2565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610dfe9150823d84116103d9576103cb8183611069565b8c610d41565b8b513d5f823e3d90fd5b50823461018257602060031936011261018257610e29611046565b91610e33836113d6565b610e3b611459565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b50823461018257610ed23661116c565b91610edb61138a565b610ee482611325565b8251925f5b848110610ef257005b73ffffffffffffffffffffffffffffffffffffffff610f1182846111f0565b5116845f526005602052610f2781855f206115b3565b1561075f5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610ee9565b5082346101825760206003193601126101825760209173ffffffffffffffffffffffffffffffffffffffff610f8e611046565b165f528252805f20549051908152f35b50823461018257602060031936011261018257602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b833461018257806003193601126101825760209061103d610ffd611046565b60243561100981611325565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361018257565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110aa57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116110aa5760051b60200190565b9080601f83011215610182576020908235611109816110d7565b936111176040519586611069565b81855260208086019260051b82010192831161018257602001905b828210611140575050505090565b813573ffffffffffffffffffffffffffffffffffffffff81168103610182578152908301908301611132565b90604060031983011261018257600435916024359067ffffffffffffffff82116101825761119c916004016110ef565b90565b60209060206040818301928281528551809452019301915f5b8281106111c6575050505090565b835173ffffffffffffffffffffffffffffffffffffffff16855293810193928101926001016111b8565b80518210156112045760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176110aa5760405251902090565b919082039182116112b457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90816020910312610182575173ffffffffffffffffffffffffffffffffffffffff811681036101825790565b90816020910312610182575180151581036101825790565b80158015611360575b6113355750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f2054161561132e565b73ffffffffffffffffffffffffffffffffffffffff5f541633036113aa57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff16801561143157805f52600460205260405f20546114065750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561146f57565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f1983146112b4576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b8054821015611204575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f1461169f575f19918281018181116112b4578254908482019182116112b457818103611654575b5050508054801561162757820191611609838361159e565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61168a611664611674938661159e565b90549060031b1c9283928661159e565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806115f1565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146117ca57604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa93841561179b5785935f956117a6575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa91821561179b575f9261178557505090565b61119c9250803d106103d9576103cb8183611069565b6040513d5f823e3d90fd5b6064929195506117c290853d8711610555576105468183611069565b949091611730565b505050600190565b5f82815260018201602052604090205461182457805490680100000000000000008210156110aa578261180f61167484600180960185558461159e565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220af4ddd4d79f5571a144b7e1e3507a11ee11fbc84ff726ec139cf7dcd5483fd0d64736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x11E JUMPI PUSH1 0x1F PUSH2 0x1997 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x122 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x11E JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x11E JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x11E JUMPI DUP1 ISZERO PUSH2 0x10B JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xFC JUMPI PUSH1 0xA0 MSTORE PUSH1 0x1 PUSH1 0x2 SSTORE PUSH2 0x1860 SWAP1 DUP2 PUSH2 0x137 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x125C ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x15E ADD MSTORE DUP2 DUP2 PUSH2 0x28E ADD MSTORE DUP2 DUP2 PUSH2 0x4F1 ADD MSTORE DUP2 DUP2 PUSH2 0x669 ADD MSTORE DUP2 DUP2 PUSH2 0xCBE ADD MSTORE PUSH2 0x16FE ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x182551DA EQ PUSH2 0xFDE JUMPI DUP3 PUSH4 0x255DAE41 EQ PUSH2 0xF9E JUMPI DUP3 PUSH4 0x25C427ED EQ PUSH2 0xF5B JUMPI DUP3 PUSH4 0x2DA55A1D EQ PUSH2 0xEC2 JUMPI DUP3 PUSH4 0x3700F987 EQ PUSH2 0xE0E JUMPI DUP3 PUSH4 0x3E035F9B EQ PUSH2 0xC36 JUMPI DUP3 PUSH4 0x62D53462 EQ PUSH2 0xC05 JUMPI DUP3 PUSH4 0x715018A6 EQ PUSH2 0xB80 JUMPI DUP3 PUSH4 0x79BA5097 EQ PUSH2 0xB1C JUMPI DUP3 PUSH4 0x7C1EC460 EQ PUSH2 0x9D0 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0x987 JUMPI DUP3 PUSH4 0x8C60EBD0 EQ PUSH2 0x841 JUMPI DUP3 PUSH4 0x8DA5CB5B EQ PUSH2 0x80E JUMPI DUP3 PUSH4 0x94FC4058 EQ PUSH2 0x78E JUMPI DUP3 PUSH4 0xA20DC529 EQ PUSH2 0x609 JUMPI DUP3 PUSH4 0xA89B1128 EQ PUSH2 0x566 JUMPI POP DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x49D JUMPI DUP2 PUSH4 0xC482E822 EQ PUSH2 0x47F JUMPI DUP2 PUSH4 0xCE998ABA EQ PUSH2 0x45B JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x427 JUMPI DUP2 PUSH4 0xE909C19B EQ PUSH2 0x3EA JUMPI DUP2 PUSH4 0xEBF3A8D0 EQ PUSH2 0x250 JUMPI DUP2 PUSH4 0xF167A1E6 EQ PUSH2 0x213 JUMPI POP DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x186 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x133 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0x19F PUSH2 0x1046 JUMP JUMPDEST PUSH2 0x1A7 PUSH2 0x138A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI SWAP1 PUSH2 0x260 CALLDATASIZE PUSH2 0x116C JUMP JUMPDEST PUSH2 0x26B SWAP4 SWAP2 SWAP4 PUSH2 0x138A JUMP JUMPDEST PUSH2 0x274 DUP5 PUSH2 0x1325 JUMP JUMPDEST DUP1 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x2BB JUMPI STOP JUMPDEST DUP3 PUSH2 0x2C6 DUP3 DUP5 PUSH2 0x11F0 JUMP JUMPDEST MLOAD AND DUP7 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3E0 JUMPI PUSH0 SWAP2 PUSH2 0x3B3 JUMPI JUMPDEST POP ISZERO PUSH2 0x389 JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP4 SWAP3 DUP5 PUSH0 MSTORE MSTORE PUSH2 0x328 DUP3 DUP11 PUSH0 KECCAK256 PUSH2 0x17D2 JUMP JUMPDEST ISZERO PUSH2 0x35D JUMPI POP SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0x2B2 JUMP JUMPDEST SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x3D3 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3D9 JUMPI JUMPDEST PUSH2 0x3CB DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x130D JUMP JUMPDEST DUP13 PUSH2 0x30C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3C1 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x420 PUSH2 0x40A PUSH2 0x1046 JUMP JUMPDEST PUSH2 0x412 PUSH2 0x138A JUMP JUMPDEST PUSH2 0x41B DUP2 PUSH2 0x13D6 JUMP JUMPDEST PUSH2 0x1497 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 CALLER PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x55C JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x52D JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x54E SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x555 JUMPI JUMPDEST PUSH2 0x546 DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x12E1 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x525 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x53C JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0x5B4 PUSH2 0x5AD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x5A6 PUSH2 0x1046 JUMP JUMPDEST SWAP4 AND PUSH2 0x1231 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x16A7 JUMP JUMPDEST ISZERO PUSH2 0x5E2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x5E2 JUMPI PUSH2 0x5E0 SWAP1 PUSH2 0x152C JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP3 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x182 JUMPI PUSH2 0x642 SWAP1 SWAP4 SWAP3 SWAP4 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x10EF JUMP JUMPDEST SWAP2 PUSH2 0x64B PUSH2 0x1459 JUMP JUMPDEST SWAP4 DUP4 MLOAD SWAP5 PUSH0 SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP7 JUMPDEST DUP9 DUP2 LT PUSH2 0x694 JUMPI STOP JUMPDEST DUP2 PUSH2 0x69F DUP3 DUP6 PUSH2 0x11F0 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 DUP12 MSTORE PUSH2 0x6C2 DUP2 DUP10 PUSH0 KECCAK256 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x75F JUMPI DUP9 EXTCODESIZE ISZERO PUSH2 0x182 JUMPI DUP8 MLOAD SWAP1 PUSH32 0x55ACA1EC00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP8 DUP3 ADD MSTORE PUSH0 DUP1 DUP3 DUP12 DUP2 PUSH1 0x24 SWAP5 DUP6 SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x755 JUMPI PUSH2 0x719 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x68B JUMP JUMPDEST DUP7 DUP3 GT PUSH2 0x72B JUMPI POP DUP8 MSTORE PUSH1 0x1 DUP12 PUSH2 0x70F JUMP JUMPDEST PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP10 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI CALLDATALOAD PUSH2 0x7AE DUP2 PUSH2 0x1325 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x7F7 JUMPI PUSH2 0x7F3 DUP7 DUP7 PUSH2 0x7E9 DUP3 DUP12 SUB DUP4 PUSH2 0x1069 JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x119F JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x7D1 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x867 DUP5 PUSH2 0x1325 JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x97D JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x972 JUMPI JUMPDEST POP PUSH2 0x947 JUMPI POP PUSH2 0x89B DUP4 DUP6 PUSH2 0x12A7 JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x8DE PUSH2 0x8C9 DUP9 PUSH2 0x10D7 JUMP JUMPDEST SWAP8 PUSH2 0x8D6 DUP11 MLOAD SWAP10 DUP11 PUSH2 0x1069 JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x10D7 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x8FB JUMPI DUP8 MLOAD DUP1 PUSH2 0x7F3 DUP10 DUP3 PUSH2 0x119F JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x925 DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x159E JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x940 PUSH2 0x93A DUP9 DUP5 PUSH2 0x12A7 JUMP JUMPDEST DUP11 PUSH2 0x11F0 JUMP JUMPDEST MSTORE ADD PUSH2 0x8E7 JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x88B JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x884 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x182 JUMPI PUSH2 0x420 PUSH1 0x20 SWAP3 PUSH2 0x1231 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0x9F0 PUSH2 0x138A JUMP JUMPDEST PUSH2 0x9F9 DUP4 PUSH2 0x1325 JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0xABC JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0xA9F JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA23 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xAA9 JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0xB16 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xAE2 DUP4 DUP7 PUSH2 0x159E JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x15B3 JUMP JUMPDEST POP PUSH2 0xA07 JUMP JUMPDEST POP CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0xB55 JUMPI PUSH2 0x5E0 CALLER PUSH2 0x152C JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0xB98 PUSH2 0x138A JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xC25 DUP2 PUSH2 0x1325 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0xC50 PUSH2 0x1046 JUMP JUMPDEST PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x182 JUMPI PUSH2 0xC75 PUSH2 0xC7E SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x10EF JUMP JUMPDEST SWAP3 PUSH2 0x412 PUSH2 0x138A JUMP JUMPDEST SWAP4 DUP3 MLOAD PUSH2 0xC90 JUMPI JUMPDEST PUSH1 0x20 DUP6 DUP6 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xC9B SWAP3 SWAP2 SWAP3 PUSH2 0x138A JUMP JUMPDEST PUSH2 0xCA4 DUP6 PUSH2 0x1325 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0xCF2 JUMPI POP POP POP POP PUSH2 0xC86 JUMP JUMPDEST DUP3 PUSH2 0xCFD DUP3 DUP5 PUSH2 0x11F0 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP10 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xE04 JUMPI PUSH0 SWAP2 PUSH2 0xDE7 JUMPI JUMPDEST POP ISZERO PUSH2 0xDBD JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP3 DUP4 PUSH0 MSTORE MSTORE PUSH2 0xD5C DUP2 DUP12 PUSH0 KECCAK256 PUSH2 0x17D2 JUMP JUMPDEST ISZERO PUSH2 0xD90 JUMPI SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xCE2 JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xDFE SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3D9 JUMPI PUSH2 0x3CB DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST DUP13 PUSH2 0xD41 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0xE29 PUSH2 0x1046 JUMP JUMPDEST SWAP2 PUSH2 0xE33 DUP4 PUSH2 0x13D6 JUMP JUMPDEST PUSH2 0xE3B PUSH2 0x1459 JUMP JUMPDEST SWAP2 DUP3 SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH2 0xED2 CALLDATASIZE PUSH2 0x116C JUMP JUMPDEST SWAP2 PUSH2 0xEDB PUSH2 0x138A JUMP JUMPDEST PUSH2 0xEE4 DUP3 PUSH2 0x1325 JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xEF2 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xF11 DUP3 DUP5 PUSH2 0x11F0 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0xF27 DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x15B3 JUMP JUMPDEST ISZERO PUSH2 0x75F JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0xEE9 JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xF8E PUSH2 0x1046 JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x182 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x103D PUSH2 0xFFD PUSH2 0x1046 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x1009 DUP2 PUSH2 0x1325 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x182 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10AA JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10AA JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x1109 DUP2 PUSH2 0x10D7 JUMP JUMPDEST SWAP4 PUSH2 0x1117 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1069 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x182 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1140 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x182 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1132 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x182 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x182 JUMPI PUSH2 0x119C SWAP2 PUSH1 0x4 ADD PUSH2 0x10EF JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x11C6 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x11B8 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1204 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10AA JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x12B4 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x182 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x182 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x182 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x182 JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x1360 JUMPI JUMPDEST PUSH2 0x1335 JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x132E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x13AA JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x1431 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x1406 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLER PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x146F JUMPI JUMP JUMPDEST PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x12B4 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x1204 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x169F JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x12B4 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x12B4 JUMPI DUP2 DUP2 SUB PUSH2 0x1654 JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x1627 JUMPI DUP3 ADD SWAP2 PUSH2 0x1609 DUP4 DUP4 PUSH2 0x159E JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x168A PUSH2 0x1664 PUSH2 0x1674 SWAP4 DUP7 PUSH2 0x159E JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x159E JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x15F1 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x17CA JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x179B JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x17A6 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x179B JUMPI PUSH0 SWAP3 PUSH2 0x1785 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x119C SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x3D9 JUMPI PUSH2 0x3CB DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x17C2 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x555 JUMPI PUSH2 0x546 DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1730 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1824 JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0x10AA JUMPI DUP3 PUSH2 0x180F PUSH2 0x1674 DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x159E JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF 0x4D 0xDD 0x4D PUSH26 0xF5571A144B7E1E3507A11EE11FBC84FF726EC139CF7DCD5483FD 0xD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"328:853:83:-:0;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;-1:-1:-1;;;;;328:853:83;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;328:853:83;;;;;;;;;;;;;;;;;;;;;1273:26:49;;1269:95;;328:853:83;;;;;;;;2093:20:50;328:853:83;;2093:20:50;328:853:83;;-1:-1:-1;328:853:83;;;;;-1:-1:-1;328:853:83;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1524:4:81;1347:46:33;;1548:29:81;1544:80;;1634:14;;2093:20:50;853:1:82;328:853:83;;;;;;;1347:46:33;328:853:83;;;;;1634:14:81;328:853:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1544:80:81;1600:13;;;-1:-1:-1;1600:13:81;;-1:-1:-1;1600:13:81;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;328:853:83;;-1:-1:-1;1322:31:49;328:853:83;-1:-1:-1;328:853:83;;;;;;-1:-1:-1;328:853:83;;;;;-1:-1:-1;328:853:83"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":4166,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_array_address_dyn":{"entryPoint":4335,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":4877,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":4833,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_array_address_dyn":{"entryPoint":4460,"id":null,"parameterSlots":1,"returnSlots":2},"abi_encode_array_address_dyn":{"entryPoint":4511,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":4311,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":4775,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":4201,"id":null,"parameterSlots":2,"returnSlots":0},"fun_add":{"entryPoint":6098,"id":16149,"parameterSlots":2,"returnSlots":1},"fun_canPerform":{"entryPoint":5799,"id":20329,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":5002,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_contains":{"entryPoint":null,"id":16295,"parameterSlots":2,"returnSlots":1},"fun_createPoolSet":{"entryPoint":5271,"id":20497,"parameterSlots":1,"returnSlots":1},"fun_ensureValidManager":{"entryPoint":5078,"id":21004,"parameterSlots":1,"returnSlots":0},"fun_ensureValidPoolSet":{"entryPoint":4901,"id":21058,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":4657,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_getValidPoolSetId":{"entryPoint":5209,"id":20976,"parameterSlots":0,"returnSlots":1},"fun_remove":{"entryPoint":5555,"id":16233,"parameterSlots":2,"returnSlots":1},"fun_transferOwnership":{"entryPoint":5420,"id":9547,"parameterSlots":1,"returnSlots":0},"memory_array_index_access_address_dyn":{"entryPoint":4592,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_bytes32_dyn":{"entryPoint":5534,"id":null,"parameterSlots":2,"returnSlots":2},"update_byte_slice_dynamic32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":4700}],"20218":[{"length":32,"start":350},{"length":32,"start":654},{"length":32,"start":1265},{"length":32,"start":1641},{"length":32,"start":3262},{"length":32,"start":5886}]},"linkReferences":{},"object":"604060808152600480361015610013575f80fd5b5f35908160e01c918263182551da14610fde578263255dae4114610f9e57826325c427ed14610f5b5782632da55a1d14610ec25782633700f98714610e0e5782633e035f9b14610c3657826362d5346214610c05578263715018a614610b8057826379ba509714610b1c5782637c1ec460146109d0578263851c1bb3146109875782638c60ebd0146108415782638da5cb5b1461080e57826394fc40581461078e578263a20dc52914610609578263a89b11281461056657508163aaabadc51461049d578163c482e8221461047f578163ce998aba1461045b578163e30c397814610427578163e909c19b146103ea578163ebf3a8d014610250578163f167a1e61461021357508063f2fde38b146101865763fbfa77cf14610133575f80fd5b34610182575f600319360112610182576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b346101825760206003193601126101825761019f611046565b6101a761138a565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b823461018257602060031936011261018257602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f2054169051908152f35b823461018257906102603661116c565b61026b93919361138a565b61027484611325565b80519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116925f5b8681106102bb57005b826102c682846111f0565b511686517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156103e0575f916103b3575b5015610389579060058b9392845f5252610328828a5f206117d2565b1561035d575090600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a3016102b2565b90867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b5090857f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b6103d39150823d84116103d9575b6103cb8183611069565b81019061130d565b8c61030c565b503d6103c1565b8a513d5f823e3d90fd5b82346101825760206003193601126101825760209061042061040a611046565b61041261138a565b61041b816113d6565b611497565b9051908152f35b8234610182575f6003193601126101825760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b8234610182575f60031936011261018257602091335f528252805f20549051908152f35b8234610182575f600319360112610182576020906002549051908152f35b905034610182575f6003193601126101825773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561055c57926020935f9361052d575b505191168152f35b61054e919350843d8611610555575b6105468183611069565b8101906112e1565b915f610525565b503d61053c565b83513d5f823e3d90fd5b34610182576020600319360112610182576105b46105ad7fffffffff000000000000000000000000000000000000000000000000000000006105a6611046565b9316611231565b33906116a7565b156105e25773ffffffffffffffffffffffffffffffffffffffff5f541633146105e2576105e09061152c565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b8382346101825760209160206003193601126101825767ffffffffffffffff9082358281116101825761064290939293369084016110ef565b9161064b611459565b938351945f9473ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016965b88811061069457005b8161069f82856111f0565b5116845f5260058b526106c281895f206001915f520160205260405f2054151590565b1561075f57883b15610182578751907f55aca1ec000000000000000000000000000000000000000000000000000000008252878201525f80828b8160249485925af1801561075557610719575b505060010161068b565b86821161072b5750875260018b61070f565b6041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b89513d5f823e3d90fd5b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b83823461018257602090602060031936011261018257356107ae81611325565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b8282106107f7576107f386866107e9828b0383611069565b519182918261119f565b0390f35b8354875295860195600193840193909101906107d1565b8334610182575f6003193601126101825760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b838234610182576060600319360112610182578035906024356044359161086784611325565b835f526005906020906005602052865f205485851190811561097d575b8115610972575b50610947575061089b83856112a7565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06108de6108c9886110d7565b976108d68a51998a611069565b8089526110d7565b01366020880137835b8581106108fb578751806107f3898261119f565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff610925828b5f2061159e565b90549060031b1c1661094061093a88846112a7565b8a6111f0565b52016108e7565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b90508410158861088b565b8087119150610884565b8382346101825760206003193601126101825735907fffffffff000000000000000000000000000000000000000000000000000000008216820361018257610420602092611231565b8382346101825760209182600319360112610182578135916109f061138a565b6109f983611325565b825f5260058452815f208054805b610abc575050825f5260058452815f208054905f815581610a9f575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610a23575f8155600101610aa9565b5f190180610b1673ffffffffffffffffffffffffffffffffffffffff610ae2838661159e565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a3846115b3565b50610a07565b5034610182575f600319360112610182573373ffffffffffffffffffffffffffffffffffffffff6001541603610b55576105e03361152c565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b34610182575f60031936011261018257610b9861138a565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b5082346101825760206003193601126101825760209135610c2581611325565b5f5260058252805f20549051908152f35b508234610182578060031936011261018257610c50611046565b60249260243567ffffffffffffffff811161018257610c75610c7e91369084016110ef565b9261041261138a565b938251610c90575b6020858551908152f35b610c9b92919261138a565b610ca485611325565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610cf25750505050610c86565b82610cfd82846111f0565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610e04575f91610de7575b5015610dbd579060058b92835f5252610d5c818b5f206117d2565b15610d905790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610ce2565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610dfe9150823d84116103d9576103cb8183611069565b8c610d41565b8b513d5f823e3d90fd5b50823461018257602060031936011261018257610e29611046565b91610e33836113d6565b610e3b611459565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b50823461018257610ed23661116c565b91610edb61138a565b610ee482611325565b8251925f5b848110610ef257005b73ffffffffffffffffffffffffffffffffffffffff610f1182846111f0565b5116845f526005602052610f2781855f206115b3565b1561075f5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610ee9565b5082346101825760206003193601126101825760209173ffffffffffffffffffffffffffffffffffffffff610f8e611046565b165f528252805f20549051908152f35b50823461018257602060031936011261018257602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b833461018257806003193601126101825760209061103d610ffd611046565b60243561100981611325565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361018257565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110aa57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116110aa5760051b60200190565b9080601f83011215610182576020908235611109816110d7565b936111176040519586611069565b81855260208086019260051b82010192831161018257602001905b828210611140575050505090565b813573ffffffffffffffffffffffffffffffffffffffff81168103610182578152908301908301611132565b90604060031983011261018257600435916024359067ffffffffffffffff82116101825761119c916004016110ef565b90565b60209060206040818301928281528551809452019301915f5b8281106111c6575050505090565b835173ffffffffffffffffffffffffffffffffffffffff16855293810193928101926001016111b8565b80518210156112045760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176110aa5760405251902090565b919082039182116112b457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90816020910312610182575173ffffffffffffffffffffffffffffffffffffffff811681036101825790565b90816020910312610182575180151581036101825790565b80158015611360575b6113355750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f2054161561132e565b73ffffffffffffffffffffffffffffffffffffffff5f541633036113aa57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff16801561143157805f52600460205260405f20546114065750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561146f57565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f1983146112b4576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b8054821015611204575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f1461169f575f19918281018181116112b4578254908482019182116112b457818103611654575b5050508054801561162757820191611609838361159e565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61168a611664611674938661159e565b90549060031b1c9283928661159e565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806115f1565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146117ca57604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa93841561179b5785935f956117a6575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa91821561179b575f9261178557505090565b61119c9250803d106103d9576103cb8183611069565b6040513d5f823e3d90fd5b6064929195506117c290853d8711610555576105468183611069565b949091611730565b505050600190565b5f82815260018201602052604090205461182457805490680100000000000000008210156110aa578261180f61167484600180960185558461159e565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220af4ddd4d79f5571a144b7e1e3507a11ee11fbc84ff726ec139cf7dcd5483fd0d64736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x182551DA EQ PUSH2 0xFDE JUMPI DUP3 PUSH4 0x255DAE41 EQ PUSH2 0xF9E JUMPI DUP3 PUSH4 0x25C427ED EQ PUSH2 0xF5B JUMPI DUP3 PUSH4 0x2DA55A1D EQ PUSH2 0xEC2 JUMPI DUP3 PUSH4 0x3700F987 EQ PUSH2 0xE0E JUMPI DUP3 PUSH4 0x3E035F9B EQ PUSH2 0xC36 JUMPI DUP3 PUSH4 0x62D53462 EQ PUSH2 0xC05 JUMPI DUP3 PUSH4 0x715018A6 EQ PUSH2 0xB80 JUMPI DUP3 PUSH4 0x79BA5097 EQ PUSH2 0xB1C JUMPI DUP3 PUSH4 0x7C1EC460 EQ PUSH2 0x9D0 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0x987 JUMPI DUP3 PUSH4 0x8C60EBD0 EQ PUSH2 0x841 JUMPI DUP3 PUSH4 0x8DA5CB5B EQ PUSH2 0x80E JUMPI DUP3 PUSH4 0x94FC4058 EQ PUSH2 0x78E JUMPI DUP3 PUSH4 0xA20DC529 EQ PUSH2 0x609 JUMPI DUP3 PUSH4 0xA89B1128 EQ PUSH2 0x566 JUMPI POP DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x49D JUMPI DUP2 PUSH4 0xC482E822 EQ PUSH2 0x47F JUMPI DUP2 PUSH4 0xCE998ABA EQ PUSH2 0x45B JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x427 JUMPI DUP2 PUSH4 0xE909C19B EQ PUSH2 0x3EA JUMPI DUP2 PUSH4 0xEBF3A8D0 EQ PUSH2 0x250 JUMPI DUP2 PUSH4 0xF167A1E6 EQ PUSH2 0x213 JUMPI POP DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x186 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x133 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0x19F PUSH2 0x1046 JUMP JUMPDEST PUSH2 0x1A7 PUSH2 0x138A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI SWAP1 PUSH2 0x260 CALLDATASIZE PUSH2 0x116C JUMP JUMPDEST PUSH2 0x26B SWAP4 SWAP2 SWAP4 PUSH2 0x138A JUMP JUMPDEST PUSH2 0x274 DUP5 PUSH2 0x1325 JUMP JUMPDEST DUP1 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x2BB JUMPI STOP JUMPDEST DUP3 PUSH2 0x2C6 DUP3 DUP5 PUSH2 0x11F0 JUMP JUMPDEST MLOAD AND DUP7 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3E0 JUMPI PUSH0 SWAP2 PUSH2 0x3B3 JUMPI JUMPDEST POP ISZERO PUSH2 0x389 JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP4 SWAP3 DUP5 PUSH0 MSTORE MSTORE PUSH2 0x328 DUP3 DUP11 PUSH0 KECCAK256 PUSH2 0x17D2 JUMP JUMPDEST ISZERO PUSH2 0x35D JUMPI POP SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0x2B2 JUMP JUMPDEST SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x3D3 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3D9 JUMPI JUMPDEST PUSH2 0x3CB DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x130D JUMP JUMPDEST DUP13 PUSH2 0x30C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3C1 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x420 PUSH2 0x40A PUSH2 0x1046 JUMP JUMPDEST PUSH2 0x412 PUSH2 0x138A JUMP JUMPDEST PUSH2 0x41B DUP2 PUSH2 0x13D6 JUMP JUMPDEST PUSH2 0x1497 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 CALLER PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x55C JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x52D JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x54E SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x555 JUMPI JUMPDEST PUSH2 0x546 DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x12E1 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x525 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x53C JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0x5B4 PUSH2 0x5AD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x5A6 PUSH2 0x1046 JUMP JUMPDEST SWAP4 AND PUSH2 0x1231 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x16A7 JUMP JUMPDEST ISZERO PUSH2 0x5E2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x5E2 JUMPI PUSH2 0x5E0 SWAP1 PUSH2 0x152C JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP3 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x182 JUMPI PUSH2 0x642 SWAP1 SWAP4 SWAP3 SWAP4 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x10EF JUMP JUMPDEST SWAP2 PUSH2 0x64B PUSH2 0x1459 JUMP JUMPDEST SWAP4 DUP4 MLOAD SWAP5 PUSH0 SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP7 JUMPDEST DUP9 DUP2 LT PUSH2 0x694 JUMPI STOP JUMPDEST DUP2 PUSH2 0x69F DUP3 DUP6 PUSH2 0x11F0 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 DUP12 MSTORE PUSH2 0x6C2 DUP2 DUP10 PUSH0 KECCAK256 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x75F JUMPI DUP9 EXTCODESIZE ISZERO PUSH2 0x182 JUMPI DUP8 MLOAD SWAP1 PUSH32 0x55ACA1EC00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP8 DUP3 ADD MSTORE PUSH0 DUP1 DUP3 DUP12 DUP2 PUSH1 0x24 SWAP5 DUP6 SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x755 JUMPI PUSH2 0x719 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x68B JUMP JUMPDEST DUP7 DUP3 GT PUSH2 0x72B JUMPI POP DUP8 MSTORE PUSH1 0x1 DUP12 PUSH2 0x70F JUMP JUMPDEST PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP10 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI CALLDATALOAD PUSH2 0x7AE DUP2 PUSH2 0x1325 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x7F7 JUMPI PUSH2 0x7F3 DUP7 DUP7 PUSH2 0x7E9 DUP3 DUP12 SUB DUP4 PUSH2 0x1069 JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x119F JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x7D1 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x867 DUP5 PUSH2 0x1325 JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x97D JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x972 JUMPI JUMPDEST POP PUSH2 0x947 JUMPI POP PUSH2 0x89B DUP4 DUP6 PUSH2 0x12A7 JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x8DE PUSH2 0x8C9 DUP9 PUSH2 0x10D7 JUMP JUMPDEST SWAP8 PUSH2 0x8D6 DUP11 MLOAD SWAP10 DUP11 PUSH2 0x1069 JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x10D7 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x8FB JUMPI DUP8 MLOAD DUP1 PUSH2 0x7F3 DUP10 DUP3 PUSH2 0x119F JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x925 DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x159E JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x940 PUSH2 0x93A DUP9 DUP5 PUSH2 0x12A7 JUMP JUMPDEST DUP11 PUSH2 0x11F0 JUMP JUMPDEST MSTORE ADD PUSH2 0x8E7 JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x88B JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x884 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x182 JUMPI PUSH2 0x420 PUSH1 0x20 SWAP3 PUSH2 0x1231 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0x9F0 PUSH2 0x138A JUMP JUMPDEST PUSH2 0x9F9 DUP4 PUSH2 0x1325 JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0xABC JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0xA9F JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA23 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xAA9 JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0xB16 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xAE2 DUP4 DUP7 PUSH2 0x159E JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x15B3 JUMP JUMPDEST POP PUSH2 0xA07 JUMP JUMPDEST POP CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0xB55 JUMPI PUSH2 0x5E0 CALLER PUSH2 0x152C JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0xB98 PUSH2 0x138A JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xC25 DUP2 PUSH2 0x1325 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0xC50 PUSH2 0x1046 JUMP JUMPDEST PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x182 JUMPI PUSH2 0xC75 PUSH2 0xC7E SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x10EF JUMP JUMPDEST SWAP3 PUSH2 0x412 PUSH2 0x138A JUMP JUMPDEST SWAP4 DUP3 MLOAD PUSH2 0xC90 JUMPI JUMPDEST PUSH1 0x20 DUP6 DUP6 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xC9B SWAP3 SWAP2 SWAP3 PUSH2 0x138A JUMP JUMPDEST PUSH2 0xCA4 DUP6 PUSH2 0x1325 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0xCF2 JUMPI POP POP POP POP PUSH2 0xC86 JUMP JUMPDEST DUP3 PUSH2 0xCFD DUP3 DUP5 PUSH2 0x11F0 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP10 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xE04 JUMPI PUSH0 SWAP2 PUSH2 0xDE7 JUMPI JUMPDEST POP ISZERO PUSH2 0xDBD JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP3 DUP4 PUSH0 MSTORE MSTORE PUSH2 0xD5C DUP2 DUP12 PUSH0 KECCAK256 PUSH2 0x17D2 JUMP JUMPDEST ISZERO PUSH2 0xD90 JUMPI SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xCE2 JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xDFE SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3D9 JUMPI PUSH2 0x3CB DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST DUP13 PUSH2 0xD41 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0xE29 PUSH2 0x1046 JUMP JUMPDEST SWAP2 PUSH2 0xE33 DUP4 PUSH2 0x13D6 JUMP JUMPDEST PUSH2 0xE3B PUSH2 0x1459 JUMP JUMPDEST SWAP2 DUP3 SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH2 0xED2 CALLDATASIZE PUSH2 0x116C JUMP JUMPDEST SWAP2 PUSH2 0xEDB PUSH2 0x138A JUMP JUMPDEST PUSH2 0xEE4 DUP3 PUSH2 0x1325 JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xEF2 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xF11 DUP3 DUP5 PUSH2 0x11F0 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0xF27 DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x15B3 JUMP JUMPDEST ISZERO PUSH2 0x75F JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0xEE9 JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xF8E PUSH2 0x1046 JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x182 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x103D PUSH2 0xFFD PUSH2 0x1046 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x1009 DUP2 PUSH2 0x1325 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x182 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10AA JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10AA JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x1109 DUP2 PUSH2 0x10D7 JUMP JUMPDEST SWAP4 PUSH2 0x1117 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1069 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x182 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1140 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x182 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1132 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x182 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x182 JUMPI PUSH2 0x119C SWAP2 PUSH1 0x4 ADD PUSH2 0x10EF JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x11C6 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x11B8 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1204 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10AA JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x12B4 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x182 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x182 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x182 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x182 JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x1360 JUMPI JUMPDEST PUSH2 0x1335 JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x132E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x13AA JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x1431 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x1406 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLER PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x146F JUMPI JUMP JUMPDEST PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x12B4 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x1204 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x169F JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x12B4 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x12B4 JUMPI DUP2 DUP2 SUB PUSH2 0x1654 JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x1627 JUMPI DUP3 ADD SWAP2 PUSH2 0x1609 DUP4 DUP4 PUSH2 0x159E JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x168A PUSH2 0x1664 PUSH2 0x1674 SWAP4 DUP7 PUSH2 0x159E JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x159E JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x15F1 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x17CA JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x179B JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x17A6 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x179B JUMPI PUSH0 SWAP3 PUSH2 0x1785 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x119C SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x3D9 JUMPI PUSH2 0x3CB DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x17C2 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x555 JUMPI PUSH2 0x546 DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1730 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1824 JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0x10AA JUMPI DUP3 PUSH2 0x180F PUSH2 0x1674 DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x159E JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF 0x4D 0xDD 0x4D PUSH26 0xF5571A144B7E1E3507A11EE11FBC84FF726EC139CF7DCD5483FD 0xD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"328:853:83:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21:81;328:853:83;1810:21:81;;;328:853:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;;1348:29:81;328:853:83;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;:::i;:::-;1500:62:49;;:::i;:::-;328:853:83;;;;;;;1738:24:50;328:853:83;;;1738:24:50;328:853:83;;;;1777:43:50;328:853:83;1777:43:50;;328:853:83;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;;;8417:16:82;328:853:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1500:62:49;;;;;:::i;:::-;1515:9:82;;;:::i;:::-;328:853:83;;;;5232:5:82;328:853:83;;;;5103:12:82;;;;;;328:853:83;5117:3:82;5151:11;;;;;:::i;:::-;328:853:83;;;;;5232:28:82;;;;;;328:853:83;5232:28:82;328:853:83;5232:28:82;;;;;;;;;;;;;328:853:83;5232:28:82;;;5117:3;328:853:83;;5228:119:82;;328:853:83;5365:9:82;328:853:83;;;;;;;11511:50:72;328:853:83;;;;11511:50:72;:::i;:::-;328:853:83;5361:118:82;;5610:31;;328:853:83;5610:31:82;;;328:853:83;5610:31:82;;328:853:83;5088:13:82;;5361:118;5431:33;;;328:853:83;5431:33:82;328:853:83;;;;5431:33:82;5228:119;5296:36;;;;328:853:83;5296:36:82;328:853:83;;5296:36:82;5232:28;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;328:853:83;;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;2554:30:82;328:853:83;;:::i;:::-;1500:62:49;;:::i;:::-;1962:7:82;;;:::i;:::-;2554:30;:::i;:::-;328:853:83;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;1311:13:50;328:853:83;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;6549:10:82;;328:853:83;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;8254:14:82;328:853:83;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;1810:21:81;328:853:83;;1810:21:81;;328:853:83;1810:21:81;;:5;;;328:853:83;1810:21:81;;;;;;;;;;328:853:83;1810:21:81;;;328:853:83;;;;;;;;1810:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;328:853:83;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;1798:33:33;1762:20;1774:7;328:853:83;;:::i;:::-;1774:7:33;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;328:853:83;;;;1820:10:33;2423:21:81;2419:77;;2524:8;;;:::i;:::-;328:853:83;2419:77:81;2467:18;;328:853:83;2467:18:81;328:853:83;2467:18:81;328:853:83;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;934:20;;;:::i;:::-;328:853;;;1010:13;328:853;;;1141:5;;328:853;1005:168;1025:10;;;;;;328:853;1037:3;1071:8;;;;;:::i;:::-;328:853;;;;;9336:9:82;328:853:83;;12473:55:72;328:853:83;;;;5197:14:72;5101:129;-1:-1:-1;328:853:83;5197:14:72;328:853:83;;;-1:-1:-1;328:853:83;;5197:26:72;;5101:129;;12473:55;328:853:83;9332:111:82;;1141:21:83;;;;;328:853;;1141:21;328:853;1141:21;;;;;328:853;;;;;;;1141:21;;;;;;;;;;;1037:3;;;328:853;;1010:13;;1141:21;328:853;;;;;-1:-1:-1;328:853:83;;;1141:21;;;328:853;;;;;;;;;1141:21;328:853;;;;;;;;;9332:111:82;9403:29;;;;328:853:83;9403:29:82;328:853:83;;;;;9403:29:82;328:853:83;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;1515:9:82;;;:::i;:::-;328:853:83;;7533:9:82;328:853:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;;;;;1515:9:82;;;;:::i;:::-;328:853:83;;;7815:9:82;328:853:83;;;7815:9:82;328:853:83;;;;;;7859:9:82;;;:28;;;;;328:853:83;7859:50:82;;;;328:853:83;7855:115:82;;;8002:9;;;;;:::i;:::-;328:853:83;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;8027:16:82;8045:6;;;;;;328:853:83;;;;;;;:::i;8053:3:82:-;328:853:83;;;;;;;;;5853:18:72;328:853:83;;;;5853:18:72;:::i;:::-;328:853:83;;;;;;;8072:44:82;8078:8;;;;:::i;:::-;8072:44;;:::i;:::-;328:853:83;;8027:16:82;;7855:115;7932:27;;;328:853:83;7932:27:82;328:853:83;;;7932:27:82;7859:50;7891:18;;;;;7859:50;;;:28;7872:15;;;;-1:-1:-1;7859:28:82;;328:853:83;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;1500:62:49;;;:::i;:::-;1515:9:82;;;:::i;:::-;328:853:83;;;3499:9:82;328:853:83;;;;;;;3618:237:82;3625:12;;;328:853:83;;;;;3499:9:82;328:853:83;;;;;;;;;;;;;;3618:237:82;328:853:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4148:36:82;328:853:83;4148:36:82;;328:853:83;;;;;;;;;;;;;;;;;;;;;;;;;3618:237:82;-1:-1:-1;;328:853:83;5853:18:72;11832:53;328:853:83;5853:18:72;;;;:::i;:::-;328:853:83;;;;;;;3774:35:82;;;328:853:83;3774:35:82;;11832:53:72;;:::i;:::-;;3618:237:82;;328:853:83;;;;;;-1:-1:-1;;328:853:83;;;;;735:10:64;328:853:83;1311:13:50;328:853:83;;2339:24:50;2335:96;;2459:6;735:10:64;2459:6:50;:::i;2335:96::-;2386:34;328:853:83;2386:34:50;735:10:64;328:853:83;;;;2386:34:50;328:853:83;;;;;-1:-1:-1;;328:853:83;;;;;1500:62:49;;:::i;:::-;328:853:83;;;;2093:20:50;328:853:83;;2093:20:50;328:853:83;;;;;;;;;3052:40:49;;;;328:853:83;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;1515:9:82;;;:::i;:::-;328:853:83;;6905:9:82;328:853:83;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;:::i;:::-;;;;;;;;;;;2833:30:82;328:853:83;;;;;;:::i;:::-;1500:62:49;;;:::i;2833:30:82:-;328:853:83;;;2874:84:82;;328:853:83;;;;;;;;;2874:84:82;1500:62:49;;;;;:::i;:::-;1515:9:82;;;:::i;:::-;328:853:83;;;;5232:5:82;328:853:83;;;;5103:12:82;;;;;;2874:84;;;;;;5117:3;5151:11;;;;;:::i;:::-;328:853:83;;;;;5232:28:82;;;;;;328:853:83;;5232:28:82;;;;;;;;;;;;;328:853:83;5232:28:82;;;5117:3;328:853:83;;5228:119:82;;328:853:83;5365:9:82;328:853:83;;;;;;11511:50:72;328:853:83;;;;11511:50:72;:::i;:::-;328:853:83;5361:118:82;;5610:31;328:853:83;5610:31:82;;;328:853:83;5610:31:82;;328:853:83;5088:13:82;;5361:118;5431:33;;;;328:853:83;5431:33:82;328:853:83;;;;5431:33:82;5228:119;5296:36;;;;328:853:83;5296:36:82;328:853:83;;5296:36:82;5232:28;;;;;;;;;;;;;;:::i;:::-;;;;;328:853:83;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;:::i;:::-;1962:7:82;;;;:::i;:::-;4357:20;;:::i;:::-;328:853:83;;;;;;4388:16:82;328:853:83;;;;;;;;;;;;;;;;;4511:10:82;328:853:83;;;;;;;;;;;;;;;4511:10:82;4590:62;;328:853:83;4590:62:82;;328:853:83;;;;;;;;;;:::i;:::-;1500:62:49;;;:::i;:::-;1515:9:82;;;:::i;:::-;328:853:83;;5897:13:82;328:853:83;5912:12:82;;;;;;328:853:83;5926:3:82;328:853:83;5960:8:82;;;;:::i;:::-;328:853:83;;;;;5987:9:82;328:853:83;;11832:53:72;328:853:83;;;;11832:53:72;:::i;:::-;328:853:83;5983:117:82;;6119:35;;328:853:83;6119:35:82;;328:853:83;6119:35:82;;328:853:83;5897:13:82;;328:853:83;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;;;7076:16:82;328:853:83;;;;;;;;7076:41:82;;328:853:83;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;12473:55:72;328:853:83;;:::i;:::-;;;1515:9:82;;;:::i;:::-;328:853:83;;7296:9:82;328:853:83;;;;;;;;12473:55:72;5197:14;5101:129;-1:-1:-1;328:853:83;5197:14:72;328:853:83;;;-1:-1:-1;328:853:83;;5197:26:72;;5101:129;;12473:55;328:853:83;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:33;328:853:83;;;2303:50:33;;;2320:22;;328:853:83;;;;;;;2303:50:33;;;328:853:83;;;;;;;;;;;;;;;2293:61:33;;1931:430;:::o;328:853:83:-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;9677:202:82:-;9753:14;;:59;;;;9677:202;9749:124;;9677:202;:::o;9749:124::-;9835:27;9766:1;9835:27;;328:853:83;;9766:1:82;9835:27;9753:59;328:853:83;;9766:1:82;328:853:83;9771:16:82;328:853:83;;;;9766:1:82;328:853:83;;;9771:41:82;9753:59;;1796:162:49;328:853:83;1710:6:49;328:853:83;;735:10:64;1855:23:49;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:64;1901:40:49;328:853:83;;1710:6:49;1901:40;8977:266:82;328:853:83;;9051:21:82;;9047:82;;328:853:83;9070:1:82;328:853:83;9143:14:82;328:853:83;;;9070:1:82;328:853:83;;9139:98:82;;8977:266;:::o;9139:98::-;9194:32;9070:1;9194:32;9143:14;328:853:83;;9070:1:82;9194:32;9047:82;9095:23;9070:1;9095:23;;9070:1;9095:23;8758:213;6549:10;-1:-1:-1;328:853:83;6534:14:82;328:853:83;;;-1:-1:-1;328:853:83;;8890:14:82;;;8886:79;;8758:213::o;8886:79::-;8927:27;-1:-1:-1;8927:27:82;6534:14;-1:-1:-1;8927:27:82;2970:342;;3077:16;328:853:83;;-1:-1:-1;;328:853:83;;;;;;;3077:16:82;328:853:83;3065:28:82;328:853:83;-1:-1:-1;328:853:83;3152:16:82;328:853:83;;;;-1:-1:-1;328:853:83;;;;;;;;;;;;;-1:-1:-1;328:853:83;3206:14:82;328:853:83;;;;-1:-1:-1;328:853:83;;3264:41:82;-1:-1:-1;3264:41:82;;2970:342::o;2011:153:50:-;328:853:83;;;2093:20:50;328:853:83;;2093:20:50;328:853:83;2093:20:50;328:853:83;;;;;;;;;;2093:20:50;328:853:83;;3052:40:49;2093:20:50;3052:40:49;;2011:153:50:o;328:853:83:-;;;;;;;;-1:-1:-1;328:853:83;;-1:-1:-1;328:853:83;;;-1:-1:-1;328:853:83;:::o;3071:1368:72:-;;3266:14;;;328:853:83;;;;;;;;;;;3302:13:72;;;;3298:1135;3302:13;;;-1:-1:-1;;328:853:83;;;;;;;;;;;;;;;;;;;;3777:23:72;;;3773:378;;3298:1135;328:853:83;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3266:14:72;4368:11;:::o;328:853:83:-;;;;;;;;;;3773:378:72;328:853:83;3840:22:72;3961:23;3840:22;;;:::i;:::-;328:853:83;;;;;;3961:23:72;;;;;:::i;:::-;328:853:83;;;;;-1:-1:-1;;328:853:83;;;;;;;;;;;;;;;;;;;;;;;;;3773:378:72;;;;;3298:1135;4410:12;;;;328:853:83;4410:12:72;:::o;2546:382:81:-;;328:853:83;;;;;;;;;2721:15:81;;;2717:57;;328:853:83;;2858:21:81;328:853:83;2858:21:81;;;:5;;;:21;:5;;;328:853:83;2858:21:81;;;;;;;;;328:853:83;2858:21:81;;;2546:382;328:853:83;;;;;;2858:63:81;;;;;328:853:83;2858:63:81;;:21;:63;;328:853:83;;;;;2915:4:81;328:853:83;;;;;2858:63:81;;;;;;;328:853:83;2858:63:81;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;-1:-1:-1;2858:63:81;;;;;;:::i;:::-;328:853:83;;;;;;;;;2858:21:81;328:853:83;2858:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o;2497:406:72:-;-1:-1:-1;328:853:83;;;5197:14:72;;;328:853:83;;;;;;2581:21:72;;328:853:83;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2776:14:72;328:853:83;;;;;;;2832:11:72;:::o;2576:321::-;2874:12;;328:853:83;2874:12:72;:::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","addPoolsToSet(uint256,address[])":"ebf3a8d0","createPoolSet(address)":"e909c19b","createPoolSet(address,address[])":"3e035f9b","destroyPoolSet(uint256)":"7c1ec460","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAllPoolsInSet(uint256)":"94fc4058","getAuthorizer()":"aaabadc5","getManagerForPoolSet(uint256)":"f167a1e6","getNextPoolSetId()":"c482e822","getPoolCountForSet(uint256)":"62d53462","getPoolSetIdForCaller()":"ce998aba","getPoolSetIdForManager(address)":"25c427ed","getPoolsInSet(uint256,uint256,uint256)":"8c60ebd0","isPoolInSet(address,uint256)":"182551da","isValidPoolSetId(uint256)":"255dae41","owner()":"8da5cb5b","pausePools(address[])":"a20dc529","pendingOwner()":"e30c3978","removePoolsFromSet(uint256,address[])":"2da55a1d","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","transferPoolSetOwnership(address)":"3700f987","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"InvalidPoolSetId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolSetManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolSetManager\",\"type\":\"address\"}],\"name\":\"PoolSetManagerNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderIsNotPoolSetManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"PoolSetCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"PoolSetDestroyed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"PoolSetOwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPoolsToSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"destroyPoolSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getAllPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getManagerForPoolSet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextPoolSetId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getPoolCountForSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSetIdForCaller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getPoolSetIdForManager\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isPoolInSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isValidPoolSetId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"pausePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePoolsFromSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferPoolSetOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"params\":{\"poolSetId\":\"Id of the set involved in the operation\"}}],\"InvalidPoolSetId(uint256)\":[{\"details\":\"This can mean the value is invalid, or it was never created, or it was destroyed.\",\"params\":{\"poolSetId\":\"The id of the invalid set\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolSetManagerNotUnique(address)\":[{\"details\":\"Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\",\"params\":{\"poolSetManager\":\"Address of the manager that is already assigned to another pool set id\"}}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolRemovedFromSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetCreated(uint256,address)\":{\"details\":\"Pools are organized into separate sets, controlled by a manager, which can be changed independently.\",\"params\":{\"initialManager\":\"Address of the pool set manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetDestroyed(uint256,address)\":{\"params\":{\"manager\":\"The address of the set's last manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"details\":\"Managers can only control one pool set. Transfers to existing managers of other sets will revert.\",\"params\":{\"newManager\":\"Address of the new manager\",\"oldManager\":\"Address of the previous manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"addPoolsToSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may add pools to a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"newPools\":\"List of pools to add\",\"poolSetId\":\"Id of the set to which the new pools belong\"}},\"createPoolSet(address)\":{\"details\":\"Convenience function to create a pool set with no initial pools. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\"}},\"createPoolSet(address,address[])\":{\"details\":\"The `newPools` list can be empty, in which case this will only create the set. Pools can then be added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\",\"newPools\":\"Set of pools to add to the set\"}},\"destroyPoolSet(uint256)\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may destroy sets, effectively removing control of any pools in the set from the associated manager. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set being destroyed\"}},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAllPoolsInSet(uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"pools\":\"List of pools\"}},\"getManagerForPoolSet(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\"}},\"getNextPoolSetId()\":{\"returns\":{\"_0\":\"The pool set id that will be used on the next call of `createPoolSet`\"}},\"getPoolCountForSet(uint256)\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction. Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The current number of pools in the set\"}},\"getPoolSetIdForCaller()\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the caller is not a pool set manager\"}},\"getPoolSetIdForManager(address)\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the address given is not a pool set manager\"}},\"getPoolsInSet(uint256,uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`). Reverts if the poolSetId is not valid.\",\"params\":{\"from\":\"Start index\",\"poolSetId\":\"Id of the set containing the pools\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"isPoolInSet(address,uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"pool\":\"Address of the pool to check\",\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the pool is in the given set, false otherwise\"}},\"isValidPoolSetId(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the poolSetId exists\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pausePools(address[])\":{\"details\":\"This is a permissioned function. Governance must first grant this contract permission to call `pausePool` on the Vault, then grant another account permission to call `pausePools` here. Note that this is not necessarily the same account that can add or remove pools from the pausable list. Note that there is no `unpause`. This is a helper contract designed to react quickly to emergencies. Unpausing is a more deliberate action that should be performed by accounts approved by governance for this purpose, or by the individual pools' pause managers.\",\"params\":{\"pools\":\"List of pools to pause\"}},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"removePoolsFromSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may remove pools from a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set to which the pools belong\",\"pools\":\"List of pools to remove from the set\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"transferPoolSetOwnership(address)\":{\"details\":\"This is a permissioned function. Only the current manager of a set can call this to set a new manager. Since managers can only control a single set, there is no need to specify the id in the call. Note that this is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts if the new manager address is zero or already the manager of a pool set.\",\"params\":{\"newManager\":\"The address of the new manager\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"InvalidPoolSetId(uint256)\":[{\"notice\":\"Pool set id associated with an operation is invalid.\"}],\"InvalidPoolSetManager()\":[{\"notice\":\"The initial manager of a pool set cannot be zero.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolNotInSet(address,uint256)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolSetManagerNotUnique(address)\":[{\"notice\":\"Pool set managers can only manage a single pool set.\"}],\"SenderIsNotPoolSetManager()\":[{\"notice\":\"Permissioned operations on pools can only be performed by the pool set manager.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"notice\":\"The owner added a pool to the given set.\"},\"PoolRemovedFromSet(address,uint256)\":{\"notice\":\"The owner removed a pool from the given set.\"},\"PoolSetCreated(uint256,address)\":{\"notice\":\"The owner created a new pool set.\"},\"PoolSetDestroyed(uint256,address)\":{\"notice\":\"The owner destroyed a pool set.\"},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"notice\":\"The current manager of a pool set transferred ownership to a new address.\"}},\"kind\":\"user\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"createPoolSet(address)\":{\"notice\":\"Create a new empty set with an initial manager.\"},\"createPoolSet(address,address[])\":{\"notice\":\"Create a new set with an initial manager, optionally initialized with a set of pools.\"},\"destroyPoolSet(uint256)\":{\"notice\":\"Simple way to remove an entire set of pools from control of the helper function.\"},\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAllPoolsInSet(uint256)\":{\"notice\":\"Get the full set of pools from a given set.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"},\"getManagerForPoolSet(uint256)\":{\"notice\":\"Get the manager address associated with a given poolSetId.\"},\"getNextPoolSetId()\":{\"notice\":\"Utility function to predict the next pool set id.\"},\"getPoolCountForSet(uint256)\":{\"notice\":\"Get the number of pools associated with the given set.\"},\"getPoolSetIdForCaller()\":{\"notice\":\"Get the pool set id associated with the caller.\"},\"getPoolSetIdForManager(address)\":{\"notice\":\"Get the pool set id associated with a given manager address.\"},\"getPoolsInSet(uint256,uint256,uint256)\":{\"notice\":\"Get a range of pools from a given set.\"},\"isPoolInSet(address,uint256)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"isValidPoolSetId(uint256)\":{\"notice\":\"Check whether a poolSetId has been created.\"},\"pausePools(address[])\":{\"notice\":\"Pause a set of pools.\"},\"removePoolsFromSet(uint256,address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"transferPoolSetOwnership(address)\":{\"notice\":\"Transfer ownership of a pool set from the current manager to a new manager.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/PoolPauseHelper.sol\":\"PoolPauseHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xdb8365416c9dd9d7be16677c13819065511e9bc7705d6bad85fd52b65d3b3c39\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b90206982d126075b074f0a77ea9cb3ec173ed9fe9e4504b12d6807532b1b7ff\",\"dweb:/ipfs/QmYjKTu4Mrew94sSxfQ8jP4yT7wZFgghSRyB9A2kDdSy8X\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol\":{\"keccak256\":\"0x5d5225c4c283e407458f36d0a10770445b0bd570333fce8d1365af978e8d7829\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://27d0e427a303790222bb696a940882129bafcd3ff57215179d4434d6506b8372\",\"dweb:/ipfs/QmNvL9juq6FzUXHHEufHreckXsPupv2rJw2CC3EBZQiEY5\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/PoolHelperCommon.sol\":{\"keccak256\":\"0xc3bd72a44d8479bacbfa4ebca2354b315160e77c378c3dc24d8cd7a41990a83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://fed38b2ea6f2842633d8d555d298adc889605bbeb3ec32728811fbc907989519\",\"dweb:/ipfs/QmX1aEVFkPAZbbSFXn6tfJnaPYWr9TDe9YHCQAiLvgZahg\"]},\"contracts/PoolPauseHelper.sol\":{\"keccak256\":\"0x8b11ff2aebad966caa7c1e207d48d8debc3ffd23d3ce88fb193c8c93dbb43692\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4ef5deef1194e8e4847d6f82f74ed482264cb123391f964adc48076aad90d2d0\",\"dweb:/ipfs/QmfL9Yc2Tfchb3vJS7oehD2otYZ5tSKpCb1Z7KiuUQkHuu\"]}},\"version\":1}"}},"contracts/PoolSwapFeeHelper.sol":{"PoolSwapFeeHelper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"InvalidPoolSetId","type":"error"},{"inputs":[],"name":"InvalidPoolSetManager","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolHasSwapManager","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"poolSetManager","type":"address"}],"name":"PoolSetManagerNotUnique","type":"error"},{"inputs":[],"name":"SenderIsNotPoolSetManager","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolRemovedFromSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"initialManager","type":"address"}],"name":"PoolSetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"PoolSetDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"PoolSetOwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPoolsToSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"destroyPoolSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getAllPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getManagerForPoolSet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextPoolSetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getPoolCountForSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolSetIdForCaller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"getPoolSetIdForManager","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isPoolInSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isValidPoolSetId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePoolsFromSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferPoolSetOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461011e57601f611b8d38819003918201601f19168301916001600160401b0383118484101761012257808492604094855283398101031261011e5780516001600160a01b03918282169081830361011e576020015183811680910361011e57801561010b5760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100fc5760a0526001600255611a569081610137823960805181611442015260a0518181816101610152818161029b015281816105c20152818161074b01528181610d9301526118f40152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60406080815260049081361015610014575f80fd5b5f915f35908160e01c918263182551da146111a8578263255dae411461116857826325c427ed146111255782632da55a1d1461105d5782633700f98714610fa95782633e035f9b14610d0b57826362d5346214610cda578263715018a614610c5557826379ba509714610bf15782637c1ec46014610aa5578263851c1bb314610a5c5782638c60ebd0146109165782638da5cb5b146108e357826394fc405814610863578263a89b1128146107c057508163aaabadc5146106f7578163c482e822146106d9578163ce998aba146106b5578163d15126ba14610559578163e30c397814610524578163e909c19b146104e6578163ebf3a8d01461025d578163f167a1e61461021b57508063f2fde38b146101895763fbfa77cf14610136575f80fd5b346101855781600319360112610185576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b8234610218576020600319360112610218576101a3611210565b6101ab61155f565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b905034610259576020600319360112610259578160209373ffffffffffffffffffffffffffffffffffffffff92358152600385522054169051908152f35b8280fd5b919050346102595761026e36611352565b909161027861155f565b610281836114fa565b81519373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811693875b8781106102ca578880f35b826102d582846113d6565b511685517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818d5afa9081156104dc578d916104af575b50156104855761033483898e8d815260058552206119c8565b15610457578b88517fe9ddeb260000000000000000000000000000000000000000000000000000000081528489820152808b818660609384935afa92831561044c57908994939291926103e4575b50500151166103bb575090876001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b698c80a3016102bf565b8a82877ff043494a00000000000000000000000000000000000000000000000000000000835252fd5b8194508092503d8311610445575b6103fc818361127c565b810103126104415786916104368a80519261041684611233565b61041f81611773565b845261042c858201611773565b8585015201611773565b8a8201525f80610382565b8c80fd5b503d6103f2565b8b51903d90823e3d90fd5b60448c8b84868b7f5a17aa8d0000000000000000000000000000000000000000000000000000000085525252fd5b508a82877f9e51bd5c00000000000000000000000000000000000000000000000000000000835252fd5b6104cf9150823d84116104d5575b6104c7818361127c565b8101906114e2565b5f61031b565b503d6104bd565b89513d8f823e3d90fd5b5050346101855760206003193601126101855760209061051d610507611210565b61050f61155f565b610518816115ab565b61166c565b9051908152f35b50503461018557816003193601126101855760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b91905034610683578060031936011261068357610574611210565b9161057d61162e565b92835f526005602052825f20936105ba73ffffffffffffffffffffffffffffffffffffffff80931680966001915f520160205260405f2054151590565b1561068757507f00000000000000000000000000000000000000000000000000000000000000001692833b15610683575f9360448592855196879384927fd15126ba0000000000000000000000000000000000000000000000000000000084528784015260243560248401525af1801561067957610636578380f35b9091925067ffffffffffffffff831161064d575052005b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b82513d5f823e3d90fd5b5f80fd5b84837f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b8234610683575f60031936011261068357602091335f528252805f20549051908152f35b8234610683575f600319360112610683576020906002549051908152f35b905034610683575f6003193601126106835773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa9182156107b657926020935f93610787575b505191168152f35b6107a8919350843d86116107af575b6107a0818361127c565b8101906114b6565b918461077f565b503d610796565b83513d5f823e3d90fd5b346106835760206003193601126106835761080e6108077fffffffff00000000000000000000000000000000000000000000000000000000610800611210565b9316611417565b339061189d565b1561083c5773ffffffffffffffffffffffffffffffffffffffff5f5416331461083c5761083a90611701565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b8382346106835760209060206003193601126106835735610883816114fa565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b8282106108cc576108c886866108be828b038361127c565b5191829182611385565b0390f35b8354875295860195600193840193909101906108a6565b8334610683575f6003193601126106835760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b838234610683576060600319360112610683578035906024356044359161093c846114fa565b835f526005906020906005602052865f2054858511908115610a52575b8115610a47575b50610a1c5750610970838561147c565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06109b361099e886112bd565b976109ab8a51998a61127c565b8089526112bd565b01366020880137835b8581106109d0578751806108c88982611385565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff6109fa828b5f20611794565b90549060031b1c16610a15610a0f888461147c565b8a6113d6565b52016109bc565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b905084101588610960565b8087119150610959565b8382346106835760206003193601126106835735907fffffffff00000000000000000000000000000000000000000000000000000000821682036106835761051d602092611417565b838234610683576020918260031936011261068357813591610ac561155f565b610ace836114fa565b825f5260058452815f208054805b610b91575050825f5260058452815f208054905f815581610b74575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610af8575f8155600101610b7e565b5f190180610beb73ffffffffffffffffffffffffffffffffffffffff610bb78386611794565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a3846117a9565b50610adc565b5034610683575f600319360112610683573373ffffffffffffffffffffffffffffffffffffffff6001541603610c2a5761083a33611701565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b34610683575f60031936011261068357610c6d61155f565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b5082346106835760206003193601126106835760209135610cfa816114fa565b5f5260058252805f20549051908152f35b838234610683578160031936011261068357610d25611210565b91602492833567ffffffffffffffff811161068357610d4a610d5391369086016112d5565b9161050f61155f565b928151610d65575b6020848451908152f35b610d6d61155f565b610d76846114fa565b8151915f73ffffffffffffffffffffffffffffffffffffffff91827f000000000000000000000000000000000000000000000000000000000000000016915b858110610dc55750505050610d5b565b83610dd082846113d6565b511687517fc673bdaf000000000000000000000000000000000000000000000000000000008152818782015260209081818d81895afa908115610f9f575f91610f82575b5015610f5857895f5260058152610e2d828a5f206119c8565b15610f2a5788517fe9ddeb260000000000000000000000000000000000000000000000000000000081528288820152808c6060928391818a5afa918215610f205790889392915f92610edc575b5050015116610eb25790886001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610db5565b8990867ff043494a000000000000000000000000000000000000000000000000000000005f52525ffd5b8194508092503d8311610f19575b610ef4818361127c565b81010312610683578691610f0e8b80519261041684611233565b8b8201528d80610e7a565b503d610eea565b8b513d5f823e3d90fd5b898b83897f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8a82887f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610f999150823d84116104d5576104c7818361127c565b8c610e14565b8a513d5f823e3d90fd5b50823461068357602060031936011261068357610fc4611210565b91610fce836115ab565b610fd661162e565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b5082346106835761106d36611352565b9161107661155f565b61107f826114fa565b8251925f5b84811061108d57005b73ffffffffffffffffffffffffffffffffffffffff6110ac82846113d6565b5116845f5260056020526110c281855f206117a9565b156110f65790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301611084565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b5082346106835760206003193601126106835760209173ffffffffffffffffffffffffffffffffffffffff611158611210565b165f528252805f20549051908152f35b50823461068357602060031936011261068357602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b83346106835780600319360112610683576020906112076111c7611210565b6024356111d3816114fa565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361068357565b6060810190811067ffffffffffffffff82111761124f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761124f57604052565b67ffffffffffffffff811161124f5760051b60200190565b9080601f830112156106835760209082356112ef816112bd565b936112fd604051958661127c565b81855260208086019260051b82010192831161068357602001905b828210611326575050505090565b813573ffffffffffffffffffffffffffffffffffffffff81168103610683578152908301908301611318565b90604060031983011261068357600435916024359067ffffffffffffffff821161068357611382916004016112d5565b90565b60209060206040818301928281528551809452019301915f5b8281106113ac575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161139e565b80518210156113ea5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f000000000000000000000000000000000000000000000000000000000000000084521660408201526024815261147681611233565b51902090565b9190820391821161148957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90816020910312610683575173ffffffffffffffffffffffffffffffffffffffff811681036106835790565b90816020910312610683575180151581036106835790565b80158015611535575b61150a5750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20541615611503565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361157f57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff16801561160657805f52600460205260405f20546115db5750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561164457565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611489576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b519073ffffffffffffffffffffffffffffffffffffffff8216820361068357565b80548210156113ea575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f14611895575f1991828101818111611489578254908482019182116114895781810361184a575b5050508054801561181d578201916117ff8383611794565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61188061185a61186a9386611794565b90549060031b1c92839286611794565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806117e7565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146119c057604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156119915785935f9561199c575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa918215611991575f9261197b57505090565b6113829250803d106104d5576104c7818361127c565b6040513d5f823e3d90fd5b6064929195506119b890853d87116107af576107a0818361127c565b949091611926565b505050600190565b5f828152600182016020526040902054611a1a578054906801000000000000000082101561124f5782611a0561186a846001809601855584611794565b90558054925f520160205260405f2055600190565b50505f9056fea26469706673582212208dc0e4743e12ee5f0d77b67b9e416275d12bb9532fbad2e7db007a9e72871de864736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x11E JUMPI PUSH1 0x1F PUSH2 0x1B8D CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x122 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x11E JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x11E JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x11E JUMPI DUP1 ISZERO PUSH2 0x10B JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xFC JUMPI PUSH1 0xA0 MSTORE PUSH1 0x1 PUSH1 0x2 SSTORE PUSH2 0x1A56 SWAP1 DUP2 PUSH2 0x137 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x1442 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x161 ADD MSTORE DUP2 DUP2 PUSH2 0x29B ADD MSTORE DUP2 DUP2 PUSH2 0x5C2 ADD MSTORE DUP2 DUP2 PUSH2 0x74B ADD MSTORE DUP2 DUP2 PUSH2 0xD93 ADD MSTORE PUSH2 0x18F4 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x182551DA EQ PUSH2 0x11A8 JUMPI DUP3 PUSH4 0x255DAE41 EQ PUSH2 0x1168 JUMPI DUP3 PUSH4 0x25C427ED EQ PUSH2 0x1125 JUMPI DUP3 PUSH4 0x2DA55A1D EQ PUSH2 0x105D JUMPI DUP3 PUSH4 0x3700F987 EQ PUSH2 0xFA9 JUMPI DUP3 PUSH4 0x3E035F9B EQ PUSH2 0xD0B JUMPI DUP3 PUSH4 0x62D53462 EQ PUSH2 0xCDA JUMPI DUP3 PUSH4 0x715018A6 EQ PUSH2 0xC55 JUMPI DUP3 PUSH4 0x79BA5097 EQ PUSH2 0xBF1 JUMPI DUP3 PUSH4 0x7C1EC460 EQ PUSH2 0xAA5 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0xA5C JUMPI DUP3 PUSH4 0x8C60EBD0 EQ PUSH2 0x916 JUMPI DUP3 PUSH4 0x8DA5CB5B EQ PUSH2 0x8E3 JUMPI DUP3 PUSH4 0x94FC4058 EQ PUSH2 0x863 JUMPI DUP3 PUSH4 0xA89B1128 EQ PUSH2 0x7C0 JUMPI POP DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x6F7 JUMPI DUP2 PUSH4 0xC482E822 EQ PUSH2 0x6D9 JUMPI DUP2 PUSH4 0xCE998ABA EQ PUSH2 0x6B5 JUMPI DUP2 PUSH4 0xD15126BA EQ PUSH2 0x559 JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x524 JUMPI DUP2 PUSH4 0xE909C19B EQ PUSH2 0x4E6 JUMPI DUP2 PUSH4 0xEBF3A8D0 EQ PUSH2 0x25D JUMPI DUP2 PUSH4 0xF167A1E6 EQ PUSH2 0x21B JUMPI POP DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x189 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x136 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x218 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x218 JUMPI PUSH2 0x1A3 PUSH2 0x1210 JUMP JUMPDEST PUSH2 0x1AB PUSH2 0x155F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE DUP3 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x259 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x259 JUMPI DUP2 PUSH1 0x20 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x3 DUP6 MSTORE KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x259 JUMPI PUSH2 0x26E CALLDATASIZE PUSH2 0x1352 JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x278 PUSH2 0x155F JUMP JUMPDEST PUSH2 0x281 DUP4 PUSH2 0x14FA JUMP JUMPDEST DUP2 MLOAD SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 DUP8 JUMPDEST DUP8 DUP2 LT PUSH2 0x2CA JUMPI DUP9 DUP1 RETURN JUMPDEST DUP3 PUSH2 0x2D5 DUP3 DUP5 PUSH2 0x13D6 JUMP JUMPDEST MLOAD AND DUP6 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP14 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x4DC JUMPI DUP14 SWAP2 PUSH2 0x4AF JUMPI JUMPDEST POP ISZERO PUSH2 0x485 JUMPI PUSH2 0x334 DUP4 DUP10 DUP15 DUP14 DUP2 MSTORE PUSH1 0x5 DUP6 MSTORE KECCAK256 PUSH2 0x19C8 JUMP JUMPDEST ISZERO PUSH2 0x457 JUMPI DUP12 DUP9 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP5 DUP10 DUP3 ADD MSTORE DUP1 DUP12 DUP2 DUP7 PUSH1 0x60 SWAP4 DUP5 SWAP4 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x44C JUMPI SWAP1 DUP10 SWAP5 SWAP4 SWAP3 SWAP2 SWAP3 PUSH2 0x3E4 JUMPI JUMPDEST POP POP ADD MLOAD AND PUSH2 0x3BB JUMPI POP SWAP1 DUP8 PUSH1 0x1 SWAP3 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 DUP13 DUP1 LOG3 ADD PUSH2 0x2BF JUMP JUMPDEST DUP11 DUP3 DUP8 PUSH32 0xF043494A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST DUP2 SWAP5 POP DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x445 JUMPI JUMPDEST PUSH2 0x3FC DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x441 JUMPI DUP7 SWAP2 PUSH2 0x436 DUP11 DUP1 MLOAD SWAP3 PUSH2 0x416 DUP5 PUSH2 0x1233 JUMP JUMPDEST PUSH2 0x41F DUP2 PUSH2 0x1773 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x42C DUP6 DUP3 ADD PUSH2 0x1773 JUMP JUMPDEST DUP6 DUP6 ADD MSTORE ADD PUSH2 0x1773 JUMP JUMPDEST DUP11 DUP3 ADD MSTORE PUSH0 DUP1 PUSH2 0x382 JUMP JUMPDEST DUP13 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x3F2 JUMP JUMPDEST DUP12 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x44 DUP13 DUP12 DUP5 DUP7 DUP12 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE MSTORE MSTORE REVERT JUMPDEST POP DUP11 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH2 0x4CF SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D5 JUMPI JUMPDEST PUSH2 0x4C7 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x14E2 JUMP JUMPDEST PUSH0 PUSH2 0x31B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4BD JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x51D PUSH2 0x507 PUSH2 0x1210 JUMP JUMPDEST PUSH2 0x50F PUSH2 0x155F JUMP JUMPDEST PUSH2 0x518 DUP2 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x166C JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x185 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x683 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0x574 PUSH2 0x1210 JUMP JUMPDEST SWAP2 PUSH2 0x57D PUSH2 0x162E JUMP JUMPDEST SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP4 PUSH2 0x5BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP1 SWAP7 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x687 JUMPI POP PUSH32 0x0 AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x683 JUMPI PUSH0 SWAP4 PUSH1 0x44 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 SWAP4 DUP5 SWAP3 PUSH32 0xD15126BA00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP8 DUP5 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x24 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x679 JUMPI PUSH2 0x636 JUMPI DUP4 DUP1 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x64D JUMPI POP MSTORE STOP JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP5 DUP4 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 CALLER PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7B6 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x787 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x7A8 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x7AF JUMPI JUMPDEST PUSH2 0x7A0 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x14B6 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x77F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x796 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0x80E PUSH2 0x807 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x800 PUSH2 0x1210 JUMP JUMPDEST SWAP4 AND PUSH2 0x1417 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x189D JUMP JUMPDEST ISZERO PUSH2 0x83C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x83C JUMPI PUSH2 0x83A SWAP1 PUSH2 0x1701 JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI CALLDATALOAD PUSH2 0x883 DUP2 PUSH2 0x14FA JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x8CC JUMPI PUSH2 0x8C8 DUP7 DUP7 PUSH2 0x8BE DUP3 DUP12 SUB DUP4 PUSH2 0x127C JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1385 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x8A6 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x93C DUP5 PUSH2 0x14FA JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0xA52 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0xA47 JUMPI JUMPDEST POP PUSH2 0xA1C JUMPI POP PUSH2 0x970 DUP4 DUP6 PUSH2 0x147C JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x9B3 PUSH2 0x99E DUP9 PUSH2 0x12BD JUMP JUMPDEST SWAP8 PUSH2 0x9AB DUP11 MLOAD SWAP10 DUP11 PUSH2 0x127C JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x12BD JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x9D0 JUMPI DUP8 MLOAD DUP1 PUSH2 0x8C8 DUP10 DUP3 PUSH2 0x1385 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x9FA DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0xA15 PUSH2 0xA0F DUP9 DUP5 PUSH2 0x147C JUMP JUMPDEST DUP11 PUSH2 0x13D6 JUMP JUMPDEST MSTORE ADD PUSH2 0x9BC JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x960 JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x959 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x683 JUMPI PUSH2 0x51D PUSH1 0x20 SWAP3 PUSH2 0x1417 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0xAC5 PUSH2 0x155F JUMP JUMPDEST PUSH2 0xACE DUP4 PUSH2 0x14FA JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0xB91 JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0xB74 JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAF8 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xB7E JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0xBEB PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xBB7 DUP4 DUP7 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x17A9 JUMP JUMPDEST POP PUSH2 0xADC JUMP JUMPDEST POP CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0xC2A JUMPI PUSH2 0x83A CALLER PUSH2 0x1701 JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0xC6D PUSH2 0x155F JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xCFA DUP2 PUSH2 0x14FA JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0xD25 PUSH2 0x1210 JUMP JUMPDEST SWAP2 PUSH1 0x24 SWAP3 DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x683 JUMPI PUSH2 0xD4A PUSH2 0xD53 SWAP2 CALLDATASIZE SWAP1 DUP7 ADD PUSH2 0x12D5 JUMP JUMPDEST SWAP2 PUSH2 0x50F PUSH2 0x155F JUMP JUMPDEST SWAP3 DUP2 MLOAD PUSH2 0xD65 JUMPI JUMPDEST PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xD6D PUSH2 0x155F JUMP JUMPDEST PUSH2 0xD76 DUP5 PUSH2 0x14FA JUMP JUMPDEST DUP2 MLOAD SWAP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 PUSH32 0x0 AND SWAP2 JUMPDEST DUP6 DUP2 LT PUSH2 0xDC5 JUMPI POP POP POP POP PUSH2 0xD5B JUMP JUMPDEST DUP4 PUSH2 0xDD0 DUP3 DUP5 PUSH2 0x13D6 JUMP JUMPDEST MLOAD AND DUP8 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP8 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP14 DUP2 DUP10 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xF9F JUMPI PUSH0 SWAP2 PUSH2 0xF82 JUMPI JUMPDEST POP ISZERO PUSH2 0xF58 JUMPI DUP10 PUSH0 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH2 0xE2D DUP3 DUP11 PUSH0 KECCAK256 PUSH2 0x19C8 JUMP JUMPDEST ISZERO PUSH2 0xF2A JUMPI DUP9 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP9 DUP3 ADD MSTORE DUP1 DUP13 PUSH1 0x60 SWAP3 DUP4 SWAP2 DUP2 DUP11 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xF20 JUMPI SWAP1 DUP9 SWAP4 SWAP3 SWAP2 PUSH0 SWAP3 PUSH2 0xEDC JUMPI JUMPDEST POP POP ADD MLOAD AND PUSH2 0xEB2 JUMPI SWAP1 DUP9 PUSH1 0x1 SWAP3 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xDB5 JUMP JUMPDEST DUP10 SWAP1 DUP7 PUSH32 0xF043494A00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP2 SWAP5 POP DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xF19 JUMPI JUMPDEST PUSH2 0xEF4 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x683 JUMPI DUP7 SWAP2 PUSH2 0xF0E DUP12 DUP1 MLOAD SWAP3 PUSH2 0x416 DUP5 PUSH2 0x1233 JUMP JUMPDEST DUP12 DUP3 ADD MSTORE DUP14 DUP1 PUSH2 0xE7A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xEEA JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP10 DUP12 DUP4 DUP10 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP11 DUP3 DUP9 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xF99 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D5 JUMPI PUSH2 0x4C7 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP13 PUSH2 0xE14 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0xFC4 PUSH2 0x1210 JUMP JUMPDEST SWAP2 PUSH2 0xFCE DUP4 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0xFD6 PUSH2 0x162E JUMP JUMPDEST SWAP2 DUP3 SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH2 0x106D CALLDATASIZE PUSH2 0x1352 JUMP JUMPDEST SWAP2 PUSH2 0x1076 PUSH2 0x155F JUMP JUMPDEST PUSH2 0x107F DUP3 PUSH2 0x14FA JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x108D JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x10AC DUP3 DUP5 PUSH2 0x13D6 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0x10C2 DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x17A9 JUMP JUMPDEST ISZERO PUSH2 0x10F6 JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0x1084 JUMP JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1158 PUSH2 0x1210 JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x683 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1207 PUSH2 0x11C7 PUSH2 0x1210 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x11D3 DUP2 PUSH2 0x14FA JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x683 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x124F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x124F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x124F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x12EF DUP2 PUSH2 0x12BD JUMP JUMPDEST SWAP4 PUSH2 0x12FD PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x127C JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x683 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1326 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x683 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1318 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x683 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x683 JUMPI PUSH2 0x1382 SWAP2 PUSH1 0x4 ADD PUSH2 0x12D5 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x13AC JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x139E JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x13EA JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x1476 DUP2 PUSH2 0x1233 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1489 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x683 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x683 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x683 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x683 JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x1535 JUMPI JUMPDEST PUSH2 0x150A JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x1503 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x157F JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x1606 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x15DB JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLER PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x1644 JUMPI JUMP JUMPDEST PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x1489 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x683 JUMPI JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x13EA JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x1895 JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x1489 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x1489 JUMPI DUP2 DUP2 SUB PUSH2 0x184A JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x181D JUMPI DUP3 ADD SWAP2 PUSH2 0x17FF DUP4 DUP4 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x1880 PUSH2 0x185A PUSH2 0x186A SWAP4 DUP7 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x1794 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x17E7 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x19C0 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x1991 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x199C JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1991 JUMPI PUSH0 SWAP3 PUSH2 0x197B JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1382 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x4D5 JUMPI PUSH2 0x4C7 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x19B8 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x7AF JUMPI PUSH2 0x7A0 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1926 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1A1A JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0x124F JUMPI DUP3 PUSH2 0x1A05 PUSH2 0x186A DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 0xC0 0xE4 PUSH21 0x3E12EE5F0D77B67B9E416275D12BB9532FBAD2E7DB STOP PUSH27 0x9E72871DE864736F6C634300081B00330000000000000000000000 ","sourceMap":"332:1205:84:-:0;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;-1:-1:-1;;;;;332:1205:84;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;332:1205:84;;;;;;;;;;;;;;;;;;;;;1273:26:49;;1269:95;;332:1205:84;;;;;;;;2093:20:50;332:1205:84;;2093:20:50;332:1205:84;;-1:-1:-1;332:1205:84;;;;;-1:-1:-1;332:1205:84;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1524:4:81;1347:46:33;;1548:29:81;1544:80;;1634:14;;2093:20:50;853:1:82;332:1205:84;;;;;;;1347:46:33;332:1205:84;;;;;1634:14:81;332:1205:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1544:80:81;1600:13;;;-1:-1:-1;1600:13:81;;-1:-1:-1;1600:13:81;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;332:1205:84;;-1:-1:-1;1322:31:49;332:1205:84;-1:-1:-1;332:1205:84;;;;;;-1:-1:-1;332:1205:84;;;;;-1:-1:-1;332:1205:84"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":4624,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":6003,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn":{"entryPoint":4821,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":5346,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":5302,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_array_address_dyn":{"entryPoint":4946,"id":null,"parameterSlots":1,"returnSlots":2},"abi_encode_array_address_dyn":{"entryPoint":4997,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":4797,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":5244,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":4732,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_17076":{"entryPoint":4659,"id":null,"parameterSlots":1,"returnSlots":0},"fun_add":{"entryPoint":6600,"id":16149,"parameterSlots":2,"returnSlots":1},"fun_canPerform":{"entryPoint":6301,"id":20329,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":5471,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_contains":{"entryPoint":null,"id":16295,"parameterSlots":2,"returnSlots":1},"fun_createPoolSet":{"entryPoint":5740,"id":20497,"parameterSlots":1,"returnSlots":1},"fun_ensureValidManager":{"entryPoint":5547,"id":21004,"parameterSlots":1,"returnSlots":0},"fun_ensureValidPoolSet":{"entryPoint":5370,"id":21058,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":5143,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_getValidPoolSetId":{"entryPoint":5678,"id":20976,"parameterSlots":0,"returnSlots":1},"fun_remove":{"entryPoint":6057,"id":16233,"parameterSlots":2,"returnSlots":1},"fun_transferOwnership":{"entryPoint":5889,"id":9547,"parameterSlots":1,"returnSlots":0},"memory_array_index_access_address_dyn":{"entryPoint":5078,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_bytes32_dyn":{"entryPoint":6036,"id":null,"parameterSlots":2,"returnSlots":2},"update_byte_slice_dynamic32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":5186}],"20218":[{"length":32,"start":353},{"length":32,"start":667},{"length":32,"start":1474},{"length":32,"start":1867},{"length":32,"start":3475},{"length":32,"start":6388}]},"linkReferences":{},"object":"60406080815260049081361015610014575f80fd5b5f915f35908160e01c918263182551da146111a8578263255dae411461116857826325c427ed146111255782632da55a1d1461105d5782633700f98714610fa95782633e035f9b14610d0b57826362d5346214610cda578263715018a614610c5557826379ba509714610bf15782637c1ec46014610aa5578263851c1bb314610a5c5782638c60ebd0146109165782638da5cb5b146108e357826394fc405814610863578263a89b1128146107c057508163aaabadc5146106f7578163c482e822146106d9578163ce998aba146106b5578163d15126ba14610559578163e30c397814610524578163e909c19b146104e6578163ebf3a8d01461025d578163f167a1e61461021b57508063f2fde38b146101895763fbfa77cf14610136575f80fd5b346101855781600319360112610185576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b8234610218576020600319360112610218576101a3611210565b6101ab61155f565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b905034610259576020600319360112610259578160209373ffffffffffffffffffffffffffffffffffffffff92358152600385522054169051908152f35b8280fd5b919050346102595761026e36611352565b909161027861155f565b610281836114fa565b81519373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811693875b8781106102ca578880f35b826102d582846113d6565b511685517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818d5afa9081156104dc578d916104af575b50156104855761033483898e8d815260058552206119c8565b15610457578b88517fe9ddeb260000000000000000000000000000000000000000000000000000000081528489820152808b818660609384935afa92831561044c57908994939291926103e4575b50500151166103bb575090876001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b698c80a3016102bf565b8a82877ff043494a00000000000000000000000000000000000000000000000000000000835252fd5b8194508092503d8311610445575b6103fc818361127c565b810103126104415786916104368a80519261041684611233565b61041f81611773565b845261042c858201611773565b8585015201611773565b8a8201525f80610382565b8c80fd5b503d6103f2565b8b51903d90823e3d90fd5b60448c8b84868b7f5a17aa8d0000000000000000000000000000000000000000000000000000000085525252fd5b508a82877f9e51bd5c00000000000000000000000000000000000000000000000000000000835252fd5b6104cf9150823d84116104d5575b6104c7818361127c565b8101906114e2565b5f61031b565b503d6104bd565b89513d8f823e3d90fd5b5050346101855760206003193601126101855760209061051d610507611210565b61050f61155f565b610518816115ab565b61166c565b9051908152f35b50503461018557816003193601126101855760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b91905034610683578060031936011261068357610574611210565b9161057d61162e565b92835f526005602052825f20936105ba73ffffffffffffffffffffffffffffffffffffffff80931680966001915f520160205260405f2054151590565b1561068757507f00000000000000000000000000000000000000000000000000000000000000001692833b15610683575f9360448592855196879384927fd15126ba0000000000000000000000000000000000000000000000000000000084528784015260243560248401525af1801561067957610636578380f35b9091925067ffffffffffffffff831161064d575052005b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b82513d5f823e3d90fd5b5f80fd5b84837f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b8234610683575f60031936011261068357602091335f528252805f20549051908152f35b8234610683575f600319360112610683576020906002549051908152f35b905034610683575f6003193601126106835773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa9182156107b657926020935f93610787575b505191168152f35b6107a8919350843d86116107af575b6107a0818361127c565b8101906114b6565b918461077f565b503d610796565b83513d5f823e3d90fd5b346106835760206003193601126106835761080e6108077fffffffff00000000000000000000000000000000000000000000000000000000610800611210565b9316611417565b339061189d565b1561083c5773ffffffffffffffffffffffffffffffffffffffff5f5416331461083c5761083a90611701565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b8382346106835760209060206003193601126106835735610883816114fa565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b8282106108cc576108c886866108be828b038361127c565b5191829182611385565b0390f35b8354875295860195600193840193909101906108a6565b8334610683575f6003193601126106835760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b838234610683576060600319360112610683578035906024356044359161093c846114fa565b835f526005906020906005602052865f2054858511908115610a52575b8115610a47575b50610a1c5750610970838561147c565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06109b361099e886112bd565b976109ab8a51998a61127c565b8089526112bd565b01366020880137835b8581106109d0578751806108c88982611385565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff6109fa828b5f20611794565b90549060031b1c16610a15610a0f888461147c565b8a6113d6565b52016109bc565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b905084101588610960565b8087119150610959565b8382346106835760206003193601126106835735907fffffffff00000000000000000000000000000000000000000000000000000000821682036106835761051d602092611417565b838234610683576020918260031936011261068357813591610ac561155f565b610ace836114fa565b825f5260058452815f208054805b610b91575050825f5260058452815f208054905f815581610b74575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610af8575f8155600101610b7e565b5f190180610beb73ffffffffffffffffffffffffffffffffffffffff610bb78386611794565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a3846117a9565b50610adc565b5034610683575f600319360112610683573373ffffffffffffffffffffffffffffffffffffffff6001541603610c2a5761083a33611701565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b34610683575f60031936011261068357610c6d61155f565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b5082346106835760206003193601126106835760209135610cfa816114fa565b5f5260058252805f20549051908152f35b838234610683578160031936011261068357610d25611210565b91602492833567ffffffffffffffff811161068357610d4a610d5391369086016112d5565b9161050f61155f565b928151610d65575b6020848451908152f35b610d6d61155f565b610d76846114fa565b8151915f73ffffffffffffffffffffffffffffffffffffffff91827f000000000000000000000000000000000000000000000000000000000000000016915b858110610dc55750505050610d5b565b83610dd082846113d6565b511687517fc673bdaf000000000000000000000000000000000000000000000000000000008152818782015260209081818d81895afa908115610f9f575f91610f82575b5015610f5857895f5260058152610e2d828a5f206119c8565b15610f2a5788517fe9ddeb260000000000000000000000000000000000000000000000000000000081528288820152808c6060928391818a5afa918215610f205790889392915f92610edc575b5050015116610eb25790886001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610db5565b8990867ff043494a000000000000000000000000000000000000000000000000000000005f52525ffd5b8194508092503d8311610f19575b610ef4818361127c565b81010312610683578691610f0e8b80519261041684611233565b8b8201528d80610e7a565b503d610eea565b8b513d5f823e3d90fd5b898b83897f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8a82887f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610f999150823d84116104d5576104c7818361127c565b8c610e14565b8a513d5f823e3d90fd5b50823461068357602060031936011261068357610fc4611210565b91610fce836115ab565b610fd661162e565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b5082346106835761106d36611352565b9161107661155f565b61107f826114fa565b8251925f5b84811061108d57005b73ffffffffffffffffffffffffffffffffffffffff6110ac82846113d6565b5116845f5260056020526110c281855f206117a9565b156110f65790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301611084565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b5082346106835760206003193601126106835760209173ffffffffffffffffffffffffffffffffffffffff611158611210565b165f528252805f20549051908152f35b50823461068357602060031936011261068357602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b83346106835780600319360112610683576020906112076111c7611210565b6024356111d3816114fa565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361068357565b6060810190811067ffffffffffffffff82111761124f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761124f57604052565b67ffffffffffffffff811161124f5760051b60200190565b9080601f830112156106835760209082356112ef816112bd565b936112fd604051958661127c565b81855260208086019260051b82010192831161068357602001905b828210611326575050505090565b813573ffffffffffffffffffffffffffffffffffffffff81168103610683578152908301908301611318565b90604060031983011261068357600435916024359067ffffffffffffffff821161068357611382916004016112d5565b90565b60209060206040818301928281528551809452019301915f5b8281106113ac575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161139e565b80518210156113ea5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f000000000000000000000000000000000000000000000000000000000000000084521660408201526024815261147681611233565b51902090565b9190820391821161148957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90816020910312610683575173ffffffffffffffffffffffffffffffffffffffff811681036106835790565b90816020910312610683575180151581036106835790565b80158015611535575b61150a5750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20541615611503565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361157f57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff16801561160657805f52600460205260405f20546115db5750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561164457565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611489576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b519073ffffffffffffffffffffffffffffffffffffffff8216820361068357565b80548210156113ea575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f14611895575f1991828101818111611489578254908482019182116114895781810361184a575b5050508054801561181d578201916117ff8383611794565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61188061185a61186a9386611794565b90549060031b1c92839286611794565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806117e7565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146119c057604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156119915785935f9561199c575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa918215611991575f9261197b57505090565b6113829250803d106104d5576104c7818361127c565b6040513d5f823e3d90fd5b6064929195506119b890853d87116107af576107a0818361127c565b949091611926565b505050600190565b5f828152600182016020526040902054611a1a578054906801000000000000000082101561124f5782611a0561186a846001809601855584611794565b90558054925f520160205260405f2055600190565b50505f9056fea26469706673582212208dc0e4743e12ee5f0d77b67b9e416275d12bb9532fbad2e7db007a9e72871de864736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x182551DA EQ PUSH2 0x11A8 JUMPI DUP3 PUSH4 0x255DAE41 EQ PUSH2 0x1168 JUMPI DUP3 PUSH4 0x25C427ED EQ PUSH2 0x1125 JUMPI DUP3 PUSH4 0x2DA55A1D EQ PUSH2 0x105D JUMPI DUP3 PUSH4 0x3700F987 EQ PUSH2 0xFA9 JUMPI DUP3 PUSH4 0x3E035F9B EQ PUSH2 0xD0B JUMPI DUP3 PUSH4 0x62D53462 EQ PUSH2 0xCDA JUMPI DUP3 PUSH4 0x715018A6 EQ PUSH2 0xC55 JUMPI DUP3 PUSH4 0x79BA5097 EQ PUSH2 0xBF1 JUMPI DUP3 PUSH4 0x7C1EC460 EQ PUSH2 0xAA5 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0xA5C JUMPI DUP3 PUSH4 0x8C60EBD0 EQ PUSH2 0x916 JUMPI DUP3 PUSH4 0x8DA5CB5B EQ PUSH2 0x8E3 JUMPI DUP3 PUSH4 0x94FC4058 EQ PUSH2 0x863 JUMPI DUP3 PUSH4 0xA89B1128 EQ PUSH2 0x7C0 JUMPI POP DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x6F7 JUMPI DUP2 PUSH4 0xC482E822 EQ PUSH2 0x6D9 JUMPI DUP2 PUSH4 0xCE998ABA EQ PUSH2 0x6B5 JUMPI DUP2 PUSH4 0xD15126BA EQ PUSH2 0x559 JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x524 JUMPI DUP2 PUSH4 0xE909C19B EQ PUSH2 0x4E6 JUMPI DUP2 PUSH4 0xEBF3A8D0 EQ PUSH2 0x25D JUMPI DUP2 PUSH4 0xF167A1E6 EQ PUSH2 0x21B JUMPI POP DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x189 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x136 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x218 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x218 JUMPI PUSH2 0x1A3 PUSH2 0x1210 JUMP JUMPDEST PUSH2 0x1AB PUSH2 0x155F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE DUP3 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x259 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x259 JUMPI DUP2 PUSH1 0x20 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x3 DUP6 MSTORE KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x259 JUMPI PUSH2 0x26E CALLDATASIZE PUSH2 0x1352 JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x278 PUSH2 0x155F JUMP JUMPDEST PUSH2 0x281 DUP4 PUSH2 0x14FA JUMP JUMPDEST DUP2 MLOAD SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 DUP8 JUMPDEST DUP8 DUP2 LT PUSH2 0x2CA JUMPI DUP9 DUP1 RETURN JUMPDEST DUP3 PUSH2 0x2D5 DUP3 DUP5 PUSH2 0x13D6 JUMP JUMPDEST MLOAD AND DUP6 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP14 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x4DC JUMPI DUP14 SWAP2 PUSH2 0x4AF JUMPI JUMPDEST POP ISZERO PUSH2 0x485 JUMPI PUSH2 0x334 DUP4 DUP10 DUP15 DUP14 DUP2 MSTORE PUSH1 0x5 DUP6 MSTORE KECCAK256 PUSH2 0x19C8 JUMP JUMPDEST ISZERO PUSH2 0x457 JUMPI DUP12 DUP9 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP5 DUP10 DUP3 ADD MSTORE DUP1 DUP12 DUP2 DUP7 PUSH1 0x60 SWAP4 DUP5 SWAP4 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x44C JUMPI SWAP1 DUP10 SWAP5 SWAP4 SWAP3 SWAP2 SWAP3 PUSH2 0x3E4 JUMPI JUMPDEST POP POP ADD MLOAD AND PUSH2 0x3BB JUMPI POP SWAP1 DUP8 PUSH1 0x1 SWAP3 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 DUP13 DUP1 LOG3 ADD PUSH2 0x2BF JUMP JUMPDEST DUP11 DUP3 DUP8 PUSH32 0xF043494A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST DUP2 SWAP5 POP DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x445 JUMPI JUMPDEST PUSH2 0x3FC DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x441 JUMPI DUP7 SWAP2 PUSH2 0x436 DUP11 DUP1 MLOAD SWAP3 PUSH2 0x416 DUP5 PUSH2 0x1233 JUMP JUMPDEST PUSH2 0x41F DUP2 PUSH2 0x1773 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x42C DUP6 DUP3 ADD PUSH2 0x1773 JUMP JUMPDEST DUP6 DUP6 ADD MSTORE ADD PUSH2 0x1773 JUMP JUMPDEST DUP11 DUP3 ADD MSTORE PUSH0 DUP1 PUSH2 0x382 JUMP JUMPDEST DUP13 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x3F2 JUMP JUMPDEST DUP12 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x44 DUP13 DUP12 DUP5 DUP7 DUP12 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE MSTORE MSTORE REVERT JUMPDEST POP DUP11 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH2 0x4CF SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D5 JUMPI JUMPDEST PUSH2 0x4C7 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x14E2 JUMP JUMPDEST PUSH0 PUSH2 0x31B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4BD JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x51D PUSH2 0x507 PUSH2 0x1210 JUMP JUMPDEST PUSH2 0x50F PUSH2 0x155F JUMP JUMPDEST PUSH2 0x518 DUP2 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x166C JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x185 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x683 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0x574 PUSH2 0x1210 JUMP JUMPDEST SWAP2 PUSH2 0x57D PUSH2 0x162E JUMP JUMPDEST SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP4 PUSH2 0x5BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP1 SWAP7 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x687 JUMPI POP PUSH32 0x0 AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x683 JUMPI PUSH0 SWAP4 PUSH1 0x44 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 SWAP4 DUP5 SWAP3 PUSH32 0xD15126BA00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP8 DUP5 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x24 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x679 JUMPI PUSH2 0x636 JUMPI DUP4 DUP1 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x64D JUMPI POP MSTORE STOP JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP5 DUP4 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 CALLER PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7B6 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x787 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x7A8 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x7AF JUMPI JUMPDEST PUSH2 0x7A0 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x14B6 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x77F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x796 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0x80E PUSH2 0x807 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x800 PUSH2 0x1210 JUMP JUMPDEST SWAP4 AND PUSH2 0x1417 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x189D JUMP JUMPDEST ISZERO PUSH2 0x83C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x83C JUMPI PUSH2 0x83A SWAP1 PUSH2 0x1701 JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI CALLDATALOAD PUSH2 0x883 DUP2 PUSH2 0x14FA JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x8CC JUMPI PUSH2 0x8C8 DUP7 DUP7 PUSH2 0x8BE DUP3 DUP12 SUB DUP4 PUSH2 0x127C JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1385 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x8A6 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x93C DUP5 PUSH2 0x14FA JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0xA52 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0xA47 JUMPI JUMPDEST POP PUSH2 0xA1C JUMPI POP PUSH2 0x970 DUP4 DUP6 PUSH2 0x147C JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x9B3 PUSH2 0x99E DUP9 PUSH2 0x12BD JUMP JUMPDEST SWAP8 PUSH2 0x9AB DUP11 MLOAD SWAP10 DUP11 PUSH2 0x127C JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x12BD JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x9D0 JUMPI DUP8 MLOAD DUP1 PUSH2 0x8C8 DUP10 DUP3 PUSH2 0x1385 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x9FA DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0xA15 PUSH2 0xA0F DUP9 DUP5 PUSH2 0x147C JUMP JUMPDEST DUP11 PUSH2 0x13D6 JUMP JUMPDEST MSTORE ADD PUSH2 0x9BC JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x960 JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x959 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x683 JUMPI PUSH2 0x51D PUSH1 0x20 SWAP3 PUSH2 0x1417 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0xAC5 PUSH2 0x155F JUMP JUMPDEST PUSH2 0xACE DUP4 PUSH2 0x14FA JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0xB91 JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0xB74 JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAF8 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xB7E JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0xBEB PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xBB7 DUP4 DUP7 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x17A9 JUMP JUMPDEST POP PUSH2 0xADC JUMP JUMPDEST POP CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0xC2A JUMPI PUSH2 0x83A CALLER PUSH2 0x1701 JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0xC6D PUSH2 0x155F JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xCFA DUP2 PUSH2 0x14FA JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0xD25 PUSH2 0x1210 JUMP JUMPDEST SWAP2 PUSH1 0x24 SWAP3 DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x683 JUMPI PUSH2 0xD4A PUSH2 0xD53 SWAP2 CALLDATASIZE SWAP1 DUP7 ADD PUSH2 0x12D5 JUMP JUMPDEST SWAP2 PUSH2 0x50F PUSH2 0x155F JUMP JUMPDEST SWAP3 DUP2 MLOAD PUSH2 0xD65 JUMPI JUMPDEST PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xD6D PUSH2 0x155F JUMP JUMPDEST PUSH2 0xD76 DUP5 PUSH2 0x14FA JUMP JUMPDEST DUP2 MLOAD SWAP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 PUSH32 0x0 AND SWAP2 JUMPDEST DUP6 DUP2 LT PUSH2 0xDC5 JUMPI POP POP POP POP PUSH2 0xD5B JUMP JUMPDEST DUP4 PUSH2 0xDD0 DUP3 DUP5 PUSH2 0x13D6 JUMP JUMPDEST MLOAD AND DUP8 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP8 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP14 DUP2 DUP10 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xF9F JUMPI PUSH0 SWAP2 PUSH2 0xF82 JUMPI JUMPDEST POP ISZERO PUSH2 0xF58 JUMPI DUP10 PUSH0 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH2 0xE2D DUP3 DUP11 PUSH0 KECCAK256 PUSH2 0x19C8 JUMP JUMPDEST ISZERO PUSH2 0xF2A JUMPI DUP9 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP9 DUP3 ADD MSTORE DUP1 DUP13 PUSH1 0x60 SWAP3 DUP4 SWAP2 DUP2 DUP11 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xF20 JUMPI SWAP1 DUP9 SWAP4 SWAP3 SWAP2 PUSH0 SWAP3 PUSH2 0xEDC JUMPI JUMPDEST POP POP ADD MLOAD AND PUSH2 0xEB2 JUMPI SWAP1 DUP9 PUSH1 0x1 SWAP3 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xDB5 JUMP JUMPDEST DUP10 SWAP1 DUP7 PUSH32 0xF043494A00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP2 SWAP5 POP DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xF19 JUMPI JUMPDEST PUSH2 0xEF4 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x683 JUMPI DUP7 SWAP2 PUSH2 0xF0E DUP12 DUP1 MLOAD SWAP3 PUSH2 0x416 DUP5 PUSH2 0x1233 JUMP JUMPDEST DUP12 DUP3 ADD MSTORE DUP14 DUP1 PUSH2 0xE7A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xEEA JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP10 DUP12 DUP4 DUP10 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP11 DUP3 DUP9 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xF99 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D5 JUMPI PUSH2 0x4C7 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP13 PUSH2 0xE14 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0xFC4 PUSH2 0x1210 JUMP JUMPDEST SWAP2 PUSH2 0xFCE DUP4 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0xFD6 PUSH2 0x162E JUMP JUMPDEST SWAP2 DUP3 SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH2 0x106D CALLDATASIZE PUSH2 0x1352 JUMP JUMPDEST SWAP2 PUSH2 0x1076 PUSH2 0x155F JUMP JUMPDEST PUSH2 0x107F DUP3 PUSH2 0x14FA JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x108D JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x10AC DUP3 DUP5 PUSH2 0x13D6 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0x10C2 DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x17A9 JUMP JUMPDEST ISZERO PUSH2 0x10F6 JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0x1084 JUMP JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1158 PUSH2 0x1210 JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x683 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1207 PUSH2 0x11C7 PUSH2 0x1210 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x11D3 DUP2 PUSH2 0x14FA JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x683 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x124F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x124F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x124F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x12EF DUP2 PUSH2 0x12BD JUMP JUMPDEST SWAP4 PUSH2 0x12FD PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x127C JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x683 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1326 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x683 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1318 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x683 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x683 JUMPI PUSH2 0x1382 SWAP2 PUSH1 0x4 ADD PUSH2 0x12D5 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x13AC JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x139E JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x13EA JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x1476 DUP2 PUSH2 0x1233 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1489 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x683 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x683 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x683 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x683 JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x1535 JUMPI JUMPDEST PUSH2 0x150A JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x1503 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x157F JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x1606 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x15DB JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLER PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x1644 JUMPI JUMP JUMPDEST PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x1489 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x683 JUMPI JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x13EA JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x1895 JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x1489 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x1489 JUMPI DUP2 DUP2 SUB PUSH2 0x184A JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x181D JUMPI DUP3 ADD SWAP2 PUSH2 0x17FF DUP4 DUP4 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x1880 PUSH2 0x185A PUSH2 0x186A SWAP4 DUP7 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x1794 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x17E7 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x19C0 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x1991 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x199C JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1991 JUMPI PUSH0 SWAP3 PUSH2 0x197B JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1382 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x4D5 JUMPI PUSH2 0x4C7 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x19B8 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x7AF JUMPI PUSH2 0x7A0 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1926 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1A1A JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0x124F JUMPI DUP3 PUSH2 0x1A05 PUSH2 0x186A DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 0xC0 0xE4 PUSH21 0x3E12EE5F0D77B67B9E416275D12BB9532FBAD2E7DB STOP PUSH27 0x9E72871DE864736F6C634300081B00330000000000000000000000 ","sourceMap":"332:1205:84:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21:81;332:1205:84;1810:21:81;;;332:1205:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;;1348:29:81;332:1205:84;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;:::i;:::-;1500:62:49;;:::i;:::-;332:1205:84;;;;;;;1738:24:50;332:1205:84;;;1738:24:50;332:1205:84;;;;1777:43:50;;;;332:1205:84;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;;;;;;8417:16:82;332:1205:84;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1500:62:49;;;;:::i;:::-;1515:9:82;;;:::i;:::-;332:1205:84;;;;5232:5:82;332:1205:84;;;5088:13:82;5103:12;;;;;;332:1205:84;;;5117:3:82;5151:11;;;;;:::i;:::-;332:1205:84;;;;;5232:28:82;;;;;;332:1205:84;5232:28:82;332:1205:84;5232:28:82;;;;;;;;;;;;;;;;;5117:3;332:1205:84;;5228:119:82;;11511:50:72;332:1205:84;;;;;;5365:9:82;332:1205:84;;;11511:50:72;:::i;:::-;332:1205:84;5361:118:82;;332:1205:84;;;;1411:31;;;;;;332:1205;1411:31;;;;;;;;;;;;;;;;;;;;;;;;5117:3:82;1411:46:84;;;332:1205;;1407:122;;5610:31:82;;;332:1205:84;5610:31:82;;;;;332:1205:84;5088:13:82;;1407:122:84;1494:24;;;;;;332:1205;1494:24;1411:31;;;;;;;;;;;;;;;;;:::i;:::-;;;332:1205;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;1411:31;;;;332:1205;;;;1411:31;;;;;;332:1205;;;;;;;;;;5361:118:82;332:1205:84;5431:33:82;;;;;;;;332:1205:84;;5431:33:82;5228:119;5296:36;;;;;;;332:1205:84;5296:36:82;5232:28;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;332:1205:84;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;2554:30:82;332:1205:84;;:::i;:::-;1500:62:49;;:::i;:::-;1962:7:82;;;:::i;:::-;2554:30;:::i;:::-;332:1205:84;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;1311:13:50;332:1205:84;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;:::i;:::-;1721:20:82;;;:::i;:::-;332:1205:84;;;;9336:9:82;332:1205:84;;;;;;12473:55:72;332:1205:84;;;;12473:55:72;;5197:14;5101:129;-1:-1:-1;332:1205:84;5197:14:72;332:1205:84;;;-1:-1:-1;332:1205:84;;5197:26:72;;5101:129;;12473:55;332:1205:84;9332:111:82;;935:5:84;;332:1205;935:57;;;;;;332:1205;;;;;;;935:57;;;;;332:1205;935:57;;;;;332:1205;;;;;;;935:57;;;;;;;;332:1205;;;935:57;332:1205;;;;;;;;;-1:-1:-1;332:1205:84;;;;;;;;;;;;935:57;332:1205;;;;;;;;;935:57;332:1205;;;9332:111:82;9403:29;;;332:1205:84;9403:29:82;332:1205:84;;;;;9403:29:82;332:1205:84;;;;;;-1:-1:-1;;332:1205:84;;;;;;6549:10:82;;332:1205:84;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;8254:14:82;332:1205:84;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;1810:21:81;332:1205:84;;1810:21:81;;332:1205:84;1810:21:81;;:5;;;332:1205:84;1810:21:81;;;;;;;;;;332:1205:84;1810:21:81;;;332:1205:84;;;;;;;;1810:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;332:1205:84;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;1798:33:33;1762:20;1774:7;332:1205:84;;:::i;:::-;1774:7:33;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;332:1205:84;;;;1820:10:33;2423:21:81;2419:77;;2524:8;;;:::i;:::-;332:1205:84;2419:77:81;2467:18;;332:1205:84;2467:18:81;332:1205:84;2467:18:81;332:1205:84;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;1515:9:82;;;:::i;:::-;332:1205:84;;7533:9:82;332:1205:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;;;;;1515:9:82;;;;:::i;:::-;332:1205:84;;;7815:9:82;332:1205:84;;;7815:9:82;332:1205:84;;;;;;7859:9:82;;;:28;;;;;332:1205:84;7859:50:82;;;;332:1205:84;7855:115:82;;;8002:9;;;;;:::i;:::-;332:1205:84;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;8027:16:82;8045:6;;;;;;332:1205:84;;;;;;;:::i;8053:3:82:-;332:1205:84;;;;;;;;;5853:18:72;332:1205:84;;;;5853:18:72;:::i;:::-;332:1205:84;;;;;;;8072:44:82;8078:8;;;;:::i;:::-;8072:44;;:::i;:::-;332:1205:84;;8027:16:82;;7855:115;7932:27;;;332:1205:84;7932:27:82;332:1205:84;;;7932:27:82;7859:50;7891:18;;;;;7859:50;;;:28;7872:15;;;;-1:-1:-1;7859:28:82;;332:1205:84;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;1500:62:49;;;:::i;:::-;1515:9:82;;;:::i;:::-;332:1205:84;;;3499:9:82;332:1205:84;;;;;;;3618:237:82;3625:12;;;332:1205:84;;;;;3499:9:82;332:1205:84;;;;;;;;;;;;;;3618:237:82;332:1205:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4148:36:82;332:1205:84;4148:36:82;;332:1205:84;;;;;;;;;;;;;;;;;;;;;;;;;3618:237:82;-1:-1:-1;;332:1205:84;5853:18:72;11832:53;332:1205:84;5853:18:72;;;;:::i;:::-;332:1205:84;;;;;;;3774:35:82;;;332:1205:84;3774:35:82;;11832:53:72;;:::i;:::-;;3618:237:82;;332:1205:84;;;;;;-1:-1:-1;;332:1205:84;;;;;735:10:64;332:1205:84;1311:13:50;332:1205:84;;2339:24:50;2335:96;;2459:6;735:10:64;2459:6:50;:::i;2335:96::-;2386:34;332:1205:84;2386:34:50;735:10:64;332:1205:84;;;;2386:34:50;332:1205:84;;;;;-1:-1:-1;;332:1205:84;;;;;1500:62:49;;:::i;:::-;332:1205:84;;;;2093:20:50;332:1205:84;;2093:20:50;332:1205:84;;;;;;;;;3052:40:49;;;;332:1205:84;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;1515:9:82;;;:::i;:::-;332:1205:84;;6905:9:82;332:1205:84;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;:::i;:::-;;;;;;;;;;;;2833:30:82;332:1205:84;;;;;;:::i;:::-;1500:62:49;;;:::i;2833:30:82:-;332:1205:84;;;2874:84:82;;332:1205:84;;;;;;;;;2874:84:82;1500:62:49;;:::i;:::-;1515:9:82;;;:::i;:::-;332:1205:84;;5088:13:82;332:1205:84;;5232:5:82;;;332:1205:84;5083:569:82;5103:12;;;;;;2874:84;;;;;;5117:3;5151:11;;;;;:::i;:::-;332:1205:84;;;;;5232:28:82;;;;;;332:1205:84;;5232:28:82;;;;;;;;;;;;;332:1205:84;5232:28:82;;;5117:3;332:1205:84;;5228:119:82;;332:1205:84;;;5365:9:82;332:1205:84;;11511:50:72;332:1205:84;;;;11511:50:72;:::i;:::-;332:1205:84;5361:118:82;;332:1205:84;;;1411:31;;;;;;332:1205;1411:31;;;;;;;;;;;;;;;;;;;;332:1205;1411:31;;;5117:3:82;1411:46:84;;;332:1205;;1407:122;;5610:31:82;;332:1205:84;5610:31:82;;332:1205:84;5610:31:82;;332:1205:84;5088:13:82;;1407:122:84;1494:24;;;;332:1205;1494:24;332:1205;;1494:24;1411:31;;;;;;;;;;;;;;;;;:::i;:::-;;;332:1205;;;;;;;;;;;;;;:::i;:::-;;;;;1411:31;;;;;;;;;;332:1205;;;;;;;;;5361:118:82;5431:33;;;;;332:1205:84;5431:33:82;332:1205:84;;;;5431:33:82;5228:119;5296:36;;;;332:1205:84;5296:36:82;332:1205:84;;5296:36:82;5232:28;;;;;;;;;;;;;;:::i;:::-;;;;;332:1205:84;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;:::i;:::-;1962:7:82;;;;:::i;:::-;4357:20;;:::i;:::-;332:1205:84;;;;;;4388:16:82;332:1205:84;;;;;;;;;;;;;;;;;4511:10:82;332:1205:84;;;;;;;;;;;;;;;4511:10:82;4590:62;;332:1205:84;4590:62:82;;332:1205:84;;;;;;;;;;:::i;:::-;1500:62:49;;;:::i;:::-;1515:9:82;;;:::i;:::-;332:1205:84;;5897:13:82;332:1205:84;5912:12:82;;;;;;332:1205:84;5926:3:82;332:1205:84;5960:8:82;;;;:::i;:::-;332:1205:84;;;;;5987:9:82;332:1205:84;;11832:53:72;332:1205:84;;;;11832:53:72;:::i;:::-;332:1205:84;5983:117:82;;6119:35;;332:1205:84;6119:35:82;;332:1205:84;6119:35:82;;332:1205:84;5897:13:82;;5983:117;6056:29;;;;332:1205:84;6056:29:82;332:1205:84;;;;;6056:29:82;332:1205:84;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;;;7076:16:82;332:1205:84;;;;;;;;7076:41:82;;332:1205:84;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;12473:55:72;332:1205:84;;:::i;:::-;;;1515:9:82;;;:::i;:::-;332:1205:84;;7296:9:82;332:1205:84;;;;;;;;12473:55:72;5197:14;5101:129;-1:-1:-1;332:1205:84;5197:14:72;332:1205:84;;;-1:-1:-1;332:1205:84;;5197:26:72;;5101:129;;12473:55;332:1205:84;;;;;;;;;;;;;;;;;;;:::o;:::-;1411:31;332:1205;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:33;332:1205:84;;;2303:50:33;;;2320:22;;332:1205:84;;;;;;;2303:50:33;;;;;;:::i;:::-;332:1205:84;2293:61:33;;1931:430;:::o;332:1205:84:-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;9677:202:82:-;9753:14;;:59;;;;9677:202;9749:124;;9677:202;:::o;9749:124::-;9835:27;9766:1;9835:27;;332:1205:84;;9766:1:82;9835:27;9753:59;332:1205:84;;9766:1:82;332:1205:84;9771:16:82;332:1205:84;;;;9766:1:82;332:1205:84;;;9771:41:82;9753:59;;1796:162:49;332:1205:84;1710:6:49;332:1205:84;;735:10:64;1855:23:49;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:64;1901:40:49;332:1205:84;;1710:6:49;1901:40;8977:266:82;332:1205:84;;9051:21:82;;9047:82;;332:1205:84;9070:1:82;332:1205:84;9143:14:82;332:1205:84;;;9070:1:82;332:1205:84;;9139:98:82;;8977:266;:::o;9139:98::-;9194:32;9070:1;9194:32;9143:14;332:1205:84;;9070:1:82;9194:32;9047:82;9095:23;9070:1;9095:23;;9070:1;9095:23;8758:213;6549:10;-1:-1:-1;332:1205:84;6534:14:82;332:1205:84;;;-1:-1:-1;332:1205:84;;8890:14:82;;;8886:79;;8758:213::o;8886:79::-;8927:27;-1:-1:-1;8927:27:82;6534:14;-1:-1:-1;8927:27:82;2970:342;;3077:16;332:1205:84;;-1:-1:-1;;332:1205:84;;;;;;;3077:16:82;332:1205:84;3065:28:82;332:1205:84;-1:-1:-1;332:1205:84;3152:16:82;332:1205:84;;;;-1:-1:-1;332:1205:84;;;;;;;;;;;;;-1:-1:-1;332:1205:84;3206:14:82;332:1205:84;;;;-1:-1:-1;332:1205:84;;3264:41:82;-1:-1:-1;3264:41:82;;2970:342::o;2011:153:50:-;332:1205:84;;;2093:20:50;332:1205:84;;2093:20:50;332:1205:84;2093:20:50;332:1205:84;;;;;;;;;;2093:20:50;332:1205:84;;3052:40:49;2093:20:50;3052:40:49;;2011:153:50:o;332:1205:84:-;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;332:1205:84;;-1:-1:-1;332:1205:84;;;-1:-1:-1;332:1205:84;:::o;3071:1368:72:-;;3266:14;;;332:1205:84;;;;;;;;;;;3302:13:72;;;;3298:1135;3302:13;;;-1:-1:-1;;332:1205:84;;;;;;;;;;;;;;;;;;;;3777:23:72;;;3773:378;;3298:1135;332:1205:84;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3266:14:72;4368:11;:::o;332:1205:84:-;;;;;;;;;;3773:378:72;332:1205:84;3840:22:72;3961:23;3840:22;;;:::i;:::-;332:1205:84;;;;;;3961:23:72;;;;;:::i;:::-;332:1205:84;;;;;-1:-1:-1;;332:1205:84;;;;;;;;;;;;;;;;;;;;;;;;;3773:378:72;;;;;3298:1135;4410:12;;;;332:1205:84;4410:12:72;:::o;2546:382:81:-;;332:1205:84;;;;;;;;;2721:15:81;;;2717:57;;332:1205:84;;2858:21:81;332:1205:84;2858:21:81;;;:5;;;:21;:5;;;332:1205:84;2858:21:81;;;;;;;;;332:1205:84;2858:21:81;;;2546:382;332:1205:84;;;;;;2858:63:81;;;;;332:1205:84;2858:63:81;;:21;:63;;332:1205:84;;;;;2915:4:81;332:1205:84;;;;;2858:63:81;;;;;;;332:1205:84;2858:63:81;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;-1:-1:-1;2858:63:81;;;;;;:::i;:::-;332:1205:84;;;;;;;;;2858:21:81;332:1205:84;2858:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o;2497:406:72:-;-1:-1:-1;332:1205:84;;;5197:14:72;;;332:1205:84;;;;;;2581:21:72;;332:1205:84;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2776:14:72;332:1205:84;;;;;;;2832:11:72;:::o;2576:321::-;2874:12;;332:1205:84;2874:12:72;:::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","addPoolsToSet(uint256,address[])":"ebf3a8d0","createPoolSet(address)":"e909c19b","createPoolSet(address,address[])":"3e035f9b","destroyPoolSet(uint256)":"7c1ec460","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAllPoolsInSet(uint256)":"94fc4058","getAuthorizer()":"aaabadc5","getManagerForPoolSet(uint256)":"f167a1e6","getNextPoolSetId()":"c482e822","getPoolCountForSet(uint256)":"62d53462","getPoolSetIdForCaller()":"ce998aba","getPoolSetIdForManager(address)":"25c427ed","getPoolsInSet(uint256,uint256,uint256)":"8c60ebd0","isPoolInSet(address,uint256)":"182551da","isValidPoolSetId(uint256)":"255dae41","owner()":"8da5cb5b","pendingOwner()":"e30c3978","removePoolsFromSet(uint256,address[])":"2da55a1d","renounceOwnership()":"715018a6","setStaticSwapFeePercentage(address,uint256)":"d15126ba","transferOwnership(address)":"f2fde38b","transferPoolSetOwnership(address)":"3700f987","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"InvalidPoolSetId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolSetManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolHasSwapManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolSetManager\",\"type\":\"address\"}],\"name\":\"PoolSetManagerNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderIsNotPoolSetManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"PoolSetCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"PoolSetDestroyed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"PoolSetOwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPoolsToSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"destroyPoolSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getAllPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getManagerForPoolSet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextPoolSetId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getPoolCountForSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSetIdForCaller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getPoolSetIdForManager\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isPoolInSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isValidPoolSetId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePoolsFromSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferPoolSetOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"params\":{\"poolSetId\":\"Id of the set involved in the operation\"}}],\"InvalidPoolSetId(uint256)\":[{\"details\":\"This can mean the value is invalid, or it was never created, or it was destroyed.\",\"params\":{\"poolSetId\":\"The id of the invalid set\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolHasSwapManager(address)\":[{\"details\":\"The swap manager is an exclusive role. If it is set to a non-zero value during pool registration, only the swap manager can change the fee. This helper can only set fees on pools that allow governance to grant this permission.\",\"params\":{\"pool\":\"Address of the pool being added\"}}],\"PoolNotInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolSetManagerNotUnique(address)\":[{\"details\":\"Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\",\"params\":{\"poolSetManager\":\"Address of the manager that is already assigned to another pool set id\"}}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolRemovedFromSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetCreated(uint256,address)\":{\"details\":\"Pools are organized into separate sets, controlled by a manager, which can be changed independently.\",\"params\":{\"initialManager\":\"Address of the pool set manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetDestroyed(uint256,address)\":{\"params\":{\"manager\":\"The address of the set's last manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"details\":\"Managers can only control one pool set. Transfers to existing managers of other sets will revert.\",\"params\":{\"newManager\":\"Address of the new manager\",\"oldManager\":\"Address of the previous manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"addPoolsToSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may add pools to a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"newPools\":\"List of pools to add\",\"poolSetId\":\"Id of the set to which the new pools belong\"}},\"createPoolSet(address)\":{\"details\":\"Convenience function to create a pool set with no initial pools. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\"}},\"createPoolSet(address,address[])\":{\"details\":\"The `newPools` list can be empty, in which case this will only create the set. Pools can then be added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\",\"newPools\":\"Set of pools to add to the set\"}},\"destroyPoolSet(uint256)\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may destroy sets, effectively removing control of any pools in the set from the associated manager. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set being destroyed\"}},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAllPoolsInSet(uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"pools\":\"List of pools\"}},\"getManagerForPoolSet(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\"}},\"getNextPoolSetId()\":{\"returns\":{\"_0\":\"The pool set id that will be used on the next call of `createPoolSet`\"}},\"getPoolCountForSet(uint256)\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction. Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The current number of pools in the set\"}},\"getPoolSetIdForCaller()\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the caller is not a pool set manager\"}},\"getPoolSetIdForManager(address)\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the address given is not a pool set manager\"}},\"getPoolsInSet(uint256,uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`). Reverts if the poolSetId is not valid.\",\"params\":{\"from\":\"Start index\",\"poolSetId\":\"Id of the set containing the pools\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"isPoolInSet(address,uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"pool\":\"Address of the pool to check\",\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the pool is in the given set, false otherwise\"}},\"isValidPoolSetId(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the poolSetId exists\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"removePoolsFromSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may remove pools from a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set to which the pools belong\",\"pools\":\"List of pools to remove from the set\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function. Governance must grant this contract permission to call `setStaticSwapFeePercentage` on the Vault. Note that since the swap manager is an exclusive role, the swap fee cannot be changed by governance if it is set, and the pool cannot be added to the set.\",\"params\":{\"pool\":\"The address of the pool\",\"swapFeePercentage\":\"The new swap fee percentage\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"transferPoolSetOwnership(address)\":{\"details\":\"This is a permissioned function. Only the current manager of a set can call this to set a new manager. Since managers can only control a single set, there is no need to specify the id in the call. Note that this is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts if the new manager address is zero or already the manager of a pool set.\",\"params\":{\"newManager\":\"The address of the new manager\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"InvalidPoolSetId(uint256)\":[{\"notice\":\"Pool set id associated with an operation is invalid.\"}],\"InvalidPoolSetManager()\":[{\"notice\":\"The initial manager of a pool set cannot be zero.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolHasSwapManager(address)\":[{\"notice\":\"Cannot add a pool that has a swap manager.\"}],\"PoolNotInSet(address,uint256)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolSetManagerNotUnique(address)\":[{\"notice\":\"Pool set managers can only manage a single pool set.\"}],\"SenderIsNotPoolSetManager()\":[{\"notice\":\"Permissioned operations on pools can only be performed by the pool set manager.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"notice\":\"The owner added a pool to the given set.\"},\"PoolRemovedFromSet(address,uint256)\":{\"notice\":\"The owner removed a pool from the given set.\"},\"PoolSetCreated(uint256,address)\":{\"notice\":\"The owner created a new pool set.\"},\"PoolSetDestroyed(uint256,address)\":{\"notice\":\"The owner destroyed a pool set.\"},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"notice\":\"The current manager of a pool set transferred ownership to a new address.\"}},\"kind\":\"user\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"createPoolSet(address)\":{\"notice\":\"Create a new empty set with an initial manager.\"},\"createPoolSet(address,address[])\":{\"notice\":\"Create a new set with an initial manager, optionally initialized with a set of pools.\"},\"destroyPoolSet(uint256)\":{\"notice\":\"Simple way to remove an entire set of pools from control of the helper function.\"},\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAllPoolsInSet(uint256)\":{\"notice\":\"Get the full set of pools from a given set.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"},\"getManagerForPoolSet(uint256)\":{\"notice\":\"Get the manager address associated with a given poolSetId.\"},\"getNextPoolSetId()\":{\"notice\":\"Utility function to predict the next pool set id.\"},\"getPoolCountForSet(uint256)\":{\"notice\":\"Get the number of pools associated with the given set.\"},\"getPoolSetIdForCaller()\":{\"notice\":\"Get the pool set id associated with the caller.\"},\"getPoolSetIdForManager(address)\":{\"notice\":\"Get the pool set id associated with a given manager address.\"},\"getPoolsInSet(uint256,uint256,uint256)\":{\"notice\":\"Get a range of pools from a given set.\"},\"isPoolInSet(address,uint256)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"isValidPoolSetId(uint256)\":{\"notice\":\"Check whether a poolSetId has been created.\"},\"removePoolsFromSet(uint256,address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Set the static swap fee percentage on a given pool.\"},\"transferPoolSetOwnership(address)\":{\"notice\":\"Transfer ownership of a pool set from the current manager to a new manager.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/PoolSwapFeeHelper.sol\":\"PoolSwapFeeHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xdb8365416c9dd9d7be16677c13819065511e9bc7705d6bad85fd52b65d3b3c39\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b90206982d126075b074f0a77ea9cb3ec173ed9fe9e4504b12d6807532b1b7ff\",\"dweb:/ipfs/QmYjKTu4Mrew94sSxfQ8jP4yT7wZFgghSRyB9A2kDdSy8X\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol\":{\"keccak256\":\"0x28f0e2ffd4fda0cb7b1f55d368e5bf8672d6f907e0171674a8a93c7c65c4a29b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37bb56bb5e66cead63626efaacae7dad39f3fd725d001825db861f22aceb0124\",\"dweb:/ipfs/QmdNskvPgTo6R3AmuA3zp8vY9waoEbKsTPWHp5v6aAbhkE\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/PoolHelperCommon.sol\":{\"keccak256\":\"0xc3bd72a44d8479bacbfa4ebca2354b315160e77c378c3dc24d8cd7a41990a83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://fed38b2ea6f2842633d8d555d298adc889605bbeb3ec32728811fbc907989519\",\"dweb:/ipfs/QmX1aEVFkPAZbbSFXn6tfJnaPYWr9TDe9YHCQAiLvgZahg\"]},\"contracts/PoolSwapFeeHelper.sol\":{\"keccak256\":\"0x8a437e7654311261de87663258f04b68a61a7a52e635f7263599ddc49cd2a159\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://55631bc88c6a36b362e143bc303f1dd293deb9ce0b48988d87be2b60f6934dc5\",\"dweb:/ipfs/QmfCN1AmHBYfQweVLLT2QF1co6JCTDXpWcV58miru7CmCE\"]}},\"version\":1}"}},"contracts/PriceImpactHelper.sol":{"PriceImpactHelper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IRouter","name":"router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"}],"name":"calculateAddLiquidityUnbalancedPriceImpact","outputs":[{"internalType":"uint256","name":"priceImpact","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callAndRevertHook","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461009a57601f6111fb38819003918201601f19168301916001600160401b0383118484101761009e57808492604094855283398101031261009a5780516001600160a01b0391828216820361009a5760200151918216820361009a5760805260a05260405161114890816100b38239608051816104b1015260a05181818161030201528181610735015281816108e40152610cd70152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c806348406a54146101a75763a76996381461002f575f80fd5b346101a35760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a357610066610aaf565b6024359067ffffffffffffffff82116101a357366023830112156101a35781600401359061009382610b0d565b926100a16040519485610ad2565b828452602084019036602485830101116101a3575f94856020868297602484960187378301015251925af16100d4610bc7565b90801561012957906100ea816101259333610e82565b506040519182917f5ab64fb8000000000000000000000000000000000000000000000000000000008352602060048401526024830190610bf6565b0390fd5b507f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000061017583610e3b565b1603610e73577f28f95541000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b346101a35760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a3576101de610aaf565b67ffffffffffffffff6024358181116101a357366023820112156101a35780600401359061020b82610af5565b916102196040519384610ad2565b8083526024602084019160051b830101913683116101a357602401905b828210610a9f5750505073ffffffffffffffffffffffffffffffffffffffff604435169182604435036101a3576102706044358386610c1b565b92604051907f0f71088800000000000000000000000000000000000000000000000000000000602083015273ffffffffffffffffffffffffffffffffffffffff86169485602484015260448301526064820152608060848201525f60a482015260a4815260e081019080821083831117610a72576103279160405273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b9081518201916020818185019403126101a3576020810151908282116101a357019180603f840112156101a357602083015161036281610af5565b936103706040519586610ad2565b8185526040602086019260051b8201019283116101a357604001905b828210610a62575050506103a08351610b29565b945f5b8451811015610425576103bf6103b98286610b5a565b51610d21565b906103cd6103b98288610b5a565b915f83820393128184128116918413901516176103f8576001916103f1828a610b5a565b52016103a3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50915091926104348451610b29565b925f5b855181101561046257600190610451604435898388610d76565b61045b8288610b5a565b5201610437565b50919094935f95604051907fca4f280300000000000000000000000000000000000000000000000000000000825260048201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa938415610a57575f946109ad575b505094905f915b85517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116103f85783101561092f57505f917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965f5b8651811015610595575f6105568289610b5a565b511380610582575b61056b575b600101610542565b61057a91985080945086610b5a565b519683610563565b508861058e8289610b5a565b511261055e565b509650919490925f907f8000000000000000000000000000000000000000000000000000000000000000975f5b8751811015610615575f6105d6828a610b5a565b511280610602575b6105eb575b6001016105c2565b6105fa91995080935087610b5a565b5197826105e3565b508961060e828a610b5a565b51136105de565b5092969750939281976106288188610b5a565b5161063c610636858a610b5a565b51610b9b565b13156107df5761075a8661071e8a61071061068e6106888773ffffffffffffffffffffffffffffffffffffffff6106808c82610678858c610b5a565b511699610b5a565b511694610b5a565b51610e06565b936040519485937f3ebc54e5000000000000000000000000000000000000000000000000000000006020860152604435928d60248701939060e095929373ffffffffffffffffffffffffffffffffffffffff8095818094168852166020870152166040850152606084015216608082015260c060a08201525f60c08201520190565b03601f198101835282610ad2565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b6020818051810103126101a3575f610787838261078061078d9660208f97015196610b5a565b528a610b5a565b52610d21565b916107988189610b5a565b515f84820194851291129080158216911516176103f8576001926107bc828a610b5a565b526107d56107ce6044358a8489610d76565b9188610b5a565b52019190956104e8565b91806107eb8488610b5a565b5173ffffffffffffffffffffffffffffffffffffffff16908661080e828a610b5a565b5173ffffffffffffffffffffffffffffffffffffffff1691610830908c610b5a565b5161083a90610b9b565b61084390610e06565b6040517f175d440800000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff92831660248201529382166044808601919091529282166064850152608484015290351660a482015260c060c48201525f60e48083019190915281526108c961010482610ad2565b6109099073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b8080518101036020136101a3575f610787838261078061078d9660208f97015196610b5a565b61094f816109496109446106368b958b610b5a565b610e06565b92610b5a565b5190670de0b6b3a7640000908181029181830414901517156103f857811561098057602091604051910460011c8152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b909193503d805f843e6109c08184610ad2565b8201916020818403126101a35780519182116101a357019080601f830112156101a3578151906109ef82610af5565b926109fd6040519485610ad2565b82845260208085019360051b8201019182116101a357602001915b818310610a2a575050509186806104e1565b825173ffffffffffffffffffffffffffffffffffffffff811681036101a357815260209283019201610a18565b6040513d5f823e3d90fd5b815181526020918201910161038c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8135815260209182019101610236565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101a357565b90601f601f19910116810190811067ffffffffffffffff821117610a7257604052565b67ffffffffffffffff8111610a725760051b60200190565b67ffffffffffffffff8111610a7257601f01601f191660200190565b90610b3382610af5565b610b406040519182610ad2565b828152601f19610b508294610af5565b0190602036910137565b8051821015610b6e5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f800000000000000000000000000000000000000000000000000000000000000081146103f8575f0390565b3d15610bf1573d90610bd882610b0d565b91610be66040519384610ad2565b82523d5f602084013e565b606090565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b90929173ffffffffffffffffffffffffffffffffffffffff604051916020937fda001f7d00000000000000000000000000000000000000000000000000000000858501528260a48501911660248501526080604485015286518091528460c485019701905f5b818110610d0d5750505083610cfc94959683610cd5931660648601525f858203917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83016084880152528085520183610ad2565b7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b81818051810103126101a357015190565b825189529786019791860191600101610c81565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610d4b5790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b929091610db183825192601f19610da5610d8f86610af5565b95610d9d6040519788610ad2565b808752610af5565b01366020860137610b5a565b51938415610dfd57610dd993610dd35f871396875f14610dee57915b84610b5a565b52610c1b565b9015610de25790565b610deb90610b9b565b90565b610df790610b9b565b91610dcd565b50505050505f90565b5f8112610e105790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6004815110610e4b576020015190565b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b805115610e4b57805190602001fd5b90610ebf5750805115610e9757602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610f12575b610ed0575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15610ec8565b90303b156101a3575f610f8091604051809381927fa769963800000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff8597166004840152604060248401526044830190610bf6565b038183305af190816110f5575b5061109757610f9a610bc7565b907f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000610fe684610e3b565b16036110915781519160207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc938481016004840152820193828286019503011261108d5760248101519067ffffffffffffffff821161108957018260438201121561108d5760248101519061105a82610b0d565b936110686040519586610ad2565b828552604483830101116110895790806044602093018386015e8301015290565b8280fd5b5080fd5b50610e73565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6578706563746564207375636365737300000000000000000000000000006044820152fd5b90915067ffffffffffffffff8111610a72576040525f905f610f8d56fea26469706673582212201675b6747c06a232114d5996ab74371bbdc52003636d23d3871344f3a854590864736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x9A JUMPI PUSH1 0x1F PUSH2 0x11FB CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x9E JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x9A JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND DUP3 SUB PUSH2 0x9A JUMPI PUSH1 0x20 ADD MLOAD SWAP2 DUP3 AND DUP3 SUB PUSH2 0x9A JUMPI PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x1148 SWAP1 DUP2 PUSH2 0xB3 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x4B1 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x302 ADD MSTORE DUP2 DUP2 PUSH2 0x735 ADD MSTORE DUP2 DUP2 PUSH2 0x8E4 ADD MSTORE PUSH2 0xCD7 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x48406A54 EQ PUSH2 0x1A7 JUMPI PUSH4 0xA7699638 EQ PUSH2 0x2F JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1A3 JUMPI PUSH1 0x40 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1A3 JUMPI PUSH2 0x66 PUSH2 0xAAF JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1A3 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x93 DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP3 PUSH2 0xA1 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0x1A3 JUMPI PUSH0 SWAP5 DUP6 PUSH1 0x20 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL PUSH2 0xD4 PUSH2 0xBC7 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x129 JUMPI SWAP1 PUSH2 0xEA DUP2 PUSH2 0x125 SWAP4 CALLER PUSH2 0xE82 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0xBF6 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x175 DUP4 PUSH2 0xE3B JUMP JUMPDEST AND SUB PUSH2 0xE73 JUMPI PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1A3 JUMPI PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1A3 JUMPI PUSH2 0x1DE PUSH2 0xAAF JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x1A3 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x20B DUP3 PUSH2 0xAF5 JUMP JUMPDEST SWAP2 PUSH2 0x219 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x1A3 JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xA9F JUMPI POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND SWAP2 DUP3 PUSH1 0x44 CALLDATALOAD SUB PUSH2 0x1A3 JUMPI PUSH2 0x270 PUSH1 0x44 CALLDATALOAD DUP4 DUP7 PUSH2 0xC1B JUMP JUMPDEST SWAP3 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF71088800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP5 DUP6 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP3 ADD MSTORE PUSH0 PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 MSTORE PUSH1 0xE0 DUP2 ADD SWAP1 DUP1 DUP3 LT DUP4 DUP4 GT OR PUSH2 0xA72 JUMPI PUSH2 0x327 SWAP2 PUSH1 0x40 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP2 DUP6 ADD SWAP5 SUB SLT PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x1A3 JUMPI ADD SWAP2 DUP1 PUSH1 0x3F DUP5 ADD SLT ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x362 DUP2 PUSH2 0xAF5 JUMP JUMPDEST SWAP4 PUSH2 0x370 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xAD2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x40 PUSH1 0x20 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1A3 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xA62 JUMPI POP POP POP PUSH2 0x3A0 DUP4 MLOAD PUSH2 0xB29 JUMP JUMPDEST SWAP5 PUSH0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x425 JUMPI PUSH2 0x3BF PUSH2 0x3B9 DUP3 DUP7 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xD21 JUMP JUMPDEST SWAP1 PUSH2 0x3CD PUSH2 0x3B9 DUP3 DUP9 PUSH2 0xB5A JUMP JUMPDEST SWAP2 PUSH0 DUP4 DUP3 SUB SWAP4 SLT DUP2 DUP5 SLT DUP2 AND SWAP2 DUP5 SGT SWAP1 ISZERO AND OR PUSH2 0x3F8 JUMPI PUSH1 0x1 SWAP2 PUSH2 0x3F1 DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD PUSH2 0x3A3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 POP SWAP2 SWAP3 PUSH2 0x434 DUP5 MLOAD PUSH2 0xB29 JUMP JUMPDEST SWAP3 PUSH0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x462 JUMPI PUSH1 0x1 SWAP1 PUSH2 0x451 PUSH1 0x44 CALLDATALOAD DUP10 DUP4 DUP9 PUSH2 0xD76 JUMP JUMPDEST PUSH2 0x45B DUP3 DUP9 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD PUSH2 0x437 JUMP JUMPDEST POP SWAP2 SWAP1 SWAP5 SWAP4 PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0xA57 JUMPI PUSH0 SWAP5 PUSH2 0x9AD JUMPI JUMPDEST POP POP SWAP5 SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 GT PUSH2 0x3F8 JUMPI DUP4 LT ISZERO PUSH2 0x92F JUMPI POP PUSH0 SWAP2 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x595 JUMPI PUSH0 PUSH2 0x556 DUP3 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD SGT DUP1 PUSH2 0x582 JUMPI JUMPDEST PUSH2 0x56B JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x542 JUMP JUMPDEST PUSH2 0x57A SWAP2 SWAP9 POP DUP1 SWAP5 POP DUP7 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP7 DUP4 PUSH2 0x563 JUMP JUMPDEST POP DUP9 PUSH2 0x58E DUP3 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD SLT PUSH2 0x55E JUMP JUMPDEST POP SWAP7 POP SWAP2 SWAP5 SWAP1 SWAP3 PUSH0 SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 SWAP8 PUSH0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x615 JUMPI PUSH0 PUSH2 0x5D6 DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD SLT DUP1 PUSH2 0x602 JUMPI JUMPDEST PUSH2 0x5EB JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x5C2 JUMP JUMPDEST PUSH2 0x5FA SWAP2 SWAP10 POP DUP1 SWAP4 POP DUP8 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP8 DUP3 PUSH2 0x5E3 JUMP JUMPDEST POP DUP10 PUSH2 0x60E DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD SGT PUSH2 0x5DE JUMP JUMPDEST POP SWAP3 SWAP7 SWAP8 POP SWAP4 SWAP3 DUP2 SWAP8 PUSH2 0x628 DUP2 DUP9 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0x63C PUSH2 0x636 DUP6 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xB9B JUMP JUMPDEST SGT ISZERO PUSH2 0x7DF JUMPI PUSH2 0x75A DUP7 PUSH2 0x71E DUP11 PUSH2 0x710 PUSH2 0x68E PUSH2 0x688 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x680 DUP13 DUP3 PUSH2 0x678 DUP6 DUP13 PUSH2 0xB5A JUMP JUMPDEST MLOAD AND SWAP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD AND SWAP5 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xE06 JUMP JUMPDEST SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 PUSH32 0x3EBC54E500000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x44 CALLDATALOAD SWAP3 DUP14 PUSH1 0x24 DUP8 ADD SWAP4 SWAP1 PUSH1 0xE0 SWAP6 SWAP3 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP6 DUP2 DUP1 SWAP5 AND DUP9 MSTORE AND PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0xAD2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST PUSH1 0x20 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0x787 DUP4 DUP3 PUSH2 0x780 PUSH2 0x78D SWAP7 PUSH1 0x20 DUP16 SWAP8 ADD MLOAD SWAP7 PUSH2 0xB5A JUMP JUMPDEST MSTORE DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0xD21 JUMP JUMPDEST SWAP2 PUSH2 0x798 DUP2 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH0 DUP5 DUP3 ADD SWAP5 DUP6 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x3F8 JUMPI PUSH1 0x1 SWAP3 PUSH2 0x7BC DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0x7D5 PUSH2 0x7CE PUSH1 0x44 CALLDATALOAD DUP11 DUP5 DUP10 PUSH2 0xD76 JUMP JUMPDEST SWAP2 DUP9 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD SWAP2 SWAP1 SWAP6 PUSH2 0x4E8 JUMP JUMPDEST SWAP2 DUP1 PUSH2 0x7EB DUP5 DUP9 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP7 PUSH2 0x80E DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH2 0x830 SWAP1 DUP13 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0x83A SWAP1 PUSH2 0xB9B JUMP JUMPDEST PUSH2 0x843 SWAP1 PUSH2 0xE06 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x175D440800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP4 DUP3 AND PUSH1 0x44 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP3 AND PUSH1 0x64 DUP6 ADD MSTORE PUSH1 0x84 DUP5 ADD MSTORE SWAP1 CALLDATALOAD AND PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xC4 DUP3 ADD MSTORE PUSH0 PUSH1 0xE4 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE PUSH2 0x8C9 PUSH2 0x104 DUP3 PUSH2 0xAD2 JUMP JUMPDEST PUSH2 0x909 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST DUP1 DUP1 MLOAD DUP2 ADD SUB PUSH1 0x20 SGT PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0x787 DUP4 DUP3 PUSH2 0x780 PUSH2 0x78D SWAP7 PUSH1 0x20 DUP16 SWAP8 ADD MLOAD SWAP7 PUSH2 0xB5A JUMP JUMPDEST PUSH2 0x94F DUP2 PUSH2 0x949 PUSH2 0x944 PUSH2 0x636 DUP12 SWAP6 DUP12 PUSH2 0xB5A JUMP JUMPDEST PUSH2 0xE06 JUMP JUMPDEST SWAP3 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x3F8 JUMPI DUP2 ISZERO PUSH2 0x980 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x40 MLOAD SWAP2 DIV PUSH1 0x1 SHR DUP2 MSTORE RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP4 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x9C0 DUP2 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0x1A3 JUMPI DUP1 MLOAD SWAP2 DUP3 GT PUSH2 0x1A3 JUMPI ADD SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP2 MLOAD SWAP1 PUSH2 0x9EF DUP3 PUSH2 0xAF5 JUMP JUMPDEST SWAP3 PUSH2 0x9FD PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP4 PUSH1 0x5 SHL DUP3 ADD ADD SWAP2 DUP3 GT PUSH2 0x1A3 JUMPI PUSH1 0x20 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0xA2A JUMPI POP POP POP SWAP2 DUP7 DUP1 PUSH2 0x4E1 JUMP JUMPDEST DUP3 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1A3 JUMPI DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0xA18 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x38C JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x236 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1A3 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xA72 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0xB33 DUP3 PUSH2 0xAF5 JUMP JUMPDEST PUSH2 0xB40 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0xB50 DUP3 SWAP5 PUSH2 0xAF5 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0xB6E JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x3F8 JUMPI PUSH0 SUB SWAP1 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0xBF1 JUMPI RETURNDATASIZE SWAP1 PUSH2 0xBD8 DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP2 PUSH2 0xBE6 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP1 SWAP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 SWAP4 PUSH32 0xDA001F7D00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE DUP3 PUSH1 0xA4 DUP6 ADD SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x80 PUSH1 0x44 DUP6 ADD MSTORE DUP7 MLOAD DUP1 SWAP2 MSTORE DUP5 PUSH1 0xC4 DUP6 ADD SWAP8 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xD0D JUMPI POP POP POP DUP4 PUSH2 0xCFC SWAP5 SWAP6 SWAP7 DUP4 PUSH2 0xCD5 SWAP4 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH0 DUP6 DUP3 SUB SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP4 ADD PUSH1 0x84 DUP9 ADD MSTORE MSTORE DUP1 DUP6 MSTORE ADD DUP4 PUSH2 0xAD2 JUMP JUMPDEST PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST DUP2 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x1A3 JUMPI ADD MLOAD SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP10 MSTORE SWAP8 DUP7 ADD SWAP8 SWAP2 DUP7 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xC81 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xD4B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0xDB1 DUP4 DUP3 MLOAD SWAP3 PUSH1 0x1F NOT PUSH2 0xDA5 PUSH2 0xD8F DUP7 PUSH2 0xAF5 JUMP JUMPDEST SWAP6 PUSH2 0xD9D PUSH1 0x40 MLOAD SWAP8 DUP9 PUSH2 0xAD2 JUMP JUMPDEST DUP1 DUP8 MSTORE PUSH2 0xAF5 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP4 DUP5 ISZERO PUSH2 0xDFD JUMPI PUSH2 0xDD9 SWAP4 PUSH2 0xDD3 PUSH0 DUP8 SGT SWAP7 DUP8 PUSH0 EQ PUSH2 0xDEE JUMPI SWAP2 JUMPDEST DUP5 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0xC1B JUMP JUMPDEST SWAP1 ISZERO PUSH2 0xDE2 JUMPI SWAP1 JUMP JUMPDEST PUSH2 0xDEB SWAP1 PUSH2 0xB9B JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0xDF7 SWAP1 PUSH2 0xB9B JUMP JUMPDEST SWAP2 PUSH2 0xDCD JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0xE10 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP2 MLOAD LT PUSH2 0xE4B JUMPI PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xE4B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0xEBF JUMPI POP DUP1 MLOAD ISZERO PUSH2 0xE97 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0xF12 JUMPI JUMPDEST PUSH2 0xED0 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0xEC8 JUMP JUMPDEST SWAP1 ADDRESS EXTCODESIZE ISZERO PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0xF80 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA769963800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SWAP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0xBF6 JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL SWAP1 DUP2 PUSH2 0x10F5 JUMPI JUMPDEST POP PUSH2 0x1097 JUMPI PUSH2 0xF9A PUSH2 0xBC7 JUMP JUMPDEST SWAP1 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0xFE6 DUP5 PUSH2 0xE3B JUMP JUMPDEST AND SUB PUSH2 0x1091 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC SWAP4 DUP5 DUP2 ADD PUSH1 0x4 DUP5 ADD MSTORE DUP3 ADD SWAP4 DUP3 DUP3 DUP7 ADD SWAP6 SUB ADD SLT PUSH2 0x108D JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1089 JUMPI ADD DUP3 PUSH1 0x43 DUP3 ADD SLT ISZERO PUSH2 0x108D JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH2 0x105A DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP4 PUSH2 0x1068 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP6 MSTORE PUSH1 0x44 DUP4 DUP4 ADD ADD GT PUSH2 0x1089 JUMPI SWAP1 DUP1 PUSH1 0x44 PUSH1 0x20 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP PUSH2 0xE73 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420737563636573730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP1 PUSH0 PUSH2 0xF8D JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 AND PUSH22 0xB6747C06A232114D5996AB74371BBDC52003636D23D3 DUP8 SGT PREVRANDAO RETURN 0xA8 SLOAD MSIZE ADDMOD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"635:8728:85:-:0;;;;;;;;;;;;;-1:-1:-1;;635:8728:85;;;;-1:-1:-1;;;;;635:8728:85;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;635:8728:85;;;;;;;;;;;;;;;;;;877:14;;901:16;;635:8728;;;;;;;;877:14;635:8728;;;;;901:16;635:8728;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;635:8728:85;;;;;;-1:-1:-1;635:8728:85;;;;;-1:-1:-1;635:8728:85"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":2735,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_address_contract_IERC20_contract_IERC20_uint256_address_stringliteral_c5d2":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_bytes":{"entryPoint":3062,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_and_zero_memory_array_array_int256_dyn":{"entryPoint":2857,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":2805,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":2829,"id":null,"parameterSlots":1,"returnSlots":1},"extract_returndata":{"entryPoint":3015,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":2770,"id":null,"parameterSlots":2,"returnSlots":0},"fun_bubbleUpRevert":{"entryPoint":3699,"id":4958,"parameterSlots":1,"returnSlots":0},"fun_callAndRevert":{"entryPoint":3867,"id":18572,"parameterSlots":2,"returnSlots":1},"fun_parseSelector":{"entryPoint":3643,"id":4940,"parameterSlots":1,"returnSlots":1},"fun_queryAddLiquidityUnbalanced":{"entryPoint":3099,"id":21421,"parameterSlots":3,"returnSlots":1},"fun_queryAddLiquidityUnbalancedForTokenDeltas":{"entryPoint":3446,"id":21618,"parameterSlots":4,"returnSlots":1},"fun_toInt256":{"entryPoint":3361,"id":16081,"parameterSlots":1,"returnSlots":1},"fun_toUint256":{"entryPoint":3590,"id":15245,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":3714,"id":11283,"parameterSlots":3,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":2906,"id":null,"parameterSlots":2,"returnSlots":1},"negate_int256":{"entryPoint":2971,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"21227":[{"length":32,"start":1201}],"21230":[{"length":32,"start":770},{"length":32,"start":1845},{"length":32,"start":2276},{"length":32,"start":3287}]},"linkReferences":{},"object":"60806040526004361015610011575f80fd5b5f3560e01c806348406a54146101a75763a76996381461002f575f80fd5b346101a35760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a357610066610aaf565b6024359067ffffffffffffffff82116101a357366023830112156101a35781600401359061009382610b0d565b926100a16040519485610ad2565b828452602084019036602485830101116101a3575f94856020868297602484960187378301015251925af16100d4610bc7565b90801561012957906100ea816101259333610e82565b506040519182917f5ab64fb8000000000000000000000000000000000000000000000000000000008352602060048401526024830190610bf6565b0390fd5b507f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000061017583610e3b565b1603610e73577f28f95541000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b346101a35760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a3576101de610aaf565b67ffffffffffffffff6024358181116101a357366023820112156101a35780600401359061020b82610af5565b916102196040519384610ad2565b8083526024602084019160051b830101913683116101a357602401905b828210610a9f5750505073ffffffffffffffffffffffffffffffffffffffff604435169182604435036101a3576102706044358386610c1b565b92604051907f0f71088800000000000000000000000000000000000000000000000000000000602083015273ffffffffffffffffffffffffffffffffffffffff86169485602484015260448301526064820152608060848201525f60a482015260a4815260e081019080821083831117610a72576103279160405273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b9081518201916020818185019403126101a3576020810151908282116101a357019180603f840112156101a357602083015161036281610af5565b936103706040519586610ad2565b8185526040602086019260051b8201019283116101a357604001905b828210610a62575050506103a08351610b29565b945f5b8451811015610425576103bf6103b98286610b5a565b51610d21565b906103cd6103b98288610b5a565b915f83820393128184128116918413901516176103f8576001916103f1828a610b5a565b52016103a3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50915091926104348451610b29565b925f5b855181101561046257600190610451604435898388610d76565b61045b8288610b5a565b5201610437565b50919094935f95604051907fca4f280300000000000000000000000000000000000000000000000000000000825260048201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa938415610a57575f946109ad575b505094905f915b85517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116103f85783101561092f57505f917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965f5b8651811015610595575f6105568289610b5a565b511380610582575b61056b575b600101610542565b61057a91985080945086610b5a565b519683610563565b508861058e8289610b5a565b511261055e565b509650919490925f907f8000000000000000000000000000000000000000000000000000000000000000975f5b8751811015610615575f6105d6828a610b5a565b511280610602575b6105eb575b6001016105c2565b6105fa91995080935087610b5a565b5197826105e3565b508961060e828a610b5a565b51136105de565b5092969750939281976106288188610b5a565b5161063c610636858a610b5a565b51610b9b565b13156107df5761075a8661071e8a61071061068e6106888773ffffffffffffffffffffffffffffffffffffffff6106808c82610678858c610b5a565b511699610b5a565b511694610b5a565b51610e06565b936040519485937f3ebc54e5000000000000000000000000000000000000000000000000000000006020860152604435928d60248701939060e095929373ffffffffffffffffffffffffffffffffffffffff8095818094168852166020870152166040850152606084015216608082015260c060a08201525f60c08201520190565b03601f198101835282610ad2565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b6020818051810103126101a3575f610787838261078061078d9660208f97015196610b5a565b528a610b5a565b52610d21565b916107988189610b5a565b515f84820194851291129080158216911516176103f8576001926107bc828a610b5a565b526107d56107ce6044358a8489610d76565b9188610b5a565b52019190956104e8565b91806107eb8488610b5a565b5173ffffffffffffffffffffffffffffffffffffffff16908661080e828a610b5a565b5173ffffffffffffffffffffffffffffffffffffffff1691610830908c610b5a565b5161083a90610b9b565b61084390610e06565b6040517f175d440800000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff92831660248201529382166044808601919091529282166064850152608484015290351660a482015260c060c48201525f60e48083019190915281526108c961010482610ad2565b6109099073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b8080518101036020136101a3575f610787838261078061078d9660208f97015196610b5a565b61094f816109496109446106368b958b610b5a565b610e06565b92610b5a565b5190670de0b6b3a7640000908181029181830414901517156103f857811561098057602091604051910460011c8152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b909193503d805f843e6109c08184610ad2565b8201916020818403126101a35780519182116101a357019080601f830112156101a3578151906109ef82610af5565b926109fd6040519485610ad2565b82845260208085019360051b8201019182116101a357602001915b818310610a2a575050509186806104e1565b825173ffffffffffffffffffffffffffffffffffffffff811681036101a357815260209283019201610a18565b6040513d5f823e3d90fd5b815181526020918201910161038c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8135815260209182019101610236565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101a357565b90601f601f19910116810190811067ffffffffffffffff821117610a7257604052565b67ffffffffffffffff8111610a725760051b60200190565b67ffffffffffffffff8111610a7257601f01601f191660200190565b90610b3382610af5565b610b406040519182610ad2565b828152601f19610b508294610af5565b0190602036910137565b8051821015610b6e5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f800000000000000000000000000000000000000000000000000000000000000081146103f8575f0390565b3d15610bf1573d90610bd882610b0d565b91610be66040519384610ad2565b82523d5f602084013e565b606090565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b90929173ffffffffffffffffffffffffffffffffffffffff604051916020937fda001f7d00000000000000000000000000000000000000000000000000000000858501528260a48501911660248501526080604485015286518091528460c485019701905f5b818110610d0d5750505083610cfc94959683610cd5931660648601525f858203917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83016084880152528085520183610ad2565b7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b81818051810103126101a357015190565b825189529786019791860191600101610c81565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610d4b5790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b929091610db183825192601f19610da5610d8f86610af5565b95610d9d6040519788610ad2565b808752610af5565b01366020860137610b5a565b51938415610dfd57610dd993610dd35f871396875f14610dee57915b84610b5a565b52610c1b565b9015610de25790565b610deb90610b9b565b90565b610df790610b9b565b91610dcd565b50505050505f90565b5f8112610e105790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6004815110610e4b576020015190565b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b805115610e4b57805190602001fd5b90610ebf5750805115610e9757602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610f12575b610ed0575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15610ec8565b90303b156101a3575f610f8091604051809381927fa769963800000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff8597166004840152604060248401526044830190610bf6565b038183305af190816110f5575b5061109757610f9a610bc7565b907f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000610fe684610e3b565b16036110915781519160207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc938481016004840152820193828286019503011261108d5760248101519067ffffffffffffffff821161108957018260438201121561108d5760248101519061105a82610b0d565b936110686040519586610ad2565b828552604483830101116110895790806044602093018386015e8301015290565b8280fd5b5080fd5b50610e73565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6578706563746564207375636365737300000000000000000000000000006044820152fd5b90915067ffffffffffffffff8111610a72576040525f905f610f8d56fea26469706673582212201675b6747c06a232114d5996ab74371bbdc52003636d23d3871344f3a854590864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x48406A54 EQ PUSH2 0x1A7 JUMPI PUSH4 0xA7699638 EQ PUSH2 0x2F JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1A3 JUMPI PUSH1 0x40 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1A3 JUMPI PUSH2 0x66 PUSH2 0xAAF JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1A3 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x93 DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP3 PUSH2 0xA1 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0x1A3 JUMPI PUSH0 SWAP5 DUP6 PUSH1 0x20 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL PUSH2 0xD4 PUSH2 0xBC7 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x129 JUMPI SWAP1 PUSH2 0xEA DUP2 PUSH2 0x125 SWAP4 CALLER PUSH2 0xE82 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0xBF6 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x175 DUP4 PUSH2 0xE3B JUMP JUMPDEST AND SUB PUSH2 0xE73 JUMPI PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1A3 JUMPI PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1A3 JUMPI PUSH2 0x1DE PUSH2 0xAAF JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x1A3 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x20B DUP3 PUSH2 0xAF5 JUMP JUMPDEST SWAP2 PUSH2 0x219 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x1A3 JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xA9F JUMPI POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND SWAP2 DUP3 PUSH1 0x44 CALLDATALOAD SUB PUSH2 0x1A3 JUMPI PUSH2 0x270 PUSH1 0x44 CALLDATALOAD DUP4 DUP7 PUSH2 0xC1B JUMP JUMPDEST SWAP3 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF71088800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP5 DUP6 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP3 ADD MSTORE PUSH0 PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 MSTORE PUSH1 0xE0 DUP2 ADD SWAP1 DUP1 DUP3 LT DUP4 DUP4 GT OR PUSH2 0xA72 JUMPI PUSH2 0x327 SWAP2 PUSH1 0x40 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP2 DUP6 ADD SWAP5 SUB SLT PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x1A3 JUMPI ADD SWAP2 DUP1 PUSH1 0x3F DUP5 ADD SLT ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x362 DUP2 PUSH2 0xAF5 JUMP JUMPDEST SWAP4 PUSH2 0x370 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xAD2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x40 PUSH1 0x20 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1A3 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xA62 JUMPI POP POP POP PUSH2 0x3A0 DUP4 MLOAD PUSH2 0xB29 JUMP JUMPDEST SWAP5 PUSH0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x425 JUMPI PUSH2 0x3BF PUSH2 0x3B9 DUP3 DUP7 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xD21 JUMP JUMPDEST SWAP1 PUSH2 0x3CD PUSH2 0x3B9 DUP3 DUP9 PUSH2 0xB5A JUMP JUMPDEST SWAP2 PUSH0 DUP4 DUP3 SUB SWAP4 SLT DUP2 DUP5 SLT DUP2 AND SWAP2 DUP5 SGT SWAP1 ISZERO AND OR PUSH2 0x3F8 JUMPI PUSH1 0x1 SWAP2 PUSH2 0x3F1 DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD PUSH2 0x3A3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 POP SWAP2 SWAP3 PUSH2 0x434 DUP5 MLOAD PUSH2 0xB29 JUMP JUMPDEST SWAP3 PUSH0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x462 JUMPI PUSH1 0x1 SWAP1 PUSH2 0x451 PUSH1 0x44 CALLDATALOAD DUP10 DUP4 DUP9 PUSH2 0xD76 JUMP JUMPDEST PUSH2 0x45B DUP3 DUP9 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD PUSH2 0x437 JUMP JUMPDEST POP SWAP2 SWAP1 SWAP5 SWAP4 PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0xA57 JUMPI PUSH0 SWAP5 PUSH2 0x9AD JUMPI JUMPDEST POP POP SWAP5 SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 GT PUSH2 0x3F8 JUMPI DUP4 LT ISZERO PUSH2 0x92F JUMPI POP PUSH0 SWAP2 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x595 JUMPI PUSH0 PUSH2 0x556 DUP3 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD SGT DUP1 PUSH2 0x582 JUMPI JUMPDEST PUSH2 0x56B JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x542 JUMP JUMPDEST PUSH2 0x57A SWAP2 SWAP9 POP DUP1 SWAP5 POP DUP7 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP7 DUP4 PUSH2 0x563 JUMP JUMPDEST POP DUP9 PUSH2 0x58E DUP3 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD SLT PUSH2 0x55E JUMP JUMPDEST POP SWAP7 POP SWAP2 SWAP5 SWAP1 SWAP3 PUSH0 SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 SWAP8 PUSH0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x615 JUMPI PUSH0 PUSH2 0x5D6 DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD SLT DUP1 PUSH2 0x602 JUMPI JUMPDEST PUSH2 0x5EB JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x5C2 JUMP JUMPDEST PUSH2 0x5FA SWAP2 SWAP10 POP DUP1 SWAP4 POP DUP8 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP8 DUP3 PUSH2 0x5E3 JUMP JUMPDEST POP DUP10 PUSH2 0x60E DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD SGT PUSH2 0x5DE JUMP JUMPDEST POP SWAP3 SWAP7 SWAP8 POP SWAP4 SWAP3 DUP2 SWAP8 PUSH2 0x628 DUP2 DUP9 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0x63C PUSH2 0x636 DUP6 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xB9B JUMP JUMPDEST SGT ISZERO PUSH2 0x7DF JUMPI PUSH2 0x75A DUP7 PUSH2 0x71E DUP11 PUSH2 0x710 PUSH2 0x68E PUSH2 0x688 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x680 DUP13 DUP3 PUSH2 0x678 DUP6 DUP13 PUSH2 0xB5A JUMP JUMPDEST MLOAD AND SWAP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD AND SWAP5 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xE06 JUMP JUMPDEST SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 PUSH32 0x3EBC54E500000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x44 CALLDATALOAD SWAP3 DUP14 PUSH1 0x24 DUP8 ADD SWAP4 SWAP1 PUSH1 0xE0 SWAP6 SWAP3 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP6 DUP2 DUP1 SWAP5 AND DUP9 MSTORE AND PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0xAD2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST PUSH1 0x20 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0x787 DUP4 DUP3 PUSH2 0x780 PUSH2 0x78D SWAP7 PUSH1 0x20 DUP16 SWAP8 ADD MLOAD SWAP7 PUSH2 0xB5A JUMP JUMPDEST MSTORE DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0xD21 JUMP JUMPDEST SWAP2 PUSH2 0x798 DUP2 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH0 DUP5 DUP3 ADD SWAP5 DUP6 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x3F8 JUMPI PUSH1 0x1 SWAP3 PUSH2 0x7BC DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0x7D5 PUSH2 0x7CE PUSH1 0x44 CALLDATALOAD DUP11 DUP5 DUP10 PUSH2 0xD76 JUMP JUMPDEST SWAP2 DUP9 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD SWAP2 SWAP1 SWAP6 PUSH2 0x4E8 JUMP JUMPDEST SWAP2 DUP1 PUSH2 0x7EB DUP5 DUP9 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP7 PUSH2 0x80E DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH2 0x830 SWAP1 DUP13 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0x83A SWAP1 PUSH2 0xB9B JUMP JUMPDEST PUSH2 0x843 SWAP1 PUSH2 0xE06 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x175D440800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP4 DUP3 AND PUSH1 0x44 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP3 AND PUSH1 0x64 DUP6 ADD MSTORE PUSH1 0x84 DUP5 ADD MSTORE SWAP1 CALLDATALOAD AND PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xC4 DUP3 ADD MSTORE PUSH0 PUSH1 0xE4 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE PUSH2 0x8C9 PUSH2 0x104 DUP3 PUSH2 0xAD2 JUMP JUMPDEST PUSH2 0x909 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST DUP1 DUP1 MLOAD DUP2 ADD SUB PUSH1 0x20 SGT PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0x787 DUP4 DUP3 PUSH2 0x780 PUSH2 0x78D SWAP7 PUSH1 0x20 DUP16 SWAP8 ADD MLOAD SWAP7 PUSH2 0xB5A JUMP JUMPDEST PUSH2 0x94F DUP2 PUSH2 0x949 PUSH2 0x944 PUSH2 0x636 DUP12 SWAP6 DUP12 PUSH2 0xB5A JUMP JUMPDEST PUSH2 0xE06 JUMP JUMPDEST SWAP3 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x3F8 JUMPI DUP2 ISZERO PUSH2 0x980 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x40 MLOAD SWAP2 DIV PUSH1 0x1 SHR DUP2 MSTORE RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP4 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x9C0 DUP2 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0x1A3 JUMPI DUP1 MLOAD SWAP2 DUP3 GT PUSH2 0x1A3 JUMPI ADD SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP2 MLOAD SWAP1 PUSH2 0x9EF DUP3 PUSH2 0xAF5 JUMP JUMPDEST SWAP3 PUSH2 0x9FD PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP4 PUSH1 0x5 SHL DUP3 ADD ADD SWAP2 DUP3 GT PUSH2 0x1A3 JUMPI PUSH1 0x20 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0xA2A JUMPI POP POP POP SWAP2 DUP7 DUP1 PUSH2 0x4E1 JUMP JUMPDEST DUP3 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1A3 JUMPI DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0xA18 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x38C JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x236 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1A3 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xA72 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0xB33 DUP3 PUSH2 0xAF5 JUMP JUMPDEST PUSH2 0xB40 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0xB50 DUP3 SWAP5 PUSH2 0xAF5 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0xB6E JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x3F8 JUMPI PUSH0 SUB SWAP1 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0xBF1 JUMPI RETURNDATASIZE SWAP1 PUSH2 0xBD8 DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP2 PUSH2 0xBE6 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP1 SWAP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 SWAP4 PUSH32 0xDA001F7D00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE DUP3 PUSH1 0xA4 DUP6 ADD SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x80 PUSH1 0x44 DUP6 ADD MSTORE DUP7 MLOAD DUP1 SWAP2 MSTORE DUP5 PUSH1 0xC4 DUP6 ADD SWAP8 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xD0D JUMPI POP POP POP DUP4 PUSH2 0xCFC SWAP5 SWAP6 SWAP7 DUP4 PUSH2 0xCD5 SWAP4 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH0 DUP6 DUP3 SUB SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP4 ADD PUSH1 0x84 DUP9 ADD MSTORE MSTORE DUP1 DUP6 MSTORE ADD DUP4 PUSH2 0xAD2 JUMP JUMPDEST PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST DUP2 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x1A3 JUMPI ADD MLOAD SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP10 MSTORE SWAP8 DUP7 ADD SWAP8 SWAP2 DUP7 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xC81 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xD4B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0xDB1 DUP4 DUP3 MLOAD SWAP3 PUSH1 0x1F NOT PUSH2 0xDA5 PUSH2 0xD8F DUP7 PUSH2 0xAF5 JUMP JUMPDEST SWAP6 PUSH2 0xD9D PUSH1 0x40 MLOAD SWAP8 DUP9 PUSH2 0xAD2 JUMP JUMPDEST DUP1 DUP8 MSTORE PUSH2 0xAF5 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP4 DUP5 ISZERO PUSH2 0xDFD JUMPI PUSH2 0xDD9 SWAP4 PUSH2 0xDD3 PUSH0 DUP8 SGT SWAP7 DUP8 PUSH0 EQ PUSH2 0xDEE JUMPI SWAP2 JUMPDEST DUP5 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0xC1B JUMP JUMPDEST SWAP1 ISZERO PUSH2 0xDE2 JUMPI SWAP1 JUMP JUMPDEST PUSH2 0xDEB SWAP1 PUSH2 0xB9B JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0xDF7 SWAP1 PUSH2 0xB9B JUMP JUMPDEST SWAP2 PUSH2 0xDCD JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0xE10 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP2 MLOAD LT PUSH2 0xE4B JUMPI PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xE4B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0xEBF JUMPI POP DUP1 MLOAD ISZERO PUSH2 0xE97 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0xF12 JUMPI JUMPDEST PUSH2 0xED0 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0xEC8 JUMP JUMPDEST SWAP1 ADDRESS EXTCODESIZE ISZERO PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0xF80 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA769963800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SWAP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0xBF6 JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL SWAP1 DUP2 PUSH2 0x10F5 JUMPI JUMPDEST POP PUSH2 0x1097 JUMPI PUSH2 0xF9A PUSH2 0xBC7 JUMP JUMPDEST SWAP1 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0xFE6 DUP5 PUSH2 0xE3B JUMP JUMPDEST AND SUB PUSH2 0x1091 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC SWAP4 DUP5 DUP2 ADD PUSH1 0x4 DUP5 ADD MSTORE DUP3 ADD SWAP4 DUP3 DUP3 DUP7 ADD SWAP6 SUB ADD SLT PUSH2 0x108D JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1089 JUMPI ADD DUP3 PUSH1 0x43 DUP3 ADD SLT ISZERO PUSH2 0x108D JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH2 0x105A DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP4 PUSH2 0x1068 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP6 MSTORE PUSH1 0x44 DUP4 DUP4 ADD ADD GT PUSH2 0x1089 JUMPI SWAP1 DUP1 PUSH1 0x44 PUSH1 0x20 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP PUSH2 0xE73 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420737563636573730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP1 PUSH0 PUSH2 0xF8D JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 AND PUSH22 0xB6747C06A232114D5996AB74371BBDC52003636D23D3 DUP8 SGT PREVRANDAO RETURN 0xA8 SLOAD MSIZE ADDMOD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"635:8728:85:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;811:19:75;;;;;;:::i;:::-;840:718;;;;;990:10;955:63;990:10;635:8728:85;990:10:75;;955:63;:::i;:::-;;635:8728:85;;1084:26:75;;;;;;635:8728:85;;1084:26:75;;635:8728:85;;;;;;:::i;:::-;1084:26:75;;;840:718;1276:33;1344:27;635:8728:85;1276:33:75;;;:::i;:::-;635:8728:85;1327:44:75;1540:6;1323:110;1398:20;635:8728:85;1398:20:75;635:8728:85;;1398:20:75;635:8728:85;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1363:58;635:8728;;1363:58;;;:::i;:::-;635:8728;;;3822:254;3870:56;635:8728;3822:254;;;635:8728;;;3822:254;;635:8728;3822:254;;635:8728;;;;;;;;;;;;;;;;;;;;3822:254;;635:8728;;;;;;;;;;;;;3748:346;635:8728;;;;3792:7;635:8728;3748:346;:::i;:::-;635:8728;;;3720:417;;;635:8728;3720:417;;;;635:8728;;;;;;3720:417;;635:8728;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1642:35;635:8728;;1642:35;:::i;:::-;1692:13;635:8728;1734:3;635:8728;;1707:25;;;;;1765:36;:25;;;;:::i;:::-;635:8728;1765:36;:::i;:::-;1804:17;:28;:17;;;;:::i;:28::-;635:8728;;;;;;;;;;;;;;;;;;;;;;1753:79;;;;;:::i;:::-;635:8728;;1692:13;;635:8728;;;;;;;;;;1707:25;;;;;;1988:35;635:8728;;1988:35;:::i;:::-;2038:13;635:8728;2080:3;635:8728;;2053:25;;;;;635:8728;;2114:67;635:8728;;2114:67;;;;:::i;:::-;2099:82;;;;:::i;:::-;635:8728;;2038:13;;2053:25;;;;;;635:8728;;;;6714:26;635:8728;6714:26;;635:8728;6714:26;;635:8728;;6714:6;635:8728;6714:6;635:8728;6714:6;635:8728;6714:26;;;;;;;635:8728;6714:26;;;2033:159;6756:13;;;;635:8728;6751:1710;6794:3;635:8728;;;;;;;;;;6771:21;;;;;6912:28;635:8728;8712:29;8725:16;8756:13;635:8728;8789:3;635:8728;;8771:16;;;;;635:8728;8812:8;;;;:::i;:::-;635:8728;8812:12;:30;;;8789:3;8808:110;;8789:3;635:8728;;8756:13;;8808:110;8868:8;;;;;;;;;:::i;:::-;635:8728;;8894:9;8808:110;;8812:30;8828:8;;;;;;:::i;:::-;635:8728;8828:14;8812:30;;8771:16;;;;;;;;635:8728;9139:29;9152:16;9183:13;635:8728;9216:3;635:8728;;9198:16;;;;;635:8728;9239:8;;;;:::i;:::-;635:8728;9239:12;:30;;;9216:3;9235:110;;9216:3;635:8728;;9183:13;;9235:110;9295:8;;;;;;;;;:::i;:::-;635:8728;;9321:9;9235:110;;9239:30;9255:8;;;;;;:::i;:::-;635:8728;9255:14;9239:30;;9198:16;;;;;;;;6954:52;7021:23;7135:32;;;;:::i;:::-;635:8728;7170:33;7171:32;;;;:::i;:::-;635:8728;7170:33;:::i;:::-;-1:-1:-1;7171:32:85;;;4399:404;7223:39;4473:312;7223:39;4473:312;7528:35;:23;7223:39;635:8728;7478:28;7280:40;7429:27;;;;;:::i;:::-;635:8728;;7478:28;;:::i;:::-;635:8728;;7528:23;;:::i;:::-;635:8728;7528:35;:::i;:::-;635:8728;;;4473:312;;;4521:51;635:8728;4473:312;;;635:8728;;4473:312;;635:8728;4473:312;;635:8728;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4473:312;;-1:-1:-1;;4473:312:85;;;;;;:::i;:::-;635:8728;3792:7;635:8728;4399:404;:::i;:::-;635:8728;;;;4371:473;;635:8728;;;;;8151:30;4371:473;;8110:27;8223:23;4371:473;635:8728;4371:473;;;635:8728;7131:922;8110:27;:::i;:::-;635:8728;8151:30;;:::i;:::-;635:8728;8223:23;:::i;:::-;8195:51;;;;;:::i;:::-;635:8728;;;;;;;;;;;;;;;;;;;;;;8195:51;;;;;:::i;:::-;635:8728;8260:190;8290:160;635:8728;;8290:160;;;;:::i;:::-;8260:190;;;:::i;:::-;635:8728;;6756:13;;;;;7131:922;7648:39;;7855:28;7648:39;7855:28;;:::i;:::-;635:8728;;;7905:27;;;;;;:::i;:::-;635:8728;;;7956:23;;;;;:::i;:::-;635:8728;7955:24;;;:::i;:::-;7954:38;;;:::i;:::-;635:8728;;5230:52;635:8728;5182:314;;;635:8728;;;;;5182:314;;635:8728;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;635:8728:85;;;;;;;;5182:314;;;635:8728;;5182:314;:::i;:::-;5108:406;;635:8728;3792:7;635:8728;5108:406;:::i;:::-;635:8728;;;5080:475;;635:8728;;-1:-1:-1;635:8728:85;;;8151:30;5080:475;;8110:27;8223:23;5080:475;635:8728;5080:475;;;635:8728;7131:922;8110:27;:::i;6771:21::-;2647:35;6771:21;2574:42;2575:28;2576:27;6771:21;;;2576:27;:::i;2575:28::-;2574:42;:::i;:::-;2647:35;;:::i;:::-;635:8728;465:4:39;;;;;;;;;;;;;;;;;635:8728:85;;;;;;;;;;;;;;;;;;;;;;;;;6714:26;;;;;;;635:8728;6714:26;;;;;;:::i;:::-;;;635:8728;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;6714:26;;;;;;;;635:8728;;;;;;;;;;;;;;;;;;;;6714:26;635:8728;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;635:8728:85;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;635:8728:85;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;635:8728:85;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;635:8728:85;;;;:::o;:::-;;;:::o;:::-;;-1:-1:-1;;635:8728:85;;;;;;;;;;;;;;;;;-1:-1:-1;635:8728:85;;;;;;;;;;;:::o;2918:606::-;;;;635:8728;;;3207:251;;;3255:51;3207:251;;;;635:8728;;;;;;3207:251;;;635:8728;;;;;;;;;;;;;;;;;;-1:-1:-1;635:8728:85;;;;;;;;;;3133:343;635:8728;;;;3207:251;635:8728;;;;;;-1:-1:-1;635:8728:85;;;;;;;;;;;;3207:251;;;;;;:::i;:::-;3177:7;635:8728;3133:343;:::i;:::-;635:8728;;;;3105:412;;635:8728;;;;3105:412;635:8728;2918:606;:::o;635:8728::-;;;;;;;;;;;;;;;;;34380:314:71;34573:16;34557:33;;34553:105;;34380:314;:::o;34553:105::-;34613:34;;;;635:8728:85;;34613:34:71;;5783:602:85;;;;6076:18;635:8728;;;;-1:-1:-1;;635:8728:85;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;6076:18;:::i;:::-;635:8728;6109:10;;;6105:49;;6267:64;6207:9;6164:70;635:8728;6207:9;;:26;;;;;;;;6164:70;;:::i;:::-;635:8728;6267:64;:::i;:::-;6350:28;;;;5783:602;:::o;6350:28::-;6371:7;;;:::i;:::-;5783:602;:::o;6207:26::-;6227:6;;;:::i;:::-;6207:26;;;6105:49;6135:8;;;;;635:8728;6135:8;:::o;17171:193:71:-;17258:1;17250:9;;17246:81;;17171:193;:::o;17246:81::-;17282:34;17258:1;17282:34;;635:8728:85;;17258:1:71;17282:34;1336:351:37;1463:1;635:8728:85;;1443:21:37;1439:82;;1530:151;;;1336:351;:::o;1439:82::-;1487:23;;;1463:1;1487:23;;1741:504;635:8728:85;;1881:21:37;:17;;2008:160;;;;;;4437:582:61;;4609:8;;-1:-1:-1;635:8728:85;;5690:21:61;:17;;5815:105;;;;;;5686:301;5957:19;5710:1;5957:19;;5710:1;5957:19;4605:408;635:8728:85;;4857:22:61;:49;;;4605:408;4853:119;;4985:17;;:::o;4853:119::-;635:8728:85;4933:24:61;;4878:1;4933:24;635:8728:85;4933:24:61;635:8728:85;;4878:1:61;4933:24;4857:49;4883:18;;;:23;4857:49;;303:324:75;;430:4;408:60;;;;;635:8728:85;;;;408:60:75;;;;635:8728:85;408:60:75;;635:8728:85;408:60:75;635:8728:85;;408:60:75;;;635:8728:85;;;;;;;;;;;:::i;:::-;408:60:75;430:4;;;408:60;;;;;;303:324;-1:-1:-1;404:217:75;;523:98;;:::i;:::-;720:36:37;787:15;635:8728:85;720:36:37;;;:::i;:::-;635:8728:85;770:32:37;766:185;;635:8728:85;;1013:179:37;1209:30;1013:179;;;;;408:60:75;1013:179:37;;;1209:30;;;;;;;635:8728:85;;;;;;;1209:30:37;;635:8728:85;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;1209:30:37;635:8728:85;;;;;;;;;;565:45:75;:::o;635:8728:85:-;;;;;;;;766:185:37;930:9;;:::i;404:217:75:-;635:8728:85;;;483:28:75;;;635:8728:85;408:60:75;483:28;;635:8728:85;;;;;;;;;;;483:28:75;408:60;635:8728:85;;;;;;;;;;408:60:75;;;;"},"methodIdentifiers":{"calculateAddLiquidityUnbalancedPriceImpact(address,uint256[],address)":"48406a54","callAndRevertHook(address,bytes)":"a7699638"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IRouter\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"calculateAddLiquidityUnbalancedPriceImpact\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"priceImpact\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callAndRevertHook\",\"outputs\":[],\"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.\"}],\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/PriceImpactHelper.sol\":\"PriceImpactHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":{\"keccak256\":\"0x5a0ee9f30170b2df308aa992f331d2070f389c1c7261b166ad8dcf058b079c00\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://89a654106d847701efa4cffbe73d98aea2bc0f9a041a28b4762f127fce48eba3\",\"dweb:/ipfs/QmVZKnQqxmydspv6P6e4137QHiNnhP6J7fzWh9XFuJj6At\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol\":{\"keccak256\":\"0x7a46d0e972ea96fe2190b4975d71fa033fbc65cb596f3c584a47b37b2b58ade1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://56e07234b208282d0751b31eefbed6d48cfacddd9c2dbad7f4fbc55789bdc0ca\",\"dweb:/ipfs/QmTRLGeyZNzKY3S4JUWwDshCMfnY6WMFq2BGD5BozWFAnC\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"contracts/CallAndRevert.sol\":{\"keccak256\":\"0xe0f09e833265592b398c7607db658e3541b800f66c9536ee129ae6863e4185f2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bc7dd31dd95f738debb5ca8c8b80e90384c1d8b72dc70e02dd7ae22e7c77f337\",\"dweb:/ipfs/QmNaJXyazNRD1fbqs6QJSwB3VWKu3ZjHqecMqKg57UeMuS\"]},\"contracts/PriceImpactHelper.sol\":{\"keccak256\":\"0xdba22a15b68c0631a6da1de1a5e2e568339959f29950046b8ca881f7ac5e301f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5973227783a748f09558f2b5943d66128636b63936d847719c33d1158b06ce86\",\"dweb:/ipfs/QmVke3xsrpFf9H28dyrTaYhxbPU4aGywtUf6NaKzgRAb4v\"]}},\"version\":1}"}},"contracts/ProtocolFeeHelper.sol":{"ProtocolFeeHelper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"InvalidPoolSetId","type":"error"},{"inputs":[],"name":"InvalidPoolSetManager","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"poolSetManager","type":"address"}],"name":"PoolSetManagerNotUnique","type":"error"},{"inputs":[],"name":"SenderIsNotPoolSetManager","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolRemovedFromSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"initialManager","type":"address"}],"name":"PoolSetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"PoolSetDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"PoolSetOwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPoolsToSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"destroyPoolSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getAllPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getManagerForPoolSet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextPoolSetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getPoolCountForSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolSetIdForCaller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"getPoolSetIdForManager","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isPoolInSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isValidPoolSetId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePoolsFromSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferPoolSetOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461011e57601f611b4d38819003918201601f19168301916001600160401b0383118484101761012257808492604094855283398101031261011e5780516001600160a01b03918282169081830361011e576020015183811680910361011e57801561010b5760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100fc5760a0526001600255611a1690816101378239608051816112ee015260a05181818161025401528181610386015281816106c501528181610d0d015281816116e601526118bf0152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60406080815260049081361015610014575f80fd5b5f915f358060e01c908163182551da1461105c578163255dae411461101c57816325c427ed14610fd95781632da55a1d14610f115781633700f98714610e5d5781633e035f9b14610c8557816362d5346214610c54578163715018a614610bcf57816379ba509714610b6b5781637c1ec46014610a1f578163851c1bb3146109d65781638c60ebd0146108905781638da5cb5b1461085d57816394fc4058146107dd578163a89b11281461073a57508063aaabadc514610672578063abaa335614610599578063c482e8221461057a578063ce998aba14610556578063e30c397814610521578063e909c19b146104e3578063ebf3a8d01461034c578063f167a1e61461030b578063f2fde38b1461027c578063fbfa77cf146102275763fd267f391461013f575f80fd5b8291346102235780600319360112610223576101596110c4565b61016a816101656114eb565b611630565b73ffffffffffffffffffffffffffffffffffffffff6101876116a3565b1692833b1561021f576101f09385928385518097819582947ffd267f390000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af190811561021657506102035750f35b61020c906110e7565b6102135780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b5050346102785781600319360112610278576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b8334610213576020600319360112610213576102966110c4565b61029e61141c565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5034610348576020600319360112610348578160209373ffffffffffffffffffffffffffffffffffffffff92358152600385522054169051908152f35b8280fd5b50346103485761035b366111fe565b61036361141c565b61036c826113b7565b80519273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692875b8681106103b5578880f35b826103c08284611282565b511688517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156104d9578d916104ac575b501561048257600590898d525261041f828b8d20611988565b15610454575090866001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b698c80a3016103aa565b878b91604493887f5a17aa8d0000000000000000000000000000000000000000000000000000000085525252fd5b508a82877f9e51bd5c00000000000000000000000000000000000000000000000000000000835252fd5b6104cc9150823d84116104d2575b6104c48183611128565b81019061139f565b5f610406565b503d6104ba565b8c513d8f823e3d90fd5b5050346102785760206003193601126102785760209061051a6105046110c4565b61050c61141c565b61051581611468565b611529565b9051908152f35b50503461027857816003193601126102785760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50346103485782600319360112610348576020928291338252845220549051908152f35b5050346102785781600319360112610278576020906002549051908152f35b50903461066e578060031936011261066e576105b36110c4565b6105bf816101656114eb565b73ffffffffffffffffffffffffffffffffffffffff6105dc6116a3565b1692833b1561066e57610645935f928385518097819582947fabaa33560000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19081156106655750610659575080f35b61066391506110e7565b005b513d5f823e3d90fd5b5f80fd5b503461066e575f60031936011261066e5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561073057926020935f93610701575b505191168152f35b610722919350843d8611610729575b61071a8183611128565b810190611373565b91846106f9565b503d610710565b83513d5f823e3d90fd5b90503461066e57602060031936011261066e5761078a6107837fffffffff0000000000000000000000000000000000000000000000000000000061077c6110c4565b93166112c3565b3390611868565b156107b65773ffffffffffffffffffffffffffffffffffffffff5f541633146107b657610663906115be565b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b50503461066e57602090602060031936011261066e57356107fd816113b7565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b828210610846576108428686610838828b0383611128565b5191829182611231565b0390f35b835487529586019560019384019390910190610820565b833461066e575f60031936011261066e5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50503461066e57606060031936011261066e57803590602435604435916108b6846113b7565b835f526005906020906005602052865f20548585119081156109cc575b81156109c1575b5061099657506108ea8385611339565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061092d61091888611169565b976109258a51998a611128565b808952611169565b01366020880137835b85811061094a578751806108428982611231565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff610974828b5f2061175f565b90549060031b1c1661098f6109898884611339565b8a611282565b5201610936565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b9050841015886108da565b80871191506108d3565b50503461066e57602060031936011261066e5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361066e5761051a6020926112c3565b50503461066e576020918260031936011261066e57813591610a3f61141c565b610a48836113b7565b825f5260058452815f208054805b610b0b575050825f5260058452815f208054905f815581610aee575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610a72575f8155600101610af8565b5f190180610b6573ffffffffffffffffffffffffffffffffffffffff610b31838661175f565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a384611774565b50610a56565b823461066e575f60031936011261066e573373ffffffffffffffffffffffffffffffffffffffff6001541603610ba457610663336115be565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b3461066e575f60031936011261066e57610be761141c565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b82843461066e57602060031936011261066e5760209135610c74816113b7565b5f5260058252805f20549051908152f35b82843461066e578060031936011261066e57610c9f6110c4565b60249260243567ffffffffffffffff811161066e57610cc4610ccd9136908401611181565b9261050c61141c565b938251610cdf575b6020858551908152f35b610cea92919261141c565b610cf3856113b7565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610d415750505050610cd5565b82610d4c8284611282565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610e53575f91610e36575b5015610e0c579060058b92835f5252610dab818b5f20611988565b15610ddf5790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610d31565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610e4d9150823d84116104d2576104c48183611128565b8c610d90565b8b513d5f823e3d90fd5b82843461066e57602060031936011261066e57610e786110c4565b91610e8283611468565b610e8a6114eb565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b82843461066e57610f21366111fe565b91610f2a61141c565b610f33826113b7565b8251925f5b848110610f4157005b73ffffffffffffffffffffffffffffffffffffffff610f608284611282565b5116845f526005602052610f7681855f20611774565b15610faa5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610f38565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b82843461066e57602060031936011261066e5760209173ffffffffffffffffffffffffffffffffffffffff61100c6110c4565b165f528252805f20549051908152f35b82843461066e57602060031936011261066e57602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b833461066e578060031936011261066e576020906110bb61107b6110c4565b602435611087816113b7565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361066e57565b67ffffffffffffffff81116110fb57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110fb57604052565b67ffffffffffffffff81116110fb5760051b60200190565b9080601f8301121561066e57602090823561119b81611169565b936111a96040519586611128565b81855260208086019260051b82010192831161066e57602001905b8282106111d2575050505090565b813573ffffffffffffffffffffffffffffffffffffffff8116810361066e5781529083019083016111c4565b90604060031983011261066e57600435916024359067ffffffffffffffff821161066e5761122e91600401611181565b90565b60209060206040818301928281528551809452019301915f5b828110611258575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161124a565b80518210156112965760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176110fb5760405251902090565b9190820391821161134657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9081602091031261066e575173ffffffffffffffffffffffffffffffffffffffff8116810361066e5790565b9081602091031261066e5751801515810361066e5790565b801580156113f2575b6113c75750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f205416156113c0565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361143c57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff1680156114c357805f52600460205260405f20546114985750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561150157565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611346576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b90815f52600560205261166c73ffffffffffffffffffffffffffffffffffffffff60405f20921680926001915f520160205260405f2054151590565b15611675575050565b7f80145d72000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa918215611754575f9261171b57505090565b9091506020813d60201161174c575b8161173760209383611128565b8101031261066e5751908116810361066e5790565b3d915061172a565b6040513d5f823e3d90fd5b8054821015611296575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f14611860575f19918281018181116113465782549084820191821161134657818103611815575b505050805480156117e8578201916117ca838361175f565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61184b611825611835938661175f565b90549060031b1c9283928661175f565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806117b2565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f5416911690811461198057604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156117545785935f9561195c575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa918215611754575f9261194657505090565b61122e9250803d106104d2576104c48183611128565b60649291955061197890853d87116107295761071a8183611128565b9490916118f1565b505050600190565b5f8281526001820160205260409020546119da57805490680100000000000000008210156110fb57826119c561183584600180960185558461175f565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220a86eee931a88d4f839c9313a069eb3f4357676a3b7e1548b9f23cf223f177aaf64736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x11E JUMPI PUSH1 0x1F PUSH2 0x1B4D CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x122 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x11E JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x11E JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x11E JUMPI DUP1 ISZERO PUSH2 0x10B JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xFC JUMPI PUSH1 0xA0 MSTORE PUSH1 0x1 PUSH1 0x2 SSTORE PUSH2 0x1A16 SWAP1 DUP2 PUSH2 0x137 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x12EE ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x254 ADD MSTORE DUP2 DUP2 PUSH2 0x386 ADD MSTORE DUP2 DUP2 PUSH2 0x6C5 ADD MSTORE DUP2 DUP2 PUSH2 0xD0D ADD MSTORE DUP2 DUP2 PUSH2 0x16E6 ADD MSTORE PUSH2 0x18BF ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x182551DA EQ PUSH2 0x105C JUMPI DUP2 PUSH4 0x255DAE41 EQ PUSH2 0x101C JUMPI DUP2 PUSH4 0x25C427ED EQ PUSH2 0xFD9 JUMPI DUP2 PUSH4 0x2DA55A1D EQ PUSH2 0xF11 JUMPI DUP2 PUSH4 0x3700F987 EQ PUSH2 0xE5D JUMPI DUP2 PUSH4 0x3E035F9B EQ PUSH2 0xC85 JUMPI DUP2 PUSH4 0x62D53462 EQ PUSH2 0xC54 JUMPI DUP2 PUSH4 0x715018A6 EQ PUSH2 0xBCF JUMPI DUP2 PUSH4 0x79BA5097 EQ PUSH2 0xB6B JUMPI DUP2 PUSH4 0x7C1EC460 EQ PUSH2 0xA1F JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x9D6 JUMPI DUP2 PUSH4 0x8C60EBD0 EQ PUSH2 0x890 JUMPI DUP2 PUSH4 0x8DA5CB5B EQ PUSH2 0x85D JUMPI DUP2 PUSH4 0x94FC4058 EQ PUSH2 0x7DD JUMPI DUP2 PUSH4 0xA89B1128 EQ PUSH2 0x73A JUMPI POP DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x672 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0x599 JUMPI DUP1 PUSH4 0xC482E822 EQ PUSH2 0x57A JUMPI DUP1 PUSH4 0xCE998ABA EQ PUSH2 0x556 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x521 JUMPI DUP1 PUSH4 0xE909C19B EQ PUSH2 0x4E3 JUMPI DUP1 PUSH4 0xEBF3A8D0 EQ PUSH2 0x34C JUMPI DUP1 PUSH4 0xF167A1E6 EQ PUSH2 0x30B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x227 JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x13F JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP3 SWAP2 CALLVALUE PUSH2 0x223 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x223 JUMPI PUSH2 0x159 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x16A DUP2 PUSH2 0x165 PUSH2 0x14EB JUMP JUMPDEST PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x187 PUSH2 0x16A3 JUMP JUMPDEST AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x21F JUMPI PUSH2 0x1F0 SWAP4 DUP6 SWAP3 DUP4 DUP6 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0xFD267F3900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 CALLDATALOAD SWAP2 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x216 JUMPI POP PUSH2 0x203 JUMPI POP RETURN JUMPDEST PUSH2 0x20C SWAP1 PUSH2 0x10E7 JUMP JUMPDEST PUSH2 0x213 JUMPI DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST POP POP REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x278 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x278 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x213 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x213 JUMPI PUSH2 0x296 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x29E PUSH2 0x141C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE DUP3 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x348 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI DUP2 PUSH1 0x20 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x3 DUP6 MSTORE KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x348 JUMPI PUSH2 0x35B CALLDATASIZE PUSH2 0x11FE JUMP JUMPDEST PUSH2 0x363 PUSH2 0x141C JUMP JUMPDEST PUSH2 0x36C DUP3 PUSH2 0x13B7 JUMP JUMPDEST DUP1 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 DUP8 JUMPDEST DUP7 DUP2 LT PUSH2 0x3B5 JUMPI DUP9 DUP1 RETURN JUMPDEST DUP3 PUSH2 0x3C0 DUP3 DUP5 PUSH2 0x1282 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x4D9 JUMPI DUP14 SWAP2 PUSH2 0x4AC JUMPI JUMPDEST POP ISZERO PUSH2 0x482 JUMPI PUSH1 0x5 SWAP1 DUP10 DUP14 MSTORE MSTORE PUSH2 0x41F DUP3 DUP12 DUP14 KECCAK256 PUSH2 0x1988 JUMP JUMPDEST ISZERO PUSH2 0x454 JUMPI POP SWAP1 DUP7 PUSH1 0x1 SWAP3 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 DUP13 DUP1 LOG3 ADD PUSH2 0x3AA JUMP JUMPDEST DUP8 DUP12 SWAP2 PUSH1 0x44 SWAP4 DUP9 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE MSTORE MSTORE REVERT JUMPDEST POP DUP11 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH2 0x4CC SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D2 JUMPI JUMPDEST PUSH2 0x4C4 DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x139F JUMP JUMPDEST PUSH0 PUSH2 0x406 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4BA JUMP JUMPDEST DUP13 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x278 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x278 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x51A PUSH2 0x504 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x50C PUSH2 0x141C JUMP JUMPDEST PUSH2 0x515 DUP2 PUSH2 0x1468 JUMP JUMPDEST PUSH2 0x1529 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x278 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x278 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x348 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0x20 SWAP3 DUP3 SWAP2 CALLER DUP3 MSTORE DUP5 MSTORE KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x278 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x278 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x66E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0x5B3 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x5BF DUP2 PUSH2 0x165 PUSH2 0x14EB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5DC PUSH2 0x16A3 JUMP JUMPDEST AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x66E JUMPI PUSH2 0x645 SWAP4 PUSH0 SWAP3 DUP4 DUP6 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0xABAA335600000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 CALLDATALOAD SWAP2 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x665 JUMPI POP PUSH2 0x659 JUMPI POP DUP1 RETURN JUMPDEST PUSH2 0x663 SWAP2 POP PUSH2 0x10E7 JUMP JUMPDEST STOP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x66E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x730 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x701 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x722 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x729 JUMPI JUMPDEST PUSH2 0x71A DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1373 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x6F9 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x710 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0x78A PUSH2 0x783 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x77C PUSH2 0x10C4 JUMP JUMPDEST SWAP4 AND PUSH2 0x12C3 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x1868 JUMP JUMPDEST ISZERO PUSH2 0x7B6 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x7B6 JUMPI PUSH2 0x663 SWAP1 PUSH2 0x15BE JUMP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI CALLDATALOAD PUSH2 0x7FD DUP2 PUSH2 0x13B7 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x846 JUMPI PUSH2 0x842 DUP7 DUP7 PUSH2 0x838 DUP3 DUP12 SUB DUP4 PUSH2 0x1128 JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1231 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x820 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x66E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x8B6 DUP5 PUSH2 0x13B7 JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x9CC JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x9C1 JUMPI JUMPDEST POP PUSH2 0x996 JUMPI POP PUSH2 0x8EA DUP4 DUP6 PUSH2 0x1339 JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x92D PUSH2 0x918 DUP9 PUSH2 0x1169 JUMP JUMPDEST SWAP8 PUSH2 0x925 DUP11 MLOAD SWAP10 DUP11 PUSH2 0x1128 JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x1169 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x94A JUMPI DUP8 MLOAD DUP1 PUSH2 0x842 DUP10 DUP3 PUSH2 0x1231 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x974 DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x175F JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x98F PUSH2 0x989 DUP9 DUP5 PUSH2 0x1339 JUMP JUMPDEST DUP11 PUSH2 0x1282 JUMP JUMPDEST MSTORE ADD PUSH2 0x936 JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x8DA JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x8D3 JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x66E JUMPI PUSH2 0x51A PUSH1 0x20 SWAP3 PUSH2 0x12C3 JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0xA3F PUSH2 0x141C JUMP JUMPDEST PUSH2 0xA48 DUP4 PUSH2 0x13B7 JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0xB0B JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0xAEE JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA72 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xAF8 JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0xB65 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xB31 DUP4 DUP7 PUSH2 0x175F JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x1774 JUMP JUMPDEST POP PUSH2 0xA56 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x66E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0xBA4 JUMPI PUSH2 0x663 CALLER PUSH2 0x15BE JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x66E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0xBE7 PUSH2 0x141C JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xC74 DUP2 PUSH2 0x13B7 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0xC9F PUSH2 0x10C4 JUMP JUMPDEST PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x66E JUMPI PUSH2 0xCC4 PUSH2 0xCCD SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1181 JUMP JUMPDEST SWAP3 PUSH2 0x50C PUSH2 0x141C JUMP JUMPDEST SWAP4 DUP3 MLOAD PUSH2 0xCDF JUMPI JUMPDEST PUSH1 0x20 DUP6 DUP6 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xCEA SWAP3 SWAP2 SWAP3 PUSH2 0x141C JUMP JUMPDEST PUSH2 0xCF3 DUP6 PUSH2 0x13B7 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0xD41 JUMPI POP POP POP POP PUSH2 0xCD5 JUMP JUMPDEST DUP3 PUSH2 0xD4C DUP3 DUP5 PUSH2 0x1282 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP10 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xE53 JUMPI PUSH0 SWAP2 PUSH2 0xE36 JUMPI JUMPDEST POP ISZERO PUSH2 0xE0C JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP3 DUP4 PUSH0 MSTORE MSTORE PUSH2 0xDAB DUP2 DUP12 PUSH0 KECCAK256 PUSH2 0x1988 JUMP JUMPDEST ISZERO PUSH2 0xDDF JUMPI SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xD31 JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xE4D SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D2 JUMPI PUSH2 0x4C4 DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST DUP13 PUSH2 0xD90 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0xE78 PUSH2 0x10C4 JUMP JUMPDEST SWAP2 PUSH2 0xE82 DUP4 PUSH2 0x1468 JUMP JUMPDEST PUSH2 0xE8A PUSH2 0x14EB JUMP JUMPDEST SWAP2 DUP3 SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH2 0xF21 CALLDATASIZE PUSH2 0x11FE JUMP JUMPDEST SWAP2 PUSH2 0xF2A PUSH2 0x141C JUMP JUMPDEST PUSH2 0xF33 DUP3 PUSH2 0x13B7 JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xF41 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xF60 DUP3 DUP5 PUSH2 0x1282 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0xF76 DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x1774 JUMP JUMPDEST ISZERO PUSH2 0xFAA JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0xF38 JUMP JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100C PUSH2 0x10C4 JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x66E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP1 PUSH2 0x10BB PUSH2 0x107B PUSH2 0x10C4 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x1087 DUP2 PUSH2 0x13B7 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x66E JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10FB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10FB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10FB JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x66E JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x119B DUP2 PUSH2 0x1169 JUMP JUMPDEST SWAP4 PUSH2 0x11A9 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1128 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x66E JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x11D2 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x66E JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x11C4 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x66E JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x66E JUMPI PUSH2 0x122E SWAP2 PUSH1 0x4 ADD PUSH2 0x1181 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1258 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x124A JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1296 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10FB JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1346 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x66E JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x66E JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x66E JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x66E JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x13F2 JUMPI JUMPDEST PUSH2 0x13C7 JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x13C0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x143C JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x14C3 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x1498 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLER PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x1501 JUMPI JUMP JUMPDEST PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x1346 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0x166C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND DUP1 SWAP3 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x1675 JUMPI POP POP JUMP JUMPDEST PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1754 JUMPI PUSH0 SWAP3 PUSH2 0x171B JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x174C JUMPI JUMPDEST DUP2 PUSH2 0x1737 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1128 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x66E JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x66E JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x172A JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x1296 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x1860 JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x1346 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x1346 JUMPI DUP2 DUP2 SUB PUSH2 0x1815 JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x17E8 JUMPI DUP3 ADD SWAP2 PUSH2 0x17CA DUP4 DUP4 PUSH2 0x175F JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x184B PUSH2 0x1825 PUSH2 0x1835 SWAP4 DUP7 PUSH2 0x175F JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x175F JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x17B2 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x1980 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x1754 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x195C JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1754 JUMPI PUSH0 SWAP3 PUSH2 0x1946 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x122E SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x4D2 JUMPI PUSH2 0x4C4 DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x1978 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x729 JUMPI PUSH2 0x71A DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x18F1 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x19DA JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0x10FB JUMPI DUP3 PUSH2 0x19C5 PUSH2 0x1835 DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x175F JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 PUSH15 0xEE931A88D4F839C9313A069EB3F435 PUSH23 0x76A3B7E1548B9F23CF223F177AAF64736F6C634300081B STOP CALLER ","sourceMap":"446:1537:86:-:0;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;-1:-1:-1;;;;;446:1537:86;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;446:1537:86;;;;;;;;;;;;;;;;;;;;;1273:26:49;;1269:95;;446:1537:86;;;;;;;;2093:20:50;446:1537:86;;2093:20:50;446:1537:86;;-1:-1:-1;446:1537:86;;;;;-1:-1:-1;446:1537:86;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1524:4:81;1347:46:33;;1548:29:81;1544:80;;1634:14;;2093:20:50;853:1:82;446:1537:86;;;;;;;1347:46:33;446:1537:86;;;;;1634:14:81;446:1537:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1544:80:81;1600:13;;;-1:-1:-1;1600:13:81;;-1:-1:-1;1600:13:81;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;446:1537:86;;-1:-1:-1;1322:31:49;446:1537:86;-1:-1:-1;446:1537:86;;;;;;-1:-1:-1;446:1537:86;;;;;-1:-1:-1;446:1537:86"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":4292,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_array_address_dyn":{"entryPoint":4481,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":5023,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":4979,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_array_address_dyn":{"entryPoint":4606,"id":null,"parameterSlots":1,"returnSlots":2},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_address_dyn":{"entryPoint":4657,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":4457,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":4921,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":4392,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_15528":{"entryPoint":4327,"id":null,"parameterSlots":1,"returnSlots":0},"fun_add":{"entryPoint":6536,"id":16149,"parameterSlots":2,"returnSlots":1},"fun_canPerform":{"entryPoint":6248,"id":20329,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":5148,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_contains":{"entryPoint":null,"id":16295,"parameterSlots":2,"returnSlots":1},"fun_createPoolSet":{"entryPoint":5417,"id":20497,"parameterSlots":1,"returnSlots":1},"fun_ensurePoolInSet":{"entryPoint":5680,"id":21027,"parameterSlots":2,"returnSlots":0},"fun_ensureValidManager":{"entryPoint":5224,"id":21004,"parameterSlots":1,"returnSlots":0},"fun_ensureValidPoolSet":{"entryPoint":5047,"id":21058,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":4803,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_getProtocolFeeController":{"entryPoint":5795,"id":21965,"parameterSlots":0,"returnSlots":1},"fun_getValidPoolSetId":{"entryPoint":5355,"id":20976,"parameterSlots":0,"returnSlots":1},"fun_remove":{"entryPoint":6004,"id":16233,"parameterSlots":2,"returnSlots":1},"fun_transferOwnership":{"entryPoint":5566,"id":9547,"parameterSlots":1,"returnSlots":0},"memory_array_index_access_address_dyn":{"entryPoint":4738,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_bytes32_dyn":{"entryPoint":5983,"id":null,"parameterSlots":2,"returnSlots":2},"update_byte_slice_dynamic32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":4846}],"20218":[{"length":32,"start":596},{"length":32,"start":902},{"length":32,"start":1733},{"length":32,"start":3341},{"length":32,"start":5862},{"length":32,"start":6335}]},"linkReferences":{},"object":"60406080815260049081361015610014575f80fd5b5f915f358060e01c908163182551da1461105c578163255dae411461101c57816325c427ed14610fd95781632da55a1d14610f115781633700f98714610e5d5781633e035f9b14610c8557816362d5346214610c54578163715018a614610bcf57816379ba509714610b6b5781637c1ec46014610a1f578163851c1bb3146109d65781638c60ebd0146108905781638da5cb5b1461085d57816394fc4058146107dd578163a89b11281461073a57508063aaabadc514610672578063abaa335614610599578063c482e8221461057a578063ce998aba14610556578063e30c397814610521578063e909c19b146104e3578063ebf3a8d01461034c578063f167a1e61461030b578063f2fde38b1461027c578063fbfa77cf146102275763fd267f391461013f575f80fd5b8291346102235780600319360112610223576101596110c4565b61016a816101656114eb565b611630565b73ffffffffffffffffffffffffffffffffffffffff6101876116a3565b1692833b1561021f576101f09385928385518097819582947ffd267f390000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af190811561021657506102035750f35b61020c906110e7565b6102135780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b5050346102785781600319360112610278576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b8334610213576020600319360112610213576102966110c4565b61029e61141c565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5034610348576020600319360112610348578160209373ffffffffffffffffffffffffffffffffffffffff92358152600385522054169051908152f35b8280fd5b50346103485761035b366111fe565b61036361141c565b61036c826113b7565b80519273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692875b8681106103b5578880f35b826103c08284611282565b511688517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156104d9578d916104ac575b501561048257600590898d525261041f828b8d20611988565b15610454575090866001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b698c80a3016103aa565b878b91604493887f5a17aa8d0000000000000000000000000000000000000000000000000000000085525252fd5b508a82877f9e51bd5c00000000000000000000000000000000000000000000000000000000835252fd5b6104cc9150823d84116104d2575b6104c48183611128565b81019061139f565b5f610406565b503d6104ba565b8c513d8f823e3d90fd5b5050346102785760206003193601126102785760209061051a6105046110c4565b61050c61141c565b61051581611468565b611529565b9051908152f35b50503461027857816003193601126102785760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50346103485782600319360112610348576020928291338252845220549051908152f35b5050346102785781600319360112610278576020906002549051908152f35b50903461066e578060031936011261066e576105b36110c4565b6105bf816101656114eb565b73ffffffffffffffffffffffffffffffffffffffff6105dc6116a3565b1692833b1561066e57610645935f928385518097819582947fabaa33560000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19081156106655750610659575080f35b61066391506110e7565b005b513d5f823e3d90fd5b5f80fd5b503461066e575f60031936011261066e5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561073057926020935f93610701575b505191168152f35b610722919350843d8611610729575b61071a8183611128565b810190611373565b91846106f9565b503d610710565b83513d5f823e3d90fd5b90503461066e57602060031936011261066e5761078a6107837fffffffff0000000000000000000000000000000000000000000000000000000061077c6110c4565b93166112c3565b3390611868565b156107b65773ffffffffffffffffffffffffffffffffffffffff5f541633146107b657610663906115be565b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b50503461066e57602090602060031936011261066e57356107fd816113b7565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b828210610846576108428686610838828b0383611128565b5191829182611231565b0390f35b835487529586019560019384019390910190610820565b833461066e575f60031936011261066e5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50503461066e57606060031936011261066e57803590602435604435916108b6846113b7565b835f526005906020906005602052865f20548585119081156109cc575b81156109c1575b5061099657506108ea8385611339565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061092d61091888611169565b976109258a51998a611128565b808952611169565b01366020880137835b85811061094a578751806108428982611231565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff610974828b5f2061175f565b90549060031b1c1661098f6109898884611339565b8a611282565b5201610936565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b9050841015886108da565b80871191506108d3565b50503461066e57602060031936011261066e5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361066e5761051a6020926112c3565b50503461066e576020918260031936011261066e57813591610a3f61141c565b610a48836113b7565b825f5260058452815f208054805b610b0b575050825f5260058452815f208054905f815581610aee575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610a72575f8155600101610af8565b5f190180610b6573ffffffffffffffffffffffffffffffffffffffff610b31838661175f565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a384611774565b50610a56565b823461066e575f60031936011261066e573373ffffffffffffffffffffffffffffffffffffffff6001541603610ba457610663336115be565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b3461066e575f60031936011261066e57610be761141c565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b82843461066e57602060031936011261066e5760209135610c74816113b7565b5f5260058252805f20549051908152f35b82843461066e578060031936011261066e57610c9f6110c4565b60249260243567ffffffffffffffff811161066e57610cc4610ccd9136908401611181565b9261050c61141c565b938251610cdf575b6020858551908152f35b610cea92919261141c565b610cf3856113b7565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610d415750505050610cd5565b82610d4c8284611282565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610e53575f91610e36575b5015610e0c579060058b92835f5252610dab818b5f20611988565b15610ddf5790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610d31565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610e4d9150823d84116104d2576104c48183611128565b8c610d90565b8b513d5f823e3d90fd5b82843461066e57602060031936011261066e57610e786110c4565b91610e8283611468565b610e8a6114eb565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b82843461066e57610f21366111fe565b91610f2a61141c565b610f33826113b7565b8251925f5b848110610f4157005b73ffffffffffffffffffffffffffffffffffffffff610f608284611282565b5116845f526005602052610f7681855f20611774565b15610faa5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610f38565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b82843461066e57602060031936011261066e5760209173ffffffffffffffffffffffffffffffffffffffff61100c6110c4565b165f528252805f20549051908152f35b82843461066e57602060031936011261066e57602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b833461066e578060031936011261066e576020906110bb61107b6110c4565b602435611087816113b7565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361066e57565b67ffffffffffffffff81116110fb57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110fb57604052565b67ffffffffffffffff81116110fb5760051b60200190565b9080601f8301121561066e57602090823561119b81611169565b936111a96040519586611128565b81855260208086019260051b82010192831161066e57602001905b8282106111d2575050505090565b813573ffffffffffffffffffffffffffffffffffffffff8116810361066e5781529083019083016111c4565b90604060031983011261066e57600435916024359067ffffffffffffffff821161066e5761122e91600401611181565b90565b60209060206040818301928281528551809452019301915f5b828110611258575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161124a565b80518210156112965760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176110fb5760405251902090565b9190820391821161134657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9081602091031261066e575173ffffffffffffffffffffffffffffffffffffffff8116810361066e5790565b9081602091031261066e5751801515810361066e5790565b801580156113f2575b6113c75750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f205416156113c0565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361143c57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff1680156114c357805f52600460205260405f20546114985750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561150157565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611346576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b90815f52600560205261166c73ffffffffffffffffffffffffffffffffffffffff60405f20921680926001915f520160205260405f2054151590565b15611675575050565b7f80145d72000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa918215611754575f9261171b57505090565b9091506020813d60201161174c575b8161173760209383611128565b8101031261066e5751908116810361066e5790565b3d915061172a565b6040513d5f823e3d90fd5b8054821015611296575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f14611860575f19918281018181116113465782549084820191821161134657818103611815575b505050805480156117e8578201916117ca838361175f565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61184b611825611835938661175f565b90549060031b1c9283928661175f565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806117b2565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f5416911690811461198057604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156117545785935f9561195c575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa918215611754575f9261194657505090565b61122e9250803d106104d2576104c48183611128565b60649291955061197890853d87116107295761071a8183611128565b9490916118f1565b505050600190565b5f8281526001820160205260409020546119da57805490680100000000000000008210156110fb57826119c561183584600180960185558461175f565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220a86eee931a88d4f839c9313a069eb3f4357676a3b7e1548b9f23cf223f177aaf64736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x182551DA EQ PUSH2 0x105C JUMPI DUP2 PUSH4 0x255DAE41 EQ PUSH2 0x101C JUMPI DUP2 PUSH4 0x25C427ED EQ PUSH2 0xFD9 JUMPI DUP2 PUSH4 0x2DA55A1D EQ PUSH2 0xF11 JUMPI DUP2 PUSH4 0x3700F987 EQ PUSH2 0xE5D JUMPI DUP2 PUSH4 0x3E035F9B EQ PUSH2 0xC85 JUMPI DUP2 PUSH4 0x62D53462 EQ PUSH2 0xC54 JUMPI DUP2 PUSH4 0x715018A6 EQ PUSH2 0xBCF JUMPI DUP2 PUSH4 0x79BA5097 EQ PUSH2 0xB6B JUMPI DUP2 PUSH4 0x7C1EC460 EQ PUSH2 0xA1F JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x9D6 JUMPI DUP2 PUSH4 0x8C60EBD0 EQ PUSH2 0x890 JUMPI DUP2 PUSH4 0x8DA5CB5B EQ PUSH2 0x85D JUMPI DUP2 PUSH4 0x94FC4058 EQ PUSH2 0x7DD JUMPI DUP2 PUSH4 0xA89B1128 EQ PUSH2 0x73A JUMPI POP DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x672 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0x599 JUMPI DUP1 PUSH4 0xC482E822 EQ PUSH2 0x57A JUMPI DUP1 PUSH4 0xCE998ABA EQ PUSH2 0x556 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x521 JUMPI DUP1 PUSH4 0xE909C19B EQ PUSH2 0x4E3 JUMPI DUP1 PUSH4 0xEBF3A8D0 EQ PUSH2 0x34C JUMPI DUP1 PUSH4 0xF167A1E6 EQ PUSH2 0x30B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x227 JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x13F JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP3 SWAP2 CALLVALUE PUSH2 0x223 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x223 JUMPI PUSH2 0x159 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x16A DUP2 PUSH2 0x165 PUSH2 0x14EB JUMP JUMPDEST PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x187 PUSH2 0x16A3 JUMP JUMPDEST AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x21F JUMPI PUSH2 0x1F0 SWAP4 DUP6 SWAP3 DUP4 DUP6 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0xFD267F3900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 CALLDATALOAD SWAP2 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x216 JUMPI POP PUSH2 0x203 JUMPI POP RETURN JUMPDEST PUSH2 0x20C SWAP1 PUSH2 0x10E7 JUMP JUMPDEST PUSH2 0x213 JUMPI DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST POP POP REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x278 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x278 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x213 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x213 JUMPI PUSH2 0x296 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x29E PUSH2 0x141C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE DUP3 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x348 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI DUP2 PUSH1 0x20 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x3 DUP6 MSTORE KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x348 JUMPI PUSH2 0x35B CALLDATASIZE PUSH2 0x11FE JUMP JUMPDEST PUSH2 0x363 PUSH2 0x141C JUMP JUMPDEST PUSH2 0x36C DUP3 PUSH2 0x13B7 JUMP JUMPDEST DUP1 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 DUP8 JUMPDEST DUP7 DUP2 LT PUSH2 0x3B5 JUMPI DUP9 DUP1 RETURN JUMPDEST DUP3 PUSH2 0x3C0 DUP3 DUP5 PUSH2 0x1282 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x4D9 JUMPI DUP14 SWAP2 PUSH2 0x4AC JUMPI JUMPDEST POP ISZERO PUSH2 0x482 JUMPI PUSH1 0x5 SWAP1 DUP10 DUP14 MSTORE MSTORE PUSH2 0x41F DUP3 DUP12 DUP14 KECCAK256 PUSH2 0x1988 JUMP JUMPDEST ISZERO PUSH2 0x454 JUMPI POP SWAP1 DUP7 PUSH1 0x1 SWAP3 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 DUP13 DUP1 LOG3 ADD PUSH2 0x3AA JUMP JUMPDEST DUP8 DUP12 SWAP2 PUSH1 0x44 SWAP4 DUP9 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE MSTORE MSTORE REVERT JUMPDEST POP DUP11 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH2 0x4CC SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D2 JUMPI JUMPDEST PUSH2 0x4C4 DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x139F JUMP JUMPDEST PUSH0 PUSH2 0x406 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4BA JUMP JUMPDEST DUP13 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x278 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x278 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x51A PUSH2 0x504 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x50C PUSH2 0x141C JUMP JUMPDEST PUSH2 0x515 DUP2 PUSH2 0x1468 JUMP JUMPDEST PUSH2 0x1529 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x278 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x278 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x348 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0x20 SWAP3 DUP3 SWAP2 CALLER DUP3 MSTORE DUP5 MSTORE KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x278 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x278 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x66E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0x5B3 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x5BF DUP2 PUSH2 0x165 PUSH2 0x14EB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5DC PUSH2 0x16A3 JUMP JUMPDEST AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x66E JUMPI PUSH2 0x645 SWAP4 PUSH0 SWAP3 DUP4 DUP6 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0xABAA335600000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 CALLDATALOAD SWAP2 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x665 JUMPI POP PUSH2 0x659 JUMPI POP DUP1 RETURN JUMPDEST PUSH2 0x663 SWAP2 POP PUSH2 0x10E7 JUMP JUMPDEST STOP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x66E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x730 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x701 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x722 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x729 JUMPI JUMPDEST PUSH2 0x71A DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1373 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x6F9 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x710 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0x78A PUSH2 0x783 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x77C PUSH2 0x10C4 JUMP JUMPDEST SWAP4 AND PUSH2 0x12C3 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x1868 JUMP JUMPDEST ISZERO PUSH2 0x7B6 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x7B6 JUMPI PUSH2 0x663 SWAP1 PUSH2 0x15BE JUMP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI CALLDATALOAD PUSH2 0x7FD DUP2 PUSH2 0x13B7 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x846 JUMPI PUSH2 0x842 DUP7 DUP7 PUSH2 0x838 DUP3 DUP12 SUB DUP4 PUSH2 0x1128 JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1231 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x820 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x66E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x8B6 DUP5 PUSH2 0x13B7 JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x9CC JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x9C1 JUMPI JUMPDEST POP PUSH2 0x996 JUMPI POP PUSH2 0x8EA DUP4 DUP6 PUSH2 0x1339 JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x92D PUSH2 0x918 DUP9 PUSH2 0x1169 JUMP JUMPDEST SWAP8 PUSH2 0x925 DUP11 MLOAD SWAP10 DUP11 PUSH2 0x1128 JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x1169 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x94A JUMPI DUP8 MLOAD DUP1 PUSH2 0x842 DUP10 DUP3 PUSH2 0x1231 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x974 DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x175F JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x98F PUSH2 0x989 DUP9 DUP5 PUSH2 0x1339 JUMP JUMPDEST DUP11 PUSH2 0x1282 JUMP JUMPDEST MSTORE ADD PUSH2 0x936 JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x8DA JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x8D3 JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x66E JUMPI PUSH2 0x51A PUSH1 0x20 SWAP3 PUSH2 0x12C3 JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0xA3F PUSH2 0x141C JUMP JUMPDEST PUSH2 0xA48 DUP4 PUSH2 0x13B7 JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0xB0B JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0xAEE JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA72 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xAF8 JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0xB65 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xB31 DUP4 DUP7 PUSH2 0x175F JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x1774 JUMP JUMPDEST POP PUSH2 0xA56 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x66E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0xBA4 JUMPI PUSH2 0x663 CALLER PUSH2 0x15BE JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x66E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0xBE7 PUSH2 0x141C JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xC74 DUP2 PUSH2 0x13B7 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0xC9F PUSH2 0x10C4 JUMP JUMPDEST PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x66E JUMPI PUSH2 0xCC4 PUSH2 0xCCD SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1181 JUMP JUMPDEST SWAP3 PUSH2 0x50C PUSH2 0x141C JUMP JUMPDEST SWAP4 DUP3 MLOAD PUSH2 0xCDF JUMPI JUMPDEST PUSH1 0x20 DUP6 DUP6 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xCEA SWAP3 SWAP2 SWAP3 PUSH2 0x141C JUMP JUMPDEST PUSH2 0xCF3 DUP6 PUSH2 0x13B7 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0xD41 JUMPI POP POP POP POP PUSH2 0xCD5 JUMP JUMPDEST DUP3 PUSH2 0xD4C DUP3 DUP5 PUSH2 0x1282 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP10 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xE53 JUMPI PUSH0 SWAP2 PUSH2 0xE36 JUMPI JUMPDEST POP ISZERO PUSH2 0xE0C JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP3 DUP4 PUSH0 MSTORE MSTORE PUSH2 0xDAB DUP2 DUP12 PUSH0 KECCAK256 PUSH2 0x1988 JUMP JUMPDEST ISZERO PUSH2 0xDDF JUMPI SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xD31 JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xE4D SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D2 JUMPI PUSH2 0x4C4 DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST DUP13 PUSH2 0xD90 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0xE78 PUSH2 0x10C4 JUMP JUMPDEST SWAP2 PUSH2 0xE82 DUP4 PUSH2 0x1468 JUMP JUMPDEST PUSH2 0xE8A PUSH2 0x14EB JUMP JUMPDEST SWAP2 DUP3 SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH2 0xF21 CALLDATASIZE PUSH2 0x11FE JUMP JUMPDEST SWAP2 PUSH2 0xF2A PUSH2 0x141C JUMP JUMPDEST PUSH2 0xF33 DUP3 PUSH2 0x13B7 JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xF41 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xF60 DUP3 DUP5 PUSH2 0x1282 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0xF76 DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x1774 JUMP JUMPDEST ISZERO PUSH2 0xFAA JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0xF38 JUMP JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100C PUSH2 0x10C4 JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x66E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP1 PUSH2 0x10BB PUSH2 0x107B PUSH2 0x10C4 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x1087 DUP2 PUSH2 0x13B7 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x66E JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10FB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10FB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10FB JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x66E JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x119B DUP2 PUSH2 0x1169 JUMP JUMPDEST SWAP4 PUSH2 0x11A9 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1128 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x66E JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x11D2 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x66E JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x11C4 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x66E JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x66E JUMPI PUSH2 0x122E SWAP2 PUSH1 0x4 ADD PUSH2 0x1181 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1258 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x124A JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1296 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10FB JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1346 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x66E JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x66E JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x66E JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x66E JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x13F2 JUMPI JUMPDEST PUSH2 0x13C7 JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x13C0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x143C JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x14C3 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x1498 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLER PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x1501 JUMPI JUMP JUMPDEST PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x1346 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0x166C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND DUP1 SWAP3 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x1675 JUMPI POP POP JUMP JUMPDEST PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1754 JUMPI PUSH0 SWAP3 PUSH2 0x171B JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x174C JUMPI JUMPDEST DUP2 PUSH2 0x1737 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1128 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x66E JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x66E JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x172A JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x1296 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x1860 JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x1346 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x1346 JUMPI DUP2 DUP2 SUB PUSH2 0x1815 JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x17E8 JUMPI DUP3 ADD SWAP2 PUSH2 0x17CA DUP4 DUP4 PUSH2 0x175F JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x184B PUSH2 0x1825 PUSH2 0x1835 SWAP4 DUP7 PUSH2 0x175F JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x175F JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x17B2 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x1980 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x1754 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x195C JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1754 JUMPI PUSH0 SWAP3 PUSH2 0x1946 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x122E SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x4D2 JUMPI PUSH2 0x4C4 DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x1978 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x729 JUMPI PUSH2 0x71A DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x18F1 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x19DA JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0x10FB JUMPI DUP3 PUSH2 0x19C5 PUSH2 0x1835 DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x175F JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 PUSH15 0xEE931A88D4F839C9313A069EB3F435 PUSH23 0x76A3B7E1548B9F23CF223F177AAF64736F6C634300081B STOP CALLER ","sourceMap":"446:1537:86:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21:81;446:1537:86;1810:21:81;;;446:1537:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;:::i;:::-;1779:4:82;1721:20;;;:::i;:::-;1779:4;:::i;:::-;446:1537:86;1086:27;;:::i;:::-;446:1537;1086:92;;;;;;;446:1537;;;;;;1086:92;;;;;;446:1537;1086:92;;446:1537;;1086:92;;;446:1537;;;;;;;;;;;;;;;;;1086:92;;;;;;;;;;;;;446:1537;;1086:92;;;;:::i;:::-;446:1537;;1086:92;446:1537;;;;1086:92;446:1537;;;;;;;;1086:92;446:1537;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;;1348:29:81;446:1537:86;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;:::i;:::-;1500:62:49;;:::i;:::-;446:1537:86;;;;;;;1738:24:50;446:1537:86;;;1738:24:50;446:1537:86;;;;1777:43:50;;;;446:1537:86;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;;;;;;8417:16:82;446:1537:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1500:62:49;;:::i;:::-;1515:9:82;;;:::i;:::-;446:1537:86;;;;5232:5:82;446:1537:86;;;5088:13:82;5103:12;;;;;;446:1537:86;;;5117:3:82;5151:11;;;;;:::i;:::-;446:1537:86;;;;;5232:28:82;;;;;;446:1537:86;5232:28:82;446:1537:86;5232:28:82;;;;;;;;;;;;;;;;;5117:3;446:1537:86;;5228:119:82;;5365:9;446:1537:86;;;;;11511:50:72;446:1537:86;;;;11511:50:72;:::i;:::-;446:1537:86;5361:118:82;;5610:31;;;446:1537:86;5610:31:82;;;;;446:1537:86;5088:13:82;;5361:118;5431:33;;;446:1537:86;5431:33:82;;;;;446:1537:86;;5431:33:82;5228:119;5296:36;;;;;;;446:1537:86;5296:36:82;5232:28;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;446:1537:86;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;2554:30:82;446:1537:86;;:::i;:::-;1500:62:49;;:::i;:::-;1962:7:82;;;:::i;:::-;2554:30;:::i;:::-;446:1537:86;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;1311:13:50;446:1537:86;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;6549:10:82;;;;446:1537:86;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;8254:14:82;446:1537:86;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;:::i;:::-;1779:4:82;1721:20;;;:::i;1779:4::-;446:1537:86;1392:27;;:::i;:::-;446:1537;1392:94;;;;;;;446:1537;;;;;;1392:94;;;;;;446:1537;1392:94;;446:1537;;1392:94;;;446:1537;;;;;;;;;;;;;;;;;1392:94;;;;;;;;;;;;;446:1537;;;1392:94;;;;;:::i;:::-;446:1537;1392:94;446:1537;;;;;;;;1392:94;446:1537;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;1810:21:81;446:1537:86;;1810:21:81;;446:1537:86;1810:21:81;;:5;;;446:1537:86;1810:21:81;;;;;;;;;;446:1537:86;1810:21:81;;;446:1537:86;;;;;;;;1810:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;446:1537:86;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;1798:33:33;1762:20;1774:7;446:1537:86;;:::i;:::-;1774:7:33;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;446:1537:86;;;;1820:10:33;2423:21:81;2419:77;;2524:8;;;:::i;2419:77::-;2467:18;;446:1537:86;2467:18:81;446:1537:86;2467:18:81;446:1537:86;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;1515:9:82;;;:::i;:::-;446:1537:86;;7533:9:82;446:1537:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;;;;;1515:9:82;;;;:::i;:::-;446:1537:86;;;7815:9:82;446:1537:86;;;7815:9:82;446:1537:86;;;;;;7859:9:82;;;:28;;;;;446:1537:86;7859:50:82;;;;446:1537:86;7855:115:82;;;8002:9;;;;;:::i;:::-;446:1537:86;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;8027:16:82;8045:6;;;;;;446:1537:86;;;;;;;:::i;8053:3:82:-;446:1537:86;;;;;;;;;5853:18:72;446:1537:86;;;;5853:18:72;:::i;:::-;446:1537:86;;;;;;;8072:44:82;8078:8;;;;:::i;:::-;8072:44;;:::i;:::-;446:1537:86;;8027:16:82;;7855:115;7932:27;;;446:1537:86;7932:27:82;446:1537:86;;;7932:27:82;7859:50;7891:18;;;;;7859:50;;;:28;7872:15;;;;-1:-1:-1;7859:28:82;;446:1537:86;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;1500:62:49;;;:::i;:::-;1515:9:82;;;:::i;:::-;446:1537:86;;;3499:9:82;446:1537:86;;;;;;;3618:237:82;3625:12;;;446:1537:86;;;;;3499:9:82;446:1537:86;;;;;;;;;;;;;;3618:237:82;446:1537:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4148:36:82;446:1537:86;4148:36:82;;446:1537:86;;;;;;;;;;;;;;;;;;;;;;;;;3618:237:82;-1:-1:-1;;446:1537:86;5853:18:72;11832:53;446:1537:86;5853:18:72;;;;:::i;:::-;446:1537:86;;;;;;;3774:35:82;;;446:1537:86;3774:35:82;;11832:53:72;;:::i;:::-;;3618:237:82;;446:1537:86;;;;;;-1:-1:-1;;446:1537:86;;;;;735:10:64;446:1537:86;1311:13:50;446:1537:86;;2339:24:50;2335:96;;2459:6;735:10:64;2459:6:50;:::i;2335:96::-;2386:34;446:1537:86;2386:34:50;735:10:64;446:1537:86;;;;2386:34:50;446:1537:86;;;;;-1:-1:-1;;446:1537:86;;;;;1500:62:49;;:::i;:::-;446:1537:86;;;;2093:20:50;446:1537:86;;2093:20:50;446:1537:86;;;;;;;;;3052:40:49;;;;446:1537:86;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;1515:9:82;;;:::i;:::-;446:1537:86;;6905:9:82;446:1537:86;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;:::i;:::-;;;;;;;;;;;2833:30:82;446:1537:86;;;;;;:::i;:::-;1500:62:49;;;:::i;2833:30:82:-;446:1537:86;;;2874:84:82;;446:1537:86;;;;;;;;;2874:84:82;1500:62:49;;;;;:::i;:::-;1515:9:82;;;:::i;:::-;446:1537:86;;;;5232:5:82;446:1537:86;;;;5103:12:82;;;;;;2874:84;;;;;;5117:3;5151:11;;;;;:::i;:::-;446:1537:86;;;;;5232:28:82;;;;;;446:1537:86;;5232:28:82;;;;;;;;;;;;;446:1537:86;5232:28:82;;;5117:3;446:1537:86;;5228:119:82;;446:1537:86;5365:9:82;446:1537:86;;;;;;11511:50:72;446:1537:86;;;;11511:50:72;:::i;:::-;446:1537:86;5361:118:82;;5610:31;446:1537:86;5610:31:82;;;446:1537:86;5610:31:82;;446:1537:86;5088:13:82;;5361:118;5431:33;;;;446:1537:86;5431:33:82;446:1537:86;;;;5431:33:82;5228:119;5296:36;;;;446:1537:86;5296:36:82;446:1537:86;;5296:36:82;5232:28;;;;;;;;;;;;;;:::i;:::-;;;;;446:1537:86;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;:::i;:::-;1962:7:82;;;;:::i;:::-;4357:20;;:::i;:::-;446:1537:86;;;;;;4388:16:82;446:1537:86;;;;;;;;;;;;;;;;;4511:10:82;446:1537:86;;;;;;;;;;;;;;;4511:10:82;4590:62;;446:1537:86;4590:62:82;;446:1537:86;;;;;;;;;;:::i;:::-;1500:62:49;;;:::i;:::-;1515:9:82;;;:::i;:::-;446:1537:86;;5897:13:82;446:1537:86;5912:12:82;;;;;;446:1537:86;5926:3:82;446:1537:86;5960:8:82;;;;:::i;:::-;446:1537:86;;;;;5987:9:82;446:1537:86;;11832:53:72;446:1537:86;;;;11832:53:72;:::i;:::-;446:1537:86;5983:117:82;;6119:35;;446:1537:86;6119:35:82;;446:1537:86;6119:35:82;;446:1537:86;5897:13:82;;5983:117;6056:29;;;;446:1537:86;6056:29:82;446:1537:86;;;;;6056:29:82;446:1537:86;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;;;7076:16:82;446:1537:86;;;;;;;;7076:41:82;;446:1537:86;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;12473:55:72;446:1537:86;;:::i;:::-;;;1515:9:82;;;:::i;:::-;446:1537:86;;7296:9:82;446:1537:86;;;;;;;;12473:55:72;5197:14;5101:129;-1:-1:-1;446:1537:86;5197:14:72;446:1537:86;;;-1:-1:-1;446:1537:86;;5197:26:72;;5101:129;;12473:55;446:1537:86;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:33;446:1537:86;;;2303:50:33;;;2320:22;;446:1537:86;;;;;;;2303:50:33;;;446:1537:86;;;;;;;;;;;;;;;2293:61:33;;1931:430;:::o;446:1537:86:-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;9677:202:82:-;9753:14;;:59;;;;9677:202;9749:124;;9677:202;:::o;9749:124::-;9835:27;9766:1;9835:27;;446:1537:86;;9766:1:82;9835:27;9753:59;446:1537:86;;9766:1:82;446:1537:86;9771:16:82;446:1537:86;;;;9766:1:82;446:1537:86;;;9771:41:82;9753:59;;1796:162:49;446:1537:86;1710:6:49;446:1537:86;;735:10:64;1855:23:49;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:64;1901:40:49;446:1537:86;;1710:6:49;1901:40;8977:266:82;446:1537:86;;9051:21:82;;9047:82;;446:1537:86;9070:1:82;446:1537:86;9143:14:82;446:1537:86;;;9070:1:82;446:1537:86;;9139:98:82;;8977:266;:::o;9139:98::-;9194:32;9070:1;9194:32;9143:14;446:1537:86;;9070:1:82;9194:32;9047:82;9095:23;9070:1;9095:23;;9070:1;9095:23;8758:213;6549:10;-1:-1:-1;446:1537:86;6534:14:82;446:1537:86;;;-1:-1:-1;446:1537:86;;8890:14:82;;;8886:79;;8758:213::o;8886:79::-;8927:27;-1:-1:-1;8927:27:82;6534:14;-1:-1:-1;8927:27:82;2970:342;;3077:16;446:1537:86;;-1:-1:-1;;446:1537:86;;;;;;;3077:16:82;446:1537:86;3065:28:82;446:1537:86;-1:-1:-1;446:1537:86;3152:16:82;446:1537:86;;;;-1:-1:-1;446:1537:86;;;;;;;;;;;;;-1:-1:-1;446:1537:86;3206:14:82;446:1537:86;;;;-1:-1:-1;446:1537:86;;3264:41:82;-1:-1:-1;3264:41:82;;2970:342::o;2011:153:50:-;446:1537:86;;;2093:20:50;446:1537:86;;2093:20:50;446:1537:86;2093:20:50;446:1537:86;;;;;;;;;;2093:20:50;446:1537:86;;3052:40:49;2093:20:50;3052:40:49;;2011:153:50:o;9249:200:82:-;;446:1537:86;-1:-1:-1;446:1537:86;9336:9:82;446:1537:86;;12473:55:72;446:1537:86;;-1:-1:-1;446:1537:86;;;12473:55:72;;5197:14;5101:129;-1:-1:-1;446:1537:86;5197:14:72;446:1537:86;;;-1:-1:-1;446:1537:86;;5197:26:72;;5101:129;;12473:55;446:1537:86;9332:111:82;;9249:200;;:::o;9332:111::-;9403:29;-1:-1:-1;9403:29:82;;446:1537:86;;;;-1:-1:-1;9403:29:82;1841:140:86;446:1537;;;1942:32;;446:1537;1942:32;446:1537;1942:32;446:1537;1942:5;446:1537;;1942:32;;;;;;;;;;;1935:39;;1841:140;:::o;1942:32::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;446:1537;;;;;;;;;;;;1841:140;:::o;1942:32::-;;;-1:-1:-1;1942:32:86;;;446:1537;;;1942:32;446:1537;;;;;;;;;;;;;-1:-1:-1;446:1537:86;;-1:-1:-1;446:1537:86;;;-1:-1:-1;446:1537:86;:::o;3071:1368:72:-;;3266:14;;;446:1537:86;;;;;;;;;;;3302:13:72;;;;3298:1135;3302:13;;;-1:-1:-1;;446:1537:86;;;;;;;;;;;;;;;;;;;;3777:23:72;;;3773:378;;3298:1135;446:1537:86;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3266:14:72;4368:11;:::o;446:1537:86:-;;;;;;;;;;3773:378:72;446:1537:86;3840:22:72;3961:23;3840:22;;;:::i;:::-;446:1537:86;;;;;;3961:23:72;;;;;:::i;:::-;446:1537:86;;;;;-1:-1:-1;;446:1537:86;;;;;;;;;;;;;;;;;;;;;;;;;3773:378:72;;;;;3298:1135;4410:12;;;;446:1537:86;4410:12:72;:::o;2546:382:81:-;;446:1537:86;;;;;;;;;2721:15:81;;;2717:57;;446:1537:86;;2858:21:81;446:1537:86;2858:21:81;;;:5;;;:21;:5;;;446:1537:86;2858:21:81;;;;;;;;;446:1537:86;2858:21:81;;;2546:382;446:1537:86;;;;;;2858:63:81;;;;;446:1537:86;2858:63:81;;:21;:63;;446:1537:86;;;;;2915:4:81;446:1537:86;;;;;2858:63:81;;;;;;;446:1537:86;2858:63:81;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;-1:-1:-1;2858:63:81;;;;;;:::i;:21::-;446:1537:86;2858:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o;2497:406:72:-;-1:-1:-1;446:1537:86;;;5197:14:72;;;446:1537:86;;;;;;2581:21:72;;446:1537:86;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2776:14:72;446:1537:86;;;;;;;2832:11:72;:::o;2576:321::-;2874:12;;446:1537:86;2874:12:72;:::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","addPoolsToSet(uint256,address[])":"ebf3a8d0","createPoolSet(address)":"e909c19b","createPoolSet(address,address[])":"3e035f9b","destroyPoolSet(uint256)":"7c1ec460","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAllPoolsInSet(uint256)":"94fc4058","getAuthorizer()":"aaabadc5","getManagerForPoolSet(uint256)":"f167a1e6","getNextPoolSetId()":"c482e822","getPoolCountForSet(uint256)":"62d53462","getPoolSetIdForCaller()":"ce998aba","getPoolSetIdForManager(address)":"25c427ed","getPoolsInSet(uint256,uint256,uint256)":"8c60ebd0","isPoolInSet(address,uint256)":"182551da","isValidPoolSetId(uint256)":"255dae41","owner()":"8da5cb5b","pendingOwner()":"e30c3978","removePoolsFromSet(uint256,address[])":"2da55a1d","renounceOwnership()":"715018a6","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","transferOwnership(address)":"f2fde38b","transferPoolSetOwnership(address)":"3700f987","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"InvalidPoolSetId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolSetManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolSetManager\",\"type\":\"address\"}],\"name\":\"PoolSetManagerNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderIsNotPoolSetManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"PoolSetCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"PoolSetDestroyed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"PoolSetOwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPoolsToSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"destroyPoolSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getAllPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getManagerForPoolSet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextPoolSetId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getPoolCountForSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSetIdForCaller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getPoolSetIdForManager\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isPoolInSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isValidPoolSetId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePoolsFromSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferPoolSetOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"params\":{\"poolSetId\":\"Id of the set involved in the operation\"}}],\"InvalidPoolSetId(uint256)\":[{\"details\":\"This can mean the value is invalid, or it was never created, or it was destroyed.\",\"params\":{\"poolSetId\":\"The id of the invalid set\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolSetManagerNotUnique(address)\":[{\"details\":\"Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\",\"params\":{\"poolSetManager\":\"Address of the manager that is already assigned to another pool set id\"}}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolRemovedFromSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetCreated(uint256,address)\":{\"details\":\"Pools are organized into separate sets, controlled by a manager, which can be changed independently.\",\"params\":{\"initialManager\":\"Address of the pool set manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetDestroyed(uint256,address)\":{\"params\":{\"manager\":\"The address of the set's last manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"details\":\"Managers can only control one pool set. Transfers to existing managers of other sets will revert.\",\"params\":{\"newManager\":\"Address of the new manager\",\"oldManager\":\"Address of the previous manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"addPoolsToSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may add pools to a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"newPools\":\"List of pools to add\",\"poolSetId\":\"Id of the set to which the new pools belong\"}},\"createPoolSet(address)\":{\"details\":\"Convenience function to create a pool set with no initial pools. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\"}},\"createPoolSet(address,address[])\":{\"details\":\"The `newPools` list can be empty, in which case this will only create the set. Pools can then be added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\",\"newPools\":\"Set of pools to add to the set\"}},\"destroyPoolSet(uint256)\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may destroy sets, effectively removing control of any pools in the set from the associated manager. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set being destroyed\"}},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAllPoolsInSet(uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"pools\":\"List of pools\"}},\"getManagerForPoolSet(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\"}},\"getNextPoolSetId()\":{\"returns\":{\"_0\":\"The pool set id that will be used on the next call of `createPoolSet`\"}},\"getPoolCountForSet(uint256)\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction. Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The current number of pools in the set\"}},\"getPoolSetIdForCaller()\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the caller is not a pool set manager\"}},\"getPoolSetIdForManager(address)\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the address given is not a pool set manager\"}},\"getPoolsInSet(uint256,uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`). Reverts if the poolSetId is not valid.\",\"params\":{\"from\":\"Start index\",\"poolSetId\":\"Id of the set containing the pools\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"isPoolInSet(address,uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"pool\":\"Address of the pool to check\",\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the pool is in the given set, false otherwise\"}},\"isValidPoolSetId(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the poolSetId exists\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"removePoolsFromSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may remove pools from a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set to which the pools belong\",\"pools\":\"List of pools to remove from the set\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"details\":\"This contract must be granted permission to set swap and yield protocol fees, but governance can independently grant permission to call the swap and yield fee setters.\",\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\",\"pool\":\"The address of the pool\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"details\":\"This contract must be granted permission to set swap and yield protocol fees, but governance can independently grant permission to call the swap and yield fee setters.\",\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\",\"pool\":\"The address of the pool\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"transferPoolSetOwnership(address)\":{\"details\":\"This is a permissioned function. Only the current manager of a set can call this to set a new manager. Since managers can only control a single set, there is no need to specify the id in the call. Note that this is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts if the new manager address is zero or already the manager of a pool set.\",\"params\":{\"newManager\":\"The address of the new manager\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"InvalidPoolSetId(uint256)\":[{\"notice\":\"Pool set id associated with an operation is invalid.\"}],\"InvalidPoolSetManager()\":[{\"notice\":\"The initial manager of a pool set cannot be zero.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolNotInSet(address,uint256)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolSetManagerNotUnique(address)\":[{\"notice\":\"Pool set managers can only manage a single pool set.\"}],\"SenderIsNotPoolSetManager()\":[{\"notice\":\"Permissioned operations on pools can only be performed by the pool set manager.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"notice\":\"The owner added a pool to the given set.\"},\"PoolRemovedFromSet(address,uint256)\":{\"notice\":\"The owner removed a pool from the given set.\"},\"PoolSetCreated(uint256,address)\":{\"notice\":\"The owner created a new pool set.\"},\"PoolSetDestroyed(uint256,address)\":{\"notice\":\"The owner destroyed a pool set.\"},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"notice\":\"The current manager of a pool set transferred ownership to a new address.\"}},\"kind\":\"user\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"createPoolSet(address)\":{\"notice\":\"Create a new empty set with an initial manager.\"},\"createPoolSet(address,address[])\":{\"notice\":\"Create a new set with an initial manager, optionally initialized with a set of pools.\"},\"destroyPoolSet(uint256)\":{\"notice\":\"Simple way to remove an entire set of pools from control of the helper function.\"},\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAllPoolsInSet(uint256)\":{\"notice\":\"Get the full set of pools from a given set.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"},\"getManagerForPoolSet(uint256)\":{\"notice\":\"Get the manager address associated with a given poolSetId.\"},\"getNextPoolSetId()\":{\"notice\":\"Utility function to predict the next pool set id.\"},\"getPoolCountForSet(uint256)\":{\"notice\":\"Get the number of pools associated with the given set.\"},\"getPoolSetIdForCaller()\":{\"notice\":\"Get the pool set id associated with the caller.\"},\"getPoolSetIdForManager(address)\":{\"notice\":\"Get the pool set id associated with a given manager address.\"},\"getPoolsInSet(uint256,uint256,uint256)\":{\"notice\":\"Get a range of pools from a given set.\"},\"isPoolInSet(address,uint256)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"isValidPoolSetId(uint256)\":{\"notice\":\"Check whether a poolSetId has been created.\"},\"removePoolsFromSet(uint256,address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Set the protocol swap fee for a pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Set the protocol yield fee for a pool.\"},\"transferPoolSetOwnership(address)\":{\"notice\":\"Transfer ownership of a pool set from the current manager to a new manager.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ProtocolFeeHelper.sol\":\"ProtocolFeeHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xdb8365416c9dd9d7be16677c13819065511e9bc7705d6bad85fd52b65d3b3c39\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b90206982d126075b074f0a77ea9cb3ec173ed9fe9e4504b12d6807532b1b7ff\",\"dweb:/ipfs/QmYjKTu4Mrew94sSxfQ8jP4yT7wZFgghSRyB9A2kDdSy8X\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol\":{\"keccak256\":\"0x79b4a52c34d448b3a67d91d37319c08b2a2c45e1ef94c66f1102d1df05f672f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d85fcc28f6c2cfbeefdb307c551d8904f82b6c2fc3e5bc2e5deb111a6a1007f1\",\"dweb:/ipfs/QmWa96ZJajKfwhGemApEoFCpFmStKHaMLUaZwpTQjYjoF3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/PoolHelperCommon.sol\":{\"keccak256\":\"0xc3bd72a44d8479bacbfa4ebca2354b315160e77c378c3dc24d8cd7a41990a83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://fed38b2ea6f2842633d8d555d298adc889605bbeb3ec32728811fbc907989519\",\"dweb:/ipfs/QmX1aEVFkPAZbbSFXn6tfJnaPYWr9TDe9YHCQAiLvgZahg\"]},\"contracts/ProtocolFeeHelper.sol\":{\"keccak256\":\"0xb95fd02c5339c0a2762de1efb3f75e6d0c29b72ffc20a626a09f183f2d3baec1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1dcbfa9f53a907355fc237662f1aa6d4a8090cc41af5dc2b43d0f525a315d82e\",\"dweb:/ipfs/QmUF6cQZWEyQ3YPSA2XmuP4m57e2ha87G2DDaCmYQ7JiER\"]}},\"version\":1}"}},"contracts/ProtocolFeePercentagesProvider.sol":{"ProtocolFeePercentagesProvider":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IBalancerContractRegistry","name":"trustedContractRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"FactoryFeesNotSet","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"factory","type":"address"}],"name":"PoolNotFromFactory","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"UnknownFactory","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"indexed":false,"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"name":"FactorySpecificProtocolFeePercentagesSet","type":"event"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalancerContractRegistry","outputs":[{"internalType":"contract IBalancerContractRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"getFactorySpecificProtocolFeePercentages","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"name":"setFactorySpecificProtocolFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"setProtocolFeePercentagesForPools","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"finalize_allocation":{"entryPoint":510,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"61014060409080825234610169578181610ee1803803809161002182856101fe565b8339810103126101695780516001600160a01b03908181169081810361016957602080940151908382168203610169573060805282156101ef5760a052845163217cb6f560e21b8152918490839060049082905afa9182156101e5575f926101ad575b5060e082905260c05283516313b968ab60e11b81529391168284600481845afa938415610174575f9461017e575b5082600491610100958652835192838092630bc65c9d60e31b82525afa928315610174575f93610140575b50506101209182525190610cab9283610236843960805183610ab4015260a05183818161015f015281816102000152610668015260c05183818160e7015261077e015260e0518381816102500152610373015251826106f40152518161071b0152f35b9080929350813d831161016d575b61015881836101fe565b810103126101695751905f806100dd565b5f80fd5b503d61014e565b82513d5f823e3d90fd5b9093508281813d83116101a6575b61019681836101fe565b81010312610169575192826100b2565b503d61018c565b9091508381813d83116101de575b6101c581836101fe565b810103126101695751828116810361016957905f610084565b503d6101bb565b85513d5f823e3d90fd5b630647140b60e51b5f5260045ffd5b601f909101601f19168101906001600160401b0382119082101761022157604052565b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f35908160e01c918262859689146105d557508163344b12d5146102c4578163851c1bb31461027457816385f2dbd4146102245781638d928af8146101d4578163aaabadc51461010b57508063deb27a7a146100bb5763f2c24ec814610077575f80fd5b346100b75760206003193601126100b7576100986100936109b0565b610bd4565b67ffffffffffffffff6020818351169201511682519182526020820152f35b5f80fd5b50346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100b7575f6003193601126100b75773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa9182156101ca57926020935f9361019b575b505191168152f35b6101bc919350843d86116101c3575b6101b48183610a30565b810190610aee565b915f610193565b503d6101aa565b83513d5f823e3d90fd5b82346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b82346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100b75760206003193601126100b75735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100b7576102bd602092610a89565b9051908152f35b9050346100b757816003193601126100b7576102de6109b0565b60249182359167ffffffffffffffff8084116100b757366023850112156100b75783830135908082116105aa5760058260051b9560209689519461032489830187610a30565b85528888860191830101913683116100b7579880959901905b8282106105785750505061035084610bd4565b905f938783019573ffffffffffffffffffffffffffffffffffffffff80911692817f000000000000000000000000000000000000000000000000000000000000000016965b8b5181101561057657828b8d83851b01015116908d517f6634b753000000000000000000000000000000000000000000000000000000008152828c8201528c8187818a5afa90811561056c575f9161053f575b5015610510578787511691888b5116928a3b156100b7578f517ffd267f3900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83168e82019081526020810192909252905f90829081900360400181838f5af18015610505576104f6575b50893b156100b7578e517fabaa335600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116818d019081526020810193909352915f90839081906040010381838d5af19182156104ec576001926104dd575b5001610395565b6104e690610a1c565b5f6104d6565b8e513d5f823e3d90fd5b6104ff90610a1c565b5f610464565b508f513d5f823e3d90fd5b50915050877ff400ce63000000000000000000000000000000000000000000000000000000005f52525260445ffd5b61055f91508d803d10610565575b6105578183610a30565b810190610a71565b5f6103e8565b503d61054d565b8f513d5f823e3d90fd5b005b819995993573ffffffffffffffffffffffffffffffffffffffff811681036100b757815294989490880190880161033d565b856041857f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b9083346100b75760606003193601126100b7576105f06109b0565b92602435906106237fffffffff000000000000000000000000000000000000000000000000000000006044359216610a89565b73ffffffffffffffffffffffffffffffffffffffff9584517faaabadc5000000000000000000000000000000000000000000000000000000008152602092838289818c7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156109a6579184918a935f92610984575b50606490895194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084528d840152336024840152306044840152165afa90811561097a575f9161095d575b5015610936577f0000000000000000000000000000000000000000000000000000000000000000841161090f577f000000000000000000000000000000000000000000000000000000000000000083116108e85781879160448751809481937fae2733a400000000000000000000000000000000000000000000000000000000835260018c840152169a8b60248301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156108de575f916108c1575b5015610896577f2c3f7d4fd7252aea844c55450b24cac1853ac3a3293a3d0616193b7d854cf0f094506107e083610b1a565b6107e982610b1a565b6107f283610b8f565b6107fb83610b8f565b855191610807836109d3565b67ffffffffffffffff809116835280848401921682528683019060018252895f525f8552875f209351167fffffffffffffffffffffffffffffff000000000000000000000000000000000070ff000000000000000000000000000000006fffffffffffffffff0000000000000000865495518b1b169351151560801b16931617171790558351928352820152a2005b85857fc2a47384000000000000000000000000000000000000000000000000000000005f525260245ffd5b6108d89150823d8411610565576105578183610a30565b876107ae565b85513d5f823e3d90fd5b857fa7849e8e000000000000000000000000000000000000000000000000000000005f525ffd5b857f7e6eb7fb000000000000000000000000000000000000000000000000000000005f525ffd5b857f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b6109749150833d8511610565576105578183610a30565b886106ec565b86513d5f823e3d90fd5b606491925061099f90843d86116101c3576101b48183610a30565b919061069d565b87513d5f823e3d90fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100b757565b6060810190811067ffffffffffffffff8211176109ef57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116109ef57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109ef57604052565b908160209103126100b7575180151581036100b75790565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152610ae8816109d3565b51902090565b908160209103126100b7575173ffffffffffffffffffffffffffffffffffffffff811681036100b75790565b64174876e800808204818102918183041490151715610b625703610b3a57565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff90818111610ba4571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b9073ffffffffffffffffffffffffffffffffffffffff6040925f848051610bfa816109d3565b828152826020820152015216805f525f602052825f2060ff845191610c1e836109d3565b5467ffffffffffffffff808216845281871c16602084015260801c16159384159082015292610c4a5750565b7fa589c09e000000000000000000000000000000000000000000000000000000005f5260045260245ffdfea2646970667358221220675ca2229049ac0d86702a3f8b91328e9f60bdf58f2a73eeebdb46b3de39e33f64736f6c634300081b0033","opcodes":"PUSH2 0x140 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x169 JUMPI DUP2 DUP2 PUSH2 0xEE1 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x21 DUP3 DUP6 PUSH2 0x1FE JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x169 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP2 AND SWAP1 DUP2 DUP2 SUB PUSH2 0x169 JUMPI PUSH1 0x20 DUP1 SWAP5 ADD MLOAD SWAP1 DUP4 DUP3 AND DUP3 SUB PUSH2 0x169 JUMPI ADDRESS PUSH1 0x80 MSTORE DUP3 ISZERO PUSH2 0x1EF JUMPI PUSH1 0xA0 MSTORE DUP5 MLOAD PUSH4 0x217CB6F5 PUSH1 0xE2 SHL DUP2 MSTORE SWAP2 DUP5 SWAP1 DUP4 SWAP1 PUSH1 0x4 SWAP1 DUP3 SWAP1 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1E5 JUMPI PUSH0 SWAP3 PUSH2 0x1AD JUMPI JUMPDEST POP PUSH1 0xE0 DUP3 SWAP1 MSTORE PUSH1 0xC0 MSTORE DUP4 MLOAD PUSH4 0x13B968AB PUSH1 0xE1 SHL DUP2 MSTORE SWAP4 SWAP2 AND DUP3 DUP5 PUSH1 0x4 DUP2 DUP5 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x174 JUMPI PUSH0 SWAP5 PUSH2 0x17E JUMPI JUMPDEST POP DUP3 PUSH1 0x4 SWAP2 PUSH2 0x100 SWAP6 DUP7 MSTORE DUP4 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0xBC65C9D PUSH1 0xE3 SHL DUP3 MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x174 JUMPI PUSH0 SWAP4 PUSH2 0x140 JUMPI JUMPDEST POP POP PUSH2 0x120 SWAP2 DUP3 MSTORE MLOAD SWAP1 PUSH2 0xCAB SWAP3 DUP4 PUSH2 0x236 DUP5 CODECOPY PUSH1 0x80 MLOAD DUP4 PUSH2 0xAB4 ADD MSTORE PUSH1 0xA0 MLOAD DUP4 DUP2 DUP2 PUSH2 0x15F ADD MSTORE DUP2 DUP2 PUSH2 0x200 ADD MSTORE PUSH2 0x668 ADD MSTORE PUSH1 0xC0 MLOAD DUP4 DUP2 DUP2 PUSH1 0xE7 ADD MSTORE PUSH2 0x77E ADD MSTORE PUSH1 0xE0 MLOAD DUP4 DUP2 DUP2 PUSH2 0x250 ADD MSTORE PUSH2 0x373 ADD MSTORE MLOAD DUP3 PUSH2 0x6F4 ADD MSTORE MLOAD DUP2 PUSH2 0x71B ADD MSTORE RETURN JUMPDEST SWAP1 DUP1 SWAP3 SWAP4 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x16D JUMPI JUMPDEST PUSH2 0x158 DUP2 DUP4 PUSH2 0x1FE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x169 JUMPI MLOAD SWAP1 PUSH0 DUP1 PUSH2 0xDD JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x14E JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP4 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1A6 JUMPI JUMPDEST PUSH2 0x196 DUP2 DUP4 PUSH2 0x1FE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x169 JUMPI MLOAD SWAP3 DUP3 PUSH2 0xB2 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x18C JUMP JUMPDEST SWAP1 SWAP2 POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1DE JUMPI JUMPDEST PUSH2 0x1C5 DUP2 DUP4 PUSH2 0x1FE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x169 JUMPI MLOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x169 JUMPI SWAP1 PUSH0 PUSH2 0x84 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1BB JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x221 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH3 0x859689 EQ PUSH2 0x5D5 JUMPI POP DUP2 PUSH4 0x344B12D5 EQ PUSH2 0x2C4 JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x274 JUMPI DUP2 PUSH4 0x85F2DBD4 EQ PUSH2 0x224 JUMPI DUP2 PUSH4 0x8D928AF8 EQ PUSH2 0x1D4 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x10B JUMPI POP DUP1 PUSH4 0xDEB27A7A EQ PUSH2 0xBB JUMPI PUSH4 0xF2C24EC8 EQ PUSH2 0x77 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x98 PUSH2 0x93 PUSH2 0x9B0 JUMP JUMPDEST PUSH2 0xBD4 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x20 DUP2 DUP4 MLOAD AND SWAP3 ADD MLOAD AND DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1CA JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x19B JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1BC SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x1C3 JUMPI JUMPDEST PUSH2 0x1B4 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xAEE JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x193 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1AA JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xB7 JUMPI PUSH2 0x2BD PUSH1 0x20 SWAP3 PUSH2 0xA89 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x2DE PUSH2 0x9B0 JUMP JUMPDEST PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT PUSH2 0xB7 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0xB7 JUMPI DUP4 DUP4 ADD CALLDATALOAD SWAP1 DUP1 DUP3 GT PUSH2 0x5AA JUMPI PUSH1 0x5 DUP3 PUSH1 0x5 SHL SWAP6 PUSH1 0x20 SWAP7 DUP10 MLOAD SWAP5 PUSH2 0x324 DUP10 DUP4 ADD DUP8 PUSH2 0xA30 JUMP JUMPDEST DUP6 MSTORE DUP9 DUP9 DUP7 ADD SWAP2 DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xB7 JUMPI SWAP9 DUP1 SWAP6 SWAP10 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x578 JUMPI POP POP POP PUSH2 0x350 DUP5 PUSH2 0xBD4 JUMP JUMPDEST SWAP1 PUSH0 SWAP4 DUP8 DUP4 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP3 DUP2 PUSH32 0x0 AND SWAP7 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x576 JUMPI DUP3 DUP12 DUP14 DUP4 DUP6 SHL ADD ADD MLOAD AND SWAP1 DUP14 MLOAD PUSH32 0x6634B75300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP13 DUP3 ADD MSTORE DUP13 DUP2 DUP8 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x56C JUMPI PUSH0 SWAP2 PUSH2 0x53F JUMPI JUMPDEST POP ISZERO PUSH2 0x510 JUMPI DUP8 DUP8 MLOAD AND SWAP2 DUP9 DUP12 MLOAD AND SWAP3 DUP11 EXTCODESIZE ISZERO PUSH2 0xB7 JUMPI DUP16 MLOAD PUSH32 0xFD267F3900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP15 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 PUSH0 SWAP1 DUP3 SWAP1 DUP2 SWAP1 SUB PUSH1 0x40 ADD DUP2 DUP4 DUP16 GAS CALL DUP1 ISZERO PUSH2 0x505 JUMPI PUSH2 0x4F6 JUMPI JUMPDEST POP DUP10 EXTCODESIZE ISZERO PUSH2 0xB7 JUMPI DUP15 MLOAD PUSH32 0xABAA335600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 DUP14 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP14 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x4EC JUMPI PUSH1 0x1 SWAP3 PUSH2 0x4DD JUMPI JUMPDEST POP ADD PUSH2 0x395 JUMP JUMPDEST PUSH2 0x4E6 SWAP1 PUSH2 0xA1C JUMP JUMPDEST PUSH0 PUSH2 0x4D6 JUMP JUMPDEST DUP15 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x4FF SWAP1 PUSH2 0xA1C JUMP JUMPDEST PUSH0 PUSH2 0x464 JUMP JUMPDEST POP DUP16 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP2 POP POP DUP8 PUSH32 0xF400CE6300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x55F SWAP2 POP DUP14 DUP1 RETURNDATASIZE LT PUSH2 0x565 JUMPI JUMPDEST PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xA71 JUMP JUMPDEST PUSH0 PUSH2 0x3E8 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x54D JUMP JUMPDEST DUP16 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST STOP JUMPDEST DUP2 SWAP10 SWAP6 SWAP10 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB7 JUMPI DUP2 MSTORE SWAP5 SWAP9 SWAP5 SWAP1 DUP9 ADD SWAP1 DUP9 ADD PUSH2 0x33D JUMP JUMPDEST DUP6 PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP4 CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x5F0 PUSH2 0x9B0 JUMP JUMPDEST SWAP3 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x623 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x44 CALLDATALOAD SWAP3 AND PUSH2 0xA89 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP5 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 DUP10 DUP2 DUP13 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x9A6 JUMPI SWAP2 DUP5 SWAP2 DUP11 SWAP4 PUSH0 SWAP3 PUSH2 0x984 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 DUP10 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP14 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x97A JUMPI PUSH0 SWAP2 PUSH2 0x95D JUMPI JUMPDEST POP ISZERO PUSH2 0x936 JUMPI PUSH32 0x0 DUP5 GT PUSH2 0x90F JUMPI PUSH32 0x0 DUP4 GT PUSH2 0x8E8 JUMPI DUP2 DUP8 SWAP2 PUSH1 0x44 DUP8 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xAE2733A400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x1 DUP13 DUP5 ADD MSTORE AND SWAP11 DUP12 PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8DE JUMPI PUSH0 SWAP2 PUSH2 0x8C1 JUMPI JUMPDEST POP ISZERO PUSH2 0x896 JUMPI PUSH32 0x2C3F7D4FD7252AEA844C55450B24CAC1853AC3A3293A3D0616193B7D854CF0F0 SWAP5 POP PUSH2 0x7E0 DUP4 PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x7E9 DUP3 PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x7F2 DUP4 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x7FB DUP4 PUSH2 0xB8F JUMP JUMPDEST DUP6 MLOAD SWAP2 PUSH2 0x807 DUP4 PUSH2 0x9D3 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP4 MSTORE DUP1 DUP5 DUP5 ADD SWAP3 AND DUP3 MSTORE DUP7 DUP4 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE DUP10 PUSH0 MSTORE PUSH0 DUP6 MSTORE DUP8 PUSH0 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000 PUSH17 0xFF00000000000000000000000000000000 PUSH16 0xFFFFFFFFFFFFFFFF0000000000000000 DUP7 SLOAD SWAP6 MLOAD DUP12 SHL AND SWAP4 MLOAD ISZERO ISZERO PUSH1 0x80 SHL AND SWAP4 AND OR OR OR SWAP1 SSTORE DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE LOG2 STOP JUMPDEST DUP6 DUP6 PUSH32 0xC2A4738400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x8D8 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x565 JUMPI PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP8 PUSH2 0x7AE JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP6 PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP6 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x974 SWAP2 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x565 JUMPI PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP9 PUSH2 0x6EC JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x99F SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x1C3 JUMPI PUSH2 0x1B4 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x69D JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB7 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xB7 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xB7 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0xAE8 DUP2 PUSH2 0x9D3 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xB7 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB7 JUMPI SWAP1 JUMP JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0xB62 JUMPI SUB PUSH2 0xB3A JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0xBA4 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 SWAP3 PUSH0 DUP5 DUP1 MLOAD PUSH2 0xBFA DUP2 PUSH2 0x9D3 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 PUSH1 0xFF DUP5 MLOAD SWAP2 PUSH2 0xC1E DUP4 PUSH2 0x9D3 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP5 MSTORE DUP2 DUP8 SHR AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x80 SHR AND ISZERO SWAP4 DUP5 ISZERO SWAP1 DUP3 ADD MSTORE SWAP3 PUSH2 0xC4A JUMPI POP JUMP JUMPDEST PUSH32 0xA589C09E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH8 0x5CA2229049AC0D86 PUSH17 0x2A3F8B91328E9F60BDF58F2A73EEEBDB46 0xB3 0xDE CODECOPY 0xE3 EXTCODEHASH PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1136:7209:87:-:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1136:7209:87;;;;;;;;;;;;;;;;;;;;;;;922:4:47;1347:46:33;;943:28:45;;939:79;;1028:14;;1136:7209:87;;-1:-1:-1;;;2434:32:87;;1136:7209;1028:14:45;;1136:7209:87;;2434:32;;1136:7209;;2434:32;;;;;;;-1:-1:-1;2434:32:87;;;-1:-1:-1;;1136:7209:87;2477:46;;;2533:50;;1136:7209;;-1:-1:-1;;;2700:101:87;;1136:7209;;;2700:101;1136:7209;2434:32;1136:7209;;2700:101;;;;;;;-1:-1:-1;2700:101:87;;;-1:-1:-1;2668:133:87;;2434:32;2668:133;;;;;1136:7209;;;;;;;;;2844:102;;;;;;;;;-1:-1:-1;2844:102:87;;;-1:-1:-1;2811:135:87;;;;;;1136:7209;;;;;;;;1347:46:33;1136:7209:87;;;;;1028:14:45;1136:7209:87;;;;;;;;;;;;;;;2533:50;1136:7209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2844:102;;;;;;;;;;;;;;;;;:::i;:::-;;;1136:7209;;;;;2844:102;;;;;1136:7209;-1:-1:-1;1136:7209:87;;2844:102;;;;;;1136:7209;;;-1:-1:-1;1136:7209:87;;;;;2700:101;;;;;;;;;;;;;;;;;:::i;:::-;;;1136:7209;;;;;;;2700:101;;;;;;;2434:32;;;;;;;;;;;;;;;;;:::i;:::-;;;1136:7209;;;;;;;;;;;;2434:32;;;;;;;;;;1136:7209;;;-1:-1:-1;1136:7209:87;;;;;939:79:45;994:13;;;-1:-1:-1;994:13:45;;-1:-1:-1;994:13:45;1136:7209:87;;;;;-1:-1:-1;;1136:7209:87;;;;-1:-1:-1;;;;;1136:7209:87;;;;;;;;;;:::o;:::-;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":2480,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":2673,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":2798,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":2608,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_6540":{"entryPoint":2515,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_6542":{"entryPoint":2588,"id":null,"parameterSlots":1,"returnSlots":0},"fun_ensureValidPrecision":{"entryPoint":2842,"id":22328,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":2697,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_getValidatedProtocolFees":{"entryPoint":3028,"id":22281,"parameterSlots":1,"returnSlots":1},"fun_toUint64":{"entryPoint":2959,"id":15026,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":2740}],"7358":[{"length":32,"start":351},{"length":32,"start":512},{"length":32,"start":1640}],"22007":[{"length":32,"start":231},{"length":32,"start":1918}],"22010":[{"length":32,"start":592},{"length":32,"start":883}],"22012":[{"length":32,"start":1780}],"22014":[{"length":32,"start":1819}]},"linkReferences":{},"object":"604060808152600480361015610013575f80fd5b5f35908160e01c918262859689146105d557508163344b12d5146102c4578163851c1bb31461027457816385f2dbd4146102245781638d928af8146101d4578163aaabadc51461010b57508063deb27a7a146100bb5763f2c24ec814610077575f80fd5b346100b75760206003193601126100b7576100986100936109b0565b610bd4565b67ffffffffffffffff6020818351169201511682519182526020820152f35b5f80fd5b50346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100b7575f6003193601126100b75773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa9182156101ca57926020935f9361019b575b505191168152f35b6101bc919350843d86116101c3575b6101b48183610a30565b810190610aee565b915f610193565b503d6101aa565b83513d5f823e3d90fd5b82346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b82346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100b75760206003193601126100b75735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100b7576102bd602092610a89565b9051908152f35b9050346100b757816003193601126100b7576102de6109b0565b60249182359167ffffffffffffffff8084116100b757366023850112156100b75783830135908082116105aa5760058260051b9560209689519461032489830187610a30565b85528888860191830101913683116100b7579880959901905b8282106105785750505061035084610bd4565b905f938783019573ffffffffffffffffffffffffffffffffffffffff80911692817f000000000000000000000000000000000000000000000000000000000000000016965b8b5181101561057657828b8d83851b01015116908d517f6634b753000000000000000000000000000000000000000000000000000000008152828c8201528c8187818a5afa90811561056c575f9161053f575b5015610510578787511691888b5116928a3b156100b7578f517ffd267f3900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83168e82019081526020810192909252905f90829081900360400181838f5af18015610505576104f6575b50893b156100b7578e517fabaa335600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116818d019081526020810193909352915f90839081906040010381838d5af19182156104ec576001926104dd575b5001610395565b6104e690610a1c565b5f6104d6565b8e513d5f823e3d90fd5b6104ff90610a1c565b5f610464565b508f513d5f823e3d90fd5b50915050877ff400ce63000000000000000000000000000000000000000000000000000000005f52525260445ffd5b61055f91508d803d10610565575b6105578183610a30565b810190610a71565b5f6103e8565b503d61054d565b8f513d5f823e3d90fd5b005b819995993573ffffffffffffffffffffffffffffffffffffffff811681036100b757815294989490880190880161033d565b856041857f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b9083346100b75760606003193601126100b7576105f06109b0565b92602435906106237fffffffff000000000000000000000000000000000000000000000000000000006044359216610a89565b73ffffffffffffffffffffffffffffffffffffffff9584517faaabadc5000000000000000000000000000000000000000000000000000000008152602092838289818c7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156109a6579184918a935f92610984575b50606490895194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084528d840152336024840152306044840152165afa90811561097a575f9161095d575b5015610936577f0000000000000000000000000000000000000000000000000000000000000000841161090f577f000000000000000000000000000000000000000000000000000000000000000083116108e85781879160448751809481937fae2733a400000000000000000000000000000000000000000000000000000000835260018c840152169a8b60248301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156108de575f916108c1575b5015610896577f2c3f7d4fd7252aea844c55450b24cac1853ac3a3293a3d0616193b7d854cf0f094506107e083610b1a565b6107e982610b1a565b6107f283610b8f565b6107fb83610b8f565b855191610807836109d3565b67ffffffffffffffff809116835280848401921682528683019060018252895f525f8552875f209351167fffffffffffffffffffffffffffffff000000000000000000000000000000000070ff000000000000000000000000000000006fffffffffffffffff0000000000000000865495518b1b169351151560801b16931617171790558351928352820152a2005b85857fc2a47384000000000000000000000000000000000000000000000000000000005f525260245ffd5b6108d89150823d8411610565576105578183610a30565b876107ae565b85513d5f823e3d90fd5b857fa7849e8e000000000000000000000000000000000000000000000000000000005f525ffd5b857f7e6eb7fb000000000000000000000000000000000000000000000000000000005f525ffd5b857f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b6109749150833d8511610565576105578183610a30565b886106ec565b86513d5f823e3d90fd5b606491925061099f90843d86116101c3576101b48183610a30565b919061069d565b87513d5f823e3d90fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100b757565b6060810190811067ffffffffffffffff8211176109ef57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116109ef57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109ef57604052565b908160209103126100b7575180151581036100b75790565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152610ae8816109d3565b51902090565b908160209103126100b7575173ffffffffffffffffffffffffffffffffffffffff811681036100b75790565b64174876e800808204818102918183041490151715610b625703610b3a57565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff90818111610ba4571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b9073ffffffffffffffffffffffffffffffffffffffff6040925f848051610bfa816109d3565b828152826020820152015216805f525f602052825f2060ff845191610c1e836109d3565b5467ffffffffffffffff808216845281871c16602084015260801c16159384159082015292610c4a5750565b7fa589c09e000000000000000000000000000000000000000000000000000000005f5260045260245ffdfea2646970667358221220675ca2229049ac0d86702a3f8b91328e9f60bdf58f2a73eeebdb46b3de39e33f64736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH3 0x859689 EQ PUSH2 0x5D5 JUMPI POP DUP2 PUSH4 0x344B12D5 EQ PUSH2 0x2C4 JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x274 JUMPI DUP2 PUSH4 0x85F2DBD4 EQ PUSH2 0x224 JUMPI DUP2 PUSH4 0x8D928AF8 EQ PUSH2 0x1D4 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x10B JUMPI POP DUP1 PUSH4 0xDEB27A7A EQ PUSH2 0xBB JUMPI PUSH4 0xF2C24EC8 EQ PUSH2 0x77 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x98 PUSH2 0x93 PUSH2 0x9B0 JUMP JUMPDEST PUSH2 0xBD4 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x20 DUP2 DUP4 MLOAD AND SWAP3 ADD MLOAD AND DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1CA JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x19B JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1BC SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x1C3 JUMPI JUMPDEST PUSH2 0x1B4 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xAEE JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x193 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1AA JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xB7 JUMPI PUSH2 0x2BD PUSH1 0x20 SWAP3 PUSH2 0xA89 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x2DE PUSH2 0x9B0 JUMP JUMPDEST PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT PUSH2 0xB7 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0xB7 JUMPI DUP4 DUP4 ADD CALLDATALOAD SWAP1 DUP1 DUP3 GT PUSH2 0x5AA JUMPI PUSH1 0x5 DUP3 PUSH1 0x5 SHL SWAP6 PUSH1 0x20 SWAP7 DUP10 MLOAD SWAP5 PUSH2 0x324 DUP10 DUP4 ADD DUP8 PUSH2 0xA30 JUMP JUMPDEST DUP6 MSTORE DUP9 DUP9 DUP7 ADD SWAP2 DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xB7 JUMPI SWAP9 DUP1 SWAP6 SWAP10 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x578 JUMPI POP POP POP PUSH2 0x350 DUP5 PUSH2 0xBD4 JUMP JUMPDEST SWAP1 PUSH0 SWAP4 DUP8 DUP4 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP3 DUP2 PUSH32 0x0 AND SWAP7 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x576 JUMPI DUP3 DUP12 DUP14 DUP4 DUP6 SHL ADD ADD MLOAD AND SWAP1 DUP14 MLOAD PUSH32 0x6634B75300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP13 DUP3 ADD MSTORE DUP13 DUP2 DUP8 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x56C JUMPI PUSH0 SWAP2 PUSH2 0x53F JUMPI JUMPDEST POP ISZERO PUSH2 0x510 JUMPI DUP8 DUP8 MLOAD AND SWAP2 DUP9 DUP12 MLOAD AND SWAP3 DUP11 EXTCODESIZE ISZERO PUSH2 0xB7 JUMPI DUP16 MLOAD PUSH32 0xFD267F3900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP15 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 PUSH0 SWAP1 DUP3 SWAP1 DUP2 SWAP1 SUB PUSH1 0x40 ADD DUP2 DUP4 DUP16 GAS CALL DUP1 ISZERO PUSH2 0x505 JUMPI PUSH2 0x4F6 JUMPI JUMPDEST POP DUP10 EXTCODESIZE ISZERO PUSH2 0xB7 JUMPI DUP15 MLOAD PUSH32 0xABAA335600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 DUP14 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP14 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x4EC JUMPI PUSH1 0x1 SWAP3 PUSH2 0x4DD JUMPI JUMPDEST POP ADD PUSH2 0x395 JUMP JUMPDEST PUSH2 0x4E6 SWAP1 PUSH2 0xA1C JUMP JUMPDEST PUSH0 PUSH2 0x4D6 JUMP JUMPDEST DUP15 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x4FF SWAP1 PUSH2 0xA1C JUMP JUMPDEST PUSH0 PUSH2 0x464 JUMP JUMPDEST POP DUP16 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP2 POP POP DUP8 PUSH32 0xF400CE6300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x55F SWAP2 POP DUP14 DUP1 RETURNDATASIZE LT PUSH2 0x565 JUMPI JUMPDEST PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xA71 JUMP JUMPDEST PUSH0 PUSH2 0x3E8 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x54D JUMP JUMPDEST DUP16 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST STOP JUMPDEST DUP2 SWAP10 SWAP6 SWAP10 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB7 JUMPI DUP2 MSTORE SWAP5 SWAP9 SWAP5 SWAP1 DUP9 ADD SWAP1 DUP9 ADD PUSH2 0x33D JUMP JUMPDEST DUP6 PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP4 CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x5F0 PUSH2 0x9B0 JUMP JUMPDEST SWAP3 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x623 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x44 CALLDATALOAD SWAP3 AND PUSH2 0xA89 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP5 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 DUP10 DUP2 DUP13 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x9A6 JUMPI SWAP2 DUP5 SWAP2 DUP11 SWAP4 PUSH0 SWAP3 PUSH2 0x984 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 DUP10 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP14 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x97A JUMPI PUSH0 SWAP2 PUSH2 0x95D JUMPI JUMPDEST POP ISZERO PUSH2 0x936 JUMPI PUSH32 0x0 DUP5 GT PUSH2 0x90F JUMPI PUSH32 0x0 DUP4 GT PUSH2 0x8E8 JUMPI DUP2 DUP8 SWAP2 PUSH1 0x44 DUP8 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xAE2733A400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x1 DUP13 DUP5 ADD MSTORE AND SWAP11 DUP12 PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8DE JUMPI PUSH0 SWAP2 PUSH2 0x8C1 JUMPI JUMPDEST POP ISZERO PUSH2 0x896 JUMPI PUSH32 0x2C3F7D4FD7252AEA844C55450B24CAC1853AC3A3293A3D0616193B7D854CF0F0 SWAP5 POP PUSH2 0x7E0 DUP4 PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x7E9 DUP3 PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x7F2 DUP4 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x7FB DUP4 PUSH2 0xB8F JUMP JUMPDEST DUP6 MLOAD SWAP2 PUSH2 0x807 DUP4 PUSH2 0x9D3 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP4 MSTORE DUP1 DUP5 DUP5 ADD SWAP3 AND DUP3 MSTORE DUP7 DUP4 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE DUP10 PUSH0 MSTORE PUSH0 DUP6 MSTORE DUP8 PUSH0 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000 PUSH17 0xFF00000000000000000000000000000000 PUSH16 0xFFFFFFFFFFFFFFFF0000000000000000 DUP7 SLOAD SWAP6 MLOAD DUP12 SHL AND SWAP4 MLOAD ISZERO ISZERO PUSH1 0x80 SHL AND SWAP4 AND OR OR OR SWAP1 SSTORE DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE LOG2 STOP JUMPDEST DUP6 DUP6 PUSH32 0xC2A4738400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x8D8 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x565 JUMPI PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP8 PUSH2 0x7AE JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP6 PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP6 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x974 SWAP2 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x565 JUMPI PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP9 PUSH2 0x6EC JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x99F SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x1C3 JUMPI PUSH2 0x1B4 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x69D JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB7 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xB7 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xB7 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0xAE8 DUP2 PUSH2 0x9D3 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xB7 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB7 JUMPI SWAP1 JUMP JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0xB62 JUMPI SUB PUSH2 0xB3A JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0xBA4 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 SWAP3 PUSH0 DUP5 DUP1 MLOAD PUSH2 0xBFA DUP2 PUSH2 0x9D3 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 PUSH1 0xFF DUP5 MLOAD SWAP2 PUSH2 0xC1E DUP4 PUSH2 0x9D3 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP5 MSTORE DUP2 DUP8 SHR AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x80 SHR AND ISZERO SWAP4 DUP5 ISZERO SWAP1 DUP3 ADD MSTORE SWAP3 PUSH2 0xC4A JUMPI POP JUMP JUMPDEST PUSH32 0xA589C09E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH8 0x5CA2229049AC0D86 PUSH17 0x2A3F8B91328E9F60BDF58F2A73EEEBDB46 0xB3 0xDE CODECOPY 0xE3 EXTCODEHASH PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1136:7209:87:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1581:26:47;;1136:7209:87;1581:26:47;;;1136:7209:87;;;;;;;;;;;;-1:-1:-1;;1136:7209:87;;;;;3619:34;1136:7209;;:::i;:::-;3619:34;:::i;:::-;1136:7209;;;;;;3768:38;;1136:7209;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1136:7209:87;;;;;;;;;3304:24;1136:7209;;;;;;;;;;;-1:-1:-1;;1136:7209:87;;;;;;1581:26:47;1136:7209:87;;1581:26:47;;1136:7209:87;1581:26:47;;1124:6:45;;;1136:7209:87;1581:26:47;;;;;;;;;;1136:7209:87;1581:26:47;;;1136:7209:87;;;;;;;;1581:26:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;1136:7209:87;;;;;;;;;;;;;;;-1:-1:-1;;1136:7209:87;;;;;;;;;1124:6:45;1136:7209:87;;;;;;;;;;-1:-1:-1;;1136:7209:87;;;;;;;;;3111:22;1136:7209;;;;;;;;;;;-1:-1:-1;;1136:7209:87;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;1136:7209:87;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5862:34;;;;;;:::i;:::-;5912:13;1136:7209;6451:38;;;;1136:7209;;;;;7227:22;;;1136:7209;5907:607;5945:3;1136:7209;;5927:16;;;;;1136:7209;;;;;;;;;;;;;;6168:56;;;;;;1136:7209;6168:56;;;;;;;;;;;;1136:7209;6168:56;;;5945:3;1136:7209;;6164:151;;1136:7209;;;;;;;;;7227:84;;;;;;1136:7209;;;7227:84;;1136:7209;;;7227:84;;;1136:7209;;;;;;;;;;;-1:-1:-1;;1136:7209:87;;7227:84;;;1136:7209;7227:84;1136:7209;-1:-1:-1;1136:7209:87;7227:84;;;;;;;;5945:3;7321:86;;;;;;1136:7209;;;7321:86;;1136:7209;;;;7321:86;;;1136:7209;;;;;;;;;;;;;;;;;;;7321:86;;;;;;;;;;;1136:7209;7321:86;;;5945:3;;1136:7209;5912:13;;7321:86;;;;:::i;:::-;;;;;1136:7209;;;;;;;;;7227:84;;;;:::i;:::-;;;;;1136:7209;;;;;;;;;;6164:151;6260:40;;;;;;1136:7209;6260:40;1136:7209;;;;6260:40;6168:56;;;;;;;-1:-1:-1;6168:56:87;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;1136:7209;;;;;;;;;5927:16;1136:7209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1136:7209:87;;;;;;;:::i;:::-;;;;;1762:20:33;1774:7;1136:7209:87;;1774:7:33;;1762:20;:::i;:::-;1136:7209:87;;;;;1336:22:45;;1136:7209:87;1336:6:45;;;;;;;1136:7209:87;1336:22:45;;;;;;;;;;;;1136:7209:87;1336:22:45;;;1136:7209:87;;;;;;1336:64:45;;;;;1136:7209:87;1336:64:45;;;;;1136:7209:87;1820:10:33;1136:7209:87;;;;1394:4:45;1136:7209:87;;;;;1336:64:45;;;;;;;1136:7209:87;1336:64:45;;;1136:7209:87;1797:34:33;;1793:90;;4208:29:87;4180:57;;4176:152;;4371:30;4342:59;;4338:155;;1136:7209;;;;;;4547:85;;;;1136:7209;4547:85;;1136:7209;4547:85;;;1136:7209;;;;;;;;4547:24;1136:7209;4547:85;;;;;;;1136:7209;4547:85;;;1136:7209;;;4543:155;;5253:104;4776:25;;;;;:::i;:::-;4834:26;;;:::i;:::-;5074:36;;;:::i;:::-;5152:37;;;:::i;:::-;1136:7209;;;;;;:::i;:::-;;;;;;;5013:224;;;;1136:7209;;;;5013:224;;;1136:7209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5253:104;1136:7209;4543:155;4664:23;;;1136:7209;4664:23;1136:7209;;;4664:23;4547:85;;;;;;;;;;;;;;:::i;:::-;;;;;1136:7209;;;;;;;;;4338:155;4424:58;;1136:7209;4424:58;1136:7209;4424:58;4176:152;4260:57;;1136:7209;4260:57;1136:7209;4260:57;1793:90:33;1854:18;;1136:7209:87;1854:18:33;1136:7209:87;1854:18:33;1336:64:45;;;;;;;;;;;;;;:::i;:::-;;;;;1136:7209:87;;;;;;;;;1336:22:45;1136:7209:87;1336:22:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;1136:7209:87;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;1931:430:33:-;1136:7209:87;;;2303:50:33;;;2320:22;;1136:7209:87;;;;;;;2303:50:33;;;;;;:::i;:::-;1136:7209:87;2293:61:33;;1931:430;:::o;1136:7209:87:-;;;;;;;;;;;;;;;;;;:::o;7594:749::-;19669:4:32;;;;;;;;;;;;;;;;;;8195:74:87;8191:146;;7594:749::o;8191:146::-;8292:34;-1:-1:-1;8292:34:87;;-1:-1:-1;8292:34:87;19669:4:32;;-1:-1:-1;19669:4:32;;;;;-1:-1:-1;19669:4:32;13296:213:71;1136:7209:87;13374:24:71;;;;13370:103;;1136:7209:87;13296:213:71;:::o;13370:103::-;13421:41;;;13452:2;13421:41;1136:7209:87;;;;13421:41:71;;6526:313:87;;1136:7209;;;-1:-1:-1;1136:7209:87;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1136:7209:87;-1:-1:-1;1136:7209:87;;;-1:-1:-1;1136:7209:87;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;6731:102;;;6526:313;:::o;6731:102::-;6796:26;-1:-1:-1;6796:26:87;;1136:7209;;-1:-1:-1;6796:26:87"},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getBalancerContractRegistry()":"deb27a7a","getFactorySpecificProtocolFeePercentages(address)":"f2c24ec8","getProtocolFeeController()":"85f2dbd4","getVault()":"8d928af8","setFactorySpecificProtocolFeePercentages(address,uint256,uint256)":"00859689","setProtocolFeePercentagesForPools(address,address[])":"344b12d5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IBalancerContractRegistry\",\"name\":\"trustedContractRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"FactoryFeesNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"PoolNotFromFactory\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"UnknownFactory\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"FactorySpecificProtocolFeePercentagesSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBalancerContractRegistry\",\"outputs\":[{\"internalType\":\"contract IBalancerContractRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"getFactorySpecificProtocolFeePercentages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setFactorySpecificProtocolFeePercentages\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"setProtocolFeePercentagesForPools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"FactoryFeesNotSet(address)\":[{\"details\":\"This error can by thrown by `getFactorySpecificProtocolFeePercentages` or `setProtocolFeePercentagesForPools`, as both require that valid fee percentages have been set. You need to set the factory fees before you can apply them to pools from that factory.\",\"params\":{\"factory\":\"The factory address where fees have not been set\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"PoolNotFromFactory(address,address)\":[{\"details\":\"Occurs when one of the pools supplied to `setProtocolFeePercentagesForPools` is not from the given factory.\",\"params\":{\"factory\":\"The address of the factory\",\"pool\":\"The address of the unrecognized pool\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"UnknownFactory(address)\":[{\"params\":{\"factory\":\"The address of the unknown factory\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"FactorySpecificProtocolFeePercentagesSet(address,uint256,uint256)\":{\"params\":{\"factory\":\"The pool factory\",\"protocolSwapFeePercentage\":\"The protocol swap fee percentage intended for pools from this factory\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage intended for pools from this factory\"}}},\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getBalancerContractRegistry()\":{\"returns\":{\"_0\":\"The address of the Balancer contract registry\"}},\"getFactorySpecificProtocolFeePercentages(address)\":{\"params\":{\"factory\":\"The address of the factory\"},\"returns\":{\"protocolSwapFeePercentage\":\"The protocol swap fee percentage set for that factory\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage set for that factory\"}},\"getProtocolFeeController()\":{\"returns\":{\"_0\":\"The address of the fee controller\"}},\"getVault()\":{\"details\":\"This function is virtual to allow for overriding in derived contracts which also inherits contracts with `getVault()` definition.\",\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"setFactorySpecificProtocolFeePercentages(address,uint256,uint256)\":{\"details\":\"This is a permissioned call. After the fee percentages have been set, and governance has granted this contract permission to set fee percentages on pools, anyone can call `setProtocolFeePercentagesForPools` to update the fee percentages on a set of pools from that factory.\",\"params\":{\"factory\":\"The address of the factory\",\"protocolSwapFeePercentage\":\"The new protocol swap fee percentage\",\"protocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setProtocolFeePercentagesForPools(address,address[])\":{\"details\":\"This call is permissionless. Anyone can update the fee percentages, once they're set by governance. Note that governance must also grant this contract permission to set protocol fee percentages on pools.\",\"params\":{\"factory\":\"The address of the factory\",\"pools\":\"The pools whose fees will be set according to `setFactorySpecificProtocolFeePercentages`\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"FactoryFeesNotSet(address)\":[{\"notice\":\"`setFactorySpecificProtocolFeePercentages` has not been called for this factory address.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"PoolNotFromFactory(address,address)\":[{\"notice\":\"The given pool is not from the expected factory.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"UnknownFactory(address)\":[{\"notice\":\"Fees can only be set on recognized factories (i.e., registered in the `BalancerContractRegistry`).\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The protocol fee controller was configured with an incorrect Vault address.\"}]},\"events\":{\"FactorySpecificProtocolFeePercentagesSet(address,uint256,uint256)\":{\"notice\":\"Protocol fee percentages have been set for the given factory.\"}},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getBalancerContractRegistry()\":{\"notice\":\"Get the address of the `BalancerContractRegistry` used to validate factory contracts.\"},\"getFactorySpecificProtocolFeePercentages(address)\":{\"notice\":\"Query the protocol fee percentages for a given factory.\"},\"getProtocolFeeController()\":{\"notice\":\"Get the address of the `ProtocolFeeController` used to set fees.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"setFactorySpecificProtocolFeePercentages(address,uint256,uint256)\":{\"notice\":\"Assign intended protocol fee percentages for a given factory.\"},\"setProtocolFeePercentagesForPools(address,address[])\":{\"notice\":\"Update the protocol fees for a set of pools from a given factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ProtocolFeePercentagesProvider.sol\":\"ProtocolFeePercentagesProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0x6f8c558b0520faae0c4576f30225b5a97821a4cd210878a0ba10c102a2f753f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b40aa7a5ee39fa2e297c684fd29ad45d866f1fc61cd997120a417b02a4d908aa\",\"dweb:/ipfs/QmYP5pQAF7SDLgy3aerqfnc4VwdmfQix2jcQUNL3o83BY9\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xcb2fa9725bb158d1bd24984d39da7b69628d390740ef13b5578ecab903e0be0b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://fa02bc7433e3c93261e6644049bc2bddb474a7071874eaad4b4150af1afbb43f\",\"dweb:/ipfs/QmR2jYnyT7zg3wWbn4qpUhzpMoYVd9iZ7HsE1FNJqrFtUM\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0x4e6eceea41f31faa3f4228315c1d54c0d6f7befaaa1d158775e0b2a860c9de12\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6fc6d998ca7860d5c8f08a4fc045d5d1ebdcb4c777e934f6cd081d05252a024f\",\"dweb:/ipfs/QmbsPGHVrBdVfpcWkm3BNWPQXUZWbvPb6VGiEbf5ezvAmj\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x11ec2b653633cbcc6a99d426df178007a98d1154a39a1ada961239be39eec069\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://40eed42ee57746bbf4711bb4aee856328cd70cc02aa3ff05e8dd719868fcd524\",\"dweb:/ipfs/QmX5uAoB9W6UUehgSRvVW6hun3XE53eZwKsm4kHVqtJs8C\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"contracts/ProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xfeb8192a52018fbe8fa3df7398ca90b42487e1ae128473ac60895740a10d97c7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://05898cb2e0b82b2910aa891d1657be38189c180590f949145ab61b7cbd8552f7\",\"dweb:/ipfs/QmSnHhbmrCBhnjsSHbVPswBm7NHsUHq5zzQV2wqZqokoqA\"]}},\"version\":1}"}},"contracts/ProtocolFeeSweeper.sol":{"ProtocolFeeSweeper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"feeRecipient","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BurnerDidNotConsumeAllowance","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"InvalidFeeRecipient","type":"error"},{"inputs":[],"name":"InvalidProtocolFeeBurner","type":"error"},{"inputs":[],"name":"InvalidTargetToken","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerAlreadyAdded","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerNotAdded","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"UnsupportedProtocolFeeBurner","type":"error"},{"inputs":[],"name":"UnwrapIsNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"feeRecipient","type":"address"}],"name":"FeeRecipientSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"feeTokenAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeSwept","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TargetTokenSet","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"contract IProtocolFeeBurner","name":"protocolFeeBurner","type":"address"}],"name":"addProtocolFeeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTargetToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"isApprovedProtocolFeeBurner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"feeTokens","type":"address[]"}],"name":"recoverProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeBurner","name":"protocolFeeBurner","type":"address"}],"name":"removeProtocolFeeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feeRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"targetToken","type":"address"}],"name":"setTargetToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"contract IProtocolFeeBurner","name":"feeBurner","type":"address"}],"name":"sweepProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC4626","name":"feeToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"contract IProtocolFeeBurner","name":"feeBurner","type":"address"}],"name":"sweepProtocolFeesForWrappedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c0346100fe57601f611ced38819003918201601f19168301916001600160401b038311848410176101025780849260409485528339810103126100fe5780516001600160a01b0391828216908183036100fe57602001519283168093036100fe5730608052156100ef5760a05280156100e057600180546001600160a01b03191682179055604051907fbf9a9534339a9d6b81696e05dcfb614b7dc518a31d48be3cfb757988381fb3235f80a2611bd6908161011782396080518161173f015260a051818181610d3b01528181610e25015281816117cd01526118f40152f35b630ed1b8b360e31b5f5260045ffd5b630647140b60e51b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe604060808152600490813610156100a0575b361561007957346100795790602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600f60248201527f4e6f7420696d706c656d656e74656400000000000000000000000000000000006044820152fd5b507ff2238896000000000000000000000000000000000000000000000000000000005f525ffd5b5f3560e01c80631b66cb00146115a45780634ccb20c01461157057806380db0d511461153d578063851c1bb3146114ed57806385f2dbd4146114b457806388f6d2a414610e495780638d928af814610df95780639c5cee9b14610db0578063aaabadc514610ce7578063b0edcc5314610ae1578063b11f061e14610a0b578063b974699514610302578063e20c482f146101fe5763e74b981b036100115750346101fa5760206003193601126101fa57610158611630565b6001549073ffffffffffffffffffffffffffffffffffffffff9061017e82841630611872565b169182156101d457507fffffffffffffffffffffffff00000000000000000000000000000000000000001681176001557fbf9a9534339a9d6b81696e05dcfb614b7dc518a31d48be3cfb757988381fb3235f80a2005b7f768dc598000000000000000000000000000000000000000000000000000000005f525ffd5b5f80fd5b50346101fa5760206003193601126101fa57610218611630565b73ffffffffffffffffffffffffffffffffffffffff9061023c826001541630611872565b1691825f52600260205260ff825f2054166102d75782156102b15750815f5260026020525f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f0ef09fc346b7c2cae78d9a37ed785840e7d3c6072022cd8c41c3b37a239b7fd15f80a2005b7f31ec2736000000000000000000000000000000000000000000000000000000005f525ffd5b90507f6fe47af6000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101fa5760a06003193601126101fa5761031d611630565b602490813573ffffffffffffffffffffffffffffffffffffffff948582168083036101fa5761034a611653565b926103536119fd565b610361886001541630611872565b8095885f9516918261099d575b84517f70a08231000000000000000000000000000000000000000000000000000000009a8b8252308b83015260209586838681845afa928315610993575f93610964575b50816103bc61178a565b1693843b156101fa578c9489517f8f4ab9ca000000000000000000000000000000000000000000000000000000008152848d1680978201525f81898183865af1801561095a57610947575b50803b15610727578a868f606490838e5195869485937fb53a70b2000000000000000000000000000000000000000000000000000000008552840152308d8401528860448401525af1801561093d57610929575b508c9d89519d8e91825230910152878d8781855afa9c8d156108aa578a9d6108fa575b50838d03938d85116108cf57849d036104b7575b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b86156108b45750885482169281840361051d57505050505050505050806104f657506104e39350611abb565b5f80808080808080808080808080610492565b807fca9e3a1e00000000000000000000000000000000000000000000000000000000869252fd5b9091929395979a949698809c9a50610782575b505088517f095ea7b30000000000000000000000000000000000000000000000000000000081890181815273ffffffffffffffffffffffffffffffffffffffff8916838901908152602081018c90529192918a918e916105bc9085906040015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018652856116d3565b83519082895af18c513d82610764575b50501561072b575b5050806001541692863b15610727578951947fde557a320000000000000000000000000000000000000000000000000000000086528c8601521696878585015260448401526064830152604435608483015260a482015260643560c4820152868160e48183875af1801561071d578493929188916106fe575b5050604490865195869384927fdd62ed3e000000000000000000000000000000000000000000000000000000008452308c8501528301525afa9283156106f5575083926106c7575b50506106a25750506104e3565b7fc5bc8d51000000000000000000000000000000000000000000000000000000008152fd5b90809250813d83116106ee575b6106de81836116d3565b810103126101fa57515f80610695565b503d6106d4565b513d85823e3d90fd5b61070b9192939450611676565b61071957908291865f61064d565b8580fd5b86513d89823e3d90fd5b8a80fd5b61075761075d928c51908b82015289898201528d604482015260448152610751816116b7565b86611b19565b84611b19565b5f806105d4565b90915061077a57508285163b15155b5f806105cc565b600114610773565b8a517f38d52e0f000000000000000000000000000000000000000000000000000000008152919c9b9a9950935087818c818f5afa9081156108aa57889183918c9161086b575b50169389519c8d917fba0876520000000000000000000000000000000000000000000000000000000083528d8301523088830152306044830152818c5a92606493f19a8b156108615798809a9b899a829161082c575b509850859050610590610530565b995050508688813d831161085a575b61084581836116d3565b810103126101fa5796518897908a908861081e565b503d61083b565b88513d8b823e3d90fd5b928092508391503d83116108a3575b61088481836116d3565b8101031261089f5751818116810361089f578188915f6107c8565b8980fd5b503d61087a565b89513d8c823e3d90fd5b9a50505098505050505050506108ca9350611abb565b6104e3565b7f4e487b71000000000000000000000000000000000000000000000000000000008b5260118f52868bfd5b909c508781813d8311610922575b61091281836116d3565b810103126101fa57519b5f61047e565b503d610908565b6109338b91611676565b61089f575f61045b565b8a513d8d823e3d90fd5b610952919b50611676565b5f995f610407565b8b513d5f823e3d90fd5b9092508681813d831161098c575b61097c81836116d3565b810103126101fa5751915f6103b2565b503d610972565b88513d5f823e3d90fd5b825f52600260205260ff855f2054165f146109e157895f541661036e57887f8562eb45000000000000000000000000000000000000000000000000000000005f525ffd5b5090877f38553f6c000000000000000000000000000000000000000000000000000000005f52525ffd5b50346101fa5760206003193601126101fa57610a25611630565b73ffffffffffffffffffffffffffffffffffffffff90610a49826001541630611872565b1691825f52600260205260ff825f20541615610ab65750815f5260026020525f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690557f0ed3ea501d1a23f23a7dc56c2d33e1e5a6a97694c707ef67b1e0159f239746bf5f80a2005b90507fbca5ab34000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101fa57602090816003193601126101fa5780359267ffffffffffffffff8085116101fa57366023860112156101fa5784830135936024918511610cbb576005958560051b845196610b38848301896116d3565b8752602483880191830101913683116101fa57602401905b828210610c8f57505050610b626119fd565b73ffffffffffffffffffffffffffffffffffffffff9460019580600154163303610c68575f97875b610bb3575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b8251891015610c635781848a831b8501015116988651997f70a08231000000000000000000000000000000000000000000000000000000008b5230898c0152858b8881845afa8015610993578a9b5f91610c2e575b5090818b9392610c1c575b50500198610b8a565b610c27913390611a52565b5f80610c13565b8093929b50878092503d8311610c5c575b610c4981836116d3565b810103126101fa5790518a99908a610c08565b503d610c3f565b610492565b857f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b813573ffffffffffffffffffffffffffffffffffffffff811681036101fa578152908301908301610b50565b6041847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101fa575f6003193601126101fa5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa918215610da657926020935f93610d77575b505191168152f35b610d98919350843d8611610d9f575b610d9081836116d3565b810190611846565b915f610d6f565b503d610d86565b83513d5f823e3d90fd5b50346101fa5760206003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff610de2611630565b165f526002825260ff815f20541690519015158152f35b50346101fa575f6003193601126101fa576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346101fa5760a06003193601126101fa57610e63611630565b90602491823573ffffffffffffffffffffffffffffffffffffffff8082168092036101fa57610e90611653565b94610e996119fd565b610ea7826001541630611872565b815f9616918215159384611446575b8651917f70a082310000000000000000000000000000000000000000000000000000000096878452308b85015260209687858781875afa94851561143c575f9561140d575b5082610f0561178a565b1694853b156101fa578c958b517f8f4ab9ca00000000000000000000000000000000000000000000000000000000815285851680988201525f818a8183865af18015611403576113f0575b50803b156113ec578c878f6064908f84905195869485937fb53a70b20000000000000000000000000000000000000000000000000000000085528401528d30908401528b60448401525af180156113e257908d916113ca575b50508a51998a52308d8b0152888a8881885afa998a156113c0578c9a611391575b50808a0399808b116113655703611000575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b1561134c57508854811690828203611039578a8a7fca9e3a1e000000000000000000000000000000000000000000000000000000008152fd5b88517f38d52e0f00000000000000000000000000000000000000000000000000000000815287818d81875afa90811561093d57889183918d91611311575b50169860648d8d8d5197889485937fba087652000000000000000000000000000000000000000000000000000000008552840152308b8401523060448401525af19283156108aa578a936112e2575b50848951888c8b8a611155856111298b878301947f095ea7b3000000000000000000000000000000000000000000000000000000009a8b875284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866116d3565b828551925af18c513d826112c6575b50501561128d575b50506001541691853b1561089f578851937fde557a320000000000000000000000000000000000000000000000000000000085528b850152878585015260448401526064830152604435608483015260a482015260643560c4820152868160e48183875af1801561071d57849392918891611272575b5050604490865195869384927fdd62ed3e000000000000000000000000000000000000000000000000000000008452308c8501528301525afa9283156106f557508392611244575b50506106a25750505b5f8080808080808080808080610492565b90809250813d831161126b575b61125b81836116d3565b810103126101fa57515f8061122a565b503d611251565b61127f9192939450611676565b61071957908291865f6111e2565b6112b96112bf928c51908b82015289898201528d6044820152604481526112b3816116b7565b8b611b19565b89611b19565b5f8061116c565b9091506112da5750893b15155b5f80611164565b6001146112d3565b9092508681813d831161130a575b6112fa81836116d3565b810103126101fa5751915f6110c6565b503d6112f0565b928092508391503d8311611345575b61132a81836116d3565b8101031261072757518181168103610727578188915f611077565b503d611320565b969850509550505050506113609350611abb565b611233565b50868c60118f7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b9099508881813d83116113b9575b6113a981836116d3565b810103126101fa5751985f610fca565b503d61139f565b8b513d8e823e3d90fd5b6113d390611676565b6113de578b5f610fa9565b8b80fd5b8c513d8f823e3d90fd5b8c80fd5b6113fb919d50611676565b5f9b5f610f50565b8d513d5f823e3d90fd5b9094508781813d8311611435575b61142581836116d3565b810103126101fa5751935f610efb565b503d61141b565b8a513d5f823e3d90fd5b835f52600260205260ff875f2054165f1461148a57815f5416610eb657887f8562eb45000000000000000000000000000000000000000000000000000000005f525ffd5b82848a7f38553f6c000000000000000000000000000000000000000000000000000000005f52525ffd5b50346101fa575f6003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff6114e561178a565b915191168152f35b5090346101fa5760206003193601126101fa5735907fffffffff00000000000000000000000000000000000000000000000000000000821682036101fa57611536602092611714565b9051908152f35b50346101fa575f6003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50346101fa575f6003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b346101fa5760206003193601126101fa576115bd611630565b73ffffffffffffffffffffffffffffffffffffffff906115e1826001541630611872565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f557f873950c2ac59c570001b99d815ffb260542df229d07132922e2e6f9941fd3da65f80a2005b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101fa57565b6084359073ffffffffffffffffffffffffffffffffffffffff821682036101fa57565b67ffffffffffffffff811161168a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761168a57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761168a57604052565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff82111761168a5760405251902090565b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561183b575f9261180257505090565b9091506020813d602011611833575b8161181e602093836116d3565b810103126101fa575190811681036101fa5790565b3d9150611811565b6040513d5f823e3d90fd5b908160209103126101fa575173ffffffffffffffffffffffffffffffffffffffff811681036101fa5790565b9073ffffffffffffffffffffffffffffffffffffffff8091163303611895575050565b6118c17fffffffff000000000000000000000000000000000000000000000000000000005f3516611714565b91604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa90811561183b578460649287955f916119e0575b5060405196879586947f9be2a8840000000000000000000000000000000000000000000000000000000086526004860152336024860152166044840152165afa91821561183b575f926119a9575b50501561198157565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116119d9575b6119c081836116d3565b810103126101fa575180151581036101fa575f80611978565b503d6119b6565b6119f79150863d8811610d9f57610d9081836116d3565b5f61192a565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c611a2a576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff929092166024830152604480830193909352918152611ab991611ab46064836116d3565b611b19565b565b919060407fd6b9382ec1786c32610e376e8ee8f2f16abeda4ace3b6276ac958193c75bbbc89173ffffffffffffffffffffffffffffffffffffffff80918160015416611b08878284611a52565b8451968752602087015216941692a3565b905f602091828151910182855af11561183b575f513d611b97575073ffffffffffffffffffffffffffffffffffffffff81163b155b611b555750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415611b4e56fea26469706673582212205480978df623c804a8b886384f67d95375c26dc77bed8f7ed539d94969b947c064736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0xFE JUMPI PUSH1 0x1F PUSH2 0x1CED CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x102 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0xFE JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0xFE JUMPI PUSH1 0x20 ADD MLOAD SWAP3 DUP4 AND DUP1 SWAP4 SUB PUSH2 0xFE JUMPI ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xEF JUMPI PUSH1 0xA0 MSTORE DUP1 ISZERO PUSH2 0xE0 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP3 OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xBF9A9534339A9D6B81696E05DCFB614B7DC518A31D48BE3CFB757988381FB323 PUSH0 DUP1 LOG2 PUSH2 0x1BD6 SWAP1 DUP2 PUSH2 0x117 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x173F ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0xD3B ADD MSTORE DUP2 DUP2 PUSH2 0xE25 ADD MSTORE DUP2 DUP2 PUSH2 0x17CD ADD MSTORE PUSH2 0x18F4 ADD MSTORE RETURN JUMPDEST PUSH4 0xED1B8B3 PUSH1 0xE3 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0xA0 JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x79 JUMPI CALLVALUE PUSH2 0x79 JUMPI SWAP1 PUSH1 0x20 PUSH1 0x64 SWAP3 MLOAD SWAP2 PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420696D706C656D656E7465640000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST POP PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1B66CB00 EQ PUSH2 0x15A4 JUMPI DUP1 PUSH4 0x4CCB20C0 EQ PUSH2 0x1570 JUMPI DUP1 PUSH4 0x80DB0D51 EQ PUSH2 0x153D JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x14ED JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x14B4 JUMPI DUP1 PUSH4 0x88F6D2A4 EQ PUSH2 0xE49 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0xDF9 JUMPI DUP1 PUSH4 0x9C5CEE9B EQ PUSH2 0xDB0 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB0EDCC53 EQ PUSH2 0xAE1 JUMPI DUP1 PUSH4 0xB11F061E EQ PUSH2 0xA0B JUMPI DUP1 PUSH4 0xB9746995 EQ PUSH2 0x302 JUMPI DUP1 PUSH4 0xE20C482F EQ PUSH2 0x1FE JUMPI PUSH4 0xE74B981B SUB PUSH2 0x11 JUMPI POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x158 PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x17E DUP3 DUP5 AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND SWAP2 DUP3 ISZERO PUSH2 0x1D4 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP2 OR PUSH1 0x1 SSTORE PUSH32 0xBF9A9534339A9D6B81696E05DCFB614B7DC518A31D48BE3CFB757988381FB323 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH32 0x768DC59800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x218 PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x23C DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP3 PUSH0 KECCAK256 SLOAD AND PUSH2 0x2D7 JUMPI DUP3 ISZERO PUSH2 0x2B1 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0xEF09FC346B7C2CAE78D9A37ED785840E7D3C6072022CD8C41C3B37A239B7FD1 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH32 0x31EC273600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP PUSH32 0x6FE47AF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x31D PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x24 SWAP1 DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP3 AND DUP1 DUP4 SUB PUSH2 0x1FA JUMPI PUSH2 0x34A PUSH2 0x1653 JUMP JUMPDEST SWAP3 PUSH2 0x353 PUSH2 0x19FD JUMP JUMPDEST PUSH2 0x361 DUP9 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST DUP1 SWAP6 DUP9 PUSH0 SWAP6 AND SWAP2 DUP3 PUSH2 0x99D JUMPI JUMPDEST DUP5 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 SWAP11 DUP12 DUP3 MSTORE ADDRESS DUP12 DUP4 ADD MSTORE PUSH1 0x20 SWAP6 DUP7 DUP4 DUP7 DUP2 DUP5 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x993 JUMPI PUSH0 SWAP4 PUSH2 0x964 JUMPI JUMPDEST POP DUP2 PUSH2 0x3BC PUSH2 0x178A JUMP JUMPDEST AND SWAP4 DUP5 EXTCODESIZE ISZERO PUSH2 0x1FA JUMPI DUP13 SWAP5 DUP10 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP5 DUP14 AND DUP1 SWAP8 DUP3 ADD MSTORE PUSH0 DUP2 DUP10 DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x95A JUMPI PUSH2 0x947 JUMPI JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x727 JUMPI DUP11 DUP7 DUP16 PUSH1 0x64 SWAP1 DUP4 DUP15 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xB53A70B200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE ADDRESS DUP14 DUP5 ADD MSTORE DUP9 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x93D JUMPI PUSH2 0x929 JUMPI JUMPDEST POP DUP13 SWAP14 DUP10 MLOAD SWAP14 DUP15 SWAP2 DUP3 MSTORE ADDRESS SWAP2 ADD MSTORE DUP8 DUP14 DUP8 DUP2 DUP6 GAS STATICCALL SWAP13 DUP14 ISZERO PUSH2 0x8AA JUMPI DUP11 SWAP14 PUSH2 0x8FA JUMPI JUMPDEST POP DUP4 DUP14 SUB SWAP4 DUP14 DUP6 GT PUSH2 0x8CF JUMPI DUP5 SWAP14 SUB PUSH2 0x4B7 JUMPI JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST DUP7 ISZERO PUSH2 0x8B4 JUMPI POP DUP9 SLOAD DUP3 AND SWAP3 DUP2 DUP5 SUB PUSH2 0x51D JUMPI POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x4F6 JUMPI POP PUSH2 0x4E3 SWAP4 POP PUSH2 0x1ABB JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x492 JUMP JUMPDEST DUP1 PUSH32 0xCA9E3A1E00000000000000000000000000000000000000000000000000000000 DUP7 SWAP3 MSTORE REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 SWAP8 SWAP11 SWAP5 SWAP7 SWAP9 DUP1 SWAP13 SWAP11 POP PUSH2 0x782 JUMPI JUMPDEST POP POP DUP9 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 DUP10 ADD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP4 DUP10 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP13 SWAP1 MSTORE SWAP2 SWAP3 SWAP2 DUP11 SWAP2 DUP15 SWAP2 PUSH2 0x5BC SWAP1 DUP6 SWAP1 PUSH1 0x40 ADD JUMPDEST SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 ADD DUP7 MSTORE DUP6 PUSH2 0x16D3 JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP3 DUP10 GAS CALL DUP13 MLOAD RETURNDATASIZE DUP3 PUSH2 0x764 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x72B JUMPI JUMPDEST POP POP DUP1 PUSH1 0x1 SLOAD AND SWAP3 DUP7 EXTCODESIZE ISZERO PUSH2 0x727 JUMPI DUP10 MLOAD SWAP5 PUSH32 0xDE557A3200000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP13 DUP7 ADD MSTORE AND SWAP7 DUP8 DUP6 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0xC4 DUP3 ADD MSTORE DUP7 DUP2 PUSH1 0xE4 DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x71D JUMPI DUP5 SWAP4 SWAP3 SWAP2 DUP9 SWAP2 PUSH2 0x6FE JUMPI JUMPDEST POP POP PUSH1 0x44 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS DUP13 DUP6 ADD MSTORE DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x6F5 JUMPI POP DUP4 SWAP3 PUSH2 0x6C7 JUMPI JUMPDEST POP POP PUSH2 0x6A2 JUMPI POP POP PUSH2 0x4E3 JUMP JUMPDEST PUSH32 0xC5BC8D5100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x6EE JUMPI JUMPDEST PUSH2 0x6DE DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD PUSH0 DUP1 PUSH2 0x695 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x6D4 JUMP JUMPDEST MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x70B SWAP2 SWAP3 SWAP4 SWAP5 POP PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x719 JUMPI SWAP1 DUP3 SWAP2 DUP7 PUSH0 PUSH2 0x64D JUMP JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP11 DUP1 REVERT JUMPDEST PUSH2 0x757 PUSH2 0x75D SWAP3 DUP13 MLOAD SWAP1 DUP12 DUP3 ADD MSTORE DUP10 DUP10 DUP3 ADD MSTORE DUP14 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x751 DUP2 PUSH2 0x16B7 JUMP JUMPDEST DUP7 PUSH2 0x1B19 JUMP JUMPDEST DUP5 PUSH2 0x1B19 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x5D4 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x77A JUMPI POP DUP3 DUP6 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x5CC JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x773 JUMP JUMPDEST DUP11 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP13 SWAP12 SWAP11 SWAP10 POP SWAP4 POP DUP8 DUP2 DUP13 DUP2 DUP16 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8AA JUMPI DUP9 SWAP2 DUP4 SWAP2 DUP13 SWAP2 PUSH2 0x86B JUMPI JUMPDEST POP AND SWAP4 DUP10 MLOAD SWAP13 DUP14 SWAP2 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP14 DUP4 ADD MSTORE ADDRESS DUP9 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE DUP2 DUP13 GAS SWAP3 PUSH1 0x64 SWAP4 CALL SWAP11 DUP12 ISZERO PUSH2 0x861 JUMPI SWAP9 DUP1 SWAP11 SWAP12 DUP10 SWAP11 DUP3 SWAP2 PUSH2 0x82C JUMPI JUMPDEST POP SWAP9 POP DUP6 SWAP1 POP PUSH2 0x590 PUSH2 0x530 JUMP JUMPDEST SWAP10 POP POP POP DUP7 DUP9 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x85A JUMPI JUMPDEST PUSH2 0x845 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI SWAP7 MLOAD DUP9 SWAP8 SWAP1 DUP11 SWAP1 DUP9 PUSH2 0x81E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x83B JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP3 DUP1 SWAP3 POP DUP4 SWAP2 POP RETURNDATASIZE DUP4 GT PUSH2 0x8A3 JUMPI JUMPDEST PUSH2 0x884 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x89F JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x89F JUMPI DUP2 DUP9 SWAP2 PUSH0 PUSH2 0x7C8 JUMP JUMPDEST DUP10 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x87A JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP13 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP11 POP POP POP SWAP9 POP POP POP POP POP POP POP PUSH2 0x8CA SWAP4 POP PUSH2 0x1ABB JUMP JUMPDEST PUSH2 0x4E3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP12 MSTORE PUSH1 0x11 DUP16 MSTORE DUP7 DUP12 REVERT JUMPDEST SWAP1 SWAP13 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x922 JUMPI JUMPDEST PUSH2 0x912 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP12 PUSH0 PUSH2 0x47E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x908 JUMP JUMPDEST PUSH2 0x933 DUP12 SWAP2 PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x89F JUMPI PUSH0 PUSH2 0x45B JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE DUP14 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x952 SWAP2 SWAP12 POP PUSH2 0x1676 JUMP JUMPDEST PUSH0 SWAP10 PUSH0 PUSH2 0x407 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 POP DUP7 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x98C JUMPI JUMPDEST PUSH2 0x97C DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x3B2 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x972 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP6 PUSH0 KECCAK256 SLOAD AND PUSH0 EQ PUSH2 0x9E1 JUMPI DUP10 PUSH0 SLOAD AND PUSH2 0x36E JUMPI DUP9 PUSH32 0x8562EB4500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 DUP8 PUSH32 0x38553F6C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0xA25 PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0xA49 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP3 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0xAB6 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH32 0xED3EA501D1A23F23A7DC56C2D33E1E5A6A97694C707EF67B1E0159F239746BF PUSH0 DUP1 LOG2 STOP JUMPDEST SWAP1 POP PUSH32 0xBCA5AB3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI DUP1 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP6 GT PUSH2 0x1FA JUMPI CALLDATASIZE PUSH1 0x23 DUP7 ADD SLT ISZERO PUSH2 0x1FA JUMPI DUP5 DUP4 ADD CALLDATALOAD SWAP4 PUSH1 0x24 SWAP2 DUP6 GT PUSH2 0xCBB JUMPI PUSH1 0x5 SWAP6 DUP6 PUSH1 0x5 SHL DUP5 MLOAD SWAP7 PUSH2 0xB38 DUP5 DUP4 ADD DUP10 PUSH2 0x16D3 JUMP JUMPDEST DUP8 MSTORE PUSH1 0x24 DUP4 DUP9 ADD SWAP2 DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x1FA JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xC8F JUMPI POP POP POP PUSH2 0xB62 PUSH2 0x19FD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 PUSH1 0x1 SWAP6 DUP1 PUSH1 0x1 SLOAD AND CALLER SUB PUSH2 0xC68 JUMPI PUSH0 SWAP8 DUP8 JUMPDEST PUSH2 0xBB3 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST DUP3 MLOAD DUP10 LT ISZERO PUSH2 0xC63 JUMPI DUP2 DUP5 DUP11 DUP4 SHL DUP6 ADD ADD MLOAD AND SWAP9 DUP7 MLOAD SWAP10 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP12 MSTORE ADDRESS DUP10 DUP13 ADD MSTORE DUP6 DUP12 DUP9 DUP2 DUP5 GAS STATICCALL DUP1 ISZERO PUSH2 0x993 JUMPI DUP11 SWAP12 PUSH0 SWAP2 PUSH2 0xC2E JUMPI JUMPDEST POP SWAP1 DUP2 DUP12 SWAP4 SWAP3 PUSH2 0xC1C JUMPI JUMPDEST POP POP ADD SWAP9 PUSH2 0xB8A JUMP JUMPDEST PUSH2 0xC27 SWAP2 CALLER SWAP1 PUSH2 0x1A52 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xC13 JUMP JUMPDEST DUP1 SWAP4 SWAP3 SWAP12 POP DUP8 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xC5C JUMPI JUMPDEST PUSH2 0xC49 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI SWAP1 MLOAD DUP11 SWAP10 SWAP1 DUP11 PUSH2 0xC08 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xC3F JUMP JUMPDEST PUSH2 0x492 JUMP JUMPDEST DUP6 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1FA JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xB50 JUMP JUMPDEST PUSH1 0x41 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xDA6 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0xD77 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xD98 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xD9F JUMPI JUMPDEST PUSH2 0xD90 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1846 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0xD6F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xD86 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xDE2 PUSH2 0x1630 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0xE63 PUSH2 0x1630 JUMP JUMPDEST SWAP1 PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1FA JUMPI PUSH2 0xE90 PUSH2 0x1653 JUMP JUMPDEST SWAP5 PUSH2 0xE99 PUSH2 0x19FD JUMP JUMPDEST PUSH2 0xEA7 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST DUP2 PUSH0 SWAP7 AND SWAP2 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0x1446 JUMPI JUMPDEST DUP7 MLOAD SWAP2 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 SWAP7 DUP8 DUP5 MSTORE ADDRESS DUP12 DUP6 ADD MSTORE PUSH1 0x20 SWAP7 DUP8 DUP6 DUP8 DUP2 DUP8 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x143C JUMPI PUSH0 SWAP6 PUSH2 0x140D JUMPI JUMPDEST POP DUP3 PUSH2 0xF05 PUSH2 0x178A JUMP JUMPDEST AND SWAP5 DUP6 EXTCODESIZE ISZERO PUSH2 0x1FA JUMPI DUP13 SWAP6 DUP12 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 DUP6 AND DUP1 SWAP9 DUP3 ADD MSTORE PUSH0 DUP2 DUP11 DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x1403 JUMPI PUSH2 0x13F0 JUMPI JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x13EC JUMPI DUP13 DUP8 DUP16 PUSH1 0x64 SWAP1 DUP16 DUP5 SWAP1 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xB53A70B200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE DUP14 ADDRESS SWAP1 DUP5 ADD MSTORE DUP12 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x13E2 JUMPI SWAP1 DUP14 SWAP2 PUSH2 0x13CA JUMPI JUMPDEST POP POP DUP11 MLOAD SWAP10 DUP11 MSTORE ADDRESS DUP14 DUP12 ADD MSTORE DUP9 DUP11 DUP9 DUP2 DUP9 GAS STATICCALL SWAP10 DUP11 ISZERO PUSH2 0x13C0 JUMPI DUP13 SWAP11 PUSH2 0x1391 JUMPI JUMPDEST POP DUP1 DUP11 SUB SWAP10 DUP1 DUP12 GT PUSH2 0x1365 JUMPI SUB PUSH2 0x1000 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST ISZERO PUSH2 0x134C JUMPI POP DUP9 SLOAD DUP2 AND SWAP1 DUP3 DUP3 SUB PUSH2 0x1039 JUMPI DUP11 DUP11 PUSH32 0xCA9E3A1E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP9 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP8 DUP2 DUP14 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x93D JUMPI DUP9 SWAP2 DUP4 SWAP2 DUP14 SWAP2 PUSH2 0x1311 JUMPI JUMPDEST POP AND SWAP9 PUSH1 0x64 DUP14 DUP14 DUP14 MLOAD SWAP8 DUP9 SWAP5 DUP6 SWAP4 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE ADDRESS DUP12 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x8AA JUMPI DUP11 SWAP4 PUSH2 0x12E2 JUMPI JUMPDEST POP DUP5 DUP10 MLOAD DUP9 DUP13 DUP12 DUP11 PUSH2 0x1155 DUP6 PUSH2 0x1129 DUP12 DUP8 DUP4 ADD SWAP5 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP11 DUP12 DUP8 MSTORE DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 ADD DUP8 MSTORE DUP7 PUSH2 0x16D3 JUMP JUMPDEST DUP3 DUP6 MLOAD SWAP3 GAS CALL DUP13 MLOAD RETURNDATASIZE DUP3 PUSH2 0x12C6 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x128D JUMPI JUMPDEST POP POP PUSH1 0x1 SLOAD AND SWAP2 DUP6 EXTCODESIZE ISZERO PUSH2 0x89F JUMPI DUP9 MLOAD SWAP4 PUSH32 0xDE557A3200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 DUP6 ADD MSTORE DUP8 DUP6 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0xC4 DUP3 ADD MSTORE DUP7 DUP2 PUSH1 0xE4 DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x71D JUMPI DUP5 SWAP4 SWAP3 SWAP2 DUP9 SWAP2 PUSH2 0x1272 JUMPI JUMPDEST POP POP PUSH1 0x44 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS DUP13 DUP6 ADD MSTORE DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x6F5 JUMPI POP DUP4 SWAP3 PUSH2 0x1244 JUMPI JUMPDEST POP POP PUSH2 0x6A2 JUMPI POP POP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x492 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x126B JUMPI JUMPDEST PUSH2 0x125B DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD PUSH0 DUP1 PUSH2 0x122A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1251 JUMP JUMPDEST PUSH2 0x127F SWAP2 SWAP3 SWAP4 SWAP5 POP PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x719 JUMPI SWAP1 DUP3 SWAP2 DUP7 PUSH0 PUSH2 0x11E2 JUMP JUMPDEST PUSH2 0x12B9 PUSH2 0x12BF SWAP3 DUP13 MLOAD SWAP1 DUP12 DUP3 ADD MSTORE DUP10 DUP10 DUP3 ADD MSTORE DUP14 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x12B3 DUP2 PUSH2 0x16B7 JUMP JUMPDEST DUP12 PUSH2 0x1B19 JUMP JUMPDEST DUP10 PUSH2 0x1B19 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x116C JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x12DA JUMPI POP DUP10 EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x1164 JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x12D3 JUMP JUMPDEST SWAP1 SWAP3 POP DUP7 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x130A JUMPI JUMPDEST PUSH2 0x12FA DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x10C6 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x12F0 JUMP JUMPDEST SWAP3 DUP1 SWAP3 POP DUP4 SWAP2 POP RETURNDATASIZE DUP4 GT PUSH2 0x1345 JUMPI JUMPDEST PUSH2 0x132A DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x727 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x727 JUMPI DUP2 DUP9 SWAP2 PUSH0 PUSH2 0x1077 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1320 JUMP JUMPDEST SWAP7 SWAP9 POP POP SWAP6 POP POP POP POP POP PUSH2 0x1360 SWAP4 POP PUSH2 0x1ABB JUMP JUMPDEST PUSH2 0x1233 JUMP JUMPDEST POP DUP7 DUP13 PUSH1 0x11 DUP16 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 SWAP10 POP DUP9 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x13B9 JUMPI JUMPDEST PUSH2 0x13A9 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP9 PUSH0 PUSH2 0xFCA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x139F JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE DUP15 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x13D3 SWAP1 PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x13DE JUMPI DUP12 PUSH0 PUSH2 0xFA9 JUMP JUMPDEST DUP12 DUP1 REVERT JUMPDEST DUP13 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP13 DUP1 REVERT JUMPDEST PUSH2 0x13FB SWAP2 SWAP14 POP PUSH2 0x1676 JUMP JUMPDEST PUSH0 SWAP12 PUSH0 PUSH2 0xF50 JUMP JUMPDEST DUP14 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1435 JUMPI JUMPDEST PUSH2 0x1425 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP4 PUSH0 PUSH2 0xEFB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x141B JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP8 PUSH0 KECCAK256 SLOAD AND PUSH0 EQ PUSH2 0x148A JUMPI DUP2 PUSH0 SLOAD AND PUSH2 0xEB6 JUMPI DUP9 PUSH32 0x8562EB4500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 DUP5 DUP11 PUSH32 0x38553F6C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x14E5 PUSH2 0x178A JUMP JUMPDEST SWAP2 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x1FA JUMPI PUSH2 0x1536 PUSH1 0x20 SWAP3 PUSH2 0x1714 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x15BD PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x15E1 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH0 SLOAD AND OR PUSH0 SSTORE PUSH32 0x873950C2AC59C570001B99D815FFB260542DF229D07132922E2E6F9941FD3DA6 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1FA JUMPI JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1FA JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x183B JUMPI PUSH0 SWAP3 PUSH2 0x1802 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1833 JUMPI JUMPDEST DUP2 PUSH2 0x181E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1FA JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1811 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x1FA JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1FA JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND CALLER SUB PUSH2 0x1895 JUMPI POP POP JUMP JUMPDEST PUSH2 0x18C1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x1714 JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x183B JUMPI DUP5 PUSH1 0x64 SWAP3 DUP8 SWAP6 PUSH0 SWAP2 PUSH2 0x19E0 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x4 DUP7 ADD MSTORE CALLER PUSH1 0x24 DUP7 ADD MSTORE AND PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x183B JUMPI PUSH0 SWAP3 PUSH2 0x19A9 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x1981 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x19D9 JUMPI JUMPDEST PUSH2 0x19C0 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x1FA JUMPI PUSH0 DUP1 PUSH2 0x1978 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x19B6 JUMP JUMPDEST PUSH2 0x19F7 SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0xD9F JUMPI PUSH2 0xD90 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST PUSH0 PUSH2 0x192A JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x1A2A JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 MSTORE PUSH2 0x1AB9 SWAP2 PUSH2 0x1AB4 PUSH1 0x64 DUP4 PUSH2 0x16D3 JUMP JUMPDEST PUSH2 0x1B19 JUMP JUMPDEST JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x40 PUSH32 0xD6B9382EC1786C32610E376E8EE8F2F16ABEDA4ACE3B6276AC958193C75BBBC8 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 DUP2 PUSH1 0x1 SLOAD AND PUSH2 0x1B08 DUP8 DUP3 DUP5 PUSH2 0x1A52 JUMP JUMPDEST DUP5 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE AND SWAP5 AND SWAP3 LOG3 JUMP JUMPDEST SWAP1 PUSH0 PUSH1 0x20 SWAP2 DUP3 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL ISZERO PUSH2 0x183B JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x1B97 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x1B55 JUMPI POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x1B4E JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SLOAD DUP1 SWAP8 DUP14 0xF6 0x23 0xC8 DIV 0xA8 0xB8 DUP7 CODESIZE 0x4F PUSH8 0xD95375C26DC77BED DUP16 PUSH31 0xD539D94969B947C064736F6C634300081B0033000000000000000000000000 ","sourceMap":"1713:10354:88:-:0;;;;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;-1:-1:-1;;;;;1713:10354:88;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1713:10354:88;;;;;;;;;;;;;;;;;;;;;922:4:47;1347:46:33;;943:28:45;939:79;;1028:14;;9350:26:88;;9346:85;;1713:10354;;;-1:-1:-1;;;;;;1713:10354:88;;;;;;;;9485:29;-1:-1:-1;;9485:29:88;1713:10354;;;;;;1347:46:33;1713:10354:88;;;;;1028:14:45;1713:10354:88;;;;;;;;;;;;;;;;;;;;;9346:85;9399:21;;;-1:-1:-1;9399:21:88;;-1:-1:-1;9399:21:88;939:79:45;994:13;;;-1:-1:-1;994:13:45;;-1:-1:-1;994:13:45;1713:10354:88;-1:-1:-1;1713:10354:88;;;;;;-1:-1:-1;1713:10354:88;;;;;-1:-1:-1;1713:10354:88"},"deployedBytecode":{"functionDebugData":{"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":6214,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC20":{"entryPoint":5680,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_contract_IProtocolFeeBurner":{"entryPoint":5715,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":5843,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_22929":{"entryPoint":5815,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_8829":{"entryPoint":5750,"id":null,"parameterSlots":1,"returnSlots":0},"fun_callOptionalReturn":{"entryPoint":6937,"id":11024,"parameterSlots":2,"returnSlots":0},"fun_ensureAuthenticatedByRole":{"entryPoint":6258,"id":7534,"parameterSlots":2,"returnSlots":0},"fun_getActionId":{"entryPoint":5908,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_getProtocolFeeController":{"entryPoint":6026,"id":22743,"parameterSlots":0,"returnSlots":1},"fun_nonReentrantBefore":{"entryPoint":6653,"id":6986,"parameterSlots":0,"returnSlots":0},"fun_safeTransfer":{"entryPoint":6738,"id":10647,"parameterSlots":3,"returnSlots":0},"fun_transferFeeToken":{"entryPoint":6843,"id":22730,"parameterSlots":3,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":5951}],"7358":[{"length":32,"start":3387},{"length":32,"start":3621},{"length":32,"start":6093},{"length":32,"start":6388}]},"linkReferences":{},"object":"604060808152600490813610156100a0575b361561007957346100795790602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600f60248201527f4e6f7420696d706c656d656e74656400000000000000000000000000000000006044820152fd5b507ff2238896000000000000000000000000000000000000000000000000000000005f525ffd5b5f3560e01c80631b66cb00146115a45780634ccb20c01461157057806380db0d511461153d578063851c1bb3146114ed57806385f2dbd4146114b457806388f6d2a414610e495780638d928af814610df95780639c5cee9b14610db0578063aaabadc514610ce7578063b0edcc5314610ae1578063b11f061e14610a0b578063b974699514610302578063e20c482f146101fe5763e74b981b036100115750346101fa5760206003193601126101fa57610158611630565b6001549073ffffffffffffffffffffffffffffffffffffffff9061017e82841630611872565b169182156101d457507fffffffffffffffffffffffff00000000000000000000000000000000000000001681176001557fbf9a9534339a9d6b81696e05dcfb614b7dc518a31d48be3cfb757988381fb3235f80a2005b7f768dc598000000000000000000000000000000000000000000000000000000005f525ffd5b5f80fd5b50346101fa5760206003193601126101fa57610218611630565b73ffffffffffffffffffffffffffffffffffffffff9061023c826001541630611872565b1691825f52600260205260ff825f2054166102d75782156102b15750815f5260026020525f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f0ef09fc346b7c2cae78d9a37ed785840e7d3c6072022cd8c41c3b37a239b7fd15f80a2005b7f31ec2736000000000000000000000000000000000000000000000000000000005f525ffd5b90507f6fe47af6000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101fa5760a06003193601126101fa5761031d611630565b602490813573ffffffffffffffffffffffffffffffffffffffff948582168083036101fa5761034a611653565b926103536119fd565b610361886001541630611872565b8095885f9516918261099d575b84517f70a08231000000000000000000000000000000000000000000000000000000009a8b8252308b83015260209586838681845afa928315610993575f93610964575b50816103bc61178a565b1693843b156101fa578c9489517f8f4ab9ca000000000000000000000000000000000000000000000000000000008152848d1680978201525f81898183865af1801561095a57610947575b50803b15610727578a868f606490838e5195869485937fb53a70b2000000000000000000000000000000000000000000000000000000008552840152308d8401528860448401525af1801561093d57610929575b508c9d89519d8e91825230910152878d8781855afa9c8d156108aa578a9d6108fa575b50838d03938d85116108cf57849d036104b7575b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b86156108b45750885482169281840361051d57505050505050505050806104f657506104e39350611abb565b5f80808080808080808080808080610492565b807fca9e3a1e00000000000000000000000000000000000000000000000000000000869252fd5b9091929395979a949698809c9a50610782575b505088517f095ea7b30000000000000000000000000000000000000000000000000000000081890181815273ffffffffffffffffffffffffffffffffffffffff8916838901908152602081018c90529192918a918e916105bc9085906040015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018652856116d3565b83519082895af18c513d82610764575b50501561072b575b5050806001541692863b15610727578951947fde557a320000000000000000000000000000000000000000000000000000000086528c8601521696878585015260448401526064830152604435608483015260a482015260643560c4820152868160e48183875af1801561071d578493929188916106fe575b5050604490865195869384927fdd62ed3e000000000000000000000000000000000000000000000000000000008452308c8501528301525afa9283156106f5575083926106c7575b50506106a25750506104e3565b7fc5bc8d51000000000000000000000000000000000000000000000000000000008152fd5b90809250813d83116106ee575b6106de81836116d3565b810103126101fa57515f80610695565b503d6106d4565b513d85823e3d90fd5b61070b9192939450611676565b61071957908291865f61064d565b8580fd5b86513d89823e3d90fd5b8a80fd5b61075761075d928c51908b82015289898201528d604482015260448152610751816116b7565b86611b19565b84611b19565b5f806105d4565b90915061077a57508285163b15155b5f806105cc565b600114610773565b8a517f38d52e0f000000000000000000000000000000000000000000000000000000008152919c9b9a9950935087818c818f5afa9081156108aa57889183918c9161086b575b50169389519c8d917fba0876520000000000000000000000000000000000000000000000000000000083528d8301523088830152306044830152818c5a92606493f19a8b156108615798809a9b899a829161082c575b509850859050610590610530565b995050508688813d831161085a575b61084581836116d3565b810103126101fa5796518897908a908861081e565b503d61083b565b88513d8b823e3d90fd5b928092508391503d83116108a3575b61088481836116d3565b8101031261089f5751818116810361089f578188915f6107c8565b8980fd5b503d61087a565b89513d8c823e3d90fd5b9a50505098505050505050506108ca9350611abb565b6104e3565b7f4e487b71000000000000000000000000000000000000000000000000000000008b5260118f52868bfd5b909c508781813d8311610922575b61091281836116d3565b810103126101fa57519b5f61047e565b503d610908565b6109338b91611676565b61089f575f61045b565b8a513d8d823e3d90fd5b610952919b50611676565b5f995f610407565b8b513d5f823e3d90fd5b9092508681813d831161098c575b61097c81836116d3565b810103126101fa5751915f6103b2565b503d610972565b88513d5f823e3d90fd5b825f52600260205260ff855f2054165f146109e157895f541661036e57887f8562eb45000000000000000000000000000000000000000000000000000000005f525ffd5b5090877f38553f6c000000000000000000000000000000000000000000000000000000005f52525ffd5b50346101fa5760206003193601126101fa57610a25611630565b73ffffffffffffffffffffffffffffffffffffffff90610a49826001541630611872565b1691825f52600260205260ff825f20541615610ab65750815f5260026020525f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690557f0ed3ea501d1a23f23a7dc56c2d33e1e5a6a97694c707ef67b1e0159f239746bf5f80a2005b90507fbca5ab34000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101fa57602090816003193601126101fa5780359267ffffffffffffffff8085116101fa57366023860112156101fa5784830135936024918511610cbb576005958560051b845196610b38848301896116d3565b8752602483880191830101913683116101fa57602401905b828210610c8f57505050610b626119fd565b73ffffffffffffffffffffffffffffffffffffffff9460019580600154163303610c68575f97875b610bb3575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b8251891015610c635781848a831b8501015116988651997f70a08231000000000000000000000000000000000000000000000000000000008b5230898c0152858b8881845afa8015610993578a9b5f91610c2e575b5090818b9392610c1c575b50500198610b8a565b610c27913390611a52565b5f80610c13565b8093929b50878092503d8311610c5c575b610c4981836116d3565b810103126101fa5790518a99908a610c08565b503d610c3f565b610492565b857f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b813573ffffffffffffffffffffffffffffffffffffffff811681036101fa578152908301908301610b50565b6041847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101fa575f6003193601126101fa5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa918215610da657926020935f93610d77575b505191168152f35b610d98919350843d8611610d9f575b610d9081836116d3565b810190611846565b915f610d6f565b503d610d86565b83513d5f823e3d90fd5b50346101fa5760206003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff610de2611630565b165f526002825260ff815f20541690519015158152f35b50346101fa575f6003193601126101fa576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346101fa5760a06003193601126101fa57610e63611630565b90602491823573ffffffffffffffffffffffffffffffffffffffff8082168092036101fa57610e90611653565b94610e996119fd565b610ea7826001541630611872565b815f9616918215159384611446575b8651917f70a082310000000000000000000000000000000000000000000000000000000096878452308b85015260209687858781875afa94851561143c575f9561140d575b5082610f0561178a565b1694853b156101fa578c958b517f8f4ab9ca00000000000000000000000000000000000000000000000000000000815285851680988201525f818a8183865af18015611403576113f0575b50803b156113ec578c878f6064908f84905195869485937fb53a70b20000000000000000000000000000000000000000000000000000000085528401528d30908401528b60448401525af180156113e257908d916113ca575b50508a51998a52308d8b0152888a8881885afa998a156113c0578c9a611391575b50808a0399808b116113655703611000575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b1561134c57508854811690828203611039578a8a7fca9e3a1e000000000000000000000000000000000000000000000000000000008152fd5b88517f38d52e0f00000000000000000000000000000000000000000000000000000000815287818d81875afa90811561093d57889183918d91611311575b50169860648d8d8d5197889485937fba087652000000000000000000000000000000000000000000000000000000008552840152308b8401523060448401525af19283156108aa578a936112e2575b50848951888c8b8a611155856111298b878301947f095ea7b3000000000000000000000000000000000000000000000000000000009a8b875284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866116d3565b828551925af18c513d826112c6575b50501561128d575b50506001541691853b1561089f578851937fde557a320000000000000000000000000000000000000000000000000000000085528b850152878585015260448401526064830152604435608483015260a482015260643560c4820152868160e48183875af1801561071d57849392918891611272575b5050604490865195869384927fdd62ed3e000000000000000000000000000000000000000000000000000000008452308c8501528301525afa9283156106f557508392611244575b50506106a25750505b5f8080808080808080808080610492565b90809250813d831161126b575b61125b81836116d3565b810103126101fa57515f8061122a565b503d611251565b61127f9192939450611676565b61071957908291865f6111e2565b6112b96112bf928c51908b82015289898201528d6044820152604481526112b3816116b7565b8b611b19565b89611b19565b5f8061116c565b9091506112da5750893b15155b5f80611164565b6001146112d3565b9092508681813d831161130a575b6112fa81836116d3565b810103126101fa5751915f6110c6565b503d6112f0565b928092508391503d8311611345575b61132a81836116d3565b8101031261072757518181168103610727578188915f611077565b503d611320565b969850509550505050506113609350611abb565b611233565b50868c60118f7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b9099508881813d83116113b9575b6113a981836116d3565b810103126101fa5751985f610fca565b503d61139f565b8b513d8e823e3d90fd5b6113d390611676565b6113de578b5f610fa9565b8b80fd5b8c513d8f823e3d90fd5b8c80fd5b6113fb919d50611676565b5f9b5f610f50565b8d513d5f823e3d90fd5b9094508781813d8311611435575b61142581836116d3565b810103126101fa5751935f610efb565b503d61141b565b8a513d5f823e3d90fd5b835f52600260205260ff875f2054165f1461148a57815f5416610eb657887f8562eb45000000000000000000000000000000000000000000000000000000005f525ffd5b82848a7f38553f6c000000000000000000000000000000000000000000000000000000005f52525ffd5b50346101fa575f6003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff6114e561178a565b915191168152f35b5090346101fa5760206003193601126101fa5735907fffffffff00000000000000000000000000000000000000000000000000000000821682036101fa57611536602092611714565b9051908152f35b50346101fa575f6003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50346101fa575f6003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b346101fa5760206003193601126101fa576115bd611630565b73ffffffffffffffffffffffffffffffffffffffff906115e1826001541630611872565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f557f873950c2ac59c570001b99d815ffb260542df229d07132922e2e6f9941fd3da65f80a2005b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101fa57565b6084359073ffffffffffffffffffffffffffffffffffffffff821682036101fa57565b67ffffffffffffffff811161168a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761168a57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761168a57604052565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff82111761168a5760405251902090565b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561183b575f9261180257505090565b9091506020813d602011611833575b8161181e602093836116d3565b810103126101fa575190811681036101fa5790565b3d9150611811565b6040513d5f823e3d90fd5b908160209103126101fa575173ffffffffffffffffffffffffffffffffffffffff811681036101fa5790565b9073ffffffffffffffffffffffffffffffffffffffff8091163303611895575050565b6118c17fffffffff000000000000000000000000000000000000000000000000000000005f3516611714565b91604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa90811561183b578460649287955f916119e0575b5060405196879586947f9be2a8840000000000000000000000000000000000000000000000000000000086526004860152336024860152166044840152165afa91821561183b575f926119a9575b50501561198157565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116119d9575b6119c081836116d3565b810103126101fa575180151581036101fa575f80611978565b503d6119b6565b6119f79150863d8811610d9f57610d9081836116d3565b5f61192a565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c611a2a576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff929092166024830152604480830193909352918152611ab991611ab46064836116d3565b611b19565b565b919060407fd6b9382ec1786c32610e376e8ee8f2f16abeda4ace3b6276ac958193c75bbbc89173ffffffffffffffffffffffffffffffffffffffff80918160015416611b08878284611a52565b8451968752602087015216941692a3565b905f602091828151910182855af11561183b575f513d611b97575073ffffffffffffffffffffffffffffffffffffffff81163b155b611b555750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415611b4e56fea26469706673582212205480978df623c804a8b886384f67d95375c26dc77bed8f7ed539d94969b947c064736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0xA0 JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x79 JUMPI CALLVALUE PUSH2 0x79 JUMPI SWAP1 PUSH1 0x20 PUSH1 0x64 SWAP3 MLOAD SWAP2 PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420696D706C656D656E7465640000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST POP PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1B66CB00 EQ PUSH2 0x15A4 JUMPI DUP1 PUSH4 0x4CCB20C0 EQ PUSH2 0x1570 JUMPI DUP1 PUSH4 0x80DB0D51 EQ PUSH2 0x153D JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x14ED JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x14B4 JUMPI DUP1 PUSH4 0x88F6D2A4 EQ PUSH2 0xE49 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0xDF9 JUMPI DUP1 PUSH4 0x9C5CEE9B EQ PUSH2 0xDB0 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB0EDCC53 EQ PUSH2 0xAE1 JUMPI DUP1 PUSH4 0xB11F061E EQ PUSH2 0xA0B JUMPI DUP1 PUSH4 0xB9746995 EQ PUSH2 0x302 JUMPI DUP1 PUSH4 0xE20C482F EQ PUSH2 0x1FE JUMPI PUSH4 0xE74B981B SUB PUSH2 0x11 JUMPI POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x158 PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x17E DUP3 DUP5 AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND SWAP2 DUP3 ISZERO PUSH2 0x1D4 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP2 OR PUSH1 0x1 SSTORE PUSH32 0xBF9A9534339A9D6B81696E05DCFB614B7DC518A31D48BE3CFB757988381FB323 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH32 0x768DC59800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x218 PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x23C DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP3 PUSH0 KECCAK256 SLOAD AND PUSH2 0x2D7 JUMPI DUP3 ISZERO PUSH2 0x2B1 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0xEF09FC346B7C2CAE78D9A37ED785840E7D3C6072022CD8C41C3B37A239B7FD1 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH32 0x31EC273600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP PUSH32 0x6FE47AF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x31D PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x24 SWAP1 DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP3 AND DUP1 DUP4 SUB PUSH2 0x1FA JUMPI PUSH2 0x34A PUSH2 0x1653 JUMP JUMPDEST SWAP3 PUSH2 0x353 PUSH2 0x19FD JUMP JUMPDEST PUSH2 0x361 DUP9 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST DUP1 SWAP6 DUP9 PUSH0 SWAP6 AND SWAP2 DUP3 PUSH2 0x99D JUMPI JUMPDEST DUP5 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 SWAP11 DUP12 DUP3 MSTORE ADDRESS DUP12 DUP4 ADD MSTORE PUSH1 0x20 SWAP6 DUP7 DUP4 DUP7 DUP2 DUP5 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x993 JUMPI PUSH0 SWAP4 PUSH2 0x964 JUMPI JUMPDEST POP DUP2 PUSH2 0x3BC PUSH2 0x178A JUMP JUMPDEST AND SWAP4 DUP5 EXTCODESIZE ISZERO PUSH2 0x1FA JUMPI DUP13 SWAP5 DUP10 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP5 DUP14 AND DUP1 SWAP8 DUP3 ADD MSTORE PUSH0 DUP2 DUP10 DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x95A JUMPI PUSH2 0x947 JUMPI JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x727 JUMPI DUP11 DUP7 DUP16 PUSH1 0x64 SWAP1 DUP4 DUP15 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xB53A70B200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE ADDRESS DUP14 DUP5 ADD MSTORE DUP9 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x93D JUMPI PUSH2 0x929 JUMPI JUMPDEST POP DUP13 SWAP14 DUP10 MLOAD SWAP14 DUP15 SWAP2 DUP3 MSTORE ADDRESS SWAP2 ADD MSTORE DUP8 DUP14 DUP8 DUP2 DUP6 GAS STATICCALL SWAP13 DUP14 ISZERO PUSH2 0x8AA JUMPI DUP11 SWAP14 PUSH2 0x8FA JUMPI JUMPDEST POP DUP4 DUP14 SUB SWAP4 DUP14 DUP6 GT PUSH2 0x8CF JUMPI DUP5 SWAP14 SUB PUSH2 0x4B7 JUMPI JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST DUP7 ISZERO PUSH2 0x8B4 JUMPI POP DUP9 SLOAD DUP3 AND SWAP3 DUP2 DUP5 SUB PUSH2 0x51D JUMPI POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x4F6 JUMPI POP PUSH2 0x4E3 SWAP4 POP PUSH2 0x1ABB JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x492 JUMP JUMPDEST DUP1 PUSH32 0xCA9E3A1E00000000000000000000000000000000000000000000000000000000 DUP7 SWAP3 MSTORE REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 SWAP8 SWAP11 SWAP5 SWAP7 SWAP9 DUP1 SWAP13 SWAP11 POP PUSH2 0x782 JUMPI JUMPDEST POP POP DUP9 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 DUP10 ADD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP4 DUP10 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP13 SWAP1 MSTORE SWAP2 SWAP3 SWAP2 DUP11 SWAP2 DUP15 SWAP2 PUSH2 0x5BC SWAP1 DUP6 SWAP1 PUSH1 0x40 ADD JUMPDEST SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 ADD DUP7 MSTORE DUP6 PUSH2 0x16D3 JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP3 DUP10 GAS CALL DUP13 MLOAD RETURNDATASIZE DUP3 PUSH2 0x764 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x72B JUMPI JUMPDEST POP POP DUP1 PUSH1 0x1 SLOAD AND SWAP3 DUP7 EXTCODESIZE ISZERO PUSH2 0x727 JUMPI DUP10 MLOAD SWAP5 PUSH32 0xDE557A3200000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP13 DUP7 ADD MSTORE AND SWAP7 DUP8 DUP6 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0xC4 DUP3 ADD MSTORE DUP7 DUP2 PUSH1 0xE4 DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x71D JUMPI DUP5 SWAP4 SWAP3 SWAP2 DUP9 SWAP2 PUSH2 0x6FE JUMPI JUMPDEST POP POP PUSH1 0x44 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS DUP13 DUP6 ADD MSTORE DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x6F5 JUMPI POP DUP4 SWAP3 PUSH2 0x6C7 JUMPI JUMPDEST POP POP PUSH2 0x6A2 JUMPI POP POP PUSH2 0x4E3 JUMP JUMPDEST PUSH32 0xC5BC8D5100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x6EE JUMPI JUMPDEST PUSH2 0x6DE DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD PUSH0 DUP1 PUSH2 0x695 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x6D4 JUMP JUMPDEST MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x70B SWAP2 SWAP3 SWAP4 SWAP5 POP PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x719 JUMPI SWAP1 DUP3 SWAP2 DUP7 PUSH0 PUSH2 0x64D JUMP JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP11 DUP1 REVERT JUMPDEST PUSH2 0x757 PUSH2 0x75D SWAP3 DUP13 MLOAD SWAP1 DUP12 DUP3 ADD MSTORE DUP10 DUP10 DUP3 ADD MSTORE DUP14 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x751 DUP2 PUSH2 0x16B7 JUMP JUMPDEST DUP7 PUSH2 0x1B19 JUMP JUMPDEST DUP5 PUSH2 0x1B19 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x5D4 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x77A JUMPI POP DUP3 DUP6 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x5CC JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x773 JUMP JUMPDEST DUP11 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP13 SWAP12 SWAP11 SWAP10 POP SWAP4 POP DUP8 DUP2 DUP13 DUP2 DUP16 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8AA JUMPI DUP9 SWAP2 DUP4 SWAP2 DUP13 SWAP2 PUSH2 0x86B JUMPI JUMPDEST POP AND SWAP4 DUP10 MLOAD SWAP13 DUP14 SWAP2 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP14 DUP4 ADD MSTORE ADDRESS DUP9 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE DUP2 DUP13 GAS SWAP3 PUSH1 0x64 SWAP4 CALL SWAP11 DUP12 ISZERO PUSH2 0x861 JUMPI SWAP9 DUP1 SWAP11 SWAP12 DUP10 SWAP11 DUP3 SWAP2 PUSH2 0x82C JUMPI JUMPDEST POP SWAP9 POP DUP6 SWAP1 POP PUSH2 0x590 PUSH2 0x530 JUMP JUMPDEST SWAP10 POP POP POP DUP7 DUP9 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x85A JUMPI JUMPDEST PUSH2 0x845 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI SWAP7 MLOAD DUP9 SWAP8 SWAP1 DUP11 SWAP1 DUP9 PUSH2 0x81E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x83B JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP3 DUP1 SWAP3 POP DUP4 SWAP2 POP RETURNDATASIZE DUP4 GT PUSH2 0x8A3 JUMPI JUMPDEST PUSH2 0x884 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x89F JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x89F JUMPI DUP2 DUP9 SWAP2 PUSH0 PUSH2 0x7C8 JUMP JUMPDEST DUP10 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x87A JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP13 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP11 POP POP POP SWAP9 POP POP POP POP POP POP POP PUSH2 0x8CA SWAP4 POP PUSH2 0x1ABB JUMP JUMPDEST PUSH2 0x4E3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP12 MSTORE PUSH1 0x11 DUP16 MSTORE DUP7 DUP12 REVERT JUMPDEST SWAP1 SWAP13 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x922 JUMPI JUMPDEST PUSH2 0x912 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP12 PUSH0 PUSH2 0x47E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x908 JUMP JUMPDEST PUSH2 0x933 DUP12 SWAP2 PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x89F JUMPI PUSH0 PUSH2 0x45B JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE DUP14 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x952 SWAP2 SWAP12 POP PUSH2 0x1676 JUMP JUMPDEST PUSH0 SWAP10 PUSH0 PUSH2 0x407 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 POP DUP7 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x98C JUMPI JUMPDEST PUSH2 0x97C DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x3B2 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x972 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP6 PUSH0 KECCAK256 SLOAD AND PUSH0 EQ PUSH2 0x9E1 JUMPI DUP10 PUSH0 SLOAD AND PUSH2 0x36E JUMPI DUP9 PUSH32 0x8562EB4500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 DUP8 PUSH32 0x38553F6C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0xA25 PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0xA49 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP3 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0xAB6 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH32 0xED3EA501D1A23F23A7DC56C2D33E1E5A6A97694C707EF67B1E0159F239746BF PUSH0 DUP1 LOG2 STOP JUMPDEST SWAP1 POP PUSH32 0xBCA5AB3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI DUP1 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP6 GT PUSH2 0x1FA JUMPI CALLDATASIZE PUSH1 0x23 DUP7 ADD SLT ISZERO PUSH2 0x1FA JUMPI DUP5 DUP4 ADD CALLDATALOAD SWAP4 PUSH1 0x24 SWAP2 DUP6 GT PUSH2 0xCBB JUMPI PUSH1 0x5 SWAP6 DUP6 PUSH1 0x5 SHL DUP5 MLOAD SWAP7 PUSH2 0xB38 DUP5 DUP4 ADD DUP10 PUSH2 0x16D3 JUMP JUMPDEST DUP8 MSTORE PUSH1 0x24 DUP4 DUP9 ADD SWAP2 DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x1FA JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xC8F JUMPI POP POP POP PUSH2 0xB62 PUSH2 0x19FD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 PUSH1 0x1 SWAP6 DUP1 PUSH1 0x1 SLOAD AND CALLER SUB PUSH2 0xC68 JUMPI PUSH0 SWAP8 DUP8 JUMPDEST PUSH2 0xBB3 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST DUP3 MLOAD DUP10 LT ISZERO PUSH2 0xC63 JUMPI DUP2 DUP5 DUP11 DUP4 SHL DUP6 ADD ADD MLOAD AND SWAP9 DUP7 MLOAD SWAP10 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP12 MSTORE ADDRESS DUP10 DUP13 ADD MSTORE DUP6 DUP12 DUP9 DUP2 DUP5 GAS STATICCALL DUP1 ISZERO PUSH2 0x993 JUMPI DUP11 SWAP12 PUSH0 SWAP2 PUSH2 0xC2E JUMPI JUMPDEST POP SWAP1 DUP2 DUP12 SWAP4 SWAP3 PUSH2 0xC1C JUMPI JUMPDEST POP POP ADD SWAP9 PUSH2 0xB8A JUMP JUMPDEST PUSH2 0xC27 SWAP2 CALLER SWAP1 PUSH2 0x1A52 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xC13 JUMP JUMPDEST DUP1 SWAP4 SWAP3 SWAP12 POP DUP8 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xC5C JUMPI JUMPDEST PUSH2 0xC49 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI SWAP1 MLOAD DUP11 SWAP10 SWAP1 DUP11 PUSH2 0xC08 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xC3F JUMP JUMPDEST PUSH2 0x492 JUMP JUMPDEST DUP6 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1FA JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xB50 JUMP JUMPDEST PUSH1 0x41 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xDA6 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0xD77 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xD98 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xD9F JUMPI JUMPDEST PUSH2 0xD90 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1846 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0xD6F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xD86 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xDE2 PUSH2 0x1630 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0xE63 PUSH2 0x1630 JUMP JUMPDEST SWAP1 PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1FA JUMPI PUSH2 0xE90 PUSH2 0x1653 JUMP JUMPDEST SWAP5 PUSH2 0xE99 PUSH2 0x19FD JUMP JUMPDEST PUSH2 0xEA7 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST DUP2 PUSH0 SWAP7 AND SWAP2 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0x1446 JUMPI JUMPDEST DUP7 MLOAD SWAP2 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 SWAP7 DUP8 DUP5 MSTORE ADDRESS DUP12 DUP6 ADD MSTORE PUSH1 0x20 SWAP7 DUP8 DUP6 DUP8 DUP2 DUP8 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x143C JUMPI PUSH0 SWAP6 PUSH2 0x140D JUMPI JUMPDEST POP DUP3 PUSH2 0xF05 PUSH2 0x178A JUMP JUMPDEST AND SWAP5 DUP6 EXTCODESIZE ISZERO PUSH2 0x1FA JUMPI DUP13 SWAP6 DUP12 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 DUP6 AND DUP1 SWAP9 DUP3 ADD MSTORE PUSH0 DUP2 DUP11 DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x1403 JUMPI PUSH2 0x13F0 JUMPI JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x13EC JUMPI DUP13 DUP8 DUP16 PUSH1 0x64 SWAP1 DUP16 DUP5 SWAP1 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xB53A70B200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE DUP14 ADDRESS SWAP1 DUP5 ADD MSTORE DUP12 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x13E2 JUMPI SWAP1 DUP14 SWAP2 PUSH2 0x13CA JUMPI JUMPDEST POP POP DUP11 MLOAD SWAP10 DUP11 MSTORE ADDRESS DUP14 DUP12 ADD MSTORE DUP9 DUP11 DUP9 DUP2 DUP9 GAS STATICCALL SWAP10 DUP11 ISZERO PUSH2 0x13C0 JUMPI DUP13 SWAP11 PUSH2 0x1391 JUMPI JUMPDEST POP DUP1 DUP11 SUB SWAP10 DUP1 DUP12 GT PUSH2 0x1365 JUMPI SUB PUSH2 0x1000 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST ISZERO PUSH2 0x134C JUMPI POP DUP9 SLOAD DUP2 AND SWAP1 DUP3 DUP3 SUB PUSH2 0x1039 JUMPI DUP11 DUP11 PUSH32 0xCA9E3A1E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP9 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP8 DUP2 DUP14 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x93D JUMPI DUP9 SWAP2 DUP4 SWAP2 DUP14 SWAP2 PUSH2 0x1311 JUMPI JUMPDEST POP AND SWAP9 PUSH1 0x64 DUP14 DUP14 DUP14 MLOAD SWAP8 DUP9 SWAP5 DUP6 SWAP4 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE ADDRESS DUP12 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x8AA JUMPI DUP11 SWAP4 PUSH2 0x12E2 JUMPI JUMPDEST POP DUP5 DUP10 MLOAD DUP9 DUP13 DUP12 DUP11 PUSH2 0x1155 DUP6 PUSH2 0x1129 DUP12 DUP8 DUP4 ADD SWAP5 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP11 DUP12 DUP8 MSTORE DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 ADD DUP8 MSTORE DUP7 PUSH2 0x16D3 JUMP JUMPDEST DUP3 DUP6 MLOAD SWAP3 GAS CALL DUP13 MLOAD RETURNDATASIZE DUP3 PUSH2 0x12C6 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x128D JUMPI JUMPDEST POP POP PUSH1 0x1 SLOAD AND SWAP2 DUP6 EXTCODESIZE ISZERO PUSH2 0x89F JUMPI DUP9 MLOAD SWAP4 PUSH32 0xDE557A3200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 DUP6 ADD MSTORE DUP8 DUP6 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0xC4 DUP3 ADD MSTORE DUP7 DUP2 PUSH1 0xE4 DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x71D JUMPI DUP5 SWAP4 SWAP3 SWAP2 DUP9 SWAP2 PUSH2 0x1272 JUMPI JUMPDEST POP POP PUSH1 0x44 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS DUP13 DUP6 ADD MSTORE DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x6F5 JUMPI POP DUP4 SWAP3 PUSH2 0x1244 JUMPI JUMPDEST POP POP PUSH2 0x6A2 JUMPI POP POP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x492 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x126B JUMPI JUMPDEST PUSH2 0x125B DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD PUSH0 DUP1 PUSH2 0x122A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1251 JUMP JUMPDEST PUSH2 0x127F SWAP2 SWAP3 SWAP4 SWAP5 POP PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x719 JUMPI SWAP1 DUP3 SWAP2 DUP7 PUSH0 PUSH2 0x11E2 JUMP JUMPDEST PUSH2 0x12B9 PUSH2 0x12BF SWAP3 DUP13 MLOAD SWAP1 DUP12 DUP3 ADD MSTORE DUP10 DUP10 DUP3 ADD MSTORE DUP14 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x12B3 DUP2 PUSH2 0x16B7 JUMP JUMPDEST DUP12 PUSH2 0x1B19 JUMP JUMPDEST DUP10 PUSH2 0x1B19 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x116C JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x12DA JUMPI POP DUP10 EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x1164 JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x12D3 JUMP JUMPDEST SWAP1 SWAP3 POP DUP7 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x130A JUMPI JUMPDEST PUSH2 0x12FA DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x10C6 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x12F0 JUMP JUMPDEST SWAP3 DUP1 SWAP3 POP DUP4 SWAP2 POP RETURNDATASIZE DUP4 GT PUSH2 0x1345 JUMPI JUMPDEST PUSH2 0x132A DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x727 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x727 JUMPI DUP2 DUP9 SWAP2 PUSH0 PUSH2 0x1077 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1320 JUMP JUMPDEST SWAP7 SWAP9 POP POP SWAP6 POP POP POP POP POP PUSH2 0x1360 SWAP4 POP PUSH2 0x1ABB JUMP JUMPDEST PUSH2 0x1233 JUMP JUMPDEST POP DUP7 DUP13 PUSH1 0x11 DUP16 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 SWAP10 POP DUP9 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x13B9 JUMPI JUMPDEST PUSH2 0x13A9 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP9 PUSH0 PUSH2 0xFCA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x139F JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE DUP15 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x13D3 SWAP1 PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x13DE JUMPI DUP12 PUSH0 PUSH2 0xFA9 JUMP JUMPDEST DUP12 DUP1 REVERT JUMPDEST DUP13 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP13 DUP1 REVERT JUMPDEST PUSH2 0x13FB SWAP2 SWAP14 POP PUSH2 0x1676 JUMP JUMPDEST PUSH0 SWAP12 PUSH0 PUSH2 0xF50 JUMP JUMPDEST DUP14 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1435 JUMPI JUMPDEST PUSH2 0x1425 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP4 PUSH0 PUSH2 0xEFB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x141B JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP8 PUSH0 KECCAK256 SLOAD AND PUSH0 EQ PUSH2 0x148A JUMPI DUP2 PUSH0 SLOAD AND PUSH2 0xEB6 JUMPI DUP9 PUSH32 0x8562EB4500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 DUP5 DUP11 PUSH32 0x38553F6C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x14E5 PUSH2 0x178A JUMP JUMPDEST SWAP2 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x1FA JUMPI PUSH2 0x1536 PUSH1 0x20 SWAP3 PUSH2 0x1714 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x15BD PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x15E1 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH0 SLOAD AND OR PUSH0 SSTORE PUSH32 0x873950C2AC59C570001B99D815FFB260542DF229D07132922E2E6F9941FD3DA6 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1FA JUMPI JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1FA JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x183B JUMPI PUSH0 SWAP3 PUSH2 0x1802 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1833 JUMPI JUMPDEST DUP2 PUSH2 0x181E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1FA JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1811 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x1FA JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1FA JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND CALLER SUB PUSH2 0x1895 JUMPI POP POP JUMP JUMPDEST PUSH2 0x18C1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x1714 JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x183B JUMPI DUP5 PUSH1 0x64 SWAP3 DUP8 SWAP6 PUSH0 SWAP2 PUSH2 0x19E0 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x4 DUP7 ADD MSTORE CALLER PUSH1 0x24 DUP7 ADD MSTORE AND PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x183B JUMPI PUSH0 SWAP3 PUSH2 0x19A9 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x1981 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x19D9 JUMPI JUMPDEST PUSH2 0x19C0 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x1FA JUMPI PUSH0 DUP1 PUSH2 0x1978 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x19B6 JUMP JUMPDEST PUSH2 0x19F7 SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0xD9F JUMPI PUSH2 0xD90 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST PUSH0 PUSH2 0x192A JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x1A2A JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 MSTORE PUSH2 0x1AB9 SWAP2 PUSH2 0x1AB4 PUSH1 0x64 DUP4 PUSH2 0x16D3 JUMP JUMPDEST PUSH2 0x1B19 JUMP JUMPDEST JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x40 PUSH32 0xD6B9382EC1786C32610E376E8EE8F2F16ABEDA4ACE3B6276AC958193C75BBBC8 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 DUP2 PUSH1 0x1 SLOAD AND PUSH2 0x1B08 DUP8 DUP3 DUP5 PUSH2 0x1A52 JUMP JUMPDEST DUP5 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE AND SWAP5 AND SWAP3 LOG3 JUMP JUMPDEST SWAP1 PUSH0 PUSH1 0x20 SWAP2 DUP3 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL ISZERO PUSH2 0x183B JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x1B97 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x1B55 JUMPI POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x1B4E JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SLOAD DUP1 SWAP8 DUP14 0xF6 0x23 0xC8 DIV 0xA8 0xB8 DUP7 CODESIZE 0x4F PUSH8 0xD95375C26DC77BED DUP16 PUSH31 0xD539D94969B947C064736F6C634300081B0033000000000000000000000000 ","sourceMap":"1713:10354:88:-:0;;;;;;;;;;;;-1:-1:-1;1713:10354:88;;;;11958:9;11954:69;;1713:10354;;;;;12033:25;;;;;;1713:10354;;;;;;;;;;;12033:25;11954:69;11994:18;;11970:1;11994:18;11970:1;11994:18;1713:10354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1581:26:47;1713:10354:88;1581:26:47;;;1713:10354:88;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;:::i;:::-;2533:13;1713:10354;;;;2533:13;1713:10354;;;2526:4;2533:13;:::i;:::-;1713:10354;9350:26;;;9346:85;;-1:-1:-1;1713:10354:88;;;;2533:13;1713:10354;9485:29;1713:10354;;9485:29;1713:10354;9346:85;9399:21;1713:10354;9399:21;1713:10354;9399:21;1713:10354;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;:::i;:::-;;;2533:13;1713:10354;2533:13;1713:10354;;2526:4;2533:13;:::i;:::-;1713:10354;;;;;9901:19;1713:10354;;;;;;;;9897:133;;10159:40;;10155:104;;1713:10354;;;;9901:19;1713:10354;;;;2533:13;1713:10354;;;;;;;10330:50;1713:10354;10330:50;;1713:10354;10155:104;10222:26;1713:10354;10222:26;1713:10354;10222:26;9897:133;9962:57;;;1713:10354;9962:57;1713:10354;;;9962:57;1713:10354;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;1083:103:42;;;:::i;:::-;2533:13:88;1713:10354;;;;2526:4;2533:13;:::i;:::-;3187:5;3633:3050;;1713:10354;;;6823:32;;7041:318;;1713:10354;;;;3964:33;;;;2526:4;3964:33;;;1713:10354;3964:33;;;;;;;;;;;;;;1713:10354;3964:33;;;1713:10354;4245:26;;;;:::i;:::-;1713:10354;4428:40;;;;;;1713:10354;;;;;4428:40;;1713:10354;;;4428:40;;;;1713:10354;;4428:40;;;;;;;;;;;;;1713:10354;4572:73;;;;;;1713:10354;;;;;;;;4572:73;;;;;1713:10354;4572:73;;;;1713:10354;2526:4;1713:10354;;;;;;;;;4572:73;;;;;;;;1713:10354;;;;;;4683:33;;;;;2526:4;4683:33;;1713:10354;4683:33;;;;;;;;;;;;;;;;1713:10354;;;;;;;;;;;4656:78;4749:20;;4745:1932;;1713:10354;;551:66:42;3051:52:43;1713:10354:88;4745:1932;6823:32;;1713:10354;;-1:-1:-1;1713:10354:88;;;;;4986:23;;;1713:10354;;5033:94;;;;;;;;;;;;5183:16;;;;;:::i;:::-;4745:1932;;;;;;;;;;;;;;;;5033:94;5084:20;;;;;;4982:1488;5247:296;;;;;;;;;;;;;;;;4982:1488;-1:-1:-1;;1713:10354:88;;;5199:47:60;;;;;;1713:10354:88;;;5199:47:60;;;1713:10354:88;;;;;;;;;;;;;;;;5199:47:60;;1713:10354:88;;;;5199:47:60;;;;;;;;;:::i;:::-;9770:199;;;;;;;;;;9985:80;;;4982:1488:88;5261:45:60;;;5257:201;;4982:1488:88;1713:10354;;;;;;5979:301;;;;;;1713:10354;;5979:301;1713:10354;5979:301;;;;;1713:10354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5979:301;;1713:10354;5979:301;;;;;;;;;;;;;;;;;4982:1488;1713:10354;;;;;;6307:53;;;;;1713:10354;6307:53;;2526:4;6307:53;;;1713:10354;;;;6307:53;;;;;;;;;;;;4982:1488;6307:57;;6303:149;;4982:1488;;;;6303:149;6399:30;;;;6307:53;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;6307:53;;;;;;;;;;1713:10354;;;;;;;;5979:301;;;;;;;;:::i;:::-;1713:10354;;5979:301;;;;;;;1713:10354;;;;5979:301;1713:10354;;;;;;;;;5979:301;1713:10354;;;5257:201:60;5349:43;5434:12;1713:10354:88;;;5349:43:60;;;;;;;;;1713:10354:88;;;;;;;5349:43:60;;;;;:::i;:::-;;;:::i;:::-;5434:12;;:::i;:::-;5257:201;;;;9985:80;9997:67;;-1:-1:-1;9997:15:60;;1713:10354:88;;;;10015:26:60;:30;;9997:67;9985:80;;;;9997:67;1713:10354:88;10048:16:60;9997:67;;5247:296:88;1713:10354;;;5387:20;;1713:10354;;;;;-1:-1:-1;1713:10354:88;-1:-1:-1;1713:10354:88;;;;;5387:20;;;;;;;;;;;;;;;5247:296;1713:10354;;;;;5453:67;;;1713:10354;5453:67;;;;;1713:10354;2526:4;1713:10354;;;;2526:4;1713:10354;;;;5453:67;;;;1713:10354;5453:67;;;;;;;;;;;;;;;;;5247:296;-1:-1:-1;5434:86:88;-1:-1:-1;5434:86:88;;-1:-1:-1;5199:47:60;5247:296:88;;5453:67;;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;;;;-1:-1:-1;1713:10354:88;;;5453:67;;;;;;;;1713:10354;;;;;;;;;5387:20;;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;;;;;;;;5387:20;;;;;;1713:10354;;;;5387:20;;;;;;1713:10354;;;;;;;;;4785:1882;6635:16;;;;;;;;;;;;;;;;:::i;:::-;4785:1882;;1713:10354;;;;;;;;;;4683:33;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;4683:33;;;;;;;;;4572:73;;;;;:::i;:::-;1713:10354;;4572:73;;;;1713:10354;;;;;;;;;4428:40;;;;;;:::i;:::-;1713:10354;4428:40;;;;;1713:10354;;;;;;;;;3964:33;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;3964:33;;;;;;;;;;1713:10354;;;;;;;;;7041:318;1713:10354;;;7082:19;1713:10354;;;;;;;;7078:271;1713:10354;;;;;;;7041:318;7132:109;7202:20;;1713:10354;7202:20;1713:10354;7202:20;7078:271;7286:48;;;;1713:10354;7286:48;1713:10354;;7286:48;1713:10354;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;:::i;:::-;;;2533:13;1713:10354;2533:13;1713:10354;;2526:4;2533:13;:::i;:::-;1713:10354;;;;;10556:19;1713:10354;;;;;;;;;10552:138;;1713:10354;;;;10556:19;1713:10354;;;;;;;;;;10762:52;1713:10354;10762:52;;1713:10354;10552:138;10626:53;;;1713:10354;10626:53;1713:10354;;;10626:53;1713:10354;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;1083:103:42;;;;;:::i;:::-;1713:10354:88;10973:13;;1713:10354;;10973:13;1713:10354;;10959:10;:27;10955:83;;1713:10354;;11053:13;10973;;;1713:10354;551:66:42;3051:52:43;1713:10354:88;11090:3;1713:10354;;11068:20;;;;;1713:10354;;;;;;;;;;;;;11176:33;1713:10354;11176:33;;11203:4;11176:33;;;1713:10354;11176:33;;;;;;;;;;;;;1713:10354;11176:33;;;11090:3;11228:16;;;;;;11224:102;;11090:3;;;1713:10354;11053:13;;;11224:102;11298:12;10959:10;;11298:12;;:::i;:::-;11224:102;;;;11176:33;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;;;;;;11176:33;;;;;;;11068:20;;;10955:83;11009:18;;1713:10354;11009:18;1713:10354;11009:18;1713:10354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;1581:26:47;1713:10354:88;;1581:26:47;;1713:10354:88;1581:26:47;;1124:6:45;;;1713:10354:88;1581:26:47;;;;;;;;;;1713:10354:88;1581:26:47;;;1713:10354:88;;;;;;;;1581:26:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;1713:10354:88;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;;;;:::i;:::-;;;;8290:19;1713:10354;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;;;1124:6:45;1713:10354:88;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;1083:103:42;;;:::i;:::-;2533:13:88;1713:10354;;;;2526:4;2533:13;:::i;:::-;3898:29;1713:10354;;;6823:32;;;;7041:318;;;;1713:10354;;;;;3964:33;;;;2526:4;3964:33;;;1713:10354;3964:33;;;;;;;;;;;;;;1713:10354;3964:33;;;1713:10354;4245:26;;;;:::i;:::-;1713:10354;4428:40;;;;;;1713:10354;;;;;4428:40;;1713:10354;;;4428:40;;;;1713:10354;;4428:40;;;;;;;;;;;;;1713:10354;4572:73;;;;;;1713:10354;;;;;;;;;4572:73;;;;;1713:10354;4572:73;;;;1713:10354;2526:4;;1713:10354;;;;;;;;;4572:73;;;;;;;;;;;1713:10354;;;;;4683:33;;;2526:4;4683:33;;;1713:10354;4683:33;;;;;;;;;;;;;;;;1713:10354;;;;;;;;;;;4749:20;4745:1932;;1713:10354;551:66:42;3051:52:43;1713:10354:88;4745:1932;4785:1882;;;-1:-1:-1;1713:10354:88;;;;;4986:23;;;1713:10354;;5084:20;;;;;;4982:1488;1713:10354;;;5387:20;;;;;;;;;;;;;;;;;;;;;;4982:1488;1713:10354;;;;;;;;5453:67;;;;;1713:10354;5453:67;;;;1713:10354;2526:4;1713:10354;;;;2526:4;1713:10354;;;;5453:67;;;;;;;;;;;4982:1488;1713:10354;;;;5199:47:60;;;;;;;;;;;1713:10354:88;;5199:47:60;;;;;;1713:10354:88;;;;;;;;;;;;;;;;;5199:47:60;;;;;;;;;:::i;:::-;9770:199;;;;;;;;;9985:80;;;4982:1488:88;5261:45:60;;;5257:201;;4982:1488:88;1713:10354;;;;;5979:301;;;;;;1713:10354;;5979:301;1713:10354;5979:301;;;;;1713:10354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5979:301;;1713:10354;5979:301;;;;;;;;;;;;;;;;;4982:1488;1713:10354;;;;;;6307:53;;;;;1713:10354;6307:53;;2526:4;6307:53;;;1713:10354;;;;6307:53;;;;;;;;;;;;4982:1488;6307:57;;6303:149;;4982:1488;;4785:1882;4745:1932;;;;;;;;;;;;;;6307:53;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;6307:53;;;;;;;;;5979:301;;;;;;;;:::i;:::-;1713:10354;;5979:301;;;;;;;5257:201:60;5349:43;5434:12;1713:10354:88;;;5349:43:60;;;;;;;;;1713:10354:88;;;;;;;5349:43:60;;;;;:::i;:::-;;;:::i;:::-;5434:12;;:::i;:::-;5257:201;;;;9985:80;9997:67;;-1:-1:-1;9997:15:60;;10015:26;;;:30;;9997:67;9985:80;;;;9997:67;1713:10354:88;10048:16:60;9997:67;;5453::88;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;5453:67;;;;;;;;;5387:20;;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;;;;;;;;5387:20;;;;;;;;;;;4785:1882;6635:16;;;;;;;;;;;;;;:::i;:::-;4785:1882;;1713:10354;;;;;;;;;;;4683:33;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;4683:33;;;;;;;;;;1713:10354;;;;;;;;;4572:73;;;;:::i;:::-;1713:10354;;4572:73;;;;1713:10354;;;;4572:73;1713:10354;;;;;;;;;4572:73;1713:10354;;;4428:40;;;;;;:::i;:::-;1713:10354;4428:40;;;;;1713:10354;;;;;;;;;3964:33;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;3964:33;;;;;;;;;;1713:10354;;;;;;;;;7041:318;1713:10354;;;7082:19;1713:10354;;;;;;;;7078:271;1713:10354;;;;;;;7041:318;7132:109;7202:20;;1713:10354;7202:20;1713:10354;7202:20;7078:271;7286:48;;;;1713:10354;7286:48;1713:10354;;7286:48;1713:10354;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;;8114:13;1713:10354;;;;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;:::i;:::-;;;2533:13;1713:10354;2533:13;1713:10354;;2526:4;2533:13;:::i;:::-;1713:10354;;;;;;;;;9701:27;1713:10354;9701:27;;1713:10354;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;1931:430:33:-;1713:10354:88;;;2303:50:33;;;2320:22;;1713:10354:88;;;;;;;2303:50:33;;;1713:10354:88;;;;;;;;;;;;;;;2293:61:33;;1931:430;:::o;7711:142:88:-;1713:10354;;;7809:37;;1713:10354;7809:37;1713:10354;7809:37;1713:10354;1124:6:45;1713:10354:88;;7809:37;;;;;;;-1:-1:-1;7809:37:88;;;7802:44;;7711:142;:::o;7809:37::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;;;;;;;;7711:142;:::o;7809:37::-;;;-1:-1:-1;7809:37:88;;;1713:10354;;;-1:-1:-1;1713:10354:88;;;;;;;;;;;;;;;;;;;;;;;:::o;2255:438:45:-;;1713:10354:88;;;;2444:10:45;:25;2440:180;;2255:438;;:::o;2440:180::-;2501:20;2513:7;;;;2501:20;:::i;:::-;1713:10354:88;;;1530:22:45;1713:10354:88;1530:22:45;;;:6;;;:22;:6;;;1713:10354:88;1530:22:45;;;;;;;;1713:10354:88;1530:22:45;;;2513:7;1530:22;;;2440:180;1713:10354:88;;;1530:59:45;;;;;1713:10354:88;1530:59:45;;:22;:59;;1713:10354:88;2444:10:45;1713:10354:88;;;;;;;;;;1530:59:45;;;;;;;2513:7;1530:59;;;2440:180;1713:10354:88;;;2485:125:45;;2255:438::o;2485:125::-;2577:18;2513:7;2577:18;1530:22;2513:7;2577:18;1530:59;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354:88;;;;;;;;;;;;1530:59:45;;;;;;;;;:22;;;;;;;;;;;;;;:::i;:::-;;;;1192:349:42;551:66;2806:53:43;;1316:93:42;;1529:4;3051:52:43;;1192:349:42:o;1316:93::-;1368:30;-1:-1:-1;1368:30:42;;-1:-1:-1;1368:30:42;1219:160:60;1713:10354:88;;;1328:43:60;;;;1713:10354:88;;;;;1328:43:60;;;1713:10354:88;;;;;;;;;1328:43:60;;;;;;1713:10354:88;;1328:43:60;:::i;:::-;;:::i;:::-;1219:160::o;7371:294:88:-;;;1713:10354;7592:66;7371:294;1713:10354;;;;7498:13;1713:10354;;7554:21;;;;;:::i;:::-;1713:10354;;;;;;;;;;;;7592:66;;7371:294::o;8370:720:60:-;;-1:-1:-1;8507:421:60;8370:720;8507:421;;;;;;;;;;;;-1:-1:-1;8507:421:60;;8942:15;;1713:10354:88;;;;8960:26:60;:31;8942:68;8938:146;;8370:720;:::o;8938:146::-;1713:10354:88;9033:40:60;;-1:-1:-1;9033:40:60;1713:10354:88;9033:40:60;1713:10354:88;;-1:-1:-1;9033:40:60;8942:68;9009:1;8994:16;;8942:68;"},"methodIdentifiers":{"addProtocolFeeBurner(address)":"e20c482f","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getFeeRecipient()":"4ccb20c0","getProtocolFeeController()":"85f2dbd4","getTargetToken()":"80db0d51","getVault()":"8d928af8","isApprovedProtocolFeeBurner(address)":"9c5cee9b","recoverProtocolFees(address[])":"b0edcc53","removeProtocolFeeBurner(address)":"b11f061e","setFeeRecipient(address)":"e74b981b","setTargetToken(address)":"1b66cb00","sweepProtocolFeesForToken(address,address,uint256,uint256,address)":"b9746995","sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)":"88f6d2a4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BurnerDidNotConsumeAllowance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidFeeRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeBurner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTargetToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerNotAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"UnsupportedProtocolFeeBurner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnwrapIsNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"FeeRecipientSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeSwept\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TargetTokenSet\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"addProtocolFeeBurner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTargetToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"isApprovedProtocolFeeBurner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"feeTokens\",\"type\":\"address[]\"}],\"name\":\"recoverProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"removeProtocolFeeBurner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"setFeeRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"}],\"name\":\"setTargetToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"feeBurner\",\"type\":\"address\"}],\"name\":\"sweepProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC4626\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"feeBurner\",\"type\":\"address\"}],\"name\":\"sweepProtocolFeesForWrappedToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This withdraws all protocol fees previously collected and allocated to the protocol by the `ProtocolFeeController`, processes them with a configurable \\\"burner\\\" (e.g., from CowSwap) and forwards them to a recipient address. An off-chain process can call `collectAggregateFees(pool)` on the fee controller for a given pool, which will collect and allocate the fees to the protocol and pool creator. `getProtocolFeeAmounts(pool)` returns the fee amounts available for withdrawal. If these are great enough, `sweepProtocolFeesForToken` here will withdraw, convert, and forward them to the final recipient.\",\"errors\":{\"BurnerDidNotConsumeAllowance()\":[{\"details\":\"The fee sweeper approves the burner to pull tokens. If it doesn't do so, revert to avoid a \\\"hanging\\\" approval that could be exploited later.\"}],\"ProtocolFeeBurnerAlreadyAdded(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of an approved protocol fee burner\"}}],\"ProtocolFeeBurnerNotAdded(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of a protocol fee burner to be removed from the allowlist\"}}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}],\"UnsupportedProtocolFeeBurner(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of the unsupported fee burner\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"FeeRecipientSet(address)\":{\"params\":{\"feeRecipient\":\"The final destination of collected protocol fees\"}},\"ProtocolFeeBurnerAdded(address)\":{\"details\":\"`sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\",\"params\":{\"protocolFeeBurner\":\"The address of the approved protocol fee burner that was added\"}},\"ProtocolFeeBurnerRemoved(address)\":{\"details\":\"`sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\",\"params\":{\"protocolFeeBurner\":\"The address of the approved protocol fee burner that was removed\"}},\"ProtocolFeeSwept(address,address,uint256,address)\":{\"details\":\"This can happen if no target token or burner contract was specified, or the fee token is the target token.\",\"params\":{\"feeToken\":\"The token the fee was collected in (also the target token in this case; no swap necessary)\",\"feeTokenAmount\":\"The number of feeTokens\",\"pool\":\"The pool on which the fee was collected\",\"recipient\":\"The recipient of the fee tokens\"}},\"TargetTokenSet(address)\":{\"params\":{\"token\":\"The preferred token for receiving protocol fees\"}}},\"kind\":\"dev\",\"methods\":{\"addProtocolFeeBurner(address)\":{\"details\":\"This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol fee burners.\",\"params\":{\"protocolFeeBurner\":\"The address of an approved protocol fee burner to be added\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getFeeRecipient()\":{\"details\":\"Can be changed by `setFeeRecipient`.\",\"returns\":{\"_0\":\"feeRecipient The current fee recipient\"}},\"getProtocolFeeController()\":{\"details\":\"It is not immutable in the Vault, so we need to fetch it every time.\",\"returns\":{\"_0\":\"protocolFeeController The address of the current `ProtocolFeeController`\"}},\"getTargetToken()\":{\"details\":\"This is the token the burner will swap all fee tokens for. Can be changed by `setTargetToken`.\",\"returns\":{\"_0\":\"targetToken The current target token\"}},\"getVault()\":{\"details\":\"This function is virtual to allow for overriding in derived contracts which also inherits contracts with `getVault()` definition.\",\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isApprovedProtocolFeeBurner(address)\":{\"params\":{\"protocolFeeBurner\":\"The address to be checked\"},\"returns\":{\"_0\":\"isApproved True if the given address is on the approved protocol fee burner allowlist\"}},\"recoverProtocolFees(address[])\":{\"details\":\"It will recover the full balance of all the tokens. This can only be called by the `feeRecipient`.\",\"params\":{\"feeTokens\":\"The tokens to recover\"}},\"removeProtocolFeeBurner(address)\":{\"details\":\"This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol fee burners.\",\"params\":{\"protocolFeeBurner\":\"The address of a protocol fee burner on the allowlist to be removed\"}},\"setFeeRecipient(address)\":{\"details\":\"This is a permissioned function.\",\"params\":{\"feeRecipient\":\"The address of the new fee recipient\"}},\"setTargetToken(address)\":{\"details\":\"This is the token for which the burner will attempt to swap all collected fee tokens.\",\"params\":{\"targetToken\":\"The address of the target token\"}},\"sweepProtocolFeesForToken(address,address,uint256,uint256,address)\":{\"details\":\"This will withdraw the fee token from the controller to this contract, and attempt to convert and forward the proceeds to the fee recipient. Note that this requires governance to grant this contract permission to call `withdrawProtocolFeesForToken` on the `ProtocolFeeController`. This is a permissioned call, since it involves a swap and a permissionless sweep could be triggered at times disadvantageous to the protocol (e.g., flash crashes). The general design is for an off-chain process to periodically collect fees from the Vault and check the protocol fee amounts available for withdrawal. Once these are greater than a threshold, compute the expected proceeds to determine the limits (amount and deadline), then call the sweeper to put in the order with the burner.\",\"params\":{\"deadline\":\"Deadline for the burn operation (swap), after which it will revert\",\"feeBurner\":\"The protocol fee burner to be used (or the zero address to fall back on direct transfer)\",\"feeToken\":\"The fee token in the pool\",\"minTargetTokenAmountOut\":\"The minimum number of target tokens to be received\",\"pool\":\"The pool that incurred the fees we're withdrawing\"}},\"sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)\":{\"params\":{\"deadline\":\"Deadline for the burn operation (swap), after which it will revert\",\"feeBurner\":\"The protocol fee burner to be used (or the zero address to fall back on direct transfer)\",\"feeToken\":\"The fee token in the pool\",\"minTargetTokenAmountOut\":\"The minimum number of target tokens to be received\",\"pool\":\"The pool that incurred the fees we're withdrawing\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BurnerDidNotConsumeAllowance()\":[{\"notice\":\"The burner did not consume its entire allowance.\"}],\"CannotReceiveEth()\":[{\"notice\":\"All pool tokens are ERC20, so this contract should not handle ETH.\"}],\"InvalidFeeRecipient()\":[{\"notice\":\"The fee recipient is invalid.\"}],\"InvalidProtocolFeeBurner()\":[{\"notice\":\"The protocol fee burner to be added is invalid.\"}],\"InvalidTargetToken()\":[{\"notice\":\"The target token is invalid.\"}],\"ProtocolFeeBurnerAlreadyAdded(address)\":[{\"notice\":\"Protocol fee burners can only be added to the allowlist once.\"}],\"ProtocolFeeBurnerNotAdded(address)\":[{\"notice\":\"Protocol fee burners must be added to the allowlist before being removed.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"UnsupportedProtocolFeeBurner(address)\":[{\"notice\":\"The specified fee burner has not been approved.\"}],\"UnwrapIsNotAllowed()\":[{\"notice\":\"Unwrapping is not allowed for the operation.\"}]},\"events\":{\"FeeRecipientSet(address)\":{\"notice\":\"Emitted when the fee recipient address is set or updated.\"},\"ProtocolFeeBurnerAdded(address)\":{\"notice\":\"Emitted when a burner is added to the protocol fee burner allowlist.\"},\"ProtocolFeeBurnerRemoved(address)\":{\"notice\":\"Emitted when a burner is removed from the protocol fee burner allowlist.\"},\"ProtocolFeeSwept(address,address,uint256,address)\":{\"notice\":\"Emitted when a fee token is transferred directly, vs. calling the burner.\"},\"TargetTokenSet(address)\":{\"notice\":\"Emitted when the target token is set or updated.\"}},\"kind\":\"user\",\"methods\":{\"addProtocolFeeBurner(address)\":{\"notice\":\"Add an approved fee burner to the allowlist.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getFeeRecipient()\":{\"notice\":\"Getter for the current fee recipient.\"},\"getProtocolFeeController()\":{\"notice\":\"Return the address of the current `ProtocolFeeController` from the Vault.\"},\"getTargetToken()\":{\"notice\":\"Getter for the target token.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isApprovedProtocolFeeBurner(address)\":{\"notice\":\"Check whether a given address corresponds to an approved protocol fee burner.\"},\"recoverProtocolFees(address[])\":{\"notice\":\"Retrieve any tokens \\\"stuck\\\" in this contract (e.g., dust, or failed conversions).\"},\"removeProtocolFeeBurner(address)\":{\"notice\":\"Remove a fee burner from the allowlist.\"},\"setFeeRecipient(address)\":{\"notice\":\"Update the fee recipient address.\"},\"setTargetToken(address)\":{\"notice\":\"Update the address of the target token.\"},\"sweepProtocolFeesForToken(address,address,uint256,uint256,address)\":{\"notice\":\"Withdraw, convert, and forward protocol fees for a given pool and token.\"},\"sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)\":{\"notice\":\"The same as `sweepProtocolFeesForToken`, but for wrapped tokens.\"}},\"notice\":\"Withdraw protocol fees, convert them to a target token, and forward to a recipient.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ProtocolFeeSweeper.sol\":\"ProtocolFeeSweeper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x11ec2b653633cbcc6a99d426df178007a98d1154a39a1ada961239be39eec069\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://40eed42ee57746bbf4711bb4aee856328cd70cc02aa3ff05e8dd719868fcd524\",\"dweb:/ipfs/QmX5uAoB9W6UUehgSRvVW6hun3XE53eZwKsm4kHVqtJs8C\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/ProtocolFeeSweeper.sol\":{\"keccak256\":\"0x111475fcdfd10e5e6c6b054e6b37cc5a89725050c73cfd338d13497a425931a3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6dc090a277adf9e63a93f1f0db8e15ebfb354f30e415a5bc566087f6284beeb7\",\"dweb:/ipfs/QmRequjbKYe8nLLdkwqHEw6eakHLQe1MYAyRuQZj1zLM7y\"]}},\"version\":1}"}},"contracts/TokenPairRegistry.sol":{"TokenPairRegistry":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"buffer","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"EmptyPath","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"address","name":"buffer","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"InvalidBufferPath","type":"error"},{"inputs":[{"internalType":"address","name":"poolOrBuffer","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"InvalidRemovePath","type":"error"},{"inputs":[{"internalType":"address","name":"path","type":"address"}],"name":"InvalidSimplePath","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"pathsLength","type":"uint256"}],"name":"PathAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"pathsLength","type":"uint256"}],"name":"PathRemoved","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct SwapPathStep[]","name":"steps","type":"tuple[]"}],"name":"addPath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolOrBuffer","type":"address"}],"name":"addSimplePath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getPathAt","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct SwapPathStep[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getPathCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getPaths","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct SwapPathStep[][]","name":"","type":"tuple[][]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removePathAtIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolOrBuffer","type":"address"}],"name":"removeSimplePath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461011f57601f611e7438819003918201601f19168301916001600160401b0383118484101761012357808492604094855283398101031261011f5780516001600160a01b03918282169081830361011f576020015183811680910361011f57801561010c5760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100fd5760a052611d3c9081610138823960805181611796015260a05181818160e80152818161013d0152818161050e0152818161079b01528181610a4501528181610be801526119d80152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c8063057074ff1461119357806332fffdbd14611074578063715018a614610ffc57806379ba509714610fa55780637c7d370a14610e55578063815ca70f14610910578063851c1bb3146108c05780638da5cb5b1461089b57806394ee0a3b1461085b578063a89b1128146107f8578063aaabadc514610755578063bc138aa3146104e1578063e30c3978146104bb578063f2fde38b1461043b578063f335b520146101105763fbfa77cf146100c9575f80fd5b3461010c575f60031936011261010c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b3461010c5760208060031936011261010c5761012a611237565b61013261184f565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016604051937fc673bdaf0000000000000000000000000000000000000000000000000000000085528284169081600487015260249581818881875afa9081156102e6575f9161041e575b50156102f157505f9085604051809481937fca4f280300000000000000000000000000000000000000000000000000000000835260048301525afa9081156102e6575f916102c4575b508051925f198401938411610298575f5b84811061020957005b600180820180831161026c57815b610226575b5050600101610200565b84518110156102675781809161026088610240878a611656565b51168961024d848b611656565b511661025a81838b611cbd565b88611cbd565b0190610217565b61021c565b877f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b847f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b6102e091503d805f833e6102d881836112e1565b810190611904565b846101ef565b6040513d5f823e3d90fd5b94935091506040517f6844846b00000000000000000000000000000000000000000000000000000000815282600482015284818581855afa9081156102e6575f916103f1575b50156103c7578390604051938480927f0387587d0000000000000000000000000000000000000000000000000000000082528560048301525afa9182156102e657610396935f93610398575b5050610390818381611c16565b80611c16565b005b6103b8929350803d106103c0575b6103b081836112e1565b8101906117d0565b908380610383565b503d6103a6565b507fb309199b000000000000000000000000000000000000000000000000000000005f526004525ffd5b6104119150853d8711610417575b61040981836112e1565b8101906117ef565b85610337565b503d6103ff565b6104359150823d84116104175761040981836112e1565b876101a6565b3461010c57602060031936011261010c57610454611237565b61045c61188c565b6001600160a01b0380911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b3461010c575f60031936011261010c5760206001600160a01b0360015416604051908152f35b3461010c5760208060031936011261010c576104fb611237565b61050361184f565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016604051937fc673bdaf0000000000000000000000000000000000000000000000000000000085528284169081600487015260249581818881875afa9081156102e6575f91610738575b501561065757505f9085604051809481937fca4f280300000000000000000000000000000000000000000000000000000000835260048301525afa9081156102e6575f9161063d575b508051925f198401938411610298575f5b8481106105da57005b600180820180831161026c57815b6105f7575b50506001016105d1565b84518110156106385781809161063188610611878a611656565b51168961061e848b611656565b511661062b81838b611aa4565b88611aa4565b01906105e8565b6105ed565b61065191503d805f833e6102d881836112e1565b846105c0565b94935091506040517f6844846b00000000000000000000000000000000000000000000000000000000815282600482015284818581855afa9081156102e6575f9161071b575b50156103c7578390604051938480927f0387587d0000000000000000000000000000000000000000000000000000000082528560048301525afa9182156102e657610396935f936106fc575b50506106f6818381611aa4565b80611aa4565b610713929350803d106103c0576103b081836112e1565b9083806106e9565b6107329150853d87116104175761040981836112e1565b8561069d565b61074f9150823d84116104175761040981836112e1565b87610577565b3461010c575f60031936011261010c576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa9081156102e6576020925f926107d9575b5060405191168152f35b6107f1919250833d85116103c0576103b081836112e1565b90836107cf565b3461010c57602060031936011261010c57610811611237565b61081961184f565b6001600160a01b035f54163314610833576103969061189f565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461010c57604060031936011261010c57610885610877611237565b61087f61124d565b90611807565b5f526002602052602060405f2054604051908152f35b3461010c575f60031936011261010c5760206001600160a01b035f5416604051908152f35b3461010c57602060031936011261010c576004357fffffffff000000000000000000000000000000000000000000000000000000008116810361010c5761090860209161176b565b604051908152f35b3461010c57604060031936011261010c57610929611237565b60243567ffffffffffffffff811161010c573660238201121561010c57806004013561095481611322565b9161096260405193846112e1565b81835260208301602460608094028301019136831161010c57602401905b828210610df357858561099161184f565b805115610dcb5780515f198101908111610d595760206109b96001600160a01b039284611656565b51015116906109c88284611807565b5f9390815b8351861015610cfe576109e08685611656565b51604081015190919015610b8b576001600160a01b03825116906001600160a01b03602084015116916040517f0387587d0000000000000000000000000000000000000000000000000000000081528160048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa80156102e6576001600160a01b03915f91610b6c575b5016918215610b40576001600160a01b031691808303610aec5750808303610abb575050506001600160a01b0360206001925b0151169501946109cd565b7f29198c3d000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b828203610b0e578303610abb575050506001600160a01b036020600192610ab0565b507f29198c3d000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b507f85f41299000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b610b85915060203d6020116103c0576103b081836112e1565b8b610a7d565b926001600160a01b038293959697925116906001600160a01b0360208501511695604051987fca4f2803000000000000000000000000000000000000000000000000000000008a528360048b01525f8a6024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa998a156102e6575f9a610ce2575b505f985f935f5b8c51811015610c82578c6001600160a01b03610c3b8383611656565b51166001600160a01b038c1614610c79575b6001600160a01b03610c60838e93611656565b511614610c70575b600101610c1f565b60019550610c68565b60019c50610c4d565b509750975097909493985015908115610cd9575b50610cae57506001600160a01b036020600192610ab0565b7fb309199b000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90501588610c96565b610cf7919a503d805f833e6102d881836112e1565b988a610c18565b508284825f52600260205260405f2093610d178561166a565b50505f5b8351811015610d86578554905f198201918211610d5957610d53610d416001938961133a565b50610d4c8388611656565b51906116a2565b01610d1b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50835f5260026020527f0836045dc838da47be101a8d10036b82ec004688d856daa53cd0e56807d3bfca60206001600160a01b0360405f2054936040519485521692a3005b7f20a2d33d000000000000000000000000000000000000000000000000000000005f5260045ffd5b838236031261010c5760405190610e0982611298565b6001600160a01b038335818116810361010c5783526020840135908116810361010c576020830152604083013590811515820361010c5782602092604088950152815201910190610980565b3461010c57604060031936011261010c57610e71610877611237565b5f5260206002815260405f208054610e8881611322565b90610e9660405192836112e1565b80825283820180935f52845f20855f925b848410610f87575084866040519283928184019082855251809152604084019160408260051b86010193925f905b838210610ee25786860387f35b919395947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08592949682030183528651908280835192838152019201905f905b808210610f4357505050908060019297019201920186959492939193610ed5565b9193610f7a6001929486519060406060926001600160a01b0380825116845260208201511660208401520151151560408201520190565b9401920186939291610f22565b6001918291610f958561137c565b8152019201920191908690610ea7565b3461010c575f60031936011261010c57336001600160a01b036001541603610fd0576103963361189f565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b3461010c575f60031936011261010c5761101461188c565b5f6001600160a01b037fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461010c5761108236611263565b61108a61184f565b6110948284611807565b5f52600260205260405f20908154908181101561116b576001821180611157575b611102575b50506020816110e97fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da936115a8565b54926001600160a01b03809160405195865216941692a3005b90915f198301928311610d595761115160209261114b6111437fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da968561133a565b50918461133a565b9061156b565b916110ba565b505f198201828111610d59578114156110b5565b7f4e23d035000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461010c576111ab6111a436611263565b9291611807565b5f526111ca6111c4602092600260205260405f2061133a565b5061137c565b60405190602082016020835281518091526020604084019201935f5b8281106111f35784840385f35b9091928261122b60019288519060406060926001600160a01b0380825116845260208201511660208401520151151560408201520190565b960195939291016111e6565b600435906001600160a01b038216820361010c57565b602435906001600160a01b038216820361010c57565b600319606091011261010c576001600160a01b0390600435828116810361010c5791602435908116810361010c579060443590565b6060810190811067ffffffffffffffff8211176112b457604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176112b457604052565b67ffffffffffffffff81116112b45760051b60200190565b805482101561134f575f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b90815461138881611322565b9260409361139960405191826112e1565b82815280946020809201925f5260205f20905f935b8585106113bd57505050505050565b60028460019284516113ce81611298565b60ff6001600160a01b03808954168352868901549081168584015260a01c161515868201528152019301940193916113ae565b818114611567578154916801000000000000000083116112b4578154838355808410611501575b505f5260205f20905f5260205f20905f905b8382106114475750505050565b806001918403611462575b600280910193019101909161143a565b6114fc6001600160a01b0360ff81845416917fffffffffffffffffffffffff00000000000000000000000000000000000000009283895416178855859283890193860191825416908454161783555460a01c167fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff0000000000000000000000000000000000000000835492151560a01b169116179055565b611452565b60017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083168303610d595785168503610d5957835f5260205f209160011b8201918560011b015b828110611557575050611428565b5f80825582820155600201611549565b5050565b919061157c5761157a91611401565b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b80548015611629575f1901906115be828261133a565b61157c578054905f8155816115d257505055565b6001907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83168303610d59575f5260205f209160011b8201915b8281106116195750505055565b5f8082558282015560020161160c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b805182101561134f5760209160051b010190565b8054680100000000000000008110156112b45761168c9160018201815561133a565b9091565b80541561134f575f5260205f20905f90565b90815491680100000000000000008310156112b4576001830180825583101561134f5761157a926040915f5260205f209060011b01916001600160a01b0392600184835116917fffffffffffffffffffffffff00000000000000000000000000000000000000009283825416178155019360208301511690845416178355015115157fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff0000000000000000000000000000000000000000835492151560a01b169116179055565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526117ca81611298565b51902090565b9081602091031261010c57516001600160a01b038116810361010c5790565b9081602091031261010c5751801515810361010c5790565b6040519060208201927fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16845260601b166034820152602881526117ca81611298565b61188561187e7fffffffff000000000000000000000000000000000000000000000000000000005f351661176b565b339061198e565b1561083357565b6001600160a01b035f54163303610fd057565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f546001600160a01b0380921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b602090818184031261010c5780519067ffffffffffffffff821161010c57019180601f8401121561010c57825161193a81611322565b9361194860405195866112e1565b818552838086019260051b82010192831161010c578301905b82821061196f575050505090565b81516001600160a01b038116810361010c578152908301908301611961565b906001600160a01b039081805f54169116908114611a9c57604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156102e65785935f95611a78575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa9182156102e6575f92611a5f57505090565b611a759250803d106104175761040981836112e1565b90565b606492919550611a9490853d87116103c0576103b081836112e1565b949091611a0a565b505050600190565b91611aaf8183611807565b5f526020600260205260409160405f205f5b815480821015611bd357611ad5828461133a565b5060019081808254149182611bb2575b82611b8f575b5050611afb575050600101611ac1565b9080929697985011611b4c575b507fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da9350611b35816115a8565b5493519384526001600160a01b03908116941692a3565b5f198101908111610d59577fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da9461114b611143611b89938561133a565b5f611b08565b611b9a919250611690565b5001546001600160a01b03868116911614815f611aeb565b9150611bbd82611690565b50546001600160a01b038c811691161491611ae5565b8684897f3a9458d9000000000000000000000000000000000000000000000000000000005f526001600160a01b039283809216600452166024521660445260645ffd5b611c208383611807565b6001600160a01b03809416938060405193611c3a85611298565b16835284602084015260016040840152815f52600260205260405f2091611c608361166a565b505082545f198101908111610d59577f0836045dc838da47be101a8d10036b82ec004688d856daa53cd0e56807d3bfca94611ca0611ca69260209661133a565b506116a2565b5f526002825260405f2054936040519485521692a3565b611cc78383611807565b6001600160a01b03809416938060405193611ce185611298565b1683528460208401525f6040840152815f52600260205260405f2091611c608361166a56fea2646970667358221220c8a382897f62aa9b3b813657f2d689d3d97b0b2bc9ef3117f10b3d087f5fa65564736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x11F JUMPI PUSH1 0x1F PUSH2 0x1E74 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x123 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x11F JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x11F JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x11F JUMPI DUP1 ISZERO PUSH2 0x10C JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xFD JUMPI PUSH1 0xA0 MSTORE PUSH2 0x1D3C SWAP1 DUP2 PUSH2 0x138 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x1796 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xE8 ADD MSTORE DUP2 DUP2 PUSH2 0x13D ADD MSTORE DUP2 DUP2 PUSH2 0x50E ADD MSTORE DUP2 DUP2 PUSH2 0x79B ADD MSTORE DUP2 DUP2 PUSH2 0xA45 ADD MSTORE DUP2 DUP2 PUSH2 0xBE8 ADD MSTORE PUSH2 0x19D8 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x57074FF EQ PUSH2 0x1193 JUMPI DUP1 PUSH4 0x32FFFDBD EQ PUSH2 0x1074 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xFFC JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xFA5 JUMPI DUP1 PUSH4 0x7C7D370A EQ PUSH2 0xE55 JUMPI DUP1 PUSH4 0x815CA70F EQ PUSH2 0x910 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x8C0 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x89B JUMPI DUP1 PUSH4 0x94EE0A3B EQ PUSH2 0x85B JUMPI DUP1 PUSH4 0xA89B1128 EQ PUSH2 0x7F8 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x755 JUMPI DUP1 PUSH4 0xBC138AA3 EQ PUSH2 0x4E1 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x4BB JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x43B JUMPI DUP1 PUSH4 0xF335B520 EQ PUSH2 0x110 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0xC9 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x12A PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x132 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP4 PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP3 DUP5 AND SWAP1 DUP2 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x24 SWAP6 DUP2 DUP2 DUP9 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x41E JUMPI JUMPDEST POP ISZERO PUSH2 0x2F1 JUMPI POP PUSH0 SWAP1 DUP6 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x2C4 JUMPI JUMPDEST POP DUP1 MLOAD SWAP3 PUSH0 NOT DUP5 ADD SWAP4 DUP5 GT PUSH2 0x298 JUMPI PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x209 JUMPI STOP JUMPDEST PUSH1 0x1 DUP1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x26C JUMPI DUP2 JUMPDEST PUSH2 0x226 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x200 JUMP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x267 JUMPI DUP2 DUP1 SWAP2 PUSH2 0x260 DUP9 PUSH2 0x240 DUP8 DUP11 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND DUP10 PUSH2 0x24D DUP5 DUP12 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND PUSH2 0x25A DUP2 DUP4 DUP12 PUSH2 0x1CBD JUMP JUMPDEST DUP9 PUSH2 0x1CBD JUMP JUMPDEST ADD SWAP1 PUSH2 0x217 JUMP JUMPDEST PUSH2 0x21C JUMP JUMPDEST DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x2E0 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2D8 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1904 JUMP JUMPDEST DUP5 PUSH2 0x1EF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP5 SWAP4 POP SWAP2 POP PUSH1 0x40 MLOAD PUSH32 0x6844846B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 DUP6 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x3F1 JUMPI JUMPDEST POP ISZERO PUSH2 0x3C7 JUMPI DUP4 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x387587D00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP6 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2E6 JUMPI PUSH2 0x396 SWAP4 PUSH0 SWAP4 PUSH2 0x398 JUMPI JUMPDEST POP POP PUSH2 0x390 DUP2 DUP4 DUP2 PUSH2 0x1C16 JUMP JUMPDEST DUP1 PUSH2 0x1C16 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3B8 SWAP3 SWAP4 POP DUP1 RETURNDATASIZE LT PUSH2 0x3C0 JUMPI JUMPDEST PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x17D0 JUMP JUMPDEST SWAP1 DUP4 DUP1 PUSH2 0x383 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3A6 JUMP JUMPDEST POP PUSH32 0xB309199B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x411 SWAP2 POP DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x417 JUMPI JUMPDEST PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x17EF JUMP JUMPDEST DUP6 PUSH2 0x337 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3FF JUMP JUMPDEST PUSH2 0x435 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP8 PUSH2 0x1A6 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x454 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x45C PUSH2 0x188C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x4FB PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x503 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP4 PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP3 DUP5 AND SWAP1 DUP2 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x24 SWAP6 DUP2 DUP2 DUP9 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x738 JUMPI JUMPDEST POP ISZERO PUSH2 0x657 JUMPI POP PUSH0 SWAP1 DUP6 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x63D JUMPI JUMPDEST POP DUP1 MLOAD SWAP3 PUSH0 NOT DUP5 ADD SWAP4 DUP5 GT PUSH2 0x298 JUMPI PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x5DA JUMPI STOP JUMPDEST PUSH1 0x1 DUP1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x26C JUMPI DUP2 JUMPDEST PUSH2 0x5F7 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x5D1 JUMP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x638 JUMPI DUP2 DUP1 SWAP2 PUSH2 0x631 DUP9 PUSH2 0x611 DUP8 DUP11 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND DUP10 PUSH2 0x61E DUP5 DUP12 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND PUSH2 0x62B DUP2 DUP4 DUP12 PUSH2 0x1AA4 JUMP JUMPDEST DUP9 PUSH2 0x1AA4 JUMP JUMPDEST ADD SWAP1 PUSH2 0x5E8 JUMP JUMPDEST PUSH2 0x5ED JUMP JUMPDEST PUSH2 0x651 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2D8 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP5 PUSH2 0x5C0 JUMP JUMPDEST SWAP5 SWAP4 POP SWAP2 POP PUSH1 0x40 MLOAD PUSH32 0x6844846B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 DUP6 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x71B JUMPI JUMPDEST POP ISZERO PUSH2 0x3C7 JUMPI DUP4 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x387587D00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP6 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2E6 JUMPI PUSH2 0x396 SWAP4 PUSH0 SWAP4 PUSH2 0x6FC JUMPI JUMPDEST POP POP PUSH2 0x6F6 DUP2 DUP4 DUP2 PUSH2 0x1AA4 JUMP JUMPDEST DUP1 PUSH2 0x1AA4 JUMP JUMPDEST PUSH2 0x713 SWAP3 SWAP4 POP DUP1 RETURNDATASIZE LT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP1 DUP4 DUP1 PUSH2 0x6E9 JUMP JUMPDEST PUSH2 0x732 SWAP2 POP DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP6 PUSH2 0x69D JUMP JUMPDEST PUSH2 0x74F SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP8 PUSH2 0x577 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0x7D9 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x7F1 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x7CF JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x811 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x819 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND CALLER EQ PUSH2 0x833 JUMPI PUSH2 0x396 SWAP1 PUSH2 0x189F JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x885 PUSH2 0x877 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x87F PUSH2 0x124D JUMP JUMPDEST SWAP1 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI PUSH2 0x908 PUSH1 0x20 SWAP2 PUSH2 0x176B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x929 PUSH2 0x1237 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10C JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x10C JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x954 DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP2 PUSH2 0x962 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x12E1 JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x24 PUSH1 0x60 DUP1 SWAP5 MUL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x10C JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xDF3 JUMPI DUP6 DUP6 PUSH2 0x991 PUSH2 0x184F JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xDCB JUMPI DUP1 MLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0xD59 JUMPI PUSH1 0x20 PUSH2 0x9B9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP5 PUSH2 0x1656 JUMP JUMPDEST MLOAD ADD MLOAD AND SWAP1 PUSH2 0x9C8 DUP3 DUP5 PUSH2 0x1807 JUMP JUMPDEST PUSH0 SWAP4 SWAP1 DUP2 JUMPDEST DUP4 MLOAD DUP7 LT ISZERO PUSH2 0xCFE JUMPI PUSH2 0x9E0 DUP7 DUP6 PUSH2 0x1656 JUMP JUMPDEST MLOAD PUSH1 0x40 DUP2 ADD MLOAD SWAP1 SWAP2 SWAP1 ISZERO PUSH2 0xB8B JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 MLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 ADD MLOAD AND SWAP2 PUSH1 0x40 MLOAD PUSH32 0x387587D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH0 SWAP2 PUSH2 0xB6C JUMPI JUMPDEST POP AND SWAP2 DUP3 ISZERO PUSH2 0xB40 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP1 DUP4 SUB PUSH2 0xAEC JUMPI POP DUP1 DUP4 SUB PUSH2 0xABB JUMPI POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH1 0x1 SWAP3 JUMPDEST ADD MLOAD AND SWAP6 ADD SWAP5 PUSH2 0x9CD JUMP JUMPDEST PUSH32 0x29198C3D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP3 DUP3 SUB PUSH2 0xB0E JUMPI DUP4 SUB PUSH2 0xABB JUMPI POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH2 0xAB0 JUMP JUMPDEST POP PUSH32 0x29198C3D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST POP PUSH32 0x85F4129900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xB85 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP12 PUSH2 0xA7D JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 SWAP4 SWAP6 SWAP7 SWAP8 SWAP3 MLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP6 ADD MLOAD AND SWAP6 PUSH1 0x40 MLOAD SWAP9 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP4 PUSH1 0x4 DUP12 ADD MSTORE PUSH0 DUP11 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP10 DUP11 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP11 PUSH2 0xCE2 JUMPI JUMPDEST POP PUSH0 SWAP9 PUSH0 SWAP4 PUSH0 JUMPDEST DUP13 MLOAD DUP2 LT ISZERO PUSH2 0xC82 JUMPI DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC3B DUP4 DUP4 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND EQ PUSH2 0xC79 JUMPI JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC60 DUP4 DUP15 SWAP4 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND EQ PUSH2 0xC70 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0xC1F JUMP JUMPDEST PUSH1 0x1 SWAP6 POP PUSH2 0xC68 JUMP JUMPDEST PUSH1 0x1 SWAP13 POP PUSH2 0xC4D JUMP JUMPDEST POP SWAP8 POP SWAP8 POP SWAP8 SWAP1 SWAP5 SWAP4 SWAP9 POP ISZERO SWAP1 DUP2 ISZERO PUSH2 0xCD9 JUMPI JUMPDEST POP PUSH2 0xCAE JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH2 0xAB0 JUMP JUMPDEST PUSH32 0xB309199B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP ISZERO DUP9 PUSH2 0xC96 JUMP JUMPDEST PUSH2 0xCF7 SWAP2 SWAP11 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2D8 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP9 DUP11 PUSH2 0xC18 JUMP JUMPDEST POP DUP3 DUP5 DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP4 PUSH2 0xD17 DUP6 PUSH2 0x166A JUMP JUMPDEST POP POP PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0xD86 JUMPI DUP6 SLOAD SWAP1 PUSH0 NOT DUP3 ADD SWAP2 DUP3 GT PUSH2 0xD59 JUMPI PUSH2 0xD53 PUSH2 0xD41 PUSH1 0x1 SWAP4 DUP10 PUSH2 0x133A JUMP JUMPDEST POP PUSH2 0xD4C DUP4 DUP9 PUSH2 0x1656 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x16A2 JUMP JUMPDEST ADD PUSH2 0xD1B JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP4 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x836045DC838DA47BE101A8D10036B82EC004688D856DAA53CD0E56807D3BFCA PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 STOP JUMPDEST PUSH32 0x20A2D33D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLDATASIZE SUB SLT PUSH2 0x10C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0xE09 DUP3 PUSH2 0x1298 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI DUP4 MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x10C JUMPI DUP3 PUSH1 0x20 SWAP3 PUSH1 0x40 DUP9 SWAP6 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x980 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0xE71 PUSH2 0x877 PUSH2 0x1237 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x20 PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD PUSH2 0xE88 DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP1 PUSH2 0xE96 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP1 DUP3 MSTORE DUP4 DUP3 ADD DUP1 SWAP4 PUSH0 MSTORE DUP5 PUSH0 KECCAK256 DUP6 PUSH0 SWAP3 JUMPDEST DUP5 DUP5 LT PUSH2 0xF87 JUMPI POP DUP5 DUP7 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP3 DUP2 DUP5 ADD SWAP1 DUP3 DUP6 MSTORE MLOAD DUP1 SWAP2 MSTORE PUSH1 0x40 DUP5 ADD SWAP2 PUSH1 0x40 DUP3 PUSH1 0x5 SHL DUP7 ADD ADD SWAP4 SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xEE2 JUMPI DUP7 DUP7 SUB DUP8 RETURN JUMPDEST SWAP2 SWAP4 SWAP6 SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP6 SWAP3 SWAP5 SWAP7 DUP3 SUB ADD DUP4 MSTORE DUP7 MLOAD SWAP1 DUP3 DUP1 DUP4 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP3 ADD SWAP1 PUSH0 SWAP1 JUMPDEST DUP1 DUP3 LT PUSH2 0xF43 JUMPI POP POP POP SWAP1 DUP1 PUSH1 0x1 SWAP3 SWAP8 ADD SWAP3 ADD SWAP3 ADD DUP7 SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP4 PUSH2 0xED5 JUMP JUMPDEST SWAP2 SWAP4 PUSH2 0xF7A PUSH1 0x1 SWAP3 SWAP5 DUP7 MLOAD SWAP1 PUSH1 0x40 PUSH1 0x60 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SWAP5 ADD SWAP3 ADD DUP7 SWAP4 SWAP3 SWAP2 PUSH2 0xF22 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP3 SWAP2 PUSH2 0xF95 DUP6 PUSH2 0x137C JUMP JUMPDEST DUP2 MSTORE ADD SWAP3 ADD SWAP3 ADD SWAP2 SWAP1 DUP7 SWAP1 PUSH2 0xEA7 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SLOAD AND SUB PUSH2 0xFD0 JUMPI PUSH2 0x396 CALLER PUSH2 0x189F JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x1014 PUSH2 0x188C JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH2 0x1082 CALLDATASIZE PUSH2 0x1263 JUMP JUMPDEST PUSH2 0x108A PUSH2 0x184F JUMP JUMPDEST PUSH2 0x1094 DUP3 DUP5 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 DUP2 SLOAD SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x116B JUMPI PUSH1 0x1 DUP3 GT DUP1 PUSH2 0x1157 JUMPI JUMPDEST PUSH2 0x1102 JUMPI JUMPDEST POP POP PUSH1 0x20 DUP2 PUSH2 0x10E9 PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP4 PUSH2 0x15A8 JUMP JUMPDEST SLOAD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 MSTORE AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST SWAP1 SWAP2 PUSH0 NOT DUP4 ADD SWAP3 DUP4 GT PUSH2 0xD59 JUMPI PUSH2 0x1151 PUSH1 0x20 SWAP3 PUSH2 0x114B PUSH2 0x1143 PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP7 DUP6 PUSH2 0x133A JUMP JUMPDEST POP SWAP2 DUP5 PUSH2 0x133A JUMP JUMPDEST SWAP1 PUSH2 0x156B JUMP JUMPDEST SWAP2 PUSH2 0x10BA JUMP JUMPDEST POP PUSH0 NOT DUP3 ADD DUP3 DUP2 GT PUSH2 0xD59 JUMPI DUP2 EQ ISZERO PUSH2 0x10B5 JUMP JUMPDEST PUSH32 0x4E23D03500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH2 0x11AB PUSH2 0x11A4 CALLDATASIZE PUSH2 0x1263 JUMP JUMPDEST SWAP3 SWAP2 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH2 0x11CA PUSH2 0x11C4 PUSH1 0x20 SWAP3 PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x133A JUMP JUMPDEST POP PUSH2 0x137C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0x20 DUP4 MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0x40 DUP5 ADD SWAP3 ADD SWAP4 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x11F3 JUMPI DUP5 DUP5 SUB DUP6 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 DUP3 PUSH2 0x122B PUSH1 0x1 SWAP3 DUP9 MLOAD SWAP1 PUSH1 0x40 PUSH1 0x60 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SWAP7 ADD SWAP6 SWAP4 SWAP3 SWAP2 ADD PUSH2 0x11E6 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x10C JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x10C JUMPI JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x10C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B4 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B4 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x12B4 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x134F JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 SLOAD PUSH2 0x1388 DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP3 PUSH1 0x40 SWAP4 PUSH2 0x1399 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x12E1 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP1 SWAP5 PUSH1 0x20 DUP1 SWAP3 ADD SWAP3 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 SWAP4 JUMPDEST DUP6 DUP6 LT PUSH2 0x13BD JUMPI POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 DUP5 PUSH1 0x1 SWAP3 DUP5 MLOAD PUSH2 0x13CE DUP2 PUSH2 0x1298 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 SLOAD AND DUP4 MSTORE DUP7 DUP10 ADD SLOAD SWAP1 DUP2 AND DUP6 DUP5 ADD MSTORE PUSH1 0xA0 SHR AND ISZERO ISZERO DUP7 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP5 ADD SWAP4 SWAP2 PUSH2 0x13AE JUMP JUMPDEST DUP2 DUP2 EQ PUSH2 0x1567 JUMPI DUP2 SLOAD SWAP2 PUSH9 0x10000000000000000 DUP4 GT PUSH2 0x12B4 JUMPI DUP2 SLOAD DUP4 DUP4 SSTORE DUP1 DUP5 LT PUSH2 0x1501 JUMPI JUMPDEST POP PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x1447 JUMPI POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 SWAP2 DUP5 SUB PUSH2 0x1462 JUMPI JUMPDEST PUSH1 0x2 DUP1 SWAP2 ADD SWAP4 ADD SWAP2 ADD SWAP1 SWAP2 PUSH2 0x143A JUMP JUMPDEST PUSH2 0x14FC PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xFF DUP2 DUP5 SLOAD AND SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 DUP10 SLOAD AND OR DUP9 SSTORE DUP6 SWAP3 DUP4 DUP10 ADD SWAP4 DUP7 ADD SWAP2 DUP3 SLOAD AND SWAP1 DUP5 SLOAD AND OR DUP4 SSTORE SLOAD PUSH1 0xA0 SHR AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH21 0xFF0000000000000000000000000000000000000000 DUP4 SLOAD SWAP3 ISZERO ISZERO PUSH1 0xA0 SHL AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x1452 JUMP JUMPDEST PUSH1 0x1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP4 SUB PUSH2 0xD59 JUMPI DUP6 AND DUP6 SUB PUSH2 0xD59 JUMPI DUP4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH1 0x1 SHL DUP3 ADD SWAP2 DUP6 PUSH1 0x1 SHL ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x1557 JUMPI POP POP PUSH2 0x1428 JUMP JUMPDEST PUSH0 DUP1 DUP3 SSTORE DUP3 DUP3 ADD SSTORE PUSH1 0x2 ADD PUSH2 0x1549 JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x157C JUMPI PUSH2 0x157A SWAP2 PUSH2 0x1401 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 SLOAD DUP1 ISZERO PUSH2 0x1629 JUMPI PUSH0 NOT ADD SWAP1 PUSH2 0x15BE DUP3 DUP3 PUSH2 0x133A JUMP JUMPDEST PUSH2 0x157C JUMPI DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0x15D2 JUMPI POP POP SSTORE JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP4 SUB PUSH2 0xD59 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH1 0x1 SHL DUP3 ADD SWAP2 JUMPDEST DUP3 DUP2 LT PUSH2 0x1619 JUMPI POP POP POP SSTORE JUMP JUMPDEST PUSH0 DUP1 DUP3 SSTORE DUP3 DUP3 ADD SSTORE PUSH1 0x2 ADD PUSH2 0x160C JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x134F JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x12B4 JUMPI PUSH2 0x168C SWAP2 PUSH1 0x1 DUP3 ADD DUP2 SSTORE PUSH2 0x133A JUMP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST DUP1 SLOAD ISZERO PUSH2 0x134F JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 DUP2 SLOAD SWAP2 PUSH9 0x10000000000000000 DUP4 LT ISZERO PUSH2 0x12B4 JUMPI PUSH1 0x1 DUP4 ADD DUP1 DUP3 SSTORE DUP4 LT ISZERO PUSH2 0x134F JUMPI PUSH2 0x157A SWAP3 PUSH1 0x40 SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 SHL ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x1 DUP5 DUP4 MLOAD AND SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 DUP3 SLOAD AND OR DUP2 SSTORE ADD SWAP4 PUSH1 0x20 DUP4 ADD MLOAD AND SWAP1 DUP5 SLOAD AND OR DUP4 SSTORE ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH21 0xFF0000000000000000000000000000000000000000 DUP4 SLOAD SWAP3 ISZERO ISZERO PUSH1 0xA0 SHL AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x17CA DUP2 PUSH2 0x1298 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x10C JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x10C JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x10C JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 DUP1 SWAP3 PUSH1 0x60 SHL AND DUP5 MSTORE PUSH1 0x60 SHL AND PUSH1 0x34 DUP3 ADD MSTORE PUSH1 0x28 DUP2 MSTORE PUSH2 0x17CA DUP2 PUSH2 0x1298 JUMP JUMPDEST PUSH2 0x1885 PUSH2 0x187E PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x176B JUMP JUMPDEST CALLER SWAP1 PUSH2 0x198E JUMP JUMPDEST ISZERO PUSH2 0x833 JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND CALLER SUB PUSH2 0xFD0 JUMPI JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x10C JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x10C JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x10C JUMPI DUP3 MLOAD PUSH2 0x193A DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP4 PUSH2 0x1948 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x12E1 JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x10C JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x196F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1961 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x1A9C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x2E6 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x1A78 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP3 PUSH2 0x1A5F JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1A75 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x1A94 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1A0A JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x1AAF DUP2 DUP4 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x20 PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP2 PUSH1 0x40 PUSH0 KECCAK256 PUSH0 JUMPDEST DUP2 SLOAD DUP1 DUP3 LT ISZERO PUSH2 0x1BD3 JUMPI PUSH2 0x1AD5 DUP3 DUP5 PUSH2 0x133A JUMP JUMPDEST POP PUSH1 0x1 SWAP1 DUP2 DUP1 DUP3 SLOAD EQ SWAP2 DUP3 PUSH2 0x1BB2 JUMPI JUMPDEST DUP3 PUSH2 0x1B8F JUMPI JUMPDEST POP POP PUSH2 0x1AFB JUMPI POP POP PUSH1 0x1 ADD PUSH2 0x1AC1 JUMP JUMPDEST SWAP1 DUP1 SWAP3 SWAP7 SWAP8 SWAP9 POP GT PUSH2 0x1B4C JUMPI JUMPDEST POP PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP4 POP PUSH2 0x1B35 DUP2 PUSH2 0x15A8 JUMP JUMPDEST SLOAD SWAP4 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 JUMP JUMPDEST PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0xD59 JUMPI PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP5 PUSH2 0x114B PUSH2 0x1143 PUSH2 0x1B89 SWAP4 DUP6 PUSH2 0x133A JUMP JUMPDEST PUSH0 PUSH2 0x1B08 JUMP JUMPDEST PUSH2 0x1B9A SWAP2 SWAP3 POP PUSH2 0x1690 JUMP JUMPDEST POP ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND SWAP2 AND EQ DUP2 PUSH0 PUSH2 0x1AEB JUMP JUMPDEST SWAP2 POP PUSH2 0x1BBD DUP3 PUSH2 0x1690 JUMP JUMPDEST POP SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 DUP2 AND SWAP2 AND EQ SWAP2 PUSH2 0x1AE5 JUMP JUMPDEST DUP7 DUP5 DUP10 PUSH32 0x3A9458D900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP1 SWAP3 AND PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE AND PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH2 0x1C20 DUP4 DUP4 PUSH2 0x1807 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 AND SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1C3A DUP6 PUSH2 0x1298 JUMP JUMPDEST AND DUP4 MSTORE DUP5 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x40 DUP5 ADD MSTORE DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP2 PUSH2 0x1C60 DUP4 PUSH2 0x166A JUMP JUMPDEST POP POP DUP3 SLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0xD59 JUMPI PUSH32 0x836045DC838DA47BE101A8D10036B82EC004688D856DAA53CD0E56807D3BFCA SWAP5 PUSH2 0x1CA0 PUSH2 0x1CA6 SWAP3 PUSH1 0x20 SWAP7 PUSH2 0x133A JUMP JUMPDEST POP PUSH2 0x16A2 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 JUMP JUMPDEST PUSH2 0x1CC7 DUP4 DUP4 PUSH2 0x1807 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 AND SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1CE1 DUP6 PUSH2 0x1298 JUMP JUMPDEST AND DUP4 MSTORE DUP5 PUSH1 0x20 DUP5 ADD MSTORE PUSH0 PUSH1 0x40 DUP5 ADD MSTORE DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP2 PUSH2 0x1C60 DUP4 PUSH2 0x166A JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 LOG3 DUP3 DUP10 PUSH32 0x62AA9B3B813657F2D689D3D97B0B2BC9EF3117F10B3D087F5FA65564736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"1158:8825:89:-:0;;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;1273:26:49;;1269:95;;1158:8825:89;;;;;;;;2093:20:50;1158:8825:89;;2093:20:50;1158:8825:89;;-1:-1:-1;1158:8825:89;;;;;-1:-1:-1;1158:8825:89;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1524:4:81;1347:46:33;;1548:29:81;1544:80;;1634:14;;1158:8825:89;;;;;;1347:46:33;1158:8825:89;;;;;1634:14:81;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1544:80:81;1600:13;;;-1:-1:-1;1600:13:81;;-1:-1:-1;1600:13:81;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;1158:8825:89;;-1:-1:-1;1322:31:49;1158:8825:89;-1:-1:-1;1158:8825:89;;;;;;-1:-1:-1;1158:8825:89;;;;;-1:-1:-1;1158:8825:89"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":4685,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_16851":{"entryPoint":4663,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_addresst_addresst_uint256":{"entryPoint":4707,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_array_contract_IERC20_dyn_fromMemory":{"entryPoint":6404,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":6127,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":6096,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encodeUpdatedPos_struct_SwapPathStep":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_struct_SwapPathStep_dyn":{"entryPoint":4898,"id":null,"parameterSlots":1,"returnSlots":1},"array_pop_array_array_struct_SwapPathStep_storage_dyn__dyn_ptr":{"entryPoint":5544,"id":null,"parameterSlots":1,"returnSlots":0},"array_push_from_struct_SwapPathStep_to_array_struct_SwapPathStep_storage_dyn_ptr":{"entryPoint":5794,"id":null,"parameterSlots":2,"returnSlots":0},"array_push_zero_array_array_struct_SwapPathStep_storage_dyn__dyn_ptr":{"entryPoint":5738,"id":null,"parameterSlots":1,"returnSlots":2},"copy_array_from_storage_to_memory_array_struct_SwapPathStep__dyn":{"entryPoint":4988,"id":null,"parameterSlots":1,"returnSlots":1},"copy_array_to_storage_from_array_struct_SwapPathStep_storage_dyn_storage_to_array_struct_SwapPathStep__dyn":{"entryPoint":5121,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation":{"entryPoint":4833,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_16854":{"entryPoint":4760,"id":null,"parameterSlots":1,"returnSlots":0},"fun_addSimplePairStep":{"entryPoint":7190,"id":23617,"parameterSlots":3,"returnSlots":0},"fun_addSimplePairStep_16863":{"entryPoint":7357,"id":23617,"parameterSlots":3,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":6223,"id":4356,"parameterSlots":0,"returnSlots":0},"fun_canPerform":{"entryPoint":6542,"id":20329,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":6284,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":5995,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_getTokenPairId":{"entryPoint":6151,"id":23857,"parameterSlots":2,"returnSlots":1},"fun_removeSimplePairStep":{"entryPoint":6820,"id":23813,"parameterSlots":3,"returnSlots":0},"fun_transferOwnership":{"entryPoint":6303,"id":9547,"parameterSlots":1,"returnSlots":0},"memory_array_index_access_struct_SwapPathStep_dyn":{"entryPoint":5718,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_struct_SwapPathStep__dyn_ptr":{"entryPoint":5776,"id":null,"parameterSlots":1,"returnSlots":2},"storage_array_index_access_struct_SwapPathStep_storage_dyn__dyn":{"entryPoint":4922,"id":null,"parameterSlots":2,"returnSlots":2},"update_storage_value_array_struct_SwapPathStep_storage_dyn_storage_to_array_struct_SwapPathStep__dyn":{"entryPoint":5483,"id":null,"parameterSlots":3,"returnSlots":0},"update_storage_value_offsett_bool_to_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":6038}],"20218":[{"length":32,"start":232},{"length":32,"start":317},{"length":32,"start":1294},{"length":32,"start":1947},{"length":32,"start":2629},{"length":32,"start":3048},{"length":32,"start":6616}]},"linkReferences":{},"object":"60806040526004361015610011575f80fd5b5f3560e01c8063057074ff1461119357806332fffdbd14611074578063715018a614610ffc57806379ba509714610fa55780637c7d370a14610e55578063815ca70f14610910578063851c1bb3146108c05780638da5cb5b1461089b57806394ee0a3b1461085b578063a89b1128146107f8578063aaabadc514610755578063bc138aa3146104e1578063e30c3978146104bb578063f2fde38b1461043b578063f335b520146101105763fbfa77cf146100c9575f80fd5b3461010c575f60031936011261010c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b3461010c5760208060031936011261010c5761012a611237565b61013261184f565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016604051937fc673bdaf0000000000000000000000000000000000000000000000000000000085528284169081600487015260249581818881875afa9081156102e6575f9161041e575b50156102f157505f9085604051809481937fca4f280300000000000000000000000000000000000000000000000000000000835260048301525afa9081156102e6575f916102c4575b508051925f198401938411610298575f5b84811061020957005b600180820180831161026c57815b610226575b5050600101610200565b84518110156102675781809161026088610240878a611656565b51168961024d848b611656565b511661025a81838b611cbd565b88611cbd565b0190610217565b61021c565b877f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b847f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b6102e091503d805f833e6102d881836112e1565b810190611904565b846101ef565b6040513d5f823e3d90fd5b94935091506040517f6844846b00000000000000000000000000000000000000000000000000000000815282600482015284818581855afa9081156102e6575f916103f1575b50156103c7578390604051938480927f0387587d0000000000000000000000000000000000000000000000000000000082528560048301525afa9182156102e657610396935f93610398575b5050610390818381611c16565b80611c16565b005b6103b8929350803d106103c0575b6103b081836112e1565b8101906117d0565b908380610383565b503d6103a6565b507fb309199b000000000000000000000000000000000000000000000000000000005f526004525ffd5b6104119150853d8711610417575b61040981836112e1565b8101906117ef565b85610337565b503d6103ff565b6104359150823d84116104175761040981836112e1565b876101a6565b3461010c57602060031936011261010c57610454611237565b61045c61188c565b6001600160a01b0380911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b3461010c575f60031936011261010c5760206001600160a01b0360015416604051908152f35b3461010c5760208060031936011261010c576104fb611237565b61050361184f565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016604051937fc673bdaf0000000000000000000000000000000000000000000000000000000085528284169081600487015260249581818881875afa9081156102e6575f91610738575b501561065757505f9085604051809481937fca4f280300000000000000000000000000000000000000000000000000000000835260048301525afa9081156102e6575f9161063d575b508051925f198401938411610298575f5b8481106105da57005b600180820180831161026c57815b6105f7575b50506001016105d1565b84518110156106385781809161063188610611878a611656565b51168961061e848b611656565b511661062b81838b611aa4565b88611aa4565b01906105e8565b6105ed565b61065191503d805f833e6102d881836112e1565b846105c0565b94935091506040517f6844846b00000000000000000000000000000000000000000000000000000000815282600482015284818581855afa9081156102e6575f9161071b575b50156103c7578390604051938480927f0387587d0000000000000000000000000000000000000000000000000000000082528560048301525afa9182156102e657610396935f936106fc575b50506106f6818381611aa4565b80611aa4565b610713929350803d106103c0576103b081836112e1565b9083806106e9565b6107329150853d87116104175761040981836112e1565b8561069d565b61074f9150823d84116104175761040981836112e1565b87610577565b3461010c575f60031936011261010c576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa9081156102e6576020925f926107d9575b5060405191168152f35b6107f1919250833d85116103c0576103b081836112e1565b90836107cf565b3461010c57602060031936011261010c57610811611237565b61081961184f565b6001600160a01b035f54163314610833576103969061189f565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461010c57604060031936011261010c57610885610877611237565b61087f61124d565b90611807565b5f526002602052602060405f2054604051908152f35b3461010c575f60031936011261010c5760206001600160a01b035f5416604051908152f35b3461010c57602060031936011261010c576004357fffffffff000000000000000000000000000000000000000000000000000000008116810361010c5761090860209161176b565b604051908152f35b3461010c57604060031936011261010c57610929611237565b60243567ffffffffffffffff811161010c573660238201121561010c57806004013561095481611322565b9161096260405193846112e1565b81835260208301602460608094028301019136831161010c57602401905b828210610df357858561099161184f565b805115610dcb5780515f198101908111610d595760206109b96001600160a01b039284611656565b51015116906109c88284611807565b5f9390815b8351861015610cfe576109e08685611656565b51604081015190919015610b8b576001600160a01b03825116906001600160a01b03602084015116916040517f0387587d0000000000000000000000000000000000000000000000000000000081528160048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa80156102e6576001600160a01b03915f91610b6c575b5016918215610b40576001600160a01b031691808303610aec5750808303610abb575050506001600160a01b0360206001925b0151169501946109cd565b7f29198c3d000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b828203610b0e578303610abb575050506001600160a01b036020600192610ab0565b507f29198c3d000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b507f85f41299000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b610b85915060203d6020116103c0576103b081836112e1565b8b610a7d565b926001600160a01b038293959697925116906001600160a01b0360208501511695604051987fca4f2803000000000000000000000000000000000000000000000000000000008a528360048b01525f8a6024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa998a156102e6575f9a610ce2575b505f985f935f5b8c51811015610c82578c6001600160a01b03610c3b8383611656565b51166001600160a01b038c1614610c79575b6001600160a01b03610c60838e93611656565b511614610c70575b600101610c1f565b60019550610c68565b60019c50610c4d565b509750975097909493985015908115610cd9575b50610cae57506001600160a01b036020600192610ab0565b7fb309199b000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90501588610c96565b610cf7919a503d805f833e6102d881836112e1565b988a610c18565b508284825f52600260205260405f2093610d178561166a565b50505f5b8351811015610d86578554905f198201918211610d5957610d53610d416001938961133a565b50610d4c8388611656565b51906116a2565b01610d1b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50835f5260026020527f0836045dc838da47be101a8d10036b82ec004688d856daa53cd0e56807d3bfca60206001600160a01b0360405f2054936040519485521692a3005b7f20a2d33d000000000000000000000000000000000000000000000000000000005f5260045ffd5b838236031261010c5760405190610e0982611298565b6001600160a01b038335818116810361010c5783526020840135908116810361010c576020830152604083013590811515820361010c5782602092604088950152815201910190610980565b3461010c57604060031936011261010c57610e71610877611237565b5f5260206002815260405f208054610e8881611322565b90610e9660405192836112e1565b80825283820180935f52845f20855f925b848410610f87575084866040519283928184019082855251809152604084019160408260051b86010193925f905b838210610ee25786860387f35b919395947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08592949682030183528651908280835192838152019201905f905b808210610f4357505050908060019297019201920186959492939193610ed5565b9193610f7a6001929486519060406060926001600160a01b0380825116845260208201511660208401520151151560408201520190565b9401920186939291610f22565b6001918291610f958561137c565b8152019201920191908690610ea7565b3461010c575f60031936011261010c57336001600160a01b036001541603610fd0576103963361189f565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b3461010c575f60031936011261010c5761101461188c565b5f6001600160a01b037fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461010c5761108236611263565b61108a61184f565b6110948284611807565b5f52600260205260405f20908154908181101561116b576001821180611157575b611102575b50506020816110e97fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da936115a8565b54926001600160a01b03809160405195865216941692a3005b90915f198301928311610d595761115160209261114b6111437fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da968561133a565b50918461133a565b9061156b565b916110ba565b505f198201828111610d59578114156110b5565b7f4e23d035000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461010c576111ab6111a436611263565b9291611807565b5f526111ca6111c4602092600260205260405f2061133a565b5061137c565b60405190602082016020835281518091526020604084019201935f5b8281106111f35784840385f35b9091928261122b60019288519060406060926001600160a01b0380825116845260208201511660208401520151151560408201520190565b960195939291016111e6565b600435906001600160a01b038216820361010c57565b602435906001600160a01b038216820361010c57565b600319606091011261010c576001600160a01b0390600435828116810361010c5791602435908116810361010c579060443590565b6060810190811067ffffffffffffffff8211176112b457604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176112b457604052565b67ffffffffffffffff81116112b45760051b60200190565b805482101561134f575f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b90815461138881611322565b9260409361139960405191826112e1565b82815280946020809201925f5260205f20905f935b8585106113bd57505050505050565b60028460019284516113ce81611298565b60ff6001600160a01b03808954168352868901549081168584015260a01c161515868201528152019301940193916113ae565b818114611567578154916801000000000000000083116112b4578154838355808410611501575b505f5260205f20905f5260205f20905f905b8382106114475750505050565b806001918403611462575b600280910193019101909161143a565b6114fc6001600160a01b0360ff81845416917fffffffffffffffffffffffff00000000000000000000000000000000000000009283895416178855859283890193860191825416908454161783555460a01c167fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff0000000000000000000000000000000000000000835492151560a01b169116179055565b611452565b60017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083168303610d595785168503610d5957835f5260205f209160011b8201918560011b015b828110611557575050611428565b5f80825582820155600201611549565b5050565b919061157c5761157a91611401565b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b80548015611629575f1901906115be828261133a565b61157c578054905f8155816115d257505055565b6001907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83168303610d59575f5260205f209160011b8201915b8281106116195750505055565b5f8082558282015560020161160c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b805182101561134f5760209160051b010190565b8054680100000000000000008110156112b45761168c9160018201815561133a565b9091565b80541561134f575f5260205f20905f90565b90815491680100000000000000008310156112b4576001830180825583101561134f5761157a926040915f5260205f209060011b01916001600160a01b0392600184835116917fffffffffffffffffffffffff00000000000000000000000000000000000000009283825416178155019360208301511690845416178355015115157fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff0000000000000000000000000000000000000000835492151560a01b169116179055565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526117ca81611298565b51902090565b9081602091031261010c57516001600160a01b038116810361010c5790565b9081602091031261010c5751801515810361010c5790565b6040519060208201927fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16845260601b166034820152602881526117ca81611298565b61188561187e7fffffffff000000000000000000000000000000000000000000000000000000005f351661176b565b339061198e565b1561083357565b6001600160a01b035f54163303610fd057565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f546001600160a01b0380921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b602090818184031261010c5780519067ffffffffffffffff821161010c57019180601f8401121561010c57825161193a81611322565b9361194860405195866112e1565b818552838086019260051b82010192831161010c578301905b82821061196f575050505090565b81516001600160a01b038116810361010c578152908301908301611961565b906001600160a01b039081805f54169116908114611a9c57604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156102e65785935f95611a78575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa9182156102e6575f92611a5f57505090565b611a759250803d106104175761040981836112e1565b90565b606492919550611a9490853d87116103c0576103b081836112e1565b949091611a0a565b505050600190565b91611aaf8183611807565b5f526020600260205260409160405f205f5b815480821015611bd357611ad5828461133a565b5060019081808254149182611bb2575b82611b8f575b5050611afb575050600101611ac1565b9080929697985011611b4c575b507fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da9350611b35816115a8565b5493519384526001600160a01b03908116941692a3565b5f198101908111610d59577fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da9461114b611143611b89938561133a565b5f611b08565b611b9a919250611690565b5001546001600160a01b03868116911614815f611aeb565b9150611bbd82611690565b50546001600160a01b038c811691161491611ae5565b8684897f3a9458d9000000000000000000000000000000000000000000000000000000005f526001600160a01b039283809216600452166024521660445260645ffd5b611c208383611807565b6001600160a01b03809416938060405193611c3a85611298565b16835284602084015260016040840152815f52600260205260405f2091611c608361166a565b505082545f198101908111610d59577f0836045dc838da47be101a8d10036b82ec004688d856daa53cd0e56807d3bfca94611ca0611ca69260209661133a565b506116a2565b5f526002825260405f2054936040519485521692a3565b611cc78383611807565b6001600160a01b03809416938060405193611ce185611298565b1683528460208401525f6040840152815f52600260205260405f2091611c608361166a56fea2646970667358221220c8a382897f62aa9b3b813657f2d689d3d97b0b2bc9ef3117f10b3d087f5fa65564736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x57074FF EQ PUSH2 0x1193 JUMPI DUP1 PUSH4 0x32FFFDBD EQ PUSH2 0x1074 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xFFC JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xFA5 JUMPI DUP1 PUSH4 0x7C7D370A EQ PUSH2 0xE55 JUMPI DUP1 PUSH4 0x815CA70F EQ PUSH2 0x910 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x8C0 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x89B JUMPI DUP1 PUSH4 0x94EE0A3B EQ PUSH2 0x85B JUMPI DUP1 PUSH4 0xA89B1128 EQ PUSH2 0x7F8 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x755 JUMPI DUP1 PUSH4 0xBC138AA3 EQ PUSH2 0x4E1 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x4BB JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x43B JUMPI DUP1 PUSH4 0xF335B520 EQ PUSH2 0x110 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0xC9 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x12A PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x132 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP4 PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP3 DUP5 AND SWAP1 DUP2 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x24 SWAP6 DUP2 DUP2 DUP9 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x41E JUMPI JUMPDEST POP ISZERO PUSH2 0x2F1 JUMPI POP PUSH0 SWAP1 DUP6 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x2C4 JUMPI JUMPDEST POP DUP1 MLOAD SWAP3 PUSH0 NOT DUP5 ADD SWAP4 DUP5 GT PUSH2 0x298 JUMPI PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x209 JUMPI STOP JUMPDEST PUSH1 0x1 DUP1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x26C JUMPI DUP2 JUMPDEST PUSH2 0x226 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x200 JUMP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x267 JUMPI DUP2 DUP1 SWAP2 PUSH2 0x260 DUP9 PUSH2 0x240 DUP8 DUP11 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND DUP10 PUSH2 0x24D DUP5 DUP12 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND PUSH2 0x25A DUP2 DUP4 DUP12 PUSH2 0x1CBD JUMP JUMPDEST DUP9 PUSH2 0x1CBD JUMP JUMPDEST ADD SWAP1 PUSH2 0x217 JUMP JUMPDEST PUSH2 0x21C JUMP JUMPDEST DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x2E0 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2D8 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1904 JUMP JUMPDEST DUP5 PUSH2 0x1EF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP5 SWAP4 POP SWAP2 POP PUSH1 0x40 MLOAD PUSH32 0x6844846B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 DUP6 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x3F1 JUMPI JUMPDEST POP ISZERO PUSH2 0x3C7 JUMPI DUP4 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x387587D00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP6 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2E6 JUMPI PUSH2 0x396 SWAP4 PUSH0 SWAP4 PUSH2 0x398 JUMPI JUMPDEST POP POP PUSH2 0x390 DUP2 DUP4 DUP2 PUSH2 0x1C16 JUMP JUMPDEST DUP1 PUSH2 0x1C16 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3B8 SWAP3 SWAP4 POP DUP1 RETURNDATASIZE LT PUSH2 0x3C0 JUMPI JUMPDEST PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x17D0 JUMP JUMPDEST SWAP1 DUP4 DUP1 PUSH2 0x383 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3A6 JUMP JUMPDEST POP PUSH32 0xB309199B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x411 SWAP2 POP DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x417 JUMPI JUMPDEST PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x17EF JUMP JUMPDEST DUP6 PUSH2 0x337 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3FF JUMP JUMPDEST PUSH2 0x435 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP8 PUSH2 0x1A6 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x454 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x45C PUSH2 0x188C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x4FB PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x503 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP4 PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP3 DUP5 AND SWAP1 DUP2 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x24 SWAP6 DUP2 DUP2 DUP9 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x738 JUMPI JUMPDEST POP ISZERO PUSH2 0x657 JUMPI POP PUSH0 SWAP1 DUP6 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x63D JUMPI JUMPDEST POP DUP1 MLOAD SWAP3 PUSH0 NOT DUP5 ADD SWAP4 DUP5 GT PUSH2 0x298 JUMPI PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x5DA JUMPI STOP JUMPDEST PUSH1 0x1 DUP1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x26C JUMPI DUP2 JUMPDEST PUSH2 0x5F7 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x5D1 JUMP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x638 JUMPI DUP2 DUP1 SWAP2 PUSH2 0x631 DUP9 PUSH2 0x611 DUP8 DUP11 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND DUP10 PUSH2 0x61E DUP5 DUP12 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND PUSH2 0x62B DUP2 DUP4 DUP12 PUSH2 0x1AA4 JUMP JUMPDEST DUP9 PUSH2 0x1AA4 JUMP JUMPDEST ADD SWAP1 PUSH2 0x5E8 JUMP JUMPDEST PUSH2 0x5ED JUMP JUMPDEST PUSH2 0x651 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2D8 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP5 PUSH2 0x5C0 JUMP JUMPDEST SWAP5 SWAP4 POP SWAP2 POP PUSH1 0x40 MLOAD PUSH32 0x6844846B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 DUP6 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x71B JUMPI JUMPDEST POP ISZERO PUSH2 0x3C7 JUMPI DUP4 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x387587D00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP6 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2E6 JUMPI PUSH2 0x396 SWAP4 PUSH0 SWAP4 PUSH2 0x6FC JUMPI JUMPDEST POP POP PUSH2 0x6F6 DUP2 DUP4 DUP2 PUSH2 0x1AA4 JUMP JUMPDEST DUP1 PUSH2 0x1AA4 JUMP JUMPDEST PUSH2 0x713 SWAP3 SWAP4 POP DUP1 RETURNDATASIZE LT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP1 DUP4 DUP1 PUSH2 0x6E9 JUMP JUMPDEST PUSH2 0x732 SWAP2 POP DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP6 PUSH2 0x69D JUMP JUMPDEST PUSH2 0x74F SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP8 PUSH2 0x577 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0x7D9 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x7F1 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x7CF JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x811 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x819 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND CALLER EQ PUSH2 0x833 JUMPI PUSH2 0x396 SWAP1 PUSH2 0x189F JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x885 PUSH2 0x877 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x87F PUSH2 0x124D JUMP JUMPDEST SWAP1 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI PUSH2 0x908 PUSH1 0x20 SWAP2 PUSH2 0x176B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x929 PUSH2 0x1237 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10C JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x10C JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x954 DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP2 PUSH2 0x962 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x12E1 JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x24 PUSH1 0x60 DUP1 SWAP5 MUL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x10C JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xDF3 JUMPI DUP6 DUP6 PUSH2 0x991 PUSH2 0x184F JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xDCB JUMPI DUP1 MLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0xD59 JUMPI PUSH1 0x20 PUSH2 0x9B9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP5 PUSH2 0x1656 JUMP JUMPDEST MLOAD ADD MLOAD AND SWAP1 PUSH2 0x9C8 DUP3 DUP5 PUSH2 0x1807 JUMP JUMPDEST PUSH0 SWAP4 SWAP1 DUP2 JUMPDEST DUP4 MLOAD DUP7 LT ISZERO PUSH2 0xCFE JUMPI PUSH2 0x9E0 DUP7 DUP6 PUSH2 0x1656 JUMP JUMPDEST MLOAD PUSH1 0x40 DUP2 ADD MLOAD SWAP1 SWAP2 SWAP1 ISZERO PUSH2 0xB8B JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 MLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 ADD MLOAD AND SWAP2 PUSH1 0x40 MLOAD PUSH32 0x387587D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH0 SWAP2 PUSH2 0xB6C JUMPI JUMPDEST POP AND SWAP2 DUP3 ISZERO PUSH2 0xB40 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP1 DUP4 SUB PUSH2 0xAEC JUMPI POP DUP1 DUP4 SUB PUSH2 0xABB JUMPI POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH1 0x1 SWAP3 JUMPDEST ADD MLOAD AND SWAP6 ADD SWAP5 PUSH2 0x9CD JUMP JUMPDEST PUSH32 0x29198C3D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP3 DUP3 SUB PUSH2 0xB0E JUMPI DUP4 SUB PUSH2 0xABB JUMPI POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH2 0xAB0 JUMP JUMPDEST POP PUSH32 0x29198C3D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST POP PUSH32 0x85F4129900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xB85 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP12 PUSH2 0xA7D JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 SWAP4 SWAP6 SWAP7 SWAP8 SWAP3 MLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP6 ADD MLOAD AND SWAP6 PUSH1 0x40 MLOAD SWAP9 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP4 PUSH1 0x4 DUP12 ADD MSTORE PUSH0 DUP11 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP10 DUP11 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP11 PUSH2 0xCE2 JUMPI JUMPDEST POP PUSH0 SWAP9 PUSH0 SWAP4 PUSH0 JUMPDEST DUP13 MLOAD DUP2 LT ISZERO PUSH2 0xC82 JUMPI DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC3B DUP4 DUP4 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND EQ PUSH2 0xC79 JUMPI JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC60 DUP4 DUP15 SWAP4 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND EQ PUSH2 0xC70 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0xC1F JUMP JUMPDEST PUSH1 0x1 SWAP6 POP PUSH2 0xC68 JUMP JUMPDEST PUSH1 0x1 SWAP13 POP PUSH2 0xC4D JUMP JUMPDEST POP SWAP8 POP SWAP8 POP SWAP8 SWAP1 SWAP5 SWAP4 SWAP9 POP ISZERO SWAP1 DUP2 ISZERO PUSH2 0xCD9 JUMPI JUMPDEST POP PUSH2 0xCAE JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH2 0xAB0 JUMP JUMPDEST PUSH32 0xB309199B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP ISZERO DUP9 PUSH2 0xC96 JUMP JUMPDEST PUSH2 0xCF7 SWAP2 SWAP11 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2D8 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP9 DUP11 PUSH2 0xC18 JUMP JUMPDEST POP DUP3 DUP5 DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP4 PUSH2 0xD17 DUP6 PUSH2 0x166A JUMP JUMPDEST POP POP PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0xD86 JUMPI DUP6 SLOAD SWAP1 PUSH0 NOT DUP3 ADD SWAP2 DUP3 GT PUSH2 0xD59 JUMPI PUSH2 0xD53 PUSH2 0xD41 PUSH1 0x1 SWAP4 DUP10 PUSH2 0x133A JUMP JUMPDEST POP PUSH2 0xD4C DUP4 DUP9 PUSH2 0x1656 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x16A2 JUMP JUMPDEST ADD PUSH2 0xD1B JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP4 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x836045DC838DA47BE101A8D10036B82EC004688D856DAA53CD0E56807D3BFCA PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 STOP JUMPDEST PUSH32 0x20A2D33D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLDATASIZE SUB SLT PUSH2 0x10C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0xE09 DUP3 PUSH2 0x1298 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI DUP4 MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x10C JUMPI DUP3 PUSH1 0x20 SWAP3 PUSH1 0x40 DUP9 SWAP6 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x980 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0xE71 PUSH2 0x877 PUSH2 0x1237 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x20 PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD PUSH2 0xE88 DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP1 PUSH2 0xE96 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP1 DUP3 MSTORE DUP4 DUP3 ADD DUP1 SWAP4 PUSH0 MSTORE DUP5 PUSH0 KECCAK256 DUP6 PUSH0 SWAP3 JUMPDEST DUP5 DUP5 LT PUSH2 0xF87 JUMPI POP DUP5 DUP7 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP3 DUP2 DUP5 ADD SWAP1 DUP3 DUP6 MSTORE MLOAD DUP1 SWAP2 MSTORE PUSH1 0x40 DUP5 ADD SWAP2 PUSH1 0x40 DUP3 PUSH1 0x5 SHL DUP7 ADD ADD SWAP4 SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xEE2 JUMPI DUP7 DUP7 SUB DUP8 RETURN JUMPDEST SWAP2 SWAP4 SWAP6 SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP6 SWAP3 SWAP5 SWAP7 DUP3 SUB ADD DUP4 MSTORE DUP7 MLOAD SWAP1 DUP3 DUP1 DUP4 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP3 ADD SWAP1 PUSH0 SWAP1 JUMPDEST DUP1 DUP3 LT PUSH2 0xF43 JUMPI POP POP POP SWAP1 DUP1 PUSH1 0x1 SWAP3 SWAP8 ADD SWAP3 ADD SWAP3 ADD DUP7 SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP4 PUSH2 0xED5 JUMP JUMPDEST SWAP2 SWAP4 PUSH2 0xF7A PUSH1 0x1 SWAP3 SWAP5 DUP7 MLOAD SWAP1 PUSH1 0x40 PUSH1 0x60 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SWAP5 ADD SWAP3 ADD DUP7 SWAP4 SWAP3 SWAP2 PUSH2 0xF22 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP3 SWAP2 PUSH2 0xF95 DUP6 PUSH2 0x137C JUMP JUMPDEST DUP2 MSTORE ADD SWAP3 ADD SWAP3 ADD SWAP2 SWAP1 DUP7 SWAP1 PUSH2 0xEA7 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SLOAD AND SUB PUSH2 0xFD0 JUMPI PUSH2 0x396 CALLER PUSH2 0x189F JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x1014 PUSH2 0x188C JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH2 0x1082 CALLDATASIZE PUSH2 0x1263 JUMP JUMPDEST PUSH2 0x108A PUSH2 0x184F JUMP JUMPDEST PUSH2 0x1094 DUP3 DUP5 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 DUP2 SLOAD SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x116B JUMPI PUSH1 0x1 DUP3 GT DUP1 PUSH2 0x1157 JUMPI JUMPDEST PUSH2 0x1102 JUMPI JUMPDEST POP POP PUSH1 0x20 DUP2 PUSH2 0x10E9 PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP4 PUSH2 0x15A8 JUMP JUMPDEST SLOAD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 MSTORE AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST SWAP1 SWAP2 PUSH0 NOT DUP4 ADD SWAP3 DUP4 GT PUSH2 0xD59 JUMPI PUSH2 0x1151 PUSH1 0x20 SWAP3 PUSH2 0x114B PUSH2 0x1143 PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP7 DUP6 PUSH2 0x133A JUMP JUMPDEST POP SWAP2 DUP5 PUSH2 0x133A JUMP JUMPDEST SWAP1 PUSH2 0x156B JUMP JUMPDEST SWAP2 PUSH2 0x10BA JUMP JUMPDEST POP PUSH0 NOT DUP3 ADD DUP3 DUP2 GT PUSH2 0xD59 JUMPI DUP2 EQ ISZERO PUSH2 0x10B5 JUMP JUMPDEST PUSH32 0x4E23D03500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH2 0x11AB PUSH2 0x11A4 CALLDATASIZE PUSH2 0x1263 JUMP JUMPDEST SWAP3 SWAP2 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH2 0x11CA PUSH2 0x11C4 PUSH1 0x20 SWAP3 PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x133A JUMP JUMPDEST POP PUSH2 0x137C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0x20 DUP4 MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0x40 DUP5 ADD SWAP3 ADD SWAP4 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x11F3 JUMPI DUP5 DUP5 SUB DUP6 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 DUP3 PUSH2 0x122B PUSH1 0x1 SWAP3 DUP9 MLOAD SWAP1 PUSH1 0x40 PUSH1 0x60 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SWAP7 ADD SWAP6 SWAP4 SWAP3 SWAP2 ADD PUSH2 0x11E6 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x10C JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x10C JUMPI JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x10C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B4 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B4 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x12B4 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x134F JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 SLOAD PUSH2 0x1388 DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP3 PUSH1 0x40 SWAP4 PUSH2 0x1399 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x12E1 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP1 SWAP5 PUSH1 0x20 DUP1 SWAP3 ADD SWAP3 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 SWAP4 JUMPDEST DUP6 DUP6 LT PUSH2 0x13BD JUMPI POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 DUP5 PUSH1 0x1 SWAP3 DUP5 MLOAD PUSH2 0x13CE DUP2 PUSH2 0x1298 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 SLOAD AND DUP4 MSTORE DUP7 DUP10 ADD SLOAD SWAP1 DUP2 AND DUP6 DUP5 ADD MSTORE PUSH1 0xA0 SHR AND ISZERO ISZERO DUP7 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP5 ADD SWAP4 SWAP2 PUSH2 0x13AE JUMP JUMPDEST DUP2 DUP2 EQ PUSH2 0x1567 JUMPI DUP2 SLOAD SWAP2 PUSH9 0x10000000000000000 DUP4 GT PUSH2 0x12B4 JUMPI DUP2 SLOAD DUP4 DUP4 SSTORE DUP1 DUP5 LT PUSH2 0x1501 JUMPI JUMPDEST POP PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x1447 JUMPI POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 SWAP2 DUP5 SUB PUSH2 0x1462 JUMPI JUMPDEST PUSH1 0x2 DUP1 SWAP2 ADD SWAP4 ADD SWAP2 ADD SWAP1 SWAP2 PUSH2 0x143A JUMP JUMPDEST PUSH2 0x14FC PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xFF DUP2 DUP5 SLOAD AND SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 DUP10 SLOAD AND OR DUP9 SSTORE DUP6 SWAP3 DUP4 DUP10 ADD SWAP4 DUP7 ADD SWAP2 DUP3 SLOAD AND SWAP1 DUP5 SLOAD AND OR DUP4 SSTORE SLOAD PUSH1 0xA0 SHR AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH21 0xFF0000000000000000000000000000000000000000 DUP4 SLOAD SWAP3 ISZERO ISZERO PUSH1 0xA0 SHL AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x1452 JUMP JUMPDEST PUSH1 0x1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP4 SUB PUSH2 0xD59 JUMPI DUP6 AND DUP6 SUB PUSH2 0xD59 JUMPI DUP4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH1 0x1 SHL DUP3 ADD SWAP2 DUP6 PUSH1 0x1 SHL ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x1557 JUMPI POP POP PUSH2 0x1428 JUMP JUMPDEST PUSH0 DUP1 DUP3 SSTORE DUP3 DUP3 ADD SSTORE PUSH1 0x2 ADD PUSH2 0x1549 JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x157C JUMPI PUSH2 0x157A SWAP2 PUSH2 0x1401 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 SLOAD DUP1 ISZERO PUSH2 0x1629 JUMPI PUSH0 NOT ADD SWAP1 PUSH2 0x15BE DUP3 DUP3 PUSH2 0x133A JUMP JUMPDEST PUSH2 0x157C JUMPI DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0x15D2 JUMPI POP POP SSTORE JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP4 SUB PUSH2 0xD59 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH1 0x1 SHL DUP3 ADD SWAP2 JUMPDEST DUP3 DUP2 LT PUSH2 0x1619 JUMPI POP POP POP SSTORE JUMP JUMPDEST PUSH0 DUP1 DUP3 SSTORE DUP3 DUP3 ADD SSTORE PUSH1 0x2 ADD PUSH2 0x160C JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x134F JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x12B4 JUMPI PUSH2 0x168C SWAP2 PUSH1 0x1 DUP3 ADD DUP2 SSTORE PUSH2 0x133A JUMP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST DUP1 SLOAD ISZERO PUSH2 0x134F JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 DUP2 SLOAD SWAP2 PUSH9 0x10000000000000000 DUP4 LT ISZERO PUSH2 0x12B4 JUMPI PUSH1 0x1 DUP4 ADD DUP1 DUP3 SSTORE DUP4 LT ISZERO PUSH2 0x134F JUMPI PUSH2 0x157A SWAP3 PUSH1 0x40 SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 SHL ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x1 DUP5 DUP4 MLOAD AND SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 DUP3 SLOAD AND OR DUP2 SSTORE ADD SWAP4 PUSH1 0x20 DUP4 ADD MLOAD AND SWAP1 DUP5 SLOAD AND OR DUP4 SSTORE ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH21 0xFF0000000000000000000000000000000000000000 DUP4 SLOAD SWAP3 ISZERO ISZERO PUSH1 0xA0 SHL AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x17CA DUP2 PUSH2 0x1298 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x10C JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x10C JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x10C JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 DUP1 SWAP3 PUSH1 0x60 SHL AND DUP5 MSTORE PUSH1 0x60 SHL AND PUSH1 0x34 DUP3 ADD MSTORE PUSH1 0x28 DUP2 MSTORE PUSH2 0x17CA DUP2 PUSH2 0x1298 JUMP JUMPDEST PUSH2 0x1885 PUSH2 0x187E PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x176B JUMP JUMPDEST CALLER SWAP1 PUSH2 0x198E JUMP JUMPDEST ISZERO PUSH2 0x833 JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND CALLER SUB PUSH2 0xFD0 JUMPI JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x10C JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x10C JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x10C JUMPI DUP3 MLOAD PUSH2 0x193A DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP4 PUSH2 0x1948 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x12E1 JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x10C JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x196F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1961 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x1A9C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x2E6 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x1A78 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP3 PUSH2 0x1A5F JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1A75 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x1A94 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1A0A JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x1AAF DUP2 DUP4 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x20 PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP2 PUSH1 0x40 PUSH0 KECCAK256 PUSH0 JUMPDEST DUP2 SLOAD DUP1 DUP3 LT ISZERO PUSH2 0x1BD3 JUMPI PUSH2 0x1AD5 DUP3 DUP5 PUSH2 0x133A JUMP JUMPDEST POP PUSH1 0x1 SWAP1 DUP2 DUP1 DUP3 SLOAD EQ SWAP2 DUP3 PUSH2 0x1BB2 JUMPI JUMPDEST DUP3 PUSH2 0x1B8F JUMPI JUMPDEST POP POP PUSH2 0x1AFB JUMPI POP POP PUSH1 0x1 ADD PUSH2 0x1AC1 JUMP JUMPDEST SWAP1 DUP1 SWAP3 SWAP7 SWAP8 SWAP9 POP GT PUSH2 0x1B4C JUMPI JUMPDEST POP PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP4 POP PUSH2 0x1B35 DUP2 PUSH2 0x15A8 JUMP JUMPDEST SLOAD SWAP4 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 JUMP JUMPDEST PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0xD59 JUMPI PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP5 PUSH2 0x114B PUSH2 0x1143 PUSH2 0x1B89 SWAP4 DUP6 PUSH2 0x133A JUMP JUMPDEST PUSH0 PUSH2 0x1B08 JUMP JUMPDEST PUSH2 0x1B9A SWAP2 SWAP3 POP PUSH2 0x1690 JUMP JUMPDEST POP ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND SWAP2 AND EQ DUP2 PUSH0 PUSH2 0x1AEB JUMP JUMPDEST SWAP2 POP PUSH2 0x1BBD DUP3 PUSH2 0x1690 JUMP JUMPDEST POP SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 DUP2 AND SWAP2 AND EQ SWAP2 PUSH2 0x1AE5 JUMP JUMPDEST DUP7 DUP5 DUP10 PUSH32 0x3A9458D900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP1 SWAP3 AND PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE AND PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH2 0x1C20 DUP4 DUP4 PUSH2 0x1807 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 AND SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1C3A DUP6 PUSH2 0x1298 JUMP JUMPDEST AND DUP4 MSTORE DUP5 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x40 DUP5 ADD MSTORE DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP2 PUSH2 0x1C60 DUP4 PUSH2 0x166A JUMP JUMPDEST POP POP DUP3 SLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0xD59 JUMPI PUSH32 0x836045DC838DA47BE101A8D10036B82EC004688D856DAA53CD0E56807D3BFCA SWAP5 PUSH2 0x1CA0 PUSH2 0x1CA6 SWAP3 PUSH1 0x20 SWAP7 PUSH2 0x133A JUMP JUMPDEST POP PUSH2 0x16A2 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 JUMP JUMPDEST PUSH2 0x1CC7 DUP4 DUP4 PUSH2 0x1807 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 AND SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1CE1 DUP6 PUSH2 0x1298 JUMP JUMPDEST AND DUP4 MSTORE DUP5 PUSH1 0x20 DUP5 ADD MSTORE PUSH0 PUSH1 0x40 DUP5 ADD MSTORE DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP2 PUSH2 0x1C60 DUP4 PUSH2 0x166A JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 LOG3 DUP3 DUP10 PUSH32 0x62AA9B3B813657F2D689D3D97B0B2BC9EF3117F10B3D087F5FA65564736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"1158:8825:89:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21:81;1158:8825:89;1810:21:81;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;;;;;-1:-1:-1;;;;;1348:29:81;1158:8825:89;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;;;;:::i;:::-;1525:73:33;;:::i;:::-;-1:-1:-1;;;;;3539:5:89;;1158:8825;;;3539:36;1158:8825;3539:36;;1158:8825;;;3539:36;;1158:8825;3539:36;;1158:8825;;3539:36;;;;;;;;;;;;;1158:8825;3539:36;;;1158:8825;-1:-1:-1;3535:285:89;;;1158:8825;;;;;;5057:25;;;;1158:8825;5057:25;;1158:8825;5057:25;;1158:8825;5057:25;;;;;;;1158:8825;5057:25;;;3535:285;1158:8825;;;;-1:-1:-1;;1158:8825:89;;;;;;;;5161:14;;;;;;1158:8825;5177:3;5130:1;1158:8825;;;;;;;;5201:17;5130:1;;;5196:147;5177:3;;5130:1;1158:8825;5146:13;;5239:3;1158:8825;;5220:17;;;;;5290:9;;;5896:8;5290:9;;;;;:::i;:::-;1158:8825;;5310:9;;;;;:::i;:::-;1158:8825;;5828:8;;;;;:::i;:::-;5896;;:::i;:::-;1158:8825;5201:17;;;5220;;;1158:8825;;;;;;;;;;;;;;;;;;;;5057:25;;;;;;1158:8825;5057:25;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;1158:8825;;;;;;;;;3535:285;1158:8825;;;;;;;;3634:56;;;1158:8825;3634:56;;1158:8825;3634:56;;;;;;;;;;;;1158:8825;3634:56;;;3535:285;-1:-1:-1;3630:190:89;;;1158:8825;;;;5529:34;;;;1158:8825;5529:34;;;1158:8825;5529:34;;1158:8825;5529:34;;;;;;;5896:8;5529:34;1158:8825;5529:34;;;3630:190;5828:8;;;;;;;:::i;:::-;5896;;:::i;:::-;1158:8825;5529:34;;;;;;;-1:-1:-1;5529:34:89;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;3630:190;3778:31;;1158:8825;3778:31;1158:8825;;;3778:31;3634:56;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;3539:36;;;;;;;;;;;;;;:::i;:::-;;;;1158:8825;;;;;-1:-1:-1;;1158:8825:89;;;;;;;:::i;:::-;1500:62:49;;:::i;:::-;-1:-1:-1;;;;;1158:8825:89;;;;;;1738:24:50;1158:8825:89;;;1738:24:50;1158:8825:89;;;;1777:43:50;1158:8825:89;1777:43:50;;1158:8825:89;;;;;;-1:-1:-1;;1158:8825:89;;;;;;-1:-1:-1;;;;;1311:13:50;1158:8825:89;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;;;;:::i;:::-;1525:73:33;;:::i;:::-;-1:-1:-1;;;;;4682:5:89;;1158:8825;;;4682:36;1158:8825;4682:36;;1158:8825;;;4682:36;;1158:8825;4682:36;;1158:8825;;4682:36;;;;;;;;;;;;;1158:8825;4682:36;;;1158:8825;-1:-1:-1;4678:291:89;;;1158:8825;;;;;;6508:25;;;;1158:8825;6508:25;;1158:8825;6508:25;;1158:8825;6508:25;;;;;;;1158:8825;6508:25;;;4678:291;1158:8825;;;;-1:-1:-1;;1158:8825:89;;;;;;;;6612:14;;;;;;1158:8825;6628:3;6581:1;1158:8825;;;;;;;;6652:17;6581:1;;;6647:143;6628:3;;6581:1;1158:8825;6597:13;;6690:3;1158:8825;;6671:17;;;;;6744:9;;;7016:6;6744:9;;;;;:::i;:::-;1158:8825;;6764:9;;;;;:::i;:::-;1158:8825;;6955:6;;;;;:::i;:::-;7016;;:::i;:::-;1158:8825;6652:17;;;6671;;;6508:25;;;;;;1158:8825;6508:25;;;;;;:::i;:::-;;;;4678:291;1158:8825;;;;;;;;4780:56;;;1158:8825;4780:56;;1158:8825;4780:56;;;;;;;;;;;;1158:8825;4780:56;;;4678:291;-1:-1:-1;4776:193:89;;;1158:8825;;;;8255:34;;;;1158:8825;8255:34;;;1158:8825;8255:34;;1158:8825;8255:34;;;;;;;7016:6;8255:34;1158:8825;8255:34;;;4776:193;6955:6;;;;;;;:::i;:::-;7016;;:::i;8255:34::-;;;;;;;-1:-1:-1;8255:34:89;;;;;;:::i;:::-;;;;;;4780:56;;;;;;;;;;;;;;:::i;:::-;;;;4682:36;;;;;;;;;;;;;;:::i;:::-;;;;1158:8825;;;;;-1:-1:-1;;1158:8825:89;;;;;;;;1810:21:81;;-1:-1:-1;;;;;1810:21:81;1158:8825:89;;;1810:5:81;1158:8825:89;;1810:21:81;;;;;;;;;1158:8825:89;1810:21:81;;;1158:8825:89;;;;;;;;;1810:21:81;;;;;;;;;;;;;;;:::i;:::-;;;;;1158:8825:89;;;;;-1:-1:-1;;1158:8825:89;;;;;;;:::i;:::-;1525:73:33;;:::i;:::-;-1:-1:-1;;;;;1158:8825:89;;;2423:10:81;:21;2419:77;;2524:8;;;:::i;2419:77::-;2467:18;1158:8825:89;2467:18:81;1158:8825:89;;2467:18:81;1158:8825:89;;;;;-1:-1:-1;;1158:8825:89;;;;;1962:34;1158:8825;;:::i;:::-;;;:::i;:::-;1962:34;;:::i;:::-;1158:8825;;2013:13;1158:8825;;;;;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1525:73:33;;;;:::i;:::-;1158:8825:89;;2447:17;2443:66;;1158:8825;;-1:-1:-1;;1158:8825:89;;;;;;;;2546:23;-1:-1:-1;;;;;2546:23:89;;;:::i;:::-;;:32;1158:8825;;2607:34;;;;;:::i;:::-;1158:8825;;2652:29;;2729:3;1158:8825;;2711:16;;;;;2775:8;;;;:::i;:::-;;1158:8825;2801:13;;1158:8825;2775:8;;2801:13;1158:8825;;;-1:-1:-1;;;;;1158:8825:89;;;2883:13;-1:-1:-1;;;;;1158:8825:89;2883:13;;1158:8825;;;;;;8689:38;;;1158:8825;8689:38;;1158:8825;;8689:5;1158:8825;8689:5;-1:-1:-1;;;;;8689:5:89;1158:8825;8689:38;;;;;;-1:-1:-1;;;;;8689:38:89;1158:8825;8689:38;;;2797:217;1158:8825;;8743:24;;;8739:90;;-1:-1:-1;;;;;1158:8825:89;;8843:21;;;;;8915:27;;;;8911:117;;8839:551;;;-1:-1:-1;;;;;1158:8825:89;2567:1;8839:551;;3105:13;1158:8825;;2729:3;1158:8825;2696:13;;;8911:117;8969:44;1158:8825;8969:44;1158:8825;;;;;;;;8969:44;8839:551;9048:17;;;1158:8825;;9119:31;;9115:121;;9044:346;;;-1:-1:-1;;;;;1158:8825:89;2567:1;9044:346;8839:551;;9044:346;9335:44;;1158:8825;9335:44;1158:8825;;;;;;;;9335:44;8739:90;8790:28;;1158:8825;8790:28;1158:8825;;;;8790:28;8689:38;;;;1158:8825;8689:38;1158:8825;8689:38;;;;;;;:::i;:::-;;;;2797:217;1158:8825;-1:-1:-1;;;;;1158:8825:89;;;;;;;;2984:13;-1:-1:-1;;;;;1158:8825:89;2984:13;;1158:8825;;;;;9524:25;1158:8825;9524:25;;;1158:8825;9524:25;;1158:8825;;9524:5;1158:8825;9524:5;-1:-1:-1;;;;;9524:5:89;1158:8825;9524:25;;;;;;;1158:8825;9524:25;;;2797:217;9560:20;1158:8825;9590:21;1158:8825;9627:13;1158:8825;9661:3;1158:8825;;9642:17;;;;;9684:9;-1:-1:-1;;;;;9684:9:89;;;;:::i;:::-;1158:8825;;-1:-1:-1;;;;;1158:8825:89;;9684:28;9680:81;;9661:3;-1:-1:-1;;;;;9778:9:89;;;;;:::i;:::-;1158:8825;;9778:29;9774:83;;9661:3;2567:1;1158:8825;9627:13;;9774:83;2567:1;;-1:-1:-1;9774:83:89;;9680:81;2567:1;;-1:-1:-1;9680:81:89;;9642:17;;;;;;;;;;;;1158:8825;;;;9881:37;;9622:245;9877:98;;;2797:217;-1:-1:-1;;;;;1158:8825:89;2567:1;2797:217;;;9877:98;9941:23;1158:8825;9941:23;1158:8825;;;;9941:23;9881:37;1158:8825;;;9881:37;;;9524:25;;;;;;;1158:8825;9524:25;;;;;;:::i;:::-;;;;;2711:16;;;;1158:8825;;;3173:13;1158:8825;;;;;3205:12;;;;:::i;:::-;3232:13;;1158:8825;3265:3;1158:8825;;3247:16;;;;;1158:8825;;;-1:-1:-1;;1158:8825:89;;;;;;;3284:38;:23;2567:1;3284:23;;;:::i;:::-;3313:8;;;;;:::i;:::-;;3284:38;;:::i;:::-;1158:8825;3232:13;;1158:8825;;;;;;;;;;3247:16;;;1158:8825;;3173:13;1158:8825;;3347:59;1158:8825;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;3347:59;;1158:8825;2443:66;2487:11;1158:8825;2487:11;1158:8825;;2487:11;1158:8825;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;;2223:34;1158:8825;;:::i;2223:34::-;1158:8825;;;2274:13;1158:8825;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;;735:10:64;-1:-1:-1;;;;;1311:13:50;1158:8825:89;;2339:24:50;2335:96;;2459:6;735:10:64;2459:6:50;:::i;2335:96::-;2386:34;1158:8825:89;2386:34:50;735:10:64;1158:8825:89;;;;2386:34:50;1158:8825:89;;;;;-1:-1:-1;;1158:8825:89;;;;;1500:62:49;;:::i;:::-;1158:8825:89;-1:-1:-1;;;;;1158:8825:89;;2093:20:50;1158:8825:89;;2093:20:50;1158:8825:89;;;;;;;;;3052:40:49;;;;1158:8825:89;;;;;;;;:::i;:::-;1525:73:33;;:::i;:::-;3998:34:89;;;;:::i;:::-;1158:8825;;4075:13;1158:8825;;;;;;;;4156:20;;;;;4152:76;;4256:1;4242:15;;:43;;;1158:8825;4238:111;;1158:8825;4475:9;;1158:8825;4475:9;;4502:44;4475:9;;:::i;:::-;1158:8825;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;4502:44;;1158:8825;4238:111;1158:8825;;-1:-1:-1;;1158:8825:89;;;;;;;4301:37;1158:8825;4316:22;4301:12;4316:22;4502:44;4316:22;;;:::i;:::-;4301:12;;;;:::i;:::-;:37;;:::i;:::-;4238:111;;;4242:43;1158:8825;-1:-1:-1;;1158:8825:89;;;;;;;4261:24;;;4242:43;;4152:76;4199:18;1158:8825;4199:18;1158:8825;;4199:18;1158:8825;;;;1713:34;1158:8825;;;:::i;:::-;1713:34;;;:::i;:::-;1158:8825;;;1764:29;1158:8825;;1764:13;1158:8825;;;;;1764:29;:::i;:::-;1158:8825;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;:::o;:::-;-1:-1:-1;;1158:8825:89;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;1158:8825:89;;-1:-1:-1;1158:8825:89;;;-1:-1:-1;1158:8825:89;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;1158:8825:89;;-1:-1:-1;1158:8825:89;;-1:-1:-1;1158:8825:89;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1158:8825:89;;-1:-1:-1;1158:8825:89;;-1:-1:-1;1158:8825:89;;-1:-1:-1;1158:8825:89;;-1:-1:-1;1158:8825:89;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1158:8825:89;;-1:-1:-1;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1158:8825:89;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;7366:1;1158:8825;;7366:1;1158:8825;;7366:1;1158:8825;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1158:8825:89;;-1:-1:-1;1158:8825:89;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1931:430:33;1158:8825:89;;;2303:50:33;;;2320:22;;1158:8825:89;;;;;;;2303:50:33;;;;;;:::i;:::-;1158:8825:89;2293:61:33;;1931:430;:::o;1158:8825:89:-;;;;;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;8391:162::-;1158:8825;;8510:35;;;;1158:8825;;;;;;;;;;;;;;;;8510:35;;;;;;:::i;1688:201:33:-;1798:33;1762:20;1774:7;;;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;1688:201::o;1796:162:49:-;-1:-1:-1;;;;;1710:6:49;1158:8825:89;;735:10:64;1855:23:49;1851:101;;1796:162::o;2011:153:50:-;1158:8825:89;;;2093:20:50;1158:8825:89;;2093:20:50;1158:8825:89;2093:20:50;1158:8825:89;-1:-1:-1;;;;;1158:8825:89;;;;;;;;2093:20:50;1158:8825:89;;3052:40:49;2093:20:50;3052:40:49;;2011:153:50:o;1158:8825:89:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;2546:382:81;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;2721:15:81;;;2717:57;;1158:8825:89;;2858:21:81;1158:8825:89;2858:21:81;;;:5;;;:21;:5;;;1158:8825:89;2858:21:81;;;;;;;;;1158:8825:89;2858:21:81;;;2546:382;1158:8825:89;;;;;;2858:63:81;;;;;1158:8825:89;2858:63:81;;:21;:63;;1158:8825:89;;;;;2915:4:81;1158:8825:89;;;;;2858:63:81;;;;;;;1158:8825:89;2858:63:81;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;-1:-1:-1;2858:63:81;;;;;;:::i;:::-;2546:382;:::o;2858:21::-;1158:8825:89;2858:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o;7036:1122:89:-;;7161:34;;;;:::i;:::-;-1:-1:-1;1158:8825:89;;7239:13;1158:8825;;;;;-1:-1:-1;1158:8825:89;-1:-1:-1;7387:3:89;1158:8825;;7369:16;;;;;;7437:8;;;;:::i;:::-;7480:1;;1158:8825;;;;;7464:17;:50;;;;7387:3;7464:92;;;7387:3;7460:504;;;;7387:3;;7480:1;1158:8825;7354:13;;7460:504;7691:16;;;;;;;;7687:97;;7460:504;7846:9;7880:44;7846:9;;;;;:::i;:::-;1158:8825;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;7880:44;7943:7::o;7687:97::-;-1:-1:-1;;1158:8825:89;;;;;;;7880:44;7742:23;7731:8;7742:23;7731:34;7742:23;;;:::i;7731:34::-;7687:97;;;7464:92;7526:8;;;;;:::i;:::-;-1:-1:-1;7526:17:89;1158:8825;-1:-1:-1;;;;;1158:8825:89;;;;;7518:38;7464:92;;;;:50;7485:8;;;;;:::i;:::-;-1:-1:-1;1158:8825:89;-1:-1:-1;;;;;1158:8825:89;;;;;7485:29;;7464:50;;7369:16;;;;8101:50;-1:-1:-1;8101:50:89;-1:-1:-1;;;;;1158:8825:89;;;;;8101:50;1158:8825;;;;;;;;-1:-1:-1;8101:50:89;5918:505;6055:34;;;;:::i;:::-;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;:::i;:::-;;;;6126:84;;;;1158:8825;5650:4;1158:8825;6126:84;;1158:8825;;-1:-1:-1;1158:8825:89;6254:13;6126:84;1158:8825;;-1:-1:-1;1158:8825:89;6286:12;;;;:::i;:::-;1158:8825;;;;-1:-1:-1;;1158:8825:89;;;;;;;6357:59;6308:23;;:34;:23;6126:84;6308:23;;:::i;:::-;:34;;:::i;:::-;-1:-1:-1;1158:8825:89;6254:13;1158:8825;;;-1:-1:-1;1158:8825:89;;;;;;;;;6357:59;;5918:505::o;:::-;6055:34;;;;:::i;:::-;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;:::i;:::-;;;;6126:84;;;;1158:8825;;;6126:84;;1158:8825;;;;6254:13;6126:84;1158:8825;;;;6286:12;;;;:::i"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","addPath(address,(address,address,bool)[])":"815ca70f","addSimplePath(address)":"f335b520","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getPathAt(address,address,uint256)":"057074ff","getPathCount(address,address)":"94ee0a3b","getPaths(address,address)":"7c7d370a","owner()":"8da5cb5b","pendingOwner()":"e30c3978","removePathAtIndex(address,address,uint256)":"32fffdbd","removeSimplePath(address)":"bc138aa3","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"buffer\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyPath\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"buffer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"InvalidBufferPath\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolOrBuffer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"InvalidRemovePath\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"path\",\"type\":\"address\"}],\"name\":\"InvalidSimplePath\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pathsLength\",\"type\":\"uint256\"}],\"name\":\"PathAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pathsLength\",\"type\":\"uint256\"}],\"name\":\"PathRemoved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"}],\"name\":\"addPath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolOrBuffer\",\"type\":\"address\"}],\"name\":\"addSimplePath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getPathAt\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct SwapPathStep[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"getPathCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"getPaths\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct SwapPathStep[][]\",\"name\":\"\",\"type\":\"tuple[][]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"removePathAtIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolOrBuffer\",\"type\":\"address\"}],\"name\":\"removeSimplePath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The paths are stored as arrays of `SwapPathStep` structs, which contain the pool or buffer address, the output token, and a boolean indicating whether the step is a buffer or not. Functions that add information to the registry are permissioned.\",\"errors\":{\"BufferNotInitialized(address)\":[{\"params\":{\"buffer\":\"The address of the uninitialized buffer\"}}],\"InvalidBufferPath(address,address,address)\":[{\"params\":{\"buffer\":\"The address of the buffer\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}}],\"InvalidRemovePath(address,address,address)\":[{\"params\":{\"poolOrBuffer\":\"The address of the pool or buffer\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}}],\"InvalidSimplePath(address)\":[{\"params\":{\"path\":\"Pool or buffer address\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"PathAdded(address,address,uint256)\":{\"params\":{\"pathsLength\":\"The number of paths added for the token pair\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}},\"PathRemoved(address,address,uint256)\":{\"params\":{\"pathsLength\":\"The number of paths associated with the token pair after the removal\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"addPath(address,(address,address,bool)[])\":{\"details\":\"This function is permissioned. Use it to register boosted pool paths with leading / trailing buffer steps. The registry will validate that each step is valid (i.e. each pool step contains the `tokenIn` and `tokenOut`, and each buffer step has the correct wrapped / underlying token).\",\"params\":{\"steps\":\"An array of `SwapPathStep` structs representing the path steps to reach the output token\",\"tokenIn\":\"The address of the input token in the pair\"}},\"addSimplePath(address)\":{\"details\":\"This function is permissioned.\",\"params\":{\"poolOrBuffer\":\"The address of the pool or buffer\"}},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getPathAt(address,address,uint256)\":{\"details\":\"Safe version; reverts if the index is out of bounds.\",\"params\":{\"index\":\"The index of the path in the list of paths for the token pair\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"},\"returns\":{\"_0\":\"The path at the specified index for the token pair\"}},\"getPathCount(address,address)\":{\"params\":{\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"},\"returns\":{\"_0\":\"The number of paths registered for the token pair\"}},\"getPaths(address,address)\":{\"params\":{\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"},\"returns\":{\"_0\":\"An array of path addresses registered for the token pair\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"removePathAtIndex(address,address,uint256)\":{\"details\":\"This function is permissioned.\",\"params\":{\"index\":\"The index of the path to remove in the list of paths for the token pair\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}},\"removeSimplePath(address)\":{\"details\":\"This function is permissioned.\",\"params\":{\"poolOrBuffer\":\"The address of the pool or buffer\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"BufferNotInitialized(address)\":[{\"notice\":\"The given buffer address does not correspond to an initialized buffer.\"}],\"EmptyPath()\":[{\"notice\":\"The path to add cannot be empty.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"Attempted to remove a path at an index beyond the registered length.\"}],\"InvalidBufferPath(address,address,address)\":[{\"notice\":\"The output token does not match the expected address in a wrap or unwrap operation.\"}],\"InvalidRemovePath(address,address,address)\":[{\"notice\":\"The given pool or buffer is not registered as a path for the token pair.\"}],\"InvalidSimplePath(address)\":[{\"notice\":\"The given address is not a valid pool or buffer.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"events\":{\"PathAdded(address,address,uint256)\":{\"notice\":\"Emitted when a new token pair is added to the registry.\"},\"PathRemoved(address,address,uint256)\":{\"notice\":\"Emitted when an existing token pair is removed from the registry.\"}},\"kind\":\"user\",\"methods\":{\"addPath(address,(address,address,bool)[])\":{\"notice\":\"Adds an arbitrary path between `tokenIn` and the last step's `tokenOut` to the registry.\"},\"addSimplePath(address)\":{\"notice\":\"Adds a pool or buffer to the registry with all token pairs it supports.\"},\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"},\"getPathAt(address,address,uint256)\":{\"notice\":\"Returns the path for a given token pair at a specific index.\"},\"getPathCount(address,address)\":{\"notice\":\"Returns the number of paths registered for a given token pair.\"},\"getPaths(address,address)\":{\"notice\":\"Returns the paths registered for a given token pair.\"},\"removePathAtIndex(address,address,uint256)\":{\"notice\":\"Removes an arbitrary path from the registry at a given index.\"},\"removeSimplePath(address)\":{\"notice\":\"Removes all token paths registered for a given pool or buffer.\"}},\"notice\":\"Stores token pair swap paths on-chain, allowing an admin to maintain swap routes.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/TokenPairRegistry.sol\":\"TokenPairRegistry\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol\":{\"keccak256\":\"0xd4b893a6f835f8bdf514b99a4bd0ba00cd54d0b575f675abd95efd99742b0fb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3cf813c85596cffa3198175d9d288c643937b6629166832cebd3878d192e04c3\",\"dweb:/ipfs/QmXnK5iKZ9ZJ4sEUqJbTJ2UWpqbbehkwLZT8WraPcnDCDh\"]},\"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol\":{\"keccak256\":\"0x956f0a455276ada0193331696b9e3402d8b32fbacc5a5d7fa659ff4b5a2fc47a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03169eeb5ca1b2594fce7f13fb06e268545044c4501b6d1f98b8e86dff788afc\",\"dweb:/ipfs/QmPLsewKZZoG4QaeQEn1WGsaCKyABsYku4KgLQtumTAyVv\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\":{\"keccak256\":\"0xa981b2a584a81920bc4bd25570ce31f83890bdd41174e11d230e9da179a29468\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5908435bef8ce18bed32900d668530bade6d9207059cbc3ad2460c5e41eba532\",\"dweb:/ipfs/QmZZePBFw5vkoZZNKt9q5PBCFNuGS9LJABAMjAaG6kg6u8\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/TokenPairRegistry.sol\":{\"keccak256\":\"0xd11748453140ed8348635fff6a4a12da8c5bbc4cfdf3b4b7b30c8e7130d3b993\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://081e50c993a489c673a38e4ce2f720857b2cbbd468b77a8adc1c95434055d98f\",\"dweb:/ipfs/QmPiC1Y1o9gVRGvtpWFGFs3Tmi3i2NQtmUwNiznUKtyQ5v\"]}},\"version\":1}"}},"contracts/test/FeeBurnerAuthenticationMock.sol":{"FeeBurnerAuthenticationMock":{"abi":[{"inputs":[{"internalType":"contract IProtocolFeeSweeper","name":"protocolFeeSweeper","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidProtocolFeeSweeper","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualOnlyFeeRecipientOrOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualOnlyProtocolFeeSweeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeSweeper","outputs":[{"internalType":"contract IProtocolFeeSweeper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a0346100f657601f61065638819003918201601f19168301916001600160401b038311848410176100fa5780849260409485528339810103126100f65780516001600160a01b0391828216908183036100f657602001518381168091036100f65780156100e35760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3156100d457608052610547908161010f823960805181818160ca015281816102dd01526104a10152f35b63932c92a560e01b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe608060409080825260049081361015610016575f80fd5b5f3560e01c908163178ac96e1461047757508063715018a6146103f257806379ba5097146103385780638da5cb5b146103055780638ec20833146102b5578063e30c397814610281578063f2fde38b146101f45763f405ce4414610078575f80fd5b346101b2575f6003193601126101b25773ffffffffffffffffffffffffffffffffffffffff82517f4ccb20c00000000000000000000000000000000000000000000000000000000081526020818481857f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101ea578293945f92610145575b5050163314159081610137575b5061011157005b7f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90505f54163314155f61010a565b915091506020903d6020116101e2575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011683019083821067ffffffffffffffff8311176101b657526020908201829003126101b2575181811681036101b25781905f806100fd565b5f80fd5b6041867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b3d9150610155565b84513d5f823e3d90fd5b50346101b25760206003193601126101b2573573ffffffffffffffffffffffffffffffffffffffff8082168092036101b25761022e6104c5565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b82346101b2575f6003193601126101b25760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50346101b2575f6003193601126101b25773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361011157005b82346101b2575f6003193601126101b25760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50346101b2575f6003193601126101b2576001549073ffffffffffffffffffffffffffffffffffffffff9033828416036103c757507fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b346101b2575f6003193601126101b25761040a6104c5565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101b2575f6003193601126101b25760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b73ffffffffffffffffffffffffffffffffffffffff5f541633036104e557565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffdfea264697066735822122038f5d9fd03f05eb911f88bdf390163e3b48e829e643ec61bad0b6dc300adc56864736f6c634300081b0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH2 0xF6 JUMPI PUSH1 0x1F PUSH2 0x656 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0xFA JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0xF6 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0xF6 JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0xF6 JUMPI DUP1 ISZERO PUSH2 0xE3 JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ISZERO PUSH2 0xD4 JUMPI PUSH1 0x80 MSTORE PUSH2 0x547 SWAP1 DUP2 PUSH2 0x10F DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0xCA ADD MSTORE DUP2 DUP2 PUSH2 0x2DD ADD MSTORE PUSH2 0x4A1 ADD MSTORE RETURN JUMPDEST PUSH4 0x932C92A5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x178AC96E EQ PUSH2 0x477 JUMPI POP DUP1 PUSH4 0x715018A6 EQ PUSH2 0x3F2 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x338 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x8EC20833 EQ PUSH2 0x2B5 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x281 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1F4 JUMPI PUSH4 0xF405CE44 EQ PUSH2 0x78 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 DUP5 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1EA JUMPI DUP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0x145 JUMPI JUMPDEST POP POP AND CALLER EQ ISZERO SWAP1 DUP2 PUSH2 0x137 JUMPI JUMPDEST POP PUSH2 0x111 JUMPI STOP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP PUSH0 SLOAD AND CALLER EQ ISZERO PUSH0 PUSH2 0x10A JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x20 SWAP1 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1E2 JUMPI JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP4 ADD AND DUP4 ADD SWAP1 DUP4 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x1B6 JUMPI MSTORE PUSH1 0x20 SWAP1 DUP3 ADD DUP3 SWAP1 SUB SLT PUSH2 0x1B2 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x1B2 JUMPI DUP2 SWAP1 PUSH0 DUP1 PUSH2 0xFD JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x41 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x155 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1B2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1B2 JUMPI PUSH2 0x22E PUSH2 0x4C5 JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x111 JUMPI STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x1 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 CALLER DUP3 DUP5 AND SUB PUSH2 0x3C7 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH2 0x40A PUSH2 0x4C5 JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x4E5 JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CODESIZE CREATE2 0xD9 REVERT SUB CREATE MCOPY 0xB9 GT 0xF8 DUP12 0xDF CODECOPY ADD PUSH4 0xE3B48E82 SWAP15 PUSH5 0x3EC61BAD0B PUSH14 0xC300ADC56864736F6C634300081B STOP CALLER ","sourceMap":"349:452:90:-:0;;;;;;;;;;;;;-1:-1:-1;;349:452:90;;;;-1:-1:-1;;;;;349:452:90;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;349:452:90;;;;;;;;;;;;;;;;;;;;;1273:26:49;;1269:95;;349:452:90;;;;;;;;2093:20:50;349:452:90;;2093:20:50;349:452:90;;-1:-1:-1;349:452:90;;;;;-1:-1:-1;349:452:90;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1203:42:78;1199:107;;1316:40;;349:452:90;;;;;;1316:40:78;349:452:90;;;;;;;;;;;;;;;;1199:107:78;1268:27;;;-1:-1:-1;1268:27:78;;-1:-1:-1;1268:27:78;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;349:452:90;;-1:-1:-1;1322:31:49;349:452:90;-1:-1:-1;349:452:90;;;;;;-1:-1:-1;349:452:90;;;;;-1:-1:-1;349:452:90"},"deployedBytecode":{"functionDebugData":{"fun_checkOwner":{"entryPoint":1221,"id":9423,"parameterSlots":0,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"19771":[{"length":32,"start":202},{"length":32,"start":733},{"length":32,"start":1185}]},"linkReferences":{},"object":"608060409080825260049081361015610016575f80fd5b5f3560e01c908163178ac96e1461047757508063715018a6146103f257806379ba5097146103385780638da5cb5b146103055780638ec20833146102b5578063e30c397814610281578063f2fde38b146101f45763f405ce4414610078575f80fd5b346101b2575f6003193601126101b25773ffffffffffffffffffffffffffffffffffffffff82517f4ccb20c00000000000000000000000000000000000000000000000000000000081526020818481857f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101ea578293945f92610145575b5050163314159081610137575b5061011157005b7f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90505f54163314155f61010a565b915091506020903d6020116101e2575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011683019083821067ffffffffffffffff8311176101b657526020908201829003126101b2575181811681036101b25781905f806100fd565b5f80fd5b6041867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b3d9150610155565b84513d5f823e3d90fd5b50346101b25760206003193601126101b2573573ffffffffffffffffffffffffffffffffffffffff8082168092036101b25761022e6104c5565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b82346101b2575f6003193601126101b25760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50346101b2575f6003193601126101b25773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361011157005b82346101b2575f6003193601126101b25760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50346101b2575f6003193601126101b2576001549073ffffffffffffffffffffffffffffffffffffffff9033828416036103c757507fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b346101b2575f6003193601126101b25761040a6104c5565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101b2575f6003193601126101b25760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b73ffffffffffffffffffffffffffffffffffffffff5f541633036104e557565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffdfea264697066735822122038f5d9fd03f05eb911f88bdf390163e3b48e829e643ec61bad0b6dc300adc56864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x178AC96E EQ PUSH2 0x477 JUMPI POP DUP1 PUSH4 0x715018A6 EQ PUSH2 0x3F2 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x338 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x8EC20833 EQ PUSH2 0x2B5 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x281 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1F4 JUMPI PUSH4 0xF405CE44 EQ PUSH2 0x78 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 DUP5 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1EA JUMPI DUP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0x145 JUMPI JUMPDEST POP POP AND CALLER EQ ISZERO SWAP1 DUP2 PUSH2 0x137 JUMPI JUMPDEST POP PUSH2 0x111 JUMPI STOP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP PUSH0 SLOAD AND CALLER EQ ISZERO PUSH0 PUSH2 0x10A JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x20 SWAP1 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1E2 JUMPI JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP4 ADD AND DUP4 ADD SWAP1 DUP4 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x1B6 JUMPI MSTORE PUSH1 0x20 SWAP1 DUP3 ADD DUP3 SWAP1 SUB SLT PUSH2 0x1B2 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x1B2 JUMPI DUP2 SWAP1 PUSH0 DUP1 PUSH2 0xFD JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x41 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x155 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1B2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1B2 JUMPI PUSH2 0x22E PUSH2 0x4C5 JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x111 JUMPI STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x1 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 CALLER DUP3 DUP5 AND SUB PUSH2 0x3C7 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH2 0x40A PUSH2 0x4C5 JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x4E5 JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CODESIZE CREATE2 0xD9 REVERT SUB CREATE MCOPY 0xB9 GT 0xF8 DUP12 0xDF CODECOPY ADD PUSH4 0xE3B48E82 SWAP15 PUSH5 0x3EC61BAD0B PUSH14 0xC300ADC56864736F6C634300081B STOP CALLER ","sourceMap":"349:452:90:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;349:452:90;;;;;;;;;956:36:78;;;:18;;;;;349:452:90;956:36:78;;;;;;;;;;349:452:90;956:36:78;;;349:452:90;;;;942:10:78;:50;;:75;;;;349:452:90;938:131:78;;;349:452:90;938:131:78;1040:18;349:452:90;1040:18:78;349:452:90;1040:18:78;942:75;349:452:90;;;;;942:10:78;996:21;;942:75;;;956:36;;;;;;;;;;;;;349:452:90;;;;;;;;;;;;;;;;;;956:36:78;;;;349:452:90;;;;;;;;;;;;;;956:36:78;;;;;;349:452:90;;;;;;;;;;;;;;956:36:78;;;-1:-1:-1;956:36:78;;;349:452:90;;;;;;;;;;;;;;;-1:-1:-1;;349:452:90;;;;;;;;;;;;;;;1500:62:49;;:::i;:::-;349:452:90;;1738:24:50;349:452:90;;;1738:24:50;349:452:90;;;;1777:43:50;349:452:90;1777:43:50;;349:452:90;;;;;;;-1:-1:-1;;349:452:90;;;;;;;;1311:13:50;349:452:90;;;;;;;;;;;;;;-1:-1:-1;;349:452:90;;;;;;799:18:78;349:452:90;777:10:78;:41;773:97;;349:452:90;;;;;;;-1:-1:-1;;349:452:90;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;349:452:90;;;;;1311:13:50;349:452:90;;;735:10:64;;349:452:90;;;2339:24:50;2335:96;;349:452:90;;;;;1311:13:50;349:452:90;;;735:10:64;;349:452:90;;;;;;735:10:64;349:452:90;;3052:40:49;349:452:90;3052:40:49;;349:452:90;2335:96:50;2386:34;349:452:90;2386:34:50;735:10:64;349:452:90;;;;2386:34:50;349:452:90;;;;;-1:-1:-1;;349:452:90;;;;;1500:62:49;;:::i;:::-;349:452:90;;;;2093:20:50;349:452:90;;2093:20:50;349:452:90;;;;;;;;;3052:40:49;;;;349:452:90;;;;;;-1:-1:-1;;349:452:90;;;;;;479:55:78;349:452:90;479:55:78;349:452:90;;;;1796:162:49;349:452:90;1710:6:49;349:452:90;;735:10:64;1855:23:49;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:64;1901:40:49;349:452:90;;1710:6:49;1901:40"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","manualOnlyFeeRecipientOrOwner()":"f405ce44","manualOnlyProtocolFeeSweeper()":"8ec20833","owner()":"8da5cb5b","pendingOwner()":"e30c3978","protocolFeeSweeper()":"178ac96e","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"protocolFeeSweeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeSweeper\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualOnlyFeeRecipientOrOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualOnlyProtocolFeeSweeper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFeeSweeper\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidProtocolFeeSweeper()\":[{\"notice\":\"The fee protocol is invalid.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/FeeBurnerAuthenticationMock.sol\":\"FeeBurnerAuthenticationMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"contracts/FeeBurnerAuthentication.sol\":{\"keccak256\":\"0x4861db67bf113a4775c165241802df34a6c0e9fefaec82e8aaf969b5879759f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f522b3af683e09e1b67ed515be9972e7cf9514a584e264c4ca9656cc12c2f06\",\"dweb:/ipfs/QmNYqMsvWcNqACozLm3cYeR4oC3KKfKNBDSqR3vcpjv3zo\"]},\"contracts/test/FeeBurnerAuthenticationMock.sol\":{\"keccak256\":\"0xb5e7ba14717b87abf9cdf5fa11f1c22897abcaf828cf79e30353fc2d6e00c7e6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b2686f5a5c9fc53139e1110a32b6fee6ab2b08e0fb6490db942d4c68c7339a4d\",\"dweb:/ipfs/QmZmQf75fe96NMQXcen6trFGcxmNWkhdF8atir5L78ppUj\"]}},\"version\":1}"}},"contracts/test/OwnableAuthenticationMock.sol":{"OwnableAuthenticationMock":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"permissionedFunction","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461010357601f61092b38819003918201601f19168301916001600160401b038311848410176101075780849260409485528339810103126101035780516001600160a01b03918282169081830361010357602001518381168091036101035780156100f05760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100e15760a05261080f908161011c8239608051816104f7015260a05181818160b60152818161020c01526106e80152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f3560e01c908163715018a6146103d957816379ba509714610376578163851c1bb3146103265781638da5cb5b146102f3578163a89b112814610281578163aaabadc5146101b8578163c1d080101461019e578163e30c39781461016a578163f2fde38b146100de575063fbfa77cf1461008b575f80fd5b346100da575f6003193601126100da576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b346100da5760206003193601126100da573573ffffffffffffffffffffffffffffffffffffffff8082168092036100da5761011761056e565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b82346100da575f6003193601126100da5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b346100da575f6003193601126100da576101b661062c565b005b9050346100da575f6003193601126100da5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561027757926020935f93610248575b505191168152f35b610269919350843d8611610270575b610261818361045e565b810190610542565b915f610240565b503d610257565b83513d5f823e3d90fd5b346100da5760206003193601126100da57803573ffffffffffffffffffffffffffffffffffffffff80821682036100da576102ba61062c565b5f541633146102cc576101b6906105ba565b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b82346100da575f6003193601126100da5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b9050346100da5760206003193601126100da5735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100da5761036f6020926104cc565b9051908152f35b346100da575f6003193601126100da573373ffffffffffffffffffffffffffffffffffffffff60015416036103ae576101b6336105ba565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b346100da575f6003193601126100da576103f161056e565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761049f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff82111761049f5760405251902090565b908160209103126100da575173ffffffffffffffffffffffffffffffffffffffff811681036100da5790565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361058e57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b61066261065b7fffffffff000000000000000000000000000000000000000000000000000000005f35166104cc565b3390610691565b1561066957565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146107d157604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156107a25785935f956107ad575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa9182156107a2575f9261076f57505090565b90809250813d831161079b575b610786818361045e565b810103126100da575180151581036100da5790565b503d61077c565b6040513d5f823e3d90fd5b6064929195506107c990853d871161027057610261818361045e565b94909161071a565b50505060019056fea2646970667358221220248f838b072c70b516f68d61cba8d45e5457802995051bda0db4d4d92f2fe24964736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x103 JUMPI PUSH1 0x1F PUSH2 0x92B CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x107 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x103 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x103 JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x103 JUMPI DUP1 ISZERO PUSH2 0xF0 JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xE1 JUMPI PUSH1 0xA0 MSTORE PUSH2 0x80F SWAP1 DUP2 PUSH2 0x11C DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x4F7 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xB6 ADD MSTORE DUP2 DUP2 PUSH2 0x20C ADD MSTORE PUSH2 0x6E8 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x715018A6 EQ PUSH2 0x3D9 JUMPI DUP2 PUSH4 0x79BA5097 EQ PUSH2 0x376 JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x326 JUMPI DUP2 PUSH4 0x8DA5CB5B EQ PUSH2 0x2F3 JUMPI DUP2 PUSH4 0xA89B1128 EQ PUSH2 0x281 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x1B8 JUMPI DUP2 PUSH4 0xC1D08010 EQ PUSH2 0x19E JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x16A JUMPI DUP2 PUSH4 0xF2FDE38B EQ PUSH2 0xDE JUMPI POP PUSH4 0xFBFA77CF EQ PUSH2 0x8B JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xDA JUMPI PUSH2 0x117 PUSH2 0x56E JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH2 0x1B6 PUSH2 0x62C JUMP JUMPDEST STOP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x277 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x248 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x269 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x270 JUMPI JUMPDEST PUSH2 0x261 DUP2 DUP4 PUSH2 0x45E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x542 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x240 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x257 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP3 SUB PUSH2 0xDA JUMPI PUSH2 0x2BA PUSH2 0x62C JUMP JUMPDEST PUSH0 SLOAD AND CALLER EQ PUSH2 0x2CC JUMPI PUSH2 0x1B6 SWAP1 PUSH2 0x5BA JUMP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xDA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xDA JUMPI PUSH2 0x36F PUSH1 0x20 SWAP3 PUSH2 0x4CC JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0x3AE JUMPI PUSH2 0x1B6 CALLER PUSH2 0x5BA JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH2 0x3F1 PUSH2 0x56E JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x49F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x49F JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xDA JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xDA JUMPI SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x58E JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH2 0x662 PUSH2 0x65B PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x4CC JUMP JUMPDEST CALLER SWAP1 PUSH2 0x691 JUMP JUMPDEST ISZERO PUSH2 0x669 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x7D1 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x7A2 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x7AD JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7A2 JUMPI PUSH0 SWAP3 PUSH2 0x76F JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x79B JUMPI JUMPDEST PUSH2 0x786 DUP2 DUP4 PUSH2 0x45E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xDA JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xDA JUMPI SWAP1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x77C JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x7C9 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x270 JUMPI PUSH2 0x261 DUP2 DUP4 PUSH2 0x45E JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x71A JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 DUP16 DUP4 DUP12 SMOD 0x2C PUSH17 0xB516F68D61CBA8D45E5457802995051BDA 0xD 0xB4 0xD4 0xD9 0x2F 0x2F 0xE2 BLOBHASH PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"574:352:91:-:0;;;;;;;;;;;;;-1:-1:-1;;574:352:91;;;;-1:-1:-1;;;;;574:352:91;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;574:352:91;;;;;;;;;;;;;;;;;;;;;1273:26:49;;1269:95;;574:352:91;;;;;;;;2093:20:50;574:352:91;;2093:20:50;574:352:91;;-1:-1:-1;574:352:91;;;;;-1:-1:-1;574:352:91;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1524:4:81;1347:46:33;;1548:29:81;1544:80;;1634:14;;574:352:91;;;;;;1347:46:33;574:352:91;;;;;1634:14:81;574:352:91;;;;;;;;;;;;;;;;1544:80:81;1600:13;;;-1:-1:-1;1600:13:81;;-1:-1:-1;1600:13:81;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;574:352:91;;-1:-1:-1;1322:31:49;574:352:91;-1:-1:-1;574:352:91;;;;;;-1:-1:-1;574:352:91;;;;;-1:-1:-1;574:352:91"},"deployedBytecode":{"functionDebugData":{"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":1346,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":1118,"id":null,"parameterSlots":2,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":1580,"id":4356,"parameterSlots":0,"returnSlots":0},"fun_canPerform":{"entryPoint":1681,"id":20329,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":1390,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":1228,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_transferOwnership":{"entryPoint":1466,"id":9547,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":1271}],"20218":[{"length":32,"start":182},{"length":32,"start":524},{"length":32,"start":1768}]},"linkReferences":{},"object":"604060808152600480361015610013575f80fd5b5f3560e01c908163715018a6146103d957816379ba509714610376578163851c1bb3146103265781638da5cb5b146102f3578163a89b112814610281578163aaabadc5146101b8578163c1d080101461019e578163e30c39781461016a578163f2fde38b146100de575063fbfa77cf1461008b575f80fd5b346100da575f6003193601126100da576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b346100da5760206003193601126100da573573ffffffffffffffffffffffffffffffffffffffff8082168092036100da5761011761056e565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b82346100da575f6003193601126100da5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b346100da575f6003193601126100da576101b661062c565b005b9050346100da575f6003193601126100da5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561027757926020935f93610248575b505191168152f35b610269919350843d8611610270575b610261818361045e565b810190610542565b915f610240565b503d610257565b83513d5f823e3d90fd5b346100da5760206003193601126100da57803573ffffffffffffffffffffffffffffffffffffffff80821682036100da576102ba61062c565b5f541633146102cc576101b6906105ba565b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b82346100da575f6003193601126100da5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b9050346100da5760206003193601126100da5735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100da5761036f6020926104cc565b9051908152f35b346100da575f6003193601126100da573373ffffffffffffffffffffffffffffffffffffffff60015416036103ae576101b6336105ba565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b346100da575f6003193601126100da576103f161056e565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761049f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff82111761049f5760405251902090565b908160209103126100da575173ffffffffffffffffffffffffffffffffffffffff811681036100da5790565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361058e57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b61066261065b7fffffffff000000000000000000000000000000000000000000000000000000005f35166104cc565b3390610691565b1561066957565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146107d157604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156107a25785935f956107ad575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa9182156107a2575f9261076f57505090565b90809250813d831161079b575b610786818361045e565b810103126100da575180151581036100da5790565b503d61077c565b6040513d5f823e3d90fd5b6064929195506107c990853d871161027057610261818361045e565b94909161071a565b50505060019056fea2646970667358221220248f838b072c70b516f68d61cba8d45e5457802995051bda0db4d4d92f2fe24964736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x715018A6 EQ PUSH2 0x3D9 JUMPI DUP2 PUSH4 0x79BA5097 EQ PUSH2 0x376 JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x326 JUMPI DUP2 PUSH4 0x8DA5CB5B EQ PUSH2 0x2F3 JUMPI DUP2 PUSH4 0xA89B1128 EQ PUSH2 0x281 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x1B8 JUMPI DUP2 PUSH4 0xC1D08010 EQ PUSH2 0x19E JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x16A JUMPI DUP2 PUSH4 0xF2FDE38B EQ PUSH2 0xDE JUMPI POP PUSH4 0xFBFA77CF EQ PUSH2 0x8B JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xDA JUMPI PUSH2 0x117 PUSH2 0x56E JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH2 0x1B6 PUSH2 0x62C JUMP JUMPDEST STOP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x277 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x248 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x269 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x270 JUMPI JUMPDEST PUSH2 0x261 DUP2 DUP4 PUSH2 0x45E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x542 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x240 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x257 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP3 SUB PUSH2 0xDA JUMPI PUSH2 0x2BA PUSH2 0x62C JUMP JUMPDEST PUSH0 SLOAD AND CALLER EQ PUSH2 0x2CC JUMPI PUSH2 0x1B6 SWAP1 PUSH2 0x5BA JUMP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xDA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xDA JUMPI PUSH2 0x36F PUSH1 0x20 SWAP3 PUSH2 0x4CC JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0x3AE JUMPI PUSH2 0x1B6 CALLER PUSH2 0x5BA JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH2 0x3F1 PUSH2 0x56E JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x49F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x49F JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xDA JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xDA JUMPI SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x58E JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH2 0x662 PUSH2 0x65B PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x4CC JUMP JUMPDEST CALLER SWAP1 PUSH2 0x691 JUMP JUMPDEST ISZERO PUSH2 0x669 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x7D1 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x7A2 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x7AD JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7A2 JUMPI PUSH0 SWAP3 PUSH2 0x76F JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x79B JUMPI JUMPDEST PUSH2 0x786 DUP2 DUP4 PUSH2 0x45E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xDA JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xDA JUMPI SWAP1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x77C JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x7C9 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x270 JUMPI PUSH2 0x261 DUP2 DUP4 PUSH2 0x45E JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x71A JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 DUP16 DUP4 DUP12 SMOD 0x2C PUSH17 0xB516F68D61CBA8D45E5457802995051BDA 0xD 0xB4 0xD4 0xD9 0x2F 0x2F 0xE2 BLOBHASH PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"574:352:91:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21:81;574:352:91;1810:21:81;;;574:352:91;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;574:352:91;;;;;;;;;1348:29:81;574:352:91;;;;;;;;;;;;;-1:-1:-1;;574:352:91;;;;;;;;;;;;;;;1500:62:49;;:::i;:::-;574:352:91;;1738:24:50;574:352:91;;;1738:24:50;574:352:91;;;;1777:43:50;574:352:91;1777:43:50;;574:352:91;;;;;;;-1:-1:-1;;574:352:91;;;;;;;;1311:13:50;574:352:91;;;;;;;;;;;;;-1:-1:-1;;574:352:91;;;;;1525:73:33;;:::i;:::-;574:352:91;;;;;;;;-1:-1:-1;;574:352:91;;;;;;1810:21:81;574:352:91;;1810:21:81;;574:352:91;1810:21:81;;:5;;;574:352:91;1810:21:81;;;;;;;;;;574:352:91;1810:21:81;;;574:352:91;;;;;;;;1810:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;574:352:91;;;;;;;;;;;;;;-1:-1:-1;;574:352:91;;;;;;;;;;;;;;;1525:73:33;;:::i;:::-;574:352:91;;;2423:10:81;:21;2419:77;;2524:8;;;:::i;2419:77::-;2467:18;;574:352:91;2467:18:81;574:352:91;2467:18:81;574:352:91;;;;;;-1:-1:-1;;574:352:91;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;574:352:91;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;574:352:91;;;;;735:10:64;574:352:91;1311:13:50;574:352:91;;2339:24:50;2335:96;;2459:6;735:10:64;2459:6:50;:::i;2335:96::-;2386:34;574:352:91;2386:34:50;735:10:64;574:352:91;;;;2386:34:50;574:352:91;;;;;-1:-1:-1;;574:352:91;;;;;1500:62:49;;:::i;:::-;574:352:91;;;;2093:20:50;574:352:91;;2093:20:50;574:352:91;;;;;;;;;3052:40:49;;;;574:352:91;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:33;574:352:91;;;2303:50:33;;;2320:22;;574:352:91;;;;;;;2303:50:33;;;574:352:91;;;;;;;;;;;;;;;2293:61:33;;1931:430;:::o;574:352:91:-;;;;;;;;;;;;;;;;;;:::o;1796:162:49:-;574:352:91;1710:6:49;574:352:91;;735:10:64;1855:23:49;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:64;1901:40:49;574:352:91;;1710:6:49;1901:40;2011:153:50;574:352:91;;;2093:20:50;574:352:91;;2093:20:50;574:352:91;2093:20:50;574:352:91;;;;;;;;;;2093:20:50;574:352:91;;3052:40:49;2093:20:50;3052:40:49;;2011:153:50:o;1688:201:33:-;1798:33;1762:20;1774:7;;;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;;1774:7;1854:18;2546:382:81;;574:352:91;;;;;;;;;2721:15:81;;;2717:57;;574:352:91;;2858:21:81;574:352:91;2858:21:81;;;:5;;;:21;:5;;;574:352:91;2858:21:81;;;;;;;;;574:352:91;2858:21:81;;;2546:382;574:352:91;;;;;;2858:63:81;;;;;574:352:91;2858:63:81;;:21;:63;;574:352:91;;;;;2915:4:81;574:352:91;;;;;2858:63:81;;;;;;;574:352:91;2858:63:81;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;;;;;;;;;;;:::i;:::-;;;574:352:91;;;;;;;;;;;;2546:382:81;:::o;2858:63::-;;;;;;574:352:91;;;;;;;;;2858:21:81;574:352:91;2858:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","owner()":"8da5cb5b","pendingOwner()":"e30c3978","permissionedFunction()":"c1d08010","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"permissionedFunction\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"kind\":\"user\",\"methods\":{\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/OwnableAuthenticationMock.sol\":\"OwnableAuthenticationMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/test/OwnableAuthenticationMock.sol\":{\"keccak256\":\"0x9db9a3a18520c17880fbe2d49b9592d77e6412b200ebfc11d2dd84c5b326bf89\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e4a1ce6e79220ca4f904fbe9a42aca464b4fac8cfdaecc32bbd922bf0173e9ab\",\"dweb:/ipfs/QmZ3wFHp7EGB6AmD8FsgpsgEUtpAbSJB5EskETF9GnPe7S\"]}},\"version\":1}"}},"contracts/test/PoolHelperMock.sol":{"PoolHelperMock":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"InvalidPoolSetId","type":"error"},{"inputs":[],"name":"InvalidPoolSetManager","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"poolSetManager","type":"address"}],"name":"PoolSetManagerNotUnique","type":"error"},{"inputs":[],"name":"SenderIsNotPoolSetManager","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolRemovedFromSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"initialManager","type":"address"}],"name":"PoolSetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"PoolSetDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"PoolSetOwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPoolsToSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"destroyPoolSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getAllPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getManagerForPoolSet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextPoolSetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getPoolCountForSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolSetIdForCaller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"getPoolSetIdForManager","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isPoolInSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isValidPoolSetId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePoolsFromSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferPoolSetOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461011757601f61182238819003918201601f19168301916001600160401b0383118484101761011b5780849260409485528339810103126101175780516001600160a01b03918282169081830361011757602001518381168091036101175780156101045760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100f55760a05260016002556116f2908161013082396080518161112c015260a05181818161015301528181610283015281816104e601528181610b2e01526115900152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f35908160e01c918263182551da14610eae578263255dae4114610e6e57826325c427ed14610e2b5782632da55a1d14610d635782633700f98714610c7e5782633e035f9b14610aa657826362d5346214610a75578263715018a6146109f057826379ba50971461098c5782637c1ec46014610840578263851c1bb3146107f75782638c60ebd0146106b15782638da5cb5b1461067e57826394fc4058146105fe578263a89b11281461055b57508163aaabadc514610492578163c482e82214610474578163ce998aba14610450578163e30c39781461041c578163e909c19b146103df578163ebf3a8d014610245578163f167a1e61461020857508063f2fde38b1461017b5763fbfa77cf14610128575f80fd5b34610177575f600319360112610177576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b3461017757602060031936011261017757610194610f16565b61019c61125a565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b823461017757602060031936011261017757602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f2054169051908152f35b823461017757906102553661103c565b61026093919361125a565b610269846111f5565b80519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116925f5b8681106102b057005b826102bb82846110c0565b511686517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156103d5575f916103a8575b501561037e579060058b9392845f525261031d828a5f20611664565b15610352575090600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a3016102a7565b90867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b5090857f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b6103c89150823d84116103ce575b6103c08183610f39565b8101906111dd565b8c610301565b503d6103b6565b8a513d5f823e3d90fd5b8234610177576020600319360112610177576020906104156103ff610f16565b61040761125a565b610410816112a6565b611329565b9051908152f35b8234610177575f6003193601126101775760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b8234610177575f60031936011261017757602091335f528252805f20549051908152f35b8234610177575f600319360112610177576020906002549051908152f35b905034610177575f6003193601126101775773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561055157926020935f93610522575b505191168152f35b610543919350843d861161054a575b61053b8183610f39565b8101906111b1565b915f61051a565b503d610531565b83513d5f823e3d90fd5b34610177576020600319360112610177576105a96105a27fffffffff0000000000000000000000000000000000000000000000000000000061059b610f16565b9316611101565b3390611539565b156105d75773ffffffffffffffffffffffffffffffffffffffff5f541633146105d7576105d5906113be565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b838234610177576020906020600319360112610177573561061e816111f5565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b828210610667576106638686610659828b0383610f39565b519182918261106f565b0390f35b835487529586019560019384019390910190610641565b8334610177575f6003193601126101775760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b83823461017757606060031936011261017757803590602435604435916106d7846111f5565b835f526005906020906005602052865f20548585119081156107ed575b81156107e2575b506107b7575061070b8385611177565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061074e61073988610fa7565b976107468a51998a610f39565b808952610fa7565b01366020880137835b85811061076b57875180610663898261106f565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff610795828b5f20611430565b90549060031b1c166107b06107aa8884611177565b8a6110c0565b5201610757565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b9050841015886106fb565b80871191506106f4565b8382346101775760206003193601126101775735907fffffffff000000000000000000000000000000000000000000000000000000008216820361017757610415602092611101565b83823461017757602091826003193601126101775781359161086061125a565b610869836111f5565b825f5260058452815f208054805b61092c575050825f5260058452815f208054905f81558161090f575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610893575f8155600101610919565b5f19018061098673ffffffffffffffffffffffffffffffffffffffff6109528386611430565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a384611445565b50610877565b5034610177575f600319360112610177573373ffffffffffffffffffffffffffffffffffffffff60015416036109c5576105d5336113be565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b34610177575f60031936011261017757610a0861125a565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b5082346101775760206003193601126101775760209135610a95816111f5565b5f5260058252805f20549051908152f35b508234610177578060031936011261017757610ac0610f16565b60249260243567ffffffffffffffff811161017757610ae5610aee9136908401610fbf565b9261040761125a565b938251610b00575b6020858551908152f35b610b0b92919261125a565b610b14856111f5565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610b625750505050610af6565b82610b6d82846110c0565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610c74575f91610c57575b5015610c2d579060058b92835f5252610bcc818b5f20611664565b15610c005790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610b52565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610c6e9150823d84116103ce576103c08183610f39565b8c610bb1565b8b513d5f823e3d90fd5b50823461017757602060031936011261017757610c99610f16565b90610ca3826112a6565b335f5282602052805f2054908115610d3c57819293825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b837fbcc08f74000000000000000000000000000000000000000000000000000000005f525ffd5b50823461017757610d733661103c565b91610d7c61125a565b610d85826111f5565b8251925f5b848110610d9357005b73ffffffffffffffffffffffffffffffffffffffff610db282846110c0565b5116845f526005602052610dc881855f20611445565b15610dfc5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610d8a565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b5082346101775760206003193601126101775760209173ffffffffffffffffffffffffffffffffffffffff610e5e610f16565b165f528252805f20549051908152f35b50823461017757602060031936011261017757602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b8334610177578060031936011261017757602090610f0d610ecd610f16565b602435610ed9816111f5565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361017757565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610f7a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111610f7a5760051b60200190565b9080601f83011215610177576020908235610fd981610fa7565b93610fe76040519586610f39565b81855260208086019260051b82010192831161017757602001905b828210611010575050505090565b813573ffffffffffffffffffffffffffffffffffffffff81168103610177578152908301908301611002565b90604060031983011261017757600435916024359067ffffffffffffffff82116101775761106c91600401610fbf565b90565b60209060206040818301928281528551809452019301915f5b828110611096575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611088565b80518210156110d45760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff821117610f7a5760405251902090565b9190820391821161118457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90816020910312610177575173ffffffffffffffffffffffffffffffffffffffff811681036101775790565b90816020910312610177575180151581036101775790565b80158015611230575b6112055750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f205416156111fe565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361127a57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff16801561130157805f52600460205260405f20546112d65750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611184576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b80548210156110d4575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f14611531575f199182810181811161118457825490848201918211611184578181036114e6575b505050805480156114b95782019161149b8383611430565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61151c6114f66115069386611430565b90549060031b1c92839286611430565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f8080611483565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f5416911690811461165c57604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa93841561162d5785935f95611638575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa91821561162d575f9261161757505090565b61106c9250803d106103ce576103c08183610f39565b6040513d5f823e3d90fd5b60649291955061165490853d871161054a5761053b8183610f39565b9490916115c2565b505050600190565b5f8281526001820160205260409020546116b65780549068010000000000000000821015610f7a57826116a1611506846001809601855584611430565b90558054925f520160205260405f2055600190565b50505f9056fea26469706673582212205be0235868e23855616f639cbf97b99c061b1e688ad25fb6dbd3c504fe907f2f64736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x117 JUMPI PUSH1 0x1F PUSH2 0x1822 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x11B JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x117 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x117 JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x117 JUMPI DUP1 ISZERO PUSH2 0x104 JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xF5 JUMPI PUSH1 0xA0 MSTORE PUSH1 0x1 PUSH1 0x2 SSTORE PUSH2 0x16F2 SWAP1 DUP2 PUSH2 0x130 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x112C ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x153 ADD MSTORE DUP2 DUP2 PUSH2 0x283 ADD MSTORE DUP2 DUP2 PUSH2 0x4E6 ADD MSTORE DUP2 DUP2 PUSH2 0xB2E ADD MSTORE PUSH2 0x1590 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x182551DA EQ PUSH2 0xEAE JUMPI DUP3 PUSH4 0x255DAE41 EQ PUSH2 0xE6E JUMPI DUP3 PUSH4 0x25C427ED EQ PUSH2 0xE2B JUMPI DUP3 PUSH4 0x2DA55A1D EQ PUSH2 0xD63 JUMPI DUP3 PUSH4 0x3700F987 EQ PUSH2 0xC7E JUMPI DUP3 PUSH4 0x3E035F9B EQ PUSH2 0xAA6 JUMPI DUP3 PUSH4 0x62D53462 EQ PUSH2 0xA75 JUMPI DUP3 PUSH4 0x715018A6 EQ PUSH2 0x9F0 JUMPI DUP3 PUSH4 0x79BA5097 EQ PUSH2 0x98C JUMPI DUP3 PUSH4 0x7C1EC460 EQ PUSH2 0x840 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0x7F7 JUMPI DUP3 PUSH4 0x8C60EBD0 EQ PUSH2 0x6B1 JUMPI DUP3 PUSH4 0x8DA5CB5B EQ PUSH2 0x67E JUMPI DUP3 PUSH4 0x94FC4058 EQ PUSH2 0x5FE JUMPI DUP3 PUSH4 0xA89B1128 EQ PUSH2 0x55B JUMPI POP DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x492 JUMPI DUP2 PUSH4 0xC482E822 EQ PUSH2 0x474 JUMPI DUP2 PUSH4 0xCE998ABA EQ PUSH2 0x450 JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x41C JUMPI DUP2 PUSH4 0xE909C19B EQ PUSH2 0x3DF JUMPI DUP2 PUSH4 0xEBF3A8D0 EQ PUSH2 0x245 JUMPI DUP2 PUSH4 0xF167A1E6 EQ PUSH2 0x208 JUMPI POP DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x17B JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x128 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0x194 PUSH2 0xF16 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x125A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI SWAP1 PUSH2 0x255 CALLDATASIZE PUSH2 0x103C JUMP JUMPDEST PUSH2 0x260 SWAP4 SWAP2 SWAP4 PUSH2 0x125A JUMP JUMPDEST PUSH2 0x269 DUP5 PUSH2 0x11F5 JUMP JUMPDEST DUP1 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x2B0 JUMPI STOP JUMPDEST DUP3 PUSH2 0x2BB DUP3 DUP5 PUSH2 0x10C0 JUMP JUMPDEST MLOAD AND DUP7 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3D5 JUMPI PUSH0 SWAP2 PUSH2 0x3A8 JUMPI JUMPDEST POP ISZERO PUSH2 0x37E JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP4 SWAP3 DUP5 PUSH0 MSTORE MSTORE PUSH2 0x31D DUP3 DUP11 PUSH0 KECCAK256 PUSH2 0x1664 JUMP JUMPDEST ISZERO PUSH2 0x352 JUMPI POP SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0x2A7 JUMP JUMPDEST SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x3C8 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3CE JUMPI JUMPDEST PUSH2 0x3C0 DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x11DD JUMP JUMPDEST DUP13 PUSH2 0x301 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3B6 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x415 PUSH2 0x3FF PUSH2 0xF16 JUMP JUMPDEST PUSH2 0x407 PUSH2 0x125A JUMP JUMPDEST PUSH2 0x410 DUP2 PUSH2 0x12A6 JUMP JUMPDEST PUSH2 0x1329 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 CALLER PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x551 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x522 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x543 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x54A JUMPI JUMPDEST PUSH2 0x53B DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x11B1 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x51A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x531 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0x5A9 PUSH2 0x5A2 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x59B PUSH2 0xF16 JUMP JUMPDEST SWAP4 AND PUSH2 0x1101 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x1539 JUMP JUMPDEST ISZERO PUSH2 0x5D7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x5D7 JUMPI PUSH2 0x5D5 SWAP1 PUSH2 0x13BE JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI CALLDATALOAD PUSH2 0x61E DUP2 PUSH2 0x11F5 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x667 JUMPI PUSH2 0x663 DUP7 DUP7 PUSH2 0x659 DUP3 DUP12 SUB DUP4 PUSH2 0xF39 JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x106F JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x641 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x6D7 DUP5 PUSH2 0x11F5 JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x7ED JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x7E2 JUMPI JUMPDEST POP PUSH2 0x7B7 JUMPI POP PUSH2 0x70B DUP4 DUP6 PUSH2 0x1177 JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x74E PUSH2 0x739 DUP9 PUSH2 0xFA7 JUMP JUMPDEST SWAP8 PUSH2 0x746 DUP11 MLOAD SWAP10 DUP11 PUSH2 0xF39 JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0xFA7 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x76B JUMPI DUP8 MLOAD DUP1 PUSH2 0x663 DUP10 DUP3 PUSH2 0x106F JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x795 DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x7B0 PUSH2 0x7AA DUP9 DUP5 PUSH2 0x1177 JUMP JUMPDEST DUP11 PUSH2 0x10C0 JUMP JUMPDEST MSTORE ADD PUSH2 0x757 JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x6FB JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x6F4 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x177 JUMPI PUSH2 0x415 PUSH1 0x20 SWAP3 PUSH2 0x1101 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0x860 PUSH2 0x125A JUMP JUMPDEST PUSH2 0x869 DUP4 PUSH2 0x11F5 JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0x92C JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0x90F JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x893 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x919 JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0x986 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x952 DUP4 DUP7 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x1445 JUMP JUMPDEST POP PUSH2 0x877 JUMP JUMPDEST POP CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0x9C5 JUMPI PUSH2 0x5D5 CALLER PUSH2 0x13BE JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0xA08 PUSH2 0x125A JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xA95 DUP2 PUSH2 0x11F5 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0xAC0 PUSH2 0xF16 JUMP JUMPDEST PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x177 JUMPI PUSH2 0xAE5 PUSH2 0xAEE SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xFBF JUMP JUMPDEST SWAP3 PUSH2 0x407 PUSH2 0x125A JUMP JUMPDEST SWAP4 DUP3 MLOAD PUSH2 0xB00 JUMPI JUMPDEST PUSH1 0x20 DUP6 DUP6 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xB0B SWAP3 SWAP2 SWAP3 PUSH2 0x125A JUMP JUMPDEST PUSH2 0xB14 DUP6 PUSH2 0x11F5 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0xB62 JUMPI POP POP POP POP PUSH2 0xAF6 JUMP JUMPDEST DUP3 PUSH2 0xB6D DUP3 DUP5 PUSH2 0x10C0 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP10 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xC74 JUMPI PUSH0 SWAP2 PUSH2 0xC57 JUMPI JUMPDEST POP ISZERO PUSH2 0xC2D JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP3 DUP4 PUSH0 MSTORE MSTORE PUSH2 0xBCC DUP2 DUP12 PUSH0 KECCAK256 PUSH2 0x1664 JUMP JUMPDEST ISZERO PUSH2 0xC00 JUMPI SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xB52 JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xC6E SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3CE JUMPI PUSH2 0x3C0 DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST DUP13 PUSH2 0xBB1 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0xC99 PUSH2 0xF16 JUMP JUMPDEST SWAP1 PUSH2 0xCA3 DUP3 PUSH2 0x12A6 JUMP JUMPDEST CALLER PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0xD3C JUMPI DUP2 SWAP3 SWAP4 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST DUP4 PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH2 0xD73 CALLDATASIZE PUSH2 0x103C JUMP JUMPDEST SWAP2 PUSH2 0xD7C PUSH2 0x125A JUMP JUMPDEST PUSH2 0xD85 DUP3 PUSH2 0x11F5 JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xD93 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xDB2 DUP3 DUP5 PUSH2 0x10C0 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0xDC8 DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x1445 JUMP JUMPDEST ISZERO PUSH2 0xDFC JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0xD8A JUMP JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xE5E PUSH2 0xF16 JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x177 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xF0D PUSH2 0xECD PUSH2 0xF16 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0xED9 DUP2 PUSH2 0x11F5 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x177 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF7A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF7A JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0xFD9 DUP2 PUSH2 0xFA7 JUMP JUMPDEST SWAP4 PUSH2 0xFE7 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xF39 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x177 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1010 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x177 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1002 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x177 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x177 JUMPI PUSH2 0x106C SWAP2 PUSH1 0x4 ADD PUSH2 0xFBF JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1096 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1088 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x10D4 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF7A JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1184 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x177 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x177 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x177 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x177 JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x1230 JUMPI JUMPDEST PUSH2 0x1205 JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x11FE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x127A JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x1301 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x12D6 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x1184 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x10D4 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x1531 JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x1184 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x1184 JUMPI DUP2 DUP2 SUB PUSH2 0x14E6 JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x14B9 JUMPI DUP3 ADD SWAP2 PUSH2 0x149B DUP4 DUP4 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x151C PUSH2 0x14F6 PUSH2 0x1506 SWAP4 DUP7 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x1430 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x1483 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x165C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x162D JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x1638 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x162D JUMPI PUSH0 SWAP3 PUSH2 0x1617 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x106C SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x3CE JUMPI PUSH2 0x3C0 DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x1654 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x54A JUMPI PUSH2 0x53B DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x15C2 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x16B6 JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0xF7A JUMPI DUP3 PUSH2 0x16A1 PUSH2 0x1506 DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMPDEST 0xE0 0x23 PC PUSH9 0xE23855616F639CBF97 0xB9 SWAP13 MOD SHL 0x1E PUSH9 0x8AD25FB6DBD3C504FE SWAP1 PUSH32 0x2F64736F6C634300081B00330000000000000000000000000000000000000000 ","sourceMap":"216:202:92:-:0;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;-1:-1:-1;;;;;216:202:92;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;216:202:92;;;;;;;;;;;;;;;;;;;;;1273:26:49;;1269:95;;216:202:92;;;;;;;;2093:20:50;216:202:92;;2093:20:50;216:202:92;;-1:-1:-1;216:202:92;;;;;-1:-1:-1;216:202:92;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1524:4:81;1347:46:33;;1548:29:81;1544:80;;1634:14;;2093:20:50;853:1:82;216:202:92;;;;;;;1347:46:33;216:202:92;;;;;1634:14:81;216:202:92;;;;;;;;;;;;;;;;;;;;;;;;;;1544:80:81;1600:13;;;-1:-1:-1;1600:13:81;;-1:-1:-1;1600:13:81;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;216:202:92;;-1:-1:-1;1322:31:49;216:202:92;-1:-1:-1;216:202:92;;;;;;-1:-1:-1;216:202:92;;;;;-1:-1:-1;216:202:92"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":3862,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_array_address_dyn":{"entryPoint":4031,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":4573,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":4529,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_array_address_dyn":{"entryPoint":4156,"id":null,"parameterSlots":1,"returnSlots":2},"abi_encode_array_address_dyn":{"entryPoint":4207,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":4007,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":4471,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":3897,"id":null,"parameterSlots":2,"returnSlots":0},"fun_add":{"entryPoint":5732,"id":16149,"parameterSlots":2,"returnSlots":1},"fun_canPerform":{"entryPoint":5433,"id":20329,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":4698,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_contains":{"entryPoint":null,"id":16295,"parameterSlots":2,"returnSlots":1},"fun_createPoolSet":{"entryPoint":4905,"id":20497,"parameterSlots":1,"returnSlots":1},"fun_ensureValidManager":{"entryPoint":4774,"id":21004,"parameterSlots":1,"returnSlots":0},"fun_ensureValidPoolSet":{"entryPoint":4597,"id":21058,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":4353,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_remove":{"entryPoint":5189,"id":16233,"parameterSlots":2,"returnSlots":1},"fun_transferOwnership":{"entryPoint":5054,"id":9547,"parameterSlots":1,"returnSlots":0},"memory_array_index_access_address_dyn":{"entryPoint":4288,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_bytes32_dyn":{"entryPoint":5168,"id":null,"parameterSlots":2,"returnSlots":2},"update_byte_slice_dynamic32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":4396}],"20218":[{"length":32,"start":339},{"length":32,"start":643},{"length":32,"start":1254},{"length":32,"start":2862},{"length":32,"start":5520}]},"linkReferences":{},"object":"604060808152600480361015610013575f80fd5b5f35908160e01c918263182551da14610eae578263255dae4114610e6e57826325c427ed14610e2b5782632da55a1d14610d635782633700f98714610c7e5782633e035f9b14610aa657826362d5346214610a75578263715018a6146109f057826379ba50971461098c5782637c1ec46014610840578263851c1bb3146107f75782638c60ebd0146106b15782638da5cb5b1461067e57826394fc4058146105fe578263a89b11281461055b57508163aaabadc514610492578163c482e82214610474578163ce998aba14610450578163e30c39781461041c578163e909c19b146103df578163ebf3a8d014610245578163f167a1e61461020857508063f2fde38b1461017b5763fbfa77cf14610128575f80fd5b34610177575f600319360112610177576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b3461017757602060031936011261017757610194610f16565b61019c61125a565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b823461017757602060031936011261017757602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f2054169051908152f35b823461017757906102553661103c565b61026093919361125a565b610269846111f5565b80519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116925f5b8681106102b057005b826102bb82846110c0565b511686517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156103d5575f916103a8575b501561037e579060058b9392845f525261031d828a5f20611664565b15610352575090600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a3016102a7565b90867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b5090857f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b6103c89150823d84116103ce575b6103c08183610f39565b8101906111dd565b8c610301565b503d6103b6565b8a513d5f823e3d90fd5b8234610177576020600319360112610177576020906104156103ff610f16565b61040761125a565b610410816112a6565b611329565b9051908152f35b8234610177575f6003193601126101775760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b8234610177575f60031936011261017757602091335f528252805f20549051908152f35b8234610177575f600319360112610177576020906002549051908152f35b905034610177575f6003193601126101775773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561055157926020935f93610522575b505191168152f35b610543919350843d861161054a575b61053b8183610f39565b8101906111b1565b915f61051a565b503d610531565b83513d5f823e3d90fd5b34610177576020600319360112610177576105a96105a27fffffffff0000000000000000000000000000000000000000000000000000000061059b610f16565b9316611101565b3390611539565b156105d75773ffffffffffffffffffffffffffffffffffffffff5f541633146105d7576105d5906113be565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b838234610177576020906020600319360112610177573561061e816111f5565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b828210610667576106638686610659828b0383610f39565b519182918261106f565b0390f35b835487529586019560019384019390910190610641565b8334610177575f6003193601126101775760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b83823461017757606060031936011261017757803590602435604435916106d7846111f5565b835f526005906020906005602052865f20548585119081156107ed575b81156107e2575b506107b7575061070b8385611177565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061074e61073988610fa7565b976107468a51998a610f39565b808952610fa7565b01366020880137835b85811061076b57875180610663898261106f565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff610795828b5f20611430565b90549060031b1c166107b06107aa8884611177565b8a6110c0565b5201610757565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b9050841015886106fb565b80871191506106f4565b8382346101775760206003193601126101775735907fffffffff000000000000000000000000000000000000000000000000000000008216820361017757610415602092611101565b83823461017757602091826003193601126101775781359161086061125a565b610869836111f5565b825f5260058452815f208054805b61092c575050825f5260058452815f208054905f81558161090f575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610893575f8155600101610919565b5f19018061098673ffffffffffffffffffffffffffffffffffffffff6109528386611430565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a384611445565b50610877565b5034610177575f600319360112610177573373ffffffffffffffffffffffffffffffffffffffff60015416036109c5576105d5336113be565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b34610177575f60031936011261017757610a0861125a565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b5082346101775760206003193601126101775760209135610a95816111f5565b5f5260058252805f20549051908152f35b508234610177578060031936011261017757610ac0610f16565b60249260243567ffffffffffffffff811161017757610ae5610aee9136908401610fbf565b9261040761125a565b938251610b00575b6020858551908152f35b610b0b92919261125a565b610b14856111f5565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610b625750505050610af6565b82610b6d82846110c0565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610c74575f91610c57575b5015610c2d579060058b92835f5252610bcc818b5f20611664565b15610c005790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610b52565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610c6e9150823d84116103ce576103c08183610f39565b8c610bb1565b8b513d5f823e3d90fd5b50823461017757602060031936011261017757610c99610f16565b90610ca3826112a6565b335f5282602052805f2054908115610d3c57819293825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b837fbcc08f74000000000000000000000000000000000000000000000000000000005f525ffd5b50823461017757610d733661103c565b91610d7c61125a565b610d85826111f5565b8251925f5b848110610d9357005b73ffffffffffffffffffffffffffffffffffffffff610db282846110c0565b5116845f526005602052610dc881855f20611445565b15610dfc5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610d8a565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b5082346101775760206003193601126101775760209173ffffffffffffffffffffffffffffffffffffffff610e5e610f16565b165f528252805f20549051908152f35b50823461017757602060031936011261017757602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b8334610177578060031936011261017757602090610f0d610ecd610f16565b602435610ed9816111f5565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361017757565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610f7a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111610f7a5760051b60200190565b9080601f83011215610177576020908235610fd981610fa7565b93610fe76040519586610f39565b81855260208086019260051b82010192831161017757602001905b828210611010575050505090565b813573ffffffffffffffffffffffffffffffffffffffff81168103610177578152908301908301611002565b90604060031983011261017757600435916024359067ffffffffffffffff82116101775761106c91600401610fbf565b90565b60209060206040818301928281528551809452019301915f5b828110611096575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611088565b80518210156110d45760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff821117610f7a5760405251902090565b9190820391821161118457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90816020910312610177575173ffffffffffffffffffffffffffffffffffffffff811681036101775790565b90816020910312610177575180151581036101775790565b80158015611230575b6112055750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f205416156111fe565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361127a57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff16801561130157805f52600460205260405f20546112d65750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611184576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b80548210156110d4575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f14611531575f199182810181811161118457825490848201918211611184578181036114e6575b505050805480156114b95782019161149b8383611430565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61151c6114f66115069386611430565b90549060031b1c92839286611430565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f8080611483565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f5416911690811461165c57604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa93841561162d5785935f95611638575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa91821561162d575f9261161757505090565b61106c9250803d106103ce576103c08183610f39565b6040513d5f823e3d90fd5b60649291955061165490853d871161054a5761053b8183610f39565b9490916115c2565b505050600190565b5f8281526001820160205260409020546116b65780549068010000000000000000821015610f7a57826116a1611506846001809601855584611430565b90558054925f520160205260405f2055600190565b50505f9056fea26469706673582212205be0235868e23855616f639cbf97b99c061b1e688ad25fb6dbd3c504fe907f2f64736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x182551DA EQ PUSH2 0xEAE JUMPI DUP3 PUSH4 0x255DAE41 EQ PUSH2 0xE6E JUMPI DUP3 PUSH4 0x25C427ED EQ PUSH2 0xE2B JUMPI DUP3 PUSH4 0x2DA55A1D EQ PUSH2 0xD63 JUMPI DUP3 PUSH4 0x3700F987 EQ PUSH2 0xC7E JUMPI DUP3 PUSH4 0x3E035F9B EQ PUSH2 0xAA6 JUMPI DUP3 PUSH4 0x62D53462 EQ PUSH2 0xA75 JUMPI DUP3 PUSH4 0x715018A6 EQ PUSH2 0x9F0 JUMPI DUP3 PUSH4 0x79BA5097 EQ PUSH2 0x98C JUMPI DUP3 PUSH4 0x7C1EC460 EQ PUSH2 0x840 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0x7F7 JUMPI DUP3 PUSH4 0x8C60EBD0 EQ PUSH2 0x6B1 JUMPI DUP3 PUSH4 0x8DA5CB5B EQ PUSH2 0x67E JUMPI DUP3 PUSH4 0x94FC4058 EQ PUSH2 0x5FE JUMPI DUP3 PUSH4 0xA89B1128 EQ PUSH2 0x55B JUMPI POP DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x492 JUMPI DUP2 PUSH4 0xC482E822 EQ PUSH2 0x474 JUMPI DUP2 PUSH4 0xCE998ABA EQ PUSH2 0x450 JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x41C JUMPI DUP2 PUSH4 0xE909C19B EQ PUSH2 0x3DF JUMPI DUP2 PUSH4 0xEBF3A8D0 EQ PUSH2 0x245 JUMPI DUP2 PUSH4 0xF167A1E6 EQ PUSH2 0x208 JUMPI POP DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x17B JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x128 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0x194 PUSH2 0xF16 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x125A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI SWAP1 PUSH2 0x255 CALLDATASIZE PUSH2 0x103C JUMP JUMPDEST PUSH2 0x260 SWAP4 SWAP2 SWAP4 PUSH2 0x125A JUMP JUMPDEST PUSH2 0x269 DUP5 PUSH2 0x11F5 JUMP JUMPDEST DUP1 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x2B0 JUMPI STOP JUMPDEST DUP3 PUSH2 0x2BB DUP3 DUP5 PUSH2 0x10C0 JUMP JUMPDEST MLOAD AND DUP7 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3D5 JUMPI PUSH0 SWAP2 PUSH2 0x3A8 JUMPI JUMPDEST POP ISZERO PUSH2 0x37E JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP4 SWAP3 DUP5 PUSH0 MSTORE MSTORE PUSH2 0x31D DUP3 DUP11 PUSH0 KECCAK256 PUSH2 0x1664 JUMP JUMPDEST ISZERO PUSH2 0x352 JUMPI POP SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0x2A7 JUMP JUMPDEST SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x3C8 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3CE JUMPI JUMPDEST PUSH2 0x3C0 DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x11DD JUMP JUMPDEST DUP13 PUSH2 0x301 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3B6 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x415 PUSH2 0x3FF PUSH2 0xF16 JUMP JUMPDEST PUSH2 0x407 PUSH2 0x125A JUMP JUMPDEST PUSH2 0x410 DUP2 PUSH2 0x12A6 JUMP JUMPDEST PUSH2 0x1329 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 CALLER PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x551 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x522 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x543 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x54A JUMPI JUMPDEST PUSH2 0x53B DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x11B1 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x51A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x531 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0x5A9 PUSH2 0x5A2 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x59B PUSH2 0xF16 JUMP JUMPDEST SWAP4 AND PUSH2 0x1101 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x1539 JUMP JUMPDEST ISZERO PUSH2 0x5D7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x5D7 JUMPI PUSH2 0x5D5 SWAP1 PUSH2 0x13BE JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI CALLDATALOAD PUSH2 0x61E DUP2 PUSH2 0x11F5 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x667 JUMPI PUSH2 0x663 DUP7 DUP7 PUSH2 0x659 DUP3 DUP12 SUB DUP4 PUSH2 0xF39 JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x106F JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x641 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x6D7 DUP5 PUSH2 0x11F5 JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x7ED JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x7E2 JUMPI JUMPDEST POP PUSH2 0x7B7 JUMPI POP PUSH2 0x70B DUP4 DUP6 PUSH2 0x1177 JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x74E PUSH2 0x739 DUP9 PUSH2 0xFA7 JUMP JUMPDEST SWAP8 PUSH2 0x746 DUP11 MLOAD SWAP10 DUP11 PUSH2 0xF39 JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0xFA7 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x76B JUMPI DUP8 MLOAD DUP1 PUSH2 0x663 DUP10 DUP3 PUSH2 0x106F JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x795 DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x7B0 PUSH2 0x7AA DUP9 DUP5 PUSH2 0x1177 JUMP JUMPDEST DUP11 PUSH2 0x10C0 JUMP JUMPDEST MSTORE ADD PUSH2 0x757 JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x6FB JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x6F4 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x177 JUMPI PUSH2 0x415 PUSH1 0x20 SWAP3 PUSH2 0x1101 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0x860 PUSH2 0x125A JUMP JUMPDEST PUSH2 0x869 DUP4 PUSH2 0x11F5 JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0x92C JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0x90F JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x893 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x919 JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0x986 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x952 DUP4 DUP7 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x1445 JUMP JUMPDEST POP PUSH2 0x877 JUMP JUMPDEST POP CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0x9C5 JUMPI PUSH2 0x5D5 CALLER PUSH2 0x13BE JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0xA08 PUSH2 0x125A JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xA95 DUP2 PUSH2 0x11F5 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0xAC0 PUSH2 0xF16 JUMP JUMPDEST PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x177 JUMPI PUSH2 0xAE5 PUSH2 0xAEE SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xFBF JUMP JUMPDEST SWAP3 PUSH2 0x407 PUSH2 0x125A JUMP JUMPDEST SWAP4 DUP3 MLOAD PUSH2 0xB00 JUMPI JUMPDEST PUSH1 0x20 DUP6 DUP6 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xB0B SWAP3 SWAP2 SWAP3 PUSH2 0x125A JUMP JUMPDEST PUSH2 0xB14 DUP6 PUSH2 0x11F5 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0xB62 JUMPI POP POP POP POP PUSH2 0xAF6 JUMP JUMPDEST DUP3 PUSH2 0xB6D DUP3 DUP5 PUSH2 0x10C0 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP10 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xC74 JUMPI PUSH0 SWAP2 PUSH2 0xC57 JUMPI JUMPDEST POP ISZERO PUSH2 0xC2D JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP3 DUP4 PUSH0 MSTORE MSTORE PUSH2 0xBCC DUP2 DUP12 PUSH0 KECCAK256 PUSH2 0x1664 JUMP JUMPDEST ISZERO PUSH2 0xC00 JUMPI SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xB52 JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xC6E SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3CE JUMPI PUSH2 0x3C0 DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST DUP13 PUSH2 0xBB1 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0xC99 PUSH2 0xF16 JUMP JUMPDEST SWAP1 PUSH2 0xCA3 DUP3 PUSH2 0x12A6 JUMP JUMPDEST CALLER PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0xD3C JUMPI DUP2 SWAP3 SWAP4 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST DUP4 PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH2 0xD73 CALLDATASIZE PUSH2 0x103C JUMP JUMPDEST SWAP2 PUSH2 0xD7C PUSH2 0x125A JUMP JUMPDEST PUSH2 0xD85 DUP3 PUSH2 0x11F5 JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xD93 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xDB2 DUP3 DUP5 PUSH2 0x10C0 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0xDC8 DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x1445 JUMP JUMPDEST ISZERO PUSH2 0xDFC JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0xD8A JUMP JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xE5E PUSH2 0xF16 JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x177 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xF0D PUSH2 0xECD PUSH2 0xF16 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0xED9 DUP2 PUSH2 0x11F5 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x177 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF7A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF7A JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0xFD9 DUP2 PUSH2 0xFA7 JUMP JUMPDEST SWAP4 PUSH2 0xFE7 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xF39 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x177 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1010 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x177 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1002 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x177 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x177 JUMPI PUSH2 0x106C SWAP2 PUSH1 0x4 ADD PUSH2 0xFBF JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1096 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1088 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x10D4 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF7A JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1184 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x177 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x177 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x177 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x177 JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x1230 JUMPI JUMPDEST PUSH2 0x1205 JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x11FE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x127A JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x1301 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x12D6 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x1184 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x10D4 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x1531 JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x1184 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x1184 JUMPI DUP2 DUP2 SUB PUSH2 0x14E6 JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x14B9 JUMPI DUP3 ADD SWAP2 PUSH2 0x149B DUP4 DUP4 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x151C PUSH2 0x14F6 PUSH2 0x1506 SWAP4 DUP7 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x1430 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x1483 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x165C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x162D JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x1638 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x162D JUMPI PUSH0 SWAP3 PUSH2 0x1617 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x106C SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x3CE JUMPI PUSH2 0x3C0 DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x1654 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x54A JUMPI PUSH2 0x53B DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x15C2 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x16B6 JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0xF7A JUMPI DUP3 PUSH2 0x16A1 PUSH2 0x1506 DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMPDEST 0xE0 0x23 PC PUSH9 0xE23855616F639CBF97 0xB9 SWAP13 MOD SHL 0x1E PUSH9 0x8AD25FB6DBD3C504FE SWAP1 PUSH32 0x2F64736F6C634300081B00330000000000000000000000000000000000000000 ","sourceMap":"216:202:92:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21:81;216:202:92;1810:21:81;;;216:202:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;;1348:29:81;216:202:92;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;:::i;:::-;1500:62:49;;:::i;:::-;216:202:92;;;;;;;1738:24:50;216:202:92;;;1738:24:50;216:202:92;;;;1777:43:50;216:202:92;1777:43:50;;216:202:92;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;;;8417:16:82;216:202:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1500:62:49;;;;;:::i;:::-;1515:9:82;;;:::i;:::-;216:202:92;;;;5232:5:82;216:202:92;;;;5103:12:82;;;;;;216:202:92;5117:3:82;5151:11;;;;;:::i;:::-;216:202:92;;;;;5232:28:82;;;;;;216:202:92;5232:28:82;216:202:92;5232:28:82;;;;;;;;;;;;;216:202:92;5232:28:82;;;5117:3;216:202:92;;5228:119:82;;216:202:92;5365:9:82;216:202:92;;;;;;;11511:50:72;216:202:92;;;;11511:50:72;:::i;:::-;216:202:92;5361:118:82;;5610:31;;216:202:92;5610:31:82;;;216:202:92;5610:31:82;;216:202:92;5088:13:82;;5361:118;5431:33;;;216:202:92;5431:33:82;216:202:92;;;;5431:33:82;5228:119;5296:36;;;;216:202:92;5296:36:82;216:202:92;;5296:36:82;5232:28;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;216:202:92;;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;2554:30:82;216:202:92;;:::i;:::-;1500:62:49;;:::i;:::-;1962:7:82;;;:::i;:::-;2554:30;:::i;:::-;216:202:92;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;1311:13:50;216:202:92;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;6549:10:82;;216:202:92;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;8254:14:82;216:202:92;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;1810:21:81;216:202:92;;1810:21:81;;216:202:92;1810:21:81;;:5;;;216:202:92;1810:21:81;;;;;;;;;;216:202:92;1810:21:81;;;216:202:92;;;;;;;;1810:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;216:202:92;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;1798:33:33;1762:20;1774:7;216:202:92;;:::i;:::-;1774:7:33;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;216:202:92;;;;1820:10:33;2423:21:81;2419:77;;2524:8;;;:::i;:::-;216:202:92;2419:77:81;2467:18;;216:202:92;2467:18:81;216:202:92;2467:18:81;216:202:92;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;1515:9:82;;;:::i;:::-;216:202:92;;7533:9:82;216:202:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;;;;;1515:9:82;;;;:::i;:::-;216:202:92;;;7815:9:82;216:202:92;;;7815:9:82;216:202:92;;;;;;7859:9:82;;;:28;;;;;216:202:92;7859:50:82;;;;216:202:92;7855:115:82;;;8002:9;;;;;:::i;:::-;216:202:92;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;8027:16:82;8045:6;;;;;;216:202:92;;;;;;;:::i;8053:3:82:-;216:202:92;;;;;;;;;5853:18:72;216:202:92;;;;5853:18:72;:::i;:::-;216:202:92;;;;;;;8072:44:82;8078:8;;;;:::i;:::-;8072:44;;:::i;:::-;216:202:92;;8027:16:82;;7855:115;7932:27;;;216:202:92;7932:27:82;216:202:92;;;7932:27:82;7859:50;7891:18;;;;;7859:50;;;:28;7872:15;;;;-1:-1:-1;7859:28:82;;216:202:92;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;1500:62:49;;;:::i;:::-;1515:9:82;;;:::i;:::-;216:202:92;;;3499:9:82;216:202:92;;;;;;;3618:237:82;3625:12;;;216:202:92;;;;;3499:9:82;216:202:92;;;;;;;;;;;;;;3618:237:82;216:202:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4148:36:82;216:202:92;4148:36:82;;216:202:92;;;;;;;;;;;;;;;;;;;;;;;;;3618:237:82;-1:-1:-1;;216:202:92;5853:18:72;11832:53;216:202:92;5853:18:72;;;;:::i;:::-;216:202:92;;;;;;;3774:35:82;;;216:202:92;3774:35:82;;11832:53:72;;:::i;:::-;;3618:237:82;;216:202:92;;;;;;-1:-1:-1;;216:202:92;;;;;735:10:64;216:202:92;1311:13:50;216:202:92;;2339:24:50;2335:96;;2459:6;735:10:64;2459:6:50;:::i;2335:96::-;2386:34;216:202:92;2386:34:50;735:10:64;216:202:92;;;;2386:34:50;216:202:92;;;;;-1:-1:-1;;216:202:92;;;;;1500:62:49;;:::i;:::-;216:202:92;;;;2093:20:50;216:202:92;;2093:20:50;216:202:92;;;;;;;;;3052:40:49;;;;216:202:92;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;1515:9:82;;;:::i;:::-;216:202:92;;6905:9:82;216:202:92;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;:::i;:::-;;;;;;;;;;;2833:30:82;216:202:92;;;;;;:::i;:::-;1500:62:49;;;:::i;2833:30:82:-;216:202:92;;;2874:84:82;;216:202:92;;;;;;;;;2874:84:82;1500:62:49;;;;;:::i;:::-;1515:9:82;;;:::i;:::-;216:202:92;;;;5232:5:82;216:202:92;;;;5103:12:82;;;;;;2874:84;;;;;;5117:3;5151:11;;;;;:::i;:::-;216:202:92;;;;;5232:28:82;;;;;;216:202:92;;5232:28:82;;;;;;;;;;;;;216:202:92;5232:28:82;;;5117:3;216:202:92;;5228:119:82;;216:202:92;5365:9:82;216:202:92;;;;;;11511:50:72;216:202:92;;;;11511:50:72;:::i;:::-;216:202:92;5361:118:82;;5610:31;216:202:92;5610:31:82;;;216:202:92;5610:31:82;;216:202:92;5088:13:82;;5361:118;5431:33;;;;216:202:92;5431:33:82;216:202:92;;;;5431:33:82;5228:119;5296:36;;;;216:202:92;5296:36:82;216:202:92;;5296:36:82;5232:28;;;;;;;;;;;;;;:::i;:::-;;;;;216:202:92;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;:::i;:::-;1962:7:82;;;;:::i;:::-;6549:10;216:202:92;;;;;;;;;8890:14:82;;;8886:79;;216:202:92;;;;;;4388:16:82;216:202:92;;;;;;;;;;;;;;;;;6549:10:82;216:202:92;;;;;;;;;;;;;;;6549:10:82;4590:62;;216:202:92;4590:62:82;;216:202:92;8886:79:82;8927:27;;216:202:92;8927:27:82;216:202:92;8927:27:82;216:202:92;;;;;;;;;:::i;:::-;1500:62:49;;;:::i;:::-;1515:9:82;;;:::i;:::-;216:202:92;;5897:13:82;216:202:92;5912:12:82;;;;;;216:202:92;5926:3:82;216:202:92;5960:8:82;;;;:::i;:::-;216:202:92;;;;;5987:9:82;216:202:92;;11832:53:72;216:202:92;;;;11832:53:72;:::i;:::-;216:202:92;5983:117:82;;6119:35;;216:202:92;6119:35:82;;216:202:92;6119:35:82;;216:202:92;5897:13:82;;5983:117;6056:29;;;;216:202:92;6056:29:82;216:202:92;;;;;6056:29:82;216:202:92;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;;;7076:16:82;216:202:92;;;;;;;;7076:41:82;;216:202:92;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;12473:55:72;216:202:92;;:::i;:::-;;;1515:9:82;;;:::i;:::-;216:202:92;;7296:9:82;216:202:92;;;;;;;;12473:55:72;5197:14;5101:129;-1:-1:-1;216:202:92;5197:14:72;216:202:92;;;-1:-1:-1;216:202:92;;5197:26:72;;5101:129;;12473:55;216:202:92;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:33;216:202:92;;;2303:50:33;;;2320:22;;216:202:92;;;;;;;2303:50:33;;;216:202:92;;;;;;;;;;;;;;;2293:61:33;;1931:430;:::o;216:202:92:-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;9677::82:-;9753:14;;:59;;;;9677:202;9749:124;;9677:202;:::o;9749:124::-;9835:27;9766:1;9835:27;;216:202:92;;9766:1:82;9835:27;9753:59;216:202:92;;9766:1:82;216:202:92;9771:16:82;216:202:92;;;;9766:1:82;216:202:92;;;9771:41:82;9753:59;;1796:162:49;216:202:92;1710:6:49;216:202:92;;735:10:64;1855:23:49;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:64;1901:40:49;216:202:92;;1710:6:49;1901:40;8977:266:82;216:202:92;;9051:21:82;;9047:82;;216:202:92;9070:1:82;216:202:92;9143:14:82;216:202:92;;;9070:1:82;216:202:92;;9139:98:82;;8977:266;:::o;9139:98::-;9194:32;9070:1;9194:32;9143:14;216:202:92;;9070:1:82;9194:32;9047:82;9095:23;9070:1;9095:23;;9070:1;9095:23;2970:342;;3077:16;216:202:92;;-1:-1:-1;;216:202:92;;;;;;;3077:16:82;216:202:92;3065:28:82;216:202:92;-1:-1:-1;216:202:92;3152:16:82;216:202:92;;;;-1:-1:-1;216:202:92;;;;;;;;;;;;;-1:-1:-1;216:202:92;3206:14:82;216:202:92;;;;-1:-1:-1;216:202:92;;3264:41:82;-1:-1:-1;3264:41:82;;2970:342::o;2011:153:50:-;216:202:92;;;2093:20:50;216:202:92;;2093:20:50;216:202:92;2093:20:50;216:202:92;;;;;;;;;;2093:20:50;216:202:92;;3052:40:49;2093:20:50;3052:40:49;;2011:153:50:o;216:202:92:-;;;;;;;;-1:-1:-1;216:202:92;;-1:-1:-1;216:202:92;;;-1:-1:-1;216:202:92;:::o;3071:1368:72:-;;3266:14;;;216:202:92;;;;;;;;;;;3302:13:72;;;;3298:1135;3302:13;;;-1:-1:-1;;216:202:92;;;;;;;;;;;;;;;;;;;;3777:23:72;;;3773:378;;3298:1135;216:202:92;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3266:14:72;4368:11;:::o;216:202:92:-;;;;;;;;;;3773:378:72;216:202:92;3840:22:72;3961:23;3840:22;;;:::i;:::-;216:202:92;;;;;;3961:23:72;;;;;:::i;:::-;216:202:92;;;;;-1:-1:-1;;216:202:92;;;;;;;;;;;;;;;;;;;;;;;;;3773:378:72;;;;;3298:1135;4410:12;;;;216:202:92;4410:12:72;:::o;2546:382:81:-;;216:202:92;;;;;;;;;2721:15:81;;;2717:57;;216:202:92;;2858:21:81;216:202:92;2858:21:81;;;:5;;;:21;:5;;;216:202:92;2858:21:81;;;;;;;;;216:202:92;2858:21:81;;;2546:382;216:202:92;;;;;;2858:63:81;;;;;216:202:92;2858:63:81;;:21;:63;;216:202:92;;;;;2915:4:81;216:202:92;;;;;2858:63:81;;;;;;;216:202:92;2858:63:81;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;-1:-1:-1;2858:63:81;;;;;;:::i;:::-;216:202:92;;;;;;;;;2858:21:81;216:202:92;2858:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o;2497:406:72:-;-1:-1:-1;216:202:92;;;5197:14:72;;;216:202:92;;;;;;2581:21:72;;216:202:92;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2776:14:72;216:202:92;;;;;;;2832:11:72;:::o;2576:321::-;2874:12;;216:202:92;2874:12:72;:::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","addPoolsToSet(uint256,address[])":"ebf3a8d0","createPoolSet(address)":"e909c19b","createPoolSet(address,address[])":"3e035f9b","destroyPoolSet(uint256)":"7c1ec460","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAllPoolsInSet(uint256)":"94fc4058","getAuthorizer()":"aaabadc5","getManagerForPoolSet(uint256)":"f167a1e6","getNextPoolSetId()":"c482e822","getPoolCountForSet(uint256)":"62d53462","getPoolSetIdForCaller()":"ce998aba","getPoolSetIdForManager(address)":"25c427ed","getPoolsInSet(uint256,uint256,uint256)":"8c60ebd0","isPoolInSet(address,uint256)":"182551da","isValidPoolSetId(uint256)":"255dae41","owner()":"8da5cb5b","pendingOwner()":"e30c3978","removePoolsFromSet(uint256,address[])":"2da55a1d","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","transferPoolSetOwnership(address)":"3700f987","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"InvalidPoolSetId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolSetManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolSetManager\",\"type\":\"address\"}],\"name\":\"PoolSetManagerNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderIsNotPoolSetManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"PoolSetCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"PoolSetDestroyed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"PoolSetOwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPoolsToSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"destroyPoolSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getAllPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getManagerForPoolSet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextPoolSetId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getPoolCountForSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSetIdForCaller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getPoolSetIdForManager\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isPoolInSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isValidPoolSetId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePoolsFromSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferPoolSetOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"params\":{\"poolSetId\":\"Id of the set involved in the operation\"}}],\"InvalidPoolSetId(uint256)\":[{\"details\":\"This can mean the value is invalid, or it was never created, or it was destroyed.\",\"params\":{\"poolSetId\":\"The id of the invalid set\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolSetManagerNotUnique(address)\":[{\"details\":\"Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\",\"params\":{\"poolSetManager\":\"Address of the manager that is already assigned to another pool set id\"}}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolRemovedFromSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetCreated(uint256,address)\":{\"details\":\"Pools are organized into separate sets, controlled by a manager, which can be changed independently.\",\"params\":{\"initialManager\":\"Address of the pool set manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetDestroyed(uint256,address)\":{\"params\":{\"manager\":\"The address of the set's last manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"details\":\"Managers can only control one pool set. Transfers to existing managers of other sets will revert.\",\"params\":{\"newManager\":\"Address of the new manager\",\"oldManager\":\"Address of the previous manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"addPoolsToSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may add pools to a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"newPools\":\"List of pools to add\",\"poolSetId\":\"Id of the set to which the new pools belong\"}},\"createPoolSet(address)\":{\"details\":\"Convenience function to create a pool set with no initial pools. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\"}},\"createPoolSet(address,address[])\":{\"details\":\"The `newPools` list can be empty, in which case this will only create the set. Pools can then be added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\",\"newPools\":\"Set of pools to add to the set\"}},\"destroyPoolSet(uint256)\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may destroy sets, effectively removing control of any pools in the set from the associated manager. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set being destroyed\"}},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAllPoolsInSet(uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"pools\":\"List of pools\"}},\"getManagerForPoolSet(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\"}},\"getNextPoolSetId()\":{\"returns\":{\"_0\":\"The pool set id that will be used on the next call of `createPoolSet`\"}},\"getPoolCountForSet(uint256)\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction. Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The current number of pools in the set\"}},\"getPoolSetIdForCaller()\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the caller is not a pool set manager\"}},\"getPoolSetIdForManager(address)\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the address given is not a pool set manager\"}},\"getPoolsInSet(uint256,uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`). Reverts if the poolSetId is not valid.\",\"params\":{\"from\":\"Start index\",\"poolSetId\":\"Id of the set containing the pools\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"isPoolInSet(address,uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"pool\":\"Address of the pool to check\",\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the pool is in the given set, false otherwise\"}},\"isValidPoolSetId(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the poolSetId exists\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"removePoolsFromSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may remove pools from a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set to which the pools belong\",\"pools\":\"List of pools to remove from the set\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"transferPoolSetOwnership(address)\":{\"details\":\"This is a permissioned function. Only the current manager of a set can call this to set a new manager. Since managers can only control a single set, there is no need to specify the id in the call. Note that this is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts if the new manager address is zero or already the manager of a pool set.\",\"params\":{\"newManager\":\"The address of the new manager\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"InvalidPoolSetId(uint256)\":[{\"notice\":\"Pool set id associated with an operation is invalid.\"}],\"InvalidPoolSetManager()\":[{\"notice\":\"The initial manager of a pool set cannot be zero.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolNotInSet(address,uint256)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolSetManagerNotUnique(address)\":[{\"notice\":\"Pool set managers can only manage a single pool set.\"}],\"SenderIsNotPoolSetManager()\":[{\"notice\":\"Permissioned operations on pools can only be performed by the pool set manager.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"notice\":\"The owner added a pool to the given set.\"},\"PoolRemovedFromSet(address,uint256)\":{\"notice\":\"The owner removed a pool from the given set.\"},\"PoolSetCreated(uint256,address)\":{\"notice\":\"The owner created a new pool set.\"},\"PoolSetDestroyed(uint256,address)\":{\"notice\":\"The owner destroyed a pool set.\"},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"notice\":\"The current manager of a pool set transferred ownership to a new address.\"}},\"kind\":\"user\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"createPoolSet(address)\":{\"notice\":\"Create a new empty set with an initial manager.\"},\"createPoolSet(address,address[])\":{\"notice\":\"Create a new set with an initial manager, optionally initialized with a set of pools.\"},\"destroyPoolSet(uint256)\":{\"notice\":\"Simple way to remove an entire set of pools from control of the helper function.\"},\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAllPoolsInSet(uint256)\":{\"notice\":\"Get the full set of pools from a given set.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"},\"getManagerForPoolSet(uint256)\":{\"notice\":\"Get the manager address associated with a given poolSetId.\"},\"getNextPoolSetId()\":{\"notice\":\"Utility function to predict the next pool set id.\"},\"getPoolCountForSet(uint256)\":{\"notice\":\"Get the number of pools associated with the given set.\"},\"getPoolSetIdForCaller()\":{\"notice\":\"Get the pool set id associated with the caller.\"},\"getPoolSetIdForManager(address)\":{\"notice\":\"Get the pool set id associated with a given manager address.\"},\"getPoolsInSet(uint256,uint256,uint256)\":{\"notice\":\"Get a range of pools from a given set.\"},\"isPoolInSet(address,uint256)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"isValidPoolSetId(uint256)\":{\"notice\":\"Check whether a poolSetId has been created.\"},\"removePoolsFromSet(uint256,address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"transferPoolSetOwnership(address)\":{\"notice\":\"Transfer ownership of a pool set from the current manager to a new manager.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/PoolHelperMock.sol\":\"PoolHelperMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xdb8365416c9dd9d7be16677c13819065511e9bc7705d6bad85fd52b65d3b3c39\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b90206982d126075b074f0a77ea9cb3ec173ed9fe9e4504b12d6807532b1b7ff\",\"dweb:/ipfs/QmYjKTu4Mrew94sSxfQ8jP4yT7wZFgghSRyB9A2kDdSy8X\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/PoolHelperCommon.sol\":{\"keccak256\":\"0xc3bd72a44d8479bacbfa4ebca2354b315160e77c378c3dc24d8cd7a41990a83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://fed38b2ea6f2842633d8d555d298adc889605bbeb3ec32728811fbc907989519\",\"dweb:/ipfs/QmX1aEVFkPAZbbSFXn6tfJnaPYWr9TDe9YHCQAiLvgZahg\"]},\"contracts/test/PoolHelperMock.sol\":{\"keccak256\":\"0xfc56a98e7725668f497e7f94766e4980346c290e0339e49ecde9bc5e5239657f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3025e9ecf7f5022a0216006a4226b37213763ab610b8f556e79f49f8582b995b\",\"dweb:/ipfs/QmUBcn7556mGNCN8SgCfkrmV7iUsewwLwKmAevbBBcvyZv\"]}},\"version\":1}"}},"contracts/test/PriceImpactHelperMock.sol":{"PriceImpactHelperMock":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IRouter","name":"router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"}],"name":"calculateAddLiquidityUnbalancedPriceImpact","outputs":[{"internalType":"uint256","name":"priceImpact","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callAndRevertHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256[]","name":"array","type":"int256[]"}],"name":"maxNegativeIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"int256[]","name":"array","type":"int256[]"}],"name":"minPositiveIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"tokenIndex","type":"uint256"},{"internalType":"int256[]","name":"deltas","type":"int256[]"},{"internalType":"address","name":"sender","type":"address"}],"name":"queryAddLiquidityUnbalancedForTokenDeltas","outputs":[{"internalType":"int256","name":"deltaBPT","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"int256[]","name":"deltas","type":"int256[]"},{"internalType":"int256[]","name":"deltaBPTs","type":"int256[]"},{"internalType":"address","name":"sender","type":"address"}],"name":"zeroOutDeltas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461009a57601f6113fd38819003918201601f19168301916001600160401b0383118484101761009e57808492604094855283398101031261009a5780516001600160a01b0391828216820361009a5760200151918216820361009a5760805260a05260405161134a90816100b3823960805181610a00015260a05181818161032501528181610b9c01528181610d500152610ef70152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60406080815260049081361015610014575f80fd5b5f3560e01c806301ef39ee146106225780630d4277d1146105e75780633b064ca31461058057806348406a5414610212578063a7699638146100ba5763e3a50d821461005e575f80fd5b346100b65760806003193601126100b657610077610725565b916044359267ffffffffffffffff84116100b65761009d6100af926020953691016106c5565b6100a5610748565b9160243590610f96565b9051908152f35b5f80fd5b5090346100b657816003193601126100b6576100d4610725565b6024359067ffffffffffffffff82116100b657366023830112156100b65781830135906101008261076b565b9261010d8651948561065d565b828452602084019036602485830101116100b6575f94856020868297602484960187378301015251925af191610141610852565b928015610193579261018f9161015a82602096336110a2565b50519384937f5ab64fb80000000000000000000000000000000000000000000000000000000085528401526024830190610881565b0390fd5b50507f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000006101e08461105b565b16146101ec5750611093565b7f28f95541000000000000000000000000000000000000000000000000000000005f525ffd5b5090346100b65760606003193601126100b65761022d610725565b90602480359167ffffffffffffffff8084116100b657366023850112156100b657838201359461025c866106ad565b946102698851968761065d565b868652602096858888019160051b830101913683116100b65786899101915b83831061057057505050506044359673ffffffffffffffffffffffffffffffffffffffff80891690818a036100b6576102c28a8986610e3b565b918351927f0f710888000000000000000000000000000000000000000000000000000000008b8501528286168985015260448401526064830152608060848301525f60a483015260a4825260e082018281108682111761054557835261034a91907f00000000000000000000000000000000000000000000000000000000000000001661113b565b92835184019388818187019603126100b657888101519182116100b657019280603f850112156100b65787840151610381816106ad565b9461038e8451968761065d565b818652838a87019260051b8201019283116100b657838a9101915b83831061053557505050506103be8651610787565b975f5b8751811015610441576103dd6103d782876107b8565b51610f41565b6103ea6103d7838b6107b8565b905f8282039212818312811691831390151617610416579060019161040f828d6107b8565b52016103c1565b876011887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50908591898989886104538251610787565b955f5b835181101561047f578061046e88886001948e610f96565b610478828b6107b8565b5201610456565b50876104b3866104ad6104a86104a261049b8f8e868f9261099c565b80946107b8565b516107f9565b611026565b956107b8565b5192670de0b6b3a76400009485810295818704149015171561050b5783156104e157505051910460011c8152f35b6012907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b82518152918101918a91016103a9565b876041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b8235815291810191899101610288565b50346100b65760806003193601126100b65761059a610725565b67ffffffffffffffff92906024358481116100b6576105bc90369084016106c5565b6044359485116100b6576105d86100af936020963691016106c5565b906105e1610748565b9261099c565b50346100b65760206003193601126100b65781359167ffffffffffffffff83116100b65761061d6100af916020943691016106c5565b610924565b50346100b65760206003193601126100b65781359167ffffffffffffffff83116100b6576106586100af916020943691016106c5565b6108a6565b90601f601f19910116810190811067ffffffffffffffff82111761068057604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116106805760051b60200190565b9080601f830112156100b65760209082356106df816106ad565b936106ed604051958661065d565b81855260208086019260051b8201019283116100b657602001905b828210610716575050505090565b81358152908301908301610708565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100b657565b6064359073ffffffffffffffffffffffffffffffffffffffff821682036100b657565b67ffffffffffffffff811161068057601f01601f191660200190565b90610791826106ad565b61079e604051918261065d565b828152601f196107ae82946106ad565b0190602036910137565b80518210156107cc5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f80000000000000000000000000000000000000000000000000000000000000008114610825575f0390565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b3d1561087c573d906108638261076b565b91610871604051938461065d565b82523d5f602084013e565b606090565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b7f800000000000000000000000000000000000000000000000000000000000000091905f805b825181101561091e575f6108e082856107b8565b51128061090b575b6108f5575b6001016108cc565b8094506109039150826107b8565b5192806108ed565b508461091782856107b8565b51136108e8565b50925050565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91905f805b825181101561091e575f61095e82856107b8565b511380610989575b610973575b60010161094a565b8094506109819150826107b8565b51928061096b565b508461099582856107b8565b5112610966565b9290935f93604051917fca4f280300000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff821660048401525f8360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa928315610e30575f93610d80575b50909192945f905b87517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161082557821015610d7557509085939291610a7a86610924565b90838986610a878a6108a6565b9a8b958b610aa36104a289610a9c85856107b8565b51936107b8565b1315610c4457610bc192610b77889593610af9610af38573ffffffffffffffffffffffffffffffffffffffff610aeb610b85989b9e82610ae3858b6107b8565b5116986107b8565b5116976107b8565b51611026565b60405195869460209a7f3ebc54e5000000000000000000000000000000000000000000000000000000008c88015260248701939060e095929373ffffffffffffffffffffffffffffffffffffffff8095818094168852166020870152166040850152606084015216608082015260c060a08201525f60c08201520190565b03601f19810183528261065d565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661113b565b82818051810103126100b657610bec825f610be58f95610bf29783960151966107b8565b528b6107b8565b52610f41565b91610bfd818b6107b8565b515f848201948512911290801582169115161761082557600192610c21828c6107b8565b52610c38610c31888c8489610f96565b91896107b8565b52019091929395610a38565b95935050505082610c5590876107b8565b5173ffffffffffffffffffffffffffffffffffffffff1690610c778a886107b8565b5173ffffffffffffffffffffffffffffffffffffffff16610c988b8d6107b8565b51610ca2906107f9565b610cab90611026565b6040517f175d44080000000000000000000000000000000000000000000000000000000060208083019190915273ffffffffffffffffffffffffffffffffffffffff8a8116602484015295861660448301529285166064820152608481019190915292891660a484015260c060c48401525f60e480850191909152835291610d356101048261065d565b610bc19073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661113b565b955050945050505090565b9092503d805f833e610d92818361065d565b81019060209081818403126100b65780519067ffffffffffffffff82116100b657019180601f840112156100b6578251610dcb816106ad565b93610dd9604051958661065d565b818552838086019260051b8201019283116100b6578301905b828210610e045750505050915f610a30565b815173ffffffffffffffffffffffffffffffffffffffff811681036100b6578152908301908301610df2565b6040513d5f823e3d90fd5b90929173ffffffffffffffffffffffffffffffffffffffff604051916020937fda001f7d00000000000000000000000000000000000000000000000000000000858501528260a48501911660248501526080604485015286518091528460c485019701905f5b818110610f2d5750505083610f1c94959683610ef5931660648601525f858203917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8301608488015252808552018361065d565b7f00000000000000000000000000000000000000000000000000000000000000001661113b565b81818051810103126100b657015190565b825189529786019791860191600101610ea1565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610f6b5790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b929091610fd183825192601f19610fc5610faf866106ad565b95610fbd604051978861065d565b8087526106ad565b013660208601376107b8565b5193841561101d57610ff993610ff35f871396875f1461100e57915b846107b8565b52610e3b565b90156110025790565b61100b906107f9565b90565b611017906107f9565b91610fed565b50505050505f90565b5f81126110305790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600481511061106b576020015190565b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b80511561106b57805190602001fd5b906110df57508051156110b757602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611132575b6110f0575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156110e8565b90303b156100b6575f6111a091604051809381927fa769963800000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff8597166004840152604060248401526044830190610881565b038183305af190816112f7575b50611299576111ba610852565b907f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000006112068461105b565b1603611293578151916020600319938481016004840152820193828286019503011261128f5760248101519067ffffffffffffffff821161128b57018260438201121561128f5760248101519061125c8261076b565b9361126a604051958661065d565b8285526044838301011161128b5790806044602093018386015e8301015290565b8280fd5b5080fd5b50611093565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6578706563746564207375636365737300000000000000000000000000006044820152fd5b90915067ffffffffffffffff8111610680576040525f905f6111ad56fea26469706673582212204db0e7aa5c44cbe955819c9d8b15e05ffce56ab00beafcdffa7c3d29a4522a2364736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x9A JUMPI PUSH1 0x1F PUSH2 0x13FD CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x9E JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x9A JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND DUP3 SUB PUSH2 0x9A JUMPI PUSH1 0x20 ADD MLOAD SWAP2 DUP3 AND DUP3 SUB PUSH2 0x9A JUMPI PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x134A SWAP1 DUP2 PUSH2 0xB3 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0xA00 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x325 ADD MSTORE DUP2 DUP2 PUSH2 0xB9C ADD MSTORE DUP2 DUP2 PUSH2 0xD50 ADD MSTORE PUSH2 0xEF7 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1EF39EE EQ PUSH2 0x622 JUMPI DUP1 PUSH4 0xD4277D1 EQ PUSH2 0x5E7 JUMPI DUP1 PUSH4 0x3B064CA3 EQ PUSH2 0x580 JUMPI DUP1 PUSH4 0x48406A54 EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0xA7699638 EQ PUSH2 0xBA JUMPI PUSH4 0xE3A50D82 EQ PUSH2 0x5E JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x77 PUSH2 0x725 JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0xB6 JUMPI PUSH2 0x9D PUSH2 0xAF SWAP3 PUSH1 0x20 SWAP6 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0xA5 PUSH2 0x748 JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xF96 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0xB6 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0xD4 PUSH2 0x725 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB6 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP2 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x100 DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP3 PUSH2 0x10D DUP7 MLOAD SWAP5 DUP6 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0xB6 JUMPI PUSH0 SWAP5 DUP6 PUSH1 0x20 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL SWAP2 PUSH2 0x141 PUSH2 0x852 JUMP JUMPDEST SWAP3 DUP1 ISZERO PUSH2 0x193 JUMPI SWAP3 PUSH2 0x18F SWAP2 PUSH2 0x15A DUP3 PUSH1 0x20 SWAP7 CALLER PUSH2 0x10A2 JUMP JUMPDEST POP MLOAD SWAP4 DUP5 SWAP4 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x881 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP POP PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x1E0 DUP5 PUSH2 0x105B JUMP JUMPDEST AND EQ PUSH2 0x1EC JUMPI POP PUSH2 0x1093 JUMP JUMPDEST PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x22D PUSH2 0x725 JUMP JUMPDEST SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT PUSH2 0xB6 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP4 DUP3 ADD CALLDATALOAD SWAP5 PUSH2 0x25C DUP7 PUSH2 0x6AD JUMP JUMPDEST SWAP5 PUSH2 0x269 DUP9 MLOAD SWAP7 DUP8 PUSH2 0x65D JUMP JUMPDEST DUP7 DUP7 MSTORE PUSH1 0x20 SWAP7 DUP6 DUP9 DUP9 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xB6 JUMPI DUP7 DUP10 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x570 JUMPI POP POP POP POP PUSH1 0x44 CALLDATALOAD SWAP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP1 DUP2 DUP11 SUB PUSH2 0xB6 JUMPI PUSH2 0x2C2 DUP11 DUP10 DUP7 PUSH2 0xE3B JUMP JUMPDEST SWAP2 DUP4 MLOAD SWAP3 PUSH32 0xF71088800000000000000000000000000000000000000000000000000000000 DUP12 DUP6 ADD MSTORE DUP3 DUP7 AND DUP10 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP4 ADD MSTORE PUSH0 PUSH1 0xA4 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 MSTORE PUSH1 0xE0 DUP3 ADD DUP3 DUP2 LT DUP7 DUP3 GT OR PUSH2 0x545 JUMPI DUP4 MSTORE PUSH2 0x34A SWAP2 SWAP1 PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST SWAP3 DUP4 MLOAD DUP5 ADD SWAP4 DUP9 DUP2 DUP2 DUP8 ADD SWAP7 SUB SLT PUSH2 0xB6 JUMPI DUP9 DUP2 ADD MLOAD SWAP2 DUP3 GT PUSH2 0xB6 JUMPI ADD SWAP3 DUP1 PUSH1 0x3F DUP6 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP8 DUP5 ADD MLOAD PUSH2 0x381 DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP5 PUSH2 0x38E DUP5 MLOAD SWAP7 DUP8 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP7 MSTORE DUP4 DUP11 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI DUP4 DUP11 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x535 JUMPI POP POP POP POP PUSH2 0x3BE DUP7 MLOAD PUSH2 0x787 JUMP JUMPDEST SWAP8 PUSH0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x441 JUMPI PUSH2 0x3DD PUSH2 0x3D7 DUP3 DUP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0xF41 JUMP JUMPDEST PUSH2 0x3EA PUSH2 0x3D7 DUP4 DUP12 PUSH2 0x7B8 JUMP JUMPDEST SWAP1 PUSH0 DUP3 DUP3 SUB SWAP3 SLT DUP2 DUP4 SLT DUP2 AND SWAP2 DUP4 SGT SWAP1 ISZERO AND OR PUSH2 0x416 JUMPI SWAP1 PUSH1 0x1 SWAP2 PUSH2 0x40F DUP3 DUP14 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD PUSH2 0x3C1 JUMP JUMPDEST DUP8 PUSH1 0x11 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 SWAP2 DUP10 DUP10 DUP10 DUP9 PUSH2 0x453 DUP3 MLOAD PUSH2 0x787 JUMP JUMPDEST SWAP6 PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x47F JUMPI DUP1 PUSH2 0x46E DUP9 DUP9 PUSH1 0x1 SWAP5 DUP15 PUSH2 0xF96 JUMP JUMPDEST PUSH2 0x478 DUP3 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD PUSH2 0x456 JUMP JUMPDEST POP DUP8 PUSH2 0x4B3 DUP7 PUSH2 0x4AD PUSH2 0x4A8 PUSH2 0x4A2 PUSH2 0x49B DUP16 DUP15 DUP7 DUP16 SWAP3 PUSH2 0x99C JUMP JUMPDEST DUP1 SWAP5 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0x7F9 JUMP JUMPDEST PUSH2 0x1026 JUMP JUMPDEST SWAP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 DUP2 MUL SWAP6 DUP2 DUP8 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x50B JUMPI DUP4 ISZERO PUSH2 0x4E1 JUMPI POP POP MLOAD SWAP2 DIV PUSH1 0x1 SHR DUP2 MSTORE RETURN JUMPDEST PUSH1 0x12 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP3 MLOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP11 SWAP2 ADD PUSH2 0x3A9 JUMP JUMPDEST DUP8 PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP10 SWAP2 ADD PUSH2 0x288 JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x59A PUSH2 0x725 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 PUSH1 0x24 CALLDATALOAD DUP5 DUP2 GT PUSH2 0xB6 JUMPI PUSH2 0x5BC SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP5 DUP6 GT PUSH2 0xB6 JUMPI PUSH2 0x5D8 PUSH2 0xAF SWAP4 PUSH1 0x20 SWAP7 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST SWAP1 PUSH2 0x5E1 PUSH2 0x748 JUMP JUMPDEST SWAP3 PUSH2 0x99C JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0xB6 JUMPI PUSH2 0x61D PUSH2 0xAF SWAP2 PUSH1 0x20 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0x924 JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0xB6 JUMPI PUSH2 0x658 PUSH2 0xAF SWAP2 PUSH1 0x20 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0x8A6 JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xB6 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x6DF DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP4 PUSH2 0x6ED PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x716 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x708 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB6 JUMPI JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB6 JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x791 DUP3 PUSH2 0x6AD JUMP JUMPDEST PUSH2 0x79E PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x7AE DUP3 SWAP5 PUSH2 0x6AD JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x7CC JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x825 JUMPI PUSH0 SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x87C JUMPI RETURNDATASIZE SWAP1 PUSH2 0x863 DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP2 PUSH2 0x871 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x65D JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 SWAP2 SWAP1 PUSH0 DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x91E JUMPI PUSH0 PUSH2 0x8E0 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SLT DUP1 PUSH2 0x90B JUMPI JUMPDEST PUSH2 0x8F5 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x8CC JUMP JUMPDEST DUP1 SWAP5 POP PUSH2 0x903 SWAP2 POP DUP3 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 DUP1 PUSH2 0x8ED JUMP JUMPDEST POP DUP5 PUSH2 0x917 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SGT PUSH2 0x8E8 JUMP JUMPDEST POP SWAP3 POP POP JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 PUSH0 DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x91E JUMPI PUSH0 PUSH2 0x95E DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SGT DUP1 PUSH2 0x989 JUMPI JUMPDEST PUSH2 0x973 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x94A JUMP JUMPDEST DUP1 SWAP5 POP PUSH2 0x981 SWAP2 POP DUP3 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 DUP1 PUSH2 0x96B JUMP JUMPDEST POP DUP5 PUSH2 0x995 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SLT PUSH2 0x966 JUMP JUMPDEST SWAP3 SWAP1 SWAP4 PUSH0 SWAP4 PUSH1 0x40 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xE30 JUMPI PUSH0 SWAP4 PUSH2 0xD80 JUMPI JUMPDEST POP SWAP1 SWAP2 SWAP3 SWAP5 PUSH0 SWAP1 JUMPDEST DUP8 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 GT PUSH2 0x825 JUMPI DUP3 LT ISZERO PUSH2 0xD75 JUMPI POP SWAP1 DUP6 SWAP4 SWAP3 SWAP2 PUSH2 0xA7A DUP7 PUSH2 0x924 JUMP JUMPDEST SWAP1 DUP4 DUP10 DUP7 PUSH2 0xA87 DUP11 PUSH2 0x8A6 JUMP JUMPDEST SWAP11 DUP12 SWAP6 DUP12 PUSH2 0xAA3 PUSH2 0x4A2 DUP10 PUSH2 0xA9C DUP6 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP4 PUSH2 0x7B8 JUMP JUMPDEST SGT ISZERO PUSH2 0xC44 JUMPI PUSH2 0xBC1 SWAP3 PUSH2 0xB77 DUP9 SWAP6 SWAP4 PUSH2 0xAF9 PUSH2 0xAF3 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xAEB PUSH2 0xB85 SWAP9 SWAP12 SWAP15 DUP3 PUSH2 0xAE3 DUP6 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MLOAD AND SWAP9 PUSH2 0x7B8 JUMP JUMPDEST MLOAD AND SWAP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0x1026 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 PUSH1 0x20 SWAP11 PUSH32 0x3EBC54E500000000000000000000000000000000000000000000000000000000 DUP13 DUP9 ADD MSTORE PUSH1 0x24 DUP8 ADD SWAP4 SWAP1 PUSH1 0xE0 SWAP6 SWAP3 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP6 DUP2 DUP1 SWAP5 AND DUP9 MSTORE AND PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x65D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST DUP3 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xB6 JUMPI PUSH2 0xBEC DUP3 PUSH0 PUSH2 0xBE5 DUP16 SWAP6 PUSH2 0xBF2 SWAP8 DUP4 SWAP7 ADD MLOAD SWAP7 PUSH2 0x7B8 JUMP JUMPDEST MSTORE DUP12 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xF41 JUMP JUMPDEST SWAP2 PUSH2 0xBFD DUP2 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH0 DUP5 DUP3 ADD SWAP5 DUP6 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x825 JUMPI PUSH1 0x1 SWAP3 PUSH2 0xC21 DUP3 DUP13 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xC38 PUSH2 0xC31 DUP9 DUP13 DUP5 DUP10 PUSH2 0xF96 JUMP JUMPDEST SWAP2 DUP10 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 PUSH2 0xA38 JUMP JUMPDEST SWAP6 SWAP4 POP POP POP POP DUP3 PUSH2 0xC55 SWAP1 DUP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0xC77 DUP11 DUP9 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xC98 DUP12 DUP14 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0xCA2 SWAP1 PUSH2 0x7F9 JUMP JUMPDEST PUSH2 0xCAB SWAP1 PUSH2 0x1026 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x175D440800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND PUSH1 0x24 DUP5 ADD MSTORE SWAP6 DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE SWAP3 DUP6 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP10 AND PUSH1 0xA4 DUP5 ADD MSTORE PUSH1 0xC0 PUSH1 0xC4 DUP5 ADD MSTORE PUSH0 PUSH1 0xE4 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MSTORE SWAP2 PUSH2 0xD35 PUSH2 0x104 DUP3 PUSH2 0x65D JUMP JUMPDEST PUSH2 0xBC1 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST SWAP6 POP POP SWAP5 POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xD92 DUP2 DUP4 PUSH2 0x65D JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0xB6 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB6 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP3 MLOAD PUSH2 0xDCB DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP4 PUSH2 0xDD9 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xE04 JUMPI POP POP POP POP SWAP2 PUSH0 PUSH2 0xA30 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB6 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 SWAP4 PUSH32 0xDA001F7D00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE DUP3 PUSH1 0xA4 DUP6 ADD SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x80 PUSH1 0x44 DUP6 ADD MSTORE DUP7 MLOAD DUP1 SWAP2 MSTORE DUP5 PUSH1 0xC4 DUP6 ADD SWAP8 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xF2D JUMPI POP POP POP DUP4 PUSH2 0xF1C SWAP5 SWAP6 SWAP7 DUP4 PUSH2 0xEF5 SWAP4 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH0 DUP6 DUP3 SUB SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP4 ADD PUSH1 0x84 DUP9 ADD MSTORE MSTORE DUP1 DUP6 MSTORE ADD DUP4 PUSH2 0x65D JUMP JUMPDEST PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST DUP2 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xB6 JUMPI ADD MLOAD SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP10 MSTORE SWAP8 DUP7 ADD SWAP8 SWAP2 DUP7 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xEA1 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF6B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0xFD1 DUP4 DUP3 MLOAD SWAP3 PUSH1 0x1F NOT PUSH2 0xFC5 PUSH2 0xFAF DUP7 PUSH2 0x6AD JUMP JUMPDEST SWAP6 PUSH2 0xFBD PUSH1 0x40 MLOAD SWAP8 DUP9 PUSH2 0x65D JUMP JUMPDEST DUP1 DUP8 MSTORE PUSH2 0x6AD JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP4 DUP5 ISZERO PUSH2 0x101D JUMPI PUSH2 0xFF9 SWAP4 PUSH2 0xFF3 PUSH0 DUP8 SGT SWAP7 DUP8 PUSH0 EQ PUSH2 0x100E JUMPI SWAP2 JUMPDEST DUP5 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xE3B JUMP JUMPDEST SWAP1 ISZERO PUSH2 0x1002 JUMPI SWAP1 JUMP JUMPDEST PUSH2 0x100B SWAP1 PUSH2 0x7F9 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1017 SWAP1 PUSH2 0x7F9 JUMP JUMPDEST SWAP2 PUSH2 0xFED JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0x1030 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP2 MLOAD LT PUSH2 0x106B JUMPI PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x106B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0x10DF JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x10B7 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x1132 JUMPI JUMPDEST PUSH2 0x10F0 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x10E8 JUMP JUMPDEST SWAP1 ADDRESS EXTCODESIZE ISZERO PUSH2 0xB6 JUMPI PUSH0 PUSH2 0x11A0 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA769963800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SWAP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x881 JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL SWAP1 DUP2 PUSH2 0x12F7 JUMPI JUMPDEST POP PUSH2 0x1299 JUMPI PUSH2 0x11BA PUSH2 0x852 JUMP JUMPDEST SWAP1 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x1206 DUP5 PUSH2 0x105B JUMP JUMPDEST AND SUB PUSH2 0x1293 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 PUSH1 0x3 NOT SWAP4 DUP5 DUP2 ADD PUSH1 0x4 DUP5 ADD MSTORE DUP3 ADD SWAP4 DUP3 DUP3 DUP7 ADD SWAP6 SUB ADD SLT PUSH2 0x128F JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x128B JUMPI ADD DUP3 PUSH1 0x43 DUP3 ADD SLT ISZERO PUSH2 0x128F JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH2 0x125C DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP4 PUSH2 0x126A PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP6 MSTORE PUSH1 0x44 DUP4 DUP4 ADD ADD GT PUSH2 0x128B JUMPI SWAP1 DUP1 PUSH1 0x44 PUSH1 0x20 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP PUSH2 0x1093 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420737563636573730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP1 PUSH0 PUSH2 0x11AD JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4D 0xB0 0xE7 0xAA TLOAD PREVRANDAO 0xCB 0xE9 SSTORE DUP2 SWAP13 SWAP14 DUP12 ISZERO 0xE0 PUSH0 0xFC 0xE5 PUSH11 0xB00BEAFCDFFA7C3D29A452 0x2A 0x23 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"302:957:93:-:0;;;;;;;;;;;;;-1:-1:-1;;302:957:93;;;;-1:-1:-1;;;;;302:957:93;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;302:957:93;;;;;;;;;;;;;;;;;;877:14:85;;901:16;;302:957:93;;;;;;;;877:14:85;302:957:93;;;;;901:16:85;302:957:93;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;302:957:93;;;;;;-1:-1:-1;302:957:93;;;;;-1:-1:-1;302:957:93"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":1864,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_6997":{"entryPoint":1829,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_array_int256_dyn":{"entryPoint":1733,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_contract_IERC20_contract_IERC20_uint256_address_stringliteral_c5d2":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_bytes":{"entryPoint":2177,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_and_zero_memory_array_array_int256_dyn":{"entryPoint":1927,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_int256_dyn":{"entryPoint":1709,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":1899,"id":null,"parameterSlots":1,"returnSlots":1},"extract_returndata":{"entryPoint":2130,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":1629,"id":null,"parameterSlots":2,"returnSlots":0},"fun_bubbleUpRevert":{"entryPoint":4243,"id":4958,"parameterSlots":1,"returnSlots":0},"fun_callAndRevert":{"entryPoint":4411,"id":18572,"parameterSlots":2,"returnSlots":1},"fun_maxNegativeIndex":{"entryPoint":2214,"id":21888,"parameterSlots":1,"returnSlots":1},"fun_minPositiveIndex":{"entryPoint":2340,"id":21835,"parameterSlots":1,"returnSlots":1},"fun_parseSelector":{"entryPoint":4187,"id":4940,"parameterSlots":1,"returnSlots":1},"fun_queryAddLiquidityUnbalanced":{"entryPoint":3643,"id":21421,"parameterSlots":3,"returnSlots":1},"fun_queryAddLiquidityUnbalancedForTokenDeltas":{"entryPoint":3990,"id":21618,"parameterSlots":4,"returnSlots":1},"fun_toInt256":{"entryPoint":3905,"id":16081,"parameterSlots":1,"returnSlots":1},"fun_toUint256":{"entryPoint":4134,"id":15245,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":4258,"id":11283,"parameterSlots":3,"returnSlots":1},"fun_zeroOutDeltas":{"entryPoint":2460,"id":21782,"parameterSlots":4,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":1976,"id":null,"parameterSlots":2,"returnSlots":1},"negate_int256":{"entryPoint":2041,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"21227":[{"length":32,"start":2560}],"21230":[{"length":32,"start":805},{"length":32,"start":2972},{"length":32,"start":3408},{"length":32,"start":3831}]},"linkReferences":{},"object":"60406080815260049081361015610014575f80fd5b5f3560e01c806301ef39ee146106225780630d4277d1146105e75780633b064ca31461058057806348406a5414610212578063a7699638146100ba5763e3a50d821461005e575f80fd5b346100b65760806003193601126100b657610077610725565b916044359267ffffffffffffffff84116100b65761009d6100af926020953691016106c5565b6100a5610748565b9160243590610f96565b9051908152f35b5f80fd5b5090346100b657816003193601126100b6576100d4610725565b6024359067ffffffffffffffff82116100b657366023830112156100b65781830135906101008261076b565b9261010d8651948561065d565b828452602084019036602485830101116100b6575f94856020868297602484960187378301015251925af191610141610852565b928015610193579261018f9161015a82602096336110a2565b50519384937f5ab64fb80000000000000000000000000000000000000000000000000000000085528401526024830190610881565b0390fd5b50507f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000006101e08461105b565b16146101ec5750611093565b7f28f95541000000000000000000000000000000000000000000000000000000005f525ffd5b5090346100b65760606003193601126100b65761022d610725565b90602480359167ffffffffffffffff8084116100b657366023850112156100b657838201359461025c866106ad565b946102698851968761065d565b868652602096858888019160051b830101913683116100b65786899101915b83831061057057505050506044359673ffffffffffffffffffffffffffffffffffffffff80891690818a036100b6576102c28a8986610e3b565b918351927f0f710888000000000000000000000000000000000000000000000000000000008b8501528286168985015260448401526064830152608060848301525f60a483015260a4825260e082018281108682111761054557835261034a91907f00000000000000000000000000000000000000000000000000000000000000001661113b565b92835184019388818187019603126100b657888101519182116100b657019280603f850112156100b65787840151610381816106ad565b9461038e8451968761065d565b818652838a87019260051b8201019283116100b657838a9101915b83831061053557505050506103be8651610787565b975f5b8751811015610441576103dd6103d782876107b8565b51610f41565b6103ea6103d7838b6107b8565b905f8282039212818312811691831390151617610416579060019161040f828d6107b8565b52016103c1565b876011887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50908591898989886104538251610787565b955f5b835181101561047f578061046e88886001948e610f96565b610478828b6107b8565b5201610456565b50876104b3866104ad6104a86104a261049b8f8e868f9261099c565b80946107b8565b516107f9565b611026565b956107b8565b5192670de0b6b3a76400009485810295818704149015171561050b5783156104e157505051910460011c8152f35b6012907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b82518152918101918a91016103a9565b876041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b8235815291810191899101610288565b50346100b65760806003193601126100b65761059a610725565b67ffffffffffffffff92906024358481116100b6576105bc90369084016106c5565b6044359485116100b6576105d86100af936020963691016106c5565b906105e1610748565b9261099c565b50346100b65760206003193601126100b65781359167ffffffffffffffff83116100b65761061d6100af916020943691016106c5565b610924565b50346100b65760206003193601126100b65781359167ffffffffffffffff83116100b6576106586100af916020943691016106c5565b6108a6565b90601f601f19910116810190811067ffffffffffffffff82111761068057604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116106805760051b60200190565b9080601f830112156100b65760209082356106df816106ad565b936106ed604051958661065d565b81855260208086019260051b8201019283116100b657602001905b828210610716575050505090565b81358152908301908301610708565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100b657565b6064359073ffffffffffffffffffffffffffffffffffffffff821682036100b657565b67ffffffffffffffff811161068057601f01601f191660200190565b90610791826106ad565b61079e604051918261065d565b828152601f196107ae82946106ad565b0190602036910137565b80518210156107cc5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f80000000000000000000000000000000000000000000000000000000000000008114610825575f0390565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b3d1561087c573d906108638261076b565b91610871604051938461065d565b82523d5f602084013e565b606090565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b7f800000000000000000000000000000000000000000000000000000000000000091905f805b825181101561091e575f6108e082856107b8565b51128061090b575b6108f5575b6001016108cc565b8094506109039150826107b8565b5192806108ed565b508461091782856107b8565b51136108e8565b50925050565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91905f805b825181101561091e575f61095e82856107b8565b511380610989575b610973575b60010161094a565b8094506109819150826107b8565b51928061096b565b508461099582856107b8565b5112610966565b9290935f93604051917fca4f280300000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff821660048401525f8360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa928315610e30575f93610d80575b50909192945f905b87517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161082557821015610d7557509085939291610a7a86610924565b90838986610a878a6108a6565b9a8b958b610aa36104a289610a9c85856107b8565b51936107b8565b1315610c4457610bc192610b77889593610af9610af38573ffffffffffffffffffffffffffffffffffffffff610aeb610b85989b9e82610ae3858b6107b8565b5116986107b8565b5116976107b8565b51611026565b60405195869460209a7f3ebc54e5000000000000000000000000000000000000000000000000000000008c88015260248701939060e095929373ffffffffffffffffffffffffffffffffffffffff8095818094168852166020870152166040850152606084015216608082015260c060a08201525f60c08201520190565b03601f19810183528261065d565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661113b565b82818051810103126100b657610bec825f610be58f95610bf29783960151966107b8565b528b6107b8565b52610f41565b91610bfd818b6107b8565b515f848201948512911290801582169115161761082557600192610c21828c6107b8565b52610c38610c31888c8489610f96565b91896107b8565b52019091929395610a38565b95935050505082610c5590876107b8565b5173ffffffffffffffffffffffffffffffffffffffff1690610c778a886107b8565b5173ffffffffffffffffffffffffffffffffffffffff16610c988b8d6107b8565b51610ca2906107f9565b610cab90611026565b6040517f175d44080000000000000000000000000000000000000000000000000000000060208083019190915273ffffffffffffffffffffffffffffffffffffffff8a8116602484015295861660448301529285166064820152608481019190915292891660a484015260c060c48401525f60e480850191909152835291610d356101048261065d565b610bc19073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661113b565b955050945050505090565b9092503d805f833e610d92818361065d565b81019060209081818403126100b65780519067ffffffffffffffff82116100b657019180601f840112156100b6578251610dcb816106ad565b93610dd9604051958661065d565b818552838086019260051b8201019283116100b6578301905b828210610e045750505050915f610a30565b815173ffffffffffffffffffffffffffffffffffffffff811681036100b6578152908301908301610df2565b6040513d5f823e3d90fd5b90929173ffffffffffffffffffffffffffffffffffffffff604051916020937fda001f7d00000000000000000000000000000000000000000000000000000000858501528260a48501911660248501526080604485015286518091528460c485019701905f5b818110610f2d5750505083610f1c94959683610ef5931660648601525f858203917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8301608488015252808552018361065d565b7f00000000000000000000000000000000000000000000000000000000000000001661113b565b81818051810103126100b657015190565b825189529786019791860191600101610ea1565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610f6b5790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b929091610fd183825192601f19610fc5610faf866106ad565b95610fbd604051978861065d565b8087526106ad565b013660208601376107b8565b5193841561101d57610ff993610ff35f871396875f1461100e57915b846107b8565b52610e3b565b90156110025790565b61100b906107f9565b90565b611017906107f9565b91610fed565b50505050505f90565b5f81126110305790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600481511061106b576020015190565b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b80511561106b57805190602001fd5b906110df57508051156110b757602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611132575b6110f0575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156110e8565b90303b156100b6575f6111a091604051809381927fa769963800000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff8597166004840152604060248401526044830190610881565b038183305af190816112f7575b50611299576111ba610852565b907f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000006112068461105b565b1603611293578151916020600319938481016004840152820193828286019503011261128f5760248101519067ffffffffffffffff821161128b57018260438201121561128f5760248101519061125c8261076b565b9361126a604051958661065d565b8285526044838301011161128b5790806044602093018386015e8301015290565b8280fd5b5080fd5b50611093565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6578706563746564207375636365737300000000000000000000000000006044820152fd5b90915067ffffffffffffffff8111610680576040525f905f6111ad56fea26469706673582212204db0e7aa5c44cbe955819c9d8b15e05ffce56ab00beafcdffa7c3d29a4522a2364736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1EF39EE EQ PUSH2 0x622 JUMPI DUP1 PUSH4 0xD4277D1 EQ PUSH2 0x5E7 JUMPI DUP1 PUSH4 0x3B064CA3 EQ PUSH2 0x580 JUMPI DUP1 PUSH4 0x48406A54 EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0xA7699638 EQ PUSH2 0xBA JUMPI PUSH4 0xE3A50D82 EQ PUSH2 0x5E JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x77 PUSH2 0x725 JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0xB6 JUMPI PUSH2 0x9D PUSH2 0xAF SWAP3 PUSH1 0x20 SWAP6 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0xA5 PUSH2 0x748 JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xF96 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0xB6 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0xD4 PUSH2 0x725 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB6 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP2 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x100 DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP3 PUSH2 0x10D DUP7 MLOAD SWAP5 DUP6 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0xB6 JUMPI PUSH0 SWAP5 DUP6 PUSH1 0x20 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL SWAP2 PUSH2 0x141 PUSH2 0x852 JUMP JUMPDEST SWAP3 DUP1 ISZERO PUSH2 0x193 JUMPI SWAP3 PUSH2 0x18F SWAP2 PUSH2 0x15A DUP3 PUSH1 0x20 SWAP7 CALLER PUSH2 0x10A2 JUMP JUMPDEST POP MLOAD SWAP4 DUP5 SWAP4 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x881 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP POP PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x1E0 DUP5 PUSH2 0x105B JUMP JUMPDEST AND EQ PUSH2 0x1EC JUMPI POP PUSH2 0x1093 JUMP JUMPDEST PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x22D PUSH2 0x725 JUMP JUMPDEST SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT PUSH2 0xB6 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP4 DUP3 ADD CALLDATALOAD SWAP5 PUSH2 0x25C DUP7 PUSH2 0x6AD JUMP JUMPDEST SWAP5 PUSH2 0x269 DUP9 MLOAD SWAP7 DUP8 PUSH2 0x65D JUMP JUMPDEST DUP7 DUP7 MSTORE PUSH1 0x20 SWAP7 DUP6 DUP9 DUP9 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xB6 JUMPI DUP7 DUP10 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x570 JUMPI POP POP POP POP PUSH1 0x44 CALLDATALOAD SWAP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP1 DUP2 DUP11 SUB PUSH2 0xB6 JUMPI PUSH2 0x2C2 DUP11 DUP10 DUP7 PUSH2 0xE3B JUMP JUMPDEST SWAP2 DUP4 MLOAD SWAP3 PUSH32 0xF71088800000000000000000000000000000000000000000000000000000000 DUP12 DUP6 ADD MSTORE DUP3 DUP7 AND DUP10 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP4 ADD MSTORE PUSH0 PUSH1 0xA4 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 MSTORE PUSH1 0xE0 DUP3 ADD DUP3 DUP2 LT DUP7 DUP3 GT OR PUSH2 0x545 JUMPI DUP4 MSTORE PUSH2 0x34A SWAP2 SWAP1 PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST SWAP3 DUP4 MLOAD DUP5 ADD SWAP4 DUP9 DUP2 DUP2 DUP8 ADD SWAP7 SUB SLT PUSH2 0xB6 JUMPI DUP9 DUP2 ADD MLOAD SWAP2 DUP3 GT PUSH2 0xB6 JUMPI ADD SWAP3 DUP1 PUSH1 0x3F DUP6 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP8 DUP5 ADD MLOAD PUSH2 0x381 DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP5 PUSH2 0x38E DUP5 MLOAD SWAP7 DUP8 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP7 MSTORE DUP4 DUP11 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI DUP4 DUP11 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x535 JUMPI POP POP POP POP PUSH2 0x3BE DUP7 MLOAD PUSH2 0x787 JUMP JUMPDEST SWAP8 PUSH0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x441 JUMPI PUSH2 0x3DD PUSH2 0x3D7 DUP3 DUP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0xF41 JUMP JUMPDEST PUSH2 0x3EA PUSH2 0x3D7 DUP4 DUP12 PUSH2 0x7B8 JUMP JUMPDEST SWAP1 PUSH0 DUP3 DUP3 SUB SWAP3 SLT DUP2 DUP4 SLT DUP2 AND SWAP2 DUP4 SGT SWAP1 ISZERO AND OR PUSH2 0x416 JUMPI SWAP1 PUSH1 0x1 SWAP2 PUSH2 0x40F DUP3 DUP14 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD PUSH2 0x3C1 JUMP JUMPDEST DUP8 PUSH1 0x11 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 SWAP2 DUP10 DUP10 DUP10 DUP9 PUSH2 0x453 DUP3 MLOAD PUSH2 0x787 JUMP JUMPDEST SWAP6 PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x47F JUMPI DUP1 PUSH2 0x46E DUP9 DUP9 PUSH1 0x1 SWAP5 DUP15 PUSH2 0xF96 JUMP JUMPDEST PUSH2 0x478 DUP3 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD PUSH2 0x456 JUMP JUMPDEST POP DUP8 PUSH2 0x4B3 DUP7 PUSH2 0x4AD PUSH2 0x4A8 PUSH2 0x4A2 PUSH2 0x49B DUP16 DUP15 DUP7 DUP16 SWAP3 PUSH2 0x99C JUMP JUMPDEST DUP1 SWAP5 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0x7F9 JUMP JUMPDEST PUSH2 0x1026 JUMP JUMPDEST SWAP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 DUP2 MUL SWAP6 DUP2 DUP8 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x50B JUMPI DUP4 ISZERO PUSH2 0x4E1 JUMPI POP POP MLOAD SWAP2 DIV PUSH1 0x1 SHR DUP2 MSTORE RETURN JUMPDEST PUSH1 0x12 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP3 MLOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP11 SWAP2 ADD PUSH2 0x3A9 JUMP JUMPDEST DUP8 PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP10 SWAP2 ADD PUSH2 0x288 JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x59A PUSH2 0x725 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 PUSH1 0x24 CALLDATALOAD DUP5 DUP2 GT PUSH2 0xB6 JUMPI PUSH2 0x5BC SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP5 DUP6 GT PUSH2 0xB6 JUMPI PUSH2 0x5D8 PUSH2 0xAF SWAP4 PUSH1 0x20 SWAP7 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST SWAP1 PUSH2 0x5E1 PUSH2 0x748 JUMP JUMPDEST SWAP3 PUSH2 0x99C JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0xB6 JUMPI PUSH2 0x61D PUSH2 0xAF SWAP2 PUSH1 0x20 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0x924 JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0xB6 JUMPI PUSH2 0x658 PUSH2 0xAF SWAP2 PUSH1 0x20 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0x8A6 JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xB6 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x6DF DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP4 PUSH2 0x6ED PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x716 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x708 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB6 JUMPI JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB6 JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x791 DUP3 PUSH2 0x6AD JUMP JUMPDEST PUSH2 0x79E PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x7AE DUP3 SWAP5 PUSH2 0x6AD JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x7CC JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x825 JUMPI PUSH0 SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x87C JUMPI RETURNDATASIZE SWAP1 PUSH2 0x863 DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP2 PUSH2 0x871 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x65D JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 SWAP2 SWAP1 PUSH0 DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x91E JUMPI PUSH0 PUSH2 0x8E0 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SLT DUP1 PUSH2 0x90B JUMPI JUMPDEST PUSH2 0x8F5 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x8CC JUMP JUMPDEST DUP1 SWAP5 POP PUSH2 0x903 SWAP2 POP DUP3 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 DUP1 PUSH2 0x8ED JUMP JUMPDEST POP DUP5 PUSH2 0x917 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SGT PUSH2 0x8E8 JUMP JUMPDEST POP SWAP3 POP POP JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 PUSH0 DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x91E JUMPI PUSH0 PUSH2 0x95E DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SGT DUP1 PUSH2 0x989 JUMPI JUMPDEST PUSH2 0x973 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x94A JUMP JUMPDEST DUP1 SWAP5 POP PUSH2 0x981 SWAP2 POP DUP3 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 DUP1 PUSH2 0x96B JUMP JUMPDEST POP DUP5 PUSH2 0x995 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SLT PUSH2 0x966 JUMP JUMPDEST SWAP3 SWAP1 SWAP4 PUSH0 SWAP4 PUSH1 0x40 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xE30 JUMPI PUSH0 SWAP4 PUSH2 0xD80 JUMPI JUMPDEST POP SWAP1 SWAP2 SWAP3 SWAP5 PUSH0 SWAP1 JUMPDEST DUP8 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 GT PUSH2 0x825 JUMPI DUP3 LT ISZERO PUSH2 0xD75 JUMPI POP SWAP1 DUP6 SWAP4 SWAP3 SWAP2 PUSH2 0xA7A DUP7 PUSH2 0x924 JUMP JUMPDEST SWAP1 DUP4 DUP10 DUP7 PUSH2 0xA87 DUP11 PUSH2 0x8A6 JUMP JUMPDEST SWAP11 DUP12 SWAP6 DUP12 PUSH2 0xAA3 PUSH2 0x4A2 DUP10 PUSH2 0xA9C DUP6 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP4 PUSH2 0x7B8 JUMP JUMPDEST SGT ISZERO PUSH2 0xC44 JUMPI PUSH2 0xBC1 SWAP3 PUSH2 0xB77 DUP9 SWAP6 SWAP4 PUSH2 0xAF9 PUSH2 0xAF3 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xAEB PUSH2 0xB85 SWAP9 SWAP12 SWAP15 DUP3 PUSH2 0xAE3 DUP6 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MLOAD AND SWAP9 PUSH2 0x7B8 JUMP JUMPDEST MLOAD AND SWAP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0x1026 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 PUSH1 0x20 SWAP11 PUSH32 0x3EBC54E500000000000000000000000000000000000000000000000000000000 DUP13 DUP9 ADD MSTORE PUSH1 0x24 DUP8 ADD SWAP4 SWAP1 PUSH1 0xE0 SWAP6 SWAP3 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP6 DUP2 DUP1 SWAP5 AND DUP9 MSTORE AND PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x65D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST DUP3 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xB6 JUMPI PUSH2 0xBEC DUP3 PUSH0 PUSH2 0xBE5 DUP16 SWAP6 PUSH2 0xBF2 SWAP8 DUP4 SWAP7 ADD MLOAD SWAP7 PUSH2 0x7B8 JUMP JUMPDEST MSTORE DUP12 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xF41 JUMP JUMPDEST SWAP2 PUSH2 0xBFD DUP2 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH0 DUP5 DUP3 ADD SWAP5 DUP6 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x825 JUMPI PUSH1 0x1 SWAP3 PUSH2 0xC21 DUP3 DUP13 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xC38 PUSH2 0xC31 DUP9 DUP13 DUP5 DUP10 PUSH2 0xF96 JUMP JUMPDEST SWAP2 DUP10 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 PUSH2 0xA38 JUMP JUMPDEST SWAP6 SWAP4 POP POP POP POP DUP3 PUSH2 0xC55 SWAP1 DUP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0xC77 DUP11 DUP9 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xC98 DUP12 DUP14 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0xCA2 SWAP1 PUSH2 0x7F9 JUMP JUMPDEST PUSH2 0xCAB SWAP1 PUSH2 0x1026 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x175D440800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND PUSH1 0x24 DUP5 ADD MSTORE SWAP6 DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE SWAP3 DUP6 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP10 AND PUSH1 0xA4 DUP5 ADD MSTORE PUSH1 0xC0 PUSH1 0xC4 DUP5 ADD MSTORE PUSH0 PUSH1 0xE4 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MSTORE SWAP2 PUSH2 0xD35 PUSH2 0x104 DUP3 PUSH2 0x65D JUMP JUMPDEST PUSH2 0xBC1 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST SWAP6 POP POP SWAP5 POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xD92 DUP2 DUP4 PUSH2 0x65D JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0xB6 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB6 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP3 MLOAD PUSH2 0xDCB DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP4 PUSH2 0xDD9 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xE04 JUMPI POP POP POP POP SWAP2 PUSH0 PUSH2 0xA30 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB6 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 SWAP4 PUSH32 0xDA001F7D00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE DUP3 PUSH1 0xA4 DUP6 ADD SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x80 PUSH1 0x44 DUP6 ADD MSTORE DUP7 MLOAD DUP1 SWAP2 MSTORE DUP5 PUSH1 0xC4 DUP6 ADD SWAP8 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xF2D JUMPI POP POP POP DUP4 PUSH2 0xF1C SWAP5 SWAP6 SWAP7 DUP4 PUSH2 0xEF5 SWAP4 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH0 DUP6 DUP3 SUB SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP4 ADD PUSH1 0x84 DUP9 ADD MSTORE MSTORE DUP1 DUP6 MSTORE ADD DUP4 PUSH2 0x65D JUMP JUMPDEST PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST DUP2 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xB6 JUMPI ADD MLOAD SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP10 MSTORE SWAP8 DUP7 ADD SWAP8 SWAP2 DUP7 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xEA1 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF6B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0xFD1 DUP4 DUP3 MLOAD SWAP3 PUSH1 0x1F NOT PUSH2 0xFC5 PUSH2 0xFAF DUP7 PUSH2 0x6AD JUMP JUMPDEST SWAP6 PUSH2 0xFBD PUSH1 0x40 MLOAD SWAP8 DUP9 PUSH2 0x65D JUMP JUMPDEST DUP1 DUP8 MSTORE PUSH2 0x6AD JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP4 DUP5 ISZERO PUSH2 0x101D JUMPI PUSH2 0xFF9 SWAP4 PUSH2 0xFF3 PUSH0 DUP8 SGT SWAP7 DUP8 PUSH0 EQ PUSH2 0x100E JUMPI SWAP2 JUMPDEST DUP5 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xE3B JUMP JUMPDEST SWAP1 ISZERO PUSH2 0x1002 JUMPI SWAP1 JUMP JUMPDEST PUSH2 0x100B SWAP1 PUSH2 0x7F9 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1017 SWAP1 PUSH2 0x7F9 JUMP JUMPDEST SWAP2 PUSH2 0xFED JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0x1030 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP2 MLOAD LT PUSH2 0x106B JUMPI PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x106B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0x10DF JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x10B7 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x1132 JUMPI JUMPDEST PUSH2 0x10F0 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x10E8 JUMP JUMPDEST SWAP1 ADDRESS EXTCODESIZE ISZERO PUSH2 0xB6 JUMPI PUSH0 PUSH2 0x11A0 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA769963800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SWAP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x881 JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL SWAP1 DUP2 PUSH2 0x12F7 JUMPI JUMPDEST POP PUSH2 0x1299 JUMPI PUSH2 0x11BA PUSH2 0x852 JUMP JUMPDEST SWAP1 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x1206 DUP5 PUSH2 0x105B JUMP JUMPDEST AND SUB PUSH2 0x1293 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 PUSH1 0x3 NOT SWAP4 DUP5 DUP2 ADD PUSH1 0x4 DUP5 ADD MSTORE DUP3 ADD SWAP4 DUP3 DUP3 DUP7 ADD SWAP6 SUB ADD SLT PUSH2 0x128F JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x128B JUMPI ADD DUP3 PUSH1 0x43 DUP3 ADD SLT ISZERO PUSH2 0x128F JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH2 0x125C DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP4 PUSH2 0x126A PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP6 MSTORE PUSH1 0x44 DUP4 DUP4 ADD ADD GT PUSH2 0x128B JUMPI SWAP1 DUP1 PUSH1 0x44 PUSH1 0x20 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP PUSH2 0x1093 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420737563636573730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP1 PUSH0 PUSH2 0x11AD JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4D 0xB0 0xE7 0xAA TLOAD PREVRANDAO 0xCB 0xE9 SSTORE DUP2 SWAP13 SWAP14 DUP12 ISZERO 0xE0 PUSH0 0xFC 0xE5 PUSH11 0xB00BEAFCDFFA7C3D29A452 0x2A 0x23 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"302:957:93:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1084:26:75;;;302:957:93;;;;;;;;-1:-1:-1;;302:957:93;;;;;;;:::i;:::-;;;;;;;;;;;658:76;302:957;;;;;;;:::i;:::-;;;:::i;:::-;;;;658:76;;:::i;:::-;302:957;;;;;;;;;;;;;;;;;-1:-1:-1;;302:957:93;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;811:19:75;;;;;;;:::i;:::-;840:718;;;;;990:10;302:957:93;990:10:75;955:63;990:10;302:957:93;990:10:75;;955:63;:::i;:::-;;302:957:93;1084:26:75;;;;;;;;302:957:93;;;;;;:::i;:::-;1084:26:75;;;840:718;1276:33;;1344:27;302:957:93;1276:33:75;;;:::i;:::-;302:957:93;1327:44:75;1323:110;;1540:6;;:::i;1323:110::-;1398:20;302:957:93;1398:20:75;302:957:93;1398:20:75;302:957:93;;;;;;;-1:-1:-1;;302:957:93;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1363:58:85;;;;;:::i;:::-;302:957:93;;;3822:254:85;3870:56;3822:254;;;;302:957:93;;;3822:254:85;;;302:957:93;;;;;;;;;;;;;;;;;;;;3822:254:85;;302:957:93;;;;;;;;;;;;;;3748:346:85;;302:957:93;3792:7:85;302:957:93;3748:346:85;:::i;:::-;302:957:93;;;3720:417:85;;;;;;;;302:957:93;;;;;3720:417:85;;;302:957:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1642:35:85;302:957:93;;1642:35:85;:::i;:::-;1692:13;302:957:93;1734:3:85;302:957:93;;1707:25:85;;;;;1765:36;:25;;;;:::i;:::-;302:957:93;1765:36:85;:::i;:::-;1804:28;:17;;;;:::i;:28::-;302:957:93;;;;;;;;;;;;;;;;;;;;;1753:79:85;302:957:93;1753:79:85;;;;;:::i;:::-;302:957:93;;1692:13:85;;302:957:93;;;;;;;;;;1707:25:85;;;;;;;;;1988:35;302:957:93;;1988:35:85;:::i;:::-;2038:13;302:957:93;2080:3:85;302:957:93;;2053:25:85;;;;;2114:67;;;;302:957:93;2114:67:85;;;:::i;:::-;2099:82;;;;:::i;:::-;302:957:93;;2038:13:85;;2053:25;;;2647:35;2053:25;2574:42;2575:28;2576:27;2312:47;2053:25;;;;;2312:47;:::i;:::-;2576:27;;;:::i;:::-;302:957:93;2575:28:85;:::i;:::-;2574:42;:::i;:::-;2647:35;;:::i;:::-;302:957:93;465:4:39;;;;;;;;;;;;;;;;;302:957:93;;;;;;;;;;;;;;;;;;;;;;;465:4:39;302:957:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;302:957:93;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;933:47;302:957;;;;;;;:::i;:::-;;;;:::i;:::-;933:47;;:::i;302:957::-;;;;;;-1:-1:-1;;302:957:93;;;;;;;;;;;;;;1091:24;302:957;;;;;;;:::i;:::-;1091:24;:::i;302:957::-;;;;;;-1:-1:-1;;302:957:93;;;;;;;;;;;;;;1226:24;302:957;;;;;;;:::i;:::-;1226:24;:::i;302:957::-;;;-1:-1:-1;;302:957:93;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;302:957:93;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;302:957:93;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;302:957:93;;;;:::o;:::-;;;:::o;:::-;;-1:-1:-1;;302:957:93;;;;;;;;;;;;;;;;;-1:-1:-1;302:957:93;;;;;;;;;;;:::o;9041:320:85:-;9152:16;;9041:320;302:957:93;;9216:3:85;302:957:93;;9198:16:85;;;;;302:957:93;9239:8:85;;;;:::i;:::-;302:957:93;9239:12:85;:30;;;9216:3;9235:110;;9216:3;302:957:93;;9183:13:85;;9235:110;9295:8;;;;;;;;:::i;:::-;302:957:93;;9321:9:85;9235:110;;9239:30;9255:8;;;;;;:::i;:::-;302:957:93;9255:14:85;9239:30;;9198:16;;;;;9041:320::o;8614:::-;8725:16;;8614:320;302:957:93;;8789:3:85;302:957:93;;8771:16:85;;;;;302:957:93;8812:8:85;;;;:::i;:::-;302:957:93;8812:12:85;:30;;;8789:3;8808:110;;8789:3;302:957:93;;8756:13:85;;8808:110;8868:8;;;;;;;;:::i;:::-;302:957:93;;8894:9:85;8808:110;;8812:30;8828:8;;;;;;:::i;:::-;302:957:93;8828:14:85;8812:30;;6391:2115;;;;302:957:93;;;;6714:26:85;302:957:93;6714:26:85;;302:957:93;;;6714:26:85;;;302:957:93;;6714:6:85;302:957:93;6714:6:85;302:957:93;6714:6:85;302:957:93;6714:26:85;;;;;;;302:957:93;6714:26:85;;;6391:2115;6756:13;;;;;302:957:93;6751:1710:85;6794:3;302:957:93;;;;;;;;;;6771:21:85;;;;;6912:28;;;;;;;;;:::i;:::-;6978;;;;;;;:::i;:::-;7021:23;;;7135:32;7170:33;7171:32;7135;;;;;:::i;:::-;302:957:93;7171:32:85;;:::i;7170:33::-;-1:-1:-1;7171:32:85;;;4399:404;7223:39;4473:312;7223:39;;;7528:35;:23;7223:39;302:957:93;7478:28:85;4473:312;7223:39;7280:40;7429:27;;;;;;:::i;:::-;302:957:93;;7478:28:85;;:::i;:::-;302:957:93;;7528:23:85;;:::i;:::-;302:957:93;7528:35:85;:::i;:::-;302:957:93;;;;;;4473:312:85;4521:51;4473:312;;;;302:957:93;4473:312:85;;302:957:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4473:312:85;;-1:-1:-1;;4473:312:85;;;;;;:::i;:::-;302:957:93;4443:7:85;302:957:93;4399:404:85;:::i;:::-;302:957:93;;;;4371:473:85;;302:957:93;;;;8151:30:85;4371:473;302:957:93;8110:27:85;4371:473;;8223:23;4371:473;;;;302:957:93;7131:922:85;8110:27;:::i;:::-;302:957:93;8151:30:85;;:::i;:::-;302:957:93;8223:23:85;:::i;:::-;8195:51;;;;;:::i;:::-;302:957:93;;;;;;;;;;;;;;;;;;;;;6791:1:85;8195:51;;;;;:::i;:::-;302:957:93;8260:190:85;8290:160;;;;;;:::i;:::-;8260:190;;;:::i;:::-;302:957:93;;6756:13:85;;;;;;;7131:922;7648:39;;;;;;7705:40;7855:28;;;;:::i;:::-;302:957:93;;;7905:27:85;;;;;:::i;:::-;302:957:93;;;7956:23:85;;;;:::i;:::-;302:957:93;7955:24:85;;;:::i;:::-;7954:38;;;:::i;:::-;302:957:93;;5230:52:85;302:957:93;5182:314:85;;;;;;;302:957:93;;;;;5182:314:85;;302:957:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;302:957:93;;;;;;;;5182:314:85;;302:957:93;5182:314:85;302:957:93;;5182:314:85;:::i;:::-;5108:406;;302:957:93;5152:7:85;302:957:93;5108:406:85;:::i;6771:21::-;;;;;;;;;6391:2115;:::o;6714:26::-;;;;;;302:957:93;6714:26:85;;;;;;:::i;:::-;;;302:957:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;6714:26:85;;;;;;;;302:957:93;;;;;;;;;;;;;;;;;;;;6714:26:85;302:957:93;;;;;;;;;2918:606:85;;;;302:957:93;;;3207:251:85;;;3255:51;3207:251;;;;302:957:93;;;;;;3207:251:85;;;302:957:93;;;;;;;;;;;;;;;;;;-1:-1:-1;302:957:93;;;;;;;;;;3133:343:85;302:957:93;;;;3207:251:85;302:957:93;;;;;;-1:-1:-1;302:957:93;;;;;;;;;;;;3207:251:85;;;;;;:::i;:::-;3177:7;302:957:93;3133:343:85;:::i;:::-;302:957:93;;;;3105:412:85;;302:957:93;;;;3105:412:85;302:957:93;2918:606:85;:::o;302:957:93:-;;;;;;;;;;;;;;;;;34380:314:71;34573:16;34557:33;;34553:105;;34380:314;:::o;34553:105::-;34613:34;;;;302:957:93;;34613:34:71;;5783:602:85;;;;6076:18;302:957:93;;;;-1:-1:-1;;302:957:93;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;6076:18:85;:::i;:::-;302:957:93;6109:10:85;;;6105:49;;6267:64;6207:9;6164:70;302:957:93;6207:9:85;;:26;;;;;;;;6164:70;;:::i;:::-;302:957:93;6267:64:85;:::i;:::-;6350:28;;;;5783:602;:::o;6350:28::-;6371:7;;;:::i;:::-;5783:602;:::o;6207:26::-;6227:6;;;:::i;:::-;6207:26;;;6105:49;6135:8;;;;;302:957:93;6135:8:85;:::o;17171:193:71:-;17258:1;17250:9;;17246:81;;17171:193;:::o;17246:81::-;17282:34;17258:1;17282:34;;302:957:93;;17258:1:71;17282:34;1336:351:37;1463:1;302:957:93;;1443:21:37;1439:82;;1530:151;;;1336:351;:::o;1439:82::-;1487:23;;;1463:1;1487:23;;1741:504;302:957:93;;1881:21:37;:17;;2008:160;;;;;;4437:582:61;;4609:8;;-1:-1:-1;302:957:93;;5690:21:61;:17;;5815:105;;;;;;5686:301;5957:19;5710:1;5957:19;;5710:1;5957:19;4605:408;302:957:93;;4857:22:61;:49;;;4605:408;4853:119;;4985:17;;:::o;4853:119::-;302:957:93;4933:24:61;;4878:1;4933:24;302:957:93;4933:24:61;302:957:93;;4878:1:61;4933:24;4857:49;4883:18;;;:23;4857:49;;303:324:75;;430:4;408:60;;;;;302:957:93;;;;408:60:75;;;;302:957:93;408:60:75;;302:957:93;408:60:75;302:957:93;;408:60:75;;;302:957:93;;;;;;;;;;;:::i;:::-;408:60:75;430:4;;;408:60;;;;;;303:324;-1:-1:-1;404:217:75;;523:98;;:::i;:::-;720:36:37;787:15;302:957:93;720:36:37;;;:::i;:::-;302:957:93;770:32:37;766:185;;302:957:93;;1013:179:37;1209:30;-1:-1:-1;;1013:179:37;;;;408:60:75;1013:179:37;;;1209:30;;;;;;;302:957:93;;;;;;;1209:30:37;;302:957:93;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;1209:30:37;302:957:93;;;;;;;;;;565:45:75;:::o;302:957:93:-;;;;;;;;766:185:37;930:9;;:::i;404:217:75:-;302:957:93;;;483:28:75;;;302:957:93;408:60:75;483:28;;302:957:93;;;;;;;;;;;483:28:75;408:60;302:957:93;;;;;;;;;;408:60:75;;;;"},"methodIdentifiers":{"calculateAddLiquidityUnbalancedPriceImpact(address,uint256[],address)":"48406a54","callAndRevertHook(address,bytes)":"a7699638","maxNegativeIndex(int256[])":"01ef39ee","minPositiveIndex(int256[])":"0d4277d1","queryAddLiquidityUnbalancedForTokenDeltas(address,uint256,int256[],address)":"e3a50d82","zeroOutDeltas(address,int256[],int256[],address)":"3b064ca3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IRouter\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"calculateAddLiquidityUnbalancedPriceImpact\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"priceImpact\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callAndRevertHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"array\",\"type\":\"int256[]\"}],\"name\":\"maxNegativeIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"array\",\"type\":\"int256[]\"}],\"name\":\"minPositiveIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"int256[]\",\"name\":\"deltas\",\"type\":\"int256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"queryAddLiquidityUnbalancedForTokenDeltas\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"deltaBPT\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"int256[]\",\"name\":\"deltas\",\"type\":\"int256[]\"},{\"internalType\":\"int256[]\",\"name\":\"deltaBPTs\",\"type\":\"int256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"zeroOutDeltas\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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.\"}],\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/PriceImpactHelperMock.sol\":\"PriceImpactHelperMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":{\"keccak256\":\"0x5a0ee9f30170b2df308aa992f331d2070f389c1c7261b166ad8dcf058b079c00\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://89a654106d847701efa4cffbe73d98aea2bc0f9a041a28b4762f127fce48eba3\",\"dweb:/ipfs/QmVZKnQqxmydspv6P6e4137QHiNnhP6J7fzWh9XFuJj6At\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol\":{\"keccak256\":\"0x7a46d0e972ea96fe2190b4975d71fa033fbc65cb596f3c584a47b37b2b58ade1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://56e07234b208282d0751b31eefbed6d48cfacddd9c2dbad7f4fbc55789bdc0ca\",\"dweb:/ipfs/QmTRLGeyZNzKY3S4JUWwDshCMfnY6WMFq2BGD5BozWFAnC\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"contracts/CallAndRevert.sol\":{\"keccak256\":\"0xe0f09e833265592b398c7607db658e3541b800f66c9536ee129ae6863e4185f2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bc7dd31dd95f738debb5ca8c8b80e90384c1d8b72dc70e02dd7ae22e7c77f337\",\"dweb:/ipfs/QmNaJXyazNRD1fbqs6QJSwB3VWKu3ZjHqecMqKg57UeMuS\"]},\"contracts/PriceImpactHelper.sol\":{\"keccak256\":\"0xdba22a15b68c0631a6da1de1a5e2e568339959f29950046b8ca881f7ac5e301f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5973227783a748f09558f2b5943d66128636b63936d847719c33d1158b06ce86\",\"dweb:/ipfs/QmVke3xsrpFf9H28dyrTaYhxbPU4aGywtUf6NaKzgRAb4v\"]},\"contracts/test/PriceImpactHelperMock.sol\":{\"keccak256\":\"0xe26253f71789842fffe3d5e48f5fb13a7aed480f8027c1084a0601b02d9fb3f9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70f67c49efb5abf6e726635b6e797a7b4e335d4cd9650affce44c19305511566\",\"dweb:/ipfs/QmU2XCzDpMjBrhdaQJ6aAvqPJ2xQbomTpJGEmG6BpDAKrE\"]}},\"version\":1}"}},"contracts/test/ProtocolFeeBurnerMock.sol":{"ProtocolFeeBurnerMock":{"abi":[{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ratio","type":"uint256"}],"name":"setTokenRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setTransferFromEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234602c57670de0b6b3a76400005f55600160ff198154161760015561042490816100318239f35b5f80fdfe6080604081815260049081361015610015575f80fd5b5f925f3560e01c9182637d341ad614610382578263de557a321461007c57505063e38e91f914610043575f80fd5b346100785760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100785735815580f35b5080fd5b909150346102735760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102735782359073ffffffffffffffffffffffffffffffffffffffff8083168093036102735760249182359582871695868803610273576044359460643598858a16809a03610273576084359260a4359687168097036102735760c435421161035b5760ff60015416610277575b5050883b15610273575f808a60448751809481937f40c10f190000000000000000000000000000000000000000000000000000000083528b8a8401528c888401525af1801561026957610222575b5089548087029087820414871517156101f757670de0b6b3a76400009004928284106101c557505082519485525060208401528201527f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d90606090a480f35b928a92918a6064957f2f785e460000000000000000000000000000000000000000000000000000000086525252604452fd5b50896011847f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b90995067ffffffffffffffff811161023e5783525f985f610166565b896041847f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b85513d5f823e3d90fd5b5f80fd5b60208101907f23b872dd00000000000000000000000000000000000000000000000000000000825233848201523060448201528860648201526064815260a0810181811067ffffffffffffffff821117610330578752516020925f929083905af115610326575f513d61031d5750873b155b6102f4575f80610118565b87837f5274afe7000000000000000000000000000000000000000000000000000000005f52525ffd5b600114156102e9565b83513d5f823e3d90fd5b846041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b847fe08b8af0000000000000000000000000000000000000000000000000000000005f525ffd5b83346102735760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027357358015158091036102735760ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00600154169116176001555f80f3fea264697066735822122017388e506030eb1c0482f93d9b1ae15973d16fee6ae35bff834e94d3e594c05e64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x2C JUMPI PUSH8 0xDE0B6B3A7640000 PUSH0 SSTORE PUSH1 0x1 PUSH1 0xFF NOT DUP2 SLOAD AND OR PUSH1 0x1 SSTORE PUSH2 0x424 SWAP1 DUP2 PUSH2 0x31 DUP3 CODECOPY RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP3 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x7D341AD6 EQ PUSH2 0x382 JUMPI DUP3 PUSH4 0xDE557A32 EQ PUSH2 0x7C JUMPI POP POP PUSH4 0xE38E91F9 EQ PUSH2 0x43 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x78 JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x78 JUMPI CALLDATALOAD DUP2 SSTORE DUP1 RETURN JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0x273 JUMPI PUSH1 0xE0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x273 JUMPI DUP3 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP1 SWAP4 SUB PUSH2 0x273 JUMPI PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD SWAP6 DUP3 DUP8 AND SWAP6 DUP7 DUP9 SUB PUSH2 0x273 JUMPI PUSH1 0x44 CALLDATALOAD SWAP5 PUSH1 0x64 CALLDATALOAD SWAP9 DUP6 DUP11 AND DUP1 SWAP11 SUB PUSH2 0x273 JUMPI PUSH1 0x84 CALLDATALOAD SWAP3 PUSH1 0xA4 CALLDATALOAD SWAP7 DUP8 AND DUP1 SWAP8 SUB PUSH2 0x273 JUMPI PUSH1 0xC4 CALLDATALOAD TIMESTAMP GT PUSH2 0x35B JUMPI PUSH1 0xFF PUSH1 0x1 SLOAD AND PUSH2 0x277 JUMPI JUMPDEST POP POP DUP9 EXTCODESIZE ISZERO PUSH2 0x273 JUMPI PUSH0 DUP1 DUP11 PUSH1 0x44 DUP8 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x40C10F1900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP12 DUP11 DUP5 ADD MSTORE DUP13 DUP9 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x269 JUMPI PUSH2 0x222 JUMPI JUMPDEST POP DUP10 SLOAD DUP1 DUP8 MUL SWAP1 DUP8 DUP3 DIV EQ DUP8 ISZERO OR ISZERO PUSH2 0x1F7 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP3 DUP3 DUP5 LT PUSH2 0x1C5 JUMPI POP POP DUP3 MLOAD SWAP5 DUP6 MSTORE POP PUSH1 0x20 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP1 PUSH1 0x60 SWAP1 LOG4 DUP1 RETURN JUMPDEST SWAP3 DUP11 SWAP3 SWAP2 DUP11 PUSH1 0x64 SWAP6 PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE MSTORE MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST POP DUP10 PUSH1 0x11 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 SWAP10 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x23E JUMPI DUP4 MSTORE PUSH0 SWAP9 PUSH0 PUSH2 0x166 JUMP JUMPDEST DUP10 PUSH1 0x41 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE CALLER DUP5 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE DUP9 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x330 JUMPI DUP8 MSTORE MLOAD PUSH1 0x20 SWAP3 PUSH0 SWAP3 SWAP1 DUP4 SWAP1 GAS CALL ISZERO PUSH2 0x326 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x31D JUMPI POP DUP8 EXTCODESIZE ISZERO JUMPDEST PUSH2 0x2F4 JUMPI PUSH0 DUP1 PUSH2 0x118 JUMP JUMPDEST DUP8 DUP4 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x2E9 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x273 JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x273 JUMPI CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x273 JUMPI PUSH1 0xFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x1 SLOAD AND SWAP2 AND OR PUSH1 0x1 SSTORE PUSH0 DUP1 RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 OR CODESIZE DUP15 POP PUSH1 0x30 0xEB SHR DIV DUP3 0xF9 RETURNDATASIZE SWAP12 BYTE 0xE1 MSIZE PUSH20 0xD16FEE6AE35BFF834E94D3E594C05E64736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"544:1496:94:-:0;;;;;;;465:4:39;700:14:94;465:4:39;748::94;465::39;;;;;;748::94;465::39;544:1496:94;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604081815260049081361015610015575f80fd5b5f925f3560e01c9182637d341ad614610382578263de557a321461007c57505063e38e91f914610043575f80fd5b346100785760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100785735815580f35b5080fd5b909150346102735760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102735782359073ffffffffffffffffffffffffffffffffffffffff8083168093036102735760249182359582871695868803610273576044359460643598858a16809a03610273576084359260a4359687168097036102735760c435421161035b5760ff60015416610277575b5050883b15610273575f808a60448751809481937f40c10f190000000000000000000000000000000000000000000000000000000083528b8a8401528c888401525af1801561026957610222575b5089548087029087820414871517156101f757670de0b6b3a76400009004928284106101c557505082519485525060208401528201527f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d90606090a480f35b928a92918a6064957f2f785e460000000000000000000000000000000000000000000000000000000086525252604452fd5b50896011847f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b90995067ffffffffffffffff811161023e5783525f985f610166565b896041847f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b85513d5f823e3d90fd5b5f80fd5b60208101907f23b872dd00000000000000000000000000000000000000000000000000000000825233848201523060448201528860648201526064815260a0810181811067ffffffffffffffff821117610330578752516020925f929083905af115610326575f513d61031d5750873b155b6102f4575f80610118565b87837f5274afe7000000000000000000000000000000000000000000000000000000005f52525ffd5b600114156102e9565b83513d5f823e3d90fd5b846041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b847fe08b8af0000000000000000000000000000000000000000000000000000000005f525ffd5b83346102735760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027357358015158091036102735760ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00600154169116176001555f80f3fea264697066735822122017388e506030eb1c0482f93d9b1ae15973d16fee6ae35bff834e94d3e594c05e64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP3 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x7D341AD6 EQ PUSH2 0x382 JUMPI DUP3 PUSH4 0xDE557A32 EQ PUSH2 0x7C JUMPI POP POP PUSH4 0xE38E91F9 EQ PUSH2 0x43 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x78 JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x78 JUMPI CALLDATALOAD DUP2 SSTORE DUP1 RETURN JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0x273 JUMPI PUSH1 0xE0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x273 JUMPI DUP3 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP1 SWAP4 SUB PUSH2 0x273 JUMPI PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD SWAP6 DUP3 DUP8 AND SWAP6 DUP7 DUP9 SUB PUSH2 0x273 JUMPI PUSH1 0x44 CALLDATALOAD SWAP5 PUSH1 0x64 CALLDATALOAD SWAP9 DUP6 DUP11 AND DUP1 SWAP11 SUB PUSH2 0x273 JUMPI PUSH1 0x84 CALLDATALOAD SWAP3 PUSH1 0xA4 CALLDATALOAD SWAP7 DUP8 AND DUP1 SWAP8 SUB PUSH2 0x273 JUMPI PUSH1 0xC4 CALLDATALOAD TIMESTAMP GT PUSH2 0x35B JUMPI PUSH1 0xFF PUSH1 0x1 SLOAD AND PUSH2 0x277 JUMPI JUMPDEST POP POP DUP9 EXTCODESIZE ISZERO PUSH2 0x273 JUMPI PUSH0 DUP1 DUP11 PUSH1 0x44 DUP8 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x40C10F1900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP12 DUP11 DUP5 ADD MSTORE DUP13 DUP9 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x269 JUMPI PUSH2 0x222 JUMPI JUMPDEST POP DUP10 SLOAD DUP1 DUP8 MUL SWAP1 DUP8 DUP3 DIV EQ DUP8 ISZERO OR ISZERO PUSH2 0x1F7 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP3 DUP3 DUP5 LT PUSH2 0x1C5 JUMPI POP POP DUP3 MLOAD SWAP5 DUP6 MSTORE POP PUSH1 0x20 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP1 PUSH1 0x60 SWAP1 LOG4 DUP1 RETURN JUMPDEST SWAP3 DUP11 SWAP3 SWAP2 DUP11 PUSH1 0x64 SWAP6 PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE MSTORE MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST POP DUP10 PUSH1 0x11 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 SWAP10 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x23E JUMPI DUP4 MSTORE PUSH0 SWAP9 PUSH0 PUSH2 0x166 JUMP JUMPDEST DUP10 PUSH1 0x41 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE CALLER DUP5 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE DUP9 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x330 JUMPI DUP8 MSTORE MLOAD PUSH1 0x20 SWAP3 PUSH0 SWAP3 SWAP1 DUP4 SWAP1 GAS CALL ISZERO PUSH2 0x326 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x31D JUMPI POP DUP8 EXTCODESIZE ISZERO JUMPDEST PUSH2 0x2F4 JUMPI PUSH0 DUP1 PUSH2 0x118 JUMP JUMPDEST DUP8 DUP4 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x2E9 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x273 JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x273 JUMPI CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x273 JUMPI PUSH1 0xFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x1 SLOAD AND SWAP2 AND OR PUSH1 0x1 SSTORE PUSH0 DUP1 RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 OR CODESIZE DUP15 POP PUSH1 0x30 0xEB SHR DIV DUP3 0xF9 RETURNDATASIZE SWAP12 BYTE 0xE1 MSIZE PUSH20 0xD16FEE6AE35BFF834E94D3E594C05E64736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"544:1496:94:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1038:15;:26;1034:78;;544:1496;;;;1122:125;;544:1496;1341:75;;;;;;;544:1496;;;;;;1341:75;;;;544:1496;1341:75;;;;;;544:1496;;;;;;1341:75;;;;;;;;544:1496;;;;;;;;;;;;;;;;;;465:4:39;;;1511:32:94;;;;1507:133;;-1:-1:-1;;544:1496:94;;;;;-1:-1:-1;544:1496:94;;;;;;;1736:99;;544:1496;;1736:99;544:1496;;1507:133;1566:63;;;;;544:1496;1566:63;;;;544:1496;;;;1566:63;544:1496;;;;;;;;;;1341:75;544:1496;;;;;;;;;;;1341:75;;;;544:1496;;;;;;;;;;1341:75;544:1496;;;;;;;;;1341:75;544:1496;;;1122:125;544:1496;1745:53:60;;;544:1496:94;1745:53:60;;1187:10:94;1745:53:60;;;544:1496:94;1207:4;544:1496;;;;;;;;;;1745:53:60;;544:1496:94;;;;;;;;;;;;;;8507:421:60;544:1496:94;;;;;;;8507:421:60;;;;;544:1496:94;8507:421:60;;8942:15;;8960:26;;;:31;8942:68;8938:146;;1122:125:94;;;;8938:146:60;9033:40;;;544:1496:94;9033:40:60;544:1496:94;;9033:40:60;8942:68;544:1496:94;8994:16:60;;8942:68;;8507:421;;;;544:1496:94;8507:421:60;;;;;544:1496:94;;;;;;;;;;1034:78;1087:14;;544:1496;1087:14;544:1496;1087:14;544:1496;;;;;;;;;;;;;;;;;;;;;;;2002:29;544:1496;;;;;2002:29;544:1496;;;"},"methodIdentifiers":{"burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","setTokenRatio(uint256)":"e38e91f9","setTransferFromEnabled(bool)":"7d341ad6"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ratio\",\"type\":\"uint256\"}],\"name\":\"setTokenRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setTransferFromEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/ProtocolFeeBurnerMock.sol\":\"ProtocolFeeBurnerMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol\":{\"keccak256\":\"0x6c1d91dd0f44221f140ab22e9e981ef1f9028018428f0c9cb41577e757e1b4b8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c42dce6530450a6476970b6bd0aa8feec8b12c5b3837702f94395ab3157cede7\",\"dweb:/ipfs/QmYb3V9wcMTjdN1XwNdQM4ZHG9EcFvKLZNKDFRyraBW5DQ\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x86b7b71a6aedefdad89b607378eeab1dcc5389b9ea7d17346d08af01d7190994\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1dc2db8d94a21eac8efe03adf574c419b08536409b416057a2b5b95cb772c43c\",\"dweb:/ipfs/QmZfqJCKVU1ScuX2A7s8WZdQEaikwJbDH5JBrBdKTUT4Gu\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/test/ProtocolFeeBurnerMock.sol\":{\"keccak256\":\"0x7cfd3dfbc1895894ba1d79d4f0d9846b23885d73efaa632793a0492ad87438a3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d7455c59d8ad21fbf51407692f502313802d5cb0fdd96b3542b5f58c865781bf\",\"dweb:/ipfs/QmVe1Zuor843H3SgX3kBNHnJUENHJU3jK3eUfVAnPBbtsD\"]}},\"version\":1}"}},"contracts/test/VaultMockForFeeSweeper.sol":{"VaultMockForFeeSweeper":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"addOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"owners","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"removeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234602b57335f525f60205260405f20600160ff1982541617905561059790816100308239f35b5f80fdfe60806040908082526004361015610014575f80fd5b5f3560e01c908163022914a71461044c57508063173825d9146103d45780637065cb481461035957806385f2dbd4146102bd5780638f4ab9ca1461033e5780639be2a884146102d7578063aaabadc5146102bd578063b53a70b2146100d35763c6a92e1614610081575f80fd5b346100cf57806003193601126100cf576020906100c661009f6104b4565b73ffffffffffffffffffffffffffffffffffffffff165f525f60205260ff60405f20541690565b90519015158152f35b5f80fd5b50346100cf5760606003193601126100cf576100ed610491565b506100f66104b4565b906044359173ffffffffffffffffffffffffffffffffffffffff808416938481036100cf57335f526020925f845261013360ff865f2054166104d7565b84517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015284816024818a5afa9081156102b3575f91610251575b50855193858501927fa9059cbb0000000000000000000000000000000000000000000000000000000084521660248501526044840152604483526080830183811067ffffffffffffffff821117610224575f938491875251925af11561021b57505f513d6102125750803b155b6101e757005b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600114156101e1565b513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b9050843d86116102ac575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116820182811067ffffffffffffffff82111761022457869183918952810103126100cf57515f610174565b503d61025c565b86513d5f823e3d90fd5b50346100cf575f6003193601126100cf5760209051308152f35b50346100cf5760606003193601126100cf576102f16104b4565b9060443573ffffffffffffffffffffffffffffffffffffffff8116036100cf576100c660209273ffffffffffffffffffffffffffffffffffffffff165f525f60205260ff60405f20541690565b346100cf5760206003193601126100cf57610357610491565b005b50346100cf5760206003193601126100cf5773ffffffffffffffffffffffffffffffffffffffff610388610491565b335f525f60205261039e60ff845f2054166104d7565b165f525f6020525f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790555f80f35b50346100cf5760206003193601126100cf5773ffffffffffffffffffffffffffffffffffffffff610403610491565b335f525f60205261041960ff845f2054166104d7565b165f525f6020525f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690555f80f35b9050346100cf5760206003193601126100cf5760ff60209273ffffffffffffffffffffffffffffffffffffffff610481610491565b165f525f84525f20541615158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100cf57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100cf57565b156104de57565b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f5661756c744d6f636b466f72466565537765657065723a204e6f7420616e206f60448201527f776e6572000000000000000000000000000000000000000000000000000000006064820152fdfea2646970667358221220a41a3f95fcc7752ceb33f3d50027f614411ea4da2e3990e0b4f62173b674999964736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x2B JUMPI CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH1 0xFF NOT DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0x597 SWAP1 DUP2 PUSH2 0x30 DUP3 CODECOPY RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x22914A7 EQ PUSH2 0x44C JUMPI POP DUP1 PUSH4 0x173825D9 EQ PUSH2 0x3D4 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x359 JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x2BD JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x33E JUMPI DUP1 PUSH4 0x9BE2A884 EQ PUSH2 0x2D7 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x2BD JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xD3 JUMPI PUSH4 0xC6A92E16 EQ PUSH2 0x81 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xCF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0x20 SWAP1 PUSH2 0xC6 PUSH2 0x9F PUSH2 0x4B4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0xED PUSH2 0x491 JUMP JUMPDEST POP PUSH2 0xF6 PUSH2 0x4B4 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND SWAP4 DUP5 DUP2 SUB PUSH2 0xCF JUMPI CALLER PUSH0 MSTORE PUSH1 0x20 SWAP3 PUSH0 DUP5 MSTORE PUSH2 0x133 PUSH1 0xFF DUP7 PUSH0 KECCAK256 SLOAD AND PUSH2 0x4D7 JUMP JUMPDEST DUP5 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2B3 JUMPI PUSH0 SWAP2 PUSH2 0x251 JUMPI JUMPDEST POP DUP6 MLOAD SWAP4 DUP6 DUP6 ADD SWAP3 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x44 DUP4 MSTORE PUSH1 0x80 DUP4 ADD DUP4 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x224 JUMPI PUSH0 SWAP4 DUP5 SWAP2 DUP8 MSTORE MLOAD SWAP3 GAS CALL ISZERO PUSH2 0x21B JUMPI POP PUSH0 MLOAD RETURNDATASIZE PUSH2 0x212 JUMPI POP DUP1 EXTCODESIZE ISZERO JUMPDEST PUSH2 0x1E7 JUMPI STOP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x1E1 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x2AC JUMPI JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x224 JUMPI DUP7 SWAP2 DUP4 SWAP2 DUP10 MSTORE DUP2 ADD SUB SLT PUSH2 0xCF JUMPI MLOAD PUSH0 PUSH2 0x174 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x25C JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0x20 SWAP1 MLOAD ADDRESS DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0x2F1 PUSH2 0x4B4 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND SUB PUSH2 0xCF JUMPI PUSH2 0xC6 PUSH1 0x20 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0x357 PUSH2 0x491 JUMP JUMPDEST STOP JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x388 PUSH2 0x491 JUMP JUMPDEST CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x39E PUSH1 0xFF DUP5 PUSH0 KECCAK256 SLOAD AND PUSH2 0x4D7 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x403 PUSH2 0x491 JUMP JUMPDEST CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x419 PUSH1 0xFF DUP5 PUSH0 KECCAK256 SLOAD AND PUSH2 0x4D7 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0xFF PUSH1 0x20 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x481 PUSH2 0x491 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 DUP5 MSTORE PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xCF JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xCF JUMPI JUMP JUMPDEST ISZERO PUSH2 0x4DE JUMPI JUMP JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x5661756C744D6F636B466F72466565537765657065723A204E6F7420616E206F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x776E657200000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG4 BYTE EXTCODEHASH SWAP6 0xFC 0xC7 PUSH22 0x2CEB33F3D50027F614411EA4DA2E3990E0B4F62173B6 PUSH21 0x999964736F6C634300081B00330000000000000000 ","sourceMap":"437:1297:95:-:0;;;;;;;599:10;592:6;437:1297;592:6;437:1297;;;592:6;437:1297;613:4;437:1297;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":1204,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_3916":{"entryPoint":1169,"id":null,"parameterSlots":0,"returnSlots":1},"fun_canPerform":{"entryPoint":null,"id":24412,"parameterSlots":1,"returnSlots":1},"require_helper_stringliteral_6a76":{"entryPoint":1239,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"60806040908082526004361015610014575f80fd5b5f3560e01c908163022914a71461044c57508063173825d9146103d45780637065cb481461035957806385f2dbd4146102bd5780638f4ab9ca1461033e5780639be2a884146102d7578063aaabadc5146102bd578063b53a70b2146100d35763c6a92e1614610081575f80fd5b346100cf57806003193601126100cf576020906100c661009f6104b4565b73ffffffffffffffffffffffffffffffffffffffff165f525f60205260ff60405f20541690565b90519015158152f35b5f80fd5b50346100cf5760606003193601126100cf576100ed610491565b506100f66104b4565b906044359173ffffffffffffffffffffffffffffffffffffffff808416938481036100cf57335f526020925f845261013360ff865f2054166104d7565b84517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015284816024818a5afa9081156102b3575f91610251575b50855193858501927fa9059cbb0000000000000000000000000000000000000000000000000000000084521660248501526044840152604483526080830183811067ffffffffffffffff821117610224575f938491875251925af11561021b57505f513d6102125750803b155b6101e757005b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600114156101e1565b513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b9050843d86116102ac575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116820182811067ffffffffffffffff82111761022457869183918952810103126100cf57515f610174565b503d61025c565b86513d5f823e3d90fd5b50346100cf575f6003193601126100cf5760209051308152f35b50346100cf5760606003193601126100cf576102f16104b4565b9060443573ffffffffffffffffffffffffffffffffffffffff8116036100cf576100c660209273ffffffffffffffffffffffffffffffffffffffff165f525f60205260ff60405f20541690565b346100cf5760206003193601126100cf57610357610491565b005b50346100cf5760206003193601126100cf5773ffffffffffffffffffffffffffffffffffffffff610388610491565b335f525f60205261039e60ff845f2054166104d7565b165f525f6020525f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790555f80f35b50346100cf5760206003193601126100cf5773ffffffffffffffffffffffffffffffffffffffff610403610491565b335f525f60205261041960ff845f2054166104d7565b165f525f6020525f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690555f80f35b9050346100cf5760206003193601126100cf5760ff60209273ffffffffffffffffffffffffffffffffffffffff610481610491565b165f525f84525f20541615158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100cf57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100cf57565b156104de57565b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f5661756c744d6f636b466f72466565537765657065723a204e6f7420616e206f60448201527f776e6572000000000000000000000000000000000000000000000000000000006064820152fdfea2646970667358221220a41a3f95fcc7752ceb33f3d50027f614411ea4da2e3990e0b4f62173b674999964736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x22914A7 EQ PUSH2 0x44C JUMPI POP DUP1 PUSH4 0x173825D9 EQ PUSH2 0x3D4 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x359 JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x2BD JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x33E JUMPI DUP1 PUSH4 0x9BE2A884 EQ PUSH2 0x2D7 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x2BD JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xD3 JUMPI PUSH4 0xC6A92E16 EQ PUSH2 0x81 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xCF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0x20 SWAP1 PUSH2 0xC6 PUSH2 0x9F PUSH2 0x4B4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0xED PUSH2 0x491 JUMP JUMPDEST POP PUSH2 0xF6 PUSH2 0x4B4 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND SWAP4 DUP5 DUP2 SUB PUSH2 0xCF JUMPI CALLER PUSH0 MSTORE PUSH1 0x20 SWAP3 PUSH0 DUP5 MSTORE PUSH2 0x133 PUSH1 0xFF DUP7 PUSH0 KECCAK256 SLOAD AND PUSH2 0x4D7 JUMP JUMPDEST DUP5 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2B3 JUMPI PUSH0 SWAP2 PUSH2 0x251 JUMPI JUMPDEST POP DUP6 MLOAD SWAP4 DUP6 DUP6 ADD SWAP3 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x44 DUP4 MSTORE PUSH1 0x80 DUP4 ADD DUP4 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x224 JUMPI PUSH0 SWAP4 DUP5 SWAP2 DUP8 MSTORE MLOAD SWAP3 GAS CALL ISZERO PUSH2 0x21B JUMPI POP PUSH0 MLOAD RETURNDATASIZE PUSH2 0x212 JUMPI POP DUP1 EXTCODESIZE ISZERO JUMPDEST PUSH2 0x1E7 JUMPI STOP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x1E1 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x2AC JUMPI JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x224 JUMPI DUP7 SWAP2 DUP4 SWAP2 DUP10 MSTORE DUP2 ADD SUB SLT PUSH2 0xCF JUMPI MLOAD PUSH0 PUSH2 0x174 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x25C JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0x20 SWAP1 MLOAD ADDRESS DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0x2F1 PUSH2 0x4B4 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND SUB PUSH2 0xCF JUMPI PUSH2 0xC6 PUSH1 0x20 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0x357 PUSH2 0x491 JUMP JUMPDEST STOP JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x388 PUSH2 0x491 JUMP JUMPDEST CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x39E PUSH1 0xFF DUP5 PUSH0 KECCAK256 SLOAD AND PUSH2 0x4D7 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x403 PUSH2 0x491 JUMP JUMPDEST CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x419 PUSH1 0xFF DUP5 PUSH0 KECCAK256 SLOAD AND PUSH2 0x4D7 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0xFF PUSH1 0x20 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x481 PUSH2 0x491 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 DUP5 MSTORE PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xCF JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xCF JUMPI JUMP JUMPDEST ISZERO PUSH2 0x4DE JUMPI JUMP JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x5661756C744D6F636B466F72466565537765657065723A204E6F7420616E206F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x776E657200000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG4 BYTE EXTCODEHASH SWAP6 0xFC 0xC7 PUSH22 0x2CEB33F3D50027F614411EA4DA2E3990E0B4F62173B6 PUSH21 0x999964736F6C634300081B00330000000000000000 ","sourceMap":"437:1297:95:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:95;;;;;;;;;;:::i;:::-;;;981:6;437:1297;981:6;437:1297;;;;981:6;437:1297;;;880:123;;437:1297;;;;;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:95;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;676:10;437:1297;;;;;;;661:67;437:1297;;;;;;661:67;:::i;:::-;437:1297;;;1694:30;;1718:4;437:1297;1694:30;;437:1297;1694:30;;437:1297;1694:30;;;;;;;;;437:1297;1694:30;;;437:1297;;;;1328:43:60;;;;;437:1297:95;1328:43:60;;437:1297:95;;1328:43:60;;437:1297:95;;;;;;1328:43:60;;437:1297:95;;;;;;;;;;;;;;;;;;8507:421:60;;;;;;;-1:-1:-1;437:1297:95;8507:421:60;;8942:15;;8960:26;;;:31;8942:68;8938:146;;437:1297:95;8938:146:60;9033:40;437:1297:95;9033:40:60;437:1297:95;;;;9033:40:60;8942:68;9009:1;8994:16;;8942:68;;8507:421;;;437:1297:95;8507:421:60;;;;;437:1297:95;;;;;;;;;;1694:30;;;;;;;;;;437:1297;;;;;;;;;;;;;;;;;;;;;;1694:30;;437:1297;;;;;1694:30;;;;;;;;;437:1297;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:95;;;;;;;;861:4;437:1297;;;;;;;;;-1:-1:-1;;437:1297:95;;;;;;;:::i;:::-;;;;;;;;;;;;;;;981:6;437:1297;981:6;437:1297;;;;981:6;437:1297;;;880:123;;437:1297;;;;;-1:-1:-1;;437:1297:95;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;437:1297:95;;;;;;;;:::i;:::-;676:10;437:1297;;;;;661:67;437:1297;;;;;;661:67;:::i;:::-;437:1297;;;;;;;;1209:4;437:1297;;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:95;;;;;;;;:::i;:::-;676:10;437:1297;;;;;661:67;437:1297;;;;;;661:67;:::i;:::-;437:1297;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:95;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"methodIdentifiers":{"addOwner(address)":"7065cb48","canPerform(bytes32,address)":"c6a92e16","canPerform(bytes32,address,address)":"9be2a884","collectAggregateFees(address)":"8f4ab9ca","getAuthorizer()":"aaabadc5","getProtocolFeeController()":"85f2dbd4","owners(address)":"022914a7","removeOwner(address)":"173825d9","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"name\":\"addOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"owners\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"name\":\"removeOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/VaultMockForFeeSweeper.sol\":\"VaultMockForFeeSweeper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/test/VaultMockForFeeSweeper.sol\":{\"keccak256\":\"0x48c7112d31adaf06bbbe4d1959227d5919ff86f21d3bffc0196d5cd2f7fdcf26\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a1791c0f942abe86b2fd13977412f3fd021cac29922b54482e59d840479fc42f\",\"dweb:/ipfs/QmYLEbg3SgTUDBQ3ZktT2exGbpk7MSBsNpCpAdvqfoTcU4\"]}},\"version\":1}"}},"contracts/utils/HyperSpotPricePrecompile.sol":{"HyperSpotPricePrecompile":{"abi":[{"inputs":[],"name":"SpotPriceIsZero","type":"error"},{"inputs":[],"name":"SpotPricePrecompileFailed","type":"error"},{"inputs":[],"name":"SPOT_PRICE_PRECOMPILE_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234601757608f9081601c823930815050f35b5f80fdfe60808060405260043610156011575f80fd5b5f3560e01c63ef89de08146023575f80fd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126055578061080860209252f35b5f80fdfea26469706673582212209b6b57462f6c148ef9ea0b914f34a5202f3e3aa5cb2388765eb037833826a05064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x8F SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0xEF89DE08 EQ PUSH1 0x23 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x55 JUMPI DUP1 PUSH2 0x808 PUSH1 0x20 SWAP3 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP12 PUSH12 0x57462F6C148EF9EA0B914F34 0xA5 KECCAK256 0x2F RETURNDATACOPY GASPRICE 0xA5 0xCB 0x23 DUP9 PUSH23 0x5EB037833826A05064736F6C634300081B003300000000 ","sourceMap":"368:775:96:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"60808060405260043610156011575f80fd5b5f3560e01c63ef89de08146023575f80fd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126055578061080860209252f35b5f80fdfea26469706673582212209b6b57462f6c148ef9ea0b914f34a5202f3e3aa5cb2388765eb037833826a05064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0xEF89DE08 EQ PUSH1 0x23 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x55 JUMPI DUP1 PUSH2 0x808 PUSH1 0x20 SWAP3 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP12 PUSH12 0x57462F6C148EF9EA0B914F34 0xA5 KECCAK256 0x2F RETURNDATACOPY GASPRICE 0xA5 0xCB 0x23 DUP9 PUSH23 0x5EB037833826A05064736F6C634300081B003300000000 ","sourceMap":"368:775:96:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;463:42;368:775;;;;;;;"},"methodIdentifiers":{"SPOT_PRICE_PRECOMPILE_ADDRESS()":"ef89de08"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SpotPriceIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SpotPricePrecompileFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SPOT_PRICE_PRECOMPILE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The precompile is a special type of code, executed in the Hypercore's node. For more information, see https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore .\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"SpotPriceIsZero()\":[{\"notice\":\"The spot price is zero.\"}],\"SpotPricePrecompileFailed()\":[{\"notice\":\"The precompile had an error while fetching the spot price.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Library to interact with the Hyperliquid spot price precompile.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/utils/HyperSpotPricePrecompile.sol\":\"HyperSpotPricePrecompile\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"contracts/utils/HyperSpotPricePrecompile.sol\":{\"keccak256\":\"0x956b7c8f826704431ea1d94bec623d2c5b8b34442365f0b249f3a2c25c2c6c54\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3a70d1a6c57fc7cf290d9b4684c5740166cc04bc2a32aa17421edbc7f844d0ae\",\"dweb:/ipfs/QmXAypsKxGf5YAxWUcMeSHkXFfcDZv8WuZWS44HNf8wMZB\"]}},\"version\":1}"}},"contracts/utils/HyperTokenInfoPrecompile.sol":{"HyperTokenInfoPrecompile":{"abi":[{"inputs":[],"name":"TokenInfoPrecompileFailed","type":"error"},{"inputs":[],"name":"TOKEN_INFO_PRECOMPILE_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234601757608f9081601c823930815050f35b5f80fdfe60808060405260043610156011575f80fd5b5f3560e01c6319dd39d3146023575f80fd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126055578061080c60209252f35b5f80fdfea26469706673582212201956249f019fbe9aa077144a48cc73cf07b32bc804070ac67406dce6e8ad202a64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x8F SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x19DD39D3 EQ PUSH1 0x23 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x55 JUMPI DUP1 PUSH2 0x80C PUSH1 0x20 SWAP3 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NOT JUMP 0x24 SWAP16 ADD SWAP16 0xBE SWAP11 LOG0 PUSH24 0x144A48CC73CF07B32BC804070AC67406DCE6E8AD202A6473 PUSH16 0x6C634300081B00330000000000000000 ","sourceMap":"368:984:97:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"60808060405260043610156011575f80fd5b5f3560e01c6319dd39d3146023575f80fd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126055578061080c60209252f35b5f80fdfea26469706673582212201956249f019fbe9aa077144a48cc73cf07b32bc804070ac67406dce6e8ad202a64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x19DD39D3 EQ PUSH1 0x23 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x55 JUMPI DUP1 PUSH2 0x80C PUSH1 0x20 SWAP3 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NOT JUMP 0x24 SWAP16 ADD SWAP16 0xBE SWAP11 LOG0 PUSH24 0x144A48CC73CF07B32BC804070AC67406DCE6E8AD202A6473 PUSH16 0x6C634300081B00330000000000000000 ","sourceMap":"368:984:97:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;797:42;368:984;;;;;;;"},"methodIdentifiers":{"TOKEN_INFO_PRECOMPILE_ADDRESS()":"19dd39d3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"TokenInfoPrecompileFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TOKEN_INFO_PRECOMPILE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The precompile is a special type of code, executed in the Hypercore's node. For more information, see https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore .\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"TokenInfoPrecompileFailed()\":[{\"notice\":\"The precompile had an error while fetching the token info.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Library to interact with the Hyperliquid token info precompile.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/utils/HyperTokenInfoPrecompile.sol\":\"HyperTokenInfoPrecompile\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"contracts/utils/HyperTokenInfoPrecompile.sol\":{\"keccak256\":\"0xea3b203aa3635705f168c210f2d82b6fda6c63a01acb79f78111302b54fb2c8f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f96d680a8cb86611a2a2a55e675230d9fc397e5e5b875877e62055fb814d929\",\"dweb:/ipfs/Qme2iitvGmf1yBndr1n2yUE8sB1G54HQQqsCWg5HL5NNvZ\"]}},\"version\":1}"}}}}} \ No newline at end of file From 5f06c76b0b478d2ad79ed32a7d8700911dd6f3f5 Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Wed, 17 Sep 2025 23:38:24 -0400 Subject: [PATCH 2/9] add readme --- v3/tasks/20250919-v3-protocol-fee-helper-v2/readme.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 v3/tasks/20250919-v3-protocol-fee-helper-v2/readme.md diff --git a/v3/tasks/20250919-v3-protocol-fee-helper-v2/readme.md b/v3/tasks/20250919-v3-protocol-fee-helper-v2/readme.md new file mode 100644 index 000000000..cdf1c54d4 --- /dev/null +++ b/v3/tasks/20250919-v3-protocol-fee-helper-v2/readme.md @@ -0,0 +1,8 @@ +# 2025-09-19 - V3 Protocol Fee Helper V2 + +This second deployment of the Protocol Fee Helper contract enables granular control over the power to set protocol swap and yield fees on pools. It maintains multiple sets of registered pools whose protocol fees can be set by authorized accounts. In contrast to the first version, governance only needs to grant this contract permission to set protocol fees on pools. The protocol fee helper is deployed with an admin account (e.g., the Maxi's multisig), which has the sole power to manage allowlists for partners and assign them initial managers. Thereafter, managers can set the protocol fees for pools in their respective allowlists, and transfer that authority to successor managers: all without involving Balancer governance. + +## Useful Files + +- [Code](https://github.com/balancer/balancer-v3-monorepo/commit/2a73ff06cfe55482bdebc37ee74ca3b93d9ea062) +- [`ProtocolFeeHelper` artifact](./artifact/ProtocolFeeHelper.json) From bb2a46c7e5f8eceab883268beb9416e6a601ad3f Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Wed, 17 Sep 2025 23:38:37 -0400 Subject: [PATCH 3/9] add fork test --- .../index.ts | 9 ++ .../input.ts | 40 ++++++ .../test/task.fork.ts | 115 ++++++++++++++++++ 3 files changed, 164 insertions(+) create mode 100644 v3/tasks/20250919-v3-protocol-fee-helper-v2/index.ts create mode 100644 v3/tasks/20250919-v3-protocol-fee-helper-v2/input.ts create mode 100644 v3/tasks/20250919-v3-protocol-fee-helper-v2/test/task.fork.ts diff --git a/v3/tasks/20250919-v3-protocol-fee-helper-v2/index.ts b/v3/tasks/20250919-v3-protocol-fee-helper-v2/index.ts new file mode 100644 index 000000000..486263a4b --- /dev/null +++ b/v3/tasks/20250919-v3-protocol-fee-helper-v2/index.ts @@ -0,0 +1,9 @@ +import { ProtocolFeeHelperDeployment } from './input'; +import { Task, TaskRunOptions } from '@src'; + +/* eslint-disable @typescript-eslint/no-non-null-assertion */ +export default async (task: Task, { force, from }: TaskRunOptions = {}): Promise => { + const input = task.input() as ProtocolFeeHelperDeployment; + + await task.deployAndVerify('ProtocolFeeHelper', [input.Vault, input.HelperAdmin], from, force); +}; diff --git a/v3/tasks/20250919-v3-protocol-fee-helper-v2/input.ts b/v3/tasks/20250919-v3-protocol-fee-helper-v2/input.ts new file mode 100644 index 000000000..053c3a3b2 --- /dev/null +++ b/v3/tasks/20250919-v3-protocol-fee-helper-v2/input.ts @@ -0,0 +1,40 @@ +import { Task, TaskMode } from '@src'; + +export type ProtocolFeeHelperDeployment = { + Vault: string; + HelperAdmin: string; +}; + +const Vault = new Task('20241204-v3-vault', TaskMode.READ_ONLY); + +// See https://github.com/BalancerMaxis/bal_addresses/blob/main/outputs/addressbook.json#L268 +const MaxiOmniMultisig = '0x9ff471F9f98F42E5151C7855fD1b5aa906b1AF7e'; +const SepoliaAdmin = '0x9098b50ee2d9E4c3C69928A691DA3b192b4C9673'; + +export default { + Vault, + arbitrum: { + HelperAdmin: MaxiOmniMultisig, + }, + base: { + HelperAdmin: MaxiOmniMultisig, + }, + avalanche: { + HelperAdmin: MaxiOmniMultisig, + }, + optimism: { + HelperAdmin: MaxiOmniMultisig, + }, + gnosis: { + HelperAdmin: MaxiOmniMultisig, + }, + mainnet: { + HelperAdmin: MaxiOmniMultisig, + }, + hyperevm: { + HelperAdmin: MaxiOmniMultisig, + }, + sepolia: { + HelperAdmin: SepoliaAdmin, + }, +}; diff --git a/v3/tasks/20250919-v3-protocol-fee-helper-v2/test/task.fork.ts b/v3/tasks/20250919-v3-protocol-fee-helper-v2/test/task.fork.ts new file mode 100644 index 000000000..18ac851fa --- /dev/null +++ b/v3/tasks/20250919-v3-protocol-fee-helper-v2/test/task.fork.ts @@ -0,0 +1,115 @@ +import hre from 'hardhat'; +import { expect } from 'chai'; +import { Contract } from 'ethers'; +import { BigNumber, bn, fp } from '@helpers/numbers'; +import { describeForkTest, getForkedNetwork, Task, TaskMode, impersonate, getSigner } from '@src'; +import { actionId } from '@helpers/models/misc/actions'; +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { ProtocolFeeHelperDeployment } from '../input'; + +describeForkTest('V3-ProtocolFeeHelper-V2', 'mainnet', 23376250, function () { + const TASK_NAME = '20250919-v3-protocol-fee-helper-v2'; + const CONTRACT_NAME = 'ProtocolFeeHelper'; + + const GOV_MULTISIG = '0x10A19e7eE7d7F8a52822f6817de8ea18204F2e4f'; + + const SWAP_FEE_PERCENTAGE = fp(0.0243); + const YIELD_FEE_PERCENTAGE = fp(0.0115); + + let task: Task; + let feeHelper: Contract; + let authorizer: Contract; + let pool: Contract; + let feeController: Contract; + + let poolSetId: BigNumber; + let oldSwapFee: BigNumber; + let oldYieldFee: BigNumber; + + let admin: SignerWithAddress; + let manager: SignerWithAddress; + let newManager: SignerWithAddress; + let govMultisig: SignerWithAddress; + + before('run task', async () => { + task = new Task(TASK_NAME, TaskMode.TEST, getForkedNetwork(hre)); + await task.run({ force: true }); + feeHelper = await task.deployedInstance(CONTRACT_NAME); + }); + + before('load tasks and setup accounts', async () => { + const feeControllerTask = new Task( + '20250214-v3-protocol-fee-controller-v2', + TaskMode.READ_ONLY, + getForkedNetwork(hre) + ); + feeController = await feeControllerTask.deployedInstance('ProtocolFeeController'); + + const authorizerTask = new Task('20210418-authorizer', TaskMode.READ_ONLY, getForkedNetwork(hre)); + authorizer = await authorizerTask.deployedInstance('Authorizer'); + + const poolTask = new Task('20241205-v3-weighted-pool', TaskMode.READ_ONLY, getForkedNetwork(hre)); + pool = await poolTask.instanceAt('WeightedPool', poolTask.output().MockWeightedPool); + + const input = task.input() as ProtocolFeeHelperDeployment; + admin = await impersonate(input.HelperAdmin, fp(100)); + + manager = await getSigner(1); + newManager = await getSigner(2); + }); + + before('grant permission', async () => { + govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + + // Grant the helper permission to set protocol swap and yield fees. This is all that is needed for v2. + await authorizer + .connect(govMultisig) + .grantRole(await actionId(feeController, 'setProtocolSwapFeePercentage'), feeHelper.address); + + await authorizer + .connect(govMultisig) + .grantRole(await actionId(feeController, 'setProtocolYieldFeePercentage'), feeHelper.address); + }); + + it('can create a pool set', async () => { + await feeHelper.connect(admin)['createPoolSet(address,address[])'](manager.address, [pool.address]); + + poolSetId = await feeHelper.getPoolSetIdForManager(manager.address); + + expect(await feeHelper.getManagerForPoolSet(poolSetId)).to.eq(manager.address); + expect(await feeHelper.getPoolCountForSet(poolSetId)).to.eq(1); + }); + + it('can set fees on pools', async () => { + [oldSwapFee] = await feeController.getPoolProtocolSwapFeeInfo(pool.address); + [oldYieldFee] = await feeController.getPoolProtocolYieldFeeInfo(pool.address); + + await feeHelper.connect(manager).setProtocolSwapFeePercentage(pool.address, SWAP_FEE_PERCENTAGE); + await feeHelper.connect(manager).setProtocolYieldFeePercentage(pool.address, YIELD_FEE_PERCENTAGE); + + // Fees should now be set. + const [protocolSwapFeePercentage] = await feeController.getPoolProtocolSwapFeeInfo(pool.address); + const [protocolYieldFeePercentage] = await feeController.getPoolProtocolYieldFeeInfo(pool.address); + + expect(bn(protocolSwapFeePercentage)).to.eq(SWAP_FEE_PERCENTAGE); + expect(bn(protocolYieldFeePercentage)).to.eq(YIELD_FEE_PERCENTAGE); + }); + + it('can transfer fee permission', async () => { + await feeHelper.connect(manager).transferPoolSetOwnership(newManager.address); + + expect(await feeHelper.getManagerForPoolSet(poolSetId)).to.eq(newManager.address); + }); + + it('new manager can set fees on pools', async () => { + await feeHelper.connect(newManager).setProtocolSwapFeePercentage(pool.address, oldSwapFee); + await feeHelper.connect(newManager).setProtocolYieldFeePercentage(pool.address, oldYieldFee); + + // Fees should now be set. + const [protocolSwapFeePercentage] = await feeController.getPoolProtocolSwapFeeInfo(pool.address); + const [protocolYieldFeePercentage] = await feeController.getPoolProtocolYieldFeeInfo(pool.address); + + expect(bn(protocolSwapFeePercentage)).to.eq(oldSwapFee); + expect(bn(protocolYieldFeePercentage)).to.eq(oldYieldFee); + }); +}); From dc294f9c0e89170b032b0cfabb7ae2ec72f4d24e Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Wed, 17 Sep 2025 23:40:52 -0400 Subject: [PATCH 4/9] deprecate previous task --- .../artifact/ProtocolFeeHelper.json | 0 .../build-info/ProtocolFeeHelper.json | 0 .../20250430-v3-protocol-fee-helper/index.ts | 0 .../20250430-v3-protocol-fee-helper/input.ts | 0 .../20250430-v3-protocol-fee-helper/output/plasma.json | 0 .../20250430-v3-protocol-fee-helper/readme.md | 4 ++++ .../20250430-v3-protocol-fee-helper/test/task.fork.ts | 2 +- 7 files changed, 5 insertions(+), 1 deletion(-) rename v3/{tasks => deprecated}/20250430-v3-protocol-fee-helper/artifact/ProtocolFeeHelper.json (100%) rename v3/{tasks => deprecated}/20250430-v3-protocol-fee-helper/build-info/ProtocolFeeHelper.json (100%) rename v3/{tasks => deprecated}/20250430-v3-protocol-fee-helper/index.ts (100%) rename v3/{tasks => deprecated}/20250430-v3-protocol-fee-helper/input.ts (100%) rename v3/{tasks => deprecated}/20250430-v3-protocol-fee-helper/output/plasma.json (100%) rename v3/{tasks => deprecated}/20250430-v3-protocol-fee-helper/readme.md (66%) rename v3/{tasks => deprecated}/20250430-v3-protocol-fee-helper/test/task.fork.ts (97%) diff --git a/v3/tasks/20250430-v3-protocol-fee-helper/artifact/ProtocolFeeHelper.json b/v3/deprecated/20250430-v3-protocol-fee-helper/artifact/ProtocolFeeHelper.json similarity index 100% rename from v3/tasks/20250430-v3-protocol-fee-helper/artifact/ProtocolFeeHelper.json rename to v3/deprecated/20250430-v3-protocol-fee-helper/artifact/ProtocolFeeHelper.json diff --git a/v3/tasks/20250430-v3-protocol-fee-helper/build-info/ProtocolFeeHelper.json b/v3/deprecated/20250430-v3-protocol-fee-helper/build-info/ProtocolFeeHelper.json similarity index 100% rename from v3/tasks/20250430-v3-protocol-fee-helper/build-info/ProtocolFeeHelper.json rename to v3/deprecated/20250430-v3-protocol-fee-helper/build-info/ProtocolFeeHelper.json diff --git a/v3/tasks/20250430-v3-protocol-fee-helper/index.ts b/v3/deprecated/20250430-v3-protocol-fee-helper/index.ts similarity index 100% rename from v3/tasks/20250430-v3-protocol-fee-helper/index.ts rename to v3/deprecated/20250430-v3-protocol-fee-helper/index.ts diff --git a/v3/tasks/20250430-v3-protocol-fee-helper/input.ts b/v3/deprecated/20250430-v3-protocol-fee-helper/input.ts similarity index 100% rename from v3/tasks/20250430-v3-protocol-fee-helper/input.ts rename to v3/deprecated/20250430-v3-protocol-fee-helper/input.ts diff --git a/v3/tasks/20250430-v3-protocol-fee-helper/output/plasma.json b/v3/deprecated/20250430-v3-protocol-fee-helper/output/plasma.json similarity index 100% rename from v3/tasks/20250430-v3-protocol-fee-helper/output/plasma.json rename to v3/deprecated/20250430-v3-protocol-fee-helper/output/plasma.json diff --git a/v3/tasks/20250430-v3-protocol-fee-helper/readme.md b/v3/deprecated/20250430-v3-protocol-fee-helper/readme.md similarity index 66% rename from v3/tasks/20250430-v3-protocol-fee-helper/readme.md rename to v3/deprecated/20250430-v3-protocol-fee-helper/readme.md index 0402f48c0..ab852d64f 100644 --- a/v3/tasks/20250430-v3-protocol-fee-helper/readme.md +++ b/v3/deprecated/20250430-v3-protocol-fee-helper/readme.md @@ -1,5 +1,9 @@ # 2025-04-30 - V3 Protocol Fee Helper +> ⚠️ **DEPRECATED: do not use** ⚠️ +> +> This version was superseded by [`ProtocolFeeHelper` V2](../../tasks/20250919-v3-protocol-fee-helper-v2/), which generalizes the implementation to allow multiple, transferrable allowlists. This allows multiple partners to use the same contract, and eases the burden on governance. + The Protocol Fee Helper contract enables granular control over the power to set protocol swap and yield fees on pools. It maintains a set of registered pools whose fees can be set by authorized accounts. Governance must first grant this contract permission to set protocol fees, then add a set of pools, and finally grant permission to call the fee setters on the helper contract. ## Useful Files diff --git a/v3/tasks/20250430-v3-protocol-fee-helper/test/task.fork.ts b/v3/deprecated/20250430-v3-protocol-fee-helper/test/task.fork.ts similarity index 97% rename from v3/tasks/20250430-v3-protocol-fee-helper/test/task.fork.ts rename to v3/deprecated/20250430-v3-protocol-fee-helper/test/task.fork.ts index 69ee14a1b..49acd47f6 100644 --- a/v3/tasks/20250430-v3-protocol-fee-helper/test/task.fork.ts +++ b/v3/deprecated/20250430-v3-protocol-fee-helper/test/task.fork.ts @@ -6,7 +6,7 @@ import { describeForkTest, getForkedNetwork, Task, TaskMode, impersonate, getSig import { actionId } from '@helpers/models/misc/actions'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -describeForkTest('V3-ProtocolFeeHelper', 'mainnet', 22348940, function () { +describeForkTest.skip('V3-ProtocolFeeHelper', 'mainnet', 22348940, function () { const TASK_NAME = '20250430-v3-protocol-fee-helper'; const CONTRACT_NAME = 'ProtocolFeeHelper'; From f6a139aea6664d6ddc6312eb598e60cf4a769632 Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Wed, 17 Sep 2025 23:42:15 -0400 Subject: [PATCH 5/9] update addresses --- addresses/plasma.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addresses/plasma.json b/addresses/plasma.json index 67bcc526b..b31f4be21 100644 --- a/addresses/plasma.json +++ b/addresses/plasma.json @@ -272,7 +272,7 @@ "address": "0x83E443EF4f9963C77bd860f94500075556668cb8" } ], - "status": "ACTIVE", + "status": "DEPRECATED", "version": "v3" }, "20250502-v3-fee-percentages-provider": { From efe84f295e114238c46abd5f513c4bb04d7a0a5b Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Wed, 17 Sep 2025 23:45:47 -0400 Subject: [PATCH 6/9] update readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 85831a112..3a2e5ed1b 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,6 @@ Returns an object with all contracts from a deployment and their addresses. | V3 Wrapped BPT Factory | [`20250418-v3-wrapped-bpt`](./v3/tasks/20250418-v3-wrapped-bpt) | | V3 Pool Pause Helper | [`20250430-v3-pool-pause-helper`](./v3/tasks/20250430-v3-pool-pause-helper) | | V3 Pool Swap Fee Helper | [`20250430-v3-pool-swap-fee-helper`](./v3/tasks/20250430-v3-pool-swap-fee-helper) | -| V3 Protocol Fee Helper | [`20250430-v3-protocol-fee-helper`](./v3/tasks/20250430-v3-protocol-fee-helper) | | V3 Protocol Fee Percentages Provider | [`20250502-v3-fee-percentages-provider`](./v3/tasks/20250502-v3-fee-percentages-provider) | | V3 Protocol Fee Sweeper (V2) | [`20250503-v3-protocol-fee-sweeper-v2`](./v3/tasks/20250503-v3-protocol-fee-sweeper-v2) | | V3 Aggregator Batch Router | [`20250507-v3-aggregator-batch-router`](./v3/tasks/20250507-v3-aggregator-batch-router) | @@ -156,6 +155,7 @@ Returns an object with all contracts from a deployment and their addresses. | V3 Weighted LP Oracle | [`20250814-v3-weighted-pool-oracle`](./v3/tasks/20250814-v3-weighted-pool-oracle) | | V3 Stable LP Oracle | [`20250815-v3-stable-pool-oracle`](./v3/tasks/20250815-v3-stable-pool-oracle) | | V3 HyperEVM Rate Provider | [`20250828-v3-hyperevm-rate-provider`](./v3/tasks/20250828-v3-hyperevm-rate-provider) | +| V3 Protocol Fee Helper (V2) | [`20250919-v3-protocol-fee-helper-v2`](./v3/tasks/20250919-v3-protocol-fee-helper-v2) | ## Scripts @@ -253,3 +253,4 @@ Go to each deprecated deployment's readme file to learn more about why it is dep | V3 Liquidity Bootstrapping Pool | [`20250307-v3-liquidity-bootstrapping-pool`](./v3/deprecated/20250307-v3-liquidity-bootstrapping-pool) | | Balancer Contract Registry Initializer | [`20250314-balancer-registry-initializer`](./v3/deprecated/20250314-balancer-registry-initializer) | | V3 ReClamm Pool | [`20250409-v3-reclamm-pool`](./v3/deprecated/20250409-v3-reclamm-pool) | +| V3 Protocol Fee Helper | [`20250430-v3-protocol-fee-helper`](./v3/deprecated/20250430-v3-protocol-fee-helper) | From 254b17c18d5614532468f10c197e0ed4aa2f293c Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Wed, 1 Oct 2025 10:35:38 -0400 Subject: [PATCH 7/9] refactor: update commit to latest (pick up authorization changes) --- .../artifact/ProtocolFeeHelper.json | 4 ++-- .../build-info/ProtocolFeeHelper.json | 2 +- v3/tasks/20250919-v3-protocol-fee-helper-v2/readme.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/v3/tasks/20250919-v3-protocol-fee-helper-v2/artifact/ProtocolFeeHelper.json b/v3/tasks/20250919-v3-protocol-fee-helper-v2/artifact/ProtocolFeeHelper.json index 7c076b3d0..6915a4103 100644 --- a/v3/tasks/20250919-v3-protocol-fee-helper-v2/artifact/ProtocolFeeHelper.json +++ b/v3/tasks/20250919-v3-protocol-fee-helper-v2/artifact/ProtocolFeeHelper.json @@ -703,8 +703,8 @@ "type": "function" } ], - "bytecode": "0x60c03461011e57601f611b4d38819003918201601f19168301916001600160401b0383118484101761012257808492604094855283398101031261011e5780516001600160a01b03918282169081830361011e576020015183811680910361011e57801561010b5760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100fc5760a0526001600255611a1690816101378239608051816112ee015260a05181818161025401528181610386015281816106c501528181610d0d015281816116e601526118bf0152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60406080815260049081361015610014575f80fd5b5f915f358060e01c908163182551da1461105c578163255dae411461101c57816325c427ed14610fd95781632da55a1d14610f115781633700f98714610e5d5781633e035f9b14610c8557816362d5346214610c54578163715018a614610bcf57816379ba509714610b6b5781637c1ec46014610a1f578163851c1bb3146109d65781638c60ebd0146108905781638da5cb5b1461085d57816394fc4058146107dd578163a89b11281461073a57508063aaabadc514610672578063abaa335614610599578063c482e8221461057a578063ce998aba14610556578063e30c397814610521578063e909c19b146104e3578063ebf3a8d01461034c578063f167a1e61461030b578063f2fde38b1461027c578063fbfa77cf146102275763fd267f391461013f575f80fd5b8291346102235780600319360112610223576101596110c4565b61016a816101656114eb565b611630565b73ffffffffffffffffffffffffffffffffffffffff6101876116a3565b1692833b1561021f576101f09385928385518097819582947ffd267f390000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af190811561021657506102035750f35b61020c906110e7565b6102135780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b5050346102785781600319360112610278576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b8334610213576020600319360112610213576102966110c4565b61029e61141c565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5034610348576020600319360112610348578160209373ffffffffffffffffffffffffffffffffffffffff92358152600385522054169051908152f35b8280fd5b50346103485761035b366111fe565b61036361141c565b61036c826113b7565b80519273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692875b8681106103b5578880f35b826103c08284611282565b511688517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156104d9578d916104ac575b501561048257600590898d525261041f828b8d20611988565b15610454575090866001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b698c80a3016103aa565b878b91604493887f5a17aa8d0000000000000000000000000000000000000000000000000000000085525252fd5b508a82877f9e51bd5c00000000000000000000000000000000000000000000000000000000835252fd5b6104cc9150823d84116104d2575b6104c48183611128565b81019061139f565b5f610406565b503d6104ba565b8c513d8f823e3d90fd5b5050346102785760206003193601126102785760209061051a6105046110c4565b61050c61141c565b61051581611468565b611529565b9051908152f35b50503461027857816003193601126102785760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50346103485782600319360112610348576020928291338252845220549051908152f35b5050346102785781600319360112610278576020906002549051908152f35b50903461066e578060031936011261066e576105b36110c4565b6105bf816101656114eb565b73ffffffffffffffffffffffffffffffffffffffff6105dc6116a3565b1692833b1561066e57610645935f928385518097819582947fabaa33560000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19081156106655750610659575080f35b61066391506110e7565b005b513d5f823e3d90fd5b5f80fd5b503461066e575f60031936011261066e5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561073057926020935f93610701575b505191168152f35b610722919350843d8611610729575b61071a8183611128565b810190611373565b91846106f9565b503d610710565b83513d5f823e3d90fd5b90503461066e57602060031936011261066e5761078a6107837fffffffff0000000000000000000000000000000000000000000000000000000061077c6110c4565b93166112c3565b3390611868565b156107b65773ffffffffffffffffffffffffffffffffffffffff5f541633146107b657610663906115be565b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b50503461066e57602090602060031936011261066e57356107fd816113b7565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b828210610846576108428686610838828b0383611128565b5191829182611231565b0390f35b835487529586019560019384019390910190610820565b833461066e575f60031936011261066e5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50503461066e57606060031936011261066e57803590602435604435916108b6846113b7565b835f526005906020906005602052865f20548585119081156109cc575b81156109c1575b5061099657506108ea8385611339565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061092d61091888611169565b976109258a51998a611128565b808952611169565b01366020880137835b85811061094a578751806108428982611231565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff610974828b5f2061175f565b90549060031b1c1661098f6109898884611339565b8a611282565b5201610936565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b9050841015886108da565b80871191506108d3565b50503461066e57602060031936011261066e5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361066e5761051a6020926112c3565b50503461066e576020918260031936011261066e57813591610a3f61141c565b610a48836113b7565b825f5260058452815f208054805b610b0b575050825f5260058452815f208054905f815581610aee575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610a72575f8155600101610af8565b5f190180610b6573ffffffffffffffffffffffffffffffffffffffff610b31838661175f565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a384611774565b50610a56565b823461066e575f60031936011261066e573373ffffffffffffffffffffffffffffffffffffffff6001541603610ba457610663336115be565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b3461066e575f60031936011261066e57610be761141c565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b82843461066e57602060031936011261066e5760209135610c74816113b7565b5f5260058252805f20549051908152f35b82843461066e578060031936011261066e57610c9f6110c4565b60249260243567ffffffffffffffff811161066e57610cc4610ccd9136908401611181565b9261050c61141c565b938251610cdf575b6020858551908152f35b610cea92919261141c565b610cf3856113b7565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610d415750505050610cd5565b82610d4c8284611282565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610e53575f91610e36575b5015610e0c579060058b92835f5252610dab818b5f20611988565b15610ddf5790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610d31565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610e4d9150823d84116104d2576104c48183611128565b8c610d90565b8b513d5f823e3d90fd5b82843461066e57602060031936011261066e57610e786110c4565b91610e8283611468565b610e8a6114eb565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b82843461066e57610f21366111fe565b91610f2a61141c565b610f33826113b7565b8251925f5b848110610f4157005b73ffffffffffffffffffffffffffffffffffffffff610f608284611282565b5116845f526005602052610f7681855f20611774565b15610faa5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610f38565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b82843461066e57602060031936011261066e5760209173ffffffffffffffffffffffffffffffffffffffff61100c6110c4565b165f528252805f20549051908152f35b82843461066e57602060031936011261066e57602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b833461066e578060031936011261066e576020906110bb61107b6110c4565b602435611087816113b7565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361066e57565b67ffffffffffffffff81116110fb57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110fb57604052565b67ffffffffffffffff81116110fb5760051b60200190565b9080601f8301121561066e57602090823561119b81611169565b936111a96040519586611128565b81855260208086019260051b82010192831161066e57602001905b8282106111d2575050505090565b813573ffffffffffffffffffffffffffffffffffffffff8116810361066e5781529083019083016111c4565b90604060031983011261066e57600435916024359067ffffffffffffffff821161066e5761122e91600401611181565b90565b60209060206040818301928281528551809452019301915f5b828110611258575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161124a565b80518210156112965760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176110fb5760405251902090565b9190820391821161134657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9081602091031261066e575173ffffffffffffffffffffffffffffffffffffffff8116810361066e5790565b9081602091031261066e5751801515810361066e5790565b801580156113f2575b6113c75750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f205416156113c0565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361143c57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff1680156114c357805f52600460205260405f20546114985750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561150157565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611346576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b90815f52600560205261166c73ffffffffffffffffffffffffffffffffffffffff60405f20921680926001915f520160205260405f2054151590565b15611675575050565b7f80145d72000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa918215611754575f9261171b57505090565b9091506020813d60201161174c575b8161173760209383611128565b8101031261066e5751908116810361066e5790565b3d915061172a565b6040513d5f823e3d90fd5b8054821015611296575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f14611860575f19918281018181116113465782549084820191821161134657818103611815575b505050805480156117e8578201916117ca838361175f565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61184b611825611835938661175f565b90549060031b1c9283928661175f565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806117b2565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f5416911690811461198057604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156117545785935f9561195c575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa918215611754575f9261194657505090565b61122e9250803d106104d2576104c48183611128565b60649291955061197890853d87116107295761071a8183611128565b9490916118f1565b505050600190565b5f8281526001820160205260409020546119da57805490680100000000000000008210156110fb57826119c561183584600180960185558461175f565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220a86eee931a88d4f839c9313a069eb3f4357676a3b7e1548b9f23cf223f177aaf64736f6c634300081b0033", - "deployedBytecode": "0x60406080815260049081361015610014575f80fd5b5f915f358060e01c908163182551da1461105c578163255dae411461101c57816325c427ed14610fd95781632da55a1d14610f115781633700f98714610e5d5781633e035f9b14610c8557816362d5346214610c54578163715018a614610bcf57816379ba509714610b6b5781637c1ec46014610a1f578163851c1bb3146109d65781638c60ebd0146108905781638da5cb5b1461085d57816394fc4058146107dd578163a89b11281461073a57508063aaabadc514610672578063abaa335614610599578063c482e8221461057a578063ce998aba14610556578063e30c397814610521578063e909c19b146104e3578063ebf3a8d01461034c578063f167a1e61461030b578063f2fde38b1461027c578063fbfa77cf146102275763fd267f391461013f575f80fd5b8291346102235780600319360112610223576101596110c4565b61016a816101656114eb565b611630565b73ffffffffffffffffffffffffffffffffffffffff6101876116a3565b1692833b1561021f576101f09385928385518097819582947ffd267f390000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af190811561021657506102035750f35b61020c906110e7565b6102135780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b5050346102785781600319360112610278576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b8334610213576020600319360112610213576102966110c4565b61029e61141c565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5034610348576020600319360112610348578160209373ffffffffffffffffffffffffffffffffffffffff92358152600385522054169051908152f35b8280fd5b50346103485761035b366111fe565b61036361141c565b61036c826113b7565b80519273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692875b8681106103b5578880f35b826103c08284611282565b511688517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156104d9578d916104ac575b501561048257600590898d525261041f828b8d20611988565b15610454575090866001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b698c80a3016103aa565b878b91604493887f5a17aa8d0000000000000000000000000000000000000000000000000000000085525252fd5b508a82877f9e51bd5c00000000000000000000000000000000000000000000000000000000835252fd5b6104cc9150823d84116104d2575b6104c48183611128565b81019061139f565b5f610406565b503d6104ba565b8c513d8f823e3d90fd5b5050346102785760206003193601126102785760209061051a6105046110c4565b61050c61141c565b61051581611468565b611529565b9051908152f35b50503461027857816003193601126102785760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50346103485782600319360112610348576020928291338252845220549051908152f35b5050346102785781600319360112610278576020906002549051908152f35b50903461066e578060031936011261066e576105b36110c4565b6105bf816101656114eb565b73ffffffffffffffffffffffffffffffffffffffff6105dc6116a3565b1692833b1561066e57610645935f928385518097819582947fabaa33560000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19081156106655750610659575080f35b61066391506110e7565b005b513d5f823e3d90fd5b5f80fd5b503461066e575f60031936011261066e5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561073057926020935f93610701575b505191168152f35b610722919350843d8611610729575b61071a8183611128565b810190611373565b91846106f9565b503d610710565b83513d5f823e3d90fd5b90503461066e57602060031936011261066e5761078a6107837fffffffff0000000000000000000000000000000000000000000000000000000061077c6110c4565b93166112c3565b3390611868565b156107b65773ffffffffffffffffffffffffffffffffffffffff5f541633146107b657610663906115be565b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b50503461066e57602090602060031936011261066e57356107fd816113b7565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b828210610846576108428686610838828b0383611128565b5191829182611231565b0390f35b835487529586019560019384019390910190610820565b833461066e575f60031936011261066e5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50503461066e57606060031936011261066e57803590602435604435916108b6846113b7565b835f526005906020906005602052865f20548585119081156109cc575b81156109c1575b5061099657506108ea8385611339565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061092d61091888611169565b976109258a51998a611128565b808952611169565b01366020880137835b85811061094a578751806108428982611231565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff610974828b5f2061175f565b90549060031b1c1661098f6109898884611339565b8a611282565b5201610936565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b9050841015886108da565b80871191506108d3565b50503461066e57602060031936011261066e5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361066e5761051a6020926112c3565b50503461066e576020918260031936011261066e57813591610a3f61141c565b610a48836113b7565b825f5260058452815f208054805b610b0b575050825f5260058452815f208054905f815581610aee575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610a72575f8155600101610af8565b5f190180610b6573ffffffffffffffffffffffffffffffffffffffff610b31838661175f565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a384611774565b50610a56565b823461066e575f60031936011261066e573373ffffffffffffffffffffffffffffffffffffffff6001541603610ba457610663336115be565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b3461066e575f60031936011261066e57610be761141c565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b82843461066e57602060031936011261066e5760209135610c74816113b7565b5f5260058252805f20549051908152f35b82843461066e578060031936011261066e57610c9f6110c4565b60249260243567ffffffffffffffff811161066e57610cc4610ccd9136908401611181565b9261050c61141c565b938251610cdf575b6020858551908152f35b610cea92919261141c565b610cf3856113b7565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610d415750505050610cd5565b82610d4c8284611282565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610e53575f91610e36575b5015610e0c579060058b92835f5252610dab818b5f20611988565b15610ddf5790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610d31565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610e4d9150823d84116104d2576104c48183611128565b8c610d90565b8b513d5f823e3d90fd5b82843461066e57602060031936011261066e57610e786110c4565b91610e8283611468565b610e8a6114eb565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b82843461066e57610f21366111fe565b91610f2a61141c565b610f33826113b7565b8251925f5b848110610f4157005b73ffffffffffffffffffffffffffffffffffffffff610f608284611282565b5116845f526005602052610f7681855f20611774565b15610faa5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610f38565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b82843461066e57602060031936011261066e5760209173ffffffffffffffffffffffffffffffffffffffff61100c6110c4565b165f528252805f20549051908152f35b82843461066e57602060031936011261066e57602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b833461066e578060031936011261066e576020906110bb61107b6110c4565b602435611087816113b7565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361066e57565b67ffffffffffffffff81116110fb57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110fb57604052565b67ffffffffffffffff81116110fb5760051b60200190565b9080601f8301121561066e57602090823561119b81611169565b936111a96040519586611128565b81855260208086019260051b82010192831161066e57602001905b8282106111d2575050505090565b813573ffffffffffffffffffffffffffffffffffffffff8116810361066e5781529083019083016111c4565b90604060031983011261066e57600435916024359067ffffffffffffffff821161066e5761122e91600401611181565b90565b60209060206040818301928281528551809452019301915f5b828110611258575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161124a565b80518210156112965760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176110fb5760405251902090565b9190820391821161134657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9081602091031261066e575173ffffffffffffffffffffffffffffffffffffffff8116810361066e5790565b9081602091031261066e5751801515810361066e5790565b801580156113f2575b6113c75750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f205416156113c0565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361143c57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff1680156114c357805f52600460205260405f20546114985750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561150157565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611346576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b90815f52600560205261166c73ffffffffffffffffffffffffffffffffffffffff60405f20921680926001915f520160205260405f2054151590565b15611675575050565b7f80145d72000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa918215611754575f9261171b57505090565b9091506020813d60201161174c575b8161173760209383611128565b8101031261066e5751908116810361066e5790565b3d915061172a565b6040513d5f823e3d90fd5b8054821015611296575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f14611860575f19918281018181116113465782549084820191821161134657818103611815575b505050805480156117e8578201916117ca838361175f565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61184b611825611835938661175f565b90549060031b1c9283928661175f565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806117b2565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f5416911690811461198057604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156117545785935f9561195c575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa918215611754575f9261194657505090565b61122e9250803d106104d2576104c48183611128565b60649291955061197890853d87116107295761071a8183611128565b9490916118f1565b505050600190565b5f8281526001820160205260409020546119da57805490680100000000000000008210156110fb57826119c561183584600180960185558461175f565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220a86eee931a88d4f839c9313a069eb3f4357676a3b7e1548b9f23cf223f177aaf64736f6c634300081b0033", + "bytecode": "0x60c03461011e57601f611b7838819003918201601f19168301916001600160401b0383118484101761012257808492604094855283398101031261011e5780516001600160a01b03918282169081830361011e576020015183811680910361011e57801561010b5760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100fc5760a0526001600255611a4190816101378239608051816112b4015260a05181818161025101528181610383015281816106c201528181610cd30152818161171101526117e10152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60406080815260049081361015610014575f80fd5b5f915f3560e01c8063182551da14611022578063255dae4114610fe257806325c427ed14610f9f5780632da55a1d14610ed75780633700f98714610e235780633e035f9b14610c4b57806362d5346214610c1a578063715018a614610b9557806379ba509714610b315780637c1ec460146109e6578063851c1bb31461099e5780638c60ebd0146108595780638da5cb5b1461082657806394fc4058146107a7578063a89b112814610737578063aaabadc51461066f578063abaa335614610596578063c482e82214610577578063ce998aba14610553578063e30c39781461051e578063e909c19b146104e0578063ebf3a8d014610349578063f167a1e614610308578063f2fde38b14610279578063fbfa77cf146102245763fd267f391461013c575f80fd5b82913461022057806003193601126102205761015661108a565b610167816101626114ca565b61165b565b73ffffffffffffffffffffffffffffffffffffffff6101846116ce565b1692833b1561021c576101ed9385928385518097819582947ffd267f390000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af190811561021357506102005750f35b610209906110ad565b6102105780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b5050346102755781600319360112610275576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b83346102105760206003193601126102105761029361108a565b61029b61159d565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5034610345576020600319360112610345578160209373ffffffffffffffffffffffffffffffffffffffff92358152600385522054169051908152f35b8280fd5b503461034557610358366111c4565b6103606113e2565b6103698261137d565b80519273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692875b8681106103b2578880f35b826103bd8284611248565b511688517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156104d6578d916104a9575b501561047f57600590898d525261041c828b8d206119b3565b15610451575090866001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b698c80a3016103a7565b878b91604493887f5a17aa8d0000000000000000000000000000000000000000000000000000000085525252fd5b508a82877f9e51bd5c00000000000000000000000000000000000000000000000000000000835252fd5b6104c99150823d84116104cf575b6104c181836110ee565b810190611365565b5f610403565b503d6104b7565b8c513d8f823e3d90fd5b5050346102755760206003193601126102755760209061051761050161108a565b6105096113e2565b61051281611447565b611508565b9051908152f35b50503461027557816003193601126102755760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50346103455782600319360112610345576020928291338252845220549051908152f35b5050346102755781600319360112610275576020906002549051908152f35b50903461066b578060031936011261066b576105b061108a565b6105bc816101626114ca565b73ffffffffffffffffffffffffffffffffffffffff6105d96116ce565b1692833b1561066b57610642935f928385518097819582947fabaa33560000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19081156106625750610656575080f35b61066091506110ad565b005b513d5f823e3d90fd5b5f80fd5b503461066b575f60031936011261066b5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561072d57926020935f936106fe575b505191168152f35b61071f919350843d8611610726575b61071781836110ee565b810190611339565b91846106f6565b503d61070d565b83513d5f823e3d90fd5b503461066b57602060031936011261066b5761075161108a565b6107596113e2565b73ffffffffffffffffffffffffffffffffffffffff5f5416331461078057610660906115e9565b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b503461066b57602090602060031936011261066b57356107c68161137d565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b82821061080f5761080b8686610801828b03836110ee565b51918291826111f7565b0390f35b8354875295860195600193840193909101906107e9565b823461066b575f60031936011261066b5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b503461066b57606060031936011261066b578035906024356044359161087e8461137d565b835f526005906020906005602052865f2054858511908115610994575b8115610989575b5061095e57506108b283856112ff565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06108f56108e08861112f565b976108ed8a51998a6110ee565b80895261112f565b01366020880137835b8581106109125787518061080b89826111f7565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff61093c828b5f206118aa565b90549060031b1c1661095761095188846112ff565b8a611248565b52016108fe565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b9050841015886108a2565b808711915061089b565b503461066b57602060031936011261066b5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361066b57610517602092611289565b503461066b576020918260031936011261066b57813591610a056113e2565b610a0e8361137d565b825f5260058452815f208054805b610ad1575050825f5260058452815f208054905f815581610ab4575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610a38575f8155600101610abe565b5f190180610b2b73ffffffffffffffffffffffffffffffffffffffff610af783866118aa565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a3846118bf565b50610a1c565b503461066b575f60031936011261066b573373ffffffffffffffffffffffffffffffffffffffff6001541603610b6a57610660336115e9565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b3461066b575f60031936011261066b57610bad61159d565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b50903461066b57602060031936011261066b5760209135610c3a8161137d565b5f5260058252805f20549051908152f35b50903461066b578060031936011261066b57610c6561108a565b60249260243567ffffffffffffffff811161066b57610c8a610c939136908401611147565b926105096113e2565b938251610ca5575b6020858551908152f35b610cb09291926113e2565b610cb98561137d565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610d075750505050610c9b565b82610d128284611248565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610e19575f91610dfc575b5015610dd2579060058b92835f5252610d71818b5f206119b3565b15610da55790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610cf7565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610e139150823d84116104cf576104c181836110ee565b8c610d56565b8b513d5f823e3d90fd5b50903461066b57602060031936011261066b57610e3e61108a565b91610e4883611447565b610e506114ca565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b50903461066b57610ee7366111c4565b91610ef06113e2565b610ef98261137d565b8251925f5b848110610f0757005b73ffffffffffffffffffffffffffffffffffffffff610f268284611248565b5116845f526005602052610f3c81855f206118bf565b15610f705790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610efe565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b50903461066b57602060031936011261066b5760209173ffffffffffffffffffffffffffffffffffffffff610fd261108a565b165f528252805f20549051908152f35b50903461066b57602060031936011261066b57602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b823461066b578060031936011261066b5760209061108161104161108a565b60243561104d8161137d565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361066b57565b67ffffffffffffffff81116110c157604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110c157604052565b67ffffffffffffffff81116110c15760051b60200190565b9080601f8301121561066b5760209082356111618161112f565b9361116f60405195866110ee565b81855260208086019260051b82010192831161066b57602001905b828210611198575050505090565b813573ffffffffffffffffffffffffffffffffffffffff8116810361066b57815290830190830161118a565b90604060031983011261066b57600435916024359067ffffffffffffffff821161066b576111f491600401611147565b90565b60209060206040818301928281528551809452019301915f5b82811061121e575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611210565b805182101561125c5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176110c15760405251902090565b9190820391821161130c57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9081602091031261066b575173ffffffffffffffffffffffffffffffffffffffff8116810361066b5790565b9081602091031261066b5751801515810361066b5790565b801580156113b8575b61138d5750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20541615611386565b6114186114117fffffffff000000000000000000000000000000000000000000000000000000005f3516611289565b339061178a565b1561141f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff1680156114a257805f52600460205260405f20546114775750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f20549081156114e057565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f19831461130c576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b73ffffffffffffffffffffffffffffffffffffffff5f541633036115bd57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b90815f52600560205261169773ffffffffffffffffffffffffffffffffffffffff60405f20921680926001915f520160205260405f2054151590565b156116a0575050565b7f80145d72000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561177f575f9261174657505090565b9091506020813d602011611777575b81611762602093836110ee565b8101031261066b5751908116810361066b5790565b3d9150611755565b6040513d5f823e3d90fd5b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146118a257604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa93841561177f5785935f9561187e575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa91821561177f575f9261186857505090565b6111f49250803d106104cf576104c181836110ee565b60649291955061189a90853d87116107265761071781836110ee565b949091611813565b505050600190565b805482101561125c575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f146119ab575f199182810181811161130c5782549084820191821161130c57818103611960575b505050805480156119335782019161191583836118aa565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61199661197061198093866118aa565b90549060031b1c928392866118aa565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806118fd565b505050505f90565b5f828152600182016020526040902054611a0557805490680100000000000000008210156110c157826119f06119808460018096018555846118aa565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220d2c890aac41aca693e49da80ef5c520d66b7bf4585861b6abc600e559697a06164736f6c634300081b0033", + "deployedBytecode": "0x60406080815260049081361015610014575f80fd5b5f915f3560e01c8063182551da14611022578063255dae4114610fe257806325c427ed14610f9f5780632da55a1d14610ed75780633700f98714610e235780633e035f9b14610c4b57806362d5346214610c1a578063715018a614610b9557806379ba509714610b315780637c1ec460146109e6578063851c1bb31461099e5780638c60ebd0146108595780638da5cb5b1461082657806394fc4058146107a7578063a89b112814610737578063aaabadc51461066f578063abaa335614610596578063c482e82214610577578063ce998aba14610553578063e30c39781461051e578063e909c19b146104e0578063ebf3a8d014610349578063f167a1e614610308578063f2fde38b14610279578063fbfa77cf146102245763fd267f391461013c575f80fd5b82913461022057806003193601126102205761015661108a565b610167816101626114ca565b61165b565b73ffffffffffffffffffffffffffffffffffffffff6101846116ce565b1692833b1561021c576101ed9385928385518097819582947ffd267f390000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af190811561021357506102005750f35b610209906110ad565b6102105780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b5050346102755781600319360112610275576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b83346102105760206003193601126102105761029361108a565b61029b61159d565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5034610345576020600319360112610345578160209373ffffffffffffffffffffffffffffffffffffffff92358152600385522054169051908152f35b8280fd5b503461034557610358366111c4565b6103606113e2565b6103698261137d565b80519273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692875b8681106103b2578880f35b826103bd8284611248565b511688517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156104d6578d916104a9575b501561047f57600590898d525261041c828b8d206119b3565b15610451575090866001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b698c80a3016103a7565b878b91604493887f5a17aa8d0000000000000000000000000000000000000000000000000000000085525252fd5b508a82877f9e51bd5c00000000000000000000000000000000000000000000000000000000835252fd5b6104c99150823d84116104cf575b6104c181836110ee565b810190611365565b5f610403565b503d6104b7565b8c513d8f823e3d90fd5b5050346102755760206003193601126102755760209061051761050161108a565b6105096113e2565b61051281611447565b611508565b9051908152f35b50503461027557816003193601126102755760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50346103455782600319360112610345576020928291338252845220549051908152f35b5050346102755781600319360112610275576020906002549051908152f35b50903461066b578060031936011261066b576105b061108a565b6105bc816101626114ca565b73ffffffffffffffffffffffffffffffffffffffff6105d96116ce565b1692833b1561066b57610642935f928385518097819582947fabaa33560000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19081156106625750610656575080f35b61066091506110ad565b005b513d5f823e3d90fd5b5f80fd5b503461066b575f60031936011261066b5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561072d57926020935f936106fe575b505191168152f35b61071f919350843d8611610726575b61071781836110ee565b810190611339565b91846106f6565b503d61070d565b83513d5f823e3d90fd5b503461066b57602060031936011261066b5761075161108a565b6107596113e2565b73ffffffffffffffffffffffffffffffffffffffff5f5416331461078057610660906115e9565b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b503461066b57602090602060031936011261066b57356107c68161137d565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b82821061080f5761080b8686610801828b03836110ee565b51918291826111f7565b0390f35b8354875295860195600193840193909101906107e9565b823461066b575f60031936011261066b5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b503461066b57606060031936011261066b578035906024356044359161087e8461137d565b835f526005906020906005602052865f2054858511908115610994575b8115610989575b5061095e57506108b283856112ff565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06108f56108e08861112f565b976108ed8a51998a6110ee565b80895261112f565b01366020880137835b8581106109125787518061080b89826111f7565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff61093c828b5f206118aa565b90549060031b1c1661095761095188846112ff565b8a611248565b52016108fe565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b9050841015886108a2565b808711915061089b565b503461066b57602060031936011261066b5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361066b57610517602092611289565b503461066b576020918260031936011261066b57813591610a056113e2565b610a0e8361137d565b825f5260058452815f208054805b610ad1575050825f5260058452815f208054905f815581610ab4575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610a38575f8155600101610abe565b5f190180610b2b73ffffffffffffffffffffffffffffffffffffffff610af783866118aa565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a3846118bf565b50610a1c565b503461066b575f60031936011261066b573373ffffffffffffffffffffffffffffffffffffffff6001541603610b6a57610660336115e9565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b3461066b575f60031936011261066b57610bad61159d565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b50903461066b57602060031936011261066b5760209135610c3a8161137d565b5f5260058252805f20549051908152f35b50903461066b578060031936011261066b57610c6561108a565b60249260243567ffffffffffffffff811161066b57610c8a610c939136908401611147565b926105096113e2565b938251610ca5575b6020858551908152f35b610cb09291926113e2565b610cb98561137d565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610d075750505050610c9b565b82610d128284611248565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610e19575f91610dfc575b5015610dd2579060058b92835f5252610d71818b5f206119b3565b15610da55790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610cf7565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610e139150823d84116104cf576104c181836110ee565b8c610d56565b8b513d5f823e3d90fd5b50903461066b57602060031936011261066b57610e3e61108a565b91610e4883611447565b610e506114ca565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b50903461066b57610ee7366111c4565b91610ef06113e2565b610ef98261137d565b8251925f5b848110610f0757005b73ffffffffffffffffffffffffffffffffffffffff610f268284611248565b5116845f526005602052610f3c81855f206118bf565b15610f705790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610efe565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b50903461066b57602060031936011261066b5760209173ffffffffffffffffffffffffffffffffffffffff610fd261108a565b165f528252805f20549051908152f35b50903461066b57602060031936011261066b57602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b823461066b578060031936011261066b5760209061108161104161108a565b60243561104d8161137d565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361066b57565b67ffffffffffffffff81116110c157604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110c157604052565b67ffffffffffffffff81116110c15760051b60200190565b9080601f8301121561066b5760209082356111618161112f565b9361116f60405195866110ee565b81855260208086019260051b82010192831161066b57602001905b828210611198575050505090565b813573ffffffffffffffffffffffffffffffffffffffff8116810361066b57815290830190830161118a565b90604060031983011261066b57600435916024359067ffffffffffffffff821161066b576111f491600401611147565b90565b60209060206040818301928281528551809452019301915f5b82811061121e575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611210565b805182101561125c5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176110c15760405251902090565b9190820391821161130c57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9081602091031261066b575173ffffffffffffffffffffffffffffffffffffffff8116810361066b5790565b9081602091031261066b5751801515810361066b5790565b801580156113b8575b61138d5750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20541615611386565b6114186114117fffffffff000000000000000000000000000000000000000000000000000000005f3516611289565b339061178a565b1561141f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff1680156114a257805f52600460205260405f20546114775750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f20549081156114e057565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f19831461130c576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b73ffffffffffffffffffffffffffffffffffffffff5f541633036115bd57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b90815f52600560205261169773ffffffffffffffffffffffffffffffffffffffff60405f20921680926001915f520160205260405f2054151590565b156116a0575050565b7f80145d72000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561177f575f9261174657505090565b9091506020813d602011611777575b81611762602093836110ee565b8101031261066b5751908116810361066b5790565b3d9150611755565b6040513d5f823e3d90fd5b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146118a257604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa93841561177f5785935f9561187e575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa91821561177f575f9261186857505090565b6111f49250803d106104cf576104c181836110ee565b60649291955061189a90853d87116107265761071781836110ee565b949091611813565b505050600190565b805482101561125c575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f146119ab575f199182810181811161130c5782549084820191821161130c57818103611960575b505050805480156119335782019161191583836118aa565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61199661197061198093866118aa565b90549060031b1c928392866118aa565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806118fd565b505050505f90565b5f828152600182016020526040902054611a0557805490680100000000000000008210156110c157826119f06119808460018096018555846118aa565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220d2c890aac41aca693e49da80ef5c520d66b7bf4585861b6abc600e559697a06164736f6c634300081b0033", "linkReferences": {}, "deployedLinkReferences": {} } \ No newline at end of file diff --git a/v3/tasks/20250919-v3-protocol-fee-helper-v2/build-info/ProtocolFeeHelper.json b/v3/tasks/20250919-v3-protocol-fee-helper-v2/build-info/ProtocolFeeHelper.json index 63e4d99a4..f1d578dab 100644 --- a/v3/tasks/20250919-v3-protocol-fee-helper-v2/build-info/ProtocolFeeHelper.json +++ b/v3/tasks/20250919-v3-protocol-fee-helper-v2/build-info/ProtocolFeeHelper.json @@ -1 +1 @@ -{"id":"83f286d72731568905afb713bf67dda4","_format":"hh-sol-build-info-1","solcVersion":"0.8.27","solcLongVersion":"0.8.27+commit.40a35a09","input":{"language":"Solidity","sources":{"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface for permissioned calling of external functions.\ninterface IAuthentication {\n /// @notice The sender does not have permission to call a function.\n error SenderNotAllowed();\n\n /**\n * @notice Returns the action identifier associated with the external function described by `selector`.\n * @param selector The 4-byte selector of the permissioned function\n * @return actionId The computed actionId\n */\n function getActionId(bytes4 selector) external view returns (bytes32 actionId);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice General interface for token exchange rates.\ninterface IRateProvider {\n /**\n * @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n * @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n * rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n * does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n * rates in downstream computations.\n *\n * @return rate The current token rate\n */\n function getRate() external view returns (uint256 rate);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface to retrieve the version of a deployed contract.\ninterface IVersion {\n /**\n * @notice Return arbitrary text representing the version of a contract.\n * @dev For standard Balancer contracts, returns a JSON representation of the contract version containing name,\n * version number and task ID. See real examples in the deployment repo; local tests just use plain text strings.\n *\n * @return version The version string corresponding to the current deployed contract\n */\n function version() external view returns (string memory);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Registered contracts must be one of these types.\nenum ContractType {\n OTHER, // a blank entry will have a 0-value type, and it's safest to return this in that case\n POOL_FACTORY,\n ROUTER,\n HOOK,\n ERC4626\n}\n\ninterface IBalancerContractRegistry {\n /**\n * @notice Store the state of a registered Balancer contract.\n * @dev Contracts can be deprecated, so we store an active flag indicating the status. With two flags, we can\n * differentiate between deprecated and non-existent. The same contract address can have multiple names, but\n * only one type. If a contract is legitimately multiple types (e.g., a hook that also acts as a router), set\n * the type to its \"primary\" function: hook, in this case. The \"Other\" type is intended as a catch-all for\n * things that don't find into the standard types (e.g., helper contracts).\n *\n * @param contractType The type of contract (e.g., Router or Hook)\n * @param isRegistered This flag indicates whether there is an entry for the associated address\n * @param isActive If there is an entry, this flag indicates whether it is active or deprecated\n */\n struct ContractInfo {\n ContractType contractType;\n bool isRegistered;\n bool isActive;\n }\n\n /**\n * @notice Emitted when a new contract is registered.\n * @param contractType The type of contract being registered\n * @param contractName The name of the contract being registered\n * @param contractAddress The address of the contract being registered\n */\n event BalancerContractRegistered(\n ContractType indexed contractType,\n string indexed contractName,\n address indexed contractAddress\n );\n\n /**\n * @notice Emitted when a new contract is deregistered (deleted).\n * @param contractType The type of contract being deregistered\n * @param contractName The name of the contract being deregistered\n * @param contractAddress The address of the contract being deregistered\n */\n event BalancerContractDeregistered(\n ContractType indexed contractType,\n string indexed contractName,\n address indexed contractAddress\n );\n\n /**\n * @notice Emitted when a registered contract is deprecated.\n * @dev This sets the `isActive` flag to false.\n * @param contractAddress The address of the contract being deprecated\n */\n event BalancerContractDeprecated(address indexed contractAddress);\n\n /**\n * @notice Emitted when an alias is added or updated.\n * @param contractAlias The alias name\n * @param contractAddress The address of the contract being deprecated\n */\n event ContractAliasUpdated(string indexed contractAlias, address indexed contractAddress);\n\n /**\n * @notice A contract has already been registered under the given address.\n * @dev Both names and addresses must be unique in the primary registration mapping. Though there are two mappings\n * to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent\n * name => address => state mapping.\n *\n * @param contractType The contract type, provided for documentation purposes\n * @param contractAddress The address of the previously registered contract\n */\n error ContractAddressAlreadyRegistered(ContractType contractType, address contractAddress);\n\n /**\n * @notice A contract has already been registered under the given name.\n * @dev Note that names must be unique; it is not possible to register two contracts with the same name and\n * different types, or the same name and different addresses.\n *\n * @param contractType The registered contract type, provided for documentation purposes\n * @param contractName The name of the previously registered contract\n */\n error ContractNameAlreadyRegistered(ContractType contractType, string contractName);\n\n /**\n * @notice The proposed contract name has already been added as an alias.\n * @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n * @param contractName The name of the previously registered contract\n * @param contractAddress The address of the previously registered contract\n */\n error ContractNameInUseAsAlias(string contractName, address contractAddress);\n\n /**\n * @notice The proposed alias has already been registered as a contract.\n * @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n * @param contractType The registered contract type, provided for documentation purposes\n * @param contractName The name of the previously registered contract (and proposed alias)\n */\n error ContractAliasInUseAsName(ContractType contractType, string contractName);\n\n /**\n * @notice Thrown when attempting to deregister a contract that was not previously registered.\n * @param contractName The name of the unregistered contract\n */\n error ContractNameNotRegistered(string contractName);\n\n /**\n * @notice An operation that requires a valid contract specified an unrecognized address.\n * @dev A contract being deprecated was never registered, or the target of an alias isn't a previously\n * registered contract.\n *\n * @param contractAddress The address of the contract that was not registered\n */\n error ContractAddressNotRegistered(address contractAddress);\n\n /**\n * @notice Contracts can only be deprecated once.\n * @param contractAddress The address of the previously deprecated contract\n */\n error ContractAlreadyDeprecated(address contractAddress);\n\n /// @notice Cannot register or deprecate contracts, or add an alias targeting the zero address.\n error ZeroContractAddress();\n\n /// @notice Cannot register (or deregister) a contract with an empty string as a name.\n error InvalidContractName();\n\n /// @notice Cannot add an empty string as an alias.\n error InvalidContractAlias();\n\n /**\n * @notice Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n * @dev This is a permissioned function, and does only basic validation of the address (non-zero) and the name\n * (not blank). Governance must ensure this is called with valid information. Emits the\n * `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or\n * already in use.\n *\n * @param contractType The type of contract being registered\n * @param contractName A text description of the contract, usually the deployed version (e.g., \"v3-pool-weighted\")\n * @param contractAddress The address of the contract\n */\n function registerBalancerContract(\n ContractType contractType,\n string memory contractName,\n address contractAddress\n ) external;\n\n /**\n * @notice Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n * @dev This is a permissioned function, and makes it possible to correct errors without complex update logic.\n * If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete\n * it, and register it again with the correct data. It must start with the name, as this is the registry key,\n * required for complete deletion.\n *\n * Note that there might still be an alias targeting the address being deleted, but accessing it will just return\n * inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to\n * the correct address.\n *\n * @param contractName The name of the contract being deprecated (cannot be an alias)\n */\n function deregisterBalancerContract(string memory contractName) external;\n\n /**\n * @notice Deprecate an official Balancer contract.\n * @dev This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the\n * address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are\n * enforced unique, so either the name or address could be specified in principle.\n *\n * @param contractAddress The address of the contract being deprecated\n */\n function deprecateBalancerContract(address contractAddress) external;\n\n /**\n * @notice Add an alias for a registered contract.\n * @dev This is a permissioned function to support querying by a contract alias. For instance, we might create a\n * `WeightedPool` alias meaning the \"latest\" version of the `WeightedPoolFactory`, so that off-chain users don't\n * need to track specific versions. Once added, an alias can also be updated to point to a different address\n * (e.g., when migrating from the v2 to the v3 weighted pool).\n *\n * @param contractAlias An alternate name that can be used to fetch a contract address\n * @param existingContract The target address of the contract alias\n */\n function addOrUpdateBalancerContractAlias(string memory contractAlias, address existingContract) external;\n\n /**\n * @notice Determine whether an address is an official contract of the specified type.\n * @param contractType The type of contract\n * @param contractAddress The address of the contract\n * @return isActive True if the given address is a registered and active contract of the specified type\n */\n function isActiveBalancerContract(\n ContractType contractType,\n address contractAddress\n ) external view returns (bool isActive);\n\n /**\n * @notice Look up a registered contract by type and name.\n * @dev This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias\n * (e.g., `WeightedPool`).\n *\n * @param contractType The type of the contract\n * @param contractName The name of the contract\n * @return contractAddress The address of the associated contract, if registered, or zero\n * @return isActive True if the contract was registered and not deprecated\n */\n function getBalancerContract(\n ContractType contractType,\n string memory contractName\n ) external view returns (address contractAddress, bool isActive);\n\n /**\n * @notice Look up complete information about a registered contract by address.\n * @param contractAddress The address of the associated contract\n * @return info ContractInfo struct corresponding to the address\n */\n function getBalancerContractInfo(address contractAddress) external view returns (ContractInfo memory info);\n\n /// @notice Returns `true` if the given address is an active contract under the ROUTER type.\n function isTrustedRouter(address router) external view returns (bool);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IProtocolFeeBurner } from \"./IProtocolFeeBurner.sol\";\n\ninterface IBalancerFeeBurner is IProtocolFeeBurner {\n /**\n * @notice Steps for the burn path.\n * @param pool The pool for the swap\n * @param tokenOut The `tokenOut` of the swap operation\n */\n struct SwapPathStep {\n address pool;\n IERC20 tokenOut;\n }\n\n /**\n * @notice Data for the burn hook.\n * @param pool The pool the fees came from (only used for documentation in the event)\n * @param sender The sender of the call. In most cases, this is the sweeper.\n * @param feeToken The token collected from the pool\n * @param feeTokenAmount The number of fee tokens collected\n * @param targetToken The desired target token (`tokenOut` of the swap)\n * @param minAmountOut The minimum `amountOut` for the swap\n * @param recipient The recipient of the swap proceeds\n * @param deadline Deadline for the burn operation (i.e., swap), after which it will revert\n */\n struct BurnHookParams {\n address pool;\n address sender;\n IERC20 feeToken;\n uint256 feeTokenAmount;\n IERC20 targetToken;\n uint256 minAmountOut;\n address recipient;\n uint256 deadline;\n }\n\n /// @notice Burn path not set for the fee token.\n error BurnPathDoesNotExist();\n\n /// @notice The last token in the path is not the same as the target token.\n error TargetTokenOutMismatch();\n\n /**\n * @notice Set the burn path for a fee token.\n * @dev This is the sequence of swaps required to convert the `feeToken` to the `targetToken`.\n * This is a permissioned function.\n *\n * @param feeToken The fee token to set the path for\n * @param steps The steps in the burn path\n */\n function setBurnPath(IERC20 feeToken, SwapPathStep[] calldata steps) external;\n\n /**\n * @notice Get the burn path for a fee token.\n * @param feeToken The fee token to get the path for\n * @return steps The steps in the burn path\n */\n function getBurnPath(IERC20 feeToken) external view returns (SwapPathStep[] memory steps);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { ICowConditionalOrder } from \"./ICowConditionalOrder.sol\";\n\n/// @notice Utility contract used to validate orders in the `CowSwapFeeBurner`.\ninterface IComposableCow {\n /**\n * @notice Data passed to ComposableCoW via the payload parameter of isValidSafeSignature.\n * @dev See github.com/curvefi/curve-burners/blob/main/contracts/burners/CowSwapBurner.vy#L66:L69.\n * @param proof Merkle Tree proof\n * @param params Conditional order params\n * @param offchainInput Off-chain input (similar to Balancer `userData`); currently unused\n */\n struct Payload {\n bytes32[] proof;\n ICowConditionalOrder.ConditionalOrderParams params;\n bytes offchainInput;\n }\n\n /**\n * @notice Construct a CoW order.\n * @param params Order parameters\n * @param dispatch If true, submit the order (always true in the CowSwapBurner)\n */\n function create(ICowConditionalOrder.ConditionalOrderParams calldata params, bool dispatch) external;\n\n function domainSeparator() external view returns (bytes32);\n\n /// @notice Delegated ERC-1271 signature validation with an enhanced context.\n function isValidSafeSignature(\n address safe,\n address sender,\n bytes32 _hash,\n bytes32 _domainSeparator,\n bytes32 typeHash,\n bytes calldata encodeData,\n bytes calldata payload\n ) external view returns (bytes4);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol":{"content":"// SPDX-License-Identifier: GPL-3.0\npragma solidity >=0.8.0 <0.9.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n// See https://github.com/curvefi/curve-burners/blob/main/contracts/burners/CowSwapBurner.vy#L44:L56\nstruct GPv2Order {\n IERC20 sellToken;\n IERC20 buyToken;\n address receiver;\n uint256 sellAmount;\n uint256 buyAmount;\n uint32 validTo;\n bytes32 appData;\n uint256 feeAmount;\n bytes32 kind;\n bool partiallyFillable;\n bytes32 sellTokenBalance;\n bytes32 buyTokenBalance;\n}\n\n/**\n * @notice Conditional Order Interface - verify a Cow order.\n * @author CoW Protocol Developers + mfw78 \n */\ninterface ICowConditionalOrder {\n /**\n * @notice This struct is used to uniquely identify a conditional order for an owner.\n * @dev H(handler || salt || staticData) **MUST** be unique for an owner.\n * @param handler The contract implementing the conditional order logic\n * @param salt Allows for multiple conditional orders of the same type and data (currently unused)\n * @param staticData Data available to ALL discrete orders created by the conditional order\n */\n struct ConditionalOrderParams {\n ICowConditionalOrder handler;\n bytes32 salt;\n bytes staticData;\n }\n\n /**\n * @notice This error is returned by the `getTradeableOrder` function if the order conditions are not met.\n * @param reason Text explaining the reason the order is invalid\n */\n error OrderNotValid(string reason);\n\n // Errors specific to polling (interpreted by the off-chain Watchtower).\n\n /**\n * @notice Polling should be retried at the next block.\n * @param reason Text description of the reason it should be retried\n */\n error PollTryNextBlock(string reason);\n\n /**\n * @notice Polling should be retried at a specific block number.\n * @param blockNumber The block number when polling should resume\n * @param reason Text description of the reason it should be retried\n */\n error PollTryAtBlock(uint256 blockNumber, string reason);\n\n /**\n * @notice Polling should be retried at a specific epoch (unix timestamp).\n * @param timestamp The unix timestamp when polling should resume\n * @param reason Text description of the reason it should be retried\n */\n error PollTryAtEpoch(uint256 timestamp, string reason);\n\n /**\n * @notice The conditional order should not be polled again (i.e., deleted).\n * @param reason Text description of the reason it should be deleted\n */\n error PollNever(string reason);\n\n /**\n * @notice Verify that a given discrete order is valid.\n * @dev Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe.\n * **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the\n * `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over\n * the order verification logic, and to allow a watchtower / user to propose a discrete order without it being\n * generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\n *\n * @param owner The owner of the order (usually a contract)\n * @param sender The `msg.sender` calling `isValidSignature`\n * @param _hash `EIP712` order digest\n * @param domainSeparator `EIP712` domain separator\n * @param ctx See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\n * @param staticInput Conditional order type-specific data known at time of creation for all discrete orders\n * @param offchainInput Type-specific data NOT known at time of creation for a specific discrete order (or zero)\n * @param order The proposed discrete order's `GPv2Order` data struct\n */\n function verify(\n address owner,\n address sender,\n bytes32 _hash,\n bytes32 domainSeparator,\n bytes32 ctx,\n bytes calldata staticInput,\n bytes calldata offchainInput,\n GPv2Order calldata order\n ) external view;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol":{"content":"// SPDX-License-Identifier: GPL-3.0\npragma solidity >=0.8.0 <0.9.0;\n\nimport { IERC165 } from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\n\nimport { ICowConditionalOrder, GPv2Order } from \"./ICowConditionalOrder.sol\";\n\n/**\n * @notice Conditional Order Generator Interface\n * @author mfw78 \n */\ninterface ICowConditionalOrderGenerator is IERC165 {\n /**\n * @dev Emitted when a new conditional order is created.\n * @param owner The address that created the conditional order\n * @param params The conditional order data\n */\n event ConditionalOrderCreated(address indexed owner, ICowConditionalOrder.ConditionalOrderParams params);\n\n /**\n * @notice Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\n * @dev **MUST** revert if the order conditions are not met.\n * @param owner The owner of the order (usually a contract)\n * @param sender The `msg.sender` of the parent `isValidSignature` call\n * @param ctx The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\n * @param staticInput Conditional order type-specific data known at time of creation for all discrete orders\n * @param offchainInput Off-chain input (similar to Balancer `userData`); currently unused\n * @return order Tradeable order for submission to the CoW Protocol API\n */\n function getTradeableOrder(\n address owner,\n address sender,\n bytes32 ctx,\n bytes calldata staticInput,\n bytes calldata offchainInput\n ) external view returns (GPv2Order memory);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC1271 } from \"@openzeppelin/contracts/interfaces/IERC1271.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { ICowConditionalOrderGenerator } from \"./ICowConditionalOrderGenerator.sol\";\nimport { ICowConditionalOrder, GPv2Order } from \"./ICowConditionalOrder.sol\";\nimport { IProtocolFeeBurner } from \"./IProtocolFeeBurner.sol\";\n\ninterface ICowSwapFeeBurner is IERC1271, IProtocolFeeBurner, ICowConditionalOrder, ICowConditionalOrderGenerator {\n enum OrderStatus {\n Nonexistent,\n Active,\n Filled,\n Failed\n }\n\n /**\n * @notice An order was retried after failing.\n * @param tokenIn The token used to identify the order\n * @param exactAmountIn The number of tokens in the order\n * @param minAmountOut The minimum number of target tokens required\n * @param deadline The deadline for the new order to be filled\n */\n event OrderRetried(IERC20 tokenIn, uint256 exactAmountIn, uint256 minAmountOut, uint256 deadline);\n\n /**\n * @notice An order was canceled after failure.\n * @param tokenIn The token used to identify the order\n * @param exactAmountIn The number of tokens in the order\n * @param receiver The account that received the tokens from the unfilled order\n */\n event OrderCanceled(IERC20 tokenIn, uint256 exactAmountIn, address receiver);\n\n /**\n * @notice The order parameters were invalid.\n * @param reason Text explaining the reason the order is invalid\n */\n error InvalidOrderParameters(string reason);\n\n /**\n * @notice Attempt to revert an order that had not failed.\n * @dev `revertOrder` should only be called when the OrderStatus is `Failed`.\n * @param actualStatus The status of the order when `revertOrder` was called\n */\n error OrderHasUnexpectedStatus(OrderStatus actualStatus);\n\n /// @notice Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\n error InterfaceIsSignatureVerifierMuxer();\n\n /**\n * @notice Get the order at the sell token.\n * @param tokenIn The token used to identify the order\n * @return orderData The order data for the given token\n */\n function getOrder(IERC20 tokenIn) external view returns (GPv2Order memory orderData);\n\n /**\n * @notice Get the status of the order at the sell token.\n * @param tokenIn The token used to identify the order\n * @return orderStatus The status of the order for the given token\n */\n function getOrderStatus(IERC20 tokenIn) external view returns (OrderStatus orderStatus);\n\n /**\n * @notice Retry an order that has not been filled yet and expired.\n * @param tokenIn The token used to identify the order\n * @param minAmountOut The minimum number of target tokens to receive (tokenOut)\n * @param deadline The deadline for the order to be filled.\n */\n function retryOrder(IERC20 tokenIn, uint256 minAmountOut, uint256 deadline) external;\n\n /**\n * @notice Return tokens from an order that has failed.\n * @dev Canceling an order prevents it from being retried.\n * @param tokenIn The token used to identify the order\n * @param receiver The address to receive the tokens from the unfilled order\n */\n function cancelOrder(IERC20 tokenIn, address receiver) external;\n\n /**\n * @notice Emergency return tokens from an order regardless of status.\n * @dev Canceling an order prevents it from being retried.\n * @param tokenIn The token used to identify the order\n * @param receiver The address to receive the from the unfilled order\n */\n function emergencyCancelOrder(IERC20 tokenIn, address receiver) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\ninterface IHyperEVMRateProvider {\n /**\n * @notice The index of the token on the Hyperliquid public API.\n * @return tokenIndex The index of the token on the Hyperliquid public API\n */\n function getTokenIndex() external view returns (uint32);\n\n /**\n * @notice The index of the pair to fetch the spot price, according to the Hyperliquid public API.\n * @dev Hypercore has an index that identifies a pair of tokens to fetch the spot price.\n * @return pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n */\n function getPairIndex() external view returns (uint32);\n\n /**\n * @notice The spot price multiplier.\n * @dev Hypercore returns the spot price with a different number of decimals for each token. So, to make this rate\n * provider compatible with the vault, we need to scale the spot price to 18 decimals using this multiplier.\n * @return spotPriceMultiplier The spot price multiplier\n */\n function getSpotPriceMultiplier() external view returns (uint256 spotPriceMultiplier);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IHyperEVMRateProvider } from \"./IHyperEVMRateProvider.sol\";\n\ninterface IHyperEVMRateProviderFactory {\n /**\n * @notice A new HyperEVM Rate Provider was created.\n * @param tokenIndex The index of the base asset on the Hyperliquid public API\n * @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n * @param rateProvider The address of the deployed rate provider\n */\n event RateProviderCreated(uint256 indexed tokenIndex, uint256 indexed pairIndex, address indexed rateProvider);\n\n /// @notice Emitted when the factory is disabled.\n event RateProviderFactoryDisabled();\n\n /**\n * @notice A rate provider already exists for the given token and pair.\n * @param tokenIndex The index of the base asset on the Hyperliquid public API\n * @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n * @param rateProvider The address of the deployed rate provider\n */\n error RateProviderAlreadyExists(uint32 tokenIndex, uint32 pairIndex, address rateProvider);\n\n /**\n * @notice The rate provider was not found for the given token and pair.\n * @param tokenIndex The index of the base asset on the Hyperliquid public API\n * @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n */\n error RateProviderNotFound(uint32 tokenIndex, uint32 pairIndex);\n\n /// @notice The factory is disabled.\n error RateProviderFactoryIsDisabled();\n\n /**\n * @notice Returns a number representing the rate provider version.\n * @return rateProviderVersion The rate provider version number\n */\n function getRateProviderVersion() external view returns (uint256 rateProviderVersion);\n\n /**\n * @notice Creates a new HyperEVM Rate Provider for the given token and pair.\n * @param tokenIndex The index of the base asset on the Hyperliquid public API\n * @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n * @return rateProvider The address of the deployed rate provider\n */\n function create(uint32 tokenIndex, uint32 pairIndex) external returns (IHyperEVMRateProvider rateProvider);\n\n /**\n * @notice Gets the rate provider for the given token and pair.\n * @dev Reverts if the rate provider was not found for the given token and pair.\n * @param tokenIndex The index of the base asset on the Hyperliquid public API\n * @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n * @return rateProvider The address of the rate provider for the given token and pair\n */\n function getRateProvider(\n uint32 tokenIndex,\n uint32 pairIndex\n ) external view returns (IHyperEVMRateProvider rateProvider);\n\n /**\n * @notice Checks whether the given rate provider was created by this factory.\n * @param rateProvider The rate provider to check\n * @return success True if the rate provider was created by this factory; false otherwise\n */\n function isRateProviderFromFactory(IHyperEVMRateProvider rateProvider) external view returns (bool success);\n\n /**\n * @notice Disables the rate provider factory.\n * @dev A disabled rate provider factory cannot create new rate providers and cannot be re-enabled. However,\n * already created rate providers are still usable. This is a permissioned function.\n */\n function disable() external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Common interface for helper functions that operate on a subset of pools.\ninterface IPoolHelperCommon {\n /**\n * @notice The owner created a new pool set.\n * @dev Pools are organized into separate sets, controlled by a manager, which can be changed independently.\n * @param poolSetId Id of the set with which the pool is associated\n * @param initialManager Address of the pool set manager\n */\n event PoolSetCreated(uint256 indexed poolSetId, address indexed initialManager);\n\n /**\n * @notice The owner destroyed a pool set.\n * @param poolSetId Id of the set with which the pool is associated\n * @param manager The address of the set's last manager\n */\n event PoolSetDestroyed(uint256 indexed poolSetId, address indexed manager);\n\n /**\n * @notice The owner added a pool to the given set.\n * @param pool Address of the pool that was added\n * @param poolSetId Id of the set with which the pool is associated\n */\n event PoolAddedToSet(address indexed pool, uint256 indexed poolSetId);\n\n /**\n * @notice The owner removed a pool from the given set.\n * @param poolSetId Id of the set with which the pool is associated\n * @param pool Address of the pool that was removed\n */\n event PoolRemovedFromSet(address indexed pool, uint256 indexed poolSetId);\n\n /**\n * @notice The current manager of a pool set transferred ownership to a new address.\n * @dev Managers can only control one pool set. Transfers to existing managers of other sets will revert.\n * @param poolSetId Id of the set with which the pool is associated\n * @param oldManager Address of the previous manager\n * @param newManager Address of the new manager\n */\n event PoolSetOwnershipTransferred(\n uint256 indexed poolSetId,\n address indexed oldManager,\n address indexed newManager\n );\n\n /**\n * @notice Cannot add a pool that is already there.\n * @param pool Address of the pool being added\n * @param poolSetId Id of the set with which the pool is associated\n */\n error PoolAlreadyInSet(address pool, uint256 poolSetId);\n\n /**\n * @notice Cannot remove a pool that was not added.\n * @param pool Address of the pool being removed\n * @param poolSetId Id of the set with which the pool is associated\n */\n error PoolNotInSet(address pool, uint256 poolSetId);\n\n /**\n * @notice Pool set id associated with an operation is invalid.\n * @dev This can mean the value is invalid, or it was never created, or it was destroyed.\n * @param poolSetId The id of the invalid set\n */\n error InvalidPoolSetId(uint256 poolSetId);\n\n /// @notice The initial manager of a pool set cannot be zero.\n error InvalidPoolSetManager();\n\n /**\n * @notice Pool set managers can only manage a single pool set.\n * @dev Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\n * @param poolSetManager Address of the manager that is already assigned to another pool set id\n */\n error PoolSetManagerNotUnique(address poolSetManager);\n\n /// @notice Permissioned operations on pools can only be performed by the pool set manager.\n error SenderIsNotPoolSetManager();\n\n /**\n * @notice An index is beyond the current bounds of the set.\n * @param poolSetId Id of the set involved in the operation\n */\n error IndexOutOfBounds(uint256 poolSetId);\n\n /***************************************************************************\n Manage Pool Sets\n ***************************************************************************/\n\n /**\n * @notice Create a new set with an initial manager, optionally initialized with a set of pools.\n * @dev The `newPools` list can be empty, in which case this will only create the set. Pools can then be\n * added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function.\n * Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the\n * initial manager address is zero or already a manager of another pool set.\n *\n * @param initialManager Address of the account authorized to perform operations on the set\n * @param newPools Set of pools to add to the set\n */\n function createPoolSet(address initialManager, address[] memory newPools) external returns (uint256 poolSetId);\n\n /**\n * @notice Create a new empty set with an initial manager.\n * @dev Convenience function to create a pool set with no initial pools. Also reverts if the initial manager\n * address is zero or already a manager of another pool set.\n *\n * @param initialManager Address of the account authorized to perform operations on the set\n */\n function createPoolSet(address initialManager) external returns (uint256 poolSetId);\n\n /**\n * @notice Simple way to remove an entire set of pools from control of the helper function.\n * @dev This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis)\n * may destroy sets, effectively removing control of any pools in the set from the associated manager.\n * Also reverts if the poolSetId is not valid.\n *\n * @param poolSetId Id of the set being destroyed\n */\n function destroyPoolSet(uint256 poolSetId) external;\n\n /**\n * @notice Transfer ownership of a pool set from the current manager to a new manager.\n * @dev This is a permissioned function. Only the current manager of a set can call this to set a new manager.\n * Since managers can only control a single set, there is no need to specify the id in the call. Note that this\n * is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this\n * contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts\n * if the new manager address is zero or already the manager of a pool set.\n *\n * @param newManager The address of the new manager\n */\n function transferPoolSetOwnership(address newManager) external;\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /**\n * @notice Add pools to the set of pools controlled by this helper contract.\n * @dev This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis)\n * may add pools to a set. Also reverts if the poolSetId is not valid.\n *\n * @param newPools List of pools to add\n * @param poolSetId Id of the set to which the new pools belong\n */\n function addPoolsToSet(uint256 poolSetId, address[] memory newPools) external;\n\n /**\n * @notice Remove pools from the set of pools controlled by this helper contract.\n * @dev This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis)\n * may remove pools from a set. Also reverts if the poolSetId is not valid.\n *\n * @param pools List of pools to remove from the set\n * @param poolSetId Id of the set to which the pools belong\n */\n function removePoolsFromSet(uint256 poolSetId, address[] memory pools) external;\n\n /***************************************************************************\n Getters \n ***************************************************************************/\n\n /**\n * @notice Get the pool set id associated with the caller.\n * @return poolSetId The numeric pool set id, or zero if the caller is not a pool set manager\n */\n function getPoolSetIdForCaller() external view returns (uint256 poolSetId);\n\n /**\n * @notice Get the pool set id associated with a given manager address.\n * @return poolSetId The numeric pool set id, or zero if the address given is not a pool set manager\n */\n function getPoolSetIdForManager(address manager) external view returns (uint256 poolSetId);\n\n /**\n * @notice Get the number of pools associated with the given set.\n * @dev Needed to support pagination in case the set is too large to process in a single transaction.\n * Reverts if the poolSetId is not valid.\n *\n * @param poolSetId Id of the set containing the pools\n * @return poolCount The current number of pools in the set\n */\n function getPoolCountForSet(uint256 poolSetId) external view returns (uint256 poolCount);\n\n /**\n * @notice Check whether a poolSetId has been created.\n * @param poolSetId Id of the set containing the pools\n * @return isValid True if the poolSetId exists\n */\n function isValidPoolSetId(uint256 poolSetId) external view returns (bool isValid);\n\n /**\n * @notice Check whether a pool is in the set of pools.\n * @dev Reverts if the poolSetId is not valid.\n * @param pool Address of the pool to check\n * @param poolSetId Id of the set containing the pools\n * @return poolInSet True if the pool is in the given set, false otherwise\n */\n function isPoolInSet(address pool, uint256 poolSetId) external view returns (bool poolInSet);\n\n /**\n * @notice Get the full set of pools from a given set.\n * @dev Reverts if the poolSetId is not valid.\n * @param poolSetId Id of the set containing the pools\n * @return pools List of pools\n */\n function getAllPoolsInSet(uint256 poolSetId) external view returns (address[] memory pools);\n\n /**\n * @notice Get a range of pools from a given set.\n * @dev Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`).\n * Reverts if the poolSetId is not valid.\n *\n * @param poolSetId Id of the set containing the pools\n * @param from Start index\n * @param to End index\n * @return pools List of pools\n */\n function getPoolsInSet(uint256 poolSetId, uint256 from, uint256 to) external view returns (address[] memory pools);\n\n /**\n * @notice Utility function to predict the next pool set id.\n * @return nextPoolSetId The pool set id that will be used on the next call of `createPoolSet`\n */\n function getNextPoolSetId() external view returns (uint256 nextPoolSetId);\n\n /**\n * @notice Get the manager address associated with a given poolSetId.\n * @param poolSetId Id of the set containing the pools\n * @return manager The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\n */\n function getManagerForPoolSet(uint256 poolSetId) external view returns (address manager);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Maintain a set of pools that can be paused from this helper contract, vs. directly from the Vault.\n * @dev Governance can add a set of pools to this contract, then grant pause permission to accounts here, which\n * allows greater granularity than setting the permission directly on the Vault.\n *\n * Note that governance must grant this contract permission to pause pools from the Vault. Unpausing is not\n * addressed here, and must still be done through the Vault.\n */\ninterface IPoolPauseHelper {\n /**\n * @notice Pause a set of pools.\n * @dev This is a permissioned function. Governance must first grant this contract permission to call `pausePool`\n * on the Vault, then grant another account permission to call `pausePools` here. Note that this is not necessarily\n * the same account that can add or remove pools from the pausable list.\n *\n * Note that there is no `unpause`. This is a helper contract designed to react quickly to emergencies. Unpausing\n * is a more deliberate action that should be performed by accounts approved by governance for this purpose, or by\n * the individual pools' pause managers.\n *\n * @param pools List of pools to pause\n */\n function pausePools(address[] memory pools) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Maintain a set of pools whose static swap fee percentages can be changed from here, vs. from the Vault.\n * @dev Governance can add a set of pools to this contract, then grant swap fee setting permission to accounts on this\n * contract, which allows greater granularity than setting the permission directly on the Vault.\n *\n * Note that governance must grant this contract permission to set swap fees from the Vault, and only pools that\n * allow governance to set fees can be added (i.e., they must not have swap managers).\n */\ninterface IPoolSwapFeeHelper {\n /**\n * @notice Cannot add a pool that has a swap manager.\n * @dev The swap manager is an exclusive role. If it is set to a non-zero value during pool registration,\n * only the swap manager can change the fee. This helper can only set fees on pools that allow governance\n * to grant this permission.\n *\n * @param pool Address of the pool being added\n */\n error PoolHasSwapManager(address pool);\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /**\n * @notice Set the static swap fee percentage on a given pool.\n * @dev This is a permissioned function. Governance must grant this contract permission to call\n * `setStaticSwapFeePercentage` on the Vault. Note that since the swap manager is an exclusive role, the swap fee\n * cannot be changed by governance if it is set, and the pool cannot be added to the set.\n *\n * @param pool The address of the pool\n * @param swapFeePercentage The new swap fee percentage\n */\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\ninterface IProtocolFeeBurner {\n /**\n * @notice A protocol fee token has been \"burned\" (i.e., swapped for the desired target token).\n * @param pool The pool on which the fee was collected (used for event tracking)\n * @param feeToken The token in which the fee was originally collected\n * @param exactFeeTokenAmountIn The number of feeTokens collected\n * @param targetToken The preferred token for fee collection (e.g., USDC)\n * @param actualTargetTokenAmountOut The number of target tokens actually received\n * @param recipient The address where the target tokens were sent\n */\n event ProtocolFeeBurned(\n address indexed pool,\n IERC20 indexed feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 indexed targetToken,\n uint256 actualTargetTokenAmountOut,\n address recipient\n );\n\n /**\n * @notice The actual amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error AmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /// @notice The swap transaction was not validated before the specified deadline timestamp.\n error SwapDeadline();\n\n /**\n * @notice Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\n * @dev Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\n * @param pool The pool the fees came from (only used for documentation in the event)\n * @param feeToken The token collected from the pool\n * @param exactFeeTokenAmountIn The number of fee tokens collected\n * @param targetToken The desired target token (token out of the swap)\n * @param minTargetTokenAmountOut The minimum amount out for the swap\n * @param recipient The recipient of the swap proceeds\n * @param deadline Deadline for the burn operation (i.e., swap), after which it will revert\n */\n function burn(\n address pool,\n IERC20 feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 targetToken,\n uint256 minTargetTokenAmountOut,\n address recipient,\n uint256 deadline\n ) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Maintain a set of pools whose protocol fees can be set from this helper contract, vs. the fee controller.\n * @dev Governance can add a set of pools to this contract, then grant permission to call protocol swap- or yield-\n * setting functions here, which allows greater granularity than setting permissions directly on the fee controller.\n *\n * Note that governance must grant this contract permission to call the pool protocol fee setting functions on the\n * controller.\n */\ninterface IProtocolFeeHelper {\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /**\n * @notice Set the protocol swap fee for a pool.\n * @dev This contract must be granted permission to set swap and yield protocol fees, but governance can\n * independently grant permission to call the swap and yield fee setters.\n *\n * @param pool The address of the pool\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage\n */\n function setProtocolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Set the protocol yield fee for a pool.\n * @dev This contract must be granted permission to set swap and yield protocol fees, but governance can\n * independently grant permission to call the swap and yield fee setters.\n *\n * @param pool The address of the pool\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setProtocolYieldFeePercentage(address pool, uint256 newProtocolYieldFeePercentage) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IProtocolFeeController } from \"../vault/IProtocolFeeController.sol\";\nimport { IProtocolFeeBurner } from \"./IProtocolFeeBurner.sol\";\n\ninterface IProtocolFeeSweeper {\n /**\n * @notice Emitted when the target token is set or updated.\n * @param token The preferred token for receiving protocol fees\n */\n event TargetTokenSet(IERC20 indexed token);\n\n /**\n * @notice Emitted when the fee recipient address is set or updated.\n * @param feeRecipient The final destination of collected protocol fees\n */\n event FeeRecipientSet(address indexed feeRecipient);\n\n /**\n * @notice Emitted when a fee token is transferred directly, vs. calling the burner.\n * @dev This can happen if no target token or burner contract was specified, or the fee token is the target token.\n * @param pool The pool on which the fee was collected\n * @param feeToken The token the fee was collected in (also the target token in this case; no swap necessary)\n * @param feeTokenAmount The number of feeTokens\n * @param recipient The recipient of the fee tokens\n */\n event ProtocolFeeSwept(address indexed pool, IERC20 indexed feeToken, uint256 feeTokenAmount, address recipient);\n\n /**\n * @notice Emitted when a burner is added to the protocol fee burner allowlist.\n * @dev `sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\n * @param protocolFeeBurner The address of the approved protocol fee burner that was added\n */\n event ProtocolFeeBurnerAdded(address indexed protocolFeeBurner);\n\n /**\n * @notice Emitted when a burner is removed from the protocol fee burner allowlist.\n * @dev `sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\n * @param protocolFeeBurner The address of the approved protocol fee burner that was removed\n */\n event ProtocolFeeBurnerRemoved(address indexed protocolFeeBurner);\n\n /// @notice The fee recipient is invalid.\n error InvalidFeeRecipient();\n\n /// @notice The target token is invalid.\n error InvalidTargetToken();\n\n /// @notice The protocol fee burner to be added is invalid.\n error InvalidProtocolFeeBurner();\n\n /**\n * @notice The specified fee burner has not been approved.\n * @param protocolFeeBurner The address of the unsupported fee burner\n */\n error UnsupportedProtocolFeeBurner(address protocolFeeBurner);\n\n /**\n * @notice Protocol fee burners can only be added to the allowlist once.\n * @param protocolFeeBurner The address of an approved protocol fee burner\n */\n error ProtocolFeeBurnerAlreadyAdded(address protocolFeeBurner);\n\n /**\n * @notice Protocol fee burners must be added to the allowlist before being removed.\n * @param protocolFeeBurner The address of a protocol fee burner to be removed from the allowlist\n */\n error ProtocolFeeBurnerNotAdded(address protocolFeeBurner);\n\n /**\n * @notice The burner did not consume its entire allowance.\n * @dev The fee sweeper approves the burner to pull tokens. If it doesn't do so, revert to avoid a \"hanging\"\n * approval that could be exploited later.\n */\n error BurnerDidNotConsumeAllowance();\n\n /// @notice Unwrapping is not allowed for the operation.\n error UnwrapIsNotAllowed();\n\n /**\n * @notice Withdraw, convert, and forward protocol fees for a given pool and token.\n * @dev This will withdraw the fee token from the controller to this contract, and attempt to convert and forward\n * the proceeds to the fee recipient. Note that this requires governance to grant this contract permission to call\n * `withdrawProtocolFeesForToken` on the `ProtocolFeeController`.\n *\n * This is a permissioned call, since it involves a swap and a permissionless sweep could be triggered at times\n * disadvantageous to the protocol (e.g., flash crashes). The general design is for an off-chain process to\n * periodically collect fees from the Vault and check the protocol fee amounts available for withdrawal. Once\n * these are greater than a threshold, compute the expected proceeds to determine the limits (amount and deadline),\n * then call the sweeper to put in the order with the burner.\n *\n * @param pool The pool that incurred the fees we're withdrawing\n * @param feeToken The fee token in the pool\n * @param minTargetTokenAmountOut The minimum number of target tokens to be received\n * @param deadline Deadline for the burn operation (swap), after which it will revert\n * @param feeBurner The protocol fee burner to be used (or the zero address to fall back on direct transfer)\n */\n function sweepProtocolFeesForToken(\n address pool,\n IERC20 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner\n ) external;\n\n /**\n * @notice The same as `sweepProtocolFeesForToken`, but for wrapped tokens.\n * @param pool The pool that incurred the fees we're withdrawing\n * @param feeToken The fee token in the pool\n * @param minTargetTokenAmountOut The minimum number of target tokens to be received\n * @param deadline Deadline for the burn operation (swap), after which it will revert\n * @param feeBurner The protocol fee burner to be used (or the zero address to fall back on direct transfer)\n */\n function sweepProtocolFeesForWrappedToken(\n address pool,\n IERC4626 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner\n ) external;\n\n /**\n * @notice Return the address of the current `ProtocolFeeController` from the Vault.\n * @dev It is not immutable in the Vault, so we need to fetch it every time.\n * @return protocolFeeController The address of the current `ProtocolFeeController`\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController);\n\n /**\n * @notice Getter for the target token.\n * @dev This is the token the burner will swap all fee tokens for. Can be changed by `setTargetToken`.\n * @return targetToken The current target token\n */\n function getTargetToken() external view returns (IERC20);\n\n /**\n * @notice Getter for the current fee recipient.\n * @dev Can be changed by `setFeeRecipient`.\n * @return feeRecipient The current fee recipient\n */\n function getFeeRecipient() external view returns (address);\n\n /**\n * @notice Check whether a given address corresponds to an approved protocol fee burner.\n * @param protocolFeeBurner The address to be checked\n * @return isApproved True if the given address is on the approved protocol fee burner allowlist\n */\n function isApprovedProtocolFeeBurner(address protocolFeeBurner) external view returns (bool);\n\n /**\n * @notice Update the fee recipient address.\n * @dev This is a permissioned function.\n * @param feeRecipient The address of the new fee recipient\n */\n function setFeeRecipient(address feeRecipient) external;\n\n /**\n * @notice Update the address of the target token.\n * @dev This is the token for which the burner will attempt to swap all collected fee tokens.\n * @param targetToken The address of the target token\n */\n function setTargetToken(IERC20 targetToken) external;\n\n /**\n * @notice Add an approved fee burner to the allowlist.\n * @dev This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol\n * fee burners.\n *\n * @param protocolFeeBurner The address of an approved protocol fee burner to be added\n */\n function addProtocolFeeBurner(IProtocolFeeBurner protocolFeeBurner) external;\n\n /**\n * @notice Remove a fee burner from the allowlist.\n * @dev This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol\n * fee burners.\n *\n * @param protocolFeeBurner The address of a protocol fee burner on the allowlist to be removed\n */\n function removeProtocolFeeBurner(IProtocolFeeBurner protocolFeeBurner) external;\n\n /**\n * @notice Retrieve any tokens \"stuck\" in this contract (e.g., dust, or failed conversions).\n * @dev It will recover the full balance of all the tokens. This can only be called by the `feeRecipient`.\n * @param feeTokens The tokens to recover\n */\n function recoverProtocolFees(IERC20[] memory feeTokens) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\nimport { SwapPathStep } from \"../vault/BatchRouterTypes.sol\";\n\npragma solidity ^0.8.24;\n\ninterface ITokenPairRegistry {\n /**\n * @notice Emitted when a new token pair is added to the registry.\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n * @param pathsLength The number of paths added for the token pair\n */\n event PathAdded(address indexed tokenIn, address indexed tokenOut, uint256 pathsLength);\n\n /**\n * @notice Emitted when an existing token pair is removed from the registry.\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n * @param pathsLength The number of paths associated with the token pair after the removal\n */\n event PathRemoved(address indexed tokenIn, address indexed tokenOut, uint256 pathsLength);\n\n /**\n * @notice The given buffer address does not correspond to an initialized buffer.\n * @param buffer The address of the uninitialized buffer\n */\n error BufferNotInitialized(address buffer);\n\n /// @notice The path to add cannot be empty.\n error EmptyPath();\n\n /**\n * @notice The given address is not a valid pool or buffer.\n * @param path Pool or buffer address\n */\n error InvalidSimplePath(address path);\n\n /**\n * @notice The given pool or buffer is not registered as a path for the token pair.\n * @param poolOrBuffer The address of the pool or buffer\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n */\n error InvalidRemovePath(address poolOrBuffer, address tokenIn, address tokenOut);\n\n /**\n * @notice The output token does not match the expected address in a wrap or unwrap operation.\n * @param buffer The address of the buffer\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n */\n error InvalidBufferPath(address buffer, address tokenIn, address tokenOut);\n\n /// @notice Attempted to remove a path at an index beyond the registered length.\n error IndexOutOfBounds();\n\n /**\n * @notice Returns the path for a given token pair at a specific index.\n * @dev Safe version; reverts if the index is out of bounds.\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n * @param index The index of the path in the list of paths for the token pair\n * @return The path at the specified index for the token pair\n */\n function getPathAt(address tokenIn, address tokenOut, uint256 index) external view returns (SwapPathStep[] memory);\n\n /**\n * @notice Returns the number of paths registered for a given token pair.\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n * @return The number of paths registered for the token pair\n */\n function getPathCount(address tokenIn, address tokenOut) external view returns (uint256);\n\n /**\n * @notice Returns the paths registered for a given token pair.\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n * @return An array of path addresses registered for the token pair\n */\n function getPaths(address tokenIn, address tokenOut) external view returns (SwapPathStep[][] memory);\n\n /**\n * @notice Adds an arbitrary path between `tokenIn` and the last step's `tokenOut` to the registry.\n * @dev This function is permissioned. Use it to register boosted pool paths with leading / trailing buffer steps.\n * The registry will validate that each step is valid (i.e. each pool step contains the `tokenIn` and `tokenOut`,\n * and each buffer step has the correct wrapped / underlying token).\n *\n * @param tokenIn The address of the input token in the pair\n * @param steps An array of `SwapPathStep` structs representing the path steps to reach the output token\n */\n function addPath(address tokenIn, SwapPathStep[] memory steps) external;\n\n /**\n * @notice Adds a pool or buffer to the registry with all token pairs it supports.\n * @dev This function is permissioned.\n * @param poolOrBuffer The address of the pool or buffer\n */\n function addSimplePath(address poolOrBuffer) external;\n\n /**\n * @notice Removes an arbitrary path from the registry at a given index.\n * @dev This function is permissioned.\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n * @param index The index of the path to remove in the list of paths for the token pair\n */\n function removePathAtIndex(address tokenIn, address tokenOut, uint256 index) external;\n\n /**\n * @notice Removes all token paths registered for a given pool or buffer.\n * @dev This function is permissioned.\n * @param poolOrBuffer The address of the pool or buffer\n */\n function removeSimplePath(address poolOrBuffer) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nstruct SwapPathStep {\n address pool;\n IERC20 tokenOut;\n // If true, the \"pool\" is an ERC4626 Buffer. Used to wrap/unwrap tokens if pool doesn't have enough liquidity.\n bool isBuffer;\n}\n\nstruct SwapPathExactAmountIn {\n IERC20 tokenIn;\n // For each step:\n // If tokenIn == pool, use removeLiquidity SINGLE_TOKEN_EXACT_IN.\n // If tokenOut == pool, use addLiquidity UNBALANCED.\n SwapPathStep[] steps;\n uint256 exactAmountIn;\n uint256 minAmountOut;\n}\n\nstruct SwapPathExactAmountOut {\n IERC20 tokenIn;\n // for each step:\n // If tokenIn == pool, use removeLiquidity SINGLE_TOKEN_EXACT_OUT.\n // If tokenOut == pool, use addLiquidity SINGLE_TOKEN_EXACT_OUT.\n SwapPathStep[] steps;\n uint256 maxAmountIn;\n uint256 exactAmountOut;\n}\n\nstruct SwapExactInHookParams {\n address sender;\n SwapPathExactAmountIn[] paths;\n uint256 deadline;\n bool wethIsEth;\n bytes userData;\n}\n\nstruct SwapExactOutHookParams {\n address sender;\n SwapPathExactAmountOut[] paths;\n uint256 deadline;\n bool wethIsEth;\n bytes userData;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Interface to the Vault's permission system.\ninterface IAuthorizer {\n /**\n * @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n * @param actionId Identifier for the action to be performed\n * @param account Account trying to perform the action\n * @param where Target contract for the action\n * @return success True if the action is permitted\n */\n function canPerform(bytes32 actionId, address account, address where) external view returns (bool success);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"../solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @notice Base interface for a Balancer Pool Factory.\n * @dev All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types\n * (e.g., address prediction, tracking deployed pools, and governance-facilitated migration).\n */\ninterface IBasePoolFactory is IAuthentication {\n /**\n * @notice A pool was deployed.\n * @param pool The address of the new pool\n */\n event PoolCreated(address indexed pool);\n\n /// @notice The factory was disabled by governance.\n event FactoryDisabled();\n\n /// @notice Attempted pool creation after the factory was disabled.\n error Disabled();\n\n /// @notice A pool index is beyond the current bounds of the array.\n error IndexOutOfBounds();\n\n /**\n * @notice Check whether a pool was deployed by this factory.\n * @param pool The pool to check\n * @return success True if `pool` was created by this factory\n */\n function isPoolFromFactory(address pool) external view returns (bool success);\n\n /**\n * @notice Return the total number of pools deployed by this factory.\n * @dev This can then be used to \"paginate\" calls to `getPools` to control gas costs.\n * @return poolCount The number of pools deployed by this factory\n */\n function getPoolCount() external view returns (uint256 poolCount);\n\n /**\n * @notice Return a subset of the list of pools deployed by this factory.\n * @dev `start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply\n * stop at the end and return fewer results than requested.\n *\n * @param start The index of the first pool to return\n * @param count The maximum number of pools to return\n * @return pools The list of pools deployed by this factory, starting at `start` and returning up to `count` pools\n */\n function getPoolsInRange(uint256 start, uint256 count) external view returns (address[] memory pools);\n\n /**\n * @notice Return the complete list of pools deployed by this factory.\n * @return pools The list of pools deployed by this factory\n */\n function getPools() external view returns (address[] memory pools);\n\n /**\n * @notice Return the address where a new pool will be deployed, based on the factory address and salt.\n * @param constructorArgs The arguments used to create the pool\n * @param salt The salt used to deploy the pool\n * @return deploymentAddress The predicted address of the pool, given the salt\n */\n function getDeploymentAddress(\n bytes memory constructorArgs,\n bytes32 salt\n ) external view returns (address deploymentAddress);\n\n /**\n * @notice Check whether this factory has been disabled by governance.\n * @return success True if this factory was disabled\n */\n function isDisabled() external view returns (bool success);\n\n /**\n * @notice Disable the factory, preventing the creation of more pools.\n * @dev Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\n */\n function disable() external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n// Explicitly import VaultTypes structs because we expect this interface to be heavily used by external developers.\n// Internally, when this list gets too long, we usually just do a simple import to keep things tidy.\nimport {\n TokenConfig,\n LiquidityManagement,\n PoolSwapParams,\n AfterSwapParams,\n HookFlags,\n AddLiquidityKind,\n RemoveLiquidityKind,\n SwapKind\n} from \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for pool hooks.\n * @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n * they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n * should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n * then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\n */\ninterface IHooks {\n /***************************************************************************\n Register\n ***************************************************************************/\n\n /**\n * @notice Hook executed when a pool is registered with a non-zero hooks contract.\n * @dev Returns true if registration was successful, and false to revert the pool registration.\n * Make sure this function is properly implemented (e.g. check the factory, and check that the\n * given pool is from the factory). The Vault address will be msg.sender.\n *\n * @param factory Address of the pool factory (contract deploying the pool)\n * @param pool Address of the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param liquidityManagement Liquidity management flags indicating which functions are enabled\n * @return success True if the hook allowed the registration, false otherwise\n */\n function onRegister(\n address factory,\n address pool,\n TokenConfig[] memory tokenConfig,\n LiquidityManagement calldata liquidityManagement\n ) external returns (bool success);\n\n /**\n * @notice Return the set of hooks implemented by the contract.\n * @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n * (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n * `onRegister` is the only \"mandatory\" hook.\n *\n * @return hookFlags Flags indicating which hooks the contract supports\n */\n function getHookFlags() external view returns (HookFlags memory hookFlags);\n\n /***************************************************************************\n Initialize\n ***************************************************************************/\n\n /**\n * @notice Hook executed before pool initialization.\n * @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with initialization\n */\n function onBeforeInitialize(uint256[] memory exactAmountsIn, bytes memory userData) external returns (bool success);\n\n /**\n * @notice Hook to be executed after pool initialization.\n * @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param bptAmountOut Amount of pool tokens minted during initialization\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool accepts the initialization results\n */\n function onAfterInitialize(\n uint256[] memory exactAmountsIn,\n uint256 bptAmountOut,\n bytes memory userData\n ) external returns (bool success);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before adding liquidity.\n * @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param maxAmountsInScaled18 Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory maxAmountsInScaled18,\n uint256 minBptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after adding liquidity.\n * @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n * @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n * @param bptAmountOut Amount of pool tokens minted\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook\n */\n function onAfterAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory amountsInScaled18,\n uint256[] memory amountsInRaw,\n uint256 bptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsInRaw);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before removing liquidity.\n * @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOutScaled18,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after removing liquidity.\n * @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param bptAmountIn Amount of pool tokens to burn\n * @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n * @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook\n */\n function onAfterRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 bptAmountIn,\n uint256[] memory amountsOutScaled18,\n uint256[] memory amountsOutRaw,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsOutRaw);\n\n /***************************************************************************\n Swap\n ***************************************************************************/\n\n /**\n * @notice Called before a swap to give the Pool an opportunity to perform actions.\n * @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeSwap(PoolSwapParams calldata params, address pool) external returns (bool success);\n\n /**\n * @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n * @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n * use the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see above for struct definition)\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook\n */\n function onAfterSwap(\n AfterSwapParams calldata params\n ) external returns (bool success, uint256 hookAdjustedAmountCalculatedRaw);\n\n /**\n * @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n * @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n * @return success True if the pool wishes to proceed with settlement\n * @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value\n */\n function onComputeDynamicSwapFeePercentage(\n PoolSwapParams calldata params,\n address pool,\n uint256 staticSwapFeePercentage\n ) external view returns (bool success, uint256 dynamicSwapFeePercentage);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVault } from \"./IVault.sol\";\n\n/// @notice Contract that handles protocol and pool creator fees for the Vault.\ninterface IProtocolFeeController {\n /**\n * @notice Emitted when the protocol swap fee percentage is updated.\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event GlobalProtocolSwapFeePercentageChanged(uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated.\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event GlobalProtocolYieldFeePercentageChanged(uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol swap fee will be changed\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event ProtocolSwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol yield fee will be changed\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event ProtocolYieldFeePercentageChanged(address indexed pool, uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n * @param pool The pool whose pool creator swap fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool\n */\n event PoolCreatorSwapFeePercentageChanged(address indexed pool, uint256 poolCreatorSwapFeePercentage);\n\n /**\n * @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n * @param pool The pool whose pool creator yield fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool\n */\n event PoolCreatorYieldFeePercentageChanged(address indexed pool, uint256 poolCreatorYieldFeePercentage);\n\n /**\n * @notice Logs the collection of protocol swap fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the swap fee was charged\n * @param token The token in which the swap fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolSwapFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the collection of protocol yield fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the yield fee was charged\n * @param token The token in which the yield fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolYieldFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of protocol fees in a specific token and amount.\n * @param pool The pool from which protocol fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds\n * @param amount The amount of the fee token that was withdrawn\n */\n event ProtocolFeesWithdrawn(address indexed pool, IERC20 indexed token, address indexed recipient, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n * @param pool The pool from which pool creator fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n * @param amount The amount of the fee token that was withdrawn\n */\n event PoolCreatorFeesWithdrawn(\n address indexed pool,\n IERC20 indexed token,\n address indexed recipient,\n uint256 amount\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global swap fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateSwapFeePercentage(\n address indexed pool,\n uint256 aggregateSwapFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global yield fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateYieldFeePercentage(\n address indexed pool,\n uint256 aggregateYieldFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\n * @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n * simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n * counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n * @param protocolFeeExempt True if the pool is initially exempt from protocol fees\n */\n event PoolRegisteredWithFeeController(address indexed pool, address indexed poolCreator, bool protocolFeeExempt);\n\n /**\n * @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages.\n */\n error ProtocolSwapFeePercentageTooHigh();\n\n /**\n * @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages.\n */\n error ProtocolYieldFeePercentageTooHigh();\n\n /**\n * @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n * @param pool The pool with no creator\n */\n error PoolCreatorNotRegistered(address pool);\n\n /**\n * @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n * @param caller The account attempting to withdraw pool creator fees\n * @param pool The pool the caller tried to withdraw from\n */\n error CallerIsNotPoolCreator(address caller, address pool);\n\n /// @notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\n error PoolCreatorFeePercentageTooHigh();\n\n /**\n * @notice Get the address of the main Vault contract.\n * @return vault The Vault address\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Collects aggregate fees from the Vault for a given pool.\n * @param pool The pool with aggregate fees\n */\n function collectAggregateFees(address pool) external;\n\n /**\n * @notice Getter for the current global protocol swap fee.\n * @return protocolSwapFeePercentage The global protocol swap fee percentage\n */\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256 protocolSwapFeePercentage);\n\n /**\n * @notice Getter for the current global protocol yield fee.\n * @return protocolYieldFeePercentage The global protocol yield fee percentage\n */\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256 protocolYieldFeePercentage);\n\n /**\n * @notice Getter for pool registration flag.\n * @param pool The address of the pool\n * @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\n */\n function isPoolRegistered(address pool) external view returns (bool);\n\n /**\n * @notice Getter for the current protocol swap fee for a given pool.\n * @param pool The address of the pool\n * @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolSwapFeeInfo(\n address pool\n ) external view returns (uint256 protocolSwapFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current protocol yield fee for a given pool.\n * @param pool The address of the pool\n * @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolYieldFeeInfo(\n address pool\n ) external view returns (uint256 protocolYieldFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current pool creator swap fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\n */\n function getPoolCreatorSwapFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Getter for the current pool creator yield fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\n */\n function getPoolCreatorYieldFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n * @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n * pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n * stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n * It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n * components, but the truncation ensures it will not revert for any valid set of fee percentages.\n *\n * See example below:\n *\n * tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n * totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n * protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n * creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n * creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n * lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n *\n * @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n * @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n * @return aggregateFeePercentage The computed aggregate percentage\n */\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256 aggregateFeePercentage);\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol swap fee\n */\n function updateProtocolSwapFeePercentage(address pool) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol yield fee\n */\n function updateProtocolYieldFeePercentage(address pool) external;\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /**\n * @notice Add pool-specific entries to the protocol swap and yield percentages.\n * @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n * protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n * fee percentages, based on an initial pool creator fee of 0.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n * @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n * @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @return aggregateYieldFeePercentage The initial aggregate yield fee percentage\n */\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice Set the global protocol swap fee percentage, used by standard pools.\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage\n */\n function setGlobalProtocolSwapFeePercentage(uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Set the global protocol yield fee percentage, used by standard pools.\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setGlobalProtocolYieldFeePercentage(uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol swap fee\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool\n */\n function setProtocolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol yield fee\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool\n */\n function setProtocolYieldFeePercentage(address pool, uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator swap fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool\n */\n function setPoolCreatorSwapFeePercentage(address pool, uint256 poolCreatorSwapFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator yield fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool\n */\n function setPoolCreatorYieldFeePercentage(address pool, uint256 poolCreatorYieldFeePercentage) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawProtocolFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n * @param token Token to withdraw\n */\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n * @dev Sends swap and yield pool creator fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawPoolCreatorFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool.\n * @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n * value, this function is permissionless.\n *\n * @param pool The pool on which fees were collected\n */\n function withdrawPoolCreatorFees(address pool) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IBalancerContractRegistry } from \"../standalone-utils/IBalancerContractRegistry.sol\";\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\n\ninterface IProtocolFeePercentagesProvider {\n /**\n * @notice Protocol fee percentages have been set for the given factory.\n * @param factory The pool factory\n * @param protocolSwapFeePercentage The protocol swap fee percentage intended for pools from this factory\n * @param protocolYieldFeePercentage The protocol yield fee percentage intended for pools from this factory\n */\n event FactorySpecificProtocolFeePercentagesSet(\n address indexed factory,\n uint256 protocolSwapFeePercentage,\n uint256 protocolYieldFeePercentage\n );\n\n /// @notice The protocol fee controller was configured with an incorrect Vault address.\n error WrongProtocolFeeControllerDeployment();\n\n /**\n * @notice Fees can only be set on recognized factories (i.e., registered in the `BalancerContractRegistry`).\n * @param factory The address of the unknown factory\n */\n error UnknownFactory(address factory);\n\n /**\n * @notice `setFactorySpecificProtocolFeePercentages` has not been called for this factory address.\n * @dev This error can by thrown by `getFactorySpecificProtocolFeePercentages` or\n * `setProtocolFeePercentagesForPools`, as both require that valid fee percentages have been set.\n * You need to set the factory fees before you can apply them to pools from that factory.\n *\n * @param factory The factory address where fees have not been set\n */\n error FactoryFeesNotSet(address factory);\n\n /**\n * @notice The given pool is not from the expected factory.\n * @dev Occurs when one of the pools supplied to `setProtocolFeePercentagesForPools` is not from the given factory.\n * @param pool The address of the unrecognized pool\n * @param factory The address of the factory\n */\n error PoolNotFromFactory(address pool, address factory);\n\n /**\n * @notice Get the address of the `ProtocolFeeController` used to set fees.\n * @return protocolFeeController The address of the fee controller\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController);\n\n /**\n * @notice Get the address of the `BalancerContractRegistry` used to validate factory contracts.\n * @return balancerContractRegistry The address of the Balancer contract registry\n */\n function getBalancerContractRegistry() external view returns (IBalancerContractRegistry balancerContractRegistry);\n\n /**\n * @notice Query the protocol fee percentages for a given factory.\n * @param factory The address of the factory\n * @return protocolSwapFeePercentage The protocol swap fee percentage set for that factory\n * @return protocolYieldFeePercentage The protocol yield fee percentage set for that factory\n */\n function getFactorySpecificProtocolFeePercentages(\n address factory\n ) external view returns (uint256 protocolSwapFeePercentage, uint256 protocolYieldFeePercentage);\n\n /**\n * @notice Assign intended protocol fee percentages for a given factory.\n * @dev This is a permissioned call. After the fee percentages have been set, and governance has granted\n * this contract permission to set fee percentages on pools, anyone can call `setProtocolFeePercentagesForPools`\n * to update the fee percentages on a set of pools from that factory.\n *\n * @param factory The address of the factory\n * @param protocolSwapFeePercentage The new protocol swap fee percentage\n * @param protocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setFactorySpecificProtocolFeePercentages(\n address factory,\n uint256 protocolSwapFeePercentage,\n uint256 protocolYieldFeePercentage\n ) external;\n\n /**\n * @notice Update the protocol fees for a set of pools from a given factory.\n * @dev This call is permissionless. Anyone can update the fee percentages, once they're set by governance.\n * Note that governance must also grant this contract permission to set protocol fee percentages on pools.\n *\n * @param factory The address of the factory\n * @param pools The pools whose fees will be set according to `setFactorySpecificProtocolFeePercentages`\n */\n function setProtocolFeePercentagesForPools(address factory, address[] memory pools) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVault } from \"./IVault.sol\";\nimport { IRouterQueries } from \"./IRouterQueries.sol\";\n\nimport { AddLiquidityKind, RemoveLiquidityKind, SwapKind } from \"./VaultTypes.sol\";\n\n/// @notice User-friendly interface to basic Vault operations: swap, add/remove liquidity, and associated queries.\ninterface IRouter is IRouterQueries {\n /***************************************************************************\n Pool Initialization\n ***************************************************************************/\n\n /**\n * @notice Initialize a liquidity pool.\n * @param pool Address of the liquidity pool\n * @param tokens Pool tokens, in token registration order\n * @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Minimum amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add initial liquidity\n * @return bptAmountOut Actual amount of pool tokens minted in exchange for initial liquidity\n */\n function initialize(\n address pool,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountOut);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Adds liquidity to a pool with proportional token amounts, receiving an exact amount of pool tokens.\n * @param pool Address of the liquidity pool\n * @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n * @param exactBptAmountOut Exact amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return amountsIn Actual amounts of tokens added, sorted in token registration order\n */\n function addLiquidityProportional(\n address pool,\n uint256[] memory maxAmountsIn,\n uint256 exactBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256[] memory amountsIn);\n\n /**\n * @notice Adds liquidity to a pool with arbitrary token amounts.\n * @param pool Address of the liquidity pool\n * @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Minimum amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return bptAmountOut Actual amount of pool tokens received\n */\n function addLiquidityUnbalanced(\n address pool,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountOut);\n\n /**\n * @notice Adds liquidity to a pool in a single token, receiving an exact amount of pool tokens.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token used to add liquidity\n * @param maxAmountIn Maximum amount of tokens to be added\n * @param exactBptAmountOut Exact amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return amountIn Actual amount of tokens added\n */\n function addLiquiditySingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n uint256 maxAmountIn,\n uint256 exactBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 amountIn);\n\n /**\n * @notice Adds liquidity to a pool by donating the amounts in (no BPT out).\n * @dev To support donation, the pool config `enableDonation` flag must be set to true.\n * @param pool Address of the liquidity pool\n * @param amountsIn Amounts of tokens to be donated, sorted in token registration order\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to donate liquidity\n */\n function donate(address pool, uint256[] memory amountsIn, bool wethIsEth, bytes memory userData) external payable;\n\n /**\n * @notice Adds liquidity to a pool with a custom request.\n * @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n * In any case the caller can expect them to be hard boundaries for the request.\n *\n * @param pool Address of the liquidity pool\n * @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Minimum amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return amountsIn Actual amounts of tokens added, sorted in token registration order\n * @return bptAmountOut Actual amount of pool tokens received\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function addLiquidityCustom(\n address pool,\n uint256[] memory maxAmountsIn,\n uint256 minBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Removes liquidity with proportional token amounts from a pool, burning an exact pool token amount.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return amountsOut Actual amounts of tokens received, sorted in token registration order\n */\n function removeLiquidityProportional(\n address pool,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256[] memory amountsOut);\n\n /**\n * @notice Removes liquidity from a pool via a single token, burning an exact pool token amount.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided\n * @param tokenOut Token used to remove liquidity\n * @param minAmountOut Minimum amount of tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return amountOut Actual amount of tokens received\n */\n function removeLiquiditySingleTokenExactIn(\n address pool,\n uint256 exactBptAmountIn,\n IERC20 tokenOut,\n uint256 minAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 amountOut);\n\n /**\n * @notice Removes liquidity from a pool via a single token, specifying the exact amount of tokens to receive.\n * @param pool Address of the liquidity pool\n * @param maxBptAmountIn Maximum amount of pool tokens provided\n * @param tokenOut Token used to remove liquidity\n * @param exactAmountOut Exact amount of tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return bptAmountIn Actual amount of pool tokens burned\n */\n function removeLiquiditySingleTokenExactOut(\n address pool,\n uint256 maxBptAmountIn,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountIn);\n\n /**\n * @notice Removes liquidity from a pool with a custom request.\n * @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n * In any case the caller can expect them to be hard boundaries for the request.\n *\n * @param pool Address of the liquidity pool\n * @param maxBptAmountIn Maximum amount of pool tokens provided\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return bptAmountIn Actual amount of pool tokens burned\n * @return amountsOut Actual amounts of tokens received, sorted in token registration order\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function removeLiquidityCustom(\n address pool,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /**\n * @notice Removes liquidity proportionally, burning an exact pool token amount. Only available in Recovery Mode.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @return amountsOut Actual amounts of tokens received, sorted in token registration order\n */\n function removeLiquidityRecovery(\n address pool,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external payable returns (uint256[] memory amountsOut);\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Executes a swap operation specifying an exact input token amount.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountIn Exact amounts of input tokens to send\n * @param minAmountOut Minimum amount of tokens to be received\n * @param deadline Deadline for the swap, after which it will revert\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the swap request\n * @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens\n */\n function swapSingleTokenExactIn(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountIn,\n uint256 minAmountOut,\n uint256 deadline,\n bool wethIsEth,\n bytes calldata userData\n ) external payable returns (uint256 amountOut);\n\n /**\n * @notice Executes a swap operation specifying an exact output token amount.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountOut Exact amounts of input tokens to receive\n * @param maxAmountIn Maximum amount of tokens to be sent\n * @param deadline Deadline for the swap, after which it will revert\n * @param userData Additional (optional) data sent with the swap request\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens\n */\n function swapSingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n uint256 maxAmountIn,\n uint256 deadline,\n bool wethIsEth,\n bytes calldata userData\n ) external payable returns (uint256 amountIn);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVault } from \"./IVault.sol\";\n\nimport { AddLiquidityKind, RemoveLiquidityKind, SwapKind } from \"./VaultTypes.sol\";\n\n/// @notice User-friendly interface for querying expected results of swap and liquidity operations without execution.\ninterface IRouterQueries {\n /***************************************************************************\n Add liquidity\n ***************************************************************************/\n\n /**\n * @notice Queries an `addLiquidityProportional` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountOut Exact amount of pool tokens to be received\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountsIn Expected amounts of tokens to add, sorted in token registration order\n */\n function queryAddLiquidityProportional(\n address pool,\n uint256 exactBptAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256[] memory amountsIn);\n\n /**\n * @notice Queries an `addLiquidityUnbalanced` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return bptAmountOut Expected amount of pool tokens to receive\n */\n function queryAddLiquidityUnbalanced(\n address pool,\n uint256[] memory exactAmountsIn,\n address sender,\n bytes memory userData\n ) external returns (uint256 bptAmountOut);\n\n /**\n * @notice Queries an `addLiquiditySingleTokenExactOut` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token used to add liquidity\n * @param exactBptAmountOut Expected exact amount of pool tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountIn Expected amount of tokens to add\n */\n function queryAddLiquiditySingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n uint256 exactBptAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 amountIn);\n\n /**\n * @notice Queries an `addLiquidityCustom` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Expected minimum amount of pool tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountsIn Expected amounts of tokens to add, sorted in token registration order\n * @return bptAmountOut Expected amount of pool tokens to receive\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function queryAddLiquidityCustom(\n address pool,\n uint256[] memory maxAmountsIn,\n uint256 minBptAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove liquidity\n ***************************************************************************/\n\n /**\n * @notice Queries a `removeLiquidityProportional` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided for the query\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n */\n function queryRemoveLiquidityProportional(\n address pool,\n uint256 exactBptAmountIn,\n address sender,\n bytes memory userData\n ) external returns (uint256[] memory amountsOut);\n\n /**\n * @notice Queries a `removeLiquiditySingleTokenExactIn` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided for the query\n * @param tokenOut Token used to remove liquidity\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountOut Expected amount of tokens to receive\n */\n function queryRemoveLiquiditySingleTokenExactIn(\n address pool,\n uint256 exactBptAmountIn,\n IERC20 tokenOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 amountOut);\n\n /**\n * @notice Queries a `removeLiquiditySingleTokenExactOut` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenOut Token used to remove liquidity\n * @param exactAmountOut Expected exact amount of tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return bptAmountIn Expected amount of pool tokens to burn\n */\n function queryRemoveLiquiditySingleTokenExactOut(\n address pool,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 bptAmountIn);\n\n /**\n * @notice Queries a `removeLiquidityCustom` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param maxBptAmountIn Maximum amount of pool tokens provided\n * @param minAmountsOut Expected minimum amounts of tokens to receive, sorted in token registration order\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return bptAmountIn Expected amount of pool tokens to burn\n * @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function queryRemoveLiquidityCustom(\n address pool,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /**\n * @notice Queries a `removeLiquidityRecovery` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided for the query\n * @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n */\n function queryRemoveLiquidityRecovery(\n address pool,\n uint256 exactBptAmountIn\n ) external returns (uint256[] memory amountsOut);\n\n /***************************************************************************\n Swap\n ***************************************************************************/\n\n /**\n * @notice Queries a swap operation specifying an exact input token amount without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountIn Exact amounts of input tokens to send\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens\n */\n function querySwapSingleTokenExactIn(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountIn,\n address sender,\n bytes calldata userData\n ) external returns (uint256 amountOut);\n\n /**\n * @notice Queries a swap operation specifying an exact output token amount without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountOut Exact amounts of input tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens\n */\n function querySwapSingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n address sender,\n bytes calldata userData\n ) external returns (uint256 amountIn);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"../solidity-utils/helpers/IAuthentication.sol\";\nimport { IVaultExtension } from \"./IVaultExtension.sol\";\nimport { IVaultErrors } from \"./IVaultErrors.sol\";\nimport { IVaultEvents } from \"./IVaultEvents.sol\";\nimport { IVaultAdmin } from \"./IVaultAdmin.sol\";\nimport { IVaultMain } from \"./IVaultMain.sol\";\n\n/// @notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\ninterface IVault is IVaultMain, IVaultExtension, IVaultAdmin, IVaultErrors, IVaultEvents, IAuthentication {\n /// @return vault The main Vault address.\n function vault() external view override(IVaultAdmin, IVaultExtension) returns (IVault);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IVault } from \"./IVault.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultAdmin` contract.\n * @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n * as two delegate calls add gas to each call. Most of the permissioned calls are here.\n */\ninterface IVaultAdmin {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the Vault's pause window end time.\n * @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n * by governance. Balancer timestamps are 32 bits.\n *\n * @return pauseWindowEndTime The timestamp when the Vault's pause window ends\n */\n function getPauseWindowEndTime() external view returns (uint32 pauseWindowEndTime);\n\n /**\n * @notice Returns the Vault's buffer period duration.\n * @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n * This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodDuration The length of the buffer period in seconds\n */\n function getBufferPeriodDuration() external view returns (uint32 bufferPeriodDuration);\n\n /**\n * @notice Returns the Vault's buffer period end time.\n * @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused\n */\n function getBufferPeriodEndTime() external view returns (uint32 bufferPeriodEndTime);\n\n /**\n * @notice Get the minimum number of tokens in a pool.\n * @dev We expect the vast majority of pools to be 2-token.\n * @return minTokens The minimum token count of a pool\n */\n function getMinimumPoolTokens() external pure returns (uint256 minTokens);\n\n /**\n * @notice Get the maximum number of tokens in a pool.\n * @return maxTokens The maximum token count of a pool\n */\n function getMaximumPoolTokens() external pure returns (uint256 maxTokens);\n\n /**\n * @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n * @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n * is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n *\n * @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization\n */\n function getPoolMinimumTotalSupply() external pure returns (uint256 poolMinimumTotalSupply);\n\n /**\n * @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n * @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n * of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n * to the Vault, as buffers are not tokenized.\n *\n * @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization\n */\n function getBufferMinimumTotalSupply() external pure returns (uint256 bufferMinimumTotalSupply);\n\n /**\n * @notice Get the minimum trade amount in a pool operation.\n * @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n * @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number\n */\n function getMinimumTradeAmount() external view returns (uint256 minimumTradeAmount);\n\n /**\n * @notice Get the minimum wrap amount in a buffer operation.\n * @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n * @return minimumWrapAmount The minimum wrap amount in native underlying token decimals\n */\n function getMinimumWrapAmount() external view returns (uint256 minimumWrapAmount);\n\n /*******************************************************************************\n Vault Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault is paused.\n * @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n * ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n * also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n * `areBuffersPaused` to check the pause state of the buffers.\n *\n * @return vaultPaused True if the Vault is paused\n */\n function isVaultPaused() external view returns (bool vaultPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n * @dev Balancer timestamps are 32 bits.\n * @return vaultPaused True if the Vault is paused\n * @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n * @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period\n */\n function getVaultPausedState()\n external\n view\n returns (bool vaultPaused, uint32 vaultPauseWindowEndTime, uint32 vaultBufferPeriodEndTime);\n\n /**\n * @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n * @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n * Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n * the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n * are also paused (with `pauseVaultBuffers`).\n */\n function pauseVault() external;\n\n /**\n * @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n * deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n * `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\n */\n function unpauseVault() external;\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Pause the Pool: an emergency action which disables all pool functions.\n * @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n * deployment.\n *\n * @param pool The pool being paused\n */\n function pausePool(address pool) external;\n\n /**\n * @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n * deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n *\n * @param pool The pool being unpaused\n */\n function unpausePool(address pool) external;\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Assigns a new static swap fee percentage to the specified pool.\n * @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n * the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n * Emits the SwapFeePercentageChanged event.\n *\n * @param pool The address of the pool for which the static swap fee will be changed\n * @param swapFeePercentage The new swap fee percentage to apply to the pool\n */\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) external;\n\n /**\n * @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n * @dev Fees are sent to the ProtocolFeeController address.\n * @param pool The pool on which all aggregate fees should be collected\n * @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function collectAggregateFees(\n address pool\n ) external returns (uint256[] memory swapFeeAmounts, uint256[] memory yieldFeeAmounts);\n\n /**\n * @notice Update an aggregate swap fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateSwapFeePercentageChanged` event.\n *\n * @param pool The pool whose swap fee percentage will be updated\n * @param newAggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n function updateAggregateSwapFeePercentage(address pool, uint256 newAggregateSwapFeePercentage) external;\n\n /**\n * @notice Update an aggregate yield fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateYieldFeePercentageChanged` event.\n *\n * @param pool The pool whose yield fee percentage will be updated\n * @param newAggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n function updateAggregateYieldFeePercentage(address pool, uint256 newAggregateYieldFeePercentage) external;\n\n /**\n * @notice Sets a new Protocol Fee Controller for the Vault.\n * @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n * @param newProtocolFeeController The address of the new Protocol Fee Controller\n */\n function setProtocolFeeController(IProtocolFeeController newProtocolFeeController) external;\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Enable recovery mode for a pool.\n * @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n * Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n * must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n * balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n *\n * @param pool The address of the pool\n */\n function enableRecoveryMode(address pool) external;\n\n /**\n * @notice Disable recovery mode for a pool.\n * @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n * Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n * potentially fail if there is an issue with any associated Rate Providers.\n *\n * @param pool The address of the pool\n */\n function disableRecoveryMode(address pool) external;\n\n /*******************************************************************************\n Query Functionality\n *******************************************************************************/\n\n /**\n * @notice Disables query functionality on the Vault. Can only be called by governance.\n * @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n * settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n * queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n * This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n * disabling queries is completely necessary; queries can still be re-enabled after this call.\n */\n function disableQuery() external;\n\n /**\n * @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n * @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\n */\n function disableQueryPermanently() external;\n\n /**\n * @notice Enables query functionality on the Vault. Can only be called by governance.\n * @dev Only works if queries are not permanently disabled.\n */\n function enableQuery() external;\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault buffers are paused.\n * @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n * will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n * independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n * would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n *\n * @return buffersPaused True if the Vault buffers are paused\n */\n function areBuffersPaused() external view returns (bool buffersPaused);\n\n /**\n * @notice Pauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n * possible to pause vault buffers individually.\n *\n * This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n * and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n * buffers, and vice versa.\n */\n function pauseVaultBuffers() external;\n\n /**\n * @notice Unpauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n * If the Vault was also paused, it will remain in that state until explicitly unpaused.\n *\n * This is a permissioned call.\n */\n function unpauseVaultBuffers() external;\n\n /**\n * @notice Initializes buffer for the given wrapped token.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n * @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n * @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n * native decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n * (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\n */\n function initializeBuffer(\n IERC4626 wrappedToken,\n uint256 amountUnderlyingRaw,\n uint256 amountWrappedRaw,\n uint256 minIssuedShares,\n address sharesOwner\n ) external returns (uint256 issuedShares);\n\n /**\n * @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n * @dev The buffer needs to be initialized beforehand.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n * underlying token native decimals\n * @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n * token native decimals\n * @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n * in underlying token decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n * @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer\n */\n function addLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 maxAmountUnderlyingInRaw,\n uint256 maxAmountWrappedInRaw,\n uint256 exactSharesToIssue,\n address sharesOwner\n ) external returns (uint256 amountUnderlyingRaw, uint256 amountWrappedRaw);\n\n /**\n * @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n * @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n * This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n *\n * Pre-conditions:\n * - The buffer needs to be initialized.\n * - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n * this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n * - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n * total shares. It is expressed in underlying token native decimals\n * @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n * in underlying token native decimals\n * @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n * wrapped token native decimals\n * @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n * @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user\n */\n function removeLiquidityFromBuffer(\n IERC4626 wrappedToken,\n uint256 sharesToRemove,\n uint256 minAmountUnderlyingOutRaw,\n uint256 minAmountWrappedOutRaw\n ) external returns (uint256 removedUnderlyingBalanceRaw, uint256 removedWrappedBalanceRaw);\n\n /**\n * @notice Returns the asset registered for a given wrapped token.\n * @dev The asset can never change after buffer initialization.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n * has not been initialized.\n */\n function getBufferAsset(IERC4626 wrappedToken) external view returns (address underlyingToken);\n\n /**\n * @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n * in the buffer.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n * @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals\n */\n function getBufferOwnerShares(\n IERC4626 wrappedToken,\n address liquidityOwner\n ) external view returns (uint256 ownerShares);\n\n /**\n * @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals\n */\n function getBufferTotalShares(IERC4626 wrappedToken) external view returns (uint256 bufferShares);\n\n /**\n * @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n * @dev All values are in native token decimals of the wrapped or underlying tokens.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n * @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals\n */\n function getBufferBalance(\n IERC4626 wrappedToken\n ) external view returns (uint256 underlyingBalanceRaw, uint256 wrappedBalanceRaw);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Sets a new Authorizer for the Vault.\n * @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n * @param newAuthorizer The address of the new authorizer\n */\n function setAuthorizer(IAuthorizer newAuthorizer) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Errors are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultErrors {\n /*******************************************************************************\n Registration and Initialization\n *******************************************************************************/\n\n /**\n * @notice A pool has already been registered. `registerPool` may only be called once.\n * @param pool The already registered pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /**\n * @notice A pool has already been initialized. `initialize` may only be called once.\n * @param pool The already initialized pool\n */\n error PoolAlreadyInitialized(address pool);\n\n /**\n * @notice A pool has not been registered.\n * @param pool The unregistered pool\n */\n error PoolNotRegistered(address pool);\n\n /**\n * @notice A referenced pool has not been initialized.\n * @param pool The uninitialized pool\n */\n error PoolNotInitialized(address pool);\n\n /**\n * @notice A hook contract rejected a pool on registration.\n * @param poolHooksContract Address of the hook contract that rejected the pool registration\n * @param pool Address of the rejected pool\n * @param poolFactory Address of the pool factory\n */\n error HookRegistrationFailed(address poolHooksContract, address pool, address poolFactory);\n\n /**\n * @notice A token was already registered (i.e., it is a duplicate in the pool).\n * @param token The duplicate token\n */\n error TokenAlreadyRegistered(IERC20 token);\n\n /// @notice The token count is below the minimum allowed.\n error MinTokens();\n\n /// @notice The token count is above the maximum allowed.\n error MaxTokens();\n\n /// @notice Invalid tokens (e.g., zero) cannot be registered.\n error InvalidToken();\n\n /// @notice The token type given in a TokenConfig during pool registration is invalid.\n error InvalidTokenType();\n\n /// @notice The data in a TokenConfig struct is inconsistent or unsupported.\n error InvalidTokenConfiguration();\n\n /// @notice Tokens with more than 18 decimals are not supported.\n error InvalidTokenDecimals();\n\n /**\n * @notice The token list passed into an operation does not match the pool tokens in the pool.\n * @param pool Address of the pool\n * @param expectedToken The correct token at a given index in the pool\n * @param actualToken The actual token found at that index\n */\n error TokensMismatch(address pool, address expectedToken, address actualToken);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /// @notice A transient accounting operation completed with outstanding token deltas.\n error BalanceNotSettled();\n\n /// @notice A user called a Vault function (swap, add/remove liquidity) outside the lock context.\n error VaultIsNotUnlocked();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error DynamicSwapFeeHookFailed();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error BeforeSwapHookFailed();\n\n /// @notice The pool has returned false to the afterSwap hook, indicating the transaction should revert.\n error AfterSwapHookFailed();\n\n /// @notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\n error BeforeInitializeHookFailed();\n\n /// @notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\n error AfterInitializeHookFailed();\n\n /// @notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\n error BeforeAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\n error AfterAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\n error BeforeRemoveLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\n error AfterRemoveLiquidityHookFailed();\n\n /// @notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\n error RouterNotTrusted();\n\n /*******************************************************************************\n Swaps\n *******************************************************************************/\n\n /// @notice The user tried to swap zero tokens.\n error AmountGivenZero();\n\n /// @notice The user attempted to swap a token for itself.\n error CannotSwapSameToken();\n\n /**\n * @notice The user attempted to operate with a token that is not in the pool.\n * @param token The unregistered token\n */\n error TokenNotRegistered(IERC20 token);\n\n /**\n * @notice An amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error SwapLimit(uint256 amount, uint256 limit);\n\n /**\n * @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error HookAdjustedSwapLimit(uint256 amount, uint256 limit);\n\n /// @notice The amount given or calculated for an operation is below the minimum limit.\n error TradeAmountTooSmall();\n\n /*******************************************************************************\n Add Liquidity\n *******************************************************************************/\n\n /// @notice Add liquidity kind not supported.\n error InvalidAddLiquidityKind();\n\n /**\n * @notice A required amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error AmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error BptAmountOutBelowMin(uint256 amountOut, uint256 minAmountOut);\n\n /// @notice Pool does not support adding liquidity with a customized input.\n error DoesNotSupportAddLiquidityCustom();\n\n /// @notice Pool does not support adding liquidity through donation.\n error DoesNotSupportDonation();\n\n /*******************************************************************************\n Remove Liquidity\n *******************************************************************************/\n\n /// @notice Remove liquidity kind not supported.\n error InvalidRemoveLiquidityKind();\n\n /**\n * @notice The actual amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error AmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n * @param amountIn The total BPT amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error BptAmountInAboveMax(uint256 amountIn, uint256 maxAmountIn);\n\n /// @notice Pool does not support removing liquidity with a customized input.\n error DoesNotSupportRemoveLiquidityCustom();\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Error raised when there is an overflow in the fee calculation.\n * @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n * (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n * percentages in the Vault.\n */\n error ProtocolFeesExceedTotalCollected();\n\n /**\n * @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is below the minimum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooLow();\n\n /**\n * @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is above the maximum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooHigh();\n\n /**\n * @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n * @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n * precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n * corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n * Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n * the aggregate fee calculated here and that stored in the Vault.\n */\n error FeePrecisionTooHigh();\n\n /// @notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\n error PercentageAboveMax();\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /// @notice A user tried to execute a query operation when they were disabled.\n error QueriesDisabled();\n\n /// @notice An admin tried to re-enable queries, but they were disabled permanently.\n error QueriesDisabledPermanently();\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Cannot enable recovery mode when already enabled.\n * @param pool The pool\n */\n error PoolInRecoveryMode(address pool);\n\n /**\n * @notice Cannot disable recovery mode when not enabled.\n * @param pool The pool\n */\n error PoolNotInRecoveryMode(address pool);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n * @param sender The account attempting to call a permissioned function\n */\n error SenderIsNotVault(address sender);\n\n /*******************************************************************************\n Pausing\n *******************************************************************************/\n\n /// @notice The caller specified a pause window period longer than the maximum.\n error VaultPauseWindowDurationTooLarge();\n\n /// @notice The caller specified a buffer period longer than the maximum.\n error PauseBufferPeriodDurationTooLarge();\n\n /// @notice A user tried to perform an operation while the Vault was paused.\n error VaultPaused();\n\n /// @notice Governance tried to unpause the Vault when it was not paused.\n error VaultNotPaused();\n\n /// @notice Governance tried to pause the Vault after the pause period expired.\n error VaultPauseWindowExpired();\n\n /**\n * @notice A user tried to perform an operation involving a paused Pool.\n * @param pool The paused pool\n */\n error PoolPaused(address pool);\n\n /**\n * @notice Governance tried to unpause the Pool when it was not paused.\n * @param pool The unpaused pool\n */\n error PoolNotPaused(address pool);\n\n /**\n * @notice Governance tried to pause a Pool after the pause period expired.\n * @param pool The pool\n */\n error PoolPauseWindowExpired(address pool);\n\n /*******************************************************************************\n ERC4626 token buffers\n *******************************************************************************/\n\n /**\n * @notice The buffer for the given wrapped token was already initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferAlreadyInitialized(IERC4626 wrappedToken);\n\n /**\n * @notice The buffer for the given wrapped token was not initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferNotInitialized(IERC4626 wrappedToken);\n\n /// @notice The user is trying to remove more than their allocated shares from the buffer.\n error NotEnoughBufferShares();\n\n /**\n * @notice The wrapped token asset does not match the underlying token.\n * @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n * Legitimate wrapper contracts should make the asset a constant or immutable value.\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n * @param underlyingToken The underlying token returned by `asset`\n */\n error WrongUnderlyingToken(IERC4626 wrappedToken, address underlyingToken);\n\n /**\n * @notice A wrapped token reported the zero address as its underlying token asset.\n * @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n * re-initialize the buffer).\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error InvalidUnderlyingToken(IERC4626 wrappedToken);\n\n /**\n * @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error WrapAmountTooSmall(IERC4626 wrappedToken);\n\n /// @notice Buffer operation attempted while vault buffers are paused.\n error VaultBuffersArePaused();\n\n /// @notice Buffer shares were minted to the zero address.\n error BufferSharesInvalidReceiver();\n\n /// @notice Buffer shares were burned from the zero address.\n error BufferSharesInvalidOwner();\n\n /**\n * @notice The total supply of a buffer can't be lower than the absolute minimum.\n * @param totalSupply The total supply value that was below the minimum\n */\n error BufferTotalSupplyTooLow(uint256 totalSupply);\n\n /// @dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\n error NotEnoughUnderlying(IERC4626 wrappedToken, uint256 expectedUnderlyingAmount, uint256 actualUnderlyingAmount);\n\n /// @dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\n error NotEnoughWrapped(IERC4626 wrappedToken, uint256 expectedWrappedAmount, uint256 actualWrappedAmount);\n\n /// @dev Shares issued during initialization are below the requested amount.\n error IssuedSharesBelowMin(uint256 issuedShares, uint256 minIssuedShares);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /// @notice Pool does not support adding / removing liquidity with an unbalanced input.\n error DoesNotSupportUnbalancedLiquidity();\n\n /// @notice The contract should not receive ETH.\n error CannotReceiveEth();\n\n /**\n * @notice The `VaultExtension` contract was called by an account directly.\n * @dev It can only be called by the Vault via delegatecall.\n */\n error NotVaultDelegateCall();\n\n /// @notice The `VaultExtension` contract was configured with an incorrect Vault address.\n error WrongVaultExtensionDeployment();\n\n /// @notice The `ProtocolFeeController` contract was configured with an incorrect Vault address.\n error WrongProtocolFeeControllerDeployment();\n\n /// @notice The `VaultAdmin` contract was configured with an incorrect Vault address.\n error WrongVaultAdminDeployment();\n\n /// @notice Quote reverted with a reserved error code.\n error QuoteResultSpoofed();\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/// @dev Events are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultEvents {\n /**\n * @notice A Pool was registered by calling `registerPool`.\n * @param pool The pool being registered\n * @param factory The factory creating the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The static swap fee of the pool\n * @param pauseWindowEndTime The pool's pause window end time\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n * @param liquidityManagement Supported liquidity management hook flags\n */\n event PoolRegistered(\n address indexed pool,\n address indexed factory,\n TokenConfig[] tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n PoolRoleAccounts roleAccounts,\n HooksConfig hooksConfig,\n LiquidityManagement liquidityManagement\n );\n\n /**\n * @notice A Pool was initialized by calling `initialize`.\n * @param pool The pool being initialized\n */\n event PoolInitialized(address indexed pool);\n\n /**\n * @notice A swap has occurred.\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountIn Number of tokenIn tokens\n * @param amountOut Number of tokenOut tokens\n * @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n * @param swapFeeAmount Swap fee amount paid\n */\n event Swap(\n address indexed pool,\n IERC20 indexed tokenIn,\n IERC20 indexed tokenOut,\n uint256 amountIn,\n uint256 amountOut,\n uint256 swapFeePercentage,\n uint256 swapFeeAmount\n );\n\n /**\n * @notice A wrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param depositedUnderlying Number of underlying tokens deposited\n * @param mintedShares Number of shares (wrapped tokens) minted\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Wrap(\n IERC4626 indexed wrappedToken,\n uint256 depositedUnderlying,\n uint256 mintedShares,\n bytes32 bufferBalances\n );\n\n /**\n * @notice An unwrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param burnedShares Number of shares (wrapped tokens) burned\n * @param withdrawnUnderlying Number of underlying tokens withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Unwrap(\n IERC4626 indexed wrappedToken,\n uint256 burnedShares,\n uint256 withdrawnUnderlying,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Liquidity has been added to a pool (including initialization).\n * @param pool The pool with liquidity added\n * @param liquidityProvider The user performing the operation\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityAdded(\n address indexed pool,\n address indexed liquidityProvider,\n AddLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsAddedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice Liquidity has been removed from a pool.\n * @param pool The pool with liquidity removed\n * @param liquidityProvider The user performing the operation\n * @param kind The remove liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityRemoved(\n address indexed pool,\n address indexed liquidityProvider,\n RemoveLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsRemovedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice The Vault's pause status has changed.\n * @param paused True if the Vault was paused\n */\n event VaultPausedStateChanged(bool paused);\n\n /// @notice `disableQuery` has been called on the Vault, disabling query functionality.\n event VaultQueriesDisabled();\n\n /// @notice `enableQuery` has been called on the Vault, enabling query functionality.\n event VaultQueriesEnabled();\n\n /**\n * @notice A Pool's pause status has changed.\n * @param pool The pool that was just paused or unpaused\n * @param paused True if the pool was paused\n */\n event PoolPausedStateChanged(address indexed pool, bool paused);\n\n /**\n * @notice Emitted when the swap fee percentage of a pool is updated.\n * @param swapFeePercentage The new swap fee percentage for the pool\n */\n event SwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Recovery mode has been enabled or disabled for a pool.\n * @param pool The pool\n * @param recoveryMode True if recovery mode was enabled\n */\n event PoolRecoveryModeStateChanged(address indexed pool, bool recoveryMode);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate swap fee percentage changed\n * @param aggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n event AggregateSwapFeePercentageChanged(address indexed pool, uint256 aggregateSwapFeePercentage);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate yield fee percentage changed\n * @param aggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n event AggregateYieldFeePercentageChanged(address indexed pool, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice A new authorizer is set by `setAuthorizer`.\n * @param newAuthorizer The address of the new authorizer\n */\n event AuthorizerChanged(IAuthorizer indexed newAuthorizer);\n\n /**\n * @notice A new protocol fee controller is set by `setProtocolFeeController`.\n * @param newProtocolFeeController The address of the new protocol fee controller\n */\n event ProtocolFeeControllerChanged(IProtocolFeeController indexed newProtocolFeeController);\n\n /**\n * @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was deposited\n * @param amountWrapped The amount of the wrapped token that was deposited\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityAddedToBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param to The owner of the minted shares\n * @param issuedShares The amount of \"internal BPT\" shares created\n */\n event BufferSharesMinted(IERC4626 indexed wrappedToken, address indexed to, uint256 issuedShares);\n\n /**\n * @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param from The owner of the burned shares\n * @param burnedShares The amount of \"internal BPT\" shares burned\n */\n event BufferSharesBurned(IERC4626 indexed wrappedToken, address indexed from, uint256 burnedShares);\n\n /**\n * @notice Liquidity was removed from an ERC4626 buffer.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was withdrawn\n * @param amountWrapped The amount of the wrapped token that was withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityRemovedFromBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice The Vault buffers pause status has changed.\n * @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n * set to true) will revert.\n *\n * @param paused True if the Vault buffers were paused\n */\n event VaultBuffersPausedStateChanged(bool paused);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param pool Pool address\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n event VaultAuxiliary(address indexed pool, bytes32 indexed eventKey, bytes eventData);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IVault } from \"./IVault.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultExtension` contract.\n * @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n * the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n * liquidity operations.\n */\ninterface IVaultExtension {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the VaultAdmin contract address.\n * @dev The VaultAdmin contract mostly implements permissioned functions.\n * @return vaultAdmin The address of the Vault admin\n */\n function getVaultAdmin() external view returns (address vaultAdmin);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n * @dev The Vault must be unlocked to perform state-changing liquidity operations.\n * @return unlocked True if the Vault is unlocked, false otherwise\n */\n function isUnlocked() external view returns (bool unlocked);\n\n /**\n * @notice Returns the count of non-zero deltas.\n * @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`\n */\n function getNonzeroDeltaCount() external view returns (uint256 nonzeroDeltaCount);\n\n /**\n * @notice Retrieves the token delta for a specific token.\n * @dev This function allows reading the value from the `_tokenDeltas` mapping.\n * @param token The token for which the delta is being fetched\n * @return tokenDelta The delta of the specified token\n */\n function getTokenDelta(IERC20 token) external view returns (int256 tokenDelta);\n\n /**\n * @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n * @param token The token for which to retrieve the reserve\n * @return reserveAmount The amount of reserves for the given token\n */\n function getReservesOf(IERC20 token) external view returns (uint256 reserveAmount);\n\n /**\n * @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n * same pool).\n * @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n * layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n * is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n * It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n * than a simple swap for every pool type.\n *\n * @param pool Address of the pool to check\n * @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n \n * Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\n */\n function getAddLiquidityCalledFlag(address pool) external view returns (bool liquidityAdded);\n\n /*******************************************************************************\n Pool Registration\n *******************************************************************************/\n\n /**\n * @notice Registers a pool, associating it with its factory and the tokens it manages.\n * @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n * by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n * additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n * pool will automatically unpause. Balancer timestamps are 32 bits.\n *\n * A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n * multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n * the Vault.\n *\n * If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n * authorizer.\n *\n * @param pool The address of the pool being registered\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The initial static swap fee percentage of the pool\n * @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n * @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param poolHooksContract Contract that implements the hooks for the pool\n * @param liquidityManagement Liquidity management flags with implemented methods\n */\n function registerPool(\n address pool,\n TokenConfig[] memory tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n bool protocolFeeExempt,\n PoolRoleAccounts calldata roleAccounts,\n address poolHooksContract,\n LiquidityManagement calldata liquidityManagement\n ) external;\n\n /**\n * @notice Checks whether a pool is registered.\n * @param pool Address of the pool to check\n * @return registered True if the pool is registered, false otherwise\n */\n function isPoolRegistered(address pool) external view returns (bool registered);\n\n /**\n * @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n * @param pool Address of the pool to initialize\n * @param to Address that will receive the output BPT\n * @param tokens Tokens used to seed the pool (must match the registered tokens)\n * @param exactAmountsIn Exact amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param userData Additional (optional) data required for adding initial liquidity\n * @return bptAmountOut Output pool token amount\n */\n function initialize(\n address pool,\n address to,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bytes memory userData\n ) external returns (uint256 bptAmountOut);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is initialized.\n * @dev An initialized pool can be considered registered as well.\n * @param pool Address of the pool to check\n * @return initialized True if the pool is initialized, false otherwise\n */\n function isPoolInitialized(address pool) external view returns (bool initialized);\n\n /**\n * @notice Gets the tokens registered to a pool.\n * @param pool Address of the pool\n * @return tokens List of tokens in the pool\n */\n function getPoolTokens(address pool) external view returns (IERC20[] memory tokens);\n\n /**\n * @notice Gets pool token rates.\n * @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n * registration order.\n *\n * @param pool Address of the pool\n * @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. FP(1) for 18-decimal tokens\n * @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n */\n function getPoolTokenRates(\n address pool\n ) external view returns (uint256[] memory decimalScalingFactors, uint256[] memory tokenRates);\n\n /**\n * @notice Returns comprehensive pool data for the given pool.\n * @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n * @param pool The address of the pool\n * @return poolData The `PoolData` result\n */\n function getPoolData(address pool) external view returns (PoolData memory poolData);\n\n /**\n * @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n * @param pool Address of the pool\n * @return tokens The pool tokens, sorted in registration order\n * @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n * @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n * @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order\n */\n function getPoolTokenInfo(\n address pool\n )\n external\n view\n returns (\n IERC20[] memory tokens,\n TokenInfo[] memory tokenInfo,\n uint256[] memory balancesRaw,\n uint256[] memory lastBalancesLiveScaled18\n );\n\n /**\n * @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n * registration order.\n *\n * @param pool Address of the pool\n * @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n */\n function getCurrentLiveBalances(address pool) external view returns (uint256[] memory balancesLiveScaled18);\n\n /**\n * @notice Gets the configuration parameters of a pool.\n * @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n * @param pool Address of the pool\n * @return poolConfig The pool configuration as a `PoolConfig` struct\n */\n function getPoolConfig(address pool) external view returns (PoolConfig memory poolConfig);\n\n /**\n * @notice Gets the hooks configuration parameters of a pool.\n * @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n * @param pool Address of the pool\n * @return hooksConfig The hooks configuration as a `HooksConfig` struct\n */\n function getHooksConfig(address pool) external view returns (HooksConfig memory hooksConfig);\n\n /**\n * @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n * @param pool Address of the pool\n * @return rate BPT rate\n */\n function getBptRate(address pool) external view returns (uint256 rate);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Gets the total supply of a given ERC20 token.\n * @param token The token address\n * @return tokenTotalSupply Total supply of the token\n */\n function totalSupply(address token) external view returns (uint256 tokenTotalSupply);\n\n /**\n * @notice Gets the balance of an account for a given ERC20 token.\n * @param token Address of the token\n * @param account Address of the account\n * @return tokenBalance Token balance of the account\n */\n function balanceOf(address token, address account) external view returns (uint256 tokenBalance);\n\n /**\n * @notice Gets the allowance of a spender for a given ERC20 token and owner.\n * @param token Address of the token\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @return tokenAllowance Amount of tokens the spender is allowed to spend\n */\n function allowance(address token, address owner, address spender) external view returns (uint256 tokenAllowance);\n\n /**\n * @notice Approves a spender to spend pool tokens on behalf of sender.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @param amount Amount of tokens to approve\n * @return success True if successful, false otherwise\n */\n function approve(address owner, address spender, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether a pool is paused.\n * @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n * @param pool The pool to be checked\n * @return poolPaused True if the pool is paused\n */\n function isPoolPaused(address pool) external view returns (bool poolPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n * @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n * the buffer period. Balancer timestamps are 32 bits.\n *\n * @param pool The pool whose data is requested\n * @return poolPaused True if the Pool is paused\n * @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n * @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n * @return pauseManager The pause manager, or the zero address\n */\n function getPoolPausedState(\n address pool\n )\n external\n view\n returns (bool poolPaused, uint32 poolPauseWindowEndTime, uint32 poolBufferPeriodEndTime, address pauseManager);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Checks if the wrapped token has an initialized buffer in the Vault.\n * @dev An initialized buffer should have an asset registered in the Vault.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return isBufferInitialized True if the ERC4626 buffer is initialized\n */\n function isERC4626BufferInitialized(IERC4626 wrappedToken) external view returns (bool isBufferInitialized);\n\n /**\n * @notice Gets the registered asset for a given buffer.\n * @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n * should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n * the Vault on initialization.\n *\n * @param wrappedToken The wrapped token specifying the buffer\n * @return asset The underlying asset of the wrapped token\n */\n function getERC4626BufferAsset(IERC4626 wrappedToken) external view returns (address asset);\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return swapFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateSwapFeeAmount(address pool, IERC20 token) external view returns (uint256 swapFeeAmount);\n\n /**\n * @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return yieldFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateYieldFeeAmount(address pool, IERC20 token) external view returns (uint256 yieldFeeAmount);\n\n /**\n * @notice Fetches the static swap fee percentage for a given pool.\n * @param pool The address of the pool whose static swap fee percentage is being queried\n * @return swapFeePercentage The current static swap fee percentage for the specified pool\n */\n function getStaticSwapFeePercentage(address pool) external view returns (uint256 swapFeePercentage);\n\n /**\n * @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n * @param pool The address of the pool whose roles are being queried\n * @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)\n */\n function getPoolRoleAccounts(address pool) external view returns (PoolRoleAccounts memory roleAccounts);\n\n /**\n * @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n * @dev Reverts if the hook doesn't return the success flag set to `true`.\n * @param pool The pool\n * @param swapParams The swap parameters used to compute the fee\n * @return dynamicSwapFeePercentage The dynamic swap fee percentage\n */\n function computeDynamicSwapFeePercentage(\n address pool,\n PoolSwapParams memory swapParams\n ) external view returns (uint256 dynamicSwapFeePercentage);\n\n /**\n * @notice Returns the Protocol Fee Controller address.\n * @return protocolFeeController Address of the ProtocolFeeController\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController);\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is in Recovery Mode.\n * @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n * @param pool Address of the pool to check\n * @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise\n */\n function isPoolInRecoveryMode(address pool) external view returns (bool inRecoveryMode);\n\n /**\n * @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n * The request is implemented by the Vault without any interaction with the pool, ensuring that\n * it works the same for all pools, and cannot be disabled by a new pool type.\n *\n * @param pool Address of the pool\n * @param from Address of user to burn pool tokens from\n * @param exactBptAmountIn Input pool token amount\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order\n */\n function removeLiquidityRecovery(\n address pool,\n address from,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external returns (uint256[] memory amountsOut);\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function quote(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * This call always reverts, returning the result in the revert reason.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n */\n function quoteAndRevert(bytes calldata data) external;\n\n /**\n * @notice Returns true if queries are disabled on the Vault.\n * @dev If true, queries might either be disabled temporarily or permanently.\n * @return queryDisabled True if query functionality is reversibly disabled\n */\n function isQueryDisabled() external view returns (bool queryDisabled);\n\n /**\n * @notice Returns true if queries are disabled permanently; false if they are enabled.\n * @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n * @return queryDisabledPermanently True if query functionality is permanently disabled\n */\n function isQueryDisabledPermanently() external view returns (bool queryDisabledPermanently);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n function emitAuxiliaryEvent(bytes32 eventKey, bytes calldata eventData) external;\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Returns the Authorizer address.\n * @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n * and can be changed through a permissioned call.\n *\n * @return authorizer Address of the authorizer contract\n */\n function getAuthorizer() external view returns (IAuthorizer authorizer);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the main Vault contract.\n * @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n * for technical or performance reasons.\n */\ninterface IVaultMain {\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n * @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n * meaning all balances for the caller have to be settled at the end.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function unlock(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Settles deltas for a token; must be successful for the current lock to be released.\n * @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n * should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n * excess in the Vault balance.\n *\n * If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n * credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n *\n * If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n * In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n * not affect settlement.\n *\n * The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n * difference equals current balance of the token minus existing reserves of the token when the function is called.\n *\n * @param token Address of the token\n * @param amountHint Amount paid as reported by the caller\n * @return credit Credit received in return of the payment\n */\n function settle(IERC20 token, uint256 amountHint) external returns (uint256 credit);\n\n /**\n * @notice Sends tokens to a recipient.\n * @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n * debts.\n *\n * @param token Address of the token\n * @param to Recipient address\n * @param amount Amount of tokens to send\n */\n function sendTo(IERC20 token, address to, uint256 amount) external;\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Swaps tokens based on provided parameters.\n * @dev All parameters are given in raw token decimal encoding.\n * @param vaultSwapParams Parameters for the swap (see above for struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function swap(\n VaultSwapParams memory vaultSwapParams\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Adds liquidity to a pool.\n * @dev Caution should be exercised when adding liquidity because the Vault has the capability\n * to transfer tokens from any user, given that it holds all allowances.\n *\n * @param params Parameters for the add liquidity (see above for struct definition)\n * @return amountsIn Actual amounts of input tokens\n * @return bptAmountOut Output pool token amount\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function addLiquidity(\n AddLiquidityParams memory params\n ) external returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Removes liquidity from a pool.\n * @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n * Untrusted routers require prior approval from the user. This is the only function allowed to call\n * _queryModeBalanceIncrease (and only in a query context).\n *\n * @param params Parameters for the remove liquidity (see above for struct definition)\n * @return bptAmountIn Actual amount of BPT burned\n * @return amountsOut Actual amounts of output tokens\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function removeLiquidity(\n RemoveLiquidityParams memory params\n ) external returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Gets the index of a token in a given pool.\n * @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n * @param pool Address of the pool\n * @param token Address of the token\n * @return tokenCount Number of tokens in the pool\n * @return index Index corresponding to the given token in the pool's token list\n */\n function getPoolTokenCountAndIndexOfToken(\n address pool,\n IERC20 token\n ) external view returns (uint256 tokenCount, uint256 index);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Transfers pool token from owner to a recipient.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transfer(address owner, address to, uint256 amount) external returns (bool);\n\n /**\n * @notice Transfers pool token from a sender to a recipient using an allowance.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param spender Address allowed to perform the transfer\n * @param from Address of the sender\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transferFrom(address spender, address from, address to, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Wraps/unwraps tokens based on the parameters provided.\n * @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n * and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n *\n * @param params Parameters for the wrap/unwrap operation (see struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function erc4626BufferWrapOrUnwrap(\n BufferWrapOrUnwrapParams memory params\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /**\n * @notice Returns the VaultExtension contract address.\n * @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n * functions, since delegate calls through the Vault are more expensive than direct calls.\n *\n * @return vaultExtension Address of the VaultExtension\n */\n function getVaultExtension() external view returns (address vaultExtension);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IRateProvider } from \"../solidity-utils/helpers/IRateProvider.sol\";\n\n/**\n * @notice Represents a pool's liquidity management configuration.\n * @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n * @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n * @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n * @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION\n */\nstruct LiquidityManagement {\n bool disableUnbalancedLiquidity;\n bool enableAddLiquidityCustom;\n bool enableRemoveLiquidityCustom;\n bool enableDonation;\n}\n\n// @notice Custom type to store the entire configuration of the pool.\ntype PoolConfigBits is bytes32;\n\n/**\n * @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n * @param liquidityManagement Flags related to adding/removing liquidity\n * @param staticSwapFeePercentage The pool's native swap fee\n * @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n * @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n * @param isPoolRegistered If true, the pool has been registered with the Vault\n * @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n * @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n * @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals\n */\nstruct PoolConfig {\n LiquidityManagement liquidityManagement;\n uint256 staticSwapFeePercentage;\n uint256 aggregateSwapFeePercentage;\n uint256 aggregateYieldFeePercentage;\n uint40 tokenDecimalDiffs;\n uint32 pauseWindowEndTime;\n bool isPoolRegistered;\n bool isPoolInitialized;\n bool isPoolPaused;\n bool isPoolInRecoveryMode;\n}\n\n/**\n * @notice The flag portion of the `HooksConfig`.\n * @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n * in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n * flags to true will cause the Vault to call the corresponding hook during operations.\n */\nstruct HookFlags {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n}\n\n/// @notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address).\nstruct HooksConfig {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n address hooksContract;\n}\n\n/**\n * @notice Represents temporary state used during a swap operation.\n * @param indexIn The zero-based index of tokenIn\n * @param indexOut The zero-based index of tokenOut\n * @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n * @param swapFeePercentage The swap fee to be applied (might be static or dynamic)\n */\nstruct SwapState {\n uint256 indexIn;\n uint256 indexOut;\n uint256 amountGivenScaled18;\n uint256 swapFeePercentage;\n}\n\n/**\n * @notice Represents the Vault's configuration.\n * @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n * @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n * @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled\n */\nstruct VaultState {\n bool isQueryDisabled;\n bool isVaultPaused;\n bool areBuffersPaused;\n}\n\n/**\n * @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n * @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n * @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n * @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)\n */\nstruct PoolRoleAccounts {\n address pauseManager;\n address swapFeeManager;\n address poolCreator;\n}\n\n/*******************************************************************************\n Tokens\n*******************************************************************************/\n\n// Note that the following tokens are unsupported by the Vault. This list is not meant to be exhaustive, but covers\n// many common types of tokens that will not work with the Vault architecture. (See https://github.com/d-xo/weird-erc20\n// for examples of token features that are problematic for many protocols.)\n//\n// * Rebasing tokens (e.g., aDAI). The Vault keeps track of token balances in its internal accounting; any token whose\n// balance changes asynchronously (i.e., outside a swap or liquidity operation), would get out-of-sync with this\n// internal accounting. This category would also include \"airdrop\" tokens, whose balances can change unexpectedly.\n//\n// * Double entrypoint (e.g., old Synthetix tokens, now fixed). These could likewise bypass internal accounting by\n// registering the token under one address, then accessing it through another. This is especially troublesome\n// in v3, with the introduction of ERC4626 buffers.\n//\n// * Fee on transfer (e.g., PAXG). The Vault issues credits and debits according to given and calculated token amounts,\n// and settlement assumes that the send/receive transfer functions transfer exactly the given number of tokens.\n// If this is not the case, transactions will not settle. Unlike with the other types, which are fundamentally\n// incompatible, it would be possible to design a Router to handle this - but we didn't try it. In any case, it's\n// not supported in the current Routers.\n//\n// * Tokens with more than 18 decimals (e.g., YAM-V2). The Vault handles token scaling: i.e., handling I/O for\n// amounts in native token decimals, but doing calculations with full 18-decimal precision. This requires reading\n// and storing the decimals for each token. Since virtually all tokens are 18 or fewer decimals, and we have limited\n// storage space, 18 was a reasonable maximum. Unlike the other types, this is enforceable by the Vault. Attempting\n// to register such tokens will revert with `InvalidTokenDecimals`. Of course, we must also be able to read the token\n// decimals, so the Vault only supports tokens that implement `IERC20Metadata.decimals`, and return a value less than\n// or equal to 18.\n//\n// * Token decimals are checked and stored only once, on registration. Valid tokens store their decimals as immutable\n// variables or constants. Malicious tokens that don't respect this basic property would not work anywhere in DeFi.\n//\n// These types of tokens are supported but discouraged, as they don't tend to play well with AMMs generally.\n//\n// * Very low-decimal tokens (e.g., GUSD). The Vault has been extensively tested with 6-decimal tokens (e.g., USDC),\n// but going much below that may lead to unanticipated effects due to precision loss, especially with smaller trade\n// values.\n//\n// * Revert on zero value approval/transfer. The Vault has been tested against these, but peripheral contracts, such\n// as hooks, might not have been designed with this in mind.\n//\n// * Other types from \"weird-erc20,\" such as upgradeable, pausable, or tokens with blocklists. We have seen cases\n// where a token upgrade fails, \"bricking\" the token - and many operations on pools containing that token. Any\n// sort of \"permissioned\" token that can make transfers fail can cause operations on pools containing them to\n// revert. Even Recovery Mode cannot help then, as it does a proportional withdrawal of all tokens. If one of\n// them is bricked, the whole operation will revert. Since v3 does not have \"internal balances\" like v2, there\n// is no recourse.\n//\n// Of course, many tokens in common use have some of these \"features\" (especially centralized stable coins), so\n// we have to support them anyway. Working with common centralized tokens is a risk common to all of DeFi.\n\n/**\n * @notice Token types supported by the Vault.\n * @dev In general, pools may contain any combination of these tokens.\n *\n * STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n * WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n * because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n * tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n * yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n * in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n * not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n * yield fees are charged elsewhere).\n *\n * NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard.\n */\nenum TokenType {\n STANDARD,\n WITH_RATE\n}\n\n/**\n * @notice Encapsulate the data required for the Vault to support a token of the given type.\n * @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n * need a rate provider, and may or may not be yield-bearing.\n *\n * At registration time, it is useful to include the token address along with the token parameters in the structure\n * passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n * validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n *\n * @param token The token address\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenConfig {\n IERC20 token;\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n * @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n * it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n *\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenInfo {\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice Data structure used to represent the current pool state in memory\n * @param poolConfigBits Custom type to store the entire configuration of the pool.\n * @param tokens Pool tokens, sorted in token registration order\n * @param tokenInfo Configuration data for each token, sorted in token registration order\n * @param balancesRaw Token balances in native decimals\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n * @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. It is 1e18 (FP 1) for 18-decimal tokens\n */\nstruct PoolData {\n PoolConfigBits poolConfigBits;\n IERC20[] tokens;\n TokenInfo[] tokenInfo;\n uint256[] balancesRaw;\n uint256[] balancesLiveScaled18;\n uint256[] tokenRates;\n uint256[] decimalScalingFactors;\n}\n\nenum Rounding {\n ROUND_UP,\n ROUND_DOWN\n}\n\n/*******************************************************************************\n Swaps\n*******************************************************************************/\n\nenum SwapKind {\n EXACT_IN,\n EXACT_OUT\n}\n\n// There are two \"SwapParams\" structs defined below. `VaultSwapParams` corresponds to the external swap API defined\n// in the Router contracts, which uses explicit token addresses, the amount given and limit on the calculated amount\n// expressed in native token decimals, and optional user data passed in from the caller.\n//\n// `PoolSwapParams` passes some of this information through (kind, userData), but \"translates\" the parameters to fit\n// the internal swap API used by `IBasePool`. It scales amounts to full 18-decimal precision, adds the token balances,\n// converts the raw token addresses to indices, and adds the address of the Router originating the request. It does\n// not need the limit, since this is checked at the Router level.\n\n/**\n * @notice Data passed into primary Vault `swap` operations.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n * @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n * @param userData Additional (optional) user data\n */\nstruct VaultSwapParams {\n SwapKind kind;\n address pool;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n bytes userData;\n}\n\n/**\n * @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n * @param kind Type of swap (exact in or exact out)\n * @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n * @param balancesScaled18 Current pool balances\n * @param indexIn Index of tokenIn\n * @param indexOut Index of tokenOut\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param userData Additional (optional) data required for the swap\n */\nstruct PoolSwapParams {\n SwapKind kind;\n uint256 amountGivenScaled18;\n uint256[] balancesScaled18;\n uint256 indexIn;\n uint256 indexOut;\n address router;\n bytes userData;\n}\n\n/**\n * @notice Data for the hook after a swap operation.\n * @param kind Type of swap (exact in or exact out)\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param amountInScaled18 Amount of tokenIn (entering the Vault)\n * @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n * @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n * @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n * @param amountCalculatedScaled18 Token amount calculated by the swap\n * @param amountCalculatedRaw Token amount calculated by the swap\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param pool Pool address\n * @param userData Additional (optional) data required for the swap\n */\nstruct AfterSwapParams {\n SwapKind kind;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountInScaled18;\n uint256 amountOutScaled18;\n uint256 tokenInBalanceScaled18;\n uint256 tokenOutBalanceScaled18;\n uint256 amountCalculatedScaled18;\n uint256 amountCalculatedRaw;\n address router;\n address pool;\n bytes userData;\n}\n\n/*******************************************************************************\n Add liquidity\n*******************************************************************************/\n\nenum AddLiquidityKind {\n PROPORTIONAL,\n UNBALANCED,\n SINGLE_TOKEN_EXACT_OUT,\n DONATION,\n CUSTOM\n}\n\n/**\n * @notice Data for an add liquidity operation.\n * @param pool Address of the pool\n * @param to Address of user to mint to\n * @param maxAmountsIn Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param kind Add liquidity kind\n * @param userData Optional user data\n */\nstruct AddLiquidityParams {\n address pool;\n address to;\n uint256[] maxAmountsIn;\n uint256 minBptAmountOut;\n AddLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum RemoveLiquidityKind {\n PROPORTIONAL,\n SINGLE_TOKEN_EXACT_IN,\n SINGLE_TOKEN_EXACT_OUT,\n CUSTOM\n}\n\n/**\n * @notice Data for an remove liquidity operation.\n * @param pool Address of the pool\n * @param from Address of user to burn from\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOut Minimum amounts of output tokens\n * @param kind Remove liquidity kind\n * @param userData Optional user data\n */\nstruct RemoveLiquidityParams {\n address pool;\n address from;\n uint256 maxBptAmountIn;\n uint256[] minAmountsOut;\n RemoveLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum WrappingDirection {\n WRAP,\n UNWRAP\n}\n\n/**\n * @notice Data for a wrap/unwrap operation.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param direction Direction of the wrapping operation (Wrap or Unwrap)\n * @param wrappedToken Wrapped token, compatible with interface ERC4626\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n * @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n * direction)\n */\nstruct BufferWrapOrUnwrapParams {\n SwapKind kind;\n WrappingDirection direction;\n IERC4626 wrappedToken;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n}\n\n// Protocol Fees are 24-bit values. We transform them by multiplying by 1e11, so that they can be set to any value\n// between 0% and 100% (step 0.00001%). Protocol and pool creator fees are set in the `ProtocolFeeController`, and\n// ensure both constituent and aggregate fees do not exceed this precision.\nuint256 constant FEE_BITLENGTH = 24;\nuint256 constant FEE_SCALING_FACTOR = 1e11;\n// Used to ensure the safety of fee-related math (e.g., pools or hooks don't set it greater than 100%).\n// This value should work for practical purposes and is well within the max precision requirements.\nuint256 constant MAX_FEE_PERCENTAGE = 99.9999e16; // 99.9999%\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @notice Building block for performing access control on external functions.\n * @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n * applied to external functions to make them only callable by authorized accounts.\n *\n * Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\n */\nabstract contract Authentication is IAuthentication {\n bytes32 private immutable _actionIdDisambiguator;\n\n /**\n * @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n * multi-contract systems.\n *\n * There are two main uses for it:\n * - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n * unique. The contract's own address is a good option.\n * - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n * shared by the entire family (and no other contract) should be used instead.\n */\n constructor(bytes32 actionIdDisambiguator) {\n _actionIdDisambiguator = actionIdDisambiguator;\n }\n\n /// @dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions.\n modifier authenticate() {\n _authenticateCaller();\n _;\n }\n\n /// @dev Reverts unless the caller is allowed to call the entry point function.\n function _authenticateCaller() internal view {\n bytes32 actionId = getActionId(msg.sig);\n\n if (!_canPerform(actionId, msg.sender)) {\n revert SenderNotAllowed();\n }\n }\n\n /// @inheritdoc IAuthentication\n function getActionId(bytes4 selector) public view override returns (bytes32) {\n // Each external function is dynamically assigned an action identifier as the hash of the disambiguator and the\n // function selector. Disambiguation is necessary to avoid potential collisions in the function selectors of\n // multiple contracts.\n return keccak256(abi.encodePacked(_actionIdDisambiguator, selector));\n }\n\n /**\n * @dev Derived contracts must implement this function to perform the actual access control logic.\n * @param actionId The action identifier associated with an external function\n * @param user The account performing the action\n * @return success True if the action is permitted\n */\n function _canPerform(bytes32 actionId, address user) internal view virtual returns (bool);\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Library of helper functions related to typecasting arrays.\nlibrary CastingHelpers {\n /// @dev Returns a native array of addresses as an IERC20[] array.\n function asIERC20(address[] memory addresses) internal pure returns (IERC20[] memory tokens) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n tokens := addresses\n }\n }\n\n /// @dev Returns an IERC20[] array as an address[] array.\n function asAddress(IERC20[] memory tokens) internal pure returns (address[] memory addresses) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n addresses := tokens\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { CastingHelpers } from \"./CastingHelpers.sol\";\n\nlibrary InputHelpers {\n /// @notice Arrays passed to a function and intended to be parallel have different lengths.\n error InputLengthMismatch();\n\n /**\n * @notice More than one non-zero value was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n * corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\n */\n error MultipleNonZeroInputs();\n\n /**\n * @notice No valid input was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n * corresponding to the token being added or removed. This error results if all entries are zero.\n */\n error AllZeroInputs();\n\n /**\n * @notice The tokens supplied to an array argument were not sorted in numerical order.\n * @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n * predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\n */\n error TokensNotSorted();\n\n function ensureInputLengthMatch(uint256 a, uint256 b) internal pure {\n if (a != b) {\n revert InputLengthMismatch();\n }\n }\n\n function ensureInputLengthMatch(uint256 a, uint256 b, uint256 c) internal pure {\n if (a != b || b != c) {\n revert InputLengthMismatch();\n }\n }\n\n // Find the single non-zero input; revert if there is not exactly one such value.\n function getSingleInputIndex(uint256[] memory maxAmountsIn) internal pure returns (uint256 inputIndex) {\n uint256 length = maxAmountsIn.length;\n inputIndex = length;\n\n for (uint256 i = 0; i < length; ++i) {\n if (maxAmountsIn[i] != 0) {\n if (inputIndex != length) {\n revert MultipleNonZeroInputs();\n }\n inputIndex = i;\n }\n }\n\n if (inputIndex >= length) {\n revert AllZeroInputs();\n }\n\n return inputIndex;\n }\n\n /**\n * @dev Sort an array of tokens, mutating in place (and also returning them).\n * This assumes the tokens have been (or will be) validated elsewhere for length\n * and non-duplication. All this does is the sorting.\n *\n * A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n * Could have also done \"manual\" comparisons for each of the cases, but this is\n * about the same number of operations, and more concise.\n *\n * This is less efficient for larger token count (i.e., above 4), but such pools should\n * be rare. And in any case, sorting is only done on-chain in test code.\n */\n function sortTokens(IERC20[] memory tokens) internal pure returns (IERC20[] memory) {\n for (uint256 i = 0; i < tokens.length - 1; ++i) {\n for (uint256 j = 0; j < tokens.length - i - 1; ++j) {\n if (tokens[j] > tokens[j + 1]) {\n // Swap if they're out of order.\n (tokens[j], tokens[j + 1]) = (tokens[j + 1], tokens[j]);\n }\n }\n }\n\n return tokens;\n }\n\n /// @dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness.\n function ensureSortedTokens(IERC20[] memory tokens) internal pure {\n if (tokens.length < 2) {\n return;\n }\n\n IERC20 previous = tokens[0];\n\n for (uint256 i = 1; i < tokens.length; ++i) {\n IERC20 current = tokens[i];\n\n if (previous > current) {\n revert TokensNotSorted();\n }\n\n previous = current;\n }\n }\n\n /// @dev Ensure an array of amounts is sorted. As above, does not validate length or uniqueness.\n function ensureSortedAmounts(uint256[] memory amounts) internal pure {\n if (amounts.length < 2) {\n return;\n }\n\n uint256 previous = amounts[0];\n\n for (uint256 i = 1; i < amounts.length; ++i) {\n uint256 current = amounts[i];\n\n if (previous > current) {\n revert TokensNotSorted();\n }\n\n previous = current;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice This library represents a data structure for packing a token's current raw and derived balances. A derived\n * balance can be the \"last\" live balance scaled18 of the raw token, or the balance of the wrapped version of the\n * token in a vault buffer, among others.\n *\n * @dev We could use a Solidity struct to pack balance values together in a single storage slot, but unfortunately\n * Solidity only allows for structs to live in either storage, calldata or memory. Because a memory struct still takes\n * up a slot in the stack (to store its memory location), and because the entire balance fits in a single stack slot\n * (two 128 bit values), using memory is strictly less gas performant. Therefore, we do manual packing and unpacking.\n *\n * We could also use custom types now, but given the simplicity here, and the existing EnumerableMap type, it seemed\n * easier to leave it as a bytes32.\n */\nlibrary PackedTokenBalance {\n // The 'rawBalance' portion of the balance is stored in the least significant 128 bits of a 256 bit word, while the\n // The 'derivedBalance' part uses the remaining 128 bits.\n uint256 private constant _MAX_BALANCE = 2 ** (128) - 1;\n\n /// @notice One of the balances is above the maximum value that can be stored.\n error BalanceOverflow();\n\n function getBalanceRaw(bytes32 balance) internal pure returns (uint256) {\n return uint256(balance) & _MAX_BALANCE;\n }\n\n function getBalanceDerived(bytes32 balance) internal pure returns (uint256) {\n return uint256(balance >> 128) & _MAX_BALANCE;\n }\n\n /// @dev Sets only the raw balance of balances and returns the new bytes32 balance.\n function setBalanceRaw(bytes32 balance, uint256 newBalanceRaw) internal pure returns (bytes32) {\n return toPackedBalance(newBalanceRaw, getBalanceDerived(balance));\n }\n\n /// @dev Sets only the derived balance of balances and returns the new bytes32 balance.\n function setBalanceDerived(bytes32 balance, uint256 newBalanceDerived) internal pure returns (bytes32) {\n return toPackedBalance(getBalanceRaw(balance), newBalanceDerived);\n }\n\n /// @dev Validates the size of `balanceRaw` and `balanceDerived`, then returns a packed balance bytes32.\n function toPackedBalance(uint256 balanceRaw, uint256 balanceDerived) internal pure returns (bytes32) {\n if (balanceRaw > _MAX_BALANCE || balanceDerived > _MAX_BALANCE) {\n revert BalanceOverflow();\n }\n\n return _pack(balanceRaw, balanceDerived);\n }\n\n /// @dev Decode and fetch both balances.\n function fromPackedBalance(bytes32 balance) internal pure returns (uint256 balanceRaw, uint256 balanceDerived) {\n return (getBalanceRaw(balance), getBalanceDerived(balance));\n }\n\n /// @dev Packs two uint128 values into a packed balance bytes32. It does not check balance sizes.\n function _pack(uint256 leastSignificant, uint256 mostSignificant) private pure returns (bytes32) {\n return bytes32((mostSignificant << 128) + leastSignificant);\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n// solhint-disable no-inline-assembly\n\n/// @notice Support `quoteAndRevert`: a v2-style query which always reverts, and returns the result in the return data.\nlibrary RevertCodec {\n /**\n * @notice On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\n * @param result The result of the query operation\n */\n error Result(bytes result);\n\n /// @notice Handle the \"reverted without a reason\" case (i.e., no return data).\n error ErrorSelectorNotFound();\n\n function catchEncodedResult(bytes memory resultRaw) internal pure returns (bytes memory) {\n bytes4 errorSelector = RevertCodec.parseSelector(resultRaw);\n if (errorSelector != Result.selector) {\n // Bubble up error message if the revert reason is not the expected one.\n RevertCodec.bubbleUpRevert(resultRaw);\n }\n\n uint256 resultRawLength = resultRaw.length;\n assembly (\"memory-safe\") {\n resultRaw := add(resultRaw, 0x04) // Slice the sighash\n mstore(resultRaw, sub(resultRawLength, 4)) // Set proper length\n }\n\n return abi.decode(resultRaw, (bytes));\n }\n\n /// @dev Returns the first 4 bytes in an array, reverting if the length is < 4.\n function parseSelector(bytes memory callResult) internal pure returns (bytes4 errorSelector) {\n if (callResult.length < 4) {\n revert ErrorSelectorNotFound();\n }\n assembly (\"memory-safe\") {\n errorSelector := mload(add(callResult, 0x20)) // Load the first 4 bytes from data (skip length offset)\n }\n }\n\n /// @dev Taken from Openzeppelin's Address.\n function bubbleUpRevert(bytes memory returnData) internal pure {\n // Look for revert reason and bubble it up if present.\n if (returnData.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly.\n\n assembly (\"memory-safe\") {\n let return_data_size := mload(returnData)\n revert(add(32, returnData), return_data_size)\n }\n } else {\n revert ErrorSelectorNotFound();\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVersion } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\";\n\n/**\n * @notice Retrieves a contract's version from storage.\n * @dev The version is set at deployment time and cannot be changed. It would be immutable, but immutable strings\n * are not yet supported.\n *\n * Contracts like factories and pools should have versions. These typically take the form of JSON strings containing\n * detailed information about the deployment. For instance:\n *\n * `{name: 'ChildChainGaugeFactory', version: 2, deployment: '20230316-child-chain-gauge-factory-v2'}`\n */\ncontract Version is IVersion {\n string private _version;\n\n constructor(string memory version_) {\n _setVersion(version_);\n }\n\n /**\n * @notice Getter for the version.\n * @return version The stored contract version\n */\n function version() external view returns (string memory) {\n return _version;\n }\n\n /// @dev Internal setter that allows this contract to be used in proxies.\n function _setVersion(string memory newVersion) internal {\n _version = newVersion;\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { LogExpMath } from \"./LogExpMath.sol\";\n\n/// @notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\nlibrary FixedPoint {\n /// @notice Attempted division by zero.\n error ZeroDivision();\n\n // solhint-disable no-inline-assembly\n // solhint-disable private-vars-leading-underscore\n\n uint256 internal constant ONE = 1e18; // 18 decimal places\n uint256 internal constant TWO = 2 * ONE;\n uint256 internal constant FOUR = 4 * ONE;\n uint256 internal constant MAX_POW_RELATIVE_ERROR = 10000; // 10^(-14)\n\n function mulDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n return product / ONE;\n }\n\n function mulUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n // Equivalent to:\n // result = product == 0 ? 0 : ((product - 1) / FixedPoint.ONE) + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), ONE), 1))\n }\n }\n\n function divDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Solidity 0.8 reverts with a Panic code (0x11) if the multiplication overflows.\n uint256 aInflated = a * ONE;\n\n // Solidity 0.8 reverts with a \"Division by Zero\" Panic code (0x12) if b is zero\n return aInflated / b;\n }\n\n function divUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n return mulDivUp(a, ONE, b);\n }\n\n /// @dev Return (a * b) / c, rounding up.\n function mulDivUp(uint256 a, uint256 b, uint256 c) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on c==0.\n if (c == 0) {\n revert ZeroDivision();\n }\n\n // Multiple overflow protection is done by Solidity 0.8.x.\n uint256 product = a * b;\n\n // The traditional divUp formula is:\n // divUp(x, y) := (x + y - 1) / y\n // To avoid intermediate overflow in the addition, we distribute the division and get:\n // divUp(x, y) := (x - 1) / y + 1\n // Note that this requires x != 0, if x == 0 then the result is zero\n //\n // Equivalent to:\n // result = a == 0 ? 0 : (a * b - 1) / c + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), c), 1))\n }\n }\n\n /**\n * @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n * invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n * This can occur in calculations with many successive multiplications and divisions, and\n * we want to minimize the number of operations by avoiding unnecessary scaling by ONE.\n */\n function divUpRaw(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on b==0.\n if (b == 0) {\n revert ZeroDivision();\n }\n\n // Equivalent to:\n // result = a == 0 ? 0 : 1 + (a - 1) / b\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(a)), add(1, div(sub(a, 1), b)))\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n * the true value (that is, the error function expected - actual is always positive).\n */\n function powDown(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulDown(x, x);\n } else if (y == FOUR) {\n uint256 square = mulDown(x, x);\n return mulDown(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n if (raw < maxError) {\n return 0;\n } else {\n unchecked {\n return raw - maxError;\n }\n }\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n * the true value (that is, the error function expected - actual is always negative).\n */\n function powUp(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulUp(x, x);\n } else if (y == FOUR) {\n uint256 square = mulUp(x, x);\n return mulUp(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n return raw + maxError;\n }\n }\n\n /**\n * @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n *\n * Useful when computing the complement for values with some level of relative error, as it strips this error and\n * prevents intermediate negative values.\n */\n function complement(uint256 x) internal pure returns (uint256 result) {\n // Equivalent to:\n // result = (x < ONE) ? (ONE - x) : 0\n assembly (\"memory-safe\") {\n result := mul(lt(x, ONE), sub(ONE, x))\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n// solhint-disable\n\n/**\n * @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n *\n * Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n * exponentiation and logarithm (where the base is Euler's number).\n *\n * All math operations are unchecked in order to save gas.\n *\n * @author Fernando Martinelli - @fernandomartinelli\n * @author Sergio Yuhjtman - @sergioyuhjtman\n * @author Daniel Fernandez - @dmf7z\n */\nlibrary LogExpMath {\n /// @notice This error is thrown when a base is not within an acceptable range.\n error BaseOutOfBounds();\n\n /// @notice This error is thrown when a exponent is not within an acceptable range.\n error ExponentOutOfBounds();\n\n /// @notice This error is thrown when the exponent * ln(base) is not within an acceptable range.\n error ProductOutOfBounds();\n\n /// @notice This error is thrown when an exponent used in the exp function is not within an acceptable range.\n error InvalidExponent();\n\n /// @notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\n error OutOfBounds();\n\n // All fixed point multiplications and divisions are inlined. This means we need to divide by ONE when multiplying\n // two numbers, and multiply by ONE when dividing them.\n\n // All arguments and return values are 18 decimal fixed point numbers.\n int256 constant ONE_18 = 1e18;\n\n // Internally, intermediate values are computed with higher precision as 20 decimal fixed point numbers, and in the\n // case of ln36, 36 decimals.\n int256 constant ONE_20 = 1e20;\n int256 constant ONE_36 = 1e36;\n\n // The domain of natural exponentiation is bound by the word size and number of decimals used.\n //\n // Because internally the result will be stored using 20 decimals, the largest possible result is\n // (2^255 - 1) / 10^20, which makes the largest exponent ln((2^255 - 1) / 10^20) = 130.700829182905140221.\n // The smallest possible result is 10^(-18), which makes largest negative argument\n // ln(10^(-18)) = -41.446531673892822312.\n // We use 130.0 and -41.0 to have some safety margin.\n int256 constant MAX_NATURAL_EXPONENT = 130e18;\n int256 constant MIN_NATURAL_EXPONENT = -41e18;\n\n // Bounds for ln_36's argument. Both ln(0.9) and ln(1.1) can be represented with 36 decimal places in a fixed point\n // 256 bit integer.\n int256 constant LN_36_LOWER_BOUND = ONE_18 - 1e17;\n int256 constant LN_36_UPPER_BOUND = ONE_18 + 1e17;\n\n uint256 constant MILD_EXPONENT_BOUND = 2 ** 254 / uint256(ONE_20);\n\n // 18 decimal constants\n int256 constant x0 = 128000000000000000000; // 2ˆ7\n int256 constant a0 = 38877084059945950922200000000000000000000000000000000000; // eˆ(x0) (no decimals)\n int256 constant x1 = 64000000000000000000; // 2ˆ6\n int256 constant a1 = 6235149080811616882910000000; // eˆ(x1) (no decimals)\n\n // 20 decimal constants\n int256 constant x2 = 3200000000000000000000; // 2ˆ5\n int256 constant a2 = 7896296018268069516100000000000000; // eˆ(x2)\n int256 constant x3 = 1600000000000000000000; // 2ˆ4\n int256 constant a3 = 888611052050787263676000000; // eˆ(x3)\n int256 constant x4 = 800000000000000000000; // 2ˆ3\n int256 constant a4 = 298095798704172827474000; // eˆ(x4)\n int256 constant x5 = 400000000000000000000; // 2ˆ2\n int256 constant a5 = 5459815003314423907810; // eˆ(x5)\n int256 constant x6 = 200000000000000000000; // 2ˆ1\n int256 constant a6 = 738905609893065022723; // eˆ(x6)\n int256 constant x7 = 100000000000000000000; // 2ˆ0\n int256 constant a7 = 271828182845904523536; // eˆ(x7)\n int256 constant x8 = 50000000000000000000; // 2ˆ-1\n int256 constant a8 = 164872127070012814685; // eˆ(x8)\n int256 constant x9 = 25000000000000000000; // 2ˆ-2\n int256 constant a9 = 128402541668774148407; // eˆ(x9)\n int256 constant x10 = 12500000000000000000; // 2ˆ-3\n int256 constant a10 = 113314845306682631683; // eˆ(x10)\n int256 constant x11 = 6250000000000000000; // 2ˆ-4\n int256 constant a11 = 106449445891785942956; // eˆ(x11)\n\n /**\n * @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n *\n * Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function pow(uint256 x, uint256 y) internal pure returns (uint256) {\n if (y == 0) {\n // We solve the 0^0 indetermination by making it equal one.\n return uint256(ONE_18);\n }\n\n if (x == 0) {\n return 0;\n }\n\n // Instead of computing x^y directly, we instead rely on the properties of logarithms and exponentiation to\n // arrive at that result. In particular, exp(ln(x)) = x, and ln(x^y) = y * ln(x). This means\n // x^y = exp(y * ln(x)).\n\n // The ln function takes a signed value, so we need to make sure x fits in the signed 256 bit range.\n if (x >> 255 != 0) {\n revert BaseOutOfBounds();\n }\n int256 x_int256 = int256(x);\n\n // We will compute y * ln(x) in a single step. Depending on the value of x, we can either use ln or ln_36. In\n // both cases, we leave the division by ONE_18 (due to fixed point multiplication) to the end.\n\n // This prevents y * ln(x) from overflowing, and at the same time guarantees y fits in the signed 256 bit range.\n if (y >= MILD_EXPONENT_BOUND) {\n revert ExponentOutOfBounds();\n }\n int256 y_int256 = int256(y);\n\n int256 logx_times_y;\n unchecked {\n if (LN_36_LOWER_BOUND < x_int256 && x_int256 < LN_36_UPPER_BOUND) {\n int256 ln_36_x = _ln_36(x_int256);\n\n // ln_36_x has 36 decimal places, so multiplying by y_int256 isn't as straightforward, since we can't just\n // bring y_int256 to 36 decimal places, as it might overflow. Instead, we perform two 18 decimal\n // multiplications and add the results: one with the first 18 decimals of ln_36_x, and one with the\n // (downscaled) last 18 decimals.\n logx_times_y = ((ln_36_x / ONE_18) * y_int256 + ((ln_36_x % ONE_18) * y_int256) / ONE_18);\n } else {\n logx_times_y = _ln(x_int256) * y_int256;\n }\n logx_times_y /= ONE_18;\n }\n\n // Finally, we compute exp(y * ln(x)) to arrive at x^y\n if (!(MIN_NATURAL_EXPONENT <= logx_times_y && logx_times_y <= MAX_NATURAL_EXPONENT)) {\n revert ProductOutOfBounds();\n }\n\n return uint256(exp(logx_times_y));\n }\n\n /**\n * @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n *\n * Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function exp(int256 x) internal pure returns (int256) {\n if (!(x >= MIN_NATURAL_EXPONENT && x <= MAX_NATURAL_EXPONENT)) {\n revert InvalidExponent();\n }\n\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (x < 0) {\n // We only handle positive exponents: e^(-x) is computed as 1 / e^x. We can safely make x positive since it\n // fits in the signed 256 bit range (as it is larger than MIN_NATURAL_EXPONENT). In the negative\n // exponent case, compute e^x, then return 1 / result.\n unchecked {\n x = -x;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that e^(x+y) = e^x * e^y to decompose x into a sum of powers of two, which we call x_n,\n // where x_n == 2^(7 - n), and e^x_n = a_n has been precomputed. We choose the first x_n, x0, to equal 2^7\n // because all larger powers are larger than MAX_NATURAL_EXPONENT, and therefore not present in the\n // decomposition.\n // At the end of this process we will have the product of all e^x_n = a_n that apply, and the remainder of this\n // decomposition, which will be lower than the smallest x_n.\n // exp(x) = k_0 * a_0 * k_1 * a_1 * ... + k_n * a_n * exp(remainder), where each k_n equals either 0 or 1.\n // We mutate x by subtracting x_n, making it the remainder of the decomposition.\n\n // The first two a_n (e^(2^7) and e^(2^6)) are too large if stored as 18 decimal numbers, and could cause\n // intermediate overflows. Instead we store them as plain integers, with 0 decimals.\n // Additionally, x0 + x1 is larger than MAX_NATURAL_EXPONENT, which means they will not both be present in the\n // decomposition.\n\n // For each x_n, we test if that term is present in the decomposition (if x is larger than it), and if so deduct\n // it and compute the accumulated product.\n\n int256 firstAN;\n unchecked {\n if (x >= x0) {\n x -= x0;\n firstAN = a0;\n } else if (x >= x1) {\n x -= x1;\n firstAN = a1;\n } else {\n firstAN = 1; // One with no decimal places\n }\n\n // We now transform x into a 20 decimal fixed point number, to have enhanced precision when computing the\n // smaller terms.\n x *= 100;\n }\n\n // `product` is the accumulated product of all a_n (except a0 and a1), which starts at 20 decimal fixed point\n // one. Recall that fixed point multiplication requires dividing by ONE_20.\n int256 product = ONE_20;\n\n unchecked {\n if (x >= x2) {\n x -= x2;\n product = (product * a2) / ONE_20;\n }\n if (x >= x3) {\n x -= x3;\n product = (product * a3) / ONE_20;\n }\n if (x >= x4) {\n x -= x4;\n product = (product * a4) / ONE_20;\n }\n if (x >= x5) {\n x -= x5;\n product = (product * a5) / ONE_20;\n }\n if (x >= x6) {\n x -= x6;\n product = (product * a6) / ONE_20;\n }\n if (x >= x7) {\n x -= x7;\n product = (product * a7) / ONE_20;\n }\n if (x >= x8) {\n x -= x8;\n product = (product * a8) / ONE_20;\n }\n if (x >= x9) {\n x -= x9;\n product = (product * a9) / ONE_20;\n }\n }\n\n // x10 and x11 are unnecessary here since we have high enough precision already.\n\n // Now we need to compute e^x, where x is small (in particular, it is smaller than x9). We use the Taylor series\n // expansion for e^x: 1 + x + (x^2 / 2!) + (x^3 / 3!) + ... + (x^n / n!).\n\n int256 seriesSum = ONE_20; // The initial one in the sum, with 20 decimal places.\n int256 term; // Each term in the sum, where the nth term is (x^n / n!).\n\n // The first term is simply x.\n term = x;\n unchecked {\n seriesSum += term;\n\n // Each term (x^n / n!) equals the previous one times x, divided by n. Since x is a fixed point number,\n // multiplying by it requires dividing by ONE_20, but dividing by the non-fixed point n values does not.\n\n term = ((term * x) / ONE_20) / 2;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 3;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 4;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 5;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 6;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 7;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 8;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 9;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 10;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 11;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 12;\n seriesSum += term;\n\n // 12 Taylor terms are sufficient for 18 decimal precision.\n\n // We now have the first a_n (with no decimals), and the product of all other a_n present, and the Taylor\n // approximation of the exponentiation of the remainder (both with 20 decimals). All that remains is to multiply\n // all three (one 20 decimal fixed point multiplication, dividing by ONE_20, and one integer multiplication),\n // and then drop two digits to return an 18 decimal value.\n\n int256 result = (((product * seriesSum) / ONE_20) * firstAN) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? (ONE_18 * ONE_18) / result : result;\n }\n }\n\n /// @dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument.\n function log(int256 arg, int256 base) internal pure returns (int256) {\n // This performs a simple base change: log(arg, base) = ln(arg) / ln(base).\n\n // Both logBase and logArg are computed as 36 decimal fixed point numbers, either by using ln_36, or by\n // upscaling.\n\n int256 logBase;\n unchecked {\n if (LN_36_LOWER_BOUND < base && base < LN_36_UPPER_BOUND) {\n logBase = _ln_36(base);\n } else {\n logBase = _ln(base) * ONE_18;\n }\n }\n\n int256 logArg;\n unchecked {\n if (LN_36_LOWER_BOUND < arg && arg < LN_36_UPPER_BOUND) {\n logArg = _ln_36(arg);\n } else {\n logArg = _ln(arg) * ONE_18;\n }\n\n // When dividing, we multiply by ONE_18 to arrive at a result with 18 decimal places\n return (logArg * ONE_18) / logBase;\n }\n }\n\n /// @dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function ln(int256 a) internal pure returns (int256) {\n // The real natural logarithm is not defined for negative numbers or zero.\n if (a <= 0) {\n revert OutOfBounds();\n }\n if (LN_36_LOWER_BOUND < a && a < LN_36_UPPER_BOUND) {\n unchecked {\n return _ln_36(a) / ONE_18;\n }\n } else {\n return _ln(a);\n }\n }\n\n /// @dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function _ln(int256 a) private pure returns (int256) {\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (a < ONE_18) {\n // Since ln(a^k) = k * ln(a), we can compute ln(a) as ln(a) = ln((1/a)^(-1)) = - ln((1/a)). If a is less\n // than one, 1/a will be greater than one, so in this case we compute ln(1/a) and negate the final result.\n unchecked {\n a = (ONE_18 * ONE_18) / a;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that ln^(a * b) = ln(a) + ln(b) to decompose ln(a) into a sum of powers of two, which\n // we call x_n, where x_n == 2^(7 - n), which are the natural logarithm of precomputed quantities a_n (that is,\n // ln(a_n) = x_n). We choose the first x_n, x0, to equal 2^7 because the exponential of all larger powers cannot\n // be represented as 18 fixed point decimal numbers in 256 bits, and are therefore larger than a.\n // At the end of this process we will have the sum of all x_n = ln(a_n) that apply, and the remainder of this\n // decomposition, which will be lower than the smallest a_n.\n // ln(a) = k_0 * x_0 + k_1 * x_1 + ... + k_n * x_n + ln(remainder), where each k_n equals either 0 or 1.\n // We mutate a by subtracting a_n, making it the remainder of the decomposition.\n\n // For reasons related to how `exp` works, the first two a_n (e^(2^7) and e^(2^6)) are not stored as fixed point\n // numbers with 18 decimals, but instead as plain integers with 0 decimals, so we need to multiply them by\n // ONE_18 to convert them to fixed point.\n // For each a_n, we test if that term is present in the decomposition (if a is larger than it), and if so divide\n // by it and compute the accumulated sum.\n\n int256 sum = 0;\n unchecked {\n if (a >= a0 * ONE_18) {\n a /= a0; // Integer, not fixed point division\n sum += x0;\n }\n\n if (a >= a1 * ONE_18) {\n a /= a1; // Integer, not fixed point division\n sum += x1;\n }\n\n // All other a_n and x_n are stored as 20 digit fixed point numbers, so we convert the sum and a to this format.\n sum *= 100;\n a *= 100;\n\n // Because further a_n are 20 digit fixed point numbers, we multiply by ONE_20 when dividing by them.\n\n if (a >= a2) {\n a = (a * ONE_20) / a2;\n sum += x2;\n }\n\n if (a >= a3) {\n a = (a * ONE_20) / a3;\n sum += x3;\n }\n\n if (a >= a4) {\n a = (a * ONE_20) / a4;\n sum += x4;\n }\n\n if (a >= a5) {\n a = (a * ONE_20) / a5;\n sum += x5;\n }\n\n if (a >= a6) {\n a = (a * ONE_20) / a6;\n sum += x6;\n }\n\n if (a >= a7) {\n a = (a * ONE_20) / a7;\n sum += x7;\n }\n\n if (a >= a8) {\n a = (a * ONE_20) / a8;\n sum += x8;\n }\n\n if (a >= a9) {\n a = (a * ONE_20) / a9;\n sum += x9;\n }\n\n if (a >= a10) {\n a = (a * ONE_20) / a10;\n sum += x10;\n }\n\n if (a >= a11) {\n a = (a * ONE_20) / a11;\n sum += x11;\n }\n }\n\n // a is now a small number (smaller than a_11, which roughly equals 1.06). This means we can use a Taylor series\n // that converges rapidly for values of `a` close to one - the same one used in ln_36.\n // Let z = (a - 1) / (a + 1).\n // ln(a) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 20 digit fixed point division requires multiplying by ONE_20, and multiplication requires\n // division by ONE_20.\n unchecked {\n int256 z = ((a - ONE_20) * ONE_20) / (a + ONE_20);\n int256 z_squared = (z * z) / ONE_20;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 11;\n\n // 6 Taylor terms are sufficient for 36 decimal precision.\n\n // Finally, we multiply by 2 (non fixed point) to compute ln(remainder)\n seriesSum *= 2;\n\n // We now have the sum of all x_n present, and the Taylor approximation of the logarithm of the remainder (both\n // with 20 decimals). All that remains is to sum these two, and then drop two digits to return a 18 decimal\n // value.\n\n int256 result = (sum + seriesSum) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? -result : result;\n }\n }\n\n /**\n * @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n * for x close to one.\n *\n * Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND.\n */\n function _ln_36(int256 x) private pure returns (int256) {\n // Since ln(1) = 0, a value of x close to one will yield a very small result, which makes using 36 digits\n // worthwhile.\n\n // First, we transform x to a 36 digit fixed point value.\n unchecked {\n x *= ONE_18;\n\n // We will use the following Taylor expansion, which converges very rapidly. Let z = (x - 1) / (x + 1).\n // ln(x) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 36 digit fixed point division requires multiplying by ONE_36, and multiplication requires\n // division by ONE_36.\n int256 z = ((x - ONE_36) * ONE_36) / (x + ONE_36);\n int256 z_squared = (z * z) / ONE_36;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 11;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 13;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 15;\n\n // 8 Taylor terms are sufficient for 36 decimal precision.\n\n // All that remains is multiplying by 2 (non fixed point).\n return seriesSum * 2;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Library for managing sets of primitive types.\n * @dev See https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types.\n *\n * Based on the EnumerableSet library from OpenZeppelin Contracts, altered to remove the base private functions that\n * work on bytes32, replacing them with a native implementation for address values, to reduce bytecode size and\n * runtime costs.\n *\n * The `unchecked_at` function was also added, which allows for more gas efficient data reads in some scenarios.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n */\nlibrary EnumerableSet {\n // The original OpenZeppelin implementation uses a generic Set type with bytes32 values: this was replaced with\n // AddressSet, which uses address keys natively, resulting in more dense bytecode.\n\n // solhint-disable func-name-mixedcase\n\n struct AddressSet {\n // Storage of set values.\n address[] _values;\n // Position of the value in the `values` array, plus 1 because index 0\n // means a value is not in the set.\n mapping(address addressKey => uint256 indexValue) _indexes;\n }\n\n /// @notice An index is beyond the current bounds of the set.\n error IndexOutOfBounds();\n\n /// @notice An element that is not present in the set.\n error ElementNotFound();\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, if it was not already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n if (!contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value.\n set._indexes[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n * Returns true if the value was removed from the set; i.e., if it was present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n // We read and store the value's index to prevent multiple reads from the same storage slot.\n uint256 valueIndex = set._indexes[value];\n\n if (valueIndex != 0) {\n // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n uint256 toDeleteIndex;\n uint256 lastIndex;\n\n unchecked {\n toDeleteIndex = valueIndex - 1;\n lastIndex = set._values.length - 1;\n }\n\n // The swap is only necessary if we're not removing the last element.\n if (toDeleteIndex != lastIndex) {\n address lastValue = set._values[lastIndex];\n\n // Move the last entry to the index of the entry to delete.\n set._values[toDeleteIndex] = lastValue;\n // Update the index for the moved value\n set._indexes[lastValue] = valueIndex; // = toDeleteIndex + 1; all indices are 1-based.\n }\n\n // Delete the slot where the moved value was stored.\n set._values.pop();\n\n // Delete the index for the deleted slot.\n delete set._indexes[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /// @dev Returns true if the value is in the set. O(1).\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return set._indexes[value] != 0;\n }\n\n /// @dev Returns the number of values on the set. O(1).\n function length(AddressSet storage set) internal view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n if (index >= set._values.length) {\n revert IndexOutOfBounds();\n }\n\n return unchecked_at(set, index);\n }\n\n /**\n * @dev Same as {at}, except this doesn't revert if `index` it outside of the set (i.e. if it is equal or larger\n * than {length}). O(1).\n *\n * This function performs one less storage read than {at}, but should only be used when `index` is known to be\n * within bounds.\n */\n function unchecked_at(AddressSet storage set, uint256 index) internal view returns (address) {\n return set._values[index];\n }\n\n /// @dev Return the index of an element in the set, or revert if not found.\n function indexOf(AddressSet storage set, address value) internal view returns (uint256) {\n uint256 rawIndex = set._indexes[value];\n\n if (rawIndex == 0) {\n revert ElementNotFound();\n }\n\n unchecked {\n return rawIndex - 1;\n }\n }\n\n /**\n * @dev Same as {indexOf}, except this doesn't revert if the element isn't present in the set.\n * In this case, it returns 0.\n *\n * This function performs one less storage read than {indexOf}, but should only be used when `index` is known to be\n * within bounds.\n */\n function unchecked_indexOf(AddressSet storage set, address value) internal view returns (uint256) {\n uint256 rawIndex = set._indexes[value];\n\n unchecked {\n return rawIndex == 0 ? 0 : rawIndex - 1;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\nimport { StorageSlotExtension } from \"./StorageSlotExtension.sol\";\n\n/**\n * @notice Variant of {ReentrancyGuard} that uses transient storage.\n * @dev NOTE: This variant only works on networks where EIP-1153 is available.\n */\nabstract contract ReentrancyGuardTransient {\n using StorageSlotExtension for *;\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.ReentrancyGuard\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant _REENTRANCY_GUARD_STORAGE =\n 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00;\n\n /// @notice Unauthorized reentrant call.\n error ReentrancyGuardReentrantCall();\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be NOT_ENTERED.\n if (_reentrancyGuardEntered()) {\n revert ReentrancyGuardReentrantCall();\n }\n\n // Any calls to nonReentrant after this point will fail.\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(true);\n }\n\n function _nonReentrantAfter() private {\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(false);\n }\n\n /**\n * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n * `nonReentrant` function in the call stack.\n */\n function _reentrancyGuardEntered() internal view returns (bool) {\n return _REENTRANCY_GUARD_STORAGE.asBoolean().tload();\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n * @dev TIP: Consider using this library along with {SlotDerivation}.\n */\nlibrary StorageSlotExtension {\n struct Int256Slot {\n int256 value;\n }\n\n /// @dev Returns an `Int256Slot` with member `value` located at `slot`.\n function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /// @dev Custom type that represents a slot holding an address.\n type AddressSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a AddressSlotType.\n function asAddress(bytes32 slot) internal pure returns (AddressSlotType) {\n return AddressSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a boolean.\n type BooleanSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a BooleanSlotType.\n function asBoolean(bytes32 slot) internal pure returns (BooleanSlotType) {\n return BooleanSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a bytes32.\n type Bytes32SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Bytes32SlotType.\n function asBytes32(bytes32 slot) internal pure returns (Bytes32SlotType) {\n return Bytes32SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a uint256.\n type Uint256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Uint256SlotType.\n function asUint256(bytes32 slot) internal pure returns (Uint256SlotType) {\n return Uint256SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding an int256.\n type Int256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to an Int256SlotType.\n function asInt256(bytes32 slot) internal pure returns (Int256SlotType) {\n return Int256SlotType.wrap(slot);\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(AddressSlotType slot) internal view returns (address value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(AddressSlotType slot, address value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(BooleanSlotType slot) internal view returns (bool value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(BooleanSlotType slot, bool value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Bytes32SlotType slot) internal view returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Bytes32SlotType slot, bytes32 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Uint256SlotType slot) internal view returns (uint256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Uint256SlotType slot, uint256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Int256SlotType slot) internal view returns (int256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Int256SlotType slot, int256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\ncontract ERC20TestToken is ERC20 {\n uint8 private immutable _decimals;\n\n /// @dev Simulate tokens that don't allow zero transfers.\n error ZeroTransfer();\n\n constructor(string memory name, string memory symbol, uint8 decimals_) ERC20(name, symbol) {\n _decimals = decimals_;\n }\n\n function decimals() public view override returns (uint8) {\n return _decimals;\n }\n\n function mint(address recipient, uint256 amount) external {\n _mint(recipient, amount);\n }\n\n function burn(address sender, uint256 amount) external {\n _burn(sender, amount);\n }\n\n function transfer(address to, uint256 value) public override returns (bool) {\n if (value == 0) {\n revert ZeroTransfer();\n }\n\n return super.transfer(to, value);\n }\n\n function transferFrom(address from, address to, uint256 value) public override returns (bool) {\n if (value == 0) {\n revert ZeroTransfer();\n }\n\n return super.transferFrom(from, to, value);\n }\n}\n"},"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { Authentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\";\n\n/// @dev Base contract for performing access control on external functions within pools.\nabstract contract CommonAuthentication is Authentication {\n /// @dev Vault cannot be address(0).\n error VaultNotSet();\n\n IVault private immutable _vault;\n\n /// @notice Caller must be the swapFeeManager, if defined. Otherwise, default to governance.\n modifier onlySwapFeeManagerOrGovernance(address pool) {\n address roleAddress = _vault.getPoolRoleAccounts(pool).swapFeeManager;\n _ensureAuthenticatedByExclusiveRole(pool, roleAddress);\n _;\n }\n\n constructor(IVault vault, bytes32 actionIdDisambiguator) Authentication(actionIdDisambiguator) {\n if (address(vault) == address(0)) {\n revert VaultNotSet();\n }\n\n _vault = vault;\n }\n\n function _getVault() internal view returns (IVault) {\n return _vault;\n }\n\n // Access control is delegated to the Authorizer in the `_canPerform` functions.\n function _canPerform(bytes32 actionId, address user) internal view override returns (bool) {\n return _vault.getAuthorizer().canPerform(actionId, user, address(this));\n }\n\n function _canPerform(bytes32 actionId, address account, address where) internal view returns (bool) {\n return _vault.getAuthorizer().canPerform(actionId, account, where);\n }\n\n /// @dev Ensure the sender is the roleAccount, or default to governance if roleAccount is address(0).\n function _ensureAuthenticatedByExclusiveRole(address where, address roleAccount) internal view {\n if (roleAccount == address(0)) {\n // Defer to governance if no role assigned.\n if (_canPerform(getActionId(msg.sig), msg.sender, where) == false) {\n revert SenderNotAllowed();\n }\n } else if (msg.sender != roleAccount) {\n revert SenderNotAllowed();\n }\n }\n\n /// @dev Ensure the sender is either the role manager, or is authorized by governance (non-exclusive).\n function _ensureAuthenticatedByRole(address where, address roleAccount) internal view {\n // If the sender is not the delegated manager for the role, defer to governance.\n if (msg.sender != roleAccount) {\n if (_canPerform(getActionId(msg.sig), msg.sender, where) == false) {\n revert SenderNotAllowed();\n }\n }\n // (else) if the sender is the delegated manager, proceed.\n }\n}\n"},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport {\n FEE_SCALING_FACTOR,\n MAX_FEE_PERCENTAGE,\n PoolRoleAccounts\n} from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nimport { SingletonAuthentication } from \"./SingletonAuthentication.sol\";\nimport { VaultGuard } from \"./VaultGuard.sol\";\n\n/**\n * @notice Helper contract to manage protocol and creator fees outside the Vault.\n * @dev This contract stores global default protocol swap and yield fees, and also tracks the values of those fees\n * for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but\n * pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`).\n *\n * The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows\n * the component fee percentages, and how to compute the aggregate from the components. This is done for performance\n * reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \"cut\", and stores the\n * fee amounts separately from the pool balances.\n *\n * The pool creator fees are \"net\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee\n * percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided\n * between the pool creator and the LPs.\n *\n * There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this\n * contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any\n * time by governance and the pool creator, respectively.\n *\n * Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero\n * if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator\n * fees are computed \"net\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible.\n * A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool\n * creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs.\n *\n * This contract is deployed with the Vault, but can be changed by governance.\n */\ncontract ProtocolFeeController is\n IProtocolFeeController,\n SingletonAuthentication,\n ReentrancyGuardTransient,\n VaultGuard\n{\n using FixedPoint for uint256;\n using SafeERC20 for IERC20;\n using SafeCast for *;\n\n enum ProtocolFeeType {\n SWAP,\n YIELD\n }\n\n /**\n * @notice Fee configuration stored in the swap and yield fee mappings.\n * @dev Instead of storing only the fee in the mapping, also store a flag to indicate whether the fee has been\n * set by governance through a permissioned call. (The fee is stored in 64-bits, so that the struct fits\n * within a single slot.)\n *\n * We know the percentage is an 18-decimal FP value, which only takes 60 bits, so it's guaranteed to fit,\n * and we can do simple casts to truncate the high bits without needed SafeCast.\n *\n * We want to enable permissionless updates for pools, so that it is less onerous to update potentially\n * hundreds of pools if the global protocol fees change. However, we don't want to overwrite pools that\n * have had their fee percentages manually set by the DAO (i.e., after off-chain negotiation and agreement).\n *\n * @param feePercentage The raw swap or yield fee percentage\n * @param isOverride When set, this fee is controlled by governance, and cannot be changed permissionlessly\n */\n struct PoolFeeConfig {\n uint64 feePercentage;\n bool isOverride;\n }\n\n // Maximum protocol swap fee percentage. FixedPoint.ONE corresponds to a 100% fee.\n uint256 public constant MAX_PROTOCOL_SWAP_FEE_PERCENTAGE = 50e16; // 50%\n\n // Maximum protocol yield fee percentage.\n uint256 public constant MAX_PROTOCOL_YIELD_FEE_PERCENTAGE = 50e16; // 50%\n\n // Maximum pool creator (swap, yield) fee percentage.\n uint256 public constant MAX_CREATOR_FEE_PERCENTAGE = 99.999e16; // 99.999%\n\n // Global protocol swap fee.\n uint256 private _globalProtocolSwapFeePercentage;\n\n // Global protocol yield fee.\n uint256 private _globalProtocolYieldFeePercentage;\n\n // Store the pool-specific swap fee percentages (the Vault's poolConfigBits stores the aggregate percentage).\n mapping(address pool => PoolFeeConfig swapFeeConfig) internal _poolProtocolSwapFeePercentages;\n\n // Store the pool-specific yield fee percentages (the Vault's poolConfigBits stores the aggregate percentage).\n mapping(address pool => PoolFeeConfig yieldFeeConfig) internal _poolProtocolYieldFeePercentages;\n\n // Explicitly mark a pool as registered. This will enable future migrations to safely update protected state.\n mapping(address pool => bool isRegistered) internal _registeredPools;\n\n // Pool creator swap fee percentages for each pool.\n mapping(address pool => uint256 poolCreatorSwapFee) internal _poolCreatorSwapFeePercentages;\n\n // Pool creator yield fee percentages for each pool.\n mapping(address pool => uint256 poolCreatorYieldFee) internal _poolCreatorYieldFeePercentages;\n\n // Disaggregated protocol fees (from swap and yield), available for withdrawal by governance.\n mapping(address pool => mapping(IERC20 poolToken => uint256 feeAmount)) internal _protocolFeeAmounts;\n\n // Disaggregated pool creator fees (from swap and yield), available for withdrawal by the pool creator.\n mapping(address pool => mapping(IERC20 poolToken => uint256 feeAmount)) internal _poolCreatorFeeAmounts;\n\n /**\n * @notice Prevent pool data from being registered more than once.\n * @dev This can happen if there is an error in the migration, or if governance somehow grants permission to\n * `migratePool`, which should never happen.\n *\n * @param pool The pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /// @notice Migration source cannot be this contract.\n error InvalidMigrationSource();\n\n // Ensure that the caller is the pool creator.\n modifier onlyPoolCreator(address pool) {\n _ensureCallerIsPoolCreator(pool);\n _;\n }\n\n // Validate the swap fee percentage against the maximum.\n modifier withValidSwapFee(uint256 newSwapFeePercentage) {\n if (newSwapFeePercentage > MAX_PROTOCOL_SWAP_FEE_PERCENTAGE) {\n revert ProtocolSwapFeePercentageTooHigh();\n }\n _ensureValidPrecision(newSwapFeePercentage);\n _;\n }\n\n // Validate the yield fee percentage against the maximum.\n modifier withValidYieldFee(uint256 newYieldFeePercentage) {\n if (newYieldFeePercentage > MAX_PROTOCOL_YIELD_FEE_PERCENTAGE) {\n revert ProtocolYieldFeePercentageTooHigh();\n }\n _ensureValidPrecision(newYieldFeePercentage);\n _;\n }\n\n modifier withValidPoolCreatorFee(uint256 newPoolCreatorFeePercentage) {\n if (newPoolCreatorFeePercentage > MAX_CREATOR_FEE_PERCENTAGE) {\n revert PoolCreatorFeePercentageTooHigh();\n }\n _;\n }\n\n // Force collection and disaggregation (e.g., before changing protocol fee percentages).\n modifier withLatestFees(address pool) {\n collectAggregateFees(pool);\n _;\n }\n\n constructor(\n IVault vault_,\n uint256 initialGlobalSwapFeePercentage,\n uint256 initialGlobalYieldFeePercentage\n ) SingletonAuthentication(vault_) VaultGuard(vault_) {\n _setGlobalProtocolSwapFeePercentage(initialGlobalSwapFeePercentage);\n _setGlobalProtocolYieldFeePercentage(initialGlobalYieldFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function vault() external view returns (IVault) {\n return _vault;\n }\n\n /// @inheritdoc IProtocolFeeController\n function collectAggregateFees(address pool) public {\n _vault.unlock(abi.encodeCall(ProtocolFeeController.collectAggregateFeesHook, pool));\n }\n\n /**\n * @dev Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit\n * for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount\n * transferred so that the transaction settles when the hook returns.\n */\n function collectAggregateFeesHook(address pool) external onlyVault {\n (uint256[] memory totalSwapFees, uint256[] memory totalYieldFees) = _vault.collectAggregateFees(pool);\n _receiveAggregateFees(pool, totalSwapFees, totalYieldFees);\n }\n\n /**\n * @notice Settle fee credits from the Vault.\n * @dev This must be called after calling `collectAggregateFees` in the Vault. Note that since charging protocol\n * fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection\n * happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations. The Vault\n * differentiates between swap and yield fees (since they can have different percentage values); the Controller\n * combines swap and yield fees, then allocates the total between the protocol and pool creator.\n *\n * @param pool The address of the pool on which the swap fees were charged\n * @param swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @param yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function _receiveAggregateFees(\n address pool,\n uint256[] memory swapFeeAmounts,\n uint256[] memory yieldFeeAmounts\n ) internal {\n _receiveAggregateFees(pool, ProtocolFeeType.SWAP, swapFeeAmounts);\n _receiveAggregateFees(pool, ProtocolFeeType.YIELD, yieldFeeAmounts);\n }\n\n function _receiveAggregateFees(address pool, ProtocolFeeType feeType, uint256[] memory feeAmounts) private {\n // There are two cases when we don't need to split fees (in which case we can save gas and avoid rounding\n // errors by skipping calculations) if either the protocol or pool creator fee percentage is zero.\n\n uint256 protocolFeePercentage = feeType == ProtocolFeeType.SWAP\n ? _poolProtocolSwapFeePercentages[pool].feePercentage\n : _poolProtocolYieldFeePercentages[pool].feePercentage;\n\n uint256 poolCreatorFeePercentage = feeType == ProtocolFeeType.SWAP\n ? _poolCreatorSwapFeePercentages[pool]\n : _poolCreatorYieldFeePercentages[pool];\n\n uint256 aggregateFeePercentage;\n\n bool needToSplitFees = poolCreatorFeePercentage > 0 && protocolFeePercentage > 0;\n if (needToSplitFees) {\n // Calculate once, outside the loop.\n aggregateFeePercentage = _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n for (uint256 i = 0; i < numTokens; ++i) {\n if (feeAmounts[i] > 0) {\n IERC20 token = poolTokens[i];\n\n _vault.sendTo(token, address(this), feeAmounts[i]);\n\n // It should be easier for off-chain processes to handle two events, rather than parsing the type\n // out of a single event.\n if (feeType == ProtocolFeeType.SWAP) {\n emit ProtocolSwapFeeCollected(pool, token, feeAmounts[i]);\n } else {\n emit ProtocolYieldFeeCollected(pool, token, feeAmounts[i]);\n }\n\n if (needToSplitFees) {\n // The Vault took a single \"cut\" for the aggregate total percentage (protocol + pool creator) for\n // this fee type (swap or yield). The first step is to reconstruct this total fee amount. Then we\n // need to \"disaggregate\" this total, dividing it between the protocol and pool creator according\n // to their individual percentages. We do this by computing the protocol portion first, then\n // assigning the remainder to the pool creator.\n uint256 totalFeeAmountRaw = feeAmounts[i].divUp(aggregateFeePercentage);\n uint256 protocolPortion = totalFeeAmountRaw.mulUp(protocolFeePercentage);\n\n _protocolFeeAmounts[pool][token] += protocolPortion;\n _poolCreatorFeeAmounts[pool][token] += feeAmounts[i] - protocolPortion;\n } else {\n // If we don't need to split, one of them must be zero.\n if (poolCreatorFeePercentage == 0) {\n _protocolFeeAmounts[pool][token] += feeAmounts[i];\n } else {\n _poolCreatorFeeAmounts[pool][token] += feeAmounts[i];\n }\n }\n }\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256) {\n return _globalProtocolSwapFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeeController\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256) {\n return _globalProtocolYieldFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeeController\n function isPoolRegistered(address pool) external view returns (bool) {\n return _registeredPools[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolProtocolSwapFeeInfo(address pool) external view returns (uint256, bool) {\n PoolFeeConfig memory config = _poolProtocolSwapFeePercentages[pool];\n\n return (config.feePercentage, config.isOverride);\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolProtocolYieldFeeInfo(address pool) external view returns (uint256, bool) {\n PoolFeeConfig memory config = _poolProtocolYieldFeePercentages[pool];\n\n return (config.feePercentage, config.isOverride);\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorSwapFeePercentage(address pool) external view returns (uint256) {\n return _poolCreatorSwapFeePercentages[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorYieldFeePercentage(address pool) external view returns (uint256) {\n return _poolCreatorYieldFeePercentages[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts) {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n feeAmounts = new uint256[](numTokens);\n for (uint256 i = 0; i < numTokens; ++i) {\n feeAmounts[i] = _protocolFeeAmounts[pool][poolTokens[i]];\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts) {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n feeAmounts = new uint256[](numTokens);\n for (uint256 i = 0; i < numTokens; ++i) {\n feeAmounts[i] = _poolCreatorFeeAmounts[pool][poolTokens[i]];\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256) {\n return _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function updateProtocolSwapFeePercentage(address pool) external withLatestFees(pool) {\n PoolFeeConfig memory feeConfig = _poolProtocolSwapFeePercentages[pool];\n uint256 globalProtocolSwapFee = _globalProtocolSwapFeePercentage;\n\n if (feeConfig.isOverride == false && globalProtocolSwapFee != feeConfig.feePercentage) {\n _updatePoolSwapFeePercentage(pool, globalProtocolSwapFee, false);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function updateProtocolYieldFeePercentage(address pool) external withLatestFees(pool) {\n PoolFeeConfig memory feeConfig = _poolProtocolYieldFeePercentages[pool];\n uint256 globalProtocolYieldFee = _globalProtocolYieldFeePercentage;\n\n if (feeConfig.isOverride == false && globalProtocolYieldFee != feeConfig.feePercentage) {\n _updatePoolYieldFeePercentage(pool, globalProtocolYieldFee, false);\n }\n }\n\n function _getAggregateFeePercentage(address pool, ProtocolFeeType feeType) internal view returns (uint256) {\n uint256 protocolFeePercentage;\n uint256 poolCreatorFeePercentage;\n\n if (feeType == ProtocolFeeType.SWAP) {\n protocolFeePercentage = _poolProtocolSwapFeePercentages[pool].feePercentage;\n poolCreatorFeePercentage = _poolCreatorSwapFeePercentages[pool];\n } else {\n protocolFeePercentage = _poolProtocolYieldFeePercentages[pool].feePercentage;\n poolCreatorFeePercentage = _poolCreatorYieldFeePercentages[pool];\n }\n\n return _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n function _computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) internal pure returns (uint256 aggregateFeePercentage) {\n aggregateFeePercentage =\n protocolFeePercentage +\n protocolFeePercentage.complement().mulDown(poolCreatorFeePercentage);\n\n // Protocol fee percentages are limited to 24-bit precision for performance reasons (i.e., to fit all the fees\n // in a single slot), and because high precision is not needed. Generally we expect protocol fees set by\n // governance to be simple integers.\n //\n // However, the pool creator fee is entirely controlled by the pool creator, and it is possible to craft a\n // valid pool creator fee percentage that would cause the aggregate fee percentage to fail the precision check.\n // This case should be rare, so we ensure this can't happen by truncating the final value.\n aggregateFeePercentage = (aggregateFeePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR;\n }\n\n function _ensureCallerIsPoolCreator(address pool) internal view {\n address poolCreator = _getPoolCreator(pool);\n\n if (poolCreator == address(0)) {\n revert PoolCreatorNotRegistered(pool);\n }\n\n if (poolCreator != msg.sender) {\n revert CallerIsNotPoolCreator(msg.sender, pool);\n }\n }\n\n function _getPoolTokensAndCount(address pool) internal view returns (IERC20[] memory tokens, uint256 numTokens) {\n tokens = _vault.getPoolTokens(pool);\n numTokens = tokens.length;\n }\n\n // Retrieve the pool creator for a pool from the Vault.\n function _getPoolCreator(address pool) internal view returns (address) {\n PoolRoleAccounts memory roleAccounts = _vault.getPoolRoleAccounts(pool);\n\n return roleAccounts.poolCreator;\n }\n\n /***************************************************************************\n Pool Migration\n ***************************************************************************/\n\n /**\n * @notice Not exposed in the interface, this enables migration of hidden pool state.\n * @dev Permission should NEVER be granted to this function outside of a migration contract. It is necessary to\n * permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool\n * creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool\n * deployment.\n *\n * Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe,\n * guaranteeing that it is impossible to use this function to change anything after registration. A pool can only\n * be registered / configured once - either copied to a new controller in the migration context, or added normally\n * through the Vault calling `registerPool`.\n *\n * @param pool The address of the pool to be migrated\n */\n function migratePool(address pool) external {\n IProtocolFeeController oldFeeController = _vault.getProtocolFeeController();\n\n if (address(oldFeeController) == address(this)) {\n revert InvalidMigrationSource();\n }\n\n if (_registeredPools[pool]) {\n revert PoolAlreadyRegistered(pool);\n }\n\n _registeredPools[pool] = true;\n\n (uint256 protocolSwapFeePercentage, bool swapFeeIsOverride) = oldFeeController.getPoolProtocolSwapFeeInfo(pool);\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: protocolSwapFeePercentage.toUint64(),\n isOverride: swapFeeIsOverride\n });\n\n (uint256 protocolYieldFeePercentage, bool yieldFeeIsOverride) = oldFeeController.getPoolProtocolYieldFeeInfo(\n pool\n );\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: protocolYieldFeePercentage.toUint64(),\n isOverride: yieldFeeIsOverride\n });\n\n // On the first migration, these functions won't exist, as they were not included in the originally deployed\n // contract. This is ok, as the first time the contract will be migrated, there will be no pool creators.\n // In the event a pool that did have a pool creator was missed, the pool creator can simply set the fee\n // percentage again on the new controller. The fact that a pool has a pool creator cannot be lost, as this\n // is stored in the Vault on initial registration.\n try oldFeeController.getPoolCreatorSwapFeePercentage(pool) returns (uint256 poolCreatorSwapFeePercentage) {\n _poolCreatorSwapFeePercentages[pool] = poolCreatorSwapFeePercentage;\n } catch {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n try oldFeeController.getPoolCreatorYieldFeePercentage(pool) returns (uint256 poolCreatorYieldFeePercentage) {\n _poolCreatorYieldFeePercentages[pool] = poolCreatorYieldFeePercentage;\n } catch {\n // solhint-disable-previous-line no-empty-blocks\n }\n }\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeController\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external onlyVault returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage) {\n _registeredPools[pool] = true;\n\n // Set local storage of the actual percentages for the pool (default to global).\n aggregateSwapFeePercentage = protocolFeeExempt ? 0 : _globalProtocolSwapFeePercentage;\n aggregateYieldFeePercentage = protocolFeeExempt ? 0 : _globalProtocolYieldFeePercentage;\n\n // `isOverride` is true if the pool is protocol fee exempt; otherwise, default to false.\n // If exempt, this pool cannot be updated to the current global percentage permissionlessly.\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: aggregateSwapFeePercentage.toUint64(),\n isOverride: protocolFeeExempt\n });\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: aggregateYieldFeePercentage.toUint64(),\n isOverride: protocolFeeExempt\n });\n\n // Allow tracking pool fee percentages in all cases (e.g., when the pool is protocol-fee exempt).\n emit InitialPoolAggregateSwapFeePercentage(pool, aggregateSwapFeePercentage, protocolFeeExempt);\n emit InitialPoolAggregateYieldFeePercentage(pool, aggregateYieldFeePercentage, protocolFeeExempt);\n\n emit PoolRegisteredWithFeeController(pool, poolCreator, protocolFeeExempt);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setGlobalProtocolSwapFeePercentage(uint256 newProtocolSwapFeePercentage) external authenticate {\n _setGlobalProtocolSwapFeePercentage(newProtocolSwapFeePercentage);\n }\n\n function _setGlobalProtocolSwapFeePercentage(\n uint256 newProtocolSwapFeePercentage\n ) internal withValidSwapFee(newProtocolSwapFeePercentage) {\n _globalProtocolSwapFeePercentage = newProtocolSwapFeePercentage;\n\n emit GlobalProtocolSwapFeePercentageChanged(newProtocolSwapFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setGlobalProtocolYieldFeePercentage(uint256 newProtocolYieldFeePercentage) external authenticate {\n _setGlobalProtocolYieldFeePercentage(newProtocolYieldFeePercentage);\n }\n\n function _setGlobalProtocolYieldFeePercentage(\n uint256 newProtocolYieldFeePercentage\n ) internal withValidYieldFee(newProtocolYieldFeePercentage) {\n _globalProtocolYieldFeePercentage = newProtocolYieldFeePercentage;\n\n emit GlobalProtocolYieldFeePercentageChanged(newProtocolYieldFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setProtocolSwapFeePercentage(\n address pool,\n uint256 newProtocolSwapFeePercentage\n ) external authenticate withValidSwapFee(newProtocolSwapFeePercentage) withLatestFees(pool) {\n _updatePoolSwapFeePercentage(pool, newProtocolSwapFeePercentage, true);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setProtocolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage\n ) external authenticate withValidYieldFee(newProtocolYieldFeePercentage) withLatestFees(pool) {\n _updatePoolYieldFeePercentage(pool, newProtocolYieldFeePercentage, true);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setPoolCreatorSwapFeePercentage(\n address pool,\n uint256 poolCreatorSwapFeePercentage\n ) external onlyPoolCreator(pool) withValidPoolCreatorFee(poolCreatorSwapFeePercentage) withLatestFees(pool) {\n _setPoolCreatorFeePercentage(pool, poolCreatorSwapFeePercentage, ProtocolFeeType.SWAP);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setPoolCreatorYieldFeePercentage(\n address pool,\n uint256 poolCreatorYieldFeePercentage\n ) external onlyPoolCreator(pool) withValidPoolCreatorFee(poolCreatorYieldFeePercentage) withLatestFees(pool) {\n _setPoolCreatorFeePercentage(pool, poolCreatorYieldFeePercentage, ProtocolFeeType.YIELD);\n }\n\n function _setPoolCreatorFeePercentage(\n address pool,\n uint256 poolCreatorFeePercentage,\n ProtocolFeeType feeType\n ) internal {\n // Need to set locally, and update the aggregate percentage in the Vault.\n if (feeType == ProtocolFeeType.SWAP) {\n _poolCreatorSwapFeePercentages[pool] = poolCreatorFeePercentage;\n\n // The Vault will also emit an `AggregateSwapFeePercentageChanged` event.\n _vault.updateAggregateSwapFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.SWAP));\n\n emit PoolCreatorSwapFeePercentageChanged(pool, poolCreatorFeePercentage);\n } else {\n _poolCreatorYieldFeePercentages[pool] = poolCreatorFeePercentage;\n\n // The Vault will also emit an `AggregateYieldFeePercentageChanged` event.\n _vault.updateAggregateYieldFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.YIELD));\n\n emit PoolCreatorYieldFeePercentageChanged(pool, poolCreatorFeePercentage);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawProtocolFees(address pool, address recipient) external authenticate {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolTokens[i];\n\n _withdrawProtocolFees(pool, recipient, token);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external authenticate {\n // Revert if the pool is not registered or if the token does not belong to the pool.\n _vault.getPoolTokenCountAndIndexOfToken(pool, token);\n _withdrawProtocolFees(pool, recipient, token);\n }\n\n function _withdrawProtocolFees(address pool, address recipient, IERC20 token) internal {\n uint256 amountToWithdraw = _protocolFeeAmounts[pool][token];\n if (amountToWithdraw > 0) {\n _protocolFeeAmounts[pool][token] = 0;\n token.safeTransfer(recipient, amountToWithdraw);\n\n emit ProtocolFeesWithdrawn(pool, token, recipient, amountToWithdraw);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawPoolCreatorFees(address pool, address recipient) external onlyPoolCreator(pool) {\n _withdrawPoolCreatorFees(pool, recipient);\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawPoolCreatorFees(address pool) external {\n _withdrawPoolCreatorFees(pool, _getPoolCreator(pool));\n }\n\n function _withdrawPoolCreatorFees(address pool, address recipient) private {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolTokens[i];\n\n uint256 amountToWithdraw = _poolCreatorFeeAmounts[pool][token];\n if (amountToWithdraw > 0) {\n _poolCreatorFeeAmounts[pool][token] = 0;\n token.safeTransfer(recipient, amountToWithdraw);\n\n emit PoolCreatorFeesWithdrawn(pool, token, recipient, amountToWithdraw);\n }\n }\n }\n\n /// @dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage.\n function _updatePoolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage, bool isOverride) private {\n // Update local storage of the raw percentage.\n //\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: newProtocolSwapFeePercentage.toUint64(),\n isOverride: isOverride\n });\n\n // Update the resulting aggregate swap fee value in the Vault (PoolConfig).\n _vault.updateAggregateSwapFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.SWAP));\n\n emit ProtocolSwapFeePercentageChanged(pool, newProtocolSwapFeePercentage);\n }\n\n /// @dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage.\n function _updatePoolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage,\n bool isOverride\n ) private {\n // Update local storage of the raw percentage.\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: newProtocolYieldFeePercentage.toUint64(),\n isOverride: isOverride\n });\n\n // Update the resulting aggregate yield fee value in the Vault (PoolConfig).\n _vault.updateAggregateYieldFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.YIELD));\n\n emit ProtocolYieldFeePercentageChanged(pool, newProtocolYieldFeePercentage);\n }\n\n function _ensureValidPrecision(uint256 feePercentage) private pure {\n // Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n // precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n // corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n // Ensure there will be no precision loss in the Vault - which would lead to a discrepancy between the\n // aggregate fee calculated here and that stored in the Vault.\n if ((feePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR != feePercentage) {\n revert IVaultErrors.FeePrecisionTooHigh();\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { CommonAuthentication } from \"./CommonAuthentication.sol\";\n\n/**\n * @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n * @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n * functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n * function name.\n */\nabstract contract SingletonAuthentication is CommonAuthentication {\n // Use the contract's own address to disambiguate action identifiers.\n constructor(IVault vault) CommonAuthentication(vault, bytes32(uint256(uint160(address(this))))) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /**\n * @notice Get the address of the Balancer Vault.\n * @dev This function is virtual to allow for overriding in derived contracts which also inherits contracts with\n * `getVault()` definition.\n * @return vault An interface pointer to the Vault\n */\n function getVault() public view virtual returns (IVault) {\n return _getVault();\n }\n\n /**\n * @notice Get the address of the Authorizer.\n * @return authorizer An interface pointer to the Authorizer\n */\n function getAuthorizer() public view returns (IAuthorizer) {\n return getVault().getAuthorizer();\n }\n}\n"},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\n/// @notice Contract that shares the modifier `onlyVault`.\ncontract VaultGuard {\n IVault internal immutable _vault;\n\n constructor(IVault vault) {\n _vault = vault;\n }\n\n modifier onlyVault() {\n _ensureOnlyVault();\n _;\n }\n\n function _ensureOnlyVault() private view {\n if (msg.sender != address(_vault)) {\n revert IVaultErrors.SenderIsNotVault(msg.sender);\n }\n }\n}\n"},"@openzeppelin/contracts/access/Ownable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n constructor(address initialOwner) {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n"},"@openzeppelin/contracts/access/Ownable2Step.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (access/Ownable2Step.sol)\n\npragma solidity ^0.8.20;\n\nimport {Ownable} from \"./Ownable.sol\";\n\n/**\n * @dev Contract module which provides access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * This extension of the {Ownable} contract includes a two-step mechanism to transfer\n * ownership, where the new owner must call {acceptOwnership} in order to replace the\n * old one. This can help prevent common mistakes, such as transfers of ownership to\n * incorrect accounts, or to contracts that are unable to interact with the\n * permission system.\n *\n * The initial owner is specified at deployment time in the constructor for `Ownable`. This\n * can later be changed with {transferOwnership} and {acceptOwnership}.\n *\n * This module is used through inheritance. It will make available all functions\n * from parent (Ownable).\n */\nabstract contract Ownable2Step is Ownable {\n address private _pendingOwner;\n\n event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Returns the address of the pending owner.\n */\n function pendingOwner() public view virtual returns (address) {\n return _pendingOwner;\n }\n\n /**\n * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\n * Can only be called by the current owner.\n *\n * Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\n */\n function transferOwnership(address newOwner) public virtual override onlyOwner {\n _pendingOwner = newOwner;\n emit OwnershipTransferStarted(owner(), newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual override {\n delete _pendingOwner;\n super._transferOwnership(newOwner);\n }\n\n /**\n * @dev The new owner accepts the ownership transfer.\n */\n function acceptOwnership() public virtual {\n address sender = _msgSender();\n if (pendingOwner() != sender) {\n revert OwnableUnauthorizedAccount(sender);\n }\n _transferOwnership(sender);\n }\n}\n"},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/draft-IERC6093.sol)\npragma solidity >=0.8.4;\n\n/**\n * @dev Standard ERC-20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\n */\ninterface IERC20Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC20InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC20InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n * @param allowance Amount of tokens a `spender` is allowed to operate with.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC20InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC-721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\n */\ninterface IERC721Errors {\n /**\n * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\n * Used in balance queries.\n * @param owner Address of the current owner of a token.\n */\n error ERC721InvalidOwner(address owner);\n\n /**\n * @dev Indicates a `tokenId` whose `owner` is the zero address.\n * @param tokenId Identifier number of a token.\n */\n error ERC721NonexistentToken(uint256 tokenId);\n\n /**\n * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param tokenId Identifier number of a token.\n * @param owner Address of the current owner of a token.\n */\n error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC721InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC721InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param tokenId Identifier number of a token.\n */\n error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC721InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC-1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\n */\ninterface IERC1155Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n * @param tokenId Identifier number of a token.\n */\n error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC1155InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC1155InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param owner Address of the current owner of a token.\n */\n error ERC1155MissingApprovalForAll(address operator, address owner);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC1155InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC1155InvalidOperator(address operator);\n\n /**\n * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n * Used in batch transfers.\n * @param idsLength Length of the array of token identifiers\n * @param valuesLength Length of the array of token amounts\n */\n error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n"},"@openzeppelin/contracts/interfaces/IERC1271.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC1271.sol)\n\npragma solidity >=0.5.0;\n\n/**\n * @dev Interface of the ERC-1271 standard signature validation method for\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\n */\ninterface IERC1271 {\n /**\n * @dev Should return whether the signature provided is valid for the provided data\n * @param hash Hash of the data to be signed\n * @param signature Signature byte array associated with `hash`\n */\n function isValidSignature(bytes32 hash, bytes calldata signature) external view returns (bytes4 magicValue);\n}\n"},"@openzeppelin/contracts/interfaces/IERC1363.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC1363.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n /*\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n * 0xb0202a11 ===\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n */\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @param data Additional data with no specified format, sent in call to `spender`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n"},"@openzeppelin/contracts/interfaces/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC165.sol)\n\npragma solidity >=0.4.16;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n"},"@openzeppelin/contracts/interfaces/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC20.sol)\n\npragma solidity >=0.4.16;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n"},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC4626.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\nimport {IERC20Metadata} from \"../token/ERC20/extensions/IERC20Metadata.sol\";\n\n/**\n * @dev Interface of the ERC-4626 \"Tokenized Vault Standard\", as defined in\n * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\n */\ninterface IERC4626 is IERC20, IERC20Metadata {\n event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);\n\n event Withdraw(\n address indexed sender,\n address indexed receiver,\n address indexed owner,\n uint256 assets,\n uint256 shares\n );\n\n /**\n * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n *\n * - MUST be an ERC-20 token contract.\n * - MUST NOT revert.\n */\n function asset() external view returns (address assetTokenAddress);\n\n /**\n * @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n *\n * - SHOULD include any compounding that occurs from yield.\n * - MUST be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT revert.\n */\n function totalAssets() external view returns (uint256 totalManagedAssets);\n\n /**\n * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToShares(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToAssets(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n * through a deposit call.\n *\n * - MUST return a limited value if receiver is subject to some deposit limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n * - MUST NOT revert.\n */\n function maxDeposit(address receiver) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n * call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n * in the same transaction.\n * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n * deposit would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewDeposit(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * deposit execution, and are accounted for during deposit.\n * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function deposit(uint256 assets, address receiver) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n * - MUST return a limited value if receiver is subject to some mint limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n * - MUST NOT revert.\n */\n function maxMint(address receiver) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n * in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n * same transaction.\n * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n * would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by minting.\n */\n function previewMint(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n * execution, and are accounted for during mint.\n * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function mint(uint256 shares, address receiver) external returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n * Vault, through a withdraw call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxWithdraw(address owner) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n * call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n * called\n * in the same transaction.\n * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n * the withdrawal would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewWithdraw(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * withdraw execution, and are accounted for during withdraw.\n * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n * through a redeem call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxRedeem(address owner) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their redemption at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n * in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n * same transaction.\n * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n * redemption would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\n */\n function previewRedeem(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * redeem execution, and are accounted for during redeem.\n * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);\n}\n"},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC20Metadata} from \"./extensions/IERC20Metadata.sol\";\nimport {Context} from \"../../utils/Context.sol\";\nimport {IERC20Errors} from \"../../interfaces/draft-IERC6093.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * The default value of {decimals} is 18. To change this, you should override\n * this function so it returns a different value.\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC-20\n * applications.\n */\nabstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {\n mapping(address account => uint256) private _balances;\n\n mapping(address account => mapping(address spender => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n\n /**\n * @dev Sets the values for {name} and {symbol}.\n *\n * Both values are immutable: they can only be set once during construction.\n */\n constructor(string memory name_, string memory symbol_) {\n _name = name_;\n _symbol = symbol_;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view virtual returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view virtual returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the default value returned by this function, unless\n * it's overridden.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view virtual returns (uint8) {\n return 18;\n }\n\n /// @inheritdoc IERC20\n function totalSupply() public view virtual returns (uint256) {\n return _totalSupply;\n }\n\n /// @inheritdoc IERC20\n function balanceOf(address account) public view virtual returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - the caller must have a balance of at least `value`.\n */\n function transfer(address to, uint256 value) public virtual returns (bool) {\n address owner = _msgSender();\n _transfer(owner, to, value);\n return true;\n }\n\n /// @inheritdoc IERC20\n function allowance(address owner, address spender) public view virtual returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n * `transferFrom`. This is semantically equivalent to an infinite approval.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 value) public virtual returns (bool) {\n address owner = _msgSender();\n _approve(owner, spender, value);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\n * Skips emitting an {Approval} event indicating an allowance update. This is not\n * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\n *\n * NOTE: Does not update the allowance if the current allowance\n * is the maximum `uint256`.\n *\n * Requirements:\n *\n * - `from` and `to` cannot be the zero address.\n * - `from` must have a balance of at least `value`.\n * - the caller must have allowance for ``from``'s tokens of at least\n * `value`.\n */\n function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\n address spender = _msgSender();\n _spendAllowance(from, spender, value);\n _transfer(from, to, value);\n return true;\n }\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to`.\n *\n * This internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead.\n */\n function _transfer(address from, address to, uint256 value) internal {\n if (from == address(0)) {\n revert ERC20InvalidSender(address(0));\n }\n if (to == address(0)) {\n revert ERC20InvalidReceiver(address(0));\n }\n _update(from, to, value);\n }\n\n /**\n * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n * this function.\n *\n * Emits a {Transfer} event.\n */\n function _update(address from, address to, uint256 value) internal virtual {\n if (from == address(0)) {\n // Overflow check required: The rest of the code assumes that totalSupply never overflows\n _totalSupply += value;\n } else {\n uint256 fromBalance = _balances[from];\n if (fromBalance < value) {\n revert ERC20InsufficientBalance(from, fromBalance, value);\n }\n unchecked {\n // Overflow not possible: value <= fromBalance <= totalSupply.\n _balances[from] = fromBalance - value;\n }\n }\n\n if (to == address(0)) {\n unchecked {\n // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\n _totalSupply -= value;\n }\n } else {\n unchecked {\n // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\n _balances[to] += value;\n }\n }\n\n emit Transfer(from, to, value);\n }\n\n /**\n * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n * Relies on the `_update` mechanism\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead.\n */\n function _mint(address account, uint256 value) internal {\n if (account == address(0)) {\n revert ERC20InvalidReceiver(address(0));\n }\n _update(address(0), account, value);\n }\n\n /**\n * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n * Relies on the `_update` mechanism.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead\n */\n function _burn(address account, uint256 value) internal {\n if (account == address(0)) {\n revert ERC20InvalidSender(address(0));\n }\n _update(account, address(0), value);\n }\n\n /**\n * @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n *\n * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\n */\n function _approve(address owner, address spender, uint256 value) internal {\n _approve(owner, spender, value, true);\n }\n\n /**\n * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n *\n * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\n * `Approval` event during `transferFrom` operations.\n *\n * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\n * true using the following override:\n *\n * ```solidity\n * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n * super._approve(owner, spender, value, true);\n * }\n * ```\n *\n * Requirements are the same as {_approve}.\n */\n function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\n if (owner == address(0)) {\n revert ERC20InvalidApprover(address(0));\n }\n if (spender == address(0)) {\n revert ERC20InvalidSpender(address(0));\n }\n _allowances[owner][spender] = value;\n if (emitEvent) {\n emit Approval(owner, spender, value);\n }\n }\n\n /**\n * @dev Updates `owner`'s allowance for `spender` based on spent `value`.\n *\n * Does not update the allowance value in case of infinite allowance.\n * Revert if not enough allowance is available.\n *\n * Does not emit an {Approval} event.\n */\n function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\n uint256 currentAllowance = allowance(owner, spender);\n if (currentAllowance < type(uint256).max) {\n if (currentAllowance < value) {\n revert ERC20InsufficientAllowance(spender, currentAllowance, value);\n }\n unchecked {\n _approve(owner, spender, currentAllowance - value, false);\n }\n }\n }\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n /**\n * @dev Returns the name of the token.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n */\n function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\n\npragma solidity >=0.4.16;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n /**\n * @dev An operation with an ERC-20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Variant of {safeTransfer} that returns a bool instead of reverting if the operation is not successful.\n */\n function trySafeTransfer(IERC20 token, address to, uint256 value) internal returns (bool) {\n return _callOptionalReturnBool(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Variant of {safeTransferFrom} that returns a bool instead of reverting if the operation is not successful.\n */\n function trySafeTransferFrom(IERC20 token, address from, address to, uint256 value) internal returns (bool) {\n return _callOptionalReturnBool(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n *\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n * set here.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n safeTransfer(token, to, value);\n } else if (!token.transferAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferFromAndCallRelaxed(\n IERC1363 token,\n address from,\n address to,\n uint256 value,\n bytes memory data\n ) internal {\n if (to.code.length == 0) {\n safeTransferFrom(token, from, to, value);\n } else if (!token.transferFromAndCall(from, to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n * once without retrying, and relies on the returned value to be true.\n *\n * Reverts if the returned value is other than `true`.\n */\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n forceApprove(token, to, value);\n } else if (!token.approveAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n // bubble errors\n if iszero(success) {\n let ptr := mload(0x40)\n returndatacopy(ptr, 0, returndatasize())\n revert(ptr, returndatasize())\n }\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n bool success;\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\n }\n}\n"},"@openzeppelin/contracts/utils/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert Errors.InsufficientBalance(address(this).balance, amount);\n }\n\n (bool success, bytes memory returndata) = recipient.call{value: amount}(\"\");\n if (!success) {\n _revert(returndata);\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {Errors.FailedCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert Errors.InsufficientBalance(address(this).balance, value);\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n * of an unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {Errors.FailedCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n assembly (\"memory-safe\") {\n revert(add(returndata, 0x20), mload(returndata))\n }\n } else {\n revert Errors.FailedCall();\n }\n }\n}\n"},"@openzeppelin/contracts/utils/Arrays.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/Arrays.sol)\n// This file was procedurally generated from scripts/generate/templates/Arrays.js.\n\npragma solidity ^0.8.20;\n\nimport {Comparators} from \"./Comparators.sol\";\nimport {SlotDerivation} from \"./SlotDerivation.sol\";\nimport {StorageSlot} from \"./StorageSlot.sol\";\nimport {Math} from \"./math/Math.sol\";\n\n/**\n * @dev Collection of functions related to array types.\n */\nlibrary Arrays {\n using SlotDerivation for bytes32;\n using StorageSlot for bytes32;\n\n /**\n * @dev Sort an array of uint256 (in memory) following the provided comparator function.\n *\n * This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n * convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n *\n * NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n * array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n * when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n * consume more gas than is available in a block, leading to potential DoS.\n *\n * IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way.\n */\n function sort(\n uint256[] memory array,\n function(uint256, uint256) pure returns (bool) comp\n ) internal pure returns (uint256[] memory) {\n _quickSort(_begin(array), _end(array), comp);\n return array;\n }\n\n /**\n * @dev Variant of {sort} that sorts an array of uint256 in increasing order.\n */\n function sort(uint256[] memory array) internal pure returns (uint256[] memory) {\n sort(array, Comparators.lt);\n return array;\n }\n\n /**\n * @dev Sort an array of address (in memory) following the provided comparator function.\n *\n * This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n * convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n *\n * NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n * array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n * when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n * consume more gas than is available in a block, leading to potential DoS.\n *\n * IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way.\n */\n function sort(\n address[] memory array,\n function(address, address) pure returns (bool) comp\n ) internal pure returns (address[] memory) {\n sort(_castToUint256Array(array), _castToUint256Comp(comp));\n return array;\n }\n\n /**\n * @dev Variant of {sort} that sorts an array of address in increasing order.\n */\n function sort(address[] memory array) internal pure returns (address[] memory) {\n sort(_castToUint256Array(array), Comparators.lt);\n return array;\n }\n\n /**\n * @dev Sort an array of bytes32 (in memory) following the provided comparator function.\n *\n * This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n * convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n *\n * NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n * array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n * when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n * consume more gas than is available in a block, leading to potential DoS.\n *\n * IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way.\n */\n function sort(\n bytes32[] memory array,\n function(bytes32, bytes32) pure returns (bool) comp\n ) internal pure returns (bytes32[] memory) {\n sort(_castToUint256Array(array), _castToUint256Comp(comp));\n return array;\n }\n\n /**\n * @dev Variant of {sort} that sorts an array of bytes32 in increasing order.\n */\n function sort(bytes32[] memory array) internal pure returns (bytes32[] memory) {\n sort(_castToUint256Array(array), Comparators.lt);\n return array;\n }\n\n /**\n * @dev Performs a quick sort of a segment of memory. The segment sorted starts at `begin` (inclusive), and stops\n * at end (exclusive). Sorting follows the `comp` comparator.\n *\n * Invariant: `begin <= end`. This is the case when initially called by {sort} and is preserved in subcalls.\n *\n * IMPORTANT: Memory locations between `begin` and `end` are not validated/zeroed. This function should\n * be used only if the limits are within a memory array.\n */\n function _quickSort(uint256 begin, uint256 end, function(uint256, uint256) pure returns (bool) comp) private pure {\n unchecked {\n if (end - begin < 0x40) return;\n\n // Use first element as pivot\n uint256 pivot = _mload(begin);\n // Position where the pivot should be at the end of the loop\n uint256 pos = begin;\n\n for (uint256 it = begin + 0x20; it < end; it += 0x20) {\n if (comp(_mload(it), pivot)) {\n // If the value stored at the iterator's position comes before the pivot, we increment the\n // position of the pivot and move the value there.\n pos += 0x20;\n _swap(pos, it);\n }\n }\n\n _swap(begin, pos); // Swap pivot into place\n _quickSort(begin, pos, comp); // Sort the left side of the pivot\n _quickSort(pos + 0x20, end, comp); // Sort the right side of the pivot\n }\n }\n\n /**\n * @dev Pointer to the memory location of the first element of `array`.\n */\n function _begin(uint256[] memory array) private pure returns (uint256 ptr) {\n assembly (\"memory-safe\") {\n ptr := add(array, 0x20)\n }\n }\n\n /**\n * @dev Pointer to the memory location of the first memory word (32bytes) after `array`. This is the memory word\n * that comes just after the last element of the array.\n */\n function _end(uint256[] memory array) private pure returns (uint256 ptr) {\n unchecked {\n return _begin(array) + array.length * 0x20;\n }\n }\n\n /**\n * @dev Load memory word (as a uint256) at location `ptr`.\n */\n function _mload(uint256 ptr) private pure returns (uint256 value) {\n assembly {\n value := mload(ptr)\n }\n }\n\n /**\n * @dev Swaps the elements memory location `ptr1` and `ptr2`.\n */\n function _swap(uint256 ptr1, uint256 ptr2) private pure {\n assembly {\n let value1 := mload(ptr1)\n let value2 := mload(ptr2)\n mstore(ptr1, value2)\n mstore(ptr2, value1)\n }\n }\n\n /// @dev Helper: low level cast address memory array to uint256 memory array\n function _castToUint256Array(address[] memory input) private pure returns (uint256[] memory output) {\n assembly {\n output := input\n }\n }\n\n /// @dev Helper: low level cast bytes32 memory array to uint256 memory array\n function _castToUint256Array(bytes32[] memory input) private pure returns (uint256[] memory output) {\n assembly {\n output := input\n }\n }\n\n /// @dev Helper: low level cast address comp function to uint256 comp function\n function _castToUint256Comp(\n function(address, address) pure returns (bool) input\n ) private pure returns (function(uint256, uint256) pure returns (bool) output) {\n assembly {\n output := input\n }\n }\n\n /// @dev Helper: low level cast bytes32 comp function to uint256 comp function\n function _castToUint256Comp(\n function(bytes32, bytes32) pure returns (bool) input\n ) private pure returns (function(uint256, uint256) pure returns (bool) output) {\n assembly {\n output := input\n }\n }\n\n /**\n * @dev Searches a sorted `array` and returns the first index that contains\n * a value greater or equal to `element`. If no such index exists (i.e. all\n * values in the array are strictly less than `element`), the array length is\n * returned. Time complexity O(log n).\n *\n * NOTE: The `array` is expected to be sorted in ascending order, and to\n * contain no repeated elements.\n *\n * IMPORTANT: Deprecated. This implementation behaves as {lowerBound} but lacks\n * support for repeated elements in the array. The {lowerBound} function should\n * be used instead.\n */\n function findUpperBound(uint256[] storage array, uint256 element) internal view returns (uint256) {\n uint256 low = 0;\n uint256 high = array.length;\n\n if (high == 0) {\n return 0;\n }\n\n while (low < high) {\n uint256 mid = Math.average(low, high);\n\n // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n // because Math.average rounds towards zero (it does integer division with truncation).\n if (unsafeAccess(array, mid).value > element) {\n high = mid;\n } else {\n low = mid + 1;\n }\n }\n\n // At this point `low` is the exclusive upper bound. We will return the inclusive upper bound.\n if (low > 0 && unsafeAccess(array, low - 1).value == element) {\n return low - 1;\n } else {\n return low;\n }\n }\n\n /**\n * @dev Searches an `array` sorted in ascending order and returns the first\n * index that contains a value greater or equal than `element`. If no such index\n * exists (i.e. all values in the array are strictly less than `element`), the array\n * length is returned. Time complexity O(log n).\n *\n * See C++'s https://en.cppreference.com/w/cpp/algorithm/lower_bound[lower_bound].\n */\n function lowerBound(uint256[] storage array, uint256 element) internal view returns (uint256) {\n uint256 low = 0;\n uint256 high = array.length;\n\n if (high == 0) {\n return 0;\n }\n\n while (low < high) {\n uint256 mid = Math.average(low, high);\n\n // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n // because Math.average rounds towards zero (it does integer division with truncation).\n if (unsafeAccess(array, mid).value < element) {\n // this cannot overflow because mid < high\n unchecked {\n low = mid + 1;\n }\n } else {\n high = mid;\n }\n }\n\n return low;\n }\n\n /**\n * @dev Searches an `array` sorted in ascending order and returns the first\n * index that contains a value strictly greater than `element`. If no such index\n * exists (i.e. all values in the array are strictly less than `element`), the array\n * length is returned. Time complexity O(log n).\n *\n * See C++'s https://en.cppreference.com/w/cpp/algorithm/upper_bound[upper_bound].\n */\n function upperBound(uint256[] storage array, uint256 element) internal view returns (uint256) {\n uint256 low = 0;\n uint256 high = array.length;\n\n if (high == 0) {\n return 0;\n }\n\n while (low < high) {\n uint256 mid = Math.average(low, high);\n\n // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n // because Math.average rounds towards zero (it does integer division with truncation).\n if (unsafeAccess(array, mid).value > element) {\n high = mid;\n } else {\n // this cannot overflow because mid < high\n unchecked {\n low = mid + 1;\n }\n }\n }\n\n return low;\n }\n\n /**\n * @dev Same as {lowerBound}, but with an array in memory.\n */\n function lowerBoundMemory(uint256[] memory array, uint256 element) internal pure returns (uint256) {\n uint256 low = 0;\n uint256 high = array.length;\n\n if (high == 0) {\n return 0;\n }\n\n while (low < high) {\n uint256 mid = Math.average(low, high);\n\n // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n // because Math.average rounds towards zero (it does integer division with truncation).\n if (unsafeMemoryAccess(array, mid) < element) {\n // this cannot overflow because mid < high\n unchecked {\n low = mid + 1;\n }\n } else {\n high = mid;\n }\n }\n\n return low;\n }\n\n /**\n * @dev Same as {upperBound}, but with an array in memory.\n */\n function upperBoundMemory(uint256[] memory array, uint256 element) internal pure returns (uint256) {\n uint256 low = 0;\n uint256 high = array.length;\n\n if (high == 0) {\n return 0;\n }\n\n while (low < high) {\n uint256 mid = Math.average(low, high);\n\n // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n // because Math.average rounds towards zero (it does integer division with truncation).\n if (unsafeMemoryAccess(array, mid) > element) {\n high = mid;\n } else {\n // this cannot overflow because mid < high\n unchecked {\n low = mid + 1;\n }\n }\n }\n\n return low;\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeAccess(address[] storage arr, uint256 pos) internal pure returns (StorageSlot.AddressSlot storage) {\n bytes32 slot;\n assembly (\"memory-safe\") {\n slot := arr.slot\n }\n return slot.deriveArray().offset(pos).getAddressSlot();\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeAccess(bytes32[] storage arr, uint256 pos) internal pure returns (StorageSlot.Bytes32Slot storage) {\n bytes32 slot;\n assembly (\"memory-safe\") {\n slot := arr.slot\n }\n return slot.deriveArray().offset(pos).getBytes32Slot();\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeAccess(uint256[] storage arr, uint256 pos) internal pure returns (StorageSlot.Uint256Slot storage) {\n bytes32 slot;\n assembly (\"memory-safe\") {\n slot := arr.slot\n }\n return slot.deriveArray().offset(pos).getUint256Slot();\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeAccess(bytes[] storage arr, uint256 pos) internal pure returns (StorageSlot.BytesSlot storage) {\n bytes32 slot;\n assembly (\"memory-safe\") {\n slot := arr.slot\n }\n return slot.deriveArray().offset(pos).getBytesSlot();\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeAccess(string[] storage arr, uint256 pos) internal pure returns (StorageSlot.StringSlot storage) {\n bytes32 slot;\n assembly (\"memory-safe\") {\n slot := arr.slot\n }\n return slot.deriveArray().offset(pos).getStringSlot();\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeMemoryAccess(address[] memory arr, uint256 pos) internal pure returns (address res) {\n assembly {\n res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n }\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeMemoryAccess(bytes32[] memory arr, uint256 pos) internal pure returns (bytes32 res) {\n assembly {\n res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n }\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeMemoryAccess(uint256[] memory arr, uint256 pos) internal pure returns (uint256 res) {\n assembly {\n res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n }\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeMemoryAccess(bytes[] memory arr, uint256 pos) internal pure returns (bytes memory res) {\n assembly {\n res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n }\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeMemoryAccess(string[] memory arr, uint256 pos) internal pure returns (string memory res) {\n assembly {\n res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n }\n }\n\n /**\n * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n *\n * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n */\n function unsafeSetLength(address[] storage array, uint256 len) internal {\n assembly (\"memory-safe\") {\n sstore(array.slot, len)\n }\n }\n\n /**\n * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n *\n * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n */\n function unsafeSetLength(bytes32[] storage array, uint256 len) internal {\n assembly (\"memory-safe\") {\n sstore(array.slot, len)\n }\n }\n\n /**\n * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n *\n * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n */\n function unsafeSetLength(uint256[] storage array, uint256 len) internal {\n assembly (\"memory-safe\") {\n sstore(array.slot, len)\n }\n }\n\n /**\n * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n *\n * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n */\n function unsafeSetLength(bytes[] storage array, uint256 len) internal {\n assembly (\"memory-safe\") {\n sstore(array.slot, len)\n }\n }\n\n /**\n * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n *\n * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n */\n function unsafeSetLength(string[] storage array, uint256 len) internal {\n assembly (\"memory-safe\") {\n sstore(array.slot, len)\n }\n }\n}\n"},"@openzeppelin/contracts/utils/Comparators.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Comparators.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides a set of functions to compare values.\n *\n * _Available since v5.1._\n */\nlibrary Comparators {\n function lt(uint256 a, uint256 b) internal pure returns (bool) {\n return a < b;\n }\n\n function gt(uint256 a, uint256 b) internal pure returns (bool) {\n return a > b;\n }\n}\n"},"@openzeppelin/contracts/utils/Context.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n"},"@openzeppelin/contracts/utils/Errors.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error InsufficientBalance(uint256 balance, uint256 needed);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedCall();\n\n /**\n * @dev The deployment failed.\n */\n error FailedDeployment();\n\n /**\n * @dev A necessary precompile is missing.\n */\n error MissingPrecompile(address);\n}\n"},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/IERC165.sol)\n\npragma solidity >=0.4.16;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"},"@openzeppelin/contracts/utils/math/Math.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.20;\n\nimport {Panic} from \"../Panic.sol\";\nimport {SafeCast} from \"./SafeCast.sol\";\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n enum Rounding {\n Floor, // Toward negative infinity\n Ceil, // Toward positive infinity\n Trunc, // Toward zero\n Expand // Away from zero\n }\n\n /**\n * @dev Return the 512-bit addition of two uint256.\n *\n * The result is stored in two 256 variables such that sum = high * 2²⁵⁶ + low.\n */\n function add512(uint256 a, uint256 b) internal pure returns (uint256 high, uint256 low) {\n assembly (\"memory-safe\") {\n low := add(a, b)\n high := lt(low, a)\n }\n }\n\n /**\n * @dev Return the 512-bit multiplication of two uint256.\n *\n * The result is stored in two 256 variables such that product = high * 2²⁵⁶ + low.\n */\n function mul512(uint256 a, uint256 b) internal pure returns (uint256 high, uint256 low) {\n // 512-bit multiply [high low] = x * y. Compute the product mod 2²⁵⁶ and mod 2²⁵⁶ - 1, then use\n // the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = high * 2²⁵⁶ + low.\n assembly (\"memory-safe\") {\n let mm := mulmod(a, b, not(0))\n low := mul(a, b)\n high := sub(sub(mm, low), lt(mm, low))\n }\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, with a success flag (no overflow).\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n uint256 c = a + b;\n success = c >= a;\n result = c * SafeCast.toUint(success);\n }\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, with a success flag (no overflow).\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n uint256 c = a - b;\n success = c <= a;\n result = c * SafeCast.toUint(success);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with a success flag (no overflow).\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n uint256 c = a * b;\n assembly (\"memory-safe\") {\n // Only true when the multiplication doesn't overflow\n // (c / a == b) || (a == 0)\n success := or(eq(div(c, a), b), iszero(a))\n }\n // equivalent to: success ? c : 0\n result = c * SafeCast.toUint(success);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a success flag (no division by zero).\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n success = b > 0;\n assembly (\"memory-safe\") {\n // The `DIV` opcode returns zero when the denominator is 0.\n result := div(a, b)\n }\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a success flag (no division by zero).\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n success = b > 0;\n assembly (\"memory-safe\") {\n // The `MOD` opcode returns zero when the denominator is 0.\n result := mod(a, b)\n }\n }\n }\n\n /**\n * @dev Unsigned saturating addition, bounds to `2²⁵⁶ - 1` instead of overflowing.\n */\n function saturatingAdd(uint256 a, uint256 b) internal pure returns (uint256) {\n (bool success, uint256 result) = tryAdd(a, b);\n return ternary(success, result, type(uint256).max);\n }\n\n /**\n * @dev Unsigned saturating subtraction, bounds to zero instead of overflowing.\n */\n function saturatingSub(uint256 a, uint256 b) internal pure returns (uint256) {\n (, uint256 result) = trySub(a, b);\n return result;\n }\n\n /**\n * @dev Unsigned saturating multiplication, bounds to `2²⁵⁶ - 1` instead of overflowing.\n */\n function saturatingMul(uint256 a, uint256 b) internal pure returns (uint256) {\n (bool success, uint256 result) = tryMul(a, b);\n return ternary(success, result, type(uint256).max);\n }\n\n /**\n * @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n *\n * IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n * However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n * one branch when needed, making this function more expensive.\n */\n function ternary(bool condition, uint256 a, uint256 b) internal pure returns (uint256) {\n unchecked {\n // branchless ternary works because:\n // b ^ (a ^ b) == a\n // b ^ 0 == b\n return b ^ ((a ^ b) * SafeCast.toUint(condition));\n }\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return ternary(a > b, a, b);\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return ternary(a < b, a, b);\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds towards infinity instead\n * of rounding towards zero.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n if (b == 0) {\n // Guarantee the same behavior as in a regular Solidity division.\n Panic.panic(Panic.DIVISION_BY_ZERO);\n }\n\n // The following calculation ensures accurate ceiling division without overflow.\n // Since a is non-zero, (a - 1) / b will not overflow.\n // The largest possible result occurs when (a - 1) / b is type(uint256).max,\n // but the largest value we can obtain is type(uint256).max - 1, which happens\n // when a = type(uint256).max and b = 1.\n unchecked {\n return SafeCast.toUint(a > 0) * ((a - 1) / b + 1);\n }\n }\n\n /**\n * @dev Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n * denominator == 0.\n *\n * Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n * Uniswap Labs also under MIT license.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\n unchecked {\n (uint256 high, uint256 low) = mul512(x, y);\n\n // Handle non-overflow cases, 256 by 256 division.\n if (high == 0) {\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\n // The surrounding unchecked block does not change this fact.\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\n return low / denominator;\n }\n\n // Make sure the result is less than 2²⁵⁶. Also prevents denominator == 0.\n if (denominator <= high) {\n Panic.panic(ternary(denominator == 0, Panic.DIVISION_BY_ZERO, Panic.UNDER_OVERFLOW));\n }\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [high low].\n uint256 remainder;\n assembly (\"memory-safe\") {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n high := sub(high, gt(remainder, low))\n low := sub(low, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\n // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\n\n uint256 twos = denominator & (0 - denominator);\n assembly (\"memory-safe\") {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [high low] by twos.\n low := div(low, twos)\n\n // Flip twos such that it is 2²⁵⁶ / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from high into low.\n low |= high * twos;\n\n // Invert denominator mod 2²⁵⁶. Now that denominator is an odd number, it has an inverse modulo 2²⁵⁶ such\n // that denominator * inv ≡ 1 mod 2²⁵⁶. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv ≡ 1 mod 2⁴.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\n // works in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2⁸\n inverse *= 2 - denominator * inverse; // inverse mod 2¹⁶\n inverse *= 2 - denominator * inverse; // inverse mod 2³²\n inverse *= 2 - denominator * inverse; // inverse mod 2⁶⁴\n inverse *= 2 - denominator * inverse; // inverse mod 2¹²⁸\n inverse *= 2 - denominator * inverse; // inverse mod 2²⁵⁶\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2²⁵⁶. Since the preconditions guarantee that the outcome is\n // less than 2²⁵⁶, this is the final result. We don't need to compute the high bits of the result and high\n // is no longer required.\n result = low * inverse;\n return result;\n }\n }\n\n /**\n * @dev Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\n return mulDiv(x, y, denominator) + SafeCast.toUint(unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0);\n }\n\n /**\n * @dev Calculates floor(x * y >> n) with full precision. Throws if result overflows a uint256.\n */\n function mulShr(uint256 x, uint256 y, uint8 n) internal pure returns (uint256 result) {\n unchecked {\n (uint256 high, uint256 low) = mul512(x, y);\n if (high >= 1 << n) {\n Panic.panic(Panic.UNDER_OVERFLOW);\n }\n return (high << (256 - n)) | (low >> n);\n }\n }\n\n /**\n * @dev Calculates x * y >> n with full precision, following the selected rounding direction.\n */\n function mulShr(uint256 x, uint256 y, uint8 n, Rounding rounding) internal pure returns (uint256) {\n return mulShr(x, y, n) + SafeCast.toUint(unsignedRoundsUp(rounding) && mulmod(x, y, 1 << n) > 0);\n }\n\n /**\n * @dev Calculate the modular multiplicative inverse of a number in Z/nZ.\n *\n * If n is a prime, then Z/nZ is a field. In that case all elements are inversible, except 0.\n * If n is not a prime, then Z/nZ is not a field, and some elements might not be inversible.\n *\n * If the input value is not inversible, 0 is returned.\n *\n * NOTE: If you know for sure that n is (big) a prime, it may be cheaper to use Fermat's little theorem and get the\n * inverse using `Math.modExp(a, n - 2, n)`. See {invModPrime}.\n */\n function invMod(uint256 a, uint256 n) internal pure returns (uint256) {\n unchecked {\n if (n == 0) return 0;\n\n // The inverse modulo is calculated using the Extended Euclidean Algorithm (iterative version)\n // Used to compute integers x and y such that: ax + ny = gcd(a, n).\n // When the gcd is 1, then the inverse of a modulo n exists and it's x.\n // ax + ny = 1\n // ax = 1 + (-y)n\n // ax ≡ 1 (mod n) # x is the inverse of a modulo n\n\n // If the remainder is 0 the gcd is n right away.\n uint256 remainder = a % n;\n uint256 gcd = n;\n\n // Therefore the initial coefficients are:\n // ax + ny = gcd(a, n) = n\n // 0a + 1n = n\n int256 x = 0;\n int256 y = 1;\n\n while (remainder != 0) {\n uint256 quotient = gcd / remainder;\n\n (gcd, remainder) = (\n // The old remainder is the next gcd to try.\n remainder,\n // Compute the next remainder.\n // Can't overflow given that (a % gcd) * (gcd // (a % gcd)) <= gcd\n // where gcd is at most n (capped to type(uint256).max)\n gcd - remainder * quotient\n );\n\n (x, y) = (\n // Increment the coefficient of a.\n y,\n // Decrement the coefficient of n.\n // Can overflow, but the result is casted to uint256 so that the\n // next value of y is \"wrapped around\" to a value between 0 and n - 1.\n x - y * int256(quotient)\n );\n }\n\n if (gcd != 1) return 0; // No inverse exists.\n return ternary(x < 0, n - uint256(-x), uint256(x)); // Wrap the result if it's negative.\n }\n }\n\n /**\n * @dev Variant of {invMod}. More efficient, but only works if `p` is known to be a prime greater than `2`.\n *\n * From https://en.wikipedia.org/wiki/Fermat%27s_little_theorem[Fermat's little theorem], we know that if p is\n * prime, then `a**(p-1) ≡ 1 mod p`. As a consequence, we have `a * a**(p-2) ≡ 1 mod p`, which means that\n * `a**(p-2)` is the modular multiplicative inverse of a in Fp.\n *\n * NOTE: this function does NOT check that `p` is a prime greater than `2`.\n */\n function invModPrime(uint256 a, uint256 p) internal view returns (uint256) {\n unchecked {\n return Math.modExp(a, p - 2, p);\n }\n }\n\n /**\n * @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m)\n *\n * Requirements:\n * - modulus can't be zero\n * - underlying staticcall to precompile must succeed\n *\n * IMPORTANT: The result is only valid if the underlying call succeeds. When using this function, make\n * sure the chain you're using it on supports the precompiled contract for modular exponentiation\n * at address 0x05 as specified in https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise,\n * the underlying function will succeed given the lack of a revert, but the result may be incorrectly\n * interpreted as 0.\n */\n function modExp(uint256 b, uint256 e, uint256 m) internal view returns (uint256) {\n (bool success, uint256 result) = tryModExp(b, e, m);\n if (!success) {\n Panic.panic(Panic.DIVISION_BY_ZERO);\n }\n return result;\n }\n\n /**\n * @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m).\n * It includes a success flag indicating if the operation succeeded. Operation will be marked as failed if trying\n * to operate modulo 0 or if the underlying precompile reverted.\n *\n * IMPORTANT: The result is only valid if the success flag is true. When using this function, make sure the chain\n * you're using it on supports the precompiled contract for modular exponentiation at address 0x05 as specified in\n * https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise, the underlying function will succeed given the lack\n * of a revert, but the result may be incorrectly interpreted as 0.\n */\n function tryModExp(uint256 b, uint256 e, uint256 m) internal view returns (bool success, uint256 result) {\n if (m == 0) return (false, 0);\n assembly (\"memory-safe\") {\n let ptr := mload(0x40)\n // | Offset | Content | Content (Hex) |\n // |-----------|------------|--------------------------------------------------------------------|\n // | 0x00:0x1f | size of b | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n // | 0x20:0x3f | size of e | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n // | 0x40:0x5f | size of m | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n // | 0x60:0x7f | value of b | 0x<.............................................................b> |\n // | 0x80:0x9f | value of e | 0x<.............................................................e> |\n // | 0xa0:0xbf | value of m | 0x<.............................................................m> |\n mstore(ptr, 0x20)\n mstore(add(ptr, 0x20), 0x20)\n mstore(add(ptr, 0x40), 0x20)\n mstore(add(ptr, 0x60), b)\n mstore(add(ptr, 0x80), e)\n mstore(add(ptr, 0xa0), m)\n\n // Given the result < m, it's guaranteed to fit in 32 bytes,\n // so we can use the memory scratch space located at offset 0.\n success := staticcall(gas(), 0x05, ptr, 0xc0, 0x00, 0x20)\n result := mload(0x00)\n }\n }\n\n /**\n * @dev Variant of {modExp} that supports inputs of arbitrary length.\n */\n function modExp(bytes memory b, bytes memory e, bytes memory m) internal view returns (bytes memory) {\n (bool success, bytes memory result) = tryModExp(b, e, m);\n if (!success) {\n Panic.panic(Panic.DIVISION_BY_ZERO);\n }\n return result;\n }\n\n /**\n * @dev Variant of {tryModExp} that supports inputs of arbitrary length.\n */\n function tryModExp(\n bytes memory b,\n bytes memory e,\n bytes memory m\n ) internal view returns (bool success, bytes memory result) {\n if (_zeroBytes(m)) return (false, new bytes(0));\n\n uint256 mLen = m.length;\n\n // Encode call args in result and move the free memory pointer\n result = abi.encodePacked(b.length, e.length, mLen, b, e, m);\n\n assembly (\"memory-safe\") {\n let dataPtr := add(result, 0x20)\n // Write result on top of args to avoid allocating extra memory.\n success := staticcall(gas(), 0x05, dataPtr, mload(result), dataPtr, mLen)\n // Overwrite the length.\n // result.length > returndatasize() is guaranteed because returndatasize() == m.length\n mstore(result, mLen)\n // Set the memory pointer after the returned data.\n mstore(0x40, add(dataPtr, mLen))\n }\n }\n\n /**\n * @dev Returns whether the provided byte array is zero.\n */\n function _zeroBytes(bytes memory byteArray) private pure returns (bool) {\n for (uint256 i = 0; i < byteArray.length; ++i) {\n if (byteArray[i] != 0) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n * towards zero.\n *\n * This method is based on Newton's method for computing square roots; the algorithm is restricted to only\n * using integer operations.\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n unchecked {\n // Take care of easy edge cases when a == 0 or a == 1\n if (a <= 1) {\n return a;\n }\n\n // In this function, we use Newton's method to get a root of `f(x) := x² - a`. It involves building a\n // sequence x_n that converges toward sqrt(a). For each iteration x_n, we also define the error between\n // the current value as `ε_n = | x_n - sqrt(a) |`.\n //\n // For our first estimation, we consider `e` the smallest power of 2 which is bigger than the square root\n // of the target. (i.e. `2**(e-1) ≤ sqrt(a) < 2**e`). We know that `e ≤ 128` because `(2¹²⁸)² = 2²⁵⁶` is\n // bigger than any uint256.\n //\n // By noticing that\n // `2**(e-1) ≤ sqrt(a) < 2**e → (2**(e-1))² ≤ a < (2**e)² → 2**(2*e-2) ≤ a < 2**(2*e)`\n // we can deduce that `e - 1` is `log2(a) / 2`. We can thus compute `x_n = 2**(e-1)` using a method similar\n // to the msb function.\n uint256 aa = a;\n uint256 xn = 1;\n\n if (aa >= (1 << 128)) {\n aa >>= 128;\n xn <<= 64;\n }\n if (aa >= (1 << 64)) {\n aa >>= 64;\n xn <<= 32;\n }\n if (aa >= (1 << 32)) {\n aa >>= 32;\n xn <<= 16;\n }\n if (aa >= (1 << 16)) {\n aa >>= 16;\n xn <<= 8;\n }\n if (aa >= (1 << 8)) {\n aa >>= 8;\n xn <<= 4;\n }\n if (aa >= (1 << 4)) {\n aa >>= 4;\n xn <<= 2;\n }\n if (aa >= (1 << 2)) {\n xn <<= 1;\n }\n\n // We now have x_n such that `x_n = 2**(e-1) ≤ sqrt(a) < 2**e = 2 * x_n`. This implies ε_n ≤ 2**(e-1).\n //\n // We can refine our estimation by noticing that the middle of that interval minimizes the error.\n // If we move x_n to equal 2**(e-1) + 2**(e-2), then we reduce the error to ε_n ≤ 2**(e-2).\n // This is going to be our x_0 (and ε_0)\n xn = (3 * xn) >> 1; // ε_0 := | x_0 - sqrt(a) | ≤ 2**(e-2)\n\n // From here, Newton's method give us:\n // x_{n+1} = (x_n + a / x_n) / 2\n //\n // One should note that:\n // x_{n+1}² - a = ((x_n + a / x_n) / 2)² - a\n // = ((x_n² + a) / (2 * x_n))² - a\n // = (x_n⁴ + 2 * a * x_n² + a²) / (4 * x_n²) - a\n // = (x_n⁴ + 2 * a * x_n² + a² - 4 * a * x_n²) / (4 * x_n²)\n // = (x_n⁴ - 2 * a * x_n² + a²) / (4 * x_n²)\n // = (x_n² - a)² / (2 * x_n)²\n // = ((x_n² - a) / (2 * x_n))²\n // ≥ 0\n // Which proves that for all n ≥ 1, sqrt(a) ≤ x_n\n //\n // This gives us the proof of quadratic convergence of the sequence:\n // ε_{n+1} = | x_{n+1} - sqrt(a) |\n // = | (x_n + a / x_n) / 2 - sqrt(a) |\n // = | (x_n² + a - 2*x_n*sqrt(a)) / (2 * x_n) |\n // = | (x_n - sqrt(a))² / (2 * x_n) |\n // = | ε_n² / (2 * x_n) |\n // = ε_n² / | (2 * x_n) |\n //\n // For the first iteration, we have a special case where x_0 is known:\n // ε_1 = ε_0² / | (2 * x_0) |\n // ≤ (2**(e-2))² / (2 * (2**(e-1) + 2**(e-2)))\n // ≤ 2**(2*e-4) / (3 * 2**(e-1))\n // ≤ 2**(e-3) / 3\n // ≤ 2**(e-3-log2(3))\n // ≤ 2**(e-4.5)\n //\n // For the following iterations, we use the fact that, 2**(e-1) ≤ sqrt(a) ≤ x_n:\n // ε_{n+1} = ε_n² / | (2 * x_n) |\n // ≤ (2**(e-k))² / (2 * 2**(e-1))\n // ≤ 2**(2*e-2*k) / 2**e\n // ≤ 2**(e-2*k)\n xn = (xn + a / xn) >> 1; // ε_1 := | x_1 - sqrt(a) | ≤ 2**(e-4.5) -- special case, see above\n xn = (xn + a / xn) >> 1; // ε_2 := | x_2 - sqrt(a) | ≤ 2**(e-9) -- general case with k = 4.5\n xn = (xn + a / xn) >> 1; // ε_3 := | x_3 - sqrt(a) | ≤ 2**(e-18) -- general case with k = 9\n xn = (xn + a / xn) >> 1; // ε_4 := | x_4 - sqrt(a) | ≤ 2**(e-36) -- general case with k = 18\n xn = (xn + a / xn) >> 1; // ε_5 := | x_5 - sqrt(a) | ≤ 2**(e-72) -- general case with k = 36\n xn = (xn + a / xn) >> 1; // ε_6 := | x_6 - sqrt(a) | ≤ 2**(e-144) -- general case with k = 72\n\n // Because e ≤ 128 (as discussed during the first estimation phase), we know have reached a precision\n // ε_6 ≤ 2**(e-144) < 1. Given we're operating on integers, then we can ensure that xn is now either\n // sqrt(a) or sqrt(a) + 1.\n return xn - SafeCast.toUint(xn > a / xn);\n }\n }\n\n /**\n * @dev Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && result * result < a);\n }\n }\n\n /**\n * @dev Return the log in base 2 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log2(uint256 x) internal pure returns (uint256 r) {\n // If value has upper 128 bits set, log2 result is at least 128\n r = SafeCast.toUint(x > 0xffffffffffffffffffffffffffffffff) << 7;\n // If upper 64 bits of 128-bit half set, add 64 to result\n r |= SafeCast.toUint((x >> r) > 0xffffffffffffffff) << 6;\n // If upper 32 bits of 64-bit half set, add 32 to result\n r |= SafeCast.toUint((x >> r) > 0xffffffff) << 5;\n // If upper 16 bits of 32-bit half set, add 16 to result\n r |= SafeCast.toUint((x >> r) > 0xffff) << 4;\n // If upper 8 bits of 16-bit half set, add 8 to result\n r |= SafeCast.toUint((x >> r) > 0xff) << 3;\n // If upper 4 bits of 8-bit half set, add 4 to result\n r |= SafeCast.toUint((x >> r) > 0xf) << 2;\n\n // Shifts value right by the current result and use it as an index into this lookup table:\n //\n // | x (4 bits) | index | table[index] = MSB position |\n // |------------|---------|-----------------------------|\n // | 0000 | 0 | table[0] = 0 |\n // | 0001 | 1 | table[1] = 0 |\n // | 0010 | 2 | table[2] = 1 |\n // | 0011 | 3 | table[3] = 1 |\n // | 0100 | 4 | table[4] = 2 |\n // | 0101 | 5 | table[5] = 2 |\n // | 0110 | 6 | table[6] = 2 |\n // | 0111 | 7 | table[7] = 2 |\n // | 1000 | 8 | table[8] = 3 |\n // | 1001 | 9 | table[9] = 3 |\n // | 1010 | 10 | table[10] = 3 |\n // | 1011 | 11 | table[11] = 3 |\n // | 1100 | 12 | table[12] = 3 |\n // | 1101 | 13 | table[13] = 3 |\n // | 1110 | 14 | table[14] = 3 |\n // | 1111 | 15 | table[15] = 3 |\n //\n // The lookup table is represented as a 32-byte value with the MSB positions for 0-15 in the last 16 bytes.\n assembly (\"memory-safe\") {\n r := or(r, byte(shr(r, x), 0x0000010102020202030303030303030300000000000000000000000000000000))\n }\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << result < value);\n }\n }\n\n /**\n * @dev Return the log in base 10 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10 ** 64) {\n value /= 10 ** 64;\n result += 64;\n }\n if (value >= 10 ** 32) {\n value /= 10 ** 32;\n result += 32;\n }\n if (value >= 10 ** 16) {\n value /= 10 ** 16;\n result += 16;\n }\n if (value >= 10 ** 8) {\n value /= 10 ** 8;\n result += 8;\n }\n if (value >= 10 ** 4) {\n value /= 10 ** 4;\n result += 4;\n }\n if (value >= 10 ** 2) {\n value /= 10 ** 2;\n result += 2;\n }\n if (value >= 10 ** 1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 10 ** result < value);\n }\n }\n\n /**\n * @dev Return the log in base 256 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 x) internal pure returns (uint256 r) {\n // If value has upper 128 bits set, log2 result is at least 128\n r = SafeCast.toUint(x > 0xffffffffffffffffffffffffffffffff) << 7;\n // If upper 64 bits of 128-bit half set, add 64 to result\n r |= SafeCast.toUint((x >> r) > 0xffffffffffffffff) << 6;\n // If upper 32 bits of 64-bit half set, add 32 to result\n r |= SafeCast.toUint((x >> r) > 0xffffffff) << 5;\n // If upper 16 bits of 32-bit half set, add 16 to result\n r |= SafeCast.toUint((x >> r) > 0xffff) << 4;\n // Add 1 if upper 8 bits of 16-bit half set, and divide accumulated result by 8\n return (r >> 3) | SafeCast.toUint((x >> r) > 0xff);\n }\n\n /**\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << (result << 3) < value);\n }\n }\n\n /**\n * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\n */\n function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\n return uint8(rounding) % 2 == 1;\n }\n}\n"},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SafeCast.sol)\n// This file was procedurally generated from scripts/generate/templates/SafeCast.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeCast {\n /**\n * @dev Value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);\n\n /**\n * @dev An int value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedIntToUint(int256 value);\n\n /**\n * @dev Value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedIntDowncast(uint8 bits, int256 value);\n\n /**\n * @dev An uint value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedUintToInt(uint256 value);\n\n /**\n * @dev Returns the downcasted uint248 from uint256, reverting on\n * overflow (when the input is greater than largest uint248).\n *\n * Counterpart to Solidity's `uint248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toUint248(uint256 value) internal pure returns (uint248) {\n if (value > type(uint248).max) {\n revert SafeCastOverflowedUintDowncast(248, value);\n }\n return uint248(value);\n }\n\n /**\n * @dev Returns the downcasted uint240 from uint256, reverting on\n * overflow (when the input is greater than largest uint240).\n *\n * Counterpart to Solidity's `uint240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toUint240(uint256 value) internal pure returns (uint240) {\n if (value > type(uint240).max) {\n revert SafeCastOverflowedUintDowncast(240, value);\n }\n return uint240(value);\n }\n\n /**\n * @dev Returns the downcasted uint232 from uint256, reverting on\n * overflow (when the input is greater than largest uint232).\n *\n * Counterpart to Solidity's `uint232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toUint232(uint256 value) internal pure returns (uint232) {\n if (value > type(uint232).max) {\n revert SafeCastOverflowedUintDowncast(232, value);\n }\n return uint232(value);\n }\n\n /**\n * @dev Returns the downcasted uint224 from uint256, reverting on\n * overflow (when the input is greater than largest uint224).\n *\n * Counterpart to Solidity's `uint224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toUint224(uint256 value) internal pure returns (uint224) {\n if (value > type(uint224).max) {\n revert SafeCastOverflowedUintDowncast(224, value);\n }\n return uint224(value);\n }\n\n /**\n * @dev Returns the downcasted uint216 from uint256, reverting on\n * overflow (when the input is greater than largest uint216).\n *\n * Counterpart to Solidity's `uint216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toUint216(uint256 value) internal pure returns (uint216) {\n if (value > type(uint216).max) {\n revert SafeCastOverflowedUintDowncast(216, value);\n }\n return uint216(value);\n }\n\n /**\n * @dev Returns the downcasted uint208 from uint256, reverting on\n * overflow (when the input is greater than largest uint208).\n *\n * Counterpart to Solidity's `uint208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toUint208(uint256 value) internal pure returns (uint208) {\n if (value > type(uint208).max) {\n revert SafeCastOverflowedUintDowncast(208, value);\n }\n return uint208(value);\n }\n\n /**\n * @dev Returns the downcasted uint200 from uint256, reverting on\n * overflow (when the input is greater than largest uint200).\n *\n * Counterpart to Solidity's `uint200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toUint200(uint256 value) internal pure returns (uint200) {\n if (value > type(uint200).max) {\n revert SafeCastOverflowedUintDowncast(200, value);\n }\n return uint200(value);\n }\n\n /**\n * @dev Returns the downcasted uint192 from uint256, reverting on\n * overflow (when the input is greater than largest uint192).\n *\n * Counterpart to Solidity's `uint192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toUint192(uint256 value) internal pure returns (uint192) {\n if (value > type(uint192).max) {\n revert SafeCastOverflowedUintDowncast(192, value);\n }\n return uint192(value);\n }\n\n /**\n * @dev Returns the downcasted uint184 from uint256, reverting on\n * overflow (when the input is greater than largest uint184).\n *\n * Counterpart to Solidity's `uint184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toUint184(uint256 value) internal pure returns (uint184) {\n if (value > type(uint184).max) {\n revert SafeCastOverflowedUintDowncast(184, value);\n }\n return uint184(value);\n }\n\n /**\n * @dev Returns the downcasted uint176 from uint256, reverting on\n * overflow (when the input is greater than largest uint176).\n *\n * Counterpart to Solidity's `uint176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toUint176(uint256 value) internal pure returns (uint176) {\n if (value > type(uint176).max) {\n revert SafeCastOverflowedUintDowncast(176, value);\n }\n return uint176(value);\n }\n\n /**\n * @dev Returns the downcasted uint168 from uint256, reverting on\n * overflow (when the input is greater than largest uint168).\n *\n * Counterpart to Solidity's `uint168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toUint168(uint256 value) internal pure returns (uint168) {\n if (value > type(uint168).max) {\n revert SafeCastOverflowedUintDowncast(168, value);\n }\n return uint168(value);\n }\n\n /**\n * @dev Returns the downcasted uint160 from uint256, reverting on\n * overflow (when the input is greater than largest uint160).\n *\n * Counterpart to Solidity's `uint160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toUint160(uint256 value) internal pure returns (uint160) {\n if (value > type(uint160).max) {\n revert SafeCastOverflowedUintDowncast(160, value);\n }\n return uint160(value);\n }\n\n /**\n * @dev Returns the downcasted uint152 from uint256, reverting on\n * overflow (when the input is greater than largest uint152).\n *\n * Counterpart to Solidity's `uint152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toUint152(uint256 value) internal pure returns (uint152) {\n if (value > type(uint152).max) {\n revert SafeCastOverflowedUintDowncast(152, value);\n }\n return uint152(value);\n }\n\n /**\n * @dev Returns the downcasted uint144 from uint256, reverting on\n * overflow (when the input is greater than largest uint144).\n *\n * Counterpart to Solidity's `uint144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toUint144(uint256 value) internal pure returns (uint144) {\n if (value > type(uint144).max) {\n revert SafeCastOverflowedUintDowncast(144, value);\n }\n return uint144(value);\n }\n\n /**\n * @dev Returns the downcasted uint136 from uint256, reverting on\n * overflow (when the input is greater than largest uint136).\n *\n * Counterpart to Solidity's `uint136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toUint136(uint256 value) internal pure returns (uint136) {\n if (value > type(uint136).max) {\n revert SafeCastOverflowedUintDowncast(136, value);\n }\n return uint136(value);\n }\n\n /**\n * @dev Returns the downcasted uint128 from uint256, reverting on\n * overflow (when the input is greater than largest uint128).\n *\n * Counterpart to Solidity's `uint128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toUint128(uint256 value) internal pure returns (uint128) {\n if (value > type(uint128).max) {\n revert SafeCastOverflowedUintDowncast(128, value);\n }\n return uint128(value);\n }\n\n /**\n * @dev Returns the downcasted uint120 from uint256, reverting on\n * overflow (when the input is greater than largest uint120).\n *\n * Counterpart to Solidity's `uint120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toUint120(uint256 value) internal pure returns (uint120) {\n if (value > type(uint120).max) {\n revert SafeCastOverflowedUintDowncast(120, value);\n }\n return uint120(value);\n }\n\n /**\n * @dev Returns the downcasted uint112 from uint256, reverting on\n * overflow (when the input is greater than largest uint112).\n *\n * Counterpart to Solidity's `uint112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toUint112(uint256 value) internal pure returns (uint112) {\n if (value > type(uint112).max) {\n revert SafeCastOverflowedUintDowncast(112, value);\n }\n return uint112(value);\n }\n\n /**\n * @dev Returns the downcasted uint104 from uint256, reverting on\n * overflow (when the input is greater than largest uint104).\n *\n * Counterpart to Solidity's `uint104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toUint104(uint256 value) internal pure returns (uint104) {\n if (value > type(uint104).max) {\n revert SafeCastOverflowedUintDowncast(104, value);\n }\n return uint104(value);\n }\n\n /**\n * @dev Returns the downcasted uint96 from uint256, reverting on\n * overflow (when the input is greater than largest uint96).\n *\n * Counterpart to Solidity's `uint96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toUint96(uint256 value) internal pure returns (uint96) {\n if (value > type(uint96).max) {\n revert SafeCastOverflowedUintDowncast(96, value);\n }\n return uint96(value);\n }\n\n /**\n * @dev Returns the downcasted uint88 from uint256, reverting on\n * overflow (when the input is greater than largest uint88).\n *\n * Counterpart to Solidity's `uint88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toUint88(uint256 value) internal pure returns (uint88) {\n if (value > type(uint88).max) {\n revert SafeCastOverflowedUintDowncast(88, value);\n }\n return uint88(value);\n }\n\n /**\n * @dev Returns the downcasted uint80 from uint256, reverting on\n * overflow (when the input is greater than largest uint80).\n *\n * Counterpart to Solidity's `uint80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toUint80(uint256 value) internal pure returns (uint80) {\n if (value > type(uint80).max) {\n revert SafeCastOverflowedUintDowncast(80, value);\n }\n return uint80(value);\n }\n\n /**\n * @dev Returns the downcasted uint72 from uint256, reverting on\n * overflow (when the input is greater than largest uint72).\n *\n * Counterpart to Solidity's `uint72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toUint72(uint256 value) internal pure returns (uint72) {\n if (value > type(uint72).max) {\n revert SafeCastOverflowedUintDowncast(72, value);\n }\n return uint72(value);\n }\n\n /**\n * @dev Returns the downcasted uint64 from uint256, reverting on\n * overflow (when the input is greater than largest uint64).\n *\n * Counterpart to Solidity's `uint64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toUint64(uint256 value) internal pure returns (uint64) {\n if (value > type(uint64).max) {\n revert SafeCastOverflowedUintDowncast(64, value);\n }\n return uint64(value);\n }\n\n /**\n * @dev Returns the downcasted uint56 from uint256, reverting on\n * overflow (when the input is greater than largest uint56).\n *\n * Counterpart to Solidity's `uint56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toUint56(uint256 value) internal pure returns (uint56) {\n if (value > type(uint56).max) {\n revert SafeCastOverflowedUintDowncast(56, value);\n }\n return uint56(value);\n }\n\n /**\n * @dev Returns the downcasted uint48 from uint256, reverting on\n * overflow (when the input is greater than largest uint48).\n *\n * Counterpart to Solidity's `uint48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toUint48(uint256 value) internal pure returns (uint48) {\n if (value > type(uint48).max) {\n revert SafeCastOverflowedUintDowncast(48, value);\n }\n return uint48(value);\n }\n\n /**\n * @dev Returns the downcasted uint40 from uint256, reverting on\n * overflow (when the input is greater than largest uint40).\n *\n * Counterpart to Solidity's `uint40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toUint40(uint256 value) internal pure returns (uint40) {\n if (value > type(uint40).max) {\n revert SafeCastOverflowedUintDowncast(40, value);\n }\n return uint40(value);\n }\n\n /**\n * @dev Returns the downcasted uint32 from uint256, reverting on\n * overflow (when the input is greater than largest uint32).\n *\n * Counterpart to Solidity's `uint32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toUint32(uint256 value) internal pure returns (uint32) {\n if (value > type(uint32).max) {\n revert SafeCastOverflowedUintDowncast(32, value);\n }\n return uint32(value);\n }\n\n /**\n * @dev Returns the downcasted uint24 from uint256, reverting on\n * overflow (when the input is greater than largest uint24).\n *\n * Counterpart to Solidity's `uint24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toUint24(uint256 value) internal pure returns (uint24) {\n if (value > type(uint24).max) {\n revert SafeCastOverflowedUintDowncast(24, value);\n }\n return uint24(value);\n }\n\n /**\n * @dev Returns the downcasted uint16 from uint256, reverting on\n * overflow (when the input is greater than largest uint16).\n *\n * Counterpart to Solidity's `uint16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toUint16(uint256 value) internal pure returns (uint16) {\n if (value > type(uint16).max) {\n revert SafeCastOverflowedUintDowncast(16, value);\n }\n return uint16(value);\n }\n\n /**\n * @dev Returns the downcasted uint8 from uint256, reverting on\n * overflow (when the input is greater than largest uint8).\n *\n * Counterpart to Solidity's `uint8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toUint8(uint256 value) internal pure returns (uint8) {\n if (value > type(uint8).max) {\n revert SafeCastOverflowedUintDowncast(8, value);\n }\n return uint8(value);\n }\n\n /**\n * @dev Converts a signed int256 into an unsigned uint256.\n *\n * Requirements:\n *\n * - input must be greater than or equal to 0.\n */\n function toUint256(int256 value) internal pure returns (uint256) {\n if (value < 0) {\n revert SafeCastOverflowedIntToUint(value);\n }\n return uint256(value);\n }\n\n /**\n * @dev Returns the downcasted int248 from int256, reverting on\n * overflow (when the input is less than smallest int248 or\n * greater than largest int248).\n *\n * Counterpart to Solidity's `int248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toInt248(int256 value) internal pure returns (int248 downcasted) {\n downcasted = int248(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(248, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int240 from int256, reverting on\n * overflow (when the input is less than smallest int240 or\n * greater than largest int240).\n *\n * Counterpart to Solidity's `int240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toInt240(int256 value) internal pure returns (int240 downcasted) {\n downcasted = int240(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(240, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int232 from int256, reverting on\n * overflow (when the input is less than smallest int232 or\n * greater than largest int232).\n *\n * Counterpart to Solidity's `int232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toInt232(int256 value) internal pure returns (int232 downcasted) {\n downcasted = int232(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(232, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int224 from int256, reverting on\n * overflow (when the input is less than smallest int224 or\n * greater than largest int224).\n *\n * Counterpart to Solidity's `int224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toInt224(int256 value) internal pure returns (int224 downcasted) {\n downcasted = int224(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(224, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int216 from int256, reverting on\n * overflow (when the input is less than smallest int216 or\n * greater than largest int216).\n *\n * Counterpart to Solidity's `int216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toInt216(int256 value) internal pure returns (int216 downcasted) {\n downcasted = int216(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(216, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int208 from int256, reverting on\n * overflow (when the input is less than smallest int208 or\n * greater than largest int208).\n *\n * Counterpart to Solidity's `int208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toInt208(int256 value) internal pure returns (int208 downcasted) {\n downcasted = int208(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(208, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int200 from int256, reverting on\n * overflow (when the input is less than smallest int200 or\n * greater than largest int200).\n *\n * Counterpart to Solidity's `int200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toInt200(int256 value) internal pure returns (int200 downcasted) {\n downcasted = int200(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(200, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int192 from int256, reverting on\n * overflow (when the input is less than smallest int192 or\n * greater than largest int192).\n *\n * Counterpart to Solidity's `int192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toInt192(int256 value) internal pure returns (int192 downcasted) {\n downcasted = int192(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(192, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int184 from int256, reverting on\n * overflow (when the input is less than smallest int184 or\n * greater than largest int184).\n *\n * Counterpart to Solidity's `int184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toInt184(int256 value) internal pure returns (int184 downcasted) {\n downcasted = int184(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(184, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int176 from int256, reverting on\n * overflow (when the input is less than smallest int176 or\n * greater than largest int176).\n *\n * Counterpart to Solidity's `int176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toInt176(int256 value) internal pure returns (int176 downcasted) {\n downcasted = int176(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(176, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int168 from int256, reverting on\n * overflow (when the input is less than smallest int168 or\n * greater than largest int168).\n *\n * Counterpart to Solidity's `int168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toInt168(int256 value) internal pure returns (int168 downcasted) {\n downcasted = int168(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(168, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int160 from int256, reverting on\n * overflow (when the input is less than smallest int160 or\n * greater than largest int160).\n *\n * Counterpart to Solidity's `int160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toInt160(int256 value) internal pure returns (int160 downcasted) {\n downcasted = int160(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(160, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int152 from int256, reverting on\n * overflow (when the input is less than smallest int152 or\n * greater than largest int152).\n *\n * Counterpart to Solidity's `int152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toInt152(int256 value) internal pure returns (int152 downcasted) {\n downcasted = int152(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(152, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int144 from int256, reverting on\n * overflow (when the input is less than smallest int144 or\n * greater than largest int144).\n *\n * Counterpart to Solidity's `int144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toInt144(int256 value) internal pure returns (int144 downcasted) {\n downcasted = int144(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(144, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int136 from int256, reverting on\n * overflow (when the input is less than smallest int136 or\n * greater than largest int136).\n *\n * Counterpart to Solidity's `int136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toInt136(int256 value) internal pure returns (int136 downcasted) {\n downcasted = int136(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(136, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int128 from int256, reverting on\n * overflow (when the input is less than smallest int128 or\n * greater than largest int128).\n *\n * Counterpart to Solidity's `int128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toInt128(int256 value) internal pure returns (int128 downcasted) {\n downcasted = int128(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(128, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int120 from int256, reverting on\n * overflow (when the input is less than smallest int120 or\n * greater than largest int120).\n *\n * Counterpart to Solidity's `int120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toInt120(int256 value) internal pure returns (int120 downcasted) {\n downcasted = int120(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(120, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int112 from int256, reverting on\n * overflow (when the input is less than smallest int112 or\n * greater than largest int112).\n *\n * Counterpart to Solidity's `int112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toInt112(int256 value) internal pure returns (int112 downcasted) {\n downcasted = int112(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(112, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int104 from int256, reverting on\n * overflow (when the input is less than smallest int104 or\n * greater than largest int104).\n *\n * Counterpart to Solidity's `int104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toInt104(int256 value) internal pure returns (int104 downcasted) {\n downcasted = int104(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(104, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int96 from int256, reverting on\n * overflow (when the input is less than smallest int96 or\n * greater than largest int96).\n *\n * Counterpart to Solidity's `int96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toInt96(int256 value) internal pure returns (int96 downcasted) {\n downcasted = int96(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(96, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int88 from int256, reverting on\n * overflow (when the input is less than smallest int88 or\n * greater than largest int88).\n *\n * Counterpart to Solidity's `int88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toInt88(int256 value) internal pure returns (int88 downcasted) {\n downcasted = int88(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(88, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int80 from int256, reverting on\n * overflow (when the input is less than smallest int80 or\n * greater than largest int80).\n *\n * Counterpart to Solidity's `int80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toInt80(int256 value) internal pure returns (int80 downcasted) {\n downcasted = int80(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(80, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int72 from int256, reverting on\n * overflow (when the input is less than smallest int72 or\n * greater than largest int72).\n *\n * Counterpart to Solidity's `int72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toInt72(int256 value) internal pure returns (int72 downcasted) {\n downcasted = int72(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(72, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int64 from int256, reverting on\n * overflow (when the input is less than smallest int64 or\n * greater than largest int64).\n *\n * Counterpart to Solidity's `int64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toInt64(int256 value) internal pure returns (int64 downcasted) {\n downcasted = int64(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(64, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int56 from int256, reverting on\n * overflow (when the input is less than smallest int56 or\n * greater than largest int56).\n *\n * Counterpart to Solidity's `int56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toInt56(int256 value) internal pure returns (int56 downcasted) {\n downcasted = int56(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(56, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int48 from int256, reverting on\n * overflow (when the input is less than smallest int48 or\n * greater than largest int48).\n *\n * Counterpart to Solidity's `int48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toInt48(int256 value) internal pure returns (int48 downcasted) {\n downcasted = int48(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(48, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int40 from int256, reverting on\n * overflow (when the input is less than smallest int40 or\n * greater than largest int40).\n *\n * Counterpart to Solidity's `int40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toInt40(int256 value) internal pure returns (int40 downcasted) {\n downcasted = int40(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(40, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int32 from int256, reverting on\n * overflow (when the input is less than smallest int32 or\n * greater than largest int32).\n *\n * Counterpart to Solidity's `int32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toInt32(int256 value) internal pure returns (int32 downcasted) {\n downcasted = int32(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(32, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int24 from int256, reverting on\n * overflow (when the input is less than smallest int24 or\n * greater than largest int24).\n *\n * Counterpart to Solidity's `int24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toInt24(int256 value) internal pure returns (int24 downcasted) {\n downcasted = int24(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(24, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int16 from int256, reverting on\n * overflow (when the input is less than smallest int16 or\n * greater than largest int16).\n *\n * Counterpart to Solidity's `int16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toInt16(int256 value) internal pure returns (int16 downcasted) {\n downcasted = int16(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(16, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int8 from int256, reverting on\n * overflow (when the input is less than smallest int8 or\n * greater than largest int8).\n *\n * Counterpart to Solidity's `int8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toInt8(int256 value) internal pure returns (int8 downcasted) {\n downcasted = int8(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(8, value);\n }\n }\n\n /**\n * @dev Converts an unsigned uint256 into a signed int256.\n *\n * Requirements:\n *\n * - input must be less than or equal to maxInt256.\n */\n function toInt256(uint256 value) internal pure returns (int256) {\n // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\n if (value > uint256(type(int256).max)) {\n revert SafeCastOverflowedUintToInt(value);\n }\n return int256(value);\n }\n\n /**\n * @dev Cast a boolean (false or true) to a uint256 (0 or 1) with no jump.\n */\n function toUint(bool b) internal pure returns (uint256 u) {\n assembly (\"memory-safe\") {\n u := iszero(iszero(b))\n }\n }\n}\n"},"@openzeppelin/contracts/utils/Panic.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Panic.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Helper library for emitting standardized panic codes.\n *\n * ```solidity\n * contract Example {\n * using Panic for uint256;\n *\n * // Use any of the declared internal constants\n * function foo() { Panic.GENERIC.panic(); }\n *\n * // Alternatively\n * function foo() { Panic.panic(Panic.GENERIC); }\n * }\n * ```\n *\n * Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].\n *\n * _Available since v5.1._\n */\n// slither-disable-next-line unused-state\nlibrary Panic {\n /// @dev generic / unspecified error\n uint256 internal constant GENERIC = 0x00;\n /// @dev used by the assert() builtin\n uint256 internal constant ASSERT = 0x01;\n /// @dev arithmetic underflow or overflow\n uint256 internal constant UNDER_OVERFLOW = 0x11;\n /// @dev division or modulo by zero\n uint256 internal constant DIVISION_BY_ZERO = 0x12;\n /// @dev enum conversion error\n uint256 internal constant ENUM_CONVERSION_ERROR = 0x21;\n /// @dev invalid encoding in storage\n uint256 internal constant STORAGE_ENCODING_ERROR = 0x22;\n /// @dev empty array pop\n uint256 internal constant EMPTY_ARRAY_POP = 0x31;\n /// @dev array out of bounds access\n uint256 internal constant ARRAY_OUT_OF_BOUNDS = 0x32;\n /// @dev resource error (too large allocation or too large array)\n uint256 internal constant RESOURCE_ERROR = 0x41;\n /// @dev calling invalid internal function\n uint256 internal constant INVALID_INTERNAL_FUNCTION = 0x51;\n\n /// @dev Reverts with a panic code. Recommended to use with\n /// the internal constants with predefined codes.\n function panic(uint256 code) internal pure {\n assembly (\"memory-safe\") {\n mstore(0x00, 0x4e487b71)\n mstore(0x20, code)\n revert(0x1c, 0x24)\n }\n }\n}\n"},"@openzeppelin/contracts/utils/SlotDerivation.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (utils/SlotDerivation.sol)\n// This file was procedurally generated from scripts/generate/templates/SlotDerivation.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for computing storage (and transient storage) locations from namespaces and deriving slots\n * corresponding to standard patterns. The derivation method for array and mapping matches the storage layout used by\n * the solidity language / compiler.\n *\n * See https://docs.soliditylang.org/en/v0.8.20/internals/layout_in_storage.html#mappings-and-dynamic-arrays[Solidity docs for mappings and dynamic arrays.].\n *\n * Example usage:\n * ```solidity\n * contract Example {\n * // Add the library methods\n * using StorageSlot for bytes32;\n * using SlotDerivation for bytes32;\n *\n * // Declare a namespace\n * string private constant _NAMESPACE = \"\"; // eg. OpenZeppelin.Slot\n *\n * function setValueInNamespace(uint256 key, address newValue) internal {\n * _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value = newValue;\n * }\n *\n * function getValueInNamespace(uint256 key) internal view returns (address) {\n * return _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value;\n * }\n * }\n * ```\n *\n * TIP: Consider using this library along with {StorageSlot}.\n *\n * NOTE: This library provides a way to manipulate storage locations in a non-standard way. Tooling for checking\n * upgrade safety will ignore the slots accessed through this library.\n *\n * _Available since v5.1._\n */\nlibrary SlotDerivation {\n /**\n * @dev Derive an ERC-7201 slot from a string (namespace).\n */\n function erc7201Slot(string memory namespace) internal pure returns (bytes32 slot) {\n assembly (\"memory-safe\") {\n mstore(0x00, sub(keccak256(add(namespace, 0x20), mload(namespace)), 1))\n slot := and(keccak256(0x00, 0x20), not(0xff))\n }\n }\n\n /**\n * @dev Add an offset to a slot to get the n-th element of a structure or an array.\n */\n function offset(bytes32 slot, uint256 pos) internal pure returns (bytes32 result) {\n unchecked {\n return bytes32(uint256(slot) + pos);\n }\n }\n\n /**\n * @dev Derive the location of the first element in an array from the slot where the length is stored.\n */\n function deriveArray(bytes32 slot) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n mstore(0x00, slot)\n result := keccak256(0x00, 0x20)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, address key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n mstore(0x00, and(key, shr(96, not(0))))\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, bool key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n mstore(0x00, iszero(iszero(key)))\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, bytes32 key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n mstore(0x00, key)\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, uint256 key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n mstore(0x00, key)\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, int256 key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n mstore(0x00, key)\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, string memory key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n let length := mload(key)\n let begin := add(key, 0x20)\n let end := add(begin, length)\n let cache := mload(end)\n mstore(end, slot)\n result := keccak256(begin, add(length, 0x20))\n mstore(end, cache)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, bytes memory key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n let length := mload(key)\n let begin := add(key, 0x20)\n let end := add(begin, length)\n let cache := mload(end)\n mstore(end, slot)\n result := keccak256(begin, add(length, 0x20))\n mstore(end, cache)\n }\n }\n}\n"},"@openzeppelin/contracts/utils/StorageSlot.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/StorageSlot.sol)\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC-1967 implementation slot:\n * ```solidity\n * contract ERC1967 {\n * // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(newImplementation.code.length > 0);\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * TIP: Consider using this library along with {SlotDerivation}.\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n struct Int256Slot {\n int256 value;\n }\n\n struct StringSlot {\n string value;\n }\n\n struct BytesSlot {\n bytes value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `Int256Slot` with member `value` located at `slot`.\n */\n function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `StringSlot` with member `value` located at `slot`.\n */\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\n */\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := store.slot\n }\n }\n\n /**\n * @dev Returns a `BytesSlot` with member `value` located at `slot`.\n */\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\n */\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := store.slot\n }\n }\n}\n"},"@openzeppelin/contracts/utils/structs/EnumerableSet.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/structs/EnumerableSet.sol)\n// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.\n\npragma solidity ^0.8.20;\n\nimport {Arrays} from \"../Arrays.sol\";\nimport {Math} from \"../math/Math.sol\";\n\n/**\n * @dev Library for managing\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n * types.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n * - Set can be cleared (all elements removed) in O(n).\n *\n * ```solidity\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n *\n * The following types are supported:\n *\n * - `bytes32` (`Bytes32Set`) since v3.3.0\n * - `address` (`AddressSet`) since v3.3.0\n * - `uint256` (`UintSet`) since v3.3.0\n * - `string` (`StringSet`) since v5.4.0\n * - `bytes` (`BytesSet`) since v5.4.0\n *\n * [WARNING]\n * ====\n * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure\n * unusable.\n * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.\n *\n * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an\n * array of EnumerableSet.\n * ====\n */\nlibrary EnumerableSet {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Set type with\n // bytes32 values.\n // The Set implementation uses private functions, and user-facing\n // implementations (such as AddressSet) are just wrappers around the\n // underlying Set.\n // This means that we can only create new EnumerableSets for types that fit\n // in bytes32.\n\n struct Set {\n // Storage of set values\n bytes32[] _values;\n // Position is the index of the value in the `values` array plus 1.\n // Position 0 is used to mean a value is not in the set.\n mapping(bytes32 value => uint256) _positions;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function _add(Set storage set, bytes32 value) private returns (bool) {\n if (!_contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._positions[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function _remove(Set storage set, bytes32 value) private returns (bool) {\n // We cache the value's position to prevent multiple reads from the same storage slot\n uint256 position = set._positions[value];\n\n if (position != 0) {\n // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 valueIndex = position - 1;\n uint256 lastIndex = set._values.length - 1;\n\n if (valueIndex != lastIndex) {\n bytes32 lastValue = set._values[lastIndex];\n\n // Move the lastValue to the index where the value to delete is\n set._values[valueIndex] = lastValue;\n // Update the tracked position of the lastValue (that was just moved)\n set._positions[lastValue] = position;\n }\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the tracked position for the deleted slot\n delete set._positions[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes all the values from a set. O(n).\n *\n * WARNING: This function has an unbounded cost that scales with set size. Developers should keep in mind that\n * using it may render the function uncallable if the set grows to the point where clearing it consumes too much\n * gas to fit in a block.\n */\n function _clear(Set storage set) private {\n uint256 len = _length(set);\n for (uint256 i = 0; i < len; ++i) {\n delete set._positions[set._values[i]];\n }\n Arrays.unsafeSetLength(set._values, 0);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\n return set._positions[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function _length(Set storage set) private view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\n return set._values[index];\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function _values(Set storage set) private view returns (bytes32[] memory) {\n return set._values;\n }\n\n /**\n * @dev Return a slice of the set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function _values(Set storage set, uint256 start, uint256 end) private view returns (bytes32[] memory) {\n unchecked {\n end = Math.min(end, _length(set));\n start = Math.min(start, end);\n\n uint256 len = end - start;\n bytes32[] memory result = new bytes32[](len);\n for (uint256 i = 0; i < len; ++i) {\n result[i] = Arrays.unsafeAccess(set._values, start + i).value;\n }\n return result;\n }\n }\n\n // Bytes32Set\n\n struct Bytes32Set {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _add(set._inner, value);\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _remove(set._inner, value);\n }\n\n /**\n * @dev Removes all the values from a set. O(n).\n *\n * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n * function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.\n */\n function clear(Bytes32Set storage set) internal {\n _clear(set._inner);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\n return _contains(set._inner, value);\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(Bytes32Set storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\n return _at(set._inner, index);\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\n bytes32[] memory store = _values(set._inner);\n bytes32[] memory result;\n\n assembly (\"memory-safe\") {\n result := store\n }\n\n return result;\n }\n\n /**\n * @dev Return a slice of the set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(Bytes32Set storage set, uint256 start, uint256 end) internal view returns (bytes32[] memory) {\n bytes32[] memory store = _values(set._inner, start, end);\n bytes32[] memory result;\n\n assembly (\"memory-safe\") {\n result := store\n }\n\n return result;\n }\n\n // AddressSet\n\n struct AddressSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n return _add(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n return _remove(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes all the values from a set. O(n).\n *\n * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n * function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.\n */\n function clear(AddressSet storage set) internal {\n _clear(set._inner);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return _contains(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(AddressSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n return address(uint160(uint256(_at(set._inner, index))));\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(AddressSet storage set) internal view returns (address[] memory) {\n bytes32[] memory store = _values(set._inner);\n address[] memory result;\n\n assembly (\"memory-safe\") {\n result := store\n }\n\n return result;\n }\n\n /**\n * @dev Return a slice of the set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(AddressSet storage set, uint256 start, uint256 end) internal view returns (address[] memory) {\n bytes32[] memory store = _values(set._inner, start, end);\n address[] memory result;\n\n assembly (\"memory-safe\") {\n result := store\n }\n\n return result;\n }\n\n // UintSet\n\n struct UintSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(UintSet storage set, uint256 value) internal returns (bool) {\n return _add(set._inner, bytes32(value));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\n return _remove(set._inner, bytes32(value));\n }\n\n /**\n * @dev Removes all the values from a set. O(n).\n *\n * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n * function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.\n */\n function clear(UintSet storage set) internal {\n _clear(set._inner);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\n return _contains(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(UintSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\n return uint256(_at(set._inner, index));\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(UintSet storage set) internal view returns (uint256[] memory) {\n bytes32[] memory store = _values(set._inner);\n uint256[] memory result;\n\n assembly (\"memory-safe\") {\n result := store\n }\n\n return result;\n }\n\n /**\n * @dev Return a slice of the set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(UintSet storage set, uint256 start, uint256 end) internal view returns (uint256[] memory) {\n bytes32[] memory store = _values(set._inner, start, end);\n uint256[] memory result;\n\n assembly (\"memory-safe\") {\n result := store\n }\n\n return result;\n }\n\n struct StringSet {\n // Storage of set values\n string[] _values;\n // Position is the index of the value in the `values` array plus 1.\n // Position 0 is used to mean a value is not in the set.\n mapping(string value => uint256) _positions;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(StringSet storage set, string memory value) internal returns (bool) {\n if (!contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._positions[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(StringSet storage set, string memory value) internal returns (bool) {\n // We cache the value's position to prevent multiple reads from the same storage slot\n uint256 position = set._positions[value];\n\n if (position != 0) {\n // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 valueIndex = position - 1;\n uint256 lastIndex = set._values.length - 1;\n\n if (valueIndex != lastIndex) {\n string memory lastValue = set._values[lastIndex];\n\n // Move the lastValue to the index where the value to delete is\n set._values[valueIndex] = lastValue;\n // Update the tracked position of the lastValue (that was just moved)\n set._positions[lastValue] = position;\n }\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the tracked position for the deleted slot\n delete set._positions[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes all the values from a set. O(n).\n *\n * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n * function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.\n */\n function clear(StringSet storage set) internal {\n uint256 len = length(set);\n for (uint256 i = 0; i < len; ++i) {\n delete set._positions[set._values[i]];\n }\n Arrays.unsafeSetLength(set._values, 0);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(StringSet storage set, string memory value) internal view returns (bool) {\n return set._positions[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function length(StringSet storage set) internal view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(StringSet storage set, uint256 index) internal view returns (string memory) {\n return set._values[index];\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(StringSet storage set) internal view returns (string[] memory) {\n return set._values;\n }\n\n /**\n * @dev Return a slice of the set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(StringSet storage set, uint256 start, uint256 end) internal view returns (string[] memory) {\n unchecked {\n end = Math.min(end, length(set));\n start = Math.min(start, end);\n\n uint256 len = end - start;\n string[] memory result = new string[](len);\n for (uint256 i = 0; i < len; ++i) {\n result[i] = Arrays.unsafeAccess(set._values, start + i).value;\n }\n return result;\n }\n }\n\n struct BytesSet {\n // Storage of set values\n bytes[] _values;\n // Position is the index of the value in the `values` array plus 1.\n // Position 0 is used to mean a value is not in the set.\n mapping(bytes value => uint256) _positions;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(BytesSet storage set, bytes memory value) internal returns (bool) {\n if (!contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._positions[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(BytesSet storage set, bytes memory value) internal returns (bool) {\n // We cache the value's position to prevent multiple reads from the same storage slot\n uint256 position = set._positions[value];\n\n if (position != 0) {\n // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 valueIndex = position - 1;\n uint256 lastIndex = set._values.length - 1;\n\n if (valueIndex != lastIndex) {\n bytes memory lastValue = set._values[lastIndex];\n\n // Move the lastValue to the index where the value to delete is\n set._values[valueIndex] = lastValue;\n // Update the tracked position of the lastValue (that was just moved)\n set._positions[lastValue] = position;\n }\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the tracked position for the deleted slot\n delete set._positions[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes all the values from a set. O(n).\n *\n * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n * function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.\n */\n function clear(BytesSet storage set) internal {\n uint256 len = length(set);\n for (uint256 i = 0; i < len; ++i) {\n delete set._positions[set._values[i]];\n }\n Arrays.unsafeSetLength(set._values, 0);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(BytesSet storage set, bytes memory value) internal view returns (bool) {\n return set._positions[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function length(BytesSet storage set) internal view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(BytesSet storage set, uint256 index) internal view returns (bytes memory) {\n return set._values[index];\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(BytesSet storage set) internal view returns (bytes[] memory) {\n return set._values;\n }\n\n /**\n * @dev Return a slice of the set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(BytesSet storage set, uint256 start, uint256 end) internal view returns (bytes[] memory) {\n unchecked {\n end = Math.min(end, length(set));\n start = Math.min(start, end);\n\n uint256 len = end - start;\n bytes[] memory result = new bytes[](len);\n for (uint256 i = 0; i < len; ++i) {\n result[i] = Arrays.unsafeAccess(set._values, start + i).value;\n }\n return result;\n }\n }\n}\n"},"contracts/BalancerContractRegistry.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport {\n IBalancerContractRegistry,\n ContractType\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\n\n/**\n * @notice On-chain registry of standard Balancer contracts.\n * @dev Maintain a registry of official Balancer Factories, Routers, Hooks, and valid ERC4626 tokens, for two main\n * purposes. The first is to support the many instances where we need to know that a contract is \"trusted\" (i.e.,\n * is safe and behaves in the required manner). For instance, some hooks depend critically on the identity of the\n * msg.sender, which must be passed down through the Router. Since Routers are permissionless, a malicious one could\n * spoof the sender and \"fool\" the hook. The hook must therefore \"trust\" the Router.\n *\n * It is also important for the front-end to know when a particular wrapped token should be used with buffers. Not all\n * \"ERC4626\" wrapped tokens are fully conforming, and buffer operations with non-conforming tokens may fail in various\n * unexpected ways. It is not enough to simply check whether a buffer exists (e.g., by calling `getBufferAsset`),\n * since best practice is for the pool creator to initialize buffers for all such tokens regardless. They are\n * permissionless, and could otherwise be initialized by anyone in unexpected ways. This registry could be used to\n * keep track of \"known good\" buffers, such that `isActiveBalancerContract(ContractType.ERC4626,
)` returns\n * true for fully-compliant tokens with properly initialized buffers.\n *\n * Current solutions involve passing in the address of the trusted Router on deployment: but what if it needs to\n * support multiple Routers? Or if the Router is deprecated and replaced? Instead, we can pass the registry address,\n * and query this contract to determine whether the Router is a \"trusted\" one.\n *\n * The second use case is for off-chain queries, or other protocols that need to easily determine, say, the \"latest\"\n * Weighted Pool Factory. This contract provides `isActiveBalancerContract(type, address)` for the first case, and\n * `getBalancerContract(type, name)` for the second. It is also possible to query all known information about an\n * address, using `getBalancerContractInfo(address)`, which returns a struct with the detailed state.\n *\n * Note that the `SingletonAuthentication` base contract provides `getVault`, so it is also possible to ask this\n * contract for the Vault address, so it doesn't need to be a type.\n */\ncontract BalancerContractRegistry is IBalancerContractRegistry, SingletonAuthentication {\n // ContractId is the hash of contract name. Names must be unique (cannot have the same name with different types).\n mapping(bytes32 contractId => address addr) private _contractRegistry;\n\n // Given an address, store the contract state (i.e., type, and active or deprecated).\n //\n // Conceptually, we maintain a => => registry of contracts.\n // The only thing that can change is the `isActive` flag, when a contract is deprecated. If a contract is\n // registered in error (e.g., wrong type or address), the remedy is to deregister (delete) it, and then register\n // the correct one.\n //\n // We also maintain a registry of aliases: => , where the target address\n // must be in the main registry, and the alias cannot match a unique registered contract name. Aliases can be\n // overwritten (e.g., when the `WeightedPool` alias migrates from v2 to v3). See `_contractAliases` below.\n mapping(address addr => ContractInfo info) private _contractInfo;\n\n // ContractAliasId is the hash of the alias (e.g., \"WeightedPool\").\n // This is separate from the main contract registry to enforce different rules (e.g., prevent corrupting the\n // contract state by overwriting a registry entry with an \"alias\" that matches a different contract).\n mapping(bytes32 contractAliasId => address addr) private _contractAliases;\n\n /**\n * @notice A `_contractRegistry` entry has no corresponding `_contractInfo`.\n * @dev This should never happen.\n * @param contractName The name of the contract that has a registry entry but no contract info\n * @param contractAddress The address of the contract with missing state\n */\n error InconsistentState(string contractName, address contractAddress);\n\n constructor(IVault vault) SingletonAuthentication(vault) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /*\n * Example usage:\n *\n * // Register both the named version and the \"latest\" Weighted Pool Factory.\n * registerBalancerContract(\n * ContractType.POOL_FACTORY, '20241205-v3-weighted-pool', 0x201efd508c8DfE9DE1a13c2452863A78CB2a86Cc\n * );\n * addOrUpdateBalancerContractAlias('WeightedPool', 0x201efd508c8DfE9DE1a13c2452863A78CB2a86Cc);\n *\n * // Register the Routers (two of them anyway).\n * registerBalancerContract(ContractType.ROUTER, '20241205-v3-router', 0x5C6fb490BDFD3246EB0bB062c168DeCAF4bD9FDd);\n * registerBalancerContract(\n * ContractType.ROUTER, '20241205-v3-batch-router', 0x136f1EFcC3f8f88516B9E94110D56FDBfB1778d1\n * );\n *\n * // Now, hooks that require trusted routers can be deployed with the registry address, and query the router to\n * // see whether it's \"trusted\" (i.e., registered by governance):\n *\n * isActiveBalancerContract(ContractType.ROUTER, 0x5C6fb490BDFD3246EB0bB062c168DeCAF4bD9FDd) would return true.\n *\n * Off-chain processes that wanted to know the current address of the Weighted Pool Factory could query by either\n * name:\n *\n * (address, active) = getBalancerContract(ContractType.POOL_FACTORY, '20241205-v3-weighted-pool');\n * (address, active) = getBalancerContract(ContractType.POOL_FACTORY, 'WeightedPool');\n *\n * These would return the same result.\n *\n * If we replaced `20241205-v3-weighted-pool` with `20250107-v3-weighted-pool-v2`, governance would call:\n *\n * deprecateBalancerContract(0x201efd508c8DfE9DE1a13c2452863A78CB2a86Cc);\n * registerBalancerContract(\n * ContractType.POOL_FACTORY, '20250107-v3-weighted-pool-v2', 0x9FC3da866e7DF3a1c57adE1a97c9f00a70f010c8)\n * );\n * addOrUpdateBalancerContractAlias('WeightedPool', 0x9FC3da866e7DF3a1c57adE1a97c9f00a70f010c8);\n *\n * At that point,\n * getBalancerContract(ContractType.POOL_FACTORY, '20241205-v3-weighted-pool') returns active=false,\n * isActiveBalancerContract(ContractType.POOL_FACTORY, 0x201efd508c8DfE9DE1a13c2452863A78CB2a86Cc) returns false,\n * getBalancerContract(ContractType.POOL_FACTORY, 'WeightedPool') returns the v2 address (and active=true).\n */\n\n /// @inheritdoc IBalancerContractRegistry\n function registerBalancerContract(\n ContractType contractType,\n string memory contractName,\n address contractAddress\n ) external authenticate {\n // Ensure arguments are valid.\n if (contractAddress == address(0)) {\n revert ZeroContractAddress();\n }\n\n if (bytes(contractName).length == 0) {\n revert InvalidContractName();\n }\n\n // Ensure address isn't already in use.\n ContractInfo memory info = _contractInfo[contractAddress];\n if (info.isRegistered) {\n revert ContractAddressAlreadyRegistered(info.contractType, contractAddress);\n }\n\n // Ensure name isn't already in use as a registered contract name.\n bytes32 contractId = _getContractId(contractName);\n address existingRegistryAddress = _contractRegistry[contractId];\n if (existingRegistryAddress != address(0)) {\n info = _contractInfo[existingRegistryAddress];\n\n revert ContractNameAlreadyRegistered(info.contractType, contractName);\n }\n\n // Also check that it isn't an existing alias.\n address existingAliasAddress = _contractAliases[contractId];\n if (existingAliasAddress != address(0)) {\n revert ContractNameInUseAsAlias(contractName, existingAliasAddress);\n }\n\n // Store the address in the registry, under the unique name.\n _contractRegistry[contractId] = contractAddress;\n\n // Record the address as active. The `isActive` flag enables differentiating between unregistered and deprecated\n // addresses.\n _contractInfo[contractAddress] = ContractInfo({\n contractType: contractType,\n isRegistered: true,\n isActive: true\n });\n\n emit BalancerContractRegistered(contractType, contractName, contractAddress);\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function deregisterBalancerContract(string memory contractName) external authenticate {\n if (bytes(contractName).length == 0) {\n revert InvalidContractName();\n }\n\n // Ensure the name is registered\n bytes32 contractId = _getContractId(contractName);\n address contractAddress = _contractRegistry[contractId];\n\n if (contractAddress == address(0)) {\n revert ContractNameNotRegistered(contractName);\n }\n\n ContractInfo memory info = _contractInfo[contractAddress];\n // This should be impossible: the registry and info mappings must be in sync.\n if (info.isRegistered == false) {\n revert InconsistentState(contractName, contractAddress);\n }\n\n delete _contractRegistry[contractId];\n delete _contractInfo[contractAddress];\n\n emit BalancerContractDeregistered(info.contractType, contractName, contractAddress);\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function deprecateBalancerContract(address contractAddress) external authenticate {\n if (contractAddress == address(0)) {\n revert ZeroContractAddress();\n }\n\n ContractInfo memory info = _contractInfo[contractAddress];\n\n // Check that the address has been registered.\n if (info.isRegistered == false) {\n revert ContractAddressNotRegistered(contractAddress);\n }\n\n // If it was registered, check that it has not already been deprecated.\n if (info.isActive == false) {\n revert ContractAlreadyDeprecated(contractAddress);\n }\n\n // Set active to false to indicate that it's now deprecated. This is currently a one-way operation, since\n // deprecation is considered permanent. For instance, calling `disable` to deprecate a factory (preventing\n // new pool creation) is permanent.\n info.isActive = false;\n _contractInfo[contractAddress] = info;\n\n emit BalancerContractDeprecated(contractAddress);\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function addOrUpdateBalancerContractAlias(\n string memory contractAlias,\n address contractAddress\n ) external authenticate {\n // Ensure arguments are valid.\n if (bytes(contractAlias).length == 0) {\n revert InvalidContractAlias();\n }\n\n if (contractAddress == address(0)) {\n revert ZeroContractAddress();\n }\n\n // Ensure the address was already registered.\n ContractInfo memory info = _contractInfo[contractAddress];\n if (info.isRegistered == false) {\n revert ContractAddressNotRegistered(contractAddress);\n }\n\n // Ensure the proposed alias is not in use (i.e., no collision with existing registered contracts).\n // It can match an existing alias: that's the \"update\" case. For instance, if we wanted to migrate\n // the `WeightedPool` alias from v2 to v3. If the name is not already in `_contractAliases`, we are\n // adding a new alias.\n bytes32 contractId = _getContractId(contractAlias);\n address existingRegistryAddress = _contractRegistry[contractId];\n if (existingRegistryAddress != address(0)) {\n info = _contractInfo[existingRegistryAddress];\n\n revert ContractAliasInUseAsName(info.contractType, contractAlias);\n }\n\n // This will either add a new or overwrite an existing alias.\n _contractAliases[contractId] = contractAddress;\n\n emit ContractAliasUpdated(contractAlias, contractAddress);\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function isActiveBalancerContract(ContractType contractType, address contractAddress) external view returns (bool) {\n return _isActiveBalancerContract(contractType, contractAddress);\n }\n\n function _isActiveBalancerContract(\n ContractType contractType,\n address contractAddress\n ) internal view returns (bool) {\n ContractInfo memory info = _contractInfo[contractAddress];\n\n // Ensure the address was registered as the given type - and that it's still active.\n return info.isActive && info.contractType == contractType;\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function getBalancerContract(\n ContractType contractType,\n string memory contractName\n ) external view returns (address contractAddress, bool isActive) {\n bytes32 contractId = _getContractId(contractName);\n address registeredAddress = _contractRegistry[contractId];\n\n // Also check the aliases, if not found in the primary registry.\n if (registeredAddress == address(0)) {\n registeredAddress = _contractAliases[contractId];\n }\n\n ContractInfo memory info = _contractInfo[registeredAddress];\n // It is possible to register a contract and alias, then deregister the contract, leaving a \"stale\" alias\n // reference. In this case, `isRegistered` will be false. Only return the contract address if it is still\n // valid and of the correct type.\n if (info.isRegistered && info.contractType == contractType) {\n contractAddress = registeredAddress;\n isActive = info.isActive;\n }\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function getBalancerContractInfo(address contractAddress) external view returns (ContractInfo memory info) {\n return _contractInfo[contractAddress];\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function isTrustedRouter(address router) external view returns (bool) {\n return _isActiveBalancerContract(ContractType.ROUTER, router);\n }\n\n function _getContractId(string memory contractName) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(contractName));\n }\n}\n"},"contracts/BalancerFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\";\nimport { IBalancerFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol\";\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport { VaultGuard } from \"@balancer-labs/v3-vault/contracts/VaultGuard.sol\";\n\nimport { FeeBurnerAuthentication } from \"./FeeBurnerAuthentication.sol\";\n\ncontract BalancerFeeBurner is IBalancerFeeBurner, ReentrancyGuardTransient, VaultGuard, FeeBurnerAuthentication {\n using SafeERC20 for IERC20;\n\n mapping(IERC20 => SwapPathStep[] steps) internal _burnSteps;\n\n constructor(\n IVault vault,\n IProtocolFeeSweeper _protocolFeeSweeper,\n address initialOwner\n ) VaultGuard(vault) FeeBurnerAuthentication(_protocolFeeSweeper, initialOwner) {\n protocolFeeSweeper = _protocolFeeSweeper;\n }\n\n /// @inheritdoc IBalancerFeeBurner\n function setBurnPath(IERC20 feeToken, SwapPathStep[] calldata steps) external onlyFeeRecipientOrOwner {\n delete _burnSteps[feeToken];\n\n for (uint256 i = 0; i < steps.length; i++) {\n _burnSteps[feeToken].push(steps[i]);\n }\n }\n\n /// @inheritdoc IBalancerFeeBurner\n function getBurnPath(IERC20 feeToken) public view returns (SwapPathStep[] memory steps) {\n steps = _burnSteps[feeToken];\n\n if (steps.length == 0) {\n revert BurnPathDoesNotExist();\n }\n }\n\n /// @inheritdoc IProtocolFeeBurner\n function burn(\n address pool,\n IERC20 feeToken,\n uint256 feeTokenAmount,\n IERC20 targetToken,\n uint256 minAmountOut,\n address recipient,\n uint256 deadline\n ) external onlyProtocolFeeSweeper {\n _vault.unlock(\n abi.encodeCall(\n BalancerFeeBurner.burnHook,\n BurnHookParams({\n pool: pool,\n sender: msg.sender,\n feeToken: feeToken,\n feeTokenAmount: feeTokenAmount,\n targetToken: targetToken,\n minAmountOut: minAmountOut,\n recipient: recipient,\n deadline: deadline\n })\n )\n );\n }\n\n function burnHook(BurnHookParams calldata params) external nonReentrant onlyVault {\n // The deadline is timestamp-based: it should not be relied upon for sub-minute accuracy.\n // solhint-disable-next-line not-rely-on-time\n if (block.timestamp > params.deadline) {\n revert SwapDeadline();\n }\n\n IERC20 feeToken = params.feeToken;\n IERC20 targetToken = params.targetToken;\n uint256 feeTokenAmount = params.feeTokenAmount;\n\n SwapPathStep[] memory steps = getBurnPath(feeToken);\n uint256 lastStepIndex = steps.length - 1;\n if (steps[lastStepIndex].tokenOut != targetToken) {\n revert TargetTokenOutMismatch();\n }\n\n // Transfer the `tokenIn` to the vault.\n feeToken.safeTransferFrom(params.sender, address(_vault), feeTokenAmount);\n _vault.settle(feeToken, feeTokenAmount);\n\n // Swap the fee token for the target token through the steps.\n IERC20 stepTokenIn = feeToken;\n uint256 stepExactAmountIn = feeTokenAmount;\n for (uint256 i = 0; i < steps.length; i++) {\n SwapPathStep memory step = steps[i];\n\n (, , uint256 amountOut) = _vault.swap(\n VaultSwapParams({\n kind: SwapKind.EXACT_IN,\n pool: step.pool,\n tokenIn: stepTokenIn,\n tokenOut: step.tokenOut,\n amountGivenRaw: stepExactAmountIn,\n limitRaw: (i == lastStepIndex) ? params.minAmountOut : 0,\n userData: bytes(\"\")\n })\n );\n\n stepTokenIn = step.tokenOut;\n stepExactAmountIn = amountOut;\n }\n\n // Last stepTokenIn is the final token out. Last stepExactAmountIn is the amount out.\n _vault.sendTo(stepTokenIn, params.recipient, stepExactAmountIn);\n\n emit ProtocolFeeBurned(params.pool, feeToken, feeTokenAmount, targetToken, stepExactAmountIn, params.recipient);\n }\n}\n"},"contracts/CallAndRevert.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport { RevertCodec } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\";\n\ncontract CallAndRevert {\n error QuoteResultSpoofed();\n\n function _callAndRevert(address target, bytes memory data) internal returns (bytes memory) {\n try CallAndRevert(address(this)).callAndRevertHook(target, data) {\n revert(\"Unexpected success\");\n } catch (bytes memory result) {\n return RevertCodec.catchEncodedResult(result);\n }\n }\n\n function callAndRevertHook(address target, bytes memory data) external {\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory result) = (target).call(data);\n if (success) {\n // This will only revert if result is empty and sender account has no code.\n Address.verifyCallResultFromTarget(msg.sender, success, result);\n // Send result in revert reason.\n revert RevertCodec.Result(result);\n } else {\n // If the call reverted with a spoofed `QuoteResult`, we catch it and bubble up a different reason.\n bytes4 errorSelector = RevertCodec.parseSelector(result);\n if (errorSelector == RevertCodec.Result.selector) {\n revert QuoteResultSpoofed();\n }\n\n // Otherwise we bubble up the original revert reason.\n RevertCodec.bubbleUpRevert(result);\n }\n }\n}\n"},"contracts/CowSwapFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC165 } from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport { IERC1271 } from \"@openzeppelin/contracts/interfaces/IERC1271.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\";\nimport { ICowSwapFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\";\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\nimport { IComposableCow } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\";\nimport {\n ICowConditionalOrderGenerator\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\";\nimport {\n ICowConditionalOrder,\n GPv2Order\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { Version } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\";\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\n\nimport { FeeBurnerAuthentication } from \"./FeeBurnerAuthentication.sol\";\n\n// solhint-disable not-rely-on-time\n\n/**\n * @title CowSwapFeeBurner\n * @notice A contract that burns protocol fees using CowSwap.\n * @dev The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function.\n * Only one order per token is allowed at a time.\n */\ncontract CowSwapFeeBurner is ICowSwapFeeBurner, FeeBurnerAuthentication, ReentrancyGuardTransient, Version {\n using SafeERC20 for IERC20;\n\n struct ShortOrder {\n IERC20 tokenOut;\n address receiver;\n uint256 minAmountOut;\n uint32 deadline;\n }\n\n bytes4 internal constant _SIGNATURE_VERIFIER_MUXER_INTERFACE = 0x62af8dc2;\n bytes32 internal immutable _sellKind = keccak256(\"sell\");\n bytes32 internal immutable _tokenBalance = keccak256(\"erc20\");\n\n IComposableCow public immutable composableCow;\n address public immutable vaultRelayer;\n bytes32 public immutable appData;\n\n // Orders are identified by the tokenIn (often called the tokenIn).\n mapping(IERC20 token => ShortOrder order) internal _orders;\n\n constructor(\n IProtocolFeeSweeper _protocolFeeSweeper,\n IComposableCow _composableCow,\n address _cowVaultRelayer,\n bytes32 _appData,\n address _initialOwner,\n string memory _version\n ) Version(_version) FeeBurnerAuthentication(_protocolFeeSweeper, _initialOwner) {\n composableCow = _composableCow;\n vaultRelayer = _cowVaultRelayer;\n appData = _appData;\n }\n\n /***************************************************************************\n ICowSwapFeeBurner\n ***************************************************************************/\n\n /// @inheritdoc ICowSwapFeeBurner\n function getOrder(IERC20 tokenIn) external view returns (GPv2Order memory) {\n return _getOrder(tokenIn);\n }\n\n /// @inheritdoc ICowSwapFeeBurner\n function getOrderStatus(IERC20 tokenIn) external view returns (OrderStatus status) {\n (status, ) = _getOrderStatusAndBalance(tokenIn);\n }\n\n /// @inheritdoc ICowSwapFeeBurner\n function retryOrder(IERC20 tokenIn, uint256 minAmountOut, uint256 deadline) external onlyFeeRecipientOrOwner {\n (OrderStatus status, uint256 amount) = _getOrderStatusAndBalance(tokenIn);\n\n if (status != OrderStatus.Failed) {\n revert OrderHasUnexpectedStatus(status);\n }\n\n _checkMinAmountOut(minAmountOut);\n _checkDeadline(deadline);\n\n _orders[tokenIn].minAmountOut = minAmountOut;\n _orders[tokenIn].deadline = uint32(deadline);\n\n // Refresh approval with current balance just in case.\n if (tokenIn.allowance(address(this), vaultRelayer) < amount) {\n tokenIn.forceApprove(vaultRelayer, amount);\n }\n\n _createCowOrder(tokenIn);\n\n emit OrderRetried(tokenIn, amount, minAmountOut, deadline);\n }\n\n /// @inheritdoc ICowSwapFeeBurner\n function cancelOrder(IERC20 tokenIn, address receiver) external onlyFeeRecipientOrOwner {\n (OrderStatus status, uint256 amount) = _getOrderStatusAndBalance(tokenIn);\n\n if (status != OrderStatus.Failed) {\n revert OrderHasUnexpectedStatus(status);\n }\n\n _cancelOrder(tokenIn, receiver, amount);\n }\n\n /// @inheritdoc ICowSwapFeeBurner\n function emergencyCancelOrder(IERC20 tokenIn, address receiver) external onlyFeeRecipientOrOwner {\n _cancelOrder(tokenIn, receiver, tokenIn.balanceOf(address(this)));\n }\n\n function _cancelOrder(IERC20 tokenIn, address receiver, uint256 amount) internal {\n tokenIn.forceApprove(vaultRelayer, 0);\n delete _orders[tokenIn];\n\n SafeERC20.safeTransfer(tokenIn, receiver, amount);\n\n emit OrderCanceled(tokenIn, amount, receiver);\n }\n\n /***************************************************************************\n IProtocolFeeBurner\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeBurner\n function burn(\n address pool,\n IERC20 feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 targetToken,\n uint256 minTargetTokenAmountOut,\n address recipient,\n uint256 deadline\n ) external virtual onlyProtocolFeeSweeper nonReentrant {\n _burn(\n pool,\n feeToken,\n exactFeeTokenAmountIn,\n targetToken,\n minTargetTokenAmountOut,\n recipient,\n deadline,\n true // pullFeeToken\n );\n }\n\n function _burn(\n address pool,\n IERC20 feeToken,\n uint256 feeTokenAmount,\n IERC20 targetToken,\n uint256 minTargetTokenAmountOut,\n address recipient,\n uint256 deadline,\n bool pullFeeToken\n ) internal {\n if (targetToken == feeToken) {\n revert InvalidOrderParameters(\"Fee token and target token are the same\");\n } else if (feeTokenAmount == 0) {\n revert InvalidOrderParameters(\"Fee token amount is zero\");\n }\n\n _checkMinAmountOut(minTargetTokenAmountOut);\n _checkDeadline(deadline);\n\n if (pullFeeToken) {\n feeToken.safeTransferFrom(msg.sender, address(this), feeTokenAmount);\n }\n\n (OrderStatus status, ) = _getOrderStatusAndBalance(feeToken, feeTokenAmount);\n if (status != OrderStatus.Nonexistent && status != OrderStatus.Filled) {\n // New order can only be created if no order exists or the previous one was completely filled.\n // This prevents overlapping orders for the same token.\n revert OrderHasUnexpectedStatus(status);\n }\n\n _createCowOrder(feeToken);\n\n feeToken.forceApprove(vaultRelayer, feeTokenAmount);\n\n _orders[feeToken] = ShortOrder({\n tokenOut: targetToken,\n receiver: recipient,\n minAmountOut: minTargetTokenAmountOut,\n deadline: uint32(deadline)\n });\n\n emit ProtocolFeeBurned(pool, feeToken, feeTokenAmount, targetToken, minTargetTokenAmountOut, recipient);\n }\n\n /***************************************************************************\n ICowConditionalOrder\n ***************************************************************************/\n\n /// @inheritdoc ICowConditionalOrderGenerator\n function getTradeableOrder(\n address,\n address,\n bytes32,\n bytes calldata staticInput,\n bytes calldata\n ) public view returns (GPv2Order memory) {\n IERC20 tokenIn = IERC20(abi.decode(staticInput, (address)));\n\n return _getOrder(tokenIn);\n }\n\n /// @inheritdoc ICowConditionalOrder\n function verify(\n address owner,\n address sender,\n bytes32,\n bytes32,\n bytes32 ctx,\n bytes calldata staticInput,\n bytes calldata offchainInput,\n GPv2Order calldata _order\n ) external view {\n GPv2Order memory savedOrder = getTradeableOrder(owner, sender, ctx, staticInput, offchainInput);\n\n if (_order.buyAmount > savedOrder.buyAmount) {\n savedOrder.buyAmount = _order.buyAmount;\n }\n\n if (keccak256(abi.encode(savedOrder)) != keccak256(abi.encode(_order))) {\n revert InvalidOrderParameters(\"Verify order does not match with existing order\");\n }\n }\n\n /***************************************************************************\n Miscellaneous\n ***************************************************************************/\n\n /// @inheritdoc IERC1271\n function isValidSignature(bytes32 _hash, bytes memory signature) external view returns (bytes4) {\n (GPv2Order memory order, IComposableCow.Payload memory payload) = abi.decode(\n signature,\n (GPv2Order, IComposableCow.Payload)\n );\n\n // Forward the query to ComposableCow\n return\n composableCow.isValidSafeSignature(\n address(this),\n msg.sender,\n _hash,\n composableCow.domainSeparator(),\n bytes32(0),\n abi.encode(order),\n abi.encode(payload)\n );\n }\n\n /// @inheritdoc IERC165\n function supportsInterface(bytes4 interfaceId) public pure returns (bool) {\n // Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\n if (interfaceId == _SIGNATURE_VERIFIER_MUXER_INTERFACE) {\n revert InterfaceIsSignatureVerifierMuxer();\n }\n\n return\n interfaceId == type(ICowConditionalOrder).interfaceId ||\n interfaceId == type(ICowConditionalOrderGenerator).interfaceId ||\n interfaceId == type(IERC1271).interfaceId ||\n interfaceId == type(IERC165).interfaceId;\n }\n\n /***************************************************************************\n Private Functions\n ***************************************************************************/\n\n function _getOrder(IERC20 tokenIn) private view returns (GPv2Order memory) {\n ShortOrder memory shortOrder = _orders[tokenIn];\n\n if (shortOrder.deadline == 0) {\n revert OrderNotValid(\"Order does not exist\");\n }\n\n return\n GPv2Order({\n sellToken: tokenIn,\n buyToken: shortOrder.tokenOut,\n receiver: shortOrder.receiver,\n sellAmount: tokenIn.balanceOf(address(this)),\n buyAmount: shortOrder.minAmountOut,\n validTo: shortOrder.deadline,\n appData: appData,\n feeAmount: 0,\n kind: _sellKind,\n partiallyFillable: true,\n sellTokenBalance: _tokenBalance,\n buyTokenBalance: _tokenBalance\n });\n }\n\n function _getOrderStatusAndBalance(IERC20 tokenIn) private view returns (OrderStatus, uint256) {\n return _getOrderStatusAndBalance(tokenIn, 0);\n }\n\n function _getOrderStatusAndBalance(\n IERC20 tokenIn,\n uint256 balanceDelta\n ) private view returns (OrderStatus, uint256) {\n ShortOrder storage shortOrder = _orders[tokenIn];\n\n uint256 deadline = shortOrder.deadline;\n\n if (deadline == 0) {\n // No order exists because it was never created before.\n return (OrderStatus.Nonexistent, 0);\n }\n\n // We return the balance to the state before we received tokens for the new order.\n uint256 balance = tokenIn.balanceOf(address(this)) - balanceDelta;\n if (balance == 0) {\n // If no tokens remain, we assume the order was fully executed\n // because all tokens are taken by the relayer when the order is filled.\n return (OrderStatus.Filled, balance);\n } else if (block.timestamp > deadline) {\n // If tokens remain and the deadline passed, the order is considered failed.\n return (OrderStatus.Failed, balance);\n }\n\n // Otherwise, the order is still active.\n return (OrderStatus.Active, balance);\n }\n\n function _checkDeadline(uint256 deadline) private view {\n if (block.timestamp > deadline) {\n revert InvalidOrderParameters(\"Deadline is in the past\");\n }\n }\n\n function _checkMinAmountOut(uint256 minAmountOut) private pure {\n if (minAmountOut == 0) {\n revert InvalidOrderParameters(\"Min amount out is zero\");\n }\n }\n\n function _createCowOrder(IERC20 tokenIn) private {\n composableCow.create(\n ICowConditionalOrder.ConditionalOrderParams({\n handler: ICowConditionalOrder(address(this)),\n salt: bytes32(0),\n staticData: abi.encode(tokenIn)\n }),\n true\n );\n }\n}\n"},"contracts/ERC4626CowSwapFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IComposableCow } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\";\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport { PackedTokenBalance } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\";\n\nimport { CowSwapFeeBurner } from \"./CowSwapFeeBurner.sol\";\n\n/**\n * @title ERC4626CowSwapFeeBurner\n * @notice A contract that burns ERC4626 protocol fee tokens using CowSwap, previously redeeming underlying assets.\n * @dev The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function.\n * Only one order per token is allowed at a time.\n */\ncontract ERC4626CowSwapFeeBurner is CowSwapFeeBurner {\n using SafeERC20 for IERC20;\n\n /// @notice The amount out is zero.\n error AmountOutIsZero(IERC20 token);\n\n constructor(\n IProtocolFeeSweeper _protocolFeeSweeper,\n IComposableCow _composableCow,\n address _cowVaultRelayer,\n bytes32 _appData,\n address _initialOwner,\n string memory _version\n ) CowSwapFeeBurner(_protocolFeeSweeper, _composableCow, _cowVaultRelayer, _appData, _initialOwner, _version) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /**\n * @notice Treats `feeToken` as an ERC4626, redeems `exactFeeTokenAmountIn`, swaps the underlying asset for\n * `targetToken`, and sends the proceeds to the `recipient`.\n * @dev Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\n * @param pool The pool the fees came from (only used for documentation in the event)\n * @param feeToken The token collected from the pool\n * @param exactFeeTokenAmountIn The number of fee tokens collected\n * @param targetToken The desired target token (`tokenOut` of the swap)\n * @param encodedMinAmountsOut The minimum amounts out for the swap, encoded as a 256-bit integer:\n * - Upper 128 bits: the minimum amount of the target token to receive\n * - Lower 128 bits: the minimum amount of the ERC4626 token to receive\n * @param recipient The recipient of the swap proceeds\n * @param deadline Deadline for the burn operation (i.e., swap), after which it will revert\n */\n function burn(\n address pool,\n IERC20 feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 targetToken,\n uint256 encodedMinAmountsOut,\n address recipient,\n uint256 deadline\n ) external override onlyProtocolFeeSweeper nonReentrant {\n IERC4626 erc4626Token = IERC4626(address(feeToken));\n IERC20 underlyingToken = IERC20(erc4626Token.asset());\n\n // In this case we first pull the wrapped token, unwrap, and then proceed to burn by creating an order for\n // the underlying token.\n IERC20(address(erc4626Token)).safeTransferFrom(msg.sender, address(this), exactFeeTokenAmountIn);\n\n (uint256 minTargetTokenAmountOut, uint256 minERC4626AmountOut) = PackedTokenBalance.fromPackedBalance(\n bytes32(encodedMinAmountsOut)\n );\n\n uint256 feeTokenBalanceBefore = underlyingToken.balanceOf(address(this));\n\n erc4626Token.redeem(exactFeeTokenAmountIn, address(this), address(this));\n\n uint256 feeTokenBalanceAfter = underlyingToken.balanceOf(address(this));\n exactFeeTokenAmountIn = feeTokenBalanceAfter - feeTokenBalanceBefore;\n\n if (exactFeeTokenAmountIn < minERC4626AmountOut) {\n revert AmountOutBelowMin(underlyingToken, exactFeeTokenAmountIn, minERC4626AmountOut);\n } else if (exactFeeTokenAmountIn == 0) {\n revert AmountOutIsZero(underlyingToken);\n }\n\n // This case is not handled by the internal `_burn` function, but it's valid: we can consider that the token\n // has already been converted to the correct token, so we just forward the result and finish.\n if (underlyingToken == targetToken) {\n // We apply the slippage check, but not deadline as the order settlement is instant in this case.\n if (exactFeeTokenAmountIn < minTargetTokenAmountOut) {\n revert AmountOutBelowMin(targetToken, exactFeeTokenAmountIn, minTargetTokenAmountOut);\n }\n\n underlyingToken.safeTransfer(recipient, exactFeeTokenAmountIn);\n } else {\n _burn(\n pool,\n underlyingToken,\n exactFeeTokenAmountIn,\n targetToken,\n minTargetTokenAmountOut,\n recipient,\n deadline,\n false // pullToken\n );\n }\n }\n}\n"},"contracts/FeeBurnerAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { Ownable2Step } from \"@openzeppelin/contracts/access/Ownable2Step.sol\";\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\n\ncontract FeeBurnerAuthentication is Ownable2Step {\n IProtocolFeeSweeper public immutable protocolFeeSweeper;\n\n /// @notice The fee protocol is invalid.\n error InvalidProtocolFeeSweeper();\n\n /// @notice The sender does not have permission to call a function.\n error SenderNotAllowed();\n\n modifier onlyProtocolFeeSweeper() {\n if (msg.sender != address(protocolFeeSweeper)) {\n revert SenderNotAllowed();\n }\n _;\n }\n\n modifier onlyFeeRecipientOrOwner() {\n if (msg.sender != protocolFeeSweeper.getFeeRecipient() && msg.sender != owner()) {\n revert SenderNotAllowed();\n }\n _;\n }\n\n constructor(IProtocolFeeSweeper _protocolFeeSweeper, address initialOwner) Ownable(initialOwner) {\n if (address(_protocolFeeSweeper) == address(0)) {\n revert InvalidProtocolFeeSweeper();\n }\n\n protocolFeeSweeper = _protocolFeeSweeper;\n }\n}\n"},"contracts/HyperEVMRateProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.24;\n\nimport {\n IHyperEVMRateProvider\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\";\nimport { IRateProvider } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\";\n\nimport { HyperSpotPricePrecompile } from \"./utils/HyperSpotPricePrecompile.sol\";\nimport { HyperTokenInfoPrecompile } from \"./utils/HyperTokenInfoPrecompile.sol\";\n\n/**\n * @notice A rate provider for the HyperEVM.\n * @dev HyperEVM has precompiles that allow to fetch the spot price of a token (in terms of USD or other tokens).\n * This contract uses the spot price and the token info precompiles to return the rate of a token on-chain,\n * scaled with 18 decimals (compatible with the Vault).\n */\ncontract HyperEVMRateProvider is IRateProvider, IHyperEVMRateProvider {\n uint256 private immutable _spotPriceMultiplier;\n uint32 private immutable _pairIndex;\n uint32 private immutable _tokenIndex;\n\n constructor(uint32 tokenIndex, uint32 pairIndex) {\n uint8 szDecimals = HyperTokenInfoPrecompile.szDecimals(tokenIndex);\n // The spot price is returned with a different number of decimals for each token. So, to make this rate\n // provider compatible with the vault, we need to scale the spot price to 18 decimals using this multiplier.\n // According to hyperliquid's documentation\n // (https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore),\n // szDecimals has a minimum of 0 and a maximum of 8, so the multiplier is always between 1e10 and 1e18.\n _spotPriceMultiplier = 1e18 / (10 ** (8 - szDecimals));\n\n _pairIndex = pairIndex;\n _tokenIndex = tokenIndex;\n }\n\n /// @inheritdoc IHyperEVMRateProvider\n function getSpotPriceMultiplier() external view returns (uint256) {\n return _spotPriceMultiplier;\n }\n\n /// @inheritdoc IHyperEVMRateProvider\n function getTokenIndex() external view returns (uint32) {\n return _tokenIndex;\n }\n\n /// @inheritdoc IHyperEVMRateProvider\n function getPairIndex() external view returns (uint32) {\n return _pairIndex;\n }\n\n /// @inheritdoc IRateProvider\n function getRate() external view returns (uint256) {\n uint256 spotPrice = HyperSpotPricePrecompile.spotPrice(_pairIndex);\n return spotPrice * _spotPriceMultiplier;\n }\n}\n"},"contracts/HyperEVMRateProviderFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport {\n IHyperEVMRateProviderFactory\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol\";\nimport {\n IHyperEVMRateProvider\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\nimport { Version } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\";\n\nimport { HyperEVMRateProvider } from \"./HyperEVMRateProvider.sol\";\n\n/// @notice Factory for deploying and managing HyperEVM rate providers.\ncontract HyperEVMRateProviderFactory is IHyperEVMRateProviderFactory, SingletonAuthentication, Version {\n uint256 internal immutable _rateProviderVersion;\n bool internal _isDisabled;\n\n mapping(bytes32 rateProviderId => IHyperEVMRateProvider rateProvider) internal _rateProviders;\n mapping(IHyperEVMRateProvider rateProvider => bool creationFlag) internal _isRateProviderFromFactory;\n\n constructor(\n IVault vault,\n string memory factoryVersion,\n uint256 rateProviderVersion\n ) SingletonAuthentication(vault) Version(factoryVersion) {\n _rateProviderVersion = rateProviderVersion;\n }\n\n /// @inheritdoc IHyperEVMRateProviderFactory\n function getRateProviderVersion() external view returns (uint256) {\n return _rateProviderVersion;\n }\n\n /// @inheritdoc IHyperEVMRateProviderFactory\n function create(uint32 tokenIndex, uint32 pairIndex) external returns (IHyperEVMRateProvider rateProvider) {\n _ensureEnabled();\n\n bytes32 rateProviderId = _computeRateProviderId(tokenIndex, pairIndex);\n\n address existingRateProvider = address(_rateProviders[rateProviderId]);\n\n if (existingRateProvider != address(0)) {\n revert RateProviderAlreadyExists(tokenIndex, pairIndex, existingRateProvider);\n }\n\n rateProvider = IHyperEVMRateProvider(address(new HyperEVMRateProvider(tokenIndex, pairIndex)));\n _rateProviders[rateProviderId] = rateProvider;\n _isRateProviderFromFactory[rateProvider] = true;\n\n emit RateProviderCreated(tokenIndex, pairIndex, address(rateProvider));\n }\n\n /// @inheritdoc IHyperEVMRateProviderFactory\n function getRateProvider(\n uint32 tokenIndex,\n uint32 pairIndex\n ) external view returns (IHyperEVMRateProvider rateProvider) {\n bytes32 rateProviderId = _computeRateProviderId(tokenIndex, pairIndex);\n rateProvider = _rateProviders[rateProviderId];\n if (address(rateProvider) == address(0)) {\n revert RateProviderNotFound(tokenIndex, pairIndex);\n }\n return rateProvider;\n }\n\n /// @inheritdoc IHyperEVMRateProviderFactory\n function isRateProviderFromFactory(IHyperEVMRateProvider rateProvider) external view returns (bool) {\n return _isRateProviderFromFactory[rateProvider];\n }\n\n /// @inheritdoc IHyperEVMRateProviderFactory\n function disable() external authenticate {\n _ensureEnabled();\n\n _isDisabled = true;\n emit RateProviderFactoryDisabled();\n }\n\n function _computeRateProviderId(uint32 tokenIndex, uint32 pairIndex) internal pure returns (bytes32) {\n return keccak256(abi.encode(tokenIndex, pairIndex));\n }\n\n function _ensureEnabled() internal view {\n if (_isDisabled) {\n revert RateProviderFactoryIsDisabled();\n }\n }\n}\n"},"contracts/OwnableAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { Ownable2Step } from \"@openzeppelin/contracts/access/Ownable2Step.sol\";\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { Authentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\";\n\n/**\n * @notice OwnableAuthentication is a contract that combines ownership management with authentication.\n * @dev Use it to pre-wire admin multisigs upon deployment to a contract that requires permissioned functions to work,\n * where the impact of the owner going rogue is minimal. Contract registries, fee burners, and other utility contracts\n * are good examples.\n * In turn, the pre-configured owner can speed up operations as it can perform any action right after deployment without\n * waiting for governance to set up the authorizer, which can take whole weeks.\n * On the other hand, governance can always revoke or change the owner at any given time, keeping superior powers\n * above the owner.\n */\ncontract OwnableAuthentication is Ownable2Step, Authentication {\n /// @notice The vault has not been set.\n error VaultNotSet();\n\n IVault public immutable vault;\n\n constructor(\n IVault vault_,\n address initialOwner\n ) Ownable(initialOwner) Authentication(bytes32(uint256(uint160(address(this))))) {\n if (address(vault_) == address(0)) {\n revert VaultNotSet();\n }\n\n vault = vault_;\n }\n\n /// @notice Returns the authorizer address according to the Vault.\n function getAuthorizer() external view returns (IAuthorizer) {\n return vault.getAuthorizer();\n }\n\n /**\n * @notice Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\n * @dev This allows governance to revoke the owner at any time, preserving control above the owner at all times.\n * address(0) is also a valid owner, as governance can simply choose to revoke ownership.\n * Ownership can always be forced back to any address later on.\n */\n function forceTransferOwnership(address newOwner) external authenticate {\n // `authenticate` let's the owner through, so we filter it out here.\n if (msg.sender == owner()) {\n revert SenderNotAllowed();\n }\n _transferOwnership(newOwner);\n }\n\n function _canPerform(bytes32 actionId, address user) internal view virtual override returns (bool) {\n // The owner is always allowed to perform any action.\n if (user == owner()) {\n return true;\n }\n\n // Otherwise, check the vault's authorizer for permission.\n return vault.getAuthorizer().canPerform(actionId, user, address(this));\n }\n}\n"},"contracts/PoolHelperCommon.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\";\n\nimport { IPoolHelperCommon } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { OwnableAuthentication } from \"./OwnableAuthentication.sol\";\n\n/// @notice Common code for helper functions that operate on a subset of pools.\nabstract contract PoolHelperCommon is IPoolHelperCommon, OwnableAuthentication {\n using EnumerableSet for EnumerableSet.AddressSet;\n\n // Counter for generating unique pool set IDs. Must start at 1, since 0 is defined as invalid.\n uint256 private _nextPoolSetId = 1;\n\n // Mapping from pool set ID to the manager address.\n mapping(uint256 poolSetId => address manager) private _poolSetManagers;\n\n // Reverse lookup to find which set a given manager owns.\n // Note that this means an address may only control a single pool set.\n mapping(address manager => uint256 poolSetId) private _poolSetLookup;\n\n // Mapping from a pool set ID to the set of pools in that pool set.\n mapping(uint256 poolSetId => EnumerableSet.AddressSet pools) private _poolSets;\n\n // Ensure the explicit poolSetId (used in the admin interface) is valid.\n modifier withValidPoolSet(uint256 poolSetId) {\n _ensureValidPoolSet(poolSetId);\n _;\n }\n\n // Ensure the pool is in a set controlled by the caller. This is used in derived contracts.\n modifier withValidPoolForSender(address pool) {\n uint256 poolSetId = _getValidPoolSetId();\n _ensurePoolInSet(poolSetId, pool);\n _;\n }\n\n // Ensure the manager is non-zero, and not already a manager of another set.\n modifier withValidManager(address manager) {\n _ensureValidManager(manager);\n _;\n }\n\n constructor(IVault vault, address initialOwner) OwnableAuthentication(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /***************************************************************************\n Manage Pool Sets\n ***************************************************************************/\n\n /// @inheritdoc IPoolHelperCommon\n function createPoolSet(\n address initialManager\n ) external onlyOwner withValidManager(initialManager) returns (uint256) {\n return _createPoolSet(initialManager);\n }\n\n /// @inheritdoc IPoolHelperCommon\n function createPoolSet(\n address initialManager,\n address[] memory newPools\n ) external onlyOwner withValidManager(initialManager) returns (uint256 poolSetId) {\n poolSetId = _createPoolSet(initialManager);\n\n if (newPools.length > 0) {\n addPoolsToSet(poolSetId, newPools);\n }\n }\n\n function _createPoolSet(address initialManager) internal returns (uint256 poolSetId) {\n poolSetId = _nextPoolSetId++;\n\n // Add to forward and reverse mappings.\n _poolSetManagers[poolSetId] = initialManager;\n _poolSetLookup[initialManager] = poolSetId;\n\n emit PoolSetCreated(poolSetId, initialManager);\n }\n\n /// @inheritdoc IPoolHelperCommon\n function destroyPoolSet(uint256 poolSetId) external onlyOwner withValidPoolSet(poolSetId) {\n EnumerableSet.AddressSet storage poolSet = _poolSets[poolSetId];\n\n // Remove all pools from the set.\n uint256 numPools = poolSet.length();\n\n while (numPools > 0) {\n unchecked {\n --numPools;\n }\n\n address pool = poolSet.at(numPools);\n emit PoolRemovedFromSet(pool, poolSetId);\n\n poolSet.remove(pool);\n }\n\n // Remove the set itself.\n delete _poolSets[poolSetId];\n\n address manager = _poolSetManagers[poolSetId];\n\n // Also remove associated manager from both mappings.\n _poolSetManagers[poolSetId] = address(0);\n _poolSetLookup[manager] = 0;\n\n emit PoolSetDestroyed(poolSetId, manager);\n }\n\n /// @inheritdoc IPoolHelperCommon\n function transferPoolSetOwnership(address newManager) external withValidManager(newManager) {\n uint256 poolSetId = _getValidPoolSetId();\n\n _poolSetManagers[poolSetId] = newManager;\n\n // The \"old\" manager must be the current sender.\n _poolSetLookup[msg.sender] = 0;\n _poolSetLookup[newManager] = poolSetId;\n\n emit PoolSetOwnershipTransferred(poolSetId, msg.sender, newManager);\n }\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /// @inheritdoc IPoolHelperCommon\n function addPoolsToSet(uint256 poolSetId, address[] memory newPools) public onlyOwner withValidPoolSet(poolSetId) {\n uint256 numPools = newPools.length;\n\n for (uint256 i = 0; i < numPools; i++) {\n address pool = newPools[i];\n\n // Ensure the address is a valid pool.\n if (vault.isPoolRegistered(pool) == false) {\n revert IVaultErrors.PoolNotRegistered(pool);\n }\n\n if (_poolSets[poolSetId].add(pool) == false) {\n revert PoolAlreadyInSet(pool, poolSetId);\n }\n\n // Call virtual function in case additional validation is needed.\n _validatePool(pool);\n\n emit PoolAddedToSet(pool, poolSetId);\n }\n }\n\n /// @inheritdoc IPoolHelperCommon\n function removePoolsFromSet(\n uint256 poolSetId,\n address[] memory pools\n ) public onlyOwner withValidPoolSet(poolSetId) {\n uint256 numPools = pools.length;\n\n for (uint256 i = 0; i < numPools; i++) {\n address pool = pools[i];\n\n if (_poolSets[poolSetId].remove(pool) == false) {\n revert PoolNotInSet(pool, poolSetId);\n }\n\n emit PoolRemovedFromSet(pool, poolSetId);\n }\n }\n\n /***************************************************************************\n Getters \n ***************************************************************************/\n\n /// @inheritdoc IPoolHelperCommon\n function getPoolSetIdForCaller() public view returns (uint256) {\n return _poolSetLookup[msg.sender];\n }\n\n /// @inheritdoc IPoolHelperCommon\n function getPoolSetIdForManager(address manager) public view returns (uint256) {\n return _poolSetLookup[manager];\n }\n\n /// @inheritdoc IPoolHelperCommon\n function getPoolCountForSet(uint256 poolSetId) external view withValidPoolSet(poolSetId) returns (uint256) {\n return _poolSets[poolSetId].length();\n }\n\n /// @inheritdoc IPoolHelperCommon\n function isValidPoolSetId(uint256 poolSetId) external view returns (bool) {\n return _poolSetManagers[poolSetId] != address(0);\n }\n\n /// @inheritdoc IPoolHelperCommon\n function isPoolInSet(address pool, uint256 poolSetId) external view withValidPoolSet(poolSetId) returns (bool) {\n return _poolSets[poolSetId].contains(pool);\n }\n\n /// @inheritdoc IPoolHelperCommon\n function getAllPoolsInSet(\n uint256 poolSetId\n ) external view withValidPoolSet(poolSetId) returns (address[] memory pools) {\n return _poolSets[poolSetId].values();\n }\n\n /// @inheritdoc IPoolHelperCommon\n function getPoolsInSet(\n uint256 poolSetId,\n uint256 from,\n uint256 to\n ) public view withValidPoolSet(poolSetId) returns (address[] memory pools) {\n uint256 spanLength = _poolSets[poolSetId].length();\n\n if (from > to || to > spanLength || from >= spanLength) {\n revert IndexOutOfBounds(poolSetId);\n }\n\n pools = new address[](to - from);\n for (uint256 i = from; i < to; i++) {\n pools[i - from] = _poolSets[poolSetId].at(i);\n }\n }\n\n /// @inheritdoc IPoolHelperCommon\n function getNextPoolSetId() external view returns (uint256) {\n return _nextPoolSetId;\n }\n\n /// @inheritdoc IPoolHelperCommon\n function getManagerForPoolSet(uint256 poolSetId) external view returns (address) {\n return _poolSetManagers[poolSetId];\n }\n\n /***************************************************************************\n Internal functions \n ***************************************************************************/\n\n // Find and validate the poolSetId for the caller.\n function _getValidPoolSetId() internal view returns (uint256 poolSetId) {\n poolSetId = getPoolSetIdForCaller();\n\n if (poolSetId == 0) {\n revert SenderIsNotPoolSetManager();\n }\n }\n\n function _ensureValidManager(address manager) internal view {\n if (manager == address(0)) {\n revert InvalidPoolSetManager();\n }\n\n if (_poolSetLookup[manager] != 0) {\n revert PoolSetManagerNotUnique(manager);\n }\n }\n\n function _ensurePoolInSet(uint256 poolSetId, address pool) internal view {\n if (_poolSets[poolSetId].contains(pool) == false) {\n revert PoolNotInSet(pool, poolSetId);\n }\n }\n\n /// @dev Optional function called in `addPoolsToSet` for optional additional validation.\n function _validatePool(address pool) internal view virtual {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function _ensureValidPoolSet(uint256 poolSetId) internal view {\n if (poolSetId == 0 || _poolSetManagers[poolSetId] == address(0)) {\n revert InvalidPoolSetId(poolSetId);\n }\n }\n}\n"},"contracts/PoolPauseHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IPoolPauseHelper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { PoolHelperCommon } from \"./PoolHelperCommon.sol\";\n\ncontract PoolPauseHelper is IPoolPauseHelper, PoolHelperCommon {\n constructor(IVault vault, address initialOwner) PoolHelperCommon(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /// @inheritdoc IPoolPauseHelper\n function pausePools(address[] memory pools) public {\n // Retrieve the poolSetId for this sender.\n uint256 poolSetId = _getValidPoolSetId();\n\n uint256 length = pools.length;\n\n for (uint256 i = 0; i < length; i++) {\n address pool = pools[i];\n _ensurePoolInSet(poolSetId, pool);\n\n vault.pausePool(pool);\n }\n }\n}\n"},"contracts/PoolSwapFeeHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IPoolSwapFeeHelper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { PoolHelperCommon } from \"./PoolHelperCommon.sol\";\n\ncontract PoolSwapFeeHelper is IPoolSwapFeeHelper, PoolHelperCommon {\n constructor(IVault vault, address initialOwner) PoolHelperCommon(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /// @inheritdoc IPoolSwapFeeHelper\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) public withValidPoolForSender(pool) {\n vault.setStaticSwapFeePercentage(pool, swapFeePercentage);\n }\n\n /***************************************************************************\n Internal functions \n ***************************************************************************/\n\n /// @inheritdoc PoolHelperCommon\n function _validatePool(address pool) internal view override {\n // Pools cannot have a swap fee manager.\n if (vault.getPoolRoleAccounts(pool).swapFeeManager != address(0)) {\n revert PoolHasSwapManager(pool);\n }\n }\n}\n"},"contracts/PriceImpactHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { IRouter } from \"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\";\nimport { IRouterQueries } from \"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol\";\n\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nimport { CallAndRevert } from \"./CallAndRevert.sol\";\n\ncontract PriceImpactHelper is CallAndRevert {\n using FixedPoint for uint256;\n using SafeCast for *;\n\n IVault internal immutable _vault;\n IRouter internal immutable _router;\n\n constructor(IVault vault, IRouter router) {\n _vault = vault;\n _router = router;\n }\n\n /*******************************************************************************\n Price Impact\n *******************************************************************************/\n\n function calculateAddLiquidityUnbalancedPriceImpact(\n address pool,\n uint256[] memory exactAmountsIn,\n address sender\n ) external returns (uint256 priceImpact) {\n uint256 bptAmountOut = _queryAddLiquidityUnbalanced(pool, exactAmountsIn, sender);\n uint256[] memory proportionalAmountsOut = _queryRemoveLiquidityProportional(pool, bptAmountOut, sender);\n\n // get deltas between exactAmountsIn and proportionalAmountsOut\n int256[] memory deltas = new int256[](exactAmountsIn.length);\n for (uint256 i = 0; i < exactAmountsIn.length; i++) {\n deltas[i] = proportionalAmountsOut[i].toInt256() - exactAmountsIn[i].toInt256();\n }\n\n // query add liquidity for each delta, so we know how unbalanced each amount in is in terms of BPT\n int256[] memory deltaBPTs = new int256[](exactAmountsIn.length);\n for (uint256 i = 0; i < exactAmountsIn.length; i++) {\n deltaBPTs[i] = _queryAddLiquidityUnbalancedForTokenDeltas(pool, i, deltas, sender);\n }\n\n // zero out deltas leaving only a remaining delta within a single token\n uint256 remainingDeltaIndex = _zeroOutDeltas(pool, deltas, deltaBPTs, sender);\n\n // calculate price impact ABA with remaining delta and its respective exactAmountIn\n // remaining delta is always negative, so by multiplying by -1 we get a positive number\n uint256 delta = (-deltas[remainingDeltaIndex]).toUint256();\n return delta.divDown(exactAmountsIn[remainingDeltaIndex]) / 2;\n }\n\n /*******************************************************************************\n Router Queries\n *******************************************************************************/\n\n function _queryAddLiquidityUnbalanced(\n address pool,\n uint256[] memory exactAmountsIn,\n address sender\n ) internal returns (uint256) {\n return\n abi.decode(\n _callAndRevert(\n address(_router),\n abi.encodeWithSelector(\n IRouterQueries.queryAddLiquidityUnbalanced.selector,\n pool,\n exactAmountsIn,\n sender,\n \"\"\n )\n ),\n (uint256)\n );\n }\n\n function _queryRemoveLiquidityProportional(\n address pool,\n uint256 bptAmountOut,\n address sender\n ) internal returns (uint256[] memory) {\n return\n abi.decode(\n _callAndRevert(\n address(_router),\n abi.encodeWithSelector(\n IRouterQueries.queryRemoveLiquidityProportional.selector,\n pool,\n bptAmountOut,\n sender,\n \"\"\n )\n ),\n (uint256[])\n );\n }\n\n function _querySwapSingleTokenExactIn(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 amountIn,\n address sender\n ) internal returns (uint256) {\n return\n abi.decode(\n _callAndRevert(\n address(_router),\n abi.encodeWithSelector(\n IRouterQueries.querySwapSingleTokenExactIn.selector,\n pool,\n tokenIn,\n tokenOut,\n amountIn,\n sender,\n \"\"\n )\n ),\n (uint256)\n );\n }\n\n function _querySwapSingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 amountOut,\n address sender\n ) internal returns (uint256) {\n return\n abi.decode(\n _callAndRevert(\n address(_router),\n abi.encodeWithSelector(\n IRouterQueries.querySwapSingleTokenExactOut.selector,\n pool,\n tokenIn,\n tokenOut,\n amountOut,\n sender,\n \"\"\n )\n ),\n (uint256)\n );\n }\n\n /*******************************************************************************\n Helpers\n *******************************************************************************/\n\n function _queryAddLiquidityUnbalancedForTokenDeltas(\n address pool,\n uint256 tokenIndex,\n int256[] memory deltas,\n address sender\n ) internal returns (int256) {\n uint256[] memory zerosWithSingleDelta = new uint256[](deltas.length);\n int256 delta = deltas[tokenIndex];\n\n if (delta == 0) {\n return 0;\n }\n\n zerosWithSingleDelta[tokenIndex] = uint256(delta > 0 ? delta : -delta);\n int256 result = int256(_queryAddLiquidityUnbalanced(pool, zerosWithSingleDelta, sender));\n\n return delta > 0 ? result : -result;\n }\n\n function _zeroOutDeltas(\n address pool,\n int256[] memory deltas,\n int256[] memory deltaBPTs,\n address sender\n ) internal returns (uint256) {\n // Index of closest from 0 negative number in deltaBPTs array.\n uint256 maxNegativeDeltaIndex = 0;\n IERC20[] memory poolTokens = _vault.getPoolTokens(pool);\n\n for (uint256 i = 0; i < deltas.length - 1; i++) {\n // get minPositiveDeltaIndex and maxNegativeDeltaIndex\n uint256 minPositiveDeltaIndex = _minPositiveIndex(deltaBPTs);\n maxNegativeDeltaIndex = _maxNegativeIndex(deltaBPTs);\n\n uint256 givenTokenIndex;\n uint256 resultTokenIndex;\n uint256 resultAmount;\n\n if (deltaBPTs[minPositiveDeltaIndex] < -deltaBPTs[maxNegativeDeltaIndex]) {\n givenTokenIndex = minPositiveDeltaIndex;\n resultTokenIndex = maxNegativeDeltaIndex;\n resultAmount = _querySwapSingleTokenExactIn(\n pool,\n poolTokens[givenTokenIndex],\n poolTokens[resultTokenIndex],\n deltas[givenTokenIndex].toUint256(),\n sender\n );\n } else {\n givenTokenIndex = maxNegativeDeltaIndex;\n resultTokenIndex = minPositiveDeltaIndex;\n resultAmount = _querySwapSingleTokenExactOut(\n pool,\n poolTokens[resultTokenIndex],\n poolTokens[givenTokenIndex],\n (-deltas[givenTokenIndex]).toUint256(),\n sender\n );\n }\n\n // Update deltas and deltaBPTs\n deltas[givenTokenIndex] = 0;\n deltaBPTs[givenTokenIndex] = 0;\n deltas[resultTokenIndex] += resultAmount.toInt256();\n deltaBPTs[resultTokenIndex] = _queryAddLiquidityUnbalancedForTokenDeltas(\n pool,\n resultTokenIndex,\n deltas,\n sender\n );\n }\n\n return maxNegativeDeltaIndex;\n }\n\n // returns the index of the smallest positive integer in an array - i.e. [3, 2, -2, -3] returns 1\n function _minPositiveIndex(int256[] memory array) internal pure returns (uint256 index) {\n int256 min = type(int256).max;\n for (uint256 i = 0; i < array.length; i++) {\n if (array[i] > 0 && array[i] < min) {\n min = array[i];\n index = i;\n }\n }\n }\n\n // returns the index of the biggest negative integer in an array - i.e. [3, 1, -2, -3] returns 2\n function _maxNegativeIndex(int256[] memory array) internal pure returns (uint256 index) {\n int256 max = type(int256).min;\n for (uint256 i = 0; i < array.length; i++) {\n if (array[i] < 0 && array[i] > max) {\n max = array[i];\n index = i;\n }\n }\n }\n}\n"},"contracts/ProtocolFeeHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IProtocolFeeHelper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol\";\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { PoolHelperCommon } from \"./PoolHelperCommon.sol\";\n\ncontract ProtocolFeeHelper is IProtocolFeeHelper, PoolHelperCommon {\n constructor(IVault vault, address initialOwner) PoolHelperCommon(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeHelper\n function setProtocolSwapFeePercentage(\n address pool,\n uint256 newProtocolSwapFeePercentage\n ) external withValidPoolForSender(pool) {\n _getProtocolFeeController().setProtocolSwapFeePercentage(pool, newProtocolSwapFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeHelper\n function setProtocolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage\n ) external withValidPoolForSender(pool) {\n _getProtocolFeeController().setProtocolYieldFeePercentage(pool, newProtocolYieldFeePercentage);\n }\n\n /***************************************************************************\n Internal functions \n ***************************************************************************/\n\n // The protocol fee controller is upgradeable in the Vault, so we must fetch it every time.\n function _getProtocolFeeController() internal view returns (IProtocolFeeController) {\n return vault.getProtocolFeeController();\n }\n}\n"},"contracts/ProtocolFeePercentagesProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\n\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IBasePoolFactory } from \"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\";\nimport { FEE_SCALING_FACTOR } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport {\n IProtocolFeePercentagesProvider\n} from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol\";\nimport {\n IBalancerContractRegistry,\n ContractType\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\nimport { ProtocolFeeController } from \"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\";\n\ncontract ProtocolFeePercentagesProvider is IProtocolFeePercentagesProvider, SingletonAuthentication {\n using SafeCast for uint256;\n\n /**\n * @dev Data structure to store default protocol fees by factory. Fee percentages are 18-decimal floating point\n * numbers, so we know they fit in 64 bits, allowing the fees to be stored in a single slot.\n *\n * @param protocolSwapFee The protocol swap fee\n * @param protocolYieldFee The protocol yield fee\n * @param areFactoryFeesSet Flag indicating fees have been set (allows zero values)\n */\n struct FactoryProtocolFees {\n uint64 protocolSwapFeePercentage;\n uint64 protocolYieldFeePercentage;\n bool areFactoryFeesSet;\n }\n\n IBalancerContractRegistry private immutable _trustedContractRegistry;\n IProtocolFeeController private immutable _protocolFeeController;\n\n uint256 private immutable _maxProtocolSwapFeePercentage;\n uint256 private immutable _maxProtocolYieldFeePercentage;\n\n // Factory address => FactoryProtocolFees\n mapping(IBasePoolFactory => FactoryProtocolFees) private _factoryDefaultFeePercentages;\n\n constructor(IVault vault, IBalancerContractRegistry trustedContractRegistry) SingletonAuthentication(vault) {\n IProtocolFeeController protocolFeeController = vault.getProtocolFeeController();\n\n _protocolFeeController = protocolFeeController;\n _trustedContractRegistry = trustedContractRegistry;\n\n // Read the maximum percentages from the `protocolFeeController`.\n _maxProtocolSwapFeePercentage = ProtocolFeeController(address(protocolFeeController))\n .MAX_PROTOCOL_SWAP_FEE_PERCENTAGE();\n _maxProtocolYieldFeePercentage = ProtocolFeeController(address(protocolFeeController))\n .MAX_PROTOCOL_YIELD_FEE_PERCENTAGE();\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function getProtocolFeeController() external view returns (IProtocolFeeController) {\n return _protocolFeeController;\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function getBalancerContractRegistry() external view returns (IBalancerContractRegistry) {\n return _trustedContractRegistry;\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function getFactorySpecificProtocolFeePercentages(\n address factory\n ) external view returns (uint256 protocolSwapFeePercentage, uint256 protocolYieldFeePercentage) {\n FactoryProtocolFees memory factoryFees = _getValidatedProtocolFees(factory);\n\n protocolSwapFeePercentage = factoryFees.protocolSwapFeePercentage;\n protocolYieldFeePercentage = factoryFees.protocolYieldFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function setFactorySpecificProtocolFeePercentages(\n address factory,\n uint256 protocolSwapFeePercentage,\n uint256 protocolYieldFeePercentage\n ) external authenticate {\n // Validate the fee percentages; don't store values that the `ProtocolFeeCollector` will reject.\n if (protocolSwapFeePercentage > _maxProtocolSwapFeePercentage) {\n revert IProtocolFeeController.ProtocolSwapFeePercentageTooHigh();\n }\n\n if (protocolYieldFeePercentage > _maxProtocolYieldFeePercentage) {\n revert IProtocolFeeController.ProtocolYieldFeePercentageTooHigh();\n }\n\n // Ensure the factory is valid.\n if (_trustedContractRegistry.isActiveBalancerContract(ContractType.POOL_FACTORY, factory) == false) {\n revert UnknownFactory(factory);\n }\n\n // Ensure precision checks will pass.\n _ensureValidPrecision(protocolSwapFeePercentage);\n _ensureValidPrecision(protocolYieldFeePercentage);\n\n // Store the default fee percentages, and mark the factory as registered.\n _factoryDefaultFeePercentages[IBasePoolFactory(factory)] = FactoryProtocolFees({\n protocolSwapFeePercentage: protocolSwapFeePercentage.toUint64(),\n protocolYieldFeePercentage: protocolYieldFeePercentage.toUint64(),\n areFactoryFeesSet: true\n });\n\n emit FactorySpecificProtocolFeePercentagesSet(factory, protocolSwapFeePercentage, protocolYieldFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function setProtocolFeePercentagesForPools(address factory, address[] memory pools) external {\n // Note that unless the factory fees were previously set in `setFactorySpecificProtocolFeePercentages` above,\n // this getter will revert. The fee setter function validates the factory with the `BalancerContractRegistry`,\n // so we know it is a valid Balancer pool factory.\n FactoryProtocolFees memory factoryFees = _getValidatedProtocolFees(factory);\n\n for (uint256 i = 0; i < pools.length; ++i) {\n address currentPool = pools[i];\n\n // We know from the logic above that the factory is valid. Now also check that the given pool actually\n // comes from that factory.\n if (IBasePoolFactory(factory).isPoolFromFactory(currentPool) == false) {\n revert PoolNotFromFactory(currentPool, factory);\n }\n\n _setPoolProtocolFees(\n currentPool,\n factoryFees.protocolSwapFeePercentage,\n factoryFees.protocolYieldFeePercentage\n );\n }\n }\n\n function _getValidatedProtocolFees(address factory) private view returns (FactoryProtocolFees memory factoryFees) {\n factoryFees = _factoryDefaultFeePercentages[IBasePoolFactory(factory)];\n\n if (factoryFees.areFactoryFeesSet == false) {\n revert FactoryFeesNotSet(factory);\n }\n }\n\n /**\n * @dev These are permissioned functions on `ProtocolFeeController`, so governance will need to allow this contract\n * to call `setProtocolSwapFeePercentage` and `setProtocolYieldFeePercentage`.\n */\n function _setPoolProtocolFees(\n address pool,\n uint256 protocolSwapFeePercentage,\n uint256 protocolYieldFeePercentage\n ) private {\n _protocolFeeController.setProtocolSwapFeePercentage(pool, protocolSwapFeePercentage);\n _protocolFeeController.setProtocolYieldFeePercentage(pool, protocolYieldFeePercentage);\n }\n\n /**\n * @dev This is a duplicate of the corresponding function in `ProtocolFeeController`, as it isn't exposed in the\n * deployed version of the contract.\n */\n function _ensureValidPrecision(uint256 feePercentage) private pure {\n // Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n // precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n // corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n // Ensure there will be no precision loss in the Vault - which would lead to a discrepancy between the\n // aggregate fee calculated here and that stored in the Vault.\n if ((feePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR != feePercentage) {\n revert IVaultErrors.FeePrecisionTooHigh();\n }\n }\n}\n"},"contracts/ProtocolFeeSweeper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\nimport { IProtocolFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\";\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\n\n/**\n * @notice Withdraw protocol fees, convert them to a target token, and forward to a recipient.\n * @dev This withdraws all protocol fees previously collected and allocated to the protocol by the\n * `ProtocolFeeController`, processes them with a configurable \"burner\" (e.g., from CowSwap) and forwards them to\n * a recipient address.\n *\n * An off-chain process can call `collectAggregateFees(pool)` on the fee controller for a given pool, which will\n * collect and allocate the fees to the protocol and pool creator. `getProtocolFeeAmounts(pool)` returns the fee\n * amounts available for withdrawal. If these are great enough, `sweepProtocolFeesForToken` here will withdraw,\n * convert, and forward them to the final recipient.\n */\ncontract ProtocolFeeSweeper is IProtocolFeeSweeper, SingletonAuthentication, ReentrancyGuardTransient {\n using SafeERC20 for IERC20;\n\n /// @notice All pool tokens are ERC20, so this contract should not handle ETH.\n error CannotReceiveEth();\n\n // Preferred token for receiving protocol fees. Passed to the fee burner as the target of fee token swaps.\n IERC20 private _targetToken;\n\n // Final destination of the collected protocol fees.\n address private _feeRecipient;\n\n // Allowlist of valid protocol fee burners.\n mapping(IProtocolFeeBurner feeBurner => bool isApproved) private _protocolFeeBurners;\n\n /// @notice Allows calls from fee recipient or governance allowed accounts (non-exclusive).\n modifier onlyFeeRecipientOrGovernance() {\n _ensureAuthenticatedByRole(address(this), _feeRecipient);\n _;\n }\n\n // The default configuration on deployment simply forwards all fee tokens to the `feeRecipient`.\n constructor(IVault vault, address feeRecipient) SingletonAuthentication(vault) {\n _setFeeRecipient(feeRecipient);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function sweepProtocolFeesForToken(\n address pool,\n IERC20 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner\n ) external nonReentrant onlyFeeRecipientOrGovernance {\n _sweepProtocolFeesForToken(pool, feeToken, minTargetTokenAmountOut, deadline, feeBurner, false);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function sweepProtocolFeesForWrappedToken(\n address pool,\n IERC4626 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner\n ) external nonReentrant onlyFeeRecipientOrGovernance {\n _sweepProtocolFeesForToken(pool, IERC20(address(feeToken)), minTargetTokenAmountOut, deadline, feeBurner, true);\n }\n\n function _sweepProtocolFeesForToken(\n address pool,\n IERC20 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner,\n bool shouldUnwrap\n ) internal {\n bool feeBurnerProvided = _getValidFeeBurner(feeBurner);\n\n uint256 existingBalance = feeToken.balanceOf(address(this));\n\n // Withdraw protocol fees to this contract. Note that governance will need to grant this contract permission\n // to call `withdrawProtocolFeesForToken` on the `ProtocolFeeController.\n IProtocolFeeController feeController = getProtocolFeeController();\n\n // Transfer any pending fees from the Vault to the ProtocolFeeController, and allocate the protocol and pool\n // creator portions.\n feeController.collectAggregateFees(pool);\n\n // Withdraw the protocol portion of the fees to this contract (requires permission).\n feeController.withdrawProtocolFeesForToken(pool, address(this), feeToken);\n\n uint256 withdrawnBalance = feeToken.balanceOf(address(this)) - existingBalance;\n\n if (withdrawnBalance > 0) {\n if (feeBurnerProvided) {\n IERC20 targetToken = _targetToken;\n\n // If the fee token is already the target, there's no need to swap. Simply transfer it.\n if (feeToken == targetToken) {\n if (shouldUnwrap) {\n revert UnwrapIsNotAllowed();\n }\n\n _transferFeeToken(pool, feeToken, withdrawnBalance);\n } else {\n if (shouldUnwrap) {\n IERC4626 erc4626Token = IERC4626(address(feeToken));\n\n feeToken = IERC20(erc4626Token.asset());\n withdrawnBalance = erc4626Token.redeem(withdrawnBalance, address(this), address(this));\n }\n\n // We must revert if this allowance is not entirely consumed by the burner, to avoid exploitable\n // \"hanging approvals.\" The order may be asynchronous, but it must pull the tokens immediately.\n feeToken.forceApprove(address(feeBurner), withdrawnBalance);\n // This is asynchronous; the burner will complete the action and emit an event.\n feeBurner.burn(\n pool,\n feeToken,\n withdrawnBalance,\n targetToken,\n minTargetTokenAmountOut,\n _feeRecipient,\n deadline\n );\n\n if (feeToken.allowance(address(this), address(feeBurner)) > 0) {\n revert BurnerDidNotConsumeAllowance();\n }\n }\n } else {\n // If no burner has been set, fall back on direct transfer of the fee token.\n _transferFeeToken(pool, feeToken, withdrawnBalance);\n }\n }\n }\n\n function _getValidFeeBurner(IProtocolFeeBurner feeBurner) private view returns (bool feeBurnerProvided) {\n feeBurnerProvided = address(feeBurner) != address(0);\n\n // Allow passing the zero address (no burner); this will simply transfer the fee tokens directly (e.g., if\n // there is no burner available for a given token).\n if (feeBurnerProvided) {\n if (_protocolFeeBurners[feeBurner]) {\n if (address(_targetToken) == address(0)) {\n revert InvalidTargetToken();\n }\n } else {\n revert UnsupportedProtocolFeeBurner(address(feeBurner));\n }\n }\n }\n\n function _transferFeeToken(address pool, IERC20 feeToken, uint256 withdrawnTokenBalance) private {\n address recipient = _feeRecipient;\n feeToken.safeTransfer(recipient, withdrawnTokenBalance);\n\n emit ProtocolFeeSwept(pool, feeToken, withdrawnTokenBalance, recipient);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function getProtocolFeeController() public view returns (IProtocolFeeController) {\n return getVault().getProtocolFeeController();\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function getTargetToken() external view returns (IERC20) {\n return _targetToken;\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function getFeeRecipient() external view returns (address) {\n return _feeRecipient;\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function isApprovedProtocolFeeBurner(address protocolFeeBurner) external view returns (bool) {\n return _protocolFeeBurners[IProtocolFeeBurner(protocolFeeBurner)];\n }\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeSweeper\n function setFeeRecipient(address feeRecipient) external onlyFeeRecipientOrGovernance {\n _setFeeRecipient(feeRecipient);\n }\n\n function _setFeeRecipient(address feeRecipient) internal {\n // Best effort to at least ensure the fee recipient isn't the zero address (so it doesn't literally burn all\n // protocol fees). Governance must ensure this is a valid address, as sweeping is permissionless.\n //\n // We could use a 2-step claim process like the `TimelockAuthorizer` here, but the consequences here are less\n // severe, so that might be overkill. Nothing can be bricked; the worst that can happen is loss of protocol\n // fees until the recipient is updated again.\n if (feeRecipient == address(0)) {\n revert InvalidFeeRecipient();\n }\n\n _feeRecipient = feeRecipient;\n\n emit FeeRecipientSet(feeRecipient);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function setTargetToken(IERC20 targetToken) external onlyFeeRecipientOrGovernance {\n _targetToken = targetToken;\n\n emit TargetTokenSet(targetToken);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function addProtocolFeeBurner(IProtocolFeeBurner protocolFeeBurner) external onlyFeeRecipientOrGovernance {\n if (_protocolFeeBurners[protocolFeeBurner]) {\n revert ProtocolFeeBurnerAlreadyAdded(address(protocolFeeBurner));\n }\n\n // Since the zero address is a sentinel value indicating no burner should be used, do not allow adding it.\n if (address(protocolFeeBurner) == address(0)) {\n revert InvalidProtocolFeeBurner();\n }\n\n _protocolFeeBurners[protocolFeeBurner] = true;\n\n emit ProtocolFeeBurnerAdded(address(protocolFeeBurner));\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function removeProtocolFeeBurner(IProtocolFeeBurner protocolFeeBurner) external onlyFeeRecipientOrGovernance {\n if (_protocolFeeBurners[protocolFeeBurner] == false) {\n revert ProtocolFeeBurnerNotAdded(address(protocolFeeBurner));\n }\n\n _protocolFeeBurners[protocolFeeBurner] = false;\n\n emit ProtocolFeeBurnerRemoved(address(protocolFeeBurner));\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function recoverProtocolFees(IERC20[] memory feeTokens) external nonReentrant {\n if (msg.sender != _feeRecipient) {\n revert SenderNotAllowed();\n }\n\n for (uint256 i = 0; i < feeTokens.length; ++i) {\n IERC20 feeToken = feeTokens[i];\n uint256 tokenBalance = feeToken.balanceOf(address(this));\n\n if (tokenBalance > 0) {\n feeToken.safeTransfer(msg.sender, tokenBalance);\n }\n }\n }\n\n /*******************************************************************************\n Default handlers\n *******************************************************************************/\n\n // Maybe these aren't needed, but given the general sensitivity of this contract, preemptively disallow any\n // ETH-related shenanigans. Tokens are always ERC20, so there should be no ETH involved in any operations.\n\n receive() external payable {\n revert CannotReceiveEth();\n }\n\n // solhint-disable no-complex-fallback\n\n fallback() external payable {\n if (msg.value > 0) {\n revert CannotReceiveEth();\n }\n\n revert(\"Not implemented\");\n }\n}\n"},"contracts/test/FeeBurnerAuthenticationMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\n\nimport { FeeBurnerAuthentication } from \"../FeeBurnerAuthentication.sol\";\n\ncontract FeeBurnerAuthenticationMock is FeeBurnerAuthentication {\n constructor(\n IProtocolFeeSweeper protocolFeeSweeper,\n address initialOwner\n ) FeeBurnerAuthentication(protocolFeeSweeper, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function manualOnlyProtocolFeeSweeper() external onlyProtocolFeeSweeper {}\n\n function manualOnlyFeeRecipientOrOwner() external onlyFeeRecipientOrOwner {}\n}\n"},"contracts/test/OwnableAuthenticationMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { Ownable2Step } from \"@openzeppelin/contracts/access/Ownable2Step.sol\";\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { Authentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\";\n\nimport { OwnableAuthentication } from \"../OwnableAuthentication.sol\";\n\ncontract OwnableAuthenticationMock is OwnableAuthentication {\n constructor(IVault vault, address initialOwner) OwnableAuthentication(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function permissionedFunction() external view authenticate {\n // solhint-disable-previous-line no-empty-blocks\n }\n}\n"},"contracts/test/PoolHelperMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { PoolHelperCommon } from \"../PoolHelperCommon.sol\";\n\ncontract PoolHelperMock is PoolHelperCommon {\n constructor(IVault vault, address initialOwner) PoolHelperCommon(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n}\n"},"contracts/test/PriceImpactHelperMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { IRouter } from \"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\";\n\nimport { PriceImpactHelper } from \"../PriceImpactHelper.sol\";\n\ncontract PriceImpactHelperMock is PriceImpactHelper {\n constructor(IVault vault, IRouter router) PriceImpactHelper(vault, router) {}\n\n function queryAddLiquidityUnbalancedForTokenDeltas(\n address pool,\n uint256 tokenIndex,\n int256[] memory deltas,\n address sender\n ) external returns (int256 deltaBPT) {\n return _queryAddLiquidityUnbalancedForTokenDeltas(pool, tokenIndex, deltas, sender);\n }\n\n function zeroOutDeltas(\n address pool,\n int256[] memory deltas,\n int256[] memory deltaBPTs,\n address sender\n ) external returns (uint256) {\n return _zeroOutDeltas(pool, deltas, deltaBPTs, sender);\n }\n\n function minPositiveIndex(int256[] memory array) external pure returns (uint256) {\n return _minPositiveIndex(array);\n }\n\n function maxNegativeIndex(int256[] memory array) external pure returns (uint256) {\n return _maxNegativeIndex(array);\n }\n}\n"},"contracts/test/ProtocolFeeBurnerMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { IProtocolFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\";\n\nimport { ERC20TestToken } from \"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\ncontract ProtocolFeeBurnerMock is IProtocolFeeBurner {\n using FixedPoint for uint256;\n using SafeERC20 for IERC20;\n\n uint256 private _tokenRatio = FixedPoint.ONE;\n\n bool transferFromEnabled = true;\n\n /// @inheritdoc IProtocolFeeBurner\n function burn(\n address pool,\n IERC20 feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 targetToken,\n uint256 minAmountOut,\n address recipient,\n uint256 deadline\n ) external {\n if (block.timestamp > deadline) {\n revert SwapDeadline();\n }\n\n if (transferFromEnabled) {\n feeToken.safeTransferFrom(msg.sender, address(this), exactFeeTokenAmountIn);\n }\n\n // Simulate the swap by minting the same amount of target to the recipient.\n ERC20TestToken(address(targetToken)).mint(recipient, exactFeeTokenAmountIn);\n\n uint256 targetTokenAmount = exactFeeTokenAmountIn.mulDown(_tokenRatio);\n if (targetTokenAmount < minAmountOut) {\n revert AmountOutBelowMin(targetToken, targetTokenAmount, minAmountOut);\n }\n\n // Just emit the event, simulating the tokens being exchanged at 1-to-1.\n emit ProtocolFeeBurned(pool, feeToken, exactFeeTokenAmountIn, targetToken, targetTokenAmount, recipient);\n }\n\n function setTokenRatio(uint256 ratio) external {\n _tokenRatio = ratio;\n }\n\n function setTransferFromEnabled(bool enabled) external {\n transferFromEnabled = enabled;\n }\n}\n"},"contracts/test/VaultMockForFeeSweeper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\n\ncontract VaultMockForFeeSweeper is IAuthorizer {\n using SafeERC20 for IERC20;\n\n mapping(address => bool) public owners;\n\n constructor() {\n owners[msg.sender] = true;\n }\n\n modifier onlyOwner() {\n require(owners[msg.sender], \"VaultMockForFeeSweeper: Not an owner\");\n _;\n }\n\n function getAuthorizer() external view returns (IAuthorizer authorizer) {\n return IAuthorizer(address(this));\n }\n\n function canPerform(bytes32, address account, address) external view returns (bool) {\n return owners[account];\n }\n\n function canPerform(bytes32, address account) external view returns (bool) {\n return owners[account];\n }\n\n function addOwner(address owner_) external onlyOwner {\n owners[owner_] = true;\n }\n\n function removeOwner(address owner_) external onlyOwner {\n owners[owner_] = false;\n }\n\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController) {\n return IProtocolFeeController(address(this));\n }\n\n function collectAggregateFees(address) external {}\n\n function withdrawProtocolFeesForToken(address, address recipient, IERC20 token) external onlyOwner {\n token.safeTransfer(recipient, token.balanceOf(address(this)));\n }\n}\n"},"contracts/TokenPairRegistry.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { ITokenPairRegistry } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol\";\nimport { SwapPathStep } from \"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { EnumerableSet } from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\";\nimport { InputHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\";\n\nimport { OwnableAuthentication } from \"./OwnableAuthentication.sol\";\n\n/**\n * @notice Stores token pair swap paths on-chain, allowing an admin to maintain swap routes.\n * @dev The paths are stored as arrays of `SwapPathStep` structs, which contain the pool or buffer\n * address, the output token, and a boolean indicating whether the step is a buffer or not.\n * Functions that add information to the registry are permissioned.\n */\ncontract TokenPairRegistry is ITokenPairRegistry, OwnableAuthentication {\n using EnumerableSet for EnumerableSet.AddressSet;\n\n mapping(bytes32 pairId => SwapPathStep[][] paths) internal _pairsToPaths;\n\n constructor(IVault vault, address initialOwner) OwnableAuthentication(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /// @inheritdoc ITokenPairRegistry\n function getPathAt(address tokenIn, address tokenOut, uint256 index) external view returns (SwapPathStep[] memory) {\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n return _pairsToPaths[tokenId][index];\n }\n\n /// @inheritdoc ITokenPairRegistry\n function getPathCount(address tokenIn, address tokenOut) external view returns (uint256) {\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n return _pairsToPaths[tokenId].length;\n }\n\n /// @inheritdoc ITokenPairRegistry\n function getPaths(address tokenIn, address tokenOut) external view returns (SwapPathStep[][] memory) {\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n return _pairsToPaths[tokenId];\n }\n\n /// @inheritdoc ITokenPairRegistry\n function addPath(address tokenIn, SwapPathStep[] memory steps) external authenticate {\n if (steps.length == 0) {\n revert EmptyPath();\n }\n\n address tokenOut = address(steps[steps.length - 1].tokenOut);\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n\n address stepTokenIn = tokenIn;\n for (uint256 i = 0; i < steps.length; ++i) {\n SwapPathStep memory step = steps[i];\n if (step.isBuffer) {\n _checkBufferStep(step.pool, stepTokenIn, address(step.tokenOut));\n } else {\n _checkPoolStep(step.pool, stepTokenIn, address(step.tokenOut));\n }\n\n // Update token in for the next iteration.\n stepTokenIn = address(step.tokenOut);\n }\n\n SwapPathStep[][] storage paths = _pairsToPaths[tokenId];\n paths.push();\n for (uint256 i = 0; i < steps.length; ++i) {\n paths[paths.length - 1].push(steps[i]);\n }\n emit PathAdded(tokenIn, tokenOut, _pairsToPaths[tokenId].length);\n }\n\n /// @inheritdoc ITokenPairRegistry\n function addSimplePath(address poolOrBuffer) external authenticate {\n if (vault.isPoolRegistered(poolOrBuffer)) {\n _addPool(poolOrBuffer);\n } else if (vault.isERC4626BufferInitialized(IERC4626(poolOrBuffer))) {\n _addBuffer(IERC4626(poolOrBuffer));\n } else {\n revert InvalidSimplePath(poolOrBuffer);\n }\n }\n\n /// @inheritdoc ITokenPairRegistry\n function removePathAtIndex(address tokenIn, address tokenOut, uint256 index) external authenticate {\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n SwapPathStep[][] storage paths = _pairsToPaths[tokenId];\n uint256 pathsLength = paths.length;\n\n if (index >= pathsLength) {\n revert IndexOutOfBounds();\n }\n\n if (pathsLength > 1 && index != pathsLength - 1) {\n paths[index] = paths[pathsLength - 1];\n }\n // pop() can be used to clear dynamic arrays: it deletes every element and removes the inner array entirely.\n paths.pop();\n\n emit PathRemoved(tokenIn, tokenOut, paths.length);\n }\n\n /// @inheritdoc ITokenPairRegistry\n function removeSimplePath(address poolOrBuffer) external authenticate {\n if (vault.isPoolRegistered(poolOrBuffer)) {\n _removePool(poolOrBuffer);\n } else if (vault.isERC4626BufferInitialized(IERC4626(poolOrBuffer))) {\n _removeBuffer(IERC4626(poolOrBuffer));\n } else {\n revert InvalidSimplePath(poolOrBuffer);\n }\n }\n\n function _addPool(address pool) internal {\n IERC20[] memory tokens = vault.getPoolTokens(pool);\n\n uint256 tokenPairs = tokens.length - 1;\n for (uint256 i = 0; i < tokenPairs; ++i) {\n for (uint256 j = i + 1; j < tokens.length; ++j) {\n _addTokenPair(pool, address(tokens[i]), address(tokens[j]), false);\n }\n }\n }\n\n /// @dev Always wrap, as long as it's a registered buffer in the Vault.\n function _addBuffer(IERC4626 wrappedToken) internal {\n address underlyingToken = vault.getBufferAsset(wrappedToken);\n _addTokenPair(address(wrappedToken), underlyingToken, address(wrappedToken), true);\n }\n\n function _addTokenPair(address poolOrBuffer, address tokenA, address tokenB, bool isBuffer) internal {\n _addSimplePairStep(poolOrBuffer, tokenA, tokenB, isBuffer);\n _addSimplePairStep(poolOrBuffer, tokenB, tokenA, isBuffer);\n }\n\n function _addSimplePairStep(address poolOrBuffer, address tokenIn, address tokenOut, bool isBuffer) internal {\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n SwapPathStep memory step = SwapPathStep({ pool: poolOrBuffer, tokenOut: IERC20(tokenOut), isBuffer: isBuffer });\n\n SwapPathStep[][] storage paths = _pairsToPaths[tokenId];\n paths.push();\n paths[paths.length - 1].push(step);\n emit PathAdded(tokenIn, tokenOut, _pairsToPaths[tokenId].length);\n }\n\n function _removePool(address pool) internal {\n IERC20[] memory tokens = vault.getPoolTokens(pool);\n\n uint256 tokenPairs = tokens.length - 1;\n for (uint256 i = 0; i < tokenPairs; ++i) {\n for (uint256 j = i + 1; j < tokens.length; ++j) {\n _removeTokenPair(pool, address(tokens[i]), address(tokens[j]));\n }\n }\n }\n\n function _removeTokenPair(address poolOrBuffer, address tokenA, address tokenB) internal {\n _removeSimplePairStep(poolOrBuffer, tokenA, tokenB);\n _removeSimplePairStep(poolOrBuffer, tokenB, tokenA);\n }\n\n function _removeSimplePairStep(address poolOrBuffer, address tokenIn, address tokenOut) internal {\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n\n SwapPathStep[][] storage paths = _pairsToPaths[tokenId];\n\n // We first look for a path of length 1, representing a simple pair.\n for (uint256 i = 0; i < paths.length; ++i) {\n SwapPathStep[] storage steps = paths[i];\n\n if (steps.length == 1 && steps[0].pool == poolOrBuffer && address(steps[0].tokenOut) == tokenOut) {\n // Element found. Re-arrange paths if needed, replacing the current element with the last one.\n if (paths.length > 1) {\n paths[i] = paths[paths.length - 1];\n }\n\n // Nothing else to do here.\n paths.pop();\n emit PathRemoved(tokenIn, tokenOut, paths.length);\n\n return;\n }\n }\n\n // If we didn't return at this point, we revert with an error indicating the invalid removal attempt.\n revert InvalidRemovePath(poolOrBuffer, tokenIn, tokenOut);\n }\n\n function _removeBuffer(IERC4626 wrappedToken) internal {\n address underlyingToken = vault.getBufferAsset(wrappedToken);\n _removeTokenPair(address(wrappedToken), underlyingToken, address(wrappedToken));\n }\n\n function _getTokenPairId(address tokenIn, address tokenOut) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(tokenIn, tokenOut));\n }\n\n function _checkBufferStep(address buffer, address tokenIn, address tokenOut) internal view {\n address underlying = address(vault.getBufferAsset(IERC4626(buffer)));\n\n if (underlying == address(0)) {\n revert BufferNotInitialized(buffer);\n }\n\n if (tokenIn == underlying) {\n // This is a wrap.\n if (tokenOut != address(buffer)) {\n revert InvalidBufferPath(buffer, tokenIn, tokenOut);\n }\n } else if (tokenIn == buffer) {\n // This is an unwrap.\n if (tokenOut != address(underlying)) {\n revert InvalidBufferPath(buffer, tokenIn, tokenOut);\n }\n } else {\n // Token in must be either wrapped or underlying.\n revert InvalidBufferPath(buffer, tokenIn, tokenOut);\n }\n }\n\n function _checkPoolStep(address pool, address tokenIn, address tokenOut) internal view {\n IERC20[] memory tokens = vault.getPoolTokens(pool);\n\n bool foundIn = false;\n bool foundOut = false;\n\n for (uint256 i = 0; i < tokens.length; ++i) {\n if (tokens[i] == IERC20(tokenIn)) {\n foundIn = true;\n }\n if (tokens[i] == IERC20(tokenOut)) {\n foundOut = true;\n }\n }\n\n if (foundIn == false || foundOut == false) {\n revert InvalidSimplePath(pool);\n }\n }\n}\n"},"contracts/utils/HyperSpotPricePrecompile.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.24;\n\n/**\n * @notice Library to interact with the Hyperliquid spot price precompile.\n * @dev The precompile is a special type of code, executed in the Hypercore's node. For more information, see\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore .\n */\nlibrary HyperSpotPricePrecompile {\n address public constant SPOT_PRICE_PRECOMPILE_ADDRESS = 0x0000000000000000000000000000000000000808;\n\n /// @notice The precompile had an error while fetching the spot price.\n error SpotPricePrecompileFailed();\n\n /// @notice The spot price is zero.\n error SpotPriceIsZero();\n\n function spotPrice(uint32 pairIndex) internal view returns (uint256) {\n (bool success, bytes memory spotPriceBytes) = SPOT_PRICE_PRECOMPILE_ADDRESS.staticcall(abi.encode(pairIndex));\n if (success == false) {\n revert SpotPricePrecompileFailed();\n }\n uint256 price = abi.decode(spotPriceBytes, (uint256));\n if (price == 0) {\n revert SpotPriceIsZero();\n }\n return price;\n }\n}\n"},"contracts/utils/HyperTokenInfoPrecompile.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.24;\n\n/**\n * @notice Library to interact with the Hyperliquid token info precompile.\n * @dev The precompile is a special type of code, executed in the Hypercore's node. For more information, see\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore .\n */\nlibrary HyperTokenInfoPrecompile {\n // The following structure is defined by the token info precompile.\n struct HyperTokenInfo {\n string name;\n uint64[] spots;\n uint64 deployerTradingFeeShare;\n address deployer;\n address evmContract;\n uint8 szDecimals;\n uint8 weiDecimals;\n int8 evmExtraWeiDecimals;\n }\n\n address public constant TOKEN_INFO_PRECOMPILE_ADDRESS = 0x000000000000000000000000000000000000080C;\n\n /// @notice The precompile had an error while fetching the token info.\n error TokenInfoPrecompileFailed();\n\n function szDecimals(uint32 tokenIndex) internal view returns (uint8) {\n (bool success, bytes memory out) = TOKEN_INFO_PRECOMPILE_ADDRESS.staticcall(abi.encode(tokenIndex));\n if (success == false) {\n revert TokenInfoPrecompileFailed();\n }\n HyperTokenInfo memory tokenInfo = abi.decode(out, (HyperTokenInfo));\n return tokenInfo.szDecimals;\n }\n}\n"}},"settings":{"viaIR":true,"evmVersion":"cancun","optimizer":{"enabled":true,"runs":9999,"details":{"yulDetails":{"optimizerSteps":"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu"}}},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}}}},"output":{"errors":[{"component":"general","errorCode":"2394","formattedMessage":"Warning: Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.\n --> @balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol:74:13:\n |\n74 | tstore(slot, value)\n | ^^^^^^\n\n","message":"Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.","severity":"warning","sourceLocation":{"end":2572,"file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","start":2566},"type":"Warning"}],"sources":{"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","exportedSymbols":{"IAuthentication":[14]},"id":15,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthentication","contractDependencies":[],"contractKind":"interface","documentation":{"id":2,"nodeType":"StructuredDocumentation","src":"72:77:0","text":"@notice Simple interface for permissioned calling of external functions."},"fullyImplemented":false,"id":14,"linearizedBaseContracts":[14],"name":"IAuthentication","nameLocation":"159:15:0","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3,"nodeType":"StructuredDocumentation","src":"181:67:0","text":"@notice The sender does not have permission to call a function."},"errorSelector":"23dada53","id":5,"name":"SenderNotAllowed","nameLocation":"259:16:0","nodeType":"ErrorDefinition","parameters":{"id":4,"nodeType":"ParameterList","parameters":[],"src":"275:2:0"},"src":"253:25:0"},{"documentation":{"id":6,"nodeType":"StructuredDocumentation","src":"284:237:0","text":" @notice Returns the action identifier associated with the external function described by `selector`.\n @param selector The 4-byte selector of the permissioned function\n @return actionId The computed actionId"},"functionSelector":"851c1bb3","id":13,"implemented":false,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"535:11:0","nodeType":"FunctionDefinition","parameters":{"id":9,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8,"mutability":"mutable","name":"selector","nameLocation":"554:8:0","nodeType":"VariableDeclaration","scope":13,"src":"547:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":7,"name":"bytes4","nodeType":"ElementaryTypeName","src":"547:6:0","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"546:17:0"},"returnParameters":{"id":12,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11,"mutability":"mutable","name":"actionId","nameLocation":"595:8:0","nodeType":"VariableDeclaration","scope":13,"src":"587:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10,"name":"bytes32","nodeType":"ElementaryTypeName","src":"587:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"586:18:0"},"scope":14,"src":"526:79:0","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":15,"src":"149:458:0","usedErrors":[5],"usedEvents":[]}],"src":"46:562:0"},"id":0},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","exportedSymbols":{"IRateProvider":[24]},"id":25,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":16,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:1"},{"abstract":false,"baseContracts":[],"canonicalName":"IRateProvider","contractDependencies":[],"contractKind":"interface","documentation":{"id":17,"nodeType":"StructuredDocumentation","src":"72:56:1","text":"@notice General interface for token exchange rates."},"fullyImplemented":false,"id":24,"linearizedBaseContracts":[24],"name":"IRateProvider","nameLocation":"138:13:1","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":18,"nodeType":"StructuredDocumentation","src":"158:573:1","text":" @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n rates in downstream computations.\n @return rate The current token rate"},"functionSelector":"679aefce","id":23,"implemented":false,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"745:7:1","nodeType":"FunctionDefinition","parameters":{"id":19,"nodeType":"ParameterList","parameters":[],"src":"752:2:1"},"returnParameters":{"id":22,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21,"mutability":"mutable","name":"rate","nameLocation":"786:4:1","nodeType":"VariableDeclaration","scope":23,"src":"778:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20,"name":"uint256","nodeType":"ElementaryTypeName","src":"778:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"777:14:1"},"scope":24,"src":"736:56:1","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":25,"src":"128:666:1","usedErrors":[],"usedEvents":[]}],"src":"46:749:1"},"id":1},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol","exportedSymbols":{"IVersion":[34]},"id":35,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":26,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:2"},{"abstract":false,"baseContracts":[],"canonicalName":"IVersion","contractDependencies":[],"contractKind":"interface","documentation":{"id":27,"nodeType":"StructuredDocumentation","src":"72:77:2","text":"@notice Simple interface to retrieve the version of a deployed contract."},"fullyImplemented":false,"id":34,"linearizedBaseContracts":[34],"name":"IVersion","nameLocation":"159:8:2","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":28,"nodeType":"StructuredDocumentation","src":"174:418:2","text":" @notice Return arbitrary text representing the version of a contract.\n @dev For standard Balancer contracts, returns a JSON representation of the contract version containing name,\n version number and task ID. See real examples in the deployment repo; local tests just use plain text strings.\n @return version The version string corresponding to the current deployed contract"},"functionSelector":"54fd4d50","id":33,"implemented":false,"kind":"function","modifiers":[],"name":"version","nameLocation":"606:7:2","nodeType":"FunctionDefinition","parameters":{"id":29,"nodeType":"ParameterList","parameters":[],"src":"613:2:2"},"returnParameters":{"id":32,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33,"src":"639:13:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":30,"name":"string","nodeType":"ElementaryTypeName","src":"639:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"638:15:2"},"scope":34,"src":"597:57:2","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":35,"src":"149:507:2","usedErrors":[],"usedEvents":[]}],"src":"46:611:2"},"id":2},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","exportedSymbols":{"ContractType":[43],"IBalancerContractRegistry":[212]},"id":213,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":36,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:3"},{"canonicalName":"ContractType","documentation":{"id":37,"nodeType":"StructuredDocumentation","src":"72:61:3","text":"@notice Registered contracts must be one of these types."},"id":43,"members":[{"id":38,"name":"OTHER","nameLocation":"157:5:3","nodeType":"EnumValue","src":"157:5:3"},{"id":39,"name":"POOL_FACTORY","nameLocation":"255:12:3","nodeType":"EnumValue","src":"255:12:3"},{"id":40,"name":"ROUTER","nameLocation":"273:6:3","nodeType":"EnumValue","src":"273:6:3"},{"id":41,"name":"HOOK","nameLocation":"285:4:3","nodeType":"EnumValue","src":"285:4:3"},{"id":42,"name":"ERC4626","nameLocation":"295:7:3","nodeType":"EnumValue","src":"295:7:3"}],"name":"ContractType","nameLocation":"138:12:3","nodeType":"EnumDefinition","src":"133:171:3"},{"abstract":false,"baseContracts":[],"canonicalName":"IBalancerContractRegistry","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":212,"linearizedBaseContracts":[212],"name":"IBalancerContractRegistry","nameLocation":"316:25:3","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IBalancerContractRegistry.ContractInfo","documentation":{"id":44,"nodeType":"StructuredDocumentation","src":"348:887:3","text":" @notice Store the state of a registered Balancer contract.\n @dev Contracts can be deprecated, so we store an active flag indicating the status. With two flags, we can\n differentiate between deprecated and non-existent. The same contract address can have multiple names, but\n only one type. If a contract is legitimately multiple types (e.g., a hook that also acts as a router), set\n the type to its \"primary\" function: hook, in this case. The \"Other\" type is intended as a catch-all for\n things that don't find into the standard types (e.g., helper contracts).\n @param contractType The type of contract (e.g., Router or Hook)\n @param isRegistered This flag indicates whether there is an entry for the associated address\n @param isActive If there is an entry, this flag indicates whether it is active or deprecated"},"id":52,"members":[{"constant":false,"id":47,"mutability":"mutable","name":"contractType","nameLocation":"1283:12:3","nodeType":"VariableDeclaration","scope":52,"src":"1270:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":46,"nodeType":"UserDefinedTypeName","pathNode":{"id":45,"name":"ContractType","nameLocations":["1270:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"1270:12:3"},"referencedDeclaration":43,"src":"1270:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":49,"mutability":"mutable","name":"isRegistered","nameLocation":"1310:12:3","nodeType":"VariableDeclaration","scope":52,"src":"1305:17:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":48,"name":"bool","nodeType":"ElementaryTypeName","src":"1305:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":51,"mutability":"mutable","name":"isActive","nameLocation":"1337:8:3","nodeType":"VariableDeclaration","scope":52,"src":"1332:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":50,"name":"bool","nodeType":"ElementaryTypeName","src":"1332:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ContractInfo","nameLocation":"1247:12:3","nodeType":"StructDefinition","scope":212,"src":"1240:112:3","visibility":"public"},{"anonymous":false,"documentation":{"id":53,"nodeType":"StructuredDocumentation","src":"1358:278:3","text":" @notice Emitted when a new contract is registered.\n @param contractType The type of contract being registered\n @param contractName The name of the contract being registered\n @param contractAddress The address of the contract being registered"},"eventSelector":"b12ed936cf481273b3ed037dc706d110c49bd7ba6743e67082cd772a6e9102e2","id":62,"name":"BalancerContractRegistered","nameLocation":"1647:26:3","nodeType":"EventDefinition","parameters":{"id":61,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56,"indexed":true,"mutability":"mutable","name":"contractType","nameLocation":"1704:12:3","nodeType":"VariableDeclaration","scope":62,"src":"1683:33:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":55,"nodeType":"UserDefinedTypeName","pathNode":{"id":54,"name":"ContractType","nameLocations":["1683:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"1683:12:3"},"referencedDeclaration":43,"src":"1683:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":58,"indexed":true,"mutability":"mutable","name":"contractName","nameLocation":"1741:12:3","nodeType":"VariableDeclaration","scope":62,"src":"1726:27:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":57,"name":"string","nodeType":"ElementaryTypeName","src":"1726:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":60,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"1779:15:3","nodeType":"VariableDeclaration","scope":62,"src":"1763:31:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59,"name":"address","nodeType":"ElementaryTypeName","src":"1763:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1673:127:3"},"src":"1641:160:3"},{"anonymous":false,"documentation":{"id":63,"nodeType":"StructuredDocumentation","src":"1807:296:3","text":" @notice Emitted when a new contract is deregistered (deleted).\n @param contractType The type of contract being deregistered\n @param contractName The name of the contract being deregistered\n @param contractAddress The address of the contract being deregistered"},"eventSelector":"fa2e7bfe3791287aa74ffe867372b78e61b60e0516978c4952f83f7416fafb7c","id":72,"name":"BalancerContractDeregistered","nameLocation":"2114:28:3","nodeType":"EventDefinition","parameters":{"id":71,"nodeType":"ParameterList","parameters":[{"constant":false,"id":66,"indexed":true,"mutability":"mutable","name":"contractType","nameLocation":"2173:12:3","nodeType":"VariableDeclaration","scope":72,"src":"2152:33:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":65,"nodeType":"UserDefinedTypeName","pathNode":{"id":64,"name":"ContractType","nameLocations":["2152:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"2152:12:3"},"referencedDeclaration":43,"src":"2152:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":68,"indexed":true,"mutability":"mutable","name":"contractName","nameLocation":"2210:12:3","nodeType":"VariableDeclaration","scope":72,"src":"2195:27:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":67,"name":"string","nodeType":"ElementaryTypeName","src":"2195:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":70,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2248:15:3","nodeType":"VariableDeclaration","scope":72,"src":"2232:31:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":69,"name":"address","nodeType":"ElementaryTypeName","src":"2232:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2142:127:3"},"src":"2108:162:3"},{"anonymous":false,"documentation":{"id":73,"nodeType":"StructuredDocumentation","src":"2276:203:3","text":" @notice Emitted when a registered contract is deprecated.\n @dev This sets the `isActive` flag to false.\n @param contractAddress The address of the contract being deprecated"},"eventSelector":"07b81cace396ea12f83465895486ac006cd17917e41b9759ad5e663404f1497b","id":77,"name":"BalancerContractDeprecated","nameLocation":"2490:26:3","nodeType":"EventDefinition","parameters":{"id":76,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2533:15:3","nodeType":"VariableDeclaration","scope":77,"src":"2517:31:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74,"name":"address","nodeType":"ElementaryTypeName","src":"2517:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2516:33:3"},"src":"2484:66:3"},{"anonymous":false,"documentation":{"id":78,"nodeType":"StructuredDocumentation","src":"2556:187:3","text":" @notice Emitted when an alias is added or updated.\n @param contractAlias The alias name\n @param contractAddress The address of the contract being deprecated"},"eventSelector":"06618a6a1a6a413a59097e7c362ee8260afae8f07bd94bc0938e573058465483","id":84,"name":"ContractAliasUpdated","nameLocation":"2754:20:3","nodeType":"EventDefinition","parameters":{"id":83,"nodeType":"ParameterList","parameters":[{"constant":false,"id":80,"indexed":true,"mutability":"mutable","name":"contractAlias","nameLocation":"2790:13:3","nodeType":"VariableDeclaration","scope":84,"src":"2775:28:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":79,"name":"string","nodeType":"ElementaryTypeName","src":"2775:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":82,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2821:15:3","nodeType":"VariableDeclaration","scope":84,"src":"2805:31:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":81,"name":"address","nodeType":"ElementaryTypeName","src":"2805:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2774:63:3"},"src":"2748:90:3"},{"documentation":{"id":85,"nodeType":"StructuredDocumentation","src":"2844:531:3","text":" @notice A contract has already been registered under the given address.\n @dev Both names and addresses must be unique in the primary registration mapping. Though there are two mappings\n to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent\n name => address => state mapping.\n @param contractType The contract type, provided for documentation purposes\n @param contractAddress The address of the previously registered contract"},"errorSelector":"25a14e0c","id":92,"name":"ContractAddressAlreadyRegistered","nameLocation":"3386:32:3","nodeType":"ErrorDefinition","parameters":{"id":91,"nodeType":"ParameterList","parameters":[{"constant":false,"id":88,"mutability":"mutable","name":"contractType","nameLocation":"3432:12:3","nodeType":"VariableDeclaration","scope":92,"src":"3419:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":87,"nodeType":"UserDefinedTypeName","pathNode":{"id":86,"name":"ContractType","nameLocations":["3419:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"3419:12:3"},"referencedDeclaration":43,"src":"3419:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":90,"mutability":"mutable","name":"contractAddress","nameLocation":"3454:15:3","nodeType":"VariableDeclaration","scope":92,"src":"3446:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":89,"name":"address","nodeType":"ElementaryTypeName","src":"3446:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3418:52:3"},"src":"3380:91:3"},{"documentation":{"id":93,"nodeType":"StructuredDocumentation","src":"3477:439:3","text":" @notice A contract has already been registered under the given name.\n @dev Note that names must be unique; it is not possible to register two contracts with the same name and\n different types, or the same name and different addresses.\n @param contractType The registered contract type, provided for documentation purposes\n @param contractName The name of the previously registered contract"},"errorSelector":"a1e69ed3","id":100,"name":"ContractNameAlreadyRegistered","nameLocation":"3927:29:3","nodeType":"ErrorDefinition","parameters":{"id":99,"nodeType":"ParameterList","parameters":[{"constant":false,"id":96,"mutability":"mutable","name":"contractType","nameLocation":"3970:12:3","nodeType":"VariableDeclaration","scope":100,"src":"3957:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":95,"nodeType":"UserDefinedTypeName","pathNode":{"id":94,"name":"ContractType","nameLocations":["3957:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"3957:12:3"},"referencedDeclaration":43,"src":"3957:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":98,"mutability":"mutable","name":"contractName","nameLocation":"3991:12:3","nodeType":"VariableDeclaration","scope":100,"src":"3984:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":97,"name":"string","nodeType":"ElementaryTypeName","src":"3984:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3956:48:3"},"src":"3921:84:3"},{"documentation":{"id":101,"nodeType":"StructuredDocumentation","src":"4011:338:3","text":" @notice The proposed contract name has already been added as an alias.\n @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n @param contractName The name of the previously registered contract\n @param contractAddress The address of the previously registered contract"},"errorSelector":"6d4f9990","id":107,"name":"ContractNameInUseAsAlias","nameLocation":"4360:24:3","nodeType":"ErrorDefinition","parameters":{"id":106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":103,"mutability":"mutable","name":"contractName","nameLocation":"4392:12:3","nodeType":"VariableDeclaration","scope":107,"src":"4385:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":102,"name":"string","nodeType":"ElementaryTypeName","src":"4385:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":105,"mutability":"mutable","name":"contractAddress","nameLocation":"4414:15:3","nodeType":"VariableDeclaration","scope":107,"src":"4406:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":104,"name":"address","nodeType":"ElementaryTypeName","src":"4406:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4384:46:3"},"src":"4354:77:3"},{"documentation":{"id":108,"nodeType":"StructuredDocumentation","src":"4437:371:3","text":" @notice The proposed alias has already been registered as a contract.\n @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n @param contractType The registered contract type, provided for documentation purposes\n @param contractName The name of the previously registered contract (and proposed alias)"},"errorSelector":"4466cf0c","id":115,"name":"ContractAliasInUseAsName","nameLocation":"4819:24:3","nodeType":"ErrorDefinition","parameters":{"id":114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":111,"mutability":"mutable","name":"contractType","nameLocation":"4857:12:3","nodeType":"VariableDeclaration","scope":115,"src":"4844:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":110,"nodeType":"UserDefinedTypeName","pathNode":{"id":109,"name":"ContractType","nameLocations":["4844:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"4844:12:3"},"referencedDeclaration":43,"src":"4844:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":113,"mutability":"mutable","name":"contractName","nameLocation":"4878:12:3","nodeType":"VariableDeclaration","scope":115,"src":"4871:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":112,"name":"string","nodeType":"ElementaryTypeName","src":"4871:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4843:48:3"},"src":"4813:79:3"},{"documentation":{"id":116,"nodeType":"StructuredDocumentation","src":"4898:175:3","text":" @notice Thrown when attempting to deregister a contract that was not previously registered.\n @param contractName The name of the unregistered contract"},"errorSelector":"cd3599f9","id":120,"name":"ContractNameNotRegistered","nameLocation":"5084:25:3","nodeType":"ErrorDefinition","parameters":{"id":119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":118,"mutability":"mutable","name":"contractName","nameLocation":"5117:12:3","nodeType":"VariableDeclaration","scope":120,"src":"5110:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":117,"name":"string","nodeType":"ElementaryTypeName","src":"5110:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5109:21:3"},"src":"5078:53:3"},{"documentation":{"id":121,"nodeType":"StructuredDocumentation","src":"5137:329:3","text":" @notice An operation that requires a valid contract specified an unrecognized address.\n @dev A contract being deprecated was never registered, or the target of an alias isn't a previously\n registered contract.\n @param contractAddress The address of the contract that was not registered"},"errorSelector":"f5b5d364","id":125,"name":"ContractAddressNotRegistered","nameLocation":"5477:28:3","nodeType":"ErrorDefinition","parameters":{"id":124,"nodeType":"ParameterList","parameters":[{"constant":false,"id":123,"mutability":"mutable","name":"contractAddress","nameLocation":"5514:15:3","nodeType":"VariableDeclaration","scope":125,"src":"5506:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":122,"name":"address","nodeType":"ElementaryTypeName","src":"5506:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5505:25:3"},"src":"5471:60:3"},{"documentation":{"id":126,"nodeType":"StructuredDocumentation","src":"5537:145:3","text":" @notice Contracts can only be deprecated once.\n @param contractAddress The address of the previously deprecated contract"},"errorSelector":"1f118c35","id":130,"name":"ContractAlreadyDeprecated","nameLocation":"5693:25:3","nodeType":"ErrorDefinition","parameters":{"id":129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":128,"mutability":"mutable","name":"contractAddress","nameLocation":"5727:15:3","nodeType":"VariableDeclaration","scope":130,"src":"5719:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":127,"name":"address","nodeType":"ElementaryTypeName","src":"5719:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5718:25:3"},"src":"5687:57:3"},{"documentation":{"id":131,"nodeType":"StructuredDocumentation","src":"5750:95:3","text":"@notice Cannot register or deprecate contracts, or add an alias targeting the zero address."},"errorSelector":"b4d92c53","id":133,"name":"ZeroContractAddress","nameLocation":"5856:19:3","nodeType":"ErrorDefinition","parameters":{"id":132,"nodeType":"ParameterList","parameters":[],"src":"5875:2:3"},"src":"5850:28:3"},{"documentation":{"id":134,"nodeType":"StructuredDocumentation","src":"5884:86:3","text":"@notice Cannot register (or deregister) a contract with an empty string as a name."},"errorSelector":"830c907e","id":136,"name":"InvalidContractName","nameLocation":"5981:19:3","nodeType":"ErrorDefinition","parameters":{"id":135,"nodeType":"ParameterList","parameters":[],"src":"6000:2:3"},"src":"5975:28:3"},{"documentation":{"id":137,"nodeType":"StructuredDocumentation","src":"6009:51:3","text":"@notice Cannot add an empty string as an alias."},"errorSelector":"907f9fd9","id":139,"name":"InvalidContractAlias","nameLocation":"6071:20:3","nodeType":"ErrorDefinition","parameters":{"id":138,"nodeType":"ParameterList","parameters":[],"src":"6091:2:3"},"src":"6065:29:3"},{"documentation":{"id":140,"nodeType":"StructuredDocumentation","src":"6100:711:3","text":" @notice Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n @dev This is a permissioned function, and does only basic validation of the address (non-zero) and the name\n (not blank). Governance must ensure this is called with valid information. Emits the\n `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or\n already in use.\n @param contractType The type of contract being registered\n @param contractName A text description of the contract, usually the deployed version (e.g., \"v3-pool-weighted\")\n @param contractAddress The address of the contract"},"functionSelector":"e0376ab4","id":150,"implemented":false,"kind":"function","modifiers":[],"name":"registerBalancerContract","nameLocation":"6825:24:3","nodeType":"FunctionDefinition","parameters":{"id":148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":143,"mutability":"mutable","name":"contractType","nameLocation":"6872:12:3","nodeType":"VariableDeclaration","scope":150,"src":"6859:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":142,"nodeType":"UserDefinedTypeName","pathNode":{"id":141,"name":"ContractType","nameLocations":["6859:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"6859:12:3"},"referencedDeclaration":43,"src":"6859:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":145,"mutability":"mutable","name":"contractName","nameLocation":"6908:12:3","nodeType":"VariableDeclaration","scope":150,"src":"6894:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":144,"name":"string","nodeType":"ElementaryTypeName","src":"6894:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":147,"mutability":"mutable","name":"contractAddress","nameLocation":"6938:15:3","nodeType":"VariableDeclaration","scope":150,"src":"6930:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":146,"name":"address","nodeType":"ElementaryTypeName","src":"6930:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6849:110:3"},"returnParameters":{"id":149,"nodeType":"ParameterList","parameters":[],"src":"6968:0:3"},"scope":212,"src":"6816:153:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":151,"nodeType":"StructuredDocumentation","src":"6975:878:3","text":" @notice Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n @dev This is a permissioned function, and makes it possible to correct errors without complex update logic.\n If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete\n it, and register it again with the correct data. It must start with the name, as this is the registry key,\n required for complete deletion.\n Note that there might still be an alias targeting the address being deleted, but accessing it will just return\n inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to\n the correct address.\n @param contractName The name of the contract being deprecated (cannot be an alias)"},"functionSelector":"c7f90793","id":156,"implemented":false,"kind":"function","modifiers":[],"name":"deregisterBalancerContract","nameLocation":"7867:26:3","nodeType":"FunctionDefinition","parameters":{"id":154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":153,"mutability":"mutable","name":"contractName","nameLocation":"7908:12:3","nodeType":"VariableDeclaration","scope":156,"src":"7894:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":152,"name":"string","nodeType":"ElementaryTypeName","src":"7894:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7893:28:3"},"returnParameters":{"id":155,"nodeType":"ParameterList","parameters":[],"src":"7930:0:3"},"scope":212,"src":"7858:73:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":157,"nodeType":"StructuredDocumentation","src":"7937:472:3","text":" @notice Deprecate an official Balancer contract.\n @dev This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the\n address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are\n enforced unique, so either the name or address could be specified in principle.\n @param contractAddress The address of the contract being deprecated"},"functionSelector":"44969a9c","id":162,"implemented":false,"kind":"function","modifiers":[],"name":"deprecateBalancerContract","nameLocation":"8423:25:3","nodeType":"FunctionDefinition","parameters":{"id":160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":159,"mutability":"mutable","name":"contractAddress","nameLocation":"8457:15:3","nodeType":"VariableDeclaration","scope":162,"src":"8449:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":158,"name":"address","nodeType":"ElementaryTypeName","src":"8449:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8448:25:3"},"returnParameters":{"id":161,"nodeType":"ParameterList","parameters":[],"src":"8482:0:3"},"scope":212,"src":"8414:69:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":163,"nodeType":"StructuredDocumentation","src":"8489:650:3","text":" @notice Add an alias for a registered contract.\n @dev This is a permissioned function to support querying by a contract alias. For instance, we might create a\n `WeightedPool` alias meaning the \"latest\" version of the `WeightedPoolFactory`, so that off-chain users don't\n need to track specific versions. Once added, an alias can also be updated to point to a different address\n (e.g., when migrating from the v2 to the v3 weighted pool).\n @param contractAlias An alternate name that can be used to fetch a contract address\n @param existingContract The target address of the contract alias"},"functionSelector":"2967af96","id":170,"implemented":false,"kind":"function","modifiers":[],"name":"addOrUpdateBalancerContractAlias","nameLocation":"9153:32:3","nodeType":"FunctionDefinition","parameters":{"id":168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":165,"mutability":"mutable","name":"contractAlias","nameLocation":"9200:13:3","nodeType":"VariableDeclaration","scope":170,"src":"9186:27:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":164,"name":"string","nodeType":"ElementaryTypeName","src":"9186:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":167,"mutability":"mutable","name":"existingContract","nameLocation":"9223:16:3","nodeType":"VariableDeclaration","scope":170,"src":"9215:24:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":166,"name":"address","nodeType":"ElementaryTypeName","src":"9215:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9185:55:3"},"returnParameters":{"id":169,"nodeType":"ParameterList","parameters":[],"src":"9249:0:3"},"scope":212,"src":"9144:106:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":171,"nodeType":"StructuredDocumentation","src":"9256:316:3","text":" @notice Determine whether an address is an official contract of the specified type.\n @param contractType The type of contract\n @param contractAddress The address of the contract\n @return isActive True if the given address is a registered and active contract of the specified type"},"functionSelector":"ae2733a4","id":181,"implemented":false,"kind":"function","modifiers":[],"name":"isActiveBalancerContract","nameLocation":"9586:24:3","nodeType":"FunctionDefinition","parameters":{"id":177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":174,"mutability":"mutable","name":"contractType","nameLocation":"9633:12:3","nodeType":"VariableDeclaration","scope":181,"src":"9620:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":173,"nodeType":"UserDefinedTypeName","pathNode":{"id":172,"name":"ContractType","nameLocations":["9620:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"9620:12:3"},"referencedDeclaration":43,"src":"9620:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":176,"mutability":"mutable","name":"contractAddress","nameLocation":"9663:15:3","nodeType":"VariableDeclaration","scope":181,"src":"9655:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":175,"name":"address","nodeType":"ElementaryTypeName","src":"9655:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9610:74:3"},"returnParameters":{"id":180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":179,"mutability":"mutable","name":"isActive","nameLocation":"9713:8:3","nodeType":"VariableDeclaration","scope":181,"src":"9708:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":178,"name":"bool","nodeType":"ElementaryTypeName","src":"9708:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9707:15:3"},"scope":212,"src":"9577:146:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":182,"nodeType":"StructuredDocumentation","src":"9729:496:3","text":" @notice Look up a registered contract by type and name.\n @dev This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias\n (e.g., `WeightedPool`).\n @param contractType The type of the contract\n @param contractName The name of the contract\n @return contractAddress The address of the associated contract, if registered, or zero\n @return isActive True if the contract was registered and not deprecated"},"functionSelector":"41d8c0bb","id":194,"implemented":false,"kind":"function","modifiers":[],"name":"getBalancerContract","nameLocation":"10239:19:3","nodeType":"FunctionDefinition","parameters":{"id":188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":185,"mutability":"mutable","name":"contractType","nameLocation":"10281:12:3","nodeType":"VariableDeclaration","scope":194,"src":"10268:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":184,"nodeType":"UserDefinedTypeName","pathNode":{"id":183,"name":"ContractType","nameLocations":["10268:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"10268:12:3"},"referencedDeclaration":43,"src":"10268:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":187,"mutability":"mutable","name":"contractName","nameLocation":"10317:12:3","nodeType":"VariableDeclaration","scope":194,"src":"10303:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":186,"name":"string","nodeType":"ElementaryTypeName","src":"10303:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"10258:77:3"},"returnParameters":{"id":193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":190,"mutability":"mutable","name":"contractAddress","nameLocation":"10367:15:3","nodeType":"VariableDeclaration","scope":194,"src":"10359:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":189,"name":"address","nodeType":"ElementaryTypeName","src":"10359:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":192,"mutability":"mutable","name":"isActive","nameLocation":"10389:8:3","nodeType":"VariableDeclaration","scope":194,"src":"10384:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":191,"name":"bool","nodeType":"ElementaryTypeName","src":"10384:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10358:40:3"},"scope":212,"src":"10230:169:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":195,"nodeType":"StructuredDocumentation","src":"10405:233:3","text":" @notice Look up complete information about a registered contract by address.\n @param contractAddress The address of the associated contract\n @return info ContractInfo struct corresponding to the address"},"functionSelector":"8554c327","id":203,"implemented":false,"kind":"function","modifiers":[],"name":"getBalancerContractInfo","nameLocation":"10652:23:3","nodeType":"FunctionDefinition","parameters":{"id":198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":197,"mutability":"mutable","name":"contractAddress","nameLocation":"10684:15:3","nodeType":"VariableDeclaration","scope":203,"src":"10676:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":196,"name":"address","nodeType":"ElementaryTypeName","src":"10676:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10675:25:3"},"returnParameters":{"id":202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":201,"mutability":"mutable","name":"info","nameLocation":"10744:4:3","nodeType":"VariableDeclaration","scope":203,"src":"10724:24:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":200,"nodeType":"UserDefinedTypeName","pathNode":{"id":199,"name":"ContractInfo","nameLocations":["10724:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"10724:12:3"},"referencedDeclaration":52,"src":"10724:12:3","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"src":"10723:26:3"},"scope":212,"src":"10643:107:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":204,"nodeType":"StructuredDocumentation","src":"10756:92:3","text":"@notice Returns `true` if the given address is an active contract under the ROUTER type."},"functionSelector":"264e97e0","id":211,"implemented":false,"kind":"function","modifiers":[],"name":"isTrustedRouter","nameLocation":"10862:15:3","nodeType":"FunctionDefinition","parameters":{"id":207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":206,"mutability":"mutable","name":"router","nameLocation":"10886:6:3","nodeType":"VariableDeclaration","scope":211,"src":"10878:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":205,"name":"address","nodeType":"ElementaryTypeName","src":"10878:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10877:16:3"},"returnParameters":{"id":210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":209,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":211,"src":"10917:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":208,"name":"bool","nodeType":"ElementaryTypeName","src":"10917:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10916:6:3"},"scope":212,"src":"10853:70:3","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":213,"src":"306:10619:3","usedErrors":[92,100,107,115,120,125,130,133,136,139],"usedEvents":[62,72,77,84]}],"src":"46:10880:3"},"id":3},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol","exportedSymbols":{"IBalancerFeeBurner":[276],"IERC20":[10576],"IProtocolFeeBurner":[948]},"id":277,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":214,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:4"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":216,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":277,"sourceUnit":10577,"src":"72:72:4","symbolAliases":[{"foreign":{"id":215,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"./IProtocolFeeBurner.sol","id":218,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":277,"sourceUnit":949,"src":"145:62:4","symbolAliases":[{"foreign":{"id":217,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"154:18:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":219,"name":"IProtocolFeeBurner","nameLocations":["241:18:4"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"241:18:4"},"id":220,"nodeType":"InheritanceSpecifier","src":"241:18:4"}],"canonicalName":"IBalancerFeeBurner","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":276,"linearizedBaseContracts":[276,948],"name":"IBalancerFeeBurner","nameLocation":"219:18:4","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IBalancerFeeBurner.SwapPathStep","documentation":{"id":221,"nodeType":"StructuredDocumentation","src":"266:152:4","text":" @notice Steps for the burn path.\n @param pool The pool for the swap\n @param tokenOut The `tokenOut` of the swap operation"},"id":227,"members":[{"constant":false,"id":223,"mutability":"mutable","name":"pool","nameLocation":"461:4:4","nodeType":"VariableDeclaration","scope":227,"src":"453:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":222,"name":"address","nodeType":"ElementaryTypeName","src":"453:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":226,"mutability":"mutable","name":"tokenOut","nameLocation":"482:8:4","nodeType":"VariableDeclaration","scope":227,"src":"475:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":225,"nodeType":"UserDefinedTypeName","pathNode":{"id":224,"name":"IERC20","nameLocations":["475:6:4"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"475:6:4"},"referencedDeclaration":10576,"src":"475:6:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"name":"SwapPathStep","nameLocation":"430:12:4","nodeType":"StructDefinition","scope":276,"src":"423:74:4","visibility":"public"},{"canonicalName":"IBalancerFeeBurner.BurnHookParams","documentation":{"id":228,"nodeType":"StructuredDocumentation","src":"503:637:4","text":" @notice Data for the burn hook.\n @param pool The pool the fees came from (only used for documentation in the event)\n @param sender The sender of the call. In most cases, this is the sweeper.\n @param feeToken The token collected from the pool\n @param feeTokenAmount The number of fee tokens collected\n @param targetToken The desired target token (`tokenOut` of the swap)\n @param minAmountOut The minimum `amountOut` for the swap\n @param recipient The recipient of the swap proceeds\n @param deadline Deadline for the burn operation (i.e., swap), after which it will revert"},"id":247,"members":[{"constant":false,"id":230,"mutability":"mutable","name":"pool","nameLocation":"1185:4:4","nodeType":"VariableDeclaration","scope":247,"src":"1177:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":229,"name":"address","nodeType":"ElementaryTypeName","src":"1177:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":232,"mutability":"mutable","name":"sender","nameLocation":"1207:6:4","nodeType":"VariableDeclaration","scope":247,"src":"1199:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":231,"name":"address","nodeType":"ElementaryTypeName","src":"1199:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":235,"mutability":"mutable","name":"feeToken","nameLocation":"1230:8:4","nodeType":"VariableDeclaration","scope":247,"src":"1223:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":234,"nodeType":"UserDefinedTypeName","pathNode":{"id":233,"name":"IERC20","nameLocations":["1223:6:4"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1223:6:4"},"referencedDeclaration":10576,"src":"1223:6:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":237,"mutability":"mutable","name":"feeTokenAmount","nameLocation":"1256:14:4","nodeType":"VariableDeclaration","scope":247,"src":"1248:22:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":236,"name":"uint256","nodeType":"ElementaryTypeName","src":"1248:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":240,"mutability":"mutable","name":"targetToken","nameLocation":"1287:11:4","nodeType":"VariableDeclaration","scope":247,"src":"1280:18:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":239,"nodeType":"UserDefinedTypeName","pathNode":{"id":238,"name":"IERC20","nameLocations":["1280:6:4"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1280:6:4"},"referencedDeclaration":10576,"src":"1280:6:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":242,"mutability":"mutable","name":"minAmountOut","nameLocation":"1316:12:4","nodeType":"VariableDeclaration","scope":247,"src":"1308:20:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":241,"name":"uint256","nodeType":"ElementaryTypeName","src":"1308:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":244,"mutability":"mutable","name":"recipient","nameLocation":"1346:9:4","nodeType":"VariableDeclaration","scope":247,"src":"1338:17:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":243,"name":"address","nodeType":"ElementaryTypeName","src":"1338:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":246,"mutability":"mutable","name":"deadline","nameLocation":"1373:8:4","nodeType":"VariableDeclaration","scope":247,"src":"1365:16:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":245,"name":"uint256","nodeType":"ElementaryTypeName","src":"1365:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"BurnHookParams","nameLocation":"1152:14:4","nodeType":"StructDefinition","scope":276,"src":"1145:243:4","visibility":"public"},{"documentation":{"id":248,"nodeType":"StructuredDocumentation","src":"1394:48:4","text":"@notice Burn path not set for the fee token."},"errorSelector":"f9aa0315","id":250,"name":"BurnPathDoesNotExist","nameLocation":"1453:20:4","nodeType":"ErrorDefinition","parameters":{"id":249,"nodeType":"ParameterList","parameters":[],"src":"1473:2:4"},"src":"1447:29:4"},{"documentation":{"id":251,"nodeType":"StructuredDocumentation","src":"1482:75:4","text":"@notice The last token in the path is not the same as the target token."},"errorSelector":"a682e903","id":253,"name":"TargetTokenOutMismatch","nameLocation":"1568:22:4","nodeType":"ErrorDefinition","parameters":{"id":252,"nodeType":"ParameterList","parameters":[],"src":"1590:2:4"},"src":"1562:31:4"},{"documentation":{"id":254,"nodeType":"StructuredDocumentation","src":"1599:311:4","text":" @notice Set the burn path for a fee token.\n @dev This is the sequence of swaps required to convert the `feeToken` to the `targetToken`.\n This is a permissioned function.\n @param feeToken The fee token to set the path for\n @param steps The steps in the burn path"},"functionSelector":"e3746cb2","id":264,"implemented":false,"kind":"function","modifiers":[],"name":"setBurnPath","nameLocation":"1924:11:4","nodeType":"FunctionDefinition","parameters":{"id":262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":257,"mutability":"mutable","name":"feeToken","nameLocation":"1943:8:4","nodeType":"VariableDeclaration","scope":264,"src":"1936:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":256,"nodeType":"UserDefinedTypeName","pathNode":{"id":255,"name":"IERC20","nameLocations":["1936:6:4"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1936:6:4"},"referencedDeclaration":10576,"src":"1936:6:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":261,"mutability":"mutable","name":"steps","nameLocation":"1977:5:4","nodeType":"VariableDeclaration","scope":264,"src":"1953:29:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"},"typeName":{"baseType":{"id":259,"nodeType":"UserDefinedTypeName","pathNode":{"id":258,"name":"SwapPathStep","nameLocations":["1953:12:4"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"1953:12:4"},"referencedDeclaration":227,"src":"1953:12:4","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"id":260,"nodeType":"ArrayTypeName","src":"1953:14:4","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"}},"visibility":"internal"}],"src":"1935:48:4"},"returnParameters":{"id":263,"nodeType":"ParameterList","parameters":[],"src":"1992:0:4"},"scope":276,"src":"1915:78:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":265,"nodeType":"StructuredDocumentation","src":"1999:166:4","text":" @notice Get the burn path for a fee token.\n @param feeToken The fee token to get the path for\n @return steps The steps in the burn path"},"functionSelector":"c1cfb02a","id":275,"implemented":false,"kind":"function","modifiers":[],"name":"getBurnPath","nameLocation":"2179:11:4","nodeType":"FunctionDefinition","parameters":{"id":269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":268,"mutability":"mutable","name":"feeToken","nameLocation":"2198:8:4","nodeType":"VariableDeclaration","scope":275,"src":"2191:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":267,"nodeType":"UserDefinedTypeName","pathNode":{"id":266,"name":"IERC20","nameLocations":["2191:6:4"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2191:6:4"},"referencedDeclaration":10576,"src":"2191:6:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2190:17:4"},"returnParameters":{"id":274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":273,"mutability":"mutable","name":"steps","nameLocation":"2253:5:4","nodeType":"VariableDeclaration","scope":275,"src":"2231:27:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"},"typeName":{"baseType":{"id":271,"nodeType":"UserDefinedTypeName","pathNode":{"id":270,"name":"SwapPathStep","nameLocations":["2231:12:4"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"2231:12:4"},"referencedDeclaration":227,"src":"2231:12:4","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"id":272,"nodeType":"ArrayTypeName","src":"2231:14:4","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"}},"visibility":"internal"}],"src":"2230:29:4"},"scope":276,"src":"2170:90:4","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":277,"src":"209:2053:4","usedErrors":[250,253,924,927],"usedEvents":[914]}],"src":"46:2217:4"},"id":4},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","exportedSymbols":{"IComposableCow":[326],"ICowConditionalOrder":[418]},"id":327,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":278,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:5"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","file":"./ICowConditionalOrder.sol","id":280,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":327,"sourceUnit":419,"src":"72:66:5","symbolAliases":[{"foreign":{"id":279,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"81:20:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IComposableCow","contractDependencies":[],"contractKind":"interface","documentation":{"id":281,"nodeType":"StructuredDocumentation","src":"140:80:5","text":"@notice Utility contract used to validate orders in the `CowSwapFeeBurner`."},"fullyImplemented":false,"id":326,"linearizedBaseContracts":[326],"name":"IComposableCow","nameLocation":"230:14:5","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IComposableCow.Payload","documentation":{"id":282,"nodeType":"StructuredDocumentation","src":"251:388:5","text":" @notice Data passed to ComposableCoW via the payload parameter of isValidSafeSignature.\n @dev See github.com/curvefi/curve-burners/blob/main/contracts/burners/CowSwapBurner.vy#L66:L69.\n @param proof Merkle Tree proof\n @param params Conditional order params\n @param offchainInput Off-chain input (similar to Balancer `userData`); currently unused"},"id":291,"members":[{"constant":false,"id":285,"mutability":"mutable","name":"proof","nameLocation":"679:5:5","nodeType":"VariableDeclaration","scope":291,"src":"669:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":283,"name":"bytes32","nodeType":"ElementaryTypeName","src":"669:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":284,"nodeType":"ArrayTypeName","src":"669:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":288,"mutability":"mutable","name":"params","nameLocation":"738:6:5","nodeType":"VariableDeclaration","scope":291,"src":"694:50:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_storage_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"},"typeName":{"id":287,"nodeType":"UserDefinedTypeName","pathNode":{"id":286,"name":"ICowConditionalOrder.ConditionalOrderParams","nameLocations":["694:20:5","715:22:5"],"nodeType":"IdentifierPath","referencedDeclaration":367,"src":"694:43:5"},"referencedDeclaration":367,"src":"694:43:5","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_storage_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"}},"visibility":"internal"},{"constant":false,"id":290,"mutability":"mutable","name":"offchainInput","nameLocation":"760:13:5","nodeType":"VariableDeclaration","scope":291,"src":"754:19:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":289,"name":"bytes","nodeType":"ElementaryTypeName","src":"754:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"Payload","nameLocation":"651:7:5","nodeType":"StructDefinition","scope":326,"src":"644:136:5","visibility":"public"},{"documentation":{"id":292,"nodeType":"StructuredDocumentation","src":"786:171:5","text":" @notice Construct a CoW order.\n @param params Order parameters\n @param dispatch If true, submit the order (always true in the CowSwapBurner)"},"functionSelector":"6bfae1ca","id":300,"implemented":false,"kind":"function","modifiers":[],"name":"create","nameLocation":"971:6:5","nodeType":"FunctionDefinition","parameters":{"id":298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":295,"mutability":"mutable","name":"params","nameLocation":"1031:6:5","nodeType":"VariableDeclaration","scope":300,"src":"978:59:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_calldata_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"},"typeName":{"id":294,"nodeType":"UserDefinedTypeName","pathNode":{"id":293,"name":"ICowConditionalOrder.ConditionalOrderParams","nameLocations":["978:20:5","999:22:5"],"nodeType":"IdentifierPath","referencedDeclaration":367,"src":"978:43:5"},"referencedDeclaration":367,"src":"978:43:5","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_storage_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"}},"visibility":"internal"},{"constant":false,"id":297,"mutability":"mutable","name":"dispatch","nameLocation":"1044:8:5","nodeType":"VariableDeclaration","scope":300,"src":"1039:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":296,"name":"bool","nodeType":"ElementaryTypeName","src":"1039:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"977:76:5"},"returnParameters":{"id":299,"nodeType":"ParameterList","parameters":[],"src":"1062:0:5"},"scope":326,"src":"962:101:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"f698da25","id":305,"implemented":false,"kind":"function","modifiers":[],"name":"domainSeparator","nameLocation":"1078:15:5","nodeType":"FunctionDefinition","parameters":{"id":301,"nodeType":"ParameterList","parameters":[],"src":"1093:2:5"},"returnParameters":{"id":304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":303,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":305,"src":"1119:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":302,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1119:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1118:9:5"},"scope":326,"src":"1069:59:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":306,"nodeType":"StructuredDocumentation","src":"1134:77:5","text":"@notice Delegated ERC-1271 signature validation with an enhanced context."},"functionSelector":"53f00b14","id":325,"implemented":false,"kind":"function","modifiers":[],"name":"isValidSafeSignature","nameLocation":"1225:20:5","nodeType":"FunctionDefinition","parameters":{"id":321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":308,"mutability":"mutable","name":"safe","nameLocation":"1263:4:5","nodeType":"VariableDeclaration","scope":325,"src":"1255:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":307,"name":"address","nodeType":"ElementaryTypeName","src":"1255:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":310,"mutability":"mutable","name":"sender","nameLocation":"1285:6:5","nodeType":"VariableDeclaration","scope":325,"src":"1277:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":309,"name":"address","nodeType":"ElementaryTypeName","src":"1277:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":312,"mutability":"mutable","name":"_hash","nameLocation":"1309:5:5","nodeType":"VariableDeclaration","scope":325,"src":"1301:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":311,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1301:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":314,"mutability":"mutable","name":"_domainSeparator","nameLocation":"1332:16:5","nodeType":"VariableDeclaration","scope":325,"src":"1324:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":313,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1324:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":316,"mutability":"mutable","name":"typeHash","nameLocation":"1366:8:5","nodeType":"VariableDeclaration","scope":325,"src":"1358:16:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":315,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1358:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":318,"mutability":"mutable","name":"encodeData","nameLocation":"1399:10:5","nodeType":"VariableDeclaration","scope":325,"src":"1384:25:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":317,"name":"bytes","nodeType":"ElementaryTypeName","src":"1384:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":320,"mutability":"mutable","name":"payload","nameLocation":"1434:7:5","nodeType":"VariableDeclaration","scope":325,"src":"1419:22:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":319,"name":"bytes","nodeType":"ElementaryTypeName","src":"1419:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1245:202:5"},"returnParameters":{"id":324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":323,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":325,"src":"1471:6:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":322,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1471:6:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1470:8:5"},"scope":326,"src":"1216:263:5","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":327,"src":"220:1261:5","usedErrors":[],"usedEvents":[]}],"src":"46:1436:5"},"id":5},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","exportedSymbols":{"GPv2Order":[357],"ICowConditionalOrder":[418],"IERC20":[10576]},"id":419,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":328,"literals":["solidity",">=","0.8",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"36:31:6"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":330,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":419,"sourceUnit":10577,"src":"69:72:6","symbolAliases":[{"foreign":{"id":329,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"78:6:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"GPv2Order","id":357,"members":[{"constant":false,"id":333,"mutability":"mutable","name":"sellToken","nameLocation":"274:9:6","nodeType":"VariableDeclaration","scope":357,"src":"267:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":332,"nodeType":"UserDefinedTypeName","pathNode":{"id":331,"name":"IERC20","nameLocations":["267:6:6"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"267:6:6"},"referencedDeclaration":10576,"src":"267:6:6","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":336,"mutability":"mutable","name":"buyToken","nameLocation":"296:8:6","nodeType":"VariableDeclaration","scope":357,"src":"289:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":335,"nodeType":"UserDefinedTypeName","pathNode":{"id":334,"name":"IERC20","nameLocations":["289:6:6"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"289:6:6"},"referencedDeclaration":10576,"src":"289:6:6","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":338,"mutability":"mutable","name":"receiver","nameLocation":"318:8:6","nodeType":"VariableDeclaration","scope":357,"src":"310:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":337,"name":"address","nodeType":"ElementaryTypeName","src":"310:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":340,"mutability":"mutable","name":"sellAmount","nameLocation":"340:10:6","nodeType":"VariableDeclaration","scope":357,"src":"332:18:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":339,"name":"uint256","nodeType":"ElementaryTypeName","src":"332:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":342,"mutability":"mutable","name":"buyAmount","nameLocation":"364:9:6","nodeType":"VariableDeclaration","scope":357,"src":"356:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":341,"name":"uint256","nodeType":"ElementaryTypeName","src":"356:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":344,"mutability":"mutable","name":"validTo","nameLocation":"386:7:6","nodeType":"VariableDeclaration","scope":357,"src":"379:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":343,"name":"uint32","nodeType":"ElementaryTypeName","src":"379:6:6","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":346,"mutability":"mutable","name":"appData","nameLocation":"407:7:6","nodeType":"VariableDeclaration","scope":357,"src":"399:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":345,"name":"bytes32","nodeType":"ElementaryTypeName","src":"399:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":348,"mutability":"mutable","name":"feeAmount","nameLocation":"428:9:6","nodeType":"VariableDeclaration","scope":357,"src":"420:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":347,"name":"uint256","nodeType":"ElementaryTypeName","src":"420:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":350,"mutability":"mutable","name":"kind","nameLocation":"451:4:6","nodeType":"VariableDeclaration","scope":357,"src":"443:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":349,"name":"bytes32","nodeType":"ElementaryTypeName","src":"443:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":352,"mutability":"mutable","name":"partiallyFillable","nameLocation":"466:17:6","nodeType":"VariableDeclaration","scope":357,"src":"461:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":351,"name":"bool","nodeType":"ElementaryTypeName","src":"461:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":354,"mutability":"mutable","name":"sellTokenBalance","nameLocation":"497:16:6","nodeType":"VariableDeclaration","scope":357,"src":"489:24:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":353,"name":"bytes32","nodeType":"ElementaryTypeName","src":"489:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":356,"mutability":"mutable","name":"buyTokenBalance","nameLocation":"527:15:6","nodeType":"VariableDeclaration","scope":357,"src":"519:23:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":355,"name":"bytes32","nodeType":"ElementaryTypeName","src":"519:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"GPv2Order","nameLocation":"251:9:6","nodeType":"StructDefinition","scope":419,"src":"244:301:6","visibility":"public"},{"abstract":false,"baseContracts":[],"canonicalName":"ICowConditionalOrder","contractDependencies":[],"contractKind":"interface","documentation":{"id":358,"nodeType":"StructuredDocumentation","src":"547:131:6","text":" @notice Conditional Order Interface - verify a Cow order.\n @author CoW Protocol Developers + mfw78 "},"fullyImplemented":false,"id":418,"linearizedBaseContracts":[418],"name":"ICowConditionalOrder","nameLocation":"689:20:6","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ICowConditionalOrder.ConditionalOrderParams","documentation":{"id":359,"nodeType":"StructuredDocumentation","src":"716:454:6","text":" @notice This struct is used to uniquely identify a conditional order for an owner.\n @dev H(handler || salt || staticData) **MUST** be unique for an owner.\n @param handler The contract implementing the conditional order logic\n @param salt Allows for multiple conditional orders of the same type and data (currently unused)\n @param staticData Data available to ALL discrete orders created by the conditional order"},"id":367,"members":[{"constant":false,"id":362,"mutability":"mutable","name":"handler","nameLocation":"1236:7:6","nodeType":"VariableDeclaration","scope":367,"src":"1215:28:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ICowConditionalOrder_$418","typeString":"contract ICowConditionalOrder"},"typeName":{"id":361,"nodeType":"UserDefinedTypeName","pathNode":{"id":360,"name":"ICowConditionalOrder","nameLocations":["1215:20:6"],"nodeType":"IdentifierPath","referencedDeclaration":418,"src":"1215:20:6"},"referencedDeclaration":418,"src":"1215:20:6","typeDescriptions":{"typeIdentifier":"t_contract$_ICowConditionalOrder_$418","typeString":"contract ICowConditionalOrder"}},"visibility":"internal"},{"constant":false,"id":364,"mutability":"mutable","name":"salt","nameLocation":"1261:4:6","nodeType":"VariableDeclaration","scope":367,"src":"1253:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":363,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1253:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":366,"mutability":"mutable","name":"staticData","nameLocation":"1281:10:6","nodeType":"VariableDeclaration","scope":367,"src":"1275:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":365,"name":"bytes","nodeType":"ElementaryTypeName","src":"1275:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"ConditionalOrderParams","nameLocation":"1182:22:6","nodeType":"StructDefinition","scope":418,"src":"1175:123:6","visibility":"public"},{"documentation":{"id":368,"nodeType":"StructuredDocumentation","src":"1304:191:6","text":" @notice This error is returned by the `getTradeableOrder` function if the order conditions are not met.\n @param reason Text explaining the reason the order is invalid"},"errorSelector":"c8fc2725","id":372,"name":"OrderNotValid","nameLocation":"1506:13:6","nodeType":"ErrorDefinition","parameters":{"id":371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":370,"mutability":"mutable","name":"reason","nameLocation":"1527:6:6","nodeType":"VariableDeclaration","scope":372,"src":"1520:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":369,"name":"string","nodeType":"ElementaryTypeName","src":"1520:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1519:15:6"},"src":"1500:35:6"},{"documentation":{"id":373,"nodeType":"StructuredDocumentation","src":"1619:144:6","text":" @notice Polling should be retried at the next block.\n @param reason Text description of the reason it should be retried"},"errorSelector":"d05f3065","id":377,"name":"PollTryNextBlock","nameLocation":"1774:16:6","nodeType":"ErrorDefinition","parameters":{"id":376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":375,"mutability":"mutable","name":"reason","nameLocation":"1798:6:6","nodeType":"VariableDeclaration","scope":377,"src":"1791:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":374,"name":"string","nodeType":"ElementaryTypeName","src":"1791:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1790:15:6"},"src":"1768:38:6"},{"documentation":{"id":378,"nodeType":"StructuredDocumentation","src":"1812:223:6","text":" @notice Polling should be retried at a specific block number.\n @param blockNumber The block number when polling should resume\n @param reason Text description of the reason it should be retried"},"errorSelector":"1fe8506e","id":384,"name":"PollTryAtBlock","nameLocation":"2046:14:6","nodeType":"ErrorDefinition","parameters":{"id":383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":380,"mutability":"mutable","name":"blockNumber","nameLocation":"2069:11:6","nodeType":"VariableDeclaration","scope":384,"src":"2061:19:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":379,"name":"uint256","nodeType":"ElementaryTypeName","src":"2061:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":382,"mutability":"mutable","name":"reason","nameLocation":"2089:6:6","nodeType":"VariableDeclaration","scope":384,"src":"2082:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":381,"name":"string","nodeType":"ElementaryTypeName","src":"2082:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2060:36:6"},"src":"2040:57:6"},{"documentation":{"id":385,"nodeType":"StructuredDocumentation","src":"2103:233:6","text":" @notice Polling should be retried at a specific epoch (unix timestamp).\n @param timestamp The unix timestamp when polling should resume\n @param reason Text description of the reason it should be retried"},"errorSelector":"7e334637","id":391,"name":"PollTryAtEpoch","nameLocation":"2347:14:6","nodeType":"ErrorDefinition","parameters":{"id":390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":387,"mutability":"mutable","name":"timestamp","nameLocation":"2370:9:6","nodeType":"VariableDeclaration","scope":391,"src":"2362:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":386,"name":"uint256","nodeType":"ElementaryTypeName","src":"2362:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":389,"mutability":"mutable","name":"reason","nameLocation":"2388:6:6","nodeType":"VariableDeclaration","scope":391,"src":"2381:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":388,"name":"string","nodeType":"ElementaryTypeName","src":"2381:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2361:34:6"},"src":"2341:55:6"},{"documentation":{"id":392,"nodeType":"StructuredDocumentation","src":"2402:165:6","text":" @notice The conditional order should not be polled again (i.e., deleted).\n @param reason Text description of the reason it should be deleted"},"errorSelector":"981b64cd","id":396,"name":"PollNever","nameLocation":"2578:9:6","nodeType":"ErrorDefinition","parameters":{"id":395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":394,"mutability":"mutable","name":"reason","nameLocation":"2595:6:6","nodeType":"VariableDeclaration","scope":396,"src":"2588:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":393,"name":"string","nodeType":"ElementaryTypeName","src":"2588:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2587:15:6"},"src":"2572:31:6"},{"documentation":{"id":397,"nodeType":"StructuredDocumentation","src":"2609:1295:6","text":" @notice Verify that a given discrete order is valid.\n @dev Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe.\n **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the\n `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over\n the order verification logic, and to allow a watchtower / user to propose a discrete order without it being\n generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\n @param owner The owner of the order (usually a contract)\n @param sender The `msg.sender` calling `isValidSignature`\n @param _hash `EIP712` order digest\n @param domainSeparator `EIP712` domain separator\n @param ctx See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\n @param staticInput Conditional order type-specific data known at time of creation for all discrete orders\n @param offchainInput Type-specific data NOT known at time of creation for a specific discrete order (or zero)\n @param order The proposed discrete order's `GPv2Order` data struct"},"functionSelector":"14a2a784","id":417,"implemented":false,"kind":"function","modifiers":[],"name":"verify","nameLocation":"3918:6:6","nodeType":"FunctionDefinition","parameters":{"id":415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":399,"mutability":"mutable","name":"owner","nameLocation":"3942:5:6","nodeType":"VariableDeclaration","scope":417,"src":"3934:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":398,"name":"address","nodeType":"ElementaryTypeName","src":"3934:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":401,"mutability":"mutable","name":"sender","nameLocation":"3965:6:6","nodeType":"VariableDeclaration","scope":417,"src":"3957:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":400,"name":"address","nodeType":"ElementaryTypeName","src":"3957:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":403,"mutability":"mutable","name":"_hash","nameLocation":"3989:5:6","nodeType":"VariableDeclaration","scope":417,"src":"3981:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":402,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3981:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":405,"mutability":"mutable","name":"domainSeparator","nameLocation":"4012:15:6","nodeType":"VariableDeclaration","scope":417,"src":"4004:23:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":404,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4004:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":407,"mutability":"mutable","name":"ctx","nameLocation":"4045:3:6","nodeType":"VariableDeclaration","scope":417,"src":"4037:11:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":406,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4037:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":409,"mutability":"mutable","name":"staticInput","nameLocation":"4073:11:6","nodeType":"VariableDeclaration","scope":417,"src":"4058:26:6","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":408,"name":"bytes","nodeType":"ElementaryTypeName","src":"4058:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":411,"mutability":"mutable","name":"offchainInput","nameLocation":"4109:13:6","nodeType":"VariableDeclaration","scope":417,"src":"4094:28:6","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":410,"name":"bytes","nodeType":"ElementaryTypeName","src":"4094:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":414,"mutability":"mutable","name":"order","nameLocation":"4151:5:6","nodeType":"VariableDeclaration","scope":417,"src":"4132:24:6","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_calldata_ptr","typeString":"struct GPv2Order"},"typeName":{"id":413,"nodeType":"UserDefinedTypeName","pathNode":{"id":412,"name":"GPv2Order","nameLocations":["4132:9:6"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"4132:9:6"},"referencedDeclaration":357,"src":"4132:9:6","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"3924:238:6"},"returnParameters":{"id":416,"nodeType":"ParameterList","parameters":[],"src":"4176:0:6"},"scope":418,"src":"3909:268:6","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":419,"src":"679:3500:6","usedErrors":[372,377,384,391,396],"usedEvents":[]}],"src":"36:4144:6"},"id":6},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol","exportedSymbols":{"GPv2Order":[357],"ICowConditionalOrder":[418],"ICowConditionalOrderGenerator":[454],"IERC165":[12706]},"id":455,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":420,"literals":["solidity",">=","0.8",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"36:31:7"},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"@openzeppelin/contracts/utils/introspection/IERC165.sol","id":422,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":455,"sourceUnit":12707,"src":"69:82:7","symbolAliases":[{"foreign":{"id":421,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12706,"src":"78:7:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","file":"./ICowConditionalOrder.sol","id":425,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":455,"sourceUnit":419,"src":"153:77:7","symbolAliases":[{"foreign":{"id":423,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"162:20:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":424,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":357,"src":"184:9:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":427,"name":"IERC165","nameLocations":["369:7:7"],"nodeType":"IdentifierPath","referencedDeclaration":12706,"src":"369:7:7"},"id":428,"nodeType":"InheritanceSpecifier","src":"369:7:7"}],"canonicalName":"ICowConditionalOrderGenerator","contractDependencies":[],"contractKind":"interface","documentation":{"id":426,"nodeType":"StructuredDocumentation","src":"232:93:7","text":" @notice Conditional Order Generator Interface\n @author mfw78 "},"fullyImplemented":false,"id":454,"linearizedBaseContracts":[454,12706],"name":"ICowConditionalOrderGenerator","nameLocation":"336:29:7","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":429,"nodeType":"StructuredDocumentation","src":"383:187:7","text":" @dev Emitted when a new conditional order is created.\n @param owner The address that created the conditional order\n @param params The conditional order data"},"eventSelector":"2cceac5555b0ca45a3744ced542f54b56ad2eb45e521962372eef212a2cbf361","id":436,"name":"ConditionalOrderCreated","nameLocation":"581:23:7","nodeType":"EventDefinition","parameters":{"id":435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":431,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"621:5:7","nodeType":"VariableDeclaration","scope":436,"src":"605:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":430,"name":"address","nodeType":"ElementaryTypeName","src":"605:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":434,"indexed":false,"mutability":"mutable","name":"params","nameLocation":"672:6:7","nodeType":"VariableDeclaration","scope":436,"src":"628:50:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_memory_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"},"typeName":{"id":433,"nodeType":"UserDefinedTypeName","pathNode":{"id":432,"name":"ICowConditionalOrder.ConditionalOrderParams","nameLocations":["628:20:7","649:22:7"],"nodeType":"IdentifierPath","referencedDeclaration":367,"src":"628:43:7"},"referencedDeclaration":367,"src":"628:43:7","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_storage_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"}},"visibility":"internal"}],"src":"604:75:7"},"src":"575:105:7"},{"documentation":{"id":437,"nodeType":"StructuredDocumentation","src":"686:721:7","text":" @notice Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\n @dev **MUST** revert if the order conditions are not met.\n @param owner The owner of the order (usually a contract)\n @param sender The `msg.sender` of the parent `isValidSignature` call\n @param ctx The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\n @param staticInput Conditional order type-specific data known at time of creation for all discrete orders\n @param offchainInput Off-chain input (similar to Balancer `userData`); currently unused\n @return order Tradeable order for submission to the CoW Protocol API"},"functionSelector":"b8296fc4","id":453,"implemented":false,"kind":"function","modifiers":[],"name":"getTradeableOrder","nameLocation":"1421:17:7","nodeType":"FunctionDefinition","parameters":{"id":448,"nodeType":"ParameterList","parameters":[{"constant":false,"id":439,"mutability":"mutable","name":"owner","nameLocation":"1456:5:7","nodeType":"VariableDeclaration","scope":453,"src":"1448:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":438,"name":"address","nodeType":"ElementaryTypeName","src":"1448:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":441,"mutability":"mutable","name":"sender","nameLocation":"1479:6:7","nodeType":"VariableDeclaration","scope":453,"src":"1471:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":440,"name":"address","nodeType":"ElementaryTypeName","src":"1471:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":443,"mutability":"mutable","name":"ctx","nameLocation":"1503:3:7","nodeType":"VariableDeclaration","scope":453,"src":"1495:11:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":442,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1495:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":445,"mutability":"mutable","name":"staticInput","nameLocation":"1531:11:7","nodeType":"VariableDeclaration","scope":453,"src":"1516:26:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":444,"name":"bytes","nodeType":"ElementaryTypeName","src":"1516:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":447,"mutability":"mutable","name":"offchainInput","nameLocation":"1567:13:7","nodeType":"VariableDeclaration","scope":453,"src":"1552:28:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":446,"name":"bytes","nodeType":"ElementaryTypeName","src":"1552:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1438:148:7"},"returnParameters":{"id":452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":451,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":453,"src":"1610:16:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":450,"nodeType":"UserDefinedTypeName","pathNode":{"id":449,"name":"GPv2Order","nameLocations":["1610:9:7"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"1610:9:7"},"referencedDeclaration":357,"src":"1610:9:7","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"1609:18:7"},"scope":454,"src":"1412:216:7","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":455,"src":"326:1304:7","usedErrors":[],"usedEvents":[436]}],"src":"36:1595:7"},"id":7},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol","exportedSymbols":{"GPv2Order":[357],"ICowConditionalOrder":[418],"ICowConditionalOrderGenerator":[454],"ICowSwapFeeBurner":[566],"IERC1271":[9586],"IERC20":[10576],"IProtocolFeeBurner":[948]},"id":567,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":456,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:8"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1271.sol","file":"@openzeppelin/contracts/interfaces/IERC1271.sol","id":458,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":567,"sourceUnit":9587,"src":"72:75:8","symbolAliases":[{"foreign":{"id":457,"name":"IERC1271","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9586,"src":"81:8:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":460,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":567,"sourceUnit":10577,"src":"148:72:8","symbolAliases":[{"foreign":{"id":459,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"157:6:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol","file":"./ICowConditionalOrderGenerator.sol","id":462,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":567,"sourceUnit":455,"src":"222:84:8","symbolAliases":[{"foreign":{"id":461,"name":"ICowConditionalOrderGenerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":454,"src":"231:29:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","file":"./ICowConditionalOrder.sol","id":465,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":567,"sourceUnit":419,"src":"307:77:8","symbolAliases":[{"foreign":{"id":463,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"316:20:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":464,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":357,"src":"338:9:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"./IProtocolFeeBurner.sol","id":467,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":567,"sourceUnit":949,"src":"385:62:8","symbolAliases":[{"foreign":{"id":466,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"394:18:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":468,"name":"IERC1271","nameLocations":["480:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":9586,"src":"480:8:8"},"id":469,"nodeType":"InheritanceSpecifier","src":"480:8:8"},{"baseName":{"id":470,"name":"IProtocolFeeBurner","nameLocations":["490:18:8"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"490:18:8"},"id":471,"nodeType":"InheritanceSpecifier","src":"490:18:8"},{"baseName":{"id":472,"name":"ICowConditionalOrder","nameLocations":["510:20:8"],"nodeType":"IdentifierPath","referencedDeclaration":418,"src":"510:20:8"},"id":473,"nodeType":"InheritanceSpecifier","src":"510:20:8"},{"baseName":{"id":474,"name":"ICowConditionalOrderGenerator","nameLocations":["532:29:8"],"nodeType":"IdentifierPath","referencedDeclaration":454,"src":"532:29:8"},"id":475,"nodeType":"InheritanceSpecifier","src":"532:29:8"}],"canonicalName":"ICowSwapFeeBurner","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":566,"linearizedBaseContracts":[566,454,12706,418,948,9586],"name":"ICowSwapFeeBurner","nameLocation":"459:17:8","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ICowSwapFeeBurner.OrderStatus","id":480,"members":[{"id":476,"name":"Nonexistent","nameLocation":"595:11:8","nodeType":"EnumValue","src":"595:11:8"},{"id":477,"name":"Active","nameLocation":"616:6:8","nodeType":"EnumValue","src":"616:6:8"},{"id":478,"name":"Filled","nameLocation":"632:6:8","nodeType":"EnumValue","src":"632:6:8"},{"id":479,"name":"Failed","nameLocation":"648:6:8","nodeType":"EnumValue","src":"648:6:8"}],"name":"OrderStatus","nameLocation":"573:11:8","nodeType":"EnumDefinition","src":"568:92:8"},{"anonymous":false,"documentation":{"id":481,"nodeType":"StructuredDocumentation","src":"666:322:8","text":" @notice An order was retried after failing.\n @param tokenIn The token used to identify the order\n @param exactAmountIn The number of tokens in the order\n @param minAmountOut The minimum number of target tokens required\n @param deadline The deadline for the new order to be filled"},"eventSelector":"1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a","id":492,"name":"OrderRetried","nameLocation":"999:12:8","nodeType":"EventDefinition","parameters":{"id":491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":484,"indexed":false,"mutability":"mutable","name":"tokenIn","nameLocation":"1019:7:8","nodeType":"VariableDeclaration","scope":492,"src":"1012:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":483,"nodeType":"UserDefinedTypeName","pathNode":{"id":482,"name":"IERC20","nameLocations":["1012:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1012:6:8"},"referencedDeclaration":10576,"src":"1012:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":486,"indexed":false,"mutability":"mutable","name":"exactAmountIn","nameLocation":"1036:13:8","nodeType":"VariableDeclaration","scope":492,"src":"1028:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":485,"name":"uint256","nodeType":"ElementaryTypeName","src":"1028:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":488,"indexed":false,"mutability":"mutable","name":"minAmountOut","nameLocation":"1059:12:8","nodeType":"VariableDeclaration","scope":492,"src":"1051:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":487,"name":"uint256","nodeType":"ElementaryTypeName","src":"1051:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":490,"indexed":false,"mutability":"mutable","name":"deadline","nameLocation":"1081:8:8","nodeType":"VariableDeclaration","scope":492,"src":"1073:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":489,"name":"uint256","nodeType":"ElementaryTypeName","src":"1073:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1011:79:8"},"src":"993:98:8"},{"anonymous":false,"documentation":{"id":493,"nodeType":"StructuredDocumentation","src":"1097:268:8","text":" @notice An order was canceled after failure.\n @param tokenIn The token used to identify the order\n @param exactAmountIn The number of tokens in the order\n @param receiver The account that received the tokens from the unfilled order"},"eventSelector":"0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a","id":502,"name":"OrderCanceled","nameLocation":"1376:13:8","nodeType":"EventDefinition","parameters":{"id":501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":496,"indexed":false,"mutability":"mutable","name":"tokenIn","nameLocation":"1397:7:8","nodeType":"VariableDeclaration","scope":502,"src":"1390:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":495,"nodeType":"UserDefinedTypeName","pathNode":{"id":494,"name":"IERC20","nameLocations":["1390:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1390:6:8"},"referencedDeclaration":10576,"src":"1390:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":498,"indexed":false,"mutability":"mutable","name":"exactAmountIn","nameLocation":"1414:13:8","nodeType":"VariableDeclaration","scope":502,"src":"1406:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":497,"name":"uint256","nodeType":"ElementaryTypeName","src":"1406:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":500,"indexed":false,"mutability":"mutable","name":"receiver","nameLocation":"1437:8:8","nodeType":"VariableDeclaration","scope":502,"src":"1429:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":499,"name":"address","nodeType":"ElementaryTypeName","src":"1429:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1389:57:8"},"src":"1370:77:8"},{"documentation":{"id":503,"nodeType":"StructuredDocumentation","src":"1453:130:8","text":" @notice The order parameters were invalid.\n @param reason Text explaining the reason the order is invalid"},"errorSelector":"8d8a6110","id":507,"name":"InvalidOrderParameters","nameLocation":"1594:22:8","nodeType":"ErrorDefinition","parameters":{"id":506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":505,"mutability":"mutable","name":"reason","nameLocation":"1624:6:8","nodeType":"VariableDeclaration","scope":507,"src":"1617:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":504,"name":"string","nodeType":"ElementaryTypeName","src":"1617:6:8","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1616:15:8"},"src":"1588:44:8"},{"documentation":{"id":508,"nodeType":"StructuredDocumentation","src":"1638:237:8","text":" @notice Attempt to revert an order that had not failed.\n @dev `revertOrder` should only be called when the OrderStatus is `Failed`.\n @param actualStatus The status of the order when `revertOrder` was called"},"errorSelector":"d0c1b3cf","id":513,"name":"OrderHasUnexpectedStatus","nameLocation":"1886:24:8","nodeType":"ErrorDefinition","parameters":{"id":512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":511,"mutability":"mutable","name":"actualStatus","nameLocation":"1923:12:8","nodeType":"VariableDeclaration","scope":513,"src":"1911:24:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":510,"nodeType":"UserDefinedTypeName","pathNode":{"id":509,"name":"OrderStatus","nameLocations":["1911:11:8"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"1911:11:8"},"referencedDeclaration":480,"src":"1911:11:8","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"}],"src":"1910:26:8"},"src":"1880:57:8"},{"documentation":{"id":514,"nodeType":"StructuredDocumentation","src":"1943:91:8","text":"@notice Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow."},"errorSelector":"32798566","id":516,"name":"InterfaceIsSignatureVerifierMuxer","nameLocation":"2045:33:8","nodeType":"ErrorDefinition","parameters":{"id":515,"nodeType":"ParameterList","parameters":[],"src":"2078:2:8"},"src":"2039:42:8"},{"documentation":{"id":517,"nodeType":"StructuredDocumentation","src":"2087:178:8","text":" @notice Get the order at the sell token.\n @param tokenIn The token used to identify the order\n @return orderData The order data for the given token"},"functionSelector":"6eba2b13","id":526,"implemented":false,"kind":"function","modifiers":[],"name":"getOrder","nameLocation":"2279:8:8","nodeType":"FunctionDefinition","parameters":{"id":521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":520,"mutability":"mutable","name":"tokenIn","nameLocation":"2295:7:8","nodeType":"VariableDeclaration","scope":526,"src":"2288:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":519,"nodeType":"UserDefinedTypeName","pathNode":{"id":518,"name":"IERC20","nameLocations":["2288:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2288:6:8"},"referencedDeclaration":10576,"src":"2288:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2287:16:8"},"returnParameters":{"id":525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":524,"mutability":"mutable","name":"orderData","nameLocation":"2344:9:8","nodeType":"VariableDeclaration","scope":526,"src":"2327:26:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":523,"nodeType":"UserDefinedTypeName","pathNode":{"id":522,"name":"GPv2Order","nameLocations":["2327:9:8"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"2327:9:8"},"referencedDeclaration":357,"src":"2327:9:8","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"2326:28:8"},"scope":566,"src":"2270:85:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":527,"nodeType":"StructuredDocumentation","src":"2361:203:8","text":" @notice Get the status of the order at the sell token.\n @param tokenIn The token used to identify the order\n @return orderStatus The status of the order for the given token"},"functionSelector":"6f9d75cd","id":536,"implemented":false,"kind":"function","modifiers":[],"name":"getOrderStatus","nameLocation":"2578:14:8","nodeType":"FunctionDefinition","parameters":{"id":531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":530,"mutability":"mutable","name":"tokenIn","nameLocation":"2600:7:8","nodeType":"VariableDeclaration","scope":536,"src":"2593:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":529,"nodeType":"UserDefinedTypeName","pathNode":{"id":528,"name":"IERC20","nameLocations":["2593:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2593:6:8"},"referencedDeclaration":10576,"src":"2593:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2592:16:8"},"returnParameters":{"id":535,"nodeType":"ParameterList","parameters":[{"constant":false,"id":534,"mutability":"mutable","name":"orderStatus","nameLocation":"2644:11:8","nodeType":"VariableDeclaration","scope":536,"src":"2632:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":533,"nodeType":"UserDefinedTypeName","pathNode":{"id":532,"name":"OrderStatus","nameLocations":["2632:11:8"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"2632:11:8"},"referencedDeclaration":480,"src":"2632:11:8","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"}],"src":"2631:25:8"},"scope":566,"src":"2569:88:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":537,"nodeType":"StructuredDocumentation","src":"2663:291:8","text":" @notice Retry an order that has not been filled yet and expired.\n @param tokenIn The token used to identify the order\n @param minAmountOut The minimum number of target tokens to receive (tokenOut)\n @param deadline The deadline for the order to be filled."},"functionSelector":"d83b06a4","id":547,"implemented":false,"kind":"function","modifiers":[],"name":"retryOrder","nameLocation":"2968:10:8","nodeType":"FunctionDefinition","parameters":{"id":545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":540,"mutability":"mutable","name":"tokenIn","nameLocation":"2986:7:8","nodeType":"VariableDeclaration","scope":547,"src":"2979:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":539,"nodeType":"UserDefinedTypeName","pathNode":{"id":538,"name":"IERC20","nameLocations":["2979:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2979:6:8"},"referencedDeclaration":10576,"src":"2979:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":542,"mutability":"mutable","name":"minAmountOut","nameLocation":"3003:12:8","nodeType":"VariableDeclaration","scope":547,"src":"2995:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":541,"name":"uint256","nodeType":"ElementaryTypeName","src":"2995:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":544,"mutability":"mutable","name":"deadline","nameLocation":"3025:8:8","nodeType":"VariableDeclaration","scope":547,"src":"3017:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":543,"name":"uint256","nodeType":"ElementaryTypeName","src":"3017:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2978:56:8"},"returnParameters":{"id":546,"nodeType":"ParameterList","parameters":[],"src":"3043:0:8"},"scope":566,"src":"2959:85:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":548,"nodeType":"StructuredDocumentation","src":"3050:274:8","text":" @notice Return tokens from an order that has failed.\n @dev Canceling an order prevents it from being retried.\n @param tokenIn The token used to identify the order\n @param receiver The address to receive the tokens from the unfilled order"},"functionSelector":"60e092c6","id":556,"implemented":false,"kind":"function","modifiers":[],"name":"cancelOrder","nameLocation":"3338:11:8","nodeType":"FunctionDefinition","parameters":{"id":554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":551,"mutability":"mutable","name":"tokenIn","nameLocation":"3357:7:8","nodeType":"VariableDeclaration","scope":556,"src":"3350:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":550,"nodeType":"UserDefinedTypeName","pathNode":{"id":549,"name":"IERC20","nameLocations":["3350:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3350:6:8"},"referencedDeclaration":10576,"src":"3350:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":553,"mutability":"mutable","name":"receiver","nameLocation":"3374:8:8","nodeType":"VariableDeclaration","scope":556,"src":"3366:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":552,"name":"address","nodeType":"ElementaryTypeName","src":"3366:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3349:34:8"},"returnParameters":{"id":555,"nodeType":"ParameterList","parameters":[],"src":"3392:0:8"},"scope":566,"src":"3329:64:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":557,"nodeType":"StructuredDocumentation","src":"3399:282:8","text":" @notice Emergency return tokens from an order regardless of status.\n @dev Canceling an order prevents it from being retried.\n @param tokenIn The token used to identify the order\n @param receiver The address to receive the from the unfilled order"},"functionSelector":"68bce712","id":565,"implemented":false,"kind":"function","modifiers":[],"name":"emergencyCancelOrder","nameLocation":"3695:20:8","nodeType":"FunctionDefinition","parameters":{"id":563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":560,"mutability":"mutable","name":"tokenIn","nameLocation":"3723:7:8","nodeType":"VariableDeclaration","scope":565,"src":"3716:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":559,"nodeType":"UserDefinedTypeName","pathNode":{"id":558,"name":"IERC20","nameLocations":["3716:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3716:6:8"},"referencedDeclaration":10576,"src":"3716:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":562,"mutability":"mutable","name":"receiver","nameLocation":"3740:8:8","nodeType":"VariableDeclaration","scope":565,"src":"3732:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":561,"name":"address","nodeType":"ElementaryTypeName","src":"3732:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3715:34:8"},"returnParameters":{"id":564,"nodeType":"ParameterList","parameters":[],"src":"3758:0:8"},"scope":566,"src":"3686:73:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":567,"src":"449:3312:8","usedErrors":[372,377,384,391,396,507,513,516,924,927],"usedEvents":[436,492,502,914]}],"src":"46:3716:8"},"id":8},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol","exportedSymbols":{"IHyperEVMRateProvider":[587]},"id":588,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":568,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:9"},{"abstract":false,"baseContracts":[],"canonicalName":"IHyperEVMRateProvider","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":587,"linearizedBaseContracts":[587],"name":"IHyperEVMRateProvider","nameLocation":"82:21:9","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":569,"nodeType":"StructuredDocumentation","src":"110:159:9","text":" @notice The index of the token on the Hyperliquid public API.\n @return tokenIndex The index of the token on the Hyperliquid public API"},"functionSelector":"295d3ee8","id":574,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenIndex","nameLocation":"283:13:9","nodeType":"FunctionDefinition","parameters":{"id":570,"nodeType":"ParameterList","parameters":[],"src":"296:2:9"},"returnParameters":{"id":573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":572,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":574,"src":"322:6:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":571,"name":"uint32","nodeType":"ElementaryTypeName","src":"322:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"321:8:9"},"scope":587,"src":"274:56:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":575,"nodeType":"StructuredDocumentation","src":"336:319:9","text":" @notice The index of the pair to fetch the spot price, according to the Hyperliquid public API.\n @dev Hypercore has an index that identifies a pair of tokens to fetch the spot price.\n @return pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API"},"functionSelector":"81bfa5d1","id":580,"implemented":false,"kind":"function","modifiers":[],"name":"getPairIndex","nameLocation":"669:12:9","nodeType":"FunctionDefinition","parameters":{"id":576,"nodeType":"ParameterList","parameters":[],"src":"681:2:9"},"returnParameters":{"id":579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":578,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":580,"src":"707:6:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":577,"name":"uint32","nodeType":"ElementaryTypeName","src":"707:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"706:8:9"},"scope":587,"src":"660:55:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":581,"nodeType":"StructuredDocumentation","src":"721:346:9","text":" @notice The spot price multiplier.\n @dev Hypercore returns the spot price with a different number of decimals for each token. So, to make this rate\n provider compatible with the vault, we need to scale the spot price to 18 decimals using this multiplier.\n @return spotPriceMultiplier The spot price multiplier"},"functionSelector":"a747d56f","id":586,"implemented":false,"kind":"function","modifiers":[],"name":"getSpotPriceMultiplier","nameLocation":"1081:22:9","nodeType":"FunctionDefinition","parameters":{"id":582,"nodeType":"ParameterList","parameters":[],"src":"1103:2:9"},"returnParameters":{"id":585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":584,"mutability":"mutable","name":"spotPriceMultiplier","nameLocation":"1137:19:9","nodeType":"VariableDeclaration","scope":586,"src":"1129:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":583,"name":"uint256","nodeType":"ElementaryTypeName","src":"1129:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1128:29:9"},"scope":587,"src":"1072:86:9","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":588,"src":"72:1088:9","usedErrors":[],"usedEvents":[]}],"src":"46:1115:9"},"id":9},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol","exportedSymbols":{"IHyperEVMRateProvider":[587],"IHyperEVMRateProviderFactory":[664]},"id":665,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":589,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:10"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol","file":"./IHyperEVMRateProvider.sol","id":591,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":665,"sourceUnit":588,"src":"72:68:10","symbolAliases":[{"foreign":{"id":590,"name":"IHyperEVMRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":587,"src":"81:21:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IHyperEVMRateProviderFactory","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":664,"linearizedBaseContracts":[664],"name":"IHyperEVMRateProviderFactory","nameLocation":"152:28:10","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":592,"nodeType":"StructuredDocumentation","src":"187:331:10","text":" @notice A new HyperEVM Rate Provider was created.\n @param tokenIndex The index of the base asset on the Hyperliquid public API\n @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n @param rateProvider The address of the deployed rate provider"},"eventSelector":"d2dc19a986df7300887ed27436ca60160b58dcbcc7a657427d35cbf60154ba02","id":600,"name":"RateProviderCreated","nameLocation":"529:19:10","nodeType":"EventDefinition","parameters":{"id":599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":594,"indexed":true,"mutability":"mutable","name":"tokenIndex","nameLocation":"565:10:10","nodeType":"VariableDeclaration","scope":600,"src":"549:26:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":593,"name":"uint256","nodeType":"ElementaryTypeName","src":"549:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":596,"indexed":true,"mutability":"mutable","name":"pairIndex","nameLocation":"593:9:10","nodeType":"VariableDeclaration","scope":600,"src":"577:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":595,"name":"uint256","nodeType":"ElementaryTypeName","src":"577:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":598,"indexed":true,"mutability":"mutable","name":"rateProvider","nameLocation":"620:12:10","nodeType":"VariableDeclaration","scope":600,"src":"604:28:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":597,"name":"address","nodeType":"ElementaryTypeName","src":"604:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"548:85:10"},"src":"523:111:10"},{"anonymous":false,"documentation":{"id":601,"nodeType":"StructuredDocumentation","src":"640:49:10","text":"@notice Emitted when the factory is disabled."},"eventSelector":"1e8641758c70961d246979e3c073388b65a37bad9cc604ec5511e7200e7d144b","id":603,"name":"RateProviderFactoryDisabled","nameLocation":"700:27:10","nodeType":"EventDefinition","parameters":{"id":602,"nodeType":"ParameterList","parameters":[],"src":"727:2:10"},"src":"694:36:10"},{"documentation":{"id":604,"nodeType":"StructuredDocumentation","src":"736:350:10","text":" @notice A rate provider already exists for the given token and pair.\n @param tokenIndex The index of the base asset on the Hyperliquid public API\n @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n @param rateProvider The address of the deployed rate provider"},"errorSelector":"f4c64ee1","id":612,"name":"RateProviderAlreadyExists","nameLocation":"1097:25:10","nodeType":"ErrorDefinition","parameters":{"id":611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":606,"mutability":"mutable","name":"tokenIndex","nameLocation":"1130:10:10","nodeType":"VariableDeclaration","scope":612,"src":"1123:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":605,"name":"uint32","nodeType":"ElementaryTypeName","src":"1123:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":608,"mutability":"mutable","name":"pairIndex","nameLocation":"1149:9:10","nodeType":"VariableDeclaration","scope":612,"src":"1142:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":607,"name":"uint32","nodeType":"ElementaryTypeName","src":"1142:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":610,"mutability":"mutable","name":"rateProvider","nameLocation":"1168:12:10","nodeType":"VariableDeclaration","scope":612,"src":"1160:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":609,"name":"address","nodeType":"ElementaryTypeName","src":"1160:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1122:59:10"},"src":"1091:91:10"},{"documentation":{"id":613,"nodeType":"StructuredDocumentation","src":"1188:282:10","text":" @notice The rate provider was not found for the given token and pair.\n @param tokenIndex The index of the base asset on the Hyperliquid public API\n @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API"},"errorSelector":"dc120e77","id":619,"name":"RateProviderNotFound","nameLocation":"1481:20:10","nodeType":"ErrorDefinition","parameters":{"id":618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":615,"mutability":"mutable","name":"tokenIndex","nameLocation":"1509:10:10","nodeType":"VariableDeclaration","scope":619,"src":"1502:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":614,"name":"uint32","nodeType":"ElementaryTypeName","src":"1502:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":617,"mutability":"mutable","name":"pairIndex","nameLocation":"1528:9:10","nodeType":"VariableDeclaration","scope":619,"src":"1521:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":616,"name":"uint32","nodeType":"ElementaryTypeName","src":"1521:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1501:37:10"},"src":"1475:64:10"},{"documentation":{"id":620,"nodeType":"StructuredDocumentation","src":"1545:36:10","text":"@notice The factory is disabled."},"errorSelector":"42fb89b8","id":622,"name":"RateProviderFactoryIsDisabled","nameLocation":"1592:29:10","nodeType":"ErrorDefinition","parameters":{"id":621,"nodeType":"ParameterList","parameters":[],"src":"1621:2:10"},"src":"1586:38:10"},{"documentation":{"id":623,"nodeType":"StructuredDocumentation","src":"1630:151:10","text":" @notice Returns a number representing the rate provider version.\n @return rateProviderVersion The rate provider version number"},"functionSelector":"381c7a4f","id":628,"implemented":false,"kind":"function","modifiers":[],"name":"getRateProviderVersion","nameLocation":"1795:22:10","nodeType":"FunctionDefinition","parameters":{"id":624,"nodeType":"ParameterList","parameters":[],"src":"1817:2:10"},"returnParameters":{"id":627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":626,"mutability":"mutable","name":"rateProviderVersion","nameLocation":"1851:19:10","nodeType":"VariableDeclaration","scope":628,"src":"1843:27:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":625,"name":"uint256","nodeType":"ElementaryTypeName","src":"1843:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1842:29:10"},"scope":664,"src":"1786:86:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":629,"nodeType":"StructuredDocumentation","src":"1878:357:10","text":" @notice Creates a new HyperEVM Rate Provider for the given token and pair.\n @param tokenIndex The index of the base asset on the Hyperliquid public API\n @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n @return rateProvider The address of the deployed rate provider"},"functionSelector":"568acb79","id":639,"implemented":false,"kind":"function","modifiers":[],"name":"create","nameLocation":"2249:6:10","nodeType":"FunctionDefinition","parameters":{"id":634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":631,"mutability":"mutable","name":"tokenIndex","nameLocation":"2263:10:10","nodeType":"VariableDeclaration","scope":639,"src":"2256:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":630,"name":"uint32","nodeType":"ElementaryTypeName","src":"2256:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":633,"mutability":"mutable","name":"pairIndex","nameLocation":"2282:9:10","nodeType":"VariableDeclaration","scope":639,"src":"2275:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":632,"name":"uint32","nodeType":"ElementaryTypeName","src":"2275:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2255:37:10"},"returnParameters":{"id":638,"nodeType":"ParameterList","parameters":[{"constant":false,"id":637,"mutability":"mutable","name":"rateProvider","nameLocation":"2333:12:10","nodeType":"VariableDeclaration","scope":639,"src":"2311:34:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"},"typeName":{"id":636,"nodeType":"UserDefinedTypeName","pathNode":{"id":635,"name":"IHyperEVMRateProvider","nameLocations":["2311:21:10"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"2311:21:10"},"referencedDeclaration":587,"src":"2311:21:10","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"visibility":"internal"}],"src":"2310:36:10"},"scope":664,"src":"2240:107:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":640,"nodeType":"StructuredDocumentation","src":"2353:448:10","text":" @notice Gets the rate provider for the given token and pair.\n @dev Reverts if the rate provider was not found for the given token and pair.\n @param tokenIndex The index of the base asset on the Hyperliquid public API\n @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n @return rateProvider The address of the rate provider for the given token and pair"},"functionSelector":"99b8113f","id":650,"implemented":false,"kind":"function","modifiers":[],"name":"getRateProvider","nameLocation":"2815:15:10","nodeType":"FunctionDefinition","parameters":{"id":645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":642,"mutability":"mutable","name":"tokenIndex","nameLocation":"2847:10:10","nodeType":"VariableDeclaration","scope":650,"src":"2840:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":641,"name":"uint32","nodeType":"ElementaryTypeName","src":"2840:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":644,"mutability":"mutable","name":"pairIndex","nameLocation":"2874:9:10","nodeType":"VariableDeclaration","scope":650,"src":"2867:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":643,"name":"uint32","nodeType":"ElementaryTypeName","src":"2867:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2830:59:10"},"returnParameters":{"id":649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":648,"mutability":"mutable","name":"rateProvider","nameLocation":"2935:12:10","nodeType":"VariableDeclaration","scope":650,"src":"2913:34:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"},"typeName":{"id":647,"nodeType":"UserDefinedTypeName","pathNode":{"id":646,"name":"IHyperEVMRateProvider","nameLocations":["2913:21:10"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"2913:21:10"},"referencedDeclaration":587,"src":"2913:21:10","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"visibility":"internal"}],"src":"2912:36:10"},"scope":664,"src":"2806:143:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":651,"nodeType":"StructuredDocumentation","src":"2955:242:10","text":" @notice Checks whether the given rate provider was created by this factory.\n @param rateProvider The rate provider to check\n @return success True if the rate provider was created by this factory; false otherwise"},"functionSelector":"19912f71","id":659,"implemented":false,"kind":"function","modifiers":[],"name":"isRateProviderFromFactory","nameLocation":"3211:25:10","nodeType":"FunctionDefinition","parameters":{"id":655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":654,"mutability":"mutable","name":"rateProvider","nameLocation":"3259:12:10","nodeType":"VariableDeclaration","scope":659,"src":"3237:34:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"},"typeName":{"id":653,"nodeType":"UserDefinedTypeName","pathNode":{"id":652,"name":"IHyperEVMRateProvider","nameLocations":["3237:21:10"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"3237:21:10"},"referencedDeclaration":587,"src":"3237:21:10","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"visibility":"internal"}],"src":"3236:36:10"},"returnParameters":{"id":658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":657,"mutability":"mutable","name":"success","nameLocation":"3301:7:10","nodeType":"VariableDeclaration","scope":659,"src":"3296:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":656,"name":"bool","nodeType":"ElementaryTypeName","src":"3296:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3295:14:10"},"scope":664,"src":"3202:108:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":660,"nodeType":"StructuredDocumentation","src":"3316:264:10","text":" @notice Disables the rate provider factory.\n @dev A disabled rate provider factory cannot create new rate providers and cannot be re-enabled. However,\n already created rate providers are still usable. This is a permissioned function."},"functionSelector":"2f2770db","id":663,"implemented":false,"kind":"function","modifiers":[],"name":"disable","nameLocation":"3594:7:10","nodeType":"FunctionDefinition","parameters":{"id":661,"nodeType":"ParameterList","parameters":[],"src":"3601:2:10"},"returnParameters":{"id":662,"nodeType":"ParameterList","parameters":[],"src":"3612:0:10"},"scope":664,"src":"3585:28:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":665,"src":"142:3473:10","usedErrors":[612,619,622],"usedEvents":[600,603]}],"src":"46:3570:10"},"id":10},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol","exportedSymbols":{"IPoolHelperCommon":[865]},"id":866,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":666,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:11"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolHelperCommon","contractDependencies":[],"contractKind":"interface","documentation":{"id":667,"nodeType":"StructuredDocumentation","src":"72:85:11","text":"@notice Common interface for helper functions that operate on a subset of pools."},"fullyImplemented":false,"id":865,"linearizedBaseContracts":[865],"name":"IPoolHelperCommon","nameLocation":"167:17:11","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":668,"nodeType":"StructuredDocumentation","src":"191:306:11","text":" @notice The owner created a new pool set.\n @dev Pools are organized into separate sets, controlled by a manager, which can be changed independently.\n @param poolSetId Id of the set with which the pool is associated\n @param initialManager Address of the pool set manager"},"eventSelector":"dc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be2","id":674,"name":"PoolSetCreated","nameLocation":"508:14:11","nodeType":"EventDefinition","parameters":{"id":673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":670,"indexed":true,"mutability":"mutable","name":"poolSetId","nameLocation":"539:9:11","nodeType":"VariableDeclaration","scope":674,"src":"523:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":669,"name":"uint256","nodeType":"ElementaryTypeName","src":"523:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":672,"indexed":true,"mutability":"mutable","name":"initialManager","nameLocation":"566:14:11","nodeType":"VariableDeclaration","scope":674,"src":"550:30:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":671,"name":"address","nodeType":"ElementaryTypeName","src":"550:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"522:59:11"},"src":"502:80:11"},{"anonymous":false,"documentation":{"id":675,"nodeType":"StructuredDocumentation","src":"588:190:11","text":" @notice The owner destroyed a pool set.\n @param poolSetId Id of the set with which the pool is associated\n @param manager The address of the set's last manager"},"eventSelector":"79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c0","id":681,"name":"PoolSetDestroyed","nameLocation":"789:16:11","nodeType":"EventDefinition","parameters":{"id":680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":677,"indexed":true,"mutability":"mutable","name":"poolSetId","nameLocation":"822:9:11","nodeType":"VariableDeclaration","scope":681,"src":"806:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":676,"name":"uint256","nodeType":"ElementaryTypeName","src":"806:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":679,"indexed":true,"mutability":"mutable","name":"manager","nameLocation":"849:7:11","nodeType":"VariableDeclaration","scope":681,"src":"833:23:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":678,"name":"address","nodeType":"ElementaryTypeName","src":"833:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"805:52:11"},"src":"783:75:11"},{"anonymous":false,"documentation":{"id":682,"nodeType":"StructuredDocumentation","src":"864:193:11","text":" @notice The owner added a pool to the given set.\n @param pool Address of the pool that was added\n @param poolSetId Id of the set with which the pool is associated"},"eventSelector":"5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b69","id":688,"name":"PoolAddedToSet","nameLocation":"1068:14:11","nodeType":"EventDefinition","parameters":{"id":687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":684,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1099:4:11","nodeType":"VariableDeclaration","scope":688,"src":"1083:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":683,"name":"address","nodeType":"ElementaryTypeName","src":"1083:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":686,"indexed":true,"mutability":"mutable","name":"poolSetId","nameLocation":"1121:9:11","nodeType":"VariableDeclaration","scope":688,"src":"1105:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":685,"name":"uint256","nodeType":"ElementaryTypeName","src":"1105:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1082:49:11"},"src":"1062:70:11"},{"anonymous":false,"documentation":{"id":689,"nodeType":"StructuredDocumentation","src":"1138:199:11","text":" @notice The owner removed a pool from the given set.\n @param poolSetId Id of the set with which the pool is associated\n @param pool Address of the pool that was removed"},"eventSelector":"e632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e","id":695,"name":"PoolRemovedFromSet","nameLocation":"1348:18:11","nodeType":"EventDefinition","parameters":{"id":694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":691,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1383:4:11","nodeType":"VariableDeclaration","scope":695,"src":"1367:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":690,"name":"address","nodeType":"ElementaryTypeName","src":"1367:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":693,"indexed":true,"mutability":"mutable","name":"poolSetId","nameLocation":"1405:9:11","nodeType":"VariableDeclaration","scope":695,"src":"1389:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":692,"name":"uint256","nodeType":"ElementaryTypeName","src":"1389:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1366:49:11"},"src":"1342:74:11"},{"anonymous":false,"documentation":{"id":696,"nodeType":"StructuredDocumentation","src":"1422:391:11","text":" @notice The current manager of a pool set transferred ownership to a new address.\n @dev Managers can only control one pool set. Transfers to existing managers of other sets will revert.\n @param poolSetId Id of the set with which the pool is associated\n @param oldManager Address of the previous manager\n @param newManager Address of the new manager"},"eventSelector":"8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d797205","id":704,"name":"PoolSetOwnershipTransferred","nameLocation":"1824:27:11","nodeType":"EventDefinition","parameters":{"id":703,"nodeType":"ParameterList","parameters":[{"constant":false,"id":698,"indexed":true,"mutability":"mutable","name":"poolSetId","nameLocation":"1877:9:11","nodeType":"VariableDeclaration","scope":704,"src":"1861:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":697,"name":"uint256","nodeType":"ElementaryTypeName","src":"1861:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":700,"indexed":true,"mutability":"mutable","name":"oldManager","nameLocation":"1912:10:11","nodeType":"VariableDeclaration","scope":704,"src":"1896:26:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":699,"name":"address","nodeType":"ElementaryTypeName","src":"1896:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":702,"indexed":true,"mutability":"mutable","name":"newManager","nameLocation":"1948:10:11","nodeType":"VariableDeclaration","scope":704,"src":"1932:26:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":701,"name":"address","nodeType":"ElementaryTypeName","src":"1932:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1851:113:11"},"src":"1818:147:11"},{"documentation":{"id":705,"nodeType":"StructuredDocumentation","src":"1971:190:11","text":" @notice Cannot add a pool that is already there.\n @param pool Address of the pool being added\n @param poolSetId Id of the set with which the pool is associated"},"errorSelector":"5a17aa8d","id":711,"name":"PoolAlreadyInSet","nameLocation":"2172:16:11","nodeType":"ErrorDefinition","parameters":{"id":710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":707,"mutability":"mutable","name":"pool","nameLocation":"2197:4:11","nodeType":"VariableDeclaration","scope":711,"src":"2189:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":706,"name":"address","nodeType":"ElementaryTypeName","src":"2189:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":709,"mutability":"mutable","name":"poolSetId","nameLocation":"2211:9:11","nodeType":"VariableDeclaration","scope":711,"src":"2203:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":708,"name":"uint256","nodeType":"ElementaryTypeName","src":"2203:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2188:33:11"},"src":"2166:56:11"},{"documentation":{"id":712,"nodeType":"StructuredDocumentation","src":"2228:192:11","text":" @notice Cannot remove a pool that was not added.\n @param pool Address of the pool being removed\n @param poolSetId Id of the set with which the pool is associated"},"errorSelector":"80145d72","id":718,"name":"PoolNotInSet","nameLocation":"2431:12:11","nodeType":"ErrorDefinition","parameters":{"id":717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":714,"mutability":"mutable","name":"pool","nameLocation":"2452:4:11","nodeType":"VariableDeclaration","scope":718,"src":"2444:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":713,"name":"address","nodeType":"ElementaryTypeName","src":"2444:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":716,"mutability":"mutable","name":"poolSetId","nameLocation":"2466:9:11","nodeType":"VariableDeclaration","scope":718,"src":"2458:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":715,"name":"uint256","nodeType":"ElementaryTypeName","src":"2458:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2443:33:11"},"src":"2425:52:11"},{"documentation":{"id":719,"nodeType":"StructuredDocumentation","src":"2483:223:11","text":" @notice Pool set id associated with an operation is invalid.\n @dev This can mean the value is invalid, or it was never created, or it was destroyed.\n @param poolSetId The id of the invalid set"},"errorSelector":"98592ddb","id":723,"name":"InvalidPoolSetId","nameLocation":"2717:16:11","nodeType":"ErrorDefinition","parameters":{"id":722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":721,"mutability":"mutable","name":"poolSetId","nameLocation":"2742:9:11","nodeType":"VariableDeclaration","scope":723,"src":"2734:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":720,"name":"uint256","nodeType":"ElementaryTypeName","src":"2734:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2733:19:11"},"src":"2711:42:11"},{"documentation":{"id":724,"nodeType":"StructuredDocumentation","src":"2759:61:11","text":"@notice The initial manager of a pool set cannot be zero."},"errorSelector":"2de5256e","id":726,"name":"InvalidPoolSetManager","nameLocation":"2831:21:11","nodeType":"ErrorDefinition","parameters":{"id":725,"nodeType":"ParameterList","parameters":[],"src":"2852:2:11"},"src":"2825:30:11"},{"documentation":{"id":727,"nodeType":"StructuredDocumentation","src":"2861:294:11","text":" @notice Pool set managers can only manage a single pool set.\n @dev Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\n @param poolSetManager Address of the manager that is already assigned to another pool set id"},"errorSelector":"2c35aa96","id":731,"name":"PoolSetManagerNotUnique","nameLocation":"3166:23:11","nodeType":"ErrorDefinition","parameters":{"id":730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":729,"mutability":"mutable","name":"poolSetManager","nameLocation":"3198:14:11","nodeType":"VariableDeclaration","scope":731,"src":"3190:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":728,"name":"address","nodeType":"ElementaryTypeName","src":"3190:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3189:24:11"},"src":"3160:54:11"},{"documentation":{"id":732,"nodeType":"StructuredDocumentation","src":"3220:91:11","text":"@notice Permissioned operations on pools can only be performed by the pool set manager."},"errorSelector":"bcc08f74","id":734,"name":"SenderIsNotPoolSetManager","nameLocation":"3322:25:11","nodeType":"ErrorDefinition","parameters":{"id":733,"nodeType":"ParameterList","parameters":[],"src":"3347:2:11"},"src":"3316:34:11"},{"documentation":{"id":735,"nodeType":"StructuredDocumentation","src":"3356:140:11","text":" @notice An index is beyond the current bounds of the set.\n @param poolSetId Id of the set involved in the operation"},"errorSelector":"44945fcc","id":739,"name":"IndexOutOfBounds","nameLocation":"3507:16:11","nodeType":"ErrorDefinition","parameters":{"id":738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":737,"mutability":"mutable","name":"poolSetId","nameLocation":"3532:9:11","nodeType":"VariableDeclaration","scope":739,"src":"3524:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":736,"name":"uint256","nodeType":"ElementaryTypeName","src":"3524:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3523:19:11"},"src":"3501:42:11"},{"documentation":{"id":740,"nodeType":"StructuredDocumentation","src":"3762:673:11","text":" @notice Create a new set with an initial manager, optionally initialized with a set of pools.\n @dev The `newPools` list can be empty, in which case this will only create the set. Pools can then be\n added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function.\n Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the\n initial manager address is zero or already a manager of another pool set.\n @param initialManager Address of the account authorized to perform operations on the set\n @param newPools Set of pools to add to the set"},"functionSelector":"3e035f9b","id":750,"implemented":false,"kind":"function","modifiers":[],"name":"createPoolSet","nameLocation":"4449:13:11","nodeType":"FunctionDefinition","parameters":{"id":746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":742,"mutability":"mutable","name":"initialManager","nameLocation":"4471:14:11","nodeType":"VariableDeclaration","scope":750,"src":"4463:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":741,"name":"address","nodeType":"ElementaryTypeName","src":"4463:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":745,"mutability":"mutable","name":"newPools","nameLocation":"4504:8:11","nodeType":"VariableDeclaration","scope":750,"src":"4487:25:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":743,"name":"address","nodeType":"ElementaryTypeName","src":"4487:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":744,"nodeType":"ArrayTypeName","src":"4487:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4462:51:11"},"returnParameters":{"id":749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":748,"mutability":"mutable","name":"poolSetId","nameLocation":"4540:9:11","nodeType":"VariableDeclaration","scope":750,"src":"4532:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":747,"name":"uint256","nodeType":"ElementaryTypeName","src":"4532:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4531:19:11"},"scope":865,"src":"4440:111:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":751,"nodeType":"StructuredDocumentation","src":"4557:355:11","text":" @notice Create a new empty set with an initial manager.\n @dev Convenience function to create a pool set with no initial pools. Also reverts if the initial manager\n address is zero or already a manager of another pool set.\n @param initialManager Address of the account authorized to perform operations on the set"},"functionSelector":"e909c19b","id":758,"implemented":false,"kind":"function","modifiers":[],"name":"createPoolSet","nameLocation":"4926:13:11","nodeType":"FunctionDefinition","parameters":{"id":754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":753,"mutability":"mutable","name":"initialManager","nameLocation":"4948:14:11","nodeType":"VariableDeclaration","scope":758,"src":"4940:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":752,"name":"address","nodeType":"ElementaryTypeName","src":"4940:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4939:24:11"},"returnParameters":{"id":757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":756,"mutability":"mutable","name":"poolSetId","nameLocation":"4990:9:11","nodeType":"VariableDeclaration","scope":758,"src":"4982:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":755,"name":"uint256","nodeType":"ElementaryTypeName","src":"4982:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4981:19:11"},"scope":865,"src":"4917:84:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":759,"nodeType":"StructuredDocumentation","src":"5007:431:11","text":" @notice Simple way to remove an entire set of pools from control of the helper function.\n @dev This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis)\n may destroy sets, effectively removing control of any pools in the set from the associated manager.\n Also reverts if the poolSetId is not valid.\n @param poolSetId Id of the set being destroyed"},"functionSelector":"7c1ec460","id":764,"implemented":false,"kind":"function","modifiers":[],"name":"destroyPoolSet","nameLocation":"5452:14:11","nodeType":"FunctionDefinition","parameters":{"id":762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":761,"mutability":"mutable","name":"poolSetId","nameLocation":"5475:9:11","nodeType":"VariableDeclaration","scope":764,"src":"5467:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":760,"name":"uint256","nodeType":"ElementaryTypeName","src":"5467:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5466:19:11"},"returnParameters":{"id":763,"nodeType":"ParameterList","parameters":[],"src":"5494:0:11"},"scope":865,"src":"5443:52:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":765,"nodeType":"StructuredDocumentation","src":"5501:712:11","text":" @notice Transfer ownership of a pool set from the current manager to a new manager.\n @dev This is a permissioned function. Only the current manager of a set can call this to set a new manager.\n Since managers can only control a single set, there is no need to specify the id in the call. Note that this\n is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this\n contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts\n if the new manager address is zero or already the manager of a pool set.\n @param newManager The address of the new manager"},"functionSelector":"3700f987","id":770,"implemented":false,"kind":"function","modifiers":[],"name":"transferPoolSetOwnership","nameLocation":"6227:24:11","nodeType":"FunctionDefinition","parameters":{"id":768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":767,"mutability":"mutable","name":"newManager","nameLocation":"6260:10:11","nodeType":"VariableDeclaration","scope":770,"src":"6252:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":766,"name":"address","nodeType":"ElementaryTypeName","src":"6252:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6251:20:11"},"returnParameters":{"id":769,"nodeType":"ParameterList","parameters":[],"src":"6280:0:11"},"scope":865,"src":"6218:63:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":771,"nodeType":"StructuredDocumentation","src":"6498:391:11","text":" @notice Add pools to the set of pools controlled by this helper contract.\n @dev This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis)\n may add pools to a set. Also reverts if the poolSetId is not valid.\n @param newPools List of pools to add\n @param poolSetId Id of the set to which the new pools belong"},"functionSelector":"ebf3a8d0","id":779,"implemented":false,"kind":"function","modifiers":[],"name":"addPoolsToSet","nameLocation":"6903:13:11","nodeType":"FunctionDefinition","parameters":{"id":777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":773,"mutability":"mutable","name":"poolSetId","nameLocation":"6925:9:11","nodeType":"VariableDeclaration","scope":779,"src":"6917:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":772,"name":"uint256","nodeType":"ElementaryTypeName","src":"6917:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":776,"mutability":"mutable","name":"newPools","nameLocation":"6953:8:11","nodeType":"VariableDeclaration","scope":779,"src":"6936:25:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":774,"name":"address","nodeType":"ElementaryTypeName","src":"6936:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":775,"nodeType":"ArrayTypeName","src":"6936:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"6916:46:11"},"returnParameters":{"id":778,"nodeType":"ParameterList","parameters":[],"src":"6971:0:11"},"scope":865,"src":"6894:78:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":780,"nodeType":"StructuredDocumentation","src":"6978:410:11","text":" @notice Remove pools from the set of pools controlled by this helper contract.\n @dev This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis)\n may remove pools from a set. Also reverts if the poolSetId is not valid.\n @param pools List of pools to remove from the set\n @param poolSetId Id of the set to which the pools belong"},"functionSelector":"2da55a1d","id":788,"implemented":false,"kind":"function","modifiers":[],"name":"removePoolsFromSet","nameLocation":"7402:18:11","nodeType":"FunctionDefinition","parameters":{"id":786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":782,"mutability":"mutable","name":"poolSetId","nameLocation":"7429:9:11","nodeType":"VariableDeclaration","scope":788,"src":"7421:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":781,"name":"uint256","nodeType":"ElementaryTypeName","src":"7421:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":785,"mutability":"mutable","name":"pools","nameLocation":"7457:5:11","nodeType":"VariableDeclaration","scope":788,"src":"7440:22:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":783,"name":"address","nodeType":"ElementaryTypeName","src":"7440:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":784,"nodeType":"ArrayTypeName","src":"7440:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"7420:43:11"},"returnParameters":{"id":787,"nodeType":"ParameterList","parameters":[],"src":"7472:0:11"},"scope":865,"src":"7393:80:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":789,"nodeType":"StructuredDocumentation","src":"7718:172:11","text":" @notice Get the pool set id associated with the caller.\n @return poolSetId The numeric pool set id, or zero if the caller is not a pool set manager"},"functionSelector":"ce998aba","id":794,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolSetIdForCaller","nameLocation":"7904:21:11","nodeType":"FunctionDefinition","parameters":{"id":790,"nodeType":"ParameterList","parameters":[],"src":"7925:2:11"},"returnParameters":{"id":793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":792,"mutability":"mutable","name":"poolSetId","nameLocation":"7959:9:11","nodeType":"VariableDeclaration","scope":794,"src":"7951:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":791,"name":"uint256","nodeType":"ElementaryTypeName","src":"7951:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7950:19:11"},"scope":865,"src":"7895:75:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":795,"nodeType":"StructuredDocumentation","src":"7976:192:11","text":" @notice Get the pool set id associated with a given manager address.\n @return poolSetId The numeric pool set id, or zero if the address given is not a pool set manager"},"functionSelector":"25c427ed","id":802,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolSetIdForManager","nameLocation":"8182:22:11","nodeType":"FunctionDefinition","parameters":{"id":798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":797,"mutability":"mutable","name":"manager","nameLocation":"8213:7:11","nodeType":"VariableDeclaration","scope":802,"src":"8205:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":796,"name":"address","nodeType":"ElementaryTypeName","src":"8205:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8204:17:11"},"returnParameters":{"id":801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":800,"mutability":"mutable","name":"poolSetId","nameLocation":"8253:9:11","nodeType":"VariableDeclaration","scope":802,"src":"8245:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":799,"name":"uint256","nodeType":"ElementaryTypeName","src":"8245:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8244:19:11"},"scope":865,"src":"8173:91:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":803,"nodeType":"StructuredDocumentation","src":"8270:363:11","text":" @notice Get the number of pools associated with the given set.\n @dev Needed to support pagination in case the set is too large to process in a single transaction.\n Reverts if the poolSetId is not valid.\n @param poolSetId Id of the set containing the pools\n @return poolCount The current number of pools in the set"},"functionSelector":"62d53462","id":810,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCountForSet","nameLocation":"8647:18:11","nodeType":"FunctionDefinition","parameters":{"id":806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":805,"mutability":"mutable","name":"poolSetId","nameLocation":"8674:9:11","nodeType":"VariableDeclaration","scope":810,"src":"8666:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":804,"name":"uint256","nodeType":"ElementaryTypeName","src":"8666:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8665:19:11"},"returnParameters":{"id":809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":808,"mutability":"mutable","name":"poolCount","nameLocation":"8716:9:11","nodeType":"VariableDeclaration","scope":810,"src":"8708:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":807,"name":"uint256","nodeType":"ElementaryTypeName","src":"8708:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8707:19:11"},"scope":865,"src":"8638:89:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":811,"nodeType":"StructuredDocumentation","src":"8733:181:11","text":" @notice Check whether a poolSetId has been created.\n @param poolSetId Id of the set containing the pools\n @return isValid True if the poolSetId exists"},"functionSelector":"255dae41","id":818,"implemented":false,"kind":"function","modifiers":[],"name":"isValidPoolSetId","nameLocation":"8928:16:11","nodeType":"FunctionDefinition","parameters":{"id":814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":813,"mutability":"mutable","name":"poolSetId","nameLocation":"8953:9:11","nodeType":"VariableDeclaration","scope":818,"src":"8945:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":812,"name":"uint256","nodeType":"ElementaryTypeName","src":"8945:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8944:19:11"},"returnParameters":{"id":817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":816,"mutability":"mutable","name":"isValid","nameLocation":"8992:7:11","nodeType":"VariableDeclaration","scope":818,"src":"8987:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":815,"name":"bool","nodeType":"ElementaryTypeName","src":"8987:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8986:14:11"},"scope":865,"src":"8919:82:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":819,"nodeType":"StructuredDocumentation","src":"9007:308:11","text":" @notice Check whether a pool is in the set of pools.\n @dev Reverts if the poolSetId is not valid.\n @param pool Address of the pool to check\n @param poolSetId Id of the set containing the pools\n @return poolInSet True if the pool is in the given set, false otherwise"},"functionSelector":"182551da","id":828,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInSet","nameLocation":"9329:11:11","nodeType":"FunctionDefinition","parameters":{"id":824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":821,"mutability":"mutable","name":"pool","nameLocation":"9349:4:11","nodeType":"VariableDeclaration","scope":828,"src":"9341:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":820,"name":"address","nodeType":"ElementaryTypeName","src":"9341:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":823,"mutability":"mutable","name":"poolSetId","nameLocation":"9363:9:11","nodeType":"VariableDeclaration","scope":828,"src":"9355:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":822,"name":"uint256","nodeType":"ElementaryTypeName","src":"9355:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9340:33:11"},"returnParameters":{"id":827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":826,"mutability":"mutable","name":"poolInSet","nameLocation":"9402:9:11","nodeType":"VariableDeclaration","scope":828,"src":"9397:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":825,"name":"bool","nodeType":"ElementaryTypeName","src":"9397:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9396:16:11"},"scope":865,"src":"9320:93:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":829,"nodeType":"StructuredDocumentation","src":"9419:215:11","text":" @notice Get the full set of pools from a given set.\n @dev Reverts if the poolSetId is not valid.\n @param poolSetId Id of the set containing the pools\n @return pools List of pools"},"functionSelector":"94fc4058","id":837,"implemented":false,"kind":"function","modifiers":[],"name":"getAllPoolsInSet","nameLocation":"9648:16:11","nodeType":"FunctionDefinition","parameters":{"id":832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":831,"mutability":"mutable","name":"poolSetId","nameLocation":"9673:9:11","nodeType":"VariableDeclaration","scope":837,"src":"9665:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":830,"name":"uint256","nodeType":"ElementaryTypeName","src":"9665:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9664:19:11"},"returnParameters":{"id":836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":835,"mutability":"mutable","name":"pools","nameLocation":"9724:5:11","nodeType":"VariableDeclaration","scope":837,"src":"9707:22:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":833,"name":"address","nodeType":"ElementaryTypeName","src":"9707:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":834,"nodeType":"ArrayTypeName","src":"9707:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"9706:24:11"},"scope":865,"src":"9639:92:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":838,"nodeType":"StructuredDocumentation","src":"9737:369:11","text":" @notice Get a range of pools from a given set.\n @dev Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`).\n Reverts if the poolSetId is not valid.\n @param poolSetId Id of the set containing the pools\n @param from Start index\n @param to End index\n @return pools List of pools"},"functionSelector":"8c60ebd0","id":850,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolsInSet","nameLocation":"10120:13:11","nodeType":"FunctionDefinition","parameters":{"id":845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":840,"mutability":"mutable","name":"poolSetId","nameLocation":"10142:9:11","nodeType":"VariableDeclaration","scope":850,"src":"10134:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":839,"name":"uint256","nodeType":"ElementaryTypeName","src":"10134:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":842,"mutability":"mutable","name":"from","nameLocation":"10161:4:11","nodeType":"VariableDeclaration","scope":850,"src":"10153:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":841,"name":"uint256","nodeType":"ElementaryTypeName","src":"10153:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":844,"mutability":"mutable","name":"to","nameLocation":"10175:2:11","nodeType":"VariableDeclaration","scope":850,"src":"10167:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":843,"name":"uint256","nodeType":"ElementaryTypeName","src":"10167:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10133:45:11"},"returnParameters":{"id":849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":848,"mutability":"mutable","name":"pools","nameLocation":"10219:5:11","nodeType":"VariableDeclaration","scope":850,"src":"10202:22:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":846,"name":"address","nodeType":"ElementaryTypeName","src":"10202:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":847,"nodeType":"ArrayTypeName","src":"10202:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"10201:24:11"},"scope":865,"src":"10111:115:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":851,"nodeType":"StructuredDocumentation","src":"10232:175:11","text":" @notice Utility function to predict the next pool set id.\n @return nextPoolSetId The pool set id that will be used on the next call of `createPoolSet`"},"functionSelector":"c482e822","id":856,"implemented":false,"kind":"function","modifiers":[],"name":"getNextPoolSetId","nameLocation":"10421:16:11","nodeType":"FunctionDefinition","parameters":{"id":852,"nodeType":"ParameterList","parameters":[],"src":"10437:2:11"},"returnParameters":{"id":855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":854,"mutability":"mutable","name":"nextPoolSetId","nameLocation":"10471:13:11","nodeType":"VariableDeclaration","scope":856,"src":"10463:21:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":853,"name":"uint256","nodeType":"ElementaryTypeName","src":"10463:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10462:23:11"},"scope":865,"src":"10412:74:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":857,"nodeType":"StructuredDocumentation","src":"10492:257:11","text":" @notice Get the manager address associated with a given poolSetId.\n @param poolSetId Id of the set containing the pools\n @return manager The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned"},"functionSelector":"f167a1e6","id":864,"implemented":false,"kind":"function","modifiers":[],"name":"getManagerForPoolSet","nameLocation":"10763:20:11","nodeType":"FunctionDefinition","parameters":{"id":860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":859,"mutability":"mutable","name":"poolSetId","nameLocation":"10792:9:11","nodeType":"VariableDeclaration","scope":864,"src":"10784:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":858,"name":"uint256","nodeType":"ElementaryTypeName","src":"10784:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10783:19:11"},"returnParameters":{"id":863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":862,"mutability":"mutable","name":"manager","nameLocation":"10834:7:11","nodeType":"VariableDeclaration","scope":864,"src":"10826:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":861,"name":"address","nodeType":"ElementaryTypeName","src":"10826:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10825:17:11"},"scope":865,"src":"10754:89:11","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":866,"src":"157:10688:11","usedErrors":[711,718,723,726,731,734,739],"usedEvents":[674,681,688,695,704]}],"src":"46:10800:11"},"id":11},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol","exportedSymbols":{"IPoolPauseHelper":[876]},"id":877,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":867,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:12"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolPauseHelper","contractDependencies":[],"contractKind":"interface","documentation":{"id":868,"nodeType":"StructuredDocumentation","src":"72:482:12","text":" @notice Maintain a set of pools that can be paused from this helper contract, vs. directly from the Vault.\n @dev Governance can add a set of pools to this contract, then grant pause permission to accounts here, which\n allows greater granularity than setting the permission directly on the Vault.\n Note that governance must grant this contract permission to pause pools from the Vault. Unpausing is not\n addressed here, and must still be done through the Vault."},"fullyImplemented":false,"id":876,"linearizedBaseContracts":[876],"name":"IPoolPauseHelper","nameLocation":"565:16:12","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":869,"nodeType":"StructuredDocumentation","src":"588:702:12","text":" @notice Pause a set of pools.\n @dev This is a permissioned function. Governance must first grant this contract permission to call `pausePool`\n on the Vault, then grant another account permission to call `pausePools` here. Note that this is not necessarily\n the same account that can add or remove pools from the pausable list.\n Note that there is no `unpause`. This is a helper contract designed to react quickly to emergencies. Unpausing\n is a more deliberate action that should be performed by accounts approved by governance for this purpose, or by\n the individual pools' pause managers.\n @param pools List of pools to pause"},"functionSelector":"a20dc529","id":875,"implemented":false,"kind":"function","modifiers":[],"name":"pausePools","nameLocation":"1304:10:12","nodeType":"FunctionDefinition","parameters":{"id":873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":872,"mutability":"mutable","name":"pools","nameLocation":"1332:5:12","nodeType":"VariableDeclaration","scope":875,"src":"1315:22:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":870,"name":"address","nodeType":"ElementaryTypeName","src":"1315:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":871,"nodeType":"ArrayTypeName","src":"1315:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1314:24:12"},"returnParameters":{"id":874,"nodeType":"ParameterList","parameters":[],"src":"1347:0:12"},"scope":876,"src":"1295:53:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":877,"src":"555:795:12","usedErrors":[],"usedEvents":[]}],"src":"46:1305:12"},"id":12},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol","exportedSymbols":{"IPoolSwapFeeHelper":[893]},"id":894,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":878,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:13"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolSwapFeeHelper","contractDependencies":[],"contractKind":"interface","documentation":{"id":879,"nodeType":"StructuredDocumentation","src":"72:541:13","text":" @notice Maintain a set of pools whose static swap fee percentages can be changed from here, vs. from the Vault.\n @dev Governance can add a set of pools to this contract, then grant swap fee setting permission to accounts on this\n contract, which allows greater granularity than setting the permission directly on the Vault.\n Note that governance must grant this contract permission to set swap fees from the Vault, and only pools that\n allow governance to set fees can be added (i.e., they must not have swap managers)."},"fullyImplemented":false,"id":893,"linearizedBaseContracts":[893],"name":"IPoolSwapFeeHelper","nameLocation":"624:18:13","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":880,"nodeType":"StructuredDocumentation","src":"649:380:13","text":" @notice Cannot add a pool that has a swap manager.\n @dev The swap manager is an exclusive role. If it is set to a non-zero value during pool registration,\n only the swap manager can change the fee. This helper can only set fees on pools that allow governance\n to grant this permission.\n @param pool Address of the pool being added"},"errorSelector":"f043494a","id":884,"name":"PoolHasSwapManager","nameLocation":"1040:18:13","nodeType":"ErrorDefinition","parameters":{"id":883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":882,"mutability":"mutable","name":"pool","nameLocation":"1067:4:13","nodeType":"VariableDeclaration","scope":884,"src":"1059:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":881,"name":"address","nodeType":"ElementaryTypeName","src":"1059:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1058:14:13"},"src":"1034:39:13"},{"documentation":{"id":885,"nodeType":"StructuredDocumentation","src":"1291:500:13","text":" @notice Set the static swap fee percentage on a given pool.\n @dev This is a permissioned function. Governance must grant this contract permission to call\n `setStaticSwapFeePercentage` on the Vault. Note that since the swap manager is an exclusive role, the swap fee\n cannot be changed by governance if it is set, and the pool cannot be added to the set.\n @param pool The address of the pool\n @param swapFeePercentage The new swap fee percentage"},"functionSelector":"d15126ba","id":892,"implemented":false,"kind":"function","modifiers":[],"name":"setStaticSwapFeePercentage","nameLocation":"1805:26:13","nodeType":"FunctionDefinition","parameters":{"id":890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":887,"mutability":"mutable","name":"pool","nameLocation":"1840:4:13","nodeType":"VariableDeclaration","scope":892,"src":"1832:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":886,"name":"address","nodeType":"ElementaryTypeName","src":"1832:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":889,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1854:17:13","nodeType":"VariableDeclaration","scope":892,"src":"1846:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":888,"name":"uint256","nodeType":"ElementaryTypeName","src":"1846:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1831:41:13"},"returnParameters":{"id":891,"nodeType":"ParameterList","parameters":[],"src":"1881:0:13"},"scope":893,"src":"1796:86:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":894,"src":"614:1270:13","usedErrors":[884],"usedEvents":[]}],"src":"46:1839:13"},"id":13},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","exportedSymbols":{"IERC20":[10576],"IProtocolFeeBurner":[948]},"id":949,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":895,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:14"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":897,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":949,"sourceUnit":10577,"src":"72:72:14","symbolAliases":[{"foreign":{"id":896,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeBurner","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":948,"linearizedBaseContracts":[948],"name":"IProtocolFeeBurner","nameLocation":"156:18:14","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":898,"nodeType":"StructuredDocumentation","src":"181:576:14","text":" @notice A protocol fee token has been \"burned\" (i.e., swapped for the desired target token).\n @param pool The pool on which the fee was collected (used for event tracking)\n @param feeToken The token in which the fee was originally collected\n @param exactFeeTokenAmountIn The number of feeTokens collected\n @param targetToken The preferred token for fee collection (e.g., USDC)\n @param actualTargetTokenAmountOut The number of target tokens actually received\n @param recipient The address where the target tokens were sent"},"eventSelector":"77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d","id":914,"name":"ProtocolFeeBurned","nameLocation":"768:17:14","nodeType":"EventDefinition","parameters":{"id":913,"nodeType":"ParameterList","parameters":[{"constant":false,"id":900,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"811:4:14","nodeType":"VariableDeclaration","scope":914,"src":"795:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":899,"name":"address","nodeType":"ElementaryTypeName","src":"795:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":903,"indexed":true,"mutability":"mutable","name":"feeToken","nameLocation":"840:8:14","nodeType":"VariableDeclaration","scope":914,"src":"825:23:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":902,"nodeType":"UserDefinedTypeName","pathNode":{"id":901,"name":"IERC20","nameLocations":["825:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"825:6:14"},"referencedDeclaration":10576,"src":"825:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":905,"indexed":false,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"866:21:14","nodeType":"VariableDeclaration","scope":914,"src":"858:29:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":904,"name":"uint256","nodeType":"ElementaryTypeName","src":"858:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":908,"indexed":true,"mutability":"mutable","name":"targetToken","nameLocation":"912:11:14","nodeType":"VariableDeclaration","scope":914,"src":"897:26:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":907,"nodeType":"UserDefinedTypeName","pathNode":{"id":906,"name":"IERC20","nameLocations":["897:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"897:6:14"},"referencedDeclaration":10576,"src":"897:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":910,"indexed":false,"mutability":"mutable","name":"actualTargetTokenAmountOut","nameLocation":"941:26:14","nodeType":"VariableDeclaration","scope":914,"src":"933:34:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":909,"name":"uint256","nodeType":"ElementaryTypeName","src":"933:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":912,"indexed":false,"mutability":"mutable","name":"recipient","nameLocation":"985:9:14","nodeType":"VariableDeclaration","scope":914,"src":"977:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":911,"name":"address","nodeType":"ElementaryTypeName","src":"977:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"785:215:14"},"src":"762:239:14"},{"documentation":{"id":915,"nodeType":"StructuredDocumentation","src":"1007:269:14","text":" @notice The actual amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"2f785e46","id":924,"name":"AmountOutBelowMin","nameLocation":"1287:17:14","nodeType":"ErrorDefinition","parameters":{"id":923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":918,"mutability":"mutable","name":"tokenOut","nameLocation":"1312:8:14","nodeType":"VariableDeclaration","scope":924,"src":"1305:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":917,"nodeType":"UserDefinedTypeName","pathNode":{"id":916,"name":"IERC20","nameLocations":["1305:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1305:6:14"},"referencedDeclaration":10576,"src":"1305:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":920,"mutability":"mutable","name":"amountOut","nameLocation":"1330:9:14","nodeType":"VariableDeclaration","scope":924,"src":"1322:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":919,"name":"uint256","nodeType":"ElementaryTypeName","src":"1322:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":922,"mutability":"mutable","name":"minAmountOut","nameLocation":"1349:12:14","nodeType":"VariableDeclaration","scope":924,"src":"1341:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":921,"name":"uint256","nodeType":"ElementaryTypeName","src":"1341:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1304:58:14"},"src":"1281:82:14"},{"documentation":{"id":925,"nodeType":"StructuredDocumentation","src":"1369:91:14","text":"@notice The swap transaction was not validated before the specified deadline timestamp."},"errorSelector":"e08b8af0","id":927,"name":"SwapDeadline","nameLocation":"1471:12:14","nodeType":"ErrorDefinition","parameters":{"id":926,"nodeType":"ParameterList","parameters":[],"src":"1483:2:14"},"src":"1465:21:14"},{"documentation":{"id":928,"nodeType":"StructuredDocumentation","src":"1492:750:14","text":" @notice Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\n @dev Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\n @param pool The pool the fees came from (only used for documentation in the event)\n @param feeToken The token collected from the pool\n @param exactFeeTokenAmountIn The number of fee tokens collected\n @param targetToken The desired target token (token out of the swap)\n @param minTargetTokenAmountOut The minimum amount out for the swap\n @param recipient The recipient of the swap proceeds\n @param deadline Deadline for the burn operation (i.e., swap), after which it will revert"},"functionSelector":"de557a32","id":947,"implemented":false,"kind":"function","modifiers":[],"name":"burn","nameLocation":"2256:4:14","nodeType":"FunctionDefinition","parameters":{"id":945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":930,"mutability":"mutable","name":"pool","nameLocation":"2278:4:14","nodeType":"VariableDeclaration","scope":947,"src":"2270:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":929,"name":"address","nodeType":"ElementaryTypeName","src":"2270:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":933,"mutability":"mutable","name":"feeToken","nameLocation":"2299:8:14","nodeType":"VariableDeclaration","scope":947,"src":"2292:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":932,"nodeType":"UserDefinedTypeName","pathNode":{"id":931,"name":"IERC20","nameLocations":["2292:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2292:6:14"},"referencedDeclaration":10576,"src":"2292:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":935,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"2325:21:14","nodeType":"VariableDeclaration","scope":947,"src":"2317:29:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":934,"name":"uint256","nodeType":"ElementaryTypeName","src":"2317:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":938,"mutability":"mutable","name":"targetToken","nameLocation":"2363:11:14","nodeType":"VariableDeclaration","scope":947,"src":"2356:18:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":937,"nodeType":"UserDefinedTypeName","pathNode":{"id":936,"name":"IERC20","nameLocations":["2356:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2356:6:14"},"referencedDeclaration":10576,"src":"2356:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":940,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"2392:23:14","nodeType":"VariableDeclaration","scope":947,"src":"2384:31:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":939,"name":"uint256","nodeType":"ElementaryTypeName","src":"2384:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":942,"mutability":"mutable","name":"recipient","nameLocation":"2433:9:14","nodeType":"VariableDeclaration","scope":947,"src":"2425:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":941,"name":"address","nodeType":"ElementaryTypeName","src":"2425:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":944,"mutability":"mutable","name":"deadline","nameLocation":"2460:8:14","nodeType":"VariableDeclaration","scope":947,"src":"2452:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":943,"name":"uint256","nodeType":"ElementaryTypeName","src":"2452:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2260:214:14"},"returnParameters":{"id":946,"nodeType":"ParameterList","parameters":[],"src":"2483:0:14"},"scope":948,"src":"2247:237:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":949,"src":"146:2340:14","usedErrors":[924,927],"usedEvents":[914]}],"src":"46:2441:14"},"id":14},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol","exportedSymbols":{"IProtocolFeeHelper":[968]},"id":969,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":950,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:15"},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeHelper","contractDependencies":[],"contractKind":"interface","documentation":{"id":951,"nodeType":"StructuredDocumentation","src":"72:489:15","text":" @notice Maintain a set of pools whose protocol fees can be set from this helper contract, vs. the fee controller.\n @dev Governance can add a set of pools to this contract, then grant permission to call protocol swap- or yield-\n setting functions here, which allows greater granularity than setting permissions directly on the fee controller.\n Note that governance must grant this contract permission to call the pool protocol fee setting functions on the\n controller."},"fullyImplemented":false,"id":968,"linearizedBaseContracts":[968],"name":"IProtocolFeeHelper","nameLocation":"572:18:15","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":952,"nodeType":"StructuredDocumentation","src":"809:381:15","text":" @notice Set the protocol swap fee for a pool.\n @dev This contract must be granted permission to set swap and yield protocol fees, but governance can\n independently grant permission to call the swap and yield fee setters.\n @param pool The address of the pool\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage"},"functionSelector":"fd267f39","id":959,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolSwapFeePercentage","nameLocation":"1204:28:15","nodeType":"FunctionDefinition","parameters":{"id":957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":954,"mutability":"mutable","name":"pool","nameLocation":"1241:4:15","nodeType":"VariableDeclaration","scope":959,"src":"1233:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":953,"name":"address","nodeType":"ElementaryTypeName","src":"1233:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":956,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"1255:28:15","nodeType":"VariableDeclaration","scope":959,"src":"1247:36:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":955,"name":"uint256","nodeType":"ElementaryTypeName","src":"1247:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1232:52:15"},"returnParameters":{"id":958,"nodeType":"ParameterList","parameters":[],"src":"1293:0:15"},"scope":968,"src":"1195:99:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":960,"nodeType":"StructuredDocumentation","src":"1300:384:15","text":" @notice Set the protocol yield fee for a pool.\n @dev This contract must be granted permission to set swap and yield protocol fees, but governance can\n independently grant permission to call the swap and yield fee setters.\n @param pool The address of the pool\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"abaa3356","id":967,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolYieldFeePercentage","nameLocation":"1698:29:15","nodeType":"FunctionDefinition","parameters":{"id":965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":962,"mutability":"mutable","name":"pool","nameLocation":"1736:4:15","nodeType":"VariableDeclaration","scope":967,"src":"1728:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":961,"name":"address","nodeType":"ElementaryTypeName","src":"1728:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":964,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"1750:29:15","nodeType":"VariableDeclaration","scope":967,"src":"1742:37:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":963,"name":"uint256","nodeType":"ElementaryTypeName","src":"1742:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1727:53:15"},"returnParameters":{"id":966,"nodeType":"ParameterList","parameters":[],"src":"1789:0:15"},"scope":968,"src":"1689:101:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":969,"src":"562:1230:15","usedErrors":[],"usedEvents":[]}],"src":"46:1747:15"},"id":15},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","exportedSymbols":{"IERC20":[10576],"IERC4626":[9846],"IProtocolFeeBurner":[948],"IProtocolFeeController":[1955],"IProtocolFeeSweeper":[1137]},"id":1138,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":970,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:16"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":972,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1138,"sourceUnit":10577,"src":"72:72:16","symbolAliases":[{"foreign":{"id":971,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":974,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1138,"sourceUnit":9847,"src":"145:75:16","symbolAliases":[{"foreign":{"id":973,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"154:8:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"../vault/IProtocolFeeController.sol","id":976,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1138,"sourceUnit":1956,"src":"222:77:16","symbolAliases":[{"foreign":{"id":975,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"231:22:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"./IProtocolFeeBurner.sol","id":978,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1138,"sourceUnit":949,"src":"300:62:16","symbolAliases":[{"foreign":{"id":977,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"309:18:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeSweeper","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":1137,"linearizedBaseContracts":[1137],"name":"IProtocolFeeSweeper","nameLocation":"374:19:16","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":979,"nodeType":"StructuredDocumentation","src":"400:143:16","text":" @notice Emitted when the target token is set or updated.\n @param token The preferred token for receiving protocol fees"},"eventSelector":"873950c2ac59c570001b99d815ffb260542df229d07132922e2e6f9941fd3da6","id":984,"name":"TargetTokenSet","nameLocation":"554:14:16","nodeType":"EventDefinition","parameters":{"id":983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":982,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"584:5:16","nodeType":"VariableDeclaration","scope":984,"src":"569:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":981,"nodeType":"UserDefinedTypeName","pathNode":{"id":980,"name":"IERC20","nameLocations":["569:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"569:6:16"},"referencedDeclaration":10576,"src":"569:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"568:22:16"},"src":"548:43:16"},{"anonymous":false,"documentation":{"id":985,"nodeType":"StructuredDocumentation","src":"597:160:16","text":" @notice Emitted when the fee recipient address is set or updated.\n @param feeRecipient The final destination of collected protocol fees"},"eventSelector":"bf9a9534339a9d6b81696e05dcfb614b7dc518a31d48be3cfb757988381fb323","id":989,"name":"FeeRecipientSet","nameLocation":"768:15:16","nodeType":"EventDefinition","parameters":{"id":988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":987,"indexed":true,"mutability":"mutable","name":"feeRecipient","nameLocation":"800:12:16","nodeType":"VariableDeclaration","scope":989,"src":"784:28:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":986,"name":"address","nodeType":"ElementaryTypeName","src":"784:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"783:30:16"},"src":"762:52:16"},{"anonymous":false,"documentation":{"id":990,"nodeType":"StructuredDocumentation","src":"820:501:16","text":" @notice Emitted when a fee token is transferred directly, vs. calling the burner.\n @dev This can happen if no target token or burner contract was specified, or the fee token is the target token.\n @param pool The pool on which the fee was collected\n @param feeToken The token the fee was collected in (also the target token in this case; no swap necessary)\n @param feeTokenAmount The number of feeTokens\n @param recipient The recipient of the fee tokens"},"eventSelector":"d6b9382ec1786c32610e376e8ee8f2f16abeda4ace3b6276ac958193c75bbbc8","id":1001,"name":"ProtocolFeeSwept","nameLocation":"1332:16:16","nodeType":"EventDefinition","parameters":{"id":1000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":992,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1365:4:16","nodeType":"VariableDeclaration","scope":1001,"src":"1349:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":991,"name":"address","nodeType":"ElementaryTypeName","src":"1349:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":995,"indexed":true,"mutability":"mutable","name":"feeToken","nameLocation":"1386:8:16","nodeType":"VariableDeclaration","scope":1001,"src":"1371:23:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":994,"nodeType":"UserDefinedTypeName","pathNode":{"id":993,"name":"IERC20","nameLocations":["1371:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1371:6:16"},"referencedDeclaration":10576,"src":"1371:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":997,"indexed":false,"mutability":"mutable","name":"feeTokenAmount","nameLocation":"1404:14:16","nodeType":"VariableDeclaration","scope":1001,"src":"1396:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":996,"name":"uint256","nodeType":"ElementaryTypeName","src":"1396:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":999,"indexed":false,"mutability":"mutable","name":"recipient","nameLocation":"1428:9:16","nodeType":"VariableDeclaration","scope":1001,"src":"1420:17:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":998,"name":"address","nodeType":"ElementaryTypeName","src":"1420:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1348:90:16"},"src":"1326:113:16"},{"anonymous":false,"documentation":{"id":1002,"nodeType":"StructuredDocumentation","src":"1445:294:16","text":" @notice Emitted when a burner is added to the protocol fee burner allowlist.\n @dev `sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\n @param protocolFeeBurner The address of the approved protocol fee burner that was added"},"eventSelector":"0ef09fc346b7c2cae78d9a37ed785840e7d3c6072022cd8c41c3b37a239b7fd1","id":1006,"name":"ProtocolFeeBurnerAdded","nameLocation":"1750:22:16","nodeType":"EventDefinition","parameters":{"id":1005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1004,"indexed":true,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"1789:17:16","nodeType":"VariableDeclaration","scope":1006,"src":"1773:33:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1003,"name":"address","nodeType":"ElementaryTypeName","src":"1773:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1772:35:16"},"src":"1744:64:16"},{"anonymous":false,"documentation":{"id":1007,"nodeType":"StructuredDocumentation","src":"1814:300:16","text":" @notice Emitted when a burner is removed from the protocol fee burner allowlist.\n @dev `sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\n @param protocolFeeBurner The address of the approved protocol fee burner that was removed"},"eventSelector":"0ed3ea501d1a23f23a7dc56c2d33e1e5a6a97694c707ef67b1e0159f239746bf","id":1011,"name":"ProtocolFeeBurnerRemoved","nameLocation":"2125:24:16","nodeType":"EventDefinition","parameters":{"id":1010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1009,"indexed":true,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"2166:17:16","nodeType":"VariableDeclaration","scope":1011,"src":"2150:33:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1008,"name":"address","nodeType":"ElementaryTypeName","src":"2150:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2149:35:16"},"src":"2119:66:16"},{"documentation":{"id":1012,"nodeType":"StructuredDocumentation","src":"2191:41:16","text":"@notice The fee recipient is invalid."},"errorSelector":"768dc598","id":1014,"name":"InvalidFeeRecipient","nameLocation":"2243:19:16","nodeType":"ErrorDefinition","parameters":{"id":1013,"nodeType":"ParameterList","parameters":[],"src":"2262:2:16"},"src":"2237:28:16"},{"documentation":{"id":1015,"nodeType":"StructuredDocumentation","src":"2271:40:16","text":"@notice The target token is invalid."},"errorSelector":"8562eb45","id":1017,"name":"InvalidTargetToken","nameLocation":"2322:18:16","nodeType":"ErrorDefinition","parameters":{"id":1016,"nodeType":"ParameterList","parameters":[],"src":"2340:2:16"},"src":"2316:27:16"},{"documentation":{"id":1018,"nodeType":"StructuredDocumentation","src":"2349:59:16","text":"@notice The protocol fee burner to be added is invalid."},"errorSelector":"31ec2736","id":1020,"name":"InvalidProtocolFeeBurner","nameLocation":"2419:24:16","nodeType":"ErrorDefinition","parameters":{"id":1019,"nodeType":"ParameterList","parameters":[],"src":"2443:2:16"},"src":"2413:33:16"},{"documentation":{"id":1021,"nodeType":"StructuredDocumentation","src":"2452:148:16","text":" @notice The specified fee burner has not been approved.\n @param protocolFeeBurner The address of the unsupported fee burner"},"errorSelector":"38553f6c","id":1025,"name":"UnsupportedProtocolFeeBurner","nameLocation":"2611:28:16","nodeType":"ErrorDefinition","parameters":{"id":1024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1023,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"2648:17:16","nodeType":"VariableDeclaration","scope":1025,"src":"2640:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1022,"name":"address","nodeType":"ElementaryTypeName","src":"2640:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2639:27:16"},"src":"2605:62:16"},{"documentation":{"id":1026,"nodeType":"StructuredDocumentation","src":"2673:167:16","text":" @notice Protocol fee burners can only be added to the allowlist once.\n @param protocolFeeBurner The address of an approved protocol fee burner"},"errorSelector":"6fe47af6","id":1030,"name":"ProtocolFeeBurnerAlreadyAdded","nameLocation":"2851:29:16","nodeType":"ErrorDefinition","parameters":{"id":1029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1028,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"2889:17:16","nodeType":"VariableDeclaration","scope":1030,"src":"2881:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1027,"name":"address","nodeType":"ElementaryTypeName","src":"2881:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2880:27:16"},"src":"2845:63:16"},{"documentation":{"id":1031,"nodeType":"StructuredDocumentation","src":"2914:202:16","text":" @notice Protocol fee burners must be added to the allowlist before being removed.\n @param protocolFeeBurner The address of a protocol fee burner to be removed from the allowlist"},"errorSelector":"bca5ab34","id":1035,"name":"ProtocolFeeBurnerNotAdded","nameLocation":"3127:25:16","nodeType":"ErrorDefinition","parameters":{"id":1034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1033,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"3161:17:16","nodeType":"VariableDeclaration","scope":1035,"src":"3153:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1032,"name":"address","nodeType":"ElementaryTypeName","src":"3153:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3152:27:16"},"src":"3121:59:16"},{"documentation":{"id":1036,"nodeType":"StructuredDocumentation","src":"3186:235:16","text":" @notice The burner did not consume its entire allowance.\n @dev The fee sweeper approves the burner to pull tokens. If it doesn't do so, revert to avoid a \"hanging\"\n approval that could be exploited later."},"errorSelector":"c5bc8d51","id":1038,"name":"BurnerDidNotConsumeAllowance","nameLocation":"3432:28:16","nodeType":"ErrorDefinition","parameters":{"id":1037,"nodeType":"ParameterList","parameters":[],"src":"3460:2:16"},"src":"3426:37:16"},{"documentation":{"id":1039,"nodeType":"StructuredDocumentation","src":"3469:56:16","text":"@notice Unwrapping is not allowed for the operation."},"errorSelector":"ca9e3a1e","id":1041,"name":"UnwrapIsNotAllowed","nameLocation":"3536:18:16","nodeType":"ErrorDefinition","parameters":{"id":1040,"nodeType":"ParameterList","parameters":[],"src":"3554:2:16"},"src":"3530:27:16"},{"documentation":{"id":1042,"nodeType":"StructuredDocumentation","src":"3563:1358:16","text":" @notice Withdraw, convert, and forward protocol fees for a given pool and token.\n @dev This will withdraw the fee token from the controller to this contract, and attempt to convert and forward\n the proceeds to the fee recipient. Note that this requires governance to grant this contract permission to call\n `withdrawProtocolFeesForToken` on the `ProtocolFeeController`.\n This is a permissioned call, since it involves a swap and a permissionless sweep could be triggered at times\n disadvantageous to the protocol (e.g., flash crashes). The general design is for an off-chain process to\n periodically collect fees from the Vault and check the protocol fee amounts available for withdrawal. Once\n these are greater than a threshold, compute the expected proceeds to determine the limits (amount and deadline),\n then call the sweeper to put in the order with the burner.\n @param pool The pool that incurred the fees we're withdrawing\n @param feeToken The fee token in the pool\n @param minTargetTokenAmountOut The minimum number of target tokens to be received\n @param deadline Deadline for the burn operation (swap), after which it will revert\n @param feeBurner The protocol fee burner to be used (or the zero address to fall back on direct transfer)"},"functionSelector":"b9746995","id":1057,"implemented":false,"kind":"function","modifiers":[],"name":"sweepProtocolFeesForToken","nameLocation":"4935:25:16","nodeType":"FunctionDefinition","parameters":{"id":1055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1044,"mutability":"mutable","name":"pool","nameLocation":"4978:4:16","nodeType":"VariableDeclaration","scope":1057,"src":"4970:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1043,"name":"address","nodeType":"ElementaryTypeName","src":"4970:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1047,"mutability":"mutable","name":"feeToken","nameLocation":"4999:8:16","nodeType":"VariableDeclaration","scope":1057,"src":"4992:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1046,"nodeType":"UserDefinedTypeName","pathNode":{"id":1045,"name":"IERC20","nameLocations":["4992:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4992:6:16"},"referencedDeclaration":10576,"src":"4992:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1049,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"5025:23:16","nodeType":"VariableDeclaration","scope":1057,"src":"5017:31:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1048,"name":"uint256","nodeType":"ElementaryTypeName","src":"5017:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1051,"mutability":"mutable","name":"deadline","nameLocation":"5066:8:16","nodeType":"VariableDeclaration","scope":1057,"src":"5058:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1050,"name":"uint256","nodeType":"ElementaryTypeName","src":"5058:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1054,"mutability":"mutable","name":"feeBurner","nameLocation":"5103:9:16","nodeType":"VariableDeclaration","scope":1057,"src":"5084:28:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":1053,"nodeType":"UserDefinedTypeName","pathNode":{"id":1052,"name":"IProtocolFeeBurner","nameLocations":["5084:18:16"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"5084:18:16"},"referencedDeclaration":948,"src":"5084:18:16","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"4960:158:16"},"returnParameters":{"id":1056,"nodeType":"ParameterList","parameters":[],"src":"5127:0:16"},"scope":1137,"src":"4926:202:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1058,"nodeType":"StructuredDocumentation","src":"5134:501:16","text":" @notice The same as `sweepProtocolFeesForToken`, but for wrapped tokens.\n @param pool The pool that incurred the fees we're withdrawing\n @param feeToken The fee token in the pool\n @param minTargetTokenAmountOut The minimum number of target tokens to be received\n @param deadline Deadline for the burn operation (swap), after which it will revert\n @param feeBurner The protocol fee burner to be used (or the zero address to fall back on direct transfer)"},"functionSelector":"88f6d2a4","id":1073,"implemented":false,"kind":"function","modifiers":[],"name":"sweepProtocolFeesForWrappedToken","nameLocation":"5649:32:16","nodeType":"FunctionDefinition","parameters":{"id":1071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1060,"mutability":"mutable","name":"pool","nameLocation":"5699:4:16","nodeType":"VariableDeclaration","scope":1073,"src":"5691:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1059,"name":"address","nodeType":"ElementaryTypeName","src":"5691:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1063,"mutability":"mutable","name":"feeToken","nameLocation":"5722:8:16","nodeType":"VariableDeclaration","scope":1073,"src":"5713:17:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":1062,"nodeType":"UserDefinedTypeName","pathNode":{"id":1061,"name":"IERC4626","nameLocations":["5713:8:16"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"5713:8:16"},"referencedDeclaration":9846,"src":"5713:8:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1065,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"5748:23:16","nodeType":"VariableDeclaration","scope":1073,"src":"5740:31:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1064,"name":"uint256","nodeType":"ElementaryTypeName","src":"5740:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1067,"mutability":"mutable","name":"deadline","nameLocation":"5789:8:16","nodeType":"VariableDeclaration","scope":1073,"src":"5781:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1066,"name":"uint256","nodeType":"ElementaryTypeName","src":"5781:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1070,"mutability":"mutable","name":"feeBurner","nameLocation":"5826:9:16","nodeType":"VariableDeclaration","scope":1073,"src":"5807:28:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":1069,"nodeType":"UserDefinedTypeName","pathNode":{"id":1068,"name":"IProtocolFeeBurner","nameLocations":["5807:18:16"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"5807:18:16"},"referencedDeclaration":948,"src":"5807:18:16","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"5681:160:16"},"returnParameters":{"id":1072,"nodeType":"ParameterList","parameters":[],"src":"5850:0:16"},"scope":1137,"src":"5640:211:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1074,"nodeType":"StructuredDocumentation","src":"5857:269:16","text":" @notice Return the address of the current `ProtocolFeeController` from the Vault.\n @dev It is not immutable in the Vault, so we need to fetch it every time.\n @return protocolFeeController The address of the current `ProtocolFeeController`"},"functionSelector":"85f2dbd4","id":1080,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"6140:24:16","nodeType":"FunctionDefinition","parameters":{"id":1075,"nodeType":"ParameterList","parameters":[],"src":"6164:2:16"},"returnParameters":{"id":1079,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1078,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1080,"src":"6190:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":1077,"nodeType":"UserDefinedTypeName","pathNode":{"id":1076,"name":"IProtocolFeeController","nameLocations":["6190:22:16"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"6190:22:16"},"referencedDeclaration":1955,"src":"6190:22:16","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"6189:24:16"},"scope":1137,"src":"6131:83:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1081,"nodeType":"StructuredDocumentation","src":"6220:214:16","text":" @notice Getter for the target token.\n @dev This is the token the burner will swap all fee tokens for. Can be changed by `setTargetToken`.\n @return targetToken The current target token"},"functionSelector":"80db0d51","id":1087,"implemented":false,"kind":"function","modifiers":[],"name":"getTargetToken","nameLocation":"6448:14:16","nodeType":"FunctionDefinition","parameters":{"id":1082,"nodeType":"ParameterList","parameters":[],"src":"6462:2:16"},"returnParameters":{"id":1086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1085,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1087,"src":"6488:6:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1084,"nodeType":"UserDefinedTypeName","pathNode":{"id":1083,"name":"IERC20","nameLocations":["6488:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6488:6:16"},"referencedDeclaration":10576,"src":"6488:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6487:8:16"},"scope":1137,"src":"6439:57:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1088,"nodeType":"StructuredDocumentation","src":"6502:167:16","text":" @notice Getter for the current fee recipient.\n @dev Can be changed by `setFeeRecipient`.\n @return feeRecipient The current fee recipient"},"functionSelector":"4ccb20c0","id":1093,"implemented":false,"kind":"function","modifiers":[],"name":"getFeeRecipient","nameLocation":"6683:15:16","nodeType":"FunctionDefinition","parameters":{"id":1089,"nodeType":"ParameterList","parameters":[],"src":"6698:2:16"},"returnParameters":{"id":1092,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1091,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1093,"src":"6724:7:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1090,"name":"address","nodeType":"ElementaryTypeName","src":"6724:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6723:9:16"},"scope":1137,"src":"6674:59:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1094,"nodeType":"StructuredDocumentation","src":"6739:263:16","text":" @notice Check whether a given address corresponds to an approved protocol fee burner.\n @param protocolFeeBurner The address to be checked\n @return isApproved True if the given address is on the approved protocol fee burner allowlist"},"functionSelector":"9c5cee9b","id":1101,"implemented":false,"kind":"function","modifiers":[],"name":"isApprovedProtocolFeeBurner","nameLocation":"7016:27:16","nodeType":"FunctionDefinition","parameters":{"id":1097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1096,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"7052:17:16","nodeType":"VariableDeclaration","scope":1101,"src":"7044:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1095,"name":"address","nodeType":"ElementaryTypeName","src":"7044:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7043:27:16"},"returnParameters":{"id":1100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1099,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1101,"src":"7094:4:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1098,"name":"bool","nodeType":"ElementaryTypeName","src":"7094:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7093:6:16"},"scope":1137,"src":"7007:93:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1102,"nodeType":"StructuredDocumentation","src":"7106:169:16","text":" @notice Update the fee recipient address.\n @dev This is a permissioned function.\n @param feeRecipient The address of the new fee recipient"},"functionSelector":"e74b981b","id":1107,"implemented":false,"kind":"function","modifiers":[],"name":"setFeeRecipient","nameLocation":"7289:15:16","nodeType":"FunctionDefinition","parameters":{"id":1105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1104,"mutability":"mutable","name":"feeRecipient","nameLocation":"7313:12:16","nodeType":"VariableDeclaration","scope":1107,"src":"7305:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1103,"name":"address","nodeType":"ElementaryTypeName","src":"7305:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7304:22:16"},"returnParameters":{"id":1106,"nodeType":"ParameterList","parameters":[],"src":"7335:0:16"},"scope":1137,"src":"7280:56:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1108,"nodeType":"StructuredDocumentation","src":"7342:222:16","text":" @notice Update the address of the target token.\n @dev This is the token for which the burner will attempt to swap all collected fee tokens.\n @param targetToken The address of the target token"},"functionSelector":"1b66cb00","id":1114,"implemented":false,"kind":"function","modifiers":[],"name":"setTargetToken","nameLocation":"7578:14:16","nodeType":"FunctionDefinition","parameters":{"id":1112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1111,"mutability":"mutable","name":"targetToken","nameLocation":"7600:11:16","nodeType":"VariableDeclaration","scope":1114,"src":"7593:18:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1110,"nodeType":"UserDefinedTypeName","pathNode":{"id":1109,"name":"IERC20","nameLocations":["7593:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"7593:6:16"},"referencedDeclaration":10576,"src":"7593:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"7592:20:16"},"returnParameters":{"id":1113,"nodeType":"ParameterList","parameters":[],"src":"7621:0:16"},"scope":1137,"src":"7569:53:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1115,"nodeType":"StructuredDocumentation","src":"7628:300:16","text":" @notice Add an approved fee burner to the allowlist.\n @dev This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol\n fee burners.\n @param protocolFeeBurner The address of an approved protocol fee burner to be added"},"functionSelector":"e20c482f","id":1121,"implemented":false,"kind":"function","modifiers":[],"name":"addProtocolFeeBurner","nameLocation":"7942:20:16","nodeType":"FunctionDefinition","parameters":{"id":1119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1118,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"7982:17:16","nodeType":"VariableDeclaration","scope":1121,"src":"7963:36:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":1117,"nodeType":"UserDefinedTypeName","pathNode":{"id":1116,"name":"IProtocolFeeBurner","nameLocations":["7963:18:16"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"7963:18:16"},"referencedDeclaration":948,"src":"7963:18:16","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"7962:38:16"},"returnParameters":{"id":1120,"nodeType":"ParameterList","parameters":[],"src":"8009:0:16"},"scope":1137,"src":"7933:77:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1122,"nodeType":"StructuredDocumentation","src":"8016:304:16","text":" @notice Remove a fee burner from the allowlist.\n @dev This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol\n fee burners.\n @param protocolFeeBurner The address of a protocol fee burner on the allowlist to be removed"},"functionSelector":"b11f061e","id":1128,"implemented":false,"kind":"function","modifiers":[],"name":"removeProtocolFeeBurner","nameLocation":"8334:23:16","nodeType":"FunctionDefinition","parameters":{"id":1126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1125,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"8377:17:16","nodeType":"VariableDeclaration","scope":1128,"src":"8358:36:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":1124,"nodeType":"UserDefinedTypeName","pathNode":{"id":1123,"name":"IProtocolFeeBurner","nameLocations":["8358:18:16"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"8358:18:16"},"referencedDeclaration":948,"src":"8358:18:16","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"8357:38:16"},"returnParameters":{"id":1127,"nodeType":"ParameterList","parameters":[],"src":"8404:0:16"},"scope":1137,"src":"8325:80:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1129,"nodeType":"StructuredDocumentation","src":"8411:265:16","text":" @notice Retrieve any tokens \"stuck\" in this contract (e.g., dust, or failed conversions).\n @dev It will recover the full balance of all the tokens. This can only be called by the `feeRecipient`.\n @param feeTokens The tokens to recover"},"functionSelector":"b0edcc53","id":1136,"implemented":false,"kind":"function","modifiers":[],"name":"recoverProtocolFees","nameLocation":"8690:19:16","nodeType":"FunctionDefinition","parameters":{"id":1134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1133,"mutability":"mutable","name":"feeTokens","nameLocation":"8726:9:16","nodeType":"VariableDeclaration","scope":1136,"src":"8710:25:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1131,"nodeType":"UserDefinedTypeName","pathNode":{"id":1130,"name":"IERC20","nameLocations":["8710:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"8710:6:16"},"referencedDeclaration":10576,"src":"8710:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":1132,"nodeType":"ArrayTypeName","src":"8710:8:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"8709:27:16"},"returnParameters":{"id":1135,"nodeType":"ParameterList","parameters":[],"src":"8745:0:16"},"scope":1137,"src":"8681:65:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1138,"src":"364:8384:16","usedErrors":[1014,1017,1020,1025,1030,1035,1038,1041],"usedEvents":[984,989,1001,1006,1011]}],"src":"46:8703:16"},"id":16},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol","exportedSymbols":{"ITokenPairRegistry":[1263],"SwapPathStep":[1275]},"id":1264,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol","file":"../vault/BatchRouterTypes.sol","id":1140,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1264,"sourceUnit":1326,"src":"46:61:17","symbolAliases":[{"foreign":{"id":1139,"name":"SwapPathStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1275,"src":"55:12:17","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":1141,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"109:24:17"},{"abstract":false,"baseContracts":[],"canonicalName":"ITokenPairRegistry","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":1263,"linearizedBaseContracts":[1263],"name":"ITokenPairRegistry","nameLocation":"145:18:17","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1142,"nodeType":"StructuredDocumentation","src":"170:285:17","text":" @notice Emitted when a new token pair is added to the registry.\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair\n @param pathsLength The number of paths added for the token pair"},"eventSelector":"0836045dc838da47be101a8d10036b82ec004688d856daa53cd0e56807d3bfca","id":1150,"name":"PathAdded","nameLocation":"466:9:17","nodeType":"EventDefinition","parameters":{"id":1149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1144,"indexed":true,"mutability":"mutable","name":"tokenIn","nameLocation":"492:7:17","nodeType":"VariableDeclaration","scope":1150,"src":"476:23:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1143,"name":"address","nodeType":"ElementaryTypeName","src":"476:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1146,"indexed":true,"mutability":"mutable","name":"tokenOut","nameLocation":"517:8:17","nodeType":"VariableDeclaration","scope":1150,"src":"501:24:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1145,"name":"address","nodeType":"ElementaryTypeName","src":"501:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1148,"indexed":false,"mutability":"mutable","name":"pathsLength","nameLocation":"535:11:17","nodeType":"VariableDeclaration","scope":1150,"src":"527:19:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1147,"name":"uint256","nodeType":"ElementaryTypeName","src":"527:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"475:72:17"},"src":"460:88:17"},{"anonymous":false,"documentation":{"id":1151,"nodeType":"StructuredDocumentation","src":"554:319:17","text":" @notice Emitted when an existing token pair is removed from the registry.\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair\n @param pathsLength The number of paths associated with the token pair after the removal"},"eventSelector":"a38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da","id":1159,"name":"PathRemoved","nameLocation":"884:11:17","nodeType":"EventDefinition","parameters":{"id":1158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1153,"indexed":true,"mutability":"mutable","name":"tokenIn","nameLocation":"912:7:17","nodeType":"VariableDeclaration","scope":1159,"src":"896:23:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1152,"name":"address","nodeType":"ElementaryTypeName","src":"896:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1155,"indexed":true,"mutability":"mutable","name":"tokenOut","nameLocation":"937:8:17","nodeType":"VariableDeclaration","scope":1159,"src":"921:24:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1154,"name":"address","nodeType":"ElementaryTypeName","src":"921:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1157,"indexed":false,"mutability":"mutable","name":"pathsLength","nameLocation":"955:11:17","nodeType":"VariableDeclaration","scope":1159,"src":"947:19:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1156,"name":"uint256","nodeType":"ElementaryTypeName","src":"947:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"895:72:17"},"src":"878:90:17"},{"documentation":{"id":1160,"nodeType":"StructuredDocumentation","src":"974:158:17","text":" @notice The given buffer address does not correspond to an initialized buffer.\n @param buffer The address of the uninitialized buffer"},"errorSelector":"85f41299","id":1164,"name":"BufferNotInitialized","nameLocation":"1143:20:17","nodeType":"ErrorDefinition","parameters":{"id":1163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1162,"mutability":"mutable","name":"buffer","nameLocation":"1172:6:17","nodeType":"VariableDeclaration","scope":1164,"src":"1164:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1161,"name":"address","nodeType":"ElementaryTypeName","src":"1164:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1163:16:17"},"src":"1137:43:17"},{"documentation":{"id":1165,"nodeType":"StructuredDocumentation","src":"1186:44:17","text":"@notice The path to add cannot be empty."},"errorSelector":"20a2d33d","id":1167,"name":"EmptyPath","nameLocation":"1241:9:17","nodeType":"ErrorDefinition","parameters":{"id":1166,"nodeType":"ParameterList","parameters":[],"src":"1250:2:17"},"src":"1235:18:17"},{"documentation":{"id":1168,"nodeType":"StructuredDocumentation","src":"1259:117:17","text":" @notice The given address is not a valid pool or buffer.\n @param path Pool or buffer address"},"errorSelector":"b309199b","id":1172,"name":"InvalidSimplePath","nameLocation":"1387:17:17","nodeType":"ErrorDefinition","parameters":{"id":1171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1170,"mutability":"mutable","name":"path","nameLocation":"1413:4:17","nodeType":"VariableDeclaration","scope":1172,"src":"1405:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1169,"name":"address","nodeType":"ElementaryTypeName","src":"1405:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1404:14:17"},"src":"1381:38:17"},{"documentation":{"id":1173,"nodeType":"StructuredDocumentation","src":"1425:292:17","text":" @notice The given pool or buffer is not registered as a path for the token pair.\n @param poolOrBuffer The address of the pool or buffer\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair"},"errorSelector":"3a9458d9","id":1181,"name":"InvalidRemovePath","nameLocation":"1728:17:17","nodeType":"ErrorDefinition","parameters":{"id":1180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1175,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"1754:12:17","nodeType":"VariableDeclaration","scope":1181,"src":"1746:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1174,"name":"address","nodeType":"ElementaryTypeName","src":"1746:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1177,"mutability":"mutable","name":"tokenIn","nameLocation":"1776:7:17","nodeType":"VariableDeclaration","scope":1181,"src":"1768:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1176,"name":"address","nodeType":"ElementaryTypeName","src":"1768:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1179,"mutability":"mutable","name":"tokenOut","nameLocation":"1793:8:17","nodeType":"VariableDeclaration","scope":1181,"src":"1785:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1178,"name":"address","nodeType":"ElementaryTypeName","src":"1785:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1745:57:17"},"src":"1722:81:17"},{"documentation":{"id":1182,"nodeType":"StructuredDocumentation","src":"1809:289:17","text":" @notice The output token does not match the expected address in a wrap or unwrap operation.\n @param buffer The address of the buffer\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair"},"errorSelector":"29198c3d","id":1190,"name":"InvalidBufferPath","nameLocation":"2109:17:17","nodeType":"ErrorDefinition","parameters":{"id":1189,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1184,"mutability":"mutable","name":"buffer","nameLocation":"2135:6:17","nodeType":"VariableDeclaration","scope":1190,"src":"2127:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1183,"name":"address","nodeType":"ElementaryTypeName","src":"2127:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1186,"mutability":"mutable","name":"tokenIn","nameLocation":"2151:7:17","nodeType":"VariableDeclaration","scope":1190,"src":"2143:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1185,"name":"address","nodeType":"ElementaryTypeName","src":"2143:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1188,"mutability":"mutable","name":"tokenOut","nameLocation":"2168:8:17","nodeType":"VariableDeclaration","scope":1190,"src":"2160:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1187,"name":"address","nodeType":"ElementaryTypeName","src":"2160:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2126:51:17"},"src":"2103:75:17"},{"documentation":{"id":1191,"nodeType":"StructuredDocumentation","src":"2184:80:17","text":"@notice Attempted to remove a path at an index beyond the registered length."},"errorSelector":"4e23d035","id":1193,"name":"IndexOutOfBounds","nameLocation":"2275:16:17","nodeType":"ErrorDefinition","parameters":{"id":1192,"nodeType":"ParameterList","parameters":[],"src":"2291:2:17"},"src":"2269:25:17"},{"documentation":{"id":1194,"nodeType":"StructuredDocumentation","src":"2300:432:17","text":" @notice Returns the path for a given token pair at a specific index.\n @dev Safe version; reverts if the index is out of bounds.\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair\n @param index The index of the path in the list of paths for the token pair\n @return The path at the specified index for the token pair"},"functionSelector":"057074ff","id":1207,"implemented":false,"kind":"function","modifiers":[],"name":"getPathAt","nameLocation":"2746:9:17","nodeType":"FunctionDefinition","parameters":{"id":1201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1196,"mutability":"mutable","name":"tokenIn","nameLocation":"2764:7:17","nodeType":"VariableDeclaration","scope":1207,"src":"2756:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1195,"name":"address","nodeType":"ElementaryTypeName","src":"2756:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1198,"mutability":"mutable","name":"tokenOut","nameLocation":"2781:8:17","nodeType":"VariableDeclaration","scope":1207,"src":"2773:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1197,"name":"address","nodeType":"ElementaryTypeName","src":"2773:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1200,"mutability":"mutable","name":"index","nameLocation":"2799:5:17","nodeType":"VariableDeclaration","scope":1207,"src":"2791:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1199,"name":"uint256","nodeType":"ElementaryTypeName","src":"2791:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2755:50:17"},"returnParameters":{"id":1206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1205,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1207,"src":"2829:21:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":1203,"nodeType":"UserDefinedTypeName","pathNode":{"id":1202,"name":"SwapPathStep","nameLocations":["2829:12:17"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"2829:12:17"},"referencedDeclaration":1275,"src":"2829:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":1204,"nodeType":"ArrayTypeName","src":"2829:14:17","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"}],"src":"2828:23:17"},"scope":1263,"src":"2737:115:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1208,"nodeType":"StructuredDocumentation","src":"2858:286:17","text":" @notice Returns the number of paths registered for a given token pair.\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair\n @return The number of paths registered for the token pair"},"functionSelector":"94ee0a3b","id":1217,"implemented":false,"kind":"function","modifiers":[],"name":"getPathCount","nameLocation":"3158:12:17","nodeType":"FunctionDefinition","parameters":{"id":1213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1210,"mutability":"mutable","name":"tokenIn","nameLocation":"3179:7:17","nodeType":"VariableDeclaration","scope":1217,"src":"3171:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1209,"name":"address","nodeType":"ElementaryTypeName","src":"3171:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1212,"mutability":"mutable","name":"tokenOut","nameLocation":"3196:8:17","nodeType":"VariableDeclaration","scope":1217,"src":"3188:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1211,"name":"address","nodeType":"ElementaryTypeName","src":"3188:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3170:35:17"},"returnParameters":{"id":1216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1215,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1217,"src":"3229:7:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1214,"name":"uint256","nodeType":"ElementaryTypeName","src":"3229:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3228:9:17"},"scope":1263,"src":"3149:89:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1218,"nodeType":"StructuredDocumentation","src":"3244:283:17","text":" @notice Returns the paths registered for a given token pair.\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair\n @return An array of path addresses registered for the token pair"},"functionSelector":"7c7d370a","id":1230,"implemented":false,"kind":"function","modifiers":[],"name":"getPaths","nameLocation":"3541:8:17","nodeType":"FunctionDefinition","parameters":{"id":1223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1220,"mutability":"mutable","name":"tokenIn","nameLocation":"3558:7:17","nodeType":"VariableDeclaration","scope":1230,"src":"3550:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1219,"name":"address","nodeType":"ElementaryTypeName","src":"3550:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1222,"mutability":"mutable","name":"tokenOut","nameLocation":"3575:8:17","nodeType":"VariableDeclaration","scope":1230,"src":"3567:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1221,"name":"address","nodeType":"ElementaryTypeName","src":"3567:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3549:35:17"},"returnParameters":{"id":1229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1228,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1230,"src":"3608:23:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep[][]"},"typeName":{"baseType":{"baseType":{"id":1225,"nodeType":"UserDefinedTypeName","pathNode":{"id":1224,"name":"SwapPathStep","nameLocations":["3608:12:17"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"3608:12:17"},"referencedDeclaration":1275,"src":"3608:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":1226,"nodeType":"ArrayTypeName","src":"3608:14:17","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":1227,"nodeType":"ArrayTypeName","src":"3608:16:17","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}},"visibility":"internal"}],"src":"3607:25:17"},"scope":1263,"src":"3532:101:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1231,"nodeType":"StructuredDocumentation","src":"3639:606:17","text":" @notice Adds an arbitrary path between `tokenIn` and the last step's `tokenOut` to the registry.\n @dev This function is permissioned. Use it to register boosted pool paths with leading / trailing buffer steps.\n The registry will validate that each step is valid (i.e. each pool step contains the `tokenIn` and `tokenOut`,\n and each buffer step has the correct wrapped / underlying token).\n @param tokenIn The address of the input token in the pair\n @param steps An array of `SwapPathStep` structs representing the path steps to reach the output token"},"functionSelector":"815ca70f","id":1240,"implemented":false,"kind":"function","modifiers":[],"name":"addPath","nameLocation":"4259:7:17","nodeType":"FunctionDefinition","parameters":{"id":1238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1233,"mutability":"mutable","name":"tokenIn","nameLocation":"4275:7:17","nodeType":"VariableDeclaration","scope":1240,"src":"4267:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1232,"name":"address","nodeType":"ElementaryTypeName","src":"4267:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1237,"mutability":"mutable","name":"steps","nameLocation":"4306:5:17","nodeType":"VariableDeclaration","scope":1240,"src":"4284:27:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":1235,"nodeType":"UserDefinedTypeName","pathNode":{"id":1234,"name":"SwapPathStep","nameLocations":["4284:12:17"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"4284:12:17"},"referencedDeclaration":1275,"src":"4284:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":1236,"nodeType":"ArrayTypeName","src":"4284:14:17","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"}],"src":"4266:46:17"},"returnParameters":{"id":1239,"nodeType":"ParameterList","parameters":[],"src":"4321:0:17"},"scope":1263,"src":"4250:72:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1241,"nodeType":"StructuredDocumentation","src":"4328:202:17","text":" @notice Adds a pool or buffer to the registry with all token pairs it supports.\n @dev This function is permissioned.\n @param poolOrBuffer The address of the pool or buffer"},"functionSelector":"f335b520","id":1246,"implemented":false,"kind":"function","modifiers":[],"name":"addSimplePath","nameLocation":"4544:13:17","nodeType":"FunctionDefinition","parameters":{"id":1244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1243,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"4566:12:17","nodeType":"VariableDeclaration","scope":1246,"src":"4558:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1242,"name":"address","nodeType":"ElementaryTypeName","src":"4558:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4557:22:17"},"returnParameters":{"id":1245,"nodeType":"ParameterList","parameters":[],"src":"4588:0:17"},"scope":1263,"src":"4535:54:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1247,"nodeType":"StructuredDocumentation","src":"4595:355:17","text":" @notice Removes an arbitrary path from the registry at a given index.\n @dev This function is permissioned.\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair\n @param index The index of the path to remove in the list of paths for the token pair"},"functionSelector":"32fffdbd","id":1256,"implemented":false,"kind":"function","modifiers":[],"name":"removePathAtIndex","nameLocation":"4964:17:17","nodeType":"FunctionDefinition","parameters":{"id":1254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1249,"mutability":"mutable","name":"tokenIn","nameLocation":"4990:7:17","nodeType":"VariableDeclaration","scope":1256,"src":"4982:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1248,"name":"address","nodeType":"ElementaryTypeName","src":"4982:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1251,"mutability":"mutable","name":"tokenOut","nameLocation":"5007:8:17","nodeType":"VariableDeclaration","scope":1256,"src":"4999:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1250,"name":"address","nodeType":"ElementaryTypeName","src":"4999:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1253,"mutability":"mutable","name":"index","nameLocation":"5025:5:17","nodeType":"VariableDeclaration","scope":1256,"src":"5017:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1252,"name":"uint256","nodeType":"ElementaryTypeName","src":"5017:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4981:50:17"},"returnParameters":{"id":1255,"nodeType":"ParameterList","parameters":[],"src":"5040:0:17"},"scope":1263,"src":"4955:86:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1257,"nodeType":"StructuredDocumentation","src":"5047:193:17","text":" @notice Removes all token paths registered for a given pool or buffer.\n @dev This function is permissioned.\n @param poolOrBuffer The address of the pool or buffer"},"functionSelector":"bc138aa3","id":1262,"implemented":false,"kind":"function","modifiers":[],"name":"removeSimplePath","nameLocation":"5254:16:17","nodeType":"FunctionDefinition","parameters":{"id":1260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1259,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"5279:12:17","nodeType":"VariableDeclaration","scope":1262,"src":"5271:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1258,"name":"address","nodeType":"ElementaryTypeName","src":"5271:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5270:22:17"},"returnParameters":{"id":1261,"nodeType":"ParameterList","parameters":[],"src":"5301:0:17"},"scope":1263,"src":"5245:57:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1264,"src":"135:5169:17","usedErrors":[1164,1167,1172,1181,1190,1193],"usedEvents":[1150,1159]}],"src":"46:5259:17"},"id":17},"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol","exportedSymbols":{"IERC20":[10576],"SwapExactInHookParams":[1312],"SwapExactOutHookParams":[1325],"SwapPathExactAmountIn":[1287],"SwapPathExactAmountOut":[1299],"SwapPathStep":[1275]},"id":1326,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1265,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:18"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1267,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1326,"sourceUnit":10577,"src":"72:72:18","symbolAliases":[{"foreign":{"id":1266,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"SwapPathStep","id":1275,"members":[{"constant":false,"id":1269,"mutability":"mutable","name":"pool","nameLocation":"180:4:18","nodeType":"VariableDeclaration","scope":1275,"src":"172:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1268,"name":"address","nodeType":"ElementaryTypeName","src":"172:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1272,"mutability":"mutable","name":"tokenOut","nameLocation":"197:8:18","nodeType":"VariableDeclaration","scope":1275,"src":"190:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1271,"nodeType":"UserDefinedTypeName","pathNode":{"id":1270,"name":"IERC20","nameLocations":["190:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"190:6:18"},"referencedDeclaration":10576,"src":"190:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1274,"mutability":"mutable","name":"isBuffer","nameLocation":"331:8:18","nodeType":"VariableDeclaration","scope":1275,"src":"326:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1273,"name":"bool","nodeType":"ElementaryTypeName","src":"326:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"SwapPathStep","nameLocation":"153:12:18","nodeType":"StructDefinition","scope":1326,"src":"146:196:18","visibility":"public"},{"canonicalName":"SwapPathExactAmountIn","id":1287,"members":[{"constant":false,"id":1278,"mutability":"mutable","name":"tokenIn","nameLocation":"386:7:18","nodeType":"VariableDeclaration","scope":1287,"src":"379:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1277,"nodeType":"UserDefinedTypeName","pathNode":{"id":1276,"name":"IERC20","nameLocations":["379:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"379:6:18"},"referencedDeclaration":10576,"src":"379:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1282,"mutability":"mutable","name":"steps","nameLocation":"563:5:18","nodeType":"VariableDeclaration","scope":1287,"src":"548:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":1280,"nodeType":"UserDefinedTypeName","pathNode":{"id":1279,"name":"SwapPathStep","nameLocations":["548:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"548:12:18"},"referencedDeclaration":1275,"src":"548:12:18","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":1281,"nodeType":"ArrayTypeName","src":"548:14:18","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"},{"constant":false,"id":1284,"mutability":"mutable","name":"exactAmountIn","nameLocation":"582:13:18","nodeType":"VariableDeclaration","scope":1287,"src":"574:21:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1283,"name":"uint256","nodeType":"ElementaryTypeName","src":"574:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1286,"mutability":"mutable","name":"minAmountOut","nameLocation":"609:12:18","nodeType":"VariableDeclaration","scope":1287,"src":"601:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1285,"name":"uint256","nodeType":"ElementaryTypeName","src":"601:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapPathExactAmountIn","nameLocation":"351:21:18","nodeType":"StructDefinition","scope":1326,"src":"344:280:18","visibility":"public"},{"canonicalName":"SwapPathExactAmountOut","id":1299,"members":[{"constant":false,"id":1290,"mutability":"mutable","name":"tokenIn","nameLocation":"669:7:18","nodeType":"VariableDeclaration","scope":1299,"src":"662:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1289,"nodeType":"UserDefinedTypeName","pathNode":{"id":1288,"name":"IERC20","nameLocations":["662:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"662:6:18"},"referencedDeclaration":10576,"src":"662:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1294,"mutability":"mutable","name":"steps","nameLocation":"859:5:18","nodeType":"VariableDeclaration","scope":1299,"src":"844:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":1292,"nodeType":"UserDefinedTypeName","pathNode":{"id":1291,"name":"SwapPathStep","nameLocations":["844:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"844:12:18"},"referencedDeclaration":1275,"src":"844:12:18","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":1293,"nodeType":"ArrayTypeName","src":"844:14:18","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"},{"constant":false,"id":1296,"mutability":"mutable","name":"maxAmountIn","nameLocation":"878:11:18","nodeType":"VariableDeclaration","scope":1299,"src":"870:19:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1295,"name":"uint256","nodeType":"ElementaryTypeName","src":"870:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1298,"mutability":"mutable","name":"exactAmountOut","nameLocation":"903:14:18","nodeType":"VariableDeclaration","scope":1299,"src":"895:22:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1297,"name":"uint256","nodeType":"ElementaryTypeName","src":"895:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapPathExactAmountOut","nameLocation":"633:22:18","nodeType":"StructDefinition","scope":1326,"src":"626:294:18","visibility":"public"},{"canonicalName":"SwapExactInHookParams","id":1312,"members":[{"constant":false,"id":1301,"mutability":"mutable","name":"sender","nameLocation":"965:6:18","nodeType":"VariableDeclaration","scope":1312,"src":"957:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1300,"name":"address","nodeType":"ElementaryTypeName","src":"957:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1305,"mutability":"mutable","name":"paths","nameLocation":"1001:5:18","nodeType":"VariableDeclaration","scope":1312,"src":"977:29:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1287_storage_$dyn_storage_ptr","typeString":"struct SwapPathExactAmountIn[]"},"typeName":{"baseType":{"id":1303,"nodeType":"UserDefinedTypeName","pathNode":{"id":1302,"name":"SwapPathExactAmountIn","nameLocations":["977:21:18"],"nodeType":"IdentifierPath","referencedDeclaration":1287,"src":"977:21:18"},"referencedDeclaration":1287,"src":"977:21:18","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountIn_$1287_storage_ptr","typeString":"struct SwapPathExactAmountIn"}},"id":1304,"nodeType":"ArrayTypeName","src":"977:23:18","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1287_storage_$dyn_storage_ptr","typeString":"struct SwapPathExactAmountIn[]"}},"visibility":"internal"},{"constant":false,"id":1307,"mutability":"mutable","name":"deadline","nameLocation":"1020:8:18","nodeType":"VariableDeclaration","scope":1312,"src":"1012:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1306,"name":"uint256","nodeType":"ElementaryTypeName","src":"1012:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1309,"mutability":"mutable","name":"wethIsEth","nameLocation":"1039:9:18","nodeType":"VariableDeclaration","scope":1312,"src":"1034:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1308,"name":"bool","nodeType":"ElementaryTypeName","src":"1034:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1311,"mutability":"mutable","name":"userData","nameLocation":"1060:8:18","nodeType":"VariableDeclaration","scope":1312,"src":"1054:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":1310,"name":"bytes","nodeType":"ElementaryTypeName","src":"1054:5:18","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"SwapExactInHookParams","nameLocation":"929:21:18","nodeType":"StructDefinition","scope":1326,"src":"922:149:18","visibility":"public"},{"canonicalName":"SwapExactOutHookParams","id":1325,"members":[{"constant":false,"id":1314,"mutability":"mutable","name":"sender","nameLocation":"1117:6:18","nodeType":"VariableDeclaration","scope":1325,"src":"1109:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1313,"name":"address","nodeType":"ElementaryTypeName","src":"1109:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1318,"mutability":"mutable","name":"paths","nameLocation":"1154:5:18","nodeType":"VariableDeclaration","scope":1325,"src":"1129:30:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1299_storage_$dyn_storage_ptr","typeString":"struct SwapPathExactAmountOut[]"},"typeName":{"baseType":{"id":1316,"nodeType":"UserDefinedTypeName","pathNode":{"id":1315,"name":"SwapPathExactAmountOut","nameLocations":["1129:22:18"],"nodeType":"IdentifierPath","referencedDeclaration":1299,"src":"1129:22:18"},"referencedDeclaration":1299,"src":"1129:22:18","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1299_storage_ptr","typeString":"struct SwapPathExactAmountOut"}},"id":1317,"nodeType":"ArrayTypeName","src":"1129:24:18","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1299_storage_$dyn_storage_ptr","typeString":"struct SwapPathExactAmountOut[]"}},"visibility":"internal"},{"constant":false,"id":1320,"mutability":"mutable","name":"deadline","nameLocation":"1173:8:18","nodeType":"VariableDeclaration","scope":1325,"src":"1165:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1319,"name":"uint256","nodeType":"ElementaryTypeName","src":"1165:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1322,"mutability":"mutable","name":"wethIsEth","nameLocation":"1192:9:18","nodeType":"VariableDeclaration","scope":1325,"src":"1187:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1321,"name":"bool","nodeType":"ElementaryTypeName","src":"1187:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1324,"mutability":"mutable","name":"userData","nameLocation":"1213:8:18","nodeType":"VariableDeclaration","scope":1325,"src":"1207:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":1323,"name":"bytes","nodeType":"ElementaryTypeName","src":"1207:5:18","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"SwapExactOutHookParams","nameLocation":"1080:22:18","nodeType":"StructDefinition","scope":1326,"src":"1073:151:18","visibility":"public"}],"src":"46:1179:18"},"id":18},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","exportedSymbols":{"IAuthorizer":[1341]},"id":1342,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1327,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:19"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthorizer","contractDependencies":[],"contractKind":"interface","documentation":{"id":1328,"nodeType":"StructuredDocumentation","src":"72:56:19","text":"@notice Interface to the Vault's permission system."},"fullyImplemented":false,"id":1341,"linearizedBaseContracts":[1341],"name":"IAuthorizer","nameLocation":"138:11:19","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1329,"nodeType":"StructuredDocumentation","src":"156:354:19","text":" @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n @param actionId Identifier for the action to be performed\n @param account Account trying to perform the action\n @param where Target contract for the action\n @return success True if the action is permitted"},"functionSelector":"9be2a884","id":1340,"implemented":false,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"524:10:19","nodeType":"FunctionDefinition","parameters":{"id":1336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1331,"mutability":"mutable","name":"actionId","nameLocation":"543:8:19","nodeType":"VariableDeclaration","scope":1340,"src":"535:16:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1330,"name":"bytes32","nodeType":"ElementaryTypeName","src":"535:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1333,"mutability":"mutable","name":"account","nameLocation":"561:7:19","nodeType":"VariableDeclaration","scope":1340,"src":"553:15:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1332,"name":"address","nodeType":"ElementaryTypeName","src":"553:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1335,"mutability":"mutable","name":"where","nameLocation":"578:5:19","nodeType":"VariableDeclaration","scope":1340,"src":"570:13:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1334,"name":"address","nodeType":"ElementaryTypeName","src":"570:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"534:50:19"},"returnParameters":{"id":1339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1338,"mutability":"mutable","name":"success","nameLocation":"613:7:19","nodeType":"VariableDeclaration","scope":1340,"src":"608:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1337,"name":"bool","nodeType":"ElementaryTypeName","src":"608:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"607:14:19"},"scope":1341,"src":"515:107:19","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1342,"src":"128:496:19","usedErrors":[],"usedEvents":[]}],"src":"46:579:19"},"id":19},"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","exportedSymbols":{"IAuthentication":[14],"IBasePoolFactory":[1415]},"id":1416,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1343,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:20"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"../solidity-utils/helpers/IAuthentication.sol","id":1345,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1416,"sourceUnit":15,"src":"72:80:20","symbolAliases":[{"foreign":{"id":1344,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"81:15:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1347,"name":"IAuthentication","nameLocations":["454:15:20"],"nodeType":"IdentifierPath","referencedDeclaration":14,"src":"454:15:20"},"id":1348,"nodeType":"InheritanceSpecifier","src":"454:15:20"}],"canonicalName":"IBasePoolFactory","contractDependencies":[],"contractKind":"interface","documentation":{"id":1346,"nodeType":"StructuredDocumentation","src":"154:269:20","text":" @notice Base interface for a Balancer Pool Factory.\n @dev All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types\n (e.g., address prediction, tracking deployed pools, and governance-facilitated migration)."},"fullyImplemented":false,"id":1415,"linearizedBaseContracts":[1415,14],"name":"IBasePoolFactory","nameLocation":"434:16:20","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1349,"nodeType":"StructuredDocumentation","src":"476:94:20","text":" @notice A pool was deployed.\n @param pool The address of the new pool"},"eventSelector":"83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc","id":1353,"name":"PoolCreated","nameLocation":"581:11:20","nodeType":"EventDefinition","parameters":{"id":1352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1351,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"609:4:20","nodeType":"VariableDeclaration","scope":1353,"src":"593:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1350,"name":"address","nodeType":"ElementaryTypeName","src":"593:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"592:22:20"},"src":"575:40:20"},{"anonymous":false,"documentation":{"id":1354,"nodeType":"StructuredDocumentation","src":"621:51:20","text":"@notice The factory was disabled by governance."},"eventSelector":"432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d50","id":1356,"name":"FactoryDisabled","nameLocation":"683:15:20","nodeType":"EventDefinition","parameters":{"id":1355,"nodeType":"ParameterList","parameters":[],"src":"698:2:20"},"src":"677:24:20"},{"documentation":{"id":1357,"nodeType":"StructuredDocumentation","src":"707:67:20","text":"@notice Attempted pool creation after the factory was disabled."},"errorSelector":"75884cda","id":1359,"name":"Disabled","nameLocation":"785:8:20","nodeType":"ErrorDefinition","parameters":{"id":1358,"nodeType":"ParameterList","parameters":[],"src":"793:2:20"},"src":"779:17:20"},{"documentation":{"id":1360,"nodeType":"StructuredDocumentation","src":"802:67:20","text":"@notice A pool index is beyond the current bounds of the array."},"errorSelector":"4e23d035","id":1362,"name":"IndexOutOfBounds","nameLocation":"880:16:20","nodeType":"ErrorDefinition","parameters":{"id":1361,"nodeType":"ParameterList","parameters":[],"src":"896:2:20"},"src":"874:25:20"},{"documentation":{"id":1363,"nodeType":"StructuredDocumentation","src":"905:180:20","text":" @notice Check whether a pool was deployed by this factory.\n @param pool The pool to check\n @return success True if `pool` was created by this factory"},"functionSelector":"6634b753","id":1370,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolFromFactory","nameLocation":"1099:17:20","nodeType":"FunctionDefinition","parameters":{"id":1366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1365,"mutability":"mutable","name":"pool","nameLocation":"1125:4:20","nodeType":"VariableDeclaration","scope":1370,"src":"1117:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1364,"name":"address","nodeType":"ElementaryTypeName","src":"1117:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1116:14:20"},"returnParameters":{"id":1369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1368,"mutability":"mutable","name":"success","nameLocation":"1159:7:20","nodeType":"VariableDeclaration","scope":1370,"src":"1154:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1367,"name":"bool","nodeType":"ElementaryTypeName","src":"1154:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1153:14:20"},"scope":1415,"src":"1090:78:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1371,"nodeType":"StructuredDocumentation","src":"1174:245:20","text":" @notice Return the total number of pools deployed by this factory.\n @dev This can then be used to \"paginate\" calls to `getPools` to control gas costs.\n @return poolCount The number of pools deployed by this factory"},"functionSelector":"8eec5d70","id":1376,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCount","nameLocation":"1433:12:20","nodeType":"FunctionDefinition","parameters":{"id":1372,"nodeType":"ParameterList","parameters":[],"src":"1445:2:20"},"returnParameters":{"id":1375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1374,"mutability":"mutable","name":"poolCount","nameLocation":"1479:9:20","nodeType":"VariableDeclaration","scope":1376,"src":"1471:17:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1373,"name":"uint256","nodeType":"ElementaryTypeName","src":"1471:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1470:19:20"},"scope":1415,"src":"1424:66:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1377,"nodeType":"StructuredDocumentation","src":"1496:510:20","text":" @notice Return a subset of the list of pools deployed by this factory.\n @dev `start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply\n stop at the end and return fewer results than requested.\n @param start The index of the first pool to return\n @param count The maximum number of pools to return\n @return pools The list of pools deployed by this factory, starting at `start` and returning up to `count` pools"},"functionSelector":"53a72f7e","id":1387,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolsInRange","nameLocation":"2020:15:20","nodeType":"FunctionDefinition","parameters":{"id":1382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1379,"mutability":"mutable","name":"start","nameLocation":"2044:5:20","nodeType":"VariableDeclaration","scope":1387,"src":"2036:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1378,"name":"uint256","nodeType":"ElementaryTypeName","src":"2036:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1381,"mutability":"mutable","name":"count","nameLocation":"2059:5:20","nodeType":"VariableDeclaration","scope":1387,"src":"2051:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1380,"name":"uint256","nodeType":"ElementaryTypeName","src":"2051:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2035:30:20"},"returnParameters":{"id":1386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1385,"mutability":"mutable","name":"pools","nameLocation":"2106:5:20","nodeType":"VariableDeclaration","scope":1387,"src":"2089:22:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1383,"name":"address","nodeType":"ElementaryTypeName","src":"2089:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1384,"nodeType":"ArrayTypeName","src":"2089:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2088:24:20"},"scope":1415,"src":"2011:102:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1388,"nodeType":"StructuredDocumentation","src":"2119:150:20","text":" @notice Return the complete list of pools deployed by this factory.\n @return pools The list of pools deployed by this factory"},"functionSelector":"673a2a1f","id":1394,"implemented":false,"kind":"function","modifiers":[],"name":"getPools","nameLocation":"2283:8:20","nodeType":"FunctionDefinition","parameters":{"id":1389,"nodeType":"ParameterList","parameters":[],"src":"2291:2:20"},"returnParameters":{"id":1393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1392,"mutability":"mutable","name":"pools","nameLocation":"2334:5:20","nodeType":"VariableDeclaration","scope":1394,"src":"2317:22:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1390,"name":"address","nodeType":"ElementaryTypeName","src":"2317:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1391,"nodeType":"ArrayTypeName","src":"2317:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2316:24:20"},"scope":1415,"src":"2274:67:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1395,"nodeType":"StructuredDocumentation","src":"2347:322:20","text":" @notice Return the address where a new pool will be deployed, based on the factory address and salt.\n @param constructorArgs The arguments used to create the pool\n @param salt The salt used to deploy the pool\n @return deploymentAddress The predicted address of the pool, given the salt"},"functionSelector":"44f6fec7","id":1404,"implemented":false,"kind":"function","modifiers":[],"name":"getDeploymentAddress","nameLocation":"2683:20:20","nodeType":"FunctionDefinition","parameters":{"id":1400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1397,"mutability":"mutable","name":"constructorArgs","nameLocation":"2726:15:20","nodeType":"VariableDeclaration","scope":1404,"src":"2713:28:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1396,"name":"bytes","nodeType":"ElementaryTypeName","src":"2713:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1399,"mutability":"mutable","name":"salt","nameLocation":"2759:4:20","nodeType":"VariableDeclaration","scope":1404,"src":"2751:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1398,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2751:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2703:66:20"},"returnParameters":{"id":1403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1402,"mutability":"mutable","name":"deploymentAddress","nameLocation":"2801:17:20","nodeType":"VariableDeclaration","scope":1404,"src":"2793:25:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1401,"name":"address","nodeType":"ElementaryTypeName","src":"2793:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2792:27:20"},"scope":1415,"src":"2674:146:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1405,"nodeType":"StructuredDocumentation","src":"2826:143:20","text":" @notice Check whether this factory has been disabled by governance.\n @return success True if this factory was disabled"},"functionSelector":"6c57f5a9","id":1410,"implemented":false,"kind":"function","modifiers":[],"name":"isDisabled","nameLocation":"2983:10:20","nodeType":"FunctionDefinition","parameters":{"id":1406,"nodeType":"ParameterList","parameters":[],"src":"2993:2:20"},"returnParameters":{"id":1409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1408,"mutability":"mutable","name":"success","nameLocation":"3024:7:20","nodeType":"VariableDeclaration","scope":1410,"src":"3019:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1407,"name":"bool","nodeType":"ElementaryTypeName","src":"3019:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3018:14:20"},"scope":1415,"src":"2974:59:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1411,"nodeType":"StructuredDocumentation","src":"3039:182:20","text":" @notice Disable the factory, preventing the creation of more pools.\n @dev Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled."},"functionSelector":"2f2770db","id":1414,"implemented":false,"kind":"function","modifiers":[],"name":"disable","nameLocation":"3235:7:20","nodeType":"FunctionDefinition","parameters":{"id":1412,"nodeType":"ParameterList","parameters":[],"src":"3242:2:20"},"returnParameters":{"id":1413,"nodeType":"ParameterList","parameters":[],"src":"3253:0:20"},"scope":1415,"src":"3226:28:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1416,"src":"424:2832:20","usedErrors":[5,1359,1362],"usedEvents":[1353,1356]}],"src":"46:3211:20"},"id":20},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","exportedSymbols":{"AddLiquidityKind":[4241],"AfterSwapParams":[4235],"HookFlags":[4061],"IHooks":[1617],"LiquidityManagement":[4014],"PoolSwapParams":[4206],"RemoveLiquidityKind":[4262],"SwapKind":[4169],"TokenConfig":[4128]},"id":1618,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1417,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:21"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1426,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1618,"sourceUnit":4306,"src":"289:193:21","symbolAliases":[{"foreign":{"id":1418,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4128,"src":"302:11:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1419,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4014,"src":"319:19:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1420,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4206,"src":"344:14:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1421,"name":"AfterSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4235,"src":"364:15:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1422,"name":"HookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4061,"src":"385:9:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1423,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4241,"src":"400:16:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1424,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4262,"src":"422:19:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1425,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4169,"src":"447:8:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IHooks","contractDependencies":[],"contractKind":"interface","documentation":{"id":1427,"nodeType":"StructuredDocumentation","src":"484:490:21","text":" @notice Interface for pool hooks.\n @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)"},"fullyImplemented":false,"id":1617,"linearizedBaseContracts":[1617],"name":"IHooks","nameLocation":"985:6:21","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1428,"nodeType":"StructuredDocumentation","src":"1205:769:21","text":" @notice Hook executed when a pool is registered with a non-zero hooks contract.\n @dev Returns true if registration was successful, and false to revert the pool registration.\n Make sure this function is properly implemented (e.g. check the factory, and check that the\n given pool is from the factory). The Vault address will be msg.sender.\n @param factory Address of the pool factory (contract deploying the pool)\n @param pool Address of the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param liquidityManagement Liquidity management flags indicating which functions are enabled\n @return success True if the hook allowed the registration, false otherwise"},"functionSelector":"0b89f182","id":1444,"implemented":false,"kind":"function","modifiers":[],"name":"onRegister","nameLocation":"1988:10:21","nodeType":"FunctionDefinition","parameters":{"id":1440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1430,"mutability":"mutable","name":"factory","nameLocation":"2016:7:21","nodeType":"VariableDeclaration","scope":1444,"src":"2008:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1429,"name":"address","nodeType":"ElementaryTypeName","src":"2008:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1432,"mutability":"mutable","name":"pool","nameLocation":"2041:4:21","nodeType":"VariableDeclaration","scope":1444,"src":"2033:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1431,"name":"address","nodeType":"ElementaryTypeName","src":"2033:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1436,"mutability":"mutable","name":"tokenConfig","nameLocation":"2076:11:21","nodeType":"VariableDeclaration","scope":1444,"src":"2055:32:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4128_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1434,"nodeType":"UserDefinedTypeName","pathNode":{"id":1433,"name":"TokenConfig","nameLocations":["2055:11:21"],"nodeType":"IdentifierPath","referencedDeclaration":4128,"src":"2055:11:21"},"referencedDeclaration":4128,"src":"2055:11:21","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4128_storage_ptr","typeString":"struct TokenConfig"}},"id":1435,"nodeType":"ArrayTypeName","src":"2055:13:21","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4128_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1439,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2126:19:21","nodeType":"VariableDeclaration","scope":1444,"src":"2097:48:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4014_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1438,"nodeType":"UserDefinedTypeName","pathNode":{"id":1437,"name":"LiquidityManagement","nameLocations":["2097:19:21"],"nodeType":"IdentifierPath","referencedDeclaration":4014,"src":"2097:19:21"},"referencedDeclaration":4014,"src":"2097:19:21","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4014_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1998:153:21"},"returnParameters":{"id":1443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1442,"mutability":"mutable","name":"success","nameLocation":"2175:7:21","nodeType":"VariableDeclaration","scope":1444,"src":"2170:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1441,"name":"bool","nodeType":"ElementaryTypeName","src":"2170:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2169:14:21"},"scope":1617,"src":"1979:205:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1445,"nodeType":"StructuredDocumentation","src":"2190:412:21","text":" @notice Return the set of hooks implemented by the contract.\n @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n `onRegister` is the only \"mandatory\" hook.\n @return hookFlags Flags indicating which hooks the contract supports"},"functionSelector":"d77153a7","id":1451,"implemented":false,"kind":"function","modifiers":[],"name":"getHookFlags","nameLocation":"2616:12:21","nodeType":"FunctionDefinition","parameters":{"id":1446,"nodeType":"ParameterList","parameters":[],"src":"2628:2:21"},"returnParameters":{"id":1450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1449,"mutability":"mutable","name":"hookFlags","nameLocation":"2671:9:21","nodeType":"VariableDeclaration","scope":1451,"src":"2654:26:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4061_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":1448,"nodeType":"UserDefinedTypeName","pathNode":{"id":1447,"name":"HookFlags","nameLocations":["2654:9:21"],"nodeType":"IdentifierPath","referencedDeclaration":4061,"src":"2654:9:21"},"referencedDeclaration":4061,"src":"2654:9:21","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4061_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"src":"2653:28:21"},"scope":1617,"src":"2607:75:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1452,"nodeType":"StructuredDocumentation","src":"2897:484:21","text":" @notice Hook executed before pool initialization.\n @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with initialization"},"functionSelector":"1c149e28","id":1462,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeInitialize","nameLocation":"3395:18:21","nodeType":"FunctionDefinition","parameters":{"id":1458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1455,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"3431:14:21","nodeType":"VariableDeclaration","scope":1462,"src":"3414:31:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1453,"name":"uint256","nodeType":"ElementaryTypeName","src":"3414:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1454,"nodeType":"ArrayTypeName","src":"3414:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1457,"mutability":"mutable","name":"userData","nameLocation":"3460:8:21","nodeType":"VariableDeclaration","scope":1462,"src":"3447:21:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1456,"name":"bytes","nodeType":"ElementaryTypeName","src":"3447:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3413:56:21"},"returnParameters":{"id":1461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1460,"mutability":"mutable","name":"success","nameLocation":"3493:7:21","nodeType":"VariableDeclaration","scope":1462,"src":"3488:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1459,"name":"bool","nodeType":"ElementaryTypeName","src":"3488:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3487:14:21"},"scope":1617,"src":"3386:116:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1463,"nodeType":"StructuredDocumentation","src":"3508:563:21","text":" @notice Hook to be executed after pool initialization.\n @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param bptAmountOut Amount of pool tokens minted during initialization\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool accepts the initialization results"},"functionSelector":"38be241d","id":1475,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterInitialize","nameLocation":"4085:17:21","nodeType":"FunctionDefinition","parameters":{"id":1471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1466,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"4129:14:21","nodeType":"VariableDeclaration","scope":1475,"src":"4112:31:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1464,"name":"uint256","nodeType":"ElementaryTypeName","src":"4112:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1465,"nodeType":"ArrayTypeName","src":"4112:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1468,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4161:12:21","nodeType":"VariableDeclaration","scope":1475,"src":"4153:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1467,"name":"uint256","nodeType":"ElementaryTypeName","src":"4153:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1470,"mutability":"mutable","name":"userData","nameLocation":"4196:8:21","nodeType":"VariableDeclaration","scope":1475,"src":"4183:21:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1469,"name":"bytes","nodeType":"ElementaryTypeName","src":"4183:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4102:108:21"},"returnParameters":{"id":1474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1473,"mutability":"mutable","name":"success","nameLocation":"4234:7:21","nodeType":"VariableDeclaration","scope":1475,"src":"4229:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1472,"name":"bool","nodeType":"ElementaryTypeName","src":"4229:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4228:14:21"},"scope":1617,"src":"4076:167:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1476,"nodeType":"StructuredDocumentation","src":"4461:953:21","text":" @notice Hook to be executed before adding liquidity.\n @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param maxAmountsInScaled18 Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"45421ec7","id":1498,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeAddLiquidity","nameLocation":"5428:20:21","nodeType":"FunctionDefinition","parameters":{"id":1494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1478,"mutability":"mutable","name":"router","nameLocation":"5466:6:21","nodeType":"VariableDeclaration","scope":1498,"src":"5458:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1477,"name":"address","nodeType":"ElementaryTypeName","src":"5458:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1480,"mutability":"mutable","name":"pool","nameLocation":"5490:4:21","nodeType":"VariableDeclaration","scope":1498,"src":"5482:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1479,"name":"address","nodeType":"ElementaryTypeName","src":"5482:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1483,"mutability":"mutable","name":"kind","nameLocation":"5521:4:21","nodeType":"VariableDeclaration","scope":1498,"src":"5504:21:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4241","typeString":"enum AddLiquidityKind"},"typeName":{"id":1482,"nodeType":"UserDefinedTypeName","pathNode":{"id":1481,"name":"AddLiquidityKind","nameLocations":["5504:16:21"],"nodeType":"IdentifierPath","referencedDeclaration":4241,"src":"5504:16:21"},"referencedDeclaration":4241,"src":"5504:16:21","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4241","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1486,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"5552:20:21","nodeType":"VariableDeclaration","scope":1498,"src":"5535:37:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1484,"name":"uint256","nodeType":"ElementaryTypeName","src":"5535:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1485,"nodeType":"ArrayTypeName","src":"5535:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1488,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"5590:15:21","nodeType":"VariableDeclaration","scope":1498,"src":"5582:23:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1487,"name":"uint256","nodeType":"ElementaryTypeName","src":"5582:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1491,"mutability":"mutable","name":"balancesScaled18","nameLocation":"5632:16:21","nodeType":"VariableDeclaration","scope":1498,"src":"5615:33:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1489,"name":"uint256","nodeType":"ElementaryTypeName","src":"5615:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1490,"nodeType":"ArrayTypeName","src":"5615:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1493,"mutability":"mutable","name":"userData","nameLocation":"5671:8:21","nodeType":"VariableDeclaration","scope":1498,"src":"5658:21:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1492,"name":"bytes","nodeType":"ElementaryTypeName","src":"5658:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5448:237:21"},"returnParameters":{"id":1497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1496,"mutability":"mutable","name":"success","nameLocation":"5709:7:21","nodeType":"VariableDeclaration","scope":1498,"src":"5704:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1495,"name":"bool","nodeType":"ElementaryTypeName","src":"5704:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5703:14:21"},"scope":1617,"src":"5419:299:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1499,"nodeType":"StructuredDocumentation","src":"5724:1250:21","text":" @notice Hook to be executed after adding liquidity.\n @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n @param bptAmountOut Amount of pool tokens minted\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook"},"functionSelector":"976907cc","id":1527,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterAddLiquidity","nameLocation":"6988:19:21","nodeType":"FunctionDefinition","parameters":{"id":1520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1501,"mutability":"mutable","name":"router","nameLocation":"7025:6:21","nodeType":"VariableDeclaration","scope":1527,"src":"7017:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1500,"name":"address","nodeType":"ElementaryTypeName","src":"7017:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1503,"mutability":"mutable","name":"pool","nameLocation":"7049:4:21","nodeType":"VariableDeclaration","scope":1527,"src":"7041:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1502,"name":"address","nodeType":"ElementaryTypeName","src":"7041:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1506,"mutability":"mutable","name":"kind","nameLocation":"7080:4:21","nodeType":"VariableDeclaration","scope":1527,"src":"7063:21:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4241","typeString":"enum AddLiquidityKind"},"typeName":{"id":1505,"nodeType":"UserDefinedTypeName","pathNode":{"id":1504,"name":"AddLiquidityKind","nameLocations":["7063:16:21"],"nodeType":"IdentifierPath","referencedDeclaration":4241,"src":"7063:16:21"},"referencedDeclaration":4241,"src":"7063:16:21","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4241","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1509,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"7111:17:21","nodeType":"VariableDeclaration","scope":1527,"src":"7094:34:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1507,"name":"uint256","nodeType":"ElementaryTypeName","src":"7094:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1508,"nodeType":"ArrayTypeName","src":"7094:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1512,"mutability":"mutable","name":"amountsInRaw","nameLocation":"7155:12:21","nodeType":"VariableDeclaration","scope":1527,"src":"7138:29:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1510,"name":"uint256","nodeType":"ElementaryTypeName","src":"7138:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1511,"nodeType":"ArrayTypeName","src":"7138:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1514,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7185:12:21","nodeType":"VariableDeclaration","scope":1527,"src":"7177:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1513,"name":"uint256","nodeType":"ElementaryTypeName","src":"7177:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1517,"mutability":"mutable","name":"balancesScaled18","nameLocation":"7224:16:21","nodeType":"VariableDeclaration","scope":1527,"src":"7207:33:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1515,"name":"uint256","nodeType":"ElementaryTypeName","src":"7207:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1516,"nodeType":"ArrayTypeName","src":"7207:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1519,"mutability":"mutable","name":"userData","nameLocation":"7263:8:21","nodeType":"VariableDeclaration","scope":1527,"src":"7250:21:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1518,"name":"bytes","nodeType":"ElementaryTypeName","src":"7250:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7007:270:21"},"returnParameters":{"id":1526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1522,"mutability":"mutable","name":"success","nameLocation":"7301:7:21","nodeType":"VariableDeclaration","scope":1527,"src":"7296:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1521,"name":"bool","nodeType":"ElementaryTypeName","src":"7296:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1525,"mutability":"mutable","name":"hookAdjustedAmountsInRaw","nameLocation":"7327:24:21","nodeType":"VariableDeclaration","scope":1527,"src":"7310:41:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1523,"name":"uint256","nodeType":"ElementaryTypeName","src":"7310:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1524,"nodeType":"ArrayTypeName","src":"7310:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7295:57:21"},"scope":1617,"src":"6979:374:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1528,"nodeType":"StructuredDocumentation","src":"7572:992:21","text":" @notice Hook to be executed before removing liquidity.\n @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"ba5f9f40","id":1550,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeRemoveLiquidity","nameLocation":"8578:23:21","nodeType":"FunctionDefinition","parameters":{"id":1546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1530,"mutability":"mutable","name":"router","nameLocation":"8619:6:21","nodeType":"VariableDeclaration","scope":1550,"src":"8611:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1529,"name":"address","nodeType":"ElementaryTypeName","src":"8611:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1532,"mutability":"mutable","name":"pool","nameLocation":"8643:4:21","nodeType":"VariableDeclaration","scope":1550,"src":"8635:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1531,"name":"address","nodeType":"ElementaryTypeName","src":"8635:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1535,"mutability":"mutable","name":"kind","nameLocation":"8677:4:21","nodeType":"VariableDeclaration","scope":1550,"src":"8657:24:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4262","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":1534,"nodeType":"UserDefinedTypeName","pathNode":{"id":1533,"name":"RemoveLiquidityKind","nameLocations":["8657:19:21"],"nodeType":"IdentifierPath","referencedDeclaration":4262,"src":"8657:19:21"},"referencedDeclaration":4262,"src":"8657:19:21","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4262","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1537,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"8699:14:21","nodeType":"VariableDeclaration","scope":1550,"src":"8691:22:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1536,"name":"uint256","nodeType":"ElementaryTypeName","src":"8691:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1540,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"8740:21:21","nodeType":"VariableDeclaration","scope":1550,"src":"8723:38:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1538,"name":"uint256","nodeType":"ElementaryTypeName","src":"8723:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1539,"nodeType":"ArrayTypeName","src":"8723:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1543,"mutability":"mutable","name":"balancesScaled18","nameLocation":"8788:16:21","nodeType":"VariableDeclaration","scope":1550,"src":"8771:33:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1541,"name":"uint256","nodeType":"ElementaryTypeName","src":"8771:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1542,"nodeType":"ArrayTypeName","src":"8771:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1545,"mutability":"mutable","name":"userData","nameLocation":"8827:8:21","nodeType":"VariableDeclaration","scope":1550,"src":"8814:21:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1544,"name":"bytes","nodeType":"ElementaryTypeName","src":"8814:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8601:240:21"},"returnParameters":{"id":1549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1548,"mutability":"mutable","name":"success","nameLocation":"8865:7:21","nodeType":"VariableDeclaration","scope":1550,"src":"8860:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1547,"name":"bool","nodeType":"ElementaryTypeName","src":"8860:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8859:14:21"},"scope":1617,"src":"8569:305:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1551,"nodeType":"StructuredDocumentation","src":"8880:1276:21","text":" @notice Hook to be executed after removing liquidity.\n @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param bptAmountIn Amount of pool tokens to burn\n @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook"},"functionSelector":"2754888d","id":1579,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterRemoveLiquidity","nameLocation":"10170:22:21","nodeType":"FunctionDefinition","parameters":{"id":1572,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1553,"mutability":"mutable","name":"router","nameLocation":"10210:6:21","nodeType":"VariableDeclaration","scope":1579,"src":"10202:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1552,"name":"address","nodeType":"ElementaryTypeName","src":"10202:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1555,"mutability":"mutable","name":"pool","nameLocation":"10234:4:21","nodeType":"VariableDeclaration","scope":1579,"src":"10226:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1554,"name":"address","nodeType":"ElementaryTypeName","src":"10226:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1558,"mutability":"mutable","name":"kind","nameLocation":"10268:4:21","nodeType":"VariableDeclaration","scope":1579,"src":"10248:24:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4262","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":1557,"nodeType":"UserDefinedTypeName","pathNode":{"id":1556,"name":"RemoveLiquidityKind","nameLocations":["10248:19:21"],"nodeType":"IdentifierPath","referencedDeclaration":4262,"src":"10248:19:21"},"referencedDeclaration":4262,"src":"10248:19:21","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4262","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1560,"mutability":"mutable","name":"bptAmountIn","nameLocation":"10290:11:21","nodeType":"VariableDeclaration","scope":1579,"src":"10282:19:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1559,"name":"uint256","nodeType":"ElementaryTypeName","src":"10282:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1563,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"10328:18:21","nodeType":"VariableDeclaration","scope":1579,"src":"10311:35:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1561,"name":"uint256","nodeType":"ElementaryTypeName","src":"10311:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1562,"nodeType":"ArrayTypeName","src":"10311:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1566,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"10373:13:21","nodeType":"VariableDeclaration","scope":1579,"src":"10356:30:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1564,"name":"uint256","nodeType":"ElementaryTypeName","src":"10356:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1565,"nodeType":"ArrayTypeName","src":"10356:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1569,"mutability":"mutable","name":"balancesScaled18","nameLocation":"10413:16:21","nodeType":"VariableDeclaration","scope":1579,"src":"10396:33:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1567,"name":"uint256","nodeType":"ElementaryTypeName","src":"10396:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1568,"nodeType":"ArrayTypeName","src":"10396:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1571,"mutability":"mutable","name":"userData","nameLocation":"10452:8:21","nodeType":"VariableDeclaration","scope":1579,"src":"10439:21:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1570,"name":"bytes","nodeType":"ElementaryTypeName","src":"10439:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10192:274:21"},"returnParameters":{"id":1578,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1574,"mutability":"mutable","name":"success","nameLocation":"10490:7:21","nodeType":"VariableDeclaration","scope":1579,"src":"10485:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1573,"name":"bool","nodeType":"ElementaryTypeName","src":"10485:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1577,"mutability":"mutable","name":"hookAdjustedAmountsOutRaw","nameLocation":"10516:25:21","nodeType":"VariableDeclaration","scope":1579,"src":"10499:42:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1575,"name":"uint256","nodeType":"ElementaryTypeName","src":"10499:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1576,"nodeType":"ArrayTypeName","src":"10499:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10484:58:21"},"scope":1617,"src":"10161:382:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1580,"nodeType":"StructuredDocumentation","src":"10753:556:21","text":" @notice Called before a swap to give the Pool an opportunity to perform actions.\n @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"5211fa77","id":1590,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeSwap","nameLocation":"11323:12:21","nodeType":"FunctionDefinition","parameters":{"id":1586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1583,"mutability":"mutable","name":"params","nameLocation":"11360:6:21","nodeType":"VariableDeclaration","scope":1590,"src":"11336:30:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4206_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":1582,"nodeType":"UserDefinedTypeName","pathNode":{"id":1581,"name":"PoolSwapParams","nameLocations":["11336:14:21"],"nodeType":"IdentifierPath","referencedDeclaration":4206,"src":"11336:14:21"},"referencedDeclaration":4206,"src":"11336:14:21","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4206_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":1585,"mutability":"mutable","name":"pool","nameLocation":"11376:4:21","nodeType":"VariableDeclaration","scope":1590,"src":"11368:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1584,"name":"address","nodeType":"ElementaryTypeName","src":"11368:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11335:46:21"},"returnParameters":{"id":1589,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1588,"mutability":"mutable","name":"success","nameLocation":"11405:7:21","nodeType":"VariableDeclaration","scope":1590,"src":"11400:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1587,"name":"bool","nodeType":"ElementaryTypeName","src":"11400:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11399:14:21"},"scope":1617,"src":"11314:100:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1591,"nodeType":"StructuredDocumentation","src":"11420:671:21","text":" @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n use the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see above for struct definition)\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook"},"functionSelector":"18b6eb55","id":1601,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterSwap","nameLocation":"12105:11:21","nodeType":"FunctionDefinition","parameters":{"id":1595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1594,"mutability":"mutable","name":"params","nameLocation":"12151:6:21","nodeType":"VariableDeclaration","scope":1601,"src":"12126:31:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4235_calldata_ptr","typeString":"struct AfterSwapParams"},"typeName":{"id":1593,"nodeType":"UserDefinedTypeName","pathNode":{"id":1592,"name":"AfterSwapParams","nameLocations":["12126:15:21"],"nodeType":"IdentifierPath","referencedDeclaration":4235,"src":"12126:15:21"},"referencedDeclaration":4235,"src":"12126:15:21","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4235_storage_ptr","typeString":"struct AfterSwapParams"}},"visibility":"internal"}],"src":"12116:47:21"},"returnParameters":{"id":1600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1597,"mutability":"mutable","name":"success","nameLocation":"12187:7:21","nodeType":"VariableDeclaration","scope":1601,"src":"12182:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1596,"name":"bool","nodeType":"ElementaryTypeName","src":"12182:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1599,"mutability":"mutable","name":"hookAdjustedAmountCalculatedRaw","nameLocation":"12204:31:21","nodeType":"VariableDeclaration","scope":1601,"src":"12196:39:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1598,"name":"uint256","nodeType":"ElementaryTypeName","src":"12196:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12181:55:21"},"scope":1617,"src":"12096:141:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1602,"nodeType":"StructuredDocumentation","src":"12243:795:21","text":" @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n @return success True if the pool wishes to proceed with settlement\n @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value"},"functionSelector":"a0e8f5ac","id":1616,"implemented":false,"kind":"function","modifiers":[],"name":"onComputeDynamicSwapFeePercentage","nameLocation":"13052:33:21","nodeType":"FunctionDefinition","parameters":{"id":1610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1605,"mutability":"mutable","name":"params","nameLocation":"13119:6:21","nodeType":"VariableDeclaration","scope":1616,"src":"13095:30:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4206_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":1604,"nodeType":"UserDefinedTypeName","pathNode":{"id":1603,"name":"PoolSwapParams","nameLocations":["13095:14:21"],"nodeType":"IdentifierPath","referencedDeclaration":4206,"src":"13095:14:21"},"referencedDeclaration":4206,"src":"13095:14:21","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4206_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":1607,"mutability":"mutable","name":"pool","nameLocation":"13143:4:21","nodeType":"VariableDeclaration","scope":1616,"src":"13135:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1606,"name":"address","nodeType":"ElementaryTypeName","src":"13135:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1609,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"13165:23:21","nodeType":"VariableDeclaration","scope":1616,"src":"13157:31:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1608,"name":"uint256","nodeType":"ElementaryTypeName","src":"13157:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13085:109:21"},"returnParameters":{"id":1615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1612,"mutability":"mutable","name":"success","nameLocation":"13223:7:21","nodeType":"VariableDeclaration","scope":1616,"src":"13218:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1611,"name":"bool","nodeType":"ElementaryTypeName","src":"13218:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1614,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"13240:24:21","nodeType":"VariableDeclaration","scope":1616,"src":"13232:32:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1613,"name":"uint256","nodeType":"ElementaryTypeName","src":"13232:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13217:48:21"},"scope":1617,"src":"13043:223:21","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1618,"src":"975:12293:21","usedErrors":[],"usedEvents":[]}],"src":"46:13223:21"},"id":21},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","exportedSymbols":{"IERC20":[10576],"IProtocolFeeController":[1955],"IVault":[2545]},"id":1956,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1619,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:22"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1621,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1956,"sourceUnit":10577,"src":"72:72:22","symbolAliases":[{"foreign":{"id":1620,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":1623,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1956,"sourceUnit":2546,"src":"146:38:22","symbolAliases":[{"foreign":{"id":1622,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"155:6:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeController","contractDependencies":[],"contractKind":"interface","documentation":{"id":1624,"nodeType":"StructuredDocumentation","src":"186:80:22","text":"@notice Contract that handles protocol and pool creator fees for the Vault."},"fullyImplemented":false,"id":1955,"linearizedBaseContracts":[1955],"name":"IProtocolFeeController","nameLocation":"276:22:22","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1625,"nodeType":"StructuredDocumentation","src":"305:157:22","text":" @notice Emitted when the protocol swap fee percentage is updated.\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"bf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d","id":1629,"name":"GlobalProtocolSwapFeePercentageChanged","nameLocation":"473:38:22","nodeType":"EventDefinition","parameters":{"id":1628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1627,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"520:17:22","nodeType":"VariableDeclaration","scope":1629,"src":"512:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1626,"name":"uint256","nodeType":"ElementaryTypeName","src":"512:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"511:27:22"},"src":"467:72:22"},{"anonymous":false,"documentation":{"id":1630,"nodeType":"StructuredDocumentation","src":"545:160:22","text":" @notice Emitted when the protocol yield fee percentage is updated.\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6","id":1634,"name":"GlobalProtocolYieldFeePercentageChanged","nameLocation":"716:39:22","nodeType":"EventDefinition","parameters":{"id":1633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1632,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"764:18:22","nodeType":"VariableDeclaration","scope":1634,"src":"756:26:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1631,"name":"uint256","nodeType":"ElementaryTypeName","src":"756:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"755:28:22"},"src":"710:74:22"},{"anonymous":false,"documentation":{"id":1635,"nodeType":"StructuredDocumentation","src":"790:245:22","text":" @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n @param pool The pool whose protocol swap fee will be changed\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e","id":1641,"name":"ProtocolSwapFeePercentageChanged","nameLocation":"1046:32:22","nodeType":"EventDefinition","parameters":{"id":1640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1637,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1095:4:22","nodeType":"VariableDeclaration","scope":1641,"src":"1079:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1636,"name":"address","nodeType":"ElementaryTypeName","src":"1079:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1639,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1109:17:22","nodeType":"VariableDeclaration","scope":1641,"src":"1101:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1638,"name":"uint256","nodeType":"ElementaryTypeName","src":"1101:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1078:49:22"},"src":"1040:88:22"},{"anonymous":false,"documentation":{"id":1642,"nodeType":"StructuredDocumentation","src":"1134:249:22","text":" @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n @param pool The pool whose protocol yield fee will be changed\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"af47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd","id":1648,"name":"ProtocolYieldFeePercentageChanged","nameLocation":"1394:33:22","nodeType":"EventDefinition","parameters":{"id":1647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1644,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1444:4:22","nodeType":"VariableDeclaration","scope":1648,"src":"1428:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1643,"name":"address","nodeType":"ElementaryTypeName","src":"1428:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1646,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"1458:18:22","nodeType":"VariableDeclaration","scope":1648,"src":"1450:26:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1645,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1427:50:22"},"src":"1388:90:22"},{"anonymous":false,"documentation":{"id":1649,"nodeType":"StructuredDocumentation","src":"1484:267:22","text":" @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n @param pool The pool whose pool creator swap fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool"},"eventSelector":"b7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c","id":1655,"name":"PoolCreatorSwapFeePercentageChanged","nameLocation":"1762:35:22","nodeType":"EventDefinition","parameters":{"id":1654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1651,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1814:4:22","nodeType":"VariableDeclaration","scope":1655,"src":"1798:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1650,"name":"address","nodeType":"ElementaryTypeName","src":"1798:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1653,"indexed":false,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"1828:28:22","nodeType":"VariableDeclaration","scope":1655,"src":"1820:36:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1652,"name":"uint256","nodeType":"ElementaryTypeName","src":"1820:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1797:60:22"},"src":"1756:102:22"},{"anonymous":false,"documentation":{"id":1656,"nodeType":"StructuredDocumentation","src":"1864:271:22","text":" @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n @param pool The pool whose pool creator yield fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool"},"eventSelector":"47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34","id":1662,"name":"PoolCreatorYieldFeePercentageChanged","nameLocation":"2146:36:22","nodeType":"EventDefinition","parameters":{"id":1661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1658,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2199:4:22","nodeType":"VariableDeclaration","scope":1662,"src":"2183:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1657,"name":"address","nodeType":"ElementaryTypeName","src":"2183:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1660,"indexed":false,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"2213:29:22","nodeType":"VariableDeclaration","scope":1662,"src":"2205:37:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1659,"name":"uint256","nodeType":"ElementaryTypeName","src":"2205:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2182:61:22"},"src":"2140:104:22"},{"anonymous":false,"documentation":{"id":1663,"nodeType":"StructuredDocumentation","src":"2250:560:22","text":" @notice Logs the collection of protocol swap fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n multiple operations.\n @param pool The pool on which the swap fee was charged\n @param token The token in which the swap fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"ae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f","id":1672,"name":"ProtocolSwapFeeCollected","nameLocation":"2821:24:22","nodeType":"EventDefinition","parameters":{"id":1671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1665,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2862:4:22","nodeType":"VariableDeclaration","scope":1672,"src":"2846:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1664,"name":"address","nodeType":"ElementaryTypeName","src":"2846:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1668,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"2883:5:22","nodeType":"VariableDeclaration","scope":1672,"src":"2868:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1667,"nodeType":"UserDefinedTypeName","pathNode":{"id":1666,"name":"IERC20","nameLocations":["2868:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2868:6:22"},"referencedDeclaration":10576,"src":"2868:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1670,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2898:6:22","nodeType":"VariableDeclaration","scope":1672,"src":"2890:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1669,"name":"uint256","nodeType":"ElementaryTypeName","src":"2890:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2845:60:22"},"src":"2815:91:22"},{"anonymous":false,"documentation":{"id":1673,"nodeType":"StructuredDocumentation","src":"2912:564:22","text":" @notice Logs the collection of protocol yield fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n multiple operations.\n @param pool The pool on which the yield fee was charged\n @param token The token in which the yield fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"e505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e2","id":1682,"name":"ProtocolYieldFeeCollected","nameLocation":"3487:25:22","nodeType":"EventDefinition","parameters":{"id":1681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1675,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3529:4:22","nodeType":"VariableDeclaration","scope":1682,"src":"3513:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1674,"name":"address","nodeType":"ElementaryTypeName","src":"3513:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1678,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3550:5:22","nodeType":"VariableDeclaration","scope":1682,"src":"3535:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1677,"nodeType":"UserDefinedTypeName","pathNode":{"id":1676,"name":"IERC20","nameLocations":["3535:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3535:6:22"},"referencedDeclaration":10576,"src":"3535:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1680,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"3565:6:22","nodeType":"VariableDeclaration","scope":1682,"src":"3557:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1679,"name":"uint256","nodeType":"ElementaryTypeName","src":"3557:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3512:60:22"},"src":"3481:92:22"},{"anonymous":false,"documentation":{"id":1683,"nodeType":"StructuredDocumentation","src":"3579:333:22","text":" @notice Logs the withdrawal of protocol fees in a specific token and amount.\n @param pool The pool from which protocol fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b5","id":1694,"name":"ProtocolFeesWithdrawn","nameLocation":"3923:21:22","nodeType":"EventDefinition","parameters":{"id":1693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1685,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3961:4:22","nodeType":"VariableDeclaration","scope":1694,"src":"3945:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1684,"name":"address","nodeType":"ElementaryTypeName","src":"3945:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1688,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3982:5:22","nodeType":"VariableDeclaration","scope":1694,"src":"3967:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1687,"nodeType":"UserDefinedTypeName","pathNode":{"id":1686,"name":"IERC20","nameLocations":["3967:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3967:6:22"},"referencedDeclaration":10576,"src":"3967:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1690,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4005:9:22","nodeType":"VariableDeclaration","scope":1694,"src":"3989:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1689,"name":"address","nodeType":"ElementaryTypeName","src":"3989:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1692,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4024:6:22","nodeType":"VariableDeclaration","scope":1694,"src":"4016:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1691,"name":"uint256","nodeType":"ElementaryTypeName","src":"4016:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3944:87:22"},"src":"3917:115:22"},{"anonymous":false,"documentation":{"id":1695,"nodeType":"StructuredDocumentation","src":"4038:398:22","text":" @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n @param pool The pool from which pool creator fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f9","id":1706,"name":"PoolCreatorFeesWithdrawn","nameLocation":"4447:24:22","nodeType":"EventDefinition","parameters":{"id":1705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1697,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4497:4:22","nodeType":"VariableDeclaration","scope":1706,"src":"4481:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1696,"name":"address","nodeType":"ElementaryTypeName","src":"4481:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1700,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"4526:5:22","nodeType":"VariableDeclaration","scope":1706,"src":"4511:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1699,"nodeType":"UserDefinedTypeName","pathNode":{"id":1698,"name":"IERC20","nameLocations":["4511:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4511:6:22"},"referencedDeclaration":10576,"src":"4511:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1702,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4557:9:22","nodeType":"VariableDeclaration","scope":1706,"src":"4541:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1701,"name":"address","nodeType":"ElementaryTypeName","src":"4541:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1704,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4584:6:22","nodeType":"VariableDeclaration","scope":1706,"src":"4576:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1703,"name":"uint256","nodeType":"ElementaryTypeName","src":"4576:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4471:125:22"},"src":"4441:156:22"},{"anonymous":false,"documentation":{"id":1707,"nodeType":"StructuredDocumentation","src":"4603:529:22","text":" @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global swap fee percentage.\n @param pool The pool being registered\n @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"a34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a78564","id":1715,"name":"InitialPoolAggregateSwapFeePercentage","nameLocation":"5143:37:22","nodeType":"EventDefinition","parameters":{"id":1714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1709,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5206:4:22","nodeType":"VariableDeclaration","scope":1715,"src":"5190:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1708,"name":"address","nodeType":"ElementaryTypeName","src":"5190:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1711,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"5228:26:22","nodeType":"VariableDeclaration","scope":1715,"src":"5220:34:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1710,"name":"uint256","nodeType":"ElementaryTypeName","src":"5220:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1713,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5269:19:22","nodeType":"VariableDeclaration","scope":1715,"src":"5264:24:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1712,"name":"bool","nodeType":"ElementaryTypeName","src":"5264:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5180:114:22"},"src":"5137:158:22"},{"anonymous":false,"documentation":{"id":1716,"nodeType":"StructuredDocumentation","src":"5301:533:22","text":" @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global yield fee percentage.\n @param pool The pool being registered\n @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"ce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb","id":1724,"name":"InitialPoolAggregateYieldFeePercentage","nameLocation":"5845:38:22","nodeType":"EventDefinition","parameters":{"id":1723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1718,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5909:4:22","nodeType":"VariableDeclaration","scope":1724,"src":"5893:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1717,"name":"address","nodeType":"ElementaryTypeName","src":"5893:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1720,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"5931:27:22","nodeType":"VariableDeclaration","scope":1724,"src":"5923:35:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1719,"name":"uint256","nodeType":"ElementaryTypeName","src":"5923:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1722,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5973:19:22","nodeType":"VariableDeclaration","scope":1724,"src":"5968:24:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1721,"name":"bool","nodeType":"ElementaryTypeName","src":"5968:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5883:115:22"},"src":"5839:160:22"},{"anonymous":false,"documentation":{"id":1725,"nodeType":"StructuredDocumentation","src":"6005:738:22","text":" @notice Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\n @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n @param protocolFeeExempt True if the pool is initially exempt from protocol fees"},"eventSelector":"d9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed07912","id":1733,"name":"PoolRegisteredWithFeeController","nameLocation":"6754:31:22","nodeType":"EventDefinition","parameters":{"id":1732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1727,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6802:4:22","nodeType":"VariableDeclaration","scope":1733,"src":"6786:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1726,"name":"address","nodeType":"ElementaryTypeName","src":"6786:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1729,"indexed":true,"mutability":"mutable","name":"poolCreator","nameLocation":"6824:11:22","nodeType":"VariableDeclaration","scope":1733,"src":"6808:27:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1728,"name":"address","nodeType":"ElementaryTypeName","src":"6808:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1731,"indexed":false,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6842:17:22","nodeType":"VariableDeclaration","scope":1733,"src":"6837:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1730,"name":"bool","nodeType":"ElementaryTypeName","src":"6837:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6785:75:22"},"src":"6748:113:22"},{"documentation":{"id":1734,"nodeType":"StructuredDocumentation","src":"6867:219:22","text":" @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages."},"errorSelector":"7e6eb7fb","id":1736,"name":"ProtocolSwapFeePercentageTooHigh","nameLocation":"7097:32:22","nodeType":"ErrorDefinition","parameters":{"id":1735,"nodeType":"ParameterList","parameters":[],"src":"7129:2:22"},"src":"7091:41:22"},{"documentation":{"id":1737,"nodeType":"StructuredDocumentation","src":"7138:221:22","text":" @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages."},"errorSelector":"a7849e8e","id":1739,"name":"ProtocolYieldFeePercentageTooHigh","nameLocation":"7370:33:22","nodeType":"ErrorDefinition","parameters":{"id":1738,"nodeType":"ParameterList","parameters":[],"src":"7403:2:22"},"src":"7364:42:22"},{"documentation":{"id":1740,"nodeType":"StructuredDocumentation","src":"7412:156:22","text":" @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n @param pool The pool with no creator"},"errorSelector":"8bcbf353","id":1744,"name":"PoolCreatorNotRegistered","nameLocation":"7579:24:22","nodeType":"ErrorDefinition","parameters":{"id":1743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1742,"mutability":"mutable","name":"pool","nameLocation":"7612:4:22","nodeType":"VariableDeclaration","scope":1744,"src":"7604:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1741,"name":"address","nodeType":"ElementaryTypeName","src":"7604:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7603:14:22"},"src":"7573:45:22"},{"documentation":{"id":1745,"nodeType":"StructuredDocumentation","src":"7624:236:22","text":" @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n @param caller The account attempting to withdraw pool creator fees\n @param pool The pool the caller tried to withdraw from"},"errorSelector":"fbecdbf4","id":1751,"name":"CallerIsNotPoolCreator","nameLocation":"7871:22:22","nodeType":"ErrorDefinition","parameters":{"id":1750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1747,"mutability":"mutable","name":"caller","nameLocation":"7902:6:22","nodeType":"VariableDeclaration","scope":1751,"src":"7894:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1746,"name":"address","nodeType":"ElementaryTypeName","src":"7894:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1749,"mutability":"mutable","name":"pool","nameLocation":"7918:4:22","nodeType":"VariableDeclaration","scope":1751,"src":"7910:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1748,"name":"address","nodeType":"ElementaryTypeName","src":"7910:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7893:30:22"},"src":"7865:59:22"},{"documentation":{"id":1752,"nodeType":"StructuredDocumentation","src":"7930:110:22","text":"@notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value."},"errorSelector":"0370da74","id":1754,"name":"PoolCreatorFeePercentageTooHigh","nameLocation":"8051:31:22","nodeType":"ErrorDefinition","parameters":{"id":1753,"nodeType":"ParameterList","parameters":[],"src":"8082:2:22"},"src":"8045:40:22"},{"documentation":{"id":1755,"nodeType":"StructuredDocumentation","src":"8091:109:22","text":" @notice Get the address of the main Vault contract.\n @return vault The Vault address"},"functionSelector":"fbfa77cf","id":1761,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"8214:5:22","nodeType":"FunctionDefinition","parameters":{"id":1756,"nodeType":"ParameterList","parameters":[],"src":"8219:2:22"},"returnParameters":{"id":1760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1759,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1761,"src":"8245:6:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":1758,"nodeType":"UserDefinedTypeName","pathNode":{"id":1757,"name":"IVault","nameLocations":["8245:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"8245:6:22"},"referencedDeclaration":2545,"src":"8245:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8244:8:22"},"scope":1955,"src":"8205:48:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1762,"nodeType":"StructuredDocumentation","src":"8259:131:22","text":" @notice Collects aggregate fees from the Vault for a given pool.\n @param pool The pool with aggregate fees"},"functionSelector":"8f4ab9ca","id":1767,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"8404:20:22","nodeType":"FunctionDefinition","parameters":{"id":1765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1764,"mutability":"mutable","name":"pool","nameLocation":"8433:4:22","nodeType":"VariableDeclaration","scope":1767,"src":"8425:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1763,"name":"address","nodeType":"ElementaryTypeName","src":"8425:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8424:14:22"},"returnParameters":{"id":1766,"nodeType":"ParameterList","parameters":[],"src":"8447:0:22"},"scope":1955,"src":"8395:53:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1768,"nodeType":"StructuredDocumentation","src":"8454:156:22","text":" @notice Getter for the current global protocol swap fee.\n @return protocolSwapFeePercentage The global protocol swap fee percentage"},"functionSelector":"7869ee18","id":1773,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"8624:34:22","nodeType":"FunctionDefinition","parameters":{"id":1769,"nodeType":"ParameterList","parameters":[],"src":"8658:2:22"},"returnParameters":{"id":1772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1771,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"8692:25:22","nodeType":"VariableDeclaration","scope":1773,"src":"8684:33:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1770,"name":"uint256","nodeType":"ElementaryTypeName","src":"8684:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8683:35:22"},"scope":1955,"src":"8615:104:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1774,"nodeType":"StructuredDocumentation","src":"8725:159:22","text":" @notice Getter for the current global protocol yield fee.\n @return protocolYieldFeePercentage The global protocol yield fee percentage"},"functionSelector":"55fb76af","id":1779,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"8898:35:22","nodeType":"FunctionDefinition","parameters":{"id":1775,"nodeType":"ParameterList","parameters":[],"src":"8933:2:22"},"returnParameters":{"id":1778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1777,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"8967:26:22","nodeType":"VariableDeclaration","scope":1779,"src":"8959:34:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1776,"name":"uint256","nodeType":"ElementaryTypeName","src":"8959:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8958:36:22"},"scope":1955,"src":"8889:106:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1780,"nodeType":"StructuredDocumentation","src":"9001:207:22","text":" @notice Getter for pool registration flag.\n @param pool The address of the pool\n @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)"},"functionSelector":"c673bdaf","id":1787,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"9222:16:22","nodeType":"FunctionDefinition","parameters":{"id":1783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1782,"mutability":"mutable","name":"pool","nameLocation":"9247:4:22","nodeType":"VariableDeclaration","scope":1787,"src":"9239:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1781,"name":"address","nodeType":"ElementaryTypeName","src":"9239:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9238:14:22"},"returnParameters":{"id":1786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1785,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1787,"src":"9276:4:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1784,"name":"bool","nodeType":"ElementaryTypeName","src":"9276:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9275:6:22"},"scope":1955,"src":"9213:69:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1788,"nodeType":"StructuredDocumentation","src":"9288:292:22","text":" @notice Getter for the current protocol swap fee for a given pool.\n @param pool The address of the pool\n @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"5c15a0b4","id":1797,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"9594:26:22","nodeType":"FunctionDefinition","parameters":{"id":1791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1790,"mutability":"mutable","name":"pool","nameLocation":"9638:4:22","nodeType":"VariableDeclaration","scope":1797,"src":"9630:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1789,"name":"address","nodeType":"ElementaryTypeName","src":"9630:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9620:28:22"},"returnParameters":{"id":1796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1793,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"9680:25:22","nodeType":"VariableDeclaration","scope":1797,"src":"9672:33:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1792,"name":"uint256","nodeType":"ElementaryTypeName","src":"9672:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1795,"mutability":"mutable","name":"isOverride","nameLocation":"9712:10:22","nodeType":"VariableDeclaration","scope":1797,"src":"9707:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1794,"name":"bool","nodeType":"ElementaryTypeName","src":"9707:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9671:52:22"},"scope":1955,"src":"9585:139:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1798,"nodeType":"StructuredDocumentation","src":"9730:295:22","text":" @notice Getter for the current protocol yield fee for a given pool.\n @param pool The address of the pool\n @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"7a2b97dc","id":1807,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"10039:27:22","nodeType":"FunctionDefinition","parameters":{"id":1801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1800,"mutability":"mutable","name":"pool","nameLocation":"10084:4:22","nodeType":"VariableDeclaration","scope":1807,"src":"10076:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1799,"name":"address","nodeType":"ElementaryTypeName","src":"10076:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10066:28:22"},"returnParameters":{"id":1806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1803,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"10126:26:22","nodeType":"VariableDeclaration","scope":1807,"src":"10118:34:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1802,"name":"uint256","nodeType":"ElementaryTypeName","src":"10118:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1805,"mutability":"mutable","name":"isOverride","nameLocation":"10159:10:22","nodeType":"VariableDeclaration","scope":1807,"src":"10154:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1804,"name":"bool","nodeType":"ElementaryTypeName","src":"10154:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10117:53:22"},"scope":1955,"src":"10030:141:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1808,"nodeType":"StructuredDocumentation","src":"10177:249:22","text":" @notice Getter for the current pool creator swap fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee"},"functionSelector":"0b8e059b","id":1815,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorSwapFeePercentage","nameLocation":"10440:31:22","nodeType":"FunctionDefinition","parameters":{"id":1811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1810,"mutability":"mutable","name":"pool","nameLocation":"10480:4:22","nodeType":"VariableDeclaration","scope":1815,"src":"10472:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1809,"name":"address","nodeType":"ElementaryTypeName","src":"10472:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10471:14:22"},"returnParameters":{"id":1814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1813,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1815,"src":"10509:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1812,"name":"uint256","nodeType":"ElementaryTypeName","src":"10509:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10508:9:22"},"scope":1955,"src":"10431:87:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1816,"nodeType":"StructuredDocumentation","src":"10524:252:22","text":" @notice Getter for the current pool creator yield fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee"},"functionSelector":"0252aab5","id":1823,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorYieldFeePercentage","nameLocation":"10790:32:22","nodeType":"FunctionDefinition","parameters":{"id":1819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1818,"mutability":"mutable","name":"pool","nameLocation":"10831:4:22","nodeType":"VariableDeclaration","scope":1823,"src":"10823:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1817,"name":"address","nodeType":"ElementaryTypeName","src":"10823:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10822:14:22"},"returnParameters":{"id":1822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1821,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1823,"src":"10860:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1820,"name":"uint256","nodeType":"ElementaryTypeName","src":"10860:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10859:9:22"},"scope":1955,"src":"10781:88:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1824,"nodeType":"StructuredDocumentation","src":"10875:344:22","text":" @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"8df44c54","id":1832,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"11233:21:22","nodeType":"FunctionDefinition","parameters":{"id":1827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1826,"mutability":"mutable","name":"pool","nameLocation":"11263:4:22","nodeType":"VariableDeclaration","scope":1832,"src":"11255:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1825,"name":"address","nodeType":"ElementaryTypeName","src":"11255:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11254:14:22"},"returnParameters":{"id":1831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1830,"mutability":"mutable","name":"feeAmounts","nameLocation":"11309:10:22","nodeType":"VariableDeclaration","scope":1832,"src":"11292:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1828,"name":"uint256","nodeType":"ElementaryTypeName","src":"11292:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1829,"nodeType":"ArrayTypeName","src":"11292:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11291:29:22"},"scope":1955,"src":"11224:97:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1833,"nodeType":"StructuredDocumentation","src":"11327:348:22","text":" @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"9e95f3fd","id":1841,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"11689:24:22","nodeType":"FunctionDefinition","parameters":{"id":1836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1835,"mutability":"mutable","name":"pool","nameLocation":"11722:4:22","nodeType":"VariableDeclaration","scope":1841,"src":"11714:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1834,"name":"address","nodeType":"ElementaryTypeName","src":"11714:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11713:14:22"},"returnParameters":{"id":1840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1839,"mutability":"mutable","name":"feeAmounts","nameLocation":"11768:10:22","nodeType":"VariableDeclaration","scope":1841,"src":"11751:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1837,"name":"uint256","nodeType":"ElementaryTypeName","src":"11751:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1838,"nodeType":"ArrayTypeName","src":"11751:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11750:29:22"},"scope":1955,"src":"11680:100:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1842,"nodeType":"StructuredDocumentation","src":"11786:1445:22","text":" @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n components, but the truncation ensures it will not revert for any valid set of fee percentages.\n See example below:\n tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n @return aggregateFeePercentage The computed aggregate percentage"},"functionSelector":"0ddd60c6","id":1851,"implemented":false,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"13245:29:22","nodeType":"FunctionDefinition","parameters":{"id":1847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1844,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"13292:21:22","nodeType":"VariableDeclaration","scope":1851,"src":"13284:29:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1843,"name":"uint256","nodeType":"ElementaryTypeName","src":"13284:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1846,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"13331:24:22","nodeType":"VariableDeclaration","scope":1851,"src":"13323:32:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1845,"name":"uint256","nodeType":"ElementaryTypeName","src":"13323:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13274:87:22"},"returnParameters":{"id":1850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1849,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"13393:22:22","nodeType":"VariableDeclaration","scope":1851,"src":"13385:30:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1848,"name":"uint256","nodeType":"ElementaryTypeName","src":"13385:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13384:32:22"},"scope":1955,"src":"13236:181:22","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":1852,"nodeType":"StructuredDocumentation","src":"13423:398:22","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol swap fee"},"functionSelector":"71ecc8fb","id":1857,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolSwapFeePercentage","nameLocation":"13835:31:22","nodeType":"FunctionDefinition","parameters":{"id":1855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1854,"mutability":"mutable","name":"pool","nameLocation":"13875:4:22","nodeType":"VariableDeclaration","scope":1857,"src":"13867:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1853,"name":"address","nodeType":"ElementaryTypeName","src":"13867:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13866:14:22"},"returnParameters":{"id":1856,"nodeType":"ParameterList","parameters":[],"src":"13889:0:22"},"scope":1955,"src":"13826:64:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1858,"nodeType":"StructuredDocumentation","src":"13896:400:22","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol yield fee"},"functionSelector":"71447ea8","id":1863,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolYieldFeePercentage","nameLocation":"14310:32:22","nodeType":"FunctionDefinition","parameters":{"id":1861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1860,"mutability":"mutable","name":"pool","nameLocation":"14351:4:22","nodeType":"VariableDeclaration","scope":1863,"src":"14343:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1859,"name":"address","nodeType":"ElementaryTypeName","src":"14343:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14342:14:22"},"returnParameters":{"id":1862,"nodeType":"ParameterList","parameters":[],"src":"14365:0:22"},"scope":1955,"src":"14301:65:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1864,"nodeType":"StructuredDocumentation","src":"14590:826:22","text":" @notice Add pool-specific entries to the protocol swap and yield percentages.\n @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n fee percentages, based on an initial pool creator fee of 0.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @return aggregateYieldFeePercentage The initial aggregate yield fee percentage"},"functionSelector":"77ff76e7","id":1877,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"15430:12:22","nodeType":"FunctionDefinition","parameters":{"id":1871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1866,"mutability":"mutable","name":"pool","nameLocation":"15460:4:22","nodeType":"VariableDeclaration","scope":1877,"src":"15452:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1865,"name":"address","nodeType":"ElementaryTypeName","src":"15452:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1868,"mutability":"mutable","name":"poolCreator","nameLocation":"15482:11:22","nodeType":"VariableDeclaration","scope":1877,"src":"15474:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1867,"name":"address","nodeType":"ElementaryTypeName","src":"15474:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1870,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"15508:17:22","nodeType":"VariableDeclaration","scope":1877,"src":"15503:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1869,"name":"bool","nodeType":"ElementaryTypeName","src":"15503:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15442:89:22"},"returnParameters":{"id":1876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1873,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"15558:26:22","nodeType":"VariableDeclaration","scope":1877,"src":"15550:34:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1872,"name":"uint256","nodeType":"ElementaryTypeName","src":"15550:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1875,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"15594:27:22","nodeType":"VariableDeclaration","scope":1877,"src":"15586:35:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1874,"name":"uint256","nodeType":"ElementaryTypeName","src":"15586:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15549:73:22"},"scope":1955,"src":"15421:202:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1878,"nodeType":"StructuredDocumentation","src":"15629:175:22","text":" @notice Set the global protocol swap fee percentage, used by standard pools.\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage"},"functionSelector":"8a3c5c69","id":1883,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"15818:34:22","nodeType":"FunctionDefinition","parameters":{"id":1881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1880,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"15861:28:22","nodeType":"VariableDeclaration","scope":1883,"src":"15853:36:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1879,"name":"uint256","nodeType":"ElementaryTypeName","src":"15853:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15852:38:22"},"returnParameters":{"id":1882,"nodeType":"ParameterList","parameters":[],"src":"15899:0:22"},"scope":1955,"src":"15809:91:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1884,"nodeType":"StructuredDocumentation","src":"15906:178:22","text":" @notice Set the global protocol yield fee percentage, used by standard pools.\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"a93df2a4","id":1889,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"16098:35:22","nodeType":"FunctionDefinition","parameters":{"id":1887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1886,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16142:29:22","nodeType":"VariableDeclaration","scope":1889,"src":"16134:37:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1885,"name":"uint256","nodeType":"ElementaryTypeName","src":"16134:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16133:39:22"},"returnParameters":{"id":1888,"nodeType":"ParameterList","parameters":[],"src":"16181:0:22"},"scope":1955,"src":"16089:93:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1890,"nodeType":"StructuredDocumentation","src":"16188:272:22","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol swap fee\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool"},"functionSelector":"fd267f39","id":1897,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolSwapFeePercentage","nameLocation":"16474:28:22","nodeType":"FunctionDefinition","parameters":{"id":1895,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1892,"mutability":"mutable","name":"pool","nameLocation":"16511:4:22","nodeType":"VariableDeclaration","scope":1897,"src":"16503:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1891,"name":"address","nodeType":"ElementaryTypeName","src":"16503:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1894,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"16525:28:22","nodeType":"VariableDeclaration","scope":1897,"src":"16517:36:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1893,"name":"uint256","nodeType":"ElementaryTypeName","src":"16517:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16502:52:22"},"returnParameters":{"id":1896,"nodeType":"ParameterList","parameters":[],"src":"16563:0:22"},"scope":1955,"src":"16465:99:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1898,"nodeType":"StructuredDocumentation","src":"16570:276:22","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol yield fee\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool"},"functionSelector":"abaa3356","id":1905,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolYieldFeePercentage","nameLocation":"16860:29:22","nodeType":"FunctionDefinition","parameters":{"id":1903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1900,"mutability":"mutable","name":"pool","nameLocation":"16898:4:22","nodeType":"VariableDeclaration","scope":1905,"src":"16890:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1899,"name":"address","nodeType":"ElementaryTypeName","src":"16890:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1902,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16912:29:22","nodeType":"VariableDeclaration","scope":1905,"src":"16904:37:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1901,"name":"uint256","nodeType":"ElementaryTypeName","src":"16904:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16889:53:22"},"returnParameters":{"id":1904,"nodeType":"ParameterList","parameters":[],"src":"16951:0:22"},"scope":1955,"src":"16851:101:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1906,"nodeType":"StructuredDocumentation","src":"16958:623:22","text":" @notice Assigns a new pool creator swap fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool"},"functionSelector":"1377c16c","id":1913,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"17595:31:22","nodeType":"FunctionDefinition","parameters":{"id":1911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1908,"mutability":"mutable","name":"pool","nameLocation":"17635:4:22","nodeType":"VariableDeclaration","scope":1913,"src":"17627:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1907,"name":"address","nodeType":"ElementaryTypeName","src":"17627:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1910,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"17649:28:22","nodeType":"VariableDeclaration","scope":1913,"src":"17641:36:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1909,"name":"uint256","nodeType":"ElementaryTypeName","src":"17641:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17626:52:22"},"returnParameters":{"id":1912,"nodeType":"ParameterList","parameters":[],"src":"17687:0:22"},"scope":1955,"src":"17586:102:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1914,"nodeType":"StructuredDocumentation","src":"17694:626:22","text":" @notice Assigns a new pool creator yield fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool"},"functionSelector":"3af52712","id":1921,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"18334:32:22","nodeType":"FunctionDefinition","parameters":{"id":1919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1916,"mutability":"mutable","name":"pool","nameLocation":"18375:4:22","nodeType":"VariableDeclaration","scope":1921,"src":"18367:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1915,"name":"address","nodeType":"ElementaryTypeName","src":"18367:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1918,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"18389:29:22","nodeType":"VariableDeclaration","scope":1921,"src":"18381:37:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1917,"name":"uint256","nodeType":"ElementaryTypeName","src":"18381:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18366:53:22"},"returnParameters":{"id":1920,"nodeType":"ParameterList","parameters":[],"src":"18428:0:22"},"scope":1955,"src":"18325:104:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1922,"nodeType":"StructuredDocumentation","src":"18435:296:22","text":" @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"cf7b287f","id":1929,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFees","nameLocation":"18745:20:22","nodeType":"FunctionDefinition","parameters":{"id":1927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1924,"mutability":"mutable","name":"pool","nameLocation":"18774:4:22","nodeType":"VariableDeclaration","scope":1929,"src":"18766:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1923,"name":"address","nodeType":"ElementaryTypeName","src":"18766:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1926,"mutability":"mutable","name":"recipient","nameLocation":"18788:9:22","nodeType":"VariableDeclaration","scope":1929,"src":"18780:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1925,"name":"address","nodeType":"ElementaryTypeName","src":"18780:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18765:33:22"},"returnParameters":{"id":1928,"nodeType":"ParameterList","parameters":[],"src":"18807:0:22"},"scope":1955,"src":"18736:72:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1930,"nodeType":"StructuredDocumentation","src":"18814:339:22","text":" @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens\n @param token Token to withdraw"},"functionSelector":"b53a70b2","id":1940,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFeesForToken","nameLocation":"19167:28:22","nodeType":"FunctionDefinition","parameters":{"id":1938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1932,"mutability":"mutable","name":"pool","nameLocation":"19204:4:22","nodeType":"VariableDeclaration","scope":1940,"src":"19196:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1931,"name":"address","nodeType":"ElementaryTypeName","src":"19196:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1934,"mutability":"mutable","name":"recipient","nameLocation":"19218:9:22","nodeType":"VariableDeclaration","scope":1940,"src":"19210:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1933,"name":"address","nodeType":"ElementaryTypeName","src":"19210:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1937,"mutability":"mutable","name":"token","nameLocation":"19236:5:22","nodeType":"VariableDeclaration","scope":1940,"src":"19229:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":1936,"nodeType":"UserDefinedTypeName","pathNode":{"id":1935,"name":"IERC20","nameLocations":["19229:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"19229:6:22"},"referencedDeclaration":10576,"src":"19229:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"19195:47:22"},"returnParameters":{"id":1939,"nodeType":"ParameterList","parameters":[],"src":"19251:0:22"},"scope":1955,"src":"19158:94:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1941,"nodeType":"StructuredDocumentation","src":"19258:291:22","text":" @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n @dev Sends swap and yield pool creator fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"f7061445","id":1948,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19563:23:22","nodeType":"FunctionDefinition","parameters":{"id":1946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1943,"mutability":"mutable","name":"pool","nameLocation":"19595:4:22","nodeType":"VariableDeclaration","scope":1948,"src":"19587:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1942,"name":"address","nodeType":"ElementaryTypeName","src":"19587:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1945,"mutability":"mutable","name":"recipient","nameLocation":"19609:9:22","nodeType":"VariableDeclaration","scope":1948,"src":"19601:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1944,"name":"address","nodeType":"ElementaryTypeName","src":"19601:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19586:33:22"},"returnParameters":{"id":1947,"nodeType":"ParameterList","parameters":[],"src":"19628:0:22"},"scope":1955,"src":"19554:75:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1949,"nodeType":"StructuredDocumentation","src":"19635:310:22","text":" @notice Withdraw collected pool creator fees for a given pool.\n @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n value, this function is permissionless.\n @param pool The pool on which fees were collected"},"functionSelector":"52f125f0","id":1954,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19959:23:22","nodeType":"FunctionDefinition","parameters":{"id":1952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1951,"mutability":"mutable","name":"pool","nameLocation":"19991:4:22","nodeType":"VariableDeclaration","scope":1954,"src":"19983:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1950,"name":"address","nodeType":"ElementaryTypeName","src":"19983:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19982:14:22"},"returnParameters":{"id":1953,"nodeType":"ParameterList","parameters":[],"src":"20005:0:22"},"scope":1955,"src":"19950:56:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1956,"src":"266:19742:22","usedErrors":[1736,1739,1744,1751,1754],"usedEvents":[1629,1634,1641,1648,1655,1662,1672,1682,1694,1706,1715,1724,1733]}],"src":"46:19963:22"},"id":22},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol","exportedSymbols":{"IBalancerContractRegistry":[212],"IProtocolFeeController":[1955],"IProtocolFeePercentagesProvider":[2034]},"id":2035,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1957,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:23"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","file":"../standalone-utils/IBalancerContractRegistry.sol","id":1959,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2035,"sourceUnit":213,"src":"72:94:23","symbolAliases":[{"foreign":{"id":1958,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":212,"src":"81:25:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1961,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2035,"sourceUnit":1956,"src":"167:70:23","symbolAliases":[{"foreign":{"id":1960,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"176:22:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeePercentagesProvider","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":2034,"linearizedBaseContracts":[2034],"name":"IProtocolFeePercentagesProvider","nameLocation":"249:31:23","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1962,"nodeType":"StructuredDocumentation","src":"287:349:23","text":" @notice Protocol fee percentages have been set for the given factory.\n @param factory The pool factory\n @param protocolSwapFeePercentage The protocol swap fee percentage intended for pools from this factory\n @param protocolYieldFeePercentage The protocol yield fee percentage intended for pools from this factory"},"eventSelector":"2c3f7d4fd7252aea844c55450b24cac1853ac3a3293a3d0616193b7d854cf0f0","id":1970,"name":"FactorySpecificProtocolFeePercentagesSet","nameLocation":"647:40:23","nodeType":"EventDefinition","parameters":{"id":1969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1964,"indexed":true,"mutability":"mutable","name":"factory","nameLocation":"713:7:23","nodeType":"VariableDeclaration","scope":1970,"src":"697:23:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1963,"name":"address","nodeType":"ElementaryTypeName","src":"697:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1966,"indexed":false,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"738:25:23","nodeType":"VariableDeclaration","scope":1970,"src":"730:33:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1965,"name":"uint256","nodeType":"ElementaryTypeName","src":"730:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1968,"indexed":false,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"781:26:23","nodeType":"VariableDeclaration","scope":1970,"src":"773:34:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1967,"name":"uint256","nodeType":"ElementaryTypeName","src":"773:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"687:126:23"},"src":"641:173:23"},{"documentation":{"id":1971,"nodeType":"StructuredDocumentation","src":"820:87:23","text":"@notice The protocol fee controller was configured with an incorrect Vault address."},"errorSelector":"1bbe95c7","id":1973,"name":"WrongProtocolFeeControllerDeployment","nameLocation":"918:36:23","nodeType":"ErrorDefinition","parameters":{"id":1972,"nodeType":"ParameterList","parameters":[],"src":"954:2:23"},"src":"912:45:23"},{"documentation":{"id":1974,"nodeType":"StructuredDocumentation","src":"963:182:23","text":" @notice Fees can only be set on recognized factories (i.e., registered in the `BalancerContractRegistry`).\n @param factory The address of the unknown factory"},"errorSelector":"c2a47384","id":1978,"name":"UnknownFactory","nameLocation":"1156:14:23","nodeType":"ErrorDefinition","parameters":{"id":1977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1976,"mutability":"mutable","name":"factory","nameLocation":"1179:7:23","nodeType":"VariableDeclaration","scope":1978,"src":"1171:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1975,"name":"address","nodeType":"ElementaryTypeName","src":"1171:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1170:17:23"},"src":"1150:38:23"},{"documentation":{"id":1979,"nodeType":"StructuredDocumentation","src":"1194:475:23","text":" @notice `setFactorySpecificProtocolFeePercentages` has not been called for this factory address.\n @dev This error can by thrown by `getFactorySpecificProtocolFeePercentages` or\n `setProtocolFeePercentagesForPools`, as both require that valid fee percentages have been set.\n You need to set the factory fees before you can apply them to pools from that factory.\n @param factory The factory address where fees have not been set"},"errorSelector":"a589c09e","id":1983,"name":"FactoryFeesNotSet","nameLocation":"1680:17:23","nodeType":"ErrorDefinition","parameters":{"id":1982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1981,"mutability":"mutable","name":"factory","nameLocation":"1706:7:23","nodeType":"VariableDeclaration","scope":1983,"src":"1698:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1980,"name":"address","nodeType":"ElementaryTypeName","src":"1698:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1697:17:23"},"src":"1674:41:23"},{"documentation":{"id":1984,"nodeType":"StructuredDocumentation","src":"1721:300:23","text":" @notice The given pool is not from the expected factory.\n @dev Occurs when one of the pools supplied to `setProtocolFeePercentagesForPools` is not from the given factory.\n @param pool The address of the unrecognized pool\n @param factory The address of the factory"},"errorSelector":"f400ce63","id":1990,"name":"PoolNotFromFactory","nameLocation":"2032:18:23","nodeType":"ErrorDefinition","parameters":{"id":1989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1986,"mutability":"mutable","name":"pool","nameLocation":"2059:4:23","nodeType":"VariableDeclaration","scope":1990,"src":"2051:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1985,"name":"address","nodeType":"ElementaryTypeName","src":"2051:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1988,"mutability":"mutable","name":"factory","nameLocation":"2073:7:23","nodeType":"VariableDeclaration","scope":1990,"src":"2065:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1987,"name":"address","nodeType":"ElementaryTypeName","src":"2065:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2050:31:23"},"src":"2026:56:23"},{"documentation":{"id":1991,"nodeType":"StructuredDocumentation","src":"2088:162:23","text":" @notice Get the address of the `ProtocolFeeController` used to set fees.\n @return protocolFeeController The address of the fee controller"},"functionSelector":"85f2dbd4","id":1997,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"2264:24:23","nodeType":"FunctionDefinition","parameters":{"id":1992,"nodeType":"ParameterList","parameters":[],"src":"2288:2:23"},"returnParameters":{"id":1996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1995,"mutability":"mutable","name":"protocolFeeController","nameLocation":"2337:21:23","nodeType":"VariableDeclaration","scope":1997,"src":"2314:44:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":1994,"nodeType":"UserDefinedTypeName","pathNode":{"id":1993,"name":"IProtocolFeeController","nameLocations":["2314:22:23"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"2314:22:23"},"referencedDeclaration":1955,"src":"2314:22:23","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"2313:46:23"},"scope":2034,"src":"2255:105:23","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1998,"nodeType":"StructuredDocumentation","src":"2366:198:23","text":" @notice Get the address of the `BalancerContractRegistry` used to validate factory contracts.\n @return balancerContractRegistry The address of the Balancer contract registry"},"functionSelector":"deb27a7a","id":2004,"implemented":false,"kind":"function","modifiers":[],"name":"getBalancerContractRegistry","nameLocation":"2578:27:23","nodeType":"FunctionDefinition","parameters":{"id":1999,"nodeType":"ParameterList","parameters":[],"src":"2605:2:23"},"returnParameters":{"id":2003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2002,"mutability":"mutable","name":"balancerContractRegistry","nameLocation":"2657:24:23","nodeType":"VariableDeclaration","scope":2004,"src":"2631:50:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":2001,"nodeType":"UserDefinedTypeName","pathNode":{"id":2000,"name":"IBalancerContractRegistry","nameLocations":["2631:25:23"],"nodeType":"IdentifierPath","referencedDeclaration":212,"src":"2631:25:23"},"referencedDeclaration":212,"src":"2631:25:23","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"visibility":"internal"}],"src":"2630:52:23"},"scope":2034,"src":"2569:114:23","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2005,"nodeType":"StructuredDocumentation","src":"2689:323:23","text":" @notice Query the protocol fee percentages for a given factory.\n @param factory The address of the factory\n @return protocolSwapFeePercentage The protocol swap fee percentage set for that factory\n @return protocolYieldFeePercentage The protocol yield fee percentage set for that factory"},"functionSelector":"f2c24ec8","id":2014,"implemented":false,"kind":"function","modifiers":[],"name":"getFactorySpecificProtocolFeePercentages","nameLocation":"3026:40:23","nodeType":"FunctionDefinition","parameters":{"id":2008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2007,"mutability":"mutable","name":"factory","nameLocation":"3084:7:23","nodeType":"VariableDeclaration","scope":2014,"src":"3076:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2006,"name":"address","nodeType":"ElementaryTypeName","src":"3076:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3066:31:23"},"returnParameters":{"id":2013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2010,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"3129:25:23","nodeType":"VariableDeclaration","scope":2014,"src":"3121:33:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2009,"name":"uint256","nodeType":"ElementaryTypeName","src":"3121:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2012,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"3164:26:23","nodeType":"VariableDeclaration","scope":2014,"src":"3156:34:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2011,"name":"uint256","nodeType":"ElementaryTypeName","src":"3156:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3120:71:23"},"scope":2034,"src":"3017:175:23","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2015,"nodeType":"StructuredDocumentation","src":"3198:600:23","text":" @notice Assign intended protocol fee percentages for a given factory.\n @dev This is a permissioned call. After the fee percentages have been set, and governance has granted\n this contract permission to set fee percentages on pools, anyone can call `setProtocolFeePercentagesForPools`\n to update the fee percentages on a set of pools from that factory.\n @param factory The address of the factory\n @param protocolSwapFeePercentage The new protocol swap fee percentage\n @param protocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"00859689","id":2024,"implemented":false,"kind":"function","modifiers":[],"name":"setFactorySpecificProtocolFeePercentages","nameLocation":"3812:40:23","nodeType":"FunctionDefinition","parameters":{"id":2022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2017,"mutability":"mutable","name":"factory","nameLocation":"3870:7:23","nodeType":"VariableDeclaration","scope":2024,"src":"3862:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2016,"name":"address","nodeType":"ElementaryTypeName","src":"3862:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2019,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"3895:25:23","nodeType":"VariableDeclaration","scope":2024,"src":"3887:33:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2018,"name":"uint256","nodeType":"ElementaryTypeName","src":"3887:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2021,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"3938:26:23","nodeType":"VariableDeclaration","scope":2024,"src":"3930:34:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2020,"name":"uint256","nodeType":"ElementaryTypeName","src":"3930:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3852:118:23"},"returnParameters":{"id":2023,"nodeType":"ParameterList","parameters":[],"src":"3979:0:23"},"scope":2034,"src":"3803:177:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2025,"nodeType":"StructuredDocumentation","src":"3986:480:23","text":" @notice Update the protocol fees for a set of pools from a given factory.\n @dev This call is permissionless. Anyone can update the fee percentages, once they're set by governance.\n Note that governance must also grant this contract permission to set protocol fee percentages on pools.\n @param factory The address of the factory\n @param pools The pools whose fees will be set according to `setFactorySpecificProtocolFeePercentages`"},"functionSelector":"344b12d5","id":2033,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolFeePercentagesForPools","nameLocation":"4480:33:23","nodeType":"FunctionDefinition","parameters":{"id":2031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2027,"mutability":"mutable","name":"factory","nameLocation":"4522:7:23","nodeType":"VariableDeclaration","scope":2033,"src":"4514:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2026,"name":"address","nodeType":"ElementaryTypeName","src":"4514:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2030,"mutability":"mutable","name":"pools","nameLocation":"4548:5:23","nodeType":"VariableDeclaration","scope":2033,"src":"4531:22:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":2028,"name":"address","nodeType":"ElementaryTypeName","src":"4531:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2029,"nodeType":"ArrayTypeName","src":"4531:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4513:41:23"},"returnParameters":{"id":2032,"nodeType":"ParameterList","parameters":[],"src":"4563:0:23"},"scope":2034,"src":"4471:93:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2035,"src":"239:4327:23","usedErrors":[1973,1978,1983,1990],"usedEvents":[1970]}],"src":"46:4521:23"},"id":23},"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","exportedSymbols":{"AddLiquidityKind":[4241],"IERC20":[10576],"IERC4626":[9846],"IRouter":[2302],"IRouterQueries":[2507],"IVault":[2545],"RemoveLiquidityKind":[4262],"SwapKind":[4169]},"id":2303,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2036,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:24"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2038,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2303,"sourceUnit":9847,"src":"72:75:24","symbolAliases":[{"foreign":{"id":2037,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"81:8:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2040,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2303,"sourceUnit":10577,"src":"148:72:24","symbolAliases":[{"foreign":{"id":2039,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"157:6:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":2042,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2303,"sourceUnit":2546,"src":"222:38:24","symbolAliases":[{"foreign":{"id":2041,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"231:6:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol","file":"./IRouterQueries.sol","id":2044,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2303,"sourceUnit":2508,"src":"261:54:24","symbolAliases":[{"foreign":{"id":2043,"name":"IRouterQueries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2507,"src":"270:14:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":2048,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2303,"sourceUnit":4306,"src":"317:83:24","symbolAliases":[{"foreign":{"id":2045,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4241,"src":"326:16:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2046,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4262,"src":"344:19:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2047,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4169,"src":"365:8:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2050,"name":"IRouterQueries","nameLocations":["538:14:24"],"nodeType":"IdentifierPath","referencedDeclaration":2507,"src":"538:14:24"},"id":2051,"nodeType":"InheritanceSpecifier","src":"538:14:24"}],"canonicalName":"IRouter","contractDependencies":[],"contractKind":"interface","documentation":{"id":2049,"nodeType":"StructuredDocumentation","src":"402:115:24","text":"@notice User-friendly interface to basic Vault operations: swap, add/remove liquidity, and associated queries."},"fullyImplemented":false,"id":2302,"linearizedBaseContracts":[2302,2507],"name":"IRouter","nameLocation":"527:7:24","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2052,"nodeType":"StructuredDocumentation","src":"774:650:24","text":" @notice Initialize a liquidity pool.\n @param pool Address of the liquidity pool\n @param tokens Pool tokens, in token registration order\n @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Minimum amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add initial liquidity\n @return bptAmountOut Actual amount of pool tokens minted in exchange for initial liquidity"},"functionSelector":"026b3d95","id":2072,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"1438:10:24","nodeType":"FunctionDefinition","parameters":{"id":2068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2054,"mutability":"mutable","name":"pool","nameLocation":"1466:4:24","nodeType":"VariableDeclaration","scope":2072,"src":"1458:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2053,"name":"address","nodeType":"ElementaryTypeName","src":"1458:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2058,"mutability":"mutable","name":"tokens","nameLocation":"1496:6:24","nodeType":"VariableDeclaration","scope":2072,"src":"1480:22:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2056,"nodeType":"UserDefinedTypeName","pathNode":{"id":2055,"name":"IERC20","nameLocations":["1480:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1480:6:24"},"referencedDeclaration":10576,"src":"1480:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":2057,"nodeType":"ArrayTypeName","src":"1480:8:24","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":2061,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"1529:14:24","nodeType":"VariableDeclaration","scope":2072,"src":"1512:31:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2059,"name":"uint256","nodeType":"ElementaryTypeName","src":"1512:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2060,"nodeType":"ArrayTypeName","src":"1512:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2063,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"1561:15:24","nodeType":"VariableDeclaration","scope":2072,"src":"1553:23:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2062,"name":"uint256","nodeType":"ElementaryTypeName","src":"1553:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2065,"mutability":"mutable","name":"wethIsEth","nameLocation":"1591:9:24","nodeType":"VariableDeclaration","scope":2072,"src":"1586:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2064,"name":"bool","nodeType":"ElementaryTypeName","src":"1586:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2067,"mutability":"mutable","name":"userData","nameLocation":"1623:8:24","nodeType":"VariableDeclaration","scope":2072,"src":"1610:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2066,"name":"bytes","nodeType":"ElementaryTypeName","src":"1610:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1448:189:24"},"returnParameters":{"id":2071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2070,"mutability":"mutable","name":"bptAmountOut","nameLocation":"1672:12:24","nodeType":"VariableDeclaration","scope":2072,"src":"1664:20:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2069,"name":"uint256","nodeType":"ElementaryTypeName","src":"1664:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1663:22:24"},"scope":2302,"src":"1429:257:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2073,"nodeType":"StructuredDocumentation","src":"1904:645:24","text":" @notice Adds liquidity to a pool with proportional token amounts, receiving an exact amount of pool tokens.\n @param pool Address of the liquidity pool\n @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n @param exactBptAmountOut Exact amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return amountsIn Actual amounts of tokens added, sorted in token registration order"},"functionSelector":"724dba33","id":2090,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityProportional","nameLocation":"2563:24:24","nodeType":"FunctionDefinition","parameters":{"id":2085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2075,"mutability":"mutable","name":"pool","nameLocation":"2605:4:24","nodeType":"VariableDeclaration","scope":2090,"src":"2597:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2074,"name":"address","nodeType":"ElementaryTypeName","src":"2597:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2078,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"2636:12:24","nodeType":"VariableDeclaration","scope":2090,"src":"2619:29:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2076,"name":"uint256","nodeType":"ElementaryTypeName","src":"2619:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2077,"nodeType":"ArrayTypeName","src":"2619:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2080,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"2666:17:24","nodeType":"VariableDeclaration","scope":2090,"src":"2658:25:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2079,"name":"uint256","nodeType":"ElementaryTypeName","src":"2658:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2082,"mutability":"mutable","name":"wethIsEth","nameLocation":"2698:9:24","nodeType":"VariableDeclaration","scope":2090,"src":"2693:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2081,"name":"bool","nodeType":"ElementaryTypeName","src":"2693:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2084,"mutability":"mutable","name":"userData","nameLocation":"2730:8:24","nodeType":"VariableDeclaration","scope":2090,"src":"2717:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2083,"name":"bytes","nodeType":"ElementaryTypeName","src":"2717:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2587:157:24"},"returnParameters":{"id":2089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2088,"mutability":"mutable","name":"amountsIn","nameLocation":"2788:9:24","nodeType":"VariableDeclaration","scope":2090,"src":"2771:26:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2086,"name":"uint256","nodeType":"ElementaryTypeName","src":"2771:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2087,"nodeType":"ArrayTypeName","src":"2771:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2770:28:24"},"scope":2302,"src":"2554:245:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2091,"nodeType":"StructuredDocumentation","src":"2805:574:24","text":" @notice Adds liquidity to a pool with arbitrary token amounts.\n @param pool Address of the liquidity pool\n @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Minimum amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return bptAmountOut Actual amount of pool tokens received"},"functionSelector":"c08bc851","id":2107,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityUnbalanced","nameLocation":"3393:22:24","nodeType":"FunctionDefinition","parameters":{"id":2103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2093,"mutability":"mutable","name":"pool","nameLocation":"3433:4:24","nodeType":"VariableDeclaration","scope":2107,"src":"3425:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2092,"name":"address","nodeType":"ElementaryTypeName","src":"3425:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2096,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"3464:14:24","nodeType":"VariableDeclaration","scope":2107,"src":"3447:31:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2094,"name":"uint256","nodeType":"ElementaryTypeName","src":"3447:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2095,"nodeType":"ArrayTypeName","src":"3447:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2098,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"3496:15:24","nodeType":"VariableDeclaration","scope":2107,"src":"3488:23:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2097,"name":"uint256","nodeType":"ElementaryTypeName","src":"3488:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2100,"mutability":"mutable","name":"wethIsEth","nameLocation":"3526:9:24","nodeType":"VariableDeclaration","scope":2107,"src":"3521:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2099,"name":"bool","nodeType":"ElementaryTypeName","src":"3521:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2102,"mutability":"mutable","name":"userData","nameLocation":"3558:8:24","nodeType":"VariableDeclaration","scope":2107,"src":"3545:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2101,"name":"bytes","nodeType":"ElementaryTypeName","src":"3545:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3415:157:24"},"returnParameters":{"id":2106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2105,"mutability":"mutable","name":"bptAmountOut","nameLocation":"3607:12:24","nodeType":"VariableDeclaration","scope":2107,"src":"3599:20:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2104,"name":"uint256","nodeType":"ElementaryTypeName","src":"3599:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3598:22:24"},"scope":2302,"src":"3384:237:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2108,"nodeType":"StructuredDocumentation","src":"3627:605:24","text":" @notice Adds liquidity to a pool in a single token, receiving an exact amount of pool tokens.\n @param pool Address of the liquidity pool\n @param tokenIn Token used to add liquidity\n @param maxAmountIn Maximum amount of tokens to be added\n @param exactBptAmountOut Exact amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return amountIn Actual amount of tokens added"},"functionSelector":"72657d17","id":2126,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquiditySingleTokenExactOut","nameLocation":"4246:31:24","nodeType":"FunctionDefinition","parameters":{"id":2122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2110,"mutability":"mutable","name":"pool","nameLocation":"4295:4:24","nodeType":"VariableDeclaration","scope":2126,"src":"4287:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2109,"name":"address","nodeType":"ElementaryTypeName","src":"4287:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2113,"mutability":"mutable","name":"tokenIn","nameLocation":"4316:7:24","nodeType":"VariableDeclaration","scope":2126,"src":"4309:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2112,"nodeType":"UserDefinedTypeName","pathNode":{"id":2111,"name":"IERC20","nameLocations":["4309:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4309:6:24"},"referencedDeclaration":10576,"src":"4309:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2115,"mutability":"mutable","name":"maxAmountIn","nameLocation":"4341:11:24","nodeType":"VariableDeclaration","scope":2126,"src":"4333:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2114,"name":"uint256","nodeType":"ElementaryTypeName","src":"4333:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2117,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"4370:17:24","nodeType":"VariableDeclaration","scope":2126,"src":"4362:25:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2116,"name":"uint256","nodeType":"ElementaryTypeName","src":"4362:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2119,"mutability":"mutable","name":"wethIsEth","nameLocation":"4402:9:24","nodeType":"VariableDeclaration","scope":2126,"src":"4397:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2118,"name":"bool","nodeType":"ElementaryTypeName","src":"4397:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2121,"mutability":"mutable","name":"userData","nameLocation":"4434:8:24","nodeType":"VariableDeclaration","scope":2126,"src":"4421:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2120,"name":"bytes","nodeType":"ElementaryTypeName","src":"4421:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4277:171:24"},"returnParameters":{"id":2125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2124,"mutability":"mutable","name":"amountIn","nameLocation":"4483:8:24","nodeType":"VariableDeclaration","scope":2126,"src":"4475:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2123,"name":"uint256","nodeType":"ElementaryTypeName","src":"4475:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4474:18:24"},"scope":2302,"src":"4237:256:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2127,"nodeType":"StructuredDocumentation","src":"4499:530:24","text":" @notice Adds liquidity to a pool by donating the amounts in (no BPT out).\n @dev To support donation, the pool config `enableDonation` flag must be set to true.\n @param pool Address of the liquidity pool\n @param amountsIn Amounts of tokens to be donated, sorted in token registration order\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to donate liquidity"},"functionSelector":"bf6ee3fd","id":2139,"implemented":false,"kind":"function","modifiers":[],"name":"donate","nameLocation":"5043:6:24","nodeType":"FunctionDefinition","parameters":{"id":2137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2129,"mutability":"mutable","name":"pool","nameLocation":"5058:4:24","nodeType":"VariableDeclaration","scope":2139,"src":"5050:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2128,"name":"address","nodeType":"ElementaryTypeName","src":"5050:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2132,"mutability":"mutable","name":"amountsIn","nameLocation":"5081:9:24","nodeType":"VariableDeclaration","scope":2139,"src":"5064:26:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2130,"name":"uint256","nodeType":"ElementaryTypeName","src":"5064:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2131,"nodeType":"ArrayTypeName","src":"5064:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2134,"mutability":"mutable","name":"wethIsEth","nameLocation":"5097:9:24","nodeType":"VariableDeclaration","scope":2139,"src":"5092:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2133,"name":"bool","nodeType":"ElementaryTypeName","src":"5092:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2136,"mutability":"mutable","name":"userData","nameLocation":"5121:8:24","nodeType":"VariableDeclaration","scope":2139,"src":"5108:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2135,"name":"bytes","nodeType":"ElementaryTypeName","src":"5108:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5049:81:24"},"returnParameters":{"id":2138,"nodeType":"ParameterList","parameters":[],"src":"5147:0:24"},"scope":2302,"src":"5034:114:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2140,"nodeType":"StructuredDocumentation","src":"5154:954:24","text":" @notice Adds liquidity to a pool with a custom request.\n @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n In any case the caller can expect them to be hard boundaries for the request.\n @param pool Address of the liquidity pool\n @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Minimum amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return amountsIn Actual amounts of tokens added, sorted in token registration order\n @return bptAmountOut Actual amount of pool tokens received\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"0ca078ec","id":2161,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityCustom","nameLocation":"6122:18:24","nodeType":"FunctionDefinition","parameters":{"id":2152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2142,"mutability":"mutable","name":"pool","nameLocation":"6158:4:24","nodeType":"VariableDeclaration","scope":2161,"src":"6150:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2141,"name":"address","nodeType":"ElementaryTypeName","src":"6150:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2145,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"6189:12:24","nodeType":"VariableDeclaration","scope":2161,"src":"6172:29:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2143,"name":"uint256","nodeType":"ElementaryTypeName","src":"6172:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2144,"nodeType":"ArrayTypeName","src":"6172:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2147,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"6219:15:24","nodeType":"VariableDeclaration","scope":2161,"src":"6211:23:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2146,"name":"uint256","nodeType":"ElementaryTypeName","src":"6211:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2149,"mutability":"mutable","name":"wethIsEth","nameLocation":"6249:9:24","nodeType":"VariableDeclaration","scope":2161,"src":"6244:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2148,"name":"bool","nodeType":"ElementaryTypeName","src":"6244:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2151,"mutability":"mutable","name":"userData","nameLocation":"6281:8:24","nodeType":"VariableDeclaration","scope":2161,"src":"6268:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2150,"name":"bytes","nodeType":"ElementaryTypeName","src":"6268:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6140:155:24"},"returnParameters":{"id":2160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2155,"mutability":"mutable","name":"amountsIn","nameLocation":"6339:9:24","nodeType":"VariableDeclaration","scope":2161,"src":"6322:26:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2153,"name":"uint256","nodeType":"ElementaryTypeName","src":"6322:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2154,"nodeType":"ArrayTypeName","src":"6322:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2157,"mutability":"mutable","name":"bptAmountOut","nameLocation":"6358:12:24","nodeType":"VariableDeclaration","scope":2161,"src":"6350:20:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2156,"name":"uint256","nodeType":"ElementaryTypeName","src":"6350:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2159,"mutability":"mutable","name":"returnData","nameLocation":"6385:10:24","nodeType":"VariableDeclaration","scope":2161,"src":"6372:23:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2158,"name":"bytes","nodeType":"ElementaryTypeName","src":"6372:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6321:75:24"},"scope":2302,"src":"6113:284:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2162,"nodeType":"StructuredDocumentation","src":"6616:648:24","text":" @notice Removes liquidity with proportional token amounts from a pool, burning an exact pool token amount.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return amountsOut Actual amounts of tokens received, sorted in token registration order"},"functionSelector":"51682750","id":2179,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityProportional","nameLocation":"7278:27:24","nodeType":"FunctionDefinition","parameters":{"id":2174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2164,"mutability":"mutable","name":"pool","nameLocation":"7323:4:24","nodeType":"VariableDeclaration","scope":2179,"src":"7315:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2163,"name":"address","nodeType":"ElementaryTypeName","src":"7315:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2166,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"7345:16:24","nodeType":"VariableDeclaration","scope":2179,"src":"7337:24:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2165,"name":"uint256","nodeType":"ElementaryTypeName","src":"7337:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2169,"mutability":"mutable","name":"minAmountsOut","nameLocation":"7388:13:24","nodeType":"VariableDeclaration","scope":2179,"src":"7371:30:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2167,"name":"uint256","nodeType":"ElementaryTypeName","src":"7371:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2168,"nodeType":"ArrayTypeName","src":"7371:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2171,"mutability":"mutable","name":"wethIsEth","nameLocation":"7416:9:24","nodeType":"VariableDeclaration","scope":2179,"src":"7411:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2170,"name":"bool","nodeType":"ElementaryTypeName","src":"7411:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2173,"mutability":"mutable","name":"userData","nameLocation":"7448:8:24","nodeType":"VariableDeclaration","scope":2179,"src":"7435:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2172,"name":"bytes","nodeType":"ElementaryTypeName","src":"7435:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7305:157:24"},"returnParameters":{"id":2178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2177,"mutability":"mutable","name":"amountsOut","nameLocation":"7506:10:24","nodeType":"VariableDeclaration","scope":2179,"src":"7489:27:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2175,"name":"uint256","nodeType":"ElementaryTypeName","src":"7489:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2176,"nodeType":"ArrayTypeName","src":"7489:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7488:29:24"},"scope":2302,"src":"7269:249:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2180,"nodeType":"StructuredDocumentation","src":"7524:613:24","text":" @notice Removes liquidity from a pool via a single token, burning an exact pool token amount.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided\n @param tokenOut Token used to remove liquidity\n @param minAmountOut Minimum amount of tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return amountOut Actual amount of tokens received"},"functionSelector":"ecb2182c","id":2198,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquiditySingleTokenExactIn","nameLocation":"8151:33:24","nodeType":"FunctionDefinition","parameters":{"id":2194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2182,"mutability":"mutable","name":"pool","nameLocation":"8202:4:24","nodeType":"VariableDeclaration","scope":2198,"src":"8194:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2181,"name":"address","nodeType":"ElementaryTypeName","src":"8194:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2184,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"8224:16:24","nodeType":"VariableDeclaration","scope":2198,"src":"8216:24:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2183,"name":"uint256","nodeType":"ElementaryTypeName","src":"8216:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2187,"mutability":"mutable","name":"tokenOut","nameLocation":"8257:8:24","nodeType":"VariableDeclaration","scope":2198,"src":"8250:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2186,"nodeType":"UserDefinedTypeName","pathNode":{"id":2185,"name":"IERC20","nameLocations":["8250:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"8250:6:24"},"referencedDeclaration":10576,"src":"8250:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2189,"mutability":"mutable","name":"minAmountOut","nameLocation":"8283:12:24","nodeType":"VariableDeclaration","scope":2198,"src":"8275:20:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2188,"name":"uint256","nodeType":"ElementaryTypeName","src":"8275:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2191,"mutability":"mutable","name":"wethIsEth","nameLocation":"8310:9:24","nodeType":"VariableDeclaration","scope":2198,"src":"8305:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2190,"name":"bool","nodeType":"ElementaryTypeName","src":"8305:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2193,"mutability":"mutable","name":"userData","nameLocation":"8342:8:24","nodeType":"VariableDeclaration","scope":2198,"src":"8329:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2192,"name":"bytes","nodeType":"ElementaryTypeName","src":"8329:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8184:172:24"},"returnParameters":{"id":2197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2196,"mutability":"mutable","name":"amountOut","nameLocation":"8391:9:24","nodeType":"VariableDeclaration","scope":2198,"src":"8383:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2195,"name":"uint256","nodeType":"ElementaryTypeName","src":"8383:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8382:19:24"},"scope":2302,"src":"8142:260:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2199,"nodeType":"StructuredDocumentation","src":"8408:632:24","text":" @notice Removes liquidity from a pool via a single token, specifying the exact amount of tokens to receive.\n @param pool Address of the liquidity pool\n @param maxBptAmountIn Maximum amount of pool tokens provided\n @param tokenOut Token used to remove liquidity\n @param exactAmountOut Exact amount of tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return bptAmountIn Actual amount of pool tokens burned"},"functionSelector":"e7326def","id":2217,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquiditySingleTokenExactOut","nameLocation":"9054:34:24","nodeType":"FunctionDefinition","parameters":{"id":2213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2201,"mutability":"mutable","name":"pool","nameLocation":"9106:4:24","nodeType":"VariableDeclaration","scope":2217,"src":"9098:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2200,"name":"address","nodeType":"ElementaryTypeName","src":"9098:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2203,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"9128:14:24","nodeType":"VariableDeclaration","scope":2217,"src":"9120:22:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2202,"name":"uint256","nodeType":"ElementaryTypeName","src":"9120:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2206,"mutability":"mutable","name":"tokenOut","nameLocation":"9159:8:24","nodeType":"VariableDeclaration","scope":2217,"src":"9152:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2205,"nodeType":"UserDefinedTypeName","pathNode":{"id":2204,"name":"IERC20","nameLocations":["9152:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"9152:6:24"},"referencedDeclaration":10576,"src":"9152:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2208,"mutability":"mutable","name":"exactAmountOut","nameLocation":"9185:14:24","nodeType":"VariableDeclaration","scope":2217,"src":"9177:22:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2207,"name":"uint256","nodeType":"ElementaryTypeName","src":"9177:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2210,"mutability":"mutable","name":"wethIsEth","nameLocation":"9214:9:24","nodeType":"VariableDeclaration","scope":2217,"src":"9209:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2209,"name":"bool","nodeType":"ElementaryTypeName","src":"9209:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2212,"mutability":"mutable","name":"userData","nameLocation":"9246:8:24","nodeType":"VariableDeclaration","scope":2217,"src":"9233:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2211,"name":"bytes","nodeType":"ElementaryTypeName","src":"9233:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9088:172:24"},"returnParameters":{"id":2216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2215,"mutability":"mutable","name":"bptAmountIn","nameLocation":"9295:11:24","nodeType":"VariableDeclaration","scope":2217,"src":"9287:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2214,"name":"uint256","nodeType":"ElementaryTypeName","src":"9287:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9286:21:24"},"scope":2302,"src":"9045:263:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2218,"nodeType":"StructuredDocumentation","src":"9314:960:24","text":" @notice Removes liquidity from a pool with a custom request.\n @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n In any case the caller can expect them to be hard boundaries for the request.\n @param pool Address of the liquidity pool\n @param maxBptAmountIn Maximum amount of pool tokens provided\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return bptAmountIn Actual amount of pool tokens burned\n @return amountsOut Actual amounts of tokens received, sorted in token registration order\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"82bf2b24","id":2239,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityCustom","nameLocation":"10288:21:24","nodeType":"FunctionDefinition","parameters":{"id":2230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2220,"mutability":"mutable","name":"pool","nameLocation":"10327:4:24","nodeType":"VariableDeclaration","scope":2239,"src":"10319:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2219,"name":"address","nodeType":"ElementaryTypeName","src":"10319:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2222,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"10349:14:24","nodeType":"VariableDeclaration","scope":2239,"src":"10341:22:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2221,"name":"uint256","nodeType":"ElementaryTypeName","src":"10341:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2225,"mutability":"mutable","name":"minAmountsOut","nameLocation":"10390:13:24","nodeType":"VariableDeclaration","scope":2239,"src":"10373:30:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2223,"name":"uint256","nodeType":"ElementaryTypeName","src":"10373:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2224,"nodeType":"ArrayTypeName","src":"10373:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2227,"mutability":"mutable","name":"wethIsEth","nameLocation":"10418:9:24","nodeType":"VariableDeclaration","scope":2239,"src":"10413:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2226,"name":"bool","nodeType":"ElementaryTypeName","src":"10413:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2229,"mutability":"mutable","name":"userData","nameLocation":"10450:8:24","nodeType":"VariableDeclaration","scope":2239,"src":"10437:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2228,"name":"bytes","nodeType":"ElementaryTypeName","src":"10437:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10309:155:24"},"returnParameters":{"id":2238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2232,"mutability":"mutable","name":"bptAmountIn","nameLocation":"10499:11:24","nodeType":"VariableDeclaration","scope":2239,"src":"10491:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2231,"name":"uint256","nodeType":"ElementaryTypeName","src":"10491:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2235,"mutability":"mutable","name":"amountsOut","nameLocation":"10529:10:24","nodeType":"VariableDeclaration","scope":2239,"src":"10512:27:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2233,"name":"uint256","nodeType":"ElementaryTypeName","src":"10512:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2234,"nodeType":"ArrayTypeName","src":"10512:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2237,"mutability":"mutable","name":"returnData","nameLocation":"10554:10:24","nodeType":"VariableDeclaration","scope":2239,"src":"10541:23:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2236,"name":"bytes","nodeType":"ElementaryTypeName","src":"10541:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10490:75:24"},"scope":2302,"src":"10279:287:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2240,"nodeType":"StructuredDocumentation","src":"10572:447:24","text":" @notice Removes liquidity proportionally, burning an exact pool token amount. Only available in Recovery Mode.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @return amountsOut Actual amounts of tokens received, sorted in token registration order"},"functionSelector":"08c04793","id":2253,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityRecovery","nameLocation":"11033:23:24","nodeType":"FunctionDefinition","parameters":{"id":2248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2242,"mutability":"mutable","name":"pool","nameLocation":"11074:4:24","nodeType":"VariableDeclaration","scope":2253,"src":"11066:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2241,"name":"address","nodeType":"ElementaryTypeName","src":"11066:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2244,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"11096:16:24","nodeType":"VariableDeclaration","scope":2253,"src":"11088:24:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2243,"name":"uint256","nodeType":"ElementaryTypeName","src":"11088:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2247,"mutability":"mutable","name":"minAmountsOut","nameLocation":"11139:13:24","nodeType":"VariableDeclaration","scope":2253,"src":"11122:30:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2245,"name":"uint256","nodeType":"ElementaryTypeName","src":"11122:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2246,"nodeType":"ArrayTypeName","src":"11122:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11056:102:24"},"returnParameters":{"id":2252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2251,"mutability":"mutable","name":"amountsOut","nameLocation":"11202:10:24","nodeType":"VariableDeclaration","scope":2253,"src":"11185:27:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2249,"name":"uint256","nodeType":"ElementaryTypeName","src":"11185:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2250,"nodeType":"ArrayTypeName","src":"11185:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11184:29:24"},"scope":2302,"src":"11024:190:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2254,"nodeType":"StructuredDocumentation","src":"11428:744:24","text":" @notice Executes a swap operation specifying an exact input token amount.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountIn Exact amounts of input tokens to send\n @param minAmountOut Minimum amount of tokens to be received\n @param deadline Deadline for the swap, after which it will revert\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the swap request\n @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens"},"functionSelector":"750283bc","id":2277,"implemented":false,"kind":"function","modifiers":[],"name":"swapSingleTokenExactIn","nameLocation":"12186:22:24","nodeType":"FunctionDefinition","parameters":{"id":2273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2256,"mutability":"mutable","name":"pool","nameLocation":"12226:4:24","nodeType":"VariableDeclaration","scope":2277,"src":"12218:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2255,"name":"address","nodeType":"ElementaryTypeName","src":"12218:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2259,"mutability":"mutable","name":"tokenIn","nameLocation":"12247:7:24","nodeType":"VariableDeclaration","scope":2277,"src":"12240:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2258,"nodeType":"UserDefinedTypeName","pathNode":{"id":2257,"name":"IERC20","nameLocations":["12240:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"12240:6:24"},"referencedDeclaration":10576,"src":"12240:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2262,"mutability":"mutable","name":"tokenOut","nameLocation":"12271:8:24","nodeType":"VariableDeclaration","scope":2277,"src":"12264:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2261,"nodeType":"UserDefinedTypeName","pathNode":{"id":2260,"name":"IERC20","nameLocations":["12264:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"12264:6:24"},"referencedDeclaration":10576,"src":"12264:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2264,"mutability":"mutable","name":"exactAmountIn","nameLocation":"12297:13:24","nodeType":"VariableDeclaration","scope":2277,"src":"12289:21:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2263,"name":"uint256","nodeType":"ElementaryTypeName","src":"12289:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2266,"mutability":"mutable","name":"minAmountOut","nameLocation":"12328:12:24","nodeType":"VariableDeclaration","scope":2277,"src":"12320:20:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2265,"name":"uint256","nodeType":"ElementaryTypeName","src":"12320:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2268,"mutability":"mutable","name":"deadline","nameLocation":"12358:8:24","nodeType":"VariableDeclaration","scope":2277,"src":"12350:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2267,"name":"uint256","nodeType":"ElementaryTypeName","src":"12350:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2270,"mutability":"mutable","name":"wethIsEth","nameLocation":"12381:9:24","nodeType":"VariableDeclaration","scope":2277,"src":"12376:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2269,"name":"bool","nodeType":"ElementaryTypeName","src":"12376:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2272,"mutability":"mutable","name":"userData","nameLocation":"12415:8:24","nodeType":"VariableDeclaration","scope":2277,"src":"12400:23:24","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2271,"name":"bytes","nodeType":"ElementaryTypeName","src":"12400:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12208:221:24"},"returnParameters":{"id":2276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2275,"mutability":"mutable","name":"amountOut","nameLocation":"12464:9:24","nodeType":"VariableDeclaration","scope":2277,"src":"12456:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2274,"name":"uint256","nodeType":"ElementaryTypeName","src":"12456:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12455:19:24"},"scope":2302,"src":"12177:298:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2278,"nodeType":"StructuredDocumentation","src":"12481:743:24","text":" @notice Executes a swap operation specifying an exact output token amount.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountOut Exact amounts of input tokens to receive\n @param maxAmountIn Maximum amount of tokens to be sent\n @param deadline Deadline for the swap, after which it will revert\n @param userData Additional (optional) data sent with the swap request\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens"},"functionSelector":"94e86ef8","id":2301,"implemented":false,"kind":"function","modifiers":[],"name":"swapSingleTokenExactOut","nameLocation":"13238:23:24","nodeType":"FunctionDefinition","parameters":{"id":2297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2280,"mutability":"mutable","name":"pool","nameLocation":"13279:4:24","nodeType":"VariableDeclaration","scope":2301,"src":"13271:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2279,"name":"address","nodeType":"ElementaryTypeName","src":"13271:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2283,"mutability":"mutable","name":"tokenIn","nameLocation":"13300:7:24","nodeType":"VariableDeclaration","scope":2301,"src":"13293:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2282,"nodeType":"UserDefinedTypeName","pathNode":{"id":2281,"name":"IERC20","nameLocations":["13293:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"13293:6:24"},"referencedDeclaration":10576,"src":"13293:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2286,"mutability":"mutable","name":"tokenOut","nameLocation":"13324:8:24","nodeType":"VariableDeclaration","scope":2301,"src":"13317:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2285,"nodeType":"UserDefinedTypeName","pathNode":{"id":2284,"name":"IERC20","nameLocations":["13317:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"13317:6:24"},"referencedDeclaration":10576,"src":"13317:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2288,"mutability":"mutable","name":"exactAmountOut","nameLocation":"13350:14:24","nodeType":"VariableDeclaration","scope":2301,"src":"13342:22:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2287,"name":"uint256","nodeType":"ElementaryTypeName","src":"13342:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2290,"mutability":"mutable","name":"maxAmountIn","nameLocation":"13382:11:24","nodeType":"VariableDeclaration","scope":2301,"src":"13374:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2289,"name":"uint256","nodeType":"ElementaryTypeName","src":"13374:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2292,"mutability":"mutable","name":"deadline","nameLocation":"13411:8:24","nodeType":"VariableDeclaration","scope":2301,"src":"13403:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2291,"name":"uint256","nodeType":"ElementaryTypeName","src":"13403:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2294,"mutability":"mutable","name":"wethIsEth","nameLocation":"13434:9:24","nodeType":"VariableDeclaration","scope":2301,"src":"13429:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2293,"name":"bool","nodeType":"ElementaryTypeName","src":"13429:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2296,"mutability":"mutable","name":"userData","nameLocation":"13468:8:24","nodeType":"VariableDeclaration","scope":2301,"src":"13453:23:24","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2295,"name":"bytes","nodeType":"ElementaryTypeName","src":"13453:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"13261:221:24"},"returnParameters":{"id":2300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2299,"mutability":"mutable","name":"amountIn","nameLocation":"13517:8:24","nodeType":"VariableDeclaration","scope":2301,"src":"13509:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2298,"name":"uint256","nodeType":"ElementaryTypeName","src":"13509:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13508:18:24"},"scope":2302,"src":"13229:298:24","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":2303,"src":"517:13012:24","usedErrors":[],"usedEvents":[]}],"src":"46:13484:24"},"id":24},"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol","exportedSymbols":{"AddLiquidityKind":[4241],"IERC20":[10576],"IERC4626":[9846],"IRouterQueries":[2507],"IVault":[2545],"RemoveLiquidityKind":[4262],"SwapKind":[4169]},"id":2508,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2304,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:25"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2306,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2508,"sourceUnit":9847,"src":"72:75:25","symbolAliases":[{"foreign":{"id":2305,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"81:8:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2308,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2508,"sourceUnit":10577,"src":"148:72:25","symbolAliases":[{"foreign":{"id":2307,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"157:6:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":2310,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2508,"sourceUnit":2546,"src":"222:38:25","symbolAliases":[{"foreign":{"id":2309,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"231:6:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":2314,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2508,"sourceUnit":4306,"src":"262:83:25","symbolAliases":[{"foreign":{"id":2311,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4241,"src":"271:16:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2312,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4262,"src":"289:19:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2313,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4169,"src":"310:8:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IRouterQueries","contractDependencies":[],"contractKind":"interface","documentation":{"id":2315,"nodeType":"StructuredDocumentation","src":"347:118:25","text":"@notice User-friendly interface for querying expected results of swap and liquidity operations without execution."},"fullyImplemented":false,"id":2507,"linearizedBaseContracts":[2507],"name":"IRouterQueries","nameLocation":"475:14:25","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2316,"nodeType":"StructuredDocumentation","src":"709:518:25","text":" @notice Queries an `addLiquidityProportional` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountOut Exact amount of pool tokens to be received\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountsIn Expected amounts of tokens to add, sorted in token registration order"},"functionSelector":"9de90518","id":2330,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquidityProportional","nameLocation":"1241:29:25","nodeType":"FunctionDefinition","parameters":{"id":2325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2318,"mutability":"mutable","name":"pool","nameLocation":"1288:4:25","nodeType":"VariableDeclaration","scope":2330,"src":"1280:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2317,"name":"address","nodeType":"ElementaryTypeName","src":"1280:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2320,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"1310:17:25","nodeType":"VariableDeclaration","scope":2330,"src":"1302:25:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2319,"name":"uint256","nodeType":"ElementaryTypeName","src":"1302:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2322,"mutability":"mutable","name":"sender","nameLocation":"1345:6:25","nodeType":"VariableDeclaration","scope":2330,"src":"1337:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2321,"name":"address","nodeType":"ElementaryTypeName","src":"1337:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2324,"mutability":"mutable","name":"userData","nameLocation":"1374:8:25","nodeType":"VariableDeclaration","scope":2330,"src":"1361:21:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2323,"name":"bytes","nodeType":"ElementaryTypeName","src":"1361:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1270:118:25"},"returnParameters":{"id":2329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2328,"mutability":"mutable","name":"amountsIn","nameLocation":"1424:9:25","nodeType":"VariableDeclaration","scope":2330,"src":"1407:26:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2326,"name":"uint256","nodeType":"ElementaryTypeName","src":"1407:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2327,"nodeType":"ArrayTypeName","src":"1407:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1406:28:25"},"scope":2507,"src":"1232:203:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2331,"nodeType":"StructuredDocumentation","src":"1441:517:25","text":" @notice Queries an `addLiquidityUnbalanced` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return bptAmountOut Expected amount of pool tokens to receive"},"functionSelector":"da001f7d","id":2345,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquidityUnbalanced","nameLocation":"1972:27:25","nodeType":"FunctionDefinition","parameters":{"id":2341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2333,"mutability":"mutable","name":"pool","nameLocation":"2017:4:25","nodeType":"VariableDeclaration","scope":2345,"src":"2009:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2332,"name":"address","nodeType":"ElementaryTypeName","src":"2009:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2336,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"2048:14:25","nodeType":"VariableDeclaration","scope":2345,"src":"2031:31:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2334,"name":"uint256","nodeType":"ElementaryTypeName","src":"2031:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2335,"nodeType":"ArrayTypeName","src":"2031:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2338,"mutability":"mutable","name":"sender","nameLocation":"2080:6:25","nodeType":"VariableDeclaration","scope":2345,"src":"2072:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2337,"name":"address","nodeType":"ElementaryTypeName","src":"2072:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2340,"mutability":"mutable","name":"userData","nameLocation":"2109:8:25","nodeType":"VariableDeclaration","scope":2345,"src":"2096:21:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2339,"name":"bytes","nodeType":"ElementaryTypeName","src":"2096:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1999:124:25"},"returnParameters":{"id":2344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2343,"mutability":"mutable","name":"bptAmountOut","nameLocation":"2150:12:25","nodeType":"VariableDeclaration","scope":2345,"src":"2142:20:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2342,"name":"uint256","nodeType":"ElementaryTypeName","src":"2142:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2141:22:25"},"scope":2507,"src":"1963:201:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2346,"nodeType":"StructuredDocumentation","src":"2170:542:25","text":" @notice Queries an `addLiquiditySingleTokenExactOut` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenIn Token used to add liquidity\n @param exactBptAmountOut Expected exact amount of pool tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountIn Expected amount of tokens to add"},"functionSelector":"1d56798d","id":2362,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquiditySingleTokenExactOut","nameLocation":"2726:36:25","nodeType":"FunctionDefinition","parameters":{"id":2358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2348,"mutability":"mutable","name":"pool","nameLocation":"2780:4:25","nodeType":"VariableDeclaration","scope":2362,"src":"2772:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2347,"name":"address","nodeType":"ElementaryTypeName","src":"2772:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2351,"mutability":"mutable","name":"tokenIn","nameLocation":"2801:7:25","nodeType":"VariableDeclaration","scope":2362,"src":"2794:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2350,"nodeType":"UserDefinedTypeName","pathNode":{"id":2349,"name":"IERC20","nameLocations":["2794:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2794:6:25"},"referencedDeclaration":10576,"src":"2794:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2353,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"2826:17:25","nodeType":"VariableDeclaration","scope":2362,"src":"2818:25:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2352,"name":"uint256","nodeType":"ElementaryTypeName","src":"2818:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2355,"mutability":"mutable","name":"sender","nameLocation":"2861:6:25","nodeType":"VariableDeclaration","scope":2362,"src":"2853:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2354,"name":"address","nodeType":"ElementaryTypeName","src":"2853:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2357,"mutability":"mutable","name":"userData","nameLocation":"2890:8:25","nodeType":"VariableDeclaration","scope":2362,"src":"2877:21:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2356,"name":"bytes","nodeType":"ElementaryTypeName","src":"2877:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2762:142:25"},"returnParameters":{"id":2361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2360,"mutability":"mutable","name":"amountIn","nameLocation":"2931:8:25","nodeType":"VariableDeclaration","scope":2362,"src":"2923:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2359,"name":"uint256","nodeType":"ElementaryTypeName","src":"2923:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2922:18:25"},"scope":2507,"src":"2717:224:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2363,"nodeType":"StructuredDocumentation","src":"2947:779:25","text":" @notice Queries an `addLiquidityCustom` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Expected minimum amount of pool tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountsIn Expected amounts of tokens to add, sorted in token registration order\n @return bptAmountOut Expected amount of pool tokens to receive\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"452db952","id":2384,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquidityCustom","nameLocation":"3740:23:25","nodeType":"FunctionDefinition","parameters":{"id":2375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2365,"mutability":"mutable","name":"pool","nameLocation":"3781:4:25","nodeType":"VariableDeclaration","scope":2384,"src":"3773:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2364,"name":"address","nodeType":"ElementaryTypeName","src":"3773:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2368,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"3812:12:25","nodeType":"VariableDeclaration","scope":2384,"src":"3795:29:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2366,"name":"uint256","nodeType":"ElementaryTypeName","src":"3795:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2367,"nodeType":"ArrayTypeName","src":"3795:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2370,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"3842:15:25","nodeType":"VariableDeclaration","scope":2384,"src":"3834:23:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2369,"name":"uint256","nodeType":"ElementaryTypeName","src":"3834:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2372,"mutability":"mutable","name":"sender","nameLocation":"3875:6:25","nodeType":"VariableDeclaration","scope":2384,"src":"3867:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2371,"name":"address","nodeType":"ElementaryTypeName","src":"3867:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2374,"mutability":"mutable","name":"userData","nameLocation":"3904:8:25","nodeType":"VariableDeclaration","scope":2384,"src":"3891:21:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2373,"name":"bytes","nodeType":"ElementaryTypeName","src":"3891:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3763:155:25"},"returnParameters":{"id":2383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2378,"mutability":"mutable","name":"amountsIn","nameLocation":"3954:9:25","nodeType":"VariableDeclaration","scope":2384,"src":"3937:26:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2376,"name":"uint256","nodeType":"ElementaryTypeName","src":"3937:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2377,"nodeType":"ArrayTypeName","src":"3937:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2380,"mutability":"mutable","name":"bptAmountOut","nameLocation":"3973:12:25","nodeType":"VariableDeclaration","scope":2384,"src":"3965:20:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2379,"name":"uint256","nodeType":"ElementaryTypeName","src":"3965:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2382,"mutability":"mutable","name":"returnData","nameLocation":"4000:10:25","nodeType":"VariableDeclaration","scope":2384,"src":"3987:23:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2381,"name":"bytes","nodeType":"ElementaryTypeName","src":"3987:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3936:75:25"},"scope":2507,"src":"3731:281:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2385,"nodeType":"StructuredDocumentation","src":"4234:532:25","text":" @notice Queries a `removeLiquidityProportional` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided for the query\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountsOut Expected amounts of tokens to receive, sorted in token registration order"},"functionSelector":"0f710888","id":2399,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquidityProportional","nameLocation":"4780:32:25","nodeType":"FunctionDefinition","parameters":{"id":2394,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2387,"mutability":"mutable","name":"pool","nameLocation":"4830:4:25","nodeType":"VariableDeclaration","scope":2399,"src":"4822:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2386,"name":"address","nodeType":"ElementaryTypeName","src":"4822:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2389,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"4852:16:25","nodeType":"VariableDeclaration","scope":2399,"src":"4844:24:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2388,"name":"uint256","nodeType":"ElementaryTypeName","src":"4844:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2391,"mutability":"mutable","name":"sender","nameLocation":"4886:6:25","nodeType":"VariableDeclaration","scope":2399,"src":"4878:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2390,"name":"address","nodeType":"ElementaryTypeName","src":"4878:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2393,"mutability":"mutable","name":"userData","nameLocation":"4915:8:25","nodeType":"VariableDeclaration","scope":2399,"src":"4902:21:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2392,"name":"bytes","nodeType":"ElementaryTypeName","src":"4902:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4812:117:25"},"returnParameters":{"id":2398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2397,"mutability":"mutable","name":"amountsOut","nameLocation":"4965:10:25","nodeType":"VariableDeclaration","scope":2399,"src":"4948:27:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2395,"name":"uint256","nodeType":"ElementaryTypeName","src":"4948:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2396,"nodeType":"ArrayTypeName","src":"4948:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4947:29:25"},"scope":2507,"src":"4771:206:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2400,"nodeType":"StructuredDocumentation","src":"4983:554:25","text":" @notice Queries a `removeLiquiditySingleTokenExactIn` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided for the query\n @param tokenOut Token used to remove liquidity\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountOut Expected amount of tokens to receive"},"functionSelector":"23b39241","id":2416,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquiditySingleTokenExactIn","nameLocation":"5551:38:25","nodeType":"FunctionDefinition","parameters":{"id":2412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2402,"mutability":"mutable","name":"pool","nameLocation":"5607:4:25","nodeType":"VariableDeclaration","scope":2416,"src":"5599:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2401,"name":"address","nodeType":"ElementaryTypeName","src":"5599:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2404,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"5629:16:25","nodeType":"VariableDeclaration","scope":2416,"src":"5621:24:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2403,"name":"uint256","nodeType":"ElementaryTypeName","src":"5621:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2407,"mutability":"mutable","name":"tokenOut","nameLocation":"5662:8:25","nodeType":"VariableDeclaration","scope":2416,"src":"5655:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2406,"nodeType":"UserDefinedTypeName","pathNode":{"id":2405,"name":"IERC20","nameLocations":["5655:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"5655:6:25"},"referencedDeclaration":10576,"src":"5655:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2409,"mutability":"mutable","name":"sender","nameLocation":"5688:6:25","nodeType":"VariableDeclaration","scope":2416,"src":"5680:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2408,"name":"address","nodeType":"ElementaryTypeName","src":"5680:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2411,"mutability":"mutable","name":"userData","nameLocation":"5717:8:25","nodeType":"VariableDeclaration","scope":2416,"src":"5704:21:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2410,"name":"bytes","nodeType":"ElementaryTypeName","src":"5704:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5589:142:25"},"returnParameters":{"id":2415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2414,"mutability":"mutable","name":"amountOut","nameLocation":"5758:9:25","nodeType":"VariableDeclaration","scope":2416,"src":"5750:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2413,"name":"uint256","nodeType":"ElementaryTypeName","src":"5750:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5749:19:25"},"scope":2507,"src":"5542:227:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2417,"nodeType":"StructuredDocumentation","src":"5775:549:25","text":" @notice Queries a `removeLiquiditySingleTokenExactOut` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenOut Token used to remove liquidity\n @param exactAmountOut Expected exact amount of tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return bptAmountIn Expected amount of pool tokens to burn"},"functionSelector":"53d0bb98","id":2433,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquiditySingleTokenExactOut","nameLocation":"6338:39:25","nodeType":"FunctionDefinition","parameters":{"id":2429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2419,"mutability":"mutable","name":"pool","nameLocation":"6395:4:25","nodeType":"VariableDeclaration","scope":2433,"src":"6387:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2418,"name":"address","nodeType":"ElementaryTypeName","src":"6387:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2422,"mutability":"mutable","name":"tokenOut","nameLocation":"6416:8:25","nodeType":"VariableDeclaration","scope":2433,"src":"6409:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2421,"nodeType":"UserDefinedTypeName","pathNode":{"id":2420,"name":"IERC20","nameLocations":["6409:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6409:6:25"},"referencedDeclaration":10576,"src":"6409:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2424,"mutability":"mutable","name":"exactAmountOut","nameLocation":"6442:14:25","nodeType":"VariableDeclaration","scope":2433,"src":"6434:22:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2423,"name":"uint256","nodeType":"ElementaryTypeName","src":"6434:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2426,"mutability":"mutable","name":"sender","nameLocation":"6474:6:25","nodeType":"VariableDeclaration","scope":2433,"src":"6466:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2425,"name":"address","nodeType":"ElementaryTypeName","src":"6466:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2428,"mutability":"mutable","name":"userData","nameLocation":"6503:8:25","nodeType":"VariableDeclaration","scope":2433,"src":"6490:21:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2427,"name":"bytes","nodeType":"ElementaryTypeName","src":"6490:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6377:140:25"},"returnParameters":{"id":2432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2431,"mutability":"mutable","name":"bptAmountIn","nameLocation":"6544:11:25","nodeType":"VariableDeclaration","scope":2433,"src":"6536:19:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2430,"name":"uint256","nodeType":"ElementaryTypeName","src":"6536:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6535:21:25"},"scope":2507,"src":"6329:228:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2434,"nodeType":"StructuredDocumentation","src":"6563:779:25","text":" @notice Queries a `removeLiquidityCustom` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param maxBptAmountIn Maximum amount of pool tokens provided\n @param minAmountsOut Expected minimum amounts of tokens to receive, sorted in token registration order\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return bptAmountIn Expected amount of pool tokens to burn\n @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"c330c7be","id":2455,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquidityCustom","nameLocation":"7356:26:25","nodeType":"FunctionDefinition","parameters":{"id":2446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2436,"mutability":"mutable","name":"pool","nameLocation":"7400:4:25","nodeType":"VariableDeclaration","scope":2455,"src":"7392:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2435,"name":"address","nodeType":"ElementaryTypeName","src":"7392:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2438,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"7422:14:25","nodeType":"VariableDeclaration","scope":2455,"src":"7414:22:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2437,"name":"uint256","nodeType":"ElementaryTypeName","src":"7414:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2441,"mutability":"mutable","name":"minAmountsOut","nameLocation":"7463:13:25","nodeType":"VariableDeclaration","scope":2455,"src":"7446:30:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2439,"name":"uint256","nodeType":"ElementaryTypeName","src":"7446:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2440,"nodeType":"ArrayTypeName","src":"7446:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2443,"mutability":"mutable","name":"sender","nameLocation":"7494:6:25","nodeType":"VariableDeclaration","scope":2455,"src":"7486:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2442,"name":"address","nodeType":"ElementaryTypeName","src":"7486:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2445,"mutability":"mutable","name":"userData","nameLocation":"7523:8:25","nodeType":"VariableDeclaration","scope":2455,"src":"7510:21:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2444,"name":"bytes","nodeType":"ElementaryTypeName","src":"7510:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7382:155:25"},"returnParameters":{"id":2454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2448,"mutability":"mutable","name":"bptAmountIn","nameLocation":"7564:11:25","nodeType":"VariableDeclaration","scope":2455,"src":"7556:19:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2447,"name":"uint256","nodeType":"ElementaryTypeName","src":"7556:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2451,"mutability":"mutable","name":"amountsOut","nameLocation":"7594:10:25","nodeType":"VariableDeclaration","scope":2455,"src":"7577:27:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2449,"name":"uint256","nodeType":"ElementaryTypeName","src":"7577:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2450,"nodeType":"ArrayTypeName","src":"7577:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2453,"mutability":"mutable","name":"returnData","nameLocation":"7619:10:25","nodeType":"VariableDeclaration","scope":2455,"src":"7606:23:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2452,"name":"bytes","nodeType":"ElementaryTypeName","src":"7606:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7555:75:25"},"scope":2507,"src":"7347:284:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2456,"nodeType":"StructuredDocumentation","src":"7637:334:25","text":" @notice Queries a `removeLiquidityRecovery` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided for the query\n @return amountsOut Expected amounts of tokens to receive, sorted in token registration order"},"functionSelector":"b037ed36","id":2466,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquidityRecovery","nameLocation":"7985:28:25","nodeType":"FunctionDefinition","parameters":{"id":2461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2458,"mutability":"mutable","name":"pool","nameLocation":"8031:4:25","nodeType":"VariableDeclaration","scope":2466,"src":"8023:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2457,"name":"address","nodeType":"ElementaryTypeName","src":"8023:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2460,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"8053:16:25","nodeType":"VariableDeclaration","scope":2466,"src":"8045:24:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2459,"name":"uint256","nodeType":"ElementaryTypeName","src":"8045:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8013:62:25"},"returnParameters":{"id":2465,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2464,"mutability":"mutable","name":"amountsOut","nameLocation":"8111:10:25","nodeType":"VariableDeclaration","scope":2466,"src":"8094:27:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2462,"name":"uint256","nodeType":"ElementaryTypeName","src":"8094:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2463,"nodeType":"ArrayTypeName","src":"8094:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8093:29:25"},"scope":2507,"src":"7976:147:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2467,"nodeType":"StructuredDocumentation","src":"8333:637:25","text":" @notice Queries a swap operation specifying an exact input token amount without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountIn Exact amounts of input tokens to send\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens"},"functionSelector":"3ebc54e5","id":2486,"implemented":false,"kind":"function","modifiers":[],"name":"querySwapSingleTokenExactIn","nameLocation":"8984:27:25","nodeType":"FunctionDefinition","parameters":{"id":2482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2469,"mutability":"mutable","name":"pool","nameLocation":"9029:4:25","nodeType":"VariableDeclaration","scope":2486,"src":"9021:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2468,"name":"address","nodeType":"ElementaryTypeName","src":"9021:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2472,"mutability":"mutable","name":"tokenIn","nameLocation":"9050:7:25","nodeType":"VariableDeclaration","scope":2486,"src":"9043:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2471,"nodeType":"UserDefinedTypeName","pathNode":{"id":2470,"name":"IERC20","nameLocations":["9043:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"9043:6:25"},"referencedDeclaration":10576,"src":"9043:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2475,"mutability":"mutable","name":"tokenOut","nameLocation":"9074:8:25","nodeType":"VariableDeclaration","scope":2486,"src":"9067:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2474,"nodeType":"UserDefinedTypeName","pathNode":{"id":2473,"name":"IERC20","nameLocations":["9067:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"9067:6:25"},"referencedDeclaration":10576,"src":"9067:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2477,"mutability":"mutable","name":"exactAmountIn","nameLocation":"9100:13:25","nodeType":"VariableDeclaration","scope":2486,"src":"9092:21:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2476,"name":"uint256","nodeType":"ElementaryTypeName","src":"9092:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2479,"mutability":"mutable","name":"sender","nameLocation":"9131:6:25","nodeType":"VariableDeclaration","scope":2486,"src":"9123:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2478,"name":"address","nodeType":"ElementaryTypeName","src":"9123:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2481,"mutability":"mutable","name":"userData","nameLocation":"9162:8:25","nodeType":"VariableDeclaration","scope":2486,"src":"9147:23:25","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2480,"name":"bytes","nodeType":"ElementaryTypeName","src":"9147:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9011:165:25"},"returnParameters":{"id":2485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2484,"mutability":"mutable","name":"amountOut","nameLocation":"9203:9:25","nodeType":"VariableDeclaration","scope":2486,"src":"9195:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2483,"name":"uint256","nodeType":"ElementaryTypeName","src":"9195:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9194:19:25"},"scope":2507,"src":"8975:239:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2487,"nodeType":"StructuredDocumentation","src":"9220:641:25","text":" @notice Queries a swap operation specifying an exact output token amount without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountOut Exact amounts of input tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens"},"functionSelector":"175d4408","id":2506,"implemented":false,"kind":"function","modifiers":[],"name":"querySwapSingleTokenExactOut","nameLocation":"9875:28:25","nodeType":"FunctionDefinition","parameters":{"id":2502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2489,"mutability":"mutable","name":"pool","nameLocation":"9921:4:25","nodeType":"VariableDeclaration","scope":2506,"src":"9913:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2488,"name":"address","nodeType":"ElementaryTypeName","src":"9913:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2492,"mutability":"mutable","name":"tokenIn","nameLocation":"9942:7:25","nodeType":"VariableDeclaration","scope":2506,"src":"9935:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2491,"nodeType":"UserDefinedTypeName","pathNode":{"id":2490,"name":"IERC20","nameLocations":["9935:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"9935:6:25"},"referencedDeclaration":10576,"src":"9935:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2495,"mutability":"mutable","name":"tokenOut","nameLocation":"9966:8:25","nodeType":"VariableDeclaration","scope":2506,"src":"9959:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2494,"nodeType":"UserDefinedTypeName","pathNode":{"id":2493,"name":"IERC20","nameLocations":["9959:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"9959:6:25"},"referencedDeclaration":10576,"src":"9959:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2497,"mutability":"mutable","name":"exactAmountOut","nameLocation":"9992:14:25","nodeType":"VariableDeclaration","scope":2506,"src":"9984:22:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2496,"name":"uint256","nodeType":"ElementaryTypeName","src":"9984:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2499,"mutability":"mutable","name":"sender","nameLocation":"10024:6:25","nodeType":"VariableDeclaration","scope":2506,"src":"10016:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2498,"name":"address","nodeType":"ElementaryTypeName","src":"10016:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2501,"mutability":"mutable","name":"userData","nameLocation":"10055:8:25","nodeType":"VariableDeclaration","scope":2506,"src":"10040:23:25","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2500,"name":"bytes","nodeType":"ElementaryTypeName","src":"10040:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9903:166:25"},"returnParameters":{"id":2505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2504,"mutability":"mutable","name":"amountIn","nameLocation":"10096:8:25","nodeType":"VariableDeclaration","scope":2506,"src":"10088:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2503,"name":"uint256","nodeType":"ElementaryTypeName","src":"10088:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10087:18:25"},"scope":2507,"src":"9866:240:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2508,"src":"465:9643:25","usedErrors":[],"usedEvents":[]}],"src":"46:10063:25"},"id":25},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","exportedSymbols":{"IAuthentication":[14],"IVault":[2545],"IVaultAdmin":[2835],"IVaultErrors":[3202],"IVaultEvents":[3441],"IVaultExtension":[3860],"IVaultMain":[3996]},"id":2546,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2509,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:26"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"../solidity-utils/helpers/IAuthentication.sol","id":2511,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2546,"sourceUnit":15,"src":"72:80:26","symbolAliases":[{"foreign":{"id":2510,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"81:15:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","file":"./IVaultExtension.sol","id":2513,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2546,"sourceUnit":3861,"src":"153:56:26","symbolAliases":[{"foreign":{"id":2512,"name":"IVaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3860,"src":"162:15:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"./IVaultErrors.sol","id":2515,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2546,"sourceUnit":3203,"src":"210:50:26","symbolAliases":[{"foreign":{"id":2514,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"219:12:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","file":"./IVaultEvents.sol","id":2517,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2546,"sourceUnit":3442,"src":"261:50:26","symbolAliases":[{"foreign":{"id":2516,"name":"IVaultEvents","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3441,"src":"270:12:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"./IVaultAdmin.sol","id":2519,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2546,"sourceUnit":2836,"src":"312:48:26","symbolAliases":[{"foreign":{"id":2518,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2835,"src":"321:11:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","file":"./IVaultMain.sol","id":2521,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2546,"sourceUnit":3997,"src":"361:46:26","symbolAliases":[{"foreign":{"id":2520,"name":"IVaultMain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3996,"src":"370:10:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2523,"name":"IVaultMain","nameLocations":["539:10:26"],"nodeType":"IdentifierPath","referencedDeclaration":3996,"src":"539:10:26"},"id":2524,"nodeType":"InheritanceSpecifier","src":"539:10:26"},{"baseName":{"id":2525,"name":"IVaultExtension","nameLocations":["551:15:26"],"nodeType":"IdentifierPath","referencedDeclaration":3860,"src":"551:15:26"},"id":2526,"nodeType":"InheritanceSpecifier","src":"551:15:26"},{"baseName":{"id":2527,"name":"IVaultAdmin","nameLocations":["568:11:26"],"nodeType":"IdentifierPath","referencedDeclaration":2835,"src":"568:11:26"},"id":2528,"nodeType":"InheritanceSpecifier","src":"568:11:26"},{"baseName":{"id":2529,"name":"IVaultErrors","nameLocations":["581:12:26"],"nodeType":"IdentifierPath","referencedDeclaration":3202,"src":"581:12:26"},"id":2530,"nodeType":"InheritanceSpecifier","src":"581:12:26"},{"baseName":{"id":2531,"name":"IVaultEvents","nameLocations":["595:12:26"],"nodeType":"IdentifierPath","referencedDeclaration":3441,"src":"595:12:26"},"id":2532,"nodeType":"InheritanceSpecifier","src":"595:12:26"},{"baseName":{"id":2533,"name":"IAuthentication","nameLocations":["609:15:26"],"nodeType":"IdentifierPath","referencedDeclaration":14,"src":"609:15:26"},"id":2534,"nodeType":"InheritanceSpecifier","src":"609:15:26"}],"canonicalName":"IVault","contractDependencies":[],"contractKind":"interface","documentation":{"id":2522,"nodeType":"StructuredDocumentation","src":"409:110:26","text":"@notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries."},"fullyImplemented":false,"id":2545,"linearizedBaseContracts":[2545,14,3441,3202,2835,3860,3996],"name":"IVault","nameLocation":"529:6:26","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[2563,3464],"documentation":{"id":2535,"nodeType":"StructuredDocumentation","src":"631:41:26","text":"@return vault The main Vault address."},"functionSelector":"fbfa77cf","id":2544,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"686:5:26","nodeType":"FunctionDefinition","overrides":{"id":2539,"nodeType":"OverrideSpecifier","overrides":[{"id":2537,"name":"IVaultAdmin","nameLocations":["717:11:26"],"nodeType":"IdentifierPath","referencedDeclaration":2835,"src":"717:11:26"},{"id":2538,"name":"IVaultExtension","nameLocations":["730:15:26"],"nodeType":"IdentifierPath","referencedDeclaration":3860,"src":"730:15:26"}],"src":"708:38:26"},"parameters":{"id":2536,"nodeType":"ParameterList","parameters":[],"src":"691:2:26"},"returnParameters":{"id":2543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2542,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2544,"src":"756:6:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":2541,"nodeType":"UserDefinedTypeName","pathNode":{"id":2540,"name":"IVault","nameLocations":["756:6:26"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"756:6:26"},"referencedDeclaration":2545,"src":"756:6:26","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"755:8:26"},"scope":2545,"src":"677:87:26","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2546,"src":"519:247:26","usedErrors":[5,2847,2852,2857,2862,2871,2877,2880,2883,2886,2889,2892,2895,2904,2907,2910,2913,2916,2919,2922,2925,2928,2931,2934,2937,2940,2943,2946,2952,2959,2966,2969,2972,2982,2992,2999,3002,3005,3008,3018,3028,3035,3038,3041,3044,3047,3050,3053,3056,3059,3064,3069,3074,3077,3080,3083,3086,3089,3094,3099,3104,3110,3116,3119,3127,3133,3139,3142,3145,3148,3153,3163,3173,3180,3183,3186,3189,3192,3195,3198,3201],"usedEvents":[3240,3245,3264,3276,3288,3306,3324,3329,3332,3335,3342,3349,3356,3363,3370,3376,3382,3394,3404,3414,3426,3431,3440]}],"src":"46:721:26"},"id":26},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","exportedSymbols":{"IAuthorizer":[1341],"IERC4626":[9846],"IProtocolFeeController":[1955],"IVault":[2545],"IVaultAdmin":[2835]},"id":2836,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2547,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:27"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2549,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2836,"sourceUnit":9847,"src":"72:75:27","symbolAliases":[{"foreign":{"id":2548,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"81:8:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":2551,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2836,"sourceUnit":1956,"src":"149:70:27","symbolAliases":[{"foreign":{"id":2550,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"158:22:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":2553,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2836,"sourceUnit":1342,"src":"220:48:27","symbolAliases":[{"foreign":{"id":2552,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"229:11:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":2555,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2836,"sourceUnit":2546,"src":"269:38:27","symbolAliases":[{"foreign":{"id":2554,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"278:6:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultAdmin","contractDependencies":[],"contractKind":"interface","documentation":{"id":2556,"nodeType":"StructuredDocumentation","src":"309:276:27","text":" @notice Interface for functions defined on the `VaultAdmin` contract.\n @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n as two delegate calls add gas to each call. Most of the permissioned calls are here."},"fullyImplemented":false,"id":2835,"linearizedBaseContracts":[2835],"name":"IVaultAdmin","nameLocation":"596:11:27","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2557,"nodeType":"StructuredDocumentation","src":"841:206:27","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":2563,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1061:5:27","nodeType":"FunctionDefinition","parameters":{"id":2558,"nodeType":"ParameterList","parameters":[],"src":"1066:2:27"},"returnParameters":{"id":2562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2561,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2563,"src":"1092:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":2560,"nodeType":"UserDefinedTypeName","pathNode":{"id":2559,"name":"IVault","nameLocations":["1092:6:27"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1092:6:27"},"referencedDeclaration":2545,"src":"1092:6:27","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1091:8:27"},"scope":2835,"src":"1052:48:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2564,"nodeType":"StructuredDocumentation","src":"1106:326:27","text":" @notice Returns the Vault's pause window end time.\n @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n by governance. Balancer timestamps are 32 bits.\n @return pauseWindowEndTime The timestamp when the Vault's pause window ends"},"functionSelector":"8a8d123a","id":2569,"implemented":false,"kind":"function","modifiers":[],"name":"getPauseWindowEndTime","nameLocation":"1446:21:27","nodeType":"FunctionDefinition","parameters":{"id":2565,"nodeType":"ParameterList","parameters":[],"src":"1467:2:27"},"returnParameters":{"id":2568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2567,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1500:18:27","nodeType":"VariableDeclaration","scope":2569,"src":"1493:25:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2566,"name":"uint32","nodeType":"ElementaryTypeName","src":"1493:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1492:27:27"},"scope":2835,"src":"1437:83:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2570,"nodeType":"StructuredDocumentation","src":"1526:414:27","text":" @notice Returns the Vault's buffer period duration.\n @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n timestamps are 32 bits.\n @return bufferPeriodDuration The length of the buffer period in seconds"},"functionSelector":"20c1fb7a","id":2575,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodDuration","nameLocation":"1954:23:27","nodeType":"FunctionDefinition","parameters":{"id":2571,"nodeType":"ParameterList","parameters":[],"src":"1977:2:27"},"returnParameters":{"id":2574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2573,"mutability":"mutable","name":"bufferPeriodDuration","nameLocation":"2010:20:27","nodeType":"VariableDeclaration","scope":2575,"src":"2003:27:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2572,"name":"uint32","nodeType":"ElementaryTypeName","src":"2003:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2002:29:27"},"scope":2835,"src":"1945:87:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2576,"nodeType":"StructuredDocumentation","src":"2038:321:27","text":" @notice Returns the Vault's buffer period end time.\n @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n timestamps are 32 bits.\n @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused"},"functionSelector":"cd51c12f","id":2581,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodEndTime","nameLocation":"2373:22:27","nodeType":"FunctionDefinition","parameters":{"id":2577,"nodeType":"ParameterList","parameters":[],"src":"2395:2:27"},"returnParameters":{"id":2580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2579,"mutability":"mutable","name":"bufferPeriodEndTime","nameLocation":"2428:19:27","nodeType":"VariableDeclaration","scope":2581,"src":"2421:26:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2578,"name":"uint32","nodeType":"ElementaryTypeName","src":"2421:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2420:28:27"},"scope":2835,"src":"2364:85:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2582,"nodeType":"StructuredDocumentation","src":"2455:193:27","text":" @notice Get the minimum number of tokens in a pool.\n @dev We expect the vast majority of pools to be 2-token.\n @return minTokens The minimum token count of a pool"},"functionSelector":"a8175b27","id":2587,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumPoolTokens","nameLocation":"2662:20:27","nodeType":"FunctionDefinition","parameters":{"id":2583,"nodeType":"ParameterList","parameters":[],"src":"2682:2:27"},"returnParameters":{"id":2586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2585,"mutability":"mutable","name":"minTokens","nameLocation":"2716:9:27","nodeType":"VariableDeclaration","scope":2587,"src":"2708:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2584,"name":"uint256","nodeType":"ElementaryTypeName","src":"2708:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2707:19:27"},"scope":2835,"src":"2653:74:27","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":2588,"nodeType":"StructuredDocumentation","src":"2733:129:27","text":" @notice Get the maximum number of tokens in a pool.\n @return maxTokens The maximum token count of a pool"},"functionSelector":"2e42f4d5","id":2593,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumPoolTokens","nameLocation":"2876:20:27","nodeType":"FunctionDefinition","parameters":{"id":2589,"nodeType":"ParameterList","parameters":[],"src":"2896:2:27"},"returnParameters":{"id":2592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2591,"mutability":"mutable","name":"maxTokens","nameLocation":"2930:9:27","nodeType":"VariableDeclaration","scope":2593,"src":"2922:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2590,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2921:19:27"},"scope":2835,"src":"2867:74:27","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":2594,"nodeType":"StructuredDocumentation","src":"2947:439:27","text":" @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization"},"functionSelector":"d0965a6b","id":2599,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolMinimumTotalSupply","nameLocation":"3400:25:27","nodeType":"FunctionDefinition","parameters":{"id":2595,"nodeType":"ParameterList","parameters":[],"src":"3425:2:27"},"returnParameters":{"id":2598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2597,"mutability":"mutable","name":"poolMinimumTotalSupply","nameLocation":"3459:22:27","nodeType":"VariableDeclaration","scope":2599,"src":"3451:30:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2596,"name":"uint256","nodeType":"ElementaryTypeName","src":"3451:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3450:32:27"},"scope":2835,"src":"3391:92:27","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":2600,"nodeType":"StructuredDocumentation","src":"3489:502:27","text":" @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n to the Vault, as buffers are not tokenized.\n @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization"},"functionSelector":"26a8a991","id":2605,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferMinimumTotalSupply","nameLocation":"4005:27:27","nodeType":"FunctionDefinition","parameters":{"id":2601,"nodeType":"ParameterList","parameters":[],"src":"4032:2:27"},"returnParameters":{"id":2604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2603,"mutability":"mutable","name":"bufferMinimumTotalSupply","nameLocation":"4066:24:27","nodeType":"VariableDeclaration","scope":2605,"src":"4058:32:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2602,"name":"uint256","nodeType":"ElementaryTypeName","src":"4058:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4057:34:27"},"scope":2835,"src":"3996:96:27","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":2606,"nodeType":"StructuredDocumentation","src":"4098:291:27","text":" @notice Get the minimum trade amount in a pool operation.\n @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number"},"functionSelector":"e2cb0ba0","id":2611,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumTradeAmount","nameLocation":"4403:21:27","nodeType":"FunctionDefinition","parameters":{"id":2607,"nodeType":"ParameterList","parameters":[],"src":"4424:2:27"},"returnParameters":{"id":2610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2609,"mutability":"mutable","name":"minimumTradeAmount","nameLocation":"4458:18:27","nodeType":"VariableDeclaration","scope":2611,"src":"4450:26:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2608,"name":"uint256","nodeType":"ElementaryTypeName","src":"4450:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4449:28:27"},"scope":2835,"src":"4394:84:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2612,"nodeType":"StructuredDocumentation","src":"4484:271:27","text":" @notice Get the minimum wrap amount in a buffer operation.\n @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n @return minimumWrapAmount The minimum wrap amount in native underlying token decimals"},"functionSelector":"53956aa2","id":2617,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumWrapAmount","nameLocation":"4769:20:27","nodeType":"FunctionDefinition","parameters":{"id":2613,"nodeType":"ParameterList","parameters":[],"src":"4789:2:27"},"returnParameters":{"id":2616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2615,"mutability":"mutable","name":"minimumWrapAmount","nameLocation":"4823:17:27","nodeType":"VariableDeclaration","scope":2617,"src":"4815:25:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2614,"name":"uint256","nodeType":"ElementaryTypeName","src":"4815:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4814:27:27"},"scope":2835,"src":"4760:82:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2618,"nodeType":"StructuredDocumentation","src":"5069:529:27","text":" @notice Indicates whether the Vault is paused.\n @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n `areBuffersPaused` to check the pause state of the buffers.\n @return vaultPaused True if the Vault is paused"},"functionSelector":"098401f5","id":2623,"implemented":false,"kind":"function","modifiers":[],"name":"isVaultPaused","nameLocation":"5612:13:27","nodeType":"FunctionDefinition","parameters":{"id":2619,"nodeType":"ParameterList","parameters":[],"src":"5625:2:27"},"returnParameters":{"id":2622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2621,"mutability":"mutable","name":"vaultPaused","nameLocation":"5656:11:27","nodeType":"VariableDeclaration","scope":2623,"src":"5651:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2620,"name":"bool","nodeType":"ElementaryTypeName","src":"5651:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5650:18:27"},"scope":2835,"src":"5603:66:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2624,"nodeType":"StructuredDocumentation","src":"5675:400:27","text":" @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n @dev Balancer timestamps are 32 bits.\n @return vaultPaused True if the Vault is paused\n @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period"},"functionSelector":"85c8c015","id":2633,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultPausedState","nameLocation":"6089:19:27","nodeType":"FunctionDefinition","parameters":{"id":2625,"nodeType":"ParameterList","parameters":[],"src":"6108:2:27"},"returnParameters":{"id":2632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2627,"mutability":"mutable","name":"vaultPaused","nameLocation":"6163:11:27","nodeType":"VariableDeclaration","scope":2633,"src":"6158:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2626,"name":"bool","nodeType":"ElementaryTypeName","src":"6158:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2629,"mutability":"mutable","name":"vaultPauseWindowEndTime","nameLocation":"6183:23:27","nodeType":"VariableDeclaration","scope":2633,"src":"6176:30:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2628,"name":"uint32","nodeType":"ElementaryTypeName","src":"6176:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2631,"mutability":"mutable","name":"vaultBufferPeriodEndTime","nameLocation":"6215:24:27","nodeType":"VariableDeclaration","scope":2633,"src":"6208:31:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2630,"name":"uint32","nodeType":"ElementaryTypeName","src":"6208:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"6157:83:27"},"scope":2835,"src":"6080:161:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2634,"nodeType":"StructuredDocumentation","src":"6247:517:27","text":" @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n are also paused (with `pauseVaultBuffers`)."},"functionSelector":"9e0879c2","id":2637,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVault","nameLocation":"6778:10:27","nodeType":"FunctionDefinition","parameters":{"id":2635,"nodeType":"ParameterList","parameters":[],"src":"6788:2:27"},"returnParameters":{"id":2636,"nodeType":"ParameterList","parameters":[],"src":"6799:0:27"},"scope":2835,"src":"6769:31:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2638,"nodeType":"StructuredDocumentation","src":"6806:569:27","text":" @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused."},"functionSelector":"0b7562be","id":2641,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVault","nameLocation":"7389:12:27","nodeType":"FunctionDefinition","parameters":{"id":2639,"nodeType":"ParameterList","parameters":[],"src":"7401:2:27"},"returnParameters":{"id":2640,"nodeType":"ParameterList","parameters":[],"src":"7412:0:27"},"scope":2835,"src":"7380:33:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2642,"nodeType":"StructuredDocumentation","src":"7639:276:27","text":" @notice Pause the Pool: an emergency action which disables all pool functions.\n @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n deployment.\n @param pool The pool being paused"},"functionSelector":"55aca1ec","id":2647,"implemented":false,"kind":"function","modifiers":[],"name":"pausePool","nameLocation":"7929:9:27","nodeType":"FunctionDefinition","parameters":{"id":2645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2644,"mutability":"mutable","name":"pool","nameLocation":"7947:4:27","nodeType":"VariableDeclaration","scope":2647,"src":"7939:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2643,"name":"address","nodeType":"ElementaryTypeName","src":"7939:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7938:14:27"},"returnParameters":{"id":2646,"nodeType":"ParameterList","parameters":[],"src":"7961:0:27"},"scope":2835,"src":"7920:42:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2648,"nodeType":"StructuredDocumentation","src":"7968:366:27","text":" @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n @param pool The pool being unpaused"},"functionSelector":"f21c38cd","id":2653,"implemented":false,"kind":"function","modifiers":[],"name":"unpausePool","nameLocation":"8348:11:27","nodeType":"FunctionDefinition","parameters":{"id":2651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2650,"mutability":"mutable","name":"pool","nameLocation":"8368:4:27","nodeType":"VariableDeclaration","scope":2653,"src":"8360:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2649,"name":"address","nodeType":"ElementaryTypeName","src":"8360:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8359:14:27"},"returnParameters":{"id":2652,"nodeType":"ParameterList","parameters":[],"src":"8382:0:27"},"scope":2835,"src":"8339:44:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2654,"nodeType":"StructuredDocumentation","src":"8606:520:27","text":" @notice Assigns a new static swap fee percentage to the specified pool.\n @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n Emits the SwapFeePercentageChanged event.\n @param pool The address of the pool for which the static swap fee will be changed\n @param swapFeePercentage The new swap fee percentage to apply to the pool"},"functionSelector":"d15126ba","id":2661,"implemented":false,"kind":"function","modifiers":[],"name":"setStaticSwapFeePercentage","nameLocation":"9140:26:27","nodeType":"FunctionDefinition","parameters":{"id":2659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2656,"mutability":"mutable","name":"pool","nameLocation":"9175:4:27","nodeType":"VariableDeclaration","scope":2661,"src":"9167:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2655,"name":"address","nodeType":"ElementaryTypeName","src":"9167:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2658,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"9189:17:27","nodeType":"VariableDeclaration","scope":2661,"src":"9181:25:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2657,"name":"uint256","nodeType":"ElementaryTypeName","src":"9181:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9166:41:27"},"returnParameters":{"id":2660,"nodeType":"ParameterList","parameters":[],"src":"9216:0:27"},"scope":2835,"src":"9131:86:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2662,"nodeType":"StructuredDocumentation","src":"9223:463:27","text":" @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n @dev Fees are sent to the ProtocolFeeController address.\n @param pool The pool on which all aggregate fees should be collected\n @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"functionSelector":"8f4ab9ca","id":2673,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"9700:20:27","nodeType":"FunctionDefinition","parameters":{"id":2665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2664,"mutability":"mutable","name":"pool","nameLocation":"9738:4:27","nodeType":"VariableDeclaration","scope":2673,"src":"9730:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2663,"name":"address","nodeType":"ElementaryTypeName","src":"9730:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9720:28:27"},"returnParameters":{"id":2672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2668,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"9784:14:27","nodeType":"VariableDeclaration","scope":2673,"src":"9767:31:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2666,"name":"uint256","nodeType":"ElementaryTypeName","src":"9767:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2667,"nodeType":"ArrayTypeName","src":"9767:9:27","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2671,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"9817:15:27","nodeType":"VariableDeclaration","scope":2673,"src":"9800:32:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2669,"name":"uint256","nodeType":"ElementaryTypeName","src":"9800:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2670,"nodeType":"ArrayTypeName","src":"9800:9:27","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9766:67:27"},"scope":2835,"src":"9691:143:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2674,"nodeType":"StructuredDocumentation","src":"9840:755:27","text":" @notice Update an aggregate swap fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateSwapFeePercentageChanged` event.\n @param pool The pool whose swap fee percentage will be updated\n @param newAggregateSwapFeePercentage The new aggregate swap fee percentage"},"functionSelector":"5e0b06f4","id":2681,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateSwapFeePercentage","nameLocation":"10609:32:27","nodeType":"FunctionDefinition","parameters":{"id":2679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2676,"mutability":"mutable","name":"pool","nameLocation":"10650:4:27","nodeType":"VariableDeclaration","scope":2681,"src":"10642:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2675,"name":"address","nodeType":"ElementaryTypeName","src":"10642:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2678,"mutability":"mutable","name":"newAggregateSwapFeePercentage","nameLocation":"10664:29:27","nodeType":"VariableDeclaration","scope":2681,"src":"10656:37:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2677,"name":"uint256","nodeType":"ElementaryTypeName","src":"10656:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10641:53:27"},"returnParameters":{"id":2680,"nodeType":"ParameterList","parameters":[],"src":"10703:0:27"},"scope":2835,"src":"10600:104:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2682,"nodeType":"StructuredDocumentation","src":"10710:760:27","text":" @notice Update an aggregate yield fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateYieldFeePercentageChanged` event.\n @param pool The pool whose yield fee percentage will be updated\n @param newAggregateYieldFeePercentage The new aggregate yield fee percentage"},"functionSelector":"e253670a","id":2689,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateYieldFeePercentage","nameLocation":"11484:33:27","nodeType":"FunctionDefinition","parameters":{"id":2687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2684,"mutability":"mutable","name":"pool","nameLocation":"11526:4:27","nodeType":"VariableDeclaration","scope":2689,"src":"11518:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2683,"name":"address","nodeType":"ElementaryTypeName","src":"11518:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2686,"mutability":"mutable","name":"newAggregateYieldFeePercentage","nameLocation":"11540:30:27","nodeType":"VariableDeclaration","scope":2689,"src":"11532:38:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2685,"name":"uint256","nodeType":"ElementaryTypeName","src":"11532:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11517:54:27"},"returnParameters":{"id":2688,"nodeType":"ParameterList","parameters":[],"src":"11580:0:27"},"scope":2835,"src":"11475:106:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2690,"nodeType":"StructuredDocumentation","src":"11587:249:27","text":" @notice Sets a new Protocol Fee Controller for the Vault.\n @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n @param newProtocolFeeController The address of the new Protocol Fee Controller"},"functionSelector":"2d771389","id":2696,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolFeeController","nameLocation":"11850:24:27","nodeType":"FunctionDefinition","parameters":{"id":2694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2693,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"11898:24:27","nodeType":"VariableDeclaration","scope":2696,"src":"11875:47:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":2692,"nodeType":"UserDefinedTypeName","pathNode":{"id":2691,"name":"IProtocolFeeController","nameLocations":["11875:22:27"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"11875:22:27"},"referencedDeclaration":1955,"src":"11875:22:27","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"11874:49:27"},"returnParameters":{"id":2695,"nodeType":"ParameterList","parameters":[],"src":"11932:0:27"},"scope":2835,"src":"11841:92:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2697,"nodeType":"StructuredDocumentation","src":"12160:557:27","text":" @notice Enable recovery mode for a pool.\n @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n @param pool The address of the pool"},"functionSelector":"dc3f574e","id":2702,"implemented":false,"kind":"function","modifiers":[],"name":"enableRecoveryMode","nameLocation":"12731:18:27","nodeType":"FunctionDefinition","parameters":{"id":2700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2699,"mutability":"mutable","name":"pool","nameLocation":"12758:4:27","nodeType":"VariableDeclaration","scope":2702,"src":"12750:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2698,"name":"address","nodeType":"ElementaryTypeName","src":"12750:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12749:14:27"},"returnParameters":{"id":2701,"nodeType":"ParameterList","parameters":[],"src":"12772:0:27"},"scope":2835,"src":"12722:51:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2703,"nodeType":"StructuredDocumentation","src":"12779:409:27","text":" @notice Disable recovery mode for a pool.\n @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n potentially fail if there is an issue with any associated Rate Providers.\n @param pool The address of the pool"},"functionSelector":"bffb78b2","id":2708,"implemented":false,"kind":"function","modifiers":[],"name":"disableRecoveryMode","nameLocation":"13202:19:27","nodeType":"FunctionDefinition","parameters":{"id":2706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2705,"mutability":"mutable","name":"pool","nameLocation":"13230:4:27","nodeType":"VariableDeclaration","scope":2708,"src":"13222:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2704,"name":"address","nodeType":"ElementaryTypeName","src":"13222:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13221:14:27"},"returnParameters":{"id":2707,"nodeType":"ParameterList","parameters":[],"src":"13244:0:27"},"scope":2835,"src":"13193:52:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2709,"nodeType":"StructuredDocumentation","src":"13476:653:27","text":" @notice Disables query functionality on the Vault. Can only be called by governance.\n @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n disabling queries is completely necessary; queries can still be re-enabled after this call."},"functionSelector":"de1a36a6","id":2712,"implemented":false,"kind":"function","modifiers":[],"name":"disableQuery","nameLocation":"14143:12:27","nodeType":"FunctionDefinition","parameters":{"id":2710,"nodeType":"ParameterList","parameters":[],"src":"14155:2:27"},"returnParameters":{"id":2711,"nodeType":"ParameterList","parameters":[],"src":"14166:0:27"},"scope":2835,"src":"14134:33:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2713,"nodeType":"StructuredDocumentation","src":"14173:223:27","text":" @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system."},"functionSelector":"821440f2","id":2716,"implemented":false,"kind":"function","modifiers":[],"name":"disableQueryPermanently","nameLocation":"14410:23:27","nodeType":"FunctionDefinition","parameters":{"id":2714,"nodeType":"ParameterList","parameters":[],"src":"14433:2:27"},"returnParameters":{"id":2715,"nodeType":"ParameterList","parameters":[],"src":"14444:0:27"},"scope":2835,"src":"14401:44:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2717,"nodeType":"StructuredDocumentation","src":"14451:166:27","text":" @notice Enables query functionality on the Vault. Can only be called by governance.\n @dev Only works if queries are not permanently disabled."},"functionSelector":"e0d55605","id":2720,"implemented":false,"kind":"function","modifiers":[],"name":"enableQuery","nameLocation":"14631:11:27","nodeType":"FunctionDefinition","parameters":{"id":2718,"nodeType":"ParameterList","parameters":[],"src":"14642:2:27"},"returnParameters":{"id":2719,"nodeType":"ParameterList","parameters":[],"src":"14653:0:27"},"scope":2835,"src":"14622:32:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2721,"nodeType":"StructuredDocumentation","src":"14881:590:27","text":" @notice Indicates whether the Vault buffers are paused.\n @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n @return buffersPaused True if the Vault buffers are paused"},"functionSelector":"55cba7fe","id":2726,"implemented":false,"kind":"function","modifiers":[],"name":"areBuffersPaused","nameLocation":"15485:16:27","nodeType":"FunctionDefinition","parameters":{"id":2722,"nodeType":"ParameterList","parameters":[],"src":"15501:2:27"},"returnParameters":{"id":2725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2724,"mutability":"mutable","name":"buffersPaused","nameLocation":"15532:13:27","nodeType":"VariableDeclaration","scope":2726,"src":"15527:18:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2723,"name":"bool","nodeType":"ElementaryTypeName","src":"15527:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15526:20:27"},"scope":2835,"src":"15476:71:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2727,"nodeType":"StructuredDocumentation","src":"15553:619:27","text":" @notice Pauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n possible to pause vault buffers individually.\n This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n buffers, and vice versa."},"functionSelector":"e085c5a8","id":2730,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVaultBuffers","nameLocation":"16186:17:27","nodeType":"FunctionDefinition","parameters":{"id":2728,"nodeType":"ParameterList","parameters":[],"src":"16203:2:27"},"returnParameters":{"id":2729,"nodeType":"ParameterList","parameters":[],"src":"16214:0:27"},"scope":2835,"src":"16177:38:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2731,"nodeType":"StructuredDocumentation","src":"16221:545:27","text":" @notice Unpauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n If the Vault was also paused, it will remain in that state until explicitly unpaused.\n This is a permissioned call."},"functionSelector":"b9212b49","id":2734,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVaultBuffers","nameLocation":"16780:19:27","nodeType":"FunctionDefinition","parameters":{"id":2732,"nodeType":"ParameterList","parameters":[],"src":"16799:2:27"},"returnParameters":{"id":2733,"nodeType":"ParameterList","parameters":[],"src":"16810:0:27"},"scope":2835,"src":"16771:40:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2735,"nodeType":"StructuredDocumentation","src":"16817:860:27","text":" @notice Initializes buffer for the given wrapped token.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n native decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals."},"functionSelector":"653eb3b0","id":2751,"implemented":false,"kind":"function","modifiers":[],"name":"initializeBuffer","nameLocation":"17691:16:27","nodeType":"FunctionDefinition","parameters":{"id":2747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2738,"mutability":"mutable","name":"wrappedToken","nameLocation":"17726:12:27","nodeType":"VariableDeclaration","scope":2751,"src":"17717:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":2737,"nodeType":"UserDefinedTypeName","pathNode":{"id":2736,"name":"IERC4626","nameLocations":["17717:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"17717:8:27"},"referencedDeclaration":9846,"src":"17717:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2740,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"17756:19:27","nodeType":"VariableDeclaration","scope":2751,"src":"17748:27:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2739,"name":"uint256","nodeType":"ElementaryTypeName","src":"17748:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2742,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"17793:16:27","nodeType":"VariableDeclaration","scope":2751,"src":"17785:24:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2741,"name":"uint256","nodeType":"ElementaryTypeName","src":"17785:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2744,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17827:15:27","nodeType":"VariableDeclaration","scope":2751,"src":"17819:23:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2743,"name":"uint256","nodeType":"ElementaryTypeName","src":"17819:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2746,"mutability":"mutable","name":"sharesOwner","nameLocation":"17860:11:27","nodeType":"VariableDeclaration","scope":2751,"src":"17852:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2745,"name":"address","nodeType":"ElementaryTypeName","src":"17852:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17707:170:27"},"returnParameters":{"id":2750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2749,"mutability":"mutable","name":"issuedShares","nameLocation":"17904:12:27","nodeType":"VariableDeclaration","scope":2751,"src":"17896:20:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2748,"name":"uint256","nodeType":"ElementaryTypeName","src":"17896:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17895:22:27"},"scope":2835,"src":"17682:236:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2752,"nodeType":"StructuredDocumentation","src":"17924:1010:27","text":" @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n @dev The buffer needs to be initialized beforehand.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n underlying token native decimals\n @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n token native decimals\n @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n in underlying token decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer"},"functionSelector":"e2a92b1a","id":2770,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityToBuffer","nameLocation":"18948:20:27","nodeType":"FunctionDefinition","parameters":{"id":2764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2755,"mutability":"mutable","name":"wrappedToken","nameLocation":"18987:12:27","nodeType":"VariableDeclaration","scope":2770,"src":"18978:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":2754,"nodeType":"UserDefinedTypeName","pathNode":{"id":2753,"name":"IERC4626","nameLocations":["18978:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"18978:8:27"},"referencedDeclaration":9846,"src":"18978:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2757,"mutability":"mutable","name":"maxAmountUnderlyingInRaw","nameLocation":"19017:24:27","nodeType":"VariableDeclaration","scope":2770,"src":"19009:32:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2756,"name":"uint256","nodeType":"ElementaryTypeName","src":"19009:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2759,"mutability":"mutable","name":"maxAmountWrappedInRaw","nameLocation":"19059:21:27","nodeType":"VariableDeclaration","scope":2770,"src":"19051:29:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2758,"name":"uint256","nodeType":"ElementaryTypeName","src":"19051:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2761,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"19098:18:27","nodeType":"VariableDeclaration","scope":2770,"src":"19090:26:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2760,"name":"uint256","nodeType":"ElementaryTypeName","src":"19090:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2763,"mutability":"mutable","name":"sharesOwner","nameLocation":"19134:11:27","nodeType":"VariableDeclaration","scope":2770,"src":"19126:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2762,"name":"address","nodeType":"ElementaryTypeName","src":"19126:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18968:183:27"},"returnParameters":{"id":2769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2766,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"19178:19:27","nodeType":"VariableDeclaration","scope":2770,"src":"19170:27:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2765,"name":"uint256","nodeType":"ElementaryTypeName","src":"19170:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2768,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"19207:16:27","nodeType":"VariableDeclaration","scope":2770,"src":"19199:24:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2767,"name":"uint256","nodeType":"ElementaryTypeName","src":"19199:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19169:55:27"},"scope":2835,"src":"18939:286:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2771,"nodeType":"StructuredDocumentation","src":"19231:1458:27","text":" @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n Pre-conditions:\n - The buffer needs to be initialized.\n - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n total shares. It is expressed in underlying token native decimals\n @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n in underlying token native decimals\n @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n wrapped token native decimals\n @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user"},"functionSelector":"ebc7955c","id":2787,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityFromBuffer","nameLocation":"20703:25:27","nodeType":"FunctionDefinition","parameters":{"id":2781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2774,"mutability":"mutable","name":"wrappedToken","nameLocation":"20747:12:27","nodeType":"VariableDeclaration","scope":2787,"src":"20738:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":2773,"nodeType":"UserDefinedTypeName","pathNode":{"id":2772,"name":"IERC4626","nameLocations":["20738:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"20738:8:27"},"referencedDeclaration":9846,"src":"20738:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2776,"mutability":"mutable","name":"sharesToRemove","nameLocation":"20777:14:27","nodeType":"VariableDeclaration","scope":2787,"src":"20769:22:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2775,"name":"uint256","nodeType":"ElementaryTypeName","src":"20769:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2778,"mutability":"mutable","name":"minAmountUnderlyingOutRaw","nameLocation":"20809:25:27","nodeType":"VariableDeclaration","scope":2787,"src":"20801:33:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2777,"name":"uint256","nodeType":"ElementaryTypeName","src":"20801:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2780,"mutability":"mutable","name":"minAmountWrappedOutRaw","nameLocation":"20852:22:27","nodeType":"VariableDeclaration","scope":2787,"src":"20844:30:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2779,"name":"uint256","nodeType":"ElementaryTypeName","src":"20844:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20728:152:27"},"returnParameters":{"id":2786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2783,"mutability":"mutable","name":"removedUnderlyingBalanceRaw","nameLocation":"20907:27:27","nodeType":"VariableDeclaration","scope":2787,"src":"20899:35:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2782,"name":"uint256","nodeType":"ElementaryTypeName","src":"20899:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2785,"mutability":"mutable","name":"removedWrappedBalanceRaw","nameLocation":"20944:24:27","nodeType":"VariableDeclaration","scope":2787,"src":"20936:32:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2784,"name":"uint256","nodeType":"ElementaryTypeName","src":"20936:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20898:71:27"},"scope":2835,"src":"20694:276:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2788,"nodeType":"StructuredDocumentation","src":"20976:382:27","text":" @notice Returns the asset registered for a given wrapped token.\n @dev The asset can never change after buffer initialization.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n has not been initialized."},"functionSelector":"0387587d","id":2796,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferAsset","nameLocation":"21372:14:27","nodeType":"FunctionDefinition","parameters":{"id":2792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2791,"mutability":"mutable","name":"wrappedToken","nameLocation":"21396:12:27","nodeType":"VariableDeclaration","scope":2796,"src":"21387:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":2790,"nodeType":"UserDefinedTypeName","pathNode":{"id":2789,"name":"IERC4626","nameLocations":["21387:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"21387:8:27"},"referencedDeclaration":9846,"src":"21387:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"21386:23:27"},"returnParameters":{"id":2795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2794,"mutability":"mutable","name":"underlyingToken","nameLocation":"21441:15:27","nodeType":"VariableDeclaration","scope":2796,"src":"21433:23:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2793,"name":"address","nodeType":"ElementaryTypeName","src":"21433:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21432:25:27"},"scope":2835,"src":"21363:95:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2797,"nodeType":"StructuredDocumentation","src":"21464:441:27","text":" @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n in the buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals"},"functionSelector":"9385e39a","id":2807,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferOwnerShares","nameLocation":"21919:20:27","nodeType":"FunctionDefinition","parameters":{"id":2803,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2800,"mutability":"mutable","name":"wrappedToken","nameLocation":"21958:12:27","nodeType":"VariableDeclaration","scope":2807,"src":"21949:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":2799,"nodeType":"UserDefinedTypeName","pathNode":{"id":2798,"name":"IERC4626","nameLocations":["21949:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"21949:8:27"},"referencedDeclaration":9846,"src":"21949:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2802,"mutability":"mutable","name":"liquidityOwner","nameLocation":"21988:14:27","nodeType":"VariableDeclaration","scope":2807,"src":"21980:22:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2801,"name":"address","nodeType":"ElementaryTypeName","src":"21980:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21939:69:27"},"returnParameters":{"id":2806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2805,"mutability":"mutable","name":"ownerShares","nameLocation":"22040:11:27","nodeType":"VariableDeclaration","scope":2807,"src":"22032:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2804,"name":"uint256","nodeType":"ElementaryTypeName","src":"22032:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22031:21:27"},"scope":2835,"src":"21910:143:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2808,"nodeType":"StructuredDocumentation","src":"22059:281:27","text":" @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals"},"functionSelector":"f2784e07","id":2816,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferTotalShares","nameLocation":"22354:20:27","nodeType":"FunctionDefinition","parameters":{"id":2812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2811,"mutability":"mutable","name":"wrappedToken","nameLocation":"22384:12:27","nodeType":"VariableDeclaration","scope":2816,"src":"22375:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":2810,"nodeType":"UserDefinedTypeName","pathNode":{"id":2809,"name":"IERC4626","nameLocations":["22375:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"22375:8:27"},"referencedDeclaration":9846,"src":"22375:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"22374:23:27"},"returnParameters":{"id":2815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2814,"mutability":"mutable","name":"bufferShares","nameLocation":"22429:12:27","nodeType":"VariableDeclaration","scope":2816,"src":"22421:20:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2813,"name":"uint256","nodeType":"ElementaryTypeName","src":"22421:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22420:22:27"},"scope":2835,"src":"22345:98:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2817,"nodeType":"StructuredDocumentation","src":"22449:521:27","text":" @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n @dev All values are in native token decimals of the wrapped or underlying tokens.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals"},"functionSelector":"4021fe0f","id":2827,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferBalance","nameLocation":"22984:16:27","nodeType":"FunctionDefinition","parameters":{"id":2821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2820,"mutability":"mutable","name":"wrappedToken","nameLocation":"23019:12:27","nodeType":"VariableDeclaration","scope":2827,"src":"23010:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":2819,"nodeType":"UserDefinedTypeName","pathNode":{"id":2818,"name":"IERC4626","nameLocations":["23010:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"23010:8:27"},"referencedDeclaration":9846,"src":"23010:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"23000:37:27"},"returnParameters":{"id":2826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2823,"mutability":"mutable","name":"underlyingBalanceRaw","nameLocation":"23069:20:27","nodeType":"VariableDeclaration","scope":2827,"src":"23061:28:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2822,"name":"uint256","nodeType":"ElementaryTypeName","src":"23061:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2825,"mutability":"mutable","name":"wrappedBalanceRaw","nameLocation":"23099:17:27","nodeType":"VariableDeclaration","scope":2827,"src":"23091:25:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2824,"name":"uint256","nodeType":"ElementaryTypeName","src":"23091:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23060:57:27"},"scope":2835,"src":"22975:143:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2828,"nodeType":"StructuredDocumentation","src":"23342:202:27","text":" @notice Sets a new Authorizer for the Vault.\n @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n @param newAuthorizer The address of the new authorizer"},"functionSelector":"058a628f","id":2834,"implemented":false,"kind":"function","modifiers":[],"name":"setAuthorizer","nameLocation":"23558:13:27","nodeType":"FunctionDefinition","parameters":{"id":2832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2831,"mutability":"mutable","name":"newAuthorizer","nameLocation":"23584:13:27","nodeType":"VariableDeclaration","scope":2834,"src":"23572:25:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"},"typeName":{"id":2830,"nodeType":"UserDefinedTypeName","pathNode":{"id":2829,"name":"IAuthorizer","nameLocations":["23572:11:27"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"23572:11:27"},"referencedDeclaration":1341,"src":"23572:11:27","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23571:27:27"},"returnParameters":{"id":2833,"nodeType":"ParameterList","parameters":[],"src":"23607:0:27"},"scope":2835,"src":"23549:59:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2836,"src":"586:23024:27","usedErrors":[],"usedEvents":[]}],"src":"46:23565:27"},"id":27},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","exportedSymbols":{"IERC20":[10576],"IERC4626":[9846],"IVaultErrors":[3202]},"id":3203,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2837,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:28"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2839,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3203,"sourceUnit":9847,"src":"72:75:28","symbolAliases":[{"foreign":{"id":2838,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"81:8:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2841,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3203,"sourceUnit":10577,"src":"148:72:28","symbolAliases":[{"foreign":{"id":2840,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"157:6:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultErrors","contractDependencies":[],"contractKind":"interface","documentation":{"id":2842,"nodeType":"StructuredDocumentation","src":"222:94:28","text":"@notice Errors are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":3202,"linearizedBaseContracts":[3202],"name":"IVaultErrors","nameLocation":"326:12:28","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2843,"nodeType":"StructuredDocumentation","src":"576:149:28","text":" @notice A pool has already been registered. `registerPool` may only be called once.\n @param pool The already registered pool"},"errorSelector":"db771c80","id":2847,"name":"PoolAlreadyRegistered","nameLocation":"736:21:28","nodeType":"ErrorDefinition","parameters":{"id":2846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2845,"mutability":"mutable","name":"pool","nameLocation":"766:4:28","nodeType":"VariableDeclaration","scope":2847,"src":"758:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2844,"name":"address","nodeType":"ElementaryTypeName","src":"758:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"757:14:28"},"src":"730:42:28"},{"documentation":{"id":2848,"nodeType":"StructuredDocumentation","src":"778:149:28","text":" @notice A pool has already been initialized. `initialize` may only be called once.\n @param pool The already initialized pool"},"errorSelector":"218e3747","id":2852,"name":"PoolAlreadyInitialized","nameLocation":"938:22:28","nodeType":"ErrorDefinition","parameters":{"id":2851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2850,"mutability":"mutable","name":"pool","nameLocation":"969:4:28","nodeType":"VariableDeclaration","scope":2852,"src":"961:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2849,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"960:14:28"},"src":"932:43:28"},{"documentation":{"id":2853,"nodeType":"StructuredDocumentation","src":"981:99:28","text":" @notice A pool has not been registered.\n @param pool The unregistered pool"},"errorSelector":"9e51bd5c","id":2857,"name":"PoolNotRegistered","nameLocation":"1091:17:28","nodeType":"ErrorDefinition","parameters":{"id":2856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2855,"mutability":"mutable","name":"pool","nameLocation":"1117:4:28","nodeType":"VariableDeclaration","scope":2857,"src":"1109:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2854,"name":"address","nodeType":"ElementaryTypeName","src":"1109:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1108:14:28"},"src":"1085:38:28"},{"documentation":{"id":2858,"nodeType":"StructuredDocumentation","src":"1129:112:28","text":" @notice A referenced pool has not been initialized.\n @param pool The uninitialized pool"},"errorSelector":"4bdace13","id":2862,"name":"PoolNotInitialized","nameLocation":"1252:18:28","nodeType":"ErrorDefinition","parameters":{"id":2861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2860,"mutability":"mutable","name":"pool","nameLocation":"1279:4:28","nodeType":"VariableDeclaration","scope":2862,"src":"1271:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2859,"name":"address","nodeType":"ElementaryTypeName","src":"1271:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1270:14:28"},"src":"1246:39:28"},{"documentation":{"id":2863,"nodeType":"StructuredDocumentation","src":"1291:274:28","text":" @notice A hook contract rejected a pool on registration.\n @param poolHooksContract Address of the hook contract that rejected the pool registration\n @param pool Address of the rejected pool\n @param poolFactory Address of the pool factory"},"errorSelector":"fa93d814","id":2871,"name":"HookRegistrationFailed","nameLocation":"1576:22:28","nodeType":"ErrorDefinition","parameters":{"id":2870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2865,"mutability":"mutable","name":"poolHooksContract","nameLocation":"1607:17:28","nodeType":"VariableDeclaration","scope":2871,"src":"1599:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2864,"name":"address","nodeType":"ElementaryTypeName","src":"1599:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2867,"mutability":"mutable","name":"pool","nameLocation":"1634:4:28","nodeType":"VariableDeclaration","scope":2871,"src":"1626:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2866,"name":"address","nodeType":"ElementaryTypeName","src":"1626:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2869,"mutability":"mutable","name":"poolFactory","nameLocation":"1648:11:28","nodeType":"VariableDeclaration","scope":2871,"src":"1640:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2868,"name":"address","nodeType":"ElementaryTypeName","src":"1640:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1598:62:28"},"src":"1570:91:28"},{"documentation":{"id":2872,"nodeType":"StructuredDocumentation","src":"1667:136:28","text":" @notice A token was already registered (i.e., it is a duplicate in the pool).\n @param token The duplicate token"},"errorSelector":"4f4b634e","id":2877,"name":"TokenAlreadyRegistered","nameLocation":"1814:22:28","nodeType":"ErrorDefinition","parameters":{"id":2876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2875,"mutability":"mutable","name":"token","nameLocation":"1844:5:28","nodeType":"VariableDeclaration","scope":2877,"src":"1837:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2874,"nodeType":"UserDefinedTypeName","pathNode":{"id":2873,"name":"IERC20","nameLocations":["1837:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1837:6:28"},"referencedDeclaration":10576,"src":"1837:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1836:14:28"},"src":"1808:43:28"},{"documentation":{"id":2878,"nodeType":"StructuredDocumentation","src":"1857:57:28","text":"@notice The token count is below the minimum allowed."},"errorSelector":"5ed4ba8f","id":2880,"name":"MinTokens","nameLocation":"1925:9:28","nodeType":"ErrorDefinition","parameters":{"id":2879,"nodeType":"ParameterList","parameters":[],"src":"1934:2:28"},"src":"1919:18:28"},{"documentation":{"id":2881,"nodeType":"StructuredDocumentation","src":"1943:57:28","text":"@notice The token count is above the maximum allowed."},"errorSelector":"707bdf58","id":2883,"name":"MaxTokens","nameLocation":"2011:9:28","nodeType":"ErrorDefinition","parameters":{"id":2882,"nodeType":"ParameterList","parameters":[],"src":"2020:2:28"},"src":"2005:18:28"},{"documentation":{"id":2884,"nodeType":"StructuredDocumentation","src":"2029:61:28","text":"@notice Invalid tokens (e.g., zero) cannot be registered."},"errorSelector":"c1ab6dc1","id":2886,"name":"InvalidToken","nameLocation":"2101:12:28","nodeType":"ErrorDefinition","parameters":{"id":2885,"nodeType":"ParameterList","parameters":[],"src":"2113:2:28"},"src":"2095:21:28"},{"documentation":{"id":2887,"nodeType":"StructuredDocumentation","src":"2122:86:28","text":"@notice The token type given in a TokenConfig during pool registration is invalid."},"errorSelector":"a1e9dd9d","id":2889,"name":"InvalidTokenType","nameLocation":"2219:16:28","nodeType":"ErrorDefinition","parameters":{"id":2888,"nodeType":"ParameterList","parameters":[],"src":"2235:2:28"},"src":"2213:25:28"},{"documentation":{"id":2890,"nodeType":"StructuredDocumentation","src":"2244:76:28","text":"@notice The data in a TokenConfig struct is inconsistent or unsupported."},"errorSelector":"df450632","id":2892,"name":"InvalidTokenConfiguration","nameLocation":"2331:25:28","nodeType":"ErrorDefinition","parameters":{"id":2891,"nodeType":"ParameterList","parameters":[],"src":"2356:2:28"},"src":"2325:34:28"},{"documentation":{"id":2893,"nodeType":"StructuredDocumentation","src":"2365:64:28","text":"@notice Tokens with more than 18 decimals are not supported."},"errorSelector":"686d3607","id":2895,"name":"InvalidTokenDecimals","nameLocation":"2440:20:28","nodeType":"ErrorDefinition","parameters":{"id":2894,"nodeType":"ParameterList","parameters":[],"src":"2460:2:28"},"src":"2434:29:28"},{"documentation":{"id":2896,"nodeType":"StructuredDocumentation","src":"2469:287:28","text":" @notice The token list passed into an operation does not match the pool tokens in the pool.\n @param pool Address of the pool\n @param expectedToken The correct token at a given index in the pool\n @param actualToken The actual token found at that index"},"errorSelector":"ffe261a1","id":2904,"name":"TokensMismatch","nameLocation":"2767:14:28","nodeType":"ErrorDefinition","parameters":{"id":2903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2898,"mutability":"mutable","name":"pool","nameLocation":"2790:4:28","nodeType":"VariableDeclaration","scope":2904,"src":"2782:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2897,"name":"address","nodeType":"ElementaryTypeName","src":"2782:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2900,"mutability":"mutable","name":"expectedToken","nameLocation":"2804:13:28","nodeType":"VariableDeclaration","scope":2904,"src":"2796:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2899,"name":"address","nodeType":"ElementaryTypeName","src":"2796:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2902,"mutability":"mutable","name":"actualToken","nameLocation":"2827:11:28","nodeType":"VariableDeclaration","scope":2904,"src":"2819:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2901,"name":"address","nodeType":"ElementaryTypeName","src":"2819:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2781:58:28"},"src":"2761:79:28"},{"documentation":{"id":2905,"nodeType":"StructuredDocumentation","src":"3071:85:28","text":"@notice A transient accounting operation completed with outstanding token deltas."},"errorSelector":"20f1d86d","id":2907,"name":"BalanceNotSettled","nameLocation":"3167:17:28","nodeType":"ErrorDefinition","parameters":{"id":2906,"nodeType":"ParameterList","parameters":[],"src":"3184:2:28"},"src":"3161:26:28"},{"documentation":{"id":2908,"nodeType":"StructuredDocumentation","src":"3193:97:28","text":"@notice A user called a Vault function (swap, add/remove liquidity) outside the lock context."},"errorSelector":"c09ba736","id":2910,"name":"VaultIsNotUnlocked","nameLocation":"3301:18:28","nodeType":"ErrorDefinition","parameters":{"id":2909,"nodeType":"ParameterList","parameters":[],"src":"3319:2:28"},"src":"3295:27:28"},{"documentation":{"id":2911,"nodeType":"StructuredDocumentation","src":"3328:105:28","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"53f976d4","id":2913,"name":"DynamicSwapFeeHookFailed","nameLocation":"3444:24:28","nodeType":"ErrorDefinition","parameters":{"id":2912,"nodeType":"ParameterList","parameters":[],"src":"3468:2:28"},"src":"3438:33:28"},{"documentation":{"id":2914,"nodeType":"StructuredDocumentation","src":"3477:105:28","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"e91e17e7","id":2916,"name":"BeforeSwapHookFailed","nameLocation":"3593:20:28","nodeType":"ErrorDefinition","parameters":{"id":2915,"nodeType":"ParameterList","parameters":[],"src":"3613:2:28"},"src":"3587:29:28"},{"documentation":{"id":2917,"nodeType":"StructuredDocumentation","src":"3622:104:28","text":"@notice The pool has returned false to the afterSwap hook, indicating the transaction should revert."},"errorSelector":"15a29dec","id":2919,"name":"AfterSwapHookFailed","nameLocation":"3737:19:28","nodeType":"ErrorDefinition","parameters":{"id":2918,"nodeType":"ParameterList","parameters":[],"src":"3756:2:28"},"src":"3731:28:28"},{"documentation":{"id":2920,"nodeType":"StructuredDocumentation","src":"3765:111:28","text":"@notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert."},"errorSelector":"60612925","id":2922,"name":"BeforeInitializeHookFailed","nameLocation":"3887:26:28","nodeType":"ErrorDefinition","parameters":{"id":2921,"nodeType":"ParameterList","parameters":[],"src":"3913:2:28"},"src":"3881:35:28"},{"documentation":{"id":2923,"nodeType":"StructuredDocumentation","src":"3922:110:28","text":"@notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert."},"errorSelector":"0f23dbc6","id":2925,"name":"AfterInitializeHookFailed","nameLocation":"4043:25:28","nodeType":"ErrorDefinition","parameters":{"id":2924,"nodeType":"ParameterList","parameters":[],"src":"4068:2:28"},"src":"4037:34:28"},{"documentation":{"id":2926,"nodeType":"StructuredDocumentation","src":"4077:113:28","text":"@notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"0b2eb652","id":2928,"name":"BeforeAddLiquidityHookFailed","nameLocation":"4201:28:28","nodeType":"ErrorDefinition","parameters":{"id":2927,"nodeType":"ParameterList","parameters":[],"src":"4229:2:28"},"src":"4195:37:28"},{"documentation":{"id":2929,"nodeType":"StructuredDocumentation","src":"4238:112:28","text":"@notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"e1249165","id":2931,"name":"AfterAddLiquidityHookFailed","nameLocation":"4361:27:28","nodeType":"ErrorDefinition","parameters":{"id":2930,"nodeType":"ParameterList","parameters":[],"src":"4388:2:28"},"src":"4355:36:28"},{"documentation":{"id":2932,"nodeType":"StructuredDocumentation","src":"4397:116:28","text":"@notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"2aaf8866","id":2934,"name":"BeforeRemoveLiquidityHookFailed","nameLocation":"4524:31:28","nodeType":"ErrorDefinition","parameters":{"id":2933,"nodeType":"ParameterList","parameters":[],"src":"4555:2:28"},"src":"4518:40:28"},{"documentation":{"id":2935,"nodeType":"StructuredDocumentation","src":"4564:115:28","text":"@notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"1d3391d8","id":2937,"name":"AfterRemoveLiquidityHookFailed","nameLocation":"4690:30:28","nodeType":"ErrorDefinition","parameters":{"id":2936,"nodeType":"ParameterList","parameters":[],"src":"4720:2:28"},"src":"4684:39:28"},{"documentation":{"id":2938,"nodeType":"StructuredDocumentation","src":"4729:115:28","text":"@notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance)."},"errorSelector":"e5d185cf","id":2940,"name":"RouterNotTrusted","nameLocation":"4855:16:28","nodeType":"ErrorDefinition","parameters":{"id":2939,"nodeType":"ParameterList","parameters":[],"src":"4871:2:28"},"src":"4849:25:28"},{"documentation":{"id":2941,"nodeType":"StructuredDocumentation","src":"5097:47:28","text":"@notice The user tried to swap zero tokens."},"errorSelector":"57a456b7","id":2943,"name":"AmountGivenZero","nameLocation":"5155:15:28","nodeType":"ErrorDefinition","parameters":{"id":2942,"nodeType":"ParameterList","parameters":[],"src":"5170:2:28"},"src":"5149:24:28"},{"documentation":{"id":2944,"nodeType":"StructuredDocumentation","src":"5179:58:28","text":"@notice The user attempted to swap a token for itself."},"errorSelector":"a54b181d","id":2946,"name":"CannotSwapSameToken","nameLocation":"5248:19:28","nodeType":"ErrorDefinition","parameters":{"id":2945,"nodeType":"ParameterList","parameters":[],"src":"5267:2:28"},"src":"5242:28:28"},{"documentation":{"id":2947,"nodeType":"StructuredDocumentation","src":"5276:137:28","text":" @notice The user attempted to operate with a token that is not in the pool.\n @param token The unregistered token"},"errorSelector":"ddef98d7","id":2952,"name":"TokenNotRegistered","nameLocation":"5424:18:28","nodeType":"ErrorDefinition","parameters":{"id":2951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2950,"mutability":"mutable","name":"token","nameLocation":"5450:5:28","nodeType":"VariableDeclaration","scope":2952,"src":"5443:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2949,"nodeType":"UserDefinedTypeName","pathNode":{"id":2948,"name":"IERC20","nameLocations":["5443:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"5443:6:28"},"referencedDeclaration":10576,"src":"5443:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"5442:14:28"},"src":"5418:39:28"},{"documentation":{"id":2953,"nodeType":"StructuredDocumentation","src":"5463:215:28","text":" @notice An amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"e2ea151b","id":2959,"name":"SwapLimit","nameLocation":"5689:9:28","nodeType":"ErrorDefinition","parameters":{"id":2958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2955,"mutability":"mutable","name":"amount","nameLocation":"5707:6:28","nodeType":"VariableDeclaration","scope":2959,"src":"5699:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2954,"name":"uint256","nodeType":"ElementaryTypeName","src":"5699:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2957,"mutability":"mutable","name":"limit","nameLocation":"5723:5:28","nodeType":"VariableDeclaration","scope":2959,"src":"5715:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2956,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5698:31:28"},"src":"5683:47:28"},{"documentation":{"id":2960,"nodeType":"StructuredDocumentation","src":"5736:228:28","text":" @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"cc0e4a99","id":2966,"name":"HookAdjustedSwapLimit","nameLocation":"5975:21:28","nodeType":"ErrorDefinition","parameters":{"id":2965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2962,"mutability":"mutable","name":"amount","nameLocation":"6005:6:28","nodeType":"VariableDeclaration","scope":2966,"src":"5997:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2961,"name":"uint256","nodeType":"ElementaryTypeName","src":"5997:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2964,"mutability":"mutable","name":"limit","nameLocation":"6021:5:28","nodeType":"VariableDeclaration","scope":2966,"src":"6013:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2963,"name":"uint256","nodeType":"ElementaryTypeName","src":"6013:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5996:31:28"},"src":"5969:59:28"},{"documentation":{"id":2967,"nodeType":"StructuredDocumentation","src":"6034:87:28","text":"@notice The amount given or calculated for an operation is below the minimum limit."},"errorSelector":"1ed4d118","id":2969,"name":"TradeAmountTooSmall","nameLocation":"6132:19:28","nodeType":"ErrorDefinition","parameters":{"id":2968,"nodeType":"ParameterList","parameters":[],"src":"6151:2:28"},"src":"6126:28:28"},{"documentation":{"id":2970,"nodeType":"StructuredDocumentation","src":"6381:45:28","text":"@notice Add liquidity kind not supported."},"errorSelector":"6c02b395","id":2972,"name":"InvalidAddLiquidityKind","nameLocation":"6437:23:28","nodeType":"ErrorDefinition","parameters":{"id":2971,"nodeType":"ParameterList","parameters":[],"src":"6460:2:28"},"src":"6431:32:28"},{"documentation":{"id":2973,"nodeType":"StructuredDocumentation","src":"6469:264:28","text":" @notice A required amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"8eda85e4","id":2982,"name":"AmountInAboveMax","nameLocation":"6744:16:28","nodeType":"ErrorDefinition","parameters":{"id":2981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2976,"mutability":"mutable","name":"tokenIn","nameLocation":"6768:7:28","nodeType":"VariableDeclaration","scope":2982,"src":"6761:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2975,"nodeType":"UserDefinedTypeName","pathNode":{"id":2974,"name":"IERC20","nameLocations":["6761:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6761:6:28"},"referencedDeclaration":10576,"src":"6761:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2978,"mutability":"mutable","name":"amountIn","nameLocation":"6785:8:28","nodeType":"VariableDeclaration","scope":2982,"src":"6777:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2977,"name":"uint256","nodeType":"ElementaryTypeName","src":"6777:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2980,"mutability":"mutable","name":"maxAmountIn","nameLocation":"6803:11:28","nodeType":"VariableDeclaration","scope":2982,"src":"6795:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2979,"name":"uint256","nodeType":"ElementaryTypeName","src":"6795:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6760:55:28"},"src":"6738:78:28"},{"documentation":{"id":2983,"nodeType":"StructuredDocumentation","src":"6822:269:28","text":" @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"cefa3afa","id":2992,"name":"HookAdjustedAmountInAboveMax","nameLocation":"7102:28:28","nodeType":"ErrorDefinition","parameters":{"id":2991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2986,"mutability":"mutable","name":"tokenIn","nameLocation":"7138:7:28","nodeType":"VariableDeclaration","scope":2992,"src":"7131:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":2985,"nodeType":"UserDefinedTypeName","pathNode":{"id":2984,"name":"IERC20","nameLocations":["7131:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"7131:6:28"},"referencedDeclaration":10576,"src":"7131:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2988,"mutability":"mutable","name":"amountIn","nameLocation":"7155:8:28","nodeType":"VariableDeclaration","scope":2992,"src":"7147:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2987,"name":"uint256","nodeType":"ElementaryTypeName","src":"7147:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2990,"mutability":"mutable","name":"maxAmountIn","nameLocation":"7173:11:28","nodeType":"VariableDeclaration","scope":2992,"src":"7165:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2989,"name":"uint256","nodeType":"ElementaryTypeName","src":"7165:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7130:55:28"},"src":"7096:90:28"},{"documentation":{"id":2993,"nodeType":"StructuredDocumentation","src":"7192:245:28","text":" @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"8d261d5d","id":2999,"name":"BptAmountOutBelowMin","nameLocation":"7448:20:28","nodeType":"ErrorDefinition","parameters":{"id":2998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2995,"mutability":"mutable","name":"amountOut","nameLocation":"7477:9:28","nodeType":"VariableDeclaration","scope":2999,"src":"7469:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2994,"name":"uint256","nodeType":"ElementaryTypeName","src":"7469:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2997,"mutability":"mutable","name":"minAmountOut","nameLocation":"7496:12:28","nodeType":"VariableDeclaration","scope":2999,"src":"7488:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2996,"name":"uint256","nodeType":"ElementaryTypeName","src":"7488:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7468:41:28"},"src":"7442:68:28"},{"documentation":{"id":3000,"nodeType":"StructuredDocumentation","src":"7516:75:28","text":"@notice Pool does not support adding liquidity with a customized input."},"errorSelector":"4876c0bc","id":3002,"name":"DoesNotSupportAddLiquidityCustom","nameLocation":"7602:32:28","nodeType":"ErrorDefinition","parameters":{"id":3001,"nodeType":"ParameterList","parameters":[],"src":"7634:2:28"},"src":"7596:41:28"},{"documentation":{"id":3003,"nodeType":"StructuredDocumentation","src":"7643:68:28","text":"@notice Pool does not support adding liquidity through donation."},"errorSelector":"efe0265d","id":3005,"name":"DoesNotSupportDonation","nameLocation":"7722:22:28","nodeType":"ErrorDefinition","parameters":{"id":3004,"nodeType":"ParameterList","parameters":[],"src":"7744:2:28"},"src":"7716:31:28"},{"documentation":{"id":3006,"nodeType":"StructuredDocumentation","src":"7977:48:28","text":"@notice Remove liquidity kind not supported."},"errorSelector":"137a9a39","id":3008,"name":"InvalidRemoveLiquidityKind","nameLocation":"8036:26:28","nodeType":"ErrorDefinition","parameters":{"id":3007,"nodeType":"ParameterList","parameters":[],"src":"8062:2:28"},"src":"8030:35:28"},{"documentation":{"id":3009,"nodeType":"StructuredDocumentation","src":"8071:269:28","text":" @notice The actual amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"2f785e46","id":3018,"name":"AmountOutBelowMin","nameLocation":"8351:17:28","nodeType":"ErrorDefinition","parameters":{"id":3017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3012,"mutability":"mutable","name":"tokenOut","nameLocation":"8376:8:28","nodeType":"VariableDeclaration","scope":3018,"src":"8369:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3011,"nodeType":"UserDefinedTypeName","pathNode":{"id":3010,"name":"IERC20","nameLocations":["8369:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"8369:6:28"},"referencedDeclaration":10576,"src":"8369:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3014,"mutability":"mutable","name":"amountOut","nameLocation":"8394:9:28","nodeType":"VariableDeclaration","scope":3018,"src":"8386:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3013,"name":"uint256","nodeType":"ElementaryTypeName","src":"8386:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3016,"mutability":"mutable","name":"minAmountOut","nameLocation":"8413:12:28","nodeType":"VariableDeclaration","scope":3018,"src":"8405:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3015,"name":"uint256","nodeType":"ElementaryTypeName","src":"8405:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8368:58:28"},"src":"8345:82:28"},{"documentation":{"id":3019,"nodeType":"StructuredDocumentation","src":"8433:276:28","text":" @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"fbd8a724","id":3028,"name":"HookAdjustedAmountOutBelowMin","nameLocation":"8720:29:28","nodeType":"ErrorDefinition","parameters":{"id":3027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3022,"mutability":"mutable","name":"tokenOut","nameLocation":"8757:8:28","nodeType":"VariableDeclaration","scope":3028,"src":"8750:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3021,"nodeType":"UserDefinedTypeName","pathNode":{"id":3020,"name":"IERC20","nameLocations":["8750:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"8750:6:28"},"referencedDeclaration":10576,"src":"8750:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3024,"mutability":"mutable","name":"amountOut","nameLocation":"8775:9:28","nodeType":"VariableDeclaration","scope":3028,"src":"8767:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3023,"name":"uint256","nodeType":"ElementaryTypeName","src":"8767:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3026,"mutability":"mutable","name":"minAmountOut","nameLocation":"8794:12:28","nodeType":"VariableDeclaration","scope":3028,"src":"8786:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3025,"name":"uint256","nodeType":"ElementaryTypeName","src":"8786:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8749:58:28"},"src":"8714:94:28"},{"documentation":{"id":3029,"nodeType":"StructuredDocumentation","src":"8814:228:28","text":" @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n @param amountIn The total BPT amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"31d38e0b","id":3035,"name":"BptAmountInAboveMax","nameLocation":"9053:19:28","nodeType":"ErrorDefinition","parameters":{"id":3034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3031,"mutability":"mutable","name":"amountIn","nameLocation":"9081:8:28","nodeType":"VariableDeclaration","scope":3035,"src":"9073:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3030,"name":"uint256","nodeType":"ElementaryTypeName","src":"9073:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3033,"mutability":"mutable","name":"maxAmountIn","nameLocation":"9099:11:28","nodeType":"VariableDeclaration","scope":3035,"src":"9091:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3032,"name":"uint256","nodeType":"ElementaryTypeName","src":"9091:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9072:39:28"},"src":"9047:65:28"},{"documentation":{"id":3036,"nodeType":"StructuredDocumentation","src":"9118:77:28","text":"@notice Pool does not support removing liquidity with a customized input."},"errorSelector":"cf0a95c0","id":3038,"name":"DoesNotSupportRemoveLiquidityCustom","nameLocation":"9206:35:28","nodeType":"ErrorDefinition","parameters":{"id":3037,"nodeType":"ParameterList","parameters":[],"src":"9241:2:28"},"src":"9200:44:28"},{"documentation":{"id":3039,"nodeType":"StructuredDocumentation","src":"9463:332:28","text":" @notice Error raised when there is an overflow in the fee calculation.\n @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n percentages in the Vault."},"errorSelector":"4c69ac5d","id":3041,"name":"ProtocolFeesExceedTotalCollected","nameLocation":"9806:32:28","nodeType":"ErrorDefinition","parameters":{"id":3040,"nodeType":"ParameterList","parameters":[],"src":"9838:2:28"},"src":"9800:41:28"},{"documentation":{"id":3042,"nodeType":"StructuredDocumentation","src":"9847:430:28","text":" @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is below the minimum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"bfb20688","id":3044,"name":"SwapFeePercentageTooLow","nameLocation":"10288:23:28","nodeType":"ErrorDefinition","parameters":{"id":3043,"nodeType":"ParameterList","parameters":[],"src":"10311:2:28"},"src":"10282:32:28"},{"documentation":{"id":3045,"nodeType":"StructuredDocumentation","src":"10320:433:28","text":" @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is above the maximum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"7f47834b","id":3047,"name":"SwapFeePercentageTooHigh","nameLocation":"10764:24:28","nodeType":"ErrorDefinition","parameters":{"id":3046,"nodeType":"ParameterList","parameters":[],"src":"10788:2:28"},"src":"10758:33:28"},{"documentation":{"id":3048,"nodeType":"StructuredDocumentation","src":"10797:646:28","text":" @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n the aggregate fee calculated here and that stored in the Vault."},"errorSelector":"833fb3ce","id":3050,"name":"FeePrecisionTooHigh","nameLocation":"11454:19:28","nodeType":"ErrorDefinition","parameters":{"id":3049,"nodeType":"ParameterList","parameters":[],"src":"11473:2:28"},"src":"11448:28:28"},{"documentation":{"id":3051,"nodeType":"StructuredDocumentation","src":"11482:107:28","text":"@notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei)."},"errorSelector":"746e5940","id":3053,"name":"PercentageAboveMax","nameLocation":"11600:18:28","nodeType":"ErrorDefinition","parameters":{"id":3052,"nodeType":"ParameterList","parameters":[],"src":"11618:2:28"},"src":"11594:27:28"},{"documentation":{"id":3054,"nodeType":"StructuredDocumentation","src":"11842:78:28","text":"@notice A user tried to execute a query operation when they were disabled."},"errorSelector":"7a198886","id":3056,"name":"QueriesDisabled","nameLocation":"11931:15:28","nodeType":"ErrorDefinition","parameters":{"id":3055,"nodeType":"ParameterList","parameters":[],"src":"11946:2:28"},"src":"11925:24:28"},{"documentation":{"id":3057,"nodeType":"StructuredDocumentation","src":"11955:84:28","text":"@notice An admin tried to re-enable queries, but they were disabled permanently."},"errorSelector":"069f8cbc","id":3059,"name":"QueriesDisabledPermanently","nameLocation":"12050:26:28","nodeType":"ErrorDefinition","parameters":{"id":3058,"nodeType":"ParameterList","parameters":[],"src":"12076:2:28"},"src":"12044:35:28"},{"documentation":{"id":3060,"nodeType":"StructuredDocumentation","src":"12302:104:28","text":" @notice Cannot enable recovery mode when already enabled.\n @param pool The pool"},"errorSelector":"346d7607","id":3064,"name":"PoolInRecoveryMode","nameLocation":"12417:18:28","nodeType":"ErrorDefinition","parameters":{"id":3063,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3062,"mutability":"mutable","name":"pool","nameLocation":"12444:4:28","nodeType":"VariableDeclaration","scope":3064,"src":"12436:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3061,"name":"address","nodeType":"ElementaryTypeName","src":"12436:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12435:14:28"},"src":"12411:39:28"},{"documentation":{"id":3065,"nodeType":"StructuredDocumentation","src":"12456:101:28","text":" @notice Cannot disable recovery mode when not enabled.\n @param pool The pool"},"errorSelector":"ef029adf","id":3069,"name":"PoolNotInRecoveryMode","nameLocation":"12568:21:28","nodeType":"ErrorDefinition","parameters":{"id":3068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3067,"mutability":"mutable","name":"pool","nameLocation":"12598:4:28","nodeType":"VariableDeclaration","scope":3069,"src":"12590:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3066,"name":"address","nodeType":"ElementaryTypeName","src":"12590:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12589:14:28"},"src":"12562:42:28"},{"documentation":{"id":3070,"nodeType":"StructuredDocumentation","src":"12828:206:28","text":" @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n @param sender The account attempting to call a permissioned function"},"errorSelector":"089676d5","id":3074,"name":"SenderIsNotVault","nameLocation":"13045:16:28","nodeType":"ErrorDefinition","parameters":{"id":3073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3072,"mutability":"mutable","name":"sender","nameLocation":"13070:6:28","nodeType":"VariableDeclaration","scope":3074,"src":"13062:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3071,"name":"address","nodeType":"ElementaryTypeName","src":"13062:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13061:16:28"},"src":"13039:39:28"},{"documentation":{"id":3075,"nodeType":"StructuredDocumentation","src":"13303:79:28","text":"@notice The caller specified a pause window period longer than the maximum."},"errorSelector":"cc0e8fe5","id":3077,"name":"VaultPauseWindowDurationTooLarge","nameLocation":"13393:32:28","nodeType":"ErrorDefinition","parameters":{"id":3076,"nodeType":"ParameterList","parameters":[],"src":"13425:2:28"},"src":"13387:41:28"},{"documentation":{"id":3078,"nodeType":"StructuredDocumentation","src":"13434:73:28","text":"@notice The caller specified a buffer period longer than the maximum."},"errorSelector":"9ea4efee","id":3080,"name":"PauseBufferPeriodDurationTooLarge","nameLocation":"13518:33:28","nodeType":"ErrorDefinition","parameters":{"id":3079,"nodeType":"ParameterList","parameters":[],"src":"13551:2:28"},"src":"13512:42:28"},{"documentation":{"id":3081,"nodeType":"StructuredDocumentation","src":"13560:76:28","text":"@notice A user tried to perform an operation while the Vault was paused."},"errorSelector":"da9f8b34","id":3083,"name":"VaultPaused","nameLocation":"13647:11:28","nodeType":"ErrorDefinition","parameters":{"id":3082,"nodeType":"ParameterList","parameters":[],"src":"13658:2:28"},"src":"13641:20:28"},{"documentation":{"id":3084,"nodeType":"StructuredDocumentation","src":"13667:73:28","text":"@notice Governance tried to unpause the Vault when it was not paused."},"errorSelector":"f7ff4dca","id":3086,"name":"VaultNotPaused","nameLocation":"13751:14:28","nodeType":"ErrorDefinition","parameters":{"id":3085,"nodeType":"ParameterList","parameters":[],"src":"13765:2:28"},"src":"13745:23:28"},{"documentation":{"id":3087,"nodeType":"StructuredDocumentation","src":"13774:79:28","text":"@notice Governance tried to pause the Vault after the pause period expired."},"errorSelector":"0e4460b7","id":3089,"name":"VaultPauseWindowExpired","nameLocation":"13864:23:28","nodeType":"ErrorDefinition","parameters":{"id":3088,"nodeType":"ParameterList","parameters":[],"src":"13887:2:28"},"src":"13858:32:28"},{"documentation":{"id":3090,"nodeType":"StructuredDocumentation","src":"13896:123:28","text":" @notice A user tried to perform an operation involving a paused Pool.\n @param pool The paused pool"},"errorSelector":"d971f597","id":3094,"name":"PoolPaused","nameLocation":"14030:10:28","nodeType":"ErrorDefinition","parameters":{"id":3093,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3092,"mutability":"mutable","name":"pool","nameLocation":"14049:4:28","nodeType":"VariableDeclaration","scope":3094,"src":"14041:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3091,"name":"address","nodeType":"ElementaryTypeName","src":"14041:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14040:14:28"},"src":"14024:31:28"},{"documentation":{"id":3095,"nodeType":"StructuredDocumentation","src":"14061:124:28","text":" @notice Governance tried to unpause the Pool when it was not paused.\n @param pool The unpaused pool"},"errorSelector":"fdcd6894","id":3099,"name":"PoolNotPaused","nameLocation":"14196:13:28","nodeType":"ErrorDefinition","parameters":{"id":3098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3097,"mutability":"mutable","name":"pool","nameLocation":"14218:4:28","nodeType":"VariableDeclaration","scope":3099,"src":"14210:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3096,"name":"address","nodeType":"ElementaryTypeName","src":"14210:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14209:14:28"},"src":"14190:34:28"},{"documentation":{"id":3100,"nodeType":"StructuredDocumentation","src":"14230:119:28","text":" @notice Governance tried to pause a Pool after the pause period expired.\n @param pool The pool"},"errorSelector":"eb5a1217","id":3104,"name":"PoolPauseWindowExpired","nameLocation":"14360:22:28","nodeType":"ErrorDefinition","parameters":{"id":3103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3102,"mutability":"mutable","name":"pool","nameLocation":"14391:4:28","nodeType":"VariableDeclaration","scope":3104,"src":"14383:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3101,"name":"address","nodeType":"ElementaryTypeName","src":"14383:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14382:14:28"},"src":"14354:43:28"},{"documentation":{"id":3105,"nodeType":"StructuredDocumentation","src":"14628:163:28","text":" @notice The buffer for the given wrapped token was already initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"1690fa40","id":3110,"name":"BufferAlreadyInitialized","nameLocation":"14802:24:28","nodeType":"ErrorDefinition","parameters":{"id":3109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3108,"mutability":"mutable","name":"wrappedToken","nameLocation":"14836:12:28","nodeType":"VariableDeclaration","scope":3110,"src":"14827:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3107,"nodeType":"UserDefinedTypeName","pathNode":{"id":3106,"name":"IERC4626","nameLocations":["14827:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"14827:8:28"},"referencedDeclaration":9846,"src":"14827:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"14826:23:28"},"src":"14796:54:28"},{"documentation":{"id":3111,"nodeType":"StructuredDocumentation","src":"14856:159:28","text":" @notice The buffer for the given wrapped token was not initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"85f41299","id":3116,"name":"BufferNotInitialized","nameLocation":"15026:20:28","nodeType":"ErrorDefinition","parameters":{"id":3115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3114,"mutability":"mutable","name":"wrappedToken","nameLocation":"15056:12:28","nodeType":"VariableDeclaration","scope":3116,"src":"15047:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3113,"nodeType":"UserDefinedTypeName","pathNode":{"id":3112,"name":"IERC4626","nameLocations":["15047:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"15047:8:28"},"referencedDeclaration":9846,"src":"15047:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15046:23:28"},"src":"15020:50:28"},{"documentation":{"id":3117,"nodeType":"StructuredDocumentation","src":"15076:90:28","text":"@notice The user is trying to remove more than their allocated shares from the buffer."},"errorSelector":"98c5dbd6","id":3119,"name":"NotEnoughBufferShares","nameLocation":"15177:21:28","nodeType":"ErrorDefinition","parameters":{"id":3118,"nodeType":"ParameterList","parameters":[],"src":"15198:2:28"},"src":"15171:30:28"},{"documentation":{"id":3120,"nodeType":"StructuredDocumentation","src":"15207:436:28","text":" @notice The wrapped token asset does not match the underlying token.\n @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n Legitimate wrapper contracts should make the asset a constant or immutable value.\n @param wrappedToken The wrapped token corresponding to the buffer\n @param underlyingToken The underlying token returned by `asset`"},"errorSelector":"36b18d09","id":3127,"name":"WrongUnderlyingToken","nameLocation":"15654:20:28","nodeType":"ErrorDefinition","parameters":{"id":3126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3123,"mutability":"mutable","name":"wrappedToken","nameLocation":"15684:12:28","nodeType":"VariableDeclaration","scope":3127,"src":"15675:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3122,"nodeType":"UserDefinedTypeName","pathNode":{"id":3121,"name":"IERC4626","nameLocations":["15675:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"15675:8:28"},"referencedDeclaration":9846,"src":"15675:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3125,"mutability":"mutable","name":"underlyingToken","nameLocation":"15706:15:28","nodeType":"VariableDeclaration","scope":3127,"src":"15698:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3124,"name":"address","nodeType":"ElementaryTypeName","src":"15698:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15674:48:28"},"src":"15648:75:28"},{"documentation":{"id":3128,"nodeType":"StructuredDocumentation","src":"15729:322:28","text":" @notice A wrapped token reported the zero address as its underlying token asset.\n @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n re-initialize the buffer).\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"d407f9c5","id":3133,"name":"InvalidUnderlyingToken","nameLocation":"16062:22:28","nodeType":"ErrorDefinition","parameters":{"id":3132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3131,"mutability":"mutable","name":"wrappedToken","nameLocation":"16094:12:28","nodeType":"VariableDeclaration","scope":3133,"src":"16085:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3130,"nodeType":"UserDefinedTypeName","pathNode":{"id":3129,"name":"IERC4626","nameLocations":["16085:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"16085:8:28"},"referencedDeclaration":9846,"src":"16085:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16084:23:28"},"src":"16056:52:28"},{"documentation":{"id":3134,"nodeType":"StructuredDocumentation","src":"16114:183:28","text":" @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"18fe7385","id":3139,"name":"WrapAmountTooSmall","nameLocation":"16308:18:28","nodeType":"ErrorDefinition","parameters":{"id":3138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3137,"mutability":"mutable","name":"wrappedToken","nameLocation":"16336:12:28","nodeType":"VariableDeclaration","scope":3139,"src":"16327:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3136,"nodeType":"UserDefinedTypeName","pathNode":{"id":3135,"name":"IERC4626","nameLocations":["16327:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"16327:8:28"},"referencedDeclaration":9846,"src":"16327:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16326:23:28"},"src":"16302:48:28"},{"documentation":{"id":3140,"nodeType":"StructuredDocumentation","src":"16356:70:28","text":"@notice Buffer operation attempted while vault buffers are paused."},"errorSelector":"0f27df09","id":3142,"name":"VaultBuffersArePaused","nameLocation":"16437:21:28","nodeType":"ErrorDefinition","parameters":{"id":3141,"nodeType":"ParameterList","parameters":[],"src":"16458:2:28"},"src":"16431:30:28"},{"documentation":{"id":3143,"nodeType":"StructuredDocumentation","src":"16467:58:28","text":"@notice Buffer shares were minted to the zero address."},"errorSelector":"dbe6b10e","id":3145,"name":"BufferSharesInvalidReceiver","nameLocation":"16536:27:28","nodeType":"ErrorDefinition","parameters":{"id":3144,"nodeType":"ParameterList","parameters":[],"src":"16563:2:28"},"src":"16530:36:28"},{"documentation":{"id":3146,"nodeType":"StructuredDocumentation","src":"16572:60:28","text":"@notice Buffer shares were burned from the zero address."},"errorSelector":"586d06df","id":3148,"name":"BufferSharesInvalidOwner","nameLocation":"16643:24:28","nodeType":"ErrorDefinition","parameters":{"id":3147,"nodeType":"ParameterList","parameters":[],"src":"16667:2:28"},"src":"16637:33:28"},{"documentation":{"id":3149,"nodeType":"StructuredDocumentation","src":"16676:173:28","text":" @notice The total supply of a buffer can't be lower than the absolute minimum.\n @param totalSupply The total supply value that was below the minimum"},"errorSelector":"34bdbfaa","id":3153,"name":"BufferTotalSupplyTooLow","nameLocation":"16860:23:28","nodeType":"ErrorDefinition","parameters":{"id":3152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3151,"mutability":"mutable","name":"totalSupply","nameLocation":"16892:11:28","nodeType":"VariableDeclaration","scope":3153,"src":"16884:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3150,"name":"uint256","nodeType":"ElementaryTypeName","src":"16884:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16883:21:28"},"src":"16854:51:28"},{"documentation":{"id":3154,"nodeType":"StructuredDocumentation","src":"16911:97:28","text":"@dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should."},"errorSelector":"1c6a5375","id":3163,"name":"NotEnoughUnderlying","nameLocation":"17019:19:28","nodeType":"ErrorDefinition","parameters":{"id":3162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3157,"mutability":"mutable","name":"wrappedToken","nameLocation":"17048:12:28","nodeType":"VariableDeclaration","scope":3163,"src":"17039:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3156,"nodeType":"UserDefinedTypeName","pathNode":{"id":3155,"name":"IERC4626","nameLocations":["17039:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"17039:8:28"},"referencedDeclaration":9846,"src":"17039:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3159,"mutability":"mutable","name":"expectedUnderlyingAmount","nameLocation":"17070:24:28","nodeType":"VariableDeclaration","scope":3163,"src":"17062:32:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3158,"name":"uint256","nodeType":"ElementaryTypeName","src":"17062:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3161,"mutability":"mutable","name":"actualUnderlyingAmount","nameLocation":"17104:22:28","nodeType":"VariableDeclaration","scope":3163,"src":"17096:30:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3160,"name":"uint256","nodeType":"ElementaryTypeName","src":"17096:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17038:89:28"},"src":"17013:115:28"},{"documentation":{"id":3164,"nodeType":"StructuredDocumentation","src":"17134:94:28","text":"@dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should."},"errorSelector":"1149424d","id":3173,"name":"NotEnoughWrapped","nameLocation":"17239:16:28","nodeType":"ErrorDefinition","parameters":{"id":3172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3167,"mutability":"mutable","name":"wrappedToken","nameLocation":"17265:12:28","nodeType":"VariableDeclaration","scope":3173,"src":"17256:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3166,"nodeType":"UserDefinedTypeName","pathNode":{"id":3165,"name":"IERC4626","nameLocations":["17256:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"17256:8:28"},"referencedDeclaration":9846,"src":"17256:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3169,"mutability":"mutable","name":"expectedWrappedAmount","nameLocation":"17287:21:28","nodeType":"VariableDeclaration","scope":3173,"src":"17279:29:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3168,"name":"uint256","nodeType":"ElementaryTypeName","src":"17279:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3171,"mutability":"mutable","name":"actualWrappedAmount","nameLocation":"17318:19:28","nodeType":"VariableDeclaration","scope":3173,"src":"17310:27:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3170,"name":"uint256","nodeType":"ElementaryTypeName","src":"17310:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17255:83:28"},"src":"17233:106:28"},{"documentation":{"id":3174,"nodeType":"StructuredDocumentation","src":"17345:76:28","text":"@dev Shares issued during initialization are below the requested amount."},"errorSelector":"da0cb07e","id":3180,"name":"IssuedSharesBelowMin","nameLocation":"17432:20:28","nodeType":"ErrorDefinition","parameters":{"id":3179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3176,"mutability":"mutable","name":"issuedShares","nameLocation":"17461:12:28","nodeType":"VariableDeclaration","scope":3180,"src":"17453:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3175,"name":"uint256","nodeType":"ElementaryTypeName","src":"17453:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3178,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17483:15:28","nodeType":"VariableDeclaration","scope":3180,"src":"17475:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3177,"name":"uint256","nodeType":"ElementaryTypeName","src":"17475:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17452:47:28"},"src":"17426:74:28"},{"documentation":{"id":3181,"nodeType":"StructuredDocumentation","src":"17727:87:28","text":"@notice Pool does not support adding / removing liquidity with an unbalanced input."},"errorSelector":"d4f5779c","id":3183,"name":"DoesNotSupportUnbalancedLiquidity","nameLocation":"17825:33:28","nodeType":"ErrorDefinition","parameters":{"id":3182,"nodeType":"ParameterList","parameters":[],"src":"17858:2:28"},"src":"17819:42:28"},{"documentation":{"id":3184,"nodeType":"StructuredDocumentation","src":"17867:48:28","text":"@notice The contract should not receive ETH."},"errorSelector":"f2238896","id":3186,"name":"CannotReceiveEth","nameLocation":"17926:16:28","nodeType":"ErrorDefinition","parameters":{"id":3185,"nodeType":"ParameterList","parameters":[],"src":"17942:2:28"},"src":"17920:25:28"},{"documentation":{"id":3187,"nodeType":"StructuredDocumentation","src":"17951:156:28","text":" @notice The `VaultExtension` contract was called by an account directly.\n @dev It can only be called by the Vault via delegatecall."},"errorSelector":"9fd25b36","id":3189,"name":"NotVaultDelegateCall","nameLocation":"18118:20:28","nodeType":"ErrorDefinition","parameters":{"id":3188,"nodeType":"ParameterList","parameters":[],"src":"18138:2:28"},"src":"18112:29:28"},{"documentation":{"id":3190,"nodeType":"StructuredDocumentation","src":"18147:89:28","text":"@notice The `VaultExtension` contract was configured with an incorrect Vault address."},"errorSelector":"1ab9d9d0","id":3192,"name":"WrongVaultExtensionDeployment","nameLocation":"18247:29:28","nodeType":"ErrorDefinition","parameters":{"id":3191,"nodeType":"ParameterList","parameters":[],"src":"18276:2:28"},"src":"18241:38:28"},{"documentation":{"id":3193,"nodeType":"StructuredDocumentation","src":"18285:96:28","text":"@notice The `ProtocolFeeController` contract was configured with an incorrect Vault address."},"errorSelector":"1bbe95c7","id":3195,"name":"WrongProtocolFeeControllerDeployment","nameLocation":"18392:36:28","nodeType":"ErrorDefinition","parameters":{"id":3194,"nodeType":"ParameterList","parameters":[],"src":"18428:2:28"},"src":"18386:45:28"},{"documentation":{"id":3196,"nodeType":"StructuredDocumentation","src":"18437:85:28","text":"@notice The `VaultAdmin` contract was configured with an incorrect Vault address."},"errorSelector":"82cc28b6","id":3198,"name":"WrongVaultAdminDeployment","nameLocation":"18533:25:28","nodeType":"ErrorDefinition","parameters":{"id":3197,"nodeType":"ParameterList","parameters":[],"src":"18558:2:28"},"src":"18527:34:28"},{"documentation":{"id":3199,"nodeType":"StructuredDocumentation","src":"18567:54:28","text":"@notice Quote reverted with a reserved error code."},"errorSelector":"28f95541","id":3201,"name":"QuoteResultSpoofed","nameLocation":"18632:18:28","nodeType":"ErrorDefinition","parameters":{"id":3200,"nodeType":"ParameterList","parameters":[],"src":"18650:2:28"},"src":"18626:27:28"}],"scope":3203,"src":"316:18339:28","usedErrors":[2847,2852,2857,2862,2871,2877,2880,2883,2886,2889,2892,2895,2904,2907,2910,2913,2916,2919,2922,2925,2928,2931,2934,2937,2940,2943,2946,2952,2959,2966,2969,2972,2982,2992,2999,3002,3005,3008,3018,3028,3035,3038,3041,3044,3047,3050,3053,3056,3059,3064,3069,3074,3077,3080,3083,3086,3089,3094,3099,3104,3110,3116,3119,3127,3133,3139,3142,3145,3148,3153,3163,3173,3180,3183,3186,3189,3192,3195,3198,3201],"usedEvents":[]}],"src":"46:18610:28"},"id":28},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","exportedSymbols":{"AddLiquidityKind":[4241],"AddLiquidityParams":[4257],"AfterSwapParams":[4235],"BufferWrapOrUnwrapParams":[4296],"FEE_BITLENGTH":[4299],"FEE_SCALING_FACTOR":[4302],"HookFlags":[4061],"HooksConfig":[4085],"IAuthorizer":[1341],"IERC20":[10576],"IERC4626":[9846],"IHooks":[1617],"IProtocolFeeController":[1955],"IRateProvider":[24],"IVaultEvents":[3441],"LiquidityManagement":[4014],"MAX_FEE_PERCENTAGE":[4305],"PoolConfig":[4039],"PoolConfigBits":[4016],"PoolData":[4163],"PoolRoleAccounts":[4111],"PoolSwapParams":[4206],"RemoveLiquidityKind":[4262],"RemoveLiquidityParams":[4278],"Rounding":[4166],"SwapKind":[4169],"SwapState":[4095],"TokenConfig":[4128],"TokenInfo":[4138],"TokenType":[4115],"VaultState":[4103],"VaultSwapParams":[4188],"WrappingDirection":[4281]},"id":3442,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3204,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:29"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":3206,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3442,"sourceUnit":9847,"src":"72:75:29","symbolAliases":[{"foreign":{"id":3205,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"81:8:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3208,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3442,"sourceUnit":10577,"src":"148:72:29","symbolAliases":[{"foreign":{"id":3207,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"157:6:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":3210,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3442,"sourceUnit":1956,"src":"222:70:29","symbolAliases":[{"foreign":{"id":3209,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"231:22:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":3212,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3442,"sourceUnit":1342,"src":"293:48:29","symbolAliases":[{"foreign":{"id":3211,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"302:11:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":3214,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3442,"sourceUnit":1618,"src":"342:38:29","symbolAliases":[{"foreign":{"id":3213,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1617,"src":"351:6:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":3215,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3442,"sourceUnit":4306,"src":"381:26:29","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultEvents","contractDependencies":[],"contractKind":"interface","documentation":{"id":3216,"nodeType":"StructuredDocumentation","src":"409:91:29","text":"@dev Events are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":3441,"linearizedBaseContracts":[3441],"name":"IVaultEvents","nameLocation":"510:12:29","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":3217,"nodeType":"StructuredDocumentation","src":"529:657:29","text":" @notice A Pool was registered by calling `registerPool`.\n @param pool The pool being registered\n @param factory The factory creating the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The static swap fee of the pool\n @param pauseWindowEndTime The pool's pause window end time\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n @param liquidityManagement Supported liquidity management hook flags"},"eventSelector":"bc1561eeab9f40962e2fb827a7ff9c7cdb47a9d7c84caeefa4ed90e043842dad","id":3240,"name":"PoolRegistered","nameLocation":"1197:14:29","nodeType":"EventDefinition","parameters":{"id":3239,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3219,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1237:4:29","nodeType":"VariableDeclaration","scope":3240,"src":"1221:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3218,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3221,"indexed":true,"mutability":"mutable","name":"factory","nameLocation":"1267:7:29","nodeType":"VariableDeclaration","scope":3240,"src":"1251:23:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3220,"name":"address","nodeType":"ElementaryTypeName","src":"1251:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3225,"indexed":false,"mutability":"mutable","name":"tokenConfig","nameLocation":"1298:11:29","nodeType":"VariableDeclaration","scope":3240,"src":"1284:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4128_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":3223,"nodeType":"UserDefinedTypeName","pathNode":{"id":3222,"name":"TokenConfig","nameLocations":["1284:11:29"],"nodeType":"IdentifierPath","referencedDeclaration":4128,"src":"1284:11:29"},"referencedDeclaration":4128,"src":"1284:11:29","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4128_storage_ptr","typeString":"struct TokenConfig"}},"id":3224,"nodeType":"ArrayTypeName","src":"1284:13:29","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4128_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":3227,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1327:17:29","nodeType":"VariableDeclaration","scope":3240,"src":"1319:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3226,"name":"uint256","nodeType":"ElementaryTypeName","src":"1319:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3229,"indexed":false,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1361:18:29","nodeType":"VariableDeclaration","scope":3240,"src":"1354:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3228,"name":"uint32","nodeType":"ElementaryTypeName","src":"1354:6:29","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":3232,"indexed":false,"mutability":"mutable","name":"roleAccounts","nameLocation":"1406:12:29","nodeType":"VariableDeclaration","scope":3240,"src":"1389:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":3231,"nodeType":"UserDefinedTypeName","pathNode":{"id":3230,"name":"PoolRoleAccounts","nameLocations":["1389:16:29"],"nodeType":"IdentifierPath","referencedDeclaration":4111,"src":"1389:16:29"},"referencedDeclaration":4111,"src":"1389:16:29","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":3235,"indexed":false,"mutability":"mutable","name":"hooksConfig","nameLocation":"1440:11:29","nodeType":"VariableDeclaration","scope":3240,"src":"1428:23:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4085_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":3234,"nodeType":"UserDefinedTypeName","pathNode":{"id":3233,"name":"HooksConfig","nameLocations":["1428:11:29"],"nodeType":"IdentifierPath","referencedDeclaration":4085,"src":"1428:11:29"},"referencedDeclaration":4085,"src":"1428:11:29","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4085_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"},{"constant":false,"id":3238,"indexed":false,"mutability":"mutable","name":"liquidityManagement","nameLocation":"1481:19:29","nodeType":"VariableDeclaration","scope":3240,"src":"1461:39:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4014_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":3237,"nodeType":"UserDefinedTypeName","pathNode":{"id":3236,"name":"LiquidityManagement","nameLocations":["1461:19:29"],"nodeType":"IdentifierPath","referencedDeclaration":4014,"src":"1461:19:29"},"referencedDeclaration":4014,"src":"1461:19:29","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4014_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1211:295:29"},"src":"1191:316:29"},{"anonymous":false,"documentation":{"id":3241,"nodeType":"StructuredDocumentation","src":"1513:120:29","text":" @notice A Pool was initialized by calling `initialize`.\n @param pool The pool being initialized"},"eventSelector":"cad8c9d32507393b6508ca4a888b81979919b477510585bde8488f153072d6f3","id":3245,"name":"PoolInitialized","nameLocation":"1644:15:29","nodeType":"EventDefinition","parameters":{"id":3244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3243,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1676:4:29","nodeType":"VariableDeclaration","scope":3245,"src":"1660:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3242,"name":"address","nodeType":"ElementaryTypeName","src":"1660:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1659:22:29"},"src":"1638:44:29"},{"anonymous":false,"documentation":{"id":3246,"nodeType":"StructuredDocumentation","src":"1688:478:29","text":" @notice A swap has occurred.\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountIn Number of tokenIn tokens\n @param amountOut Number of tokenOut tokens\n @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n @param swapFeeAmount Swap fee amount paid"},"eventSelector":"0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db","id":3264,"name":"Swap","nameLocation":"2177:4:29","nodeType":"EventDefinition","parameters":{"id":3263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3248,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2207:4:29","nodeType":"VariableDeclaration","scope":3264,"src":"2191:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3247,"name":"address","nodeType":"ElementaryTypeName","src":"2191:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3251,"indexed":true,"mutability":"mutable","name":"tokenIn","nameLocation":"2236:7:29","nodeType":"VariableDeclaration","scope":3264,"src":"2221:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3250,"nodeType":"UserDefinedTypeName","pathNode":{"id":3249,"name":"IERC20","nameLocations":["2221:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2221:6:29"},"referencedDeclaration":10576,"src":"2221:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3254,"indexed":true,"mutability":"mutable","name":"tokenOut","nameLocation":"2268:8:29","nodeType":"VariableDeclaration","scope":3264,"src":"2253:23:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3253,"nodeType":"UserDefinedTypeName","pathNode":{"id":3252,"name":"IERC20","nameLocations":["2253:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2253:6:29"},"referencedDeclaration":10576,"src":"2253:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3256,"indexed":false,"mutability":"mutable","name":"amountIn","nameLocation":"2294:8:29","nodeType":"VariableDeclaration","scope":3264,"src":"2286:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3255,"name":"uint256","nodeType":"ElementaryTypeName","src":"2286:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3258,"indexed":false,"mutability":"mutable","name":"amountOut","nameLocation":"2320:9:29","nodeType":"VariableDeclaration","scope":3264,"src":"2312:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3257,"name":"uint256","nodeType":"ElementaryTypeName","src":"2312:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3260,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"2347:17:29","nodeType":"VariableDeclaration","scope":3264,"src":"2339:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3259,"name":"uint256","nodeType":"ElementaryTypeName","src":"2339:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3262,"indexed":false,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"2382:13:29","nodeType":"VariableDeclaration","scope":3264,"src":"2374:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3261,"name":"uint256","nodeType":"ElementaryTypeName","src":"2374:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2181:220:29"},"src":"2171:231:29"},{"anonymous":false,"documentation":{"id":3265,"nodeType":"StructuredDocumentation","src":"2408:352:29","text":" @notice A wrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param depositedUnderlying Number of underlying tokens deposited\n @param mintedShares Number of shares (wrapped tokens) minted\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"3771d13c67011e31e12031c54bb59b0bf544a80b81d280a3711e172aa8b7f47b","id":3276,"name":"Wrap","nameLocation":"2771:4:29","nodeType":"EventDefinition","parameters":{"id":3275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3268,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"2802:12:29","nodeType":"VariableDeclaration","scope":3276,"src":"2785:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3267,"nodeType":"UserDefinedTypeName","pathNode":{"id":3266,"name":"IERC4626","nameLocations":["2785:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"2785:8:29"},"referencedDeclaration":9846,"src":"2785:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3270,"indexed":false,"mutability":"mutable","name":"depositedUnderlying","nameLocation":"2832:19:29","nodeType":"VariableDeclaration","scope":3276,"src":"2824:27:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3269,"name":"uint256","nodeType":"ElementaryTypeName","src":"2824:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3272,"indexed":false,"mutability":"mutable","name":"mintedShares","nameLocation":"2869:12:29","nodeType":"VariableDeclaration","scope":3276,"src":"2861:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3271,"name":"uint256","nodeType":"ElementaryTypeName","src":"2861:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3274,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"2899:14:29","nodeType":"VariableDeclaration","scope":3276,"src":"2891:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3273,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2891:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2775:144:29"},"src":"2765:155:29"},{"anonymous":false,"documentation":{"id":3277,"nodeType":"StructuredDocumentation","src":"2926:355:29","text":" @notice An unwrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param burnedShares Number of shares (wrapped tokens) burned\n @param withdrawnUnderlying Number of underlying tokens withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"eeb740c90bf2b18c9532eb7d473137767036d893dff3e009f32718f821b2a4c0","id":3288,"name":"Unwrap","nameLocation":"3292:6:29","nodeType":"EventDefinition","parameters":{"id":3287,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3280,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"3325:12:29","nodeType":"VariableDeclaration","scope":3288,"src":"3308:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3279,"nodeType":"UserDefinedTypeName","pathNode":{"id":3278,"name":"IERC4626","nameLocations":["3308:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"3308:8:29"},"referencedDeclaration":9846,"src":"3308:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3282,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"3355:12:29","nodeType":"VariableDeclaration","scope":3288,"src":"3347:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3281,"name":"uint256","nodeType":"ElementaryTypeName","src":"3347:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3284,"indexed":false,"mutability":"mutable","name":"withdrawnUnderlying","nameLocation":"3385:19:29","nodeType":"VariableDeclaration","scope":3288,"src":"3377:27:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3283,"name":"uint256","nodeType":"ElementaryTypeName","src":"3377:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3286,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"3422:14:29","nodeType":"VariableDeclaration","scope":3288,"src":"3414:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3285,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3414:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3298:144:29"},"src":"3286:157:29"},{"anonymous":false,"documentation":{"id":3289,"nodeType":"StructuredDocumentation","src":"3449:562:29","text":" @notice Liquidity has been added to a pool (including initialization).\n @param pool The pool with liquidity added\n @param liquidityProvider The user performing the operation\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"a26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca871","id":3306,"name":"LiquidityAdded","nameLocation":"4022:14:29","nodeType":"EventDefinition","parameters":{"id":3305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3291,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4062:4:29","nodeType":"VariableDeclaration","scope":3306,"src":"4046:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3290,"name":"address","nodeType":"ElementaryTypeName","src":"4046:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3293,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4092:17:29","nodeType":"VariableDeclaration","scope":3306,"src":"4076:33:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3292,"name":"address","nodeType":"ElementaryTypeName","src":"4076:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3296,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4144:4:29","nodeType":"VariableDeclaration","scope":3306,"src":"4119:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4241","typeString":"enum AddLiquidityKind"},"typeName":{"id":3295,"nodeType":"UserDefinedTypeName","pathNode":{"id":3294,"name":"AddLiquidityKind","nameLocations":["4119:16:29"],"nodeType":"IdentifierPath","referencedDeclaration":4241,"src":"4119:16:29"},"referencedDeclaration":4241,"src":"4119:16:29","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4241","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":3298,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4166:11:29","nodeType":"VariableDeclaration","scope":3306,"src":"4158:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3297,"name":"uint256","nodeType":"ElementaryTypeName","src":"4158:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3301,"indexed":false,"mutability":"mutable","name":"amountsAddedRaw","nameLocation":"4197:15:29","nodeType":"VariableDeclaration","scope":3306,"src":"4187:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3299,"name":"uint256","nodeType":"ElementaryTypeName","src":"4187:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3300,"nodeType":"ArrayTypeName","src":"4187:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3304,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"4232:17:29","nodeType":"VariableDeclaration","scope":3306,"src":"4222:27:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3302,"name":"uint256","nodeType":"ElementaryTypeName","src":"4222:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3303,"nodeType":"ArrayTypeName","src":"4222:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4036:219:29"},"src":"4016:240:29"},{"anonymous":false,"documentation":{"id":3307,"nodeType":"StructuredDocumentation","src":"4262:548:29","text":" @notice Liquidity has been removed from a pool.\n @param pool The pool with liquidity removed\n @param liquidityProvider The user performing the operation\n @param kind The remove liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"fbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a5","id":3324,"name":"LiquidityRemoved","nameLocation":"4821:16:29","nodeType":"EventDefinition","parameters":{"id":3323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3309,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4863:4:29","nodeType":"VariableDeclaration","scope":3324,"src":"4847:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3308,"name":"address","nodeType":"ElementaryTypeName","src":"4847:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3311,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4893:17:29","nodeType":"VariableDeclaration","scope":3324,"src":"4877:33:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3310,"name":"address","nodeType":"ElementaryTypeName","src":"4877:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3314,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4948:4:29","nodeType":"VariableDeclaration","scope":3324,"src":"4920:32:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4262","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":3313,"nodeType":"UserDefinedTypeName","pathNode":{"id":3312,"name":"RemoveLiquidityKind","nameLocations":["4920:19:29"],"nodeType":"IdentifierPath","referencedDeclaration":4262,"src":"4920:19:29"},"referencedDeclaration":4262,"src":"4920:19:29","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4262","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":3316,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4970:11:29","nodeType":"VariableDeclaration","scope":3324,"src":"4962:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3315,"name":"uint256","nodeType":"ElementaryTypeName","src":"4962:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3319,"indexed":false,"mutability":"mutable","name":"amountsRemovedRaw","nameLocation":"5001:17:29","nodeType":"VariableDeclaration","scope":3324,"src":"4991:27:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3317,"name":"uint256","nodeType":"ElementaryTypeName","src":"4991:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3318,"nodeType":"ArrayTypeName","src":"4991:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3322,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"5038:17:29","nodeType":"VariableDeclaration","scope":3324,"src":"5028:27:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3320,"name":"uint256","nodeType":"ElementaryTypeName","src":"5028:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3321,"nodeType":"ArrayTypeName","src":"5028:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4837:224:29"},"src":"4815:247:29"},{"anonymous":false,"documentation":{"id":3325,"nodeType":"StructuredDocumentation","src":"5068:114:29","text":" @notice The Vault's pause status has changed.\n @param paused True if the Vault was paused"},"eventSelector":"e0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d02","id":3329,"name":"VaultPausedStateChanged","nameLocation":"5193:23:29","nodeType":"EventDefinition","parameters":{"id":3328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3327,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5222:6:29","nodeType":"VariableDeclaration","scope":3329,"src":"5217:11:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3326,"name":"bool","nodeType":"ElementaryTypeName","src":"5217:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5216:13:29"},"src":"5187:43:29"},{"anonymous":false,"documentation":{"id":3330,"nodeType":"StructuredDocumentation","src":"5236:87:29","text":"@notice `disableQuery` has been called on the Vault, disabling query functionality."},"eventSelector":"bd204090fd387f08e3076528bf09b4fc99d8100d749eace96c06002d3fedc625","id":3332,"name":"VaultQueriesDisabled","nameLocation":"5334:20:29","nodeType":"EventDefinition","parameters":{"id":3331,"nodeType":"ParameterList","parameters":[],"src":"5354:2:29"},"src":"5328:29:29"},{"anonymous":false,"documentation":{"id":3333,"nodeType":"StructuredDocumentation","src":"5363:85:29","text":"@notice `enableQuery` has been called on the Vault, enabling query functionality."},"eventSelector":"91d7478835f2b5adc315f5aad920f4a7f0a02f7fddf3042d17b2c80168ea17f5","id":3335,"name":"VaultQueriesEnabled","nameLocation":"5459:19:29","nodeType":"EventDefinition","parameters":{"id":3334,"nodeType":"ParameterList","parameters":[],"src":"5478:2:29"},"src":"5453:28:29"},{"anonymous":false,"documentation":{"id":3336,"nodeType":"StructuredDocumentation","src":"5487:171:29","text":" @notice A Pool's pause status has changed.\n @param pool The pool that was just paused or unpaused\n @param paused True if the pool was paused"},"eventSelector":"57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7","id":3342,"name":"PoolPausedStateChanged","nameLocation":"5669:22:29","nodeType":"EventDefinition","parameters":{"id":3341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3338,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5708:4:29","nodeType":"VariableDeclaration","scope":3342,"src":"5692:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3337,"name":"address","nodeType":"ElementaryTypeName","src":"5692:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3340,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5719:6:29","nodeType":"VariableDeclaration","scope":3342,"src":"5714:11:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3339,"name":"bool","nodeType":"ElementaryTypeName","src":"5714:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5691:35:29"},"src":"5663:64:29"},{"anonymous":false,"documentation":{"id":3343,"nodeType":"StructuredDocumentation","src":"5733:158:29","text":" @notice Emitted when the swap fee percentage of a pool is updated.\n @param swapFeePercentage The new swap fee percentage for the pool"},"eventSelector":"89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a1","id":3349,"name":"SwapFeePercentageChanged","nameLocation":"5902:24:29","nodeType":"EventDefinition","parameters":{"id":3348,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3345,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5943:4:29","nodeType":"VariableDeclaration","scope":3349,"src":"5927:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3344,"name":"address","nodeType":"ElementaryTypeName","src":"5927:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3347,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"5957:17:29","nodeType":"VariableDeclaration","scope":3349,"src":"5949:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3346,"name":"uint256","nodeType":"ElementaryTypeName","src":"5949:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5926:49:29"},"src":"5896:80:29"},{"anonymous":false,"documentation":{"id":3350,"nodeType":"StructuredDocumentation","src":"5982:170:29","text":" @notice Recovery mode has been enabled or disabled for a pool.\n @param pool The pool\n @param recoveryMode True if recovery mode was enabled"},"eventSelector":"c2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a9","id":3356,"name":"PoolRecoveryModeStateChanged","nameLocation":"6163:28:29","nodeType":"EventDefinition","parameters":{"id":3355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3352,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6208:4:29","nodeType":"VariableDeclaration","scope":3356,"src":"6192:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3351,"name":"address","nodeType":"ElementaryTypeName","src":"6192:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3354,"indexed":false,"mutability":"mutable","name":"recoveryMode","nameLocation":"6219:12:29","nodeType":"VariableDeclaration","scope":3356,"src":"6214:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3353,"name":"bool","nodeType":"ElementaryTypeName","src":"6214:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6191:41:29"},"src":"6157:76:29"},{"anonymous":false,"documentation":{"id":3357,"nodeType":"StructuredDocumentation","src":"6239:353:29","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate swap fee percentage changed\n @param aggregateSwapFeePercentage The new aggregate swap fee percentage"},"eventSelector":"e4d371097beea42453a37406e2aef4c04f3c548f84ac50e72578662c0dcd7354","id":3363,"name":"AggregateSwapFeePercentageChanged","nameLocation":"6603:33:29","nodeType":"EventDefinition","parameters":{"id":3362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3359,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6653:4:29","nodeType":"VariableDeclaration","scope":3363,"src":"6637:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3358,"name":"address","nodeType":"ElementaryTypeName","src":"6637:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3361,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"6667:26:29","nodeType":"VariableDeclaration","scope":3363,"src":"6659:34:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3360,"name":"uint256","nodeType":"ElementaryTypeName","src":"6659:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6636:58:29"},"src":"6597:98:29"},{"anonymous":false,"documentation":{"id":3364,"nodeType":"StructuredDocumentation","src":"6701:357:29","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate yield fee percentage changed\n @param aggregateYieldFeePercentage The new aggregate yield fee percentage"},"eventSelector":"606eb97d83164bd6b200d638cd49c14c65d94d4f2c674cfd85e24e0e202c3ca5","id":3370,"name":"AggregateYieldFeePercentageChanged","nameLocation":"7069:34:29","nodeType":"EventDefinition","parameters":{"id":3369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3366,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"7120:4:29","nodeType":"VariableDeclaration","scope":3370,"src":"7104:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3365,"name":"address","nodeType":"ElementaryTypeName","src":"7104:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3368,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"7134:27:29","nodeType":"VariableDeclaration","scope":3370,"src":"7126:35:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3367,"name":"uint256","nodeType":"ElementaryTypeName","src":"7126:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7103:59:29"},"src":"7063:100:29"},{"anonymous":false,"documentation":{"id":3371,"nodeType":"StructuredDocumentation","src":"7169:132:29","text":" @notice A new authorizer is set by `setAuthorizer`.\n @param newAuthorizer The address of the new authorizer"},"eventSelector":"94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef","id":3376,"name":"AuthorizerChanged","nameLocation":"7312:17:29","nodeType":"EventDefinition","parameters":{"id":3375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3374,"indexed":true,"mutability":"mutable","name":"newAuthorizer","nameLocation":"7350:13:29","nodeType":"VariableDeclaration","scope":3376,"src":"7330:33:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"},"typeName":{"id":3373,"nodeType":"UserDefinedTypeName","pathNode":{"id":3372,"name":"IAuthorizer","nameLocations":["7330:11:29"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"7330:11:29"},"referencedDeclaration":1341,"src":"7330:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"7329:35:29"},"src":"7306:59:29"},{"anonymous":false,"documentation":{"id":3377,"nodeType":"StructuredDocumentation","src":"7371:180:29","text":" @notice A new protocol fee controller is set by `setProtocolFeeController`.\n @param newProtocolFeeController The address of the new protocol fee controller"},"eventSelector":"280a60b1e63c1774d397d35cce80eb80e51408ead755fb446e6f744ce98e5df0","id":3382,"name":"ProtocolFeeControllerChanged","nameLocation":"7562:28:29","nodeType":"EventDefinition","parameters":{"id":3381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3380,"indexed":true,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"7622:24:29","nodeType":"VariableDeclaration","scope":3382,"src":"7591:55:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":3379,"nodeType":"UserDefinedTypeName","pathNode":{"id":3378,"name":"IProtocolFeeController","nameLocations":["7591:22:29"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"7591:22:29"},"referencedDeclaration":1955,"src":"7591:22:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"7590:57:29"},"src":"7556:92:29"},{"anonymous":false,"documentation":{"id":3383,"nodeType":"StructuredDocumentation","src":"7654:553:29","text":" @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was deposited\n @param amountWrapped The amount of the wrapped token that was deposited\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a9","id":3394,"name":"LiquidityAddedToBuffer","nameLocation":"8218:22:29","nodeType":"EventDefinition","parameters":{"id":3393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3386,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"8267:12:29","nodeType":"VariableDeclaration","scope":3394,"src":"8250:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3385,"nodeType":"UserDefinedTypeName","pathNode":{"id":3384,"name":"IERC4626","nameLocations":["8250:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"8250:8:29"},"referencedDeclaration":9846,"src":"8250:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3388,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"8297:16:29","nodeType":"VariableDeclaration","scope":3394,"src":"8289:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3387,"name":"uint256","nodeType":"ElementaryTypeName","src":"8289:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3390,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"8331:13:29","nodeType":"VariableDeclaration","scope":3394,"src":"8323:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3389,"name":"uint256","nodeType":"ElementaryTypeName","src":"8323:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3392,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"8362:14:29","nodeType":"VariableDeclaration","scope":3394,"src":"8354:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3391,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8354:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8240:142:29"},"src":"8212:171:29"},{"anonymous":false,"documentation":{"id":3395,"nodeType":"StructuredDocumentation","src":"8389:570:29","text":" @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param to The owner of the minted shares\n @param issuedShares The amount of \"internal BPT\" shares created"},"eventSelector":"d66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec34","id":3404,"name":"BufferSharesMinted","nameLocation":"8970:18:29","nodeType":"EventDefinition","parameters":{"id":3403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3398,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9006:12:29","nodeType":"VariableDeclaration","scope":3404,"src":"8989:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3397,"nodeType":"UserDefinedTypeName","pathNode":{"id":3396,"name":"IERC4626","nameLocations":["8989:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"8989:8:29"},"referencedDeclaration":9846,"src":"8989:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3400,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"9036:2:29","nodeType":"VariableDeclaration","scope":3404,"src":"9020:18:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3399,"name":"address","nodeType":"ElementaryTypeName","src":"9020:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3402,"indexed":false,"mutability":"mutable","name":"issuedShares","nameLocation":"9048:12:29","nodeType":"VariableDeclaration","scope":3404,"src":"9040:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3401,"name":"uint256","nodeType":"ElementaryTypeName","src":"9040:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8988:73:29"},"src":"8964:98:29"},{"anonymous":false,"documentation":{"id":3405,"nodeType":"StructuredDocumentation","src":"9068:571:29","text":" @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param from The owner of the burned shares\n @param burnedShares The amount of \"internal BPT\" shares burned"},"eventSelector":"4e09f7f7fc37ce2897800e2c2a9099565edb0a133d19d84a6871b3530af8846b","id":3414,"name":"BufferSharesBurned","nameLocation":"9650:18:29","nodeType":"EventDefinition","parameters":{"id":3413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3408,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9686:12:29","nodeType":"VariableDeclaration","scope":3414,"src":"9669:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3407,"nodeType":"UserDefinedTypeName","pathNode":{"id":3406,"name":"IERC4626","nameLocations":["9669:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"9669:8:29"},"referencedDeclaration":9846,"src":"9669:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3410,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"9716:4:29","nodeType":"VariableDeclaration","scope":3414,"src":"9700:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3409,"name":"address","nodeType":"ElementaryTypeName","src":"9700:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3412,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"9730:12:29","nodeType":"VariableDeclaration","scope":3414,"src":"9722:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3411,"name":"uint256","nodeType":"ElementaryTypeName","src":"9722:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9668:75:29"},"src":"9644:100:29"},{"anonymous":false,"documentation":{"id":3415,"nodeType":"StructuredDocumentation","src":"9750:509:29","text":" @notice Liquidity was removed from an ERC4626 buffer.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was withdrawn\n @param amountWrapped The amount of the wrapped token that was withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"44d97b36e99b590b3d2875aad3b167b1d7fb1e063f3f1325a1eeac76caee5113","id":3426,"name":"LiquidityRemovedFromBuffer","nameLocation":"10270:26:29","nodeType":"EventDefinition","parameters":{"id":3425,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3418,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"10323:12:29","nodeType":"VariableDeclaration","scope":3426,"src":"10306:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3417,"nodeType":"UserDefinedTypeName","pathNode":{"id":3416,"name":"IERC4626","nameLocations":["10306:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"10306:8:29"},"referencedDeclaration":9846,"src":"10306:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3420,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"10353:16:29","nodeType":"VariableDeclaration","scope":3426,"src":"10345:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3419,"name":"uint256","nodeType":"ElementaryTypeName","src":"10345:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3422,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"10387:13:29","nodeType":"VariableDeclaration","scope":3426,"src":"10379:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3421,"name":"uint256","nodeType":"ElementaryTypeName","src":"10379:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3424,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"10418:14:29","nodeType":"VariableDeclaration","scope":3426,"src":"10410:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3423,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10410:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10296:142:29"},"src":"10264:175:29"},{"anonymous":false,"documentation":{"id":3427,"nodeType":"StructuredDocumentation","src":"10445:278:29","text":" @notice The Vault buffers pause status has changed.\n @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n set to true) will revert.\n @param paused True if the Vault buffers were paused"},"eventSelector":"300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a5","id":3431,"name":"VaultBuffersPausedStateChanged","nameLocation":"10734:30:29","nodeType":"EventDefinition","parameters":{"id":3430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3429,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"10770:6:29","nodeType":"VariableDeclaration","scope":3431,"src":"10765:11:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3428,"name":"bool","nodeType":"ElementaryTypeName","src":"10765:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10764:13:29"},"src":"10728:50:29"},{"anonymous":false,"documentation":{"id":3432,"nodeType":"StructuredDocumentation","src":"10784:194:29","text":" @notice Pools can use this event to emit event data from the Vault.\n @param pool Pool address\n @param eventKey Event key\n @param eventData Encoded event data"},"eventSelector":"4bc4412e210115456903c65b5277d299a505e79f2eb852b92b1ca52d85856428","id":3440,"name":"VaultAuxiliary","nameLocation":"10989:14:29","nodeType":"EventDefinition","parameters":{"id":3439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3434,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"11020:4:29","nodeType":"VariableDeclaration","scope":3440,"src":"11004:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3433,"name":"address","nodeType":"ElementaryTypeName","src":"11004:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3436,"indexed":true,"mutability":"mutable","name":"eventKey","nameLocation":"11042:8:29","nodeType":"VariableDeclaration","scope":3440,"src":"11026:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3435,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11026:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3438,"indexed":false,"mutability":"mutable","name":"eventData","nameLocation":"11058:9:29","nodeType":"VariableDeclaration","scope":3440,"src":"11052:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3437,"name":"bytes","nodeType":"ElementaryTypeName","src":"11052:5:29","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11003:65:29"},"src":"10983:86:29"}],"scope":3442,"src":"500:10571:29","usedErrors":[],"usedEvents":[3240,3245,3264,3276,3288,3306,3324,3329,3332,3335,3342,3349,3356,3363,3370,3376,3382,3394,3404,3414,3426,3431,3440]}],"src":"46:11026:29"},"id":29},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","exportedSymbols":{"AddLiquidityKind":[4241],"AddLiquidityParams":[4257],"AfterSwapParams":[4235],"BufferWrapOrUnwrapParams":[4296],"FEE_BITLENGTH":[4299],"FEE_SCALING_FACTOR":[4302],"HookFlags":[4061],"HooksConfig":[4085],"IAuthorizer":[1341],"IERC20":[10576],"IERC4626":[9846],"IHooks":[1617],"IProtocolFeeController":[1955],"IRateProvider":[24],"IVault":[2545],"IVaultExtension":[3860],"LiquidityManagement":[4014],"MAX_FEE_PERCENTAGE":[4305],"PoolConfig":[4039],"PoolConfigBits":[4016],"PoolData":[4163],"PoolRoleAccounts":[4111],"PoolSwapParams":[4206],"RemoveLiquidityKind":[4262],"RemoveLiquidityParams":[4278],"Rounding":[4166],"SwapKind":[4169],"SwapState":[4095],"TokenConfig":[4128],"TokenInfo":[4138],"TokenType":[4115],"VaultState":[4103],"VaultSwapParams":[4188],"WrappingDirection":[4281]},"id":3861,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3443,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:30"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":3445,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3861,"sourceUnit":9847,"src":"72:75:30","symbolAliases":[{"foreign":{"id":3444,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"81:8:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3447,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3861,"sourceUnit":10577,"src":"148:72:30","symbolAliases":[{"foreign":{"id":3446,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"157:6:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":3449,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3861,"sourceUnit":1342,"src":"222:48:30","symbolAliases":[{"foreign":{"id":3448,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"231:11:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":3451,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3861,"sourceUnit":1956,"src":"271:70:30","symbolAliases":[{"foreign":{"id":3450,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"280:22:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":3453,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3861,"sourceUnit":2546,"src":"342:38:30","symbolAliases":[{"foreign":{"id":3452,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"351:6:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":3455,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3861,"sourceUnit":1618,"src":"381:38:30","symbolAliases":[{"foreign":{"id":3454,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1617,"src":"390:6:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":3456,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3861,"sourceUnit":4306,"src":"420:26:30","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultExtension","contractDependencies":[],"contractKind":"interface","documentation":{"id":3457,"nodeType":"StructuredDocumentation","src":"448:318:30","text":" @notice Interface for functions defined on the `VaultExtension` contract.\n @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n liquidity operations."},"fullyImplemented":false,"id":3860,"linearizedBaseContracts":[3860],"name":"IVaultExtension","nameLocation":"777:15:30","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3458,"nodeType":"StructuredDocumentation","src":"1025:206:30","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":3464,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1245:5:30","nodeType":"FunctionDefinition","parameters":{"id":3459,"nodeType":"ParameterList","parameters":[],"src":"1250:2:30"},"returnParameters":{"id":3463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3462,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3464,"src":"1276:6:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":3461,"nodeType":"UserDefinedTypeName","pathNode":{"id":3460,"name":"IVault","nameLocations":["1276:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1276:6:30"},"referencedDeclaration":2545,"src":"1276:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1275:8:30"},"scope":3860,"src":"1236:48:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3465,"nodeType":"StructuredDocumentation","src":"1290:202:30","text":" @notice Returns the VaultAdmin contract address.\n @dev The VaultAdmin contract mostly implements permissioned functions.\n @return vaultAdmin The address of the Vault admin"},"functionSelector":"1ba0ae45","id":3470,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultAdmin","nameLocation":"1506:13:30","nodeType":"FunctionDefinition","parameters":{"id":3466,"nodeType":"ParameterList","parameters":[],"src":"1519:2:30"},"returnParameters":{"id":3469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3468,"mutability":"mutable","name":"vaultAdmin","nameLocation":"1553:10:30","nodeType":"VariableDeclaration","scope":3470,"src":"1545:18:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3467,"name":"address","nodeType":"ElementaryTypeName","src":"1545:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1544:20:30"},"scope":3860,"src":"1497:68:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3471,"nodeType":"StructuredDocumentation","src":"1793:254:30","text":" @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n @dev The Vault must be unlocked to perform state-changing liquidity operations.\n @return unlocked True if the Vault is unlocked, false otherwise"},"functionSelector":"8380edb7","id":3476,"implemented":false,"kind":"function","modifiers":[],"name":"isUnlocked","nameLocation":"2061:10:30","nodeType":"FunctionDefinition","parameters":{"id":3472,"nodeType":"ParameterList","parameters":[],"src":"2071:2:30"},"returnParameters":{"id":3475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3474,"mutability":"mutable","name":"unlocked","nameLocation":"2102:8:30","nodeType":"VariableDeclaration","scope":3476,"src":"2097:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3473,"name":"bool","nodeType":"ElementaryTypeName","src":"2097:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2096:15:30"},"scope":3860,"src":"2052:60:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3477,"nodeType":"StructuredDocumentation","src":"2118:141:30","text":" @notice Returns the count of non-zero deltas.\n @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`"},"functionSelector":"db817187","id":3482,"implemented":false,"kind":"function","modifiers":[],"name":"getNonzeroDeltaCount","nameLocation":"2273:20:30","nodeType":"FunctionDefinition","parameters":{"id":3478,"nodeType":"ParameterList","parameters":[],"src":"2293:2:30"},"returnParameters":{"id":3481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3480,"mutability":"mutable","name":"nonzeroDeltaCount","nameLocation":"2327:17:30","nodeType":"VariableDeclaration","scope":3482,"src":"2319:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3479,"name":"uint256","nodeType":"ElementaryTypeName","src":"2319:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2318:27:30"},"scope":3860,"src":"2264:82:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3483,"nodeType":"StructuredDocumentation","src":"2352:284:30","text":" @notice Retrieves the token delta for a specific token.\n @dev This function allows reading the value from the `_tokenDeltas` mapping.\n @param token The token for which the delta is being fetched\n @return tokenDelta The delta of the specified token"},"functionSelector":"9e825ff5","id":3491,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenDelta","nameLocation":"2650:13:30","nodeType":"FunctionDefinition","parameters":{"id":3487,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3486,"mutability":"mutable","name":"token","nameLocation":"2671:5:30","nodeType":"VariableDeclaration","scope":3491,"src":"2664:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3485,"nodeType":"UserDefinedTypeName","pathNode":{"id":3484,"name":"IERC20","nameLocations":["2664:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2664:6:30"},"referencedDeclaration":10576,"src":"2664:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2663:14:30"},"returnParameters":{"id":3490,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3489,"mutability":"mutable","name":"tokenDelta","nameLocation":"2708:10:30","nodeType":"VariableDeclaration","scope":3491,"src":"2701:17:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3488,"name":"int256","nodeType":"ElementaryTypeName","src":"2701:6:30","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"2700:19:30"},"scope":3860,"src":"2641:79:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3492,"nodeType":"StructuredDocumentation","src":"2726:230:30","text":" @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n @param token The token for which to retrieve the reserve\n @return reserveAmount The amount of reserves for the given token"},"functionSelector":"96787092","id":3500,"implemented":false,"kind":"function","modifiers":[],"name":"getReservesOf","nameLocation":"2970:13:30","nodeType":"FunctionDefinition","parameters":{"id":3496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3495,"mutability":"mutable","name":"token","nameLocation":"2991:5:30","nodeType":"VariableDeclaration","scope":3500,"src":"2984:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3494,"nodeType":"UserDefinedTypeName","pathNode":{"id":3493,"name":"IERC20","nameLocations":["2984:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2984:6:30"},"referencedDeclaration":10576,"src":"2984:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2983:14:30"},"returnParameters":{"id":3499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3498,"mutability":"mutable","name":"reserveAmount","nameLocation":"3029:13:30","nodeType":"VariableDeclaration","scope":3500,"src":"3021:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3497,"name":"uint256","nodeType":"ElementaryTypeName","src":"3021:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3020:23:30"},"scope":3860,"src":"2961:83:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3501,"nodeType":"StructuredDocumentation","src":"3050:944:30","text":" @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n same pool).\n @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n than a simple swap for every pool type.\n @param pool Address of the pool to check\n @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session."},"functionSelector":"ace9b89b","id":3508,"implemented":false,"kind":"function","modifiers":[],"name":"getAddLiquidityCalledFlag","nameLocation":"4008:25:30","nodeType":"FunctionDefinition","parameters":{"id":3504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3503,"mutability":"mutable","name":"pool","nameLocation":"4042:4:30","nodeType":"VariableDeclaration","scope":3508,"src":"4034:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3502,"name":"address","nodeType":"ElementaryTypeName","src":"4034:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4033:14:30"},"returnParameters":{"id":3507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3506,"mutability":"mutable","name":"liquidityAdded","nameLocation":"4076:14:30","nodeType":"VariableDeclaration","scope":3508,"src":"4071:19:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3505,"name":"bool","nodeType":"ElementaryTypeName","src":"4071:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4070:21:30"},"scope":3860,"src":"3999:93:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3509,"nodeType":"StructuredDocumentation","src":"4323:1604:30","text":" @notice Registers a pool, associating it with its factory and the tokens it manages.\n @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n pool will automatically unpause. Balancer timestamps are 32 bits.\n A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n the Vault.\n If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n authorizer.\n @param pool The address of the pool being registered\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The initial static swap fee percentage of the pool\n @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param poolHooksContract Contract that implements the hooks for the pool\n @param liquidityManagement Liquidity management flags with implemented methods"},"functionSelector":"eeec802f","id":3532,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"5941:12:30","nodeType":"FunctionDefinition","parameters":{"id":3530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3511,"mutability":"mutable","name":"pool","nameLocation":"5971:4:30","nodeType":"VariableDeclaration","scope":3532,"src":"5963:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3510,"name":"address","nodeType":"ElementaryTypeName","src":"5963:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3515,"mutability":"mutable","name":"tokenConfig","nameLocation":"6006:11:30","nodeType":"VariableDeclaration","scope":3532,"src":"5985:32:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4128_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":3513,"nodeType":"UserDefinedTypeName","pathNode":{"id":3512,"name":"TokenConfig","nameLocations":["5985:11:30"],"nodeType":"IdentifierPath","referencedDeclaration":4128,"src":"5985:11:30"},"referencedDeclaration":4128,"src":"5985:11:30","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4128_storage_ptr","typeString":"struct TokenConfig"}},"id":3514,"nodeType":"ArrayTypeName","src":"5985:13:30","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4128_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":3517,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"6035:17:30","nodeType":"VariableDeclaration","scope":3532,"src":"6027:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3516,"name":"uint256","nodeType":"ElementaryTypeName","src":"6027:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3519,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"6069:18:30","nodeType":"VariableDeclaration","scope":3532,"src":"6062:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3518,"name":"uint32","nodeType":"ElementaryTypeName","src":"6062:6:30","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":3521,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6102:17:30","nodeType":"VariableDeclaration","scope":3532,"src":"6097:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3520,"name":"bool","nodeType":"ElementaryTypeName","src":"6097:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3524,"mutability":"mutable","name":"roleAccounts","nameLocation":"6155:12:30","nodeType":"VariableDeclaration","scope":3532,"src":"6129:38:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_calldata_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":3523,"nodeType":"UserDefinedTypeName","pathNode":{"id":3522,"name":"PoolRoleAccounts","nameLocations":["6129:16:30"],"nodeType":"IdentifierPath","referencedDeclaration":4111,"src":"6129:16:30"},"referencedDeclaration":4111,"src":"6129:16:30","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":3526,"mutability":"mutable","name":"poolHooksContract","nameLocation":"6185:17:30","nodeType":"VariableDeclaration","scope":3532,"src":"6177:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3525,"name":"address","nodeType":"ElementaryTypeName","src":"6177:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3529,"mutability":"mutable","name":"liquidityManagement","nameLocation":"6241:19:30","nodeType":"VariableDeclaration","scope":3532,"src":"6212:48:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4014_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":3528,"nodeType":"UserDefinedTypeName","pathNode":{"id":3527,"name":"LiquidityManagement","nameLocations":["6212:19:30"],"nodeType":"IdentifierPath","referencedDeclaration":4014,"src":"6212:19:30"},"referencedDeclaration":4014,"src":"6212:19:30","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4014_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"5953:313:30"},"returnParameters":{"id":3531,"nodeType":"ParameterList","parameters":[],"src":"6275:0:30"},"scope":3860,"src":"5932:344:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3533,"nodeType":"StructuredDocumentation","src":"6282:185:30","text":" @notice Checks whether a pool is registered.\n @param pool Address of the pool to check\n @return registered True if the pool is registered, false otherwise"},"functionSelector":"c673bdaf","id":3540,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"6481:16:30","nodeType":"FunctionDefinition","parameters":{"id":3536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3535,"mutability":"mutable","name":"pool","nameLocation":"6506:4:30","nodeType":"VariableDeclaration","scope":3540,"src":"6498:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3534,"name":"address","nodeType":"ElementaryTypeName","src":"6498:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6497:14:30"},"returnParameters":{"id":3539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3538,"mutability":"mutable","name":"registered","nameLocation":"6540:10:30","nodeType":"VariableDeclaration","scope":3540,"src":"6535:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3537,"name":"bool","nodeType":"ElementaryTypeName","src":"6535:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6534:17:30"},"scope":3860,"src":"6472:80:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3541,"nodeType":"StructuredDocumentation","src":"6558:589:30","text":" @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n @param pool Address of the pool to initialize\n @param to Address that will receive the output BPT\n @param tokens Tokens used to seed the pool (must match the registered tokens)\n @param exactAmountsIn Exact amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param userData Additional (optional) data required for adding initial liquidity\n @return bptAmountOut Output pool token amount"},"functionSelector":"ba8a2be0","id":3561,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"7161:10:30","nodeType":"FunctionDefinition","parameters":{"id":3557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3543,"mutability":"mutable","name":"pool","nameLocation":"7189:4:30","nodeType":"VariableDeclaration","scope":3561,"src":"7181:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3542,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3545,"mutability":"mutable","name":"to","nameLocation":"7211:2:30","nodeType":"VariableDeclaration","scope":3561,"src":"7203:10:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3544,"name":"address","nodeType":"ElementaryTypeName","src":"7203:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3549,"mutability":"mutable","name":"tokens","nameLocation":"7239:6:30","nodeType":"VariableDeclaration","scope":3561,"src":"7223:22:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3547,"nodeType":"UserDefinedTypeName","pathNode":{"id":3546,"name":"IERC20","nameLocations":["7223:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"7223:6:30"},"referencedDeclaration":10576,"src":"7223:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":3548,"nodeType":"ArrayTypeName","src":"7223:8:30","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":3552,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"7272:14:30","nodeType":"VariableDeclaration","scope":3561,"src":"7255:31:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3550,"name":"uint256","nodeType":"ElementaryTypeName","src":"7255:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3551,"nodeType":"ArrayTypeName","src":"7255:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3554,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"7304:15:30","nodeType":"VariableDeclaration","scope":3561,"src":"7296:23:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3553,"name":"uint256","nodeType":"ElementaryTypeName","src":"7296:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3556,"mutability":"mutable","name":"userData","nameLocation":"7342:8:30","nodeType":"VariableDeclaration","scope":3561,"src":"7329:21:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3555,"name":"bytes","nodeType":"ElementaryTypeName","src":"7329:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7171:185:30"},"returnParameters":{"id":3560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3559,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7383:12:30","nodeType":"VariableDeclaration","scope":3561,"src":"7375:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3558,"name":"uint256","nodeType":"ElementaryTypeName","src":"7375:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7374:22:30"},"scope":3860,"src":"7152:245:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3562,"nodeType":"StructuredDocumentation","src":"7627:258:30","text":" @notice Checks whether a pool is initialized.\n @dev An initialized pool can be considered registered as well.\n @param pool Address of the pool to check\n @return initialized True if the pool is initialized, false otherwise"},"functionSelector":"532cec7c","id":3569,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInitialized","nameLocation":"7899:17:30","nodeType":"FunctionDefinition","parameters":{"id":3565,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3564,"mutability":"mutable","name":"pool","nameLocation":"7925:4:30","nodeType":"VariableDeclaration","scope":3569,"src":"7917:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3563,"name":"address","nodeType":"ElementaryTypeName","src":"7917:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7916:14:30"},"returnParameters":{"id":3568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3567,"mutability":"mutable","name":"initialized","nameLocation":"7959:11:30","nodeType":"VariableDeclaration","scope":3569,"src":"7954:16:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3566,"name":"bool","nodeType":"ElementaryTypeName","src":"7954:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7953:18:30"},"scope":3860,"src":"7890:82:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3570,"nodeType":"StructuredDocumentation","src":"7978:152:30","text":" @notice Gets the tokens registered to a pool.\n @param pool Address of the pool\n @return tokens List of tokens in the pool"},"functionSelector":"ca4f2803","id":3579,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokens","nameLocation":"8144:13:30","nodeType":"FunctionDefinition","parameters":{"id":3573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3572,"mutability":"mutable","name":"pool","nameLocation":"8166:4:30","nodeType":"VariableDeclaration","scope":3579,"src":"8158:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3571,"name":"address","nodeType":"ElementaryTypeName","src":"8158:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8157:14:30"},"returnParameters":{"id":3578,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3577,"mutability":"mutable","name":"tokens","nameLocation":"8211:6:30","nodeType":"VariableDeclaration","scope":3579,"src":"8195:22:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3575,"nodeType":"UserDefinedTypeName","pathNode":{"id":3574,"name":"IERC20","nameLocations":["8195:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"8195:6:30"},"referencedDeclaration":10576,"src":"8195:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":3576,"nodeType":"ArrayTypeName","src":"8195:8:30","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"8194:24:30"},"scope":3860,"src":"8135:84:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3580,"nodeType":"StructuredDocumentation","src":"8225:512:30","text":" @notice Gets pool token rates.\n @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n registration order.\n @param pool Address of the pool\n @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. FP(1) for 18-decimal tokens\n @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens"},"functionSelector":"7e361bde","id":3591,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenRates","nameLocation":"8751:17:30","nodeType":"FunctionDefinition","parameters":{"id":3583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3582,"mutability":"mutable","name":"pool","nameLocation":"8786:4:30","nodeType":"VariableDeclaration","scope":3591,"src":"8778:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3581,"name":"address","nodeType":"ElementaryTypeName","src":"8778:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8768:28:30"},"returnParameters":{"id":3590,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3586,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"8837:21:30","nodeType":"VariableDeclaration","scope":3591,"src":"8820:38:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3584,"name":"uint256","nodeType":"ElementaryTypeName","src":"8820:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3585,"nodeType":"ArrayTypeName","src":"8820:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3589,"mutability":"mutable","name":"tokenRates","nameLocation":"8877:10:30","nodeType":"VariableDeclaration","scope":3591,"src":"8860:27:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3587,"name":"uint256","nodeType":"ElementaryTypeName","src":"8860:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3588,"nodeType":"ArrayTypeName","src":"8860:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8819:69:30"},"scope":3860,"src":"8742:147:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3592,"nodeType":"StructuredDocumentation","src":"8895:287:30","text":" @notice Returns comprehensive pool data for the given pool.\n @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n @param pool The address of the pool\n @return poolData The `PoolData` result"},"functionSelector":"13d21cdf","id":3600,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolData","nameLocation":"9196:11:30","nodeType":"FunctionDefinition","parameters":{"id":3595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3594,"mutability":"mutable","name":"pool","nameLocation":"9216:4:30","nodeType":"VariableDeclaration","scope":3600,"src":"9208:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3593,"name":"address","nodeType":"ElementaryTypeName","src":"9208:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9207:14:30"},"returnParameters":{"id":3599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3598,"mutability":"mutable","name":"poolData","nameLocation":"9261:8:30","nodeType":"VariableDeclaration","scope":3600,"src":"9245:24:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4163_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":3597,"nodeType":"UserDefinedTypeName","pathNode":{"id":3596,"name":"PoolData","nameLocations":["9245:8:30"],"nodeType":"IdentifierPath","referencedDeclaration":4163,"src":"9245:8:30"},"referencedDeclaration":4163,"src":"9245:8:30","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4163_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"9244:26:30"},"scope":3860,"src":"9187:84:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3601,"nodeType":"StructuredDocumentation","src":"9277:531:30","text":" @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n @param pool Address of the pool\n @return tokens The pool tokens, sorted in registration order\n @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order"},"functionSelector":"67e0e076","id":3620,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenInfo","nameLocation":"9822:16:30","nodeType":"FunctionDefinition","parameters":{"id":3604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3603,"mutability":"mutable","name":"pool","nameLocation":"9856:4:30","nodeType":"VariableDeclaration","scope":3620,"src":"9848:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3602,"name":"address","nodeType":"ElementaryTypeName","src":"9848:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9838:28:30"},"returnParameters":{"id":3619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3608,"mutability":"mutable","name":"tokens","nameLocation":"9943:6:30","nodeType":"VariableDeclaration","scope":3620,"src":"9927:22:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3606,"nodeType":"UserDefinedTypeName","pathNode":{"id":3605,"name":"IERC20","nameLocations":["9927:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"9927:6:30"},"referencedDeclaration":10576,"src":"9927:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":3607,"nodeType":"ArrayTypeName","src":"9927:8:30","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":3612,"mutability":"mutable","name":"tokenInfo","nameLocation":"9982:9:30","nodeType":"VariableDeclaration","scope":3620,"src":"9963:28:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4138_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":3610,"nodeType":"UserDefinedTypeName","pathNode":{"id":3609,"name":"TokenInfo","nameLocations":["9963:9:30"],"nodeType":"IdentifierPath","referencedDeclaration":4138,"src":"9963:9:30"},"referencedDeclaration":4138,"src":"9963:9:30","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4138_storage_ptr","typeString":"struct TokenInfo"}},"id":3611,"nodeType":"ArrayTypeName","src":"9963:11:30","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4138_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":3615,"mutability":"mutable","name":"balancesRaw","nameLocation":"10022:11:30","nodeType":"VariableDeclaration","scope":3620,"src":"10005:28:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3613,"name":"uint256","nodeType":"ElementaryTypeName","src":"10005:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3614,"nodeType":"ArrayTypeName","src":"10005:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3618,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"10064:24:30","nodeType":"VariableDeclaration","scope":3620,"src":"10047:41:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3616,"name":"uint256","nodeType":"ElementaryTypeName","src":"10047:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3617,"nodeType":"ArrayTypeName","src":"10047:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9913:185:30"},"scope":3860,"src":"9813:286:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3621,"nodeType":"StructuredDocumentation","src":"10105:312:30","text":" @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n registration order.\n @param pool Address of the pool\n @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates"},"functionSelector":"535cfd8a","id":3629,"implemented":false,"kind":"function","modifiers":[],"name":"getCurrentLiveBalances","nameLocation":"10431:22:30","nodeType":"FunctionDefinition","parameters":{"id":3624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3623,"mutability":"mutable","name":"pool","nameLocation":"10462:4:30","nodeType":"VariableDeclaration","scope":3629,"src":"10454:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3622,"name":"address","nodeType":"ElementaryTypeName","src":"10454:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10453:14:30"},"returnParameters":{"id":3628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3627,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"10508:20:30","nodeType":"VariableDeclaration","scope":3629,"src":"10491:37:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3625,"name":"uint256","nodeType":"ElementaryTypeName","src":"10491:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3626,"nodeType":"ArrayTypeName","src":"10491:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10490:39:30"},"scope":3860,"src":"10422:108:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3630,"nodeType":"StructuredDocumentation","src":"10536:301:30","text":" @notice Gets the configuration parameters of a pool.\n @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n @param pool Address of the pool\n @return poolConfig The pool configuration as a `PoolConfig` struct"},"functionSelector":"f29486a1","id":3638,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolConfig","nameLocation":"10851:13:30","nodeType":"FunctionDefinition","parameters":{"id":3633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3632,"mutability":"mutable","name":"pool","nameLocation":"10873:4:30","nodeType":"VariableDeclaration","scope":3638,"src":"10865:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3631,"name":"address","nodeType":"ElementaryTypeName","src":"10865:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10864:14:30"},"returnParameters":{"id":3637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3636,"mutability":"mutable","name":"poolConfig","nameLocation":"10920:10:30","nodeType":"VariableDeclaration","scope":3638,"src":"10902:28:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4039_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":3635,"nodeType":"UserDefinedTypeName","pathNode":{"id":3634,"name":"PoolConfig","nameLocations":["10902:10:30"],"nodeType":"IdentifierPath","referencedDeclaration":4039,"src":"10902:10:30"},"referencedDeclaration":4039,"src":"10902:10:30","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4039_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"src":"10901:30:30"},"scope":3860,"src":"10842:90:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3639,"nodeType":"StructuredDocumentation","src":"10938:283:30","text":" @notice Gets the hooks configuration parameters of a pool.\n @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n @param pool Address of the pool\n @return hooksConfig The hooks configuration as a `HooksConfig` struct"},"functionSelector":"ce8630d4","id":3647,"implemented":false,"kind":"function","modifiers":[],"name":"getHooksConfig","nameLocation":"11235:14:30","nodeType":"FunctionDefinition","parameters":{"id":3642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3641,"mutability":"mutable","name":"pool","nameLocation":"11258:4:30","nodeType":"VariableDeclaration","scope":3647,"src":"11250:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3640,"name":"address","nodeType":"ElementaryTypeName","src":"11250:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11249:14:30"},"returnParameters":{"id":3646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3645,"mutability":"mutable","name":"hooksConfig","nameLocation":"11306:11:30","nodeType":"VariableDeclaration","scope":3647,"src":"11287:30:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4085_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":3644,"nodeType":"UserDefinedTypeName","pathNode":{"id":3643,"name":"HooksConfig","nameLocations":["11287:11:30"],"nodeType":"IdentifierPath","referencedDeclaration":4085,"src":"11287:11:30"},"referencedDeclaration":4085,"src":"11287:11:30","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4085_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"}],"src":"11286:32:30"},"scope":3860,"src":"11226:93:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3648,"nodeType":"StructuredDocumentation","src":"11325:160:30","text":" @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n @param pool Address of the pool\n @return rate BPT rate"},"functionSelector":"4f037ee7","id":3655,"implemented":false,"kind":"function","modifiers":[],"name":"getBptRate","nameLocation":"11499:10:30","nodeType":"FunctionDefinition","parameters":{"id":3651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3650,"mutability":"mutable","name":"pool","nameLocation":"11518:4:30","nodeType":"VariableDeclaration","scope":3655,"src":"11510:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3649,"name":"address","nodeType":"ElementaryTypeName","src":"11510:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11509:14:30"},"returnParameters":{"id":3654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3653,"mutability":"mutable","name":"rate","nameLocation":"11555:4:30","nodeType":"VariableDeclaration","scope":3655,"src":"11547:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3652,"name":"uint256","nodeType":"ElementaryTypeName","src":"11547:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11546:14:30"},"scope":3860,"src":"11490:71:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3656,"nodeType":"StructuredDocumentation","src":"11792:168:30","text":" @notice Gets the total supply of a given ERC20 token.\n @param token The token address\n @return tokenTotalSupply Total supply of the token"},"functionSelector":"e4dc2aa4","id":3663,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"11974:11:30","nodeType":"FunctionDefinition","parameters":{"id":3659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3658,"mutability":"mutable","name":"token","nameLocation":"11994:5:30","nodeType":"VariableDeclaration","scope":3663,"src":"11986:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3657,"name":"address","nodeType":"ElementaryTypeName","src":"11986:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11985:15:30"},"returnParameters":{"id":3662,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3661,"mutability":"mutable","name":"tokenTotalSupply","nameLocation":"12032:16:30","nodeType":"VariableDeclaration","scope":3663,"src":"12024:24:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3660,"name":"uint256","nodeType":"ElementaryTypeName","src":"12024:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12023:26:30"},"scope":3860,"src":"11965:85:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3664,"nodeType":"StructuredDocumentation","src":"12056:225:30","text":" @notice Gets the balance of an account for a given ERC20 token.\n @param token Address of the token\n @param account Address of the account\n @return tokenBalance Token balance of the account"},"functionSelector":"f7888aec","id":3673,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"12295:9:30","nodeType":"FunctionDefinition","parameters":{"id":3669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3666,"mutability":"mutable","name":"token","nameLocation":"12313:5:30","nodeType":"VariableDeclaration","scope":3673,"src":"12305:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3665,"name":"address","nodeType":"ElementaryTypeName","src":"12305:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3668,"mutability":"mutable","name":"account","nameLocation":"12328:7:30","nodeType":"VariableDeclaration","scope":3673,"src":"12320:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3667,"name":"address","nodeType":"ElementaryTypeName","src":"12320:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12304:32:30"},"returnParameters":{"id":3672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3671,"mutability":"mutable","name":"tokenBalance","nameLocation":"12368:12:30","nodeType":"VariableDeclaration","scope":3673,"src":"12360:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3670,"name":"uint256","nodeType":"ElementaryTypeName","src":"12360:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12359:22:30"},"scope":3860,"src":"12286:96:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3674,"nodeType":"StructuredDocumentation","src":"12388:299:30","text":" @notice Gets the allowance of a spender for a given ERC20 token and owner.\n @param token Address of the token\n @param owner Address of the owner\n @param spender Address of the spender\n @return tokenAllowance Amount of tokens the spender is allowed to spend"},"functionSelector":"927da105","id":3685,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"12701:9:30","nodeType":"FunctionDefinition","parameters":{"id":3681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3676,"mutability":"mutable","name":"token","nameLocation":"12719:5:30","nodeType":"VariableDeclaration","scope":3685,"src":"12711:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3675,"name":"address","nodeType":"ElementaryTypeName","src":"12711:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3678,"mutability":"mutable","name":"owner","nameLocation":"12734:5:30","nodeType":"VariableDeclaration","scope":3685,"src":"12726:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3677,"name":"address","nodeType":"ElementaryTypeName","src":"12726:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3680,"mutability":"mutable","name":"spender","nameLocation":"12749:7:30","nodeType":"VariableDeclaration","scope":3685,"src":"12741:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3679,"name":"address","nodeType":"ElementaryTypeName","src":"12741:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12710:47:30"},"returnParameters":{"id":3684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3683,"mutability":"mutable","name":"tokenAllowance","nameLocation":"12789:14:30","nodeType":"VariableDeclaration","scope":3685,"src":"12781:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3682,"name":"uint256","nodeType":"ElementaryTypeName","src":"12781:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12780:24:30"},"scope":3860,"src":"12692:113:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3686,"nodeType":"StructuredDocumentation","src":"12811:475:30","text":" @notice Approves a spender to spend pool tokens on behalf of sender.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param spender Address of the spender\n @param amount Amount of tokens to approve\n @return success True if successful, false otherwise"},"functionSelector":"e1f21c67","id":3697,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"13300:7:30","nodeType":"FunctionDefinition","parameters":{"id":3693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3688,"mutability":"mutable","name":"owner","nameLocation":"13316:5:30","nodeType":"VariableDeclaration","scope":3697,"src":"13308:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3687,"name":"address","nodeType":"ElementaryTypeName","src":"13308:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3690,"mutability":"mutable","name":"spender","nameLocation":"13331:7:30","nodeType":"VariableDeclaration","scope":3697,"src":"13323:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3689,"name":"address","nodeType":"ElementaryTypeName","src":"13323:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3692,"mutability":"mutable","name":"amount","nameLocation":"13348:6:30","nodeType":"VariableDeclaration","scope":3697,"src":"13340:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3691,"name":"uint256","nodeType":"ElementaryTypeName","src":"13340:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13307:48:30"},"returnParameters":{"id":3696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3695,"mutability":"mutable","name":"success","nameLocation":"13379:7:30","nodeType":"VariableDeclaration","scope":3697,"src":"13374:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3694,"name":"bool","nodeType":"ElementaryTypeName","src":"13374:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13373:14:30"},"scope":3860,"src":"13291:97:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3698,"nodeType":"StructuredDocumentation","src":"13615:251:30","text":" @notice Indicates whether a pool is paused.\n @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n @param pool The pool to be checked\n @return poolPaused True if the pool is paused"},"functionSelector":"6c9bc732","id":3705,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolPaused","nameLocation":"13880:12:30","nodeType":"FunctionDefinition","parameters":{"id":3701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3700,"mutability":"mutable","name":"pool","nameLocation":"13901:4:30","nodeType":"VariableDeclaration","scope":3705,"src":"13893:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3699,"name":"address","nodeType":"ElementaryTypeName","src":"13893:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13892:14:30"},"returnParameters":{"id":3704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3703,"mutability":"mutable","name":"poolPaused","nameLocation":"13935:10:30","nodeType":"VariableDeclaration","scope":3705,"src":"13930:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3702,"name":"bool","nodeType":"ElementaryTypeName","src":"13930:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13929:17:30"},"scope":3860,"src":"13871:76:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3706,"nodeType":"StructuredDocumentation","src":"13953:648:30","text":" @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n the buffer period. Balancer timestamps are 32 bits.\n @param pool The pool whose data is requested\n @return poolPaused True if the Pool is paused\n @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n @return pauseManager The pause manager, or the zero address"},"functionSelector":"15e32046","id":3719,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolPausedState","nameLocation":"14615:18:30","nodeType":"FunctionDefinition","parameters":{"id":3709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3708,"mutability":"mutable","name":"pool","nameLocation":"14651:4:30","nodeType":"VariableDeclaration","scope":3719,"src":"14643:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3707,"name":"address","nodeType":"ElementaryTypeName","src":"14643:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14633:28:30"},"returnParameters":{"id":3718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3711,"mutability":"mutable","name":"poolPaused","nameLocation":"14714:10:30","nodeType":"VariableDeclaration","scope":3719,"src":"14709:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3710,"name":"bool","nodeType":"ElementaryTypeName","src":"14709:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3713,"mutability":"mutable","name":"poolPauseWindowEndTime","nameLocation":"14733:22:30","nodeType":"VariableDeclaration","scope":3719,"src":"14726:29:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3712,"name":"uint32","nodeType":"ElementaryTypeName","src":"14726:6:30","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":3715,"mutability":"mutable","name":"poolBufferPeriodEndTime","nameLocation":"14764:23:30","nodeType":"VariableDeclaration","scope":3719,"src":"14757:30:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3714,"name":"uint32","nodeType":"ElementaryTypeName","src":"14757:6:30","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":3717,"mutability":"mutable","name":"pauseManager","nameLocation":"14797:12:30","nodeType":"VariableDeclaration","scope":3719,"src":"14789:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3716,"name":"address","nodeType":"ElementaryTypeName","src":"14789:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14708:102:30"},"scope":3860,"src":"14606:205:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3720,"nodeType":"StructuredDocumentation","src":"15039:332:30","text":" @notice Checks if the wrapped token has an initialized buffer in the Vault.\n @dev An initialized buffer should have an asset registered in the Vault.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return isBufferInitialized True if the ERC4626 buffer is initialized"},"functionSelector":"6844846b","id":3728,"implemented":false,"kind":"function","modifiers":[],"name":"isERC4626BufferInitialized","nameLocation":"15385:26:30","nodeType":"FunctionDefinition","parameters":{"id":3724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3723,"mutability":"mutable","name":"wrappedToken","nameLocation":"15421:12:30","nodeType":"VariableDeclaration","scope":3728,"src":"15412:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3722,"nodeType":"UserDefinedTypeName","pathNode":{"id":3721,"name":"IERC4626","nameLocations":["15412:8:30"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"15412:8:30"},"referencedDeclaration":9846,"src":"15412:8:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15411:23:30"},"returnParameters":{"id":3727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3726,"mutability":"mutable","name":"isBufferInitialized","nameLocation":"15463:19:30","nodeType":"VariableDeclaration","scope":3728,"src":"15458:24:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3725,"name":"bool","nodeType":"ElementaryTypeName","src":"15458:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15457:26:30"},"scope":3860,"src":"15376:108:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3729,"nodeType":"StructuredDocumentation","src":"15490:477:30","text":" @notice Gets the registered asset for a given buffer.\n @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n the Vault on initialization.\n @param wrappedToken The wrapped token specifying the buffer\n @return asset The underlying asset of the wrapped token"},"functionSelector":"4afbaf5a","id":3737,"implemented":false,"kind":"function","modifiers":[],"name":"getERC4626BufferAsset","nameLocation":"15981:21:30","nodeType":"FunctionDefinition","parameters":{"id":3733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3732,"mutability":"mutable","name":"wrappedToken","nameLocation":"16012:12:30","nodeType":"VariableDeclaration","scope":3737,"src":"16003:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":3731,"nodeType":"UserDefinedTypeName","pathNode":{"id":3730,"name":"IERC4626","nameLocations":["16003:8:30"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"16003:8:30"},"referencedDeclaration":9846,"src":"16003:8:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16002:23:30"},"returnParameters":{"id":3736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3735,"mutability":"mutable","name":"asset","nameLocation":"16057:5:30","nodeType":"VariableDeclaration","scope":3737,"src":"16049:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3734,"name":"address","nodeType":"ElementaryTypeName","src":"16049:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16048:15:30"},"scope":3860,"src":"15972:92:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3738,"nodeType":"StructuredDocumentation","src":"16288:379:30","text":" @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return swapFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"85e0b999","id":3748,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateSwapFeeAmount","nameLocation":"16681:25:30","nodeType":"FunctionDefinition","parameters":{"id":3744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3740,"mutability":"mutable","name":"pool","nameLocation":"16715:4:30","nodeType":"VariableDeclaration","scope":3748,"src":"16707:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3739,"name":"address","nodeType":"ElementaryTypeName","src":"16707:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3743,"mutability":"mutable","name":"token","nameLocation":"16728:5:30","nodeType":"VariableDeclaration","scope":3748,"src":"16721:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3742,"nodeType":"UserDefinedTypeName","pathNode":{"id":3741,"name":"IERC20","nameLocations":["16721:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"16721:6:30"},"referencedDeclaration":10576,"src":"16721:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"16706:28:30"},"returnParameters":{"id":3747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3746,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"16766:13:30","nodeType":"VariableDeclaration","scope":3748,"src":"16758:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3745,"name":"uint256","nodeType":"ElementaryTypeName","src":"16758:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16757:23:30"},"scope":3860,"src":"16672:109:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3749,"nodeType":"StructuredDocumentation","src":"16787:381:30","text":" @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return yieldFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"00fdfa13","id":3759,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateYieldFeeAmount","nameLocation":"17182:26:30","nodeType":"FunctionDefinition","parameters":{"id":3755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3751,"mutability":"mutable","name":"pool","nameLocation":"17217:4:30","nodeType":"VariableDeclaration","scope":3759,"src":"17209:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3750,"name":"address","nodeType":"ElementaryTypeName","src":"17209:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3754,"mutability":"mutable","name":"token","nameLocation":"17230:5:30","nodeType":"VariableDeclaration","scope":3759,"src":"17223:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3753,"nodeType":"UserDefinedTypeName","pathNode":{"id":3752,"name":"IERC20","nameLocations":["17223:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"17223:6:30"},"referencedDeclaration":10576,"src":"17223:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"17208:28:30"},"returnParameters":{"id":3758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3757,"mutability":"mutable","name":"yieldFeeAmount","nameLocation":"17268:14:30","nodeType":"VariableDeclaration","scope":3759,"src":"17260:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3756,"name":"uint256","nodeType":"ElementaryTypeName","src":"17260:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17259:24:30"},"scope":3860,"src":"17173:111:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3760,"nodeType":"StructuredDocumentation","src":"17290:271:30","text":" @notice Fetches the static swap fee percentage for a given pool.\n @param pool The address of the pool whose static swap fee percentage is being queried\n @return swapFeePercentage The current static swap fee percentage for the specified pool"},"functionSelector":"b45090f9","id":3767,"implemented":false,"kind":"function","modifiers":[],"name":"getStaticSwapFeePercentage","nameLocation":"17575:26:30","nodeType":"FunctionDefinition","parameters":{"id":3763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3762,"mutability":"mutable","name":"pool","nameLocation":"17610:4:30","nodeType":"VariableDeclaration","scope":3767,"src":"17602:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3761,"name":"address","nodeType":"ElementaryTypeName","src":"17602:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17601:14:30"},"returnParameters":{"id":3766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3765,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"17647:17:30","nodeType":"VariableDeclaration","scope":3767,"src":"17639:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3764,"name":"uint256","nodeType":"ElementaryTypeName","src":"17639:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17638:27:30"},"scope":3860,"src":"17566:100:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3768,"nodeType":"StructuredDocumentation","src":"17672:286:30","text":" @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n @param pool The address of the pool whose roles are being queried\n @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)"},"functionSelector":"e9ddeb26","id":3776,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolRoleAccounts","nameLocation":"17972:19:30","nodeType":"FunctionDefinition","parameters":{"id":3771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3770,"mutability":"mutable","name":"pool","nameLocation":"18000:4:30","nodeType":"VariableDeclaration","scope":3776,"src":"17992:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3769,"name":"address","nodeType":"ElementaryTypeName","src":"17992:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17991:14:30"},"returnParameters":{"id":3775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3774,"mutability":"mutable","name":"roleAccounts","nameLocation":"18053:12:30","nodeType":"VariableDeclaration","scope":3776,"src":"18029:36:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":3773,"nodeType":"UserDefinedTypeName","pathNode":{"id":3772,"name":"PoolRoleAccounts","nameLocations":["18029:16:30"],"nodeType":"IdentifierPath","referencedDeclaration":4111,"src":"18029:16:30"},"referencedDeclaration":4111,"src":"18029:16:30","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"src":"18028:38:30"},"scope":3860,"src":"17963:104:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3777,"nodeType":"StructuredDocumentation","src":"18073:363:30","text":" @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n @dev Reverts if the hook doesn't return the success flag set to `true`.\n @param pool The pool\n @param swapParams The swap parameters used to compute the fee\n @return dynamicSwapFeePercentage The dynamic swap fee percentage"},"functionSelector":"4d472bdd","id":3787,"implemented":false,"kind":"function","modifiers":[],"name":"computeDynamicSwapFeePercentage","nameLocation":"18450:31:30","nodeType":"FunctionDefinition","parameters":{"id":3783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3779,"mutability":"mutable","name":"pool","nameLocation":"18499:4:30","nodeType":"VariableDeclaration","scope":3787,"src":"18491:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3778,"name":"address","nodeType":"ElementaryTypeName","src":"18491:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3782,"mutability":"mutable","name":"swapParams","nameLocation":"18535:10:30","nodeType":"VariableDeclaration","scope":3787,"src":"18513:32:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4206_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":3781,"nodeType":"UserDefinedTypeName","pathNode":{"id":3780,"name":"PoolSwapParams","nameLocations":["18513:14:30"],"nodeType":"IdentifierPath","referencedDeclaration":4206,"src":"18513:14:30"},"referencedDeclaration":4206,"src":"18513:14:30","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4206_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"18481:70:30"},"returnParameters":{"id":3786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3785,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"18583:24:30","nodeType":"VariableDeclaration","scope":3787,"src":"18575:32:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3784,"name":"uint256","nodeType":"ElementaryTypeName","src":"18575:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18574:34:30"},"scope":3860,"src":"18441:168:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3788,"nodeType":"StructuredDocumentation","src":"18615:145:30","text":" @notice Returns the Protocol Fee Controller address.\n @return protocolFeeController Address of the ProtocolFeeController"},"functionSelector":"85f2dbd4","id":3794,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"18774:24:30","nodeType":"FunctionDefinition","parameters":{"id":3789,"nodeType":"ParameterList","parameters":[],"src":"18798:2:30"},"returnParameters":{"id":3793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3792,"mutability":"mutable","name":"protocolFeeController","nameLocation":"18847:21:30","nodeType":"VariableDeclaration","scope":3794,"src":"18824:44:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":3791,"nodeType":"UserDefinedTypeName","pathNode":{"id":3790,"name":"IProtocolFeeController","nameLocations":["18824:22:30"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"18824:22:30"},"referencedDeclaration":1955,"src":"18824:22:30","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"18823:46:30"},"scope":3860,"src":"18765:105:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3795,"nodeType":"StructuredDocumentation","src":"19098:296:30","text":" @notice Checks whether a pool is in Recovery Mode.\n @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n @param pool Address of the pool to check\n @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise"},"functionSelector":"be7d628a","id":3802,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInRecoveryMode","nameLocation":"19408:20:30","nodeType":"FunctionDefinition","parameters":{"id":3798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3797,"mutability":"mutable","name":"pool","nameLocation":"19437:4:30","nodeType":"VariableDeclaration","scope":3802,"src":"19429:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3796,"name":"address","nodeType":"ElementaryTypeName","src":"19429:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19428:14:30"},"returnParameters":{"id":3801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3800,"mutability":"mutable","name":"inRecoveryMode","nameLocation":"19471:14:30","nodeType":"VariableDeclaration","scope":3802,"src":"19466:19:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3799,"name":"bool","nodeType":"ElementaryTypeName","src":"19466:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19465:21:30"},"scope":3860,"src":"19399:88:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3803,"nodeType":"StructuredDocumentation","src":"19493:679:30","text":" @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n The request is implemented by the Vault without any interaction with the pool, ensuring that\n it works the same for all pools, and cannot be disabled by a new pool type.\n @param pool Address of the pool\n @param from Address of user to burn pool tokens from\n @param exactBptAmountIn Input pool token amount\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order"},"functionSelector":"a07d6040","id":3818,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityRecovery","nameLocation":"20186:23:30","nodeType":"FunctionDefinition","parameters":{"id":3813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3805,"mutability":"mutable","name":"pool","nameLocation":"20227:4:30","nodeType":"VariableDeclaration","scope":3818,"src":"20219:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3804,"name":"address","nodeType":"ElementaryTypeName","src":"20219:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3807,"mutability":"mutable","name":"from","nameLocation":"20249:4:30","nodeType":"VariableDeclaration","scope":3818,"src":"20241:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3806,"name":"address","nodeType":"ElementaryTypeName","src":"20241:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3809,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"20271:16:30","nodeType":"VariableDeclaration","scope":3818,"src":"20263:24:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3808,"name":"uint256","nodeType":"ElementaryTypeName","src":"20263:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3812,"mutability":"mutable","name":"minAmountsOut","nameLocation":"20314:13:30","nodeType":"VariableDeclaration","scope":3818,"src":"20297:30:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3810,"name":"uint256","nodeType":"ElementaryTypeName","src":"20297:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3811,"nodeType":"ArrayTypeName","src":"20297:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20209:124:30"},"returnParameters":{"id":3817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3816,"mutability":"mutable","name":"amountsOut","nameLocation":"20369:10:30","nodeType":"VariableDeclaration","scope":3818,"src":"20352:27:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3814,"name":"uint256","nodeType":"ElementaryTypeName","src":"20352:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3815,"nodeType":"ArrayTypeName","src":"20352:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20351:29:30"},"scope":3860,"src":"20177:204:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3819,"nodeType":"StructuredDocumentation","src":"20602:699:30","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"edfa3568","id":3826,"implemented":false,"kind":"function","modifiers":[],"name":"quote","nameLocation":"21315:5:30","nodeType":"FunctionDefinition","parameters":{"id":3822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3821,"mutability":"mutable","name":"data","nameLocation":"21336:4:30","nodeType":"VariableDeclaration","scope":3826,"src":"21321:19:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3820,"name":"bytes","nodeType":"ElementaryTypeName","src":"21321:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21320:21:30"},"returnParameters":{"id":3825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3824,"mutability":"mutable","name":"result","nameLocation":"21373:6:30","nodeType":"VariableDeclaration","scope":3826,"src":"21360:19:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3823,"name":"bytes","nodeType":"ElementaryTypeName","src":"21360:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21359:21:30"},"scope":3860,"src":"21306:75:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3827,"nodeType":"StructuredDocumentation","src":"21387:731:30","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n This call always reverts, returning the result in the revert reason.\n @param data Contains function signature and args to be passed to the msg.sender"},"functionSelector":"757d64b3","id":3832,"implemented":false,"kind":"function","modifiers":[],"name":"quoteAndRevert","nameLocation":"22132:14:30","nodeType":"FunctionDefinition","parameters":{"id":3830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3829,"mutability":"mutable","name":"data","nameLocation":"22162:4:30","nodeType":"VariableDeclaration","scope":3832,"src":"22147:19:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3828,"name":"bytes","nodeType":"ElementaryTypeName","src":"22147:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22146:21:30"},"returnParameters":{"id":3831,"nodeType":"ParameterList","parameters":[],"src":"22176:0:30"},"scope":3860,"src":"22123:54:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3833,"nodeType":"StructuredDocumentation","src":"22183:239:30","text":" @notice Returns true if queries are disabled on the Vault.\n @dev If true, queries might either be disabled temporarily or permanently.\n @return queryDisabled True if query functionality is reversibly disabled"},"functionSelector":"b4aef0ab","id":3838,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabled","nameLocation":"22436:15:30","nodeType":"FunctionDefinition","parameters":{"id":3834,"nodeType":"ParameterList","parameters":[],"src":"22451:2:30"},"returnParameters":{"id":3837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3836,"mutability":"mutable","name":"queryDisabled","nameLocation":"22482:13:30","nodeType":"VariableDeclaration","scope":3838,"src":"22477:18:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3835,"name":"bool","nodeType":"ElementaryTypeName","src":"22477:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22476:20:30"},"scope":3860,"src":"22427:70:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3839,"nodeType":"StructuredDocumentation","src":"22503:302:30","text":" @notice Returns true if queries are disabled permanently; false if they are enabled.\n @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n @return queryDisabledPermanently True if query functionality is permanently disabled"},"functionSelector":"13ef8a5d","id":3844,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabledPermanently","nameLocation":"22819:26:30","nodeType":"FunctionDefinition","parameters":{"id":3840,"nodeType":"ParameterList","parameters":[],"src":"22845:2:30"},"returnParameters":{"id":3843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3842,"mutability":"mutable","name":"queryDisabledPermanently","nameLocation":"22876:24:30","nodeType":"VariableDeclaration","scope":3844,"src":"22871:29:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3841,"name":"bool","nodeType":"ElementaryTypeName","src":"22871:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22870:31:30"},"scope":3860,"src":"22810:92:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3845,"nodeType":"StructuredDocumentation","src":"22908:162:30","text":" @notice Pools can use this event to emit event data from the Vault.\n @param eventKey Event key\n @param eventData Encoded event data"},"functionSelector":"c8088247","id":3852,"implemented":false,"kind":"function","modifiers":[],"name":"emitAuxiliaryEvent","nameLocation":"23084:18:30","nodeType":"FunctionDefinition","parameters":{"id":3850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3847,"mutability":"mutable","name":"eventKey","nameLocation":"23111:8:30","nodeType":"VariableDeclaration","scope":3852,"src":"23103:16:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3846,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23103:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3849,"mutability":"mutable","name":"eventData","nameLocation":"23136:9:30","nodeType":"VariableDeclaration","scope":3852,"src":"23121:24:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3848,"name":"bytes","nodeType":"ElementaryTypeName","src":"23121:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"23102:44:30"},"returnParameters":{"id":3851,"nodeType":"ParameterList","parameters":[],"src":"23155:0:30"},"scope":3860,"src":"23075:81:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3853,"nodeType":"StructuredDocumentation","src":"23380:284:30","text":" @notice Returns the Authorizer address.\n @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n and can be changed through a permissioned call.\n @return authorizer Address of the authorizer contract"},"functionSelector":"aaabadc5","id":3859,"implemented":false,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"23678:13:30","nodeType":"FunctionDefinition","parameters":{"id":3854,"nodeType":"ParameterList","parameters":[],"src":"23691:2:30"},"returnParameters":{"id":3858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3857,"mutability":"mutable","name":"authorizer","nameLocation":"23729:10:30","nodeType":"VariableDeclaration","scope":3859,"src":"23717:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"},"typeName":{"id":3856,"nodeType":"UserDefinedTypeName","pathNode":{"id":3855,"name":"IAuthorizer","nameLocations":["23717:11:30"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"23717:11:30"},"referencedDeclaration":1341,"src":"23717:11:30","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23716:24:30"},"scope":3860,"src":"23669:72:30","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3861,"src":"767:22976:30","usedErrors":[],"usedEvents":[]}],"src":"46:23698:30"},"id":30},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","exportedSymbols":{"AddLiquidityKind":[4241],"AddLiquidityParams":[4257],"AfterSwapParams":[4235],"BufferWrapOrUnwrapParams":[4296],"FEE_BITLENGTH":[4299],"FEE_SCALING_FACTOR":[4302],"HookFlags":[4061],"HooksConfig":[4085],"IERC20":[10576],"IERC4626":[9846],"IRateProvider":[24],"IVaultMain":[3996],"LiquidityManagement":[4014],"MAX_FEE_PERCENTAGE":[4305],"PoolConfig":[4039],"PoolConfigBits":[4016],"PoolData":[4163],"PoolRoleAccounts":[4111],"PoolSwapParams":[4206],"RemoveLiquidityKind":[4262],"RemoveLiquidityParams":[4278],"Rounding":[4166],"SwapKind":[4169],"SwapState":[4095],"TokenConfig":[4128],"TokenInfo":[4138],"TokenType":[4115],"VaultState":[4103],"VaultSwapParams":[4188],"WrappingDirection":[4281]},"id":3997,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3862,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:31"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3864,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3997,"sourceUnit":10577,"src":"72:72:31","symbolAliases":[{"foreign":{"id":3863,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:31","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":3865,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3997,"sourceUnit":4306,"src":"146:26:31","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultMain","contractDependencies":[],"contractKind":"interface","documentation":{"id":3866,"nodeType":"StructuredDocumentation","src":"174:232:31","text":" @notice Interface for functions defined on the main Vault contract.\n @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n for technical or performance reasons."},"fullyImplemented":false,"id":3996,"linearizedBaseContracts":[3996],"name":"IVaultMain","nameLocation":"417:10:31","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3867,"nodeType":"StructuredDocumentation","src":"656:431:31","text":" @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n meaning all balances for the caller have to be settled at the end.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"48c89491","id":3874,"implemented":false,"kind":"function","modifiers":[],"name":"unlock","nameLocation":"1101:6:31","nodeType":"FunctionDefinition","parameters":{"id":3870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3869,"mutability":"mutable","name":"data","nameLocation":"1123:4:31","nodeType":"VariableDeclaration","scope":3874,"src":"1108:19:31","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3868,"name":"bytes","nodeType":"ElementaryTypeName","src":"1108:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1107:21:31"},"returnParameters":{"id":3873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3872,"mutability":"mutable","name":"result","nameLocation":"1160:6:31","nodeType":"VariableDeclaration","scope":3874,"src":"1147:19:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3871,"name":"bytes","nodeType":"ElementaryTypeName","src":"1147:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1146:21:31"},"scope":3996,"src":"1092:76:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3875,"nodeType":"StructuredDocumentation","src":"1174:1291:31","text":" @notice Settles deltas for a token; must be successful for the current lock to be released.\n @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n excess in the Vault balance.\n If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n not affect settlement.\n The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n difference equals current balance of the token minus existing reserves of the token when the function is called.\n @param token Address of the token\n @param amountHint Amount paid as reported by the caller\n @return credit Credit received in return of the payment"},"functionSelector":"15afd409","id":3885,"implemented":false,"kind":"function","modifiers":[],"name":"settle","nameLocation":"2479:6:31","nodeType":"FunctionDefinition","parameters":{"id":3881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3878,"mutability":"mutable","name":"token","nameLocation":"2493:5:31","nodeType":"VariableDeclaration","scope":3885,"src":"2486:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3877,"nodeType":"UserDefinedTypeName","pathNode":{"id":3876,"name":"IERC20","nameLocations":["2486:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2486:6:31"},"referencedDeclaration":10576,"src":"2486:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3880,"mutability":"mutable","name":"amountHint","nameLocation":"2508:10:31","nodeType":"VariableDeclaration","scope":3885,"src":"2500:18:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3879,"name":"uint256","nodeType":"ElementaryTypeName","src":"2500:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2485:34:31"},"returnParameters":{"id":3884,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3883,"mutability":"mutable","name":"credit","nameLocation":"2546:6:31","nodeType":"VariableDeclaration","scope":3885,"src":"2538:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3882,"name":"uint256","nodeType":"ElementaryTypeName","src":"2538:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2537:16:31"},"scope":3996,"src":"2470:84:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3886,"nodeType":"StructuredDocumentation","src":"2560:315:31","text":" @notice Sends tokens to a recipient.\n @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n debts.\n @param token Address of the token\n @param to Recipient address\n @param amount Amount of tokens to send"},"functionSelector":"ae639329","id":3896,"implemented":false,"kind":"function","modifiers":[],"name":"sendTo","nameLocation":"2889:6:31","nodeType":"FunctionDefinition","parameters":{"id":3894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3889,"mutability":"mutable","name":"token","nameLocation":"2903:5:31","nodeType":"VariableDeclaration","scope":3896,"src":"2896:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3888,"nodeType":"UserDefinedTypeName","pathNode":{"id":3887,"name":"IERC20","nameLocations":["2896:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2896:6:31"},"referencedDeclaration":10576,"src":"2896:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3891,"mutability":"mutable","name":"to","nameLocation":"2918:2:31","nodeType":"VariableDeclaration","scope":3896,"src":"2910:10:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3890,"name":"address","nodeType":"ElementaryTypeName","src":"2910:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3893,"mutability":"mutable","name":"amount","nameLocation":"2930:6:31","nodeType":"VariableDeclaration","scope":3896,"src":"2922:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3892,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2895:42:31"},"returnParameters":{"id":3895,"nodeType":"ParameterList","parameters":[],"src":"2946:0:31"},"scope":3996,"src":"2880:67:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3897,"nodeType":"StructuredDocumentation","src":"3161:412:31","text":" @notice Swaps tokens based on provided parameters.\n @dev All parameters are given in raw token decimal encoding.\n @param vaultSwapParams Parameters for the swap (see above for struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"2bfb780c","id":3909,"implemented":false,"kind":"function","modifiers":[],"name":"swap","nameLocation":"3587:4:31","nodeType":"FunctionDefinition","parameters":{"id":3901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3900,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"3624:15:31","nodeType":"VariableDeclaration","scope":3909,"src":"3601:38:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4188_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":3899,"nodeType":"UserDefinedTypeName","pathNode":{"id":3898,"name":"VaultSwapParams","nameLocations":["3601:15:31"],"nodeType":"IdentifierPath","referencedDeclaration":4188,"src":"3601:15:31"},"referencedDeclaration":4188,"src":"3601:15:31","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4188_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"}],"src":"3591:54:31"},"returnParameters":{"id":3908,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3903,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"3672:19:31","nodeType":"VariableDeclaration","scope":3909,"src":"3664:27:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3902,"name":"uint256","nodeType":"ElementaryTypeName","src":"3664:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3905,"mutability":"mutable","name":"amountInRaw","nameLocation":"3701:11:31","nodeType":"VariableDeclaration","scope":3909,"src":"3693:19:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3904,"name":"uint256","nodeType":"ElementaryTypeName","src":"3693:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3907,"mutability":"mutable","name":"amountOutRaw","nameLocation":"3722:12:31","nodeType":"VariableDeclaration","scope":3909,"src":"3714:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3906,"name":"uint256","nodeType":"ElementaryTypeName","src":"3714:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3663:72:31"},"scope":3996,"src":"3578:158:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3910,"nodeType":"StructuredDocumentation","src":"3954:523:31","text":" @notice Adds liquidity to a pool.\n @dev Caution should be exercised when adding liquidity because the Vault has the capability\n to transfer tokens from any user, given that it holds all allowances.\n @param params Parameters for the add liquidity (see above for struct definition)\n @return amountsIn Actual amounts of input tokens\n @return bptAmountOut Output pool token amount\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"4af29ec4","id":3923,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidity","nameLocation":"4491:12:31","nodeType":"FunctionDefinition","parameters":{"id":3914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3913,"mutability":"mutable","name":"params","nameLocation":"4539:6:31","nodeType":"VariableDeclaration","scope":3923,"src":"4513:32:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4257_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":3912,"nodeType":"UserDefinedTypeName","pathNode":{"id":3911,"name":"AddLiquidityParams","nameLocations":["4513:18:31"],"nodeType":"IdentifierPath","referencedDeclaration":4257,"src":"4513:18:31"},"referencedDeclaration":4257,"src":"4513:18:31","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4257_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"}],"src":"4503:48:31"},"returnParameters":{"id":3922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3917,"mutability":"mutable","name":"amountsIn","nameLocation":"4587:9:31","nodeType":"VariableDeclaration","scope":3923,"src":"4570:26:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3915,"name":"uint256","nodeType":"ElementaryTypeName","src":"4570:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3916,"nodeType":"ArrayTypeName","src":"4570:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3919,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4606:12:31","nodeType":"VariableDeclaration","scope":3923,"src":"4598:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3918,"name":"uint256","nodeType":"ElementaryTypeName","src":"4598:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3921,"mutability":"mutable","name":"returnData","nameLocation":"4633:10:31","nodeType":"VariableDeclaration","scope":3923,"src":"4620:23:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3920,"name":"bytes","nodeType":"ElementaryTypeName","src":"4620:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4569:75:31"},"scope":3996,"src":"4482:163:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3924,"nodeType":"StructuredDocumentation","src":"4864:644:31","text":" @notice Removes liquidity from a pool.\n @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n Untrusted routers require prior approval from the user. This is the only function allowed to call\n _queryModeBalanceIncrease (and only in a query context).\n @param params Parameters for the remove liquidity (see above for struct definition)\n @return bptAmountIn Actual amount of BPT burned\n @return amountsOut Actual amounts of output tokens\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"21457897","id":3937,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidity","nameLocation":"5522:15:31","nodeType":"FunctionDefinition","parameters":{"id":3928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3927,"mutability":"mutable","name":"params","nameLocation":"5576:6:31","nodeType":"VariableDeclaration","scope":3937,"src":"5547:35:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4278_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":3926,"nodeType":"UserDefinedTypeName","pathNode":{"id":3925,"name":"RemoveLiquidityParams","nameLocations":["5547:21:31"],"nodeType":"IdentifierPath","referencedDeclaration":4278,"src":"5547:21:31"},"referencedDeclaration":4278,"src":"5547:21:31","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4278_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"}],"src":"5537:51:31"},"returnParameters":{"id":3936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3930,"mutability":"mutable","name":"bptAmountIn","nameLocation":"5615:11:31","nodeType":"VariableDeclaration","scope":3937,"src":"5607:19:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3929,"name":"uint256","nodeType":"ElementaryTypeName","src":"5607:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3933,"mutability":"mutable","name":"amountsOut","nameLocation":"5645:10:31","nodeType":"VariableDeclaration","scope":3937,"src":"5628:27:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3931,"name":"uint256","nodeType":"ElementaryTypeName","src":"5628:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3932,"nodeType":"ArrayTypeName","src":"5628:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3935,"mutability":"mutable","name":"returnData","nameLocation":"5670:10:31","nodeType":"VariableDeclaration","scope":3937,"src":"5657:23:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3934,"name":"bytes","nodeType":"ElementaryTypeName","src":"5657:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5606:75:31"},"scope":3996,"src":"5513:169:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3938,"nodeType":"StructuredDocumentation","src":"5912:385:31","text":" @notice Gets the index of a token in a given pool.\n @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n @param pool Address of the pool\n @param token Address of the token\n @return tokenCount Number of tokens in the pool\n @return index Index corresponding to the given token in the pool's token list"},"functionSelector":"c9c1661b","id":3950,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenCountAndIndexOfToken","nameLocation":"6311:32:31","nodeType":"FunctionDefinition","parameters":{"id":3944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3940,"mutability":"mutable","name":"pool","nameLocation":"6361:4:31","nodeType":"VariableDeclaration","scope":3950,"src":"6353:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3939,"name":"address","nodeType":"ElementaryTypeName","src":"6353:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3943,"mutability":"mutable","name":"token","nameLocation":"6382:5:31","nodeType":"VariableDeclaration","scope":3950,"src":"6375:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":3942,"nodeType":"UserDefinedTypeName","pathNode":{"id":3941,"name":"IERC20","nameLocations":["6375:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6375:6:31"},"referencedDeclaration":10576,"src":"6375:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6343:50:31"},"returnParameters":{"id":3949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3946,"mutability":"mutable","name":"tokenCount","nameLocation":"6425:10:31","nodeType":"VariableDeclaration","scope":3950,"src":"6417:18:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3945,"name":"uint256","nodeType":"ElementaryTypeName","src":"6417:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3948,"mutability":"mutable","name":"index","nameLocation":"6445:5:31","nodeType":"VariableDeclaration","scope":3950,"src":"6437:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3947,"name":"uint256","nodeType":"ElementaryTypeName","src":"6437:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6416:35:31"},"scope":3996,"src":"6302:150:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3951,"nodeType":"StructuredDocumentation","src":"6683:460:31","text":" @notice Transfers pool token from owner to a recipient.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"beabacc8","id":3962,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"7157:8:31","nodeType":"FunctionDefinition","parameters":{"id":3958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3953,"mutability":"mutable","name":"owner","nameLocation":"7174:5:31","nodeType":"VariableDeclaration","scope":3962,"src":"7166:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3952,"name":"address","nodeType":"ElementaryTypeName","src":"7166:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3955,"mutability":"mutable","name":"to","nameLocation":"7189:2:31","nodeType":"VariableDeclaration","scope":3962,"src":"7181:10:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3954,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3957,"mutability":"mutable","name":"amount","nameLocation":"7201:6:31","nodeType":"VariableDeclaration","scope":3962,"src":"7193:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3956,"name":"uint256","nodeType":"ElementaryTypeName","src":"7193:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7165:43:31"},"returnParameters":{"id":3961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3960,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3962,"src":"7227:4:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3959,"name":"bool","nodeType":"ElementaryTypeName","src":"7227:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7226:6:31"},"scope":3996,"src":"7148:85:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3963,"nodeType":"StructuredDocumentation","src":"7239:544:31","text":" @notice Transfers pool token from a sender to a recipient using an allowance.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param spender Address allowed to perform the transfer\n @param from Address of the sender\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"15dacbea","id":3976,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"7797:12:31","nodeType":"FunctionDefinition","parameters":{"id":3972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3965,"mutability":"mutable","name":"spender","nameLocation":"7818:7:31","nodeType":"VariableDeclaration","scope":3976,"src":"7810:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3964,"name":"address","nodeType":"ElementaryTypeName","src":"7810:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3967,"mutability":"mutable","name":"from","nameLocation":"7835:4:31","nodeType":"VariableDeclaration","scope":3976,"src":"7827:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3966,"name":"address","nodeType":"ElementaryTypeName","src":"7827:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3969,"mutability":"mutable","name":"to","nameLocation":"7849:2:31","nodeType":"VariableDeclaration","scope":3976,"src":"7841:10:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3968,"name":"address","nodeType":"ElementaryTypeName","src":"7841:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3971,"mutability":"mutable","name":"amount","nameLocation":"7861:6:31","nodeType":"VariableDeclaration","scope":3976,"src":"7853:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3970,"name":"uint256","nodeType":"ElementaryTypeName","src":"7853:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7809:59:31"},"returnParameters":{"id":3975,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3974,"mutability":"mutable","name":"success","nameLocation":"7892:7:31","nodeType":"VariableDeclaration","scope":3976,"src":"7887:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3973,"name":"bool","nodeType":"ElementaryTypeName","src":"7887:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7886:14:31"},"scope":3996,"src":"7788:113:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3977,"nodeType":"StructuredDocumentation","src":"8128:575:31","text":" @notice Wraps/unwraps tokens based on the parameters provided.\n @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n @param params Parameters for the wrap/unwrap operation (see struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"43583be5","id":3989,"implemented":false,"kind":"function","modifiers":[],"name":"erc4626BufferWrapOrUnwrap","nameLocation":"8717:25:31","nodeType":"FunctionDefinition","parameters":{"id":3981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3980,"mutability":"mutable","name":"params","nameLocation":"8784:6:31","nodeType":"VariableDeclaration","scope":3989,"src":"8752:38:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4296_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams"},"typeName":{"id":3979,"nodeType":"UserDefinedTypeName","pathNode":{"id":3978,"name":"BufferWrapOrUnwrapParams","nameLocations":["8752:24:31"],"nodeType":"IdentifierPath","referencedDeclaration":4296,"src":"8752:24:31"},"referencedDeclaration":4296,"src":"8752:24:31","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4296_storage_ptr","typeString":"struct BufferWrapOrUnwrapParams"}},"visibility":"internal"}],"src":"8742:54:31"},"returnParameters":{"id":3988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3983,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"8823:19:31","nodeType":"VariableDeclaration","scope":3989,"src":"8815:27:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3982,"name":"uint256","nodeType":"ElementaryTypeName","src":"8815:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3985,"mutability":"mutable","name":"amountInRaw","nameLocation":"8852:11:31","nodeType":"VariableDeclaration","scope":3989,"src":"8844:19:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3984,"name":"uint256","nodeType":"ElementaryTypeName","src":"8844:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3987,"mutability":"mutable","name":"amountOutRaw","nameLocation":"8873:12:31","nodeType":"VariableDeclaration","scope":3989,"src":"8865:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3986,"name":"uint256","nodeType":"ElementaryTypeName","src":"8865:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8814:72:31"},"scope":3996,"src":"8708:179:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3990,"nodeType":"StructuredDocumentation","src":"9115:345:31","text":" @notice Returns the VaultExtension contract address.\n @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n functions, since delegate calls through the Vault are more expensive than direct calls.\n @return vaultExtension Address of the VaultExtension"},"functionSelector":"b9a8effa","id":3995,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultExtension","nameLocation":"9474:17:31","nodeType":"FunctionDefinition","parameters":{"id":3991,"nodeType":"ParameterList","parameters":[],"src":"9491:2:31"},"returnParameters":{"id":3994,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3993,"mutability":"mutable","name":"vaultExtension","nameLocation":"9525:14:31","nodeType":"VariableDeclaration","scope":3995,"src":"9517:22:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3992,"name":"address","nodeType":"ElementaryTypeName","src":"9517:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9516:24:31"},"scope":3996,"src":"9465:76:31","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3997,"src":"407:9136:31","usedErrors":[],"usedEvents":[]}],"src":"46:9498:31"},"id":31},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","exportedSymbols":{"AddLiquidityKind":[4241],"AddLiquidityParams":[4257],"AfterSwapParams":[4235],"BufferWrapOrUnwrapParams":[4296],"FEE_BITLENGTH":[4299],"FEE_SCALING_FACTOR":[4302],"HookFlags":[4061],"HooksConfig":[4085],"IERC20":[10576],"IERC4626":[9846],"IRateProvider":[24],"LiquidityManagement":[4014],"MAX_FEE_PERCENTAGE":[4305],"PoolConfig":[4039],"PoolConfigBits":[4016],"PoolData":[4163],"PoolRoleAccounts":[4111],"PoolSwapParams":[4206],"RemoveLiquidityKind":[4262],"RemoveLiquidityParams":[4278],"Rounding":[4166],"SwapKind":[4169],"SwapState":[4095],"TokenConfig":[4128],"TokenInfo":[4138],"TokenType":[4115],"VaultState":[4103],"VaultSwapParams":[4188],"WrappingDirection":[4281]},"id":4306,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3998,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:32"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":4000,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4306,"sourceUnit":10577,"src":"72:72:32","symbolAliases":[{"foreign":{"id":3999,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:32","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":4002,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4306,"sourceUnit":9847,"src":"145:75:32","symbolAliases":[{"foreign":{"id":4001,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"154:8:32","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"../solidity-utils/helpers/IRateProvider.sol","id":4004,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4306,"sourceUnit":25,"src":"222:76:32","symbolAliases":[{"foreign":{"id":4003,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24,"src":"231:13:32","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"LiquidityManagement","documentation":{"id":4005,"nodeType":"StructuredDocumentation","src":"300:472:32","text":" @notice Represents a pool's liquidity management configuration.\n @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION"},"id":4014,"members":[{"constant":false,"id":4007,"mutability":"mutable","name":"disableUnbalancedLiquidity","nameLocation":"811:26:32","nodeType":"VariableDeclaration","scope":4014,"src":"806:31:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4006,"name":"bool","nodeType":"ElementaryTypeName","src":"806:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4009,"mutability":"mutable","name":"enableAddLiquidityCustom","nameLocation":"848:24:32","nodeType":"VariableDeclaration","scope":4014,"src":"843:29:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4008,"name":"bool","nodeType":"ElementaryTypeName","src":"843:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4011,"mutability":"mutable","name":"enableRemoveLiquidityCustom","nameLocation":"883:27:32","nodeType":"VariableDeclaration","scope":4014,"src":"878:32:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4010,"name":"bool","nodeType":"ElementaryTypeName","src":"878:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4013,"mutability":"mutable","name":"enableDonation","nameLocation":"921:14:32","nodeType":"VariableDeclaration","scope":4014,"src":"916:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4012,"name":"bool","nodeType":"ElementaryTypeName","src":"916:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"LiquidityManagement","nameLocation":"780:19:32","nodeType":"StructDefinition","scope":4306,"src":"773:165:32","visibility":"public"},{"canonicalName":"PoolConfigBits","id":4016,"name":"PoolConfigBits","nameLocation":"1015:14:32","nodeType":"UserDefinedValueTypeDefinition","src":"1010:31:32","underlyingType":{"id":4015,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1033:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"canonicalName":"PoolConfig","documentation":{"id":4017,"nodeType":"StructuredDocumentation","src":"1043:1034:32","text":" @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n @param liquidityManagement Flags related to adding/removing liquidity\n @param staticSwapFeePercentage The pool's native swap fee\n @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n @param isPoolRegistered If true, the pool has been registered with the Vault\n @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals"},"id":4039,"members":[{"constant":false,"id":4020,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2122:19:32","nodeType":"VariableDeclaration","scope":4039,"src":"2102:39:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4014_storage_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":4019,"nodeType":"UserDefinedTypeName","pathNode":{"id":4018,"name":"LiquidityManagement","nameLocations":["2102:19:32"],"nodeType":"IdentifierPath","referencedDeclaration":4014,"src":"2102:19:32"},"referencedDeclaration":4014,"src":"2102:19:32","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4014_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"},{"constant":false,"id":4022,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"2155:23:32","nodeType":"VariableDeclaration","scope":4039,"src":"2147:31:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4021,"name":"uint256","nodeType":"ElementaryTypeName","src":"2147:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4024,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"2192:26:32","nodeType":"VariableDeclaration","scope":4039,"src":"2184:34:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4023,"name":"uint256","nodeType":"ElementaryTypeName","src":"2184:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4026,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"2232:27:32","nodeType":"VariableDeclaration","scope":4039,"src":"2224:35:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4025,"name":"uint256","nodeType":"ElementaryTypeName","src":"2224:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4028,"mutability":"mutable","name":"tokenDecimalDiffs","nameLocation":"2272:17:32","nodeType":"VariableDeclaration","scope":4039,"src":"2265:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":4027,"name":"uint40","nodeType":"ElementaryTypeName","src":"2265:6:32","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":4030,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"2302:18:32","nodeType":"VariableDeclaration","scope":4039,"src":"2295:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4029,"name":"uint32","nodeType":"ElementaryTypeName","src":"2295:6:32","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":4032,"mutability":"mutable","name":"isPoolRegistered","nameLocation":"2331:16:32","nodeType":"VariableDeclaration","scope":4039,"src":"2326:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4031,"name":"bool","nodeType":"ElementaryTypeName","src":"2326:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4034,"mutability":"mutable","name":"isPoolInitialized","nameLocation":"2358:17:32","nodeType":"VariableDeclaration","scope":4039,"src":"2353:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4033,"name":"bool","nodeType":"ElementaryTypeName","src":"2353:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4036,"mutability":"mutable","name":"isPoolPaused","nameLocation":"2386:12:32","nodeType":"VariableDeclaration","scope":4039,"src":"2381:17:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4035,"name":"bool","nodeType":"ElementaryTypeName","src":"2381:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4038,"mutability":"mutable","name":"isPoolInRecoveryMode","nameLocation":"2409:20:32","nodeType":"VariableDeclaration","scope":4039,"src":"2404:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4037,"name":"bool","nodeType":"ElementaryTypeName","src":"2404:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolConfig","nameLocation":"2085:10:32","nodeType":"StructDefinition","scope":4306,"src":"2078:354:32","visibility":"public"},{"canonicalName":"HookFlags","documentation":{"id":4040,"nodeType":"StructuredDocumentation","src":"2434:352:32","text":" @notice The flag portion of the `HooksConfig`.\n @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n flags to true will cause the Vault to call the corresponding hook during operations."},"id":4061,"members":[{"constant":false,"id":4042,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"2815:25:32","nodeType":"VariableDeclaration","scope":4061,"src":"2810:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4041,"name":"bool","nodeType":"ElementaryTypeName","src":"2810:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4044,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"2851:26:32","nodeType":"VariableDeclaration","scope":4061,"src":"2846:31:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4043,"name":"bool","nodeType":"ElementaryTypeName","src":"2846:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4046,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"2888:25:32","nodeType":"VariableDeclaration","scope":4061,"src":"2883:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4045,"name":"bool","nodeType":"ElementaryTypeName","src":"2883:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4048,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"2924:31:32","nodeType":"VariableDeclaration","scope":4061,"src":"2919:36:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4047,"name":"bool","nodeType":"ElementaryTypeName","src":"2919:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4050,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"2966:20:32","nodeType":"VariableDeclaration","scope":4061,"src":"2961:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4049,"name":"bool","nodeType":"ElementaryTypeName","src":"2961:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4052,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"2997:19:32","nodeType":"VariableDeclaration","scope":4061,"src":"2992:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4051,"name":"bool","nodeType":"ElementaryTypeName","src":"2992:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4054,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3027:28:32","nodeType":"VariableDeclaration","scope":4061,"src":"3022:33:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4053,"name":"bool","nodeType":"ElementaryTypeName","src":"3022:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4056,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3066:27:32","nodeType":"VariableDeclaration","scope":4061,"src":"3061:32:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4055,"name":"bool","nodeType":"ElementaryTypeName","src":"3061:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4058,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3104:31:32","nodeType":"VariableDeclaration","scope":4061,"src":"3099:36:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4057,"name":"bool","nodeType":"ElementaryTypeName","src":"3099:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4060,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3146:30:32","nodeType":"VariableDeclaration","scope":4061,"src":"3141:35:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4059,"name":"bool","nodeType":"ElementaryTypeName","src":"3141:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"HookFlags","nameLocation":"2794:9:32","nodeType":"StructDefinition","scope":4306,"src":"2787:392:32","visibility":"public"},{"canonicalName":"HooksConfig","documentation":{"id":4062,"nodeType":"StructuredDocumentation","src":"3181:101:32","text":"@notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address)."},"id":4085,"members":[{"constant":false,"id":4064,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"3312:25:32","nodeType":"VariableDeclaration","scope":4085,"src":"3307:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4063,"name":"bool","nodeType":"ElementaryTypeName","src":"3307:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4066,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"3348:26:32","nodeType":"VariableDeclaration","scope":4085,"src":"3343:31:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4065,"name":"bool","nodeType":"ElementaryTypeName","src":"3343:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4068,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"3385:25:32","nodeType":"VariableDeclaration","scope":4085,"src":"3380:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4067,"name":"bool","nodeType":"ElementaryTypeName","src":"3380:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4070,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"3421:31:32","nodeType":"VariableDeclaration","scope":4085,"src":"3416:36:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4069,"name":"bool","nodeType":"ElementaryTypeName","src":"3416:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4072,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"3463:20:32","nodeType":"VariableDeclaration","scope":4085,"src":"3458:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4071,"name":"bool","nodeType":"ElementaryTypeName","src":"3458:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4074,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"3494:19:32","nodeType":"VariableDeclaration","scope":4085,"src":"3489:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4073,"name":"bool","nodeType":"ElementaryTypeName","src":"3489:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4076,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3524:28:32","nodeType":"VariableDeclaration","scope":4085,"src":"3519:33:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4075,"name":"bool","nodeType":"ElementaryTypeName","src":"3519:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4078,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3563:27:32","nodeType":"VariableDeclaration","scope":4085,"src":"3558:32:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4077,"name":"bool","nodeType":"ElementaryTypeName","src":"3558:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4080,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3601:31:32","nodeType":"VariableDeclaration","scope":4085,"src":"3596:36:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4079,"name":"bool","nodeType":"ElementaryTypeName","src":"3596:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4082,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3643:30:32","nodeType":"VariableDeclaration","scope":4085,"src":"3638:35:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4081,"name":"bool","nodeType":"ElementaryTypeName","src":"3638:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4084,"mutability":"mutable","name":"hooksContract","nameLocation":"3687:13:32","nodeType":"VariableDeclaration","scope":4085,"src":"3679:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4083,"name":"address","nodeType":"ElementaryTypeName","src":"3679:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"HooksConfig","nameLocation":"3289:11:32","nodeType":"StructDefinition","scope":4306,"src":"3282:421:32","visibility":"public"},{"canonicalName":"SwapState","documentation":{"id":4086,"nodeType":"StructuredDocumentation","src":"3705:364:32","text":" @notice Represents temporary state used during a swap operation.\n @param indexIn The zero-based index of tokenIn\n @param indexOut The zero-based index of tokenOut\n @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n @param swapFeePercentage The swap fee to be applied (might be static or dynamic)"},"id":4095,"members":[{"constant":false,"id":4088,"mutability":"mutable","name":"indexIn","nameLocation":"4101:7:32","nodeType":"VariableDeclaration","scope":4095,"src":"4093:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4087,"name":"uint256","nodeType":"ElementaryTypeName","src":"4093:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4090,"mutability":"mutable","name":"indexOut","nameLocation":"4122:8:32","nodeType":"VariableDeclaration","scope":4095,"src":"4114:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4089,"name":"uint256","nodeType":"ElementaryTypeName","src":"4114:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4092,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"4144:19:32","nodeType":"VariableDeclaration","scope":4095,"src":"4136:27:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4091,"name":"uint256","nodeType":"ElementaryTypeName","src":"4136:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4094,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"4177:17:32","nodeType":"VariableDeclaration","scope":4095,"src":"4169:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4093,"name":"uint256","nodeType":"ElementaryTypeName","src":"4169:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapState","nameLocation":"4077:9:32","nodeType":"StructDefinition","scope":4306,"src":"4070:127:32","visibility":"public"},{"canonicalName":"VaultState","documentation":{"id":4096,"nodeType":"StructuredDocumentation","src":"4199:381:32","text":" @notice Represents the Vault's configuration.\n @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled"},"id":4103,"members":[{"constant":false,"id":4098,"mutability":"mutable","name":"isQueryDisabled","nameLocation":"4610:15:32","nodeType":"VariableDeclaration","scope":4103,"src":"4605:20:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4097,"name":"bool","nodeType":"ElementaryTypeName","src":"4605:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4100,"mutability":"mutable","name":"isVaultPaused","nameLocation":"4636:13:32","nodeType":"VariableDeclaration","scope":4103,"src":"4631:18:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4099,"name":"bool","nodeType":"ElementaryTypeName","src":"4631:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4102,"mutability":"mutable","name":"areBuffersPaused","nameLocation":"4660:16:32","nodeType":"VariableDeclaration","scope":4103,"src":"4655:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4101,"name":"bool","nodeType":"ElementaryTypeName","src":"4655:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"VaultState","nameLocation":"4588:10:32","nodeType":"StructDefinition","scope":4306,"src":"4581:98:32","visibility":"public"},{"canonicalName":"PoolRoleAccounts","documentation":{"id":4104,"nodeType":"StructuredDocumentation","src":"4681:461:32","text":" @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)"},"id":4111,"members":[{"constant":false,"id":4106,"mutability":"mutable","name":"pauseManager","nameLocation":"5181:12:32","nodeType":"VariableDeclaration","scope":4111,"src":"5173:20:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4105,"name":"address","nodeType":"ElementaryTypeName","src":"5173:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4108,"mutability":"mutable","name":"swapFeeManager","nameLocation":"5207:14:32","nodeType":"VariableDeclaration","scope":4111,"src":"5199:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4107,"name":"address","nodeType":"ElementaryTypeName","src":"5199:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4110,"mutability":"mutable","name":"poolCreator","nameLocation":"5235:11:32","nodeType":"VariableDeclaration","scope":4111,"src":"5227:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4109,"name":"address","nodeType":"ElementaryTypeName","src":"5227:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"PoolRoleAccounts","nameLocation":"5150:16:32","nodeType":"StructDefinition","scope":4306,"src":"5143:106:32","visibility":"public"},{"canonicalName":"TokenType","documentation":{"id":4112,"nodeType":"StructuredDocumentation","src":"9245:1024:32","text":" @notice Token types supported by the Vault.\n @dev In general, pools may contain any combination of these tokens.\n STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n yield fees are charged elsewhere).\n NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard."},"id":4115,"members":[{"id":4113,"name":"STANDARD","nameLocation":"10291:8:32","nodeType":"EnumValue","src":"10291:8:32"},{"id":4114,"name":"WITH_RATE","nameLocation":"10305:9:32","nodeType":"EnumValue","src":"10305:9:32"}],"name":"TokenType","nameLocation":"10275:9:32","nodeType":"EnumDefinition","src":"10270:46:32"},{"canonicalName":"TokenConfig","documentation":{"id":4116,"nodeType":"StructuredDocumentation","src":"10318:915:32","text":" @notice Encapsulate the data required for the Vault to support a token of the given type.\n @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n need a rate provider, and may or may not be yield-bearing.\n At registration time, it is useful to include the token address along with the token parameters in the structure\n passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n @param token The token address\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":4128,"members":[{"constant":false,"id":4119,"mutability":"mutable","name":"token","nameLocation":"11266:5:32","nodeType":"VariableDeclaration","scope":4128,"src":"11259:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":4118,"nodeType":"UserDefinedTypeName","pathNode":{"id":4117,"name":"IERC20","nameLocations":["11259:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"11259:6:32"},"referencedDeclaration":10576,"src":"11259:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4122,"mutability":"mutable","name":"tokenType","nameLocation":"11287:9:32","nodeType":"VariableDeclaration","scope":4128,"src":"11277:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4115","typeString":"enum TokenType"},"typeName":{"id":4121,"nodeType":"UserDefinedTypeName","pathNode":{"id":4120,"name":"TokenType","nameLocations":["11277:9:32"],"nodeType":"IdentifierPath","referencedDeclaration":4115,"src":"11277:9:32"},"referencedDeclaration":4115,"src":"11277:9:32","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4115","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":4125,"mutability":"mutable","name":"rateProvider","nameLocation":"11316:12:32","nodeType":"VariableDeclaration","scope":4128,"src":"11302:26:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"},"typeName":{"id":4124,"nodeType":"UserDefinedTypeName","pathNode":{"id":4123,"name":"IRateProvider","nameLocations":["11302:13:32"],"nodeType":"IdentifierPath","referencedDeclaration":24,"src":"11302:13:32"},"referencedDeclaration":24,"src":"11302:13:32","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":4127,"mutability":"mutable","name":"paysYieldFees","nameLocation":"11339:13:32","nodeType":"VariableDeclaration","scope":4128,"src":"11334:18:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4126,"name":"bool","nodeType":"ElementaryTypeName","src":"11334:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenConfig","nameLocation":"11241:11:32","nodeType":"StructDefinition","scope":4306,"src":"11234:121:32","visibility":"public"},{"canonicalName":"TokenInfo","documentation":{"id":4129,"nodeType":"StructuredDocumentation","src":"11357:592:32","text":" @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":4138,"members":[{"constant":false,"id":4132,"mutability":"mutable","name":"tokenType","nameLocation":"11983:9:32","nodeType":"VariableDeclaration","scope":4138,"src":"11973:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4115","typeString":"enum TokenType"},"typeName":{"id":4131,"nodeType":"UserDefinedTypeName","pathNode":{"id":4130,"name":"TokenType","nameLocations":["11973:9:32"],"nodeType":"IdentifierPath","referencedDeclaration":4115,"src":"11973:9:32"},"referencedDeclaration":4115,"src":"11973:9:32","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4115","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":4135,"mutability":"mutable","name":"rateProvider","nameLocation":"12012:12:32","nodeType":"VariableDeclaration","scope":4138,"src":"11998:26:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"},"typeName":{"id":4134,"nodeType":"UserDefinedTypeName","pathNode":{"id":4133,"name":"IRateProvider","nameLocations":["11998:13:32"],"nodeType":"IdentifierPath","referencedDeclaration":24,"src":"11998:13:32"},"referencedDeclaration":24,"src":"11998:13:32","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":4137,"mutability":"mutable","name":"paysYieldFees","nameLocation":"12035:13:32","nodeType":"VariableDeclaration","scope":4138,"src":"12030:18:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4136,"name":"bool","nodeType":"ElementaryTypeName","src":"12030:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenInfo","nameLocation":"11957:9:32","nodeType":"StructDefinition","scope":4306,"src":"11950:101:32","visibility":"public"},{"canonicalName":"PoolData","documentation":{"id":4139,"nodeType":"StructuredDocumentation","src":"12053:761:32","text":" @notice Data structure used to represent the current pool state in memory\n @param poolConfigBits Custom type to store the entire configuration of the pool.\n @param tokens Pool tokens, sorted in token registration order\n @param tokenInfo Configuration data for each token, sorted in token registration order\n @param balancesRaw Token balances in native decimals\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. It is 1e18 (FP 1) for 18-decimal tokens"},"id":4163,"members":[{"constant":false,"id":4142,"mutability":"mutable","name":"poolConfigBits","nameLocation":"12852:14:32","nodeType":"VariableDeclaration","scope":4163,"src":"12837:29:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4016","typeString":"PoolConfigBits"},"typeName":{"id":4141,"nodeType":"UserDefinedTypeName","pathNode":{"id":4140,"name":"PoolConfigBits","nameLocations":["12837:14:32"],"nodeType":"IdentifierPath","referencedDeclaration":4016,"src":"12837:14:32"},"referencedDeclaration":4016,"src":"12837:14:32","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4016","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":4146,"mutability":"mutable","name":"tokens","nameLocation":"12881:6:32","nodeType":"VariableDeclaration","scope":4163,"src":"12872:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4144,"nodeType":"UserDefinedTypeName","pathNode":{"id":4143,"name":"IERC20","nameLocations":["12872:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"12872:6:32"},"referencedDeclaration":10576,"src":"12872:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":4145,"nodeType":"ArrayTypeName","src":"12872:8:32","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":4150,"mutability":"mutable","name":"tokenInfo","nameLocation":"12905:9:32","nodeType":"VariableDeclaration","scope":4163,"src":"12893:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4138_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":4148,"nodeType":"UserDefinedTypeName","pathNode":{"id":4147,"name":"TokenInfo","nameLocations":["12893:9:32"],"nodeType":"IdentifierPath","referencedDeclaration":4138,"src":"12893:9:32"},"referencedDeclaration":4138,"src":"12893:9:32","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4138_storage_ptr","typeString":"struct TokenInfo"}},"id":4149,"nodeType":"ArrayTypeName","src":"12893:11:32","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4138_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":4153,"mutability":"mutable","name":"balancesRaw","nameLocation":"12930:11:32","nodeType":"VariableDeclaration","scope":4163,"src":"12920:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4151,"name":"uint256","nodeType":"ElementaryTypeName","src":"12920:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4152,"nodeType":"ArrayTypeName","src":"12920:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4156,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"12957:20:32","nodeType":"VariableDeclaration","scope":4163,"src":"12947:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4154,"name":"uint256","nodeType":"ElementaryTypeName","src":"12947:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4155,"nodeType":"ArrayTypeName","src":"12947:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4159,"mutability":"mutable","name":"tokenRates","nameLocation":"12993:10:32","nodeType":"VariableDeclaration","scope":4163,"src":"12983:20:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4157,"name":"uint256","nodeType":"ElementaryTypeName","src":"12983:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4158,"nodeType":"ArrayTypeName","src":"12983:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4162,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"13019:21:32","nodeType":"VariableDeclaration","scope":4163,"src":"13009:31:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4160,"name":"uint256","nodeType":"ElementaryTypeName","src":"13009:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4161,"nodeType":"ArrayTypeName","src":"13009:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"PoolData","nameLocation":"12822:8:32","nodeType":"StructDefinition","scope":4306,"src":"12815:228:32","visibility":"public"},{"canonicalName":"Rounding","id":4166,"members":[{"id":4164,"name":"ROUND_UP","nameLocation":"13065:8:32","nodeType":"EnumValue","src":"13065:8:32"},{"id":4165,"name":"ROUND_DOWN","nameLocation":"13079:10:32","nodeType":"EnumValue","src":"13079:10:32"}],"name":"Rounding","nameLocation":"13050:8:32","nodeType":"EnumDefinition","src":"13045:46:32"},{"canonicalName":"SwapKind","id":4169,"members":[{"id":4167,"name":"EXACT_IN","nameLocation":"13318:8:32","nodeType":"EnumValue","src":"13318:8:32"},{"id":4168,"name":"EXACT_OUT","nameLocation":"13332:9:32","nodeType":"EnumValue","src":"13332:9:32"}],"name":"SwapKind","nameLocation":"13303:8:32","nodeType":"EnumDefinition","src":"13298:45:32"},{"canonicalName":"VaultSwapParams","documentation":{"id":4170,"nodeType":"StructuredDocumentation","src":"14089:558:32","text":" @notice Data passed into primary Vault `swap` operations.\n @param kind Type of swap (Exact In or Exact Out)\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n @param userData Additional (optional) user data"},"id":4188,"members":[{"constant":false,"id":4173,"mutability":"mutable","name":"kind","nameLocation":"14686:4:32","nodeType":"VariableDeclaration","scope":4188,"src":"14677:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"},"typeName":{"id":4172,"nodeType":"UserDefinedTypeName","pathNode":{"id":4171,"name":"SwapKind","nameLocations":["14677:8:32"],"nodeType":"IdentifierPath","referencedDeclaration":4169,"src":"14677:8:32"},"referencedDeclaration":4169,"src":"14677:8:32","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":4175,"mutability":"mutable","name":"pool","nameLocation":"14704:4:32","nodeType":"VariableDeclaration","scope":4188,"src":"14696:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4174,"name":"address","nodeType":"ElementaryTypeName","src":"14696:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4178,"mutability":"mutable","name":"tokenIn","nameLocation":"14721:7:32","nodeType":"VariableDeclaration","scope":4188,"src":"14714:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":4177,"nodeType":"UserDefinedTypeName","pathNode":{"id":4176,"name":"IERC20","nameLocations":["14714:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"14714:6:32"},"referencedDeclaration":10576,"src":"14714:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4181,"mutability":"mutable","name":"tokenOut","nameLocation":"14741:8:32","nodeType":"VariableDeclaration","scope":4188,"src":"14734:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":4180,"nodeType":"UserDefinedTypeName","pathNode":{"id":4179,"name":"IERC20","nameLocations":["14734:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"14734:6:32"},"referencedDeclaration":10576,"src":"14734:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4183,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"14763:14:32","nodeType":"VariableDeclaration","scope":4188,"src":"14755:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4182,"name":"uint256","nodeType":"ElementaryTypeName","src":"14755:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4185,"mutability":"mutable","name":"limitRaw","nameLocation":"14791:8:32","nodeType":"VariableDeclaration","scope":4188,"src":"14783:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4184,"name":"uint256","nodeType":"ElementaryTypeName","src":"14783:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4187,"mutability":"mutable","name":"userData","nameLocation":"14811:8:32","nodeType":"VariableDeclaration","scope":4188,"src":"14805:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4186,"name":"bytes","nodeType":"ElementaryTypeName","src":"14805:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"VaultSwapParams","nameLocation":"14655:15:32","nodeType":"StructDefinition","scope":4306,"src":"14648:174:32","visibility":"public"},{"canonicalName":"PoolSwapParams","documentation":{"id":4189,"nodeType":"StructuredDocumentation","src":"14824:530:32","text":" @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n @param kind Type of swap (exact in or exact out)\n @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n @param balancesScaled18 Current pool balances\n @param indexIn Index of tokenIn\n @param indexOut Index of tokenOut\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param userData Additional (optional) data required for the swap"},"id":4206,"members":[{"constant":false,"id":4192,"mutability":"mutable","name":"kind","nameLocation":"15392:4:32","nodeType":"VariableDeclaration","scope":4206,"src":"15383:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"},"typeName":{"id":4191,"nodeType":"UserDefinedTypeName","pathNode":{"id":4190,"name":"SwapKind","nameLocations":["15383:8:32"],"nodeType":"IdentifierPath","referencedDeclaration":4169,"src":"15383:8:32"},"referencedDeclaration":4169,"src":"15383:8:32","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":4194,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"15410:19:32","nodeType":"VariableDeclaration","scope":4206,"src":"15402:27:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4193,"name":"uint256","nodeType":"ElementaryTypeName","src":"15402:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4197,"mutability":"mutable","name":"balancesScaled18","nameLocation":"15445:16:32","nodeType":"VariableDeclaration","scope":4206,"src":"15435:26:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4195,"name":"uint256","nodeType":"ElementaryTypeName","src":"15435:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4196,"nodeType":"ArrayTypeName","src":"15435:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4199,"mutability":"mutable","name":"indexIn","nameLocation":"15475:7:32","nodeType":"VariableDeclaration","scope":4206,"src":"15467:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4198,"name":"uint256","nodeType":"ElementaryTypeName","src":"15467:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4201,"mutability":"mutable","name":"indexOut","nameLocation":"15496:8:32","nodeType":"VariableDeclaration","scope":4206,"src":"15488:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4200,"name":"uint256","nodeType":"ElementaryTypeName","src":"15488:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4203,"mutability":"mutable","name":"router","nameLocation":"15518:6:32","nodeType":"VariableDeclaration","scope":4206,"src":"15510:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4202,"name":"address","nodeType":"ElementaryTypeName","src":"15510:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4205,"mutability":"mutable","name":"userData","nameLocation":"15536:8:32","nodeType":"VariableDeclaration","scope":4206,"src":"15530:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4204,"name":"bytes","nodeType":"ElementaryTypeName","src":"15530:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"PoolSwapParams","nameLocation":"15362:14:32","nodeType":"StructDefinition","scope":4306,"src":"15355:192:32","visibility":"public"},{"canonicalName":"AfterSwapParams","documentation":{"id":4207,"nodeType":"StructuredDocumentation","src":"15549:813:32","text":" @notice Data for the hook after a swap operation.\n @param kind Type of swap (exact in or exact out)\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param amountInScaled18 Amount of tokenIn (entering the Vault)\n @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n @param amountCalculatedScaled18 Token amount calculated by the swap\n @param amountCalculatedRaw Token amount calculated by the swap\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param pool Pool address\n @param userData Additional (optional) data required for the swap"},"id":4235,"members":[{"constant":false,"id":4210,"mutability":"mutable","name":"kind","nameLocation":"16401:4:32","nodeType":"VariableDeclaration","scope":4235,"src":"16392:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"},"typeName":{"id":4209,"nodeType":"UserDefinedTypeName","pathNode":{"id":4208,"name":"SwapKind","nameLocations":["16392:8:32"],"nodeType":"IdentifierPath","referencedDeclaration":4169,"src":"16392:8:32"},"referencedDeclaration":4169,"src":"16392:8:32","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":4213,"mutability":"mutable","name":"tokenIn","nameLocation":"16418:7:32","nodeType":"VariableDeclaration","scope":4235,"src":"16411:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":4212,"nodeType":"UserDefinedTypeName","pathNode":{"id":4211,"name":"IERC20","nameLocations":["16411:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"16411:6:32"},"referencedDeclaration":10576,"src":"16411:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4216,"mutability":"mutable","name":"tokenOut","nameLocation":"16438:8:32","nodeType":"VariableDeclaration","scope":4235,"src":"16431:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":4215,"nodeType":"UserDefinedTypeName","pathNode":{"id":4214,"name":"IERC20","nameLocations":["16431:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"16431:6:32"},"referencedDeclaration":10576,"src":"16431:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4218,"mutability":"mutable","name":"amountInScaled18","nameLocation":"16460:16:32","nodeType":"VariableDeclaration","scope":4235,"src":"16452:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4217,"name":"uint256","nodeType":"ElementaryTypeName","src":"16452:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4220,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"16490:17:32","nodeType":"VariableDeclaration","scope":4235,"src":"16482:25:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4219,"name":"uint256","nodeType":"ElementaryTypeName","src":"16482:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4222,"mutability":"mutable","name":"tokenInBalanceScaled18","nameLocation":"16521:22:32","nodeType":"VariableDeclaration","scope":4235,"src":"16513:30:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4221,"name":"uint256","nodeType":"ElementaryTypeName","src":"16513:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4224,"mutability":"mutable","name":"tokenOutBalanceScaled18","nameLocation":"16557:23:32","nodeType":"VariableDeclaration","scope":4235,"src":"16549:31:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4223,"name":"uint256","nodeType":"ElementaryTypeName","src":"16549:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4226,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"16594:24:32","nodeType":"VariableDeclaration","scope":4235,"src":"16586:32:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4225,"name":"uint256","nodeType":"ElementaryTypeName","src":"16586:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4228,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"16632:19:32","nodeType":"VariableDeclaration","scope":4235,"src":"16624:27:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4227,"name":"uint256","nodeType":"ElementaryTypeName","src":"16624:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4230,"mutability":"mutable","name":"router","nameLocation":"16665:6:32","nodeType":"VariableDeclaration","scope":4235,"src":"16657:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4229,"name":"address","nodeType":"ElementaryTypeName","src":"16657:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4232,"mutability":"mutable","name":"pool","nameLocation":"16685:4:32","nodeType":"VariableDeclaration","scope":4235,"src":"16677:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4231,"name":"address","nodeType":"ElementaryTypeName","src":"16677:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4234,"mutability":"mutable","name":"userData","nameLocation":"16701:8:32","nodeType":"VariableDeclaration","scope":4235,"src":"16695:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4233,"name":"bytes","nodeType":"ElementaryTypeName","src":"16695:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AfterSwapParams","nameLocation":"16370:15:32","nodeType":"StructDefinition","scope":4306,"src":"16363:349:32","visibility":"public"},{"canonicalName":"AddLiquidityKind","id":4241,"members":[{"id":4236,"name":"PROPORTIONAL","nameLocation":"16951:12:32","nodeType":"EnumValue","src":"16951:12:32"},{"id":4237,"name":"UNBALANCED","nameLocation":"16969:10:32","nodeType":"EnumValue","src":"16969:10:32"},{"id":4238,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"16985:22:32","nodeType":"EnumValue","src":"16985:22:32"},{"id":4239,"name":"DONATION","nameLocation":"17013:8:32","nodeType":"EnumValue","src":"17013:8:32"},{"id":4240,"name":"CUSTOM","nameLocation":"17027:6:32","nodeType":"EnumValue","src":"17027:6:32"}],"name":"AddLiquidityKind","nameLocation":"16928:16:32","nodeType":"EnumDefinition","src":"16923:112:32"},{"canonicalName":"AddLiquidityParams","documentation":{"id":4242,"nodeType":"StructuredDocumentation","src":"17037:320:32","text":" @notice Data for an add liquidity operation.\n @param pool Address of the pool\n @param to Address of user to mint to\n @param maxAmountsIn Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param kind Add liquidity kind\n @param userData Optional user data"},"id":4257,"members":[{"constant":false,"id":4244,"mutability":"mutable","name":"pool","nameLocation":"17398:4:32","nodeType":"VariableDeclaration","scope":4257,"src":"17390:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4243,"name":"address","nodeType":"ElementaryTypeName","src":"17390:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4246,"mutability":"mutable","name":"to","nameLocation":"17416:2:32","nodeType":"VariableDeclaration","scope":4257,"src":"17408:10:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4245,"name":"address","nodeType":"ElementaryTypeName","src":"17408:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4249,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"17434:12:32","nodeType":"VariableDeclaration","scope":4257,"src":"17424:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4247,"name":"uint256","nodeType":"ElementaryTypeName","src":"17424:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4248,"nodeType":"ArrayTypeName","src":"17424:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4251,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"17460:15:32","nodeType":"VariableDeclaration","scope":4257,"src":"17452:23:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4250,"name":"uint256","nodeType":"ElementaryTypeName","src":"17452:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4254,"mutability":"mutable","name":"kind","nameLocation":"17498:4:32","nodeType":"VariableDeclaration","scope":4257,"src":"17481:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4241","typeString":"enum AddLiquidityKind"},"typeName":{"id":4253,"nodeType":"UserDefinedTypeName","pathNode":{"id":4252,"name":"AddLiquidityKind","nameLocations":["17481:16:32"],"nodeType":"IdentifierPath","referencedDeclaration":4241,"src":"17481:16:32"},"referencedDeclaration":4241,"src":"17481:16:32","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4241","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":4256,"mutability":"mutable","name":"userData","nameLocation":"17514:8:32","nodeType":"VariableDeclaration","scope":4257,"src":"17508:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4255,"name":"bytes","nodeType":"ElementaryTypeName","src":"17508:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AddLiquidityParams","nameLocation":"17365:18:32","nodeType":"StructDefinition","scope":4306,"src":"17358:167:32","visibility":"public"},{"canonicalName":"RemoveLiquidityKind","id":4262,"members":[{"id":4258,"name":"PROPORTIONAL","nameLocation":"17770:12:32","nodeType":"EnumValue","src":"17770:12:32"},{"id":4259,"name":"SINGLE_TOKEN_EXACT_IN","nameLocation":"17788:21:32","nodeType":"EnumValue","src":"17788:21:32"},{"id":4260,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"17815:22:32","nodeType":"EnumValue","src":"17815:22:32"},{"id":4261,"name":"CUSTOM","nameLocation":"17843:6:32","nodeType":"EnumValue","src":"17843:6:32"}],"name":"RemoveLiquidityKind","nameLocation":"17744:19:32","nodeType":"EnumDefinition","src":"17739:112:32"},{"canonicalName":"RemoveLiquidityParams","documentation":{"id":4263,"nodeType":"StructuredDocumentation","src":"17853:330:32","text":" @notice Data for an remove liquidity operation.\n @param pool Address of the pool\n @param from Address of user to burn from\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOut Minimum amounts of output tokens\n @param kind Remove liquidity kind\n @param userData Optional user data"},"id":4278,"members":[{"constant":false,"id":4265,"mutability":"mutable","name":"pool","nameLocation":"18227:4:32","nodeType":"VariableDeclaration","scope":4278,"src":"18219:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4264,"name":"address","nodeType":"ElementaryTypeName","src":"18219:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4267,"mutability":"mutable","name":"from","nameLocation":"18245:4:32","nodeType":"VariableDeclaration","scope":4278,"src":"18237:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4266,"name":"address","nodeType":"ElementaryTypeName","src":"18237:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4269,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"18263:14:32","nodeType":"VariableDeclaration","scope":4278,"src":"18255:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4268,"name":"uint256","nodeType":"ElementaryTypeName","src":"18255:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4272,"mutability":"mutable","name":"minAmountsOut","nameLocation":"18293:13:32","nodeType":"VariableDeclaration","scope":4278,"src":"18283:23:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4270,"name":"uint256","nodeType":"ElementaryTypeName","src":"18283:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4271,"nodeType":"ArrayTypeName","src":"18283:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4275,"mutability":"mutable","name":"kind","nameLocation":"18332:4:32","nodeType":"VariableDeclaration","scope":4278,"src":"18312:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4262","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":4274,"nodeType":"UserDefinedTypeName","pathNode":{"id":4273,"name":"RemoveLiquidityKind","nameLocations":["18312:19:32"],"nodeType":"IdentifierPath","referencedDeclaration":4262,"src":"18312:19:32"},"referencedDeclaration":4262,"src":"18312:19:32","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4262","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":4277,"mutability":"mutable","name":"userData","nameLocation":"18348:8:32","nodeType":"VariableDeclaration","scope":4278,"src":"18342:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4276,"name":"bytes","nodeType":"ElementaryTypeName","src":"18342:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"RemoveLiquidityParams","nameLocation":"18191:21:32","nodeType":"StructDefinition","scope":4306,"src":"18184:175:32","visibility":"public"},{"canonicalName":"WrappingDirection","id":4281,"members":[{"id":4279,"name":"WRAP","nameLocation":"18602:4:32","nodeType":"EnumValue","src":"18602:4:32"},{"id":4280,"name":"UNWRAP","nameLocation":"18612:6:32","nodeType":"EnumValue","src":"18612:6:32"}],"name":"WrappingDirection","nameLocation":"18578:17:32","nodeType":"EnumDefinition","src":"18573:47:32"},{"canonicalName":"BufferWrapOrUnwrapParams","documentation":{"id":4282,"nodeType":"StructuredDocumentation","src":"18622:499:32","text":" @notice Data for a wrap/unwrap operation.\n @param kind Type of swap (Exact In or Exact Out)\n @param direction Direction of the wrapping operation (Wrap or Unwrap)\n @param wrappedToken Wrapped token, compatible with interface ERC4626\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n direction)"},"id":4296,"members":[{"constant":false,"id":4285,"mutability":"mutable","name":"kind","nameLocation":"19169:4:32","nodeType":"VariableDeclaration","scope":4296,"src":"19160:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"},"typeName":{"id":4284,"nodeType":"UserDefinedTypeName","pathNode":{"id":4283,"name":"SwapKind","nameLocations":["19160:8:32"],"nodeType":"IdentifierPath","referencedDeclaration":4169,"src":"19160:8:32"},"referencedDeclaration":4169,"src":"19160:8:32","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":4288,"mutability":"mutable","name":"direction","nameLocation":"19197:9:32","nodeType":"VariableDeclaration","scope":4296,"src":"19179:27:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$4281","typeString":"enum WrappingDirection"},"typeName":{"id":4287,"nodeType":"UserDefinedTypeName","pathNode":{"id":4286,"name":"WrappingDirection","nameLocations":["19179:17:32"],"nodeType":"IdentifierPath","referencedDeclaration":4281,"src":"19179:17:32"},"referencedDeclaration":4281,"src":"19179:17:32","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$4281","typeString":"enum WrappingDirection"}},"visibility":"internal"},{"constant":false,"id":4291,"mutability":"mutable","name":"wrappedToken","nameLocation":"19221:12:32","nodeType":"VariableDeclaration","scope":4296,"src":"19212:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":4290,"nodeType":"UserDefinedTypeName","pathNode":{"id":4289,"name":"IERC4626","nameLocations":["19212:8:32"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"19212:8:32"},"referencedDeclaration":9846,"src":"19212:8:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":4293,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"19247:14:32","nodeType":"VariableDeclaration","scope":4296,"src":"19239:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4292,"name":"uint256","nodeType":"ElementaryTypeName","src":"19239:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4295,"mutability":"mutable","name":"limitRaw","nameLocation":"19275:8:32","nodeType":"VariableDeclaration","scope":4296,"src":"19267:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4294,"name":"uint256","nodeType":"ElementaryTypeName","src":"19267:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"BufferWrapOrUnwrapParams","nameLocation":"19129:24:32","nodeType":"StructDefinition","scope":4306,"src":"19122:164:32","visibility":"public"},{"constant":true,"id":4299,"mutability":"constant","name":"FEE_BITLENGTH","nameLocation":"19611:13:32","nodeType":"VariableDeclaration","scope":4306,"src":"19594:35:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4297,"name":"uint256","nodeType":"ElementaryTypeName","src":"19594:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3234","id":4298,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19627:2:32","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},"visibility":"internal"},{"constant":true,"id":4302,"mutability":"constant","name":"FEE_SCALING_FACTOR","nameLocation":"19648:18:32","nodeType":"VariableDeclaration","scope":4306,"src":"19631:42:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4300,"name":"uint256","nodeType":"ElementaryTypeName","src":"19631:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653131","id":4301,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19669:4:32","typeDescriptions":{"typeIdentifier":"t_rational_100000000000_by_1","typeString":"int_const 100000000000"},"value":"1e11"},"visibility":"internal"},{"constant":true,"id":4305,"mutability":"constant","name":"MAX_FEE_PERCENTAGE","nameLocation":"19896:18:32","nodeType":"VariableDeclaration","scope":4306,"src":"19879:48:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4303,"name":"uint256","nodeType":"ElementaryTypeName","src":"19879:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e39393939653136","id":4304,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19917:10:32","typeDescriptions":{"typeIdentifier":"t_rational_999999000000000000_by_1","typeString":"int_const 999999000000000000"},"value":"99.9999e16"},"visibility":"internal"}],"src":"46:19895:32"},"id":32},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","exportedSymbols":{"Authentication":[4385],"IAuthentication":[14]},"id":4386,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4307,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:33"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":4309,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4386,"sourceUnit":15,"src":"72:116:33","symbolAliases":[{"foreign":{"id":4308,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"81:15:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":4311,"name":"IAuthentication","nameLocations":["625:15:33"],"nodeType":"IdentifierPath","referencedDeclaration":14,"src":"625:15:33"},"id":4312,"nodeType":"InheritanceSpecifier","src":"625:15:33"}],"canonicalName":"Authentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":4310,"nodeType":"StructuredDocumentation","src":"190:398:33","text":" @notice Building block for performing access control on external functions.\n @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n applied to external functions to make them only callable by authorized accounts.\n Derived contracts must implement the `_canPerform` function, which holds the actual access control logic."},"fullyImplemented":false,"id":4385,"linearizedBaseContracts":[4385,14],"name":"Authentication","nameLocation":"607:14:33","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":4314,"mutability":"immutable","name":"_actionIdDisambiguator","nameLocation":"673:22:33","nodeType":"VariableDeclaration","scope":4385,"src":"647:48:33","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4313,"name":"bytes32","nodeType":"ElementaryTypeName","src":"647:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"body":{"id":4324,"nodeType":"Block","src":"1337:63:33","statements":[{"expression":{"id":4322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4320,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4314,"src":"1347:22:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4321,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4317,"src":"1372:21:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1347:46:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4323,"nodeType":"ExpressionStatement","src":"1347:46:33"}]},"documentation":{"id":4315,"nodeType":"StructuredDocumentation","src":"702:587:33","text":" @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n multi-contract systems.\n There are two main uses for it:\n - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n unique. The contract's own address is a good option.\n - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n shared by the entire family (and no other contract) should be used instead."},"id":4325,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4317,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"1314:21:33","nodeType":"VariableDeclaration","scope":4325,"src":"1306:29:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4316,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1306:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1305:31:33"},"returnParameters":{"id":4319,"nodeType":"ParameterList","parameters":[],"src":"1337:0:33"},"scope":4385,"src":"1294:106:33","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4332,"nodeType":"Block","src":"1549:49:33","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4328,"name":"_authenticateCaller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4356,"src":"1559:19:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":4329,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1559:21:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4330,"nodeType":"ExpressionStatement","src":"1559:21:33"},{"id":4331,"nodeType":"PlaceholderStatement","src":"1590:1:33"}]},"documentation":{"id":4326,"nodeType":"StructuredDocumentation","src":"1406:114:33","text":"@dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions."},"id":4333,"name":"authenticate","nameLocation":"1534:12:33","nodeType":"ModifierDefinition","parameters":{"id":4327,"nodeType":"ParameterList","parameters":[],"src":"1546:2:33"},"src":"1525:73:33","virtual":false,"visibility":"internal"},{"body":{"id":4355,"nodeType":"Block","src":"1733:156:33","statements":[{"assignments":[4338],"declarations":[{"constant":false,"id":4338,"mutability":"mutable","name":"actionId","nameLocation":"1751:8:33","nodeType":"VariableDeclaration","scope":4355,"src":"1743:16:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4337,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1743:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":4343,"initialValue":{"arguments":[{"expression":{"id":4340,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1774:3:33","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1778:3:33","memberName":"sig","nodeType":"MemberAccess","src":"1774:7:33","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":4339,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4374,"src":"1762:11:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":4342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1762:20:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1743:39:33"},{"condition":{"id":4349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1797:34:33","subExpression":{"arguments":[{"id":4345,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4338,"src":"1810:8:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":4346,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1820:3:33","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1824:6:33","memberName":"sender","nodeType":"MemberAccess","src":"1820:10:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":4344,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4384,"src":"1798:11:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":4348,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1798:33:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4354,"nodeType":"IfStatement","src":"1793:90:33","trueBody":{"id":4353,"nodeType":"Block","src":"1833:50:33","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4350,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"1854:16:33","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1854:18:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4352,"nodeType":"RevertStatement","src":"1847:25:33"}]}}]},"documentation":{"id":4334,"nodeType":"StructuredDocumentation","src":"1604:79:33","text":"@dev Reverts unless the caller is allowed to call the entry point function."},"id":4356,"implemented":true,"kind":"function","modifiers":[],"name":"_authenticateCaller","nameLocation":"1697:19:33","nodeType":"FunctionDefinition","parameters":{"id":4335,"nodeType":"ParameterList","parameters":[],"src":"1716:2:33"},"returnParameters":{"id":4336,"nodeType":"ParameterList","parameters":[],"src":"1733:0:33"},"scope":4385,"src":"1688:201:33","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[13],"body":{"id":4373,"nodeType":"Block","src":"2008:353:33","statements":[{"expression":{"arguments":[{"arguments":[{"id":4368,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4314,"src":"2320:22:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":4369,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4359,"src":"2344:8:33","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":4366,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2303:3:33","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":4367,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2307:12:33","memberName":"encodePacked","nodeType":"MemberAccess","src":"2303:16:33","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":4370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2303:50:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":4365,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2293:9:33","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":4371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2293:61:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4364,"id":4372,"nodeType":"Return","src":"2286:68:33"}]},"documentation":{"id":4357,"nodeType":"StructuredDocumentation","src":"1895:31:33","text":"@inheritdoc IAuthentication"},"functionSelector":"851c1bb3","id":4374,"implemented":true,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"1940:11:33","nodeType":"FunctionDefinition","overrides":{"id":4361,"nodeType":"OverrideSpecifier","overrides":[],"src":"1981:8:33"},"parameters":{"id":4360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4359,"mutability":"mutable","name":"selector","nameLocation":"1959:8:33","nodeType":"VariableDeclaration","scope":4374,"src":"1952:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4358,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1952:6:33","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1951:17:33"},"returnParameters":{"id":4364,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4363,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4374,"src":"1999:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4362,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1999:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1998:9:33"},"scope":4385,"src":"1931:430:33","stateMutability":"view","virtual":false,"visibility":"public"},{"documentation":{"id":4375,"nodeType":"StructuredDocumentation","src":"2367:304:33","text":" @dev Derived contracts must implement this function to perform the actual access control logic.\n @param actionId The action identifier associated with an external function\n @param user The account performing the action\n @return success True if the action is permitted"},"id":4384,"implemented":false,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"2685:11:33","nodeType":"FunctionDefinition","parameters":{"id":4380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4377,"mutability":"mutable","name":"actionId","nameLocation":"2705:8:33","nodeType":"VariableDeclaration","scope":4384,"src":"2697:16:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4376,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2697:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4379,"mutability":"mutable","name":"user","nameLocation":"2723:4:33","nodeType":"VariableDeclaration","scope":4384,"src":"2715:12:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4378,"name":"address","nodeType":"ElementaryTypeName","src":"2715:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2696:32:33"},"returnParameters":{"id":4383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4382,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4384,"src":"2760:4:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4381,"name":"bool","nodeType":"ElementaryTypeName","src":"2760:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2759:6:33"},"scope":4385,"src":"2676:90:33","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":4386,"src":"589:2179:33","usedErrors":[5],"usedEvents":[]}],"src":"46:2723:33"},"id":33},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","exportedSymbols":{"CastingHelpers":[4417],"IERC20":[10576]},"id":4418,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4387,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:34"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":4389,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4418,"sourceUnit":10577,"src":"72:72:34","symbolAliases":[{"foreign":{"id":4388,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:34","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"CastingHelpers","contractDependencies":[],"contractKind":"library","documentation":{"id":4390,"nodeType":"StructuredDocumentation","src":"146:71:34","text":"@notice Library of helper functions related to typecasting arrays."},"fullyImplemented":true,"id":4417,"linearizedBaseContracts":[4417],"name":"CastingHelpers","nameLocation":"225:14:34","nodeType":"ContractDefinition","nodes":[{"body":{"id":4402,"nodeType":"Block","src":"410:140:34","statements":[{"AST":{"nativeSrc":"501:43:34","nodeType":"YulBlock","src":"501:43:34","statements":[{"nativeSrc":"515:19:34","nodeType":"YulAssignment","src":"515:19:34","value":{"name":"addresses","nativeSrc":"525:9:34","nodeType":"YulIdentifier","src":"525:9:34"},"variableNames":[{"name":"tokens","nativeSrc":"515:6:34","nodeType":"YulIdentifier","src":"515:6:34"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4394,"isOffset":false,"isSlot":false,"src":"525:9:34","valueSize":1},{"declaration":4399,"isOffset":false,"isSlot":false,"src":"515:6:34","valueSize":1}],"flags":["memory-safe"],"id":4401,"nodeType":"InlineAssembly","src":"476:68:34"}]},"documentation":{"id":4391,"nodeType":"StructuredDocumentation","src":"246:66:34","text":"@dev Returns a native array of addresses as an IERC20[] array."},"id":4403,"implemented":true,"kind":"function","modifiers":[],"name":"asIERC20","nameLocation":"326:8:34","nodeType":"FunctionDefinition","parameters":{"id":4395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4394,"mutability":"mutable","name":"addresses","nameLocation":"352:9:34","nodeType":"VariableDeclaration","scope":4403,"src":"335:26:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4392,"name":"address","nodeType":"ElementaryTypeName","src":"335:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4393,"nodeType":"ArrayTypeName","src":"335:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"334:28:34"},"returnParameters":{"id":4400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4399,"mutability":"mutable","name":"tokens","nameLocation":"402:6:34","nodeType":"VariableDeclaration","scope":4403,"src":"386:22:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4397,"nodeType":"UserDefinedTypeName","pathNode":{"id":4396,"name":"IERC20","nameLocations":["386:6:34"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"386:6:34"},"referencedDeclaration":10576,"src":"386:6:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":4398,"nodeType":"ArrayTypeName","src":"386:8:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"385:24:34"},"scope":4417,"src":"317:233:34","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4415,"nodeType":"Block","src":"712:140:34","statements":[{"AST":{"nativeSrc":"803:43:34","nodeType":"YulBlock","src":"803:43:34","statements":[{"nativeSrc":"817:19:34","nodeType":"YulAssignment","src":"817:19:34","value":{"name":"tokens","nativeSrc":"830:6:34","nodeType":"YulIdentifier","src":"830:6:34"},"variableNames":[{"name":"addresses","nativeSrc":"817:9:34","nodeType":"YulIdentifier","src":"817:9:34"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4412,"isOffset":false,"isSlot":false,"src":"817:9:34","valueSize":1},{"declaration":4408,"isOffset":false,"isSlot":false,"src":"830:6:34","valueSize":1}],"flags":["memory-safe"],"id":4414,"nodeType":"InlineAssembly","src":"778:68:34"}]},"documentation":{"id":4404,"nodeType":"StructuredDocumentation","src":"556:57:34","text":"@dev Returns an IERC20[] array as an address[] array."},"id":4416,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"627:9:34","nodeType":"FunctionDefinition","parameters":{"id":4409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4408,"mutability":"mutable","name":"tokens","nameLocation":"653:6:34","nodeType":"VariableDeclaration","scope":4416,"src":"637:22:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4406,"nodeType":"UserDefinedTypeName","pathNode":{"id":4405,"name":"IERC20","nameLocations":["637:6:34"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"637:6:34"},"referencedDeclaration":10576,"src":"637:6:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":4407,"nodeType":"ArrayTypeName","src":"637:8:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"636:24:34"},"returnParameters":{"id":4413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4412,"mutability":"mutable","name":"addresses","nameLocation":"701:9:34","nodeType":"VariableDeclaration","scope":4416,"src":"684:26:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4410,"name":"address","nodeType":"ElementaryTypeName","src":"684:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4411,"nodeType":"ArrayTypeName","src":"684:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"683:28:34"},"scope":4417,"src":"618:234:34","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4418,"src":"217:637:34","usedErrors":[],"usedEvents":[]}],"src":"46:809:34"},"id":34},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","exportedSymbols":{"CastingHelpers":[4417],"IERC20":[10576],"InputHelpers":[4718]},"id":4719,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4419,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:35"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":4421,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4719,"sourceUnit":10577,"src":"72:72:35","symbolAliases":[{"foreign":{"id":4420,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","file":"./CastingHelpers.sol","id":4423,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4719,"sourceUnit":4418,"src":"146:54:35","symbolAliases":[{"foreign":{"id":4422,"name":"CastingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4417,"src":"155:14:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"InputHelpers","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":4718,"linearizedBaseContracts":[4718],"name":"InputHelpers","nameLocation":"210:12:35","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4424,"nodeType":"StructuredDocumentation","src":"229:91:35","text":"@notice Arrays passed to a function and intended to be parallel have different lengths."},"errorSelector":"aaad13f7","id":4426,"name":"InputLengthMismatch","nameLocation":"331:19:35","nodeType":"ErrorDefinition","parameters":{"id":4425,"nodeType":"ParameterList","parameters":[],"src":"350:2:35"},"src":"325:28:35"},{"documentation":{"id":4427,"nodeType":"StructuredDocumentation","src":"359:332:35","text":" @notice More than one non-zero value was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n corresponding to the token being added or removed. This error results if there are multiple non-zero entries."},"errorSelector":"6b8c3be5","id":4429,"name":"MultipleNonZeroInputs","nameLocation":"702:21:35","nodeType":"ErrorDefinition","parameters":{"id":4428,"nodeType":"ParameterList","parameters":[],"src":"723:2:35"},"src":"696:30:35"},{"documentation":{"id":4430,"nodeType":"StructuredDocumentation","src":"732:298:35","text":" @notice No valid input was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n corresponding to the token being added or removed. This error results if all entries are zero."},"errorSelector":"7e46bddc","id":4432,"name":"AllZeroInputs","nameLocation":"1041:13:35","nodeType":"ErrorDefinition","parameters":{"id":4431,"nodeType":"ParameterList","parameters":[],"src":"1054:2:35"},"src":"1035:22:35"},{"documentation":{"id":4433,"nodeType":"StructuredDocumentation","src":"1063:320:35","text":" @notice The tokens supplied to an array argument were not sorted in numerical order.\n @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n predict the token order without having to query the Vault. (It is also legacy v2 behavior.)"},"errorSelector":"6e8f1947","id":4435,"name":"TokensNotSorted","nameLocation":"1394:15:35","nodeType":"ErrorDefinition","parameters":{"id":4434,"nodeType":"ParameterList","parameters":[],"src":"1409:2:35"},"src":"1388:24:35"},{"body":{"id":4450,"nodeType":"Block","src":"1486:81:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4442,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4437,"src":"1500:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4443,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4439,"src":"1505:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1500:6:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4449,"nodeType":"IfStatement","src":"1496:65:35","trueBody":{"id":4448,"nodeType":"Block","src":"1508:53:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4445,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4426,"src":"1529:19:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1529:21:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4447,"nodeType":"RevertStatement","src":"1522:28:35"}]}}]},"id":4451,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1427:22:35","nodeType":"FunctionDefinition","parameters":{"id":4440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4437,"mutability":"mutable","name":"a","nameLocation":"1458:1:35","nodeType":"VariableDeclaration","scope":4451,"src":"1450:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4436,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4439,"mutability":"mutable","name":"b","nameLocation":"1469:1:35","nodeType":"VariableDeclaration","scope":4451,"src":"1461:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4438,"name":"uint256","nodeType":"ElementaryTypeName","src":"1461:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1449:22:35"},"returnParameters":{"id":4441,"nodeType":"ParameterList","parameters":[],"src":"1486:0:35"},"scope":4718,"src":"1418:149:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4472,"nodeType":"Block","src":"1652:91:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4460,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4453,"src":"1666:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4461,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4455,"src":"1671:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1666:6:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4463,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4455,"src":"1676:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4464,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4457,"src":"1681:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1676:6:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1666:16:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4471,"nodeType":"IfStatement","src":"1662:75:35","trueBody":{"id":4470,"nodeType":"Block","src":"1684:53:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4467,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4426,"src":"1705:19:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1705:21:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4469,"nodeType":"RevertStatement","src":"1698:28:35"}]}}]},"id":4473,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1582:22:35","nodeType":"FunctionDefinition","parameters":{"id":4458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4453,"mutability":"mutable","name":"a","nameLocation":"1613:1:35","nodeType":"VariableDeclaration","scope":4473,"src":"1605:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4452,"name":"uint256","nodeType":"ElementaryTypeName","src":"1605:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4455,"mutability":"mutable","name":"b","nameLocation":"1624:1:35","nodeType":"VariableDeclaration","scope":4473,"src":"1616:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4454,"name":"uint256","nodeType":"ElementaryTypeName","src":"1616:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4457,"mutability":"mutable","name":"c","nameLocation":"1635:1:35","nodeType":"VariableDeclaration","scope":4473,"src":"1627:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4456,"name":"uint256","nodeType":"ElementaryTypeName","src":"1627:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1604:33:35"},"returnParameters":{"id":4459,"nodeType":"ParameterList","parameters":[],"src":"1652:0:35"},"scope":4718,"src":"1573:170:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4531,"nodeType":"Block","src":"1938:451:35","statements":[{"assignments":[4482],"declarations":[{"constant":false,"id":4482,"mutability":"mutable","name":"length","nameLocation":"1956:6:35","nodeType":"VariableDeclaration","scope":4531,"src":"1948:14:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4481,"name":"uint256","nodeType":"ElementaryTypeName","src":"1948:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4485,"initialValue":{"expression":{"id":4483,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4476,"src":"1965:12:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1978:6:35","memberName":"length","nodeType":"MemberAccess","src":"1965:19:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1948:36:35"},{"expression":{"id":4488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4486,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4479,"src":"1994:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4487,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4482,"src":"2007:6:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1994:19:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4489,"nodeType":"ExpressionStatement","src":"1994:19:35"},{"body":{"id":4519,"nodeType":"Block","src":"2061:211:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":4500,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4476,"src":"2079:12:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4502,"indexExpression":{"id":4501,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4491,"src":"2092:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2079:15:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4503,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2098:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2079:20:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4518,"nodeType":"IfStatement","src":"2075:187:35","trueBody":{"id":4517,"nodeType":"Block","src":"2101:161:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4505,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4479,"src":"2123:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4506,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4482,"src":"2137:6:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2123:20:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4512,"nodeType":"IfStatement","src":"2119:97:35","trueBody":{"id":4511,"nodeType":"Block","src":"2145:71:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4508,"name":"MultipleNonZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4429,"src":"2174:21:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2174:23:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4510,"nodeType":"RevertStatement","src":"2167:30:35"}]}},{"expression":{"id":4515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4513,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4479,"src":"2233:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4514,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4491,"src":"2246:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2233:14:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4516,"nodeType":"ExpressionStatement","src":"2233:14:35"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4494,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4491,"src":"2044:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4495,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4482,"src":"2048:6:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2044:10:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4520,"initializationExpression":{"assignments":[4491],"declarations":[{"constant":false,"id":4491,"mutability":"mutable","name":"i","nameLocation":"2037:1:35","nodeType":"VariableDeclaration","scope":4520,"src":"2029:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4490,"name":"uint256","nodeType":"ElementaryTypeName","src":"2029:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4493,"initialValue":{"hexValue":"30","id":4492,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2041:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2029:13:35"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2056:3:35","subExpression":{"id":4497,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4491,"src":"2058:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4499,"nodeType":"ExpressionStatement","src":"2056:3:35"},"nodeType":"ForStatement","src":"2024:248:35"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4521,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4479,"src":"2286:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4522,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4482,"src":"2300:6:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2286:20:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4528,"nodeType":"IfStatement","src":"2282:73:35","trueBody":{"id":4527,"nodeType":"Block","src":"2308:47:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4524,"name":"AllZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4432,"src":"2329:13:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2329:15:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4526,"nodeType":"RevertStatement","src":"2322:22:35"}]}},{"expression":{"id":4529,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4479,"src":"2372:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4480,"id":4530,"nodeType":"Return","src":"2365:17:35"}]},"id":4532,"implemented":true,"kind":"function","modifiers":[],"name":"getSingleInputIndex","nameLocation":"1844:19:35","nodeType":"FunctionDefinition","parameters":{"id":4477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4476,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"1881:12:35","nodeType":"VariableDeclaration","scope":4532,"src":"1864:29:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4474,"name":"uint256","nodeType":"ElementaryTypeName","src":"1864:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4475,"nodeType":"ArrayTypeName","src":"1864:9:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1863:31:35"},"returnParameters":{"id":4480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4479,"mutability":"mutable","name":"inputIndex","nameLocation":"1926:10:35","nodeType":"VariableDeclaration","scope":4532,"src":"1918:18:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4478,"name":"uint256","nodeType":"ElementaryTypeName","src":"1918:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1917:20:35"},"scope":4718,"src":"1835:554:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4609,"nodeType":"Block","src":"3138:376:35","statements":[{"body":{"id":4605,"nodeType":"Block","src":"3196:288:35","statements":[{"body":{"id":4603,"nodeType":"Block","src":"3262:212:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"id":4580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":4572,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4537,"src":"3284:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4574,"indexExpression":{"id":4573,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4558,"src":"3291:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3284:9:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"id":4575,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4537,"src":"3296:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4579,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4576,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4558,"src":"3303:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4577,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3307:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3303:5:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3296:13:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"3284:25:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4602,"nodeType":"IfStatement","src":"3280:180:35","trueBody":{"id":4601,"nodeType":"Block","src":"3311:149:35","statements":[{"expression":{"id":4599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":4581,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4537,"src":"3387:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4583,"indexExpression":{"id":4582,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4558,"src":"3394:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3387:9:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"baseExpression":{"id":4584,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4537,"src":"3398:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4588,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4585,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4558,"src":"3405:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4586,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3409:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3405:5:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3398:13:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"id":4589,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3386:26:35","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$10576_$_t_contract$_IERC20_$10576_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"baseExpression":{"id":4590,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4537,"src":"3416:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4594,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4591,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4558,"src":"3423:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3427:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3423:5:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3416:13:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"baseExpression":{"id":4595,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4537,"src":"3431:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4597,"indexExpression":{"id":4596,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4558,"src":"3438:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3431:9:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"id":4598,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3415:26:35","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$10576_$_t_contract$_IERC20_$10576_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"src":"3386:55:35","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4600,"nodeType":"ExpressionStatement","src":"3386:55:35"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4561,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4558,"src":"3230:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4562,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4537,"src":"3234:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3241:6:35","memberName":"length","nodeType":"MemberAccess","src":"3234:13:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":4564,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4545,"src":"3250:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3234:17:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":4566,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3254:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3234:21:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3230:25:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4604,"initializationExpression":{"assignments":[4558],"declarations":[{"constant":false,"id":4558,"mutability":"mutable","name":"j","nameLocation":"3223:1:35","nodeType":"VariableDeclaration","scope":4604,"src":"3215:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4557,"name":"uint256","nodeType":"ElementaryTypeName","src":"3215:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4560,"initialValue":{"hexValue":"30","id":4559,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3227:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3215:13:35"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3257:3:35","subExpression":{"id":4569,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4558,"src":"3259:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4571,"nodeType":"ExpressionStatement","src":"3257:3:35"},"nodeType":"ForStatement","src":"3210:264:35"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4548,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4545,"src":"3168:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4549,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4537,"src":"3172:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3179:6:35","memberName":"length","nodeType":"MemberAccess","src":"3172:13:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":4551,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3188:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3172:17:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3168:21:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4606,"initializationExpression":{"assignments":[4545],"declarations":[{"constant":false,"id":4545,"mutability":"mutable","name":"i","nameLocation":"3161:1:35","nodeType":"VariableDeclaration","scope":4606,"src":"3153:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4544,"name":"uint256","nodeType":"ElementaryTypeName","src":"3153:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4547,"initialValue":{"hexValue":"30","id":4546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3165:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3153:13:35"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3191:3:35","subExpression":{"id":4554,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4545,"src":"3193:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4556,"nodeType":"ExpressionStatement","src":"3191:3:35"},"nodeType":"ForStatement","src":"3148:336:35"},{"expression":{"id":4607,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4537,"src":"3501:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"functionReturnParameters":4543,"id":4608,"nodeType":"Return","src":"3494:13:35"}]},"documentation":{"id":4533,"nodeType":"StructuredDocumentation","src":"2395:654:35","text":" @dev Sort an array of tokens, mutating in place (and also returning them).\n This assumes the tokens have been (or will be) validated elsewhere for length\n and non-duplication. All this does is the sorting.\n A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n Could have also done \"manual\" comparisons for each of the cases, but this is\n about the same number of operations, and more concise.\n This is less efficient for larger token count (i.e., above 4), but such pools should\n be rare. And in any case, sorting is only done on-chain in test code."},"id":4610,"implemented":true,"kind":"function","modifiers":[],"name":"sortTokens","nameLocation":"3063:10:35","nodeType":"FunctionDefinition","parameters":{"id":4538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4537,"mutability":"mutable","name":"tokens","nameLocation":"3090:6:35","nodeType":"VariableDeclaration","scope":4610,"src":"3074:22:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4535,"nodeType":"UserDefinedTypeName","pathNode":{"id":4534,"name":"IERC20","nameLocations":["3074:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3074:6:35"},"referencedDeclaration":10576,"src":"3074:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":4536,"nodeType":"ArrayTypeName","src":"3074:8:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3073:24:35"},"returnParameters":{"id":4543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4542,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4610,"src":"3121:15:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4540,"nodeType":"UserDefinedTypeName","pathNode":{"id":4539,"name":"IERC20","nameLocations":["3121:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3121:6:35"},"referencedDeclaration":10576,"src":"3121:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":4541,"nodeType":"ArrayTypeName","src":"3121:8:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3120:17:35"},"scope":4718,"src":"3054:460:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4664,"nodeType":"Block","src":"3686:341:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4618,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4615,"src":"3700:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3707:6:35","memberName":"length","nodeType":"MemberAccess","src":"3700:13:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":4620,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3716:1:35","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"3700:17:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4624,"nodeType":"IfStatement","src":"3696:54:35","trueBody":{"id":4623,"nodeType":"Block","src":"3719:31:35","statements":[{"functionReturnParameters":4617,"id":4622,"nodeType":"Return","src":"3733:7:35"}]}},{"assignments":[4627],"declarations":[{"constant":false,"id":4627,"mutability":"mutable","name":"previous","nameLocation":"3767:8:35","nodeType":"VariableDeclaration","scope":4664,"src":"3760:15:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":4626,"nodeType":"UserDefinedTypeName","pathNode":{"id":4625,"name":"IERC20","nameLocations":["3760:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3760:6:35"},"referencedDeclaration":10576,"src":"3760:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":4631,"initialValue":{"baseExpression":{"id":4628,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4615,"src":"3778:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4630,"indexExpression":{"hexValue":"30","id":4629,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3785:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3778:9:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3760:27:35"},{"body":{"id":4662,"nodeType":"Block","src":"3842:179:35","statements":[{"assignments":[4645],"declarations":[{"constant":false,"id":4645,"mutability":"mutable","name":"current","nameLocation":"3863:7:35","nodeType":"VariableDeclaration","scope":4662,"src":"3856:14:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":4644,"nodeType":"UserDefinedTypeName","pathNode":{"id":4643,"name":"IERC20","nameLocations":["3856:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3856:6:35"},"referencedDeclaration":10576,"src":"3856:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":4649,"initialValue":{"baseExpression":{"id":4646,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4615,"src":"3873:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4648,"indexExpression":{"id":4647,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4633,"src":"3880:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3873:9:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3856:26:35"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"id":4652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4650,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4627,"src":"3901:8:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4651,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4645,"src":"3912:7:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"3901:18:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4657,"nodeType":"IfStatement","src":"3897:81:35","trueBody":{"id":4656,"nodeType":"Block","src":"3921:57:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4653,"name":"TokensNotSorted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4435,"src":"3946:15:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3946:17:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4655,"nodeType":"RevertStatement","src":"3939:24:35"}]}},{"expression":{"id":4660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4658,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4627,"src":"3992:8:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4659,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4645,"src":"4003:7:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"3992:18:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":4661,"nodeType":"ExpressionStatement","src":"3992:18:35"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4636,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4633,"src":"3818:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":4637,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4615,"src":"3822:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3829:6:35","memberName":"length","nodeType":"MemberAccess","src":"3822:13:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3818:17:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4663,"initializationExpression":{"assignments":[4633],"declarations":[{"constant":false,"id":4633,"mutability":"mutable","name":"i","nameLocation":"3811:1:35","nodeType":"VariableDeclaration","scope":4663,"src":"3803:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4632,"name":"uint256","nodeType":"ElementaryTypeName","src":"3803:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4635,"initialValue":{"hexValue":"31","id":4634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3815:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"3803:13:35"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3837:3:35","subExpression":{"id":4640,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4633,"src":"3839:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4642,"nodeType":"ExpressionStatement","src":"3837:3:35"},"nodeType":"ForStatement","src":"3798:223:35"}]},"documentation":{"id":4611,"nodeType":"StructuredDocumentation","src":"3520:95:35","text":"@dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness."},"id":4665,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedTokens","nameLocation":"3629:18:35","nodeType":"FunctionDefinition","parameters":{"id":4616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4615,"mutability":"mutable","name":"tokens","nameLocation":"3664:6:35","nodeType":"VariableDeclaration","scope":4665,"src":"3648:22:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4613,"nodeType":"UserDefinedTypeName","pathNode":{"id":4612,"name":"IERC20","nameLocations":["3648:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3648:6:35"},"referencedDeclaration":10576,"src":"3648:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":4614,"nodeType":"ArrayTypeName","src":"3648:8:35","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3647:24:35"},"returnParameters":{"id":4617,"nodeType":"ParameterList","parameters":[],"src":"3686:0:35"},"scope":4718,"src":"3620:407:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4716,"nodeType":"Block","src":"4203:347:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4672,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4669,"src":"4217:7:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4225:6:35","memberName":"length","nodeType":"MemberAccess","src":"4217:14:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":4674,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4234:1:35","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4217:18:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4678,"nodeType":"IfStatement","src":"4213:55:35","trueBody":{"id":4677,"nodeType":"Block","src":"4237:31:35","statements":[{"functionReturnParameters":4671,"id":4676,"nodeType":"Return","src":"4251:7:35"}]}},{"assignments":[4680],"declarations":[{"constant":false,"id":4680,"mutability":"mutable","name":"previous","nameLocation":"4286:8:35","nodeType":"VariableDeclaration","scope":4716,"src":"4278:16:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4679,"name":"uint256","nodeType":"ElementaryTypeName","src":"4278:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4684,"initialValue":{"baseExpression":{"id":4681,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4669,"src":"4297:7:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4683,"indexExpression":{"hexValue":"30","id":4682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4305:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4297:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4278:29:35"},{"body":{"id":4714,"nodeType":"Block","src":"4363:181:35","statements":[{"assignments":[4697],"declarations":[{"constant":false,"id":4697,"mutability":"mutable","name":"current","nameLocation":"4385:7:35","nodeType":"VariableDeclaration","scope":4714,"src":"4377:15:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4696,"name":"uint256","nodeType":"ElementaryTypeName","src":"4377:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4701,"initialValue":{"baseExpression":{"id":4698,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4669,"src":"4395:7:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4700,"indexExpression":{"id":4699,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4686,"src":"4403:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4395:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4377:28:35"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4702,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4680,"src":"4424:8:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4703,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4697,"src":"4435:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4424:18:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4709,"nodeType":"IfStatement","src":"4420:81:35","trueBody":{"id":4708,"nodeType":"Block","src":"4444:57:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4705,"name":"TokensNotSorted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4435,"src":"4469:15:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4469:17:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4707,"nodeType":"RevertStatement","src":"4462:24:35"}]}},{"expression":{"id":4712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4710,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4680,"src":"4515:8:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4711,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4697,"src":"4526:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4515:18:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4713,"nodeType":"ExpressionStatement","src":"4515:18:35"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4689,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4686,"src":"4338:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":4690,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4669,"src":"4342:7:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4350:6:35","memberName":"length","nodeType":"MemberAccess","src":"4342:14:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4338:18:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4715,"initializationExpression":{"assignments":[4686],"declarations":[{"constant":false,"id":4686,"mutability":"mutable","name":"i","nameLocation":"4331:1:35","nodeType":"VariableDeclaration","scope":4715,"src":"4323:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4685,"name":"uint256","nodeType":"ElementaryTypeName","src":"4323:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4688,"initialValue":{"hexValue":"31","id":4687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4335:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"4323:13:35"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4358:3:35","subExpression":{"id":4693,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4686,"src":"4360:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4695,"nodeType":"ExpressionStatement","src":"4358:3:35"},"nodeType":"ForStatement","src":"4318:226:35"}]},"documentation":{"id":4666,"nodeType":"StructuredDocumentation","src":"4033:96:35","text":"@dev Ensure an array of amounts is sorted. As above, does not validate length or uniqueness."},"id":4717,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedAmounts","nameLocation":"4143:19:35","nodeType":"FunctionDefinition","parameters":{"id":4670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4669,"mutability":"mutable","name":"amounts","nameLocation":"4180:7:35","nodeType":"VariableDeclaration","scope":4717,"src":"4163:24:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4667,"name":"uint256","nodeType":"ElementaryTypeName","src":"4163:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4668,"nodeType":"ArrayTypeName","src":"4163:9:35","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4162:26:35"},"returnParameters":{"id":4671,"nodeType":"ParameterList","parameters":[],"src":"4203:0:35"},"scope":4718,"src":"4134:416:35","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4719,"src":"202:4350:35","usedErrors":[4426,4429,4432,4435],"usedEvents":[]}],"src":"46:4507:35"},"id":35},"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","exportedSymbols":{"PackedTokenBalance":[4869]},"id":4870,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4720,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:36"},{"abstract":false,"baseContracts":[],"canonicalName":"PackedTokenBalance","contractDependencies":[],"contractKind":"library","documentation":{"id":4721,"nodeType":"StructuredDocumentation","src":"72:909:36","text":" @notice This library represents a data structure for packing a token's current raw and derived balances. A derived\n balance can be the \"last\" live balance scaled18 of the raw token, or the balance of the wrapped version of the\n token in a vault buffer, among others.\n @dev We could use a Solidity struct to pack balance values together in a single storage slot, but unfortunately\n Solidity only allows for structs to live in either storage, calldata or memory. Because a memory struct still takes\n up a slot in the stack (to store its memory location), and because the entire balance fits in a single stack slot\n (two 128 bit values), using memory is strictly less gas performant. Therefore, we do manual packing and unpacking.\n We could also use custom types now, but given the simplicity here, and the existing EnumerableMap type, it seemed\n easier to leave it as a bytes32."},"fullyImplemented":true,"id":4869,"linearizedBaseContracts":[4869],"name":"PackedTokenBalance","nameLocation":"990:18:36","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":4729,"mutability":"constant","name":"_MAX_BALANCE","nameLocation":"1222:12:36","nodeType":"VariableDeclaration","scope":4869,"src":"1197:54:36","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4722,"name":"uint256","nodeType":"ElementaryTypeName","src":"1197:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"},"id":4728,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"},"id":4726,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":4723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1237:1:36","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"hexValue":"313238","id":4724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1243:3:36","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"}],"id":4725,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1242:5:36","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"}},"src":"1237:10:36","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":4727,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1250:1:36","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1237:14:36","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"}},"visibility":"private"},{"documentation":{"id":4730,"nodeType":"StructuredDocumentation","src":"1258:78:36","text":"@notice One of the balances is above the maximum value that can be stored."},"errorSelector":"89560ca1","id":4732,"name":"BalanceOverflow","nameLocation":"1347:15:36","nodeType":"ErrorDefinition","parameters":{"id":4731,"nodeType":"ParameterList","parameters":[],"src":"1362:2:36"},"src":"1341:24:36"},{"body":{"id":4746,"nodeType":"Block","src":"1443:55:36","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4741,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4734,"src":"1468:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4740,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1460:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4739,"name":"uint256","nodeType":"ElementaryTypeName","src":"1460:7:36","typeDescriptions":{}}},"id":4742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1460:16:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":4743,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4729,"src":"1479:12:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1460:31:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4738,"id":4745,"nodeType":"Return","src":"1453:38:36"}]},"id":4747,"implemented":true,"kind":"function","modifiers":[],"name":"getBalanceRaw","nameLocation":"1380:13:36","nodeType":"FunctionDefinition","parameters":{"id":4735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4734,"mutability":"mutable","name":"balance","nameLocation":"1402:7:36","nodeType":"VariableDeclaration","scope":4747,"src":"1394:15:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4733,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1394:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1393:17:36"},"returnParameters":{"id":4738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4737,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4747,"src":"1434:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4736,"name":"uint256","nodeType":"ElementaryTypeName","src":"1434:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1433:9:36"},"scope":4869,"src":"1371:127:36","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4763,"nodeType":"Block","src":"1580:62:36","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":4758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4756,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4749,"src":"1605:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"313238","id":4757,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1616:3:36","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"1605:14:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4755,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1597:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4754,"name":"uint256","nodeType":"ElementaryTypeName","src":"1597:7:36","typeDescriptions":{}}},"id":4759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1597:23:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":4760,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4729,"src":"1623:12:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1597:38:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4753,"id":4762,"nodeType":"Return","src":"1590:45:36"}]},"id":4764,"implemented":true,"kind":"function","modifiers":[],"name":"getBalanceDerived","nameLocation":"1513:17:36","nodeType":"FunctionDefinition","parameters":{"id":4750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4749,"mutability":"mutable","name":"balance","nameLocation":"1539:7:36","nodeType":"VariableDeclaration","scope":4764,"src":"1531:15:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4748,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1531:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1530:17:36"},"returnParameters":{"id":4753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4752,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4764,"src":"1571:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4751,"name":"uint256","nodeType":"ElementaryTypeName","src":"1571:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1570:9:36"},"scope":4869,"src":"1504:138:36","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4781,"nodeType":"Block","src":"1831:82:36","statements":[{"expression":{"arguments":[{"id":4775,"name":"newBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4769,"src":"1864:13:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":4777,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4767,"src":"1897:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4776,"name":"getBalanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4764,"src":"1879:17:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":4778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1879:26:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4774,"name":"toPackedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"1848:15:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":4779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1848:58:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4773,"id":4780,"nodeType":"Return","src":"1841:65:36"}]},"documentation":{"id":4765,"nodeType":"StructuredDocumentation","src":"1648:83:36","text":"@dev Sets only the raw balance of balances and returns the new bytes32 balance."},"id":4782,"implemented":true,"kind":"function","modifiers":[],"name":"setBalanceRaw","nameLocation":"1745:13:36","nodeType":"FunctionDefinition","parameters":{"id":4770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4767,"mutability":"mutable","name":"balance","nameLocation":"1767:7:36","nodeType":"VariableDeclaration","scope":4782,"src":"1759:15:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4766,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1759:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4769,"mutability":"mutable","name":"newBalanceRaw","nameLocation":"1784:13:36","nodeType":"VariableDeclaration","scope":4782,"src":"1776:21:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4768,"name":"uint256","nodeType":"ElementaryTypeName","src":"1776:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1758:40:36"},"returnParameters":{"id":4773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4772,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4782,"src":"1822:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4771,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1822:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1821:9:36"},"scope":4869,"src":"1736:177:36","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4799,"nodeType":"Block","src":"2114:82:36","statements":[{"expression":{"arguments":[{"arguments":[{"id":4794,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4785,"src":"2161:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4793,"name":"getBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4747,"src":"2147:13:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":4795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2147:22:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4796,"name":"newBalanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"2171:17:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4792,"name":"toPackedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"2131:15:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":4797,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2131:58:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4791,"id":4798,"nodeType":"Return","src":"2124:65:36"}]},"documentation":{"id":4783,"nodeType":"StructuredDocumentation","src":"1919:87:36","text":"@dev Sets only the derived balance of balances and returns the new bytes32 balance."},"id":4800,"implemented":true,"kind":"function","modifiers":[],"name":"setBalanceDerived","nameLocation":"2020:17:36","nodeType":"FunctionDefinition","parameters":{"id":4788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4785,"mutability":"mutable","name":"balance","nameLocation":"2046:7:36","nodeType":"VariableDeclaration","scope":4800,"src":"2038:15:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4784,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2038:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4787,"mutability":"mutable","name":"newBalanceDerived","nameLocation":"2063:17:36","nodeType":"VariableDeclaration","scope":4800,"src":"2055:25:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4786,"name":"uint256","nodeType":"ElementaryTypeName","src":"2055:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2037:44:36"},"returnParameters":{"id":4791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4790,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4800,"src":"2105:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4789,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2105:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2104:9:36"},"scope":4869,"src":"2011:185:36","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4827,"nodeType":"Block","src":"2412:180:36","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4810,"name":"balanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4803,"src":"2426:10:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4811,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4729,"src":"2439:12:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2426:25:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4813,"name":"balanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4805,"src":"2455:14:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4814,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4729,"src":"2472:12:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2455:29:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2426:58:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4821,"nodeType":"IfStatement","src":"2422:113:36","trueBody":{"id":4820,"nodeType":"Block","src":"2486:49:36","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4817,"name":"BalanceOverflow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"2507:15:36","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2507:17:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4819,"nodeType":"RevertStatement","src":"2500:24:36"}]}},{"expression":{"arguments":[{"id":4823,"name":"balanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4803,"src":"2558:10:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4824,"name":"balanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4805,"src":"2570:14:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4822,"name":"_pack","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4868,"src":"2552:5:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":4825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2552:33:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4809,"id":4826,"nodeType":"Return","src":"2545:40:36"}]},"documentation":{"id":4801,"nodeType":"StructuredDocumentation","src":"2202:104:36","text":"@dev Validates the size of `balanceRaw` and `balanceDerived`, then returns a packed balance bytes32."},"id":4828,"implemented":true,"kind":"function","modifiers":[],"name":"toPackedBalance","nameLocation":"2320:15:36","nodeType":"FunctionDefinition","parameters":{"id":4806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4803,"mutability":"mutable","name":"balanceRaw","nameLocation":"2344:10:36","nodeType":"VariableDeclaration","scope":4828,"src":"2336:18:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4802,"name":"uint256","nodeType":"ElementaryTypeName","src":"2336:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4805,"mutability":"mutable","name":"balanceDerived","nameLocation":"2364:14:36","nodeType":"VariableDeclaration","scope":4828,"src":"2356:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4804,"name":"uint256","nodeType":"ElementaryTypeName","src":"2356:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2335:44:36"},"returnParameters":{"id":4809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4808,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4828,"src":"2403:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4807,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2403:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2402:9:36"},"scope":4869,"src":"2311:281:36","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4846,"nodeType":"Block","src":"2754:76:36","statements":[{"expression":{"components":[{"arguments":[{"id":4839,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4831,"src":"2786:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4838,"name":"getBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4747,"src":"2772:13:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":4840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2772:22:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":4842,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4831,"src":"2814:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4841,"name":"getBalanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4764,"src":"2796:17:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":4843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2796:26:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4844,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2771:52:36","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":4837,"id":4845,"nodeType":"Return","src":"2764:59:36"}]},"documentation":{"id":4829,"nodeType":"StructuredDocumentation","src":"2598:40:36","text":"@dev Decode and fetch both balances."},"id":4847,"implemented":true,"kind":"function","modifiers":[],"name":"fromPackedBalance","nameLocation":"2652:17:36","nodeType":"FunctionDefinition","parameters":{"id":4832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4831,"mutability":"mutable","name":"balance","nameLocation":"2678:7:36","nodeType":"VariableDeclaration","scope":4847,"src":"2670:15:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4830,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2670:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2669:17:36"},"returnParameters":{"id":4837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4834,"mutability":"mutable","name":"balanceRaw","nameLocation":"2718:10:36","nodeType":"VariableDeclaration","scope":4847,"src":"2710:18:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4833,"name":"uint256","nodeType":"ElementaryTypeName","src":"2710:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4836,"mutability":"mutable","name":"balanceDerived","nameLocation":"2738:14:36","nodeType":"VariableDeclaration","scope":4847,"src":"2730:22:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4835,"name":"uint256","nodeType":"ElementaryTypeName","src":"2730:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2709:44:36"},"scope":4869,"src":"2643:187:36","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4867,"nodeType":"Block","src":"3035:76:36","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4859,"name":"mostSignificant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4852,"src":"3061:15:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"313238","id":4860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3080:3:36","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"3061:22:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4862,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3060:24:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4863,"name":"leastSignificant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4850,"src":"3087:16:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3060:43:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4858,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3052:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":4857,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3052:7:36","typeDescriptions":{}}},"id":4865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3052:52:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4856,"id":4866,"nodeType":"Return","src":"3045:59:36"}]},"documentation":{"id":4848,"nodeType":"StructuredDocumentation","src":"2836:97:36","text":"@dev Packs two uint128 values into a packed balance bytes32. It does not check balance sizes."},"id":4868,"implemented":true,"kind":"function","modifiers":[],"name":"_pack","nameLocation":"2947:5:36","nodeType":"FunctionDefinition","parameters":{"id":4853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4850,"mutability":"mutable","name":"leastSignificant","nameLocation":"2961:16:36","nodeType":"VariableDeclaration","scope":4868,"src":"2953:24:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4849,"name":"uint256","nodeType":"ElementaryTypeName","src":"2953:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4852,"mutability":"mutable","name":"mostSignificant","nameLocation":"2987:15:36","nodeType":"VariableDeclaration","scope":4868,"src":"2979:23:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4851,"name":"uint256","nodeType":"ElementaryTypeName","src":"2979:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2952:51:36"},"returnParameters":{"id":4856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4855,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4868,"src":"3026:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4854,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3026:7:36","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3025:9:36"},"scope":4869,"src":"2938:173:36","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":4870,"src":"982:2131:36","usedErrors":[4732],"usedEvents":[]}],"src":"46:3068:36"},"id":36},"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol","exportedSymbols":{"RevertCodec":[4959]},"id":4960,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4871,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:37"},{"abstract":false,"baseContracts":[],"canonicalName":"RevertCodec","contractDependencies":[],"contractKind":"library","documentation":{"id":4872,"nodeType":"StructuredDocumentation","src":"111:120:37","text":"@notice Support `quoteAndRevert`: a v2-style query which always reverts, and returns the result in the return data."},"fullyImplemented":true,"id":4959,"linearizedBaseContracts":[4959],"name":"RevertCodec","nameLocation":"239:11:37","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4873,"nodeType":"StructuredDocumentation","src":"257:183:37","text":" @notice On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\n @param result The result of the query operation"},"errorSelector":"5ab64fb8","id":4877,"name":"Result","nameLocation":"451:6:37","nodeType":"ErrorDefinition","parameters":{"id":4876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4875,"mutability":"mutable","name":"result","nameLocation":"464:6:37","nodeType":"VariableDeclaration","scope":4877,"src":"458:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4874,"name":"bytes","nodeType":"ElementaryTypeName","src":"458:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"457:14:37"},"src":"445:27:37"},{"documentation":{"id":4878,"nodeType":"StructuredDocumentation","src":"478:79:37","text":"@notice Handle the \"reverted without a reason\" case (i.e., no return data)."},"errorSelector":"a7285689","id":4880,"name":"ErrorSelectorNotFound","nameLocation":"568:21:37","nodeType":"ErrorDefinition","parameters":{"id":4879,"nodeType":"ParameterList","parameters":[],"src":"589:2:37"},"src":"562:30:37"},{"body":{"id":4920,"nodeType":"Block","src":"687:559:37","statements":[{"assignments":[4888],"declarations":[{"constant":false,"id":4888,"mutability":"mutable","name":"errorSelector","nameLocation":"704:13:37","nodeType":"VariableDeclaration","scope":4920,"src":"697:20:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4887,"name":"bytes4","nodeType":"ElementaryTypeName","src":"697:6:37","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":4893,"initialValue":{"arguments":[{"id":4891,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4882,"src":"746:9:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":4889,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4959,"src":"720:11:37","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4959_$","typeString":"type(library RevertCodec)"}},"id":4890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"732:13:37","memberName":"parseSelector","nodeType":"MemberAccess","referencedDeclaration":4940,"src":"720:25:37","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$","typeString":"function (bytes memory) pure returns (bytes4)"}},"id":4892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"720:36:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"697:59:37"},{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":4897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4894,"name":"errorSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4888,"src":"770:13:37","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":4895,"name":"Result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4877,"src":"787:6:37","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$","typeString":"function (bytes memory) pure returns (error)"}},"id":4896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"794:8:37","memberName":"selector","nodeType":"MemberAccess","src":"787:15:37","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"770:32:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4905,"nodeType":"IfStatement","src":"766:185:37","trueBody":{"id":4904,"nodeType":"Block","src":"804:147:37","statements":[{"expression":{"arguments":[{"id":4901,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4882,"src":"930:9:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":4898,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4959,"src":"903:11:37","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4959_$","typeString":"type(library RevertCodec)"}},"id":4900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"915:14:37","memberName":"bubbleUpRevert","nodeType":"MemberAccess","referencedDeclaration":4958,"src":"903:26:37","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":4902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"903:37:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4903,"nodeType":"ExpressionStatement","src":"903:37:37"}]}},{"assignments":[4907],"declarations":[{"constant":false,"id":4907,"mutability":"mutable","name":"resultRawLength","nameLocation":"969:15:37","nodeType":"VariableDeclaration","scope":4920,"src":"961:23:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4906,"name":"uint256","nodeType":"ElementaryTypeName","src":"961:7:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4910,"initialValue":{"expression":{"id":4908,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4882,"src":"987:9:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"997:6:37","memberName":"length","nodeType":"MemberAccess","src":"987:16:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"961:42:37"},{"AST":{"nativeSrc":"1038:154:37","nodeType":"YulBlock","src":"1038:154:37","statements":[{"nativeSrc":"1052:33:37","nodeType":"YulAssignment","src":"1052:33:37","value":{"arguments":[{"name":"resultRaw","nativeSrc":"1069:9:37","nodeType":"YulIdentifier","src":"1069:9:37"},{"kind":"number","nativeSrc":"1080:4:37","nodeType":"YulLiteral","src":"1080:4:37","type":"","value":"0x04"}],"functionName":{"name":"add","nativeSrc":"1065:3:37","nodeType":"YulIdentifier","src":"1065:3:37"},"nativeSrc":"1065:20:37","nodeType":"YulFunctionCall","src":"1065:20:37"},"variableNames":[{"name":"resultRaw","nativeSrc":"1052:9:37","nodeType":"YulIdentifier","src":"1052:9:37"}]},{"expression":{"arguments":[{"name":"resultRaw","nativeSrc":"1126:9:37","nodeType":"YulIdentifier","src":"1126:9:37"},{"arguments":[{"name":"resultRawLength","nativeSrc":"1141:15:37","nodeType":"YulIdentifier","src":"1141:15:37"},{"kind":"number","nativeSrc":"1158:1:37","nodeType":"YulLiteral","src":"1158:1:37","type":"","value":"4"}],"functionName":{"name":"sub","nativeSrc":"1137:3:37","nodeType":"YulIdentifier","src":"1137:3:37"},"nativeSrc":"1137:23:37","nodeType":"YulFunctionCall","src":"1137:23:37"}],"functionName":{"name":"mstore","nativeSrc":"1119:6:37","nodeType":"YulIdentifier","src":"1119:6:37"},"nativeSrc":"1119:42:37","nodeType":"YulFunctionCall","src":"1119:42:37"},"nativeSrc":"1119:42:37","nodeType":"YulExpressionStatement","src":"1119:42:37"}]},"evmVersion":"cancun","externalReferences":[{"declaration":4882,"isOffset":false,"isSlot":false,"src":"1052:9:37","valueSize":1},{"declaration":4882,"isOffset":false,"isSlot":false,"src":"1069:9:37","valueSize":1},{"declaration":4882,"isOffset":false,"isSlot":false,"src":"1126:9:37","valueSize":1},{"declaration":4907,"isOffset":false,"isSlot":false,"src":"1141:15:37","valueSize":1}],"flags":["memory-safe"],"id":4911,"nodeType":"InlineAssembly","src":"1013:179:37"},{"expression":{"arguments":[{"id":4914,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4882,"src":"1220:9:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":4916,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1232:5:37","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":4915,"name":"bytes","nodeType":"ElementaryTypeName","src":"1232:5:37","typeDescriptions":{}}}],"id":4917,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1231:7:37","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"}],"expression":{"id":4912,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1209:3:37","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":4913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1213:6:37","memberName":"decode","nodeType":"MemberAccess","src":"1209:10:37","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":4918,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1209:30:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":4886,"id":4919,"nodeType":"Return","src":"1202:37:37"}]},"id":4921,"implemented":true,"kind":"function","modifiers":[],"name":"catchEncodedResult","nameLocation":"607:18:37","nodeType":"FunctionDefinition","parameters":{"id":4883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4882,"mutability":"mutable","name":"resultRaw","nameLocation":"639:9:37","nodeType":"VariableDeclaration","scope":4921,"src":"626:22:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4881,"name":"bytes","nodeType":"ElementaryTypeName","src":"626:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"625:24:37"},"returnParameters":{"id":4886,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4885,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4921,"src":"673:12:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4884,"name":"bytes","nodeType":"ElementaryTypeName","src":"673:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"672:14:37"},"scope":4959,"src":"598:648:37","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4939,"nodeType":"Block","src":"1429:258:37","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4929,"name":"callResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4924,"src":"1443:10:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1454:6:37","memberName":"length","nodeType":"MemberAccess","src":"1443:17:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"34","id":4931,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1463:1:37","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"1443:21:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4937,"nodeType":"IfStatement","src":"1439:82:37","trueBody":{"id":4936,"nodeType":"Block","src":"1466:55:37","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4933,"name":"ErrorSelectorNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4880,"src":"1487:21:37","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1487:23:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4935,"nodeType":"RevertStatement","src":"1480:30:37"}]}},{"AST":{"nativeSrc":"1555:126:37","nodeType":"YulBlock","src":"1555:126:37","statements":[{"nativeSrc":"1569:45:37","nodeType":"YulAssignment","src":"1569:45:37","value":{"arguments":[{"arguments":[{"name":"callResult","nativeSrc":"1596:10:37","nodeType":"YulIdentifier","src":"1596:10:37"},{"kind":"number","nativeSrc":"1608:4:37","nodeType":"YulLiteral","src":"1608:4:37","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1592:3:37","nodeType":"YulIdentifier","src":"1592:3:37"},"nativeSrc":"1592:21:37","nodeType":"YulFunctionCall","src":"1592:21:37"}],"functionName":{"name":"mload","nativeSrc":"1586:5:37","nodeType":"YulIdentifier","src":"1586:5:37"},"nativeSrc":"1586:28:37","nodeType":"YulFunctionCall","src":"1586:28:37"},"variableNames":[{"name":"errorSelector","nativeSrc":"1569:13:37","nodeType":"YulIdentifier","src":"1569:13:37"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4924,"isOffset":false,"isSlot":false,"src":"1596:10:37","valueSize":1},{"declaration":4927,"isOffset":false,"isSlot":false,"src":"1569:13:37","valueSize":1}],"flags":["memory-safe"],"id":4938,"nodeType":"InlineAssembly","src":"1530:151:37"}]},"documentation":{"id":4922,"nodeType":"StructuredDocumentation","src":"1252:79:37","text":"@dev Returns the first 4 bytes in an array, reverting if the length is < 4."},"id":4940,"implemented":true,"kind":"function","modifiers":[],"name":"parseSelector","nameLocation":"1345:13:37","nodeType":"FunctionDefinition","parameters":{"id":4925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4924,"mutability":"mutable","name":"callResult","nameLocation":"1372:10:37","nodeType":"VariableDeclaration","scope":4940,"src":"1359:23:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4923,"name":"bytes","nodeType":"ElementaryTypeName","src":"1359:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1358:25:37"},"returnParameters":{"id":4928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4927,"mutability":"mutable","name":"errorSelector","nameLocation":"1414:13:37","nodeType":"VariableDeclaration","scope":4940,"src":"1407:20:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4926,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1407:6:37","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1406:22:37"},"scope":4959,"src":"1336:351:37","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4957,"nodeType":"Block","src":"1804:441:37","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4946,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4943,"src":"1881:10:37","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1892:6:37","memberName":"length","nodeType":"MemberAccess","src":"1881:17:37","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":4948,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1901:1:37","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1881:21:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4955,"nodeType":"Block","src":"2184:55:37","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4952,"name":"ErrorSelectorNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4880,"src":"2205:21:37","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2205:23:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4954,"nodeType":"RevertStatement","src":"2198:30:37"}]},"id":4956,"nodeType":"IfStatement","src":"1877:362:37","trueBody":{"id":4951,"nodeType":"Block","src":"1904:274:37","statements":[{"AST":{"nativeSrc":"2033:135:37","nodeType":"YulBlock","src":"2033:135:37","statements":[{"nativeSrc":"2051:41:37","nodeType":"YulVariableDeclaration","src":"2051:41:37","value":{"arguments":[{"name":"returnData","nativeSrc":"2081:10:37","nodeType":"YulIdentifier","src":"2081:10:37"}],"functionName":{"name":"mload","nativeSrc":"2075:5:37","nodeType":"YulIdentifier","src":"2075:5:37"},"nativeSrc":"2075:17:37","nodeType":"YulFunctionCall","src":"2075:17:37"},"variables":[{"name":"return_data_size","nativeSrc":"2055:16:37","nodeType":"YulTypedName","src":"2055:16:37","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"2120:2:37","nodeType":"YulLiteral","src":"2120:2:37","type":"","value":"32"},{"name":"returnData","nativeSrc":"2124:10:37","nodeType":"YulIdentifier","src":"2124:10:37"}],"functionName":{"name":"add","nativeSrc":"2116:3:37","nodeType":"YulIdentifier","src":"2116:3:37"},"nativeSrc":"2116:19:37","nodeType":"YulFunctionCall","src":"2116:19:37"},{"name":"return_data_size","nativeSrc":"2137:16:37","nodeType":"YulIdentifier","src":"2137:16:37"}],"functionName":{"name":"revert","nativeSrc":"2109:6:37","nodeType":"YulIdentifier","src":"2109:6:37"},"nativeSrc":"2109:45:37","nodeType":"YulFunctionCall","src":"2109:45:37"},"nativeSrc":"2109:45:37","nodeType":"YulExpressionStatement","src":"2109:45:37"}]},"evmVersion":"cancun","externalReferences":[{"declaration":4943,"isOffset":false,"isSlot":false,"src":"2081:10:37","valueSize":1},{"declaration":4943,"isOffset":false,"isSlot":false,"src":"2124:10:37","valueSize":1}],"flags":["memory-safe"],"id":4950,"nodeType":"InlineAssembly","src":"2008:160:37"}]}}]},"documentation":{"id":4941,"nodeType":"StructuredDocumentation","src":"1693:43:37","text":"@dev Taken from Openzeppelin's Address."},"id":4958,"implemented":true,"kind":"function","modifiers":[],"name":"bubbleUpRevert","nameLocation":"1750:14:37","nodeType":"FunctionDefinition","parameters":{"id":4944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4943,"mutability":"mutable","name":"returnData","nameLocation":"1778:10:37","nodeType":"VariableDeclaration","scope":4958,"src":"1765:23:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4942,"name":"bytes","nodeType":"ElementaryTypeName","src":"1765:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1764:25:37"},"returnParameters":{"id":4945,"nodeType":"ParameterList","parameters":[],"src":"1804:0:37"},"scope":4959,"src":"1741:504:37","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4960,"src":"231:2016:37","usedErrors":[4877,4880],"usedEvents":[]}],"src":"46:2202:37"},"id":37},"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","exportedSymbols":{"IVersion":[34],"Version":[4999]},"id":5000,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4961,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:38"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol","id":4963,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5000,"sourceUnit":35,"src":"72:102:38","symbolAliases":[{"foreign":{"id":4962,"name":"IVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34,"src":"81:8:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4965,"name":"IVersion","nameLocations":["686:8:38"],"nodeType":"IdentifierPath","referencedDeclaration":34,"src":"686:8:38"},"id":4966,"nodeType":"InheritanceSpecifier","src":"686:8:38"}],"canonicalName":"Version","contractDependencies":[],"contractKind":"contract","documentation":{"id":4964,"nodeType":"StructuredDocumentation","src":"176:489:38","text":" @notice Retrieves a contract's version from storage.\n @dev The version is set at deployment time and cannot be changed. It would be immutable, but immutable strings\n are not yet supported.\n Contracts like factories and pools should have versions. These typically take the form of JSON strings containing\n detailed information about the deployment. For instance:\n `{name: 'ChildChainGaugeFactory', version: 2, deployment: '20230316-child-chain-gauge-factory-v2'}`"},"fullyImplemented":true,"id":4999,"linearizedBaseContracts":[4999,34],"name":"Version","nameLocation":"675:7:38","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":4968,"mutability":"mutable","name":"_version","nameLocation":"716:8:38","nodeType":"VariableDeclaration","scope":4999,"src":"701:23:38","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":4967,"name":"string","nodeType":"ElementaryTypeName","src":"701:6:38","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":4977,"nodeType":"Block","src":"767:38:38","statements":[{"expression":{"arguments":[{"id":4974,"name":"version_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4970,"src":"789:8:38","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4973,"name":"_setVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4998,"src":"777:11:38","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":4975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"777:21:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4976,"nodeType":"ExpressionStatement","src":"777:21:38"}]},"id":4978,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4970,"mutability":"mutable","name":"version_","nameLocation":"757:8:38","nodeType":"VariableDeclaration","scope":4978,"src":"743:22:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4969,"name":"string","nodeType":"ElementaryTypeName","src":"743:6:38","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"742:24:38"},"returnParameters":{"id":4972,"nodeType":"ParameterList","parameters":[],"src":"767:0:38"},"scope":4999,"src":"731:74:38","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[33],"body":{"id":4986,"nodeType":"Block","src":"974:32:38","statements":[{"expression":{"id":4984,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4968,"src":"991:8:38","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":4983,"id":4985,"nodeType":"Return","src":"984:15:38"}]},"documentation":{"id":4979,"nodeType":"StructuredDocumentation","src":"811:101:38","text":" @notice Getter for the version.\n @return version The stored contract version"},"functionSelector":"54fd4d50","id":4987,"implemented":true,"kind":"function","modifiers":[],"name":"version","nameLocation":"926:7:38","nodeType":"FunctionDefinition","parameters":{"id":4980,"nodeType":"ParameterList","parameters":[],"src":"933:2:38"},"returnParameters":{"id":4983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4982,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4987,"src":"959:13:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4981,"name":"string","nodeType":"ElementaryTypeName","src":"959:6:38","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"958:15:38"},"scope":4999,"src":"917:89:38","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":4997,"nodeType":"Block","src":"1146:38:38","statements":[{"expression":{"id":4995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4993,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4968,"src":"1156:8:38","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4994,"name":"newVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4990,"src":"1167:10:38","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1156:21:38","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":4996,"nodeType":"ExpressionStatement","src":"1156:21:38"}]},"documentation":{"id":4988,"nodeType":"StructuredDocumentation","src":"1012:73:38","text":"@dev Internal setter that allows this contract to be used in proxies."},"id":4998,"implemented":true,"kind":"function","modifiers":[],"name":"_setVersion","nameLocation":"1099:11:38","nodeType":"FunctionDefinition","parameters":{"id":4991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4990,"mutability":"mutable","name":"newVersion","nameLocation":"1125:10:38","nodeType":"VariableDeclaration","scope":4998,"src":"1111:24:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4989,"name":"string","nodeType":"ElementaryTypeName","src":"1111:6:38","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1110:26:38"},"returnParameters":{"id":4992,"nodeType":"ParameterList","parameters":[],"src":"1146:0:38"},"scope":4999,"src":"1090:94:38","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":5000,"src":"666:520:38","usedErrors":[],"usedEvents":[]}],"src":"46:1141:38"},"id":38},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","exportedSymbols":{"FixedPoint":[5298],"LogExpMath":[6654]},"id":5299,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":5001,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:39"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","file":"./LogExpMath.sol","id":5003,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5299,"sourceUnit":6655,"src":"72:46:39","symbolAliases":[{"foreign":{"id":5002,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6654,"src":"81:10:39","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"FixedPoint","contractDependencies":[],"contractKind":"library","documentation":{"id":5004,"nodeType":"StructuredDocumentation","src":"120:119:39","text":"@notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision."},"fullyImplemented":true,"id":5298,"linearizedBaseContracts":[5298],"name":"FixedPoint","nameLocation":"247:10:39","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":5005,"nodeType":"StructuredDocumentation","src":"264:39:39","text":"@notice Attempted division by zero."},"errorSelector":"0a0c22c7","id":5007,"name":"ZeroDivision","nameLocation":"314:12:39","nodeType":"ErrorDefinition","parameters":{"id":5006,"nodeType":"ParameterList","parameters":[],"src":"326:2:39"},"src":"308:21:39"},{"constant":true,"id":5010,"mutability":"constant","name":"ONE","nameLocation":"459:3:39","nodeType":"VariableDeclaration","scope":5298,"src":"433:36:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5008,"name":"uint256","nodeType":"ElementaryTypeName","src":"433:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653138","id":5009,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"465:4:39","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":5015,"mutability":"constant","name":"TWO","nameLocation":"522:3:39","nodeType":"VariableDeclaration","scope":5298,"src":"496:39:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5011,"name":"uint256","nodeType":"ElementaryTypeName","src":"496:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5014,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":5012,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"528:1:39","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5013,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5010,"src":"532:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"528:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":5020,"mutability":"constant","name":"FOUR","nameLocation":"567:4:39","nodeType":"VariableDeclaration","scope":5298,"src":"541:40:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5016,"name":"uint256","nodeType":"ElementaryTypeName","src":"541:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5019,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":5017,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"574:1:39","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5018,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5010,"src":"578:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"574:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":5023,"mutability":"constant","name":"MAX_POW_RELATIVE_ERROR","nameLocation":"613:22:39","nodeType":"VariableDeclaration","scope":5298,"src":"587:56:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5021,"name":"uint256","nodeType":"ElementaryTypeName","src":"587:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3130303030","id":5022,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"638:5:39","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"visibility":"internal"},{"body":{"id":5042,"nodeType":"Block","src":"733:148:39","statements":[{"assignments":[5033],"declarations":[{"constant":false,"id":5033,"mutability":"mutable","name":"product","nameLocation":"828:7:39","nodeType":"VariableDeclaration","scope":5042,"src":"820:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5032,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5037,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5034,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5025,"src":"838:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5035,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5027,"src":"842:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"838:5:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"820:23:39"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5038,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5033,"src":"861:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5039,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5010,"src":"871:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"861:13:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5031,"id":5041,"nodeType":"Return","src":"854:20:39"}]},"id":5043,"implemented":true,"kind":"function","modifiers":[],"name":"mulDown","nameLocation":"671:7:39","nodeType":"FunctionDefinition","parameters":{"id":5028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5025,"mutability":"mutable","name":"a","nameLocation":"687:1:39","nodeType":"VariableDeclaration","scope":5043,"src":"679:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5024,"name":"uint256","nodeType":"ElementaryTypeName","src":"679:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5027,"mutability":"mutable","name":"b","nameLocation":"698:1:39","nodeType":"VariableDeclaration","scope":5043,"src":"690:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5026,"name":"uint256","nodeType":"ElementaryTypeName","src":"690:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"678:22:39"},"returnParameters":{"id":5031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5030,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5043,"src":"724:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5029,"name":"uint256","nodeType":"ElementaryTypeName","src":"724:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"723:9:39"},"scope":5298,"src":"662:219:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5059,"nodeType":"Block","src":"963:351:39","statements":[{"assignments":[5053],"declarations":[{"constant":false,"id":5053,"mutability":"mutable","name":"product","nameLocation":"1058:7:39","nodeType":"VariableDeclaration","scope":5059,"src":"1050:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5052,"name":"uint256","nodeType":"ElementaryTypeName","src":"1050:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5057,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5054,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5045,"src":"1068:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5055,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5047,"src":"1072:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1068:5:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1050:23:39"},{"AST":{"nativeSrc":"1211:97:39","nodeType":"YulBlock","src":"1211:97:39","statements":[{"nativeSrc":"1225:73:39","nodeType":"YulAssignment","src":"1225:73:39","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1253:7:39","nodeType":"YulIdentifier","src":"1253:7:39"}],"functionName":{"name":"iszero","nativeSrc":"1246:6:39","nodeType":"YulIdentifier","src":"1246:6:39"},"nativeSrc":"1246:15:39","nodeType":"YulFunctionCall","src":"1246:15:39"}],"functionName":{"name":"iszero","nativeSrc":"1239:6:39","nodeType":"YulIdentifier","src":"1239:6:39"},"nativeSrc":"1239:23:39","nodeType":"YulFunctionCall","src":"1239:23:39"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1276:7:39","nodeType":"YulIdentifier","src":"1276:7:39"},{"kind":"number","nativeSrc":"1285:1:39","nodeType":"YulLiteral","src":"1285:1:39","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1272:3:39","nodeType":"YulIdentifier","src":"1272:3:39"},"nativeSrc":"1272:15:39","nodeType":"YulFunctionCall","src":"1272:15:39"},{"name":"ONE","nativeSrc":"1289:3:39","nodeType":"YulIdentifier","src":"1289:3:39"}],"functionName":{"name":"div","nativeSrc":"1268:3:39","nodeType":"YulIdentifier","src":"1268:3:39"},"nativeSrc":"1268:25:39","nodeType":"YulFunctionCall","src":"1268:25:39"},{"kind":"number","nativeSrc":"1295:1:39","nodeType":"YulLiteral","src":"1295:1:39","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"1264:3:39","nodeType":"YulIdentifier","src":"1264:3:39"},"nativeSrc":"1264:33:39","nodeType":"YulFunctionCall","src":"1264:33:39"}],"functionName":{"name":"mul","nativeSrc":"1235:3:39","nodeType":"YulIdentifier","src":"1235:3:39"},"nativeSrc":"1235:63:39","nodeType":"YulFunctionCall","src":"1235:63:39"},"variableNames":[{"name":"result","nativeSrc":"1225:6:39","nodeType":"YulIdentifier","src":"1225:6:39"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":5010,"isOffset":false,"isSlot":false,"src":"1289:3:39","valueSize":1},{"declaration":5053,"isOffset":false,"isSlot":false,"src":"1253:7:39","valueSize":1},{"declaration":5053,"isOffset":false,"isSlot":false,"src":"1276:7:39","valueSize":1},{"declaration":5050,"isOffset":false,"isSlot":false,"src":"1225:6:39","valueSize":1}],"flags":["memory-safe"],"id":5058,"nodeType":"InlineAssembly","src":"1186:122:39"}]},"id":5060,"implemented":true,"kind":"function","modifiers":[],"name":"mulUp","nameLocation":"896:5:39","nodeType":"FunctionDefinition","parameters":{"id":5048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5045,"mutability":"mutable","name":"a","nameLocation":"910:1:39","nodeType":"VariableDeclaration","scope":5060,"src":"902:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5044,"name":"uint256","nodeType":"ElementaryTypeName","src":"902:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5047,"mutability":"mutable","name":"b","nameLocation":"921:1:39","nodeType":"VariableDeclaration","scope":5060,"src":"913:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5046,"name":"uint256","nodeType":"ElementaryTypeName","src":"913:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"901:22:39"},"returnParameters":{"id":5051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5050,"mutability":"mutable","name":"result","nameLocation":"955:6:39","nodeType":"VariableDeclaration","scope":5060,"src":"947:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5049,"name":"uint256","nodeType":"ElementaryTypeName","src":"947:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"946:16:39"},"scope":5298,"src":"887:427:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5079,"nodeType":"Block","src":"1391:254:39","statements":[{"assignments":[5070],"declarations":[{"constant":false,"id":5070,"mutability":"mutable","name":"aInflated","nameLocation":"1499:9:39","nodeType":"VariableDeclaration","scope":5079,"src":"1491:17:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5069,"name":"uint256","nodeType":"ElementaryTypeName","src":"1491:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5074,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5071,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5062,"src":"1511:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5072,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5010,"src":"1515:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1511:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1491:27:39"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5075,"name":"aInflated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5070,"src":"1625:9:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5076,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5064,"src":"1637:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1625:13:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5068,"id":5078,"nodeType":"Return","src":"1618:20:39"}]},"id":5080,"implemented":true,"kind":"function","modifiers":[],"name":"divDown","nameLocation":"1329:7:39","nodeType":"FunctionDefinition","parameters":{"id":5065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5062,"mutability":"mutable","name":"a","nameLocation":"1345:1:39","nodeType":"VariableDeclaration","scope":5080,"src":"1337:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5061,"name":"uint256","nodeType":"ElementaryTypeName","src":"1337:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5064,"mutability":"mutable","name":"b","nameLocation":"1356:1:39","nodeType":"VariableDeclaration","scope":5080,"src":"1348:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5063,"name":"uint256","nodeType":"ElementaryTypeName","src":"1348:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1336:22:39"},"returnParameters":{"id":5068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5067,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5080,"src":"1382:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5066,"name":"uint256","nodeType":"ElementaryTypeName","src":"1382:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1381:9:39"},"scope":5298,"src":"1320:325:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5095,"nodeType":"Block","src":"1727:43:39","statements":[{"expression":{"arguments":[{"id":5090,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5082,"src":"1753:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5091,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5010,"src":"1756:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5092,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5084,"src":"1761:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5089,"name":"mulDivUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5124,"src":"1744:8:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":5093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1744:19:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5088,"id":5094,"nodeType":"Return","src":"1737:26:39"}]},"id":5096,"implemented":true,"kind":"function","modifiers":[],"name":"divUp","nameLocation":"1660:5:39","nodeType":"FunctionDefinition","parameters":{"id":5085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5082,"mutability":"mutable","name":"a","nameLocation":"1674:1:39","nodeType":"VariableDeclaration","scope":5096,"src":"1666:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5081,"name":"uint256","nodeType":"ElementaryTypeName","src":"1666:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5084,"mutability":"mutable","name":"b","nameLocation":"1685:1:39","nodeType":"VariableDeclaration","scope":5096,"src":"1677:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5083,"name":"uint256","nodeType":"ElementaryTypeName","src":"1677:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1665:22:39"},"returnParameters":{"id":5088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5087,"mutability":"mutable","name":"result","nameLocation":"1719:6:39","nodeType":"VariableDeclaration","scope":5096,"src":"1711:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5086,"name":"uint256","nodeType":"ElementaryTypeName","src":"1711:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1710:16:39"},"scope":5298,"src":"1651:119:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5123,"nodeType":"Block","src":"1912:774:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5108,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5103,"src":"2004:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5109,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2009:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2004:6:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5115,"nodeType":"IfStatement","src":"2000:58:39","trueBody":{"id":5114,"nodeType":"Block","src":"2012:46:39","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5111,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5007,"src":"2033:12:39","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2033:14:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5113,"nodeType":"RevertStatement","src":"2026:21:39"}]}},{"assignments":[5117],"declarations":[{"constant":false,"id":5117,"mutability":"mutable","name":"product","nameLocation":"2143:7:39","nodeType":"VariableDeclaration","scope":5123,"src":"2135:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5116,"name":"uint256","nodeType":"ElementaryTypeName","src":"2135:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5121,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5118,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5099,"src":"2153:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5119,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5101,"src":"2157:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2153:5:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2135:23:39"},{"AST":{"nativeSrc":"2585:95:39","nodeType":"YulBlock","src":"2585:95:39","statements":[{"nativeSrc":"2599:71:39","nodeType":"YulAssignment","src":"2599:71:39","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2627:7:39","nodeType":"YulIdentifier","src":"2627:7:39"}],"functionName":{"name":"iszero","nativeSrc":"2620:6:39","nodeType":"YulIdentifier","src":"2620:6:39"},"nativeSrc":"2620:15:39","nodeType":"YulFunctionCall","src":"2620:15:39"}],"functionName":{"name":"iszero","nativeSrc":"2613:6:39","nodeType":"YulIdentifier","src":"2613:6:39"},"nativeSrc":"2613:23:39","nodeType":"YulFunctionCall","src":"2613:23:39"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2650:7:39","nodeType":"YulIdentifier","src":"2650:7:39"},{"kind":"number","nativeSrc":"2659:1:39","nodeType":"YulLiteral","src":"2659:1:39","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"2646:3:39","nodeType":"YulIdentifier","src":"2646:3:39"},"nativeSrc":"2646:15:39","nodeType":"YulFunctionCall","src":"2646:15:39"},{"name":"c","nativeSrc":"2663:1:39","nodeType":"YulIdentifier","src":"2663:1:39"}],"functionName":{"name":"div","nativeSrc":"2642:3:39","nodeType":"YulIdentifier","src":"2642:3:39"},"nativeSrc":"2642:23:39","nodeType":"YulFunctionCall","src":"2642:23:39"},{"kind":"number","nativeSrc":"2667:1:39","nodeType":"YulLiteral","src":"2667:1:39","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"2638:3:39","nodeType":"YulIdentifier","src":"2638:3:39"},"nativeSrc":"2638:31:39","nodeType":"YulFunctionCall","src":"2638:31:39"}],"functionName":{"name":"mul","nativeSrc":"2609:3:39","nodeType":"YulIdentifier","src":"2609:3:39"},"nativeSrc":"2609:61:39","nodeType":"YulFunctionCall","src":"2609:61:39"},"variableNames":[{"name":"result","nativeSrc":"2599:6:39","nodeType":"YulIdentifier","src":"2599:6:39"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":5103,"isOffset":false,"isSlot":false,"src":"2663:1:39","valueSize":1},{"declaration":5117,"isOffset":false,"isSlot":false,"src":"2627:7:39","valueSize":1},{"declaration":5117,"isOffset":false,"isSlot":false,"src":"2650:7:39","valueSize":1},{"declaration":5106,"isOffset":false,"isSlot":false,"src":"2599:6:39","valueSize":1}],"flags":["memory-safe"],"id":5122,"nodeType":"InlineAssembly","src":"2560:120:39"}]},"documentation":{"id":5097,"nodeType":"StructuredDocumentation","src":"1776:41:39","text":"@dev Return (a * b) / c, rounding up."},"id":5124,"implemented":true,"kind":"function","modifiers":[],"name":"mulDivUp","nameLocation":"1831:8:39","nodeType":"FunctionDefinition","parameters":{"id":5104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5099,"mutability":"mutable","name":"a","nameLocation":"1848:1:39","nodeType":"VariableDeclaration","scope":5124,"src":"1840:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5098,"name":"uint256","nodeType":"ElementaryTypeName","src":"1840:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5101,"mutability":"mutable","name":"b","nameLocation":"1859:1:39","nodeType":"VariableDeclaration","scope":5124,"src":"1851:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5100,"name":"uint256","nodeType":"ElementaryTypeName","src":"1851:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5103,"mutability":"mutable","name":"c","nameLocation":"1870:1:39","nodeType":"VariableDeclaration","scope":5124,"src":"1862:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5102,"name":"uint256","nodeType":"ElementaryTypeName","src":"1862:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1839:33:39"},"returnParameters":{"id":5107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5106,"mutability":"mutable","name":"result","nameLocation":"1904:6:39","nodeType":"VariableDeclaration","scope":5124,"src":"1896:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5105,"name":"uint256","nodeType":"ElementaryTypeName","src":"1896:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1895:16:39"},"scope":5298,"src":"1822:864:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5143,"nodeType":"Block","src":"3159:345:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5134,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5129,"src":"3251:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3256:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3251:6:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5141,"nodeType":"IfStatement","src":"3247:58:39","trueBody":{"id":5140,"nodeType":"Block","src":"3259:46:39","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5137,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5007,"src":"3280:12:39","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3280:14:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5139,"nodeType":"RevertStatement","src":"3273:21:39"}]}},{"AST":{"nativeSrc":"3415:83:39","nodeType":"YulBlock","src":"3415:83:39","statements":[{"nativeSrc":"3429:59:39","nodeType":"YulAssignment","src":"3429:59:39","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3457:1:39","nodeType":"YulIdentifier","src":"3457:1:39"}],"functionName":{"name":"iszero","nativeSrc":"3450:6:39","nodeType":"YulIdentifier","src":"3450:6:39"},"nativeSrc":"3450:9:39","nodeType":"YulFunctionCall","src":"3450:9:39"}],"functionName":{"name":"iszero","nativeSrc":"3443:6:39","nodeType":"YulIdentifier","src":"3443:6:39"},"nativeSrc":"3443:17:39","nodeType":"YulFunctionCall","src":"3443:17:39"},{"arguments":[{"kind":"number","nativeSrc":"3466:1:39","nodeType":"YulLiteral","src":"3466:1:39","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3477:1:39","nodeType":"YulIdentifier","src":"3477:1:39"},{"kind":"number","nativeSrc":"3480:1:39","nodeType":"YulLiteral","src":"3480:1:39","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"3473:3:39","nodeType":"YulIdentifier","src":"3473:3:39"},"nativeSrc":"3473:9:39","nodeType":"YulFunctionCall","src":"3473:9:39"},{"name":"b","nativeSrc":"3484:1:39","nodeType":"YulIdentifier","src":"3484:1:39"}],"functionName":{"name":"div","nativeSrc":"3469:3:39","nodeType":"YulIdentifier","src":"3469:3:39"},"nativeSrc":"3469:17:39","nodeType":"YulFunctionCall","src":"3469:17:39"}],"functionName":{"name":"add","nativeSrc":"3462:3:39","nodeType":"YulIdentifier","src":"3462:3:39"},"nativeSrc":"3462:25:39","nodeType":"YulFunctionCall","src":"3462:25:39"}],"functionName":{"name":"mul","nativeSrc":"3439:3:39","nodeType":"YulIdentifier","src":"3439:3:39"},"nativeSrc":"3439:49:39","nodeType":"YulFunctionCall","src":"3439:49:39"},"variableNames":[{"name":"result","nativeSrc":"3429:6:39","nodeType":"YulIdentifier","src":"3429:6:39"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":5127,"isOffset":false,"isSlot":false,"src":"3457:1:39","valueSize":1},{"declaration":5127,"isOffset":false,"isSlot":false,"src":"3477:1:39","valueSize":1},{"declaration":5129,"isOffset":false,"isSlot":false,"src":"3484:1:39","valueSize":1},{"declaration":5132,"isOffset":false,"isSlot":false,"src":"3429:6:39","valueSize":1}],"flags":["memory-safe"],"id":5142,"nodeType":"InlineAssembly","src":"3390:108:39"}]},"documentation":{"id":5125,"nodeType":"StructuredDocumentation","src":"2692:383:39","text":" @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n This can occur in calculations with many successive multiplications and divisions, and\n we want to minimize the number of operations by avoiding unnecessary scaling by ONE."},"id":5144,"implemented":true,"kind":"function","modifiers":[],"name":"divUpRaw","nameLocation":"3089:8:39","nodeType":"FunctionDefinition","parameters":{"id":5130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5127,"mutability":"mutable","name":"a","nameLocation":"3106:1:39","nodeType":"VariableDeclaration","scope":5144,"src":"3098:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5126,"name":"uint256","nodeType":"ElementaryTypeName","src":"3098:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5129,"mutability":"mutable","name":"b","nameLocation":"3117:1:39","nodeType":"VariableDeclaration","scope":5144,"src":"3109:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5128,"name":"uint256","nodeType":"ElementaryTypeName","src":"3109:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3097:22:39"},"returnParameters":{"id":5133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5132,"mutability":"mutable","name":"result","nameLocation":"3151:6:39","nodeType":"VariableDeclaration","scope":5144,"src":"3143:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5131,"name":"uint256","nodeType":"ElementaryTypeName","src":"3143:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3142:16:39"},"scope":5298,"src":"3080:424:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5219,"nodeType":"Block","src":"3807:723:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5154,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5149,"src":"3975:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5155,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5010,"src":"3980:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3975:8:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5160,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5149,"src":"4028:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5161,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5015,"src":"4033:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4028:8:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5169,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5149,"src":"4093:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5170,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5020,"src":"4098:4:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4093:9:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5215,"nodeType":"Block","src":"4209:315:39","statements":[{"assignments":[5186],"declarations":[{"constant":false,"id":5186,"mutability":"mutable","name":"raw","nameLocation":"4231:3:39","nodeType":"VariableDeclaration","scope":5215,"src":"4223:11:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5185,"name":"uint256","nodeType":"ElementaryTypeName","src":"4223:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5192,"initialValue":{"arguments":[{"id":5189,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5147,"src":"4252:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5190,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5149,"src":"4255:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5187,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6654,"src":"4237:10:39","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$6654_$","typeString":"type(library LogExpMath)"}},"id":5188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4248:3:39","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":5557,"src":"4237:14:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4237:20:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4223:34:39"},{"assignments":[5194],"declarations":[{"constant":false,"id":5194,"mutability":"mutable","name":"maxError","nameLocation":"4279:8:39","nodeType":"VariableDeclaration","scope":5215,"src":"4271:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5193,"name":"uint256","nodeType":"ElementaryTypeName","src":"4271:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5201,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5196,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5186,"src":"4296:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5197,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5023,"src":"4301:22:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5195,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5060,"src":"4290:5:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4290:34:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":5199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4327:1:39","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4290:38:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4271:57:39"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5202,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5186,"src":"4347:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5203,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5194,"src":"4353:8:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4347:14:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5213,"nodeType":"Block","src":"4410:104:39","statements":[{"id":5212,"nodeType":"UncheckedBlock","src":"4428:72:39","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5208,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5186,"src":"4467:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":5209,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5194,"src":"4473:8:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4467:14:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5153,"id":5211,"nodeType":"Return","src":"4460:21:39"}]}]},"id":5214,"nodeType":"IfStatement","src":"4343:171:39","trueBody":{"id":5207,"nodeType":"Block","src":"4363:41:39","statements":[{"expression":{"hexValue":"30","id":5205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4388:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":5153,"id":5206,"nodeType":"Return","src":"4381:8:39"}]}}]},"id":5216,"nodeType":"IfStatement","src":"4089:435:39","trueBody":{"id":5184,"nodeType":"Block","src":"4104:99:39","statements":[{"assignments":[5173],"declarations":[{"constant":false,"id":5173,"mutability":"mutable","name":"square","nameLocation":"4126:6:39","nodeType":"VariableDeclaration","scope":5184,"src":"4118:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5172,"name":"uint256","nodeType":"ElementaryTypeName","src":"4118:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5178,"initialValue":{"arguments":[{"id":5175,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5147,"src":"4143:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5176,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5147,"src":"4146:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5174,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5043,"src":"4135:7:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4135:13:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4118:30:39"},{"expression":{"arguments":[{"id":5180,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5173,"src":"4177:6:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5181,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5173,"src":"4185:6:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5179,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5043,"src":"4169:7:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4169:23:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5153,"id":5183,"nodeType":"Return","src":"4162:30:39"}]}},"id":5217,"nodeType":"IfStatement","src":"4024:500:39","trueBody":{"id":5168,"nodeType":"Block","src":"4038:45:39","statements":[{"expression":{"arguments":[{"id":5164,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5147,"src":"4067:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5165,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5147,"src":"4070:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5163,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5043,"src":"4059:7:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4059:13:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5153,"id":5167,"nodeType":"Return","src":"4052:20:39"}]}},"id":5218,"nodeType":"IfStatement","src":"3971:553:39","trueBody":{"id":5159,"nodeType":"Block","src":"3985:33:39","statements":[{"expression":{"id":5157,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5147,"src":"4006:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5153,"id":5158,"nodeType":"Return","src":"3999:8:39"}]}}]},"documentation":{"id":5145,"nodeType":"StructuredDocumentation","src":"3510:221:39","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n the true value (that is, the error function expected - actual is always positive)."},"id":5220,"implemented":true,"kind":"function","modifiers":[],"name":"powDown","nameLocation":"3745:7:39","nodeType":"FunctionDefinition","parameters":{"id":5150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5147,"mutability":"mutable","name":"x","nameLocation":"3761:1:39","nodeType":"VariableDeclaration","scope":5220,"src":"3753:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5146,"name":"uint256","nodeType":"ElementaryTypeName","src":"3753:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5149,"mutability":"mutable","name":"y","nameLocation":"3772:1:39","nodeType":"VariableDeclaration","scope":5220,"src":"3764:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5148,"name":"uint256","nodeType":"ElementaryTypeName","src":"3764:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3752:22:39"},"returnParameters":{"id":5153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5152,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5220,"src":"3798:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5151,"name":"uint256","nodeType":"ElementaryTypeName","src":"3798:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3797:9:39"},"scope":5298,"src":"3736:794:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5286,"nodeType":"Block","src":"4829:568:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5230,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5225,"src":"4997:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5231,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5010,"src":"5002:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4997:8:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5236,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5225,"src":"5050:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5237,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5015,"src":"5055:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5050:8:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5245,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5225,"src":"5113:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5246,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5020,"src":"5118:4:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5113:9:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5282,"nodeType":"Block","src":"5225:166:39","statements":[{"assignments":[5262],"declarations":[{"constant":false,"id":5262,"mutability":"mutable","name":"raw","nameLocation":"5247:3:39","nodeType":"VariableDeclaration","scope":5282,"src":"5239:11:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5261,"name":"uint256","nodeType":"ElementaryTypeName","src":"5239:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5268,"initialValue":{"arguments":[{"id":5265,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5223,"src":"5268:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5266,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5225,"src":"5271:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5263,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6654,"src":"5253:10:39","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$6654_$","typeString":"type(library LogExpMath)"}},"id":5264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5264:3:39","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":5557,"src":"5253:14:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5253:20:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5239:34:39"},{"assignments":[5270],"declarations":[{"constant":false,"id":5270,"mutability":"mutable","name":"maxError","nameLocation":"5295:8:39","nodeType":"VariableDeclaration","scope":5282,"src":"5287:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5269,"name":"uint256","nodeType":"ElementaryTypeName","src":"5287:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5277,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5272,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5262,"src":"5312:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5273,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5023,"src":"5317:22:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5271,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5060,"src":"5306:5:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5306:34:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":5275,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5343:1:39","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5306:38:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5287:57:39"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5278,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5262,"src":"5366:3:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":5279,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5270,"src":"5372:8:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5366:14:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5229,"id":5281,"nodeType":"Return","src":"5359:21:39"}]},"id":5283,"nodeType":"IfStatement","src":"5109:282:39","trueBody":{"id":5260,"nodeType":"Block","src":"5124:95:39","statements":[{"assignments":[5249],"declarations":[{"constant":false,"id":5249,"mutability":"mutable","name":"square","nameLocation":"5146:6:39","nodeType":"VariableDeclaration","scope":5260,"src":"5138:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5248,"name":"uint256","nodeType":"ElementaryTypeName","src":"5138:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5254,"initialValue":{"arguments":[{"id":5251,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5223,"src":"5161:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5252,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5223,"src":"5164:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5250,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5060,"src":"5155:5:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5155:11:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5138:28:39"},{"expression":{"arguments":[{"id":5256,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5249,"src":"5193:6:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5257,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5249,"src":"5201:6:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5255,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5060,"src":"5187:5:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5187:21:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5229,"id":5259,"nodeType":"Return","src":"5180:28:39"}]}},"id":5284,"nodeType":"IfStatement","src":"5046:345:39","trueBody":{"id":5244,"nodeType":"Block","src":"5060:43:39","statements":[{"expression":{"arguments":[{"id":5240,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5223,"src":"5087:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5241,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5223,"src":"5090:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5239,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5060,"src":"5081:5:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5081:11:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5229,"id":5243,"nodeType":"Return","src":"5074:18:39"}]}},"id":5285,"nodeType":"IfStatement","src":"4993:398:39","trueBody":{"id":5235,"nodeType":"Block","src":"5007:33:39","statements":[{"expression":{"id":5233,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5223,"src":"5028:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5229,"id":5234,"nodeType":"Return","src":"5021:8:39"}]}}]},"documentation":{"id":5221,"nodeType":"StructuredDocumentation","src":"4536:219:39","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n the true value (that is, the error function expected - actual is always negative)."},"id":5287,"implemented":true,"kind":"function","modifiers":[],"name":"powUp","nameLocation":"4769:5:39","nodeType":"FunctionDefinition","parameters":{"id":5226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5223,"mutability":"mutable","name":"x","nameLocation":"4783:1:39","nodeType":"VariableDeclaration","scope":5287,"src":"4775:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5222,"name":"uint256","nodeType":"ElementaryTypeName","src":"4775:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5225,"mutability":"mutable","name":"y","nameLocation":"4794:1:39","nodeType":"VariableDeclaration","scope":5287,"src":"4786:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5224,"name":"uint256","nodeType":"ElementaryTypeName","src":"4786:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4774:22:39"},"returnParameters":{"id":5229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5228,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5287,"src":"4820:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5227,"name":"uint256","nodeType":"ElementaryTypeName","src":"4820:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4819:9:39"},"scope":5298,"src":"4760:637:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5296,"nodeType":"Block","src":"5750:175:39","statements":[{"AST":{"nativeSrc":"5857:62:39","nodeType":"YulBlock","src":"5857:62:39","statements":[{"nativeSrc":"5871:38:39","nodeType":"YulAssignment","src":"5871:38:39","value":{"arguments":[{"arguments":[{"name":"x","nativeSrc":"5888:1:39","nodeType":"YulIdentifier","src":"5888:1:39"},{"name":"ONE","nativeSrc":"5891:3:39","nodeType":"YulIdentifier","src":"5891:3:39"}],"functionName":{"name":"lt","nativeSrc":"5885:2:39","nodeType":"YulIdentifier","src":"5885:2:39"},"nativeSrc":"5885:10:39","nodeType":"YulFunctionCall","src":"5885:10:39"},{"arguments":[{"name":"ONE","nativeSrc":"5901:3:39","nodeType":"YulIdentifier","src":"5901:3:39"},{"name":"x","nativeSrc":"5906:1:39","nodeType":"YulIdentifier","src":"5906:1:39"}],"functionName":{"name":"sub","nativeSrc":"5897:3:39","nodeType":"YulIdentifier","src":"5897:3:39"},"nativeSrc":"5897:11:39","nodeType":"YulFunctionCall","src":"5897:11:39"}],"functionName":{"name":"mul","nativeSrc":"5881:3:39","nodeType":"YulIdentifier","src":"5881:3:39"},"nativeSrc":"5881:28:39","nodeType":"YulFunctionCall","src":"5881:28:39"},"variableNames":[{"name":"result","nativeSrc":"5871:6:39","nodeType":"YulIdentifier","src":"5871:6:39"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":5010,"isOffset":false,"isSlot":false,"src":"5891:3:39","valueSize":1},{"declaration":5010,"isOffset":false,"isSlot":false,"src":"5901:3:39","valueSize":1},{"declaration":5293,"isOffset":false,"isSlot":false,"src":"5871:6:39","valueSize":1},{"declaration":5290,"isOffset":false,"isSlot":false,"src":"5888:1:39","valueSize":1},{"declaration":5290,"isOffset":false,"isSlot":false,"src":"5906:1:39","valueSize":1}],"flags":["memory-safe"],"id":5295,"nodeType":"InlineAssembly","src":"5832:87:39"}]},"documentation":{"id":5288,"nodeType":"StructuredDocumentation","src":"5403:272:39","text":" @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n Useful when computing the complement for values with some level of relative error, as it strips this error and\n prevents intermediate negative values."},"id":5297,"implemented":true,"kind":"function","modifiers":[],"name":"complement","nameLocation":"5689:10:39","nodeType":"FunctionDefinition","parameters":{"id":5291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5290,"mutability":"mutable","name":"x","nameLocation":"5708:1:39","nodeType":"VariableDeclaration","scope":5297,"src":"5700:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5289,"name":"uint256","nodeType":"ElementaryTypeName","src":"5700:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5699:11:39"},"returnParameters":{"id":5294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5293,"mutability":"mutable","name":"result","nameLocation":"5742:6:39","nodeType":"VariableDeclaration","scope":5297,"src":"5734:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5292,"name":"uint256","nodeType":"ElementaryTypeName","src":"5734:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5733:16:39"},"scope":5298,"src":"5680:245:39","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":5299,"src":"239:5688:39","usedErrors":[5007],"usedEvents":[]}],"src":"46:5882:39"},"id":39},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","exportedSymbols":{"LogExpMath":[6654]},"id":6655,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":5300,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:40"},{"abstract":false,"baseContracts":[],"canonicalName":"LogExpMath","contractDependencies":[],"contractKind":"library","documentation":{"id":5301,"nodeType":"StructuredDocumentation","src":"79:515:40","text":" @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n exponentiation and logarithm (where the base is Euler's number).\n All math operations are unchecked in order to save gas.\n @author Fernando Martinelli - @fernandomartinelli\n @author Sergio Yuhjtman - @sergioyuhjtman\n @author Daniel Fernandez - @dmf7z"},"fullyImplemented":true,"id":6654,"linearizedBaseContracts":[6654],"name":"LogExpMath","nameLocation":"603:10:40","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":5302,"nodeType":"StructuredDocumentation","src":"620:79:40","text":"@notice This error is thrown when a base is not within an acceptable range."},"errorSelector":"022701e0","id":5304,"name":"BaseOutOfBounds","nameLocation":"710:15:40","nodeType":"ErrorDefinition","parameters":{"id":5303,"nodeType":"ParameterList","parameters":[],"src":"725:2:40"},"src":"704:24:40"},{"documentation":{"id":5305,"nodeType":"StructuredDocumentation","src":"734:83:40","text":"@notice This error is thrown when a exponent is not within an acceptable range."},"errorSelector":"d8317311","id":5307,"name":"ExponentOutOfBounds","nameLocation":"828:19:40","nodeType":"ErrorDefinition","parameters":{"id":5306,"nodeType":"ParameterList","parameters":[],"src":"847:2:40"},"src":"822:28:40"},{"documentation":{"id":5308,"nodeType":"StructuredDocumentation","src":"856:96:40","text":"@notice This error is thrown when the exponent * ln(base) is not within an acceptable range."},"errorSelector":"a2f9f7e3","id":5310,"name":"ProductOutOfBounds","nameLocation":"963:18:40","nodeType":"ErrorDefinition","parameters":{"id":5309,"nodeType":"ParameterList","parameters":[],"src":"981:2:40"},"src":"957:27:40"},{"documentation":{"id":5311,"nodeType":"StructuredDocumentation","src":"990:109:40","text":"@notice This error is thrown when an exponent used in the exp function is not within an acceptable range."},"errorSelector":"d4794efd","id":5313,"name":"InvalidExponent","nameLocation":"1110:15:40","nodeType":"ErrorDefinition","parameters":{"id":5312,"nodeType":"ParameterList","parameters":[],"src":"1125:2:40"},"src":"1104:24:40"},{"documentation":{"id":5314,"nodeType":"StructuredDocumentation","src":"1134:119:40","text":"@notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function."},"errorSelector":"b4120f14","id":5316,"name":"OutOfBounds","nameLocation":"1264:11:40","nodeType":"ErrorDefinition","parameters":{"id":5315,"nodeType":"ParameterList","parameters":[],"src":"1275:2:40"},"src":"1258:20:40"},{"constant":true,"id":5319,"mutability":"constant","name":"ONE_18","nameLocation":"1555:6:40","nodeType":"VariableDeclaration","scope":6654,"src":"1539:29:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5317,"name":"int256","nodeType":"ElementaryTypeName","src":"1539:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653138","id":5318,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1564:4:40","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":5322,"mutability":"constant","name":"ONE_20","nameLocation":"1745:6:40","nodeType":"VariableDeclaration","scope":6654,"src":"1729:29:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5320,"name":"int256","nodeType":"ElementaryTypeName","src":"1729:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653230","id":5321,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1754:4:40","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"1e20"},"visibility":"internal"},{"constant":true,"id":5325,"mutability":"constant","name":"ONE_36","nameLocation":"1780:6:40","nodeType":"VariableDeclaration","scope":6654,"src":"1764:29:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5323,"name":"int256","nodeType":"ElementaryTypeName","src":"1764:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653336","id":5324,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1789:4:40","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(29 digits omitted)...0000"},"value":"1e36"},"visibility":"internal"},{"constant":true,"id":5328,"mutability":"constant","name":"MAX_NATURAL_EXPONENT","nameLocation":"2326:20:40","nodeType":"VariableDeclaration","scope":6654,"src":"2310:45:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5326,"name":"int256","nodeType":"ElementaryTypeName","src":"2310:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313330653138","id":5327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2349:6:40","typeDescriptions":{"typeIdentifier":"t_rational_130000000000000000000_by_1","typeString":"int_const 130000000000000000000"},"value":"130e18"},"visibility":"internal"},{"constant":true,"id":5332,"mutability":"constant","name":"MIN_NATURAL_EXPONENT","nameLocation":"2377:20:40","nodeType":"VariableDeclaration","scope":6654,"src":"2361:45:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5329,"name":"int256","nodeType":"ElementaryTypeName","src":"2361:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"id":5331,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"2400:6:40","subExpression":{"hexValue":"3431653138","id":5330,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2401:5:40","typeDescriptions":{"typeIdentifier":"t_rational_41000000000000000000_by_1","typeString":"int_const 41000000000000000000"},"value":"41e18"},"typeDescriptions":{"typeIdentifier":"t_rational_minus_41000000000000000000_by_1","typeString":"int_const -41000000000000000000"}},"visibility":"internal"},{"constant":true,"id":5337,"mutability":"constant","name":"LN_36_LOWER_BOUND","nameLocation":"2573:17:40","nodeType":"VariableDeclaration","scope":6654,"src":"2557:49:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5333,"name":"int256","nodeType":"ElementaryTypeName","src":"2557:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5336,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5334,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"2593:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31653137","id":5335,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2602:4:40","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2593:13:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":5342,"mutability":"constant","name":"LN_36_UPPER_BOUND","nameLocation":"2628:17:40","nodeType":"VariableDeclaration","scope":6654,"src":"2612:49:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5338,"name":"int256","nodeType":"ElementaryTypeName","src":"2612:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5341,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5339,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"2648:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31653137","id":5340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2657:4:40","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2648:13:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":5352,"mutability":"constant","name":"MILD_EXPONENT_BOUND","nameLocation":"2685:19:40","nodeType":"VariableDeclaration","scope":6654,"src":"2668:65:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5343,"name":"uint256","nodeType":"ElementaryTypeName","src":"2668:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5351,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"},"id":5346,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":5344,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2707:1:40","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"323534","id":5345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2712:3:40","typeDescriptions":{"typeIdentifier":"t_rational_254_by_1","typeString":"int_const 254"},"value":"254"},"src":"2707:8:40","typeDescriptions":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"arguments":[{"id":5349,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"2726:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5348,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2718:7:40","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5347,"name":"uint256","nodeType":"ElementaryTypeName","src":"2718:7:40","typeDescriptions":{}}},"id":5350,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2718:15:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2707:26:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":5355,"mutability":"constant","name":"x0","nameLocation":"2784:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"2768:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5353,"name":"int256","nodeType":"ElementaryTypeName","src":"2768:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238303030303030303030303030303030303030","id":5354,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2789:21:40","typeDescriptions":{"typeIdentifier":"t_rational_128000000000000000000_by_1","typeString":"int_const 128000000000000000000"},"value":"128000000000000000000"},"visibility":"internal"},{"constant":true,"id":5358,"mutability":"constant","name":"a0","nameLocation":"2840:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"2824:77:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5356,"name":"int256","nodeType":"ElementaryTypeName","src":"2824:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3338383737303834303539393435393530393232323030303030303030303030303030303030303030303030303030303030303030303030","id":5357,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2845:56:40","typeDescriptions":{"typeIdentifier":"t_rational_38877084059945950922200000000000000000000000000000000000_by_1","typeString":"int_const 3887...(48 digits omitted)...0000"},"value":"38877084059945950922200000000000000000000000000000000000"},"visibility":"internal"},{"constant":true,"id":5361,"mutability":"constant","name":"x1","nameLocation":"2948:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"2932:41:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5359,"name":"int256","nodeType":"ElementaryTypeName","src":"2932:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3634303030303030303030303030303030303030","id":5360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2953:20:40","typeDescriptions":{"typeIdentifier":"t_rational_64000000000000000000_by_1","typeString":"int_const 64000000000000000000"},"value":"64000000000000000000"},"visibility":"internal"},{"constant":true,"id":5364,"mutability":"constant","name":"a1","nameLocation":"3003:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"2987:49:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5362,"name":"int256","nodeType":"ElementaryTypeName","src":"2987:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323335313439303830383131363136383832393130303030303030","id":5363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3008:28:40","typeDescriptions":{"typeIdentifier":"t_rational_6235149080811616882910000000_by_1","typeString":"int_const 6235149080811616882910000000"},"value":"6235149080811616882910000000"},"visibility":"internal"},{"constant":true,"id":5367,"mutability":"constant","name":"x2","nameLocation":"3112:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3096:43:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5365,"name":"int256","nodeType":"ElementaryTypeName","src":"3096:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"33323030303030303030303030303030303030303030","id":5366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3117:22:40","typeDescriptions":{"typeIdentifier":"t_rational_3200000000000000000000_by_1","typeString":"int_const 3200000000000000000000"},"value":"3200000000000000000000"},"visibility":"internal"},{"constant":true,"id":5370,"mutability":"constant","name":"a2","nameLocation":"3169:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3153:55:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5368,"name":"int256","nodeType":"ElementaryTypeName","src":"3153:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"37383936323936303138323638303639353136313030303030303030303030303030","id":5369,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3174:34:40","typeDescriptions":{"typeIdentifier":"t_rational_7896296018268069516100000000000000_by_1","typeString":"int_const 7896...(26 digits omitted)...0000"},"value":"7896296018268069516100000000000000"},"visibility":"internal"},{"constant":true,"id":5373,"mutability":"constant","name":"x3","nameLocation":"3241:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3225:43:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5371,"name":"int256","nodeType":"ElementaryTypeName","src":"3225:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31363030303030303030303030303030303030303030","id":5372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3246:22:40","typeDescriptions":{"typeIdentifier":"t_rational_1600000000000000000000_by_1","typeString":"int_const 1600000000000000000000"},"value":"1600000000000000000000"},"visibility":"internal"},{"constant":true,"id":5376,"mutability":"constant","name":"a3","nameLocation":"3298:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3282:48:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5374,"name":"int256","nodeType":"ElementaryTypeName","src":"3282:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383838363131303532303530373837323633363736303030303030","id":5375,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3303:27:40","typeDescriptions":{"typeIdentifier":"t_rational_888611052050787263676000000_by_1","typeString":"int_const 888611052050787263676000000"},"value":"888611052050787263676000000"},"visibility":"internal"},{"constant":true,"id":5379,"mutability":"constant","name":"x4","nameLocation":"3363:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3347:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5377,"name":"int256","nodeType":"ElementaryTypeName","src":"3347:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383030303030303030303030303030303030303030","id":5378,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3368:21:40","typeDescriptions":{"typeIdentifier":"t_rational_800000000000000000000_by_1","typeString":"int_const 800000000000000000000"},"value":"800000000000000000000"},"visibility":"internal"},{"constant":true,"id":5382,"mutability":"constant","name":"a4","nameLocation":"3419:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3403:45:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5380,"name":"int256","nodeType":"ElementaryTypeName","src":"3403:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323938303935373938373034313732383237343734303030","id":5381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3424:24:40","typeDescriptions":{"typeIdentifier":"t_rational_298095798704172827474000_by_1","typeString":"int_const 298095798704172827474000"},"value":"298095798704172827474000"},"visibility":"internal"},{"constant":true,"id":5385,"mutability":"constant","name":"x5","nameLocation":"3481:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3465:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5383,"name":"int256","nodeType":"ElementaryTypeName","src":"3465:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"343030303030303030303030303030303030303030","id":5384,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3486:21:40","typeDescriptions":{"typeIdentifier":"t_rational_400000000000000000000_by_1","typeString":"int_const 400000000000000000000"},"value":"400000000000000000000"},"visibility":"internal"},{"constant":true,"id":5388,"mutability":"constant","name":"a5","nameLocation":"3537:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3521:43:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5386,"name":"int256","nodeType":"ElementaryTypeName","src":"3521:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"35343539383135303033333134343233393037383130","id":5387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3542:22:40","typeDescriptions":{"typeIdentifier":"t_rational_5459815003314423907810_by_1","typeString":"int_const 5459815003314423907810"},"value":"5459815003314423907810"},"visibility":"internal"},{"constant":true,"id":5391,"mutability":"constant","name":"x6","nameLocation":"3597:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3581:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5389,"name":"int256","nodeType":"ElementaryTypeName","src":"3581:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323030303030303030303030303030303030303030","id":5390,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3602:21:40","typeDescriptions":{"typeIdentifier":"t_rational_200000000000000000000_by_1","typeString":"int_const 200000000000000000000"},"value":"200000000000000000000"},"visibility":"internal"},{"constant":true,"id":5394,"mutability":"constant","name":"a6","nameLocation":"3653:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3637:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5392,"name":"int256","nodeType":"ElementaryTypeName","src":"3637:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"373338393035363039383933303635303232373233","id":5393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3658:21:40","typeDescriptions":{"typeIdentifier":"t_rational_738905609893065022723_by_1","typeString":"int_const 738905609893065022723"},"value":"738905609893065022723"},"visibility":"internal"},{"constant":true,"id":5397,"mutability":"constant","name":"x7","nameLocation":"3712:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3696:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5395,"name":"int256","nodeType":"ElementaryTypeName","src":"3696:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313030303030303030303030303030303030303030","id":5396,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3717:21:40","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"100000000000000000000"},"visibility":"internal"},{"constant":true,"id":5400,"mutability":"constant","name":"a7","nameLocation":"3768:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3752:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5398,"name":"int256","nodeType":"ElementaryTypeName","src":"3752:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323731383238313832383435393034353233353336","id":5399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3773:21:40","typeDescriptions":{"typeIdentifier":"t_rational_271828182845904523536_by_1","typeString":"int_const 271828182845904523536"},"value":"271828182845904523536"},"visibility":"internal"},{"constant":true,"id":5403,"mutability":"constant","name":"x8","nameLocation":"3827:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3811:41:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5401,"name":"int256","nodeType":"ElementaryTypeName","src":"3811:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3530303030303030303030303030303030303030","id":5402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3832:20:40","typeDescriptions":{"typeIdentifier":"t_rational_50000000000000000000_by_1","typeString":"int_const 50000000000000000000"},"value":"50000000000000000000"},"visibility":"internal"},{"constant":true,"id":5406,"mutability":"constant","name":"a8","nameLocation":"3883:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3867:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5404,"name":"int256","nodeType":"ElementaryTypeName","src":"3867:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313634383732313237303730303132383134363835","id":5405,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3888:21:40","typeDescriptions":{"typeIdentifier":"t_rational_164872127070012814685_by_1","typeString":"int_const 164872127070012814685"},"value":"164872127070012814685"},"visibility":"internal"},{"constant":true,"id":5409,"mutability":"constant","name":"x9","nameLocation":"3942:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3926:41:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5407,"name":"int256","nodeType":"ElementaryTypeName","src":"3926:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3235303030303030303030303030303030303030","id":5408,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3947:20:40","typeDescriptions":{"typeIdentifier":"t_rational_25000000000000000000_by_1","typeString":"int_const 25000000000000000000"},"value":"25000000000000000000"},"visibility":"internal"},{"constant":true,"id":5412,"mutability":"constant","name":"a9","nameLocation":"3998:2:40","nodeType":"VariableDeclaration","scope":6654,"src":"3982:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5410,"name":"int256","nodeType":"ElementaryTypeName","src":"3982:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238343032353431363638373734313438343037","id":5411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4003:21:40","typeDescriptions":{"typeIdentifier":"t_rational_128402541668774148407_by_1","typeString":"int_const 128402541668774148407"},"value":"128402541668774148407"},"visibility":"internal"},{"constant":true,"id":5415,"mutability":"constant","name":"x10","nameLocation":"4057:3:40","nodeType":"VariableDeclaration","scope":6654,"src":"4041:42:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5413,"name":"int256","nodeType":"ElementaryTypeName","src":"4041:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3132353030303030303030303030303030303030","id":5414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4063:20:40","typeDescriptions":{"typeIdentifier":"t_rational_12500000000000000000_by_1","typeString":"int_const 12500000000000000000"},"value":"12500000000000000000"},"visibility":"internal"},{"constant":true,"id":5418,"mutability":"constant","name":"a10","nameLocation":"4114:3:40","nodeType":"VariableDeclaration","scope":6654,"src":"4098:43:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5416,"name":"int256","nodeType":"ElementaryTypeName","src":"4098:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313133333134383435333036363832363331363833","id":5417,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4120:21:40","typeDescriptions":{"typeIdentifier":"t_rational_113314845306682631683_by_1","typeString":"int_const 113314845306682631683"},"value":"113314845306682631683"},"visibility":"internal"},{"constant":true,"id":5421,"mutability":"constant","name":"x11","nameLocation":"4175:3:40","nodeType":"VariableDeclaration","scope":6654,"src":"4159:41:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5419,"name":"int256","nodeType":"ElementaryTypeName","src":"4159:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323530303030303030303030303030303030","id":5420,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4181:19:40","typeDescriptions":{"typeIdentifier":"t_rational_6250000000000000000_by_1","typeString":"int_const 6250000000000000000"},"value":"6250000000000000000"},"visibility":"internal"},{"constant":true,"id":5424,"mutability":"constant","name":"a11","nameLocation":"4231:3:40","nodeType":"VariableDeclaration","scope":6654,"src":"4215:43:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5422,"name":"int256","nodeType":"ElementaryTypeName","src":"4215:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313036343439343435383931373835393432393536","id":5423,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4237:21:40","typeDescriptions":{"typeIdentifier":"t_rational_106449445891785942956_by_1","typeString":"int_const 106449445891785942956"},"value":"106449445891785942956"},"visibility":"internal"},{"body":{"id":5556,"nodeType":"Block","src":"4563:2233:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5434,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5429,"src":"4577:1:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5435,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4582:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4577:6:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5443,"nodeType":"IfStatement","src":"4573:131:40","trueBody":{"id":5442,"nodeType":"Block","src":"4585:119:40","statements":[{"expression":{"arguments":[{"id":5439,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"4686:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5438,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4678:7:40","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5437,"name":"uint256","nodeType":"ElementaryTypeName","src":"4678:7:40","typeDescriptions":{}}},"id":5440,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4678:15:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5433,"id":5441,"nodeType":"Return","src":"4671:22:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5444,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5427,"src":"4718:1:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4723:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4718:6:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5450,"nodeType":"IfStatement","src":"4714:45:40","trueBody":{"id":5449,"nodeType":"Block","src":"4726:33:40","statements":[{"expression":{"hexValue":"30","id":5447,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4747:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":5433,"id":5448,"nodeType":"Return","src":"4740:8:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5451,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5427,"src":"5133:1:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":5452,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5138:3:40","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"5133:8:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":5454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5145:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5133:13:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5460,"nodeType":"IfStatement","src":"5129:68:40","trueBody":{"id":5459,"nodeType":"Block","src":"5148:49:40","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5456,"name":"BaseOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"5169:15:40","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5169:17:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5458,"nodeType":"RevertStatement","src":"5162:24:40"}]}},{"assignments":[5462],"declarations":[{"constant":false,"id":5462,"mutability":"mutable","name":"x_int256","nameLocation":"5213:8:40","nodeType":"VariableDeclaration","scope":5556,"src":"5206:15:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5461,"name":"int256","nodeType":"ElementaryTypeName","src":"5206:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5467,"initialValue":{"arguments":[{"id":5465,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5427,"src":"5231:1:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5464,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5224:6:40","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":5463,"name":"int256","nodeType":"ElementaryTypeName","src":"5224:6:40","typeDescriptions":{}}},"id":5466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5224:9:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5206:27:40"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5468,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5429,"src":"5591:1:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5469,"name":"MILD_EXPONENT_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5352,"src":"5596:19:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5591:24:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5475,"nodeType":"IfStatement","src":"5587:83:40","trueBody":{"id":5474,"nodeType":"Block","src":"5617:53:40","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5471,"name":"ExponentOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"5638:19:40","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5638:21:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5473,"nodeType":"RevertStatement","src":"5631:28:40"}]}},{"assignments":[5477],"declarations":[{"constant":false,"id":5477,"mutability":"mutable","name":"y_int256","nameLocation":"5686:8:40","nodeType":"VariableDeclaration","scope":5556,"src":"5679:15:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5476,"name":"int256","nodeType":"ElementaryTypeName","src":"5679:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5482,"initialValue":{"arguments":[{"id":5480,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5429,"src":"5704:1:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5479,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5697:6:40","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":5478,"name":"int256","nodeType":"ElementaryTypeName","src":"5697:6:40","typeDescriptions":{}}},"id":5481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5697:9:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5679:27:40"},{"assignments":[5484],"declarations":[{"constant":false,"id":5484,"mutability":"mutable","name":"logx_times_y","nameLocation":"5724:12:40","nodeType":"VariableDeclaration","scope":5556,"src":"5717:19:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5483,"name":"int256","nodeType":"ElementaryTypeName","src":"5717:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5485,"nodeType":"VariableDeclarationStatement","src":"5717:19:40"},{"id":5534,"nodeType":"UncheckedBlock","src":"5746:790:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5486,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5337,"src":"5774:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5487,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5462,"src":"5794:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5774:28:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5489,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5462,"src":"5806:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5490,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5342,"src":"5817:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5806:28:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5774:60:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5528,"nodeType":"Block","src":"6418:72:40","statements":[{"expression":{"id":5526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5520,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5484,"src":"6436:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5522,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5462,"src":"6455:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5521,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6498,"src":"6451:3:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6451:13:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5524,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5477,"src":"6467:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6451:24:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6436:39:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5527,"nodeType":"ExpressionStatement","src":"6436:39:40"}]},"id":5529,"nodeType":"IfStatement","src":"5770:720:40","trueBody":{"id":5519,"nodeType":"Block","src":"5836:576:40","statements":[{"assignments":[5494],"declarations":[{"constant":false,"id":5494,"mutability":"mutable","name":"ln_36_x","nameLocation":"5861:7:40","nodeType":"VariableDeclaration","scope":5519,"src":"5854:14:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5493,"name":"int256","nodeType":"ElementaryTypeName","src":"5854:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5498,"initialValue":{"arguments":[{"id":5496,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5462,"src":"5878:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5495,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6653,"src":"5871:6:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5871:16:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5854:33:40"},{"expression":{"id":5517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5499,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5484,"src":"6308:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5500,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5494,"src":"6325:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5501,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"6335:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6325:16:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5503,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6324:18:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5504,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5477,"src":"6345:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:29:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5506,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5494,"src":"6358:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":5507,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"6368:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6358:16:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5509,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6357:18:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5510,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5477,"src":"6378:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6357:29:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5512,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6356:31:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5513,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"6390:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6356:40:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:72:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5516,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6323:74:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6308:89:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5518,"nodeType":"ExpressionStatement","src":"6308:89:40"}]}},{"expression":{"id":5532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5530,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5484,"src":"6503:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":5531,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"6519:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6503:22:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5533,"nodeType":"ExpressionStatement","src":"6503:22:40"}]},{"condition":{"id":5543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6613:79:40","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5535,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5332,"src":"6615:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":5536,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5484,"src":"6639:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6615:36:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5538,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5484,"src":"6655:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":5539,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5328,"src":"6671:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6655:36:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6615:76:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5542,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6614:78:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5548,"nodeType":"IfStatement","src":"6609:137:40","trueBody":{"id":5547,"nodeType":"Block","src":"6694:52:40","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5544,"name":"ProductOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5310,"src":"6715:18:40","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6715:20:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5546,"nodeType":"RevertStatement","src":"6708:27:40"}]}},{"expression":{"arguments":[{"arguments":[{"id":5552,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5484,"src":"6775:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5551,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6004,"src":"6771:3:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6771:17:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5550,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6763:7:40","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5549,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:40","typeDescriptions":{}}},"id":5554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6763:26:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5433,"id":5555,"nodeType":"Return","src":"6756:33:40"}]},"documentation":{"id":5425,"nodeType":"StructuredDocumentation","src":"4277:214:40","text":" @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`."},"id":5557,"implemented":true,"kind":"function","modifiers":[],"name":"pow","nameLocation":"4505:3:40","nodeType":"FunctionDefinition","parameters":{"id":5430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5427,"mutability":"mutable","name":"x","nameLocation":"4517:1:40","nodeType":"VariableDeclaration","scope":5557,"src":"4509:9:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5426,"name":"uint256","nodeType":"ElementaryTypeName","src":"4509:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5429,"mutability":"mutable","name":"y","nameLocation":"4528:1:40","nodeType":"VariableDeclaration","scope":5557,"src":"4520:9:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5428,"name":"uint256","nodeType":"ElementaryTypeName","src":"4520:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4508:22:40"},"returnParameters":{"id":5433,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5432,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5557,"src":"4554:7:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5431,"name":"uint256","nodeType":"ElementaryTypeName","src":"4554:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4553:9:40"},"scope":6654,"src":"4496:2300:40","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6003,"nodeType":"Block","src":"7064:6082:40","statements":[{"condition":{"id":5573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7078:57:40","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5565,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"7080:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5566,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5332,"src":"7085:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7080:25:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5568,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"7109:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":5569,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5328,"src":"7114:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7109:25:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7080:54:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5572,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7079:56:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5578,"nodeType":"IfStatement","src":"7074:112:40","trueBody":{"id":5577,"nodeType":"Block","src":"7137:49:40","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5574,"name":"InvalidExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5313,"src":"7158:15:40","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7158:17:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5576,"nodeType":"RevertStatement","src":"7151:24:40"}]}},{"assignments":[5580],"declarations":[{"constant":false,"id":5580,"mutability":"mutable","name":"negativeExponent","nameLocation":"7277:16:40","nodeType":"VariableDeclaration","scope":6003,"src":"7272:21:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5579,"name":"bool","nodeType":"ElementaryTypeName","src":"7272:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5582,"initialValue":{"hexValue":"66616c7365","id":5581,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7296:5:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"7272:29:40"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5583,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"7316:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":5584,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7320:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7316:5:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5597,"nodeType":"IfStatement","src":"7312:417:40","trueBody":{"id":5596,"nodeType":"Block","src":"7323:406:40","statements":[{"id":5591,"nodeType":"UncheckedBlock","src":"7633:49:40","statements":[{"expression":{"id":5589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5586,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"7661:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"7665:2:40","subExpression":{"id":5587,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"7666:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7661:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5590,"nodeType":"ExpressionStatement","src":"7661:6:40"}]},{"expression":{"id":5594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5592,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5580,"src":"7695:16:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":5593,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7714:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"7695:23:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5595,"nodeType":"ExpressionStatement","src":"7695:23:40"}]}},{"assignments":[5599],"declarations":[{"constant":false,"id":5599,"mutability":"mutable","name":"firstAN","nameLocation":"9037:7:40","nodeType":"VariableDeclaration","scope":6003,"src":"9030:14:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5598,"name":"int256","nodeType":"ElementaryTypeName","src":"9030:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5600,"nodeType":"VariableDeclarationStatement","src":"9030:14:40"},{"id":5636,"nodeType":"UncheckedBlock","src":"9054:457:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5601,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"9082:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5602,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5355,"src":"9087:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9082:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5613,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"9171:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5614,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5361,"src":"9176:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9171:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5629,"nodeType":"Block","src":"9256:74:40","statements":[{"expression":{"id":5627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5625,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5599,"src":"9274:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":5626,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9284:1:40","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9274:11:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5628,"nodeType":"ExpressionStatement","src":"9274:11:40"}]},"id":5630,"nodeType":"IfStatement","src":"9167:163:40","trueBody":{"id":5624,"nodeType":"Block","src":"9180:70:40","statements":[{"expression":{"id":5618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5616,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"9198:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5617,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5361,"src":"9203:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9198:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5619,"nodeType":"ExpressionStatement","src":"9198:7:40"},{"expression":{"id":5622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5620,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5599,"src":"9223:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5621,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5364,"src":"9233:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9223:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5623,"nodeType":"ExpressionStatement","src":"9223:12:40"}]}},"id":5631,"nodeType":"IfStatement","src":"9078:252:40","trueBody":{"id":5612,"nodeType":"Block","src":"9091:70:40","statements":[{"expression":{"id":5606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5604,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"9109:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5605,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5355,"src":"9114:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9109:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5607,"nodeType":"ExpressionStatement","src":"9109:7:40"},{"expression":{"id":5610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5608,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5599,"src":"9134:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5609,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5358,"src":"9144:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9134:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5611,"nodeType":"ExpressionStatement","src":"9134:12:40"}]}},{"expression":{"id":5634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5632,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"9492:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":5633,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9497:3:40","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"9492:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5635,"nodeType":"ExpressionStatement","src":"9492:8:40"}]},{"assignments":[5638],"declarations":[{"constant":false,"id":5638,"mutability":"mutable","name":"product","nameLocation":"9730:7:40","nodeType":"VariableDeclaration","scope":6003,"src":"9723:14:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5637,"name":"int256","nodeType":"ElementaryTypeName","src":"9723:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5640,"initialValue":{"id":5639,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"9740:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"9723:23:40"},{"id":5785,"nodeType":"UncheckedBlock","src":"9757:957:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5641,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"9785:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5642,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5367,"src":"9790:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9785:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5658,"nodeType":"IfStatement","src":"9781:104:40","trueBody":{"id":5657,"nodeType":"Block","src":"9794:91:40","statements":[{"expression":{"id":5646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5644,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"9812:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5645,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5367,"src":"9817:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9812:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5647,"nodeType":"ExpressionStatement","src":"9812:7:40"},{"expression":{"id":5655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5648,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"9837:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5649,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"9848:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5650,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5370,"src":"9858:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9848:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5652,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9847:14:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5653,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"9864:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9847:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9837:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5656,"nodeType":"ExpressionStatement","src":"9837:33:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5659,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"9902:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5660,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5373,"src":"9907:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9902:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5676,"nodeType":"IfStatement","src":"9898:104:40","trueBody":{"id":5675,"nodeType":"Block","src":"9911:91:40","statements":[{"expression":{"id":5664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5662,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"9929:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5663,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5373,"src":"9934:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9929:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5665,"nodeType":"ExpressionStatement","src":"9929:7:40"},{"expression":{"id":5673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5666,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"9954:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5667,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"9965:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5668,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5376,"src":"9975:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9965:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5670,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9964:14:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5671,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"9981:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9964:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9954:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5674,"nodeType":"ExpressionStatement","src":"9954:33:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5677,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10019:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5678,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5379,"src":"10024:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10019:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5694,"nodeType":"IfStatement","src":"10015:104:40","trueBody":{"id":5693,"nodeType":"Block","src":"10028:91:40","statements":[{"expression":{"id":5682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5680,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10046:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5681,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5379,"src":"10051:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10046:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5683,"nodeType":"ExpressionStatement","src":"10046:7:40"},{"expression":{"id":5691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5684,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10071:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5685,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10082:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5686,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"10092:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10082:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5688,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10081:14:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5689,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"10098:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10081:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10071:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5692,"nodeType":"ExpressionStatement","src":"10071:33:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5695,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10136:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5696,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5385,"src":"10141:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10136:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5712,"nodeType":"IfStatement","src":"10132:104:40","trueBody":{"id":5711,"nodeType":"Block","src":"10145:91:40","statements":[{"expression":{"id":5700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5698,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10163:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5699,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5385,"src":"10168:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10163:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5701,"nodeType":"ExpressionStatement","src":"10163:7:40"},{"expression":{"id":5709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5702,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10188:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5703,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10199:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5704,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5388,"src":"10209:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10199:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5706,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10198:14:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5707,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"10215:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10198:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10188:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5710,"nodeType":"ExpressionStatement","src":"10188:33:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5713,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10253:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5714,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5391,"src":"10258:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10253:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5730,"nodeType":"IfStatement","src":"10249:104:40","trueBody":{"id":5729,"nodeType":"Block","src":"10262:91:40","statements":[{"expression":{"id":5718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5716,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10280:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5717,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5391,"src":"10285:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10280:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5719,"nodeType":"ExpressionStatement","src":"10280:7:40"},{"expression":{"id":5727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5720,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10305:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5721,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10316:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5722,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5394,"src":"10326:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10316:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5724,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10315:14:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5725,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"10332:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10315:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10305:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5728,"nodeType":"ExpressionStatement","src":"10305:33:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5731,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10370:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5732,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5397,"src":"10375:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10370:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5748,"nodeType":"IfStatement","src":"10366:104:40","trueBody":{"id":5747,"nodeType":"Block","src":"10379:91:40","statements":[{"expression":{"id":5736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5734,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10397:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5735,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5397,"src":"10402:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10397:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5737,"nodeType":"ExpressionStatement","src":"10397:7:40"},{"expression":{"id":5745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5738,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10422:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5739,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10433:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5740,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5400,"src":"10443:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10433:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5742,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10432:14:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5743,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"10449:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10432:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10422:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5746,"nodeType":"ExpressionStatement","src":"10422:33:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5749,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10487:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5750,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5403,"src":"10492:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10487:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5766,"nodeType":"IfStatement","src":"10483:104:40","trueBody":{"id":5765,"nodeType":"Block","src":"10496:91:40","statements":[{"expression":{"id":5754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5752,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10514:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5753,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5403,"src":"10519:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10514:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5755,"nodeType":"ExpressionStatement","src":"10514:7:40"},{"expression":{"id":5763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5756,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10539:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5757,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10550:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5758,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5406,"src":"10560:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10550:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5760,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10549:14:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5761,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"10566:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10549:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10539:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5764,"nodeType":"ExpressionStatement","src":"10539:33:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5767,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10604:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5768,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5409,"src":"10609:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10604:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5784,"nodeType":"IfStatement","src":"10600:104:40","trueBody":{"id":5783,"nodeType":"Block","src":"10613:91:40","statements":[{"expression":{"id":5772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5770,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"10631:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5771,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5409,"src":"10636:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10631:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5773,"nodeType":"ExpressionStatement","src":"10631:7:40"},{"expression":{"id":5781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5774,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10656:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5775,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"10667:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5776,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5412,"src":"10677:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10667:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5778,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10666:14:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5779,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"10683:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10666:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10656:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5782,"nodeType":"ExpressionStatement","src":"10656:33:40"}]}}]},{"assignments":[5787],"declarations":[{"constant":false,"id":5787,"mutability":"mutable","name":"seriesSum","nameLocation":"11025:9:40","nodeType":"VariableDeclaration","scope":6003,"src":"11018:16:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5786,"name":"int256","nodeType":"ElementaryTypeName","src":"11018:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5789,"initialValue":{"id":5788,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"11037:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"11018:25:40"},{"assignments":[5791],"declarations":[{"constant":false,"id":5791,"mutability":"mutable","name":"term","nameLocation":"11115:4:40","nodeType":"VariableDeclaration","scope":6003,"src":"11108:11:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5790,"name":"int256","nodeType":"ElementaryTypeName","src":"11108:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5792,"nodeType":"VariableDeclarationStatement","src":"11108:11:40"},{"expression":{"id":5795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5793,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11228:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5794,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"11235:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11228:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5796,"nodeType":"ExpressionStatement","src":"11228:8:40"},{"id":6002,"nodeType":"UncheckedBlock","src":"11246:1894:40","statements":[{"expression":{"id":5799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5797,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"11270:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5798,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11283:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11270:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5800,"nodeType":"ExpressionStatement","src":"11270:17:40"},{"expression":{"id":5811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5801,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11536:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5802,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11545:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5803,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"11552:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11545:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5805,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11544:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5806,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"11557:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11544:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5808,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11543:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":5809,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11567:1:40","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11543:25:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11536:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5812,"nodeType":"ExpressionStatement","src":"11536:32:40"},{"expression":{"id":5815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5813,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"11582:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5814,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11595:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11582:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5816,"nodeType":"ExpressionStatement","src":"11582:17:40"},{"expression":{"id":5827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5817,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11614:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5818,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11623:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5819,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"11630:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11623:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5821,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11622:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5822,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"11635:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11622:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5824,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11621:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":5825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11645:1:40","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"11621:25:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11614:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5828,"nodeType":"ExpressionStatement","src":"11614:32:40"},{"expression":{"id":5831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5829,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"11660:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5830,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11673:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11660:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5832,"nodeType":"ExpressionStatement","src":"11660:17:40"},{"expression":{"id":5843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5833,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11692:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5834,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11701:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5835,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"11708:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11701:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5837,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11700:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5838,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"11713:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11700:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5840,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11699:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"34","id":5841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11723:1:40","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11699:25:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11692:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5844,"nodeType":"ExpressionStatement","src":"11692:32:40"},{"expression":{"id":5847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5845,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"11738:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5846,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11751:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11738:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5848,"nodeType":"ExpressionStatement","src":"11738:17:40"},{"expression":{"id":5859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5849,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11770:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5850,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11779:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5851,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"11786:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11779:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5853,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11778:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5854,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"11791:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11778:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5856,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11777:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":5857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11801:1:40","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"11777:25:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11770:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5860,"nodeType":"ExpressionStatement","src":"11770:32:40"},{"expression":{"id":5863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5861,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"11816:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5862,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11829:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11816:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5864,"nodeType":"ExpressionStatement","src":"11816:17:40"},{"expression":{"id":5875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5865,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11848:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5866,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11857:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5867,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"11864:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11857:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5869,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11856:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5870,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"11869:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11856:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5872,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11855:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"36","id":5873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11879:1:40","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"11855:25:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11848:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5876,"nodeType":"ExpressionStatement","src":"11848:32:40"},{"expression":{"id":5879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5877,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"11894:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5878,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11907:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11894:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5880,"nodeType":"ExpressionStatement","src":"11894:17:40"},{"expression":{"id":5891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5881,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11926:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5882,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11935:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5883,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"11942:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11935:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5885,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11934:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5886,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"11947:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11934:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5888,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11933:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":5889,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11957:1:40","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"11933:25:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11926:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5892,"nodeType":"ExpressionStatement","src":"11926:32:40"},{"expression":{"id":5895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5893,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"11972:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5894,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"11985:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11972:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5896,"nodeType":"ExpressionStatement","src":"11972:17:40"},{"expression":{"id":5907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5897,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12004:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5898,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12013:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5899,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"12020:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12013:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5901,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12012:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5902,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"12025:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12012:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5904,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12011:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"38","id":5905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12035:1:40","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12011:25:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12004:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5908,"nodeType":"ExpressionStatement","src":"12004:32:40"},{"expression":{"id":5911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5909,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"12050:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5910,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12063:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12050:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5912,"nodeType":"ExpressionStatement","src":"12050:17:40"},{"expression":{"id":5923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5913,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12082:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5914,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12091:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5915,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"12098:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12091:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5917,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12090:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5918,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"12103:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12090:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5920,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12089:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":5921,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12113:1:40","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"12089:25:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12082:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5924,"nodeType":"ExpressionStatement","src":"12082:32:40"},{"expression":{"id":5927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5925,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"12128:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5926,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12141:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12128:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5928,"nodeType":"ExpressionStatement","src":"12128:17:40"},{"expression":{"id":5939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5929,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12160:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5930,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12169:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5931,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"12176:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12169:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5933,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12168:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5934,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"12181:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12168:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5936,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12167:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":5937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12191:2:40","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"12167:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12160:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5940,"nodeType":"ExpressionStatement","src":"12160:33:40"},{"expression":{"id":5943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5941,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"12207:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5942,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12220:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12207:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5944,"nodeType":"ExpressionStatement","src":"12207:17:40"},{"expression":{"id":5955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5945,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12239:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5946,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12248:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5947,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"12255:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12248:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5949,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12247:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5950,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"12260:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12247:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5952,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12246:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":5953,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12270:2:40","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"12246:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12239:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5956,"nodeType":"ExpressionStatement","src":"12239:33:40"},{"expression":{"id":5959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5957,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"12286:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5958,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12299:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12286:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5960,"nodeType":"ExpressionStatement","src":"12286:17:40"},{"expression":{"id":5971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5961,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12318:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5962,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12327:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5963,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5560,"src":"12334:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12327:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5965,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12326:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5966,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"12339:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12326:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5968,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12325:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3132","id":5969,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12349:2:40","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"12"},"src":"12325:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12318:33:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5972,"nodeType":"ExpressionStatement","src":"12318:33:40"},{"expression":{"id":5975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5973,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"12365:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5974,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"12378:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12365:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5976,"nodeType":"ExpressionStatement","src":"12365:17:40"},{"assignments":[5978],"declarations":[{"constant":false,"id":5978,"mutability":"mutable","name":"result","nameLocation":"12914:6:40","nodeType":"VariableDeclaration","scope":6002,"src":"12907:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5977,"name":"int256","nodeType":"ElementaryTypeName","src":"12907:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5991,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5979,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5638,"src":"12926:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5980,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5787,"src":"12936:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12926:19:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5982,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12925:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5983,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"12949:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12925:30:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5985,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12924:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5986,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5599,"src":"12959:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12924:42:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5988,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12923:44:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":5989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12970:3:40","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"12923:50:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"12907:66:40"},{"expression":{"condition":{"id":5992,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5580,"src":"13075:16:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":5999,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5978,"src":"13123:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"13075:54:40","trueExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5995,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5993,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"13095:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5994,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"13104:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13095:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5996,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"13094:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5997,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5978,"src":"13114:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13094:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5564,"id":6001,"nodeType":"Return","src":"13068:61:40"}]}]},"documentation":{"id":5558,"nodeType":"StructuredDocumentation","src":"6802:203:40","text":" @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`."},"id":6004,"implemented":true,"kind":"function","modifiers":[],"name":"exp","nameLocation":"7019:3:40","nodeType":"FunctionDefinition","parameters":{"id":5561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5560,"mutability":"mutable","name":"x","nameLocation":"7030:1:40","nodeType":"VariableDeclaration","scope":6004,"src":"7023:8:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5559,"name":"int256","nodeType":"ElementaryTypeName","src":"7023:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7022:10:40"},"returnParameters":{"id":5564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5563,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6004,"src":"7056:6:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5562,"name":"int256","nodeType":"ElementaryTypeName","src":"7056:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7055:8:40"},"scope":6654,"src":"7010:6136:40","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6077,"nodeType":"Block","src":"13315:861:40","statements":[{"assignments":[6015],"declarations":[{"constant":false,"id":6015,"mutability":"mutable","name":"logBase","nameLocation":"13552:7:40","nodeType":"VariableDeclaration","scope":6077,"src":"13545:14:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6014,"name":"int256","nodeType":"ElementaryTypeName","src":"13545:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6016,"nodeType":"VariableDeclarationStatement","src":"13545:14:40"},{"id":6041,"nodeType":"UncheckedBlock","src":"13569:214:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6017,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5337,"src":"13597:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6018,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6009,"src":"13617:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13597:24:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6020,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6009,"src":"13625:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6021,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5342,"src":"13632:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13625:24:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13597:52:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6039,"nodeType":"Block","src":"13712:61:40","statements":[{"expression":{"id":6037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6031,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6015,"src":"13730:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6033,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6009,"src":"13744:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6032,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6498,"src":"13740:3:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":6034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13740:9:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6035,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"13752:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13740:18:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13730:28:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6038,"nodeType":"ExpressionStatement","src":"13730:28:40"}]},"id":6040,"nodeType":"IfStatement","src":"13593:180:40","trueBody":{"id":6030,"nodeType":"Block","src":"13651:55:40","statements":[{"expression":{"id":6028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6024,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6015,"src":"13669:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6026,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6009,"src":"13686:4:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6025,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6653,"src":"13679:6:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":6027,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13679:12:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13669:22:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6029,"nodeType":"ExpressionStatement","src":"13669:22:40"}]}}]},{"assignments":[6043],"declarations":[{"constant":false,"id":6043,"mutability":"mutable","name":"logArg","nameLocation":"13800:6:40","nodeType":"VariableDeclaration","scope":6077,"src":"13793:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6042,"name":"int256","nodeType":"ElementaryTypeName","src":"13793:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6044,"nodeType":"VariableDeclarationStatement","src":"13793:13:40"},{"id":6076,"nodeType":"UncheckedBlock","src":"13816:354:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6045,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5337,"src":"13844:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6046,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6007,"src":"13864:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13844:23:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6048,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6007,"src":"13871:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6049,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5342,"src":"13877:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13871:23:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13844:50:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6067,"nodeType":"Block","src":"13955:59:40","statements":[{"expression":{"id":6065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6059,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6043,"src":"13973:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6061,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6007,"src":"13986:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6060,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6498,"src":"13982:3:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":6062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13982:8:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6063,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"13993:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13982:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13973:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6066,"nodeType":"ExpressionStatement","src":"13973:26:40"}]},"id":6068,"nodeType":"IfStatement","src":"13840:174:40","trueBody":{"id":6058,"nodeType":"Block","src":"13896:53:40","statements":[{"expression":{"id":6056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6052,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6043,"src":"13914:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6054,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6007,"src":"13930:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6053,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6653,"src":"13923:6:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":6055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13923:11:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13914:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6057,"nodeType":"ExpressionStatement","src":"13914:20:40"}]}},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6069,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6043,"src":"14133:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6070,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"14142:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14133:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6072,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14132:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6073,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6015,"src":"14152:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14132:27:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":6013,"id":6075,"nodeType":"Return","src":"14125:34:40"}]}]},"documentation":{"id":6005,"nodeType":"StructuredDocumentation","src":"13152:89:40","text":"@dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument."},"id":6078,"implemented":true,"kind":"function","modifiers":[],"name":"log","nameLocation":"13255:3:40","nodeType":"FunctionDefinition","parameters":{"id":6010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6007,"mutability":"mutable","name":"arg","nameLocation":"13266:3:40","nodeType":"VariableDeclaration","scope":6078,"src":"13259:10:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6006,"name":"int256","nodeType":"ElementaryTypeName","src":"13259:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":6009,"mutability":"mutable","name":"base","nameLocation":"13278:4:40","nodeType":"VariableDeclaration","scope":6078,"src":"13271:11:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6008,"name":"int256","nodeType":"ElementaryTypeName","src":"13271:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13258:25:40"},"returnParameters":{"id":6013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6012,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6078,"src":"13307:6:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6011,"name":"int256","nodeType":"ElementaryTypeName","src":"13307:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13306:8:40"},"scope":6654,"src":"13246:930:40","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6115,"nodeType":"Block","src":"14319:353:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6086,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6081,"src":"14416:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"30","id":6087,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14421:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14416:6:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6093,"nodeType":"IfStatement","src":"14412:57:40","trueBody":{"id":6092,"nodeType":"Block","src":"14424:45:40","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6089,"name":"OutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5316,"src":"14445:11:40","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14445:13:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6091,"nodeType":"RevertStatement","src":"14438:20:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6094,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5337,"src":"14482:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6095,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6081,"src":"14502:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14482:21:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6097,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6081,"src":"14507:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6098,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5342,"src":"14511:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14507:21:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14482:46:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6113,"nodeType":"Block","src":"14628:38:40","statements":[{"expression":{"arguments":[{"id":6110,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6081,"src":"14653:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6109,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6498,"src":"14649:3:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":6111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14649:6:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":6085,"id":6112,"nodeType":"Return","src":"14642:13:40"}]},"id":6114,"nodeType":"IfStatement","src":"14478:188:40","trueBody":{"id":6108,"nodeType":"Block","src":"14530:92:40","statements":[{"id":6107,"nodeType":"UncheckedBlock","src":"14544:68:40","statements":[{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6102,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6081,"src":"14586:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6101,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6653,"src":"14579:6:40","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":6103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14579:9:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6104,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"14591:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14579:18:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":6085,"id":6106,"nodeType":"Return","src":"14572:25:40"}]}]}}]},"documentation":{"id":6079,"nodeType":"StructuredDocumentation","src":"14182:79:40","text":"@dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":6116,"implemented":true,"kind":"function","modifiers":[],"name":"ln","nameLocation":"14275:2:40","nodeType":"FunctionDefinition","parameters":{"id":6082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6081,"mutability":"mutable","name":"a","nameLocation":"14285:1:40","nodeType":"VariableDeclaration","scope":6116,"src":"14278:8:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6080,"name":"int256","nodeType":"ElementaryTypeName","src":"14278:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14277:10:40"},"returnParameters":{"id":6085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6084,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6116,"src":"14311:6:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6083,"name":"int256","nodeType":"ElementaryTypeName","src":"14311:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14310:8:40"},"scope":6654,"src":"14266:406:40","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6497,"nodeType":"Block","src":"14824:5531:40","statements":[{"assignments":[6125],"declarations":[{"constant":false,"id":6125,"mutability":"mutable","name":"negativeExponent","nameLocation":"14915:16:40","nodeType":"VariableDeclaration","scope":6497,"src":"14910:21:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6124,"name":"bool","nodeType":"ElementaryTypeName","src":"14910:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":6127,"initialValue":{"hexValue":"66616c7365","id":6126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14934:5:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"14910:29:40"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6128,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"14954:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6129,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"14958:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14954:10:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6146,"nodeType":"IfStatement","src":"14950:381:40","trueBody":{"id":6145,"nodeType":"Block","src":"14966:365:40","statements":[{"id":6140,"nodeType":"UncheckedBlock","src":"15216:68:40","statements":[{"expression":{"id":6138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6131,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"15244:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6134,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":6132,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"15249:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6133,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"15258:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15249:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6135,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"15248:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6136,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"15268:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15248:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15244:25:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6139,"nodeType":"ExpressionStatement","src":"15244:25:40"}]},{"expression":{"id":6143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6141,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6125,"src":"15297:16:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":6142,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15316:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"15297:23:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6144,"nodeType":"ExpressionStatement","src":"15297:23:40"}]}},{"assignments":[6148],"declarations":[{"constant":false,"id":6148,"mutability":"mutable","name":"sum","nameLocation":"16663:3:40","nodeType":"VariableDeclaration","scope":6497,"src":"16656:10:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6147,"name":"int256","nodeType":"ElementaryTypeName","src":"16656:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6150,"initialValue":{"hexValue":"30","id":6149,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16669:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16656:14:40"},{"id":6369,"nodeType":"UncheckedBlock","src":"16680:1674:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6151,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"16708:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6154,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":6152,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5358,"src":"16713:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6153,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"16718:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16713:11:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16708:16:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6165,"nodeType":"IfStatement","src":"16704:126:40","trueBody":{"id":6164,"nodeType":"Block","src":"16726:104:40","statements":[{"expression":{"id":6158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6156,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"16744:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":6157,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5358,"src":"16749:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16744:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6159,"nodeType":"ExpressionStatement","src":"16744:7:40"},{"expression":{"id":6162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6160,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"16806:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6161,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5355,"src":"16813:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16806:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6163,"nodeType":"ExpressionStatement","src":"16806:9:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6166,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"16848:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6169,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":6167,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5364,"src":"16853:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6168,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"16858:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16853:11:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16848:16:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6180,"nodeType":"IfStatement","src":"16844:126:40","trueBody":{"id":6179,"nodeType":"Block","src":"16866:104:40","statements":[{"expression":{"id":6173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6171,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"16884:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":6172,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5364,"src":"16889:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16884:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6174,"nodeType":"ExpressionStatement","src":"16884:7:40"},{"expression":{"id":6177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6175,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"16946:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6176,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5361,"src":"16953:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16946:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6178,"nodeType":"ExpressionStatement","src":"16946:9:40"}]}},{"expression":{"id":6183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6181,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"17109:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":6182,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17116:3:40","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17109:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6184,"nodeType":"ExpressionStatement","src":"17109:10:40"},{"expression":{"id":6187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6185,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17133:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":6186,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17138:3:40","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17133:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6188,"nodeType":"ExpressionStatement","src":"17133:8:40"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6189,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17276:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6190,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5370,"src":"17281:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17276:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6206,"nodeType":"IfStatement","src":"17272:94:40","trueBody":{"id":6205,"nodeType":"Block","src":"17285:81:40","statements":[{"expression":{"id":6199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6192,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17303:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6193,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17308:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6194,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"17312:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17308:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6196,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17307:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6197,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5370,"src":"17322:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17307:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17303:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6200,"nodeType":"ExpressionStatement","src":"17303:21:40"},{"expression":{"id":6203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6201,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"17342:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6202,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5367,"src":"17349:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17342:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6204,"nodeType":"ExpressionStatement","src":"17342:9:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6207,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17384:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6208,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5376,"src":"17389:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17384:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6224,"nodeType":"IfStatement","src":"17380:94:40","trueBody":{"id":6223,"nodeType":"Block","src":"17393:81:40","statements":[{"expression":{"id":6217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6210,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17411:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6211,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17416:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6212,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"17420:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17416:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6214,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17415:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6215,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5376,"src":"17430:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17415:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17411:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6218,"nodeType":"ExpressionStatement","src":"17411:21:40"},{"expression":{"id":6221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6219,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"17450:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6220,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5373,"src":"17457:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17450:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6222,"nodeType":"ExpressionStatement","src":"17450:9:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6225,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17492:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6226,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"17497:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17492:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6242,"nodeType":"IfStatement","src":"17488:94:40","trueBody":{"id":6241,"nodeType":"Block","src":"17501:81:40","statements":[{"expression":{"id":6235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6228,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17519:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6229,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17524:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6230,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"17528:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17524:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6232,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17523:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6233,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"17538:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17523:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17519:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6236,"nodeType":"ExpressionStatement","src":"17519:21:40"},{"expression":{"id":6239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6237,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"17558:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6238,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5379,"src":"17565:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17558:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6240,"nodeType":"ExpressionStatement","src":"17558:9:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6243,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17600:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6244,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5388,"src":"17605:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17600:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6260,"nodeType":"IfStatement","src":"17596:94:40","trueBody":{"id":6259,"nodeType":"Block","src":"17609:81:40","statements":[{"expression":{"id":6253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6246,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17627:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6247,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17632:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6248,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"17636:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17632:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6250,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17631:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6251,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5388,"src":"17646:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17631:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17627:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6254,"nodeType":"ExpressionStatement","src":"17627:21:40"},{"expression":{"id":6257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6255,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"17666:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6256,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5385,"src":"17673:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17666:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6258,"nodeType":"ExpressionStatement","src":"17666:9:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6261,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17708:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6262,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5394,"src":"17713:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17708:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6278,"nodeType":"IfStatement","src":"17704:94:40","trueBody":{"id":6277,"nodeType":"Block","src":"17717:81:40","statements":[{"expression":{"id":6271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6264,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17735:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6265,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17740:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6266,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"17744:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17740:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6268,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17739:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6269,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5394,"src":"17754:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17739:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17735:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6272,"nodeType":"ExpressionStatement","src":"17735:21:40"},{"expression":{"id":6275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6273,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"17774:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6274,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5391,"src":"17781:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17774:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6276,"nodeType":"ExpressionStatement","src":"17774:9:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6279,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17816:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6280,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5400,"src":"17821:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17816:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6296,"nodeType":"IfStatement","src":"17812:94:40","trueBody":{"id":6295,"nodeType":"Block","src":"17825:81:40","statements":[{"expression":{"id":6289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6282,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17843:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6283,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17848:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6284,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"17852:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17848:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6286,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17847:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6287,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5400,"src":"17862:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17847:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17843:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6290,"nodeType":"ExpressionStatement","src":"17843:21:40"},{"expression":{"id":6293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6291,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"17882:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6292,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5397,"src":"17889:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17882:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6294,"nodeType":"ExpressionStatement","src":"17882:9:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6297,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17924:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6298,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5406,"src":"17929:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17924:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6314,"nodeType":"IfStatement","src":"17920:94:40","trueBody":{"id":6313,"nodeType":"Block","src":"17933:81:40","statements":[{"expression":{"id":6307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6300,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17951:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6301,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"17956:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6302,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"17960:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17956:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6304,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17955:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6305,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5406,"src":"17970:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17955:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17951:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6308,"nodeType":"ExpressionStatement","src":"17951:21:40"},{"expression":{"id":6311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6309,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"17990:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6310,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5403,"src":"17997:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17990:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6312,"nodeType":"ExpressionStatement","src":"17990:9:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6315,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18032:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6316,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5412,"src":"18037:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18032:7:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6332,"nodeType":"IfStatement","src":"18028:94:40","trueBody":{"id":6331,"nodeType":"Block","src":"18041:81:40","statements":[{"expression":{"id":6325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6318,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18059:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6319,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18064:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6320,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"18068:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18064:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6322,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18063:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6323,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5412,"src":"18078:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18063:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18059:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6326,"nodeType":"ExpressionStatement","src":"18059:21:40"},{"expression":{"id":6329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6327,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"18098:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6328,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5409,"src":"18105:2:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18098:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6330,"nodeType":"ExpressionStatement","src":"18098:9:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6333,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18140:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6334,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5418,"src":"18145:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18140:8:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6350,"nodeType":"IfStatement","src":"18136:97:40","trueBody":{"id":6349,"nodeType":"Block","src":"18150:83:40","statements":[{"expression":{"id":6343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6336,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18168:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6337,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18173:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6338,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"18177:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18173:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6340,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18172:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6341,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5418,"src":"18187:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18172:18:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18168:22:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6344,"nodeType":"ExpressionStatement","src":"18168:22:40"},{"expression":{"id":6347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6345,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"18208:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6346,"name":"x10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5415,"src":"18215:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18208:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6348,"nodeType":"ExpressionStatement","src":"18208:10:40"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6351,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18251:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6352,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5424,"src":"18256:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18251:8:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6368,"nodeType":"IfStatement","src":"18247:97:40","trueBody":{"id":6367,"nodeType":"Block","src":"18261:83:40","statements":[{"expression":{"id":6361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6354,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18279:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6355,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18284:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6356,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"18288:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18284:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6358,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18283:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6359,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5424,"src":"18298:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18283:18:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18279:22:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6362,"nodeType":"ExpressionStatement","src":"18279:22:40"},{"expression":{"id":6365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6363,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"18319:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6364,"name":"x11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5421,"src":"18326:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18319:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6366,"nodeType":"ExpressionStatement","src":"18319:10:40"}]}}]},{"id":6496,"nodeType":"UncheckedBlock","src":"18856:1493:40","statements":[{"assignments":[6371],"declarations":[{"constant":false,"id":6371,"mutability":"mutable","name":"z","nameLocation":"18887:1:40","nodeType":"VariableDeclaration","scope":6496,"src":"18880:8:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6370,"name":"int256","nodeType":"ElementaryTypeName","src":"18880:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6384,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6372,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18893:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":6373,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"18897:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18893:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6375,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18892:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6376,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"18907:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18892:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6378,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18891:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6379,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6119,"src":"18918:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6380,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"18922:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18918:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6382,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18917:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18891:38:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18880:49:40"},{"assignments":[6386],"declarations":[{"constant":false,"id":6386,"mutability":"mutable","name":"z_squared","nameLocation":"18950:9:40","nodeType":"VariableDeclaration","scope":6496,"src":"18943:16:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6385,"name":"int256","nodeType":"ElementaryTypeName","src":"18943:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6393,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6387,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6371,"src":"18963:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6388,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6371,"src":"18967:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18963:5:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6390,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18962:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6391,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"18972:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18962:16:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18943:35:40"},{"assignments":[6395],"declarations":[{"constant":false,"id":6395,"mutability":"mutable","name":"num","nameLocation":"19074:3:40","nodeType":"VariableDeclaration","scope":6496,"src":"19067:10:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6394,"name":"int256","nodeType":"ElementaryTypeName","src":"19067:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6397,"initialValue":{"id":6396,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6371,"src":"19080:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19067:14:40"},{"assignments":[6399],"declarations":[{"constant":false,"id":6399,"mutability":"mutable","name":"seriesSum","nameLocation":"19210:9:40","nodeType":"VariableDeclaration","scope":6496,"src":"19203:16:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6398,"name":"int256","nodeType":"ElementaryTypeName","src":"19203:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6401,"initialValue":{"id":6400,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19222:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19203:22:40"},{"expression":{"id":6409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6402,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19304:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6403,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19311:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6404,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"19317:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19311:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6406,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19310:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6407,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"19330:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19310:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19304:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6410,"nodeType":"ExpressionStatement","src":"19304:32:40"},{"expression":{"id":6415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6411,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6399,"src":"19350:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6412,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19363:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":6413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19369:1:40","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"19363:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19350:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6416,"nodeType":"ExpressionStatement","src":"19350:20:40"},{"expression":{"id":6424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6417,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19385:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6418,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19392:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6419,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"19398:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19392:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6421,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19391:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6422,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"19411:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19391:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19385:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6425,"nodeType":"ExpressionStatement","src":"19385:32:40"},{"expression":{"id":6430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6426,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6399,"src":"19431:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6427,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19444:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":6428,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19450:1:40","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"19444:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19431:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6431,"nodeType":"ExpressionStatement","src":"19431:20:40"},{"expression":{"id":6439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6432,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19466:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6433,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19473:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6434,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"19479:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19473:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6436,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19472:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6437,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"19492:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19472:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19466:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6440,"nodeType":"ExpressionStatement","src":"19466:32:40"},{"expression":{"id":6445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6441,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6399,"src":"19512:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6442,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19525:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":6443,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19531:1:40","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"19525:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19512:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6446,"nodeType":"ExpressionStatement","src":"19512:20:40"},{"expression":{"id":6454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6447,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19547:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6448,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19554:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6449,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"19560:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19554:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6451,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19553:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6452,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"19573:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19553:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19547:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6455,"nodeType":"ExpressionStatement","src":"19547:32:40"},{"expression":{"id":6460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6456,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6399,"src":"19593:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6457,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19606:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":6458,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19612:1:40","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"19606:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19593:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6461,"nodeType":"ExpressionStatement","src":"19593:20:40"},{"expression":{"id":6469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6462,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19628:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6463,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19635:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6464,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"19641:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19635:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6466,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19634:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6467,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5322,"src":"19654:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19634:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19628:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6470,"nodeType":"ExpressionStatement","src":"19628:32:40"},{"expression":{"id":6475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6471,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6399,"src":"19674:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6472,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6395,"src":"19687:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":6473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19693:2:40","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"19687:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19674:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6476,"nodeType":"ExpressionStatement","src":"19674:21:40"},{"expression":{"id":6479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6477,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6399,"src":"19866:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"32","id":6478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19879:1:40","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"19866:14:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6480,"nodeType":"ExpressionStatement","src":"19866:14:40"},{"assignments":[6482],"declarations":[{"constant":false,"id":6482,"mutability":"mutable","name":"result","nameLocation":"20169:6:40","nodeType":"VariableDeclaration","scope":6496,"src":"20162:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6481,"name":"int256","nodeType":"ElementaryTypeName","src":"20162:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6489,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6483,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"20179:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6484,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6399,"src":"20185:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20179:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6486,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20178:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":6487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20198:3:40","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"20178:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"20162:39:40"},{"expression":{"condition":{"id":6490,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6125,"src":"20303:16:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":6493,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6482,"src":"20332:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"20303:35:40","trueExpression":{"id":6492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"20322:7:40","subExpression":{"id":6491,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6482,"src":"20323:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":6123,"id":6495,"nodeType":"Return","src":"20296:42:40"}]}]},"documentation":{"id":6117,"nodeType":"StructuredDocumentation","src":"14678:88:40","text":"@dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":6498,"implemented":true,"kind":"function","modifiers":[],"name":"_ln","nameLocation":"14780:3:40","nodeType":"FunctionDefinition","parameters":{"id":6120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6119,"mutability":"mutable","name":"a","nameLocation":"14791:1:40","nodeType":"VariableDeclaration","scope":6498,"src":"14784:8:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6118,"name":"int256","nodeType":"ElementaryTypeName","src":"14784:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14783:10:40"},"returnParameters":{"id":6123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6122,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6498,"src":"14816:6:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6121,"name":"int256","nodeType":"ElementaryTypeName","src":"14816:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14815:8:40"},"scope":6654,"src":"14771:5584:40","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":6652,"nodeType":"Block","src":"20678:1804:40","statements":[{"id":6651,"nodeType":"UncheckedBlock","src":"20892:1584:40","statements":[{"expression":{"id":6508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6506,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6501,"src":"20916:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"id":6507,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"20921:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20916:11:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6509,"nodeType":"ExpressionStatement","src":"20916:11:40"},{"assignments":[6511],"declarations":[{"constant":false,"id":6511,"mutability":"mutable","name":"z","nameLocation":"21315:1:40","nodeType":"VariableDeclaration","scope":6651,"src":"21308:8:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6510,"name":"int256","nodeType":"ElementaryTypeName","src":"21308:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6524,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6512,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6501,"src":"21321:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":6513,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"21325:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21321:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6515,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21320:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6516,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"21335:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21320:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6518,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21319:23:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6519,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6501,"src":"21346:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6520,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"21350:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21346:10:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6522,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21345:12:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21319:38:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21308:49:40"},{"assignments":[6526],"declarations":[{"constant":false,"id":6526,"mutability":"mutable","name":"z_squared","nameLocation":"21378:9:40","nodeType":"VariableDeclaration","scope":6651,"src":"21371:16:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6525,"name":"int256","nodeType":"ElementaryTypeName","src":"21371:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6533,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6527,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6511,"src":"21391:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6528,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6511,"src":"21395:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21391:5:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6530,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21390:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6531,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"21400:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21390:16:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21371:35:40"},{"assignments":[6535],"declarations":[{"constant":false,"id":6535,"mutability":"mutable","name":"num","nameLocation":"21502:3:40","nodeType":"VariableDeclaration","scope":6651,"src":"21495:10:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6534,"name":"int256","nodeType":"ElementaryTypeName","src":"21495:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6537,"initialValue":{"id":6536,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6511,"src":"21508:1:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21495:14:40"},{"assignments":[6539],"declarations":[{"constant":false,"id":6539,"mutability":"mutable","name":"seriesSum","nameLocation":"21638:9:40","nodeType":"VariableDeclaration","scope":6651,"src":"21631:16:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6538,"name":"int256","nodeType":"ElementaryTypeName","src":"21631:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6541,"initialValue":{"id":6540,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21650:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21631:22:40"},{"expression":{"id":6549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6542,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21732:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6543,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21739:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6544,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6526,"src":"21745:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21739:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6546,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21738:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6547,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"21758:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21738:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21732:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6550,"nodeType":"ExpressionStatement","src":"21732:32:40"},{"expression":{"id":6555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6551,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6539,"src":"21778:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6552,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21791:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":6553,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21797:1:40","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"21791:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21778:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6556,"nodeType":"ExpressionStatement","src":"21778:20:40"},{"expression":{"id":6564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6557,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21813:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6558,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21820:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6559,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6526,"src":"21826:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21820:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6561,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21819:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6562,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"21839:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21819:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21813:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6565,"nodeType":"ExpressionStatement","src":"21813:32:40"},{"expression":{"id":6570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6566,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6539,"src":"21859:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6567,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21872:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":6568,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21878:1:40","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"21872:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21859:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6571,"nodeType":"ExpressionStatement","src":"21859:20:40"},{"expression":{"id":6579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6572,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21894:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6573,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21901:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6574,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6526,"src":"21907:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21901:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6576,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21900:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6577,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"21920:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21900:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21894:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6580,"nodeType":"ExpressionStatement","src":"21894:32:40"},{"expression":{"id":6585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6581,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6539,"src":"21940:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6582,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21953:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":6583,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21959:1:40","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"21953:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21940:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6586,"nodeType":"ExpressionStatement","src":"21940:20:40"},{"expression":{"id":6594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6587,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21975:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6588,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"21982:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6589,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6526,"src":"21988:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21982:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6591,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21981:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6592,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"22001:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21981:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21975:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6595,"nodeType":"ExpressionStatement","src":"21975:32:40"},{"expression":{"id":6600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6596,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6539,"src":"22021:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6597,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22034:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":6598,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22040:1:40","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"22034:7:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22021:20:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6601,"nodeType":"ExpressionStatement","src":"22021:20:40"},{"expression":{"id":6609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6602,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22056:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6603,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22063:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6604,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6526,"src":"22069:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22063:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6606,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22062:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6607,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"22082:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22062:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22056:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6610,"nodeType":"ExpressionStatement","src":"22056:32:40"},{"expression":{"id":6615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6611,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6539,"src":"22102:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6612,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22115:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":6613,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22121:2:40","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"22115:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22102:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6616,"nodeType":"ExpressionStatement","src":"22102:21:40"},{"expression":{"id":6624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6617,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22138:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6618,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22145:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6619,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6526,"src":"22151:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22145:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6621,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22144:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6622,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"22164:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22144:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22138:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6625,"nodeType":"ExpressionStatement","src":"22138:32:40"},{"expression":{"id":6630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6626,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6539,"src":"22184:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6627,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22197:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3133","id":6628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22203:2:40","typeDescriptions":{"typeIdentifier":"t_rational_13_by_1","typeString":"int_const 13"},"value":"13"},"src":"22197:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22184:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6631,"nodeType":"ExpressionStatement","src":"22184:21:40"},{"expression":{"id":6639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6632,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22220:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6633,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22227:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6634,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6526,"src":"22233:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22227:15:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6636,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22226:17:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6637,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5325,"src":"22246:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22226:26:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22220:32:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6640,"nodeType":"ExpressionStatement","src":"22220:32:40"},{"expression":{"id":6645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6641,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6539,"src":"22266:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6642,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6535,"src":"22279:3:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3135","id":6643,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22285:2:40","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"15"},"src":"22279:8:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22266:21:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6646,"nodeType":"ExpressionStatement","src":"22266:21:40"},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6647,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6539,"src":"22452:9:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":6648,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22464:1:40","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22452:13:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":6505,"id":6650,"nodeType":"Return","src":"22445:20:40"}]}]},"documentation":{"id":6499,"nodeType":"StructuredDocumentation","src":"20361:256:40","text":" @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n for x close to one.\n Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND."},"id":6653,"implemented":true,"kind":"function","modifiers":[],"name":"_ln_36","nameLocation":"20631:6:40","nodeType":"FunctionDefinition","parameters":{"id":6502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6501,"mutability":"mutable","name":"x","nameLocation":"20645:1:40","nodeType":"VariableDeclaration","scope":6653,"src":"20638:8:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6500,"name":"int256","nodeType":"ElementaryTypeName","src":"20638:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20637:10:40"},"returnParameters":{"id":6505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6504,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6653,"src":"20670:6:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6503,"name":"int256","nodeType":"ElementaryTypeName","src":"20670:6:40","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20669:8:40"},"scope":6654,"src":"20622:1860:40","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":6655,"src":"595:21889:40","usedErrors":[5304,5307,5310,5313,5316],"usedEvents":[]}],"src":"33:22452:40"},"id":40},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol","exportedSymbols":{"EnumerableSet":[6943]},"id":6944,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6656,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:41"},{"abstract":false,"baseContracts":[],"canonicalName":"EnumerableSet","contractDependencies":[],"contractKind":"library","documentation":{"id":6657,"nodeType":"StructuredDocumentation","src":"59:956:41","text":" @notice Library for managing sets of primitive types.\n @dev See https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types.\n Based on the EnumerableSet library from OpenZeppelin Contracts, altered to remove the base private functions that\n work on bytes32, replacing them with a native implementation for address values, to reduce bytecode size and\n runtime costs.\n The `unchecked_at` function was also added, which allows for more gas efficient data reads in some scenarios.\n Sets have the following properties:\n - Elements are added, removed, and checked for existence in constant time (O(1)).\n - Elements are enumerated in O(n). No guarantees are made on the ordering.\n ```\n contract Example {\n // Add the library methods\n using EnumerableSet for EnumerableSet.AddressSet;\n // Declare a set state variable\n EnumerableSet.AddressSet private mySet;\n }\n ```"},"fullyImplemented":true,"id":6943,"linearizedBaseContracts":[6943],"name":"EnumerableSet","nameLocation":"1024:13:41","nodeType":"ContractDefinition","nodes":[{"canonicalName":"EnumerableSet.AddressSet","id":6665,"members":[{"constant":false,"id":6660,"mutability":"mutable","name":"_values","nameLocation":"1364:7:41","nodeType":"VariableDeclaration","scope":6665,"src":"1354:17:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6658,"name":"address","nodeType":"ElementaryTypeName","src":"1354:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6659,"nodeType":"ArrayTypeName","src":"1354:9:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":6664,"mutability":"mutable","name":"_indexes","nameLocation":"1554:8:41","nodeType":"VariableDeclaration","scope":6665,"src":"1504:58:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":6663,"keyName":"addressKey","keyNameLocation":"1520:10:41","keyType":{"id":6661,"name":"address","nodeType":"ElementaryTypeName","src":"1512:7:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1504:49:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"indexValue","valueNameLocation":"1542:10:41","valueType":{"id":6662,"name":"uint256","nodeType":"ElementaryTypeName","src":"1534:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"name":"AddressSet","nameLocation":"1299:10:41","nodeType":"StructDefinition","scope":6943,"src":"1292:277:41","visibility":"public"},{"documentation":{"id":6666,"nodeType":"StructuredDocumentation","src":"1575:61:41","text":"@notice An index is beyond the current bounds of the set."},"errorSelector":"4e23d035","id":6668,"name":"IndexOutOfBounds","nameLocation":"1647:16:41","nodeType":"ErrorDefinition","parameters":{"id":6667,"nodeType":"ParameterList","parameters":[],"src":"1663:2:41"},"src":"1641:25:41"},{"documentation":{"id":6669,"nodeType":"StructuredDocumentation","src":"1672:54:41","text":"@notice An element that is not present in the set."},"errorSelector":"66af5392","id":6671,"name":"ElementNotFound","nameLocation":"1737:15:41","nodeType":"ErrorDefinition","parameters":{"id":6670,"nodeType":"ParameterList","parameters":[],"src":"1752:2:41"},"src":"1731:24:41"},{"body":{"id":6712,"nodeType":"Block","src":"1986:335:41","statements":[{"condition":{"id":6686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2000:21:41","subExpression":{"arguments":[{"id":6683,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6675,"src":"2010:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},{"id":6684,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6677,"src":"2015:5:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6682,"name":"contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6823,"src":"2001:8:41","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$6665_storage_ptr_$_t_address_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"}},"id":6685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2001:20:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6710,"nodeType":"Block","src":"2278:37:41","statements":[{"expression":{"hexValue":"66616c7365","id":6708,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2299:5:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":6681,"id":6709,"nodeType":"Return","src":"2292:12:41"}]},"id":6711,"nodeType":"IfStatement","src":"1996:319:41","trueBody":{"id":6707,"nodeType":"Block","src":"2023:249:41","statements":[{"expression":{"arguments":[{"id":6692,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6677,"src":"2054:5:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":6687,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6675,"src":"2037:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6690,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2041:7:41","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6660,"src":"2037:11:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2049:4:41","memberName":"push","nodeType":"MemberAccess","src":"2037:16:41","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$attached_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer,address)"}},"id":6693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2037:23:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6694,"nodeType":"ExpressionStatement","src":"2037:23:41"},{"expression":{"id":6703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":6695,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6675,"src":"2196:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6698,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2200:8:41","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6664,"src":"2196:12:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6699,"indexExpression":{"id":6697,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6677,"src":"2209:5:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2196:19:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":6700,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6675,"src":"2218:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6701,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2222:7:41","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6660,"src":"2218:11:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2230:6:41","memberName":"length","nodeType":"MemberAccess","src":"2218:18:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2196:40:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6704,"nodeType":"ExpressionStatement","src":"2196:40:41"},{"expression":{"hexValue":"74727565","id":6705,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2257:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":6681,"id":6706,"nodeType":"Return","src":"2250:11:41"}]}}]},"documentation":{"id":6672,"nodeType":"StructuredDocumentation","src":"1761:144:41","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, if it was not already present."},"id":6713,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"1919:3:41","nodeType":"FunctionDefinition","parameters":{"id":6678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6675,"mutability":"mutable","name":"set","nameLocation":"1942:3:41","nodeType":"VariableDeclaration","scope":6713,"src":"1923:22:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6674,"nodeType":"UserDefinedTypeName","pathNode":{"id":6673,"name":"AddressSet","nameLocations":["1923:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":6665,"src":"1923:10:41"},"referencedDeclaration":6665,"src":"1923:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6677,"mutability":"mutable","name":"value","nameLocation":"1955:5:41","nodeType":"VariableDeclaration","scope":6713,"src":"1947:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6676,"name":"address","nodeType":"ElementaryTypeName","src":"1947:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1922:39:41"},"returnParameters":{"id":6681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6680,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6713,"src":"1980:4:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6679,"name":"bool","nodeType":"ElementaryTypeName","src":"1980:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1979:6:41"},"scope":6943,"src":"1910:411:41","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6803,"nodeType":"Block","src":"2552:1498:41","statements":[{"assignments":[6725],"declarations":[{"constant":false,"id":6725,"mutability":"mutable","name":"valueIndex","nameLocation":"2671:10:41","nodeType":"VariableDeclaration","scope":6803,"src":"2663:18:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6724,"name":"uint256","nodeType":"ElementaryTypeName","src":"2663:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6730,"initialValue":{"baseExpression":{"expression":{"id":6726,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6717,"src":"2684:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6727,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2688:8:41","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6664,"src":"2684:12:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6729,"indexExpression":{"id":6728,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6719,"src":"2697:5:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2684:19:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2663:40:41"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6731,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6725,"src":"2718:10:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6732,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2732:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2718:15:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6801,"nodeType":"Block","src":"4007:37:41","statements":[{"expression":{"hexValue":"66616c7365","id":6799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4028:5:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":6723,"id":6800,"nodeType":"Return","src":"4021:12:41"}]},"id":6802,"nodeType":"IfStatement","src":"2714:1330:41","trueBody":{"id":6798,"nodeType":"Block","src":"2735:1266:41","statements":[{"assignments":[6735],"declarations":[{"constant":false,"id":6735,"mutability":"mutable","name":"toDeleteIndex","nameLocation":"3094:13:41","nodeType":"VariableDeclaration","scope":6798,"src":"3086:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6734,"name":"uint256","nodeType":"ElementaryTypeName","src":"3086:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6736,"nodeType":"VariableDeclarationStatement","src":"3086:21:41"},{"assignments":[6738],"declarations":[{"constant":false,"id":6738,"mutability":"mutable","name":"lastIndex","nameLocation":"3129:9:41","nodeType":"VariableDeclaration","scope":6798,"src":"3121:17:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6737,"name":"uint256","nodeType":"ElementaryTypeName","src":"3121:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6739,"nodeType":"VariableDeclarationStatement","src":"3121:17:41"},{"id":6754,"nodeType":"UncheckedBlock","src":"3153:125:41","statements":[{"expression":{"id":6744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6740,"name":"toDeleteIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6735,"src":"3181:13:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6741,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6725,"src":"3197:10:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":6742,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3210:1:41","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3197:14:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3181:30:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6745,"nodeType":"ExpressionStatement","src":"3181:30:41"},{"expression":{"id":6752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6746,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6738,"src":"3229:9:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":6747,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6717,"src":"3241:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6748,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3245:7:41","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6660,"src":"3241:11:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3253:6:41","memberName":"length","nodeType":"MemberAccess","src":"3241:18:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":6750,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3262:1:41","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3241:22:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3229:34:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6753,"nodeType":"ExpressionStatement","src":"3229:34:41"}]},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6755,"name":"toDeleteIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6735,"src":"3378:13:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":6756,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6738,"src":"3395:9:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3378:26:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6782,"nodeType":"IfStatement","src":"3374:399:41","trueBody":{"id":6781,"nodeType":"Block","src":"3406:367:41","statements":[{"assignments":[6759],"declarations":[{"constant":false,"id":6759,"mutability":"mutable","name":"lastValue","nameLocation":"3432:9:41","nodeType":"VariableDeclaration","scope":6781,"src":"3424:17:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6758,"name":"address","nodeType":"ElementaryTypeName","src":"3424:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":6764,"initialValue":{"baseExpression":{"expression":{"id":6760,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6717,"src":"3444:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6761,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3448:7:41","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6660,"src":"3444:11:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6763,"indexExpression":{"id":6762,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6738,"src":"3456:9:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3444:22:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3424:42:41"},{"expression":{"id":6771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":6765,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6717,"src":"3561:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6768,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3565:7:41","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6660,"src":"3561:11:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6769,"indexExpression":{"id":6767,"name":"toDeleteIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6735,"src":"3573:13:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3561:26:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6770,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6759,"src":"3590:9:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3561:38:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6772,"nodeType":"ExpressionStatement","src":"3561:38:41"},{"expression":{"id":6779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":6773,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6717,"src":"3673:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6776,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3677:8:41","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6664,"src":"3673:12:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6777,"indexExpression":{"id":6775,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6759,"src":"3686:9:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3673:23:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6778,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6725,"src":"3699:10:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3673:36:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6780,"nodeType":"ExpressionStatement","src":"3673:36:41"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":6783,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6717,"src":"3852:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6786,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3856:7:41","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6660,"src":"3852:11:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3864:3:41","memberName":"pop","nodeType":"MemberAccess","src":"3852:15:41","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer)"}},"id":6788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3852:17:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6789,"nodeType":"ExpressionStatement","src":"3852:17:41"},{"expression":{"id":6794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"3938:26:41","subExpression":{"baseExpression":{"expression":{"id":6790,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6717,"src":"3945:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6791,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3949:8:41","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6664,"src":"3945:12:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6793,"indexExpression":{"id":6792,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6719,"src":"3958:5:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3945:19:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6795,"nodeType":"ExpressionStatement","src":"3938:26:41"},{"expression":{"hexValue":"74727565","id":6796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3986:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":6723,"id":6797,"nodeType":"Return","src":"3979:11:41"}]}}]},"documentation":{"id":6714,"nodeType":"StructuredDocumentation","src":"2327:141:41","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set; i.e., if it was present."},"id":6804,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"2482:6:41","nodeType":"FunctionDefinition","parameters":{"id":6720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6717,"mutability":"mutable","name":"set","nameLocation":"2508:3:41","nodeType":"VariableDeclaration","scope":6804,"src":"2489:22:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6716,"nodeType":"UserDefinedTypeName","pathNode":{"id":6715,"name":"AddressSet","nameLocations":["2489:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":6665,"src":"2489:10:41"},"referencedDeclaration":6665,"src":"2489:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6719,"mutability":"mutable","name":"value","nameLocation":"2521:5:41","nodeType":"VariableDeclaration","scope":6804,"src":"2513:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6718,"name":"address","nodeType":"ElementaryTypeName","src":"2513:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2488:39:41"},"returnParameters":{"id":6723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6722,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6804,"src":"2546:4:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6721,"name":"bool","nodeType":"ElementaryTypeName","src":"2546:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2545:6:41"},"scope":6943,"src":"2473:1577:41","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6822,"nodeType":"Block","src":"4202:48:41","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":6815,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6808,"src":"4219:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6816,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4223:8:41","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6664,"src":"4219:12:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6818,"indexExpression":{"id":6817,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6810,"src":"4232:5:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4219:19:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4242:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4219:24:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6814,"id":6821,"nodeType":"Return","src":"4212:31:41"}]},"documentation":{"id":6805,"nodeType":"StructuredDocumentation","src":"4056:55:41","text":"@dev Returns true if the value is in the set. O(1)."},"id":6823,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"4125:8:41","nodeType":"FunctionDefinition","parameters":{"id":6811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6808,"mutability":"mutable","name":"set","nameLocation":"4153:3:41","nodeType":"VariableDeclaration","scope":6823,"src":"4134:22:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6807,"nodeType":"UserDefinedTypeName","pathNode":{"id":6806,"name":"AddressSet","nameLocations":["4134:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":6665,"src":"4134:10:41"},"referencedDeclaration":6665,"src":"4134:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6810,"mutability":"mutable","name":"value","nameLocation":"4166:5:41","nodeType":"VariableDeclaration","scope":6823,"src":"4158:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6809,"name":"address","nodeType":"ElementaryTypeName","src":"4158:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4133:39:41"},"returnParameters":{"id":6814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6813,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6823,"src":"4196:4:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6812,"name":"bool","nodeType":"ElementaryTypeName","src":"4196:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4195:6:41"},"scope":6943,"src":"4116:134:41","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6836,"nodeType":"Block","src":"4388:42:41","statements":[{"expression":{"expression":{"expression":{"id":6832,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6827,"src":"4405:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6833,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4409:7:41","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6660,"src":"4405:11:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4417:6:41","memberName":"length","nodeType":"MemberAccess","src":"4405:18:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6831,"id":6835,"nodeType":"Return","src":"4398:25:41"}]},"documentation":{"id":6824,"nodeType":"StructuredDocumentation","src":"4256:55:41","text":"@dev Returns the number of values on the set. O(1)."},"id":6837,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"4325:6:41","nodeType":"FunctionDefinition","parameters":{"id":6828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6827,"mutability":"mutable","name":"set","nameLocation":"4351:3:41","nodeType":"VariableDeclaration","scope":6837,"src":"4332:22:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6826,"nodeType":"UserDefinedTypeName","pathNode":{"id":6825,"name":"AddressSet","nameLocations":["4332:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":6665,"src":"4332:10:41"},"referencedDeclaration":6665,"src":"4332:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"4331:24:41"},"returnParameters":{"id":6831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6830,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6837,"src":"4379:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6829,"name":"uint256","nodeType":"ElementaryTypeName","src":"4379:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4378:9:41"},"scope":6943,"src":"4316:114:41","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6863,"nodeType":"Block","src":"4855:141:41","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6848,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6843,"src":"4869:5:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"expression":{"id":6849,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6841,"src":"4878:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6850,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4882:7:41","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6660,"src":"4878:11:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4890:6:41","memberName":"length","nodeType":"MemberAccess","src":"4878:18:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4869:27:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6857,"nodeType":"IfStatement","src":"4865:83:41","trueBody":{"id":6856,"nodeType":"Block","src":"4898:50:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6853,"name":"IndexOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6668,"src":"4919:16:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4919:18:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6855,"nodeType":"RevertStatement","src":"4912:25:41"}]}},{"expression":{"arguments":[{"id":6859,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6841,"src":"4978:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},{"id":6860,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6843,"src":"4983:5:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6858,"name":"unchecked_at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6881,"src":"4965:12:41","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$6665_storage_ptr_$_t_uint256_$returns$_t_address_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":6861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4965:24:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":6847,"id":6862,"nodeType":"Return","src":"4958:31:41"}]},"documentation":{"id":6838,"nodeType":"StructuredDocumentation","src":"4436:331:41","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":6864,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"4781:2:41","nodeType":"FunctionDefinition","parameters":{"id":6844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6841,"mutability":"mutable","name":"set","nameLocation":"4803:3:41","nodeType":"VariableDeclaration","scope":6864,"src":"4784:22:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6840,"nodeType":"UserDefinedTypeName","pathNode":{"id":6839,"name":"AddressSet","nameLocations":["4784:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":6665,"src":"4784:10:41"},"referencedDeclaration":6665,"src":"4784:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6843,"mutability":"mutable","name":"index","nameLocation":"4816:5:41","nodeType":"VariableDeclaration","scope":6864,"src":"4808:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6842,"name":"uint256","nodeType":"ElementaryTypeName","src":"4808:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4783:39:41"},"returnParameters":{"id":6847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6846,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6864,"src":"4846:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6845,"name":"address","nodeType":"ElementaryTypeName","src":"4846:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4845:9:41"},"scope":6943,"src":"4772:224:41","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6880,"nodeType":"Block","src":"5401:42:41","statements":[{"expression":{"baseExpression":{"expression":{"id":6875,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6868,"src":"5418:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6876,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5422:7:41","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6660,"src":"5418:11:41","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6878,"indexExpression":{"id":6877,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6870,"src":"5430:5:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5418:18:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":6874,"id":6879,"nodeType":"Return","src":"5411:25:41"}]},"documentation":{"id":6865,"nodeType":"StructuredDocumentation","src":"5002:301:41","text":" @dev Same as {at}, except this doesn't revert if `index` it outside of the set (i.e. if it is equal or larger\n than {length}). O(1).\n This function performs one less storage read than {at}, but should only be used when `index` is known to be\n within bounds."},"id":6881,"implemented":true,"kind":"function","modifiers":[],"name":"unchecked_at","nameLocation":"5317:12:41","nodeType":"FunctionDefinition","parameters":{"id":6871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6868,"mutability":"mutable","name":"set","nameLocation":"5349:3:41","nodeType":"VariableDeclaration","scope":6881,"src":"5330:22:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6867,"nodeType":"UserDefinedTypeName","pathNode":{"id":6866,"name":"AddressSet","nameLocations":["5330:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":6665,"src":"5330:10:41"},"referencedDeclaration":6665,"src":"5330:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6870,"mutability":"mutable","name":"index","nameLocation":"5362:5:41","nodeType":"VariableDeclaration","scope":6881,"src":"5354:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6869,"name":"uint256","nodeType":"ElementaryTypeName","src":"5354:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5329:39:41"},"returnParameters":{"id":6874,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6873,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6881,"src":"5392:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6872,"name":"address","nodeType":"ElementaryTypeName","src":"5392:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5391:9:41"},"scope":6943,"src":"5308:135:41","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6912,"nodeType":"Block","src":"5617:197:41","statements":[{"assignments":[6893],"declarations":[{"constant":false,"id":6893,"mutability":"mutable","name":"rawIndex","nameLocation":"5635:8:41","nodeType":"VariableDeclaration","scope":6912,"src":"5627:16:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6892,"name":"uint256","nodeType":"ElementaryTypeName","src":"5627:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6898,"initialValue":{"baseExpression":{"expression":{"id":6894,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6885,"src":"5646:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6895,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5650:8:41","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6664,"src":"5646:12:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6897,"indexExpression":{"id":6896,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6887,"src":"5659:5:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5646:19:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5627:38:41"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6899,"name":"rawIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6893,"src":"5680:8:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5692:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5680:13:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6906,"nodeType":"IfStatement","src":"5676:68:41","trueBody":{"id":6905,"nodeType":"Block","src":"5695:49:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6902,"name":"ElementNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6671,"src":"5716:15:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5716:17:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6904,"nodeType":"RevertStatement","src":"5709:24:41"}]}},{"id":6911,"nodeType":"UncheckedBlock","src":"5754:54:41","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6907,"name":"rawIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6893,"src":"5785:8:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":6908,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5796:1:41","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5785:12:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6891,"id":6910,"nodeType":"Return","src":"5778:19:41"}]}]},"documentation":{"id":6882,"nodeType":"StructuredDocumentation","src":"5449:75:41","text":"@dev Return the index of an element in the set, or revert if not found."},"id":6913,"implemented":true,"kind":"function","modifiers":[],"name":"indexOf","nameLocation":"5538:7:41","nodeType":"FunctionDefinition","parameters":{"id":6888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6885,"mutability":"mutable","name":"set","nameLocation":"5565:3:41","nodeType":"VariableDeclaration","scope":6913,"src":"5546:22:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6884,"nodeType":"UserDefinedTypeName","pathNode":{"id":6883,"name":"AddressSet","nameLocations":["5546:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":6665,"src":"5546:10:41"},"referencedDeclaration":6665,"src":"5546:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6887,"mutability":"mutable","name":"value","nameLocation":"5578:5:41","nodeType":"VariableDeclaration","scope":6913,"src":"5570:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6886,"name":"address","nodeType":"ElementaryTypeName","src":"5570:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5545:39:41"},"returnParameters":{"id":6891,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6890,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6913,"src":"5608:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6889,"name":"uint256","nodeType":"ElementaryTypeName","src":"5608:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5607:9:41"},"scope":6943,"src":"5529:285:41","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6941,"nodeType":"Block","src":"6217:139:41","statements":[{"assignments":[6925],"declarations":[{"constant":false,"id":6925,"mutability":"mutable","name":"rawIndex","nameLocation":"6235:8:41","nodeType":"VariableDeclaration","scope":6941,"src":"6227:16:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6924,"name":"uint256","nodeType":"ElementaryTypeName","src":"6227:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6930,"initialValue":{"baseExpression":{"expression":{"id":6926,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6917,"src":"6246:3:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6927,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6250:8:41","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6664,"src":"6246:12:41","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6929,"indexExpression":{"id":6928,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6919,"src":"6259:5:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6246:19:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6227:38:41"},{"id":6940,"nodeType":"UncheckedBlock","src":"6276:74:41","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6931,"name":"rawIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6925,"src":"6307:8:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6932,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6319:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6307:13:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6935,"name":"rawIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6925,"src":"6327:8:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":6936,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6338:1:41","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6327:12:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6307:32:41","trueExpression":{"hexValue":"30","id":6934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6323:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6923,"id":6939,"nodeType":"Return","src":"6300:39:41"}]}]},"documentation":{"id":6914,"nodeType":"StructuredDocumentation","src":"5820:294:41","text":" @dev Same as {indexOf}, except this doesn't revert if the element isn't present in the set.\n In this case, it returns 0.\n This function performs one less storage read than {indexOf}, but should only be used when `index` is known to be\n within bounds."},"id":6942,"implemented":true,"kind":"function","modifiers":[],"name":"unchecked_indexOf","nameLocation":"6128:17:41","nodeType":"FunctionDefinition","parameters":{"id":6920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6917,"mutability":"mutable","name":"set","nameLocation":"6165:3:41","nodeType":"VariableDeclaration","scope":6942,"src":"6146:22:41","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6916,"nodeType":"UserDefinedTypeName","pathNode":{"id":6915,"name":"AddressSet","nameLocations":["6146:10:41"],"nodeType":"IdentifierPath","referencedDeclaration":6665,"src":"6146:10:41"},"referencedDeclaration":6665,"src":"6146:10:41","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6919,"mutability":"mutable","name":"value","nameLocation":"6178:5:41","nodeType":"VariableDeclaration","scope":6942,"src":"6170:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6918,"name":"address","nodeType":"ElementaryTypeName","src":"6170:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6145:39:41"},"returnParameters":{"id":6923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6922,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6942,"src":"6208:7:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6921,"name":"uint256","nodeType":"ElementaryTypeName","src":"6208:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6207:9:41"},"scope":6943,"src":"6119:237:41","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":6944,"src":"1016:5342:41","usedErrors":[6668,6671],"usedEvents":[]}],"src":"33:6326:41"},"id":41},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","exportedSymbols":{"ReentrancyGuardTransient":[7012],"StorageSlotExtension":[7225]},"id":7013,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6945,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:42"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"./StorageSlotExtension.sol","id":6947,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7013,"sourceUnit":7226,"src":"59:66:42","symbolAliases":[{"foreign":{"id":6946,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7225,"src":"68:20:42","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"ReentrancyGuardTransient","contractDependencies":[],"contractKind":"contract","documentation":{"id":6948,"nodeType":"StructuredDocumentation","src":"127:155:42","text":" @notice Variant of {ReentrancyGuard} that uses transient storage.\n @dev NOTE: This variant only works on networks where EIP-1153 is available."},"fullyImplemented":true,"id":7012,"linearizedBaseContracts":[7012],"name":"ReentrancyGuardTransient","nameLocation":"301:24:42","nodeType":"ContractDefinition","nodes":[{"global":false,"id":6950,"libraryName":{"id":6949,"name":"StorageSlotExtension","nameLocations":["338:20:42"],"nodeType":"IdentifierPath","referencedDeclaration":7225,"src":"338:20:42"},"nodeType":"UsingForDirective","src":"332:33:42"},{"constant":true,"id":6953,"mutability":"constant","name":"_REENTRANCY_GUARD_STORAGE","nameLocation":"515:25:42","nodeType":"VariableDeclaration","scope":7012,"src":"490:127:42","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6951,"name":"bytes32","nodeType":"ElementaryTypeName","src":"490:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307839623737396231373432326430646639323232333031386233326234643166613436653037313732336436383137653234383664303033626563633535663030","id":6952,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"551:66:42","typeDescriptions":{"typeIdentifier":"t_rational_70319816728846589445362000750570655803700195216363692647688146666176345628416_by_1","typeString":"int_const 7031...(69 digits omitted)...8416"},"value":"0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"},"visibility":"private"},{"documentation":{"id":6954,"nodeType":"StructuredDocumentation","src":"624:40:42","text":"@notice Unauthorized reentrant call."},"errorSelector":"3ee5aeb5","id":6956,"name":"ReentrancyGuardReentrantCall","nameLocation":"675:28:42","nodeType":"ErrorDefinition","parameters":{"id":6955,"nodeType":"ParameterList","parameters":[],"src":"703:2:42"},"src":"669:37:42"},{"body":{"id":6966,"nodeType":"Block","src":"1107:79:42","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6959,"name":"_nonReentrantBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6986,"src":"1117:19:42","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":6960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1117:21:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6961,"nodeType":"ExpressionStatement","src":"1117:21:42"},{"id":6962,"nodeType":"PlaceholderStatement","src":"1148:1:42"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6963,"name":"_nonReentrantAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6998,"src":"1159:18:42","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":6964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1159:20:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6965,"nodeType":"ExpressionStatement","src":"1159:20:42"}]},"documentation":{"id":6957,"nodeType":"StructuredDocumentation","src":"712:366:42","text":" @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work."},"id":6967,"name":"nonReentrant","nameLocation":"1092:12:42","nodeType":"ModifierDefinition","parameters":{"id":6958,"nodeType":"ParameterList","parameters":[],"src":"1104:2:42"},"src":"1083:103:42","virtual":false,"visibility":"internal"},{"body":{"id":6985,"nodeType":"Block","src":"1231:310:42","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":6970,"name":"_reentrancyGuardEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7011,"src":"1320:23:42","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":6971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1320:25:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6976,"nodeType":"IfStatement","src":"1316:93:42","trueBody":{"id":6975,"nodeType":"Block","src":"1347:62:42","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6972,"name":"ReentrancyGuardReentrantCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6956,"src":"1368:28:42","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1368:30:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6974,"nodeType":"RevertStatement","src":"1361:37:42"}]}},{"expression":{"arguments":[{"hexValue":"74727565","id":6982,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1529:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6977,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6953,"src":"1484:25:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1510:9:42","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":7063,"src":"1484:35:42","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$7048_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":6980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:37:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":6981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1522:6:42","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":7158,"src":"1484:44:42","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$7048_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$7048_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":6983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:50:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6984,"nodeType":"ExpressionStatement","src":"1484:50:42"}]},"id":6986,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantBefore","nameLocation":"1201:19:42","nodeType":"FunctionDefinition","parameters":{"id":6968,"nodeType":"ParameterList","parameters":[],"src":"1220:2:42"},"returnParameters":{"id":6969,"nodeType":"ParameterList","parameters":[],"src":"1231:0:42"},"scope":7012,"src":"1192:349:42","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6997,"nodeType":"Block","src":"1585:68:42","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":6994,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1640:5:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6989,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6953,"src":"1595:25:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1621:9:42","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":7063,"src":"1595:35:42","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$7048_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":6992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:37:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":6993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1633:6:42","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":7158,"src":"1595:44:42","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$7048_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$7048_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":6995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:51:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6996,"nodeType":"ExpressionStatement","src":"1595:51:42"}]},"id":6998,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantAfter","nameLocation":"1556:18:42","nodeType":"FunctionDefinition","parameters":{"id":6987,"nodeType":"ParameterList","parameters":[],"src":"1574:2:42"},"returnParameters":{"id":6988,"nodeType":"ParameterList","parameters":[],"src":"1585:0:42"},"scope":7012,"src":"1547:106:42","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":7010,"nodeType":"Block","src":"1896:69:42","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7004,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6953,"src":"1913:25:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1939:9:42","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":7063,"src":"1913:35:42","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$7048_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":7006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:37:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":7007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1951:5:42","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":7147,"src":"1913:43:42","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_BooleanSlotType_$7048_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_BooleanSlotType_$7048_$","typeString":"function (StorageSlotExtension.BooleanSlotType) view returns (bool)"}},"id":7008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:45:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7003,"id":7009,"nodeType":"Return","src":"1906:52:42"}]},"documentation":{"id":6999,"nodeType":"StructuredDocumentation","src":"1659:168:42","text":" @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n `nonReentrant` function in the call stack."},"id":7011,"implemented":true,"kind":"function","modifiers":[],"name":"_reentrancyGuardEntered","nameLocation":"1841:23:42","nodeType":"FunctionDefinition","parameters":{"id":7000,"nodeType":"ParameterList","parameters":[],"src":"1864:2:42"},"returnParameters":{"id":7003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7002,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7011,"src":"1890:4:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7001,"name":"bool","nodeType":"ElementaryTypeName","src":"1890:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1889:6:42"},"scope":7012,"src":"1832:133:42","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":7013,"src":"283:1684:42","usedErrors":[6956],"usedEvents":[]}],"src":"33:1935:42"},"id":42},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","exportedSymbols":{"StorageSlotExtension":[7225]},"id":7226,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7014,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:43"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlotExtension","contractDependencies":[],"contractKind":"library","documentation":{"id":7015,"nodeType":"StructuredDocumentation","src":"59:218:43","text":" @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n @dev TIP: Consider using this library along with {SlotDerivation}."},"fullyImplemented":true,"id":7225,"linearizedBaseContracts":[7225],"name":"StorageSlotExtension","nameLocation":"286:20:43","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlotExtension.Int256Slot","id":7018,"members":[{"constant":false,"id":7017,"mutability":"mutable","name":"value","nameLocation":"348:5:43","nodeType":"VariableDeclaration","scope":7018,"src":"341:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7016,"name":"int256","nodeType":"ElementaryTypeName","src":"341:6:43","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"name":"Int256Slot","nameLocation":"320:10:43","nodeType":"StructDefinition","scope":7225,"src":"313:47:43","visibility":"public"},{"body":{"id":7028,"nodeType":"Block","src":"524:106:43","statements":[{"AST":{"nativeSrc":"586:38:43","nodeType":"YulBlock","src":"586:38:43","statements":[{"nativeSrc":"600:14:43","nodeType":"YulAssignment","src":"600:14:43","value":{"name":"slot","nativeSrc":"610:4:43","nodeType":"YulIdentifier","src":"610:4:43"},"variableNames":[{"name":"r.slot","nativeSrc":"600:6:43","nodeType":"YulIdentifier","src":"600:6:43"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7025,"isOffset":false,"isSlot":true,"src":"600:6:43","suffix":"slot","valueSize":1},{"declaration":7021,"isOffset":false,"isSlot":false,"src":"610:4:43","valueSize":1}],"id":7027,"nodeType":"InlineAssembly","src":"577:47:43"}]},"documentation":{"id":7019,"nodeType":"StructuredDocumentation","src":"366:71:43","text":"@dev Returns an `Int256Slot` with member `value` located at `slot`."},"id":7029,"implemented":true,"kind":"function","modifiers":[],"name":"getInt256Slot","nameLocation":"451:13:43","nodeType":"FunctionDefinition","parameters":{"id":7022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7021,"mutability":"mutable","name":"slot","nameLocation":"473:4:43","nodeType":"VariableDeclaration","scope":7029,"src":"465:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7020,"name":"bytes32","nodeType":"ElementaryTypeName","src":"465:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"464:14:43"},"returnParameters":{"id":7026,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7025,"mutability":"mutable","name":"r","nameLocation":"521:1:43","nodeType":"VariableDeclaration","scope":7029,"src":"502:20:43","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$7018_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"},"typeName":{"id":7024,"nodeType":"UserDefinedTypeName","pathNode":{"id":7023,"name":"Int256Slot","nameLocations":["502:10:43"],"nodeType":"IdentifierPath","referencedDeclaration":7018,"src":"502:10:43"},"referencedDeclaration":7018,"src":"502:10:43","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$7018_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"}},"visibility":"internal"}],"src":"501:22:43"},"scope":7225,"src":"442:188:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.AddressSlotType","id":7031,"name":"AddressSlotType","nameLocation":"709:15:43","nodeType":"UserDefinedValueTypeDefinition","src":"704:32:43","underlyingType":{"id":7030,"name":"bytes32","nodeType":"ElementaryTypeName","src":"728:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":7045,"nodeType":"Block","src":"873:50:43","statements":[{"expression":{"arguments":[{"id":7042,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7034,"src":"911:4:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7040,"name":"AddressSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7031,"src":"890:15:43","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressSlotType_$7031_$","typeString":"type(StorageSlotExtension.AddressSlotType)"}},"id":7041,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"906:4:43","memberName":"wrap","nodeType":"MemberAccess","src":"890:20:43","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$7031_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":7043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"890:26:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7031","typeString":"StorageSlotExtension.AddressSlotType"}},"functionReturnParameters":7039,"id":7044,"nodeType":"Return","src":"883:33:43"}]},"documentation":{"id":7032,"nodeType":"StructuredDocumentation","src":"742:53:43","text":"@dev Cast an arbitrary slot to a AddressSlotType."},"id":7046,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"809:9:43","nodeType":"FunctionDefinition","parameters":{"id":7035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7034,"mutability":"mutable","name":"slot","nameLocation":"827:4:43","nodeType":"VariableDeclaration","scope":7046,"src":"819:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7033,"name":"bytes32","nodeType":"ElementaryTypeName","src":"819:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"818:14:43"},"returnParameters":{"id":7039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7038,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7046,"src":"856:15:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7031","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":7037,"nodeType":"UserDefinedTypeName","pathNode":{"id":7036,"name":"AddressSlotType","nameLocations":["856:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7031,"src":"856:15:43"},"referencedDeclaration":7031,"src":"856:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7031","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"855:17:43"},"scope":7225,"src":"800:123:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.BooleanSlotType","id":7048,"name":"BooleanSlotType","nameLocation":"1001:15:43","nodeType":"UserDefinedValueTypeDefinition","src":"996:32:43","underlyingType":{"id":7047,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1020:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":7062,"nodeType":"Block","src":"1165:50:43","statements":[{"expression":{"arguments":[{"id":7059,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7051,"src":"1203:4:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7057,"name":"BooleanSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7048,"src":"1182:15:43","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_BooleanSlotType_$7048_$","typeString":"type(StorageSlotExtension.BooleanSlotType)"}},"id":7058,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1198:4:43","memberName":"wrap","nodeType":"MemberAccess","src":"1182:20:43","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$7048_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":7060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1182:26:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"}},"functionReturnParameters":7056,"id":7061,"nodeType":"Return","src":"1175:33:43"}]},"documentation":{"id":7049,"nodeType":"StructuredDocumentation","src":"1034:53:43","text":"@dev Cast an arbitrary slot to a BooleanSlotType."},"id":7063,"implemented":true,"kind":"function","modifiers":[],"name":"asBoolean","nameLocation":"1101:9:43","nodeType":"FunctionDefinition","parameters":{"id":7052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7051,"mutability":"mutable","name":"slot","nameLocation":"1119:4:43","nodeType":"VariableDeclaration","scope":7063,"src":"1111:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7050,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1111:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1110:14:43"},"returnParameters":{"id":7056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7055,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7063,"src":"1148:15:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":7054,"nodeType":"UserDefinedTypeName","pathNode":{"id":7053,"name":"BooleanSlotType","nameLocations":["1148:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7048,"src":"1148:15:43"},"referencedDeclaration":7048,"src":"1148:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"1147:17:43"},"scope":7225,"src":"1092:123:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Bytes32SlotType","id":7065,"name":"Bytes32SlotType","nameLocation":"1293:15:43","nodeType":"UserDefinedValueTypeDefinition","src":"1288:32:43","underlyingType":{"id":7064,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1312:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":7079,"nodeType":"Block","src":"1457:50:43","statements":[{"expression":{"arguments":[{"id":7076,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7068,"src":"1495:4:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7074,"name":"Bytes32SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7065,"src":"1474:15:43","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Bytes32SlotType_$7065_$","typeString":"type(StorageSlotExtension.Bytes32SlotType)"}},"id":7075,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1490:4:43","memberName":"wrap","nodeType":"MemberAccess","src":"1474:20:43","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Bytes32SlotType_$7065_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Bytes32SlotType)"}},"id":7077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1474:26:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7065","typeString":"StorageSlotExtension.Bytes32SlotType"}},"functionReturnParameters":7073,"id":7078,"nodeType":"Return","src":"1467:33:43"}]},"documentation":{"id":7066,"nodeType":"StructuredDocumentation","src":"1326:53:43","text":"@dev Cast an arbitrary slot to a Bytes32SlotType."},"id":7080,"implemented":true,"kind":"function","modifiers":[],"name":"asBytes32","nameLocation":"1393:9:43","nodeType":"FunctionDefinition","parameters":{"id":7069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7068,"mutability":"mutable","name":"slot","nameLocation":"1411:4:43","nodeType":"VariableDeclaration","scope":7080,"src":"1403:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7067,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1403:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1402:14:43"},"returnParameters":{"id":7073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7072,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7080,"src":"1440:15:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7065","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":7071,"nodeType":"UserDefinedTypeName","pathNode":{"id":7070,"name":"Bytes32SlotType","nameLocations":["1440:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7065,"src":"1440:15:43"},"referencedDeclaration":7065,"src":"1440:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7065","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"1439:17:43"},"scope":7225,"src":"1384:123:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Uint256SlotType","id":7082,"name":"Uint256SlotType","nameLocation":"1585:15:43","nodeType":"UserDefinedValueTypeDefinition","src":"1580:32:43","underlyingType":{"id":7081,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1604:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":7096,"nodeType":"Block","src":"1749:50:43","statements":[{"expression":{"arguments":[{"id":7093,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7085,"src":"1787:4:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7091,"name":"Uint256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7082,"src":"1766:15:43","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Uint256SlotType_$7082_$","typeString":"type(StorageSlotExtension.Uint256SlotType)"}},"id":7092,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1782:4:43","memberName":"wrap","nodeType":"MemberAccess","src":"1766:20:43","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$7082_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":7094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1766:26:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7082","typeString":"StorageSlotExtension.Uint256SlotType"}},"functionReturnParameters":7090,"id":7095,"nodeType":"Return","src":"1759:33:43"}]},"documentation":{"id":7083,"nodeType":"StructuredDocumentation","src":"1618:53:43","text":"@dev Cast an arbitrary slot to a Uint256SlotType."},"id":7097,"implemented":true,"kind":"function","modifiers":[],"name":"asUint256","nameLocation":"1685:9:43","nodeType":"FunctionDefinition","parameters":{"id":7086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7085,"mutability":"mutable","name":"slot","nameLocation":"1703:4:43","nodeType":"VariableDeclaration","scope":7097,"src":"1695:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7084,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1695:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1694:14:43"},"returnParameters":{"id":7090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7089,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7097,"src":"1732:15:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7082","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":7088,"nodeType":"UserDefinedTypeName","pathNode":{"id":7087,"name":"Uint256SlotType","nameLocations":["1732:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7082,"src":"1732:15:43"},"referencedDeclaration":7082,"src":"1732:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7082","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"1731:17:43"},"scope":7225,"src":"1676:123:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Int256SlotType","id":7099,"name":"Int256SlotType","nameLocation":"1877:14:43","nodeType":"UserDefinedValueTypeDefinition","src":"1872:31:43","underlyingType":{"id":7098,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1895:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":7113,"nodeType":"Block","src":"2038:49:43","statements":[{"expression":{"arguments":[{"id":7110,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7102,"src":"2075:4:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7108,"name":"Int256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7099,"src":"2055:14:43","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Int256SlotType_$7099_$","typeString":"type(StorageSlotExtension.Int256SlotType)"}},"id":7109,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2070:4:43","memberName":"wrap","nodeType":"MemberAccess","src":"2055:19:43","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Int256SlotType_$7099_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Int256SlotType)"}},"id":7111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2055:25:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7099","typeString":"StorageSlotExtension.Int256SlotType"}},"functionReturnParameters":7107,"id":7112,"nodeType":"Return","src":"2048:32:43"}]},"documentation":{"id":7100,"nodeType":"StructuredDocumentation","src":"1909:53:43","text":"@dev Cast an arbitrary slot to an Int256SlotType."},"id":7114,"implemented":true,"kind":"function","modifiers":[],"name":"asInt256","nameLocation":"1976:8:43","nodeType":"FunctionDefinition","parameters":{"id":7103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7102,"mutability":"mutable","name":"slot","nameLocation":"1993:4:43","nodeType":"VariableDeclaration","scope":7114,"src":"1985:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7101,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1985:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1984:14:43"},"returnParameters":{"id":7107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7106,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7114,"src":"2022:14:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7099","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":7105,"nodeType":"UserDefinedTypeName","pathNode":{"id":7104,"name":"Int256SlotType","nameLocations":["2022:14:43"],"nodeType":"IdentifierPath","referencedDeclaration":7099,"src":"2022:14:43"},"referencedDeclaration":7099,"src":"2022:14:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7099","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"2021:16:43"},"scope":7225,"src":"1967:120:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7124,"nodeType":"Block","src":"2242:112:43","statements":[{"AST":{"nativeSrc":"2304:44:43","nodeType":"YulBlock","src":"2304:44:43","statements":[{"nativeSrc":"2318:20:43","nodeType":"YulAssignment","src":"2318:20:43","value":{"arguments":[{"name":"slot","nativeSrc":"2333:4:43","nodeType":"YulIdentifier","src":"2333:4:43"}],"functionName":{"name":"tload","nativeSrc":"2327:5:43","nodeType":"YulIdentifier","src":"2327:5:43"},"nativeSrc":"2327:11:43","nodeType":"YulFunctionCall","src":"2327:11:43"},"variableNames":[{"name":"value","nativeSrc":"2318:5:43","nodeType":"YulIdentifier","src":"2318:5:43"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7118,"isOffset":false,"isSlot":false,"src":"2333:4:43","valueSize":1},{"declaration":7121,"isOffset":false,"isSlot":false,"src":"2318:5:43","valueSize":1}],"id":7123,"nodeType":"InlineAssembly","src":"2295:53:43"}]},"documentation":{"id":7115,"nodeType":"StructuredDocumentation","src":"2093:69:43","text":"@dev Load the value held at location `slot` in transient storage."},"id":7125,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2176:5:43","nodeType":"FunctionDefinition","parameters":{"id":7119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7118,"mutability":"mutable","name":"slot","nameLocation":"2198:4:43","nodeType":"VariableDeclaration","scope":7125,"src":"2182:20:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7031","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":7117,"nodeType":"UserDefinedTypeName","pathNode":{"id":7116,"name":"AddressSlotType","nameLocations":["2182:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7031,"src":"2182:15:43"},"referencedDeclaration":7031,"src":"2182:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7031","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"2181:22:43"},"returnParameters":{"id":7122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7121,"mutability":"mutable","name":"value","nameLocation":"2235:5:43","nodeType":"VariableDeclaration","scope":7125,"src":"2227:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7120,"name":"address","nodeType":"ElementaryTypeName","src":"2227:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2226:15:43"},"scope":7225,"src":"2167:187:43","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7135,"nodeType":"Block","src":"2490:111:43","statements":[{"AST":{"nativeSrc":"2552:43:43","nodeType":"YulBlock","src":"2552:43:43","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"2573:4:43","nodeType":"YulIdentifier","src":"2573:4:43"},{"name":"value","nativeSrc":"2579:5:43","nodeType":"YulIdentifier","src":"2579:5:43"}],"functionName":{"name":"tstore","nativeSrc":"2566:6:43","nodeType":"YulIdentifier","src":"2566:6:43"},"nativeSrc":"2566:19:43","nodeType":"YulFunctionCall","src":"2566:19:43"},"nativeSrc":"2566:19:43","nodeType":"YulExpressionStatement","src":"2566:19:43"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7129,"isOffset":false,"isSlot":false,"src":"2573:4:43","valueSize":1},{"declaration":7131,"isOffset":false,"isSlot":false,"src":"2579:5:43","valueSize":1}],"id":7134,"nodeType":"InlineAssembly","src":"2543:52:43"}]},"documentation":{"id":7126,"nodeType":"StructuredDocumentation","src":"2360:63:43","text":"@dev Store `value` at location `slot` in transient storage."},"id":7136,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2437:6:43","nodeType":"FunctionDefinition","parameters":{"id":7132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7129,"mutability":"mutable","name":"slot","nameLocation":"2460:4:43","nodeType":"VariableDeclaration","scope":7136,"src":"2444:20:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7031","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":7128,"nodeType":"UserDefinedTypeName","pathNode":{"id":7127,"name":"AddressSlotType","nameLocations":["2444:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7031,"src":"2444:15:43"},"referencedDeclaration":7031,"src":"2444:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7031","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"},{"constant":false,"id":7131,"mutability":"mutable","name":"value","nameLocation":"2474:5:43","nodeType":"VariableDeclaration","scope":7136,"src":"2466:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7130,"name":"address","nodeType":"ElementaryTypeName","src":"2466:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2443:37:43"},"returnParameters":{"id":7133,"nodeType":"ParameterList","parameters":[],"src":"2490:0:43"},"scope":7225,"src":"2428:173:43","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7146,"nodeType":"Block","src":"2753:112:43","statements":[{"AST":{"nativeSrc":"2815:44:43","nodeType":"YulBlock","src":"2815:44:43","statements":[{"nativeSrc":"2829:20:43","nodeType":"YulAssignment","src":"2829:20:43","value":{"arguments":[{"name":"slot","nativeSrc":"2844:4:43","nodeType":"YulIdentifier","src":"2844:4:43"}],"functionName":{"name":"tload","nativeSrc":"2838:5:43","nodeType":"YulIdentifier","src":"2838:5:43"},"nativeSrc":"2838:11:43","nodeType":"YulFunctionCall","src":"2838:11:43"},"variableNames":[{"name":"value","nativeSrc":"2829:5:43","nodeType":"YulIdentifier","src":"2829:5:43"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7140,"isOffset":false,"isSlot":false,"src":"2844:4:43","valueSize":1},{"declaration":7143,"isOffset":false,"isSlot":false,"src":"2829:5:43","valueSize":1}],"id":7145,"nodeType":"InlineAssembly","src":"2806:53:43"}]},"documentation":{"id":7137,"nodeType":"StructuredDocumentation","src":"2607:69:43","text":"@dev Load the value held at location `slot` in transient storage."},"id":7147,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2690:5:43","nodeType":"FunctionDefinition","parameters":{"id":7141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7140,"mutability":"mutable","name":"slot","nameLocation":"2712:4:43","nodeType":"VariableDeclaration","scope":7147,"src":"2696:20:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":7139,"nodeType":"UserDefinedTypeName","pathNode":{"id":7138,"name":"BooleanSlotType","nameLocations":["2696:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7048,"src":"2696:15:43"},"referencedDeclaration":7048,"src":"2696:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"2695:22:43"},"returnParameters":{"id":7144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7143,"mutability":"mutable","name":"value","nameLocation":"2746:5:43","nodeType":"VariableDeclaration","scope":7147,"src":"2741:10:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7142,"name":"bool","nodeType":"ElementaryTypeName","src":"2741:4:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2740:12:43"},"scope":7225,"src":"2681:184:43","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7157,"nodeType":"Block","src":"2998:111:43","statements":[{"AST":{"nativeSrc":"3060:43:43","nodeType":"YulBlock","src":"3060:43:43","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3081:4:43","nodeType":"YulIdentifier","src":"3081:4:43"},{"name":"value","nativeSrc":"3087:5:43","nodeType":"YulIdentifier","src":"3087:5:43"}],"functionName":{"name":"tstore","nativeSrc":"3074:6:43","nodeType":"YulIdentifier","src":"3074:6:43"},"nativeSrc":"3074:19:43","nodeType":"YulFunctionCall","src":"3074:19:43"},"nativeSrc":"3074:19:43","nodeType":"YulExpressionStatement","src":"3074:19:43"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7151,"isOffset":false,"isSlot":false,"src":"3081:4:43","valueSize":1},{"declaration":7153,"isOffset":false,"isSlot":false,"src":"3087:5:43","valueSize":1}],"id":7156,"nodeType":"InlineAssembly","src":"3051:52:43"}]},"documentation":{"id":7148,"nodeType":"StructuredDocumentation","src":"2871:63:43","text":"@dev Store `value` at location `slot` in transient storage."},"id":7158,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2948:6:43","nodeType":"FunctionDefinition","parameters":{"id":7154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7151,"mutability":"mutable","name":"slot","nameLocation":"2971:4:43","nodeType":"VariableDeclaration","scope":7158,"src":"2955:20:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":7150,"nodeType":"UserDefinedTypeName","pathNode":{"id":7149,"name":"BooleanSlotType","nameLocations":["2955:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7048,"src":"2955:15:43"},"referencedDeclaration":7048,"src":"2955:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7048","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"},{"constant":false,"id":7153,"mutability":"mutable","name":"value","nameLocation":"2982:5:43","nodeType":"VariableDeclaration","scope":7158,"src":"2977:10:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7152,"name":"bool","nodeType":"ElementaryTypeName","src":"2977:4:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2954:34:43"},"returnParameters":{"id":7155,"nodeType":"ParameterList","parameters":[],"src":"2998:0:43"},"scope":7225,"src":"2939:170:43","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7168,"nodeType":"Block","src":"3264:112:43","statements":[{"AST":{"nativeSrc":"3326:44:43","nodeType":"YulBlock","src":"3326:44:43","statements":[{"nativeSrc":"3340:20:43","nodeType":"YulAssignment","src":"3340:20:43","value":{"arguments":[{"name":"slot","nativeSrc":"3355:4:43","nodeType":"YulIdentifier","src":"3355:4:43"}],"functionName":{"name":"tload","nativeSrc":"3349:5:43","nodeType":"YulIdentifier","src":"3349:5:43"},"nativeSrc":"3349:11:43","nodeType":"YulFunctionCall","src":"3349:11:43"},"variableNames":[{"name":"value","nativeSrc":"3340:5:43","nodeType":"YulIdentifier","src":"3340:5:43"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7162,"isOffset":false,"isSlot":false,"src":"3355:4:43","valueSize":1},{"declaration":7165,"isOffset":false,"isSlot":false,"src":"3340:5:43","valueSize":1}],"id":7167,"nodeType":"InlineAssembly","src":"3317:53:43"}]},"documentation":{"id":7159,"nodeType":"StructuredDocumentation","src":"3115:69:43","text":"@dev Load the value held at location `slot` in transient storage."},"id":7169,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3198:5:43","nodeType":"FunctionDefinition","parameters":{"id":7163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7162,"mutability":"mutable","name":"slot","nameLocation":"3220:4:43","nodeType":"VariableDeclaration","scope":7169,"src":"3204:20:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7065","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":7161,"nodeType":"UserDefinedTypeName","pathNode":{"id":7160,"name":"Bytes32SlotType","nameLocations":["3204:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7065,"src":"3204:15:43"},"referencedDeclaration":7065,"src":"3204:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7065","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"3203:22:43"},"returnParameters":{"id":7166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7165,"mutability":"mutable","name":"value","nameLocation":"3257:5:43","nodeType":"VariableDeclaration","scope":7169,"src":"3249:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7164,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3249:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3248:15:43"},"scope":7225,"src":"3189:187:43","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7179,"nodeType":"Block","src":"3512:111:43","statements":[{"AST":{"nativeSrc":"3574:43:43","nodeType":"YulBlock","src":"3574:43:43","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3595:4:43","nodeType":"YulIdentifier","src":"3595:4:43"},{"name":"value","nativeSrc":"3601:5:43","nodeType":"YulIdentifier","src":"3601:5:43"}],"functionName":{"name":"tstore","nativeSrc":"3588:6:43","nodeType":"YulIdentifier","src":"3588:6:43"},"nativeSrc":"3588:19:43","nodeType":"YulFunctionCall","src":"3588:19:43"},"nativeSrc":"3588:19:43","nodeType":"YulExpressionStatement","src":"3588:19:43"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7173,"isOffset":false,"isSlot":false,"src":"3595:4:43","valueSize":1},{"declaration":7175,"isOffset":false,"isSlot":false,"src":"3601:5:43","valueSize":1}],"id":7178,"nodeType":"InlineAssembly","src":"3565:52:43"}]},"documentation":{"id":7170,"nodeType":"StructuredDocumentation","src":"3382:63:43","text":"@dev Store `value` at location `slot` in transient storage."},"id":7180,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3459:6:43","nodeType":"FunctionDefinition","parameters":{"id":7176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7173,"mutability":"mutable","name":"slot","nameLocation":"3482:4:43","nodeType":"VariableDeclaration","scope":7180,"src":"3466:20:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7065","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":7172,"nodeType":"UserDefinedTypeName","pathNode":{"id":7171,"name":"Bytes32SlotType","nameLocations":["3466:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7065,"src":"3466:15:43"},"referencedDeclaration":7065,"src":"3466:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7065","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"},{"constant":false,"id":7175,"mutability":"mutable","name":"value","nameLocation":"3496:5:43","nodeType":"VariableDeclaration","scope":7180,"src":"3488:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7174,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3488:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3465:37:43"},"returnParameters":{"id":7177,"nodeType":"ParameterList","parameters":[],"src":"3512:0:43"},"scope":7225,"src":"3450:173:43","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7190,"nodeType":"Block","src":"3778:112:43","statements":[{"AST":{"nativeSrc":"3840:44:43","nodeType":"YulBlock","src":"3840:44:43","statements":[{"nativeSrc":"3854:20:43","nodeType":"YulAssignment","src":"3854:20:43","value":{"arguments":[{"name":"slot","nativeSrc":"3869:4:43","nodeType":"YulIdentifier","src":"3869:4:43"}],"functionName":{"name":"tload","nativeSrc":"3863:5:43","nodeType":"YulIdentifier","src":"3863:5:43"},"nativeSrc":"3863:11:43","nodeType":"YulFunctionCall","src":"3863:11:43"},"variableNames":[{"name":"value","nativeSrc":"3854:5:43","nodeType":"YulIdentifier","src":"3854:5:43"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7184,"isOffset":false,"isSlot":false,"src":"3869:4:43","valueSize":1},{"declaration":7187,"isOffset":false,"isSlot":false,"src":"3854:5:43","valueSize":1}],"id":7189,"nodeType":"InlineAssembly","src":"3831:53:43"}]},"documentation":{"id":7181,"nodeType":"StructuredDocumentation","src":"3629:69:43","text":"@dev Load the value held at location `slot` in transient storage."},"id":7191,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3712:5:43","nodeType":"FunctionDefinition","parameters":{"id":7185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7184,"mutability":"mutable","name":"slot","nameLocation":"3734:4:43","nodeType":"VariableDeclaration","scope":7191,"src":"3718:20:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7082","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":7183,"nodeType":"UserDefinedTypeName","pathNode":{"id":7182,"name":"Uint256SlotType","nameLocations":["3718:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7082,"src":"3718:15:43"},"referencedDeclaration":7082,"src":"3718:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7082","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"3717:22:43"},"returnParameters":{"id":7188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7187,"mutability":"mutable","name":"value","nameLocation":"3771:5:43","nodeType":"VariableDeclaration","scope":7191,"src":"3763:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7186,"name":"uint256","nodeType":"ElementaryTypeName","src":"3763:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3762:15:43"},"scope":7225,"src":"3703:187:43","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7201,"nodeType":"Block","src":"4026:111:43","statements":[{"AST":{"nativeSrc":"4088:43:43","nodeType":"YulBlock","src":"4088:43:43","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4109:4:43","nodeType":"YulIdentifier","src":"4109:4:43"},{"name":"value","nativeSrc":"4115:5:43","nodeType":"YulIdentifier","src":"4115:5:43"}],"functionName":{"name":"tstore","nativeSrc":"4102:6:43","nodeType":"YulIdentifier","src":"4102:6:43"},"nativeSrc":"4102:19:43","nodeType":"YulFunctionCall","src":"4102:19:43"},"nativeSrc":"4102:19:43","nodeType":"YulExpressionStatement","src":"4102:19:43"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7195,"isOffset":false,"isSlot":false,"src":"4109:4:43","valueSize":1},{"declaration":7197,"isOffset":false,"isSlot":false,"src":"4115:5:43","valueSize":1}],"id":7200,"nodeType":"InlineAssembly","src":"4079:52:43"}]},"documentation":{"id":7192,"nodeType":"StructuredDocumentation","src":"3896:63:43","text":"@dev Store `value` at location `slot` in transient storage."},"id":7202,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3973:6:43","nodeType":"FunctionDefinition","parameters":{"id":7198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7195,"mutability":"mutable","name":"slot","nameLocation":"3996:4:43","nodeType":"VariableDeclaration","scope":7202,"src":"3980:20:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7082","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":7194,"nodeType":"UserDefinedTypeName","pathNode":{"id":7193,"name":"Uint256SlotType","nameLocations":["3980:15:43"],"nodeType":"IdentifierPath","referencedDeclaration":7082,"src":"3980:15:43"},"referencedDeclaration":7082,"src":"3980:15:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7082","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"},{"constant":false,"id":7197,"mutability":"mutable","name":"value","nameLocation":"4010:5:43","nodeType":"VariableDeclaration","scope":7202,"src":"4002:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7196,"name":"uint256","nodeType":"ElementaryTypeName","src":"4002:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3979:37:43"},"returnParameters":{"id":7199,"nodeType":"ParameterList","parameters":[],"src":"4026:0:43"},"scope":7225,"src":"3964:173:43","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7212,"nodeType":"Block","src":"4290:112:43","statements":[{"AST":{"nativeSrc":"4352:44:43","nodeType":"YulBlock","src":"4352:44:43","statements":[{"nativeSrc":"4366:20:43","nodeType":"YulAssignment","src":"4366:20:43","value":{"arguments":[{"name":"slot","nativeSrc":"4381:4:43","nodeType":"YulIdentifier","src":"4381:4:43"}],"functionName":{"name":"tload","nativeSrc":"4375:5:43","nodeType":"YulIdentifier","src":"4375:5:43"},"nativeSrc":"4375:11:43","nodeType":"YulFunctionCall","src":"4375:11:43"},"variableNames":[{"name":"value","nativeSrc":"4366:5:43","nodeType":"YulIdentifier","src":"4366:5:43"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7206,"isOffset":false,"isSlot":false,"src":"4381:4:43","valueSize":1},{"declaration":7209,"isOffset":false,"isSlot":false,"src":"4366:5:43","valueSize":1}],"id":7211,"nodeType":"InlineAssembly","src":"4343:53:43"}]},"documentation":{"id":7203,"nodeType":"StructuredDocumentation","src":"4143:69:43","text":"@dev Load the value held at location `slot` in transient storage."},"id":7213,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"4226:5:43","nodeType":"FunctionDefinition","parameters":{"id":7207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7206,"mutability":"mutable","name":"slot","nameLocation":"4247:4:43","nodeType":"VariableDeclaration","scope":7213,"src":"4232:19:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7099","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":7205,"nodeType":"UserDefinedTypeName","pathNode":{"id":7204,"name":"Int256SlotType","nameLocations":["4232:14:43"],"nodeType":"IdentifierPath","referencedDeclaration":7099,"src":"4232:14:43"},"referencedDeclaration":7099,"src":"4232:14:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7099","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"4231:21:43"},"returnParameters":{"id":7210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7209,"mutability":"mutable","name":"value","nameLocation":"4283:5:43","nodeType":"VariableDeclaration","scope":7213,"src":"4276:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7208,"name":"int256","nodeType":"ElementaryTypeName","src":"4276:6:43","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4275:14:43"},"scope":7225,"src":"4217:185:43","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7223,"nodeType":"Block","src":"4536:111:43","statements":[{"AST":{"nativeSrc":"4598:43:43","nodeType":"YulBlock","src":"4598:43:43","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4619:4:43","nodeType":"YulIdentifier","src":"4619:4:43"},{"name":"value","nativeSrc":"4625:5:43","nodeType":"YulIdentifier","src":"4625:5:43"}],"functionName":{"name":"tstore","nativeSrc":"4612:6:43","nodeType":"YulIdentifier","src":"4612:6:43"},"nativeSrc":"4612:19:43","nodeType":"YulFunctionCall","src":"4612:19:43"},"nativeSrc":"4612:19:43","nodeType":"YulExpressionStatement","src":"4612:19:43"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7217,"isOffset":false,"isSlot":false,"src":"4619:4:43","valueSize":1},{"declaration":7219,"isOffset":false,"isSlot":false,"src":"4625:5:43","valueSize":1}],"id":7222,"nodeType":"InlineAssembly","src":"4589:52:43"}]},"documentation":{"id":7214,"nodeType":"StructuredDocumentation","src":"4408:63:43","text":"@dev Store `value` at location `slot` in transient storage."},"id":7224,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"4485:6:43","nodeType":"FunctionDefinition","parameters":{"id":7220,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7217,"mutability":"mutable","name":"slot","nameLocation":"4507:4:43","nodeType":"VariableDeclaration","scope":7224,"src":"4492:19:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7099","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":7216,"nodeType":"UserDefinedTypeName","pathNode":{"id":7215,"name":"Int256SlotType","nameLocations":["4492:14:43"],"nodeType":"IdentifierPath","referencedDeclaration":7099,"src":"4492:14:43"},"referencedDeclaration":7099,"src":"4492:14:43","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7099","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"},{"constant":false,"id":7219,"mutability":"mutable","name":"value","nameLocation":"4520:5:43","nodeType":"VariableDeclaration","scope":7224,"src":"4513:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7218,"name":"int256","nodeType":"ElementaryTypeName","src":"4513:6:43","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4491:35:43"},"returnParameters":{"id":7221,"nodeType":"ParameterList","parameters":[],"src":"4536:0:43"},"scope":7225,"src":"4476:171:43","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":7226,"src":"278:4371:43","usedErrors":[],"usedEvents":[]}],"src":"33:4617:43"},"id":43},"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol","exportedSymbols":{"ERC20":[10498],"ERC20TestToken":[7343]},"id":7344,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":7227,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:44"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/ERC20.sol","file":"@openzeppelin/contracts/token/ERC20/ERC20.sol","id":7229,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7344,"sourceUnit":10499,"src":"72:70:44","symbolAliases":[{"foreign":{"id":7228,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10498,"src":"81:5:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":7230,"name":"ERC20","nameLocations":["171:5:44"],"nodeType":"IdentifierPath","referencedDeclaration":10498,"src":"171:5:44"},"id":7231,"nodeType":"InheritanceSpecifier","src":"171:5:44"}],"canonicalName":"ERC20TestToken","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":7343,"linearizedBaseContracts":[7343,10498,9888,10602,10576,12366],"name":"ERC20TestToken","nameLocation":"153:14:44","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":7233,"mutability":"immutable","name":"_decimals","nameLocation":"207:9:44","nodeType":"VariableDeclaration","scope":7343,"src":"183:33:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7232,"name":"uint8","nodeType":"ElementaryTypeName","src":"183:5:44","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"private"},{"documentation":{"id":7234,"nodeType":"StructuredDocumentation","src":"223:57:44","text":"@dev Simulate tokens that don't allow zero transfers."},"errorSelector":"10cadee3","id":7236,"name":"ZeroTransfer","nameLocation":"291:12:44","nodeType":"ErrorDefinition","parameters":{"id":7235,"nodeType":"ParameterList","parameters":[],"src":"303:2:44"},"src":"285:21:44"},{"body":{"id":7253,"nodeType":"Block","src":"403:38:44","statements":[{"expression":{"id":7251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7249,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"413:9:44","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7250,"name":"decimals_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7242,"src":"425:9:44","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"413:21:44","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":7252,"nodeType":"ExpressionStatement","src":"413:21:44"}]},"id":7254,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":7245,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7238,"src":"389:4:44","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":7246,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7240,"src":"395:6:44","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":7247,"kind":"baseConstructorSpecifier","modifierName":{"id":7244,"name":"ERC20","nameLocations":["383:5:44"],"nodeType":"IdentifierPath","referencedDeclaration":10498,"src":"383:5:44"},"nodeType":"ModifierInvocation","src":"383:19:44"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":7243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7238,"mutability":"mutable","name":"name","nameLocation":"338:4:44","nodeType":"VariableDeclaration","scope":7254,"src":"324:18:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7237,"name":"string","nodeType":"ElementaryTypeName","src":"324:6:44","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":7240,"mutability":"mutable","name":"symbol","nameLocation":"358:6:44","nodeType":"VariableDeclaration","scope":7254,"src":"344:20:44","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7239,"name":"string","nodeType":"ElementaryTypeName","src":"344:6:44","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":7242,"mutability":"mutable","name":"decimals_","nameLocation":"372:9:44","nodeType":"VariableDeclaration","scope":7254,"src":"366:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7241,"name":"uint8","nodeType":"ElementaryTypeName","src":"366:5:44","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"323:59:44"},"returnParameters":{"id":7248,"nodeType":"ParameterList","parameters":[],"src":"403:0:44"},"scope":7343,"src":"312:129:44","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[10062],"body":{"id":7262,"nodeType":"Block","src":"504:33:44","statements":[{"expression":{"id":7260,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"521:9:44","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":7259,"id":7261,"nodeType":"Return","src":"514:16:44"}]},"functionSelector":"313ce567","id":7263,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"456:8:44","nodeType":"FunctionDefinition","overrides":{"id":7256,"nodeType":"OverrideSpecifier","overrides":[],"src":"479:8:44"},"parameters":{"id":7255,"nodeType":"ParameterList","parameters":[],"src":"464:2:44"},"returnParameters":{"id":7259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7258,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7263,"src":"497:5:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7257,"name":"uint8","nodeType":"ElementaryTypeName","src":"497:5:44","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"496:7:44"},"scope":7343,"src":"447:90:44","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":7275,"nodeType":"Block","src":"601:41:44","statements":[{"expression":{"arguments":[{"id":7271,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7265,"src":"617:9:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7272,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7267,"src":"628:6:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7270,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10338,"src":"611:5:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":7273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"611:24:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7274,"nodeType":"ExpressionStatement","src":"611:24:44"}]},"functionSelector":"40c10f19","id":7276,"implemented":true,"kind":"function","modifiers":[],"name":"mint","nameLocation":"552:4:44","nodeType":"FunctionDefinition","parameters":{"id":7268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7265,"mutability":"mutable","name":"recipient","nameLocation":"565:9:44","nodeType":"VariableDeclaration","scope":7276,"src":"557:17:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7264,"name":"address","nodeType":"ElementaryTypeName","src":"557:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7267,"mutability":"mutable","name":"amount","nameLocation":"584:6:44","nodeType":"VariableDeclaration","scope":7276,"src":"576:14:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7266,"name":"uint256","nodeType":"ElementaryTypeName","src":"576:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"556:35:44"},"returnParameters":{"id":7269,"nodeType":"ParameterList","parameters":[],"src":"601:0:44"},"scope":7343,"src":"543:99:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7288,"nodeType":"Block","src":"703:38:44","statements":[{"expression":{"arguments":[{"id":7284,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7278,"src":"719:6:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7285,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7280,"src":"727:6:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7283,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10371,"src":"713:5:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":7286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"713:21:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7287,"nodeType":"ExpressionStatement","src":"713:21:44"}]},"functionSelector":"9dc29fac","id":7289,"implemented":true,"kind":"function","modifiers":[],"name":"burn","nameLocation":"657:4:44","nodeType":"FunctionDefinition","parameters":{"id":7281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7278,"mutability":"mutable","name":"sender","nameLocation":"670:6:44","nodeType":"VariableDeclaration","scope":7289,"src":"662:14:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7277,"name":"address","nodeType":"ElementaryTypeName","src":"662:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7280,"mutability":"mutable","name":"amount","nameLocation":"686:6:44","nodeType":"VariableDeclaration","scope":7289,"src":"678:14:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7279,"name":"uint256","nodeType":"ElementaryTypeName","src":"678:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"661:32:44"},"returnParameters":{"id":7282,"nodeType":"ParameterList","parameters":[],"src":"703:0:44"},"scope":7343,"src":"648:93:44","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[10108],"body":{"id":7313,"nodeType":"Block","src":"823:121:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7299,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7293,"src":"837:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7300,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"846:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"837:10:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7306,"nodeType":"IfStatement","src":"833:62:44","trueBody":{"id":7305,"nodeType":"Block","src":"849:46:44","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7302,"name":"ZeroTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7236,"src":"870:12:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"870:14:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7304,"nodeType":"RevertStatement","src":"863:21:44"}]}},{"expression":{"arguments":[{"id":7309,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7291,"src":"927:2:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7310,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7293,"src":"931:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7307,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"912:5:44","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ERC20TestToken_$7343_$","typeString":"type(contract super ERC20TestToken)"}},"id":7308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"918:8:44","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":10108,"src":"912:14:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) returns (bool)"}},"id":7311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"912:25:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7298,"id":7312,"nodeType":"Return","src":"905:32:44"}]},"functionSelector":"a9059cbb","id":7314,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"756:8:44","nodeType":"FunctionDefinition","overrides":{"id":7295,"nodeType":"OverrideSpecifier","overrides":[],"src":"799:8:44"},"parameters":{"id":7294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7291,"mutability":"mutable","name":"to","nameLocation":"773:2:44","nodeType":"VariableDeclaration","scope":7314,"src":"765:10:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7290,"name":"address","nodeType":"ElementaryTypeName","src":"765:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7293,"mutability":"mutable","name":"value","nameLocation":"785:5:44","nodeType":"VariableDeclaration","scope":7314,"src":"777:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7292,"name":"uint256","nodeType":"ElementaryTypeName","src":"777:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"764:27:44"},"returnParameters":{"id":7298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7297,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7314,"src":"817:4:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7296,"name":"bool","nodeType":"ElementaryTypeName","src":"817:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"816:6:44"},"scope":7343,"src":"747:197:44","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[10181],"body":{"id":7341,"nodeType":"Block","src":"1044:131:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7326,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7320,"src":"1058:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1067:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1058:10:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7333,"nodeType":"IfStatement","src":"1054:62:44","trueBody":{"id":7332,"nodeType":"Block","src":"1070:46:44","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7329,"name":"ZeroTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7236,"src":"1091:12:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1091:14:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7331,"nodeType":"RevertStatement","src":"1084:21:44"}]}},{"expression":{"arguments":[{"id":7336,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7316,"src":"1152:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7337,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7318,"src":"1158:2:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7338,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7320,"src":"1162:5:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7334,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"1133:5:44","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ERC20TestToken_$7343_$","typeString":"type(contract super ERC20TestToken)"}},"id":7335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1139:12:44","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":10181,"src":"1133:18:44","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) returns (bool)"}},"id":7339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1133:35:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7325,"id":7340,"nodeType":"Return","src":"1126:42:44"}]},"functionSelector":"23b872dd","id":7342,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"959:12:44","nodeType":"FunctionDefinition","overrides":{"id":7322,"nodeType":"OverrideSpecifier","overrides":[],"src":"1020:8:44"},"parameters":{"id":7321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7316,"mutability":"mutable","name":"from","nameLocation":"980:4:44","nodeType":"VariableDeclaration","scope":7342,"src":"972:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7315,"name":"address","nodeType":"ElementaryTypeName","src":"972:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7318,"mutability":"mutable","name":"to","nameLocation":"994:2:44","nodeType":"VariableDeclaration","scope":7342,"src":"986:10:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7317,"name":"address","nodeType":"ElementaryTypeName","src":"986:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7320,"mutability":"mutable","name":"value","nameLocation":"1006:5:44","nodeType":"VariableDeclaration","scope":7342,"src":"998:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7319,"name":"uint256","nodeType":"ElementaryTypeName","src":"998:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"971:41:44"},"returnParameters":{"id":7325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7324,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7342,"src":"1038:4:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7323,"name":"bool","nodeType":"ElementaryTypeName","src":"1038:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1037:6:44"},"scope":7343,"src":"950:225:44","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":7344,"src":"144:1033:44","usedErrors":[7236,9858,9863,9868,9877,9882,9887],"usedEvents":[10510,10519]}],"src":"46:1132:44"},"id":44},"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol","exportedSymbols":{"Authentication":[4385],"CommonAuthentication":[7535],"IVault":[2545]},"id":7536,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":7345,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:45"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":7347,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7536,"sourceUnit":2546,"src":"72:81:45","symbolAliases":[{"foreign":{"id":7346,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"81:6:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","id":7349,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7536,"sourceUnit":4386,"src":"154:103:45","symbolAliases":[{"foreign":{"id":7348,"name":"Authentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4385,"src":"163:14:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":7351,"name":"Authentication","nameLocations":["390:14:45"],"nodeType":"IdentifierPath","referencedDeclaration":4385,"src":"390:14:45"},"id":7352,"nodeType":"InheritanceSpecifier","src":"390:14:45"}],"canonicalName":"CommonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":7350,"nodeType":"StructuredDocumentation","src":"259:89:45","text":"@dev Base contract for performing access control on external functions within pools."},"fullyImplemented":true,"id":7535,"linearizedBaseContracts":[7535,4385,14],"name":"CommonAuthentication","nameLocation":"366:20:45","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7353,"nodeType":"StructuredDocumentation","src":"411:36:45","text":"@dev Vault cannot be address(0)."},"errorSelector":"c8e28160","id":7355,"name":"VaultNotSet","nameLocation":"458:11:45","nodeType":"ErrorDefinition","parameters":{"id":7354,"nodeType":"ParameterList","parameters":[],"src":"469:2:45"},"src":"452:20:45"},{"constant":false,"id":7358,"mutability":"immutable","name":"_vault","nameLocation":"503:6:45","nodeType":"VariableDeclaration","scope":7535,"src":"478:31:45","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":7357,"nodeType":"UserDefinedTypeName","pathNode":{"id":7356,"name":"IVault","nameLocations":["478:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"478:6:45"},"referencedDeclaration":2545,"src":"478:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"private"},{"body":{"id":7377,"nodeType":"Block","src":"667:161:45","statements":[{"assignments":[7364],"declarations":[{"constant":false,"id":7364,"mutability":"mutable","name":"roleAddress","nameLocation":"685:11:45","nodeType":"VariableDeclaration","scope":7377,"src":"677:19:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7363,"name":"address","nodeType":"ElementaryTypeName","src":"677:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":7370,"initialValue":{"expression":{"arguments":[{"id":7367,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7361,"src":"726:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7365,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7358,"src":"699:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":7366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"706:19:45","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":3776,"src":"699:26:45","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$4111_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":7368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"699:32:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":7369,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"732:14:45","memberName":"swapFeeManager","nodeType":"MemberAccess","referencedDeclaration":4108,"src":"699:47:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"677:69:45"},{"expression":{"arguments":[{"id":7372,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7361,"src":"792:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7373,"name":"roleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7364,"src":"798:11:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":7371,"name":"_ensureAuthenticatedByExclusiveRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7503,"src":"756:35:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) view"}},"id":7374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"756:54:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7375,"nodeType":"ExpressionStatement","src":"756:54:45"},{"id":7376,"nodeType":"PlaceholderStatement","src":"820:1:45"}]},"documentation":{"id":7359,"nodeType":"StructuredDocumentation","src":"516:92:45","text":"@notice Caller must be the swapFeeManager, if defined. Otherwise, default to governance."},"id":7378,"name":"onlySwapFeeManagerOrGovernance","nameLocation":"622:30:45","nodeType":"ModifierDefinition","parameters":{"id":7362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7361,"mutability":"mutable","name":"pool","nameLocation":"661:4:45","nodeType":"VariableDeclaration","scope":7378,"src":"653:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7360,"name":"address","nodeType":"ElementaryTypeName","src":"653:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"652:14:45"},"src":"613:215:45","virtual":false,"visibility":"internal"},{"body":{"id":7407,"nodeType":"Block","src":"929:120:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":7397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":7391,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7381,"src":"951:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}],"id":7390,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"943:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7389,"name":"address","nodeType":"ElementaryTypeName","src":"943:7:45","typeDescriptions":{}}},"id":7392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"943:14:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":7395,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"969:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":7394,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"961:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7393,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:45","typeDescriptions":{}}},"id":7396,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"961:10:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"943:28:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7402,"nodeType":"IfStatement","src":"939:79:45","trueBody":{"id":7401,"nodeType":"Block","src":"973:45:45","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7398,"name":"VaultNotSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7355,"src":"994:11:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"994:13:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7400,"nodeType":"RevertStatement","src":"987:20:45"}]}},{"expression":{"id":7405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7403,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7358,"src":"1028:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7404,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7381,"src":"1037:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"src":"1028:14:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":7406,"nodeType":"ExpressionStatement","src":"1028:14:45"}]},"id":7408,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":7386,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7383,"src":"906:21:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":7387,"kind":"baseConstructorSpecifier","modifierName":{"id":7385,"name":"Authentication","nameLocations":["891:14:45"],"nodeType":"IdentifierPath","referencedDeclaration":4385,"src":"891:14:45"},"nodeType":"ModifierInvocation","src":"891:37:45"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":7384,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7381,"mutability":"mutable","name":"vault","nameLocation":"853:5:45","nodeType":"VariableDeclaration","scope":7408,"src":"846:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":7380,"nodeType":"UserDefinedTypeName","pathNode":{"id":7379,"name":"IVault","nameLocations":["846:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"846:6:45"},"referencedDeclaration":2545,"src":"846:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":7383,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"868:21:45","nodeType":"VariableDeclaration","scope":7408,"src":"860:29:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7382,"name":"bytes32","nodeType":"ElementaryTypeName","src":"860:7:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"845:45:45"},"returnParameters":{"id":7388,"nodeType":"ParameterList","parameters":[],"src":"929:0:45"},"scope":7535,"src":"834:215:45","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7416,"nodeType":"Block","src":"1107:30:45","statements":[{"expression":{"id":7414,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7358,"src":"1124:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"functionReturnParameters":7413,"id":7415,"nodeType":"Return","src":"1117:13:45"}]},"id":7417,"implemented":true,"kind":"function","modifiers":[],"name":"_getVault","nameLocation":"1064:9:45","nodeType":"FunctionDefinition","parameters":{"id":7409,"nodeType":"ParameterList","parameters":[],"src":"1073:2:45"},"returnParameters":{"id":7413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7412,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7417,"src":"1099:6:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":7411,"nodeType":"UserDefinedTypeName","pathNode":{"id":7410,"name":"IVault","nameLocations":["1099:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1099:6:45"},"referencedDeclaration":2545,"src":"1099:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1098:8:45"},"scope":7535,"src":"1055:82:45","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[4384],"body":{"id":7439,"nodeType":"Block","src":"1319:88:45","statements":[{"expression":{"arguments":[{"id":7431,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7419,"src":"1370:8:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":7432,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7421,"src":"1380:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":7435,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1394:4:45","typeDescriptions":{"typeIdentifier":"t_contract$_CommonAuthentication_$7535","typeString":"contract CommonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CommonAuthentication_$7535","typeString":"contract CommonAuthentication"}],"id":7434,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1386:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7433,"name":"address","nodeType":"ElementaryTypeName","src":"1386:7:45","typeDescriptions":{}}},"id":7436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1386:13:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7427,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7358,"src":"1336:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":7428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1343:13:45","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":3859,"src":"1336:20:45","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1341_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":7429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1336:22:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"id":7430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1359:10:45","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":1340,"src":"1336:33:45","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":7437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1336:64:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7426,"id":7438,"nodeType":"Return","src":"1329:71:45"}]},"id":7440,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1237:11:45","nodeType":"FunctionDefinition","overrides":{"id":7423,"nodeType":"OverrideSpecifier","overrides":[],"src":"1295:8:45"},"parameters":{"id":7422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7419,"mutability":"mutable","name":"actionId","nameLocation":"1257:8:45","nodeType":"VariableDeclaration","scope":7440,"src":"1249:16:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7418,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1249:7:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7421,"mutability":"mutable","name":"user","nameLocation":"1275:4:45","nodeType":"VariableDeclaration","scope":7440,"src":"1267:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7420,"name":"address","nodeType":"ElementaryTypeName","src":"1267:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1248:32:45"},"returnParameters":{"id":7426,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7425,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7440,"src":"1313:4:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7424,"name":"bool","nodeType":"ElementaryTypeName","src":"1313:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1312:6:45"},"scope":7535,"src":"1228:179:45","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7460,"nodeType":"Block","src":"1513:83:45","statements":[{"expression":{"arguments":[{"id":7455,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7442,"src":"1564:8:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":7456,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7444,"src":"1574:7:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7457,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7446,"src":"1583:5:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7451,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7358,"src":"1530:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":7452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1537:13:45","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":3859,"src":"1530:20:45","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1341_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":7453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1530:22:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"id":7454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1553:10:45","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":1340,"src":"1530:33:45","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":7458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1530:59:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7450,"id":7459,"nodeType":"Return","src":"1523:66:45"}]},"id":7461,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1422:11:45","nodeType":"FunctionDefinition","parameters":{"id":7447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7442,"mutability":"mutable","name":"actionId","nameLocation":"1442:8:45","nodeType":"VariableDeclaration","scope":7461,"src":"1434:16:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7441,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1434:7:45","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7444,"mutability":"mutable","name":"account","nameLocation":"1460:7:45","nodeType":"VariableDeclaration","scope":7461,"src":"1452:15:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7443,"name":"address","nodeType":"ElementaryTypeName","src":"1452:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7446,"mutability":"mutable","name":"where","nameLocation":"1477:5:45","nodeType":"VariableDeclaration","scope":7461,"src":"1469:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7445,"name":"address","nodeType":"ElementaryTypeName","src":"1469:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1433:50:45"},"returnParameters":{"id":7450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7449,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7461,"src":"1507:4:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7448,"name":"bool","nodeType":"ElementaryTypeName","src":"1507:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1506:6:45"},"scope":7535,"src":"1413:183:45","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7502,"nodeType":"Block","src":"1803:339:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":7474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7469,"name":"roleAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7466,"src":"1817:11:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":7472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1840:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":7471,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1832:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7470,"name":"address","nodeType":"ElementaryTypeName","src":"1832:7:45","typeDescriptions":{}}},"id":7473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1832:10:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1817:25:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":7495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7492,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2059:3:45","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2063:6:45","memberName":"sender","nodeType":"MemberAccess","src":"2059:10:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":7494,"name":"roleAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7466,"src":"2073:11:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2059:25:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7500,"nodeType":"IfStatement","src":"2055:81:45","trueBody":{"id":7499,"nodeType":"Block","src":"2086:50:45","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7496,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"2107:16:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2107:18:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7498,"nodeType":"RevertStatement","src":"2100:25:45"}]}},"id":7501,"nodeType":"IfStatement","src":"1813:323:45","trueBody":{"id":7491,"nodeType":"Block","src":"1844:205:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"expression":{"id":7477,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1942:3:45","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1946:3:45","memberName":"sig","nodeType":"MemberAccess","src":"1942:7:45","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":7476,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4374,"src":"1930:11:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":7479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1930:20:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":7480,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1952:3:45","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1956:6:45","memberName":"sender","nodeType":"MemberAccess","src":"1952:10:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7482,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7464,"src":"1964:5:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":7475,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[7440,7461],"referencedDeclaration":7461,"src":"1918:11:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view returns (bool)"}},"id":7483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1918:52:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":7484,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1974:5:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1918:61:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7490,"nodeType":"IfStatement","src":"1914:125:45","trueBody":{"id":7489,"nodeType":"Block","src":"1981:58:45","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7486,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"2006:16:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2006:18:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7488,"nodeType":"RevertStatement","src":"1999:25:45"}]}}]}}]},"documentation":{"id":7462,"nodeType":"StructuredDocumentation","src":"1602:101:45","text":"@dev Ensure the sender is the roleAccount, or default to governance if roleAccount is address(0)."},"id":7503,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureAuthenticatedByExclusiveRole","nameLocation":"1717:35:45","nodeType":"FunctionDefinition","parameters":{"id":7467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7464,"mutability":"mutable","name":"where","nameLocation":"1761:5:45","nodeType":"VariableDeclaration","scope":7503,"src":"1753:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7463,"name":"address","nodeType":"ElementaryTypeName","src":"1753:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7466,"mutability":"mutable","name":"roleAccount","nameLocation":"1776:11:45","nodeType":"VariableDeclaration","scope":7503,"src":"1768:19:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7465,"name":"address","nodeType":"ElementaryTypeName","src":"1768:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1752:36:45"},"returnParameters":{"id":7468,"nodeType":"ParameterList","parameters":[],"src":"1803:0:45"},"scope":7535,"src":"1708:434:45","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7533,"nodeType":"Block","src":"2341:352:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":7514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7511,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2444:3:45","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2448:6:45","memberName":"sender","nodeType":"MemberAccess","src":"2444:10:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":7513,"name":"roleAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7508,"src":"2458:11:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2444:25:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7532,"nodeType":"IfStatement","src":"2440:180:45","trueBody":{"id":7531,"nodeType":"Block","src":"2471:149:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"expression":{"id":7517,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2513:3:45","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2517:3:45","memberName":"sig","nodeType":"MemberAccess","src":"2513:7:45","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":7516,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4374,"src":"2501:11:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":7519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2501:20:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":7520,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2523:3:45","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2527:6:45","memberName":"sender","nodeType":"MemberAccess","src":"2523:10:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7522,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7506,"src":"2535:5:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":7515,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[7440,7461],"referencedDeclaration":7461,"src":"2489:11:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view returns (bool)"}},"id":7523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2489:52:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":7524,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2545:5:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"2489:61:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7530,"nodeType":"IfStatement","src":"2485:125:45","trueBody":{"id":7529,"nodeType":"Block","src":"2552:58:45","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7526,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"2577:16:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2577:18:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7528,"nodeType":"RevertStatement","src":"2570:25:45"}]}}]}}]},"documentation":{"id":7504,"nodeType":"StructuredDocumentation","src":"2148:102:45","text":"@dev Ensure the sender is either the role manager, or is authorized by governance (non-exclusive)."},"id":7534,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureAuthenticatedByRole","nameLocation":"2264:26:45","nodeType":"FunctionDefinition","parameters":{"id":7509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7506,"mutability":"mutable","name":"where","nameLocation":"2299:5:45","nodeType":"VariableDeclaration","scope":7534,"src":"2291:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7505,"name":"address","nodeType":"ElementaryTypeName","src":"2291:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7508,"mutability":"mutable","name":"roleAccount","nameLocation":"2314:11:45","nodeType":"VariableDeclaration","scope":7534,"src":"2306:19:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7507,"name":"address","nodeType":"ElementaryTypeName","src":"2306:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2290:36:45"},"returnParameters":{"id":7510,"nodeType":"ParameterList","parameters":[],"src":"2341:0:45"},"scope":7535,"src":"2255:438:45","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":7536,"src":"348:2347:45","usedErrors":[5,7355],"usedEvents":[]}],"src":"46:2650:45"},"id":45},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","exportedSymbols":{"FEE_SCALING_FACTOR":[4302],"FixedPoint":[5298],"IERC20":[10576],"IProtocolFeeController":[1955],"IVault":[2545],"IVaultErrors":[3202],"MAX_FEE_PERCENTAGE":[4305],"PoolRoleAccounts":[4111],"ProtocolFeeController":[9230],"ReentrancyGuardTransient":[7012],"SafeCast":[16092],"SafeERC20":[11066],"SingletonAuthentication":[9289],"VaultGuard":[9338]},"id":9231,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":7537,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:46"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":7539,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":11067,"src":"72:84:46","symbolAliases":[{"foreign":{"id":7538,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11066,"src":"81:9:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":7541,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":16093,"src":"157:75:46","symbolAliases":[{"foreign":{"id":7540,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"166:8:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":7543,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":10577,"src":"233:72:46","symbolAliases":[{"foreign":{"id":7542,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"242:6:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":7545,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":1956,"src":"307:113:46","symbolAliases":[{"foreign":{"id":7544,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"316:22:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":7547,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":3203,"src":"421:93:46","symbolAliases":[{"foreign":{"id":7546,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"430:12:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":7549,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":2546,"src":"515:81:46","symbolAliases":[{"foreign":{"id":7548,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"524:6:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":7553,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":4306,"src":"597:147:46","symbolAliases":[{"foreign":{"id":7550,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4302,"src":"610:18:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":7551,"name":"MAX_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4305,"src":"634:18:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":7552,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4111,"src":"658:16:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":7555,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":7013,"src":"746:132:46","symbolAliases":[{"foreign":{"id":7554,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7012,"src":"759:24:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":7557,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":5299,"src":"879:92:46","symbolAliases":[{"foreign":{"id":7556,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5298,"src":"888:10:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"./SingletonAuthentication.sol","id":7559,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":9290,"src":"973:72:46","symbolAliases":[{"foreign":{"id":7558,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9289,"src":"982:23:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","file":"./VaultGuard.sol","id":7561,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9231,"sourceUnit":9339,"src":"1046:46:46","symbolAliases":[{"foreign":{"id":7560,"name":"VaultGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9338,"src":"1055:10:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":7563,"name":"IProtocolFeeController","nameLocations":["3158:22:46"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"3158:22:46"},"id":7564,"nodeType":"InheritanceSpecifier","src":"3158:22:46"},{"baseName":{"id":7565,"name":"SingletonAuthentication","nameLocations":["3186:23:46"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"3186:23:46"},"id":7566,"nodeType":"InheritanceSpecifier","src":"3186:23:46"},{"baseName":{"id":7567,"name":"ReentrancyGuardTransient","nameLocations":["3215:24:46"],"nodeType":"IdentifierPath","referencedDeclaration":7012,"src":"3215:24:46"},"id":7568,"nodeType":"InheritanceSpecifier","src":"3215:24:46"},{"baseName":{"id":7569,"name":"VaultGuard","nameLocations":["3245:10:46"],"nodeType":"IdentifierPath","referencedDeclaration":9338,"src":"3245:10:46"},"id":7570,"nodeType":"InheritanceSpecifier","src":"3245:10:46"}],"canonicalName":"ProtocolFeeController","contractDependencies":[],"contractKind":"contract","documentation":{"id":7562,"nodeType":"StructuredDocumentation","src":"1094:2025:46","text":" @notice Helper contract to manage protocol and creator fees outside the Vault.\n @dev This contract stores global default protocol swap and yield fees, and also tracks the values of those fees\n for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but\n pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`).\n The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows\n the component fee percentages, and how to compute the aggregate from the components. This is done for performance\n reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \"cut\", and stores the\n fee amounts separately from the pool balances.\n The pool creator fees are \"net\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee\n percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided\n between the pool creator and the LPs.\n There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this\n contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any\n time by governance and the pool creator, respectively.\n Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero\n if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator\n fees are computed \"net\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible.\n A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool\n creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs.\n This contract is deployed with the Vault, but can be changed by governance."},"fullyImplemented":true,"id":9230,"linearizedBaseContracts":[9230,9338,7012,9289,7535,4385,14,1955],"name":"ProtocolFeeController","nameLocation":"3129:21:46","nodeType":"ContractDefinition","nodes":[{"global":false,"id":7573,"libraryName":{"id":7571,"name":"FixedPoint","nameLocations":["3268:10:46"],"nodeType":"IdentifierPath","referencedDeclaration":5298,"src":"3268:10:46"},"nodeType":"UsingForDirective","src":"3262:29:46","typeName":{"id":7572,"name":"uint256","nodeType":"ElementaryTypeName","src":"3283:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":7577,"libraryName":{"id":7574,"name":"SafeERC20","nameLocations":["3302:9:46"],"nodeType":"IdentifierPath","referencedDeclaration":11066,"src":"3302:9:46"},"nodeType":"UsingForDirective","src":"3296:27:46","typeName":{"id":7576,"nodeType":"UserDefinedTypeName","pathNode":{"id":7575,"name":"IERC20","nameLocations":["3316:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3316:6:46"},"referencedDeclaration":10576,"src":"3316:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}},{"global":false,"id":7579,"libraryName":{"id":7578,"name":"SafeCast","nameLocations":["3334:8:46"],"nodeType":"IdentifierPath","referencedDeclaration":16092,"src":"3334:8:46"},"nodeType":"UsingForDirective","src":"3328:21:46"},{"canonicalName":"ProtocolFeeController.ProtocolFeeType","id":7582,"members":[{"id":7580,"name":"SWAP","nameLocation":"3386:4:46","nodeType":"EnumValue","src":"3386:4:46"},{"id":7581,"name":"YIELD","nameLocation":"3400:5:46","nodeType":"EnumValue","src":"3400:5:46"}],"name":"ProtocolFeeType","nameLocation":"3360:15:46","nodeType":"EnumDefinition","src":"3355:56:46"},{"canonicalName":"ProtocolFeeController.PoolFeeConfig","documentation":{"id":7583,"nodeType":"StructuredDocumentation","src":"3417:1063:46","text":" @notice Fee configuration stored in the swap and yield fee mappings.\n @dev Instead of storing only the fee in the mapping, also store a flag to indicate whether the fee has been\n set by governance through a permissioned call. (The fee is stored in 64-bits, so that the struct fits\n within a single slot.)\n We know the percentage is an 18-decimal FP value, which only takes 60 bits, so it's guaranteed to fit,\n and we can do simple casts to truncate the high bits without needed SafeCast.\n We want to enable permissionless updates for pools, so that it is less onerous to update potentially\n hundreds of pools if the global protocol fees change. However, we don't want to overwrite pools that\n have had their fee percentages manually set by the DAO (i.e., after off-chain negotiation and agreement).\n @param feePercentage The raw swap or yield fee percentage\n @param isOverride When set, this fee is controlled by governance, and cannot be changed permissionlessly"},"id":7588,"members":[{"constant":false,"id":7585,"mutability":"mutable","name":"feePercentage","nameLocation":"4523:13:46","nodeType":"VariableDeclaration","scope":7588,"src":"4516:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":7584,"name":"uint64","nodeType":"ElementaryTypeName","src":"4516:6:46","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":7587,"mutability":"mutable","name":"isOverride","nameLocation":"4551:10:46","nodeType":"VariableDeclaration","scope":7588,"src":"4546:15:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7586,"name":"bool","nodeType":"ElementaryTypeName","src":"4546:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolFeeConfig","nameLocation":"4492:13:46","nodeType":"StructDefinition","scope":9230,"src":"4485:83:46","visibility":"public"},{"constant":true,"functionSelector":"2772d156","id":7591,"mutability":"constant","name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nameLocation":"4685:32:46","nodeType":"VariableDeclaration","scope":9230,"src":"4661:64:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7589,"name":"uint256","nodeType":"ElementaryTypeName","src":"4661:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3530653136","id":7590,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4720:5:46","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"50e16"},"visibility":"public"},{"constant":true,"functionSelector":"5e32e4e8","id":7594,"mutability":"constant","name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nameLocation":"4809:33:46","nodeType":"VariableDeclaration","scope":9230,"src":"4785:65:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7592,"name":"uint256","nodeType":"ElementaryTypeName","src":"4785:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3530653136","id":7593,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4845:5:46","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"50e16"},"visibility":"public"},{"constant":true,"functionSelector":"2e1d388d","id":7597,"mutability":"constant","name":"MAX_CREATOR_FEE_PERCENTAGE","nameLocation":"4946:26:46","nodeType":"VariableDeclaration","scope":9230,"src":"4922:62:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7595,"name":"uint256","nodeType":"ElementaryTypeName","src":"4922:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e393939653136","id":7596,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4975:9:46","typeDescriptions":{"typeIdentifier":"t_rational_999990000000000000_by_1","typeString":"int_const 999990000000000000"},"value":"99.999e16"},"visibility":"public"},{"constant":false,"id":7599,"mutability":"mutable","name":"_globalProtocolSwapFeePercentage","nameLocation":"5051:32:46","nodeType":"VariableDeclaration","scope":9230,"src":"5035:48:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7598,"name":"uint256","nodeType":"ElementaryTypeName","src":"5035:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":7601,"mutability":"mutable","name":"_globalProtocolYieldFeePercentage","nameLocation":"5140:33:46","nodeType":"VariableDeclaration","scope":9230,"src":"5124:49:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7600,"name":"uint256","nodeType":"ElementaryTypeName","src":"5124:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":7606,"mutability":"mutable","name":"_poolProtocolSwapFeePercentages","nameLocation":"5356:31:46","nodeType":"VariableDeclaration","scope":9230,"src":"5294:93:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"typeName":{"id":7605,"keyName":"pool","keyNameLocation":"5310:4:46","keyType":{"id":7602,"name":"address","nodeType":"ElementaryTypeName","src":"5302:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5294:52:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"valueName":"swapFeeConfig","valueNameLocation":"5332:13:46","valueType":{"id":7604,"nodeType":"UserDefinedTypeName","pathNode":{"id":7603,"name":"PoolFeeConfig","nameLocations":["5318:13:46"],"nodeType":"IdentifierPath","referencedDeclaration":7588,"src":"5318:13:46"},"referencedDeclaration":7588,"src":"5318:13:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}}},"visibility":"internal"},{"constant":false,"id":7611,"mutability":"mutable","name":"_poolProtocolYieldFeePercentages","nameLocation":"5572:32:46","nodeType":"VariableDeclaration","scope":9230,"src":"5509:95:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"typeName":{"id":7610,"keyName":"pool","keyNameLocation":"5525:4:46","keyType":{"id":7607,"name":"address","nodeType":"ElementaryTypeName","src":"5517:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5509:53:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"valueName":"yieldFeeConfig","valueNameLocation":"5547:14:46","valueType":{"id":7609,"nodeType":"UserDefinedTypeName","pathNode":{"id":7608,"name":"PoolFeeConfig","nameLocations":["5533:13:46"],"nodeType":"IdentifierPath","referencedDeclaration":7588,"src":"5533:13:46"},"referencedDeclaration":7588,"src":"5533:13:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}}},"visibility":"internal"},{"constant":false,"id":7615,"mutability":"mutable","name":"_registeredPools","nameLocation":"5777:16:46","nodeType":"VariableDeclaration","scope":9230,"src":"5725:68:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":7614,"keyName":"pool","keyNameLocation":"5741:4:46","keyType":{"id":7612,"name":"address","nodeType":"ElementaryTypeName","src":"5733:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5725:42:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"isRegistered","valueNameLocation":"5754:12:46","valueType":{"id":7613,"name":"bool","nodeType":"ElementaryTypeName","src":"5749:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":7619,"mutability":"mutable","name":"_poolCreatorSwapFeePercentages","nameLocation":"5917:30:46","nodeType":"VariableDeclaration","scope":9230,"src":"5856:91:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":7618,"keyName":"pool","keyNameLocation":"5872:4:46","keyType":{"id":7616,"name":"address","nodeType":"ElementaryTypeName","src":"5864:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5856:51:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolCreatorSwapFee","valueNameLocation":"5888:18:46","valueType":{"id":7617,"name":"uint256","nodeType":"ElementaryTypeName","src":"5880:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":7623,"mutability":"mutable","name":"_poolCreatorYieldFeePercentages","nameLocation":"6073:31:46","nodeType":"VariableDeclaration","scope":9230,"src":"6011:93:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":7622,"keyName":"pool","keyNameLocation":"6027:4:46","keyType":{"id":7620,"name":"address","nodeType":"ElementaryTypeName","src":"6019:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6011:52:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolCreatorYieldFee","valueNameLocation":"6043:19:46","valueType":{"id":7621,"name":"uint256","nodeType":"ElementaryTypeName","src":"6035:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":7630,"mutability":"mutable","name":"_protocolFeeAmounts","nameLocation":"6290:19:46","nodeType":"VariableDeclaration","scope":9230,"src":"6209:100:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"typeName":{"id":7629,"keyName":"pool","keyNameLocation":"6225:4:46","keyType":{"id":7624,"name":"address","nodeType":"ElementaryTypeName","src":"6217:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6209:71:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":7628,"keyName":"poolToken","keyNameLocation":"6248:9:46","keyType":{"id":7626,"nodeType":"UserDefinedTypeName","pathNode":{"id":7625,"name":"IERC20","nameLocations":["6241:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6241:6:46"},"referencedDeclaration":10576,"src":"6241:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6233:46:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"feeAmount","valueNameLocation":"6269:9:46","valueType":{"id":7627,"name":"uint256","nodeType":"ElementaryTypeName","src":"6261:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"constant":false,"id":7637,"mutability":"mutable","name":"_poolCreatorFeeAmounts","nameLocation":"6505:22:46","nodeType":"VariableDeclaration","scope":9230,"src":"6424:103:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"typeName":{"id":7636,"keyName":"pool","keyNameLocation":"6440:4:46","keyType":{"id":7631,"name":"address","nodeType":"ElementaryTypeName","src":"6432:7:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6424:71:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":7635,"keyName":"poolToken","keyNameLocation":"6463:9:46","keyType":{"id":7633,"nodeType":"UserDefinedTypeName","pathNode":{"id":7632,"name":"IERC20","nameLocations":["6456:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6456:6:46"},"referencedDeclaration":10576,"src":"6456:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6448:46:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"feeAmount","valueNameLocation":"6484:9:46","valueType":{"id":7634,"name":"uint256","nodeType":"ElementaryTypeName","src":"6476:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"documentation":{"id":7638,"nodeType":"StructuredDocumentation","src":"6534:279:46","text":" @notice Prevent pool data from being registered more than once.\n @dev This can happen if there is an error in the migration, or if governance somehow grants permission to\n `migratePool`, which should never happen.\n @param pool The pool"},"errorSelector":"db771c80","id":7642,"name":"PoolAlreadyRegistered","nameLocation":"6824:21:46","nodeType":"ErrorDefinition","parameters":{"id":7641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7640,"mutability":"mutable","name":"pool","nameLocation":"6854:4:46","nodeType":"VariableDeclaration","scope":7642,"src":"6846:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7639,"name":"address","nodeType":"ElementaryTypeName","src":"6846:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6845:14:46"},"src":"6818:42:46"},{"documentation":{"id":7643,"nodeType":"StructuredDocumentation","src":"6866:53:46","text":"@notice Migration source cannot be this contract."},"errorSelector":"b82fd5bf","id":7645,"name":"InvalidMigrationSource","nameLocation":"6930:22:46","nodeType":"ErrorDefinition","parameters":{"id":7644,"nodeType":"ParameterList","parameters":[],"src":"6952:2:46"},"src":"6924:31:46"},{"body":{"id":7654,"nodeType":"Block","src":"7051:60:46","statements":[{"expression":{"arguments":[{"id":7650,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7647,"src":"7088:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7649,"name":"_ensureCallerIsPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8451,"src":"7061:26:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":7651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7061:32:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7652,"nodeType":"ExpressionStatement","src":"7061:32:46"},{"id":7653,"nodeType":"PlaceholderStatement","src":"7103:1:46"}]},"id":7655,"name":"onlyPoolCreator","nameLocation":"7021:15:46","nodeType":"ModifierDefinition","parameters":{"id":7648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7647,"mutability":"mutable","name":"pool","nameLocation":"7045:4:46","nodeType":"VariableDeclaration","scope":7655,"src":"7037:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7646,"name":"address","nodeType":"ElementaryTypeName","src":"7037:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7036:14:46"},"src":"7012:99:46","virtual":false,"visibility":"internal"},{"body":{"id":7672,"nodeType":"Block","src":"7234:207:46","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7659,"name":"newSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7657,"src":"7248:20:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":7660,"name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7591,"src":"7271:32:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7248:55:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7666,"nodeType":"IfStatement","src":"7244:127:46","trueBody":{"id":7665,"nodeType":"Block","src":"7305:66:46","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7662,"name":"ProtocolSwapFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1736,"src":"7326:32:46","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7326:34:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7664,"nodeType":"RevertStatement","src":"7319:41:46"}]}},{"expression":{"arguments":[{"id":7668,"name":"newSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7657,"src":"7402:20:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7667,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9229,"src":"7380:21:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":7669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7380:43:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7670,"nodeType":"ExpressionStatement","src":"7380:43:46"},{"id":7671,"nodeType":"PlaceholderStatement","src":"7433:1:46"}]},"id":7673,"name":"withValidSwapFee","nameLocation":"7187:16:46","nodeType":"ModifierDefinition","parameters":{"id":7658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7657,"mutability":"mutable","name":"newSwapFeePercentage","nameLocation":"7212:20:46","nodeType":"VariableDeclaration","scope":7673,"src":"7204:28:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7656,"name":"uint256","nodeType":"ElementaryTypeName","src":"7204:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7203:30:46"},"src":"7178:263:46","virtual":false,"visibility":"internal"},{"body":{"id":7690,"nodeType":"Block","src":"7567:211:46","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7677,"name":"newYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7675,"src":"7581:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":7678,"name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7594,"src":"7605:33:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7581:57:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7684,"nodeType":"IfStatement","src":"7577:130:46","trueBody":{"id":7683,"nodeType":"Block","src":"7640:67:46","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7680,"name":"ProtocolYieldFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1739,"src":"7661:33:46","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7661:35:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7682,"nodeType":"RevertStatement","src":"7654:42:46"}]}},{"expression":{"arguments":[{"id":7686,"name":"newYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7675,"src":"7738:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7685,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9229,"src":"7716:21:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":7687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7716:44:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7688,"nodeType":"ExpressionStatement","src":"7716:44:46"},{"id":7689,"nodeType":"PlaceholderStatement","src":"7770:1:46"}]},"id":7691,"name":"withValidYieldFee","nameLocation":"7518:17:46","nodeType":"ModifierDefinition","parameters":{"id":7676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7675,"mutability":"mutable","name":"newYieldFeePercentage","nameLocation":"7544:21:46","nodeType":"VariableDeclaration","scope":7691,"src":"7536:29:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7674,"name":"uint256","nodeType":"ElementaryTypeName","src":"7536:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7535:31:46"},"src":"7509:269:46","virtual":false,"visibility":"internal"},{"body":{"id":7704,"nodeType":"Block","src":"7854:154:46","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7695,"name":"newPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7693,"src":"7868:27:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":7696,"name":"MAX_CREATOR_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7597,"src":"7898:26:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7868:56:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7702,"nodeType":"IfStatement","src":"7864:127:46","trueBody":{"id":7701,"nodeType":"Block","src":"7926:65:46","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7698,"name":"PoolCreatorFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1754,"src":"7947:31:46","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7947:33:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7700,"nodeType":"RevertStatement","src":"7940:40:46"}]}},{"id":7703,"nodeType":"PlaceholderStatement","src":"8000:1:46"}]},"id":7705,"name":"withValidPoolCreatorFee","nameLocation":"7793:23:46","nodeType":"ModifierDefinition","parameters":{"id":7694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7693,"mutability":"mutable","name":"newPoolCreatorFeePercentage","nameLocation":"7825:27:46","nodeType":"VariableDeclaration","scope":7705,"src":"7817:35:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7692,"name":"uint256","nodeType":"ElementaryTypeName","src":"7817:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7816:37:46"},"src":"7784:224:46","virtual":false,"visibility":"internal"},{"body":{"id":7714,"nodeType":"Block","src":"8145:54:46","statements":[{"expression":{"arguments":[{"id":7710,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7707,"src":"8176:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7709,"name":"collectAggregateFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7768,"src":"8155:20:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":7711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8155:26:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7712,"nodeType":"ExpressionStatement","src":"8155:26:46"},{"id":7713,"nodeType":"PlaceholderStatement","src":"8191:1:46"}]},"id":7715,"name":"withLatestFees","nameLocation":"8116:14:46","nodeType":"ModifierDefinition","parameters":{"id":7708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7707,"mutability":"mutable","name":"pool","nameLocation":"8139:4:46","nodeType":"VariableDeclaration","scope":7715,"src":"8131:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7706,"name":"address","nodeType":"ElementaryTypeName","src":"8131:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8130:14:46"},"src":"8107:92:46","virtual":false,"visibility":"internal"},{"body":{"id":7739,"nodeType":"Block","src":"8394:163:46","statements":[{"expression":{"arguments":[{"id":7732,"name":"initialGlobalSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7720,"src":"8440:30:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7731,"name":"_setGlobalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8720,"src":"8404:35:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":7733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8404:67:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7734,"nodeType":"ExpressionStatement","src":"8404:67:46"},{"expression":{"arguments":[{"id":7736,"name":"initialGlobalYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7722,"src":"8518:31:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7735,"name":"_setGlobalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8750,"src":"8481:36:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":7737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8481:69:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7738,"nodeType":"ExpressionStatement","src":"8481:69:46"}]},"id":7740,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":7725,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7718,"src":"8367:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"id":7726,"kind":"baseConstructorSpecifier","modifierName":{"id":7724,"name":"SingletonAuthentication","nameLocations":["8343:23:46"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"8343:23:46"},"nodeType":"ModifierInvocation","src":"8343:31:46"},{"arguments":[{"id":7728,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7718,"src":"8386:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"id":7729,"kind":"baseConstructorSpecifier","modifierName":{"id":7727,"name":"VaultGuard","nameLocations":["8375:10:46"],"nodeType":"IdentifierPath","referencedDeclaration":9338,"src":"8375:10:46"},"nodeType":"ModifierInvocation","src":"8375:18:46"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":7723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7718,"mutability":"mutable","name":"vault_","nameLocation":"8233:6:46","nodeType":"VariableDeclaration","scope":7740,"src":"8226:13:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":7717,"nodeType":"UserDefinedTypeName","pathNode":{"id":7716,"name":"IVault","nameLocations":["8226:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"8226:6:46"},"referencedDeclaration":2545,"src":"8226:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":7720,"mutability":"mutable","name":"initialGlobalSwapFeePercentage","nameLocation":"8257:30:46","nodeType":"VariableDeclaration","scope":7740,"src":"8249:38:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7719,"name":"uint256","nodeType":"ElementaryTypeName","src":"8249:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7722,"mutability":"mutable","name":"initialGlobalYieldFeePercentage","nameLocation":"8305:31:46","nodeType":"VariableDeclaration","scope":7740,"src":"8297:39:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7721,"name":"uint256","nodeType":"ElementaryTypeName","src":"8297:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8216:126:46"},"returnParameters":{"id":7730,"nodeType":"ParameterList","parameters":[],"src":"8394:0:46"},"scope":9230,"src":"8205:352:46","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1761],"body":{"id":7749,"nodeType":"Block","src":"8654:30:46","statements":[{"expression":{"id":7747,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"8671:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"functionReturnParameters":7746,"id":7748,"nodeType":"Return","src":"8664:13:46"}]},"documentation":{"id":7741,"nodeType":"StructuredDocumentation","src":"8563:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"fbfa77cf","id":7750,"implemented":true,"kind":"function","modifiers":[],"name":"vault","nameLocation":"8615:5:46","nodeType":"FunctionDefinition","parameters":{"id":7742,"nodeType":"ParameterList","parameters":[],"src":"8620:2:46"},"returnParameters":{"id":7746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7745,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7750,"src":"8646:6:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":7744,"nodeType":"UserDefinedTypeName","pathNode":{"id":7743,"name":"IVault","nameLocations":["8646:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"8646:6:46"},"referencedDeclaration":2545,"src":"8646:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8645:8:46"},"scope":9230,"src":"8606:78:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1767],"body":{"id":7767,"nodeType":"Block","src":"8784:100:46","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":7761,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9230,"src":"8823:21:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$9230_$","typeString":"type(contract ProtocolFeeController)"}},"id":7762,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8845:24:46","memberName":"collectAggregateFeesHook","nodeType":"MemberAccess","referencedDeclaration":7796,"src":"8823:46:46","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.collectAggregateFeesHook(address)"}},{"id":7763,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7753,"src":"8871:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.collectAggregateFeesHook(address)"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7759,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8808:3:46","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":7760,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8812:10:46","memberName":"encodeCall","nodeType":"MemberAccess","src":"8808:14:46","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":7764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8808:68:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":7756,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"8794:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":7758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8801:6:46","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":3874,"src":"8794:13:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":7765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8794:83:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7766,"nodeType":"ExpressionStatement","src":"8794:83:46"}]},"documentation":{"id":7751,"nodeType":"StructuredDocumentation","src":"8690:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8f4ab9ca","id":7768,"implemented":true,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"8742:20:46","nodeType":"FunctionDefinition","parameters":{"id":7754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7753,"mutability":"mutable","name":"pool","nameLocation":"8771:4:46","nodeType":"VariableDeclaration","scope":7768,"src":"8763:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7752,"name":"address","nodeType":"ElementaryTypeName","src":"8763:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8762:14:46"},"returnParameters":{"id":7755,"nodeType":"ParameterList","parameters":[],"src":"8784:0:46"},"scope":9230,"src":"8733:151:46","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":7795,"nodeType":"Block","src":"9267:186:46","statements":[{"assignments":[7780,7783],"declarations":[{"constant":false,"id":7780,"mutability":"mutable","name":"totalSwapFees","nameLocation":"9295:13:46","nodeType":"VariableDeclaration","scope":7795,"src":"9278:30:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7778,"name":"uint256","nodeType":"ElementaryTypeName","src":"9278:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7779,"nodeType":"ArrayTypeName","src":"9278:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":7783,"mutability":"mutable","name":"totalYieldFees","nameLocation":"9327:14:46","nodeType":"VariableDeclaration","scope":7795,"src":"9310:31:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7781,"name":"uint256","nodeType":"ElementaryTypeName","src":"9310:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7782,"nodeType":"ArrayTypeName","src":"9310:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":7788,"initialValue":{"arguments":[{"id":7786,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7771,"src":"9373:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7784,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"9345:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":7785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9352:20:46","memberName":"collectAggregateFees","nodeType":"MemberAccess","referencedDeclaration":2673,"src":"9345:27:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) external returns (uint256[] memory,uint256[] memory)"}},"id":7787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9345:33:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"9277:101:46"},{"expression":{"arguments":[{"id":7790,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7771,"src":"9410:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7791,"name":"totalSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"9416:13:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":7792,"name":"totalYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7783,"src":"9431:14:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":7789,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[7823,8027],"referencedDeclaration":7823,"src":"9388:21:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,uint256[] memory,uint256[] memory)"}},"id":7793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9388:58:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7794,"nodeType":"ExpressionStatement","src":"9388:58:46"}]},"documentation":{"id":7769,"nodeType":"StructuredDocumentation","src":"8890:305:46","text":" @dev Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit\n for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount\n transferred so that the transaction settles when the hook returns."},"functionSelector":"fa399f2a","id":7796,"implemented":true,"kind":"function","modifiers":[{"id":7774,"kind":"modifierInvocation","modifierName":{"id":7773,"name":"onlyVault","nameLocations":["9257:9:46"],"nodeType":"IdentifierPath","referencedDeclaration":9317,"src":"9257:9:46"},"nodeType":"ModifierInvocation","src":"9257:9:46"}],"name":"collectAggregateFeesHook","nameLocation":"9209:24:46","nodeType":"FunctionDefinition","parameters":{"id":7772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7771,"mutability":"mutable","name":"pool","nameLocation":"9242:4:46","nodeType":"VariableDeclaration","scope":7796,"src":"9234:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7770,"name":"address","nodeType":"ElementaryTypeName","src":"9234:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9233:14:46"},"returnParameters":{"id":7775,"nodeType":"ParameterList","parameters":[],"src":"9267:0:46"},"scope":9230,"src":"9200:253:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7822,"nodeType":"Block","src":"10544:159:46","statements":[{"expression":{"arguments":[{"id":7809,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7799,"src":"10576:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":7810,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"10582:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7811,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10598:4:46","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7580,"src":"10582:20:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},{"id":7812,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7802,"src":"10604:14:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":7808,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[7823,8027],"referencedDeclaration":8027,"src":"10554:21:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_ProtocolFeeType_$7582_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType,uint256[] memory)"}},"id":7813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10554:65:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7814,"nodeType":"ExpressionStatement","src":"10554:65:46"},{"expression":{"arguments":[{"id":7816,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7799,"src":"10651:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":7817,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"10657:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7818,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10673:5:46","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":7581,"src":"10657:21:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},{"id":7819,"name":"yieldFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7805,"src":"10680:15:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":7815,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[7823,8027],"referencedDeclaration":8027,"src":"10629:21:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_ProtocolFeeType_$7582_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType,uint256[] memory)"}},"id":7820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10629:67:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7821,"nodeType":"ExpressionStatement","src":"10629:67:46"}]},"documentation":{"id":7797,"nodeType":"StructuredDocumentation","src":"9459:929:46","text":" @notice Settle fee credits from the Vault.\n @dev This must be called after calling `collectAggregateFees` in the Vault. Note that since charging protocol\n fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection\n happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations. The Vault\n differentiates between swap and yield fees (since they can have different percentage values); the Controller\n combines swap and yield fees, then allocates the total between the protocol and pool creator.\n @param pool The address of the pool on which the swap fees were charged\n @param swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @param yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"id":7823,"implemented":true,"kind":"function","modifiers":[],"name":"_receiveAggregateFees","nameLocation":"10402:21:46","nodeType":"FunctionDefinition","parameters":{"id":7806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7799,"mutability":"mutable","name":"pool","nameLocation":"10441:4:46","nodeType":"VariableDeclaration","scope":7823,"src":"10433:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7798,"name":"address","nodeType":"ElementaryTypeName","src":"10433:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7802,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"10472:14:46","nodeType":"VariableDeclaration","scope":7823,"src":"10455:31:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7800,"name":"uint256","nodeType":"ElementaryTypeName","src":"10455:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7801,"nodeType":"ArrayTypeName","src":"10455:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":7805,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"10513:15:46","nodeType":"VariableDeclaration","scope":7823,"src":"10496:32:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7803,"name":"uint256","nodeType":"ElementaryTypeName","src":"10496:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7804,"nodeType":"ArrayTypeName","src":"10496:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10423:111:46"},"returnParameters":{"id":7807,"nodeType":"ParameterList","parameters":[],"src":"10544:0:46"},"scope":9230,"src":"10393:310:46","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":8026,"nodeType":"Block","src":"10816:2992:46","statements":[{"assignments":[7835],"declarations":[{"constant":false,"id":7835,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"11056:21:46","nodeType":"VariableDeclaration","scope":8026,"src":"11048:29:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7834,"name":"uint256","nodeType":"ElementaryTypeName","src":"11048:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7849,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":7839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7836,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7828,"src":"11080:7:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":7837,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"11091:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7838,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11107:4:46","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7580,"src":"11091:20:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"11080:31:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"baseExpression":{"id":7844,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7611,"src":"11192:32:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":7846,"indexExpression":{"id":7845,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"11225:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11192:38:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":7847,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11231:13:46","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7585,"src":"11192:52:46","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":7848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11080:164:46","trueExpression":{"expression":{"baseExpression":{"id":7840,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7606,"src":"11126:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":7842,"indexExpression":{"id":7841,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"11158:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11126:37:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":7843,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11164:13:46","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7585,"src":"11126:51:46","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"VariableDeclarationStatement","src":"11048:196:46"},{"assignments":[7851],"declarations":[{"constant":false,"id":7851,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"11263:24:46","nodeType":"VariableDeclaration","scope":8026,"src":"11255:32:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7850,"name":"uint256","nodeType":"ElementaryTypeName","src":"11255:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7863,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":7855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7852,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7828,"src":"11290:7:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":7853,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"11301:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7854,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11317:4:46","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7580,"src":"11301:20:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"11290:31:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"baseExpression":{"id":7859,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7623,"src":"11387:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7861,"indexExpression":{"id":7860,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"11419:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11387:37:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11290:134:46","trueExpression":{"baseExpression":{"id":7856,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7619,"src":"11336:30:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7858,"indexExpression":{"id":7857,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"11367:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11336:36:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11255:169:46"},{"assignments":[7865],"declarations":[{"constant":false,"id":7865,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"11443:22:46","nodeType":"VariableDeclaration","scope":8026,"src":"11435:30:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7864,"name":"uint256","nodeType":"ElementaryTypeName","src":"11435:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7866,"nodeType":"VariableDeclarationStatement","src":"11435:30:46"},{"assignments":[7868],"declarations":[{"constant":false,"id":7868,"mutability":"mutable","name":"needToSplitFees","nameLocation":"11481:15:46","nodeType":"VariableDeclaration","scope":8026,"src":"11476:20:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7867,"name":"bool","nodeType":"ElementaryTypeName","src":"11476:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":7876,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7869,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7851,"src":"11499:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":7870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11526:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11499:28:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7872,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7835,"src":"11531:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":7873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11555:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11531:25:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11499:57:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"11476:80:46"},{"condition":{"id":7877,"name":"needToSplitFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7868,"src":"11570:15:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7886,"nodeType":"IfStatement","src":"11566:199:46","trueBody":{"id":7885,"nodeType":"Block","src":"11587:178:46","statements":[{"expression":{"id":7883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7878,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7865,"src":"11650:22:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7880,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7835,"src":"11706:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7881,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7851,"src":"11729:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7879,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8415,"src":"11675:30:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11675:79:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11650:104:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7884,"nodeType":"ExpressionStatement","src":"11650:104:46"}]}},{"assignments":[7891,7893],"declarations":[{"constant":false,"id":7891,"mutability":"mutable","name":"poolTokens","nameLocation":"11792:10:46","nodeType":"VariableDeclaration","scope":8026,"src":"11776:26:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":7889,"nodeType":"UserDefinedTypeName","pathNode":{"id":7888,"name":"IERC20","nameLocations":["11776:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"11776:6:46"},"referencedDeclaration":10576,"src":"11776:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":7890,"nodeType":"ArrayTypeName","src":"11776:8:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":7893,"mutability":"mutable","name":"numTokens","nameLocation":"11812:9:46","nodeType":"VariableDeclaration","scope":8026,"src":"11804:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7892,"name":"uint256","nodeType":"ElementaryTypeName","src":"11804:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7897,"initialValue":{"arguments":[{"id":7895,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"11848:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7894,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8475,"src":"11825:22:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":7896,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11825:28:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11775:78:46"},{"body":{"id":8024,"nodeType":"Block","src":"11903:1899:46","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":7908,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"11921:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7910,"indexExpression":{"id":7909,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"11932:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11921:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":7911,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11937:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11921:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8023,"nodeType":"IfStatement","src":"11917:1875:46","trueBody":{"id":8022,"nodeType":"Block","src":"11940:1852:46","statements":[{"assignments":[7915],"declarations":[{"constant":false,"id":7915,"mutability":"mutable","name":"token","nameLocation":"11965:5:46","nodeType":"VariableDeclaration","scope":8022,"src":"11958:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":7914,"nodeType":"UserDefinedTypeName","pathNode":{"id":7913,"name":"IERC20","nameLocations":["11958:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"11958:6:46"},"referencedDeclaration":10576,"src":"11958:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":7919,"initialValue":{"baseExpression":{"id":7916,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7891,"src":"11973:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":7918,"indexExpression":{"id":7917,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"11984:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11973:13:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"11958:28:46"},{"expression":{"arguments":[{"id":7923,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7915,"src":"12019:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"arguments":[{"id":7926,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12034:4:46","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$9230","typeString":"contract ProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeController_$9230","typeString":"contract ProtocolFeeController"}],"id":7925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12026:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7924,"name":"address","nodeType":"ElementaryTypeName","src":"12026:7:46","typeDescriptions":{}}},"id":7927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12026:13:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":7928,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"12041:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7930,"indexExpression":{"id":7929,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"12052:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12041:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7920,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"12005:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":7922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12012:6:46","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":3896,"src":"12005:13:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":7931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12005:50:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7932,"nodeType":"ExpressionStatement","src":"12005:50:46"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":7936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7933,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7828,"src":"12234:7:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":7934,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"12245:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7935,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12261:4:46","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7580,"src":"12245:20:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"12234:31:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7954,"nodeType":"Block","src":"12371:99:46","statements":[{"eventCall":{"arguments":[{"id":7947,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"12424:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7948,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7915,"src":"12430:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"baseExpression":{"id":7949,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"12437:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7951,"indexExpression":{"id":7950,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"12448:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12437:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7946,"name":"ProtocolYieldFeeCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1682,"src":"12398:25:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":7952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12398:53:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7953,"nodeType":"EmitStatement","src":"12393:58:46"}]},"id":7955,"nodeType":"IfStatement","src":"12230:240:46","trueBody":{"id":7945,"nodeType":"Block","src":"12267:98:46","statements":[{"eventCall":{"arguments":[{"id":7938,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"12319:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7939,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7915,"src":"12325:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"baseExpression":{"id":7940,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"12332:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7942,"indexExpression":{"id":7941,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"12343:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12332:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7937,"name":"ProtocolSwapFeeCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1672,"src":"12294:24:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":7943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12294:52:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7944,"nodeType":"EmitStatement","src":"12289:57:46"}]}},{"condition":{"id":7956,"name":"needToSplitFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7868,"src":"12492:15:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8020,"nodeType":"Block","src":"13422:356:46","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7994,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7851,"src":"13524:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13552:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13524:29:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8018,"nodeType":"Block","src":"13659:101:46","statements":[{"expression":{"id":8016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":8008,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7637,"src":"13685:22:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":8011,"indexExpression":{"id":8009,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"13708:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13685:28:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":8012,"indexExpression":{"id":8010,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7915,"src":"13714:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13685:35:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":8013,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"13724:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8015,"indexExpression":{"id":8014,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"13735:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13724:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13685:52:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8017,"nodeType":"ExpressionStatement","src":"13685:52:46"}]},"id":8019,"nodeType":"IfStatement","src":"13520:240:46","trueBody":{"id":8007,"nodeType":"Block","src":"13555:98:46","statements":[{"expression":{"id":8005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":7997,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7630,"src":"13581:19:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":8000,"indexExpression":{"id":7998,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"13601:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13581:25:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":8001,"indexExpression":{"id":7999,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7915,"src":"13607:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13581:32:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":8002,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"13617:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8004,"indexExpression":{"id":8003,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"13628:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13617:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13581:49:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8006,"nodeType":"ExpressionStatement","src":"13581:49:46"}]}}]},"id":8021,"nodeType":"IfStatement","src":"12488:1290:46","trueBody":{"id":7993,"nodeType":"Block","src":"12509:907:46","statements":[{"assignments":[7958],"declarations":[{"constant":false,"id":7958,"mutability":"mutable","name":"totalFeeAmountRaw","nameLocation":"13074:17:46","nodeType":"VariableDeclaration","scope":7993,"src":"13066:25:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7957,"name":"uint256","nodeType":"ElementaryTypeName","src":"13066:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7965,"initialValue":{"arguments":[{"id":7963,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7865,"src":"13114:22:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":7959,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"13094:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7961,"indexExpression":{"id":7960,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"13105:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13094:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13108:5:46","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":5096,"src":"13094:19:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13094:43:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13066:71:46"},{"assignments":[7967],"declarations":[{"constant":false,"id":7967,"mutability":"mutable","name":"protocolPortion","nameLocation":"13167:15:46","nodeType":"VariableDeclaration","scope":7993,"src":"13159:23:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7966,"name":"uint256","nodeType":"ElementaryTypeName","src":"13159:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7972,"initialValue":{"arguments":[{"id":7970,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7835,"src":"13209:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7968,"name":"totalFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7958,"src":"13185:17:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13203:5:46","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":5060,"src":"13185:23:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13185:46:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13159:72:46"},{"expression":{"id":7979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":7973,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7630,"src":"13254:19:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":7976,"indexExpression":{"id":7974,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"13274:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13254:25:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":7977,"indexExpression":{"id":7975,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7915,"src":"13280:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13254:32:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":7978,"name":"protocolPortion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7967,"src":"13290:15:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13254:51:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7980,"nodeType":"ExpressionStatement","src":"13254:51:46"},{"expression":{"id":7991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":7981,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7637,"src":"13327:22:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":7984,"indexExpression":{"id":7982,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7825,"src":"13350:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13327:28:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":7985,"indexExpression":{"id":7983,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7915,"src":"13356:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13327:35:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":7986,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7831,"src":"13366:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7988,"indexExpression":{"id":7987,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"13377:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13366:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":7989,"name":"protocolPortion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7967,"src":"13382:15:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13366:31:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13327:70:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7992,"nodeType":"ExpressionStatement","src":"13327:70:46"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7902,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"11883:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7903,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7893,"src":"11887:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11883:13:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8025,"initializationExpression":{"assignments":[7899],"declarations":[{"constant":false,"id":7899,"mutability":"mutable","name":"i","nameLocation":"11876:1:46","nodeType":"VariableDeclaration","scope":8025,"src":"11868:9:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7898,"name":"uint256","nodeType":"ElementaryTypeName","src":"11868:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7901,"initialValue":{"hexValue":"30","id":7900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11880:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11868:13:46"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":7906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11898:3:46","subExpression":{"id":7905,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7899,"src":"11900:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7907,"nodeType":"ExpressionStatement","src":"11898:3:46"},"nodeType":"ForStatement","src":"11863:1939:46"}]},"id":8027,"implemented":true,"kind":"function","modifiers":[],"name":"_receiveAggregateFees","nameLocation":"10718:21:46","nodeType":"FunctionDefinition","parameters":{"id":7832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7825,"mutability":"mutable","name":"pool","nameLocation":"10748:4:46","nodeType":"VariableDeclaration","scope":8027,"src":"10740:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7824,"name":"address","nodeType":"ElementaryTypeName","src":"10740:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7828,"mutability":"mutable","name":"feeType","nameLocation":"10770:7:46","nodeType":"VariableDeclaration","scope":8027,"src":"10754:23:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":7827,"nodeType":"UserDefinedTypeName","pathNode":{"id":7826,"name":"ProtocolFeeType","nameLocations":["10754:15:46"],"nodeType":"IdentifierPath","referencedDeclaration":7582,"src":"10754:15:46"},"referencedDeclaration":7582,"src":"10754:15:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"},{"constant":false,"id":7831,"mutability":"mutable","name":"feeAmounts","nameLocation":"10796:10:46","nodeType":"VariableDeclaration","scope":8027,"src":"10779:27:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7829,"name":"uint256","nodeType":"ElementaryTypeName","src":"10779:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7830,"nodeType":"ArrayTypeName","src":"10779:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10739:68:46"},"returnParameters":{"id":7833,"nodeType":"ParameterList","parameters":[],"src":"10816:0:46"},"scope":9230,"src":"10709:3099:46","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"baseFunctions":[1773],"body":{"id":8035,"nodeType":"Block","src":"13935:56:46","statements":[{"expression":{"id":8033,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7599,"src":"13952:32:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8032,"id":8034,"nodeType":"Return","src":"13945:39:46"}]},"documentation":{"id":8028,"nodeType":"StructuredDocumentation","src":"13814:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"7869ee18","id":8036,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"13866:34:46","nodeType":"FunctionDefinition","parameters":{"id":8029,"nodeType":"ParameterList","parameters":[],"src":"13900:2:46"},"returnParameters":{"id":8032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8031,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8036,"src":"13926:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8030,"name":"uint256","nodeType":"ElementaryTypeName","src":"13926:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13925:9:46"},"scope":9230,"src":"13857:134:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1779],"body":{"id":8044,"nodeType":"Block","src":"14119:57:46","statements":[{"expression":{"id":8042,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7601,"src":"14136:33:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8041,"id":8043,"nodeType":"Return","src":"14129:40:46"}]},"documentation":{"id":8037,"nodeType":"StructuredDocumentation","src":"13997:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"55fb76af","id":8045,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"14049:35:46","nodeType":"FunctionDefinition","parameters":{"id":8038,"nodeType":"ParameterList","parameters":[],"src":"14084:2:46"},"returnParameters":{"id":8041,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8040,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8045,"src":"14110:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8039,"name":"uint256","nodeType":"ElementaryTypeName","src":"14110:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14109:9:46"},"scope":9230,"src":"14040:136:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1787],"body":{"id":8057,"nodeType":"Block","src":"14294:46:46","statements":[{"expression":{"baseExpression":{"id":8053,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7615,"src":"14311:16:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":8055,"indexExpression":{"id":8054,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8048,"src":"14328:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14311:22:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":8052,"id":8056,"nodeType":"Return","src":"14304:29:46"}]},"documentation":{"id":8046,"nodeType":"StructuredDocumentation","src":"14182:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"c673bdaf","id":8058,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"14234:16:46","nodeType":"FunctionDefinition","parameters":{"id":8049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8048,"mutability":"mutable","name":"pool","nameLocation":"14259:4:46","nodeType":"VariableDeclaration","scope":8058,"src":"14251:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8047,"name":"address","nodeType":"ElementaryTypeName","src":"14251:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14250:14:46"},"returnParameters":{"id":8052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8051,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8058,"src":"14288:4:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8050,"name":"bool","nodeType":"ElementaryTypeName","src":"14288:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14287:6:46"},"scope":9230,"src":"14225:115:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1797],"body":{"id":8081,"nodeType":"Block","src":"14477:143:46","statements":[{"assignments":[8070],"declarations":[{"constant":false,"id":8070,"mutability":"mutable","name":"config","nameLocation":"14508:6:46","nodeType":"VariableDeclaration","scope":8081,"src":"14487:27:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":8069,"nodeType":"UserDefinedTypeName","pathNode":{"id":8068,"name":"PoolFeeConfig","nameLocations":["14487:13:46"],"nodeType":"IdentifierPath","referencedDeclaration":7588,"src":"14487:13:46"},"referencedDeclaration":7588,"src":"14487:13:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":8074,"initialValue":{"baseExpression":{"id":8071,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7606,"src":"14517:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8073,"indexExpression":{"id":8072,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8061,"src":"14549:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14517:37:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14487:67:46"},{"expression":{"components":[{"expression":{"id":8075,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8070,"src":"14573:6:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8076,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14580:13:46","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7585,"src":"14573:20:46","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":8077,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8070,"src":"14595:6:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8078,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14602:10:46","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":7587,"src":"14595:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":8079,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14572:41:46","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint64_$_t_bool_$","typeString":"tuple(uint64,bool)"}},"functionReturnParameters":8067,"id":8080,"nodeType":"Return","src":"14565:48:46"}]},"documentation":{"id":8059,"nodeType":"StructuredDocumentation","src":"14346:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"5c15a0b4","id":8082,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"14398:26:46","nodeType":"FunctionDefinition","parameters":{"id":8062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8061,"mutability":"mutable","name":"pool","nameLocation":"14433:4:46","nodeType":"VariableDeclaration","scope":8082,"src":"14425:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8060,"name":"address","nodeType":"ElementaryTypeName","src":"14425:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14424:14:46"},"returnParameters":{"id":8067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8064,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8082,"src":"14462:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8063,"name":"uint256","nodeType":"ElementaryTypeName","src":"14462:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8066,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8082,"src":"14471:4:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8065,"name":"bool","nodeType":"ElementaryTypeName","src":"14471:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14461:15:46"},"scope":9230,"src":"14389:231:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1807],"body":{"id":8105,"nodeType":"Block","src":"14758:144:46","statements":[{"assignments":[8094],"declarations":[{"constant":false,"id":8094,"mutability":"mutable","name":"config","nameLocation":"14789:6:46","nodeType":"VariableDeclaration","scope":8105,"src":"14768:27:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":8093,"nodeType":"UserDefinedTypeName","pathNode":{"id":8092,"name":"PoolFeeConfig","nameLocations":["14768:13:46"],"nodeType":"IdentifierPath","referencedDeclaration":7588,"src":"14768:13:46"},"referencedDeclaration":7588,"src":"14768:13:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":8098,"initialValue":{"baseExpression":{"id":8095,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7611,"src":"14798:32:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8097,"indexExpression":{"id":8096,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8085,"src":"14831:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14798:38:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14768:68:46"},{"expression":{"components":[{"expression":{"id":8099,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8094,"src":"14855:6:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8100,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14862:13:46","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7585,"src":"14855:20:46","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":8101,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8094,"src":"14877:6:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8102,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14884:10:46","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":7587,"src":"14877:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":8103,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14854:41:46","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint64_$_t_bool_$","typeString":"tuple(uint64,bool)"}},"functionReturnParameters":8091,"id":8104,"nodeType":"Return","src":"14847:48:46"}]},"documentation":{"id":8083,"nodeType":"StructuredDocumentation","src":"14626:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"7a2b97dc","id":8106,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"14678:27:46","nodeType":"FunctionDefinition","parameters":{"id":8086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8085,"mutability":"mutable","name":"pool","nameLocation":"14714:4:46","nodeType":"VariableDeclaration","scope":8106,"src":"14706:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8084,"name":"address","nodeType":"ElementaryTypeName","src":"14706:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14705:14:46"},"returnParameters":{"id":8091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8088,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8106,"src":"14743:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8087,"name":"uint256","nodeType":"ElementaryTypeName","src":"14743:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8090,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8106,"src":"14752:4:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8089,"name":"bool","nodeType":"ElementaryTypeName","src":"14752:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14742:15:46"},"scope":9230,"src":"14669:233:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1815],"body":{"id":8118,"nodeType":"Block","src":"15038:60:46","statements":[{"expression":{"baseExpression":{"id":8114,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7619,"src":"15055:30:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8116,"indexExpression":{"id":8115,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8109,"src":"15086:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15055:36:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8113,"id":8117,"nodeType":"Return","src":"15048:43:46"}]},"documentation":{"id":8107,"nodeType":"StructuredDocumentation","src":"14908:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0b8e059b","id":8119,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorSwapFeePercentage","nameLocation":"14960:31:46","nodeType":"FunctionDefinition","parameters":{"id":8110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8109,"mutability":"mutable","name":"pool","nameLocation":"15000:4:46","nodeType":"VariableDeclaration","scope":8119,"src":"14992:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8108,"name":"address","nodeType":"ElementaryTypeName","src":"14992:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14991:14:46"},"returnParameters":{"id":8113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8112,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8119,"src":"15029:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8111,"name":"uint256","nodeType":"ElementaryTypeName","src":"15029:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15028:9:46"},"scope":9230,"src":"14951:147:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1823],"body":{"id":8131,"nodeType":"Block","src":"15235:61:46","statements":[{"expression":{"baseExpression":{"id":8127,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7623,"src":"15252:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8129,"indexExpression":{"id":8128,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8122,"src":"15284:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15252:37:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8126,"id":8130,"nodeType":"Return","src":"15245:44:46"}]},"documentation":{"id":8120,"nodeType":"StructuredDocumentation","src":"15104:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0252aab5","id":8132,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorYieldFeePercentage","nameLocation":"15156:32:46","nodeType":"FunctionDefinition","parameters":{"id":8123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8122,"mutability":"mutable","name":"pool","nameLocation":"15197:4:46","nodeType":"VariableDeclaration","scope":8132,"src":"15189:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8121,"name":"address","nodeType":"ElementaryTypeName","src":"15189:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15188:14:46"},"returnParameters":{"id":8126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8125,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8132,"src":"15226:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8124,"name":"uint256","nodeType":"ElementaryTypeName","src":"15226:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15225:9:46"},"scope":9230,"src":"15147:149:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1832],"body":{"id":8184,"nodeType":"Block","src":"15442:273:46","statements":[{"assignments":[8145,8147],"declarations":[{"constant":false,"id":8145,"mutability":"mutable","name":"poolTokens","nameLocation":"15469:10:46","nodeType":"VariableDeclaration","scope":8184,"src":"15453:26:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":8143,"nodeType":"UserDefinedTypeName","pathNode":{"id":8142,"name":"IERC20","nameLocations":["15453:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"15453:6:46"},"referencedDeclaration":10576,"src":"15453:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":8144,"nodeType":"ArrayTypeName","src":"15453:8:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":8147,"mutability":"mutable","name":"numTokens","nameLocation":"15489:9:46","nodeType":"VariableDeclaration","scope":8184,"src":"15481:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8146,"name":"uint256","nodeType":"ElementaryTypeName","src":"15481:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8151,"initialValue":{"arguments":[{"id":8149,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8135,"src":"15525:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8148,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8475,"src":"15502:22:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":8150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15502:28:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15452:78:46"},{"expression":{"id":8158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8152,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8139,"src":"15541:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8156,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8147,"src":"15568:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8155,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15554:13:46","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":8153,"name":"uint256","nodeType":"ElementaryTypeName","src":"15558:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8154,"nodeType":"ArrayTypeName","src":"15558:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":8157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15554:24:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15541:37:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8159,"nodeType":"ExpressionStatement","src":"15541:37:46"},{"body":{"id":8182,"nodeType":"Block","src":"15628:81:46","statements":[{"expression":{"id":8180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8170,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8139,"src":"15642:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8172,"indexExpression":{"id":8171,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8161,"src":"15653:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15642:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":8173,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7630,"src":"15658:19:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":8175,"indexExpression":{"id":8174,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8135,"src":"15678:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15658:25:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":8179,"indexExpression":{"baseExpression":{"id":8176,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8145,"src":"15684:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":8178,"indexExpression":{"id":8177,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8161,"src":"15695:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15684:13:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15658:40:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15642:56:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8181,"nodeType":"ExpressionStatement","src":"15642:56:46"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8164,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8161,"src":"15608:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8165,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8147,"src":"15612:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15608:13:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8183,"initializationExpression":{"assignments":[8161],"declarations":[{"constant":false,"id":8161,"mutability":"mutable","name":"i","nameLocation":"15601:1:46","nodeType":"VariableDeclaration","scope":8183,"src":"15593:9:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8160,"name":"uint256","nodeType":"ElementaryTypeName","src":"15593:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8163,"initialValue":{"hexValue":"30","id":8162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15605:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15593:13:46"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15623:3:46","subExpression":{"id":8167,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8161,"src":"15625:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8169,"nodeType":"ExpressionStatement","src":"15623:3:46"},"nodeType":"ForStatement","src":"15588:121:46"}]},"documentation":{"id":8133,"nodeType":"StructuredDocumentation","src":"15302:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8df44c54","id":8185,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"15354:21:46","nodeType":"FunctionDefinition","parameters":{"id":8136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8135,"mutability":"mutable","name":"pool","nameLocation":"15384:4:46","nodeType":"VariableDeclaration","scope":8185,"src":"15376:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8134,"name":"address","nodeType":"ElementaryTypeName","src":"15376:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15375:14:46"},"returnParameters":{"id":8140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8139,"mutability":"mutable","name":"feeAmounts","nameLocation":"15430:10:46","nodeType":"VariableDeclaration","scope":8185,"src":"15413:27:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":8137,"name":"uint256","nodeType":"ElementaryTypeName","src":"15413:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8138,"nodeType":"ArrayTypeName","src":"15413:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15412:29:46"},"scope":9230,"src":"15345:370:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1841],"body":{"id":8237,"nodeType":"Block","src":"15864:276:46","statements":[{"assignments":[8198,8200],"declarations":[{"constant":false,"id":8198,"mutability":"mutable","name":"poolTokens","nameLocation":"15891:10:46","nodeType":"VariableDeclaration","scope":8237,"src":"15875:26:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":8196,"nodeType":"UserDefinedTypeName","pathNode":{"id":8195,"name":"IERC20","nameLocations":["15875:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"15875:6:46"},"referencedDeclaration":10576,"src":"15875:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":8197,"nodeType":"ArrayTypeName","src":"15875:8:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":8200,"mutability":"mutable","name":"numTokens","nameLocation":"15911:9:46","nodeType":"VariableDeclaration","scope":8237,"src":"15903:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8199,"name":"uint256","nodeType":"ElementaryTypeName","src":"15903:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8204,"initialValue":{"arguments":[{"id":8202,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8188,"src":"15947:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8201,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8475,"src":"15924:22:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":8203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15924:28:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15874:78:46"},{"expression":{"id":8211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8205,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8192,"src":"15963:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8209,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8200,"src":"15990:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8208,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15976:13:46","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":8206,"name":"uint256","nodeType":"ElementaryTypeName","src":"15980:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8207,"nodeType":"ArrayTypeName","src":"15980:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":8210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15976:24:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15963:37:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8212,"nodeType":"ExpressionStatement","src":"15963:37:46"},{"body":{"id":8235,"nodeType":"Block","src":"16050:84:46","statements":[{"expression":{"id":8233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8223,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8192,"src":"16064:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8225,"indexExpression":{"id":8224,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8214,"src":"16075:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16064:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":8226,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7637,"src":"16080:22:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":8228,"indexExpression":{"id":8227,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8188,"src":"16103:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16080:28:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":8232,"indexExpression":{"baseExpression":{"id":8229,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8198,"src":"16109:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":8231,"indexExpression":{"id":8230,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8214,"src":"16120:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16109:13:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16080:43:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16064:59:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8234,"nodeType":"ExpressionStatement","src":"16064:59:46"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8217,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8214,"src":"16030:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8218,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8200,"src":"16034:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16030:13:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8236,"initializationExpression":{"assignments":[8214],"declarations":[{"constant":false,"id":8214,"mutability":"mutable","name":"i","nameLocation":"16023:1:46","nodeType":"VariableDeclaration","scope":8236,"src":"16015:9:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8213,"name":"uint256","nodeType":"ElementaryTypeName","src":"16015:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8216,"initialValue":{"hexValue":"30","id":8215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16027:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16015:13:46"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"16045:3:46","subExpression":{"id":8220,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8214,"src":"16047:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8222,"nodeType":"ExpressionStatement","src":"16045:3:46"},"nodeType":"ForStatement","src":"16010:124:46"}]},"documentation":{"id":8186,"nodeType":"StructuredDocumentation","src":"15721:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"9e95f3fd","id":8238,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"15773:24:46","nodeType":"FunctionDefinition","parameters":{"id":8189,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8188,"mutability":"mutable","name":"pool","nameLocation":"15806:4:46","nodeType":"VariableDeclaration","scope":8238,"src":"15798:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8187,"name":"address","nodeType":"ElementaryTypeName","src":"15798:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15797:14:46"},"returnParameters":{"id":8193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8192,"mutability":"mutable","name":"feeAmounts","nameLocation":"15852:10:46","nodeType":"VariableDeclaration","scope":8238,"src":"15835:27:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":8190,"name":"uint256","nodeType":"ElementaryTypeName","src":"15835:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8191,"nodeType":"ArrayTypeName","src":"15835:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15834:29:46"},"scope":9230,"src":"15764:376:46","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1851],"body":{"id":8253,"nodeType":"Block","src":"16347:103:46","statements":[{"expression":{"arguments":[{"id":8249,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8241,"src":"16395:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8250,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8243,"src":"16418:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8248,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8415,"src":"16364:30:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16364:79:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8247,"id":8252,"nodeType":"Return","src":"16357:86:46"}]},"documentation":{"id":8239,"nodeType":"StructuredDocumentation","src":"16146:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0ddd60c6","id":8254,"implemented":true,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"16198:29:46","nodeType":"FunctionDefinition","parameters":{"id":8244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8241,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"16245:21:46","nodeType":"VariableDeclaration","scope":8254,"src":"16237:29:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8240,"name":"uint256","nodeType":"ElementaryTypeName","src":"16237:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8243,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"16284:24:46","nodeType":"VariableDeclaration","scope":8254,"src":"16276:32:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8242,"name":"uint256","nodeType":"ElementaryTypeName","src":"16276:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16227:87:46"},"returnParameters":{"id":8247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8246,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8254,"src":"16338:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8245,"name":"uint256","nodeType":"ElementaryTypeName","src":"16338:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16337:9:46"},"scope":9230,"src":"16189:261:46","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[1857],"body":{"id":8291,"nodeType":"Block","src":"16584:347:46","statements":[{"assignments":[8265],"declarations":[{"constant":false,"id":8265,"mutability":"mutable","name":"feeConfig","nameLocation":"16615:9:46","nodeType":"VariableDeclaration","scope":8291,"src":"16594:30:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":8264,"nodeType":"UserDefinedTypeName","pathNode":{"id":8263,"name":"PoolFeeConfig","nameLocations":["16594:13:46"],"nodeType":"IdentifierPath","referencedDeclaration":7588,"src":"16594:13:46"},"referencedDeclaration":7588,"src":"16594:13:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":8269,"initialValue":{"baseExpression":{"id":8266,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7606,"src":"16627:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8268,"indexExpression":{"id":8267,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8257,"src":"16659:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16627:37:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"16594:70:46"},{"assignments":[8271],"declarations":[{"constant":false,"id":8271,"mutability":"mutable","name":"globalProtocolSwapFee","nameLocation":"16682:21:46","nodeType":"VariableDeclaration","scope":8291,"src":"16674:29:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8270,"name":"uint256","nodeType":"ElementaryTypeName","src":"16674:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8273,"initialValue":{"id":8272,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7599,"src":"16706:32:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16674:64:46"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":8274,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8265,"src":"16753:9:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8275,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16763:10:46","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":7587,"src":"16753:20:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":8276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16777:5:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"16753:29:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8278,"name":"globalProtocolSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8271,"src":"16786:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":8279,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8265,"src":"16811:9:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8280,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16821:13:46","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7585,"src":"16811:23:46","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"16786:48:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16753:81:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8290,"nodeType":"IfStatement","src":"16749:176:46","trueBody":{"id":8289,"nodeType":"Block","src":"16836:89:46","statements":[{"expression":{"arguments":[{"id":8284,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8257,"src":"16879:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8285,"name":"globalProtocolSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8271,"src":"16885:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":8286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16908:5:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8283,"name":"_updatePoolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9170,"src":"16850:28:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16850:64:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8288,"nodeType":"ExpressionStatement","src":"16850:64:46"}]}}]},"documentation":{"id":8255,"nodeType":"StructuredDocumentation","src":"16456:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"71ecc8fb","id":8292,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8260,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8257,"src":"16578:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8261,"kind":"modifierInvocation","modifierName":{"id":8259,"name":"withLatestFees","nameLocations":["16563:14:46"],"nodeType":"IdentifierPath","referencedDeclaration":7715,"src":"16563:14:46"},"nodeType":"ModifierInvocation","src":"16563:20:46"}],"name":"updateProtocolSwapFeePercentage","nameLocation":"16508:31:46","nodeType":"FunctionDefinition","parameters":{"id":8258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8257,"mutability":"mutable","name":"pool","nameLocation":"16548:4:46","nodeType":"VariableDeclaration","scope":8292,"src":"16540:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8256,"name":"address","nodeType":"ElementaryTypeName","src":"16540:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16539:14:46"},"returnParameters":{"id":8262,"nodeType":"ParameterList","parameters":[],"src":"16584:0:46"},"scope":9230,"src":"16499:432:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1863],"body":{"id":8329,"nodeType":"Block","src":"17066:353:46","statements":[{"assignments":[8303],"declarations":[{"constant":false,"id":8303,"mutability":"mutable","name":"feeConfig","nameLocation":"17097:9:46","nodeType":"VariableDeclaration","scope":8329,"src":"17076:30:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":8302,"nodeType":"UserDefinedTypeName","pathNode":{"id":8301,"name":"PoolFeeConfig","nameLocations":["17076:13:46"],"nodeType":"IdentifierPath","referencedDeclaration":7588,"src":"17076:13:46"},"referencedDeclaration":7588,"src":"17076:13:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":8307,"initialValue":{"baseExpression":{"id":8304,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7611,"src":"17109:32:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8306,"indexExpression":{"id":8305,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8295,"src":"17142:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17109:38:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"17076:71:46"},{"assignments":[8309],"declarations":[{"constant":false,"id":8309,"mutability":"mutable","name":"globalProtocolYieldFee","nameLocation":"17165:22:46","nodeType":"VariableDeclaration","scope":8329,"src":"17157:30:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8308,"name":"uint256","nodeType":"ElementaryTypeName","src":"17157:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8311,"initialValue":{"id":8310,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7601,"src":"17190:33:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17157:66:46"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":8312,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8303,"src":"17238:9:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8313,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17248:10:46","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":7587,"src":"17238:20:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":8314,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17262:5:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"17238:29:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8316,"name":"globalProtocolYieldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8309,"src":"17271:22:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":8317,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8303,"src":"17297:9:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8318,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17307:13:46","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7585,"src":"17297:23:46","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17271:49:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17238:82:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8328,"nodeType":"IfStatement","src":"17234:179:46","trueBody":{"id":8327,"nodeType":"Block","src":"17322:91:46","statements":[{"expression":{"arguments":[{"id":8322,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8295,"src":"17366:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8323,"name":"globalProtocolYieldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8309,"src":"17372:22:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":8324,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17396:5:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8321,"name":"_updatePoolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9208,"src":"17336:29:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17336:66:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8326,"nodeType":"ExpressionStatement","src":"17336:66:46"}]}}]},"documentation":{"id":8293,"nodeType":"StructuredDocumentation","src":"16937:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"71447ea8","id":8330,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8298,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8295,"src":"17060:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8299,"kind":"modifierInvocation","modifierName":{"id":8297,"name":"withLatestFees","nameLocations":["17045:14:46"],"nodeType":"IdentifierPath","referencedDeclaration":7715,"src":"17045:14:46"},"nodeType":"ModifierInvocation","src":"17045:20:46"}],"name":"updateProtocolYieldFeePercentage","nameLocation":"16989:32:46","nodeType":"FunctionDefinition","parameters":{"id":8296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8295,"mutability":"mutable","name":"pool","nameLocation":"17030:4:46","nodeType":"VariableDeclaration","scope":8330,"src":"17022:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8294,"name":"address","nodeType":"ElementaryTypeName","src":"17022:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17021:14:46"},"returnParameters":{"id":8300,"nodeType":"ParameterList","parameters":[],"src":"17066:0:46"},"scope":9230,"src":"16980:439:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8384,"nodeType":"Block","src":"17532:594:46","statements":[{"assignments":[8341],"declarations":[{"constant":false,"id":8341,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"17550:21:46","nodeType":"VariableDeclaration","scope":8384,"src":"17542:29:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8340,"name":"uint256","nodeType":"ElementaryTypeName","src":"17542:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8342,"nodeType":"VariableDeclarationStatement","src":"17542:29:46"},{"assignments":[8344],"declarations":[{"constant":false,"id":8344,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"17589:24:46","nodeType":"VariableDeclaration","scope":8384,"src":"17581:32:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8343,"name":"uint256","nodeType":"ElementaryTypeName","src":"17581:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8345,"nodeType":"VariableDeclarationStatement","src":"17581:32:46"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":8349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8346,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8335,"src":"17628:7:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":8347,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"17639:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8348,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17655:4:46","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7580,"src":"17639:20:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"17628:31:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8377,"nodeType":"Block","src":"17844:179:46","statements":[{"expression":{"id":8369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8364,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8341,"src":"17858:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":8365,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7611,"src":"17882:32:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8367,"indexExpression":{"id":8366,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8332,"src":"17915:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17882:38:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8368,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17921:13:46","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7585,"src":"17882:52:46","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17858:76:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8370,"nodeType":"ExpressionStatement","src":"17858:76:46"},{"expression":{"id":8375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8371,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8344,"src":"17948:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":8372,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7623,"src":"17975:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8374,"indexExpression":{"id":8373,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8332,"src":"18007:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17975:37:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17948:64:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8376,"nodeType":"ExpressionStatement","src":"17948:64:46"}]},"id":8378,"nodeType":"IfStatement","src":"17624:399:46","trueBody":{"id":8363,"nodeType":"Block","src":"17661:177:46","statements":[{"expression":{"id":8355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8350,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8341,"src":"17675:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":8351,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7606,"src":"17699:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8353,"indexExpression":{"id":8352,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8332,"src":"17731:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17699:37:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8354,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17737:13:46","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7585,"src":"17699:51:46","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17675:75:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8356,"nodeType":"ExpressionStatement","src":"17675:75:46"},{"expression":{"id":8361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8357,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8344,"src":"17764:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":8358,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7619,"src":"17791:30:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8360,"indexExpression":{"id":8359,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8332,"src":"17822:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17791:36:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17764:63:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8362,"nodeType":"ExpressionStatement","src":"17764:63:46"}]}},{"expression":{"arguments":[{"id":8380,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8341,"src":"18071:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8381,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8344,"src":"18094:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8379,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8415,"src":"18040:30:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18040:79:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8339,"id":8383,"nodeType":"Return","src":"18033:86:46"}]},"id":8385,"implemented":true,"kind":"function","modifiers":[],"name":"_getAggregateFeePercentage","nameLocation":"17434:26:46","nodeType":"FunctionDefinition","parameters":{"id":8336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8332,"mutability":"mutable","name":"pool","nameLocation":"17469:4:46","nodeType":"VariableDeclaration","scope":8385,"src":"17461:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8331,"name":"address","nodeType":"ElementaryTypeName","src":"17461:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8335,"mutability":"mutable","name":"feeType","nameLocation":"17491:7:46","nodeType":"VariableDeclaration","scope":8385,"src":"17475:23:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":8334,"nodeType":"UserDefinedTypeName","pathNode":{"id":8333,"name":"ProtocolFeeType","nameLocations":["17475:15:46"],"nodeType":"IdentifierPath","referencedDeclaration":7582,"src":"17475:15:46"},"referencedDeclaration":7582,"src":"17475:15:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"}],"src":"17460:39:46"},"returnParameters":{"id":8339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8338,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8385,"src":"17523:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8337,"name":"uint256","nodeType":"ElementaryTypeName","src":"17523:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17522:9:46"},"scope":9230,"src":"17425:701:46","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":8414,"nodeType":"Block","src":"18314:882:46","statements":[{"expression":{"id":8403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8394,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8392,"src":"18324:22:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8395,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8387,"src":"18361:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":8400,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8389,"src":"18440:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8396,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8387,"src":"18397:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18419:10:46","memberName":"complement","nodeType":"MemberAccess","referencedDeclaration":5297,"src":"18397:32:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":8398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18397:34:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18432:7:46","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":5043,"src":"18397:42:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18397:68:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18361:104:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18324:141:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8404,"nodeType":"ExpressionStatement","src":"18324:141:46"},{"expression":{"id":8412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8405,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8392,"src":"19098:22:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8406,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8392,"src":"19124:22:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8407,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4302,"src":"19149:18:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19124:43:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8409,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19123:45:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8410,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4302,"src":"19171:18:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19123:66:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19098:91:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8413,"nodeType":"ExpressionStatement","src":"19098:91:46"}]},"id":8415,"implemented":true,"kind":"function","modifiers":[],"name":"_computeAggregateFeePercentage","nameLocation":"18141:30:46","nodeType":"FunctionDefinition","parameters":{"id":8390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8387,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"18189:21:46","nodeType":"VariableDeclaration","scope":8415,"src":"18181:29:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8386,"name":"uint256","nodeType":"ElementaryTypeName","src":"18181:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8389,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"18228:24:46","nodeType":"VariableDeclaration","scope":8415,"src":"18220:32:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8388,"name":"uint256","nodeType":"ElementaryTypeName","src":"18220:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18171:87:46"},"returnParameters":{"id":8393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8392,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"18290:22:46","nodeType":"VariableDeclaration","scope":8415,"src":"18282:30:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8391,"name":"uint256","nodeType":"ElementaryTypeName","src":"18282:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18281:32:46"},"scope":9230,"src":"18132:1064:46","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8450,"nodeType":"Block","src":"19266:276:46","statements":[{"assignments":[8421],"declarations":[{"constant":false,"id":8421,"mutability":"mutable","name":"poolCreator","nameLocation":"19284:11:46","nodeType":"VariableDeclaration","scope":8450,"src":"19276:19:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8420,"name":"address","nodeType":"ElementaryTypeName","src":"19276:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":8425,"initialValue":{"arguments":[{"id":8423,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8417,"src":"19314:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8422,"name":"_getPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8494,"src":"19298:15:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":8424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19298:21:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"19276:43:46"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8426,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8421,"src":"19334:11:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":8429,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19357:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8428,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19349:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8427,"name":"address","nodeType":"ElementaryTypeName","src":"19349:7:46","typeDescriptions":{}}},"id":8430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19349:10:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19334:25:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8437,"nodeType":"IfStatement","src":"19330:93:46","trueBody":{"id":8436,"nodeType":"Block","src":"19361:62:46","statements":[{"errorCall":{"arguments":[{"id":8433,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8417,"src":"19407:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8432,"name":"PoolCreatorNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1744,"src":"19382:24:46","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":8434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19382:30:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8435,"nodeType":"RevertStatement","src":"19375:37:46"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8438,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8421,"src":"19437:11:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":8439,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19452:3:46","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":8440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19456:6:46","memberName":"sender","nodeType":"MemberAccess","src":"19452:10:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19437:25:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8449,"nodeType":"IfStatement","src":"19433:103:46","trueBody":{"id":8448,"nodeType":"Block","src":"19464:72:46","statements":[{"errorCall":{"arguments":[{"expression":{"id":8443,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19508:3:46","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":8444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19512:6:46","memberName":"sender","nodeType":"MemberAccess","src":"19508:10:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8445,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8417,"src":"19520:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":8442,"name":"CallerIsNotPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1751,"src":"19485:22:46","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address) pure returns (error)"}},"id":8446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19485:40:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8447,"nodeType":"RevertStatement","src":"19478:47:46"}]}}]},"id":8451,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureCallerIsPoolCreator","nameLocation":"19211:26:46","nodeType":"FunctionDefinition","parameters":{"id":8418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8417,"mutability":"mutable","name":"pool","nameLocation":"19246:4:46","nodeType":"VariableDeclaration","scope":8451,"src":"19238:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8416,"name":"address","nodeType":"ElementaryTypeName","src":"19238:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19237:14:46"},"returnParameters":{"id":8419,"nodeType":"ParameterList","parameters":[],"src":"19266:0:46"},"scope":9230,"src":"19202:340:46","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":8474,"nodeType":"Block","src":"19660:87:46","statements":[{"expression":{"id":8467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8462,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8458,"src":"19670:6:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8465,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8453,"src":"19700:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8463,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"19679:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":8464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19686:13:46","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":3579,"src":"19679:20:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":8466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19679:26:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"src":"19670:35:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":8468,"nodeType":"ExpressionStatement","src":"19670:35:46"},{"expression":{"id":8472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8469,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8460,"src":"19715:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":8470,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8458,"src":"19727:6:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":8471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19734:6:46","memberName":"length","nodeType":"MemberAccess","src":"19727:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19715:25:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8473,"nodeType":"ExpressionStatement","src":"19715:25:46"}]},"id":8475,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolTokensAndCount","nameLocation":"19557:22:46","nodeType":"FunctionDefinition","parameters":{"id":8454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8453,"mutability":"mutable","name":"pool","nameLocation":"19588:4:46","nodeType":"VariableDeclaration","scope":8475,"src":"19580:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8452,"name":"address","nodeType":"ElementaryTypeName","src":"19580:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19579:14:46"},"returnParameters":{"id":8461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8458,"mutability":"mutable","name":"tokens","nameLocation":"19633:6:46","nodeType":"VariableDeclaration","scope":8475,"src":"19617:22:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":8456,"nodeType":"UserDefinedTypeName","pathNode":{"id":8455,"name":"IERC20","nameLocations":["19617:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"19617:6:46"},"referencedDeclaration":10576,"src":"19617:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":8457,"nodeType":"ArrayTypeName","src":"19617:8:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":8460,"mutability":"mutable","name":"numTokens","nameLocation":"19649:9:46","nodeType":"VariableDeclaration","scope":8475,"src":"19641:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8459,"name":"uint256","nodeType":"ElementaryTypeName","src":"19641:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19616:43:46"},"scope":9230,"src":"19548:199:46","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":8493,"nodeType":"Block","src":"19884:130:46","statements":[{"assignments":[8484],"declarations":[{"constant":false,"id":8484,"mutability":"mutable","name":"roleAccounts","nameLocation":"19918:12:46","nodeType":"VariableDeclaration","scope":8493,"src":"19894:36:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":8483,"nodeType":"UserDefinedTypeName","pathNode":{"id":8482,"name":"PoolRoleAccounts","nameLocations":["19894:16:46"],"nodeType":"IdentifierPath","referencedDeclaration":4111,"src":"19894:16:46"},"referencedDeclaration":4111,"src":"19894:16:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"id":8489,"initialValue":{"arguments":[{"id":8487,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8477,"src":"19960:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8485,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"19933:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":8486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19940:19:46","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":3776,"src":"19933:26:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$4111_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":8488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19933:32:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"nodeType":"VariableDeclarationStatement","src":"19894:71:46"},{"expression":{"expression":{"id":8490,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8484,"src":"19983:12:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":8491,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19996:11:46","memberName":"poolCreator","nodeType":"MemberAccess","referencedDeclaration":4110,"src":"19983:24:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":8481,"id":8492,"nodeType":"Return","src":"19976:31:46"}]},"id":8494,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolCreator","nameLocation":"19822:15:46","nodeType":"FunctionDefinition","parameters":{"id":8478,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8477,"mutability":"mutable","name":"pool","nameLocation":"19846:4:46","nodeType":"VariableDeclaration","scope":8494,"src":"19838:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8476,"name":"address","nodeType":"ElementaryTypeName","src":"19838:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19837:14:46"},"returnParameters":{"id":8481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8480,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8494,"src":"19875:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8479,"name":"address","nodeType":"ElementaryTypeName","src":"19875:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19874:9:46"},"scope":9230,"src":"19813:201:46","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":8612,"nodeType":"Block","src":"21225:2076:46","statements":[{"assignments":[8502],"declarations":[{"constant":false,"id":8502,"mutability":"mutable","name":"oldFeeController","nameLocation":"21258:16:46","nodeType":"VariableDeclaration","scope":8612,"src":"21235:39:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":8501,"nodeType":"UserDefinedTypeName","pathNode":{"id":8500,"name":"IProtocolFeeController","nameLocations":["21235:22:46"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"21235:22:46"},"referencedDeclaration":1955,"src":"21235:22:46","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"id":8506,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8503,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"21277:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":8504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21284:24:46","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":3794,"src":"21277:31:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":8505,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21277:33:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"nodeType":"VariableDeclarationStatement","src":"21235:75:46"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":8509,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8502,"src":"21333:16:46","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}],"id":8508,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21325:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8507,"name":"address","nodeType":"ElementaryTypeName","src":"21325:7:46","typeDescriptions":{}}},"id":8510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21325:25:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":8513,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"21362:4:46","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$9230","typeString":"contract ProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeController_$9230","typeString":"contract ProtocolFeeController"}],"id":8512,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21354:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8511,"name":"address","nodeType":"ElementaryTypeName","src":"21354:7:46","typeDescriptions":{}}},"id":8514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21354:13:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21325:42:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8520,"nodeType":"IfStatement","src":"21321:104:46","trueBody":{"id":8519,"nodeType":"Block","src":"21369:56:46","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":8516,"name":"InvalidMigrationSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7645,"src":"21390:22:46","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":8517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21390:24:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8518,"nodeType":"RevertStatement","src":"21383:31:46"}]}},{"condition":{"baseExpression":{"id":8521,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7615,"src":"21439:16:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":8523,"indexExpression":{"id":8522,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"21456:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21439:22:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8529,"nodeType":"IfStatement","src":"21435:87:46","trueBody":{"id":8528,"nodeType":"Block","src":"21463:59:46","statements":[{"errorCall":{"arguments":[{"id":8525,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"21506:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8524,"name":"PoolAlreadyRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7642,"src":"21484:21:46","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":8526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21484:27:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8527,"nodeType":"RevertStatement","src":"21477:34:46"}]}},{"expression":{"id":8534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8530,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7615,"src":"21532:16:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":8532,"indexExpression":{"id":8531,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"21549:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21532:22:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":8533,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"21557:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"21532:29:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8535,"nodeType":"ExpressionStatement","src":"21532:29:46"},{"assignments":[8537,8539],"declarations":[{"constant":false,"id":8537,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"21581:25:46","nodeType":"VariableDeclaration","scope":8612,"src":"21573:33:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8536,"name":"uint256","nodeType":"ElementaryTypeName","src":"21573:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8539,"mutability":"mutable","name":"swapFeeIsOverride","nameLocation":"21613:17:46","nodeType":"VariableDeclaration","scope":8612,"src":"21608:22:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8538,"name":"bool","nodeType":"ElementaryTypeName","src":"21608:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":8544,"initialValue":{"arguments":[{"id":8542,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"21678:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8540,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8502,"src":"21634:16:46","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":8541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21651:26:46","memberName":"getPoolProtocolSwapFeeInfo","nodeType":"MemberAccess","referencedDeclaration":1797,"src":"21634:43:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (address) view external returns (uint256,bool)"}},"id":8543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21634:49:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"21572:111:46"},{"expression":{"id":8554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8545,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7606,"src":"21693:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8547,"indexExpression":{"id":8546,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"21725:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21693:37:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8549,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8537,"src":"21776:25:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21802:8:46","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15026,"src":"21776:34:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":8551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21776:36:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":8552,"name":"swapFeeIsOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8539,"src":"21838:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8548,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7588,"src":"21733:13:46","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$7588_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":8553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["21761:13:46","21826:10:46"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"21733:133:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"21693:173:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8555,"nodeType":"ExpressionStatement","src":"21693:173:46"},{"assignments":[8557,8559],"declarations":[{"constant":false,"id":8557,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"21886:26:46","nodeType":"VariableDeclaration","scope":8612,"src":"21878:34:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8556,"name":"uint256","nodeType":"ElementaryTypeName","src":"21878:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8559,"mutability":"mutable","name":"yieldFeeIsOverride","nameLocation":"21919:18:46","nodeType":"VariableDeclaration","scope":8612,"src":"21914:23:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8558,"name":"bool","nodeType":"ElementaryTypeName","src":"21914:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":8564,"initialValue":{"arguments":[{"id":8562,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"21999:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8560,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8502,"src":"21941:16:46","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":8561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21958:27:46","memberName":"getPoolProtocolYieldFeeInfo","nodeType":"MemberAccess","referencedDeclaration":1807,"src":"21941:44:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (address) view external returns (uint256,bool)"}},"id":8563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21941:72:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"21877:136:46"},{"expression":{"id":8574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8565,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7611,"src":"22023:32:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8567,"indexExpression":{"id":8566,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"22056:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22023:38:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8569,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8557,"src":"22107:26:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22134:8:46","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15026,"src":"22107:35:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":8571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22107:37:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":8572,"name":"yieldFeeIsOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8559,"src":"22170:18:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8568,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7588,"src":"22064:13:46","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$7588_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":8573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["22092:13:46","22158:10:46"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"22064:135:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"22023:176:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8575,"nodeType":"ExpressionStatement","src":"22023:176:46"},{"clauses":[{"block":{"id":8589,"nodeType":"Block","src":"22833:92:46","statements":[{"expression":{"id":8587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8583,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7619,"src":"22847:30:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8585,"indexExpression":{"id":8584,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"22878:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22847:36:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8586,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8581,"src":"22886:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22847:67:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8588,"nodeType":"ExpressionStatement","src":"22847:67:46"}]},"errorName":"","id":8590,"nodeType":"TryCatchClause","parameters":{"id":8582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8581,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"22803:28:46","nodeType":"VariableDeclaration","scope":8590,"src":"22795:36:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8580,"name":"uint256","nodeType":"ElementaryTypeName","src":"22795:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22794:38:46"},"src":"22786:139:46"},{"block":{"id":8591,"nodeType":"Block","src":"22932:72:46","statements":[]},"errorName":"","id":8592,"nodeType":"TryCatchClause","src":"22926:78:46"}],"externalCall":{"arguments":[{"id":8578,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"22780:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8576,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8502,"src":"22731:16:46","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":8577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22748:31:46","memberName":"getPoolCreatorSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1815,"src":"22731:48:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":8579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22731:54:46","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8593,"nodeType":"TryStatement","src":"22727:277:46"},{"clauses":[{"block":{"id":8607,"nodeType":"Block","src":"23122:94:46","statements":[{"expression":{"id":8605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8601,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7623,"src":"23136:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8603,"indexExpression":{"id":8602,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"23168:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23136:37:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8604,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8599,"src":"23176:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23136:69:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8606,"nodeType":"ExpressionStatement","src":"23136:69:46"}]},"errorName":"","id":8608,"nodeType":"TryCatchClause","parameters":{"id":8600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8599,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"23091:29:46","nodeType":"VariableDeclaration","scope":8608,"src":"23083:37:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8598,"name":"uint256","nodeType":"ElementaryTypeName","src":"23083:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23082:39:46"},"src":"23074:142:46"},{"block":{"id":8609,"nodeType":"Block","src":"23223:72:46","statements":[]},"errorName":"","id":8610,"nodeType":"TryCatchClause","src":"23217:78:46"}],"externalCall":{"arguments":[{"id":8596,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8497,"src":"23068:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8594,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8502,"src":"23018:16:46","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":8595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23035:32:46","memberName":"getPoolCreatorYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1823,"src":"23018:49:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":8597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23018:55:46","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8611,"nodeType":"TryStatement","src":"23014:281:46"}]},"documentation":{"id":8495,"nodeType":"StructuredDocumentation","src":"20231:945:46","text":" @notice Not exposed in the interface, this enables migration of hidden pool state.\n @dev Permission should NEVER be granted to this function outside of a migration contract. It is necessary to\n permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool\n creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool\n deployment.\n Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe,\n guaranteeing that it is impossible to use this function to change anything after registration. A pool can only\n be registered / configured once - either copied to a new controller in the migration context, or added normally\n through the Vault calling `registerPool`.\n @param pool The address of the pool to be migrated"},"functionSelector":"0874327f","id":8613,"implemented":true,"kind":"function","modifiers":[],"name":"migratePool","nameLocation":"21190:11:46","nodeType":"FunctionDefinition","parameters":{"id":8498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8497,"mutability":"mutable","name":"pool","nameLocation":"21210:4:46","nodeType":"VariableDeclaration","scope":8613,"src":"21202:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8496,"name":"address","nodeType":"ElementaryTypeName","src":"21202:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21201:14:46"},"returnParameters":{"id":8499,"nodeType":"ParameterList","parameters":[],"src":"21225:0:46"},"scope":9230,"src":"21181:2120:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1877],"body":{"id":8689,"nodeType":"Block","src":"23780:1540:46","statements":[{"expression":{"id":8633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8629,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7615,"src":"23790:16:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":8631,"indexExpression":{"id":8630,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8616,"src":"23807:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23790:22:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":8632,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"23815:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"23790:29:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8634,"nodeType":"ExpressionStatement","src":"23790:29:46"},{"expression":{"id":8640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8635,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8625,"src":"23919:26:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":8636,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8620,"src":"23948:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":8638,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7599,"src":"23972:32:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"23948:56:46","trueExpression":{"hexValue":"30","id":8637,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23968:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23919:85:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8641,"nodeType":"ExpressionStatement","src":"23919:85:46"},{"expression":{"id":8647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8642,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8627,"src":"24014:27:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":8643,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8620,"src":"24044:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":8645,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7601,"src":"24068:33:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"24044:57:46","trueExpression":{"hexValue":"30","id":8644,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24064:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24014:87:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8648,"nodeType":"ExpressionStatement","src":"24014:87:46"},{"expression":{"id":8658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8649,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7606,"src":"24549:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8651,"indexExpression":{"id":8650,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8616,"src":"24581:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24549:37:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8653,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8625,"src":"24632:26:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24659:8:46","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15026,"src":"24632:35:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":8655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24632:37:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":8656,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8620,"src":"24695:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8652,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7588,"src":"24589:13:46","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$7588_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":8657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["24617:13:46","24683:10:46"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"24589:134:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"24549:174:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8659,"nodeType":"ExpressionStatement","src":"24549:174:46"},{"expression":{"id":8669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8660,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7611,"src":"24733:32:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8662,"indexExpression":{"id":8661,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8616,"src":"24766:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24733:38:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8664,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8627,"src":"24817:27:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24845:8:46","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15026,"src":"24817:36:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":8666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24817:38:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":8667,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8620,"src":"24881:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8663,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7588,"src":"24774:13:46","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$7588_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":8668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["24802:13:46","24869:10:46"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"24774:135:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"24733:176:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8670,"nodeType":"ExpressionStatement","src":"24733:176:46"},{"eventCall":{"arguments":[{"id":8672,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8616,"src":"25069:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8673,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8625,"src":"25075:26:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8674,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8620,"src":"25103:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8671,"name":"InitialPoolAggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1715,"src":"25031:37:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25031:90:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8676,"nodeType":"EmitStatement","src":"25026:95:46"},{"eventCall":{"arguments":[{"id":8678,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8616,"src":"25175:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8679,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8627,"src":"25181:27:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8680,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8620,"src":"25210:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8677,"name":"InitialPoolAggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1724,"src":"25136:38:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25136:92:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8682,"nodeType":"EmitStatement","src":"25131:97:46"},{"eventCall":{"arguments":[{"id":8684,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8616,"src":"25276:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8685,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8618,"src":"25282:11:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8686,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8620,"src":"25295:17:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8683,"name":"PoolRegisteredWithFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1733,"src":"25244:31:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,bool)"}},"id":8687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25244:69:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8688,"nodeType":"EmitStatement","src":"25239:74:46"}]},"documentation":{"id":8614,"nodeType":"StructuredDocumentation","src":"23525:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"77ff76e7","id":8690,"implemented":true,"kind":"function","modifiers":[{"id":8623,"kind":"modifierInvocation","modifierName":{"id":8622,"name":"onlyVault","nameLocations":["23688:9:46"],"nodeType":"IdentifierPath","referencedDeclaration":9317,"src":"23688:9:46"},"nodeType":"ModifierInvocation","src":"23688:9:46"}],"name":"registerPool","nameLocation":"23577:12:46","nodeType":"FunctionDefinition","parameters":{"id":8621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8616,"mutability":"mutable","name":"pool","nameLocation":"23607:4:46","nodeType":"VariableDeclaration","scope":8690,"src":"23599:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8615,"name":"address","nodeType":"ElementaryTypeName","src":"23599:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8618,"mutability":"mutable","name":"poolCreator","nameLocation":"23629:11:46","nodeType":"VariableDeclaration","scope":8690,"src":"23621:19:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8617,"name":"address","nodeType":"ElementaryTypeName","src":"23621:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8620,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"23655:17:46","nodeType":"VariableDeclaration","scope":8690,"src":"23650:22:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8619,"name":"bool","nodeType":"ElementaryTypeName","src":"23650:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"23589:89:46"},"returnParameters":{"id":8628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8625,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"23715:26:46","nodeType":"VariableDeclaration","scope":8690,"src":"23707:34:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8624,"name":"uint256","nodeType":"ElementaryTypeName","src":"23707:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8627,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"23751:27:46","nodeType":"VariableDeclaration","scope":8690,"src":"23743:35:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8626,"name":"uint256","nodeType":"ElementaryTypeName","src":"23743:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23706:73:46"},"scope":9230,"src":"23568:1752:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1883],"body":{"id":8702,"nodeType":"Block","src":"25473:82:46","statements":[{"expression":{"arguments":[{"id":8699,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8693,"src":"25519:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8698,"name":"_setGlobalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8720,"src":"25483:35:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":8700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25483:65:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8701,"nodeType":"ExpressionStatement","src":"25483:65:46"}]},"documentation":{"id":8691,"nodeType":"StructuredDocumentation","src":"25326:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8a3c5c69","id":8703,"implemented":true,"kind":"function","modifiers":[{"id":8696,"kind":"modifierInvocation","modifierName":{"id":8695,"name":"authenticate","nameLocations":["25460:12:46"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"25460:12:46"},"nodeType":"ModifierInvocation","src":"25460:12:46"}],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"25378:34:46","nodeType":"FunctionDefinition","parameters":{"id":8694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8693,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"25421:28:46","nodeType":"VariableDeclaration","scope":8703,"src":"25413:36:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8692,"name":"uint256","nodeType":"ElementaryTypeName","src":"25413:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25412:38:46"},"returnParameters":{"id":8697,"nodeType":"ParameterList","parameters":[],"src":"25473:0:46"},"scope":9230,"src":"25369:186:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8719,"nodeType":"Block","src":"25714:164:46","statements":[{"expression":{"id":8713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8711,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7599,"src":"25724:32:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8712,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8705,"src":"25759:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25724:63:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8714,"nodeType":"ExpressionStatement","src":"25724:63:46"},{"eventCall":{"arguments":[{"id":8716,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8705,"src":"25842:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8715,"name":"GlobalProtocolSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1629,"src":"25803:38:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":8717,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25803:68:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8718,"nodeType":"EmitStatement","src":"25798:73:46"}]},"id":8720,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8708,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8705,"src":"25684:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8709,"kind":"modifierInvocation","modifierName":{"id":8707,"name":"withValidSwapFee","nameLocations":["25667:16:46"],"nodeType":"IdentifierPath","referencedDeclaration":7673,"src":"25667:16:46"},"nodeType":"ModifierInvocation","src":"25667:46:46"}],"name":"_setGlobalProtocolSwapFeePercentage","nameLocation":"25570:35:46","nodeType":"FunctionDefinition","parameters":{"id":8706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8705,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"25623:28:46","nodeType":"VariableDeclaration","scope":8720,"src":"25615:36:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8704,"name":"uint256","nodeType":"ElementaryTypeName","src":"25615:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25605:52:46"},"returnParameters":{"id":8710,"nodeType":"ParameterList","parameters":[],"src":"25714:0:46"},"scope":9230,"src":"25561:317:46","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1889],"body":{"id":8732,"nodeType":"Block","src":"26033:84:46","statements":[{"expression":{"arguments":[{"id":8729,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8723,"src":"26080:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8728,"name":"_setGlobalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8750,"src":"26043:36:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":8730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26043:67:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8731,"nodeType":"ExpressionStatement","src":"26043:67:46"}]},"documentation":{"id":8721,"nodeType":"StructuredDocumentation","src":"25884:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"a93df2a4","id":8733,"implemented":true,"kind":"function","modifiers":[{"id":8726,"kind":"modifierInvocation","modifierName":{"id":8725,"name":"authenticate","nameLocations":["26020:12:46"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"26020:12:46"},"nodeType":"ModifierInvocation","src":"26020:12:46"}],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"25936:35:46","nodeType":"FunctionDefinition","parameters":{"id":8724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8723,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"25980:29:46","nodeType":"VariableDeclaration","scope":8733,"src":"25972:37:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8722,"name":"uint256","nodeType":"ElementaryTypeName","src":"25972:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25971:39:46"},"returnParameters":{"id":8727,"nodeType":"ParameterList","parameters":[],"src":"26033:0:46"},"scope":9230,"src":"25927:190:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8749,"nodeType":"Block","src":"26280:168:46","statements":[{"expression":{"id":8743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8741,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7601,"src":"26290:33:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8742,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8735,"src":"26326:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26290:65:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8744,"nodeType":"ExpressionStatement","src":"26290:65:46"},{"eventCall":{"arguments":[{"id":8746,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8735,"src":"26411:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8745,"name":"GlobalProtocolYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1634,"src":"26371:39:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":8747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26371:70:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8748,"nodeType":"EmitStatement","src":"26366:75:46"}]},"id":8750,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8738,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8735,"src":"26249:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8739,"kind":"modifierInvocation","modifierName":{"id":8737,"name":"withValidYieldFee","nameLocations":["26231:17:46"],"nodeType":"IdentifierPath","referencedDeclaration":7691,"src":"26231:17:46"},"nodeType":"ModifierInvocation","src":"26231:48:46"}],"name":"_setGlobalProtocolYieldFeePercentage","nameLocation":"26132:36:46","nodeType":"FunctionDefinition","parameters":{"id":8736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8735,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"26186:29:46","nodeType":"VariableDeclaration","scope":8750,"src":"26178:37:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8734,"name":"uint256","nodeType":"ElementaryTypeName","src":"26178:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26168:53:46"},"returnParameters":{"id":8740,"nodeType":"ParameterList","parameters":[],"src":"26280:0:46"},"scope":9230,"src":"26123:325:46","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1897],"body":{"id":8772,"nodeType":"Block","src":"26699:87:46","statements":[{"expression":{"arguments":[{"id":8767,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8753,"src":"26738:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8768,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8755,"src":"26744:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":8769,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26774:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8766,"name":"_updatePoolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9170,"src":"26709:28:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26709:70:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8771,"nodeType":"ExpressionStatement","src":"26709:70:46"}]},"documentation":{"id":8751,"nodeType":"StructuredDocumentation","src":"26454:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"fd267f39","id":8773,"implemented":true,"kind":"function","modifiers":[{"id":8758,"kind":"modifierInvocation","modifierName":{"id":8757,"name":"authenticate","nameLocations":["26618:12:46"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"26618:12:46"},"nodeType":"ModifierInvocation","src":"26618:12:46"},{"arguments":[{"id":8760,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8755,"src":"26648:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8761,"kind":"modifierInvocation","modifierName":{"id":8759,"name":"withValidSwapFee","nameLocations":["26631:16:46"],"nodeType":"IdentifierPath","referencedDeclaration":7673,"src":"26631:16:46"},"nodeType":"ModifierInvocation","src":"26631:46:46"},{"arguments":[{"id":8763,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8753,"src":"26693:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8764,"kind":"modifierInvocation","modifierName":{"id":8762,"name":"withLatestFees","nameLocations":["26678:14:46"],"nodeType":"IdentifierPath","referencedDeclaration":7715,"src":"26678:14:46"},"nodeType":"ModifierInvocation","src":"26678:20:46"}],"name":"setProtocolSwapFeePercentage","nameLocation":"26506:28:46","nodeType":"FunctionDefinition","parameters":{"id":8756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8753,"mutability":"mutable","name":"pool","nameLocation":"26552:4:46","nodeType":"VariableDeclaration","scope":8773,"src":"26544:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8752,"name":"address","nodeType":"ElementaryTypeName","src":"26544:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8755,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"26574:28:46","nodeType":"VariableDeclaration","scope":8773,"src":"26566:36:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8754,"name":"uint256","nodeType":"ElementaryTypeName","src":"26566:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26534:74:46"},"returnParameters":{"id":8765,"nodeType":"ParameterList","parameters":[],"src":"26699:0:46"},"scope":9230,"src":"26497:289:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1905],"body":{"id":8795,"nodeType":"Block","src":"27041:89:46","statements":[{"expression":{"arguments":[{"id":8790,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8776,"src":"27081:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8791,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8778,"src":"27087:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":8792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"27118:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8789,"name":"_updatePoolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9208,"src":"27051:29:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27051:72:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8794,"nodeType":"ExpressionStatement","src":"27051:72:46"}]},"documentation":{"id":8774,"nodeType":"StructuredDocumentation","src":"26792:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"abaa3356","id":8796,"implemented":true,"kind":"function","modifiers":[{"id":8781,"kind":"modifierInvocation","modifierName":{"id":8780,"name":"authenticate","nameLocations":["26958:12:46"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"26958:12:46"},"nodeType":"ModifierInvocation","src":"26958:12:46"},{"arguments":[{"id":8783,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8778,"src":"26989:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8784,"kind":"modifierInvocation","modifierName":{"id":8782,"name":"withValidYieldFee","nameLocations":["26971:17:46"],"nodeType":"IdentifierPath","referencedDeclaration":7691,"src":"26971:17:46"},"nodeType":"ModifierInvocation","src":"26971:48:46"},{"arguments":[{"id":8786,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8776,"src":"27035:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8787,"kind":"modifierInvocation","modifierName":{"id":8785,"name":"withLatestFees","nameLocations":["27020:14:46"],"nodeType":"IdentifierPath","referencedDeclaration":7715,"src":"27020:14:46"},"nodeType":"ModifierInvocation","src":"27020:20:46"}],"name":"setProtocolYieldFeePercentage","nameLocation":"26844:29:46","nodeType":"FunctionDefinition","parameters":{"id":8779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8776,"mutability":"mutable","name":"pool","nameLocation":"26891:4:46","nodeType":"VariableDeclaration","scope":8796,"src":"26883:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8775,"name":"address","nodeType":"ElementaryTypeName","src":"26883:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8778,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"26913:29:46","nodeType":"VariableDeclaration","scope":8796,"src":"26905:37:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8777,"name":"uint256","nodeType":"ElementaryTypeName","src":"26905:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26873:75:46"},"returnParameters":{"id":8788,"nodeType":"ParameterList","parameters":[],"src":"27041:0:46"},"scope":9230,"src":"26835:295:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1913],"body":{"id":8820,"nodeType":"Block","src":"27400:103:46","statements":[{"expression":{"arguments":[{"id":8814,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8799,"src":"27439:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8815,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8801,"src":"27445:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8816,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"27475:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8817,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27491:4:46","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7580,"src":"27475:20:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":8813,"name":"_setPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8908,"src":"27410:28:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_enum$_ProtocolFeeType_$7582_$returns$__$","typeString":"function (address,uint256,enum ProtocolFeeController.ProtocolFeeType)"}},"id":8818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27410:86:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8819,"nodeType":"ExpressionStatement","src":"27410:86:46"}]},"documentation":{"id":8797,"nodeType":"StructuredDocumentation","src":"27136:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"1377c16c","id":8821,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8804,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8799,"src":"27319:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8805,"kind":"modifierInvocation","modifierName":{"id":8803,"name":"onlyPoolCreator","nameLocations":["27303:15:46"],"nodeType":"IdentifierPath","referencedDeclaration":7655,"src":"27303:15:46"},"nodeType":"ModifierInvocation","src":"27303:21:46"},{"arguments":[{"id":8807,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8801,"src":"27349:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8808,"kind":"modifierInvocation","modifierName":{"id":8806,"name":"withValidPoolCreatorFee","nameLocations":["27325:23:46"],"nodeType":"IdentifierPath","referencedDeclaration":7705,"src":"27325:23:46"},"nodeType":"ModifierInvocation","src":"27325:53:46"},{"arguments":[{"id":8810,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8799,"src":"27394:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8811,"kind":"modifierInvocation","modifierName":{"id":8809,"name":"withLatestFees","nameLocations":["27379:14:46"],"nodeType":"IdentifierPath","referencedDeclaration":7715,"src":"27379:14:46"},"nodeType":"ModifierInvocation","src":"27379:20:46"}],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"27188:31:46","nodeType":"FunctionDefinition","parameters":{"id":8802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8799,"mutability":"mutable","name":"pool","nameLocation":"27237:4:46","nodeType":"VariableDeclaration","scope":8821,"src":"27229:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8798,"name":"address","nodeType":"ElementaryTypeName","src":"27229:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8801,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"27259:28:46","nodeType":"VariableDeclaration","scope":8821,"src":"27251:36:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8800,"name":"uint256","nodeType":"ElementaryTypeName","src":"27251:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27219:74:46"},"returnParameters":{"id":8812,"nodeType":"ParameterList","parameters":[],"src":"27400:0:46"},"scope":9230,"src":"27179:324:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1921],"body":{"id":8845,"nodeType":"Block","src":"27776:105:46","statements":[{"expression":{"arguments":[{"id":8839,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8824,"src":"27815:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8840,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8826,"src":"27821:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8841,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"27852:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8842,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27868:5:46","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":7581,"src":"27852:21:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":8838,"name":"_setPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8908,"src":"27786:28:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_enum$_ProtocolFeeType_$7582_$returns$__$","typeString":"function (address,uint256,enum ProtocolFeeController.ProtocolFeeType)"}},"id":8843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27786:88:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8844,"nodeType":"ExpressionStatement","src":"27786:88:46"}]},"documentation":{"id":8822,"nodeType":"StructuredDocumentation","src":"27509:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"3af52712","id":8846,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8829,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8824,"src":"27694:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8830,"kind":"modifierInvocation","modifierName":{"id":8828,"name":"onlyPoolCreator","nameLocations":["27678:15:46"],"nodeType":"IdentifierPath","referencedDeclaration":7655,"src":"27678:15:46"},"nodeType":"ModifierInvocation","src":"27678:21:46"},{"arguments":[{"id":8832,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8826,"src":"27724:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8833,"kind":"modifierInvocation","modifierName":{"id":8831,"name":"withValidPoolCreatorFee","nameLocations":["27700:23:46"],"nodeType":"IdentifierPath","referencedDeclaration":7705,"src":"27700:23:46"},"nodeType":"ModifierInvocation","src":"27700:54:46"},{"arguments":[{"id":8835,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8824,"src":"27770:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8836,"kind":"modifierInvocation","modifierName":{"id":8834,"name":"withLatestFees","nameLocations":["27755:14:46"],"nodeType":"IdentifierPath","referencedDeclaration":7715,"src":"27755:14:46"},"nodeType":"ModifierInvocation","src":"27755:20:46"}],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"27561:32:46","nodeType":"FunctionDefinition","parameters":{"id":8827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8824,"mutability":"mutable","name":"pool","nameLocation":"27611:4:46","nodeType":"VariableDeclaration","scope":8846,"src":"27603:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8823,"name":"address","nodeType":"ElementaryTypeName","src":"27603:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8826,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"27633:29:46","nodeType":"VariableDeclaration","scope":8846,"src":"27625:37:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8825,"name":"uint256","nodeType":"ElementaryTypeName","src":"27625:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27593:75:46"},"returnParameters":{"id":8837,"nodeType":"ParameterList","parameters":[],"src":"27776:0:46"},"scope":9230,"src":"27552:329:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8907,"nodeType":"Block","src":"28037:900:46","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":8859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8856,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8853,"src":"28133:7:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":8857,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"28144:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8858,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28160:4:46","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7580,"src":"28144:20:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"28133:31:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8905,"nodeType":"Block","src":"28549:382:46","statements":[{"expression":{"id":8887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8883,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7623,"src":"28563:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8885,"indexExpression":{"id":8884,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8848,"src":"28595:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28563:37:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8886,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8850,"src":"28603:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28563:64:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8888,"nodeType":"ExpressionStatement","src":"28563:64:46"},{"expression":{"arguments":[{"id":8892,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8848,"src":"28770:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":8894,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8848,"src":"28803:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":8895,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"28809:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8896,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28825:5:46","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":7581,"src":"28809:21:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":8893,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8385,"src":"28776:26:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$7582_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":8897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28776:55:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8889,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"28729:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":8891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28736:33:46","memberName":"updateAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2689,"src":"28729:40:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":8898,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28729:103:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8899,"nodeType":"ExpressionStatement","src":"28729:103:46"},{"eventCall":{"arguments":[{"id":8901,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8848,"src":"28889:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8902,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8850,"src":"28895:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8900,"name":"PoolCreatorYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1662,"src":"28852:36:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":8903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28852:68:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8904,"nodeType":"EmitStatement","src":"28847:73:46"}]},"id":8906,"nodeType":"IfStatement","src":"28129:802:46","trueBody":{"id":8882,"nodeType":"Block","src":"28166:377:46","statements":[{"expression":{"id":8864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8860,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7619,"src":"28180:30:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8862,"indexExpression":{"id":8861,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8848,"src":"28211:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28180:36:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8863,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8850,"src":"28219:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28180:63:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8865,"nodeType":"ExpressionStatement","src":"28180:63:46"},{"expression":{"arguments":[{"id":8869,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8848,"src":"28384:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":8871,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8848,"src":"28417:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":8872,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"28423:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8873,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28439:4:46","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7580,"src":"28423:20:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":8870,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8385,"src":"28390:26:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$7582_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":8874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28390:54:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8866,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"28344:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":8868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28351:32:46","memberName":"updateAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2681,"src":"28344:39:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":8875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28344:101:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8876,"nodeType":"ExpressionStatement","src":"28344:101:46"},{"eventCall":{"arguments":[{"id":8878,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8848,"src":"28501:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8879,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8850,"src":"28507:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8877,"name":"PoolCreatorSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1655,"src":"28465:35:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":8880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28465:67:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8881,"nodeType":"EmitStatement","src":"28460:72:46"}]}}]},"id":8908,"implemented":true,"kind":"function","modifiers":[],"name":"_setPoolCreatorFeePercentage","nameLocation":"27896:28:46","nodeType":"FunctionDefinition","parameters":{"id":8854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8848,"mutability":"mutable","name":"pool","nameLocation":"27942:4:46","nodeType":"VariableDeclaration","scope":8908,"src":"27934:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8847,"name":"address","nodeType":"ElementaryTypeName","src":"27934:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8850,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"27964:24:46","nodeType":"VariableDeclaration","scope":8908,"src":"27956:32:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8849,"name":"uint256","nodeType":"ElementaryTypeName","src":"27956:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8853,"mutability":"mutable","name":"feeType","nameLocation":"28014:7:46","nodeType":"VariableDeclaration","scope":8908,"src":"27998:23:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":8852,"nodeType":"UserDefinedTypeName","pathNode":{"id":8851,"name":"ProtocolFeeType","nameLocations":["27998:15:46"],"nodeType":"IdentifierPath","referencedDeclaration":7582,"src":"27998:15:46"},"referencedDeclaration":7582,"src":"27998:15:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"}],"src":"27924:103:46"},"returnParameters":{"id":8855,"nodeType":"ParameterList","parameters":[],"src":"28037:0:46"},"scope":9230,"src":"27887:1050:46","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1929],"body":{"id":8954,"nodeType":"Block","src":"29071:258:46","statements":[{"assignments":[8922,8924],"declarations":[{"constant":false,"id":8922,"mutability":"mutable","name":"poolTokens","nameLocation":"29098:10:46","nodeType":"VariableDeclaration","scope":8954,"src":"29082:26:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":8920,"nodeType":"UserDefinedTypeName","pathNode":{"id":8919,"name":"IERC20","nameLocations":["29082:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"29082:6:46"},"referencedDeclaration":10576,"src":"29082:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":8921,"nodeType":"ArrayTypeName","src":"29082:8:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":8924,"mutability":"mutable","name":"numTokens","nameLocation":"29118:9:46","nodeType":"VariableDeclaration","scope":8954,"src":"29110:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8923,"name":"uint256","nodeType":"ElementaryTypeName","src":"29110:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8928,"initialValue":{"arguments":[{"id":8926,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8911,"src":"29154:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8925,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8475,"src":"29131:22:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":8927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29131:28:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"29081:78:46"},{"body":{"id":8952,"nodeType":"Block","src":"29210:113:46","statements":[{"assignments":[8941],"declarations":[{"constant":false,"id":8941,"mutability":"mutable","name":"token","nameLocation":"29231:5:46","nodeType":"VariableDeclaration","scope":8952,"src":"29224:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":8940,"nodeType":"UserDefinedTypeName","pathNode":{"id":8939,"name":"IERC20","nameLocations":["29224:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"29224:6:46"},"referencedDeclaration":10576,"src":"29224:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":8945,"initialValue":{"baseExpression":{"id":8942,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8922,"src":"29239:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":8944,"indexExpression":{"id":8943,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8930,"src":"29250:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29239:13:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"29224:28:46"},{"expression":{"arguments":[{"id":8947,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8911,"src":"29289:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8948,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8913,"src":"29295:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8949,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8941,"src":"29306:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":8946,"name":"_withdrawProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9028,"src":"29267:21:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$10576_$returns$__$","typeString":"function (address,address,contract IERC20)"}},"id":8950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29267:45:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8951,"nodeType":"ExpressionStatement","src":"29267:45:46"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8933,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8930,"src":"29190:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8934,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8924,"src":"29194:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29190:13:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8953,"initializationExpression":{"assignments":[8930],"declarations":[{"constant":false,"id":8930,"mutability":"mutable","name":"i","nameLocation":"29183:1:46","nodeType":"VariableDeclaration","scope":8953,"src":"29175:9:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8929,"name":"uint256","nodeType":"ElementaryTypeName","src":"29175:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8932,"initialValue":{"hexValue":"30","id":8931,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29187:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"29175:13:46"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"29205:3:46","subExpression":{"id":8936,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8930,"src":"29207:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8938,"nodeType":"ExpressionStatement","src":"29205:3:46"},"nodeType":"ForStatement","src":"29170:153:46"}]},"documentation":{"id":8909,"nodeType":"StructuredDocumentation","src":"28943:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"cf7b287f","id":8955,"implemented":true,"kind":"function","modifiers":[{"id":8916,"kind":"modifierInvocation","modifierName":{"id":8915,"name":"authenticate","nameLocations":["29058:12:46"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"29058:12:46"},"nodeType":"ModifierInvocation","src":"29058:12:46"}],"name":"withdrawProtocolFees","nameLocation":"28995:20:46","nodeType":"FunctionDefinition","parameters":{"id":8914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8911,"mutability":"mutable","name":"pool","nameLocation":"29024:4:46","nodeType":"VariableDeclaration","scope":8955,"src":"29016:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8910,"name":"address","nodeType":"ElementaryTypeName","src":"29016:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8913,"mutability":"mutable","name":"recipient","nameLocation":"29038:9:46","nodeType":"VariableDeclaration","scope":8955,"src":"29030:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8912,"name":"address","nodeType":"ElementaryTypeName","src":"29030:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29015:33:46"},"returnParameters":{"id":8917,"nodeType":"ParameterList","parameters":[],"src":"29071:0:46"},"scope":9230,"src":"28986:343:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1940],"body":{"id":8981,"nodeType":"Block","src":"29485:217:46","statements":[{"expression":{"arguments":[{"id":8971,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8958,"src":"29628:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8972,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8963,"src":"29634:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"expression":{"id":8968,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"29588:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":8970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29595:32:46","memberName":"getPoolTokenCountAndIndexOfToken","nodeType":"MemberAccess","referencedDeclaration":3950,"src":"29588:39:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_contract$_IERC20_$10576_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,contract IERC20) view external returns (uint256,uint256)"}},"id":8973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29588:52:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":8974,"nodeType":"ExpressionStatement","src":"29588:52:46"},{"expression":{"arguments":[{"id":8976,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8958,"src":"29672:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8977,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8960,"src":"29678:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8978,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8963,"src":"29689:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":8975,"name":"_withdrawProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9028,"src":"29650:21:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$10576_$returns$__$","typeString":"function (address,address,contract IERC20)"}},"id":8979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29650:45:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8980,"nodeType":"ExpressionStatement","src":"29650:45:46"}]},"documentation":{"id":8956,"nodeType":"StructuredDocumentation","src":"29335:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"b53a70b2","id":8982,"implemented":true,"kind":"function","modifiers":[{"id":8966,"kind":"modifierInvocation","modifierName":{"id":8965,"name":"authenticate","nameLocations":["29472:12:46"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"29472:12:46"},"nodeType":"ModifierInvocation","src":"29472:12:46"}],"name":"withdrawProtocolFeesForToken","nameLocation":"29387:28:46","nodeType":"FunctionDefinition","parameters":{"id":8964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8958,"mutability":"mutable","name":"pool","nameLocation":"29424:4:46","nodeType":"VariableDeclaration","scope":8982,"src":"29416:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8957,"name":"address","nodeType":"ElementaryTypeName","src":"29416:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8960,"mutability":"mutable","name":"recipient","nameLocation":"29438:9:46","nodeType":"VariableDeclaration","scope":8982,"src":"29430:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8959,"name":"address","nodeType":"ElementaryTypeName","src":"29430:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8963,"mutability":"mutable","name":"token","nameLocation":"29456:5:46","nodeType":"VariableDeclaration","scope":8982,"src":"29449:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":8962,"nodeType":"UserDefinedTypeName","pathNode":{"id":8961,"name":"IERC20","nameLocations":["29449:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"29449:6:46"},"referencedDeclaration":10576,"src":"29449:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"29415:47:46"},"returnParameters":{"id":8967,"nodeType":"ParameterList","parameters":[],"src":"29485:0:46"},"scope":9230,"src":"29378:324:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9027,"nodeType":"Block","src":"29795:316:46","statements":[{"assignments":[8993],"declarations":[{"constant":false,"id":8993,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"29813:16:46","nodeType":"VariableDeclaration","scope":9027,"src":"29805:24:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8992,"name":"uint256","nodeType":"ElementaryTypeName","src":"29805:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8999,"initialValue":{"baseExpression":{"baseExpression":{"id":8994,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7630,"src":"29832:19:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":8996,"indexExpression":{"id":8995,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8984,"src":"29852:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29832:25:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":8998,"indexExpression":{"id":8997,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8989,"src":"29858:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29832:32:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29805:59:46"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9002,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9000,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8993,"src":"29878:16:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29897:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29878:20:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9026,"nodeType":"IfStatement","src":"29874:231:46","trueBody":{"id":9025,"nodeType":"Block","src":"29900:205:46","statements":[{"expression":{"id":9009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":9003,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7630,"src":"29914:19:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":9006,"indexExpression":{"id":9004,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8984,"src":"29934:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29914:25:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":9007,"indexExpression":{"id":9005,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8989,"src":"29940:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"29914:32:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":9008,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29949:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29914:36:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9010,"nodeType":"ExpressionStatement","src":"29914:36:46"},{"expression":{"arguments":[{"id":9014,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8986,"src":"29983:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9015,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8993,"src":"29994:16:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9011,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8989,"src":"29964:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":9013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29970:12:46","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10647,"src":"29964:18:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":9016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29964:47:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9017,"nodeType":"ExpressionStatement","src":"29964:47:46"},{"eventCall":{"arguments":[{"id":9019,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8984,"src":"30053:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9020,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8989,"src":"30059:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":9021,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8986,"src":"30066:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9022,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8993,"src":"30077:16:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9018,"name":"ProtocolFeesWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1694,"src":"30031:21:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,address,uint256)"}},"id":9023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30031:63:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9024,"nodeType":"EmitStatement","src":"30026:68:46"}]}}]},"id":9028,"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawProtocolFees","nameLocation":"29717:21:46","nodeType":"FunctionDefinition","parameters":{"id":8990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8984,"mutability":"mutable","name":"pool","nameLocation":"29747:4:46","nodeType":"VariableDeclaration","scope":9028,"src":"29739:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8983,"name":"address","nodeType":"ElementaryTypeName","src":"29739:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8986,"mutability":"mutable","name":"recipient","nameLocation":"29761:9:46","nodeType":"VariableDeclaration","scope":9028,"src":"29753:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8985,"name":"address","nodeType":"ElementaryTypeName","src":"29753:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8989,"mutability":"mutable","name":"token","nameLocation":"29779:5:46","nodeType":"VariableDeclaration","scope":9028,"src":"29772:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":8988,"nodeType":"UserDefinedTypeName","pathNode":{"id":8987,"name":"IERC20","nameLocations":["29772:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"29772:6:46"},"referencedDeclaration":10576,"src":"29772:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"29738:47:46"},"returnParameters":{"id":8991,"nodeType":"ParameterList","parameters":[],"src":"29795:0:46"},"scope":9230,"src":"29708:403:46","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1948],"body":{"id":9044,"nodeType":"Block","src":"30257:58:46","statements":[{"expression":{"arguments":[{"id":9040,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9031,"src":"30292:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9041,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9033,"src":"30298:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9039,"name":"_withdrawPoolCreatorFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9132,"src":"30267:24:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30267:41:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9043,"nodeType":"ExpressionStatement","src":"30267:41:46"}]},"documentation":{"id":9029,"nodeType":"StructuredDocumentation","src":"30117:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"f7061445","id":9045,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":9036,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9031,"src":"30251:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":9037,"kind":"modifierInvocation","modifierName":{"id":9035,"name":"onlyPoolCreator","nameLocations":["30235:15:46"],"nodeType":"IdentifierPath","referencedDeclaration":7655,"src":"30235:15:46"},"nodeType":"ModifierInvocation","src":"30235:21:46"}],"name":"withdrawPoolCreatorFees","nameLocation":"30169:23:46","nodeType":"FunctionDefinition","parameters":{"id":9034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9031,"mutability":"mutable","name":"pool","nameLocation":"30201:4:46","nodeType":"VariableDeclaration","scope":9045,"src":"30193:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9030,"name":"address","nodeType":"ElementaryTypeName","src":"30193:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9033,"mutability":"mutable","name":"recipient","nameLocation":"30215:9:46","nodeType":"VariableDeclaration","scope":9045,"src":"30207:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9032,"name":"address","nodeType":"ElementaryTypeName","src":"30207:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30192:33:46"},"returnParameters":{"id":9038,"nodeType":"ParameterList","parameters":[],"src":"30257:0:46"},"scope":9230,"src":"30160:155:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1954],"body":{"id":9058,"nodeType":"Block","src":"30420:70:46","statements":[{"expression":{"arguments":[{"id":9052,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9048,"src":"30455:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":9054,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9048,"src":"30477:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9053,"name":"_getPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8494,"src":"30461:15:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":9055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30461:21:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9051,"name":"_withdrawPoolCreatorFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9132,"src":"30430:24:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30430:53:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9057,"nodeType":"ExpressionStatement","src":"30430:53:46"}]},"documentation":{"id":9046,"nodeType":"StructuredDocumentation","src":"30321:38:46","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"52f125f0","id":9059,"implemented":true,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"30373:23:46","nodeType":"FunctionDefinition","parameters":{"id":9049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9048,"mutability":"mutable","name":"pool","nameLocation":"30405:4:46","nodeType":"VariableDeclaration","scope":9059,"src":"30397:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9047,"name":"address","nodeType":"ElementaryTypeName","src":"30397:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30396:14:46"},"returnParameters":{"id":9050,"nodeType":"ParameterList","parameters":[],"src":"30420:0:46"},"scope":9230,"src":"30364:126:46","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9131,"nodeType":"Block","src":"30571:541:46","statements":[{"assignments":[9070,9072],"declarations":[{"constant":false,"id":9070,"mutability":"mutable","name":"poolTokens","nameLocation":"30598:10:46","nodeType":"VariableDeclaration","scope":9131,"src":"30582:26:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":9068,"nodeType":"UserDefinedTypeName","pathNode":{"id":9067,"name":"IERC20","nameLocations":["30582:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"30582:6:46"},"referencedDeclaration":10576,"src":"30582:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":9069,"nodeType":"ArrayTypeName","src":"30582:8:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":9072,"mutability":"mutable","name":"numTokens","nameLocation":"30618:9:46","nodeType":"VariableDeclaration","scope":9131,"src":"30610:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9071,"name":"uint256","nodeType":"ElementaryTypeName","src":"30610:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9076,"initialValue":{"arguments":[{"id":9074,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9061,"src":"30654:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9073,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8475,"src":"30631:22:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":9075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30631:28:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"30581:78:46"},{"body":{"id":9129,"nodeType":"Block","src":"30710:396:46","statements":[{"assignments":[9089],"declarations":[{"constant":false,"id":9089,"mutability":"mutable","name":"token","nameLocation":"30731:5:46","nodeType":"VariableDeclaration","scope":9129,"src":"30724:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":9088,"nodeType":"UserDefinedTypeName","pathNode":{"id":9087,"name":"IERC20","nameLocations":["30724:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"30724:6:46"},"referencedDeclaration":10576,"src":"30724:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":9093,"initialValue":{"baseExpression":{"id":9090,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9070,"src":"30739:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":9092,"indexExpression":{"id":9091,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9078,"src":"30750:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30739:13:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"30724:28:46"},{"assignments":[9095],"declarations":[{"constant":false,"id":9095,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"30775:16:46","nodeType":"VariableDeclaration","scope":9129,"src":"30767:24:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9094,"name":"uint256","nodeType":"ElementaryTypeName","src":"30767:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9101,"initialValue":{"baseExpression":{"baseExpression":{"id":9096,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7637,"src":"30794:22:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":9098,"indexExpression":{"id":9097,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9061,"src":"30817:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30794:28:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":9100,"indexExpression":{"id":9099,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9089,"src":"30823:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30794:35:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30767:62:46"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9102,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9095,"src":"30847:16:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30866:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30847:20:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9128,"nodeType":"IfStatement","src":"30843:253:46","trueBody":{"id":9127,"nodeType":"Block","src":"30869:227:46","statements":[{"expression":{"id":9111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":9105,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7637,"src":"30887:22:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":9108,"indexExpression":{"id":9106,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9061,"src":"30910:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30887:28:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":9109,"indexExpression":{"id":9107,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9089,"src":"30916:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"30887:35:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":9110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30925:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30887:39:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9112,"nodeType":"ExpressionStatement","src":"30887:39:46"},{"expression":{"arguments":[{"id":9116,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9063,"src":"30963:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9117,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9095,"src":"30974:16:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9113,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9089,"src":"30944:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":9115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30950:12:46","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10647,"src":"30944:18:46","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":9118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30944:47:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9119,"nodeType":"ExpressionStatement","src":"30944:47:46"},{"eventCall":{"arguments":[{"id":9121,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9061,"src":"31040:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9122,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9089,"src":"31046:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":9123,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9063,"src":"31053:9:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9124,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9095,"src":"31064:16:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9120,"name":"PoolCreatorFeesWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1706,"src":"31015:24:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,address,uint256)"}},"id":9125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31015:66:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9126,"nodeType":"EmitStatement","src":"31010:71:46"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9081,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9078,"src":"30690:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":9082,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9072,"src":"30694:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30690:13:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9130,"initializationExpression":{"assignments":[9078],"declarations":[{"constant":false,"id":9078,"mutability":"mutable","name":"i","nameLocation":"30683:1:46","nodeType":"VariableDeclaration","scope":9130,"src":"30675:9:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9077,"name":"uint256","nodeType":"ElementaryTypeName","src":"30675:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9080,"initialValue":{"hexValue":"30","id":9079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30687:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"30675:13:46"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":9085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"30705:3:46","subExpression":{"id":9084,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9078,"src":"30707:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9086,"nodeType":"ExpressionStatement","src":"30705:3:46"},"nodeType":"ForStatement","src":"30670:436:46"}]},"id":9132,"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawPoolCreatorFees","nameLocation":"30505:24:46","nodeType":"FunctionDefinition","parameters":{"id":9064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9061,"mutability":"mutable","name":"pool","nameLocation":"30538:4:46","nodeType":"VariableDeclaration","scope":9132,"src":"30530:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9060,"name":"address","nodeType":"ElementaryTypeName","src":"30530:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9063,"mutability":"mutable","name":"recipient","nameLocation":"30552:9:46","nodeType":"VariableDeclaration","scope":9132,"src":"30544:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9062,"name":"address","nodeType":"ElementaryTypeName","src":"30544:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30529:33:46"},"returnParameters":{"id":9065,"nodeType":"ParameterList","parameters":[],"src":"30571:0:46"},"scope":9230,"src":"30496:616:46","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":9169,"nodeType":"Block","src":"31352:771:46","statements":[{"expression":{"id":9151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":9142,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7606,"src":"31667:31:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":9144,"indexExpression":{"id":9143,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9135,"src":"31699:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"31667:37:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9146,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9137,"src":"31750:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31779:8:46","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15026,"src":"31750:37:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":9148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31750:39:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":9149,"name":"isOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9139,"src":"31815:10:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":9145,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7588,"src":"31707:13:46","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$7588_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":9150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["31735:13:46","31803:10:46"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"31707:129:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"31667:169:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":9152,"nodeType":"ExpressionStatement","src":"31667:169:46"},{"expression":{"arguments":[{"id":9156,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9135,"src":"31971:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":9158,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9135,"src":"32004:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":9159,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"32010:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":9160,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32026:4:46","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7580,"src":"32010:20:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":9157,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8385,"src":"31977:26:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$7582_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":9161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31977:54:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9153,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"31931:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":9155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31938:32:46","memberName":"updateAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2681,"src":"31931:39:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":9162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31931:101:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9163,"nodeType":"ExpressionStatement","src":"31931:101:46"},{"eventCall":{"arguments":[{"id":9165,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9135,"src":"32081:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9166,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9137,"src":"32087:28:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9164,"name":"ProtocolSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1641,"src":"32048:32:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":9167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32048:68:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9168,"nodeType":"EmitStatement","src":"32043:73:46"}]},"documentation":{"id":9133,"nodeType":"StructuredDocumentation","src":"31118:114:46","text":"@dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage."},"id":9170,"implemented":true,"kind":"function","modifiers":[],"name":"_updatePoolSwapFeePercentage","nameLocation":"31246:28:46","nodeType":"FunctionDefinition","parameters":{"id":9140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9135,"mutability":"mutable","name":"pool","nameLocation":"31283:4:46","nodeType":"VariableDeclaration","scope":9170,"src":"31275:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9134,"name":"address","nodeType":"ElementaryTypeName","src":"31275:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9137,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"31297:28:46","nodeType":"VariableDeclaration","scope":9170,"src":"31289:36:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9136,"name":"uint256","nodeType":"ElementaryTypeName","src":"31289:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9139,"mutability":"mutable","name":"isOverride","nameLocation":"31332:10:46","nodeType":"VariableDeclaration","scope":9170,"src":"31327:15:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9138,"name":"bool","nodeType":"ElementaryTypeName","src":"31327:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"31274:69:46"},"returnParameters":{"id":9141,"nodeType":"ParameterList","parameters":[],"src":"31352:0:46"},"scope":9230,"src":"31237:886:46","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":9207,"nodeType":"Block","src":"32395:767:46","statements":[{"expression":{"id":9189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":9180,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7611,"src":"32699:32:46","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7588_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":9182,"indexExpression":{"id":9181,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9173,"src":"32732:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"32699:38:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9184,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9175,"src":"32783:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32813:8:46","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15026,"src":"32783:38:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":9186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32783:40:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":9187,"name":"isOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9177,"src":"32849:10:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":9183,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7588,"src":"32740:13:46","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$7588_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":9188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["32768:13:46","32837:10:46"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"32740:130:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"32699:171:46","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7588_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":9190,"nodeType":"ExpressionStatement","src":"32699:171:46"},{"expression":{"arguments":[{"id":9194,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9173,"src":"33007:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":9196,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9173,"src":"33040:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":9197,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7582,"src":"33046:15:46","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7582_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":9198,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"33062:5:46","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":7581,"src":"33046:21:46","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7582","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":9195,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8385,"src":"33013:26:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$7582_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":9199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33013:55:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9191,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"32966:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":9193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32973:33:46","memberName":"updateAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2689,"src":"32966:40:46","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":9200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32966:103:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9201,"nodeType":"ExpressionStatement","src":"32966:103:46"},{"eventCall":{"arguments":[{"id":9203,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9173,"src":"33119:4:46","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9204,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9175,"src":"33125:29:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9202,"name":"ProtocolYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1648,"src":"33085:33:46","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":9205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33085:70:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9206,"nodeType":"EmitStatement","src":"33080:75:46"}]},"documentation":{"id":9171,"nodeType":"StructuredDocumentation","src":"32129:114:46","text":"@dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage."},"id":9208,"implemented":true,"kind":"function","modifiers":[],"name":"_updatePoolYieldFeePercentage","nameLocation":"32257:29:46","nodeType":"FunctionDefinition","parameters":{"id":9178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9173,"mutability":"mutable","name":"pool","nameLocation":"32304:4:46","nodeType":"VariableDeclaration","scope":9208,"src":"32296:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9172,"name":"address","nodeType":"ElementaryTypeName","src":"32296:7:46","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9175,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"32326:29:46","nodeType":"VariableDeclaration","scope":9208,"src":"32318:37:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9174,"name":"uint256","nodeType":"ElementaryTypeName","src":"32318:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9177,"mutability":"mutable","name":"isOverride","nameLocation":"32370:10:46","nodeType":"VariableDeclaration","scope":9208,"src":"32365:15:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9176,"name":"bool","nodeType":"ElementaryTypeName","src":"32365:4:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"32286:100:46"},"returnParameters":{"id":9179,"nodeType":"ParameterList","parameters":[],"src":"32395:0:46"},"scope":9230,"src":"32248:914:46","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":9228,"nodeType":"Block","src":"33235:682:46","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9213,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9210,"src":"33770:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9214,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4302,"src":"33786:18:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33770:34:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9216,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"33769:36:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9217,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4302,"src":"33808:18:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33769:57:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9219,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9210,"src":"33830:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33769:74:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9227,"nodeType":"IfStatement","src":"33765:146:46","trueBody":{"id":9226,"nodeType":"Block","src":"33845:66:46","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9221,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"33866:12:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3202_$","typeString":"type(contract IVaultErrors)"}},"id":9223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33879:19:46","memberName":"FeePrecisionTooHigh","nodeType":"MemberAccess","referencedDeclaration":3050,"src":"33866:32:46","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33866:34:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9225,"nodeType":"RevertStatement","src":"33859:41:46"}]}}]},"id":9229,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidPrecision","nameLocation":"33177:21:46","nodeType":"FunctionDefinition","parameters":{"id":9211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9210,"mutability":"mutable","name":"feePercentage","nameLocation":"33207:13:46","nodeType":"VariableDeclaration","scope":9229,"src":"33199:21:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9209,"name":"uint256","nodeType":"ElementaryTypeName","src":"33199:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33198:23:46"},"returnParameters":{"id":9212,"nodeType":"ParameterList","parameters":[],"src":"33235:0:46"},"scope":9230,"src":"33168:749:46","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":9231,"src":"3120:30799:46","usedErrors":[5,1736,1739,1744,1751,1754,3050,3074,5007,6956,7355,7642,7645,10614,14337],"usedEvents":[1629,1634,1641,1648,1655,1662,1672,1682,1694,1706,1715,1724,1733]}],"src":"46:33874:46"},"id":46},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","exportedSymbols":{"CommonAuthentication":[7535],"IAuthorizer":[1341],"IVault":[2545],"SingletonAuthentication":[9289]},"id":9290,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":9232,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:47"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":9234,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9290,"sourceUnit":1342,"src":"72:91:47","symbolAliases":[{"foreign":{"id":9233,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"81:11:47","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":9236,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9290,"sourceUnit":2546,"src":"164:81:47","symbolAliases":[{"foreign":{"id":9235,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"173:6:47","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol","file":"./CommonAuthentication.sol","id":9238,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9290,"sourceUnit":7536,"src":"247:66:47","symbolAliases":[{"foreign":{"id":9237,"name":"CommonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7535,"src":"256:20:47","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9240,"name":"CommonAuthentication","nameLocations":["735:20:47"],"nodeType":"IdentifierPath","referencedDeclaration":7535,"src":"735:20:47"},"id":9241,"nodeType":"InheritanceSpecifier","src":"735:20:47"}],"canonicalName":"SingletonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":9239,"nodeType":"StructuredDocumentation","src":"315:374:47","text":" @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n function name."},"fullyImplemented":true,"id":9289,"linearizedBaseContracts":[9289,7535,4385,14],"name":"SingletonAuthentication","nameLocation":"708:23:47","nodeType":"ContractDefinition","nodes":[{"body":{"id":9263,"nodeType":"Block","src":"932:64:47","statements":[]},"id":9264,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":9247,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9244,"src":"883:5:47","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":9256,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"922:4:47","typeDescriptions":{"typeIdentifier":"t_contract$_SingletonAuthentication_$9289","typeString":"contract SingletonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SingletonAuthentication_$9289","typeString":"contract SingletonAuthentication"}],"id":9255,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"914:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9254,"name":"address","nodeType":"ElementaryTypeName","src":"914:7:47","typeDescriptions":{}}},"id":9257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"914:13:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9253,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"906:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":9252,"name":"uint160","nodeType":"ElementaryTypeName","src":"906:7:47","typeDescriptions":{}}},"id":9258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"906:22:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":9251,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"898:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":9250,"name":"uint256","nodeType":"ElementaryTypeName","src":"898:7:47","typeDescriptions":{}}},"id":9259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"898:31:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9249,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"890:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":9248,"name":"bytes32","nodeType":"ElementaryTypeName","src":"890:7:47","typeDescriptions":{}}},"id":9260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"890:40:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":9261,"kind":"baseConstructorSpecifier","modifierName":{"id":9246,"name":"CommonAuthentication","nameLocations":["862:20:47"],"nodeType":"IdentifierPath","referencedDeclaration":7535,"src":"862:20:47"},"nodeType":"ModifierInvocation","src":"862:69:47"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9244,"mutability":"mutable","name":"vault","nameLocation":"855:5:47","nodeType":"VariableDeclaration","scope":9264,"src":"848:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":9243,"nodeType":"UserDefinedTypeName","pathNode":{"id":9242,"name":"IVault","nameLocations":["848:6:47"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"848:6:47"},"referencedDeclaration":2545,"src":"848:6:47","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"847:14:47"},"returnParameters":{"id":9262,"nodeType":"ParameterList","parameters":[],"src":"932:0:47"},"scope":9289,"src":"836:160:47","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9274,"nodeType":"Block","src":"1333:35:47","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9271,"name":"_getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7417,"src":"1350:9:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$2545_$","typeString":"function () view returns (contract IVault)"}},"id":9272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1350:11:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"functionReturnParameters":9270,"id":9273,"nodeType":"Return","src":"1343:18:47"}]},"documentation":{"id":9265,"nodeType":"StructuredDocumentation","src":"1002:269:47","text":" @notice Get the address of the Balancer Vault.\n @dev This function is virtual to allow for overriding in derived contracts which also inherits contracts with\n `getVault()` definition.\n @return vault An interface pointer to the Vault"},"functionSelector":"8d928af8","id":9275,"implemented":true,"kind":"function","modifiers":[],"name":"getVault","nameLocation":"1285:8:47","nodeType":"FunctionDefinition","parameters":{"id":9266,"nodeType":"ParameterList","parameters":[],"src":"1293:2:47"},"returnParameters":{"id":9270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9269,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9275,"src":"1325:6:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":9268,"nodeType":"UserDefinedTypeName","pathNode":{"id":9267,"name":"IVault","nameLocations":["1325:6:47"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1325:6:47"},"referencedDeclaration":2545,"src":"1325:6:47","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1324:8:47"},"scope":9289,"src":"1276:92:47","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":9287,"nodeType":"Block","src":"1564:50:47","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9282,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9275,"src":"1581:8:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$2545_$","typeString":"function () view returns (contract IVault)"}},"id":9283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1581:10:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":9284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1592:13:47","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":3859,"src":"1581:24:47","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1341_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":9285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1581:26:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"functionReturnParameters":9281,"id":9286,"nodeType":"Return","src":"1574:33:47"}]},"documentation":{"id":9276,"nodeType":"StructuredDocumentation","src":"1374:126:47","text":" @notice Get the address of the Authorizer.\n @return authorizer An interface pointer to the Authorizer"},"functionSelector":"aaabadc5","id":9288,"implemented":true,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"1514:13:47","nodeType":"FunctionDefinition","parameters":{"id":9277,"nodeType":"ParameterList","parameters":[],"src":"1527:2:47"},"returnParameters":{"id":9281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9280,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9288,"src":"1551:11:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"},"typeName":{"id":9279,"nodeType":"UserDefinedTypeName","pathNode":{"id":9278,"name":"IAuthorizer","nameLocations":["1551:11:47"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"1551:11:47"},"referencedDeclaration":1341,"src":"1551:11:47","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"1550:13:47"},"scope":9289,"src":"1505:109:47","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":9290,"src":"690:926:47","usedErrors":[5,7355],"usedEvents":[]}],"src":"46:1571:47"},"id":47},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","exportedSymbols":{"IVault":[2545],"IVaultErrors":[3202],"VaultGuard":[9338]},"id":9339,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":9291,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:48"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":9293,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9339,"sourceUnit":3203,"src":"72:93:48","symbolAliases":[{"foreign":{"id":9292,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"81:12:48","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":9295,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9339,"sourceUnit":2546,"src":"166:81:48","symbolAliases":[{"foreign":{"id":9294,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"175:6:48","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"VaultGuard","contractDependencies":[],"contractKind":"contract","documentation":{"id":9296,"nodeType":"StructuredDocumentation","src":"249:59:48","text":"@notice Contract that shares the modifier `onlyVault`."},"fullyImplemented":true,"id":9338,"linearizedBaseContracts":[9338],"name":"VaultGuard","nameLocation":"317:10:48","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":9299,"mutability":"immutable","name":"_vault","nameLocation":"360:6:48","nodeType":"VariableDeclaration","scope":9338,"src":"334:32:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":9298,"nodeType":"UserDefinedTypeName","pathNode":{"id":9297,"name":"IVault","nameLocations":["334:6:48"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"334:6:48"},"referencedDeclaration":2545,"src":"334:6:48","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"body":{"id":9309,"nodeType":"Block","src":"399:31:48","statements":[{"expression":{"id":9307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9305,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"409:6:48","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9306,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9302,"src":"418:5:48","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"src":"409:14:48","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":9308,"nodeType":"ExpressionStatement","src":"409:14:48"}]},"id":9310,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9302,"mutability":"mutable","name":"vault","nameLocation":"392:5:48","nodeType":"VariableDeclaration","scope":9310,"src":"385:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":9301,"nodeType":"UserDefinedTypeName","pathNode":{"id":9300,"name":"IVault","nameLocations":["385:6:48"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"385:6:48"},"referencedDeclaration":2545,"src":"385:6:48","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"384:14:48"},"returnParameters":{"id":9304,"nodeType":"ParameterList","parameters":[],"src":"399:0:48"},"scope":9338,"src":"373:57:48","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":9316,"nodeType":"Block","src":"457:46:48","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9312,"name":"_ensureOnlyVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9337,"src":"467:16:48","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":9313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"467:18:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9314,"nodeType":"ExpressionStatement","src":"467:18:48"},{"id":9315,"nodeType":"PlaceholderStatement","src":"495:1:48"}]},"id":9317,"name":"onlyVault","nameLocation":"445:9:48","nodeType":"ModifierDefinition","parameters":{"id":9311,"nodeType":"ParameterList","parameters":[],"src":"454:2:48"},"src":"436:67:48","virtual":false,"visibility":"internal"},{"body":{"id":9336,"nodeType":"Block","src":"550:124:48","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":9320,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"564:3:48","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":9321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"568:6:48","memberName":"sender","nodeType":"MemberAccess","src":"564:10:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":9324,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"586:6:48","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}],"id":9323,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"578:7:48","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9322,"name":"address","nodeType":"ElementaryTypeName","src":"578:7:48","typeDescriptions":{}}},"id":9325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"578:15:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"564:29:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9335,"nodeType":"IfStatement","src":"560:108:48","trueBody":{"id":9334,"nodeType":"Block","src":"595:73:48","statements":[{"errorCall":{"arguments":[{"expression":{"id":9330,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"646:3:48","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":9331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"650:6:48","memberName":"sender","nodeType":"MemberAccess","src":"646:10:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9327,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"616:12:48","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3202_$","typeString":"type(contract IVaultErrors)"}},"id":9329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"629:16:48","memberName":"SenderIsNotVault","nodeType":"MemberAccess","referencedDeclaration":3074,"src":"616:29:48","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"616:41:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9333,"nodeType":"RevertStatement","src":"609:48:48"}]}}]},"id":9337,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureOnlyVault","nameLocation":"518:16:48","nodeType":"FunctionDefinition","parameters":{"id":9318,"nodeType":"ParameterList","parameters":[],"src":"534:2:48"},"returnParameters":{"id":9319,"nodeType":"ParameterList","parameters":[],"src":"550:0:48"},"scope":9338,"src":"509:165:48","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":9339,"src":"308:368:48","usedErrors":[],"usedEvents":[]}],"src":"46:631:48"},"id":48},"@openzeppelin/contracts/access/Ownable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","exportedSymbols":{"Context":[12366],"Ownable":[9486]},"id":9487,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9340,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"102:24:49"},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../utils/Context.sol","id":9342,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9487,"sourceUnit":12367,"src":"128:45:49","symbolAliases":[{"foreign":{"id":9341,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12366,"src":"136:7:49","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9344,"name":"Context","nameLocations":["692:7:49"],"nodeType":"IdentifierPath","referencedDeclaration":12366,"src":"692:7:49"},"id":9345,"nodeType":"InheritanceSpecifier","src":"692:7:49"}],"canonicalName":"Ownable","contractDependencies":[],"contractKind":"contract","documentation":{"id":9343,"nodeType":"StructuredDocumentation","src":"175:487:49","text":" @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n The initial owner is set to the address provided by the deployer. This can\n later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."},"fullyImplemented":true,"id":9486,"linearizedBaseContracts":[9486,12366],"name":"Ownable","nameLocation":"681:7:49","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":9347,"mutability":"mutable","name":"_owner","nameLocation":"722:6:49","nodeType":"VariableDeclaration","scope":9486,"src":"706:22:49","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9346,"name":"address","nodeType":"ElementaryTypeName","src":"706:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"documentation":{"id":9348,"nodeType":"StructuredDocumentation","src":"735:85:49","text":" @dev The caller account is not authorized to perform an operation."},"errorSelector":"118cdaa7","id":9352,"name":"OwnableUnauthorizedAccount","nameLocation":"831:26:49","nodeType":"ErrorDefinition","parameters":{"id":9351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9350,"mutability":"mutable","name":"account","nameLocation":"866:7:49","nodeType":"VariableDeclaration","scope":9352,"src":"858:15:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9349,"name":"address","nodeType":"ElementaryTypeName","src":"858:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"857:17:49"},"src":"825:50:49"},{"documentation":{"id":9353,"nodeType":"StructuredDocumentation","src":"881:82:49","text":" @dev The owner is not a valid owner account. (eg. `address(0)`)"},"errorSelector":"1e4fbdf7","id":9357,"name":"OwnableInvalidOwner","nameLocation":"974:19:49","nodeType":"ErrorDefinition","parameters":{"id":9356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9355,"mutability":"mutable","name":"owner","nameLocation":"1002:5:49","nodeType":"VariableDeclaration","scope":9357,"src":"994:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9354,"name":"address","nodeType":"ElementaryTypeName","src":"994:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"993:15:49"},"src":"968:41:49"},{"anonymous":false,"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":9363,"name":"OwnershipTransferred","nameLocation":"1021:20:49","nodeType":"EventDefinition","parameters":{"id":9362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9359,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"1058:13:49","nodeType":"VariableDeclaration","scope":9363,"src":"1042:29:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9358,"name":"address","nodeType":"ElementaryTypeName","src":"1042:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9361,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"1089:8:49","nodeType":"VariableDeclaration","scope":9363,"src":"1073:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9360,"name":"address","nodeType":"ElementaryTypeName","src":"1073:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1041:57:49"},"src":"1015:84:49"},{"body":{"id":9388,"nodeType":"Block","src":"1259:153:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9369,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9366,"src":"1273:12:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1297:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9371,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1289:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9370,"name":"address","nodeType":"ElementaryTypeName","src":"1289:7:49","typeDescriptions":{}}},"id":9373,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1289:10:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1273:26:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9383,"nodeType":"IfStatement","src":"1269:95:49","trueBody":{"id":9382,"nodeType":"Block","src":"1301:63:49","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":9378,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1350:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9377,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1342:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9376,"name":"address","nodeType":"ElementaryTypeName","src":"1342:7:49","typeDescriptions":{}}},"id":9379,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1342:10:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9375,"name":"OwnableInvalidOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9357,"src":"1322:19:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1322:31:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9381,"nodeType":"RevertStatement","src":"1315:38:49"}]}},{"expression":{"arguments":[{"id":9385,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9366,"src":"1392:12:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9384,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9485,"src":"1373:18:49","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1373:32:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9387,"nodeType":"ExpressionStatement","src":"1373:32:49"}]},"documentation":{"id":9364,"nodeType":"StructuredDocumentation","src":"1105:115:49","text":" @dev Initializes the contract setting the address provided by the deployer as the initial owner."},"id":9389,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9366,"mutability":"mutable","name":"initialOwner","nameLocation":"1245:12:49","nodeType":"VariableDeclaration","scope":9389,"src":"1237:20:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9365,"name":"address","nodeType":"ElementaryTypeName","src":"1237:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1236:22:49"},"returnParameters":{"id":9368,"nodeType":"ParameterList","parameters":[],"src":"1259:0:49"},"scope":9486,"src":"1225:187:49","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9396,"nodeType":"Block","src":"1521:41:49","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9392,"name":"_checkOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9423,"src":"1531:11:49","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":9393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1531:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9394,"nodeType":"ExpressionStatement","src":"1531:13:49"},{"id":9395,"nodeType":"PlaceholderStatement","src":"1554:1:49"}]},"documentation":{"id":9390,"nodeType":"StructuredDocumentation","src":"1418:77:49","text":" @dev Throws if called by any account other than the owner."},"id":9397,"name":"onlyOwner","nameLocation":"1509:9:49","nodeType":"ModifierDefinition","parameters":{"id":9391,"nodeType":"ParameterList","parameters":[],"src":"1518:2:49"},"src":"1500:62:49","virtual":false,"visibility":"internal"},{"body":{"id":9405,"nodeType":"Block","src":"1693:30:49","statements":[{"expression":{"id":9403,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9347,"src":"1710:6:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9402,"id":9404,"nodeType":"Return","src":"1703:13:49"}]},"documentation":{"id":9398,"nodeType":"StructuredDocumentation","src":"1568:65:49","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":9406,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"1647:5:49","nodeType":"FunctionDefinition","parameters":{"id":9399,"nodeType":"ParameterList","parameters":[],"src":"1652:2:49"},"returnParameters":{"id":9402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9401,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9406,"src":"1684:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9400,"name":"address","nodeType":"ElementaryTypeName","src":"1684:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1683:9:49"},"scope":9486,"src":"1638:85:49","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":9422,"nodeType":"Block","src":"1841:117:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":9410,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9406,"src":"1855:5:49","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1855:7:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":9412,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12348,"src":"1866:10:49","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1866:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1855:23:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9421,"nodeType":"IfStatement","src":"1851:101:49","trueBody":{"id":9420,"nodeType":"Block","src":"1880:72:49","statements":[{"errorCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":9416,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12348,"src":"1928:10:49","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1928:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9415,"name":"OwnableUnauthorizedAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9352,"src":"1901:26:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1901:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9419,"nodeType":"RevertStatement","src":"1894:47:49"}]}}]},"documentation":{"id":9407,"nodeType":"StructuredDocumentation","src":"1729:62:49","text":" @dev Throws if the sender is not the owner."},"id":9423,"implemented":true,"kind":"function","modifiers":[],"name":"_checkOwner","nameLocation":"1805:11:49","nodeType":"FunctionDefinition","parameters":{"id":9408,"nodeType":"ParameterList","parameters":[],"src":"1816:2:49"},"returnParameters":{"id":9409,"nodeType":"ParameterList","parameters":[],"src":"1841:0:49"},"scope":9486,"src":"1796:162:49","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":9436,"nodeType":"Block","src":"2347:47:49","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":9432,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2384:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9431,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2376:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9430,"name":"address","nodeType":"ElementaryTypeName","src":"2376:7:49","typeDescriptions":{}}},"id":9433,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2376:10:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9429,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9485,"src":"2357:18:49","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2357:30:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9435,"nodeType":"ExpressionStatement","src":"2357:30:49"}]},"documentation":{"id":9424,"nodeType":"StructuredDocumentation","src":"1964:324:49","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby disabling any functionality that is only available to the owner."},"functionSelector":"715018a6","id":9437,"implemented":true,"kind":"function","modifiers":[{"id":9427,"kind":"modifierInvocation","modifierName":{"id":9426,"name":"onlyOwner","nameLocations":["2337:9:49"],"nodeType":"IdentifierPath","referencedDeclaration":9397,"src":"2337:9:49"},"nodeType":"ModifierInvocation","src":"2337:9:49"}],"name":"renounceOwnership","nameLocation":"2302:17:49","nodeType":"FunctionDefinition","parameters":{"id":9425,"nodeType":"ParameterList","parameters":[],"src":"2319:2:49"},"returnParameters":{"id":9428,"nodeType":"ParameterList","parameters":[],"src":"2347:0:49"},"scope":9486,"src":"2293:101:49","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":9464,"nodeType":"Block","src":"2613:145:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9445,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9440,"src":"2627:8:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2647:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9447,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2639:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9446,"name":"address","nodeType":"ElementaryTypeName","src":"2639:7:49","typeDescriptions":{}}},"id":9449,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2639:10:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2627:22:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9459,"nodeType":"IfStatement","src":"2623:91:49","trueBody":{"id":9458,"nodeType":"Block","src":"2651:63:49","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":9454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2700:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9453,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2692:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9452,"name":"address","nodeType":"ElementaryTypeName","src":"2692:7:49","typeDescriptions":{}}},"id":9455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2692:10:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9451,"name":"OwnableInvalidOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9357,"src":"2672:19:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2672:31:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9457,"nodeType":"RevertStatement","src":"2665:38:49"}]}},{"expression":{"arguments":[{"id":9461,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9440,"src":"2742:8:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9460,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9485,"src":"2723:18:49","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2723:28:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9463,"nodeType":"ExpressionStatement","src":"2723:28:49"}]},"documentation":{"id":9438,"nodeType":"StructuredDocumentation","src":"2400:138:49","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":9465,"implemented":true,"kind":"function","modifiers":[{"id":9443,"kind":"modifierInvocation","modifierName":{"id":9442,"name":"onlyOwner","nameLocations":["2603:9:49"],"nodeType":"IdentifierPath","referencedDeclaration":9397,"src":"2603:9:49"},"nodeType":"ModifierInvocation","src":"2603:9:49"}],"name":"transferOwnership","nameLocation":"2552:17:49","nodeType":"FunctionDefinition","parameters":{"id":9441,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9440,"mutability":"mutable","name":"newOwner","nameLocation":"2578:8:49","nodeType":"VariableDeclaration","scope":9465,"src":"2570:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9439,"name":"address","nodeType":"ElementaryTypeName","src":"2570:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2569:18:49"},"returnParameters":{"id":9444,"nodeType":"ParameterList","parameters":[],"src":"2613:0:49"},"scope":9486,"src":"2543:215:49","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":9484,"nodeType":"Block","src":"2975:124:49","statements":[{"assignments":[9472],"declarations":[{"constant":false,"id":9472,"mutability":"mutable","name":"oldOwner","nameLocation":"2993:8:49","nodeType":"VariableDeclaration","scope":9484,"src":"2985:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9471,"name":"address","nodeType":"ElementaryTypeName","src":"2985:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9474,"initialValue":{"id":9473,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9347,"src":"3004:6:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2985:25:49"},{"expression":{"id":9477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9475,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9347,"src":"3020:6:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9476,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9468,"src":"3029:8:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3020:17:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9478,"nodeType":"ExpressionStatement","src":"3020:17:49"},{"eventCall":{"arguments":[{"id":9480,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9472,"src":"3073:8:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9481,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9468,"src":"3083:8:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9479,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9363,"src":"3052:20:49","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3052:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9483,"nodeType":"EmitStatement","src":"3047:45:49"}]},"documentation":{"id":9466,"nodeType":"StructuredDocumentation","src":"2764:143:49","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction."},"id":9485,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"2921:18:49","nodeType":"FunctionDefinition","parameters":{"id":9469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9468,"mutability":"mutable","name":"newOwner","nameLocation":"2948:8:49","nodeType":"VariableDeclaration","scope":9485,"src":"2940:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9467,"name":"address","nodeType":"ElementaryTypeName","src":"2940:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2939:18:49"},"returnParameters":{"id":9470,"nodeType":"ParameterList","parameters":[],"src":"2975:0:49"},"scope":9486,"src":"2912:187:49","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":9487,"src":"663:2438:49","usedErrors":[9352,9357],"usedEvents":[9363]}],"src":"102:3000:49"},"id":49},"@openzeppelin/contracts/access/Ownable2Step.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/Ownable2Step.sol","exportedSymbols":{"Ownable":[9486],"Ownable2Step":[9572]},"id":9573,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9488,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:50"},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"./Ownable.sol","id":9490,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9573,"sourceUnit":9487,"src":"133:38:50","symbolAliases":[{"foreign":{"id":9489,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9486,"src":"141:7:50","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9492,"name":"Ownable","nameLocations":["1018:7:50"],"nodeType":"IdentifierPath","referencedDeclaration":9486,"src":"1018:7:50"},"id":9493,"nodeType":"InheritanceSpecifier","src":"1018:7:50"}],"canonicalName":"Ownable2Step","contractDependencies":[],"contractKind":"contract","documentation":{"id":9491,"nodeType":"StructuredDocumentation","src":"173:810:50","text":" @dev Contract module which provides access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n This extension of the {Ownable} contract includes a two-step mechanism to transfer\n ownership, where the new owner must call {acceptOwnership} in order to replace the\n old one. This can help prevent common mistakes, such as transfers of ownership to\n incorrect accounts, or to contracts that are unable to interact with the\n permission system.\n The initial owner is specified at deployment time in the constructor for `Ownable`. This\n can later be changed with {transferOwnership} and {acceptOwnership}.\n This module is used through inheritance. It will make available all functions\n from parent (Ownable)."},"fullyImplemented":true,"id":9572,"linearizedBaseContracts":[9572,9486,12366],"name":"Ownable2Step","nameLocation":"1002:12:50","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":9495,"mutability":"mutable","name":"_pendingOwner","nameLocation":"1048:13:50","nodeType":"VariableDeclaration","scope":9572,"src":"1032:29:50","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9494,"name":"address","nodeType":"ElementaryTypeName","src":"1032:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"eventSelector":"38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700","id":9501,"name":"OwnershipTransferStarted","nameLocation":"1074:24:50","nodeType":"EventDefinition","parameters":{"id":9500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9497,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"1115:13:50","nodeType":"VariableDeclaration","scope":9501,"src":"1099:29:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9496,"name":"address","nodeType":"ElementaryTypeName","src":"1099:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9499,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"1146:8:50","nodeType":"VariableDeclaration","scope":9501,"src":"1130:24:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9498,"name":"address","nodeType":"ElementaryTypeName","src":"1130:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1098:57:50"},"src":"1068:88:50"},{"body":{"id":9509,"nodeType":"Block","src":"1294:37:50","statements":[{"expression":{"id":9507,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9495,"src":"1311:13:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9506,"id":9508,"nodeType":"Return","src":"1304:20:50"}]},"documentation":{"id":9502,"nodeType":"StructuredDocumentation","src":"1162:65:50","text":" @dev Returns the address of the pending owner."},"functionSelector":"e30c3978","id":9510,"implemented":true,"kind":"function","modifiers":[],"name":"pendingOwner","nameLocation":"1241:12:50","nodeType":"FunctionDefinition","parameters":{"id":9503,"nodeType":"ParameterList","parameters":[],"src":"1253:2:50"},"returnParameters":{"id":9506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9505,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9510,"src":"1285:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9504,"name":"address","nodeType":"ElementaryTypeName","src":"1285:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1284:9:50"},"scope":9572,"src":"1232:99:50","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[9465],"body":{"id":9529,"nodeType":"Block","src":"1728:99:50","statements":[{"expression":{"id":9521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9519,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9495,"src":"1738:13:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9520,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9513,"src":"1754:8:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1738:24:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9522,"nodeType":"ExpressionStatement","src":"1738:24:50"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":9524,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9406,"src":"1802:5:50","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1802:7:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9526,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9513,"src":"1811:8:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9523,"name":"OwnershipTransferStarted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9501,"src":"1777:24:50","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1777:43:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9528,"nodeType":"EmitStatement","src":"1772:48:50"}]},"documentation":{"id":9511,"nodeType":"StructuredDocumentation","src":"1337:307:50","text":" @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\n Can only be called by the current owner.\n Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer."},"functionSelector":"f2fde38b","id":9530,"implemented":true,"kind":"function","modifiers":[{"id":9517,"kind":"modifierInvocation","modifierName":{"id":9516,"name":"onlyOwner","nameLocations":["1718:9:50"],"nodeType":"IdentifierPath","referencedDeclaration":9397,"src":"1718:9:50"},"nodeType":"ModifierInvocation","src":"1718:9:50"}],"name":"transferOwnership","nameLocation":"1658:17:50","nodeType":"FunctionDefinition","overrides":{"id":9515,"nodeType":"OverrideSpecifier","overrides":[],"src":"1709:8:50"},"parameters":{"id":9514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9513,"mutability":"mutable","name":"newOwner","nameLocation":"1684:8:50","nodeType":"VariableDeclaration","scope":9530,"src":"1676:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9512,"name":"address","nodeType":"ElementaryTypeName","src":"1676:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1675:18:50"},"returnParameters":{"id":9518,"nodeType":"ParameterList","parameters":[],"src":"1728:0:50"},"scope":9572,"src":"1649:178:50","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[9485],"body":{"id":9546,"nodeType":"Block","src":"2083:81:50","statements":[{"expression":{"id":9538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"2093:20:50","subExpression":{"id":9537,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9495,"src":"2100:13:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9539,"nodeType":"ExpressionStatement","src":"2093:20:50"},{"expression":{"arguments":[{"id":9543,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9533,"src":"2148:8:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9540,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2123:5:50","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_Ownable2Step_$9572_$","typeString":"type(contract super Ownable2Step)"}},"id":9542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2129:18:50","memberName":"_transferOwnership","nodeType":"MemberAccess","referencedDeclaration":9485,"src":"2123:24:50","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2123:34:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9545,"nodeType":"ExpressionStatement","src":"2123:34:50"}]},"documentation":{"id":9531,"nodeType":"StructuredDocumentation","src":"1833:173:50","text":" @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\n Internal function without access restriction."},"id":9547,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"2020:18:50","nodeType":"FunctionDefinition","overrides":{"id":9535,"nodeType":"OverrideSpecifier","overrides":[],"src":"2074:8:50"},"parameters":{"id":9534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9533,"mutability":"mutable","name":"newOwner","nameLocation":"2047:8:50","nodeType":"VariableDeclaration","scope":9547,"src":"2039:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9532,"name":"address","nodeType":"ElementaryTypeName","src":"2039:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2038:18:50"},"returnParameters":{"id":9536,"nodeType":"ParameterList","parameters":[],"src":"2083:0:50"},"scope":9572,"src":"2011:153:50","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":9570,"nodeType":"Block","src":"2286:187:50","statements":[{"assignments":[9552],"declarations":[{"constant":false,"id":9552,"mutability":"mutable","name":"sender","nameLocation":"2304:6:50","nodeType":"VariableDeclaration","scope":9570,"src":"2296:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9551,"name":"address","nodeType":"ElementaryTypeName","src":"2296:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9555,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":9553,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12348,"src":"2313:10:50","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2313:12:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2296:29:50"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":9556,"name":"pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9510,"src":"2339:12:50","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2339:14:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9558,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9552,"src":"2357:6:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2339:24:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9565,"nodeType":"IfStatement","src":"2335:96:50","trueBody":{"id":9564,"nodeType":"Block","src":"2365:66:50","statements":[{"errorCall":{"arguments":[{"id":9561,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9552,"src":"2413:6:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9560,"name":"OwnableUnauthorizedAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9352,"src":"2386:26:50","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9562,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2386:34:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9563,"nodeType":"RevertStatement","src":"2379:41:50"}]}},{"expression":{"arguments":[{"id":9567,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9552,"src":"2459:6:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9566,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[9547],"referencedDeclaration":9547,"src":"2440:18:50","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2440:26:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9569,"nodeType":"ExpressionStatement","src":"2440:26:50"}]},"documentation":{"id":9548,"nodeType":"StructuredDocumentation","src":"2170:69:50","text":" @dev The new owner accepts the ownership transfer."},"functionSelector":"79ba5097","id":9571,"implemented":true,"kind":"function","modifiers":[],"name":"acceptOwnership","nameLocation":"2253:15:50","nodeType":"FunctionDefinition","parameters":{"id":9549,"nodeType":"ParameterList","parameters":[],"src":"2268:2:50"},"returnParameters":{"id":9550,"nodeType":"ParameterList","parameters":[],"src":"2286:0:50"},"scope":9572,"src":"2244:229:50","stateMutability":"nonpayable","virtual":true,"visibility":"public"}],"scope":9573,"src":"984:1491:50","usedErrors":[9352,9357],"usedEvents":[9363,9501]}],"src":"107:2369:50"},"id":50},"@openzeppelin/contracts/interfaces/IERC1271.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1271.sol","exportedSymbols":{"IERC1271":[9586]},"id":9587,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9574,"literals":["solidity",">=","0.5",".0"],"nodeType":"PragmaDirective","src":"107:24:51"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1271","contractDependencies":[],"contractKind":"interface","documentation":{"id":9575,"nodeType":"StructuredDocumentation","src":"133:160:51","text":" @dev Interface of the ERC-1271 standard signature validation method for\n contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271]."},"fullyImplemented":false,"id":9586,"linearizedBaseContracts":[9586],"name":"IERC1271","nameLocation":"304:8:51","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9576,"nodeType":"StructuredDocumentation","src":"319:221:51","text":" @dev Should return whether the signature provided is valid for the provided data\n @param hash Hash of the data to be signed\n @param signature Signature byte array associated with `hash`"},"functionSelector":"1626ba7e","id":9585,"implemented":false,"kind":"function","modifiers":[],"name":"isValidSignature","nameLocation":"554:16:51","nodeType":"FunctionDefinition","parameters":{"id":9581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9578,"mutability":"mutable","name":"hash","nameLocation":"579:4:51","nodeType":"VariableDeclaration","scope":9585,"src":"571:12:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9577,"name":"bytes32","nodeType":"ElementaryTypeName","src":"571:7:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9580,"mutability":"mutable","name":"signature","nameLocation":"600:9:51","nodeType":"VariableDeclaration","scope":9585,"src":"585:24:51","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":9579,"name":"bytes","nodeType":"ElementaryTypeName","src":"585:5:51","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"570:40:51"},"returnParameters":{"id":9584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9583,"mutability":"mutable","name":"magicValue","nameLocation":"641:10:51","nodeType":"VariableDeclaration","scope":9585,"src":"634:17:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":9582,"name":"bytes4","nodeType":"ElementaryTypeName","src":"634:6:51","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"633:19:51"},"scope":9586,"src":"545:108:51","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":9587,"src":"294:361:51","usedErrors":[],"usedEvents":[]}],"src":"107:549:51"},"id":51},"@openzeppelin/contracts/interfaces/IERC1363.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1363.sol","exportedSymbols":{"IERC1363":[9668],"IERC165":[12706],"IERC20":[10576]},"id":9669,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9588,"literals":["solidity",">=","0.6",".2"],"nodeType":"PragmaDirective","src":"107:24:52"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC20.sol","file":"./IERC20.sol","id":9590,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9669,"sourceUnit":9677,"src":"133:36:52","symbolAliases":[{"foreign":{"id":9589,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"141:6:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC165.sol","file":"./IERC165.sol","id":9592,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9669,"sourceUnit":9673,"src":"170:38:52","symbolAliases":[{"foreign":{"id":9591,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12706,"src":"178:7:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9594,"name":"IERC20","nameLocations":["590:6:52"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"590:6:52"},"id":9595,"nodeType":"InheritanceSpecifier","src":"590:6:52"},{"baseName":{"id":9596,"name":"IERC165","nameLocations":["598:7:52"],"nodeType":"IdentifierPath","referencedDeclaration":12706,"src":"598:7:52"},"id":9597,"nodeType":"InheritanceSpecifier","src":"598:7:52"}],"canonicalName":"IERC1363","contractDependencies":[],"contractKind":"interface","documentation":{"id":9593,"nodeType":"StructuredDocumentation","src":"210:357:52","text":" @title IERC1363\n @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction."},"fullyImplemented":false,"id":9668,"linearizedBaseContracts":[9668,12706,10576],"name":"IERC1363","nameLocation":"578:8:52","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9598,"nodeType":"StructuredDocumentation","src":"1148:370:52","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"1296ee62","id":9607,"implemented":false,"kind":"function","modifiers":[],"name":"transferAndCall","nameLocation":"1532:15:52","nodeType":"FunctionDefinition","parameters":{"id":9603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9600,"mutability":"mutable","name":"to","nameLocation":"1556:2:52","nodeType":"VariableDeclaration","scope":9607,"src":"1548:10:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9599,"name":"address","nodeType":"ElementaryTypeName","src":"1548:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9602,"mutability":"mutable","name":"value","nameLocation":"1568:5:52","nodeType":"VariableDeclaration","scope":9607,"src":"1560:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9601,"name":"uint256","nodeType":"ElementaryTypeName","src":"1560:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1547:27:52"},"returnParameters":{"id":9606,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9605,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9607,"src":"1593:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9604,"name":"bool","nodeType":"ElementaryTypeName","src":"1593:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1592:6:52"},"scope":9668,"src":"1523:76:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9608,"nodeType":"StructuredDocumentation","src":"1605:453:52","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @param data Additional data with no specified format, sent in call to `to`.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"4000aea0","id":9619,"implemented":false,"kind":"function","modifiers":[],"name":"transferAndCall","nameLocation":"2072:15:52","nodeType":"FunctionDefinition","parameters":{"id":9615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9610,"mutability":"mutable","name":"to","nameLocation":"2096:2:52","nodeType":"VariableDeclaration","scope":9619,"src":"2088:10:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9609,"name":"address","nodeType":"ElementaryTypeName","src":"2088:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9612,"mutability":"mutable","name":"value","nameLocation":"2108:5:52","nodeType":"VariableDeclaration","scope":9619,"src":"2100:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9611,"name":"uint256","nodeType":"ElementaryTypeName","src":"2100:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9614,"mutability":"mutable","name":"data","nameLocation":"2130:4:52","nodeType":"VariableDeclaration","scope":9619,"src":"2115:19:52","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":9613,"name":"bytes","nodeType":"ElementaryTypeName","src":"2115:5:52","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2087:48:52"},"returnParameters":{"id":9618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9617,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9619,"src":"2154:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9616,"name":"bool","nodeType":"ElementaryTypeName","src":"2154:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2153:6:52"},"scope":9668,"src":"2063:97:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9620,"nodeType":"StructuredDocumentation","src":"2166:453:52","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param from The address which you want to send tokens from.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"d8fbe994","id":9631,"implemented":false,"kind":"function","modifiers":[],"name":"transferFromAndCall","nameLocation":"2633:19:52","nodeType":"FunctionDefinition","parameters":{"id":9627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9622,"mutability":"mutable","name":"from","nameLocation":"2661:4:52","nodeType":"VariableDeclaration","scope":9631,"src":"2653:12:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9621,"name":"address","nodeType":"ElementaryTypeName","src":"2653:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9624,"mutability":"mutable","name":"to","nameLocation":"2675:2:52","nodeType":"VariableDeclaration","scope":9631,"src":"2667:10:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9623,"name":"address","nodeType":"ElementaryTypeName","src":"2667:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9626,"mutability":"mutable","name":"value","nameLocation":"2687:5:52","nodeType":"VariableDeclaration","scope":9631,"src":"2679:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9625,"name":"uint256","nodeType":"ElementaryTypeName","src":"2679:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2652:41:52"},"returnParameters":{"id":9630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9629,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9631,"src":"2712:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9628,"name":"bool","nodeType":"ElementaryTypeName","src":"2712:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2711:6:52"},"scope":9668,"src":"2624:94:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9632,"nodeType":"StructuredDocumentation","src":"2724:536:52","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param from The address which you want to send tokens from.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @param data Additional data with no specified format, sent in call to `to`.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"c1d34b89","id":9645,"implemented":false,"kind":"function","modifiers":[],"name":"transferFromAndCall","nameLocation":"3274:19:52","nodeType":"FunctionDefinition","parameters":{"id":9641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9634,"mutability":"mutable","name":"from","nameLocation":"3302:4:52","nodeType":"VariableDeclaration","scope":9645,"src":"3294:12:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9633,"name":"address","nodeType":"ElementaryTypeName","src":"3294:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9636,"mutability":"mutable","name":"to","nameLocation":"3316:2:52","nodeType":"VariableDeclaration","scope":9645,"src":"3308:10:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9635,"name":"address","nodeType":"ElementaryTypeName","src":"3308:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9638,"mutability":"mutable","name":"value","nameLocation":"3328:5:52","nodeType":"VariableDeclaration","scope":9645,"src":"3320:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9637,"name":"uint256","nodeType":"ElementaryTypeName","src":"3320:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9640,"mutability":"mutable","name":"data","nameLocation":"3350:4:52","nodeType":"VariableDeclaration","scope":9645,"src":"3335:19:52","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":9639,"name":"bytes","nodeType":"ElementaryTypeName","src":"3335:5:52","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3293:62:52"},"returnParameters":{"id":9644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9643,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9645,"src":"3374:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9642,"name":"bool","nodeType":"ElementaryTypeName","src":"3374:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3373:6:52"},"scope":9668,"src":"3265:115:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9646,"nodeType":"StructuredDocumentation","src":"3386:390:52","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n @param spender The address which will spend the funds.\n @param value The amount of tokens to be spent.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"3177029f","id":9655,"implemented":false,"kind":"function","modifiers":[],"name":"approveAndCall","nameLocation":"3790:14:52","nodeType":"FunctionDefinition","parameters":{"id":9651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9648,"mutability":"mutable","name":"spender","nameLocation":"3813:7:52","nodeType":"VariableDeclaration","scope":9655,"src":"3805:15:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9647,"name":"address","nodeType":"ElementaryTypeName","src":"3805:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9650,"mutability":"mutable","name":"value","nameLocation":"3830:5:52","nodeType":"VariableDeclaration","scope":9655,"src":"3822:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9649,"name":"uint256","nodeType":"ElementaryTypeName","src":"3822:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3804:32:52"},"returnParameters":{"id":9654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9653,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9655,"src":"3855:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9652,"name":"bool","nodeType":"ElementaryTypeName","src":"3855:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3854:6:52"},"scope":9668,"src":"3781:80:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9656,"nodeType":"StructuredDocumentation","src":"3867:478:52","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n @param spender The address which will spend the funds.\n @param value The amount of tokens to be spent.\n @param data Additional data with no specified format, sent in call to `spender`.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"cae9ca51","id":9667,"implemented":false,"kind":"function","modifiers":[],"name":"approveAndCall","nameLocation":"4359:14:52","nodeType":"FunctionDefinition","parameters":{"id":9663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9658,"mutability":"mutable","name":"spender","nameLocation":"4382:7:52","nodeType":"VariableDeclaration","scope":9667,"src":"4374:15:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9657,"name":"address","nodeType":"ElementaryTypeName","src":"4374:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9660,"mutability":"mutable","name":"value","nameLocation":"4399:5:52","nodeType":"VariableDeclaration","scope":9667,"src":"4391:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9659,"name":"uint256","nodeType":"ElementaryTypeName","src":"4391:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9662,"mutability":"mutable","name":"data","nameLocation":"4421:4:52","nodeType":"VariableDeclaration","scope":9667,"src":"4406:19:52","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":9661,"name":"bytes","nodeType":"ElementaryTypeName","src":"4406:5:52","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4373:53:52"},"returnParameters":{"id":9666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9665,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9667,"src":"4445:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9664,"name":"bool","nodeType":"ElementaryTypeName","src":"4445:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4444:6:52"},"scope":9668,"src":"4350:101:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":9669,"src":"568:3885:52","usedErrors":[],"usedEvents":[10510,10519]}],"src":"107:4347:52"},"id":52},"@openzeppelin/contracts/interfaces/IERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC165.sol","exportedSymbols":{"IERC165":[12706]},"id":9673,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9670,"literals":["solidity",">=","0.4",".16"],"nodeType":"PragmaDirective","src":"106:25:53"},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"../utils/introspection/IERC165.sol","id":9672,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9673,"sourceUnit":12707,"src":"133:59:53","symbolAliases":[{"foreign":{"id":9671,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12706,"src":"141:7:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""}],"src":"106:87:53"},"id":53},"@openzeppelin/contracts/interfaces/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC20.sol","exportedSymbols":{"IERC20":[10576]},"id":9677,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9674,"literals":["solidity",">=","0.4",".16"],"nodeType":"PragmaDirective","src":"105:25:54"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../token/ERC20/IERC20.sol","id":9676,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9677,"sourceUnit":10577,"src":"132:49:54","symbolAliases":[{"foreign":{"id":9675,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"140:6:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""}],"src":"105:77:54"},"id":54},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","exportedSymbols":{"IERC20":[10576],"IERC20Metadata":[10602],"IERC4626":[9846]},"id":9847,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9678,"literals":["solidity",">=","0.6",".2"],"nodeType":"PragmaDirective","src":"107:24:55"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../token/ERC20/IERC20.sol","id":9680,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9847,"sourceUnit":10577,"src":"133:49:55","symbolAliases":[{"foreign":{"id":9679,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"141:6:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"../token/ERC20/extensions/IERC20Metadata.sol","id":9682,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9847,"sourceUnit":10603,"src":"183:76:55","symbolAliases":[{"foreign":{"id":9681,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10602,"src":"191:14:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9684,"name":"IERC20","nameLocations":["421:6:55"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"421:6:55"},"id":9685,"nodeType":"InheritanceSpecifier","src":"421:6:55"},{"baseName":{"id":9686,"name":"IERC20Metadata","nameLocations":["429:14:55"],"nodeType":"IdentifierPath","referencedDeclaration":10602,"src":"429:14:55"},"id":9687,"nodeType":"InheritanceSpecifier","src":"429:14:55"}],"canonicalName":"IERC4626","contractDependencies":[],"contractKind":"interface","documentation":{"id":9683,"nodeType":"StructuredDocumentation","src":"261:137:55","text":" @dev Interface of the ERC-4626 \"Tokenized Vault Standard\", as defined in\n https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]."},"fullyImplemented":false,"id":9846,"linearizedBaseContracts":[9846,10602,10576],"name":"IERC4626","nameLocation":"409:8:55","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"dcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7","id":9697,"name":"Deposit","nameLocation":"456:7:55","nodeType":"EventDefinition","parameters":{"id":9696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9689,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"480:6:55","nodeType":"VariableDeclaration","scope":9697,"src":"464:22:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9688,"name":"address","nodeType":"ElementaryTypeName","src":"464:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9691,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"504:5:55","nodeType":"VariableDeclaration","scope":9697,"src":"488:21:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9690,"name":"address","nodeType":"ElementaryTypeName","src":"488:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9693,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"519:6:55","nodeType":"VariableDeclaration","scope":9697,"src":"511:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9692,"name":"uint256","nodeType":"ElementaryTypeName","src":"511:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9695,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"535:6:55","nodeType":"VariableDeclaration","scope":9697,"src":"527:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9694,"name":"uint256","nodeType":"ElementaryTypeName","src":"527:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"463:79:55"},"src":"450:93:55"},{"anonymous":false,"eventSelector":"fbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db","id":9709,"name":"Withdraw","nameLocation":"555:8:55","nodeType":"EventDefinition","parameters":{"id":9708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9699,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"589:6:55","nodeType":"VariableDeclaration","scope":9709,"src":"573:22:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9698,"name":"address","nodeType":"ElementaryTypeName","src":"573:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9701,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"621:8:55","nodeType":"VariableDeclaration","scope":9709,"src":"605:24:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9700,"name":"address","nodeType":"ElementaryTypeName","src":"605:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9703,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"655:5:55","nodeType":"VariableDeclaration","scope":9709,"src":"639:21:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9702,"name":"address","nodeType":"ElementaryTypeName","src":"639:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9705,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"678:6:55","nodeType":"VariableDeclaration","scope":9709,"src":"670:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9704,"name":"uint256","nodeType":"ElementaryTypeName","src":"670:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9707,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"702:6:55","nodeType":"VariableDeclaration","scope":9709,"src":"694:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9706,"name":"uint256","nodeType":"ElementaryTypeName","src":"694:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"563:151:55"},"src":"549:166:55"},{"documentation":{"id":9710,"nodeType":"StructuredDocumentation","src":"721:207:55","text":" @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n - MUST be an ERC-20 token contract.\n - MUST NOT revert."},"functionSelector":"38d52e0f","id":9715,"implemented":false,"kind":"function","modifiers":[],"name":"asset","nameLocation":"942:5:55","nodeType":"FunctionDefinition","parameters":{"id":9711,"nodeType":"ParameterList","parameters":[],"src":"947:2:55"},"returnParameters":{"id":9714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9713,"mutability":"mutable","name":"assetTokenAddress","nameLocation":"981:17:55","nodeType":"VariableDeclaration","scope":9715,"src":"973:25:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9712,"name":"address","nodeType":"ElementaryTypeName","src":"973:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"972:27:55"},"scope":9846,"src":"933:67:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9716,"nodeType":"StructuredDocumentation","src":"1006:286:55","text":" @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n - SHOULD include any compounding that occurs from yield.\n - MUST be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT revert."},"functionSelector":"01e1d114","id":9721,"implemented":false,"kind":"function","modifiers":[],"name":"totalAssets","nameLocation":"1306:11:55","nodeType":"FunctionDefinition","parameters":{"id":9717,"nodeType":"ParameterList","parameters":[],"src":"1317:2:55"},"returnParameters":{"id":9720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9719,"mutability":"mutable","name":"totalManagedAssets","nameLocation":"1351:18:55","nodeType":"VariableDeclaration","scope":9721,"src":"1343:26:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9718,"name":"uint256","nodeType":"ElementaryTypeName","src":"1343:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1342:28:55"},"scope":9846,"src":"1297:74:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9722,"nodeType":"StructuredDocumentation","src":"1377:720:55","text":" @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"c6e6f592","id":9729,"implemented":false,"kind":"function","modifiers":[],"name":"convertToShares","nameLocation":"2111:15:55","nodeType":"FunctionDefinition","parameters":{"id":9725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9724,"mutability":"mutable","name":"assets","nameLocation":"2135:6:55","nodeType":"VariableDeclaration","scope":9729,"src":"2127:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9723,"name":"uint256","nodeType":"ElementaryTypeName","src":"2127:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2126:16:55"},"returnParameters":{"id":9728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9727,"mutability":"mutable","name":"shares","nameLocation":"2174:6:55","nodeType":"VariableDeclaration","scope":9729,"src":"2166:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9726,"name":"uint256","nodeType":"ElementaryTypeName","src":"2166:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2165:16:55"},"scope":9846,"src":"2102:80:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9730,"nodeType":"StructuredDocumentation","src":"2188:720:55","text":" @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"07a2d13a","id":9737,"implemented":false,"kind":"function","modifiers":[],"name":"convertToAssets","nameLocation":"2922:15:55","nodeType":"FunctionDefinition","parameters":{"id":9733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9732,"mutability":"mutable","name":"shares","nameLocation":"2946:6:55","nodeType":"VariableDeclaration","scope":9737,"src":"2938:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9731,"name":"uint256","nodeType":"ElementaryTypeName","src":"2938:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2937:16:55"},"returnParameters":{"id":9736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9735,"mutability":"mutable","name":"assets","nameLocation":"2985:6:55","nodeType":"VariableDeclaration","scope":9737,"src":"2977:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9734,"name":"uint256","nodeType":"ElementaryTypeName","src":"2977:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2976:16:55"},"scope":9846,"src":"2913:80:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9738,"nodeType":"StructuredDocumentation","src":"2999:386:55","text":" @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n through a deposit call.\n - MUST return a limited value if receiver is subject to some deposit limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n - MUST NOT revert."},"functionSelector":"402d267d","id":9745,"implemented":false,"kind":"function","modifiers":[],"name":"maxDeposit","nameLocation":"3399:10:55","nodeType":"FunctionDefinition","parameters":{"id":9741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9740,"mutability":"mutable","name":"receiver","nameLocation":"3418:8:55","nodeType":"VariableDeclaration","scope":9745,"src":"3410:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9739,"name":"address","nodeType":"ElementaryTypeName","src":"3410:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3409:18:55"},"returnParameters":{"id":9744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9743,"mutability":"mutable","name":"maxAssets","nameLocation":"3459:9:55","nodeType":"VariableDeclaration","scope":9745,"src":"3451:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9742,"name":"uint256","nodeType":"ElementaryTypeName","src":"3451:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3450:19:55"},"scope":9846,"src":"3390:80:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9746,"nodeType":"StructuredDocumentation","src":"3476:1012:55","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n current on-chain conditions.\n - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n in the same transaction.\n - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n deposit would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"ef8b30f7","id":9753,"implemented":false,"kind":"function","modifiers":[],"name":"previewDeposit","nameLocation":"4502:14:55","nodeType":"FunctionDefinition","parameters":{"id":9749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9748,"mutability":"mutable","name":"assets","nameLocation":"4525:6:55","nodeType":"VariableDeclaration","scope":9753,"src":"4517:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9747,"name":"uint256","nodeType":"ElementaryTypeName","src":"4517:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4516:16:55"},"returnParameters":{"id":9752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9751,"mutability":"mutable","name":"shares","nameLocation":"4564:6:55","nodeType":"VariableDeclaration","scope":9753,"src":"4556:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9750,"name":"uint256","nodeType":"ElementaryTypeName","src":"4556:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4555:16:55"},"scope":9846,"src":"4493:79:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9754,"nodeType":"StructuredDocumentation","src":"4578:651:55","text":" @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n deposit execution, and are accounted for during deposit.\n - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"6e553f65","id":9763,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"5243:7:55","nodeType":"FunctionDefinition","parameters":{"id":9759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9756,"mutability":"mutable","name":"assets","nameLocation":"5259:6:55","nodeType":"VariableDeclaration","scope":9763,"src":"5251:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9755,"name":"uint256","nodeType":"ElementaryTypeName","src":"5251:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9758,"mutability":"mutable","name":"receiver","nameLocation":"5275:8:55","nodeType":"VariableDeclaration","scope":9763,"src":"5267:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9757,"name":"address","nodeType":"ElementaryTypeName","src":"5267:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5250:34:55"},"returnParameters":{"id":9762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9761,"mutability":"mutable","name":"shares","nameLocation":"5311:6:55","nodeType":"VariableDeclaration","scope":9763,"src":"5303:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9760,"name":"uint256","nodeType":"ElementaryTypeName","src":"5303:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5302:16:55"},"scope":9846,"src":"5234:85:55","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9764,"nodeType":"StructuredDocumentation","src":"5325:341:55","text":" @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n - MUST return a limited value if receiver is subject to some mint limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n - MUST NOT revert."},"functionSelector":"c63d75b6","id":9771,"implemented":false,"kind":"function","modifiers":[],"name":"maxMint","nameLocation":"5680:7:55","nodeType":"FunctionDefinition","parameters":{"id":9767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9766,"mutability":"mutable","name":"receiver","nameLocation":"5696:8:55","nodeType":"VariableDeclaration","scope":9771,"src":"5688:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9765,"name":"address","nodeType":"ElementaryTypeName","src":"5688:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5687:18:55"},"returnParameters":{"id":9770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9769,"mutability":"mutable","name":"maxShares","nameLocation":"5737:9:55","nodeType":"VariableDeclaration","scope":9771,"src":"5729:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9768,"name":"uint256","nodeType":"ElementaryTypeName","src":"5729:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5728:19:55"},"scope":9846,"src":"5671:77:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9772,"nodeType":"StructuredDocumentation","src":"5754:984:55","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n same transaction.\n - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by minting."},"functionSelector":"b3d7f6b9","id":9779,"implemented":false,"kind":"function","modifiers":[],"name":"previewMint","nameLocation":"6752:11:55","nodeType":"FunctionDefinition","parameters":{"id":9775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9774,"mutability":"mutable","name":"shares","nameLocation":"6772:6:55","nodeType":"VariableDeclaration","scope":9779,"src":"6764:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9773,"name":"uint256","nodeType":"ElementaryTypeName","src":"6764:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6763:16:55"},"returnParameters":{"id":9778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9777,"mutability":"mutable","name":"assets","nameLocation":"6811:6:55","nodeType":"VariableDeclaration","scope":9779,"src":"6803:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9776,"name":"uint256","nodeType":"ElementaryTypeName","src":"6803:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6802:16:55"},"scope":9846,"src":"6743:76:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9780,"nodeType":"StructuredDocumentation","src":"6825:642:55","text":" @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n execution, and are accounted for during mint.\n - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"94bf804d","id":9789,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"7481:4:55","nodeType":"FunctionDefinition","parameters":{"id":9785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9782,"mutability":"mutable","name":"shares","nameLocation":"7494:6:55","nodeType":"VariableDeclaration","scope":9789,"src":"7486:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9781,"name":"uint256","nodeType":"ElementaryTypeName","src":"7486:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9784,"mutability":"mutable","name":"receiver","nameLocation":"7510:8:55","nodeType":"VariableDeclaration","scope":9789,"src":"7502:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9783,"name":"address","nodeType":"ElementaryTypeName","src":"7502:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7485:34:55"},"returnParameters":{"id":9788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9787,"mutability":"mutable","name":"assets","nameLocation":"7546:6:55","nodeType":"VariableDeclaration","scope":9789,"src":"7538:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9786,"name":"uint256","nodeType":"ElementaryTypeName","src":"7538:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7537:16:55"},"scope":9846,"src":"7472:82:55","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9790,"nodeType":"StructuredDocumentation","src":"7560:293:55","text":" @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n Vault, through a withdraw call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"ce96cb77","id":9797,"implemented":false,"kind":"function","modifiers":[],"name":"maxWithdraw","nameLocation":"7867:11:55","nodeType":"FunctionDefinition","parameters":{"id":9793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9792,"mutability":"mutable","name":"owner","nameLocation":"7887:5:55","nodeType":"VariableDeclaration","scope":9797,"src":"7879:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9791,"name":"address","nodeType":"ElementaryTypeName","src":"7879:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7878:15:55"},"returnParameters":{"id":9796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9795,"mutability":"mutable","name":"maxAssets","nameLocation":"7925:9:55","nodeType":"VariableDeclaration","scope":9797,"src":"7917:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9794,"name":"uint256","nodeType":"ElementaryTypeName","src":"7917:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7916:19:55"},"scope":9846,"src":"7858:78:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9798,"nodeType":"StructuredDocumentation","src":"7942:1034:55","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n given current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n called\n in the same transaction.\n - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n the withdrawal would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"0a28a477","id":9805,"implemented":false,"kind":"function","modifiers":[],"name":"previewWithdraw","nameLocation":"8990:15:55","nodeType":"FunctionDefinition","parameters":{"id":9801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9800,"mutability":"mutable","name":"assets","nameLocation":"9014:6:55","nodeType":"VariableDeclaration","scope":9805,"src":"9006:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9799,"name":"uint256","nodeType":"ElementaryTypeName","src":"9006:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9005:16:55"},"returnParameters":{"id":9804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9803,"mutability":"mutable","name":"shares","nameLocation":"9053:6:55","nodeType":"VariableDeclaration","scope":9805,"src":"9045:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9802,"name":"uint256","nodeType":"ElementaryTypeName","src":"9045:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9044:16:55"},"scope":9846,"src":"8981:80:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9806,"nodeType":"StructuredDocumentation","src":"9067:670:55","text":" @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n withdraw execution, and are accounted for during withdraw.\n - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"b460af94","id":9817,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"9751:8:55","nodeType":"FunctionDefinition","parameters":{"id":9813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9808,"mutability":"mutable","name":"assets","nameLocation":"9768:6:55","nodeType":"VariableDeclaration","scope":9817,"src":"9760:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9807,"name":"uint256","nodeType":"ElementaryTypeName","src":"9760:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9810,"mutability":"mutable","name":"receiver","nameLocation":"9784:8:55","nodeType":"VariableDeclaration","scope":9817,"src":"9776:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9809,"name":"address","nodeType":"ElementaryTypeName","src":"9776:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9812,"mutability":"mutable","name":"owner","nameLocation":"9802:5:55","nodeType":"VariableDeclaration","scope":9817,"src":"9794:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9811,"name":"address","nodeType":"ElementaryTypeName","src":"9794:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9759:49:55"},"returnParameters":{"id":9816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9815,"mutability":"mutable","name":"shares","nameLocation":"9835:6:55","nodeType":"VariableDeclaration","scope":9817,"src":"9827:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9814,"name":"uint256","nodeType":"ElementaryTypeName","src":"9827:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9826:16:55"},"scope":9846,"src":"9742:101:55","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9818,"nodeType":"StructuredDocumentation","src":"9849:381:55","text":" @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n through a redeem call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"d905777e","id":9825,"implemented":false,"kind":"function","modifiers":[],"name":"maxRedeem","nameLocation":"10244:9:55","nodeType":"FunctionDefinition","parameters":{"id":9821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9820,"mutability":"mutable","name":"owner","nameLocation":"10262:5:55","nodeType":"VariableDeclaration","scope":9825,"src":"10254:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9819,"name":"address","nodeType":"ElementaryTypeName","src":"10254:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10253:15:55"},"returnParameters":{"id":9824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9823,"mutability":"mutable","name":"maxShares","nameLocation":"10300:9:55","nodeType":"VariableDeclaration","scope":9825,"src":"10292:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9822,"name":"uint256","nodeType":"ElementaryTypeName","src":"10292:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10291:19:55"},"scope":9846,"src":"10235:76:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9826,"nodeType":"StructuredDocumentation","src":"10317:1009:55","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their redemption at the current block,\n given current on-chain conditions.\n - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n same transaction.\n - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n redemption would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by redeeming."},"functionSelector":"4cdad506","id":9833,"implemented":false,"kind":"function","modifiers":[],"name":"previewRedeem","nameLocation":"11340:13:55","nodeType":"FunctionDefinition","parameters":{"id":9829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9828,"mutability":"mutable","name":"shares","nameLocation":"11362:6:55","nodeType":"VariableDeclaration","scope":9833,"src":"11354:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9827,"name":"uint256","nodeType":"ElementaryTypeName","src":"11354:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11353:16:55"},"returnParameters":{"id":9832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9831,"mutability":"mutable","name":"assets","nameLocation":"11401:6:55","nodeType":"VariableDeclaration","scope":9833,"src":"11393:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9830,"name":"uint256","nodeType":"ElementaryTypeName","src":"11393:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11392:16:55"},"scope":9846,"src":"11331:78:55","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9834,"nodeType":"StructuredDocumentation","src":"11415:661:55","text":" @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n redeem execution, and are accounted for during redeem.\n - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"ba087652","id":9845,"implemented":false,"kind":"function","modifiers":[],"name":"redeem","nameLocation":"12090:6:55","nodeType":"FunctionDefinition","parameters":{"id":9841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9836,"mutability":"mutable","name":"shares","nameLocation":"12105:6:55","nodeType":"VariableDeclaration","scope":9845,"src":"12097:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9835,"name":"uint256","nodeType":"ElementaryTypeName","src":"12097:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9838,"mutability":"mutable","name":"receiver","nameLocation":"12121:8:55","nodeType":"VariableDeclaration","scope":9845,"src":"12113:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9837,"name":"address","nodeType":"ElementaryTypeName","src":"12113:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9840,"mutability":"mutable","name":"owner","nameLocation":"12139:5:55","nodeType":"VariableDeclaration","scope":9845,"src":"12131:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9839,"name":"address","nodeType":"ElementaryTypeName","src":"12131:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12096:49:55"},"returnParameters":{"id":9844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9843,"mutability":"mutable","name":"assets","nameLocation":"12172:6:55","nodeType":"VariableDeclaration","scope":9845,"src":"12164:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9842,"name":"uint256","nodeType":"ElementaryTypeName","src":"12164:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12163:16:55"},"scope":9846,"src":"12081:99:55","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":9847,"src":"399:11783:55","usedErrors":[],"usedEvents":[9697,9709,10510,10519]}],"src":"107:12076:55"},"id":55},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","exportedSymbols":{"IERC1155Errors":[9983],"IERC20Errors":[9888],"IERC721Errors":[9936]},"id":9984,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9848,"literals":["solidity",">=","0.8",".4"],"nodeType":"PragmaDirective","src":"112:24:56"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":9849,"nodeType":"StructuredDocumentation","src":"138:141:56","text":" @dev Standard ERC-20 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens."},"fullyImplemented":true,"id":9888,"linearizedBaseContracts":[9888],"name":"IERC20Errors","nameLocation":"290:12:56","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9850,"nodeType":"StructuredDocumentation","src":"309:309:56","text":" @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer."},"errorSelector":"e450d38c","id":9858,"name":"ERC20InsufficientBalance","nameLocation":"629:24:56","nodeType":"ErrorDefinition","parameters":{"id":9857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9852,"mutability":"mutable","name":"sender","nameLocation":"662:6:56","nodeType":"VariableDeclaration","scope":9858,"src":"654:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9851,"name":"address","nodeType":"ElementaryTypeName","src":"654:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9854,"mutability":"mutable","name":"balance","nameLocation":"678:7:56","nodeType":"VariableDeclaration","scope":9858,"src":"670:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9853,"name":"uint256","nodeType":"ElementaryTypeName","src":"670:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9856,"mutability":"mutable","name":"needed","nameLocation":"695:6:56","nodeType":"VariableDeclaration","scope":9858,"src":"687:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9855,"name":"uint256","nodeType":"ElementaryTypeName","src":"687:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"653:49:56"},"src":"623:80:56"},{"documentation":{"id":9859,"nodeType":"StructuredDocumentation","src":"709:152:56","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"96c6fd1e","id":9863,"name":"ERC20InvalidSender","nameLocation":"872:18:56","nodeType":"ErrorDefinition","parameters":{"id":9862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9861,"mutability":"mutable","name":"sender","nameLocation":"899:6:56","nodeType":"VariableDeclaration","scope":9863,"src":"891:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9860,"name":"address","nodeType":"ElementaryTypeName","src":"891:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"890:16:56"},"src":"866:41:56"},{"documentation":{"id":9864,"nodeType":"StructuredDocumentation","src":"913:159:56","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"ec442f05","id":9868,"name":"ERC20InvalidReceiver","nameLocation":"1083:20:56","nodeType":"ErrorDefinition","parameters":{"id":9867,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9866,"mutability":"mutable","name":"receiver","nameLocation":"1112:8:56","nodeType":"VariableDeclaration","scope":9868,"src":"1104:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9865,"name":"address","nodeType":"ElementaryTypeName","src":"1104:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1103:18:56"},"src":"1077:45:56"},{"documentation":{"id":9869,"nodeType":"StructuredDocumentation","src":"1128:345:56","text":" @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n @param spender Address that may be allowed to operate on tokens without being their owner.\n @param allowance Amount of tokens a `spender` is allowed to operate with.\n @param needed Minimum amount required to perform a transfer."},"errorSelector":"fb8f41b2","id":9877,"name":"ERC20InsufficientAllowance","nameLocation":"1484:26:56","nodeType":"ErrorDefinition","parameters":{"id":9876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9871,"mutability":"mutable","name":"spender","nameLocation":"1519:7:56","nodeType":"VariableDeclaration","scope":9877,"src":"1511:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9870,"name":"address","nodeType":"ElementaryTypeName","src":"1511:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9873,"mutability":"mutable","name":"allowance","nameLocation":"1536:9:56","nodeType":"VariableDeclaration","scope":9877,"src":"1528:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9872,"name":"uint256","nodeType":"ElementaryTypeName","src":"1528:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9875,"mutability":"mutable","name":"needed","nameLocation":"1555:6:56","nodeType":"VariableDeclaration","scope":9877,"src":"1547:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9874,"name":"uint256","nodeType":"ElementaryTypeName","src":"1547:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1510:52:56"},"src":"1478:85:56"},{"documentation":{"id":9878,"nodeType":"StructuredDocumentation","src":"1569:174:56","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"e602df05","id":9882,"name":"ERC20InvalidApprover","nameLocation":"1754:20:56","nodeType":"ErrorDefinition","parameters":{"id":9881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9880,"mutability":"mutable","name":"approver","nameLocation":"1783:8:56","nodeType":"VariableDeclaration","scope":9882,"src":"1775:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9879,"name":"address","nodeType":"ElementaryTypeName","src":"1775:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1774:18:56"},"src":"1748:45:56"},{"documentation":{"id":9883,"nodeType":"StructuredDocumentation","src":"1799:195:56","text":" @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n @param spender Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"94280d62","id":9887,"name":"ERC20InvalidSpender","nameLocation":"2005:19:56","nodeType":"ErrorDefinition","parameters":{"id":9886,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9885,"mutability":"mutable","name":"spender","nameLocation":"2033:7:56","nodeType":"VariableDeclaration","scope":9887,"src":"2025:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9884,"name":"address","nodeType":"ElementaryTypeName","src":"2025:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2024:17:56"},"src":"1999:43:56"}],"scope":9984,"src":"280:1764:56","usedErrors":[9858,9863,9868,9877,9882,9887],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"IERC721Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":9889,"nodeType":"StructuredDocumentation","src":"2046:143:56","text":" @dev Standard ERC-721 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens."},"fullyImplemented":true,"id":9936,"linearizedBaseContracts":[9936],"name":"IERC721Errors","nameLocation":"2200:13:56","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9890,"nodeType":"StructuredDocumentation","src":"2220:219:56","text":" @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\n Used in balance queries.\n @param owner Address of the current owner of a token."},"errorSelector":"89c62b64","id":9894,"name":"ERC721InvalidOwner","nameLocation":"2450:18:56","nodeType":"ErrorDefinition","parameters":{"id":9893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9892,"mutability":"mutable","name":"owner","nameLocation":"2477:5:56","nodeType":"VariableDeclaration","scope":9894,"src":"2469:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9891,"name":"address","nodeType":"ElementaryTypeName","src":"2469:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2468:15:56"},"src":"2444:40:56"},{"documentation":{"id":9895,"nodeType":"StructuredDocumentation","src":"2490:132:56","text":" @dev Indicates a `tokenId` whose `owner` is the zero address.\n @param tokenId Identifier number of a token."},"errorSelector":"7e273289","id":9899,"name":"ERC721NonexistentToken","nameLocation":"2633:22:56","nodeType":"ErrorDefinition","parameters":{"id":9898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9897,"mutability":"mutable","name":"tokenId","nameLocation":"2664:7:56","nodeType":"VariableDeclaration","scope":9899,"src":"2656:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9896,"name":"uint256","nodeType":"ElementaryTypeName","src":"2656:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2655:17:56"},"src":"2627:46:56"},{"documentation":{"id":9900,"nodeType":"StructuredDocumentation","src":"2679:289:56","text":" @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param tokenId Identifier number of a token.\n @param owner Address of the current owner of a token."},"errorSelector":"64283d7b","id":9908,"name":"ERC721IncorrectOwner","nameLocation":"2979:20:56","nodeType":"ErrorDefinition","parameters":{"id":9907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9902,"mutability":"mutable","name":"sender","nameLocation":"3008:6:56","nodeType":"VariableDeclaration","scope":9908,"src":"3000:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9901,"name":"address","nodeType":"ElementaryTypeName","src":"3000:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9904,"mutability":"mutable","name":"tokenId","nameLocation":"3024:7:56","nodeType":"VariableDeclaration","scope":9908,"src":"3016:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9903,"name":"uint256","nodeType":"ElementaryTypeName","src":"3016:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9906,"mutability":"mutable","name":"owner","nameLocation":"3041:5:56","nodeType":"VariableDeclaration","scope":9908,"src":"3033:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9905,"name":"address","nodeType":"ElementaryTypeName","src":"3033:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2999:48:56"},"src":"2973:75:56"},{"documentation":{"id":9909,"nodeType":"StructuredDocumentation","src":"3054:152:56","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"73c6ac6e","id":9913,"name":"ERC721InvalidSender","nameLocation":"3217:19:56","nodeType":"ErrorDefinition","parameters":{"id":9912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9911,"mutability":"mutable","name":"sender","nameLocation":"3245:6:56","nodeType":"VariableDeclaration","scope":9913,"src":"3237:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9910,"name":"address","nodeType":"ElementaryTypeName","src":"3237:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3236:16:56"},"src":"3211:42:56"},{"documentation":{"id":9914,"nodeType":"StructuredDocumentation","src":"3259:159:56","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"64a0ae92","id":9918,"name":"ERC721InvalidReceiver","nameLocation":"3429:21:56","nodeType":"ErrorDefinition","parameters":{"id":9917,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9916,"mutability":"mutable","name":"receiver","nameLocation":"3459:8:56","nodeType":"VariableDeclaration","scope":9918,"src":"3451:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9915,"name":"address","nodeType":"ElementaryTypeName","src":"3451:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3450:18:56"},"src":"3423:46:56"},{"documentation":{"id":9919,"nodeType":"StructuredDocumentation","src":"3475:247:56","text":" @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param tokenId Identifier number of a token."},"errorSelector":"177e802f","id":9925,"name":"ERC721InsufficientApproval","nameLocation":"3733:26:56","nodeType":"ErrorDefinition","parameters":{"id":9924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9921,"mutability":"mutable","name":"operator","nameLocation":"3768:8:56","nodeType":"VariableDeclaration","scope":9925,"src":"3760:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9920,"name":"address","nodeType":"ElementaryTypeName","src":"3760:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9923,"mutability":"mutable","name":"tokenId","nameLocation":"3786:7:56","nodeType":"VariableDeclaration","scope":9925,"src":"3778:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9922,"name":"uint256","nodeType":"ElementaryTypeName","src":"3778:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3759:35:56"},"src":"3727:68:56"},{"documentation":{"id":9926,"nodeType":"StructuredDocumentation","src":"3801:174:56","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"a9fbf51f","id":9930,"name":"ERC721InvalidApprover","nameLocation":"3986:21:56","nodeType":"ErrorDefinition","parameters":{"id":9929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9928,"mutability":"mutable","name":"approver","nameLocation":"4016:8:56","nodeType":"VariableDeclaration","scope":9930,"src":"4008:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9927,"name":"address","nodeType":"ElementaryTypeName","src":"4008:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4007:18:56"},"src":"3980:46:56"},{"documentation":{"id":9931,"nodeType":"StructuredDocumentation","src":"4032:197:56","text":" @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"5b08ba18","id":9935,"name":"ERC721InvalidOperator","nameLocation":"4240:21:56","nodeType":"ErrorDefinition","parameters":{"id":9934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9933,"mutability":"mutable","name":"operator","nameLocation":"4270:8:56","nodeType":"VariableDeclaration","scope":9935,"src":"4262:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9932,"name":"address","nodeType":"ElementaryTypeName","src":"4262:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4261:18:56"},"src":"4234:46:56"}],"scope":9984,"src":"2190:2092:56","usedErrors":[9894,9899,9908,9913,9918,9925,9930,9935],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1155Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":9937,"nodeType":"StructuredDocumentation","src":"4284:145:56","text":" @dev Standard ERC-1155 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens."},"fullyImplemented":true,"id":9983,"linearizedBaseContracts":[9983],"name":"IERC1155Errors","nameLocation":"4440:14:56","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9938,"nodeType":"StructuredDocumentation","src":"4461:361:56","text":" @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer.\n @param tokenId Identifier number of a token."},"errorSelector":"03dee4c5","id":9948,"name":"ERC1155InsufficientBalance","nameLocation":"4833:26:56","nodeType":"ErrorDefinition","parameters":{"id":9947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9940,"mutability":"mutable","name":"sender","nameLocation":"4868:6:56","nodeType":"VariableDeclaration","scope":9948,"src":"4860:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9939,"name":"address","nodeType":"ElementaryTypeName","src":"4860:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9942,"mutability":"mutable","name":"balance","nameLocation":"4884:7:56","nodeType":"VariableDeclaration","scope":9948,"src":"4876:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9941,"name":"uint256","nodeType":"ElementaryTypeName","src":"4876:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9944,"mutability":"mutable","name":"needed","nameLocation":"4901:6:56","nodeType":"VariableDeclaration","scope":9948,"src":"4893:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9943,"name":"uint256","nodeType":"ElementaryTypeName","src":"4893:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9946,"mutability":"mutable","name":"tokenId","nameLocation":"4917:7:56","nodeType":"VariableDeclaration","scope":9948,"src":"4909:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9945,"name":"uint256","nodeType":"ElementaryTypeName","src":"4909:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4859:66:56"},"src":"4827:99:56"},{"documentation":{"id":9949,"nodeType":"StructuredDocumentation","src":"4932:152:56","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"01a83514","id":9953,"name":"ERC1155InvalidSender","nameLocation":"5095:20:56","nodeType":"ErrorDefinition","parameters":{"id":9952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9951,"mutability":"mutable","name":"sender","nameLocation":"5124:6:56","nodeType":"VariableDeclaration","scope":9953,"src":"5116:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9950,"name":"address","nodeType":"ElementaryTypeName","src":"5116:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5115:16:56"},"src":"5089:43:56"},{"documentation":{"id":9954,"nodeType":"StructuredDocumentation","src":"5138:159:56","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"57f447ce","id":9958,"name":"ERC1155InvalidReceiver","nameLocation":"5308:22:56","nodeType":"ErrorDefinition","parameters":{"id":9957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9956,"mutability":"mutable","name":"receiver","nameLocation":"5339:8:56","nodeType":"VariableDeclaration","scope":9958,"src":"5331:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9955,"name":"address","nodeType":"ElementaryTypeName","src":"5331:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5330:18:56"},"src":"5302:47:56"},{"documentation":{"id":9959,"nodeType":"StructuredDocumentation","src":"5355:256:56","text":" @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param owner Address of the current owner of a token."},"errorSelector":"e237d922","id":9965,"name":"ERC1155MissingApprovalForAll","nameLocation":"5622:28:56","nodeType":"ErrorDefinition","parameters":{"id":9964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9961,"mutability":"mutable","name":"operator","nameLocation":"5659:8:56","nodeType":"VariableDeclaration","scope":9965,"src":"5651:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9960,"name":"address","nodeType":"ElementaryTypeName","src":"5651:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9963,"mutability":"mutable","name":"owner","nameLocation":"5677:5:56","nodeType":"VariableDeclaration","scope":9965,"src":"5669:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9962,"name":"address","nodeType":"ElementaryTypeName","src":"5669:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5650:33:56"},"src":"5616:68:56"},{"documentation":{"id":9966,"nodeType":"StructuredDocumentation","src":"5690:174:56","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"3e31884e","id":9970,"name":"ERC1155InvalidApprover","nameLocation":"5875:22:56","nodeType":"ErrorDefinition","parameters":{"id":9969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9968,"mutability":"mutable","name":"approver","nameLocation":"5906:8:56","nodeType":"VariableDeclaration","scope":9970,"src":"5898:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9967,"name":"address","nodeType":"ElementaryTypeName","src":"5898:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5897:18:56"},"src":"5869:47:56"},{"documentation":{"id":9971,"nodeType":"StructuredDocumentation","src":"5922:197:56","text":" @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"ced3e100","id":9975,"name":"ERC1155InvalidOperator","nameLocation":"6130:22:56","nodeType":"ErrorDefinition","parameters":{"id":9974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9973,"mutability":"mutable","name":"operator","nameLocation":"6161:8:56","nodeType":"VariableDeclaration","scope":9975,"src":"6153:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9972,"name":"address","nodeType":"ElementaryTypeName","src":"6153:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6152:18:56"},"src":"6124:47:56"},{"documentation":{"id":9976,"nodeType":"StructuredDocumentation","src":"6177:280:56","text":" @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n Used in batch transfers.\n @param idsLength Length of the array of token identifiers\n @param valuesLength Length of the array of token amounts"},"errorSelector":"5b059991","id":9982,"name":"ERC1155InvalidArrayLength","nameLocation":"6468:25:56","nodeType":"ErrorDefinition","parameters":{"id":9981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9978,"mutability":"mutable","name":"idsLength","nameLocation":"6502:9:56","nodeType":"VariableDeclaration","scope":9982,"src":"6494:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9977,"name":"uint256","nodeType":"ElementaryTypeName","src":"6494:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9980,"mutability":"mutable","name":"valuesLength","nameLocation":"6521:12:56","nodeType":"VariableDeclaration","scope":9982,"src":"6513:20:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9979,"name":"uint256","nodeType":"ElementaryTypeName","src":"6513:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6493:41:56"},"src":"6462:73:56"}],"scope":9984,"src":"4430:2107:56","usedErrors":[9948,9953,9958,9965,9970,9975,9982],"usedEvents":[]}],"src":"112:6426:56"},"id":56},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/ERC20.sol","exportedSymbols":{"Context":[12366],"ERC20":[10498],"IERC20":[10576],"IERC20Errors":[9888],"IERC20Metadata":[10602]},"id":10499,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9985,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"105:24:57"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"./IERC20.sol","id":9987,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10499,"sourceUnit":10577,"src":"131:36:57","symbolAliases":[{"foreign":{"id":9986,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"139:6:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"./extensions/IERC20Metadata.sol","id":9989,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10499,"sourceUnit":10603,"src":"168:63:57","symbolAliases":[{"foreign":{"id":9988,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10602,"src":"176:14:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../../utils/Context.sol","id":9991,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10499,"sourceUnit":12367,"src":"232:48:57","symbolAliases":[{"foreign":{"id":9990,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12366,"src":"240:7:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","file":"../../interfaces/draft-IERC6093.sol","id":9993,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10499,"sourceUnit":9984,"src":"281:65:57","symbolAliases":[{"foreign":{"id":9992,"name":"IERC20Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9888,"src":"289:12:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9995,"name":"Context","nameLocations":["1133:7:57"],"nodeType":"IdentifierPath","referencedDeclaration":12366,"src":"1133:7:57"},"id":9996,"nodeType":"InheritanceSpecifier","src":"1133:7:57"},{"baseName":{"id":9997,"name":"IERC20","nameLocations":["1142:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1142:6:57"},"id":9998,"nodeType":"InheritanceSpecifier","src":"1142:6:57"},{"baseName":{"id":9999,"name":"IERC20Metadata","nameLocations":["1150:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":10602,"src":"1150:14:57"},"id":10000,"nodeType":"InheritanceSpecifier","src":"1150:14:57"},{"baseName":{"id":10001,"name":"IERC20Errors","nameLocations":["1166:12:57"],"nodeType":"IdentifierPath","referencedDeclaration":9888,"src":"1166:12:57"},"id":10002,"nodeType":"InheritanceSpecifier","src":"1166:12:57"}],"canonicalName":"ERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":9994,"nodeType":"StructuredDocumentation","src":"348:757:57","text":" @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n TIP: For a detailed writeup see our guide\n https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n The default value of {decimals} is 18. To change this, you should override\n this function so it returns a different value.\n We have followed general OpenZeppelin Contracts guidelines: functions revert\n instead returning `false` on failure. This behavior is nonetheless\n conventional and does not conflict with the expectations of ERC-20\n applications."},"fullyImplemented":true,"id":10498,"linearizedBaseContracts":[10498,9888,10602,10576,12366],"name":"ERC20","nameLocation":"1124:5:57","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":10006,"mutability":"mutable","name":"_balances","nameLocation":"1229:9:57","nodeType":"VariableDeclaration","scope":10498,"src":"1185:53:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":10005,"keyName":"account","keyNameLocation":"1201:7:57","keyType":{"id":10003,"name":"address","nodeType":"ElementaryTypeName","src":"1193:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1185:35:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":10004,"name":"uint256","nodeType":"ElementaryTypeName","src":"1212:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":10012,"mutability":"mutable","name":"_allowances","nameLocation":"1317:11:57","nodeType":"VariableDeclaration","scope":10498,"src":"1245:83:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":10011,"keyName":"account","keyNameLocation":"1261:7:57","keyType":{"id":10007,"name":"address","nodeType":"ElementaryTypeName","src":"1253:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1245:63:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":10010,"keyName":"spender","keyNameLocation":"1288:7:57","keyType":{"id":10008,"name":"address","nodeType":"ElementaryTypeName","src":"1280:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1272:35:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":10009,"name":"uint256","nodeType":"ElementaryTypeName","src":"1299:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"constant":false,"id":10014,"mutability":"mutable","name":"_totalSupply","nameLocation":"1351:12:57","nodeType":"VariableDeclaration","scope":10498,"src":"1335:28:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10013,"name":"uint256","nodeType":"ElementaryTypeName","src":"1335:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":10016,"mutability":"mutable","name":"_name","nameLocation":"1385:5:57","nodeType":"VariableDeclaration","scope":10498,"src":"1370:20:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":10015,"name":"string","nodeType":"ElementaryTypeName","src":"1370:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":10018,"mutability":"mutable","name":"_symbol","nameLocation":"1411:7:57","nodeType":"VariableDeclaration","scope":10498,"src":"1396:22:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":10017,"name":"string","nodeType":"ElementaryTypeName","src":"1396:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":10034,"nodeType":"Block","src":"1638:57:57","statements":[{"expression":{"id":10028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10026,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10016,"src":"1648:5:57","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10027,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10021,"src":"1656:5:57","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1648:13:57","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":10029,"nodeType":"ExpressionStatement","src":"1648:13:57"},{"expression":{"id":10032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10030,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10018,"src":"1671:7:57","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10031,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10023,"src":"1681:7:57","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1671:17:57","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":10033,"nodeType":"ExpressionStatement","src":"1671:17:57"}]},"documentation":{"id":10019,"nodeType":"StructuredDocumentation","src":"1425:152:57","text":" @dev Sets the values for {name} and {symbol}.\n Both values are immutable: they can only be set once during construction."},"id":10035,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10021,"mutability":"mutable","name":"name_","nameLocation":"1608:5:57","nodeType":"VariableDeclaration","scope":10035,"src":"1594:19:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10020,"name":"string","nodeType":"ElementaryTypeName","src":"1594:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":10023,"mutability":"mutable","name":"symbol_","nameLocation":"1629:7:57","nodeType":"VariableDeclaration","scope":10035,"src":"1615:21:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10022,"name":"string","nodeType":"ElementaryTypeName","src":"1615:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1593:44:57"},"returnParameters":{"id":10025,"nodeType":"ParameterList","parameters":[],"src":"1638:0:57"},"scope":10498,"src":"1582:113:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[10589],"body":{"id":10043,"nodeType":"Block","src":"1820:29:57","statements":[{"expression":{"id":10041,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10016,"src":"1837:5:57","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":10040,"id":10042,"nodeType":"Return","src":"1830:12:57"}]},"documentation":{"id":10036,"nodeType":"StructuredDocumentation","src":"1701:54:57","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":10044,"implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"1769:4:57","nodeType":"FunctionDefinition","parameters":{"id":10037,"nodeType":"ParameterList","parameters":[],"src":"1773:2:57"},"returnParameters":{"id":10040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10039,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10044,"src":"1805:13:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10038,"name":"string","nodeType":"ElementaryTypeName","src":"1805:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1804:15:57"},"scope":10498,"src":"1760:89:57","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10595],"body":{"id":10052,"nodeType":"Block","src":"2024:31:57","statements":[{"expression":{"id":10050,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10018,"src":"2041:7:57","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":10049,"id":10051,"nodeType":"Return","src":"2034:14:57"}]},"documentation":{"id":10045,"nodeType":"StructuredDocumentation","src":"1855:102:57","text":" @dev Returns the symbol of the token, usually a shorter version of the\n name."},"functionSelector":"95d89b41","id":10053,"implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"1971:6:57","nodeType":"FunctionDefinition","parameters":{"id":10046,"nodeType":"ParameterList","parameters":[],"src":"1977:2:57"},"returnParameters":{"id":10049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10048,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10053,"src":"2009:13:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10047,"name":"string","nodeType":"ElementaryTypeName","src":"2009:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2008:15:57"},"scope":10498,"src":"1962:93:57","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10601],"body":{"id":10061,"nodeType":"Block","src":"2744:26:57","statements":[{"expression":{"hexValue":"3138","id":10059,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2761:2:57","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"functionReturnParameters":10058,"id":10060,"nodeType":"Return","src":"2754:9:57"}]},"documentation":{"id":10054,"nodeType":"StructuredDocumentation","src":"2061:622:57","text":" @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5.05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the default value returned by this function, unless\n it's overridden.\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."},"functionSelector":"313ce567","id":10062,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"2697:8:57","nodeType":"FunctionDefinition","parameters":{"id":10055,"nodeType":"ParameterList","parameters":[],"src":"2705:2:57"},"returnParameters":{"id":10058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10057,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10062,"src":"2737:5:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":10056,"name":"uint8","nodeType":"ElementaryTypeName","src":"2737:5:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"2736:7:57"},"scope":10498,"src":"2688:82:57","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10525],"body":{"id":10070,"nodeType":"Block","src":"2864:36:57","statements":[{"expression":{"id":10068,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10014,"src":"2881:12:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10067,"id":10069,"nodeType":"Return","src":"2874:19:57"}]},"documentation":{"id":10063,"nodeType":"StructuredDocumentation","src":"2776:22:57","text":"@inheritdoc IERC20"},"functionSelector":"18160ddd","id":10071,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"2812:11:57","nodeType":"FunctionDefinition","parameters":{"id":10064,"nodeType":"ParameterList","parameters":[],"src":"2823:2:57"},"returnParameters":{"id":10067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10066,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10071,"src":"2855:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10065,"name":"uint256","nodeType":"ElementaryTypeName","src":"2855:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2854:9:57"},"scope":10498,"src":"2803:97:57","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10533],"body":{"id":10083,"nodeType":"Block","src":"3007:42:57","statements":[{"expression":{"baseExpression":{"id":10079,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10006,"src":"3024:9:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10081,"indexExpression":{"id":10080,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10074,"src":"3034:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3024:18:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10078,"id":10082,"nodeType":"Return","src":"3017:25:57"}]},"documentation":{"id":10072,"nodeType":"StructuredDocumentation","src":"2906:22:57","text":"@inheritdoc IERC20"},"functionSelector":"70a08231","id":10084,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"2942:9:57","nodeType":"FunctionDefinition","parameters":{"id":10075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10074,"mutability":"mutable","name":"account","nameLocation":"2960:7:57","nodeType":"VariableDeclaration","scope":10084,"src":"2952:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10073,"name":"address","nodeType":"ElementaryTypeName","src":"2952:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2951:17:57"},"returnParameters":{"id":10078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10077,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10084,"src":"2998:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10076,"name":"uint256","nodeType":"ElementaryTypeName","src":"2998:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2997:9:57"},"scope":10498,"src":"2933:116:57","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10543],"body":{"id":10107,"nodeType":"Block","src":"3319:103:57","statements":[{"assignments":[10095],"declarations":[{"constant":false,"id":10095,"mutability":"mutable","name":"owner","nameLocation":"3337:5:57","nodeType":"VariableDeclaration","scope":10107,"src":"3329:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10094,"name":"address","nodeType":"ElementaryTypeName","src":"3329:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":10098,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":10096,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12348,"src":"3345:10:57","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":10097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3345:12:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3329:28:57"},{"expression":{"arguments":[{"id":10100,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10095,"src":"3377:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10101,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10087,"src":"3384:2:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10102,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10089,"src":"3388:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10099,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10228,"src":"3367:9:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3367:27:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10104,"nodeType":"ExpressionStatement","src":"3367:27:57"},{"expression":{"hexValue":"74727565","id":10105,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3411:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10093,"id":10106,"nodeType":"Return","src":"3404:11:57"}]},"documentation":{"id":10085,"nodeType":"StructuredDocumentation","src":"3055:184:57","text":" @dev See {IERC20-transfer}.\n Requirements:\n - `to` cannot be the zero address.\n - the caller must have a balance of at least `value`."},"functionSelector":"a9059cbb","id":10108,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"3253:8:57","nodeType":"FunctionDefinition","parameters":{"id":10090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10087,"mutability":"mutable","name":"to","nameLocation":"3270:2:57","nodeType":"VariableDeclaration","scope":10108,"src":"3262:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10086,"name":"address","nodeType":"ElementaryTypeName","src":"3262:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10089,"mutability":"mutable","name":"value","nameLocation":"3282:5:57","nodeType":"VariableDeclaration","scope":10108,"src":"3274:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10088,"name":"uint256","nodeType":"ElementaryTypeName","src":"3274:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3261:27:57"},"returnParameters":{"id":10093,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10092,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10108,"src":"3313:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10091,"name":"bool","nodeType":"ElementaryTypeName","src":"3313:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3312:6:57"},"scope":10498,"src":"3244:178:57","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[10553],"body":{"id":10124,"nodeType":"Block","src":"3544:51:57","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":10118,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10012,"src":"3561:11:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":10120,"indexExpression":{"id":10119,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10111,"src":"3573:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3561:18:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10122,"indexExpression":{"id":10121,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10113,"src":"3580:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3561:27:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10117,"id":10123,"nodeType":"Return","src":"3554:34:57"}]},"documentation":{"id":10109,"nodeType":"StructuredDocumentation","src":"3428:22:57","text":"@inheritdoc IERC20"},"functionSelector":"dd62ed3e","id":10125,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"3464:9:57","nodeType":"FunctionDefinition","parameters":{"id":10114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10111,"mutability":"mutable","name":"owner","nameLocation":"3482:5:57","nodeType":"VariableDeclaration","scope":10125,"src":"3474:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10110,"name":"address","nodeType":"ElementaryTypeName","src":"3474:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10113,"mutability":"mutable","name":"spender","nameLocation":"3497:7:57","nodeType":"VariableDeclaration","scope":10125,"src":"3489:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10112,"name":"address","nodeType":"ElementaryTypeName","src":"3489:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3473:32:57"},"returnParameters":{"id":10117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10116,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10125,"src":"3535:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10115,"name":"uint256","nodeType":"ElementaryTypeName","src":"3535:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3534:9:57"},"scope":10498,"src":"3455:140:57","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10563],"body":{"id":10148,"nodeType":"Block","src":"3981:107:57","statements":[{"assignments":[10136],"declarations":[{"constant":false,"id":10136,"mutability":"mutable","name":"owner","nameLocation":"3999:5:57","nodeType":"VariableDeclaration","scope":10148,"src":"3991:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10135,"name":"address","nodeType":"ElementaryTypeName","src":"3991:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":10139,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":10137,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12348,"src":"4007:10:57","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":10138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4007:12:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3991:28:57"},{"expression":{"arguments":[{"id":10141,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10136,"src":"4038:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10142,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10128,"src":"4045:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10143,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10130,"src":"4054:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10140,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[10389,10449],"referencedDeclaration":10389,"src":"4029:8:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4029:31:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10145,"nodeType":"ExpressionStatement","src":"4029:31:57"},{"expression":{"hexValue":"74727565","id":10146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4077:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10134,"id":10147,"nodeType":"Return","src":"4070:11:57"}]},"documentation":{"id":10126,"nodeType":"StructuredDocumentation","src":"3601:296:57","text":" @dev See {IERC20-approve}.\n NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n `transferFrom`. This is semantically equivalent to an infinite approval.\n Requirements:\n - `spender` cannot be the zero address."},"functionSelector":"095ea7b3","id":10149,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"3911:7:57","nodeType":"FunctionDefinition","parameters":{"id":10131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10128,"mutability":"mutable","name":"spender","nameLocation":"3927:7:57","nodeType":"VariableDeclaration","scope":10149,"src":"3919:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10127,"name":"address","nodeType":"ElementaryTypeName","src":"3919:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10130,"mutability":"mutable","name":"value","nameLocation":"3944:5:57","nodeType":"VariableDeclaration","scope":10149,"src":"3936:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10129,"name":"uint256","nodeType":"ElementaryTypeName","src":"3936:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3918:32:57"},"returnParameters":{"id":10134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10133,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10149,"src":"3975:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10132,"name":"bool","nodeType":"ElementaryTypeName","src":"3975:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3974:6:57"},"scope":10498,"src":"3902:186:57","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[10575],"body":{"id":10180,"nodeType":"Block","src":"4773:151:57","statements":[{"assignments":[10162],"declarations":[{"constant":false,"id":10162,"mutability":"mutable","name":"spender","nameLocation":"4791:7:57","nodeType":"VariableDeclaration","scope":10180,"src":"4783:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10161,"name":"address","nodeType":"ElementaryTypeName","src":"4783:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":10165,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":10163,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12348,"src":"4801:10:57","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":10164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4801:12:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4783:30:57"},{"expression":{"arguments":[{"id":10167,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10152,"src":"4839:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10168,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10162,"src":"4845:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10169,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10156,"src":"4854:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10166,"name":"_spendAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10497,"src":"4823:15:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4823:37:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10171,"nodeType":"ExpressionStatement","src":"4823:37:57"},{"expression":{"arguments":[{"id":10173,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10152,"src":"4880:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10174,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10154,"src":"4886:2:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10175,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10156,"src":"4890:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10172,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10228,"src":"4870:9:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4870:26:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10177,"nodeType":"ExpressionStatement","src":"4870:26:57"},{"expression":{"hexValue":"74727565","id":10178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4913:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10160,"id":10179,"nodeType":"Return","src":"4906:11:57"}]},"documentation":{"id":10150,"nodeType":"StructuredDocumentation","src":"4094:581:57","text":" @dev See {IERC20-transferFrom}.\n Skips emitting an {Approval} event indicating an allowance update. This is not\n required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\n NOTE: Does not update the allowance if the current allowance\n is the maximum `uint256`.\n Requirements:\n - `from` and `to` cannot be the zero address.\n - `from` must have a balance of at least `value`.\n - the caller must have allowance for ``from``'s tokens of at least\n `value`."},"functionSelector":"23b872dd","id":10181,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"4689:12:57","nodeType":"FunctionDefinition","parameters":{"id":10157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10152,"mutability":"mutable","name":"from","nameLocation":"4710:4:57","nodeType":"VariableDeclaration","scope":10181,"src":"4702:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10151,"name":"address","nodeType":"ElementaryTypeName","src":"4702:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10154,"mutability":"mutable","name":"to","nameLocation":"4724:2:57","nodeType":"VariableDeclaration","scope":10181,"src":"4716:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10153,"name":"address","nodeType":"ElementaryTypeName","src":"4716:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10156,"mutability":"mutable","name":"value","nameLocation":"4736:5:57","nodeType":"VariableDeclaration","scope":10181,"src":"4728:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10155,"name":"uint256","nodeType":"ElementaryTypeName","src":"4728:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4701:41:57"},"returnParameters":{"id":10160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10159,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10181,"src":"4767:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10158,"name":"bool","nodeType":"ElementaryTypeName","src":"4767:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4766:6:57"},"scope":10498,"src":"4680:244:57","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":10227,"nodeType":"Block","src":"5366:231:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10191,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10184,"src":"5380:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10194,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5396:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10193,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5388:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10192,"name":"address","nodeType":"ElementaryTypeName","src":"5388:7:57","typeDescriptions":{}}},"id":10195,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5388:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5380:18:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10205,"nodeType":"IfStatement","src":"5376:86:57","trueBody":{"id":10204,"nodeType":"Block","src":"5400:62:57","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10200,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5448:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10199,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5440:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10198,"name":"address","nodeType":"ElementaryTypeName","src":"5440:7:57","typeDescriptions":{}}},"id":10201,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5440:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10197,"name":"ERC20InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9863,"src":"5421:18:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5421:30:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10203,"nodeType":"RevertStatement","src":"5414:37:57"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10206,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10186,"src":"5475:2:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10209,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5489:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10208,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5481:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10207,"name":"address","nodeType":"ElementaryTypeName","src":"5481:7:57","typeDescriptions":{}}},"id":10210,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5481:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5475:16:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10220,"nodeType":"IfStatement","src":"5471:86:57","trueBody":{"id":10219,"nodeType":"Block","src":"5493:64:57","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5543:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10214,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5535:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10213,"name":"address","nodeType":"ElementaryTypeName","src":"5535:7:57","typeDescriptions":{}}},"id":10216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5535:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10212,"name":"ERC20InvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9868,"src":"5514:20:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5514:32:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10218,"nodeType":"RevertStatement","src":"5507:39:57"}]}},{"expression":{"arguments":[{"id":10222,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10184,"src":"5574:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10223,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10186,"src":"5580:2:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10224,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10188,"src":"5584:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10221,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10305,"src":"5566:7:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5566:24:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10226,"nodeType":"ExpressionStatement","src":"5566:24:57"}]},"documentation":{"id":10182,"nodeType":"StructuredDocumentation","src":"4930:362:57","text":" @dev Moves a `value` amount of tokens from `from` to `to`.\n This internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n NOTE: This function is not virtual, {_update} should be overridden instead."},"id":10228,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"5306:9:57","nodeType":"FunctionDefinition","parameters":{"id":10189,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10184,"mutability":"mutable","name":"from","nameLocation":"5324:4:57","nodeType":"VariableDeclaration","scope":10228,"src":"5316:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10183,"name":"address","nodeType":"ElementaryTypeName","src":"5316:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10186,"mutability":"mutable","name":"to","nameLocation":"5338:2:57","nodeType":"VariableDeclaration","scope":10228,"src":"5330:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10185,"name":"address","nodeType":"ElementaryTypeName","src":"5330:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10188,"mutability":"mutable","name":"value","nameLocation":"5350:5:57","nodeType":"VariableDeclaration","scope":10228,"src":"5342:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10187,"name":"uint256","nodeType":"ElementaryTypeName","src":"5342:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5315:41:57"},"returnParameters":{"id":10190,"nodeType":"ParameterList","parameters":[],"src":"5366:0:57"},"scope":10498,"src":"5297:300:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10304,"nodeType":"Block","src":"5987:1032:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10238,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10231,"src":"6001:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10241,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6017:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10240,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6009:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10239,"name":"address","nodeType":"ElementaryTypeName","src":"6009:7:57","typeDescriptions":{}}},"id":10242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6009:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6001:18:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":10275,"nodeType":"Block","src":"6175:362:57","statements":[{"assignments":[10250],"declarations":[{"constant":false,"id":10250,"mutability":"mutable","name":"fromBalance","nameLocation":"6197:11:57","nodeType":"VariableDeclaration","scope":10275,"src":"6189:19:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10249,"name":"uint256","nodeType":"ElementaryTypeName","src":"6189:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10254,"initialValue":{"baseExpression":{"id":10251,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10006,"src":"6211:9:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10253,"indexExpression":{"id":10252,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10231,"src":"6221:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6211:15:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6189:37:57"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10255,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10250,"src":"6244:11:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":10256,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10235,"src":"6258:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6244:19:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10265,"nodeType":"IfStatement","src":"6240:115:57","trueBody":{"id":10264,"nodeType":"Block","src":"6265:90:57","statements":[{"errorCall":{"arguments":[{"id":10259,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10231,"src":"6315:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10260,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10250,"src":"6321:11:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10261,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10235,"src":"6334:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10258,"name":"ERC20InsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9858,"src":"6290:24:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":10262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6290:50:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10263,"nodeType":"RevertStatement","src":"6283:57:57"}]}},{"id":10274,"nodeType":"UncheckedBlock","src":"6368:159:57","statements":[{"expression":{"id":10272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10266,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10006,"src":"6475:9:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10268,"indexExpression":{"id":10267,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10231,"src":"6485:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6475:15:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10269,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10250,"src":"6493:11:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":10270,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10235,"src":"6507:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6493:19:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6475:37:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10273,"nodeType":"ExpressionStatement","src":"6475:37:57"}]}]},"id":10276,"nodeType":"IfStatement","src":"5997:540:57","trueBody":{"id":10248,"nodeType":"Block","src":"6021:148:57","statements":[{"expression":{"id":10246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10244,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10014,"src":"6137:12:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":10245,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10235,"src":"6153:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6137:21:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10247,"nodeType":"ExpressionStatement","src":"6137:21:57"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10277,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10233,"src":"6551:2:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6565:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10279,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6557:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10278,"name":"address","nodeType":"ElementaryTypeName","src":"6557:7:57","typeDescriptions":{}}},"id":10281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6557:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6551:16:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":10296,"nodeType":"Block","src":"6766:206:57","statements":[{"id":10295,"nodeType":"UncheckedBlock","src":"6780:182:57","statements":[{"expression":{"id":10293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10289,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10006,"src":"6925:9:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10291,"indexExpression":{"id":10290,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10233,"src":"6935:2:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6925:13:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":10292,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10235,"src":"6942:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6925:22:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10294,"nodeType":"ExpressionStatement","src":"6925:22:57"}]}]},"id":10297,"nodeType":"IfStatement","src":"6547:425:57","trueBody":{"id":10288,"nodeType":"Block","src":"6569:191:57","statements":[{"id":10287,"nodeType":"UncheckedBlock","src":"6583:167:57","statements":[{"expression":{"id":10285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10283,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10014,"src":"6714:12:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":10284,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10235,"src":"6730:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6714:21:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10286,"nodeType":"ExpressionStatement","src":"6714:21:57"}]}]}},{"eventCall":{"arguments":[{"id":10299,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10231,"src":"6996:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10300,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10233,"src":"7002:2:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10301,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10235,"src":"7006:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10298,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10510,"src":"6987:8:57","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6987:25:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10303,"nodeType":"EmitStatement","src":"6982:30:57"}]},"documentation":{"id":10229,"nodeType":"StructuredDocumentation","src":"5603:304:57","text":" @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n this function.\n Emits a {Transfer} event."},"id":10305,"implemented":true,"kind":"function","modifiers":[],"name":"_update","nameLocation":"5921:7:57","nodeType":"FunctionDefinition","parameters":{"id":10236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10231,"mutability":"mutable","name":"from","nameLocation":"5937:4:57","nodeType":"VariableDeclaration","scope":10305,"src":"5929:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10230,"name":"address","nodeType":"ElementaryTypeName","src":"5929:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10233,"mutability":"mutable","name":"to","nameLocation":"5951:2:57","nodeType":"VariableDeclaration","scope":10305,"src":"5943:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10232,"name":"address","nodeType":"ElementaryTypeName","src":"5943:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10235,"mutability":"mutable","name":"value","nameLocation":"5963:5:57","nodeType":"VariableDeclaration","scope":10305,"src":"5955:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10234,"name":"uint256","nodeType":"ElementaryTypeName","src":"5955:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5928:41:57"},"returnParameters":{"id":10237,"nodeType":"ParameterList","parameters":[],"src":"5987:0:57"},"scope":10498,"src":"5912:1107:57","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":10337,"nodeType":"Block","src":"7418:152:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10313,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10308,"src":"7432:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10316,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7451:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10315,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7443:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10314,"name":"address","nodeType":"ElementaryTypeName","src":"7443:7:57","typeDescriptions":{}}},"id":10317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7443:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7432:21:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10327,"nodeType":"IfStatement","src":"7428:91:57","trueBody":{"id":10326,"nodeType":"Block","src":"7455:64:57","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7505:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10321,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7497:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10320,"name":"address","nodeType":"ElementaryTypeName","src":"7497:7:57","typeDescriptions":{}}},"id":10323,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7497:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10319,"name":"ERC20InvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9868,"src":"7476:20:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7476:32:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10325,"nodeType":"RevertStatement","src":"7469:39:57"}]}},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":10331,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7544:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10330,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7536:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10329,"name":"address","nodeType":"ElementaryTypeName","src":"7536:7:57","typeDescriptions":{}}},"id":10332,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7536:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10333,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10308,"src":"7548:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10334,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10310,"src":"7557:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10328,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10305,"src":"7528:7:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7528:35:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10336,"nodeType":"ExpressionStatement","src":"7528:35:57"}]},"documentation":{"id":10306,"nodeType":"StructuredDocumentation","src":"7025:332:57","text":" @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n Relies on the `_update` mechanism\n Emits a {Transfer} event with `from` set to the zero address.\n NOTE: This function is not virtual, {_update} should be overridden instead."},"id":10338,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"7371:5:57","nodeType":"FunctionDefinition","parameters":{"id":10311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10308,"mutability":"mutable","name":"account","nameLocation":"7385:7:57","nodeType":"VariableDeclaration","scope":10338,"src":"7377:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10307,"name":"address","nodeType":"ElementaryTypeName","src":"7377:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10310,"mutability":"mutable","name":"value","nameLocation":"7402:5:57","nodeType":"VariableDeclaration","scope":10338,"src":"7394:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10309,"name":"uint256","nodeType":"ElementaryTypeName","src":"7394:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7376:32:57"},"returnParameters":{"id":10312,"nodeType":"ParameterList","parameters":[],"src":"7418:0:57"},"scope":10498,"src":"7362:208:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10370,"nodeType":"Block","src":"7944:150:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10346,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10341,"src":"7958:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10349,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7977:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10348,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7969:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10347,"name":"address","nodeType":"ElementaryTypeName","src":"7969:7:57","typeDescriptions":{}}},"id":10350,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7969:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7958:21:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10360,"nodeType":"IfStatement","src":"7954:89:57","trueBody":{"id":10359,"nodeType":"Block","src":"7981:62:57","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10355,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8029:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10354,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8021:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10353,"name":"address","nodeType":"ElementaryTypeName","src":"8021:7:57","typeDescriptions":{}}},"id":10356,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8021:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10352,"name":"ERC20InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9863,"src":"8002:18:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8002:30:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10358,"nodeType":"RevertStatement","src":"7995:37:57"}]}},{"expression":{"arguments":[{"id":10362,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10341,"src":"8060:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":10365,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8077:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10364,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8069:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10363,"name":"address","nodeType":"ElementaryTypeName","src":"8069:7:57","typeDescriptions":{}}},"id":10366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8069:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10367,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10343,"src":"8081:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10361,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10305,"src":"8052:7:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8052:35:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10369,"nodeType":"ExpressionStatement","src":"8052:35:57"}]},"documentation":{"id":10339,"nodeType":"StructuredDocumentation","src":"7576:307:57","text":" @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n Relies on the `_update` mechanism.\n Emits a {Transfer} event with `to` set to the zero address.\n NOTE: This function is not virtual, {_update} should be overridden instead"},"id":10371,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"7897:5:57","nodeType":"FunctionDefinition","parameters":{"id":10344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10341,"mutability":"mutable","name":"account","nameLocation":"7911:7:57","nodeType":"VariableDeclaration","scope":10371,"src":"7903:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10340,"name":"address","nodeType":"ElementaryTypeName","src":"7903:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10343,"mutability":"mutable","name":"value","nameLocation":"7928:5:57","nodeType":"VariableDeclaration","scope":10371,"src":"7920:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10342,"name":"uint256","nodeType":"ElementaryTypeName","src":"7920:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7902:32:57"},"returnParameters":{"id":10345,"nodeType":"ParameterList","parameters":[],"src":"7944:0:57"},"scope":10498,"src":"7888:206:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10388,"nodeType":"Block","src":"8704:54:57","statements":[{"expression":{"arguments":[{"id":10382,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10374,"src":"8723:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10383,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10376,"src":"8730:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10384,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10378,"src":"8739:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":10385,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8746:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":10381,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[10389,10449],"referencedDeclaration":10449,"src":"8714:8:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,bool)"}},"id":10386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8714:37:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10387,"nodeType":"ExpressionStatement","src":"8714:37:57"}]},"documentation":{"id":10372,"nodeType":"StructuredDocumentation","src":"8100:525:57","text":" @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address.\n Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument."},"id":10389,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"8639:8:57","nodeType":"FunctionDefinition","parameters":{"id":10379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10374,"mutability":"mutable","name":"owner","nameLocation":"8656:5:57","nodeType":"VariableDeclaration","scope":10389,"src":"8648:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10373,"name":"address","nodeType":"ElementaryTypeName","src":"8648:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10376,"mutability":"mutable","name":"spender","nameLocation":"8671:7:57","nodeType":"VariableDeclaration","scope":10389,"src":"8663:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10375,"name":"address","nodeType":"ElementaryTypeName","src":"8663:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10378,"mutability":"mutable","name":"value","nameLocation":"8688:5:57","nodeType":"VariableDeclaration","scope":10389,"src":"8680:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10377,"name":"uint256","nodeType":"ElementaryTypeName","src":"8680:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8647:47:57"},"returnParameters":{"id":10380,"nodeType":"ParameterList","parameters":[],"src":"8704:0:57"},"scope":10498,"src":"8630:128:57","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10448,"nodeType":"Block","src":"9703:334:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10401,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10392,"src":"9717:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10404,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9734:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10403,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9726:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10402,"name":"address","nodeType":"ElementaryTypeName","src":"9726:7:57","typeDescriptions":{}}},"id":10405,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9726:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9717:19:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10415,"nodeType":"IfStatement","src":"9713:89:57","trueBody":{"id":10414,"nodeType":"Block","src":"9738:64:57","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9788:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10409,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9780:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10408,"name":"address","nodeType":"ElementaryTypeName","src":"9780:7:57","typeDescriptions":{}}},"id":10411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9780:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10407,"name":"ERC20InvalidApprover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9882,"src":"9759:20:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9759:32:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10413,"nodeType":"RevertStatement","src":"9752:39:57"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10416,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10394,"src":"9815:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9834:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10418,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9826:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10417,"name":"address","nodeType":"ElementaryTypeName","src":"9826:7:57","typeDescriptions":{}}},"id":10420,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9826:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9815:21:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10430,"nodeType":"IfStatement","src":"9811:90:57","trueBody":{"id":10429,"nodeType":"Block","src":"9838:63:57","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10425,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9887:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10424,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9879:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10423,"name":"address","nodeType":"ElementaryTypeName","src":"9879:7:57","typeDescriptions":{}}},"id":10426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9879:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10422,"name":"ERC20InvalidSpender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9887,"src":"9859:19:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9859:31:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10428,"nodeType":"RevertStatement","src":"9852:38:57"}]}},{"expression":{"id":10437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":10431,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10012,"src":"9910:11:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":10434,"indexExpression":{"id":10432,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10392,"src":"9922:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9910:18:57","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10435,"indexExpression":{"id":10433,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10394,"src":"9929:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9910:27:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10436,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10396,"src":"9940:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9910:35:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10438,"nodeType":"ExpressionStatement","src":"9910:35:57"},{"condition":{"id":10439,"name":"emitEvent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10398,"src":"9959:9:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10447,"nodeType":"IfStatement","src":"9955:76:57","trueBody":{"id":10446,"nodeType":"Block","src":"9970:61:57","statements":[{"eventCall":{"arguments":[{"id":10441,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10392,"src":"9998:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10442,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10394,"src":"10005:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10443,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10396,"src":"10014:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10440,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10519,"src":"9989:8:57","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9989:31:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10445,"nodeType":"EmitStatement","src":"9984:36:57"}]}}]},"documentation":{"id":10390,"nodeType":"StructuredDocumentation","src":"8764:836:57","text":" @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\n `Approval` event during `transferFrom` operations.\n Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\n true using the following override:\n ```solidity\n function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n super._approve(owner, spender, value, true);\n }\n ```\n Requirements are the same as {_approve}."},"id":10449,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"9614:8:57","nodeType":"FunctionDefinition","parameters":{"id":10399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10392,"mutability":"mutable","name":"owner","nameLocation":"9631:5:57","nodeType":"VariableDeclaration","scope":10449,"src":"9623:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10391,"name":"address","nodeType":"ElementaryTypeName","src":"9623:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10394,"mutability":"mutable","name":"spender","nameLocation":"9646:7:57","nodeType":"VariableDeclaration","scope":10449,"src":"9638:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10393,"name":"address","nodeType":"ElementaryTypeName","src":"9638:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10396,"mutability":"mutable","name":"value","nameLocation":"9663:5:57","nodeType":"VariableDeclaration","scope":10449,"src":"9655:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10395,"name":"uint256","nodeType":"ElementaryTypeName","src":"9655:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10398,"mutability":"mutable","name":"emitEvent","nameLocation":"9675:9:57","nodeType":"VariableDeclaration","scope":10449,"src":"9670:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10397,"name":"bool","nodeType":"ElementaryTypeName","src":"9670:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9622:63:57"},"returnParameters":{"id":10400,"nodeType":"ParameterList","parameters":[],"src":"9703:0:57"},"scope":10498,"src":"9605:432:57","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":10496,"nodeType":"Block","src":"10408:387:57","statements":[{"assignments":[10460],"declarations":[{"constant":false,"id":10460,"mutability":"mutable","name":"currentAllowance","nameLocation":"10426:16:57","nodeType":"VariableDeclaration","scope":10496,"src":"10418:24:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10459,"name":"uint256","nodeType":"ElementaryTypeName","src":"10418:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10465,"initialValue":{"arguments":[{"id":10462,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10452,"src":"10455:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10463,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10454,"src":"10462:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":10461,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10125,"src":"10445:9:57","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":10464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10445:25:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10418:52:57"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10466,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10460,"src":"10484:16:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"arguments":[{"id":10469,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10508:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":10468,"name":"uint256","nodeType":"ElementaryTypeName","src":"10508:7:57","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":10467,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10503:4:57","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10503:13:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":10471,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10517:3:57","memberName":"max","nodeType":"MemberAccess","src":"10503:17:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10484:36:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10495,"nodeType":"IfStatement","src":"10480:309:57","trueBody":{"id":10494,"nodeType":"Block","src":"10522:267:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10473,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10460,"src":"10540:16:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":10474,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10456,"src":"10559:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10540:24:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10483,"nodeType":"IfStatement","src":"10536:130:57","trueBody":{"id":10482,"nodeType":"Block","src":"10566:100:57","statements":[{"errorCall":{"arguments":[{"id":10477,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10454,"src":"10618:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10478,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10460,"src":"10627:16:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10479,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10456,"src":"10645:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10476,"name":"ERC20InsufficientAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9877,"src":"10591:26:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":10480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10591:60:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10481,"nodeType":"RevertStatement","src":"10584:67:57"}]}},{"id":10493,"nodeType":"UncheckedBlock","src":"10679:100:57","statements":[{"expression":{"arguments":[{"id":10485,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10452,"src":"10716:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10486,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10454,"src":"10723:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10487,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10460,"src":"10732:16:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":10488,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10456,"src":"10751:5:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10732:24:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":10490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10758:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":10484,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[10389,10449],"referencedDeclaration":10449,"src":"10707:8:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,bool)"}},"id":10491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10707:57:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10492,"nodeType":"ExpressionStatement","src":"10707:57:57"}]}]}}]},"documentation":{"id":10450,"nodeType":"StructuredDocumentation","src":"10043:271:57","text":" @dev Updates `owner`'s allowance for `spender` based on spent `value`.\n Does not update the allowance value in case of infinite allowance.\n Revert if not enough allowance is available.\n Does not emit an {Approval} event."},"id":10497,"implemented":true,"kind":"function","modifiers":[],"name":"_spendAllowance","nameLocation":"10328:15:57","nodeType":"FunctionDefinition","parameters":{"id":10457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10452,"mutability":"mutable","name":"owner","nameLocation":"10352:5:57","nodeType":"VariableDeclaration","scope":10497,"src":"10344:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10451,"name":"address","nodeType":"ElementaryTypeName","src":"10344:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10454,"mutability":"mutable","name":"spender","nameLocation":"10367:7:57","nodeType":"VariableDeclaration","scope":10497,"src":"10359:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10453,"name":"address","nodeType":"ElementaryTypeName","src":"10359:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10456,"mutability":"mutable","name":"value","nameLocation":"10384:5:57","nodeType":"VariableDeclaration","scope":10497,"src":"10376:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10455,"name":"uint256","nodeType":"ElementaryTypeName","src":"10376:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10343:47:57"},"returnParameters":{"id":10458,"nodeType":"ParameterList","parameters":[],"src":"10408:0:57"},"scope":10498,"src":"10319:476:57","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":10499,"src":"1106:9691:57","usedErrors":[9858,9863,9868,9877,9882,9887],"usedEvents":[10510,10519]}],"src":"105:10693:57"},"id":57},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[10576]},"id":10577,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10500,"literals":["solidity",">=","0.4",".16"],"nodeType":"PragmaDirective","src":"106:25:58"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":10501,"nodeType":"StructuredDocumentation","src":"133:71:58","text":" @dev Interface of the ERC-20 standard as defined in the ERC."},"fullyImplemented":false,"id":10576,"linearizedBaseContracts":[10576],"name":"IERC20","nameLocation":"215:6:58","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":10502,"nodeType":"StructuredDocumentation","src":"228:158:58","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":10510,"name":"Transfer","nameLocation":"397:8:58","nodeType":"EventDefinition","parameters":{"id":10509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10504,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"422:4:58","nodeType":"VariableDeclaration","scope":10510,"src":"406:20:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10503,"name":"address","nodeType":"ElementaryTypeName","src":"406:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10506,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"444:2:58","nodeType":"VariableDeclaration","scope":10510,"src":"428:18:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10505,"name":"address","nodeType":"ElementaryTypeName","src":"428:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10508,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"456:5:58","nodeType":"VariableDeclaration","scope":10510,"src":"448:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10507,"name":"uint256","nodeType":"ElementaryTypeName","src":"448:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"405:57:58"},"src":"391:72:58"},{"anonymous":false,"documentation":{"id":10511,"nodeType":"StructuredDocumentation","src":"469:148:58","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":10519,"name":"Approval","nameLocation":"628:8:58","nodeType":"EventDefinition","parameters":{"id":10518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10513,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"653:5:58","nodeType":"VariableDeclaration","scope":10519,"src":"637:21:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10512,"name":"address","nodeType":"ElementaryTypeName","src":"637:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10515,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"676:7:58","nodeType":"VariableDeclaration","scope":10519,"src":"660:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10514,"name":"address","nodeType":"ElementaryTypeName","src":"660:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10517,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"693:5:58","nodeType":"VariableDeclaration","scope":10519,"src":"685:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10516,"name":"uint256","nodeType":"ElementaryTypeName","src":"685:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"636:63:58"},"src":"622:78:58"},{"documentation":{"id":10520,"nodeType":"StructuredDocumentation","src":"706:65:58","text":" @dev Returns the value of tokens in existence."},"functionSelector":"18160ddd","id":10525,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"785:11:58","nodeType":"FunctionDefinition","parameters":{"id":10521,"nodeType":"ParameterList","parameters":[],"src":"796:2:58"},"returnParameters":{"id":10524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10523,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10525,"src":"822:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10522,"name":"uint256","nodeType":"ElementaryTypeName","src":"822:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"821:9:58"},"scope":10576,"src":"776:55:58","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10526,"nodeType":"StructuredDocumentation","src":"837:71:58","text":" @dev Returns the value of tokens owned by `account`."},"functionSelector":"70a08231","id":10533,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"922:9:58","nodeType":"FunctionDefinition","parameters":{"id":10529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10528,"mutability":"mutable","name":"account","nameLocation":"940:7:58","nodeType":"VariableDeclaration","scope":10533,"src":"932:15:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10527,"name":"address","nodeType":"ElementaryTypeName","src":"932:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"931:17:58"},"returnParameters":{"id":10532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10531,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10533,"src":"972:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10530,"name":"uint256","nodeType":"ElementaryTypeName","src":"972:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"971:9:58"},"scope":10576,"src":"913:68:58","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10534,"nodeType":"StructuredDocumentation","src":"987:213:58","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":10543,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1214:8:58","nodeType":"FunctionDefinition","parameters":{"id":10539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10536,"mutability":"mutable","name":"to","nameLocation":"1231:2:58","nodeType":"VariableDeclaration","scope":10543,"src":"1223:10:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10535,"name":"address","nodeType":"ElementaryTypeName","src":"1223:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10538,"mutability":"mutable","name":"value","nameLocation":"1243:5:58","nodeType":"VariableDeclaration","scope":10543,"src":"1235:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10537,"name":"uint256","nodeType":"ElementaryTypeName","src":"1235:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1222:27:58"},"returnParameters":{"id":10542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10541,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10543,"src":"1268:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10540,"name":"bool","nodeType":"ElementaryTypeName","src":"1268:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1267:6:58"},"scope":10576,"src":"1205:69:58","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":10544,"nodeType":"StructuredDocumentation","src":"1280:264:58","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":10553,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1558:9:58","nodeType":"FunctionDefinition","parameters":{"id":10549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10546,"mutability":"mutable","name":"owner","nameLocation":"1576:5:58","nodeType":"VariableDeclaration","scope":10553,"src":"1568:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10545,"name":"address","nodeType":"ElementaryTypeName","src":"1568:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10548,"mutability":"mutable","name":"spender","nameLocation":"1591:7:58","nodeType":"VariableDeclaration","scope":10553,"src":"1583:15:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10547,"name":"address","nodeType":"ElementaryTypeName","src":"1583:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1567:32:58"},"returnParameters":{"id":10552,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10551,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10553,"src":"1623:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10550,"name":"uint256","nodeType":"ElementaryTypeName","src":"1623:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1622:9:58"},"scope":10576,"src":"1549:83:58","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10554,"nodeType":"StructuredDocumentation","src":"1638:667:58","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":10563,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2319:7:58","nodeType":"FunctionDefinition","parameters":{"id":10559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10556,"mutability":"mutable","name":"spender","nameLocation":"2335:7:58","nodeType":"VariableDeclaration","scope":10563,"src":"2327:15:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10555,"name":"address","nodeType":"ElementaryTypeName","src":"2327:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10558,"mutability":"mutable","name":"value","nameLocation":"2352:5:58","nodeType":"VariableDeclaration","scope":10563,"src":"2344:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10557,"name":"uint256","nodeType":"ElementaryTypeName","src":"2344:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2326:32:58"},"returnParameters":{"id":10562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10561,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10563,"src":"2377:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10560,"name":"bool","nodeType":"ElementaryTypeName","src":"2377:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2376:6:58"},"scope":10576,"src":"2310:73:58","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":10564,"nodeType":"StructuredDocumentation","src":"2389:297:58","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":10575,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2700:12:58","nodeType":"FunctionDefinition","parameters":{"id":10571,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10566,"mutability":"mutable","name":"from","nameLocation":"2721:4:58","nodeType":"VariableDeclaration","scope":10575,"src":"2713:12:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10565,"name":"address","nodeType":"ElementaryTypeName","src":"2713:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10568,"mutability":"mutable","name":"to","nameLocation":"2735:2:58","nodeType":"VariableDeclaration","scope":10575,"src":"2727:10:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10567,"name":"address","nodeType":"ElementaryTypeName","src":"2727:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10570,"mutability":"mutable","name":"value","nameLocation":"2747:5:58","nodeType":"VariableDeclaration","scope":10575,"src":"2739:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10569,"name":"uint256","nodeType":"ElementaryTypeName","src":"2739:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2712:41:58"},"returnParameters":{"id":10574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10573,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10575,"src":"2772:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10572,"name":"bool","nodeType":"ElementaryTypeName","src":"2772:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2771:6:58"},"scope":10576,"src":"2691:87:58","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":10577,"src":"205:2575:58","usedErrors":[],"usedEvents":[10510,10519]}],"src":"106:2675:58"},"id":58},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","exportedSymbols":{"IERC20":[10576],"IERC20Metadata":[10602]},"id":10603,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10578,"literals":["solidity",">=","0.6",".2"],"nodeType":"PragmaDirective","src":"125:24:59"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":10580,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10603,"sourceUnit":10577,"src":"151:37:59","symbolAliases":[{"foreign":{"id":10579,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"159:6:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":10582,"name":"IERC20","nameLocations":["306:6:59"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"306:6:59"},"id":10583,"nodeType":"InheritanceSpecifier","src":"306:6:59"}],"canonicalName":"IERC20Metadata","contractDependencies":[],"contractKind":"interface","documentation":{"id":10581,"nodeType":"StructuredDocumentation","src":"190:87:59","text":" @dev Interface for the optional metadata functions from the ERC-20 standard."},"fullyImplemented":false,"id":10602,"linearizedBaseContracts":[10602,10576],"name":"IERC20Metadata","nameLocation":"288:14:59","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":10584,"nodeType":"StructuredDocumentation","src":"319:54:59","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":10589,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"387:4:59","nodeType":"FunctionDefinition","parameters":{"id":10585,"nodeType":"ParameterList","parameters":[],"src":"391:2:59"},"returnParameters":{"id":10588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10587,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10589,"src":"417:13:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10586,"name":"string","nodeType":"ElementaryTypeName","src":"417:6:59","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"416:15:59"},"scope":10602,"src":"378:54:59","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10590,"nodeType":"StructuredDocumentation","src":"438:56:59","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":10595,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"508:6:59","nodeType":"FunctionDefinition","parameters":{"id":10591,"nodeType":"ParameterList","parameters":[],"src":"514:2:59"},"returnParameters":{"id":10594,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10593,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10595,"src":"540:13:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10592,"name":"string","nodeType":"ElementaryTypeName","src":"540:6:59","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"539:15:59"},"scope":10602,"src":"499:56:59","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10596,"nodeType":"StructuredDocumentation","src":"561:65:59","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":10601,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"640:8:59","nodeType":"FunctionDefinition","parameters":{"id":10597,"nodeType":"ParameterList","parameters":[],"src":"648:2:59"},"returnParameters":{"id":10600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10599,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10601,"src":"674:5:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":10598,"name":"uint8","nodeType":"ElementaryTypeName","src":"674:5:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"673:7:59"},"scope":10602,"src":"631:50:59","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":10603,"src":"278:405:59","usedErrors":[],"usedEvents":[10510,10519]}],"src":"125:559:59"},"id":59},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","exportedSymbols":{"IERC1363":[9668],"IERC20":[10576],"SafeERC20":[11066]},"id":11067,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10604,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"115:24:60"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":10606,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11067,"sourceUnit":10577,"src":"141:37:60","symbolAliases":[{"foreign":{"id":10605,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"149:6:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1363.sol","file":"../../../interfaces/IERC1363.sol","id":10608,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11067,"sourceUnit":9669,"src":"179:58:60","symbolAliases":[{"foreign":{"id":10607,"name":"IERC1363","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9668,"src":"187:8:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":10609,"nodeType":"StructuredDocumentation","src":"239:458:60","text":" @title SafeERC20\n @dev Wrappers around ERC-20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."},"fullyImplemented":true,"id":11066,"linearizedBaseContracts":[11066],"name":"SafeERC20","nameLocation":"706:9:60","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":10610,"nodeType":"StructuredDocumentation","src":"722:65:60","text":" @dev An operation with an ERC-20 token failed."},"errorSelector":"5274afe7","id":10614,"name":"SafeERC20FailedOperation","nameLocation":"798:24:60","nodeType":"ErrorDefinition","parameters":{"id":10613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10612,"mutability":"mutable","name":"token","nameLocation":"831:5:60","nodeType":"VariableDeclaration","scope":10614,"src":"823:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10611,"name":"address","nodeType":"ElementaryTypeName","src":"823:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"822:15:60"},"src":"792:46:60"},{"documentation":{"id":10615,"nodeType":"StructuredDocumentation","src":"844:71:60","text":" @dev Indicates a failed `decreaseAllowance` request."},"errorSelector":"e570110f","id":10623,"name":"SafeERC20FailedDecreaseAllowance","nameLocation":"926:32:60","nodeType":"ErrorDefinition","parameters":{"id":10622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10617,"mutability":"mutable","name":"spender","nameLocation":"967:7:60","nodeType":"VariableDeclaration","scope":10623,"src":"959:15:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10616,"name":"address","nodeType":"ElementaryTypeName","src":"959:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10619,"mutability":"mutable","name":"currentAllowance","nameLocation":"984:16:60","nodeType":"VariableDeclaration","scope":10623,"src":"976:24:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10618,"name":"uint256","nodeType":"ElementaryTypeName","src":"976:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10621,"mutability":"mutable","name":"requestedDecrease","nameLocation":"1010:17:60","nodeType":"VariableDeclaration","scope":10623,"src":"1002:25:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10620,"name":"uint256","nodeType":"ElementaryTypeName","src":"1002:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"958:70:60"},"src":"920:109:60"},{"body":{"id":10646,"nodeType":"Block","src":"1291:88:60","statements":[{"expression":{"arguments":[{"id":10635,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10627,"src":"1321:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":10638,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10627,"src":"1343:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":10639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1349:8:60","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":10543,"src":"1343:14:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":10640,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10629,"src":"1360:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10641,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10631,"src":"1364:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10642,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1359:11:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":10636,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1328:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10637,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1332:10:60","memberName":"encodeCall","nodeType":"MemberAccess","src":"1328:14:60","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1328:43:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10634,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11024,"src":"1301:19:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":10644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1301:71:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10645,"nodeType":"ExpressionStatement","src":"1301:71:60"}]},"documentation":{"id":10624,"nodeType":"StructuredDocumentation","src":"1035:179:60","text":" @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":10647,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"1228:12:60","nodeType":"FunctionDefinition","parameters":{"id":10632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10627,"mutability":"mutable","name":"token","nameLocation":"1248:5:60","nodeType":"VariableDeclaration","scope":10647,"src":"1241:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":10626,"nodeType":"UserDefinedTypeName","pathNode":{"id":10625,"name":"IERC20","nameLocations":["1241:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1241:6:60"},"referencedDeclaration":10576,"src":"1241:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10629,"mutability":"mutable","name":"to","nameLocation":"1263:2:60","nodeType":"VariableDeclaration","scope":10647,"src":"1255:10:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10628,"name":"address","nodeType":"ElementaryTypeName","src":"1255:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10631,"mutability":"mutable","name":"value","nameLocation":"1275:5:60","nodeType":"VariableDeclaration","scope":10647,"src":"1267:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10630,"name":"uint256","nodeType":"ElementaryTypeName","src":"1267:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1240:41:60"},"returnParameters":{"id":10633,"nodeType":"ParameterList","parameters":[],"src":"1291:0:60"},"scope":11066,"src":"1219:160:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10673,"nodeType":"Block","src":"1708:98:60","statements":[{"expression":{"arguments":[{"id":10661,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10651,"src":"1738:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":10664,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10651,"src":"1760:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":10665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1766:12:60","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":10575,"src":"1760:18:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},{"components":[{"id":10666,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10653,"src":"1781:4:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10667,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10655,"src":"1787:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10668,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10657,"src":"1791:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10669,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1780:17:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}],"expression":{"id":10662,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1745:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10663,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1749:10:60","memberName":"encodeCall","nodeType":"MemberAccess","src":"1745:14:60","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1745:53:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10660,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11024,"src":"1718:19:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":10671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1718:81:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10672,"nodeType":"ExpressionStatement","src":"1718:81:60"}]},"documentation":{"id":10648,"nodeType":"StructuredDocumentation","src":"1385:228:60","text":" @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n calling contract. If `token` returns no value, non-reverting calls are assumed to be successful."},"id":10674,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"1627:16:60","nodeType":"FunctionDefinition","parameters":{"id":10658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10651,"mutability":"mutable","name":"token","nameLocation":"1651:5:60","nodeType":"VariableDeclaration","scope":10674,"src":"1644:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":10650,"nodeType":"UserDefinedTypeName","pathNode":{"id":10649,"name":"IERC20","nameLocations":["1644:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1644:6:60"},"referencedDeclaration":10576,"src":"1644:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10653,"mutability":"mutable","name":"from","nameLocation":"1666:4:60","nodeType":"VariableDeclaration","scope":10674,"src":"1658:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10652,"name":"address","nodeType":"ElementaryTypeName","src":"1658:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10655,"mutability":"mutable","name":"to","nameLocation":"1680:2:60","nodeType":"VariableDeclaration","scope":10674,"src":"1672:10:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10654,"name":"address","nodeType":"ElementaryTypeName","src":"1672:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10657,"mutability":"mutable","name":"value","nameLocation":"1692:5:60","nodeType":"VariableDeclaration","scope":10674,"src":"1684:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10656,"name":"uint256","nodeType":"ElementaryTypeName","src":"1684:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1643:55:60"},"returnParameters":{"id":10659,"nodeType":"ParameterList","parameters":[],"src":"1708:0:60"},"scope":11066,"src":"1618:188:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10699,"nodeType":"Block","src":"2033:99:60","statements":[{"expression":{"arguments":[{"id":10688,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10678,"src":"2074:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":10691,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10678,"src":"2096:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":10692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2102:8:60","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":10543,"src":"2096:14:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":10693,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10680,"src":"2113:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10694,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10682,"src":"2117:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10695,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2112:11:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":10689,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2081:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10690,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2085:10:60","memberName":"encodeCall","nodeType":"MemberAccess","src":"2081:14:60","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2081:43:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10687,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11065,"src":"2050:23:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":10697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2050:75:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":10686,"id":10698,"nodeType":"Return","src":"2043:82:60"}]},"documentation":{"id":10675,"nodeType":"StructuredDocumentation","src":"1812:126:60","text":" @dev Variant of {safeTransfer} that returns a bool instead of reverting if the operation is not successful."},"id":10700,"implemented":true,"kind":"function","modifiers":[],"name":"trySafeTransfer","nameLocation":"1952:15:60","nodeType":"FunctionDefinition","parameters":{"id":10683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10678,"mutability":"mutable","name":"token","nameLocation":"1975:5:60","nodeType":"VariableDeclaration","scope":10700,"src":"1968:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":10677,"nodeType":"UserDefinedTypeName","pathNode":{"id":10676,"name":"IERC20","nameLocations":["1968:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1968:6:60"},"referencedDeclaration":10576,"src":"1968:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10680,"mutability":"mutable","name":"to","nameLocation":"1990:2:60","nodeType":"VariableDeclaration","scope":10700,"src":"1982:10:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10679,"name":"address","nodeType":"ElementaryTypeName","src":"1982:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10682,"mutability":"mutable","name":"value","nameLocation":"2002:5:60","nodeType":"VariableDeclaration","scope":10700,"src":"1994:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10681,"name":"uint256","nodeType":"ElementaryTypeName","src":"1994:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1967:41:60"},"returnParameters":{"id":10686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10685,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10700,"src":"2027:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10684,"name":"bool","nodeType":"ElementaryTypeName","src":"2027:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2026:6:60"},"scope":11066,"src":"1943:189:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10728,"nodeType":"Block","src":"2381:109:60","statements":[{"expression":{"arguments":[{"id":10716,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10704,"src":"2422:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":10719,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10704,"src":"2444:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":10720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2450:12:60","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":10575,"src":"2444:18:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},{"components":[{"id":10721,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10706,"src":"2465:4:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10722,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10708,"src":"2471:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10723,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10710,"src":"2475:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10724,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2464:17:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}],"expression":{"id":10717,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2429:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10718,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2433:10:60","memberName":"encodeCall","nodeType":"MemberAccess","src":"2429:14:60","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2429:53:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10715,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11065,"src":"2398:23:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":10726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2398:85:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":10714,"id":10727,"nodeType":"Return","src":"2391:92:60"}]},"documentation":{"id":10701,"nodeType":"StructuredDocumentation","src":"2138:130:60","text":" @dev Variant of {safeTransferFrom} that returns a bool instead of reverting if the operation is not successful."},"id":10729,"implemented":true,"kind":"function","modifiers":[],"name":"trySafeTransferFrom","nameLocation":"2282:19:60","nodeType":"FunctionDefinition","parameters":{"id":10711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10704,"mutability":"mutable","name":"token","nameLocation":"2309:5:60","nodeType":"VariableDeclaration","scope":10729,"src":"2302:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":10703,"nodeType":"UserDefinedTypeName","pathNode":{"id":10702,"name":"IERC20","nameLocations":["2302:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2302:6:60"},"referencedDeclaration":10576,"src":"2302:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10706,"mutability":"mutable","name":"from","nameLocation":"2324:4:60","nodeType":"VariableDeclaration","scope":10729,"src":"2316:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10705,"name":"address","nodeType":"ElementaryTypeName","src":"2316:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10708,"mutability":"mutable","name":"to","nameLocation":"2338:2:60","nodeType":"VariableDeclaration","scope":10729,"src":"2330:10:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10707,"name":"address","nodeType":"ElementaryTypeName","src":"2330:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10710,"mutability":"mutable","name":"value","nameLocation":"2350:5:60","nodeType":"VariableDeclaration","scope":10729,"src":"2342:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10709,"name":"uint256","nodeType":"ElementaryTypeName","src":"2342:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2301:55:60"},"returnParameters":{"id":10714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10713,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10729,"src":"2375:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10712,"name":"bool","nodeType":"ElementaryTypeName","src":"2375:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2374:6:60"},"scope":11066,"src":"2273:217:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10759,"nodeType":"Block","src":"3232:139:60","statements":[{"assignments":[10741],"declarations":[{"constant":false,"id":10741,"mutability":"mutable","name":"oldAllowance","nameLocation":"3250:12:60","nodeType":"VariableDeclaration","scope":10759,"src":"3242:20:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10740,"name":"uint256","nodeType":"ElementaryTypeName","src":"3242:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10750,"initialValue":{"arguments":[{"arguments":[{"id":10746,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3289:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$11066","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$11066","typeString":"library SafeERC20"}],"id":10745,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3281:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10744,"name":"address","nodeType":"ElementaryTypeName","src":"3281:7:60","typeDescriptions":{}}},"id":10747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3281:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10748,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10735,"src":"3296:7:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10742,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10733,"src":"3265:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":10743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3271:9:60","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":10553,"src":"3265:15:60","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":10749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3265:39:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3242:62:60"},{"expression":{"arguments":[{"id":10752,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10733,"src":"3327:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":10753,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10735,"src":"3334:7:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10754,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10741,"src":"3343:12:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":10755,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10737,"src":"3358:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3343:20:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10751,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10850,"src":"3314:12:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":10757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3314:50:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10758,"nodeType":"ExpressionStatement","src":"3314:50:60"}]},"documentation":{"id":10730,"nodeType":"StructuredDocumentation","src":"2496:645:60","text":" @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful.\n IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior."},"id":10760,"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"3155:21:60","nodeType":"FunctionDefinition","parameters":{"id":10738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10733,"mutability":"mutable","name":"token","nameLocation":"3184:5:60","nodeType":"VariableDeclaration","scope":10760,"src":"3177:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":10732,"nodeType":"UserDefinedTypeName","pathNode":{"id":10731,"name":"IERC20","nameLocations":["3177:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3177:6:60"},"referencedDeclaration":10576,"src":"3177:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10735,"mutability":"mutable","name":"spender","nameLocation":"3199:7:60","nodeType":"VariableDeclaration","scope":10760,"src":"3191:15:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10734,"name":"address","nodeType":"ElementaryTypeName","src":"3191:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10737,"mutability":"mutable","name":"value","nameLocation":"3216:5:60","nodeType":"VariableDeclaration","scope":10760,"src":"3208:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10736,"name":"uint256","nodeType":"ElementaryTypeName","src":"3208:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3176:46:60"},"returnParameters":{"id":10739,"nodeType":"ParameterList","parameters":[],"src":"3232:0:60"},"scope":11066,"src":"3146:225:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10802,"nodeType":"Block","src":"4137:370:60","statements":[{"id":10801,"nodeType":"UncheckedBlock","src":"4147:354:60","statements":[{"assignments":[10772],"declarations":[{"constant":false,"id":10772,"mutability":"mutable","name":"currentAllowance","nameLocation":"4179:16:60","nodeType":"VariableDeclaration","scope":10801,"src":"4171:24:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10771,"name":"uint256","nodeType":"ElementaryTypeName","src":"4171:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10781,"initialValue":{"arguments":[{"arguments":[{"id":10777,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4222:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$11066","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$11066","typeString":"library SafeERC20"}],"id":10776,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4214:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10775,"name":"address","nodeType":"ElementaryTypeName","src":"4214:7:60","typeDescriptions":{}}},"id":10778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4214:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10779,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10766,"src":"4229:7:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10773,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10764,"src":"4198:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":10774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4204:9:60","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":10553,"src":"4198:15:60","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":10780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4198:39:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4171:66:60"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10782,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10772,"src":"4255:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":10783,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10768,"src":"4274:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4255:36:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10792,"nodeType":"IfStatement","src":"4251:160:60","trueBody":{"id":10791,"nodeType":"Block","src":"4293:118:60","statements":[{"errorCall":{"arguments":[{"id":10786,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10766,"src":"4351:7:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10787,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10772,"src":"4360:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10788,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10768,"src":"4378:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10785,"name":"SafeERC20FailedDecreaseAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10623,"src":"4318:32:60","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":10789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4318:78:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10790,"nodeType":"RevertStatement","src":"4311:85:60"}]}},{"expression":{"arguments":[{"id":10794,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10764,"src":"4437:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":10795,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10766,"src":"4444:7:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10796,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10772,"src":"4453:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":10797,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10768,"src":"4472:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4453:36:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10793,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10850,"src":"4424:12:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":10799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4424:66:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10800,"nodeType":"ExpressionStatement","src":"4424:66:60"}]}]},"documentation":{"id":10761,"nodeType":"StructuredDocumentation","src":"3377:657:60","text":" @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n value, non-reverting calls are assumed to be successful.\n IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior."},"id":10803,"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"4048:21:60","nodeType":"FunctionDefinition","parameters":{"id":10769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10764,"mutability":"mutable","name":"token","nameLocation":"4077:5:60","nodeType":"VariableDeclaration","scope":10803,"src":"4070:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":10763,"nodeType":"UserDefinedTypeName","pathNode":{"id":10762,"name":"IERC20","nameLocations":["4070:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4070:6:60"},"referencedDeclaration":10576,"src":"4070:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10766,"mutability":"mutable","name":"spender","nameLocation":"4092:7:60","nodeType":"VariableDeclaration","scope":10803,"src":"4084:15:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10765,"name":"address","nodeType":"ElementaryTypeName","src":"4084:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10768,"mutability":"mutable","name":"requestedDecrease","nameLocation":"4109:17:60","nodeType":"VariableDeclaration","scope":10803,"src":"4101:25:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10767,"name":"uint256","nodeType":"ElementaryTypeName","src":"4101:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4069:58:60"},"returnParameters":{"id":10770,"nodeType":"ParameterList","parameters":[],"src":"4137:0:60"},"scope":11066,"src":"4039:468:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10849,"nodeType":"Block","src":"5161:303:60","statements":[{"assignments":[10815],"declarations":[{"constant":false,"id":10815,"mutability":"mutable","name":"approvalCall","nameLocation":"5184:12:60","nodeType":"VariableDeclaration","scope":10849,"src":"5171:25:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10814,"name":"bytes","nodeType":"ElementaryTypeName","src":"5171:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":10824,"initialValue":{"arguments":[{"expression":{"id":10818,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10807,"src":"5214:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":10819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5220:7:60","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":10563,"src":"5214:13:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":10820,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10809,"src":"5230:7:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10821,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10811,"src":"5239:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10822,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5229:16:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":10816,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5199:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10817,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5203:10:60","memberName":"encodeCall","nodeType":"MemberAccess","src":"5199:14:60","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5199:47:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"5171:75:60"},{"condition":{"id":10829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5261:45:60","subExpression":{"arguments":[{"id":10826,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10807,"src":"5286:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":10827,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10815,"src":"5293:12:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10825,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11065,"src":"5262:23:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":10828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5262:44:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10848,"nodeType":"IfStatement","src":"5257:201:60","trueBody":{"id":10847,"nodeType":"Block","src":"5308:150:60","statements":[{"expression":{"arguments":[{"id":10831,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10807,"src":"5342:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":10834,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10807,"src":"5364:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":10835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5370:7:60","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":10563,"src":"5364:13:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":10836,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10809,"src":"5380:7:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":10837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5389:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":10838,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5379:12:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}],"expression":{"id":10832,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5349:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10833,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5353:10:60","memberName":"encodeCall","nodeType":"MemberAccess","src":"5349:14:60","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5349:43:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10830,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11024,"src":"5322:19:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":10840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5322:71:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10841,"nodeType":"ExpressionStatement","src":"5322:71:60"},{"expression":{"arguments":[{"id":10843,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10807,"src":"5427:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":10844,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10815,"src":"5434:12:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10842,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11024,"src":"5407:19:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":10845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5407:40:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10846,"nodeType":"ExpressionStatement","src":"5407:40:60"}]}}]},"documentation":{"id":10804,"nodeType":"StructuredDocumentation","src":"4513:566:60","text":" @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n to be set to zero before setting it to a non-zero value, such as USDT.\n NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n set here."},"id":10850,"implemented":true,"kind":"function","modifiers":[],"name":"forceApprove","nameLocation":"5093:12:60","nodeType":"FunctionDefinition","parameters":{"id":10812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10807,"mutability":"mutable","name":"token","nameLocation":"5113:5:60","nodeType":"VariableDeclaration","scope":10850,"src":"5106:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":10806,"nodeType":"UserDefinedTypeName","pathNode":{"id":10805,"name":"IERC20","nameLocations":["5106:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"5106:6:60"},"referencedDeclaration":10576,"src":"5106:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10809,"mutability":"mutable","name":"spender","nameLocation":"5128:7:60","nodeType":"VariableDeclaration","scope":10850,"src":"5120:15:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10808,"name":"address","nodeType":"ElementaryTypeName","src":"5120:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10811,"mutability":"mutable","name":"value","nameLocation":"5145:5:60","nodeType":"VariableDeclaration","scope":10850,"src":"5137:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10810,"name":"uint256","nodeType":"ElementaryTypeName","src":"5137:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5105:46:60"},"returnParameters":{"id":10813,"nodeType":"ParameterList","parameters":[],"src":"5161:0:60"},"scope":11066,"src":"5084:380:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10892,"nodeType":"Block","src":"5911:219:60","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":10863,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10856,"src":"5925:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5928:4:60","memberName":"code","nodeType":"MemberAccess","src":"5925:7:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5933:6:60","memberName":"length","nodeType":"MemberAccess","src":"5925:14:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10866,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5943:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5925:19:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"id":10881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6011:39:60","subExpression":{"arguments":[{"id":10877,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10856,"src":"6034:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10878,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10858,"src":"6038:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10879,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10860,"src":"6045:4:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":10875,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10854,"src":"6012:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}},"id":10876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6018:15:60","memberName":"transferAndCall","nodeType":"MemberAccess","referencedDeclaration":9619,"src":"6012:21:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory) external returns (bool)"}},"id":10880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6012:38:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10890,"nodeType":"IfStatement","src":"6007:117:60","trueBody":{"id":10889,"nodeType":"Block","src":"6052:72:60","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":10885,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10854,"src":"6106:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}],"id":10884,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6098:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10883,"name":"address","nodeType":"ElementaryTypeName","src":"6098:7:60","typeDescriptions":{}}},"id":10886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6098:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10882,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10614,"src":"6073:24:60","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6073:40:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10888,"nodeType":"RevertStatement","src":"6066:47:60"}]}},"id":10891,"nodeType":"IfStatement","src":"5921:203:60","trueBody":{"id":10874,"nodeType":"Block","src":"5946:55:60","statements":[{"expression":{"arguments":[{"id":10869,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10854,"src":"5973:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}},{"id":10870,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10856,"src":"5980:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10871,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10858,"src":"5984:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10868,"name":"safeTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10647,"src":"5960:12:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":10872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5960:30:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10873,"nodeType":"ExpressionStatement","src":"5960:30:60"}]}}]},"documentation":{"id":10851,"nodeType":"StructuredDocumentation","src":"5470:333:60","text":" @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n targeting contracts.\n Reverts if the returned value is other than `true`."},"id":10893,"implemented":true,"kind":"function","modifiers":[],"name":"transferAndCallRelaxed","nameLocation":"5817:22:60","nodeType":"FunctionDefinition","parameters":{"id":10861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10854,"mutability":"mutable","name":"token","nameLocation":"5849:5:60","nodeType":"VariableDeclaration","scope":10893,"src":"5840:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"},"typeName":{"id":10853,"nodeType":"UserDefinedTypeName","pathNode":{"id":10852,"name":"IERC1363","nameLocations":["5840:8:60"],"nodeType":"IdentifierPath","referencedDeclaration":9668,"src":"5840:8:60"},"referencedDeclaration":9668,"src":"5840:8:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}},"visibility":"internal"},{"constant":false,"id":10856,"mutability":"mutable","name":"to","nameLocation":"5864:2:60","nodeType":"VariableDeclaration","scope":10893,"src":"5856:10:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10855,"name":"address","nodeType":"ElementaryTypeName","src":"5856:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10858,"mutability":"mutable","name":"value","nameLocation":"5876:5:60","nodeType":"VariableDeclaration","scope":10893,"src":"5868:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10857,"name":"uint256","nodeType":"ElementaryTypeName","src":"5868:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10860,"mutability":"mutable","name":"data","nameLocation":"5896:4:60","nodeType":"VariableDeclaration","scope":10893,"src":"5883:17:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10859,"name":"bytes","nodeType":"ElementaryTypeName","src":"5883:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5839:62:60"},"returnParameters":{"id":10862,"nodeType":"ParameterList","parameters":[],"src":"5911:0:60"},"scope":11066,"src":"5808:322:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10939,"nodeType":"Block","src":"6649:239:60","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":10908,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10901,"src":"6663:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6666:4:60","memberName":"code","nodeType":"MemberAccess","src":"6663:7:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6671:6:60","memberName":"length","nodeType":"MemberAccess","src":"6663:14:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10911,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6681:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6663:19:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"id":10928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6759:49:60","subExpression":{"arguments":[{"id":10923,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10899,"src":"6786:4:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10924,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10901,"src":"6792:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10925,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10903,"src":"6796:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10926,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10905,"src":"6803:4:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":10921,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10897,"src":"6760:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}},"id":10922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6766:19:60","memberName":"transferFromAndCall","nodeType":"MemberAccess","referencedDeclaration":9645,"src":"6760:25:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,address,uint256,bytes memory) external returns (bool)"}},"id":10927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6760:48:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10937,"nodeType":"IfStatement","src":"6755:127:60","trueBody":{"id":10936,"nodeType":"Block","src":"6810:72:60","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":10932,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10897,"src":"6864:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}],"id":10931,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6856:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10930,"name":"address","nodeType":"ElementaryTypeName","src":"6856:7:60","typeDescriptions":{}}},"id":10933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6856:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10929,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10614,"src":"6831:24:60","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6831:40:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10935,"nodeType":"RevertStatement","src":"6824:47:60"}]}},"id":10938,"nodeType":"IfStatement","src":"6659:223:60","trueBody":{"id":10920,"nodeType":"Block","src":"6684:65:60","statements":[{"expression":{"arguments":[{"id":10914,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10897,"src":"6715:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}},{"id":10915,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10899,"src":"6722:4:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10916,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10901,"src":"6728:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10917,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10903,"src":"6732:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10913,"name":"safeTransferFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10674,"src":"6698:16:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":10918,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6698:40:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10919,"nodeType":"ExpressionStatement","src":"6698:40:60"}]}}]},"documentation":{"id":10894,"nodeType":"StructuredDocumentation","src":"6136:341:60","text":" @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n targeting contracts.\n Reverts if the returned value is other than `true`."},"id":10940,"implemented":true,"kind":"function","modifiers":[],"name":"transferFromAndCallRelaxed","nameLocation":"6491:26:60","nodeType":"FunctionDefinition","parameters":{"id":10906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10897,"mutability":"mutable","name":"token","nameLocation":"6536:5:60","nodeType":"VariableDeclaration","scope":10940,"src":"6527:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"},"typeName":{"id":10896,"nodeType":"UserDefinedTypeName","pathNode":{"id":10895,"name":"IERC1363","nameLocations":["6527:8:60"],"nodeType":"IdentifierPath","referencedDeclaration":9668,"src":"6527:8:60"},"referencedDeclaration":9668,"src":"6527:8:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}},"visibility":"internal"},{"constant":false,"id":10899,"mutability":"mutable","name":"from","nameLocation":"6559:4:60","nodeType":"VariableDeclaration","scope":10940,"src":"6551:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10898,"name":"address","nodeType":"ElementaryTypeName","src":"6551:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10901,"mutability":"mutable","name":"to","nameLocation":"6581:2:60","nodeType":"VariableDeclaration","scope":10940,"src":"6573:10:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10900,"name":"address","nodeType":"ElementaryTypeName","src":"6573:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10903,"mutability":"mutable","name":"value","nameLocation":"6601:5:60","nodeType":"VariableDeclaration","scope":10940,"src":"6593:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10902,"name":"uint256","nodeType":"ElementaryTypeName","src":"6593:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10905,"mutability":"mutable","name":"data","nameLocation":"6629:4:60","nodeType":"VariableDeclaration","scope":10940,"src":"6616:17:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10904,"name":"bytes","nodeType":"ElementaryTypeName","src":"6616:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6517:122:60"},"returnParameters":{"id":10907,"nodeType":"ParameterList","parameters":[],"src":"6649:0:60"},"scope":11066,"src":"6482:406:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10982,"nodeType":"Block","src":"7655:218:60","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":10953,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10946,"src":"7669:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7672:4:60","memberName":"code","nodeType":"MemberAccess","src":"7669:7:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7677:6:60","memberName":"length","nodeType":"MemberAccess","src":"7669:14:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10956,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7687:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7669:19:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"id":10971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7755:38:60","subExpression":{"arguments":[{"id":10967,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10946,"src":"7777:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10968,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10948,"src":"7781:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10969,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10950,"src":"7788:4:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":10965,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10944,"src":"7756:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}},"id":10966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7762:14:60","memberName":"approveAndCall","nodeType":"MemberAccess","referencedDeclaration":9667,"src":"7756:20:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory) external returns (bool)"}},"id":10970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7756:37:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10980,"nodeType":"IfStatement","src":"7751:116:60","trueBody":{"id":10979,"nodeType":"Block","src":"7795:72:60","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":10975,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10944,"src":"7849:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}],"id":10974,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7841:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10973,"name":"address","nodeType":"ElementaryTypeName","src":"7841:7:60","typeDescriptions":{}}},"id":10976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7841:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10972,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10614,"src":"7816:24:60","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7816:40:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10978,"nodeType":"RevertStatement","src":"7809:47:60"}]}},"id":10981,"nodeType":"IfStatement","src":"7665:202:60","trueBody":{"id":10964,"nodeType":"Block","src":"7690:55:60","statements":[{"expression":{"arguments":[{"id":10959,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10944,"src":"7717:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}},{"id":10960,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10946,"src":"7724:2:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10961,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10948,"src":"7728:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10958,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10850,"src":"7704:12:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":10962,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7704:30:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10963,"nodeType":"ExpressionStatement","src":"7704:30:60"}]}}]},"documentation":{"id":10941,"nodeType":"StructuredDocumentation","src":"6894:654:60","text":" @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n targeting contracts.\n NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n once without retrying, and relies on the returned value to be true.\n Reverts if the returned value is other than `true`."},"id":10983,"implemented":true,"kind":"function","modifiers":[],"name":"approveAndCallRelaxed","nameLocation":"7562:21:60","nodeType":"FunctionDefinition","parameters":{"id":10951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10944,"mutability":"mutable","name":"token","nameLocation":"7593:5:60","nodeType":"VariableDeclaration","scope":10983,"src":"7584:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"},"typeName":{"id":10943,"nodeType":"UserDefinedTypeName","pathNode":{"id":10942,"name":"IERC1363","nameLocations":["7584:8:60"],"nodeType":"IdentifierPath","referencedDeclaration":9668,"src":"7584:8:60"},"referencedDeclaration":9668,"src":"7584:8:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9668","typeString":"contract IERC1363"}},"visibility":"internal"},{"constant":false,"id":10946,"mutability":"mutable","name":"to","nameLocation":"7608:2:60","nodeType":"VariableDeclaration","scope":10983,"src":"7600:10:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10945,"name":"address","nodeType":"ElementaryTypeName","src":"7600:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10948,"mutability":"mutable","name":"value","nameLocation":"7620:5:60","nodeType":"VariableDeclaration","scope":10983,"src":"7612:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10947,"name":"uint256","nodeType":"ElementaryTypeName","src":"7612:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10950,"mutability":"mutable","name":"data","nameLocation":"7640:4:60","nodeType":"VariableDeclaration","scope":10983,"src":"7627:17:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10949,"name":"bytes","nodeType":"ElementaryTypeName","src":"7627:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7583:62:60"},"returnParameters":{"id":10952,"nodeType":"ParameterList","parameters":[],"src":"7655:0:60"},"scope":11066,"src":"7553:320:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11023,"nodeType":"Block","src":"8440:650:60","statements":[{"assignments":[10993],"declarations":[{"constant":false,"id":10993,"mutability":"mutable","name":"returnSize","nameLocation":"8458:10:60","nodeType":"VariableDeclaration","scope":11023,"src":"8450:18:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10992,"name":"uint256","nodeType":"ElementaryTypeName","src":"8450:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10994,"nodeType":"VariableDeclarationStatement","src":"8450:18:60"},{"assignments":[10996],"declarations":[{"constant":false,"id":10996,"mutability":"mutable","name":"returnValue","nameLocation":"8486:11:60","nodeType":"VariableDeclaration","scope":11023,"src":"8478:19:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10995,"name":"uint256","nodeType":"ElementaryTypeName","src":"8478:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10997,"nodeType":"VariableDeclarationStatement","src":"8478:19:60"},{"AST":{"nativeSrc":"8532:396:60","nodeType":"YulBlock","src":"8532:396:60","statements":[{"nativeSrc":"8546:75:60","nodeType":"YulVariableDeclaration","src":"8546:75:60","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"8566:3:60","nodeType":"YulIdentifier","src":"8566:3:60"},"nativeSrc":"8566:5:60","nodeType":"YulFunctionCall","src":"8566:5:60"},{"name":"token","nativeSrc":"8573:5:60","nodeType":"YulIdentifier","src":"8573:5:60"},{"kind":"number","nativeSrc":"8580:1:60","nodeType":"YulLiteral","src":"8580:1:60","type":"","value":"0"},{"arguments":[{"name":"data","nativeSrc":"8587:4:60","nodeType":"YulIdentifier","src":"8587:4:60"},{"kind":"number","nativeSrc":"8593:4:60","nodeType":"YulLiteral","src":"8593:4:60","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"8583:3:60","nodeType":"YulIdentifier","src":"8583:3:60"},"nativeSrc":"8583:15:60","nodeType":"YulFunctionCall","src":"8583:15:60"},{"arguments":[{"name":"data","nativeSrc":"8606:4:60","nodeType":"YulIdentifier","src":"8606:4:60"}],"functionName":{"name":"mload","nativeSrc":"8600:5:60","nodeType":"YulIdentifier","src":"8600:5:60"},"nativeSrc":"8600:11:60","nodeType":"YulFunctionCall","src":"8600:11:60"},{"kind":"number","nativeSrc":"8613:1:60","nodeType":"YulLiteral","src":"8613:1:60","type":"","value":"0"},{"kind":"number","nativeSrc":"8616:4:60","nodeType":"YulLiteral","src":"8616:4:60","type":"","value":"0x20"}],"functionName":{"name":"call","nativeSrc":"8561:4:60","nodeType":"YulIdentifier","src":"8561:4:60"},"nativeSrc":"8561:60:60","nodeType":"YulFunctionCall","src":"8561:60:60"},"variables":[{"name":"success","nativeSrc":"8550:7:60","nodeType":"YulTypedName","src":"8550:7:60","type":""}]},{"body":{"nativeSrc":"8682:157:60","nodeType":"YulBlock","src":"8682:157:60","statements":[{"nativeSrc":"8700:22:60","nodeType":"YulVariableDeclaration","src":"8700:22:60","value":{"arguments":[{"kind":"number","nativeSrc":"8717:4:60","nodeType":"YulLiteral","src":"8717:4:60","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"8711:5:60","nodeType":"YulIdentifier","src":"8711:5:60"},"nativeSrc":"8711:11:60","nodeType":"YulFunctionCall","src":"8711:11:60"},"variables":[{"name":"ptr","nativeSrc":"8704:3:60","nodeType":"YulTypedName","src":"8704:3:60","type":""}]},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"8754:3:60","nodeType":"YulIdentifier","src":"8754:3:60"},{"kind":"number","nativeSrc":"8759:1:60","nodeType":"YulLiteral","src":"8759:1:60","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"8762:14:60","nodeType":"YulIdentifier","src":"8762:14:60"},"nativeSrc":"8762:16:60","nodeType":"YulFunctionCall","src":"8762:16:60"}],"functionName":{"name":"returndatacopy","nativeSrc":"8739:14:60","nodeType":"YulIdentifier","src":"8739:14:60"},"nativeSrc":"8739:40:60","nodeType":"YulFunctionCall","src":"8739:40:60"},"nativeSrc":"8739:40:60","nodeType":"YulExpressionStatement","src":"8739:40:60"},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"8803:3:60","nodeType":"YulIdentifier","src":"8803:3:60"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"8808:14:60","nodeType":"YulIdentifier","src":"8808:14:60"},"nativeSrc":"8808:16:60","nodeType":"YulFunctionCall","src":"8808:16:60"}],"functionName":{"name":"revert","nativeSrc":"8796:6:60","nodeType":"YulIdentifier","src":"8796:6:60"},"nativeSrc":"8796:29:60","nodeType":"YulFunctionCall","src":"8796:29:60"},"nativeSrc":"8796:29:60","nodeType":"YulExpressionStatement","src":"8796:29:60"}]},"condition":{"arguments":[{"name":"success","nativeSrc":"8673:7:60","nodeType":"YulIdentifier","src":"8673:7:60"}],"functionName":{"name":"iszero","nativeSrc":"8666:6:60","nodeType":"YulIdentifier","src":"8666:6:60"},"nativeSrc":"8666:15:60","nodeType":"YulFunctionCall","src":"8666:15:60"},"nativeSrc":"8663:176:60","nodeType":"YulIf","src":"8663:176:60"},{"nativeSrc":"8852:30:60","nodeType":"YulAssignment","src":"8852:30:60","value":{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"8866:14:60","nodeType":"YulIdentifier","src":"8866:14:60"},"nativeSrc":"8866:16:60","nodeType":"YulFunctionCall","src":"8866:16:60"},"variableNames":[{"name":"returnSize","nativeSrc":"8852:10:60","nodeType":"YulIdentifier","src":"8852:10:60"}]},{"nativeSrc":"8895:23:60","nodeType":"YulAssignment","src":"8895:23:60","value":{"arguments":[{"kind":"number","nativeSrc":"8916:1:60","nodeType":"YulLiteral","src":"8916:1:60","type":"","value":"0"}],"functionName":{"name":"mload","nativeSrc":"8910:5:60","nodeType":"YulIdentifier","src":"8910:5:60"},"nativeSrc":"8910:8:60","nodeType":"YulFunctionCall","src":"8910:8:60"},"variableNames":[{"name":"returnValue","nativeSrc":"8895:11:60","nodeType":"YulIdentifier","src":"8895:11:60"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":10989,"isOffset":false,"isSlot":false,"src":"8587:4:60","valueSize":1},{"declaration":10989,"isOffset":false,"isSlot":false,"src":"8606:4:60","valueSize":1},{"declaration":10993,"isOffset":false,"isSlot":false,"src":"8852:10:60","valueSize":1},{"declaration":10996,"isOffset":false,"isSlot":false,"src":"8895:11:60","valueSize":1},{"declaration":10987,"isOffset":false,"isSlot":false,"src":"8573:5:60","valueSize":1}],"flags":["memory-safe"],"id":10998,"nodeType":"InlineAssembly","src":"8507:421:60"},{"condition":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10999,"name":"returnSize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10993,"src":"8942:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11000,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8956:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8942:15:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11010,"name":"returnValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10996,"src":"8994:11:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"31","id":11011,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9009:1:60","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8994:16:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8942:68:60","trueExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":11004,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10987,"src":"8968:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":11003,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8960:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11002,"name":"address","nodeType":"ElementaryTypeName","src":"8960:7:60","typeDescriptions":{}}},"id":11005,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8960:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8975:4:60","memberName":"code","nodeType":"MemberAccess","src":"8960:19:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8980:6:60","memberName":"length","nodeType":"MemberAccess","src":"8960:26:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11008,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8990:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8960:31:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11022,"nodeType":"IfStatement","src":"8938:146:60","trueBody":{"id":11021,"nodeType":"Block","src":"9012:72:60","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":11017,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10987,"src":"9066:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":11016,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9058:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11015,"name":"address","nodeType":"ElementaryTypeName","src":"9058:7:60","typeDescriptions":{}}},"id":11018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9058:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11014,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10614,"src":"9033:24:60","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":11019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9033:40:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11020,"nodeType":"RevertStatement","src":"9026:47:60"}]}}]},"documentation":{"id":10984,"nodeType":"StructuredDocumentation","src":"7879:486:60","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements."},"id":11024,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturn","nameLocation":"8379:19:60","nodeType":"FunctionDefinition","parameters":{"id":10990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10987,"mutability":"mutable","name":"token","nameLocation":"8406:5:60","nodeType":"VariableDeclaration","scope":11024,"src":"8399:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":10986,"nodeType":"UserDefinedTypeName","pathNode":{"id":10985,"name":"IERC20","nameLocations":["8399:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"8399:6:60"},"referencedDeclaration":10576,"src":"8399:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10989,"mutability":"mutable","name":"data","nameLocation":"8426:4:60","nodeType":"VariableDeclaration","scope":11024,"src":"8413:17:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10988,"name":"bytes","nodeType":"ElementaryTypeName","src":"8413:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8398:33:60"},"returnParameters":{"id":10991,"nodeType":"ParameterList","parameters":[],"src":"8440:0:60"},"scope":11066,"src":"8370:720:60","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":11064,"nodeType":"Block","src":"9681:391:60","statements":[{"assignments":[11036],"declarations":[{"constant":false,"id":11036,"mutability":"mutable","name":"success","nameLocation":"9696:7:60","nodeType":"VariableDeclaration","scope":11064,"src":"9691:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11035,"name":"bool","nodeType":"ElementaryTypeName","src":"9691:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":11037,"nodeType":"VariableDeclarationStatement","src":"9691:12:60"},{"assignments":[11039],"declarations":[{"constant":false,"id":11039,"mutability":"mutable","name":"returnSize","nameLocation":"9721:10:60","nodeType":"VariableDeclaration","scope":11064,"src":"9713:18:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11038,"name":"uint256","nodeType":"ElementaryTypeName","src":"9713:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11040,"nodeType":"VariableDeclarationStatement","src":"9713:18:60"},{"assignments":[11042],"declarations":[{"constant":false,"id":11042,"mutability":"mutable","name":"returnValue","nameLocation":"9749:11:60","nodeType":"VariableDeclaration","scope":11064,"src":"9741:19:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11041,"name":"uint256","nodeType":"ElementaryTypeName","src":"9741:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11043,"nodeType":"VariableDeclarationStatement","src":"9741:19:60"},{"AST":{"nativeSrc":"9795:174:60","nodeType":"YulBlock","src":"9795:174:60","statements":[{"nativeSrc":"9809:71:60","nodeType":"YulAssignment","src":"9809:71:60","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"9825:3:60","nodeType":"YulIdentifier","src":"9825:3:60"},"nativeSrc":"9825:5:60","nodeType":"YulFunctionCall","src":"9825:5:60"},{"name":"token","nativeSrc":"9832:5:60","nodeType":"YulIdentifier","src":"9832:5:60"},{"kind":"number","nativeSrc":"9839:1:60","nodeType":"YulLiteral","src":"9839:1:60","type":"","value":"0"},{"arguments":[{"name":"data","nativeSrc":"9846:4:60","nodeType":"YulIdentifier","src":"9846:4:60"},{"kind":"number","nativeSrc":"9852:4:60","nodeType":"YulLiteral","src":"9852:4:60","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"9842:3:60","nodeType":"YulIdentifier","src":"9842:3:60"},"nativeSrc":"9842:15:60","nodeType":"YulFunctionCall","src":"9842:15:60"},{"arguments":[{"name":"data","nativeSrc":"9865:4:60","nodeType":"YulIdentifier","src":"9865:4:60"}],"functionName":{"name":"mload","nativeSrc":"9859:5:60","nodeType":"YulIdentifier","src":"9859:5:60"},"nativeSrc":"9859:11:60","nodeType":"YulFunctionCall","src":"9859:11:60"},{"kind":"number","nativeSrc":"9872:1:60","nodeType":"YulLiteral","src":"9872:1:60","type":"","value":"0"},{"kind":"number","nativeSrc":"9875:4:60","nodeType":"YulLiteral","src":"9875:4:60","type":"","value":"0x20"}],"functionName":{"name":"call","nativeSrc":"9820:4:60","nodeType":"YulIdentifier","src":"9820:4:60"},"nativeSrc":"9820:60:60","nodeType":"YulFunctionCall","src":"9820:60:60"},"variableNames":[{"name":"success","nativeSrc":"9809:7:60","nodeType":"YulIdentifier","src":"9809:7:60"}]},{"nativeSrc":"9893:30:60","nodeType":"YulAssignment","src":"9893:30:60","value":{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"9907:14:60","nodeType":"YulIdentifier","src":"9907:14:60"},"nativeSrc":"9907:16:60","nodeType":"YulFunctionCall","src":"9907:16:60"},"variableNames":[{"name":"returnSize","nativeSrc":"9893:10:60","nodeType":"YulIdentifier","src":"9893:10:60"}]},{"nativeSrc":"9936:23:60","nodeType":"YulAssignment","src":"9936:23:60","value":{"arguments":[{"kind":"number","nativeSrc":"9957:1:60","nodeType":"YulLiteral","src":"9957:1:60","type":"","value":"0"}],"functionName":{"name":"mload","nativeSrc":"9951:5:60","nodeType":"YulIdentifier","src":"9951:5:60"},"nativeSrc":"9951:8:60","nodeType":"YulFunctionCall","src":"9951:8:60"},"variableNames":[{"name":"returnValue","nativeSrc":"9936:11:60","nodeType":"YulIdentifier","src":"9936:11:60"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11030,"isOffset":false,"isSlot":false,"src":"9846:4:60","valueSize":1},{"declaration":11030,"isOffset":false,"isSlot":false,"src":"9865:4:60","valueSize":1},{"declaration":11039,"isOffset":false,"isSlot":false,"src":"9893:10:60","valueSize":1},{"declaration":11042,"isOffset":false,"isSlot":false,"src":"9936:11:60","valueSize":1},{"declaration":11036,"isOffset":false,"isSlot":false,"src":"9809:7:60","valueSize":1},{"declaration":11028,"isOffset":false,"isSlot":false,"src":"9832:5:60","valueSize":1}],"flags":["memory-safe"],"id":11044,"nodeType":"InlineAssembly","src":"9770:199:60"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11045,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11036,"src":"9985:7:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11046,"name":"returnSize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11039,"src":"9997:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10011:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9997:15:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11057,"name":"returnValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11042,"src":"10048:11:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":11058,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10063:1:60","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10048:16:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9997:67:60","trueExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":11051,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11028,"src":"10023:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":11050,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10015:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11049,"name":"address","nodeType":"ElementaryTypeName","src":"10015:7:60","typeDescriptions":{}}},"id":11052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10015:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10030:4:60","memberName":"code","nodeType":"MemberAccess","src":"10015:19:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10035:6:60","memberName":"length","nodeType":"MemberAccess","src":"10015:26:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11055,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10044:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10015:30:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":11061,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9996:69:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9985:80:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":11034,"id":11063,"nodeType":"Return","src":"9978:87:60"}]},"documentation":{"id":11025,"nodeType":"StructuredDocumentation","src":"9096:491:60","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead."},"id":11065,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturnBool","nameLocation":"9601:23:60","nodeType":"FunctionDefinition","parameters":{"id":11031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11028,"mutability":"mutable","name":"token","nameLocation":"9632:5:60","nodeType":"VariableDeclaration","scope":11065,"src":"9625:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":11027,"nodeType":"UserDefinedTypeName","pathNode":{"id":11026,"name":"IERC20","nameLocations":["9625:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"9625:6:60"},"referencedDeclaration":10576,"src":"9625:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":11030,"mutability":"mutable","name":"data","nameLocation":"9652:4:60","nodeType":"VariableDeclaration","scope":11065,"src":"9639:17:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11029,"name":"bytes","nodeType":"ElementaryTypeName","src":"9639:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9624:33:60"},"returnParameters":{"id":11034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11033,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11065,"src":"9675:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11032,"name":"bool","nodeType":"ElementaryTypeName","src":"9675:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9674:6:60"},"scope":11066,"src":"9592:480:60","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":11067,"src":"698:9376:60","usedErrors":[10614,10623],"usedEvents":[]}],"src":"115:9960:60"},"id":60},"@openzeppelin/contracts/utils/Address.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","exportedSymbols":{"Address":[11326],"Errors":[12388]},"id":11327,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":11068,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:61"},{"absolutePath":"@openzeppelin/contracts/utils/Errors.sol","file":"./Errors.sol","id":11070,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11327,"sourceUnit":12389,"src":"127:36:61","symbolAliases":[{"foreign":{"id":11069,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12388,"src":"135:6:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":11071,"nodeType":"StructuredDocumentation","src":"165:67:61","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":11326,"linearizedBaseContracts":[11326],"name":"Address","nameLocation":"241:7:61","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":11072,"nodeType":"StructuredDocumentation","src":"255:75:61","text":" @dev There's no code at `target` (it is not a contract)."},"errorSelector":"9996b315","id":11076,"name":"AddressEmptyCode","nameLocation":"341:16:61","nodeType":"ErrorDefinition","parameters":{"id":11075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11074,"mutability":"mutable","name":"target","nameLocation":"366:6:61","nodeType":"VariableDeclaration","scope":11076,"src":"358:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11073,"name":"address","nodeType":"ElementaryTypeName","src":"358:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"357:16:61"},"src":"335:39:61"},{"body":{"id":11123,"nodeType":"Block","src":"1361:294:61","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11086,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1383:4:61","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$11326","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$11326","typeString":"library Address"}],"id":11085,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1375:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11084,"name":"address","nodeType":"ElementaryTypeName","src":"1375:7:61","typeDescriptions":{}}},"id":11087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1375:13:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1389:7:61","memberName":"balance","nodeType":"MemberAccess","src":"1375:21:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11089,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11081,"src":"1399:6:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1375:30:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11103,"nodeType":"IfStatement","src":"1371:125:61","trueBody":{"id":11102,"nodeType":"Block","src":"1407:89:61","statements":[{"errorCall":{"arguments":[{"expression":{"arguments":[{"id":11096,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1463:4:61","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$11326","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$11326","typeString":"library Address"}],"id":11095,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1455:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11094,"name":"address","nodeType":"ElementaryTypeName","src":"1455:7:61","typeDescriptions":{}}},"id":11097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1455:13:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1469:7:61","memberName":"balance","nodeType":"MemberAccess","src":"1455:21:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11099,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11081,"src":"1478:6:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11091,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12388,"src":"1428:6:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12388_$","typeString":"type(library Errors)"}},"id":11093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1435:19:61","memberName":"InsufficientBalance","nodeType":"MemberAccess","referencedDeclaration":12376,"src":"1428:26:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":11100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1428:57:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11101,"nodeType":"RevertStatement","src":"1421:64:61"}]}},{"assignments":[11105,11107],"declarations":[{"constant":false,"id":11105,"mutability":"mutable","name":"success","nameLocation":"1512:7:61","nodeType":"VariableDeclaration","scope":11123,"src":"1507:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11104,"name":"bool","nodeType":"ElementaryTypeName","src":"1507:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11107,"mutability":"mutable","name":"returndata","nameLocation":"1534:10:61","nodeType":"VariableDeclaration","scope":11123,"src":"1521:23:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11106,"name":"bytes","nodeType":"ElementaryTypeName","src":"1521:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":11114,"initialValue":{"arguments":[{"hexValue":"","id":11112,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1578:2:61","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":11108,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11079,"src":"1548:9:61","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":11109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1558:4:61","memberName":"call","nodeType":"MemberAccess","src":"1548:14:61","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":11111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":11110,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11081,"src":"1570:6:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"1548:29:61","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":11113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1548:33:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1506:75:61"},{"condition":{"id":11116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1595:8:61","subExpression":{"id":11115,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11105,"src":"1596:7:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11122,"nodeType":"IfStatement","src":"1591:58:61","trueBody":{"id":11121,"nodeType":"Block","src":"1605:44:61","statements":[{"expression":{"arguments":[{"id":11118,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11107,"src":"1627:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11117,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11325,"src":"1619:7:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":11119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1619:19:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11120,"nodeType":"ExpressionStatement","src":"1619:19:61"}]}}]},"documentation":{"id":11077,"nodeType":"StructuredDocumentation","src":"380:905:61","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":11124,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"1299:9:61","nodeType":"FunctionDefinition","parameters":{"id":11082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11079,"mutability":"mutable","name":"recipient","nameLocation":"1325:9:61","nodeType":"VariableDeclaration","scope":11124,"src":"1309:25:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":11078,"name":"address","nodeType":"ElementaryTypeName","src":"1309:15:61","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":11081,"mutability":"mutable","name":"amount","nameLocation":"1344:6:61","nodeType":"VariableDeclaration","scope":11124,"src":"1336:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11080,"name":"uint256","nodeType":"ElementaryTypeName","src":"1336:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1308:43:61"},"returnParameters":{"id":11083,"nodeType":"ParameterList","parameters":[],"src":"1361:0:61"},"scope":11326,"src":"1290:365:61","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11140,"nodeType":"Block","src":"2589:62:61","statements":[{"expression":{"arguments":[{"id":11135,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11127,"src":"2628:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11136,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11129,"src":"2636:4:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":11137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2642:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":11134,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11191,"src":"2606:21:61","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256) returns (bytes memory)"}},"id":11138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2606:38:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11133,"id":11139,"nodeType":"Return","src":"2599:45:61"}]},"documentation":{"id":11125,"nodeType":"StructuredDocumentation","src":"1661:834:61","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason or custom error, it is bubbled\n up by this function (like regular Solidity function calls). However, if\n the call reverted with no returned reason, this function reverts with a\n {Errors.FailedCall} error.\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert."},"id":11141,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"2509:12:61","nodeType":"FunctionDefinition","parameters":{"id":11130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11127,"mutability":"mutable","name":"target","nameLocation":"2530:6:61","nodeType":"VariableDeclaration","scope":11141,"src":"2522:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11126,"name":"address","nodeType":"ElementaryTypeName","src":"2522:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11129,"mutability":"mutable","name":"data","nameLocation":"2551:4:61","nodeType":"VariableDeclaration","scope":11141,"src":"2538:17:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11128,"name":"bytes","nodeType":"ElementaryTypeName","src":"2538:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2521:35:61"},"returnParameters":{"id":11133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11132,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11141,"src":"2575:12:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11131,"name":"bytes","nodeType":"ElementaryTypeName","src":"2575:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2574:14:61"},"scope":11326,"src":"2500:151:61","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11190,"nodeType":"Block","src":"3088:294:61","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11155,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3110:4:61","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$11326","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$11326","typeString":"library Address"}],"id":11154,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3102:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11153,"name":"address","nodeType":"ElementaryTypeName","src":"3102:7:61","typeDescriptions":{}}},"id":11156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3102:13:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3116:7:61","memberName":"balance","nodeType":"MemberAccess","src":"3102:21:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11158,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11148,"src":"3126:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3102:29:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11172,"nodeType":"IfStatement","src":"3098:123:61","trueBody":{"id":11171,"nodeType":"Block","src":"3133:88:61","statements":[{"errorCall":{"arguments":[{"expression":{"arguments":[{"id":11165,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3189:4:61","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$11326","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$11326","typeString":"library Address"}],"id":11164,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3181:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11163,"name":"address","nodeType":"ElementaryTypeName","src":"3181:7:61","typeDescriptions":{}}},"id":11166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3181:13:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3195:7:61","memberName":"balance","nodeType":"MemberAccess","src":"3181:21:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11168,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11148,"src":"3204:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11160,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12388,"src":"3154:6:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12388_$","typeString":"type(library Errors)"}},"id":11162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3161:19:61","memberName":"InsufficientBalance","nodeType":"MemberAccess","referencedDeclaration":12376,"src":"3154:26:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":11169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3154:56:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11170,"nodeType":"RevertStatement","src":"3147:63:61"}]}},{"assignments":[11174,11176],"declarations":[{"constant":false,"id":11174,"mutability":"mutable","name":"success","nameLocation":"3236:7:61","nodeType":"VariableDeclaration","scope":11190,"src":"3231:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11173,"name":"bool","nodeType":"ElementaryTypeName","src":"3231:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11176,"mutability":"mutable","name":"returndata","nameLocation":"3258:10:61","nodeType":"VariableDeclaration","scope":11190,"src":"3245:23:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11175,"name":"bytes","nodeType":"ElementaryTypeName","src":"3245:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":11183,"initialValue":{"arguments":[{"id":11181,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11146,"src":"3298:4:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":11177,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11144,"src":"3272:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3279:4:61","memberName":"call","nodeType":"MemberAccess","src":"3272:11:61","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":11180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":11179,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11148,"src":"3291:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"3272:25:61","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":11182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3272:31:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3230:73:61"},{"expression":{"arguments":[{"id":11185,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11144,"src":"3347:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11186,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11174,"src":"3355:7:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":11187,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11176,"src":"3364:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11184,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11283,"src":"3320:26:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":11188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3320:55:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11152,"id":11189,"nodeType":"Return","src":"3313:62:61"}]},"documentation":{"id":11142,"nodeType":"StructuredDocumentation","src":"2657:313:61","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`."},"id":11191,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"2984:21:61","nodeType":"FunctionDefinition","parameters":{"id":11149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11144,"mutability":"mutable","name":"target","nameLocation":"3014:6:61","nodeType":"VariableDeclaration","scope":11191,"src":"3006:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11143,"name":"address","nodeType":"ElementaryTypeName","src":"3006:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11146,"mutability":"mutable","name":"data","nameLocation":"3035:4:61","nodeType":"VariableDeclaration","scope":11191,"src":"3022:17:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11145,"name":"bytes","nodeType":"ElementaryTypeName","src":"3022:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":11148,"mutability":"mutable","name":"value","nameLocation":"3049:5:61","nodeType":"VariableDeclaration","scope":11191,"src":"3041:13:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11147,"name":"uint256","nodeType":"ElementaryTypeName","src":"3041:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3005:50:61"},"returnParameters":{"id":11152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11151,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11191,"src":"3074:12:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11150,"name":"bytes","nodeType":"ElementaryTypeName","src":"3074:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3073:14:61"},"scope":11326,"src":"2975:407:61","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11216,"nodeType":"Block","src":"3621:154:61","statements":[{"assignments":[11202,11204],"declarations":[{"constant":false,"id":11202,"mutability":"mutable","name":"success","nameLocation":"3637:7:61","nodeType":"VariableDeclaration","scope":11216,"src":"3632:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11201,"name":"bool","nodeType":"ElementaryTypeName","src":"3632:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11204,"mutability":"mutable","name":"returndata","nameLocation":"3659:10:61","nodeType":"VariableDeclaration","scope":11216,"src":"3646:23:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11203,"name":"bytes","nodeType":"ElementaryTypeName","src":"3646:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":11209,"initialValue":{"arguments":[{"id":11207,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11196,"src":"3691:4:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":11205,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11194,"src":"3673:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3680:10:61","memberName":"staticcall","nodeType":"MemberAccess","src":"3673:17:61","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":11208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3673:23:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3631:65:61"},{"expression":{"arguments":[{"id":11211,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11194,"src":"3740:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11212,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11202,"src":"3748:7:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":11213,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11204,"src":"3757:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11210,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11283,"src":"3713:26:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":11214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3713:55:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11200,"id":11215,"nodeType":"Return","src":"3706:62:61"}]},"documentation":{"id":11192,"nodeType":"StructuredDocumentation","src":"3388:128:61","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call."},"id":11217,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"3530:18:61","nodeType":"FunctionDefinition","parameters":{"id":11197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11194,"mutability":"mutable","name":"target","nameLocation":"3557:6:61","nodeType":"VariableDeclaration","scope":11217,"src":"3549:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11193,"name":"address","nodeType":"ElementaryTypeName","src":"3549:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11196,"mutability":"mutable","name":"data","nameLocation":"3578:4:61","nodeType":"VariableDeclaration","scope":11217,"src":"3565:17:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11195,"name":"bytes","nodeType":"ElementaryTypeName","src":"3565:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3548:35:61"},"returnParameters":{"id":11200,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11199,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11217,"src":"3607:12:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11198,"name":"bytes","nodeType":"ElementaryTypeName","src":"3607:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3606:14:61"},"scope":11326,"src":"3521:254:61","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11242,"nodeType":"Block","src":"4013:156:61","statements":[{"assignments":[11228,11230],"declarations":[{"constant":false,"id":11228,"mutability":"mutable","name":"success","nameLocation":"4029:7:61","nodeType":"VariableDeclaration","scope":11242,"src":"4024:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11227,"name":"bool","nodeType":"ElementaryTypeName","src":"4024:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11230,"mutability":"mutable","name":"returndata","nameLocation":"4051:10:61","nodeType":"VariableDeclaration","scope":11242,"src":"4038:23:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11229,"name":"bytes","nodeType":"ElementaryTypeName","src":"4038:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":11235,"initialValue":{"arguments":[{"id":11233,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11222,"src":"4085:4:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":11231,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11220,"src":"4065:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4072:12:61","memberName":"delegatecall","nodeType":"MemberAccess","src":"4065:19:61","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":11234,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4065:25:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4023:67:61"},{"expression":{"arguments":[{"id":11237,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11220,"src":"4134:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11238,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11228,"src":"4142:7:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":11239,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11230,"src":"4151:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11236,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11283,"src":"4107:26:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":11240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4107:55:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11226,"id":11241,"nodeType":"Return","src":"4100:62:61"}]},"documentation":{"id":11218,"nodeType":"StructuredDocumentation","src":"3781:130:61","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call."},"id":11243,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"3925:20:61","nodeType":"FunctionDefinition","parameters":{"id":11223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11220,"mutability":"mutable","name":"target","nameLocation":"3954:6:61","nodeType":"VariableDeclaration","scope":11243,"src":"3946:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11219,"name":"address","nodeType":"ElementaryTypeName","src":"3946:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11222,"mutability":"mutable","name":"data","nameLocation":"3975:4:61","nodeType":"VariableDeclaration","scope":11243,"src":"3962:17:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11221,"name":"bytes","nodeType":"ElementaryTypeName","src":"3962:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3945:35:61"},"returnParameters":{"id":11226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11225,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11243,"src":"3999:12:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11224,"name":"bytes","nodeType":"ElementaryTypeName","src":"3999:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3998:14:61"},"scope":11326,"src":"3916:253:61","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11282,"nodeType":"Block","src":"4595:424:61","statements":[{"condition":{"id":11256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4609:8:61","subExpression":{"id":11255,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11248,"src":"4610:7:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11280,"nodeType":"Block","src":"4669:344:61","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11262,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11250,"src":"4857:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4868:6:61","memberName":"length","nodeType":"MemberAccess","src":"4857:17:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4878:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4857:22:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":11266,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11246,"src":"4883:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4890:4:61","memberName":"code","nodeType":"MemberAccess","src":"4883:11:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4895:6:61","memberName":"length","nodeType":"MemberAccess","src":"4883:18:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11269,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4905:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4883:23:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4857:49:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11277,"nodeType":"IfStatement","src":"4853:119:61","trueBody":{"id":11276,"nodeType":"Block","src":"4908:64:61","statements":[{"errorCall":{"arguments":[{"id":11273,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11246,"src":"4950:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11272,"name":"AddressEmptyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11076,"src":"4933:16:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":11274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4933:24:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11275,"nodeType":"RevertStatement","src":"4926:31:61"}]}},{"expression":{"id":11278,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11250,"src":"4992:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11254,"id":11279,"nodeType":"Return","src":"4985:17:61"}]},"id":11281,"nodeType":"IfStatement","src":"4605:408:61","trueBody":{"id":11261,"nodeType":"Block","src":"4619:44:61","statements":[{"expression":{"arguments":[{"id":11258,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11250,"src":"4641:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11257,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11325,"src":"4633:7:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":11259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4633:19:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11260,"nodeType":"ExpressionStatement","src":"4633:19:61"}]}}]},"documentation":{"id":11244,"nodeType":"StructuredDocumentation","src":"4175:257:61","text":" @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n of an unsuccessful call."},"id":11283,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"4446:26:61","nodeType":"FunctionDefinition","parameters":{"id":11251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11246,"mutability":"mutable","name":"target","nameLocation":"4490:6:61","nodeType":"VariableDeclaration","scope":11283,"src":"4482:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11245,"name":"address","nodeType":"ElementaryTypeName","src":"4482:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11248,"mutability":"mutable","name":"success","nameLocation":"4511:7:61","nodeType":"VariableDeclaration","scope":11283,"src":"4506:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11247,"name":"bool","nodeType":"ElementaryTypeName","src":"4506:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11250,"mutability":"mutable","name":"returndata","nameLocation":"4541:10:61","nodeType":"VariableDeclaration","scope":11283,"src":"4528:23:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11249,"name":"bytes","nodeType":"ElementaryTypeName","src":"4528:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4472:85:61"},"returnParameters":{"id":11254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11253,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11283,"src":"4581:12:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11252,"name":"bytes","nodeType":"ElementaryTypeName","src":"4581:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4580:14:61"},"scope":11326,"src":"4437:582:61","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11304,"nodeType":"Block","src":"5323:122:61","statements":[{"condition":{"id":11294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5337:8:61","subExpression":{"id":11293,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11286,"src":"5338:7:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11302,"nodeType":"Block","src":"5397:42:61","statements":[{"expression":{"id":11300,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11288,"src":"5418:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11292,"id":11301,"nodeType":"Return","src":"5411:17:61"}]},"id":11303,"nodeType":"IfStatement","src":"5333:106:61","trueBody":{"id":11299,"nodeType":"Block","src":"5347:44:61","statements":[{"expression":{"arguments":[{"id":11296,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11288,"src":"5369:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11295,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11325,"src":"5361:7:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":11297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5361:19:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11298,"nodeType":"ExpressionStatement","src":"5361:19:61"}]}}]},"documentation":{"id":11284,"nodeType":"StructuredDocumentation","src":"5025:191:61","text":" @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n revert reason or with a default {Errors.FailedCall} error."},"id":11305,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"5230:16:61","nodeType":"FunctionDefinition","parameters":{"id":11289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11286,"mutability":"mutable","name":"success","nameLocation":"5252:7:61","nodeType":"VariableDeclaration","scope":11305,"src":"5247:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11285,"name":"bool","nodeType":"ElementaryTypeName","src":"5247:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11288,"mutability":"mutable","name":"returndata","nameLocation":"5274:10:61","nodeType":"VariableDeclaration","scope":11305,"src":"5261:23:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11287,"name":"bytes","nodeType":"ElementaryTypeName","src":"5261:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5246:39:61"},"returnParameters":{"id":11292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11291,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11305,"src":"5309:12:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11290,"name":"bytes","nodeType":"ElementaryTypeName","src":"5309:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5308:14:61"},"scope":11326,"src":"5221:224:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11324,"nodeType":"Block","src":"5614:379:61","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11311,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11308,"src":"5690:10:61","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5701:6:61","memberName":"length","nodeType":"MemberAccess","src":"5690:17:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11313,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5710:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5690:21:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11322,"nodeType":"Block","src":"5936:51:61","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":11317,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12388,"src":"5957:6:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12388_$","typeString":"type(library Errors)"}},"id":11319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5964:10:61","memberName":"FailedCall","nodeType":"MemberAccess","referencedDeclaration":12379,"src":"5957:17:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":11320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5957:19:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11321,"nodeType":"RevertStatement","src":"5950:26:61"}]},"id":11323,"nodeType":"IfStatement","src":"5686:301:61","trueBody":{"id":11316,"nodeType":"Block","src":"5713:217:61","statements":[{"AST":{"nativeSrc":"5840:80:61","nodeType":"YulBlock","src":"5840:80:61","statements":[{"expression":{"arguments":[{"arguments":[{"name":"returndata","nativeSrc":"5869:10:61","nodeType":"YulIdentifier","src":"5869:10:61"},{"kind":"number","nativeSrc":"5881:4:61","nodeType":"YulLiteral","src":"5881:4:61","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5865:3:61","nodeType":"YulIdentifier","src":"5865:3:61"},"nativeSrc":"5865:21:61","nodeType":"YulFunctionCall","src":"5865:21:61"},{"arguments":[{"name":"returndata","nativeSrc":"5894:10:61","nodeType":"YulIdentifier","src":"5894:10:61"}],"functionName":{"name":"mload","nativeSrc":"5888:5:61","nodeType":"YulIdentifier","src":"5888:5:61"},"nativeSrc":"5888:17:61","nodeType":"YulFunctionCall","src":"5888:17:61"}],"functionName":{"name":"revert","nativeSrc":"5858:6:61","nodeType":"YulIdentifier","src":"5858:6:61"},"nativeSrc":"5858:48:61","nodeType":"YulFunctionCall","src":"5858:48:61"},"nativeSrc":"5858:48:61","nodeType":"YulExpressionStatement","src":"5858:48:61"}]},"evmVersion":"cancun","externalReferences":[{"declaration":11308,"isOffset":false,"isSlot":false,"src":"5869:10:61","valueSize":1},{"declaration":11308,"isOffset":false,"isSlot":false,"src":"5894:10:61","valueSize":1}],"flags":["memory-safe"],"id":11315,"nodeType":"InlineAssembly","src":"5815:105:61"}]}}]},"documentation":{"id":11306,"nodeType":"StructuredDocumentation","src":"5451:103:61","text":" @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}."},"id":11325,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"5568:7:61","nodeType":"FunctionDefinition","parameters":{"id":11309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11308,"mutability":"mutable","name":"returndata","nameLocation":"5589:10:61","nodeType":"VariableDeclaration","scope":11325,"src":"5576:23:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11307,"name":"bytes","nodeType":"ElementaryTypeName","src":"5576:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5575:25:61"},"returnParameters":{"id":11310,"nodeType":"ParameterList","parameters":[],"src":"5614:0:61"},"scope":11326,"src":"5559:434:61","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":11327,"src":"233:5762:61","usedErrors":[11076],"usedEvents":[]}],"src":"101:5895:61"},"id":61},"@openzeppelin/contracts/utils/Arrays.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Arrays.sol","exportedSymbols":{"Arrays":[12304],"Comparators":[12336],"Math":[14327],"SlotDerivation":[12570],"StorageSlot":[12694]},"id":12305,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":11328,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"183:24:62"},{"absolutePath":"@openzeppelin/contracts/utils/Comparators.sol","file":"./Comparators.sol","id":11330,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12305,"sourceUnit":12337,"src":"209:46:62","symbolAliases":[{"foreign":{"id":11329,"name":"Comparators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12336,"src":"217:11:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/SlotDerivation.sol","file":"./SlotDerivation.sol","id":11332,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12305,"sourceUnit":12571,"src":"256:52:62","symbolAliases":[{"foreign":{"id":11331,"name":"SlotDerivation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12570,"src":"264:14:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","file":"./StorageSlot.sol","id":11334,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12305,"sourceUnit":12695,"src":"309:46:62","symbolAliases":[{"foreign":{"id":11333,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12694,"src":"317:11:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","file":"./math/Math.sol","id":11336,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12305,"sourceUnit":14328,"src":"356:37:62","symbolAliases":[{"foreign":{"id":11335,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"364:4:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Arrays","contractDependencies":[],"contractKind":"library","documentation":{"id":11337,"nodeType":"StructuredDocumentation","src":"395:63:62","text":" @dev Collection of functions related to array types."},"fullyImplemented":true,"id":12304,"linearizedBaseContracts":[12304],"name":"Arrays","nameLocation":"467:6:62","nodeType":"ContractDefinition","nodes":[{"global":false,"id":11340,"libraryName":{"id":11338,"name":"SlotDerivation","nameLocations":["486:14:62"],"nodeType":"IdentifierPath","referencedDeclaration":12570,"src":"486:14:62"},"nodeType":"UsingForDirective","src":"480:33:62","typeName":{"id":11339,"name":"bytes32","nodeType":"ElementaryTypeName","src":"505:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":11343,"libraryName":{"id":11341,"name":"StorageSlot","nameLocations":["524:11:62"],"nodeType":"IdentifierPath","referencedDeclaration":12694,"src":"524:11:62"},"nodeType":"UsingForDirective","src":"518:30:62","typeName":{"id":11342,"name":"bytes32","nodeType":"ElementaryTypeName","src":"540:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":11375,"nodeType":"Block","src":"1628:83:62","statements":[{"expression":{"arguments":[{"arguments":[{"id":11365,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11347,"src":"1656:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":11364,"name":"_begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11600,"src":"1649:6:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory) pure returns (uint256)"}},"id":11366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1649:13:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":11368,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11347,"src":"1669:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":11367,"name":"_end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11620,"src":"1664:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory) pure returns (uint256)"}},"id":11369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1664:11:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11370,"name":"comp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11357,"src":"1677:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11363,"name":"_quickSort","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11589,"src":"1638:10:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$__$","typeString":"function (uint256,uint256,function (uint256,uint256) pure returns (bool)) pure"}},"id":11371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1638:44:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11372,"nodeType":"ExpressionStatement","src":"1638:44:62"},{"expression":{"id":11373,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11347,"src":"1699:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":11362,"id":11374,"nodeType":"Return","src":"1692:12:62"}]},"documentation":{"id":11344,"nodeType":"StructuredDocumentation","src":"554:915:62","text":" @dev Sort an array of uint256 (in memory) following the provided comparator function.\n This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n consume more gas than is available in a block, leading to potential DoS.\n IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way."},"id":11376,"implemented":true,"kind":"function","modifiers":[],"name":"sort","nameLocation":"1483:4:62","nodeType":"FunctionDefinition","parameters":{"id":11358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11347,"mutability":"mutable","name":"array","nameLocation":"1514:5:62","nodeType":"VariableDeclaration","scope":11376,"src":"1497:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11345,"name":"uint256","nodeType":"ElementaryTypeName","src":"1497:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11346,"nodeType":"ArrayTypeName","src":"1497:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11357,"mutability":"mutable","name":"comp","nameLocation":"1576:4:62","nodeType":"VariableDeclaration","scope":11376,"src":"1529:51:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"typeName":{"id":11356,"nodeType":"FunctionTypeName","parameterTypes":{"id":11352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11349,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11356,"src":"1538:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11348,"name":"uint256","nodeType":"ElementaryTypeName","src":"1538:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11351,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11356,"src":"1547:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11350,"name":"uint256","nodeType":"ElementaryTypeName","src":"1547:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1537:18:62"},"returnParameterTypes":{"id":11355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11354,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11356,"src":"1570:4:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11353,"name":"bool","nodeType":"ElementaryTypeName","src":"1570:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1569:6:62"},"src":"1529:51:62","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"1487:99:62"},"returnParameters":{"id":11362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11361,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11376,"src":"1610:16:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11359,"name":"uint256","nodeType":"ElementaryTypeName","src":"1610:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11360,"nodeType":"ArrayTypeName","src":"1610:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1609:18:62"},"scope":12304,"src":"1474:237:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11394,"nodeType":"Block","src":"1894:66:62","statements":[{"expression":{"arguments":[{"id":11387,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11380,"src":"1909:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":11388,"name":"Comparators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12336,"src":"1916:11:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Comparators_$12336_$","typeString":"type(library Comparators)"}},"id":11389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1928:2:62","memberName":"lt","nodeType":"MemberAccess","referencedDeclaration":12321,"src":"1916:14:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11386,"name":"sort","nodeType":"Identifier","overloadedDeclarations":[11376,11395,11427,11448,11480,11501],"referencedDeclaration":11376,"src":"1904:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"}},"id":11390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1904:27:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11391,"nodeType":"ExpressionStatement","src":"1904:27:62"},{"expression":{"id":11392,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11380,"src":"1948:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":11385,"id":11393,"nodeType":"Return","src":"1941:12:62"}]},"documentation":{"id":11377,"nodeType":"StructuredDocumentation","src":"1717:93:62","text":" @dev Variant of {sort} that sorts an array of uint256 in increasing order."},"id":11395,"implemented":true,"kind":"function","modifiers":[],"name":"sort","nameLocation":"1824:4:62","nodeType":"FunctionDefinition","parameters":{"id":11381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11380,"mutability":"mutable","name":"array","nameLocation":"1846:5:62","nodeType":"VariableDeclaration","scope":11395,"src":"1829:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11378,"name":"uint256","nodeType":"ElementaryTypeName","src":"1829:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11379,"nodeType":"ArrayTypeName","src":"1829:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1828:24:62"},"returnParameters":{"id":11385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11384,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11395,"src":"1876:16:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11382,"name":"uint256","nodeType":"ElementaryTypeName","src":"1876:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11383,"nodeType":"ArrayTypeName","src":"1876:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1875:18:62"},"scope":12304,"src":"1815:145:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11426,"nodeType":"Block","src":"3040:97:62","statements":[{"expression":{"arguments":[{"arguments":[{"id":11417,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11399,"src":"3075:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":11416,"name":"_castToUint256Array","nodeType":"Identifier","overloadedDeclarations":[11652,11664],"referencedDeclaration":11652,"src":"3055:19:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address[] memory) pure returns (uint256[] memory)"}},"id":11418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3055:26:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"arguments":[{"id":11420,"name":"comp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11409,"src":"3102:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) pure returns (bool)"}],"id":11419,"name":"_castToUint256Comp","nodeType":"Identifier","overloadedDeclarations":[11690,11716],"referencedDeclaration":11690,"src":"3083:18:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$_$returns$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$","typeString":"function (function (address,address) pure returns (bool)) pure returns (function (uint256,uint256) pure returns (bool))"}},"id":11421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3083:24:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11415,"name":"sort","nodeType":"Identifier","overloadedDeclarations":[11376,11395,11427,11448,11480,11501],"referencedDeclaration":11376,"src":"3050:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"}},"id":11422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3050:58:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11423,"nodeType":"ExpressionStatement","src":"3050:58:62"},{"expression":{"id":11424,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11399,"src":"3125:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":11414,"id":11425,"nodeType":"Return","src":"3118:12:62"}]},"documentation":{"id":11396,"nodeType":"StructuredDocumentation","src":"1966:915:62","text":" @dev Sort an array of address (in memory) following the provided comparator function.\n This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n consume more gas than is available in a block, leading to potential DoS.\n IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way."},"id":11427,"implemented":true,"kind":"function","modifiers":[],"name":"sort","nameLocation":"2895:4:62","nodeType":"FunctionDefinition","parameters":{"id":11410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11399,"mutability":"mutable","name":"array","nameLocation":"2926:5:62","nodeType":"VariableDeclaration","scope":11427,"src":"2909:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":11397,"name":"address","nodeType":"ElementaryTypeName","src":"2909:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11398,"nodeType":"ArrayTypeName","src":"2909:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":11409,"mutability":"mutable","name":"comp","nameLocation":"2988:4:62","nodeType":"VariableDeclaration","scope":11427,"src":"2941:51:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) pure returns (bool)"},"typeName":{"id":11408,"nodeType":"FunctionTypeName","parameterTypes":{"id":11404,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11401,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11408,"src":"2950:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11400,"name":"address","nodeType":"ElementaryTypeName","src":"2950:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11403,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11408,"src":"2959:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11402,"name":"address","nodeType":"ElementaryTypeName","src":"2959:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2949:18:62"},"returnParameterTypes":{"id":11407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11406,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11408,"src":"2982:4:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11405,"name":"bool","nodeType":"ElementaryTypeName","src":"2982:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2981:6:62"},"src":"2941:51:62","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"2899:99:62"},"returnParameters":{"id":11414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11413,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11427,"src":"3022:16:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":11411,"name":"address","nodeType":"ElementaryTypeName","src":"3022:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11412,"nodeType":"ArrayTypeName","src":"3022:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3021:18:62"},"scope":12304,"src":"2886:251:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11447,"nodeType":"Block","src":"3320:87:62","statements":[{"expression":{"arguments":[{"arguments":[{"id":11439,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11431,"src":"3355:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":11438,"name":"_castToUint256Array","nodeType":"Identifier","overloadedDeclarations":[11652,11664],"referencedDeclaration":11652,"src":"3335:19:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address[] memory) pure returns (uint256[] memory)"}},"id":11440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3335:26:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":11441,"name":"Comparators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12336,"src":"3363:11:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Comparators_$12336_$","typeString":"type(library Comparators)"}},"id":11442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3375:2:62","memberName":"lt","nodeType":"MemberAccess","referencedDeclaration":12321,"src":"3363:14:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11437,"name":"sort","nodeType":"Identifier","overloadedDeclarations":[11376,11395,11427,11448,11480,11501],"referencedDeclaration":11376,"src":"3330:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"}},"id":11443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3330:48:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11444,"nodeType":"ExpressionStatement","src":"3330:48:62"},{"expression":{"id":11445,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11431,"src":"3395:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":11436,"id":11446,"nodeType":"Return","src":"3388:12:62"}]},"documentation":{"id":11428,"nodeType":"StructuredDocumentation","src":"3143:93:62","text":" @dev Variant of {sort} that sorts an array of address in increasing order."},"id":11448,"implemented":true,"kind":"function","modifiers":[],"name":"sort","nameLocation":"3250:4:62","nodeType":"FunctionDefinition","parameters":{"id":11432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11431,"mutability":"mutable","name":"array","nameLocation":"3272:5:62","nodeType":"VariableDeclaration","scope":11448,"src":"3255:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":11429,"name":"address","nodeType":"ElementaryTypeName","src":"3255:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11430,"nodeType":"ArrayTypeName","src":"3255:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3254:24:62"},"returnParameters":{"id":11436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11435,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11448,"src":"3302:16:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":11433,"name":"address","nodeType":"ElementaryTypeName","src":"3302:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11434,"nodeType":"ArrayTypeName","src":"3302:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3301:18:62"},"scope":12304,"src":"3241:166:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11479,"nodeType":"Block","src":"4487:97:62","statements":[{"expression":{"arguments":[{"arguments":[{"id":11470,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11452,"src":"4522:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}],"id":11469,"name":"_castToUint256Array","nodeType":"Identifier","overloadedDeclarations":[11652,11664],"referencedDeclaration":11664,"src":"4502:19:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (bytes32[] memory) pure returns (uint256[] memory)"}},"id":11471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4502:26:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"arguments":[{"id":11473,"name":"comp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11462,"src":"4549:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32,bytes32) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32,bytes32) pure returns (bool)"}],"id":11472,"name":"_castToUint256Comp","nodeType":"Identifier","overloadedDeclarations":[11690,11716],"referencedDeclaration":11716,"src":"4530:18:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$_$returns$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$","typeString":"function (function (bytes32,bytes32) pure returns (bool)) pure returns (function (uint256,uint256) pure returns (bool))"}},"id":11474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4530:24:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11468,"name":"sort","nodeType":"Identifier","overloadedDeclarations":[11376,11395,11427,11448,11480,11501],"referencedDeclaration":11376,"src":"4497:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"}},"id":11475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4497:58:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11476,"nodeType":"ExpressionStatement","src":"4497:58:62"},{"expression":{"id":11477,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11452,"src":"4572:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":11467,"id":11478,"nodeType":"Return","src":"4565:12:62"}]},"documentation":{"id":11449,"nodeType":"StructuredDocumentation","src":"3413:915:62","text":" @dev Sort an array of bytes32 (in memory) following the provided comparator function.\n This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n consume more gas than is available in a block, leading to potential DoS.\n IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way."},"id":11480,"implemented":true,"kind":"function","modifiers":[],"name":"sort","nameLocation":"4342:4:62","nodeType":"FunctionDefinition","parameters":{"id":11463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11452,"mutability":"mutable","name":"array","nameLocation":"4373:5:62","nodeType":"VariableDeclaration","scope":11480,"src":"4356:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":11450,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4356:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":11451,"nodeType":"ArrayTypeName","src":"4356:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":11462,"mutability":"mutable","name":"comp","nameLocation":"4435:4:62","nodeType":"VariableDeclaration","scope":11480,"src":"4388:51:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32,bytes32) pure returns (bool)"},"typeName":{"id":11461,"nodeType":"FunctionTypeName","parameterTypes":{"id":11457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11454,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11461,"src":"4397:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11453,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4397:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":11456,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11461,"src":"4406:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11455,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4406:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4396:18:62"},"returnParameterTypes":{"id":11460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11459,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11461,"src":"4429:4:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11458,"name":"bool","nodeType":"ElementaryTypeName","src":"4429:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4428:6:62"},"src":"4388:51:62","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32,bytes32) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"4346:99:62"},"returnParameters":{"id":11467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11466,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11480,"src":"4469:16:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":11464,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4469:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":11465,"nodeType":"ArrayTypeName","src":"4469:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"4468:18:62"},"scope":12304,"src":"4333:251:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11500,"nodeType":"Block","src":"4767:87:62","statements":[{"expression":{"arguments":[{"arguments":[{"id":11492,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"4802:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}],"id":11491,"name":"_castToUint256Array","nodeType":"Identifier","overloadedDeclarations":[11652,11664],"referencedDeclaration":11664,"src":"4782:19:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (bytes32[] memory) pure returns (uint256[] memory)"}},"id":11493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4782:26:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":11494,"name":"Comparators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12336,"src":"4810:11:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Comparators_$12336_$","typeString":"type(library Comparators)"}},"id":11495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4822:2:62","memberName":"lt","nodeType":"MemberAccess","referencedDeclaration":12321,"src":"4810:14:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11490,"name":"sort","nodeType":"Identifier","overloadedDeclarations":[11376,11395,11427,11448,11480,11501],"referencedDeclaration":11376,"src":"4777:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"}},"id":11496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4777:48:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11497,"nodeType":"ExpressionStatement","src":"4777:48:62"},{"expression":{"id":11498,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"4842:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":11489,"id":11499,"nodeType":"Return","src":"4835:12:62"}]},"documentation":{"id":11481,"nodeType":"StructuredDocumentation","src":"4590:93:62","text":" @dev Variant of {sort} that sorts an array of bytes32 in increasing order."},"id":11501,"implemented":true,"kind":"function","modifiers":[],"name":"sort","nameLocation":"4697:4:62","nodeType":"FunctionDefinition","parameters":{"id":11485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11484,"mutability":"mutable","name":"array","nameLocation":"4719:5:62","nodeType":"VariableDeclaration","scope":11501,"src":"4702:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":11482,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4702:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":11483,"nodeType":"ArrayTypeName","src":"4702:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"4701:24:62"},"returnParameters":{"id":11489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11488,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11501,"src":"4749:16:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":11486,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4749:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":11487,"nodeType":"ArrayTypeName","src":"4749:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"4748:18:62"},"scope":12304,"src":"4688:166:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11588,"nodeType":"Block","src":"5470:889:62","statements":[{"id":11587,"nodeType":"UncheckedBlock","src":"5480:873:62","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11519,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11506,"src":"5508:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":11520,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"5514:5:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5508:11:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30783430","id":11522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5522:4:62","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"0x40"},"src":"5508:18:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11525,"nodeType":"IfStatement","src":"5504:31:62","trueBody":{"functionReturnParameters":11518,"id":11524,"nodeType":"Return","src":"5528:7:62"}},{"assignments":[11527],"declarations":[{"constant":false,"id":11527,"mutability":"mutable","name":"pivot","nameLocation":"5599:5:62","nodeType":"VariableDeclaration","scope":11587,"src":"5591:13:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11526,"name":"uint256","nodeType":"ElementaryTypeName","src":"5591:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11531,"initialValue":{"arguments":[{"id":11529,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"5614:5:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11528,"name":"_mload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11630,"src":"5607:6:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":11530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5607:13:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5591:29:62"},{"assignments":[11533],"declarations":[{"constant":false,"id":11533,"mutability":"mutable","name":"pos","nameLocation":"5715:3:62","nodeType":"VariableDeclaration","scope":11587,"src":"5707:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11532,"name":"uint256","nodeType":"ElementaryTypeName","src":"5707:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11535,"initialValue":{"id":11534,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"5721:5:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5707:19:62"},{"body":{"id":11566,"nodeType":"Block","src":"5795:331:62","statements":[{"condition":{"arguments":[{"arguments":[{"id":11551,"name":"it","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11537,"src":"5829:2:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11550,"name":"_mload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11630,"src":"5822:6:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":11552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5822:10:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11553,"name":"pivot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11527,"src":"5834:5:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11549,"name":"comp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11516,"src":"5817:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":11554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5817:23:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11565,"nodeType":"IfStatement","src":"5813:299:62","trueBody":{"id":11564,"nodeType":"Block","src":"5842:270:62","statements":[{"expression":{"id":11557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11555,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11533,"src":"6046:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"30783230","id":11556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6053:4:62","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"6046:11:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11558,"nodeType":"ExpressionStatement","src":"6046:11:62"},{"expression":{"arguments":[{"id":11560,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11533,"src":"6085:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11561,"name":"it","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11537,"src":"6090:2:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11559,"name":"_swap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11640,"src":"6079:5:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":11562,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6079:14:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11563,"nodeType":"ExpressionStatement","src":"6079:14:62"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11542,"name":"it","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11537,"src":"5773:2:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11543,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11506,"src":"5778:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5773:8:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11567,"initializationExpression":{"assignments":[11537],"declarations":[{"constant":false,"id":11537,"mutability":"mutable","name":"it","nameLocation":"5754:2:62","nodeType":"VariableDeclaration","scope":11567,"src":"5746:10:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11536,"name":"uint256","nodeType":"ElementaryTypeName","src":"5746:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11541,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11538,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"5759:5:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783230","id":11539,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5767:4:62","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"5759:12:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5746:25:62"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":11547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11545,"name":"it","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11537,"src":"5783:2:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"30783230","id":11546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5789:4:62","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"5783:10:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11548,"nodeType":"ExpressionStatement","src":"5783:10:62"},"nodeType":"ForStatement","src":"5741:385:62"},{"expression":{"arguments":[{"id":11569,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"6146:5:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11570,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11533,"src":"6153:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11568,"name":"_swap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11640,"src":"6140:5:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":11571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6140:17:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11572,"nodeType":"ExpressionStatement","src":"6140:17:62"},{"expression":{"arguments":[{"id":11574,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"6207:5:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11575,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11533,"src":"6214:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11576,"name":"comp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11516,"src":"6219:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11573,"name":"_quickSort","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11589,"src":"6196:10:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$__$","typeString":"function (uint256,uint256,function (uint256,uint256) pure returns (bool)) pure"}},"id":11577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6196:28:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11578,"nodeType":"ExpressionStatement","src":"6196:28:62"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11580,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11533,"src":"6284:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783230","id":11581,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6290:4:62","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"6284:10:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11583,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11506,"src":"6296:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11584,"name":"comp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11516,"src":"6301:4:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11579,"name":"_quickSort","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11589,"src":"6273:10:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$__$","typeString":"function (uint256,uint256,function (uint256,uint256) pure returns (bool)) pure"}},"id":11585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6273:33:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11586,"nodeType":"ExpressionStatement","src":"6273:33:62"}]}]},"documentation":{"id":11502,"nodeType":"StructuredDocumentation","src":"4860:491:62","text":" @dev Performs a quick sort of a segment of memory. The segment sorted starts at `begin` (inclusive), and stops\n at end (exclusive). Sorting follows the `comp` comparator.\n Invariant: `begin <= end`. This is the case when initially called by {sort} and is preserved in subcalls.\n IMPORTANT: Memory locations between `begin` and `end` are not validated/zeroed. This function should\n be used only if the limits are within a memory array."},"id":11589,"implemented":true,"kind":"function","modifiers":[],"name":"_quickSort","nameLocation":"5365:10:62","nodeType":"FunctionDefinition","parameters":{"id":11517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11504,"mutability":"mutable","name":"begin","nameLocation":"5384:5:62","nodeType":"VariableDeclaration","scope":11589,"src":"5376:13:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11503,"name":"uint256","nodeType":"ElementaryTypeName","src":"5376:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11506,"mutability":"mutable","name":"end","nameLocation":"5399:3:62","nodeType":"VariableDeclaration","scope":11589,"src":"5391:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11505,"name":"uint256","nodeType":"ElementaryTypeName","src":"5391:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11516,"mutability":"mutable","name":"comp","nameLocation":"5451:4:62","nodeType":"VariableDeclaration","scope":11589,"src":"5404:51:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"typeName":{"id":11515,"nodeType":"FunctionTypeName","parameterTypes":{"id":11511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11508,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11515,"src":"5413:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11507,"name":"uint256","nodeType":"ElementaryTypeName","src":"5413:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11510,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11515,"src":"5422:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11509,"name":"uint256","nodeType":"ElementaryTypeName","src":"5422:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5412:18:62"},"returnParameterTypes":{"id":11514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11513,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11515,"src":"5445:4:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11512,"name":"bool","nodeType":"ElementaryTypeName","src":"5445:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5444:6:62"},"src":"5404:51:62","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"5375:81:62"},"returnParameters":{"id":11518,"nodeType":"ParameterList","parameters":[],"src":"5470:0:62"},"scope":12304,"src":"5356:1003:62","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11599,"nodeType":"Block","src":"6532:88:62","statements":[{"AST":{"nativeSrc":"6567:47:62","nodeType":"YulBlock","src":"6567:47:62","statements":[{"nativeSrc":"6581:23:62","nodeType":"YulAssignment","src":"6581:23:62","value":{"arguments":[{"name":"array","nativeSrc":"6592:5:62","nodeType":"YulIdentifier","src":"6592:5:62"},{"kind":"number","nativeSrc":"6599:4:62","nodeType":"YulLiteral","src":"6599:4:62","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"6588:3:62","nodeType":"YulIdentifier","src":"6588:3:62"},"nativeSrc":"6588:16:62","nodeType":"YulFunctionCall","src":"6588:16:62"},"variableNames":[{"name":"ptr","nativeSrc":"6581:3:62","nodeType":"YulIdentifier","src":"6581:3:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11593,"isOffset":false,"isSlot":false,"src":"6592:5:62","valueSize":1},{"declaration":11596,"isOffset":false,"isSlot":false,"src":"6581:3:62","valueSize":1}],"flags":["memory-safe"],"id":11598,"nodeType":"InlineAssembly","src":"6542:72:62"}]},"documentation":{"id":11590,"nodeType":"StructuredDocumentation","src":"6365:87:62","text":" @dev Pointer to the memory location of the first element of `array`."},"id":11600,"implemented":true,"kind":"function","modifiers":[],"name":"_begin","nameLocation":"6466:6:62","nodeType":"FunctionDefinition","parameters":{"id":11594,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11593,"mutability":"mutable","name":"array","nameLocation":"6490:5:62","nodeType":"VariableDeclaration","scope":11600,"src":"6473:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11591,"name":"uint256","nodeType":"ElementaryTypeName","src":"6473:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11592,"nodeType":"ArrayTypeName","src":"6473:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"6472:24:62"},"returnParameters":{"id":11597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11596,"mutability":"mutable","name":"ptr","nameLocation":"6527:3:62","nodeType":"VariableDeclaration","scope":11600,"src":"6519:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11595,"name":"uint256","nodeType":"ElementaryTypeName","src":"6519:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6518:13:62"},"scope":12304,"src":"6457:163:62","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11619,"nodeType":"Block","src":"6892:93:62","statements":[{"id":11618,"nodeType":"UncheckedBlock","src":"6902:77:62","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":11610,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11604,"src":"6940:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":11609,"name":"_begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11600,"src":"6933:6:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory) pure returns (uint256)"}},"id":11611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6933:13:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11612,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11604,"src":"6949:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6955:6:62","memberName":"length","nodeType":"MemberAccess","src":"6949:12:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"30783230","id":11614,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6964:4:62","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"6949:19:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6933:35:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11608,"id":11617,"nodeType":"Return","src":"6926:42:62"}]}]},"documentation":{"id":11601,"nodeType":"StructuredDocumentation","src":"6626:188:62","text":" @dev Pointer to the memory location of the first memory word (32bytes) after `array`. This is the memory word\n that comes just after the last element of the array."},"id":11620,"implemented":true,"kind":"function","modifiers":[],"name":"_end","nameLocation":"6828:4:62","nodeType":"FunctionDefinition","parameters":{"id":11605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11604,"mutability":"mutable","name":"array","nameLocation":"6850:5:62","nodeType":"VariableDeclaration","scope":11620,"src":"6833:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11602,"name":"uint256","nodeType":"ElementaryTypeName","src":"6833:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11603,"nodeType":"ArrayTypeName","src":"6833:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"6832:24:62"},"returnParameters":{"id":11608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11607,"mutability":"mutable","name":"ptr","nameLocation":"6887:3:62","nodeType":"VariableDeclaration","scope":11620,"src":"6879:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11606,"name":"uint256","nodeType":"ElementaryTypeName","src":"6879:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6878:13:62"},"scope":12304,"src":"6819:166:62","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11629,"nodeType":"Block","src":"7136:68:62","statements":[{"AST":{"nativeSrc":"7155:43:62","nodeType":"YulBlock","src":"7155:43:62","statements":[{"nativeSrc":"7169:19:62","nodeType":"YulAssignment","src":"7169:19:62","value":{"arguments":[{"name":"ptr","nativeSrc":"7184:3:62","nodeType":"YulIdentifier","src":"7184:3:62"}],"functionName":{"name":"mload","nativeSrc":"7178:5:62","nodeType":"YulIdentifier","src":"7178:5:62"},"nativeSrc":"7178:10:62","nodeType":"YulFunctionCall","src":"7178:10:62"},"variableNames":[{"name":"value","nativeSrc":"7169:5:62","nodeType":"YulIdentifier","src":"7169:5:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11623,"isOffset":false,"isSlot":false,"src":"7184:3:62","valueSize":1},{"declaration":11626,"isOffset":false,"isSlot":false,"src":"7169:5:62","valueSize":1}],"id":11628,"nodeType":"InlineAssembly","src":"7146:52:62"}]},"documentation":{"id":11621,"nodeType":"StructuredDocumentation","src":"6991:74:62","text":" @dev Load memory word (as a uint256) at location `ptr`."},"id":11630,"implemented":true,"kind":"function","modifiers":[],"name":"_mload","nameLocation":"7079:6:62","nodeType":"FunctionDefinition","parameters":{"id":11624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11623,"mutability":"mutable","name":"ptr","nameLocation":"7094:3:62","nodeType":"VariableDeclaration","scope":11630,"src":"7086:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11622,"name":"uint256","nodeType":"ElementaryTypeName","src":"7086:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7085:13:62"},"returnParameters":{"id":11627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11626,"mutability":"mutable","name":"value","nameLocation":"7129:5:62","nodeType":"VariableDeclaration","scope":11630,"src":"7121:13:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11625,"name":"uint256","nodeType":"ElementaryTypeName","src":"7121:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7120:15:62"},"scope":12304,"src":"7070:134:62","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11639,"nodeType":"Block","src":"7348:178:62","statements":[{"AST":{"nativeSrc":"7367:153:62","nodeType":"YulBlock","src":"7367:153:62","statements":[{"nativeSrc":"7381:25:62","nodeType":"YulVariableDeclaration","src":"7381:25:62","value":{"arguments":[{"name":"ptr1","nativeSrc":"7401:4:62","nodeType":"YulIdentifier","src":"7401:4:62"}],"functionName":{"name":"mload","nativeSrc":"7395:5:62","nodeType":"YulIdentifier","src":"7395:5:62"},"nativeSrc":"7395:11:62","nodeType":"YulFunctionCall","src":"7395:11:62"},"variables":[{"name":"value1","nativeSrc":"7385:6:62","nodeType":"YulTypedName","src":"7385:6:62","type":""}]},{"nativeSrc":"7419:25:62","nodeType":"YulVariableDeclaration","src":"7419:25:62","value":{"arguments":[{"name":"ptr2","nativeSrc":"7439:4:62","nodeType":"YulIdentifier","src":"7439:4:62"}],"functionName":{"name":"mload","nativeSrc":"7433:5:62","nodeType":"YulIdentifier","src":"7433:5:62"},"nativeSrc":"7433:11:62","nodeType":"YulFunctionCall","src":"7433:11:62"},"variables":[{"name":"value2","nativeSrc":"7423:6:62","nodeType":"YulTypedName","src":"7423:6:62","type":""}]},{"expression":{"arguments":[{"name":"ptr1","nativeSrc":"7464:4:62","nodeType":"YulIdentifier","src":"7464:4:62"},{"name":"value2","nativeSrc":"7470:6:62","nodeType":"YulIdentifier","src":"7470:6:62"}],"functionName":{"name":"mstore","nativeSrc":"7457:6:62","nodeType":"YulIdentifier","src":"7457:6:62"},"nativeSrc":"7457:20:62","nodeType":"YulFunctionCall","src":"7457:20:62"},"nativeSrc":"7457:20:62","nodeType":"YulExpressionStatement","src":"7457:20:62"},{"expression":{"arguments":[{"name":"ptr2","nativeSrc":"7497:4:62","nodeType":"YulIdentifier","src":"7497:4:62"},{"name":"value1","nativeSrc":"7503:6:62","nodeType":"YulIdentifier","src":"7503:6:62"}],"functionName":{"name":"mstore","nativeSrc":"7490:6:62","nodeType":"YulIdentifier","src":"7490:6:62"},"nativeSrc":"7490:20:62","nodeType":"YulFunctionCall","src":"7490:20:62"},"nativeSrc":"7490:20:62","nodeType":"YulExpressionStatement","src":"7490:20:62"}]},"evmVersion":"cancun","externalReferences":[{"declaration":11633,"isOffset":false,"isSlot":false,"src":"7401:4:62","valueSize":1},{"declaration":11633,"isOffset":false,"isSlot":false,"src":"7464:4:62","valueSize":1},{"declaration":11635,"isOffset":false,"isSlot":false,"src":"7439:4:62","valueSize":1},{"declaration":11635,"isOffset":false,"isSlot":false,"src":"7497:4:62","valueSize":1}],"id":11638,"nodeType":"InlineAssembly","src":"7358:162:62"}]},"documentation":{"id":11631,"nodeType":"StructuredDocumentation","src":"7210:77:62","text":" @dev Swaps the elements memory location `ptr1` and `ptr2`."},"id":11640,"implemented":true,"kind":"function","modifiers":[],"name":"_swap","nameLocation":"7301:5:62","nodeType":"FunctionDefinition","parameters":{"id":11636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11633,"mutability":"mutable","name":"ptr1","nameLocation":"7315:4:62","nodeType":"VariableDeclaration","scope":11640,"src":"7307:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11632,"name":"uint256","nodeType":"ElementaryTypeName","src":"7307:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11635,"mutability":"mutable","name":"ptr2","nameLocation":"7329:4:62","nodeType":"VariableDeclaration","scope":11640,"src":"7321:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11634,"name":"uint256","nodeType":"ElementaryTypeName","src":"7321:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7306:28:62"},"returnParameters":{"id":11637,"nodeType":"ParameterList","parameters":[],"src":"7348:0:62"},"scope":12304,"src":"7292:234:62","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11651,"nodeType":"Block","src":"7713:64:62","statements":[{"AST":{"nativeSrc":"7732:39:62","nodeType":"YulBlock","src":"7732:39:62","statements":[{"nativeSrc":"7746:15:62","nodeType":"YulAssignment","src":"7746:15:62","value":{"name":"input","nativeSrc":"7756:5:62","nodeType":"YulIdentifier","src":"7756:5:62"},"variableNames":[{"name":"output","nativeSrc":"7746:6:62","nodeType":"YulIdentifier","src":"7746:6:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11644,"isOffset":false,"isSlot":false,"src":"7756:5:62","valueSize":1},{"declaration":11648,"isOffset":false,"isSlot":false,"src":"7746:6:62","valueSize":1}],"id":11650,"nodeType":"InlineAssembly","src":"7723:48:62"}]},"documentation":{"id":11641,"nodeType":"StructuredDocumentation","src":"7532:76:62","text":"@dev Helper: low level cast address memory array to uint256 memory array"},"id":11652,"implemented":true,"kind":"function","modifiers":[],"name":"_castToUint256Array","nameLocation":"7622:19:62","nodeType":"FunctionDefinition","parameters":{"id":11645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11644,"mutability":"mutable","name":"input","nameLocation":"7659:5:62","nodeType":"VariableDeclaration","scope":11652,"src":"7642:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":11642,"name":"address","nodeType":"ElementaryTypeName","src":"7642:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11643,"nodeType":"ArrayTypeName","src":"7642:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"7641:24:62"},"returnParameters":{"id":11649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11648,"mutability":"mutable","name":"output","nameLocation":"7705:6:62","nodeType":"VariableDeclaration","scope":11652,"src":"7688:23:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11646,"name":"uint256","nodeType":"ElementaryTypeName","src":"7688:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11647,"nodeType":"ArrayTypeName","src":"7688:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7687:25:62"},"scope":12304,"src":"7613:164:62","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11663,"nodeType":"Block","src":"7964:64:62","statements":[{"AST":{"nativeSrc":"7983:39:62","nodeType":"YulBlock","src":"7983:39:62","statements":[{"nativeSrc":"7997:15:62","nodeType":"YulAssignment","src":"7997:15:62","value":{"name":"input","nativeSrc":"8007:5:62","nodeType":"YulIdentifier","src":"8007:5:62"},"variableNames":[{"name":"output","nativeSrc":"7997:6:62","nodeType":"YulIdentifier","src":"7997:6:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11656,"isOffset":false,"isSlot":false,"src":"8007:5:62","valueSize":1},{"declaration":11660,"isOffset":false,"isSlot":false,"src":"7997:6:62","valueSize":1}],"id":11662,"nodeType":"InlineAssembly","src":"7974:48:62"}]},"documentation":{"id":11653,"nodeType":"StructuredDocumentation","src":"7783:76:62","text":"@dev Helper: low level cast bytes32 memory array to uint256 memory array"},"id":11664,"implemented":true,"kind":"function","modifiers":[],"name":"_castToUint256Array","nameLocation":"7873:19:62","nodeType":"FunctionDefinition","parameters":{"id":11657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11656,"mutability":"mutable","name":"input","nameLocation":"7910:5:62","nodeType":"VariableDeclaration","scope":11664,"src":"7893:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":11654,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7893:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":11655,"nodeType":"ArrayTypeName","src":"7893:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"7892:24:62"},"returnParameters":{"id":11661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11660,"mutability":"mutable","name":"output","nameLocation":"7956:6:62","nodeType":"VariableDeclaration","scope":11664,"src":"7939:23:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11658,"name":"uint256","nodeType":"ElementaryTypeName","src":"7939:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11659,"nodeType":"ArrayTypeName","src":"7939:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7938:25:62"},"scope":12304,"src":"7864:164:62","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11689,"nodeType":"Block","src":"8290:64:62","statements":[{"AST":{"nativeSrc":"8309:39:62","nodeType":"YulBlock","src":"8309:39:62","statements":[{"nativeSrc":"8323:15:62","nodeType":"YulAssignment","src":"8323:15:62","value":{"name":"input","nativeSrc":"8333:5:62","nodeType":"YulIdentifier","src":"8333:5:62"},"variableNames":[{"name":"output","nativeSrc":"8323:6:62","nodeType":"YulIdentifier","src":"8323:6:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11675,"isOffset":false,"isSlot":false,"src":"8333:5:62","valueSize":1},{"declaration":11686,"isOffset":false,"isSlot":false,"src":"8323:6:62","valueSize":1}],"id":11688,"nodeType":"InlineAssembly","src":"8300:48:62"}]},"documentation":{"id":11665,"nodeType":"StructuredDocumentation","src":"8034:78:62","text":"@dev Helper: low level cast address comp function to uint256 comp function"},"id":11690,"implemented":true,"kind":"function","modifiers":[],"name":"_castToUint256Comp","nameLocation":"8126:18:62","nodeType":"FunctionDefinition","parameters":{"id":11676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11675,"mutability":"mutable","name":"input","nameLocation":"8201:5:62","nodeType":"VariableDeclaration","scope":11690,"src":"8154:52:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) pure returns (bool)"},"typeName":{"id":11674,"nodeType":"FunctionTypeName","parameterTypes":{"id":11670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11667,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11674,"src":"8163:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11666,"name":"address","nodeType":"ElementaryTypeName","src":"8163:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11669,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11674,"src":"8172:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11668,"name":"address","nodeType":"ElementaryTypeName","src":"8172:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8162:18:62"},"returnParameterTypes":{"id":11673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11672,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11674,"src":"8195:4:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11671,"name":"bool","nodeType":"ElementaryTypeName","src":"8195:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8194:6:62"},"src":"8154:52:62","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"8144:68:62"},"returnParameters":{"id":11687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11686,"mutability":"mutable","name":"output","nameLocation":"8282:6:62","nodeType":"VariableDeclaration","scope":11690,"src":"8235:53:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"typeName":{"id":11685,"nodeType":"FunctionTypeName","parameterTypes":{"id":11681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11678,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11685,"src":"8244:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11677,"name":"uint256","nodeType":"ElementaryTypeName","src":"8244:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11680,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11685,"src":"8253:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11679,"name":"uint256","nodeType":"ElementaryTypeName","src":"8253:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8243:18:62"},"returnParameterTypes":{"id":11684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11683,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11685,"src":"8276:4:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11682,"name":"bool","nodeType":"ElementaryTypeName","src":"8276:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8275:6:62"},"src":"8235:53:62","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"8234:55:62"},"scope":12304,"src":"8117:237:62","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11715,"nodeType":"Block","src":"8616:64:62","statements":[{"AST":{"nativeSrc":"8635:39:62","nodeType":"YulBlock","src":"8635:39:62","statements":[{"nativeSrc":"8649:15:62","nodeType":"YulAssignment","src":"8649:15:62","value":{"name":"input","nativeSrc":"8659:5:62","nodeType":"YulIdentifier","src":"8659:5:62"},"variableNames":[{"name":"output","nativeSrc":"8649:6:62","nodeType":"YulIdentifier","src":"8649:6:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11701,"isOffset":false,"isSlot":false,"src":"8659:5:62","valueSize":1},{"declaration":11712,"isOffset":false,"isSlot":false,"src":"8649:6:62","valueSize":1}],"id":11714,"nodeType":"InlineAssembly","src":"8626:48:62"}]},"documentation":{"id":11691,"nodeType":"StructuredDocumentation","src":"8360:78:62","text":"@dev Helper: low level cast bytes32 comp function to uint256 comp function"},"id":11716,"implemented":true,"kind":"function","modifiers":[],"name":"_castToUint256Comp","nameLocation":"8452:18:62","nodeType":"FunctionDefinition","parameters":{"id":11702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11701,"mutability":"mutable","name":"input","nameLocation":"8527:5:62","nodeType":"VariableDeclaration","scope":11716,"src":"8480:52:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32,bytes32) pure returns (bool)"},"typeName":{"id":11700,"nodeType":"FunctionTypeName","parameterTypes":{"id":11696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11693,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11700,"src":"8489:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11692,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8489:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":11695,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11700,"src":"8498:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11694,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8498:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8488:18:62"},"returnParameterTypes":{"id":11699,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11698,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11700,"src":"8521:4:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11697,"name":"bool","nodeType":"ElementaryTypeName","src":"8521:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8520:6:62"},"src":"8480:52:62","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32,bytes32) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"8470:68:62"},"returnParameters":{"id":11713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11712,"mutability":"mutable","name":"output","nameLocation":"8608:6:62","nodeType":"VariableDeclaration","scope":11716,"src":"8561:53:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"typeName":{"id":11711,"nodeType":"FunctionTypeName","parameterTypes":{"id":11707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11704,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11711,"src":"8570:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11703,"name":"uint256","nodeType":"ElementaryTypeName","src":"8570:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11706,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11711,"src":"8579:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11705,"name":"uint256","nodeType":"ElementaryTypeName","src":"8579:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8569:18:62"},"returnParameterTypes":{"id":11710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11709,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11711,"src":"8602:4:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11708,"name":"bool","nodeType":"ElementaryTypeName","src":"8602:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8601:6:62"},"src":"8561:53:62","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"8560:55:62"},"scope":12304,"src":"8443:237:62","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11798,"nodeType":"Block","src":"9405:834:62","statements":[{"assignments":[11728],"declarations":[{"constant":false,"id":11728,"mutability":"mutable","name":"low","nameLocation":"9423:3:62","nodeType":"VariableDeclaration","scope":11798,"src":"9415:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11727,"name":"uint256","nodeType":"ElementaryTypeName","src":"9415:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11730,"initialValue":{"hexValue":"30","id":11729,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9429:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9415:15:62"},{"assignments":[11732],"declarations":[{"constant":false,"id":11732,"mutability":"mutable","name":"high","nameLocation":"9448:4:62","nodeType":"VariableDeclaration","scope":11798,"src":"9440:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11731,"name":"uint256","nodeType":"ElementaryTypeName","src":"9440:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11735,"initialValue":{"expression":{"id":11733,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11720,"src":"9455:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},"id":11734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9461:6:62","memberName":"length","nodeType":"MemberAccess","src":"9455:12:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9440:27:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11736,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11732,"src":"9482:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11737,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9490:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9482:9:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11742,"nodeType":"IfStatement","src":"9478:48:62","trueBody":{"id":11741,"nodeType":"Block","src":"9493:33:62","statements":[{"expression":{"hexValue":"30","id":11739,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9514:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":11726,"id":11740,"nodeType":"Return","src":"9507:8:62"}]}},{"body":{"id":11774,"nodeType":"Block","src":"9555:423:62","statements":[{"assignments":[11747],"declarations":[{"constant":false,"id":11747,"mutability":"mutable","name":"mid","nameLocation":"9577:3:62","nodeType":"VariableDeclaration","scope":11774,"src":"9569:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11746,"name":"uint256","nodeType":"ElementaryTypeName","src":"9569:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11753,"initialValue":{"arguments":[{"id":11750,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11728,"src":"9596:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11751,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11732,"src":"9601:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11748,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"9583:4:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":11749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9588:7:62","memberName":"average","nodeType":"MemberAccess","referencedDeclaration":13056,"src":"9583:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9583:23:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9569:37:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11755,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11720,"src":"9844:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},{"id":11756,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11747,"src":"9851:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11754,"name":"unsafeAccess","nodeType":"Identifier","overloadedDeclarations":[12079,12105,12131,12157,12183],"referencedDeclaration":12131,"src":"9831:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_Uint256Slot_$12585_storage_ptr_$","typeString":"function (uint256[] storage pointer,uint256) pure returns (struct StorageSlot.Uint256Slot storage pointer)"}},"id":11757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9831:24:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12585_storage_ptr","typeString":"struct StorageSlot.Uint256Slot storage pointer"}},"id":11758,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9856:5:62","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12584,"src":"9831:30:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":11759,"name":"element","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11722,"src":"9864:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9831:40:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11772,"nodeType":"Block","src":"9922:46:62","statements":[{"expression":{"id":11770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11766,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11728,"src":"9940:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11767,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11747,"src":"9946:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":11768,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9952:1:62","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9946:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9940:13:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11771,"nodeType":"ExpressionStatement","src":"9940:13:62"}]},"id":11773,"nodeType":"IfStatement","src":"9827:141:62","trueBody":{"id":11765,"nodeType":"Block","src":"9873:43:62","statements":[{"expression":{"id":11763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11761,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11732,"src":"9891:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11762,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11747,"src":"9898:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9891:10:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11764,"nodeType":"ExpressionStatement","src":"9891:10:62"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11743,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11728,"src":"9543:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11744,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11732,"src":"9549:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9543:10:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11775,"nodeType":"WhileStatement","src":"9536:442:62"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11776,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11728,"src":"10095:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11777,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10101:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10095:7:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11780,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11720,"src":"10119:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11781,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11728,"src":"10126:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":11782,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10132:1:62","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10126:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11779,"name":"unsafeAccess","nodeType":"Identifier","overloadedDeclarations":[12079,12105,12131,12157,12183],"referencedDeclaration":12131,"src":"10106:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_Uint256Slot_$12585_storage_ptr_$","typeString":"function (uint256[] storage pointer,uint256) pure returns (struct StorageSlot.Uint256Slot storage pointer)"}},"id":11784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10106:28:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12585_storage_ptr","typeString":"struct StorageSlot.Uint256Slot storage pointer"}},"id":11785,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10135:5:62","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12584,"src":"10106:34:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":11786,"name":"element","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11722,"src":"10144:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10106:45:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10095:56:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11796,"nodeType":"Block","src":"10198:35:62","statements":[{"expression":{"id":11794,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11728,"src":"10219:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11726,"id":11795,"nodeType":"Return","src":"10212:10:62"}]},"id":11797,"nodeType":"IfStatement","src":"10091:142:62","trueBody":{"id":11793,"nodeType":"Block","src":"10153:39:62","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11789,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11728,"src":"10174:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":11790,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10180:1:62","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10174:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11726,"id":11792,"nodeType":"Return","src":"10167:14:62"}]}}]},"documentation":{"id":11717,"nodeType":"StructuredDocumentation","src":"8686:616:62","text":" @dev Searches a sorted `array` and returns the first index that contains\n a value greater or equal to `element`. If no such index exists (i.e. all\n values in the array are strictly less than `element`), the array length is\n returned. Time complexity O(log n).\n NOTE: The `array` is expected to be sorted in ascending order, and to\n contain no repeated elements.\n IMPORTANT: Deprecated. This implementation behaves as {lowerBound} but lacks\n support for repeated elements in the array. The {lowerBound} function should\n be used instead."},"id":11799,"implemented":true,"kind":"function","modifiers":[],"name":"findUpperBound","nameLocation":"9316:14:62","nodeType":"FunctionDefinition","parameters":{"id":11723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11720,"mutability":"mutable","name":"array","nameLocation":"9349:5:62","nodeType":"VariableDeclaration","scope":11799,"src":"9331:23:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11718,"name":"uint256","nodeType":"ElementaryTypeName","src":"9331:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11719,"nodeType":"ArrayTypeName","src":"9331:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11722,"mutability":"mutable","name":"element","nameLocation":"9364:7:62","nodeType":"VariableDeclaration","scope":11799,"src":"9356:15:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11721,"name":"uint256","nodeType":"ElementaryTypeName","src":"9356:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9330:42:62"},"returnParameters":{"id":11726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11725,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11799,"src":"9396:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11724,"name":"uint256","nodeType":"ElementaryTypeName","src":"9396:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9395:9:62"},"scope":12304,"src":"9307:932:62","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11862,"nodeType":"Block","src":"10756:709:62","statements":[{"assignments":[11811],"declarations":[{"constant":false,"id":11811,"mutability":"mutable","name":"low","nameLocation":"10774:3:62","nodeType":"VariableDeclaration","scope":11862,"src":"10766:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11810,"name":"uint256","nodeType":"ElementaryTypeName","src":"10766:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11813,"initialValue":{"hexValue":"30","id":11812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10780:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10766:15:62"},{"assignments":[11815],"declarations":[{"constant":false,"id":11815,"mutability":"mutable","name":"high","nameLocation":"10799:4:62","nodeType":"VariableDeclaration","scope":11862,"src":"10791:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11814,"name":"uint256","nodeType":"ElementaryTypeName","src":"10791:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11818,"initialValue":{"expression":{"id":11816,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11803,"src":"10806:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},"id":11817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10812:6:62","memberName":"length","nodeType":"MemberAccess","src":"10806:12:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10791:27:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11819,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11815,"src":"10833:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11820,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10841:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10833:9:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11825,"nodeType":"IfStatement","src":"10829:48:62","trueBody":{"id":11824,"nodeType":"Block","src":"10844:33:62","statements":[{"expression":{"hexValue":"30","id":11822,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10865:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":11809,"id":11823,"nodeType":"Return","src":"10858:8:62"}]}},{"body":{"id":11858,"nodeType":"Block","src":"10906:532:62","statements":[{"assignments":[11830],"declarations":[{"constant":false,"id":11830,"mutability":"mutable","name":"mid","nameLocation":"10928:3:62","nodeType":"VariableDeclaration","scope":11858,"src":"10920:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11829,"name":"uint256","nodeType":"ElementaryTypeName","src":"10920:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11836,"initialValue":{"arguments":[{"id":11833,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11811,"src":"10947:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11834,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11815,"src":"10952:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11831,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"10934:4:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":11832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10939:7:62","memberName":"average","nodeType":"MemberAccess","referencedDeclaration":13056,"src":"10934:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10934:23:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10920:37:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11838,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11803,"src":"11195:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},{"id":11839,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11830,"src":"11202:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11837,"name":"unsafeAccess","nodeType":"Identifier","overloadedDeclarations":[12079,12105,12131,12157,12183],"referencedDeclaration":12131,"src":"11182:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_Uint256Slot_$12585_storage_ptr_$","typeString":"function (uint256[] storage pointer,uint256) pure returns (struct StorageSlot.Uint256Slot storage pointer)"}},"id":11840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11182:24:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12585_storage_ptr","typeString":"struct StorageSlot.Uint256Slot storage pointer"}},"id":11841,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11207:5:62","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12584,"src":"11182:30:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11842,"name":"element","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11805,"src":"11215:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11182:40:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11856,"nodeType":"Block","src":"11385:43:62","statements":[{"expression":{"id":11854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11852,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11815,"src":"11403:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11853,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11830,"src":"11410:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11403:10:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11855,"nodeType":"ExpressionStatement","src":"11403:10:62"}]},"id":11857,"nodeType":"IfStatement","src":"11178:250:62","trueBody":{"id":11851,"nodeType":"Block","src":"11224:155:62","statements":[{"id":11850,"nodeType":"UncheckedBlock","src":"11301:64:62","statements":[{"expression":{"id":11848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11844,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11811,"src":"11333:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11845,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11830,"src":"11339:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":11846,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11345:1:62","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11339:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11333:13:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11849,"nodeType":"ExpressionStatement","src":"11333:13:62"}]}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11826,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11811,"src":"10894:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11827,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11815,"src":"10900:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10894:10:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11859,"nodeType":"WhileStatement","src":"10887:551:62"},{"expression":{"id":11860,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11811,"src":"11455:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11809,"id":11861,"nodeType":"Return","src":"11448:10:62"}]},"documentation":{"id":11800,"nodeType":"StructuredDocumentation","src":"10245:412:62","text":" @dev Searches an `array` sorted in ascending order and returns the first\n index that contains a value greater or equal than `element`. If no such index\n exists (i.e. all values in the array are strictly less than `element`), the array\n length is returned. Time complexity O(log n).\n See C++'s https://en.cppreference.com/w/cpp/algorithm/lower_bound[lower_bound]."},"id":11863,"implemented":true,"kind":"function","modifiers":[],"name":"lowerBound","nameLocation":"10671:10:62","nodeType":"FunctionDefinition","parameters":{"id":11806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11803,"mutability":"mutable","name":"array","nameLocation":"10700:5:62","nodeType":"VariableDeclaration","scope":11863,"src":"10682:23:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11801,"name":"uint256","nodeType":"ElementaryTypeName","src":"10682:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11802,"nodeType":"ArrayTypeName","src":"10682:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11805,"mutability":"mutable","name":"element","nameLocation":"10715:7:62","nodeType":"VariableDeclaration","scope":11863,"src":"10707:15:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11804,"name":"uint256","nodeType":"ElementaryTypeName","src":"10707:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10681:42:62"},"returnParameters":{"id":11809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11808,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11863,"src":"10747:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11807,"name":"uint256","nodeType":"ElementaryTypeName","src":"10747:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10746:9:62"},"scope":12304,"src":"10662:803:62","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11926,"nodeType":"Block","src":"11982:709:62","statements":[{"assignments":[11875],"declarations":[{"constant":false,"id":11875,"mutability":"mutable","name":"low","nameLocation":"12000:3:62","nodeType":"VariableDeclaration","scope":11926,"src":"11992:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11874,"name":"uint256","nodeType":"ElementaryTypeName","src":"11992:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11877,"initialValue":{"hexValue":"30","id":11876,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12006:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11992:15:62"},{"assignments":[11879],"declarations":[{"constant":false,"id":11879,"mutability":"mutable","name":"high","nameLocation":"12025:4:62","nodeType":"VariableDeclaration","scope":11926,"src":"12017:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11878,"name":"uint256","nodeType":"ElementaryTypeName","src":"12017:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11882,"initialValue":{"expression":{"id":11880,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11867,"src":"12032:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},"id":11881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12038:6:62","memberName":"length","nodeType":"MemberAccess","src":"12032:12:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12017:27:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11883,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11879,"src":"12059:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12067:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12059:9:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11889,"nodeType":"IfStatement","src":"12055:48:62","trueBody":{"id":11888,"nodeType":"Block","src":"12070:33:62","statements":[{"expression":{"hexValue":"30","id":11886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12091:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":11873,"id":11887,"nodeType":"Return","src":"12084:8:62"}]}},{"body":{"id":11922,"nodeType":"Block","src":"12132:532:62","statements":[{"assignments":[11894],"declarations":[{"constant":false,"id":11894,"mutability":"mutable","name":"mid","nameLocation":"12154:3:62","nodeType":"VariableDeclaration","scope":11922,"src":"12146:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11893,"name":"uint256","nodeType":"ElementaryTypeName","src":"12146:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11900,"initialValue":{"arguments":[{"id":11897,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11875,"src":"12173:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11898,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11879,"src":"12178:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11895,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"12160:4:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":11896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12165:7:62","memberName":"average","nodeType":"MemberAccess","referencedDeclaration":13056,"src":"12160:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12160:23:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12146:37:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11902,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11867,"src":"12421:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},{"id":11903,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11894,"src":"12428:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11901,"name":"unsafeAccess","nodeType":"Identifier","overloadedDeclarations":[12079,12105,12131,12157,12183],"referencedDeclaration":12131,"src":"12408:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_Uint256Slot_$12585_storage_ptr_$","typeString":"function (uint256[] storage pointer,uint256) pure returns (struct StorageSlot.Uint256Slot storage pointer)"}},"id":11904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12408:24:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12585_storage_ptr","typeString":"struct StorageSlot.Uint256Slot storage pointer"}},"id":11905,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12433:5:62","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12584,"src":"12408:30:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":11906,"name":"element","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11869,"src":"12441:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12408:40:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11920,"nodeType":"Block","src":"12499:155:62","statements":[{"id":11919,"nodeType":"UncheckedBlock","src":"12576:64:62","statements":[{"expression":{"id":11917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11913,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11875,"src":"12608:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11914,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11894,"src":"12614:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":11915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12620:1:62","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12614:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12608:13:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11918,"nodeType":"ExpressionStatement","src":"12608:13:62"}]}]},"id":11921,"nodeType":"IfStatement","src":"12404:250:62","trueBody":{"id":11912,"nodeType":"Block","src":"12450:43:62","statements":[{"expression":{"id":11910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11908,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11879,"src":"12468:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11909,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11894,"src":"12475:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12468:10:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11911,"nodeType":"ExpressionStatement","src":"12468:10:62"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11890,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11875,"src":"12120:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11891,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11879,"src":"12126:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12120:10:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11923,"nodeType":"WhileStatement","src":"12113:551:62"},{"expression":{"id":11924,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11875,"src":"12681:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11873,"id":11925,"nodeType":"Return","src":"12674:10:62"}]},"documentation":{"id":11864,"nodeType":"StructuredDocumentation","src":"11471:412:62","text":" @dev Searches an `array` sorted in ascending order and returns the first\n index that contains a value strictly greater than `element`. If no such index\n exists (i.e. all values in the array are strictly less than `element`), the array\n length is returned. Time complexity O(log n).\n See C++'s https://en.cppreference.com/w/cpp/algorithm/upper_bound[upper_bound]."},"id":11927,"implemented":true,"kind":"function","modifiers":[],"name":"upperBound","nameLocation":"11897:10:62","nodeType":"FunctionDefinition","parameters":{"id":11870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11867,"mutability":"mutable","name":"array","nameLocation":"11926:5:62","nodeType":"VariableDeclaration","scope":11927,"src":"11908:23:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11865,"name":"uint256","nodeType":"ElementaryTypeName","src":"11908:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11866,"nodeType":"ArrayTypeName","src":"11908:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11869,"mutability":"mutable","name":"element","nameLocation":"11941:7:62","nodeType":"VariableDeclaration","scope":11927,"src":"11933:15:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11868,"name":"uint256","nodeType":"ElementaryTypeName","src":"11933:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11907:42:62"},"returnParameters":{"id":11873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11872,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11927,"src":"11973:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11871,"name":"uint256","nodeType":"ElementaryTypeName","src":"11973:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11972:9:62"},"scope":12304,"src":"11888:803:62","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11989,"nodeType":"Block","src":"12875:709:62","statements":[{"assignments":[11939],"declarations":[{"constant":false,"id":11939,"mutability":"mutable","name":"low","nameLocation":"12893:3:62","nodeType":"VariableDeclaration","scope":11989,"src":"12885:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11938,"name":"uint256","nodeType":"ElementaryTypeName","src":"12885:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11941,"initialValue":{"hexValue":"30","id":11940,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12899:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12885:15:62"},{"assignments":[11943],"declarations":[{"constant":false,"id":11943,"mutability":"mutable","name":"high","nameLocation":"12918:4:62","nodeType":"VariableDeclaration","scope":11989,"src":"12910:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11942,"name":"uint256","nodeType":"ElementaryTypeName","src":"12910:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11946,"initialValue":{"expression":{"id":11944,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11931,"src":"12925:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12931:6:62","memberName":"length","nodeType":"MemberAccess","src":"12925:12:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12910:27:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11947,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11943,"src":"12952:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11948,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12960:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12952:9:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11953,"nodeType":"IfStatement","src":"12948:48:62","trueBody":{"id":11952,"nodeType":"Block","src":"12963:33:62","statements":[{"expression":{"hexValue":"30","id":11950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12984:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":11937,"id":11951,"nodeType":"Return","src":"12977:8:62"}]}},{"body":{"id":11985,"nodeType":"Block","src":"13025:532:62","statements":[{"assignments":[11958],"declarations":[{"constant":false,"id":11958,"mutability":"mutable","name":"mid","nameLocation":"13047:3:62","nodeType":"VariableDeclaration","scope":11985,"src":"13039:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11957,"name":"uint256","nodeType":"ElementaryTypeName","src":"13039:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11964,"initialValue":{"arguments":[{"id":11961,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11939,"src":"13066:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11962,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11943,"src":"13071:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11959,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"13053:4:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":11960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13058:7:62","memberName":"average","nodeType":"MemberAccess","referencedDeclaration":13056,"src":"13053:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13053:23:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13039:37:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":11966,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11931,"src":"13320:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":11967,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11958,"src":"13327:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11965,"name":"unsafeMemoryAccess","nodeType":"Identifier","overloadedDeclarations":[12196,12209,12222,12235,12248],"referencedDeclaration":12222,"src":"13301:18:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":11968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13301:30:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11969,"name":"element","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11933,"src":"13334:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13301:40:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11983,"nodeType":"Block","src":"13504:43:62","statements":[{"expression":{"id":11981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11979,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11943,"src":"13522:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11980,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11958,"src":"13529:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13522:10:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11982,"nodeType":"ExpressionStatement","src":"13522:10:62"}]},"id":11984,"nodeType":"IfStatement","src":"13297:250:62","trueBody":{"id":11978,"nodeType":"Block","src":"13343:155:62","statements":[{"id":11977,"nodeType":"UncheckedBlock","src":"13420:64:62","statements":[{"expression":{"id":11975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11971,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11939,"src":"13452:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11972,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11958,"src":"13458:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":11973,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13464:1:62","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13458:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13452:13:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11976,"nodeType":"ExpressionStatement","src":"13452:13:62"}]}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11954,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11939,"src":"13013:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11955,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11943,"src":"13019:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13013:10:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11986,"nodeType":"WhileStatement","src":"13006:551:62"},{"expression":{"id":11987,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11939,"src":"13574:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11937,"id":11988,"nodeType":"Return","src":"13567:10:62"}]},"documentation":{"id":11928,"nodeType":"StructuredDocumentation","src":"12697:74:62","text":" @dev Same as {lowerBound}, but with an array in memory."},"id":11990,"implemented":true,"kind":"function","modifiers":[],"name":"lowerBoundMemory","nameLocation":"12785:16:62","nodeType":"FunctionDefinition","parameters":{"id":11934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11931,"mutability":"mutable","name":"array","nameLocation":"12819:5:62","nodeType":"VariableDeclaration","scope":11990,"src":"12802:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11929,"name":"uint256","nodeType":"ElementaryTypeName","src":"12802:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11930,"nodeType":"ArrayTypeName","src":"12802:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11933,"mutability":"mutable","name":"element","nameLocation":"12834:7:62","nodeType":"VariableDeclaration","scope":11990,"src":"12826:15:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11932,"name":"uint256","nodeType":"ElementaryTypeName","src":"12826:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12801:41:62"},"returnParameters":{"id":11937,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11936,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11990,"src":"12866:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11935,"name":"uint256","nodeType":"ElementaryTypeName","src":"12866:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12865:9:62"},"scope":12304,"src":"12776:808:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12052,"nodeType":"Block","src":"13768:709:62","statements":[{"assignments":[12002],"declarations":[{"constant":false,"id":12002,"mutability":"mutable","name":"low","nameLocation":"13786:3:62","nodeType":"VariableDeclaration","scope":12052,"src":"13778:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12001,"name":"uint256","nodeType":"ElementaryTypeName","src":"13778:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12004,"initialValue":{"hexValue":"30","id":12003,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13792:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13778:15:62"},{"assignments":[12006],"declarations":[{"constant":false,"id":12006,"mutability":"mutable","name":"high","nameLocation":"13811:4:62","nodeType":"VariableDeclaration","scope":12052,"src":"13803:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12005,"name":"uint256","nodeType":"ElementaryTypeName","src":"13803:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12009,"initialValue":{"expression":{"id":12007,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11994,"src":"13818:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13824:6:62","memberName":"length","nodeType":"MemberAccess","src":"13818:12:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13803:27:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12010,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12006,"src":"13845:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12011,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13853:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13845:9:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12016,"nodeType":"IfStatement","src":"13841:48:62","trueBody":{"id":12015,"nodeType":"Block","src":"13856:33:62","statements":[{"expression":{"hexValue":"30","id":12013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13877:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":12000,"id":12014,"nodeType":"Return","src":"13870:8:62"}]}},{"body":{"id":12048,"nodeType":"Block","src":"13918:532:62","statements":[{"assignments":[12021],"declarations":[{"constant":false,"id":12021,"mutability":"mutable","name":"mid","nameLocation":"13940:3:62","nodeType":"VariableDeclaration","scope":12048,"src":"13932:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12020,"name":"uint256","nodeType":"ElementaryTypeName","src":"13932:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12027,"initialValue":{"arguments":[{"id":12024,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12002,"src":"13959:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12025,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12006,"src":"13964:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12022,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"13946:4:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":12023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13951:7:62","memberName":"average","nodeType":"MemberAccess","referencedDeclaration":13056,"src":"13946:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":12026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13946:23:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13932:37:62"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":12029,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11994,"src":"14213:5:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":12030,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12021,"src":"14220:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12028,"name":"unsafeMemoryAccess","nodeType":"Identifier","overloadedDeclarations":[12196,12209,12222,12235,12248],"referencedDeclaration":12222,"src":"14194:18:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":12031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14194:30:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":12032,"name":"element","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11996,"src":"14227:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14194:40:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":12046,"nodeType":"Block","src":"14285:155:62","statements":[{"id":12045,"nodeType":"UncheckedBlock","src":"14362:64:62","statements":[{"expression":{"id":12043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12039,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12002,"src":"14394:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12040,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12021,"src":"14400:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":12041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14406:1:62","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"14400:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14394:13:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12044,"nodeType":"ExpressionStatement","src":"14394:13:62"}]}]},"id":12047,"nodeType":"IfStatement","src":"14190:250:62","trueBody":{"id":12038,"nodeType":"Block","src":"14236:43:62","statements":[{"expression":{"id":12036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12034,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12006,"src":"14254:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12035,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12021,"src":"14261:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14254:10:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12037,"nodeType":"ExpressionStatement","src":"14254:10:62"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12017,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12002,"src":"13906:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":12018,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12006,"src":"13912:4:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13906:10:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12049,"nodeType":"WhileStatement","src":"13899:551:62"},{"expression":{"id":12050,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12002,"src":"14467:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12000,"id":12051,"nodeType":"Return","src":"14460:10:62"}]},"documentation":{"id":11991,"nodeType":"StructuredDocumentation","src":"13590:74:62","text":" @dev Same as {upperBound}, but with an array in memory."},"id":12053,"implemented":true,"kind":"function","modifiers":[],"name":"upperBoundMemory","nameLocation":"13678:16:62","nodeType":"FunctionDefinition","parameters":{"id":11997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11994,"mutability":"mutable","name":"array","nameLocation":"13712:5:62","nodeType":"VariableDeclaration","scope":12053,"src":"13695:22:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11992,"name":"uint256","nodeType":"ElementaryTypeName","src":"13695:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11993,"nodeType":"ArrayTypeName","src":"13695:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11996,"mutability":"mutable","name":"element","nameLocation":"13727:7:62","nodeType":"VariableDeclaration","scope":12053,"src":"13719:15:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11995,"name":"uint256","nodeType":"ElementaryTypeName","src":"13719:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13694:41:62"},"returnParameters":{"id":12000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11999,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12053,"src":"13759:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11998,"name":"uint256","nodeType":"ElementaryTypeName","src":"13759:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13758:9:62"},"scope":12304,"src":"13669:808:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12078,"nodeType":"Block","src":"14793:167:62","statements":[{"assignments":[12066],"declarations":[{"constant":false,"id":12066,"mutability":"mutable","name":"slot","nameLocation":"14811:4:62","nodeType":"VariableDeclaration","scope":12078,"src":"14803:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12065,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14803:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12067,"nodeType":"VariableDeclarationStatement","src":"14803:12:62"},{"AST":{"nativeSrc":"14850:40:62","nodeType":"YulBlock","src":"14850:40:62","statements":[{"nativeSrc":"14864:16:62","nodeType":"YulAssignment","src":"14864:16:62","value":{"name":"arr.slot","nativeSrc":"14872:8:62","nodeType":"YulIdentifier","src":"14872:8:62"},"variableNames":[{"name":"slot","nativeSrc":"14864:4:62","nodeType":"YulIdentifier","src":"14864:4:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12057,"isOffset":false,"isSlot":true,"src":"14872:8:62","suffix":"slot","valueSize":1},{"declaration":12066,"isOffset":false,"isSlot":false,"src":"14864:4:62","valueSize":1}],"flags":["memory-safe"],"id":12068,"nodeType":"InlineAssembly","src":"14825:65:62"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":12073,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12059,"src":"14932:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12069,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12066,"src":"14906:4:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14911:11:62","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":12485,"src":"14906:16:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":12071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14906:18:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14925:6:62","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":12475,"src":"14906:25:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":12074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14906:30:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14937:14:62","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":12605,"src":"14906:45:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$12576_storage_ptr_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":12076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14906:47:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$12576_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"functionReturnParameters":12064,"id":12077,"nodeType":"Return","src":"14899:54:62"}]},"documentation":{"id":12054,"nodeType":"StructuredDocumentation","src":"14483:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12079,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeAccess","nameLocation":"14688:12:62","nodeType":"FunctionDefinition","parameters":{"id":12060,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12057,"mutability":"mutable","name":"arr","nameLocation":"14719:3:62","nodeType":"VariableDeclaration","scope":12079,"src":"14701:21:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":12055,"name":"address","nodeType":"ElementaryTypeName","src":"14701:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12056,"nodeType":"ArrayTypeName","src":"14701:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":12059,"mutability":"mutable","name":"pos","nameLocation":"14732:3:62","nodeType":"VariableDeclaration","scope":12079,"src":"14724:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12058,"name":"uint256","nodeType":"ElementaryTypeName","src":"14724:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14700:36:62"},"returnParameters":{"id":12064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12063,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12079,"src":"14760:31:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$12576_storage_ptr","typeString":"struct StorageSlot.AddressSlot"},"typeName":{"id":12062,"nodeType":"UserDefinedTypeName","pathNode":{"id":12061,"name":"StorageSlot.AddressSlot","nameLocations":["14760:11:62","14772:11:62"],"nodeType":"IdentifierPath","referencedDeclaration":12576,"src":"14760:23:62"},"referencedDeclaration":12576,"src":"14760:23:62","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$12576_storage_ptr","typeString":"struct StorageSlot.AddressSlot"}},"visibility":"internal"}],"src":"14759:33:62"},"scope":12304,"src":"14679:281:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12104,"nodeType":"Block","src":"15276:167:62","statements":[{"assignments":[12092],"declarations":[{"constant":false,"id":12092,"mutability":"mutable","name":"slot","nameLocation":"15294:4:62","nodeType":"VariableDeclaration","scope":12104,"src":"15286:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12091,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15286:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12093,"nodeType":"VariableDeclarationStatement","src":"15286:12:62"},{"AST":{"nativeSrc":"15333:40:62","nodeType":"YulBlock","src":"15333:40:62","statements":[{"nativeSrc":"15347:16:62","nodeType":"YulAssignment","src":"15347:16:62","value":{"name":"arr.slot","nativeSrc":"15355:8:62","nodeType":"YulIdentifier","src":"15355:8:62"},"variableNames":[{"name":"slot","nativeSrc":"15347:4:62","nodeType":"YulIdentifier","src":"15347:4:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12083,"isOffset":false,"isSlot":true,"src":"15355:8:62","suffix":"slot","valueSize":1},{"declaration":12092,"isOffset":false,"isSlot":false,"src":"15347:4:62","valueSize":1}],"flags":["memory-safe"],"id":12094,"nodeType":"InlineAssembly","src":"15308:65:62"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":12099,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12085,"src":"15415:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12095,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12092,"src":"15389:4:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15394:11:62","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":12485,"src":"15389:16:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":12097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15389:18:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15408:6:62","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":12475,"src":"15389:25:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":12100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15389:30:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15420:14:62","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":12627,"src":"15389:45:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$12582_storage_ptr_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":12102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15389:47:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$12582_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"functionReturnParameters":12090,"id":12103,"nodeType":"Return","src":"15382:54:62"}]},"documentation":{"id":12080,"nodeType":"StructuredDocumentation","src":"14966:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12105,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeAccess","nameLocation":"15171:12:62","nodeType":"FunctionDefinition","parameters":{"id":12086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12083,"mutability":"mutable","name":"arr","nameLocation":"15202:3:62","nodeType":"VariableDeclaration","scope":12105,"src":"15184:21:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":12081,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15184:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12082,"nodeType":"ArrayTypeName","src":"15184:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":12085,"mutability":"mutable","name":"pos","nameLocation":"15215:3:62","nodeType":"VariableDeclaration","scope":12105,"src":"15207:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12084,"name":"uint256","nodeType":"ElementaryTypeName","src":"15207:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15183:36:62"},"returnParameters":{"id":12090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12089,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12105,"src":"15243:31:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$12582_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"},"typeName":{"id":12088,"nodeType":"UserDefinedTypeName","pathNode":{"id":12087,"name":"StorageSlot.Bytes32Slot","nameLocations":["15243:11:62","15255:11:62"],"nodeType":"IdentifierPath","referencedDeclaration":12582,"src":"15243:23:62"},"referencedDeclaration":12582,"src":"15243:23:62","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$12582_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"}},"visibility":"internal"}],"src":"15242:33:62"},"scope":12304,"src":"15162:281:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12130,"nodeType":"Block","src":"15759:167:62","statements":[{"assignments":[12118],"declarations":[{"constant":false,"id":12118,"mutability":"mutable","name":"slot","nameLocation":"15777:4:62","nodeType":"VariableDeclaration","scope":12130,"src":"15769:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12117,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15769:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12119,"nodeType":"VariableDeclarationStatement","src":"15769:12:62"},{"AST":{"nativeSrc":"15816:40:62","nodeType":"YulBlock","src":"15816:40:62","statements":[{"nativeSrc":"15830:16:62","nodeType":"YulAssignment","src":"15830:16:62","value":{"name":"arr.slot","nativeSrc":"15838:8:62","nodeType":"YulIdentifier","src":"15838:8:62"},"variableNames":[{"name":"slot","nativeSrc":"15830:4:62","nodeType":"YulIdentifier","src":"15830:4:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12109,"isOffset":false,"isSlot":true,"src":"15838:8:62","suffix":"slot","valueSize":1},{"declaration":12118,"isOffset":false,"isSlot":false,"src":"15830:4:62","valueSize":1}],"flags":["memory-safe"],"id":12120,"nodeType":"InlineAssembly","src":"15791:65:62"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":12125,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12111,"src":"15898:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12121,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12118,"src":"15872:4:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15877:11:62","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":12485,"src":"15872:16:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":12123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15872:18:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15891:6:62","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":12475,"src":"15872:25:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":12126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15872:30:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15903:14:62","memberName":"getUint256Slot","nodeType":"MemberAccess","referencedDeclaration":12638,"src":"15872:45:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Uint256Slot_$12585_storage_ptr_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Uint256Slot storage pointer)"}},"id":12128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15872:47:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12585_storage_ptr","typeString":"struct StorageSlot.Uint256Slot storage pointer"}},"functionReturnParameters":12116,"id":12129,"nodeType":"Return","src":"15865:54:62"}]},"documentation":{"id":12106,"nodeType":"StructuredDocumentation","src":"15449:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12131,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeAccess","nameLocation":"15654:12:62","nodeType":"FunctionDefinition","parameters":{"id":12112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12109,"mutability":"mutable","name":"arr","nameLocation":"15685:3:62","nodeType":"VariableDeclaration","scope":12131,"src":"15667:21:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12107,"name":"uint256","nodeType":"ElementaryTypeName","src":"15667:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12108,"nodeType":"ArrayTypeName","src":"15667:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12111,"mutability":"mutable","name":"pos","nameLocation":"15698:3:62","nodeType":"VariableDeclaration","scope":12131,"src":"15690:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12110,"name":"uint256","nodeType":"ElementaryTypeName","src":"15690:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15666:36:62"},"returnParameters":{"id":12116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12115,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12131,"src":"15726:31:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12585_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"},"typeName":{"id":12114,"nodeType":"UserDefinedTypeName","pathNode":{"id":12113,"name":"StorageSlot.Uint256Slot","nameLocations":["15726:11:62","15738:11:62"],"nodeType":"IdentifierPath","referencedDeclaration":12585,"src":"15726:23:62"},"referencedDeclaration":12585,"src":"15726:23:62","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12585_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"}},"visibility":"internal"}],"src":"15725:33:62"},"scope":12304,"src":"15645:281:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12156,"nodeType":"Block","src":"16238:165:62","statements":[{"assignments":[12144],"declarations":[{"constant":false,"id":12144,"mutability":"mutable","name":"slot","nameLocation":"16256:4:62","nodeType":"VariableDeclaration","scope":12156,"src":"16248:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12143,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16248:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12145,"nodeType":"VariableDeclarationStatement","src":"16248:12:62"},{"AST":{"nativeSrc":"16295:40:62","nodeType":"YulBlock","src":"16295:40:62","statements":[{"nativeSrc":"16309:16:62","nodeType":"YulAssignment","src":"16309:16:62","value":{"name":"arr.slot","nativeSrc":"16317:8:62","nodeType":"YulIdentifier","src":"16317:8:62"},"variableNames":[{"name":"slot","nativeSrc":"16309:4:62","nodeType":"YulIdentifier","src":"16309:4:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12135,"isOffset":false,"isSlot":true,"src":"16317:8:62","suffix":"slot","valueSize":1},{"declaration":12144,"isOffset":false,"isSlot":false,"src":"16309:4:62","valueSize":1}],"flags":["memory-safe"],"id":12146,"nodeType":"InlineAssembly","src":"16270:65:62"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":12151,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12137,"src":"16377:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12147,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12144,"src":"16351:4:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16356:11:62","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":12485,"src":"16351:16:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":12149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16351:18:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16370:6:62","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":12475,"src":"16351:25:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":12152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16351:30:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16382:12:62","memberName":"getBytesSlot","nodeType":"MemberAccess","referencedDeclaration":12682,"src":"16351:43:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_BytesSlot_$12594_storage_ptr_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (struct StorageSlot.BytesSlot storage pointer)"}},"id":12154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16351:45:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12594_storage_ptr","typeString":"struct StorageSlot.BytesSlot storage pointer"}},"functionReturnParameters":12142,"id":12155,"nodeType":"Return","src":"16344:52:62"}]},"documentation":{"id":12132,"nodeType":"StructuredDocumentation","src":"15932:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12157,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeAccess","nameLocation":"16137:12:62","nodeType":"FunctionDefinition","parameters":{"id":12138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12135,"mutability":"mutable","name":"arr","nameLocation":"16166:3:62","nodeType":"VariableDeclaration","scope":12157,"src":"16150:19:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":12133,"name":"bytes","nodeType":"ElementaryTypeName","src":"16150:5:62","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":12134,"nodeType":"ArrayTypeName","src":"16150:7:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"},{"constant":false,"id":12137,"mutability":"mutable","name":"pos","nameLocation":"16179:3:62","nodeType":"VariableDeclaration","scope":12157,"src":"16171:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12136,"name":"uint256","nodeType":"ElementaryTypeName","src":"16171:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16149:34:62"},"returnParameters":{"id":12142,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12141,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12157,"src":"16207:29:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12594_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":12140,"nodeType":"UserDefinedTypeName","pathNode":{"id":12139,"name":"StorageSlot.BytesSlot","nameLocations":["16207:11:62","16219:9:62"],"nodeType":"IdentifierPath","referencedDeclaration":12594,"src":"16207:21:62"},"referencedDeclaration":12594,"src":"16207:21:62","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12594_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"16206:31:62"},"scope":12304,"src":"16128:275:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12182,"nodeType":"Block","src":"16717:166:62","statements":[{"assignments":[12170],"declarations":[{"constant":false,"id":12170,"mutability":"mutable","name":"slot","nameLocation":"16735:4:62","nodeType":"VariableDeclaration","scope":12182,"src":"16727:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12169,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16727:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12171,"nodeType":"VariableDeclarationStatement","src":"16727:12:62"},{"AST":{"nativeSrc":"16774:40:62","nodeType":"YulBlock","src":"16774:40:62","statements":[{"nativeSrc":"16788:16:62","nodeType":"YulAssignment","src":"16788:16:62","value":{"name":"arr.slot","nativeSrc":"16796:8:62","nodeType":"YulIdentifier","src":"16796:8:62"},"variableNames":[{"name":"slot","nativeSrc":"16788:4:62","nodeType":"YulIdentifier","src":"16788:4:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12161,"isOffset":false,"isSlot":true,"src":"16796:8:62","suffix":"slot","valueSize":1},{"declaration":12170,"isOffset":false,"isSlot":false,"src":"16788:4:62","valueSize":1}],"flags":["memory-safe"],"id":12172,"nodeType":"InlineAssembly","src":"16749:65:62"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":12177,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12163,"src":"16856:3:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12173,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12170,"src":"16830:4:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16835:11:62","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":12485,"src":"16830:16:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":12175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16830:18:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16849:6:62","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":12475,"src":"16830:25:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":12178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16830:30:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16861:13:62","memberName":"getStringSlot","nodeType":"MemberAccess","referencedDeclaration":12660,"src":"16830:44:62","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_StringSlot_$12591_storage_ptr_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (struct StorageSlot.StringSlot storage pointer)"}},"id":12180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16830:46:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12591_storage_ptr","typeString":"struct StorageSlot.StringSlot storage pointer"}},"functionReturnParameters":12168,"id":12181,"nodeType":"Return","src":"16823:53:62"}]},"documentation":{"id":12158,"nodeType":"StructuredDocumentation","src":"16409:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12183,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeAccess","nameLocation":"16614:12:62","nodeType":"FunctionDefinition","parameters":{"id":12164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12161,"mutability":"mutable","name":"arr","nameLocation":"16644:3:62","nodeType":"VariableDeclaration","scope":12183,"src":"16627:20:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":12159,"name":"string","nodeType":"ElementaryTypeName","src":"16627:6:62","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":12160,"nodeType":"ArrayTypeName","src":"16627:8:62","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":12163,"mutability":"mutable","name":"pos","nameLocation":"16657:3:62","nodeType":"VariableDeclaration","scope":12183,"src":"16649:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12162,"name":"uint256","nodeType":"ElementaryTypeName","src":"16649:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16626:35:62"},"returnParameters":{"id":12168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12167,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12183,"src":"16685:30:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12591_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":12166,"nodeType":"UserDefinedTypeName","pathNode":{"id":12165,"name":"StorageSlot.StringSlot","nameLocations":["16685:11:62","16697:10:62"],"nodeType":"IdentifierPath","referencedDeclaration":12591,"src":"16685:22:62"},"referencedDeclaration":12591,"src":"16685:22:62","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12591_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"16684:32:62"},"scope":12304,"src":"16605:278:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12195,"nodeType":"Block","src":"17184:98:62","statements":[{"AST":{"nativeSrc":"17203:73:62","nodeType":"YulBlock","src":"17203:73:62","statements":[{"nativeSrc":"17217:49:62","nodeType":"YulAssignment","src":"17217:49:62","value":{"arguments":[{"arguments":[{"arguments":[{"name":"arr","nativeSrc":"17238:3:62","nodeType":"YulIdentifier","src":"17238:3:62"},{"kind":"number","nativeSrc":"17243:4:62","nodeType":"YulLiteral","src":"17243:4:62","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"17234:3:62","nodeType":"YulIdentifier","src":"17234:3:62"},"nativeSrc":"17234:14:62","nodeType":"YulFunctionCall","src":"17234:14:62"},{"arguments":[{"name":"pos","nativeSrc":"17254:3:62","nodeType":"YulIdentifier","src":"17254:3:62"},{"kind":"number","nativeSrc":"17259:4:62","nodeType":"YulLiteral","src":"17259:4:62","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"17250:3:62","nodeType":"YulIdentifier","src":"17250:3:62"},"nativeSrc":"17250:14:62","nodeType":"YulFunctionCall","src":"17250:14:62"}],"functionName":{"name":"add","nativeSrc":"17230:3:62","nodeType":"YulIdentifier","src":"17230:3:62"},"nativeSrc":"17230:35:62","nodeType":"YulFunctionCall","src":"17230:35:62"}],"functionName":{"name":"mload","nativeSrc":"17224:5:62","nodeType":"YulIdentifier","src":"17224:5:62"},"nativeSrc":"17224:42:62","nodeType":"YulFunctionCall","src":"17224:42:62"},"variableNames":[{"name":"res","nativeSrc":"17217:3:62","nodeType":"YulIdentifier","src":"17217:3:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12187,"isOffset":false,"isSlot":false,"src":"17238:3:62","valueSize":1},{"declaration":12189,"isOffset":false,"isSlot":false,"src":"17254:3:62","valueSize":1},{"declaration":12192,"isOffset":false,"isSlot":false,"src":"17217:3:62","valueSize":1}],"id":12194,"nodeType":"InlineAssembly","src":"17194:82:62"}]},"documentation":{"id":12184,"nodeType":"StructuredDocumentation","src":"16889:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12196,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeMemoryAccess","nameLocation":"17094:18:62","nodeType":"FunctionDefinition","parameters":{"id":12190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12187,"mutability":"mutable","name":"arr","nameLocation":"17130:3:62","nodeType":"VariableDeclaration","scope":12196,"src":"17113:20:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":12185,"name":"address","nodeType":"ElementaryTypeName","src":"17113:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12186,"nodeType":"ArrayTypeName","src":"17113:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":12189,"mutability":"mutable","name":"pos","nameLocation":"17143:3:62","nodeType":"VariableDeclaration","scope":12196,"src":"17135:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12188,"name":"uint256","nodeType":"ElementaryTypeName","src":"17135:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17112:35:62"},"returnParameters":{"id":12193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12192,"mutability":"mutable","name":"res","nameLocation":"17179:3:62","nodeType":"VariableDeclaration","scope":12196,"src":"17171:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12191,"name":"address","nodeType":"ElementaryTypeName","src":"17171:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17170:13:62"},"scope":12304,"src":"17085:197:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12208,"nodeType":"Block","src":"17583:98:62","statements":[{"AST":{"nativeSrc":"17602:73:62","nodeType":"YulBlock","src":"17602:73:62","statements":[{"nativeSrc":"17616:49:62","nodeType":"YulAssignment","src":"17616:49:62","value":{"arguments":[{"arguments":[{"arguments":[{"name":"arr","nativeSrc":"17637:3:62","nodeType":"YulIdentifier","src":"17637:3:62"},{"kind":"number","nativeSrc":"17642:4:62","nodeType":"YulLiteral","src":"17642:4:62","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"17633:3:62","nodeType":"YulIdentifier","src":"17633:3:62"},"nativeSrc":"17633:14:62","nodeType":"YulFunctionCall","src":"17633:14:62"},{"arguments":[{"name":"pos","nativeSrc":"17653:3:62","nodeType":"YulIdentifier","src":"17653:3:62"},{"kind":"number","nativeSrc":"17658:4:62","nodeType":"YulLiteral","src":"17658:4:62","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"17649:3:62","nodeType":"YulIdentifier","src":"17649:3:62"},"nativeSrc":"17649:14:62","nodeType":"YulFunctionCall","src":"17649:14:62"}],"functionName":{"name":"add","nativeSrc":"17629:3:62","nodeType":"YulIdentifier","src":"17629:3:62"},"nativeSrc":"17629:35:62","nodeType":"YulFunctionCall","src":"17629:35:62"}],"functionName":{"name":"mload","nativeSrc":"17623:5:62","nodeType":"YulIdentifier","src":"17623:5:62"},"nativeSrc":"17623:42:62","nodeType":"YulFunctionCall","src":"17623:42:62"},"variableNames":[{"name":"res","nativeSrc":"17616:3:62","nodeType":"YulIdentifier","src":"17616:3:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12200,"isOffset":false,"isSlot":false,"src":"17637:3:62","valueSize":1},{"declaration":12202,"isOffset":false,"isSlot":false,"src":"17653:3:62","valueSize":1},{"declaration":12205,"isOffset":false,"isSlot":false,"src":"17616:3:62","valueSize":1}],"id":12207,"nodeType":"InlineAssembly","src":"17593:82:62"}]},"documentation":{"id":12197,"nodeType":"StructuredDocumentation","src":"17288:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12209,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeMemoryAccess","nameLocation":"17493:18:62","nodeType":"FunctionDefinition","parameters":{"id":12203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12200,"mutability":"mutable","name":"arr","nameLocation":"17529:3:62","nodeType":"VariableDeclaration","scope":12209,"src":"17512:20:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":12198,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17512:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12199,"nodeType":"ArrayTypeName","src":"17512:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":12202,"mutability":"mutable","name":"pos","nameLocation":"17542:3:62","nodeType":"VariableDeclaration","scope":12209,"src":"17534:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12201,"name":"uint256","nodeType":"ElementaryTypeName","src":"17534:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17511:35:62"},"returnParameters":{"id":12206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12205,"mutability":"mutable","name":"res","nameLocation":"17578:3:62","nodeType":"VariableDeclaration","scope":12209,"src":"17570:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12204,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17570:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"17569:13:62"},"scope":12304,"src":"17484:197:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12221,"nodeType":"Block","src":"17982:98:62","statements":[{"AST":{"nativeSrc":"18001:73:62","nodeType":"YulBlock","src":"18001:73:62","statements":[{"nativeSrc":"18015:49:62","nodeType":"YulAssignment","src":"18015:49:62","value":{"arguments":[{"arguments":[{"arguments":[{"name":"arr","nativeSrc":"18036:3:62","nodeType":"YulIdentifier","src":"18036:3:62"},{"kind":"number","nativeSrc":"18041:4:62","nodeType":"YulLiteral","src":"18041:4:62","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18032:3:62","nodeType":"YulIdentifier","src":"18032:3:62"},"nativeSrc":"18032:14:62","nodeType":"YulFunctionCall","src":"18032:14:62"},{"arguments":[{"name":"pos","nativeSrc":"18052:3:62","nodeType":"YulIdentifier","src":"18052:3:62"},{"kind":"number","nativeSrc":"18057:4:62","nodeType":"YulLiteral","src":"18057:4:62","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"18048:3:62","nodeType":"YulIdentifier","src":"18048:3:62"},"nativeSrc":"18048:14:62","nodeType":"YulFunctionCall","src":"18048:14:62"}],"functionName":{"name":"add","nativeSrc":"18028:3:62","nodeType":"YulIdentifier","src":"18028:3:62"},"nativeSrc":"18028:35:62","nodeType":"YulFunctionCall","src":"18028:35:62"}],"functionName":{"name":"mload","nativeSrc":"18022:5:62","nodeType":"YulIdentifier","src":"18022:5:62"},"nativeSrc":"18022:42:62","nodeType":"YulFunctionCall","src":"18022:42:62"},"variableNames":[{"name":"res","nativeSrc":"18015:3:62","nodeType":"YulIdentifier","src":"18015:3:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12213,"isOffset":false,"isSlot":false,"src":"18036:3:62","valueSize":1},{"declaration":12215,"isOffset":false,"isSlot":false,"src":"18052:3:62","valueSize":1},{"declaration":12218,"isOffset":false,"isSlot":false,"src":"18015:3:62","valueSize":1}],"id":12220,"nodeType":"InlineAssembly","src":"17992:82:62"}]},"documentation":{"id":12210,"nodeType":"StructuredDocumentation","src":"17687:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12222,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeMemoryAccess","nameLocation":"17892:18:62","nodeType":"FunctionDefinition","parameters":{"id":12216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12213,"mutability":"mutable","name":"arr","nameLocation":"17928:3:62","nodeType":"VariableDeclaration","scope":12222,"src":"17911:20:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12211,"name":"uint256","nodeType":"ElementaryTypeName","src":"17911:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12212,"nodeType":"ArrayTypeName","src":"17911:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12215,"mutability":"mutable","name":"pos","nameLocation":"17941:3:62","nodeType":"VariableDeclaration","scope":12222,"src":"17933:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12214,"name":"uint256","nodeType":"ElementaryTypeName","src":"17933:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17910:35:62"},"returnParameters":{"id":12219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12218,"mutability":"mutable","name":"res","nameLocation":"17977:3:62","nodeType":"VariableDeclaration","scope":12222,"src":"17969:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12217,"name":"uint256","nodeType":"ElementaryTypeName","src":"17969:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17968:13:62"},"scope":12304,"src":"17883:197:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12234,"nodeType":"Block","src":"18384:98:62","statements":[{"AST":{"nativeSrc":"18403:73:62","nodeType":"YulBlock","src":"18403:73:62","statements":[{"nativeSrc":"18417:49:62","nodeType":"YulAssignment","src":"18417:49:62","value":{"arguments":[{"arguments":[{"arguments":[{"name":"arr","nativeSrc":"18438:3:62","nodeType":"YulIdentifier","src":"18438:3:62"},{"kind":"number","nativeSrc":"18443:4:62","nodeType":"YulLiteral","src":"18443:4:62","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18434:3:62","nodeType":"YulIdentifier","src":"18434:3:62"},"nativeSrc":"18434:14:62","nodeType":"YulFunctionCall","src":"18434:14:62"},{"arguments":[{"name":"pos","nativeSrc":"18454:3:62","nodeType":"YulIdentifier","src":"18454:3:62"},{"kind":"number","nativeSrc":"18459:4:62","nodeType":"YulLiteral","src":"18459:4:62","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"18450:3:62","nodeType":"YulIdentifier","src":"18450:3:62"},"nativeSrc":"18450:14:62","nodeType":"YulFunctionCall","src":"18450:14:62"}],"functionName":{"name":"add","nativeSrc":"18430:3:62","nodeType":"YulIdentifier","src":"18430:3:62"},"nativeSrc":"18430:35:62","nodeType":"YulFunctionCall","src":"18430:35:62"}],"functionName":{"name":"mload","nativeSrc":"18424:5:62","nodeType":"YulIdentifier","src":"18424:5:62"},"nativeSrc":"18424:42:62","nodeType":"YulFunctionCall","src":"18424:42:62"},"variableNames":[{"name":"res","nativeSrc":"18417:3:62","nodeType":"YulIdentifier","src":"18417:3:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12226,"isOffset":false,"isSlot":false,"src":"18438:3:62","valueSize":1},{"declaration":12228,"isOffset":false,"isSlot":false,"src":"18454:3:62","valueSize":1},{"declaration":12231,"isOffset":false,"isSlot":false,"src":"18417:3:62","valueSize":1}],"id":12233,"nodeType":"InlineAssembly","src":"18394:82:62"}]},"documentation":{"id":12223,"nodeType":"StructuredDocumentation","src":"18086:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12235,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeMemoryAccess","nameLocation":"18291:18:62","nodeType":"FunctionDefinition","parameters":{"id":12229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12226,"mutability":"mutable","name":"arr","nameLocation":"18325:3:62","nodeType":"VariableDeclaration","scope":12235,"src":"18310:18:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":12224,"name":"bytes","nodeType":"ElementaryTypeName","src":"18310:5:62","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":12225,"nodeType":"ArrayTypeName","src":"18310:7:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"},{"constant":false,"id":12228,"mutability":"mutable","name":"pos","nameLocation":"18338:3:62","nodeType":"VariableDeclaration","scope":12235,"src":"18330:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12227,"name":"uint256","nodeType":"ElementaryTypeName","src":"18330:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18309:33:62"},"returnParameters":{"id":12232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12231,"mutability":"mutable","name":"res","nameLocation":"18379:3:62","nodeType":"VariableDeclaration","scope":12235,"src":"18366:16:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":12230,"name":"bytes","nodeType":"ElementaryTypeName","src":"18366:5:62","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"18365:18:62"},"scope":12304,"src":"18282:200:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12247,"nodeType":"Block","src":"18788:98:62","statements":[{"AST":{"nativeSrc":"18807:73:62","nodeType":"YulBlock","src":"18807:73:62","statements":[{"nativeSrc":"18821:49:62","nodeType":"YulAssignment","src":"18821:49:62","value":{"arguments":[{"arguments":[{"arguments":[{"name":"arr","nativeSrc":"18842:3:62","nodeType":"YulIdentifier","src":"18842:3:62"},{"kind":"number","nativeSrc":"18847:4:62","nodeType":"YulLiteral","src":"18847:4:62","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18838:3:62","nodeType":"YulIdentifier","src":"18838:3:62"},"nativeSrc":"18838:14:62","nodeType":"YulFunctionCall","src":"18838:14:62"},{"arguments":[{"name":"pos","nativeSrc":"18858:3:62","nodeType":"YulIdentifier","src":"18858:3:62"},{"kind":"number","nativeSrc":"18863:4:62","nodeType":"YulLiteral","src":"18863:4:62","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"18854:3:62","nodeType":"YulIdentifier","src":"18854:3:62"},"nativeSrc":"18854:14:62","nodeType":"YulFunctionCall","src":"18854:14:62"}],"functionName":{"name":"add","nativeSrc":"18834:3:62","nodeType":"YulIdentifier","src":"18834:3:62"},"nativeSrc":"18834:35:62","nodeType":"YulFunctionCall","src":"18834:35:62"}],"functionName":{"name":"mload","nativeSrc":"18828:5:62","nodeType":"YulIdentifier","src":"18828:5:62"},"nativeSrc":"18828:42:62","nodeType":"YulFunctionCall","src":"18828:42:62"},"variableNames":[{"name":"res","nativeSrc":"18821:3:62","nodeType":"YulIdentifier","src":"18821:3:62"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12239,"isOffset":false,"isSlot":false,"src":"18842:3:62","valueSize":1},{"declaration":12241,"isOffset":false,"isSlot":false,"src":"18858:3:62","valueSize":1},{"declaration":12244,"isOffset":false,"isSlot":false,"src":"18821:3:62","valueSize":1}],"id":12246,"nodeType":"InlineAssembly","src":"18798:82:62"}]},"documentation":{"id":12236,"nodeType":"StructuredDocumentation","src":"18488:191:62","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12248,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeMemoryAccess","nameLocation":"18693:18:62","nodeType":"FunctionDefinition","parameters":{"id":12242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12239,"mutability":"mutable","name":"arr","nameLocation":"18728:3:62","nodeType":"VariableDeclaration","scope":12248,"src":"18712:19:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":12237,"name":"string","nodeType":"ElementaryTypeName","src":"18712:6:62","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":12238,"nodeType":"ArrayTypeName","src":"18712:8:62","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":12241,"mutability":"mutable","name":"pos","nameLocation":"18741:3:62","nodeType":"VariableDeclaration","scope":12248,"src":"18733:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12240,"name":"uint256","nodeType":"ElementaryTypeName","src":"18733:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18711:34:62"},"returnParameters":{"id":12245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12244,"mutability":"mutable","name":"res","nameLocation":"18783:3:62","nodeType":"VariableDeclaration","scope":12248,"src":"18769:17:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12243,"name":"string","nodeType":"ElementaryTypeName","src":"18769:6:62","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"18768:19:62"},"scope":12304,"src":"18684:202:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12258,"nodeType":"Block","src":"19202:88:62","statements":[{"AST":{"nativeSrc":"19237:47:62","nodeType":"YulBlock","src":"19237:47:62","statements":[{"expression":{"arguments":[{"name":"array.slot","nativeSrc":"19258:10:62","nodeType":"YulIdentifier","src":"19258:10:62"},{"name":"len","nativeSrc":"19270:3:62","nodeType":"YulIdentifier","src":"19270:3:62"}],"functionName":{"name":"sstore","nativeSrc":"19251:6:62","nodeType":"YulIdentifier","src":"19251:6:62"},"nativeSrc":"19251:23:62","nodeType":"YulFunctionCall","src":"19251:23:62"},"nativeSrc":"19251:23:62","nodeType":"YulExpressionStatement","src":"19251:23:62"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12252,"isOffset":false,"isSlot":true,"src":"19258:10:62","suffix":"slot","valueSize":1},{"declaration":12254,"isOffset":false,"isSlot":false,"src":"19270:3:62","valueSize":1}],"flags":["memory-safe"],"id":12257,"nodeType":"InlineAssembly","src":"19212:72:62"}]},"documentation":{"id":12249,"nodeType":"StructuredDocumentation","src":"18892:233:62","text":" @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."},"id":12259,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeSetLength","nameLocation":"19139:15:62","nodeType":"FunctionDefinition","parameters":{"id":12255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12252,"mutability":"mutable","name":"array","nameLocation":"19173:5:62","nodeType":"VariableDeclaration","scope":12259,"src":"19155:23:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":12250,"name":"address","nodeType":"ElementaryTypeName","src":"19155:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12251,"nodeType":"ArrayTypeName","src":"19155:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":12254,"mutability":"mutable","name":"len","nameLocation":"19188:3:62","nodeType":"VariableDeclaration","scope":12259,"src":"19180:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12253,"name":"uint256","nodeType":"ElementaryTypeName","src":"19180:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19154:38:62"},"returnParameters":{"id":12256,"nodeType":"ParameterList","parameters":[],"src":"19202:0:62"},"scope":12304,"src":"19130:160:62","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12269,"nodeType":"Block","src":"19606:88:62","statements":[{"AST":{"nativeSrc":"19641:47:62","nodeType":"YulBlock","src":"19641:47:62","statements":[{"expression":{"arguments":[{"name":"array.slot","nativeSrc":"19662:10:62","nodeType":"YulIdentifier","src":"19662:10:62"},{"name":"len","nativeSrc":"19674:3:62","nodeType":"YulIdentifier","src":"19674:3:62"}],"functionName":{"name":"sstore","nativeSrc":"19655:6:62","nodeType":"YulIdentifier","src":"19655:6:62"},"nativeSrc":"19655:23:62","nodeType":"YulFunctionCall","src":"19655:23:62"},"nativeSrc":"19655:23:62","nodeType":"YulExpressionStatement","src":"19655:23:62"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12263,"isOffset":false,"isSlot":true,"src":"19662:10:62","suffix":"slot","valueSize":1},{"declaration":12265,"isOffset":false,"isSlot":false,"src":"19674:3:62","valueSize":1}],"flags":["memory-safe"],"id":12268,"nodeType":"InlineAssembly","src":"19616:72:62"}]},"documentation":{"id":12260,"nodeType":"StructuredDocumentation","src":"19296:233:62","text":" @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."},"id":12270,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeSetLength","nameLocation":"19543:15:62","nodeType":"FunctionDefinition","parameters":{"id":12266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12263,"mutability":"mutable","name":"array","nameLocation":"19577:5:62","nodeType":"VariableDeclaration","scope":12270,"src":"19559:23:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":12261,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19559:7:62","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12262,"nodeType":"ArrayTypeName","src":"19559:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":12265,"mutability":"mutable","name":"len","nameLocation":"19592:3:62","nodeType":"VariableDeclaration","scope":12270,"src":"19584:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12264,"name":"uint256","nodeType":"ElementaryTypeName","src":"19584:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19558:38:62"},"returnParameters":{"id":12267,"nodeType":"ParameterList","parameters":[],"src":"19606:0:62"},"scope":12304,"src":"19534:160:62","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12280,"nodeType":"Block","src":"20010:88:62","statements":[{"AST":{"nativeSrc":"20045:47:62","nodeType":"YulBlock","src":"20045:47:62","statements":[{"expression":{"arguments":[{"name":"array.slot","nativeSrc":"20066:10:62","nodeType":"YulIdentifier","src":"20066:10:62"},{"name":"len","nativeSrc":"20078:3:62","nodeType":"YulIdentifier","src":"20078:3:62"}],"functionName":{"name":"sstore","nativeSrc":"20059:6:62","nodeType":"YulIdentifier","src":"20059:6:62"},"nativeSrc":"20059:23:62","nodeType":"YulFunctionCall","src":"20059:23:62"},"nativeSrc":"20059:23:62","nodeType":"YulExpressionStatement","src":"20059:23:62"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12274,"isOffset":false,"isSlot":true,"src":"20066:10:62","suffix":"slot","valueSize":1},{"declaration":12276,"isOffset":false,"isSlot":false,"src":"20078:3:62","valueSize":1}],"flags":["memory-safe"],"id":12279,"nodeType":"InlineAssembly","src":"20020:72:62"}]},"documentation":{"id":12271,"nodeType":"StructuredDocumentation","src":"19700:233:62","text":" @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."},"id":12281,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeSetLength","nameLocation":"19947:15:62","nodeType":"FunctionDefinition","parameters":{"id":12277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12274,"mutability":"mutable","name":"array","nameLocation":"19981:5:62","nodeType":"VariableDeclaration","scope":12281,"src":"19963:23:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12272,"name":"uint256","nodeType":"ElementaryTypeName","src":"19963:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12273,"nodeType":"ArrayTypeName","src":"19963:9:62","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12276,"mutability":"mutable","name":"len","nameLocation":"19996:3:62","nodeType":"VariableDeclaration","scope":12281,"src":"19988:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12275,"name":"uint256","nodeType":"ElementaryTypeName","src":"19988:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19962:38:62"},"returnParameters":{"id":12278,"nodeType":"ParameterList","parameters":[],"src":"20010:0:62"},"scope":12304,"src":"19938:160:62","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12291,"nodeType":"Block","src":"20412:88:62","statements":[{"AST":{"nativeSrc":"20447:47:62","nodeType":"YulBlock","src":"20447:47:62","statements":[{"expression":{"arguments":[{"name":"array.slot","nativeSrc":"20468:10:62","nodeType":"YulIdentifier","src":"20468:10:62"},{"name":"len","nativeSrc":"20480:3:62","nodeType":"YulIdentifier","src":"20480:3:62"}],"functionName":{"name":"sstore","nativeSrc":"20461:6:62","nodeType":"YulIdentifier","src":"20461:6:62"},"nativeSrc":"20461:23:62","nodeType":"YulFunctionCall","src":"20461:23:62"},"nativeSrc":"20461:23:62","nodeType":"YulExpressionStatement","src":"20461:23:62"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12285,"isOffset":false,"isSlot":true,"src":"20468:10:62","suffix":"slot","valueSize":1},{"declaration":12287,"isOffset":false,"isSlot":false,"src":"20480:3:62","valueSize":1}],"flags":["memory-safe"],"id":12290,"nodeType":"InlineAssembly","src":"20422:72:62"}]},"documentation":{"id":12282,"nodeType":"StructuredDocumentation","src":"20104:233:62","text":" @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."},"id":12292,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeSetLength","nameLocation":"20351:15:62","nodeType":"FunctionDefinition","parameters":{"id":12288,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12285,"mutability":"mutable","name":"array","nameLocation":"20383:5:62","nodeType":"VariableDeclaration","scope":12292,"src":"20367:21:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":12283,"name":"bytes","nodeType":"ElementaryTypeName","src":"20367:5:62","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":12284,"nodeType":"ArrayTypeName","src":"20367:7:62","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"},{"constant":false,"id":12287,"mutability":"mutable","name":"len","nameLocation":"20398:3:62","nodeType":"VariableDeclaration","scope":12292,"src":"20390:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12286,"name":"uint256","nodeType":"ElementaryTypeName","src":"20390:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20366:36:62"},"returnParameters":{"id":12289,"nodeType":"ParameterList","parameters":[],"src":"20412:0:62"},"scope":12304,"src":"20342:158:62","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12302,"nodeType":"Block","src":"20815:88:62","statements":[{"AST":{"nativeSrc":"20850:47:62","nodeType":"YulBlock","src":"20850:47:62","statements":[{"expression":{"arguments":[{"name":"array.slot","nativeSrc":"20871:10:62","nodeType":"YulIdentifier","src":"20871:10:62"},{"name":"len","nativeSrc":"20883:3:62","nodeType":"YulIdentifier","src":"20883:3:62"}],"functionName":{"name":"sstore","nativeSrc":"20864:6:62","nodeType":"YulIdentifier","src":"20864:6:62"},"nativeSrc":"20864:23:62","nodeType":"YulFunctionCall","src":"20864:23:62"},"nativeSrc":"20864:23:62","nodeType":"YulExpressionStatement","src":"20864:23:62"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12296,"isOffset":false,"isSlot":true,"src":"20871:10:62","suffix":"slot","valueSize":1},{"declaration":12298,"isOffset":false,"isSlot":false,"src":"20883:3:62","valueSize":1}],"flags":["memory-safe"],"id":12301,"nodeType":"InlineAssembly","src":"20825:72:62"}]},"documentation":{"id":12293,"nodeType":"StructuredDocumentation","src":"20506:233:62","text":" @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."},"id":12303,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeSetLength","nameLocation":"20753:15:62","nodeType":"FunctionDefinition","parameters":{"id":12299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12296,"mutability":"mutable","name":"array","nameLocation":"20786:5:62","nodeType":"VariableDeclaration","scope":12303,"src":"20769:22:62","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":12294,"name":"string","nodeType":"ElementaryTypeName","src":"20769:6:62","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":12295,"nodeType":"ArrayTypeName","src":"20769:8:62","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":12298,"mutability":"mutable","name":"len","nameLocation":"20801:3:62","nodeType":"VariableDeclaration","scope":12303,"src":"20793:11:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12297,"name":"uint256","nodeType":"ElementaryTypeName","src":"20793:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20768:37:62"},"returnParameters":{"id":12300,"nodeType":"ParameterList","parameters":[],"src":"20815:0:62"},"scope":12304,"src":"20744:159:62","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":12305,"src":"459:20446:62","usedErrors":[],"usedEvents":[]}],"src":"183:20723:62"},"id":62},"@openzeppelin/contracts/utils/Comparators.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Comparators.sol","exportedSymbols":{"Comparators":[12336]},"id":12337,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12306,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"105:24:63"},{"abstract":false,"baseContracts":[],"canonicalName":"Comparators","contractDependencies":[],"contractKind":"library","documentation":{"id":12307,"nodeType":"StructuredDocumentation","src":"131:92:63","text":" @dev Provides a set of functions to compare values.\n _Available since v5.1._"},"fullyImplemented":true,"id":12336,"linearizedBaseContracts":[12336],"name":"Comparators","nameLocation":"232:11:63","nodeType":"ContractDefinition","nodes":[{"body":{"id":12320,"nodeType":"Block","src":"313:29:63","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12316,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12309,"src":"330:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":12317,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12311,"src":"334:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"330:5:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12315,"id":12319,"nodeType":"Return","src":"323:12:63"}]},"id":12321,"implemented":true,"kind":"function","modifiers":[],"name":"lt","nameLocation":"259:2:63","nodeType":"FunctionDefinition","parameters":{"id":12312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12309,"mutability":"mutable","name":"a","nameLocation":"270:1:63","nodeType":"VariableDeclaration","scope":12321,"src":"262:9:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12308,"name":"uint256","nodeType":"ElementaryTypeName","src":"262:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12311,"mutability":"mutable","name":"b","nameLocation":"281:1:63","nodeType":"VariableDeclaration","scope":12321,"src":"273:9:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12310,"name":"uint256","nodeType":"ElementaryTypeName","src":"273:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"261:22:63"},"returnParameters":{"id":12315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12314,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12321,"src":"307:4:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12313,"name":"bool","nodeType":"ElementaryTypeName","src":"307:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"306:6:63"},"scope":12336,"src":"250:92:63","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12334,"nodeType":"Block","src":"411:29:63","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12330,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12323,"src":"428:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":12331,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12325,"src":"432:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"428:5:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12329,"id":12333,"nodeType":"Return","src":"421:12:63"}]},"id":12335,"implemented":true,"kind":"function","modifiers":[],"name":"gt","nameLocation":"357:2:63","nodeType":"FunctionDefinition","parameters":{"id":12326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12323,"mutability":"mutable","name":"a","nameLocation":"368:1:63","nodeType":"VariableDeclaration","scope":12335,"src":"360:9:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12322,"name":"uint256","nodeType":"ElementaryTypeName","src":"360:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12325,"mutability":"mutable","name":"b","nameLocation":"379:1:63","nodeType":"VariableDeclaration","scope":12335,"src":"371:9:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12324,"name":"uint256","nodeType":"ElementaryTypeName","src":"371:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"359:22:63"},"returnParameters":{"id":12329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12328,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12335,"src":"405:4:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12327,"name":"bool","nodeType":"ElementaryTypeName","src":"405:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"404:6:63"},"scope":12336,"src":"348:92:63","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":12337,"src":"224:218:63","usedErrors":[],"usedEvents":[]}],"src":"105:338:63"},"id":63},"@openzeppelin/contracts/utils/Context.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","exportedSymbols":{"Context":[12366]},"id":12367,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12338,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:64"},{"abstract":true,"baseContracts":[],"canonicalName":"Context","contractDependencies":[],"contractKind":"contract","documentation":{"id":12339,"nodeType":"StructuredDocumentation","src":"127:496:64","text":" @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."},"fullyImplemented":true,"id":12366,"linearizedBaseContracts":[12366],"name":"Context","nameLocation":"642:7:64","nodeType":"ContractDefinition","nodes":[{"body":{"id":12347,"nodeType":"Block","src":"718:34:64","statements":[{"expression":{"expression":{"id":12344,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"735:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"739:6:64","memberName":"sender","nodeType":"MemberAccess","src":"735:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":12343,"id":12346,"nodeType":"Return","src":"728:17:64"}]},"id":12348,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"665:10:64","nodeType":"FunctionDefinition","parameters":{"id":12340,"nodeType":"ParameterList","parameters":[],"src":"675:2:64"},"returnParameters":{"id":12343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12342,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12348,"src":"709:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12341,"name":"address","nodeType":"ElementaryTypeName","src":"709:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"708:9:64"},"scope":12366,"src":"656:96:64","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":12356,"nodeType":"Block","src":"825:32:64","statements":[{"expression":{"expression":{"id":12353,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"842:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"846:4:64","memberName":"data","nodeType":"MemberAccess","src":"842:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":12352,"id":12355,"nodeType":"Return","src":"835:15:64"}]},"id":12357,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"767:8:64","nodeType":"FunctionDefinition","parameters":{"id":12349,"nodeType":"ParameterList","parameters":[],"src":"775:2:64"},"returnParameters":{"id":12352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12351,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12357,"src":"809:14:64","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":12350,"name":"bytes","nodeType":"ElementaryTypeName","src":"809:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"808:16:64"},"scope":12366,"src":"758:99:64","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":12364,"nodeType":"Block","src":"935:25:64","statements":[{"expression":{"hexValue":"30","id":12362,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"952:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":12361,"id":12363,"nodeType":"Return","src":"945:8:64"}]},"id":12365,"implemented":true,"kind":"function","modifiers":[],"name":"_contextSuffixLength","nameLocation":"872:20:64","nodeType":"FunctionDefinition","parameters":{"id":12358,"nodeType":"ParameterList","parameters":[],"src":"892:2:64"},"returnParameters":{"id":12361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12360,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12365,"src":"926:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12359,"name":"uint256","nodeType":"ElementaryTypeName","src":"926:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"925:9:64"},"scope":12366,"src":"863:97:64","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":12367,"src":"624:338:64","usedErrors":[],"usedEvents":[]}],"src":"101:862:64"},"id":64},"@openzeppelin/contracts/utils/Errors.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Errors.sol","exportedSymbols":{"Errors":[12388]},"id":12389,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12368,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"100:24:65"},{"abstract":false,"baseContracts":[],"canonicalName":"Errors","contractDependencies":[],"contractKind":"library","documentation":{"id":12369,"nodeType":"StructuredDocumentation","src":"126:284:65","text":" @dev Collection of common custom errors used in multiple contracts\n IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n It is recommended to avoid relying on the error API for critical functionality.\n _Available since v5.1._"},"fullyImplemented":true,"id":12388,"linearizedBaseContracts":[12388],"name":"Errors","nameLocation":"419:6:65","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":12370,"nodeType":"StructuredDocumentation","src":"432:94:65","text":" @dev The ETH balance of the account is not enough to perform the operation."},"errorSelector":"cf479181","id":12376,"name":"InsufficientBalance","nameLocation":"537:19:65","nodeType":"ErrorDefinition","parameters":{"id":12375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12372,"mutability":"mutable","name":"balance","nameLocation":"565:7:65","nodeType":"VariableDeclaration","scope":12376,"src":"557:15:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12371,"name":"uint256","nodeType":"ElementaryTypeName","src":"557:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12374,"mutability":"mutable","name":"needed","nameLocation":"582:6:65","nodeType":"VariableDeclaration","scope":12376,"src":"574:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12373,"name":"uint256","nodeType":"ElementaryTypeName","src":"574:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"556:33:65"},"src":"531:59:65"},{"documentation":{"id":12377,"nodeType":"StructuredDocumentation","src":"596:89:65","text":" @dev A call to an address target failed. The target may have reverted."},"errorSelector":"d6bda275","id":12379,"name":"FailedCall","nameLocation":"696:10:65","nodeType":"ErrorDefinition","parameters":{"id":12378,"nodeType":"ParameterList","parameters":[],"src":"706:2:65"},"src":"690:19:65"},{"documentation":{"id":12380,"nodeType":"StructuredDocumentation","src":"715:46:65","text":" @dev The deployment failed."},"errorSelector":"b06ebf3d","id":12382,"name":"FailedDeployment","nameLocation":"772:16:65","nodeType":"ErrorDefinition","parameters":{"id":12381,"nodeType":"ParameterList","parameters":[],"src":"788:2:65"},"src":"766:25:65"},{"documentation":{"id":12383,"nodeType":"StructuredDocumentation","src":"797:58:65","text":" @dev A necessary precompile is missing."},"errorSelector":"42b01bce","id":12387,"name":"MissingPrecompile","nameLocation":"866:17:65","nodeType":"ErrorDefinition","parameters":{"id":12386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12385,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12387,"src":"884:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12384,"name":"address","nodeType":"ElementaryTypeName","src":"884:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"883:9:65"},"src":"860:33:65"}],"scope":12389,"src":"411:484:65","usedErrors":[12376,12379,12382,12387],"usedEvents":[]}],"src":"100:796:65"},"id":65},"@openzeppelin/contracts/utils/Panic.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Panic.sol","exportedSymbols":{"Panic":[12440]},"id":12441,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12390,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"99:24:66"},{"abstract":false,"baseContracts":[],"canonicalName":"Panic","contractDependencies":[],"contractKind":"library","documentation":{"id":12391,"nodeType":"StructuredDocumentation","src":"125:489:66","text":" @dev Helper library for emitting standardized panic codes.\n ```solidity\n contract Example {\n using Panic for uint256;\n // Use any of the declared internal constants\n function foo() { Panic.GENERIC.panic(); }\n // Alternatively\n function foo() { Panic.panic(Panic.GENERIC); }\n }\n ```\n Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].\n _Available since v5.1._"},"fullyImplemented":true,"id":12440,"linearizedBaseContracts":[12440],"name":"Panic","nameLocation":"665:5:66","nodeType":"ContractDefinition","nodes":[{"constant":true,"documentation":{"id":12392,"nodeType":"StructuredDocumentation","src":"677:36:66","text":"@dev generic / unspecified error"},"id":12395,"mutability":"constant","name":"GENERIC","nameLocation":"744:7:66","nodeType":"VariableDeclaration","scope":12440,"src":"718:40:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12393,"name":"uint256","nodeType":"ElementaryTypeName","src":"718:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783030","id":12394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"754:4:66","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0x00"},"visibility":"internal"},{"constant":true,"documentation":{"id":12396,"nodeType":"StructuredDocumentation","src":"764:37:66","text":"@dev used by the assert() builtin"},"id":12399,"mutability":"constant","name":"ASSERT","nameLocation":"832:6:66","nodeType":"VariableDeclaration","scope":12440,"src":"806:39:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12397,"name":"uint256","nodeType":"ElementaryTypeName","src":"806:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783031","id":12398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"841:4:66","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x01"},"visibility":"internal"},{"constant":true,"documentation":{"id":12400,"nodeType":"StructuredDocumentation","src":"851:41:66","text":"@dev arithmetic underflow or overflow"},"id":12403,"mutability":"constant","name":"UNDER_OVERFLOW","nameLocation":"923:14:66","nodeType":"VariableDeclaration","scope":12440,"src":"897:47:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12401,"name":"uint256","nodeType":"ElementaryTypeName","src":"897:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783131","id":12402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"940:4:66","typeDescriptions":{"typeIdentifier":"t_rational_17_by_1","typeString":"int_const 17"},"value":"0x11"},"visibility":"internal"},{"constant":true,"documentation":{"id":12404,"nodeType":"StructuredDocumentation","src":"950:35:66","text":"@dev division or modulo by zero"},"id":12407,"mutability":"constant","name":"DIVISION_BY_ZERO","nameLocation":"1016:16:66","nodeType":"VariableDeclaration","scope":12440,"src":"990:49:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12405,"name":"uint256","nodeType":"ElementaryTypeName","src":"990:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783132","id":12406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1035:4:66","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"0x12"},"visibility":"internal"},{"constant":true,"documentation":{"id":12408,"nodeType":"StructuredDocumentation","src":"1045:30:66","text":"@dev enum conversion error"},"id":12411,"mutability":"constant","name":"ENUM_CONVERSION_ERROR","nameLocation":"1106:21:66","nodeType":"VariableDeclaration","scope":12440,"src":"1080:54:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12409,"name":"uint256","nodeType":"ElementaryTypeName","src":"1080:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783231","id":12410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1130:4:66","typeDescriptions":{"typeIdentifier":"t_rational_33_by_1","typeString":"int_const 33"},"value":"0x21"},"visibility":"internal"},{"constant":true,"documentation":{"id":12412,"nodeType":"StructuredDocumentation","src":"1140:36:66","text":"@dev invalid encoding in storage"},"id":12415,"mutability":"constant","name":"STORAGE_ENCODING_ERROR","nameLocation":"1207:22:66","nodeType":"VariableDeclaration","scope":12440,"src":"1181:55:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12413,"name":"uint256","nodeType":"ElementaryTypeName","src":"1181:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783232","id":12414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1232:4:66","typeDescriptions":{"typeIdentifier":"t_rational_34_by_1","typeString":"int_const 34"},"value":"0x22"},"visibility":"internal"},{"constant":true,"documentation":{"id":12416,"nodeType":"StructuredDocumentation","src":"1242:24:66","text":"@dev empty array pop"},"id":12419,"mutability":"constant","name":"EMPTY_ARRAY_POP","nameLocation":"1297:15:66","nodeType":"VariableDeclaration","scope":12440,"src":"1271:48:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12417,"name":"uint256","nodeType":"ElementaryTypeName","src":"1271:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783331","id":12418,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1315:4:66","typeDescriptions":{"typeIdentifier":"t_rational_49_by_1","typeString":"int_const 49"},"value":"0x31"},"visibility":"internal"},{"constant":true,"documentation":{"id":12420,"nodeType":"StructuredDocumentation","src":"1325:35:66","text":"@dev array out of bounds access"},"id":12423,"mutability":"constant","name":"ARRAY_OUT_OF_BOUNDS","nameLocation":"1391:19:66","nodeType":"VariableDeclaration","scope":12440,"src":"1365:52:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12421,"name":"uint256","nodeType":"ElementaryTypeName","src":"1365:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783332","id":12422,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1413:4:66","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"0x32"},"visibility":"internal"},{"constant":true,"documentation":{"id":12424,"nodeType":"StructuredDocumentation","src":"1423:65:66","text":"@dev resource error (too large allocation or too large array)"},"id":12427,"mutability":"constant","name":"RESOURCE_ERROR","nameLocation":"1519:14:66","nodeType":"VariableDeclaration","scope":12440,"src":"1493:47:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12425,"name":"uint256","nodeType":"ElementaryTypeName","src":"1493:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783431","id":12426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1536:4:66","typeDescriptions":{"typeIdentifier":"t_rational_65_by_1","typeString":"int_const 65"},"value":"0x41"},"visibility":"internal"},{"constant":true,"documentation":{"id":12428,"nodeType":"StructuredDocumentation","src":"1546:42:66","text":"@dev calling invalid internal function"},"id":12431,"mutability":"constant","name":"INVALID_INTERNAL_FUNCTION","nameLocation":"1619:25:66","nodeType":"VariableDeclaration","scope":12440,"src":"1593:58:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12429,"name":"uint256","nodeType":"ElementaryTypeName","src":"1593:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783531","id":12430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1647:4:66","typeDescriptions":{"typeIdentifier":"t_rational_81_by_1","typeString":"int_const 81"},"value":"0x51"},"visibility":"internal"},{"body":{"id":12438,"nodeType":"Block","src":"1819:151:66","statements":[{"AST":{"nativeSrc":"1854:110:66","nodeType":"YulBlock","src":"1854:110:66","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1875:4:66","nodeType":"YulLiteral","src":"1875:4:66","type":"","value":"0x00"},{"kind":"number","nativeSrc":"1881:10:66","nodeType":"YulLiteral","src":"1881:10:66","type":"","value":"0x4e487b71"}],"functionName":{"name":"mstore","nativeSrc":"1868:6:66","nodeType":"YulIdentifier","src":"1868:6:66"},"nativeSrc":"1868:24:66","nodeType":"YulFunctionCall","src":"1868:24:66"},"nativeSrc":"1868:24:66","nodeType":"YulExpressionStatement","src":"1868:24:66"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1912:4:66","nodeType":"YulLiteral","src":"1912:4:66","type":"","value":"0x20"},{"name":"code","nativeSrc":"1918:4:66","nodeType":"YulIdentifier","src":"1918:4:66"}],"functionName":{"name":"mstore","nativeSrc":"1905:6:66","nodeType":"YulIdentifier","src":"1905:6:66"},"nativeSrc":"1905:18:66","nodeType":"YulFunctionCall","src":"1905:18:66"},"nativeSrc":"1905:18:66","nodeType":"YulExpressionStatement","src":"1905:18:66"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1943:4:66","nodeType":"YulLiteral","src":"1943:4:66","type":"","value":"0x1c"},{"kind":"number","nativeSrc":"1949:4:66","nodeType":"YulLiteral","src":"1949:4:66","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"1936:6:66","nodeType":"YulIdentifier","src":"1936:6:66"},"nativeSrc":"1936:18:66","nodeType":"YulFunctionCall","src":"1936:18:66"},"nativeSrc":"1936:18:66","nodeType":"YulExpressionStatement","src":"1936:18:66"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12434,"isOffset":false,"isSlot":false,"src":"1918:4:66","valueSize":1}],"flags":["memory-safe"],"id":12437,"nodeType":"InlineAssembly","src":"1829:135:66"}]},"documentation":{"id":12432,"nodeType":"StructuredDocumentation","src":"1658:113:66","text":"@dev Reverts with a panic code. Recommended to use with\n the internal constants with predefined codes."},"id":12439,"implemented":true,"kind":"function","modifiers":[],"name":"panic","nameLocation":"1785:5:66","nodeType":"FunctionDefinition","parameters":{"id":12435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12434,"mutability":"mutable","name":"code","nameLocation":"1799:4:66","nodeType":"VariableDeclaration","scope":12439,"src":"1791:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12433,"name":"uint256","nodeType":"ElementaryTypeName","src":"1791:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1790:14:66"},"returnParameters":{"id":12436,"nodeType":"ParameterList","parameters":[],"src":"1819:0:66"},"scope":12440,"src":"1776:194:66","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":12441,"src":"657:1315:66","usedErrors":[],"usedEvents":[]}],"src":"99:1874:66"},"id":66},"@openzeppelin/contracts/utils/SlotDerivation.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/SlotDerivation.sol","exportedSymbols":{"SlotDerivation":[12570]},"id":12571,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12442,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"199:24:67"},{"abstract":false,"baseContracts":[],"canonicalName":"SlotDerivation","contractDependencies":[],"contractKind":"library","documentation":{"id":12443,"nodeType":"StructuredDocumentation","src":"225:1373:67","text":" @dev Library for computing storage (and transient storage) locations from namespaces and deriving slots\n corresponding to standard patterns. The derivation method for array and mapping matches the storage layout used by\n the solidity language / compiler.\n See https://docs.soliditylang.org/en/v0.8.20/internals/layout_in_storage.html#mappings-and-dynamic-arrays[Solidity docs for mappings and dynamic arrays.].\n Example usage:\n ```solidity\n contract Example {\n // Add the library methods\n using StorageSlot for bytes32;\n using SlotDerivation for bytes32;\n // Declare a namespace\n string private constant _NAMESPACE = \"\"; // eg. OpenZeppelin.Slot\n function setValueInNamespace(uint256 key, address newValue) internal {\n _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value = newValue;\n }\n function getValueInNamespace(uint256 key) internal view returns (address) {\n return _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value;\n }\n }\n ```\n TIP: Consider using this library along with {StorageSlot}.\n NOTE: This library provides a way to manipulate storage locations in a non-standard way. Tooling for checking\n upgrade safety will ignore the slots accessed through this library.\n _Available since v5.1._"},"fullyImplemented":true,"id":12570,"linearizedBaseContracts":[12570],"name":"SlotDerivation","nameLocation":"1607:14:67","nodeType":"ContractDefinition","nodes":[{"body":{"id":12452,"nodeType":"Block","src":"1790:194:67","statements":[{"AST":{"nativeSrc":"1825:153:67","nodeType":"YulBlock","src":"1825:153:67","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1846:4:67","nodeType":"YulLiteral","src":"1846:4:67","type":"","value":"0x00"},{"arguments":[{"arguments":[{"arguments":[{"name":"namespace","nativeSrc":"1870:9:67","nodeType":"YulIdentifier","src":"1870:9:67"},{"kind":"number","nativeSrc":"1881:4:67","nodeType":"YulLiteral","src":"1881:4:67","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1866:3:67","nodeType":"YulIdentifier","src":"1866:3:67"},"nativeSrc":"1866:20:67","nodeType":"YulFunctionCall","src":"1866:20:67"},{"arguments":[{"name":"namespace","nativeSrc":"1894:9:67","nodeType":"YulIdentifier","src":"1894:9:67"}],"functionName":{"name":"mload","nativeSrc":"1888:5:67","nodeType":"YulIdentifier","src":"1888:5:67"},"nativeSrc":"1888:16:67","nodeType":"YulFunctionCall","src":"1888:16:67"}],"functionName":{"name":"keccak256","nativeSrc":"1856:9:67","nodeType":"YulIdentifier","src":"1856:9:67"},"nativeSrc":"1856:49:67","nodeType":"YulFunctionCall","src":"1856:49:67"},{"kind":"number","nativeSrc":"1907:1:67","nodeType":"YulLiteral","src":"1907:1:67","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1852:3:67","nodeType":"YulIdentifier","src":"1852:3:67"},"nativeSrc":"1852:57:67","nodeType":"YulFunctionCall","src":"1852:57:67"}],"functionName":{"name":"mstore","nativeSrc":"1839:6:67","nodeType":"YulIdentifier","src":"1839:6:67"},"nativeSrc":"1839:71:67","nodeType":"YulFunctionCall","src":"1839:71:67"},"nativeSrc":"1839:71:67","nodeType":"YulExpressionStatement","src":"1839:71:67"},{"nativeSrc":"1923:45:67","nodeType":"YulAssignment","src":"1923:45:67","value":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"1945:4:67","nodeType":"YulLiteral","src":"1945:4:67","type":"","value":"0x00"},{"kind":"number","nativeSrc":"1951:4:67","nodeType":"YulLiteral","src":"1951:4:67","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nativeSrc":"1935:9:67","nodeType":"YulIdentifier","src":"1935:9:67"},"nativeSrc":"1935:21:67","nodeType":"YulFunctionCall","src":"1935:21:67"},{"arguments":[{"kind":"number","nativeSrc":"1962:4:67","nodeType":"YulLiteral","src":"1962:4:67","type":"","value":"0xff"}],"functionName":{"name":"not","nativeSrc":"1958:3:67","nodeType":"YulIdentifier","src":"1958:3:67"},"nativeSrc":"1958:9:67","nodeType":"YulFunctionCall","src":"1958:9:67"}],"functionName":{"name":"and","nativeSrc":"1931:3:67","nodeType":"YulIdentifier","src":"1931:3:67"},"nativeSrc":"1931:37:67","nodeType":"YulFunctionCall","src":"1931:37:67"},"variableNames":[{"name":"slot","nativeSrc":"1923:4:67","nodeType":"YulIdentifier","src":"1923:4:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12446,"isOffset":false,"isSlot":false,"src":"1870:9:67","valueSize":1},{"declaration":12446,"isOffset":false,"isSlot":false,"src":"1894:9:67","valueSize":1},{"declaration":12449,"isOffset":false,"isSlot":false,"src":"1923:4:67","valueSize":1}],"flags":["memory-safe"],"id":12451,"nodeType":"InlineAssembly","src":"1800:178:67"}]},"documentation":{"id":12444,"nodeType":"StructuredDocumentation","src":"1628:74:67","text":" @dev Derive an ERC-7201 slot from a string (namespace)."},"id":12453,"implemented":true,"kind":"function","modifiers":[],"name":"erc7201Slot","nameLocation":"1716:11:67","nodeType":"FunctionDefinition","parameters":{"id":12447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12446,"mutability":"mutable","name":"namespace","nameLocation":"1742:9:67","nodeType":"VariableDeclaration","scope":12453,"src":"1728:23:67","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12445,"name":"string","nodeType":"ElementaryTypeName","src":"1728:6:67","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1727:25:67"},"returnParameters":{"id":12450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12449,"mutability":"mutable","name":"slot","nameLocation":"1784:4:67","nodeType":"VariableDeclaration","scope":12453,"src":"1776:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12448,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1776:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1775:14:67"},"scope":12570,"src":"1707:277:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12474,"nodeType":"Block","src":"2176:86:67","statements":[{"id":12473,"nodeType":"UncheckedBlock","src":"2186:70:67","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":12467,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12456,"src":"2233:4:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12466,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2225:7:67","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12465,"name":"uint256","nodeType":"ElementaryTypeName","src":"2225:7:67","typeDescriptions":{}}},"id":12468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2225:13:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":12469,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12458,"src":"2241:3:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2225:19:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12464,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2217:7:67","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":12463,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2217:7:67","typeDescriptions":{}}},"id":12471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2217:28:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":12462,"id":12472,"nodeType":"Return","src":"2210:35:67"}]}]},"documentation":{"id":12454,"nodeType":"StructuredDocumentation","src":"1990:99:67","text":" @dev Add an offset to a slot to get the n-th element of a structure or an array."},"id":12475,"implemented":true,"kind":"function","modifiers":[],"name":"offset","nameLocation":"2103:6:67","nodeType":"FunctionDefinition","parameters":{"id":12459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12456,"mutability":"mutable","name":"slot","nameLocation":"2118:4:67","nodeType":"VariableDeclaration","scope":12475,"src":"2110:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12455,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2110:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12458,"mutability":"mutable","name":"pos","nameLocation":"2132:3:67","nodeType":"VariableDeclaration","scope":12475,"src":"2124:11:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12457,"name":"uint256","nodeType":"ElementaryTypeName","src":"2124:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2109:27:67"},"returnParameters":{"id":12462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12461,"mutability":"mutable","name":"result","nameLocation":"2168:6:67","nodeType":"VariableDeclaration","scope":12475,"src":"2160:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12460,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2160:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2159:16:67"},"scope":12570,"src":"2094:168:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12484,"nodeType":"Block","src":"2465:127:67","statements":[{"AST":{"nativeSrc":"2500:86:67","nodeType":"YulBlock","src":"2500:86:67","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2521:4:67","nodeType":"YulLiteral","src":"2521:4:67","type":"","value":"0x00"},{"name":"slot","nativeSrc":"2527:4:67","nodeType":"YulIdentifier","src":"2527:4:67"}],"functionName":{"name":"mstore","nativeSrc":"2514:6:67","nodeType":"YulIdentifier","src":"2514:6:67"},"nativeSrc":"2514:18:67","nodeType":"YulFunctionCall","src":"2514:18:67"},"nativeSrc":"2514:18:67","nodeType":"YulExpressionStatement","src":"2514:18:67"},{"nativeSrc":"2545:31:67","nodeType":"YulAssignment","src":"2545:31:67","value":{"arguments":[{"kind":"number","nativeSrc":"2565:4:67","nodeType":"YulLiteral","src":"2565:4:67","type":"","value":"0x00"},{"kind":"number","nativeSrc":"2571:4:67","nodeType":"YulLiteral","src":"2571:4:67","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nativeSrc":"2555:9:67","nodeType":"YulIdentifier","src":"2555:9:67"},"nativeSrc":"2555:21:67","nodeType":"YulFunctionCall","src":"2555:21:67"},"variableNames":[{"name":"result","nativeSrc":"2545:6:67","nodeType":"YulIdentifier","src":"2545:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12481,"isOffset":false,"isSlot":false,"src":"2545:6:67","valueSize":1},{"declaration":12478,"isOffset":false,"isSlot":false,"src":"2527:4:67","valueSize":1}],"flags":["memory-safe"],"id":12483,"nodeType":"InlineAssembly","src":"2475:111:67"}]},"documentation":{"id":12476,"nodeType":"StructuredDocumentation","src":"2268:118:67","text":" @dev Derive the location of the first element in an array from the slot where the length is stored."},"id":12485,"implemented":true,"kind":"function","modifiers":[],"name":"deriveArray","nameLocation":"2400:11:67","nodeType":"FunctionDefinition","parameters":{"id":12479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12478,"mutability":"mutable","name":"slot","nameLocation":"2420:4:67","nodeType":"VariableDeclaration","scope":12485,"src":"2412:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12477,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2412:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2411:14:67"},"returnParameters":{"id":12482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12481,"mutability":"mutable","name":"result","nameLocation":"2457:6:67","nodeType":"VariableDeclaration","scope":12485,"src":"2449:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12480,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2449:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2448:16:67"},"scope":12570,"src":"2391:201:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12496,"nodeType":"Block","src":"2770:179:67","statements":[{"AST":{"nativeSrc":"2805:138:67","nodeType":"YulBlock","src":"2805:138:67","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2826:4:67","nodeType":"YulLiteral","src":"2826:4:67","type":"","value":"0x00"},{"arguments":[{"name":"key","nativeSrc":"2836:3:67","nodeType":"YulIdentifier","src":"2836:3:67"},{"arguments":[{"kind":"number","nativeSrc":"2845:2:67","nodeType":"YulLiteral","src":"2845:2:67","type":"","value":"96"},{"arguments":[{"kind":"number","nativeSrc":"2853:1:67","nodeType":"YulLiteral","src":"2853:1:67","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"2849:3:67","nodeType":"YulIdentifier","src":"2849:3:67"},"nativeSrc":"2849:6:67","nodeType":"YulFunctionCall","src":"2849:6:67"}],"functionName":{"name":"shr","nativeSrc":"2841:3:67","nodeType":"YulIdentifier","src":"2841:3:67"},"nativeSrc":"2841:15:67","nodeType":"YulFunctionCall","src":"2841:15:67"}],"functionName":{"name":"and","nativeSrc":"2832:3:67","nodeType":"YulIdentifier","src":"2832:3:67"},"nativeSrc":"2832:25:67","nodeType":"YulFunctionCall","src":"2832:25:67"}],"functionName":{"name":"mstore","nativeSrc":"2819:6:67","nodeType":"YulIdentifier","src":"2819:6:67"},"nativeSrc":"2819:39:67","nodeType":"YulFunctionCall","src":"2819:39:67"},"nativeSrc":"2819:39:67","nodeType":"YulExpressionStatement","src":"2819:39:67"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"2878:4:67","nodeType":"YulLiteral","src":"2878:4:67","type":"","value":"0x20"},{"name":"slot","nativeSrc":"2884:4:67","nodeType":"YulIdentifier","src":"2884:4:67"}],"functionName":{"name":"mstore","nativeSrc":"2871:6:67","nodeType":"YulIdentifier","src":"2871:6:67"},"nativeSrc":"2871:18:67","nodeType":"YulFunctionCall","src":"2871:18:67"},"nativeSrc":"2871:18:67","nodeType":"YulExpressionStatement","src":"2871:18:67"},{"nativeSrc":"2902:31:67","nodeType":"YulAssignment","src":"2902:31:67","value":{"arguments":[{"kind":"number","nativeSrc":"2922:4:67","nodeType":"YulLiteral","src":"2922:4:67","type":"","value":"0x00"},{"kind":"number","nativeSrc":"2928:4:67","nodeType":"YulLiteral","src":"2928:4:67","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"2912:9:67","nodeType":"YulIdentifier","src":"2912:9:67"},"nativeSrc":"2912:21:67","nodeType":"YulFunctionCall","src":"2912:21:67"},"variableNames":[{"name":"result","nativeSrc":"2902:6:67","nodeType":"YulIdentifier","src":"2902:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12490,"isOffset":false,"isSlot":false,"src":"2836:3:67","valueSize":1},{"declaration":12493,"isOffset":false,"isSlot":false,"src":"2902:6:67","valueSize":1},{"declaration":12488,"isOffset":false,"isSlot":false,"src":"2884:4:67","valueSize":1}],"flags":["memory-safe"],"id":12495,"nodeType":"InlineAssembly","src":"2780:163:67"}]},"documentation":{"id":12486,"nodeType":"StructuredDocumentation","src":"2598:78:67","text":" @dev Derive the location of a mapping element from the key."},"id":12497,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"2690:13:67","nodeType":"FunctionDefinition","parameters":{"id":12491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12488,"mutability":"mutable","name":"slot","nameLocation":"2712:4:67","nodeType":"VariableDeclaration","scope":12497,"src":"2704:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12487,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2704:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12490,"mutability":"mutable","name":"key","nameLocation":"2726:3:67","nodeType":"VariableDeclaration","scope":12497,"src":"2718:11:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12489,"name":"address","nodeType":"ElementaryTypeName","src":"2718:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2703:27:67"},"returnParameters":{"id":12494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12493,"mutability":"mutable","name":"result","nameLocation":"2762:6:67","nodeType":"VariableDeclaration","scope":12497,"src":"2754:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12492,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2754:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2753:16:67"},"scope":12570,"src":"2681:268:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12508,"nodeType":"Block","src":"3124:173:67","statements":[{"AST":{"nativeSrc":"3159:132:67","nodeType":"YulBlock","src":"3159:132:67","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3180:4:67","nodeType":"YulLiteral","src":"3180:4:67","type":"","value":"0x00"},{"arguments":[{"arguments":[{"name":"key","nativeSrc":"3200:3:67","nodeType":"YulIdentifier","src":"3200:3:67"}],"functionName":{"name":"iszero","nativeSrc":"3193:6:67","nodeType":"YulIdentifier","src":"3193:6:67"},"nativeSrc":"3193:11:67","nodeType":"YulFunctionCall","src":"3193:11:67"}],"functionName":{"name":"iszero","nativeSrc":"3186:6:67","nodeType":"YulIdentifier","src":"3186:6:67"},"nativeSrc":"3186:19:67","nodeType":"YulFunctionCall","src":"3186:19:67"}],"functionName":{"name":"mstore","nativeSrc":"3173:6:67","nodeType":"YulIdentifier","src":"3173:6:67"},"nativeSrc":"3173:33:67","nodeType":"YulFunctionCall","src":"3173:33:67"},"nativeSrc":"3173:33:67","nodeType":"YulExpressionStatement","src":"3173:33:67"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3226:4:67","nodeType":"YulLiteral","src":"3226:4:67","type":"","value":"0x20"},{"name":"slot","nativeSrc":"3232:4:67","nodeType":"YulIdentifier","src":"3232:4:67"}],"functionName":{"name":"mstore","nativeSrc":"3219:6:67","nodeType":"YulIdentifier","src":"3219:6:67"},"nativeSrc":"3219:18:67","nodeType":"YulFunctionCall","src":"3219:18:67"},"nativeSrc":"3219:18:67","nodeType":"YulExpressionStatement","src":"3219:18:67"},{"nativeSrc":"3250:31:67","nodeType":"YulAssignment","src":"3250:31:67","value":{"arguments":[{"kind":"number","nativeSrc":"3270:4:67","nodeType":"YulLiteral","src":"3270:4:67","type":"","value":"0x00"},{"kind":"number","nativeSrc":"3276:4:67","nodeType":"YulLiteral","src":"3276:4:67","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"3260:9:67","nodeType":"YulIdentifier","src":"3260:9:67"},"nativeSrc":"3260:21:67","nodeType":"YulFunctionCall","src":"3260:21:67"},"variableNames":[{"name":"result","nativeSrc":"3250:6:67","nodeType":"YulIdentifier","src":"3250:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12502,"isOffset":false,"isSlot":false,"src":"3200:3:67","valueSize":1},{"declaration":12505,"isOffset":false,"isSlot":false,"src":"3250:6:67","valueSize":1},{"declaration":12500,"isOffset":false,"isSlot":false,"src":"3232:4:67","valueSize":1}],"flags":["memory-safe"],"id":12507,"nodeType":"InlineAssembly","src":"3134:157:67"}]},"documentation":{"id":12498,"nodeType":"StructuredDocumentation","src":"2955:78:67","text":" @dev Derive the location of a mapping element from the key."},"id":12509,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"3047:13:67","nodeType":"FunctionDefinition","parameters":{"id":12503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12500,"mutability":"mutable","name":"slot","nameLocation":"3069:4:67","nodeType":"VariableDeclaration","scope":12509,"src":"3061:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12499,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3061:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12502,"mutability":"mutable","name":"key","nameLocation":"3080:3:67","nodeType":"VariableDeclaration","scope":12509,"src":"3075:8:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12501,"name":"bool","nodeType":"ElementaryTypeName","src":"3075:4:67","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3060:24:67"},"returnParameters":{"id":12506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12505,"mutability":"mutable","name":"result","nameLocation":"3116:6:67","nodeType":"VariableDeclaration","scope":12509,"src":"3108:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12504,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3108:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3107:16:67"},"scope":12570,"src":"3038:259:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12520,"nodeType":"Block","src":"3475:157:67","statements":[{"AST":{"nativeSrc":"3510:116:67","nodeType":"YulBlock","src":"3510:116:67","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3531:4:67","nodeType":"YulLiteral","src":"3531:4:67","type":"","value":"0x00"},{"name":"key","nativeSrc":"3537:3:67","nodeType":"YulIdentifier","src":"3537:3:67"}],"functionName":{"name":"mstore","nativeSrc":"3524:6:67","nodeType":"YulIdentifier","src":"3524:6:67"},"nativeSrc":"3524:17:67","nodeType":"YulFunctionCall","src":"3524:17:67"},"nativeSrc":"3524:17:67","nodeType":"YulExpressionStatement","src":"3524:17:67"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3561:4:67","nodeType":"YulLiteral","src":"3561:4:67","type":"","value":"0x20"},{"name":"slot","nativeSrc":"3567:4:67","nodeType":"YulIdentifier","src":"3567:4:67"}],"functionName":{"name":"mstore","nativeSrc":"3554:6:67","nodeType":"YulIdentifier","src":"3554:6:67"},"nativeSrc":"3554:18:67","nodeType":"YulFunctionCall","src":"3554:18:67"},"nativeSrc":"3554:18:67","nodeType":"YulExpressionStatement","src":"3554:18:67"},{"nativeSrc":"3585:31:67","nodeType":"YulAssignment","src":"3585:31:67","value":{"arguments":[{"kind":"number","nativeSrc":"3605:4:67","nodeType":"YulLiteral","src":"3605:4:67","type":"","value":"0x00"},{"kind":"number","nativeSrc":"3611:4:67","nodeType":"YulLiteral","src":"3611:4:67","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"3595:9:67","nodeType":"YulIdentifier","src":"3595:9:67"},"nativeSrc":"3595:21:67","nodeType":"YulFunctionCall","src":"3595:21:67"},"variableNames":[{"name":"result","nativeSrc":"3585:6:67","nodeType":"YulIdentifier","src":"3585:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12514,"isOffset":false,"isSlot":false,"src":"3537:3:67","valueSize":1},{"declaration":12517,"isOffset":false,"isSlot":false,"src":"3585:6:67","valueSize":1},{"declaration":12512,"isOffset":false,"isSlot":false,"src":"3567:4:67","valueSize":1}],"flags":["memory-safe"],"id":12519,"nodeType":"InlineAssembly","src":"3485:141:67"}]},"documentation":{"id":12510,"nodeType":"StructuredDocumentation","src":"3303:78:67","text":" @dev Derive the location of a mapping element from the key."},"id":12521,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"3395:13:67","nodeType":"FunctionDefinition","parameters":{"id":12515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12512,"mutability":"mutable","name":"slot","nameLocation":"3417:4:67","nodeType":"VariableDeclaration","scope":12521,"src":"3409:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12511,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3409:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12514,"mutability":"mutable","name":"key","nameLocation":"3431:3:67","nodeType":"VariableDeclaration","scope":12521,"src":"3423:11:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12513,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3423:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3408:27:67"},"returnParameters":{"id":12518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12517,"mutability":"mutable","name":"result","nameLocation":"3467:6:67","nodeType":"VariableDeclaration","scope":12521,"src":"3459:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12516,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3459:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3458:16:67"},"scope":12570,"src":"3386:246:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12532,"nodeType":"Block","src":"3810:157:67","statements":[{"AST":{"nativeSrc":"3845:116:67","nodeType":"YulBlock","src":"3845:116:67","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3866:4:67","nodeType":"YulLiteral","src":"3866:4:67","type":"","value":"0x00"},{"name":"key","nativeSrc":"3872:3:67","nodeType":"YulIdentifier","src":"3872:3:67"}],"functionName":{"name":"mstore","nativeSrc":"3859:6:67","nodeType":"YulIdentifier","src":"3859:6:67"},"nativeSrc":"3859:17:67","nodeType":"YulFunctionCall","src":"3859:17:67"},"nativeSrc":"3859:17:67","nodeType":"YulExpressionStatement","src":"3859:17:67"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3896:4:67","nodeType":"YulLiteral","src":"3896:4:67","type":"","value":"0x20"},{"name":"slot","nativeSrc":"3902:4:67","nodeType":"YulIdentifier","src":"3902:4:67"}],"functionName":{"name":"mstore","nativeSrc":"3889:6:67","nodeType":"YulIdentifier","src":"3889:6:67"},"nativeSrc":"3889:18:67","nodeType":"YulFunctionCall","src":"3889:18:67"},"nativeSrc":"3889:18:67","nodeType":"YulExpressionStatement","src":"3889:18:67"},{"nativeSrc":"3920:31:67","nodeType":"YulAssignment","src":"3920:31:67","value":{"arguments":[{"kind":"number","nativeSrc":"3940:4:67","nodeType":"YulLiteral","src":"3940:4:67","type":"","value":"0x00"},{"kind":"number","nativeSrc":"3946:4:67","nodeType":"YulLiteral","src":"3946:4:67","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"3930:9:67","nodeType":"YulIdentifier","src":"3930:9:67"},"nativeSrc":"3930:21:67","nodeType":"YulFunctionCall","src":"3930:21:67"},"variableNames":[{"name":"result","nativeSrc":"3920:6:67","nodeType":"YulIdentifier","src":"3920:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12526,"isOffset":false,"isSlot":false,"src":"3872:3:67","valueSize":1},{"declaration":12529,"isOffset":false,"isSlot":false,"src":"3920:6:67","valueSize":1},{"declaration":12524,"isOffset":false,"isSlot":false,"src":"3902:4:67","valueSize":1}],"flags":["memory-safe"],"id":12531,"nodeType":"InlineAssembly","src":"3820:141:67"}]},"documentation":{"id":12522,"nodeType":"StructuredDocumentation","src":"3638:78:67","text":" @dev Derive the location of a mapping element from the key."},"id":12533,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"3730:13:67","nodeType":"FunctionDefinition","parameters":{"id":12527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12524,"mutability":"mutable","name":"slot","nameLocation":"3752:4:67","nodeType":"VariableDeclaration","scope":12533,"src":"3744:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12523,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3744:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12526,"mutability":"mutable","name":"key","nameLocation":"3766:3:67","nodeType":"VariableDeclaration","scope":12533,"src":"3758:11:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12525,"name":"uint256","nodeType":"ElementaryTypeName","src":"3758:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3743:27:67"},"returnParameters":{"id":12530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12529,"mutability":"mutable","name":"result","nameLocation":"3802:6:67","nodeType":"VariableDeclaration","scope":12533,"src":"3794:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12528,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3794:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3793:16:67"},"scope":12570,"src":"3721:246:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12544,"nodeType":"Block","src":"4144:157:67","statements":[{"AST":{"nativeSrc":"4179:116:67","nodeType":"YulBlock","src":"4179:116:67","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4200:4:67","nodeType":"YulLiteral","src":"4200:4:67","type":"","value":"0x00"},{"name":"key","nativeSrc":"4206:3:67","nodeType":"YulIdentifier","src":"4206:3:67"}],"functionName":{"name":"mstore","nativeSrc":"4193:6:67","nodeType":"YulIdentifier","src":"4193:6:67"},"nativeSrc":"4193:17:67","nodeType":"YulFunctionCall","src":"4193:17:67"},"nativeSrc":"4193:17:67","nodeType":"YulExpressionStatement","src":"4193:17:67"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4230:4:67","nodeType":"YulLiteral","src":"4230:4:67","type":"","value":"0x20"},{"name":"slot","nativeSrc":"4236:4:67","nodeType":"YulIdentifier","src":"4236:4:67"}],"functionName":{"name":"mstore","nativeSrc":"4223:6:67","nodeType":"YulIdentifier","src":"4223:6:67"},"nativeSrc":"4223:18:67","nodeType":"YulFunctionCall","src":"4223:18:67"},"nativeSrc":"4223:18:67","nodeType":"YulExpressionStatement","src":"4223:18:67"},{"nativeSrc":"4254:31:67","nodeType":"YulAssignment","src":"4254:31:67","value":{"arguments":[{"kind":"number","nativeSrc":"4274:4:67","nodeType":"YulLiteral","src":"4274:4:67","type":"","value":"0x00"},{"kind":"number","nativeSrc":"4280:4:67","nodeType":"YulLiteral","src":"4280:4:67","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"4264:9:67","nodeType":"YulIdentifier","src":"4264:9:67"},"nativeSrc":"4264:21:67","nodeType":"YulFunctionCall","src":"4264:21:67"},"variableNames":[{"name":"result","nativeSrc":"4254:6:67","nodeType":"YulIdentifier","src":"4254:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12538,"isOffset":false,"isSlot":false,"src":"4206:3:67","valueSize":1},{"declaration":12541,"isOffset":false,"isSlot":false,"src":"4254:6:67","valueSize":1},{"declaration":12536,"isOffset":false,"isSlot":false,"src":"4236:4:67","valueSize":1}],"flags":["memory-safe"],"id":12543,"nodeType":"InlineAssembly","src":"4154:141:67"}]},"documentation":{"id":12534,"nodeType":"StructuredDocumentation","src":"3973:78:67","text":" @dev Derive the location of a mapping element from the key."},"id":12545,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"4065:13:67","nodeType":"FunctionDefinition","parameters":{"id":12539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12536,"mutability":"mutable","name":"slot","nameLocation":"4087:4:67","nodeType":"VariableDeclaration","scope":12545,"src":"4079:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12535,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4079:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12538,"mutability":"mutable","name":"key","nameLocation":"4100:3:67","nodeType":"VariableDeclaration","scope":12545,"src":"4093:10:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12537,"name":"int256","nodeType":"ElementaryTypeName","src":"4093:6:67","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4078:26:67"},"returnParameters":{"id":12542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12541,"mutability":"mutable","name":"result","nameLocation":"4136:6:67","nodeType":"VariableDeclaration","scope":12545,"src":"4128:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12540,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4128:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4127:16:67"},"scope":12570,"src":"4056:245:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12556,"nodeType":"Block","src":"4485:326:67","statements":[{"AST":{"nativeSrc":"4520:285:67","nodeType":"YulBlock","src":"4520:285:67","statements":[{"nativeSrc":"4534:24:67","nodeType":"YulVariableDeclaration","src":"4534:24:67","value":{"arguments":[{"name":"key","nativeSrc":"4554:3:67","nodeType":"YulIdentifier","src":"4554:3:67"}],"functionName":{"name":"mload","nativeSrc":"4548:5:67","nodeType":"YulIdentifier","src":"4548:5:67"},"nativeSrc":"4548:10:67","nodeType":"YulFunctionCall","src":"4548:10:67"},"variables":[{"name":"length","nativeSrc":"4538:6:67","nodeType":"YulTypedName","src":"4538:6:67","type":""}]},{"nativeSrc":"4571:27:67","nodeType":"YulVariableDeclaration","src":"4571:27:67","value":{"arguments":[{"name":"key","nativeSrc":"4588:3:67","nodeType":"YulIdentifier","src":"4588:3:67"},{"kind":"number","nativeSrc":"4593:4:67","nodeType":"YulLiteral","src":"4593:4:67","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4584:3:67","nodeType":"YulIdentifier","src":"4584:3:67"},"nativeSrc":"4584:14:67","nodeType":"YulFunctionCall","src":"4584:14:67"},"variables":[{"name":"begin","nativeSrc":"4575:5:67","nodeType":"YulTypedName","src":"4575:5:67","type":""}]},{"nativeSrc":"4611:29:67","nodeType":"YulVariableDeclaration","src":"4611:29:67","value":{"arguments":[{"name":"begin","nativeSrc":"4626:5:67","nodeType":"YulIdentifier","src":"4626:5:67"},{"name":"length","nativeSrc":"4633:6:67","nodeType":"YulIdentifier","src":"4633:6:67"}],"functionName":{"name":"add","nativeSrc":"4622:3:67","nodeType":"YulIdentifier","src":"4622:3:67"},"nativeSrc":"4622:18:67","nodeType":"YulFunctionCall","src":"4622:18:67"},"variables":[{"name":"end","nativeSrc":"4615:3:67","nodeType":"YulTypedName","src":"4615:3:67","type":""}]},{"nativeSrc":"4653:23:67","nodeType":"YulVariableDeclaration","src":"4653:23:67","value":{"arguments":[{"name":"end","nativeSrc":"4672:3:67","nodeType":"YulIdentifier","src":"4672:3:67"}],"functionName":{"name":"mload","nativeSrc":"4666:5:67","nodeType":"YulIdentifier","src":"4666:5:67"},"nativeSrc":"4666:10:67","nodeType":"YulFunctionCall","src":"4666:10:67"},"variables":[{"name":"cache","nativeSrc":"4657:5:67","nodeType":"YulTypedName","src":"4657:5:67","type":""}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"4696:3:67","nodeType":"YulIdentifier","src":"4696:3:67"},{"name":"slot","nativeSrc":"4701:4:67","nodeType":"YulIdentifier","src":"4701:4:67"}],"functionName":{"name":"mstore","nativeSrc":"4689:6:67","nodeType":"YulIdentifier","src":"4689:6:67"},"nativeSrc":"4689:17:67","nodeType":"YulFunctionCall","src":"4689:17:67"},"nativeSrc":"4689:17:67","nodeType":"YulExpressionStatement","src":"4689:17:67"},{"nativeSrc":"4719:45:67","nodeType":"YulAssignment","src":"4719:45:67","value":{"arguments":[{"name":"begin","nativeSrc":"4739:5:67","nodeType":"YulIdentifier","src":"4739:5:67"},{"arguments":[{"name":"length","nativeSrc":"4750:6:67","nodeType":"YulIdentifier","src":"4750:6:67"},{"kind":"number","nativeSrc":"4758:4:67","nodeType":"YulLiteral","src":"4758:4:67","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4746:3:67","nodeType":"YulIdentifier","src":"4746:3:67"},"nativeSrc":"4746:17:67","nodeType":"YulFunctionCall","src":"4746:17:67"}],"functionName":{"name":"keccak256","nativeSrc":"4729:9:67","nodeType":"YulIdentifier","src":"4729:9:67"},"nativeSrc":"4729:35:67","nodeType":"YulFunctionCall","src":"4729:35:67"},"variableNames":[{"name":"result","nativeSrc":"4719:6:67","nodeType":"YulIdentifier","src":"4719:6:67"}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"4784:3:67","nodeType":"YulIdentifier","src":"4784:3:67"},{"name":"cache","nativeSrc":"4789:5:67","nodeType":"YulIdentifier","src":"4789:5:67"}],"functionName":{"name":"mstore","nativeSrc":"4777:6:67","nodeType":"YulIdentifier","src":"4777:6:67"},"nativeSrc":"4777:18:67","nodeType":"YulFunctionCall","src":"4777:18:67"},"nativeSrc":"4777:18:67","nodeType":"YulExpressionStatement","src":"4777:18:67"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12550,"isOffset":false,"isSlot":false,"src":"4554:3:67","valueSize":1},{"declaration":12550,"isOffset":false,"isSlot":false,"src":"4588:3:67","valueSize":1},{"declaration":12553,"isOffset":false,"isSlot":false,"src":"4719:6:67","valueSize":1},{"declaration":12548,"isOffset":false,"isSlot":false,"src":"4701:4:67","valueSize":1}],"flags":["memory-safe"],"id":12555,"nodeType":"InlineAssembly","src":"4495:310:67"}]},"documentation":{"id":12546,"nodeType":"StructuredDocumentation","src":"4307:78:67","text":" @dev Derive the location of a mapping element from the key."},"id":12557,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"4399:13:67","nodeType":"FunctionDefinition","parameters":{"id":12551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12548,"mutability":"mutable","name":"slot","nameLocation":"4421:4:67","nodeType":"VariableDeclaration","scope":12557,"src":"4413:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12547,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4413:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12550,"mutability":"mutable","name":"key","nameLocation":"4441:3:67","nodeType":"VariableDeclaration","scope":12557,"src":"4427:17:67","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12549,"name":"string","nodeType":"ElementaryTypeName","src":"4427:6:67","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4412:33:67"},"returnParameters":{"id":12554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12553,"mutability":"mutable","name":"result","nameLocation":"4477:6:67","nodeType":"VariableDeclaration","scope":12557,"src":"4469:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12552,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4469:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4468:16:67"},"scope":12570,"src":"4390:421:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12568,"nodeType":"Block","src":"4994:326:67","statements":[{"AST":{"nativeSrc":"5029:285:67","nodeType":"YulBlock","src":"5029:285:67","statements":[{"nativeSrc":"5043:24:67","nodeType":"YulVariableDeclaration","src":"5043:24:67","value":{"arguments":[{"name":"key","nativeSrc":"5063:3:67","nodeType":"YulIdentifier","src":"5063:3:67"}],"functionName":{"name":"mload","nativeSrc":"5057:5:67","nodeType":"YulIdentifier","src":"5057:5:67"},"nativeSrc":"5057:10:67","nodeType":"YulFunctionCall","src":"5057:10:67"},"variables":[{"name":"length","nativeSrc":"5047:6:67","nodeType":"YulTypedName","src":"5047:6:67","type":""}]},{"nativeSrc":"5080:27:67","nodeType":"YulVariableDeclaration","src":"5080:27:67","value":{"arguments":[{"name":"key","nativeSrc":"5097:3:67","nodeType":"YulIdentifier","src":"5097:3:67"},{"kind":"number","nativeSrc":"5102:4:67","nodeType":"YulLiteral","src":"5102:4:67","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5093:3:67","nodeType":"YulIdentifier","src":"5093:3:67"},"nativeSrc":"5093:14:67","nodeType":"YulFunctionCall","src":"5093:14:67"},"variables":[{"name":"begin","nativeSrc":"5084:5:67","nodeType":"YulTypedName","src":"5084:5:67","type":""}]},{"nativeSrc":"5120:29:67","nodeType":"YulVariableDeclaration","src":"5120:29:67","value":{"arguments":[{"name":"begin","nativeSrc":"5135:5:67","nodeType":"YulIdentifier","src":"5135:5:67"},{"name":"length","nativeSrc":"5142:6:67","nodeType":"YulIdentifier","src":"5142:6:67"}],"functionName":{"name":"add","nativeSrc":"5131:3:67","nodeType":"YulIdentifier","src":"5131:3:67"},"nativeSrc":"5131:18:67","nodeType":"YulFunctionCall","src":"5131:18:67"},"variables":[{"name":"end","nativeSrc":"5124:3:67","nodeType":"YulTypedName","src":"5124:3:67","type":""}]},{"nativeSrc":"5162:23:67","nodeType":"YulVariableDeclaration","src":"5162:23:67","value":{"arguments":[{"name":"end","nativeSrc":"5181:3:67","nodeType":"YulIdentifier","src":"5181:3:67"}],"functionName":{"name":"mload","nativeSrc":"5175:5:67","nodeType":"YulIdentifier","src":"5175:5:67"},"nativeSrc":"5175:10:67","nodeType":"YulFunctionCall","src":"5175:10:67"},"variables":[{"name":"cache","nativeSrc":"5166:5:67","nodeType":"YulTypedName","src":"5166:5:67","type":""}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"5205:3:67","nodeType":"YulIdentifier","src":"5205:3:67"},{"name":"slot","nativeSrc":"5210:4:67","nodeType":"YulIdentifier","src":"5210:4:67"}],"functionName":{"name":"mstore","nativeSrc":"5198:6:67","nodeType":"YulIdentifier","src":"5198:6:67"},"nativeSrc":"5198:17:67","nodeType":"YulFunctionCall","src":"5198:17:67"},"nativeSrc":"5198:17:67","nodeType":"YulExpressionStatement","src":"5198:17:67"},{"nativeSrc":"5228:45:67","nodeType":"YulAssignment","src":"5228:45:67","value":{"arguments":[{"name":"begin","nativeSrc":"5248:5:67","nodeType":"YulIdentifier","src":"5248:5:67"},{"arguments":[{"name":"length","nativeSrc":"5259:6:67","nodeType":"YulIdentifier","src":"5259:6:67"},{"kind":"number","nativeSrc":"5267:4:67","nodeType":"YulLiteral","src":"5267:4:67","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5255:3:67","nodeType":"YulIdentifier","src":"5255:3:67"},"nativeSrc":"5255:17:67","nodeType":"YulFunctionCall","src":"5255:17:67"}],"functionName":{"name":"keccak256","nativeSrc":"5238:9:67","nodeType":"YulIdentifier","src":"5238:9:67"},"nativeSrc":"5238:35:67","nodeType":"YulFunctionCall","src":"5238:35:67"},"variableNames":[{"name":"result","nativeSrc":"5228:6:67","nodeType":"YulIdentifier","src":"5228:6:67"}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"5293:3:67","nodeType":"YulIdentifier","src":"5293:3:67"},{"name":"cache","nativeSrc":"5298:5:67","nodeType":"YulIdentifier","src":"5298:5:67"}],"functionName":{"name":"mstore","nativeSrc":"5286:6:67","nodeType":"YulIdentifier","src":"5286:6:67"},"nativeSrc":"5286:18:67","nodeType":"YulFunctionCall","src":"5286:18:67"},"nativeSrc":"5286:18:67","nodeType":"YulExpressionStatement","src":"5286:18:67"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12562,"isOffset":false,"isSlot":false,"src":"5063:3:67","valueSize":1},{"declaration":12562,"isOffset":false,"isSlot":false,"src":"5097:3:67","valueSize":1},{"declaration":12565,"isOffset":false,"isSlot":false,"src":"5228:6:67","valueSize":1},{"declaration":12560,"isOffset":false,"isSlot":false,"src":"5210:4:67","valueSize":1}],"flags":["memory-safe"],"id":12567,"nodeType":"InlineAssembly","src":"5004:310:67"}]},"documentation":{"id":12558,"nodeType":"StructuredDocumentation","src":"4817:78:67","text":" @dev Derive the location of a mapping element from the key."},"id":12569,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"4909:13:67","nodeType":"FunctionDefinition","parameters":{"id":12563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12560,"mutability":"mutable","name":"slot","nameLocation":"4931:4:67","nodeType":"VariableDeclaration","scope":12569,"src":"4923:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12559,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4923:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12562,"mutability":"mutable","name":"key","nameLocation":"4950:3:67","nodeType":"VariableDeclaration","scope":12569,"src":"4937:16:67","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":12561,"name":"bytes","nodeType":"ElementaryTypeName","src":"4937:5:67","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4922:32:67"},"returnParameters":{"id":12566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12565,"mutability":"mutable","name":"result","nameLocation":"4986:6:67","nodeType":"VariableDeclaration","scope":12569,"src":"4978:14:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12564,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4978:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4977:16:67"},"scope":12570,"src":"4900:420:67","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":12571,"src":"1599:3723:67","usedErrors":[],"usedEvents":[]}],"src":"199:5124:67"},"id":67},"@openzeppelin/contracts/utils/StorageSlot.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","exportedSymbols":{"StorageSlot":[12694]},"id":12695,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12572,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"193:24:68"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlot","contractDependencies":[],"contractKind":"library","documentation":{"id":12573,"nodeType":"StructuredDocumentation","src":"219:1187:68","text":" @dev Library for reading and writing primitive types to specific storage slots.\n Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n This library helps with reading and writing to such slots without the need for inline assembly.\n The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n Example usage to set ERC-1967 implementation slot:\n ```solidity\n contract ERC1967 {\n // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n function _setImplementation(address newImplementation) internal {\n require(newImplementation.code.length > 0);\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n }\n ```\n TIP: Consider using this library along with {SlotDerivation}."},"fullyImplemented":true,"id":12694,"linearizedBaseContracts":[12694],"name":"StorageSlot","nameLocation":"1415:11:68","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlot.AddressSlot","id":12576,"members":[{"constant":false,"id":12575,"mutability":"mutable","name":"value","nameLocation":"1470:5:68","nodeType":"VariableDeclaration","scope":12576,"src":"1462:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12574,"name":"address","nodeType":"ElementaryTypeName","src":"1462:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"AddressSlot","nameLocation":"1440:11:68","nodeType":"StructDefinition","scope":12694,"src":"1433:49:68","visibility":"public"},{"canonicalName":"StorageSlot.BooleanSlot","id":12579,"members":[{"constant":false,"id":12578,"mutability":"mutable","name":"value","nameLocation":"1522:5:68","nodeType":"VariableDeclaration","scope":12579,"src":"1517:10:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12577,"name":"bool","nodeType":"ElementaryTypeName","src":"1517:4:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"BooleanSlot","nameLocation":"1495:11:68","nodeType":"StructDefinition","scope":12694,"src":"1488:46:68","visibility":"public"},{"canonicalName":"StorageSlot.Bytes32Slot","id":12582,"members":[{"constant":false,"id":12581,"mutability":"mutable","name":"value","nameLocation":"1577:5:68","nodeType":"VariableDeclaration","scope":12582,"src":"1569:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12580,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1569:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"Bytes32Slot","nameLocation":"1547:11:68","nodeType":"StructDefinition","scope":12694,"src":"1540:49:68","visibility":"public"},{"canonicalName":"StorageSlot.Uint256Slot","id":12585,"members":[{"constant":false,"id":12584,"mutability":"mutable","name":"value","nameLocation":"1632:5:68","nodeType":"VariableDeclaration","scope":12585,"src":"1624:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12583,"name":"uint256","nodeType":"ElementaryTypeName","src":"1624:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Uint256Slot","nameLocation":"1602:11:68","nodeType":"StructDefinition","scope":12694,"src":"1595:49:68","visibility":"public"},{"canonicalName":"StorageSlot.Int256Slot","id":12588,"members":[{"constant":false,"id":12587,"mutability":"mutable","name":"value","nameLocation":"1685:5:68","nodeType":"VariableDeclaration","scope":12588,"src":"1678:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12586,"name":"int256","nodeType":"ElementaryTypeName","src":"1678:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"name":"Int256Slot","nameLocation":"1657:10:68","nodeType":"StructDefinition","scope":12694,"src":"1650:47:68","visibility":"public"},{"canonicalName":"StorageSlot.StringSlot","id":12591,"members":[{"constant":false,"id":12590,"mutability":"mutable","name":"value","nameLocation":"1738:5:68","nodeType":"VariableDeclaration","scope":12591,"src":"1731:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":12589,"name":"string","nodeType":"ElementaryTypeName","src":"1731:6:68","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"name":"StringSlot","nameLocation":"1710:10:68","nodeType":"StructDefinition","scope":12694,"src":"1703:47:68","visibility":"public"},{"canonicalName":"StorageSlot.BytesSlot","id":12594,"members":[{"constant":false,"id":12593,"mutability":"mutable","name":"value","nameLocation":"1789:5:68","nodeType":"VariableDeclaration","scope":12594,"src":"1783:11:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":12592,"name":"bytes","nodeType":"ElementaryTypeName","src":"1783:5:68","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"BytesSlot","nameLocation":"1763:9:68","nodeType":"StructDefinition","scope":12694,"src":"1756:45:68","visibility":"public"},{"body":{"id":12604,"nodeType":"Block","src":"1983:79:68","statements":[{"AST":{"nativeSrc":"2018:38:68","nodeType":"YulBlock","src":"2018:38:68","statements":[{"nativeSrc":"2032:14:68","nodeType":"YulAssignment","src":"2032:14:68","value":{"name":"slot","nativeSrc":"2042:4:68","nodeType":"YulIdentifier","src":"2042:4:68"},"variableNames":[{"name":"r.slot","nativeSrc":"2032:6:68","nodeType":"YulIdentifier","src":"2032:6:68"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12601,"isOffset":false,"isSlot":true,"src":"2032:6:68","suffix":"slot","valueSize":1},{"declaration":12597,"isOffset":false,"isSlot":false,"src":"2042:4:68","valueSize":1}],"flags":["memory-safe"],"id":12603,"nodeType":"InlineAssembly","src":"1993:63:68"}]},"documentation":{"id":12595,"nodeType":"StructuredDocumentation","src":"1807:87:68","text":" @dev Returns an `AddressSlot` with member `value` located at `slot`."},"id":12605,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressSlot","nameLocation":"1908:14:68","nodeType":"FunctionDefinition","parameters":{"id":12598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12597,"mutability":"mutable","name":"slot","nameLocation":"1931:4:68","nodeType":"VariableDeclaration","scope":12605,"src":"1923:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12596,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1923:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1922:14:68"},"returnParameters":{"id":12602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12601,"mutability":"mutable","name":"r","nameLocation":"1980:1:68","nodeType":"VariableDeclaration","scope":12605,"src":"1960:21:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$12576_storage_ptr","typeString":"struct StorageSlot.AddressSlot"},"typeName":{"id":12600,"nodeType":"UserDefinedTypeName","pathNode":{"id":12599,"name":"AddressSlot","nameLocations":["1960:11:68"],"nodeType":"IdentifierPath","referencedDeclaration":12576,"src":"1960:11:68"},"referencedDeclaration":12576,"src":"1960:11:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$12576_storage_ptr","typeString":"struct StorageSlot.AddressSlot"}},"visibility":"internal"}],"src":"1959:23:68"},"scope":12694,"src":"1899:163:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12615,"nodeType":"Block","src":"2243:79:68","statements":[{"AST":{"nativeSrc":"2278:38:68","nodeType":"YulBlock","src":"2278:38:68","statements":[{"nativeSrc":"2292:14:68","nodeType":"YulAssignment","src":"2292:14:68","value":{"name":"slot","nativeSrc":"2302:4:68","nodeType":"YulIdentifier","src":"2302:4:68"},"variableNames":[{"name":"r.slot","nativeSrc":"2292:6:68","nodeType":"YulIdentifier","src":"2292:6:68"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12612,"isOffset":false,"isSlot":true,"src":"2292:6:68","suffix":"slot","valueSize":1},{"declaration":12608,"isOffset":false,"isSlot":false,"src":"2302:4:68","valueSize":1}],"flags":["memory-safe"],"id":12614,"nodeType":"InlineAssembly","src":"2253:63:68"}]},"documentation":{"id":12606,"nodeType":"StructuredDocumentation","src":"2068:86:68","text":" @dev Returns a `BooleanSlot` with member `value` located at `slot`."},"id":12616,"implemented":true,"kind":"function","modifiers":[],"name":"getBooleanSlot","nameLocation":"2168:14:68","nodeType":"FunctionDefinition","parameters":{"id":12609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12608,"mutability":"mutable","name":"slot","nameLocation":"2191:4:68","nodeType":"VariableDeclaration","scope":12616,"src":"2183:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12607,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2183:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2182:14:68"},"returnParameters":{"id":12613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12612,"mutability":"mutable","name":"r","nameLocation":"2240:1:68","nodeType":"VariableDeclaration","scope":12616,"src":"2220:21:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$12579_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"},"typeName":{"id":12611,"nodeType":"UserDefinedTypeName","pathNode":{"id":12610,"name":"BooleanSlot","nameLocations":["2220:11:68"],"nodeType":"IdentifierPath","referencedDeclaration":12579,"src":"2220:11:68"},"referencedDeclaration":12579,"src":"2220:11:68","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$12579_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"}},"visibility":"internal"}],"src":"2219:23:68"},"scope":12694,"src":"2159:163:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12626,"nodeType":"Block","src":"2503:79:68","statements":[{"AST":{"nativeSrc":"2538:38:68","nodeType":"YulBlock","src":"2538:38:68","statements":[{"nativeSrc":"2552:14:68","nodeType":"YulAssignment","src":"2552:14:68","value":{"name":"slot","nativeSrc":"2562:4:68","nodeType":"YulIdentifier","src":"2562:4:68"},"variableNames":[{"name":"r.slot","nativeSrc":"2552:6:68","nodeType":"YulIdentifier","src":"2552:6:68"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12623,"isOffset":false,"isSlot":true,"src":"2552:6:68","suffix":"slot","valueSize":1},{"declaration":12619,"isOffset":false,"isSlot":false,"src":"2562:4:68","valueSize":1}],"flags":["memory-safe"],"id":12625,"nodeType":"InlineAssembly","src":"2513:63:68"}]},"documentation":{"id":12617,"nodeType":"StructuredDocumentation","src":"2328:86:68","text":" @dev Returns a `Bytes32Slot` with member `value` located at `slot`."},"id":12627,"implemented":true,"kind":"function","modifiers":[],"name":"getBytes32Slot","nameLocation":"2428:14:68","nodeType":"FunctionDefinition","parameters":{"id":12620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12619,"mutability":"mutable","name":"slot","nameLocation":"2451:4:68","nodeType":"VariableDeclaration","scope":12627,"src":"2443:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12618,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2443:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2442:14:68"},"returnParameters":{"id":12624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12623,"mutability":"mutable","name":"r","nameLocation":"2500:1:68","nodeType":"VariableDeclaration","scope":12627,"src":"2480:21:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$12582_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"},"typeName":{"id":12622,"nodeType":"UserDefinedTypeName","pathNode":{"id":12621,"name":"Bytes32Slot","nameLocations":["2480:11:68"],"nodeType":"IdentifierPath","referencedDeclaration":12582,"src":"2480:11:68"},"referencedDeclaration":12582,"src":"2480:11:68","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$12582_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"}},"visibility":"internal"}],"src":"2479:23:68"},"scope":12694,"src":"2419:163:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12637,"nodeType":"Block","src":"2763:79:68","statements":[{"AST":{"nativeSrc":"2798:38:68","nodeType":"YulBlock","src":"2798:38:68","statements":[{"nativeSrc":"2812:14:68","nodeType":"YulAssignment","src":"2812:14:68","value":{"name":"slot","nativeSrc":"2822:4:68","nodeType":"YulIdentifier","src":"2822:4:68"},"variableNames":[{"name":"r.slot","nativeSrc":"2812:6:68","nodeType":"YulIdentifier","src":"2812:6:68"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12634,"isOffset":false,"isSlot":true,"src":"2812:6:68","suffix":"slot","valueSize":1},{"declaration":12630,"isOffset":false,"isSlot":false,"src":"2822:4:68","valueSize":1}],"flags":["memory-safe"],"id":12636,"nodeType":"InlineAssembly","src":"2773:63:68"}]},"documentation":{"id":12628,"nodeType":"StructuredDocumentation","src":"2588:86:68","text":" @dev Returns a `Uint256Slot` with member `value` located at `slot`."},"id":12638,"implemented":true,"kind":"function","modifiers":[],"name":"getUint256Slot","nameLocation":"2688:14:68","nodeType":"FunctionDefinition","parameters":{"id":12631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12630,"mutability":"mutable","name":"slot","nameLocation":"2711:4:68","nodeType":"VariableDeclaration","scope":12638,"src":"2703:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12629,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2703:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2702:14:68"},"returnParameters":{"id":12635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12634,"mutability":"mutable","name":"r","nameLocation":"2760:1:68","nodeType":"VariableDeclaration","scope":12638,"src":"2740:21:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12585_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"},"typeName":{"id":12633,"nodeType":"UserDefinedTypeName","pathNode":{"id":12632,"name":"Uint256Slot","nameLocations":["2740:11:68"],"nodeType":"IdentifierPath","referencedDeclaration":12585,"src":"2740:11:68"},"referencedDeclaration":12585,"src":"2740:11:68","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12585_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"}},"visibility":"internal"}],"src":"2739:23:68"},"scope":12694,"src":"2679:163:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12648,"nodeType":"Block","src":"3020:79:68","statements":[{"AST":{"nativeSrc":"3055:38:68","nodeType":"YulBlock","src":"3055:38:68","statements":[{"nativeSrc":"3069:14:68","nodeType":"YulAssignment","src":"3069:14:68","value":{"name":"slot","nativeSrc":"3079:4:68","nodeType":"YulIdentifier","src":"3079:4:68"},"variableNames":[{"name":"r.slot","nativeSrc":"3069:6:68","nodeType":"YulIdentifier","src":"3069:6:68"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12645,"isOffset":false,"isSlot":true,"src":"3069:6:68","suffix":"slot","valueSize":1},{"declaration":12641,"isOffset":false,"isSlot":false,"src":"3079:4:68","valueSize":1}],"flags":["memory-safe"],"id":12647,"nodeType":"InlineAssembly","src":"3030:63:68"}]},"documentation":{"id":12639,"nodeType":"StructuredDocumentation","src":"2848:85:68","text":" @dev Returns a `Int256Slot` with member `value` located at `slot`."},"id":12649,"implemented":true,"kind":"function","modifiers":[],"name":"getInt256Slot","nameLocation":"2947:13:68","nodeType":"FunctionDefinition","parameters":{"id":12642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12641,"mutability":"mutable","name":"slot","nameLocation":"2969:4:68","nodeType":"VariableDeclaration","scope":12649,"src":"2961:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12640,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2961:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2960:14:68"},"returnParameters":{"id":12646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12645,"mutability":"mutable","name":"r","nameLocation":"3017:1:68","nodeType":"VariableDeclaration","scope":12649,"src":"2998:20:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$12588_storage_ptr","typeString":"struct StorageSlot.Int256Slot"},"typeName":{"id":12644,"nodeType":"UserDefinedTypeName","pathNode":{"id":12643,"name":"Int256Slot","nameLocations":["2998:10:68"],"nodeType":"IdentifierPath","referencedDeclaration":12588,"src":"2998:10:68"},"referencedDeclaration":12588,"src":"2998:10:68","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$12588_storage_ptr","typeString":"struct StorageSlot.Int256Slot"}},"visibility":"internal"}],"src":"2997:22:68"},"scope":12694,"src":"2938:161:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12659,"nodeType":"Block","src":"3277:79:68","statements":[{"AST":{"nativeSrc":"3312:38:68","nodeType":"YulBlock","src":"3312:38:68","statements":[{"nativeSrc":"3326:14:68","nodeType":"YulAssignment","src":"3326:14:68","value":{"name":"slot","nativeSrc":"3336:4:68","nodeType":"YulIdentifier","src":"3336:4:68"},"variableNames":[{"name":"r.slot","nativeSrc":"3326:6:68","nodeType":"YulIdentifier","src":"3326:6:68"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12656,"isOffset":false,"isSlot":true,"src":"3326:6:68","suffix":"slot","valueSize":1},{"declaration":12652,"isOffset":false,"isSlot":false,"src":"3336:4:68","valueSize":1}],"flags":["memory-safe"],"id":12658,"nodeType":"InlineAssembly","src":"3287:63:68"}]},"documentation":{"id":12650,"nodeType":"StructuredDocumentation","src":"3105:85:68","text":" @dev Returns a `StringSlot` with member `value` located at `slot`."},"id":12660,"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"3204:13:68","nodeType":"FunctionDefinition","parameters":{"id":12653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12652,"mutability":"mutable","name":"slot","nameLocation":"3226:4:68","nodeType":"VariableDeclaration","scope":12660,"src":"3218:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12651,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3218:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3217:14:68"},"returnParameters":{"id":12657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12656,"mutability":"mutable","name":"r","nameLocation":"3274:1:68","nodeType":"VariableDeclaration","scope":12660,"src":"3255:20:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12591_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":12655,"nodeType":"UserDefinedTypeName","pathNode":{"id":12654,"name":"StringSlot","nameLocations":["3255:10:68"],"nodeType":"IdentifierPath","referencedDeclaration":12591,"src":"3255:10:68"},"referencedDeclaration":12591,"src":"3255:10:68","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12591_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"3254:22:68"},"scope":12694,"src":"3195:161:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12670,"nodeType":"Block","src":"3558:85:68","statements":[{"AST":{"nativeSrc":"3593:44:68","nodeType":"YulBlock","src":"3593:44:68","statements":[{"nativeSrc":"3607:20:68","nodeType":"YulAssignment","src":"3607:20:68","value":{"name":"store.slot","nativeSrc":"3617:10:68","nodeType":"YulIdentifier","src":"3617:10:68"},"variableNames":[{"name":"r.slot","nativeSrc":"3607:6:68","nodeType":"YulIdentifier","src":"3607:6:68"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12667,"isOffset":false,"isSlot":true,"src":"3607:6:68","suffix":"slot","valueSize":1},{"declaration":12663,"isOffset":false,"isSlot":true,"src":"3617:10:68","suffix":"slot","valueSize":1}],"flags":["memory-safe"],"id":12669,"nodeType":"InlineAssembly","src":"3568:69:68"}]},"documentation":{"id":12661,"nodeType":"StructuredDocumentation","src":"3362:101:68","text":" @dev Returns an `StringSlot` representation of the string storage pointer `store`."},"id":12671,"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"3477:13:68","nodeType":"FunctionDefinition","parameters":{"id":12664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12663,"mutability":"mutable","name":"store","nameLocation":"3506:5:68","nodeType":"VariableDeclaration","scope":12671,"src":"3491:20:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":12662,"name":"string","nodeType":"ElementaryTypeName","src":"3491:6:68","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3490:22:68"},"returnParameters":{"id":12668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12667,"mutability":"mutable","name":"r","nameLocation":"3555:1:68","nodeType":"VariableDeclaration","scope":12671,"src":"3536:20:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12591_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":12666,"nodeType":"UserDefinedTypeName","pathNode":{"id":12665,"name":"StringSlot","nameLocations":["3536:10:68"],"nodeType":"IdentifierPath","referencedDeclaration":12591,"src":"3536:10:68"},"referencedDeclaration":12591,"src":"3536:10:68","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12591_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"3535:22:68"},"scope":12694,"src":"3468:175:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12681,"nodeType":"Block","src":"3818:79:68","statements":[{"AST":{"nativeSrc":"3853:38:68","nodeType":"YulBlock","src":"3853:38:68","statements":[{"nativeSrc":"3867:14:68","nodeType":"YulAssignment","src":"3867:14:68","value":{"name":"slot","nativeSrc":"3877:4:68","nodeType":"YulIdentifier","src":"3877:4:68"},"variableNames":[{"name":"r.slot","nativeSrc":"3867:6:68","nodeType":"YulIdentifier","src":"3867:6:68"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12678,"isOffset":false,"isSlot":true,"src":"3867:6:68","suffix":"slot","valueSize":1},{"declaration":12674,"isOffset":false,"isSlot":false,"src":"3877:4:68","valueSize":1}],"flags":["memory-safe"],"id":12680,"nodeType":"InlineAssembly","src":"3828:63:68"}]},"documentation":{"id":12672,"nodeType":"StructuredDocumentation","src":"3649:84:68","text":" @dev Returns a `BytesSlot` with member `value` located at `slot`."},"id":12682,"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"3747:12:68","nodeType":"FunctionDefinition","parameters":{"id":12675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12674,"mutability":"mutable","name":"slot","nameLocation":"3768:4:68","nodeType":"VariableDeclaration","scope":12682,"src":"3760:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12673,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3760:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3759:14:68"},"returnParameters":{"id":12679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12678,"mutability":"mutable","name":"r","nameLocation":"3815:1:68","nodeType":"VariableDeclaration","scope":12682,"src":"3797:19:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12594_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":12677,"nodeType":"UserDefinedTypeName","pathNode":{"id":12676,"name":"BytesSlot","nameLocations":["3797:9:68"],"nodeType":"IdentifierPath","referencedDeclaration":12594,"src":"3797:9:68"},"referencedDeclaration":12594,"src":"3797:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12594_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"3796:21:68"},"scope":12694,"src":"3738:159:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12692,"nodeType":"Block","src":"4094:85:68","statements":[{"AST":{"nativeSrc":"4129:44:68","nodeType":"YulBlock","src":"4129:44:68","statements":[{"nativeSrc":"4143:20:68","nodeType":"YulAssignment","src":"4143:20:68","value":{"name":"store.slot","nativeSrc":"4153:10:68","nodeType":"YulIdentifier","src":"4153:10:68"},"variableNames":[{"name":"r.slot","nativeSrc":"4143:6:68","nodeType":"YulIdentifier","src":"4143:6:68"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12689,"isOffset":false,"isSlot":true,"src":"4143:6:68","suffix":"slot","valueSize":1},{"declaration":12685,"isOffset":false,"isSlot":true,"src":"4153:10:68","suffix":"slot","valueSize":1}],"flags":["memory-safe"],"id":12691,"nodeType":"InlineAssembly","src":"4104:69:68"}]},"documentation":{"id":12683,"nodeType":"StructuredDocumentation","src":"3903:99:68","text":" @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`."},"id":12693,"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"4016:12:68","nodeType":"FunctionDefinition","parameters":{"id":12686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12685,"mutability":"mutable","name":"store","nameLocation":"4043:5:68","nodeType":"VariableDeclaration","scope":12693,"src":"4029:19:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":12684,"name":"bytes","nodeType":"ElementaryTypeName","src":"4029:5:68","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4028:21:68"},"returnParameters":{"id":12690,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12689,"mutability":"mutable","name":"r","nameLocation":"4091:1:68","nodeType":"VariableDeclaration","scope":12693,"src":"4073:19:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12594_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":12688,"nodeType":"UserDefinedTypeName","pathNode":{"id":12687,"name":"BytesSlot","nameLocations":["4073:9:68"],"nodeType":"IdentifierPath","referencedDeclaration":12594,"src":"4073:9:68"},"referencedDeclaration":12594,"src":"4073:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12594_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"4072:21:68"},"scope":12694,"src":"4007:172:68","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":12695,"src":"1407:2774:68","usedErrors":[],"usedEvents":[]}],"src":"193:3989:68"},"id":68},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","exportedSymbols":{"IERC165":[12706]},"id":12707,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12696,"literals":["solidity",">=","0.4",".16"],"nodeType":"PragmaDirective","src":"115:25:69"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC165","contractDependencies":[],"contractKind":"interface","documentation":{"id":12697,"nodeType":"StructuredDocumentation","src":"142:280:69","text":" @dev Interface of the ERC-165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[ERC].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}."},"fullyImplemented":false,"id":12706,"linearizedBaseContracts":[12706],"name":"IERC165","nameLocation":"433:7:69","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":12698,"nodeType":"StructuredDocumentation","src":"447:340:69","text":" @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."},"functionSelector":"01ffc9a7","id":12705,"implemented":false,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"801:17:69","nodeType":"FunctionDefinition","parameters":{"id":12701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12700,"mutability":"mutable","name":"interfaceId","nameLocation":"826:11:69","nodeType":"VariableDeclaration","scope":12705,"src":"819:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":12699,"name":"bytes4","nodeType":"ElementaryTypeName","src":"819:6:69","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"818:20:69"},"returnParameters":{"id":12704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12703,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12705,"src":"862:4:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12702,"name":"bool","nodeType":"ElementaryTypeName","src":"862:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"861:6:69"},"scope":12706,"src":"792:76:69","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":12707,"src":"423:447:69","usedErrors":[],"usedEvents":[]}],"src":"115:756:69"},"id":69},"@openzeppelin/contracts/utils/math/Math.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","exportedSymbols":{"Math":[14327],"Panic":[12440],"SafeCast":[16092]},"id":14328,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12708,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"103:24:70"},{"absolutePath":"@openzeppelin/contracts/utils/Panic.sol","file":"../Panic.sol","id":12710,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14328,"sourceUnit":12441,"src":"129:35:70","symbolAliases":[{"foreign":{"id":12709,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"137:5:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"./SafeCast.sol","id":12712,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14328,"sourceUnit":16093,"src":"165:40:70","symbolAliases":[{"foreign":{"id":12711,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"173:8:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Math","contractDependencies":[],"contractKind":"library","documentation":{"id":12713,"nodeType":"StructuredDocumentation","src":"207:73:70","text":" @dev Standard math utilities missing in the Solidity language."},"fullyImplemented":true,"id":14327,"linearizedBaseContracts":[14327],"name":"Math","nameLocation":"289:4:70","nodeType":"ContractDefinition","nodes":[{"canonicalName":"Math.Rounding","id":12718,"members":[{"id":12714,"name":"Floor","nameLocation":"324:5:70","nodeType":"EnumValue","src":"324:5:70"},{"id":12715,"name":"Ceil","nameLocation":"367:4:70","nodeType":"EnumValue","src":"367:4:70"},{"id":12716,"name":"Trunc","nameLocation":"409:5:70","nodeType":"EnumValue","src":"409:5:70"},{"id":12717,"name":"Expand","nameLocation":"439:6:70","nodeType":"EnumValue","src":"439:6:70"}],"name":"Rounding","nameLocation":"305:8:70","nodeType":"EnumDefinition","src":"300:169:70"},{"body":{"id":12731,"nodeType":"Block","src":"731:112:70","statements":[{"AST":{"nativeSrc":"766:71:70","nodeType":"YulBlock","src":"766:71:70","statements":[{"nativeSrc":"780:16:70","nodeType":"YulAssignment","src":"780:16:70","value":{"arguments":[{"name":"a","nativeSrc":"791:1:70","nodeType":"YulIdentifier","src":"791:1:70"},{"name":"b","nativeSrc":"794:1:70","nodeType":"YulIdentifier","src":"794:1:70"}],"functionName":{"name":"add","nativeSrc":"787:3:70","nodeType":"YulIdentifier","src":"787:3:70"},"nativeSrc":"787:9:70","nodeType":"YulFunctionCall","src":"787:9:70"},"variableNames":[{"name":"low","nativeSrc":"780:3:70","nodeType":"YulIdentifier","src":"780:3:70"}]},{"nativeSrc":"809:18:70","nodeType":"YulAssignment","src":"809:18:70","value":{"arguments":[{"name":"low","nativeSrc":"820:3:70","nodeType":"YulIdentifier","src":"820:3:70"},{"name":"a","nativeSrc":"825:1:70","nodeType":"YulIdentifier","src":"825:1:70"}],"functionName":{"name":"lt","nativeSrc":"817:2:70","nodeType":"YulIdentifier","src":"817:2:70"},"nativeSrc":"817:10:70","nodeType":"YulFunctionCall","src":"817:10:70"},"variableNames":[{"name":"high","nativeSrc":"809:4:70","nodeType":"YulIdentifier","src":"809:4:70"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12721,"isOffset":false,"isSlot":false,"src":"791:1:70","valueSize":1},{"declaration":12721,"isOffset":false,"isSlot":false,"src":"825:1:70","valueSize":1},{"declaration":12723,"isOffset":false,"isSlot":false,"src":"794:1:70","valueSize":1},{"declaration":12726,"isOffset":false,"isSlot":false,"src":"809:4:70","valueSize":1},{"declaration":12728,"isOffset":false,"isSlot":false,"src":"780:3:70","valueSize":1},{"declaration":12728,"isOffset":false,"isSlot":false,"src":"820:3:70","valueSize":1}],"flags":["memory-safe"],"id":12730,"nodeType":"InlineAssembly","src":"741:96:70"}]},"documentation":{"id":12719,"nodeType":"StructuredDocumentation","src":"475:163:70","text":" @dev Return the 512-bit addition of two uint256.\n The result is stored in two 256 variables such that sum = high * 2²⁵⁶ + low."},"id":12732,"implemented":true,"kind":"function","modifiers":[],"name":"add512","nameLocation":"652:6:70","nodeType":"FunctionDefinition","parameters":{"id":12724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12721,"mutability":"mutable","name":"a","nameLocation":"667:1:70","nodeType":"VariableDeclaration","scope":12732,"src":"659:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12720,"name":"uint256","nodeType":"ElementaryTypeName","src":"659:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12723,"mutability":"mutable","name":"b","nameLocation":"678:1:70","nodeType":"VariableDeclaration","scope":12732,"src":"670:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12722,"name":"uint256","nodeType":"ElementaryTypeName","src":"670:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"658:22:70"},"returnParameters":{"id":12729,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12726,"mutability":"mutable","name":"high","nameLocation":"712:4:70","nodeType":"VariableDeclaration","scope":12732,"src":"704:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12725,"name":"uint256","nodeType":"ElementaryTypeName","src":"704:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12728,"mutability":"mutable","name":"low","nameLocation":"726:3:70","nodeType":"VariableDeclaration","scope":12732,"src":"718:11:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12727,"name":"uint256","nodeType":"ElementaryTypeName","src":"718:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"703:27:70"},"scope":14327,"src":"643:200:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12745,"nodeType":"Block","src":"1115:462:70","statements":[{"AST":{"nativeSrc":"1437:134:70","nodeType":"YulBlock","src":"1437:134:70","statements":[{"nativeSrc":"1451:30:70","nodeType":"YulVariableDeclaration","src":"1451:30:70","value":{"arguments":[{"name":"a","nativeSrc":"1468:1:70","nodeType":"YulIdentifier","src":"1468:1:70"},{"name":"b","nativeSrc":"1471:1:70","nodeType":"YulIdentifier","src":"1471:1:70"},{"arguments":[{"kind":"number","nativeSrc":"1478:1:70","nodeType":"YulLiteral","src":"1478:1:70","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"1474:3:70","nodeType":"YulIdentifier","src":"1474:3:70"},"nativeSrc":"1474:6:70","nodeType":"YulFunctionCall","src":"1474:6:70"}],"functionName":{"name":"mulmod","nativeSrc":"1461:6:70","nodeType":"YulIdentifier","src":"1461:6:70"},"nativeSrc":"1461:20:70","nodeType":"YulFunctionCall","src":"1461:20:70"},"variables":[{"name":"mm","nativeSrc":"1455:2:70","nodeType":"YulTypedName","src":"1455:2:70","type":""}]},{"nativeSrc":"1494:16:70","nodeType":"YulAssignment","src":"1494:16:70","value":{"arguments":[{"name":"a","nativeSrc":"1505:1:70","nodeType":"YulIdentifier","src":"1505:1:70"},{"name":"b","nativeSrc":"1508:1:70","nodeType":"YulIdentifier","src":"1508:1:70"}],"functionName":{"name":"mul","nativeSrc":"1501:3:70","nodeType":"YulIdentifier","src":"1501:3:70"},"nativeSrc":"1501:9:70","nodeType":"YulFunctionCall","src":"1501:9:70"},"variableNames":[{"name":"low","nativeSrc":"1494:3:70","nodeType":"YulIdentifier","src":"1494:3:70"}]},{"nativeSrc":"1523:38:70","nodeType":"YulAssignment","src":"1523:38:70","value":{"arguments":[{"arguments":[{"name":"mm","nativeSrc":"1539:2:70","nodeType":"YulIdentifier","src":"1539:2:70"},{"name":"low","nativeSrc":"1543:3:70","nodeType":"YulIdentifier","src":"1543:3:70"}],"functionName":{"name":"sub","nativeSrc":"1535:3:70","nodeType":"YulIdentifier","src":"1535:3:70"},"nativeSrc":"1535:12:70","nodeType":"YulFunctionCall","src":"1535:12:70"},{"arguments":[{"name":"mm","nativeSrc":"1552:2:70","nodeType":"YulIdentifier","src":"1552:2:70"},{"name":"low","nativeSrc":"1556:3:70","nodeType":"YulIdentifier","src":"1556:3:70"}],"functionName":{"name":"lt","nativeSrc":"1549:2:70","nodeType":"YulIdentifier","src":"1549:2:70"},"nativeSrc":"1549:11:70","nodeType":"YulFunctionCall","src":"1549:11:70"}],"functionName":{"name":"sub","nativeSrc":"1531:3:70","nodeType":"YulIdentifier","src":"1531:3:70"},"nativeSrc":"1531:30:70","nodeType":"YulFunctionCall","src":"1531:30:70"},"variableNames":[{"name":"high","nativeSrc":"1523:4:70","nodeType":"YulIdentifier","src":"1523:4:70"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12735,"isOffset":false,"isSlot":false,"src":"1468:1:70","valueSize":1},{"declaration":12735,"isOffset":false,"isSlot":false,"src":"1505:1:70","valueSize":1},{"declaration":12737,"isOffset":false,"isSlot":false,"src":"1471:1:70","valueSize":1},{"declaration":12737,"isOffset":false,"isSlot":false,"src":"1508:1:70","valueSize":1},{"declaration":12740,"isOffset":false,"isSlot":false,"src":"1523:4:70","valueSize":1},{"declaration":12742,"isOffset":false,"isSlot":false,"src":"1494:3:70","valueSize":1},{"declaration":12742,"isOffset":false,"isSlot":false,"src":"1543:3:70","valueSize":1},{"declaration":12742,"isOffset":false,"isSlot":false,"src":"1556:3:70","valueSize":1}],"flags":["memory-safe"],"id":12744,"nodeType":"InlineAssembly","src":"1412:159:70"}]},"documentation":{"id":12733,"nodeType":"StructuredDocumentation","src":"849:173:70","text":" @dev Return the 512-bit multiplication of two uint256.\n The result is stored in two 256 variables such that product = high * 2²⁵⁶ + low."},"id":12746,"implemented":true,"kind":"function","modifiers":[],"name":"mul512","nameLocation":"1036:6:70","nodeType":"FunctionDefinition","parameters":{"id":12738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12735,"mutability":"mutable","name":"a","nameLocation":"1051:1:70","nodeType":"VariableDeclaration","scope":12746,"src":"1043:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12734,"name":"uint256","nodeType":"ElementaryTypeName","src":"1043:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12737,"mutability":"mutable","name":"b","nameLocation":"1062:1:70","nodeType":"VariableDeclaration","scope":12746,"src":"1054:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12736,"name":"uint256","nodeType":"ElementaryTypeName","src":"1054:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1042:22:70"},"returnParameters":{"id":12743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12740,"mutability":"mutable","name":"high","nameLocation":"1096:4:70","nodeType":"VariableDeclaration","scope":12746,"src":"1088:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12739,"name":"uint256","nodeType":"ElementaryTypeName","src":"1088:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12742,"mutability":"mutable","name":"low","nameLocation":"1110:3:70","nodeType":"VariableDeclaration","scope":12746,"src":"1102:11:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12741,"name":"uint256","nodeType":"ElementaryTypeName","src":"1102:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1087:27:70"},"scope":14327,"src":"1027:550:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12780,"nodeType":"Block","src":"1784:149:70","statements":[{"id":12779,"nodeType":"UncheckedBlock","src":"1794:133:70","statements":[{"assignments":[12759],"declarations":[{"constant":false,"id":12759,"mutability":"mutable","name":"c","nameLocation":"1826:1:70","nodeType":"VariableDeclaration","scope":12779,"src":"1818:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12758,"name":"uint256","nodeType":"ElementaryTypeName","src":"1818:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12763,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12760,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12749,"src":"1830:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":12761,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12751,"src":"1834:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1830:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1818:17:70"},{"expression":{"id":12768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12764,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12754,"src":"1849:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12765,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12759,"src":"1859:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":12766,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12749,"src":"1864:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1859:6:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1849:16:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12769,"nodeType":"ExpressionStatement","src":"1849:16:70"},{"expression":{"id":12777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12770,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12756,"src":"1879:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12771,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12759,"src":"1888:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":12774,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12754,"src":"1908:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":12772,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"1892:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":12773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1901:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"1892:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":12775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1892:24:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1888:28:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1879:37:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12778,"nodeType":"ExpressionStatement","src":"1879:37:70"}]}]},"documentation":{"id":12747,"nodeType":"StructuredDocumentation","src":"1583:105:70","text":" @dev Returns the addition of two unsigned integers, with a success flag (no overflow)."},"id":12781,"implemented":true,"kind":"function","modifiers":[],"name":"tryAdd","nameLocation":"1702:6:70","nodeType":"FunctionDefinition","parameters":{"id":12752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12749,"mutability":"mutable","name":"a","nameLocation":"1717:1:70","nodeType":"VariableDeclaration","scope":12781,"src":"1709:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12748,"name":"uint256","nodeType":"ElementaryTypeName","src":"1709:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12751,"mutability":"mutable","name":"b","nameLocation":"1728:1:70","nodeType":"VariableDeclaration","scope":12781,"src":"1720:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12750,"name":"uint256","nodeType":"ElementaryTypeName","src":"1720:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1708:22:70"},"returnParameters":{"id":12757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12754,"mutability":"mutable","name":"success","nameLocation":"1759:7:70","nodeType":"VariableDeclaration","scope":12781,"src":"1754:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12753,"name":"bool","nodeType":"ElementaryTypeName","src":"1754:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12756,"mutability":"mutable","name":"result","nameLocation":"1776:6:70","nodeType":"VariableDeclaration","scope":12781,"src":"1768:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12755,"name":"uint256","nodeType":"ElementaryTypeName","src":"1768:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1753:30:70"},"scope":14327,"src":"1693:240:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12815,"nodeType":"Block","src":"2143:149:70","statements":[{"id":12814,"nodeType":"UncheckedBlock","src":"2153:133:70","statements":[{"assignments":[12794],"declarations":[{"constant":false,"id":12794,"mutability":"mutable","name":"c","nameLocation":"2185:1:70","nodeType":"VariableDeclaration","scope":12814,"src":"2177:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12793,"name":"uint256","nodeType":"ElementaryTypeName","src":"2177:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12798,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12795,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12784,"src":"2189:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":12796,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12786,"src":"2193:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2189:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2177:17:70"},{"expression":{"id":12803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12799,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12789,"src":"2208:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12800,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12794,"src":"2218:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":12801,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12784,"src":"2223:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2218:6:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2208:16:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12804,"nodeType":"ExpressionStatement","src":"2208:16:70"},{"expression":{"id":12812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12805,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12791,"src":"2238:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12806,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12794,"src":"2247:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":12809,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12789,"src":"2267:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":12807,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"2251:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":12808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2260:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"2251:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":12810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2251:24:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2247:28:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2238:37:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12813,"nodeType":"ExpressionStatement","src":"2238:37:70"}]}]},"documentation":{"id":12782,"nodeType":"StructuredDocumentation","src":"1939:108:70","text":" @dev Returns the subtraction of two unsigned integers, with a success flag (no overflow)."},"id":12816,"implemented":true,"kind":"function","modifiers":[],"name":"trySub","nameLocation":"2061:6:70","nodeType":"FunctionDefinition","parameters":{"id":12787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12784,"mutability":"mutable","name":"a","nameLocation":"2076:1:70","nodeType":"VariableDeclaration","scope":12816,"src":"2068:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12783,"name":"uint256","nodeType":"ElementaryTypeName","src":"2068:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12786,"mutability":"mutable","name":"b","nameLocation":"2087:1:70","nodeType":"VariableDeclaration","scope":12816,"src":"2079:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12785,"name":"uint256","nodeType":"ElementaryTypeName","src":"2079:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2067:22:70"},"returnParameters":{"id":12792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12789,"mutability":"mutable","name":"success","nameLocation":"2118:7:70","nodeType":"VariableDeclaration","scope":12816,"src":"2113:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12788,"name":"bool","nodeType":"ElementaryTypeName","src":"2113:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12791,"mutability":"mutable","name":"result","nameLocation":"2135:6:70","nodeType":"VariableDeclaration","scope":12816,"src":"2127:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12790,"name":"uint256","nodeType":"ElementaryTypeName","src":"2127:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2112:30:70"},"scope":14327,"src":"2052:240:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12845,"nodeType":"Block","src":"2505:391:70","statements":[{"id":12844,"nodeType":"UncheckedBlock","src":"2515:375:70","statements":[{"assignments":[12829],"declarations":[{"constant":false,"id":12829,"mutability":"mutable","name":"c","nameLocation":"2547:1:70","nodeType":"VariableDeclaration","scope":12844,"src":"2539:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12828,"name":"uint256","nodeType":"ElementaryTypeName","src":"2539:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12833,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12830,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12819,"src":"2551:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":12831,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12821,"src":"2555:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2551:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2539:17:70"},{"AST":{"nativeSrc":"2595:188:70","nodeType":"YulBlock","src":"2595:188:70","statements":[{"nativeSrc":"2727:42:70","nodeType":"YulAssignment","src":"2727:42:70","value":{"arguments":[{"arguments":[{"arguments":[{"name":"c","nativeSrc":"2748:1:70","nodeType":"YulIdentifier","src":"2748:1:70"},{"name":"a","nativeSrc":"2751:1:70","nodeType":"YulIdentifier","src":"2751:1:70"}],"functionName":{"name":"div","nativeSrc":"2744:3:70","nodeType":"YulIdentifier","src":"2744:3:70"},"nativeSrc":"2744:9:70","nodeType":"YulFunctionCall","src":"2744:9:70"},{"name":"b","nativeSrc":"2755:1:70","nodeType":"YulIdentifier","src":"2755:1:70"}],"functionName":{"name":"eq","nativeSrc":"2741:2:70","nodeType":"YulIdentifier","src":"2741:2:70"},"nativeSrc":"2741:16:70","nodeType":"YulFunctionCall","src":"2741:16:70"},{"arguments":[{"name":"a","nativeSrc":"2766:1:70","nodeType":"YulIdentifier","src":"2766:1:70"}],"functionName":{"name":"iszero","nativeSrc":"2759:6:70","nodeType":"YulIdentifier","src":"2759:6:70"},"nativeSrc":"2759:9:70","nodeType":"YulFunctionCall","src":"2759:9:70"}],"functionName":{"name":"or","nativeSrc":"2738:2:70","nodeType":"YulIdentifier","src":"2738:2:70"},"nativeSrc":"2738:31:70","nodeType":"YulFunctionCall","src":"2738:31:70"},"variableNames":[{"name":"success","nativeSrc":"2727:7:70","nodeType":"YulIdentifier","src":"2727:7:70"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12819,"isOffset":false,"isSlot":false,"src":"2751:1:70","valueSize":1},{"declaration":12819,"isOffset":false,"isSlot":false,"src":"2766:1:70","valueSize":1},{"declaration":12821,"isOffset":false,"isSlot":false,"src":"2755:1:70","valueSize":1},{"declaration":12829,"isOffset":false,"isSlot":false,"src":"2748:1:70","valueSize":1},{"declaration":12824,"isOffset":false,"isSlot":false,"src":"2727:7:70","valueSize":1}],"flags":["memory-safe"],"id":12834,"nodeType":"InlineAssembly","src":"2570:213:70"},{"expression":{"id":12842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12835,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12826,"src":"2842:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12836,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12829,"src":"2851:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":12839,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12824,"src":"2871:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":12837,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"2855:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":12838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2864:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"2855:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":12840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2855:24:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2851:28:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2842:37:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12843,"nodeType":"ExpressionStatement","src":"2842:37:70"}]}]},"documentation":{"id":12817,"nodeType":"StructuredDocumentation","src":"2298:111:70","text":" @dev Returns the multiplication of two unsigned integers, with a success flag (no overflow)."},"id":12846,"implemented":true,"kind":"function","modifiers":[],"name":"tryMul","nameLocation":"2423:6:70","nodeType":"FunctionDefinition","parameters":{"id":12822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12819,"mutability":"mutable","name":"a","nameLocation":"2438:1:70","nodeType":"VariableDeclaration","scope":12846,"src":"2430:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12818,"name":"uint256","nodeType":"ElementaryTypeName","src":"2430:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12821,"mutability":"mutable","name":"b","nameLocation":"2449:1:70","nodeType":"VariableDeclaration","scope":12846,"src":"2441:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12820,"name":"uint256","nodeType":"ElementaryTypeName","src":"2441:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2429:22:70"},"returnParameters":{"id":12827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12824,"mutability":"mutable","name":"success","nameLocation":"2480:7:70","nodeType":"VariableDeclaration","scope":12846,"src":"2475:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12823,"name":"bool","nodeType":"ElementaryTypeName","src":"2475:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12826,"mutability":"mutable","name":"result","nameLocation":"2497:6:70","nodeType":"VariableDeclaration","scope":12846,"src":"2489:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12825,"name":"uint256","nodeType":"ElementaryTypeName","src":"2489:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2474:30:70"},"scope":14327,"src":"2414:482:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12866,"nodeType":"Block","src":"3111:231:70","statements":[{"id":12865,"nodeType":"UncheckedBlock","src":"3121:215:70","statements":[{"expression":{"id":12862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12858,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12854,"src":"3145:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12859,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12851,"src":"3155:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3159:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3155:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3145:15:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12863,"nodeType":"ExpressionStatement","src":"3145:15:70"},{"AST":{"nativeSrc":"3199:127:70","nodeType":"YulBlock","src":"3199:127:70","statements":[{"nativeSrc":"3293:19:70","nodeType":"YulAssignment","src":"3293:19:70","value":{"arguments":[{"name":"a","nativeSrc":"3307:1:70","nodeType":"YulIdentifier","src":"3307:1:70"},{"name":"b","nativeSrc":"3310:1:70","nodeType":"YulIdentifier","src":"3310:1:70"}],"functionName":{"name":"div","nativeSrc":"3303:3:70","nodeType":"YulIdentifier","src":"3303:3:70"},"nativeSrc":"3303:9:70","nodeType":"YulFunctionCall","src":"3303:9:70"},"variableNames":[{"name":"result","nativeSrc":"3293:6:70","nodeType":"YulIdentifier","src":"3293:6:70"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12849,"isOffset":false,"isSlot":false,"src":"3307:1:70","valueSize":1},{"declaration":12851,"isOffset":false,"isSlot":false,"src":"3310:1:70","valueSize":1},{"declaration":12856,"isOffset":false,"isSlot":false,"src":"3293:6:70","valueSize":1}],"flags":["memory-safe"],"id":12864,"nodeType":"InlineAssembly","src":"3174:152:70"}]}]},"documentation":{"id":12847,"nodeType":"StructuredDocumentation","src":"2902:113:70","text":" @dev Returns the division of two unsigned integers, with a success flag (no division by zero)."},"id":12867,"implemented":true,"kind":"function","modifiers":[],"name":"tryDiv","nameLocation":"3029:6:70","nodeType":"FunctionDefinition","parameters":{"id":12852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12849,"mutability":"mutable","name":"a","nameLocation":"3044:1:70","nodeType":"VariableDeclaration","scope":12867,"src":"3036:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12848,"name":"uint256","nodeType":"ElementaryTypeName","src":"3036:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12851,"mutability":"mutable","name":"b","nameLocation":"3055:1:70","nodeType":"VariableDeclaration","scope":12867,"src":"3047:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12850,"name":"uint256","nodeType":"ElementaryTypeName","src":"3047:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3035:22:70"},"returnParameters":{"id":12857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12854,"mutability":"mutable","name":"success","nameLocation":"3086:7:70","nodeType":"VariableDeclaration","scope":12867,"src":"3081:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12853,"name":"bool","nodeType":"ElementaryTypeName","src":"3081:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12856,"mutability":"mutable","name":"result","nameLocation":"3103:6:70","nodeType":"VariableDeclaration","scope":12867,"src":"3095:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12855,"name":"uint256","nodeType":"ElementaryTypeName","src":"3095:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3080:30:70"},"scope":14327,"src":"3020:322:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12887,"nodeType":"Block","src":"3567:231:70","statements":[{"id":12886,"nodeType":"UncheckedBlock","src":"3577:215:70","statements":[{"expression":{"id":12883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12879,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12875,"src":"3601:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12880,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12872,"src":"3611:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3615:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3611:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3601:15:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12884,"nodeType":"ExpressionStatement","src":"3601:15:70"},{"AST":{"nativeSrc":"3655:127:70","nodeType":"YulBlock","src":"3655:127:70","statements":[{"nativeSrc":"3749:19:70","nodeType":"YulAssignment","src":"3749:19:70","value":{"arguments":[{"name":"a","nativeSrc":"3763:1:70","nodeType":"YulIdentifier","src":"3763:1:70"},{"name":"b","nativeSrc":"3766:1:70","nodeType":"YulIdentifier","src":"3766:1:70"}],"functionName":{"name":"mod","nativeSrc":"3759:3:70","nodeType":"YulIdentifier","src":"3759:3:70"},"nativeSrc":"3759:9:70","nodeType":"YulFunctionCall","src":"3759:9:70"},"variableNames":[{"name":"result","nativeSrc":"3749:6:70","nodeType":"YulIdentifier","src":"3749:6:70"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12870,"isOffset":false,"isSlot":false,"src":"3763:1:70","valueSize":1},{"declaration":12872,"isOffset":false,"isSlot":false,"src":"3766:1:70","valueSize":1},{"declaration":12877,"isOffset":false,"isSlot":false,"src":"3749:6:70","valueSize":1}],"flags":["memory-safe"],"id":12885,"nodeType":"InlineAssembly","src":"3630:152:70"}]}]},"documentation":{"id":12868,"nodeType":"StructuredDocumentation","src":"3348:123:70","text":" @dev Returns the remainder of dividing two unsigned integers, with a success flag (no division by zero)."},"id":12888,"implemented":true,"kind":"function","modifiers":[],"name":"tryMod","nameLocation":"3485:6:70","nodeType":"FunctionDefinition","parameters":{"id":12873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12870,"mutability":"mutable","name":"a","nameLocation":"3500:1:70","nodeType":"VariableDeclaration","scope":12888,"src":"3492:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12869,"name":"uint256","nodeType":"ElementaryTypeName","src":"3492:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12872,"mutability":"mutable","name":"b","nameLocation":"3511:1:70","nodeType":"VariableDeclaration","scope":12888,"src":"3503:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12871,"name":"uint256","nodeType":"ElementaryTypeName","src":"3503:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3491:22:70"},"returnParameters":{"id":12878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12875,"mutability":"mutable","name":"success","nameLocation":"3542:7:70","nodeType":"VariableDeclaration","scope":12888,"src":"3537:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12874,"name":"bool","nodeType":"ElementaryTypeName","src":"3537:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12877,"mutability":"mutable","name":"result","nameLocation":"3559:6:70","nodeType":"VariableDeclaration","scope":12888,"src":"3551:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12876,"name":"uint256","nodeType":"ElementaryTypeName","src":"3551:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3536:30:70"},"scope":14327,"src":"3476:322:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12917,"nodeType":"Block","src":"3989:122:70","statements":[{"assignments":[12899,12901],"declarations":[{"constant":false,"id":12899,"mutability":"mutable","name":"success","nameLocation":"4005:7:70","nodeType":"VariableDeclaration","scope":12917,"src":"4000:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12898,"name":"bool","nodeType":"ElementaryTypeName","src":"4000:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12901,"mutability":"mutable","name":"result","nameLocation":"4022:6:70","nodeType":"VariableDeclaration","scope":12917,"src":"4014:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12900,"name":"uint256","nodeType":"ElementaryTypeName","src":"4014:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12906,"initialValue":{"arguments":[{"id":12903,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12891,"src":"4039:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12904,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12893,"src":"4042:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12902,"name":"tryAdd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12781,"src":"4032:6:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (bool,uint256)"}},"id":12905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4032:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"3999:45:70"},{"expression":{"arguments":[{"id":12908,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12899,"src":"4069:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":12909,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12901,"src":"4078:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"arguments":[{"id":12912,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4091:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12911,"name":"uint256","nodeType":"ElementaryTypeName","src":"4091:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":12910,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4086:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4086:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":12914,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4100:3:70","memberName":"max","nodeType":"MemberAccess","src":"4086:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12907,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12995,"src":"4061:7:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":12915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4061:43:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12897,"id":12916,"nodeType":"Return","src":"4054:50:70"}]},"documentation":{"id":12889,"nodeType":"StructuredDocumentation","src":"3804:103:70","text":" @dev Unsigned saturating addition, bounds to `2²⁵⁶ - 1` instead of overflowing."},"id":12918,"implemented":true,"kind":"function","modifiers":[],"name":"saturatingAdd","nameLocation":"3921:13:70","nodeType":"FunctionDefinition","parameters":{"id":12894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12891,"mutability":"mutable","name":"a","nameLocation":"3943:1:70","nodeType":"VariableDeclaration","scope":12918,"src":"3935:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12890,"name":"uint256","nodeType":"ElementaryTypeName","src":"3935:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12893,"mutability":"mutable","name":"b","nameLocation":"3954:1:70","nodeType":"VariableDeclaration","scope":12918,"src":"3946:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12892,"name":"uint256","nodeType":"ElementaryTypeName","src":"3946:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3934:22:70"},"returnParameters":{"id":12897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12896,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12918,"src":"3980:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12895,"name":"uint256","nodeType":"ElementaryTypeName","src":"3980:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3979:9:70"},"scope":14327,"src":"3912:199:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12937,"nodeType":"Block","src":"4294:73:70","statements":[{"assignments":[null,12929],"declarations":[null,{"constant":false,"id":12929,"mutability":"mutable","name":"result","nameLocation":"4315:6:70","nodeType":"VariableDeclaration","scope":12937,"src":"4307:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12928,"name":"uint256","nodeType":"ElementaryTypeName","src":"4307:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12934,"initialValue":{"arguments":[{"id":12931,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12921,"src":"4332:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12932,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12923,"src":"4335:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12930,"name":"trySub","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12816,"src":"4325:6:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (bool,uint256)"}},"id":12933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4325:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4304:33:70"},{"expression":{"id":12935,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12929,"src":"4354:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12927,"id":12936,"nodeType":"Return","src":"4347:13:70"}]},"documentation":{"id":12919,"nodeType":"StructuredDocumentation","src":"4117:95:70","text":" @dev Unsigned saturating subtraction, bounds to zero instead of overflowing."},"id":12938,"implemented":true,"kind":"function","modifiers":[],"name":"saturatingSub","nameLocation":"4226:13:70","nodeType":"FunctionDefinition","parameters":{"id":12924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12921,"mutability":"mutable","name":"a","nameLocation":"4248:1:70","nodeType":"VariableDeclaration","scope":12938,"src":"4240:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12920,"name":"uint256","nodeType":"ElementaryTypeName","src":"4240:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12923,"mutability":"mutable","name":"b","nameLocation":"4259:1:70","nodeType":"VariableDeclaration","scope":12938,"src":"4251:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12922,"name":"uint256","nodeType":"ElementaryTypeName","src":"4251:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4239:22:70"},"returnParameters":{"id":12927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12926,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12938,"src":"4285:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12925,"name":"uint256","nodeType":"ElementaryTypeName","src":"4285:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4284:9:70"},"scope":14327,"src":"4217:150:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12967,"nodeType":"Block","src":"4564:122:70","statements":[{"assignments":[12949,12951],"declarations":[{"constant":false,"id":12949,"mutability":"mutable","name":"success","nameLocation":"4580:7:70","nodeType":"VariableDeclaration","scope":12967,"src":"4575:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12948,"name":"bool","nodeType":"ElementaryTypeName","src":"4575:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12951,"mutability":"mutable","name":"result","nameLocation":"4597:6:70","nodeType":"VariableDeclaration","scope":12967,"src":"4589:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12950,"name":"uint256","nodeType":"ElementaryTypeName","src":"4589:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12956,"initialValue":{"arguments":[{"id":12953,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12941,"src":"4614:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12954,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12943,"src":"4617:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12952,"name":"tryMul","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12846,"src":"4607:6:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (bool,uint256)"}},"id":12955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4607:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4574:45:70"},{"expression":{"arguments":[{"id":12958,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12949,"src":"4644:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":12959,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12951,"src":"4653:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"arguments":[{"id":12962,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4666:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12961,"name":"uint256","nodeType":"ElementaryTypeName","src":"4666:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":12960,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4661:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4661:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":12964,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4675:3:70","memberName":"max","nodeType":"MemberAccess","src":"4661:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12957,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12995,"src":"4636:7:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":12965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4636:43:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12947,"id":12966,"nodeType":"Return","src":"4629:50:70"}]},"documentation":{"id":12939,"nodeType":"StructuredDocumentation","src":"4373:109:70","text":" @dev Unsigned saturating multiplication, bounds to `2²⁵⁶ - 1` instead of overflowing."},"id":12968,"implemented":true,"kind":"function","modifiers":[],"name":"saturatingMul","nameLocation":"4496:13:70","nodeType":"FunctionDefinition","parameters":{"id":12944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12941,"mutability":"mutable","name":"a","nameLocation":"4518:1:70","nodeType":"VariableDeclaration","scope":12968,"src":"4510:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12940,"name":"uint256","nodeType":"ElementaryTypeName","src":"4510:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12943,"mutability":"mutable","name":"b","nameLocation":"4529:1:70","nodeType":"VariableDeclaration","scope":12968,"src":"4521:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12942,"name":"uint256","nodeType":"ElementaryTypeName","src":"4521:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4509:22:70"},"returnParameters":{"id":12947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12946,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12968,"src":"4555:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12945,"name":"uint256","nodeType":"ElementaryTypeName","src":"4555:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4554:9:70"},"scope":14327,"src":"4487:199:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12994,"nodeType":"Block","src":"5158:207:70","statements":[{"id":12993,"nodeType":"UncheckedBlock","src":"5168:191:70","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12980,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12975,"src":"5306:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12981,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12973,"src":"5312:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":12982,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12975,"src":"5316:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5312:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12984,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5311:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":12987,"name":"condition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12971,"src":"5337:9:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":12985,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"5321:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":12986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5330:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"5321:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":12988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5321:26:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5311:36:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12990,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5310:38:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5306:42:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12979,"id":12992,"nodeType":"Return","src":"5299:49:70"}]}]},"documentation":{"id":12969,"nodeType":"StructuredDocumentation","src":"4692:374:70","text":" @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n one branch when needed, making this function more expensive."},"id":12995,"implemented":true,"kind":"function","modifiers":[],"name":"ternary","nameLocation":"5080:7:70","nodeType":"FunctionDefinition","parameters":{"id":12976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12971,"mutability":"mutable","name":"condition","nameLocation":"5093:9:70","nodeType":"VariableDeclaration","scope":12995,"src":"5088:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12970,"name":"bool","nodeType":"ElementaryTypeName","src":"5088:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12973,"mutability":"mutable","name":"a","nameLocation":"5112:1:70","nodeType":"VariableDeclaration","scope":12995,"src":"5104:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12972,"name":"uint256","nodeType":"ElementaryTypeName","src":"5104:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12975,"mutability":"mutable","name":"b","nameLocation":"5123:1:70","nodeType":"VariableDeclaration","scope":12995,"src":"5115:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12974,"name":"uint256","nodeType":"ElementaryTypeName","src":"5115:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5087:38:70"},"returnParameters":{"id":12979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12978,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12995,"src":"5149:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12977,"name":"uint256","nodeType":"ElementaryTypeName","src":"5149:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5148:9:70"},"scope":14327,"src":"5071:294:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13013,"nodeType":"Block","src":"5502:44:70","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13006,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12998,"src":"5527:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":13007,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13000,"src":"5531:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5527:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":13009,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12998,"src":"5534:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13010,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13000,"src":"5537:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13005,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12995,"src":"5519:7:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":13011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5519:20:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13004,"id":13012,"nodeType":"Return","src":"5512:27:70"}]},"documentation":{"id":12996,"nodeType":"StructuredDocumentation","src":"5371:59:70","text":" @dev Returns the largest of two numbers."},"id":13014,"implemented":true,"kind":"function","modifiers":[],"name":"max","nameLocation":"5444:3:70","nodeType":"FunctionDefinition","parameters":{"id":13001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12998,"mutability":"mutable","name":"a","nameLocation":"5456:1:70","nodeType":"VariableDeclaration","scope":13014,"src":"5448:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12997,"name":"uint256","nodeType":"ElementaryTypeName","src":"5448:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13000,"mutability":"mutable","name":"b","nameLocation":"5467:1:70","nodeType":"VariableDeclaration","scope":13014,"src":"5459:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12999,"name":"uint256","nodeType":"ElementaryTypeName","src":"5459:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5447:22:70"},"returnParameters":{"id":13004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13003,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13014,"src":"5493:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13002,"name":"uint256","nodeType":"ElementaryTypeName","src":"5493:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5492:9:70"},"scope":14327,"src":"5435:111:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13032,"nodeType":"Block","src":"5684:44:70","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13025,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13017,"src":"5709:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":13026,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13019,"src":"5713:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5709:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":13028,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13017,"src":"5716:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13029,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13019,"src":"5719:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13024,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12995,"src":"5701:7:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":13030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5701:20:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13023,"id":13031,"nodeType":"Return","src":"5694:27:70"}]},"documentation":{"id":13015,"nodeType":"StructuredDocumentation","src":"5552:60:70","text":" @dev Returns the smallest of two numbers."},"id":13033,"implemented":true,"kind":"function","modifiers":[],"name":"min","nameLocation":"5626:3:70","nodeType":"FunctionDefinition","parameters":{"id":13020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13017,"mutability":"mutable","name":"a","nameLocation":"5638:1:70","nodeType":"VariableDeclaration","scope":13033,"src":"5630:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13016,"name":"uint256","nodeType":"ElementaryTypeName","src":"5630:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13019,"mutability":"mutable","name":"b","nameLocation":"5649:1:70","nodeType":"VariableDeclaration","scope":13033,"src":"5641:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13018,"name":"uint256","nodeType":"ElementaryTypeName","src":"5641:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5629:22:70"},"returnParameters":{"id":13023,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13022,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13033,"src":"5675:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13021,"name":"uint256","nodeType":"ElementaryTypeName","src":"5675:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5674:9:70"},"scope":14327,"src":"5617:111:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13055,"nodeType":"Block","src":"5912:82:70","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13043,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13036,"src":"5967:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13044,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13038,"src":"5971:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5967:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13046,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5966:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13047,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13036,"src":"5977:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":13048,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13038,"src":"5981:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5977:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13050,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5976:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":13051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5986:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"5976:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5966:21:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13042,"id":13054,"nodeType":"Return","src":"5959:28:70"}]},"documentation":{"id":13034,"nodeType":"StructuredDocumentation","src":"5734:102:70","text":" @dev Returns the average of two numbers. The result is rounded towards\n zero."},"id":13056,"implemented":true,"kind":"function","modifiers":[],"name":"average","nameLocation":"5850:7:70","nodeType":"FunctionDefinition","parameters":{"id":13039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13036,"mutability":"mutable","name":"a","nameLocation":"5866:1:70","nodeType":"VariableDeclaration","scope":13056,"src":"5858:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13035,"name":"uint256","nodeType":"ElementaryTypeName","src":"5858:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13038,"mutability":"mutable","name":"b","nameLocation":"5877:1:70","nodeType":"VariableDeclaration","scope":13056,"src":"5869:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13037,"name":"uint256","nodeType":"ElementaryTypeName","src":"5869:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5857:22:70"},"returnParameters":{"id":13042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13041,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13056,"src":"5903:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13040,"name":"uint256","nodeType":"ElementaryTypeName","src":"5903:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5902:9:70"},"scope":14327,"src":"5841:153:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13096,"nodeType":"Block","src":"6286:633:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13066,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13061,"src":"6300:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6305:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6300:6:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13077,"nodeType":"IfStatement","src":"6296:150:70","trueBody":{"id":13076,"nodeType":"Block","src":"6308:138:70","statements":[{"expression":{"arguments":[{"expression":{"id":13072,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"6412:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13073,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6418:16:70","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":12407,"src":"6412:22:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13069,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"6400:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6406:5:70","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":12439,"src":"6400:11:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":13074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6400:35:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13075,"nodeType":"ExpressionStatement","src":"6400:35:70"}]}},{"id":13095,"nodeType":"UncheckedBlock","src":"6829:84:70","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13080,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13059,"src":"6876:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":13081,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6880:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6876:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13078,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"6860:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6869:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"6860:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6860:22:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13084,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13059,"src":"6887:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":13085,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6891:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6887:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13087,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6886:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13088,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13061,"src":"6896:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6886:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":13090,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6900:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6886:15:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13092,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6885:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6860:42:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13065,"id":13094,"nodeType":"Return","src":"6853:49:70"}]}]},"documentation":{"id":13057,"nodeType":"StructuredDocumentation","src":"6000:210:70","text":" @dev Returns the ceiling of the division of two numbers.\n This differs from standard division with `/` in that it rounds towards infinity instead\n of rounding towards zero."},"id":13097,"implemented":true,"kind":"function","modifiers":[],"name":"ceilDiv","nameLocation":"6224:7:70","nodeType":"FunctionDefinition","parameters":{"id":13062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13059,"mutability":"mutable","name":"a","nameLocation":"6240:1:70","nodeType":"VariableDeclaration","scope":13097,"src":"6232:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13058,"name":"uint256","nodeType":"ElementaryTypeName","src":"6232:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13061,"mutability":"mutable","name":"b","nameLocation":"6251:1:70","nodeType":"VariableDeclaration","scope":13097,"src":"6243:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13060,"name":"uint256","nodeType":"ElementaryTypeName","src":"6243:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6231:22:70"},"returnParameters":{"id":13065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13064,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13097,"src":"6277:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13063,"name":"uint256","nodeType":"ElementaryTypeName","src":"6277:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6276:9:70"},"scope":14327,"src":"6215:704:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13232,"nodeType":"Block","src":"7340:3585:70","statements":[{"id":13231,"nodeType":"UncheckedBlock","src":"7350:3569:70","statements":[{"assignments":[13110,13112],"declarations":[{"constant":false,"id":13110,"mutability":"mutable","name":"high","nameLocation":"7383:4:70","nodeType":"VariableDeclaration","scope":13231,"src":"7375:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13109,"name":"uint256","nodeType":"ElementaryTypeName","src":"7375:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13112,"mutability":"mutable","name":"low","nameLocation":"7397:3:70","nodeType":"VariableDeclaration","scope":13231,"src":"7389:11:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13111,"name":"uint256","nodeType":"ElementaryTypeName","src":"7389:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13117,"initialValue":{"arguments":[{"id":13114,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13100,"src":"7411:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13115,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13102,"src":"7414:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13113,"name":"mul512","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12746,"src":"7404:6:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256,uint256)"}},"id":13116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7404:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"7374:42:70"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13118,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13110,"src":"7498:4:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13119,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7506:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7498:9:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13126,"nodeType":"IfStatement","src":"7494:365:70","trueBody":{"id":13125,"nodeType":"Block","src":"7509:350:70","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13121,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13112,"src":"7827:3:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13122,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"7833:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7827:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13108,"id":13124,"nodeType":"Return","src":"7820:24:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13127,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"7969:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":13128,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13110,"src":"7984:4:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7969:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13145,"nodeType":"IfStatement","src":"7965:142:70","trueBody":{"id":13144,"nodeType":"Block","src":"7990:117:70","statements":[{"expression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13134,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"8028:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8043:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8028:16:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":13137,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"8046:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13138,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8052:16:70","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":12407,"src":"8046:22:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13139,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"8070:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13140,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8076:14:70","memberName":"UNDER_OVERFLOW","nodeType":"MemberAccess","referencedDeclaration":12403,"src":"8070:20:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13133,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12995,"src":"8020:7:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":13141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8020:71:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13130,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"8008:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8014:5:70","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":12439,"src":"8008:11:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":13142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8008:84:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13143,"nodeType":"ExpressionStatement","src":"8008:84:70"}]}},{"assignments":[13147],"declarations":[{"constant":false,"id":13147,"mutability":"mutable","name":"remainder","nameLocation":"8367:9:70","nodeType":"VariableDeclaration","scope":13231,"src":"8359:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13146,"name":"uint256","nodeType":"ElementaryTypeName","src":"8359:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13148,"nodeType":"VariableDeclarationStatement","src":"8359:17:70"},{"AST":{"nativeSrc":"8415:283:70","nodeType":"YulBlock","src":"8415:283:70","statements":[{"nativeSrc":"8484:38:70","nodeType":"YulAssignment","src":"8484:38:70","value":{"arguments":[{"name":"x","nativeSrc":"8504:1:70","nodeType":"YulIdentifier","src":"8504:1:70"},{"name":"y","nativeSrc":"8507:1:70","nodeType":"YulIdentifier","src":"8507:1:70"},{"name":"denominator","nativeSrc":"8510:11:70","nodeType":"YulIdentifier","src":"8510:11:70"}],"functionName":{"name":"mulmod","nativeSrc":"8497:6:70","nodeType":"YulIdentifier","src":"8497:6:70"},"nativeSrc":"8497:25:70","nodeType":"YulFunctionCall","src":"8497:25:70"},"variableNames":[{"name":"remainder","nativeSrc":"8484:9:70","nodeType":"YulIdentifier","src":"8484:9:70"}]},{"nativeSrc":"8604:37:70","nodeType":"YulAssignment","src":"8604:37:70","value":{"arguments":[{"name":"high","nativeSrc":"8616:4:70","nodeType":"YulIdentifier","src":"8616:4:70"},{"arguments":[{"name":"remainder","nativeSrc":"8625:9:70","nodeType":"YulIdentifier","src":"8625:9:70"},{"name":"low","nativeSrc":"8636:3:70","nodeType":"YulIdentifier","src":"8636:3:70"}],"functionName":{"name":"gt","nativeSrc":"8622:2:70","nodeType":"YulIdentifier","src":"8622:2:70"},"nativeSrc":"8622:18:70","nodeType":"YulFunctionCall","src":"8622:18:70"}],"functionName":{"name":"sub","nativeSrc":"8612:3:70","nodeType":"YulIdentifier","src":"8612:3:70"},"nativeSrc":"8612:29:70","nodeType":"YulFunctionCall","src":"8612:29:70"},"variableNames":[{"name":"high","nativeSrc":"8604:4:70","nodeType":"YulIdentifier","src":"8604:4:70"}]},{"nativeSrc":"8658:26:70","nodeType":"YulAssignment","src":"8658:26:70","value":{"arguments":[{"name":"low","nativeSrc":"8669:3:70","nodeType":"YulIdentifier","src":"8669:3:70"},{"name":"remainder","nativeSrc":"8674:9:70","nodeType":"YulIdentifier","src":"8674:9:70"}],"functionName":{"name":"sub","nativeSrc":"8665:3:70","nodeType":"YulIdentifier","src":"8665:3:70"},"nativeSrc":"8665:19:70","nodeType":"YulFunctionCall","src":"8665:19:70"},"variableNames":[{"name":"low","nativeSrc":"8658:3:70","nodeType":"YulIdentifier","src":"8658:3:70"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":13104,"isOffset":false,"isSlot":false,"src":"8510:11:70","valueSize":1},{"declaration":13110,"isOffset":false,"isSlot":false,"src":"8604:4:70","valueSize":1},{"declaration":13110,"isOffset":false,"isSlot":false,"src":"8616:4:70","valueSize":1},{"declaration":13112,"isOffset":false,"isSlot":false,"src":"8636:3:70","valueSize":1},{"declaration":13112,"isOffset":false,"isSlot":false,"src":"8658:3:70","valueSize":1},{"declaration":13112,"isOffset":false,"isSlot":false,"src":"8669:3:70","valueSize":1},{"declaration":13147,"isOffset":false,"isSlot":false,"src":"8484:9:70","valueSize":1},{"declaration":13147,"isOffset":false,"isSlot":false,"src":"8625:9:70","valueSize":1},{"declaration":13147,"isOffset":false,"isSlot":false,"src":"8674:9:70","valueSize":1},{"declaration":13100,"isOffset":false,"isSlot":false,"src":"8504:1:70","valueSize":1},{"declaration":13102,"isOffset":false,"isSlot":false,"src":"8507:1:70","valueSize":1}],"flags":["memory-safe"],"id":13149,"nodeType":"InlineAssembly","src":"8390:308:70"},{"assignments":[13151],"declarations":[{"constant":false,"id":13151,"mutability":"mutable","name":"twos","nameLocation":"8910:4:70","nodeType":"VariableDeclaration","scope":13231,"src":"8902:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13150,"name":"uint256","nodeType":"ElementaryTypeName","src":"8902:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13158,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13152,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"8917:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"30","id":13153,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8932:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13154,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"8936:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8932:15:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13156,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8931:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8917:31:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8902:46:70"},{"AST":{"nativeSrc":"8987:359:70","nodeType":"YulBlock","src":"8987:359:70","statements":[{"nativeSrc":"9052:37:70","nodeType":"YulAssignment","src":"9052:37:70","value":{"arguments":[{"name":"denominator","nativeSrc":"9071:11:70","nodeType":"YulIdentifier","src":"9071:11:70"},{"name":"twos","nativeSrc":"9084:4:70","nodeType":"YulIdentifier","src":"9084:4:70"}],"functionName":{"name":"div","nativeSrc":"9067:3:70","nodeType":"YulIdentifier","src":"9067:3:70"},"nativeSrc":"9067:22:70","nodeType":"YulFunctionCall","src":"9067:22:70"},"variableNames":[{"name":"denominator","nativeSrc":"9052:11:70","nodeType":"YulIdentifier","src":"9052:11:70"}]},{"nativeSrc":"9153:21:70","nodeType":"YulAssignment","src":"9153:21:70","value":{"arguments":[{"name":"low","nativeSrc":"9164:3:70","nodeType":"YulIdentifier","src":"9164:3:70"},{"name":"twos","nativeSrc":"9169:4:70","nodeType":"YulIdentifier","src":"9169:4:70"}],"functionName":{"name":"div","nativeSrc":"9160:3:70","nodeType":"YulIdentifier","src":"9160:3:70"},"nativeSrc":"9160:14:70","nodeType":"YulFunctionCall","src":"9160:14:70"},"variableNames":[{"name":"low","nativeSrc":"9153:3:70","nodeType":"YulIdentifier","src":"9153:3:70"}]},{"nativeSrc":"9293:39:70","nodeType":"YulAssignment","src":"9293:39:70","value":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"9313:1:70","nodeType":"YulLiteral","src":"9313:1:70","type":"","value":"0"},{"name":"twos","nativeSrc":"9316:4:70","nodeType":"YulIdentifier","src":"9316:4:70"}],"functionName":{"name":"sub","nativeSrc":"9309:3:70","nodeType":"YulIdentifier","src":"9309:3:70"},"nativeSrc":"9309:12:70","nodeType":"YulFunctionCall","src":"9309:12:70"},{"name":"twos","nativeSrc":"9323:4:70","nodeType":"YulIdentifier","src":"9323:4:70"}],"functionName":{"name":"div","nativeSrc":"9305:3:70","nodeType":"YulIdentifier","src":"9305:3:70"},"nativeSrc":"9305:23:70","nodeType":"YulFunctionCall","src":"9305:23:70"},{"kind":"number","nativeSrc":"9330:1:70","nodeType":"YulLiteral","src":"9330:1:70","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"9301:3:70","nodeType":"YulIdentifier","src":"9301:3:70"},"nativeSrc":"9301:31:70","nodeType":"YulFunctionCall","src":"9301:31:70"},"variableNames":[{"name":"twos","nativeSrc":"9293:4:70","nodeType":"YulIdentifier","src":"9293:4:70"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":13104,"isOffset":false,"isSlot":false,"src":"9052:11:70","valueSize":1},{"declaration":13104,"isOffset":false,"isSlot":false,"src":"9071:11:70","valueSize":1},{"declaration":13112,"isOffset":false,"isSlot":false,"src":"9153:3:70","valueSize":1},{"declaration":13112,"isOffset":false,"isSlot":false,"src":"9164:3:70","valueSize":1},{"declaration":13151,"isOffset":false,"isSlot":false,"src":"9084:4:70","valueSize":1},{"declaration":13151,"isOffset":false,"isSlot":false,"src":"9169:4:70","valueSize":1},{"declaration":13151,"isOffset":false,"isSlot":false,"src":"9293:4:70","valueSize":1},{"declaration":13151,"isOffset":false,"isSlot":false,"src":"9316:4:70","valueSize":1},{"declaration":13151,"isOffset":false,"isSlot":false,"src":"9323:4:70","valueSize":1}],"flags":["memory-safe"],"id":13159,"nodeType":"InlineAssembly","src":"8962:384:70"},{"expression":{"id":13164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13160,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13112,"src":"9409:3:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13161,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13110,"src":"9416:4:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13162,"name":"twos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13151,"src":"9423:4:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9416:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9409:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13165,"nodeType":"ExpressionStatement","src":"9409:18:70"},{"assignments":[13167],"declarations":[{"constant":false,"id":13167,"mutability":"mutable","name":"inverse","nameLocation":"9770:7:70","nodeType":"VariableDeclaration","scope":13231,"src":"9762:15:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13166,"name":"uint256","nodeType":"ElementaryTypeName","src":"9762:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13174,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"33","id":13168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9781:1:70","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13169,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"9785:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9781:15:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13171,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9780:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"hexValue":"32","id":13172,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9800:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"9780:21:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9762:39:70"},{"expression":{"id":13181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13175,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10018:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":13176,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10029:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13177,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"10033:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13178,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10047:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10033:21:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10029:25:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10018:36:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13182,"nodeType":"ExpressionStatement","src":"10018:36:70"},{"expression":{"id":13189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13183,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10088:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":13184,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10099:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13185,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"10103:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13186,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10117:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10103:21:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10099:25:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10088:36:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13190,"nodeType":"ExpressionStatement","src":"10088:36:70"},{"expression":{"id":13197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13191,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10160:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":13192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10171:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13193,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"10175:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13194,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10189:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10175:21:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10171:25:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10160:36:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13198,"nodeType":"ExpressionStatement","src":"10160:36:70"},{"expression":{"id":13205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13199,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10231:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":13200,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10242:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13201,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"10246:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13202,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10260:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10246:21:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10242:25:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10231:36:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13206,"nodeType":"ExpressionStatement","src":"10231:36:70"},{"expression":{"id":13213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13207,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10304:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":13208,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10315:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13209,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"10319:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13210,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10333:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10319:21:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10315:25:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10304:36:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13214,"nodeType":"ExpressionStatement","src":"10304:36:70"},{"expression":{"id":13221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13215,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10378:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":13216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10389:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13217,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13104,"src":"10393:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13218,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10407:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10393:21:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10389:25:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10378:36:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13222,"nodeType":"ExpressionStatement","src":"10378:36:70"},{"expression":{"id":13227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13223,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13107,"src":"10859:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13224,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13112,"src":"10868:3:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13225,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13167,"src":"10874:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10868:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10859:22:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13228,"nodeType":"ExpressionStatement","src":"10859:22:70"},{"expression":{"id":13229,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13107,"src":"10902:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13108,"id":13230,"nodeType":"Return","src":"10895:13:70"}]}]},"documentation":{"id":13098,"nodeType":"StructuredDocumentation","src":"6925:312:70","text":" @dev Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n denominator == 0.\n Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n Uniswap Labs also under MIT license."},"id":13233,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"7251:6:70","nodeType":"FunctionDefinition","parameters":{"id":13105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13100,"mutability":"mutable","name":"x","nameLocation":"7266:1:70","nodeType":"VariableDeclaration","scope":13233,"src":"7258:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13099,"name":"uint256","nodeType":"ElementaryTypeName","src":"7258:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13102,"mutability":"mutable","name":"y","nameLocation":"7277:1:70","nodeType":"VariableDeclaration","scope":13233,"src":"7269:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13101,"name":"uint256","nodeType":"ElementaryTypeName","src":"7269:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13104,"mutability":"mutable","name":"denominator","nameLocation":"7288:11:70","nodeType":"VariableDeclaration","scope":13233,"src":"7280:19:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13103,"name":"uint256","nodeType":"ElementaryTypeName","src":"7280:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7257:43:70"},"returnParameters":{"id":13108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13107,"mutability":"mutable","name":"result","nameLocation":"7332:6:70","nodeType":"VariableDeclaration","scope":13233,"src":"7324:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13106,"name":"uint256","nodeType":"ElementaryTypeName","src":"7324:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7323:16:70"},"scope":14327,"src":"7242:3683:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13269,"nodeType":"Block","src":"11164:128:70","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13249,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13236,"src":"11188:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13250,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13238,"src":"11191:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13251,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13240,"src":"11194:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13248,"name":"mulDiv","nodeType":"Identifier","overloadedDeclarations":[13233,13270],"referencedDeclaration":13233,"src":"11181:6:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":13252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11181:25:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13256,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13243,"src":"11242:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}],"id":13255,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14326,"src":"11225:16:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$12718_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":13257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11225:26:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13259,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13236,"src":"11262:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13260,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13238,"src":"11265:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13261,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13240,"src":"11268:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13258,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"11255:6:70","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":13262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11255:25:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":13263,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11283:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11255:29:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11225:59:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13253,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"11209:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11218:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"11209:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11209:76:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11181:104:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13247,"id":13268,"nodeType":"Return","src":"11174:111:70"}]},"documentation":{"id":13234,"nodeType":"StructuredDocumentation","src":"10931:118:70","text":" @dev Calculates x * y / denominator with full precision, following the selected rounding direction."},"id":13270,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"11063:6:70","nodeType":"FunctionDefinition","parameters":{"id":13244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13236,"mutability":"mutable","name":"x","nameLocation":"11078:1:70","nodeType":"VariableDeclaration","scope":13270,"src":"11070:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13235,"name":"uint256","nodeType":"ElementaryTypeName","src":"11070:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13238,"mutability":"mutable","name":"y","nameLocation":"11089:1:70","nodeType":"VariableDeclaration","scope":13270,"src":"11081:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13237,"name":"uint256","nodeType":"ElementaryTypeName","src":"11081:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13240,"mutability":"mutable","name":"denominator","nameLocation":"11100:11:70","nodeType":"VariableDeclaration","scope":13270,"src":"11092:19:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13239,"name":"uint256","nodeType":"ElementaryTypeName","src":"11092:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13243,"mutability":"mutable","name":"rounding","nameLocation":"11122:8:70","nodeType":"VariableDeclaration","scope":13270,"src":"11113:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"},"typeName":{"id":13242,"nodeType":"UserDefinedTypeName","pathNode":{"id":13241,"name":"Rounding","nameLocations":["11113:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":12718,"src":"11113:8:70"},"referencedDeclaration":12718,"src":"11113:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"11069:62:70"},"returnParameters":{"id":13247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13246,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13270,"src":"11155:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13245,"name":"uint256","nodeType":"ElementaryTypeName","src":"11155:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11154:9:70"},"scope":14327,"src":"11054:238:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13319,"nodeType":"Block","src":"11500:245:70","statements":[{"id":13318,"nodeType":"UncheckedBlock","src":"11510:229:70","statements":[{"assignments":[13283,13285],"declarations":[{"constant":false,"id":13283,"mutability":"mutable","name":"high","nameLocation":"11543:4:70","nodeType":"VariableDeclaration","scope":13318,"src":"11535:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13282,"name":"uint256","nodeType":"ElementaryTypeName","src":"11535:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13285,"mutability":"mutable","name":"low","nameLocation":"11557:3:70","nodeType":"VariableDeclaration","scope":13318,"src":"11549:11:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13284,"name":"uint256","nodeType":"ElementaryTypeName","src":"11549:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13290,"initialValue":{"arguments":[{"id":13287,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13273,"src":"11571:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13288,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13275,"src":"11574:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13286,"name":"mul512","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12746,"src":"11564:6:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256,uint256)"}},"id":13289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11564:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11534:42:70"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13291,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13283,"src":"11594:4:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13292,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11602:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13293,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13277,"src":"11607:1:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11602:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11594:14:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13304,"nodeType":"IfStatement","src":"11590:86:70","trueBody":{"id":13303,"nodeType":"Block","src":"11610:66:70","statements":[{"expression":{"arguments":[{"expression":{"id":13299,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"11640:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13300,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11646:14:70","memberName":"UNDER_OVERFLOW","nodeType":"MemberAccess","referencedDeclaration":12403,"src":"11640:20:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13296,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"11628:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11634:5:70","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":12439,"src":"11628:11:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":13301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11628:33:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13302,"nodeType":"ExpressionStatement","src":"11628:33:70"}]}},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13305,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13283,"src":"11697:4:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":13308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"323536","id":13306,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11706:3:70","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13307,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13277,"src":"11712:1:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11706:7:70","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"id":13309,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11705:9:70","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"11697:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13311,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11696:19:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13312,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13285,"src":"11719:3:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13313,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13277,"src":"11726:1:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11719:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13315,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11718:10:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11696:32:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13281,"id":13317,"nodeType":"Return","src":"11689:39:70"}]}]},"documentation":{"id":13271,"nodeType":"StructuredDocumentation","src":"11298:111:70","text":" @dev Calculates floor(x * y >> n) with full precision. Throws if result overflows a uint256."},"id":13320,"implemented":true,"kind":"function","modifiers":[],"name":"mulShr","nameLocation":"11423:6:70","nodeType":"FunctionDefinition","parameters":{"id":13278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13273,"mutability":"mutable","name":"x","nameLocation":"11438:1:70","nodeType":"VariableDeclaration","scope":13320,"src":"11430:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13272,"name":"uint256","nodeType":"ElementaryTypeName","src":"11430:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13275,"mutability":"mutable","name":"y","nameLocation":"11449:1:70","nodeType":"VariableDeclaration","scope":13320,"src":"11441:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13274,"name":"uint256","nodeType":"ElementaryTypeName","src":"11441:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13277,"mutability":"mutable","name":"n","nameLocation":"11458:1:70","nodeType":"VariableDeclaration","scope":13320,"src":"11452:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":13276,"name":"uint8","nodeType":"ElementaryTypeName","src":"11452:5:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"11429:31:70"},"returnParameters":{"id":13281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13280,"mutability":"mutable","name":"result","nameLocation":"11492:6:70","nodeType":"VariableDeclaration","scope":13320,"src":"11484:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13279,"name":"uint256","nodeType":"ElementaryTypeName","src":"11484:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11483:16:70"},"scope":14327,"src":"11414:331:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13358,"nodeType":"Block","src":"11963:113:70","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13336,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13323,"src":"11987:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13337,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13325,"src":"11990:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13338,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13327,"src":"11993:1:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":13335,"name":"mulShr","nodeType":"Identifier","overloadedDeclarations":[13320,13359],"referencedDeclaration":13320,"src":"11980:6:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint8_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint8) pure returns (uint256)"}},"id":13339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11980:15:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13343,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13330,"src":"12031:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}],"id":13342,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14326,"src":"12014:16:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$12718_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":13344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12014:26:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13346,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13323,"src":"12051:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13347,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13325,"src":"12054:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13348,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12057:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13349,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13327,"src":"12062:1:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"12057:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13345,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"12044:6:70","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":13351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12044:20:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":13352,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12067:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12044:24:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12014:54:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13340,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"11998:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12007:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"11998:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11998:71:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11980:89:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13334,"id":13357,"nodeType":"Return","src":"11973:96:70"}]},"documentation":{"id":13321,"nodeType":"StructuredDocumentation","src":"11751:109:70","text":" @dev Calculates x * y >> n with full precision, following the selected rounding direction."},"id":13359,"implemented":true,"kind":"function","modifiers":[],"name":"mulShr","nameLocation":"11874:6:70","nodeType":"FunctionDefinition","parameters":{"id":13331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13323,"mutability":"mutable","name":"x","nameLocation":"11889:1:70","nodeType":"VariableDeclaration","scope":13359,"src":"11881:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13322,"name":"uint256","nodeType":"ElementaryTypeName","src":"11881:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13325,"mutability":"mutable","name":"y","nameLocation":"11900:1:70","nodeType":"VariableDeclaration","scope":13359,"src":"11892:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13324,"name":"uint256","nodeType":"ElementaryTypeName","src":"11892:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13327,"mutability":"mutable","name":"n","nameLocation":"11909:1:70","nodeType":"VariableDeclaration","scope":13359,"src":"11903:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":13326,"name":"uint8","nodeType":"ElementaryTypeName","src":"11903:5:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":13330,"mutability":"mutable","name":"rounding","nameLocation":"11921:8:70","nodeType":"VariableDeclaration","scope":13359,"src":"11912:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"},"typeName":{"id":13329,"nodeType":"UserDefinedTypeName","pathNode":{"id":13328,"name":"Rounding","nameLocations":["11912:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":12718,"src":"11912:8:70"},"referencedDeclaration":12718,"src":"11912:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"11880:50:70"},"returnParameters":{"id":13334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13333,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13359,"src":"11954:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13332,"name":"uint256","nodeType":"ElementaryTypeName","src":"11954:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11953:9:70"},"scope":14327,"src":"11865:211:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13455,"nodeType":"Block","src":"12710:1849:70","statements":[{"id":13454,"nodeType":"UncheckedBlock","src":"12720:1833:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13369,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13364,"src":"12748:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13370,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12753:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12748:6:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13374,"nodeType":"IfStatement","src":"12744:20:70","trueBody":{"expression":{"hexValue":"30","id":13372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12763:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":13368,"id":13373,"nodeType":"Return","src":"12756:8:70"}},{"assignments":[13376],"declarations":[{"constant":false,"id":13376,"mutability":"mutable","name":"remainder","nameLocation":"13243:9:70","nodeType":"VariableDeclaration","scope":13454,"src":"13235:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13375,"name":"uint256","nodeType":"ElementaryTypeName","src":"13235:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13380,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13377,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13362,"src":"13255:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":13378,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13364,"src":"13259:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13255:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13235:25:70"},{"assignments":[13382],"declarations":[{"constant":false,"id":13382,"mutability":"mutable","name":"gcd","nameLocation":"13282:3:70","nodeType":"VariableDeclaration","scope":13454,"src":"13274:11:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13381,"name":"uint256","nodeType":"ElementaryTypeName","src":"13274:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13384,"initialValue":{"id":13383,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13364,"src":"13288:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13274:15:70"},{"assignments":[13386],"declarations":[{"constant":false,"id":13386,"mutability":"mutable","name":"x","nameLocation":"13432:1:70","nodeType":"VariableDeclaration","scope":13454,"src":"13425:8:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13385,"name":"int256","nodeType":"ElementaryTypeName","src":"13425:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":13388,"initialValue":{"hexValue":"30","id":13387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13436:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13425:12:70"},{"assignments":[13390],"declarations":[{"constant":false,"id":13390,"mutability":"mutable","name":"y","nameLocation":"13458:1:70","nodeType":"VariableDeclaration","scope":13454,"src":"13451:8:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13389,"name":"int256","nodeType":"ElementaryTypeName","src":"13451:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":13392,"initialValue":{"hexValue":"31","id":13391,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13462:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"13451:12:70"},{"body":{"id":13429,"nodeType":"Block","src":"13501:882:70","statements":[{"assignments":[13397],"declarations":[{"constant":false,"id":13397,"mutability":"mutable","name":"quotient","nameLocation":"13527:8:70","nodeType":"VariableDeclaration","scope":13429,"src":"13519:16:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13396,"name":"uint256","nodeType":"ElementaryTypeName","src":"13519:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13401,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13398,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13382,"src":"13538:3:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13399,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13376,"src":"13544:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13538:15:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13519:34:70"},{"expression":{"id":13412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":13402,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13382,"src":"13573:3:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13403,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13376,"src":"13578:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13404,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"13572:16:70","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"id":13405,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13376,"src":"13678:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13406,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13382,"src":"13923:3:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13407,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13376,"src":"13929:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13408,"name":"quotient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13397,"src":"13941:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13929:20:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13923:26:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13411,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13591:376:70","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"13572:395:70","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13413,"nodeType":"ExpressionStatement","src":"13572:395:70"},{"expression":{"id":13427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":13414,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13386,"src":"13987:1:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"id":13415,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13390,"src":"13990:1:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":13416,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"13986:6:70","typeDescriptions":{"typeIdentifier":"t_tuple$_t_int256_$_t_int256_$","typeString":"tuple(int256,int256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"id":13417,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13390,"src":"14072:1:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13418,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13386,"src":"14326:1:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13419,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13390,"src":"14330:1:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":13422,"name":"quotient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13397,"src":"14341:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13421,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14334:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":13420,"name":"int256","nodeType":"ElementaryTypeName","src":"14334:6:70","typeDescriptions":{}}},"id":13423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14334:16:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14330:20:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14326:24:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":13426,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13995:373:70","typeDescriptions":{"typeIdentifier":"t_tuple$_t_int256_$_t_int256_$","typeString":"tuple(int256,int256)"}},"src":"13986:382:70","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13428,"nodeType":"ExpressionStatement","src":"13986:382:70"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13393,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13376,"src":"13485:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13498:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13485:14:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13430,"nodeType":"WhileStatement","src":"13478:905:70"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13431,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13382,"src":"14401:3:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"31","id":13432,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14408:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"14401:8:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13436,"nodeType":"IfStatement","src":"14397:22:70","trueBody":{"expression":{"hexValue":"30","id":13434,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14418:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":13368,"id":13435,"nodeType":"Return","src":"14411:8:70"}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13438,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13386,"src":"14470:1:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":13439,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14474:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14470:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13441,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13364,"src":"14477:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"id":13445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"14489:2:70","subExpression":{"id":13444,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13386,"src":"14490:1:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13443,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14481:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13442,"name":"uint256","nodeType":"ElementaryTypeName","src":"14481:7:70","typeDescriptions":{}}},"id":13446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14481:11:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14477:15:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":13450,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13386,"src":"14502:1:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13449,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14494:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13448,"name":"uint256","nodeType":"ElementaryTypeName","src":"14494:7:70","typeDescriptions":{}}},"id":13451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14494:10:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13437,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12995,"src":"14462:7:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":13452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14462:43:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13368,"id":13453,"nodeType":"Return","src":"14455:50:70"}]}]},"documentation":{"id":13360,"nodeType":"StructuredDocumentation","src":"12082:553:70","text":" @dev Calculate the modular multiplicative inverse of a number in Z/nZ.\n If n is a prime, then Z/nZ is a field. In that case all elements are inversible, except 0.\n If n is not a prime, then Z/nZ is not a field, and some elements might not be inversible.\n If the input value is not inversible, 0 is returned.\n NOTE: If you know for sure that n is (big) a prime, it may be cheaper to use Fermat's little theorem and get the\n inverse using `Math.modExp(a, n - 2, n)`. See {invModPrime}."},"id":13456,"implemented":true,"kind":"function","modifiers":[],"name":"invMod","nameLocation":"12649:6:70","nodeType":"FunctionDefinition","parameters":{"id":13365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13362,"mutability":"mutable","name":"a","nameLocation":"12664:1:70","nodeType":"VariableDeclaration","scope":13456,"src":"12656:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13361,"name":"uint256","nodeType":"ElementaryTypeName","src":"12656:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13364,"mutability":"mutable","name":"n","nameLocation":"12675:1:70","nodeType":"VariableDeclaration","scope":13456,"src":"12667:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13363,"name":"uint256","nodeType":"ElementaryTypeName","src":"12667:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12655:22:70"},"returnParameters":{"id":13368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13367,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13456,"src":"12701:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13366,"name":"uint256","nodeType":"ElementaryTypeName","src":"12701:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12700:9:70"},"scope":14327,"src":"12640:1919:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13476,"nodeType":"Block","src":"15159:82:70","statements":[{"id":13475,"nodeType":"UncheckedBlock","src":"15169:66:70","statements":[{"expression":{"arguments":[{"id":13468,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13459,"src":"15212:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13469,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13461,"src":"15215:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"32","id":13470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15219:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"15215:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13472,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13461,"src":"15222:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13466,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"15200:4:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":13467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15205:6:70","memberName":"modExp","nodeType":"MemberAccess","referencedDeclaration":13513,"src":"15200:11:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) view returns (uint256)"}},"id":13473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15200:24:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13465,"id":13474,"nodeType":"Return","src":"15193:31:70"}]}]},"documentation":{"id":13457,"nodeType":"StructuredDocumentation","src":"14565:514:70","text":" @dev Variant of {invMod}. More efficient, but only works if `p` is known to be a prime greater than `2`.\n From https://en.wikipedia.org/wiki/Fermat%27s_little_theorem[Fermat's little theorem], we know that if p is\n prime, then `a**(p-1) ≡ 1 mod p`. As a consequence, we have `a * a**(p-2) ≡ 1 mod p`, which means that\n `a**(p-2)` is the modular multiplicative inverse of a in Fp.\n NOTE: this function does NOT check that `p` is a prime greater than `2`."},"id":13477,"implemented":true,"kind":"function","modifiers":[],"name":"invModPrime","nameLocation":"15093:11:70","nodeType":"FunctionDefinition","parameters":{"id":13462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13459,"mutability":"mutable","name":"a","nameLocation":"15113:1:70","nodeType":"VariableDeclaration","scope":13477,"src":"15105:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13458,"name":"uint256","nodeType":"ElementaryTypeName","src":"15105:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13461,"mutability":"mutable","name":"p","nameLocation":"15124:1:70","nodeType":"VariableDeclaration","scope":13477,"src":"15116:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13460,"name":"uint256","nodeType":"ElementaryTypeName","src":"15116:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15104:22:70"},"returnParameters":{"id":13465,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13464,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13477,"src":"15150:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13463,"name":"uint256","nodeType":"ElementaryTypeName","src":"15150:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15149:9:70"},"scope":14327,"src":"15084:157:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13512,"nodeType":"Block","src":"16011:174:70","statements":[{"assignments":[13490,13492],"declarations":[{"constant":false,"id":13490,"mutability":"mutable","name":"success","nameLocation":"16027:7:70","nodeType":"VariableDeclaration","scope":13512,"src":"16022:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13489,"name":"bool","nodeType":"ElementaryTypeName","src":"16022:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":13492,"mutability":"mutable","name":"result","nameLocation":"16044:6:70","nodeType":"VariableDeclaration","scope":13512,"src":"16036:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13491,"name":"uint256","nodeType":"ElementaryTypeName","src":"16036:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13498,"initialValue":{"arguments":[{"id":13494,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13480,"src":"16064:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13495,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13482,"src":"16067:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13496,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13484,"src":"16070:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13493,"name":"tryModExp","nodeType":"Identifier","overloadedDeclarations":[13537,13619],"referencedDeclaration":13537,"src":"16054:9:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (uint256,uint256,uint256) view returns (bool,uint256)"}},"id":13497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16054:18:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"16021:51:70"},{"condition":{"id":13500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"16086:8:70","subExpression":{"id":13499,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13490,"src":"16087:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13509,"nodeType":"IfStatement","src":"16082:74:70","trueBody":{"id":13508,"nodeType":"Block","src":"16096:60:70","statements":[{"expression":{"arguments":[{"expression":{"id":13504,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"16122:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13505,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16128:16:70","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":12407,"src":"16122:22:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13501,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"16110:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16116:5:70","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":12439,"src":"16110:11:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":13506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16110:35:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13507,"nodeType":"ExpressionStatement","src":"16110:35:70"}]}},{"expression":{"id":13510,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13492,"src":"16172:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13488,"id":13511,"nodeType":"Return","src":"16165:13:70"}]},"documentation":{"id":13478,"nodeType":"StructuredDocumentation","src":"15247:678:70","text":" @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m)\n Requirements:\n - modulus can't be zero\n - underlying staticcall to precompile must succeed\n IMPORTANT: The result is only valid if the underlying call succeeds. When using this function, make\n sure the chain you're using it on supports the precompiled contract for modular exponentiation\n at address 0x05 as specified in https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise,\n the underlying function will succeed given the lack of a revert, but the result may be incorrectly\n interpreted as 0."},"id":13513,"implemented":true,"kind":"function","modifiers":[],"name":"modExp","nameLocation":"15939:6:70","nodeType":"FunctionDefinition","parameters":{"id":13485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13480,"mutability":"mutable","name":"b","nameLocation":"15954:1:70","nodeType":"VariableDeclaration","scope":13513,"src":"15946:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13479,"name":"uint256","nodeType":"ElementaryTypeName","src":"15946:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13482,"mutability":"mutable","name":"e","nameLocation":"15965:1:70","nodeType":"VariableDeclaration","scope":13513,"src":"15957:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13481,"name":"uint256","nodeType":"ElementaryTypeName","src":"15957:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13484,"mutability":"mutable","name":"m","nameLocation":"15976:1:70","nodeType":"VariableDeclaration","scope":13513,"src":"15968:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13483,"name":"uint256","nodeType":"ElementaryTypeName","src":"15968:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15945:33:70"},"returnParameters":{"id":13488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13487,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13513,"src":"16002:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13486,"name":"uint256","nodeType":"ElementaryTypeName","src":"16002:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16001:9:70"},"scope":14327,"src":"15930:255:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13536,"nodeType":"Block","src":"17039:1493:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13527,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13520,"src":"17053:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13528,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17058:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17053:6:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13534,"nodeType":"IfStatement","src":"17049:29:70","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":13530,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17069:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":13531,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17076:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":13532,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"17068:10:70","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":13526,"id":13533,"nodeType":"Return","src":"17061:17:70"}},{"AST":{"nativeSrc":"17113:1413:70","nodeType":"YulBlock","src":"17113:1413:70","statements":[{"nativeSrc":"17127:22:70","nodeType":"YulVariableDeclaration","src":"17127:22:70","value":{"arguments":[{"kind":"number","nativeSrc":"17144:4:70","nodeType":"YulLiteral","src":"17144:4:70","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"17138:5:70","nodeType":"YulIdentifier","src":"17138:5:70"},"nativeSrc":"17138:11:70","nodeType":"YulFunctionCall","src":"17138:11:70"},"variables":[{"name":"ptr","nativeSrc":"17131:3:70","nodeType":"YulTypedName","src":"17131:3:70","type":""}]},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"18057:3:70","nodeType":"YulIdentifier","src":"18057:3:70"},{"kind":"number","nativeSrc":"18062:4:70","nodeType":"YulLiteral","src":"18062:4:70","type":"","value":"0x20"}],"functionName":{"name":"mstore","nativeSrc":"18050:6:70","nodeType":"YulIdentifier","src":"18050:6:70"},"nativeSrc":"18050:17:70","nodeType":"YulFunctionCall","src":"18050:17:70"},"nativeSrc":"18050:17:70","nodeType":"YulExpressionStatement","src":"18050:17:70"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18091:3:70","nodeType":"YulIdentifier","src":"18091:3:70"},{"kind":"number","nativeSrc":"18096:4:70","nodeType":"YulLiteral","src":"18096:4:70","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18087:3:70","nodeType":"YulIdentifier","src":"18087:3:70"},"nativeSrc":"18087:14:70","nodeType":"YulFunctionCall","src":"18087:14:70"},{"kind":"number","nativeSrc":"18103:4:70","nodeType":"YulLiteral","src":"18103:4:70","type":"","value":"0x20"}],"functionName":{"name":"mstore","nativeSrc":"18080:6:70","nodeType":"YulIdentifier","src":"18080:6:70"},"nativeSrc":"18080:28:70","nodeType":"YulFunctionCall","src":"18080:28:70"},"nativeSrc":"18080:28:70","nodeType":"YulExpressionStatement","src":"18080:28:70"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18132:3:70","nodeType":"YulIdentifier","src":"18132:3:70"},{"kind":"number","nativeSrc":"18137:4:70","nodeType":"YulLiteral","src":"18137:4:70","type":"","value":"0x40"}],"functionName":{"name":"add","nativeSrc":"18128:3:70","nodeType":"YulIdentifier","src":"18128:3:70"},"nativeSrc":"18128:14:70","nodeType":"YulFunctionCall","src":"18128:14:70"},{"kind":"number","nativeSrc":"18144:4:70","nodeType":"YulLiteral","src":"18144:4:70","type":"","value":"0x20"}],"functionName":{"name":"mstore","nativeSrc":"18121:6:70","nodeType":"YulIdentifier","src":"18121:6:70"},"nativeSrc":"18121:28:70","nodeType":"YulFunctionCall","src":"18121:28:70"},"nativeSrc":"18121:28:70","nodeType":"YulExpressionStatement","src":"18121:28:70"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18173:3:70","nodeType":"YulIdentifier","src":"18173:3:70"},{"kind":"number","nativeSrc":"18178:4:70","nodeType":"YulLiteral","src":"18178:4:70","type":"","value":"0x60"}],"functionName":{"name":"add","nativeSrc":"18169:3:70","nodeType":"YulIdentifier","src":"18169:3:70"},"nativeSrc":"18169:14:70","nodeType":"YulFunctionCall","src":"18169:14:70"},{"name":"b","nativeSrc":"18185:1:70","nodeType":"YulIdentifier","src":"18185:1:70"}],"functionName":{"name":"mstore","nativeSrc":"18162:6:70","nodeType":"YulIdentifier","src":"18162:6:70"},"nativeSrc":"18162:25:70","nodeType":"YulFunctionCall","src":"18162:25:70"},"nativeSrc":"18162:25:70","nodeType":"YulExpressionStatement","src":"18162:25:70"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18211:3:70","nodeType":"YulIdentifier","src":"18211:3:70"},{"kind":"number","nativeSrc":"18216:4:70","nodeType":"YulLiteral","src":"18216:4:70","type":"","value":"0x80"}],"functionName":{"name":"add","nativeSrc":"18207:3:70","nodeType":"YulIdentifier","src":"18207:3:70"},"nativeSrc":"18207:14:70","nodeType":"YulFunctionCall","src":"18207:14:70"},{"name":"e","nativeSrc":"18223:1:70","nodeType":"YulIdentifier","src":"18223:1:70"}],"functionName":{"name":"mstore","nativeSrc":"18200:6:70","nodeType":"YulIdentifier","src":"18200:6:70"},"nativeSrc":"18200:25:70","nodeType":"YulFunctionCall","src":"18200:25:70"},"nativeSrc":"18200:25:70","nodeType":"YulExpressionStatement","src":"18200:25:70"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18249:3:70","nodeType":"YulIdentifier","src":"18249:3:70"},{"kind":"number","nativeSrc":"18254:4:70","nodeType":"YulLiteral","src":"18254:4:70","type":"","value":"0xa0"}],"functionName":{"name":"add","nativeSrc":"18245:3:70","nodeType":"YulIdentifier","src":"18245:3:70"},"nativeSrc":"18245:14:70","nodeType":"YulFunctionCall","src":"18245:14:70"},{"name":"m","nativeSrc":"18261:1:70","nodeType":"YulIdentifier","src":"18261:1:70"}],"functionName":{"name":"mstore","nativeSrc":"18238:6:70","nodeType":"YulIdentifier","src":"18238:6:70"},"nativeSrc":"18238:25:70","nodeType":"YulFunctionCall","src":"18238:25:70"},"nativeSrc":"18238:25:70","nodeType":"YulExpressionStatement","src":"18238:25:70"},{"nativeSrc":"18425:57:70","nodeType":"YulAssignment","src":"18425:57:70","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"18447:3:70","nodeType":"YulIdentifier","src":"18447:3:70"},"nativeSrc":"18447:5:70","nodeType":"YulFunctionCall","src":"18447:5:70"},{"kind":"number","nativeSrc":"18454:4:70","nodeType":"YulLiteral","src":"18454:4:70","type":"","value":"0x05"},{"name":"ptr","nativeSrc":"18460:3:70","nodeType":"YulIdentifier","src":"18460:3:70"},{"kind":"number","nativeSrc":"18465:4:70","nodeType":"YulLiteral","src":"18465:4:70","type":"","value":"0xc0"},{"kind":"number","nativeSrc":"18471:4:70","nodeType":"YulLiteral","src":"18471:4:70","type":"","value":"0x00"},{"kind":"number","nativeSrc":"18477:4:70","nodeType":"YulLiteral","src":"18477:4:70","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nativeSrc":"18436:10:70","nodeType":"YulIdentifier","src":"18436:10:70"},"nativeSrc":"18436:46:70","nodeType":"YulFunctionCall","src":"18436:46:70"},"variableNames":[{"name":"success","nativeSrc":"18425:7:70","nodeType":"YulIdentifier","src":"18425:7:70"}]},{"nativeSrc":"18495:21:70","nodeType":"YulAssignment","src":"18495:21:70","value":{"arguments":[{"kind":"number","nativeSrc":"18511:4:70","nodeType":"YulLiteral","src":"18511:4:70","type":"","value":"0x00"}],"functionName":{"name":"mload","nativeSrc":"18505:5:70","nodeType":"YulIdentifier","src":"18505:5:70"},"nativeSrc":"18505:11:70","nodeType":"YulFunctionCall","src":"18505:11:70"},"variableNames":[{"name":"result","nativeSrc":"18495:6:70","nodeType":"YulIdentifier","src":"18495:6:70"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":13516,"isOffset":false,"isSlot":false,"src":"18185:1:70","valueSize":1},{"declaration":13518,"isOffset":false,"isSlot":false,"src":"18223:1:70","valueSize":1},{"declaration":13520,"isOffset":false,"isSlot":false,"src":"18261:1:70","valueSize":1},{"declaration":13525,"isOffset":false,"isSlot":false,"src":"18495:6:70","valueSize":1},{"declaration":13523,"isOffset":false,"isSlot":false,"src":"18425:7:70","valueSize":1}],"flags":["memory-safe"],"id":13535,"nodeType":"InlineAssembly","src":"17088:1438:70"}]},"documentation":{"id":13514,"nodeType":"StructuredDocumentation","src":"16191:738:70","text":" @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m).\n It includes a success flag indicating if the operation succeeded. Operation will be marked as failed if trying\n to operate modulo 0 or if the underlying precompile reverted.\n IMPORTANT: The result is only valid if the success flag is true. When using this function, make sure the chain\n you're using it on supports the precompiled contract for modular exponentiation at address 0x05 as specified in\n https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise, the underlying function will succeed given the lack\n of a revert, but the result may be incorrectly interpreted as 0."},"id":13537,"implemented":true,"kind":"function","modifiers":[],"name":"tryModExp","nameLocation":"16943:9:70","nodeType":"FunctionDefinition","parameters":{"id":13521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13516,"mutability":"mutable","name":"b","nameLocation":"16961:1:70","nodeType":"VariableDeclaration","scope":13537,"src":"16953:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13515,"name":"uint256","nodeType":"ElementaryTypeName","src":"16953:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13518,"mutability":"mutable","name":"e","nameLocation":"16972:1:70","nodeType":"VariableDeclaration","scope":13537,"src":"16964:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13517,"name":"uint256","nodeType":"ElementaryTypeName","src":"16964:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13520,"mutability":"mutable","name":"m","nameLocation":"16983:1:70","nodeType":"VariableDeclaration","scope":13537,"src":"16975:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13519,"name":"uint256","nodeType":"ElementaryTypeName","src":"16975:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16952:33:70"},"returnParameters":{"id":13526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13523,"mutability":"mutable","name":"success","nameLocation":"17014:7:70","nodeType":"VariableDeclaration","scope":13537,"src":"17009:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13522,"name":"bool","nodeType":"ElementaryTypeName","src":"17009:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":13525,"mutability":"mutable","name":"result","nameLocation":"17031:6:70","nodeType":"VariableDeclaration","scope":13537,"src":"17023:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13524,"name":"uint256","nodeType":"ElementaryTypeName","src":"17023:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17008:30:70"},"scope":14327,"src":"16934:1598:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13572,"nodeType":"Block","src":"18729:179:70","statements":[{"assignments":[13550,13552],"declarations":[{"constant":false,"id":13550,"mutability":"mutable","name":"success","nameLocation":"18745:7:70","nodeType":"VariableDeclaration","scope":13572,"src":"18740:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13549,"name":"bool","nodeType":"ElementaryTypeName","src":"18740:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":13552,"mutability":"mutable","name":"result","nameLocation":"18767:6:70","nodeType":"VariableDeclaration","scope":13572,"src":"18754:19:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13551,"name":"bytes","nodeType":"ElementaryTypeName","src":"18754:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":13558,"initialValue":{"arguments":[{"id":13554,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13540,"src":"18787:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":13555,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13542,"src":"18790:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":13556,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13544,"src":"18793:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":13553,"name":"tryModExp","nodeType":"Identifier","overloadedDeclarations":[13537,13619],"referencedDeclaration":13619,"src":"18777:9:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,bytes memory,bytes memory) view returns (bool,bytes memory)"}},"id":13557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18777:18:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"18739:56:70"},{"condition":{"id":13560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"18809:8:70","subExpression":{"id":13559,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13550,"src":"18810:7:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13569,"nodeType":"IfStatement","src":"18805:74:70","trueBody":{"id":13568,"nodeType":"Block","src":"18819:60:70","statements":[{"expression":{"arguments":[{"expression":{"id":13564,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"18845:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"18851:16:70","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":12407,"src":"18845:22:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13561,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"18833:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12440_$","typeString":"type(library Panic)"}},"id":13563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18839:5:70","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":12439,"src":"18833:11:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":13566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18833:35:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13567,"nodeType":"ExpressionStatement","src":"18833:35:70"}]}},{"expression":{"id":13570,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13552,"src":"18895:6:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":13548,"id":13571,"nodeType":"Return","src":"18888:13:70"}]},"documentation":{"id":13538,"nodeType":"StructuredDocumentation","src":"18538:85:70","text":" @dev Variant of {modExp} that supports inputs of arbitrary length."},"id":13573,"implemented":true,"kind":"function","modifiers":[],"name":"modExp","nameLocation":"18637:6:70","nodeType":"FunctionDefinition","parameters":{"id":13545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13540,"mutability":"mutable","name":"b","nameLocation":"18657:1:70","nodeType":"VariableDeclaration","scope":13573,"src":"18644:14:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13539,"name":"bytes","nodeType":"ElementaryTypeName","src":"18644:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":13542,"mutability":"mutable","name":"e","nameLocation":"18673:1:70","nodeType":"VariableDeclaration","scope":13573,"src":"18660:14:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13541,"name":"bytes","nodeType":"ElementaryTypeName","src":"18660:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":13544,"mutability":"mutable","name":"m","nameLocation":"18689:1:70","nodeType":"VariableDeclaration","scope":13573,"src":"18676:14:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13543,"name":"bytes","nodeType":"ElementaryTypeName","src":"18676:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"18643:48:70"},"returnParameters":{"id":13548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13547,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13573,"src":"18715:12:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13546,"name":"bytes","nodeType":"ElementaryTypeName","src":"18715:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"18714:14:70"},"scope":14327,"src":"18628:280:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13618,"nodeType":"Block","src":"19162:771:70","statements":[{"condition":{"arguments":[{"id":13588,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13580,"src":"19187:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":13587,"name":"_zeroBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13652,"src":"19176:10:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (bytes memory) pure returns (bool)"}},"id":13589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19176:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13597,"nodeType":"IfStatement","src":"19172:47:70","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":13590,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19199:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"arguments":[{"hexValue":"30","id":13593,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19216:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":13592,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"19206:9:70","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":13591,"name":"bytes","nodeType":"ElementaryTypeName","src":"19210:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":13594,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19206:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":13595,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"19198:21:70","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"functionReturnParameters":13586,"id":13596,"nodeType":"Return","src":"19191:28:70"}},{"assignments":[13599],"declarations":[{"constant":false,"id":13599,"mutability":"mutable","name":"mLen","nameLocation":"19238:4:70","nodeType":"VariableDeclaration","scope":13618,"src":"19230:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13598,"name":"uint256","nodeType":"ElementaryTypeName","src":"19230:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13602,"initialValue":{"expression":{"id":13600,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13580,"src":"19245:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19247:6:70","memberName":"length","nodeType":"MemberAccess","src":"19245:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19230:23:70"},{"expression":{"id":13615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13603,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13585,"src":"19335:6:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":13606,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13576,"src":"19361:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19363:6:70","memberName":"length","nodeType":"MemberAccess","src":"19361:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13608,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13578,"src":"19371:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19373:6:70","memberName":"length","nodeType":"MemberAccess","src":"19371:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13610,"name":"mLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13599,"src":"19381:4:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13611,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13576,"src":"19387:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":13612,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13578,"src":"19390:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":13613,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13580,"src":"19393:1:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":13604,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"19344:3:70","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":13605,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"19348:12:70","memberName":"encodePacked","nodeType":"MemberAccess","src":"19344:16:70","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":13614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19344:51:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"19335:60:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13616,"nodeType":"ExpressionStatement","src":"19335:60:70"},{"AST":{"nativeSrc":"19431:496:70","nodeType":"YulBlock","src":"19431:496:70","statements":[{"nativeSrc":"19445:32:70","nodeType":"YulVariableDeclaration","src":"19445:32:70","value":{"arguments":[{"name":"result","nativeSrc":"19464:6:70","nodeType":"YulIdentifier","src":"19464:6:70"},{"kind":"number","nativeSrc":"19472:4:70","nodeType":"YulLiteral","src":"19472:4:70","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"19460:3:70","nodeType":"YulIdentifier","src":"19460:3:70"},"nativeSrc":"19460:17:70","nodeType":"YulFunctionCall","src":"19460:17:70"},"variables":[{"name":"dataPtr","nativeSrc":"19449:7:70","nodeType":"YulTypedName","src":"19449:7:70","type":""}]},{"nativeSrc":"19567:73:70","nodeType":"YulAssignment","src":"19567:73:70","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"19589:3:70","nodeType":"YulIdentifier","src":"19589:3:70"},"nativeSrc":"19589:5:70","nodeType":"YulFunctionCall","src":"19589:5:70"},{"kind":"number","nativeSrc":"19596:4:70","nodeType":"YulLiteral","src":"19596:4:70","type":"","value":"0x05"},{"name":"dataPtr","nativeSrc":"19602:7:70","nodeType":"YulIdentifier","src":"19602:7:70"},{"arguments":[{"name":"result","nativeSrc":"19617:6:70","nodeType":"YulIdentifier","src":"19617:6:70"}],"functionName":{"name":"mload","nativeSrc":"19611:5:70","nodeType":"YulIdentifier","src":"19611:5:70"},"nativeSrc":"19611:13:70","nodeType":"YulFunctionCall","src":"19611:13:70"},{"name":"dataPtr","nativeSrc":"19626:7:70","nodeType":"YulIdentifier","src":"19626:7:70"},{"name":"mLen","nativeSrc":"19635:4:70","nodeType":"YulIdentifier","src":"19635:4:70"}],"functionName":{"name":"staticcall","nativeSrc":"19578:10:70","nodeType":"YulIdentifier","src":"19578:10:70"},"nativeSrc":"19578:62:70","nodeType":"YulFunctionCall","src":"19578:62:70"},"variableNames":[{"name":"success","nativeSrc":"19567:7:70","nodeType":"YulIdentifier","src":"19567:7:70"}]},{"expression":{"arguments":[{"name":"result","nativeSrc":"19796:6:70","nodeType":"YulIdentifier","src":"19796:6:70"},{"name":"mLen","nativeSrc":"19804:4:70","nodeType":"YulIdentifier","src":"19804:4:70"}],"functionName":{"name":"mstore","nativeSrc":"19789:6:70","nodeType":"YulIdentifier","src":"19789:6:70"},"nativeSrc":"19789:20:70","nodeType":"YulFunctionCall","src":"19789:20:70"},"nativeSrc":"19789:20:70","nodeType":"YulExpressionStatement","src":"19789:20:70"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"19892:4:70","nodeType":"YulLiteral","src":"19892:4:70","type":"","value":"0x40"},{"arguments":[{"name":"dataPtr","nativeSrc":"19902:7:70","nodeType":"YulIdentifier","src":"19902:7:70"},{"name":"mLen","nativeSrc":"19911:4:70","nodeType":"YulIdentifier","src":"19911:4:70"}],"functionName":{"name":"add","nativeSrc":"19898:3:70","nodeType":"YulIdentifier","src":"19898:3:70"},"nativeSrc":"19898:18:70","nodeType":"YulFunctionCall","src":"19898:18:70"}],"functionName":{"name":"mstore","nativeSrc":"19885:6:70","nodeType":"YulIdentifier","src":"19885:6:70"},"nativeSrc":"19885:32:70","nodeType":"YulFunctionCall","src":"19885:32:70"},"nativeSrc":"19885:32:70","nodeType":"YulExpressionStatement","src":"19885:32:70"}]},"evmVersion":"cancun","externalReferences":[{"declaration":13599,"isOffset":false,"isSlot":false,"src":"19635:4:70","valueSize":1},{"declaration":13599,"isOffset":false,"isSlot":false,"src":"19804:4:70","valueSize":1},{"declaration":13599,"isOffset":false,"isSlot":false,"src":"19911:4:70","valueSize":1},{"declaration":13585,"isOffset":false,"isSlot":false,"src":"19464:6:70","valueSize":1},{"declaration":13585,"isOffset":false,"isSlot":false,"src":"19617:6:70","valueSize":1},{"declaration":13585,"isOffset":false,"isSlot":false,"src":"19796:6:70","valueSize":1},{"declaration":13583,"isOffset":false,"isSlot":false,"src":"19567:7:70","valueSize":1}],"flags":["memory-safe"],"id":13617,"nodeType":"InlineAssembly","src":"19406:521:70"}]},"documentation":{"id":13574,"nodeType":"StructuredDocumentation","src":"18914:88:70","text":" @dev Variant of {tryModExp} that supports inputs of arbitrary length."},"id":13619,"implemented":true,"kind":"function","modifiers":[],"name":"tryModExp","nameLocation":"19016:9:70","nodeType":"FunctionDefinition","parameters":{"id":13581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13576,"mutability":"mutable","name":"b","nameLocation":"19048:1:70","nodeType":"VariableDeclaration","scope":13619,"src":"19035:14:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13575,"name":"bytes","nodeType":"ElementaryTypeName","src":"19035:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":13578,"mutability":"mutable","name":"e","nameLocation":"19072:1:70","nodeType":"VariableDeclaration","scope":13619,"src":"19059:14:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13577,"name":"bytes","nodeType":"ElementaryTypeName","src":"19059:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":13580,"mutability":"mutable","name":"m","nameLocation":"19096:1:70","nodeType":"VariableDeclaration","scope":13619,"src":"19083:14:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13579,"name":"bytes","nodeType":"ElementaryTypeName","src":"19083:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19025:78:70"},"returnParameters":{"id":13586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13583,"mutability":"mutable","name":"success","nameLocation":"19132:7:70","nodeType":"VariableDeclaration","scope":13619,"src":"19127:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13582,"name":"bool","nodeType":"ElementaryTypeName","src":"19127:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":13585,"mutability":"mutable","name":"result","nameLocation":"19154:6:70","nodeType":"VariableDeclaration","scope":13619,"src":"19141:19:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13584,"name":"bytes","nodeType":"ElementaryTypeName","src":"19141:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19126:35:70"},"scope":14327,"src":"19007:926:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13651,"nodeType":"Block","src":"20088:176:70","statements":[{"body":{"id":13647,"nodeType":"Block","src":"20145:92:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":13642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":13638,"name":"byteArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"20163:9:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13640,"indexExpression":{"id":13639,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13628,"src":"20173:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20163:12:70","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13641,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20179:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20163:17:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13646,"nodeType":"IfStatement","src":"20159:68:70","trueBody":{"id":13645,"nodeType":"Block","src":"20182:45:70","statements":[{"expression":{"hexValue":"66616c7365","id":13643,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20207:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":13626,"id":13644,"nodeType":"Return","src":"20200:12:70"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13631,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13628,"src":"20118:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":13632,"name":"byteArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"20122:9:70","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20132:6:70","memberName":"length","nodeType":"MemberAccess","src":"20122:16:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20118:20:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13648,"initializationExpression":{"assignments":[13628],"declarations":[{"constant":false,"id":13628,"mutability":"mutable","name":"i","nameLocation":"20111:1:70","nodeType":"VariableDeclaration","scope":13648,"src":"20103:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13627,"name":"uint256","nodeType":"ElementaryTypeName","src":"20103:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13630,"initialValue":{"hexValue":"30","id":13629,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20115:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"20103:13:70"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":13636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"20140:3:70","subExpression":{"id":13635,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13628,"src":"20142:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13637,"nodeType":"ExpressionStatement","src":"20140:3:70"},"nodeType":"ForStatement","src":"20098:139:70"},{"expression":{"hexValue":"74727565","id":13649,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20253:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":13626,"id":13650,"nodeType":"Return","src":"20246:11:70"}]},"documentation":{"id":13620,"nodeType":"StructuredDocumentation","src":"19939:72:70","text":" @dev Returns whether the provided byte array is zero."},"id":13652,"implemented":true,"kind":"function","modifiers":[],"name":"_zeroBytes","nameLocation":"20025:10:70","nodeType":"FunctionDefinition","parameters":{"id":13623,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13622,"mutability":"mutable","name":"byteArray","nameLocation":"20049:9:70","nodeType":"VariableDeclaration","scope":13652,"src":"20036:22:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13621,"name":"bytes","nodeType":"ElementaryTypeName","src":"20036:5:70","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"20035:24:70"},"returnParameters":{"id":13626,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13625,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13652,"src":"20082:4:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13624,"name":"bool","nodeType":"ElementaryTypeName","src":"20082:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"20081:6:70"},"scope":14327,"src":"20016:248:70","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":13870,"nodeType":"Block","src":"20624:5124:70","statements":[{"id":13869,"nodeType":"UncheckedBlock","src":"20634:5108:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13660,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"20728:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"31","id":13661,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20733:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"20728:6:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13666,"nodeType":"IfStatement","src":"20724:53:70","trueBody":{"id":13665,"nodeType":"Block","src":"20736:41:70","statements":[{"expression":{"id":13663,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"20761:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13659,"id":13664,"nodeType":"Return","src":"20754:8:70"}]}},{"assignments":[13668],"declarations":[{"constant":false,"id":13668,"mutability":"mutable","name":"aa","nameLocation":"21712:2:70","nodeType":"VariableDeclaration","scope":13869,"src":"21704:10:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13667,"name":"uint256","nodeType":"ElementaryTypeName","src":"21704:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13670,"initialValue":{"id":13669,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"21717:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21704:14:70"},{"assignments":[13672],"declarations":[{"constant":false,"id":13672,"mutability":"mutable","name":"xn","nameLocation":"21740:2:70","nodeType":"VariableDeclaration","scope":13869,"src":"21732:10:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13671,"name":"uint256","nodeType":"ElementaryTypeName","src":"21732:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13674,"initialValue":{"hexValue":"31","id":13673,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21745:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"21732:14:70"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13675,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"21765:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"},"id":13678,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13676,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21772:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"313238","id":13677,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21777:3:70","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"21772:8:70","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}}],"id":13679,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"21771:10:70","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}},"src":"21765:16:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13690,"nodeType":"IfStatement","src":"21761:92:70","trueBody":{"id":13689,"nodeType":"Block","src":"21783:70:70","statements":[{"expression":{"id":13683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13681,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"21801:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"313238","id":13682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21808:3:70","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"21801:10:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13684,"nodeType":"ExpressionStatement","src":"21801:10:70"},{"expression":{"id":13687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13685,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"21829:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"3634","id":13686,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21836:2:70","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"21829:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13688,"nodeType":"ExpressionStatement","src":"21829:9:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13691,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"21870:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"},"id":13694,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13692,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21877:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3634","id":13693,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21882:2:70","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"21877:7:70","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"}}],"id":13695,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"21876:9:70","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"}},"src":"21870:15:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13706,"nodeType":"IfStatement","src":"21866:90:70","trueBody":{"id":13705,"nodeType":"Block","src":"21887:69:70","statements":[{"expression":{"id":13699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13697,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"21905:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3634","id":13698,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21912:2:70","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"21905:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13700,"nodeType":"ExpressionStatement","src":"21905:9:70"},{"expression":{"id":13703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13701,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"21932:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"3332","id":13702,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21939:2:70","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"21932:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13704,"nodeType":"ExpressionStatement","src":"21932:9:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13707,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"21973:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"},"id":13710,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13708,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21980:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3332","id":13709,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21985:2:70","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"21980:7:70","typeDescriptions":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"}}],"id":13711,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"21979:9:70","typeDescriptions":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"}},"src":"21973:15:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13722,"nodeType":"IfStatement","src":"21969:90:70","trueBody":{"id":13721,"nodeType":"Block","src":"21990:69:70","statements":[{"expression":{"id":13715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13713,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"22008:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3332","id":13714,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22015:2:70","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"22008:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13716,"nodeType":"ExpressionStatement","src":"22008:9:70"},{"expression":{"id":13719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13717,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"22035:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"3136","id":13718,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22042:2:70","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"22035:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13720,"nodeType":"ExpressionStatement","src":"22035:9:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13723,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"22076:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"},"id":13726,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22083:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3136","id":13725,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22088:2:70","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"22083:7:70","typeDescriptions":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"}}],"id":13727,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22082:9:70","typeDescriptions":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"}},"src":"22076:15:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13738,"nodeType":"IfStatement","src":"22072:89:70","trueBody":{"id":13737,"nodeType":"Block","src":"22093:68:70","statements":[{"expression":{"id":13731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13729,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"22111:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3136","id":13730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22118:2:70","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"22111:9:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13732,"nodeType":"ExpressionStatement","src":"22111:9:70"},{"expression":{"id":13735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13733,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"22138:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"38","id":13734,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22145:1:70","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"22138:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13736,"nodeType":"ExpressionStatement","src":"22138:8:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13739,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"22178:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"id":13742,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22185:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"38","id":13741,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22190:1:70","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"22185:6:70","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"}}],"id":13743,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22184:8:70","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"}},"src":"22178:14:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13754,"nodeType":"IfStatement","src":"22174:87:70","trueBody":{"id":13753,"nodeType":"Block","src":"22194:67:70","statements":[{"expression":{"id":13747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13745,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"22212:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"38","id":13746,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22219:1:70","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"22212:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13748,"nodeType":"ExpressionStatement","src":"22212:8:70"},{"expression":{"id":13751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13749,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"22238:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"34","id":13750,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22245:1:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"22238:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13752,"nodeType":"ExpressionStatement","src":"22238:8:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13755,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"22278:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"id":13758,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22285:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"34","id":13757,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22290:1:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"22285:6:70","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"}}],"id":13759,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22284:8:70","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"}},"src":"22278:14:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13770,"nodeType":"IfStatement","src":"22274:87:70","trueBody":{"id":13769,"nodeType":"Block","src":"22294:67:70","statements":[{"expression":{"id":13763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13761,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"22312:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":13762,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22319:1:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"22312:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13764,"nodeType":"ExpressionStatement","src":"22312:8:70"},{"expression":{"id":13767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13765,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"22338:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"32","id":13766,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22345:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22338:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13768,"nodeType":"ExpressionStatement","src":"22338:8:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13771,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13668,"src":"22378:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"id":13774,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22385:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"32","id":13773,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22390:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22385:6:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"}}],"id":13775,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22384:8:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"}},"src":"22378:14:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13782,"nodeType":"IfStatement","src":"22374:61:70","trueBody":{"id":13781,"nodeType":"Block","src":"22394:41:70","statements":[{"expression":{"id":13779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13777,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"22412:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"31","id":13778,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22419:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"22412:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13780,"nodeType":"ExpressionStatement","src":"22412:8:70"}]}},{"expression":{"id":13790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13783,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"22855:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"33","id":13784,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22861:1:70","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13785,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"22865:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22861:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13787,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22860:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13788,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22872:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"22860:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22855:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13791,"nodeType":"ExpressionStatement","src":"22855:18:70"},{"expression":{"id":13801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13792,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"24760:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13793,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"24766:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13794,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"24771:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13795,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"24775:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24771:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24766:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13798,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24765:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24782:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"24765:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24760:23:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13802,"nodeType":"ExpressionStatement","src":"24760:23:70"},{"expression":{"id":13812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13803,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"24869:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13804,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"24875:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13805,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"24880:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13806,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"24884:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24880:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24875:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13809,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24874:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24891:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"24874:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24869:23:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13813,"nodeType":"ExpressionStatement","src":"24869:23:70"},{"expression":{"id":13823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13814,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"24980:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13815,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"24986:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13816,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"24991:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13817,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"24995:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24991:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24986:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13820,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24985:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13821,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25002:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"24985:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24980:23:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13824,"nodeType":"ExpressionStatement","src":"24980:23:70"},{"expression":{"id":13834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13825,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25089:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13826,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25095:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13827,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"25100:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13828,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25104:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25100:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25095:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13831,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"25094:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25111:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25094:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25089:23:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13835,"nodeType":"ExpressionStatement","src":"25089:23:70"},{"expression":{"id":13845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13836,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25199:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13837,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25205:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13838,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"25210:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13839,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25214:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25210:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25205:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13842,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"25204:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13843,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25221:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25204:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25199:23:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13846,"nodeType":"ExpressionStatement","src":"25199:23:70"},{"expression":{"id":13856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13847,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25309:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13848,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25315:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13849,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"25320:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13850,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25324:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25320:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25315:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13853,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"25314:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13854,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25331:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25314:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25309:23:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13857,"nodeType":"ExpressionStatement","src":"25309:23:70"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13858,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25698:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13861,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25719:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13862,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13655,"src":"25724:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13863,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13672,"src":"25728:2:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25724:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25719:11:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13859,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"25703:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25712:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"25703:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25703:28:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25698:33:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13659,"id":13868,"nodeType":"Return","src":"25691:40:70"}]}]},"documentation":{"id":13653,"nodeType":"StructuredDocumentation","src":"20270:292:70","text":" @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n towards zero.\n This method is based on Newton's method for computing square roots; the algorithm is restricted to only\n using integer operations."},"id":13871,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"20576:4:70","nodeType":"FunctionDefinition","parameters":{"id":13656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13655,"mutability":"mutable","name":"a","nameLocation":"20589:1:70","nodeType":"VariableDeclaration","scope":13871,"src":"20581:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13654,"name":"uint256","nodeType":"ElementaryTypeName","src":"20581:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20580:11:70"},"returnParameters":{"id":13659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13658,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13871,"src":"20615:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13657,"name":"uint256","nodeType":"ElementaryTypeName","src":"20615:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20614:9:70"},"scope":14327,"src":"20567:5181:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13904,"nodeType":"Block","src":"25921:171:70","statements":[{"id":13903,"nodeType":"UncheckedBlock","src":"25931:155:70","statements":[{"assignments":[13883],"declarations":[{"constant":false,"id":13883,"mutability":"mutable","name":"result","nameLocation":"25963:6:70","nodeType":"VariableDeclaration","scope":13903,"src":"25955:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13882,"name":"uint256","nodeType":"ElementaryTypeName","src":"25955:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13887,"initialValue":{"arguments":[{"id":13885,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13874,"src":"25977:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13884,"name":"sqrt","nodeType":"Identifier","overloadedDeclarations":[13871,13905],"referencedDeclaration":13871,"src":"25972:4:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":13886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25972:7:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25955:24:70"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13888,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13883,"src":"26000:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13892,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13877,"src":"26042:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}],"id":13891,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14326,"src":"26025:16:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$12718_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":13893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26025:26:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13894,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13883,"src":"26055:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13895,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13883,"src":"26064:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26055:15:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":13897,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13874,"src":"26073:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26055:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"26025:49:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13889,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"26009:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26018:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"26009:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26009:66:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26000:75:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13881,"id":13902,"nodeType":"Return","src":"25993:82:70"}]}]},"documentation":{"id":13872,"nodeType":"StructuredDocumentation","src":"25754:86:70","text":" @dev Calculates sqrt(a), following the selected rounding direction."},"id":13905,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"25854:4:70","nodeType":"FunctionDefinition","parameters":{"id":13878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13874,"mutability":"mutable","name":"a","nameLocation":"25867:1:70","nodeType":"VariableDeclaration","scope":13905,"src":"25859:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13873,"name":"uint256","nodeType":"ElementaryTypeName","src":"25859:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13877,"mutability":"mutable","name":"rounding","nameLocation":"25879:8:70","nodeType":"VariableDeclaration","scope":13905,"src":"25870:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"},"typeName":{"id":13876,"nodeType":"UserDefinedTypeName","pathNode":{"id":13875,"name":"Rounding","nameLocations":["25870:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":12718,"src":"25870:8:70"},"referencedDeclaration":12718,"src":"25870:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"25858:30:70"},"returnParameters":{"id":13881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13880,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13905,"src":"25912:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13879,"name":"uint256","nodeType":"ElementaryTypeName","src":"25912:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25911:9:70"},"scope":14327,"src":"25845:247:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13995,"nodeType":"Block","src":"26281:2334:70","statements":[{"expression":{"id":13922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13913,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26363:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13916,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13908,"src":"26383:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666666666666666666666666666666666666666666666666666666666666666","id":13917,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26387:34:70","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"},"value":"0xffffffffffffffffffffffffffffffff"},"src":"26383:38:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13914,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"26367:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26376:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"26367:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26367:55:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"37","id":13920,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26426:1:70","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"26367:60:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26363:64:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13923,"nodeType":"ExpressionStatement","src":"26363:64:70"},{"expression":{"id":13936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13924,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26503:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13927,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13908,"src":"26525:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13928,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26530:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26525:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13930,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"26524:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866666666666666666666666666666666","id":13931,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26535:18:70","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551615_by_1","typeString":"int_const 18446744073709551615"},"value":"0xffffffffffffffff"},"src":"26524:29:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13925,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"26508:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26517:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"26508:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26508:46:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"36","id":13934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26558:1:70","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"26508:51:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26503:56:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13937,"nodeType":"ExpressionStatement","src":"26503:56:70"},{"expression":{"id":13950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13938,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26634:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13941,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13908,"src":"26656:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13942,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26661:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26656:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13944,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"26655:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666666666666666","id":13945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26666:10:70","typeDescriptions":{"typeIdentifier":"t_rational_4294967295_by_1","typeString":"int_const 4294967295"},"value":"0xffffffff"},"src":"26655:21:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13939,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"26639:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26648:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"26639:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26639:38:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"35","id":13948,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26681:1:70","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"26639:43:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26634:48:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13951,"nodeType":"ExpressionStatement","src":"26634:48:70"},{"expression":{"id":13964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13952,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26757:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13955,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13908,"src":"26779:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13956,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26784:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26779:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13958,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"26778:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866666666","id":13959,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26789:6:70","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"0xffff"},"src":"26778:17:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13953,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"26762:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26771:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"26762:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26762:34:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"34","id":13962,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26800:1:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"26762:39:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26757:44:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13965,"nodeType":"ExpressionStatement","src":"26757:44:70"},{"expression":{"id":13978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13966,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26874:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13969,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13908,"src":"26896:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13970,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26901:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26896:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13972,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"26895:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666","id":13973,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26906:4:70","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"},"src":"26895:15:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13967,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"26879:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26888:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"26879:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26879:32:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"33","id":13976,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26915:1:70","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"26879:37:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26874:42:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13979,"nodeType":"ExpressionStatement","src":"26874:42:70"},{"expression":{"id":13992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13980,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"26988:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13983,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13908,"src":"27010:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13984,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13911,"src":"27015:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27010:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13986,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27009:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866","id":13987,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27020:3:70","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"0xf"},"src":"27009:14:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13981,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"26993:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":13982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27002:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"26993:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26993:31:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"32","id":13990,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27028:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"26993:36:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26988:41:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13993,"nodeType":"ExpressionStatement","src":"26988:41:70"},{"AST":{"nativeSrc":"28490:119:70","nodeType":"YulBlock","src":"28490:119:70","statements":[{"nativeSrc":"28504:95:70","nodeType":"YulAssignment","src":"28504:95:70","value":{"arguments":[{"name":"r","nativeSrc":"28512:1:70","nodeType":"YulIdentifier","src":"28512:1:70"},{"arguments":[{"arguments":[{"name":"r","nativeSrc":"28524:1:70","nodeType":"YulIdentifier","src":"28524:1:70"},{"name":"x","nativeSrc":"28527:1:70","nodeType":"YulIdentifier","src":"28527:1:70"}],"functionName":{"name":"shr","nativeSrc":"28520:3:70","nodeType":"YulIdentifier","src":"28520:3:70"},"nativeSrc":"28520:9:70","nodeType":"YulFunctionCall","src":"28520:9:70"},{"kind":"number","nativeSrc":"28531:66:70","nodeType":"YulLiteral","src":"28531:66:70","type":"","value":"0x0000010102020202030303030303030300000000000000000000000000000000"}],"functionName":{"name":"byte","nativeSrc":"28515:4:70","nodeType":"YulIdentifier","src":"28515:4:70"},"nativeSrc":"28515:83:70","nodeType":"YulFunctionCall","src":"28515:83:70"}],"functionName":{"name":"or","nativeSrc":"28509:2:70","nodeType":"YulIdentifier","src":"28509:2:70"},"nativeSrc":"28509:90:70","nodeType":"YulFunctionCall","src":"28509:90:70"},"variableNames":[{"name":"r","nativeSrc":"28504:1:70","nodeType":"YulIdentifier","src":"28504:1:70"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":13911,"isOffset":false,"isSlot":false,"src":"28504:1:70","valueSize":1},{"declaration":13911,"isOffset":false,"isSlot":false,"src":"28512:1:70","valueSize":1},{"declaration":13911,"isOffset":false,"isSlot":false,"src":"28524:1:70","valueSize":1},{"declaration":13908,"isOffset":false,"isSlot":false,"src":"28527:1:70","valueSize":1}],"flags":["memory-safe"],"id":13994,"nodeType":"InlineAssembly","src":"28465:144:70"}]},"documentation":{"id":13906,"nodeType":"StructuredDocumentation","src":"26098:119:70","text":" @dev Return the log in base 2 of a positive value rounded towards zero.\n Returns 0 if given 0."},"id":13996,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"26231:4:70","nodeType":"FunctionDefinition","parameters":{"id":13909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13908,"mutability":"mutable","name":"x","nameLocation":"26244:1:70","nodeType":"VariableDeclaration","scope":13996,"src":"26236:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13907,"name":"uint256","nodeType":"ElementaryTypeName","src":"26236:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26235:11:70"},"returnParameters":{"id":13912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13911,"mutability":"mutable","name":"r","nameLocation":"26278:1:70","nodeType":"VariableDeclaration","scope":13996,"src":"26270:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13910,"name":"uint256","nodeType":"ElementaryTypeName","src":"26270:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26269:11:70"},"scope":14327,"src":"26222:2393:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14029,"nodeType":"Block","src":"28848:175:70","statements":[{"id":14028,"nodeType":"UncheckedBlock","src":"28858:159:70","statements":[{"assignments":[14008],"declarations":[{"constant":false,"id":14008,"mutability":"mutable","name":"result","nameLocation":"28890:6:70","nodeType":"VariableDeclaration","scope":14028,"src":"28882:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14007,"name":"uint256","nodeType":"ElementaryTypeName","src":"28882:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14012,"initialValue":{"arguments":[{"id":14010,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13999,"src":"28904:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14009,"name":"log2","nodeType":"Identifier","overloadedDeclarations":[13996,14030],"referencedDeclaration":13996,"src":"28899:4:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":14011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28899:11:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28882:28:70"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14013,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14008,"src":"28931:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":14017,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14002,"src":"28973:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}],"id":14016,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14326,"src":"28956:16:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$12718_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":14018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28956:26:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":14019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28986:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":14020,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14008,"src":"28991:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28986:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":14022,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13999,"src":"29000:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28986:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"28956:49:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14014,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"28940:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":14015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28949:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"28940:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28940:66:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28931:75:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14006,"id":14027,"nodeType":"Return","src":"28924:82:70"}]}]},"documentation":{"id":13997,"nodeType":"StructuredDocumentation","src":"28621:142:70","text":" @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":14030,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"28777:4:70","nodeType":"FunctionDefinition","parameters":{"id":14003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13999,"mutability":"mutable","name":"value","nameLocation":"28790:5:70","nodeType":"VariableDeclaration","scope":14030,"src":"28782:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13998,"name":"uint256","nodeType":"ElementaryTypeName","src":"28782:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14002,"mutability":"mutable","name":"rounding","nameLocation":"28806:8:70","nodeType":"VariableDeclaration","scope":14030,"src":"28797:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"},"typeName":{"id":14001,"nodeType":"UserDefinedTypeName","pathNode":{"id":14000,"name":"Rounding","nameLocations":["28797:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":12718,"src":"28797:8:70"},"referencedDeclaration":12718,"src":"28797:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"28781:34:70"},"returnParameters":{"id":14006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14005,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14030,"src":"28839:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14004,"name":"uint256","nodeType":"ElementaryTypeName","src":"28839:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"28838:9:70"},"scope":14327,"src":"28768:255:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14158,"nodeType":"Block","src":"29216:854:70","statements":[{"assignments":[14039],"declarations":[{"constant":false,"id":14039,"mutability":"mutable","name":"result","nameLocation":"29234:6:70","nodeType":"VariableDeclaration","scope":14158,"src":"29226:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14038,"name":"uint256","nodeType":"ElementaryTypeName","src":"29226:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14041,"initialValue":{"hexValue":"30","id":14040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29243:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"29226:18:70"},{"id":14155,"nodeType":"UncheckedBlock","src":"29254:787:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14042,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29282:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"},"id":14045,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14043,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29291:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":14044,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29297:2:70","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"29291:8:70","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"29282:17:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14058,"nodeType":"IfStatement","src":"29278:103:70","trueBody":{"id":14057,"nodeType":"Block","src":"29301:80:70","statements":[{"expression":{"id":14051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14047,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29319:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"},"id":14050,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14048,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29328:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":14049,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29334:2:70","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"29328:8:70","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"29319:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14052,"nodeType":"ExpressionStatement","src":"29319:17:70"},{"expression":{"id":14055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14053,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14039,"src":"29354:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3634","id":14054,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29364:2:70","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"29354:12:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14056,"nodeType":"ExpressionStatement","src":"29354:12:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14059,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29398:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"},"id":14062,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14060,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29407:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":14061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29413:2:70","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"29407:8:70","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"29398:17:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14075,"nodeType":"IfStatement","src":"29394:103:70","trueBody":{"id":14074,"nodeType":"Block","src":"29417:80:70","statements":[{"expression":{"id":14068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14064,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29435:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"},"id":14067,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14065,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29444:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":14066,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29450:2:70","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"29444:8:70","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"29435:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14069,"nodeType":"ExpressionStatement","src":"29435:17:70"},{"expression":{"id":14072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14070,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14039,"src":"29470:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":14071,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29480:2:70","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"29470:12:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14073,"nodeType":"ExpressionStatement","src":"29470:12:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14076,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29514:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":14079,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14077,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29523:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":14078,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29529:2:70","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"29523:8:70","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"29514:17:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14092,"nodeType":"IfStatement","src":"29510:103:70","trueBody":{"id":14091,"nodeType":"Block","src":"29533:80:70","statements":[{"expression":{"id":14085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14081,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29551:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":14084,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14082,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29560:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":14083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29566:2:70","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"29560:8:70","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"29551:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14086,"nodeType":"ExpressionStatement","src":"29551:17:70"},{"expression":{"id":14089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14087,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14039,"src":"29586:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":14088,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29596:2:70","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"29586:12:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14090,"nodeType":"ExpressionStatement","src":"29586:12:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14093,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29630:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":14096,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29639:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":14095,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29645:1:70","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"29639:7:70","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"29630:16:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14109,"nodeType":"IfStatement","src":"29626:100:70","trueBody":{"id":14108,"nodeType":"Block","src":"29648:78:70","statements":[{"expression":{"id":14102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14098,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29666:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":14101,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14099,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29675:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":14100,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29681:1:70","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"29675:7:70","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"29666:16:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14103,"nodeType":"ExpressionStatement","src":"29666:16:70"},{"expression":{"id":14106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14104,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14039,"src":"29700:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":14105,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29710:1:70","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"29700:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14107,"nodeType":"ExpressionStatement","src":"29700:11:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14110,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29743:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":14113,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29752:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":14112,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29758:1:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"29752:7:70","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"29743:16:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14126,"nodeType":"IfStatement","src":"29739:100:70","trueBody":{"id":14125,"nodeType":"Block","src":"29761:78:70","statements":[{"expression":{"id":14119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14115,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29779:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":14118,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29788:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":14117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29794:1:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"29788:7:70","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"29779:16:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14120,"nodeType":"ExpressionStatement","src":"29779:16:70"},{"expression":{"id":14123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14121,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14039,"src":"29813:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":14122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29823:1:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"29813:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14124,"nodeType":"ExpressionStatement","src":"29813:11:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14127,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29856:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":14130,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29865:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":14129,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29871:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"29865:7:70","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"29856:16:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14143,"nodeType":"IfStatement","src":"29852:100:70","trueBody":{"id":14142,"nodeType":"Block","src":"29874:78:70","statements":[{"expression":{"id":14136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14132,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29892:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":14135,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14133,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29901:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":14134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29907:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"29901:7:70","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"29892:16:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14137,"nodeType":"ExpressionStatement","src":"29892:16:70"},{"expression":{"id":14140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14138,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14039,"src":"29926:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":14139,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29936:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"29926:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14141,"nodeType":"ExpressionStatement","src":"29926:11:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14144,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14033,"src":"29969:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"id":14147,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14145,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29978:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"31","id":14146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29984:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"29978:7:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"}},"src":"29969:16:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14154,"nodeType":"IfStatement","src":"29965:66:70","trueBody":{"id":14153,"nodeType":"Block","src":"29987:44:70","statements":[{"expression":{"id":14151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14149,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14039,"src":"30005:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":14150,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30015:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"30005:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14152,"nodeType":"ExpressionStatement","src":"30005:11:70"}]}}]},{"expression":{"id":14156,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14039,"src":"30057:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14037,"id":14157,"nodeType":"Return","src":"30050:13:70"}]},"documentation":{"id":14031,"nodeType":"StructuredDocumentation","src":"29029:120:70","text":" @dev Return the log in base 10 of a positive value rounded towards zero.\n Returns 0 if given 0."},"id":14159,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"29163:5:70","nodeType":"FunctionDefinition","parameters":{"id":14034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14033,"mutability":"mutable","name":"value","nameLocation":"29177:5:70","nodeType":"VariableDeclaration","scope":14159,"src":"29169:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14032,"name":"uint256","nodeType":"ElementaryTypeName","src":"29169:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29168:15:70"},"returnParameters":{"id":14037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14036,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14159,"src":"29207:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14035,"name":"uint256","nodeType":"ElementaryTypeName","src":"29207:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29206:9:70"},"scope":14327,"src":"29154:916:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14192,"nodeType":"Block","src":"30305:177:70","statements":[{"id":14191,"nodeType":"UncheckedBlock","src":"30315:161:70","statements":[{"assignments":[14171],"declarations":[{"constant":false,"id":14171,"mutability":"mutable","name":"result","nameLocation":"30347:6:70","nodeType":"VariableDeclaration","scope":14191,"src":"30339:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14170,"name":"uint256","nodeType":"ElementaryTypeName","src":"30339:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14175,"initialValue":{"arguments":[{"id":14173,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14162,"src":"30362:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14172,"name":"log10","nodeType":"Identifier","overloadedDeclarations":[14159,14193],"referencedDeclaration":14159,"src":"30356:5:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":14174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30356:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30339:29:70"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14176,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14171,"src":"30389:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":14180,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14165,"src":"30431:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}],"id":14179,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14326,"src":"30414:16:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$12718_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":14181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30414:26:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14182,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30444:2:70","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":14183,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14171,"src":"30450:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30444:12:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":14185,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14162,"src":"30459:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30444:20:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"30414:50:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14177,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"30398:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":14178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30407:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"30398:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30398:67:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30389:76:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14169,"id":14190,"nodeType":"Return","src":"30382:83:70"}]}]},"documentation":{"id":14160,"nodeType":"StructuredDocumentation","src":"30076:143:70","text":" @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":14193,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"30233:5:70","nodeType":"FunctionDefinition","parameters":{"id":14166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14162,"mutability":"mutable","name":"value","nameLocation":"30247:5:70","nodeType":"VariableDeclaration","scope":14193,"src":"30239:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14161,"name":"uint256","nodeType":"ElementaryTypeName","src":"30239:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14165,"mutability":"mutable","name":"rounding","nameLocation":"30263:8:70","nodeType":"VariableDeclaration","scope":14193,"src":"30254:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"},"typeName":{"id":14164,"nodeType":"UserDefinedTypeName","pathNode":{"id":14163,"name":"Rounding","nameLocations":["30254:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":12718,"src":"30254:8:70"},"referencedDeclaration":12718,"src":"30254:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"30238:34:70"},"returnParameters":{"id":14169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14168,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14193,"src":"30296:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14167,"name":"uint256","nodeType":"ElementaryTypeName","src":"30296:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30295:9:70"},"scope":14327,"src":"30224:258:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14269,"nodeType":"Block","src":"30800:675:70","statements":[{"expression":{"id":14210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14201,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14199,"src":"30882:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14204,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14196,"src":"30902:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666666666666666666666666666666666666666666666666666666666666666","id":14205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30906:34:70","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"},"value":"0xffffffffffffffffffffffffffffffff"},"src":"30902:38:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14202,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"30886:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":14203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30895:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"30886:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30886:55:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"37","id":14208,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30945:1:70","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"30886:60:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30882:64:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14211,"nodeType":"ExpressionStatement","src":"30882:64:70"},{"expression":{"id":14224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14212,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14199,"src":"31022:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14215,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14196,"src":"31044:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":14216,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14199,"src":"31049:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31044:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14218,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31043:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866666666666666666666666666666666","id":14219,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31054:18:70","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551615_by_1","typeString":"int_const 18446744073709551615"},"value":"0xffffffffffffffff"},"src":"31043:29:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14213,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"31027:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":14214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31036:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"31027:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31027:46:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"36","id":14222,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31077:1:70","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"31027:51:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31022:56:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14225,"nodeType":"ExpressionStatement","src":"31022:56:70"},{"expression":{"id":14238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14226,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14199,"src":"31153:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14229,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14196,"src":"31175:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":14230,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14199,"src":"31180:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31175:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14232,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31174:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666666666666666","id":14233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31185:10:70","typeDescriptions":{"typeIdentifier":"t_rational_4294967295_by_1","typeString":"int_const 4294967295"},"value":"0xffffffff"},"src":"31174:21:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14227,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"31158:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":14228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31167:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"31158:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31158:38:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"35","id":14236,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31200:1:70","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"31158:43:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31153:48:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14239,"nodeType":"ExpressionStatement","src":"31153:48:70"},{"expression":{"id":14252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14240,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14199,"src":"31276:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14243,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14196,"src":"31298:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":14244,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14199,"src":"31303:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31298:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14246,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31297:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866666666","id":14247,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31308:6:70","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"0xffff"},"src":"31297:17:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14241,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"31281:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":14242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31290:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"31281:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31281:34:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"34","id":14250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31319:1:70","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"31281:39:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31276:44:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14253,"nodeType":"ExpressionStatement","src":"31276:44:70"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14254,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14199,"src":"31426:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"33","id":14255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31431:1:70","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"31426:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14257,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31425:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14260,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14196,"src":"31453:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":14261,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14199,"src":"31458:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31453:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14263,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31452:8:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666","id":14264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31463:4:70","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"},"src":"31452:15:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14258,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"31436:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":14259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31445:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"31436:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31436:32:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31425:43:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14200,"id":14268,"nodeType":"Return","src":"31418:50:70"}]},"documentation":{"id":14194,"nodeType":"StructuredDocumentation","src":"30488:246:70","text":" @dev Return the log in base 256 of a positive value rounded towards zero.\n Returns 0 if given 0.\n Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string."},"id":14270,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"30748:6:70","nodeType":"FunctionDefinition","parameters":{"id":14197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14196,"mutability":"mutable","name":"x","nameLocation":"30763:1:70","nodeType":"VariableDeclaration","scope":14270,"src":"30755:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14195,"name":"uint256","nodeType":"ElementaryTypeName","src":"30755:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30754:11:70"},"returnParameters":{"id":14200,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14199,"mutability":"mutable","name":"r","nameLocation":"30797:1:70","nodeType":"VariableDeclaration","scope":14270,"src":"30789:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14198,"name":"uint256","nodeType":"ElementaryTypeName","src":"30789:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30788:11:70"},"scope":14327,"src":"30739:736:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14306,"nodeType":"Block","src":"31712:184:70","statements":[{"id":14305,"nodeType":"UncheckedBlock","src":"31722:168:70","statements":[{"assignments":[14282],"declarations":[{"constant":false,"id":14282,"mutability":"mutable","name":"result","nameLocation":"31754:6:70","nodeType":"VariableDeclaration","scope":14305,"src":"31746:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14281,"name":"uint256","nodeType":"ElementaryTypeName","src":"31746:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14286,"initialValue":{"arguments":[{"id":14284,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14273,"src":"31770:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14283,"name":"log256","nodeType":"Identifier","overloadedDeclarations":[14270,14307],"referencedDeclaration":14270,"src":"31763:6:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":14285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31763:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"31746:30:70"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14287,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14282,"src":"31797:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":14291,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14276,"src":"31839:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}],"id":14290,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14326,"src":"31822:16:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$12718_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":14292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31822:26:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":14293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31852:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14294,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14282,"src":"31858:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"33","id":14295,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31868:1:70","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"31858:11:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14297,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31857:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31852:18:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":14299,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14273,"src":"31873:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31852:26:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"31822:56:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14288,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"31806:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16092_$","typeString":"type(library SafeCast)"}},"id":14289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31815:6:70","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"31806:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31806:73:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31797:82:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14280,"id":14304,"nodeType":"Return","src":"31790:89:70"}]}]},"documentation":{"id":14271,"nodeType":"StructuredDocumentation","src":"31481:144:70","text":" @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":14307,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"31639:6:70","nodeType":"FunctionDefinition","parameters":{"id":14277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14273,"mutability":"mutable","name":"value","nameLocation":"31654:5:70","nodeType":"VariableDeclaration","scope":14307,"src":"31646:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14272,"name":"uint256","nodeType":"ElementaryTypeName","src":"31646:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14276,"mutability":"mutable","name":"rounding","nameLocation":"31670:8:70","nodeType":"VariableDeclaration","scope":14307,"src":"31661:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"},"typeName":{"id":14275,"nodeType":"UserDefinedTypeName","pathNode":{"id":14274,"name":"Rounding","nameLocations":["31661:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":12718,"src":"31661:8:70"},"referencedDeclaration":12718,"src":"31661:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"31645:34:70"},"returnParameters":{"id":14280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14279,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14307,"src":"31703:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14278,"name":"uint256","nodeType":"ElementaryTypeName","src":"31703:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31702:9:70"},"scope":14327,"src":"31630:266:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14325,"nodeType":"Block","src":"32094:48:70","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":14323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":14321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":14318,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14311,"src":"32117:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}],"id":14317,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32111:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":14316,"name":"uint8","nodeType":"ElementaryTypeName","src":"32111:5:70","typeDescriptions":{}}},"id":14319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32111:15:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"hexValue":"32","id":14320,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32129:1:70","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"32111:19:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":14322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32134:1:70","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"32111:24:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":14315,"id":14324,"nodeType":"Return","src":"32104:31:70"}]},"documentation":{"id":14308,"nodeType":"StructuredDocumentation","src":"31902:113:70","text":" @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers."},"id":14326,"implemented":true,"kind":"function","modifiers":[],"name":"unsignedRoundsUp","nameLocation":"32029:16:70","nodeType":"FunctionDefinition","parameters":{"id":14312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14311,"mutability":"mutable","name":"rounding","nameLocation":"32055:8:70","nodeType":"VariableDeclaration","scope":14326,"src":"32046:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"},"typeName":{"id":14310,"nodeType":"UserDefinedTypeName","pathNode":{"id":14309,"name":"Rounding","nameLocations":["32046:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":12718,"src":"32046:8:70"},"referencedDeclaration":12718,"src":"32046:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12718","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"32045:19:70"},"returnParameters":{"id":14315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14314,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14326,"src":"32088:4:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14313,"name":"bool","nodeType":"ElementaryTypeName","src":"32088:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"32087:6:70"},"scope":14327,"src":"32020:122:70","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":14328,"src":"281:31863:70","usedErrors":[],"usedEvents":[]}],"src":"103:32042:70"},"id":70},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","exportedSymbols":{"SafeCast":[16092]},"id":16093,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":14329,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"192:24:71"},{"abstract":false,"baseContracts":[],"canonicalName":"SafeCast","contractDependencies":[],"contractKind":"library","documentation":{"id":14330,"nodeType":"StructuredDocumentation","src":"218:550:71","text":" @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always."},"fullyImplemented":true,"id":16092,"linearizedBaseContracts":[16092],"name":"SafeCast","nameLocation":"777:8:71","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":14331,"nodeType":"StructuredDocumentation","src":"792:68:71","text":" @dev Value doesn't fit in an uint of `bits` size."},"errorSelector":"6dfcc650","id":14337,"name":"SafeCastOverflowedUintDowncast","nameLocation":"871:30:71","nodeType":"ErrorDefinition","parameters":{"id":14336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14333,"mutability":"mutable","name":"bits","nameLocation":"908:4:71","nodeType":"VariableDeclaration","scope":14337,"src":"902:10:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":14332,"name":"uint8","nodeType":"ElementaryTypeName","src":"902:5:71","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":14335,"mutability":"mutable","name":"value","nameLocation":"922:5:71","nodeType":"VariableDeclaration","scope":14337,"src":"914:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14334,"name":"uint256","nodeType":"ElementaryTypeName","src":"914:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"901:27:71"},"src":"865:64:71"},{"documentation":{"id":14338,"nodeType":"StructuredDocumentation","src":"935:75:71","text":" @dev An int value doesn't fit in an uint of `bits` size."},"errorSelector":"a8ce4432","id":14342,"name":"SafeCastOverflowedIntToUint","nameLocation":"1021:27:71","nodeType":"ErrorDefinition","parameters":{"id":14341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14340,"mutability":"mutable","name":"value","nameLocation":"1056:5:71","nodeType":"VariableDeclaration","scope":14342,"src":"1049:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":14339,"name":"int256","nodeType":"ElementaryTypeName","src":"1049:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1048:14:71"},"src":"1015:48:71"},{"documentation":{"id":14343,"nodeType":"StructuredDocumentation","src":"1069:67:71","text":" @dev Value doesn't fit in an int of `bits` size."},"errorSelector":"327269a7","id":14349,"name":"SafeCastOverflowedIntDowncast","nameLocation":"1147:29:71","nodeType":"ErrorDefinition","parameters":{"id":14348,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14345,"mutability":"mutable","name":"bits","nameLocation":"1183:4:71","nodeType":"VariableDeclaration","scope":14349,"src":"1177:10:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":14344,"name":"uint8","nodeType":"ElementaryTypeName","src":"1177:5:71","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":14347,"mutability":"mutable","name":"value","nameLocation":"1196:5:71","nodeType":"VariableDeclaration","scope":14349,"src":"1189:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":14346,"name":"int256","nodeType":"ElementaryTypeName","src":"1189:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1176:26:71"},"src":"1141:62:71"},{"documentation":{"id":14350,"nodeType":"StructuredDocumentation","src":"1209:75:71","text":" @dev An uint value doesn't fit in an int of `bits` size."},"errorSelector":"24775e06","id":14354,"name":"SafeCastOverflowedUintToInt","nameLocation":"1295:27:71","nodeType":"ErrorDefinition","parameters":{"id":14353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14352,"mutability":"mutable","name":"value","nameLocation":"1331:5:71","nodeType":"VariableDeclaration","scope":14354,"src":"1323:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14351,"name":"uint256","nodeType":"ElementaryTypeName","src":"1323:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1322:15:71"},"src":"1289:49:71"},{"body":{"id":14381,"nodeType":"Block","src":"1695:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14362,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14357,"src":"1709:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14365,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1722:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":14364,"name":"uint248","nodeType":"ElementaryTypeName","src":"1722:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"}],"id":14363,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1717:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1717:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint248","typeString":"type(uint248)"}},"id":14367,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1731:3:71","memberName":"max","nodeType":"MemberAccess","src":"1717:17:71","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"src":"1709:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14375,"nodeType":"IfStatement","src":"1705:105:71","trueBody":{"id":14374,"nodeType":"Block","src":"1736:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":14370,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1788:3:71","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":14371,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14357,"src":"1793:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14369,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"1757:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1757:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14373,"nodeType":"RevertStatement","src":"1750:49:71"}]}},{"expression":{"arguments":[{"id":14378,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14357,"src":"1834:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14377,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1826:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":14376,"name":"uint248","nodeType":"ElementaryTypeName","src":"1826:7:71","typeDescriptions":{}}},"id":14379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1826:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"functionReturnParameters":14361,"id":14380,"nodeType":"Return","src":"1819:21:71"}]},"documentation":{"id":14355,"nodeType":"StructuredDocumentation","src":"1344:280:71","text":" @dev Returns the downcasted uint248 from uint256, reverting on\n overflow (when the input is greater than largest uint248).\n Counterpart to Solidity's `uint248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":14382,"implemented":true,"kind":"function","modifiers":[],"name":"toUint248","nameLocation":"1638:9:71","nodeType":"FunctionDefinition","parameters":{"id":14358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14357,"mutability":"mutable","name":"value","nameLocation":"1656:5:71","nodeType":"VariableDeclaration","scope":14382,"src":"1648:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14356,"name":"uint256","nodeType":"ElementaryTypeName","src":"1648:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1647:15:71"},"returnParameters":{"id":14361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14360,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14382,"src":"1686:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"},"typeName":{"id":14359,"name":"uint248","nodeType":"ElementaryTypeName","src":"1686:7:71","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"visibility":"internal"}],"src":"1685:9:71"},"scope":16092,"src":"1629:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14409,"nodeType":"Block","src":"2204:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14390,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14385,"src":"2218:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14393,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2231:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":14392,"name":"uint240","nodeType":"ElementaryTypeName","src":"2231:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"}],"id":14391,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2226:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2226:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint240","typeString":"type(uint240)"}},"id":14395,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2240:3:71","memberName":"max","nodeType":"MemberAccess","src":"2226:17:71","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"src":"2218:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14403,"nodeType":"IfStatement","src":"2214:105:71","trueBody":{"id":14402,"nodeType":"Block","src":"2245:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":14398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2297:3:71","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":14399,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14385,"src":"2302:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14397,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"2266:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2266:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14401,"nodeType":"RevertStatement","src":"2259:49:71"}]}},{"expression":{"arguments":[{"id":14406,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14385,"src":"2343:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14405,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2335:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":14404,"name":"uint240","nodeType":"ElementaryTypeName","src":"2335:7:71","typeDescriptions":{}}},"id":14407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2335:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"functionReturnParameters":14389,"id":14408,"nodeType":"Return","src":"2328:21:71"}]},"documentation":{"id":14383,"nodeType":"StructuredDocumentation","src":"1853:280:71","text":" @dev Returns the downcasted uint240 from uint256, reverting on\n overflow (when the input is greater than largest uint240).\n Counterpart to Solidity's `uint240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":14410,"implemented":true,"kind":"function","modifiers":[],"name":"toUint240","nameLocation":"2147:9:71","nodeType":"FunctionDefinition","parameters":{"id":14386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14385,"mutability":"mutable","name":"value","nameLocation":"2165:5:71","nodeType":"VariableDeclaration","scope":14410,"src":"2157:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14384,"name":"uint256","nodeType":"ElementaryTypeName","src":"2157:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2156:15:71"},"returnParameters":{"id":14389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14388,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14410,"src":"2195:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"},"typeName":{"id":14387,"name":"uint240","nodeType":"ElementaryTypeName","src":"2195:7:71","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"visibility":"internal"}],"src":"2194:9:71"},"scope":16092,"src":"2138:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14437,"nodeType":"Block","src":"2713:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14418,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14413,"src":"2727:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14421,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2740:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":14420,"name":"uint232","nodeType":"ElementaryTypeName","src":"2740:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"}],"id":14419,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2735:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14422,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2735:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint232","typeString":"type(uint232)"}},"id":14423,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2749:3:71","memberName":"max","nodeType":"MemberAccess","src":"2735:17:71","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"src":"2727:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14431,"nodeType":"IfStatement","src":"2723:105:71","trueBody":{"id":14430,"nodeType":"Block","src":"2754:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":14426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2806:3:71","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":14427,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14413,"src":"2811:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14425,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"2775:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2775:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14429,"nodeType":"RevertStatement","src":"2768:49:71"}]}},{"expression":{"arguments":[{"id":14434,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14413,"src":"2852:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14433,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2844:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":14432,"name":"uint232","nodeType":"ElementaryTypeName","src":"2844:7:71","typeDescriptions":{}}},"id":14435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2844:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"functionReturnParameters":14417,"id":14436,"nodeType":"Return","src":"2837:21:71"}]},"documentation":{"id":14411,"nodeType":"StructuredDocumentation","src":"2362:280:71","text":" @dev Returns the downcasted uint232 from uint256, reverting on\n overflow (when the input is greater than largest uint232).\n Counterpart to Solidity's `uint232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":14438,"implemented":true,"kind":"function","modifiers":[],"name":"toUint232","nameLocation":"2656:9:71","nodeType":"FunctionDefinition","parameters":{"id":14414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14413,"mutability":"mutable","name":"value","nameLocation":"2674:5:71","nodeType":"VariableDeclaration","scope":14438,"src":"2666:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14412,"name":"uint256","nodeType":"ElementaryTypeName","src":"2666:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2665:15:71"},"returnParameters":{"id":14417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14416,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14438,"src":"2704:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"},"typeName":{"id":14415,"name":"uint232","nodeType":"ElementaryTypeName","src":"2704:7:71","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"visibility":"internal"}],"src":"2703:9:71"},"scope":16092,"src":"2647:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14465,"nodeType":"Block","src":"3222:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14446,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14441,"src":"3236:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14449,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3249:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":14448,"name":"uint224","nodeType":"ElementaryTypeName","src":"3249:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"}],"id":14447,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3244:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3244:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint224","typeString":"type(uint224)"}},"id":14451,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3258:3:71","memberName":"max","nodeType":"MemberAccess","src":"3244:17:71","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"3236:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14459,"nodeType":"IfStatement","src":"3232:105:71","trueBody":{"id":14458,"nodeType":"Block","src":"3263:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":14454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3315:3:71","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":14455,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14441,"src":"3320:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14453,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"3284:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3284:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14457,"nodeType":"RevertStatement","src":"3277:49:71"}]}},{"expression":{"arguments":[{"id":14462,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14441,"src":"3361:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14461,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3353:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":14460,"name":"uint224","nodeType":"ElementaryTypeName","src":"3353:7:71","typeDescriptions":{}}},"id":14463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3353:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"functionReturnParameters":14445,"id":14464,"nodeType":"Return","src":"3346:21:71"}]},"documentation":{"id":14439,"nodeType":"StructuredDocumentation","src":"2871:280:71","text":" @dev Returns the downcasted uint224 from uint256, reverting on\n overflow (when the input is greater than largest uint224).\n Counterpart to Solidity's `uint224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":14466,"implemented":true,"kind":"function","modifiers":[],"name":"toUint224","nameLocation":"3165:9:71","nodeType":"FunctionDefinition","parameters":{"id":14442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14441,"mutability":"mutable","name":"value","nameLocation":"3183:5:71","nodeType":"VariableDeclaration","scope":14466,"src":"3175:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14440,"name":"uint256","nodeType":"ElementaryTypeName","src":"3175:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3174:15:71"},"returnParameters":{"id":14445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14444,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14466,"src":"3213:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":14443,"name":"uint224","nodeType":"ElementaryTypeName","src":"3213:7:71","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"}],"src":"3212:9:71"},"scope":16092,"src":"3156:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14493,"nodeType":"Block","src":"3731:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14474,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14469,"src":"3745:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14477,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3758:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":14476,"name":"uint216","nodeType":"ElementaryTypeName","src":"3758:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"}],"id":14475,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3753:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3753:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint216","typeString":"type(uint216)"}},"id":14479,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3767:3:71","memberName":"max","nodeType":"MemberAccess","src":"3753:17:71","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"src":"3745:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14487,"nodeType":"IfStatement","src":"3741:105:71","trueBody":{"id":14486,"nodeType":"Block","src":"3772:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":14482,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3824:3:71","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":14483,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14469,"src":"3829:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14481,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"3793:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3793:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14485,"nodeType":"RevertStatement","src":"3786:49:71"}]}},{"expression":{"arguments":[{"id":14490,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14469,"src":"3870:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14489,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3862:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":14488,"name":"uint216","nodeType":"ElementaryTypeName","src":"3862:7:71","typeDescriptions":{}}},"id":14491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3862:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"functionReturnParameters":14473,"id":14492,"nodeType":"Return","src":"3855:21:71"}]},"documentation":{"id":14467,"nodeType":"StructuredDocumentation","src":"3380:280:71","text":" @dev Returns the downcasted uint216 from uint256, reverting on\n overflow (when the input is greater than largest uint216).\n Counterpart to Solidity's `uint216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":14494,"implemented":true,"kind":"function","modifiers":[],"name":"toUint216","nameLocation":"3674:9:71","nodeType":"FunctionDefinition","parameters":{"id":14470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14469,"mutability":"mutable","name":"value","nameLocation":"3692:5:71","nodeType":"VariableDeclaration","scope":14494,"src":"3684:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14468,"name":"uint256","nodeType":"ElementaryTypeName","src":"3684:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3683:15:71"},"returnParameters":{"id":14473,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14472,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14494,"src":"3722:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"},"typeName":{"id":14471,"name":"uint216","nodeType":"ElementaryTypeName","src":"3722:7:71","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"visibility":"internal"}],"src":"3721:9:71"},"scope":16092,"src":"3665:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14521,"nodeType":"Block","src":"4240:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14502,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14497,"src":"4254:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14505,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4267:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":14504,"name":"uint208","nodeType":"ElementaryTypeName","src":"4267:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"}],"id":14503,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4262:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4262:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint208","typeString":"type(uint208)"}},"id":14507,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4276:3:71","memberName":"max","nodeType":"MemberAccess","src":"4262:17:71","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"src":"4254:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14515,"nodeType":"IfStatement","src":"4250:105:71","trueBody":{"id":14514,"nodeType":"Block","src":"4281:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":14510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4333:3:71","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":14511,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14497,"src":"4338:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14509,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"4302:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4302:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14513,"nodeType":"RevertStatement","src":"4295:49:71"}]}},{"expression":{"arguments":[{"id":14518,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14497,"src":"4379:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14517,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4371:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":14516,"name":"uint208","nodeType":"ElementaryTypeName","src":"4371:7:71","typeDescriptions":{}}},"id":14519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4371:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"functionReturnParameters":14501,"id":14520,"nodeType":"Return","src":"4364:21:71"}]},"documentation":{"id":14495,"nodeType":"StructuredDocumentation","src":"3889:280:71","text":" @dev Returns the downcasted uint208 from uint256, reverting on\n overflow (when the input is greater than largest uint208).\n Counterpart to Solidity's `uint208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":14522,"implemented":true,"kind":"function","modifiers":[],"name":"toUint208","nameLocation":"4183:9:71","nodeType":"FunctionDefinition","parameters":{"id":14498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14497,"mutability":"mutable","name":"value","nameLocation":"4201:5:71","nodeType":"VariableDeclaration","scope":14522,"src":"4193:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14496,"name":"uint256","nodeType":"ElementaryTypeName","src":"4193:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4192:15:71"},"returnParameters":{"id":14501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14500,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14522,"src":"4231:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"},"typeName":{"id":14499,"name":"uint208","nodeType":"ElementaryTypeName","src":"4231:7:71","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"visibility":"internal"}],"src":"4230:9:71"},"scope":16092,"src":"4174:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14549,"nodeType":"Block","src":"4749:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14530,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14525,"src":"4763:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14533,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4776:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":14532,"name":"uint200","nodeType":"ElementaryTypeName","src":"4776:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"}],"id":14531,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4771:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14534,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4771:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint200","typeString":"type(uint200)"}},"id":14535,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4785:3:71","memberName":"max","nodeType":"MemberAccess","src":"4771:17:71","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"src":"4763:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14543,"nodeType":"IfStatement","src":"4759:105:71","trueBody":{"id":14542,"nodeType":"Block","src":"4790:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":14538,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4842:3:71","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":14539,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14525,"src":"4847:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14537,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"4811:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4811:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14541,"nodeType":"RevertStatement","src":"4804:49:71"}]}},{"expression":{"arguments":[{"id":14546,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14525,"src":"4888:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14545,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4880:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":14544,"name":"uint200","nodeType":"ElementaryTypeName","src":"4880:7:71","typeDescriptions":{}}},"id":14547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4880:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"functionReturnParameters":14529,"id":14548,"nodeType":"Return","src":"4873:21:71"}]},"documentation":{"id":14523,"nodeType":"StructuredDocumentation","src":"4398:280:71","text":" @dev Returns the downcasted uint200 from uint256, reverting on\n overflow (when the input is greater than largest uint200).\n Counterpart to Solidity's `uint200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":14550,"implemented":true,"kind":"function","modifiers":[],"name":"toUint200","nameLocation":"4692:9:71","nodeType":"FunctionDefinition","parameters":{"id":14526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14525,"mutability":"mutable","name":"value","nameLocation":"4710:5:71","nodeType":"VariableDeclaration","scope":14550,"src":"4702:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14524,"name":"uint256","nodeType":"ElementaryTypeName","src":"4702:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4701:15:71"},"returnParameters":{"id":14529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14528,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14550,"src":"4740:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"},"typeName":{"id":14527,"name":"uint200","nodeType":"ElementaryTypeName","src":"4740:7:71","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"visibility":"internal"}],"src":"4739:9:71"},"scope":16092,"src":"4683:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14577,"nodeType":"Block","src":"5258:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14558,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14553,"src":"5272:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14561,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5285:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":14560,"name":"uint192","nodeType":"ElementaryTypeName","src":"5285:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"}],"id":14559,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5280:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14562,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5280:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint192","typeString":"type(uint192)"}},"id":14563,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5294:3:71","memberName":"max","nodeType":"MemberAccess","src":"5280:17:71","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"src":"5272:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14571,"nodeType":"IfStatement","src":"5268:105:71","trueBody":{"id":14570,"nodeType":"Block","src":"5299:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":14566,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5351:3:71","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":14567,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14553,"src":"5356:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14565,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"5320:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5320:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14569,"nodeType":"RevertStatement","src":"5313:49:71"}]}},{"expression":{"arguments":[{"id":14574,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14553,"src":"5397:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14573,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5389:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":14572,"name":"uint192","nodeType":"ElementaryTypeName","src":"5389:7:71","typeDescriptions":{}}},"id":14575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5389:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"functionReturnParameters":14557,"id":14576,"nodeType":"Return","src":"5382:21:71"}]},"documentation":{"id":14551,"nodeType":"StructuredDocumentation","src":"4907:280:71","text":" @dev Returns the downcasted uint192 from uint256, reverting on\n overflow (when the input is greater than largest uint192).\n Counterpart to Solidity's `uint192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":14578,"implemented":true,"kind":"function","modifiers":[],"name":"toUint192","nameLocation":"5201:9:71","nodeType":"FunctionDefinition","parameters":{"id":14554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14553,"mutability":"mutable","name":"value","nameLocation":"5219:5:71","nodeType":"VariableDeclaration","scope":14578,"src":"5211:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14552,"name":"uint256","nodeType":"ElementaryTypeName","src":"5211:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5210:15:71"},"returnParameters":{"id":14557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14556,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14578,"src":"5249:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"},"typeName":{"id":14555,"name":"uint192","nodeType":"ElementaryTypeName","src":"5249:7:71","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"visibility":"internal"}],"src":"5248:9:71"},"scope":16092,"src":"5192:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14605,"nodeType":"Block","src":"5767:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14586,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14581,"src":"5781:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14589,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5794:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":14588,"name":"uint184","nodeType":"ElementaryTypeName","src":"5794:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"}],"id":14587,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5789:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14590,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5789:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint184","typeString":"type(uint184)"}},"id":14591,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5803:3:71","memberName":"max","nodeType":"MemberAccess","src":"5789:17:71","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"src":"5781:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14599,"nodeType":"IfStatement","src":"5777:105:71","trueBody":{"id":14598,"nodeType":"Block","src":"5808:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":14594,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5860:3:71","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":14595,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14581,"src":"5865:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14593,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"5829:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5829:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14597,"nodeType":"RevertStatement","src":"5822:49:71"}]}},{"expression":{"arguments":[{"id":14602,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14581,"src":"5906:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14601,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5898:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":14600,"name":"uint184","nodeType":"ElementaryTypeName","src":"5898:7:71","typeDescriptions":{}}},"id":14603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5898:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"functionReturnParameters":14585,"id":14604,"nodeType":"Return","src":"5891:21:71"}]},"documentation":{"id":14579,"nodeType":"StructuredDocumentation","src":"5416:280:71","text":" @dev Returns the downcasted uint184 from uint256, reverting on\n overflow (when the input is greater than largest uint184).\n Counterpart to Solidity's `uint184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":14606,"implemented":true,"kind":"function","modifiers":[],"name":"toUint184","nameLocation":"5710:9:71","nodeType":"FunctionDefinition","parameters":{"id":14582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14581,"mutability":"mutable","name":"value","nameLocation":"5728:5:71","nodeType":"VariableDeclaration","scope":14606,"src":"5720:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14580,"name":"uint256","nodeType":"ElementaryTypeName","src":"5720:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5719:15:71"},"returnParameters":{"id":14585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14584,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14606,"src":"5758:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"},"typeName":{"id":14583,"name":"uint184","nodeType":"ElementaryTypeName","src":"5758:7:71","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"visibility":"internal"}],"src":"5757:9:71"},"scope":16092,"src":"5701:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14633,"nodeType":"Block","src":"6276:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14614,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14609,"src":"6290:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14617,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6303:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":14616,"name":"uint176","nodeType":"ElementaryTypeName","src":"6303:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"}],"id":14615,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6298:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6298:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint176","typeString":"type(uint176)"}},"id":14619,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6312:3:71","memberName":"max","nodeType":"MemberAccess","src":"6298:17:71","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"src":"6290:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14627,"nodeType":"IfStatement","src":"6286:105:71","trueBody":{"id":14626,"nodeType":"Block","src":"6317:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":14622,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6369:3:71","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":14623,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14609,"src":"6374:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14621,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"6338:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6338:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14625,"nodeType":"RevertStatement","src":"6331:49:71"}]}},{"expression":{"arguments":[{"id":14630,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14609,"src":"6415:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6407:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":14628,"name":"uint176","nodeType":"ElementaryTypeName","src":"6407:7:71","typeDescriptions":{}}},"id":14631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6407:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"functionReturnParameters":14613,"id":14632,"nodeType":"Return","src":"6400:21:71"}]},"documentation":{"id":14607,"nodeType":"StructuredDocumentation","src":"5925:280:71","text":" @dev Returns the downcasted uint176 from uint256, reverting on\n overflow (when the input is greater than largest uint176).\n Counterpart to Solidity's `uint176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":14634,"implemented":true,"kind":"function","modifiers":[],"name":"toUint176","nameLocation":"6219:9:71","nodeType":"FunctionDefinition","parameters":{"id":14610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14609,"mutability":"mutable","name":"value","nameLocation":"6237:5:71","nodeType":"VariableDeclaration","scope":14634,"src":"6229:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14608,"name":"uint256","nodeType":"ElementaryTypeName","src":"6229:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6228:15:71"},"returnParameters":{"id":14613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14612,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14634,"src":"6267:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"},"typeName":{"id":14611,"name":"uint176","nodeType":"ElementaryTypeName","src":"6267:7:71","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"visibility":"internal"}],"src":"6266:9:71"},"scope":16092,"src":"6210:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14661,"nodeType":"Block","src":"6785:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14642,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14637,"src":"6799:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14645,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6812:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":14644,"name":"uint168","nodeType":"ElementaryTypeName","src":"6812:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"}],"id":14643,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6807:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14646,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6807:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint168","typeString":"type(uint168)"}},"id":14647,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6821:3:71","memberName":"max","nodeType":"MemberAccess","src":"6807:17:71","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"src":"6799:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14655,"nodeType":"IfStatement","src":"6795:105:71","trueBody":{"id":14654,"nodeType":"Block","src":"6826:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":14650,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6878:3:71","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":14651,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14637,"src":"6883:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14649,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"6847:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6847:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14653,"nodeType":"RevertStatement","src":"6840:49:71"}]}},{"expression":{"arguments":[{"id":14658,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14637,"src":"6924:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14657,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6916:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":14656,"name":"uint168","nodeType":"ElementaryTypeName","src":"6916:7:71","typeDescriptions":{}}},"id":14659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6916:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"functionReturnParameters":14641,"id":14660,"nodeType":"Return","src":"6909:21:71"}]},"documentation":{"id":14635,"nodeType":"StructuredDocumentation","src":"6434:280:71","text":" @dev Returns the downcasted uint168 from uint256, reverting on\n overflow (when the input is greater than largest uint168).\n Counterpart to Solidity's `uint168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":14662,"implemented":true,"kind":"function","modifiers":[],"name":"toUint168","nameLocation":"6728:9:71","nodeType":"FunctionDefinition","parameters":{"id":14638,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14637,"mutability":"mutable","name":"value","nameLocation":"6746:5:71","nodeType":"VariableDeclaration","scope":14662,"src":"6738:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14636,"name":"uint256","nodeType":"ElementaryTypeName","src":"6738:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6737:15:71"},"returnParameters":{"id":14641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14640,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14662,"src":"6776:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"},"typeName":{"id":14639,"name":"uint168","nodeType":"ElementaryTypeName","src":"6776:7:71","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"visibility":"internal"}],"src":"6775:9:71"},"scope":16092,"src":"6719:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14689,"nodeType":"Block","src":"7294:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14670,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14665,"src":"7308:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14673,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7321:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":14672,"name":"uint160","nodeType":"ElementaryTypeName","src":"7321:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"}],"id":14671,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7316:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14674,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7316:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint160","typeString":"type(uint160)"}},"id":14675,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7330:3:71","memberName":"max","nodeType":"MemberAccess","src":"7316:17:71","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"src":"7308:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14683,"nodeType":"IfStatement","src":"7304:105:71","trueBody":{"id":14682,"nodeType":"Block","src":"7335:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":14678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7387:3:71","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":14679,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14665,"src":"7392:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14677,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"7356:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7356:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14681,"nodeType":"RevertStatement","src":"7349:49:71"}]}},{"expression":{"arguments":[{"id":14686,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14665,"src":"7433:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14685,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7425:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":14684,"name":"uint160","nodeType":"ElementaryTypeName","src":"7425:7:71","typeDescriptions":{}}},"id":14687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7425:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"functionReturnParameters":14669,"id":14688,"nodeType":"Return","src":"7418:21:71"}]},"documentation":{"id":14663,"nodeType":"StructuredDocumentation","src":"6943:280:71","text":" @dev Returns the downcasted uint160 from uint256, reverting on\n overflow (when the input is greater than largest uint160).\n Counterpart to Solidity's `uint160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":14690,"implemented":true,"kind":"function","modifiers":[],"name":"toUint160","nameLocation":"7237:9:71","nodeType":"FunctionDefinition","parameters":{"id":14666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14665,"mutability":"mutable","name":"value","nameLocation":"7255:5:71","nodeType":"VariableDeclaration","scope":14690,"src":"7247:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14664,"name":"uint256","nodeType":"ElementaryTypeName","src":"7247:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7246:15:71"},"returnParameters":{"id":14669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14668,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14690,"src":"7285:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":14667,"name":"uint160","nodeType":"ElementaryTypeName","src":"7285:7:71","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"}],"src":"7284:9:71"},"scope":16092,"src":"7228:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14717,"nodeType":"Block","src":"7803:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14698,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14693,"src":"7817:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14701,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7830:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":14700,"name":"uint152","nodeType":"ElementaryTypeName","src":"7830:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"}],"id":14699,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7825:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14702,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7825:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint152","typeString":"type(uint152)"}},"id":14703,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7839:3:71","memberName":"max","nodeType":"MemberAccess","src":"7825:17:71","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"src":"7817:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14711,"nodeType":"IfStatement","src":"7813:105:71","trueBody":{"id":14710,"nodeType":"Block","src":"7844:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":14706,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7896:3:71","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":14707,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14693,"src":"7901:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14705,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"7865:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7865:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14709,"nodeType":"RevertStatement","src":"7858:49:71"}]}},{"expression":{"arguments":[{"id":14714,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14693,"src":"7942:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14713,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7934:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":14712,"name":"uint152","nodeType":"ElementaryTypeName","src":"7934:7:71","typeDescriptions":{}}},"id":14715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7934:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"functionReturnParameters":14697,"id":14716,"nodeType":"Return","src":"7927:21:71"}]},"documentation":{"id":14691,"nodeType":"StructuredDocumentation","src":"7452:280:71","text":" @dev Returns the downcasted uint152 from uint256, reverting on\n overflow (when the input is greater than largest uint152).\n Counterpart to Solidity's `uint152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":14718,"implemented":true,"kind":"function","modifiers":[],"name":"toUint152","nameLocation":"7746:9:71","nodeType":"FunctionDefinition","parameters":{"id":14694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14693,"mutability":"mutable","name":"value","nameLocation":"7764:5:71","nodeType":"VariableDeclaration","scope":14718,"src":"7756:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14692,"name":"uint256","nodeType":"ElementaryTypeName","src":"7756:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7755:15:71"},"returnParameters":{"id":14697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14696,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14718,"src":"7794:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"},"typeName":{"id":14695,"name":"uint152","nodeType":"ElementaryTypeName","src":"7794:7:71","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"visibility":"internal"}],"src":"7793:9:71"},"scope":16092,"src":"7737:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14745,"nodeType":"Block","src":"8312:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14726,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14721,"src":"8326:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14729,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8339:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":14728,"name":"uint144","nodeType":"ElementaryTypeName","src":"8339:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"}],"id":14727,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8334:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8334:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint144","typeString":"type(uint144)"}},"id":14731,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8348:3:71","memberName":"max","nodeType":"MemberAccess","src":"8334:17:71","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"src":"8326:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14739,"nodeType":"IfStatement","src":"8322:105:71","trueBody":{"id":14738,"nodeType":"Block","src":"8353:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":14734,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8405:3:71","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":14735,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14721,"src":"8410:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14733,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"8374:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8374:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14737,"nodeType":"RevertStatement","src":"8367:49:71"}]}},{"expression":{"arguments":[{"id":14742,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14721,"src":"8451:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14741,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8443:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":14740,"name":"uint144","nodeType":"ElementaryTypeName","src":"8443:7:71","typeDescriptions":{}}},"id":14743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8443:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"functionReturnParameters":14725,"id":14744,"nodeType":"Return","src":"8436:21:71"}]},"documentation":{"id":14719,"nodeType":"StructuredDocumentation","src":"7961:280:71","text":" @dev Returns the downcasted uint144 from uint256, reverting on\n overflow (when the input is greater than largest uint144).\n Counterpart to Solidity's `uint144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":14746,"implemented":true,"kind":"function","modifiers":[],"name":"toUint144","nameLocation":"8255:9:71","nodeType":"FunctionDefinition","parameters":{"id":14722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14721,"mutability":"mutable","name":"value","nameLocation":"8273:5:71","nodeType":"VariableDeclaration","scope":14746,"src":"8265:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14720,"name":"uint256","nodeType":"ElementaryTypeName","src":"8265:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8264:15:71"},"returnParameters":{"id":14725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14724,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14746,"src":"8303:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"},"typeName":{"id":14723,"name":"uint144","nodeType":"ElementaryTypeName","src":"8303:7:71","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"visibility":"internal"}],"src":"8302:9:71"},"scope":16092,"src":"8246:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14773,"nodeType":"Block","src":"8821:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14754,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14749,"src":"8835:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8848:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":14756,"name":"uint136","nodeType":"ElementaryTypeName","src":"8848:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"}],"id":14755,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8843:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8843:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint136","typeString":"type(uint136)"}},"id":14759,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8857:3:71","memberName":"max","nodeType":"MemberAccess","src":"8843:17:71","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"src":"8835:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14767,"nodeType":"IfStatement","src":"8831:105:71","trueBody":{"id":14766,"nodeType":"Block","src":"8862:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":14762,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8914:3:71","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":14763,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14749,"src":"8919:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14761,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"8883:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8883:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14765,"nodeType":"RevertStatement","src":"8876:49:71"}]}},{"expression":{"arguments":[{"id":14770,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14749,"src":"8960:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14769,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8952:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":14768,"name":"uint136","nodeType":"ElementaryTypeName","src":"8952:7:71","typeDescriptions":{}}},"id":14771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8952:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"functionReturnParameters":14753,"id":14772,"nodeType":"Return","src":"8945:21:71"}]},"documentation":{"id":14747,"nodeType":"StructuredDocumentation","src":"8470:280:71","text":" @dev Returns the downcasted uint136 from uint256, reverting on\n overflow (when the input is greater than largest uint136).\n Counterpart to Solidity's `uint136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":14774,"implemented":true,"kind":"function","modifiers":[],"name":"toUint136","nameLocation":"8764:9:71","nodeType":"FunctionDefinition","parameters":{"id":14750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14749,"mutability":"mutable","name":"value","nameLocation":"8782:5:71","nodeType":"VariableDeclaration","scope":14774,"src":"8774:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14748,"name":"uint256","nodeType":"ElementaryTypeName","src":"8774:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8773:15:71"},"returnParameters":{"id":14753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14752,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14774,"src":"8812:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"},"typeName":{"id":14751,"name":"uint136","nodeType":"ElementaryTypeName","src":"8812:7:71","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"visibility":"internal"}],"src":"8811:9:71"},"scope":16092,"src":"8755:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14801,"nodeType":"Block","src":"9330:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14782,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14777,"src":"9344:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14785,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9357:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":14784,"name":"uint128","nodeType":"ElementaryTypeName","src":"9357:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":14783,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9352:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14786,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9352:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":14787,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9366:3:71","memberName":"max","nodeType":"MemberAccess","src":"9352:17:71","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"9344:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14795,"nodeType":"IfStatement","src":"9340:105:71","trueBody":{"id":14794,"nodeType":"Block","src":"9371:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":14790,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9423:3:71","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":14791,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14777,"src":"9428:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14789,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"9392:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9392:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14793,"nodeType":"RevertStatement","src":"9385:49:71"}]}},{"expression":{"arguments":[{"id":14798,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14777,"src":"9469:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9461:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":14796,"name":"uint128","nodeType":"ElementaryTypeName","src":"9461:7:71","typeDescriptions":{}}},"id":14799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9461:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":14781,"id":14800,"nodeType":"Return","src":"9454:21:71"}]},"documentation":{"id":14775,"nodeType":"StructuredDocumentation","src":"8979:280:71","text":" @dev Returns the downcasted uint128 from uint256, reverting on\n overflow (when the input is greater than largest uint128).\n Counterpart to Solidity's `uint128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":14802,"implemented":true,"kind":"function","modifiers":[],"name":"toUint128","nameLocation":"9273:9:71","nodeType":"FunctionDefinition","parameters":{"id":14778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14777,"mutability":"mutable","name":"value","nameLocation":"9291:5:71","nodeType":"VariableDeclaration","scope":14802,"src":"9283:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14776,"name":"uint256","nodeType":"ElementaryTypeName","src":"9283:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9282:15:71"},"returnParameters":{"id":14781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14780,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14802,"src":"9321:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":14779,"name":"uint128","nodeType":"ElementaryTypeName","src":"9321:7:71","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9320:9:71"},"scope":16092,"src":"9264:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14829,"nodeType":"Block","src":"9839:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14810,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14805,"src":"9853:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14813,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9866:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":14812,"name":"uint120","nodeType":"ElementaryTypeName","src":"9866:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"}],"id":14811,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9861:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14814,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9861:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint120","typeString":"type(uint120)"}},"id":14815,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9875:3:71","memberName":"max","nodeType":"MemberAccess","src":"9861:17:71","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"src":"9853:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14823,"nodeType":"IfStatement","src":"9849:105:71","trueBody":{"id":14822,"nodeType":"Block","src":"9880:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":14818,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9932:3:71","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":14819,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14805,"src":"9937:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14817,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"9901:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9901:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14821,"nodeType":"RevertStatement","src":"9894:49:71"}]}},{"expression":{"arguments":[{"id":14826,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14805,"src":"9978:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14825,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9970:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":14824,"name":"uint120","nodeType":"ElementaryTypeName","src":"9970:7:71","typeDescriptions":{}}},"id":14827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9970:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"functionReturnParameters":14809,"id":14828,"nodeType":"Return","src":"9963:21:71"}]},"documentation":{"id":14803,"nodeType":"StructuredDocumentation","src":"9488:280:71","text":" @dev Returns the downcasted uint120 from uint256, reverting on\n overflow (when the input is greater than largest uint120).\n Counterpart to Solidity's `uint120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":14830,"implemented":true,"kind":"function","modifiers":[],"name":"toUint120","nameLocation":"9782:9:71","nodeType":"FunctionDefinition","parameters":{"id":14806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14805,"mutability":"mutable","name":"value","nameLocation":"9800:5:71","nodeType":"VariableDeclaration","scope":14830,"src":"9792:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14804,"name":"uint256","nodeType":"ElementaryTypeName","src":"9792:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9791:15:71"},"returnParameters":{"id":14809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14808,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14830,"src":"9830:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"},"typeName":{"id":14807,"name":"uint120","nodeType":"ElementaryTypeName","src":"9830:7:71","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"visibility":"internal"}],"src":"9829:9:71"},"scope":16092,"src":"9773:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14857,"nodeType":"Block","src":"10348:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14838,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14833,"src":"10362:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14841,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10375:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":14840,"name":"uint112","nodeType":"ElementaryTypeName","src":"10375:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"}],"id":14839,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10370:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10370:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint112","typeString":"type(uint112)"}},"id":14843,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10384:3:71","memberName":"max","nodeType":"MemberAccess","src":"10370:17:71","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"src":"10362:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14851,"nodeType":"IfStatement","src":"10358:105:71","trueBody":{"id":14850,"nodeType":"Block","src":"10389:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":14846,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10441:3:71","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":14847,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14833,"src":"10446:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14845,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"10410:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10410:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14849,"nodeType":"RevertStatement","src":"10403:49:71"}]}},{"expression":{"arguments":[{"id":14854,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14833,"src":"10487:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14853,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10479:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":14852,"name":"uint112","nodeType":"ElementaryTypeName","src":"10479:7:71","typeDescriptions":{}}},"id":14855,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10479:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"functionReturnParameters":14837,"id":14856,"nodeType":"Return","src":"10472:21:71"}]},"documentation":{"id":14831,"nodeType":"StructuredDocumentation","src":"9997:280:71","text":" @dev Returns the downcasted uint112 from uint256, reverting on\n overflow (when the input is greater than largest uint112).\n Counterpart to Solidity's `uint112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":14858,"implemented":true,"kind":"function","modifiers":[],"name":"toUint112","nameLocation":"10291:9:71","nodeType":"FunctionDefinition","parameters":{"id":14834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14833,"mutability":"mutable","name":"value","nameLocation":"10309:5:71","nodeType":"VariableDeclaration","scope":14858,"src":"10301:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14832,"name":"uint256","nodeType":"ElementaryTypeName","src":"10301:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10300:15:71"},"returnParameters":{"id":14837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14836,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14858,"src":"10339:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"},"typeName":{"id":14835,"name":"uint112","nodeType":"ElementaryTypeName","src":"10339:7:71","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"visibility":"internal"}],"src":"10338:9:71"},"scope":16092,"src":"10282:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14885,"nodeType":"Block","src":"10857:152:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14866,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14861,"src":"10871:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14869,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10884:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":14868,"name":"uint104","nodeType":"ElementaryTypeName","src":"10884:7:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"}],"id":14867,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10879:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10879:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint104","typeString":"type(uint104)"}},"id":14871,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10893:3:71","memberName":"max","nodeType":"MemberAccess","src":"10879:17:71","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"src":"10871:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14879,"nodeType":"IfStatement","src":"10867:105:71","trueBody":{"id":14878,"nodeType":"Block","src":"10898:74:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":14874,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10950:3:71","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":14875,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14861,"src":"10955:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14873,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"10919:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10919:42:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14877,"nodeType":"RevertStatement","src":"10912:49:71"}]}},{"expression":{"arguments":[{"id":14882,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14861,"src":"10996:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14881,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10988:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":14880,"name":"uint104","nodeType":"ElementaryTypeName","src":"10988:7:71","typeDescriptions":{}}},"id":14883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10988:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"functionReturnParameters":14865,"id":14884,"nodeType":"Return","src":"10981:21:71"}]},"documentation":{"id":14859,"nodeType":"StructuredDocumentation","src":"10506:280:71","text":" @dev Returns the downcasted uint104 from uint256, reverting on\n overflow (when the input is greater than largest uint104).\n Counterpart to Solidity's `uint104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":14886,"implemented":true,"kind":"function","modifiers":[],"name":"toUint104","nameLocation":"10800:9:71","nodeType":"FunctionDefinition","parameters":{"id":14862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14861,"mutability":"mutable","name":"value","nameLocation":"10818:5:71","nodeType":"VariableDeclaration","scope":14886,"src":"10810:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14860,"name":"uint256","nodeType":"ElementaryTypeName","src":"10810:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10809:15:71"},"returnParameters":{"id":14865,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14864,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14886,"src":"10848:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"},"typeName":{"id":14863,"name":"uint104","nodeType":"ElementaryTypeName","src":"10848:7:71","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"visibility":"internal"}],"src":"10847:9:71"},"scope":16092,"src":"10791:218:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14913,"nodeType":"Block","src":"11360:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14894,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14889,"src":"11374:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14897,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11387:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":14896,"name":"uint96","nodeType":"ElementaryTypeName","src":"11387:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"}],"id":14895,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11382:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14898,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11382:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint96","typeString":"type(uint96)"}},"id":14899,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11395:3:71","memberName":"max","nodeType":"MemberAccess","src":"11382:16:71","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"11374:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14907,"nodeType":"IfStatement","src":"11370:103:71","trueBody":{"id":14906,"nodeType":"Block","src":"11400:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":14902,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11452:2:71","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":14903,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14889,"src":"11456:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14901,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"11421:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11421:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14905,"nodeType":"RevertStatement","src":"11414:48:71"}]}},{"expression":{"arguments":[{"id":14910,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14889,"src":"11496:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14909,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11489:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":14908,"name":"uint96","nodeType":"ElementaryTypeName","src":"11489:6:71","typeDescriptions":{}}},"id":14911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11489:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"functionReturnParameters":14893,"id":14912,"nodeType":"Return","src":"11482:20:71"}]},"documentation":{"id":14887,"nodeType":"StructuredDocumentation","src":"11015:276:71","text":" @dev Returns the downcasted uint96 from uint256, reverting on\n overflow (when the input is greater than largest uint96).\n Counterpart to Solidity's `uint96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":14914,"implemented":true,"kind":"function","modifiers":[],"name":"toUint96","nameLocation":"11305:8:71","nodeType":"FunctionDefinition","parameters":{"id":14890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14889,"mutability":"mutable","name":"value","nameLocation":"11322:5:71","nodeType":"VariableDeclaration","scope":14914,"src":"11314:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14888,"name":"uint256","nodeType":"ElementaryTypeName","src":"11314:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11313:15:71"},"returnParameters":{"id":14893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14892,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14914,"src":"11352:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":14891,"name":"uint96","nodeType":"ElementaryTypeName","src":"11352:6:71","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"11351:8:71"},"scope":16092,"src":"11296:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14941,"nodeType":"Block","src":"11860:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14922,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14917,"src":"11874:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11887:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":14924,"name":"uint88","nodeType":"ElementaryTypeName","src":"11887:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"}],"id":14923,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11882:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14926,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11882:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint88","typeString":"type(uint88)"}},"id":14927,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11895:3:71","memberName":"max","nodeType":"MemberAccess","src":"11882:16:71","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"src":"11874:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14935,"nodeType":"IfStatement","src":"11870:103:71","trueBody":{"id":14934,"nodeType":"Block","src":"11900:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":14930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11952:2:71","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":14931,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14917,"src":"11956:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14929,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"11921:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11921:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14933,"nodeType":"RevertStatement","src":"11914:48:71"}]}},{"expression":{"arguments":[{"id":14938,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14917,"src":"11996:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14937,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11989:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":14936,"name":"uint88","nodeType":"ElementaryTypeName","src":"11989:6:71","typeDescriptions":{}}},"id":14939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11989:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"functionReturnParameters":14921,"id":14940,"nodeType":"Return","src":"11982:20:71"}]},"documentation":{"id":14915,"nodeType":"StructuredDocumentation","src":"11515:276:71","text":" @dev Returns the downcasted uint88 from uint256, reverting on\n overflow (when the input is greater than largest uint88).\n Counterpart to Solidity's `uint88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":14942,"implemented":true,"kind":"function","modifiers":[],"name":"toUint88","nameLocation":"11805:8:71","nodeType":"FunctionDefinition","parameters":{"id":14918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14917,"mutability":"mutable","name":"value","nameLocation":"11822:5:71","nodeType":"VariableDeclaration","scope":14942,"src":"11814:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14916,"name":"uint256","nodeType":"ElementaryTypeName","src":"11814:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11813:15:71"},"returnParameters":{"id":14921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14920,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14942,"src":"11852:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"},"typeName":{"id":14919,"name":"uint88","nodeType":"ElementaryTypeName","src":"11852:6:71","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"visibility":"internal"}],"src":"11851:8:71"},"scope":16092,"src":"11796:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14969,"nodeType":"Block","src":"12360:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14950,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14945,"src":"12374:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14953,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12387:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":14952,"name":"uint80","nodeType":"ElementaryTypeName","src":"12387:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"}],"id":14951,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12382:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12382:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint80","typeString":"type(uint80)"}},"id":14955,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12395:3:71","memberName":"max","nodeType":"MemberAccess","src":"12382:16:71","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"src":"12374:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14963,"nodeType":"IfStatement","src":"12370:103:71","trueBody":{"id":14962,"nodeType":"Block","src":"12400:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":14958,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12452:2:71","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":14959,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14945,"src":"12456:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14957,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"12421:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12421:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14961,"nodeType":"RevertStatement","src":"12414:48:71"}]}},{"expression":{"arguments":[{"id":14966,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14945,"src":"12496:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14965,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12489:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":14964,"name":"uint80","nodeType":"ElementaryTypeName","src":"12489:6:71","typeDescriptions":{}}},"id":14967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12489:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"functionReturnParameters":14949,"id":14968,"nodeType":"Return","src":"12482:20:71"}]},"documentation":{"id":14943,"nodeType":"StructuredDocumentation","src":"12015:276:71","text":" @dev Returns the downcasted uint80 from uint256, reverting on\n overflow (when the input is greater than largest uint80).\n Counterpart to Solidity's `uint80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":14970,"implemented":true,"kind":"function","modifiers":[],"name":"toUint80","nameLocation":"12305:8:71","nodeType":"FunctionDefinition","parameters":{"id":14946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14945,"mutability":"mutable","name":"value","nameLocation":"12322:5:71","nodeType":"VariableDeclaration","scope":14970,"src":"12314:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14944,"name":"uint256","nodeType":"ElementaryTypeName","src":"12314:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12313:15:71"},"returnParameters":{"id":14949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14948,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14970,"src":"12352:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":14947,"name":"uint80","nodeType":"ElementaryTypeName","src":"12352:6:71","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"12351:8:71"},"scope":16092,"src":"12296:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14997,"nodeType":"Block","src":"12860:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14978,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14973,"src":"12874:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14981,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12887:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":14980,"name":"uint72","nodeType":"ElementaryTypeName","src":"12887:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"}],"id":14979,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12882:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14982,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12882:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint72","typeString":"type(uint72)"}},"id":14983,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12895:3:71","memberName":"max","nodeType":"MemberAccess","src":"12882:16:71","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"src":"12874:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14991,"nodeType":"IfStatement","src":"12870:103:71","trueBody":{"id":14990,"nodeType":"Block","src":"12900:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":14986,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12952:2:71","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":14987,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14973,"src":"12956:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14985,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"12921:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12921:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14989,"nodeType":"RevertStatement","src":"12914:48:71"}]}},{"expression":{"arguments":[{"id":14994,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14973,"src":"12996:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14993,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12989:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":14992,"name":"uint72","nodeType":"ElementaryTypeName","src":"12989:6:71","typeDescriptions":{}}},"id":14995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12989:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"functionReturnParameters":14977,"id":14996,"nodeType":"Return","src":"12982:20:71"}]},"documentation":{"id":14971,"nodeType":"StructuredDocumentation","src":"12515:276:71","text":" @dev Returns the downcasted uint72 from uint256, reverting on\n overflow (when the input is greater than largest uint72).\n Counterpart to Solidity's `uint72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":14998,"implemented":true,"kind":"function","modifiers":[],"name":"toUint72","nameLocation":"12805:8:71","nodeType":"FunctionDefinition","parameters":{"id":14974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14973,"mutability":"mutable","name":"value","nameLocation":"12822:5:71","nodeType":"VariableDeclaration","scope":14998,"src":"12814:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14972,"name":"uint256","nodeType":"ElementaryTypeName","src":"12814:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12813:15:71"},"returnParameters":{"id":14977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14976,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14998,"src":"12852:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"},"typeName":{"id":14975,"name":"uint72","nodeType":"ElementaryTypeName","src":"12852:6:71","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"visibility":"internal"}],"src":"12851:8:71"},"scope":16092,"src":"12796:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15025,"nodeType":"Block","src":"13360:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15006,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15001,"src":"13374:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15009,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13387:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":15008,"name":"uint64","nodeType":"ElementaryTypeName","src":"13387:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"}],"id":15007,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13382:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15010,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13382:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint64","typeString":"type(uint64)"}},"id":15011,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13395:3:71","memberName":"max","nodeType":"MemberAccess","src":"13382:16:71","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"13374:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15019,"nodeType":"IfStatement","src":"13370:103:71","trueBody":{"id":15018,"nodeType":"Block","src":"13400:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":15014,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13452:2:71","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":15015,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15001,"src":"13456:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15013,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"13421:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13421:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15017,"nodeType":"RevertStatement","src":"13414:48:71"}]}},{"expression":{"arguments":[{"id":15022,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15001,"src":"13496:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15021,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13489:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":15020,"name":"uint64","nodeType":"ElementaryTypeName","src":"13489:6:71","typeDescriptions":{}}},"id":15023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13489:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":15005,"id":15024,"nodeType":"Return","src":"13482:20:71"}]},"documentation":{"id":14999,"nodeType":"StructuredDocumentation","src":"13015:276:71","text":" @dev Returns the downcasted uint64 from uint256, reverting on\n overflow (when the input is greater than largest uint64).\n Counterpart to Solidity's `uint64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":15026,"implemented":true,"kind":"function","modifiers":[],"name":"toUint64","nameLocation":"13305:8:71","nodeType":"FunctionDefinition","parameters":{"id":15002,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15001,"mutability":"mutable","name":"value","nameLocation":"13322:5:71","nodeType":"VariableDeclaration","scope":15026,"src":"13314:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15000,"name":"uint256","nodeType":"ElementaryTypeName","src":"13314:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13313:15:71"},"returnParameters":{"id":15005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15004,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15026,"src":"13352:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":15003,"name":"uint64","nodeType":"ElementaryTypeName","src":"13352:6:71","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"13351:8:71"},"scope":16092,"src":"13296:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15053,"nodeType":"Block","src":"13860:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15034,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15029,"src":"13874:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15037,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13887:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":15036,"name":"uint56","nodeType":"ElementaryTypeName","src":"13887:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"}],"id":15035,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13882:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13882:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint56","typeString":"type(uint56)"}},"id":15039,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13895:3:71","memberName":"max","nodeType":"MemberAccess","src":"13882:16:71","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"src":"13874:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15047,"nodeType":"IfStatement","src":"13870:103:71","trueBody":{"id":15046,"nodeType":"Block","src":"13900:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":15042,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13952:2:71","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":15043,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15029,"src":"13956:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15041,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"13921:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13921:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15045,"nodeType":"RevertStatement","src":"13914:48:71"}]}},{"expression":{"arguments":[{"id":15050,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15029,"src":"13996:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15049,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13989:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":15048,"name":"uint56","nodeType":"ElementaryTypeName","src":"13989:6:71","typeDescriptions":{}}},"id":15051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13989:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"functionReturnParameters":15033,"id":15052,"nodeType":"Return","src":"13982:20:71"}]},"documentation":{"id":15027,"nodeType":"StructuredDocumentation","src":"13515:276:71","text":" @dev Returns the downcasted uint56 from uint256, reverting on\n overflow (when the input is greater than largest uint56).\n Counterpart to Solidity's `uint56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":15054,"implemented":true,"kind":"function","modifiers":[],"name":"toUint56","nameLocation":"13805:8:71","nodeType":"FunctionDefinition","parameters":{"id":15030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15029,"mutability":"mutable","name":"value","nameLocation":"13822:5:71","nodeType":"VariableDeclaration","scope":15054,"src":"13814:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15028,"name":"uint256","nodeType":"ElementaryTypeName","src":"13814:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13813:15:71"},"returnParameters":{"id":15033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15032,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15054,"src":"13852:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"},"typeName":{"id":15031,"name":"uint56","nodeType":"ElementaryTypeName","src":"13852:6:71","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"visibility":"internal"}],"src":"13851:8:71"},"scope":16092,"src":"13796:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15081,"nodeType":"Block","src":"14360:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15062,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15057,"src":"14374:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15065,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14387:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":15064,"name":"uint48","nodeType":"ElementaryTypeName","src":"14387:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"}],"id":15063,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14382:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15066,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14382:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint48","typeString":"type(uint48)"}},"id":15067,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14395:3:71","memberName":"max","nodeType":"MemberAccess","src":"14382:16:71","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"14374:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15075,"nodeType":"IfStatement","src":"14370:103:71","trueBody":{"id":15074,"nodeType":"Block","src":"14400:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":15070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14452:2:71","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":15071,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15057,"src":"14456:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15069,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"14421:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14421:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15073,"nodeType":"RevertStatement","src":"14414:48:71"}]}},{"expression":{"arguments":[{"id":15078,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15057,"src":"14496:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15077,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14489:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":15076,"name":"uint48","nodeType":"ElementaryTypeName","src":"14489:6:71","typeDescriptions":{}}},"id":15079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14489:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":15061,"id":15080,"nodeType":"Return","src":"14482:20:71"}]},"documentation":{"id":15055,"nodeType":"StructuredDocumentation","src":"14015:276:71","text":" @dev Returns the downcasted uint48 from uint256, reverting on\n overflow (when the input is greater than largest uint48).\n Counterpart to Solidity's `uint48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":15082,"implemented":true,"kind":"function","modifiers":[],"name":"toUint48","nameLocation":"14305:8:71","nodeType":"FunctionDefinition","parameters":{"id":15058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15057,"mutability":"mutable","name":"value","nameLocation":"14322:5:71","nodeType":"VariableDeclaration","scope":15082,"src":"14314:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15056,"name":"uint256","nodeType":"ElementaryTypeName","src":"14314:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14313:15:71"},"returnParameters":{"id":15061,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15060,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15082,"src":"14352:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":15059,"name":"uint48","nodeType":"ElementaryTypeName","src":"14352:6:71","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"14351:8:71"},"scope":16092,"src":"14296:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15109,"nodeType":"Block","src":"14860:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15090,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15085,"src":"14874:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15093,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14887:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":15092,"name":"uint40","nodeType":"ElementaryTypeName","src":"14887:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"}],"id":15091,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14882:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14882:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint40","typeString":"type(uint40)"}},"id":15095,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14895:3:71","memberName":"max","nodeType":"MemberAccess","src":"14882:16:71","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"14874:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15103,"nodeType":"IfStatement","src":"14870:103:71","trueBody":{"id":15102,"nodeType":"Block","src":"14900:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":15098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14952:2:71","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":15099,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15085,"src":"14956:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15097,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"14921:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14921:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15101,"nodeType":"RevertStatement","src":"14914:48:71"}]}},{"expression":{"arguments":[{"id":15106,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15085,"src":"14996:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15105,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14989:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":15104,"name":"uint40","nodeType":"ElementaryTypeName","src":"14989:6:71","typeDescriptions":{}}},"id":15107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14989:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":15089,"id":15108,"nodeType":"Return","src":"14982:20:71"}]},"documentation":{"id":15083,"nodeType":"StructuredDocumentation","src":"14515:276:71","text":" @dev Returns the downcasted uint40 from uint256, reverting on\n overflow (when the input is greater than largest uint40).\n Counterpart to Solidity's `uint40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":15110,"implemented":true,"kind":"function","modifiers":[],"name":"toUint40","nameLocation":"14805:8:71","nodeType":"FunctionDefinition","parameters":{"id":15086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15085,"mutability":"mutable","name":"value","nameLocation":"14822:5:71","nodeType":"VariableDeclaration","scope":15110,"src":"14814:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15084,"name":"uint256","nodeType":"ElementaryTypeName","src":"14814:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14813:15:71"},"returnParameters":{"id":15089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15088,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15110,"src":"14852:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":15087,"name":"uint40","nodeType":"ElementaryTypeName","src":"14852:6:71","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"14851:8:71"},"scope":16092,"src":"14796:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15137,"nodeType":"Block","src":"15360:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15118,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15113,"src":"15374:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15121,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15387:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":15120,"name":"uint32","nodeType":"ElementaryTypeName","src":"15387:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"}],"id":15119,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15382:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15382:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint32","typeString":"type(uint32)"}},"id":15123,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15395:3:71","memberName":"max","nodeType":"MemberAccess","src":"15382:16:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"15374:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15131,"nodeType":"IfStatement","src":"15370:103:71","trueBody":{"id":15130,"nodeType":"Block","src":"15400:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":15126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15452:2:71","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":15127,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15113,"src":"15456:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15125,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"15421:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15421:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15129,"nodeType":"RevertStatement","src":"15414:48:71"}]}},{"expression":{"arguments":[{"id":15134,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15113,"src":"15496:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15133,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15489:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":15132,"name":"uint32","nodeType":"ElementaryTypeName","src":"15489:6:71","typeDescriptions":{}}},"id":15135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15489:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":15117,"id":15136,"nodeType":"Return","src":"15482:20:71"}]},"documentation":{"id":15111,"nodeType":"StructuredDocumentation","src":"15015:276:71","text":" @dev Returns the downcasted uint32 from uint256, reverting on\n overflow (when the input is greater than largest uint32).\n Counterpart to Solidity's `uint32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":15138,"implemented":true,"kind":"function","modifiers":[],"name":"toUint32","nameLocation":"15305:8:71","nodeType":"FunctionDefinition","parameters":{"id":15114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15113,"mutability":"mutable","name":"value","nameLocation":"15322:5:71","nodeType":"VariableDeclaration","scope":15138,"src":"15314:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15112,"name":"uint256","nodeType":"ElementaryTypeName","src":"15314:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15313:15:71"},"returnParameters":{"id":15117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15116,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15138,"src":"15352:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":15115,"name":"uint32","nodeType":"ElementaryTypeName","src":"15352:6:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"15351:8:71"},"scope":16092,"src":"15296:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15165,"nodeType":"Block","src":"15860:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15146,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15141,"src":"15874:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15149,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15887:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":15148,"name":"uint24","nodeType":"ElementaryTypeName","src":"15887:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"}],"id":15147,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15882:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15150,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15882:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint24","typeString":"type(uint24)"}},"id":15151,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15895:3:71","memberName":"max","nodeType":"MemberAccess","src":"15882:16:71","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"src":"15874:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15159,"nodeType":"IfStatement","src":"15870:103:71","trueBody":{"id":15158,"nodeType":"Block","src":"15900:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":15154,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15952:2:71","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":15155,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15141,"src":"15956:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15153,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"15921:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15921:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15157,"nodeType":"RevertStatement","src":"15914:48:71"}]}},{"expression":{"arguments":[{"id":15162,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15141,"src":"15996:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15161,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15989:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":15160,"name":"uint24","nodeType":"ElementaryTypeName","src":"15989:6:71","typeDescriptions":{}}},"id":15163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15989:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"functionReturnParameters":15145,"id":15164,"nodeType":"Return","src":"15982:20:71"}]},"documentation":{"id":15139,"nodeType":"StructuredDocumentation","src":"15515:276:71","text":" @dev Returns the downcasted uint24 from uint256, reverting on\n overflow (when the input is greater than largest uint24).\n Counterpart to Solidity's `uint24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":15166,"implemented":true,"kind":"function","modifiers":[],"name":"toUint24","nameLocation":"15805:8:71","nodeType":"FunctionDefinition","parameters":{"id":15142,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15141,"mutability":"mutable","name":"value","nameLocation":"15822:5:71","nodeType":"VariableDeclaration","scope":15166,"src":"15814:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15140,"name":"uint256","nodeType":"ElementaryTypeName","src":"15814:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15813:15:71"},"returnParameters":{"id":15145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15144,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15166,"src":"15852:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"},"typeName":{"id":15143,"name":"uint24","nodeType":"ElementaryTypeName","src":"15852:6:71","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"visibility":"internal"}],"src":"15851:8:71"},"scope":16092,"src":"15796:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15193,"nodeType":"Block","src":"16360:149:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15174,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15169,"src":"16374:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15177,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16387:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":15176,"name":"uint16","nodeType":"ElementaryTypeName","src":"16387:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"}],"id":15175,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16382:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16382:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint16","typeString":"type(uint16)"}},"id":15179,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16395:3:71","memberName":"max","nodeType":"MemberAccess","src":"16382:16:71","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"16374:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15187,"nodeType":"IfStatement","src":"16370:103:71","trueBody":{"id":15186,"nodeType":"Block","src":"16400:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":15182,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16452:2:71","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":15183,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15169,"src":"16456:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15181,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"16421:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16421:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15185,"nodeType":"RevertStatement","src":"16414:48:71"}]}},{"expression":{"arguments":[{"id":15190,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15169,"src":"16496:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15189,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16489:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":15188,"name":"uint16","nodeType":"ElementaryTypeName","src":"16489:6:71","typeDescriptions":{}}},"id":15191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16489:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":15173,"id":15192,"nodeType":"Return","src":"16482:20:71"}]},"documentation":{"id":15167,"nodeType":"StructuredDocumentation","src":"16015:276:71","text":" @dev Returns the downcasted uint16 from uint256, reverting on\n overflow (when the input is greater than largest uint16).\n Counterpart to Solidity's `uint16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":15194,"implemented":true,"kind":"function","modifiers":[],"name":"toUint16","nameLocation":"16305:8:71","nodeType":"FunctionDefinition","parameters":{"id":15170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15169,"mutability":"mutable","name":"value","nameLocation":"16322:5:71","nodeType":"VariableDeclaration","scope":15194,"src":"16314:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15168,"name":"uint256","nodeType":"ElementaryTypeName","src":"16314:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16313:15:71"},"returnParameters":{"id":15173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15172,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15194,"src":"16352:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":15171,"name":"uint16","nodeType":"ElementaryTypeName","src":"16352:6:71","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"16351:8:71"},"scope":16092,"src":"16296:213:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15221,"nodeType":"Block","src":"16854:146:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15202,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15197,"src":"16868:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15205,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16881:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":15204,"name":"uint8","nodeType":"ElementaryTypeName","src":"16881:5:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":15203,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16876:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15206,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16876:11:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":15207,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16888:3:71","memberName":"max","nodeType":"MemberAccess","src":"16876:15:71","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"16868:23:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15215,"nodeType":"IfStatement","src":"16864:101:71","trueBody":{"id":15214,"nodeType":"Block","src":"16893:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":15210,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16945:1:71","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":15211,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15197,"src":"16948:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15209,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14337,"src":"16914:30:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16914:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15213,"nodeType":"RevertStatement","src":"16907:47:71"}]}},{"expression":{"arguments":[{"id":15218,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15197,"src":"16987:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15217,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16981:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":15216,"name":"uint8","nodeType":"ElementaryTypeName","src":"16981:5:71","typeDescriptions":{}}},"id":15219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16981:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":15201,"id":15220,"nodeType":"Return","src":"16974:19:71"}]},"documentation":{"id":15195,"nodeType":"StructuredDocumentation","src":"16515:272:71","text":" @dev Returns the downcasted uint8 from uint256, reverting on\n overflow (when the input is greater than largest uint8).\n Counterpart to Solidity's `uint8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":15222,"implemented":true,"kind":"function","modifiers":[],"name":"toUint8","nameLocation":"16801:7:71","nodeType":"FunctionDefinition","parameters":{"id":15198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15197,"mutability":"mutable","name":"value","nameLocation":"16817:5:71","nodeType":"VariableDeclaration","scope":15222,"src":"16809:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15196,"name":"uint256","nodeType":"ElementaryTypeName","src":"16809:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16808:15:71"},"returnParameters":{"id":15201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15200,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15222,"src":"16847:5:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":15199,"name":"uint8","nodeType":"ElementaryTypeName","src":"16847:5:71","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"16846:7:71"},"scope":16092,"src":"16792:208:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15244,"nodeType":"Block","src":"17236:128:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15230,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15225,"src":"17250:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":15231,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17258:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17250:9:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15238,"nodeType":"IfStatement","src":"17246:81:71","trueBody":{"id":15237,"nodeType":"Block","src":"17261:66:71","statements":[{"errorCall":{"arguments":[{"id":15234,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15225,"src":"17310:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15233,"name":"SafeCastOverflowedIntToUint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14342,"src":"17282:27:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_int256_$returns$_t_error_$","typeString":"function (int256) pure returns (error)"}},"id":15235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17282:34:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15236,"nodeType":"RevertStatement","src":"17275:41:71"}]}},{"expression":{"arguments":[{"id":15241,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15225,"src":"17351:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15240,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17343:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":15239,"name":"uint256","nodeType":"ElementaryTypeName","src":"17343:7:71","typeDescriptions":{}}},"id":15242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17343:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15229,"id":15243,"nodeType":"Return","src":"17336:21:71"}]},"documentation":{"id":15223,"nodeType":"StructuredDocumentation","src":"17006:160:71","text":" @dev Converts a signed int256 into an unsigned uint256.\n Requirements:\n - input must be greater than or equal to 0."},"id":15245,"implemented":true,"kind":"function","modifiers":[],"name":"toUint256","nameLocation":"17180:9:71","nodeType":"FunctionDefinition","parameters":{"id":15226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15225,"mutability":"mutable","name":"value","nameLocation":"17197:5:71","nodeType":"VariableDeclaration","scope":15245,"src":"17190:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15224,"name":"int256","nodeType":"ElementaryTypeName","src":"17190:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17189:14:71"},"returnParameters":{"id":15229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15228,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15245,"src":"17227:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15227,"name":"uint256","nodeType":"ElementaryTypeName","src":"17227:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17226:9:71"},"scope":16092,"src":"17171:193:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15270,"nodeType":"Block","src":"17761:150:71","statements":[{"expression":{"id":15258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15253,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"17771:10:71","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15256,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15248,"src":"17791:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15255,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17784:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int248_$","typeString":"type(int248)"},"typeName":{"id":15254,"name":"int248","nodeType":"ElementaryTypeName","src":"17784:6:71","typeDescriptions":{}}},"id":15257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17784:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"src":"17771:26:71","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"id":15259,"nodeType":"ExpressionStatement","src":"17771:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15260,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15251,"src":"17811:10:71","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15261,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15248,"src":"17825:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17811:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15269,"nodeType":"IfStatement","src":"17807:98:71","trueBody":{"id":15268,"nodeType":"Block","src":"17832:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":15264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17883:3:71","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":15265,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15248,"src":"17888:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15263,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"17853:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17853:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15267,"nodeType":"RevertStatement","src":"17846:48:71"}]}}]},"documentation":{"id":15246,"nodeType":"StructuredDocumentation","src":"17370:312:71","text":" @dev Returns the downcasted int248 from int256, reverting on\n overflow (when the input is less than smallest int248 or\n greater than largest int248).\n Counterpart to Solidity's `int248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":15271,"implemented":true,"kind":"function","modifiers":[],"name":"toInt248","nameLocation":"17696:8:71","nodeType":"FunctionDefinition","parameters":{"id":15249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15248,"mutability":"mutable","name":"value","nameLocation":"17712:5:71","nodeType":"VariableDeclaration","scope":15271,"src":"17705:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15247,"name":"int256","nodeType":"ElementaryTypeName","src":"17705:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17704:14:71"},"returnParameters":{"id":15252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15251,"mutability":"mutable","name":"downcasted","nameLocation":"17749:10:71","nodeType":"VariableDeclaration","scope":15271,"src":"17742:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"},"typeName":{"id":15250,"name":"int248","nodeType":"ElementaryTypeName","src":"17742:6:71","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"visibility":"internal"}],"src":"17741:19:71"},"scope":16092,"src":"17687:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15296,"nodeType":"Block","src":"18308:150:71","statements":[{"expression":{"id":15284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15279,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15277,"src":"18318:10:71","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15282,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15274,"src":"18338:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15281,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18331:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int240_$","typeString":"type(int240)"},"typeName":{"id":15280,"name":"int240","nodeType":"ElementaryTypeName","src":"18331:6:71","typeDescriptions":{}}},"id":15283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18331:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"src":"18318:26:71","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"id":15285,"nodeType":"ExpressionStatement","src":"18318:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15286,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15277,"src":"18358:10:71","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15287,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15274,"src":"18372:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18358:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15295,"nodeType":"IfStatement","src":"18354:98:71","trueBody":{"id":15294,"nodeType":"Block","src":"18379:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":15290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18430:3:71","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":15291,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15274,"src":"18435:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15289,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"18400:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18400:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15293,"nodeType":"RevertStatement","src":"18393:48:71"}]}}]},"documentation":{"id":15272,"nodeType":"StructuredDocumentation","src":"17917:312:71","text":" @dev Returns the downcasted int240 from int256, reverting on\n overflow (when the input is less than smallest int240 or\n greater than largest int240).\n Counterpart to Solidity's `int240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":15297,"implemented":true,"kind":"function","modifiers":[],"name":"toInt240","nameLocation":"18243:8:71","nodeType":"FunctionDefinition","parameters":{"id":15275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15274,"mutability":"mutable","name":"value","nameLocation":"18259:5:71","nodeType":"VariableDeclaration","scope":15297,"src":"18252:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15273,"name":"int256","nodeType":"ElementaryTypeName","src":"18252:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18251:14:71"},"returnParameters":{"id":15278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15277,"mutability":"mutable","name":"downcasted","nameLocation":"18296:10:71","nodeType":"VariableDeclaration","scope":15297,"src":"18289:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"},"typeName":{"id":15276,"name":"int240","nodeType":"ElementaryTypeName","src":"18289:6:71","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"visibility":"internal"}],"src":"18288:19:71"},"scope":16092,"src":"18234:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15322,"nodeType":"Block","src":"18855:150:71","statements":[{"expression":{"id":15310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15305,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15303,"src":"18865:10:71","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15308,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15300,"src":"18885:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15307,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18878:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int232_$","typeString":"type(int232)"},"typeName":{"id":15306,"name":"int232","nodeType":"ElementaryTypeName","src":"18878:6:71","typeDescriptions":{}}},"id":15309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18878:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"src":"18865:26:71","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"id":15311,"nodeType":"ExpressionStatement","src":"18865:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15312,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15303,"src":"18905:10:71","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15313,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15300,"src":"18919:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18905:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15321,"nodeType":"IfStatement","src":"18901:98:71","trueBody":{"id":15320,"nodeType":"Block","src":"18926:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":15316,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18977:3:71","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":15317,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15300,"src":"18982:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15315,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"18947:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18947:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15319,"nodeType":"RevertStatement","src":"18940:48:71"}]}}]},"documentation":{"id":15298,"nodeType":"StructuredDocumentation","src":"18464:312:71","text":" @dev Returns the downcasted int232 from int256, reverting on\n overflow (when the input is less than smallest int232 or\n greater than largest int232).\n Counterpart to Solidity's `int232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":15323,"implemented":true,"kind":"function","modifiers":[],"name":"toInt232","nameLocation":"18790:8:71","nodeType":"FunctionDefinition","parameters":{"id":15301,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15300,"mutability":"mutable","name":"value","nameLocation":"18806:5:71","nodeType":"VariableDeclaration","scope":15323,"src":"18799:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15299,"name":"int256","nodeType":"ElementaryTypeName","src":"18799:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18798:14:71"},"returnParameters":{"id":15304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15303,"mutability":"mutable","name":"downcasted","nameLocation":"18843:10:71","nodeType":"VariableDeclaration","scope":15323,"src":"18836:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"},"typeName":{"id":15302,"name":"int232","nodeType":"ElementaryTypeName","src":"18836:6:71","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"visibility":"internal"}],"src":"18835:19:71"},"scope":16092,"src":"18781:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15348,"nodeType":"Block","src":"19402:150:71","statements":[{"expression":{"id":15336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15331,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15329,"src":"19412:10:71","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15334,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15326,"src":"19432:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15333,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19425:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int224_$","typeString":"type(int224)"},"typeName":{"id":15332,"name":"int224","nodeType":"ElementaryTypeName","src":"19425:6:71","typeDescriptions":{}}},"id":15335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19425:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"src":"19412:26:71","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"id":15337,"nodeType":"ExpressionStatement","src":"19412:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15338,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15329,"src":"19452:10:71","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15339,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15326,"src":"19466:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19452:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15347,"nodeType":"IfStatement","src":"19448:98:71","trueBody":{"id":15346,"nodeType":"Block","src":"19473:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":15342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19524:3:71","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":15343,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15326,"src":"19529:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15341,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"19494:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19494:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15345,"nodeType":"RevertStatement","src":"19487:48:71"}]}}]},"documentation":{"id":15324,"nodeType":"StructuredDocumentation","src":"19011:312:71","text":" @dev Returns the downcasted int224 from int256, reverting on\n overflow (when the input is less than smallest int224 or\n greater than largest int224).\n Counterpart to Solidity's `int224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":15349,"implemented":true,"kind":"function","modifiers":[],"name":"toInt224","nameLocation":"19337:8:71","nodeType":"FunctionDefinition","parameters":{"id":15327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15326,"mutability":"mutable","name":"value","nameLocation":"19353:5:71","nodeType":"VariableDeclaration","scope":15349,"src":"19346:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15325,"name":"int256","nodeType":"ElementaryTypeName","src":"19346:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19345:14:71"},"returnParameters":{"id":15330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15329,"mutability":"mutable","name":"downcasted","nameLocation":"19390:10:71","nodeType":"VariableDeclaration","scope":15349,"src":"19383:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"},"typeName":{"id":15328,"name":"int224","nodeType":"ElementaryTypeName","src":"19383:6:71","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"visibility":"internal"}],"src":"19382:19:71"},"scope":16092,"src":"19328:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15374,"nodeType":"Block","src":"19949:150:71","statements":[{"expression":{"id":15362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15357,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15355,"src":"19959:10:71","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15360,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15352,"src":"19979:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15359,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19972:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int216_$","typeString":"type(int216)"},"typeName":{"id":15358,"name":"int216","nodeType":"ElementaryTypeName","src":"19972:6:71","typeDescriptions":{}}},"id":15361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19972:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"src":"19959:26:71","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"id":15363,"nodeType":"ExpressionStatement","src":"19959:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15364,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15355,"src":"19999:10:71","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15365,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15352,"src":"20013:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19999:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15373,"nodeType":"IfStatement","src":"19995:98:71","trueBody":{"id":15372,"nodeType":"Block","src":"20020:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":15368,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20071:3:71","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":15369,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15352,"src":"20076:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15367,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"20041:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20041:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15371,"nodeType":"RevertStatement","src":"20034:48:71"}]}}]},"documentation":{"id":15350,"nodeType":"StructuredDocumentation","src":"19558:312:71","text":" @dev Returns the downcasted int216 from int256, reverting on\n overflow (when the input is less than smallest int216 or\n greater than largest int216).\n Counterpart to Solidity's `int216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":15375,"implemented":true,"kind":"function","modifiers":[],"name":"toInt216","nameLocation":"19884:8:71","nodeType":"FunctionDefinition","parameters":{"id":15353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15352,"mutability":"mutable","name":"value","nameLocation":"19900:5:71","nodeType":"VariableDeclaration","scope":15375,"src":"19893:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15351,"name":"int256","nodeType":"ElementaryTypeName","src":"19893:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19892:14:71"},"returnParameters":{"id":15356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15355,"mutability":"mutable","name":"downcasted","nameLocation":"19937:10:71","nodeType":"VariableDeclaration","scope":15375,"src":"19930:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"},"typeName":{"id":15354,"name":"int216","nodeType":"ElementaryTypeName","src":"19930:6:71","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"visibility":"internal"}],"src":"19929:19:71"},"scope":16092,"src":"19875:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15400,"nodeType":"Block","src":"20496:150:71","statements":[{"expression":{"id":15388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15383,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15381,"src":"20506:10:71","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15386,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15378,"src":"20526:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15385,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20519:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int208_$","typeString":"type(int208)"},"typeName":{"id":15384,"name":"int208","nodeType":"ElementaryTypeName","src":"20519:6:71","typeDescriptions":{}}},"id":15387,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20519:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"src":"20506:26:71","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"id":15389,"nodeType":"ExpressionStatement","src":"20506:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15390,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15381,"src":"20546:10:71","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15391,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15378,"src":"20560:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20546:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15399,"nodeType":"IfStatement","src":"20542:98:71","trueBody":{"id":15398,"nodeType":"Block","src":"20567:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":15394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20618:3:71","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":15395,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15378,"src":"20623:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15393,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"20588:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20588:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15397,"nodeType":"RevertStatement","src":"20581:48:71"}]}}]},"documentation":{"id":15376,"nodeType":"StructuredDocumentation","src":"20105:312:71","text":" @dev Returns the downcasted int208 from int256, reverting on\n overflow (when the input is less than smallest int208 or\n greater than largest int208).\n Counterpart to Solidity's `int208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":15401,"implemented":true,"kind":"function","modifiers":[],"name":"toInt208","nameLocation":"20431:8:71","nodeType":"FunctionDefinition","parameters":{"id":15379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15378,"mutability":"mutable","name":"value","nameLocation":"20447:5:71","nodeType":"VariableDeclaration","scope":15401,"src":"20440:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15377,"name":"int256","nodeType":"ElementaryTypeName","src":"20440:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20439:14:71"},"returnParameters":{"id":15382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15381,"mutability":"mutable","name":"downcasted","nameLocation":"20484:10:71","nodeType":"VariableDeclaration","scope":15401,"src":"20477:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"},"typeName":{"id":15380,"name":"int208","nodeType":"ElementaryTypeName","src":"20477:6:71","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"visibility":"internal"}],"src":"20476:19:71"},"scope":16092,"src":"20422:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15426,"nodeType":"Block","src":"21043:150:71","statements":[{"expression":{"id":15414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15409,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15407,"src":"21053:10:71","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15412,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15404,"src":"21073:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15411,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21066:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int200_$","typeString":"type(int200)"},"typeName":{"id":15410,"name":"int200","nodeType":"ElementaryTypeName","src":"21066:6:71","typeDescriptions":{}}},"id":15413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21066:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"src":"21053:26:71","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"id":15415,"nodeType":"ExpressionStatement","src":"21053:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15416,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15407,"src":"21093:10:71","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15417,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15404,"src":"21107:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21093:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15425,"nodeType":"IfStatement","src":"21089:98:71","trueBody":{"id":15424,"nodeType":"Block","src":"21114:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":15420,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21165:3:71","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":15421,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15404,"src":"21170:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15419,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"21135:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21135:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15423,"nodeType":"RevertStatement","src":"21128:48:71"}]}}]},"documentation":{"id":15402,"nodeType":"StructuredDocumentation","src":"20652:312:71","text":" @dev Returns the downcasted int200 from int256, reverting on\n overflow (when the input is less than smallest int200 or\n greater than largest int200).\n Counterpart to Solidity's `int200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":15427,"implemented":true,"kind":"function","modifiers":[],"name":"toInt200","nameLocation":"20978:8:71","nodeType":"FunctionDefinition","parameters":{"id":15405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15404,"mutability":"mutable","name":"value","nameLocation":"20994:5:71","nodeType":"VariableDeclaration","scope":15427,"src":"20987:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15403,"name":"int256","nodeType":"ElementaryTypeName","src":"20987:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20986:14:71"},"returnParameters":{"id":15408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15407,"mutability":"mutable","name":"downcasted","nameLocation":"21031:10:71","nodeType":"VariableDeclaration","scope":15427,"src":"21024:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"},"typeName":{"id":15406,"name":"int200","nodeType":"ElementaryTypeName","src":"21024:6:71","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"visibility":"internal"}],"src":"21023:19:71"},"scope":16092,"src":"20969:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15452,"nodeType":"Block","src":"21590:150:71","statements":[{"expression":{"id":15440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15435,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15433,"src":"21600:10:71","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15438,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15430,"src":"21620:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15437,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21613:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int192_$","typeString":"type(int192)"},"typeName":{"id":15436,"name":"int192","nodeType":"ElementaryTypeName","src":"21613:6:71","typeDescriptions":{}}},"id":15439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21613:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"src":"21600:26:71","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"id":15441,"nodeType":"ExpressionStatement","src":"21600:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15442,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15433,"src":"21640:10:71","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15443,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15430,"src":"21654:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21640:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15451,"nodeType":"IfStatement","src":"21636:98:71","trueBody":{"id":15450,"nodeType":"Block","src":"21661:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":15446,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21712:3:71","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":15447,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15430,"src":"21717:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15445,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"21682:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21682:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15449,"nodeType":"RevertStatement","src":"21675:48:71"}]}}]},"documentation":{"id":15428,"nodeType":"StructuredDocumentation","src":"21199:312:71","text":" @dev Returns the downcasted int192 from int256, reverting on\n overflow (when the input is less than smallest int192 or\n greater than largest int192).\n Counterpart to Solidity's `int192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":15453,"implemented":true,"kind":"function","modifiers":[],"name":"toInt192","nameLocation":"21525:8:71","nodeType":"FunctionDefinition","parameters":{"id":15431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15430,"mutability":"mutable","name":"value","nameLocation":"21541:5:71","nodeType":"VariableDeclaration","scope":15453,"src":"21534:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15429,"name":"int256","nodeType":"ElementaryTypeName","src":"21534:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"21533:14:71"},"returnParameters":{"id":15434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15433,"mutability":"mutable","name":"downcasted","nameLocation":"21578:10:71","nodeType":"VariableDeclaration","scope":15453,"src":"21571:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"},"typeName":{"id":15432,"name":"int192","nodeType":"ElementaryTypeName","src":"21571:6:71","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"visibility":"internal"}],"src":"21570:19:71"},"scope":16092,"src":"21516:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15478,"nodeType":"Block","src":"22137:150:71","statements":[{"expression":{"id":15466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15461,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15459,"src":"22147:10:71","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15464,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15456,"src":"22167:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15463,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22160:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int184_$","typeString":"type(int184)"},"typeName":{"id":15462,"name":"int184","nodeType":"ElementaryTypeName","src":"22160:6:71","typeDescriptions":{}}},"id":15465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22160:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"src":"22147:26:71","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"id":15467,"nodeType":"ExpressionStatement","src":"22147:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15468,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15459,"src":"22187:10:71","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15469,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15456,"src":"22201:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22187:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15477,"nodeType":"IfStatement","src":"22183:98:71","trueBody":{"id":15476,"nodeType":"Block","src":"22208:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":15472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22259:3:71","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":15473,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15456,"src":"22264:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15471,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"22229:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22229:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15475,"nodeType":"RevertStatement","src":"22222:48:71"}]}}]},"documentation":{"id":15454,"nodeType":"StructuredDocumentation","src":"21746:312:71","text":" @dev Returns the downcasted int184 from int256, reverting on\n overflow (when the input is less than smallest int184 or\n greater than largest int184).\n Counterpart to Solidity's `int184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":15479,"implemented":true,"kind":"function","modifiers":[],"name":"toInt184","nameLocation":"22072:8:71","nodeType":"FunctionDefinition","parameters":{"id":15457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15456,"mutability":"mutable","name":"value","nameLocation":"22088:5:71","nodeType":"VariableDeclaration","scope":15479,"src":"22081:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15455,"name":"int256","nodeType":"ElementaryTypeName","src":"22081:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22080:14:71"},"returnParameters":{"id":15460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15459,"mutability":"mutable","name":"downcasted","nameLocation":"22125:10:71","nodeType":"VariableDeclaration","scope":15479,"src":"22118:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"},"typeName":{"id":15458,"name":"int184","nodeType":"ElementaryTypeName","src":"22118:6:71","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"visibility":"internal"}],"src":"22117:19:71"},"scope":16092,"src":"22063:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15504,"nodeType":"Block","src":"22684:150:71","statements":[{"expression":{"id":15492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15487,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15485,"src":"22694:10:71","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15490,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15482,"src":"22714:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15489,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22707:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int176_$","typeString":"type(int176)"},"typeName":{"id":15488,"name":"int176","nodeType":"ElementaryTypeName","src":"22707:6:71","typeDescriptions":{}}},"id":15491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22707:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"src":"22694:26:71","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"id":15493,"nodeType":"ExpressionStatement","src":"22694:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15494,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15485,"src":"22734:10:71","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15495,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15482,"src":"22748:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22734:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15503,"nodeType":"IfStatement","src":"22730:98:71","trueBody":{"id":15502,"nodeType":"Block","src":"22755:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":15498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22806:3:71","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":15499,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15482,"src":"22811:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15497,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"22776:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22776:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15501,"nodeType":"RevertStatement","src":"22769:48:71"}]}}]},"documentation":{"id":15480,"nodeType":"StructuredDocumentation","src":"22293:312:71","text":" @dev Returns the downcasted int176 from int256, reverting on\n overflow (when the input is less than smallest int176 or\n greater than largest int176).\n Counterpart to Solidity's `int176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":15505,"implemented":true,"kind":"function","modifiers":[],"name":"toInt176","nameLocation":"22619:8:71","nodeType":"FunctionDefinition","parameters":{"id":15483,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15482,"mutability":"mutable","name":"value","nameLocation":"22635:5:71","nodeType":"VariableDeclaration","scope":15505,"src":"22628:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15481,"name":"int256","nodeType":"ElementaryTypeName","src":"22628:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22627:14:71"},"returnParameters":{"id":15486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15485,"mutability":"mutable","name":"downcasted","nameLocation":"22672:10:71","nodeType":"VariableDeclaration","scope":15505,"src":"22665:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"},"typeName":{"id":15484,"name":"int176","nodeType":"ElementaryTypeName","src":"22665:6:71","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"visibility":"internal"}],"src":"22664:19:71"},"scope":16092,"src":"22610:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15530,"nodeType":"Block","src":"23231:150:71","statements":[{"expression":{"id":15518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15513,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15511,"src":"23241:10:71","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15516,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15508,"src":"23261:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15515,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23254:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int168_$","typeString":"type(int168)"},"typeName":{"id":15514,"name":"int168","nodeType":"ElementaryTypeName","src":"23254:6:71","typeDescriptions":{}}},"id":15517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23254:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"src":"23241:26:71","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"id":15519,"nodeType":"ExpressionStatement","src":"23241:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15520,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15511,"src":"23281:10:71","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15521,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15508,"src":"23295:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23281:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15529,"nodeType":"IfStatement","src":"23277:98:71","trueBody":{"id":15528,"nodeType":"Block","src":"23302:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":15524,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23353:3:71","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":15525,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15508,"src":"23358:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15523,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"23323:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23323:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15527,"nodeType":"RevertStatement","src":"23316:48:71"}]}}]},"documentation":{"id":15506,"nodeType":"StructuredDocumentation","src":"22840:312:71","text":" @dev Returns the downcasted int168 from int256, reverting on\n overflow (when the input is less than smallest int168 or\n greater than largest int168).\n Counterpart to Solidity's `int168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":15531,"implemented":true,"kind":"function","modifiers":[],"name":"toInt168","nameLocation":"23166:8:71","nodeType":"FunctionDefinition","parameters":{"id":15509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15508,"mutability":"mutable","name":"value","nameLocation":"23182:5:71","nodeType":"VariableDeclaration","scope":15531,"src":"23175:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15507,"name":"int256","nodeType":"ElementaryTypeName","src":"23175:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23174:14:71"},"returnParameters":{"id":15512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15511,"mutability":"mutable","name":"downcasted","nameLocation":"23219:10:71","nodeType":"VariableDeclaration","scope":15531,"src":"23212:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"},"typeName":{"id":15510,"name":"int168","nodeType":"ElementaryTypeName","src":"23212:6:71","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"visibility":"internal"}],"src":"23211:19:71"},"scope":16092,"src":"23157:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15556,"nodeType":"Block","src":"23778:150:71","statements":[{"expression":{"id":15544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15539,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15537,"src":"23788:10:71","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15542,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15534,"src":"23808:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15541,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23801:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int160_$","typeString":"type(int160)"},"typeName":{"id":15540,"name":"int160","nodeType":"ElementaryTypeName","src":"23801:6:71","typeDescriptions":{}}},"id":15543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23801:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"src":"23788:26:71","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"id":15545,"nodeType":"ExpressionStatement","src":"23788:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15546,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15537,"src":"23828:10:71","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15547,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15534,"src":"23842:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23828:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15555,"nodeType":"IfStatement","src":"23824:98:71","trueBody":{"id":15554,"nodeType":"Block","src":"23849:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":15550,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23900:3:71","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":15551,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15534,"src":"23905:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15549,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"23870:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23870:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15553,"nodeType":"RevertStatement","src":"23863:48:71"}]}}]},"documentation":{"id":15532,"nodeType":"StructuredDocumentation","src":"23387:312:71","text":" @dev Returns the downcasted int160 from int256, reverting on\n overflow (when the input is less than smallest int160 or\n greater than largest int160).\n Counterpart to Solidity's `int160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":15557,"implemented":true,"kind":"function","modifiers":[],"name":"toInt160","nameLocation":"23713:8:71","nodeType":"FunctionDefinition","parameters":{"id":15535,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15534,"mutability":"mutable","name":"value","nameLocation":"23729:5:71","nodeType":"VariableDeclaration","scope":15557,"src":"23722:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15533,"name":"int256","nodeType":"ElementaryTypeName","src":"23722:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23721:14:71"},"returnParameters":{"id":15538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15537,"mutability":"mutable","name":"downcasted","nameLocation":"23766:10:71","nodeType":"VariableDeclaration","scope":15557,"src":"23759:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"},"typeName":{"id":15536,"name":"int160","nodeType":"ElementaryTypeName","src":"23759:6:71","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"visibility":"internal"}],"src":"23758:19:71"},"scope":16092,"src":"23704:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15582,"nodeType":"Block","src":"24325:150:71","statements":[{"expression":{"id":15570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15565,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15563,"src":"24335:10:71","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15568,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15560,"src":"24355:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15567,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24348:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int152_$","typeString":"type(int152)"},"typeName":{"id":15566,"name":"int152","nodeType":"ElementaryTypeName","src":"24348:6:71","typeDescriptions":{}}},"id":15569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24348:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"src":"24335:26:71","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"id":15571,"nodeType":"ExpressionStatement","src":"24335:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15572,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15563,"src":"24375:10:71","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15573,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15560,"src":"24389:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24375:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15581,"nodeType":"IfStatement","src":"24371:98:71","trueBody":{"id":15580,"nodeType":"Block","src":"24396:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":15576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24447:3:71","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":15577,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15560,"src":"24452:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15575,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"24417:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24417:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15579,"nodeType":"RevertStatement","src":"24410:48:71"}]}}]},"documentation":{"id":15558,"nodeType":"StructuredDocumentation","src":"23934:312:71","text":" @dev Returns the downcasted int152 from int256, reverting on\n overflow (when the input is less than smallest int152 or\n greater than largest int152).\n Counterpart to Solidity's `int152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":15583,"implemented":true,"kind":"function","modifiers":[],"name":"toInt152","nameLocation":"24260:8:71","nodeType":"FunctionDefinition","parameters":{"id":15561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15560,"mutability":"mutable","name":"value","nameLocation":"24276:5:71","nodeType":"VariableDeclaration","scope":15583,"src":"24269:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15559,"name":"int256","nodeType":"ElementaryTypeName","src":"24269:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24268:14:71"},"returnParameters":{"id":15564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15563,"mutability":"mutable","name":"downcasted","nameLocation":"24313:10:71","nodeType":"VariableDeclaration","scope":15583,"src":"24306:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"},"typeName":{"id":15562,"name":"int152","nodeType":"ElementaryTypeName","src":"24306:6:71","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"visibility":"internal"}],"src":"24305:19:71"},"scope":16092,"src":"24251:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15608,"nodeType":"Block","src":"24872:150:71","statements":[{"expression":{"id":15596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15591,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15589,"src":"24882:10:71","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15594,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15586,"src":"24902:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15593,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24895:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int144_$","typeString":"type(int144)"},"typeName":{"id":15592,"name":"int144","nodeType":"ElementaryTypeName","src":"24895:6:71","typeDescriptions":{}}},"id":15595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24895:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"src":"24882:26:71","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"id":15597,"nodeType":"ExpressionStatement","src":"24882:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15598,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15589,"src":"24922:10:71","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15599,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15586,"src":"24936:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24922:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15607,"nodeType":"IfStatement","src":"24918:98:71","trueBody":{"id":15606,"nodeType":"Block","src":"24943:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":15602,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24994:3:71","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":15603,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15586,"src":"24999:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15601,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"24964:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24964:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15605,"nodeType":"RevertStatement","src":"24957:48:71"}]}}]},"documentation":{"id":15584,"nodeType":"StructuredDocumentation","src":"24481:312:71","text":" @dev Returns the downcasted int144 from int256, reverting on\n overflow (when the input is less than smallest int144 or\n greater than largest int144).\n Counterpart to Solidity's `int144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":15609,"implemented":true,"kind":"function","modifiers":[],"name":"toInt144","nameLocation":"24807:8:71","nodeType":"FunctionDefinition","parameters":{"id":15587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15586,"mutability":"mutable","name":"value","nameLocation":"24823:5:71","nodeType":"VariableDeclaration","scope":15609,"src":"24816:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15585,"name":"int256","nodeType":"ElementaryTypeName","src":"24816:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24815:14:71"},"returnParameters":{"id":15590,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15589,"mutability":"mutable","name":"downcasted","nameLocation":"24860:10:71","nodeType":"VariableDeclaration","scope":15609,"src":"24853:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"},"typeName":{"id":15588,"name":"int144","nodeType":"ElementaryTypeName","src":"24853:6:71","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"visibility":"internal"}],"src":"24852:19:71"},"scope":16092,"src":"24798:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15634,"nodeType":"Block","src":"25419:150:71","statements":[{"expression":{"id":15622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15617,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15615,"src":"25429:10:71","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15620,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15612,"src":"25449:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15619,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25442:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int136_$","typeString":"type(int136)"},"typeName":{"id":15618,"name":"int136","nodeType":"ElementaryTypeName","src":"25442:6:71","typeDescriptions":{}}},"id":15621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25442:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"src":"25429:26:71","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"id":15623,"nodeType":"ExpressionStatement","src":"25429:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15624,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15615,"src":"25469:10:71","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15625,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15612,"src":"25483:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"25469:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15633,"nodeType":"IfStatement","src":"25465:98:71","trueBody":{"id":15632,"nodeType":"Block","src":"25490:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":15628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25541:3:71","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":15629,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15612,"src":"25546:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15627,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"25511:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25511:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15631,"nodeType":"RevertStatement","src":"25504:48:71"}]}}]},"documentation":{"id":15610,"nodeType":"StructuredDocumentation","src":"25028:312:71","text":" @dev Returns the downcasted int136 from int256, reverting on\n overflow (when the input is less than smallest int136 or\n greater than largest int136).\n Counterpart to Solidity's `int136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":15635,"implemented":true,"kind":"function","modifiers":[],"name":"toInt136","nameLocation":"25354:8:71","nodeType":"FunctionDefinition","parameters":{"id":15613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15612,"mutability":"mutable","name":"value","nameLocation":"25370:5:71","nodeType":"VariableDeclaration","scope":15635,"src":"25363:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15611,"name":"int256","nodeType":"ElementaryTypeName","src":"25363:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25362:14:71"},"returnParameters":{"id":15616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15615,"mutability":"mutable","name":"downcasted","nameLocation":"25407:10:71","nodeType":"VariableDeclaration","scope":15635,"src":"25400:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"},"typeName":{"id":15614,"name":"int136","nodeType":"ElementaryTypeName","src":"25400:6:71","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"visibility":"internal"}],"src":"25399:19:71"},"scope":16092,"src":"25345:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15660,"nodeType":"Block","src":"25966:150:71","statements":[{"expression":{"id":15648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15643,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15641,"src":"25976:10:71","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15646,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15638,"src":"25996:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15645,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25989:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"},"typeName":{"id":15644,"name":"int128","nodeType":"ElementaryTypeName","src":"25989:6:71","typeDescriptions":{}}},"id":15647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25989:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"src":"25976:26:71","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"id":15649,"nodeType":"ExpressionStatement","src":"25976:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15650,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15641,"src":"26016:10:71","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15651,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15638,"src":"26030:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26016:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15659,"nodeType":"IfStatement","src":"26012:98:71","trueBody":{"id":15658,"nodeType":"Block","src":"26037:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":15654,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26088:3:71","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":15655,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15638,"src":"26093:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15653,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"26058:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26058:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15657,"nodeType":"RevertStatement","src":"26051:48:71"}]}}]},"documentation":{"id":15636,"nodeType":"StructuredDocumentation","src":"25575:312:71","text":" @dev Returns the downcasted int128 from int256, reverting on\n overflow (when the input is less than smallest int128 or\n greater than largest int128).\n Counterpart to Solidity's `int128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":15661,"implemented":true,"kind":"function","modifiers":[],"name":"toInt128","nameLocation":"25901:8:71","nodeType":"FunctionDefinition","parameters":{"id":15639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15638,"mutability":"mutable","name":"value","nameLocation":"25917:5:71","nodeType":"VariableDeclaration","scope":15661,"src":"25910:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15637,"name":"int256","nodeType":"ElementaryTypeName","src":"25910:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25909:14:71"},"returnParameters":{"id":15642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15641,"mutability":"mutable","name":"downcasted","nameLocation":"25954:10:71","nodeType":"VariableDeclaration","scope":15661,"src":"25947:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"},"typeName":{"id":15640,"name":"int128","nodeType":"ElementaryTypeName","src":"25947:6:71","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"visibility":"internal"}],"src":"25946:19:71"},"scope":16092,"src":"25892:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15686,"nodeType":"Block","src":"26513:150:71","statements":[{"expression":{"id":15674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15669,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"26523:10:71","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15672,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15664,"src":"26543:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15671,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26536:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int120_$","typeString":"type(int120)"},"typeName":{"id":15670,"name":"int120","nodeType":"ElementaryTypeName","src":"26536:6:71","typeDescriptions":{}}},"id":15673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26536:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"src":"26523:26:71","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"id":15675,"nodeType":"ExpressionStatement","src":"26523:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15676,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15667,"src":"26563:10:71","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15677,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15664,"src":"26577:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26563:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15685,"nodeType":"IfStatement","src":"26559:98:71","trueBody":{"id":15684,"nodeType":"Block","src":"26584:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":15680,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26635:3:71","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":15681,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15664,"src":"26640:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15679,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"26605:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26605:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15683,"nodeType":"RevertStatement","src":"26598:48:71"}]}}]},"documentation":{"id":15662,"nodeType":"StructuredDocumentation","src":"26122:312:71","text":" @dev Returns the downcasted int120 from int256, reverting on\n overflow (when the input is less than smallest int120 or\n greater than largest int120).\n Counterpart to Solidity's `int120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":15687,"implemented":true,"kind":"function","modifiers":[],"name":"toInt120","nameLocation":"26448:8:71","nodeType":"FunctionDefinition","parameters":{"id":15665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15664,"mutability":"mutable","name":"value","nameLocation":"26464:5:71","nodeType":"VariableDeclaration","scope":15687,"src":"26457:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15663,"name":"int256","nodeType":"ElementaryTypeName","src":"26457:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"26456:14:71"},"returnParameters":{"id":15668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15667,"mutability":"mutable","name":"downcasted","nameLocation":"26501:10:71","nodeType":"VariableDeclaration","scope":15687,"src":"26494:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"},"typeName":{"id":15666,"name":"int120","nodeType":"ElementaryTypeName","src":"26494:6:71","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"visibility":"internal"}],"src":"26493:19:71"},"scope":16092,"src":"26439:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15712,"nodeType":"Block","src":"27060:150:71","statements":[{"expression":{"id":15700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15695,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15693,"src":"27070:10:71","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15698,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15690,"src":"27090:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15697,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27083:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int112_$","typeString":"type(int112)"},"typeName":{"id":15696,"name":"int112","nodeType":"ElementaryTypeName","src":"27083:6:71","typeDescriptions":{}}},"id":15699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27083:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"src":"27070:26:71","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"id":15701,"nodeType":"ExpressionStatement","src":"27070:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15702,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15693,"src":"27110:10:71","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15703,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15690,"src":"27124:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27110:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15711,"nodeType":"IfStatement","src":"27106:98:71","trueBody":{"id":15710,"nodeType":"Block","src":"27131:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":15706,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27182:3:71","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":15707,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15690,"src":"27187:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15705,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"27152:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27152:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15709,"nodeType":"RevertStatement","src":"27145:48:71"}]}}]},"documentation":{"id":15688,"nodeType":"StructuredDocumentation","src":"26669:312:71","text":" @dev Returns the downcasted int112 from int256, reverting on\n overflow (when the input is less than smallest int112 or\n greater than largest int112).\n Counterpart to Solidity's `int112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":15713,"implemented":true,"kind":"function","modifiers":[],"name":"toInt112","nameLocation":"26995:8:71","nodeType":"FunctionDefinition","parameters":{"id":15691,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15690,"mutability":"mutable","name":"value","nameLocation":"27011:5:71","nodeType":"VariableDeclaration","scope":15713,"src":"27004:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15689,"name":"int256","nodeType":"ElementaryTypeName","src":"27004:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"27003:14:71"},"returnParameters":{"id":15694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15693,"mutability":"mutable","name":"downcasted","nameLocation":"27048:10:71","nodeType":"VariableDeclaration","scope":15713,"src":"27041:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"},"typeName":{"id":15692,"name":"int112","nodeType":"ElementaryTypeName","src":"27041:6:71","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"visibility":"internal"}],"src":"27040:19:71"},"scope":16092,"src":"26986:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15738,"nodeType":"Block","src":"27607:150:71","statements":[{"expression":{"id":15726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15721,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15719,"src":"27617:10:71","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15724,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15716,"src":"27637:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15723,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27630:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int104_$","typeString":"type(int104)"},"typeName":{"id":15722,"name":"int104","nodeType":"ElementaryTypeName","src":"27630:6:71","typeDescriptions":{}}},"id":15725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27630:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"src":"27617:26:71","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"id":15727,"nodeType":"ExpressionStatement","src":"27617:26:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15728,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15719,"src":"27657:10:71","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15729,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15716,"src":"27671:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27657:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15737,"nodeType":"IfStatement","src":"27653:98:71","trueBody":{"id":15736,"nodeType":"Block","src":"27678:73:71","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":15732,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27729:3:71","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":15733,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15716,"src":"27734:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15731,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"27699:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27699:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15735,"nodeType":"RevertStatement","src":"27692:48:71"}]}}]},"documentation":{"id":15714,"nodeType":"StructuredDocumentation","src":"27216:312:71","text":" @dev Returns the downcasted int104 from int256, reverting on\n overflow (when the input is less than smallest int104 or\n greater than largest int104).\n Counterpart to Solidity's `int104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":15739,"implemented":true,"kind":"function","modifiers":[],"name":"toInt104","nameLocation":"27542:8:71","nodeType":"FunctionDefinition","parameters":{"id":15717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15716,"mutability":"mutable","name":"value","nameLocation":"27558:5:71","nodeType":"VariableDeclaration","scope":15739,"src":"27551:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15715,"name":"int256","nodeType":"ElementaryTypeName","src":"27551:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"27550:14:71"},"returnParameters":{"id":15720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15719,"mutability":"mutable","name":"downcasted","nameLocation":"27595:10:71","nodeType":"VariableDeclaration","scope":15739,"src":"27588:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"},"typeName":{"id":15718,"name":"int104","nodeType":"ElementaryTypeName","src":"27588:6:71","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"visibility":"internal"}],"src":"27587:19:71"},"scope":16092,"src":"27533:224:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15764,"nodeType":"Block","src":"28147:148:71","statements":[{"expression":{"id":15752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15747,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15745,"src":"28157:10:71","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15750,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15742,"src":"28176:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15749,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28170:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int96_$","typeString":"type(int96)"},"typeName":{"id":15748,"name":"int96","nodeType":"ElementaryTypeName","src":"28170:5:71","typeDescriptions":{}}},"id":15751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28170:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"src":"28157:25:71","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"id":15753,"nodeType":"ExpressionStatement","src":"28157:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15754,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15745,"src":"28196:10:71","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15755,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15742,"src":"28210:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28196:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15763,"nodeType":"IfStatement","src":"28192:97:71","trueBody":{"id":15762,"nodeType":"Block","src":"28217:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":15758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28268:2:71","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":15759,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15742,"src":"28272:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15757,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"28238:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28238:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15761,"nodeType":"RevertStatement","src":"28231:47:71"}]}}]},"documentation":{"id":15740,"nodeType":"StructuredDocumentation","src":"27763:307:71","text":" @dev Returns the downcasted int96 from int256, reverting on\n overflow (when the input is less than smallest int96 or\n greater than largest int96).\n Counterpart to Solidity's `int96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":15765,"implemented":true,"kind":"function","modifiers":[],"name":"toInt96","nameLocation":"28084:7:71","nodeType":"FunctionDefinition","parameters":{"id":15743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15742,"mutability":"mutable","name":"value","nameLocation":"28099:5:71","nodeType":"VariableDeclaration","scope":15765,"src":"28092:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15741,"name":"int256","nodeType":"ElementaryTypeName","src":"28092:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28091:14:71"},"returnParameters":{"id":15746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15745,"mutability":"mutable","name":"downcasted","nameLocation":"28135:10:71","nodeType":"VariableDeclaration","scope":15765,"src":"28129:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"},"typeName":{"id":15744,"name":"int96","nodeType":"ElementaryTypeName","src":"28129:5:71","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"visibility":"internal"}],"src":"28128:18:71"},"scope":16092,"src":"28075:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15790,"nodeType":"Block","src":"28685:148:71","statements":[{"expression":{"id":15778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15773,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15771,"src":"28695:10:71","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15776,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15768,"src":"28714:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15775,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28708:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int88_$","typeString":"type(int88)"},"typeName":{"id":15774,"name":"int88","nodeType":"ElementaryTypeName","src":"28708:5:71","typeDescriptions":{}}},"id":15777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28708:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"src":"28695:25:71","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"id":15779,"nodeType":"ExpressionStatement","src":"28695:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15780,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15771,"src":"28734:10:71","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15781,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15768,"src":"28748:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28734:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15789,"nodeType":"IfStatement","src":"28730:97:71","trueBody":{"id":15788,"nodeType":"Block","src":"28755:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":15784,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28806:2:71","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":15785,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15768,"src":"28810:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15783,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"28776:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28776:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15787,"nodeType":"RevertStatement","src":"28769:47:71"}]}}]},"documentation":{"id":15766,"nodeType":"StructuredDocumentation","src":"28301:307:71","text":" @dev Returns the downcasted int88 from int256, reverting on\n overflow (when the input is less than smallest int88 or\n greater than largest int88).\n Counterpart to Solidity's `int88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":15791,"implemented":true,"kind":"function","modifiers":[],"name":"toInt88","nameLocation":"28622:7:71","nodeType":"FunctionDefinition","parameters":{"id":15769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15768,"mutability":"mutable","name":"value","nameLocation":"28637:5:71","nodeType":"VariableDeclaration","scope":15791,"src":"28630:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15767,"name":"int256","nodeType":"ElementaryTypeName","src":"28630:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28629:14:71"},"returnParameters":{"id":15772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15771,"mutability":"mutable","name":"downcasted","nameLocation":"28673:10:71","nodeType":"VariableDeclaration","scope":15791,"src":"28667:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"},"typeName":{"id":15770,"name":"int88","nodeType":"ElementaryTypeName","src":"28667:5:71","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"visibility":"internal"}],"src":"28666:18:71"},"scope":16092,"src":"28613:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15816,"nodeType":"Block","src":"29223:148:71","statements":[{"expression":{"id":15804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15799,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15797,"src":"29233:10:71","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15802,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15794,"src":"29252:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15801,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29246:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int80_$","typeString":"type(int80)"},"typeName":{"id":15800,"name":"int80","nodeType":"ElementaryTypeName","src":"29246:5:71","typeDescriptions":{}}},"id":15803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29246:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"src":"29233:25:71","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"id":15805,"nodeType":"ExpressionStatement","src":"29233:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15806,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15797,"src":"29272:10:71","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15807,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15794,"src":"29286:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29272:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15815,"nodeType":"IfStatement","src":"29268:97:71","trueBody":{"id":15814,"nodeType":"Block","src":"29293:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":15810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29344:2:71","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":15811,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15794,"src":"29348:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15809,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"29314:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29314:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15813,"nodeType":"RevertStatement","src":"29307:47:71"}]}}]},"documentation":{"id":15792,"nodeType":"StructuredDocumentation","src":"28839:307:71","text":" @dev Returns the downcasted int80 from int256, reverting on\n overflow (when the input is less than smallest int80 or\n greater than largest int80).\n Counterpart to Solidity's `int80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":15817,"implemented":true,"kind":"function","modifiers":[],"name":"toInt80","nameLocation":"29160:7:71","nodeType":"FunctionDefinition","parameters":{"id":15795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15794,"mutability":"mutable","name":"value","nameLocation":"29175:5:71","nodeType":"VariableDeclaration","scope":15817,"src":"29168:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15793,"name":"int256","nodeType":"ElementaryTypeName","src":"29168:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29167:14:71"},"returnParameters":{"id":15798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15797,"mutability":"mutable","name":"downcasted","nameLocation":"29211:10:71","nodeType":"VariableDeclaration","scope":15817,"src":"29205:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"},"typeName":{"id":15796,"name":"int80","nodeType":"ElementaryTypeName","src":"29205:5:71","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"visibility":"internal"}],"src":"29204:18:71"},"scope":16092,"src":"29151:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15842,"nodeType":"Block","src":"29761:148:71","statements":[{"expression":{"id":15830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15825,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15823,"src":"29771:10:71","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15828,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15820,"src":"29790:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15827,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29784:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int72_$","typeString":"type(int72)"},"typeName":{"id":15826,"name":"int72","nodeType":"ElementaryTypeName","src":"29784:5:71","typeDescriptions":{}}},"id":15829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29784:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"src":"29771:25:71","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"id":15831,"nodeType":"ExpressionStatement","src":"29771:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15832,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15823,"src":"29810:10:71","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15833,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15820,"src":"29824:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29810:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15841,"nodeType":"IfStatement","src":"29806:97:71","trueBody":{"id":15840,"nodeType":"Block","src":"29831:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":15836,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29882:2:71","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":15837,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15820,"src":"29886:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15835,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"29852:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29852:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15839,"nodeType":"RevertStatement","src":"29845:47:71"}]}}]},"documentation":{"id":15818,"nodeType":"StructuredDocumentation","src":"29377:307:71","text":" @dev Returns the downcasted int72 from int256, reverting on\n overflow (when the input is less than smallest int72 or\n greater than largest int72).\n Counterpart to Solidity's `int72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":15843,"implemented":true,"kind":"function","modifiers":[],"name":"toInt72","nameLocation":"29698:7:71","nodeType":"FunctionDefinition","parameters":{"id":15821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15820,"mutability":"mutable","name":"value","nameLocation":"29713:5:71","nodeType":"VariableDeclaration","scope":15843,"src":"29706:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15819,"name":"int256","nodeType":"ElementaryTypeName","src":"29706:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29705:14:71"},"returnParameters":{"id":15824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15823,"mutability":"mutable","name":"downcasted","nameLocation":"29749:10:71","nodeType":"VariableDeclaration","scope":15843,"src":"29743:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"},"typeName":{"id":15822,"name":"int72","nodeType":"ElementaryTypeName","src":"29743:5:71","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"visibility":"internal"}],"src":"29742:18:71"},"scope":16092,"src":"29689:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15868,"nodeType":"Block","src":"30299:148:71","statements":[{"expression":{"id":15856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15851,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15849,"src":"30309:10:71","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15854,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15846,"src":"30328:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15853,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30322:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"},"typeName":{"id":15852,"name":"int64","nodeType":"ElementaryTypeName","src":"30322:5:71","typeDescriptions":{}}},"id":15855,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30322:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"src":"30309:25:71","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"id":15857,"nodeType":"ExpressionStatement","src":"30309:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15858,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15849,"src":"30348:10:71","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15859,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15846,"src":"30362:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30348:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15867,"nodeType":"IfStatement","src":"30344:97:71","trueBody":{"id":15866,"nodeType":"Block","src":"30369:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":15862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30420:2:71","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":15863,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15846,"src":"30424:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15861,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"30390:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30390:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15865,"nodeType":"RevertStatement","src":"30383:47:71"}]}}]},"documentation":{"id":15844,"nodeType":"StructuredDocumentation","src":"29915:307:71","text":" @dev Returns the downcasted int64 from int256, reverting on\n overflow (when the input is less than smallest int64 or\n greater than largest int64).\n Counterpart to Solidity's `int64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":15869,"implemented":true,"kind":"function","modifiers":[],"name":"toInt64","nameLocation":"30236:7:71","nodeType":"FunctionDefinition","parameters":{"id":15847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15846,"mutability":"mutable","name":"value","nameLocation":"30251:5:71","nodeType":"VariableDeclaration","scope":15869,"src":"30244:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15845,"name":"int256","nodeType":"ElementaryTypeName","src":"30244:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30243:14:71"},"returnParameters":{"id":15850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15849,"mutability":"mutable","name":"downcasted","nameLocation":"30287:10:71","nodeType":"VariableDeclaration","scope":15869,"src":"30281:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"},"typeName":{"id":15848,"name":"int64","nodeType":"ElementaryTypeName","src":"30281:5:71","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"visibility":"internal"}],"src":"30280:18:71"},"scope":16092,"src":"30227:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15894,"nodeType":"Block","src":"30837:148:71","statements":[{"expression":{"id":15882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15877,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15875,"src":"30847:10:71","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15880,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15872,"src":"30866:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15879,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30860:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int56_$","typeString":"type(int56)"},"typeName":{"id":15878,"name":"int56","nodeType":"ElementaryTypeName","src":"30860:5:71","typeDescriptions":{}}},"id":15881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30860:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"src":"30847:25:71","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"id":15883,"nodeType":"ExpressionStatement","src":"30847:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15884,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15875,"src":"30886:10:71","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15885,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15872,"src":"30900:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30886:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15893,"nodeType":"IfStatement","src":"30882:97:71","trueBody":{"id":15892,"nodeType":"Block","src":"30907:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":15888,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30958:2:71","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":15889,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15872,"src":"30962:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15887,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"30928:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30928:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15891,"nodeType":"RevertStatement","src":"30921:47:71"}]}}]},"documentation":{"id":15870,"nodeType":"StructuredDocumentation","src":"30453:307:71","text":" @dev Returns the downcasted int56 from int256, reverting on\n overflow (when the input is less than smallest int56 or\n greater than largest int56).\n Counterpart to Solidity's `int56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":15895,"implemented":true,"kind":"function","modifiers":[],"name":"toInt56","nameLocation":"30774:7:71","nodeType":"FunctionDefinition","parameters":{"id":15873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15872,"mutability":"mutable","name":"value","nameLocation":"30789:5:71","nodeType":"VariableDeclaration","scope":15895,"src":"30782:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15871,"name":"int256","nodeType":"ElementaryTypeName","src":"30782:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30781:14:71"},"returnParameters":{"id":15876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15875,"mutability":"mutable","name":"downcasted","nameLocation":"30825:10:71","nodeType":"VariableDeclaration","scope":15895,"src":"30819:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"},"typeName":{"id":15874,"name":"int56","nodeType":"ElementaryTypeName","src":"30819:5:71","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"visibility":"internal"}],"src":"30818:18:71"},"scope":16092,"src":"30765:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15920,"nodeType":"Block","src":"31375:148:71","statements":[{"expression":{"id":15908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15903,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15901,"src":"31385:10:71","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15906,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15898,"src":"31404:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15905,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31398:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int48_$","typeString":"type(int48)"},"typeName":{"id":15904,"name":"int48","nodeType":"ElementaryTypeName","src":"31398:5:71","typeDescriptions":{}}},"id":15907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31398:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"src":"31385:25:71","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"id":15909,"nodeType":"ExpressionStatement","src":"31385:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15910,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15901,"src":"31424:10:71","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15911,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15898,"src":"31438:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31424:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15919,"nodeType":"IfStatement","src":"31420:97:71","trueBody":{"id":15918,"nodeType":"Block","src":"31445:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":15914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31496:2:71","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":15915,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15898,"src":"31500:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15913,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"31466:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31466:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15917,"nodeType":"RevertStatement","src":"31459:47:71"}]}}]},"documentation":{"id":15896,"nodeType":"StructuredDocumentation","src":"30991:307:71","text":" @dev Returns the downcasted int48 from int256, reverting on\n overflow (when the input is less than smallest int48 or\n greater than largest int48).\n Counterpart to Solidity's `int48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":15921,"implemented":true,"kind":"function","modifiers":[],"name":"toInt48","nameLocation":"31312:7:71","nodeType":"FunctionDefinition","parameters":{"id":15899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15898,"mutability":"mutable","name":"value","nameLocation":"31327:5:71","nodeType":"VariableDeclaration","scope":15921,"src":"31320:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15897,"name":"int256","nodeType":"ElementaryTypeName","src":"31320:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31319:14:71"},"returnParameters":{"id":15902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15901,"mutability":"mutable","name":"downcasted","nameLocation":"31363:10:71","nodeType":"VariableDeclaration","scope":15921,"src":"31357:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"},"typeName":{"id":15900,"name":"int48","nodeType":"ElementaryTypeName","src":"31357:5:71","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"visibility":"internal"}],"src":"31356:18:71"},"scope":16092,"src":"31303:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15946,"nodeType":"Block","src":"31913:148:71","statements":[{"expression":{"id":15934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15929,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15927,"src":"31923:10:71","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15932,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15924,"src":"31942:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15931,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31936:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int40_$","typeString":"type(int40)"},"typeName":{"id":15930,"name":"int40","nodeType":"ElementaryTypeName","src":"31936:5:71","typeDescriptions":{}}},"id":15933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31936:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"src":"31923:25:71","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"id":15935,"nodeType":"ExpressionStatement","src":"31923:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15936,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15927,"src":"31962:10:71","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15937,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15924,"src":"31976:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31962:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15945,"nodeType":"IfStatement","src":"31958:97:71","trueBody":{"id":15944,"nodeType":"Block","src":"31983:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":15940,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32034:2:71","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":15941,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15924,"src":"32038:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15939,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"32004:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32004:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15943,"nodeType":"RevertStatement","src":"31997:47:71"}]}}]},"documentation":{"id":15922,"nodeType":"StructuredDocumentation","src":"31529:307:71","text":" @dev Returns the downcasted int40 from int256, reverting on\n overflow (when the input is less than smallest int40 or\n greater than largest int40).\n Counterpart to Solidity's `int40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":15947,"implemented":true,"kind":"function","modifiers":[],"name":"toInt40","nameLocation":"31850:7:71","nodeType":"FunctionDefinition","parameters":{"id":15925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15924,"mutability":"mutable","name":"value","nameLocation":"31865:5:71","nodeType":"VariableDeclaration","scope":15947,"src":"31858:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15923,"name":"int256","nodeType":"ElementaryTypeName","src":"31858:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31857:14:71"},"returnParameters":{"id":15928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15927,"mutability":"mutable","name":"downcasted","nameLocation":"31901:10:71","nodeType":"VariableDeclaration","scope":15947,"src":"31895:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"},"typeName":{"id":15926,"name":"int40","nodeType":"ElementaryTypeName","src":"31895:5:71","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"visibility":"internal"}],"src":"31894:18:71"},"scope":16092,"src":"31841:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15972,"nodeType":"Block","src":"32451:148:71","statements":[{"expression":{"id":15960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15955,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15953,"src":"32461:10:71","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15958,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15950,"src":"32480:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15957,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32474:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"},"typeName":{"id":15956,"name":"int32","nodeType":"ElementaryTypeName","src":"32474:5:71","typeDescriptions":{}}},"id":15959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32474:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"src":"32461:25:71","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"id":15961,"nodeType":"ExpressionStatement","src":"32461:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15962,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15953,"src":"32500:10:71","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15963,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15950,"src":"32514:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"32500:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15971,"nodeType":"IfStatement","src":"32496:97:71","trueBody":{"id":15970,"nodeType":"Block","src":"32521:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":15966,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32572:2:71","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":15967,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15950,"src":"32576:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15965,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"32542:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32542:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15969,"nodeType":"RevertStatement","src":"32535:47:71"}]}}]},"documentation":{"id":15948,"nodeType":"StructuredDocumentation","src":"32067:307:71","text":" @dev Returns the downcasted int32 from int256, reverting on\n overflow (when the input is less than smallest int32 or\n greater than largest int32).\n Counterpart to Solidity's `int32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":15973,"implemented":true,"kind":"function","modifiers":[],"name":"toInt32","nameLocation":"32388:7:71","nodeType":"FunctionDefinition","parameters":{"id":15951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15950,"mutability":"mutable","name":"value","nameLocation":"32403:5:71","nodeType":"VariableDeclaration","scope":15973,"src":"32396:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15949,"name":"int256","nodeType":"ElementaryTypeName","src":"32396:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32395:14:71"},"returnParameters":{"id":15954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15953,"mutability":"mutable","name":"downcasted","nameLocation":"32439:10:71","nodeType":"VariableDeclaration","scope":15973,"src":"32433:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"},"typeName":{"id":15952,"name":"int32","nodeType":"ElementaryTypeName","src":"32433:5:71","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"visibility":"internal"}],"src":"32432:18:71"},"scope":16092,"src":"32379:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15998,"nodeType":"Block","src":"32989:148:71","statements":[{"expression":{"id":15986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15981,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15979,"src":"32999:10:71","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15984,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15976,"src":"33018:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15983,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33012:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int24_$","typeString":"type(int24)"},"typeName":{"id":15982,"name":"int24","nodeType":"ElementaryTypeName","src":"33012:5:71","typeDescriptions":{}}},"id":15985,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33012:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"src":"32999:25:71","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"id":15987,"nodeType":"ExpressionStatement","src":"32999:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15988,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15979,"src":"33038:10:71","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15989,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15976,"src":"33052:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33038:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15997,"nodeType":"IfStatement","src":"33034:97:71","trueBody":{"id":15996,"nodeType":"Block","src":"33059:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":15992,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33110:2:71","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":15993,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15976,"src":"33114:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15991,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"33080:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33080:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15995,"nodeType":"RevertStatement","src":"33073:47:71"}]}}]},"documentation":{"id":15974,"nodeType":"StructuredDocumentation","src":"32605:307:71","text":" @dev Returns the downcasted int24 from int256, reverting on\n overflow (when the input is less than smallest int24 or\n greater than largest int24).\n Counterpart to Solidity's `int24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":15999,"implemented":true,"kind":"function","modifiers":[],"name":"toInt24","nameLocation":"32926:7:71","nodeType":"FunctionDefinition","parameters":{"id":15977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15976,"mutability":"mutable","name":"value","nameLocation":"32941:5:71","nodeType":"VariableDeclaration","scope":15999,"src":"32934:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15975,"name":"int256","nodeType":"ElementaryTypeName","src":"32934:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32933:14:71"},"returnParameters":{"id":15980,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15979,"mutability":"mutable","name":"downcasted","nameLocation":"32977:10:71","nodeType":"VariableDeclaration","scope":15999,"src":"32971:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"},"typeName":{"id":15978,"name":"int24","nodeType":"ElementaryTypeName","src":"32971:5:71","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"visibility":"internal"}],"src":"32970:18:71"},"scope":16092,"src":"32917:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":16024,"nodeType":"Block","src":"33527:148:71","statements":[{"expression":{"id":16012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16007,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16005,"src":"33537:10:71","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16010,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16002,"src":"33556:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":16009,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33550:5:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"},"typeName":{"id":16008,"name":"int16","nodeType":"ElementaryTypeName","src":"33550:5:71","typeDescriptions":{}}},"id":16011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33550:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"src":"33537:25:71","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"id":16013,"nodeType":"ExpressionStatement","src":"33537:25:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":16016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16014,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16005,"src":"33576:10:71","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":16015,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16002,"src":"33590:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33576:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16023,"nodeType":"IfStatement","src":"33572:97:71","trueBody":{"id":16022,"nodeType":"Block","src":"33597:72:71","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":16018,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33648:2:71","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":16019,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16002,"src":"33652:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":16017,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"33618:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":16020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33618:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16021,"nodeType":"RevertStatement","src":"33611:47:71"}]}}]},"documentation":{"id":16000,"nodeType":"StructuredDocumentation","src":"33143:307:71","text":" @dev Returns the downcasted int16 from int256, reverting on\n overflow (when the input is less than smallest int16 or\n greater than largest int16).\n Counterpart to Solidity's `int16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":16025,"implemented":true,"kind":"function","modifiers":[],"name":"toInt16","nameLocation":"33464:7:71","nodeType":"FunctionDefinition","parameters":{"id":16003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16002,"mutability":"mutable","name":"value","nameLocation":"33479:5:71","nodeType":"VariableDeclaration","scope":16025,"src":"33472:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":16001,"name":"int256","nodeType":"ElementaryTypeName","src":"33472:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"33471:14:71"},"returnParameters":{"id":16006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16005,"mutability":"mutable","name":"downcasted","nameLocation":"33515:10:71","nodeType":"VariableDeclaration","scope":16025,"src":"33509:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"},"typeName":{"id":16004,"name":"int16","nodeType":"ElementaryTypeName","src":"33509:5:71","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"visibility":"internal"}],"src":"33508:18:71"},"scope":16092,"src":"33455:220:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":16050,"nodeType":"Block","src":"34058:146:71","statements":[{"expression":{"id":16038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16033,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16031,"src":"34068:10:71","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16036,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16028,"src":"34086:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":16035,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34081:4:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"},"typeName":{"id":16034,"name":"int8","nodeType":"ElementaryTypeName","src":"34081:4:71","typeDescriptions":{}}},"id":16037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34081:11:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"src":"34068:24:71","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"id":16039,"nodeType":"ExpressionStatement","src":"34068:24:71"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":16042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16040,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16031,"src":"34106:10:71","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":16041,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16028,"src":"34120:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"34106:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16049,"nodeType":"IfStatement","src":"34102:96:71","trueBody":{"id":16048,"nodeType":"Block","src":"34127:71:71","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":16044,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34178:1:71","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":16045,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16028,"src":"34181:5:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":16043,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14349,"src":"34148:29:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":16046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34148:39:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16047,"nodeType":"RevertStatement","src":"34141:46:71"}]}}]},"documentation":{"id":16026,"nodeType":"StructuredDocumentation","src":"33681:302:71","text":" @dev Returns the downcasted int8 from int256, reverting on\n overflow (when the input is less than smallest int8 or\n greater than largest int8).\n Counterpart to Solidity's `int8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":16051,"implemented":true,"kind":"function","modifiers":[],"name":"toInt8","nameLocation":"33997:6:71","nodeType":"FunctionDefinition","parameters":{"id":16029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16028,"mutability":"mutable","name":"value","nameLocation":"34011:5:71","nodeType":"VariableDeclaration","scope":16051,"src":"34004:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":16027,"name":"int256","nodeType":"ElementaryTypeName","src":"34004:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"34003:14:71"},"returnParameters":{"id":16032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16031,"mutability":"mutable","name":"downcasted","nameLocation":"34046:10:71","nodeType":"VariableDeclaration","scope":16051,"src":"34041:15:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"},"typeName":{"id":16030,"name":"int8","nodeType":"ElementaryTypeName","src":"34041:4:71","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"visibility":"internal"}],"src":"34040:17:71"},"scope":16092,"src":"33988:216:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":16080,"nodeType":"Block","src":"34444:250:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16059,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16054,"src":"34557:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"expression":{"arguments":[{"id":16064,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34578:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":16063,"name":"int256","nodeType":"ElementaryTypeName","src":"34578:6:71","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":16062,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"34573:4:71","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":16065,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34573:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":16066,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34586:3:71","memberName":"max","nodeType":"MemberAccess","src":"34573:16:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":16061,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34565:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16060,"name":"uint256","nodeType":"ElementaryTypeName","src":"34565:7:71","typeDescriptions":{}}},"id":16067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34565:25:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34557:33:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16074,"nodeType":"IfStatement","src":"34553:105:71","trueBody":{"id":16073,"nodeType":"Block","src":"34592:66:71","statements":[{"errorCall":{"arguments":[{"id":16070,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16054,"src":"34641:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16069,"name":"SafeCastOverflowedUintToInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14354,"src":"34613:27:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":16071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34613:34:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16072,"nodeType":"RevertStatement","src":"34606:41:71"}]}},{"expression":{"arguments":[{"id":16077,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16054,"src":"34681:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16076,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34674:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":16075,"name":"int256","nodeType":"ElementaryTypeName","src":"34674:6:71","typeDescriptions":{}}},"id":16078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34674:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":16058,"id":16079,"nodeType":"Return","src":"34667:20:71"}]},"documentation":{"id":16052,"nodeType":"StructuredDocumentation","src":"34210:165:71","text":" @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256."},"id":16081,"implemented":true,"kind":"function","modifiers":[],"name":"toInt256","nameLocation":"34389:8:71","nodeType":"FunctionDefinition","parameters":{"id":16055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16054,"mutability":"mutable","name":"value","nameLocation":"34406:5:71","nodeType":"VariableDeclaration","scope":16081,"src":"34398:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16053,"name":"uint256","nodeType":"ElementaryTypeName","src":"34398:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34397:15:71"},"returnParameters":{"id":16058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16057,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16081,"src":"34436:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":16056,"name":"int256","nodeType":"ElementaryTypeName","src":"34436:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"34435:8:71"},"scope":16092,"src":"34380:314:71","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":16090,"nodeType":"Block","src":"34853:87:71","statements":[{"AST":{"nativeSrc":"34888:46:71","nodeType":"YulBlock","src":"34888:46:71","statements":[{"nativeSrc":"34902:22:71","nodeType":"YulAssignment","src":"34902:22:71","value":{"arguments":[{"arguments":[{"name":"b","nativeSrc":"34921:1:71","nodeType":"YulIdentifier","src":"34921:1:71"}],"functionName":{"name":"iszero","nativeSrc":"34914:6:71","nodeType":"YulIdentifier","src":"34914:6:71"},"nativeSrc":"34914:9:71","nodeType":"YulFunctionCall","src":"34914:9:71"}],"functionName":{"name":"iszero","nativeSrc":"34907:6:71","nodeType":"YulIdentifier","src":"34907:6:71"},"nativeSrc":"34907:17:71","nodeType":"YulFunctionCall","src":"34907:17:71"},"variableNames":[{"name":"u","nativeSrc":"34902:1:71","nodeType":"YulIdentifier","src":"34902:1:71"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16084,"isOffset":false,"isSlot":false,"src":"34921:1:71","valueSize":1},{"declaration":16087,"isOffset":false,"isSlot":false,"src":"34902:1:71","valueSize":1}],"flags":["memory-safe"],"id":16089,"nodeType":"InlineAssembly","src":"34863:71:71"}]},"documentation":{"id":16082,"nodeType":"StructuredDocumentation","src":"34700:90:71","text":" @dev Cast a boolean (false or true) to a uint256 (0 or 1) with no jump."},"id":16091,"implemented":true,"kind":"function","modifiers":[],"name":"toUint","nameLocation":"34804:6:71","nodeType":"FunctionDefinition","parameters":{"id":16085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16084,"mutability":"mutable","name":"b","nameLocation":"34816:1:71","nodeType":"VariableDeclaration","scope":16091,"src":"34811:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16083,"name":"bool","nodeType":"ElementaryTypeName","src":"34811:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34810:8:71"},"returnParameters":{"id":16088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16087,"mutability":"mutable","name":"u","nameLocation":"34850:1:71","nodeType":"VariableDeclaration","scope":16091,"src":"34842:9:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16086,"name":"uint256","nodeType":"ElementaryTypeName","src":"34842:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34841:11:71"},"scope":16092,"src":"34795:145:71","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":16093,"src":"769:34173:71","usedErrors":[14337,14342,14349,14354],"usedEvents":[]}],"src":"192:34751:71"},"id":71},"@openzeppelin/contracts/utils/structs/EnumerableSet.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/structs/EnumerableSet.sol","exportedSymbols":{"Arrays":[12304],"EnumerableSet":[17618],"Math":[14327]},"id":17619,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":16094,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"205:24:72"},{"absolutePath":"@openzeppelin/contracts/utils/Arrays.sol","file":"../Arrays.sol","id":16096,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17619,"sourceUnit":12305,"src":"231:37:72","symbolAliases":[{"foreign":{"id":16095,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12304,"src":"239:6:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","file":"../math/Math.sol","id":16098,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17619,"sourceUnit":14328,"src":"269:38:72","symbolAliases":[{"foreign":{"id":16097,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"277:4:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"EnumerableSet","contractDependencies":[],"contractKind":"library","documentation":{"id":16099,"nodeType":"StructuredDocumentation","src":"309:1276:72","text":" @dev Library for managing\n https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n types.\n Sets have the following properties:\n - Elements are added, removed, and checked for existence in constant time\n (O(1)).\n - Elements are enumerated in O(n). No guarantees are made on the ordering.\n - Set can be cleared (all elements removed) in O(n).\n ```solidity\n contract Example {\n // Add the library methods\n using EnumerableSet for EnumerableSet.AddressSet;\n // Declare a set state variable\n EnumerableSet.AddressSet private mySet;\n }\n ```\n The following types are supported:\n - `bytes32` (`Bytes32Set`) since v3.3.0\n - `address` (`AddressSet`) since v3.3.0\n - `uint256` (`UintSet`) since v3.3.0\n - `string` (`StringSet`) since v5.4.0\n - `bytes` (`BytesSet`) since v5.4.0\n [WARNING]\n ====\n Trying to delete such a structure from storage will likely result in data corruption, rendering the structure\n unusable.\n See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.\n In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an\n array of EnumerableSet.\n ===="},"fullyImplemented":true,"id":17618,"linearizedBaseContracts":[17618],"name":"EnumerableSet","nameLocation":"1594:13:72","nodeType":"ContractDefinition","nodes":[{"canonicalName":"EnumerableSet.Set","id":16107,"members":[{"constant":false,"id":16102,"mutability":"mutable","name":"_values","nameLocation":"2118:7:72","nodeType":"VariableDeclaration","scope":16107,"src":"2108:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16100,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2108:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16101,"nodeType":"ArrayTypeName","src":"2108:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":16106,"mutability":"mutable","name":"_positions","nameLocation":"2310:10:72","nodeType":"VariableDeclaration","scope":16107,"src":"2276:44:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"typeName":{"id":16105,"keyName":"value","keyNameLocation":"2292:5:72","keyType":{"id":16103,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2284:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"2276:33:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":16104,"name":"uint256","nodeType":"ElementaryTypeName","src":"2301:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"name":"Set","nameLocation":"2061:3:72","nodeType":"StructDefinition","scope":17618,"src":"2054:273:72","visibility":"public"},{"body":{"id":16148,"nodeType":"Block","src":"2566:337:72","statements":[{"condition":{"id":16122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2580:22:72","subExpression":{"arguments":[{"id":16119,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16111,"src":"2591:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},{"id":16120,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16113,"src":"2596:5:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16118,"name":"_contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16295,"src":"2581:9:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"}},"id":16121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2581:21:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":16146,"nodeType":"Block","src":"2860:37:72","statements":[{"expression":{"hexValue":"66616c7365","id":16144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2881:5:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":16117,"id":16145,"nodeType":"Return","src":"2874:12:72"}]},"id":16147,"nodeType":"IfStatement","src":"2576:321:72","trueBody":{"id":16143,"nodeType":"Block","src":"2604:250:72","statements":[{"expression":{"arguments":[{"id":16128,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16113,"src":"2635:5:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"expression":{"id":16123,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16111,"src":"2618:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16126,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2622:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"2618:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2630:4:72","memberName":"push","nodeType":"MemberAccess","src":"2618:16:72","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$_t_bytes32_$returns$__$attached_to$_t_array$_t_bytes32_$dyn_storage_ptr_$","typeString":"function (bytes32[] storage pointer,bytes32)"}},"id":16129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2618:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16130,"nodeType":"ExpressionStatement","src":"2618:23:72"},{"expression":{"id":16139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":16131,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16111,"src":"2776:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16134,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2780:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16106,"src":"2776:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16135,"indexExpression":{"id":16133,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16113,"src":"2791:5:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2776:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":16136,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16111,"src":"2800:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16137,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2804:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"2800:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2812:6:72","memberName":"length","nodeType":"MemberAccess","src":"2800:18:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2776:42:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16140,"nodeType":"ExpressionStatement","src":"2776:42:72"},{"expression":{"hexValue":"74727565","id":16141,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2839:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":16117,"id":16142,"nodeType":"Return","src":"2832:11:72"}]}}]},"documentation":{"id":16108,"nodeType":"StructuredDocumentation","src":"2333:159:72","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":16149,"implemented":true,"kind":"function","modifiers":[],"name":"_add","nameLocation":"2506:4:72","nodeType":"FunctionDefinition","parameters":{"id":16114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16111,"mutability":"mutable","name":"set","nameLocation":"2523:3:72","nodeType":"VariableDeclaration","scope":16149,"src":"2511:15:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16110,"nodeType":"UserDefinedTypeName","pathNode":{"id":16109,"name":"Set","nameLocations":["2511:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"2511:3:72"},"referencedDeclaration":16107,"src":"2511:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"},{"constant":false,"id":16113,"mutability":"mutable","name":"value","nameLocation":"2536:5:72","nodeType":"VariableDeclaration","scope":16149,"src":"2528:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16112,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2528:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2510:32:72"},"returnParameters":{"id":16117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16116,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16149,"src":"2560:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16115,"name":"bool","nodeType":"ElementaryTypeName","src":"2560:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2559:6:72"},"scope":17618,"src":"2497:406:72","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":16232,"nodeType":"Block","src":"3143:1296:72","statements":[{"assignments":[16161],"declarations":[{"constant":false,"id":16161,"mutability":"mutable","name":"position","nameLocation":"3255:8:72","nodeType":"VariableDeclaration","scope":16232,"src":"3247:16:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16160,"name":"uint256","nodeType":"ElementaryTypeName","src":"3247:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16166,"initialValue":{"baseExpression":{"expression":{"id":16162,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16153,"src":"3266:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16163,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3270:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16106,"src":"3266:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16165,"indexExpression":{"id":16164,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16155,"src":"3281:5:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3266:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3247:40:72"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16167,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16161,"src":"3302:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":16168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3314:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3302:13:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":16230,"nodeType":"Block","src":"4396:37:72","statements":[{"expression":{"hexValue":"66616c7365","id":16228,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4417:5:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":16159,"id":16229,"nodeType":"Return","src":"4410:12:72"}]},"id":16231,"nodeType":"IfStatement","src":"3298:1135:72","trueBody":{"id":16227,"nodeType":"Block","src":"3317:1073:72","statements":[{"assignments":[16171],"declarations":[{"constant":false,"id":16171,"mutability":"mutable","name":"valueIndex","nameLocation":"3677:10:72","nodeType":"VariableDeclaration","scope":16227,"src":"3669:18:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16170,"name":"uint256","nodeType":"ElementaryTypeName","src":"3669:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16175,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16172,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16161,"src":"3690:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":16173,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3701:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3690:12:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3669:33:72"},{"assignments":[16177],"declarations":[{"constant":false,"id":16177,"mutability":"mutable","name":"lastIndex","nameLocation":"3724:9:72","nodeType":"VariableDeclaration","scope":16227,"src":"3716:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16176,"name":"uint256","nodeType":"ElementaryTypeName","src":"3716:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16183,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":16178,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16153,"src":"3736:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16179,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3740:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"3736:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3748:6:72","memberName":"length","nodeType":"MemberAccess","src":"3736:18:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":16181,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3757:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3736:22:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3716:42:72"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16184,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16171,"src":"3777:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":16185,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16177,"src":"3791:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3777:23:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16211,"nodeType":"IfStatement","src":"3773:378:72","trueBody":{"id":16210,"nodeType":"Block","src":"3802:349:72","statements":[{"assignments":[16188],"declarations":[{"constant":false,"id":16188,"mutability":"mutable","name":"lastValue","nameLocation":"3828:9:72","nodeType":"VariableDeclaration","scope":16210,"src":"3820:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16187,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3820:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":16193,"initialValue":{"baseExpression":{"expression":{"id":16189,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16153,"src":"3840:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16190,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3844:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"3840:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16192,"indexExpression":{"id":16191,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16177,"src":"3852:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3840:22:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3820:42:72"},{"expression":{"id":16200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":16194,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16153,"src":"3961:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16197,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3965:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"3961:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16198,"indexExpression":{"id":16196,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16171,"src":"3973:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3961:23:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16199,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16188,"src":"3987:9:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3961:35:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16201,"nodeType":"ExpressionStatement","src":"3961:35:72"},{"expression":{"id":16208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":16202,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16153,"src":"4100:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16205,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4104:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16106,"src":"4100:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16206,"indexExpression":{"id":16204,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16188,"src":"4115:9:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4100:25:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16207,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16161,"src":"4128:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4100:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16209,"nodeType":"ExpressionStatement","src":"4100:36:72"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":16212,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16153,"src":"4229:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16215,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4233:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"4229:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4241:3:72","memberName":"pop","nodeType":"MemberAccess","src":"4229:15:72","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_bytes32_$dyn_storage_ptr_$","typeString":"function (bytes32[] storage pointer)"}},"id":16217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4229:17:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16218,"nodeType":"ExpressionStatement","src":"4229:17:72"},{"expression":{"id":16223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"4325:28:72","subExpression":{"baseExpression":{"expression":{"id":16219,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16153,"src":"4332:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16220,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4336:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16106,"src":"4332:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16222,"indexExpression":{"id":16221,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16155,"src":"4347:5:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4332:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16224,"nodeType":"ExpressionStatement","src":"4325:28:72"},{"expression":{"hexValue":"74727565","id":16225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4375:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":16159,"id":16226,"nodeType":"Return","src":"4368:11:72"}]}}]},"documentation":{"id":16150,"nodeType":"StructuredDocumentation","src":"2909:157:72","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":16233,"implemented":true,"kind":"function","modifiers":[],"name":"_remove","nameLocation":"3080:7:72","nodeType":"FunctionDefinition","parameters":{"id":16156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16153,"mutability":"mutable","name":"set","nameLocation":"3100:3:72","nodeType":"VariableDeclaration","scope":16233,"src":"3088:15:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16152,"nodeType":"UserDefinedTypeName","pathNode":{"id":16151,"name":"Set","nameLocations":["3088:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"3088:3:72"},"referencedDeclaration":16107,"src":"3088:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"},{"constant":false,"id":16155,"mutability":"mutable","name":"value","nameLocation":"3113:5:72","nodeType":"VariableDeclaration","scope":16233,"src":"3105:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16154,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3105:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3087:32:72"},"returnParameters":{"id":16159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16158,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16233,"src":"3137:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16157,"name":"bool","nodeType":"ElementaryTypeName","src":"3137:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3136:6:72"},"scope":17618,"src":"3071:1368:72","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":16275,"nodeType":"Block","src":"4824:196:72","statements":[{"assignments":[16241],"declarations":[{"constant":false,"id":16241,"mutability":"mutable","name":"len","nameLocation":"4842:3:72","nodeType":"VariableDeclaration","scope":16275,"src":"4834:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16240,"name":"uint256","nodeType":"ElementaryTypeName","src":"4834:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16245,"initialValue":{"arguments":[{"id":16243,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16237,"src":"4856:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}],"id":16242,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16309,"src":"4848:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (uint256)"}},"id":16244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4848:12:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4834:26:72"},{"body":{"id":16265,"nodeType":"Block","src":"4904:62:72","statements":[{"expression":{"id":16263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"4918:37:72","subExpression":{"baseExpression":{"expression":{"id":16256,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16237,"src":"4925:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16257,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4929:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16106,"src":"4925:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16262,"indexExpression":{"baseExpression":{"expression":{"id":16258,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16237,"src":"4940:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16259,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4944:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"4940:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16261,"indexExpression":{"id":16260,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16247,"src":"4952:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4940:14:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4925:30:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16264,"nodeType":"ExpressionStatement","src":"4918:37:72"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16250,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16247,"src":"4890:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":16251,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16241,"src":"4894:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4890:7:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16266,"initializationExpression":{"assignments":[16247],"declarations":[{"constant":false,"id":16247,"mutability":"mutable","name":"i","nameLocation":"4883:1:72","nodeType":"VariableDeclaration","scope":16266,"src":"4875:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16246,"name":"uint256","nodeType":"ElementaryTypeName","src":"4875:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16249,"initialValue":{"hexValue":"30","id":16248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4887:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4875:13:72"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":16254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4899:3:72","subExpression":{"id":16253,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16247,"src":"4901:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16255,"nodeType":"ExpressionStatement","src":"4899:3:72"},"nodeType":"ForStatement","src":"4870:96:72"},{"expression":{"arguments":[{"expression":{"id":16270,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16237,"src":"4998:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16271,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5002:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"4998:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},{"hexValue":"30","id":16272,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5011:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":16267,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12304,"src":"4975:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Arrays_$12304_$","typeString":"type(library Arrays)"}},"id":16269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4982:15:72","memberName":"unsafeSetLength","nodeType":"MemberAccess","referencedDeclaration":12270,"src":"4975:22:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$_t_uint256_$returns$__$","typeString":"function (bytes32[] storage pointer,uint256)"}},"id":16273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4975:38:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16274,"nodeType":"ExpressionStatement","src":"4975:38:72"}]},"documentation":{"id":16234,"nodeType":"StructuredDocumentation","src":"4445:333:72","text":" @dev Removes all the values from a set. O(n).\n WARNING: This function has an unbounded cost that scales with set size. Developers should keep in mind that\n using it may render the function uncallable if the set grows to the point where clearing it consumes too much\n gas to fit in a block."},"id":16276,"implemented":true,"kind":"function","modifiers":[],"name":"_clear","nameLocation":"4792:6:72","nodeType":"FunctionDefinition","parameters":{"id":16238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16237,"mutability":"mutable","name":"set","nameLocation":"4811:3:72","nodeType":"VariableDeclaration","scope":16276,"src":"4799:15:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16236,"nodeType":"UserDefinedTypeName","pathNode":{"id":16235,"name":"Set","nameLocations":["4799:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"4799:3:72"},"referencedDeclaration":16107,"src":"4799:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"src":"4798:17:72"},"returnParameters":{"id":16239,"nodeType":"ParameterList","parameters":[],"src":"4824:0:72"},"scope":17618,"src":"4783:237:72","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":16294,"nodeType":"Block","src":"5180:50:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":16287,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16280,"src":"5197:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16288,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5201:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16106,"src":"5197:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16290,"indexExpression":{"id":16289,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16282,"src":"5212:5:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5197:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":16291,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5222:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5197:26:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16286,"id":16293,"nodeType":"Return","src":"5190:33:72"}]},"documentation":{"id":16277,"nodeType":"StructuredDocumentation","src":"5026:70:72","text":" @dev Returns true if the value is in the set. O(1)."},"id":16295,"implemented":true,"kind":"function","modifiers":[],"name":"_contains","nameLocation":"5110:9:72","nodeType":"FunctionDefinition","parameters":{"id":16283,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16280,"mutability":"mutable","name":"set","nameLocation":"5132:3:72","nodeType":"VariableDeclaration","scope":16295,"src":"5120:15:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16279,"nodeType":"UserDefinedTypeName","pathNode":{"id":16278,"name":"Set","nameLocations":["5120:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"5120:3:72"},"referencedDeclaration":16107,"src":"5120:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"},{"constant":false,"id":16282,"mutability":"mutable","name":"value","nameLocation":"5145:5:72","nodeType":"VariableDeclaration","scope":16295,"src":"5137:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16281,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5137:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5119:32:72"},"returnParameters":{"id":16286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16285,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16295,"src":"5174:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16284,"name":"bool","nodeType":"ElementaryTypeName","src":"5174:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5173:6:72"},"scope":17618,"src":"5101:129:72","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":16308,"nodeType":"Block","src":"5376:42:72","statements":[{"expression":{"expression":{"expression":{"id":16304,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16299,"src":"5393:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16305,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5397:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"5393:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5405:6:72","memberName":"length","nodeType":"MemberAccess","src":"5393:18:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16303,"id":16307,"nodeType":"Return","src":"5386:25:72"}]},"documentation":{"id":16296,"nodeType":"StructuredDocumentation","src":"5236:70:72","text":" @dev Returns the number of values on the set. O(1)."},"id":16309,"implemented":true,"kind":"function","modifiers":[],"name":"_length","nameLocation":"5320:7:72","nodeType":"FunctionDefinition","parameters":{"id":16300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16299,"mutability":"mutable","name":"set","nameLocation":"5340:3:72","nodeType":"VariableDeclaration","scope":16309,"src":"5328:15:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16298,"nodeType":"UserDefinedTypeName","pathNode":{"id":16297,"name":"Set","nameLocations":["5328:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"5328:3:72"},"referencedDeclaration":16107,"src":"5328:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"src":"5327:17:72"},"returnParameters":{"id":16303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16302,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16309,"src":"5367:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16301,"name":"uint256","nodeType":"ElementaryTypeName","src":"5367:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5366:9:72"},"scope":17618,"src":"5311:107:72","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":16325,"nodeType":"Block","src":"5836:42:72","statements":[{"expression":{"baseExpression":{"expression":{"id":16320,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16313,"src":"5853:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16321,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5857:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"5853:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16323,"indexExpression":{"id":16322,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16315,"src":"5865:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5853:18:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":16319,"id":16324,"nodeType":"Return","src":"5846:25:72"}]},"documentation":{"id":16310,"nodeType":"StructuredDocumentation","src":"5424:331:72","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":16326,"implemented":true,"kind":"function","modifiers":[],"name":"_at","nameLocation":"5769:3:72","nodeType":"FunctionDefinition","parameters":{"id":16316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16313,"mutability":"mutable","name":"set","nameLocation":"5785:3:72","nodeType":"VariableDeclaration","scope":16326,"src":"5773:15:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16312,"nodeType":"UserDefinedTypeName","pathNode":{"id":16311,"name":"Set","nameLocations":["5773:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"5773:3:72"},"referencedDeclaration":16107,"src":"5773:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"},{"constant":false,"id":16315,"mutability":"mutable","name":"index","nameLocation":"5798:5:72","nodeType":"VariableDeclaration","scope":16326,"src":"5790:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16314,"name":"uint256","nodeType":"ElementaryTypeName","src":"5790:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5772:32:72"},"returnParameters":{"id":16319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16318,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16326,"src":"5827:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16317,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5827:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5826:9:72"},"scope":17618,"src":"5760:118:72","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":16339,"nodeType":"Block","src":"6492:35:72","statements":[{"expression":{"expression":{"id":16336,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16330,"src":"6509:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16337,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6513:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"6509:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"functionReturnParameters":16335,"id":16338,"nodeType":"Return","src":"6502:18:72"}]},"documentation":{"id":16327,"nodeType":"StructuredDocumentation","src":"5884:529:72","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16340,"implemented":true,"kind":"function","modifiers":[],"name":"_values","nameLocation":"6427:7:72","nodeType":"FunctionDefinition","parameters":{"id":16331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16330,"mutability":"mutable","name":"set","nameLocation":"6447:3:72","nodeType":"VariableDeclaration","scope":16340,"src":"6435:15:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16329,"nodeType":"UserDefinedTypeName","pathNode":{"id":16328,"name":"Set","nameLocations":["6435:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"6435:3:72"},"referencedDeclaration":16107,"src":"6435:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"src":"6434:17:72"},"returnParameters":{"id":16335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16334,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16340,"src":"6474:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16332,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6474:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16333,"nodeType":"ArrayTypeName","src":"6474:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"6473:18:72"},"scope":17618,"src":"6418:109:72","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":16418,"nodeType":"Block","src":"7173:392:72","statements":[{"id":16417,"nodeType":"UncheckedBlock","src":"7183:376:72","statements":[{"expression":{"id":16362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16354,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16348,"src":"7207:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16357,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16348,"src":"7222:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":16359,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16344,"src":"7235:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}],"id":16358,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16309,"src":"7227:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (uint256)"}},"id":16360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7227:12:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16355,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"7213:4:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":16356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7218:3:72","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":13033,"src":"7213:8:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":16361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7213:27:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7207:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16363,"nodeType":"ExpressionStatement","src":"7207:33:72"},{"expression":{"id":16370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16364,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16346,"src":"7254:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16367,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16346,"src":"7271:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16368,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16348,"src":"7278:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16365,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"7262:4:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":16366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7267:3:72","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":13033,"src":"7262:8:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":16369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7262:20:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7254:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16371,"nodeType":"ExpressionStatement","src":"7254:28:72"},{"assignments":[16373],"declarations":[{"constant":false,"id":16373,"mutability":"mutable","name":"len","nameLocation":"7305:3:72","nodeType":"VariableDeclaration","scope":16417,"src":"7297:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16372,"name":"uint256","nodeType":"ElementaryTypeName","src":"7297:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16377,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16374,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16348,"src":"7311:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":16375,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16346,"src":"7317:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7311:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7297:25:72"},{"assignments":[16382],"declarations":[{"constant":false,"id":16382,"mutability":"mutable","name":"result","nameLocation":"7353:6:72","nodeType":"VariableDeclaration","scope":16417,"src":"7336:23:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16380,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7336:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16381,"nodeType":"ArrayTypeName","src":"7336:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16388,"initialValue":{"arguments":[{"id":16386,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16373,"src":"7376:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16385,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"7362:13:72","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":16383,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7366:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16384,"nodeType":"ArrayTypeName","src":"7366:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":16387,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7362:18:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"7336:44:72"},{"body":{"id":16413,"nodeType":"Block","src":"7428:94:72","statements":[{"expression":{"id":16411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":16399,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16382,"src":"7446:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":16401,"indexExpression":{"id":16400,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16390,"src":"7453:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7446:9:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"expression":{"id":16404,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16344,"src":"7478:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16405,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7482:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16102,"src":"7478:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16406,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16346,"src":"7491:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16407,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16390,"src":"7499:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7491:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16402,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12304,"src":"7458:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Arrays_$12304_$","typeString":"type(library Arrays)"}},"id":16403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7465:12:72","memberName":"unsafeAccess","nodeType":"MemberAccess","referencedDeclaration":12105,"src":"7458:19:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_bytes32_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_Bytes32Slot_$12582_storage_ptr_$","typeString":"function (bytes32[] storage pointer,uint256) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":16409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7458:43:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$12582_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":16410,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7502:5:72","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12581,"src":"7458:49:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7446:61:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16412,"nodeType":"ExpressionStatement","src":"7446:61:72"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16393,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16390,"src":"7414:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":16394,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16373,"src":"7418:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7414:7:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16414,"initializationExpression":{"assignments":[16390],"declarations":[{"constant":false,"id":16390,"mutability":"mutable","name":"i","nameLocation":"7407:1:72","nodeType":"VariableDeclaration","scope":16414,"src":"7399:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16389,"name":"uint256","nodeType":"ElementaryTypeName","src":"7399:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16392,"initialValue":{"hexValue":"30","id":16391,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7411:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7399:13:72"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":16397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7423:3:72","subExpression":{"id":16396,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16390,"src":"7425:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16398,"nodeType":"ExpressionStatement","src":"7423:3:72"},"nodeType":"ForStatement","src":"7394:128:72"},{"expression":{"id":16415,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16382,"src":"7542:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":16353,"id":16416,"nodeType":"Return","src":"7535:13:72"}]}]},"documentation":{"id":16341,"nodeType":"StructuredDocumentation","src":"6533:533:72","text":" @dev Return a slice of the set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16419,"implemented":true,"kind":"function","modifiers":[],"name":"_values","nameLocation":"7080:7:72","nodeType":"FunctionDefinition","parameters":{"id":16349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16344,"mutability":"mutable","name":"set","nameLocation":"7100:3:72","nodeType":"VariableDeclaration","scope":16419,"src":"7088:15:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16343,"nodeType":"UserDefinedTypeName","pathNode":{"id":16342,"name":"Set","nameLocations":["7088:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"7088:3:72"},"referencedDeclaration":16107,"src":"7088:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"},{"constant":false,"id":16346,"mutability":"mutable","name":"start","nameLocation":"7113:5:72","nodeType":"VariableDeclaration","scope":16419,"src":"7105:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16345,"name":"uint256","nodeType":"ElementaryTypeName","src":"7105:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16348,"mutability":"mutable","name":"end","nameLocation":"7128:3:72","nodeType":"VariableDeclaration","scope":16419,"src":"7120:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16347,"name":"uint256","nodeType":"ElementaryTypeName","src":"7120:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7087:45:72"},"returnParameters":{"id":16353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16352,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16419,"src":"7155:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16350,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7155:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16351,"nodeType":"ArrayTypeName","src":"7155:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"7154:18:72"},"scope":17618,"src":"7071:494:72","stateMutability":"view","virtual":false,"visibility":"private"},{"canonicalName":"EnumerableSet.Bytes32Set","id":16423,"members":[{"constant":false,"id":16422,"mutability":"mutable","name":"_inner","nameLocation":"7622:6:72","nodeType":"VariableDeclaration","scope":16423,"src":"7618:10:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16421,"nodeType":"UserDefinedTypeName","pathNode":{"id":16420,"name":"Set","nameLocations":["7618:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"7618:3:72"},"referencedDeclaration":16107,"src":"7618:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"name":"Bytes32Set","nameLocation":"7597:10:72","nodeType":"StructDefinition","scope":17618,"src":"7590:45:72","visibility":"public"},{"body":{"id":16440,"nodeType":"Block","src":"7881:47:72","statements":[{"expression":{"arguments":[{"expression":{"id":16435,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16427,"src":"7903:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16436,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7907:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16422,"src":"7903:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16437,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16429,"src":"7915:5:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16434,"name":"_add","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16149,"src":"7898:4:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":16438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7898:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16433,"id":16439,"nodeType":"Return","src":"7891:30:72"}]},"documentation":{"id":16424,"nodeType":"StructuredDocumentation","src":"7641:159:72","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":16441,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"7814:3:72","nodeType":"FunctionDefinition","parameters":{"id":16430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16427,"mutability":"mutable","name":"set","nameLocation":"7837:3:72","nodeType":"VariableDeclaration","scope":16441,"src":"7818:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16426,"nodeType":"UserDefinedTypeName","pathNode":{"id":16425,"name":"Bytes32Set","nameLocations":["7818:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16423,"src":"7818:10:72"},"referencedDeclaration":16423,"src":"7818:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"},{"constant":false,"id":16429,"mutability":"mutable","name":"value","nameLocation":"7850:5:72","nodeType":"VariableDeclaration","scope":16441,"src":"7842:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16428,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7842:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7817:39:72"},"returnParameters":{"id":16433,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16432,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16441,"src":"7875:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16431,"name":"bool","nodeType":"ElementaryTypeName","src":"7875:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7874:6:72"},"scope":17618,"src":"7805:123:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16458,"nodeType":"Block","src":"8175:50:72","statements":[{"expression":{"arguments":[{"expression":{"id":16453,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16445,"src":"8200:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16454,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8204:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16422,"src":"8200:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16455,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16447,"src":"8212:5:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16452,"name":"_remove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16233,"src":"8192:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":16456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8192:26:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16451,"id":16457,"nodeType":"Return","src":"8185:33:72"}]},"documentation":{"id":16442,"nodeType":"StructuredDocumentation","src":"7934:157:72","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":16459,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"8105:6:72","nodeType":"FunctionDefinition","parameters":{"id":16448,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16445,"mutability":"mutable","name":"set","nameLocation":"8131:3:72","nodeType":"VariableDeclaration","scope":16459,"src":"8112:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16444,"nodeType":"UserDefinedTypeName","pathNode":{"id":16443,"name":"Bytes32Set","nameLocations":["8112:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16423,"src":"8112:10:72"},"referencedDeclaration":16423,"src":"8112:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"},{"constant":false,"id":16447,"mutability":"mutable","name":"value","nameLocation":"8144:5:72","nodeType":"VariableDeclaration","scope":16459,"src":"8136:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16446,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8136:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8111:39:72"},"returnParameters":{"id":16451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16450,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16459,"src":"8169:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16449,"name":"bool","nodeType":"ElementaryTypeName","src":"8169:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8168:6:72"},"scope":17618,"src":"8096:129:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16471,"nodeType":"Block","src":"8587:35:72","statements":[{"expression":{"arguments":[{"expression":{"id":16467,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16463,"src":"8604:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16468,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8608:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16422,"src":"8604:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16466,"name":"_clear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16276,"src":"8597:6:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16107_storage_ptr_$returns$__$","typeString":"function (struct EnumerableSet.Set storage pointer)"}},"id":16469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8597:18:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16470,"nodeType":"ExpressionStatement","src":"8597:18:72"}]},"documentation":{"id":16460,"nodeType":"StructuredDocumentation","src":"8231:303:72","text":" @dev Removes all the values from a set. O(n).\n WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block."},"id":16472,"implemented":true,"kind":"function","modifiers":[],"name":"clear","nameLocation":"8548:5:72","nodeType":"FunctionDefinition","parameters":{"id":16464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16463,"mutability":"mutable","name":"set","nameLocation":"8573:3:72","nodeType":"VariableDeclaration","scope":16472,"src":"8554:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16462,"nodeType":"UserDefinedTypeName","pathNode":{"id":16461,"name":"Bytes32Set","nameLocations":["8554:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16423,"src":"8554:10:72"},"referencedDeclaration":16423,"src":"8554:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"}],"src":"8553:24:72"},"returnParameters":{"id":16465,"nodeType":"ParameterList","parameters":[],"src":"8587:0:72"},"scope":17618,"src":"8539:83:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16489,"nodeType":"Block","src":"8789:52:72","statements":[{"expression":{"arguments":[{"expression":{"id":16484,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16476,"src":"8816:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16485,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8820:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16422,"src":"8816:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16486,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16478,"src":"8828:5:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16483,"name":"_contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16295,"src":"8806:9:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"}},"id":16487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8806:28:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16482,"id":16488,"nodeType":"Return","src":"8799:35:72"}]},"documentation":{"id":16473,"nodeType":"StructuredDocumentation","src":"8628:70:72","text":" @dev Returns true if the value is in the set. O(1)."},"id":16490,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"8712:8:72","nodeType":"FunctionDefinition","parameters":{"id":16479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16476,"mutability":"mutable","name":"set","nameLocation":"8740:3:72","nodeType":"VariableDeclaration","scope":16490,"src":"8721:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16475,"nodeType":"UserDefinedTypeName","pathNode":{"id":16474,"name":"Bytes32Set","nameLocations":["8721:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16423,"src":"8721:10:72"},"referencedDeclaration":16423,"src":"8721:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"},{"constant":false,"id":16478,"mutability":"mutable","name":"value","nameLocation":"8753:5:72","nodeType":"VariableDeclaration","scope":16490,"src":"8745:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16477,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8745:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8720:39:72"},"returnParameters":{"id":16482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16481,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16490,"src":"8783:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16480,"name":"bool","nodeType":"ElementaryTypeName","src":"8783:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8782:6:72"},"scope":17618,"src":"8703:138:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16504,"nodeType":"Block","src":"8994:43:72","statements":[{"expression":{"arguments":[{"expression":{"id":16500,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16494,"src":"9019:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16501,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9023:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16422,"src":"9019:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16499,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16309,"src":"9011:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (uint256)"}},"id":16502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9011:19:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16498,"id":16503,"nodeType":"Return","src":"9004:26:72"}]},"documentation":{"id":16491,"nodeType":"StructuredDocumentation","src":"8847:70:72","text":" @dev Returns the number of values in the set. O(1)."},"id":16505,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"8931:6:72","nodeType":"FunctionDefinition","parameters":{"id":16495,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16494,"mutability":"mutable","name":"set","nameLocation":"8957:3:72","nodeType":"VariableDeclaration","scope":16505,"src":"8938:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16493,"nodeType":"UserDefinedTypeName","pathNode":{"id":16492,"name":"Bytes32Set","nameLocations":["8938:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16423,"src":"8938:10:72"},"referencedDeclaration":16423,"src":"8938:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"}],"src":"8937:24:72"},"returnParameters":{"id":16498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16497,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16505,"src":"8985:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16496,"name":"uint256","nodeType":"ElementaryTypeName","src":"8985:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8984:9:72"},"scope":17618,"src":"8922:115:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16522,"nodeType":"Block","src":"9462:46:72","statements":[{"expression":{"arguments":[{"expression":{"id":16517,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16509,"src":"9483:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16518,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9487:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16422,"src":"9483:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16519,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16511,"src":"9495:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16516,"name":"_at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16326,"src":"9479:3:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256) view returns (bytes32)"}},"id":16520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9479:22:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":16515,"id":16521,"nodeType":"Return","src":"9472:29:72"}]},"documentation":{"id":16506,"nodeType":"StructuredDocumentation","src":"9043:331:72","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":16523,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"9388:2:72","nodeType":"FunctionDefinition","parameters":{"id":16512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16509,"mutability":"mutable","name":"set","nameLocation":"9410:3:72","nodeType":"VariableDeclaration","scope":16523,"src":"9391:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16508,"nodeType":"UserDefinedTypeName","pathNode":{"id":16507,"name":"Bytes32Set","nameLocations":["9391:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16423,"src":"9391:10:72"},"referencedDeclaration":16423,"src":"9391:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"},{"constant":false,"id":16511,"mutability":"mutable","name":"index","nameLocation":"9423:5:72","nodeType":"VariableDeclaration","scope":16523,"src":"9415:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16510,"name":"uint256","nodeType":"ElementaryTypeName","src":"9415:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9390:39:72"},"returnParameters":{"id":16515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16514,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16523,"src":"9453:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16513,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9453:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9452:9:72"},"scope":17618,"src":"9379:129:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16552,"nodeType":"Block","src":"10129:192:72","statements":[{"assignments":[16537],"declarations":[{"constant":false,"id":16537,"mutability":"mutable","name":"store","nameLocation":"10156:5:72","nodeType":"VariableDeclaration","scope":16552,"src":"10139:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16535,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10139:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16536,"nodeType":"ArrayTypeName","src":"10139:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16542,"initialValue":{"arguments":[{"expression":{"id":16539,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16527,"src":"10172:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16540,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10176:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16422,"src":"10172:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16538,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[16340,16419],"referencedDeclaration":16340,"src":"10164:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (bytes32[] memory)"}},"id":16541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10164:19:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10139:44:72"},{"assignments":[16547],"declarations":[{"constant":false,"id":16547,"mutability":"mutable","name":"result","nameLocation":"10210:6:72","nodeType":"VariableDeclaration","scope":16552,"src":"10193:23:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16545,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10193:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16546,"nodeType":"ArrayTypeName","src":"10193:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16548,"nodeType":"VariableDeclarationStatement","src":"10193:23:72"},{"AST":{"nativeSrc":"10252:39:72","nodeType":"YulBlock","src":"10252:39:72","statements":[{"nativeSrc":"10266:15:72","nodeType":"YulAssignment","src":"10266:15:72","value":{"name":"store","nativeSrc":"10276:5:72","nodeType":"YulIdentifier","src":"10276:5:72"},"variableNames":[{"name":"result","nativeSrc":"10266:6:72","nodeType":"YulIdentifier","src":"10266:6:72"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16547,"isOffset":false,"isSlot":false,"src":"10266:6:72","valueSize":1},{"declaration":16537,"isOffset":false,"isSlot":false,"src":"10276:5:72","valueSize":1}],"flags":["memory-safe"],"id":16549,"nodeType":"InlineAssembly","src":"10227:64:72"},{"expression":{"id":16550,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16547,"src":"10308:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":16532,"id":16551,"nodeType":"Return","src":"10301:13:72"}]},"documentation":{"id":16524,"nodeType":"StructuredDocumentation","src":"9514:529:72","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16553,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"10057:6:72","nodeType":"FunctionDefinition","parameters":{"id":16528,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16527,"mutability":"mutable","name":"set","nameLocation":"10083:3:72","nodeType":"VariableDeclaration","scope":16553,"src":"10064:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16526,"nodeType":"UserDefinedTypeName","pathNode":{"id":16525,"name":"Bytes32Set","nameLocations":["10064:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16423,"src":"10064:10:72"},"referencedDeclaration":16423,"src":"10064:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"}],"src":"10063:24:72"},"returnParameters":{"id":16532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16531,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16553,"src":"10111:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16529,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10111:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16530,"nodeType":"ArrayTypeName","src":"10111:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"10110:18:72"},"scope":17618,"src":"10048:273:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16588,"nodeType":"Block","src":"10974:204:72","statements":[{"assignments":[16571],"declarations":[{"constant":false,"id":16571,"mutability":"mutable","name":"store","nameLocation":"11001:5:72","nodeType":"VariableDeclaration","scope":16588,"src":"10984:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16569,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10984:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16570,"nodeType":"ArrayTypeName","src":"10984:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16578,"initialValue":{"arguments":[{"expression":{"id":16573,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16557,"src":"11017:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16574,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11021:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16422,"src":"11017:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16575,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16559,"src":"11029:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16576,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16561,"src":"11036:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16572,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[16340,16419],"referencedDeclaration":16419,"src":"11009:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256,uint256) view returns (bytes32[] memory)"}},"id":16577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11009:31:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10984:56:72"},{"assignments":[16583],"declarations":[{"constant":false,"id":16583,"mutability":"mutable","name":"result","nameLocation":"11067:6:72","nodeType":"VariableDeclaration","scope":16588,"src":"11050:23:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16581,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11050:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16582,"nodeType":"ArrayTypeName","src":"11050:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16584,"nodeType":"VariableDeclarationStatement","src":"11050:23:72"},{"AST":{"nativeSrc":"11109:39:72","nodeType":"YulBlock","src":"11109:39:72","statements":[{"nativeSrc":"11123:15:72","nodeType":"YulAssignment","src":"11123:15:72","value":{"name":"store","nativeSrc":"11133:5:72","nodeType":"YulIdentifier","src":"11133:5:72"},"variableNames":[{"name":"result","nativeSrc":"11123:6:72","nodeType":"YulIdentifier","src":"11123:6:72"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16583,"isOffset":false,"isSlot":false,"src":"11123:6:72","valueSize":1},{"declaration":16571,"isOffset":false,"isSlot":false,"src":"11133:5:72","valueSize":1}],"flags":["memory-safe"],"id":16585,"nodeType":"InlineAssembly","src":"11084:64:72"},{"expression":{"id":16586,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16583,"src":"11165:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":16566,"id":16587,"nodeType":"Return","src":"11158:13:72"}]},"documentation":{"id":16554,"nodeType":"StructuredDocumentation","src":"10327:533:72","text":" @dev Return a slice of the set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16589,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"10874:6:72","nodeType":"FunctionDefinition","parameters":{"id":16562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16557,"mutability":"mutable","name":"set","nameLocation":"10900:3:72","nodeType":"VariableDeclaration","scope":16589,"src":"10881:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16556,"nodeType":"UserDefinedTypeName","pathNode":{"id":16555,"name":"Bytes32Set","nameLocations":["10881:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16423,"src":"10881:10:72"},"referencedDeclaration":16423,"src":"10881:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16423_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"},{"constant":false,"id":16559,"mutability":"mutable","name":"start","nameLocation":"10913:5:72","nodeType":"VariableDeclaration","scope":16589,"src":"10905:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16558,"name":"uint256","nodeType":"ElementaryTypeName","src":"10905:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16561,"mutability":"mutable","name":"end","nameLocation":"10928:3:72","nodeType":"VariableDeclaration","scope":16589,"src":"10920:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16560,"name":"uint256","nodeType":"ElementaryTypeName","src":"10920:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10880:52:72"},"returnParameters":{"id":16566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16565,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16589,"src":"10956:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16563,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10956:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16564,"nodeType":"ArrayTypeName","src":"10956:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"10955:18:72"},"scope":17618,"src":"10865:313:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"EnumerableSet.AddressSet","id":16593,"members":[{"constant":false,"id":16592,"mutability":"mutable","name":"_inner","nameLocation":"11235:6:72","nodeType":"VariableDeclaration","scope":16593,"src":"11231:10:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16591,"nodeType":"UserDefinedTypeName","pathNode":{"id":16590,"name":"Set","nameLocations":["11231:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"11231:3:72"},"referencedDeclaration":16107,"src":"11231:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"name":"AddressSet","nameLocation":"11210:10:72","nodeType":"StructDefinition","scope":17618,"src":"11203:45:72","visibility":"public"},{"body":{"id":16619,"nodeType":"Block","src":"11494:74:72","statements":[{"expression":{"arguments":[{"expression":{"id":16605,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16597,"src":"11516:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16606,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11520:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16592,"src":"11516:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"arguments":[{"arguments":[{"id":16613,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16599,"src":"11552:5:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16612,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11544:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":16611,"name":"uint160","nodeType":"ElementaryTypeName","src":"11544:7:72","typeDescriptions":{}}},"id":16614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11544:14:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":16610,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11536:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16609,"name":"uint256","nodeType":"ElementaryTypeName","src":"11536:7:72","typeDescriptions":{}}},"id":16615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11536:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16608,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11528:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16607,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11528:7:72","typeDescriptions":{}}},"id":16616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11528:32:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16604,"name":"_add","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16149,"src":"11511:4:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":16617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11511:50:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16603,"id":16618,"nodeType":"Return","src":"11504:57:72"}]},"documentation":{"id":16594,"nodeType":"StructuredDocumentation","src":"11254:159:72","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":16620,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"11427:3:72","nodeType":"FunctionDefinition","parameters":{"id":16600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16597,"mutability":"mutable","name":"set","nameLocation":"11450:3:72","nodeType":"VariableDeclaration","scope":16620,"src":"11431:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16596,"nodeType":"UserDefinedTypeName","pathNode":{"id":16595,"name":"AddressSet","nameLocations":["11431:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"11431:10:72"},"referencedDeclaration":16593,"src":"11431:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":16599,"mutability":"mutable","name":"value","nameLocation":"11463:5:72","nodeType":"VariableDeclaration","scope":16620,"src":"11455:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16598,"name":"address","nodeType":"ElementaryTypeName","src":"11455:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11430:39:72"},"returnParameters":{"id":16603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16602,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16620,"src":"11488:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16601,"name":"bool","nodeType":"ElementaryTypeName","src":"11488:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11487:6:72"},"scope":17618,"src":"11418:150:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16646,"nodeType":"Block","src":"11815:77:72","statements":[{"expression":{"arguments":[{"expression":{"id":16632,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16624,"src":"11840:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16633,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11844:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16592,"src":"11840:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"arguments":[{"arguments":[{"id":16640,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16626,"src":"11876:5:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16639,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11868:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":16638,"name":"uint160","nodeType":"ElementaryTypeName","src":"11868:7:72","typeDescriptions":{}}},"id":16641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11868:14:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":16637,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11860:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16636,"name":"uint256","nodeType":"ElementaryTypeName","src":"11860:7:72","typeDescriptions":{}}},"id":16642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11860:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16635,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11852:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16634,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11852:7:72","typeDescriptions":{}}},"id":16643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11852:32:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16631,"name":"_remove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16233,"src":"11832:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":16644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11832:53:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16630,"id":16645,"nodeType":"Return","src":"11825:60:72"}]},"documentation":{"id":16621,"nodeType":"StructuredDocumentation","src":"11574:157:72","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":16647,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"11745:6:72","nodeType":"FunctionDefinition","parameters":{"id":16627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16624,"mutability":"mutable","name":"set","nameLocation":"11771:3:72","nodeType":"VariableDeclaration","scope":16647,"src":"11752:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16623,"nodeType":"UserDefinedTypeName","pathNode":{"id":16622,"name":"AddressSet","nameLocations":["11752:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"11752:10:72"},"referencedDeclaration":16593,"src":"11752:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":16626,"mutability":"mutable","name":"value","nameLocation":"11784:5:72","nodeType":"VariableDeclaration","scope":16647,"src":"11776:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16625,"name":"address","nodeType":"ElementaryTypeName","src":"11776:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11751:39:72"},"returnParameters":{"id":16630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16629,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16647,"src":"11809:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16628,"name":"bool","nodeType":"ElementaryTypeName","src":"11809:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11808:6:72"},"scope":17618,"src":"11736:156:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16659,"nodeType":"Block","src":"12254:35:72","statements":[{"expression":{"arguments":[{"expression":{"id":16655,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16651,"src":"12271:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16656,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12275:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16592,"src":"12271:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16654,"name":"_clear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16276,"src":"12264:6:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16107_storage_ptr_$returns$__$","typeString":"function (struct EnumerableSet.Set storage pointer)"}},"id":16657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12264:18:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16658,"nodeType":"ExpressionStatement","src":"12264:18:72"}]},"documentation":{"id":16648,"nodeType":"StructuredDocumentation","src":"11898:303:72","text":" @dev Removes all the values from a set. O(n).\n WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block."},"id":16660,"implemented":true,"kind":"function","modifiers":[],"name":"clear","nameLocation":"12215:5:72","nodeType":"FunctionDefinition","parameters":{"id":16652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16651,"mutability":"mutable","name":"set","nameLocation":"12240:3:72","nodeType":"VariableDeclaration","scope":16660,"src":"12221:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16650,"nodeType":"UserDefinedTypeName","pathNode":{"id":16649,"name":"AddressSet","nameLocations":["12221:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"12221:10:72"},"referencedDeclaration":16593,"src":"12221:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"12220:24:72"},"returnParameters":{"id":16653,"nodeType":"ParameterList","parameters":[],"src":"12254:0:72"},"scope":17618,"src":"12206:83:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16686,"nodeType":"Block","src":"12456:79:72","statements":[{"expression":{"arguments":[{"expression":{"id":16672,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16664,"src":"12483:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16673,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12487:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16592,"src":"12483:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"arguments":[{"arguments":[{"id":16680,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16666,"src":"12519:5:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16679,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12511:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":16678,"name":"uint160","nodeType":"ElementaryTypeName","src":"12511:7:72","typeDescriptions":{}}},"id":16681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12511:14:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":16677,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12503:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16676,"name":"uint256","nodeType":"ElementaryTypeName","src":"12503:7:72","typeDescriptions":{}}},"id":16682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12503:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16675,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12495:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16674,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12495:7:72","typeDescriptions":{}}},"id":16683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12495:32:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16671,"name":"_contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16295,"src":"12473:9:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"}},"id":16684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12473:55:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16670,"id":16685,"nodeType":"Return","src":"12466:62:72"}]},"documentation":{"id":16661,"nodeType":"StructuredDocumentation","src":"12295:70:72","text":" @dev Returns true if the value is in the set. O(1)."},"id":16687,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"12379:8:72","nodeType":"FunctionDefinition","parameters":{"id":16667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16664,"mutability":"mutable","name":"set","nameLocation":"12407:3:72","nodeType":"VariableDeclaration","scope":16687,"src":"12388:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16663,"nodeType":"UserDefinedTypeName","pathNode":{"id":16662,"name":"AddressSet","nameLocations":["12388:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"12388:10:72"},"referencedDeclaration":16593,"src":"12388:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":16666,"mutability":"mutable","name":"value","nameLocation":"12420:5:72","nodeType":"VariableDeclaration","scope":16687,"src":"12412:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16665,"name":"address","nodeType":"ElementaryTypeName","src":"12412:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12387:39:72"},"returnParameters":{"id":16670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16669,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16687,"src":"12450:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16668,"name":"bool","nodeType":"ElementaryTypeName","src":"12450:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12449:6:72"},"scope":17618,"src":"12370:165:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16701,"nodeType":"Block","src":"12688:43:72","statements":[{"expression":{"arguments":[{"expression":{"id":16697,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16691,"src":"12713:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16698,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12717:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16592,"src":"12713:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16696,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16309,"src":"12705:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (uint256)"}},"id":16699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12705:19:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16695,"id":16700,"nodeType":"Return","src":"12698:26:72"}]},"documentation":{"id":16688,"nodeType":"StructuredDocumentation","src":"12541:70:72","text":" @dev Returns the number of values in the set. O(1)."},"id":16702,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"12625:6:72","nodeType":"FunctionDefinition","parameters":{"id":16692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16691,"mutability":"mutable","name":"set","nameLocation":"12651:3:72","nodeType":"VariableDeclaration","scope":16702,"src":"12632:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16690,"nodeType":"UserDefinedTypeName","pathNode":{"id":16689,"name":"AddressSet","nameLocations":["12632:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"12632:10:72"},"referencedDeclaration":16593,"src":"12632:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"12631:24:72"},"returnParameters":{"id":16695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16694,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16702,"src":"12679:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16693,"name":"uint256","nodeType":"ElementaryTypeName","src":"12679:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12678:9:72"},"scope":17618,"src":"12616:115:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16728,"nodeType":"Block","src":"13156:73:72","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":16720,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16706,"src":"13201:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16721,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13205:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16592,"src":"13201:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16722,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16708,"src":"13213:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16719,"name":"_at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16326,"src":"13197:3:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256) view returns (bytes32)"}},"id":16723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13197:22:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16718,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13189:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16717,"name":"uint256","nodeType":"ElementaryTypeName","src":"13189:7:72","typeDescriptions":{}}},"id":16724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13189:31:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16716,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13181:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":16715,"name":"uint160","nodeType":"ElementaryTypeName","src":"13181:7:72","typeDescriptions":{}}},"id":16725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13181:40:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":16714,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13173:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16713,"name":"address","nodeType":"ElementaryTypeName","src":"13173:7:72","typeDescriptions":{}}},"id":16726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13173:49:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":16712,"id":16727,"nodeType":"Return","src":"13166:56:72"}]},"documentation":{"id":16703,"nodeType":"StructuredDocumentation","src":"12737:331:72","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":16729,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"13082:2:72","nodeType":"FunctionDefinition","parameters":{"id":16709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16706,"mutability":"mutable","name":"set","nameLocation":"13104:3:72","nodeType":"VariableDeclaration","scope":16729,"src":"13085:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16705,"nodeType":"UserDefinedTypeName","pathNode":{"id":16704,"name":"AddressSet","nameLocations":["13085:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"13085:10:72"},"referencedDeclaration":16593,"src":"13085:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":16708,"mutability":"mutable","name":"index","nameLocation":"13117:5:72","nodeType":"VariableDeclaration","scope":16729,"src":"13109:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16707,"name":"uint256","nodeType":"ElementaryTypeName","src":"13109:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13084:39:72"},"returnParameters":{"id":16712,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16711,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16729,"src":"13147:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16710,"name":"address","nodeType":"ElementaryTypeName","src":"13147:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13146:9:72"},"scope":17618,"src":"13073:156:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16758,"nodeType":"Block","src":"13850:192:72","statements":[{"assignments":[16743],"declarations":[{"constant":false,"id":16743,"mutability":"mutable","name":"store","nameLocation":"13877:5:72","nodeType":"VariableDeclaration","scope":16758,"src":"13860:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16741,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13860:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16742,"nodeType":"ArrayTypeName","src":"13860:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16748,"initialValue":{"arguments":[{"expression":{"id":16745,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16733,"src":"13893:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16746,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13897:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16592,"src":"13893:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16744,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[16340,16419],"referencedDeclaration":16340,"src":"13885:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (bytes32[] memory)"}},"id":16747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13885:19:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"13860:44:72"},{"assignments":[16753],"declarations":[{"constant":false,"id":16753,"mutability":"mutable","name":"result","nameLocation":"13931:6:72","nodeType":"VariableDeclaration","scope":16758,"src":"13914:23:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":16751,"name":"address","nodeType":"ElementaryTypeName","src":"13914:7:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16752,"nodeType":"ArrayTypeName","src":"13914:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":16754,"nodeType":"VariableDeclarationStatement","src":"13914:23:72"},{"AST":{"nativeSrc":"13973:39:72","nodeType":"YulBlock","src":"13973:39:72","statements":[{"nativeSrc":"13987:15:72","nodeType":"YulAssignment","src":"13987:15:72","value":{"name":"store","nativeSrc":"13997:5:72","nodeType":"YulIdentifier","src":"13997:5:72"},"variableNames":[{"name":"result","nativeSrc":"13987:6:72","nodeType":"YulIdentifier","src":"13987:6:72"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16753,"isOffset":false,"isSlot":false,"src":"13987:6:72","valueSize":1},{"declaration":16743,"isOffset":false,"isSlot":false,"src":"13997:5:72","valueSize":1}],"flags":["memory-safe"],"id":16755,"nodeType":"InlineAssembly","src":"13948:64:72"},{"expression":{"id":16756,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16753,"src":"14029:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":16738,"id":16757,"nodeType":"Return","src":"14022:13:72"}]},"documentation":{"id":16730,"nodeType":"StructuredDocumentation","src":"13235:529:72","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16759,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"13778:6:72","nodeType":"FunctionDefinition","parameters":{"id":16734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16733,"mutability":"mutable","name":"set","nameLocation":"13804:3:72","nodeType":"VariableDeclaration","scope":16759,"src":"13785:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16732,"nodeType":"UserDefinedTypeName","pathNode":{"id":16731,"name":"AddressSet","nameLocations":["13785:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"13785:10:72"},"referencedDeclaration":16593,"src":"13785:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"13784:24:72"},"returnParameters":{"id":16738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16737,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16759,"src":"13832:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":16735,"name":"address","nodeType":"ElementaryTypeName","src":"13832:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16736,"nodeType":"ArrayTypeName","src":"13832:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"13831:18:72"},"scope":17618,"src":"13769:273:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16794,"nodeType":"Block","src":"14695:204:72","statements":[{"assignments":[16777],"declarations":[{"constant":false,"id":16777,"mutability":"mutable","name":"store","nameLocation":"14722:5:72","nodeType":"VariableDeclaration","scope":16794,"src":"14705:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16775,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14705:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16776,"nodeType":"ArrayTypeName","src":"14705:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16784,"initialValue":{"arguments":[{"expression":{"id":16779,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16763,"src":"14738:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16780,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14742:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16592,"src":"14738:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16781,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16765,"src":"14750:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16782,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16767,"src":"14757:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16778,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[16340,16419],"referencedDeclaration":16419,"src":"14730:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256,uint256) view returns (bytes32[] memory)"}},"id":16783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14730:31:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"14705:56:72"},{"assignments":[16789],"declarations":[{"constant":false,"id":16789,"mutability":"mutable","name":"result","nameLocation":"14788:6:72","nodeType":"VariableDeclaration","scope":16794,"src":"14771:23:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":16787,"name":"address","nodeType":"ElementaryTypeName","src":"14771:7:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16788,"nodeType":"ArrayTypeName","src":"14771:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":16790,"nodeType":"VariableDeclarationStatement","src":"14771:23:72"},{"AST":{"nativeSrc":"14830:39:72","nodeType":"YulBlock","src":"14830:39:72","statements":[{"nativeSrc":"14844:15:72","nodeType":"YulAssignment","src":"14844:15:72","value":{"name":"store","nativeSrc":"14854:5:72","nodeType":"YulIdentifier","src":"14854:5:72"},"variableNames":[{"name":"result","nativeSrc":"14844:6:72","nodeType":"YulIdentifier","src":"14844:6:72"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16789,"isOffset":false,"isSlot":false,"src":"14844:6:72","valueSize":1},{"declaration":16777,"isOffset":false,"isSlot":false,"src":"14854:5:72","valueSize":1}],"flags":["memory-safe"],"id":16791,"nodeType":"InlineAssembly","src":"14805:64:72"},{"expression":{"id":16792,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16789,"src":"14886:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":16772,"id":16793,"nodeType":"Return","src":"14879:13:72"}]},"documentation":{"id":16760,"nodeType":"StructuredDocumentation","src":"14048:533:72","text":" @dev Return a slice of the set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16795,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"14595:6:72","nodeType":"FunctionDefinition","parameters":{"id":16768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16763,"mutability":"mutable","name":"set","nameLocation":"14621:3:72","nodeType":"VariableDeclaration","scope":16795,"src":"14602:22:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16762,"nodeType":"UserDefinedTypeName","pathNode":{"id":16761,"name":"AddressSet","nameLocations":["14602:10:72"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"14602:10:72"},"referencedDeclaration":16593,"src":"14602:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":16765,"mutability":"mutable","name":"start","nameLocation":"14634:5:72","nodeType":"VariableDeclaration","scope":16795,"src":"14626:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16764,"name":"uint256","nodeType":"ElementaryTypeName","src":"14626:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16767,"mutability":"mutable","name":"end","nameLocation":"14649:3:72","nodeType":"VariableDeclaration","scope":16795,"src":"14641:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16766,"name":"uint256","nodeType":"ElementaryTypeName","src":"14641:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14601:52:72"},"returnParameters":{"id":16772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16771,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16795,"src":"14677:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":16769,"name":"address","nodeType":"ElementaryTypeName","src":"14677:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16770,"nodeType":"ArrayTypeName","src":"14677:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"14676:18:72"},"scope":17618,"src":"14586:313:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"EnumerableSet.UintSet","id":16799,"members":[{"constant":false,"id":16798,"mutability":"mutable","name":"_inner","nameLocation":"14950:6:72","nodeType":"VariableDeclaration","scope":16799,"src":"14946:10:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16797,"nodeType":"UserDefinedTypeName","pathNode":{"id":16796,"name":"Set","nameLocations":["14946:3:72"],"nodeType":"IdentifierPath","referencedDeclaration":16107,"src":"14946:3:72"},"referencedDeclaration":16107,"src":"14946:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"name":"UintSet","nameLocation":"14928:7:72","nodeType":"StructDefinition","scope":17618,"src":"14921:42:72","visibility":"public"},{"body":{"id":16819,"nodeType":"Block","src":"15206:56:72","statements":[{"expression":{"arguments":[{"expression":{"id":16811,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16803,"src":"15228:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16812,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15232:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16798,"src":"15228:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"id":16815,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16805,"src":"15248:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16814,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15240:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16813,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15240:7:72","typeDescriptions":{}}},"id":16816,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15240:14:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16810,"name":"_add","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16149,"src":"15223:4:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":16817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15223:32:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16809,"id":16818,"nodeType":"Return","src":"15216:39:72"}]},"documentation":{"id":16800,"nodeType":"StructuredDocumentation","src":"14969:159:72","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":16820,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"15142:3:72","nodeType":"FunctionDefinition","parameters":{"id":16806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16803,"mutability":"mutable","name":"set","nameLocation":"15162:3:72","nodeType":"VariableDeclaration","scope":16820,"src":"15146:19:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16802,"nodeType":"UserDefinedTypeName","pathNode":{"id":16801,"name":"UintSet","nameLocations":["15146:7:72"],"nodeType":"IdentifierPath","referencedDeclaration":16799,"src":"15146:7:72"},"referencedDeclaration":16799,"src":"15146:7:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"},{"constant":false,"id":16805,"mutability":"mutable","name":"value","nameLocation":"15175:5:72","nodeType":"VariableDeclaration","scope":16820,"src":"15167:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16804,"name":"uint256","nodeType":"ElementaryTypeName","src":"15167:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15145:36:72"},"returnParameters":{"id":16809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16808,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16820,"src":"15200:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16807,"name":"bool","nodeType":"ElementaryTypeName","src":"15200:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15199:6:72"},"scope":17618,"src":"15133:129:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16840,"nodeType":"Block","src":"15506:59:72","statements":[{"expression":{"arguments":[{"expression":{"id":16832,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16824,"src":"15531:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16833,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15535:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16798,"src":"15531:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"id":16836,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16826,"src":"15551:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16835,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15543:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16834,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15543:7:72","typeDescriptions":{}}},"id":16837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15543:14:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16831,"name":"_remove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16233,"src":"15523:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":16838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15523:35:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16830,"id":16839,"nodeType":"Return","src":"15516:42:72"}]},"documentation":{"id":16821,"nodeType":"StructuredDocumentation","src":"15268:157:72","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":16841,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"15439:6:72","nodeType":"FunctionDefinition","parameters":{"id":16827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16824,"mutability":"mutable","name":"set","nameLocation":"15462:3:72","nodeType":"VariableDeclaration","scope":16841,"src":"15446:19:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16823,"nodeType":"UserDefinedTypeName","pathNode":{"id":16822,"name":"UintSet","nameLocations":["15446:7:72"],"nodeType":"IdentifierPath","referencedDeclaration":16799,"src":"15446:7:72"},"referencedDeclaration":16799,"src":"15446:7:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"},{"constant":false,"id":16826,"mutability":"mutable","name":"value","nameLocation":"15475:5:72","nodeType":"VariableDeclaration","scope":16841,"src":"15467:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16825,"name":"uint256","nodeType":"ElementaryTypeName","src":"15467:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15445:36:72"},"returnParameters":{"id":16830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16829,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16841,"src":"15500:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16828,"name":"bool","nodeType":"ElementaryTypeName","src":"15500:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15499:6:72"},"scope":17618,"src":"15430:135:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16853,"nodeType":"Block","src":"15924:35:72","statements":[{"expression":{"arguments":[{"expression":{"id":16849,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16845,"src":"15941:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16850,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15945:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16798,"src":"15941:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16848,"name":"_clear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16276,"src":"15934:6:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16107_storage_ptr_$returns$__$","typeString":"function (struct EnumerableSet.Set storage pointer)"}},"id":16851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15934:18:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16852,"nodeType":"ExpressionStatement","src":"15934:18:72"}]},"documentation":{"id":16842,"nodeType":"StructuredDocumentation","src":"15571:303:72","text":" @dev Removes all the values from a set. O(n).\n WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block."},"id":16854,"implemented":true,"kind":"function","modifiers":[],"name":"clear","nameLocation":"15888:5:72","nodeType":"FunctionDefinition","parameters":{"id":16846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16845,"mutability":"mutable","name":"set","nameLocation":"15910:3:72","nodeType":"VariableDeclaration","scope":16854,"src":"15894:19:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16844,"nodeType":"UserDefinedTypeName","pathNode":{"id":16843,"name":"UintSet","nameLocations":["15894:7:72"],"nodeType":"IdentifierPath","referencedDeclaration":16799,"src":"15894:7:72"},"referencedDeclaration":16799,"src":"15894:7:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"}],"src":"15893:21:72"},"returnParameters":{"id":16847,"nodeType":"ParameterList","parameters":[],"src":"15924:0:72"},"scope":17618,"src":"15879:80:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16874,"nodeType":"Block","src":"16123:61:72","statements":[{"expression":{"arguments":[{"expression":{"id":16866,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16858,"src":"16150:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16867,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16154:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16798,"src":"16150:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"id":16870,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16860,"src":"16170:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16869,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16162:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16868,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16162:7:72","typeDescriptions":{}}},"id":16871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16162:14:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16865,"name":"_contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16295,"src":"16140:9:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"}},"id":16872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16140:37:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16864,"id":16873,"nodeType":"Return","src":"16133:44:72"}]},"documentation":{"id":16855,"nodeType":"StructuredDocumentation","src":"15965:70:72","text":" @dev Returns true if the value is in the set. O(1)."},"id":16875,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"16049:8:72","nodeType":"FunctionDefinition","parameters":{"id":16861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16858,"mutability":"mutable","name":"set","nameLocation":"16074:3:72","nodeType":"VariableDeclaration","scope":16875,"src":"16058:19:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16857,"nodeType":"UserDefinedTypeName","pathNode":{"id":16856,"name":"UintSet","nameLocations":["16058:7:72"],"nodeType":"IdentifierPath","referencedDeclaration":16799,"src":"16058:7:72"},"referencedDeclaration":16799,"src":"16058:7:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"},{"constant":false,"id":16860,"mutability":"mutable","name":"value","nameLocation":"16087:5:72","nodeType":"VariableDeclaration","scope":16875,"src":"16079:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16859,"name":"uint256","nodeType":"ElementaryTypeName","src":"16079:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16057:36:72"},"returnParameters":{"id":16864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16863,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16875,"src":"16117:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16862,"name":"bool","nodeType":"ElementaryTypeName","src":"16117:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"16116:6:72"},"scope":17618,"src":"16040:144:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16889,"nodeType":"Block","src":"16334:43:72","statements":[{"expression":{"arguments":[{"expression":{"id":16885,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16879,"src":"16359:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16886,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16363:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16798,"src":"16359:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16884,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16309,"src":"16351:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (uint256)"}},"id":16887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16351:19:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16883,"id":16888,"nodeType":"Return","src":"16344:26:72"}]},"documentation":{"id":16876,"nodeType":"StructuredDocumentation","src":"16190:70:72","text":" @dev Returns the number of values in the set. O(1)."},"id":16890,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"16274:6:72","nodeType":"FunctionDefinition","parameters":{"id":16880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16879,"mutability":"mutable","name":"set","nameLocation":"16297:3:72","nodeType":"VariableDeclaration","scope":16890,"src":"16281:19:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16878,"nodeType":"UserDefinedTypeName","pathNode":{"id":16877,"name":"UintSet","nameLocations":["16281:7:72"],"nodeType":"IdentifierPath","referencedDeclaration":16799,"src":"16281:7:72"},"referencedDeclaration":16799,"src":"16281:7:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"}],"src":"16280:21:72"},"returnParameters":{"id":16883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16882,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16890,"src":"16325:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16881,"name":"uint256","nodeType":"ElementaryTypeName","src":"16325:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16324:9:72"},"scope":17618,"src":"16265:112:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16910,"nodeType":"Block","src":"16799:55:72","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":16904,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16894,"src":"16828:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16905,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16832:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16798,"src":"16828:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16906,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16896,"src":"16840:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16903,"name":"_at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16326,"src":"16824:3:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256) view returns (bytes32)"}},"id":16907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16824:22:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16902,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16816:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16901,"name":"uint256","nodeType":"ElementaryTypeName","src":"16816:7:72","typeDescriptions":{}}},"id":16908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16816:31:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16900,"id":16909,"nodeType":"Return","src":"16809:38:72"}]},"documentation":{"id":16891,"nodeType":"StructuredDocumentation","src":"16383:331:72","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":16911,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"16728:2:72","nodeType":"FunctionDefinition","parameters":{"id":16897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16894,"mutability":"mutable","name":"set","nameLocation":"16747:3:72","nodeType":"VariableDeclaration","scope":16911,"src":"16731:19:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16893,"nodeType":"UserDefinedTypeName","pathNode":{"id":16892,"name":"UintSet","nameLocations":["16731:7:72"],"nodeType":"IdentifierPath","referencedDeclaration":16799,"src":"16731:7:72"},"referencedDeclaration":16799,"src":"16731:7:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"},{"constant":false,"id":16896,"mutability":"mutable","name":"index","nameLocation":"16760:5:72","nodeType":"VariableDeclaration","scope":16911,"src":"16752:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16895,"name":"uint256","nodeType":"ElementaryTypeName","src":"16752:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16730:36:72"},"returnParameters":{"id":16900,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16899,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16911,"src":"16790:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16898,"name":"uint256","nodeType":"ElementaryTypeName","src":"16790:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16789:9:72"},"scope":17618,"src":"16719:135:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16940,"nodeType":"Block","src":"17472:192:72","statements":[{"assignments":[16925],"declarations":[{"constant":false,"id":16925,"mutability":"mutable","name":"store","nameLocation":"17499:5:72","nodeType":"VariableDeclaration","scope":16940,"src":"17482:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16923,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17482:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16924,"nodeType":"ArrayTypeName","src":"17482:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16930,"initialValue":{"arguments":[{"expression":{"id":16927,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16915,"src":"17515:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16928,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17519:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16798,"src":"17515:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16926,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[16340,16419],"referencedDeclaration":16340,"src":"17507:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (bytes32[] memory)"}},"id":16929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17507:19:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"17482:44:72"},{"assignments":[16935],"declarations":[{"constant":false,"id":16935,"mutability":"mutable","name":"result","nameLocation":"17553:6:72","nodeType":"VariableDeclaration","scope":16940,"src":"17536:23:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16933,"name":"uint256","nodeType":"ElementaryTypeName","src":"17536:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16934,"nodeType":"ArrayTypeName","src":"17536:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":16936,"nodeType":"VariableDeclarationStatement","src":"17536:23:72"},{"AST":{"nativeSrc":"17595:39:72","nodeType":"YulBlock","src":"17595:39:72","statements":[{"nativeSrc":"17609:15:72","nodeType":"YulAssignment","src":"17609:15:72","value":{"name":"store","nativeSrc":"17619:5:72","nodeType":"YulIdentifier","src":"17619:5:72"},"variableNames":[{"name":"result","nativeSrc":"17609:6:72","nodeType":"YulIdentifier","src":"17609:6:72"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16935,"isOffset":false,"isSlot":false,"src":"17609:6:72","valueSize":1},{"declaration":16925,"isOffset":false,"isSlot":false,"src":"17619:5:72","valueSize":1}],"flags":["memory-safe"],"id":16937,"nodeType":"InlineAssembly","src":"17570:64:72"},{"expression":{"id":16938,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16935,"src":"17651:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":16920,"id":16939,"nodeType":"Return","src":"17644:13:72"}]},"documentation":{"id":16912,"nodeType":"StructuredDocumentation","src":"16860:529:72","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16941,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"17403:6:72","nodeType":"FunctionDefinition","parameters":{"id":16916,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16915,"mutability":"mutable","name":"set","nameLocation":"17426:3:72","nodeType":"VariableDeclaration","scope":16941,"src":"17410:19:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16914,"nodeType":"UserDefinedTypeName","pathNode":{"id":16913,"name":"UintSet","nameLocations":["17410:7:72"],"nodeType":"IdentifierPath","referencedDeclaration":16799,"src":"17410:7:72"},"referencedDeclaration":16799,"src":"17410:7:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"}],"src":"17409:21:72"},"returnParameters":{"id":16920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16919,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16941,"src":"17454:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16917,"name":"uint256","nodeType":"ElementaryTypeName","src":"17454:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16918,"nodeType":"ArrayTypeName","src":"17454:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"17453:18:72"},"scope":17618,"src":"17394:270:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16976,"nodeType":"Block","src":"18314:204:72","statements":[{"assignments":[16959],"declarations":[{"constant":false,"id":16959,"mutability":"mutable","name":"store","nameLocation":"18341:5:72","nodeType":"VariableDeclaration","scope":16976,"src":"18324:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16957,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18324:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16958,"nodeType":"ArrayTypeName","src":"18324:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16966,"initialValue":{"arguments":[{"expression":{"id":16961,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16945,"src":"18357:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16962,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18361:6:72","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16798,"src":"18357:10:72","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16963,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16947,"src":"18369:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16964,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16949,"src":"18376:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16107_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16960,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[16340,16419],"referencedDeclaration":16419,"src":"18349:7:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16107_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256,uint256) view returns (bytes32[] memory)"}},"id":16965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18349:31:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"18324:56:72"},{"assignments":[16971],"declarations":[{"constant":false,"id":16971,"mutability":"mutable","name":"result","nameLocation":"18407:6:72","nodeType":"VariableDeclaration","scope":16976,"src":"18390:23:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16969,"name":"uint256","nodeType":"ElementaryTypeName","src":"18390:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16970,"nodeType":"ArrayTypeName","src":"18390:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":16972,"nodeType":"VariableDeclarationStatement","src":"18390:23:72"},{"AST":{"nativeSrc":"18449:39:72","nodeType":"YulBlock","src":"18449:39:72","statements":[{"nativeSrc":"18463:15:72","nodeType":"YulAssignment","src":"18463:15:72","value":{"name":"store","nativeSrc":"18473:5:72","nodeType":"YulIdentifier","src":"18473:5:72"},"variableNames":[{"name":"result","nativeSrc":"18463:6:72","nodeType":"YulIdentifier","src":"18463:6:72"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16971,"isOffset":false,"isSlot":false,"src":"18463:6:72","valueSize":1},{"declaration":16959,"isOffset":false,"isSlot":false,"src":"18473:5:72","valueSize":1}],"flags":["memory-safe"],"id":16973,"nodeType":"InlineAssembly","src":"18424:64:72"},{"expression":{"id":16974,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16971,"src":"18505:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":16954,"id":16975,"nodeType":"Return","src":"18498:13:72"}]},"documentation":{"id":16942,"nodeType":"StructuredDocumentation","src":"17670:533:72","text":" @dev Return a slice of the set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16977,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"18217:6:72","nodeType":"FunctionDefinition","parameters":{"id":16950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16945,"mutability":"mutable","name":"set","nameLocation":"18240:3:72","nodeType":"VariableDeclaration","scope":16977,"src":"18224:19:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16944,"nodeType":"UserDefinedTypeName","pathNode":{"id":16943,"name":"UintSet","nameLocations":["18224:7:72"],"nodeType":"IdentifierPath","referencedDeclaration":16799,"src":"18224:7:72"},"referencedDeclaration":16799,"src":"18224:7:72","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16799_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"},{"constant":false,"id":16947,"mutability":"mutable","name":"start","nameLocation":"18253:5:72","nodeType":"VariableDeclaration","scope":16977,"src":"18245:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16946,"name":"uint256","nodeType":"ElementaryTypeName","src":"18245:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16949,"mutability":"mutable","name":"end","nameLocation":"18268:3:72","nodeType":"VariableDeclaration","scope":16977,"src":"18260:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16948,"name":"uint256","nodeType":"ElementaryTypeName","src":"18260:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18223:49:72"},"returnParameters":{"id":16954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16953,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16977,"src":"18296:16:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16951,"name":"uint256","nodeType":"ElementaryTypeName","src":"18296:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16952,"nodeType":"ArrayTypeName","src":"18296:9:72","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"18295:18:72"},"scope":17618,"src":"18208:310:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"EnumerableSet.StringSet","id":16985,"members":[{"constant":false,"id":16980,"mutability":"mutable","name":"_values","nameLocation":"18593:7:72","nodeType":"VariableDeclaration","scope":16985,"src":"18584:16:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":16978,"name":"string","nodeType":"ElementaryTypeName","src":"18584:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":16979,"nodeType":"ArrayTypeName","src":"18584:8:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":16984,"mutability":"mutable","name":"_positions","nameLocation":"18784:10:72","nodeType":"VariableDeclaration","scope":16985,"src":"18751:43:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string => uint256)"},"typeName":{"id":16983,"keyName":"value","keyNameLocation":"18766:5:72","keyType":{"id":16981,"name":"string","nodeType":"ElementaryTypeName","src":"18759:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"nodeType":"Mapping","src":"18751:32:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":16982,"name":"uint256","nodeType":"ElementaryTypeName","src":"18775:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"name":"StringSet","nameLocation":"18531:9:72","nodeType":"StructDefinition","scope":17618,"src":"18524:277:72","visibility":"public"},{"body":{"id":17026,"nodeType":"Block","src":"19052:336:72","statements":[{"condition":{"id":17000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"19066:21:72","subExpression":{"arguments":[{"id":16997,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16989,"src":"19076:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},{"id":16998,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16991,"src":"19081:5:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":16996,"name":"contains","nodeType":"Identifier","overloadedDeclarations":[16490,16687,16875,17173,17493],"referencedDeclaration":17173,"src":"19067:8:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_StringSet_$16985_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.StringSet storage pointer,string memory) view returns (bool)"}},"id":16999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19067:20:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17024,"nodeType":"Block","src":"19345:37:72","statements":[{"expression":{"hexValue":"66616c7365","id":17022,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19366:5:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":16995,"id":17023,"nodeType":"Return","src":"19359:12:72"}]},"id":17025,"nodeType":"IfStatement","src":"19062:320:72","trueBody":{"id":17021,"nodeType":"Block","src":"19089:250:72","statements":[{"expression":{"arguments":[{"id":17006,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16991,"src":"19120:5:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"expression":{"id":17001,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16989,"src":"19103:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17004,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19107:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"19103:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19115:4:72","memberName":"push","nodeType":"MemberAccess","src":"19103:16:72","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_string_storage_$dyn_storage_ptr_$_t_string_storage_$returns$__$attached_to$_t_array$_t_string_storage_$dyn_storage_ptr_$","typeString":"function (string storage ref[] storage pointer,string storage ref)"}},"id":17007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19103:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17008,"nodeType":"ExpressionStatement","src":"19103:23:72"},{"expression":{"id":17017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17009,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16989,"src":"19261:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17012,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19265:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16984,"src":"19261:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string memory => uint256)"}},"id":17013,"indexExpression":{"id":17011,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16991,"src":"19276:5:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"19261:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":17014,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16989,"src":"19285:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17015,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19289:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"19285:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19297:6:72","memberName":"length","nodeType":"MemberAccess","src":"19285:18:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19261:42:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17018,"nodeType":"ExpressionStatement","src":"19261:42:72"},{"expression":{"hexValue":"74727565","id":17019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19324:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":16995,"id":17020,"nodeType":"Return","src":"19317:11:72"}]}}]},"documentation":{"id":16986,"nodeType":"StructuredDocumentation","src":"18807:159:72","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":17027,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"18980:3:72","nodeType":"FunctionDefinition","parameters":{"id":16992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16989,"mutability":"mutable","name":"set","nameLocation":"19002:3:72","nodeType":"VariableDeclaration","scope":17027,"src":"18984:21:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":16988,"nodeType":"UserDefinedTypeName","pathNode":{"id":16987,"name":"StringSet","nameLocations":["18984:9:72"],"nodeType":"IdentifierPath","referencedDeclaration":16985,"src":"18984:9:72"},"referencedDeclaration":16985,"src":"18984:9:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"},{"constant":false,"id":16991,"mutability":"mutable","name":"value","nameLocation":"19021:5:72","nodeType":"VariableDeclaration","scope":17027,"src":"19007:19:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":16990,"name":"string","nodeType":"ElementaryTypeName","src":"19007:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"18983:44:72"},"returnParameters":{"id":16995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16994,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17027,"src":"19046:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16993,"name":"bool","nodeType":"ElementaryTypeName","src":"19046:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19045:6:72"},"scope":17618,"src":"18971:417:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17110,"nodeType":"Block","src":"19640:1302:72","statements":[{"assignments":[17039],"declarations":[{"constant":false,"id":17039,"mutability":"mutable","name":"position","nameLocation":"19752:8:72","nodeType":"VariableDeclaration","scope":17110,"src":"19744:16:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17038,"name":"uint256","nodeType":"ElementaryTypeName","src":"19744:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17044,"initialValue":{"baseExpression":{"expression":{"id":17040,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17031,"src":"19763:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17041,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19767:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16984,"src":"19763:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string memory => uint256)"}},"id":17043,"indexExpression":{"id":17042,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17033,"src":"19778:5:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19763:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19744:40:72"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17045,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17039,"src":"19799:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":17046,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19811:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"19799:13:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17108,"nodeType":"Block","src":"20899:37:72","statements":[{"expression":{"hexValue":"66616c7365","id":17106,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20920:5:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":17037,"id":17107,"nodeType":"Return","src":"20913:12:72"}]},"id":17109,"nodeType":"IfStatement","src":"19795:1141:72","trueBody":{"id":17105,"nodeType":"Block","src":"19814:1079:72","statements":[{"assignments":[17049],"declarations":[{"constant":false,"id":17049,"mutability":"mutable","name":"valueIndex","nameLocation":"20174:10:72","nodeType":"VariableDeclaration","scope":17105,"src":"20166:18:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17048,"name":"uint256","nodeType":"ElementaryTypeName","src":"20166:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17053,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17050,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17039,"src":"20187:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":17051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20198:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"20187:12:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20166:33:72"},{"assignments":[17055],"declarations":[{"constant":false,"id":17055,"mutability":"mutable","name":"lastIndex","nameLocation":"20221:9:72","nodeType":"VariableDeclaration","scope":17105,"src":"20213:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17054,"name":"uint256","nodeType":"ElementaryTypeName","src":"20213:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17061,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":17056,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17031,"src":"20233:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17057,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20237:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"20233:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20245:6:72","memberName":"length","nodeType":"MemberAccess","src":"20233:18:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":17059,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20254:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"20233:22:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20213:42:72"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17062,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17049,"src":"20274:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":17063,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17055,"src":"20288:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20274:23:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17089,"nodeType":"IfStatement","src":"20270:384:72","trueBody":{"id":17088,"nodeType":"Block","src":"20299:355:72","statements":[{"assignments":[17066],"declarations":[{"constant":false,"id":17066,"mutability":"mutable","name":"lastValue","nameLocation":"20331:9:72","nodeType":"VariableDeclaration","scope":17088,"src":"20317:23:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17065,"name":"string","nodeType":"ElementaryTypeName","src":"20317:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":17071,"initialValue":{"baseExpression":{"expression":{"id":17067,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17031,"src":"20343:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17068,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20347:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"20343:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17070,"indexExpression":{"id":17069,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17055,"src":"20355:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20343:22:72","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"VariableDeclarationStatement","src":"20317:48:72"},{"expression":{"id":17078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17072,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17031,"src":"20464:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17075,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20468:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"20464:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17076,"indexExpression":{"id":17074,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17049,"src":"20476:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20464:23:72","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17077,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17066,"src":"20490:9:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"20464:35:72","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":17079,"nodeType":"ExpressionStatement","src":"20464:35:72"},{"expression":{"id":17086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17080,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17031,"src":"20603:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17083,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20607:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16984,"src":"20603:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string memory => uint256)"}},"id":17084,"indexExpression":{"id":17082,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17066,"src":"20618:9:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20603:25:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17085,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17039,"src":"20631:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20603:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17087,"nodeType":"ExpressionStatement","src":"20603:36:72"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":17090,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17031,"src":"20732:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17093,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20736:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"20732:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20744:3:72","memberName":"pop","nodeType":"MemberAccess","src":"20732:15:72","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_string_storage_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_string_storage_$dyn_storage_ptr_$","typeString":"function (string storage ref[] storage pointer)"}},"id":17095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20732:17:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17096,"nodeType":"ExpressionStatement","src":"20732:17:72"},{"expression":{"id":17101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"20828:28:72","subExpression":{"baseExpression":{"expression":{"id":17097,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17031,"src":"20835:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17098,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20839:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16984,"src":"20835:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string memory => uint256)"}},"id":17100,"indexExpression":{"id":17099,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17033,"src":"20850:5:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20835:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17102,"nodeType":"ExpressionStatement","src":"20828:28:72"},{"expression":{"hexValue":"74727565","id":17103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20878:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":17037,"id":17104,"nodeType":"Return","src":"20871:11:72"}]}}]},"documentation":{"id":17028,"nodeType":"StructuredDocumentation","src":"19394:157:72","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":17111,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"19565:6:72","nodeType":"FunctionDefinition","parameters":{"id":17034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17031,"mutability":"mutable","name":"set","nameLocation":"19590:3:72","nodeType":"VariableDeclaration","scope":17111,"src":"19572:21:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17030,"nodeType":"UserDefinedTypeName","pathNode":{"id":17029,"name":"StringSet","nameLocations":["19572:9:72"],"nodeType":"IdentifierPath","referencedDeclaration":16985,"src":"19572:9:72"},"referencedDeclaration":16985,"src":"19572:9:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"},{"constant":false,"id":17033,"mutability":"mutable","name":"value","nameLocation":"19609:5:72","nodeType":"VariableDeclaration","scope":17111,"src":"19595:19:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17032,"name":"string","nodeType":"ElementaryTypeName","src":"19595:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"19571:44:72"},"returnParameters":{"id":17037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17036,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17111,"src":"19634:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17035,"name":"bool","nodeType":"ElementaryTypeName","src":"19634:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19633:6:72"},"scope":17618,"src":"19556:1386:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17153,"nodeType":"Block","src":"21303:195:72","statements":[{"assignments":[17119],"declarations":[{"constant":false,"id":17119,"mutability":"mutable","name":"len","nameLocation":"21321:3:72","nodeType":"VariableDeclaration","scope":17153,"src":"21313:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17118,"name":"uint256","nodeType":"ElementaryTypeName","src":"21313:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17123,"initialValue":{"arguments":[{"id":17121,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17115,"src":"21334:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}],"id":17120,"name":"length","nodeType":"Identifier","overloadedDeclarations":[16505,16702,16890,17187,17507],"referencedDeclaration":17187,"src":"21327:6:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_StringSet_$16985_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.StringSet storage pointer) view returns (uint256)"}},"id":17122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21327:11:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21313:25:72"},{"body":{"id":17143,"nodeType":"Block","src":"21382:62:72","statements":[{"expression":{"id":17141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"21396:37:72","subExpression":{"baseExpression":{"expression":{"id":17134,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17115,"src":"21403:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17135,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21407:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16984,"src":"21403:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string memory => uint256)"}},"id":17140,"indexExpression":{"baseExpression":{"expression":{"id":17136,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17115,"src":"21418:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17137,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21422:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"21418:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17139,"indexExpression":{"id":17138,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17125,"src":"21430:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21418:14:72","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21403:30:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17142,"nodeType":"ExpressionStatement","src":"21396:37:72"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17128,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17125,"src":"21368:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17129,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17119,"src":"21372:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21368:7:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17144,"initializationExpression":{"assignments":[17125],"declarations":[{"constant":false,"id":17125,"mutability":"mutable","name":"i","nameLocation":"21361:1:72","nodeType":"VariableDeclaration","scope":17144,"src":"21353:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17124,"name":"uint256","nodeType":"ElementaryTypeName","src":"21353:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17127,"initialValue":{"hexValue":"30","id":17126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21365:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"21353:13:72"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":17132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"21377:3:72","subExpression":{"id":17131,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17125,"src":"21379:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17133,"nodeType":"ExpressionStatement","src":"21377:3:72"},"nodeType":"ForStatement","src":"21348:96:72"},{"expression":{"arguments":[{"expression":{"id":17148,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17115,"src":"21476:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17149,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21480:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"21476:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},{"hexValue":"30","id":17150,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21489:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":17145,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12304,"src":"21453:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Arrays_$12304_$","typeString":"type(library Arrays)"}},"id":17147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21460:15:72","memberName":"unsafeSetLength","nodeType":"MemberAccess","referencedDeclaration":12303,"src":"21453:22:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_string_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$","typeString":"function (string storage ref[] storage pointer,uint256)"}},"id":17151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21453:38:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17152,"nodeType":"ExpressionStatement","src":"21453:38:72"}]},"documentation":{"id":17112,"nodeType":"StructuredDocumentation","src":"20948:303:72","text":" @dev Removes all the values from a set. O(n).\n WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block."},"id":17154,"implemented":true,"kind":"function","modifiers":[],"name":"clear","nameLocation":"21265:5:72","nodeType":"FunctionDefinition","parameters":{"id":17116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17115,"mutability":"mutable","name":"set","nameLocation":"21289:3:72","nodeType":"VariableDeclaration","scope":17154,"src":"21271:21:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17114,"nodeType":"UserDefinedTypeName","pathNode":{"id":17113,"name":"StringSet","nameLocations":["21271:9:72"],"nodeType":"IdentifierPath","referencedDeclaration":16985,"src":"21271:9:72"},"referencedDeclaration":16985,"src":"21271:9:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"}],"src":"21270:23:72"},"returnParameters":{"id":17117,"nodeType":"ParameterList","parameters":[],"src":"21303:0:72"},"scope":17618,"src":"21256:242:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17172,"nodeType":"Block","src":"21670:50:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":17165,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17158,"src":"21687:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17166,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21691:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16984,"src":"21687:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string memory => uint256)"}},"id":17168,"indexExpression":{"id":17167,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17160,"src":"21702:5:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21687:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":17169,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21712:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21687:26:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17164,"id":17171,"nodeType":"Return","src":"21680:33:72"}]},"documentation":{"id":17155,"nodeType":"StructuredDocumentation","src":"21504:70:72","text":" @dev Returns true if the value is in the set. O(1)."},"id":17173,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"21588:8:72","nodeType":"FunctionDefinition","parameters":{"id":17161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17158,"mutability":"mutable","name":"set","nameLocation":"21615:3:72","nodeType":"VariableDeclaration","scope":17173,"src":"21597:21:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17157,"nodeType":"UserDefinedTypeName","pathNode":{"id":17156,"name":"StringSet","nameLocations":["21597:9:72"],"nodeType":"IdentifierPath","referencedDeclaration":16985,"src":"21597:9:72"},"referencedDeclaration":16985,"src":"21597:9:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"},{"constant":false,"id":17160,"mutability":"mutable","name":"value","nameLocation":"21634:5:72","nodeType":"VariableDeclaration","scope":17173,"src":"21620:19:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17159,"name":"string","nodeType":"ElementaryTypeName","src":"21620:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"21596:44:72"},"returnParameters":{"id":17164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17163,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17173,"src":"21664:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17162,"name":"bool","nodeType":"ElementaryTypeName","src":"21664:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"21663:6:72"},"scope":17618,"src":"21579:141:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17186,"nodeType":"Block","src":"21872:42:72","statements":[{"expression":{"expression":{"expression":{"id":17182,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17177,"src":"21889:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17183,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21893:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"21889:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21901:6:72","memberName":"length","nodeType":"MemberAccess","src":"21889:18:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17181,"id":17185,"nodeType":"Return","src":"21882:25:72"}]},"documentation":{"id":17174,"nodeType":"StructuredDocumentation","src":"21726:70:72","text":" @dev Returns the number of values on the set. O(1)."},"id":17187,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"21810:6:72","nodeType":"FunctionDefinition","parameters":{"id":17178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17177,"mutability":"mutable","name":"set","nameLocation":"21835:3:72","nodeType":"VariableDeclaration","scope":17187,"src":"21817:21:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17176,"nodeType":"UserDefinedTypeName","pathNode":{"id":17175,"name":"StringSet","nameLocations":["21817:9:72"],"nodeType":"IdentifierPath","referencedDeclaration":16985,"src":"21817:9:72"},"referencedDeclaration":16985,"src":"21817:9:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"}],"src":"21816:23:72"},"returnParameters":{"id":17181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17180,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17187,"src":"21863:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17179,"name":"uint256","nodeType":"ElementaryTypeName","src":"21863:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21862:9:72"},"scope":17618,"src":"21801:113:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17203,"nodeType":"Block","src":"22344:42:72","statements":[{"expression":{"baseExpression":{"expression":{"id":17198,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17191,"src":"22361:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17199,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22365:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"22361:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17201,"indexExpression":{"id":17200,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17193,"src":"22373:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22361:18:72","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":17197,"id":17202,"nodeType":"Return","src":"22354:25:72"}]},"documentation":{"id":17188,"nodeType":"StructuredDocumentation","src":"21920:331:72","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":17204,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"22265:2:72","nodeType":"FunctionDefinition","parameters":{"id":17194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17191,"mutability":"mutable","name":"set","nameLocation":"22286:3:72","nodeType":"VariableDeclaration","scope":17204,"src":"22268:21:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17190,"nodeType":"UserDefinedTypeName","pathNode":{"id":17189,"name":"StringSet","nameLocations":["22268:9:72"],"nodeType":"IdentifierPath","referencedDeclaration":16985,"src":"22268:9:72"},"referencedDeclaration":16985,"src":"22268:9:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"},{"constant":false,"id":17193,"mutability":"mutable","name":"index","nameLocation":"22299:5:72","nodeType":"VariableDeclaration","scope":17204,"src":"22291:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17192,"name":"uint256","nodeType":"ElementaryTypeName","src":"22291:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22267:38:72"},"returnParameters":{"id":17197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17196,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17204,"src":"22329:13:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17195,"name":"string","nodeType":"ElementaryTypeName","src":"22329:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"22328:15:72"},"scope":17618,"src":"22256:130:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17217,"nodeType":"Block","src":"23005:35:72","statements":[{"expression":{"expression":{"id":17214,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17208,"src":"23022:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17215,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23026:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"23022:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"functionReturnParameters":17213,"id":17216,"nodeType":"Return","src":"23015:18:72"}]},"documentation":{"id":17205,"nodeType":"StructuredDocumentation","src":"22392:529:72","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":17218,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"22935:6:72","nodeType":"FunctionDefinition","parameters":{"id":17209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17208,"mutability":"mutable","name":"set","nameLocation":"22960:3:72","nodeType":"VariableDeclaration","scope":17218,"src":"22942:21:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17207,"nodeType":"UserDefinedTypeName","pathNode":{"id":17206,"name":"StringSet","nameLocations":["22942:9:72"],"nodeType":"IdentifierPath","referencedDeclaration":16985,"src":"22942:9:72"},"referencedDeclaration":16985,"src":"22942:9:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"}],"src":"22941:23:72"},"returnParameters":{"id":17213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17212,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17218,"src":"22988:15:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":17210,"name":"string","nodeType":"ElementaryTypeName","src":"22988:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":17211,"nodeType":"ArrayTypeName","src":"22988:8:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"}],"src":"22987:17:72"},"scope":17618,"src":"22926:114:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17296,"nodeType":"Block","src":"23691:389:72","statements":[{"id":17295,"nodeType":"UncheckedBlock","src":"23701:373:72","statements":[{"expression":{"id":17240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17232,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17226,"src":"23725:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17235,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17226,"src":"23740:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":17237,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17222,"src":"23752:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}],"id":17236,"name":"length","nodeType":"Identifier","overloadedDeclarations":[16505,16702,16890,17187,17507],"referencedDeclaration":17187,"src":"23745:6:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_StringSet_$16985_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.StringSet storage pointer) view returns (uint256)"}},"id":17238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23745:11:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17233,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"23731:4:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":17234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23736:3:72","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":13033,"src":"23731:8:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23731:26:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23725:32:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17241,"nodeType":"ExpressionStatement","src":"23725:32:72"},{"expression":{"id":17248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17242,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17224,"src":"23771:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17245,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17224,"src":"23788:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17246,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17226,"src":"23795:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17243,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"23779:4:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":17244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23784:3:72","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":13033,"src":"23779:8:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23779:20:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23771:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17249,"nodeType":"ExpressionStatement","src":"23771:28:72"},{"assignments":[17251],"declarations":[{"constant":false,"id":17251,"mutability":"mutable","name":"len","nameLocation":"23822:3:72","nodeType":"VariableDeclaration","scope":17295,"src":"23814:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17250,"name":"uint256","nodeType":"ElementaryTypeName","src":"23814:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17255,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17252,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17226,"src":"23828:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17253,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17224,"src":"23834:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23828:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23814:25:72"},{"assignments":[17260],"declarations":[{"constant":false,"id":17260,"mutability":"mutable","name":"result","nameLocation":"23869:6:72","nodeType":"VariableDeclaration","scope":17295,"src":"23853:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":17258,"name":"string","nodeType":"ElementaryTypeName","src":"23853:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":17259,"nodeType":"ArrayTypeName","src":"23853:8:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"}],"id":17266,"initialValue":{"arguments":[{"id":17264,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17251,"src":"23891:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17263,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"23878:12:72","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_string_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (string memory[] memory)"},"typeName":{"baseType":{"id":17261,"name":"string","nodeType":"ElementaryTypeName","src":"23882:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":17262,"nodeType":"ArrayTypeName","src":"23882:8:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}}},"id":17265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23878:17:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"23853:42:72"},{"body":{"id":17291,"nodeType":"Block","src":"23943:94:72","statements":[{"expression":{"id":17289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17277,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17260,"src":"23961:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"id":17279,"indexExpression":{"id":17278,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17268,"src":"23968:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23961:9:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"expression":{"id":17282,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17222,"src":"23993:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17283,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23997:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16980,"src":"23993:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17284,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17224,"src":"24006:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":17285,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17268,"src":"24014:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24006:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17280,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12304,"src":"23973:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Arrays_$12304_$","typeString":"type(library Arrays)"}},"id":17281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23980:12:72","memberName":"unsafeAccess","nodeType":"MemberAccess","referencedDeclaration":12183,"src":"23973:19:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_string_storage_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_StringSlot_$12591_storage_ptr_$","typeString":"function (string storage ref[] storage pointer,uint256) pure returns (struct StorageSlot.StringSlot storage pointer)"}},"id":17287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23973:43:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12591_storage_ptr","typeString":"struct StorageSlot.StringSlot storage pointer"}},"id":17288,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24017:5:72","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12590,"src":"23973:49:72","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"src":"23961:61:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":17290,"nodeType":"ExpressionStatement","src":"23961:61:72"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17271,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17268,"src":"23929:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17272,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17251,"src":"23933:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23929:7:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17292,"initializationExpression":{"assignments":[17268],"declarations":[{"constant":false,"id":17268,"mutability":"mutable","name":"i","nameLocation":"23922:1:72","nodeType":"VariableDeclaration","scope":17292,"src":"23914:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17267,"name":"uint256","nodeType":"ElementaryTypeName","src":"23914:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17270,"initialValue":{"hexValue":"30","id":17269,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23926:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"23914:13:72"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":17275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"23938:3:72","subExpression":{"id":17274,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17268,"src":"23940:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17276,"nodeType":"ExpressionStatement","src":"23938:3:72"},"nodeType":"ForStatement","src":"23909:128:72"},{"expression":{"id":17293,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17260,"src":"24057:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"functionReturnParameters":17231,"id":17294,"nodeType":"Return","src":"24050:13:72"}]}]},"documentation":{"id":17219,"nodeType":"StructuredDocumentation","src":"23046:533:72","text":" @dev Return a slice of the set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":17297,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"23593:6:72","nodeType":"FunctionDefinition","parameters":{"id":17227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17222,"mutability":"mutable","name":"set","nameLocation":"23618:3:72","nodeType":"VariableDeclaration","scope":17297,"src":"23600:21:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17221,"nodeType":"UserDefinedTypeName","pathNode":{"id":17220,"name":"StringSet","nameLocations":["23600:9:72"],"nodeType":"IdentifierPath","referencedDeclaration":16985,"src":"23600:9:72"},"referencedDeclaration":16985,"src":"23600:9:72","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16985_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"},{"constant":false,"id":17224,"mutability":"mutable","name":"start","nameLocation":"23631:5:72","nodeType":"VariableDeclaration","scope":17297,"src":"23623:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17223,"name":"uint256","nodeType":"ElementaryTypeName","src":"23623:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17226,"mutability":"mutable","name":"end","nameLocation":"23646:3:72","nodeType":"VariableDeclaration","scope":17297,"src":"23638:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17225,"name":"uint256","nodeType":"ElementaryTypeName","src":"23638:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23599:51:72"},"returnParameters":{"id":17231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17230,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17297,"src":"23674:15:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":17228,"name":"string","nodeType":"ElementaryTypeName","src":"23674:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":17229,"nodeType":"ArrayTypeName","src":"23674:8:72","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"}],"src":"23673:17:72"},"scope":17618,"src":"23584:496:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"EnumerableSet.BytesSet","id":17305,"members":[{"constant":false,"id":17300,"mutability":"mutable","name":"_values","nameLocation":"24153:7:72","nodeType":"VariableDeclaration","scope":17305,"src":"24145:15:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":17298,"name":"bytes","nodeType":"ElementaryTypeName","src":"24145:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":17299,"nodeType":"ArrayTypeName","src":"24145:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"},{"constant":false,"id":17304,"mutability":"mutable","name":"_positions","nameLocation":"24343:10:72","nodeType":"VariableDeclaration","scope":17305,"src":"24311:42:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes => uint256)"},"typeName":{"id":17303,"keyName":"value","keyNameLocation":"24325:5:72","keyType":{"id":17301,"name":"bytes","nodeType":"ElementaryTypeName","src":"24319:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"nodeType":"Mapping","src":"24311:31:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":17302,"name":"uint256","nodeType":"ElementaryTypeName","src":"24334:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"name":"BytesSet","nameLocation":"24093:8:72","nodeType":"StructDefinition","scope":17618,"src":"24086:274:72","visibility":"public"},{"body":{"id":17346,"nodeType":"Block","src":"24609:336:72","statements":[{"condition":{"id":17320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"24623:21:72","subExpression":{"arguments":[{"id":17317,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"24633:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},{"id":17318,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17311,"src":"24638:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":17316,"name":"contains","nodeType":"Identifier","overloadedDeclarations":[16490,16687,16875,17173,17493],"referencedDeclaration":17493,"src":"24624:8:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_BytesSet_$17305_storage_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.BytesSet storage pointer,bytes memory) view returns (bool)"}},"id":17319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24624:20:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17344,"nodeType":"Block","src":"24902:37:72","statements":[{"expression":{"hexValue":"66616c7365","id":17342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"24923:5:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":17315,"id":17343,"nodeType":"Return","src":"24916:12:72"}]},"id":17345,"nodeType":"IfStatement","src":"24619:320:72","trueBody":{"id":17341,"nodeType":"Block","src":"24646:250:72","statements":[{"expression":{"arguments":[{"id":17326,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17311,"src":"24677:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"expression":{"id":17321,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"24660:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17324,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24664:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"24660:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24672:4:72","memberName":"push","nodeType":"MemberAccess","src":"24660:16:72","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_bytes_storage_$dyn_storage_ptr_$_t_bytes_storage_$returns$__$attached_to$_t_array$_t_bytes_storage_$dyn_storage_ptr_$","typeString":"function (bytes storage ref[] storage pointer,bytes storage ref)"}},"id":17327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24660:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17328,"nodeType":"ExpressionStatement","src":"24660:23:72"},{"expression":{"id":17337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17329,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"24818:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17332,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24822:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":17304,"src":"24818:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes memory => uint256)"}},"id":17333,"indexExpression":{"id":17331,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17311,"src":"24833:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24818:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":17334,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17309,"src":"24842:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17335,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24846:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"24842:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24854:6:72","memberName":"length","nodeType":"MemberAccess","src":"24842:18:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24818:42:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17338,"nodeType":"ExpressionStatement","src":"24818:42:72"},{"expression":{"hexValue":"74727565","id":17339,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"24881:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":17315,"id":17340,"nodeType":"Return","src":"24874:11:72"}]}}]},"documentation":{"id":17306,"nodeType":"StructuredDocumentation","src":"24366:159:72","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":17347,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"24539:3:72","nodeType":"FunctionDefinition","parameters":{"id":17312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17309,"mutability":"mutable","name":"set","nameLocation":"24560:3:72","nodeType":"VariableDeclaration","scope":17347,"src":"24543:20:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17308,"nodeType":"UserDefinedTypeName","pathNode":{"id":17307,"name":"BytesSet","nameLocations":["24543:8:72"],"nodeType":"IdentifierPath","referencedDeclaration":17305,"src":"24543:8:72"},"referencedDeclaration":17305,"src":"24543:8:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"},{"constant":false,"id":17311,"mutability":"mutable","name":"value","nameLocation":"24578:5:72","nodeType":"VariableDeclaration","scope":17347,"src":"24565:18:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17310,"name":"bytes","nodeType":"ElementaryTypeName","src":"24565:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"24542:42:72"},"returnParameters":{"id":17315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17314,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17347,"src":"24603:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17313,"name":"bool","nodeType":"ElementaryTypeName","src":"24603:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"24602:6:72"},"scope":17618,"src":"24530:415:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17430,"nodeType":"Block","src":"25195:1301:72","statements":[{"assignments":[17359],"declarations":[{"constant":false,"id":17359,"mutability":"mutable","name":"position","nameLocation":"25307:8:72","nodeType":"VariableDeclaration","scope":17430,"src":"25299:16:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17358,"name":"uint256","nodeType":"ElementaryTypeName","src":"25299:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17364,"initialValue":{"baseExpression":{"expression":{"id":17360,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17351,"src":"25318:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17361,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25322:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":17304,"src":"25318:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes memory => uint256)"}},"id":17363,"indexExpression":{"id":17362,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17353,"src":"25333:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25318:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25299:40:72"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17365,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17359,"src":"25354:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":17366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25366:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"25354:13:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17428,"nodeType":"Block","src":"26453:37:72","statements":[{"expression":{"hexValue":"66616c7365","id":17426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26474:5:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":17357,"id":17427,"nodeType":"Return","src":"26467:12:72"}]},"id":17429,"nodeType":"IfStatement","src":"25350:1140:72","trueBody":{"id":17425,"nodeType":"Block","src":"25369:1078:72","statements":[{"assignments":[17369],"declarations":[{"constant":false,"id":17369,"mutability":"mutable","name":"valueIndex","nameLocation":"25729:10:72","nodeType":"VariableDeclaration","scope":17425,"src":"25721:18:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17368,"name":"uint256","nodeType":"ElementaryTypeName","src":"25721:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17373,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17370,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17359,"src":"25742:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":17371,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25753:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25742:12:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25721:33:72"},{"assignments":[17375],"declarations":[{"constant":false,"id":17375,"mutability":"mutable","name":"lastIndex","nameLocation":"25776:9:72","nodeType":"VariableDeclaration","scope":17425,"src":"25768:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17374,"name":"uint256","nodeType":"ElementaryTypeName","src":"25768:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17381,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":17376,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17351,"src":"25788:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17377,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25792:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"25788:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25800:6:72","memberName":"length","nodeType":"MemberAccess","src":"25788:18:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":17379,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25809:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25788:22:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25768:42:72"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17382,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17369,"src":"25829:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":17383,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17375,"src":"25843:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25829:23:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17409,"nodeType":"IfStatement","src":"25825:383:72","trueBody":{"id":17408,"nodeType":"Block","src":"25854:354:72","statements":[{"assignments":[17386],"declarations":[{"constant":false,"id":17386,"mutability":"mutable","name":"lastValue","nameLocation":"25885:9:72","nodeType":"VariableDeclaration","scope":17408,"src":"25872:22:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17385,"name":"bytes","nodeType":"ElementaryTypeName","src":"25872:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":17391,"initialValue":{"baseExpression":{"expression":{"id":17387,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17351,"src":"25897:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17388,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25901:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"25897:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17390,"indexExpression":{"id":17389,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17375,"src":"25909:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25897:22:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"nodeType":"VariableDeclarationStatement","src":"25872:47:72"},{"expression":{"id":17398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17392,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17351,"src":"26018:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17395,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26022:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"26018:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17396,"indexExpression":{"id":17394,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17369,"src":"26030:10:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26018:23:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17397,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17386,"src":"26044:9:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"26018:35:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"id":17399,"nodeType":"ExpressionStatement","src":"26018:35:72"},{"expression":{"id":17406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17400,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17351,"src":"26157:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17403,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26161:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":17304,"src":"26157:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes memory => uint256)"}},"id":17404,"indexExpression":{"id":17402,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17386,"src":"26172:9:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26157:25:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17405,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17359,"src":"26185:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26157:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17407,"nodeType":"ExpressionStatement","src":"26157:36:72"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":17410,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17351,"src":"26286:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17413,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26290:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"26286:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26298:3:72","memberName":"pop","nodeType":"MemberAccess","src":"26286:15:72","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_bytes_storage_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_bytes_storage_$dyn_storage_ptr_$","typeString":"function (bytes storage ref[] storage pointer)"}},"id":17415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26286:17:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17416,"nodeType":"ExpressionStatement","src":"26286:17:72"},{"expression":{"id":17421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"26382:28:72","subExpression":{"baseExpression":{"expression":{"id":17417,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17351,"src":"26389:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17418,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26393:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":17304,"src":"26389:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes memory => uint256)"}},"id":17420,"indexExpression":{"id":17419,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17353,"src":"26404:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26389:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17422,"nodeType":"ExpressionStatement","src":"26382:28:72"},{"expression":{"hexValue":"74727565","id":17423,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26432:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":17357,"id":17424,"nodeType":"Return","src":"26425:11:72"}]}}]},"documentation":{"id":17348,"nodeType":"StructuredDocumentation","src":"24951:157:72","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":17431,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"25122:6:72","nodeType":"FunctionDefinition","parameters":{"id":17354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17351,"mutability":"mutable","name":"set","nameLocation":"25146:3:72","nodeType":"VariableDeclaration","scope":17431,"src":"25129:20:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17350,"nodeType":"UserDefinedTypeName","pathNode":{"id":17349,"name":"BytesSet","nameLocations":["25129:8:72"],"nodeType":"IdentifierPath","referencedDeclaration":17305,"src":"25129:8:72"},"referencedDeclaration":17305,"src":"25129:8:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"},{"constant":false,"id":17353,"mutability":"mutable","name":"value","nameLocation":"25164:5:72","nodeType":"VariableDeclaration","scope":17431,"src":"25151:18:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17352,"name":"bytes","nodeType":"ElementaryTypeName","src":"25151:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"25128:42:72"},"returnParameters":{"id":17357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17356,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17431,"src":"25189:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17355,"name":"bool","nodeType":"ElementaryTypeName","src":"25189:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"25188:6:72"},"scope":17618,"src":"25113:1383:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17473,"nodeType":"Block","src":"26856:195:72","statements":[{"assignments":[17439],"declarations":[{"constant":false,"id":17439,"mutability":"mutable","name":"len","nameLocation":"26874:3:72","nodeType":"VariableDeclaration","scope":17473,"src":"26866:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17438,"name":"uint256","nodeType":"ElementaryTypeName","src":"26866:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17443,"initialValue":{"arguments":[{"id":17441,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17435,"src":"26887:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}],"id":17440,"name":"length","nodeType":"Identifier","overloadedDeclarations":[16505,16702,16890,17187,17507],"referencedDeclaration":17507,"src":"26880:6:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_BytesSet_$17305_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.BytesSet storage pointer) view returns (uint256)"}},"id":17442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26880:11:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"26866:25:72"},{"body":{"id":17463,"nodeType":"Block","src":"26935:62:72","statements":[{"expression":{"id":17461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"26949:37:72","subExpression":{"baseExpression":{"expression":{"id":17454,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17435,"src":"26956:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17455,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26960:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":17304,"src":"26956:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes memory => uint256)"}},"id":17460,"indexExpression":{"baseExpression":{"expression":{"id":17456,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17435,"src":"26971:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17457,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26975:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"26971:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17459,"indexExpression":{"id":17458,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17445,"src":"26983:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26971:14:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26956:30:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17462,"nodeType":"ExpressionStatement","src":"26949:37:72"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17448,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17445,"src":"26921:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17449,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17439,"src":"26925:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26921:7:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17464,"initializationExpression":{"assignments":[17445],"declarations":[{"constant":false,"id":17445,"mutability":"mutable","name":"i","nameLocation":"26914:1:72","nodeType":"VariableDeclaration","scope":17464,"src":"26906:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17444,"name":"uint256","nodeType":"ElementaryTypeName","src":"26906:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17447,"initialValue":{"hexValue":"30","id":17446,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26918:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"26906:13:72"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":17452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"26930:3:72","subExpression":{"id":17451,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17445,"src":"26932:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17453,"nodeType":"ExpressionStatement","src":"26930:3:72"},"nodeType":"ForStatement","src":"26901:96:72"},{"expression":{"arguments":[{"expression":{"id":17468,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17435,"src":"27029:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17469,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27033:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"27029:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},{"hexValue":"30","id":17470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27042:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":17465,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12304,"src":"27006:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Arrays_$12304_$","typeString":"type(library Arrays)"}},"id":17467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27013:15:72","memberName":"unsafeSetLength","nodeType":"MemberAccess","referencedDeclaration":12292,"src":"27006:22:72","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_bytes_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$","typeString":"function (bytes storage ref[] storage pointer,uint256)"}},"id":17471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27006:38:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17472,"nodeType":"ExpressionStatement","src":"27006:38:72"}]},"documentation":{"id":17432,"nodeType":"StructuredDocumentation","src":"26502:303:72","text":" @dev Removes all the values from a set. O(n).\n WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block."},"id":17474,"implemented":true,"kind":"function","modifiers":[],"name":"clear","nameLocation":"26819:5:72","nodeType":"FunctionDefinition","parameters":{"id":17436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17435,"mutability":"mutable","name":"set","nameLocation":"26842:3:72","nodeType":"VariableDeclaration","scope":17474,"src":"26825:20:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17434,"nodeType":"UserDefinedTypeName","pathNode":{"id":17433,"name":"BytesSet","nameLocations":["26825:8:72"],"nodeType":"IdentifierPath","referencedDeclaration":17305,"src":"26825:8:72"},"referencedDeclaration":17305,"src":"26825:8:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"}],"src":"26824:22:72"},"returnParameters":{"id":17437,"nodeType":"ParameterList","parameters":[],"src":"26856:0:72"},"scope":17618,"src":"26810:241:72","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17492,"nodeType":"Block","src":"27221:50:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":17485,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17478,"src":"27238:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17486,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27242:10:72","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":17304,"src":"27238:14:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes memory => uint256)"}},"id":17488,"indexExpression":{"id":17487,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17480,"src":"27253:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27238:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":17489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27263:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"27238:26:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17484,"id":17491,"nodeType":"Return","src":"27231:33:72"}]},"documentation":{"id":17475,"nodeType":"StructuredDocumentation","src":"27057:70:72","text":" @dev Returns true if the value is in the set. O(1)."},"id":17493,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"27141:8:72","nodeType":"FunctionDefinition","parameters":{"id":17481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17478,"mutability":"mutable","name":"set","nameLocation":"27167:3:72","nodeType":"VariableDeclaration","scope":17493,"src":"27150:20:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17477,"nodeType":"UserDefinedTypeName","pathNode":{"id":17476,"name":"BytesSet","nameLocations":["27150:8:72"],"nodeType":"IdentifierPath","referencedDeclaration":17305,"src":"27150:8:72"},"referencedDeclaration":17305,"src":"27150:8:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"},{"constant":false,"id":17480,"mutability":"mutable","name":"value","nameLocation":"27185:5:72","nodeType":"VariableDeclaration","scope":17493,"src":"27172:18:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17479,"name":"bytes","nodeType":"ElementaryTypeName","src":"27172:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"27149:42:72"},"returnParameters":{"id":17484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17483,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17493,"src":"27215:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17482,"name":"bool","nodeType":"ElementaryTypeName","src":"27215:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"27214:6:72"},"scope":17618,"src":"27132:139:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17506,"nodeType":"Block","src":"27422:42:72","statements":[{"expression":{"expression":{"expression":{"id":17502,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17497,"src":"27439:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17503,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27443:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"27439:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27451:6:72","memberName":"length","nodeType":"MemberAccess","src":"27439:18:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17501,"id":17505,"nodeType":"Return","src":"27432:25:72"}]},"documentation":{"id":17494,"nodeType":"StructuredDocumentation","src":"27277:70:72","text":" @dev Returns the number of values on the set. O(1)."},"id":17507,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"27361:6:72","nodeType":"FunctionDefinition","parameters":{"id":17498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17497,"mutability":"mutable","name":"set","nameLocation":"27385:3:72","nodeType":"VariableDeclaration","scope":17507,"src":"27368:20:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17496,"nodeType":"UserDefinedTypeName","pathNode":{"id":17495,"name":"BytesSet","nameLocations":["27368:8:72"],"nodeType":"IdentifierPath","referencedDeclaration":17305,"src":"27368:8:72"},"referencedDeclaration":17305,"src":"27368:8:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"}],"src":"27367:22:72"},"returnParameters":{"id":17501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17500,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17507,"src":"27413:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17499,"name":"uint256","nodeType":"ElementaryTypeName","src":"27413:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27412:9:72"},"scope":17618,"src":"27352:112:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17523,"nodeType":"Block","src":"27892:42:72","statements":[{"expression":{"baseExpression":{"expression":{"id":17518,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17511,"src":"27909:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17519,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27913:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"27909:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17521,"indexExpression":{"id":17520,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17513,"src":"27921:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27909:18:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"functionReturnParameters":17517,"id":17522,"nodeType":"Return","src":"27902:25:72"}]},"documentation":{"id":17508,"nodeType":"StructuredDocumentation","src":"27470:331:72","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":17524,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"27815:2:72","nodeType":"FunctionDefinition","parameters":{"id":17514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17511,"mutability":"mutable","name":"set","nameLocation":"27835:3:72","nodeType":"VariableDeclaration","scope":17524,"src":"27818:20:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17510,"nodeType":"UserDefinedTypeName","pathNode":{"id":17509,"name":"BytesSet","nameLocations":["27818:8:72"],"nodeType":"IdentifierPath","referencedDeclaration":17305,"src":"27818:8:72"},"referencedDeclaration":17305,"src":"27818:8:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"},{"constant":false,"id":17513,"mutability":"mutable","name":"index","nameLocation":"27848:5:72","nodeType":"VariableDeclaration","scope":17524,"src":"27840:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17512,"name":"uint256","nodeType":"ElementaryTypeName","src":"27840:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27817:37:72"},"returnParameters":{"id":17517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17516,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17524,"src":"27878:12:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17515,"name":"bytes","nodeType":"ElementaryTypeName","src":"27878:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"27877:14:72"},"scope":17618,"src":"27806:128:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17537,"nodeType":"Block","src":"28551:35:72","statements":[{"expression":{"expression":{"id":17534,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17528,"src":"28568:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17535,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28572:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"28568:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"functionReturnParameters":17533,"id":17536,"nodeType":"Return","src":"28561:18:72"}]},"documentation":{"id":17525,"nodeType":"StructuredDocumentation","src":"27940:529:72","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":17538,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"28483:6:72","nodeType":"FunctionDefinition","parameters":{"id":17529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17528,"mutability":"mutable","name":"set","nameLocation":"28507:3:72","nodeType":"VariableDeclaration","scope":17538,"src":"28490:20:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17527,"nodeType":"UserDefinedTypeName","pathNode":{"id":17526,"name":"BytesSet","nameLocations":["28490:8:72"],"nodeType":"IdentifierPath","referencedDeclaration":17305,"src":"28490:8:72"},"referencedDeclaration":17305,"src":"28490:8:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"}],"src":"28489:22:72"},"returnParameters":{"id":17533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17532,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17538,"src":"28535:14:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":17530,"name":"bytes","nodeType":"ElementaryTypeName","src":"28535:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":17531,"nodeType":"ArrayTypeName","src":"28535:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"28534:16:72"},"scope":17618,"src":"28474:112:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17616,"nodeType":"Block","src":"29235:387:72","statements":[{"id":17615,"nodeType":"UncheckedBlock","src":"29245:371:72","statements":[{"expression":{"id":17560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17552,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17546,"src":"29269:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17555,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17546,"src":"29284:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":17557,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17542,"src":"29296:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}],"id":17556,"name":"length","nodeType":"Identifier","overloadedDeclarations":[16505,16702,16890,17187,17507],"referencedDeclaration":17507,"src":"29289:6:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_BytesSet_$17305_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.BytesSet storage pointer) view returns (uint256)"}},"id":17558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29289:11:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17553,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"29275:4:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":17554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29280:3:72","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":13033,"src":"29275:8:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29275:26:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29269:32:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17561,"nodeType":"ExpressionStatement","src":"29269:32:72"},{"expression":{"id":17568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17562,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17544,"src":"29315:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17565,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17544,"src":"29332:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17566,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17546,"src":"29339:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17563,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14327,"src":"29323:4:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14327_$","typeString":"type(library Math)"}},"id":17564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29328:3:72","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":13033,"src":"29323:8:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29323:20:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29315:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17569,"nodeType":"ExpressionStatement","src":"29315:28:72"},{"assignments":[17571],"declarations":[{"constant":false,"id":17571,"mutability":"mutable","name":"len","nameLocation":"29366:3:72","nodeType":"VariableDeclaration","scope":17615,"src":"29358:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17570,"name":"uint256","nodeType":"ElementaryTypeName","src":"29358:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17575,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17572,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17546,"src":"29372:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17573,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17544,"src":"29378:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29372:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29358:25:72"},{"assignments":[17580],"declarations":[{"constant":false,"id":17580,"mutability":"mutable","name":"result","nameLocation":"29412:6:72","nodeType":"VariableDeclaration","scope":17615,"src":"29397:21:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":17578,"name":"bytes","nodeType":"ElementaryTypeName","src":"29397:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":17579,"nodeType":"ArrayTypeName","src":"29397:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"id":17586,"initialValue":{"arguments":[{"id":17584,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17571,"src":"29433:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17583,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"29421:11:72","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory[] memory)"},"typeName":{"baseType":{"id":17581,"name":"bytes","nodeType":"ElementaryTypeName","src":"29425:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":17582,"nodeType":"ArrayTypeName","src":"29425:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}}},"id":17585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29421:16:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"29397:40:72"},{"body":{"id":17611,"nodeType":"Block","src":"29485:94:72","statements":[{"expression":{"id":17609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17597,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17580,"src":"29503:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"id":17599,"indexExpression":{"id":17598,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17588,"src":"29510:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"29503:9:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"expression":{"id":17602,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17542,"src":"29535:3:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17603,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29539:7:72","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17300,"src":"29535:11:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17604,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17544,"src":"29548:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":17605,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17588,"src":"29556:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29548:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17600,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12304,"src":"29515:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Arrays_$12304_$","typeString":"type(library Arrays)"}},"id":17601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29522:12:72","memberName":"unsafeAccess","nodeType":"MemberAccess","referencedDeclaration":12157,"src":"29515:19:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_bytes_storage_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_BytesSlot_$12594_storage_ptr_$","typeString":"function (bytes storage ref[] storage pointer,uint256) pure returns (struct StorageSlot.BytesSlot storage pointer)"}},"id":17607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29515:43:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12594_storage_ptr","typeString":"struct StorageSlot.BytesSlot storage pointer"}},"id":17608,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29559:5:72","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12593,"src":"29515:49:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"src":"29503:61:72","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":17610,"nodeType":"ExpressionStatement","src":"29503:61:72"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17591,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17588,"src":"29471:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17592,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17571,"src":"29475:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29471:7:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17612,"initializationExpression":{"assignments":[17588],"declarations":[{"constant":false,"id":17588,"mutability":"mutable","name":"i","nameLocation":"29464:1:72","nodeType":"VariableDeclaration","scope":17612,"src":"29456:9:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17587,"name":"uint256","nodeType":"ElementaryTypeName","src":"29456:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17590,"initialValue":{"hexValue":"30","id":17589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29468:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"29456:13:72"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":17595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"29480:3:72","subExpression":{"id":17594,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17588,"src":"29482:1:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17596,"nodeType":"ExpressionStatement","src":"29480:3:72"},"nodeType":"ForStatement","src":"29451:128:72"},{"expression":{"id":17613,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17580,"src":"29599:6:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"functionReturnParameters":17551,"id":17614,"nodeType":"Return","src":"29592:13:72"}]}]},"documentation":{"id":17539,"nodeType":"StructuredDocumentation","src":"28592:533:72","text":" @dev Return a slice of the set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":17617,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"29139:6:72","nodeType":"FunctionDefinition","parameters":{"id":17547,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17542,"mutability":"mutable","name":"set","nameLocation":"29163:3:72","nodeType":"VariableDeclaration","scope":17617,"src":"29146:20:72","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17541,"nodeType":"UserDefinedTypeName","pathNode":{"id":17540,"name":"BytesSet","nameLocations":["29146:8:72"],"nodeType":"IdentifierPath","referencedDeclaration":17305,"src":"29146:8:72"},"referencedDeclaration":17305,"src":"29146:8:72","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17305_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"},{"constant":false,"id":17544,"mutability":"mutable","name":"start","nameLocation":"29176:5:72","nodeType":"VariableDeclaration","scope":17617,"src":"29168:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17543,"name":"uint256","nodeType":"ElementaryTypeName","src":"29168:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17546,"mutability":"mutable","name":"end","nameLocation":"29191:3:72","nodeType":"VariableDeclaration","scope":17617,"src":"29183:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17545,"name":"uint256","nodeType":"ElementaryTypeName","src":"29183:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29145:50:72"},"returnParameters":{"id":17551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17550,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17617,"src":"29219:14:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":17548,"name":"bytes","nodeType":"ElementaryTypeName","src":"29219:5:72","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":17549,"nodeType":"ArrayTypeName","src":"29219:7:72","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"29218:16:72"},"scope":17618,"src":"29130:492:72","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":17619,"src":"1586:28038:72","usedErrors":[],"usedEvents":[]}],"src":"205:29420:72"},"id":72},"contracts/BalancerContractRegistry.sol":{"ast":{"absolutePath":"contracts/BalancerContractRegistry.sol","exportedSymbols":{"BalancerContractRegistry":[18179],"ContractType":[43],"IBalancerContractRegistry":[212],"IVault":[2545],"SingletonAuthentication":[9289]},"id":18180,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":17620,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:73"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","id":17623,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18180,"sourceUnit":213,"src":"72:152:73","symbolAliases":[{"foreign":{"id":17621,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":212,"src":"85:25:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":17622,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43,"src":"116:12:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":17625,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18180,"sourceUnit":2546,"src":"225:81:73","symbolAliases":[{"foreign":{"id":17624,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"234:6:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":17627,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18180,"sourceUnit":9290,"src":"308:104:73","symbolAliases":[{"foreign":{"id":17626,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9289,"src":"317:23:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":17629,"name":"IBalancerContractRegistry","nameLocations":["2778:25:73"],"nodeType":"IdentifierPath","referencedDeclaration":212,"src":"2778:25:73"},"id":17630,"nodeType":"InheritanceSpecifier","src":"2778:25:73"},{"baseName":{"id":17631,"name":"SingletonAuthentication","nameLocations":["2805:23:73"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"2805:23:73"},"id":17632,"nodeType":"InheritanceSpecifier","src":"2805:23:73"}],"canonicalName":"BalancerContractRegistry","contractDependencies":[],"contractKind":"contract","documentation":{"id":17628,"nodeType":"StructuredDocumentation","src":"414:2326:73","text":" @notice On-chain registry of standard Balancer contracts.\n @dev Maintain a registry of official Balancer Factories, Routers, Hooks, and valid ERC4626 tokens, for two main\n purposes. The first is to support the many instances where we need to know that a contract is \"trusted\" (i.e.,\n is safe and behaves in the required manner). For instance, some hooks depend critically on the identity of the\n msg.sender, which must be passed down through the Router. Since Routers are permissionless, a malicious one could\n spoof the sender and \"fool\" the hook. The hook must therefore \"trust\" the Router.\n It is also important for the front-end to know when a particular wrapped token should be used with buffers. Not all\n \"ERC4626\" wrapped tokens are fully conforming, and buffer operations with non-conforming tokens may fail in various\n unexpected ways. It is not enough to simply check whether a buffer exists (e.g., by calling `getBufferAsset`),\n since best practice is for the pool creator to initialize buffers for all such tokens regardless. They are\n permissionless, and could otherwise be initialized by anyone in unexpected ways. This registry could be used to\n keep track of \"known good\" buffers, such that `isActiveBalancerContract(ContractType.ERC4626,
)` returns\n true for fully-compliant tokens with properly initialized buffers.\n Current solutions involve passing in the address of the trusted Router on deployment: but what if it needs to\n support multiple Routers? Or if the Router is deprecated and replaced? Instead, we can pass the registry address,\n and query this contract to determine whether the Router is a \"trusted\" one.\n The second use case is for off-chain queries, or other protocols that need to easily determine, say, the \"latest\"\n Weighted Pool Factory. This contract provides `isActiveBalancerContract(type, address)` for the first case, and\n `getBalancerContract(type, name)` for the second. It is also possible to query all known information about an\n address, using `getBalancerContractInfo(address)`, which returns a struct with the detailed state.\n Note that the `SingletonAuthentication` base contract provides `getVault`, so it is also possible to ask this\n contract for the Vault address, so it doesn't need to be a type."},"fullyImplemented":true,"id":18179,"linearizedBaseContracts":[18179,9289,7535,4385,14,212],"name":"BalancerContractRegistry","nameLocation":"2750:24:73","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":17636,"mutability":"mutable","name":"_contractRegistry","nameLocation":"3006:17:73","nodeType":"VariableDeclaration","scope":18179,"src":"2954:69:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"typeName":{"id":17635,"keyName":"contractId","keyNameLocation":"2970:10:73","keyType":{"id":17633,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2962:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"2954:43:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"valueName":"addr","valueNameLocation":"2992:4:73","valueType":{"id":17634,"name":"address","nodeType":"ElementaryTypeName","src":"2984:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"constant":false,"id":17641,"mutability":"mutable","name":"_contractInfo","nameLocation":"3891:13:73","nodeType":"VariableDeclaration","scope":18179,"src":"3840:64:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo)"},"typeName":{"id":17640,"keyName":"addr","keyNameLocation":"3856:4:73","keyType":{"id":17637,"name":"address","nodeType":"ElementaryTypeName","src":"3848:7:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3840:42:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo)"},"valueName":"info","valueNameLocation":"3877:4:73","valueType":{"id":17639,"nodeType":"UserDefinedTypeName","pathNode":{"id":17638,"name":"ContractInfo","nameLocations":["3864:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"3864:12:73"},"referencedDeclaration":52,"src":"3864:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}}},"visibility":"private"},{"constant":false,"id":17645,"mutability":"mutable","name":"_contractAliases","nameLocation":"4259:16:73","nodeType":"VariableDeclaration","scope":18179,"src":"4202:73:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"typeName":{"id":17644,"keyName":"contractAliasId","keyNameLocation":"4218:15:73","keyType":{"id":17642,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4210:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"4202:48:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"valueName":"addr","valueNameLocation":"4245:4:73","valueType":{"id":17643,"name":"address","nodeType":"ElementaryTypeName","src":"4237:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"documentation":{"id":17646,"nodeType":"StructuredDocumentation","src":"4282:306:73","text":" @notice A `_contractRegistry` entry has no corresponding `_contractInfo`.\n @dev This should never happen.\n @param contractName The name of the contract that has a registry entry but no contract info\n @param contractAddress The address of the contract with missing state"},"errorSelector":"36a7ac0a","id":17652,"name":"InconsistentState","nameLocation":"4599:17:73","nodeType":"ErrorDefinition","parameters":{"id":17651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17648,"mutability":"mutable","name":"contractName","nameLocation":"4624:12:73","nodeType":"VariableDeclaration","scope":17652,"src":"4617:19:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17647,"name":"string","nodeType":"ElementaryTypeName","src":"4617:6:73","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":17650,"mutability":"mutable","name":"contractAddress","nameLocation":"4646:15:73","nodeType":"VariableDeclaration","scope":17652,"src":"4638:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17649,"name":"address","nodeType":"ElementaryTypeName","src":"4638:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4616:46:73"},"src":"4593:70:73"},{"body":{"id":17661,"nodeType":"Block","src":"4726:64:73","statements":[]},"id":17662,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":17658,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17655,"src":"4719:5:73","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"id":17659,"kind":"baseConstructorSpecifier","modifierName":{"id":17657,"name":"SingletonAuthentication","nameLocations":["4695:23:73"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"4695:23:73"},"nodeType":"ModifierInvocation","src":"4695:30:73"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":17656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17655,"mutability":"mutable","name":"vault","nameLocation":"4688:5:73","nodeType":"VariableDeclaration","scope":17662,"src":"4681:12:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":17654,"nodeType":"UserDefinedTypeName","pathNode":{"id":17653,"name":"IVault","nameLocations":["4681:6:73"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"4681:6:73"},"referencedDeclaration":2545,"src":"4681:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"}],"src":"4680:14:73"},"returnParameters":{"id":17660,"nodeType":"ParameterList","parameters":[],"src":"4726:0:73"},"scope":18179,"src":"4669:121:73","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[150],"body":{"id":17788,"nodeType":"Block","src":"7250:1696:73","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17675,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17670,"src":"7303:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":17678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7330:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17677,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7322:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17676,"name":"address","nodeType":"ElementaryTypeName","src":"7322:7:73","typeDescriptions":{}}},"id":17679,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7322:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7303:29:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17685,"nodeType":"IfStatement","src":"7299:88:73","trueBody":{"id":17684,"nodeType":"Block","src":"7334:53:73","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17681,"name":"ZeroContractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133,"src":"7355:19:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7355:21:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17683,"nodeType":"RevertStatement","src":"7348:28:73"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":17688,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17668,"src":"7407:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17687,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7401:5:73","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":17686,"name":"bytes","nodeType":"ElementaryTypeName","src":"7401:5:73","typeDescriptions":{}}},"id":17689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7401:19:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":17690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7421:6:73","memberName":"length","nodeType":"MemberAccess","src":"7401:26:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7431:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7401:31:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17697,"nodeType":"IfStatement","src":"7397:90:73","trueBody":{"id":17696,"nodeType":"Block","src":"7434:53:73","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17693,"name":"InvalidContractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":136,"src":"7455:19:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7455:21:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17695,"nodeType":"RevertStatement","src":"7448:28:73"}]}},{"assignments":[17700],"declarations":[{"constant":false,"id":17700,"mutability":"mutable","name":"info","nameLocation":"7565:4:73","nodeType":"VariableDeclaration","scope":17788,"src":"7545:24:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":17699,"nodeType":"UserDefinedTypeName","pathNode":{"id":17698,"name":"ContractInfo","nameLocations":["7545:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"7545:12:73"},"referencedDeclaration":52,"src":"7545:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":17704,"initialValue":{"baseExpression":{"id":17701,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"7572:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17703,"indexExpression":{"id":17702,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17670,"src":"7586:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7572:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7545:57:73"},{"condition":{"expression":{"id":17705,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17700,"src":"7616:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17706,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7621:12:73","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":49,"src":"7616:17:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17714,"nodeType":"IfStatement","src":"7612:123:73","trueBody":{"id":17713,"nodeType":"Block","src":"7635:100:73","statements":[{"errorCall":{"arguments":[{"expression":{"id":17708,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17700,"src":"7689:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17709,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7694:12:73","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":47,"src":"7689:17:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":17710,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17670,"src":"7708:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17707,"name":"ContractAddressAlreadyRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":92,"src":"7656:32:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_ContractType_$43_$_t_address_$returns$_t_error_$","typeString":"function (enum ContractType,address) pure returns (error)"}},"id":17711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7656:68:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17712,"nodeType":"RevertStatement","src":"7649:75:73"}]}},{"assignments":[17716],"declarations":[{"constant":false,"id":17716,"mutability":"mutable","name":"contractId","nameLocation":"7828:10:73","nodeType":"VariableDeclaration","scope":17788,"src":"7820:18:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17715,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7820:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":17720,"initialValue":{"arguments":[{"id":17718,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17668,"src":"7856:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17717,"name":"_getContractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18178,"src":"7841:14:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":17719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7841:28:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"7820:49:73"},{"assignments":[17722],"declarations":[{"constant":false,"id":17722,"mutability":"mutable","name":"existingRegistryAddress","nameLocation":"7887:23:73","nodeType":"VariableDeclaration","scope":17788,"src":"7879:31:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17721,"name":"address","nodeType":"ElementaryTypeName","src":"7879:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17726,"initialValue":{"baseExpression":{"id":17723,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17636,"src":"7913:17:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":17725,"indexExpression":{"id":17724,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17716,"src":"7931:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7913:29:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"7879:63:73"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17727,"name":"existingRegistryAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17722,"src":"7956:23:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":17730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7991:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17729,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7983:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17728,"name":"address","nodeType":"ElementaryTypeName","src":"7983:7:73","typeDescriptions":{}}},"id":17731,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7983:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7956:37:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17746,"nodeType":"IfStatement","src":"7952:197:73","trueBody":{"id":17745,"nodeType":"Block","src":"7995:154:73","statements":[{"expression":{"id":17737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17733,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17700,"src":"8009:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":17734,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"8016:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17736,"indexExpression":{"id":17735,"name":"existingRegistryAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17722,"src":"8030:23:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8016:38:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"src":"8009:45:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17738,"nodeType":"ExpressionStatement","src":"8009:45:73"},{"errorCall":{"arguments":[{"expression":{"id":17740,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17700,"src":"8106:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17741,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8111:12:73","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":47,"src":"8106:17:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":17742,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17668,"src":"8125:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17739,"name":"ContractNameAlreadyRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100,"src":"8076:29:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_ContractType_$43_$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (enum ContractType,string memory) pure returns (error)"}},"id":17743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8076:62:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17744,"nodeType":"RevertStatement","src":"8069:69:73"}]}},{"assignments":[17748],"declarations":[{"constant":false,"id":17748,"mutability":"mutable","name":"existingAliasAddress","nameLocation":"8222:20:73","nodeType":"VariableDeclaration","scope":17788,"src":"8214:28:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17747,"name":"address","nodeType":"ElementaryTypeName","src":"8214:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17752,"initialValue":{"baseExpression":{"id":17749,"name":"_contractAliases","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17645,"src":"8245:16:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":17751,"indexExpression":{"id":17750,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17716,"src":"8262:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8245:28:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8214:59:73"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17753,"name":"existingAliasAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17748,"src":"8287:20:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":17756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8319:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17755,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8311:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17754,"name":"address","nodeType":"ElementaryTypeName","src":"8311:7:73","typeDescriptions":{}}},"id":17757,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8311:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8287:34:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17765,"nodeType":"IfStatement","src":"8283:132:73","trueBody":{"id":17764,"nodeType":"Block","src":"8323:92:73","statements":[{"errorCall":{"arguments":[{"id":17760,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17668,"src":"8369:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":17761,"name":"existingAliasAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17748,"src":"8383:20:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17759,"name":"ContractNameInUseAsAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":107,"src":"8344:24:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$_t_address_$returns$_t_error_$","typeString":"function (string memory,address) pure returns (error)"}},"id":17762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8344:60:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17763,"nodeType":"RevertStatement","src":"8337:67:73"}]}},{"expression":{"id":17770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17766,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17636,"src":"8494:17:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":17768,"indexExpression":{"id":17767,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17716,"src":"8512:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8494:29:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17769,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17670,"src":"8526:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8494:47:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":17771,"nodeType":"ExpressionStatement","src":"8494:47:73"},{"expression":{"id":17780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17772,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"8695:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17774,"indexExpression":{"id":17773,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17670,"src":"8709:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8695:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17776,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17666,"src":"8769:12:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"hexValue":"74727565","id":17777,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8809:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"74727565","id":17778,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8837:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":17775,"name":"ContractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52,"src":"8728:12:73","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ContractInfo_$52_storage_ptr_$","typeString":"type(struct IBalancerContractRegistry.ContractInfo storage pointer)"}},"id":17779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["8755:12:73","8795:12:73","8827:8:73"],"names":["contractType","isRegistered","isActive"],"nodeType":"FunctionCall","src":"8728:124:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"src":"8695:157:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"id":17781,"nodeType":"ExpressionStatement","src":"8695:157:73"},{"eventCall":{"arguments":[{"id":17783,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17666,"src":"8895:12:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":17784,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17668,"src":"8909:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":17785,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17670,"src":"8923:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17782,"name":"BalancerContractRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62,"src":"8868:26:73","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_enum$_ContractType_$43_$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (enum ContractType,string memory,address)"}},"id":17786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8868:71:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17787,"nodeType":"EmitStatement","src":"8863:76:73"}]},"documentation":{"id":17663,"nodeType":"StructuredDocumentation","src":"7038:41:73","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"e0376ab4","id":17789,"implemented":true,"kind":"function","modifiers":[{"id":17673,"kind":"modifierInvocation","modifierName":{"id":17672,"name":"authenticate","nameLocations":["7237:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"7237:12:73"},"nodeType":"ModifierInvocation","src":"7237:12:73"}],"name":"registerBalancerContract","nameLocation":"7093:24:73","nodeType":"FunctionDefinition","parameters":{"id":17671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17666,"mutability":"mutable","name":"contractType","nameLocation":"7140:12:73","nodeType":"VariableDeclaration","scope":17789,"src":"7127:25:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":17665,"nodeType":"UserDefinedTypeName","pathNode":{"id":17664,"name":"ContractType","nameLocations":["7127:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"7127:12:73"},"referencedDeclaration":43,"src":"7127:12:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":17668,"mutability":"mutable","name":"contractName","nameLocation":"7176:12:73","nodeType":"VariableDeclaration","scope":17789,"src":"7162:26:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17667,"name":"string","nodeType":"ElementaryTypeName","src":"7162:6:73","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":17670,"mutability":"mutable","name":"contractAddress","nameLocation":"7206:15:73","nodeType":"VariableDeclaration","scope":17789,"src":"7198:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17669,"name":"address","nodeType":"ElementaryTypeName","src":"7198:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7117:110:73"},"returnParameters":{"id":17674,"nodeType":"ParameterList","parameters":[],"src":"7250:0:73"},"scope":18179,"src":"7084:1862:73","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[156],"body":{"id":17868,"nodeType":"Block","src":"9084:851:73","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":17799,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17792,"src":"9104:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17798,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9098:5:73","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":17797,"name":"bytes","nodeType":"ElementaryTypeName","src":"9098:5:73","typeDescriptions":{}}},"id":17800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9098:19:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":17801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9118:6:73","memberName":"length","nodeType":"MemberAccess","src":"9098:26:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9128:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9098:31:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17808,"nodeType":"IfStatement","src":"9094:90:73","trueBody":{"id":17807,"nodeType":"Block","src":"9131:53:73","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17804,"name":"InvalidContractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":136,"src":"9152:19:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9152:21:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17806,"nodeType":"RevertStatement","src":"9145:28:73"}]}},{"assignments":[17810],"declarations":[{"constant":false,"id":17810,"mutability":"mutable","name":"contractId","nameLocation":"9243:10:73","nodeType":"VariableDeclaration","scope":17868,"src":"9235:18:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17809,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9235:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":17814,"initialValue":{"arguments":[{"id":17812,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17792,"src":"9271:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17811,"name":"_getContractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18178,"src":"9256:14:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":17813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9256:28:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9235:49:73"},{"assignments":[17816],"declarations":[{"constant":false,"id":17816,"mutability":"mutable","name":"contractAddress","nameLocation":"9302:15:73","nodeType":"VariableDeclaration","scope":17868,"src":"9294:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17815,"name":"address","nodeType":"ElementaryTypeName","src":"9294:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17820,"initialValue":{"baseExpression":{"id":17817,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17636,"src":"9320:17:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":17819,"indexExpression":{"id":17818,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17810,"src":"9338:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9320:29:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"9294:55:73"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17821,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17816,"src":"9364:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":17824,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9391:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17823,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9383:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17822,"name":"address","nodeType":"ElementaryTypeName","src":"9383:7:73","typeDescriptions":{}}},"id":17825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9383:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9364:29:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17832,"nodeType":"IfStatement","src":"9360:106:73","trueBody":{"id":17831,"nodeType":"Block","src":"9395:71:73","statements":[{"errorCall":{"arguments":[{"id":17828,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17792,"src":"9442:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17827,"name":"ContractNameNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120,"src":"9416:25:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":17829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9416:39:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17830,"nodeType":"RevertStatement","src":"9409:46:73"}]}},{"assignments":[17835],"declarations":[{"constant":false,"id":17835,"mutability":"mutable","name":"info","nameLocation":"9496:4:73","nodeType":"VariableDeclaration","scope":17868,"src":"9476:24:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":17834,"nodeType":"UserDefinedTypeName","pathNode":{"id":17833,"name":"ContractInfo","nameLocations":["9476:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"9476:12:73"},"referencedDeclaration":52,"src":"9476:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":17839,"initialValue":{"baseExpression":{"id":17836,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"9503:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17838,"indexExpression":{"id":17837,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17816,"src":"9517:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9503:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"9476:57:73"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17840,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17835,"src":"9633:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17841,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9638:12:73","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":49,"src":"9633:17:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":17842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9654:5:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"9633:26:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17850,"nodeType":"IfStatement","src":"9629:112:73","trueBody":{"id":17849,"nodeType":"Block","src":"9661:80:73","statements":[{"errorCall":{"arguments":[{"id":17845,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17792,"src":"9700:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":17846,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17816,"src":"9714:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17844,"name":"InconsistentState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17652,"src":"9682:17:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$_t_address_$returns$_t_error_$","typeString":"function (string memory,address) pure returns (error)"}},"id":17847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9682:48:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17848,"nodeType":"RevertStatement","src":"9675:55:73"}]}},{"expression":{"id":17854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"9751:36:73","subExpression":{"baseExpression":{"id":17851,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17636,"src":"9758:17:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":17853,"indexExpression":{"id":17852,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17810,"src":"9776:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9758:29:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17855,"nodeType":"ExpressionStatement","src":"9751:36:73"},{"expression":{"id":17859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"9797:37:73","subExpression":{"baseExpression":{"id":17856,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"9804:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17858,"indexExpression":{"id":17857,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17816,"src":"9818:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9804:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17860,"nodeType":"ExpressionStatement","src":"9797:37:73"},{"eventCall":{"arguments":[{"expression":{"id":17862,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17835,"src":"9879:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17863,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9884:12:73","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":47,"src":"9879:17:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":17864,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17792,"src":"9898:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":17865,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17816,"src":"9912:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17861,"name":"BalancerContractDeregistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72,"src":"9850:28:73","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_enum$_ContractType_$43_$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (enum ContractType,string memory,address)"}},"id":17866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9850:78:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17867,"nodeType":"EmitStatement","src":"9845:83:73"}]},"documentation":{"id":17790,"nodeType":"StructuredDocumentation","src":"8952:41:73","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"c7f90793","id":17869,"implemented":true,"kind":"function","modifiers":[{"id":17795,"kind":"modifierInvocation","modifierName":{"id":17794,"name":"authenticate","nameLocations":["9071:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"9071:12:73"},"nodeType":"ModifierInvocation","src":"9071:12:73"}],"name":"deregisterBalancerContract","nameLocation":"9007:26:73","nodeType":"FunctionDefinition","parameters":{"id":17793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17792,"mutability":"mutable","name":"contractName","nameLocation":"9048:12:73","nodeType":"VariableDeclaration","scope":17869,"src":"9034:26:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17791,"name":"string","nodeType":"ElementaryTypeName","src":"9034:6:73","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"9033:28:73"},"returnParameters":{"id":17796,"nodeType":"ParameterList","parameters":[],"src":"9084:0:73"},"scope":18179,"src":"8998:937:73","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[162],"body":{"id":17931,"nodeType":"Block","src":"10069:949:73","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17877,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17872,"src":"10083:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":17880,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10110:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17879,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10102:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17878,"name":"address","nodeType":"ElementaryTypeName","src":"10102:7:73","typeDescriptions":{}}},"id":17881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10102:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10083:29:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17887,"nodeType":"IfStatement","src":"10079:88:73","trueBody":{"id":17886,"nodeType":"Block","src":"10114:53:73","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17883,"name":"ZeroContractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133,"src":"10135:19:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10135:21:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17885,"nodeType":"RevertStatement","src":"10128:28:73"}]}},{"assignments":[17890],"declarations":[{"constant":false,"id":17890,"mutability":"mutable","name":"info","nameLocation":"10197:4:73","nodeType":"VariableDeclaration","scope":17931,"src":"10177:24:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":17889,"nodeType":"UserDefinedTypeName","pathNode":{"id":17888,"name":"ContractInfo","nameLocations":["10177:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"10177:12:73"},"referencedDeclaration":52,"src":"10177:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":17894,"initialValue":{"baseExpression":{"id":17891,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"10204:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17893,"indexExpression":{"id":17892,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17872,"src":"10218:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10204:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"10177:57:73"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17895,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17890,"src":"10304:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17896,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10309:12:73","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":49,"src":"10304:17:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":17897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10325:5:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10304:26:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17904,"nodeType":"IfStatement","src":"10300:109:73","trueBody":{"id":17903,"nodeType":"Block","src":"10332:77:73","statements":[{"errorCall":{"arguments":[{"id":17900,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17872,"src":"10382:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17899,"name":"ContractAddressNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":125,"src":"10353:28:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":17901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10353:45:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17902,"nodeType":"RevertStatement","src":"10346:52:73"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17905,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17890,"src":"10503:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17906,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10508:8:73","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":51,"src":"10503:13:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":17907,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10520:5:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10503:22:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17914,"nodeType":"IfStatement","src":"10499:102:73","trueBody":{"id":17913,"nodeType":"Block","src":"10527:74:73","statements":[{"errorCall":{"arguments":[{"id":17910,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17872,"src":"10574:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17909,"name":"ContractAlreadyDeprecated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":130,"src":"10548:25:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":17911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10548:42:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17912,"nodeType":"RevertStatement","src":"10541:49:73"}]}},{"expression":{"id":17919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17915,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17890,"src":"10884:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17917,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10889:8:73","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":51,"src":"10884:13:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":17918,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10900:5:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10884:21:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17920,"nodeType":"ExpressionStatement","src":"10884:21:73"},{"expression":{"id":17925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17921,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"10915:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17923,"indexExpression":{"id":17922,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17872,"src":"10929:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10915:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17924,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17890,"src":"10948:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"src":"10915:37:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"id":17926,"nodeType":"ExpressionStatement","src":"10915:37:73"},{"eventCall":{"arguments":[{"id":17928,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17872,"src":"10995:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17927,"name":"BalancerContractDeprecated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77,"src":"10968:26:73","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":17929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10968:43:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17930,"nodeType":"EmitStatement","src":"10963:48:73"}]},"documentation":{"id":17870,"nodeType":"StructuredDocumentation","src":"9941:41:73","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"44969a9c","id":17932,"implemented":true,"kind":"function","modifiers":[{"id":17875,"kind":"modifierInvocation","modifierName":{"id":17874,"name":"authenticate","nameLocations":["10056:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"10056:12:73"},"nodeType":"ModifierInvocation","src":"10056:12:73"}],"name":"deprecateBalancerContract","nameLocation":"9996:25:73","nodeType":"FunctionDefinition","parameters":{"id":17873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17872,"mutability":"mutable","name":"contractAddress","nameLocation":"10030:15:73","nodeType":"VariableDeclaration","scope":17932,"src":"10022:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17871,"name":"address","nodeType":"ElementaryTypeName","src":"10022:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10021:25:73"},"returnParameters":{"id":17876,"nodeType":"ParameterList","parameters":[],"src":"10069:0:73"},"scope":18179,"src":"9987:1031:73","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[170],"body":{"id":18025,"nodeType":"Block","src":"11210:1370:73","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":17944,"name":"contractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17935,"src":"11269:13:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17943,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11263:5:73","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":17942,"name":"bytes","nodeType":"ElementaryTypeName","src":"11263:5:73","typeDescriptions":{}}},"id":17945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11263:20:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":17946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11284:6:73","memberName":"length","nodeType":"MemberAccess","src":"11263:27:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17947,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11294:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11263:32:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17953,"nodeType":"IfStatement","src":"11259:92:73","trueBody":{"id":17952,"nodeType":"Block","src":"11297:54:73","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17949,"name":"InvalidContractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":139,"src":"11318:20:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11318:22:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17951,"nodeType":"RevertStatement","src":"11311:29:73"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17954,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17937,"src":"11365:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":17957,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11392:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17956,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11384:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17955,"name":"address","nodeType":"ElementaryTypeName","src":"11384:7:73","typeDescriptions":{}}},"id":17958,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11384:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11365:29:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17964,"nodeType":"IfStatement","src":"11361:88:73","trueBody":{"id":17963,"nodeType":"Block","src":"11396:53:73","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17960,"name":"ZeroContractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133,"src":"11417:19:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11417:21:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17962,"nodeType":"RevertStatement","src":"11410:28:73"}]}},{"assignments":[17967],"declarations":[{"constant":false,"id":17967,"mutability":"mutable","name":"info","nameLocation":"11533:4:73","nodeType":"VariableDeclaration","scope":18025,"src":"11513:24:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":17966,"nodeType":"UserDefinedTypeName","pathNode":{"id":17965,"name":"ContractInfo","nameLocations":["11513:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"11513:12:73"},"referencedDeclaration":52,"src":"11513:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":17971,"initialValue":{"baseExpression":{"id":17968,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"11540:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17970,"indexExpression":{"id":17969,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17937,"src":"11554:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11540:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"11513:57:73"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17972,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17967,"src":"11584:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17973,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11589:12:73","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":49,"src":"11584:17:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":17974,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11605:5:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"11584:26:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17981,"nodeType":"IfStatement","src":"11580:109:73","trueBody":{"id":17980,"nodeType":"Block","src":"11612:77:73","statements":[{"errorCall":{"arguments":[{"id":17977,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17937,"src":"11662:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17976,"name":"ContractAddressNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":125,"src":"11633:28:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":17978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11633:45:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17979,"nodeType":"RevertStatement","src":"11626:52:73"}]}},{"assignments":[17983],"declarations":[{"constant":false,"id":17983,"mutability":"mutable","name":"contractId","nameLocation":"12061:10:73","nodeType":"VariableDeclaration","scope":18025,"src":"12053:18:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17982,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12053:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":17987,"initialValue":{"arguments":[{"id":17985,"name":"contractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17935,"src":"12089:13:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17984,"name":"_getContractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18178,"src":"12074:14:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":17986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12074:29:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"12053:50:73"},{"assignments":[17989],"declarations":[{"constant":false,"id":17989,"mutability":"mutable","name":"existingRegistryAddress","nameLocation":"12121:23:73","nodeType":"VariableDeclaration","scope":18025,"src":"12113:31:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17988,"name":"address","nodeType":"ElementaryTypeName","src":"12113:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17993,"initialValue":{"baseExpression":{"id":17990,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17636,"src":"12147:17:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":17992,"indexExpression":{"id":17991,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17983,"src":"12165:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12147:29:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"12113:63:73"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17994,"name":"existingRegistryAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17989,"src":"12190:23:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":17997,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12225:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17996,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12217:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17995,"name":"address","nodeType":"ElementaryTypeName","src":"12217:7:73","typeDescriptions":{}}},"id":17998,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12217:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12190:37:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18013,"nodeType":"IfStatement","src":"12186:193:73","trueBody":{"id":18012,"nodeType":"Block","src":"12229:150:73","statements":[{"expression":{"id":18004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18000,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17967,"src":"12243:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":18001,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"12250:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":18003,"indexExpression":{"id":18002,"name":"existingRegistryAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17989,"src":"12264:23:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12250:38:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"src":"12243:45:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":18005,"nodeType":"ExpressionStatement","src":"12243:45:73"},{"errorCall":{"arguments":[{"expression":{"id":18007,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17967,"src":"12335:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":18008,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12340:12:73","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":47,"src":"12335:17:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":18009,"name":"contractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17935,"src":"12354:13:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":18006,"name":"ContractAliasInUseAsName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":115,"src":"12310:24:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_ContractType_$43_$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (enum ContractType,string memory) pure returns (error)"}},"id":18010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12310:58:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18011,"nodeType":"RevertStatement","src":"12303:65:73"}]}},{"expression":{"id":18018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":18014,"name":"_contractAliases","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17645,"src":"12459:16:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":18016,"indexExpression":{"id":18015,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17983,"src":"12476:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12459:28:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18017,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17937,"src":"12490:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12459:46:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18019,"nodeType":"ExpressionStatement","src":"12459:46:73"},{"eventCall":{"arguments":[{"id":18021,"name":"contractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17935,"src":"12542:13:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":18022,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17937,"src":"12557:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18020,"name":"ContractAliasUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":84,"src":"12521:20:73","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (string memory,address)"}},"id":18023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12521:52:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18024,"nodeType":"EmitStatement","src":"12516:57:73"}]},"documentation":{"id":17933,"nodeType":"StructuredDocumentation","src":"11024:41:73","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"2967af96","id":18026,"implemented":true,"kind":"function","modifiers":[{"id":17940,"kind":"modifierInvocation","modifierName":{"id":17939,"name":"authenticate","nameLocations":["11197:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"11197:12:73"},"nodeType":"ModifierInvocation","src":"11197:12:73"}],"name":"addOrUpdateBalancerContractAlias","nameLocation":"11079:32:73","nodeType":"FunctionDefinition","parameters":{"id":17938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17935,"mutability":"mutable","name":"contractAlias","nameLocation":"11135:13:73","nodeType":"VariableDeclaration","scope":18026,"src":"11121:27:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17934,"name":"string","nodeType":"ElementaryTypeName","src":"11121:6:73","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":17937,"mutability":"mutable","name":"contractAddress","nameLocation":"11166:15:73","nodeType":"VariableDeclaration","scope":18026,"src":"11158:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17936,"name":"address","nodeType":"ElementaryTypeName","src":"11158:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11111:76:73"},"returnParameters":{"id":17941,"nodeType":"ParameterList","parameters":[],"src":"11210:0:73"},"scope":18179,"src":"11070:1510:73","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[181],"body":{"id":18042,"nodeType":"Block","src":"12747:80:73","statements":[{"expression":{"arguments":[{"id":18038,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18030,"src":"12790:12:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":18039,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18032,"src":"12804:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18037,"name":"_isActiveBalancerContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18069,"src":"12764:25:73","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_enum$_ContractType_$43_$_t_address_$returns$_t_bool_$","typeString":"function (enum ContractType,address) view returns (bool)"}},"id":18040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12764:56:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":18036,"id":18041,"nodeType":"Return","src":"12757:63:73"}]},"documentation":{"id":18027,"nodeType":"StructuredDocumentation","src":"12586:41:73","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"ae2733a4","id":18043,"implemented":true,"kind":"function","modifiers":[],"name":"isActiveBalancerContract","nameLocation":"12641:24:73","nodeType":"FunctionDefinition","parameters":{"id":18033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18030,"mutability":"mutable","name":"contractType","nameLocation":"12679:12:73","nodeType":"VariableDeclaration","scope":18043,"src":"12666:25:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":18029,"nodeType":"UserDefinedTypeName","pathNode":{"id":18028,"name":"ContractType","nameLocations":["12666:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"12666:12:73"},"referencedDeclaration":43,"src":"12666:12:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":18032,"mutability":"mutable","name":"contractAddress","nameLocation":"12701:15:73","nodeType":"VariableDeclaration","scope":18043,"src":"12693:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18031,"name":"address","nodeType":"ElementaryTypeName","src":"12693:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12665:52:73"},"returnParameters":{"id":18036,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18035,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18043,"src":"12741:4:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18034,"name":"bool","nodeType":"ElementaryTypeName","src":"12741:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12740:6:73"},"scope":18179,"src":"12632:195:73","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":18068,"nodeType":"Block","src":"12971:235:73","statements":[{"assignments":[18055],"declarations":[{"constant":false,"id":18055,"mutability":"mutable","name":"info","nameLocation":"13001:4:73","nodeType":"VariableDeclaration","scope":18068,"src":"12981:24:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":18054,"nodeType":"UserDefinedTypeName","pathNode":{"id":18053,"name":"ContractInfo","nameLocations":["12981:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"12981:12:73"},"referencedDeclaration":52,"src":"12981:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":18059,"initialValue":{"baseExpression":{"id":18056,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"13008:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":18058,"indexExpression":{"id":18057,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18048,"src":"13022:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13008:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"12981:57:73"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18060,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18055,"src":"13149:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":18061,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13154:8:73","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":51,"src":"13149:13:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"id":18065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18062,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18055,"src":"13166:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":18063,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13171:12:73","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":47,"src":"13166:17:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":18064,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18046,"src":"13187:12:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"src":"13166:33:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13149:50:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":18052,"id":18067,"nodeType":"Return","src":"13142:57:73"}]},"id":18069,"implemented":true,"kind":"function","modifiers":[],"name":"_isActiveBalancerContract","nameLocation":"12842:25:73","nodeType":"FunctionDefinition","parameters":{"id":18049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18046,"mutability":"mutable","name":"contractType","nameLocation":"12890:12:73","nodeType":"VariableDeclaration","scope":18069,"src":"12877:25:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":18045,"nodeType":"UserDefinedTypeName","pathNode":{"id":18044,"name":"ContractType","nameLocations":["12877:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"12877:12:73"},"referencedDeclaration":43,"src":"12877:12:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":18048,"mutability":"mutable","name":"contractAddress","nameLocation":"12920:15:73","nodeType":"VariableDeclaration","scope":18069,"src":"12912:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18047,"name":"address","nodeType":"ElementaryTypeName","src":"12912:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12867:74:73"},"returnParameters":{"id":18052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18051,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18069,"src":"12965:4:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18050,"name":"bool","nodeType":"ElementaryTypeName","src":"12965:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12964:6:73"},"scope":18179,"src":"12833:373:73","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[194],"body":{"id":18133,"nodeType":"Block","src":"13427:833:73","statements":[{"assignments":[18083],"declarations":[{"constant":false,"id":18083,"mutability":"mutable","name":"contractId","nameLocation":"13445:10:73","nodeType":"VariableDeclaration","scope":18133,"src":"13437:18:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18082,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13437:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":18087,"initialValue":{"arguments":[{"id":18085,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18075,"src":"13473:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":18084,"name":"_getContractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18178,"src":"13458:14:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":18086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13458:28:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13437:49:73"},{"assignments":[18089],"declarations":[{"constant":false,"id":18089,"mutability":"mutable","name":"registeredAddress","nameLocation":"13504:17:73","nodeType":"VariableDeclaration","scope":18133,"src":"13496:25:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18088,"name":"address","nodeType":"ElementaryTypeName","src":"13496:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":18093,"initialValue":{"baseExpression":{"id":18090,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17636,"src":"13524:17:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":18092,"indexExpression":{"id":18091,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18083,"src":"13542:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13524:29:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"13496:57:73"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18094,"name":"registeredAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18089,"src":"13641:17:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":18097,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13670:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":18096,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13662:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18095,"name":"address","nodeType":"ElementaryTypeName","src":"13662:7:73","typeDescriptions":{}}},"id":18098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13662:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13641:31:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18107,"nodeType":"IfStatement","src":"13637:110:73","trueBody":{"id":18106,"nodeType":"Block","src":"13674:73:73","statements":[{"expression":{"id":18104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18100,"name":"registeredAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18089,"src":"13688:17:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":18101,"name":"_contractAliases","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17645,"src":"13708:16:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":18103,"indexExpression":{"id":18102,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18083,"src":"13725:10:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13708:28:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13688:48:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18105,"nodeType":"ExpressionStatement","src":"13688:48:73"}]}},{"assignments":[18110],"declarations":[{"constant":false,"id":18110,"mutability":"mutable","name":"info","nameLocation":"13777:4:73","nodeType":"VariableDeclaration","scope":18133,"src":"13757:24:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":18109,"nodeType":"UserDefinedTypeName","pathNode":{"id":18108,"name":"ContractInfo","nameLocations":["13757:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"13757:12:73"},"referencedDeclaration":52,"src":"13757:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":18114,"initialValue":{"baseExpression":{"id":18111,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"13784:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":18113,"indexExpression":{"id":18112,"name":"registeredAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18089,"src":"13798:17:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13784:32:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"13757:59:73"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18115,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18110,"src":"14100:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":18116,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14105:12:73","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":49,"src":"14100:17:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"id":18120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18117,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18110,"src":"14121:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":18118,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14126:12:73","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":47,"src":"14121:17:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":18119,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18073,"src":"14142:12:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"src":"14121:33:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14100:54:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18132,"nodeType":"IfStatement","src":"14096:158:73","trueBody":{"id":18131,"nodeType":"Block","src":"14156:98:73","statements":[{"expression":{"id":18124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18122,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18078,"src":"14170:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18123,"name":"registeredAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18089,"src":"14188:17:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14170:35:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18125,"nodeType":"ExpressionStatement","src":"14170:35:73"},{"expression":{"id":18129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18126,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18080,"src":"14219:8:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":18127,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18110,"src":"14230:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":18128,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14235:8:73","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":51,"src":"14230:13:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14219:24:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18130,"nodeType":"ExpressionStatement","src":"14219:24:73"}]}}]},"documentation":{"id":18070,"nodeType":"StructuredDocumentation","src":"13212:41:73","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"41d8c0bb","id":18134,"implemented":true,"kind":"function","modifiers":[],"name":"getBalancerContract","nameLocation":"13267:19:73","nodeType":"FunctionDefinition","parameters":{"id":18076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18073,"mutability":"mutable","name":"contractType","nameLocation":"13309:12:73","nodeType":"VariableDeclaration","scope":18134,"src":"13296:25:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":18072,"nodeType":"UserDefinedTypeName","pathNode":{"id":18071,"name":"ContractType","nameLocations":["13296:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"13296:12:73"},"referencedDeclaration":43,"src":"13296:12:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":18075,"mutability":"mutable","name":"contractName","nameLocation":"13345:12:73","nodeType":"VariableDeclaration","scope":18134,"src":"13331:26:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":18074,"name":"string","nodeType":"ElementaryTypeName","src":"13331:6:73","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"13286:77:73"},"returnParameters":{"id":18081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18078,"mutability":"mutable","name":"contractAddress","nameLocation":"13395:15:73","nodeType":"VariableDeclaration","scope":18134,"src":"13387:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18077,"name":"address","nodeType":"ElementaryTypeName","src":"13387:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18080,"mutability":"mutable","name":"isActive","nameLocation":"13417:8:73","nodeType":"VariableDeclaration","scope":18134,"src":"13412:13:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18079,"name":"bool","nodeType":"ElementaryTypeName","src":"13412:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13386:40:73"},"scope":18179,"src":"13258:1002:73","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[203],"body":{"id":18147,"nodeType":"Block","src":"14419:54:73","statements":[{"expression":{"baseExpression":{"id":18143,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17641,"src":"14436:13:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":18145,"indexExpression":{"id":18144,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18137,"src":"14450:15:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14436:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"functionReturnParameters":18142,"id":18146,"nodeType":"Return","src":"14429:37:73"}]},"documentation":{"id":18135,"nodeType":"StructuredDocumentation","src":"14266:41:73","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"8554c327","id":18148,"implemented":true,"kind":"function","modifiers":[],"name":"getBalancerContractInfo","nameLocation":"14321:23:73","nodeType":"FunctionDefinition","parameters":{"id":18138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18137,"mutability":"mutable","name":"contractAddress","nameLocation":"14353:15:73","nodeType":"VariableDeclaration","scope":18148,"src":"14345:23:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18136,"name":"address","nodeType":"ElementaryTypeName","src":"14345:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14344:25:73"},"returnParameters":{"id":18142,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18141,"mutability":"mutable","name":"info","nameLocation":"14413:4:73","nodeType":"VariableDeclaration","scope":18148,"src":"14393:24:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":18140,"nodeType":"UserDefinedTypeName","pathNode":{"id":18139,"name":"ContractInfo","nameLocations":["14393:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"14393:12:73"},"referencedDeclaration":52,"src":"14393:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"src":"14392:26:73"},"scope":18179,"src":"14312:161:73","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[211],"body":{"id":18162,"nodeType":"Block","src":"14595:78:73","statements":[{"expression":{"arguments":[{"expression":{"id":18157,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43,"src":"14638:12:73","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ContractType_$43_$","typeString":"type(enum ContractType)"}},"id":18158,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14651:6:73","memberName":"ROUTER","nodeType":"MemberAccess","referencedDeclaration":40,"src":"14638:19:73","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":18159,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18151,"src":"14659:6:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18156,"name":"_isActiveBalancerContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18069,"src":"14612:25:73","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_enum$_ContractType_$43_$_t_address_$returns$_t_bool_$","typeString":"function (enum ContractType,address) view returns (bool)"}},"id":18160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14612:54:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":18155,"id":18161,"nodeType":"Return","src":"14605:61:73"}]},"documentation":{"id":18149,"nodeType":"StructuredDocumentation","src":"14479:41:73","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"264e97e0","id":18163,"implemented":true,"kind":"function","modifiers":[],"name":"isTrustedRouter","nameLocation":"14534:15:73","nodeType":"FunctionDefinition","parameters":{"id":18152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18151,"mutability":"mutable","name":"router","nameLocation":"14558:6:73","nodeType":"VariableDeclaration","scope":18163,"src":"14550:14:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18150,"name":"address","nodeType":"ElementaryTypeName","src":"14550:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14549:16:73"},"returnParameters":{"id":18155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18154,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18163,"src":"14589:4:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18153,"name":"bool","nodeType":"ElementaryTypeName","src":"14589:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14588:6:73"},"scope":18179,"src":"14525:148:73","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":18177,"nodeType":"Block","src":"14763:65:73","statements":[{"expression":{"arguments":[{"arguments":[{"id":18173,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18165,"src":"14807:12:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":18171,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"14790:3:73","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18172,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14794:12:73","memberName":"encodePacked","nodeType":"MemberAccess","src":"14790:16:73","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":18174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14790:30:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":18170,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14780:9:73","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":18175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14780:41:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":18169,"id":18176,"nodeType":"Return","src":"14773:48:73"}]},"id":18178,"implemented":true,"kind":"function","modifiers":[],"name":"_getContractId","nameLocation":"14688:14:73","nodeType":"FunctionDefinition","parameters":{"id":18166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18165,"mutability":"mutable","name":"contractName","nameLocation":"14717:12:73","nodeType":"VariableDeclaration","scope":18178,"src":"14703:26:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":18164,"name":"string","nodeType":"ElementaryTypeName","src":"14703:6:73","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"14702:28:73"},"returnParameters":{"id":18169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18168,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18178,"src":"14754:7:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18167,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14754:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14753:9:73"},"scope":18179,"src":"14679:149:73","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":18180,"src":"2741:12089:73","usedErrors":[5,92,100,107,115,120,125,130,133,136,139,7355,17652],"usedEvents":[62,72,77,84]}],"src":"46:14785:73"},"id":73},"contracts/BalancerFeeBurner.sol":{"ast":{"absolutePath":"contracts/BalancerFeeBurner.sol","exportedSymbols":{"AddLiquidityKind":[4241],"AddLiquidityParams":[4257],"AfterSwapParams":[4235],"BalancerFeeBurner":[18527],"BufferWrapOrUnwrapParams":[4296],"FEE_BITLENGTH":[4299],"FEE_SCALING_FACTOR":[4302],"FeeBurnerAuthentication":[19845],"HookFlags":[4061],"HooksConfig":[4085],"IBalancerFeeBurner":[276],"IERC20":[10576],"IERC4626":[9846],"IProtocolFeeBurner":[948],"IProtocolFeeSweeper":[1137],"IRateProvider":[24],"IVault":[2545],"IVaultErrors":[3202],"LiquidityManagement":[4014],"MAX_FEE_PERCENTAGE":[4305],"PoolConfig":[4039],"PoolConfigBits":[4016],"PoolData":[4163],"PoolRoleAccounts":[4111],"PoolSwapParams":[4206],"ReentrancyGuardTransient":[7012],"RemoveLiquidityKind":[4262],"RemoveLiquidityParams":[4278],"Rounding":[4166],"SafeERC20":[11066],"SwapKind":[4169],"SwapState":[4095],"TokenConfig":[4128],"TokenInfo":[4138],"TokenType":[4115],"VaultGuard":[9338],"VaultState":[4103],"VaultSwapParams":[4188],"WrappingDirection":[4281]},"id":18528,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":18181,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:74"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":18183,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":11067,"src":"72:84:74","symbolAliases":[{"foreign":{"id":18182,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11066,"src":"81:9:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":18185,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":10577,"src":"157:72:74","symbolAliases":[{"foreign":{"id":18184,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"166:6:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","id":18187,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":949,"src":"231:116:74","symbolAliases":[{"foreign":{"id":18186,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"240:18:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol","id":18189,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":277,"src":"348:116:74","symbolAliases":[{"foreign":{"id":18188,"name":"IBalancerFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":276,"src":"357:18:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":18191,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":1138,"src":"465:118:74","symbolAliases":[{"foreign":{"id":18190,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1137,"src":"474:19:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":18193,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":3203,"src":"584:93:74","symbolAliases":[{"foreign":{"id":18192,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"593:12:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":18195,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":2546,"src":"678:81:74","symbolAliases":[{"foreign":{"id":18194,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"687:6:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":18196,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":4306,"src":"760:69:74","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":18198,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":7013,"src":"831:132:74","symbolAliases":[{"foreign":{"id":18197,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7012,"src":"844:24:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","file":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","id":18200,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":9339,"src":"964:78:74","symbolAliases":[{"foreign":{"id":18199,"name":"VaultGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9338,"src":"973:10:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/FeeBurnerAuthentication.sol","file":"./FeeBurnerAuthentication.sol","id":18202,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18528,"sourceUnit":19846,"src":"1044:72:74","symbolAliases":[{"foreign":{"id":18201,"name":"FeeBurnerAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19845,"src":"1053:23:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":18203,"name":"IBalancerFeeBurner","nameLocations":["1148:18:74"],"nodeType":"IdentifierPath","referencedDeclaration":276,"src":"1148:18:74"},"id":18204,"nodeType":"InheritanceSpecifier","src":"1148:18:74"},{"baseName":{"id":18205,"name":"ReentrancyGuardTransient","nameLocations":["1168:24:74"],"nodeType":"IdentifierPath","referencedDeclaration":7012,"src":"1168:24:74"},"id":18206,"nodeType":"InheritanceSpecifier","src":"1168:24:74"},{"baseName":{"id":18207,"name":"VaultGuard","nameLocations":["1194:10:74"],"nodeType":"IdentifierPath","referencedDeclaration":9338,"src":"1194:10:74"},"id":18208,"nodeType":"InheritanceSpecifier","src":"1194:10:74"},{"baseName":{"id":18209,"name":"FeeBurnerAuthentication","nameLocations":["1206:23:74"],"nodeType":"IdentifierPath","referencedDeclaration":19845,"src":"1206:23:74"},"id":18210,"nodeType":"InheritanceSpecifier","src":"1206:23:74"}],"canonicalName":"BalancerFeeBurner","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":18527,"linearizedBaseContracts":[18527,19845,9572,9486,12366,9338,7012,276,948],"name":"BalancerFeeBurner","nameLocation":"1127:17:74","nodeType":"ContractDefinition","nodes":[{"global":false,"id":18214,"libraryName":{"id":18211,"name":"SafeERC20","nameLocations":["1242:9:74"],"nodeType":"IdentifierPath","referencedDeclaration":11066,"src":"1242:9:74"},"nodeType":"UsingForDirective","src":"1236:27:74","typeName":{"id":18213,"nodeType":"UserDefinedTypeName","pathNode":{"id":18212,"name":"IERC20","nameLocations":["1256:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1256:6:74"},"referencedDeclaration":10576,"src":"1256:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}},{"constant":false,"id":18221,"mutability":"mutable","name":"_burnSteps","nameLocation":"1318:10:74","nodeType":"VariableDeclaration","scope":18527,"src":"1269:59:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_$","typeString":"mapping(contract IERC20 => struct IBalancerFeeBurner.SwapPathStep[])"},"typeName":{"id":18220,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":18216,"nodeType":"UserDefinedTypeName","pathNode":{"id":18215,"name":"IERC20","nameLocations":["1277:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1277:6:74"},"referencedDeclaration":10576,"src":"1277:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"1269:39:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_$","typeString":"mapping(contract IERC20 => struct IBalancerFeeBurner.SwapPathStep[])"},"valueName":"steps","valueNameLocation":"1302:5:74","valueType":{"baseType":{"id":18218,"nodeType":"UserDefinedTypeName","pathNode":{"id":18217,"name":"SwapPathStep","nameLocations":["1287:12:74"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"1287:12:74"},"referencedDeclaration":227,"src":"1287:12:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"id":18219,"nodeType":"ArrayTypeName","src":"1287:14:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"}}},"visibility":"internal"},{"body":{"id":18243,"nodeType":"Block","src":"1531:57:74","statements":[{"expression":{"id":18241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18239,"name":"protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19771,"src":"1541:18:74","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18240,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18227,"src":"1562:19:74","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"src":"1541:40:74","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"id":18242,"nodeType":"ExpressionStatement","src":"1541:40:74"}]},"id":18244,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":18232,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18224,"src":"1465:5:74","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"id":18233,"kind":"baseConstructorSpecifier","modifierName":{"id":18231,"name":"VaultGuard","nameLocations":["1454:10:74"],"nodeType":"IdentifierPath","referencedDeclaration":9338,"src":"1454:10:74"},"nodeType":"ModifierInvocation","src":"1454:17:74"},{"arguments":[{"id":18235,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18227,"src":"1496:19:74","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},{"id":18236,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18229,"src":"1517:12:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":18237,"kind":"baseConstructorSpecifier","modifierName":{"id":18234,"name":"FeeBurnerAuthentication","nameLocations":["1472:23:74"],"nodeType":"IdentifierPath","referencedDeclaration":19845,"src":"1472:23:74"},"nodeType":"ModifierInvocation","src":"1472:58:74"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":18230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18224,"mutability":"mutable","name":"vault","nameLocation":"1363:5:74","nodeType":"VariableDeclaration","scope":18244,"src":"1356:12:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":18223,"nodeType":"UserDefinedTypeName","pathNode":{"id":18222,"name":"IVault","nameLocations":["1356:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1356:6:74"},"referencedDeclaration":2545,"src":"1356:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":18227,"mutability":"mutable","name":"_protocolFeeSweeper","nameLocation":"1398:19:74","nodeType":"VariableDeclaration","scope":18244,"src":"1378:39:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":18226,"nodeType":"UserDefinedTypeName","pathNode":{"id":18225,"name":"IProtocolFeeSweeper","nameLocations":["1378:19:74"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"1378:19:74"},"referencedDeclaration":1137,"src":"1378:19:74","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"visibility":"internal"},{"constant":false,"id":18229,"mutability":"mutable","name":"initialOwner","nameLocation":"1435:12:74","nodeType":"VariableDeclaration","scope":18244,"src":"1427:20:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18228,"name":"address","nodeType":"ElementaryTypeName","src":"1427:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1346:107:74"},"returnParameters":{"id":18238,"nodeType":"ParameterList","parameters":[],"src":"1531:0:74"},"scope":18527,"src":"1335:253:74","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[264],"body":{"id":18284,"nodeType":"Block","src":"1735:157:74","statements":[{"expression":{"id":18260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"1745:27:74","subExpression":{"baseExpression":{"id":18257,"name":"_burnSteps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18221,"src":"1752:10:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_$","typeString":"mapping(contract IERC20 => struct IBalancerFeeBurner.SwapPathStep storage ref[] storage ref)"}},"id":18259,"indexExpression":{"id":18258,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18248,"src":"1763:8:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1752:20:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage","typeString":"struct IBalancerFeeBurner.SwapPathStep storage ref[] storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18261,"nodeType":"ExpressionStatement","src":"1745:27:74"},{"body":{"id":18282,"nodeType":"Block","src":"1826:60:74","statements":[{"expression":{"arguments":[{"baseExpression":{"id":18277,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18252,"src":"1866:5:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep calldata[] calldata"}},"id":18279,"indexExpression":{"id":18278,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18263,"src":"1872:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1866:8:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_calldata_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SwapPathStep_$227_calldata_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep calldata"}],"expression":{"baseExpression":{"id":18273,"name":"_burnSteps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18221,"src":"1840:10:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_$","typeString":"mapping(contract IERC20 => struct IBalancerFeeBurner.SwapPathStep storage ref[] storage ref)"}},"id":18275,"indexExpression":{"id":18274,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18248,"src":"1851:8:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1840:20:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage","typeString":"struct IBalancerFeeBurner.SwapPathStep storage ref[] storage ref"}},"id":18276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1861:4:74","memberName":"push","nodeType":"MemberAccess","src":"1840:25:74","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr_$_t_struct$_SwapPathStep_$227_storage_$returns$__$attached_to$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr_$","typeString":"function (struct IBalancerFeeBurner.SwapPathStep storage ref[] storage pointer,struct IBalancerFeeBurner.SwapPathStep storage ref)"}},"id":18280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1840:35:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18281,"nodeType":"ExpressionStatement","src":"1840:35:74"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18266,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18263,"src":"1803:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":18267,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18252,"src":"1807:5:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep calldata[] calldata"}},"id":18268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1813:6:74","memberName":"length","nodeType":"MemberAccess","src":"1807:12:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1803:16:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18283,"initializationExpression":{"assignments":[18263],"declarations":[{"constant":false,"id":18263,"mutability":"mutable","name":"i","nameLocation":"1796:1:74","nodeType":"VariableDeclaration","scope":18283,"src":"1788:9:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18262,"name":"uint256","nodeType":"ElementaryTypeName","src":"1788:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18265,"initialValue":{"hexValue":"30","id":18264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1800:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1788:13:74"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":18271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1821:3:74","subExpression":{"id":18270,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18263,"src":"1821:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18272,"nodeType":"ExpressionStatement","src":"1821:3:74"},"nodeType":"ForStatement","src":"1783:103:74"}]},"documentation":{"id":18245,"nodeType":"StructuredDocumentation","src":"1594:34:74","text":"@inheritdoc IBalancerFeeBurner"},"functionSelector":"e3746cb2","id":18285,"implemented":true,"kind":"function","modifiers":[{"id":18255,"kind":"modifierInvocation","modifierName":{"id":18254,"name":"onlyFeeRecipientOrOwner","nameLocations":["1711:23:74"],"nodeType":"IdentifierPath","referencedDeclaration":19814,"src":"1711:23:74"},"nodeType":"ModifierInvocation","src":"1711:23:74"}],"name":"setBurnPath","nameLocation":"1642:11:74","nodeType":"FunctionDefinition","parameters":{"id":18253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18248,"mutability":"mutable","name":"feeToken","nameLocation":"1661:8:74","nodeType":"VariableDeclaration","scope":18285,"src":"1654:15:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18247,"nodeType":"UserDefinedTypeName","pathNode":{"id":18246,"name":"IERC20","nameLocations":["1654:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1654:6:74"},"referencedDeclaration":10576,"src":"1654:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18252,"mutability":"mutable","name":"steps","nameLocation":"1695:5:74","nodeType":"VariableDeclaration","scope":18285,"src":"1671:29:74","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"},"typeName":{"baseType":{"id":18250,"nodeType":"UserDefinedTypeName","pathNode":{"id":18249,"name":"SwapPathStep","nameLocations":["1671:12:74"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"1671:12:74"},"referencedDeclaration":227,"src":"1671:12:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"id":18251,"nodeType":"ArrayTypeName","src":"1671:14:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"}},"visibility":"internal"}],"src":"1653:48:74"},"returnParameters":{"id":18256,"nodeType":"ParameterList","parameters":[],"src":"1735:0:74"},"scope":18527,"src":"1633:259:74","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[275],"body":{"id":18311,"nodeType":"Block","src":"2025:132:74","statements":[{"expression":{"id":18300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18296,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18294,"src":"2035:5:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":18297,"name":"_burnSteps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18221,"src":"2043:10:74","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_$","typeString":"mapping(contract IERC20 => struct IBalancerFeeBurner.SwapPathStep storage ref[] storage ref)"}},"id":18299,"indexExpression":{"id":18298,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18289,"src":"2054:8:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2043:20:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage","typeString":"struct IBalancerFeeBurner.SwapPathStep storage ref[] storage ref"}},"src":"2035:28:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"id":18301,"nodeType":"ExpressionStatement","src":"2035:28:74"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18302,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18294,"src":"2078:5:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"id":18303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2084:6:74","memberName":"length","nodeType":"MemberAccess","src":"2078:12:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":18304,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2094:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2078:17:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18310,"nodeType":"IfStatement","src":"2074:77:74","trueBody":{"id":18309,"nodeType":"Block","src":"2097:54:74","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18306,"name":"BurnPathDoesNotExist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":250,"src":"2118:20:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2118:22:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18308,"nodeType":"RevertStatement","src":"2111:29:74"}]}}]},"documentation":{"id":18286,"nodeType":"StructuredDocumentation","src":"1898:34:74","text":"@inheritdoc IBalancerFeeBurner"},"functionSelector":"c1cfb02a","id":18312,"implemented":true,"kind":"function","modifiers":[],"name":"getBurnPath","nameLocation":"1946:11:74","nodeType":"FunctionDefinition","parameters":{"id":18290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18289,"mutability":"mutable","name":"feeToken","nameLocation":"1965:8:74","nodeType":"VariableDeclaration","scope":18312,"src":"1958:15:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18288,"nodeType":"UserDefinedTypeName","pathNode":{"id":18287,"name":"IERC20","nameLocations":["1958:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1958:6:74"},"referencedDeclaration":10576,"src":"1958:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1957:17:74"},"returnParameters":{"id":18295,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18294,"mutability":"mutable","name":"steps","nameLocation":"2018:5:74","nodeType":"VariableDeclaration","scope":18312,"src":"1996:27:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"},"typeName":{"baseType":{"id":18292,"nodeType":"UserDefinedTypeName","pathNode":{"id":18291,"name":"SwapPathStep","nameLocations":["1996:12:74"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"1996:12:74"},"referencedDeclaration":227,"src":"1996:12:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"id":18293,"nodeType":"ArrayTypeName","src":"1996:14:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"}},"visibility":"internal"}],"src":"1995:29:74"},"scope":18527,"src":"1937:220:74","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[947],"body":{"id":18355,"nodeType":"Block","src":"2444:518:74","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":18339,"name":"BalancerFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18527,"src":"2513:17:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BalancerFeeBurner_$18527_$","typeString":"type(contract BalancerFeeBurner)"}},"id":18340,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2531:8:74","memberName":"burnHook","nodeType":"MemberAccess","referencedDeclaration":18526,"src":"2513:26:74","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_BurnHookParams_$247_calldata_ptr_$returns$__$","typeString":"function BalancerFeeBurner.burnHook(struct IBalancerFeeBurner.BurnHookParams calldata)"}},{"arguments":[{"id":18342,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18315,"src":"2600:4:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18343,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2634:3:74","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2638:6:74","memberName":"sender","nodeType":"MemberAccess","src":"2634:10:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18345,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18318,"src":"2676:8:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18346,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18320,"src":"2722:14:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18347,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18323,"src":"2771:11:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18348,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18325,"src":"2818:12:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18349,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18327,"src":"2863:9:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18350,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18329,"src":"2904:8:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18341,"name":"BurnHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":247,"src":"2557:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_BurnHookParams_$247_storage_ptr_$","typeString":"type(struct IBalancerFeeBurner.BurnHookParams storage pointer)"}},"id":18351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["2594:4:74","2626:6:74","2666:8:74","2706:14:74","2758:11:74","2804:12:74","2852:9:74","2894:8:74"],"names":["pool","sender","feeToken","feeTokenAmount","targetToken","minAmountOut","recipient","deadline"],"nodeType":"FunctionCall","src":"2557:374:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_memory_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_BurnHookParams_$247_calldata_ptr_$returns$__$","typeString":"function BalancerFeeBurner.burnHook(struct IBalancerFeeBurner.BurnHookParams calldata)"},{"typeIdentifier":"t_struct$_BurnHookParams_$247_memory_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams memory"}],"expression":{"id":18337,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2481:3:74","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18338,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2485:10:74","memberName":"encodeCall","nodeType":"MemberAccess","src":"2481:14:74","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":18352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2481:464:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18334,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"2454:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":18336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2461:6:74","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":3874,"src":"2454:13:74","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":18353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2454:501:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":18354,"nodeType":"ExpressionStatement","src":"2454:501:74"}]},"documentation":{"id":18313,"nodeType":"StructuredDocumentation","src":"2163:34:74","text":"@inheritdoc IProtocolFeeBurner"},"functionSelector":"de557a32","id":18356,"implemented":true,"kind":"function","modifiers":[{"id":18332,"kind":"modifierInvocation","modifierName":{"id":18331,"name":"onlyProtocolFeeSweeper","nameLocations":["2421:22:74"],"nodeType":"IdentifierPath","referencedDeclaration":19793,"src":"2421:22:74"},"nodeType":"ModifierInvocation","src":"2421:22:74"}],"name":"burn","nameLocation":"2211:4:74","nodeType":"FunctionDefinition","parameters":{"id":18330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18315,"mutability":"mutable","name":"pool","nameLocation":"2233:4:74","nodeType":"VariableDeclaration","scope":18356,"src":"2225:12:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18314,"name":"address","nodeType":"ElementaryTypeName","src":"2225:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18318,"mutability":"mutable","name":"feeToken","nameLocation":"2254:8:74","nodeType":"VariableDeclaration","scope":18356,"src":"2247:15:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18317,"nodeType":"UserDefinedTypeName","pathNode":{"id":18316,"name":"IERC20","nameLocations":["2247:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2247:6:74"},"referencedDeclaration":10576,"src":"2247:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18320,"mutability":"mutable","name":"feeTokenAmount","nameLocation":"2280:14:74","nodeType":"VariableDeclaration","scope":18356,"src":"2272:22:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18319,"name":"uint256","nodeType":"ElementaryTypeName","src":"2272:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18323,"mutability":"mutable","name":"targetToken","nameLocation":"2311:11:74","nodeType":"VariableDeclaration","scope":18356,"src":"2304:18:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18322,"nodeType":"UserDefinedTypeName","pathNode":{"id":18321,"name":"IERC20","nameLocations":["2304:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2304:6:74"},"referencedDeclaration":10576,"src":"2304:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18325,"mutability":"mutable","name":"minAmountOut","nameLocation":"2340:12:74","nodeType":"VariableDeclaration","scope":18356,"src":"2332:20:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18324,"name":"uint256","nodeType":"ElementaryTypeName","src":"2332:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18327,"mutability":"mutable","name":"recipient","nameLocation":"2370:9:74","nodeType":"VariableDeclaration","scope":18356,"src":"2362:17:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18326,"name":"address","nodeType":"ElementaryTypeName","src":"2362:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18329,"mutability":"mutable","name":"deadline","nameLocation":"2397:8:74","nodeType":"VariableDeclaration","scope":18356,"src":"2389:16:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18328,"name":"uint256","nodeType":"ElementaryTypeName","src":"2389:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2215:196:74"},"returnParameters":{"id":18333,"nodeType":"ParameterList","parameters":[],"src":"2444:0:74"},"scope":18527,"src":"2202:760:74","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18525,"nodeType":"Block","src":"3050:1921:74","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18366,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3216:5:74","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":18367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3222:9:74","memberName":"timestamp","nodeType":"MemberAccess","src":"3216:15:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":18368,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18359,"src":"3234:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3241:8:74","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":246,"src":"3234:15:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3216:33:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18375,"nodeType":"IfStatement","src":"3212:85:74","trueBody":{"id":18374,"nodeType":"Block","src":"3251:46:74","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18371,"name":"SwapDeadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":927,"src":"3272:12:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3272:14:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18373,"nodeType":"RevertStatement","src":"3265:21:74"}]}},{"assignments":[18378],"declarations":[{"constant":false,"id":18378,"mutability":"mutable","name":"feeToken","nameLocation":"3314:8:74","nodeType":"VariableDeclaration","scope":18525,"src":"3307:15:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18377,"nodeType":"UserDefinedTypeName","pathNode":{"id":18376,"name":"IERC20","nameLocations":["3307:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3307:6:74"},"referencedDeclaration":10576,"src":"3307:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":18381,"initialValue":{"expression":{"id":18379,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18359,"src":"3325:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3332:8:74","memberName":"feeToken","nodeType":"MemberAccess","referencedDeclaration":235,"src":"3325:15:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3307:33:74"},{"assignments":[18384],"declarations":[{"constant":false,"id":18384,"mutability":"mutable","name":"targetToken","nameLocation":"3357:11:74","nodeType":"VariableDeclaration","scope":18525,"src":"3350:18:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18383,"nodeType":"UserDefinedTypeName","pathNode":{"id":18382,"name":"IERC20","nameLocations":["3350:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3350:6:74"},"referencedDeclaration":10576,"src":"3350:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":18387,"initialValue":{"expression":{"id":18385,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18359,"src":"3371:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3378:11:74","memberName":"targetToken","nodeType":"MemberAccess","referencedDeclaration":240,"src":"3371:18:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3350:39:74"},{"assignments":[18389],"declarations":[{"constant":false,"id":18389,"mutability":"mutable","name":"feeTokenAmount","nameLocation":"3407:14:74","nodeType":"VariableDeclaration","scope":18525,"src":"3399:22:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18388,"name":"uint256","nodeType":"ElementaryTypeName","src":"3399:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18392,"initialValue":{"expression":{"id":18390,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18359,"src":"3424:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3431:14:74","memberName":"feeTokenAmount","nodeType":"MemberAccess","referencedDeclaration":237,"src":"3424:21:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3399:46:74"},{"assignments":[18397],"declarations":[{"constant":false,"id":18397,"mutability":"mutable","name":"steps","nameLocation":"3478:5:74","nodeType":"VariableDeclaration","scope":18525,"src":"3456:27:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"},"typeName":{"baseType":{"id":18395,"nodeType":"UserDefinedTypeName","pathNode":{"id":18394,"name":"SwapPathStep","nameLocations":["3456:12:74"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"3456:12:74"},"referencedDeclaration":227,"src":"3456:12:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"id":18396,"nodeType":"ArrayTypeName","src":"3456:14:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"}},"visibility":"internal"}],"id":18401,"initialValue":{"arguments":[{"id":18399,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18378,"src":"3498:8:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":18398,"name":"getBurnPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18312,"src":"3486:11:74","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10576_$returns$_t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr_$","typeString":"function (contract IERC20) view returns (struct IBalancerFeeBurner.SwapPathStep memory[] memory)"}},"id":18400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3486:21:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"3456:51:74"},{"assignments":[18403],"declarations":[{"constant":false,"id":18403,"mutability":"mutable","name":"lastStepIndex","nameLocation":"3525:13:74","nodeType":"VariableDeclaration","scope":18525,"src":"3517:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18402,"name":"uint256","nodeType":"ElementaryTypeName","src":"3517:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18408,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18404,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18397,"src":"3541:5:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"id":18405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3547:6:74","memberName":"length","nodeType":"MemberAccess","src":"3541:12:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":18406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3556:1:74","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3541:16:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3517:40:74"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"id":18414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":18409,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18397,"src":"3571:5:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"id":18411,"indexExpression":{"id":18410,"name":"lastStepIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18403,"src":"3577:13:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3571:20:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory"}},"id":18412,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3592:8:74","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":226,"src":"3571:29:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":18413,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18384,"src":"3604:11:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"3571:44:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18419,"nodeType":"IfStatement","src":"3567:106:74","trueBody":{"id":18418,"nodeType":"Block","src":"3617:56:74","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18415,"name":"TargetTokenOutMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":253,"src":"3638:22:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3638:24:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18417,"nodeType":"RevertStatement","src":"3631:31:74"}]}},{"expression":{"arguments":[{"expression":{"id":18423,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18359,"src":"3757:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3764:6:74","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":232,"src":"3757:13:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":18427,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"3780:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}],"id":18426,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3772:7:74","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18425,"name":"address","nodeType":"ElementaryTypeName","src":"3772:7:74","typeDescriptions":{}}},"id":18428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3772:15:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18429,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18389,"src":"3789:14:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18420,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18378,"src":"3731:8:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":18422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3740:16:74","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":10674,"src":"3731:25:74","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":18430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3731:73:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18431,"nodeType":"ExpressionStatement","src":"3731:73:74"},{"expression":{"arguments":[{"id":18435,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18378,"src":"3828:8:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18436,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18389,"src":"3838:14:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18432,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"3814:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":18434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3821:6:74","memberName":"settle","nodeType":"MemberAccess","referencedDeclaration":3885,"src":"3814:13:74","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$10576_$_t_uint256_$returns$_t_uint256_$","typeString":"function (contract IERC20,uint256) external returns (uint256)"}},"id":18437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3814:39:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18438,"nodeType":"ExpressionStatement","src":"3814:39:74"},{"assignments":[18441],"declarations":[{"constant":false,"id":18441,"mutability":"mutable","name":"stepTokenIn","nameLocation":"3941:11:74","nodeType":"VariableDeclaration","scope":18525,"src":"3934:18:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18440,"nodeType":"UserDefinedTypeName","pathNode":{"id":18439,"name":"IERC20","nameLocations":["3934:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3934:6:74"},"referencedDeclaration":10576,"src":"3934:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":18443,"initialValue":{"id":18442,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18378,"src":"3955:8:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3934:29:74"},{"assignments":[18445],"declarations":[{"constant":false,"id":18445,"mutability":"mutable","name":"stepExactAmountIn","nameLocation":"3981:17:74","nodeType":"VariableDeclaration","scope":18525,"src":"3973:25:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18444,"name":"uint256","nodeType":"ElementaryTypeName","src":"3973:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18447,"initialValue":{"id":18446,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18389,"src":"4001:14:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3973:42:74"},{"body":{"id":18503,"nodeType":"Block","src":"4068:607:74","statements":[{"assignments":[18461],"declarations":[{"constant":false,"id":18461,"mutability":"mutable","name":"step","nameLocation":"4102:4:74","nodeType":"VariableDeclaration","scope":18503,"src":"4082:24:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"},"typeName":{"id":18460,"nodeType":"UserDefinedTypeName","pathNode":{"id":18459,"name":"SwapPathStep","nameLocations":["4082:12:74"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"4082:12:74"},"referencedDeclaration":227,"src":"4082:12:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"visibility":"internal"}],"id":18465,"initialValue":{"baseExpression":{"id":18462,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18397,"src":"4109:5:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"id":18464,"indexExpression":{"id":18463,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18449,"src":"4115:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4109:8:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory"}},"nodeType":"VariableDeclarationStatement","src":"4082:35:74"},{"assignments":[null,null,18467],"declarations":[null,null,{"constant":false,"id":18467,"mutability":"mutable","name":"amountOut","nameLocation":"4145:9:74","nodeType":"VariableDeclaration","scope":18503,"src":"4137:17:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18466,"name":"uint256","nodeType":"ElementaryTypeName","src":"4137:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18493,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":18471,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4169,"src":"4231:8:74","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4169_$","typeString":"type(enum SwapKind)"}},"id":18472,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4240:8:74","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4167,"src":"4231:17:74","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"}},{"expression":{"id":18473,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18461,"src":"4276:4:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory"}},"id":18474,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4281:4:74","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":223,"src":"4276:9:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18475,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18441,"src":"4316:11:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"expression":{"id":18476,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18461,"src":"4359:4:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory"}},"id":18477,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4364:8:74","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":226,"src":"4359:13:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18478,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18445,"src":"4410:17:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"condition":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18479,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18449,"src":"4460:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":18480,"name":"lastStepIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18403,"src":"4465:13:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4460:18:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":18482,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4459:20:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":18485,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4504:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":18486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"4459:46:74","trueExpression":{"expression":{"id":18483,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18359,"src":"4482:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4489:12:74","memberName":"minAmountOut","nodeType":"MemberAccess","referencedDeclaration":242,"src":"4482:19:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"","id":18489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4543:2:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":18488,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4537:5:74","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":18487,"name":"bytes","nodeType":"ElementaryTypeName","src":"4537:5:74","typeDescriptions":{}}},"id":18490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4537:9:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$4169","typeString":"enum SwapKind"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":18470,"name":"VaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4188,"src":"4187:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_VaultSwapParams_$4188_storage_ptr_$","typeString":"type(struct VaultSwapParams storage pointer)"}},"id":18491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["4225:4:74","4270:4:74","4307:7:74","4349:8:74","4394:14:74","4449:8:74","4527:8:74"],"names":["kind","pool","tokenIn","tokenOut","amountGivenRaw","limitRaw","userData"],"nodeType":"FunctionCall","src":"4187:378:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4188_memory_ptr","typeString":"struct VaultSwapParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$4188_memory_ptr","typeString":"struct VaultSwapParams memory"}],"expression":{"id":18468,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"4158:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":18469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4165:4:74","memberName":"swap","nodeType":"MemberAccess","referencedDeclaration":3909,"src":"4158:11:74","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_VaultSwapParams_$4188_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct VaultSwapParams memory) external returns (uint256,uint256,uint256)"}},"id":18492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4158:421:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4132:447:74"},{"expression":{"id":18497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18494,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18441,"src":"4594:11:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":18495,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18461,"src":"4608:4:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory"}},"id":18496,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4613:8:74","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":226,"src":"4608:13:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"4594:27:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":18498,"nodeType":"ExpressionStatement","src":"4594:27:74"},{"expression":{"id":18501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18499,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18445,"src":"4635:17:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18500,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18467,"src":"4655:9:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4635:29:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18502,"nodeType":"ExpressionStatement","src":"4635:29:74"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18452,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18449,"src":"4045:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":18453,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18397,"src":"4049:5:74","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"id":18454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4055:6:74","memberName":"length","nodeType":"MemberAccess","src":"4049:12:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4045:16:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18504,"initializationExpression":{"assignments":[18449],"declarations":[{"constant":false,"id":18449,"mutability":"mutable","name":"i","nameLocation":"4038:1:74","nodeType":"VariableDeclaration","scope":18504,"src":"4030:9:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18448,"name":"uint256","nodeType":"ElementaryTypeName","src":"4030:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18451,"initialValue":{"hexValue":"30","id":18450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4042:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4030:13:74"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":18457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4063:3:74","subExpression":{"id":18456,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18449,"src":"4063:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18458,"nodeType":"ExpressionStatement","src":"4063:3:74"},"nodeType":"ForStatement","src":"4025:650:74"},{"expression":{"arguments":[{"id":18508,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18441,"src":"4793:11:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"expression":{"id":18509,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18359,"src":"4806:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4813:9:74","memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":244,"src":"4806:16:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18511,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18445,"src":"4824:17:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18505,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9299,"src":"4779:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":18507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4786:6:74","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":3896,"src":"4779:13:74","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":18512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4779:63:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18513,"nodeType":"ExpressionStatement","src":"4779:63:74"},{"eventCall":{"arguments":[{"expression":{"id":18515,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18359,"src":"4876:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4883:4:74","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":230,"src":"4876:11:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18517,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18378,"src":"4889:8:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18518,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18389,"src":"4899:14:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18519,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18384,"src":"4915:11:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18520,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18445,"src":"4928:17:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18521,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18359,"src":"4947:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4954:9:74","memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":244,"src":"4947:16:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18514,"name":"ProtocolFeeBurned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":914,"src":"4858:17:74","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address)"}},"id":18523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4858:106:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18524,"nodeType":"EmitStatement","src":"4853:111:74"}]},"functionSelector":"c66472de","id":18526,"implemented":true,"kind":"function","modifiers":[{"id":18362,"kind":"modifierInvocation","modifierName":{"id":18361,"name":"nonReentrant","nameLocations":["3027:12:74"],"nodeType":"IdentifierPath","referencedDeclaration":6967,"src":"3027:12:74"},"nodeType":"ModifierInvocation","src":"3027:12:74"},{"id":18364,"kind":"modifierInvocation","modifierName":{"id":18363,"name":"onlyVault","nameLocations":["3040:9:74"],"nodeType":"IdentifierPath","referencedDeclaration":9317,"src":"3040:9:74"},"nodeType":"ModifierInvocation","src":"3040:9:74"}],"name":"burnHook","nameLocation":"2977:8:74","nodeType":"FunctionDefinition","parameters":{"id":18360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18359,"mutability":"mutable","name":"params","nameLocation":"3010:6:74","nodeType":"VariableDeclaration","scope":18526,"src":"2986:30:74","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams"},"typeName":{"id":18358,"nodeType":"UserDefinedTypeName","pathNode":{"id":18357,"name":"BurnHookParams","nameLocations":["2986:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":247,"src":"2986:14:74"},"referencedDeclaration":247,"src":"2986:14:74","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_storage_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams"}},"visibility":"internal"}],"src":"2985:32:74"},"returnParameters":{"id":18365,"nodeType":"ParameterList","parameters":[],"src":"3050:0:74"},"scope":18527,"src":"2968:2003:74","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":18528,"src":"1118:3855:74","usedErrors":[250,253,924,927,3074,6956,9352,9357,10614,19774,19777],"usedEvents":[914,9363,9501]}],"src":"46:4928:74"},"id":74},"contracts/CallAndRevert.sol":{"ast":{"absolutePath":"contracts/CallAndRevert.sol","exportedSymbols":{"Address":[11326],"CallAndRevert":[18633],"RevertCodec":[4959]},"id":18634,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":18529,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:75"},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":18531,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18634,"sourceUnit":11327,"src":"72:68:75","symbolAliases":[{"foreign":{"id":18530,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11326,"src":"81:7:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol","id":18533,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18634,"sourceUnit":4960,"src":"142:97:75","symbolAliases":[{"foreign":{"id":18532,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4959,"src":"151:11:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"CallAndRevert","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":18633,"linearizedBaseContracts":[18633],"name":"CallAndRevert","nameLocation":"250:13:75","nodeType":"ContractDefinition","nodes":[{"errorSelector":"28f95541","id":18535,"name":"QuoteResultSpoofed","nameLocation":"276:18:75","nodeType":"ErrorDefinition","parameters":{"id":18534,"nodeType":"ParameterList","parameters":[],"src":"294:2:75"},"src":"270:27:75"},{"body":{"id":18571,"nodeType":"Block","src":"394:233:75","statements":[{"clauses":[{"block":{"id":18558,"nodeType":"Block","src":"469:53:75","statements":[{"expression":{"arguments":[{"hexValue":"556e65787065637465642073756363657373","id":18555,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"490:20:75","typeDescriptions":{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""},"value":"Unexpected success"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""}],"id":18554,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"483:6:75","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":18556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"483:28:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18557,"nodeType":"ExpressionStatement","src":"483:28:75"}]},"errorName":"","id":18559,"nodeType":"TryCatchClause","src":"469:53:75"},{"block":{"id":18568,"nodeType":"Block","src":"551:70:75","statements":[{"expression":{"arguments":[{"id":18565,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18561,"src":"603:6:75","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18563,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4959,"src":"572:11:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4959_$","typeString":"type(library RevertCodec)"}},"id":18564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"584:18:75","memberName":"catchEncodedResult","nodeType":"MemberAccess","referencedDeclaration":4921,"src":"572:30:75","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (bytes memory)"}},"id":18566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"572:38:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":18543,"id":18567,"nodeType":"Return","src":"565:45:75"}]},"errorName":"","id":18569,"nodeType":"TryCatchClause","parameters":{"id":18562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18561,"mutability":"mutable","name":"result","nameLocation":"543:6:75","nodeType":"VariableDeclaration","scope":18569,"src":"530:19:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18560,"name":"bytes","nodeType":"ElementaryTypeName","src":"530:5:75","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"529:21:75"},"src":"523:98:75"}],"externalCall":{"arguments":[{"id":18551,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18537,"src":"455:6:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18552,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18539,"src":"463:4:75","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"arguments":[{"id":18547,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"430:4:75","typeDescriptions":{"typeIdentifier":"t_contract$_CallAndRevert_$18633","typeString":"contract CallAndRevert"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CallAndRevert_$18633","typeString":"contract CallAndRevert"}],"id":18546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"422:7:75","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18545,"name":"address","nodeType":"ElementaryTypeName","src":"422:7:75","typeDescriptions":{}}},"id":18548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"422:13:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18544,"name":"CallAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18633,"src":"408:13:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CallAndRevert_$18633_$","typeString":"type(contract CallAndRevert)"}},"id":18549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"408:28:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_CallAndRevert_$18633","typeString":"contract CallAndRevert"}},"id":18550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"437:17:75","memberName":"callAndRevertHook","nodeType":"MemberAccess","referencedDeclaration":18632,"src":"408:46:75","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory) external"}},"id":18553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"408:60:75","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18570,"nodeType":"TryStatement","src":"404:217:75"}]},"id":18572,"implemented":true,"kind":"function","modifiers":[],"name":"_callAndRevert","nameLocation":"312:14:75","nodeType":"FunctionDefinition","parameters":{"id":18540,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18537,"mutability":"mutable","name":"target","nameLocation":"335:6:75","nodeType":"VariableDeclaration","scope":18572,"src":"327:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18536,"name":"address","nodeType":"ElementaryTypeName","src":"327:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18539,"mutability":"mutable","name":"data","nameLocation":"356:4:75","nodeType":"VariableDeclaration","scope":18572,"src":"343:17:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18538,"name":"bytes","nodeType":"ElementaryTypeName","src":"343:5:75","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"326:35:75"},"returnParameters":{"id":18543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18542,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18572,"src":"380:12:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18541,"name":"bytes","nodeType":"ElementaryTypeName","src":"380:5:75","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"379:14:75"},"scope":18633,"src":"303:324:75","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":18631,"nodeType":"Block","src":"704:860:75","statements":[{"assignments":[18580,18582],"declarations":[{"constant":false,"id":18580,"mutability":"mutable","name":"success","nameLocation":"779:7:75","nodeType":"VariableDeclaration","scope":18631,"src":"774:12:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18579,"name":"bool","nodeType":"ElementaryTypeName","src":"774:4:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":18582,"mutability":"mutable","name":"result","nameLocation":"801:6:75","nodeType":"VariableDeclaration","scope":18631,"src":"788:19:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18581,"name":"bytes","nodeType":"ElementaryTypeName","src":"788:5:75","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":18588,"initialValue":{"arguments":[{"id":18586,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18576,"src":"825:4:75","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"components":[{"id":18583,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18574,"src":"812:6:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":18584,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"811:8:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"820:4:75","memberName":"call","nodeType":"MemberAccess","src":"811:13:75","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":18587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"811:19:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"773:57:75"},{"condition":{"id":18589,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18580,"src":"844:7:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":18629,"nodeType":"Block","src":"1127:431:75","statements":[{"assignments":[18607],"declarations":[{"constant":false,"id":18607,"mutability":"mutable","name":"errorSelector","nameLocation":"1260:13:75","nodeType":"VariableDeclaration","scope":18629,"src":"1253:20:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":18606,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1253:6:75","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":18612,"initialValue":{"arguments":[{"id":18610,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18582,"src":"1302:6:75","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18608,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4959,"src":"1276:11:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4959_$","typeString":"type(library RevertCodec)"}},"id":18609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1288:13:75","memberName":"parseSelector","nodeType":"MemberAccess","referencedDeclaration":4940,"src":"1276:25:75","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$","typeString":"function (bytes memory) pure returns (bytes4)"}},"id":18611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1276:33:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"1253:56:75"},{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":18617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18613,"name":"errorSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18607,"src":"1327:13:75","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":18614,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4959,"src":"1344:11:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4959_$","typeString":"type(library RevertCodec)"}},"id":18615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1356:6:75","memberName":"Result","nodeType":"MemberAccess","referencedDeclaration":4877,"src":"1344:18:75","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$","typeString":"function (bytes memory) pure returns (error)"}},"id":18616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1363:8:75","memberName":"selector","nodeType":"MemberAccess","src":"1344:27:75","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"1327:44:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18622,"nodeType":"IfStatement","src":"1323:110:75","trueBody":{"id":18621,"nodeType":"Block","src":"1373:60:75","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18618,"name":"QuoteResultSpoofed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18535,"src":"1398:18:75","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1398:20:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18620,"nodeType":"RevertStatement","src":"1391:27:75"}]}},{"expression":{"arguments":[{"id":18626,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18582,"src":"1540:6:75","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18623,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4959,"src":"1513:11:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4959_$","typeString":"type(library RevertCodec)"}},"id":18625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1525:14:75","memberName":"bubbleUpRevert","nodeType":"MemberAccess","referencedDeclaration":4958,"src":"1513:26:75","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":18627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1513:34:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18628,"nodeType":"ExpressionStatement","src":"1513:34:75"}]},"id":18630,"nodeType":"IfStatement","src":"840:718:75","trueBody":{"id":18605,"nodeType":"Block","src":"853:268:75","statements":[{"expression":{"arguments":[{"expression":{"id":18593,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"990:3:75","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"994:6:75","memberName":"sender","nodeType":"MemberAccess","src":"990:10:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18595,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18580,"src":"1002:7:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":18596,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18582,"src":"1011:6:75","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18590,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11326,"src":"955:7:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$11326_$","typeString":"type(library Address)"}},"id":18592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"963:26:75","memberName":"verifyCallResultFromTarget","nodeType":"MemberAccess","referencedDeclaration":11283,"src":"955:34:75","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":18597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"955:63:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":18598,"nodeType":"ExpressionStatement","src":"955:63:75"},{"errorCall":{"arguments":[{"id":18602,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18582,"src":"1103:6:75","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18599,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4959,"src":"1084:11:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4959_$","typeString":"type(library RevertCodec)"}},"id":18601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1096:6:75","memberName":"Result","nodeType":"MemberAccess","referencedDeclaration":4877,"src":"1084:18:75","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$","typeString":"function (bytes memory) pure returns (error)"}},"id":18603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1084:26:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18604,"nodeType":"RevertStatement","src":"1077:33:75"}]}}]},"functionSelector":"a7699638","id":18632,"implemented":true,"kind":"function","modifiers":[],"name":"callAndRevertHook","nameLocation":"642:17:75","nodeType":"FunctionDefinition","parameters":{"id":18577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18574,"mutability":"mutable","name":"target","nameLocation":"668:6:75","nodeType":"VariableDeclaration","scope":18632,"src":"660:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18573,"name":"address","nodeType":"ElementaryTypeName","src":"660:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18576,"mutability":"mutable","name":"data","nameLocation":"689:4:75","nodeType":"VariableDeclaration","scope":18632,"src":"676:17:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18575,"name":"bytes","nodeType":"ElementaryTypeName","src":"676:5:75","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"659:35:75"},"returnParameters":{"id":18578,"nodeType":"ParameterList","parameters":[],"src":"704:0:75"},"scope":18633,"src":"633:931:75","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":18634,"src":"241:1325:75","usedErrors":[4877,4880,11076,12379,18535],"usedEvents":[]}],"src":"46:1521:75"},"id":75},"contracts/CowSwapFeeBurner.sol":{"ast":{"absolutePath":"contracts/CowSwapFeeBurner.sol","exportedSymbols":{"CowSwapFeeBurner":[19528],"FeeBurnerAuthentication":[19845],"GPv2Order":[357],"IComposableCow":[326],"ICowConditionalOrder":[418],"ICowConditionalOrderGenerator":[454],"ICowSwapFeeBurner":[566],"IERC1271":[9586],"IERC165":[12706],"IERC20":[10576],"IProtocolFeeBurner":[948],"IProtocolFeeSweeper":[1137],"IVault":[2545],"ReentrancyGuardTransient":[7012],"SafeERC20":[11066],"Version":[4999]},"id":19529,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":18635,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:76"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":18637,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":11067,"src":"72:84:76","symbolAliases":[{"foreign":{"id":18636,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11066,"src":"81:9:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"@openzeppelin/contracts/utils/introspection/IERC165.sol","id":18639,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":12707,"src":"157:82:76","symbolAliases":[{"foreign":{"id":18638,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12706,"src":"166:7:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1271.sol","file":"@openzeppelin/contracts/interfaces/IERC1271.sol","id":18641,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":9587,"src":"240:75:76","symbolAliases":[{"foreign":{"id":18640,"name":"IERC1271","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9586,"src":"249:8:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":18643,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":10577,"src":"316:72:76","symbolAliases":[{"foreign":{"id":18642,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"325:6:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","id":18645,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":949,"src":"390:116:76","symbolAliases":[{"foreign":{"id":18644,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"399:18:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol","id":18647,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":567,"src":"507:114:76","symbolAliases":[{"foreign":{"id":18646,"name":"ICowSwapFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":566,"src":"516:17:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":18649,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":1138,"src":"622:118:76","symbolAliases":[{"foreign":{"id":18648,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1137,"src":"631:19:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","id":18651,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":327,"src":"741:108:76","symbolAliases":[{"foreign":{"id":18650,"name":"IComposableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":326,"src":"750:14:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol","id":18653,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":455,"src":"850:142:76","symbolAliases":[{"foreign":{"id":18652,"name":"ICowConditionalOrderGenerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":454,"src":"863:29:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","id":18656,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":419,"src":"993:139:76","symbolAliases":[{"foreign":{"id":18654,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"1006:20:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":18655,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":357,"src":"1032:9:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":18658,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":2546,"src":"1133:81:76","symbolAliases":[{"foreign":{"id":18657,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"1142:6:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","id":18660,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":5000,"src":"1216:89:76","symbolAliases":[{"foreign":{"id":18659,"name":"Version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4999,"src":"1225:7:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":18662,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":7013,"src":"1306:132:76","symbolAliases":[{"foreign":{"id":18661,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7012,"src":"1319:24:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/FeeBurnerAuthentication.sol","file":"./FeeBurnerAuthentication.sol","id":18664,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19529,"sourceUnit":19846,"src":"1440:72:76","symbolAliases":[{"foreign":{"id":18663,"name":"FeeBurnerAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19845,"src":"1449:23:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":18666,"name":"ICowSwapFeeBurner","nameLocations":["1843:17:76"],"nodeType":"IdentifierPath","referencedDeclaration":566,"src":"1843:17:76"},"id":18667,"nodeType":"InheritanceSpecifier","src":"1843:17:76"},{"baseName":{"id":18668,"name":"FeeBurnerAuthentication","nameLocations":["1862:23:76"],"nodeType":"IdentifierPath","referencedDeclaration":19845,"src":"1862:23:76"},"id":18669,"nodeType":"InheritanceSpecifier","src":"1862:23:76"},{"baseName":{"id":18670,"name":"ReentrancyGuardTransient","nameLocations":["1887:24:76"],"nodeType":"IdentifierPath","referencedDeclaration":7012,"src":"1887:24:76"},"id":18671,"nodeType":"InheritanceSpecifier","src":"1887:24:76"},{"baseName":{"id":18672,"name":"Version","nameLocations":["1913:7:76"],"nodeType":"IdentifierPath","referencedDeclaration":4999,"src":"1913:7:76"},"id":18673,"nodeType":"InheritanceSpecifier","src":"1913:7:76"}],"canonicalName":"CowSwapFeeBurner","contractDependencies":[],"contractKind":"contract","documentation":{"id":18665,"nodeType":"StructuredDocumentation","src":"1551:262:76","text":" @title CowSwapFeeBurner\n @notice A contract that burns protocol fees using CowSwap.\n @dev The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function.\n Only one order per token is allowed at a time."},"fullyImplemented":true,"id":19528,"linearizedBaseContracts":[19528,4999,34,7012,19845,9572,9486,12366,566,454,12706,418,948,9586],"name":"CowSwapFeeBurner","nameLocation":"1823:16:76","nodeType":"ContractDefinition","nodes":[{"global":false,"id":18677,"libraryName":{"id":18674,"name":"SafeERC20","nameLocations":["1933:9:76"],"nodeType":"IdentifierPath","referencedDeclaration":11066,"src":"1933:9:76"},"nodeType":"UsingForDirective","src":"1927:27:76","typeName":{"id":18676,"nodeType":"UserDefinedTypeName","pathNode":{"id":18675,"name":"IERC20","nameLocations":["1947:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1947:6:76"},"referencedDeclaration":10576,"src":"1947:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}},{"canonicalName":"CowSwapFeeBurner.ShortOrder","id":18687,"members":[{"constant":false,"id":18680,"mutability":"mutable","name":"tokenOut","nameLocation":"1995:8:76","nodeType":"VariableDeclaration","scope":18687,"src":"1988:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18679,"nodeType":"UserDefinedTypeName","pathNode":{"id":18678,"name":"IERC20","nameLocations":["1988:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1988:6:76"},"referencedDeclaration":10576,"src":"1988:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18682,"mutability":"mutable","name":"receiver","nameLocation":"2021:8:76","nodeType":"VariableDeclaration","scope":18687,"src":"2013:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18681,"name":"address","nodeType":"ElementaryTypeName","src":"2013:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18684,"mutability":"mutable","name":"minAmountOut","nameLocation":"2047:12:76","nodeType":"VariableDeclaration","scope":18687,"src":"2039:20:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18683,"name":"uint256","nodeType":"ElementaryTypeName","src":"2039:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18686,"mutability":"mutable","name":"deadline","nameLocation":"2076:8:76","nodeType":"VariableDeclaration","scope":18687,"src":"2069:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":18685,"name":"uint32","nodeType":"ElementaryTypeName","src":"2069:6:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"name":"ShortOrder","nameLocation":"1967:10:76","nodeType":"StructDefinition","scope":19528,"src":"1960:131:76","visibility":"public"},{"constant":true,"id":18690,"mutability":"constant","name":"_SIGNATURE_VERIFIER_MUXER_INTERFACE","nameLocation":"2122:35:76","nodeType":"VariableDeclaration","scope":19528,"src":"2097:73:76","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":18688,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2097:6:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"value":{"hexValue":"30783632616638646332","id":18689,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2160:10:76","typeDescriptions":{"typeIdentifier":"t_rational_1655672258_by_1","typeString":"int_const 1655672258"},"value":"0x62af8dc2"},"visibility":"internal"},{"constant":false,"id":18695,"mutability":"immutable","name":"_sellKind","nameLocation":"2203:9:76","nodeType":"VariableDeclaration","scope":19528,"src":"2176:56:76","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18691,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2176:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"73656c6c","id":18693,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2225:6:76","typeDescriptions":{"typeIdentifier":"t_stringliteral_f3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775","typeString":"literal_string \"sell\""},"value":"sell"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_f3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775","typeString":"literal_string \"sell\""}],"id":18692,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2215:9:76","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":18694,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2215:17:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":18700,"mutability":"immutable","name":"_tokenBalance","nameLocation":"2265:13:76","nodeType":"VariableDeclaration","scope":19528,"src":"2238:61:76","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18696,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2238:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"6572633230","id":18698,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2291:7:76","typeDescriptions":{"typeIdentifier":"t_stringliteral_5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9","typeString":"literal_string \"erc20\""},"value":"erc20"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9","typeString":"literal_string \"erc20\""}],"id":18697,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2281:9:76","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":18699,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2281:18:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"functionSelector":"93504c52","id":18703,"mutability":"immutable","name":"composableCow","nameLocation":"2338:13:76","nodeType":"VariableDeclaration","scope":19528,"src":"2306:45:76","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"},"typeName":{"id":18702,"nodeType":"UserDefinedTypeName","pathNode":{"id":18701,"name":"IComposableCow","nameLocations":["2306:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":326,"src":"2306:14:76"},"referencedDeclaration":326,"src":"2306:14:76","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"visibility":"public"},{"constant":false,"functionSelector":"9b552cc2","id":18705,"mutability":"immutable","name":"vaultRelayer","nameLocation":"2382:12:76","nodeType":"VariableDeclaration","scope":19528,"src":"2357:37:76","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18704,"name":"address","nodeType":"ElementaryTypeName","src":"2357:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"8aebd348","id":18707,"mutability":"immutable","name":"appData","nameLocation":"2425:7:76","nodeType":"VariableDeclaration","scope":19528,"src":"2400:32:76","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18706,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2400:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"constant":false,"id":18713,"mutability":"mutable","name":"_orders","nameLocation":"2562:7:76","nodeType":"VariableDeclaration","scope":19528,"src":"2511:58:76","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_struct$_ShortOrder_$18687_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder)"},"typeName":{"id":18712,"keyName":"token","keyNameLocation":"2526:5:76","keyType":{"id":18709,"nodeType":"UserDefinedTypeName","pathNode":{"id":18708,"name":"IERC20","nameLocations":["2519:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2519:6:76"},"referencedDeclaration":10576,"src":"2519:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"2511:41:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_struct$_ShortOrder_$18687_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder)"},"valueName":"order","valueNameLocation":"2546:5:76","valueType":{"id":18711,"nodeType":"UserDefinedTypeName","pathNode":{"id":18710,"name":"ShortOrder","nameLocations":["2535:10:76"],"nodeType":"IdentifierPath","referencedDeclaration":18687,"src":"2535:10:76"},"referencedDeclaration":18687,"src":"2535:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"}}},"visibility":"internal"},{"body":{"id":18749,"nodeType":"Block","src":"2883:116:76","statements":[{"expression":{"id":18739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18737,"name":"composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18703,"src":"2893:13:76","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18738,"name":"_composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18719,"src":"2909:14:76","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"src":"2893:30:76","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"id":18740,"nodeType":"ExpressionStatement","src":"2893:30:76"},{"expression":{"id":18743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18741,"name":"vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18705,"src":"2933:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18742,"name":"_cowVaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18721,"src":"2948:16:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2933:31:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18744,"nodeType":"ExpressionStatement","src":"2933:31:76"},{"expression":{"id":18747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18745,"name":"appData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18707,"src":"2974:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18746,"name":"_appData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18723,"src":"2984:8:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2974:18:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":18748,"nodeType":"ExpressionStatement","src":"2974:18:76"}]},"id":18750,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":18730,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18727,"src":"2813:8:76","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":18731,"kind":"baseConstructorSpecifier","modifierName":{"id":18729,"name":"Version","nameLocations":["2805:7:76"],"nodeType":"IdentifierPath","referencedDeclaration":4999,"src":"2805:7:76"},"nodeType":"ModifierInvocation","src":"2805:17:76"},{"arguments":[{"id":18733,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18716,"src":"2847:19:76","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},{"id":18734,"name":"_initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18725,"src":"2868:13:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":18735,"kind":"baseConstructorSpecifier","modifierName":{"id":18732,"name":"FeeBurnerAuthentication","nameLocations":["2823:23:76"],"nodeType":"IdentifierPath","referencedDeclaration":19845,"src":"2823:23:76"},"nodeType":"ModifierInvocation","src":"2823:59:76"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":18728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18716,"mutability":"mutable","name":"_protocolFeeSweeper","nameLocation":"2617:19:76","nodeType":"VariableDeclaration","scope":18750,"src":"2597:39:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":18715,"nodeType":"UserDefinedTypeName","pathNode":{"id":18714,"name":"IProtocolFeeSweeper","nameLocations":["2597:19:76"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"2597:19:76"},"referencedDeclaration":1137,"src":"2597:19:76","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"visibility":"internal"},{"constant":false,"id":18719,"mutability":"mutable","name":"_composableCow","nameLocation":"2661:14:76","nodeType":"VariableDeclaration","scope":18750,"src":"2646:29:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"},"typeName":{"id":18718,"nodeType":"UserDefinedTypeName","pathNode":{"id":18717,"name":"IComposableCow","nameLocations":["2646:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":326,"src":"2646:14:76"},"referencedDeclaration":326,"src":"2646:14:76","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"visibility":"internal"},{"constant":false,"id":18721,"mutability":"mutable","name":"_cowVaultRelayer","nameLocation":"2693:16:76","nodeType":"VariableDeclaration","scope":18750,"src":"2685:24:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18720,"name":"address","nodeType":"ElementaryTypeName","src":"2685:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18723,"mutability":"mutable","name":"_appData","nameLocation":"2727:8:76","nodeType":"VariableDeclaration","scope":18750,"src":"2719:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18722,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2719:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":18725,"mutability":"mutable","name":"_initialOwner","nameLocation":"2753:13:76","nodeType":"VariableDeclaration","scope":18750,"src":"2745:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18724,"name":"address","nodeType":"ElementaryTypeName","src":"2745:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18727,"mutability":"mutable","name":"_version","nameLocation":"2790:8:76","nodeType":"VariableDeclaration","scope":18750,"src":"2776:22:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":18726,"name":"string","nodeType":"ElementaryTypeName","src":"2776:6:76","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2587:217:76"},"returnParameters":{"id":18736,"nodeType":"ParameterList","parameters":[],"src":"2883:0:76"},"scope":19528,"src":"2576:423:76","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[526],"body":{"id":18764,"nodeType":"Block","src":"3331:42:76","statements":[{"expression":{"arguments":[{"id":18761,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18754,"src":"3358:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":18760,"name":"_getOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19375,"src":"3348:9:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10576_$returns$_t_struct$_GPv2Order_$357_memory_ptr_$","typeString":"function (contract IERC20) view returns (struct GPv2Order memory)"}},"id":18762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3348:18:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}},"functionReturnParameters":18759,"id":18763,"nodeType":"Return","src":"3341:25:76"}]},"documentation":{"id":18751,"nodeType":"StructuredDocumentation","src":"3218:33:76","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"6eba2b13","id":18765,"implemented":true,"kind":"function","modifiers":[],"name":"getOrder","nameLocation":"3265:8:76","nodeType":"FunctionDefinition","parameters":{"id":18755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18754,"mutability":"mutable","name":"tokenIn","nameLocation":"3281:7:76","nodeType":"VariableDeclaration","scope":18765,"src":"3274:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18753,"nodeType":"UserDefinedTypeName","pathNode":{"id":18752,"name":"IERC20","nameLocations":["3274:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3274:6:76"},"referencedDeclaration":10576,"src":"3274:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"3273:16:76"},"returnParameters":{"id":18759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18758,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18765,"src":"3313:16:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":18757,"nodeType":"UserDefinedTypeName","pathNode":{"id":18756,"name":"GPv2Order","nameLocations":["3313:9:76"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"3313:9:76"},"referencedDeclaration":357,"src":"3313:9:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"3312:18:76"},"scope":19528,"src":"3256:117:76","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[536],"body":{"id":18782,"nodeType":"Block","src":"3500:64:76","statements":[{"expression":{"id":18780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":18775,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18773,"src":"3511:6:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},null],"id":18776,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3510:10:76","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$__$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":18778,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18769,"src":"3549:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":18777,"name":"_getOrderStatusAndBalance","nodeType":"Identifier","overloadedDeclarations":[19392,19466],"referencedDeclaration":19392,"src":"3523:25:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10576_$returns$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"function (contract IERC20) view returns (enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"id":18779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3523:34:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"src":"3510:47:76","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18781,"nodeType":"ExpressionStatement","src":"3510:47:76"}]},"documentation":{"id":18766,"nodeType":"StructuredDocumentation","src":"3379:33:76","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"6f9d75cd","id":18783,"implemented":true,"kind":"function","modifiers":[],"name":"getOrderStatus","nameLocation":"3426:14:76","nodeType":"FunctionDefinition","parameters":{"id":18770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18769,"mutability":"mutable","name":"tokenIn","nameLocation":"3448:7:76","nodeType":"VariableDeclaration","scope":18783,"src":"3441:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18768,"nodeType":"UserDefinedTypeName","pathNode":{"id":18767,"name":"IERC20","nameLocations":["3441:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3441:6:76"},"referencedDeclaration":10576,"src":"3441:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"3440:16:76"},"returnParameters":{"id":18774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18773,"mutability":"mutable","name":"status","nameLocation":"3492:6:76","nodeType":"VariableDeclaration","scope":18783,"src":"3480:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":18772,"nodeType":"UserDefinedTypeName","pathNode":{"id":18771,"name":"OrderStatus","nameLocations":["3480:11:76"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"3480:11:76"},"referencedDeclaration":480,"src":"3480:11:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"}],"src":"3479:20:76"},"scope":19528,"src":"3417:147:76","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[547],"body":{"id":18870,"nodeType":"Block","src":"3717:689:76","statements":[{"assignments":[18798,18800],"declarations":[{"constant":false,"id":18798,"mutability":"mutable","name":"status","nameLocation":"3740:6:76","nodeType":"VariableDeclaration","scope":18870,"src":"3728:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":18797,"nodeType":"UserDefinedTypeName","pathNode":{"id":18796,"name":"OrderStatus","nameLocations":["3728:11:76"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"3728:11:76"},"referencedDeclaration":480,"src":"3728:11:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"},{"constant":false,"id":18800,"mutability":"mutable","name":"amount","nameLocation":"3756:6:76","nodeType":"VariableDeclaration","scope":18870,"src":"3748:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18799,"name":"uint256","nodeType":"ElementaryTypeName","src":"3748:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18804,"initialValue":{"arguments":[{"id":18802,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18787,"src":"3792:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":18801,"name":"_getOrderStatusAndBalance","nodeType":"Identifier","overloadedDeclarations":[19392,19466],"referencedDeclaration":19392,"src":"3766:25:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10576_$returns$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"function (contract IERC20) view returns (enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"id":18803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3766:34:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"3727:73:76"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"id":18808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18805,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18798,"src":"3815:6:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":18806,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"3825:11:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":18807,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3837:6:76","memberName":"Failed","nodeType":"MemberAccess","referencedDeclaration":479,"src":"3825:18:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"src":"3815:28:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18814,"nodeType":"IfStatement","src":"3811:98:76","trueBody":{"id":18813,"nodeType":"Block","src":"3845:64:76","statements":[{"errorCall":{"arguments":[{"id":18810,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18798,"src":"3891:6:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}],"id":18809,"name":"OrderHasUnexpectedStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":513,"src":"3866:24:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_OrderStatus_$480_$returns$_t_error_$","typeString":"function (enum ICowSwapFeeBurner.OrderStatus) pure returns (error)"}},"id":18811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3866:32:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18812,"nodeType":"RevertStatement","src":"3859:39:76"}]}},{"expression":{"arguments":[{"id":18816,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18789,"src":"3938:12:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18815,"name":"_checkMinAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19497,"src":"3919:18:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":18817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3919:32:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18818,"nodeType":"ExpressionStatement","src":"3919:32:76"},{"expression":{"arguments":[{"id":18820,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18791,"src":"3976:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18819,"name":"_checkDeadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19482,"src":"3961:14:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":18821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3961:24:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18822,"nodeType":"ExpressionStatement","src":"3961:24:76"},{"expression":{"id":18828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":18823,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18713,"src":"3996:7:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_struct$_ShortOrder_$18687_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":18825,"indexExpression":{"id":18824,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18787,"src":"4004:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3996:16:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"id":18826,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4013:12:76","memberName":"minAmountOut","nodeType":"MemberAccess","referencedDeclaration":18684,"src":"3996:29:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18827,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18789,"src":"4028:12:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3996:44:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18829,"nodeType":"ExpressionStatement","src":"3996:44:76"},{"expression":{"id":18838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":18830,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18713,"src":"4050:7:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_struct$_ShortOrder_$18687_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":18832,"indexExpression":{"id":18831,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18787,"src":"4058:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4050:16:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"id":18833,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4067:8:76","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":18686,"src":"4050:25:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":18836,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18791,"src":"4085:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18835,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4078:6:76","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":18834,"name":"uint32","nodeType":"ElementaryTypeName","src":"4078:6:76","typeDescriptions":{}}},"id":18837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4078:16:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"4050:44:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":18839,"nodeType":"ExpressionStatement","src":"4050:44:76"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":18844,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4198:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}],"id":18843,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4190:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18842,"name":"address","nodeType":"ElementaryTypeName","src":"4190:7:76","typeDescriptions":{}}},"id":18845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4190:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18846,"name":"vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18705,"src":"4205:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18840,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18787,"src":"4172:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":18841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4180:9:76","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":10553,"src":"4172:17:76","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":18847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4172:46:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":18848,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18800,"src":"4221:6:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4172:55:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18858,"nodeType":"IfStatement","src":"4168:128:76","trueBody":{"id":18857,"nodeType":"Block","src":"4229:67:76","statements":[{"expression":{"arguments":[{"id":18853,"name":"vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18705,"src":"4264:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18854,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18800,"src":"4278:6:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18850,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18787,"src":"4243:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":18852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4251:12:76","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":10850,"src":"4243:20:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":18855,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4243:42:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18856,"nodeType":"ExpressionStatement","src":"4243:42:76"}]}},{"expression":{"arguments":[{"id":18860,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18787,"src":"4322:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":18859,"name":"_createCowOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19527,"src":"4306:15:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$returns$__$","typeString":"function (contract IERC20)"}},"id":18861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4306:24:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18862,"nodeType":"ExpressionStatement","src":"4306:24:76"},{"eventCall":{"arguments":[{"id":18864,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18787,"src":"4359:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18865,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18800,"src":"4368:6:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18866,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18789,"src":"4376:12:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18867,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18791,"src":"4390:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18863,"name":"OrderRetried","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":492,"src":"4346:12:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC20_$10576_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256,uint256,uint256)"}},"id":18868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4346:53:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18869,"nodeType":"EmitStatement","src":"4341:58:76"}]},"documentation":{"id":18784,"nodeType":"StructuredDocumentation","src":"3570:33:76","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"d83b06a4","id":18871,"implemented":true,"kind":"function","modifiers":[{"id":18794,"kind":"modifierInvocation","modifierName":{"id":18793,"name":"onlyFeeRecipientOrOwner","nameLocations":["3693:23:76"],"nodeType":"IdentifierPath","referencedDeclaration":19814,"src":"3693:23:76"},"nodeType":"ModifierInvocation","src":"3693:23:76"}],"name":"retryOrder","nameLocation":"3617:10:76","nodeType":"FunctionDefinition","parameters":{"id":18792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18787,"mutability":"mutable","name":"tokenIn","nameLocation":"3635:7:76","nodeType":"VariableDeclaration","scope":18871,"src":"3628:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18786,"nodeType":"UserDefinedTypeName","pathNode":{"id":18785,"name":"IERC20","nameLocations":["3628:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3628:6:76"},"referencedDeclaration":10576,"src":"3628:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18789,"mutability":"mutable","name":"minAmountOut","nameLocation":"3652:12:76","nodeType":"VariableDeclaration","scope":18871,"src":"3644:20:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18788,"name":"uint256","nodeType":"ElementaryTypeName","src":"3644:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18791,"mutability":"mutable","name":"deadline","nameLocation":"3674:8:76","nodeType":"VariableDeclaration","scope":18871,"src":"3666:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18790,"name":"uint256","nodeType":"ElementaryTypeName","src":"3666:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3627:56:76"},"returnParameters":{"id":18795,"nodeType":"ParameterList","parameters":[],"src":"3717:0:76"},"scope":19528,"src":"3608:798:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[556],"body":{"id":18907,"nodeType":"Block","src":"4538:248:76","statements":[{"assignments":[18884,18886],"declarations":[{"constant":false,"id":18884,"mutability":"mutable","name":"status","nameLocation":"4561:6:76","nodeType":"VariableDeclaration","scope":18907,"src":"4549:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":18883,"nodeType":"UserDefinedTypeName","pathNode":{"id":18882,"name":"OrderStatus","nameLocations":["4549:11:76"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"4549:11:76"},"referencedDeclaration":480,"src":"4549:11:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"},{"constant":false,"id":18886,"mutability":"mutable","name":"amount","nameLocation":"4577:6:76","nodeType":"VariableDeclaration","scope":18907,"src":"4569:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18885,"name":"uint256","nodeType":"ElementaryTypeName","src":"4569:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18890,"initialValue":{"arguments":[{"id":18888,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18875,"src":"4613:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":18887,"name":"_getOrderStatusAndBalance","nodeType":"Identifier","overloadedDeclarations":[19392,19466],"referencedDeclaration":19392,"src":"4587:25:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10576_$returns$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"function (contract IERC20) view returns (enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"id":18889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4587:34:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4548:73:76"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"id":18894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18891,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18884,"src":"4636:6:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":18892,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"4646:11:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":18893,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4658:6:76","memberName":"Failed","nodeType":"MemberAccess","referencedDeclaration":479,"src":"4646:18:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"src":"4636:28:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18900,"nodeType":"IfStatement","src":"4632:98:76","trueBody":{"id":18899,"nodeType":"Block","src":"4666:64:76","statements":[{"errorCall":{"arguments":[{"id":18896,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18884,"src":"4712:6:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}],"id":18895,"name":"OrderHasUnexpectedStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":513,"src":"4687:24:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_OrderStatus_$480_$returns$_t_error_$","typeString":"function (enum ICowSwapFeeBurner.OrderStatus) pure returns (error)"}},"id":18897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4687:32:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18898,"nodeType":"RevertStatement","src":"4680:39:76"}]}},{"expression":{"arguments":[{"id":18902,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18875,"src":"4753:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18903,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18877,"src":"4762:8:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18904,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18886,"src":"4772:6:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18901,"name":"_cancelOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18969,"src":"4740:12:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":18905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4740:39:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18906,"nodeType":"ExpressionStatement","src":"4740:39:76"}]},"documentation":{"id":18872,"nodeType":"StructuredDocumentation","src":"4412:33:76","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"60e092c6","id":18908,"implemented":true,"kind":"function","modifiers":[{"id":18880,"kind":"modifierInvocation","modifierName":{"id":18879,"name":"onlyFeeRecipientOrOwner","nameLocations":["4514:23:76"],"nodeType":"IdentifierPath","referencedDeclaration":19814,"src":"4514:23:76"},"nodeType":"ModifierInvocation","src":"4514:23:76"}],"name":"cancelOrder","nameLocation":"4459:11:76","nodeType":"FunctionDefinition","parameters":{"id":18878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18875,"mutability":"mutable","name":"tokenIn","nameLocation":"4478:7:76","nodeType":"VariableDeclaration","scope":18908,"src":"4471:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18874,"nodeType":"UserDefinedTypeName","pathNode":{"id":18873,"name":"IERC20","nameLocations":["4471:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4471:6:76"},"referencedDeclaration":10576,"src":"4471:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18877,"mutability":"mutable","name":"receiver","nameLocation":"4495:8:76","nodeType":"VariableDeclaration","scope":18908,"src":"4487:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18876,"name":"address","nodeType":"ElementaryTypeName","src":"4487:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4470:34:76"},"returnParameters":{"id":18881,"nodeType":"ParameterList","parameters":[],"src":"4538:0:76"},"scope":19528,"src":"4450:336:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[565],"body":{"id":18931,"nodeType":"Block","src":"4927:82:76","statements":[{"expression":{"arguments":[{"id":18920,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18912,"src":"4950:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18921,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18914,"src":"4959:8:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":18926,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4995:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}],"id":18925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4987:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18924,"name":"address","nodeType":"ElementaryTypeName","src":"4987:7:76","typeDescriptions":{}}},"id":18927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4987:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18922,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18912,"src":"4969:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":18923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4977:9:76","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10533,"src":"4969:17:76","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":18928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4969:32:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18919,"name":"_cancelOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18969,"src":"4937:12:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":18929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4937:65:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18930,"nodeType":"ExpressionStatement","src":"4937:65:76"}]},"documentation":{"id":18909,"nodeType":"StructuredDocumentation","src":"4792:33:76","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"68bce712","id":18932,"implemented":true,"kind":"function","modifiers":[{"id":18917,"kind":"modifierInvocation","modifierName":{"id":18916,"name":"onlyFeeRecipientOrOwner","nameLocations":["4903:23:76"],"nodeType":"IdentifierPath","referencedDeclaration":19814,"src":"4903:23:76"},"nodeType":"ModifierInvocation","src":"4903:23:76"}],"name":"emergencyCancelOrder","nameLocation":"4839:20:76","nodeType":"FunctionDefinition","parameters":{"id":18915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18912,"mutability":"mutable","name":"tokenIn","nameLocation":"4867:7:76","nodeType":"VariableDeclaration","scope":18932,"src":"4860:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18911,"nodeType":"UserDefinedTypeName","pathNode":{"id":18910,"name":"IERC20","nameLocations":["4860:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4860:6:76"},"referencedDeclaration":10576,"src":"4860:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18914,"mutability":"mutable","name":"receiver","nameLocation":"4884:8:76","nodeType":"VariableDeclaration","scope":18932,"src":"4876:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18913,"name":"address","nodeType":"ElementaryTypeName","src":"4876:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4859:34:76"},"returnParameters":{"id":18918,"nodeType":"ParameterList","parameters":[],"src":"4927:0:76"},"scope":19528,"src":"4830:179:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18968,"nodeType":"Block","src":"5096:203:76","statements":[{"expression":{"arguments":[{"id":18945,"name":"vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18705,"src":"5127:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":18946,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5141:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":18942,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18935,"src":"5106:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":18944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5114:12:76","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":10850,"src":"5106:20:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":18947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5106:37:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18948,"nodeType":"ExpressionStatement","src":"5106:37:76"},{"expression":{"id":18952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"5153:23:76","subExpression":{"baseExpression":{"id":18949,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18713,"src":"5160:7:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_struct$_ShortOrder_$18687_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":18951,"indexExpression":{"id":18950,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18935,"src":"5168:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5160:16:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18953,"nodeType":"ExpressionStatement","src":"5153:23:76"},{"expression":{"arguments":[{"id":18957,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18935,"src":"5210:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18958,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18937,"src":"5219:8:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18959,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18939,"src":"5229:6:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18954,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11066,"src":"5187:9:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeERC20_$11066_$","typeString":"type(library SafeERC20)"}},"id":18956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5197:12:76","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10647,"src":"5187:22:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":18960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5187:49:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18961,"nodeType":"ExpressionStatement","src":"5187:49:76"},{"eventCall":{"arguments":[{"id":18963,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18935,"src":"5266:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18964,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18939,"src":"5275:6:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18965,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18937,"src":"5283:8:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18962,"name":"OrderCanceled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":502,"src":"5252:13:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$returns$__$","typeString":"function (contract IERC20,uint256,address)"}},"id":18966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5252:40:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18967,"nodeType":"EmitStatement","src":"5247:45:76"}]},"id":18969,"implemented":true,"kind":"function","modifiers":[],"name":"_cancelOrder","nameLocation":"5024:12:76","nodeType":"FunctionDefinition","parameters":{"id":18940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18935,"mutability":"mutable","name":"tokenIn","nameLocation":"5044:7:76","nodeType":"VariableDeclaration","scope":18969,"src":"5037:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18934,"nodeType":"UserDefinedTypeName","pathNode":{"id":18933,"name":"IERC20","nameLocations":["5037:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"5037:6:76"},"referencedDeclaration":10576,"src":"5037:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18937,"mutability":"mutable","name":"receiver","nameLocation":"5061:8:76","nodeType":"VariableDeclaration","scope":18969,"src":"5053:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18936,"name":"address","nodeType":"ElementaryTypeName","src":"5053:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18939,"mutability":"mutable","name":"amount","nameLocation":"5079:6:76","nodeType":"VariableDeclaration","scope":18969,"src":"5071:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18938,"name":"uint256","nodeType":"ElementaryTypeName","src":"5071:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5036:50:76"},"returnParameters":{"id":18941,"nodeType":"ParameterList","parameters":[],"src":"5096:0:76"},"scope":19528,"src":"5015:284:76","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[947],"body":{"id":19004,"nodeType":"Block","src":"5839:248:76","statements":[{"expression":{"arguments":[{"id":18994,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18972,"src":"5868:4:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18995,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18975,"src":"5886:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18996,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18977,"src":"5908:21:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18997,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18980,"src":"5943:11:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":18998,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18982,"src":"5968:23:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18999,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18984,"src":"6005:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19000,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18986,"src":"6028:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":19001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6050:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":18993,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19125,"src":"5849:5:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address,uint256,bool)"}},"id":19002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5849:231:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19003,"nodeType":"ExpressionStatement","src":"5849:231:76"}]},"documentation":{"id":18970,"nodeType":"StructuredDocumentation","src":"5519:34:76","text":"@inheritdoc IProtocolFeeBurner"},"functionSelector":"de557a32","id":19005,"implemented":true,"kind":"function","modifiers":[{"id":18989,"kind":"modifierInvocation","modifierName":{"id":18988,"name":"onlyProtocolFeeSweeper","nameLocations":["5803:22:76"],"nodeType":"IdentifierPath","referencedDeclaration":19793,"src":"5803:22:76"},"nodeType":"ModifierInvocation","src":"5803:22:76"},{"id":18991,"kind":"modifierInvocation","modifierName":{"id":18990,"name":"nonReentrant","nameLocations":["5826:12:76"],"nodeType":"IdentifierPath","referencedDeclaration":6967,"src":"5826:12:76"},"nodeType":"ModifierInvocation","src":"5826:12:76"}],"name":"burn","nameLocation":"5567:4:76","nodeType":"FunctionDefinition","parameters":{"id":18987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18972,"mutability":"mutable","name":"pool","nameLocation":"5589:4:76","nodeType":"VariableDeclaration","scope":19005,"src":"5581:12:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18971,"name":"address","nodeType":"ElementaryTypeName","src":"5581:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18975,"mutability":"mutable","name":"feeToken","nameLocation":"5610:8:76","nodeType":"VariableDeclaration","scope":19005,"src":"5603:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18974,"nodeType":"UserDefinedTypeName","pathNode":{"id":18973,"name":"IERC20","nameLocations":["5603:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"5603:6:76"},"referencedDeclaration":10576,"src":"5603:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18977,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"5636:21:76","nodeType":"VariableDeclaration","scope":19005,"src":"5628:29:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18976,"name":"uint256","nodeType":"ElementaryTypeName","src":"5628:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18980,"mutability":"mutable","name":"targetToken","nameLocation":"5674:11:76","nodeType":"VariableDeclaration","scope":19005,"src":"5667:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":18979,"nodeType":"UserDefinedTypeName","pathNode":{"id":18978,"name":"IERC20","nameLocations":["5667:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"5667:6:76"},"referencedDeclaration":10576,"src":"5667:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18982,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"5703:23:76","nodeType":"VariableDeclaration","scope":19005,"src":"5695:31:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18981,"name":"uint256","nodeType":"ElementaryTypeName","src":"5695:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18984,"mutability":"mutable","name":"recipient","nameLocation":"5744:9:76","nodeType":"VariableDeclaration","scope":19005,"src":"5736:17:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18983,"name":"address","nodeType":"ElementaryTypeName","src":"5736:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18986,"mutability":"mutable","name":"deadline","nameLocation":"5771:8:76","nodeType":"VariableDeclaration","scope":19005,"src":"5763:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18985,"name":"uint256","nodeType":"ElementaryTypeName","src":"5763:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5571:214:76"},"returnParameters":{"id":18992,"nodeType":"ParameterList","parameters":[],"src":"5839:0:76"},"scope":19528,"src":"5558:529:76","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":19124,"nodeType":"Block","src":"6351:1294:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"id":19028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19026,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19015,"src":"6365:11:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":19027,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19010,"src":"6380:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"6365:23:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19034,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19012,"src":"6497:14:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19035,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6515:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6497:19:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19042,"nodeType":"IfStatement","src":"6493:107:76","trueBody":{"id":19041,"nodeType":"Block","src":"6518:82:76","statements":[{"errorCall":{"arguments":[{"hexValue":"46656520746f6b656e20616d6f756e74206973207a65726f","id":19038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6562:26:76","typeDescriptions":{"typeIdentifier":"t_stringliteral_b445072e620860f3c79effa94f581ab6f5797ea12e86e8179c8038523c5a8d3b","typeString":"literal_string \"Fee token amount is zero\""},"value":"Fee token amount is zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_b445072e620860f3c79effa94f581ab6f5797ea12e86e8179c8038523c5a8d3b","typeString":"literal_string \"Fee token amount is zero\""}],"id":19037,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":507,"src":"6539:22:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":19039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6539:50:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19040,"nodeType":"RevertStatement","src":"6532:57:76"}]}},"id":19043,"nodeType":"IfStatement","src":"6361:239:76","trueBody":{"id":19033,"nodeType":"Block","src":"6390:97:76","statements":[{"errorCall":{"arguments":[{"hexValue":"46656520746f6b656e20616e642074617267657420746f6b656e20617265207468652073616d65","id":19030,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6434:41:76","typeDescriptions":{"typeIdentifier":"t_stringliteral_6f1e2122d98657c4f58b636400b0d4c24b5cda47622dbb3183030f888f336810","typeString":"literal_string \"Fee token and target token are the same\""},"value":"Fee token and target token are the same"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_6f1e2122d98657c4f58b636400b0d4c24b5cda47622dbb3183030f888f336810","typeString":"literal_string \"Fee token and target token are the same\""}],"id":19029,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":507,"src":"6411:22:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":19031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6411:65:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19032,"nodeType":"RevertStatement","src":"6404:72:76"}]}},{"expression":{"arguments":[{"id":19045,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19017,"src":"6629:23:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19044,"name":"_checkMinAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19497,"src":"6610:18:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":19046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6610:43:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19047,"nodeType":"ExpressionStatement","src":"6610:43:76"},{"expression":{"arguments":[{"id":19049,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19021,"src":"6678:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19048,"name":"_checkDeadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19482,"src":"6663:14:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":19050,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6663:24:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19051,"nodeType":"ExpressionStatement","src":"6663:24:76"},{"condition":{"id":19052,"name":"pullFeeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19023,"src":"6702:12:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19066,"nodeType":"IfStatement","src":"6698:111:76","trueBody":{"id":19065,"nodeType":"Block","src":"6716:93:76","statements":[{"expression":{"arguments":[{"expression":{"id":19056,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6756:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6760:6:76","memberName":"sender","nodeType":"MemberAccess","src":"6756:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":19060,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6776:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}],"id":19059,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6768:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19058,"name":"address","nodeType":"ElementaryTypeName","src":"6768:7:76","typeDescriptions":{}}},"id":19061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6768:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19062,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19012,"src":"6783:14:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19053,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19010,"src":"6730:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":19055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6739:16:76","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":10674,"src":"6730:25:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":19063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6730:68:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19064,"nodeType":"ExpressionStatement","src":"6730:68:76"}]}},{"assignments":[19069,null],"declarations":[{"constant":false,"id":19069,"mutability":"mutable","name":"status","nameLocation":"6832:6:76","nodeType":"VariableDeclaration","scope":19124,"src":"6820:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":19068,"nodeType":"UserDefinedTypeName","pathNode":{"id":19067,"name":"OrderStatus","nameLocations":["6820:11:76"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"6820:11:76"},"referencedDeclaration":480,"src":"6820:11:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"},null],"id":19074,"initialValue":{"arguments":[{"id":19071,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19010,"src":"6870:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":19072,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19012,"src":"6880:14:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19070,"name":"_getOrderStatusAndBalance","nodeType":"Identifier","overloadedDeclarations":[19392,19466],"referencedDeclaration":19466,"src":"6844:25:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10576_$_t_uint256_$returns$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"function (contract IERC20,uint256) view returns (enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"id":19073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6844:51:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"6819:76:76"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"id":19078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19075,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19069,"src":"6909:6:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":19076,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"6919:11:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":19077,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6931:11:76","memberName":"Nonexistent","nodeType":"MemberAccess","referencedDeclaration":476,"src":"6919:23:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"src":"6909:33:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"id":19082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19079,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19069,"src":"6946:6:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":19080,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"6956:11:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":19081,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6968:6:76","memberName":"Filled","nodeType":"MemberAccess","referencedDeclaration":478,"src":"6956:18:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"src":"6946:28:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6909:65:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19089,"nodeType":"IfStatement","src":"6905:310:76","trueBody":{"id":19088,"nodeType":"Block","src":"6976:239:76","statements":[{"errorCall":{"arguments":[{"id":19085,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19069,"src":"7197:6:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}],"id":19084,"name":"OrderHasUnexpectedStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":513,"src":"7172:24:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_OrderStatus_$480_$returns$_t_error_$","typeString":"function (enum ICowSwapFeeBurner.OrderStatus) pure returns (error)"}},"id":19086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7172:32:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19087,"nodeType":"RevertStatement","src":"7165:39:76"}]}},{"expression":{"arguments":[{"id":19091,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19010,"src":"7241:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":19090,"name":"_createCowOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19527,"src":"7225:15:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$returns$__$","typeString":"function (contract IERC20)"}},"id":19092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7225:25:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19093,"nodeType":"ExpressionStatement","src":"7225:25:76"},{"expression":{"arguments":[{"id":19097,"name":"vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18705,"src":"7283:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19098,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19012,"src":"7297:14:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19094,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19010,"src":"7261:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":19096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7270:12:76","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":10850,"src":"7261:21:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":19099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7261:51:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19100,"nodeType":"ExpressionStatement","src":"7261:51:76"},{"expression":{"id":19113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":19101,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18713,"src":"7323:7:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_struct$_ShortOrder_$18687_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":19103,"indexExpression":{"id":19102,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19010,"src":"7331:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7323:17:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19105,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19015,"src":"7378:11:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":19106,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19019,"src":"7413:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19107,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19017,"src":"7450:23:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":19110,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19021,"src":"7504:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19109,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7497:6:76","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":19108,"name":"uint32","nodeType":"ElementaryTypeName","src":"7497:6:76","typeDescriptions":{}}},"id":19111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7497:16:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":19104,"name":"ShortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18687,"src":"7343:10:76","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ShortOrder_$18687_storage_ptr_$","typeString":"type(struct CowSwapFeeBurner.ShortOrder storage pointer)"}},"id":19112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["7368:8:76","7403:8:76","7436:12:76","7487:8:76"],"names":["tokenOut","receiver","minAmountOut","deadline"],"nodeType":"FunctionCall","src":"7343:181:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"src":"7323:201:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"id":19114,"nodeType":"ExpressionStatement","src":"7323:201:76"},{"eventCall":{"arguments":[{"id":19116,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19007,"src":"7558:4:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19117,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19010,"src":"7564:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":19118,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19012,"src":"7574:14:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19119,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19015,"src":"7590:11:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":19120,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19017,"src":"7603:23:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19121,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19019,"src":"7628:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":19115,"name":"ProtocolFeeBurned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":914,"src":"7540:17:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address)"}},"id":19122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7540:98:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19123,"nodeType":"EmitStatement","src":"7535:103:76"}]},"id":19125,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"6102:5:76","nodeType":"FunctionDefinition","parameters":{"id":19024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19007,"mutability":"mutable","name":"pool","nameLocation":"6125:4:76","nodeType":"VariableDeclaration","scope":19125,"src":"6117:12:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19006,"name":"address","nodeType":"ElementaryTypeName","src":"6117:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19010,"mutability":"mutable","name":"feeToken","nameLocation":"6146:8:76","nodeType":"VariableDeclaration","scope":19125,"src":"6139:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19009,"nodeType":"UserDefinedTypeName","pathNode":{"id":19008,"name":"IERC20","nameLocations":["6139:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6139:6:76"},"referencedDeclaration":10576,"src":"6139:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":19012,"mutability":"mutable","name":"feeTokenAmount","nameLocation":"6172:14:76","nodeType":"VariableDeclaration","scope":19125,"src":"6164:22:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19011,"name":"uint256","nodeType":"ElementaryTypeName","src":"6164:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19015,"mutability":"mutable","name":"targetToken","nameLocation":"6203:11:76","nodeType":"VariableDeclaration","scope":19125,"src":"6196:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19014,"nodeType":"UserDefinedTypeName","pathNode":{"id":19013,"name":"IERC20","nameLocations":["6196:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6196:6:76"},"referencedDeclaration":10576,"src":"6196:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":19017,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"6232:23:76","nodeType":"VariableDeclaration","scope":19125,"src":"6224:31:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19016,"name":"uint256","nodeType":"ElementaryTypeName","src":"6224:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19019,"mutability":"mutable","name":"recipient","nameLocation":"6273:9:76","nodeType":"VariableDeclaration","scope":19125,"src":"6265:17:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19018,"name":"address","nodeType":"ElementaryTypeName","src":"6265:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19021,"mutability":"mutable","name":"deadline","nameLocation":"6300:8:76","nodeType":"VariableDeclaration","scope":19125,"src":"6292:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19020,"name":"uint256","nodeType":"ElementaryTypeName","src":"6292:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19023,"mutability":"mutable","name":"pullFeeToken","nameLocation":"6323:12:76","nodeType":"VariableDeclaration","scope":19125,"src":"6318:17:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19022,"name":"bool","nodeType":"ElementaryTypeName","src":"6318:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6107:234:76"},"returnParameters":{"id":19025,"nodeType":"ParameterList","parameters":[],"src":"6351:0:76"},"scope":19528,"src":"6093:1552:76","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[453],"body":{"id":19159,"nodeType":"Block","src":"8100:112:76","statements":[{"assignments":[19144],"declarations":[{"constant":false,"id":19144,"mutability":"mutable","name":"tokenIn","nameLocation":"8117:7:76","nodeType":"VariableDeclaration","scope":19159,"src":"8110:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19143,"nodeType":"UserDefinedTypeName","pathNode":{"id":19142,"name":"IERC20","nameLocations":["8110:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"8110:6:76"},"referencedDeclaration":10576,"src":"8110:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":19154,"initialValue":{"arguments":[{"arguments":[{"id":19148,"name":"staticInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19134,"src":"8145:11:76","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"components":[{"id":19150,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8159:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19149,"name":"address","nodeType":"ElementaryTypeName","src":"8159:7:76","typeDescriptions":{}}}],"id":19151,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"8158:9:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}],"expression":{"id":19146,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8134:3:76","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19147,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8138:6:76","memberName":"decode","nodeType":"MemberAccess","src":"8134:10:76","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":19152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8134:34:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":19145,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"8127:6:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10576_$","typeString":"type(contract IERC20)"}},"id":19153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8127:42:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"8110:59:76"},{"expression":{"arguments":[{"id":19156,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19144,"src":"8197:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":19155,"name":"_getOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19375,"src":"8187:9:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10576_$returns$_t_struct$_GPv2Order_$357_memory_ptr_$","typeString":"function (contract IERC20) view returns (struct GPv2Order memory)"}},"id":19157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8187:18:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}},"functionReturnParameters":19141,"id":19158,"nodeType":"Return","src":"8180:25:76"}]},"documentation":{"id":19126,"nodeType":"StructuredDocumentation","src":"7867:45:76","text":"@inheritdoc ICowConditionalOrderGenerator"},"functionSelector":"b8296fc4","id":19160,"implemented":true,"kind":"function","modifiers":[],"name":"getTradeableOrder","nameLocation":"7926:17:76","nodeType":"FunctionDefinition","parameters":{"id":19137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19128,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19160,"src":"7953:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19127,"name":"address","nodeType":"ElementaryTypeName","src":"7953:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19130,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19160,"src":"7970:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19129,"name":"address","nodeType":"ElementaryTypeName","src":"7970:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19132,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19160,"src":"7987:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19131,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7987:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19134,"mutability":"mutable","name":"staticInput","nameLocation":"8019:11:76","nodeType":"VariableDeclaration","scope":19160,"src":"8004:26:76","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":19133,"name":"bytes","nodeType":"ElementaryTypeName","src":"8004:5:76","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19136,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19160,"src":"8040:14:76","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":19135,"name":"bytes","nodeType":"ElementaryTypeName","src":"8040:5:76","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7943:117:76"},"returnParameters":{"id":19141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19140,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19160,"src":"8082:16:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":19139,"nodeType":"UserDefinedTypeName","pathNode":{"id":19138,"name":"GPv2Order","nameLocations":["8082:9:76"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"8082:9:76"},"referencedDeclaration":357,"src":"8082:9:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"8081:18:76"},"scope":19528,"src":"7917:295:76","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[417],"body":{"id":19225,"nodeType":"Block","src":"8506:418:76","statements":[{"assignments":[19183],"declarations":[{"constant":false,"id":19183,"mutability":"mutable","name":"savedOrder","nameLocation":"8533:10:76","nodeType":"VariableDeclaration","scope":19225,"src":"8516:27:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":19182,"nodeType":"UserDefinedTypeName","pathNode":{"id":19181,"name":"GPv2Order","nameLocations":["8516:9:76"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"8516:9:76"},"referencedDeclaration":357,"src":"8516:9:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"id":19191,"initialValue":{"arguments":[{"id":19185,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19163,"src":"8564:5:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19186,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19165,"src":"8571:6:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19187,"name":"ctx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19171,"src":"8579:3:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":19188,"name":"staticInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19173,"src":"8584:11:76","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":19189,"name":"offchainInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19175,"src":"8597:13:76","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":19184,"name":"getTradeableOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19160,"src":"8546:17:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_bytes32_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$returns$_t_struct$_GPv2Order_$357_memory_ptr_$","typeString":"function (address,address,bytes32,bytes calldata,bytes calldata) view returns (struct GPv2Order memory)"}},"id":19190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8546:65:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}},"nodeType":"VariableDeclarationStatement","src":"8516:95:76"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19192,"name":"_order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19178,"src":"8626:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_calldata_ptr","typeString":"struct GPv2Order calldata"}},"id":19193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8633:9:76","memberName":"buyAmount","nodeType":"MemberAccess","referencedDeclaration":342,"src":"8626:16:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":19194,"name":"savedOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19183,"src":"8645:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}},"id":19195,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8656:9:76","memberName":"buyAmount","nodeType":"MemberAccess","referencedDeclaration":342,"src":"8645:20:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8626:39:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19205,"nodeType":"IfStatement","src":"8622:109:76","trueBody":{"id":19204,"nodeType":"Block","src":"8667:64:76","statements":[{"expression":{"id":19202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19197,"name":"savedOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19183,"src":"8681:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}},"id":19199,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8692:9:76","memberName":"buyAmount","nodeType":"MemberAccess","referencedDeclaration":342,"src":"8681:20:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":19200,"name":"_order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19178,"src":"8704:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_calldata_ptr","typeString":"struct GPv2Order calldata"}},"id":19201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8711:9:76","memberName":"buyAmount","nodeType":"MemberAccess","referencedDeclaration":342,"src":"8704:16:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8681:39:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19203,"nodeType":"ExpressionStatement","src":"8681:39:76"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":19218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":19209,"name":"savedOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19183,"src":"8766:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}],"expression":{"id":19207,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8755:3:76","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19208,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8759:6:76","memberName":"encode","nodeType":"MemberAccess","src":"8755:10:76","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":19210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8755:22:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":19206,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8745:9:76","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":19211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8745:33:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"arguments":[{"id":19215,"name":"_order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19178,"src":"8803:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_calldata_ptr","typeString":"struct GPv2Order calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_GPv2Order_$357_calldata_ptr","typeString":"struct GPv2Order calldata"}],"expression":{"id":19213,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8792:3:76","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19214,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8796:6:76","memberName":"encode","nodeType":"MemberAccess","src":"8792:10:76","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":19216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8792:18:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":19212,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8782:9:76","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":19217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8782:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8745:66:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19224,"nodeType":"IfStatement","src":"8741:177:76","trueBody":{"id":19223,"nodeType":"Block","src":"8813:105:76","statements":[{"errorCall":{"arguments":[{"hexValue":"566572696679206f7264657220646f6573206e6f74206d617463682077697468206578697374696e67206f72646572","id":19220,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8857:49:76","typeDescriptions":{"typeIdentifier":"t_stringliteral_3f6784218a78441e96d7b8e76c001b98428b2ffe16b12c01b01268c6807c247f","typeString":"literal_string \"Verify order does not match with existing order\""},"value":"Verify order does not match with existing order"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_3f6784218a78441e96d7b8e76c001b98428b2ffe16b12c01b01268c6807c247f","typeString":"literal_string \"Verify order does not match with existing order\""}],"id":19219,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":507,"src":"8834:22:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":19221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8834:73:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19222,"nodeType":"RevertStatement","src":"8827:80:76"}]}}]},"documentation":{"id":19161,"nodeType":"StructuredDocumentation","src":"8218:36:76","text":"@inheritdoc ICowConditionalOrder"},"functionSelector":"14a2a784","id":19226,"implemented":true,"kind":"function","modifiers":[],"name":"verify","nameLocation":"8268:6:76","nodeType":"FunctionDefinition","parameters":{"id":19179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19163,"mutability":"mutable","name":"owner","nameLocation":"8292:5:76","nodeType":"VariableDeclaration","scope":19226,"src":"8284:13:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19162,"name":"address","nodeType":"ElementaryTypeName","src":"8284:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19165,"mutability":"mutable","name":"sender","nameLocation":"8315:6:76","nodeType":"VariableDeclaration","scope":19226,"src":"8307:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19164,"name":"address","nodeType":"ElementaryTypeName","src":"8307:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19167,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19226,"src":"8331:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19166,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8331:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19169,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19226,"src":"8348:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19168,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8348:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19171,"mutability":"mutable","name":"ctx","nameLocation":"8373:3:76","nodeType":"VariableDeclaration","scope":19226,"src":"8365:11:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19170,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8365:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19173,"mutability":"mutable","name":"staticInput","nameLocation":"8401:11:76","nodeType":"VariableDeclaration","scope":19226,"src":"8386:26:76","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":19172,"name":"bytes","nodeType":"ElementaryTypeName","src":"8386:5:76","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19175,"mutability":"mutable","name":"offchainInput","nameLocation":"8437:13:76","nodeType":"VariableDeclaration","scope":19226,"src":"8422:28:76","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":19174,"name":"bytes","nodeType":"ElementaryTypeName","src":"8422:5:76","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19178,"mutability":"mutable","name":"_order","nameLocation":"8479:6:76","nodeType":"VariableDeclaration","scope":19226,"src":"8460:25:76","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_calldata_ptr","typeString":"struct GPv2Order"},"typeName":{"id":19177,"nodeType":"UserDefinedTypeName","pathNode":{"id":19176,"name":"GPv2Order","nameLocations":["8460:9:76"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"8460:9:76"},"referencedDeclaration":357,"src":"8460:9:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"8274:217:76"},"returnParameters":{"id":19180,"nodeType":"ParameterList","parameters":[],"src":"8506:0:76"},"scope":19528,"src":"8259:665:76","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[9585],"body":{"id":19277,"nodeType":"Block","src":"9268:530:76","statements":[{"assignments":[19238,19241],"declarations":[{"constant":false,"id":19238,"mutability":"mutable","name":"order","nameLocation":"9296:5:76","nodeType":"VariableDeclaration","scope":19277,"src":"9279:22:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":19237,"nodeType":"UserDefinedTypeName","pathNode":{"id":19236,"name":"GPv2Order","nameLocations":["9279:9:76"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"9279:9:76"},"referencedDeclaration":357,"src":"9279:9:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"},{"constant":false,"id":19241,"mutability":"mutable","name":"payload","nameLocation":"9333:7:76","nodeType":"VariableDeclaration","scope":19277,"src":"9303:37:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Payload_$291_memory_ptr","typeString":"struct IComposableCow.Payload"},"typeName":{"id":19240,"nodeType":"UserDefinedTypeName","pathNode":{"id":19239,"name":"IComposableCow.Payload","nameLocations":["9303:14:76","9318:7:76"],"nodeType":"IdentifierPath","referencedDeclaration":291,"src":"9303:22:76"},"referencedDeclaration":291,"src":"9303:22:76","typeDescriptions":{"typeIdentifier":"t_struct$_Payload_$291_storage_ptr","typeString":"struct IComposableCow.Payload"}},"visibility":"internal"}],"id":19250,"initialValue":{"arguments":[{"id":19244,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19231,"src":"9368:9:76","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":19245,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":357,"src":"9392:9:76","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_GPv2Order_$357_storage_ptr_$","typeString":"type(struct GPv2Order storage pointer)"}},{"expression":{"id":19246,"name":"IComposableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":326,"src":"9403:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IComposableCow_$326_$","typeString":"type(contract IComposableCow)"}},"id":19247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9418:7:76","memberName":"Payload","nodeType":"MemberAccess","referencedDeclaration":291,"src":"9403:22:76","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Payload_$291_storage_ptr_$","typeString":"type(struct IComposableCow.Payload storage pointer)"}}],"id":19248,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9391:35:76","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_struct$_GPv2Order_$357_storage_ptr_$_$_t_type$_t_struct$_Payload_$291_storage_ptr_$_$","typeString":"tuple(type(struct GPv2Order storage pointer),type(struct IComposableCow.Payload storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_struct$_GPv2Order_$357_storage_ptr_$_$_t_type$_t_struct$_Payload_$291_storage_ptr_$_$","typeString":"tuple(type(struct GPv2Order storage pointer),type(struct IComposableCow.Payload storage pointer))"}],"expression":{"id":19242,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"9344:3:76","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19243,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9348:6:76","memberName":"decode","nodeType":"MemberAccess","src":"9344:10:76","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":19249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9344:92:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_struct$_GPv2Order_$357_memory_ptr_$_t_struct$_Payload_$291_memory_ptr_$","typeString":"tuple(struct GPv2Order memory,struct IComposableCow.Payload memory)"}},"nodeType":"VariableDeclarationStatement","src":"9278:158:76"},{"expression":{"arguments":[{"arguments":[{"id":19255,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9572:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}],"id":19254,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9564:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19253,"name":"address","nodeType":"ElementaryTypeName","src":"9564:7:76","typeDescriptions":{}}},"id":19256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9564:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19257,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9595:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9599:6:76","memberName":"sender","nodeType":"MemberAccess","src":"9595:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19259,"name":"_hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19229,"src":"9623:5:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19260,"name":"composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18703,"src":"9646:13:76","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"id":19261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9660:15:76","memberName":"domainSeparator","nodeType":"MemberAccess","referencedDeclaration":305,"src":"9646:29:76","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":19262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9646:31:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"hexValue":"30","id":19265,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9703:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":19264,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9695:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":19263,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9695:7:76","typeDescriptions":{}}},"id":19266,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9695:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":19269,"name":"order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19238,"src":"9734:5:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}],"expression":{"id":19267,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"9723:3:76","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19268,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9727:6:76","memberName":"encode","nodeType":"MemberAccess","src":"9723:10:76","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":19270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9723:17:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":19273,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19241,"src":"9769:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_Payload_$291_memory_ptr","typeString":"struct IComposableCow.Payload memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Payload_$291_memory_ptr","typeString":"struct IComposableCow.Payload memory"}],"expression":{"id":19271,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"9758:3:76","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19272,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9762:6:76","memberName":"encode","nodeType":"MemberAccess","src":"9758:10:76","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":19274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9758:19:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":19251,"name":"composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18703,"src":"9512:13:76","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"id":19252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9526:20:76","memberName":"isValidSafeSignature","nodeType":"MemberAccess","referencedDeclaration":325,"src":"9512:34:76","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes4_$","typeString":"function (address,address,bytes32,bytes32,bytes32,bytes memory,bytes memory) view external returns (bytes4)"}},"id":19275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9512:279:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"functionReturnParameters":19235,"id":19276,"nodeType":"Return","src":"9493:298:76"}]},"documentation":{"id":19227,"nodeType":"StructuredDocumentation","src":"9143:24:76","text":"@inheritdoc IERC1271"},"functionSelector":"1626ba7e","id":19278,"implemented":true,"kind":"function","modifiers":[],"name":"isValidSignature","nameLocation":"9181:16:76","nodeType":"FunctionDefinition","parameters":{"id":19232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19229,"mutability":"mutable","name":"_hash","nameLocation":"9206:5:76","nodeType":"VariableDeclaration","scope":19278,"src":"9198:13:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19228,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9198:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19231,"mutability":"mutable","name":"signature","nameLocation":"9226:9:76","nodeType":"VariableDeclaration","scope":19278,"src":"9213:22:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19230,"name":"bytes","nodeType":"ElementaryTypeName","src":"9213:5:76","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9197:39:76"},"returnParameters":{"id":19235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19234,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19278,"src":"9260:6:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":19233,"name":"bytes4","nodeType":"ElementaryTypeName","src":"9260:6:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"9259:8:76"},"scope":19528,"src":"9172:626:76","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[12705],"body":{"id":19322,"nodeType":"Block","src":"9906:504:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":19288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19286,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19281,"src":"10011:11:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":19287,"name":"_SIGNATURE_VERIFIER_MUXER_INTERFACE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18690,"src":"10026:35:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10011:50:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19293,"nodeType":"IfStatement","src":"10007:123:76","trueBody":{"id":19292,"nodeType":"Block","src":"10063:67:76","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19289,"name":"InterfaceIsSignatureVerifierMuxer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":516,"src":"10084:33:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10084:35:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19291,"nodeType":"RevertStatement","src":"10077:42:76"}]}},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":19299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19294,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19281,"src":"10159:11:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":19296,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"10179:20:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrder_$418_$","typeString":"type(contract ICowConditionalOrder)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrder_$418_$","typeString":"type(contract ICowConditionalOrder)"}],"id":19295,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10174:4:76","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":19297,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10174:26:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_ICowConditionalOrder_$418","typeString":"type(contract ICowConditionalOrder)"}},"id":19298,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10201:11:76","memberName":"interfaceId","nodeType":"MemberAccess","src":"10174:38:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10159:53:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":19305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19300,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19281,"src":"10228:11:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":19302,"name":"ICowConditionalOrderGenerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":454,"src":"10248:29:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrderGenerator_$454_$","typeString":"type(contract ICowConditionalOrderGenerator)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrderGenerator_$454_$","typeString":"type(contract ICowConditionalOrderGenerator)"}],"id":19301,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10243:4:76","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":19303,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10243:35:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_ICowConditionalOrderGenerator_$454","typeString":"type(contract ICowConditionalOrderGenerator)"}},"id":19304,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10279:11:76","memberName":"interfaceId","nodeType":"MemberAccess","src":"10243:47:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10228:62:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10159:131:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":19312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19307,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19281,"src":"10306:11:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":19309,"name":"IERC1271","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9586,"src":"10326:8:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC1271_$9586_$","typeString":"type(contract IERC1271)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC1271_$9586_$","typeString":"type(contract IERC1271)"}],"id":19308,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10321:4:76","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":19310,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10321:14:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC1271_$9586","typeString":"type(contract IERC1271)"}},"id":19311,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10336:11:76","memberName":"interfaceId","nodeType":"MemberAccess","src":"10321:26:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10306:41:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10159:188:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":19319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19314,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19281,"src":"10363:11:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":19316,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12706,"src":"10383:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC165_$12706_$","typeString":"type(contract IERC165)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC165_$12706_$","typeString":"type(contract IERC165)"}],"id":19315,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10378:4:76","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":19317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10378:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC165_$12706","typeString":"type(contract IERC165)"}},"id":19318,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10392:11:76","memberName":"interfaceId","nodeType":"MemberAccess","src":"10378:25:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10363:40:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10159:244:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":19285,"id":19321,"nodeType":"Return","src":"10140:263:76"}]},"documentation":{"id":19279,"nodeType":"StructuredDocumentation","src":"9804:23:76","text":"@inheritdoc IERC165"},"functionSelector":"01ffc9a7","id":19323,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"9841:17:76","nodeType":"FunctionDefinition","parameters":{"id":19282,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19281,"mutability":"mutable","name":"interfaceId","nameLocation":"9866:11:76","nodeType":"VariableDeclaration","scope":19323,"src":"9859:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":19280,"name":"bytes4","nodeType":"ElementaryTypeName","src":"9859:6:76","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"9858:20:76"},"returnParameters":{"id":19285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19284,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19323,"src":"9900:4:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19283,"name":"bool","nodeType":"ElementaryTypeName","src":"9900:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9899:6:76"},"scope":19528,"src":"9832:578:76","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":19374,"nodeType":"Block","src":"10704:753:76","statements":[{"assignments":[19334],"declarations":[{"constant":false,"id":19334,"mutability":"mutable","name":"shortOrder","nameLocation":"10732:10:76","nodeType":"VariableDeclaration","scope":19374,"src":"10714:28:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"},"typeName":{"id":19333,"nodeType":"UserDefinedTypeName","pathNode":{"id":19332,"name":"ShortOrder","nameLocations":["10714:10:76"],"nodeType":"IdentifierPath","referencedDeclaration":18687,"src":"10714:10:76"},"referencedDeclaration":18687,"src":"10714:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"}},"visibility":"internal"}],"id":19338,"initialValue":{"baseExpression":{"id":19335,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18713,"src":"10745:7:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_struct$_ShortOrder_$18687_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":19337,"indexExpression":{"id":19336,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19326,"src":"10753:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10745:16:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"nodeType":"VariableDeclarationStatement","src":"10714:47:76"},{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":19342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19339,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19334,"src":"10776:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":19340,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10787:8:76","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":18686,"src":"10776:19:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19341,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10799:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10776:24:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19348,"nodeType":"IfStatement","src":"10772:99:76","trueBody":{"id":19347,"nodeType":"Block","src":"10802:69:76","statements":[{"errorCall":{"arguments":[{"hexValue":"4f7264657220646f6573206e6f74206578697374","id":19344,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10837:22:76","typeDescriptions":{"typeIdentifier":"t_stringliteral_df3ce9a0158242e1c2e1bf99ceae8d44147108f9cc20b5e90ddb75a5171b5b80","typeString":"literal_string \"Order does not exist\""},"value":"Order does not exist"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_df3ce9a0158242e1c2e1bf99ceae8d44147108f9cc20b5e90ddb75a5171b5b80","typeString":"literal_string \"Order does not exist\""}],"id":19343,"name":"OrderNotValid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":372,"src":"10823:13:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":19345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10823:37:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19346,"nodeType":"RevertStatement","src":"10816:44:76"}]}},{"expression":{"arguments":[{"id":19350,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19326,"src":"10939:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"expression":{"id":19351,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19334,"src":"10974:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":19352,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10985:8:76","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":18680,"src":"10974:19:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"expression":{"id":19353,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19334,"src":"11021:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":19354,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11032:8:76","memberName":"receiver","nodeType":"MemberAccess","referencedDeclaration":18682,"src":"11021:19:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":19359,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11096:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}],"id":19358,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11088:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19357,"name":"address","nodeType":"ElementaryTypeName","src":"11088:7:76","typeDescriptions":{}}},"id":19360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11088:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19355,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19326,"src":"11070:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":19356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11078:9:76","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10533,"src":"11070:17:76","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11070:32:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19362,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19334,"src":"11131:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":19363,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11142:12:76","memberName":"minAmountOut","nodeType":"MemberAccess","referencedDeclaration":18684,"src":"11131:23:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19364,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19334,"src":"11181:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":19365,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11192:8:76","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":18686,"src":"11181:19:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":19366,"name":"appData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18707,"src":"11227:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"30","id":19367,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11263:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":19368,"name":"_sellKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18695,"src":"11288:9:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"74727565","id":19369,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11334:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":19370,"name":"_tokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18700,"src":"11374:13:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":19371,"name":"_tokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18700,"src":"11422:13:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":19349,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":357,"src":"10900:9:76","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_GPv2Order_$357_storage_ptr_$","typeString":"type(struct GPv2Order storage pointer)"}},"id":19372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["10928:9:76","10964:8:76","11011:8:76","11058:10:76","11120:9:76","11172:7:76","11218:7:76","11252:9:76","11282:4:76","11315:17:76","11356:16:76","11405:15:76"],"names":["sellToken","buyToken","receiver","sellAmount","buyAmount","validTo","appData","feeAmount","kind","partiallyFillable","sellTokenBalance","buyTokenBalance"],"nodeType":"FunctionCall","src":"10900:550:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}},"functionReturnParameters":19331,"id":19373,"nodeType":"Return","src":"10881:569:76"}]},"id":19375,"implemented":true,"kind":"function","modifiers":[],"name":"_getOrder","nameLocation":"10638:9:76","nodeType":"FunctionDefinition","parameters":{"id":19327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19326,"mutability":"mutable","name":"tokenIn","nameLocation":"10655:7:76","nodeType":"VariableDeclaration","scope":19375,"src":"10648:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19325,"nodeType":"UserDefinedTypeName","pathNode":{"id":19324,"name":"IERC20","nameLocations":["10648:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"10648:6:76"},"referencedDeclaration":10576,"src":"10648:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"10647:16:76"},"returnParameters":{"id":19331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19330,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19375,"src":"10686:16:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":19329,"nodeType":"UserDefinedTypeName","pathNode":{"id":19328,"name":"GPv2Order","nameLocations":["10686:9:76"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"10686:9:76"},"referencedDeclaration":357,"src":"10686:9:76","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"10685:18:76"},"scope":19528,"src":"10629:828:76","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":19391,"nodeType":"Block","src":"11558:61:76","statements":[{"expression":{"arguments":[{"id":19387,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19378,"src":"11601:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"hexValue":"30","id":19388,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11610:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":19386,"name":"_getOrderStatusAndBalance","nodeType":"Identifier","overloadedDeclarations":[19392,19466],"referencedDeclaration":19466,"src":"11575:25:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10576_$_t_uint256_$returns$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"function (contract IERC20,uint256) view returns (enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"id":19389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11575:37:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"functionReturnParameters":19385,"id":19390,"nodeType":"Return","src":"11568:44:76"}]},"id":19392,"implemented":true,"kind":"function","modifiers":[],"name":"_getOrderStatusAndBalance","nameLocation":"11472:25:76","nodeType":"FunctionDefinition","parameters":{"id":19379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19378,"mutability":"mutable","name":"tokenIn","nameLocation":"11505:7:76","nodeType":"VariableDeclaration","scope":19392,"src":"11498:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19377,"nodeType":"UserDefinedTypeName","pathNode":{"id":19376,"name":"IERC20","nameLocations":["11498:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"11498:6:76"},"referencedDeclaration":10576,"src":"11498:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"11497:16:76"},"returnParameters":{"id":19385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19382,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19392,"src":"11536:11:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":19381,"nodeType":"UserDefinedTypeName","pathNode":{"id":19380,"name":"OrderStatus","nameLocations":["11536:11:76"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"11536:11:76"},"referencedDeclaration":480,"src":"11536:11:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"},{"constant":false,"id":19384,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19392,"src":"11549:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19383,"name":"uint256","nodeType":"ElementaryTypeName","src":"11549:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11535:22:76"},"scope":19528,"src":"11463:156:76","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":19465,"nodeType":"Block","src":"11764:970:76","statements":[{"assignments":[19407],"declarations":[{"constant":false,"id":19407,"mutability":"mutable","name":"shortOrder","nameLocation":"11793:10:76","nodeType":"VariableDeclaration","scope":19465,"src":"11774:29:76","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"},"typeName":{"id":19406,"nodeType":"UserDefinedTypeName","pathNode":{"id":19405,"name":"ShortOrder","nameLocations":["11774:10:76"],"nodeType":"IdentifierPath","referencedDeclaration":18687,"src":"11774:10:76"},"referencedDeclaration":18687,"src":"11774:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"}},"visibility":"internal"}],"id":19411,"initialValue":{"baseExpression":{"id":19408,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18713,"src":"11806:7:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10576_$_t_struct$_ShortOrder_$18687_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":19410,"indexExpression":{"id":19409,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19395,"src":"11814:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11806:16:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"nodeType":"VariableDeclarationStatement","src":"11774:48:76"},{"assignments":[19413],"declarations":[{"constant":false,"id":19413,"mutability":"mutable","name":"deadline","nameLocation":"11841:8:76","nodeType":"VariableDeclaration","scope":19465,"src":"11833:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19412,"name":"uint256","nodeType":"ElementaryTypeName","src":"11833:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19416,"initialValue":{"expression":{"id":19414,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19407,"src":"11852:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18687_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder storage pointer"}},"id":19415,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11863:8:76","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":18686,"src":"11852:19:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"11833:38:76"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19417,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19413,"src":"11886:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19418,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11898:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11886:13:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19426,"nodeType":"IfStatement","src":"11882:147:76","trueBody":{"id":19425,"nodeType":"Block","src":"11901:128:76","statements":[{"expression":{"components":[{"expression":{"id":19420,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"11991:11:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":19421,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12003:11:76","memberName":"Nonexistent","nodeType":"MemberAccess","referencedDeclaration":476,"src":"11991:23:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},{"hexValue":"30","id":19422,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12016:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":19423,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"11990:28:76","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_rational_0_by_1_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,int_const 0)"}},"functionReturnParameters":19404,"id":19424,"nodeType":"Return","src":"11983:35:76"}]}},{"assignments":[19428],"declarations":[{"constant":false,"id":19428,"mutability":"mutable","name":"balance","nameLocation":"12138:7:76","nodeType":"VariableDeclaration","scope":19465,"src":"12130:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19427,"name":"uint256","nodeType":"ElementaryTypeName","src":"12130:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19438,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":19433,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12174:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}],"id":19432,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12166:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19431,"name":"address","nodeType":"ElementaryTypeName","src":"12166:7:76","typeDescriptions":{}}},"id":19434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12166:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19429,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19395,"src":"12148:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":19430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12156:9:76","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10533,"src":"12148:17:76","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12148:32:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":19436,"name":"balanceDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19397,"src":"12183:12:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12148:47:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12130:65:76"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19439,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19428,"src":"12209:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19440,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12220:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12209:12:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19448,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"12454:5:76","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":19449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12460:9:76","memberName":"timestamp","nodeType":"MemberAccess","src":"12454:15:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":19450,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19413,"src":"12472:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12454:26:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19458,"nodeType":"IfStatement","src":"12450:182:76","trueBody":{"id":19457,"nodeType":"Block","src":"12482:150:76","statements":[{"expression":{"components":[{"expression":{"id":19452,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"12593:11:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":19453,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12605:6:76","memberName":"Failed","nodeType":"MemberAccess","referencedDeclaration":479,"src":"12593:18:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},{"id":19454,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19428,"src":"12613:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19455,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12592:29:76","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"functionReturnParameters":19404,"id":19456,"nodeType":"Return","src":"12585:36:76"}]}},"id":19459,"nodeType":"IfStatement","src":"12205:427:76","trueBody":{"id":19447,"nodeType":"Block","src":"12223:221:76","statements":[{"expression":{"components":[{"expression":{"id":19442,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"12405:11:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":19443,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12417:6:76","memberName":"Filled","nodeType":"MemberAccess","referencedDeclaration":478,"src":"12405:18:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},{"id":19444,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19428,"src":"12425:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19445,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12404:29:76","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"functionReturnParameters":19404,"id":19446,"nodeType":"Return","src":"12397:36:76"}]}},{"expression":{"components":[{"expression":{"id":19460,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"12699:11:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":19461,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12711:6:76","memberName":"Active","nodeType":"MemberAccess","referencedDeclaration":477,"src":"12699:18:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},{"id":19462,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19428,"src":"12719:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19463,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12698:29:76","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"functionReturnParameters":19404,"id":19464,"nodeType":"Return","src":"12691:36:76"}]},"id":19466,"implemented":true,"kind":"function","modifiers":[],"name":"_getOrderStatusAndBalance","nameLocation":"11634:25:76","nodeType":"FunctionDefinition","parameters":{"id":19398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19395,"mutability":"mutable","name":"tokenIn","nameLocation":"11676:7:76","nodeType":"VariableDeclaration","scope":19466,"src":"11669:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19394,"nodeType":"UserDefinedTypeName","pathNode":{"id":19393,"name":"IERC20","nameLocations":["11669:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"11669:6:76"},"referencedDeclaration":10576,"src":"11669:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":19397,"mutability":"mutable","name":"balanceDelta","nameLocation":"11701:12:76","nodeType":"VariableDeclaration","scope":19466,"src":"11693:20:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19396,"name":"uint256","nodeType":"ElementaryTypeName","src":"11693:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11659:60:76"},"returnParameters":{"id":19404,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19401,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19466,"src":"11742:11:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":19400,"nodeType":"UserDefinedTypeName","pathNode":{"id":19399,"name":"OrderStatus","nameLocations":["11742:11:76"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"11742:11:76"},"referencedDeclaration":480,"src":"11742:11:76","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"},{"constant":false,"id":19403,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19466,"src":"11755:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19402,"name":"uint256","nodeType":"ElementaryTypeName","src":"11755:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11741:22:76"},"scope":19528,"src":"11625:1109:76","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":19481,"nodeType":"Block","src":"12795:129:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19471,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"12809:5:76","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":19472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12815:9:76","memberName":"timestamp","nodeType":"MemberAccess","src":"12809:15:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":19473,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19468,"src":"12827:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12809:26:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19480,"nodeType":"IfStatement","src":"12805:113:76","trueBody":{"id":19479,"nodeType":"Block","src":"12837:81:76","statements":[{"errorCall":{"arguments":[{"hexValue":"446561646c696e6520697320696e207468652070617374","id":19476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12881:25:76","typeDescriptions":{"typeIdentifier":"t_stringliteral_374fef2b87445dfdf2e706ba431b442bbacba974d397ef19ac6a95faebd7ce25","typeString":"literal_string \"Deadline is in the past\""},"value":"Deadline is in the past"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_374fef2b87445dfdf2e706ba431b442bbacba974d397ef19ac6a95faebd7ce25","typeString":"literal_string \"Deadline is in the past\""}],"id":19475,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":507,"src":"12858:22:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":19477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12858:49:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19478,"nodeType":"RevertStatement","src":"12851:56:76"}]}}]},"id":19482,"implemented":true,"kind":"function","modifiers":[],"name":"_checkDeadline","nameLocation":"12749:14:76","nodeType":"FunctionDefinition","parameters":{"id":19469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19468,"mutability":"mutable","name":"deadline","nameLocation":"12772:8:76","nodeType":"VariableDeclaration","scope":19482,"src":"12764:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19467,"name":"uint256","nodeType":"ElementaryTypeName","src":"12764:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12763:18:76"},"returnParameters":{"id":19470,"nodeType":"ParameterList","parameters":[],"src":"12795:0:76"},"scope":19528,"src":"12740:184:76","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":19496,"nodeType":"Block","src":"12993:119:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19487,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19484,"src":"13007:12:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13023:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13007:17:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19495,"nodeType":"IfStatement","src":"13003:103:76","trueBody":{"id":19494,"nodeType":"Block","src":"13026:80:76","statements":[{"errorCall":{"arguments":[{"hexValue":"4d696e20616d6f756e74206f7574206973207a65726f","id":19491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13070:24:76","typeDescriptions":{"typeIdentifier":"t_stringliteral_383d66dc4e6ecb7962cb5aa0d856bd222cb47a243a02d6668869f54ee5707233","typeString":"literal_string \"Min amount out is zero\""},"value":"Min amount out is zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_383d66dc4e6ecb7962cb5aa0d856bd222cb47a243a02d6668869f54ee5707233","typeString":"literal_string \"Min amount out is zero\""}],"id":19490,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":507,"src":"13047:22:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":19492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13047:48:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19493,"nodeType":"RevertStatement","src":"13040:55:76"}]}}]},"id":19497,"implemented":true,"kind":"function","modifiers":[],"name":"_checkMinAmountOut","nameLocation":"12939:18:76","nodeType":"FunctionDefinition","parameters":{"id":19485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19484,"mutability":"mutable","name":"minAmountOut","nameLocation":"12966:12:76","nodeType":"VariableDeclaration","scope":19497,"src":"12958:20:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19483,"name":"uint256","nodeType":"ElementaryTypeName","src":"12958:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12957:22:76"},"returnParameters":{"id":19486,"nodeType":"ParameterList","parameters":[],"src":"12993:0:76"},"scope":19528,"src":"12930:182:76","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":19526,"nodeType":"Block","src":"13167:283:76","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":19511,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"13311:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19528","typeString":"contract CowSwapFeeBurner"}],"id":19510,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13303:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19509,"name":"address","nodeType":"ElementaryTypeName","src":"13303:7:76","typeDescriptions":{}}},"id":19512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13303:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19508,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"13282:20:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrder_$418_$","typeString":"type(contract ICowConditionalOrder)"}},"id":19513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13282:35:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICowConditionalOrder_$418","typeString":"contract ICowConditionalOrder"}},{"arguments":[{"hexValue":"30","id":19516,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13349:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":19515,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13341:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":19514,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13341:7:76","typeDescriptions":{}}},"id":19517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13341:10:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":19520,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19500,"src":"13392:7:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"expression":{"id":19518,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"13381:3:76","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19519,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13385:6:76","memberName":"encode","nodeType":"MemberAccess","src":"13381:10:76","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":19521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13381:19:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ICowConditionalOrder_$418","typeString":"contract ICowConditionalOrder"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":19506,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"13211:20:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrder_$418_$","typeString":"type(contract ICowConditionalOrder)"}},"id":19507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13232:22:76","memberName":"ConditionalOrderParams","nodeType":"MemberAccess","referencedDeclaration":367,"src":"13211:43:76","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ConditionalOrderParams_$367_storage_ptr_$","typeString":"type(struct ICowConditionalOrder.ConditionalOrderParams storage pointer)"}},"id":19522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["13273:7:76","13335:4:76","13369:10:76"],"names":["handler","salt","staticData"],"nodeType":"FunctionCall","src":"13211:204:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_memory_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams memory"}},{"hexValue":"74727565","id":19523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"13429:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_memory_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":19503,"name":"composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18703,"src":"13177:13:76","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"id":19505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13191:6:76","memberName":"create","nodeType":"MemberAccess","referencedDeclaration":300,"src":"13177:20:76","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_ConditionalOrderParams_$367_memory_ptr_$_t_bool_$returns$__$","typeString":"function (struct ICowConditionalOrder.ConditionalOrderParams memory,bool) external"}},"id":19524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13177:266:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19525,"nodeType":"ExpressionStatement","src":"13177:266:76"}]},"id":19527,"implemented":true,"kind":"function","modifiers":[],"name":"_createCowOrder","nameLocation":"13127:15:76","nodeType":"FunctionDefinition","parameters":{"id":19501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19500,"mutability":"mutable","name":"tokenIn","nameLocation":"13150:7:76","nodeType":"VariableDeclaration","scope":19527,"src":"13143:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19499,"nodeType":"UserDefinedTypeName","pathNode":{"id":19498,"name":"IERC20","nameLocations":["13143:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"13143:6:76"},"referencedDeclaration":10576,"src":"13143:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"13142:16:76"},"returnParameters":{"id":19502,"nodeType":"ParameterList","parameters":[],"src":"13167:0:76"},"scope":19528,"src":"13118:332:76","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":19529,"src":"1814:11638:76","usedErrors":[372,377,384,391,396,507,513,516,924,927,6956,9352,9357,10614,19774,19777],"usedEvents":[436,492,502,914,9363,9501]}],"src":"46:13407:76"},"id":76},"contracts/ERC4626CowSwapFeeBurner.sol":{"ast":{"absolutePath":"contracts/ERC4626CowSwapFeeBurner.sol","exportedSymbols":{"CowSwapFeeBurner":[19528],"ERC4626CowSwapFeeBurner":[19756],"IComposableCow":[326],"IERC20":[10576],"IERC4626":[9846],"IProtocolFeeSweeper":[1137],"IVault":[2545],"PackedTokenBalance":[4869],"ReentrancyGuardTransient":[7012],"SafeERC20":[11066]},"id":19757,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":19530,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:77"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":19532,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19757,"sourceUnit":9847,"src":"72:75:77","symbolAliases":[{"foreign":{"id":19531,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"81:8:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":19534,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19757,"sourceUnit":11067,"src":"148:84:77","symbolAliases":[{"foreign":{"id":19533,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11066,"src":"157:9:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":19536,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19757,"sourceUnit":10577,"src":"233:72:77","symbolAliases":[{"foreign":{"id":19535,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"242:6:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","id":19538,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19757,"sourceUnit":327,"src":"307:108:77","symbolAliases":[{"foreign":{"id":19537,"name":"IComposableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":326,"src":"316:14:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":19540,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19757,"sourceUnit":1138,"src":"416:118:77","symbolAliases":[{"foreign":{"id":19539,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1137,"src":"425:19:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":19542,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19757,"sourceUnit":2546,"src":"535:81:77","symbolAliases":[{"foreign":{"id":19541,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"544:6:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":19544,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19757,"sourceUnit":7013,"src":"618:132:77","symbolAliases":[{"foreign":{"id":19543,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7012,"src":"631:24:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","id":19546,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19757,"sourceUnit":4870,"src":"751:111:77","symbolAliases":[{"foreign":{"id":19545,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4869,"src":"760:18:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/CowSwapFeeBurner.sol","file":"./CowSwapFeeBurner.sol","id":19548,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19757,"sourceUnit":19529,"src":"864:58:77","symbolAliases":[{"foreign":{"id":19547,"name":"CowSwapFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19528,"src":"873:16:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":19550,"name":"CowSwapFeeBurner","nameLocations":["1284:16:77"],"nodeType":"IdentifierPath","referencedDeclaration":19528,"src":"1284:16:77"},"id":19551,"nodeType":"InheritanceSpecifier","src":"1284:16:77"}],"canonicalName":"ERC4626CowSwapFeeBurner","contractDependencies":[],"contractKind":"contract","documentation":{"id":19549,"nodeType":"StructuredDocumentation","src":"924:323:77","text":" @title ERC4626CowSwapFeeBurner\n @notice A contract that burns ERC4626 protocol fee tokens using CowSwap, previously redeeming underlying assets.\n @dev The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function.\n Only one order per token is allowed at a time."},"fullyImplemented":true,"id":19756,"linearizedBaseContracts":[19756,19528,4999,34,7012,19845,9572,9486,12366,566,454,12706,418,948,9586],"name":"ERC4626CowSwapFeeBurner","nameLocation":"1257:23:77","nodeType":"ContractDefinition","nodes":[{"global":false,"id":19555,"libraryName":{"id":19552,"name":"SafeERC20","nameLocations":["1313:9:77"],"nodeType":"IdentifierPath","referencedDeclaration":11066,"src":"1313:9:77"},"nodeType":"UsingForDirective","src":"1307:27:77","typeName":{"id":19554,"nodeType":"UserDefinedTypeName","pathNode":{"id":19553,"name":"IERC20","nameLocations":["1327:6:77"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1327:6:77"},"referencedDeclaration":10576,"src":"1327:6:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}},{"documentation":{"id":19556,"nodeType":"StructuredDocumentation","src":"1340:35:77","text":"@notice The amount out is zero."},"errorSelector":"5db1dd1e","id":19561,"name":"AmountOutIsZero","nameLocation":"1386:15:77","nodeType":"ErrorDefinition","parameters":{"id":19560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19559,"mutability":"mutable","name":"token","nameLocation":"1409:5:77","nodeType":"VariableDeclaration","scope":19561,"src":"1402:12:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19558,"nodeType":"UserDefinedTypeName","pathNode":{"id":19557,"name":"IERC20","nameLocations":["1402:6:77"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1402:6:77"},"referencedDeclaration":10576,"src":"1402:6:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1401:14:77"},"src":"1380:36:77"},{"body":{"id":19586,"nodeType":"Block","src":"1758:64:77","statements":[]},"id":19587,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":19578,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19564,"src":"1668:19:77","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},{"id":19579,"name":"_composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19567,"src":"1689:14:77","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},{"id":19580,"name":"_cowVaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19569,"src":"1705:16:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19581,"name":"_appData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19571,"src":"1723:8:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":19582,"name":"_initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19573,"src":"1733:13:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19583,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19575,"src":"1748:8:77","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":19584,"kind":"baseConstructorSpecifier","modifierName":{"id":19577,"name":"CowSwapFeeBurner","nameLocations":["1651:16:77"],"nodeType":"IdentifierPath","referencedDeclaration":19528,"src":"1651:16:77"},"nodeType":"ModifierInvocation","src":"1651:106:77"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19564,"mutability":"mutable","name":"_protocolFeeSweeper","nameLocation":"1463:19:77","nodeType":"VariableDeclaration","scope":19587,"src":"1443:39:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":19563,"nodeType":"UserDefinedTypeName","pathNode":{"id":19562,"name":"IProtocolFeeSweeper","nameLocations":["1443:19:77"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"1443:19:77"},"referencedDeclaration":1137,"src":"1443:19:77","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"visibility":"internal"},{"constant":false,"id":19567,"mutability":"mutable","name":"_composableCow","nameLocation":"1507:14:77","nodeType":"VariableDeclaration","scope":19587,"src":"1492:29:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"},"typeName":{"id":19566,"nodeType":"UserDefinedTypeName","pathNode":{"id":19565,"name":"IComposableCow","nameLocations":["1492:14:77"],"nodeType":"IdentifierPath","referencedDeclaration":326,"src":"1492:14:77"},"referencedDeclaration":326,"src":"1492:14:77","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"visibility":"internal"},{"constant":false,"id":19569,"mutability":"mutable","name":"_cowVaultRelayer","nameLocation":"1539:16:77","nodeType":"VariableDeclaration","scope":19587,"src":"1531:24:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19568,"name":"address","nodeType":"ElementaryTypeName","src":"1531:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19571,"mutability":"mutable","name":"_appData","nameLocation":"1573:8:77","nodeType":"VariableDeclaration","scope":19587,"src":"1565:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19570,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1565:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19573,"mutability":"mutable","name":"_initialOwner","nameLocation":"1599:13:77","nodeType":"VariableDeclaration","scope":19587,"src":"1591:21:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19572,"name":"address","nodeType":"ElementaryTypeName","src":"1591:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19575,"mutability":"mutable","name":"_version","nameLocation":"1636:8:77","nodeType":"VariableDeclaration","scope":19587,"src":"1622:22:77","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":19574,"name":"string","nodeType":"ElementaryTypeName","src":"1622:6:77","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1433:217:77"},"returnParameters":{"id":19585,"nodeType":"ParameterList","parameters":[],"src":"1758:0:77"},"scope":19756,"src":"1422:400:77","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[19005],"body":{"id":19754,"nodeType":"Block","src":"3109:2098:77","statements":[{"assignments":[19614],"declarations":[{"constant":false,"id":19614,"mutability":"mutable","name":"erc4626Token","nameLocation":"3128:12:77","nodeType":"VariableDeclaration","scope":19754,"src":"3119:21:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":19613,"nodeType":"UserDefinedTypeName","pathNode":{"id":19612,"name":"IERC4626","nameLocations":["3119:8:77"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"3119:8:77"},"referencedDeclaration":9846,"src":"3119:8:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"id":19621,"initialValue":{"arguments":[{"arguments":[{"id":19618,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19593,"src":"3160:8:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":19617,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3152:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19616,"name":"address","nodeType":"ElementaryTypeName","src":"3152:7:77","typeDescriptions":{}}},"id":19619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3152:17:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19615,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"3143:8:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9846_$","typeString":"type(contract IERC4626)"}},"id":19620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3143:27:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"nodeType":"VariableDeclarationStatement","src":"3119:51:77"},{"assignments":[19624],"declarations":[{"constant":false,"id":19624,"mutability":"mutable","name":"underlyingToken","nameLocation":"3187:15:77","nodeType":"VariableDeclaration","scope":19754,"src":"3180:22:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19623,"nodeType":"UserDefinedTypeName","pathNode":{"id":19622,"name":"IERC20","nameLocations":["3180:6:77"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3180:6:77"},"referencedDeclaration":10576,"src":"3180:6:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":19630,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19626,"name":"erc4626Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19614,"src":"3212:12:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"id":19627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3225:5:77","memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":9715,"src":"3212:18:77","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":19628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3212:20:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19625,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"3205:6:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10576_$","typeString":"type(contract IERC20)"}},"id":19629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3205:28:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3180:53:77"},{"expression":{"arguments":[{"expression":{"id":19638,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3439:3:77","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3443:6:77","memberName":"sender","nodeType":"MemberAccess","src":"3439:10:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":19642,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3459:4:77","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}],"id":19641,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3451:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19640,"name":"address","nodeType":"ElementaryTypeName","src":"3451:7:77","typeDescriptions":{}}},"id":19643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3451:13:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19644,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"3466:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"arguments":[{"id":19634,"name":"erc4626Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19614,"src":"3407:12:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"id":19633,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3399:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19632,"name":"address","nodeType":"ElementaryTypeName","src":"3399:7:77","typeDescriptions":{}}},"id":19635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3399:21:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19631,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"3392:6:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10576_$","typeString":"type(contract IERC20)"}},"id":19636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3392:29:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":19637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3422:16:77","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":10674,"src":"3392:46:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":19645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3392:96:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19646,"nodeType":"ExpressionStatement","src":"3392:96:77"},{"assignments":[19648,19650],"declarations":[{"constant":false,"id":19648,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"3508:23:77","nodeType":"VariableDeclaration","scope":19754,"src":"3500:31:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19647,"name":"uint256","nodeType":"ElementaryTypeName","src":"3500:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19650,"mutability":"mutable","name":"minERC4626AmountOut","nameLocation":"3541:19:77","nodeType":"VariableDeclaration","scope":19754,"src":"3533:27:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19649,"name":"uint256","nodeType":"ElementaryTypeName","src":"3533:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19658,"initialValue":{"arguments":[{"arguments":[{"id":19655,"name":"encodedMinAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19600,"src":"3622:20:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19654,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3614:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":19653,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3614:7:77","typeDescriptions":{}}},"id":19656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3614:29:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":19651,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4869,"src":"3564:18:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$4869_$","typeString":"type(library PackedTokenBalance)"}},"id":19652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3583:17:77","memberName":"fromPackedBalance","nodeType":"MemberAccess","referencedDeclaration":4847,"src":"3564:36:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256,uint256)"}},"id":19657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3564:89:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"3499:154:77"},{"assignments":[19660],"declarations":[{"constant":false,"id":19660,"mutability":"mutable","name":"feeTokenBalanceBefore","nameLocation":"3672:21:77","nodeType":"VariableDeclaration","scope":19754,"src":"3664:29:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19659,"name":"uint256","nodeType":"ElementaryTypeName","src":"3664:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19668,"initialValue":{"arguments":[{"arguments":[{"id":19665,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3730:4:77","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}],"id":19664,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3722:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19663,"name":"address","nodeType":"ElementaryTypeName","src":"3722:7:77","typeDescriptions":{}}},"id":19666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3722:13:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19661,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19624,"src":"3696:15:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":19662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3712:9:77","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10533,"src":"3696:25:77","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3696:40:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3664:72:77"},{"expression":{"arguments":[{"id":19672,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"3767:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":19675,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3798:4:77","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}],"id":19674,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3790:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19673,"name":"address","nodeType":"ElementaryTypeName","src":"3790:7:77","typeDescriptions":{}}},"id":19676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3790:13:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":19679,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3813:4:77","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}],"id":19678,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3805:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19677,"name":"address","nodeType":"ElementaryTypeName","src":"3805:7:77","typeDescriptions":{}}},"id":19680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3805:13:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19669,"name":"erc4626Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19614,"src":"3747:12:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"id":19671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3760:6:77","memberName":"redeem","nodeType":"MemberAccess","referencedDeclaration":9845,"src":"3747:19:77","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) external returns (uint256)"}},"id":19681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3747:72:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19682,"nodeType":"ExpressionStatement","src":"3747:72:77"},{"assignments":[19684],"declarations":[{"constant":false,"id":19684,"mutability":"mutable","name":"feeTokenBalanceAfter","nameLocation":"3838:20:77","nodeType":"VariableDeclaration","scope":19754,"src":"3830:28:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19683,"name":"uint256","nodeType":"ElementaryTypeName","src":"3830:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19692,"initialValue":{"arguments":[{"arguments":[{"id":19689,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3895:4:77","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19756","typeString":"contract ERC4626CowSwapFeeBurner"}],"id":19688,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3887:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19687,"name":"address","nodeType":"ElementaryTypeName","src":"3887:7:77","typeDescriptions":{}}},"id":19690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3887:13:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19685,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19624,"src":"3861:15:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":19686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3877:9:77","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10533,"src":"3861:25:77","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3861:40:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3830:71:77"},{"expression":{"id":19697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19693,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"3911:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19694,"name":"feeTokenBalanceAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19684,"src":"3935:20:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":19695,"name":"feeTokenBalanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19660,"src":"3958:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3935:44:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3911:68:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19698,"nodeType":"ExpressionStatement","src":"3911:68:77"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19699,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"3994:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":19700,"name":"minERC4626AmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19650,"src":"4018:19:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3994:43:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19709,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"4159:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4184:1:77","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4159:26:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19717,"nodeType":"IfStatement","src":"4155:96:77","trueBody":{"id":19716,"nodeType":"Block","src":"4187:64:77","statements":[{"errorCall":{"arguments":[{"id":19713,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19624,"src":"4224:15:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":19712,"name":"AmountOutIsZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19561,"src":"4208:15:77","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$10576_$returns$_t_error_$","typeString":"function (contract IERC20) pure returns (error)"}},"id":19714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4208:32:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19715,"nodeType":"RevertStatement","src":"4201:39:77"}]}},"id":19718,"nodeType":"IfStatement","src":"3990:261:77","trueBody":{"id":19708,"nodeType":"Block","src":"4039:110:77","statements":[{"errorCall":{"arguments":[{"id":19703,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19624,"src":"4078:15:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":19704,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"4095:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19705,"name":"minERC4626AmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19650,"src":"4118:19:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19702,"name":"AmountOutBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":924,"src":"4060:17:77","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$10576_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":19706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4060:78:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19707,"nodeType":"RevertStatement","src":"4053:85:77"}]}},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"id":19721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19719,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19624,"src":"4484:15:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":19720,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19598,"src":"4503:11:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"4484:30:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":19752,"nodeType":"Block","src":"4904:297:77","statements":[{"expression":{"arguments":[{"id":19742,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19590,"src":"4941:4:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19743,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19624,"src":"4963:15:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":19744,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"4996:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19745,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19598,"src":"5035:11:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":19746,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19648,"src":"5064:23:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19747,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19602,"src":"5105:9:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19748,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19604,"src":"5132:8:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":19749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5158:5:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":19741,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19125,"src":"4918:5:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address,uint256,bool)"}},"id":19750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4918:272:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19751,"nodeType":"ExpressionStatement","src":"4918:272:77"}]},"id":19753,"nodeType":"IfStatement","src":"4480:721:77","trueBody":{"id":19740,"nodeType":"Block","src":"4516:382:77","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19722,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"4644:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":19723,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19648,"src":"4668:23:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4644:47:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19732,"nodeType":"IfStatement","src":"4640:171:77","trueBody":{"id":19731,"nodeType":"Block","src":"4693:118:77","statements":[{"errorCall":{"arguments":[{"id":19726,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19598,"src":"4736:11:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":19727,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"4749:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19728,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19648,"src":"4772:23:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19725,"name":"AmountOutBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":924,"src":"4718:17:77","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$10576_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":19729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4718:78:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19730,"nodeType":"RevertStatement","src":"4711:85:77"}]}},{"expression":{"arguments":[{"id":19736,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19602,"src":"4854:9:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19737,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19595,"src":"4865:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19733,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19624,"src":"4825:15:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":19735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4841:12:77","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10647,"src":"4825:28:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":19738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4825:62:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19739,"nodeType":"ExpressionStatement","src":"4825:62:77"}]}}]},"documentation":{"id":19588,"nodeType":"StructuredDocumentation","src":"1828:997:77","text":" @notice Treats `feeToken` as an ERC4626, redeems `exactFeeTokenAmountIn`, swaps the underlying asset for\n `targetToken`, and sends the proceeds to the `recipient`.\n @dev Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\n @param pool The pool the fees came from (only used for documentation in the event)\n @param feeToken The token collected from the pool\n @param exactFeeTokenAmountIn The number of fee tokens collected\n @param targetToken The desired target token (`tokenOut` of the swap)\n @param encodedMinAmountsOut The minimum amounts out for the swap, encoded as a 256-bit integer:\n - Upper 128 bits: the minimum amount of the target token to receive\n - Lower 128 bits: the minimum amount of the ERC4626 token to receive\n @param recipient The recipient of the swap proceeds\n @param deadline Deadline for the burn operation (i.e., swap), after which it will revert"},"functionSelector":"de557a32","id":19755,"implemented":true,"kind":"function","modifiers":[{"id":19608,"kind":"modifierInvocation","modifierName":{"id":19607,"name":"onlyProtocolFeeSweeper","nameLocations":["3073:22:77"],"nodeType":"IdentifierPath","referencedDeclaration":19793,"src":"3073:22:77"},"nodeType":"ModifierInvocation","src":"3073:22:77"},{"id":19610,"kind":"modifierInvocation","modifierName":{"id":19609,"name":"nonReentrant","nameLocations":["3096:12:77"],"nodeType":"IdentifierPath","referencedDeclaration":6967,"src":"3096:12:77"},"nodeType":"ModifierInvocation","src":"3096:12:77"}],"name":"burn","nameLocation":"2839:4:77","nodeType":"FunctionDefinition","overrides":{"id":19606,"nodeType":"OverrideSpecifier","overrides":[],"src":"3064:8:77"},"parameters":{"id":19605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19590,"mutability":"mutable","name":"pool","nameLocation":"2861:4:77","nodeType":"VariableDeclaration","scope":19755,"src":"2853:12:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19589,"name":"address","nodeType":"ElementaryTypeName","src":"2853:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19593,"mutability":"mutable","name":"feeToken","nameLocation":"2882:8:77","nodeType":"VariableDeclaration","scope":19755,"src":"2875:15:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19592,"nodeType":"UserDefinedTypeName","pathNode":{"id":19591,"name":"IERC20","nameLocations":["2875:6:77"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2875:6:77"},"referencedDeclaration":10576,"src":"2875:6:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":19595,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"2908:21:77","nodeType":"VariableDeclaration","scope":19755,"src":"2900:29:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19594,"name":"uint256","nodeType":"ElementaryTypeName","src":"2900:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19598,"mutability":"mutable","name":"targetToken","nameLocation":"2946:11:77","nodeType":"VariableDeclaration","scope":19755,"src":"2939:18:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":19597,"nodeType":"UserDefinedTypeName","pathNode":{"id":19596,"name":"IERC20","nameLocations":["2939:6:77"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2939:6:77"},"referencedDeclaration":10576,"src":"2939:6:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":19600,"mutability":"mutable","name":"encodedMinAmountsOut","nameLocation":"2975:20:77","nodeType":"VariableDeclaration","scope":19755,"src":"2967:28:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19599,"name":"uint256","nodeType":"ElementaryTypeName","src":"2967:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19602,"mutability":"mutable","name":"recipient","nameLocation":"3013:9:77","nodeType":"VariableDeclaration","scope":19755,"src":"3005:17:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19601,"name":"address","nodeType":"ElementaryTypeName","src":"3005:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19604,"mutability":"mutable","name":"deadline","nameLocation":"3040:8:77","nodeType":"VariableDeclaration","scope":19755,"src":"3032:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19603,"name":"uint256","nodeType":"ElementaryTypeName","src":"3032:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2843:211:77"},"returnParameters":{"id":19611,"nodeType":"ParameterList","parameters":[],"src":"3109:0:77"},"scope":19756,"src":"2830:2377:77","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":19757,"src":"1248:3961:77","usedErrors":[372,377,384,391,396,507,513,516,924,927,6956,9352,9357,10614,19561,19774,19777],"usedEvents":[436,492,502,914,9363,9501]}],"src":"46:5164:77"},"id":77},"contracts/FeeBurnerAuthentication.sol":{"ast":{"absolutePath":"contracts/FeeBurnerAuthentication.sol","exportedSymbols":{"FeeBurnerAuthentication":[19845],"IProtocolFeeSweeper":[1137],"IVault":[2545],"Ownable":[9486],"Ownable2Step":[9572]},"id":19846,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":19758,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:78"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":19760,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19846,"sourceUnit":2546,"src":"72:81:78","symbolAliases":[{"foreign":{"id":19759,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"81:6:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"@openzeppelin/contracts/access/Ownable.sol","id":19762,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19846,"sourceUnit":9487,"src":"154:69:78","symbolAliases":[{"foreign":{"id":19761,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9486,"src":"163:7:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/Ownable2Step.sol","file":"@openzeppelin/contracts/access/Ownable2Step.sol","id":19764,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19846,"sourceUnit":9573,"src":"224:79:78","symbolAliases":[{"foreign":{"id":19763,"name":"Ownable2Step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9572,"src":"233:12:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":19766,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19846,"sourceUnit":1138,"src":"304:118:78","symbolAliases":[{"foreign":{"id":19765,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1137,"src":"313:19:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":19767,"name":"Ownable2Step","nameLocations":["460:12:78"],"nodeType":"IdentifierPath","referencedDeclaration":9572,"src":"460:12:78"},"id":19768,"nodeType":"InheritanceSpecifier","src":"460:12:78"}],"canonicalName":"FeeBurnerAuthentication","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":19845,"linearizedBaseContracts":[19845,9572,9486,12366],"name":"FeeBurnerAuthentication","nameLocation":"433:23:78","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"178ac96e","id":19771,"mutability":"immutable","name":"protocolFeeSweeper","nameLocation":"516:18:78","nodeType":"VariableDeclaration","scope":19845,"src":"479:55:78","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":19770,"nodeType":"UserDefinedTypeName","pathNode":{"id":19769,"name":"IProtocolFeeSweeper","nameLocations":["479:19:78"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"479:19:78"},"referencedDeclaration":1137,"src":"479:19:78","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"visibility":"public"},{"documentation":{"id":19772,"nodeType":"StructuredDocumentation","src":"541:40:78","text":"@notice The fee protocol is invalid."},"errorSelector":"932c92a5","id":19774,"name":"InvalidProtocolFeeSweeper","nameLocation":"592:25:78","nodeType":"ErrorDefinition","parameters":{"id":19773,"nodeType":"ParameterList","parameters":[],"src":"617:2:78"},"src":"586:34:78"},{"documentation":{"id":19775,"nodeType":"StructuredDocumentation","src":"626:67:78","text":"@notice The sender does not have permission to call a function."},"errorSelector":"23dada53","id":19777,"name":"SenderNotAllowed","nameLocation":"704:16:78","nodeType":"ErrorDefinition","parameters":{"id":19776,"nodeType":"ParameterList","parameters":[],"src":"720:2:78"},"src":"698:25:78"},{"body":{"id":19792,"nodeType":"Block","src":"763:124:78","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19779,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"777:3:78","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"781:6:78","memberName":"sender","nodeType":"MemberAccess","src":"777:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":19783,"name":"protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19771,"src":"799:18:78","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}],"id":19782,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"791:7:78","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19781,"name":"address","nodeType":"ElementaryTypeName","src":"791:7:78","typeDescriptions":{}}},"id":19784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"791:27:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"777:41:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19790,"nodeType":"IfStatement","src":"773:97:78","trueBody":{"id":19789,"nodeType":"Block","src":"820:50:78","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19786,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"841:16:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"841:18:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19788,"nodeType":"RevertStatement","src":"834:25:78"}]}},{"id":19791,"nodeType":"PlaceholderStatement","src":"879:1:78"}]},"id":19793,"name":"onlyProtocolFeeSweeper","nameLocation":"738:22:78","nodeType":"ModifierDefinition","parameters":{"id":19778,"nodeType":"ParameterList","parameters":[],"src":"760:2:78"},"src":"729:158:78","virtual":false,"visibility":"internal"},{"body":{"id":19813,"nodeType":"Block","src":"928:158:78","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19795,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"942:3:78","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"946:6:78","memberName":"sender","nodeType":"MemberAccess","src":"942:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19797,"name":"protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19771,"src":"956:18:78","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"id":19798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"975:15:78","memberName":"getFeeRecipient","nodeType":"MemberAccess","referencedDeclaration":1093,"src":"956:34:78","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":19799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"956:36:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"942:50:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19801,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"996:3:78","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1000:6:78","memberName":"sender","nodeType":"MemberAccess","src":"996:10:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":19803,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9406,"src":"1010:5:78","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":19804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1010:7:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"996:21:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"942:75:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19811,"nodeType":"IfStatement","src":"938:131:78","trueBody":{"id":19810,"nodeType":"Block","src":"1019:50:78","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19807,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"1040:16:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1040:18:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19809,"nodeType":"RevertStatement","src":"1033:25:78"}]}},{"id":19812,"nodeType":"PlaceholderStatement","src":"1078:1:78"}]},"id":19814,"name":"onlyFeeRecipientOrOwner","nameLocation":"902:23:78","nodeType":"ModifierDefinition","parameters":{"id":19794,"nodeType":"ParameterList","parameters":[],"src":"925:2:78"},"src":"893:193:78","virtual":false,"visibility":"internal"},{"body":{"id":19843,"nodeType":"Block","src":"1189:174:78","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":19827,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19817,"src":"1211:19:78","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}],"id":19826,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1203:7:78","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19825,"name":"address","nodeType":"ElementaryTypeName","src":"1203:7:78","typeDescriptions":{}}},"id":19828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1203:28:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":19831,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1243:1:78","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":19830,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1235:7:78","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19829,"name":"address","nodeType":"ElementaryTypeName","src":"1235:7:78","typeDescriptions":{}}},"id":19832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1235:10:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1203:42:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19838,"nodeType":"IfStatement","src":"1199:107:78","trueBody":{"id":19837,"nodeType":"Block","src":"1247:59:78","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19834,"name":"InvalidProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19774,"src":"1268:25:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1268:27:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19836,"nodeType":"RevertStatement","src":"1261:34:78"}]}},{"expression":{"id":19841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19839,"name":"protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19771,"src":"1316:18:78","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19840,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19817,"src":"1337:19:78","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"src":"1316:40:78","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"id":19842,"nodeType":"ExpressionStatement","src":"1316:40:78"}]},"id":19844,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":19822,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19819,"src":"1175:12:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":19823,"kind":"baseConstructorSpecifier","modifierName":{"id":19821,"name":"Ownable","nameLocations":["1167:7:78"],"nodeType":"IdentifierPath","referencedDeclaration":9486,"src":"1167:7:78"},"nodeType":"ModifierInvocation","src":"1167:21:78"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19817,"mutability":"mutable","name":"_protocolFeeSweeper","nameLocation":"1124:19:78","nodeType":"VariableDeclaration","scope":19844,"src":"1104:39:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":19816,"nodeType":"UserDefinedTypeName","pathNode":{"id":19815,"name":"IProtocolFeeSweeper","nameLocations":["1104:19:78"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"1104:19:78"},"referencedDeclaration":1137,"src":"1104:19:78","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"visibility":"internal"},{"constant":false,"id":19819,"mutability":"mutable","name":"initialOwner","nameLocation":"1153:12:78","nodeType":"VariableDeclaration","scope":19844,"src":"1145:20:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19818,"name":"address","nodeType":"ElementaryTypeName","src":"1145:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1103:63:78"},"returnParameters":{"id":19824,"nodeType":"ParameterList","parameters":[],"src":"1189:0:78"},"scope":19845,"src":"1092:271:78","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":19846,"src":"424:941:78","usedErrors":[9352,9357,19774,19777],"usedEvents":[9363,9501]}],"src":"46:1320:78"},"id":78},"contracts/HyperEVMRateProvider.sol":{"ast":{"absolutePath":"contracts/HyperEVMRateProvider.sol","exportedSymbols":{"HyperEVMRateProvider":[19947],"HyperSpotPricePrecompile":[24562],"HyperTokenInfoPrecompile":[24631],"IHyperEVMRateProvider":[587],"IRateProvider":[24]},"id":19948,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":19847,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"45:24:79"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol","id":19849,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19948,"sourceUnit":588,"src":"71:126:79","symbolAliases":[{"foreign":{"id":19848,"name":"IHyperEVMRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":587,"src":"84:21:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","id":19851,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19948,"sourceUnit":25,"src":"198:112:79","symbolAliases":[{"foreign":{"id":19850,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24,"src":"207:13:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/utils/HyperSpotPricePrecompile.sol","file":"./utils/HyperSpotPricePrecompile.sol","id":19853,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19948,"sourceUnit":24563,"src":"312:80:79","symbolAliases":[{"foreign":{"id":19852,"name":"HyperSpotPricePrecompile","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24562,"src":"321:24:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/utils/HyperTokenInfoPrecompile.sol","file":"./utils/HyperTokenInfoPrecompile.sol","id":19855,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19948,"sourceUnit":24632,"src":"393:80:79","symbolAliases":[{"foreign":{"id":19854,"name":"HyperTokenInfoPrecompile","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24631,"src":"402:24:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":19857,"name":"IRateProvider","nameLocations":["839:13:79"],"nodeType":"IdentifierPath","referencedDeclaration":24,"src":"839:13:79"},"id":19858,"nodeType":"InheritanceSpecifier","src":"839:13:79"},{"baseName":{"id":19859,"name":"IHyperEVMRateProvider","nameLocations":["854:21:79"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"854:21:79"},"id":19860,"nodeType":"InheritanceSpecifier","src":"854:21:79"}],"canonicalName":"HyperEVMRateProvider","contractDependencies":[],"contractKind":"contract","documentation":{"id":19856,"nodeType":"StructuredDocumentation","src":"475:330:79","text":" @notice A rate provider for the HyperEVM.\n @dev HyperEVM has precompiles that allow to fetch the spot price of a token (in terms of USD or other tokens).\n This contract uses the spot price and the token info precompiles to return the rate of a token on-chain,\n scaled with 18 decimals (compatible with the Vault)."},"fullyImplemented":true,"id":19947,"linearizedBaseContracts":[19947,587,24],"name":"HyperEVMRateProvider","nameLocation":"815:20:79","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":19862,"mutability":"immutable","name":"_spotPriceMultiplier","nameLocation":"908:20:79","nodeType":"VariableDeclaration","scope":19947,"src":"882:46:79","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19861,"name":"uint256","nodeType":"ElementaryTypeName","src":"882:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":19864,"mutability":"immutable","name":"_pairIndex","nameLocation":"959:10:79","nodeType":"VariableDeclaration","scope":19947,"src":"934:35:79","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19863,"name":"uint32","nodeType":"ElementaryTypeName","src":"934:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"private"},{"constant":false,"id":19866,"mutability":"immutable","name":"_tokenIndex","nameLocation":"1000:11:79","nodeType":"VariableDeclaration","scope":19947,"src":"975:36:79","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19865,"name":"uint32","nodeType":"ElementaryTypeName","src":"975:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"private"},{"body":{"id":19900,"nodeType":"Block","src":"1067:720:79","statements":[{"assignments":[19874],"declarations":[{"constant":false,"id":19874,"mutability":"mutable","name":"szDecimals","nameLocation":"1083:10:79","nodeType":"VariableDeclaration","scope":19900,"src":"1077:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":19873,"name":"uint8","nodeType":"ElementaryTypeName","src":"1077:5:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":19879,"initialValue":{"arguments":[{"id":19877,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19868,"src":"1132:10:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":19875,"name":"HyperTokenInfoPrecompile","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24631,"src":"1096:24:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_HyperTokenInfoPrecompile_$24631_$","typeString":"type(library HyperTokenInfoPrecompile)"}},"id":19876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1121:10:79","memberName":"szDecimals","nodeType":"MemberAccess","referencedDeclaration":24630,"src":"1096:35:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint32_$returns$_t_uint8_$","typeString":"function (uint32) view returns (uint8)"}},"id":19878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1096:47:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"1077:66:79"},{"expression":{"id":19890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19880,"name":"_spotPriceMultiplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19862,"src":"1659:20:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31653138","id":19881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1682:4:79","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":19882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1690:2:79","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":19885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"38","id":19883,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1697:1:79","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":19884,"name":"szDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19874,"src":"1701:10:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1697:14:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":19886,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1696:16:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1690:22:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19888,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1689:24:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1682:31:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1659:54:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19891,"nodeType":"ExpressionStatement","src":"1659:54:79"},{"expression":{"id":19894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19892,"name":"_pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19864,"src":"1724:10:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19893,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19870,"src":"1737:9:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"1724:22:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":19895,"nodeType":"ExpressionStatement","src":"1724:22:79"},{"expression":{"id":19898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19896,"name":"_tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19866,"src":"1756:11:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19897,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19868,"src":"1770:10:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"1756:24:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":19899,"nodeType":"ExpressionStatement","src":"1756:24:79"}]},"id":19901,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19868,"mutability":"mutable","name":"tokenIndex","nameLocation":"1037:10:79","nodeType":"VariableDeclaration","scope":19901,"src":"1030:17:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19867,"name":"uint32","nodeType":"ElementaryTypeName","src":"1030:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":19870,"mutability":"mutable","name":"pairIndex","nameLocation":"1056:9:79","nodeType":"VariableDeclaration","scope":19901,"src":"1049:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19869,"name":"uint32","nodeType":"ElementaryTypeName","src":"1049:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1029:37:79"},"returnParameters":{"id":19872,"nodeType":"ParameterList","parameters":[],"src":"1067:0:79"},"scope":19947,"src":"1018:769:79","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[586],"body":{"id":19909,"nodeType":"Block","src":"1901:44:79","statements":[{"expression":{"id":19907,"name":"_spotPriceMultiplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19862,"src":"1918:20:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19906,"id":19908,"nodeType":"Return","src":"1911:27:79"}]},"documentation":{"id":19902,"nodeType":"StructuredDocumentation","src":"1793:37:79","text":"@inheritdoc IHyperEVMRateProvider"},"functionSelector":"a747d56f","id":19910,"implemented":true,"kind":"function","modifiers":[],"name":"getSpotPriceMultiplier","nameLocation":"1844:22:79","nodeType":"FunctionDefinition","parameters":{"id":19903,"nodeType":"ParameterList","parameters":[],"src":"1866:2:79"},"returnParameters":{"id":19906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19905,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19910,"src":"1892:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19904,"name":"uint256","nodeType":"ElementaryTypeName","src":"1892:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1891:9:79"},"scope":19947,"src":"1835:110:79","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[574],"body":{"id":19918,"nodeType":"Block","src":"2049:35:79","statements":[{"expression":{"id":19916,"name":"_tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19866,"src":"2066:11:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":19915,"id":19917,"nodeType":"Return","src":"2059:18:79"}]},"documentation":{"id":19911,"nodeType":"StructuredDocumentation","src":"1951:37:79","text":"@inheritdoc IHyperEVMRateProvider"},"functionSelector":"295d3ee8","id":19919,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenIndex","nameLocation":"2002:13:79","nodeType":"FunctionDefinition","parameters":{"id":19912,"nodeType":"ParameterList","parameters":[],"src":"2015:2:79"},"returnParameters":{"id":19915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19914,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19919,"src":"2041:6:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19913,"name":"uint32","nodeType":"ElementaryTypeName","src":"2041:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2040:8:79"},"scope":19947,"src":"1993:91:79","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[580],"body":{"id":19927,"nodeType":"Block","src":"2187:34:79","statements":[{"expression":{"id":19925,"name":"_pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19864,"src":"2204:10:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":19924,"id":19926,"nodeType":"Return","src":"2197:17:79"}]},"documentation":{"id":19920,"nodeType":"StructuredDocumentation","src":"2090:37:79","text":"@inheritdoc IHyperEVMRateProvider"},"functionSelector":"81bfa5d1","id":19928,"implemented":true,"kind":"function","modifiers":[],"name":"getPairIndex","nameLocation":"2141:12:79","nodeType":"FunctionDefinition","parameters":{"id":19921,"nodeType":"ParameterList","parameters":[],"src":"2153:2:79"},"returnParameters":{"id":19924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19923,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19928,"src":"2179:6:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19922,"name":"uint32","nodeType":"ElementaryTypeName","src":"2179:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2178:8:79"},"scope":19947,"src":"2132:89:79","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[23],"body":{"id":19945,"nodeType":"Block","src":"2312:132:79","statements":[{"assignments":[19935],"declarations":[{"constant":false,"id":19935,"mutability":"mutable","name":"spotPrice","nameLocation":"2330:9:79","nodeType":"VariableDeclaration","scope":19945,"src":"2322:17:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19934,"name":"uint256","nodeType":"ElementaryTypeName","src":"2322:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19940,"initialValue":{"arguments":[{"id":19938,"name":"_pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19864,"src":"2377:10:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":19936,"name":"HyperSpotPricePrecompile","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24562,"src":"2342:24:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_HyperSpotPricePrecompile_$24562_$","typeString":"type(library HyperSpotPricePrecompile)"}},"id":19937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2367:9:79","memberName":"spotPrice","nodeType":"MemberAccess","referencedDeclaration":24561,"src":"2342:34:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint32_$returns$_t_uint256_$","typeString":"function (uint32) view returns (uint256)"}},"id":19939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2342:46:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2322:66:79"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19941,"name":"spotPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19935,"src":"2405:9:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":19942,"name":"_spotPriceMultiplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19862,"src":"2417:20:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2405:32:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19933,"id":19944,"nodeType":"Return","src":"2398:39:79"}]},"documentation":{"id":19929,"nodeType":"StructuredDocumentation","src":"2227:29:79","text":"@inheritdoc IRateProvider"},"functionSelector":"679aefce","id":19946,"implemented":true,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"2270:7:79","nodeType":"FunctionDefinition","parameters":{"id":19930,"nodeType":"ParameterList","parameters":[],"src":"2277:2:79"},"returnParameters":{"id":19933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19932,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19946,"src":"2303:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19931,"name":"uint256","nodeType":"ElementaryTypeName","src":"2303:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2302:9:79"},"scope":19947,"src":"2261:183:79","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":19948,"src":"806:1640:79","usedErrors":[24510,24513,24589],"usedEvents":[]}],"src":"45:2402:79"},"id":79},"contracts/HyperEVMRateProviderFactory.sol":{"ast":{"absolutePath":"contracts/HyperEVMRateProviderFactory.sol","exportedSymbols":{"HyperEVMRateProvider":[19947],"HyperEVMRateProviderFactory":[20195],"IHyperEVMRateProvider":[587],"IHyperEVMRateProviderFactory":[664],"IVault":[2545],"SingletonAuthentication":[9289],"Version":[4999]},"id":20196,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":19949,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:80"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol","id":19951,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20196,"sourceUnit":665,"src":"72:140:80","symbolAliases":[{"foreign":{"id":19950,"name":"IHyperEVMRateProviderFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":664,"src":"85:28:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol","id":19953,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20196,"sourceUnit":588,"src":"213:126:80","symbolAliases":[{"foreign":{"id":19952,"name":"IHyperEVMRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":587,"src":"226:21:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":19955,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20196,"sourceUnit":2546,"src":"340:81:80","symbolAliases":[{"foreign":{"id":19954,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"349:6:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":19957,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20196,"sourceUnit":9290,"src":"423:104:80","symbolAliases":[{"foreign":{"id":19956,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9289,"src":"432:23:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","id":19959,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20196,"sourceUnit":5000,"src":"528:89:80","symbolAliases":[{"foreign":{"id":19958,"name":"Version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4999,"src":"537:7:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/HyperEVMRateProvider.sol","file":"./HyperEVMRateProvider.sol","id":19961,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20196,"sourceUnit":19948,"src":"619:66:80","symbolAliases":[{"foreign":{"id":19960,"name":"HyperEVMRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19947,"src":"628:20:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":19963,"name":"IHyperEVMRateProviderFactory","nameLocations":["799:28:80"],"nodeType":"IdentifierPath","referencedDeclaration":664,"src":"799:28:80"},"id":19964,"nodeType":"InheritanceSpecifier","src":"799:28:80"},{"baseName":{"id":19965,"name":"SingletonAuthentication","nameLocations":["829:23:80"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"829:23:80"},"id":19966,"nodeType":"InheritanceSpecifier","src":"829:23:80"},{"baseName":{"id":19967,"name":"Version","nameLocations":["854:7:80"],"nodeType":"IdentifierPath","referencedDeclaration":4999,"src":"854:7:80"},"id":19968,"nodeType":"InheritanceSpecifier","src":"854:7:80"}],"canonicalName":"HyperEVMRateProviderFactory","contractDependencies":[19947],"contractKind":"contract","documentation":{"id":19962,"nodeType":"StructuredDocumentation","src":"687:72:80","text":"@notice Factory for deploying and managing HyperEVM rate providers."},"fullyImplemented":true,"id":20195,"linearizedBaseContracts":[20195,4999,34,9289,7535,4385,14,664],"name":"HyperEVMRateProviderFactory","nameLocation":"768:27:80","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":19970,"mutability":"immutable","name":"_rateProviderVersion","nameLocation":"895:20:80","nodeType":"VariableDeclaration","scope":20195,"src":"868:47:80","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19969,"name":"uint256","nodeType":"ElementaryTypeName","src":"868:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19972,"mutability":"mutable","name":"_isDisabled","nameLocation":"935:11:80","nodeType":"VariableDeclaration","scope":20195,"src":"921:25:80","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19971,"name":"bool","nodeType":"ElementaryTypeName","src":"921:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":19977,"mutability":"mutable","name":"_rateProviders","nameLocation":"1032:14:80","nodeType":"VariableDeclaration","scope":20195,"src":"953:93:80","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_contract$_IHyperEVMRateProvider_$587_$","typeString":"mapping(bytes32 => contract IHyperEVMRateProvider)"},"typeName":{"id":19976,"keyName":"rateProviderId","keyNameLocation":"969:14:80","keyType":{"id":19973,"name":"bytes32","nodeType":"ElementaryTypeName","src":"961:7:80","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"953:69:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_contract$_IHyperEVMRateProvider_$587_$","typeString":"mapping(bytes32 => contract IHyperEVMRateProvider)"},"valueName":"rateProvider","valueNameLocation":"1009:12:80","valueType":{"id":19975,"nodeType":"UserDefinedTypeName","pathNode":{"id":19974,"name":"IHyperEVMRateProvider","nameLocations":["987:21:80"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"987:21:80"},"referencedDeclaration":587,"src":"987:21:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}}},"visibility":"internal"},{"constant":false,"id":19982,"mutability":"mutable","name":"_isRateProviderFromFactory","nameLocation":"1126:26:80","nodeType":"VariableDeclaration","scope":20195,"src":"1052:100:80","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IHyperEVMRateProvider_$587_$_t_bool_$","typeString":"mapping(contract IHyperEVMRateProvider => bool)"},"typeName":{"id":19981,"keyName":"rateProvider","keyNameLocation":"1082:12:80","keyType":{"id":19979,"nodeType":"UserDefinedTypeName","pathNode":{"id":19978,"name":"IHyperEVMRateProvider","nameLocations":["1060:21:80"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"1060:21:80"},"referencedDeclaration":587,"src":"1060:21:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"nodeType":"Mapping","src":"1052:64:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IHyperEVMRateProvider_$587_$_t_bool_$","typeString":"mapping(contract IHyperEVMRateProvider => bool)"},"valueName":"creationFlag","valueNameLocation":"1103:12:80","valueType":{"id":19980,"name":"bool","nodeType":"ElementaryTypeName","src":"1098:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"body":{"id":20002,"nodeType":"Block","src":"1329:59:80","statements":[{"expression":{"id":20000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19998,"name":"_rateProviderVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19970,"src":"1339:20:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19999,"name":"rateProviderVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19989,"src":"1362:19:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1339:42:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20001,"nodeType":"ExpressionStatement","src":"1339:42:80"}]},"id":20003,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":19992,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19985,"src":"1298:5:80","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"id":19993,"kind":"baseConstructorSpecifier","modifierName":{"id":19991,"name":"SingletonAuthentication","nameLocations":["1274:23:80"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"1274:23:80"},"nodeType":"ModifierInvocation","src":"1274:30:80"},{"arguments":[{"id":19995,"name":"factoryVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19987,"src":"1313:14:80","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":19996,"kind":"baseConstructorSpecifier","modifierName":{"id":19994,"name":"Version","nameLocations":["1305:7:80"],"nodeType":"IdentifierPath","referencedDeclaration":4999,"src":"1305:7:80"},"nodeType":"ModifierInvocation","src":"1305:23:80"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19985,"mutability":"mutable","name":"vault","nameLocation":"1187:5:80","nodeType":"VariableDeclaration","scope":20003,"src":"1180:12:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":19984,"nodeType":"UserDefinedTypeName","pathNode":{"id":19983,"name":"IVault","nameLocations":["1180:6:80"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1180:6:80"},"referencedDeclaration":2545,"src":"1180:6:80","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":19987,"mutability":"mutable","name":"factoryVersion","nameLocation":"1216:14:80","nodeType":"VariableDeclaration","scope":20003,"src":"1202:28:80","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":19986,"name":"string","nodeType":"ElementaryTypeName","src":"1202:6:80","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":19989,"mutability":"mutable","name":"rateProviderVersion","nameLocation":"1248:19:80","nodeType":"VariableDeclaration","scope":20003,"src":"1240:27:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19988,"name":"uint256","nodeType":"ElementaryTypeName","src":"1240:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1170:103:80"},"returnParameters":{"id":19997,"nodeType":"ParameterList","parameters":[],"src":"1329:0:80"},"scope":20195,"src":"1159:229:80","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[628],"body":{"id":20011,"nodeType":"Block","src":"1509:44:80","statements":[{"expression":{"id":20009,"name":"_rateProviderVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19970,"src":"1526:20:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20008,"id":20010,"nodeType":"Return","src":"1519:27:80"}]},"documentation":{"id":20004,"nodeType":"StructuredDocumentation","src":"1394:44:80","text":"@inheritdoc IHyperEVMRateProviderFactory"},"functionSelector":"381c7a4f","id":20012,"implemented":true,"kind":"function","modifiers":[],"name":"getRateProviderVersion","nameLocation":"1452:22:80","nodeType":"FunctionDefinition","parameters":{"id":20005,"nodeType":"ParameterList","parameters":[],"src":"1474:2:80"},"returnParameters":{"id":20008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20007,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20012,"src":"1500:7:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20006,"name":"uint256","nodeType":"ElementaryTypeName","src":"1500:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1499:9:80"},"scope":20195,"src":"1443:110:80","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[639],"body":{"id":20091,"nodeType":"Block","src":"1715:645:80","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":20023,"name":"_ensureEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20194,"src":"1725:14:80","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":20024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1725:16:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20025,"nodeType":"ExpressionStatement","src":"1725:16:80"},{"assignments":[20027],"declarations":[{"constant":false,"id":20027,"mutability":"mutable","name":"rateProviderId","nameLocation":"1760:14:80","nodeType":"VariableDeclaration","scope":20091,"src":"1752:22:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20026,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1752:7:80","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":20032,"initialValue":{"arguments":[{"id":20029,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20015,"src":"1800:10:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20030,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20017,"src":"1812:9:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":20028,"name":"_computeRateProviderId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20184,"src":"1777:22:80","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (uint32,uint32) pure returns (bytes32)"}},"id":20031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1777:45:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1752:70:80"},{"assignments":[20034],"declarations":[{"constant":false,"id":20034,"mutability":"mutable","name":"existingRateProvider","nameLocation":"1841:20:80","nodeType":"VariableDeclaration","scope":20091,"src":"1833:28:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20033,"name":"address","nodeType":"ElementaryTypeName","src":"1833:7:80","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":20041,"initialValue":{"arguments":[{"baseExpression":{"id":20037,"name":"_rateProviders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19977,"src":"1872:14:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_contract$_IHyperEVMRateProvider_$587_$","typeString":"mapping(bytes32 => contract IHyperEVMRateProvider)"}},"id":20039,"indexExpression":{"id":20038,"name":"rateProviderId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20027,"src":"1887:14:80","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1872:30:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}],"id":20036,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1864:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20035,"name":"address","nodeType":"ElementaryTypeName","src":"1864:7:80","typeDescriptions":{}}},"id":20040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1864:39:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1833:70:80"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20042,"name":"existingRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20034,"src":"1918:20:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":20045,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1950:1:80","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":20044,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1942:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20043,"name":"address","nodeType":"ElementaryTypeName","src":"1942:7:80","typeDescriptions":{}}},"id":20046,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1942:10:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1918:34:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20055,"nodeType":"IfStatement","src":"1914:142:80","trueBody":{"id":20054,"nodeType":"Block","src":"1954:102:80","statements":[{"errorCall":{"arguments":[{"id":20049,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20015,"src":"2001:10:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20050,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20017,"src":"2013:9:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20051,"name":"existingRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20034,"src":"2024:20:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20048,"name":"RateProviderAlreadyExists","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":612,"src":"1975:25:80","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint32_$_t_uint32_$_t_address_$returns$_t_error_$","typeString":"function (uint32,uint32,address) pure returns (error)"}},"id":20052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1975:70:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20053,"nodeType":"RevertStatement","src":"1968:77:80"}]}},{"expression":{"id":20068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20056,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20021,"src":"2066:12:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"id":20063,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20015,"src":"2136:10:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20064,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20017,"src":"2148:9:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":20062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"2111:24:80","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$_t_uint32_$_t_uint32_$returns$_t_contract$_HyperEVMRateProvider_$19947_$","typeString":"function (uint32,uint32) returns (contract HyperEVMRateProvider)"},"typeName":{"id":20061,"nodeType":"UserDefinedTypeName","pathNode":{"id":20060,"name":"HyperEVMRateProvider","nameLocations":["2115:20:80"],"nodeType":"IdentifierPath","referencedDeclaration":19947,"src":"2115:20:80"},"referencedDeclaration":19947,"src":"2115:20:80","typeDescriptions":{"typeIdentifier":"t_contract$_HyperEVMRateProvider_$19947","typeString":"contract HyperEVMRateProvider"}}},"id":20065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2111:47:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_HyperEVMRateProvider_$19947","typeString":"contract HyperEVMRateProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_HyperEVMRateProvider_$19947","typeString":"contract HyperEVMRateProvider"}],"id":20059,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2103:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20058,"name":"address","nodeType":"ElementaryTypeName","src":"2103:7:80","typeDescriptions":{}}},"id":20066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2103:56:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20057,"name":"IHyperEVMRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":587,"src":"2081:21:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IHyperEVMRateProvider_$587_$","typeString":"type(contract IHyperEVMRateProvider)"}},"id":20067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2081:79:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"src":"2066:94:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"id":20069,"nodeType":"ExpressionStatement","src":"2066:94:80"},{"expression":{"id":20074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20070,"name":"_rateProviders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19977,"src":"2170:14:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_contract$_IHyperEVMRateProvider_$587_$","typeString":"mapping(bytes32 => contract IHyperEVMRateProvider)"}},"id":20072,"indexExpression":{"id":20071,"name":"rateProviderId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20027,"src":"2185:14:80","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2170:30:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20073,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20021,"src":"2203:12:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"src":"2170:45:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"id":20075,"nodeType":"ExpressionStatement","src":"2170:45:80"},{"expression":{"id":20080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20076,"name":"_isRateProviderFromFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19982,"src":"2225:26:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IHyperEVMRateProvider_$587_$_t_bool_$","typeString":"mapping(contract IHyperEVMRateProvider => bool)"}},"id":20078,"indexExpression":{"id":20077,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20021,"src":"2252:12:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2225:40:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":20079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2268:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2225:47:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20081,"nodeType":"ExpressionStatement","src":"2225:47:80"},{"eventCall":{"arguments":[{"id":20083,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20015,"src":"2308:10:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20084,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20017,"src":"2320:9:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"arguments":[{"id":20087,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20021,"src":"2339:12:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}],"id":20086,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2331:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20085,"name":"address","nodeType":"ElementaryTypeName","src":"2331:7:80","typeDescriptions":{}}},"id":20088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2331:21:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20082,"name":"RateProviderCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":600,"src":"2288:19:80","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,uint256,address)"}},"id":20089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2288:65:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20090,"nodeType":"EmitStatement","src":"2283:70:80"}]},"documentation":{"id":20013,"nodeType":"StructuredDocumentation","src":"1559:44:80","text":"@inheritdoc IHyperEVMRateProviderFactory"},"functionSelector":"568acb79","id":20092,"implemented":true,"kind":"function","modifiers":[],"name":"create","nameLocation":"1617:6:80","nodeType":"FunctionDefinition","parameters":{"id":20018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20015,"mutability":"mutable","name":"tokenIndex","nameLocation":"1631:10:80","nodeType":"VariableDeclaration","scope":20092,"src":"1624:17:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20014,"name":"uint32","nodeType":"ElementaryTypeName","src":"1624:6:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":20017,"mutability":"mutable","name":"pairIndex","nameLocation":"1650:9:80","nodeType":"VariableDeclaration","scope":20092,"src":"1643:16:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20016,"name":"uint32","nodeType":"ElementaryTypeName","src":"1643:6:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1623:37:80"},"returnParameters":{"id":20022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20021,"mutability":"mutable","name":"rateProvider","nameLocation":"1701:12:80","nodeType":"VariableDeclaration","scope":20092,"src":"1679:34:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"},"typeName":{"id":20020,"nodeType":"UserDefinedTypeName","pathNode":{"id":20019,"name":"IHyperEVMRateProvider","nameLocations":["1679:21:80"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"1679:21:80"},"referencedDeclaration":587,"src":"1679:21:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"visibility":"internal"}],"src":"1678:36:80"},"scope":20195,"src":"1608:752:80","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[650],"body":{"id":20134,"nodeType":"Block","src":"2558:296:80","statements":[{"assignments":[20104],"declarations":[{"constant":false,"id":20104,"mutability":"mutable","name":"rateProviderId","nameLocation":"2576:14:80","nodeType":"VariableDeclaration","scope":20134,"src":"2568:22:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20103,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2568:7:80","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":20109,"initialValue":{"arguments":[{"id":20106,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20095,"src":"2616:10:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20107,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20097,"src":"2628:9:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":20105,"name":"_computeRateProviderId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20184,"src":"2593:22:80","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (uint32,uint32) pure returns (bytes32)"}},"id":20108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2593:45:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2568:70:80"},{"expression":{"id":20114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20110,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20101,"src":"2648:12:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":20111,"name":"_rateProviders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19977,"src":"2663:14:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_contract$_IHyperEVMRateProvider_$587_$","typeString":"mapping(bytes32 => contract IHyperEVMRateProvider)"}},"id":20113,"indexExpression":{"id":20112,"name":"rateProviderId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20104,"src":"2678:14:80","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2663:30:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"src":"2648:45:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"id":20115,"nodeType":"ExpressionStatement","src":"2648:45:80"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":20118,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20101,"src":"2715:12:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}],"id":20117,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2707:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20116,"name":"address","nodeType":"ElementaryTypeName","src":"2707:7:80","typeDescriptions":{}}},"id":20119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2707:21:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":20122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2740:1:80","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":20121,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2732:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20120,"name":"address","nodeType":"ElementaryTypeName","src":"2732:7:80","typeDescriptions":{}}},"id":20123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2732:10:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2707:35:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20131,"nodeType":"IfStatement","src":"2703:116:80","trueBody":{"id":20130,"nodeType":"Block","src":"2744:75:80","statements":[{"errorCall":{"arguments":[{"id":20126,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20095,"src":"2786:10:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20127,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20097,"src":"2798:9:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":20125,"name":"RateProviderNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":619,"src":"2765:20:80","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint32_$_t_uint32_$returns$_t_error_$","typeString":"function (uint32,uint32) pure returns (error)"}},"id":20128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2765:43:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20129,"nodeType":"RevertStatement","src":"2758:50:80"}]}},{"expression":{"id":20132,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20101,"src":"2835:12:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"functionReturnParameters":20102,"id":20133,"nodeType":"Return","src":"2828:19:80"}]},"documentation":{"id":20093,"nodeType":"StructuredDocumentation","src":"2366:44:80","text":"@inheritdoc IHyperEVMRateProviderFactory"},"functionSelector":"99b8113f","id":20135,"implemented":true,"kind":"function","modifiers":[],"name":"getRateProvider","nameLocation":"2424:15:80","nodeType":"FunctionDefinition","parameters":{"id":20098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20095,"mutability":"mutable","name":"tokenIndex","nameLocation":"2456:10:80","nodeType":"VariableDeclaration","scope":20135,"src":"2449:17:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20094,"name":"uint32","nodeType":"ElementaryTypeName","src":"2449:6:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":20097,"mutability":"mutable","name":"pairIndex","nameLocation":"2483:9:80","nodeType":"VariableDeclaration","scope":20135,"src":"2476:16:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20096,"name":"uint32","nodeType":"ElementaryTypeName","src":"2476:6:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2439:59:80"},"returnParameters":{"id":20102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20101,"mutability":"mutable","name":"rateProvider","nameLocation":"2544:12:80","nodeType":"VariableDeclaration","scope":20135,"src":"2522:34:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"},"typeName":{"id":20100,"nodeType":"UserDefinedTypeName","pathNode":{"id":20099,"name":"IHyperEVMRateProvider","nameLocations":["2522:21:80"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"2522:21:80"},"referencedDeclaration":587,"src":"2522:21:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"visibility":"internal"}],"src":"2521:36:80"},"scope":20195,"src":"2415:439:80","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[659],"body":{"id":20148,"nodeType":"Block","src":"3009:64:80","statements":[{"expression":{"baseExpression":{"id":20144,"name":"_isRateProviderFromFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19982,"src":"3026:26:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IHyperEVMRateProvider_$587_$_t_bool_$","typeString":"mapping(contract IHyperEVMRateProvider => bool)"}},"id":20146,"indexExpression":{"id":20145,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20139,"src":"3053:12:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3026:40:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":20143,"id":20147,"nodeType":"Return","src":"3019:47:80"}]},"documentation":{"id":20136,"nodeType":"StructuredDocumentation","src":"2860:44:80","text":"@inheritdoc IHyperEVMRateProviderFactory"},"functionSelector":"19912f71","id":20149,"implemented":true,"kind":"function","modifiers":[],"name":"isRateProviderFromFactory","nameLocation":"2918:25:80","nodeType":"FunctionDefinition","parameters":{"id":20140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20139,"mutability":"mutable","name":"rateProvider","nameLocation":"2966:12:80","nodeType":"VariableDeclaration","scope":20149,"src":"2944:34:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"},"typeName":{"id":20138,"nodeType":"UserDefinedTypeName","pathNode":{"id":20137,"name":"IHyperEVMRateProvider","nameLocations":["2944:21:80"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"2944:21:80"},"referencedDeclaration":587,"src":"2944:21:80","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"visibility":"internal"}],"src":"2943:36:80"},"returnParameters":{"id":20143,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20142,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20149,"src":"3003:4:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20141,"name":"bool","nodeType":"ElementaryTypeName","src":"3003:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3002:6:80"},"scope":20195,"src":"2909:164:80","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[663],"body":{"id":20165,"nodeType":"Block","src":"3169:106:80","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":20155,"name":"_ensureEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20194,"src":"3179:14:80","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":20156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3179:16:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20157,"nodeType":"ExpressionStatement","src":"3179:16:80"},{"expression":{"id":20160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20158,"name":"_isDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19972,"src":"3206:11:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":20159,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3220:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"3206:18:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20161,"nodeType":"ExpressionStatement","src":"3206:18:80"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20162,"name":"RateProviderFactoryDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":603,"src":"3239:27:80","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":20163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3239:29:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20164,"nodeType":"EmitStatement","src":"3234:34:80"}]},"documentation":{"id":20150,"nodeType":"StructuredDocumentation","src":"3079:44:80","text":"@inheritdoc IHyperEVMRateProviderFactory"},"functionSelector":"2f2770db","id":20166,"implemented":true,"kind":"function","modifiers":[{"id":20153,"kind":"modifierInvocation","modifierName":{"id":20152,"name":"authenticate","nameLocations":["3156:12:80"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"3156:12:80"},"nodeType":"ModifierInvocation","src":"3156:12:80"}],"name":"disable","nameLocation":"3137:7:80","nodeType":"FunctionDefinition","parameters":{"id":20151,"nodeType":"ParameterList","parameters":[],"src":"3144:2:80"},"returnParameters":{"id":20154,"nodeType":"ParameterList","parameters":[],"src":"3169:0:80"},"scope":20195,"src":"3128:147:80","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20183,"nodeType":"Block","src":"3382:68:80","statements":[{"expression":{"arguments":[{"arguments":[{"id":20178,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20168,"src":"3420:10:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20179,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20170,"src":"3432:9:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":20176,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3409:3:80","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":20177,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3413:6:80","memberName":"encode","nodeType":"MemberAccess","src":"3409:10:80","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":20180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3409:33:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":20175,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3399:9:80","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":20181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3399:44:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":20174,"id":20182,"nodeType":"Return","src":"3392:51:80"}]},"id":20184,"implemented":true,"kind":"function","modifiers":[],"name":"_computeRateProviderId","nameLocation":"3290:22:80","nodeType":"FunctionDefinition","parameters":{"id":20171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20168,"mutability":"mutable","name":"tokenIndex","nameLocation":"3320:10:80","nodeType":"VariableDeclaration","scope":20184,"src":"3313:17:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20167,"name":"uint32","nodeType":"ElementaryTypeName","src":"3313:6:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":20170,"mutability":"mutable","name":"pairIndex","nameLocation":"3339:9:80","nodeType":"VariableDeclaration","scope":20184,"src":"3332:16:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20169,"name":"uint32","nodeType":"ElementaryTypeName","src":"3332:6:80","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"3312:37:80"},"returnParameters":{"id":20174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20173,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20184,"src":"3373:7:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20172,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3373:7:80","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3372:9:80"},"scope":20195,"src":"3281:169:80","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":20193,"nodeType":"Block","src":"3496:96:80","statements":[{"condition":{"id":20187,"name":"_isDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19972,"src":"3510:11:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20192,"nodeType":"IfStatement","src":"3506:80:80","trueBody":{"id":20191,"nodeType":"Block","src":"3523:63:80","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20188,"name":"RateProviderFactoryIsDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":622,"src":"3544:29:80","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":20189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3544:31:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20190,"nodeType":"RevertStatement","src":"3537:38:80"}]}}]},"id":20194,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureEnabled","nameLocation":"3465:14:80","nodeType":"FunctionDefinition","parameters":{"id":20185,"nodeType":"ParameterList","parameters":[],"src":"3479:2:80"},"returnParameters":{"id":20186,"nodeType":"ParameterList","parameters":[],"src":"3496:0:80"},"scope":20195,"src":"3456:136:80","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":20196,"src":"759:2835:80","usedErrors":[5,612,619,622,7355],"usedEvents":[600,603]}],"src":"46:3549:80"},"id":80},"contracts/OwnableAuthentication.sol":{"ast":{"absolutePath":"contracts/OwnableAuthentication.sol","exportedSymbols":{"Authentication":[4385],"IAuthorizer":[1341],"IVault":[2545],"Ownable":[9486],"Ownable2Step":[9572],"OwnableAuthentication":[20330]},"id":20331,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":20197,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:81"},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"@openzeppelin/contracts/access/Ownable.sol","id":20199,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20331,"sourceUnit":9487,"src":"72:69:81","symbolAliases":[{"foreign":{"id":20198,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9486,"src":"81:7:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/Ownable2Step.sol","file":"@openzeppelin/contracts/access/Ownable2Step.sol","id":20201,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20331,"sourceUnit":9573,"src":"142:79:81","symbolAliases":[{"foreign":{"id":20200,"name":"Ownable2Step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9572,"src":"151:12:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":20203,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20331,"sourceUnit":1342,"src":"223:91:81","symbolAliases":[{"foreign":{"id":20202,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"232:11:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":20205,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20331,"sourceUnit":2546,"src":"315:81:81","symbolAliases":[{"foreign":{"id":20204,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"324:6:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","id":20207,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20331,"sourceUnit":4386,"src":"398:103:81","symbolAliases":[{"foreign":{"id":20206,"name":"Authentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4385,"src":"407:14:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":20209,"name":"Ownable2Step","nameLocations":["1243:12:81"],"nodeType":"IdentifierPath","referencedDeclaration":9572,"src":"1243:12:81"},"id":20210,"nodeType":"InheritanceSpecifier","src":"1243:12:81"},{"baseName":{"id":20211,"name":"Authentication","nameLocations":["1257:14:81"],"nodeType":"IdentifierPath","referencedDeclaration":4385,"src":"1257:14:81"},"id":20212,"nodeType":"InheritanceSpecifier","src":"1257:14:81"}],"canonicalName":"OwnableAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":20208,"nodeType":"StructuredDocumentation","src":"503:705:81","text":" @notice OwnableAuthentication is a contract that combines ownership management with authentication.\n @dev Use it to pre-wire admin multisigs upon deployment to a contract that requires permissioned functions to work,\n where the impact of the owner going rogue is minimal. Contract registries, fee burners, and other utility contracts\n are good examples.\n In turn, the pre-configured owner can speed up operations as it can perform any action right after deployment without\n waiting for governance to set up the authorizer, which can take whole weeks.\n On the other hand, governance can always revoke or change the owner at any given time, keeping superior powers\n above the owner."},"fullyImplemented":true,"id":20330,"linearizedBaseContracts":[20330,4385,14,9572,9486,12366],"name":"OwnableAuthentication","nameLocation":"1218:21:81","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":20213,"nodeType":"StructuredDocumentation","src":"1278:39:81","text":"@notice The vault has not been set."},"errorSelector":"c8e28160","id":20215,"name":"VaultNotSet","nameLocation":"1328:11:81","nodeType":"ErrorDefinition","parameters":{"id":20214,"nodeType":"ParameterList","parameters":[],"src":"1339:2:81"},"src":"1322:20:81"},{"constant":false,"functionSelector":"fbfa77cf","id":20218,"mutability":"immutable","name":"vault","nameLocation":"1372:5:81","nodeType":"VariableDeclaration","scope":20330,"src":"1348:29:81","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":20217,"nodeType":"UserDefinedTypeName","pathNode":{"id":20216,"name":"IVault","nameLocations":["1348:6:81"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1348:6:81"},"referencedDeclaration":2545,"src":"1348:6:81","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"public"},{"body":{"id":20262,"nodeType":"Block","src":"1534:121:81","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":20246,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20221,"src":"1556:6:81","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}],"id":20245,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1548:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20244,"name":"address","nodeType":"ElementaryTypeName","src":"1548:7:81","typeDescriptions":{}}},"id":20247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1548:15:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":20250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1575:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":20249,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1567:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20248,"name":"address","nodeType":"ElementaryTypeName","src":"1567:7:81","typeDescriptions":{}}},"id":20251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1567:10:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1548:29:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20257,"nodeType":"IfStatement","src":"1544:80:81","trueBody":{"id":20256,"nodeType":"Block","src":"1579:45:81","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20253,"name":"VaultNotSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20215,"src":"1600:11:81","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":20254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1600:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20255,"nodeType":"RevertStatement","src":"1593:20:81"}]}},{"expression":{"id":20260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20258,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"1634:5:81","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20259,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20221,"src":"1642:6:81","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"src":"1634:14:81","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":20261,"nodeType":"ExpressionStatement","src":"1634:14:81"}]},"id":20263,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":20226,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20223,"src":"1463:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":20227,"kind":"baseConstructorSpecifier","modifierName":{"id":20225,"name":"Ownable","nameLocations":["1455:7:81"],"nodeType":"IdentifierPath","referencedDeclaration":9486,"src":"1455:7:81"},"nodeType":"ModifierInvocation","src":"1455:21:81"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":20237,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1524:4:81","typeDescriptions":{"typeIdentifier":"t_contract$_OwnableAuthentication_$20330","typeString":"contract OwnableAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_OwnableAuthentication_$20330","typeString":"contract OwnableAuthentication"}],"id":20236,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1516:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20235,"name":"address","nodeType":"ElementaryTypeName","src":"1516:7:81","typeDescriptions":{}}},"id":20238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1516:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20234,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1508:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":20233,"name":"uint160","nodeType":"ElementaryTypeName","src":"1508:7:81","typeDescriptions":{}}},"id":20239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1508:22:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":20232,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1500:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":20231,"name":"uint256","nodeType":"ElementaryTypeName","src":"1500:7:81","typeDescriptions":{}}},"id":20240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1500:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20230,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1492:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":20229,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1492:7:81","typeDescriptions":{}}},"id":20241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1492:40:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":20242,"kind":"baseConstructorSpecifier","modifierName":{"id":20228,"name":"Authentication","nameLocations":["1477:14:81"],"nodeType":"IdentifierPath","referencedDeclaration":4385,"src":"1477:14:81"},"nodeType":"ModifierInvocation","src":"1477:56:81"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":20224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20221,"mutability":"mutable","name":"vault_","nameLocation":"1412:6:81","nodeType":"VariableDeclaration","scope":20263,"src":"1405:13:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":20220,"nodeType":"UserDefinedTypeName","pathNode":{"id":20219,"name":"IVault","nameLocations":["1405:6:81"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1405:6:81"},"referencedDeclaration":2545,"src":"1405:6:81","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":20223,"mutability":"mutable","name":"initialOwner","nameLocation":"1436:12:81","nodeType":"VariableDeclaration","scope":20263,"src":"1428:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20222,"name":"address","nodeType":"ElementaryTypeName","src":"1428:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1395:59:81"},"returnParameters":{"id":20243,"nodeType":"ParameterList","parameters":[],"src":"1534:0:81"},"scope":20330,"src":"1384:271:81","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":20274,"nodeType":"Block","src":"1793:45:81","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20270,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"1810:5:81","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":20271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1816:13:81","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":3859,"src":"1810:19:81","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1341_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":20272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1810:21:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"functionReturnParameters":20269,"id":20273,"nodeType":"Return","src":"1803:28:81"}]},"documentation":{"id":20264,"nodeType":"StructuredDocumentation","src":"1661:66:81","text":"@notice Returns the authorizer address according to the Vault."},"functionSelector":"aaabadc5","id":20275,"implemented":true,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"1741:13:81","nodeType":"FunctionDefinition","parameters":{"id":20265,"nodeType":"ParameterList","parameters":[],"src":"1754:2:81"},"returnParameters":{"id":20269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20268,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20275,"src":"1780:11:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"},"typeName":{"id":20267,"nodeType":"UserDefinedTypeName","pathNode":{"id":20266,"name":"IAuthorizer","nameLocations":["1780:11:81"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"1780:11:81"},"referencedDeclaration":1341,"src":"1780:11:81","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"1779:13:81"},"scope":20330,"src":"1732:106:81","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":20297,"nodeType":"Block","src":"2332:208:81","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20283,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2423:3:81","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2427:6:81","memberName":"sender","nodeType":"MemberAccess","src":"2423:10:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":20285,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9406,"src":"2437:5:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":20286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2437:7:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2423:21:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20292,"nodeType":"IfStatement","src":"2419:77:81","trueBody":{"id":20291,"nodeType":"Block","src":"2446:50:81","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20288,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"2467:16:81","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":20289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2467:18:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20290,"nodeType":"RevertStatement","src":"2460:25:81"}]}},{"expression":{"arguments":[{"id":20294,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20278,"src":"2524:8:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20293,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[9547],"referencedDeclaration":9547,"src":"2505:18:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":20295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2505:28:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20296,"nodeType":"ExpressionStatement","src":"2505:28:81"}]},"documentation":{"id":20276,"nodeType":"StructuredDocumentation","src":"1844:411:81","text":" @notice Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\n @dev This allows governance to revoke the owner at any time, preserving control above the owner at all times.\n address(0) is also a valid owner, as governance can simply choose to revoke ownership.\n Ownership can always be forced back to any address later on."},"functionSelector":"a89b1128","id":20298,"implemented":true,"kind":"function","modifiers":[{"id":20281,"kind":"modifierInvocation","modifierName":{"id":20280,"name":"authenticate","nameLocations":["2319:12:81"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"2319:12:81"},"nodeType":"ModifierInvocation","src":"2319:12:81"}],"name":"forceTransferOwnership","nameLocation":"2269:22:81","nodeType":"FunctionDefinition","parameters":{"id":20279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20278,"mutability":"mutable","name":"newOwner","nameLocation":"2300:8:81","nodeType":"VariableDeclaration","scope":20298,"src":"2292:16:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20277,"name":"address","nodeType":"ElementaryTypeName","src":"2292:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2291:18:81"},"returnParameters":{"id":20282,"nodeType":"ParameterList","parameters":[],"src":"2332:0:81"},"scope":20330,"src":"2260:280:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4384],"body":{"id":20328,"nodeType":"Block","src":"2645:283:81","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20308,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20302,"src":"2721:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":20309,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9406,"src":"2729:5:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":20310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2729:7:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2721:15:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20315,"nodeType":"IfStatement","src":"2717:57:81","trueBody":{"id":20314,"nodeType":"Block","src":"2738:36:81","statements":[{"expression":{"hexValue":"74727565","id":20312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2759:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":20307,"id":20313,"nodeType":"Return","src":"2752:11:81"}]}},{"expression":{"arguments":[{"id":20320,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20300,"src":"2891:8:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":20321,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20302,"src":"2901:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":20324,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2915:4:81","typeDescriptions":{"typeIdentifier":"t_contract$_OwnableAuthentication_$20330","typeString":"contract OwnableAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_OwnableAuthentication_$20330","typeString":"contract OwnableAuthentication"}],"id":20323,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2907:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20322,"name":"address","nodeType":"ElementaryTypeName","src":"2907:7:81","typeDescriptions":{}}},"id":20325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2907:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20316,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"2858:5:81","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":20317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2864:13:81","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":3859,"src":"2858:19:81","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1341_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":20318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2858:21:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"id":20319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2880:10:81","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":1340,"src":"2858:32:81","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":20326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2858:63:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":20307,"id":20327,"nodeType":"Return","src":"2851:70:81"}]},"id":20329,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"2555:11:81","nodeType":"FunctionDefinition","overrides":{"id":20304,"nodeType":"OverrideSpecifier","overrides":[],"src":"2621:8:81"},"parameters":{"id":20303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20300,"mutability":"mutable","name":"actionId","nameLocation":"2575:8:81","nodeType":"VariableDeclaration","scope":20329,"src":"2567:16:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20299,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2567:7:81","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20302,"mutability":"mutable","name":"user","nameLocation":"2593:4:81","nodeType":"VariableDeclaration","scope":20329,"src":"2585:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20301,"name":"address","nodeType":"ElementaryTypeName","src":"2585:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2566:32:81"},"returnParameters":{"id":20307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20306,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20329,"src":"2639:4:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20305,"name":"bool","nodeType":"ElementaryTypeName","src":"2639:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2638:6:81"},"scope":20330,"src":"2546:382:81","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":20331,"src":"1209:1721:81","usedErrors":[5,9352,9357,20215],"usedEvents":[9363,9501]}],"src":"46:2885:81"},"id":81},"contracts/PoolHelperCommon.sol":{"ast":{"absolutePath":"contracts/PoolHelperCommon.sol","exportedSymbols":{"Arrays":[12304],"EnumerableSet":[17618],"IPoolHelperCommon":[865],"IVault":[2545],"IVaultErrors":[3202],"Math":[14327],"OwnableAuthentication":[20330],"PoolHelperCommon":[21059]},"id":21060,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":20332,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:82"},{"absolutePath":"@openzeppelin/contracts/utils/structs/EnumerableSet.sol","file":"@openzeppelin/contracts/utils/structs/EnumerableSet.sol","id":20333,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21060,"sourceUnit":17619,"src":"72:65:82","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol","id":20335,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21060,"sourceUnit":866,"src":"139:114:82","symbolAliases":[{"foreign":{"id":20334,"name":"IPoolHelperCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":865,"src":"148:17:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":20337,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21060,"sourceUnit":3203,"src":"254:93:82","symbolAliases":[{"foreign":{"id":20336,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"263:12:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":20339,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21060,"sourceUnit":2546,"src":"348:81:82","symbolAliases":[{"foreign":{"id":20338,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"357:6:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/OwnableAuthentication.sol","file":"./OwnableAuthentication.sol","id":20341,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21060,"sourceUnit":20331,"src":"431:68:82","symbolAliases":[{"foreign":{"id":20340,"name":"OwnableAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20330,"src":"440:21:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":20343,"name":"IPoolHelperCommon","nameLocations":["619:17:82"],"nodeType":"IdentifierPath","referencedDeclaration":865,"src":"619:17:82"},"id":20344,"nodeType":"InheritanceSpecifier","src":"619:17:82"},{"baseName":{"id":20345,"name":"OwnableAuthentication","nameLocations":["638:21:82"],"nodeType":"IdentifierPath","referencedDeclaration":20330,"src":"638:21:82"},"id":20346,"nodeType":"InheritanceSpecifier","src":"638:21:82"}],"canonicalName":"PoolHelperCommon","contractDependencies":[],"contractKind":"contract","documentation":{"id":20342,"nodeType":"StructuredDocumentation","src":"501:80:82","text":"@notice Common code for helper functions that operate on a subset of pools."},"fullyImplemented":true,"id":21059,"linearizedBaseContracts":[21059,20330,4385,14,9572,9486,12366,865],"name":"PoolHelperCommon","nameLocation":"599:16:82","nodeType":"ContractDefinition","nodes":[{"global":false,"id":20350,"libraryName":{"id":20347,"name":"EnumerableSet","nameLocations":["672:13:82"],"nodeType":"IdentifierPath","referencedDeclaration":17618,"src":"672:13:82"},"nodeType":"UsingForDirective","src":"666:49:82","typeName":{"id":20349,"nodeType":"UserDefinedTypeName","pathNode":{"id":20348,"name":"EnumerableSet.AddressSet","nameLocations":["690:13:82","704:10:82"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"690:24:82"},"referencedDeclaration":16593,"src":"690:24:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}}},{"constant":false,"id":20353,"mutability":"mutable","name":"_nextPoolSetId","nameLocation":"836:14:82","nodeType":"VariableDeclaration","scope":21059,"src":"820:34:82","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20351,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":20352,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"853:1:82","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"private"},{"constant":false,"id":20357,"mutability":"mutable","name":"_poolSetManagers","nameLocation":"971:16:82","nodeType":"VariableDeclaration","scope":21059,"src":"917:70:82","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":20356,"keyName":"poolSetId","keyNameLocation":"933:9:82","keyType":{"id":20354,"name":"uint256","nodeType":"ElementaryTypeName","src":"925:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"917:45:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueName":"manager","valueNameLocation":"954:7:82","valueType":{"id":20355,"name":"address","nodeType":"ElementaryTypeName","src":"946:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"constant":false,"id":20361,"mutability":"mutable","name":"_poolSetLookup","nameLocation":"1185:14:82","nodeType":"VariableDeclaration","scope":21059,"src":"1131:68:82","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":20360,"keyName":"manager","keyNameLocation":"1147:7:82","keyType":{"id":20358,"name":"address","nodeType":"ElementaryTypeName","src":"1139:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1131:45:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolSetId","valueNameLocation":"1166:9:82","valueType":{"id":20359,"name":"uint256","nodeType":"ElementaryTypeName","src":"1158:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":20366,"mutability":"mutable","name":"_poolSets","nameLocation":"1347:9:82","nodeType":"VariableDeclaration","scope":21059,"src":"1278:78:82","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet)"},"typeName":{"id":20365,"keyName":"poolSetId","keyNameLocation":"1294:9:82","keyType":{"id":20362,"name":"uint256","nodeType":"ElementaryTypeName","src":"1286:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"1278:60:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet)"},"valueName":"pools","valueNameLocation":"1332:5:82","valueType":{"id":20364,"nodeType":"UserDefinedTypeName","pathNode":{"id":20363,"name":"EnumerableSet.AddressSet","nameLocations":["1307:13:82","1321:10:82"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"1307:24:82"},"referencedDeclaration":16593,"src":"1307:24:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}}},"visibility":"private"},{"body":{"id":20375,"nodeType":"Block","src":"1485:58:82","statements":[{"expression":{"arguments":[{"id":20371,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20368,"src":"1515:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20370,"name":"_ensureValidPoolSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21058,"src":"1495:19:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":20372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1495:30:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20373,"nodeType":"ExpressionStatement","src":"1495:30:82"},{"id":20374,"nodeType":"PlaceholderStatement","src":"1535:1:82"}]},"id":20376,"name":"withValidPoolSet","nameLocation":"1449:16:82","nodeType":"ModifierDefinition","parameters":{"id":20369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20368,"mutability":"mutable","name":"poolSetId","nameLocation":"1474:9:82","nodeType":"VariableDeclaration","scope":20376,"src":"1466:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20367,"name":"uint256","nodeType":"ElementaryTypeName","src":"1466:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1465:19:82"},"src":"1440:103:82","virtual":false,"visibility":"internal"},{"body":{"id":20391,"nodeType":"Block","src":"1691:111:82","statements":[{"assignments":[20381],"declarations":[{"constant":false,"id":20381,"mutability":"mutable","name":"poolSetId","nameLocation":"1709:9:82","nodeType":"VariableDeclaration","scope":20391,"src":"1701:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20380,"name":"uint256","nodeType":"ElementaryTypeName","src":"1701:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20384,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":20382,"name":"_getValidPoolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20976,"src":"1721:18:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":20383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1721:20:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1701:40:82"},{"expression":{"arguments":[{"id":20386,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20381,"src":"1768:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20387,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20378,"src":"1779:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20385,"name":"_ensurePoolInSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21027,"src":"1751:16:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address) view"}},"id":20388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1751:33:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20389,"nodeType":"ExpressionStatement","src":"1751:33:82"},{"id":20390,"nodeType":"PlaceholderStatement","src":"1794:1:82"}]},"id":20392,"name":"withValidPoolForSender","nameLocation":"1654:22:82","nodeType":"ModifierDefinition","parameters":{"id":20379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20378,"mutability":"mutable","name":"pool","nameLocation":"1685:4:82","nodeType":"VariableDeclaration","scope":20392,"src":"1677:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20377,"name":"address","nodeType":"ElementaryTypeName","src":"1677:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1676:14:82"},"src":"1645:157:82","virtual":false,"visibility":"internal"},{"body":{"id":20401,"nodeType":"Block","src":"1932:56:82","statements":[{"expression":{"arguments":[{"id":20397,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20394,"src":"1962:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20396,"name":"_ensureValidManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21004,"src":"1942:19:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":20398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1942:28:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20399,"nodeType":"ExpressionStatement","src":"1942:28:82"},{"id":20400,"nodeType":"PlaceholderStatement","src":"1980:1:82"}]},"id":20402,"name":"withValidManager","nameLocation":"1898:16:82","nodeType":"ModifierDefinition","parameters":{"id":20395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20394,"mutability":"mutable","name":"manager","nameLocation":"1923:7:82","nodeType":"VariableDeclaration","scope":20402,"src":"1915:15:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20393,"name":"address","nodeType":"ElementaryTypeName","src":"1915:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1914:17:82"},"src":"1889:99:82","virtual":false,"visibility":"internal"},{"body":{"id":20414,"nodeType":"Block","src":"2085:64:82","statements":[]},"id":20415,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":20410,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20405,"src":"2064:5:82","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},{"id":20411,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20407,"src":"2071:12:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":20412,"kind":"baseConstructorSpecifier","modifierName":{"id":20409,"name":"OwnableAuthentication","nameLocations":["2042:21:82"],"nodeType":"IdentifierPath","referencedDeclaration":20330,"src":"2042:21:82"},"nodeType":"ModifierInvocation","src":"2042:42:82"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":20408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20405,"mutability":"mutable","name":"vault","nameLocation":"2013:5:82","nodeType":"VariableDeclaration","scope":20415,"src":"2006:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":20404,"nodeType":"UserDefinedTypeName","pathNode":{"id":20403,"name":"IVault","nameLocations":["2006:6:82"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"2006:6:82"},"referencedDeclaration":2545,"src":"2006:6:82","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":20407,"mutability":"mutable","name":"initialOwner","nameLocation":"2028:12:82","nodeType":"VariableDeclaration","scope":20415,"src":"2020:20:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20406,"name":"address","nodeType":"ElementaryTypeName","src":"2020:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2005:36:82"},"returnParameters":{"id":20413,"nodeType":"ParameterList","parameters":[],"src":"2085:0:82"},"scope":21059,"src":"1994:155:82","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[758],"body":{"id":20432,"nodeType":"Block","src":"2537:54:82","statements":[{"expression":{"arguments":[{"id":20429,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20418,"src":"2569:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20428,"name":"_createPoolSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20497,"src":"2554:14:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$","typeString":"function (address) returns (uint256)"}},"id":20430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2554:30:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20427,"id":20431,"nodeType":"Return","src":"2547:37:82"}]},"documentation":{"id":20416,"nodeType":"StructuredDocumentation","src":"2368:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"e909c19b","id":20433,"implemented":true,"kind":"function","modifiers":[{"id":20421,"kind":"modifierInvocation","modifierName":{"id":20420,"name":"onlyOwner","nameLocations":["2476:9:82"],"nodeType":"IdentifierPath","referencedDeclaration":9397,"src":"2476:9:82"},"nodeType":"ModifierInvocation","src":"2476:9:82"},{"arguments":[{"id":20423,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20418,"src":"2503:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":20424,"kind":"modifierInvocation","modifierName":{"id":20422,"name":"withValidManager","nameLocations":["2486:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20402,"src":"2486:16:82"},"nodeType":"ModifierInvocation","src":"2486:32:82"}],"name":"createPoolSet","nameLocation":"2415:13:82","nodeType":"FunctionDefinition","parameters":{"id":20419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20418,"mutability":"mutable","name":"initialManager","nameLocation":"2446:14:82","nodeType":"VariableDeclaration","scope":20433,"src":"2438:22:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20417,"name":"address","nodeType":"ElementaryTypeName","src":"2438:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2428:38:82"},"returnParameters":{"id":20427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20426,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20433,"src":"2528:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20425,"name":"uint256","nodeType":"ElementaryTypeName","src":"2528:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2527:9:82"},"scope":21059,"src":"2406:185:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[750],"body":{"id":20466,"nodeType":"Block","src":"2811:153:82","statements":[{"expression":{"id":20453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20449,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20447,"src":"2821:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":20451,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20436,"src":"2848:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20450,"name":"_createPoolSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20497,"src":"2833:14:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$","typeString":"function (address) returns (uint256)"}},"id":20452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2833:30:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2821:42:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20454,"nodeType":"ExpressionStatement","src":"2821:42:82"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20455,"name":"newPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20439,"src":"2878:8:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2887:6:82","memberName":"length","nodeType":"MemberAccess","src":"2878:15:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":20457,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2896:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2878:19:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20465,"nodeType":"IfStatement","src":"2874:84:82","trueBody":{"id":20464,"nodeType":"Block","src":"2899:59:82","statements":[{"expression":{"arguments":[{"id":20460,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20447,"src":"2927:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20461,"name":"newPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20439,"src":"2938:8:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":20459,"name":"addPoolsToSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20699,"src":"2913:13:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (uint256,address[] memory)"}},"id":20462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2913:34:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20463,"nodeType":"ExpressionStatement","src":"2913:34:82"}]}}]},"documentation":{"id":20434,"nodeType":"StructuredDocumentation","src":"2597:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"3e035f9b","id":20467,"implemented":true,"kind":"function","modifiers":[{"id":20442,"kind":"modifierInvocation","modifierName":{"id":20441,"name":"onlyOwner","nameLocations":["2740:9:82"],"nodeType":"IdentifierPath","referencedDeclaration":9397,"src":"2740:9:82"},"nodeType":"ModifierInvocation","src":"2740:9:82"},{"arguments":[{"id":20444,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20436,"src":"2767:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":20445,"kind":"modifierInvocation","modifierName":{"id":20443,"name":"withValidManager","nameLocations":["2750:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20402,"src":"2750:16:82"},"nodeType":"ModifierInvocation","src":"2750:32:82"}],"name":"createPoolSet","nameLocation":"2644:13:82","nodeType":"FunctionDefinition","parameters":{"id":20440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20436,"mutability":"mutable","name":"initialManager","nameLocation":"2675:14:82","nodeType":"VariableDeclaration","scope":20467,"src":"2667:22:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20435,"name":"address","nodeType":"ElementaryTypeName","src":"2667:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20439,"mutability":"mutable","name":"newPools","nameLocation":"2716:8:82","nodeType":"VariableDeclaration","scope":20467,"src":"2699:25:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":20437,"name":"address","nodeType":"ElementaryTypeName","src":"2699:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20438,"nodeType":"ArrayTypeName","src":"2699:9:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2657:73:82"},"returnParameters":{"id":20448,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20447,"mutability":"mutable","name":"poolSetId","nameLocation":"2800:9:82","nodeType":"VariableDeclaration","scope":20467,"src":"2792:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20446,"name":"uint256","nodeType":"ElementaryTypeName","src":"2792:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2791:19:82"},"scope":21059,"src":"2635:329:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20496,"nodeType":"Block","src":"3055:257:82","statements":[{"expression":{"id":20477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20474,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20472,"src":"3065:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3077:16:82","subExpression":{"id":20475,"name":"_nextPoolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20353,"src":"3077:14:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3065:28:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20478,"nodeType":"ExpressionStatement","src":"3065:28:82"},{"expression":{"id":20483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20479,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20357,"src":"3152:16:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20481,"indexExpression":{"id":20480,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20472,"src":"3169:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3152:27:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20482,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20469,"src":"3182:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3152:44:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20484,"nodeType":"ExpressionStatement","src":"3152:44:82"},{"expression":{"id":20489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20485,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20361,"src":"3206:14:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20487,"indexExpression":{"id":20486,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20469,"src":"3221:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3206:30:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20488,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20472,"src":"3239:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3206:42:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20490,"nodeType":"ExpressionStatement","src":"3206:42:82"},{"eventCall":{"arguments":[{"id":20492,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20472,"src":"3279:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20493,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20469,"src":"3290:14:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20491,"name":"PoolSetCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":674,"src":"3264:14:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":20494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3264:41:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20495,"nodeType":"EmitStatement","src":"3259:46:82"}]},"id":20497,"implemented":true,"kind":"function","modifiers":[],"name":"_createPoolSet","nameLocation":"2979:14:82","nodeType":"FunctionDefinition","parameters":{"id":20470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20469,"mutability":"mutable","name":"initialManager","nameLocation":"3002:14:82","nodeType":"VariableDeclaration","scope":20497,"src":"2994:22:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20468,"name":"address","nodeType":"ElementaryTypeName","src":"2994:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2993:24:82"},"returnParameters":{"id":20473,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20472,"mutability":"mutable","name":"poolSetId","nameLocation":"3044:9:82","nodeType":"VariableDeclaration","scope":20497,"src":"3036:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20471,"name":"uint256","nodeType":"ElementaryTypeName","src":"3036:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3035:19:82"},"scope":21059,"src":"2970:342:82","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[764],"body":{"id":20581,"nodeType":"Block","src":"3446:745:82","statements":[{"assignments":[20512],"declarations":[{"constant":false,"id":20512,"mutability":"mutable","name":"poolSet","nameLocation":"3489:7:82","nodeType":"VariableDeclaration","scope":20581,"src":"3456:40:82","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":20511,"nodeType":"UserDefinedTypeName","pathNode":{"id":20510,"name":"EnumerableSet.AddressSet","nameLocations":["3456:13:82","3470:10:82"],"nodeType":"IdentifierPath","referencedDeclaration":16593,"src":"3456:24:82"},"referencedDeclaration":16593,"src":"3456:24:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"}],"id":20516,"initialValue":{"baseExpression":{"id":20513,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"3499:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20515,"indexExpression":{"id":20514,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20500,"src":"3509:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3499:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3456:63:82"},{"assignments":[20518],"declarations":[{"constant":false,"id":20518,"mutability":"mutable","name":"numPools","nameLocation":"3580:8:82","nodeType":"VariableDeclaration","scope":20581,"src":"3572:16:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20517,"name":"uint256","nodeType":"ElementaryTypeName","src":"3572:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20522,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20519,"name":"poolSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20512,"src":"3591:7:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":20520,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3599:6:82","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":16702,"src":"3591:14:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16593_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":20521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3591:16:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3572:35:82"},{"body":{"id":20548,"nodeType":"Block","src":"3639:216:82","statements":[{"id":20529,"nodeType":"UncheckedBlock","src":"3653:53:82","statements":[{"expression":{"id":20527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":true,"src":"3681:10:82","subExpression":{"id":20526,"name":"numPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20518,"src":"3683:8:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20528,"nodeType":"ExpressionStatement","src":"3681:10:82"}]},{"assignments":[20531],"declarations":[{"constant":false,"id":20531,"mutability":"mutable","name":"pool","nameLocation":"3728:4:82","nodeType":"VariableDeclaration","scope":20548,"src":"3720:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20530,"name":"address","nodeType":"ElementaryTypeName","src":"3720:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":20536,"initialValue":{"arguments":[{"id":20534,"name":"numPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20518,"src":"3746:8:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":20532,"name":"poolSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20512,"src":"3735:7:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":20533,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3743:2:82","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":16729,"src":"3735:10:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16593_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":20535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3735:20:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3720:35:82"},{"eventCall":{"arguments":[{"id":20538,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20531,"src":"3793:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20539,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20500,"src":"3799:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20537,"name":"PoolRemovedFromSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":695,"src":"3774:18:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":20540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3774:35:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20541,"nodeType":"EmitStatement","src":"3769:40:82"},{"expression":{"arguments":[{"id":20545,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20531,"src":"3839:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":20542,"name":"poolSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20512,"src":"3824:7:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":20544,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3832:6:82","memberName":"remove","nodeType":"MemberAccess","referencedDeclaration":16647,"src":"3824:14:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$16593_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":20546,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3824:20:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20547,"nodeType":"ExpressionStatement","src":"3824:20:82"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20523,"name":"numPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20518,"src":"3625:8:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":20524,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3636:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3625:12:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20549,"nodeType":"WhileStatement","src":"3618:237:82"},{"expression":{"id":20553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"3899:27:82","subExpression":{"baseExpression":{"id":20550,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"3906:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20552,"indexExpression":{"id":20551,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20500,"src":"3916:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3906:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20554,"nodeType":"ExpressionStatement","src":"3899:27:82"},{"assignments":[20556],"declarations":[{"constant":false,"id":20556,"mutability":"mutable","name":"manager","nameLocation":"3945:7:82","nodeType":"VariableDeclaration","scope":20581,"src":"3937:15:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20555,"name":"address","nodeType":"ElementaryTypeName","src":"3937:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":20560,"initialValue":{"baseExpression":{"id":20557,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20357,"src":"3955:16:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20559,"indexExpression":{"id":20558,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20500,"src":"3972:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3955:27:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3937:45:82"},{"expression":{"id":20568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20561,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20357,"src":"4055:16:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20563,"indexExpression":{"id":20562,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20500,"src":"4072:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4055:27:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":20566,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4093:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":20565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4085:7:82","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20564,"name":"address","nodeType":"ElementaryTypeName","src":"4085:7:82","typeDescriptions":{}}},"id":20567,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4085:10:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4055:40:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20569,"nodeType":"ExpressionStatement","src":"4055:40:82"},{"expression":{"id":20574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20570,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20361,"src":"4105:14:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20572,"indexExpression":{"id":20571,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20556,"src":"4120:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4105:23:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":20573,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4131:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4105:27:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20575,"nodeType":"ExpressionStatement","src":"4105:27:82"},{"eventCall":{"arguments":[{"id":20577,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20500,"src":"4165:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20578,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20556,"src":"4176:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20576,"name":"PoolSetDestroyed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":681,"src":"4148:16:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":20579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4148:36:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20580,"nodeType":"EmitStatement","src":"4143:41:82"}]},"documentation":{"id":20498,"nodeType":"StructuredDocumentation","src":"3318:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"7c1ec460","id":20582,"implemented":true,"kind":"function","modifiers":[{"id":20503,"kind":"modifierInvocation","modifierName":{"id":20502,"name":"onlyOwner","nameLocations":["3408:9:82"],"nodeType":"IdentifierPath","referencedDeclaration":9397,"src":"3408:9:82"},"nodeType":"ModifierInvocation","src":"3408:9:82"},{"arguments":[{"id":20505,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20500,"src":"3435:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20506,"kind":"modifierInvocation","modifierName":{"id":20504,"name":"withValidPoolSet","nameLocations":["3418:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20376,"src":"3418:16:82"},"nodeType":"ModifierInvocation","src":"3418:27:82"}],"name":"destroyPoolSet","nameLocation":"3365:14:82","nodeType":"FunctionDefinition","parameters":{"id":20501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20500,"mutability":"mutable","name":"poolSetId","nameLocation":"3388:9:82","nodeType":"VariableDeclaration","scope":20582,"src":"3380:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20499,"name":"uint256","nodeType":"ElementaryTypeName","src":"3380:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3379:19:82"},"returnParameters":{"id":20507,"nodeType":"ParameterList","parameters":[],"src":"3446:0:82"},"scope":21059,"src":"3356:835:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[770],"body":{"id":20622,"nodeType":"Block","src":"4327:332:82","statements":[{"assignments":[20592],"declarations":[{"constant":false,"id":20592,"mutability":"mutable","name":"poolSetId","nameLocation":"4345:9:82","nodeType":"VariableDeclaration","scope":20622,"src":"4337:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20591,"name":"uint256","nodeType":"ElementaryTypeName","src":"4337:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20595,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":20593,"name":"_getValidPoolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20976,"src":"4357:18:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":20594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4357:20:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4337:40:82"},{"expression":{"id":20600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20596,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20357,"src":"4388:16:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20598,"indexExpression":{"id":20597,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20592,"src":"4405:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4388:27:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20599,"name":"newManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20585,"src":"4418:10:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4388:40:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20601,"nodeType":"ExpressionStatement","src":"4388:40:82"},{"expression":{"id":20607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20602,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20361,"src":"4496:14:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20605,"indexExpression":{"expression":{"id":20603,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4511:3:82","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4515:6:82","memberName":"sender","nodeType":"MemberAccess","src":"4511:10:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4496:26:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":20606,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4525:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4496:30:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20608,"nodeType":"ExpressionStatement","src":"4496:30:82"},{"expression":{"id":20613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20609,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20361,"src":"4536:14:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20611,"indexExpression":{"id":20610,"name":"newManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20585,"src":"4551:10:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4536:26:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20612,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20592,"src":"4565:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4536:38:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20614,"nodeType":"ExpressionStatement","src":"4536:38:82"},{"eventCall":{"arguments":[{"id":20616,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20592,"src":"4618:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20617,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4629:3:82","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4633:6:82","memberName":"sender","nodeType":"MemberAccess","src":"4629:10:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20619,"name":"newManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20585,"src":"4641:10:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20615,"name":"PoolSetOwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":704,"src":"4590:27:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (uint256,address,address)"}},"id":20620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4590:62:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20621,"nodeType":"EmitStatement","src":"4585:67:82"}]},"documentation":{"id":20583,"nodeType":"StructuredDocumentation","src":"4197:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"3700f987","id":20623,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":20588,"name":"newManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20585,"src":"4315:10:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":20589,"kind":"modifierInvocation","modifierName":{"id":20587,"name":"withValidManager","nameLocations":["4298:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20402,"src":"4298:16:82"},"nodeType":"ModifierInvocation","src":"4298:28:82"}],"name":"transferPoolSetOwnership","nameLocation":"4244:24:82","nodeType":"FunctionDefinition","parameters":{"id":20586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20585,"mutability":"mutable","name":"newManager","nameLocation":"4277:10:82","nodeType":"VariableDeclaration","scope":20623,"src":"4269:18:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20584,"name":"address","nodeType":"ElementaryTypeName","src":"4269:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4268:20:82"},"returnParameters":{"id":20590,"nodeType":"ParameterList","parameters":[],"src":"4327:0:82"},"scope":21059,"src":"4235:424:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[779],"body":{"id":20698,"nodeType":"Block","src":"5028:630:82","statements":[{"assignments":[20638],"declarations":[{"constant":false,"id":20638,"mutability":"mutable","name":"numPools","nameLocation":"5046:8:82","nodeType":"VariableDeclaration","scope":20698,"src":"5038:16:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20637,"name":"uint256","nodeType":"ElementaryTypeName","src":"5038:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20641,"initialValue":{"expression":{"id":20639,"name":"newPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20629,"src":"5057:8:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5066:6:82","memberName":"length","nodeType":"MemberAccess","src":"5057:15:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5038:34:82"},{"body":{"id":20696,"nodeType":"Block","src":"5122:530:82","statements":[{"assignments":[20653],"declarations":[{"constant":false,"id":20653,"mutability":"mutable","name":"pool","nameLocation":"5144:4:82","nodeType":"VariableDeclaration","scope":20696,"src":"5136:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20652,"name":"address","nodeType":"ElementaryTypeName","src":"5136:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":20657,"initialValue":{"baseExpression":{"id":20654,"name":"newPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20629,"src":"5151:8:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20656,"indexExpression":{"id":20655,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20643,"src":"5160:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5151:11:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5136:26:82"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":20660,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20653,"src":"5255:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":20658,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"5232:5:82","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":20659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5238:16:82","memberName":"isPoolRegistered","nodeType":"MemberAccess","referencedDeclaration":3540,"src":"5232:22:82","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":20661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5232:28:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":20662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5264:5:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"5232:37:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20671,"nodeType":"IfStatement","src":"5228:119:82","trueBody":{"id":20670,"nodeType":"Block","src":"5271:76:82","statements":[{"errorCall":{"arguments":[{"id":20667,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20653,"src":"5327:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":20664,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"5296:12:82","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3202_$","typeString":"type(contract IVaultErrors)"}},"id":20666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5309:17:82","memberName":"PoolNotRegistered","nodeType":"MemberAccess","referencedDeclaration":2857,"src":"5296:30:82","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":20668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5296:36:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20669,"nodeType":"RevertStatement","src":"5289:43:82"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":20676,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20653,"src":"5390:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":20672,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"5365:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20674,"indexExpression":{"id":20673,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20626,"src":"5375:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5365:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20675,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5386:3:82","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":16620,"src":"5365:24:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$16593_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":20677,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5365:30:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":20678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5399:5:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"5365:39:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20686,"nodeType":"IfStatement","src":"5361:118:82","trueBody":{"id":20685,"nodeType":"Block","src":"5406:73:82","statements":[{"errorCall":{"arguments":[{"id":20681,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20653,"src":"5448:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20682,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20626,"src":"5454:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20680,"name":"PoolAlreadyInSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":711,"src":"5431:16:82","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256) pure returns (error)"}},"id":20683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5431:33:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20684,"nodeType":"RevertStatement","src":"5424:40:82"}]}},{"expression":{"arguments":[{"id":20688,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20653,"src":"5585:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20687,"name":"_validatePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21034,"src":"5571:13:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":20689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5571:19:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20690,"nodeType":"ExpressionStatement","src":"5571:19:82"},{"eventCall":{"arguments":[{"id":20692,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20653,"src":"5625:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20693,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20626,"src":"5631:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20691,"name":"PoolAddedToSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":688,"src":"5610:14:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":20694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5610:31:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20695,"nodeType":"EmitStatement","src":"5605:36:82"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20646,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20643,"src":"5103:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":20647,"name":"numPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20638,"src":"5107:8:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5103:12:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20697,"initializationExpression":{"assignments":[20643],"declarations":[{"constant":false,"id":20643,"mutability":"mutable","name":"i","nameLocation":"5096:1:82","nodeType":"VariableDeclaration","scope":20697,"src":"5088:9:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20642,"name":"uint256","nodeType":"ElementaryTypeName","src":"5088:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20645,"initialValue":{"hexValue":"30","id":20644,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5100:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5088:13:82"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":20650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5117:3:82","subExpression":{"id":20649,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20643,"src":"5117:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20651,"nodeType":"ExpressionStatement","src":"5117:3:82"},"nodeType":"ForStatement","src":"5083:569:82"}]},"documentation":{"id":20624,"nodeType":"StructuredDocumentation","src":"4876:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"ebf3a8d0","id":20699,"implemented":true,"kind":"function","modifiers":[{"id":20632,"kind":"modifierInvocation","modifierName":{"id":20631,"name":"onlyOwner","nameLocations":["4990:9:82"],"nodeType":"IdentifierPath","referencedDeclaration":9397,"src":"4990:9:82"},"nodeType":"ModifierInvocation","src":"4990:9:82"},{"arguments":[{"id":20634,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20626,"src":"5017:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20635,"kind":"modifierInvocation","modifierName":{"id":20633,"name":"withValidPoolSet","nameLocations":["5000:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20376,"src":"5000:16:82"},"nodeType":"ModifierInvocation","src":"5000:27:82"}],"name":"addPoolsToSet","nameLocation":"4923:13:82","nodeType":"FunctionDefinition","parameters":{"id":20630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20626,"mutability":"mutable","name":"poolSetId","nameLocation":"4945:9:82","nodeType":"VariableDeclaration","scope":20699,"src":"4937:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20625,"name":"uint256","nodeType":"ElementaryTypeName","src":"4937:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20629,"mutability":"mutable","name":"newPools","nameLocation":"4973:8:82","nodeType":"VariableDeclaration","scope":20699,"src":"4956:25:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":20627,"name":"address","nodeType":"ElementaryTypeName","src":"4956:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20628,"nodeType":"ArrayTypeName","src":"4956:9:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4936:46:82"},"returnParameters":{"id":20636,"nodeType":"ParameterList","parameters":[],"src":"5028:0:82"},"scope":21059,"src":"4914:744:82","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[788],"body":{"id":20756,"nodeType":"Block","src":"5840:331:82","statements":[{"assignments":[20714],"declarations":[{"constant":false,"id":20714,"mutability":"mutable","name":"numPools","nameLocation":"5858:8:82","nodeType":"VariableDeclaration","scope":20756,"src":"5850:16:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20713,"name":"uint256","nodeType":"ElementaryTypeName","src":"5850:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20717,"initialValue":{"expression":{"id":20715,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20705,"src":"5869:5:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5875:6:82","memberName":"length","nodeType":"MemberAccess","src":"5869:12:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5850:31:82"},{"body":{"id":20754,"nodeType":"Block","src":"5931:234:82","statements":[{"assignments":[20729],"declarations":[{"constant":false,"id":20729,"mutability":"mutable","name":"pool","nameLocation":"5953:4:82","nodeType":"VariableDeclaration","scope":20754,"src":"5945:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20728,"name":"address","nodeType":"ElementaryTypeName","src":"5945:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":20733,"initialValue":{"baseExpression":{"id":20730,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20705,"src":"5960:5:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20732,"indexExpression":{"id":20731,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20719,"src":"5966:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5960:8:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5945:23:82"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":20738,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20729,"src":"6015:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":20734,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"5987:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20736,"indexExpression":{"id":20735,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20702,"src":"5997:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5987:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20737,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6008:6:82","memberName":"remove","nodeType":"MemberAccess","referencedDeclaration":16647,"src":"5987:27:82","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$16593_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":20739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5987:33:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":20740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6024:5:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"5987:42:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20748,"nodeType":"IfStatement","src":"5983:117:82","trueBody":{"id":20747,"nodeType":"Block","src":"6031:69:82","statements":[{"errorCall":{"arguments":[{"id":20743,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20729,"src":"6069:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20744,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20702,"src":"6075:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20742,"name":"PoolNotInSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":718,"src":"6056:12:82","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256) pure returns (error)"}},"id":20745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6056:29:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20746,"nodeType":"RevertStatement","src":"6049:36:82"}]}},{"eventCall":{"arguments":[{"id":20750,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20729,"src":"6138:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20751,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20702,"src":"6144:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20749,"name":"PoolRemovedFromSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":695,"src":"6119:18:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":20752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6119:35:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20753,"nodeType":"EmitStatement","src":"6114:40:82"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20722,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20719,"src":"5912:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":20723,"name":"numPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20714,"src":"5916:8:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5912:12:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20755,"initializationExpression":{"assignments":[20719],"declarations":[{"constant":false,"id":20719,"mutability":"mutable","name":"i","nameLocation":"5905:1:82","nodeType":"VariableDeclaration","scope":20755,"src":"5897:9:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20718,"name":"uint256","nodeType":"ElementaryTypeName","src":"5897:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20721,"initialValue":{"hexValue":"30","id":20720,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5909:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5897:13:82"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":20726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5926:3:82","subExpression":{"id":20725,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20719,"src":"5926:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20727,"nodeType":"ExpressionStatement","src":"5926:3:82"},"nodeType":"ForStatement","src":"5892:273:82"}]},"documentation":{"id":20700,"nodeType":"StructuredDocumentation","src":"5664:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"2da55a1d","id":20757,"implemented":true,"kind":"function","modifiers":[{"id":20708,"kind":"modifierInvocation","modifierName":{"id":20707,"name":"onlyOwner","nameLocations":["5802:9:82"],"nodeType":"IdentifierPath","referencedDeclaration":9397,"src":"5802:9:82"},"nodeType":"ModifierInvocation","src":"5802:9:82"},{"arguments":[{"id":20710,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20702,"src":"5829:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20711,"kind":"modifierInvocation","modifierName":{"id":20709,"name":"withValidPoolSet","nameLocations":["5812:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20376,"src":"5812:16:82"},"nodeType":"ModifierInvocation","src":"5812:27:82"}],"name":"removePoolsFromSet","nameLocation":"5711:18:82","nodeType":"FunctionDefinition","parameters":{"id":20706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20702,"mutability":"mutable","name":"poolSetId","nameLocation":"5747:9:82","nodeType":"VariableDeclaration","scope":20757,"src":"5739:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20701,"name":"uint256","nodeType":"ElementaryTypeName","src":"5739:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20705,"mutability":"mutable","name":"pools","nameLocation":"5783:5:82","nodeType":"VariableDeclaration","scope":20757,"src":"5766:22:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":20703,"name":"address","nodeType":"ElementaryTypeName","src":"5766:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20704,"nodeType":"ArrayTypeName","src":"5766:9:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5729:65:82"},"returnParameters":{"id":20712,"nodeType":"ParameterList","parameters":[],"src":"5840:0:82"},"scope":21059,"src":"5702:469:82","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[794],"body":{"id":20768,"nodeType":"Block","src":"6517:50:82","statements":[{"expression":{"baseExpression":{"id":20763,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20361,"src":"6534:14:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20766,"indexExpression":{"expression":{"id":20764,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6549:3:82","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6553:6:82","memberName":"sender","nodeType":"MemberAccess","src":"6549:10:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6534:26:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20762,"id":20767,"nodeType":"Return","src":"6527:33:82"}]},"documentation":{"id":20758,"nodeType":"StructuredDocumentation","src":"6416:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"ce998aba","id":20769,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolSetIdForCaller","nameLocation":"6463:21:82","nodeType":"FunctionDefinition","parameters":{"id":20759,"nodeType":"ParameterList","parameters":[],"src":"6484:2:82"},"returnParameters":{"id":20762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20761,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20769,"src":"6508:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20760,"name":"uint256","nodeType":"ElementaryTypeName","src":"6508:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6507:9:82"},"scope":21059,"src":"6454:113:82","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[802],"body":{"id":20781,"nodeType":"Block","src":"6690:47:82","statements":[{"expression":{"baseExpression":{"id":20777,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20361,"src":"6707:14:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20779,"indexExpression":{"id":20778,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20772,"src":"6722:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6707:23:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20776,"id":20780,"nodeType":"Return","src":"6700:30:82"}]},"documentation":{"id":20770,"nodeType":"StructuredDocumentation","src":"6573:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"25c427ed","id":20782,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolSetIdForManager","nameLocation":"6620:22:82","nodeType":"FunctionDefinition","parameters":{"id":20773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20772,"mutability":"mutable","name":"manager","nameLocation":"6651:7:82","nodeType":"VariableDeclaration","scope":20782,"src":"6643:15:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20771,"name":"address","nodeType":"ElementaryTypeName","src":"6643:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6642:17:82"},"returnParameters":{"id":20776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20775,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20782,"src":"6681:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20774,"name":"uint256","nodeType":"ElementaryTypeName","src":"6681:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6680:9:82"},"scope":21059,"src":"6611:126:82","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[810],"body":{"id":20799,"nodeType":"Block","src":"6888:53:82","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":20793,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"6905:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20795,"indexExpression":{"id":20794,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20785,"src":"6915:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6905:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20796,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6926:6:82","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":16702,"src":"6905:27:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16593_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":20797,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6905:29:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20792,"id":20798,"nodeType":"Return","src":"6898:36:82"}]},"documentation":{"id":20783,"nodeType":"StructuredDocumentation","src":"6743:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"62d53462","id":20800,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":20788,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20785,"src":"6859:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20789,"kind":"modifierInvocation","modifierName":{"id":20787,"name":"withValidPoolSet","nameLocations":["6842:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20376,"src":"6842:16:82"},"nodeType":"ModifierInvocation","src":"6842:27:82"}],"name":"getPoolCountForSet","nameLocation":"6790:18:82","nodeType":"FunctionDefinition","parameters":{"id":20786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20785,"mutability":"mutable","name":"poolSetId","nameLocation":"6817:9:82","nodeType":"VariableDeclaration","scope":20800,"src":"6809:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20784,"name":"uint256","nodeType":"ElementaryTypeName","src":"6809:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6808:19:82"},"returnParameters":{"id":20792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20791,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20800,"src":"6879:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20790,"name":"uint256","nodeType":"ElementaryTypeName","src":"6879:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6878:9:82"},"scope":21059,"src":"6781:160:82","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[818],"body":{"id":20817,"nodeType":"Block","src":"7059:65:82","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":20808,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20357,"src":"7076:16:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20810,"indexExpression":{"id":20809,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20803,"src":"7093:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7076:27:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":20813,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7115:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":20812,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7107:7:82","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20811,"name":"address","nodeType":"ElementaryTypeName","src":"7107:7:82","typeDescriptions":{}}},"id":20814,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7107:10:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7076:41:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":20807,"id":20816,"nodeType":"Return","src":"7069:48:82"}]},"documentation":{"id":20801,"nodeType":"StructuredDocumentation","src":"6947:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"255dae41","id":20818,"implemented":true,"kind":"function","modifiers":[],"name":"isValidPoolSetId","nameLocation":"6994:16:82","nodeType":"FunctionDefinition","parameters":{"id":20804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20803,"mutability":"mutable","name":"poolSetId","nameLocation":"7019:9:82","nodeType":"VariableDeclaration","scope":20818,"src":"7011:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20802,"name":"uint256","nodeType":"ElementaryTypeName","src":"7011:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7010:19:82"},"returnParameters":{"id":20807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20806,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20818,"src":"7053:4:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20805,"name":"bool","nodeType":"ElementaryTypeName","src":"7053:4:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7052:6:82"},"scope":21059,"src":"6985:139:82","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[828],"body":{"id":20838,"nodeType":"Block","src":"7279:59:82","statements":[{"expression":{"arguments":[{"id":20835,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20821,"src":"7326:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":20831,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"7296:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20833,"indexExpression":{"id":20832,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20823,"src":"7306:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7296:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20834,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7317:8:82","memberName":"contains","nodeType":"MemberAccess","referencedDeclaration":16687,"src":"7296:29:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16593_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"}},"id":20836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7296:35:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":20830,"id":20837,"nodeType":"Return","src":"7289:42:82"}]},"documentation":{"id":20819,"nodeType":"StructuredDocumentation","src":"7130:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"182551da","id":20839,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":20826,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20823,"src":"7253:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20827,"kind":"modifierInvocation","modifierName":{"id":20825,"name":"withValidPoolSet","nameLocations":["7236:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20376,"src":"7236:16:82"},"nodeType":"ModifierInvocation","src":"7236:27:82"}],"name":"isPoolInSet","nameLocation":"7177:11:82","nodeType":"FunctionDefinition","parameters":{"id":20824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20821,"mutability":"mutable","name":"pool","nameLocation":"7197:4:82","nodeType":"VariableDeclaration","scope":20839,"src":"7189:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20820,"name":"address","nodeType":"ElementaryTypeName","src":"7189:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20823,"mutability":"mutable","name":"poolSetId","nameLocation":"7211:9:82","nodeType":"VariableDeclaration","scope":20839,"src":"7203:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20822,"name":"uint256","nodeType":"ElementaryTypeName","src":"7203:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7188:33:82"},"returnParameters":{"id":20830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20829,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20839,"src":"7273:4:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20828,"name":"bool","nodeType":"ElementaryTypeName","src":"7273:4:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7272:6:82"},"scope":21059,"src":"7168:170:82","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[837],"body":{"id":20857,"nodeType":"Block","src":"7516:53:82","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":20851,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"7533:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20853,"indexExpression":{"id":20852,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20842,"src":"7543:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7533:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20854,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7554:6:82","memberName":"values","nodeType":"MemberAccess","referencedDeclaration":16759,"src":"7533:27:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16593_storage_ptr_$returns$_t_array$_t_address_$dyn_memory_ptr_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (address[] memory)"}},"id":20855,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7533:29:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":20850,"id":20856,"nodeType":"Return","src":"7526:36:82"}]},"documentation":{"id":20840,"nodeType":"StructuredDocumentation","src":"7344:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"94fc4058","id":20858,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":20845,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20842,"src":"7472:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20846,"kind":"modifierInvocation","modifierName":{"id":20844,"name":"withValidPoolSet","nameLocations":["7455:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20376,"src":"7455:16:82"},"nodeType":"ModifierInvocation","src":"7455:27:82"}],"name":"getAllPoolsInSet","nameLocation":"7391:16:82","nodeType":"FunctionDefinition","parameters":{"id":20843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20842,"mutability":"mutable","name":"poolSetId","nameLocation":"7425:9:82","nodeType":"VariableDeclaration","scope":20858,"src":"7417:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20841,"name":"uint256","nodeType":"ElementaryTypeName","src":"7417:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7407:33:82"},"returnParameters":{"id":20850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20849,"mutability":"mutable","name":"pools","nameLocation":"7509:5:82","nodeType":"VariableDeclaration","scope":20858,"src":"7492:22:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":20847,"name":"address","nodeType":"ElementaryTypeName","src":"7492:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20848,"nodeType":"ArrayTypeName","src":"7492:9:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"7491:24:82"},"scope":21059,"src":"7382:187:82","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[850],"body":{"id":20934,"nodeType":"Block","src":"7784:349:82","statements":[{"assignments":[20875],"declarations":[{"constant":false,"id":20875,"mutability":"mutable","name":"spanLength","nameLocation":"7802:10:82","nodeType":"VariableDeclaration","scope":20934,"src":"7794:18:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20874,"name":"uint256","nodeType":"ElementaryTypeName","src":"7794:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20881,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":20876,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"7815:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20878,"indexExpression":{"id":20877,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20861,"src":"7825:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7815:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20879,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7836:6:82","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":16702,"src":"7815:27:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16593_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":20880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7815:29:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7794:50:82"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20882,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20863,"src":"7859:4:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":20883,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20865,"src":"7866:2:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7859:9:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20885,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20865,"src":"7872:2:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":20886,"name":"spanLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20875,"src":"7877:10:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7872:15:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7859:28:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20889,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20863,"src":"7891:4:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":20890,"name":"spanLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20875,"src":"7899:10:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7891:18:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7859:50:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20898,"nodeType":"IfStatement","src":"7855:115:82","trueBody":{"id":20897,"nodeType":"Block","src":"7911:59:82","statements":[{"errorCall":{"arguments":[{"id":20894,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20861,"src":"7949:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20893,"name":"IndexOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":739,"src":"7932:16:82","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":20895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7932:27:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20896,"nodeType":"RevertStatement","src":"7925:34:82"}]}},{"expression":{"id":20907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20899,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20872,"src":"7980:5:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20903,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20865,"src":"8002:2:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":20904,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20863,"src":"8007:4:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8002:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20902,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"7988:13:82","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":20900,"name":"address","nodeType":"ElementaryTypeName","src":"7992:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20901,"nodeType":"ArrayTypeName","src":"7992:9:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":20906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7988:24:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"7980:32:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20908,"nodeType":"ExpressionStatement","src":"7980:32:82"},{"body":{"id":20932,"nodeType":"Block","src":"8058:69:82","statements":[{"expression":{"id":20930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20919,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20872,"src":"8072:5:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20923,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20920,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20910,"src":"8078:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":20921,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20863,"src":"8082:4:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8078:8:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8072:15:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":20928,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20910,"src":"8114:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":20924,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"8090:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20926,"indexExpression":{"id":20925,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20861,"src":"8100:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8090:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20927,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8111:2:82","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":16729,"src":"8090:23:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16593_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":20929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8090:26:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8072:44:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20931,"nodeType":"ExpressionStatement","src":"8072:44:82"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20913,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20910,"src":"8045:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":20914,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20865,"src":"8049:2:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8045:6:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20933,"initializationExpression":{"assignments":[20910],"declarations":[{"constant":false,"id":20910,"mutability":"mutable","name":"i","nameLocation":"8035:1:82","nodeType":"VariableDeclaration","scope":20933,"src":"8027:9:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20909,"name":"uint256","nodeType":"ElementaryTypeName","src":"8027:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20912,"initialValue":{"id":20911,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20863,"src":"8039:4:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8027:16:82"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":20917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8053:3:82","subExpression":{"id":20916,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20910,"src":"8053:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20918,"nodeType":"ExpressionStatement","src":"8053:3:82"},"nodeType":"ForStatement","src":"8022:105:82"}]},"documentation":{"id":20859,"nodeType":"StructuredDocumentation","src":"7575:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"8c60ebd0","id":20935,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":20868,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20861,"src":"7740:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20869,"kind":"modifierInvocation","modifierName":{"id":20867,"name":"withValidPoolSet","nameLocations":["7723:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":20376,"src":"7723:16:82"},"nodeType":"ModifierInvocation","src":"7723:27:82"}],"name":"getPoolsInSet","nameLocation":"7622:13:82","nodeType":"FunctionDefinition","parameters":{"id":20866,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20861,"mutability":"mutable","name":"poolSetId","nameLocation":"7653:9:82","nodeType":"VariableDeclaration","scope":20935,"src":"7645:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20860,"name":"uint256","nodeType":"ElementaryTypeName","src":"7645:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20863,"mutability":"mutable","name":"from","nameLocation":"7680:4:82","nodeType":"VariableDeclaration","scope":20935,"src":"7672:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20862,"name":"uint256","nodeType":"ElementaryTypeName","src":"7672:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20865,"mutability":"mutable","name":"to","nameLocation":"7702:2:82","nodeType":"VariableDeclaration","scope":20935,"src":"7694:10:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20864,"name":"uint256","nodeType":"ElementaryTypeName","src":"7694:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7635:75:82"},"returnParameters":{"id":20873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20872,"mutability":"mutable","name":"pools","nameLocation":"7777:5:82","nodeType":"VariableDeclaration","scope":20935,"src":"7760:22:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":20870,"name":"address","nodeType":"ElementaryTypeName","src":"7760:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20871,"nodeType":"ArrayTypeName","src":"7760:9:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"7759:24:82"},"scope":21059,"src":"7613:520:82","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[856],"body":{"id":20943,"nodeType":"Block","src":"8237:38:82","statements":[{"expression":{"id":20941,"name":"_nextPoolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20353,"src":"8254:14:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20940,"id":20942,"nodeType":"Return","src":"8247:21:82"}]},"documentation":{"id":20936,"nodeType":"StructuredDocumentation","src":"8139:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"c482e822","id":20944,"implemented":true,"kind":"function","modifiers":[],"name":"getNextPoolSetId","nameLocation":"8186:16:82","nodeType":"FunctionDefinition","parameters":{"id":20937,"nodeType":"ParameterList","parameters":[],"src":"8202:2:82"},"returnParameters":{"id":20940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20939,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20944,"src":"8228:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20938,"name":"uint256","nodeType":"ElementaryTypeName","src":"8228:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8227:9:82"},"scope":21059,"src":"8177:98:82","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[864],"body":{"id":20956,"nodeType":"Block","src":"8400:51:82","statements":[{"expression":{"baseExpression":{"id":20952,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20357,"src":"8417:16:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20954,"indexExpression":{"id":20953,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20947,"src":"8434:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8417:27:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":20951,"id":20955,"nodeType":"Return","src":"8410:34:82"}]},"documentation":{"id":20945,"nodeType":"StructuredDocumentation","src":"8281:33:82","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"f167a1e6","id":20957,"implemented":true,"kind":"function","modifiers":[],"name":"getManagerForPoolSet","nameLocation":"8328:20:82","nodeType":"FunctionDefinition","parameters":{"id":20948,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20947,"mutability":"mutable","name":"poolSetId","nameLocation":"8357:9:82","nodeType":"VariableDeclaration","scope":20957,"src":"8349:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20946,"name":"uint256","nodeType":"ElementaryTypeName","src":"8349:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8348:19:82"},"returnParameters":{"id":20951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20950,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20957,"src":"8391:7:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20949,"name":"address","nodeType":"ElementaryTypeName","src":"8391:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8390:9:82"},"scope":21059,"src":"8319:132:82","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":20975,"nodeType":"Block","src":"8830:141:82","statements":[{"expression":{"id":20965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20962,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20960,"src":"8840:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":20963,"name":"getPoolSetIdForCaller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20769,"src":"8852:21:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":20964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8852:23:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8840:35:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20966,"nodeType":"ExpressionStatement","src":"8840:35:82"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20967,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20960,"src":"8890:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":20968,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8903:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8890:14:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20974,"nodeType":"IfStatement","src":"8886:79:82","trueBody":{"id":20973,"nodeType":"Block","src":"8906:59:82","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20970,"name":"SenderIsNotPoolSetManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":734,"src":"8927:25:82","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":20971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8927:27:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20972,"nodeType":"RevertStatement","src":"8920:34:82"}]}}]},"id":20976,"implemented":true,"kind":"function","modifiers":[],"name":"_getValidPoolSetId","nameLocation":"8767:18:82","nodeType":"FunctionDefinition","parameters":{"id":20958,"nodeType":"ParameterList","parameters":[],"src":"8785:2:82"},"returnParameters":{"id":20961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20960,"mutability":"mutable","name":"poolSetId","nameLocation":"8819:9:82","nodeType":"VariableDeclaration","scope":20976,"src":"8811:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20959,"name":"uint256","nodeType":"ElementaryTypeName","src":"8811:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8810:19:82"},"scope":21059,"src":"8758:213:82","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":21003,"nodeType":"Block","src":"9037:206:82","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20981,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20978,"src":"9051:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":20984,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9070:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":20983,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9062:7:82","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20982,"name":"address","nodeType":"ElementaryTypeName","src":"9062:7:82","typeDescriptions":{}}},"id":20985,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9062:10:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9051:21:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20991,"nodeType":"IfStatement","src":"9047:82:82","trueBody":{"id":20990,"nodeType":"Block","src":"9074:55:82","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20987,"name":"InvalidPoolSetManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"9095:21:82","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":20988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9095:23:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20989,"nodeType":"RevertStatement","src":"9088:30:82"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":20992,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20361,"src":"9143:14:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20994,"indexExpression":{"id":20993,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20978,"src":"9158:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9143:23:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":20995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9170:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9143:28:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21002,"nodeType":"IfStatement","src":"9139:98:82","trueBody":{"id":21001,"nodeType":"Block","src":"9173:64:82","statements":[{"errorCall":{"arguments":[{"id":20998,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20978,"src":"9218:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20997,"name":"PoolSetManagerNotUnique","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":731,"src":"9194:23:82","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":20999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9194:32:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":21000,"nodeType":"RevertStatement","src":"9187:39:82"}]}}]},"id":21004,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidManager","nameLocation":"8986:19:82","nodeType":"FunctionDefinition","parameters":{"id":20979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20978,"mutability":"mutable","name":"manager","nameLocation":"9014:7:82","nodeType":"VariableDeclaration","scope":21004,"src":"9006:15:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20977,"name":"address","nodeType":"ElementaryTypeName","src":"9006:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9005:17:82"},"returnParameters":{"id":20980,"nodeType":"ParameterList","parameters":[],"src":"9037:0:82"},"scope":21059,"src":"8977:266:82","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":21026,"nodeType":"Block","src":"9322:127:82","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":21015,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21008,"src":"9366:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":21011,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20366,"src":"9336:9:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16593_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":21013,"indexExpression":{"id":21012,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21006,"src":"9346:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9336:20:82","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16593_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":21014,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9357:8:82","memberName":"contains","nodeType":"MemberAccess","referencedDeclaration":16687,"src":"9336:29:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16593_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$16593_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"}},"id":21016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9336:35:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":21017,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9375:5:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"9336:44:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21025,"nodeType":"IfStatement","src":"9332:111:82","trueBody":{"id":21024,"nodeType":"Block","src":"9382:61:82","statements":[{"errorCall":{"arguments":[{"id":21020,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21008,"src":"9416:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21021,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21006,"src":"9422:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21019,"name":"PoolNotInSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":718,"src":"9403:12:82","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256) pure returns (error)"}},"id":21022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9403:29:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":21023,"nodeType":"RevertStatement","src":"9396:36:82"}]}}]},"id":21027,"implemented":true,"kind":"function","modifiers":[],"name":"_ensurePoolInSet","nameLocation":"9258:16:82","nodeType":"FunctionDefinition","parameters":{"id":21009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21006,"mutability":"mutable","name":"poolSetId","nameLocation":"9283:9:82","nodeType":"VariableDeclaration","scope":21027,"src":"9275:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21005,"name":"uint256","nodeType":"ElementaryTypeName","src":"9275:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21008,"mutability":"mutable","name":"pool","nameLocation":"9302:4:82","nodeType":"VariableDeclaration","scope":21027,"src":"9294:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21007,"name":"address","nodeType":"ElementaryTypeName","src":"9294:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9274:33:82"},"returnParameters":{"id":21010,"nodeType":"ParameterList","parameters":[],"src":"9322:0:82"},"scope":21059,"src":"9249:200:82","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":21033,"nodeType":"Block","src":"9607:64:82","statements":[]},"documentation":{"id":21028,"nodeType":"StructuredDocumentation","src":"9455:88:82","text":"@dev Optional function called in `addPoolsToSet` for optional additional validation."},"id":21034,"implemented":true,"kind":"function","modifiers":[],"name":"_validatePool","nameLocation":"9557:13:82","nodeType":"FunctionDefinition","parameters":{"id":21031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21030,"mutability":"mutable","name":"pool","nameLocation":"9579:4:82","nodeType":"VariableDeclaration","scope":21034,"src":"9571:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21029,"name":"address","nodeType":"ElementaryTypeName","src":"9571:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9570:14:82"},"returnParameters":{"id":21032,"nodeType":"ParameterList","parameters":[],"src":"9607:0:82"},"scope":21059,"src":"9548:123:82","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":21057,"nodeType":"Block","src":"9739:140:82","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21039,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21036,"src":"9753:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":21040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9766:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9753:14:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":21049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":21042,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20357,"src":"9771:16:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":21044,"indexExpression":{"id":21043,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21036,"src":"9788:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9771:27:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":21047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9810:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":21046,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9802:7:82","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21045,"name":"address","nodeType":"ElementaryTypeName","src":"9802:7:82","typeDescriptions":{}}},"id":21048,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9802:10:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9771:41:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9753:59:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21056,"nodeType":"IfStatement","src":"9749:124:82","trueBody":{"id":21055,"nodeType":"Block","src":"9814:59:82","statements":[{"errorCall":{"arguments":[{"id":21052,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21036,"src":"9852:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21051,"name":"InvalidPoolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":723,"src":"9835:16:82","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":21053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9835:27:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":21054,"nodeType":"RevertStatement","src":"9828:34:82"}]}}]},"id":21058,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidPoolSet","nameLocation":"9686:19:82","nodeType":"FunctionDefinition","parameters":{"id":21037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21036,"mutability":"mutable","name":"poolSetId","nameLocation":"9714:9:82","nodeType":"VariableDeclaration","scope":21058,"src":"9706:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21035,"name":"uint256","nodeType":"ElementaryTypeName","src":"9706:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9705:19:82"},"returnParameters":{"id":21038,"nodeType":"ParameterList","parameters":[],"src":"9739:0:82"},"scope":21059,"src":"9677:202:82","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":21060,"src":"581:9300:82","usedErrors":[5,711,718,723,726,731,734,739,2857,9352,9357,20215],"usedEvents":[674,681,688,695,704,9363,9501]}],"src":"46:9836:82"},"id":82},"contracts/PoolPauseHelper.sol":{"ast":{"absolutePath":"contracts/PoolPauseHelper.sol","exportedSymbols":{"IPoolPauseHelper":[876],"IVault":[2545],"PoolHelperCommon":[21059],"PoolPauseHelper":[21132]},"id":21133,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":21061,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:83"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol","id":21063,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21133,"sourceUnit":877,"src":"72:112:83","symbolAliases":[{"foreign":{"id":21062,"name":"IPoolPauseHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":876,"src":"81:16:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":21065,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21133,"sourceUnit":2546,"src":"185:81:83","symbolAliases":[{"foreign":{"id":21064,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"194:6:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/PoolHelperCommon.sol","file":"./PoolHelperCommon.sol","id":21067,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21133,"sourceUnit":21060,"src":"268:58:83","symbolAliases":[{"foreign":{"id":21066,"name":"PoolHelperCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21059,"src":"277:16:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":21068,"name":"IPoolPauseHelper","nameLocations":["356:16:83"],"nodeType":"IdentifierPath","referencedDeclaration":876,"src":"356:16:83"},"id":21069,"nodeType":"InheritanceSpecifier","src":"356:16:83"},{"baseName":{"id":21070,"name":"PoolHelperCommon","nameLocations":["374:16:83"],"nodeType":"IdentifierPath","referencedDeclaration":21059,"src":"374:16:83"},"id":21071,"nodeType":"InheritanceSpecifier","src":"374:16:83"}],"canonicalName":"PoolPauseHelper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":21132,"linearizedBaseContracts":[21132,21059,20330,4385,14,9572,9486,12366,865,876],"name":"PoolPauseHelper","nameLocation":"337:15:83","nodeType":"ContractDefinition","nodes":[{"body":{"id":21083,"nodeType":"Block","src":"483:64:83","statements":[]},"id":21084,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":21079,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21074,"src":"462:5:83","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},{"id":21080,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21076,"src":"469:12:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21081,"kind":"baseConstructorSpecifier","modifierName":{"id":21078,"name":"PoolHelperCommon","nameLocations":["445:16:83"],"nodeType":"IdentifierPath","referencedDeclaration":21059,"src":"445:16:83"},"nodeType":"ModifierInvocation","src":"445:37:83"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":21077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21074,"mutability":"mutable","name":"vault","nameLocation":"416:5:83","nodeType":"VariableDeclaration","scope":21084,"src":"409:12:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":21073,"nodeType":"UserDefinedTypeName","pathNode":{"id":21072,"name":"IVault","nameLocations":["409:6:83"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"409:6:83"},"referencedDeclaration":2545,"src":"409:6:83","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":21076,"mutability":"mutable","name":"initialOwner","nameLocation":"431:12:83","nodeType":"VariableDeclaration","scope":21084,"src":"423:20:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21075,"name":"address","nodeType":"ElementaryTypeName","src":"423:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"408:36:83"},"returnParameters":{"id":21082,"nodeType":"ParameterList","parameters":[],"src":"483:0:83"},"scope":21132,"src":"397:150:83","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[875],"body":{"id":21130,"nodeType":"Block","src":"853:326:83","statements":[{"assignments":[21092],"declarations":[{"constant":false,"id":21092,"mutability":"mutable","name":"poolSetId","nameLocation":"922:9:83","nodeType":"VariableDeclaration","scope":21130,"src":"914:17:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21091,"name":"uint256","nodeType":"ElementaryTypeName","src":"914:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21095,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":21093,"name":"_getValidPoolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20976,"src":"934:18:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":21094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"934:20:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"914:40:83"},{"assignments":[21097],"declarations":[{"constant":false,"id":21097,"mutability":"mutable","name":"length","nameLocation":"973:6:83","nodeType":"VariableDeclaration","scope":21130,"src":"965:14:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21096,"name":"uint256","nodeType":"ElementaryTypeName","src":"965:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21100,"initialValue":{"expression":{"id":21098,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21088,"src":"982:5:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":21099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"988:6:83","memberName":"length","nodeType":"MemberAccess","src":"982:12:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"965:29:83"},{"body":{"id":21128,"nodeType":"Block","src":"1042:131:83","statements":[{"assignments":[21112],"declarations":[{"constant":false,"id":21112,"mutability":"mutable","name":"pool","nameLocation":"1064:4:83","nodeType":"VariableDeclaration","scope":21128,"src":"1056:12:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21111,"name":"address","nodeType":"ElementaryTypeName","src":"1056:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":21116,"initialValue":{"baseExpression":{"id":21113,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21088,"src":"1071:5:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":21115,"indexExpression":{"id":21114,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21102,"src":"1077:1:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1071:8:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1056:23:83"},{"expression":{"arguments":[{"id":21118,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21092,"src":"1110:9:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21119,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21112,"src":"1121:4:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21117,"name":"_ensurePoolInSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21027,"src":"1093:16:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address) view"}},"id":21120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1093:33:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21121,"nodeType":"ExpressionStatement","src":"1093:33:83"},{"expression":{"arguments":[{"id":21125,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21112,"src":"1157:4:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":21122,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"1141:5:83","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":21124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1147:9:83","memberName":"pausePool","nodeType":"MemberAccess","referencedDeclaration":2647,"src":"1141:15:83","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":21126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1141:21:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21127,"nodeType":"ExpressionStatement","src":"1141:21:83"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21105,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21102,"src":"1025:1:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":21106,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21097,"src":"1029:6:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1025:10:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21129,"initializationExpression":{"assignments":[21102],"declarations":[{"constant":false,"id":21102,"mutability":"mutable","name":"i","nameLocation":"1018:1:83","nodeType":"VariableDeclaration","scope":21129,"src":"1010:9:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21101,"name":"uint256","nodeType":"ElementaryTypeName","src":"1010:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21104,"initialValue":{"hexValue":"30","id":21103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1022:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1010:13:83"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1037:3:83","subExpression":{"id":21108,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21102,"src":"1037:1:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21110,"nodeType":"ExpressionStatement","src":"1037:3:83"},"nodeType":"ForStatement","src":"1005:168:83"}]},"documentation":{"id":21085,"nodeType":"StructuredDocumentation","src":"765:32:83","text":"@inheritdoc IPoolPauseHelper"},"functionSelector":"a20dc529","id":21131,"implemented":true,"kind":"function","modifiers":[],"name":"pausePools","nameLocation":"811:10:83","nodeType":"FunctionDefinition","parameters":{"id":21089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21088,"mutability":"mutable","name":"pools","nameLocation":"839:5:83","nodeType":"VariableDeclaration","scope":21131,"src":"822:22:83","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":21086,"name":"address","nodeType":"ElementaryTypeName","src":"822:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":21087,"nodeType":"ArrayTypeName","src":"822:9:83","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"821:24:83"},"returnParameters":{"id":21090,"nodeType":"ParameterList","parameters":[],"src":"853:0:83"},"scope":21132,"src":"802:377:83","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":21133,"src":"328:853:83","usedErrors":[5,711,718,723,726,731,734,739,2857,9352,9357,20215],"usedEvents":[674,681,688,695,704,9363,9501]}],"src":"46:1136:83"},"id":83},"contracts/PoolSwapFeeHelper.sol":{"ast":{"absolutePath":"contracts/PoolSwapFeeHelper.sol","exportedSymbols":{"IPoolSwapFeeHelper":[893],"IVault":[2545],"PoolHelperCommon":[21059],"PoolSwapFeeHelper":[21201]},"id":21202,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":21134,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:84"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol","id":21136,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21202,"sourceUnit":894,"src":"72:116:84","symbolAliases":[{"foreign":{"id":21135,"name":"IPoolSwapFeeHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":893,"src":"81:18:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":21138,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21202,"sourceUnit":2546,"src":"189:81:84","symbolAliases":[{"foreign":{"id":21137,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"198:6:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/PoolHelperCommon.sol","file":"./PoolHelperCommon.sol","id":21140,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21202,"sourceUnit":21060,"src":"272:58:84","symbolAliases":[{"foreign":{"id":21139,"name":"PoolHelperCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21059,"src":"281:16:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":21141,"name":"IPoolSwapFeeHelper","nameLocations":["362:18:84"],"nodeType":"IdentifierPath","referencedDeclaration":893,"src":"362:18:84"},"id":21142,"nodeType":"InheritanceSpecifier","src":"362:18:84"},{"baseName":{"id":21143,"name":"PoolHelperCommon","nameLocations":["382:16:84"],"nodeType":"IdentifierPath","referencedDeclaration":21059,"src":"382:16:84"},"id":21144,"nodeType":"InheritanceSpecifier","src":"382:16:84"}],"canonicalName":"PoolSwapFeeHelper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":21201,"linearizedBaseContracts":[21201,21059,20330,4385,14,9572,9486,12366,865,893],"name":"PoolSwapFeeHelper","nameLocation":"341:17:84","nodeType":"ContractDefinition","nodes":[{"body":{"id":21156,"nodeType":"Block","src":"491:64:84","statements":[]},"id":21157,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":21152,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21147,"src":"470:5:84","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},{"id":21153,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21149,"src":"477:12:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21154,"kind":"baseConstructorSpecifier","modifierName":{"id":21151,"name":"PoolHelperCommon","nameLocations":["453:16:84"],"nodeType":"IdentifierPath","referencedDeclaration":21059,"src":"453:16:84"},"nodeType":"ModifierInvocation","src":"453:37:84"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":21150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21147,"mutability":"mutable","name":"vault","nameLocation":"424:5:84","nodeType":"VariableDeclaration","scope":21157,"src":"417:12:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":21146,"nodeType":"UserDefinedTypeName","pathNode":{"id":21145,"name":"IVault","nameLocations":["417:6:84"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"417:6:84"},"referencedDeclaration":2545,"src":"417:6:84","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":21149,"mutability":"mutable","name":"initialOwner","nameLocation":"439:12:84","nodeType":"VariableDeclaration","scope":21157,"src":"431:20:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21148,"name":"address","nodeType":"ElementaryTypeName","src":"431:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"416:36:84"},"returnParameters":{"id":21155,"nodeType":"ParameterList","parameters":[],"src":"491:0:84"},"scope":21201,"src":"405:150:84","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[892],"body":{"id":21175,"nodeType":"Block","src":"925:74:84","statements":[{"expression":{"arguments":[{"id":21171,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21160,"src":"968:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21172,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21162,"src":"974:17:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":21168,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"935:5:84","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":21170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"941:26:84","memberName":"setStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2661,"src":"935:32:84","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":21173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"935:57:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21174,"nodeType":"ExpressionStatement","src":"935:57:84"}]},"documentation":{"id":21158,"nodeType":"StructuredDocumentation","src":"773:34:84","text":"@inheritdoc IPoolSwapFeeHelper"},"functionSelector":"d15126ba","id":21176,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":21165,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21160,"src":"919:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21166,"kind":"modifierInvocation","modifierName":{"id":21164,"name":"withValidPoolForSender","nameLocations":["896:22:84"],"nodeType":"IdentifierPath","referencedDeclaration":20392,"src":"896:22:84"},"nodeType":"ModifierInvocation","src":"896:28:84"}],"name":"setStaticSwapFeePercentage","nameLocation":"821:26:84","nodeType":"FunctionDefinition","parameters":{"id":21163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21160,"mutability":"mutable","name":"pool","nameLocation":"856:4:84","nodeType":"VariableDeclaration","scope":21176,"src":"848:12:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21159,"name":"address","nodeType":"ElementaryTypeName","src":"848:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21162,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"870:17:84","nodeType":"VariableDeclaration","scope":21176,"src":"862:25:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21161,"name":"uint256","nodeType":"ElementaryTypeName","src":"862:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"847:41:84"},"returnParameters":{"id":21167,"nodeType":"ParameterList","parameters":[],"src":"925:0:84"},"scope":21201,"src":"812:187:84","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[21034],"body":{"id":21199,"nodeType":"Block","src":"1348:187:84","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":21192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":21185,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21179,"src":"1437:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":21183,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"1411:5:84","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":21184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1417:19:84","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":3776,"src":"1411:25:84","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$4111_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":21186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1411:31:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4111_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":21187,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1443:14:84","memberName":"swapFeeManager","nodeType":"MemberAccess","referencedDeclaration":4108,"src":"1411:46:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":21190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1469:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":21189,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1461:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21188,"name":"address","nodeType":"ElementaryTypeName","src":"1461:7:84","typeDescriptions":{}}},"id":21191,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1461:10:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1411:60:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21198,"nodeType":"IfStatement","src":"1407:122:84","trueBody":{"id":21197,"nodeType":"Block","src":"1473:56:84","statements":[{"errorCall":{"arguments":[{"id":21194,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21179,"src":"1513:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21193,"name":"PoolHasSwapManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":884,"src":"1494:18:84","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":21195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1494:24:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":21196,"nodeType":"RevertStatement","src":"1487:31:84"}]}}]},"documentation":{"id":21177,"nodeType":"StructuredDocumentation","src":"1251:32:84","text":"@inheritdoc PoolHelperCommon"},"id":21200,"implemented":true,"kind":"function","modifiers":[],"name":"_validatePool","nameLocation":"1297:13:84","nodeType":"FunctionDefinition","overrides":{"id":21181,"nodeType":"OverrideSpecifier","overrides":[],"src":"1339:8:84"},"parameters":{"id":21180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21179,"mutability":"mutable","name":"pool","nameLocation":"1319:4:84","nodeType":"VariableDeclaration","scope":21200,"src":"1311:12:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21178,"name":"address","nodeType":"ElementaryTypeName","src":"1311:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1310:14:84"},"returnParameters":{"id":21182,"nodeType":"ParameterList","parameters":[],"src":"1348:0:84"},"scope":21201,"src":"1288:247:84","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":21202,"src":"332:1205:84","usedErrors":[5,711,718,723,726,731,734,739,884,2857,9352,9357,20215],"usedEvents":[674,681,688,695,704,9363,9501]}],"src":"46:1492:84"},"id":84},"contracts/PriceImpactHelper.sol":{"ast":{"absolutePath":"contracts/PriceImpactHelper.sol","exportedSymbols":{"CallAndRevert":[18633],"FixedPoint":[5298],"IERC20":[10576],"IRouter":[2302],"IRouterQueries":[2507],"IVault":[2545],"PriceImpactHelper":[21889],"SafeCast":[16092]},"id":21890,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":21203,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:85"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":21205,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21890,"sourceUnit":10577,"src":"72:72:85","symbolAliases":[{"foreign":{"id":21204,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":21207,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21890,"sourceUnit":16093,"src":"145:75:85","symbolAliases":[{"foreign":{"id":21206,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"154:8:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":21209,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21890,"sourceUnit":2546,"src":"222:81:85","symbolAliases":[{"foreign":{"id":21208,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"231:6:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","id":21211,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21890,"sourceUnit":2303,"src":"304:83:85","symbolAliases":[{"foreign":{"id":21210,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2302,"src":"313:7:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol","id":21213,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21890,"sourceUnit":2508,"src":"388:97:85","symbolAliases":[{"foreign":{"id":21212,"name":"IRouterQueries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2507,"src":"397:14:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":21215,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21890,"sourceUnit":5299,"src":"487:92:85","symbolAliases":[{"foreign":{"id":21214,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5298,"src":"496:10:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/CallAndRevert.sol","file":"./CallAndRevert.sol","id":21217,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21890,"sourceUnit":18634,"src":"581:52:85","symbolAliases":[{"foreign":{"id":21216,"name":"CallAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18633,"src":"590:13:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":21218,"name":"CallAndRevert","nameLocations":["665:13:85"],"nodeType":"IdentifierPath","referencedDeclaration":18633,"src":"665:13:85"},"id":21219,"nodeType":"InheritanceSpecifier","src":"665:13:85"}],"canonicalName":"PriceImpactHelper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":21889,"linearizedBaseContracts":[21889,18633],"name":"PriceImpactHelper","nameLocation":"644:17:85","nodeType":"ContractDefinition","nodes":[{"global":false,"id":21222,"libraryName":{"id":21220,"name":"FixedPoint","nameLocations":["691:10:85"],"nodeType":"IdentifierPath","referencedDeclaration":5298,"src":"691:10:85"},"nodeType":"UsingForDirective","src":"685:29:85","typeName":{"id":21221,"name":"uint256","nodeType":"ElementaryTypeName","src":"706:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":21224,"libraryName":{"id":21223,"name":"SafeCast","nameLocations":["725:8:85"],"nodeType":"IdentifierPath","referencedDeclaration":16092,"src":"725:8:85"},"nodeType":"UsingForDirective","src":"719:21:85"},{"constant":false,"id":21227,"mutability":"immutable","name":"_vault","nameLocation":"772:6:85","nodeType":"VariableDeclaration","scope":21889,"src":"746:32:85","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":21226,"nodeType":"UserDefinedTypeName","pathNode":{"id":21225,"name":"IVault","nameLocations":["746:6:85"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"746:6:85"},"referencedDeclaration":2545,"src":"746:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":21230,"mutability":"immutable","name":"_router","nameLocation":"811:7:85","nodeType":"VariableDeclaration","scope":21889,"src":"784:34:85","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"},"typeName":{"id":21229,"nodeType":"UserDefinedTypeName","pathNode":{"id":21228,"name":"IRouter","nameLocations":["784:7:85"],"nodeType":"IdentifierPath","referencedDeclaration":2302,"src":"784:7:85"},"referencedDeclaration":2302,"src":"784:7:85","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}},"visibility":"internal"},{"body":{"id":21247,"nodeType":"Block","src":"867:57:85","statements":[{"expression":{"id":21241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21239,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21227,"src":"877:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21240,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21233,"src":"886:5:85","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"src":"877:14:85","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":21242,"nodeType":"ExpressionStatement","src":"877:14:85"},{"expression":{"id":21245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21243,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21230,"src":"901:7:85","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21244,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21236,"src":"911:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}},"src":"901:16:85","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}},"id":21246,"nodeType":"ExpressionStatement","src":"901:16:85"}]},"id":21248,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":21237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21233,"mutability":"mutable","name":"vault","nameLocation":"844:5:85","nodeType":"VariableDeclaration","scope":21248,"src":"837:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":21232,"nodeType":"UserDefinedTypeName","pathNode":{"id":21231,"name":"IVault","nameLocations":["837:6:85"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"837:6:85"},"referencedDeclaration":2545,"src":"837:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":21236,"mutability":"mutable","name":"router","nameLocation":"859:6:85","nodeType":"VariableDeclaration","scope":21248,"src":"851:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"},"typeName":{"id":21235,"nodeType":"UserDefinedTypeName","pathNode":{"id":21234,"name":"IRouter","nameLocations":["851:7:85"],"nodeType":"IdentifierPath","referencedDeclaration":2302,"src":"851:7:85"},"referencedDeclaration":2302,"src":"851:7:85","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}},"visibility":"internal"}],"src":"836:30:85"},"returnParameters":{"id":21238,"nodeType":"ParameterList","parameters":[],"src":"867:0:85"},"scope":21889,"src":"825:99:85","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":21384,"nodeType":"Block","src":"1330:1364:85","statements":[{"assignments":[21261],"declarations":[{"constant":false,"id":21261,"mutability":"mutable","name":"bptAmountOut","nameLocation":"1348:12:85","nodeType":"VariableDeclaration","scope":21384,"src":"1340:20:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21260,"name":"uint256","nodeType":"ElementaryTypeName","src":"1340:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21267,"initialValue":{"arguments":[{"id":21263,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21250,"src":"1392:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21264,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21253,"src":"1398:14:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":21265,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21255,"src":"1414:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21262,"name":"_queryAddLiquidityUnbalanced","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21421,"src":"1363:28:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256[] memory,address) returns (uint256)"}},"id":21266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1363:58:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1340:81:85"},{"assignments":[21272],"declarations":[{"constant":false,"id":21272,"mutability":"mutable","name":"proportionalAmountsOut","nameLocation":"1448:22:85","nodeType":"VariableDeclaration","scope":21384,"src":"1431:39:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21270,"name":"uint256","nodeType":"ElementaryTypeName","src":"1431:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21271,"nodeType":"ArrayTypeName","src":"1431:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":21278,"initialValue":{"arguments":[{"id":21274,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21250,"src":"1507:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21275,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21261,"src":"1513:12:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21276,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21255,"src":"1527:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21273,"name":"_queryRemoveLiquidityProportional","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21458,"src":"1473:33:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address,uint256,address) returns (uint256[] memory)"}},"id":21277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1473:61:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1431:103:85"},{"assignments":[21283],"declarations":[{"constant":false,"id":21283,"mutability":"mutable","name":"deltas","nameLocation":"1633:6:85","nodeType":"VariableDeclaration","scope":21384,"src":"1617:22:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21281,"name":"int256","nodeType":"ElementaryTypeName","src":"1617:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21282,"nodeType":"ArrayTypeName","src":"1617:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"id":21290,"initialValue":{"arguments":[{"expression":{"id":21287,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21253,"src":"1655:14:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1670:6:85","memberName":"length","nodeType":"MemberAccess","src":"1655:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21286,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1642:12:85","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_int256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (int256[] memory)"},"typeName":{"baseType":{"id":21284,"name":"int256","nodeType":"ElementaryTypeName","src":"1646:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21285,"nodeType":"ArrayTypeName","src":"1646:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}}},"id":21289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1642:35:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1617:60:85"},{"body":{"id":21318,"nodeType":"Block","src":"1739:104:85","statements":[{"expression":{"id":21316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21302,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21283,"src":"1753:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21304,"indexExpression":{"id":21303,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21292,"src":"1760:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1753:9:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":21305,"name":"proportionalAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21272,"src":"1765:22:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21307,"indexExpression":{"id":21306,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21292,"src":"1788:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1765:25:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1791:8:85","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":16081,"src":"1765:34:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":21309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1765:36:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":21310,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21253,"src":"1804:14:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21312,"indexExpression":{"id":21311,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21292,"src":"1819:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1804:17:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1822:8:85","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":16081,"src":"1804:26:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":21314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1804:28:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1765:67:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1753:79:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21317,"nodeType":"ExpressionStatement","src":"1753:79:85"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21295,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21292,"src":"1707:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":21296,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21253,"src":"1711:14:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1726:6:85","memberName":"length","nodeType":"MemberAccess","src":"1711:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1707:25:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21319,"initializationExpression":{"assignments":[21292],"declarations":[{"constant":false,"id":21292,"mutability":"mutable","name":"i","nameLocation":"1700:1:85","nodeType":"VariableDeclaration","scope":21319,"src":"1692:9:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21291,"name":"uint256","nodeType":"ElementaryTypeName","src":"1692:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21294,"initialValue":{"hexValue":"30","id":21293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1704:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1692:13:85"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1734:3:85","subExpression":{"id":21299,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21292,"src":"1734:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21301,"nodeType":"ExpressionStatement","src":"1734:3:85"},"nodeType":"ForStatement","src":"1687:156:85"},{"assignments":[21324],"declarations":[{"constant":false,"id":21324,"mutability":"mutable","name":"deltaBPTs","nameLocation":"1976:9:85","nodeType":"VariableDeclaration","scope":21384,"src":"1960:25:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21322,"name":"int256","nodeType":"ElementaryTypeName","src":"1960:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21323,"nodeType":"ArrayTypeName","src":"1960:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"id":21331,"initialValue":{"arguments":[{"expression":{"id":21328,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21253,"src":"2001:14:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2016:6:85","memberName":"length","nodeType":"MemberAccess","src":"2001:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21327,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1988:12:85","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_int256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (int256[] memory)"},"typeName":{"baseType":{"id":21325,"name":"int256","nodeType":"ElementaryTypeName","src":"1992:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21326,"nodeType":"ArrayTypeName","src":"1992:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}}},"id":21330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1988:35:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1960:63:85"},{"body":{"id":21354,"nodeType":"Block","src":"2085:107:85","statements":[{"expression":{"id":21352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21343,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21324,"src":"2099:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21345,"indexExpression":{"id":21344,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21333,"src":"2109:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2099:12:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":21347,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21250,"src":"2157:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21348,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21333,"src":"2163:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21349,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21283,"src":"2166:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":21350,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21255,"src":"2174:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21346,"name":"_queryAddLiquidityUnbalancedForTokenDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21618,"src":"2114:42:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_int256_$","typeString":"function (address,uint256,int256[] memory,address) returns (int256)"}},"id":21351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2114:67:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"2099:82:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21353,"nodeType":"ExpressionStatement","src":"2099:82:85"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21336,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21333,"src":"2053:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":21337,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21253,"src":"2057:14:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2072:6:85","memberName":"length","nodeType":"MemberAccess","src":"2057:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2053:25:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21355,"initializationExpression":{"assignments":[21333],"declarations":[{"constant":false,"id":21333,"mutability":"mutable","name":"i","nameLocation":"2046:1:85","nodeType":"VariableDeclaration","scope":21355,"src":"2038:9:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21332,"name":"uint256","nodeType":"ElementaryTypeName","src":"2038:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21335,"initialValue":{"hexValue":"30","id":21334,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2050:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2038:13:85"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2080:3:85","subExpression":{"id":21340,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21333,"src":"2080:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21342,"nodeType":"ExpressionStatement","src":"2080:3:85"},"nodeType":"ForStatement","src":"2033:159:85"},{"assignments":[21357],"declarations":[{"constant":false,"id":21357,"mutability":"mutable","name":"remainingDeltaIndex","nameLocation":"2290:19:85","nodeType":"VariableDeclaration","scope":21384,"src":"2282:27:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21356,"name":"uint256","nodeType":"ElementaryTypeName","src":"2282:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21364,"initialValue":{"arguments":[{"id":21359,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21250,"src":"2327:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21360,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21283,"src":"2333:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":21361,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21324,"src":"2341:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":21362,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21255,"src":"2352:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21358,"name":"_zeroOutDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21782,"src":"2312:14:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_int256_$dyn_memory_ptr_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$","typeString":"function (address,int256[] memory,int256[] memory,address) returns (uint256)"}},"id":21363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2312:47:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2282:77:85"},{"assignments":[21366],"declarations":[{"constant":false,"id":21366,"mutability":"mutable","name":"delta","nameLocation":"2566:5:85","nodeType":"VariableDeclaration","scope":21384,"src":"2558:13:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21365,"name":"uint256","nodeType":"ElementaryTypeName","src":"2558:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21374,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"id":21370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"2575:28:85","subExpression":{"baseExpression":{"id":21367,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21283,"src":"2576:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21369,"indexExpression":{"id":21368,"name":"remainingDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21357,"src":"2583:19:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2576:27:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":21371,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2574:30:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2605:9:85","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":15245,"src":"2574:40:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":21373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2574:42:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2558:58:85"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"id":21377,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21253,"src":"2647:14:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21379,"indexExpression":{"id":21378,"name":"remainingDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21357,"src":"2662:19:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2647:35:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":21375,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21366,"src":"2633:5:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2639:7:85","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":5080,"src":"2633:13:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":21380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2633:50:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":21381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2686:1:85","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2633:54:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21259,"id":21383,"nodeType":"Return","src":"2626:61:85"}]},"functionSelector":"48406a54","id":21385,"implemented":true,"kind":"function","modifiers":[],"name":"calculateAddLiquidityUnbalancedPriceImpact","nameLocation":"1155:42:85","nodeType":"FunctionDefinition","parameters":{"id":21256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21250,"mutability":"mutable","name":"pool","nameLocation":"1215:4:85","nodeType":"VariableDeclaration","scope":21385,"src":"1207:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21249,"name":"address","nodeType":"ElementaryTypeName","src":"1207:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21253,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"1246:14:85","nodeType":"VariableDeclaration","scope":21385,"src":"1229:31:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21251,"name":"uint256","nodeType":"ElementaryTypeName","src":"1229:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21252,"nodeType":"ArrayTypeName","src":"1229:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":21255,"mutability":"mutable","name":"sender","nameLocation":"1278:6:85","nodeType":"VariableDeclaration","scope":21385,"src":"1270:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21254,"name":"address","nodeType":"ElementaryTypeName","src":"1270:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1197:93:85"},"returnParameters":{"id":21259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21258,"mutability":"mutable","name":"priceImpact","nameLocation":"1317:11:85","nodeType":"VariableDeclaration","scope":21385,"src":"1309:19:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21257,"name":"uint256","nodeType":"ElementaryTypeName","src":"1309:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1308:21:85"},"scope":21889,"src":"1146:1548:85","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":21420,"nodeType":"Block","src":"3076:448:85","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":21402,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21230,"src":"3177:7:85","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}],"id":21401,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3169:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21400,"name":"address","nodeType":"ElementaryTypeName","src":"3169:7:85","typeDescriptions":{}}},"id":21403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3169:16:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":21406,"name":"IRouterQueries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2507,"src":"3255:14:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouterQueries_$2507_$","typeString":"type(contract IRouterQueries)"}},"id":21407,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3270:27:85","memberName":"queryAddLiquidityUnbalanced","nodeType":"MemberAccess","referencedDeclaration":2345,"src":"3255:42:85","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function IRouterQueries.queryAddLiquidityUnbalanced(address,uint256[] memory,address,bytes memory) returns (uint256)"}},"id":21408,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3298:8:85","memberName":"selector","nodeType":"MemberAccess","src":"3255:51:85","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":21409,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21387,"src":"3332:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21410,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21390,"src":"3362:14:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":21411,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21392,"src":"3402:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":21412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3434:2:85","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":21404,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3207:3:85","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21405,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3211:18:85","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"3207:22:85","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":21413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3207:251:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":21399,"name":"_callAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18572,"src":"3133:14:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":21414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3133:343:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":21416,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3495:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":21415,"name":"uint256","nodeType":"ElementaryTypeName","src":"3495:7:85","typeDescriptions":{}}}],"id":21417,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3494:9:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":21397,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3105:3:85","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21398,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3109:6:85","memberName":"decode","nodeType":"MemberAccess","src":"3105:10:85","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":21418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3105:412:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21396,"id":21419,"nodeType":"Return","src":"3086:431:85"}]},"id":21421,"implemented":true,"kind":"function","modifiers":[],"name":"_queryAddLiquidityUnbalanced","nameLocation":"2927:28:85","nodeType":"FunctionDefinition","parameters":{"id":21393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21387,"mutability":"mutable","name":"pool","nameLocation":"2973:4:85","nodeType":"VariableDeclaration","scope":21421,"src":"2965:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21386,"name":"address","nodeType":"ElementaryTypeName","src":"2965:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21390,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"3004:14:85","nodeType":"VariableDeclaration","scope":21421,"src":"2987:31:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21388,"name":"uint256","nodeType":"ElementaryTypeName","src":"2987:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21389,"nodeType":"ArrayTypeName","src":"2987:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":21392,"mutability":"mutable","name":"sender","nameLocation":"3036:6:85","nodeType":"VariableDeclaration","scope":21421,"src":"3028:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21391,"name":"address","nodeType":"ElementaryTypeName","src":"3028:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2955:93:85"},"returnParameters":{"id":21396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21395,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21421,"src":"3067:7:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21394,"name":"uint256","nodeType":"ElementaryTypeName","src":"3067:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3066:9:85"},"scope":21889,"src":"2918:606:85","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21457,"nodeType":"Block","src":"3691:453:85","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":21438,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21230,"src":"3792:7:85","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}],"id":21437,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3784:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21436,"name":"address","nodeType":"ElementaryTypeName","src":"3784:7:85","typeDescriptions":{}}},"id":21439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3784:16:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":21442,"name":"IRouterQueries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2507,"src":"3870:14:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouterQueries_$2507_$","typeString":"type(contract IRouterQueries)"}},"id":21443,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3885:32:85","memberName":"queryRemoveLiquidityProportional","nodeType":"MemberAccess","referencedDeclaration":2399,"src":"3870:47:85","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function IRouterQueries.queryRemoveLiquidityProportional(address,uint256,address,bytes memory) returns (uint256[] memory)"}},"id":21444,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3918:8:85","memberName":"selector","nodeType":"MemberAccess","src":"3870:56:85","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":21445,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21423,"src":"3952:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21446,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21425,"src":"3982:12:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21447,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21427,"src":"4020:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":21448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4052:2:85","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":21440,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3822:3:85","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21441,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3826:18:85","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"3822:22:85","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":21449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3822:254:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":21435,"name":"_callAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18572,"src":"3748:14:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":21450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3748:346:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":21452,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4113:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":21451,"name":"uint256","nodeType":"ElementaryTypeName","src":"4113:7:85","typeDescriptions":{}}},"id":21453,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"4113:9:85","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}}],"id":21454,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4112:11:85","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}],"expression":{"id":21433,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3720:3:85","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21434,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3724:6:85","memberName":"decode","nodeType":"MemberAccess","src":"3720:10:85","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":21455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3720:417:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":21432,"id":21456,"nodeType":"Return","src":"3701:436:85"}]},"id":21458,"implemented":true,"kind":"function","modifiers":[],"name":"_queryRemoveLiquidityProportional","nameLocation":"3539:33:85","nodeType":"FunctionDefinition","parameters":{"id":21428,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21423,"mutability":"mutable","name":"pool","nameLocation":"3590:4:85","nodeType":"VariableDeclaration","scope":21458,"src":"3582:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21422,"name":"address","nodeType":"ElementaryTypeName","src":"3582:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21425,"mutability":"mutable","name":"bptAmountOut","nameLocation":"3612:12:85","nodeType":"VariableDeclaration","scope":21458,"src":"3604:20:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21424,"name":"uint256","nodeType":"ElementaryTypeName","src":"3604:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21427,"mutability":"mutable","name":"sender","nameLocation":"3642:6:85","nodeType":"VariableDeclaration","scope":21458,"src":"3634:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21426,"name":"address","nodeType":"ElementaryTypeName","src":"3634:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3572:82:85"},"returnParameters":{"id":21432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21431,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21458,"src":"3673:16:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21429,"name":"uint256","nodeType":"ElementaryTypeName","src":"3673:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21430,"nodeType":"ArrayTypeName","src":"3673:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3672:18:85"},"scope":21889,"src":"3530:614:85","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21500,"nodeType":"Block","src":"4342:509:85","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":21480,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21230,"src":"4443:7:85","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}],"id":21479,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4435:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21478,"name":"address","nodeType":"ElementaryTypeName","src":"4435:7:85","typeDescriptions":{}}},"id":21481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4435:16:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":21484,"name":"IRouterQueries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2507,"src":"4521:14:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouterQueries_$2507_$","typeString":"type(contract IRouterQueries)"}},"id":21485,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4536:27:85","memberName":"querySwapSingleTokenExactIn","nodeType":"MemberAccess","referencedDeclaration":2486,"src":"4521:42:85","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$_t_bytes_calldata_ptr_$returns$_t_uint256_$","typeString":"function IRouterQueries.querySwapSingleTokenExactIn(address,contract IERC20,contract IERC20,uint256,address,bytes calldata) returns (uint256)"}},"id":21486,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4564:8:85","memberName":"selector","nodeType":"MemberAccess","src":"4521:51:85","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":21487,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21460,"src":"4598:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21488,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21463,"src":"4628:7:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":21489,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21466,"src":"4661:8:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":21490,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21468,"src":"4695:8:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21491,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21470,"src":"4729:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":21492,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4761:2:85","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":21482,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4473:3:85","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21483,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4477:18:85","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"4473:22:85","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":21493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4473:312:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":21477,"name":"_callAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18572,"src":"4399:14:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":21494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4399:404:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":21496,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4822:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":21495,"name":"uint256","nodeType":"ElementaryTypeName","src":"4822:7:85","typeDescriptions":{}}}],"id":21497,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4821:9:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":21475,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4371:3:85","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21476,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4375:6:85","memberName":"decode","nodeType":"MemberAccess","src":"4371:10:85","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":21498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4371:473:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21474,"id":21499,"nodeType":"Return","src":"4352:492:85"}]},"id":21501,"implemented":true,"kind":"function","modifiers":[],"name":"_querySwapSingleTokenExactIn","nameLocation":"4159:28:85","nodeType":"FunctionDefinition","parameters":{"id":21471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21460,"mutability":"mutable","name":"pool","nameLocation":"4205:4:85","nodeType":"VariableDeclaration","scope":21501,"src":"4197:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21459,"name":"address","nodeType":"ElementaryTypeName","src":"4197:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21463,"mutability":"mutable","name":"tokenIn","nameLocation":"4226:7:85","nodeType":"VariableDeclaration","scope":21501,"src":"4219:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":21462,"nodeType":"UserDefinedTypeName","pathNode":{"id":21461,"name":"IERC20","nameLocations":["4219:6:85"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4219:6:85"},"referencedDeclaration":10576,"src":"4219:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":21466,"mutability":"mutable","name":"tokenOut","nameLocation":"4250:8:85","nodeType":"VariableDeclaration","scope":21501,"src":"4243:15:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":21465,"nodeType":"UserDefinedTypeName","pathNode":{"id":21464,"name":"IERC20","nameLocations":["4243:6:85"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4243:6:85"},"referencedDeclaration":10576,"src":"4243:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":21468,"mutability":"mutable","name":"amountIn","nameLocation":"4276:8:85","nodeType":"VariableDeclaration","scope":21501,"src":"4268:16:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21467,"name":"uint256","nodeType":"ElementaryTypeName","src":"4268:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21470,"mutability":"mutable","name":"sender","nameLocation":"4302:6:85","nodeType":"VariableDeclaration","scope":21501,"src":"4294:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21469,"name":"address","nodeType":"ElementaryTypeName","src":"4294:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4187:127:85"},"returnParameters":{"id":21474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21473,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21501,"src":"4333:7:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21472,"name":"uint256","nodeType":"ElementaryTypeName","src":"4333:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4332:9:85"},"scope":21889,"src":"4150:701:85","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21543,"nodeType":"Block","src":"5051:511:85","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":21523,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21230,"src":"5152:7:85","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}],"id":21522,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5144:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21521,"name":"address","nodeType":"ElementaryTypeName","src":"5144:7:85","typeDescriptions":{}}},"id":21524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5144:16:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":21527,"name":"IRouterQueries","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2507,"src":"5230:14:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouterQueries_$2507_$","typeString":"type(contract IRouterQueries)"}},"id":21528,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5245:28:85","memberName":"querySwapSingleTokenExactOut","nodeType":"MemberAccess","referencedDeclaration":2506,"src":"5230:43:85","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$_t_bytes_calldata_ptr_$returns$_t_uint256_$","typeString":"function IRouterQueries.querySwapSingleTokenExactOut(address,contract IERC20,contract IERC20,uint256,address,bytes calldata) returns (uint256)"}},"id":21529,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5274:8:85","memberName":"selector","nodeType":"MemberAccess","src":"5230:52:85","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":21530,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21503,"src":"5308:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21531,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21506,"src":"5338:7:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":21532,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21509,"src":"5371:8:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":21533,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21511,"src":"5405:9:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21534,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21513,"src":"5440:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":21535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5472:2:85","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":21525,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5182:3:85","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21526,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5186:18:85","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"5182:22:85","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":21536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5182:314:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":21520,"name":"_callAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18572,"src":"5108:14:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":21537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5108:406:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":21539,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5533:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":21538,"name":"uint256","nodeType":"ElementaryTypeName","src":"5533:7:85","typeDescriptions":{}}}],"id":21540,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5532:9:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":21518,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5080:3:85","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21519,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5084:6:85","memberName":"decode","nodeType":"MemberAccess","src":"5080:10:85","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":21541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5080:475:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21517,"id":21542,"nodeType":"Return","src":"5061:494:85"}]},"id":21544,"implemented":true,"kind":"function","modifiers":[],"name":"_querySwapSingleTokenExactOut","nameLocation":"4866:29:85","nodeType":"FunctionDefinition","parameters":{"id":21514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21503,"mutability":"mutable","name":"pool","nameLocation":"4913:4:85","nodeType":"VariableDeclaration","scope":21544,"src":"4905:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21502,"name":"address","nodeType":"ElementaryTypeName","src":"4905:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21506,"mutability":"mutable","name":"tokenIn","nameLocation":"4934:7:85","nodeType":"VariableDeclaration","scope":21544,"src":"4927:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":21505,"nodeType":"UserDefinedTypeName","pathNode":{"id":21504,"name":"IERC20","nameLocations":["4927:6:85"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4927:6:85"},"referencedDeclaration":10576,"src":"4927:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":21509,"mutability":"mutable","name":"tokenOut","nameLocation":"4958:8:85","nodeType":"VariableDeclaration","scope":21544,"src":"4951:15:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":21508,"nodeType":"UserDefinedTypeName","pathNode":{"id":21507,"name":"IERC20","nameLocations":["4951:6:85"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4951:6:85"},"referencedDeclaration":10576,"src":"4951:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":21511,"mutability":"mutable","name":"amountOut","nameLocation":"4984:9:85","nodeType":"VariableDeclaration","scope":21544,"src":"4976:17:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21510,"name":"uint256","nodeType":"ElementaryTypeName","src":"4976:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21513,"mutability":"mutable","name":"sender","nameLocation":"5011:6:85","nodeType":"VariableDeclaration","scope":21544,"src":"5003:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21512,"name":"address","nodeType":"ElementaryTypeName","src":"5003:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4895:128:85"},"returnParameters":{"id":21517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21516,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21544,"src":"5042:7:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21515,"name":"uint256","nodeType":"ElementaryTypeName","src":"5042:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5041:9:85"},"scope":21889,"src":"4857:705:85","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21617,"nodeType":"Block","src":"5973:412:85","statements":[{"assignments":[21562],"declarations":[{"constant":false,"id":21562,"mutability":"mutable","name":"zerosWithSingleDelta","nameLocation":"6000:20:85","nodeType":"VariableDeclaration","scope":21617,"src":"5983:37:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21560,"name":"uint256","nodeType":"ElementaryTypeName","src":"5983:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21561,"nodeType":"ArrayTypeName","src":"5983:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":21569,"initialValue":{"arguments":[{"expression":{"id":21566,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21551,"src":"6037:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6044:6:85","memberName":"length","nodeType":"MemberAccess","src":"6037:13:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"6023:13:85","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":21563,"name":"uint256","nodeType":"ElementaryTypeName","src":"6027:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21564,"nodeType":"ArrayTypeName","src":"6027:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":21568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6023:28:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"5983:68:85"},{"assignments":[21571],"declarations":[{"constant":false,"id":21571,"mutability":"mutable","name":"delta","nameLocation":"6068:5:85","nodeType":"VariableDeclaration","scope":21617,"src":"6061:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":21570,"name":"int256","nodeType":"ElementaryTypeName","src":"6061:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":21575,"initialValue":{"baseExpression":{"id":21572,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21551,"src":"6076:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21574,"indexExpression":{"id":21573,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21548,"src":"6083:10:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6076:18:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"6061:33:85"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21576,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21571,"src":"6109:5:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":21577,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6118:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6109:10:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21582,"nodeType":"IfStatement","src":"6105:49:85","trueBody":{"id":21581,"nodeType":"Block","src":"6121:33:85","statements":[{"expression":{"hexValue":"30","id":21579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6142:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":21557,"id":21580,"nodeType":"Return","src":"6135:8:85"}]}},{"expression":{"id":21596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21583,"name":"zerosWithSingleDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21562,"src":"6164:20:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21585,"indexExpression":{"id":21584,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21548,"src":"6185:10:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6164:32:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21588,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21571,"src":"6207:5:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":21589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6215:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6207:9:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":21593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"6227:6:85","subExpression":{"id":21592,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21571,"src":"6228:5:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6207:26:85","trueExpression":{"id":21591,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21571,"src":"6219:5:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":21587,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6199:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":21586,"name":"uint256","nodeType":"ElementaryTypeName","src":"6199:7:85","typeDescriptions":{}}},"id":21595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6199:35:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6164:70:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21597,"nodeType":"ExpressionStatement","src":"6164:70:85"},{"assignments":[21599],"declarations":[{"constant":false,"id":21599,"mutability":"mutable","name":"result","nameLocation":"6251:6:85","nodeType":"VariableDeclaration","scope":21617,"src":"6244:13:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":21598,"name":"int256","nodeType":"ElementaryTypeName","src":"6244:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":21608,"initialValue":{"arguments":[{"arguments":[{"id":21603,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21546,"src":"6296:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21604,"name":"zerosWithSingleDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21562,"src":"6302:20:85","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":21605,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21553,"src":"6324:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21602,"name":"_queryAddLiquidityUnbalanced","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21421,"src":"6267:28:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256[] memory,address) returns (uint256)"}},"id":21606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6267:64:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21601,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6260:6:85","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":21600,"name":"int256","nodeType":"ElementaryTypeName","src":"6260:6:85","typeDescriptions":{}}},"id":21607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6260:72:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"6244:88:85"},{"expression":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21609,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21571,"src":"6350:5:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":21610,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6358:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6350:9:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":21614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"6371:7:85","subExpression":{"id":21613,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21599,"src":"6372:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6350:28:85","trueExpression":{"id":21612,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21599,"src":"6362:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":21557,"id":21616,"nodeType":"Return","src":"6343:35:85"}]},"id":21618,"implemented":true,"kind":"function","modifiers":[],"name":"_queryAddLiquidityUnbalancedForTokenDeltas","nameLocation":"5792:42:85","nodeType":"FunctionDefinition","parameters":{"id":21554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21546,"mutability":"mutable","name":"pool","nameLocation":"5852:4:85","nodeType":"VariableDeclaration","scope":21618,"src":"5844:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21545,"name":"address","nodeType":"ElementaryTypeName","src":"5844:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21548,"mutability":"mutable","name":"tokenIndex","nameLocation":"5874:10:85","nodeType":"VariableDeclaration","scope":21618,"src":"5866:18:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21547,"name":"uint256","nodeType":"ElementaryTypeName","src":"5866:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21551,"mutability":"mutable","name":"deltas","nameLocation":"5910:6:85","nodeType":"VariableDeclaration","scope":21618,"src":"5894:22:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21549,"name":"int256","nodeType":"ElementaryTypeName","src":"5894:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21550,"nodeType":"ArrayTypeName","src":"5894:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":21553,"mutability":"mutable","name":"sender","nameLocation":"5934:6:85","nodeType":"VariableDeclaration","scope":21618,"src":"5926:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21552,"name":"address","nodeType":"ElementaryTypeName","src":"5926:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5834:112:85"},"returnParameters":{"id":21557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21556,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21618,"src":"5965:6:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":21555,"name":"int256","nodeType":"ElementaryTypeName","src":"5965:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"5964:8:85"},"scope":21889,"src":"5783:602:85","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21781,"nodeType":"Block","src":"6561:1945:85","statements":[{"assignments":[21634],"declarations":[{"constant":false,"id":21634,"mutability":"mutable","name":"maxNegativeDeltaIndex","nameLocation":"6650:21:85","nodeType":"VariableDeclaration","scope":21781,"src":"6642:29:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21633,"name":"uint256","nodeType":"ElementaryTypeName","src":"6642:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21636,"initialValue":{"hexValue":"30","id":21635,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6674:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6642:33:85"},{"assignments":[21641],"declarations":[{"constant":false,"id":21641,"mutability":"mutable","name":"poolTokens","nameLocation":"6701:10:85","nodeType":"VariableDeclaration","scope":21781,"src":"6685:26:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":21639,"nodeType":"UserDefinedTypeName","pathNode":{"id":21638,"name":"IERC20","nameLocations":["6685:6:85"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6685:6:85"},"referencedDeclaration":10576,"src":"6685:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":21640,"nodeType":"ArrayTypeName","src":"6685:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":21646,"initialValue":{"arguments":[{"id":21644,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21620,"src":"6735:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":21642,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21227,"src":"6714:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":21643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6721:13:85","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":3579,"src":"6714:20:85","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":21645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6714:26:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"6685:55:85"},{"body":{"id":21777,"nodeType":"Block","src":"6799:1662:85","statements":[{"assignments":[21661],"declarations":[{"constant":false,"id":21661,"mutability":"mutable","name":"minPositiveDeltaIndex","nameLocation":"6888:21:85","nodeType":"VariableDeclaration","scope":21777,"src":"6880:29:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21660,"name":"uint256","nodeType":"ElementaryTypeName","src":"6880:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21665,"initialValue":{"arguments":[{"id":21663,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21626,"src":"6930:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}],"id":21662,"name":"_minPositiveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21835,"src":"6912:17:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (int256[] memory) pure returns (uint256)"}},"id":21664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6912:28:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6880:60:85"},{"expression":{"id":21670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21666,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21634,"src":"6954:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":21668,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21626,"src":"6996:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}],"id":21667,"name":"_maxNegativeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21888,"src":"6978:17:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (int256[] memory) pure returns (uint256)"}},"id":21669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6978:28:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6954:52:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21671,"nodeType":"ExpressionStatement","src":"6954:52:85"},{"assignments":[21673],"declarations":[{"constant":false,"id":21673,"mutability":"mutable","name":"givenTokenIndex","nameLocation":"7029:15:85","nodeType":"VariableDeclaration","scope":21777,"src":"7021:23:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21672,"name":"uint256","nodeType":"ElementaryTypeName","src":"7021:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21674,"nodeType":"VariableDeclarationStatement","src":"7021:23:85"},{"assignments":[21676],"declarations":[{"constant":false,"id":21676,"mutability":"mutable","name":"resultTokenIndex","nameLocation":"7066:16:85","nodeType":"VariableDeclaration","scope":21777,"src":"7058:24:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21675,"name":"uint256","nodeType":"ElementaryTypeName","src":"7058:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21677,"nodeType":"VariableDeclarationStatement","src":"7058:24:85"},{"assignments":[21679],"declarations":[{"constant":false,"id":21679,"mutability":"mutable","name":"resultAmount","nameLocation":"7104:12:85","nodeType":"VariableDeclaration","scope":21777,"src":"7096:20:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21678,"name":"uint256","nodeType":"ElementaryTypeName","src":"7096:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21680,"nodeType":"VariableDeclarationStatement","src":"7096:20:85"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":21681,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21626,"src":"7135:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21683,"indexExpression":{"id":21682,"name":"minPositiveDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21661,"src":"7145:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7135:32:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":21687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"7170:33:85","subExpression":{"baseExpression":{"id":21684,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21626,"src":"7171:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21686,"indexExpression":{"id":21685,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21634,"src":"7181:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7171:32:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7135:68:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":21744,"nodeType":"Block","src":"7630:423:85","statements":[{"expression":{"id":21718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21716,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21673,"src":"7648:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21717,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21634,"src":"7666:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7648:39:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21719,"nodeType":"ExpressionStatement","src":"7648:39:85"},{"expression":{"id":21722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21720,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21676,"src":"7705:16:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21721,"name":"minPositiveDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21661,"src":"7724:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7705:40:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21723,"nodeType":"ExpressionStatement","src":"7705:40:85"},{"expression":{"id":21742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21724,"name":"resultAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21679,"src":"7763:12:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":21726,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21620,"src":"7829:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":21727,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21641,"src":"7855:10:85","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":21729,"indexExpression":{"id":21728,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21676,"src":"7866:16:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7855:28:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"baseExpression":{"id":21730,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21641,"src":"7905:10:85","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":21732,"indexExpression":{"id":21731,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21673,"src":"7916:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7905:27:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"id":21736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"7955:24:85","subExpression":{"baseExpression":{"id":21733,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21623,"src":"7956:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21735,"indexExpression":{"id":21734,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21673,"src":"7963:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7956:23:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":21737,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7954:26:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7981:9:85","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":15245,"src":"7954:36:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":21739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7954:38:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21740,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21628,"src":"8014:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21725,"name":"_querySwapSingleTokenExactOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21544,"src":"7778:29:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,contract IERC20,contract IERC20,uint256,address) returns (uint256)"}},"id":21741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7778:260:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7763:275:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21743,"nodeType":"ExpressionStatement","src":"7763:275:85"}]},"id":21745,"nodeType":"IfStatement","src":"7131:922:85","trueBody":{"id":21715,"nodeType":"Block","src":"7205:419:85","statements":[{"expression":{"id":21691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21689,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21673,"src":"7223:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21690,"name":"minPositiveDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21661,"src":"7241:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7223:39:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21692,"nodeType":"ExpressionStatement","src":"7223:39:85"},{"expression":{"id":21695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21693,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21676,"src":"7280:16:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21694,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21634,"src":"7299:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7280:40:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21696,"nodeType":"ExpressionStatement","src":"7280:40:85"},{"expression":{"id":21713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21697,"name":"resultAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21679,"src":"7338:12:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":21699,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21620,"src":"7403:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":21700,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21641,"src":"7429:10:85","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":21702,"indexExpression":{"id":21701,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21673,"src":"7440:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7429:27:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"baseExpression":{"id":21703,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21641,"src":"7478:10:85","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":21705,"indexExpression":{"id":21704,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21676,"src":"7489:16:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7478:28:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":21706,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21623,"src":"7528:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21708,"indexExpression":{"id":21707,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21673,"src":"7535:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7528:23:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7552:9:85","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":15245,"src":"7528:33:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":21710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7528:35:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21711,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21628,"src":"7585:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21698,"name":"_querySwapSingleTokenExactIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21501,"src":"7353:28:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,contract IERC20,contract IERC20,uint256,address) returns (uint256)"}},"id":21712,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7353:256:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7338:271:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21714,"nodeType":"ExpressionStatement","src":"7338:271:85"}]}},{"expression":{"id":21750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21746,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21623,"src":"8110:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21748,"indexExpression":{"id":21747,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21673,"src":"8117:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8110:23:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":21749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8136:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8110:27:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21751,"nodeType":"ExpressionStatement","src":"8110:27:85"},{"expression":{"id":21756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21752,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21626,"src":"8151:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21754,"indexExpression":{"id":21753,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21673,"src":"8161:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8151:26:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":21755,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8180:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8151:30:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21757,"nodeType":"ExpressionStatement","src":"8151:30:85"},{"expression":{"id":21764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21758,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21623,"src":"8195:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21760,"indexExpression":{"id":21759,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21676,"src":"8202:16:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8195:24:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":21761,"name":"resultAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21679,"src":"8223:12:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8236:8:85","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":16081,"src":"8223:21:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":21763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8223:23:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"8195:51:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21765,"nodeType":"ExpressionStatement","src":"8195:51:85"},{"expression":{"id":21775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21766,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21626,"src":"8260:9:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21768,"indexExpression":{"id":21767,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21676,"src":"8270:16:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8260:27:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":21770,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21620,"src":"8350:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21771,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21676,"src":"8372:16:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21772,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21623,"src":"8406:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":21773,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21628,"src":"8430:6:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21769,"name":"_queryAddLiquidityUnbalancedForTokenDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21618,"src":"8290:42:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_int256_$","typeString":"function (address,uint256,int256[] memory,address) returns (int256)"}},"id":21774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8290:160:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"8260:190:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21776,"nodeType":"ExpressionStatement","src":"8260:190:85"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21651,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21648,"src":"6771:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21652,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21623,"src":"6775:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6782:6:85","memberName":"length","nodeType":"MemberAccess","src":"6775:13:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":21654,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6791:1:85","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6775:17:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6771:21:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21778,"initializationExpression":{"assignments":[21648],"declarations":[{"constant":false,"id":21648,"mutability":"mutable","name":"i","nameLocation":"6764:1:85","nodeType":"VariableDeclaration","scope":21778,"src":"6756:9:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21647,"name":"uint256","nodeType":"ElementaryTypeName","src":"6756:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21650,"initialValue":{"hexValue":"30","id":21649,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6768:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6756:13:85"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"6794:3:85","subExpression":{"id":21657,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21648,"src":"6794:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21659,"nodeType":"ExpressionStatement","src":"6794:3:85"},"nodeType":"ForStatement","src":"6751:1710:85"},{"expression":{"id":21779,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21634,"src":"8478:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21632,"id":21780,"nodeType":"Return","src":"8471:28:85"}]},"id":21782,"implemented":true,"kind":"function","modifiers":[],"name":"_zeroOutDeltas","nameLocation":"6400:14:85","nodeType":"FunctionDefinition","parameters":{"id":21629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21620,"mutability":"mutable","name":"pool","nameLocation":"6432:4:85","nodeType":"VariableDeclaration","scope":21782,"src":"6424:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21619,"name":"address","nodeType":"ElementaryTypeName","src":"6424:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21623,"mutability":"mutable","name":"deltas","nameLocation":"6462:6:85","nodeType":"VariableDeclaration","scope":21782,"src":"6446:22:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21621,"name":"int256","nodeType":"ElementaryTypeName","src":"6446:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21622,"nodeType":"ArrayTypeName","src":"6446:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":21626,"mutability":"mutable","name":"deltaBPTs","nameLocation":"6494:9:85","nodeType":"VariableDeclaration","scope":21782,"src":"6478:25:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21624,"name":"int256","nodeType":"ElementaryTypeName","src":"6478:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21625,"nodeType":"ArrayTypeName","src":"6478:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":21628,"mutability":"mutable","name":"sender","nameLocation":"6521:6:85","nodeType":"VariableDeclaration","scope":21782,"src":"6513:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21627,"name":"address","nodeType":"ElementaryTypeName","src":"6513:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6414:119:85"},"returnParameters":{"id":21632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21631,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21782,"src":"6552:7:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21630,"name":"uint256","nodeType":"ElementaryTypeName","src":"6552:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6551:9:85"},"scope":21889,"src":"6391:2115:85","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21834,"nodeType":"Block","src":"8702:232:85","statements":[{"assignments":[21791],"declarations":[{"constant":false,"id":21791,"mutability":"mutable","name":"min","nameLocation":"8719:3:85","nodeType":"VariableDeclaration","scope":21834,"src":"8712:10:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":21790,"name":"int256","nodeType":"ElementaryTypeName","src":"8712:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":21797,"initialValue":{"expression":{"arguments":[{"id":21794,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8730:6:85","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":21793,"name":"int256","nodeType":"ElementaryTypeName","src":"8730:6:85","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":21792,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8725:4:85","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":21795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8725:12:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":21796,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8738:3:85","memberName":"max","nodeType":"MemberAccess","src":"8725:16:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"8712:29:85"},{"body":{"id":21832,"nodeType":"Block","src":"8794:134:85","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":21809,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21785,"src":"8812:5:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21811,"indexExpression":{"id":21810,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21799,"src":"8818:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8812:8:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":21812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8823:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8812:12:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":21814,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21785,"src":"8828:5:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21816,"indexExpression":{"id":21815,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21799,"src":"8834:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8828:8:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":21817,"name":"min","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21791,"src":"8839:3:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"8828:14:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8812:30:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21831,"nodeType":"IfStatement","src":"8808:110:85","trueBody":{"id":21830,"nodeType":"Block","src":"8844:74:85","statements":[{"expression":{"id":21824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21820,"name":"min","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21791,"src":"8862:3:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":21821,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21785,"src":"8868:5:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21823,"indexExpression":{"id":21822,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21799,"src":"8874:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8868:8:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"8862:14:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21825,"nodeType":"ExpressionStatement","src":"8862:14:85"},{"expression":{"id":21828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21826,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21788,"src":"8894:5:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21827,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21799,"src":"8902:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8894:9:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21829,"nodeType":"ExpressionStatement","src":"8894:9:85"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21802,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21799,"src":"8771:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":21803,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21785,"src":"8775:5:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8781:6:85","memberName":"length","nodeType":"MemberAccess","src":"8775:12:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8771:16:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21833,"initializationExpression":{"assignments":[21799],"declarations":[{"constant":false,"id":21799,"mutability":"mutable","name":"i","nameLocation":"8764:1:85","nodeType":"VariableDeclaration","scope":21833,"src":"8756:9:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21798,"name":"uint256","nodeType":"ElementaryTypeName","src":"8756:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21801,"initialValue":{"hexValue":"30","id":21800,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8768:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8756:13:85"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8789:3:85","subExpression":{"id":21806,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21799,"src":"8789:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21808,"nodeType":"ExpressionStatement","src":"8789:3:85"},"nodeType":"ForStatement","src":"8751:177:85"}]},"id":21835,"implemented":true,"kind":"function","modifiers":[],"name":"_minPositiveIndex","nameLocation":"8623:17:85","nodeType":"FunctionDefinition","parameters":{"id":21786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21785,"mutability":"mutable","name":"array","nameLocation":"8657:5:85","nodeType":"VariableDeclaration","scope":21835,"src":"8641:21:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21783,"name":"int256","nodeType":"ElementaryTypeName","src":"8641:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21784,"nodeType":"ArrayTypeName","src":"8641:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"8640:23:85"},"returnParameters":{"id":21789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21788,"mutability":"mutable","name":"index","nameLocation":"8695:5:85","nodeType":"VariableDeclaration","scope":21835,"src":"8687:13:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21787,"name":"uint256","nodeType":"ElementaryTypeName","src":"8687:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8686:15:85"},"scope":21889,"src":"8614:320:85","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":21887,"nodeType":"Block","src":"9129:232:85","statements":[{"assignments":[21844],"declarations":[{"constant":false,"id":21844,"mutability":"mutable","name":"max","nameLocation":"9146:3:85","nodeType":"VariableDeclaration","scope":21887,"src":"9139:10:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":21843,"name":"int256","nodeType":"ElementaryTypeName","src":"9139:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":21850,"initialValue":{"expression":{"arguments":[{"id":21847,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9157:6:85","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":21846,"name":"int256","nodeType":"ElementaryTypeName","src":"9157:6:85","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":21845,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9152:4:85","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":21848,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9152:12:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":21849,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9165:3:85","memberName":"min","nodeType":"MemberAccess","src":"9152:16:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"9139:29:85"},{"body":{"id":21885,"nodeType":"Block","src":"9221:134:85","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":21862,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21838,"src":"9239:5:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21864,"indexExpression":{"id":21863,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21852,"src":"9245:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9239:8:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":21865,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9250:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9239:12:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":21867,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21838,"src":"9255:5:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21869,"indexExpression":{"id":21868,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21852,"src":"9261:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9255:8:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":21870,"name":"max","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21844,"src":"9266:3:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9255:14:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9239:30:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21884,"nodeType":"IfStatement","src":"9235:110:85","trueBody":{"id":21883,"nodeType":"Block","src":"9271:74:85","statements":[{"expression":{"id":21877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21873,"name":"max","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21844,"src":"9289:3:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":21874,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21838,"src":"9295:5:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21876,"indexExpression":{"id":21875,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21852,"src":"9301:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9295:8:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9289:14:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21878,"nodeType":"ExpressionStatement","src":"9289:14:85"},{"expression":{"id":21881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21879,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21841,"src":"9321:5:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21880,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21852,"src":"9329:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9321:9:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21882,"nodeType":"ExpressionStatement","src":"9321:9:85"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21855,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21852,"src":"9198:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":21856,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21838,"src":"9202:5:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9208:6:85","memberName":"length","nodeType":"MemberAccess","src":"9202:12:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9198:16:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21886,"initializationExpression":{"assignments":[21852],"declarations":[{"constant":false,"id":21852,"mutability":"mutable","name":"i","nameLocation":"9191:1:85","nodeType":"VariableDeclaration","scope":21886,"src":"9183:9:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21851,"name":"uint256","nodeType":"ElementaryTypeName","src":"9183:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21854,"initialValue":{"hexValue":"30","id":21853,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9195:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9183:13:85"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9216:3:85","subExpression":{"id":21859,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21852,"src":"9216:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21861,"nodeType":"ExpressionStatement","src":"9216:3:85"},"nodeType":"ForStatement","src":"9178:177:85"}]},"id":21888,"implemented":true,"kind":"function","modifiers":[],"name":"_maxNegativeIndex","nameLocation":"9050:17:85","nodeType":"FunctionDefinition","parameters":{"id":21839,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21838,"mutability":"mutable","name":"array","nameLocation":"9084:5:85","nodeType":"VariableDeclaration","scope":21888,"src":"9068:21:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21836,"name":"int256","nodeType":"ElementaryTypeName","src":"9068:6:85","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21837,"nodeType":"ArrayTypeName","src":"9068:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"9067:23:85"},"returnParameters":{"id":21842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21841,"mutability":"mutable","name":"index","nameLocation":"9122:5:85","nodeType":"VariableDeclaration","scope":21888,"src":"9114:13:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21840,"name":"uint256","nodeType":"ElementaryTypeName","src":"9114:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9113:15:85"},"scope":21889,"src":"9041:320:85","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":21890,"src":"635:8728:85","usedErrors":[4877,4880,11076,12379,14342,14354,18535],"usedEvents":[]}],"src":"46:9318:85"},"id":85},"contracts/ProtocolFeeHelper.sol":{"ast":{"absolutePath":"contracts/ProtocolFeeHelper.sol","exportedSymbols":{"IProtocolFeeController":[1955],"IProtocolFeeHelper":[968],"IVault":[2545],"PoolHelperCommon":[21059],"ProtocolFeeHelper":[21966]},"id":21967,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":21891,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:86"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol","id":21893,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21967,"sourceUnit":969,"src":"72:116:86","symbolAliases":[{"foreign":{"id":21892,"name":"IProtocolFeeHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":968,"src":"81:18:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":21895,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21967,"sourceUnit":1956,"src":"189:113:86","symbolAliases":[{"foreign":{"id":21894,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"198:22:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":21897,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21967,"sourceUnit":2546,"src":"303:81:86","symbolAliases":[{"foreign":{"id":21896,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"312:6:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/PoolHelperCommon.sol","file":"./PoolHelperCommon.sol","id":21899,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21967,"sourceUnit":21060,"src":"386:58:86","symbolAliases":[{"foreign":{"id":21898,"name":"PoolHelperCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21059,"src":"395:16:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":21900,"name":"IProtocolFeeHelper","nameLocations":["476:18:86"],"nodeType":"IdentifierPath","referencedDeclaration":968,"src":"476:18:86"},"id":21901,"nodeType":"InheritanceSpecifier","src":"476:18:86"},{"baseName":{"id":21902,"name":"PoolHelperCommon","nameLocations":["496:16:86"],"nodeType":"IdentifierPath","referencedDeclaration":21059,"src":"496:16:86"},"id":21903,"nodeType":"InheritanceSpecifier","src":"496:16:86"}],"canonicalName":"ProtocolFeeHelper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":21966,"linearizedBaseContracts":[21966,21059,20330,4385,14,9572,9486,12366,865,968],"name":"ProtocolFeeHelper","nameLocation":"455:17:86","nodeType":"ContractDefinition","nodes":[{"body":{"id":21915,"nodeType":"Block","src":"605:64:86","statements":[]},"id":21916,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":21911,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21906,"src":"584:5:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},{"id":21912,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21908,"src":"591:12:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21913,"kind":"baseConstructorSpecifier","modifierName":{"id":21910,"name":"PoolHelperCommon","nameLocations":["567:16:86"],"nodeType":"IdentifierPath","referencedDeclaration":21059,"src":"567:16:86"},"nodeType":"ModifierInvocation","src":"567:37:86"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":21909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21906,"mutability":"mutable","name":"vault","nameLocation":"538:5:86","nodeType":"VariableDeclaration","scope":21916,"src":"531:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":21905,"nodeType":"UserDefinedTypeName","pathNode":{"id":21904,"name":"IVault","nameLocations":["531:6:86"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"531:6:86"},"referencedDeclaration":2545,"src":"531:6:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":21908,"mutability":"mutable","name":"initialOwner","nameLocation":"553:12:86","nodeType":"VariableDeclaration","scope":21916,"src":"545:20:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21907,"name":"address","nodeType":"ElementaryTypeName","src":"545:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"530:36:86"},"returnParameters":{"id":21914,"nodeType":"ParameterList","parameters":[],"src":"605:0:86"},"scope":21966,"src":"519:150:86","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[959],"body":{"id":21934,"nodeType":"Block","src":"1076:109:86","statements":[{"expression":{"arguments":[{"id":21930,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21919,"src":"1143:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21931,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21921,"src":"1149:28:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":21927,"name":"_getProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21965,"src":"1086:25:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view returns (contract IProtocolFeeController)"}},"id":21928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1086:27:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":21929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1114:28:86","memberName":"setProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1897,"src":"1086:56:86","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":21932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1086:92:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21933,"nodeType":"ExpressionStatement","src":"1086:92:86"}]},"documentation":{"id":21917,"nodeType":"StructuredDocumentation","src":"887:34:86","text":"@inheritdoc IProtocolFeeHelper"},"functionSelector":"fd267f39","id":21935,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":21924,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21919,"src":"1070:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21925,"kind":"modifierInvocation","modifierName":{"id":21923,"name":"withValidPoolForSender","nameLocations":["1047:22:86"],"nodeType":"IdentifierPath","referencedDeclaration":20392,"src":"1047:22:86"},"nodeType":"ModifierInvocation","src":"1047:28:86"}],"name":"setProtocolSwapFeePercentage","nameLocation":"935:28:86","nodeType":"FunctionDefinition","parameters":{"id":21922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21919,"mutability":"mutable","name":"pool","nameLocation":"981:4:86","nodeType":"VariableDeclaration","scope":21935,"src":"973:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21918,"name":"address","nodeType":"ElementaryTypeName","src":"973:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21921,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"1003:28:86","nodeType":"VariableDeclaration","scope":21935,"src":"995:36:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21920,"name":"uint256","nodeType":"ElementaryTypeName","src":"995:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"963:74:86"},"returnParameters":{"id":21926,"nodeType":"ParameterList","parameters":[],"src":"1076:0:86"},"scope":21966,"src":"926:259:86","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[967],"body":{"id":21953,"nodeType":"Block","src":"1382:111:86","statements":[{"expression":{"arguments":[{"id":21949,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21938,"src":"1450:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21950,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21940,"src":"1456:29:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":21946,"name":"_getProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21965,"src":"1392:25:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view returns (contract IProtocolFeeController)"}},"id":21947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1392:27:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":21948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1420:29:86","memberName":"setProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1905,"src":"1392:57:86","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":21951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1392:94:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21952,"nodeType":"ExpressionStatement","src":"1392:94:86"}]},"documentation":{"id":21936,"nodeType":"StructuredDocumentation","src":"1191:34:86","text":"@inheritdoc IProtocolFeeHelper"},"functionSelector":"abaa3356","id":21954,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":21943,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21938,"src":"1376:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21944,"kind":"modifierInvocation","modifierName":{"id":21942,"name":"withValidPoolForSender","nameLocations":["1353:22:86"],"nodeType":"IdentifierPath","referencedDeclaration":20392,"src":"1353:22:86"},"nodeType":"ModifierInvocation","src":"1353:28:86"}],"name":"setProtocolYieldFeePercentage","nameLocation":"1239:29:86","nodeType":"FunctionDefinition","parameters":{"id":21941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21938,"mutability":"mutable","name":"pool","nameLocation":"1286:4:86","nodeType":"VariableDeclaration","scope":21954,"src":"1278:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21937,"name":"address","nodeType":"ElementaryTypeName","src":"1278:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21940,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"1308:29:86","nodeType":"VariableDeclaration","scope":21954,"src":"1300:37:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21939,"name":"uint256","nodeType":"ElementaryTypeName","src":"1300:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1268:75:86"},"returnParameters":{"id":21945,"nodeType":"ParameterList","parameters":[],"src":"1382:0:86"},"scope":21966,"src":"1230:263:86","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":21964,"nodeType":"Block","src":"1925:56:86","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":21960,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"1942:5:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":21961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1948:24:86","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":3794,"src":"1942:30:86","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":21962,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1942:32:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"functionReturnParameters":21959,"id":21963,"nodeType":"Return","src":"1935:39:86"}]},"id":21965,"implemented":true,"kind":"function","modifiers":[],"name":"_getProtocolFeeController","nameLocation":"1850:25:86","nodeType":"FunctionDefinition","parameters":{"id":21955,"nodeType":"ParameterList","parameters":[],"src":"1875:2:86"},"returnParameters":{"id":21959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21958,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21965,"src":"1901:22:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":21957,"nodeType":"UserDefinedTypeName","pathNode":{"id":21956,"name":"IProtocolFeeController","nameLocations":["1901:22:86"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"1901:22:86"},"referencedDeclaration":1955,"src":"1901:22:86","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"1900:24:86"},"scope":21966,"src":"1841:140:86","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":21967,"src":"446:1537:86","usedErrors":[5,711,718,723,726,731,734,739,2857,9352,9357,20215],"usedEvents":[674,681,688,695,704,9363,9501]}],"src":"46:1938:86"},"id":86},"contracts/ProtocolFeePercentagesProvider.sol":{"ast":{"absolutePath":"contracts/ProtocolFeePercentagesProvider.sol","exportedSymbols":{"ContractType":[43],"FEE_SCALING_FACTOR":[4302],"IBalancerContractRegistry":[212],"IBasePoolFactory":[1415],"IProtocolFeeController":[1955],"IProtocolFeePercentagesProvider":[2034],"IVault":[2545],"IVaultErrors":[3202],"ProtocolFeeController":[9230],"ProtocolFeePercentagesProvider":[22329],"SafeCast":[16092],"SingletonAuthentication":[9289]},"id":22330,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":21968,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:87"},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":21970,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":16093,"src":"72:75:87","symbolAliases":[{"foreign":{"id":21969,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16092,"src":"81:8:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":21972,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":1956,"src":"149:113:87","symbolAliases":[{"foreign":{"id":21971,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"158:22:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","id":21974,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":1416,"src":"263:101:87","symbolAliases":[{"foreign":{"id":21973,"name":"IBasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1415,"src":"272:16:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":21976,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":4306,"src":"365:97:87","symbolAliases":[{"foreign":{"id":21975,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4302,"src":"374:18:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol","id":21978,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":2035,"src":"463:135:87","symbolAliases":[{"foreign":{"id":21977,"name":"IProtocolFeePercentagesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2034,"src":"476:31:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","id":21981,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":213,"src":"599:152:87","symbolAliases":[{"foreign":{"id":21979,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":212,"src":"612:25:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":21980,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43,"src":"643:12:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":21983,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":3203,"src":"752:93:87","symbolAliases":[{"foreign":{"id":21982,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"761:12:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":21985,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":2546,"src":"846:81:87","symbolAliases":[{"foreign":{"id":21984,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"855:6:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":21987,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":9290,"src":"929:104:87","symbolAliases":[{"foreign":{"id":21986,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9289,"src":"938:23:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","file":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","id":21989,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22330,"sourceUnit":9231,"src":"1034:100:87","symbolAliases":[{"foreign":{"id":21988,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9230,"src":"1043:21:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":21990,"name":"IProtocolFeePercentagesProvider","nameLocations":["1179:31:87"],"nodeType":"IdentifierPath","referencedDeclaration":2034,"src":"1179:31:87"},"id":21991,"nodeType":"InheritanceSpecifier","src":"1179:31:87"},{"baseName":{"id":21992,"name":"SingletonAuthentication","nameLocations":["1212:23:87"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"1212:23:87"},"id":21993,"nodeType":"InheritanceSpecifier","src":"1212:23:87"}],"canonicalName":"ProtocolFeePercentagesProvider","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":22329,"linearizedBaseContracts":[22329,9289,7535,4385,14,2034],"name":"ProtocolFeePercentagesProvider","nameLocation":"1145:30:87","nodeType":"ContractDefinition","nodes":[{"global":false,"id":21996,"libraryName":{"id":21994,"name":"SafeCast","nameLocations":["1248:8:87"],"nodeType":"IdentifierPath","referencedDeclaration":16092,"src":"1248:8:87"},"nodeType":"UsingForDirective","src":"1242:27:87","typeName":{"id":21995,"name":"uint256","nodeType":"ElementaryTypeName","src":"1261:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"canonicalName":"ProtocolFeePercentagesProvider.FactoryProtocolFees","documentation":{"id":21997,"nodeType":"StructuredDocumentation","src":"1275:425:87","text":" @dev Data structure to store default protocol fees by factory. Fee percentages are 18-decimal floating point\n numbers, so we know they fit in 64 bits, allowing the fees to be stored in a single slot.\n @param protocolSwapFee The protocol swap fee\n @param protocolYieldFee The protocol yield fee\n @param areFactoryFeesSet Flag indicating fees have been set (allows zero values)"},"id":22004,"members":[{"constant":false,"id":21999,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"1749:25:87","nodeType":"VariableDeclaration","scope":22004,"src":"1742:32:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":21998,"name":"uint64","nodeType":"ElementaryTypeName","src":"1742:6:87","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":22001,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"1791:26:87","nodeType":"VariableDeclaration","scope":22004,"src":"1784:33:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":22000,"name":"uint64","nodeType":"ElementaryTypeName","src":"1784:6:87","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":22003,"mutability":"mutable","name":"areFactoryFeesSet","nameLocation":"1832:17:87","nodeType":"VariableDeclaration","scope":22004,"src":"1827:22:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22002,"name":"bool","nodeType":"ElementaryTypeName","src":"1827:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"FactoryProtocolFees","nameLocation":"1712:19:87","nodeType":"StructDefinition","scope":22329,"src":"1705:151:87","visibility":"public"},{"constant":false,"id":22007,"mutability":"immutable","name":"_trustedContractRegistry","nameLocation":"1906:24:87","nodeType":"VariableDeclaration","scope":22329,"src":"1862:68:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":22006,"nodeType":"UserDefinedTypeName","pathNode":{"id":22005,"name":"IBalancerContractRegistry","nameLocations":["1862:25:87"],"nodeType":"IdentifierPath","referencedDeclaration":212,"src":"1862:25:87"},"referencedDeclaration":212,"src":"1862:25:87","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"visibility":"private"},{"constant":false,"id":22010,"mutability":"immutable","name":"_protocolFeeController","nameLocation":"1977:22:87","nodeType":"VariableDeclaration","scope":22329,"src":"1936:63:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":22009,"nodeType":"UserDefinedTypeName","pathNode":{"id":22008,"name":"IProtocolFeeController","nameLocations":["1936:22:87"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"1936:22:87"},"referencedDeclaration":1955,"src":"1936:22:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"private"},{"constant":false,"id":22012,"mutability":"immutable","name":"_maxProtocolSwapFeePercentage","nameLocation":"2032:29:87","nodeType":"VariableDeclaration","scope":22329,"src":"2006:55:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22011,"name":"uint256","nodeType":"ElementaryTypeName","src":"2006:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":22014,"mutability":"immutable","name":"_maxProtocolYieldFeePercentage","nameLocation":"2093:30:87","nodeType":"VariableDeclaration","scope":22329,"src":"2067:56:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22013,"name":"uint256","nodeType":"ElementaryTypeName","src":"2067:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":22020,"mutability":"mutable","name":"_factoryDefaultFeePercentages","nameLocation":"2233:29:87","nodeType":"VariableDeclaration","scope":22329,"src":"2176:86:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IBasePoolFactory_$1415_$_t_struct$_FactoryProtocolFees_$22004_storage_$","typeString":"mapping(contract IBasePoolFactory => struct ProtocolFeePercentagesProvider.FactoryProtocolFees)"},"typeName":{"id":22019,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":22016,"nodeType":"UserDefinedTypeName","pathNode":{"id":22015,"name":"IBasePoolFactory","nameLocations":["2184:16:87"],"nodeType":"IdentifierPath","referencedDeclaration":1415,"src":"2184:16:87"},"referencedDeclaration":1415,"src":"2184:16:87","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePoolFactory_$1415","typeString":"contract IBasePoolFactory"}},"nodeType":"Mapping","src":"2176:48:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IBasePoolFactory_$1415_$_t_struct$_FactoryProtocolFees_$22004_storage_$","typeString":"mapping(contract IBasePoolFactory => struct ProtocolFeePercentagesProvider.FactoryProtocolFees)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":22018,"nodeType":"UserDefinedTypeName","pathNode":{"id":22017,"name":"FactoryProtocolFees","nameLocations":["2204:19:87"],"nodeType":"IdentifierPath","referencedDeclaration":22004,"src":"2204:19:87"},"referencedDeclaration":22004,"src":"2204:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_storage_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"}}},"visibility":"private"},{"body":{"id":22069,"nodeType":"Block","src":"2377:576:87","statements":[{"assignments":[22034],"declarations":[{"constant":false,"id":22034,"mutability":"mutable","name":"protocolFeeController","nameLocation":"2410:21:87","nodeType":"VariableDeclaration","scope":22069,"src":"2387:44:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":22033,"nodeType":"UserDefinedTypeName","pathNode":{"id":22032,"name":"IProtocolFeeController","nameLocations":["2387:22:87"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"2387:22:87"},"referencedDeclaration":1955,"src":"2387:22:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"id":22038,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22035,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22023,"src":"2434:5:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":22036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2440:24:87","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":3794,"src":"2434:30:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":22037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2434:32:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"nodeType":"VariableDeclarationStatement","src":"2387:79:87"},{"expression":{"id":22041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22039,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22010,"src":"2477:22:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22040,"name":"protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22034,"src":"2502:21:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"src":"2477:46:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":22042,"nodeType":"ExpressionStatement","src":"2477:46:87"},{"expression":{"id":22045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22043,"name":"_trustedContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22007,"src":"2533:24:87","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22044,"name":"trustedContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22026,"src":"2560:23:87","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"src":"2533:50:87","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"id":22046,"nodeType":"ExpressionStatement","src":"2533:50:87"},{"expression":{"id":22056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22047,"name":"_maxProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22012,"src":"2668:29:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":22051,"name":"protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22034,"src":"2730:21:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}],"id":22050,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2722:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22049,"name":"address","nodeType":"ElementaryTypeName","src":"2722:7:87","typeDescriptions":{}}},"id":22052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2722:30:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22048,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9230,"src":"2700:21:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$9230_$","typeString":"type(contract ProtocolFeeController)"}},"id":22053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2700:53:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$9230","typeString":"contract ProtocolFeeController"}},"id":22054,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2767:32:87","memberName":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nodeType":"MemberAccess","referencedDeclaration":7591,"src":"2700:99:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":22055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2700:101:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2668:133:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22057,"nodeType":"ExpressionStatement","src":"2668:133:87"},{"expression":{"id":22067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22058,"name":"_maxProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22014,"src":"2811:30:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":22062,"name":"protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22034,"src":"2874:21:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}],"id":22061,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2866:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22060,"name":"address","nodeType":"ElementaryTypeName","src":"2866:7:87","typeDescriptions":{}}},"id":22063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2866:30:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22059,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9230,"src":"2844:21:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$9230_$","typeString":"type(contract ProtocolFeeController)"}},"id":22064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2844:53:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$9230","typeString":"contract ProtocolFeeController"}},"id":22065,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2911:33:87","memberName":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nodeType":"MemberAccess","referencedDeclaration":7594,"src":"2844:100:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":22066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2844:102:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2811:135:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22068,"nodeType":"ExpressionStatement","src":"2811:135:87"}]},"id":22070,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":22029,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22023,"src":"2370:5:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"id":22030,"kind":"baseConstructorSpecifier","modifierName":{"id":22028,"name":"SingletonAuthentication","nameLocations":["2346:23:87"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"2346:23:87"},"nodeType":"ModifierInvocation","src":"2346:30:87"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22023,"mutability":"mutable","name":"vault","nameLocation":"2288:5:87","nodeType":"VariableDeclaration","scope":22070,"src":"2281:12:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":22022,"nodeType":"UserDefinedTypeName","pathNode":{"id":22021,"name":"IVault","nameLocations":["2281:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"2281:6:87"},"referencedDeclaration":2545,"src":"2281:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":22026,"mutability":"mutable","name":"trustedContractRegistry","nameLocation":"2321:23:87","nodeType":"VariableDeclaration","scope":22070,"src":"2295:49:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":22025,"nodeType":"UserDefinedTypeName","pathNode":{"id":22024,"name":"IBalancerContractRegistry","nameLocations":["2295:25:87"],"nodeType":"IdentifierPath","referencedDeclaration":212,"src":"2295:25:87"},"referencedDeclaration":212,"src":"2295:25:87","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"visibility":"internal"}],"src":"2280:65:87"},"returnParameters":{"id":22031,"nodeType":"ParameterList","parameters":[],"src":"2377:0:87"},"scope":22329,"src":"2269:684:87","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1997],"body":{"id":22079,"nodeType":"Block","src":"3094:46:87","statements":[{"expression":{"id":22077,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22010,"src":"3111:22:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"functionReturnParameters":22076,"id":22078,"nodeType":"Return","src":"3104:29:87"}]},"documentation":{"id":22071,"nodeType":"StructuredDocumentation","src":"2959:47:87","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"85f2dbd4","id":22080,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"3020:24:87","nodeType":"FunctionDefinition","parameters":{"id":22072,"nodeType":"ParameterList","parameters":[],"src":"3044:2:87"},"returnParameters":{"id":22076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22075,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22080,"src":"3070:22:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":22074,"nodeType":"UserDefinedTypeName","pathNode":{"id":22073,"name":"IProtocolFeeController","nameLocations":["3070:22:87"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"3070:22:87"},"referencedDeclaration":1955,"src":"3070:22:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"3069:24:87"},"scope":22329,"src":"3011:129:87","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2004],"body":{"id":22089,"nodeType":"Block","src":"3287:48:87","statements":[{"expression":{"id":22087,"name":"_trustedContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22007,"src":"3304:24:87","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"functionReturnParameters":22086,"id":22088,"nodeType":"Return","src":"3297:31:87"}]},"documentation":{"id":22081,"nodeType":"StructuredDocumentation","src":"3146:47:87","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"deb27a7a","id":22090,"implemented":true,"kind":"function","modifiers":[],"name":"getBalancerContractRegistry","nameLocation":"3207:27:87","nodeType":"FunctionDefinition","parameters":{"id":22082,"nodeType":"ParameterList","parameters":[],"src":"3234:2:87"},"returnParameters":{"id":22086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22085,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22090,"src":"3260:25:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":22084,"nodeType":"UserDefinedTypeName","pathNode":{"id":22083,"name":"IBalancerContractRegistry","nameLocations":["3260:25:87"],"nodeType":"IdentifierPath","referencedDeclaration":212,"src":"3260:25:87"},"referencedDeclaration":212,"src":"3260:25:87","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"visibility":"internal"}],"src":"3259:27:87"},"scope":22329,"src":"3198:137:87","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2014],"body":{"id":22117,"nodeType":"Block","src":"3568:245:87","statements":[{"assignments":[22102],"declarations":[{"constant":false,"id":22102,"mutability":"mutable","name":"factoryFees","nameLocation":"3605:11:87","nodeType":"VariableDeclaration","scope":22117,"src":"3578:38:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"},"typeName":{"id":22101,"nodeType":"UserDefinedTypeName","pathNode":{"id":22100,"name":"FactoryProtocolFees","nameLocations":["3578:19:87"],"nodeType":"IdentifierPath","referencedDeclaration":22004,"src":"3578:19:87"},"referencedDeclaration":22004,"src":"3578:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_storage_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"}},"visibility":"internal"}],"id":22106,"initialValue":{"arguments":[{"id":22104,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22093,"src":"3645:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22103,"name":"_getValidatedProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22281,"src":"3619:25:87","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_struct$_FactoryProtocolFees_$22004_memory_ptr_$","typeString":"function (address) view returns (struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory)"}},"id":22105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3619:34:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"nodeType":"VariableDeclarationStatement","src":"3578:75:87"},{"expression":{"id":22110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22107,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22096,"src":"3664:25:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":22108,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22102,"src":"3692:11:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":22109,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3704:25:87","memberName":"protocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":21999,"src":"3692:37:87","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"3664:65:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22111,"nodeType":"ExpressionStatement","src":"3664:65:87"},{"expression":{"id":22115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22112,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22098,"src":"3739:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":22113,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22102,"src":"3768:11:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":22114,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3780:26:87","memberName":"protocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":22001,"src":"3768:38:87","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"3739:67:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22116,"nodeType":"ExpressionStatement","src":"3739:67:87"}]},"documentation":{"id":22091,"nodeType":"StructuredDocumentation","src":"3341:47:87","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"f2c24ec8","id":22118,"implemented":true,"kind":"function","modifiers":[],"name":"getFactorySpecificProtocolFeePercentages","nameLocation":"3402:40:87","nodeType":"FunctionDefinition","parameters":{"id":22094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22093,"mutability":"mutable","name":"factory","nameLocation":"3460:7:87","nodeType":"VariableDeclaration","scope":22118,"src":"3452:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22092,"name":"address","nodeType":"ElementaryTypeName","src":"3452:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3442:31:87"},"returnParameters":{"id":22099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22096,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"3505:25:87","nodeType":"VariableDeclaration","scope":22118,"src":"3497:33:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22095,"name":"uint256","nodeType":"ElementaryTypeName","src":"3497:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22098,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"3540:26:87","nodeType":"VariableDeclaration","scope":22118,"src":"3532:34:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22097,"name":"uint256","nodeType":"ElementaryTypeName","src":"3532:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3496:71:87"},"scope":22329,"src":"3393:420:87","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2024],"body":{"id":22194,"nodeType":"Block","src":"4061:1303:87","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22130,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22123,"src":"4180:25:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":22131,"name":"_maxProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22012,"src":"4208:29:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4180:57:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22139,"nodeType":"IfStatement","src":"4176:152:87","trueBody":{"id":22138,"nodeType":"Block","src":"4239:89:87","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22133,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"4260:22:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$1955_$","typeString":"type(contract IProtocolFeeController)"}},"id":22135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4283:32:87","memberName":"ProtocolSwapFeePercentageTooHigh","nodeType":"MemberAccess","referencedDeclaration":1736,"src":"4260:55:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4260:57:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22137,"nodeType":"RevertStatement","src":"4253:64:87"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22140,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22125,"src":"4342:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":22141,"name":"_maxProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22014,"src":"4371:30:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4342:59:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22149,"nodeType":"IfStatement","src":"4338:155:87","trueBody":{"id":22148,"nodeType":"Block","src":"4403:90:87","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22143,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"4424:22:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$1955_$","typeString":"type(contract IProtocolFeeController)"}},"id":22145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4447:33:87","memberName":"ProtocolYieldFeePercentageTooHigh","nodeType":"MemberAccess","referencedDeclaration":1739,"src":"4424:56:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4424:58:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22147,"nodeType":"RevertStatement","src":"4417:65:87"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":22152,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43,"src":"4597:12:87","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ContractType_$43_$","typeString":"type(enum ContractType)"}},"id":22153,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4610:12:87","memberName":"POOL_FACTORY","nodeType":"MemberAccess","referencedDeclaration":39,"src":"4597:25:87","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":22154,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22121,"src":"4624:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22150,"name":"_trustedContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22007,"src":"4547:24:87","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"id":22151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4572:24:87","memberName":"isActiveBalancerContract","nodeType":"MemberAccess","referencedDeclaration":181,"src":"4547:49:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_enum$_ContractType_$43_$_t_address_$returns$_t_bool_$","typeString":"function (enum ContractType,address) view external returns (bool)"}},"id":22155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4547:85:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":22156,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4636:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"4547:94:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22163,"nodeType":"IfStatement","src":"4543:155:87","trueBody":{"id":22162,"nodeType":"Block","src":"4643:55:87","statements":[{"errorCall":{"arguments":[{"id":22159,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22121,"src":"4679:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22158,"name":"UnknownFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1978,"src":"4664:14:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":22160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4664:23:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22161,"nodeType":"RevertStatement","src":"4657:30:87"}]}},{"expression":{"arguments":[{"id":22165,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22123,"src":"4776:25:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22164,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22328,"src":"4754:21:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":22166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4754:48:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22167,"nodeType":"ExpressionStatement","src":"4754:48:87"},{"expression":{"arguments":[{"id":22169,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22125,"src":"4834:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22168,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22328,"src":"4812:21:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":22170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4812:49:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22171,"nodeType":"ExpressionStatement","src":"4812:49:87"},{"expression":{"id":22186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":22172,"name":"_factoryDefaultFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22020,"src":"4954:29:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IBasePoolFactory_$1415_$_t_struct$_FactoryProtocolFees_$22004_storage_$","typeString":"mapping(contract IBasePoolFactory => struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref)"}},"id":22176,"indexExpression":{"arguments":[{"id":22174,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22121,"src":"5001:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22173,"name":"IBasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1415,"src":"4984:16:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePoolFactory_$1415_$","typeString":"type(contract IBasePoolFactory)"}},"id":22175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4984:25:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePoolFactory_$1415","typeString":"contract IBasePoolFactory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4954:56:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_storage","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22178,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22123,"src":"5074:25:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5100:8:87","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15026,"src":"5074:34:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":22180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5074:36:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22181,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22125,"src":"5152:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5179:8:87","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15026,"src":"5152:35:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":22183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5152:37:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"hexValue":"74727565","id":22184,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5222:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":22177,"name":"FactoryProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22004,"src":"5013:19:87","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_FactoryProtocolFees_$22004_storage_ptr_$","typeString":"type(struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage pointer)"}},"id":22185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["5047:25:87","5124:26:87","5203:17:87"],"names":["protocolSwapFeePercentage","protocolYieldFeePercentage","areFactoryFeesSet"],"nodeType":"FunctionCall","src":"5013:224:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"src":"4954:283:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_storage","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref"}},"id":22187,"nodeType":"ExpressionStatement","src":"4954:283:87"},{"eventCall":{"arguments":[{"id":22189,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22121,"src":"5294:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22190,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22123,"src":"5303:25:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22191,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22125,"src":"5330:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22188,"name":"FactorySpecificProtocolFeePercentagesSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1970,"src":"5253:40:87","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":22192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5253:104:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22193,"nodeType":"EmitStatement","src":"5248:109:87"}]},"documentation":{"id":22119,"nodeType":"StructuredDocumentation","src":"3819:47:87","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"00859689","id":22195,"implemented":true,"kind":"function","modifiers":[{"id":22128,"kind":"modifierInvocation","modifierName":{"id":22127,"name":"authenticate","nameLocations":["4048:12:87"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"4048:12:87"},"nodeType":"ModifierInvocation","src":"4048:12:87"}],"name":"setFactorySpecificProtocolFeePercentages","nameLocation":"3880:40:87","nodeType":"FunctionDefinition","parameters":{"id":22126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22121,"mutability":"mutable","name":"factory","nameLocation":"3938:7:87","nodeType":"VariableDeclaration","scope":22195,"src":"3930:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22120,"name":"address","nodeType":"ElementaryTypeName","src":"3930:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22123,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"3963:25:87","nodeType":"VariableDeclaration","scope":22195,"src":"3955:33:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22122,"name":"uint256","nodeType":"ElementaryTypeName","src":"3955:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22125,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"4006:26:87","nodeType":"VariableDeclaration","scope":22195,"src":"3998:34:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22124,"name":"uint256","nodeType":"ElementaryTypeName","src":"3998:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3920:118:87"},"returnParameters":{"id":22129,"nodeType":"ParameterList","parameters":[],"src":"4061:0:87"},"scope":22329,"src":"3871:1493:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2033],"body":{"id":22253,"nodeType":"Block","src":"5515:1005:87","statements":[{"assignments":[22206],"declarations":[{"constant":false,"id":22206,"mutability":"mutable","name":"factoryFees","nameLocation":"5848:11:87","nodeType":"VariableDeclaration","scope":22253,"src":"5821:38:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"},"typeName":{"id":22205,"nodeType":"UserDefinedTypeName","pathNode":{"id":22204,"name":"FactoryProtocolFees","nameLocations":["5821:19:87"],"nodeType":"IdentifierPath","referencedDeclaration":22004,"src":"5821:19:87"},"referencedDeclaration":22004,"src":"5821:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_storage_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"}},"visibility":"internal"}],"id":22210,"initialValue":{"arguments":[{"id":22208,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22198,"src":"5888:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22207,"name":"_getValidatedProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22281,"src":"5862:25:87","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_struct$_FactoryProtocolFees_$22004_memory_ptr_$","typeString":"function (address) view returns (struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory)"}},"id":22209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5862:34:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"nodeType":"VariableDeclarationStatement","src":"5821:75:87"},{"body":{"id":22251,"nodeType":"Block","src":"5950:564:87","statements":[{"assignments":[22223],"declarations":[{"constant":false,"id":22223,"mutability":"mutable","name":"currentPool","nameLocation":"5972:11:87","nodeType":"VariableDeclaration","scope":22251,"src":"5964:19:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22222,"name":"address","nodeType":"ElementaryTypeName","src":"5964:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":22227,"initialValue":{"baseExpression":{"id":22224,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22201,"src":"5986:5:87","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":22226,"indexExpression":{"id":22225,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22212,"src":"5992:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5986:8:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5964:30:87"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":22232,"name":"currentPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22223,"src":"6212:11:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":22229,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22198,"src":"6185:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22228,"name":"IBasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1415,"src":"6168:16:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePoolFactory_$1415_$","typeString":"type(contract IBasePoolFactory)"}},"id":22230,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6168:25:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePoolFactory_$1415","typeString":"contract IBasePoolFactory"}},"id":22231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6194:17:87","memberName":"isPoolFromFactory","nodeType":"MemberAccess","referencedDeclaration":1370,"src":"6168:43:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":22233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6168:56:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":22234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6228:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"6168:65:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22242,"nodeType":"IfStatement","src":"6164:151:87","trueBody":{"id":22241,"nodeType":"Block","src":"6235:80:87","statements":[{"errorCall":{"arguments":[{"id":22237,"name":"currentPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22223,"src":"6279:11:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22238,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22198,"src":"6292:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":22236,"name":"PoolNotFromFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1990,"src":"6260:18:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address) pure returns (error)"}},"id":22239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6260:40:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22240,"nodeType":"RevertStatement","src":"6253:47:87"}]}},{"expression":{"arguments":[{"id":22244,"name":"currentPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22223,"src":"6367:11:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":22245,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22206,"src":"6396:11:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":22246,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6408:25:87","memberName":"protocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":21999,"src":"6396:37:87","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":22247,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22206,"src":"6451:11:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":22248,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6463:26:87","memberName":"protocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":22001,"src":"6451:38:87","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":22243,"name":"_setPoolProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22306,"src":"6329:20:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":22249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6329:174:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22250,"nodeType":"ExpressionStatement","src":"6329:174:87"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22215,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22212,"src":"5927:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":22216,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22201,"src":"5931:5:87","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":22217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5937:6:87","memberName":"length","nodeType":"MemberAccess","src":"5931:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5927:16:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22252,"initializationExpression":{"assignments":[22212],"declarations":[{"constant":false,"id":22212,"mutability":"mutable","name":"i","nameLocation":"5920:1:87","nodeType":"VariableDeclaration","scope":22252,"src":"5912:9:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22211,"name":"uint256","nodeType":"ElementaryTypeName","src":"5912:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22214,"initialValue":{"hexValue":"30","id":22213,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5924:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5912:13:87"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":22220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5945:3:87","subExpression":{"id":22219,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22212,"src":"5947:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22221,"nodeType":"ExpressionStatement","src":"5945:3:87"},"nodeType":"ForStatement","src":"5907:607:87"}]},"documentation":{"id":22196,"nodeType":"StructuredDocumentation","src":"5370:47:87","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"344b12d5","id":22254,"implemented":true,"kind":"function","modifiers":[],"name":"setProtocolFeePercentagesForPools","nameLocation":"5431:33:87","nodeType":"FunctionDefinition","parameters":{"id":22202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22198,"mutability":"mutable","name":"factory","nameLocation":"5473:7:87","nodeType":"VariableDeclaration","scope":22254,"src":"5465:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22197,"name":"address","nodeType":"ElementaryTypeName","src":"5465:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22201,"mutability":"mutable","name":"pools","nameLocation":"5499:5:87","nodeType":"VariableDeclaration","scope":22254,"src":"5482:22:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":22199,"name":"address","nodeType":"ElementaryTypeName","src":"5482:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":22200,"nodeType":"ArrayTypeName","src":"5482:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5464:41:87"},"returnParameters":{"id":22203,"nodeType":"ParameterList","parameters":[],"src":"5515:0:87"},"scope":22329,"src":"5422:1098:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":22280,"nodeType":"Block","src":"6640:199:87","statements":[{"expression":{"id":22268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22262,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22260,"src":"6650:11:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":22263,"name":"_factoryDefaultFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22020,"src":"6664:29:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IBasePoolFactory_$1415_$_t_struct$_FactoryProtocolFees_$22004_storage_$","typeString":"mapping(contract IBasePoolFactory => struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref)"}},"id":22267,"indexExpression":{"arguments":[{"id":22265,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22256,"src":"6711:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22264,"name":"IBasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1415,"src":"6694:16:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePoolFactory_$1415_$","typeString":"type(contract IBasePoolFactory)"}},"id":22266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6694:25:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePoolFactory_$1415","typeString":"contract IBasePoolFactory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6664:56:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_storage","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref"}},"src":"6650:70:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":22269,"nodeType":"ExpressionStatement","src":"6650:70:87"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22270,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22260,"src":"6735:11:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":22271,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6747:17:87","memberName":"areFactoryFeesSet","nodeType":"MemberAccess","referencedDeclaration":22003,"src":"6735:29:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":22272,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6768:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"6735:38:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22279,"nodeType":"IfStatement","src":"6731:102:87","trueBody":{"id":22278,"nodeType":"Block","src":"6775:58:87","statements":[{"errorCall":{"arguments":[{"id":22275,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22256,"src":"6814:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22274,"name":"FactoryFeesNotSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1983,"src":"6796:17:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":22276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6796:26:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22277,"nodeType":"RevertStatement","src":"6789:33:87"}]}}]},"id":22281,"implemented":true,"kind":"function","modifiers":[],"name":"_getValidatedProtocolFees","nameLocation":"6535:25:87","nodeType":"FunctionDefinition","parameters":{"id":22257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22256,"mutability":"mutable","name":"factory","nameLocation":"6569:7:87","nodeType":"VariableDeclaration","scope":22281,"src":"6561:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22255,"name":"address","nodeType":"ElementaryTypeName","src":"6561:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6560:17:87"},"returnParameters":{"id":22261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22260,"mutability":"mutable","name":"factoryFees","nameLocation":"6627:11:87","nodeType":"VariableDeclaration","scope":22281,"src":"6600:38:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"},"typeName":{"id":22259,"nodeType":"UserDefinedTypeName","pathNode":{"id":22258,"name":"FactoryProtocolFees","nameLocations":["6600:19:87"],"nodeType":"IdentifierPath","referencedDeclaration":22004,"src":"6600:19:87"},"referencedDeclaration":22004,"src":"6600:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$22004_storage_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"}},"visibility":"internal"}],"src":"6599:40:87"},"scope":22329,"src":"6526:313:87","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":22305,"nodeType":"Block","src":"7217:197:87","statements":[{"expression":{"arguments":[{"id":22294,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22284,"src":"7279:4:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22295,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22286,"src":"7285:25:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22291,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22010,"src":"7227:22:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":22293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7250:28:87","memberName":"setProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1897,"src":"7227:51:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":22296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7227:84:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22297,"nodeType":"ExpressionStatement","src":"7227:84:87"},{"expression":{"arguments":[{"id":22301,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22284,"src":"7374:4:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22302,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22288,"src":"7380:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22298,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22010,"src":"7321:22:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":22300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7344:29:87","memberName":"setProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1905,"src":"7321:52:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":22303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7321:86:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22304,"nodeType":"ExpressionStatement","src":"7321:86:87"}]},"documentation":{"id":22282,"nodeType":"StructuredDocumentation","src":"6845:214:87","text":" @dev These are permissioned functions on `ProtocolFeeController`, so governance will need to allow this contract\n to call `setProtocolSwapFeePercentage` and `setProtocolYieldFeePercentage`."},"id":22306,"implemented":true,"kind":"function","modifiers":[],"name":"_setPoolProtocolFees","nameLocation":"7073:20:87","nodeType":"FunctionDefinition","parameters":{"id":22289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22284,"mutability":"mutable","name":"pool","nameLocation":"7111:4:87","nodeType":"VariableDeclaration","scope":22306,"src":"7103:12:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22283,"name":"address","nodeType":"ElementaryTypeName","src":"7103:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22286,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"7133:25:87","nodeType":"VariableDeclaration","scope":22306,"src":"7125:33:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22285,"name":"uint256","nodeType":"ElementaryTypeName","src":"7125:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22288,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"7176:26:87","nodeType":"VariableDeclaration","scope":22306,"src":"7168:34:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22287,"name":"uint256","nodeType":"ElementaryTypeName","src":"7168:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7093:115:87"},"returnParameters":{"id":22290,"nodeType":"ParameterList","parameters":[],"src":"7217:0:87"},"scope":22329,"src":"7064:350:87","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":22327,"nodeType":"Block","src":"7661:682:87","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22312,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22309,"src":"8196:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":22313,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4302,"src":"8212:18:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8196:34:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22315,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8195:36:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":22316,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4302,"src":"8234:18:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8195:57:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":22318,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22309,"src":"8256:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8195:74:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22326,"nodeType":"IfStatement","src":"8191:146:87","trueBody":{"id":22325,"nodeType":"Block","src":"8271:66:87","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22320,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"8292:12:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3202_$","typeString":"type(contract IVaultErrors)"}},"id":22322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8305:19:87","memberName":"FeePrecisionTooHigh","nodeType":"MemberAccess","referencedDeclaration":3050,"src":"8292:32:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8292:34:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22324,"nodeType":"RevertStatement","src":"8285:41:87"}]}}]},"documentation":{"id":22307,"nodeType":"StructuredDocumentation","src":"7420:169:87","text":" @dev This is a duplicate of the corresponding function in `ProtocolFeeController`, as it isn't exposed in the\n deployed version of the contract."},"id":22328,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidPrecision","nameLocation":"7603:21:87","nodeType":"FunctionDefinition","parameters":{"id":22310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22309,"mutability":"mutable","name":"feePercentage","nameLocation":"7633:13:87","nodeType":"VariableDeclaration","scope":22328,"src":"7625:21:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22308,"name":"uint256","nodeType":"ElementaryTypeName","src":"7625:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7624:23:87"},"returnParameters":{"id":22311,"nodeType":"ParameterList","parameters":[],"src":"7661:0:87"},"scope":22329,"src":"7594:749:87","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":22330,"src":"1136:7209:87","usedErrors":[5,1736,1739,1973,1978,1983,1990,3050,7355,14337],"usedEvents":[1970]}],"src":"46:8300:87"},"id":87},"contracts/ProtocolFeeSweeper.sol":{"ast":{"absolutePath":"contracts/ProtocolFeeSweeper.sol","exportedSymbols":{"IERC20":[10576],"IERC4626":[9846],"IProtocolFeeBurner":[948],"IProtocolFeeController":[1955],"IProtocolFeeSweeper":[1137],"IVault":[2545],"ProtocolFeeSweeper":[23007],"ReentrancyGuardTransient":[7012],"SafeERC20":[11066],"SingletonAuthentication":[9289]},"id":23008,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":22331,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:88"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":22333,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23008,"sourceUnit":11067,"src":"72:84:88","symbolAliases":[{"foreign":{"id":22332,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11066,"src":"81:9:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":22335,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23008,"sourceUnit":9847,"src":"157:75:88","symbolAliases":[{"foreign":{"id":22334,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"166:8:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":22337,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23008,"sourceUnit":10577,"src":"233:72:88","symbolAliases":[{"foreign":{"id":22336,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"242:6:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":22339,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23008,"sourceUnit":1138,"src":"307:118:88","symbolAliases":[{"foreign":{"id":22338,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1137,"src":"316:19:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","id":22341,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23008,"sourceUnit":949,"src":"426:116:88","symbolAliases":[{"foreign":{"id":22340,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"435:18:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":22343,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23008,"sourceUnit":1956,"src":"543:113:88","symbolAliases":[{"foreign":{"id":22342,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"552:22:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":22345,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23008,"sourceUnit":2546,"src":"657:81:88","symbolAliases":[{"foreign":{"id":22344,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"666:6:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":22347,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23008,"sourceUnit":9290,"src":"740:104:88","symbolAliases":[{"foreign":{"id":22346,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9289,"src":"749:23:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":22349,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23008,"sourceUnit":7013,"src":"845:132:88","symbolAliases":[{"foreign":{"id":22348,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7012,"src":"858:24:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":22351,"name":"IProtocolFeeSweeper","nameLocations":["1744:19:88"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"1744:19:88"},"id":22352,"nodeType":"InheritanceSpecifier","src":"1744:19:88"},{"baseName":{"id":22353,"name":"SingletonAuthentication","nameLocations":["1765:23:88"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"1765:23:88"},"id":22354,"nodeType":"InheritanceSpecifier","src":"1765:23:88"},{"baseName":{"id":22355,"name":"ReentrancyGuardTransient","nameLocations":["1790:24:88"],"nodeType":"IdentifierPath","referencedDeclaration":7012,"src":"1790:24:88"},"id":22356,"nodeType":"InheritanceSpecifier","src":"1790:24:88"}],"canonicalName":"ProtocolFeeSweeper","contractDependencies":[],"contractKind":"contract","documentation":{"id":22350,"nodeType":"StructuredDocumentation","src":"979:733:88","text":" @notice Withdraw protocol fees, convert them to a target token, and forward to a recipient.\n @dev This withdraws all protocol fees previously collected and allocated to the protocol by the\n `ProtocolFeeController`, processes them with a configurable \"burner\" (e.g., from CowSwap) and forwards them to\n a recipient address.\n An off-chain process can call `collectAggregateFees(pool)` on the fee controller for a given pool, which will\n collect and allocate the fees to the protocol and pool creator. `getProtocolFeeAmounts(pool)` returns the fee\n amounts available for withdrawal. If these are great enough, `sweepProtocolFeesForToken` here will withdraw,\n convert, and forward them to the final recipient."},"fullyImplemented":true,"id":23007,"linearizedBaseContracts":[23007,7012,9289,7535,4385,14,1137],"name":"ProtocolFeeSweeper","nameLocation":"1722:18:88","nodeType":"ContractDefinition","nodes":[{"global":false,"id":22360,"libraryName":{"id":22357,"name":"SafeERC20","nameLocations":["1827:9:88"],"nodeType":"IdentifierPath","referencedDeclaration":11066,"src":"1827:9:88"},"nodeType":"UsingForDirective","src":"1821:27:88","typeName":{"id":22359,"nodeType":"UserDefinedTypeName","pathNode":{"id":22358,"name":"IERC20","nameLocations":["1841:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1841:6:88"},"referencedDeclaration":10576,"src":"1841:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}},{"documentation":{"id":22361,"nodeType":"StructuredDocumentation","src":"1854:78:88","text":"@notice All pool tokens are ERC20, so this contract should not handle ETH."},"errorSelector":"f2238896","id":22363,"name":"CannotReceiveEth","nameLocation":"1943:16:88","nodeType":"ErrorDefinition","parameters":{"id":22362,"nodeType":"ParameterList","parameters":[],"src":"1959:2:88"},"src":"1937:25:88"},{"constant":false,"id":22366,"mutability":"mutable","name":"_targetToken","nameLocation":"2094:12:88","nodeType":"VariableDeclaration","scope":23007,"src":"2079:27:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":22365,"nodeType":"UserDefinedTypeName","pathNode":{"id":22364,"name":"IERC20","nameLocations":["2079:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2079:6:88"},"referencedDeclaration":10576,"src":"2079:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"private"},{"constant":false,"id":22368,"mutability":"mutable","name":"_feeRecipient","nameLocation":"2186:13:88","nodeType":"VariableDeclaration","scope":23007,"src":"2170:29:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22367,"name":"address","nodeType":"ElementaryTypeName","src":"2170:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":22373,"mutability":"mutable","name":"_protocolFeeBurners","nameLocation":"2319:19:88","nodeType":"VariableDeclaration","scope":23007,"src":"2254:84:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"},"typeName":{"id":22372,"keyName":"feeBurner","keyNameLocation":"2281:9:88","keyType":{"id":22370,"nodeType":"UserDefinedTypeName","pathNode":{"id":22369,"name":"IProtocolFeeBurner","nameLocations":["2262:18:88"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"2262:18:88"},"referencedDeclaration":948,"src":"2262:18:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"nodeType":"Mapping","src":"2254:56:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"},"valueName":"isApproved","valueNameLocation":"2299:10:88","valueType":{"id":22371,"name":"bool","nodeType":"ElementaryTypeName","src":"2294:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"private"},{"body":{"id":22385,"nodeType":"Block","src":"2481:84:88","statements":[{"expression":{"arguments":[{"arguments":[{"id":22379,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2526:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}],"id":22378,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2518:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22377,"name":"address","nodeType":"ElementaryTypeName","src":"2518:7:88","typeDescriptions":{}}},"id":22380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2518:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22381,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22368,"src":"2533:13:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":22376,"name":"_ensureAuthenticatedByRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7534,"src":"2491:26:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) view"}},"id":22382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2491:56:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22383,"nodeType":"ExpressionStatement","src":"2491:56:88"},{"id":22384,"nodeType":"PlaceholderStatement","src":"2557:1:88"}]},"documentation":{"id":22374,"nodeType":"StructuredDocumentation","src":"2345:91:88","text":"@notice Allows calls from fee recipient or governance allowed accounts (non-exclusive)."},"id":22386,"name":"onlyFeeRecipientOrGovernance","nameLocation":"2450:28:88","nodeType":"ModifierDefinition","parameters":{"id":22375,"nodeType":"ParameterList","parameters":[],"src":"2478:2:88"},"src":"2441:124:88","virtual":false,"visibility":"internal"},{"body":{"id":22401,"nodeType":"Block","src":"2751:47:88","statements":[{"expression":{"arguments":[{"id":22398,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22391,"src":"2778:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22397,"name":"_setFeeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22815,"src":"2761:16:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":22399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2761:30:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22400,"nodeType":"ExpressionStatement","src":"2761:30:88"}]},"id":22402,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":22394,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22389,"src":"2744:5:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}}],"id":22395,"kind":"baseConstructorSpecifier","modifierName":{"id":22393,"name":"SingletonAuthentication","nameLocations":["2720:23:88"],"nodeType":"IdentifierPath","referencedDeclaration":9289,"src":"2720:23:88"},"nodeType":"ModifierInvocation","src":"2720:30:88"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22389,"mutability":"mutable","name":"vault","nameLocation":"2691:5:88","nodeType":"VariableDeclaration","scope":22402,"src":"2684:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":22388,"nodeType":"UserDefinedTypeName","pathNode":{"id":22387,"name":"IVault","nameLocations":["2684:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"2684:6:88"},"referencedDeclaration":2545,"src":"2684:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":22391,"mutability":"mutable","name":"feeRecipient","nameLocation":"2706:12:88","nodeType":"VariableDeclaration","scope":22402,"src":"2698:20:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22390,"name":"address","nodeType":"ElementaryTypeName","src":"2698:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2683:36:88"},"returnParameters":{"id":22396,"nodeType":"ParameterList","parameters":[],"src":"2751:0:88"},"scope":23007,"src":"2672:126:88","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1057],"body":{"id":22431,"nodeType":"Block","src":"3088:112:88","statements":[{"expression":{"arguments":[{"id":22423,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22405,"src":"3125:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22424,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22408,"src":"3131:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":22425,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22410,"src":"3141:23:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22426,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22412,"src":"3166:8:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22427,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22415,"src":"3176:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},{"hexValue":"66616c7365","id":22428,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3187:5:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":22422,"name":"_sweepProtocolFeesForToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22650,"src":"3098:26:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_uint256_$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,uint256,contract IProtocolFeeBurner,bool)"}},"id":22429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3098:95:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22430,"nodeType":"ExpressionStatement","src":"3098:95:88"}]},"documentation":{"id":22403,"nodeType":"StructuredDocumentation","src":"2804:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"b9746995","id":22432,"implemented":true,"kind":"function","modifiers":[{"id":22418,"kind":"modifierInvocation","modifierName":{"id":22417,"name":"nonReentrant","nameLocations":["3046:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":6967,"src":"3046:12:88"},"nodeType":"ModifierInvocation","src":"3046:12:88"},{"id":22420,"kind":"modifierInvocation","modifierName":{"id":22419,"name":"onlyFeeRecipientOrGovernance","nameLocations":["3059:28:88"],"nodeType":"IdentifierPath","referencedDeclaration":22386,"src":"3059:28:88"},"nodeType":"ModifierInvocation","src":"3059:28:88"}],"name":"sweepProtocolFeesForToken","nameLocation":"2853:25:88","nodeType":"FunctionDefinition","parameters":{"id":22416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22405,"mutability":"mutable","name":"pool","nameLocation":"2896:4:88","nodeType":"VariableDeclaration","scope":22432,"src":"2888:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22404,"name":"address","nodeType":"ElementaryTypeName","src":"2888:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22408,"mutability":"mutable","name":"feeToken","nameLocation":"2917:8:88","nodeType":"VariableDeclaration","scope":22432,"src":"2910:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":22407,"nodeType":"UserDefinedTypeName","pathNode":{"id":22406,"name":"IERC20","nameLocations":["2910:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"2910:6:88"},"referencedDeclaration":10576,"src":"2910:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":22410,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"2943:23:88","nodeType":"VariableDeclaration","scope":22432,"src":"2935:31:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22409,"name":"uint256","nodeType":"ElementaryTypeName","src":"2935:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22412,"mutability":"mutable","name":"deadline","nameLocation":"2984:8:88","nodeType":"VariableDeclaration","scope":22432,"src":"2976:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22411,"name":"uint256","nodeType":"ElementaryTypeName","src":"2976:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22415,"mutability":"mutable","name":"feeBurner","nameLocation":"3021:9:88","nodeType":"VariableDeclaration","scope":22432,"src":"3002:28:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":22414,"nodeType":"UserDefinedTypeName","pathNode":{"id":22413,"name":"IProtocolFeeBurner","nameLocations":["3002:18:88"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"3002:18:88"},"referencedDeclaration":948,"src":"3002:18:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"2878:158:88"},"returnParameters":{"id":22421,"nodeType":"ParameterList","parameters":[],"src":"3088:0:88"},"scope":23007,"src":"2844:356:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1073],"body":{"id":22466,"nodeType":"Block","src":"3499:128:88","statements":[{"expression":{"arguments":[{"id":22453,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22435,"src":"3536:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":22457,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22438,"src":"3557:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"id":22456,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3549:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22455,"name":"address","nodeType":"ElementaryTypeName","src":"3549:7:88","typeDescriptions":{}}},"id":22458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3549:17:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22454,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"3542:6:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10576_$","typeString":"type(contract IERC20)"}},"id":22459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3542:25:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":22460,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22440,"src":"3569:23:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22461,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22442,"src":"3594:8:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22462,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22445,"src":"3604:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},{"hexValue":"74727565","id":22463,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3615:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":22452,"name":"_sweepProtocolFeesForToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22650,"src":"3509:26:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_uint256_$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,uint256,contract IProtocolFeeBurner,bool)"}},"id":22464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3509:111:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22465,"nodeType":"ExpressionStatement","src":"3509:111:88"}]},"documentation":{"id":22433,"nodeType":"StructuredDocumentation","src":"3206:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"88f6d2a4","id":22467,"implemented":true,"kind":"function","modifiers":[{"id":22448,"kind":"modifierInvocation","modifierName":{"id":22447,"name":"nonReentrant","nameLocations":["3457:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":6967,"src":"3457:12:88"},"nodeType":"ModifierInvocation","src":"3457:12:88"},{"id":22450,"kind":"modifierInvocation","modifierName":{"id":22449,"name":"onlyFeeRecipientOrGovernance","nameLocations":["3470:28:88"],"nodeType":"IdentifierPath","referencedDeclaration":22386,"src":"3470:28:88"},"nodeType":"ModifierInvocation","src":"3470:28:88"}],"name":"sweepProtocolFeesForWrappedToken","nameLocation":"3255:32:88","nodeType":"FunctionDefinition","parameters":{"id":22446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22435,"mutability":"mutable","name":"pool","nameLocation":"3305:4:88","nodeType":"VariableDeclaration","scope":22467,"src":"3297:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22434,"name":"address","nodeType":"ElementaryTypeName","src":"3297:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22438,"mutability":"mutable","name":"feeToken","nameLocation":"3328:8:88","nodeType":"VariableDeclaration","scope":22467,"src":"3319:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":22437,"nodeType":"UserDefinedTypeName","pathNode":{"id":22436,"name":"IERC4626","nameLocations":["3319:8:88"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"3319:8:88"},"referencedDeclaration":9846,"src":"3319:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":22440,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"3354:23:88","nodeType":"VariableDeclaration","scope":22467,"src":"3346:31:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22439,"name":"uint256","nodeType":"ElementaryTypeName","src":"3346:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22442,"mutability":"mutable","name":"deadline","nameLocation":"3395:8:88","nodeType":"VariableDeclaration","scope":22467,"src":"3387:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22441,"name":"uint256","nodeType":"ElementaryTypeName","src":"3387:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22445,"mutability":"mutable","name":"feeBurner","nameLocation":"3432:9:88","nodeType":"VariableDeclaration","scope":22467,"src":"3413:28:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":22444,"nodeType":"UserDefinedTypeName","pathNode":{"id":22443,"name":"IProtocolFeeBurner","nameLocations":["3413:18:88"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"3413:18:88"},"referencedDeclaration":948,"src":"3413:18:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"3287:160:88"},"returnParameters":{"id":22451,"nodeType":"ParameterList","parameters":[],"src":"3499:0:88"},"scope":23007,"src":"3246:381:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":22649,"nodeType":"Block","src":"3863:2820:88","statements":[{"assignments":[22485],"declarations":[{"constant":false,"id":22485,"mutability":"mutable","name":"feeBurnerProvided","nameLocation":"3878:17:88","nodeType":"VariableDeclaration","scope":22649,"src":"3873:22:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22484,"name":"bool","nodeType":"ElementaryTypeName","src":"3873:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":22489,"initialValue":{"arguments":[{"id":22487,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22479,"src":"3917:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22486,"name":"_getValidFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22701,"src":"3898:18:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IProtocolFeeBurner_$948_$returns$_t_bool_$","typeString":"function (contract IProtocolFeeBurner) view returns (bool)"}},"id":22488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3898:29:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3873:54:88"},{"assignments":[22491],"declarations":[{"constant":false,"id":22491,"mutability":"mutable","name":"existingBalance","nameLocation":"3946:15:88","nodeType":"VariableDeclaration","scope":22649,"src":"3938:23:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22490,"name":"uint256","nodeType":"ElementaryTypeName","src":"3938:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22499,"initialValue":{"arguments":[{"arguments":[{"id":22496,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3991:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}],"id":22495,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3983:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22494,"name":"address","nodeType":"ElementaryTypeName","src":"3983:7:88","typeDescriptions":{}}},"id":22497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3983:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22492,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"3964:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3973:9:88","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10533,"src":"3964:18:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":22498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3964:33:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3938:59:88"},{"assignments":[22502],"declarations":[{"constant":false,"id":22502,"mutability":"mutable","name":"feeController","nameLocation":"4229:13:88","nodeType":"VariableDeclaration","scope":22649,"src":"4206:36:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":22501,"nodeType":"UserDefinedTypeName","pathNode":{"id":22500,"name":"IProtocolFeeController","nameLocations":["4206:22:88"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"4206:22:88"},"referencedDeclaration":1955,"src":"4206:22:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"id":22505,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":22503,"name":"getProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22743,"src":"4245:24:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view returns (contract IProtocolFeeController)"}},"id":22504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4245:26:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"nodeType":"VariableDeclarationStatement","src":"4206:65:88"},{"expression":{"arguments":[{"id":22509,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22469,"src":"4463:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22506,"name":"feeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22502,"src":"4428:13:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":22508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4442:20:88","memberName":"collectAggregateFees","nodeType":"MemberAccess","referencedDeclaration":1767,"src":"4428:34:88","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":22510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4428:40:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22511,"nodeType":"ExpressionStatement","src":"4428:40:88"},{"expression":{"arguments":[{"id":22515,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22469,"src":"4615:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":22518,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4629:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}],"id":22517,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4621:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22516,"name":"address","nodeType":"ElementaryTypeName","src":"4621:7:88","typeDescriptions":{}}},"id":22519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4621:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22520,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"4636:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"expression":{"id":22512,"name":"feeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22502,"src":"4572:13:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":22514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4586:28:88","memberName":"withdrawProtocolFeesForToken","nodeType":"MemberAccess","referencedDeclaration":1940,"src":"4572:42:88","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$10576_$returns$__$","typeString":"function (address,address,contract IERC20) external"}},"id":22521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4572:73:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22522,"nodeType":"ExpressionStatement","src":"4572:73:88"},{"assignments":[22524],"declarations":[{"constant":false,"id":22524,"mutability":"mutable","name":"withdrawnBalance","nameLocation":"4664:16:88","nodeType":"VariableDeclaration","scope":22649,"src":"4656:24:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22523,"name":"uint256","nodeType":"ElementaryTypeName","src":"4656:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22534,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":22529,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4710:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}],"id":22528,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4702:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22527,"name":"address","nodeType":"ElementaryTypeName","src":"4702:7:88","typeDescriptions":{}}},"id":22530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4702:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22525,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"4683:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4692:9:88","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10533,"src":"4683:18:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":22531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4683:33:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":22532,"name":"existingBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22491,"src":"4719:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4683:51:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4656:78:88"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22535,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22524,"src":"4749:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":22536,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4768:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4749:20:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22648,"nodeType":"IfStatement","src":"4745:1932:88","trueBody":{"id":22647,"nodeType":"Block","src":"4771:1906:88","statements":[{"condition":{"id":22538,"name":"feeBurnerProvided","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22485,"src":"4789:17:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22645,"nodeType":"Block","src":"6490:177:88","statements":[{"expression":{"arguments":[{"id":22640,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22469,"src":"6619:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22641,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"6625:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":22642,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22524,"src":"6635:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22639,"name":"_transferFeeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22730,"src":"6601:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":22643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6601:51:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22644,"nodeType":"ExpressionStatement","src":"6601:51:88"}]},"id":22646,"nodeType":"IfStatement","src":"4785:1882:88","trueBody":{"id":22638,"nodeType":"Block","src":"4808:1676:88","statements":[{"assignments":[22541],"declarations":[{"constant":false,"id":22541,"mutability":"mutable","name":"targetToken","nameLocation":"4833:11:88","nodeType":"VariableDeclaration","scope":22638,"src":"4826:18:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":22540,"nodeType":"UserDefinedTypeName","pathNode":{"id":22539,"name":"IERC20","nameLocations":["4826:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"4826:6:88"},"referencedDeclaration":10576,"src":"4826:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":22543,"initialValue":{"id":22542,"name":"_targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22366,"src":"4847:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"4826:33:88"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"id":22546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22544,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"4986:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":22545,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22541,"src":"4998:11:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"4986:23:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22636,"nodeType":"Block","src":"5225:1245:88","statements":[{"condition":{"id":22560,"name":"shouldUnwrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22481,"src":"5251:12:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22595,"nodeType":"IfStatement","src":"5247:296:88","trueBody":{"id":22594,"nodeType":"Block","src":"5265:278:88","statements":[{"assignments":[22563],"declarations":[{"constant":false,"id":22563,"mutability":"mutable","name":"erc4626Token","nameLocation":"5300:12:88","nodeType":"VariableDeclaration","scope":22594,"src":"5291:21:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":22562,"nodeType":"UserDefinedTypeName","pathNode":{"id":22561,"name":"IERC4626","nameLocations":["5291:8:88"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"5291:8:88"},"referencedDeclaration":9846,"src":"5291:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"id":22570,"initialValue":{"arguments":[{"arguments":[{"id":22567,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"5332:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":22566,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5324:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22565,"name":"address","nodeType":"ElementaryTypeName","src":"5324:7:88","typeDescriptions":{}}},"id":22568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5324:17:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22564,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"5315:8:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9846_$","typeString":"type(contract IERC4626)"}},"id":22569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5315:27:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"nodeType":"VariableDeclarationStatement","src":"5291:51:88"},{"expression":{"id":22577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22571,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"5369:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22573,"name":"erc4626Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22563,"src":"5387:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"id":22574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5400:5:88","memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":9715,"src":"5387:18:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":22575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5387:20:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22572,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"5380:6:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10576_$","typeString":"type(contract IERC20)"}},"id":22576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5380:28:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"5369:39:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22578,"nodeType":"ExpressionStatement","src":"5369:39:88"},{"expression":{"id":22592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22579,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22524,"src":"5434:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":22582,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22524,"src":"5473:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":22585,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5499:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}],"id":22584,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5491:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22583,"name":"address","nodeType":"ElementaryTypeName","src":"5491:7:88","typeDescriptions":{}}},"id":22586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5491:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":22589,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5514:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}],"id":22588,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5506:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22587,"name":"address","nodeType":"ElementaryTypeName","src":"5506:7:88","typeDescriptions":{}}},"id":22590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5506:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22580,"name":"erc4626Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22563,"src":"5453:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"id":22581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5466:6:88","memberName":"redeem","nodeType":"MemberAccess","referencedDeclaration":9845,"src":"5453:19:88","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) external returns (uint256)"}},"id":22591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5453:67:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5434:86:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22593,"nodeType":"ExpressionStatement","src":"5434:86:88"}]}},{"expression":{"arguments":[{"arguments":[{"id":22601,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22479,"src":"5828:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22600,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5820:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22599,"name":"address","nodeType":"ElementaryTypeName","src":"5820:7:88","typeDescriptions":{}}},"id":22602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5820:18:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22603,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22524,"src":"5840:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22596,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"5798:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5807:12:88","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":10850,"src":"5798:21:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":22604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5798:59:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22605,"nodeType":"ExpressionStatement","src":"5798:59:88"},{"expression":{"arguments":[{"id":22609,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22469,"src":"6019:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22610,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"6049:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":22611,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22524,"src":"6083:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22612,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22541,"src":"6125:11:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":22613,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22474,"src":"6162:23:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22614,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22368,"src":"6211:13:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22615,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22476,"src":"6250:8:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22606,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22479,"src":"5979:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"id":22608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5989:4:88","memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":947,"src":"5979:14:88","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address,uint256) external"}},"id":22616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5979:301:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22617,"nodeType":"ExpressionStatement","src":"5979:301:88"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":22622,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6334:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}],"id":22621,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6326:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22620,"name":"address","nodeType":"ElementaryTypeName","src":"6326:7:88","typeDescriptions":{}}},"id":22623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6326:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":22626,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22479,"src":"6349:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22625,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6341:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22624,"name":"address","nodeType":"ElementaryTypeName","src":"6341:7:88","typeDescriptions":{}}},"id":22627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6341:18:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22618,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"6307:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6316:9:88","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":10553,"src":"6307:18:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":22628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6307:53:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":22629,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6363:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6307:57:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22635,"nodeType":"IfStatement","src":"6303:149:88","trueBody":{"id":22634,"nodeType":"Block","src":"6366:86:88","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22631,"name":"BurnerDidNotConsumeAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1038,"src":"6399:28:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6399:30:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22633,"nodeType":"RevertStatement","src":"6392:37:88"}]}}]},"id":22637,"nodeType":"IfStatement","src":"4982:1488:88","trueBody":{"id":22559,"nodeType":"Block","src":"5011:208:88","statements":[{"condition":{"id":22547,"name":"shouldUnwrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22481,"src":"5037:12:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22552,"nodeType":"IfStatement","src":"5033:94:88","trueBody":{"id":22551,"nodeType":"Block","src":"5051:76:88","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22548,"name":"UnwrapIsNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1041,"src":"5084:18:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5084:20:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22550,"nodeType":"RevertStatement","src":"5077:27:88"}]}},{"expression":{"arguments":[{"id":22554,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22469,"src":"5167:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22555,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22472,"src":"5173:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":22556,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22524,"src":"5183:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22553,"name":"_transferFeeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22730,"src":"5149:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":22557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5149:51:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22558,"nodeType":"ExpressionStatement","src":"5149:51:88"}]}}]}}]}}]},"id":22650,"implemented":true,"kind":"function","modifiers":[],"name":"_sweepProtocolFeesForToken","nameLocation":"3642:26:88","nodeType":"FunctionDefinition","parameters":{"id":22482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22469,"mutability":"mutable","name":"pool","nameLocation":"3686:4:88","nodeType":"VariableDeclaration","scope":22650,"src":"3678:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22468,"name":"address","nodeType":"ElementaryTypeName","src":"3678:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22472,"mutability":"mutable","name":"feeToken","nameLocation":"3707:8:88","nodeType":"VariableDeclaration","scope":22650,"src":"3700:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":22471,"nodeType":"UserDefinedTypeName","pathNode":{"id":22470,"name":"IERC20","nameLocations":["3700:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"3700:6:88"},"referencedDeclaration":10576,"src":"3700:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":22474,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"3733:23:88","nodeType":"VariableDeclaration","scope":22650,"src":"3725:31:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22473,"name":"uint256","nodeType":"ElementaryTypeName","src":"3725:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22476,"mutability":"mutable","name":"deadline","nameLocation":"3774:8:88","nodeType":"VariableDeclaration","scope":22650,"src":"3766:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22475,"name":"uint256","nodeType":"ElementaryTypeName","src":"3766:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22479,"mutability":"mutable","name":"feeBurner","nameLocation":"3811:9:88","nodeType":"VariableDeclaration","scope":22650,"src":"3792:28:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":22478,"nodeType":"UserDefinedTypeName","pathNode":{"id":22477,"name":"IProtocolFeeBurner","nameLocations":["3792:18:88"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"3792:18:88"},"referencedDeclaration":948,"src":"3792:18:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"},{"constant":false,"id":22481,"mutability":"mutable","name":"shouldUnwrap","nameLocation":"3835:12:88","nodeType":"VariableDeclaration","scope":22650,"src":"3830:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22480,"name":"bool","nodeType":"ElementaryTypeName","src":"3830:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3668:185:88"},"returnParameters":{"id":22483,"nodeType":"ParameterList","parameters":[],"src":"3863:0:88"},"scope":23007,"src":"3633:3050:88","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":22700,"nodeType":"Block","src":"6793:572:88","statements":[{"expression":{"id":22668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22658,"name":"feeBurnerProvided","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22656,"src":"6803:17:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":22661,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22653,"src":"6831:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22660,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6823:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22659,"name":"address","nodeType":"ElementaryTypeName","src":"6823:7:88","typeDescriptions":{}}},"id":22662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6823:18:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":22665,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6853:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":22664,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6845:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22663,"name":"address","nodeType":"ElementaryTypeName","src":"6845:7:88","typeDescriptions":{}}},"id":22666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6845:10:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6823:32:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6803:52:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22669,"nodeType":"ExpressionStatement","src":"6803:52:88"},{"condition":{"id":22670,"name":"feeBurnerProvided","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22656,"src":"7045:17:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22699,"nodeType":"IfStatement","src":"7041:318:88","trueBody":{"id":22698,"nodeType":"Block","src":"7064:295:88","statements":[{"condition":{"baseExpression":{"id":22671,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22373,"src":"7082:19:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":22673,"indexExpression":{"id":22672,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22653,"src":"7102:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7082:30:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22696,"nodeType":"Block","src":"7261:88:88","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":22692,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22653,"src":"7323:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22691,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7315:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22690,"name":"address","nodeType":"ElementaryTypeName","src":"7315:7:88","typeDescriptions":{}}},"id":22693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7315:18:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22689,"name":"UnsupportedProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1025,"src":"7286:28:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":22694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7286:48:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22695,"nodeType":"RevertStatement","src":"7279:55:88"}]},"id":22697,"nodeType":"IfStatement","src":"7078:271:88","trueBody":{"id":22688,"nodeType":"Block","src":"7114:141:88","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":22676,"name":"_targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22366,"src":"7144:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":22675,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7136:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22674,"name":"address","nodeType":"ElementaryTypeName","src":"7136:7:88","typeDescriptions":{}}},"id":22677,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7136:21:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":22680,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7169:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":22679,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7161:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22678,"name":"address","nodeType":"ElementaryTypeName","src":"7161:7:88","typeDescriptions":{}}},"id":22681,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7161:10:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7136:35:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22687,"nodeType":"IfStatement","src":"7132:109:88","trueBody":{"id":22686,"nodeType":"Block","src":"7173:68:88","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22683,"name":"InvalidTargetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1017,"src":"7202:18:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7202:20:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22685,"nodeType":"RevertStatement","src":"7195:27:88"}]}}]}}]}}]},"id":22701,"implemented":true,"kind":"function","modifiers":[],"name":"_getValidFeeBurner","nameLocation":"6698:18:88","nodeType":"FunctionDefinition","parameters":{"id":22654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22653,"mutability":"mutable","name":"feeBurner","nameLocation":"6736:9:88","nodeType":"VariableDeclaration","scope":22701,"src":"6717:28:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":22652,"nodeType":"UserDefinedTypeName","pathNode":{"id":22651,"name":"IProtocolFeeBurner","nameLocations":["6717:18:88"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"6717:18:88"},"referencedDeclaration":948,"src":"6717:18:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"6716:30:88"},"returnParameters":{"id":22657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22656,"mutability":"mutable","name":"feeBurnerProvided","nameLocation":"6774:17:88","nodeType":"VariableDeclaration","scope":22701,"src":"6769:22:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22655,"name":"bool","nodeType":"ElementaryTypeName","src":"6769:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6768:24:88"},"scope":23007,"src":"6689:676:88","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":22729,"nodeType":"Block","src":"7468:197:88","statements":[{"assignments":[22712],"declarations":[{"constant":false,"id":22712,"mutability":"mutable","name":"recipient","nameLocation":"7486:9:88","nodeType":"VariableDeclaration","scope":22729,"src":"7478:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22711,"name":"address","nodeType":"ElementaryTypeName","src":"7478:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":22714,"initialValue":{"id":22713,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22368,"src":"7498:13:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"7478:33:88"},{"expression":{"arguments":[{"id":22718,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22712,"src":"7543:9:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22719,"name":"withdrawnTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22708,"src":"7554:21:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22715,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22706,"src":"7521:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7530:12:88","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10647,"src":"7521:21:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":22720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7521:55:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22721,"nodeType":"ExpressionStatement","src":"7521:55:88"},{"eventCall":{"arguments":[{"id":22723,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22703,"src":"7609:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22724,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22706,"src":"7615:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":22725,"name":"withdrawnTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22708,"src":"7625:21:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22726,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22712,"src":"7648:9:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":22722,"name":"ProtocolFeeSwept","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1001,"src":"7592:16:88","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,contract IERC20,uint256,address)"}},"id":22727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7592:66:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22728,"nodeType":"EmitStatement","src":"7587:71:88"}]},"id":22730,"implemented":true,"kind":"function","modifiers":[],"name":"_transferFeeToken","nameLocation":"7380:17:88","nodeType":"FunctionDefinition","parameters":{"id":22709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22703,"mutability":"mutable","name":"pool","nameLocation":"7406:4:88","nodeType":"VariableDeclaration","scope":22730,"src":"7398:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22702,"name":"address","nodeType":"ElementaryTypeName","src":"7398:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22706,"mutability":"mutable","name":"feeToken","nameLocation":"7419:8:88","nodeType":"VariableDeclaration","scope":22730,"src":"7412:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":22705,"nodeType":"UserDefinedTypeName","pathNode":{"id":22704,"name":"IERC20","nameLocations":["7412:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"7412:6:88"},"referencedDeclaration":10576,"src":"7412:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":22708,"mutability":"mutable","name":"withdrawnTokenBalance","nameLocation":"7437:21:88","nodeType":"VariableDeclaration","scope":22730,"src":"7429:29:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22707,"name":"uint256","nodeType":"ElementaryTypeName","src":"7429:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7397:62:88"},"returnParameters":{"id":22710,"nodeType":"ParameterList","parameters":[],"src":"7468:0:88"},"scope":23007,"src":"7371:294:88","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"baseFunctions":[1080],"body":{"id":22742,"nodeType":"Block","src":"7792:61:88","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":22737,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9275,"src":"7809:8:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$2545_$","typeString":"function () view returns (contract IVault)"}},"id":22738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7809:10:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":22739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7820:24:88","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":3794,"src":"7809:35:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":22740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7809:37:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"functionReturnParameters":22736,"id":22741,"nodeType":"Return","src":"7802:44:88"}]},"documentation":{"id":22731,"nodeType":"StructuredDocumentation","src":"7671:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"85f2dbd4","id":22743,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"7720:24:88","nodeType":"FunctionDefinition","parameters":{"id":22732,"nodeType":"ParameterList","parameters":[],"src":"7744:2:88"},"returnParameters":{"id":22736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22735,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22743,"src":"7768:22:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":22734,"nodeType":"UserDefinedTypeName","pathNode":{"id":22733,"name":"IProtocolFeeController","nameLocations":["7768:22:88"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"7768:22:88"},"referencedDeclaration":1955,"src":"7768:22:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"7767:24:88"},"scope":23007,"src":"7711:142:88","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1087],"body":{"id":22752,"nodeType":"Block","src":"7956:36:88","statements":[{"expression":{"id":22750,"name":"_targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22366,"src":"7973:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"functionReturnParameters":22749,"id":22751,"nodeType":"Return","src":"7966:19:88"}]},"documentation":{"id":22744,"nodeType":"StructuredDocumentation","src":"7859:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"80db0d51","id":22753,"implemented":true,"kind":"function","modifiers":[],"name":"getTargetToken","nameLocation":"7908:14:88","nodeType":"FunctionDefinition","parameters":{"id":22745,"nodeType":"ParameterList","parameters":[],"src":"7922:2:88"},"returnParameters":{"id":22749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22748,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22753,"src":"7948:6:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":22747,"nodeType":"UserDefinedTypeName","pathNode":{"id":22746,"name":"IERC20","nameLocations":["7948:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"7948:6:88"},"referencedDeclaration":10576,"src":"7948:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"7947:8:88"},"scope":23007,"src":"7899:93:88","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1093],"body":{"id":22761,"nodeType":"Block","src":"8097:37:88","statements":[{"expression":{"id":22759,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22368,"src":"8114:13:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":22758,"id":22760,"nodeType":"Return","src":"8107:20:88"}]},"documentation":{"id":22754,"nodeType":"StructuredDocumentation","src":"7998:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"4ccb20c0","id":22762,"implemented":true,"kind":"function","modifiers":[],"name":"getFeeRecipient","nameLocation":"8047:15:88","nodeType":"FunctionDefinition","parameters":{"id":22755,"nodeType":"ParameterList","parameters":[],"src":"8062:2:88"},"returnParameters":{"id":22758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22757,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22762,"src":"8088:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22756,"name":"address","nodeType":"ElementaryTypeName","src":"8088:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8087:9:88"},"scope":23007,"src":"8038:96:88","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1101],"body":{"id":22776,"nodeType":"Block","src":"8273:82:88","statements":[{"expression":{"baseExpression":{"id":22770,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22373,"src":"8290:19:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":22774,"indexExpression":{"arguments":[{"id":22772,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22765,"src":"8329:17:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22771,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"8310:18:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeBurner_$948_$","typeString":"type(contract IProtocolFeeBurner)"}},"id":22773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8310:37:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8290:58:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":22769,"id":22775,"nodeType":"Return","src":"8283:65:88"}]},"documentation":{"id":22763,"nodeType":"StructuredDocumentation","src":"8140:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"9c5cee9b","id":22777,"implemented":true,"kind":"function","modifiers":[],"name":"isApprovedProtocolFeeBurner","nameLocation":"8189:27:88","nodeType":"FunctionDefinition","parameters":{"id":22766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22765,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"8225:17:88","nodeType":"VariableDeclaration","scope":22777,"src":"8217:25:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22764,"name":"address","nodeType":"ElementaryTypeName","src":"8217:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8216:27:88"},"returnParameters":{"id":22769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22768,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22777,"src":"8267:4:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22767,"name":"bool","nodeType":"ElementaryTypeName","src":"8267:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8266:6:88"},"scope":23007,"src":"8180:175:88","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1107],"body":{"id":22789,"nodeType":"Block","src":"8704:47:88","statements":[{"expression":{"arguments":[{"id":22786,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22780,"src":"8731:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22785,"name":"_setFeeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22815,"src":"8714:16:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":22787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8714:30:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22788,"nodeType":"ExpressionStatement","src":"8714:30:88"}]},"documentation":{"id":22778,"nodeType":"StructuredDocumentation","src":"8579:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"e74b981b","id":22790,"implemented":true,"kind":"function","modifiers":[{"id":22783,"kind":"modifierInvocation","modifierName":{"id":22782,"name":"onlyFeeRecipientOrGovernance","nameLocations":["8675:28:88"],"nodeType":"IdentifierPath","referencedDeclaration":22386,"src":"8675:28:88"},"nodeType":"ModifierInvocation","src":"8675:28:88"}],"name":"setFeeRecipient","nameLocation":"8628:15:88","nodeType":"FunctionDefinition","parameters":{"id":22781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22780,"mutability":"mutable","name":"feeRecipient","nameLocation":"8652:12:88","nodeType":"VariableDeclaration","scope":22790,"src":"8644:20:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22779,"name":"address","nodeType":"ElementaryTypeName","src":"8644:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8643:22:88"},"returnParameters":{"id":22784,"nodeType":"ParameterList","parameters":[],"src":"8704:0:88"},"scope":23007,"src":"8619:132:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":22814,"nodeType":"Block","src":"8814:707:88","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22795,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22792,"src":"9350:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":22798,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9374:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":22797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9366:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22796,"name":"address","nodeType":"ElementaryTypeName","src":"9366:7:88","typeDescriptions":{}}},"id":22799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9366:10:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9350:26:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22805,"nodeType":"IfStatement","src":"9346:85:88","trueBody":{"id":22804,"nodeType":"Block","src":"9378:53:88","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22801,"name":"InvalidFeeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1014,"src":"9399:19:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9399:21:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22803,"nodeType":"RevertStatement","src":"9392:28:88"}]}},{"expression":{"id":22808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22806,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22368,"src":"9441:13:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22807,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22792,"src":"9457:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9441:28:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":22809,"nodeType":"ExpressionStatement","src":"9441:28:88"},{"eventCall":{"arguments":[{"id":22811,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22792,"src":"9501:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22810,"name":"FeeRecipientSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":989,"src":"9485:15:88","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":22812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9485:29:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22813,"nodeType":"EmitStatement","src":"9480:34:88"}]},"id":22815,"implemented":true,"kind":"function","modifiers":[],"name":"_setFeeRecipient","nameLocation":"8766:16:88","nodeType":"FunctionDefinition","parameters":{"id":22793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22792,"mutability":"mutable","name":"feeRecipient","nameLocation":"8791:12:88","nodeType":"VariableDeclaration","scope":22815,"src":"8783:20:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22791,"name":"address","nodeType":"ElementaryTypeName","src":"8783:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8782:22:88"},"returnParameters":{"id":22794,"nodeType":"ParameterList","parameters":[],"src":"8814:0:88"},"scope":23007,"src":"8757:764:88","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1114],"body":{"id":22832,"nodeType":"Block","src":"9649:86:88","statements":[{"expression":{"id":22826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22824,"name":"_targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22366,"src":"9659:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22825,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22819,"src":"9674:11:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"9659:26:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22827,"nodeType":"ExpressionStatement","src":"9659:26:88"},{"eventCall":{"arguments":[{"id":22829,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22819,"src":"9716:11:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":22828,"name":"TargetTokenSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":984,"src":"9701:14:88","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC20_$10576_$returns$__$","typeString":"function (contract IERC20)"}},"id":22830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9701:27:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22831,"nodeType":"EmitStatement","src":"9696:32:88"}]},"documentation":{"id":22816,"nodeType":"StructuredDocumentation","src":"9527:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"1b66cb00","id":22833,"implemented":true,"kind":"function","modifiers":[{"id":22822,"kind":"modifierInvocation","modifierName":{"id":22821,"name":"onlyFeeRecipientOrGovernance","nameLocations":["9620:28:88"],"nodeType":"IdentifierPath","referencedDeclaration":22386,"src":"9620:28:88"},"nodeType":"ModifierInvocation","src":"9620:28:88"}],"name":"setTargetToken","nameLocation":"9576:14:88","nodeType":"FunctionDefinition","parameters":{"id":22820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22819,"mutability":"mutable","name":"targetToken","nameLocation":"9598:11:88","nodeType":"VariableDeclaration","scope":22833,"src":"9591:18:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":22818,"nodeType":"UserDefinedTypeName","pathNode":{"id":22817,"name":"IERC20","nameLocations":["9591:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"9591:6:88"},"referencedDeclaration":10576,"src":"9591:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"9590:20:88"},"returnParameters":{"id":22823,"nodeType":"ParameterList","parameters":[],"src":"9649:0:88"},"scope":23007,"src":"9567:168:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1121],"body":{"id":22881,"nodeType":"Block","src":"9887:500:88","statements":[{"condition":{"baseExpression":{"id":22842,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22373,"src":"9901:19:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":22844,"indexExpression":{"id":22843,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22837,"src":"9921:17:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9901:38:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22853,"nodeType":"IfStatement","src":"9897:133:88","trueBody":{"id":22852,"nodeType":"Block","src":"9941:89:88","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":22848,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22837,"src":"10000:17:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22847,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9992:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22846,"name":"address","nodeType":"ElementaryTypeName","src":"9992:7:88","typeDescriptions":{}}},"id":22849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9992:26:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22845,"name":"ProtocolFeeBurnerAlreadyAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1030,"src":"9962:29:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":22850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9962:57:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22851,"nodeType":"RevertStatement","src":"9955:64:88"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":22856,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22837,"src":"10167:17:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22855,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10159:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22854,"name":"address","nodeType":"ElementaryTypeName","src":"10159:7:88","typeDescriptions":{}}},"id":22857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10159:26:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":22860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10197:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":22859,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10189:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22858,"name":"address","nodeType":"ElementaryTypeName","src":"10189:7:88","typeDescriptions":{}}},"id":22861,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10189:10:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10159:40:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22867,"nodeType":"IfStatement","src":"10155:104:88","trueBody":{"id":22866,"nodeType":"Block","src":"10201:58:88","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22863,"name":"InvalidProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1020,"src":"10222:24:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10222:26:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22865,"nodeType":"RevertStatement","src":"10215:33:88"}]}},{"expression":{"id":22872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":22868,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22373,"src":"10269:19:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":22870,"indexExpression":{"id":22869,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22837,"src":"10289:17:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10269:38:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":22871,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10310:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"10269:45:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22873,"nodeType":"ExpressionStatement","src":"10269:45:88"},{"eventCall":{"arguments":[{"arguments":[{"id":22877,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22837,"src":"10361:17:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22876,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10353:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22875,"name":"address","nodeType":"ElementaryTypeName","src":"10353:7:88","typeDescriptions":{}}},"id":22878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10353:26:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22874,"name":"ProtocolFeeBurnerAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1006,"src":"10330:22:88","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":22879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10330:50:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22880,"nodeType":"EmitStatement","src":"10325:55:88"}]},"documentation":{"id":22834,"nodeType":"StructuredDocumentation","src":"9741:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"e20c482f","id":22882,"implemented":true,"kind":"function","modifiers":[{"id":22840,"kind":"modifierInvocation","modifierName":{"id":22839,"name":"onlyFeeRecipientOrGovernance","nameLocations":["9858:28:88"],"nodeType":"IdentifierPath","referencedDeclaration":22386,"src":"9858:28:88"},"nodeType":"ModifierInvocation","src":"9858:28:88"}],"name":"addProtocolFeeBurner","nameLocation":"9790:20:88","nodeType":"FunctionDefinition","parameters":{"id":22838,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22837,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"9830:17:88","nodeType":"VariableDeclaration","scope":22882,"src":"9811:36:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":22836,"nodeType":"UserDefinedTypeName","pathNode":{"id":22835,"name":"IProtocolFeeBurner","nameLocations":["9811:18:88"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"9811:18:88"},"referencedDeclaration":948,"src":"9811:18:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"9810:38:88"},"returnParameters":{"id":22841,"nodeType":"ParameterList","parameters":[],"src":"9887:0:88"},"scope":23007,"src":"9781:606:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1128],"body":{"id":22918,"nodeType":"Block","src":"10542:279:88","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":22891,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22373,"src":"10556:19:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":22893,"indexExpression":{"id":22892,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22886,"src":"10576:17:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10556:38:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":22894,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10598:5:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10556:47:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22904,"nodeType":"IfStatement","src":"10552:138:88","trueBody":{"id":22903,"nodeType":"Block","src":"10605:85:88","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":22899,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22886,"src":"10660:17:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22898,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10652:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22897,"name":"address","nodeType":"ElementaryTypeName","src":"10652:7:88","typeDescriptions":{}}},"id":22900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10652:26:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22896,"name":"ProtocolFeeBurnerNotAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1035,"src":"10626:25:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":22901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10626:53:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22902,"nodeType":"RevertStatement","src":"10619:60:88"}]}},{"expression":{"id":22909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":22905,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22373,"src":"10700:19:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":22907,"indexExpression":{"id":22906,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22886,"src":"10720:17:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10700:38:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":22908,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10741:5:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10700:46:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22910,"nodeType":"ExpressionStatement","src":"10700:46:88"},{"eventCall":{"arguments":[{"arguments":[{"id":22914,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22886,"src":"10795:17:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10787:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22912,"name":"address","nodeType":"ElementaryTypeName","src":"10787:7:88","typeDescriptions":{}}},"id":22915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10787:26:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22911,"name":"ProtocolFeeBurnerRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1011,"src":"10762:24:88","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":22916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10762:52:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22917,"nodeType":"EmitStatement","src":"10757:57:88"}]},"documentation":{"id":22883,"nodeType":"StructuredDocumentation","src":"10393:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"b11f061e","id":22919,"implemented":true,"kind":"function","modifiers":[{"id":22889,"kind":"modifierInvocation","modifierName":{"id":22888,"name":"onlyFeeRecipientOrGovernance","nameLocations":["10513:28:88"],"nodeType":"IdentifierPath","referencedDeclaration":22386,"src":"10513:28:88"},"nodeType":"ModifierInvocation","src":"10513:28:88"}],"name":"removeProtocolFeeBurner","nameLocation":"10442:23:88","nodeType":"FunctionDefinition","parameters":{"id":22887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22886,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"10485:17:88","nodeType":"VariableDeclaration","scope":22919,"src":"10466:36:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":22885,"nodeType":"UserDefinedTypeName","pathNode":{"id":22884,"name":"IProtocolFeeBurner","nameLocations":["10466:18:88"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"10466:18:88"},"referencedDeclaration":948,"src":"10466:18:88","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"10465:38:88"},"returnParameters":{"id":22890,"nodeType":"ParameterList","parameters":[],"src":"10542:0:88"},"scope":23007,"src":"10433:388:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1136],"body":{"id":22981,"nodeType":"Block","src":"10945:397:88","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22929,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10959:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10963:6:88","memberName":"sender","nodeType":"MemberAccess","src":"10959:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":22931,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22368,"src":"10973:13:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10959:27:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22937,"nodeType":"IfStatement","src":"10955:83:88","trueBody":{"id":22936,"nodeType":"Block","src":"10988:50:88","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22933,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"11009:16:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11009:18:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22935,"nodeType":"RevertStatement","src":"11002:25:88"}]}},{"body":{"id":22979,"nodeType":"Block","src":"11095:241:88","statements":[{"assignments":[22951],"declarations":[{"constant":false,"id":22951,"mutability":"mutable","name":"feeToken","nameLocation":"11116:8:88","nodeType":"VariableDeclaration","scope":22979,"src":"11109:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":22950,"nodeType":"UserDefinedTypeName","pathNode":{"id":22949,"name":"IERC20","nameLocations":["11109:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"11109:6:88"},"referencedDeclaration":10576,"src":"11109:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"id":22955,"initialValue":{"baseExpression":{"id":22952,"name":"feeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22924,"src":"11127:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":22954,"indexExpression":{"id":22953,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22939,"src":"11137:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11127:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"11109:30:88"},{"assignments":[22957],"declarations":[{"constant":false,"id":22957,"mutability":"mutable","name":"tokenBalance","nameLocation":"11161:12:88","nodeType":"VariableDeclaration","scope":22979,"src":"11153:20:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22956,"name":"uint256","nodeType":"ElementaryTypeName","src":"11153:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22965,"initialValue":{"arguments":[{"arguments":[{"id":22962,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11203:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$23007","typeString":"contract ProtocolFeeSweeper"}],"id":22961,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11195:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22960,"name":"address","nodeType":"ElementaryTypeName","src":"11195:7:88","typeDescriptions":{}}},"id":22963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11195:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22958,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22951,"src":"11176:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11185:9:88","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10533,"src":"11176:18:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":22964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11176:33:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11153:56:88"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22966,"name":"tokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22957,"src":"11228:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":22967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11243:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11228:16:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22978,"nodeType":"IfStatement","src":"11224:102:88","trueBody":{"id":22977,"nodeType":"Block","src":"11246:80:88","statements":[{"expression":{"arguments":[{"expression":{"id":22972,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11286:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11290:6:88","memberName":"sender","nodeType":"MemberAccess","src":"11286:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22974,"name":"tokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22957,"src":"11298:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22969,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22951,"src":"11264:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11273:12:88","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10647,"src":"11264:21:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":22975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11264:47:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22976,"nodeType":"ExpressionStatement","src":"11264:47:88"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22942,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22939,"src":"11068:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":22943,"name":"feeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22924,"src":"11072:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":22944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11082:6:88","memberName":"length","nodeType":"MemberAccess","src":"11072:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11068:20:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22980,"initializationExpression":{"assignments":[22939],"declarations":[{"constant":false,"id":22939,"mutability":"mutable","name":"i","nameLocation":"11061:1:88","nodeType":"VariableDeclaration","scope":22980,"src":"11053:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22938,"name":"uint256","nodeType":"ElementaryTypeName","src":"11053:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22941,"initialValue":{"hexValue":"30","id":22940,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11065:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11053:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":22947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11090:3:88","subExpression":{"id":22946,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22939,"src":"11092:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22948,"nodeType":"ExpressionStatement","src":"11090:3:88"},"nodeType":"ForStatement","src":"11048:288:88"}]},"documentation":{"id":22920,"nodeType":"StructuredDocumentation","src":"10827:35:88","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"b0edcc53","id":22982,"implemented":true,"kind":"function","modifiers":[{"id":22927,"kind":"modifierInvocation","modifierName":{"id":22926,"name":"nonReentrant","nameLocations":["10932:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":6967,"src":"10932:12:88"},"nodeType":"ModifierInvocation","src":"10932:12:88"}],"name":"recoverProtocolFees","nameLocation":"10876:19:88","nodeType":"FunctionDefinition","parameters":{"id":22925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22924,"mutability":"mutable","name":"feeTokens","nameLocation":"10912:9:88","nodeType":"VariableDeclaration","scope":22982,"src":"10896:25:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":22922,"nodeType":"UserDefinedTypeName","pathNode":{"id":22921,"name":"IERC20","nameLocations":["10896:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"10896:6:88"},"referencedDeclaration":10576,"src":"10896:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":22923,"nodeType":"ArrayTypeName","src":"10896:8:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"10895:27:88"},"returnParameters":{"id":22928,"nodeType":"ParameterList","parameters":[],"src":"10945:0:88"},"scope":23007,"src":"10867:475:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":22988,"nodeType":"Block","src":"11824:42:88","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22985,"name":"CannotReceiveEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22363,"src":"11841:16:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11841:18:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22987,"nodeType":"RevertStatement","src":"11834:25:88"}]},"id":22989,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22983,"nodeType":"ParameterList","parameters":[],"src":"11804:2:88"},"returnParameters":{"id":22984,"nodeType":"ParameterList","parameters":[],"src":"11824:0:88"},"scope":23007,"src":"11797:69:88","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":23005,"nodeType":"Block","src":"11944:121:88","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22992,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11958:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11962:5:88","memberName":"value","nodeType":"MemberAccess","src":"11958:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":22994,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11970:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11958:13:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23000,"nodeType":"IfStatement","src":"11954:69:88","trueBody":{"id":22999,"nodeType":"Block","src":"11973:50:88","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22996,"name":"CannotReceiveEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22363,"src":"11994:16:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11994:18:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22998,"nodeType":"RevertStatement","src":"11987:25:88"}]}},{"expression":{"arguments":[{"hexValue":"4e6f7420696d706c656d656e746564","id":23002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12040:17:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_9f5474d7a5849b3f79e8aee7ea2c60bcd36a60a08b4fa41f97e2fccf1c4df98b","typeString":"literal_string \"Not implemented\""},"value":"Not implemented"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9f5474d7a5849b3f79e8aee7ea2c60bcd36a60a08b4fa41f97e2fccf1c4df98b","typeString":"literal_string \"Not implemented\""}],"id":23001,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"12033:6:88","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":23003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12033:25:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23004,"nodeType":"ExpressionStatement","src":"12033:25:88"}]},"id":23006,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22990,"nodeType":"ParameterList","parameters":[],"src":"11924:2:88"},"returnParameters":{"id":22991,"nodeType":"ParameterList","parameters":[],"src":"11944:0:88"},"scope":23007,"src":"11916:149:88","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":23008,"src":"1713:10354:88","usedErrors":[5,1014,1017,1020,1025,1030,1035,1038,1041,6956,7355,10614,22363],"usedEvents":[984,989,1001,1006,1011]}],"src":"46:12022:88"},"id":88},"contracts/TokenPairRegistry.sol":{"ast":{"absolutePath":"contracts/TokenPairRegistry.sol","exportedSymbols":{"EnumerableSet":[6943],"IERC20":[10576],"IERC4626":[9846],"ITokenPairRegistry":[1263],"IVault":[2545],"InputHelpers":[4718],"OwnableAuthentication":[20330],"SwapPathStep":[1275],"TokenPairRegistry":[24017]},"id":24018,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":23009,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:89"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":23011,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24018,"sourceUnit":9847,"src":"72:75:89","symbolAliases":[{"foreign":{"id":23010,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"81:8:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":23013,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24018,"sourceUnit":10577,"src":"148:72:89","symbolAliases":[{"foreign":{"id":23012,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"157:6:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol","id":23015,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24018,"sourceUnit":1264,"src":"222:116:89","symbolAliases":[{"foreign":{"id":23014,"name":"ITokenPairRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1263,"src":"231:18:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol","id":23017,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24018,"sourceUnit":1326,"src":"339:97:89","symbolAliases":[{"foreign":{"id":23016,"name":"SwapPathStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1275,"src":"348:12:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":23019,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24018,"sourceUnit":2546,"src":"437:81:89","symbolAliases":[{"foreign":{"id":23018,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"446:6:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol","id":23021,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24018,"sourceUnit":6944,"src":"520:106:89","symbolAliases":[{"foreign":{"id":23020,"name":"EnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6943,"src":"529:13:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","id":23023,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24018,"sourceUnit":4719,"src":"627:99:89","symbolAliases":[{"foreign":{"id":23022,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4718,"src":"636:12:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/OwnableAuthentication.sol","file":"./OwnableAuthentication.sol","id":23025,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24018,"sourceUnit":20331,"src":"728:68:89","symbolAliases":[{"foreign":{"id":23024,"name":"OwnableAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20330,"src":"737:21:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":23027,"name":"ITokenPairRegistry","nameLocations":["1188:18:89"],"nodeType":"IdentifierPath","referencedDeclaration":1263,"src":"1188:18:89"},"id":23028,"nodeType":"InheritanceSpecifier","src":"1188:18:89"},{"baseName":{"id":23029,"name":"OwnableAuthentication","nameLocations":["1208:21:89"],"nodeType":"IdentifierPath","referencedDeclaration":20330,"src":"1208:21:89"},"id":23030,"nodeType":"InheritanceSpecifier","src":"1208:21:89"}],"canonicalName":"TokenPairRegistry","contractDependencies":[],"contractKind":"contract","documentation":{"id":23026,"nodeType":"StructuredDocumentation","src":"798:359:89","text":" @notice Stores token pair swap paths on-chain, allowing an admin to maintain swap routes.\n @dev The paths are stored as arrays of `SwapPathStep` structs, which contain the pool or buffer\n address, the output token, and a boolean indicating whether the step is a buffer or not.\n Functions that add information to the registry are permissioned."},"fullyImplemented":true,"id":24017,"linearizedBaseContracts":[24017,20330,4385,14,9572,9486,12366,1263],"name":"TokenPairRegistry","nameLocation":"1167:17:89","nodeType":"ContractDefinition","nodes":[{"global":false,"id":23034,"libraryName":{"id":23031,"name":"EnumerableSet","nameLocations":["1242:13:89"],"nodeType":"IdentifierPath","referencedDeclaration":6943,"src":"1242:13:89"},"nodeType":"UsingForDirective","src":"1236:49:89","typeName":{"id":23033,"nodeType":"UserDefinedTypeName","pathNode":{"id":23032,"name":"EnumerableSet.AddressSet","nameLocations":["1260:13:89","1274:10:89"],"nodeType":"IdentifierPath","referencedDeclaration":6665,"src":"1260:24:89"},"referencedDeclaration":6665,"src":"1260:24:89","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6665_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}}},{"constant":false,"id":23041,"mutability":"mutable","name":"_pairsToPaths","nameLocation":"1350:13:89","nodeType":"VariableDeclaration","scope":24017,"src":"1291:72:89","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep[][])"},"typeName":{"id":23040,"keyName":"pairId","keyNameLocation":"1307:6:89","keyType":{"id":23035,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1299:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"1291:49:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep[][])"},"valueName":"paths","valueNameLocation":"1334:5:89","valueType":{"baseType":{"baseType":{"id":23037,"nodeType":"UserDefinedTypeName","pathNode":{"id":23036,"name":"SwapPathStep","nameLocations":["1317:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"1317:12:89"},"referencedDeclaration":1275,"src":"1317:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23038,"nodeType":"ArrayTypeName","src":"1317:14:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":23039,"nodeType":"ArrayTypeName","src":"1317:16:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}}},"visibility":"internal"},{"body":{"id":23053,"nodeType":"Block","src":"1461:64:89","statements":[]},"id":23054,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":23049,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23044,"src":"1440:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},{"id":23050,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23046,"src":"1447:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":23051,"kind":"baseConstructorSpecifier","modifierName":{"id":23048,"name":"OwnableAuthentication","nameLocations":["1418:21:89"],"nodeType":"IdentifierPath","referencedDeclaration":20330,"src":"1418:21:89"},"nodeType":"ModifierInvocation","src":"1418:42:89"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":23047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23044,"mutability":"mutable","name":"vault","nameLocation":"1389:5:89","nodeType":"VariableDeclaration","scope":23054,"src":"1382:12:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":23043,"nodeType":"UserDefinedTypeName","pathNode":{"id":23042,"name":"IVault","nameLocations":["1382:6:89"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1382:6:89"},"referencedDeclaration":2545,"src":"1382:6:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":23046,"mutability":"mutable","name":"initialOwner","nameLocation":"1404:12:89","nodeType":"VariableDeclaration","scope":23054,"src":"1396:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23045,"name":"address","nodeType":"ElementaryTypeName","src":"1396:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1381:36:89"},"returnParameters":{"id":23052,"nodeType":"ParameterList","parameters":[],"src":"1461:0:89"},"scope":24017,"src":"1370:155:89","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1207],"body":{"id":23081,"nodeType":"Block","src":"1685:115:89","statements":[{"assignments":[23069],"declarations":[{"constant":false,"id":23069,"mutability":"mutable","name":"tokenId","nameLocation":"1703:7:89","nodeType":"VariableDeclaration","scope":23081,"src":"1695:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23068,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1695:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23074,"initialValue":{"arguments":[{"id":23071,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23057,"src":"1729:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23072,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23059,"src":"1738:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23070,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23857,"src":"1713:15:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1713:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1695:52:89"},{"expression":{"baseExpression":{"baseExpression":{"id":23075,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23041,"src":"1764:13:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23077,"indexExpression":{"id":23076,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23069,"src":"1778:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1764:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"id":23079,"indexExpression":{"id":23078,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23061,"src":"1787:5:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1764:29:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"functionReturnParameters":23067,"id":23080,"nodeType":"Return","src":"1757:36:89"}]},"documentation":{"id":23055,"nodeType":"StructuredDocumentation","src":"1531:34:89","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"057074ff","id":23082,"implemented":true,"kind":"function","modifiers":[],"name":"getPathAt","nameLocation":"1579:9:89","nodeType":"FunctionDefinition","parameters":{"id":23062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23057,"mutability":"mutable","name":"tokenIn","nameLocation":"1597:7:89","nodeType":"VariableDeclaration","scope":23082,"src":"1589:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23056,"name":"address","nodeType":"ElementaryTypeName","src":"1589:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23059,"mutability":"mutable","name":"tokenOut","nameLocation":"1614:8:89","nodeType":"VariableDeclaration","scope":23082,"src":"1606:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23058,"name":"address","nodeType":"ElementaryTypeName","src":"1606:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23061,"mutability":"mutable","name":"index","nameLocation":"1632:5:89","nodeType":"VariableDeclaration","scope":23082,"src":"1624:13:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23060,"name":"uint256","nodeType":"ElementaryTypeName","src":"1624:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1588:50:89"},"returnParameters":{"id":23067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23066,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23082,"src":"1662:21:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":23064,"nodeType":"UserDefinedTypeName","pathNode":{"id":23063,"name":"SwapPathStep","nameLocations":["1662:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"1662:12:89"},"referencedDeclaration":1275,"src":"1662:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23065,"nodeType":"ArrayTypeName","src":"1662:14:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"}],"src":"1661:23:89"},"scope":24017,"src":"1570:230:89","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1217],"body":{"id":23104,"nodeType":"Block","src":"1934:115:89","statements":[{"assignments":[23093],"declarations":[{"constant":false,"id":23093,"mutability":"mutable","name":"tokenId","nameLocation":"1952:7:89","nodeType":"VariableDeclaration","scope":23104,"src":"1944:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23092,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1944:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23098,"initialValue":{"arguments":[{"id":23095,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23085,"src":"1978:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23096,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23087,"src":"1987:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23094,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23857,"src":"1962:15:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1962:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1944:52:89"},{"expression":{"expression":{"baseExpression":{"id":23099,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23041,"src":"2013:13:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23101,"indexExpression":{"id":23100,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23093,"src":"2027:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2013:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"id":23102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2036:6:89","memberName":"length","nodeType":"MemberAccess","src":"2013:29:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23091,"id":23103,"nodeType":"Return","src":"2006:36:89"}]},"documentation":{"id":23083,"nodeType":"StructuredDocumentation","src":"1806:34:89","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"94ee0a3b","id":23105,"implemented":true,"kind":"function","modifiers":[],"name":"getPathCount","nameLocation":"1854:12:89","nodeType":"FunctionDefinition","parameters":{"id":23088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23085,"mutability":"mutable","name":"tokenIn","nameLocation":"1875:7:89","nodeType":"VariableDeclaration","scope":23105,"src":"1867:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23084,"name":"address","nodeType":"ElementaryTypeName","src":"1867:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23087,"mutability":"mutable","name":"tokenOut","nameLocation":"1892:8:89","nodeType":"VariableDeclaration","scope":23105,"src":"1884:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23086,"name":"address","nodeType":"ElementaryTypeName","src":"1884:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1866:35:89"},"returnParameters":{"id":23091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23090,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23105,"src":"1925:7:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23089,"name":"uint256","nodeType":"ElementaryTypeName","src":"1925:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1924:9:89"},"scope":24017,"src":"1845:204:89","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1230],"body":{"id":23129,"nodeType":"Block","src":"2195:108:89","statements":[{"assignments":[23119],"declarations":[{"constant":false,"id":23119,"mutability":"mutable","name":"tokenId","nameLocation":"2213:7:89","nodeType":"VariableDeclaration","scope":23129,"src":"2205:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23118,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2205:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23124,"initialValue":{"arguments":[{"id":23121,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23108,"src":"2239:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23122,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23110,"src":"2248:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23120,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23857,"src":"2223:15:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2223:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2205:52:89"},{"expression":{"baseExpression":{"id":23125,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23041,"src":"2274:13:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23127,"indexExpression":{"id":23126,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23119,"src":"2288:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2274:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"functionReturnParameters":23117,"id":23128,"nodeType":"Return","src":"2267:29:89"}]},"documentation":{"id":23106,"nodeType":"StructuredDocumentation","src":"2055:34:89","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"7c7d370a","id":23130,"implemented":true,"kind":"function","modifiers":[],"name":"getPaths","nameLocation":"2103:8:89","nodeType":"FunctionDefinition","parameters":{"id":23111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23108,"mutability":"mutable","name":"tokenIn","nameLocation":"2120:7:89","nodeType":"VariableDeclaration","scope":23130,"src":"2112:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23107,"name":"address","nodeType":"ElementaryTypeName","src":"2112:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23110,"mutability":"mutable","name":"tokenOut","nameLocation":"2137:8:89","nodeType":"VariableDeclaration","scope":23130,"src":"2129:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23109,"name":"address","nodeType":"ElementaryTypeName","src":"2129:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2111:35:89"},"returnParameters":{"id":23117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23116,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23130,"src":"2170:23:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep[][]"},"typeName":{"baseType":{"baseType":{"id":23113,"nodeType":"UserDefinedTypeName","pathNode":{"id":23112,"name":"SwapPathStep","nameLocations":["2170:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"2170:12:89"},"referencedDeclaration":1275,"src":"2170:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23114,"nodeType":"ArrayTypeName","src":"2170:14:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":23115,"nodeType":"ArrayTypeName","src":"2170:16:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}},"visibility":"internal"}],"src":"2169:25:89"},"scope":24017,"src":"2094:209:89","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1240],"body":{"id":23279,"nodeType":"Block","src":"2433:980:89","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23142,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23137,"src":"2447:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2453:6:89","memberName":"length","nodeType":"MemberAccess","src":"2447:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":23144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2463:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2447:17:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23150,"nodeType":"IfStatement","src":"2443:66:89","trueBody":{"id":23149,"nodeType":"Block","src":"2466:43:89","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":23146,"name":"EmptyPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1167,"src":"2487:9:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":23147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2487:11:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23148,"nodeType":"RevertStatement","src":"2480:18:89"}]}},{"assignments":[23152],"declarations":[{"constant":false,"id":23152,"mutability":"mutable","name":"tokenOut","nameLocation":"2527:8:89","nodeType":"VariableDeclaration","scope":23279,"src":"2519:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23151,"name":"address","nodeType":"ElementaryTypeName","src":"2519:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":23163,"initialValue":{"arguments":[{"expression":{"baseExpression":{"id":23155,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23137,"src":"2546:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23160,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23156,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23137,"src":"2552:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2558:6:89","memberName":"length","nodeType":"MemberAccess","src":"2552:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2567:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2552:16:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2546:23:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23161,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2570:8:89","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1272,"src":"2546:32:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":23154,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2538:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23153,"name":"address","nodeType":"ElementaryTypeName","src":"2538:7:89","typeDescriptions":{}}},"id":23162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2538:41:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2519:60:89"},{"assignments":[23165],"declarations":[{"constant":false,"id":23165,"mutability":"mutable","name":"tokenId","nameLocation":"2597:7:89","nodeType":"VariableDeclaration","scope":23279,"src":"2589:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23164,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2589:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23170,"initialValue":{"arguments":[{"id":23167,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23133,"src":"2623:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23168,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23152,"src":"2632:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23166,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23857,"src":"2607:15:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2607:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2589:52:89"},{"assignments":[23172],"declarations":[{"constant":false,"id":23172,"mutability":"mutable","name":"stepTokenIn","nameLocation":"2660:11:89","nodeType":"VariableDeclaration","scope":23279,"src":"2652:19:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23171,"name":"address","nodeType":"ElementaryTypeName","src":"2652:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":23174,"initialValue":{"id":23173,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23133,"src":"2674:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2652:29:89"},{"body":{"id":23228,"nodeType":"Block","src":"2734:396:89","statements":[{"assignments":[23188],"declarations":[{"constant":false,"id":23188,"mutability":"mutable","name":"step","nameLocation":"2768:4:89","nodeType":"VariableDeclaration","scope":23228,"src":"2748:24:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep"},"typeName":{"id":23187,"nodeType":"UserDefinedTypeName","pathNode":{"id":23186,"name":"SwapPathStep","nameLocations":["2748:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"2748:12:89"},"referencedDeclaration":1275,"src":"2748:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"visibility":"internal"}],"id":23192,"initialValue":{"baseExpression":{"id":23189,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23137,"src":"2775:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23191,"indexExpression":{"id":23190,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23176,"src":"2781:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2775:8:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"nodeType":"VariableDeclarationStatement","src":"2748:35:89"},{"condition":{"expression":{"id":23193,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23188,"src":"2801:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23194,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2806:8:89","memberName":"isBuffer","nodeType":"MemberAccess","referencedDeclaration":1274,"src":"2801:13:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":23218,"nodeType":"Block","src":"2919:95:89","statements":[{"expression":{"arguments":[{"expression":{"id":23208,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23188,"src":"2952:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23209,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2957:4:89","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1269,"src":"2952:9:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23210,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23172,"src":"2963:11:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":23213,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23188,"src":"2984:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23214,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2989:8:89","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1272,"src":"2984:13:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":23212,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2976:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23211,"name":"address","nodeType":"ElementaryTypeName","src":"2976:7:89","typeDescriptions":{}}},"id":23215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2976:22:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23207,"name":"_checkPoolStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24016,"src":"2937:14:89","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address) view"}},"id":23216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2937:62:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23217,"nodeType":"ExpressionStatement","src":"2937:62:89"}]},"id":23219,"nodeType":"IfStatement","src":"2797:217:89","trueBody":{"id":23206,"nodeType":"Block","src":"2816:97:89","statements":[{"expression":{"arguments":[{"expression":{"id":23196,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23188,"src":"2851:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23197,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2856:4:89","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1269,"src":"2851:9:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23198,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23172,"src":"2862:11:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":23201,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23188,"src":"2883:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23202,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2888:8:89","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1272,"src":"2883:13:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":23200,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2875:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23199,"name":"address","nodeType":"ElementaryTypeName","src":"2875:7:89","typeDescriptions":{}}},"id":23203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2875:22:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23195,"name":"_checkBufferStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23936,"src":"2834:16:89","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address) view"}},"id":23204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2834:64:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23205,"nodeType":"ExpressionStatement","src":"2834:64:89"}]}},{"expression":{"id":23226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23220,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23172,"src":"3083:11:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":23223,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23188,"src":"3105:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23224,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3110:8:89","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1272,"src":"3105:13:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":23222,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3097:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23221,"name":"address","nodeType":"ElementaryTypeName","src":"3097:7:89","typeDescriptions":{}}},"id":23225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3097:22:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3083:36:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":23227,"nodeType":"ExpressionStatement","src":"3083:36:89"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23179,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23176,"src":"2711:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23180,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23137,"src":"2715:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2721:6:89","memberName":"length","nodeType":"MemberAccess","src":"2715:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2711:16:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23229,"initializationExpression":{"assignments":[23176],"declarations":[{"constant":false,"id":23176,"mutability":"mutable","name":"i","nameLocation":"2704:1:89","nodeType":"VariableDeclaration","scope":23229,"src":"2696:9:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23175,"name":"uint256","nodeType":"ElementaryTypeName","src":"2696:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23178,"initialValue":{"hexValue":"30","id":23177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2708:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2696:13:89"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2729:3:89","subExpression":{"id":23183,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23176,"src":"2731:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23185,"nodeType":"ExpressionStatement","src":"2729:3:89"},"nodeType":"ForStatement","src":"2691:439:89"},{"assignments":[23235],"declarations":[{"constant":false,"id":23235,"mutability":"mutable","name":"paths","nameLocation":"3165:5:89","nodeType":"VariableDeclaration","scope":23279,"src":"3140:30:89","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"},"typeName":{"baseType":{"baseType":{"id":23232,"nodeType":"UserDefinedTypeName","pathNode":{"id":23231,"name":"SwapPathStep","nameLocations":["3140:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"3140:12:89"},"referencedDeclaration":1275,"src":"3140:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23233,"nodeType":"ArrayTypeName","src":"3140:14:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":23234,"nodeType":"ArrayTypeName","src":"3140:16:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}},"visibility":"internal"}],"id":23239,"initialValue":{"baseExpression":{"id":23236,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23041,"src":"3173:13:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23238,"indexExpression":{"id":23237,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23165,"src":"3187:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3173:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3140:55:89"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23240,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23235,"src":"3205:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3211:4:89","memberName":"push","nodeType":"MemberAccess","src":"3205:10:89","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$returns$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$attached_to$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$","typeString":"function (struct SwapPathStep storage ref[] storage ref[] storage pointer) returns (struct SwapPathStep storage ref[] storage ref)"}},"id":23243,"isConstant":false,"isLValue":true,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3205:12:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"id":23244,"nodeType":"ExpressionStatement","src":"3205:12:89"},{"body":{"id":23268,"nodeType":"Block","src":"3270:63:89","statements":[{"expression":{"arguments":[{"baseExpression":{"id":23263,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23137,"src":"3313:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23265,"indexExpression":{"id":23264,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23246,"src":"3319:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3313:8:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}],"expression":{"baseExpression":{"id":23256,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23235,"src":"3284:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23261,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23257,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23235,"src":"3290:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3296:6:89","memberName":"length","nodeType":"MemberAccess","src":"3290:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23259,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3305:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3290:16:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3284:23:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"id":23262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3308:4:89","memberName":"push","nodeType":"MemberAccess","src":"3284:28:89","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr_$_t_struct$_SwapPathStep_$1275_storage_$returns$__$attached_to$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr_$","typeString":"function (struct SwapPathStep storage ref[] storage pointer,struct SwapPathStep storage ref)"}},"id":23266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3284:38:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23267,"nodeType":"ExpressionStatement","src":"3284:38:89"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23249,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23246,"src":"3247:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23250,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23137,"src":"3251:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3257:6:89","memberName":"length","nodeType":"MemberAccess","src":"3251:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3247:16:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23269,"initializationExpression":{"assignments":[23246],"declarations":[{"constant":false,"id":23246,"mutability":"mutable","name":"i","nameLocation":"3240:1:89","nodeType":"VariableDeclaration","scope":23269,"src":"3232:9:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23245,"name":"uint256","nodeType":"ElementaryTypeName","src":"3232:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23248,"initialValue":{"hexValue":"30","id":23247,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3244:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3232:13:89"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3265:3:89","subExpression":{"id":23253,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23246,"src":"3267:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23255,"nodeType":"ExpressionStatement","src":"3265:3:89"},"nodeType":"ForStatement","src":"3227:106:89"},{"eventCall":{"arguments":[{"id":23271,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23133,"src":"3357:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23272,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23152,"src":"3366:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":23273,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23041,"src":"3376:13:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23275,"indexExpression":{"id":23274,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23165,"src":"3390:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3376:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"id":23276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3399:6:89","memberName":"length","nodeType":"MemberAccess","src":"3376:29:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23270,"name":"PathAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1150,"src":"3347:9:89","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3347:59:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23278,"nodeType":"EmitStatement","src":"3342:64:89"}]},"documentation":{"id":23131,"nodeType":"StructuredDocumentation","src":"2309:34:89","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"815ca70f","id":23280,"implemented":true,"kind":"function","modifiers":[{"id":23140,"kind":"modifierInvocation","modifierName":{"id":23139,"name":"authenticate","nameLocations":["2420:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"2420:12:89"},"nodeType":"ModifierInvocation","src":"2420:12:89"}],"name":"addPath","nameLocation":"2357:7:89","nodeType":"FunctionDefinition","parameters":{"id":23138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23133,"mutability":"mutable","name":"tokenIn","nameLocation":"2373:7:89","nodeType":"VariableDeclaration","scope":23280,"src":"2365:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23132,"name":"address","nodeType":"ElementaryTypeName","src":"2365:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23137,"mutability":"mutable","name":"steps","nameLocation":"2404:5:89","nodeType":"VariableDeclaration","scope":23280,"src":"2382:27:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":23135,"nodeType":"UserDefinedTypeName","pathNode":{"id":23134,"name":"SwapPathStep","nameLocations":["2382:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"2382:12:89"},"referencedDeclaration":1275,"src":"2382:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23136,"nodeType":"ArrayTypeName","src":"2382:14:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"}],"src":"2364:46:89"},"returnParameters":{"id":23141,"nodeType":"ParameterList","parameters":[],"src":"2433:0:89"},"scope":24017,"src":"2348:1065:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1246],"body":{"id":23317,"nodeType":"Block","src":"3525:301:89","statements":[{"condition":{"arguments":[{"id":23290,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23283,"src":"3562:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23288,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"3539:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3545:16:89","memberName":"isPoolRegistered","nodeType":"MemberAccess","referencedDeclaration":3540,"src":"3539:22:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":23291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3539:36:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"arguments":[{"arguments":[{"id":23300,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23283,"src":"3676:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23299,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"3667:8:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9846_$","typeString":"type(contract IERC4626)"}},"id":23301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3667:22:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"expression":{"id":23297,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"3634:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3640:26:89","memberName":"isERC4626BufferInitialized","nodeType":"MemberAccess","referencedDeclaration":3728,"src":"3634:32:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_IERC4626_$9846_$returns$_t_bool_$","typeString":"function (contract IERC4626) view external returns (bool)"}},"id":23302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3634:56:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":23314,"nodeType":"Block","src":"3757:63:89","statements":[{"errorCall":{"arguments":[{"id":23311,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23283,"src":"3796:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23310,"name":"InvalidSimplePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1172,"src":"3778:17:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":23312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3778:31:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23313,"nodeType":"RevertStatement","src":"3771:38:89"}]},"id":23315,"nodeType":"IfStatement","src":"3630:190:89","trueBody":{"id":23309,"nodeType":"Block","src":"3692:59:89","statements":[{"expression":{"arguments":[{"arguments":[{"id":23305,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23283,"src":"3726:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23304,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"3717:8:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9846_$","typeString":"type(contract IERC4626)"}},"id":23306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3717:22:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"id":23303,"name":"_addBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23527,"src":"3706:10:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC4626_$9846_$returns$__$","typeString":"function (contract IERC4626)"}},"id":23307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3706:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23308,"nodeType":"ExpressionStatement","src":"3706:34:89"}]}},"id":23316,"nodeType":"IfStatement","src":"3535:285:89","trueBody":{"id":23296,"nodeType":"Block","src":"3577:47:89","statements":[{"expression":{"arguments":[{"id":23293,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23283,"src":"3600:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23292,"name":"_addPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23499,"src":"3591:8:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":23294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3591:22:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23295,"nodeType":"ExpressionStatement","src":"3591:22:89"}]}}]},"documentation":{"id":23281,"nodeType":"StructuredDocumentation","src":"3419:34:89","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"f335b520","id":23318,"implemented":true,"kind":"function","modifiers":[{"id":23286,"kind":"modifierInvocation","modifierName":{"id":23285,"name":"authenticate","nameLocations":["3512:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"3512:12:89"},"nodeType":"ModifierInvocation","src":"3512:12:89"}],"name":"addSimplePath","nameLocation":"3467:13:89","nodeType":"FunctionDefinition","parameters":{"id":23284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23283,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"3489:12:89","nodeType":"VariableDeclaration","scope":23318,"src":"3481:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23282,"name":"address","nodeType":"ElementaryTypeName","src":"3481:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3480:22:89"},"returnParameters":{"id":23287,"nodeType":"ParameterList","parameters":[],"src":"3525:0:89"},"scope":24017,"src":"3458:368:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1256],"body":{"id":23393,"nodeType":"Block","src":"3970:583:89","statements":[{"assignments":[23331],"declarations":[{"constant":false,"id":23331,"mutability":"mutable","name":"tokenId","nameLocation":"3988:7:89","nodeType":"VariableDeclaration","scope":23393,"src":"3980:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23330,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3980:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23336,"initialValue":{"arguments":[{"id":23333,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23321,"src":"4014:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23334,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23323,"src":"4023:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23332,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23857,"src":"3998:15:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3998:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3980:52:89"},{"assignments":[23342],"declarations":[{"constant":false,"id":23342,"mutability":"mutable","name":"paths","nameLocation":"4067:5:89","nodeType":"VariableDeclaration","scope":23393,"src":"4042:30:89","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"},"typeName":{"baseType":{"baseType":{"id":23339,"nodeType":"UserDefinedTypeName","pathNode":{"id":23338,"name":"SwapPathStep","nameLocations":["4042:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"4042:12:89"},"referencedDeclaration":1275,"src":"4042:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23340,"nodeType":"ArrayTypeName","src":"4042:14:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":23341,"nodeType":"ArrayTypeName","src":"4042:16:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}},"visibility":"internal"}],"id":23346,"initialValue":{"baseExpression":{"id":23343,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23041,"src":"4075:13:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23345,"indexExpression":{"id":23344,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23331,"src":"4089:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4075:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"4042:55:89"},{"assignments":[23348],"declarations":[{"constant":false,"id":23348,"mutability":"mutable","name":"pathsLength","nameLocation":"4115:11:89","nodeType":"VariableDeclaration","scope":23393,"src":"4107:19:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23347,"name":"uint256","nodeType":"ElementaryTypeName","src":"4107:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23351,"initialValue":{"expression":{"id":23349,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23342,"src":"4129:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4135:6:89","memberName":"length","nodeType":"MemberAccess","src":"4129:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4107:34:89"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23352,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23325,"src":"4156:5:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":23353,"name":"pathsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23348,"src":"4165:11:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4156:20:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23359,"nodeType":"IfStatement","src":"4152:76:89","trueBody":{"id":23358,"nodeType":"Block","src":"4178:50:89","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":23355,"name":"IndexOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1193,"src":"4199:16:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":23356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4199:18:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23357,"nodeType":"RevertStatement","src":"4192:25:89"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23360,"name":"pathsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23348,"src":"4242:11:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":23361,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4256:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4242:15:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23363,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23325,"src":"4261:5:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23364,"name":"pathsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23348,"src":"4270:11:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23365,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4284:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4270:15:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4261:24:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4242:43:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23380,"nodeType":"IfStatement","src":"4238:111:89","trueBody":{"id":23379,"nodeType":"Block","src":"4287:62:89","statements":[{"expression":{"id":23377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":23369,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23342,"src":"4301:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23371,"indexExpression":{"id":23370,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23325,"src":"4307:5:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4301:12:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":23372,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23342,"src":"4316:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23376,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23373,"name":"pathsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23348,"src":"4322:11:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23374,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4336:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4322:15:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4316:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"src":"4301:37:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"id":23378,"nodeType":"ExpressionStatement","src":"4301:37:89"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23381,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23342,"src":"4475:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4481:3:89","memberName":"pop","nodeType":"MemberAccess","src":"4475:9:89","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$","typeString":"function (struct SwapPathStep storage ref[] storage ref[] storage pointer)"}},"id":23384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4475:11:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23385,"nodeType":"ExpressionStatement","src":"4475:11:89"},{"eventCall":{"arguments":[{"id":23387,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23321,"src":"4514:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23388,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23323,"src":"4523:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":23389,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23342,"src":"4533:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4539:6:89","memberName":"length","nodeType":"MemberAccess","src":"4533:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23386,"name":"PathRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1159,"src":"4502:11:89","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23391,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4502:44:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23392,"nodeType":"EmitStatement","src":"4497:49:89"}]},"documentation":{"id":23319,"nodeType":"StructuredDocumentation","src":"3832:34:89","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"32fffdbd","id":23394,"implemented":true,"kind":"function","modifiers":[{"id":23328,"kind":"modifierInvocation","modifierName":{"id":23327,"name":"authenticate","nameLocations":["3957:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"3957:12:89"},"nodeType":"ModifierInvocation","src":"3957:12:89"}],"name":"removePathAtIndex","nameLocation":"3880:17:89","nodeType":"FunctionDefinition","parameters":{"id":23326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23321,"mutability":"mutable","name":"tokenIn","nameLocation":"3906:7:89","nodeType":"VariableDeclaration","scope":23394,"src":"3898:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23320,"name":"address","nodeType":"ElementaryTypeName","src":"3898:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23323,"mutability":"mutable","name":"tokenOut","nameLocation":"3923:8:89","nodeType":"VariableDeclaration","scope":23394,"src":"3915:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23322,"name":"address","nodeType":"ElementaryTypeName","src":"3915:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23325,"mutability":"mutable","name":"index","nameLocation":"3941:5:89","nodeType":"VariableDeclaration","scope":23394,"src":"3933:13:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23324,"name":"uint256","nodeType":"ElementaryTypeName","src":"3933:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3897:50:89"},"returnParameters":{"id":23329,"nodeType":"ParameterList","parameters":[],"src":"3970:0:89"},"scope":24017,"src":"3871:682:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1262],"body":{"id":23431,"nodeType":"Block","src":"4668:307:89","statements":[{"condition":{"arguments":[{"id":23404,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23397,"src":"4705:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23402,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"4682:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4688:16:89","memberName":"isPoolRegistered","nodeType":"MemberAccess","referencedDeclaration":3540,"src":"4682:22:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":23405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4682:36:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"arguments":[{"arguments":[{"id":23414,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23397,"src":"4822:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23413,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"4813:8:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9846_$","typeString":"type(contract IERC4626)"}},"id":23415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4813:22:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"expression":{"id":23411,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"4780:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4786:26:89","memberName":"isERC4626BufferInitialized","nodeType":"MemberAccess","referencedDeclaration":3728,"src":"4780:32:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_IERC4626_$9846_$returns$_t_bool_$","typeString":"function (contract IERC4626) view external returns (bool)"}},"id":23416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4780:56:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":23428,"nodeType":"Block","src":"4906:63:89","statements":[{"errorCall":{"arguments":[{"id":23425,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23397,"src":"4945:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23424,"name":"InvalidSimplePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1172,"src":"4927:17:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":23426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4927:31:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23427,"nodeType":"RevertStatement","src":"4920:38:89"}]},"id":23429,"nodeType":"IfStatement","src":"4776:193:89","trueBody":{"id":23423,"nodeType":"Block","src":"4838:62:89","statements":[{"expression":{"arguments":[{"arguments":[{"id":23419,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23397,"src":"4875:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23418,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"4866:8:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9846_$","typeString":"type(contract IERC4626)"}},"id":23420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4866:22:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"id":23417,"name":"_removeBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23839,"src":"4852:13:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC4626_$9846_$returns$__$","typeString":"function (contract IERC4626)"}},"id":23421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4852:37:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23422,"nodeType":"ExpressionStatement","src":"4852:37:89"}]}},"id":23430,"nodeType":"IfStatement","src":"4678:291:89","trueBody":{"id":23410,"nodeType":"Block","src":"4720:50:89","statements":[{"expression":{"arguments":[{"id":23407,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23397,"src":"4746:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23406,"name":"_removePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23683,"src":"4734:11:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":23408,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4734:25:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23409,"nodeType":"ExpressionStatement","src":"4734:25:89"}]}}]},"documentation":{"id":23395,"nodeType":"StructuredDocumentation","src":"4559:34:89","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"bc138aa3","id":23432,"implemented":true,"kind":"function","modifiers":[{"id":23400,"kind":"modifierInvocation","modifierName":{"id":23399,"name":"authenticate","nameLocations":["4655:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"4655:12:89"},"nodeType":"ModifierInvocation","src":"4655:12:89"}],"name":"removeSimplePath","nameLocation":"4607:16:89","nodeType":"FunctionDefinition","parameters":{"id":23398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23397,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"4632:12:89","nodeType":"VariableDeclaration","scope":23432,"src":"4624:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23396,"name":"address","nodeType":"ElementaryTypeName","src":"4624:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4623:22:89"},"returnParameters":{"id":23401,"nodeType":"ParameterList","parameters":[],"src":"4668:0:89"},"scope":24017,"src":"4598:377:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":23498,"nodeType":"Block","src":"5022:337:89","statements":[{"assignments":[23441],"declarations":[{"constant":false,"id":23441,"mutability":"mutable","name":"tokens","nameLocation":"5048:6:89","nodeType":"VariableDeclaration","scope":23498,"src":"5032:22:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":23439,"nodeType":"UserDefinedTypeName","pathNode":{"id":23438,"name":"IERC20","nameLocations":["5032:6:89"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"5032:6:89"},"referencedDeclaration":10576,"src":"5032:6:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":23440,"nodeType":"ArrayTypeName","src":"5032:8:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":23446,"initialValue":{"arguments":[{"id":23444,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23434,"src":"5077:4:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23442,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"5057:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5063:13:89","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":3579,"src":"5057:19:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":23445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5057:25:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"5032:50:89"},{"assignments":[23448],"declarations":[{"constant":false,"id":23448,"mutability":"mutable","name":"tokenPairs","nameLocation":"5101:10:89","nodeType":"VariableDeclaration","scope":23498,"src":"5093:18:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23447,"name":"uint256","nodeType":"ElementaryTypeName","src":"5093:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23453,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23449,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23441,"src":"5114:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5121:6:89","memberName":"length","nodeType":"MemberAccess","src":"5114:13:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23451,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5130:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5114:17:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5093:38:89"},{"body":{"id":23496,"nodeType":"Block","src":"5182:171:89","statements":[{"body":{"id":23494,"nodeType":"Block","src":"5244:99:89","statements":[{"expression":{"arguments":[{"id":23478,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23434,"src":"5276:4:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":23481,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23441,"src":"5290:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23483,"indexExpression":{"id":23482,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23455,"src":"5297:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5290:9:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":23480,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5282:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23479,"name":"address","nodeType":"ElementaryTypeName","src":"5282:7:89","typeDescriptions":{}}},"id":23484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5282:18:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":23487,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23441,"src":"5310:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23489,"indexExpression":{"id":23488,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23465,"src":"5317:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5310:9:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":23486,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5302:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23485,"name":"address","nodeType":"ElementaryTypeName","src":"5302:7:89","typeDescriptions":{}}},"id":23490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5302:18:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"66616c7365","id":23491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5322:5:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23477,"name":"_addTokenPair","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23553,"src":"5262:13:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,address,bool)"}},"id":23492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5262:66:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23493,"nodeType":"ExpressionStatement","src":"5262:66:89"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23470,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23465,"src":"5220:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23471,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23441,"src":"5224:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5231:6:89","memberName":"length","nodeType":"MemberAccess","src":"5224:13:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5220:17:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23495,"initializationExpression":{"assignments":[23465],"declarations":[{"constant":false,"id":23465,"mutability":"mutable","name":"j","nameLocation":"5209:1:89","nodeType":"VariableDeclaration","scope":23495,"src":"5201:9:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23464,"name":"uint256","nodeType":"ElementaryTypeName","src":"5201:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23469,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23466,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23455,"src":"5213:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":23467,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5217:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5213:5:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5201:17:89"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5239:3:89","subExpression":{"id":23474,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23465,"src":"5241:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23476,"nodeType":"ExpressionStatement","src":"5239:3:89"},"nodeType":"ForStatement","src":"5196:147:89"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23458,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23455,"src":"5161:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":23459,"name":"tokenPairs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23448,"src":"5165:10:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5161:14:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23497,"initializationExpression":{"assignments":[23455],"declarations":[{"constant":false,"id":23455,"mutability":"mutable","name":"i","nameLocation":"5154:1:89","nodeType":"VariableDeclaration","scope":23497,"src":"5146:9:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23454,"name":"uint256","nodeType":"ElementaryTypeName","src":"5146:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23457,"initialValue":{"hexValue":"30","id":23456,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5158:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5146:13:89"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5177:3:89","subExpression":{"id":23461,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23455,"src":"5179:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23463,"nodeType":"ExpressionStatement","src":"5177:3:89"},"nodeType":"ForStatement","src":"5141:212:89"}]},"id":23499,"implemented":true,"kind":"function","modifiers":[],"name":"_addPool","nameLocation":"4990:8:89","nodeType":"FunctionDefinition","parameters":{"id":23435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23434,"mutability":"mutable","name":"pool","nameLocation":"5007:4:89","nodeType":"VariableDeclaration","scope":23499,"src":"4999:12:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23433,"name":"address","nodeType":"ElementaryTypeName","src":"4999:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4998:14:89"},"returnParameters":{"id":23436,"nodeType":"ParameterList","parameters":[],"src":"5022:0:89"},"scope":24017,"src":"4981:378:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23526,"nodeType":"Block","src":"5493:169:89","statements":[{"assignments":[23507],"declarations":[{"constant":false,"id":23507,"mutability":"mutable","name":"underlyingToken","nameLocation":"5511:15:89","nodeType":"VariableDeclaration","scope":23526,"src":"5503:23:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23506,"name":"address","nodeType":"ElementaryTypeName","src":"5503:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":23512,"initialValue":{"arguments":[{"id":23510,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23503,"src":"5550:12:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"expression":{"id":23508,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"5529:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5535:14:89","memberName":"getBufferAsset","nodeType":"MemberAccess","referencedDeclaration":2796,"src":"5529:20:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_IERC4626_$9846_$returns$_t_address_$","typeString":"function (contract IERC4626) view external returns (address)"}},"id":23511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5529:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5503:60:89"},{"expression":{"arguments":[{"arguments":[{"id":23516,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23503,"src":"5595:12:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"id":23515,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5587:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23514,"name":"address","nodeType":"ElementaryTypeName","src":"5587:7:89","typeDescriptions":{}}},"id":23517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5587:21:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23518,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23507,"src":"5610:15:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":23521,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23503,"src":"5635:12:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"id":23520,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5627:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23519,"name":"address","nodeType":"ElementaryTypeName","src":"5627:7:89","typeDescriptions":{}}},"id":23522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5627:21:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"74727565","id":23523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5650:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23513,"name":"_addTokenPair","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23553,"src":"5573:13:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,address,bool)"}},"id":23524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5573:82:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23525,"nodeType":"ExpressionStatement","src":"5573:82:89"}]},"documentation":{"id":23500,"nodeType":"StructuredDocumentation","src":"5365:71:89","text":"@dev Always wrap, as long as it's a registered buffer in the Vault."},"id":23527,"implemented":true,"kind":"function","modifiers":[],"name":"_addBuffer","nameLocation":"5450:10:89","nodeType":"FunctionDefinition","parameters":{"id":23504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23503,"mutability":"mutable","name":"wrappedToken","nameLocation":"5470:12:89","nodeType":"VariableDeclaration","scope":23527,"src":"5461:21:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":23502,"nodeType":"UserDefinedTypeName","pathNode":{"id":23501,"name":"IERC4626","nameLocations":["5461:8:89"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"5461:8:89"},"referencedDeclaration":9846,"src":"5461:8:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"5460:23:89"},"returnParameters":{"id":23505,"nodeType":"ParameterList","parameters":[],"src":"5493:0:89"},"scope":24017,"src":"5441:221:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23552,"nodeType":"Block","src":"5769:143:89","statements":[{"expression":{"arguments":[{"id":23539,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23529,"src":"5798:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23540,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23531,"src":"5812:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23541,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23533,"src":"5820:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23542,"name":"isBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23535,"src":"5828:8:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23538,"name":"_addSimplePairStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23617,"src":"5779:18:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,address,bool)"}},"id":23543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5779:58:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23544,"nodeType":"ExpressionStatement","src":"5779:58:89"},{"expression":{"arguments":[{"id":23546,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23529,"src":"5866:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23547,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23533,"src":"5880:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23548,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23531,"src":"5888:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23549,"name":"isBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23535,"src":"5896:8:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23545,"name":"_addSimplePairStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23617,"src":"5847:18:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,address,bool)"}},"id":23550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5847:58:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23551,"nodeType":"ExpressionStatement","src":"5847:58:89"}]},"id":23553,"implemented":true,"kind":"function","modifiers":[],"name":"_addTokenPair","nameLocation":"5677:13:89","nodeType":"FunctionDefinition","parameters":{"id":23536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23529,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"5699:12:89","nodeType":"VariableDeclaration","scope":23553,"src":"5691:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23528,"name":"address","nodeType":"ElementaryTypeName","src":"5691:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23531,"mutability":"mutable","name":"tokenA","nameLocation":"5721:6:89","nodeType":"VariableDeclaration","scope":23553,"src":"5713:14:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23530,"name":"address","nodeType":"ElementaryTypeName","src":"5713:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23533,"mutability":"mutable","name":"tokenB","nameLocation":"5737:6:89","nodeType":"VariableDeclaration","scope":23553,"src":"5729:14:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23532,"name":"address","nodeType":"ElementaryTypeName","src":"5729:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23535,"mutability":"mutable","name":"isBuffer","nameLocation":"5750:8:89","nodeType":"VariableDeclaration","scope":23553,"src":"5745:13:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23534,"name":"bool","nodeType":"ElementaryTypeName","src":"5745:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5690:69:89"},"returnParameters":{"id":23537,"nodeType":"ParameterList","parameters":[],"src":"5769:0:89"},"scope":24017,"src":"5668:244:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23616,"nodeType":"Block","src":"6027:396:89","statements":[{"assignments":[23565],"declarations":[{"constant":false,"id":23565,"mutability":"mutable","name":"tokenId","nameLocation":"6045:7:89","nodeType":"VariableDeclaration","scope":23616,"src":"6037:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23564,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6037:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23570,"initialValue":{"arguments":[{"id":23567,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23557,"src":"6071:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23568,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23559,"src":"6080:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23566,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23857,"src":"6055:15:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6055:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6037:52:89"},{"assignments":[23573],"declarations":[{"constant":false,"id":23573,"mutability":"mutable","name":"step","nameLocation":"6119:4:89","nodeType":"VariableDeclaration","scope":23616,"src":"6099:24:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep"},"typeName":{"id":23572,"nodeType":"UserDefinedTypeName","pathNode":{"id":23571,"name":"SwapPathStep","nameLocations":["6099:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"6099:12:89"},"referencedDeclaration":1275,"src":"6099:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"visibility":"internal"}],"id":23581,"initialValue":{"arguments":[{"id":23575,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23555,"src":"6147:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":23577,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23559,"src":"6178:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23576,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"6171:6:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10576_$","typeString":"type(contract IERC20)"}},"id":23578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6171:16:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":23579,"name":"isBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23561,"src":"6199:8:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23574,"name":"SwapPathStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1275,"src":"6126:12:89","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_SwapPathStep_$1275_storage_ptr_$","typeString":"type(struct SwapPathStep storage pointer)"}},"id":23580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["6141:4:89","6161:8:89","6189:8:89"],"names":["pool","tokenOut","isBuffer"],"nodeType":"FunctionCall","src":"6126:84:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"nodeType":"VariableDeclarationStatement","src":"6099:111:89"},{"assignments":[23587],"declarations":[{"constant":false,"id":23587,"mutability":"mutable","name":"paths","nameLocation":"6246:5:89","nodeType":"VariableDeclaration","scope":23616,"src":"6221:30:89","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"},"typeName":{"baseType":{"baseType":{"id":23584,"nodeType":"UserDefinedTypeName","pathNode":{"id":23583,"name":"SwapPathStep","nameLocations":["6221:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"6221:12:89"},"referencedDeclaration":1275,"src":"6221:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23585,"nodeType":"ArrayTypeName","src":"6221:14:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":23586,"nodeType":"ArrayTypeName","src":"6221:16:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}},"visibility":"internal"}],"id":23591,"initialValue":{"baseExpression":{"id":23588,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23041,"src":"6254:13:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23590,"indexExpression":{"id":23589,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23565,"src":"6268:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6254:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"6221:55:89"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23592,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23587,"src":"6286:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6292:4:89","memberName":"push","nodeType":"MemberAccess","src":"6286:10:89","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$returns$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$attached_to$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$","typeString":"function (struct SwapPathStep storage ref[] storage ref[] storage pointer) returns (struct SwapPathStep storage ref[] storage ref)"}},"id":23595,"isConstant":false,"isLValue":true,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6286:12:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"id":23596,"nodeType":"ExpressionStatement","src":"6286:12:89"},{"expression":{"arguments":[{"id":23604,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23573,"src":"6337:4:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}],"expression":{"baseExpression":{"id":23597,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23587,"src":"6308:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23602,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23598,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23587,"src":"6314:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6320:6:89","memberName":"length","nodeType":"MemberAccess","src":"6314:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6329:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6314:16:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6308:23:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"id":23603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6332:4:89","memberName":"push","nodeType":"MemberAccess","src":"6308:28:89","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr_$_t_struct$_SwapPathStep_$1275_storage_$returns$__$attached_to$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr_$","typeString":"function (struct SwapPathStep storage ref[] storage pointer,struct SwapPathStep storage ref)"}},"id":23605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6308:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23606,"nodeType":"ExpressionStatement","src":"6308:34:89"},{"eventCall":{"arguments":[{"id":23608,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23557,"src":"6367:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23609,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23559,"src":"6376:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":23610,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23041,"src":"6386:13:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23612,"indexExpression":{"id":23611,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23565,"src":"6400:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6386:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"id":23613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6409:6:89","memberName":"length","nodeType":"MemberAccess","src":"6386:29:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23607,"name":"PathAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1150,"src":"6357:9:89","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6357:59:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23615,"nodeType":"EmitStatement","src":"6352:64:89"}]},"id":23617,"implemented":true,"kind":"function","modifiers":[],"name":"_addSimplePairStep","nameLocation":"5927:18:89","nodeType":"FunctionDefinition","parameters":{"id":23562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23555,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"5954:12:89","nodeType":"VariableDeclaration","scope":23617,"src":"5946:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23554,"name":"address","nodeType":"ElementaryTypeName","src":"5946:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23557,"mutability":"mutable","name":"tokenIn","nameLocation":"5976:7:89","nodeType":"VariableDeclaration","scope":23617,"src":"5968:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23556,"name":"address","nodeType":"ElementaryTypeName","src":"5968:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23559,"mutability":"mutable","name":"tokenOut","nameLocation":"5993:8:89","nodeType":"VariableDeclaration","scope":23617,"src":"5985:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23558,"name":"address","nodeType":"ElementaryTypeName","src":"5985:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23561,"mutability":"mutable","name":"isBuffer","nameLocation":"6008:8:89","nodeType":"VariableDeclaration","scope":23617,"src":"6003:13:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23560,"name":"bool","nodeType":"ElementaryTypeName","src":"6003:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5945:72:89"},"returnParameters":{"id":23563,"nodeType":"ParameterList","parameters":[],"src":"6027:0:89"},"scope":24017,"src":"5918:505:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23682,"nodeType":"Block","src":"6473:333:89","statements":[{"assignments":[23626],"declarations":[{"constant":false,"id":23626,"mutability":"mutable","name":"tokens","nameLocation":"6499:6:89","nodeType":"VariableDeclaration","scope":23682,"src":"6483:22:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":23624,"nodeType":"UserDefinedTypeName","pathNode":{"id":23623,"name":"IERC20","nameLocations":["6483:6:89"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"6483:6:89"},"referencedDeclaration":10576,"src":"6483:6:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":23625,"nodeType":"ArrayTypeName","src":"6483:8:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":23631,"initialValue":{"arguments":[{"id":23629,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23619,"src":"6528:4:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23627,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"6508:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6514:13:89","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":3579,"src":"6508:19:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":23630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6508:25:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"6483:50:89"},{"assignments":[23633],"declarations":[{"constant":false,"id":23633,"mutability":"mutable","name":"tokenPairs","nameLocation":"6552:10:89","nodeType":"VariableDeclaration","scope":23682,"src":"6544:18:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23632,"name":"uint256","nodeType":"ElementaryTypeName","src":"6544:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23638,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23634,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23626,"src":"6565:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6572:6:89","memberName":"length","nodeType":"MemberAccess","src":"6565:13:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23636,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6581:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6565:17:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6544:38:89"},{"body":{"id":23680,"nodeType":"Block","src":"6633:167:89","statements":[{"body":{"id":23678,"nodeType":"Block","src":"6695:95:89","statements":[{"expression":{"arguments":[{"id":23663,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23619,"src":"6730:4:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":23666,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23626,"src":"6744:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23668,"indexExpression":{"id":23667,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23640,"src":"6751:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6744:9:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":23665,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6736:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23664,"name":"address","nodeType":"ElementaryTypeName","src":"6736:7:89","typeDescriptions":{}}},"id":23669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6736:18:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":23672,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23626,"src":"6764:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23674,"indexExpression":{"id":23673,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23650,"src":"6771:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6764:9:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":23671,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6756:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23670,"name":"address","nodeType":"ElementaryTypeName","src":"6756:7:89","typeDescriptions":{}}},"id":23675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6756:18:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23662,"name":"_removeTokenPair","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23705,"src":"6713:16:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":23676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6713:62:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23677,"nodeType":"ExpressionStatement","src":"6713:62:89"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23655,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23650,"src":"6671:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23656,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23626,"src":"6675:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6682:6:89","memberName":"length","nodeType":"MemberAccess","src":"6675:13:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6671:17:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23679,"initializationExpression":{"assignments":[23650],"declarations":[{"constant":false,"id":23650,"mutability":"mutable","name":"j","nameLocation":"6660:1:89","nodeType":"VariableDeclaration","scope":23679,"src":"6652:9:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23649,"name":"uint256","nodeType":"ElementaryTypeName","src":"6652:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23654,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23651,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23640,"src":"6664:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":23652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6668:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6664:5:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6652:17:89"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"6690:3:89","subExpression":{"id":23659,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23650,"src":"6692:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23661,"nodeType":"ExpressionStatement","src":"6690:3:89"},"nodeType":"ForStatement","src":"6647:143:89"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23643,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23640,"src":"6612:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":23644,"name":"tokenPairs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23633,"src":"6616:10:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6612:14:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23681,"initializationExpression":{"assignments":[23640],"declarations":[{"constant":false,"id":23640,"mutability":"mutable","name":"i","nameLocation":"6605:1:89","nodeType":"VariableDeclaration","scope":23681,"src":"6597:9:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23639,"name":"uint256","nodeType":"ElementaryTypeName","src":"6597:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23642,"initialValue":{"hexValue":"30","id":23641,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6609:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6597:13:89"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"6628:3:89","subExpression":{"id":23646,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23640,"src":"6630:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23648,"nodeType":"ExpressionStatement","src":"6628:3:89"},"nodeType":"ForStatement","src":"6592:208:89"}]},"id":23683,"implemented":true,"kind":"function","modifiers":[],"name":"_removePool","nameLocation":"6438:11:89","nodeType":"FunctionDefinition","parameters":{"id":23620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23619,"mutability":"mutable","name":"pool","nameLocation":"6458:4:89","nodeType":"VariableDeclaration","scope":23683,"src":"6450:12:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23618,"name":"address","nodeType":"ElementaryTypeName","src":"6450:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6449:14:89"},"returnParameters":{"id":23621,"nodeType":"ParameterList","parameters":[],"src":"6473:0:89"},"scope":24017,"src":"6429:377:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23704,"nodeType":"Block","src":"6901:129:89","statements":[{"expression":{"arguments":[{"id":23693,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23685,"src":"6933:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23694,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23687,"src":"6947:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23695,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23689,"src":"6955:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23692,"name":"_removeSimplePairStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"6911:21:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":23696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6911:51:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23697,"nodeType":"ExpressionStatement","src":"6911:51:89"},{"expression":{"arguments":[{"id":23699,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23685,"src":"6994:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23700,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23689,"src":"7008:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23701,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23687,"src":"7016:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23698,"name":"_removeSimplePairStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23813,"src":"6972:21:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":23702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6972:51:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23703,"nodeType":"ExpressionStatement","src":"6972:51:89"}]},"id":23705,"implemented":true,"kind":"function","modifiers":[],"name":"_removeTokenPair","nameLocation":"6821:16:89","nodeType":"FunctionDefinition","parameters":{"id":23690,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23685,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"6846:12:89","nodeType":"VariableDeclaration","scope":23705,"src":"6838:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23684,"name":"address","nodeType":"ElementaryTypeName","src":"6838:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23687,"mutability":"mutable","name":"tokenA","nameLocation":"6868:6:89","nodeType":"VariableDeclaration","scope":23705,"src":"6860:14:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23686,"name":"address","nodeType":"ElementaryTypeName","src":"6860:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23689,"mutability":"mutable","name":"tokenB","nameLocation":"6884:6:89","nodeType":"VariableDeclaration","scope":23705,"src":"6876:14:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23688,"name":"address","nodeType":"ElementaryTypeName","src":"6876:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6837:54:89"},"returnParameters":{"id":23691,"nodeType":"ParameterList","parameters":[],"src":"6901:0:89"},"scope":24017,"src":"6812:218:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23812,"nodeType":"Block","src":"7133:1025:89","statements":[{"assignments":[23715],"declarations":[{"constant":false,"id":23715,"mutability":"mutable","name":"tokenId","nameLocation":"7151:7:89","nodeType":"VariableDeclaration","scope":23812,"src":"7143:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23714,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7143:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23720,"initialValue":{"arguments":[{"id":23717,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23709,"src":"7177:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23718,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23711,"src":"7186:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23716,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23857,"src":"7161:15:89","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7161:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"7143:52:89"},{"assignments":[23726],"declarations":[{"constant":false,"id":23726,"mutability":"mutable","name":"paths","nameLocation":"7231:5:89","nodeType":"VariableDeclaration","scope":23812,"src":"7206:30:89","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"},"typeName":{"baseType":{"baseType":{"id":23723,"nodeType":"UserDefinedTypeName","pathNode":{"id":23722,"name":"SwapPathStep","nameLocations":["7206:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"7206:12:89"},"referencedDeclaration":1275,"src":"7206:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23724,"nodeType":"ArrayTypeName","src":"7206:14:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":23725,"nodeType":"ArrayTypeName","src":"7206:16:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}},"visibility":"internal"}],"id":23730,"initialValue":{"baseExpression":{"id":23727,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23041,"src":"7239:13:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23729,"indexExpression":{"id":23728,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23715,"src":"7253:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7239:22:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7206:55:89"},{"body":{"id":23804,"nodeType":"Block","src":"7392:582:89","statements":[{"assignments":[23746],"declarations":[{"constant":false,"id":23746,"mutability":"mutable","name":"steps","nameLocation":"7429:5:89","nodeType":"VariableDeclaration","scope":23804,"src":"7406:28:89","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":23744,"nodeType":"UserDefinedTypeName","pathNode":{"id":23743,"name":"SwapPathStep","nameLocations":["7406:12:89"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"7406:12:89"},"referencedDeclaration":1275,"src":"7406:12:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23745,"nodeType":"ArrayTypeName","src":"7406:14:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"}],"id":23750,"initialValue":{"baseExpression":{"id":23747,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"7437:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23749,"indexExpression":{"id":23748,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23732,"src":"7443:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7437:8:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7406:39:89"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23751,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23746,"src":"7464:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage pointer"}},"id":23752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7470:6:89","memberName":"length","nodeType":"MemberAccess","src":"7464:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":23753,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7480:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7464:17:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":23755,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23746,"src":"7485:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage pointer"}},"id":23757,"indexExpression":{"hexValue":"30","id":23756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7491:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7485:8:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage","typeString":"struct SwapPathStep storage ref"}},"id":23758,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7494:4:89","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1269,"src":"7485:13:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":23759,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23707,"src":"7502:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7485:29:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7464:50:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"baseExpression":{"id":23764,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23746,"src":"7526:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage pointer"}},"id":23766,"indexExpression":{"hexValue":"30","id":23765,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7532:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7526:8:89","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage","typeString":"struct SwapPathStep storage ref"}},"id":23767,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7535:8:89","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1272,"src":"7526:17:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":23763,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7518:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23762,"name":"address","nodeType":"ElementaryTypeName","src":"7518:7:89","typeDescriptions":{}}},"id":23768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7518:26:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":23769,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23711,"src":"7548:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7518:38:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7464:92:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23803,"nodeType":"IfStatement","src":"7460:504:89","trueBody":{"id":23802,"nodeType":"Block","src":"7558:406:89","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23772,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"7691:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7697:6:89","memberName":"length","nodeType":"MemberAccess","src":"7691:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":23774,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7706:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7691:16:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23788,"nodeType":"IfStatement","src":"7687:97:89","trueBody":{"id":23787,"nodeType":"Block","src":"7709:75:89","statements":[{"expression":{"id":23785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":23776,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"7731:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23778,"indexExpression":{"id":23777,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23732,"src":"7737:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7731:8:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":23779,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"7742:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23784,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23780,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"7748:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7754:6:89","memberName":"length","nodeType":"MemberAccess","src":"7748:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23782,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7763:1:89","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7748:16:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7742:23:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"src":"7731:34:89","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"id":23786,"nodeType":"ExpressionStatement","src":"7731:34:89"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23789,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"7846:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7852:3:89","memberName":"pop","nodeType":"MemberAccess","src":"7846:9:89","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$","typeString":"function (struct SwapPathStep storage ref[] storage ref[] storage pointer)"}},"id":23792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7846:11:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23793,"nodeType":"ExpressionStatement","src":"7846:11:89"},{"eventCall":{"arguments":[{"id":23795,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23709,"src":"7892:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23796,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23711,"src":"7901:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":23797,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"7911:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7917:6:89","memberName":"length","nodeType":"MemberAccess","src":"7911:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23794,"name":"PathRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1159,"src":"7880:11:89","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7880:44:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23800,"nodeType":"EmitStatement","src":"7875:49:89"},{"functionReturnParameters":23713,"id":23801,"nodeType":"Return","src":"7943:7:89"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23735,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23732,"src":"7369:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23736,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"7373:5:89","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7379:6:89","memberName":"length","nodeType":"MemberAccess","src":"7373:12:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7369:16:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23805,"initializationExpression":{"assignments":[23732],"declarations":[{"constant":false,"id":23732,"mutability":"mutable","name":"i","nameLocation":"7362:1:89","nodeType":"VariableDeclaration","scope":23805,"src":"7354:9:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23731,"name":"uint256","nodeType":"ElementaryTypeName","src":"7354:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23734,"initialValue":{"hexValue":"30","id":23733,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7366:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7354:13:89"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7387:3:89","subExpression":{"id":23739,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23732,"src":"7389:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23741,"nodeType":"ExpressionStatement","src":"7387:3:89"},"nodeType":"ForStatement","src":"7349:625:89"},{"errorCall":{"arguments":[{"id":23807,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23707,"src":"8119:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23808,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23709,"src":"8133:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23809,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23711,"src":"8142:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23806,"name":"InvalidRemovePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1181,"src":"8101:17:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address,address) pure returns (error)"}},"id":23810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8101:50:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23811,"nodeType":"RevertStatement","src":"8094:57:89"}]},"id":23813,"implemented":true,"kind":"function","modifiers":[],"name":"_removeSimplePairStep","nameLocation":"7045:21:89","nodeType":"FunctionDefinition","parameters":{"id":23712,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23707,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"7075:12:89","nodeType":"VariableDeclaration","scope":23813,"src":"7067:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23706,"name":"address","nodeType":"ElementaryTypeName","src":"7067:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23709,"mutability":"mutable","name":"tokenIn","nameLocation":"7097:7:89","nodeType":"VariableDeclaration","scope":23813,"src":"7089:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23708,"name":"address","nodeType":"ElementaryTypeName","src":"7089:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23711,"mutability":"mutable","name":"tokenOut","nameLocation":"7114:8:89","nodeType":"VariableDeclaration","scope":23813,"src":"7106:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23710,"name":"address","nodeType":"ElementaryTypeName","src":"7106:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7066:57:89"},"returnParameters":{"id":23713,"nodeType":"ParameterList","parameters":[],"src":"7133:0:89"},"scope":24017,"src":"7036:1122:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23838,"nodeType":"Block","src":"8219:166:89","statements":[{"assignments":[23820],"declarations":[{"constant":false,"id":23820,"mutability":"mutable","name":"underlyingToken","nameLocation":"8237:15:89","nodeType":"VariableDeclaration","scope":23838,"src":"8229:23:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23819,"name":"address","nodeType":"ElementaryTypeName","src":"8229:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":23825,"initialValue":{"arguments":[{"id":23823,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23816,"src":"8276:12:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"expression":{"id":23821,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"8255:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8261:14:89","memberName":"getBufferAsset","nodeType":"MemberAccess","referencedDeclaration":2796,"src":"8255:20:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_IERC4626_$9846_$returns$_t_address_$","typeString":"function (contract IERC4626) view external returns (address)"}},"id":23824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8255:34:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8229:60:89"},{"expression":{"arguments":[{"arguments":[{"id":23829,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23816,"src":"8324:12:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"id":23828,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8316:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23827,"name":"address","nodeType":"ElementaryTypeName","src":"8316:7:89","typeDescriptions":{}}},"id":23830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8316:21:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23831,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23820,"src":"8339:15:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":23834,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23816,"src":"8364:12:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"id":23833,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8356:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23832,"name":"address","nodeType":"ElementaryTypeName","src":"8356:7:89","typeDescriptions":{}}},"id":23835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8356:21:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23826,"name":"_removeTokenPair","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23705,"src":"8299:16:89","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":23836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8299:79:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23837,"nodeType":"ExpressionStatement","src":"8299:79:89"}]},"id":23839,"implemented":true,"kind":"function","modifiers":[],"name":"_removeBuffer","nameLocation":"8173:13:89","nodeType":"FunctionDefinition","parameters":{"id":23817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23816,"mutability":"mutable","name":"wrappedToken","nameLocation":"8196:12:89","nodeType":"VariableDeclaration","scope":23839,"src":"8187:21:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"},"typeName":{"id":23815,"nodeType":"UserDefinedTypeName","pathNode":{"id":23814,"name":"IERC4626","nameLocations":["8187:8:89"],"nodeType":"IdentifierPath","referencedDeclaration":9846,"src":"8187:8:89"},"referencedDeclaration":9846,"src":"8187:8:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"8186:23:89"},"returnParameters":{"id":23818,"nodeType":"ParameterList","parameters":[],"src":"8219:0:89"},"scope":24017,"src":"8164:221:89","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23856,"nodeType":"Block","src":"8483:70:89","statements":[{"expression":{"arguments":[{"arguments":[{"id":23851,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23841,"src":"8527:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23852,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23843,"src":"8536:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23849,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8510:3:89","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":23850,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8514:12:89","memberName":"encodePacked","nodeType":"MemberAccess","src":"8510:16:89","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":23853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8510:35:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":23848,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8500:9:89","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":23854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8500:46:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":23847,"id":23855,"nodeType":"Return","src":"8493:53:89"}]},"id":23857,"implemented":true,"kind":"function","modifiers":[],"name":"_getTokenPairId","nameLocation":"8400:15:89","nodeType":"FunctionDefinition","parameters":{"id":23844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23841,"mutability":"mutable","name":"tokenIn","nameLocation":"8424:7:89","nodeType":"VariableDeclaration","scope":23857,"src":"8416:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23840,"name":"address","nodeType":"ElementaryTypeName","src":"8416:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23843,"mutability":"mutable","name":"tokenOut","nameLocation":"8441:8:89","nodeType":"VariableDeclaration","scope":23857,"src":"8433:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23842,"name":"address","nodeType":"ElementaryTypeName","src":"8433:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8415:35:89"},"returnParameters":{"id":23847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23846,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23857,"src":"8474:7:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23845,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8474:7:89","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8473:9:89"},"scope":24017,"src":"8391:162:89","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":23935,"nodeType":"Block","src":"8650:746:89","statements":[{"assignments":[23867],"declarations":[{"constant":false,"id":23867,"mutability":"mutable","name":"underlying","nameLocation":"8668:10:89","nodeType":"VariableDeclaration","scope":23935,"src":"8660:18:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23866,"name":"address","nodeType":"ElementaryTypeName","src":"8660:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":23877,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":23873,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23859,"src":"8719:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23872,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"8710:8:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9846_$","typeString":"type(contract IERC4626)"}},"id":23874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8710:16:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9846","typeString":"contract IERC4626"}],"expression":{"id":23870,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"8689:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8695:14:89","memberName":"getBufferAsset","nodeType":"MemberAccess","referencedDeclaration":2796,"src":"8689:20:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_IERC4626_$9846_$returns$_t_address_$","typeString":"function (contract IERC4626) view external returns (address)"}},"id":23875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8689:38:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23869,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8681:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23868,"name":"address","nodeType":"ElementaryTypeName","src":"8681:7:89","typeDescriptions":{}}},"id":23876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8681:47:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8660:68:89"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23878,"name":"underlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23867,"src":"8743:10:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":23881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8765:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":23880,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8757:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23879,"name":"address","nodeType":"ElementaryTypeName","src":"8757:7:89","typeDescriptions":{}}},"id":23882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8757:10:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8743:24:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23889,"nodeType":"IfStatement","src":"8739:90:89","trueBody":{"id":23888,"nodeType":"Block","src":"8769:60:89","statements":[{"errorCall":{"arguments":[{"id":23885,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23859,"src":"8811:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23884,"name":"BufferNotInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1164,"src":"8790:20:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":23886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8790:28:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23887,"nodeType":"RevertStatement","src":"8783:35:89"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23890,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23861,"src":"8843:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":23891,"name":"underlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23867,"src":"8854:10:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8843:21:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23908,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23861,"src":"9048:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":23909,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23859,"src":"9059:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9048:17:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":23932,"nodeType":"Block","src":"9252:138:89","statements":[{"errorCall":{"arguments":[{"id":23927,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23859,"src":"9353:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23928,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23861,"src":"9361:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23929,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23863,"src":"9370:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23926,"name":"InvalidBufferPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1190,"src":"9335:17:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address,address) pure returns (error)"}},"id":23930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9335:44:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23931,"nodeType":"RevertStatement","src":"9328:51:89"}]},"id":23933,"nodeType":"IfStatement","src":"9044:346:89","trueBody":{"id":23925,"nodeType":"Block","src":"9067:179:89","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23911,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23863,"src":"9119:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":23914,"name":"underlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23867,"src":"9139:10:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9131:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23912,"name":"address","nodeType":"ElementaryTypeName","src":"9131:7:89","typeDescriptions":{}}},"id":23915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9131:19:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9119:31:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23924,"nodeType":"IfStatement","src":"9115:121:89","trueBody":{"id":23923,"nodeType":"Block","src":"9152:84:89","statements":[{"errorCall":{"arguments":[{"id":23918,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23859,"src":"9195:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23919,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23861,"src":"9203:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23920,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23863,"src":"9212:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23917,"name":"InvalidBufferPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1190,"src":"9177:17:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address,address) pure returns (error)"}},"id":23921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9177:44:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23922,"nodeType":"RevertStatement","src":"9170:51:89"}]}}]}},"id":23934,"nodeType":"IfStatement","src":"8839:551:89","trueBody":{"id":23907,"nodeType":"Block","src":"8866:172:89","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23893,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23863,"src":"8915:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":23896,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23859,"src":"8935:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23895,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8927:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23894,"name":"address","nodeType":"ElementaryTypeName","src":"8927:7:89","typeDescriptions":{}}},"id":23897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8927:15:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8915:27:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23906,"nodeType":"IfStatement","src":"8911:117:89","trueBody":{"id":23905,"nodeType":"Block","src":"8944:84:89","statements":[{"errorCall":{"arguments":[{"id":23900,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23859,"src":"8987:6:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23901,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23861,"src":"8995:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23902,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23863,"src":"9004:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23899,"name":"InvalidBufferPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1190,"src":"8969:17:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address,address) pure returns (error)"}},"id":23903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8969:44:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23904,"nodeType":"RevertStatement","src":"8962:51:89"}]}}]}}]},"id":23936,"implemented":true,"kind":"function","modifiers":[],"name":"_checkBufferStep","nameLocation":"8568:16:89","nodeType":"FunctionDefinition","parameters":{"id":23864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23859,"mutability":"mutable","name":"buffer","nameLocation":"8593:6:89","nodeType":"VariableDeclaration","scope":23936,"src":"8585:14:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23858,"name":"address","nodeType":"ElementaryTypeName","src":"8585:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23861,"mutability":"mutable","name":"tokenIn","nameLocation":"8609:7:89","nodeType":"VariableDeclaration","scope":23936,"src":"8601:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23860,"name":"address","nodeType":"ElementaryTypeName","src":"8601:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23863,"mutability":"mutable","name":"tokenOut","nameLocation":"8626:8:89","nodeType":"VariableDeclaration","scope":23936,"src":"8618:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23862,"name":"address","nodeType":"ElementaryTypeName","src":"8618:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8584:51:89"},"returnParameters":{"id":23865,"nodeType":"ParameterList","parameters":[],"src":"8650:0:89"},"scope":24017,"src":"8559:837:89","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":24015,"nodeType":"Block","src":"9489:492:89","statements":[{"assignments":[23949],"declarations":[{"constant":false,"id":23949,"mutability":"mutable","name":"tokens","nameLocation":"9515:6:89","nodeType":"VariableDeclaration","scope":24015,"src":"9499:22:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":23947,"nodeType":"UserDefinedTypeName","pathNode":{"id":23946,"name":"IERC20","nameLocations":["9499:6:89"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"9499:6:89"},"referencedDeclaration":10576,"src":"9499:6:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":23948,"nodeType":"ArrayTypeName","src":"9499:8:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":23954,"initialValue":{"arguments":[{"id":23952,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23938,"src":"9544:4:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23950,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20218,"src":"9524:5:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"id":23951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9530:13:89","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":3579,"src":"9524:19:89","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":23953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9524:25:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"9499:50:89"},{"assignments":[23956],"declarations":[{"constant":false,"id":23956,"mutability":"mutable","name":"foundIn","nameLocation":"9565:7:89","nodeType":"VariableDeclaration","scope":24015,"src":"9560:12:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23955,"name":"bool","nodeType":"ElementaryTypeName","src":"9560:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":23958,"initialValue":{"hexValue":"66616c7365","id":23957,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9575:5:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"9560:20:89"},{"assignments":[23960],"declarations":[{"constant":false,"id":23960,"mutability":"mutable","name":"foundOut","nameLocation":"9595:8:89","nodeType":"VariableDeclaration","scope":24015,"src":"9590:13:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23959,"name":"bool","nodeType":"ElementaryTypeName","src":"9590:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":23962,"initialValue":{"hexValue":"66616c7365","id":23961,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9606:5:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"9590:21:89"},{"body":{"id":24000,"nodeType":"Block","src":"9666:201:89","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"id":23980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":23974,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23949,"src":"9684:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23976,"indexExpression":{"id":23975,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23964,"src":"9691:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9684:9:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":23978,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23940,"src":"9704:7:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23977,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"9697:6:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10576_$","typeString":"type(contract IERC20)"}},"id":23979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9697:15:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"9684:28:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23986,"nodeType":"IfStatement","src":"9680:81:89","trueBody":{"id":23985,"nodeType":"Block","src":"9714:47:89","statements":[{"expression":{"id":23983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23981,"name":"foundIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23956,"src":"9732:7:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":23982,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9742:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"9732:14:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23984,"nodeType":"ExpressionStatement","src":"9732:14:89"}]}},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"id":23993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":23987,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23949,"src":"9778:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23989,"indexExpression":{"id":23988,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23964,"src":"9785:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9778:9:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":23991,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23942,"src":"9798:8:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23990,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"9791:6:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10576_$","typeString":"type(contract IERC20)"}},"id":23992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9791:16:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"src":"9778:29:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23999,"nodeType":"IfStatement","src":"9774:83:89","trueBody":{"id":23998,"nodeType":"Block","src":"9809:48:89","statements":[{"expression":{"id":23996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23994,"name":"foundOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23960,"src":"9827:8:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":23995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9838:4:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"9827:15:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23997,"nodeType":"ExpressionStatement","src":"9827:15:89"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23967,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23964,"src":"9642:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23968,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23949,"src":"9646:6:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10576_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9653:6:89","memberName":"length","nodeType":"MemberAccess","src":"9646:13:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9642:17:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24001,"initializationExpression":{"assignments":[23964],"declarations":[{"constant":false,"id":23964,"mutability":"mutable","name":"i","nameLocation":"9635:1:89","nodeType":"VariableDeclaration","scope":24001,"src":"9627:9:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23963,"name":"uint256","nodeType":"ElementaryTypeName","src":"9627:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23966,"initialValue":{"hexValue":"30","id":23965,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9639:1:89","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9627:13:89"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"9661:3:89","subExpression":{"id":23971,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23964,"src":"9663:1:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23973,"nodeType":"ExpressionStatement","src":"9661:3:89"},"nodeType":"ForStatement","src":"9622:245:89"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":24008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":24004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24002,"name":"foundIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23956,"src":"9881:7:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":24003,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9892:5:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"9881:16:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":24007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24005,"name":"foundOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23960,"src":"9901:8:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":24006,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9913:5:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"9901:17:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9881:37:89","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24014,"nodeType":"IfStatement","src":"9877:98:89","trueBody":{"id":24013,"nodeType":"Block","src":"9920:55:89","statements":[{"errorCall":{"arguments":[{"id":24010,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23938,"src":"9959:4:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24009,"name":"InvalidSimplePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1172,"src":"9941:17:89","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":24011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9941:23:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24012,"nodeType":"RevertStatement","src":"9934:30:89"}]}}]},"id":24016,"implemented":true,"kind":"function","modifiers":[],"name":"_checkPoolStep","nameLocation":"9411:14:89","nodeType":"FunctionDefinition","parameters":{"id":23943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23938,"mutability":"mutable","name":"pool","nameLocation":"9434:4:89","nodeType":"VariableDeclaration","scope":24016,"src":"9426:12:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23937,"name":"address","nodeType":"ElementaryTypeName","src":"9426:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23940,"mutability":"mutable","name":"tokenIn","nameLocation":"9448:7:89","nodeType":"VariableDeclaration","scope":24016,"src":"9440:15:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23939,"name":"address","nodeType":"ElementaryTypeName","src":"9440:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23942,"mutability":"mutable","name":"tokenOut","nameLocation":"9465:8:89","nodeType":"VariableDeclaration","scope":24016,"src":"9457:16:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23941,"name":"address","nodeType":"ElementaryTypeName","src":"9457:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9425:49:89"},"returnParameters":{"id":23944,"nodeType":"ParameterList","parameters":[],"src":"9489:0:89"},"scope":24017,"src":"9402:579:89","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":24018,"src":"1158:8825:89","usedErrors":[5,1164,1167,1172,1181,1190,1193,9352,9357,20215],"usedEvents":[1150,1159,9363,9501]}],"src":"46:9938:89"},"id":89},"contracts/test/FeeBurnerAuthenticationMock.sol":{"ast":{"absolutePath":"contracts/test/FeeBurnerAuthenticationMock.sol","exportedSymbols":{"FeeBurnerAuthentication":[19845],"FeeBurnerAuthenticationMock":[24053],"IProtocolFeeSweeper":[1137],"IVault":[2545]},"id":24054,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24019,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:90"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":24021,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24054,"sourceUnit":2546,"src":"72:81:90","symbolAliases":[{"foreign":{"id":24020,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"81:6:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":24023,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24054,"sourceUnit":1138,"src":"154:118:90","symbolAliases":[{"foreign":{"id":24022,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1137,"src":"163:19:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/FeeBurnerAuthentication.sol","file":"../FeeBurnerAuthentication.sol","id":24025,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24054,"sourceUnit":19846,"src":"274:73:90","symbolAliases":[{"foreign":{"id":24024,"name":"FeeBurnerAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19845,"src":"283:23:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24026,"name":"FeeBurnerAuthentication","nameLocations":["389:23:90"],"nodeType":"IdentifierPath","referencedDeclaration":19845,"src":"389:23:90"},"id":24027,"nodeType":"InheritanceSpecifier","src":"389:23:90"}],"canonicalName":"FeeBurnerAuthenticationMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":24053,"linearizedBaseContracts":[24053,19845,9572,9486,12366],"name":"FeeBurnerAuthenticationMock","nameLocation":"358:27:90","nodeType":"ContractDefinition","nodes":[{"body":{"id":24039,"nodeType":"Block","src":"573:64:90","statements":[]},"id":24040,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":24035,"name":"protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24030,"src":"539:18:90","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},{"id":24036,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24032,"src":"559:12:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":24037,"kind":"baseConstructorSpecifier","modifierName":{"id":24034,"name":"FeeBurnerAuthentication","nameLocations":["515:23:90"],"nodeType":"IdentifierPath","referencedDeclaration":19845,"src":"515:23:90"},"nodeType":"ModifierInvocation","src":"515:57:90"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24030,"mutability":"mutable","name":"protocolFeeSweeper","nameLocation":"460:18:90","nodeType":"VariableDeclaration","scope":24040,"src":"440:38:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":24029,"nodeType":"UserDefinedTypeName","pathNode":{"id":24028,"name":"IProtocolFeeSweeper","nameLocations":["440:19:90"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"440:19:90"},"referencedDeclaration":1137,"src":"440:19:90","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"visibility":"internal"},{"constant":false,"id":24032,"mutability":"mutable","name":"initialOwner","nameLocation":"496:12:90","nodeType":"VariableDeclaration","scope":24040,"src":"488:20:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24031,"name":"address","nodeType":"ElementaryTypeName","src":"488:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"430:84:90"},"returnParameters":{"id":24038,"nodeType":"ParameterList","parameters":[],"src":"573:0:90"},"scope":24053,"src":"419:218:90","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":24045,"nodeType":"Block","src":"715:2:90","statements":[]},"functionSelector":"8ec20833","id":24046,"implemented":true,"kind":"function","modifiers":[{"id":24043,"kind":"modifierInvocation","modifierName":{"id":24042,"name":"onlyProtocolFeeSweeper","nameLocations":["692:22:90"],"nodeType":"IdentifierPath","referencedDeclaration":19793,"src":"692:22:90"},"nodeType":"ModifierInvocation","src":"692:22:90"}],"name":"manualOnlyProtocolFeeSweeper","nameLocation":"652:28:90","nodeType":"FunctionDefinition","parameters":{"id":24041,"nodeType":"ParameterList","parameters":[],"src":"680:2:90"},"returnParameters":{"id":24044,"nodeType":"ParameterList","parameters":[],"src":"715:0:90"},"scope":24053,"src":"643:74:90","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24051,"nodeType":"Block","src":"797:2:90","statements":[]},"functionSelector":"f405ce44","id":24052,"implemented":true,"kind":"function","modifiers":[{"id":24049,"kind":"modifierInvocation","modifierName":{"id":24048,"name":"onlyFeeRecipientOrOwner","nameLocations":["773:23:90"],"nodeType":"IdentifierPath","referencedDeclaration":19814,"src":"773:23:90"},"nodeType":"ModifierInvocation","src":"773:23:90"}],"name":"manualOnlyFeeRecipientOrOwner","nameLocation":"732:29:90","nodeType":"FunctionDefinition","parameters":{"id":24047,"nodeType":"ParameterList","parameters":[],"src":"761:2:90"},"returnParameters":{"id":24050,"nodeType":"ParameterList","parameters":[],"src":"797:0:90"},"scope":24053,"src":"723:76:90","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":24054,"src":"349:452:90","usedErrors":[9352,9357,19774,19777],"usedEvents":[9363,9501]}],"src":"46:756:90"},"id":90},"contracts/test/OwnableAuthenticationMock.sol":{"ast":{"absolutePath":"contracts/test/OwnableAuthenticationMock.sol","exportedSymbols":{"Authentication":[4385],"IAuthorizer":[1341],"IVault":[2545],"Ownable":[9486],"Ownable2Step":[9572],"OwnableAuthentication":[20330],"OwnableAuthenticationMock":[24089]},"id":24090,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24055,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:91"},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"@openzeppelin/contracts/access/Ownable.sol","id":24057,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24090,"sourceUnit":9487,"src":"72:69:91","symbolAliases":[{"foreign":{"id":24056,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9486,"src":"81:7:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/Ownable2Step.sol","file":"@openzeppelin/contracts/access/Ownable2Step.sol","id":24059,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24090,"sourceUnit":9573,"src":"142:79:91","symbolAliases":[{"foreign":{"id":24058,"name":"Ownable2Step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9572,"src":"151:12:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":24061,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24090,"sourceUnit":1342,"src":"223:91:91","symbolAliases":[{"foreign":{"id":24060,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"232:11:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":24063,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24090,"sourceUnit":2546,"src":"315:81:91","symbolAliases":[{"foreign":{"id":24062,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"324:6:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","id":24065,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24090,"sourceUnit":4386,"src":"398:103:91","symbolAliases":[{"foreign":{"id":24064,"name":"Authentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4385,"src":"407:14:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/OwnableAuthentication.sol","file":"../OwnableAuthentication.sol","id":24067,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24090,"sourceUnit":20331,"src":"503:69:91","symbolAliases":[{"foreign":{"id":24066,"name":"OwnableAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20330,"src":"512:21:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24068,"name":"OwnableAuthentication","nameLocations":["612:21:91"],"nodeType":"IdentifierPath","referencedDeclaration":20330,"src":"612:21:91"},"id":24069,"nodeType":"InheritanceSpecifier","src":"612:21:91"}],"canonicalName":"OwnableAuthenticationMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":24089,"linearizedBaseContracts":[24089,20330,4385,14,9572,9486,12366],"name":"OwnableAuthenticationMock","nameLocation":"583:25:91","nodeType":"ContractDefinition","nodes":[{"body":{"id":24081,"nodeType":"Block","src":"731:64:91","statements":[]},"id":24082,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":24077,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24072,"src":"710:5:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},{"id":24078,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24074,"src":"717:12:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":24079,"kind":"baseConstructorSpecifier","modifierName":{"id":24076,"name":"OwnableAuthentication","nameLocations":["688:21:91"],"nodeType":"IdentifierPath","referencedDeclaration":20330,"src":"688:21:91"},"nodeType":"ModifierInvocation","src":"688:42:91"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24072,"mutability":"mutable","name":"vault","nameLocation":"659:5:91","nodeType":"VariableDeclaration","scope":24082,"src":"652:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":24071,"nodeType":"UserDefinedTypeName","pathNode":{"id":24070,"name":"IVault","nameLocations":["652:6:91"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"652:6:91"},"referencedDeclaration":2545,"src":"652:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":24074,"mutability":"mutable","name":"initialOwner","nameLocation":"674:12:91","nodeType":"VariableDeclaration","scope":24082,"src":"666:20:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24073,"name":"address","nodeType":"ElementaryTypeName","src":"666:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"651:36:91"},"returnParameters":{"id":24080,"nodeType":"ParameterList","parameters":[],"src":"731:0:91"},"scope":24089,"src":"640:155:91","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":24087,"nodeType":"Block","src":"860:64:91","statements":[]},"functionSelector":"c1d08010","id":24088,"implemented":true,"kind":"function","modifiers":[{"id":24085,"kind":"modifierInvocation","modifierName":{"id":24084,"name":"authenticate","nameLocations":["847:12:91"],"nodeType":"IdentifierPath","referencedDeclaration":4333,"src":"847:12:91"},"nodeType":"ModifierInvocation","src":"847:12:91"}],"name":"permissionedFunction","nameLocation":"810:20:91","nodeType":"FunctionDefinition","parameters":{"id":24083,"nodeType":"ParameterList","parameters":[],"src":"830:2:91"},"returnParameters":{"id":24086,"nodeType":"ParameterList","parameters":[],"src":"860:0:91"},"scope":24089,"src":"801:123:91","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":24090,"src":"574:352:91","usedErrors":[5,9352,9357,20215],"usedEvents":[9363,9501]}],"src":"46:881:91"},"id":91},"contracts/test/PoolHelperMock.sol":{"ast":{"absolutePath":"contracts/test/PoolHelperMock.sol","exportedSymbols":{"IVault":[2545],"PoolHelperCommon":[21059],"PoolHelperMock":[24111]},"id":24112,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24091,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:92"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":24093,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24112,"sourceUnit":2546,"src":"72:81:92","symbolAliases":[{"foreign":{"id":24092,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"81:6:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/PoolHelperCommon.sol","file":"../PoolHelperCommon.sol","id":24095,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24112,"sourceUnit":21060,"src":"155:59:92","symbolAliases":[{"foreign":{"id":24094,"name":"PoolHelperCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21059,"src":"164:16:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24096,"name":"PoolHelperCommon","nameLocations":["243:16:92"],"nodeType":"IdentifierPath","referencedDeclaration":21059,"src":"243:16:92"},"id":24097,"nodeType":"InheritanceSpecifier","src":"243:16:92"}],"canonicalName":"PoolHelperMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":24111,"linearizedBaseContracts":[24111,21059,20330,4385,14,9572,9486,12366,865],"name":"PoolHelperMock","nameLocation":"225:14:92","nodeType":"ContractDefinition","nodes":[{"body":{"id":24109,"nodeType":"Block","src":"352:64:92","statements":[]},"id":24110,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":24105,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24100,"src":"331:5:92","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},{"id":24106,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24102,"src":"338:12:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":24107,"kind":"baseConstructorSpecifier","modifierName":{"id":24104,"name":"PoolHelperCommon","nameLocations":["314:16:92"],"nodeType":"IdentifierPath","referencedDeclaration":21059,"src":"314:16:92"},"nodeType":"ModifierInvocation","src":"314:37:92"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24100,"mutability":"mutable","name":"vault","nameLocation":"285:5:92","nodeType":"VariableDeclaration","scope":24110,"src":"278:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":24099,"nodeType":"UserDefinedTypeName","pathNode":{"id":24098,"name":"IVault","nameLocations":["278:6:92"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"278:6:92"},"referencedDeclaration":2545,"src":"278:6:92","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":24102,"mutability":"mutable","name":"initialOwner","nameLocation":"300:12:92","nodeType":"VariableDeclaration","scope":24110,"src":"292:20:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24101,"name":"address","nodeType":"ElementaryTypeName","src":"292:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"277:36:92"},"returnParameters":{"id":24108,"nodeType":"ParameterList","parameters":[],"src":"352:0:92"},"scope":24111,"src":"266:150:92","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":24112,"src":"216:202:92","usedErrors":[5,711,718,723,726,731,734,739,2857,9352,9357,20215],"usedEvents":[674,681,688,695,704,9363,9501]}],"src":"46:373:92"},"id":92},"contracts/test/PriceImpactHelperMock.sol":{"ast":{"absolutePath":"contracts/test/PriceImpactHelperMock.sol","exportedSymbols":{"IRouter":[2302],"IVault":[2545],"PriceImpactHelper":[21889],"PriceImpactHelperMock":[24207]},"id":24208,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24113,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:93"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":24115,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24208,"sourceUnit":2546,"src":"72:81:93","symbolAliases":[{"foreign":{"id":24114,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"81:6:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","id":24117,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24208,"sourceUnit":2303,"src":"154:83:93","symbolAliases":[{"foreign":{"id":24116,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2302,"src":"163:7:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/PriceImpactHelper.sol","file":"../PriceImpactHelper.sol","id":24119,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24208,"sourceUnit":21890,"src":"239:61:93","symbolAliases":[{"foreign":{"id":24118,"name":"PriceImpactHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21889,"src":"248:17:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24120,"name":"PriceImpactHelper","nameLocations":["336:17:93"],"nodeType":"IdentifierPath","referencedDeclaration":21889,"src":"336:17:93"},"id":24121,"nodeType":"InheritanceSpecifier","src":"336:17:93"}],"canonicalName":"PriceImpactHelperMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":24207,"linearizedBaseContracts":[24207,21889,18633],"name":"PriceImpactHelperMock","nameLocation":"311:21:93","nodeType":"ContractDefinition","nodes":[{"body":{"id":24134,"nodeType":"Block","src":"435:2:93","statements":[]},"id":24135,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":24130,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24124,"src":"420:5:93","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},{"id":24131,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24127,"src":"427:6:93","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}}],"id":24132,"kind":"baseConstructorSpecifier","modifierName":{"id":24129,"name":"PriceImpactHelper","nameLocations":["402:17:93"],"nodeType":"IdentifierPath","referencedDeclaration":21889,"src":"402:17:93"},"nodeType":"ModifierInvocation","src":"402:32:93"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24124,"mutability":"mutable","name":"vault","nameLocation":"379:5:93","nodeType":"VariableDeclaration","scope":24135,"src":"372:12:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"},"typeName":{"id":24123,"nodeType":"UserDefinedTypeName","pathNode":{"id":24122,"name":"IVault","nameLocations":["372:6:93"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"372:6:93"},"referencedDeclaration":2545,"src":"372:6:93","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2545","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":24127,"mutability":"mutable","name":"router","nameLocation":"394:6:93","nodeType":"VariableDeclaration","scope":24135,"src":"386:14:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"},"typeName":{"id":24126,"nodeType":"UserDefinedTypeName","pathNode":{"id":24125,"name":"IRouter","nameLocations":["386:7:93"],"nodeType":"IdentifierPath","referencedDeclaration":2302,"src":"386:7:93"},"referencedDeclaration":2302,"src":"386:7:93","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2302","typeString":"contract IRouter"}},"visibility":"internal"}],"src":"371:30:93"},"returnParameters":{"id":24133,"nodeType":"ParameterList","parameters":[],"src":"435:0:93"},"scope":24207,"src":"360:77:93","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":24156,"nodeType":"Block","src":"641:100:93","statements":[{"expression":{"arguments":[{"id":24150,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24137,"src":"701:4:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24151,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24139,"src":"707:10:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24152,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24142,"src":"719:6:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":24153,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24144,"src":"727:6:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":24149,"name":"_queryAddLiquidityUnbalancedForTokenDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21618,"src":"658:42:93","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_int256_$","typeString":"function (address,uint256,int256[] memory,address) returns (int256)"}},"id":24154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"658:76:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":24148,"id":24155,"nodeType":"Return","src":"651:83:93"}]},"functionSelector":"e3a50d82","id":24157,"implemented":true,"kind":"function","modifiers":[],"name":"queryAddLiquidityUnbalancedForTokenDeltas","nameLocation":"452:41:93","nodeType":"FunctionDefinition","parameters":{"id":24145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24137,"mutability":"mutable","name":"pool","nameLocation":"511:4:93","nodeType":"VariableDeclaration","scope":24157,"src":"503:12:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24136,"name":"address","nodeType":"ElementaryTypeName","src":"503:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24139,"mutability":"mutable","name":"tokenIndex","nameLocation":"533:10:93","nodeType":"VariableDeclaration","scope":24157,"src":"525:18:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24138,"name":"uint256","nodeType":"ElementaryTypeName","src":"525:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24142,"mutability":"mutable","name":"deltas","nameLocation":"569:6:93","nodeType":"VariableDeclaration","scope":24157,"src":"553:22:93","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":24140,"name":"int256","nodeType":"ElementaryTypeName","src":"553:6:93","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":24141,"nodeType":"ArrayTypeName","src":"553:8:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":24144,"mutability":"mutable","name":"sender","nameLocation":"593:6:93","nodeType":"VariableDeclaration","scope":24157,"src":"585:14:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24143,"name":"address","nodeType":"ElementaryTypeName","src":"585:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"493:112:93"},"returnParameters":{"id":24148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24147,"mutability":"mutable","name":"deltaBPT","nameLocation":"631:8:93","nodeType":"VariableDeclaration","scope":24157,"src":"624:15:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":24146,"name":"int256","nodeType":"ElementaryTypeName","src":"624:6:93","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"623:17:93"},"scope":24207,"src":"443:298:93","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24179,"nodeType":"Block","src":"916:71:93","statements":[{"expression":{"arguments":[{"id":24173,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24159,"src":"948:4:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24174,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24162,"src":"954:6:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":24175,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24165,"src":"962:9:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":24176,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24167,"src":"973:6:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":24172,"name":"_zeroOutDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21782,"src":"933:14:93","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_int256_$dyn_memory_ptr_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$","typeString":"function (address,int256[] memory,int256[] memory,address) returns (uint256)"}},"id":24177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"933:47:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24171,"id":24178,"nodeType":"Return","src":"926:54:93"}]},"functionSelector":"3b064ca3","id":24180,"implemented":true,"kind":"function","modifiers":[],"name":"zeroOutDeltas","nameLocation":"756:13:93","nodeType":"FunctionDefinition","parameters":{"id":24168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24159,"mutability":"mutable","name":"pool","nameLocation":"787:4:93","nodeType":"VariableDeclaration","scope":24180,"src":"779:12:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24158,"name":"address","nodeType":"ElementaryTypeName","src":"779:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24162,"mutability":"mutable","name":"deltas","nameLocation":"817:6:93","nodeType":"VariableDeclaration","scope":24180,"src":"801:22:93","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":24160,"name":"int256","nodeType":"ElementaryTypeName","src":"801:6:93","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":24161,"nodeType":"ArrayTypeName","src":"801:8:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":24165,"mutability":"mutable","name":"deltaBPTs","nameLocation":"849:9:93","nodeType":"VariableDeclaration","scope":24180,"src":"833:25:93","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":24163,"name":"int256","nodeType":"ElementaryTypeName","src":"833:6:93","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":24164,"nodeType":"ArrayTypeName","src":"833:8:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":24167,"mutability":"mutable","name":"sender","nameLocation":"876:6:93","nodeType":"VariableDeclaration","scope":24180,"src":"868:14:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24166,"name":"address","nodeType":"ElementaryTypeName","src":"868:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"769:119:93"},"returnParameters":{"id":24171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24170,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24180,"src":"907:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24169,"name":"uint256","nodeType":"ElementaryTypeName","src":"907:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"906:9:93"},"scope":24207,"src":"747:240:93","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24192,"nodeType":"Block","src":"1074:48:93","statements":[{"expression":{"arguments":[{"id":24189,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24183,"src":"1109:5:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}],"id":24188,"name":"_minPositiveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21835,"src":"1091:17:93","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (int256[] memory) pure returns (uint256)"}},"id":24190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1091:24:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24187,"id":24191,"nodeType":"Return","src":"1084:31:93"}]},"functionSelector":"0d4277d1","id":24193,"implemented":true,"kind":"function","modifiers":[],"name":"minPositiveIndex","nameLocation":"1002:16:93","nodeType":"FunctionDefinition","parameters":{"id":24184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24183,"mutability":"mutable","name":"array","nameLocation":"1035:5:93","nodeType":"VariableDeclaration","scope":24193,"src":"1019:21:93","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":24181,"name":"int256","nodeType":"ElementaryTypeName","src":"1019:6:93","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":24182,"nodeType":"ArrayTypeName","src":"1019:8:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"1018:23:93"},"returnParameters":{"id":24187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24186,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24193,"src":"1065:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24185,"name":"uint256","nodeType":"ElementaryTypeName","src":"1065:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1064:9:93"},"scope":24207,"src":"993:129:93","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":24205,"nodeType":"Block","src":"1209:48:93","statements":[{"expression":{"arguments":[{"id":24202,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24196,"src":"1244:5:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}],"id":24201,"name":"_maxNegativeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21888,"src":"1226:17:93","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (int256[] memory) pure returns (uint256)"}},"id":24203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1226:24:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24200,"id":24204,"nodeType":"Return","src":"1219:31:93"}]},"functionSelector":"01ef39ee","id":24206,"implemented":true,"kind":"function","modifiers":[],"name":"maxNegativeIndex","nameLocation":"1137:16:93","nodeType":"FunctionDefinition","parameters":{"id":24197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24196,"mutability":"mutable","name":"array","nameLocation":"1170:5:93","nodeType":"VariableDeclaration","scope":24206,"src":"1154:21:93","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":24194,"name":"int256","nodeType":"ElementaryTypeName","src":"1154:6:93","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":24195,"nodeType":"ArrayTypeName","src":"1154:8:93","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"1153:23:93"},"returnParameters":{"id":24200,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24199,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24206,"src":"1200:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24198,"name":"uint256","nodeType":"ElementaryTypeName","src":"1200:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1199:9:93"},"scope":24207,"src":"1128:129:93","stateMutability":"pure","virtual":false,"visibility":"external"}],"scope":24208,"src":"302:957:93","usedErrors":[4877,4880,11076,12379,14342,14354,18535],"usedEvents":[]}],"src":"46:1214:93"},"id":93},"contracts/test/ProtocolFeeBurnerMock.sol":{"ast":{"absolutePath":"contracts/test/ProtocolFeeBurnerMock.sol","exportedSymbols":{"ERC20TestToken":[7343],"FixedPoint":[5298],"IERC20":[10576],"IProtocolFeeBurner":[948],"ProtocolFeeBurnerMock":[24339],"SafeERC20":[11066]},"id":24340,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24209,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:94"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":24211,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24340,"sourceUnit":10577,"src":"72:72:94","symbolAliases":[{"foreign":{"id":24210,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":24213,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24340,"sourceUnit":11067,"src":"145:84:94","symbolAliases":[{"foreign":{"id":24212,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11066,"src":"154:9:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","id":24215,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24340,"sourceUnit":949,"src":"231:116:94","symbolAliases":[{"foreign":{"id":24214,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"240:18:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol","file":"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol","id":24217,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24340,"sourceUnit":7344,"src":"349:100:94","symbolAliases":[{"foreign":{"id":24216,"name":"ERC20TestToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7343,"src":"358:14:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":24219,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24340,"sourceUnit":5299,"src":"450:92:94","symbolAliases":[{"foreign":{"id":24218,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5298,"src":"459:10:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24220,"name":"IProtocolFeeBurner","nameLocations":["578:18:94"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"578:18:94"},"id":24221,"nodeType":"InheritanceSpecifier","src":"578:18:94"}],"canonicalName":"ProtocolFeeBurnerMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":24339,"linearizedBaseContracts":[24339,948],"name":"ProtocolFeeBurnerMock","nameLocation":"553:21:94","nodeType":"ContractDefinition","nodes":[{"global":false,"id":24224,"libraryName":{"id":24222,"name":"FixedPoint","nameLocations":["609:10:94"],"nodeType":"IdentifierPath","referencedDeclaration":5298,"src":"609:10:94"},"nodeType":"UsingForDirective","src":"603:29:94","typeName":{"id":24223,"name":"uint256","nodeType":"ElementaryTypeName","src":"624:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":24228,"libraryName":{"id":24225,"name":"SafeERC20","nameLocations":["643:9:94"],"nodeType":"IdentifierPath","referencedDeclaration":11066,"src":"643:9:94"},"nodeType":"UsingForDirective","src":"637:27:94","typeName":{"id":24227,"nodeType":"UserDefinedTypeName","pathNode":{"id":24226,"name":"IERC20","nameLocations":["657:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"657:6:94"},"referencedDeclaration":10576,"src":"657:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}},{"constant":false,"id":24232,"mutability":"mutable","name":"_tokenRatio","nameLocation":"686:11:94","nodeType":"VariableDeclaration","scope":24339,"src":"670:44:94","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24229,"name":"uint256","nodeType":"ElementaryTypeName","src":"670:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"expression":{"id":24230,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5298,"src":"700:10:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$5298_$","typeString":"type(library FixedPoint)"}},"id":24231,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"711:3:94","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":5010,"src":"700:14:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":24235,"mutability":"mutable","name":"transferFromEnabled","nameLocation":"726:19:94","nodeType":"VariableDeclaration","scope":24339,"src":"721:31:94","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24233,"name":"bool","nodeType":"ElementaryTypeName","src":"721:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":{"hexValue":"74727565","id":24234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"748:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"visibility":"internal"},{"baseFunctions":[947],"body":{"id":24317,"nodeType":"Block","src":"1024:818:94","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24255,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1038:5:94","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":24256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1044:9:94","memberName":"timestamp","nodeType":"MemberAccess","src":"1038:15:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":24257,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24252,"src":"1056:8:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1038:26:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24263,"nodeType":"IfStatement","src":"1034:78:94","trueBody":{"id":24262,"nodeType":"Block","src":"1066:46:94","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24259,"name":"SwapDeadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":927,"src":"1087:12:94","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1087:14:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24261,"nodeType":"RevertStatement","src":"1080:21:94"}]}},{"condition":{"id":24264,"name":"transferFromEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24235,"src":"1126:19:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24278,"nodeType":"IfStatement","src":"1122:125:94","trueBody":{"id":24277,"nodeType":"Block","src":"1147:100:94","statements":[{"expression":{"arguments":[{"expression":{"id":24268,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1187:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1191:6:94","memberName":"sender","nodeType":"MemberAccess","src":"1187:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":24272,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1207:4:94","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeBurnerMock_$24339","typeString":"contract ProtocolFeeBurnerMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeBurnerMock_$24339","typeString":"contract ProtocolFeeBurnerMock"}],"id":24271,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1199:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24270,"name":"address","nodeType":"ElementaryTypeName","src":"1199:7:94","typeDescriptions":{}}},"id":24273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1199:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24274,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24243,"src":"1214:21:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24265,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24241,"src":"1161:8:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":24267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1170:16:94","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":10674,"src":"1161:25:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":24275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1161:75:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24276,"nodeType":"ExpressionStatement","src":"1161:75:94"}]}},{"expression":{"arguments":[{"id":24286,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24250,"src":"1383:9:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24287,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24243,"src":"1394:21:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"arguments":[{"id":24282,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24246,"src":"1364:11:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}],"id":24281,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1356:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24280,"name":"address","nodeType":"ElementaryTypeName","src":"1356:7:94","typeDescriptions":{}}},"id":24283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1356:20:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24279,"name":"ERC20TestToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7343,"src":"1341:14:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20TestToken_$7343_$","typeString":"type(contract ERC20TestToken)"}},"id":24284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1341:36:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ERC20TestToken_$7343","typeString":"contract ERC20TestToken"}},"id":24285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1378:4:94","memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":7276,"src":"1341:41:94","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":24288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1341:75:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24289,"nodeType":"ExpressionStatement","src":"1341:75:94"},{"assignments":[24291],"declarations":[{"constant":false,"id":24291,"mutability":"mutable","name":"targetTokenAmount","nameLocation":"1435:17:94","nodeType":"VariableDeclaration","scope":24317,"src":"1427:25:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24290,"name":"uint256","nodeType":"ElementaryTypeName","src":"1427:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24296,"initialValue":{"arguments":[{"id":24294,"name":"_tokenRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24232,"src":"1485:11:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24292,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24243,"src":"1455:21:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1477:7:94","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":5043,"src":"1455:29:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1455:42:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1427:70:94"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24297,"name":"targetTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24291,"src":"1511:17:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":24298,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24248,"src":"1531:12:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1511:32:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24307,"nodeType":"IfStatement","src":"1507:133:94","trueBody":{"id":24306,"nodeType":"Block","src":"1545:95:94","statements":[{"errorCall":{"arguments":[{"id":24301,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24246,"src":"1584:11:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":24302,"name":"targetTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24291,"src":"1597:17:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24303,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24248,"src":"1616:12:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24300,"name":"AmountOutBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":924,"src":"1566:17:94","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$10576_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":24304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1566:63:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24305,"nodeType":"RevertStatement","src":"1559:70:94"}]}},{"eventCall":{"arguments":[{"id":24309,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24238,"src":"1754:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24310,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24241,"src":"1760:8:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":24311,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24243,"src":"1770:21:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24312,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24246,"src":"1793:11:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},{"id":24313,"name":"targetTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24291,"src":"1806:17:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24314,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24250,"src":"1825:9:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":24308,"name":"ProtocolFeeBurned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":914,"src":"1736:17:94","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_contract$_IERC20_$10576_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address)"}},"id":24315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1736:99:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24316,"nodeType":"EmitStatement","src":"1731:104:94"}]},"documentation":{"id":24236,"nodeType":"StructuredDocumentation","src":"759:34:94","text":"@inheritdoc IProtocolFeeBurner"},"functionSelector":"de557a32","id":24318,"implemented":true,"kind":"function","modifiers":[],"name":"burn","nameLocation":"807:4:94","nodeType":"FunctionDefinition","parameters":{"id":24253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24238,"mutability":"mutable","name":"pool","nameLocation":"829:4:94","nodeType":"VariableDeclaration","scope":24318,"src":"821:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24237,"name":"address","nodeType":"ElementaryTypeName","src":"821:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24241,"mutability":"mutable","name":"feeToken","nameLocation":"850:8:94","nodeType":"VariableDeclaration","scope":24318,"src":"843:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":24240,"nodeType":"UserDefinedTypeName","pathNode":{"id":24239,"name":"IERC20","nameLocations":["843:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"843:6:94"},"referencedDeclaration":10576,"src":"843:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":24243,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"876:21:94","nodeType":"VariableDeclaration","scope":24318,"src":"868:29:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24242,"name":"uint256","nodeType":"ElementaryTypeName","src":"868:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24246,"mutability":"mutable","name":"targetToken","nameLocation":"914:11:94","nodeType":"VariableDeclaration","scope":24318,"src":"907:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":24245,"nodeType":"UserDefinedTypeName","pathNode":{"id":24244,"name":"IERC20","nameLocations":["907:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"907:6:94"},"referencedDeclaration":10576,"src":"907:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":24248,"mutability":"mutable","name":"minAmountOut","nameLocation":"943:12:94","nodeType":"VariableDeclaration","scope":24318,"src":"935:20:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24247,"name":"uint256","nodeType":"ElementaryTypeName","src":"935:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24250,"mutability":"mutable","name":"recipient","nameLocation":"973:9:94","nodeType":"VariableDeclaration","scope":24318,"src":"965:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24249,"name":"address","nodeType":"ElementaryTypeName","src":"965:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24252,"mutability":"mutable","name":"deadline","nameLocation":"1000:8:94","nodeType":"VariableDeclaration","scope":24318,"src":"992:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24251,"name":"uint256","nodeType":"ElementaryTypeName","src":"992:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"811:203:94"},"returnParameters":{"id":24254,"nodeType":"ParameterList","parameters":[],"src":"1024:0:94"},"scope":24339,"src":"798:1044:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24327,"nodeType":"Block","src":"1895:36:94","statements":[{"expression":{"id":24325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24323,"name":"_tokenRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24232,"src":"1905:11:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24324,"name":"ratio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24320,"src":"1919:5:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1905:19:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24326,"nodeType":"ExpressionStatement","src":"1905:19:94"}]},"functionSelector":"e38e91f9","id":24328,"implemented":true,"kind":"function","modifiers":[],"name":"setTokenRatio","nameLocation":"1857:13:94","nodeType":"FunctionDefinition","parameters":{"id":24321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24320,"mutability":"mutable","name":"ratio","nameLocation":"1879:5:94","nodeType":"VariableDeclaration","scope":24328,"src":"1871:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24319,"name":"uint256","nodeType":"ElementaryTypeName","src":"1871:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1870:15:94"},"returnParameters":{"id":24322,"nodeType":"ParameterList","parameters":[],"src":"1895:0:94"},"scope":24339,"src":"1848:83:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24337,"nodeType":"Block","src":"1992:46:94","statements":[{"expression":{"id":24335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24333,"name":"transferFromEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24235,"src":"2002:19:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24334,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24330,"src":"2024:7:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2002:29:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24336,"nodeType":"ExpressionStatement","src":"2002:29:94"}]},"functionSelector":"7d341ad6","id":24338,"implemented":true,"kind":"function","modifiers":[],"name":"setTransferFromEnabled","nameLocation":"1946:22:94","nodeType":"FunctionDefinition","parameters":{"id":24331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24330,"mutability":"mutable","name":"enabled","nameLocation":"1974:7:94","nodeType":"VariableDeclaration","scope":24338,"src":"1969:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24329,"name":"bool","nodeType":"ElementaryTypeName","src":"1969:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1968:14:94"},"returnParameters":{"id":24332,"nodeType":"ParameterList","parameters":[],"src":"1992:0:94"},"scope":24339,"src":"1937:101:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":24340,"src":"544:1496:94","usedErrors":[924,927,10614],"usedEvents":[914]}],"src":"46:1995:94"},"id":94},"contracts/test/VaultMockForFeeSweeper.sol":{"ast":{"absolutePath":"contracts/test/VaultMockForFeeSweeper.sol","exportedSymbols":{"IAuthorizer":[1341],"IERC20":[10576],"IProtocolFeeController":[1955],"SafeERC20":[11066],"VaultMockForFeeSweeper":[24501]},"id":24502,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24341,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:95"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":24343,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24502,"sourceUnit":10577,"src":"72:72:95","symbolAliases":[{"foreign":{"id":24342,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10576,"src":"81:6:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":24345,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24502,"sourceUnit":11067,"src":"145:84:95","symbolAliases":[{"foreign":{"id":24344,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11066,"src":"154:9:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":24347,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24502,"sourceUnit":1342,"src":"230:91:95","symbolAliases":[{"foreign":{"id":24346,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"239:11:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":24349,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24502,"sourceUnit":1956,"src":"322:113:95","symbolAliases":[{"foreign":{"id":24348,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"331:22:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24350,"name":"IAuthorizer","nameLocations":["472:11:95"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"472:11:95"},"id":24351,"nodeType":"InheritanceSpecifier","src":"472:11:95"}],"canonicalName":"VaultMockForFeeSweeper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":24501,"linearizedBaseContracts":[24501,1341],"name":"VaultMockForFeeSweeper","nameLocation":"446:22:95","nodeType":"ContractDefinition","nodes":[{"global":false,"id":24355,"libraryName":{"id":24352,"name":"SafeERC20","nameLocations":["496:9:95"],"nodeType":"IdentifierPath","referencedDeclaration":11066,"src":"496:9:95"},"nodeType":"UsingForDirective","src":"490:27:95","typeName":{"id":24354,"nodeType":"UserDefinedTypeName","pathNode":{"id":24353,"name":"IERC20","nameLocations":["510:6:95"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"510:6:95"},"referencedDeclaration":10576,"src":"510:6:95","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}}},{"constant":false,"functionSelector":"022914a7","id":24359,"mutability":"mutable","name":"owners","nameLocation":"555:6:95","nodeType":"VariableDeclaration","scope":24501,"src":"523:38:95","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":24358,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":24356,"name":"address","nodeType":"ElementaryTypeName","src":"531:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"523:24:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":24357,"name":"bool","nodeType":"ElementaryTypeName","src":"542:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"body":{"id":24369,"nodeType":"Block","src":"582:42:95","statements":[{"expression":{"id":24367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":24362,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24359,"src":"592:6:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24365,"indexExpression":{"expression":{"id":24363,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"599:3:95","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"603:6:95","memberName":"sender","nodeType":"MemberAccess","src":"599:10:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"592:18:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":24366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"613:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"592:25:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24368,"nodeType":"ExpressionStatement","src":"592:25:95"}]},"id":24370,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24360,"nodeType":"ParameterList","parameters":[],"src":"579:2:95"},"returnParameters":{"id":24361,"nodeType":"ParameterList","parameters":[],"src":"582:0:95"},"scope":24501,"src":"568:56:95","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":24381,"nodeType":"Block","src":"651:95:95","statements":[{"expression":{"arguments":[{"baseExpression":{"id":24373,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24359,"src":"669:6:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24376,"indexExpression":{"expression":{"id":24374,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"676:3:95","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"680:6:95","memberName":"sender","nodeType":"MemberAccess","src":"676:10:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"669:18:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5661756c744d6f636b466f72466565537765657065723a204e6f7420616e206f776e6572","id":24377,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"689:38:95","typeDescriptions":{"typeIdentifier":"t_stringliteral_6a76a808db8d5a9ae25f2134deb57202faa17546f067bc3832f5e2fabe514229","typeString":"literal_string \"VaultMockForFeeSweeper: Not an owner\""},"value":"VaultMockForFeeSweeper: Not an owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6a76a808db8d5a9ae25f2134deb57202faa17546f067bc3832f5e2fabe514229","typeString":"literal_string \"VaultMockForFeeSweeper: Not an owner\""}],"id":24372,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"661:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24378,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"661:67:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24379,"nodeType":"ExpressionStatement","src":"661:67:95"},{"id":24380,"nodeType":"PlaceholderStatement","src":"738:1:95"}]},"id":24382,"name":"onlyOwner","nameLocation":"639:9:95","nodeType":"ModifierDefinition","parameters":{"id":24371,"nodeType":"ParameterList","parameters":[],"src":"648:2:95"},"src":"630:116:95","virtual":false,"visibility":"internal"},{"body":{"id":24395,"nodeType":"Block","src":"824:50:95","statements":[{"expression":{"arguments":[{"arguments":[{"id":24391,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"861:4:95","typeDescriptions":{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$24501","typeString":"contract VaultMockForFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$24501","typeString":"contract VaultMockForFeeSweeper"}],"id":24390,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"853:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24389,"name":"address","nodeType":"ElementaryTypeName","src":"853:7:95","typeDescriptions":{}}},"id":24392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"853:13:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24388,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"841:11:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthorizer_$1341_$","typeString":"type(contract IAuthorizer)"}},"id":24393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"841:26:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"functionReturnParameters":24387,"id":24394,"nodeType":"Return","src":"834:33:95"}]},"functionSelector":"aaabadc5","id":24396,"implemented":true,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"761:13:95","nodeType":"FunctionDefinition","parameters":{"id":24383,"nodeType":"ParameterList","parameters":[],"src":"774:2:95"},"returnParameters":{"id":24387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24386,"mutability":"mutable","name":"authorizer","nameLocation":"812:10:95","nodeType":"VariableDeclaration","scope":24396,"src":"800:22:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"},"typeName":{"id":24385,"nodeType":"UserDefinedTypeName","pathNode":{"id":24384,"name":"IAuthorizer","nameLocations":["800:11:95"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"800:11:95"},"referencedDeclaration":1341,"src":"800:11:95","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"799:24:95"},"scope":24501,"src":"752:122:95","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1340],"body":{"id":24411,"nodeType":"Block","src":"964:39:95","statements":[{"expression":{"baseExpression":{"id":24407,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24359,"src":"981:6:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24409,"indexExpression":{"id":24408,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24400,"src":"988:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"981:15:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":24406,"id":24410,"nodeType":"Return","src":"974:22:95"}]},"functionSelector":"9be2a884","id":24412,"implemented":true,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"889:10:95","nodeType":"FunctionDefinition","parameters":{"id":24403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24398,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24412,"src":"900:7:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24397,"name":"bytes32","nodeType":"ElementaryTypeName","src":"900:7:95","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":24400,"mutability":"mutable","name":"account","nameLocation":"917:7:95","nodeType":"VariableDeclaration","scope":24412,"src":"909:15:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24399,"name":"address","nodeType":"ElementaryTypeName","src":"909:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24402,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24412,"src":"926:7:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24401,"name":"address","nodeType":"ElementaryTypeName","src":"926:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"899:35:95"},"returnParameters":{"id":24406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24405,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24412,"src":"958:4:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24404,"name":"bool","nodeType":"ElementaryTypeName","src":"958:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"957:6:95"},"scope":24501,"src":"880:123:95","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":24425,"nodeType":"Block","src":"1084:39:95","statements":[{"expression":{"baseExpression":{"id":24421,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24359,"src":"1101:6:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24423,"indexExpression":{"id":24422,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24416,"src":"1108:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1101:15:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":24420,"id":24424,"nodeType":"Return","src":"1094:22:95"}]},"functionSelector":"c6a92e16","id":24426,"implemented":true,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"1018:10:95","nodeType":"FunctionDefinition","parameters":{"id":24417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24414,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24426,"src":"1029:7:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24413,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1029:7:95","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":24416,"mutability":"mutable","name":"account","nameLocation":"1046:7:95","nodeType":"VariableDeclaration","scope":24426,"src":"1038:15:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24415,"name":"address","nodeType":"ElementaryTypeName","src":"1038:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1028:26:95"},"returnParameters":{"id":24420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24419,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24426,"src":"1078:4:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24418,"name":"bool","nodeType":"ElementaryTypeName","src":"1078:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1077:6:95"},"scope":24501,"src":"1009:114:95","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":24439,"nodeType":"Block","src":"1182:38:95","statements":[{"expression":{"id":24437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":24433,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24359,"src":"1192:6:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24435,"indexExpression":{"id":24434,"name":"owner_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24428,"src":"1199:6:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1192:14:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":24436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1209:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1192:21:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24438,"nodeType":"ExpressionStatement","src":"1192:21:95"}]},"functionSelector":"7065cb48","id":24440,"implemented":true,"kind":"function","modifiers":[{"id":24431,"kind":"modifierInvocation","modifierName":{"id":24430,"name":"onlyOwner","nameLocations":["1172:9:95"],"nodeType":"IdentifierPath","referencedDeclaration":24382,"src":"1172:9:95"},"nodeType":"ModifierInvocation","src":"1172:9:95"}],"name":"addOwner","nameLocation":"1138:8:95","nodeType":"FunctionDefinition","parameters":{"id":24429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24428,"mutability":"mutable","name":"owner_","nameLocation":"1155:6:95","nodeType":"VariableDeclaration","scope":24440,"src":"1147:14:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24427,"name":"address","nodeType":"ElementaryTypeName","src":"1147:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1146:16:95"},"returnParameters":{"id":24432,"nodeType":"ParameterList","parameters":[],"src":"1182:0:95"},"scope":24501,"src":"1129:91:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24453,"nodeType":"Block","src":"1282:39:95","statements":[{"expression":{"id":24451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":24447,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24359,"src":"1292:6:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24449,"indexExpression":{"id":24448,"name":"owner_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24442,"src":"1299:6:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1292:14:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":24450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1309:5:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1292:22:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24452,"nodeType":"ExpressionStatement","src":"1292:22:95"}]},"functionSelector":"173825d9","id":24454,"implemented":true,"kind":"function","modifiers":[{"id":24445,"kind":"modifierInvocation","modifierName":{"id":24444,"name":"onlyOwner","nameLocations":["1272:9:95"],"nodeType":"IdentifierPath","referencedDeclaration":24382,"src":"1272:9:95"},"nodeType":"ModifierInvocation","src":"1272:9:95"}],"name":"removeOwner","nameLocation":"1235:11:95","nodeType":"FunctionDefinition","parameters":{"id":24443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24442,"mutability":"mutable","name":"owner_","nameLocation":"1255:6:95","nodeType":"VariableDeclaration","scope":24454,"src":"1247:14:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24441,"name":"address","nodeType":"ElementaryTypeName","src":"1247:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1246:16:95"},"returnParameters":{"id":24446,"nodeType":"ParameterList","parameters":[],"src":"1282:0:95"},"scope":24501,"src":"1226:95:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24467,"nodeType":"Block","src":"1432:61:95","statements":[{"expression":{"arguments":[{"arguments":[{"id":24463,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1480:4:95","typeDescriptions":{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$24501","typeString":"contract VaultMockForFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$24501","typeString":"contract VaultMockForFeeSweeper"}],"id":24462,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1472:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24461,"name":"address","nodeType":"ElementaryTypeName","src":"1472:7:95","typeDescriptions":{}}},"id":24464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1472:13:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24460,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"1449:22:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$1955_$","typeString":"type(contract IProtocolFeeController)"}},"id":24465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1449:37:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"functionReturnParameters":24459,"id":24466,"nodeType":"Return","src":"1442:44:95"}]},"functionSelector":"85f2dbd4","id":24468,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"1336:24:95","nodeType":"FunctionDefinition","parameters":{"id":24455,"nodeType":"ParameterList","parameters":[],"src":"1360:2:95"},"returnParameters":{"id":24459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24458,"mutability":"mutable","name":"protocolFeeController","nameLocation":"1409:21:95","nodeType":"VariableDeclaration","scope":24468,"src":"1386:44:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":24457,"nodeType":"UserDefinedTypeName","pathNode":{"id":24456,"name":"IProtocolFeeController","nameLocations":["1386:22:95"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"1386:22:95"},"referencedDeclaration":1955,"src":"1386:22:95","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"1385:46:95"},"scope":24501,"src":"1327:166:95","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":24473,"nodeType":"Block","src":"1547:2:95","statements":[]},"functionSelector":"8f4ab9ca","id":24474,"implemented":true,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"1508:20:95","nodeType":"FunctionDefinition","parameters":{"id":24471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24470,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24474,"src":"1529:7:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24469,"name":"address","nodeType":"ElementaryTypeName","src":"1529:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1528:9:95"},"returnParameters":{"id":24472,"nodeType":"ParameterList","parameters":[],"src":"1547:0:95"},"scope":24501,"src":"1499:50:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24499,"nodeType":"Block","src":"1654:78:95","statements":[{"expression":{"arguments":[{"id":24489,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24478,"src":"1683:9:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":24494,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1718:4:95","typeDescriptions":{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$24501","typeString":"contract VaultMockForFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$24501","typeString":"contract VaultMockForFeeSweeper"}],"id":24493,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1710:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24492,"name":"address","nodeType":"ElementaryTypeName","src":"1710:7:95","typeDescriptions":{}}},"id":24495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1710:13:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24490,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24481,"src":"1694:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":24491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1700:9:95","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10533,"src":"1694:15:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":24496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1694:30:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24486,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24481,"src":"1664:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"id":24488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1670:12:95","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10647,"src":"1664:18:95","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10576_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10576_$","typeString":"function (contract IERC20,address,uint256)"}},"id":24497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1664:61:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24498,"nodeType":"ExpressionStatement","src":"1664:61:95"}]},"functionSelector":"b53a70b2","id":24500,"implemented":true,"kind":"function","modifiers":[{"id":24484,"kind":"modifierInvocation","modifierName":{"id":24483,"name":"onlyOwner","nameLocations":["1644:9:95"],"nodeType":"IdentifierPath","referencedDeclaration":24382,"src":"1644:9:95"},"nodeType":"ModifierInvocation","src":"1644:9:95"}],"name":"withdrawProtocolFeesForToken","nameLocation":"1564:28:95","nodeType":"FunctionDefinition","parameters":{"id":24482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24476,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24500,"src":"1593:7:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24475,"name":"address","nodeType":"ElementaryTypeName","src":"1593:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24478,"mutability":"mutable","name":"recipient","nameLocation":"1610:9:95","nodeType":"VariableDeclaration","scope":24500,"src":"1602:17:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24477,"name":"address","nodeType":"ElementaryTypeName","src":"1602:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24481,"mutability":"mutable","name":"token","nameLocation":"1628:5:95","nodeType":"VariableDeclaration","scope":24500,"src":"1621:12:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"},"typeName":{"id":24480,"nodeType":"UserDefinedTypeName","pathNode":{"id":24479,"name":"IERC20","nameLocations":["1621:6:95"],"nodeType":"IdentifierPath","referencedDeclaration":10576,"src":"1621:6:95"},"referencedDeclaration":10576,"src":"1621:6:95","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10576","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1592:42:95"},"returnParameters":{"id":24485,"nodeType":"ParameterList","parameters":[],"src":"1654:0:95"},"scope":24501,"src":"1555:177:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":24502,"src":"437:1297:95","usedErrors":[10614],"usedEvents":[]}],"src":"46:1689:95"},"id":95},"contracts/utils/HyperSpotPricePrecompile.sol":{"ast":{"absolutePath":"contracts/utils/HyperSpotPricePrecompile.sol","exportedSymbols":{"HyperSpotPricePrecompile":[24562]},"id":24563,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24503,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"45:24:96"},{"abstract":false,"baseContracts":[],"canonicalName":"HyperSpotPricePrecompile","contractDependencies":[],"contractKind":"library","documentation":{"id":24504,"nodeType":"StructuredDocumentation","src":"71:296:96","text":" @notice Library to interact with the Hyperliquid spot price precompile.\n @dev The precompile is a special type of code, executed in the Hypercore's node. For more information, see\n https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore ."},"fullyImplemented":true,"id":24562,"linearizedBaseContracts":[24562],"name":"HyperSpotPricePrecompile","nameLocation":"376:24:96","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"ef89de08","id":24507,"mutability":"constant","name":"SPOT_PRICE_PRECOMPILE_ADDRESS","nameLocation":"431:29:96","nodeType":"VariableDeclaration","scope":24562,"src":"407:98:96","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24505,"name":"address","nodeType":"ElementaryTypeName","src":"407:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307830303030303030303030303030303030303030303030303030303030303030303030303030383038","id":24506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"463:42:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x0000000000000000000000000000000000000808"},"visibility":"public"},{"documentation":{"id":24508,"nodeType":"StructuredDocumentation","src":"512:70:96","text":"@notice The precompile had an error while fetching the spot price."},"errorSelector":"79827df5","id":24510,"name":"SpotPricePrecompileFailed","nameLocation":"593:25:96","nodeType":"ErrorDefinition","parameters":{"id":24509,"nodeType":"ParameterList","parameters":[],"src":"618:2:96"},"src":"587:34:96"},{"documentation":{"id":24511,"nodeType":"StructuredDocumentation","src":"627:35:96","text":"@notice The spot price is zero."},"errorSelector":"44526c24","id":24513,"name":"SpotPriceIsZero","nameLocation":"673:15:96","nodeType":"ErrorDefinition","parameters":{"id":24512,"nodeType":"ParameterList","parameters":[],"src":"688:2:96"},"src":"667:24:96"},{"body":{"id":24560,"nodeType":"Block","src":"766:375:96","statements":[{"assignments":[24521,24523],"declarations":[{"constant":false,"id":24521,"mutability":"mutable","name":"success","nameLocation":"782:7:96","nodeType":"VariableDeclaration","scope":24560,"src":"777:12:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24520,"name":"bool","nodeType":"ElementaryTypeName","src":"777:4:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":24523,"mutability":"mutable","name":"spotPriceBytes","nameLocation":"804:14:96","nodeType":"VariableDeclaration","scope":24560,"src":"791:27:96","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":24522,"name":"bytes","nodeType":"ElementaryTypeName","src":"791:5:96","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":24531,"initialValue":{"arguments":[{"arguments":[{"id":24528,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24515,"src":"874:9:96","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":24526,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"863:3:96","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":24527,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"867:6:96","memberName":"encode","nodeType":"MemberAccess","src":"863:10:96","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":24529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"863:21:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":24524,"name":"SPOT_PRICE_PRECOMPILE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24507,"src":"822:29:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":24525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"852:10:96","memberName":"staticcall","nodeType":"MemberAccess","src":"822:40:96","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":24530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"822:63:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"776:109:96"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":24534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24532,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24521,"src":"899:7:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":24533,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"910:5:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"899:16:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24539,"nodeType":"IfStatement","src":"895:81:96","trueBody":{"id":24538,"nodeType":"Block","src":"917:59:96","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24535,"name":"SpotPricePrecompileFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24510,"src":"938:25:96","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"938:27:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24537,"nodeType":"RevertStatement","src":"931:34:96"}]}},{"assignments":[24541],"declarations":[{"constant":false,"id":24541,"mutability":"mutable","name":"price","nameLocation":"993:5:96","nodeType":"VariableDeclaration","scope":24560,"src":"985:13:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24540,"name":"uint256","nodeType":"ElementaryTypeName","src":"985:7:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24549,"initialValue":{"arguments":[{"id":24544,"name":"spotPriceBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24523,"src":"1012:14:96","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":24546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1029:7:96","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":24545,"name":"uint256","nodeType":"ElementaryTypeName","src":"1029:7:96","typeDescriptions":{}}}],"id":24547,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1028:9:96","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":24542,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1001:3:96","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":24543,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1005:6:96","memberName":"decode","nodeType":"MemberAccess","src":"1001:10:96","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":24548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1001:37:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"985:53:96"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24550,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24541,"src":"1052:5:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":24551,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1061:1:96","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1052:10:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24557,"nodeType":"IfStatement","src":"1048:65:96","trueBody":{"id":24556,"nodeType":"Block","src":"1064:49:96","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24553,"name":"SpotPriceIsZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24513,"src":"1085:15:96","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1085:17:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24555,"nodeType":"RevertStatement","src":"1078:24:96"}]}},{"expression":{"id":24558,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24541,"src":"1129:5:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24519,"id":24559,"nodeType":"Return","src":"1122:12:96"}]},"id":24561,"implemented":true,"kind":"function","modifiers":[],"name":"spotPrice","nameLocation":"706:9:96","nodeType":"FunctionDefinition","parameters":{"id":24516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24515,"mutability":"mutable","name":"pairIndex","nameLocation":"723:9:96","nodeType":"VariableDeclaration","scope":24561,"src":"716:16:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":24514,"name":"uint32","nodeType":"ElementaryTypeName","src":"716:6:96","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"715:18:96"},"returnParameters":{"id":24519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24518,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24561,"src":"757:7:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24517,"name":"uint256","nodeType":"ElementaryTypeName","src":"757:7:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"756:9:96"},"scope":24562,"src":"697:444:96","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":24563,"src":"368:775:96","usedErrors":[24510,24513],"usedEvents":[]}],"src":"45:1099:96"},"id":96},"contracts/utils/HyperTokenInfoPrecompile.sol":{"ast":{"absolutePath":"contracts/utils/HyperTokenInfoPrecompile.sol","exportedSymbols":{"HyperTokenInfoPrecompile":[24631]},"id":24632,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24564,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"45:24:97"},{"abstract":false,"baseContracts":[],"canonicalName":"HyperTokenInfoPrecompile","contractDependencies":[],"contractKind":"library","documentation":{"id":24565,"nodeType":"StructuredDocumentation","src":"71:296:97","text":" @notice Library to interact with the Hyperliquid token info precompile.\n @dev The precompile is a special type of code, executed in the Hypercore's node. For more information, see\n https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore ."},"fullyImplemented":true,"id":24631,"linearizedBaseContracts":[24631],"name":"HyperTokenInfoPrecompile","nameLocation":"376:24:97","nodeType":"ContractDefinition","nodes":[{"canonicalName":"HyperTokenInfoPrecompile.HyperTokenInfo","id":24583,"members":[{"constant":false,"id":24567,"mutability":"mutable","name":"name","nameLocation":"518:4:97","nodeType":"VariableDeclaration","scope":24583,"src":"511:11:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":24566,"name":"string","nodeType":"ElementaryTypeName","src":"511:6:97","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":24570,"mutability":"mutable","name":"spots","nameLocation":"541:5:97","nodeType":"VariableDeclaration","scope":24583,"src":"532:14:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint64_$dyn_storage_ptr","typeString":"uint64[]"},"typeName":{"baseType":{"id":24568,"name":"uint64","nodeType":"ElementaryTypeName","src":"532:6:97","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":24569,"nodeType":"ArrayTypeName","src":"532:8:97","typeDescriptions":{"typeIdentifier":"t_array$_t_uint64_$dyn_storage_ptr","typeString":"uint64[]"}},"visibility":"internal"},{"constant":false,"id":24572,"mutability":"mutable","name":"deployerTradingFeeShare","nameLocation":"563:23:97","nodeType":"VariableDeclaration","scope":24583,"src":"556:30:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":24571,"name":"uint64","nodeType":"ElementaryTypeName","src":"556:6:97","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":24574,"mutability":"mutable","name":"deployer","nameLocation":"604:8:97","nodeType":"VariableDeclaration","scope":24583,"src":"596:16:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24573,"name":"address","nodeType":"ElementaryTypeName","src":"596:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24576,"mutability":"mutable","name":"evmContract","nameLocation":"630:11:97","nodeType":"VariableDeclaration","scope":24583,"src":"622:19:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24575,"name":"address","nodeType":"ElementaryTypeName","src":"622:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24578,"mutability":"mutable","name":"szDecimals","nameLocation":"657:10:97","nodeType":"VariableDeclaration","scope":24583,"src":"651:16:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24577,"name":"uint8","nodeType":"ElementaryTypeName","src":"651:5:97","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":24580,"mutability":"mutable","name":"weiDecimals","nameLocation":"683:11:97","nodeType":"VariableDeclaration","scope":24583,"src":"677:17:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24579,"name":"uint8","nodeType":"ElementaryTypeName","src":"677:5:97","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":24582,"mutability":"mutable","name":"evmExtraWeiDecimals","nameLocation":"709:19:97","nodeType":"VariableDeclaration","scope":24583,"src":"704:24:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"},"typeName":{"id":24581,"name":"int8","nodeType":"ElementaryTypeName","src":"704:4:97","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"visibility":"internal"}],"name":"HyperTokenInfo","nameLocation":"486:14:97","nodeType":"StructDefinition","scope":24631,"src":"479:256:97","visibility":"public"},{"constant":true,"functionSelector":"19dd39d3","id":24586,"mutability":"constant","name":"TOKEN_INFO_PRECOMPILE_ADDRESS","nameLocation":"765:29:97","nodeType":"VariableDeclaration","scope":24631,"src":"741:98:97","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24584,"name":"address","nodeType":"ElementaryTypeName","src":"741:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307830303030303030303030303030303030303030303030303030303030303030303030303030383043","id":24585,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"797:42:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x000000000000000000000000000000000000080C"},"visibility":"public"},{"documentation":{"id":24587,"nodeType":"StructuredDocumentation","src":"846:70:97","text":"@notice The precompile had an error while fetching the token info."},"errorSelector":"61c18134","id":24589,"name":"TokenInfoPrecompileFailed","nameLocation":"927:25:97","nodeType":"ErrorDefinition","parameters":{"id":24588,"nodeType":"ParameterList","parameters":[],"src":"952:2:97"},"src":"921:34:97"},{"body":{"id":24629,"nodeType":"Block","src":"1030:320:97","statements":[{"assignments":[24597,24599],"declarations":[{"constant":false,"id":24597,"mutability":"mutable","name":"success","nameLocation":"1046:7:97","nodeType":"VariableDeclaration","scope":24629,"src":"1041:12:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24596,"name":"bool","nodeType":"ElementaryTypeName","src":"1041:4:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":24599,"mutability":"mutable","name":"out","nameLocation":"1068:3:97","nodeType":"VariableDeclaration","scope":24629,"src":"1055:16:97","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":24598,"name":"bytes","nodeType":"ElementaryTypeName","src":"1055:5:97","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":24607,"initialValue":{"arguments":[{"arguments":[{"id":24604,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24591,"src":"1127:10:97","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":24602,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1116:3:97","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":24603,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1120:6:97","memberName":"encode","nodeType":"MemberAccess","src":"1116:10:97","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":24605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1116:22:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":24600,"name":"TOKEN_INFO_PRECOMPILE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24586,"src":"1075:29:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":24601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1105:10:97","memberName":"staticcall","nodeType":"MemberAccess","src":"1075:40:97","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":24606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1075:64:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1040:99:97"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":24610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24608,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24597,"src":"1153:7:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":24609,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1164:5:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1153:16:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24615,"nodeType":"IfStatement","src":"1149:81:97","trueBody":{"id":24614,"nodeType":"Block","src":"1171:59:97","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24611,"name":"TokenInfoPrecompileFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24589,"src":"1192:25:97","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1192:27:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24613,"nodeType":"RevertStatement","src":"1185:34:97"}]}},{"assignments":[24618],"declarations":[{"constant":false,"id":24618,"mutability":"mutable","name":"tokenInfo","nameLocation":"1261:9:97","nodeType":"VariableDeclaration","scope":24629,"src":"1239:31:97","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HyperTokenInfo_$24583_memory_ptr","typeString":"struct HyperTokenInfoPrecompile.HyperTokenInfo"},"typeName":{"id":24617,"nodeType":"UserDefinedTypeName","pathNode":{"id":24616,"name":"HyperTokenInfo","nameLocations":["1239:14:97"],"nodeType":"IdentifierPath","referencedDeclaration":24583,"src":"1239:14:97"},"referencedDeclaration":24583,"src":"1239:14:97","typeDescriptions":{"typeIdentifier":"t_struct$_HyperTokenInfo_$24583_storage_ptr","typeString":"struct HyperTokenInfoPrecompile.HyperTokenInfo"}},"visibility":"internal"}],"id":24625,"initialValue":{"arguments":[{"id":24621,"name":"out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24599,"src":"1284:3:97","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":24622,"name":"HyperTokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24583,"src":"1290:14:97","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_HyperTokenInfo_$24583_storage_ptr_$","typeString":"type(struct HyperTokenInfoPrecompile.HyperTokenInfo storage pointer)"}}],"id":24623,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1289:16:97","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_HyperTokenInfo_$24583_storage_ptr_$","typeString":"type(struct HyperTokenInfoPrecompile.HyperTokenInfo storage pointer)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_struct$_HyperTokenInfo_$24583_storage_ptr_$","typeString":"type(struct HyperTokenInfoPrecompile.HyperTokenInfo storage pointer)"}],"expression":{"id":24619,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1273:3:97","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":24620,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1277:6:97","memberName":"decode","nodeType":"MemberAccess","src":"1273:10:97","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":24624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1273:33:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_HyperTokenInfo_$24583_memory_ptr","typeString":"struct HyperTokenInfoPrecompile.HyperTokenInfo memory"}},"nodeType":"VariableDeclarationStatement","src":"1239:67:97"},{"expression":{"expression":{"id":24626,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24618,"src":"1323:9:97","typeDescriptions":{"typeIdentifier":"t_struct$_HyperTokenInfo_$24583_memory_ptr","typeString":"struct HyperTokenInfoPrecompile.HyperTokenInfo memory"}},"id":24627,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1333:10:97","memberName":"szDecimals","nodeType":"MemberAccess","referencedDeclaration":24578,"src":"1323:20:97","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":24595,"id":24628,"nodeType":"Return","src":"1316:27:97"}]},"id":24630,"implemented":true,"kind":"function","modifiers":[],"name":"szDecimals","nameLocation":"970:10:97","nodeType":"FunctionDefinition","parameters":{"id":24592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24591,"mutability":"mutable","name":"tokenIndex","nameLocation":"988:10:97","nodeType":"VariableDeclaration","scope":24630,"src":"981:17:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":24590,"name":"uint32","nodeType":"ElementaryTypeName","src":"981:6:97","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"980:19:97"},"returnParameters":{"id":24595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24594,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24630,"src":"1023:5:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24593,"name":"uint8","nodeType":"ElementaryTypeName","src":"1023:5:97","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1022:7:97"},"scope":24631,"src":"961:389:97","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":24632,"src":"368:984:97","usedErrors":[24589],"usedEvents":[]}],"src":"45:1308:97"},"id":97}},"contracts":{"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"IAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Simple interface for permissioned calling of external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":\"IAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"IRateProvider":{"abi":[{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getRate()":"679aefce"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"rate\":\"The current token rate\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"}},\"notice\":\"General interface for token exchange rates.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":\"IRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol":{"IVersion":{"abi":[{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"version()\":{\"details\":\"For standard Balancer contracts, returns a JSON representation of the contract version containing name, version number and task ID. See real examples in the deployment repo; local tests just use plain text strings.\",\"returns\":{\"_0\":\"version The version string corresponding to the current deployed contract\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"version()\":{\"notice\":\"Return arbitrary text representing the version of a contract.\"}},\"notice\":\"Simple interface to retrieve the version of a deployed contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":\"IVersion\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"IBalancerContractRegistry":{"abi":[{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressNotRegistered","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractAliasInUseAsName","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAlreadyDeprecated","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractNameInUseAsAlias","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameNotRegistered","type":"error"},{"inputs":[],"name":"InvalidContractAlias","type":"error"},{"inputs":[],"name":"InvalidContractName","type":"error"},{"inputs":[],"name":"ZeroContractAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeprecated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"contractAlias","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAliasUpdated","type":"event"},{"inputs":[{"internalType":"string","name":"contractAlias","type":"string"},{"internalType":"address","name":"existingContract","type":"address"}],"name":"addOrUpdateBalancerContractAlias","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"deprecateBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"deregisterBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"getBalancerContract","outputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"getBalancerContractInfo","outputs":[{"components":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"bool","name":"isRegistered","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"}],"internalType":"struct IBalancerContractRegistry.ContractInfo","name":"info","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"isActiveBalancerContract","outputs":[{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"isTrustedRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"registerBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addOrUpdateBalancerContractAlias(string,address)":"2967af96","deprecateBalancerContract(address)":"44969a9c","deregisterBalancerContract(string)":"c7f90793","getBalancerContract(uint8,string)":"41d8c0bb","getBalancerContractInfo(address)":"8554c327","isActiveBalancerContract(uint8,address)":"ae2733a4","isTrustedRouter(address)":"264e97e0","registerBalancerContract(uint8,string,address)":"e0376ab4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractAliasInUseAsName\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAlreadyDeprecated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractNameInUseAsAlias\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractAlias\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractName\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroContractAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAliasUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"existingContract\",\"type\":\"address\"}],\"name\":\"addOrUpdateBalancerContractAlias\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"deprecateBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"deregisterBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"getBalancerContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"getBalancerContractInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"internalType\":\"struct IBalancerContractRegistry.ContractInfo\",\"name\":\"info\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"isActiveBalancerContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"isTrustedRouter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"registerBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"details\":\"Both names and addresses must be unique in the primary registration mapping. Though there are two mappings to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent name => address => state mapping.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractType\":\"The contract type, provided for documentation purposes\"}}],\"ContractAddressNotRegistered(address)\":[{\"details\":\"A contract being deprecated was never registered, or the target of an alias isn't a previously registered contract.\",\"params\":{\"contractAddress\":\"The address of the contract that was not registered\"}}],\"ContractAliasInUseAsName(uint8,string)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractName\":\"The name of the previously registered contract (and proposed alias)\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractAlreadyDeprecated(address)\":[{\"params\":{\"contractAddress\":\"The address of the previously deprecated contract\"}}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"details\":\"Note that names must be unique; it is not possible to register two contracts with the same name and different types, or the same name and different addresses.\",\"params\":{\"contractName\":\"The name of the previously registered contract\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractNameInUseAsAlias(string,address)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractName\":\"The name of the previously registered contract\"}}],\"ContractNameNotRegistered(string)\":[{\"params\":{\"contractName\":\"The name of the unregistered contract\"}}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"details\":\"This sets the `isActive` flag to false.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"BalancerContractDeregistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deregistered\",\"contractName\":\"The name of the contract being deregistered\",\"contractType\":\"The type of contract being deregistered\"}},\"BalancerContractRegistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being registered\",\"contractName\":\"The name of the contract being registered\",\"contractType\":\"The type of contract being registered\"}},\"ContractAliasUpdated(string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deprecated\",\"contractAlias\":\"The alias name\"}}},\"kind\":\"dev\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"details\":\"This is a permissioned function to support querying by a contract alias. For instance, we might create a `WeightedPool` alias meaning the \\\"latest\\\" version of the `WeightedPoolFactory`, so that off-chain users don't need to track specific versions. Once added, an alias can also be updated to point to a different address (e.g., when migrating from the v2 to the v3 weighted pool).\",\"params\":{\"contractAlias\":\"An alternate name that can be used to fetch a contract address\",\"existingContract\":\"The target address of the contract alias\"}},\"deprecateBalancerContract(address)\":{\"details\":\"This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are enforced unique, so either the name or address could be specified in principle.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"deregisterBalancerContract(string)\":{\"details\":\"This is a permissioned function, and makes it possible to correct errors without complex update logic. If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete it, and register it again with the correct data. It must start with the name, as this is the registry key, required for complete deletion. Note that there might still be an alias targeting the address being deleted, but accessing it will just return inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to the correct address.\",\"params\":{\"contractName\":\"The name of the contract being deprecated (cannot be an alias)\"}},\"getBalancerContract(uint8,string)\":{\"details\":\"This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias (e.g., `WeightedPool`).\",\"params\":{\"contractName\":\"The name of the contract\",\"contractType\":\"The type of the contract\"},\"returns\":{\"contractAddress\":\"The address of the associated contract, if registered, or zero\",\"isActive\":\"True if the contract was registered and not deprecated\"}},\"getBalancerContractInfo(address)\":{\"params\":{\"contractAddress\":\"The address of the associated contract\"},\"returns\":{\"info\":\"ContractInfo struct corresponding to the address\"}},\"isActiveBalancerContract(uint8,address)\":{\"params\":{\"contractAddress\":\"The address of the contract\",\"contractType\":\"The type of contract\"},\"returns\":{\"isActive\":\"True if the given address is a registered and active contract of the specified type\"}},\"registerBalancerContract(uint8,string,address)\":{\"details\":\"This is a permissioned function, and does only basic validation of the address (non-zero) and the name (not blank). Governance must ensure this is called with valid information. Emits the `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or already in use.\",\"params\":{\"contractAddress\":\"The address of the contract\",\"contractName\":\"A text description of the contract, usually the deployed version (e.g., \\\"v3-pool-weighted\\\")\",\"contractType\":\"The type of contract being registered\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"notice\":\"A contract has already been registered under the given address.\"}],\"ContractAddressNotRegistered(address)\":[{\"notice\":\"An operation that requires a valid contract specified an unrecognized address.\"}],\"ContractAliasInUseAsName(uint8,string)\":[{\"notice\":\"The proposed alias has already been registered as a contract.\"}],\"ContractAlreadyDeprecated(address)\":[{\"notice\":\"Contracts can only be deprecated once.\"}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"notice\":\"A contract has already been registered under the given name.\"}],\"ContractNameInUseAsAlias(string,address)\":[{\"notice\":\"The proposed contract name has already been added as an alias.\"}],\"ContractNameNotRegistered(string)\":[{\"notice\":\"Thrown when attempting to deregister a contract that was not previously registered.\"}],\"InvalidContractAlias()\":[{\"notice\":\"Cannot add an empty string as an alias.\"}],\"InvalidContractName()\":[{\"notice\":\"Cannot register (or deregister) a contract with an empty string as a name.\"}],\"ZeroContractAddress()\":[{\"notice\":\"Cannot register or deprecate contracts, or add an alias targeting the zero address.\"}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"notice\":\"Emitted when a registered contract is deprecated.\"},\"BalancerContractDeregistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is deregistered (deleted).\"},\"BalancerContractRegistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is registered.\"},\"ContractAliasUpdated(string,address)\":{\"notice\":\"Emitted when an alias is added or updated.\"}},\"kind\":\"user\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"notice\":\"Add an alias for a registered contract.\"},\"deprecateBalancerContract(address)\":{\"notice\":\"Deprecate an official Balancer contract.\"},\"deregisterBalancerContract(string)\":{\"notice\":\"Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"},\"getBalancerContract(uint8,string)\":{\"notice\":\"Look up a registered contract by type and name.\"},\"getBalancerContractInfo(address)\":{\"notice\":\"Look up complete information about a registered contract by address.\"},\"isActiveBalancerContract(uint8,address)\":{\"notice\":\"Determine whether an address is an official contract of the specified type.\"},\"isTrustedRouter(address)\":{\"notice\":\"Returns `true` if the given address is an active contract under the ROUTER type.\"},\"registerBalancerContract(uint8,string,address)\":{\"notice\":\"Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":\"IBalancerContractRegistry\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol":{"IBalancerFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BurnPathDoesNotExist","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"inputs":[],"name":"TargetTokenOutMismatch","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"feeToken","type":"address"}],"name":"getBurnPath","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"}],"internalType":"struct IBalancerFeeBurner.SwapPathStep[]","name":"steps","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"}],"internalType":"struct IBalancerFeeBurner.SwapPathStep[]","name":"steps","type":"tuple[]"}],"name":"setBurnPath","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","getBurnPath(address)":"c1cfb02a","setBurnPath(address,(address,address)[])":"e3746cb2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BurnPathDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetTokenOutMismatch\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"getBurnPath\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"internalType\":\"struct IBalancerFeeBurner.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"internalType\":\"struct IBalancerFeeBurner.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"}],\"name\":\"setBurnPath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}},\"getBurnPath(address)\":{\"params\":{\"feeToken\":\"The fee token to get the path for\"},\"returns\":{\"steps\":\"The steps in the burn path\"}},\"setBurnPath(address,(address,address)[])\":{\"details\":\"This is the sequence of swaps required to convert the `feeToken` to the `targetToken`. This is a permissioned function.\",\"params\":{\"feeToken\":\"The fee token to set the path for\",\"steps\":\"The steps in the burn path\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BurnPathDoesNotExist()\":[{\"notice\":\"Burn path not set for the fee token.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}],\"TargetTokenOutMismatch()\":[{\"notice\":\"The last token in the path is not the same as the target token.\"}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"},\"getBurnPath(address)\":{\"notice\":\"Get the burn path for a fee token.\"},\"setBurnPath(address,(address,address)[])\":{\"notice\":\"Set the burn path for a fee token.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol\":\"IBalancerFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol\":{\"keccak256\":\"0xb5dc03fa23c5481ff4bebe9136c73e363a96e5beaf89d22f4eedb142331a0478\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d33361a79282a589f7b167caa04acb3b7eba0cc85b11a21f8504187151542ed6\",\"dweb:/ipfs/Qmc5WZFBfq9oZEQ4Zhv6VgJpeBJA7v68Jc1cKTJ5iFBuhM\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol":{"IComposableCow":{"abi":[{"inputs":[{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"},{"internalType":"bool","name":"dispatch","type":"bool"}],"name":"create","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"domainSeparator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"safe","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes32","name":"_domainSeparator","type":"bytes32"},{"internalType":"bytes32","name":"typeHash","type":"bytes32"},{"internalType":"bytes","name":"encodeData","type":"bytes"},{"internalType":"bytes","name":"payload","type":"bytes"}],"name":"isValidSafeSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"create((address,bytes32,bytes),bool)":"6bfae1ca","domainSeparator()":"f698da25","isValidSafeSignature(address,address,bytes32,bytes32,bytes32,bytes,bytes)":"53f00b14"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"dispatch\",\"type\":\"bool\"}],\"name\":\"create\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"safe\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_domainSeparator\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"typeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"encodeData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"isValidSafeSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"create((address,bytes32,bytes),bool)\":{\"params\":{\"dispatch\":\"If true, submit the order (always true in the CowSwapBurner)\",\"params\":\"Order parameters\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"create((address,bytes32,bytes),bool)\":{\"notice\":\"Construct a CoW order.\"},\"isValidSafeSignature(address,address,bytes32,bytes32,bytes32,bytes,bytes)\":{\"notice\":\"Delegated ERC-1271 signature validation with an enhanced context.\"}},\"notice\":\"Utility contract used to validate orders in the `CowSwapFeeBurner`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\":\"IComposableCow\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\":{\"keccak256\":\"0xc82721c94d5e741f168aed4c94dc6a9006cb3348bee7398a5e3fa9b7e28557bd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://784c16c17fb89736ec5be650668d81a548acec3ccc2073e2be0f79029f84f512\",\"dweb:/ipfs/QmSk9seqC2YEJqy5pPdXKjmhEKoQhXQdQXCN4f9R8jcXKX\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol":{"ICowConditionalOrder":{"abi":[{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"OrderNotValid","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollNever","type":"error"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtBlock","type":"error"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtEpoch","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryNextBlock","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes32","name":"domainSeparator","type":"bytes32"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"},{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"order","type":"tuple"}],"name":"verify","outputs":[],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))":"14a2a784"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"OrderNotValid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollNever\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtEpoch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryNextBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"domainSeparator\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"CoW Protocol Developers + mfw78 \",\"errors\":{\"OrderNotValid(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"PollNever(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be deleted\"}}],\"PollTryAtBlock(uint256,string)\":[{\"params\":{\"blockNumber\":\"The block number when polling should resume\",\"reason\":\"Text description of the reason it should be retried\"}}],\"PollTryAtEpoch(uint256,string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\",\"timestamp\":\"The unix timestamp when polling should resume\"}}],\"PollTryNextBlock(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\"}}]},\"kind\":\"dev\",\"methods\":{\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"details\":\"Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe. **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over the order verification logic, and to allow a watchtower / user to propose a discrete order without it being generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\",\"params\":{\"_hash\":\"`EIP712` order digest\",\"ctx\":\"See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\",\"domainSeparator\":\"`EIP712` domain separator\",\"offchainInput\":\"Type-specific data NOT known at time of creation for a specific discrete order (or zero)\",\"order\":\"The proposed discrete order's `GPv2Order` data struct\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` calling `isValidSignature`\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"OrderNotValid(string)\":[{\"notice\":\"This error is returned by the `getTradeableOrder` function if the order conditions are not met.\"}],\"PollNever(string)\":[{\"notice\":\"The conditional order should not be polled again (i.e., deleted).\"}],\"PollTryAtBlock(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific block number.\"}],\"PollTryAtEpoch(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific epoch (unix timestamp).\"}],\"PollTryNextBlock(string)\":[{\"notice\":\"Polling should be retried at the next block.\"}]},\"kind\":\"user\",\"methods\":{\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"notice\":\"Verify that a given discrete order is valid.\"}},\"notice\":\"Conditional Order Interface - verify a Cow order.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":\"ICowConditionalOrder\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol":{"ICowConditionalOrderGenerator":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"indexed":false,"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"}],"name":"ConditionalOrderCreated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"}],"name":"getTradeableOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getTradeableOrder(address,address,bytes32,bytes,bytes)":"b8296fc4","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"ConditionalOrderCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"}],\"name\":\"getTradeableOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"mfw78 \",\"events\":{\"ConditionalOrderCreated(address,(address,bytes32,bytes))\":{\"details\":\"Emitted when a new conditional order is created.\",\"params\":{\"owner\":\"The address that created the conditional order\",\"params\":\"The conditional order data\"}}},\"kind\":\"dev\",\"methods\":{\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"details\":\"**MUST** revert if the order conditions are not met.\",\"params\":{\"ctx\":\"The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\",\"offchainInput\":\"Off-chain input (similar to Balancer `userData`); currently unused\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` of the parent `isValidSignature` call\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"},\"returns\":{\"_0\":\"order Tradeable order for submission to the CoW Protocol API\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"notice\":\"Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\"}},\"notice\":\"Conditional Order Generator Interface\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":\"ICowConditionalOrderGenerator\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":{\"keccak256\":\"0x7b8f0149ba41d28c3d0cd956911816b083f7ccec35ddc7bb7fdb829c3c11d9b2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2d39a71115b9018711726b6c7498038e6d3a41338fa635c88cc8025b4e0e5f34\",\"dweb:/ipfs/QmYqnnkXCd1yjs6kpQgxNUotpudgN37X5FTFNFyKE62PMj\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol":{"ICowSwapFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"InterfaceIsSignatureVerifierMuxer","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"InvalidOrderParameters","type":"error"},{"inputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"actualStatus","type":"uint8"}],"name":"OrderHasUnexpectedStatus","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"OrderNotValid","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollNever","type":"error"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtBlock","type":"error"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtEpoch","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryNextBlock","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"indexed":false,"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"}],"name":"ConditionalOrderCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"OrderCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"OrderRetried","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"emergencyCancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"orderData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrderStatus","outputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"orderStatus","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"}],"name":"getTradeableOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"magicValue","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"retryOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes32","name":"domainSeparator","type":"bytes32"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"},{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"order","type":"tuple"}],"name":"verify","outputs":[],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","cancelOrder(address,address)":"60e092c6","emergencyCancelOrder(address,address)":"68bce712","getOrder(address)":"6eba2b13","getOrderStatus(address)":"6f9d75cd","getTradeableOrder(address,address,bytes32,bytes,bytes)":"b8296fc4","isValidSignature(bytes32,bytes)":"1626ba7e","retryOrder(address,uint256,uint256)":"d83b06a4","supportsInterface(bytes4)":"01ffc9a7","verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))":"14a2a784"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InterfaceIsSignatureVerifierMuxer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"InvalidOrderParameters\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"actualStatus\",\"type\":\"uint8\"}],\"name\":\"OrderHasUnexpectedStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"OrderNotValid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollNever\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtEpoch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryNextBlock\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"ConditionalOrderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"OrderCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"OrderRetried\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"cancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"emergencyCancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"orderData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrderStatus\",\"outputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"orderStatus\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"}],\"name\":\"getTradeableOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"magicValue\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"retryOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"domainSeparator\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"InvalidOrderParameters(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"OrderHasUnexpectedStatus(uint8)\":[{\"details\":\"`revertOrder` should only be called when the OrderStatus is `Failed`.\",\"params\":{\"actualStatus\":\"The status of the order when `revertOrder` was called\"}}],\"OrderNotValid(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"PollNever(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be deleted\"}}],\"PollTryAtBlock(uint256,string)\":[{\"params\":{\"blockNumber\":\"The block number when polling should resume\",\"reason\":\"Text description of the reason it should be retried\"}}],\"PollTryAtEpoch(uint256,string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\",\"timestamp\":\"The unix timestamp when polling should resume\"}}],\"PollTryNextBlock(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\"}}]},\"events\":{\"ConditionalOrderCreated(address,(address,bytes32,bytes))\":{\"details\":\"Emitted when a new conditional order is created.\",\"params\":{\"owner\":\"The address that created the conditional order\",\"params\":\"The conditional order data\"}},\"OrderCanceled(address,uint256,address)\":{\"params\":{\"exactAmountIn\":\"The number of tokens in the order\",\"receiver\":\"The account that received the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"OrderRetried(address,uint256,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the new order to be filled\",\"exactAmountIn\":\"The number of tokens in the order\",\"minAmountOut\":\"The minimum number of target tokens required\",\"tokenIn\":\"The token used to identify the order\"}},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}},\"cancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"emergencyCancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"getOrder(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"orderData\":\"The order data for the given token\"}},\"getOrderStatus(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"orderStatus\":\"The status of the order for the given token\"}},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"details\":\"**MUST** revert if the order conditions are not met.\",\"params\":{\"ctx\":\"The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\",\"offchainInput\":\"Off-chain input (similar to Balancer `userData`); currently unused\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` of the parent `isValidSignature` call\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"},\"returns\":{\"_0\":\"order Tradeable order for submission to the CoW Protocol API\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"Should return whether the signature provided is valid for the provided data\",\"params\":{\"hash\":\"Hash of the data to be signed\",\"signature\":\"Signature byte array associated with `hash`\"}},\"retryOrder(address,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the order to be filled.\",\"minAmountOut\":\"The minimum number of target tokens to receive (tokenOut)\",\"tokenIn\":\"The token used to identify the order\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"details\":\"Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe. **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over the order verification logic, and to allow a watchtower / user to propose a discrete order without it being generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\",\"params\":{\"_hash\":\"`EIP712` order digest\",\"ctx\":\"See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\",\"domainSeparator\":\"`EIP712` domain separator\",\"offchainInput\":\"Type-specific data NOT known at time of creation for a specific discrete order (or zero)\",\"order\":\"The proposed discrete order's `GPv2Order` data struct\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` calling `isValidSignature`\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"InterfaceIsSignatureVerifierMuxer()\":[{\"notice\":\"Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\"}],\"InvalidOrderParameters(string)\":[{\"notice\":\"The order parameters were invalid.\"}],\"OrderHasUnexpectedStatus(uint8)\":[{\"notice\":\"Attempt to revert an order that had not failed.\"}],\"OrderNotValid(string)\":[{\"notice\":\"This error is returned by the `getTradeableOrder` function if the order conditions are not met.\"}],\"PollNever(string)\":[{\"notice\":\"The conditional order should not be polled again (i.e., deleted).\"}],\"PollTryAtBlock(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific block number.\"}],\"PollTryAtEpoch(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific epoch (unix timestamp).\"}],\"PollTryNextBlock(string)\":[{\"notice\":\"Polling should be retried at the next block.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"OrderCanceled(address,uint256,address)\":{\"notice\":\"An order was canceled after failure.\"},\"OrderRetried(address,uint256,uint256,uint256)\":{\"notice\":\"An order was retried after failing.\"},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"},\"cancelOrder(address,address)\":{\"notice\":\"Return tokens from an order that has failed.\"},\"emergencyCancelOrder(address,address)\":{\"notice\":\"Emergency return tokens from an order regardless of status.\"},\"getOrder(address)\":{\"notice\":\"Get the order at the sell token.\"},\"getOrderStatus(address)\":{\"notice\":\"Get the status of the order at the sell token.\"},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"notice\":\"Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\"},\"retryOrder(address,uint256,uint256)\":{\"notice\":\"Retry an order that has not been filled yet and expired.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"notice\":\"Verify that a given discrete order is valid.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\":\"ICowSwapFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":{\"keccak256\":\"0x7b8f0149ba41d28c3d0cd956911816b083f7ccec35ddc7bb7fdb829c3c11d9b2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2d39a71115b9018711726b6c7498038e6d3a41338fa635c88cc8025b4e0e5f34\",\"dweb:/ipfs/QmYqnnkXCd1yjs6kpQgxNUotpudgN37X5FTFNFyKE62PMj\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\":{\"keccak256\":\"0xc3717c516d816bd012f47a18bfd69f7887ce262435c10be9748beb4b11aee033\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://237a9295364524846f26c1b92b523e6039b414d3b691f77ba55c6deefa4b14bc\",\"dweb:/ipfs/QmXYg1paW7kDeXCFkiunzSWSWT3DD2p15CHnJZzDyEQ6Jo\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@openzeppelin/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x66c7ec42c6c43712be2107a50ab4529379bc76a632b425babec698d9da921ac6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dce2778f0b638adfc5ba29c2c618c855fe725fa74a16846386aa1d56a834aa04\",\"dweb:/ipfs/QmPV9oWnzQdi58od266j62xvviavLNHqKLZfm6k2K1qy9E\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol":{"IHyperEVMRateProvider":{"abi":[{"inputs":[],"name":"getPairIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSpotPriceMultiplier","outputs":[{"internalType":"uint256","name":"spotPriceMultiplier","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getPairIndex()":"81bfa5d1","getSpotPriceMultiplier()":"a747d56f","getTokenIndex()":"295d3ee8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getPairIndex\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSpotPriceMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"spotPriceMultiplier\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenIndex\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getPairIndex()\":{\"details\":\"Hypercore has an index that identifies a pair of tokens to fetch the spot price.\",\"returns\":{\"_0\":\"pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\"}},\"getSpotPriceMultiplier()\":{\"details\":\"Hypercore returns the spot price with a different number of decimals for each token. So, to make this rate provider compatible with the vault, we need to scale the spot price to 18 decimals using this multiplier.\",\"returns\":{\"spotPriceMultiplier\":\"The spot price multiplier\"}},\"getTokenIndex()\":{\"returns\":{\"_0\":\"tokenIndex The index of the token on the Hyperliquid public API\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getPairIndex()\":{\"notice\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API.\"},\"getSpotPriceMultiplier()\":{\"notice\":\"The spot price multiplier.\"},\"getTokenIndex()\":{\"notice\":\"The index of the token on the Hyperliquid public API.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\":\"IHyperEVMRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\":{\"keccak256\":\"0xa2b797f83f03ad80f6512aecc2c1aed8d8aac3ffe968e0f696ec98ec4c200cd5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93ec4d5a140fed3f7885318e2816d2c498ec44730a320d491d47c990660bc268\",\"dweb:/ipfs/QmPK2pHX4dEYf77K6vyT1LMU83neZP5xe5AzcBsv7oJoLm\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol":{"IHyperEVMRateProviderFactory":{"abi":[{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"},{"internalType":"address","name":"rateProvider","type":"address"}],"name":"RateProviderAlreadyExists","type":"error"},{"inputs":[],"name":"RateProviderFactoryIsDisabled","type":"error"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"name":"RateProviderNotFound","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"rateProvider","type":"address"}],"name":"RateProviderCreated","type":"event"},{"anonymous":false,"inputs":[],"name":"RateProviderFactoryDisabled","type":"event"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"name":"create","outputs":[{"internalType":"contract IHyperEVMRateProvider","name":"rateProvider","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"name":"getRateProvider","outputs":[{"internalType":"contract IHyperEVMRateProvider","name":"rateProvider","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRateProviderVersion","outputs":[{"internalType":"uint256","name":"rateProviderVersion","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IHyperEVMRateProvider","name":"rateProvider","type":"address"}],"name":"isRateProviderFromFactory","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"create(uint32,uint32)":"568acb79","disable()":"2f2770db","getRateProvider(uint32,uint32)":"99b8113f","getRateProviderVersion()":"381c7a4f","isRateProviderFromFactory(address)":"19912f71"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"name\":\"RateProviderAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateProviderFactoryIsDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"name\":\"RateProviderNotFound\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pairIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"name\":\"RateProviderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"RateProviderFactoryDisabled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"contract IHyperEVMRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"name\":\"getRateProvider\",\"outputs\":[{\"internalType\":\"contract IHyperEVMRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProviderVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rateProviderVersion\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IHyperEVMRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"name\":\"isRateProviderFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"RateProviderAlreadyExists(uint32,uint32,address)\":[{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"rateProvider\":\"The address of the deployed rate provider\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"}}],\"RateProviderNotFound(uint32,uint32)\":[{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"}}]},\"events\":{\"RateProviderCreated(uint256,uint256,address)\":{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"rateProvider\":\"The address of the deployed rate provider\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"}}},\"kind\":\"dev\",\"methods\":{\"create(uint32,uint32)\":{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"},\"returns\":{\"rateProvider\":\"The address of the deployed rate provider\"}},\"disable()\":{\"details\":\"A disabled rate provider factory cannot create new rate providers and cannot be re-enabled. However, already created rate providers are still usable. This is a permissioned function.\"},\"getRateProvider(uint32,uint32)\":{\"details\":\"Reverts if the rate provider was not found for the given token and pair.\",\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"},\"returns\":{\"rateProvider\":\"The address of the rate provider for the given token and pair\"}},\"getRateProviderVersion()\":{\"returns\":{\"rateProviderVersion\":\"The rate provider version number\"}},\"isRateProviderFromFactory(address)\":{\"params\":{\"rateProvider\":\"The rate provider to check\"},\"returns\":{\"success\":\"True if the rate provider was created by this factory; false otherwise\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"RateProviderAlreadyExists(uint32,uint32,address)\":[{\"notice\":\"A rate provider already exists for the given token and pair.\"}],\"RateProviderFactoryIsDisabled()\":[{\"notice\":\"The factory is disabled.\"}],\"RateProviderNotFound(uint32,uint32)\":[{\"notice\":\"The rate provider was not found for the given token and pair.\"}]},\"events\":{\"RateProviderCreated(uint256,uint256,address)\":{\"notice\":\"A new HyperEVM Rate Provider was created.\"},\"RateProviderFactoryDisabled()\":{\"notice\":\"Emitted when the factory is disabled.\"}},\"kind\":\"user\",\"methods\":{\"create(uint32,uint32)\":{\"notice\":\"Creates a new HyperEVM Rate Provider for the given token and pair.\"},\"disable()\":{\"notice\":\"Disables the rate provider factory.\"},\"getRateProvider(uint32,uint32)\":{\"notice\":\"Gets the rate provider for the given token and pair.\"},\"getRateProviderVersion()\":{\"notice\":\"Returns a number representing the rate provider version.\"},\"isRateProviderFromFactory(address)\":{\"notice\":\"Checks whether the given rate provider was created by this factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol\":\"IHyperEVMRateProviderFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\":{\"keccak256\":\"0xa2b797f83f03ad80f6512aecc2c1aed8d8aac3ffe968e0f696ec98ec4c200cd5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93ec4d5a140fed3f7885318e2816d2c498ec44730a320d491d47c990660bc268\",\"dweb:/ipfs/QmPK2pHX4dEYf77K6vyT1LMU83neZP5xe5AzcBsv7oJoLm\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol\":{\"keccak256\":\"0x9b1db72d212780046987be96919d7bc0bf9829faac6d47820a5d5f038d356d96\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://157ccbf98c1631eb1efc363e9cfb64646744b6a0c1e17f021a49c1c3649ae382\",\"dweb:/ipfs/QmUVnwLEJ8qghiReoZKUApRDP7cp4EdxKj7vEeyrZ8s453\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol":{"IPoolHelperCommon":{"abi":[{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"InvalidPoolSetId","type":"error"},{"inputs":[],"name":"InvalidPoolSetManager","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"poolSetManager","type":"address"}],"name":"PoolSetManagerNotUnique","type":"error"},{"inputs":[],"name":"SenderIsNotPoolSetManager","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolRemovedFromSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"initialManager","type":"address"}],"name":"PoolSetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"PoolSetDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"PoolSetOwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPoolsToSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"destroyPoolSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getAllPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getManagerForPoolSet","outputs":[{"internalType":"address","name":"manager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextPoolSetId","outputs":[{"internalType":"uint256","name":"nextPoolSetId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getPoolCountForSet","outputs":[{"internalType":"uint256","name":"poolCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolSetIdForCaller","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"getPoolSetIdForManager","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isPoolInSet","outputs":[{"internalType":"bool","name":"poolInSet","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isValidPoolSetId","outputs":[{"internalType":"bool","name":"isValid","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePoolsFromSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferPoolSetOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addPoolsToSet(uint256,address[])":"ebf3a8d0","createPoolSet(address)":"e909c19b","createPoolSet(address,address[])":"3e035f9b","destroyPoolSet(uint256)":"7c1ec460","getAllPoolsInSet(uint256)":"94fc4058","getManagerForPoolSet(uint256)":"f167a1e6","getNextPoolSetId()":"c482e822","getPoolCountForSet(uint256)":"62d53462","getPoolSetIdForCaller()":"ce998aba","getPoolSetIdForManager(address)":"25c427ed","getPoolsInSet(uint256,uint256,uint256)":"8c60ebd0","isPoolInSet(address,uint256)":"182551da","isValidPoolSetId(uint256)":"255dae41","removePoolsFromSet(uint256,address[])":"2da55a1d","transferPoolSetOwnership(address)":"3700f987"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"InvalidPoolSetId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolSetManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolSetManager\",\"type\":\"address\"}],\"name\":\"PoolSetManagerNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderIsNotPoolSetManager\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"PoolSetCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"PoolSetDestroyed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"PoolSetOwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPoolsToSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"destroyPoolSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getAllPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getManagerForPoolSet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextPoolSetId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nextPoolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getPoolCountForSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSetIdForCaller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getPoolSetIdForManager\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isPoolInSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolInSet\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isValidPoolSetId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isValid\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePoolsFromSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferPoolSetOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"params\":{\"poolSetId\":\"Id of the set involved in the operation\"}}],\"InvalidPoolSetId(uint256)\":[{\"details\":\"This can mean the value is invalid, or it was never created, or it was destroyed.\",\"params\":{\"poolSetId\":\"The id of the invalid set\"}}],\"PoolAlreadyInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolSetManagerNotUnique(address)\":[{\"details\":\"Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\",\"params\":{\"poolSetManager\":\"Address of the manager that is already assigned to another pool set id\"}}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolRemovedFromSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetCreated(uint256,address)\":{\"details\":\"Pools are organized into separate sets, controlled by a manager, which can be changed independently.\",\"params\":{\"initialManager\":\"Address of the pool set manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetDestroyed(uint256,address)\":{\"params\":{\"manager\":\"The address of the set's last manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"details\":\"Managers can only control one pool set. Transfers to existing managers of other sets will revert.\",\"params\":{\"newManager\":\"Address of the new manager\",\"oldManager\":\"Address of the previous manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}},\"kind\":\"dev\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may add pools to a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"newPools\":\"List of pools to add\",\"poolSetId\":\"Id of the set to which the new pools belong\"}},\"createPoolSet(address)\":{\"details\":\"Convenience function to create a pool set with no initial pools. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\"}},\"createPoolSet(address,address[])\":{\"details\":\"The `newPools` list can be empty, in which case this will only create the set. Pools can then be added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\",\"newPools\":\"Set of pools to add to the set\"}},\"destroyPoolSet(uint256)\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may destroy sets, effectively removing control of any pools in the set from the associated manager. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set being destroyed\"}},\"getAllPoolsInSet(uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"pools\":\"List of pools\"}},\"getManagerForPoolSet(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"manager\":\"The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\"}},\"getNextPoolSetId()\":{\"returns\":{\"nextPoolSetId\":\"The pool set id that will be used on the next call of `createPoolSet`\"}},\"getPoolCountForSet(uint256)\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction. Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"poolCount\":\"The current number of pools in the set\"}},\"getPoolSetIdForCaller()\":{\"returns\":{\"poolSetId\":\"The numeric pool set id, or zero if the caller is not a pool set manager\"}},\"getPoolSetIdForManager(address)\":{\"returns\":{\"poolSetId\":\"The numeric pool set id, or zero if the address given is not a pool set manager\"}},\"getPoolsInSet(uint256,uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`). Reverts if the poolSetId is not valid.\",\"params\":{\"from\":\"Start index\",\"poolSetId\":\"Id of the set containing the pools\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"isPoolInSet(address,uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"pool\":\"Address of the pool to check\",\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"poolInSet\":\"True if the pool is in the given set, false otherwise\"}},\"isValidPoolSetId(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"isValid\":\"True if the poolSetId exists\"}},\"removePoolsFromSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may remove pools from a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set to which the pools belong\",\"pools\":\"List of pools to remove from the set\"}},\"transferPoolSetOwnership(address)\":{\"details\":\"This is a permissioned function. Only the current manager of a set can call this to set a new manager. Since managers can only control a single set, there is no need to specify the id in the call. Note that this is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts if the new manager address is zero or already the manager of a pool set.\",\"params\":{\"newManager\":\"The address of the new manager\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"InvalidPoolSetId(uint256)\":[{\"notice\":\"Pool set id associated with an operation is invalid.\"}],\"InvalidPoolSetManager()\":[{\"notice\":\"The initial manager of a pool set cannot be zero.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolNotInSet(address,uint256)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolSetManagerNotUnique(address)\":[{\"notice\":\"Pool set managers can only manage a single pool set.\"}],\"SenderIsNotPoolSetManager()\":[{\"notice\":\"Permissioned operations on pools can only be performed by the pool set manager.\"}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"notice\":\"The owner added a pool to the given set.\"},\"PoolRemovedFromSet(address,uint256)\":{\"notice\":\"The owner removed a pool from the given set.\"},\"PoolSetCreated(uint256,address)\":{\"notice\":\"The owner created a new pool set.\"},\"PoolSetDestroyed(uint256,address)\":{\"notice\":\"The owner destroyed a pool set.\"},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"notice\":\"The current manager of a pool set transferred ownership to a new address.\"}},\"kind\":\"user\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"createPoolSet(address)\":{\"notice\":\"Create a new empty set with an initial manager.\"},\"createPoolSet(address,address[])\":{\"notice\":\"Create a new set with an initial manager, optionally initialized with a set of pools.\"},\"destroyPoolSet(uint256)\":{\"notice\":\"Simple way to remove an entire set of pools from control of the helper function.\"},\"getAllPoolsInSet(uint256)\":{\"notice\":\"Get the full set of pools from a given set.\"},\"getManagerForPoolSet(uint256)\":{\"notice\":\"Get the manager address associated with a given poolSetId.\"},\"getNextPoolSetId()\":{\"notice\":\"Utility function to predict the next pool set id.\"},\"getPoolCountForSet(uint256)\":{\"notice\":\"Get the number of pools associated with the given set.\"},\"getPoolSetIdForCaller()\":{\"notice\":\"Get the pool set id associated with the caller.\"},\"getPoolSetIdForManager(address)\":{\"notice\":\"Get the pool set id associated with a given manager address.\"},\"getPoolsInSet(uint256,uint256,uint256)\":{\"notice\":\"Get a range of pools from a given set.\"},\"isPoolInSet(address,uint256)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"isValidPoolSetId(uint256)\":{\"notice\":\"Check whether a poolSetId has been created.\"},\"removePoolsFromSet(uint256,address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"transferPoolSetOwnership(address)\":{\"notice\":\"Transfer ownership of a pool set from the current manager to a new manager.\"}},\"notice\":\"Common interface for helper functions that operate on a subset of pools.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":\"IPoolHelperCommon\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xdb8365416c9dd9d7be16677c13819065511e9bc7705d6bad85fd52b65d3b3c39\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b90206982d126075b074f0a77ea9cb3ec173ed9fe9e4504b12d6807532b1b7ff\",\"dweb:/ipfs/QmYjKTu4Mrew94sSxfQ8jP4yT7wZFgghSRyB9A2kDdSy8X\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol":{"IPoolPauseHelper":{"abi":[{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"pausePools","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"pausePools(address[])":"a20dc529"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"pausePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Governance can add a set of pools to this contract, then grant pause permission to accounts here, which allows greater granularity than setting the permission directly on the Vault. Note that governance must grant this contract permission to pause pools from the Vault. Unpausing is not addressed here, and must still be done through the Vault.\",\"kind\":\"dev\",\"methods\":{\"pausePools(address[])\":{\"details\":\"This is a permissioned function. Governance must first grant this contract permission to call `pausePool` on the Vault, then grant another account permission to call `pausePools` here. Note that this is not necessarily the same account that can add or remove pools from the pausable list. Note that there is no `unpause`. This is a helper contract designed to react quickly to emergencies. Unpausing is a more deliberate action that should be performed by accounts approved by governance for this purpose, or by the individual pools' pause managers.\",\"params\":{\"pools\":\"List of pools to pause\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"pausePools(address[])\":{\"notice\":\"Pause a set of pools.\"}},\"notice\":\"Maintain a set of pools that can be paused from this helper contract, vs. directly from the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol\":\"IPoolPauseHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol\":{\"keccak256\":\"0x5d5225c4c283e407458f36d0a10770445b0bd570333fce8d1365af978e8d7829\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://27d0e427a303790222bb696a940882129bafcd3ff57215179d4434d6506b8372\",\"dweb:/ipfs/QmNvL9juq6FzUXHHEufHreckXsPupv2rJw2CC3EBZQiEY5\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol":{"IPoolSwapFeeHelper":{"abi":[{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolHasSwapManager","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"setStaticSwapFeePercentage(address,uint256)":"d15126ba"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolHasSwapManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Governance can add a set of pools to this contract, then grant swap fee setting permission to accounts on this contract, which allows greater granularity than setting the permission directly on the Vault. Note that governance must grant this contract permission to set swap fees from the Vault, and only pools that allow governance to set fees can be added (i.e., they must not have swap managers).\",\"errors\":{\"PoolHasSwapManager(address)\":[{\"details\":\"The swap manager is an exclusive role. If it is set to a non-zero value during pool registration, only the swap manager can change the fee. This helper can only set fees on pools that allow governance to grant this permission.\",\"params\":{\"pool\":\"Address of the pool being added\"}}]},\"kind\":\"dev\",\"methods\":{\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function. Governance must grant this contract permission to call `setStaticSwapFeePercentage` on the Vault. Note that since the swap manager is an exclusive role, the swap fee cannot be changed by governance if it is set, and the pool cannot be added to the set.\",\"params\":{\"pool\":\"The address of the pool\",\"swapFeePercentage\":\"The new swap fee percentage\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"PoolHasSwapManager(address)\":[{\"notice\":\"Cannot add a pool that has a swap manager.\"}]},\"kind\":\"user\",\"methods\":{\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Set the static swap fee percentage on a given pool.\"}},\"notice\":\"Maintain a set of pools whose static swap fee percentages can be changed from here, vs. from the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol\":\"IPoolSwapFeeHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol\":{\"keccak256\":\"0x28f0e2ffd4fda0cb7b1f55d368e5bf8672d6f907e0171674a8a93c7c65c4a29b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37bb56bb5e66cead63626efaacae7dad39f3fd725d001825db861f22aceb0124\",\"dweb:/ipfs/QmdNskvPgTo6R3AmuA3zp8vY9waoEbKsTPWHp5v6aAbhkE\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol":{"IProtocolFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"burn(address,address,uint256,address,uint256,address,uint256)":"de557a32"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":\"IProtocolFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol":{"IProtocolFeeHelper":{"abi":[{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Governance can add a set of pools to this contract, then grant permission to call protocol swap- or yield- setting functions here, which allows greater granularity than setting permissions directly on the fee controller. Note that governance must grant this contract permission to call the pool protocol fee setting functions on the controller.\",\"kind\":\"dev\",\"methods\":{\"setProtocolSwapFeePercentage(address,uint256)\":{\"details\":\"This contract must be granted permission to set swap and yield protocol fees, but governance can independently grant permission to call the swap and yield fee setters.\",\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\",\"pool\":\"The address of the pool\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"details\":\"This contract must be granted permission to set swap and yield protocol fees, but governance can independently grant permission to call the swap and yield fee setters.\",\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\",\"pool\":\"The address of the pool\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Set the protocol swap fee for a pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Set the protocol yield fee for a pool.\"}},\"notice\":\"Maintain a set of pools whose protocol fees can be set from this helper contract, vs. the fee controller.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol\":\"IProtocolFeeHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol\":{\"keccak256\":\"0x79b4a52c34d448b3a67d91d37319c08b2a2c45e1ef94c66f1102d1df05f672f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d85fcc28f6c2cfbeefdb307c551d8904f82b6c2fc3e5bc2e5deb111a6a1007f1\",\"dweb:/ipfs/QmWa96ZJajKfwhGemApEoFCpFmStKHaMLUaZwpTQjYjoF3\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol":{"IProtocolFeeSweeper":{"abi":[{"inputs":[],"name":"BurnerDidNotConsumeAllowance","type":"error"},{"inputs":[],"name":"InvalidFeeRecipient","type":"error"},{"inputs":[],"name":"InvalidProtocolFeeBurner","type":"error"},{"inputs":[],"name":"InvalidTargetToken","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerAlreadyAdded","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerNotAdded","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"UnsupportedProtocolFeeBurner","type":"error"},{"inputs":[],"name":"UnwrapIsNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"feeRecipient","type":"address"}],"name":"FeeRecipientSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"feeTokenAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeSwept","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TargetTokenSet","type":"event"},{"inputs":[{"internalType":"contract IProtocolFeeBurner","name":"protocolFeeBurner","type":"address"}],"name":"addProtocolFeeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFeeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTargetToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"isApprovedProtocolFeeBurner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"feeTokens","type":"address[]"}],"name":"recoverProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeBurner","name":"protocolFeeBurner","type":"address"}],"name":"removeProtocolFeeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feeRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"targetToken","type":"address"}],"name":"setTargetToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"contract IProtocolFeeBurner","name":"feeBurner","type":"address"}],"name":"sweepProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC4626","name":"feeToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"contract IProtocolFeeBurner","name":"feeBurner","type":"address"}],"name":"sweepProtocolFeesForWrappedToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addProtocolFeeBurner(address)":"e20c482f","getFeeRecipient()":"4ccb20c0","getProtocolFeeController()":"85f2dbd4","getTargetToken()":"80db0d51","isApprovedProtocolFeeBurner(address)":"9c5cee9b","recoverProtocolFees(address[])":"b0edcc53","removeProtocolFeeBurner(address)":"b11f061e","setFeeRecipient(address)":"e74b981b","setTargetToken(address)":"1b66cb00","sweepProtocolFeesForToken(address,address,uint256,uint256,address)":"b9746995","sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)":"88f6d2a4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BurnerDidNotConsumeAllowance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidFeeRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeBurner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTargetToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerNotAdded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"UnsupportedProtocolFeeBurner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnwrapIsNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"FeeRecipientSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeSwept\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TargetTokenSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"addProtocolFeeBurner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTargetToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"isApprovedProtocolFeeBurner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"feeTokens\",\"type\":\"address[]\"}],\"name\":\"recoverProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"removeProtocolFeeBurner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"setFeeRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"}],\"name\":\"setTargetToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"feeBurner\",\"type\":\"address\"}],\"name\":\"sweepProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC4626\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"feeBurner\",\"type\":\"address\"}],\"name\":\"sweepProtocolFeesForWrappedToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"BurnerDidNotConsumeAllowance()\":[{\"details\":\"The fee sweeper approves the burner to pull tokens. If it doesn't do so, revert to avoid a \\\"hanging\\\" approval that could be exploited later.\"}],\"ProtocolFeeBurnerAlreadyAdded(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of an approved protocol fee burner\"}}],\"ProtocolFeeBurnerNotAdded(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of a protocol fee burner to be removed from the allowlist\"}}],\"UnsupportedProtocolFeeBurner(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of the unsupported fee burner\"}}]},\"events\":{\"FeeRecipientSet(address)\":{\"params\":{\"feeRecipient\":\"The final destination of collected protocol fees\"}},\"ProtocolFeeBurnerAdded(address)\":{\"details\":\"`sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\",\"params\":{\"protocolFeeBurner\":\"The address of the approved protocol fee burner that was added\"}},\"ProtocolFeeBurnerRemoved(address)\":{\"details\":\"`sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\",\"params\":{\"protocolFeeBurner\":\"The address of the approved protocol fee burner that was removed\"}},\"ProtocolFeeSwept(address,address,uint256,address)\":{\"details\":\"This can happen if no target token or burner contract was specified, or the fee token is the target token.\",\"params\":{\"feeToken\":\"The token the fee was collected in (also the target token in this case; no swap necessary)\",\"feeTokenAmount\":\"The number of feeTokens\",\"pool\":\"The pool on which the fee was collected\",\"recipient\":\"The recipient of the fee tokens\"}},\"TargetTokenSet(address)\":{\"params\":{\"token\":\"The preferred token for receiving protocol fees\"}}},\"kind\":\"dev\",\"methods\":{\"addProtocolFeeBurner(address)\":{\"details\":\"This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol fee burners.\",\"params\":{\"protocolFeeBurner\":\"The address of an approved protocol fee burner to be added\"}},\"getFeeRecipient()\":{\"details\":\"Can be changed by `setFeeRecipient`.\",\"returns\":{\"_0\":\"feeRecipient The current fee recipient\"}},\"getProtocolFeeController()\":{\"details\":\"It is not immutable in the Vault, so we need to fetch it every time.\",\"returns\":{\"_0\":\"protocolFeeController The address of the current `ProtocolFeeController`\"}},\"getTargetToken()\":{\"details\":\"This is the token the burner will swap all fee tokens for. Can be changed by `setTargetToken`.\",\"returns\":{\"_0\":\"targetToken The current target token\"}},\"isApprovedProtocolFeeBurner(address)\":{\"params\":{\"protocolFeeBurner\":\"The address to be checked\"},\"returns\":{\"_0\":\"isApproved True if the given address is on the approved protocol fee burner allowlist\"}},\"recoverProtocolFees(address[])\":{\"details\":\"It will recover the full balance of all the tokens. This can only be called by the `feeRecipient`.\",\"params\":{\"feeTokens\":\"The tokens to recover\"}},\"removeProtocolFeeBurner(address)\":{\"details\":\"This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol fee burners.\",\"params\":{\"protocolFeeBurner\":\"The address of a protocol fee burner on the allowlist to be removed\"}},\"setFeeRecipient(address)\":{\"details\":\"This is a permissioned function.\",\"params\":{\"feeRecipient\":\"The address of the new fee recipient\"}},\"setTargetToken(address)\":{\"details\":\"This is the token for which the burner will attempt to swap all collected fee tokens.\",\"params\":{\"targetToken\":\"The address of the target token\"}},\"sweepProtocolFeesForToken(address,address,uint256,uint256,address)\":{\"details\":\"This will withdraw the fee token from the controller to this contract, and attempt to convert and forward the proceeds to the fee recipient. Note that this requires governance to grant this contract permission to call `withdrawProtocolFeesForToken` on the `ProtocolFeeController`. This is a permissioned call, since it involves a swap and a permissionless sweep could be triggered at times disadvantageous to the protocol (e.g., flash crashes). The general design is for an off-chain process to periodically collect fees from the Vault and check the protocol fee amounts available for withdrawal. Once these are greater than a threshold, compute the expected proceeds to determine the limits (amount and deadline), then call the sweeper to put in the order with the burner.\",\"params\":{\"deadline\":\"Deadline for the burn operation (swap), after which it will revert\",\"feeBurner\":\"The protocol fee burner to be used (or the zero address to fall back on direct transfer)\",\"feeToken\":\"The fee token in the pool\",\"minTargetTokenAmountOut\":\"The minimum number of target tokens to be received\",\"pool\":\"The pool that incurred the fees we're withdrawing\"}},\"sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)\":{\"params\":{\"deadline\":\"Deadline for the burn operation (swap), after which it will revert\",\"feeBurner\":\"The protocol fee burner to be used (or the zero address to fall back on direct transfer)\",\"feeToken\":\"The fee token in the pool\",\"minTargetTokenAmountOut\":\"The minimum number of target tokens to be received\",\"pool\":\"The pool that incurred the fees we're withdrawing\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BurnerDidNotConsumeAllowance()\":[{\"notice\":\"The burner did not consume its entire allowance.\"}],\"InvalidFeeRecipient()\":[{\"notice\":\"The fee recipient is invalid.\"}],\"InvalidProtocolFeeBurner()\":[{\"notice\":\"The protocol fee burner to be added is invalid.\"}],\"InvalidTargetToken()\":[{\"notice\":\"The target token is invalid.\"}],\"ProtocolFeeBurnerAlreadyAdded(address)\":[{\"notice\":\"Protocol fee burners can only be added to the allowlist once.\"}],\"ProtocolFeeBurnerNotAdded(address)\":[{\"notice\":\"Protocol fee burners must be added to the allowlist before being removed.\"}],\"UnsupportedProtocolFeeBurner(address)\":[{\"notice\":\"The specified fee burner has not been approved.\"}],\"UnwrapIsNotAllowed()\":[{\"notice\":\"Unwrapping is not allowed for the operation.\"}]},\"events\":{\"FeeRecipientSet(address)\":{\"notice\":\"Emitted when the fee recipient address is set or updated.\"},\"ProtocolFeeBurnerAdded(address)\":{\"notice\":\"Emitted when a burner is added to the protocol fee burner allowlist.\"},\"ProtocolFeeBurnerRemoved(address)\":{\"notice\":\"Emitted when a burner is removed from the protocol fee burner allowlist.\"},\"ProtocolFeeSwept(address,address,uint256,address)\":{\"notice\":\"Emitted when a fee token is transferred directly, vs. calling the burner.\"},\"TargetTokenSet(address)\":{\"notice\":\"Emitted when the target token is set or updated.\"}},\"kind\":\"user\",\"methods\":{\"addProtocolFeeBurner(address)\":{\"notice\":\"Add an approved fee burner to the allowlist.\"},\"getFeeRecipient()\":{\"notice\":\"Getter for the current fee recipient.\"},\"getProtocolFeeController()\":{\"notice\":\"Return the address of the current `ProtocolFeeController` from the Vault.\"},\"getTargetToken()\":{\"notice\":\"Getter for the target token.\"},\"isApprovedProtocolFeeBurner(address)\":{\"notice\":\"Check whether a given address corresponds to an approved protocol fee burner.\"},\"recoverProtocolFees(address[])\":{\"notice\":\"Retrieve any tokens \\\"stuck\\\" in this contract (e.g., dust, or failed conversions).\"},\"removeProtocolFeeBurner(address)\":{\"notice\":\"Remove a fee burner from the allowlist.\"},\"setFeeRecipient(address)\":{\"notice\":\"Update the fee recipient address.\"},\"setTargetToken(address)\":{\"notice\":\"Update the address of the target token.\"},\"sweepProtocolFeesForToken(address,address,uint256,uint256,address)\":{\"notice\":\"Withdraw, convert, and forward protocol fees for a given pool and token.\"},\"sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)\":{\"notice\":\"The same as `sweepProtocolFeesForToken`, but for wrapped tokens.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":\"IProtocolFeeSweeper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol":{"ITokenPairRegistry":{"abi":[{"inputs":[{"internalType":"address","name":"buffer","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"EmptyPath","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"address","name":"buffer","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"InvalidBufferPath","type":"error"},{"inputs":[{"internalType":"address","name":"poolOrBuffer","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"InvalidRemovePath","type":"error"},{"inputs":[{"internalType":"address","name":"path","type":"address"}],"name":"InvalidSimplePath","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"pathsLength","type":"uint256"}],"name":"PathAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"pathsLength","type":"uint256"}],"name":"PathRemoved","type":"event"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct SwapPathStep[]","name":"steps","type":"tuple[]"}],"name":"addPath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolOrBuffer","type":"address"}],"name":"addSimplePath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getPathAt","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct SwapPathStep[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getPathCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getPaths","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct SwapPathStep[][]","name":"","type":"tuple[][]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removePathAtIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolOrBuffer","type":"address"}],"name":"removeSimplePath","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addPath(address,(address,address,bool)[])":"815ca70f","addSimplePath(address)":"f335b520","getPathAt(address,address,uint256)":"057074ff","getPathCount(address,address)":"94ee0a3b","getPaths(address,address)":"7c7d370a","removePathAtIndex(address,address,uint256)":"32fffdbd","removeSimplePath(address)":"bc138aa3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"buffer\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyPath\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"buffer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"InvalidBufferPath\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolOrBuffer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"InvalidRemovePath\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"path\",\"type\":\"address\"}],\"name\":\"InvalidSimplePath\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pathsLength\",\"type\":\"uint256\"}],\"name\":\"PathAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pathsLength\",\"type\":\"uint256\"}],\"name\":\"PathRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"}],\"name\":\"addPath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolOrBuffer\",\"type\":\"address\"}],\"name\":\"addSimplePath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getPathAt\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct SwapPathStep[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"getPathCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"getPaths\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct SwapPathStep[][]\",\"name\":\"\",\"type\":\"tuple[][]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"removePathAtIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolOrBuffer\",\"type\":\"address\"}],\"name\":\"removeSimplePath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"BufferNotInitialized(address)\":[{\"params\":{\"buffer\":\"The address of the uninitialized buffer\"}}],\"InvalidBufferPath(address,address,address)\":[{\"params\":{\"buffer\":\"The address of the buffer\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}}],\"InvalidRemovePath(address,address,address)\":[{\"params\":{\"poolOrBuffer\":\"The address of the pool or buffer\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}}],\"InvalidSimplePath(address)\":[{\"params\":{\"path\":\"Pool or buffer address\"}}]},\"events\":{\"PathAdded(address,address,uint256)\":{\"params\":{\"pathsLength\":\"The number of paths added for the token pair\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}},\"PathRemoved(address,address,uint256)\":{\"params\":{\"pathsLength\":\"The number of paths associated with the token pair after the removal\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}}},\"kind\":\"dev\",\"methods\":{\"addPath(address,(address,address,bool)[])\":{\"details\":\"This function is permissioned. Use it to register boosted pool paths with leading / trailing buffer steps. The registry will validate that each step is valid (i.e. each pool step contains the `tokenIn` and `tokenOut`, and each buffer step has the correct wrapped / underlying token).\",\"params\":{\"steps\":\"An array of `SwapPathStep` structs representing the path steps to reach the output token\",\"tokenIn\":\"The address of the input token in the pair\"}},\"addSimplePath(address)\":{\"details\":\"This function is permissioned.\",\"params\":{\"poolOrBuffer\":\"The address of the pool or buffer\"}},\"getPathAt(address,address,uint256)\":{\"details\":\"Safe version; reverts if the index is out of bounds.\",\"params\":{\"index\":\"The index of the path in the list of paths for the token pair\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"},\"returns\":{\"_0\":\"The path at the specified index for the token pair\"}},\"getPathCount(address,address)\":{\"params\":{\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"},\"returns\":{\"_0\":\"The number of paths registered for the token pair\"}},\"getPaths(address,address)\":{\"params\":{\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"},\"returns\":{\"_0\":\"An array of path addresses registered for the token pair\"}},\"removePathAtIndex(address,address,uint256)\":{\"details\":\"This function is permissioned.\",\"params\":{\"index\":\"The index of the path to remove in the list of paths for the token pair\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}},\"removeSimplePath(address)\":{\"details\":\"This function is permissioned.\",\"params\":{\"poolOrBuffer\":\"The address of the pool or buffer\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BufferNotInitialized(address)\":[{\"notice\":\"The given buffer address does not correspond to an initialized buffer.\"}],\"EmptyPath()\":[{\"notice\":\"The path to add cannot be empty.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"Attempted to remove a path at an index beyond the registered length.\"}],\"InvalidBufferPath(address,address,address)\":[{\"notice\":\"The output token does not match the expected address in a wrap or unwrap operation.\"}],\"InvalidRemovePath(address,address,address)\":[{\"notice\":\"The given pool or buffer is not registered as a path for the token pair.\"}],\"InvalidSimplePath(address)\":[{\"notice\":\"The given address is not a valid pool or buffer.\"}]},\"events\":{\"PathAdded(address,address,uint256)\":{\"notice\":\"Emitted when a new token pair is added to the registry.\"},\"PathRemoved(address,address,uint256)\":{\"notice\":\"Emitted when an existing token pair is removed from the registry.\"}},\"kind\":\"user\",\"methods\":{\"addPath(address,(address,address,bool)[])\":{\"notice\":\"Adds an arbitrary path between `tokenIn` and the last step's `tokenOut` to the registry.\"},\"addSimplePath(address)\":{\"notice\":\"Adds a pool or buffer to the registry with all token pairs it supports.\"},\"getPathAt(address,address,uint256)\":{\"notice\":\"Returns the path for a given token pair at a specific index.\"},\"getPathCount(address,address)\":{\"notice\":\"Returns the number of paths registered for a given token pair.\"},\"getPaths(address,address)\":{\"notice\":\"Returns the paths registered for a given token pair.\"},\"removePathAtIndex(address,address,uint256)\":{\"notice\":\"Removes an arbitrary path from the registry at a given index.\"},\"removeSimplePath(address)\":{\"notice\":\"Removes all token paths registered for a given pool or buffer.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol\":\"ITokenPairRegistry\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol\":{\"keccak256\":\"0xd4b893a6f835f8bdf514b99a4bd0ba00cd54d0b575f675abd95efd99742b0fb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3cf813c85596cffa3198175d9d288c643937b6629166832cebd3878d192e04c3\",\"dweb:/ipfs/QmXnK5iKZ9ZJ4sEUqJbTJ2UWpqbbehkwLZT8WraPcnDCDh\"]},\"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol\":{\"keccak256\":\"0x956f0a455276ada0193331696b9e3402d8b32fbacc5a5d7fa659ff4b5a2fc47a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03169eeb5ca1b2594fce7f13fb06e268545044c4501b6d1f98b8e86dff788afc\",\"dweb:/ipfs/QmPLsewKZZoG4QaeQEn1WGsaCKyABsYku4KgLQtumTAyVv\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"IAuthorizer":{"abi":[{"inputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"canPerform(bytes32,address,address)":"9be2a884"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"success\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"notice\":\"Interface to the Vault's permission system.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":\"IAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol":{"IBasePoolFactory":{"abi":[{"inputs":[],"name":"Disabled","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"anonymous":false,"inputs":[],"name":"FactoryDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreated","type":"event"},{"inputs":[],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"constructorArgs","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"getDeploymentAddress","outputs":[{"internalType":"address","name":"deploymentAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolCount","outputs":[{"internalType":"uint256","name":"poolCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPools","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getPoolsInRange","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDisabled","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolFromFactory","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"disable()":"2f2770db","getActionId(bytes4)":"851c1bb3","getDeploymentAddress(bytes,bytes32)":"44f6fec7","getPoolCount()":"8eec5d70","getPools()":"673a2a1f","getPoolsInRange(uint256,uint256)":"53a72f7e","isDisabled()":"6c57f5a9","isPoolFromFactory(address)":"6634b753"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Disabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"FactoryDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"getDeploymentAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getPoolsInRange\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types (e.g., address prediction, tracking deployed pools, and governance-facilitated migration).\",\"events\":{\"PoolCreated(address)\":{\"params\":{\"pool\":\"The address of the new pool\"}}},\"kind\":\"dev\",\"methods\":{\"disable()\":{\"details\":\"Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getDeploymentAddress(bytes,bytes32)\":{\"params\":{\"constructorArgs\":\"The arguments used to create the pool\",\"salt\":\"The salt used to deploy the pool\"},\"returns\":{\"deploymentAddress\":\"The predicted address of the pool, given the salt\"}},\"getPoolCount()\":{\"details\":\"This can then be used to \\\"paginate\\\" calls to `getPools` to control gas costs.\",\"returns\":{\"poolCount\":\"The number of pools deployed by this factory\"}},\"getPools()\":{\"returns\":{\"pools\":\"The list of pools deployed by this factory\"}},\"getPoolsInRange(uint256,uint256)\":{\"details\":\"`start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply stop at the end and return fewer results than requested.\",\"params\":{\"count\":\"The maximum number of pools to return\",\"start\":\"The index of the first pool to return\"},\"returns\":{\"pools\":\"The list of pools deployed by this factory, starting at `start` and returning up to `count` pools\"}},\"isDisabled()\":{\"returns\":{\"success\":\"True if this factory was disabled\"}},\"isPoolFromFactory(address)\":{\"params\":{\"pool\":\"The pool to check\"},\"returns\":{\"success\":\"True if `pool` was created by this factory\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"Disabled()\":[{\"notice\":\"Attempted pool creation after the factory was disabled.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"A pool index is beyond the current bounds of the array.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"events\":{\"FactoryDisabled()\":{\"notice\":\"The factory was disabled by governance.\"},\"PoolCreated(address)\":{\"notice\":\"A pool was deployed.\"}},\"kind\":\"user\",\"methods\":{\"disable()\":{\"notice\":\"Disable the factory, preventing the creation of more pools.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getDeploymentAddress(bytes,bytes32)\":{\"notice\":\"Return the address where a new pool will be deployed, based on the factory address and salt.\"},\"getPoolCount()\":{\"notice\":\"Return the total number of pools deployed by this factory.\"},\"getPools()\":{\"notice\":\"Return the complete list of pools deployed by this factory.\"},\"getPoolsInRange(uint256,uint256)\":{\"notice\":\"Return a subset of the list of pools deployed by this factory.\"},\"isDisabled()\":{\"notice\":\"Check whether this factory has been disabled by governance.\"},\"isPoolFromFactory(address)\":{\"notice\":\"Check whether a pool was deployed by this factory.\"}},\"notice\":\"Base interface for a Balancer Pool Factory.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":\"IBasePoolFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0x6f8c558b0520faae0c4576f30225b5a97821a4cd210878a0ba10c102a2f753f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b40aa7a5ee39fa2e297c684fd29ad45d866f1fc61cd997120a417b02a4d908aa\",\"dweb:/ipfs/QmYP5pQAF7SDLgy3aerqfnc4VwdmfQix2jcQUNL3o83BY9\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"IHooks":{"abi":[{"inputs":[],"name":"getHookFlags","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"hookFlags","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"amountsInScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsInRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsOutRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountInScaled18","type":"uint256"},{"internalType":"uint256","name":"amountOutScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenInBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenOutBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AfterSwapParams","name":"params","type":"tuple"}],"name":"onAfterSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"hookAdjustedAmountCalculatedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"}],"name":"onBeforeSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"}],"name":"onComputeDynamicSwapFeePercentage","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"onRegister","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getHookFlags()":"d77153a7","onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)":"976907cc","onAfterInitialize(uint256[],uint256,bytes)":"38be241d","onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)":"2754888d","onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))":"18b6eb55","onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)":"45421ec7","onBeforeInitialize(uint256[],bytes)":"1c149e28","onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)":"ba5f9f40","onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)":"5211fa77","onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)":"a0e8f5ac","onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))":"0b89f182"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"hookFlags\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsInRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsOutRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"hookAdjustedAmountCalculatedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that they are called in the correct order, and with the correct arguments. To maintain this security, these functions should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`, then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\",\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"hookFlags\":\"Flags indicating which hooks the contract supports\"}},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsInRaw\":\"New amountsInRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsOutRaw\":\"New amountsOutRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"hookAdjustedAmountCalculatedRaw\":\"New amount calculated, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"dynamicSwapFeePercentage\":\"Value of the swap fee percentage, as an 18-decimal FP value\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"success\":\"True if the hook allowed the registration, false otherwise\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"}},\"notice\":\"Interface for pool hooks.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":\"IHooks\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"IProtocolFeeController":{"abi":[{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolRegisteredWithFeeController","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"aggregateFeePercentage","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"collectAggregateFees(address)":"8f4ab9ca","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","isPoolRegistered(address)":"c673bdaf","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolRegisteredWithFeeController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"aggregateFeePercentage\":\"The computed aggregate percentage\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"protocolSwapFeePercentage\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"protocolYieldFeePercentage\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolSwapFeePercentage\":\"The protocol swap fee percentage for the given pool\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage for the given pool\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"notice\":\"Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator yield fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Contract that handles protocol and pool creator fees for the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":\"IProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol":{"IProtocolFeePercentagesProvider":{"abi":[{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"FactoryFeesNotSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"factory","type":"address"}],"name":"PoolNotFromFactory","type":"error"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"UnknownFactory","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"indexed":false,"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"name":"FactorySpecificProtocolFeePercentagesSet","type":"event"},{"inputs":[],"name":"getBalancerContractRegistry","outputs":[{"internalType":"contract IBalancerContractRegistry","name":"balancerContractRegistry","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"getFactorySpecificProtocolFeePercentages","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"name":"setFactorySpecificProtocolFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"setProtocolFeePercentagesForPools","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getBalancerContractRegistry()":"deb27a7a","getFactorySpecificProtocolFeePercentages(address)":"f2c24ec8","getProtocolFeeController()":"85f2dbd4","setFactorySpecificProtocolFeePercentages(address,uint256,uint256)":"00859689","setProtocolFeePercentagesForPools(address,address[])":"344b12d5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"FactoryFeesNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"PoolNotFromFactory\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"UnknownFactory\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"FactorySpecificProtocolFeePercentagesSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getBalancerContractRegistry\",\"outputs\":[{\"internalType\":\"contract IBalancerContractRegistry\",\"name\":\"balancerContractRegistry\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"getFactorySpecificProtocolFeePercentages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setFactorySpecificProtocolFeePercentages\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"setProtocolFeePercentagesForPools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"FactoryFeesNotSet(address)\":[{\"details\":\"This error can by thrown by `getFactorySpecificProtocolFeePercentages` or `setProtocolFeePercentagesForPools`, as both require that valid fee percentages have been set. You need to set the factory fees before you can apply them to pools from that factory.\",\"params\":{\"factory\":\"The factory address where fees have not been set\"}}],\"PoolNotFromFactory(address,address)\":[{\"details\":\"Occurs when one of the pools supplied to `setProtocolFeePercentagesForPools` is not from the given factory.\",\"params\":{\"factory\":\"The address of the factory\",\"pool\":\"The address of the unrecognized pool\"}}],\"UnknownFactory(address)\":[{\"params\":{\"factory\":\"The address of the unknown factory\"}}]},\"events\":{\"FactorySpecificProtocolFeePercentagesSet(address,uint256,uint256)\":{\"params\":{\"factory\":\"The pool factory\",\"protocolSwapFeePercentage\":\"The protocol swap fee percentage intended for pools from this factory\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage intended for pools from this factory\"}}},\"kind\":\"dev\",\"methods\":{\"getBalancerContractRegistry()\":{\"returns\":{\"balancerContractRegistry\":\"The address of the Balancer contract registry\"}},\"getFactorySpecificProtocolFeePercentages(address)\":{\"params\":{\"factory\":\"The address of the factory\"},\"returns\":{\"protocolSwapFeePercentage\":\"The protocol swap fee percentage set for that factory\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage set for that factory\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"The address of the fee controller\"}},\"setFactorySpecificProtocolFeePercentages(address,uint256,uint256)\":{\"details\":\"This is a permissioned call. After the fee percentages have been set, and governance has granted this contract permission to set fee percentages on pools, anyone can call `setProtocolFeePercentagesForPools` to update the fee percentages on a set of pools from that factory.\",\"params\":{\"factory\":\"The address of the factory\",\"protocolSwapFeePercentage\":\"The new protocol swap fee percentage\",\"protocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setProtocolFeePercentagesForPools(address,address[])\":{\"details\":\"This call is permissionless. Anyone can update the fee percentages, once they're set by governance. Note that governance must also grant this contract permission to set protocol fee percentages on pools.\",\"params\":{\"factory\":\"The address of the factory\",\"pools\":\"The pools whose fees will be set according to `setFactorySpecificProtocolFeePercentages`\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"FactoryFeesNotSet(address)\":[{\"notice\":\"`setFactorySpecificProtocolFeePercentages` has not been called for this factory address.\"}],\"PoolNotFromFactory(address,address)\":[{\"notice\":\"The given pool is not from the expected factory.\"}],\"UnknownFactory(address)\":[{\"notice\":\"Fees can only be set on recognized factories (i.e., registered in the `BalancerContractRegistry`).\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The protocol fee controller was configured with an incorrect Vault address.\"}]},\"events\":{\"FactorySpecificProtocolFeePercentagesSet(address,uint256,uint256)\":{\"notice\":\"Protocol fee percentages have been set for the given factory.\"}},\"kind\":\"user\",\"methods\":{\"getBalancerContractRegistry()\":{\"notice\":\"Get the address of the `BalancerContractRegistry` used to validate factory contracts.\"},\"getFactorySpecificProtocolFeePercentages(address)\":{\"notice\":\"Query the protocol fee percentages for a given factory.\"},\"getProtocolFeeController()\":{\"notice\":\"Get the address of the `ProtocolFeeController` used to set fees.\"},\"setFactorySpecificProtocolFeePercentages(address,uint256,uint256)\":{\"notice\":\"Assign intended protocol fee percentages for a given factory.\"},\"setProtocolFeePercentagesForPools(address,address[])\":{\"notice\":\"Update the protocol fees for a set of pools from a given factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol\":\"IProtocolFeePercentagesProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xcb2fa9725bb158d1bd24984d39da7b69628d390740ef13b5578ecab903e0be0b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://fa02bc7433e3c93261e6644049bc2bddb474a7071874eaad4b4150af1afbb43f\",\"dweb:/ipfs/QmR2jYnyT7zg3wWbn4qpUhzpMoYVd9iZ7HsE1FNJqrFtUM\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol":{"IRouter":{"abi":[{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityCustom","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityUnbalanced","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityCustom","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityUnbalanced","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquidityCustom","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"}],"name":"queryRemoveLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquiditySingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapSingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapSingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquidityCustom","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquiditySingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapSingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapSingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityCustom(address,uint256[],uint256,bool,bytes)":"0ca078ec","addLiquidityProportional(address,uint256[],uint256,bool,bytes)":"724dba33","addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)":"72657d17","addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)":"c08bc851","donate(address,uint256[],bool,bytes)":"bf6ee3fd","initialize(address,address[],uint256[],uint256,bool,bytes)":"026b3d95","queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)":"452db952","queryAddLiquidityProportional(address,uint256,address,bytes)":"9de90518","queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)":"1d56798d","queryAddLiquidityUnbalanced(address,uint256[],address,bytes)":"da001f7d","queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)":"c330c7be","queryRemoveLiquidityProportional(address,uint256,address,bytes)":"0f710888","queryRemoveLiquidityRecovery(address,uint256)":"b037ed36","queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)":"23b39241","queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)":"53d0bb98","querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)":"3ebc54e5","querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)":"175d4408","removeLiquidityCustom(address,uint256,uint256[],bool,bytes)":"82bf2b24","removeLiquidityProportional(address,uint256,uint256[],bool,bytes)":"51682750","removeLiquidityRecovery(address,uint256,uint256[])":"08c04793","removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)":"ecb2182c","removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)":"e7326def","swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)":"750283bc","swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)":"94e86ef8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityUnbalanced\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"donate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityUnbalanced\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"}],\"name\":\"queryRemoveLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquiditySingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapSingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapSingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquiditySingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapSingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapSingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addLiquidityCustom(address,uint256[],uint256,bool,bytes)\":{\"details\":\"The given maximum and minimum amounts given may be interpreted as exact depending on the pool type. In any case the caller can expect them to be hard boundaries for the request.\",\"params\":{\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsIn\":\"Actual amounts of tokens added, sorted in token registration order\",\"bptAmountOut\":\"Actual amount of pool tokens received\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityProportional(address,uint256[],uint256,bool,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsIn\":\"Actual amounts of tokens added, sorted in token registration order\"}},\"addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"maxAmountIn\":\"Maximum amount of tokens to be added\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token used to add liquidity\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountIn\":\"Actual amount of tokens added\"}},\"addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountOut\":\"Actual amount of pool tokens received\"}},\"donate(address,uint256[],bool,bytes)\":{\"details\":\"To support donation, the pool config `enableDonation` flag must be set to true.\",\"params\":{\"amountsIn\":\"Amounts of tokens to be donated, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to donate liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"}},\"initialize(address,address[],uint256[],uint256,bool,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokens\":\"Pool tokens, in token registration order\",\"userData\":\"Additional (optional) data sent with the request to add initial liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountOut\":\"Actual amount of pool tokens minted in exchange for initial liquidity\"}},\"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)\":{\"params\":{\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Expected minimum amount of pool tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsIn\":\"Expected amounts of tokens to add, sorted in token registration order\",\"bptAmountOut\":\"Expected amount of pool tokens to receive\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryAddLiquidityProportional(address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsIn\":\"Expected amounts of tokens to add, sorted in token registration order\"}},\"queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Expected exact amount of pool tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token used to add liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountIn\":\"Expected amount of tokens to add\"}},\"queryAddLiquidityUnbalanced(address,uint256[],address,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"bptAmountOut\":\"Expected amount of pool tokens to receive\"}},\"queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)\":{\"params\":{\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"minAmountsOut\":\"Expected minimum amounts of tokens to receive, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\",\"bptAmountIn\":\"Expected amount of pool tokens to burn\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryRemoveLiquidityProportional(address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\"}},\"queryRemoveLiquidityRecovery(address,uint256)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\"}},\"queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountOut\":\"Expected amount of tokens to receive\"}},\"queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountOut\":\"Expected exact amount of tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"bptAmountIn\":\"Expected amount of pool tokens to burn\"}},\"querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountIn\":\"Exact amounts of input tokens to send\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountOut\":\"Calculated amount of output tokens to be received in exchange for the given input tokens\"}},\"querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountOut\":\"Exact amounts of input tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountIn\":\"Calculated amount of input tokens to be sent in exchange for the requested output tokens\"}},\"removeLiquidityCustom(address,uint256,uint256[],bool,bytes)\":{\"details\":\"The given maximum and minimum amounts given may be interpreted as exact depending on the pool type. In any case the caller can expect them to be hard boundaries for the request.\",\"params\":{\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\",\"bptAmountIn\":\"Actual amount of pool tokens burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityProportional(address,uint256,uint256[],bool,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\"}},\"removeLiquidityRecovery(address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\"}},\"removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountOut\":\"Minimum amount of tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountOut\":\"Actual amount of tokens received\"}},\"removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)\":{\"params\":{\"exactAmountOut\":\"Exact amount of tokens to be received\",\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"pool\":\"Address of the liquidity pool\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountIn\":\"Actual amount of pool tokens burned\"}},\"swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap, after which it will revert\",\"exactAmountIn\":\"Exact amounts of input tokens to send\",\"minAmountOut\":\"Minimum amount of tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the swap request\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountOut\":\"Calculated amount of output tokens to be received in exchange for the given input tokens\"}},\"swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap, after which it will revert\",\"exactAmountOut\":\"Exact amounts of input tokens to receive\",\"maxAmountIn\":\"Maximum amount of tokens to be sent\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the swap request\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountIn\":\"Calculated amount of input tokens to be sent in exchange for the requested output tokens\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityCustom(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with a custom request.\"},\"addLiquidityProportional(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with proportional token amounts, receiving an exact amount of pool tokens.\"},\"addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool in a single token, receiving an exact amount of pool tokens.\"},\"addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with arbitrary token amounts.\"},\"donate(address,uint256[],bool,bytes)\":{\"notice\":\"Adds liquidity to a pool by donating the amounts in (no BPT out).\"},\"initialize(address,address[],uint256[],uint256,bool,bytes)\":{\"notice\":\"Initialize a liquidity pool.\"},\"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquidityCustom` operation without actually executing it.\"},\"queryAddLiquidityProportional(address,uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquidityProportional` operation without actually executing it.\"},\"queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquiditySingleTokenExactOut` operation without actually executing it.\"},\"queryAddLiquidityUnbalanced(address,uint256[],address,bytes)\":{\"notice\":\"Queries an `addLiquidityUnbalanced` operation without actually executing it.\"},\"queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)\":{\"notice\":\"Queries a `removeLiquidityCustom` operation without actually executing it.\"},\"queryRemoveLiquidityProportional(address,uint256,address,bytes)\":{\"notice\":\"Queries a `removeLiquidityProportional` operation without actually executing it.\"},\"queryRemoveLiquidityRecovery(address,uint256)\":{\"notice\":\"Queries a `removeLiquidityRecovery` operation without actually executing it.\"},\"queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)\":{\"notice\":\"Queries a `removeLiquiditySingleTokenExactIn` operation without actually executing it.\"},\"queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"notice\":\"Queries a `removeLiquiditySingleTokenExactOut` operation without actually executing it.\"},\"querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)\":{\"notice\":\"Queries a swap operation specifying an exact input token amount without actually executing it.\"},\"querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)\":{\"notice\":\"Queries a swap operation specifying an exact output token amount without actually executing it.\"},\"removeLiquidityCustom(address,uint256,uint256[],bool,bytes)\":{\"notice\":\"Removes liquidity from a pool with a custom request.\"},\"removeLiquidityProportional(address,uint256,uint256[],bool,bytes)\":{\"notice\":\"Removes liquidity with proportional token amounts from a pool, burning an exact pool token amount.\"},\"removeLiquidityRecovery(address,uint256,uint256[])\":{\"notice\":\"Removes liquidity proportionally, burning an exact pool token amount. Only available in Recovery Mode.\"},\"removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)\":{\"notice\":\"Removes liquidity from a pool via a single token, burning an exact pool token amount.\"},\"removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)\":{\"notice\":\"Removes liquidity from a pool via a single token, specifying the exact amount of tokens to receive.\"},\"swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation specifying an exact input token amount.\"},\"swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation specifying an exact output token amount.\"}},\"notice\":\"User-friendly interface to basic Vault operations: swap, add/remove liquidity, and associated queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":\"IRouter\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":{\"keccak256\":\"0x5a0ee9f30170b2df308aa992f331d2070f389c1c7261b166ad8dcf058b079c00\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://89a654106d847701efa4cffbe73d98aea2bc0f9a041a28b4762f127fce48eba3\",\"dweb:/ipfs/QmVZKnQqxmydspv6P6e4137QHiNnhP6J7fzWh9XFuJj6At\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol\":{\"keccak256\":\"0x7a46d0e972ea96fe2190b4975d71fa033fbc65cb596f3c584a47b37b2b58ade1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://56e07234b208282d0751b31eefbed6d48cfacddd9c2dbad7f4fbc55789bdc0ca\",\"dweb:/ipfs/QmTRLGeyZNzKY3S4JUWwDshCMfnY6WMFq2BGD5BozWFAnC\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol":{"IRouterQueries":{"abi":[{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityCustom","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityUnbalanced","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquidityCustom","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"}],"name":"queryRemoveLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquiditySingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapSingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapSingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)":"452db952","queryAddLiquidityProportional(address,uint256,address,bytes)":"9de90518","queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)":"1d56798d","queryAddLiquidityUnbalanced(address,uint256[],address,bytes)":"da001f7d","queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)":"c330c7be","queryRemoveLiquidityProportional(address,uint256,address,bytes)":"0f710888","queryRemoveLiquidityRecovery(address,uint256)":"b037ed36","queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)":"23b39241","queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)":"53d0bb98","querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)":"3ebc54e5","querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)":"175d4408"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityUnbalanced\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"}],\"name\":\"queryRemoveLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquiditySingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapSingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapSingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)\":{\"params\":{\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Expected minimum amount of pool tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsIn\":\"Expected amounts of tokens to add, sorted in token registration order\",\"bptAmountOut\":\"Expected amount of pool tokens to receive\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryAddLiquidityProportional(address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsIn\":\"Expected amounts of tokens to add, sorted in token registration order\"}},\"queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Expected exact amount of pool tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token used to add liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountIn\":\"Expected amount of tokens to add\"}},\"queryAddLiquidityUnbalanced(address,uint256[],address,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"bptAmountOut\":\"Expected amount of pool tokens to receive\"}},\"queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)\":{\"params\":{\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"minAmountsOut\":\"Expected minimum amounts of tokens to receive, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\",\"bptAmountIn\":\"Expected amount of pool tokens to burn\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryRemoveLiquidityProportional(address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\"}},\"queryRemoveLiquidityRecovery(address,uint256)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\"}},\"queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountOut\":\"Expected amount of tokens to receive\"}},\"queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountOut\":\"Expected exact amount of tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"bptAmountIn\":\"Expected amount of pool tokens to burn\"}},\"querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountIn\":\"Exact amounts of input tokens to send\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountOut\":\"Calculated amount of output tokens to be received in exchange for the given input tokens\"}},\"querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountOut\":\"Exact amounts of input tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountIn\":\"Calculated amount of input tokens to be sent in exchange for the requested output tokens\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquidityCustom` operation without actually executing it.\"},\"queryAddLiquidityProportional(address,uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquidityProportional` operation without actually executing it.\"},\"queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquiditySingleTokenExactOut` operation without actually executing it.\"},\"queryAddLiquidityUnbalanced(address,uint256[],address,bytes)\":{\"notice\":\"Queries an `addLiquidityUnbalanced` operation without actually executing it.\"},\"queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)\":{\"notice\":\"Queries a `removeLiquidityCustom` operation without actually executing it.\"},\"queryRemoveLiquidityProportional(address,uint256,address,bytes)\":{\"notice\":\"Queries a `removeLiquidityProportional` operation without actually executing it.\"},\"queryRemoveLiquidityRecovery(address,uint256)\":{\"notice\":\"Queries a `removeLiquidityRecovery` operation without actually executing it.\"},\"queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)\":{\"notice\":\"Queries a `removeLiquiditySingleTokenExactIn` operation without actually executing it.\"},\"queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"notice\":\"Queries a `removeLiquiditySingleTokenExactOut` operation without actually executing it.\"},\"querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)\":{\"notice\":\"Queries a swap operation specifying an exact input token amount without actually executing it.\"},\"querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)\":{\"notice\":\"Queries a swap operation specifying an exact output token amount without actually executing it.\"}},\"notice\":\"User-friendly interface for querying expected results of swap and liquidity operations without execution.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol\":\"IRouterQueries\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol\":{\"keccak256\":\"0x7a46d0e972ea96fe2190b4975d71fa033fbc65cb596f3c584a47b37b2b58ade1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://56e07234b208282d0751b31eefbed6d48cfacddd9c2dbad7f4fbc55789bdc0ca\",\"dweb:/ipfs/QmTRLGeyZNzKY3S4JUWwDshCMfnY6WMFq2BGD5BozWFAnC\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"IVault":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","areBuffersPaused()":"55cba7fe","balanceOf(address,address)":"f7888aec","collectAggregateFees(address)":"8f4ab9ca","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getActionId(bytes4)":"851c1bb3","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getNonzeroDeltaCount()":"db817187","getPauseWindowEndTime()":"8a8d123a","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolMinimumTotalSupply()":"d0965a6b","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","getVaultExtension()":"b9a8effa","getVaultPausedState()":"85c8c015","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","sendTo(address,address,uint256)":"ae639329","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","totalSupply(address)":"e4dc2aa4","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The main Vault address.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"}},\"notice\":\"Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":\"IVault\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"IVaultAdmin":{"abi":[{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","areBuffersPaused()":"55cba7fe","collectAggregateFees(address)":"8f4ab9ca","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getPauseWindowEndTime()":"8a8d123a","getPoolMinimumTotalSupply()":"d0965a6b","getVaultPausedState()":"85c8c015","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations, as two delegate calls add gas to each call. Most of the permissioned calls are here.\",\"kind\":\"dev\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultAdmin` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":\"IVaultAdmin\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"IVaultErrors":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Errors are declared inside an interface (namespace) to improve DX with Typechain.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":\"IVaultErrors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"IVaultEvents":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Events are declared inside an interface (namespace) to improve DX with Typechain.\",\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":\"IVaultEvents\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"IVaultExtension":{"abi":[{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","balanceOf(address,address)":"f7888aec","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getNonzeroDeltaCount()":"db817187","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","totalSupply(address)":"e4dc2aa4","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultExtension` handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and liquidity operations.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultExtension` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":\"IVaultExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"IVaultMain":{"abi":[{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getVaultExtension()":"b9a8effa","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","sendTo(address,address,uint256)":"ae639329","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These are generally \\\"critical path\\\" functions (swap, add/remove liquidity) that are in the main contract for technical or performance reasons.\",\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"}},\"notice\":\"Interface for functions defined on the main Vault contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":\"IVaultMain\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"Authentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be applied to external functions to make them only callable by authorized accounts. Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in multi-contract systems. There are two main uses for it: - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers unique. The contract's own address is a good option. - if the contract belongs to a family that shares action identifiers for the same functions, an identifier shared by the entire family (and no other contract) should be used instead.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Building block for performing access control on external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":\"Authentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"CastingHelpers":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220e9081fce80f38c059235d9524780acd21311a200d48125c1469c6ff45999e06d64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 ADDMOD 0x1F 0xCE DUP1 RETURN DUP13 SDIV SWAP3 CALLDATALOAD 0xD9 MSTORE SELFBALANCE DUP1 0xAC 0xD2 SGT GT LOG2 STOP 0xD4 DUP2 0x25 0xC1 CHAINID SWAP13 PUSH16 0xF45999E06D64736F6C634300081B0033 ","sourceMap":"217:637:34:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220e9081fce80f38c059235d9524780acd21311a200d48125c1469c6ff45999e06d64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 ADDMOD 0x1F 0xCE DUP1 RETURN DUP13 SDIV SWAP3 CALLDATALOAD 0xD9 MSTORE SELFBALANCE DUP1 0xAC 0xD2 SGT GT LOG2 STOP 0xD4 DUP2 0x25 0xC1 CHAINID SWAP13 PUSH16 0xF45999E06D64736F6C634300081B0033 ","sourceMap":"217:637:34:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library of helper functions related to typecasting arrays.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":\"CastingHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"InputHelpers":{"abi":[{"inputs":[],"name":"AllZeroInputs","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"MultipleNonZeroInputs","type":"error"},{"inputs":[],"name":"TokensNotSorted","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220c06cd98b5468c19b7a0b0585eb53f652e511f5829c7f8ba0d9bf6ae0c0f10d4664736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 PUSH13 0xD98B5468C19B7A0B0585EB53F6 MSTORE 0xE5 GT CREATE2 DUP3 SWAP13 PUSH32 0x8BA0D9BF6AE0C0F10D4664736F6C634300081B00330000000000000000000000 ","sourceMap":"202:4350:35:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220c06cd98b5468c19b7a0b0585eb53f652e511f5829c7f8ba0d9bf6ae0c0f10d4664736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 PUSH13 0xD98B5468C19B7A0B0585EB53F6 MSTORE 0xE5 GT CREATE2 DUP3 SWAP13 PUSH32 0x8BA0D9BF6AE0C0F10D4664736F6C634300081B00330000000000000000000000 ","sourceMap":"202:4350:35:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AllZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MultipleNonZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokensNotSorted\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have one non-zero value, corresponding to the token being added or removed. This error results if all entries are zero.\"}],\"MultipleNonZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value, corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\"}],\"TokensNotSorted()\":[{\"details\":\"Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"notice\":\"No valid input was given for a single token operation.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"MultipleNonZeroInputs()\":[{\"notice\":\"More than one non-zero value was given for a single token operation.\"}],\"TokensNotSorted()\":[{\"notice\":\"The tokens supplied to an array argument were not sorted in numerical order.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":\"InputHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol":{"PackedTokenBalance":{"abi":[{"inputs":[],"name":"BalanceOverflow","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220265998fb316c28ac65c9ec2c43c675f998fe014909885d4b69f27704422da06f64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x26 MSIZE SWAP9 0xFB BALANCE PUSH13 0x28AC65C9EC2C43C675F998FE01 BLOBHASH MULMOD DUP9 TSTORE 0x4B PUSH10 0xF27704422DA06F64736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"982:2131:36:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220265998fb316c28ac65c9ec2c43c675f998fe014909885d4b69f27704422da06f64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x26 MSIZE SWAP9 0xFB BALANCE PUSH13 0x28AC65C9EC2C43C675F998FE01 BLOBHASH MULMOD DUP9 TSTORE 0x4B PUSH10 0xF27704422DA06F64736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"982:2131:36:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BalanceOverflow\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"We could use a Solidity struct to pack balance values together in a single storage slot, but unfortunately Solidity only allows for structs to live in either storage, calldata or memory. Because a memory struct still takes up a slot in the stack (to store its memory location), and because the entire balance fits in a single stack slot (two 128 bit values), using memory is strictly less gas performant. Therefore, we do manual packing and unpacking. We could also use custom types now, but given the simplicity here, and the existing EnumerableMap type, it seemed easier to leave it as a bytes32.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"BalanceOverflow()\":[{\"notice\":\"One of the balances is above the maximum value that can be stored.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"This library represents a data structure for packing a token's current raw and derived balances. A derived balance can be the \\\"last\\\" live balance scaled18 of the raw token, or the balance of the wrapped version of the token in a vault buffer, among others.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":\"PackedTokenBalance\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol":{"RevertCodec":{"abi":[{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212208683019c0f17e585a20b0fc05084b8273a26fbb5ee6a380f717073becaabfbfa64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP7 DUP4 ADD SWAP13 0xF OR 0xE5 DUP6 LOG2 SIGNEXTEND 0xF 0xC0 POP DUP5 0xB8 0x27 GASPRICE 0x26 0xFB 0xB5 0xEE PUSH11 0x380F717073BECAABFBFA64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"231:2016:37:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212208683019c0f17e585a20b0fc05084b8273a26fbb5ee6a380f717073becaabfbfa64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP7 DUP4 ADD SWAP13 0xF OR 0xE5 DUP6 LOG2 SIGNEXTEND 0xF 0xC0 POP DUP5 0xB8 0x27 GASPRICE 0x26 0xFB 0xB5 0xEE PUSH11 0x380F717073BECAABFBFA64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"231:2016:37:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Support `quoteAndRevert`: a v2-style query which always reverts, and returns the result in the return data.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":\"RevertCodec\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol":{"Version":{"abi":[{"inputs":[{"internalType":"string","name":"version_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"allocate_memory":{"entryPoint":463,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6080604052346101cb5761041880380380610019816101cf565b928339810190602080828403126101cb5781516001600160401b03928382116101cb570192601f908082860112156101cb5784518481116101b757601f1995610067828501881686016101cf565b928284528583830101116101cb57815f92868093018386015e8301015280519384116101b7575f54926001938481811c911680156101ad575b8282101461019957838111610156575b50809285116001146100f65750839450908392915f946100eb575b50501b915f199060031b1c1916175f555b60405161022390816101f58239f35b015192505f806100cb565b9294849081165f8052845f20945f905b8883831061013c5750505010610124575b505050811b015f556100dc565b01515f1960f88460031b161c191690555f8080610117565b858701518855909601959485019487935090810190610106565b5f8052815f208480880160051c820192848910610190575b0160051c019085905b8281106101855750506100b0565b5f8155018590610177565b9250819261016e565b634e487b7160e01b5f52602260045260245ffd5b90607f16906100a0565b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176101b75760405256fe6080600436101561000e575f80fd5b5f3560e01c6354fd4d5014610021575f80fd5b346101e9575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e9575f5f546001908060011c92600182169384156101e1575b60209384821086146101b4578187528487019587948690821561017b575050600114610124575b505003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090811684019367ffffffffffffffff8511818610176100f7576040938593601f9285875281865251918280928701528686015e5f85828601015201168101030190f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80805285935091907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b828410610163575050508201015f8061008d565b8054848a01860152889550869490930192810161014f565b915093507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168552151560051b8201015f8061008d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b607f16610066565b5f80fdfea26469706673582212208f8983b58d785cd472d19f393d5480e584109f683297852db2ac88152dfc995864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x1CB JUMPI PUSH2 0x418 DUP1 CODESIZE SUB DUP1 PUSH2 0x19 DUP2 PUSH2 0x1CF JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD SWAP1 PUSH1 0x20 DUP1 DUP3 DUP5 SUB SLT PUSH2 0x1CB JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 DUP4 DUP3 GT PUSH2 0x1CB JUMPI ADD SWAP3 PUSH1 0x1F SWAP1 DUP1 DUP3 DUP7 ADD SLT ISZERO PUSH2 0x1CB JUMPI DUP5 MLOAD DUP5 DUP2 GT PUSH2 0x1B7 JUMPI PUSH1 0x1F NOT SWAP6 PUSH2 0x67 DUP3 DUP6 ADD DUP9 AND DUP7 ADD PUSH2 0x1CF JUMP JUMPDEST SWAP3 DUP3 DUP5 MSTORE DUP6 DUP4 DUP4 ADD ADD GT PUSH2 0x1CB JUMPI DUP2 PUSH0 SWAP3 DUP7 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x1B7 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x1AD JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x199 JUMPI DUP4 DUP2 GT PUSH2 0x156 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0xF6 JUMPI POP DUP4 SWAP5 POP SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP5 PUSH2 0xEB JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x223 SWAP1 DUP2 PUSH2 0x1F5 DUP3 CODECOPY RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0xCB JUMP JUMPDEST SWAP3 SWAP5 DUP5 SWAP1 DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x13C JUMPI POP POP POP LT PUSH2 0x124 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0xDC JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x117 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x106 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x190 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP6 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x185 JUMPI POP POP PUSH2 0xB0 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x177 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x16E JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xA0 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x1B7 JUMPI PUSH1 0x40 MSTORE JUMP INVALID PUSH1 0x80 PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0xE JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x54FD4D50 EQ PUSH2 0x21 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1E9 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1E9 JUMPI PUSH0 PUSH0 SLOAD PUSH1 0x1 SWAP1 DUP1 PUSH1 0x1 SHR SWAP3 PUSH1 0x1 DUP3 AND SWAP4 DUP5 ISZERO PUSH2 0x1E1 JUMPI JUMPDEST PUSH1 0x20 SWAP4 DUP5 DUP3 LT DUP7 EQ PUSH2 0x1B4 JUMPI DUP2 DUP8 MSTORE DUP5 DUP8 ADD SWAP6 DUP8 SWAP5 DUP7 SWAP1 DUP3 ISZERO PUSH2 0x17B JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x124 JUMPI JUMPDEST POP POP SUB PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND DUP5 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT DUP2 DUP7 LT OR PUSH2 0xF7 JUMPI PUSH1 0x40 SWAP4 DUP6 SWAP4 PUSH1 0x1F SWAP3 DUP6 DUP8 MSTORE DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP4 POP SWAP2 SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x163 JUMPI POP POP POP DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP7 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x14F JUMP JUMPDEST SWAP2 POP SWAP4 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP6 MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x7F AND PUSH2 0x66 JUMP JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 DUP10 DUP4 0xB5 DUP14 PUSH25 0x5CD472D19F393D5480E584109F683297852DB2AC88152DFC99 PC PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"666:520:38:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;666:520:38;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;666:520:38;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;-1:-1:-1;666:520:38;;;-1:-1:-1;666:520:38;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;-1:-1:-1;666:520:38;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;-1:-1:-1;666:520:38;;-1:-1:-1;666:520:38;;;;;;;;;-1:-1:-1;;666:520:38;;;-1:-1:-1;;;;;666:520:38;;;;;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080600436101561000e575f80fd5b5f3560e01c6354fd4d5014610021575f80fd5b346101e9575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e9575f5f546001908060011c92600182169384156101e1575b60209384821086146101b4578187528487019587948690821561017b575050600114610124575b505003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090811684019367ffffffffffffffff8511818610176100f7576040938593601f9285875281865251918280928701528686015e5f85828601015201168101030190f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80805285935091907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b828410610163575050508201015f8061008d565b8054848a01860152889550869490930192810161014f565b915093507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168552151560051b8201015f8061008d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b607f16610066565b5f80fdfea26469706673582212208f8983b58d785cd472d19f393d5480e584109f683297852db2ac88152dfc995864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0xE JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x54FD4D50 EQ PUSH2 0x21 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1E9 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1E9 JUMPI PUSH0 PUSH0 SLOAD PUSH1 0x1 SWAP1 DUP1 PUSH1 0x1 SHR SWAP3 PUSH1 0x1 DUP3 AND SWAP4 DUP5 ISZERO PUSH2 0x1E1 JUMPI JUMPDEST PUSH1 0x20 SWAP4 DUP5 DUP3 LT DUP7 EQ PUSH2 0x1B4 JUMPI DUP2 DUP8 MSTORE DUP5 DUP8 ADD SWAP6 DUP8 SWAP5 DUP7 SWAP1 DUP3 ISZERO PUSH2 0x17B JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x124 JUMPI JUMPDEST POP POP SUB PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND DUP5 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT DUP2 DUP7 LT OR PUSH2 0xF7 JUMPI PUSH1 0x40 SWAP4 DUP6 SWAP4 PUSH1 0x1F SWAP3 DUP6 DUP8 MSTORE DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP4 POP SWAP2 SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x163 JUMPI POP POP POP DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP7 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x14F JUMP JUMPDEST SWAP2 POP SWAP4 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP6 MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x7F AND PUSH2 0x66 JUMP JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 DUP10 DUP4 0xB5 DUP14 PUSH25 0x5CD472D19F393D5480E584109F683297852DB2AC88152DFC99 PC PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"666:520:38:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;666:520:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"methodIdentifiers":{"version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"version_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The version is set at deployment time and cannot be changed. It would be immutable, but immutable strings are not yet supported. Contracts like factories and pools should have versions. These typically take the form of JSON strings containing detailed information about the deployment. For instance: `{name: 'ChildChainGaugeFactory', version: 2, deployment: '20230316-child-chain-gauge-factory-v2'}`\",\"kind\":\"dev\",\"methods\":{\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"Retrieves a contract's version from storage.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":\"Version\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"FixedPoint":{"abi":[{"inputs":[],"name":"ZeroDivision","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220e9cc622b7f35aaf8f3efa30ad767c4a02aedd5ccde9b7738c8491078c2823d0164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xCC PUSH3 0x2B7F35 0xAA 0xF8 RETURN 0xEF LOG3 EXP 0xD7 PUSH8 0xC4A02AEDD5CCDE9B PUSH24 0x38C8491078C2823D0164736F6C634300081B003300000000 ","sourceMap":"239:5688:39:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220e9cc622b7f35aaf8f3efa30ad767c4a02aedd5ccde9b7738c8491078c2823d0164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xCC PUSH3 0x2B7F35 0xAA 0xF8 RETURN 0xEF LOG3 EXP 0xD7 PUSH8 0xC4A02AEDD5CCDE9B PUSH24 0x38C8491078C2823D0164736F6C634300081B003300000000 ","sourceMap":"239:5688:39:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":\"FixedPoint\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"LogExpMath":{"abi":[{"inputs":[],"name":"BaseOutOfBounds","type":"error"},{"inputs":[],"name":"ExponentOutOfBounds","type":"error"},{"inputs":[],"name":"InvalidExponent","type":"error"},{"inputs":[],"name":"OutOfBounds","type":"error"},{"inputs":[],"name":"ProductOutOfBounds","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220f7e8e3ef4405ba858296891409b167de675961dcc03dc03125ef5eed9c9eb29264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xE8 0xE3 0xEF PREVRANDAO SDIV 0xBA DUP6 DUP3 SWAP7 DUP10 EQ MULMOD 0xB1 PUSH8 0xDE675961DCC03DC0 BALANCE 0x25 0xEF MCOPY 0xED SWAP13 SWAP15 0xB2 SWAP3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"595:21889:40:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220f7e8e3ef4405ba858296891409b167de675961dcc03dc03125ef5eed9c9eb29264736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xE8 0xE3 0xEF PREVRANDAO SDIV 0xBA DUP6 DUP3 SWAP7 DUP10 EQ MULMOD 0xB1 PUSH8 0xDE675961DCC03DC0 BALANCE 0x25 0xEF MCOPY 0xED SWAP13 SWAP15 0xB2 SWAP3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"595:21889:40:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BaseOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExponentOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExponent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProductOutOfBounds\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Fernando Martinelli - @fernandomartinelliSergio Yuhjtman - @sergioyuhjtmanDaniel Fernandez - @dmf7z\",\"details\":\"Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument). Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural exponentiation and logarithm (where the base is Euler's number). All math operations are unchecked in order to save gas.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"BaseOutOfBounds()\":[{\"notice\":\"This error is thrown when a base is not within an acceptable range.\"}],\"ExponentOutOfBounds()\":[{\"notice\":\"This error is thrown when a exponent is not within an acceptable range.\"}],\"InvalidExponent()\":[{\"notice\":\"This error is thrown when an exponent used in the exp function is not within an acceptable range.\"}],\"OutOfBounds()\":[{\"notice\":\"This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\"}],\"ProductOutOfBounds()\":[{\"notice\":\"This error is thrown when the exponent * ln(base) is not within an acceptable range.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":\"LogExpMath\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol":{"EnumerableSet":{"abi":[{"inputs":[],"name":"ElementNotFound","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212200aac404458ad1711bfb2281203a6d085e847bce016f980c2f3cf043c51d8ae8664736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXP 0xAC BLOCKHASH PREVRANDAO PC 0xAD OR GT 0xBF 0xB2 0x28 SLT SUB 0xA6 0xD0 DUP6 0xE8 SELFBALANCE 0xBC 0xE0 AND 0xF9 DUP1 0xC2 RETURN 0xCF DIV EXTCODECOPY MLOAD 0xD8 0xAE DUP7 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1016:5342:41:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212200aac404458ad1711bfb2281203a6d085e847bce016f980c2f3cf043c51d8ae8664736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXP 0xAC BLOCKHASH PREVRANDAO PC 0xAD OR GT 0xBF 0xB2 0x28 SLT SUB 0xA6 0xD0 DUP6 0xE8 SELFBALANCE 0xBC 0xE0 AND 0xF9 DUP1 0xC2 RETURN 0xCF DIV EXTCODECOPY MLOAD 0xD8 0xAE DUP7 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1016:5342:41:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ElementNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"See https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types. Based on the EnumerableSet library from OpenZeppelin Contracts, altered to remove the base private functions that work on bytes32, replacing them with a native implementation for address values, to reduce bytecode size and runtime costs. The `unchecked_at` function was also added, which allows for more gas efficient data reads in some scenarios. Sets have the following properties: - Elements are added, removed, and checked for existence in constant time (O(1)). - Elements are enumerated in O(n). No guarantees are made on the ordering. ``` contract Example { // Add the library methods using EnumerableSet for EnumerableSet.AddressSet; // Declare a set state variable EnumerableSet.AddressSet private mySet; } ```\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ElementNotFound()\":[{\"notice\":\"An element that is not present in the set.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for managing sets of primitive types.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\":\"EnumerableSet\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\":{\"keccak256\":\"0xa981b2a584a81920bc4bd25570ce31f83890bdd41174e11d230e9da179a29468\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5908435bef8ce18bed32900d668530bade6d9207059cbc3ad2460c5e41eba532\",\"dweb:/ipfs/QmZZePBFw5vkoZZNKt9q5PBCFNuGS9LJABAMjAaG6kg6u8\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ReentrancyGuardTransient":{"abi":[{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"NOTE: This variant only works on networks where EIP-1153 is available.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Variant of {ReentrancyGuard} that uses transient storage.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":\"ReentrancyGuardTransient\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"StorageSlotExtension":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212207d1ece238b2a90fbead6c43dfa8046238cc35e0b4dec12d000c4f2cebfef20e164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x1ECE238B2A90FBEAD6C43DFA8046238CC35E0B4DEC12D000C4F2CEBFEF20 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"278:4371:43:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212207d1ece238b2a90fbead6c43dfa8046238cc35e0b4dec12d000c4f2cebfef20e164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x1ECE238B2A90FBEAD6C43DFA8046238CC35E0B4DEC12D000C4F2CEBFEF20 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"278:4371:43:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"TIP: Consider using this library along with {SlotDerivation}.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":\"StorageSlotExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol":{"ERC20TestToken":{"abi":[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"ZeroTransfer","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_string_fromMemory":{"entryPoint":795,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":758,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"60a0604052346102f257610d7d80380380610019816102f6565b92833981016060828203126102f25781516001600160401b03908181116102f2578261004691850161031b565b90602092838501518281116102f25760409161006391870161031b565b9401519360ff851685036102f2578251828111610209576003918254916001958684811c941680156102e8575b888510146102d4578190601f94858111610286575b508890858311600114610228575f9261021d575b50505f1982861b1c191690861b1783555b80519384116102095760049586548681811c911680156101ff575b828210146101ec578381116101a9575b508092851160011461014457509383949184925f95610139575b50501b925f19911b1c19161790555b608052604051610a10908161036d8239608051816104ff0152f35b015193505f8061010f565b92919084601f198116885f52855f20955f905b8983831061018f5750505010610176575b50505050811b01905561011e565b01519060f8845f19921b161c191690555f808080610168565b858701518955909701969485019488935090810190610157565b875f52815f208480880160051c8201928489106101e3575b0160051c019087905b8281106101d85750506100f5565b5f81550187906101ca565b925081926101c1565b602288634e487b7160e01b5f525260245ffd5b90607f16906100e5565b634e487b7160e01b5f52604160045260245ffd5b015190505f806100b9565b90889350601f19831691875f528a5f20925f5b8c8282106102705750508411610259575b505050811b0183556100ca565b01515f1983881b60f8161c191690555f808061024c565b8385015186558c9790950194938401930161023b565b909150855f52885f208580850160051c8201928b86106102cb575b918a91869594930160051c01915b8281106102bd5750506100a5565b5f81558594508a91016102af565b925081926102a1565b634e487b7160e01b5f52602260045260245ffd5b93607f1693610090565b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761020957604052565b81601f820112156102f2578051906001600160401b0382116102095761034a601f8301601f19166020016102f6565b92828452602083830101116102f257815f9260208093018386015e830101529056fe6080604090808252600480361015610015575f80fd5b5f3560e01c91826306fdde031461077557508163095ea7b31461069657816318160ddd1461067857816323b872dd14610523578163313ce567146104e657816340c10f191461040557816370a08231146103c257816395d89b41146102415781639dc29fac14610151578163a9059cbb146100f3575063dd62ed3e14610099575f80fd5b346100ef57806003193601126100ef576020906100b4610888565b6100bc6108ab565b9073ffffffffffffffffffffffffffffffffffffffff8091165f5260018452825f2091165f528252805f20549051908152f35b5f80fd5b82346100ef57806003193601126100ef5761010c610888565b60243592831561012b575060209261012491336108ce565b5160018152f35b7f10cadee3000000000000000000000000000000000000000000000000000000005f525ffd5b9050346100ef57816003193601126100ef5761016b610888565b9173ffffffffffffffffffffffffffffffffffffffff602435931691821561021657825f525f602052815f2054908482106101e35750837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef925f956020938688528785520381872055816002540360025551908152a3005b909291507fe450d38c000000000000000000000000000000000000000000000000000000005f525260245260445260645ffd5b5f907f96c6fd1e0000000000000000000000000000000000000000000000000000000082525260245ffd5b9050346100ef575f6003193601126100ef5781515f928254936001948060011c600182169687156103b8575b602092838310891461038c57869798838897985290815f1461034f57506001146102f2575b50505003601f01601f191682019267ffffffffffffffff8411838510176102c657508291826102c292528261085e565b0390f35b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5f888152929493507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8284106103395750505090601f1992601f92820101918193610292565b805488850187015287945092850192810161031c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016848701525050151560051b830101905081601f601f19610292565b6022887f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b90607f169061026d565b82346100ef5760206003193601126100ef5760209073ffffffffffffffffffffffffffffffffffffffff6103f4610888565b165f525f8252805f20549051908152f35b82346100ef57806003193601126100ef5761041e610888565b9073ffffffffffffffffffffffffffffffffffffffff60243592169283156104bb576002549083820180921161048f57505f927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9260209260025585855284835280852082815401905551908152a3005b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5f907fec442f050000000000000000000000000000000000000000000000000000000082525260245ffd5b82346100ef575f6003193601126100ef576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b82346100ef5760606003193601126100ef5761053d610888565b6105456108ab565b9060443593841561012b5773ffffffffffffffffffffffffffffffffffffffff8216805f526001602052845f20335f52602052845f2054917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83106105b3575b6020866101248988886108ce565b8683106106445781156106195733156105ee575091856101249492602097945f5260018852865f20335f52885203855f2055919481936105a5565b5f907f94280d620000000000000000000000000000000000000000000000000000000082525260245ffd5b5f907fe602df050000000000000000000000000000000000000000000000000000000082525260245ffd5b8287917ffb8f41b2000000000000000000000000000000000000000000000000000000005f5233905260245260445260645ffd5b82346100ef575f6003193601126100ef576020906002549051908152f35b82346100ef57806003193601126100ef576106af610888565b60243590331561074a5773ffffffffffffffffffffffffffffffffffffffff1690811561071f5760209350335f5260018452825f20825f52845280835f205582519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925843392a35160018152f35b5f847f94280d620000000000000000000000000000000000000000000000000000000082525260245ffd5b5f847fe602df050000000000000000000000000000000000000000000000000000000082525260245ffd5b909150346100ef575f6003193601126100ef575f92600354936001948060011c60018216968715610854575b602092838310891461038c57869798838897985290815f1461034f57506001146107f55750505003601f01601f191682019267ffffffffffffffff8411838510176102c657508291826102c292528261085e565b60035f908152929493507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b82841061083e5750505090601f1992601f92820101918193610292565b8054888501870152879450928501928101610821565b90607f16906107a1565b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b73ffffffffffffffffffffffffffffffffffffffff8091169182156109ae571691821561098257815f525f60205260405f205481811061095057817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f5260405f20818154019055604051908152a3565b827fe450d38c000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffdfea2646970667358221220d611776b0f7247c5a2ec86a2487d61ab1ee6f4add9f4210fafcda4f60fdaf6b464736f6c634300081b0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x2F2 JUMPI PUSH2 0xD7D DUP1 CODESIZE SUB DUP1 PUSH2 0x19 DUP2 PUSH2 0x2F6 JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD PUSH1 0x60 DUP3 DUP3 SUB SLT PUSH2 0x2F2 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 DUP2 GT PUSH2 0x2F2 JUMPI DUP3 PUSH2 0x46 SWAP2 DUP6 ADD PUSH2 0x31B JUMP JUMPDEST SWAP1 PUSH1 0x20 SWAP3 DUP4 DUP6 ADD MLOAD DUP3 DUP2 GT PUSH2 0x2F2 JUMPI PUSH1 0x40 SWAP2 PUSH2 0x63 SWAP2 DUP8 ADD PUSH2 0x31B JUMP JUMPDEST SWAP5 ADD MLOAD SWAP4 PUSH1 0xFF DUP6 AND DUP6 SUB PUSH2 0x2F2 JUMPI DUP3 MLOAD DUP3 DUP2 GT PUSH2 0x209 JUMPI PUSH1 0x3 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x1 SWAP6 DUP7 DUP5 DUP2 SHR SWAP5 AND DUP1 ISZERO PUSH2 0x2E8 JUMPI JUMPDEST DUP9 DUP6 LT EQ PUSH2 0x2D4 JUMPI DUP2 SWAP1 PUSH1 0x1F SWAP5 DUP6 DUP2 GT PUSH2 0x286 JUMPI JUMPDEST POP DUP9 SWAP1 DUP6 DUP4 GT PUSH1 0x1 EQ PUSH2 0x228 JUMPI PUSH0 SWAP3 PUSH2 0x21D JUMPI JUMPDEST POP POP PUSH0 NOT DUP3 DUP7 SHL SHR NOT AND SWAP1 DUP7 SHL OR DUP4 SSTORE JUMPDEST DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x209 JUMPI PUSH1 0x4 SWAP6 DUP7 SLOAD DUP7 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x1FF JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x1EC JUMPI DUP4 DUP2 GT PUSH2 0x1A9 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x144 JUMPI POP SWAP4 DUP4 SWAP5 SWAP2 DUP5 SWAP3 PUSH0 SWAP6 PUSH2 0x139 JUMPI JUMPDEST POP POP SHL SWAP3 PUSH0 NOT SWAP2 SHL SHR NOT AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x80 MSTORE PUSH1 0x40 MLOAD PUSH2 0xA10 SWAP1 DUP2 PUSH2 0x36D DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x4FF ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP4 POP PUSH0 DUP1 PUSH2 0x10F JUMP JUMPDEST SWAP3 SWAP2 SWAP1 DUP5 PUSH1 0x1F NOT DUP2 AND DUP9 PUSH0 MSTORE DUP6 PUSH0 KECCAK256 SWAP6 PUSH0 SWAP1 JUMPDEST DUP10 DUP4 DUP4 LT PUSH2 0x18F JUMPI POP POP POP LT PUSH2 0x176 JUMPI JUMPDEST POP POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH2 0x11E JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xF8 DUP5 PUSH0 NOT SWAP3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 DUP1 PUSH2 0x168 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP10 SSTORE SWAP1 SWAP8 ADD SWAP7 SWAP5 DUP6 ADD SWAP5 DUP9 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x157 JUMP JUMPDEST DUP8 PUSH0 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x1E3 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP8 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x1D8 JUMPI POP POP PUSH2 0xF5 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP8 SWAP1 PUSH2 0x1CA JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x1C1 JUMP JUMPDEST PUSH1 0x22 DUP9 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xE5 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0xB9 JUMP JUMPDEST SWAP1 DUP9 SWAP4 POP PUSH1 0x1F NOT DUP4 AND SWAP2 DUP8 PUSH0 MSTORE DUP11 PUSH0 KECCAK256 SWAP3 PUSH0 JUMPDEST DUP13 DUP3 DUP3 LT PUSH2 0x270 JUMPI POP POP DUP5 GT PUSH2 0x259 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP4 SSTORE PUSH2 0xCA JUMP JUMPDEST ADD MLOAD PUSH0 NOT DUP4 DUP9 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x24C JUMP JUMPDEST DUP4 DUP6 ADD MLOAD DUP7 SSTORE DUP13 SWAP8 SWAP1 SWAP6 ADD SWAP5 SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0x23B JUMP JUMPDEST SWAP1 SWAP2 POP DUP6 PUSH0 MSTORE DUP9 PUSH0 KECCAK256 DUP6 DUP1 DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP12 DUP7 LT PUSH2 0x2CB JUMPI JUMPDEST SWAP2 DUP11 SWAP2 DUP7 SWAP6 SWAP5 SWAP4 ADD PUSH1 0x5 SHR ADD SWAP2 JUMPDEST DUP3 DUP2 LT PUSH2 0x2BD JUMPI POP POP PUSH2 0xA5 JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP DUP11 SWAP2 ADD PUSH2 0x2AF JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x2A1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP4 PUSH1 0x7F AND SWAP4 PUSH2 0x90 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x209 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x2F2 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x209 JUMPI PUSH2 0x34A PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x2F6 JUMP JUMPDEST SWAP3 DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x2F2 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x6FDDE03 EQ PUSH2 0x775 JUMPI POP DUP2 PUSH4 0x95EA7B3 EQ PUSH2 0x696 JUMPI DUP2 PUSH4 0x18160DDD EQ PUSH2 0x678 JUMPI DUP2 PUSH4 0x23B872DD EQ PUSH2 0x523 JUMPI DUP2 PUSH4 0x313CE567 EQ PUSH2 0x4E6 JUMPI DUP2 PUSH4 0x40C10F19 EQ PUSH2 0x405 JUMPI DUP2 PUSH4 0x70A08231 EQ PUSH2 0x3C2 JUMPI DUP2 PUSH4 0x95D89B41 EQ PUSH2 0x241 JUMPI DUP2 PUSH4 0x9DC29FAC EQ PUSH2 0x151 JUMPI DUP2 PUSH4 0xA9059CBB EQ PUSH2 0xF3 JUMPI POP PUSH4 0xDD62ED3E EQ PUSH2 0x99 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH2 0xB4 PUSH2 0x888 JUMP JUMPDEST PUSH2 0xBC PUSH2 0x8AB JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x10C PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP3 DUP4 ISZERO PUSH2 0x12B JUMPI POP PUSH1 0x20 SWAP3 PUSH2 0x124 SWAP2 CALLER PUSH2 0x8CE JUMP JUMPDEST MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0x10CADEE300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xEF JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x16B PUSH2 0x888 JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD SWAP4 AND SWAP2 DUP3 ISZERO PUSH2 0x216 JUMPI DUP3 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SLOAD SWAP1 DUP5 DUP3 LT PUSH2 0x1E3 JUMPI POP DUP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH0 SWAP6 PUSH1 0x20 SWAP4 DUP7 DUP9 MSTORE DUP8 DUP6 MSTORE SUB DUP2 DUP8 KECCAK256 SSTORE DUP2 PUSH1 0x2 SLOAD SUB PUSH1 0x2 SSTORE MLOAD SWAP1 DUP2 MSTORE LOG3 STOP JUMPDEST SWAP1 SWAP3 SWAP2 POP PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI DUP2 MLOAD PUSH0 SWAP3 DUP3 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP1 PUSH1 0x1 SHR PUSH1 0x1 DUP3 AND SWAP7 DUP8 ISZERO PUSH2 0x3B8 JUMPI JUMPDEST PUSH1 0x20 SWAP3 DUP4 DUP4 LT DUP10 EQ PUSH2 0x38C JUMPI DUP7 SWAP8 SWAP9 DUP4 DUP9 SWAP8 SWAP9 MSTORE SWAP1 DUP2 PUSH0 EQ PUSH2 0x34F JUMPI POP PUSH1 0x1 EQ PUSH2 0x2F2 JUMPI JUMPDEST POP POP POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT DUP4 DUP6 LT OR PUSH2 0x2C6 JUMPI POP DUP3 SWAP2 DUP3 PUSH2 0x2C2 SWAP3 MSTORE DUP3 PUSH2 0x85E JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP9 DUP2 MSTORE SWAP3 SWAP5 SWAP4 POP PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x339 JUMPI POP POP POP SWAP1 PUSH1 0x1F NOT SWAP3 PUSH1 0x1F SWAP3 DUP3 ADD ADD SWAP2 DUP2 SWAP4 PUSH2 0x292 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP8 ADD MSTORE DUP8 SWAP5 POP SWAP3 DUP6 ADD SWAP3 DUP2 ADD PUSH2 0x31C JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP5 DUP8 ADD MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP2 PUSH1 0x1F PUSH1 0x1F NOT PUSH2 0x292 JUMP JUMPDEST PUSH1 0x22 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x26D JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3F4 PUSH2 0x888 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x41E PUSH2 0x888 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD SWAP3 AND SWAP3 DUP4 ISZERO PUSH2 0x4BB JUMPI PUSH1 0x2 SLOAD SWAP1 DUP4 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x48F JUMPI POP PUSH0 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH1 0x20 SWAP3 PUSH1 0x2 SSTORE DUP6 DUP6 MSTORE DUP5 DUP4 MSTORE DUP1 DUP6 KECCAK256 DUP3 DUP2 SLOAD ADD SWAP1 SSTORE MLOAD SWAP1 DUP2 MSTORE LOG3 STOP JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x53D PUSH2 0x888 JUMP JUMPDEST PUSH2 0x545 PUSH2 0x8AB JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP4 DUP5 ISZERO PUSH2 0x12B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 SLOAD SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 LT PUSH2 0x5B3 JUMPI JUMPDEST PUSH1 0x20 DUP7 PUSH2 0x124 DUP10 DUP9 DUP9 PUSH2 0x8CE JUMP JUMPDEST DUP7 DUP4 LT PUSH2 0x644 JUMPI DUP2 ISZERO PUSH2 0x619 JUMPI CALLER ISZERO PUSH2 0x5EE JUMPI POP SWAP2 DUP6 PUSH2 0x124 SWAP5 SWAP3 PUSH1 0x20 SWAP8 SWAP5 PUSH0 MSTORE PUSH1 0x1 DUP9 MSTORE DUP7 PUSH0 KECCAK256 CALLER PUSH0 MSTORE DUP9 MSTORE SUB DUP6 PUSH0 KECCAK256 SSTORE SWAP2 SWAP5 DUP2 SWAP4 PUSH2 0x5A5 JUMP JUMPDEST PUSH0 SWAP1 PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP8 SWAP2 PUSH32 0xFB8F41B200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x6AF PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 CALLER ISZERO PUSH2 0x74A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 ISZERO PUSH2 0x71F JUMPI PUSH1 0x20 SWAP4 POP CALLER PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP3 PUSH0 KECCAK256 DUP3 PUSH0 MSTORE DUP5 MSTORE DUP1 DUP4 PUSH0 KECCAK256 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP5 CALLER SWAP3 LOG3 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP5 PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP5 PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH0 SWAP3 PUSH1 0x3 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP1 PUSH1 0x1 SHR PUSH1 0x1 DUP3 AND SWAP7 DUP8 ISZERO PUSH2 0x854 JUMPI JUMPDEST PUSH1 0x20 SWAP3 DUP4 DUP4 LT DUP10 EQ PUSH2 0x38C JUMPI DUP7 SWAP8 SWAP9 DUP4 DUP9 SWAP8 SWAP9 MSTORE SWAP1 DUP2 PUSH0 EQ PUSH2 0x34F JUMPI POP PUSH1 0x1 EQ PUSH2 0x7F5 JUMPI POP POP POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT DUP4 DUP6 LT OR PUSH2 0x2C6 JUMPI POP DUP3 SWAP2 DUP3 PUSH2 0x2C2 SWAP3 MSTORE DUP3 PUSH2 0x85E JUMP JUMPDEST PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE SWAP3 SWAP5 SWAP4 POP PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B JUMPDEST DUP3 DUP5 LT PUSH2 0x83E JUMPI POP POP POP SWAP1 PUSH1 0x1F NOT SWAP3 PUSH1 0x1F SWAP3 DUP3 ADD ADD SWAP2 DUP2 SWAP4 PUSH2 0x292 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP8 ADD MSTORE DUP8 SWAP5 POP SWAP3 DUP6 ADD SWAP3 DUP2 ADD PUSH2 0x821 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x7A1 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 PUSH1 0x40 SWAP5 DUP2 DUP6 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP3 DUP9 ADD MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xEF JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xEF JUMPI JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP2 DUP3 ISZERO PUSH2 0x9AE JUMPI AND SWAP2 DUP3 ISZERO PUSH2 0x982 JUMPI DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 DUP2 LT PUSH2 0x950 JUMPI DUP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH1 0x20 SWAP3 DUP6 PUSH0 MSTORE PUSH0 DUP5 MSTORE SUB PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP5 PUSH0 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 DUP2 SLOAD ADD SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG3 JUMP JUMPDEST DUP3 PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD6 GT PUSH24 0x6B0F7247C5A2EC86A2487D61AB1EE6F4ADD9F4210FAFCDA4 0xF6 0xF 0xDA 0xF6 0xB4 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"144:1033:44:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;144:1033:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1648:13:57;144:1033:44;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;-1:-1:-1;144:1033:44;;;;-1:-1:-1;;;;144:1033:44;;;;;;;;;;;;;;;;;;;;1671:17:57;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;;;;;413:21;;144:1033;;;;;;;;413:21;144:1033;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;-1:-1:-1;144:1033:44;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;-1:-1:-1;144:1033:44;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;-1:-1:-1;144:1033:44;;1671:17:57;144:1033:44;;-1:-1:-1;144:1033:44;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;-1:-1:-1;144:1033:44;;-1:-1:-1;144:1033:44;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;-1:-1:-1;144:1033:44;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;-1:-1:-1;;144:1033:44;;;-1:-1:-1;;;;;144:1033:44;;;;;;;;;;:::o;:::-;;;;;;;;;;;;-1:-1:-1;;;;;144:1033:44;;;;;;;;-1:-1:-1;;144:1033:44;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":2219,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_3917":{"entryPoint":2184,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_string":{"entryPoint":2142,"id":null,"parameterSlots":2,"returnSlots":1},"fun_transfer":{"entryPoint":2254,"id":10228,"parameterSlots":3,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"7233":[{"length":32,"start":1279}]},"linkReferences":{},"object":"6080604090808252600480361015610015575f80fd5b5f3560e01c91826306fdde031461077557508163095ea7b31461069657816318160ddd1461067857816323b872dd14610523578163313ce567146104e657816340c10f191461040557816370a08231146103c257816395d89b41146102415781639dc29fac14610151578163a9059cbb146100f3575063dd62ed3e14610099575f80fd5b346100ef57806003193601126100ef576020906100b4610888565b6100bc6108ab565b9073ffffffffffffffffffffffffffffffffffffffff8091165f5260018452825f2091165f528252805f20549051908152f35b5f80fd5b82346100ef57806003193601126100ef5761010c610888565b60243592831561012b575060209261012491336108ce565b5160018152f35b7f10cadee3000000000000000000000000000000000000000000000000000000005f525ffd5b9050346100ef57816003193601126100ef5761016b610888565b9173ffffffffffffffffffffffffffffffffffffffff602435931691821561021657825f525f602052815f2054908482106101e35750837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef925f956020938688528785520381872055816002540360025551908152a3005b909291507fe450d38c000000000000000000000000000000000000000000000000000000005f525260245260445260645ffd5b5f907f96c6fd1e0000000000000000000000000000000000000000000000000000000082525260245ffd5b9050346100ef575f6003193601126100ef5781515f928254936001948060011c600182169687156103b8575b602092838310891461038c57869798838897985290815f1461034f57506001146102f2575b50505003601f01601f191682019267ffffffffffffffff8411838510176102c657508291826102c292528261085e565b0390f35b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5f888152929493507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8284106103395750505090601f1992601f92820101918193610292565b805488850187015287945092850192810161031c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016848701525050151560051b830101905081601f601f19610292565b6022887f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b90607f169061026d565b82346100ef5760206003193601126100ef5760209073ffffffffffffffffffffffffffffffffffffffff6103f4610888565b165f525f8252805f20549051908152f35b82346100ef57806003193601126100ef5761041e610888565b9073ffffffffffffffffffffffffffffffffffffffff60243592169283156104bb576002549083820180921161048f57505f927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9260209260025585855284835280852082815401905551908152a3005b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5f907fec442f050000000000000000000000000000000000000000000000000000000082525260245ffd5b82346100ef575f6003193601126100ef576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b82346100ef5760606003193601126100ef5761053d610888565b6105456108ab565b9060443593841561012b5773ffffffffffffffffffffffffffffffffffffffff8216805f526001602052845f20335f52602052845f2054917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83106105b3575b6020866101248988886108ce565b8683106106445781156106195733156105ee575091856101249492602097945f5260018852865f20335f52885203855f2055919481936105a5565b5f907f94280d620000000000000000000000000000000000000000000000000000000082525260245ffd5b5f907fe602df050000000000000000000000000000000000000000000000000000000082525260245ffd5b8287917ffb8f41b2000000000000000000000000000000000000000000000000000000005f5233905260245260445260645ffd5b82346100ef575f6003193601126100ef576020906002549051908152f35b82346100ef57806003193601126100ef576106af610888565b60243590331561074a5773ffffffffffffffffffffffffffffffffffffffff1690811561071f5760209350335f5260018452825f20825f52845280835f205582519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925843392a35160018152f35b5f847f94280d620000000000000000000000000000000000000000000000000000000082525260245ffd5b5f847fe602df050000000000000000000000000000000000000000000000000000000082525260245ffd5b909150346100ef575f6003193601126100ef575f92600354936001948060011c60018216968715610854575b602092838310891461038c57869798838897985290815f1461034f57506001146107f55750505003601f01601f191682019267ffffffffffffffff8411838510176102c657508291826102c292528261085e565b60035f908152929493507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b82841061083e5750505090601f1992601f92820101918193610292565b8054888501870152879450928501928101610821565b90607f16906107a1565b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b73ffffffffffffffffffffffffffffffffffffffff8091169182156109ae571691821561098257815f525f60205260405f205481811061095057817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f5260405f20818154019055604051908152a3565b827fe450d38c000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffdfea2646970667358221220d611776b0f7247c5a2ec86a2487d61ab1ee6f4add9f4210fafcda4f60fdaf6b464736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x6FDDE03 EQ PUSH2 0x775 JUMPI POP DUP2 PUSH4 0x95EA7B3 EQ PUSH2 0x696 JUMPI DUP2 PUSH4 0x18160DDD EQ PUSH2 0x678 JUMPI DUP2 PUSH4 0x23B872DD EQ PUSH2 0x523 JUMPI DUP2 PUSH4 0x313CE567 EQ PUSH2 0x4E6 JUMPI DUP2 PUSH4 0x40C10F19 EQ PUSH2 0x405 JUMPI DUP2 PUSH4 0x70A08231 EQ PUSH2 0x3C2 JUMPI DUP2 PUSH4 0x95D89B41 EQ PUSH2 0x241 JUMPI DUP2 PUSH4 0x9DC29FAC EQ PUSH2 0x151 JUMPI DUP2 PUSH4 0xA9059CBB EQ PUSH2 0xF3 JUMPI POP PUSH4 0xDD62ED3E EQ PUSH2 0x99 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH2 0xB4 PUSH2 0x888 JUMP JUMPDEST PUSH2 0xBC PUSH2 0x8AB JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x10C PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP3 DUP4 ISZERO PUSH2 0x12B JUMPI POP PUSH1 0x20 SWAP3 PUSH2 0x124 SWAP2 CALLER PUSH2 0x8CE JUMP JUMPDEST MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0x10CADEE300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xEF JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x16B PUSH2 0x888 JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD SWAP4 AND SWAP2 DUP3 ISZERO PUSH2 0x216 JUMPI DUP3 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SLOAD SWAP1 DUP5 DUP3 LT PUSH2 0x1E3 JUMPI POP DUP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH0 SWAP6 PUSH1 0x20 SWAP4 DUP7 DUP9 MSTORE DUP8 DUP6 MSTORE SUB DUP2 DUP8 KECCAK256 SSTORE DUP2 PUSH1 0x2 SLOAD SUB PUSH1 0x2 SSTORE MLOAD SWAP1 DUP2 MSTORE LOG3 STOP JUMPDEST SWAP1 SWAP3 SWAP2 POP PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI DUP2 MLOAD PUSH0 SWAP3 DUP3 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP1 PUSH1 0x1 SHR PUSH1 0x1 DUP3 AND SWAP7 DUP8 ISZERO PUSH2 0x3B8 JUMPI JUMPDEST PUSH1 0x20 SWAP3 DUP4 DUP4 LT DUP10 EQ PUSH2 0x38C JUMPI DUP7 SWAP8 SWAP9 DUP4 DUP9 SWAP8 SWAP9 MSTORE SWAP1 DUP2 PUSH0 EQ PUSH2 0x34F JUMPI POP PUSH1 0x1 EQ PUSH2 0x2F2 JUMPI JUMPDEST POP POP POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT DUP4 DUP6 LT OR PUSH2 0x2C6 JUMPI POP DUP3 SWAP2 DUP3 PUSH2 0x2C2 SWAP3 MSTORE DUP3 PUSH2 0x85E JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP9 DUP2 MSTORE SWAP3 SWAP5 SWAP4 POP PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x339 JUMPI POP POP POP SWAP1 PUSH1 0x1F NOT SWAP3 PUSH1 0x1F SWAP3 DUP3 ADD ADD SWAP2 DUP2 SWAP4 PUSH2 0x292 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP8 ADD MSTORE DUP8 SWAP5 POP SWAP3 DUP6 ADD SWAP3 DUP2 ADD PUSH2 0x31C JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP5 DUP8 ADD MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP2 PUSH1 0x1F PUSH1 0x1F NOT PUSH2 0x292 JUMP JUMPDEST PUSH1 0x22 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x26D JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3F4 PUSH2 0x888 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x41E PUSH2 0x888 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD SWAP3 AND SWAP3 DUP4 ISZERO PUSH2 0x4BB JUMPI PUSH1 0x2 SLOAD SWAP1 DUP4 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x48F JUMPI POP PUSH0 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH1 0x20 SWAP3 PUSH1 0x2 SSTORE DUP6 DUP6 MSTORE DUP5 DUP4 MSTORE DUP1 DUP6 KECCAK256 DUP3 DUP2 SLOAD ADD SWAP1 SSTORE MLOAD SWAP1 DUP2 MSTORE LOG3 STOP JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x53D PUSH2 0x888 JUMP JUMPDEST PUSH2 0x545 PUSH2 0x8AB JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP4 DUP5 ISZERO PUSH2 0x12B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 SLOAD SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 LT PUSH2 0x5B3 JUMPI JUMPDEST PUSH1 0x20 DUP7 PUSH2 0x124 DUP10 DUP9 DUP9 PUSH2 0x8CE JUMP JUMPDEST DUP7 DUP4 LT PUSH2 0x644 JUMPI DUP2 ISZERO PUSH2 0x619 JUMPI CALLER ISZERO PUSH2 0x5EE JUMPI POP SWAP2 DUP6 PUSH2 0x124 SWAP5 SWAP3 PUSH1 0x20 SWAP8 SWAP5 PUSH0 MSTORE PUSH1 0x1 DUP9 MSTORE DUP7 PUSH0 KECCAK256 CALLER PUSH0 MSTORE DUP9 MSTORE SUB DUP6 PUSH0 KECCAK256 SSTORE SWAP2 SWAP5 DUP2 SWAP4 PUSH2 0x5A5 JUMP JUMPDEST PUSH0 SWAP1 PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP8 SWAP2 PUSH32 0xFB8F41B200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x6AF PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 CALLER ISZERO PUSH2 0x74A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 ISZERO PUSH2 0x71F JUMPI PUSH1 0x20 SWAP4 POP CALLER PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP3 PUSH0 KECCAK256 DUP3 PUSH0 MSTORE DUP5 MSTORE DUP1 DUP4 PUSH0 KECCAK256 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP5 CALLER SWAP3 LOG3 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP5 PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP5 PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH0 SWAP3 PUSH1 0x3 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP1 PUSH1 0x1 SHR PUSH1 0x1 DUP3 AND SWAP7 DUP8 ISZERO PUSH2 0x854 JUMPI JUMPDEST PUSH1 0x20 SWAP3 DUP4 DUP4 LT DUP10 EQ PUSH2 0x38C JUMPI DUP7 SWAP8 SWAP9 DUP4 DUP9 SWAP8 SWAP9 MSTORE SWAP1 DUP2 PUSH0 EQ PUSH2 0x34F JUMPI POP PUSH1 0x1 EQ PUSH2 0x7F5 JUMPI POP POP POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT DUP4 DUP6 LT OR PUSH2 0x2C6 JUMPI POP DUP3 SWAP2 DUP3 PUSH2 0x2C2 SWAP3 MSTORE DUP3 PUSH2 0x85E JUMP JUMPDEST PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE SWAP3 SWAP5 SWAP4 POP PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B JUMPDEST DUP3 DUP5 LT PUSH2 0x83E JUMPI POP POP POP SWAP1 PUSH1 0x1F NOT SWAP3 PUSH1 0x1F SWAP3 DUP3 ADD ADD SWAP2 DUP2 SWAP4 PUSH2 0x292 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP8 ADD MSTORE DUP8 SWAP5 POP SWAP3 DUP6 ADD SWAP3 DUP2 ADD PUSH2 0x821 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x7A1 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 PUSH1 0x40 SWAP5 DUP2 DUP6 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP3 DUP9 ADD MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xEF JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xEF JUMPI JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP2 DUP3 ISZERO PUSH2 0x9AE JUMPI AND SWAP2 DUP3 ISZERO PUSH2 0x982 JUMPI DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 DUP2 LT PUSH2 0x950 JUMPI DUP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH1 0x20 SWAP3 DUP6 PUSH0 MSTORE PUSH0 DUP5 MSTORE SUB PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP5 PUSH0 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 DUP2 SLOAD ADD SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG3 JUMP JUMPDEST DUP3 PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD6 GT PUSH24 0x6B0F7247C5A2EC86A2487D61AB1EE6F4ADD9F4210FAFCDA4 0xF6 0xF 0xDA 0xF6 0xB4 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"144:1033:44:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;3561:11:57;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;:::i;:::-;;;837:10;;;833:62;;735:10:64;144:1033:44;735:10:64;3388:5:57;735:10:64;;3388:5:57;:::i;:::-;144:1033:44;;;;;833:62;870:14;144:1033;870:14;144:1033;870:14;144:1033;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;:::i;:::-;;;;;;;7958:21:57;;;7954:89;;144:1033:44;;;;;;;;;;6244:19:57;;;;6240:115;;144:1033:44;;6987:25:57;144:1033:44;;;;;;;;;;;;;;;;;6714:21:57;144:1033:44;;6714:21:57;144:1033:44;;;;;6987:25:57;144:1033:44;6240:115:57;6290:50;;;;;144:1033:44;6290:50:57;144:1033:44;;;;;;;6290:50:57;7954:89;144:1033:44;8002:30:57;;;;144:1033:44;;;8002:30:57;144:1033:44;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;144:1033:44;;;-1:-1:-1;;144:1033:44;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;;-1:-1:-1;144:1033:44;;-1:-1:-1;;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;:::i;:::-;;;;;;;7432:21:57;;;7428:91;;6137:21;144:1033:44;;;;;;;;;;;;;6987:25:57;144:1033:44;;;6137:21:57;144:1033:44;;;;;;;;;;;;;;;;;;;;6987:25:57;144:1033:44;;;;;;;;;;;7428:91:57;144:1033:44;7476:32:57;;;;144:1033:44;;;7476:32:57;144:1033:44;;;;;;-1:-1:-1;;144:1033:44;;;;;;;;;521:9;144:1033;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;:::i;:::-;;;:::i;:::-;;;;1058:10;;;1054:62;;144:1033;;;;;;;;;;;;735:10:64;144:1033:44;;;;;;;;10484:36:57;10503:17;10484:36;;10480:309;;144:1033:44;;4890:5:57;;;;;;:::i;10480:309::-;10540:24;;;10536:130;;9717:19;;9713:89;;735:10:64;9815:21:57;9811:90;;144:1033:44;;;4890:5:57;144:1033:44;;;;;;;;;;;;;735:10:64;144:1033:44;;;;;;;;;10480:309:57;;;;;;9811:90;144:1033:44;9859:31:57;;;;144:1033:44;;;9859:31:57;9713:89;144:1033:44;9759:32:57;;;;144:1033:44;;;9759:32:57;10536:130;10591:60;;;;144:1033:44;10591:60:57;735:10:64;144:1033:44;;;;;;;;10591:60:57;144:1033:44;;;;;;-1:-1:-1;;144:1033:44;;;;;;;2881:12:57;144:1033:44;;;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;:::i;:::-;;;735:10:64;;9717:19:57;9713:89;;144:1033:44;;9815:21:57;;;9811:90;;144:1033:44;735:10:64;;;144:1033:44;;8746:4:57;144:1033:44;;;;;;;;;;;;;;;;;;;;9989:31:57;735:10:64;;9989:31:57;;144:1033:44;8746:4:57;144:1033:44;;;9811:90:57;144:1033:44;9859:31:57;;;;144:1033:44;;;9859:31:57;9713:89;144:1033:44;9759:32:57;;;;144:1033:44;;;9759:32:57;144:1033:44;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;1837:5:57;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;144:1033:44;;;-1:-1:-1;;144:1033:44;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1837:5:57;144:1033:44;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:44;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;5297:300:57:-;144:1033:44;;;;5380:18:57;;;5376:86;;144:1033:44;5475:16:57;;;5471:86;;144:1033:44;5997:540:57;144:1033:44;5997:540:57;144:1033:44;;;5997:540:57;144:1033:44;;6244:19:57;;;6240:115;;144:1033:44;6987:25:57;144:1033:44;;;;5997:540:57;144:1033:44;5997:540:57;144:1033:44;;;;5997:540:57;144:1033:44;;;5997:540:57;144:1033:44;;5997:540:57;144:1033:44;;;;;;;;;;;;6987:25:57;5297:300::o;6240:115::-;6290:50;;5997:540;6290:50;;144:1033:44;;;;;;5997:540:57;6290:50;5471:86;5514:32;5396:1;5514:32;5396:1;5514:32;144:1033:44;;5396:1:57;5514:32;5376:86;5421:30;5396:1;5421:30;5396:1;5421:30;144:1033:44;;5396:1:57;5421:30"},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(address,uint256)":"9dc29fac","decimals()":"313ce567","mint(address,uint256)":"40c10f19","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroTransfer\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ZeroTransfer()\":[{\"details\":\"Simulate tokens that don't allow zero transfers.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol\":\"ERC20TestToken\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol\":{\"keccak256\":\"0x6c1d91dd0f44221f140ab22e9e981ef1f9028018428f0c9cb41577e757e1b4b8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c42dce6530450a6476970b6bd0aa8feec8b12c5b3837702f94395ab3157cede7\",\"dweb:/ipfs/QmYb3V9wcMTjdN1XwNdQM4ZHG9EcFvKLZNKDFRyraBW5DQ\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x86b7b71a6aedefdad89b607378eeab1dcc5389b9ea7d17346d08af01d7190994\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1dc2db8d94a21eac8efe03adf574c419b08536409b416057a2b5b95cb772c43c\",\"dweb:/ipfs/QmZfqJCKVU1ScuX2A7s8WZdQEaikwJbDH5JBrBdKTUT4Gu\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol":{"CommonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Base contract for performing access control on external functions within pools.\",\"errors\":{\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":\"CommonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"ProtocolFeeController":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault_","type":"address"},{"internalType":"uint256","name":"initialGlobalSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"initialGlobalYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[],"name":"InvalidMigrationSource","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolRegisteredWithFeeController","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[],"name":"MAX_CREATOR_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFeesHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"migratePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"fun_ensureValidPrecision":{"entryPoint":488,"id":9229,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"60e0346101d057601f612e8638819003918201601f19168301916001600160401b038311848410176101d4578084926060946040528339810103126101d05780516001600160a01b03811691908281036101d057604060208301519201519230608052156101c1578060a05260c0526706f05b59d3b20000908181116101b2576020816100ac7fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d936101e8565b805f55604051908152a181116101a3576020816100e97f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6936101e8565b80600155604051908152a1604051612c5a908161022c823960805181612172015260a051818181610ed6015281816110fc0152612809015260c0518181816102530152818161036e015281816103f8015281816105170152818161058501528181610864015281816108d201528181610c7d01528181610db3015281816115d60152818161177b0152818161191c01528181611a7601528181611be401528181612319015281816125d40152818161275001526129540152f35b6353c24f4760e11b5f5260045ffd5b637e6eb7fb60e01b5f5260045ffd5b630647140b60e51b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b64174876e800808204818102918183041490151715610217570361020857565b63419fd9e760e11b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c9081630252aab514611fa6575080630874327f14611b935780630b8e059b14611b5b5780630ddd60c614611b3a5780631377c16c14611a1b5780632772d156146118385780632e1d388d146119f95780633af52712146118c157806352f125f01461189657806355fb76af146118795780635c15a0b41461183d5780635e32e4e81461183857806371447ea81461169357806371ecc8fb146114ef57806377ff76e71461125b5780637869ee181461123f5780637a2b97dc146111d4578063851c1bb3146111845780638a3c5c69146111205780638d928af8146110dd5780638df44c54146110555780638f4ab9ca146110345780639e95f3fd14610fa8578063a93df2a414610f43578063aaabadc514610e90578063abaa335614610ce7578063b53a70b214610c00578063c673bdaf14610bc3578063cf7b287f14610b5d578063f706144514610b28578063fa399f2a14610392578063fbfa77cf1461034f5763fd267f3914610187575f80fd5b34610323576040600319360112610323576101a0611fda565b602435906101ac6127a4565b6706f05b59d3b200008211610327576101c482612a29565b6101cd81612254565b6101d68261243d565b916040516101e381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600260205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169161027d81612b35565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e92602092610309575b50604051908152a2005b610312906120ac565b5f6102ff565b6040513d5f823e3d90fd5b5f80fd5b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576103ab611fda565b6103b3612746565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f81602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610318575f905f92610acb575b506001600160a01b0383165f52600260205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610ac1575b84610ab1575b61047287612915565b94905f5b8681106108225789896001600160a01b0382165f52600360205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610818575b85610806575b6104c784612915565b96905f5b8881106104d457005b6104de8189612213565b516104ec575b6001016104cb565b986001600160a01b036104ff8b84612213565b51169061050c8b8a612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561080257604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107f7579082916107e0575b506107b357505f99816105c8828b612213565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107385761060e818a612213565b5186156107105761061e9061248f565b6001670de0b6b3a764000061065f8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c8783010401901515026124ac565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f20610693848254612482565b905561069f828b612213565b519081848103116106e3576001936106d9916001600160a01b038c165f52600860205260405f20905f5260205260405f2092038254612482565b90555b90506104e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001918561077d5761074a828b612213565b51906001600160a01b038a165f52600760205260405f20905f5260205261077660405f20918254612482565b90556106dc565b610787828b612213565b51906001600160a01b038a165f52600860205260405f20905f5260205261077660405f20918254612482565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6107e9906120ac565b6107f457808c6105b5565b80fd5b6040513d84823e3d90fd5b5080fd5b905061081281836124bf565b906104be565b82151595506104b8565b61082c8187612213565b5161083a575b600101610476565b6001600160a01b0361084c8284612213565b5116906108598188612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561032357604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857610aa2575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610937868d612213565b51936040519485521692a38815610a27576109528188612213565b518515610710576109629061248f565b6001670de0b6b3a76400006109a3897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b8783010401901515026124ac565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f206109d7848254612482565b90556109e38289612213565b519081848103116106e357600193610a1d916001600160a01b038f165f52600860205260405f20905f5260205260405f2092038254612482565b90555b9050610832565b60019184610a6c57610a398289612213565b51906001600160a01b038d165f52600760205260405f20905f52602052610a6560405f20918254612482565b9055610a20565b610a768289612213565b51906001600160a01b038d165f52600860205260405f20905f52602052610a6560405f20918254612482565b610aab906120ac565b8b6108ff565b50610abc83826124bf565b610469565b8115159450610463565b9150503d805f833e610add81836120dc565b8101906040818303126103235780519167ffffffffffffffff928381116103235781610b0a9184016123dc565b92602083015190811161032357610b2192016123dc565b908361042a565b3461032357604060031936011261032357610b5b610b44611fda565b610b4c611ff0565b90610b5681612500565b61268f565b005b3461032357604060031936011261032357610b76611fda565b610b7e611ff0565b90610b876127a4565b610b9081612915565b915f5b838110610b9c57005b80610bbd6001600160a01b03610bb460019487612213565b51168785612a71565b01610b93565b34610323576020600319360112610323576001600160a01b03610be4611fda565b165f526004602052602060ff60405f2054166040519015158152f35b3461032357606060031936011261032357610c19611fda565b610c21611ff0565b604435906001600160a01b039283831680840361032357604090610c436127a4565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561031857610cb4575b610b5b9350612a71565b6040843d604011610cdf575b81610ccd604093836120dc565b8101031261032357610b5b9350610caa565b3d9150610cc0565b3461032357604060031936011261032357610d00611fda565b60243590610d0c6127a4565b6706f05b59d3b200008211610e6857610d2482612a29565b610d2d81612254565b610d368261243d565b91604051610d4381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610ddd81612b03565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd926020926103095750604051908152a2005b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610318576020925f92610f14575b5060405191168152f35b610f35919250833d8511610f3c575b610f2d81836120dc565b8101906123bd565b9083610f0a565b503d610f23565b3461032357602060031936011261032357600435610f5f6127a4565b6706f05b59d3b200008111610e6857602081610f9b7f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f693612a29565b80600155604051908152a1005b346103235760208060031936011261032357610fc2611fda565b90610fcc82612915565b90610fd6826121c4565b925f946001600160a01b03809116955b848110610fff5760405180610ffb8882612028565b0390f35b600190875f526008845260405f20836110188388612213565b51165f52845260405f205461102d8289612213565b5201610fe6565b3461032357602060031936011261032357610b5b611050611fda565b612254565b34610323576020806003193601126103235761106f611fda565b9061107982612915565b90611083826121c4565b925f946001600160a01b03809116955b8481106110a85760405180610ffb8882612028565b600190875f526007845260405f20836110c18388612213565b51165f52845260405f20546110d68289612213565b5201611093565b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103235760206003193601126103235760043561113c6127a4565b6706f05b59d3b200008111610327576020816111787fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d93612a29565b805f55604051908152a1005b34610323576020600319360112610323576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610323576111cc602091612147565b604051908152f35b34610323576020600319360112610323576001600160a01b036111f5611fda565b165f526003602052602060405f206040519061121082612063565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610323575f6003193601126103235760205f54604051908152f35b3461032357606060031936011261032357611274611fda565b61127c611ff0565b90604435918215159081840361032357611294612746565b6001600160a01b0380931691825f52826020926004845260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146114e457835f9687925b8915611469578483878c5f9b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb985b6113698461243d565b6040519061137682612063565b67ffffffffffffffff809116825260036113e6868401948686528b5f5260028852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a1692161717905561243d565b956040839051976113f689612063565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055604061143a905192839283909291602090604083019483521515910152565b0390a28d518c815290151560208201529081906040820190565b0390a289519586521693a38351928352820152f35b8483878c6001549b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb98611360565b835f549687926112e5565b346103235760208060031936011261032357611509611fda565b61151281612254565b6001600160a01b039182821692835f526002825260405f20906040519161153883612063565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f549381611688575b5061156957005b6115728361243d565b90806040519261158184612063565b168252848201905f8252875f526002865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261160081612b35565b843b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e936103095750604051908152a2005b905083141587611562565b3461032357602080600319360112610323576116ad611fda565b6116b681612254565b6001600160a01b039182821692835f526003825260405f2090604051916116dc83612063565b549167ffffffffffffffff9060ff8285169485835260401c161590858215910152600154938161182d575b5061170e57005b6117178361243d565b90806040519261172684612063565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926117a581612b03565b843b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd936103095750604051908152a2005b905083141587611707565b612006565b34610323576020600319360112610323576001600160a01b0361185e611fda565b165f526002602052602060405f206040519061121082612063565b34610323575f600319360112610323576020600154604051908152f35b3461032357602060031936011261032357610b5b6118b2611fda565b6118bb81612595565b9061268f565b34610323576040600319360112610323576118da611fda565b602435906118e781612500565b670de0ad9b58f1600082116119d1576118ff81612254565b6001600160a01b039182821692835f5260066020528160405f20557f0000000000000000000000000000000000000000000000000000000000000000169161194681612b03565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34926020926103095750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020604051670de0ad9b58f160008152f35b3461032357604060031936011261032357611a34611fda565b60243590611a4181612500565b670de0ad9b58f1600082116119d157611a5981612254565b6001600160a01b039182821692835f5260056020528160405f20557f00000000000000000000000000000000000000000000000000000000000000001691611aa081612b35565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611b2b5750604051908152a2005b611b34906120ac565b846102ff565b346103235760406003193601126103235760206111cc6024356004356124bf565b34610323576020600319360112610323576001600160a01b03611b7c611fda565b165f526005602052602060405f2054604051908152f35b346103235760208060031936011261032357611bad611fda565b906001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528281600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156103185782915f91611f6c575b501692308414611f44571690815f526004815260ff60405f205416611f1857815f526004815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152826004820152604081602481875afa908115610318575f905f92611ef4575b50611cb79061243d565b9060405190611cc582612063565b67ffffffffffffffff80931682528382019015158152845f52600284528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc0000000000000000000000000000000000000000000000000000000083528560048401526040836024818a5afa928315610318575f905f94611ec0575b50611d7b9061243d565b938060405195611d8a87612063565b1685528585019315158452865f526003865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528260048201528181602481875afa5f9181611e8e575b50938291602495611e7c575b50604051948580927f0252aab50000000000000000000000000000000000000000000000000000000082528660048301525afa5f9381611e4d575b50611e3e57005b6006915f525260405f20555f80f35b9093508181813d8311611e75575b611e6581836120dc565b8101031261032357519284611e37565b503d611e5b565b845f526005835260405f205585611dfc565b9150938282813d8311611eb9575b611ea681836120dc565b8101031261032357905190936024611df0565b503d611e9c565b611d7b9450611ee7915060403d604011611eed575b611edf81836120dc565b81019061212a565b93611d71565b503d611ed5565b611cb79250611f12915060403d604011611eed57611edf81836120dc565b91611cad565b507fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250848092503d8311611f9f575b611f8581836120dc565b810103126103235751818116810361032357819085611c15565b503d611f7b565b34610323576020600319360112610323576020906001600160a01b03611fca611fda565b165f526006825260405f20548152f35b600435906001600160a01b038216820361032357565b602435906001600160a01b038216820361032357565b34610323575f6003193601126103235760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b82811061204f575050505090565b835185529381019392810192600101612041565b6040810190811067ffffffffffffffff82111761207f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161207f57604052565b6060810190811067ffffffffffffffff82111761207f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761207f57604052565b5190811515820361032357565b91908260409103126103235761214460208351930161211d565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526121a6816120c0565b51902090565b67ffffffffffffffff811161207f5760051b60200190565b906121ce826121ac565b6121db60405191826120dc565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061220982946121ac565b0190602036910137565b80518210156122275760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b601f9060445f6001600160a01b03926040519360209481868201937ffa399f2a000000000000000000000000000000000000000000000000000000008552166024820152602481526122a5816120c0565b836040519586809581947f48c894910000000000000000000000000000000000000000000000000000000083528a60048401525180918160248501528484015e838382840101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09a8b91011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af180156103185761234a57505050565b3d805f833e61235981836120dc565b810192828285031261032357815167ffffffffffffffff9283821161032357019380601f8601121561032357845192831161207f576123a28460405193601f86011601836120dc565b8282528383860101116103235781835f95018483015e010152565b9081602091031261032357516001600160a01b03811681036103235790565b9080601f83011215610323578151906020916123f7816121ac565b9361240560405195866120dc565b81855260208086019260051b82010192831161032357602001905b82821061242e575050505090565b81518152908301908301612420565b67ffffffffffffffff90818111612452571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b919082018092116106e357565b90670de0b6b3a7640000918281029281840414901517156106e357565b818102929181159184041417156106e357565b906124ec64174876e8009283926124e5670de0b6b3a764000091838303838510026124ac565b0490612482565b048181029181830414901517156106e35790565b6001600160a01b03908161251382612595565b168015612554573303612524575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361032357565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa908115612685575f9161260c575b5001511690565b90506060813d60601161267d575b81612627606093836120dc565b81010312610323578151906060820182811067ffffffffffffffff82111761207f57612673918491825261265a81612581565b845261266860208201612581565b602085015201612581565b828201525f612605565b3d915061261a565b82513d5f823e3d90fd5b9061269982612915565b92905f5b8481106126ab575050505050565b6001906001600160a01b03806126c18386612213565b5116818616805f5260086020818152604094855f20855f528252855f205495866126f3575b505050505050500161269d565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612732878d88612b67565b519586528a1694a45f8080808080806126e6565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361277857565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6127d07fffffffff000000000000000000000000000000000000000000000000000000005f3516612147565b6001600160a01b036040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103185784925f926128f3575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610318575f926128bd575b50501561289557565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116128ec575b6128d481836120dc565b81010312610323576128e59061211d565b5f8061288c565b503d6128ca565b606491925061290e90843d8611610f3c57610f2d81836120dc565b919061283b565b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610318575f9361298b575b5050815190565b909192503d805f833e61299e81836120dc565b810160209182818303126103235780519067ffffffffffffffff821161032357019281601f850112156103235783516129d6816121ac565b946129e460405196876120dc565b818652848087019260051b820101938411610323578401905b838210612a11575050505050905f80612984565b815183811681036103235781529084019084016129fd565b64174876e8008082048181029181830414901517156106e35703612a4957565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612aaa575b505050505050565b82612aef877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612b67565b6040519687521694a45f8080808080612aa2565b6001600160a01b03165f52600360205261214467ffffffffffffffff60405f205416600660205260405f2054906124bf565b6001600160a01b03165f52600260205261214467ffffffffffffffff60405f205416600560205260405f2054906124bf565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208083019182526001600160a01b0394909416602483015260448083019590955293815290925f91612bbf6064826120dc565b519082855af115610318575f513d612c1b57506001600160a01b0381163b155b612be65750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415612bdf56fea2646970667358221220af4d7b7326f3e2d7a8e0ba230faabb4ec5497c4f0aa75f9bd32c889273f022e164736f6c634300081b0033","opcodes":"PUSH1 0xE0 CALLVALUE PUSH2 0x1D0 JUMPI PUSH1 0x1F PUSH2 0x2E86 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x1D4 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x60 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x1D0 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP2 SWAP1 DUP3 DUP2 SUB PUSH2 0x1D0 JUMPI PUSH1 0x40 PUSH1 0x20 DUP4 ADD MLOAD SWAP3 ADD MLOAD SWAP3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0x1C1 JUMPI DUP1 PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE PUSH8 0x6F05B59D3B20000 SWAP1 DUP2 DUP2 GT PUSH2 0x1B2 JUMPI PUSH1 0x20 DUP2 PUSH2 0xAC PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x1E8 JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 DUP2 GT PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP2 PUSH2 0xE9 PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x1E8 JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 PUSH1 0x40 MLOAD PUSH2 0x2C5A SWAP1 DUP2 PUSH2 0x22C DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x2172 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0xED6 ADD MSTORE DUP2 DUP2 PUSH2 0x10FC ADD MSTORE PUSH2 0x2809 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x253 ADD MSTORE DUP2 DUP2 PUSH2 0x36E ADD MSTORE DUP2 DUP2 PUSH2 0x3F8 ADD MSTORE DUP2 DUP2 PUSH2 0x517 ADD MSTORE DUP2 DUP2 PUSH2 0x585 ADD MSTORE DUP2 DUP2 PUSH2 0x864 ADD MSTORE DUP2 DUP2 PUSH2 0x8D2 ADD MSTORE DUP2 DUP2 PUSH2 0xC7D ADD MSTORE DUP2 DUP2 PUSH2 0xDB3 ADD MSTORE DUP2 DUP2 PUSH2 0x15D6 ADD MSTORE DUP2 DUP2 PUSH2 0x177B ADD MSTORE DUP2 DUP2 PUSH2 0x191C ADD MSTORE DUP2 DUP2 PUSH2 0x1A76 ADD MSTORE DUP2 DUP2 PUSH2 0x1BE4 ADD MSTORE DUP2 DUP2 PUSH2 0x2319 ADD MSTORE DUP2 DUP2 PUSH2 0x25D4 ADD MSTORE DUP2 DUP2 PUSH2 0x2750 ADD MSTORE PUSH2 0x2954 ADD MSTORE RETURN JUMPDEST PUSH4 0x53C24F47 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x7E6EB7FB PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x217 JUMPI SUB PUSH2 0x208 JUMPI JUMP JUMPDEST PUSH4 0x419FD9E7 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x1FA6 JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1B93 JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1B5B JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1B3A JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1A1B JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x19F9 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x18C1 JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x1896 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x1879 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x183D JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x1693 JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x14EF JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x125B JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x123F JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x11D4 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1184 JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1120 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x10DD JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0x1055 JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x1034 JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0xFA8 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0xF43 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xE90 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xC00 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xBC3 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xB5D JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB28 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x34F JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x187 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A0 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AC PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x327 JUMPI PUSH2 0x1C4 DUP3 PUSH2 0x2A29 JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH2 0x1D6 DUP3 PUSH2 0x243D JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1E3 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x27D DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x312 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH0 PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x3AB PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0x2746 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0xACB JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAC1 JUMPI JUMPDEST DUP5 PUSH2 0xAB1 JUMPI JUMPDEST PUSH2 0x472 DUP8 PUSH2 0x2915 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x822 JUMPI DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x818 JUMPI JUMPDEST DUP6 PUSH2 0x806 JUMPI JUMPDEST PUSH2 0x4C7 DUP5 PUSH2 0x2915 JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x4D4 JUMPI STOP JUMPDEST PUSH2 0x4DE DUP2 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x4EC JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4CB JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4FF DUP12 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x50C DUP12 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x7F7 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x7E0 JUMPI JUMPDEST POP PUSH2 0x7B3 JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5C8 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x738 JUMPI PUSH2 0x60E DUP2 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x710 JUMPI PUSH2 0x61E SWAP1 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x65F DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24AC JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x693 DUP5 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x69F DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0x6D9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x4E4 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x77D JUMPI PUSH2 0x74A DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6DC JUMP JUMPDEST PUSH2 0x787 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x7E9 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH2 0x7F4 JUMPI DUP1 DUP13 PUSH2 0x5B5 JUMP JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x812 DUP2 DUP4 PUSH2 0x24BF JUMP JUMPDEST SWAP1 PUSH2 0x4BE JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x82C DUP2 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x83A JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x84C DUP3 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x859 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xAA2 JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x937 DUP7 DUP14 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA27 JUMPI PUSH2 0x952 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x710 JUMPI PUSH2 0x962 SWAP1 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9A3 DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24AC JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x9D7 DUP5 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x9E3 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA1D SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA6C JUMPI PUSH2 0xA39 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA20 JUMP JUMPDEST PUSH2 0xA76 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST PUSH2 0xAAB SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP12 PUSH2 0x8FF JUMP JUMPDEST POP PUSH2 0xABC DUP4 DUP3 PUSH2 0x24BF JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x463 JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xADD DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x323 JUMPI DUP2 PUSH2 0xB0A SWAP2 DUP5 ADD PUSH2 0x23DC JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x323 JUMPI PUSH2 0xB21 SWAP3 ADD PUSH2 0x23DC JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x42A JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xB44 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB4C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB56 DUP2 PUSH2 0x2500 JUMP JUMPDEST PUSH2 0x268F JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB76 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB7E PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB87 PUSH2 0x27A4 JUMP JUMPDEST PUSH2 0xB90 DUP2 PUSH2 0x2915 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB9C JUMPI STOP JUMPDEST DUP1 PUSH2 0xBBD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBB4 PUSH1 0x1 SWAP5 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP8 DUP6 PUSH2 0x2A71 JUMP JUMPDEST ADD PUSH2 0xB93 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBE4 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xC19 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xC21 PUSH2 0x1FF0 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xC43 PUSH2 0x27A4 JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xCB4 JUMPI JUMPDEST PUSH2 0xB5B SWAP4 POP PUSH2 0x2A71 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xCDF JUMPI JUMPDEST DUP2 PUSH2 0xCCD PUSH1 0x40 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0xB5B SWAP4 POP PUSH2 0xCAA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCC0 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xD00 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xD0C PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xE68 JUMPI PUSH2 0xD24 DUP3 PUSH2 0x2A29 JUMP JUMPDEST PUSH2 0xD2D DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH2 0xD36 DUP3 PUSH2 0x243D JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xD43 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xDDD DUP2 PUSH2 0x2B03 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xF14 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xF35 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF3C JUMPI JUMPDEST PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x23BD JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xF0A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF23 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xF5F PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xE68 JUMPI PUSH1 0x20 DUP2 PUSH2 0xF9B PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x2A29 JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xFC2 PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0xFCC DUP3 PUSH2 0x2915 JUMP JUMPDEST SWAP1 PUSH2 0xFD6 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0xFFF JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1018 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x102D DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0xFE6 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x1050 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x2254 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x106F PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0x1079 DUP3 PUSH2 0x2915 JUMP JUMPDEST SWAP1 PUSH2 0x1083 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x10A8 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x10C1 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x10D6 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0x1093 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x113C PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x327 JUMPI PUSH1 0x20 DUP2 PUSH2 0x1178 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x2A29 JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI PUSH2 0x11CC PUSH1 0x20 SWAP2 PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x11F5 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1274 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x127C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO SWAP1 DUP2 DUP5 SUB PUSH2 0x323 JUMPI PUSH2 0x1294 PUSH2 0x2746 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP2 DUP3 PUSH0 MSTORE DUP3 PUSH1 0x20 SWAP3 PUSH1 0x4 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x14E4 JUMPI DUP4 PUSH0 SWAP7 DUP8 SWAP3 JUMPDEST DUP10 ISZERO PUSH2 0x1469 JUMPI DUP5 DUP4 DUP8 DUP13 PUSH0 SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 JUMPDEST PUSH2 0x1369 DUP5 PUSH2 0x243D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1376 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x3 PUSH2 0x13E6 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x2 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x243D JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x13F6 DUP10 PUSH2 0x2063 JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 PUSH2 0x143A SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP14 MLOAD DUP13 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 DUP10 MLOAD SWAP6 DUP7 MSTORE AND SWAP4 LOG3 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP5 DUP4 DUP8 DUP13 PUSH1 0x1 SLOAD SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 PUSH2 0x1360 JUMP JUMPDEST DUP4 PUSH0 SLOAD SWAP7 DUP8 SWAP3 PUSH2 0x12E5 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1509 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x1512 DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1538 DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x1688 JUMPI JUMPDEST POP PUSH2 0x1569 JUMPI STOP JUMPDEST PUSH2 0x1572 DUP4 PUSH2 0x243D JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1581 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x1600 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1562 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x16AD PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x16B6 DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x16DC DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x182D JUMPI JUMPDEST POP PUSH2 0x170E JUMPI STOP JUMPDEST PUSH2 0x1717 DUP4 PUSH2 0x243D JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1726 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x17A5 DUP2 PUSH2 0x2B03 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1707 JUMP JUMPDEST PUSH2 0x2006 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x185E PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x18B2 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x18BB DUP2 PUSH2 0x2595 JUMP JUMPDEST SWAP1 PUSH2 0x268F JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x18DA PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x18E7 DUP2 PUSH2 0x2500 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x18FF DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1946 DUP2 PUSH2 0x2B03 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A34 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1A41 DUP2 PUSH2 0x2500 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x1A59 DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1AA0 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1B2B JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1B34 SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP5 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x11CC PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x24BF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1B7C PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1BAD PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1F6C JUMPI JUMPDEST POP AND SWAP3 ADDRESS DUP5 EQ PUSH2 0x1F44 JUMPI AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x1F18 JUMPI DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x1EF4 JUMPI JUMPDEST POP PUSH2 0x1CB7 SWAP1 PUSH2 0x243D JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1CC5 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP5 PUSH0 MSTORE PUSH1 0x2 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP6 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x1EC0 JUMPI JUMPDEST POP PUSH2 0x1D7B SWAP1 PUSH2 0x243D JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1D8A DUP8 PUSH2 0x2063 JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP7 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL PUSH0 SWAP2 DUP2 PUSH2 0x1E8E JUMPI JUMPDEST POP SWAP4 DUP3 SWAP2 PUSH1 0x24 SWAP6 PUSH2 0x1E7C JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL PUSH0 SWAP4 DUP2 PUSH2 0x1E4D JUMPI JUMPDEST POP PUSH2 0x1E3E JUMPI STOP JUMPDEST PUSH1 0x6 SWAP2 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1E75 JUMPI JUMPDEST PUSH2 0x1E65 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD SWAP3 DUP5 PUSH2 0x1E37 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E5B JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP6 PUSH2 0x1DFC JUMP JUMPDEST SWAP2 POP SWAP4 DUP3 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1EB9 JUMPI JUMPDEST PUSH2 0x1EA6 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI SWAP1 MLOAD SWAP1 SWAP4 PUSH1 0x24 PUSH2 0x1DF0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E9C JUMP JUMPDEST PUSH2 0x1D7B SWAP5 POP PUSH2 0x1EE7 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI JUMPDEST PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x212A JUMP JUMPDEST SWAP4 PUSH2 0x1D71 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1ED5 JUMP JUMPDEST PUSH2 0x1CB7 SWAP3 POP PUSH2 0x1F12 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 PUSH2 0x1CAD JUMP JUMPDEST POP PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP5 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1F9F JUMPI JUMPDEST PUSH2 0x1F85 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1C15 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1F7B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1FCA PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x204F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2041 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2144 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x211D JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x21A6 DUP2 PUSH2 0x20C0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x21CE DUP3 PUSH2 0x21AC JUMP JUMPDEST PUSH2 0x21DB PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2209 DUP3 SWAP5 PUSH2 0x21AC JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2227 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1F SWAP1 PUSH1 0x44 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x40 MLOAD SWAP4 PUSH1 0x20 SWAP5 DUP2 DUP7 DUP3 ADD SWAP4 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x22A5 DUP2 PUSH2 0x20C0 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP6 DUP2 SWAP5 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP11 PUSH1 0x4 DUP5 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP6 ADD MSTORE DUP5 DUP5 ADD MCOPY DUP4 DUP4 DUP3 DUP5 ADD ADD MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP11 DUP12 SWAP2 ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0x234A JUMPI POP POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2359 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP3 DUP3 DUP3 DUP6 SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP3 GT PUSH2 0x323 JUMPI ADD SWAP4 DUP1 PUSH1 0x1F DUP7 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP5 MLOAD SWAP3 DUP4 GT PUSH2 0x207F JUMPI PUSH2 0x23A2 DUP5 PUSH1 0x40 MLOAD SWAP4 PUSH1 0x1F DUP7 ADD AND ADD DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x323 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x323 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x23F7 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP4 PUSH2 0x2405 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x323 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x242E JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2420 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2452 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x24EC PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x24E5 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x24AC JUMP JUMPDEST DIV SWAP1 PUSH2 0x2482 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x2513 DUP3 PUSH2 0x2595 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x2554 JUMPI CALLER SUB PUSH2 0x2524 JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2685 JUMPI PUSH0 SWAP2 PUSH2 0x260C JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x267D JUMPI JUMPDEST DUP2 PUSH2 0x2627 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH2 0x2673 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x265A DUP2 PUSH2 0x2581 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x2668 PUSH1 0x20 DUP3 ADD PUSH2 0x2581 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x2581 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x2605 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x261A JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x2699 DUP3 PUSH2 0x2915 JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x26AB JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x26C1 DUP4 DUP7 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x26F3 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x269D JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2732 DUP8 DUP14 DUP9 PUSH2 0x2B67 JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x26E6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x2778 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x27D0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x28F3 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x28BD JUMPI JUMPDEST POP POP ISZERO PUSH2 0x2895 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x28EC JUMPI JUMPDEST PUSH2 0x28D4 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0x28E5 SWAP1 PUSH2 0x211D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x288C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x28CA JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x290E SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xF3C JUMPI PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x283B JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP4 PUSH2 0x298B JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x299E DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP4 MLOAD PUSH2 0x29D6 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP5 PUSH2 0x29E4 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x323 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2A11 JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x2984 JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x29FD JUMP JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SUB PUSH2 0x2A49 JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2AAA JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2AEF DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2B67 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2AA2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24BF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24BF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP1 SWAP3 PUSH0 SWAP2 PUSH2 0x2BBF PUSH1 0x64 DUP3 PUSH2 0x20DC JUMP JUMPDEST MLOAD SWAP1 DUP3 DUP6 GAS CALL ISZERO PUSH2 0x318 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x2C1B JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x2BE6 JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x2BDF JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF 0x4D PUSH28 0x7326F3E2D7A8E0BA230FAABB4EC5497C4F0AA75F9BD32C889273F022 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"3120:30799:46:-:0;;;;;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;-1:-1:-1;;;;;3120:30799:46;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3120:30799:46;;;;;;;;;;;;;;;;;922:4:47;;1347:46:33;;943:28:45;939:79;;1028:14;;;409::48;;4720:5:46;7248:55;;;;7244:127;;3120:30799;7402:20;;25803:68;7402:20;;:::i;:::-;3120:30799;-1:-1:-1;3120:30799:46;;;;;;25803:68;7581:57;;7577:130;;3120:30799;7738:21;;26371:70;7738:21;;:::i;:::-;3120:30799;;;;;;;;26371:70;3120:30799;;;;;;;;1347:46:33;3120:30799:46;;;;;1028:14:45;3120:30799:46;;;;;;;;;;;;;;;409:14:48;3120:30799:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7577:130;7661:35;;;-1:-1:-1;7661:35:46;;-1:-1:-1;7661:35:46;7244:127;7326:34;;;-1:-1:-1;7326:34:46;;-1:-1:-1;7326:34:46;939:79:45;994:13;;;-1:-1:-1;994:13:45;;-1:-1:-1;994:13:45;3120:30799:46;-1:-1:-1;3120:30799:46;;;;;;-1:-1:-1;3120:30799:46;;;;;-1:-1:-1;3120:30799:46;33168:749;19669:4:32;;;;;;;;;;;;;;;;;;33769:74:46;33765:146;;33168:749::o;33765:146::-;33866:34;;;-1:-1:-1;33866:34:46;;-1:-1:-1;33866:34:46;19669:4:32;3120:30799:46;;;-1:-1:-1;19669:4:32;;;;;-1:-1:-1;19669:4:32"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":8176,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_18470":{"entryPoint":8154,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":9601,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":9180,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":8477,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":9149,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_bool_fromMemory":{"entryPoint":8490,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":8232,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_bool":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":8644,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":8620,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":9346,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":9388,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_18620":{"entryPoint":9359,"id":null,"parameterSlots":1,"returnSlots":1},"external_fun_MAX_PROTOCOL_SWAP_FEE_PERCENTAGE":{"entryPoint":8198,"id":null,"parameterSlots":0,"returnSlots":0},"finalize_allocation":{"entryPoint":8412,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_18472":{"entryPoint":8291,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_18605":{"entryPoint":8364,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_42900":{"entryPoint":8384,"id":null,"parameterSlots":1,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":10148,"id":4356,"parameterSlots":0,"returnSlots":0},"fun_collectAggregateFees":{"entryPoint":8788,"id":7768,"parameterSlots":1,"returnSlots":0},"fun_computeAggregateFeePercentage":{"entryPoint":9407,"id":8415,"parameterSlots":2,"returnSlots":1},"fun_ensureCallerIsPoolCreator":{"entryPoint":9472,"id":8451,"parameterSlots":1,"returnSlots":0},"fun_ensureOnlyVault":{"entryPoint":10054,"id":9337,"parameterSlots":0,"returnSlots":0},"fun_ensureValidPrecision":{"entryPoint":10793,"id":9229,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":8519,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage":{"entryPoint":11011,"id":8385,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage_18606":{"entryPoint":11061,"id":8385,"parameterSlots":1,"returnSlots":1},"fun_getPoolCreator":{"entryPoint":9621,"id":8494,"parameterSlots":1,"returnSlots":1},"fun_getPoolTokensAndCount":{"entryPoint":10517,"id":8475,"parameterSlots":1,"returnSlots":2},"fun_safeTransfer":{"entryPoint":11111,"id":10647,"parameterSlots":3,"returnSlots":0},"fun_toUint64":{"entryPoint":9277,"id":15026,"parameterSlots":1,"returnSlots":1},"fun_withdrawPoolCreatorFees":{"entryPoint":9871,"id":9132,"parameterSlots":2,"returnSlots":0},"fun_withdrawProtocolFees":{"entryPoint":10865,"id":9028,"parameterSlots":3,"returnSlots":0},"memory_array_index_access_contract_IERC20_dyn":{"entryPoint":8723,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":8562}],"7358":[{"length":32,"start":3798},{"length":32,"start":4348},{"length":32,"start":10249}],"9299":[{"length":32,"start":595},{"length":32,"start":878},{"length":32,"start":1016},{"length":32,"start":1303},{"length":32,"start":1413},{"length":32,"start":2148},{"length":32,"start":2258},{"length":32,"start":3197},{"length":32,"start":3507},{"length":32,"start":5590},{"length":32,"start":6011},{"length":32,"start":6428},{"length":32,"start":6774},{"length":32,"start":7140},{"length":32,"start":8985},{"length":32,"start":9684},{"length":32,"start":10064},{"length":32,"start":10580}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c9081630252aab514611fa6575080630874327f14611b935780630b8e059b14611b5b5780630ddd60c614611b3a5780631377c16c14611a1b5780632772d156146118385780632e1d388d146119f95780633af52712146118c157806352f125f01461189657806355fb76af146118795780635c15a0b41461183d5780635e32e4e81461183857806371447ea81461169357806371ecc8fb146114ef57806377ff76e71461125b5780637869ee181461123f5780637a2b97dc146111d4578063851c1bb3146111845780638a3c5c69146111205780638d928af8146110dd5780638df44c54146110555780638f4ab9ca146110345780639e95f3fd14610fa8578063a93df2a414610f43578063aaabadc514610e90578063abaa335614610ce7578063b53a70b214610c00578063c673bdaf14610bc3578063cf7b287f14610b5d578063f706144514610b28578063fa399f2a14610392578063fbfa77cf1461034f5763fd267f3914610187575f80fd5b34610323576040600319360112610323576101a0611fda565b602435906101ac6127a4565b6706f05b59d3b200008211610327576101c482612a29565b6101cd81612254565b6101d68261243d565b916040516101e381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600260205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169161027d81612b35565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e92602092610309575b50604051908152a2005b610312906120ac565b5f6102ff565b6040513d5f823e3d90fd5b5f80fd5b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576103ab611fda565b6103b3612746565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f81602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610318575f905f92610acb575b506001600160a01b0383165f52600260205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610ac1575b84610ab1575b61047287612915565b94905f5b8681106108225789896001600160a01b0382165f52600360205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610818575b85610806575b6104c784612915565b96905f5b8881106104d457005b6104de8189612213565b516104ec575b6001016104cb565b986001600160a01b036104ff8b84612213565b51169061050c8b8a612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561080257604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107f7579082916107e0575b506107b357505f99816105c8828b612213565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107385761060e818a612213565b5186156107105761061e9061248f565b6001670de0b6b3a764000061065f8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c8783010401901515026124ac565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f20610693848254612482565b905561069f828b612213565b519081848103116106e3576001936106d9916001600160a01b038c165f52600860205260405f20905f5260205260405f2092038254612482565b90555b90506104e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001918561077d5761074a828b612213565b51906001600160a01b038a165f52600760205260405f20905f5260205261077660405f20918254612482565b90556106dc565b610787828b612213565b51906001600160a01b038a165f52600860205260405f20905f5260205261077660405f20918254612482565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6107e9906120ac565b6107f457808c6105b5565b80fd5b6040513d84823e3d90fd5b5080fd5b905061081281836124bf565b906104be565b82151595506104b8565b61082c8187612213565b5161083a575b600101610476565b6001600160a01b0361084c8284612213565b5116906108598188612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561032357604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857610aa2575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610937868d612213565b51936040519485521692a38815610a27576109528188612213565b518515610710576109629061248f565b6001670de0b6b3a76400006109a3897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b8783010401901515026124ac565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f206109d7848254612482565b90556109e38289612213565b519081848103116106e357600193610a1d916001600160a01b038f165f52600860205260405f20905f5260205260405f2092038254612482565b90555b9050610832565b60019184610a6c57610a398289612213565b51906001600160a01b038d165f52600760205260405f20905f52602052610a6560405f20918254612482565b9055610a20565b610a768289612213565b51906001600160a01b038d165f52600860205260405f20905f52602052610a6560405f20918254612482565b610aab906120ac565b8b6108ff565b50610abc83826124bf565b610469565b8115159450610463565b9150503d805f833e610add81836120dc565b8101906040818303126103235780519167ffffffffffffffff928381116103235781610b0a9184016123dc565b92602083015190811161032357610b2192016123dc565b908361042a565b3461032357604060031936011261032357610b5b610b44611fda565b610b4c611ff0565b90610b5681612500565b61268f565b005b3461032357604060031936011261032357610b76611fda565b610b7e611ff0565b90610b876127a4565b610b9081612915565b915f5b838110610b9c57005b80610bbd6001600160a01b03610bb460019487612213565b51168785612a71565b01610b93565b34610323576020600319360112610323576001600160a01b03610be4611fda565b165f526004602052602060ff60405f2054166040519015158152f35b3461032357606060031936011261032357610c19611fda565b610c21611ff0565b604435906001600160a01b039283831680840361032357604090610c436127a4565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561031857610cb4575b610b5b9350612a71565b6040843d604011610cdf575b81610ccd604093836120dc565b8101031261032357610b5b9350610caa565b3d9150610cc0565b3461032357604060031936011261032357610d00611fda565b60243590610d0c6127a4565b6706f05b59d3b200008211610e6857610d2482612a29565b610d2d81612254565b610d368261243d565b91604051610d4381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610ddd81612b03565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd926020926103095750604051908152a2005b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610318576020925f92610f14575b5060405191168152f35b610f35919250833d8511610f3c575b610f2d81836120dc565b8101906123bd565b9083610f0a565b503d610f23565b3461032357602060031936011261032357600435610f5f6127a4565b6706f05b59d3b200008111610e6857602081610f9b7f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f693612a29565b80600155604051908152a1005b346103235760208060031936011261032357610fc2611fda565b90610fcc82612915565b90610fd6826121c4565b925f946001600160a01b03809116955b848110610fff5760405180610ffb8882612028565b0390f35b600190875f526008845260405f20836110188388612213565b51165f52845260405f205461102d8289612213565b5201610fe6565b3461032357602060031936011261032357610b5b611050611fda565b612254565b34610323576020806003193601126103235761106f611fda565b9061107982612915565b90611083826121c4565b925f946001600160a01b03809116955b8481106110a85760405180610ffb8882612028565b600190875f526007845260405f20836110c18388612213565b51165f52845260405f20546110d68289612213565b5201611093565b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103235760206003193601126103235760043561113c6127a4565b6706f05b59d3b200008111610327576020816111787fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d93612a29565b805f55604051908152a1005b34610323576020600319360112610323576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610323576111cc602091612147565b604051908152f35b34610323576020600319360112610323576001600160a01b036111f5611fda565b165f526003602052602060405f206040519061121082612063565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610323575f6003193601126103235760205f54604051908152f35b3461032357606060031936011261032357611274611fda565b61127c611ff0565b90604435918215159081840361032357611294612746565b6001600160a01b0380931691825f52826020926004845260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146114e457835f9687925b8915611469578483878c5f9b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb985b6113698461243d565b6040519061137682612063565b67ffffffffffffffff809116825260036113e6868401948686528b5f5260028852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a1692161717905561243d565b956040839051976113f689612063565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055604061143a905192839283909291602090604083019483521515910152565b0390a28d518c815290151560208201529081906040820190565b0390a289519586521693a38351928352820152f35b8483878c6001549b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb98611360565b835f549687926112e5565b346103235760208060031936011261032357611509611fda565b61151281612254565b6001600160a01b039182821692835f526002825260405f20906040519161153883612063565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f549381611688575b5061156957005b6115728361243d565b90806040519261158184612063565b168252848201905f8252875f526002865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261160081612b35565b843b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e936103095750604051908152a2005b905083141587611562565b3461032357602080600319360112610323576116ad611fda565b6116b681612254565b6001600160a01b039182821692835f526003825260405f2090604051916116dc83612063565b549167ffffffffffffffff9060ff8285169485835260401c161590858215910152600154938161182d575b5061170e57005b6117178361243d565b90806040519261172684612063565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926117a581612b03565b843b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd936103095750604051908152a2005b905083141587611707565b612006565b34610323576020600319360112610323576001600160a01b0361185e611fda565b165f526002602052602060405f206040519061121082612063565b34610323575f600319360112610323576020600154604051908152f35b3461032357602060031936011261032357610b5b6118b2611fda565b6118bb81612595565b9061268f565b34610323576040600319360112610323576118da611fda565b602435906118e781612500565b670de0ad9b58f1600082116119d1576118ff81612254565b6001600160a01b039182821692835f5260066020528160405f20557f0000000000000000000000000000000000000000000000000000000000000000169161194681612b03565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34926020926103095750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020604051670de0ad9b58f160008152f35b3461032357604060031936011261032357611a34611fda565b60243590611a4181612500565b670de0ad9b58f1600082116119d157611a5981612254565b6001600160a01b039182821692835f5260056020528160405f20557f00000000000000000000000000000000000000000000000000000000000000001691611aa081612b35565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611b2b5750604051908152a2005b611b34906120ac565b846102ff565b346103235760406003193601126103235760206111cc6024356004356124bf565b34610323576020600319360112610323576001600160a01b03611b7c611fda565b165f526005602052602060405f2054604051908152f35b346103235760208060031936011261032357611bad611fda565b906001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528281600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156103185782915f91611f6c575b501692308414611f44571690815f526004815260ff60405f205416611f1857815f526004815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152826004820152604081602481875afa908115610318575f905f92611ef4575b50611cb79061243d565b9060405190611cc582612063565b67ffffffffffffffff80931682528382019015158152845f52600284528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc0000000000000000000000000000000000000000000000000000000083528560048401526040836024818a5afa928315610318575f905f94611ec0575b50611d7b9061243d565b938060405195611d8a87612063565b1685528585019315158452865f526003865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528260048201528181602481875afa5f9181611e8e575b50938291602495611e7c575b50604051948580927f0252aab50000000000000000000000000000000000000000000000000000000082528660048301525afa5f9381611e4d575b50611e3e57005b6006915f525260405f20555f80f35b9093508181813d8311611e75575b611e6581836120dc565b8101031261032357519284611e37565b503d611e5b565b845f526005835260405f205585611dfc565b9150938282813d8311611eb9575b611ea681836120dc565b8101031261032357905190936024611df0565b503d611e9c565b611d7b9450611ee7915060403d604011611eed575b611edf81836120dc565b81019061212a565b93611d71565b503d611ed5565b611cb79250611f12915060403d604011611eed57611edf81836120dc565b91611cad565b507fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250848092503d8311611f9f575b611f8581836120dc565b810103126103235751818116810361032357819085611c15565b503d611f7b565b34610323576020600319360112610323576020906001600160a01b03611fca611fda565b165f526006825260405f20548152f35b600435906001600160a01b038216820361032357565b602435906001600160a01b038216820361032357565b34610323575f6003193601126103235760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b82811061204f575050505090565b835185529381019392810192600101612041565b6040810190811067ffffffffffffffff82111761207f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161207f57604052565b6060810190811067ffffffffffffffff82111761207f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761207f57604052565b5190811515820361032357565b91908260409103126103235761214460208351930161211d565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526121a6816120c0565b51902090565b67ffffffffffffffff811161207f5760051b60200190565b906121ce826121ac565b6121db60405191826120dc565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061220982946121ac565b0190602036910137565b80518210156122275760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b601f9060445f6001600160a01b03926040519360209481868201937ffa399f2a000000000000000000000000000000000000000000000000000000008552166024820152602481526122a5816120c0565b836040519586809581947f48c894910000000000000000000000000000000000000000000000000000000083528a60048401525180918160248501528484015e838382840101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09a8b91011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af180156103185761234a57505050565b3d805f833e61235981836120dc565b810192828285031261032357815167ffffffffffffffff9283821161032357019380601f8601121561032357845192831161207f576123a28460405193601f86011601836120dc565b8282528383860101116103235781835f95018483015e010152565b9081602091031261032357516001600160a01b03811681036103235790565b9080601f83011215610323578151906020916123f7816121ac565b9361240560405195866120dc565b81855260208086019260051b82010192831161032357602001905b82821061242e575050505090565b81518152908301908301612420565b67ffffffffffffffff90818111612452571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b919082018092116106e357565b90670de0b6b3a7640000918281029281840414901517156106e357565b818102929181159184041417156106e357565b906124ec64174876e8009283926124e5670de0b6b3a764000091838303838510026124ac565b0490612482565b048181029181830414901517156106e35790565b6001600160a01b03908161251382612595565b168015612554573303612524575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361032357565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa908115612685575f9161260c575b5001511690565b90506060813d60601161267d575b81612627606093836120dc565b81010312610323578151906060820182811067ffffffffffffffff82111761207f57612673918491825261265a81612581565b845261266860208201612581565b602085015201612581565b828201525f612605565b3d915061261a565b82513d5f823e3d90fd5b9061269982612915565b92905f5b8481106126ab575050505050565b6001906001600160a01b03806126c18386612213565b5116818616805f5260086020818152604094855f20855f528252855f205495866126f3575b505050505050500161269d565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612732878d88612b67565b519586528a1694a45f8080808080806126e6565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361277857565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6127d07fffffffff000000000000000000000000000000000000000000000000000000005f3516612147565b6001600160a01b036040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103185784925f926128f3575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610318575f926128bd575b50501561289557565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116128ec575b6128d481836120dc565b81010312610323576128e59061211d565b5f8061288c565b503d6128ca565b606491925061290e90843d8611610f3c57610f2d81836120dc565b919061283b565b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610318575f9361298b575b5050815190565b909192503d805f833e61299e81836120dc565b810160209182818303126103235780519067ffffffffffffffff821161032357019281601f850112156103235783516129d6816121ac565b946129e460405196876120dc565b818652848087019260051b820101938411610323578401905b838210612a11575050505050905f80612984565b815183811681036103235781529084019084016129fd565b64174876e8008082048181029181830414901517156106e35703612a4957565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612aaa575b505050505050565b82612aef877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612b67565b6040519687521694a45f8080808080612aa2565b6001600160a01b03165f52600360205261214467ffffffffffffffff60405f205416600660205260405f2054906124bf565b6001600160a01b03165f52600260205261214467ffffffffffffffff60405f205416600560205260405f2054906124bf565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208083019182526001600160a01b0394909416602483015260448083019590955293815290925f91612bbf6064826120dc565b519082855af115610318575f513d612c1b57506001600160a01b0381163b155b612be65750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415612bdf56fea2646970667358221220af4d7b7326f3e2d7a8e0ba230faabb4ec5497c4f0aa75f9bd32c889273f022e164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x1FA6 JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1B93 JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1B5B JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1B3A JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1A1B JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x19F9 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x18C1 JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x1896 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x1879 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x183D JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x1693 JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x14EF JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x125B JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x123F JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x11D4 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1184 JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1120 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x10DD JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0x1055 JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x1034 JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0xFA8 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0xF43 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xE90 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xC00 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xBC3 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xB5D JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB28 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x34F JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x187 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A0 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AC PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x327 JUMPI PUSH2 0x1C4 DUP3 PUSH2 0x2A29 JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH2 0x1D6 DUP3 PUSH2 0x243D JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1E3 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x27D DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x312 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH0 PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x3AB PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0x2746 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0xACB JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAC1 JUMPI JUMPDEST DUP5 PUSH2 0xAB1 JUMPI JUMPDEST PUSH2 0x472 DUP8 PUSH2 0x2915 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x822 JUMPI DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x818 JUMPI JUMPDEST DUP6 PUSH2 0x806 JUMPI JUMPDEST PUSH2 0x4C7 DUP5 PUSH2 0x2915 JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x4D4 JUMPI STOP JUMPDEST PUSH2 0x4DE DUP2 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x4EC JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4CB JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4FF DUP12 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x50C DUP12 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x7F7 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x7E0 JUMPI JUMPDEST POP PUSH2 0x7B3 JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5C8 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x738 JUMPI PUSH2 0x60E DUP2 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x710 JUMPI PUSH2 0x61E SWAP1 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x65F DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24AC JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x693 DUP5 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x69F DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0x6D9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x4E4 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x77D JUMPI PUSH2 0x74A DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6DC JUMP JUMPDEST PUSH2 0x787 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x7E9 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH2 0x7F4 JUMPI DUP1 DUP13 PUSH2 0x5B5 JUMP JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x812 DUP2 DUP4 PUSH2 0x24BF JUMP JUMPDEST SWAP1 PUSH2 0x4BE JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x82C DUP2 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x83A JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x84C DUP3 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x859 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xAA2 JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x937 DUP7 DUP14 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA27 JUMPI PUSH2 0x952 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x710 JUMPI PUSH2 0x962 SWAP1 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9A3 DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24AC JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x9D7 DUP5 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x9E3 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA1D SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA6C JUMPI PUSH2 0xA39 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA20 JUMP JUMPDEST PUSH2 0xA76 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST PUSH2 0xAAB SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP12 PUSH2 0x8FF JUMP JUMPDEST POP PUSH2 0xABC DUP4 DUP3 PUSH2 0x24BF JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x463 JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xADD DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x323 JUMPI DUP2 PUSH2 0xB0A SWAP2 DUP5 ADD PUSH2 0x23DC JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x323 JUMPI PUSH2 0xB21 SWAP3 ADD PUSH2 0x23DC JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x42A JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xB44 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB4C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB56 DUP2 PUSH2 0x2500 JUMP JUMPDEST PUSH2 0x268F JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB76 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB7E PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB87 PUSH2 0x27A4 JUMP JUMPDEST PUSH2 0xB90 DUP2 PUSH2 0x2915 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB9C JUMPI STOP JUMPDEST DUP1 PUSH2 0xBBD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBB4 PUSH1 0x1 SWAP5 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP8 DUP6 PUSH2 0x2A71 JUMP JUMPDEST ADD PUSH2 0xB93 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBE4 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xC19 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xC21 PUSH2 0x1FF0 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xC43 PUSH2 0x27A4 JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xCB4 JUMPI JUMPDEST PUSH2 0xB5B SWAP4 POP PUSH2 0x2A71 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xCDF JUMPI JUMPDEST DUP2 PUSH2 0xCCD PUSH1 0x40 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0xB5B SWAP4 POP PUSH2 0xCAA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCC0 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xD00 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xD0C PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xE68 JUMPI PUSH2 0xD24 DUP3 PUSH2 0x2A29 JUMP JUMPDEST PUSH2 0xD2D DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH2 0xD36 DUP3 PUSH2 0x243D JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xD43 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xDDD DUP2 PUSH2 0x2B03 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xF14 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xF35 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF3C JUMPI JUMPDEST PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x23BD JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xF0A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF23 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xF5F PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xE68 JUMPI PUSH1 0x20 DUP2 PUSH2 0xF9B PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x2A29 JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xFC2 PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0xFCC DUP3 PUSH2 0x2915 JUMP JUMPDEST SWAP1 PUSH2 0xFD6 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0xFFF JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1018 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x102D DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0xFE6 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x1050 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x2254 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x106F PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0x1079 DUP3 PUSH2 0x2915 JUMP JUMPDEST SWAP1 PUSH2 0x1083 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x10A8 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x10C1 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x10D6 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0x1093 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x113C PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x327 JUMPI PUSH1 0x20 DUP2 PUSH2 0x1178 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x2A29 JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI PUSH2 0x11CC PUSH1 0x20 SWAP2 PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x11F5 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1274 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x127C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO SWAP1 DUP2 DUP5 SUB PUSH2 0x323 JUMPI PUSH2 0x1294 PUSH2 0x2746 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP2 DUP3 PUSH0 MSTORE DUP3 PUSH1 0x20 SWAP3 PUSH1 0x4 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x14E4 JUMPI DUP4 PUSH0 SWAP7 DUP8 SWAP3 JUMPDEST DUP10 ISZERO PUSH2 0x1469 JUMPI DUP5 DUP4 DUP8 DUP13 PUSH0 SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 JUMPDEST PUSH2 0x1369 DUP5 PUSH2 0x243D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1376 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x3 PUSH2 0x13E6 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x2 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x243D JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x13F6 DUP10 PUSH2 0x2063 JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 PUSH2 0x143A SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP14 MLOAD DUP13 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 DUP10 MLOAD SWAP6 DUP7 MSTORE AND SWAP4 LOG3 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP5 DUP4 DUP8 DUP13 PUSH1 0x1 SLOAD SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 PUSH2 0x1360 JUMP JUMPDEST DUP4 PUSH0 SLOAD SWAP7 DUP8 SWAP3 PUSH2 0x12E5 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1509 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x1512 DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1538 DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x1688 JUMPI JUMPDEST POP PUSH2 0x1569 JUMPI STOP JUMPDEST PUSH2 0x1572 DUP4 PUSH2 0x243D JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1581 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x1600 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1562 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x16AD PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x16B6 DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x16DC DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x182D JUMPI JUMPDEST POP PUSH2 0x170E JUMPI STOP JUMPDEST PUSH2 0x1717 DUP4 PUSH2 0x243D JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1726 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x17A5 DUP2 PUSH2 0x2B03 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1707 JUMP JUMPDEST PUSH2 0x2006 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x185E PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x18B2 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x18BB DUP2 PUSH2 0x2595 JUMP JUMPDEST SWAP1 PUSH2 0x268F JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x18DA PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x18E7 DUP2 PUSH2 0x2500 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x18FF DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1946 DUP2 PUSH2 0x2B03 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A34 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1A41 DUP2 PUSH2 0x2500 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x1A59 DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1AA0 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1B2B JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1B34 SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP5 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x11CC PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x24BF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1B7C PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1BAD PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1F6C JUMPI JUMPDEST POP AND SWAP3 ADDRESS DUP5 EQ PUSH2 0x1F44 JUMPI AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x1F18 JUMPI DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x1EF4 JUMPI JUMPDEST POP PUSH2 0x1CB7 SWAP1 PUSH2 0x243D JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1CC5 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP5 PUSH0 MSTORE PUSH1 0x2 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP6 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x1EC0 JUMPI JUMPDEST POP PUSH2 0x1D7B SWAP1 PUSH2 0x243D JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1D8A DUP8 PUSH2 0x2063 JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP7 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL PUSH0 SWAP2 DUP2 PUSH2 0x1E8E JUMPI JUMPDEST POP SWAP4 DUP3 SWAP2 PUSH1 0x24 SWAP6 PUSH2 0x1E7C JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL PUSH0 SWAP4 DUP2 PUSH2 0x1E4D JUMPI JUMPDEST POP PUSH2 0x1E3E JUMPI STOP JUMPDEST PUSH1 0x6 SWAP2 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1E75 JUMPI JUMPDEST PUSH2 0x1E65 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD SWAP3 DUP5 PUSH2 0x1E37 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E5B JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP6 PUSH2 0x1DFC JUMP JUMPDEST SWAP2 POP SWAP4 DUP3 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1EB9 JUMPI JUMPDEST PUSH2 0x1EA6 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI SWAP1 MLOAD SWAP1 SWAP4 PUSH1 0x24 PUSH2 0x1DF0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E9C JUMP JUMPDEST PUSH2 0x1D7B SWAP5 POP PUSH2 0x1EE7 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI JUMPDEST PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x212A JUMP JUMPDEST SWAP4 PUSH2 0x1D71 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1ED5 JUMP JUMPDEST PUSH2 0x1CB7 SWAP3 POP PUSH2 0x1F12 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 PUSH2 0x1CAD JUMP JUMPDEST POP PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP5 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1F9F JUMPI JUMPDEST PUSH2 0x1F85 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1C15 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1F7B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1FCA PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x204F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2041 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2144 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x211D JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x21A6 DUP2 PUSH2 0x20C0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x21CE DUP3 PUSH2 0x21AC JUMP JUMPDEST PUSH2 0x21DB PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2209 DUP3 SWAP5 PUSH2 0x21AC JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2227 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1F SWAP1 PUSH1 0x44 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x40 MLOAD SWAP4 PUSH1 0x20 SWAP5 DUP2 DUP7 DUP3 ADD SWAP4 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x22A5 DUP2 PUSH2 0x20C0 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP6 DUP2 SWAP5 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP11 PUSH1 0x4 DUP5 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP6 ADD MSTORE DUP5 DUP5 ADD MCOPY DUP4 DUP4 DUP3 DUP5 ADD ADD MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP11 DUP12 SWAP2 ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0x234A JUMPI POP POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2359 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP3 DUP3 DUP3 DUP6 SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP3 GT PUSH2 0x323 JUMPI ADD SWAP4 DUP1 PUSH1 0x1F DUP7 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP5 MLOAD SWAP3 DUP4 GT PUSH2 0x207F JUMPI PUSH2 0x23A2 DUP5 PUSH1 0x40 MLOAD SWAP4 PUSH1 0x1F DUP7 ADD AND ADD DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x323 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x323 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x23F7 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP4 PUSH2 0x2405 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x323 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x242E JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2420 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2452 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x24EC PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x24E5 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x24AC JUMP JUMPDEST DIV SWAP1 PUSH2 0x2482 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x2513 DUP3 PUSH2 0x2595 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x2554 JUMPI CALLER SUB PUSH2 0x2524 JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2685 JUMPI PUSH0 SWAP2 PUSH2 0x260C JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x267D JUMPI JUMPDEST DUP2 PUSH2 0x2627 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH2 0x2673 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x265A DUP2 PUSH2 0x2581 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x2668 PUSH1 0x20 DUP3 ADD PUSH2 0x2581 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x2581 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x2605 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x261A JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x2699 DUP3 PUSH2 0x2915 JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x26AB JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x26C1 DUP4 DUP7 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x26F3 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x269D JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2732 DUP8 DUP14 DUP9 PUSH2 0x2B67 JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x26E6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x2778 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x27D0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x28F3 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x28BD JUMPI JUMPDEST POP POP ISZERO PUSH2 0x2895 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x28EC JUMPI JUMPDEST PUSH2 0x28D4 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0x28E5 SWAP1 PUSH2 0x211D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x288C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x28CA JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x290E SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xF3C JUMPI PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x283B JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP4 PUSH2 0x298B JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x299E DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP4 MLOAD PUSH2 0x29D6 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP5 PUSH2 0x29E4 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x323 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2A11 JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x2984 JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x29FD JUMP JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SUB PUSH2 0x2A49 JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2AAA JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2AEF DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2B67 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2AA2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24BF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24BF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP1 SWAP3 PUSH0 SWAP2 PUSH2 0x2BBF PUSH1 0x64 DUP3 PUSH2 0x20DC JUMP JUMPDEST MLOAD SWAP1 DUP3 DUP6 GAS CALL ISZERO PUSH2 0x318 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x2C1B JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x2BE6 JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x2BDF JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF 0x4D PUSH28 0x7326F3E2D7A8E0BA230FAABB4EC5497C4F0AA75F9BD32C889273F022 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"3120:30799:46:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1581:26:47;3120:30799:46;1581:26:47;;;3120:30799:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;;;1525:73:33;;;:::i;:::-;4720:5:46;7248:55;;7244:127;;7402:20;;;:::i;:::-;8176:4;;;:::i;:::-;31750:39;;;:::i;:::-;3120:30799;;;;;;:::i;:::-;;;;;;;31707:129;;;3120:30799;26774:4;3120:30799;;-1:-1:-1;;;;;3120:30799:46;;;;;;;;31667:31;31707:129;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;31931:6;3120:30799;31977:54;;;;:::i;:::-;31931:101;;;;;3120:30799;;;31931:101;;-1:-1:-1;;;;;3120:30799:46;;;;;31931:101;;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;-1:-1:-1;;31931:101:46;;;;;;;32048:68;31931:101;31707:129;31931:101;;;3120:30799;;;;;;;32048:68;3120:30799;31931:101;;;;:::i;:::-;3120:30799;31931:101;;;3120:30799;;;;;;;;;31931:101;3120:30799;;;7244:127;7326:34;3120:30799;7326:34;3120:30799;;7326:34;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;;;;-1:-1:-1;;;;;8671:6:46;3120:30799;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;436:67:48;;:::i;:::-;3120:30799:46;;;9345:33;;-1:-1:-1;;;;;3120:30799:46;;;9345:33;;3120:30799;;9345:6;3120:30799;9345:6;;-1:-1:-1;;;;;9345:6:46;3120:30799;9345:33;;;;;;;3120:30799;;;9345:33;;;3120:30799;;-1:-1:-1;;;;;3120:30799:46;;;;;;;;;;;;;;11336:30;3120:30799;;;;;;11435:30;3120:30799;11499:28;;;;:57;;;;3120:30799;11566:199;;;3120:30799;11825:28;;;:::i;:::-;11868:13;;3120:30799;11883:13;;;;;;11091:20;;-1:-1:-1;;;;;3120:30799:46;;;;11192:32;3120:30799;;;;;;;;11290:134;3120:30799;;11387:31;3120:30799;;;;;;11435:30;3120:30799;11499:28;;;:57;;;;11863:1939;11566:199;;;11863:1939;11825:28;;;:::i;:::-;11868:13;;3120:30799;11883:13;;;;;;3120:30799;11898:3;11921:13;;;;:::i;:::-;3120:30799;11917:1875;;11898:3;3120:30799;;11868:13;;11917:1875;11973:13;-1:-1:-1;;;;;11973:13:46;;;;:::i;:::-;3120:30799;;12041:13;;;;;:::i;:::-;3120:30799;-1:-1:-1;;;;;9345:6:46;3120:30799;12005:50;;;;3120:30799;;12005:50;3120:30799;12005:50;;;3120:30799;12005:50;;3120:30799;12034:4;3120:30799;;;;;;;;9345:6;;3120:30799;9345:6;;-1:-1:-1;;;;;9345:6:46;3120:30799;12005:50;;;;;;;;;;;11917:1875;3120:30799;;;12230:240;3120:30799;12437:13;;;;;;:::i;:::-;3120:30799;;;;;;12398:53;3120:30799;-1:-1:-1;;;;;3120:30799:46;;12398:53;;12488:1290;;;;13094:13;;;;:::i;:::-;3120:30799;2004:6:39;;2000:58;;2153:5;;;:::i;:::-;3120:30799:46;465:4:39;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;3120:30799:46;-1:-1:-1;;;;;3120:30799:46;;;;13254:19;3120:30799;;;;;;;;;;;;;13254:51;3120:30799;;;13254:51;:::i;:::-;3120:30799;;13366:13;;;;:::i;:::-;3120:30799;;;;;;;;;;;13327:70;3120:30799;-1:-1:-1;;;;;3120:30799:46;;;;13327:22;3120:30799;;;;;;;;;;;;;;;;;13327:70;:::i;:::-;3120:30799;;12488:1290;11917:1875;;;;3120:30799;;;;;;;;;;2000:58:39;2033:14;3120:30799:46;2033:14:39;3120:30799:46;;2033:14:39;12488:1290:46;3120:30799;;11499:28;;;13617:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:46;;;;13581:19;3120:30799;;;;;;;;;;13581:49;3120:30799;;;;;;13581:49;:::i;:::-;3120:30799;;12488:1290;;13520:240;13724:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:46;;;;13685:22;3120:30799;;;;;;;;;;13685:52;3120:30799;;;;;;13685:52;:::i;3120:30799::-;;;;;;;;;;12005:50;;;;:::i;:::-;3120:30799;;12005:50;;;;3120:30799;;;12005:50;3120:30799;;;;;;;;;12005:50;3120:30799;;;11566:199;11675:79;;;;;;:::i;:::-;11566:199;;;11499:57;11531:25;;;;-1:-1:-1;11499:57:46;;11898:3;11921:13;;;;:::i;:::-;3120:30799;11917:1875;;11898:3;3120:30799;;11868:13;;11917:1875;-1:-1:-1;;;;;11973:13:46;;;;:::i;:::-;3120:30799;;12041:13;;;;;:::i;:::-;3120:30799;-1:-1:-1;;;;;9345:6:46;3120:30799;12005:50;;;;3120:30799;;12005:50;3120:30799;12005:50;;;3120:30799;12005:50;;3120:30799;12034:4;3120:30799;;;;;;;;;9345:6;3120:30799;9345:6;;-1:-1:-1;;;;;9345:6:46;3120:30799;12005:50;;;;;;;;11917:1875;12332:13;;;12294:52;3120:30799;-1:-1:-1;;;;;12332:13:46;;;;:::i;:::-;3120:30799;;;;;;;;12294:52;;12488:1290;;;;13094:13;;;;:::i;:::-;3120:30799;2004:6:39;;2000:58;;2153:5;;;:::i;:::-;3120:30799:46;465:4:39;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;3120:30799:46;-1:-1:-1;;;;;3120:30799:46;;;;13254:19;3120:30799;;;;;;;;;;;;;13254:51;3120:30799;;;13254:51;:::i;:::-;3120:30799;;13366:13;;;;:::i;:::-;3120:30799;;;;;;;;;;;13327:70;3120:30799;-1:-1:-1;;;;;3120:30799:46;;;;13327:22;3120:30799;;;;;;;;;;;;;;;;;13327:70;:::i;:::-;3120:30799;;12488:1290;11917:1875;;;;12488:1290;3120:30799;;11499:28;;;13617:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:46;;;;13581:19;3120:30799;;;;;;;;;;13581:49;3120:30799;;;;;;13581:49;:::i;:::-;3120:30799;;12488:1290;;13520:240;13724:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:46;;;;13685:22;3120:30799;;;;;;;;;;13685:52;3120:30799;;;;;;13685:52;:::i;12005:50::-;;;;:::i;:::-;;;;11566:199;11675:79;;;;;:::i;:::-;11566:199;;11499:57;11531:25;;;;-1:-1:-1;11499:57:46;;9345:33;;;;;;3120:30799;9345:33;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;9345:33;;;;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;30298:9;3120:30799;;:::i;:::-;;;:::i;:::-;7088:4;;;;:::i;:::-;30298:9;:::i;:::-;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;;;:::i;:::-;1525:73:33;;;:::i;:::-;29131:28:46;;;:::i;:::-;29175:13;3120:30799;29190:13;;;;;;3120:30799;29205:3;29239:13;29306:5;-1:-1:-1;;;;;29239:13:46;3120:30799;29239:13;;;:::i;:::-;3120:30799;;29306:5;;;:::i;:::-;3120:30799;29175:13;;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;-1:-1:-1;;;;;3120:30799:46;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;;;:::i;:::-;;;;-1:-1:-1;;;;;3120:30799:46;;;;;;;;;;1525:73:33;;;:::i;:::-;3120:30799:46;;;29588:52;;;;3120:30799;29588:52;;3120:30799;;;;29588:52;;3120:30799;;;;;29588:6;3120:30799;29588:52;;;;;;;;3120:30799;29689:5;;;;:::i;29588:52::-;3120:30799;29588:52;;3120:30799;29588:52;;;;;;3120:30799;29588:52;;;:::i;:::-;;;3120:30799;;;;29689:5;;-1:-1:-1;29588:52:46;;;;;-1:-1:-1;29588:52:46;;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;;;1525:73:33;;;:::i;:::-;4720:5:46;7581:57;;7577:130;;7738:21;;;:::i;:::-;8176:4;;;:::i;:::-;32783:40;;;:::i;:::-;3120:30799;;;;;;:::i;:::-;;;;;;;32740:130;;;3120:30799;27118:4;3120:30799;;-1:-1:-1;;;;;3120:30799:46;;;;;;;;32699:32;32740:130;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;32966:6;3120:30799;33013:55;;;;:::i;:::-;32966:103;;;;;3120:30799;;;32966:103;;-1:-1:-1;;;;;3120:30799:46;;;;;32966:103;;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;-1:-1:-1;;32966:103:46;;;;;;;33085:70;32966:103;32740:130;32966:103;;;3120:30799;;;;;;33085:70;3120:30799;7577:130;7661:35;3120:30799;7661:35;3120:30799;;7661:35;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;;;;1581:26:47;;-1:-1:-1;;;;;1581:26:47;3120:30799:46;;;1124:6:45;3120:30799:46;;1581:26:47;;;;;;;;;3120:30799:46;1581:26:47;;;3120:30799:46;;;;;;;;;1581:26:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;3120:30799:46;;;;;-1:-1:-1;;3120:30799:46;;;;;;;1525:73:33;;:::i;:::-;4720:5:46;7581:57;;7577:130;;3120:30799;7738:21;;26371:70;7738:21;;:::i;:::-;3120:30799;;;;;;;;26371:70;3120:30799;;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;15924:28;;;;:::i;:::-;15976:24;;;;:::i;:::-;16015:13;3120:30799;;-1:-1:-1;;;;;3120:30799:46;;;16010:124;16030:13;;;;;;3120:30799;;;;;;;:::i;:::-;;;;16045:3;3120:30799;;;;;16080:22;3120:30799;;;;;16109:13;;;;;:::i;:::-;3120:30799;;;;;;;;;;16064:59;;;;:::i;:::-;3120:30799;;16015:13;;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;15502:28;;;;:::i;:::-;15554:24;;;;:::i;:::-;15593:13;3120:30799;;-1:-1:-1;;;;;3120:30799:46;;;15588:121;15608:13;;;;;;3120:30799;;;;;;;:::i;15623:3::-;3120:30799;;;;;15658:19;3120:30799;;;;;15684:13;;;;;:::i;:::-;3120:30799;;;;;;;;;;15642:56;;;;:::i;:::-;3120:30799;;15593:13;;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;;;;-1:-1:-1;;;;;1124:6:45;3120:30799:46;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;1525:73:33;;:::i;:::-;4720:5:46;7248:55;;7244:127;;3120:30799;7402:20;;25803:68;7402:20;;:::i;:::-;3120:30799;;;;;;;;25803:68;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;-1:-1:-1;;;;;3120:30799:46;;:::i;:::-;;;;14798:32;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;436:67:48;;:::i;:::-;-1:-1:-1;;;;;3120:30799:46;;;;;;;;;;;;;;;;23815:4;3120:30799;;;;;;;23948:56;;;;;;3120:30799;23948:56;;;;24044:57;;;;;;;;3120:30799;24044:57;25031:90;3120:30799;24044:57;25244:69;24044:57;;;25136:92;24044:57;25136:92;24044:57;;24632:37;;;:::i;:::-;3120:30799;;;;;;:::i;:::-;;;;;;;24733:32;24817:38;24589:134;;;3120:30799;;;;;;;24549:31;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24817:38;:::i;:::-;3120:30799;;;;;;;;;:::i;:::-;;;;24774:135;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25031:90;3120:30799;;25031:90;;;;3120:30799;;;;;;;;;;;;;;;;;25031:90;;;;3120:30799;;;;;;;;;;;;;;;;;;;;25136:92;;;;3120:30799;;;;;;25244:69;;3120:30799;;;;;;;;;24044:57;3120:30799;;;;23815:4;3120:30799;24044:57;25031:90;3120:30799;24044:57;25244:69;24044:57;;;25136:92;24044:57;25136:92;24044:57;;;23948:56;3120:30799;;;23948:56;;;;;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:46;;;;;;;;16627:31;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;16753:81;;;;3120:30799;16749:176;;;3120:30799;16749:176;31750:39;;;:::i;:::-;3120:30799;;;;;;;;:::i;:::-;;;;31707:129;;;3120:30799;;;;;;;16627:31;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;31931:6;3120:30799;31977:54;;;;:::i;:::-;31931:101;;;;;3120:30799;;;31931:101;;-1:-1:-1;;;;;3120:30799:46;;;;;31931:101;;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;-1:-1:-1;;31931:101:46;;;;;;;32048:68;31931:101;;;3120:30799;;;;;;32048:68;3120:30799;16753:81;16786:48;;;;;16753:81;;;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:46;;;;;;;;17109:32;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;17190:33;3120:30799;17238:82;;;;3120:30799;17234:179;;;3120:30799;17234:179;32783:40;;;:::i;:::-;3120:30799;;;;;;;;:::i;:::-;;;;32740:130;;;3120:30799;;;;;;;17109:32;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;32966:6;3120:30799;33013:55;;;;:::i;:::-;32966:103;;;;;3120:30799;;;32966:103;;-1:-1:-1;;;;;3120:30799:46;;;;;32966:103;;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;-1:-1:-1;;32966:103:46;;;;;;;33085:70;32966:103;;;3120:30799;;;;;;33085:70;3120:30799;17238:82;17271:49;;;;;17238:82;;;3120:30799;;:::i;:::-;;;;;-1:-1:-1;;3120:30799:46;;;;;-1:-1:-1;;;;;3120:30799:46;;:::i;:::-;;;;14517:31;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;3120:30799:46;;;;;;14136:33;3120:30799;;;;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;30461:21;3120:30799;;:::i;:::-;30461:21;;;:::i;:::-;;;:::i;3120:30799::-;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;;;7088:4;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:46;;;;;;;;28563:31;3120:30799;;;;;;;28729:6;3120:30799;28776:55;;;;:::i;:::-;28729:103;;;;;3120:30799;;;28729:103;;-1:-1:-1;;;;;3120:30799:46;;;;;28729:103;;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;-1:-1:-1;;28729:103:46;;;;;;;28852:68;28729:103;3120:30799;28729:103;;;3120:30799;;;;;;28852:68;3120:30799;7864:127;7947:33;3120:30799;7947:33;3120:30799;;7947:33;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;;;;4975:9;3120:30799;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;;;7088:4;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:46;;;;;;;;28180:30;3120:30799;;;;;;;28344:6;3120:30799;28390:54;;;;:::i;:::-;28344:101;;;;;3120:30799;;;28344:101;;-1:-1:-1;;;;;3120:30799:46;;;;;28344:101;;3120:30799;;;;;;-1:-1:-1;;3120:30799:46;;;;;;-1:-1:-1;;28344:101:46;;;;;;;28465:67;28344:101;3120:30799;28344:101;;;3120:30799;;;;;;28465:67;3120:30799;28344:101;;;;:::i;:::-;;;;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;;16364:79;3120:30799;;;;16364:79;:::i;3120:30799::-;;;;;-1:-1:-1;;3120:30799:46;;;;;-1:-1:-1;;;;;3120:30799:46;;:::i;:::-;;;;15055:30;3120:30799;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:46;;;;;;;:::i;:::-;;-1:-1:-1;;;;;3120:30799:46;;;21277:33;;:6;;3120:30799;21277:6;;;3120:30799;21277:33;;;;;;;;3120:30799;21277:33;;;3120:30799;;;21362:4;;21325:42;;21321:104;;3120:30799;;;;;;;;;;;;;;21435:87;;3120:30799;;;;;;;;;21557:4;3120:30799;;;;;;;;;;21634:49;;;3120:30799;21634:49;;3120:30799;;21634:49;3120:30799;21634:49;;;;;;;;;3120:30799;;;21634:49;;;3120:30799;21776:36;;;;:::i;:::-;3120:30799;;;;;;;:::i;:::-;;;;;;;21733:133;;;3120:30799;;;;;;;;21693:31;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21941:72;3120:30799;21941:72;;;3120:30799;21941:72;;3120:30799;;21941:72;3120:30799;21941:72;;;;;;;;;3120:30799;;;21941:72;;;3120:30799;22107:37;;;;:::i;:::-;3120:30799;;;;;;;;:::i;:::-;;;;22064:135;;;3120:30799;;;;;;;;22023:32;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;22731:54;;;3120:30799;22731:54;;3120:30799;22731:54;;3120:30799;22731:54;;;;3120:30799;;22731:54;;;3120:30799;22727:277;;;;3120:30799;22727:277;;;3120:30799;;;;23018:55;;;;3120:30799;23018:55;;;3120:30799;23018:55;;3120:30799;23018:55;;3120:30799;;23018:55;;;3120:30799;23014:281;;;3120:30799;23014:281;23136:31;3120:30799;;;;;;;;;;;23018:55;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;23018:55;;;;;;;;;22727:277;3120:30799;;;22847:30;3120:30799;;;;;;22727:277;;;22731:54;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;22731:54;;3120:30799;22731:54;;;;;;;21941:72;22107:37;21941:72;;;;;3120:30799;21941:72;3120:30799;21941:72;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;21634:49;21776:36;21634:49;;;;;3120:30799;21634:49;3120:30799;21634:49;;;;;;;:::i;:::-;;;;21435:87;21484:27;;3120:30799;21484:27;3120:30799;;;;21484:27;21321:104;21390:24;3120:30799;21390:24;3120:30799;;21390:24;21277:33;;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;21277:33;;;;;;;;;;3120:30799;;;;;-1:-1:-1;;3120:30799:46;;;;;;;-1:-1:-1;;;;;3120:30799:46;;:::i;:::-;;;;15252:31;3120:30799;;;;;;;;;;;;;-1:-1:-1;;;;;3120:30799:46;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;3120:30799:46;;;;;;:::o;:::-;;;;;-1:-1:-1;;3120:30799:46;;;;;;;;4720:5;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;1931:430:33:-;3120:30799:46;;;2303:50:33;;;2320:22;;3120:30799:46;;;;;;;2303:50:33;;;;;;:::i;:::-;3120:30799:46;2293:61:33;;1931:430;:::o;3120:30799:46:-;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;8733:151;3120:30799;8733:151;3120:30799;-1:-1:-1;;;;;;3120:30799:46;;;8808:68;;;;;;;;;;;3120:30799;8808:68;;;3120:30799;8808:68;;;;;;:::i;:::-;3120:30799;;;8794:83;;;;;;3120:30799;8794:83;;;8808:68;8794:83;;3120:30799;;;;;8808:68;3120:30799;;;;;;;;;;;;;;8808:68;3120:30799;;;;;;;8794:83;;:6;;3120:30799;8794:83;;;;;;;;8733:151;;;:::o;8794:83::-;;;-1:-1:-1;8794:83:46;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;3120:30799:46;;;;;;;;;8733:151::o;3120:30799::-;;;;;;;;;;-1:-1:-1;;;;;3120:30799:46;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;13296:213:71;3120:30799:46;13374:24:71;;;;13370:103;;3120:30799:46;13296:213:71;:::o;13370:103::-;13421:41;;;13452:2;13421:41;3120:30799:46;;;;13421:41:71;;3120:30799:46;;;;;;;;;;:::o;19669:4:32:-;;465::39;19669::32;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;18132:1064:46:-;;18361:104;19669:4:32;5832:87:39;;;838:5;5832:87;;;;;;;;;838:5;:::i;:::-;19669:4:32;18361:104:46;;:::i;:::-;19669:4:32;;;;;;;;;;;;;;;18132:1064:46;:::o;19202:340::-;-1:-1:-1;;;;;19298:21:46;;;;;:::i;:::-;3120:30799;19334:25;;19330:93;;19452:10;19437:25;19433:103;;19202:340;;:::o;19433:103::-;19485:40;19357:1;19485:40;19452:10;19485:40;3120:30799;;;;;19357:1;19485:40;19330:93;19382:30;;19357:1;19382:30;3120:30799;19382:30;3120:30799;;19357:1;19382:30;3120:30799;;;-1:-1:-1;;;;;3120:30799:46;;;;;;:::o;19813:201::-;3120:30799;;;;19933:32;;-1:-1:-1;;;;;3120:30799:46;;;19933:32;;;3120:30799;19933:32;3120:30799;;;19933:6;3120:30799;;19933:32;;;;;;;-1:-1:-1;19933:32:46;;;19813:201;19983:24;;3120:30799;;19813:201;:::o;19933:32::-;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;;19933:32;3120:30799;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;19933:32;;;;;;-1:-1:-1;19933:32:46;;;3120:30799;;;-1:-1:-1;3120:30799:46;;;;;30496:616;;30631:28;;;:::i;:::-;30675:13;;30687:1;30690:13;;;;;;30496:616;;;;;:::o;30705:3::-;3120:30799;;-1:-1:-1;;;;;30739:13:46;;;;;:::i;:::-;3120:30799;;;;;;30687:1;3120:30799;30794:22;3120:30799;;;;;;;30687:1;3120:30799;;30687:1;3120:30799;;;;30687:1;3120:30799;;30847:20;;30843:253;;30705:3;;;;;;;;3120:30799;30675:13;;30843:253;31015:66;3120:30799;;30687:1;3120:30799;;;;30687:1;3120:30799;;30687:1;3120:30799;;;30687:1;3120:30799;;;;30974:16;;;;;:::i;:::-;3120:30799;;;;;;31015:66;;30843:253;;;;;;;;;509:165:48;-1:-1:-1;;;;;586:6:48;3120:30799:46;564:10:48;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;3120:30799:46;;616:41:48;;1688:201:33;1762:20;1774:7;;;;1762:20;:::i;:::-;-1:-1:-1;;;;;3120:30799:46;;;1336:22:45;;;:6;;;:22;:6;;;3120:30799:46;1336:22:45;;;;;;;;;1774:7:33;1336:22:45;;;1688:201:33;3120:30799:46;;;;;1336:64:45;;;;;3120:30799:46;1336:64:45;;:22;:64;;3120:30799:46;1820:10:33;3120:30799:46;;;;1394:4:45;3120:30799:46;;;;;1336:64:45;;;;;;;1774:7:33;1336:64:45;;;1688:201:33;1797:34;;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;1336:22:45;1774:7:33;1854:18;1336:64:45;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799:46;;;;;;;:::i;:::-;1336:64:45;;;;;;;;;:22;3120:30799:46;1336:22:45;;;;;;;;;;;;;;;:::i;:::-;;;;;19548:199:46;;-1:-1:-1;;;;;3120:30799:46;;;19679:26;3120:30799;19679:26;;3120:30799;19679:26;;;3120:30799;19679:26;:6;3120:30799;19679:6;;;3120:30799;19679:26;;;;;;;;;;;19548:199;19670:35;;;3120:30799;19548:199;:::o;19679:26::-;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;19679:26;;;;;;;;;;3120:30799;;;;;;;;;;;;;;;;;;;;33168:749;19669:4:32;;;;;;;;;;;;;;;;;;33769:74:46;33765:146;;33168:749::o;33765:146::-;33866:34;-1:-1:-1;33866:34:46;;-1:-1:-1;33866:34:46;29708:403;;;-1:-1:-1;;;;;3120:30799:46;;;;;-1:-1:-1;3120:30799:46;29832:19;3120:30799;;;-1:-1:-1;3120:30799:46;;;;;;;-1:-1:-1;3120:30799:46;;;;-1:-1:-1;3120:30799:46;;29878:20;;29874:231;;29708:403;;;;;;;:::o;29874:231::-;3120:30799;29994:16;3120:30799;30031:63;3120:30799;;;;-1:-1:-1;3120:30799:46;29832:19;3120:30799;;;-1:-1:-1;3120:30799:46;;-1:-1:-1;3120:30799:46;;;-1:-1:-1;3120:30799:46;;;;29994:16;:::i;:::-;3120:30799;;;;;;30031:63;;29874:231;;;;;;;;17425:701;-1:-1:-1;;;;;3120:30799:46;17624:399;3120:30799;17882:32;3120:30799;;18040:79;3120:30799;;17624:399;3120:30799;;;17975:31;3120:30799;;;17624:399;3120:30799;;18040:79;;:::i;17425:701::-;-1:-1:-1;;;;;3120:30799:46;-1:-1:-1;3120:30799:46;;;;18040:79;3120:30799;;-1:-1:-1;3120:30799:46;;;17791:30;3120:30799;;;-1:-1:-1;3120:30799:46;;18040:79;;:::i;1219:160:60:-;3120:30799:46;;;1328:43:60;;;;;;;-1:-1:-1;;;;;3120:30799:46;;;;1328:43:60;;;3120:30799:46;;;;;;;;;1328:43:60;;;1219:160;;-1:-1:-1;;1328:43:60;3120:30799:46;;1328:43:60;:::i;:::-;8507:421;;;;;;;;;-1:-1:-1;8507:421:60;;8942:15;;3120:30799:46;-1:-1:-1;;;;;3120:30799:46;;8960:26:60;:31;8942:68;8938:146;;1219:160;:::o;8938:146::-;-1:-1:-1;;;;;9033:40:60;;-1:-1:-1;9033:40:60;3120:30799:46;9033:40:60;3120:30799:46;1328:43:60;-1:-1:-1;9033:40:60;8942:68;9009:1;8994:16;;8942:68;"},"methodIdentifiers":{"MAX_CREATOR_FEE_PERCENTAGE()":"2e1d388d","MAX_PROTOCOL_SWAP_FEE_PERCENTAGE()":"2772d156","MAX_PROTOCOL_YIELD_FEE_PERCENTAGE()":"5e32e4e8","collectAggregateFees(address)":"8f4ab9ca","collectAggregateFeesHook(address)":"fa399f2a","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","getVault()":"8d928af8","isPoolRegistered(address)":"c673bdaf","migratePool(address)":"0874327f","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialGlobalSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialGlobalYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMigrationSource\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolRegisteredWithFeeController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_CREATOR_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFeesHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"migratePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract stores global default protocol swap and yield fees, and also tracks the values of those fees for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`). The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows the component fee percentages, and how to compute the aggregate from the components. This is done for performance reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \\\"cut\\\", and stores the fee amounts separately from the pool balances. The pool creator fees are \\\"net\\\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided between the pool creator and the LPs. There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any time by governance and the pool creator, respectively. Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator fees are computed \\\"net\\\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible. A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs. This contract is deployed with the Vault, but can be changed by governance.\",\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"PoolAlreadyRegistered(address)\":[{\"details\":\"This can happen if there is an error in the migration, or if governance somehow grants permission to `migratePool`, which should never happen.\",\"params\":{\"pool\":\"The pool\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"collectAggregateFeesHook(address)\":{\"details\":\"Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount transferred so that the transaction settles when the hook returns.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"_0\":\"The computed aggregate percentage\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol swap fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol yield fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getVault()\":{\"details\":\"This function is virtual to allow for overriding in derived contracts which also inherits contracts with `getVault()` definition.\",\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"migratePool(address)\":{\"details\":\"Permission should NEVER be granted to this function outside of a migration contract. It is necessary to permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool deployment. Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe, guaranteeing that it is impossible to use this function to change anything after registration. A pool can only be registered / configured once - either copied to a new controller in the migration context, or added normally through the Vault calling `registerPool`.\",\"params\":{\"pool\":\"The address of the pool to be migrated\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"InvalidMigrationSource()\":[{\"notice\":\"Migration source cannot be this contract.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"Prevent pool data from being registered more than once.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"notice\":\"Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator yield fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"migratePool(address)\":{\"notice\":\"Not exposed in the interface, this enables migration of hidden pool state.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Helper contract to manage protocol and creator fees outside the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":\"ProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0x4e6eceea41f31faa3f4228315c1d54c0d6f7befaaa1d158775e0b2a860c9de12\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6fc6d998ca7860d5c8f08a4fc045d5d1ebdcb4c777e934f6cd081d05252a024f\",\"dweb:/ipfs/QmbsPGHVrBdVfpcWkm3BNWPQXUZWbvPb6VGiEbf5ezvAmj\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x11ec2b653633cbcc6a99d426df178007a98d1154a39a1ada961239be39eec069\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://40eed42ee57746bbf4711bb4aee856328cd70cc02aa3ff05e8dd719868fcd524\",\"dweb:/ipfs/QmX5uAoB9W6UUehgSRvVW6hun3XE53eZwKsm4kHVqtJs8C\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"SingletonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getVault()":"8d928af8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same function name.\",\"errors\":{\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getVault()\":{\"details\":\"This function is virtual to allow for overriding in derived contracts which also inherits contracts with `getVault()` definition.\",\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"}},\"notice\":\"Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":\"SingletonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x11ec2b653633cbcc6a99d426df178007a98d1154a39a1ada961239be39eec069\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://40eed42ee57746bbf4711bb4aee856328cd70cc02aa3ff05e8dd719868fcd524\",\"dweb:/ipfs/QmX5uAoB9W6UUehgSRvVW6hun3XE53eZwKsm4kHVqtJs8C\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"VaultGuard":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a034606057601f60b238819003918201601f19168301916001600160401b03831184841017606457808492602094604052833981010312606057516001600160a01b03811681036060576080526040516039908160798239608051815050f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe5f80fdfea26469706673582212209ea97d26b149f4c03cd27efa4222c040e10233d68d11499b8658e8caa36dc86f64736f6c634300081b0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH1 0x60 JUMPI PUSH1 0x1F PUSH1 0xB2 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH1 0x64 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH1 0x60 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH1 0x60 JUMPI PUSH1 0x80 MSTORE PUSH1 0x40 MLOAD PUSH1 0x39 SWAP1 DUP2 PUSH1 0x79 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 0xA9 PUSH30 0x26B149F4C03CD27EFA4222C040E10233D68D11499B8658E8CAA36DC86F64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"308:368:48:-:0;;;;;;;;;;;;;-1:-1:-1;;308:368:48;;;;-1:-1:-1;;;;;308:368:48;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;308:368:48;;;;;;409:14;;308:368;;;;;;;;409:14;308:368;;;;;;-1:-1:-1;308:368:48;;;;;;-1:-1:-1;308:368:48;;;;;-1:-1:-1;308:368:48"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212209ea97d26b149f4c03cd27efa4222c040e10233d68d11499b8658e8caa36dc86f64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 0xA9 PUSH30 0x26B149F4C03CD27EFA4222C040E10233D68D11499B8658E8CAA36DC86F64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"308:368:48:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contract that shares the modifier `onlyVault`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":\"VaultGuard\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@openzeppelin/contracts/access/Ownable.sol":{"Ownable":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. The initial owner is set to the address provided by the deployer. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the address provided by the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"}},"@openzeppelin/contracts/access/Ownable2Step.sol":{"Ownable2Step":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"acceptOwnership()":"79ba5097","owner()":"8da5cb5b","pendingOwner()":"e30c3978","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. This extension of the {Ownable} contract includes a two-step mechanism to transfer ownership, where the new owner must call {acceptOwnership} in order to replace the old one. This can help prevent common mistakes, such as transfers of ownership to incorrect accounts, or to contracts that are unable to interact with the permission system. The initial owner is specified at deployment time in the constructor for `Ownable`. This can later be changed with {transferOwnership} and {acceptOwnership}. This module is used through inheritance. It will make available all functions from parent (Ownable).\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable2Step.sol\":\"Ownable2Step\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC1271.sol":{"IERC1271":{"abi":[{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"magicValue","type":"bytes4"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"isValidSignature(bytes32,bytes)":"1626ba7e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"magicValue\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-1271 standard signature validation method for contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\",\"kind\":\"dev\",\"methods\":{\"isValidSignature(bytes32,bytes)\":{\"details\":\"Should return whether the signature provided is valid for the provided data\",\"params\":{\"hash\":\"Hash of the data to be signed\",\"signature\":\"Signature byte array associated with `hash`\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC1271.sol\":\"IERC1271\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x66c7ec42c6c43712be2107a50ab4529379bc76a632b425babec698d9da921ac6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dce2778f0b638adfc5ba29c2c618c855fe725fa74a16846386aa1d56a834aa04\",\"dweb:/ipfs/QmPV9oWnzQdi58od266j62xvviavLNHqKLZfm6k2K1qy9E\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC1363.sol":{"IERC1363":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferFromAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFromAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","approveAndCall(address,uint256)":"3177029f","approveAndCall(address,uint256,bytes)":"cae9ca51","balanceOf(address)":"70a08231","supportsInterface(bytes4)":"01ffc9a7","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferAndCall(address,uint256)":"1296ee62","transferAndCall(address,uint256,bytes)":"4000aea0","transferFrom(address,address,uint256)":"23b872dd","transferFromAndCall(address,address,uint256)":"d8fbe994","transferFromAndCall(address,address,uint256,bytes)":"c1d34b89"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"transferAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"transferFromAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFromAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363]. Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"approveAndCall(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\",\"params\":{\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"approveAndCall(address,uint256,bytes)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `spender`.\",\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferAndCall(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to` and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferAndCall(address,uint256,bytes)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to` and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `to`.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFromAndCall(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"from\":\"The address which you want to send tokens from.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferFromAndCall(address,address,uint256,bytes)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `to`.\",\"from\":\"The address which you want to send tokens from.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}}},\"title\":\"IERC1363\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":\"IERC1363\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"IERC4626":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"assetTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"totalManagedAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","asset()":"38d52e0f","balanceOf(address)":"70a08231","convertToAssets(uint256)":"07a2d13a","convertToShares(uint256)":"c6e6f592","decimals()":"313ce567","deposit(uint256,address)":"6e553f65","maxDeposit(address)":"402d267d","maxMint(address)":"c63d75b6","maxRedeem(address)":"d905777e","maxWithdraw(address)":"ce96cb77","mint(uint256,address)":"94bf804d","name()":"06fdde03","previewDeposit(uint256)":"ef8b30f7","previewMint(uint256)":"b3d7f6b9","previewRedeem(uint256)":"4cdad506","previewWithdraw(uint256)":"0a28a477","redeem(uint256,address,address)":"ba087652","symbol()":"95d89b41","totalAssets()":"01e1d114","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256,address,address)":"b460af94"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"assetTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalManagedAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-4626 \\\"Tokenized Vault Standard\\\", as defined in https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"asset()\":{\"details\":\"Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"convertToAssets(uint256)\":{\"details\":\"Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"convertToShares(uint256)\":{\"details\":\"Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"deposit(uint256,address)\":{\"details\":\"Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"maxDeposit(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert.\"},\"maxMint(address)\":{\"details\":\"Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert.\"},\"maxRedeem(address)\":{\"details\":\"Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert.\"},\"maxWithdraw(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert.\"},\"mint(uint256,address)\":{\"details\":\"Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"previewDeposit(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"previewMint(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting.\"},\"previewRedeem(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their redemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming.\"},\"previewWithdraw(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if called in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"redeem(uint256,address,address)\":{\"details\":\"Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalAssets()\":{\"details\":\"Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"withdraw(uint256,address,address)\":{\"details\":\"Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":\"IERC4626\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"IERC1155Errors":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC1155InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC1155InvalidApprover","type":"error"},{"inputs":[{"internalType":"uint256","name":"idsLength","type":"uint256"},{"internalType":"uint256","name":"valuesLength","type":"uint256"}],"name":"ERC1155InvalidArrayLength","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC1155InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC1155InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC1155InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC1155MissingApprovalForAll","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC1155InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valuesLength\",\"type\":\"uint256\"}],\"name\":\"ERC1155InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC1155MissingApprovalForAll\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-1155 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\",\"errors\":{\"ERC1155InsufficientBalance(address,uint256,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC1155InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC1155InvalidArrayLength(uint256,uint256)\":[{\"details\":\"Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.\",\"params\":{\"idsLength\":\"Length of the array of token identifiers\",\"valuesLength\":\"Length of the array of token amounts\"}}],\"ERC1155InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC1155InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC1155InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC1155MissingApprovalForAll(address,address)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"owner\":\"Address of the current owner of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC1155Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]}},\"version\":1}"},"IERC20Errors":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-20 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC20Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]}},\"version\":1}"},"IERC721Errors":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-721 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\",\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC721Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"ERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. TIP: For a detailed writeup see our guide https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. The default value of {decimals} is 18. To change this, you should override this function so it returns a different value. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC-20 applications.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}. Both values are immutable: they can only be set once during construction.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x86b7b71a6aedefdad89b607378eeab1dcc5389b9ea7d17346d08af01d7190994\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1dc2db8d94a21eac8efe03adf574c419b08536409b416057a2b5b95cb772c43c\",\"dweb:/ipfs/QmZfqJCKVU1ScuX2A7s8WZdQEaikwJbDH5JBrBdKTUT4Gu\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-20 standard as defined in the ERC.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"IERC20Metadata":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC-20 standard.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"SafeERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"currentAllowance","type":"uint256"},{"internalType":"uint256","name":"requestedDecrease","type":"uint256"}],"name":"SafeERC20FailedDecreaseAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220c02e7587c1a65f70d95976176a4a59c967d812468140f9a9a81961c484a31fe064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 0x2E PUSH22 0x87C1A65F70D95976176A4A59C967D812468140F9A9A8 NOT PUSH2 0xC484 LOG3 0x1F 0xE0 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"698:9376:60:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220c02e7587c1a65f70d95976176a4a59c967d812468140f9a9a81961c484a31fe064736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 0x2E PUSH22 0x87C1A65F70D95976176A4A59C967D812468140F9A9A8 NOT PUSH2 0xC484 LOG3 0x1F 0xE0 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"698:9376:60:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentAllowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestedDecrease\",\"type\":\"uint256\"}],\"name\":\"SafeERC20FailedDecreaseAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers around ERC-20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"errors\":{\"SafeERC20FailedDecreaseAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failed `decreaseAllowance` request.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Address.sol":{"Address":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212204385f4cd6447e53a0205cff6ac1dc012b351818d753d8981fc2ec08565c7c51f64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER DUP6 DELEGATECALL 0xCD PUSH5 0x47E53A0205 0xCF 0xF6 0xAC SAR 0xC0 SLT 0xB3 MLOAD DUP2 DUP14 PUSH22 0x3D8981FC2EC08565C7C51F64736F6C634300081B0033 ","sourceMap":"233:5762:61:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212204385f4cd6447e53a0205cff6ac1dc012b351818d753d8981fc2ec08565c7c51f64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER DUP6 DELEGATECALL 0xCD PUSH5 0x47E53A0205 0xCF 0xF6 0xAC SAR 0xC0 SLT 0xB3 MLOAD DUP2 DUP14 PUSH22 0x3D8981FC2EC08565C7C51F64736F6C634300081B0033 ","sourceMap":"233:5762:61:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Arrays.sol":{"Arrays":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220cbd9a331635a2589b744c73b8a85714084d77a1b4148890124e190babea0d78264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCB 0xD9 LOG3 BALANCE PUSH4 0x5A2589B7 PREVRANDAO 0xC7 EXTCODESIZE DUP11 DUP6 PUSH18 0x4084D77A1B4148890124E190BABEA0D78264 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"459:20446:62:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220cbd9a331635a2589b744c73b8a85714084d77a1b4148890124e190babea0d78264736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCB 0xD9 LOG3 BALANCE PUSH4 0x5A2589B7 PREVRANDAO 0xC7 EXTCODESIZE DUP11 DUP6 PUSH18 0x4084D77A1B4148890124E190BABEA0D78264 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"459:20446:62:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to array types.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Arrays.sol\":\"Arrays\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Comparators.sol":{"Comparators":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212209d94b32f08ee29ade43f617a13d834ad280aea2e26fc72cf6d53009e7fea5ad664736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 SWAP5 0xB3 0x2F ADDMOD 0xEE 0x29 0xAD 0xE4 EXTCODEHASH PUSH2 0x7A13 0xD8 CALLVALUE 0xAD 0x28 EXP 0xEA 0x2E 0x26 0xFC PUSH19 0xCF6D53009E7FEA5AD664736F6C634300081B00 CALLER ","sourceMap":"224:218:63:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212209d94b32f08ee29ade43f617a13d834ad280aea2e26fc72cf6d53009e7fea5ad664736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 SWAP5 0xB3 0x2F ADDMOD 0xEE 0x29 0xAD 0xE4 EXTCODEHASH PUSH2 0x7A13 0xD8 CALLVALUE 0xAD 0x28 EXP 0xEA 0x2E 0x26 0xFC PUSH19 0xCF6D53009E7FEA5AD664736F6C634300081B00 CALLER ","sourceMap":"224:218:63:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides a set of functions to compare values. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Comparators.sol\":\"Comparators\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Context.sol":{"Context":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Errors.sol":{"Errors":{"abi":[{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"FailedDeployment","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"MissingPrecompile","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220ab00708f1b97d5c518c4e3df8b698f3e9a310b84361854f4263e8e2911afeb1c64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAB STOP PUSH17 0x8F1B97D5C518C4E3DF8B698F3E9A310B84 CALLDATASIZE XOR SLOAD DELEGATECALL 0x26 RETURNDATACOPY DUP15 0x29 GT 0xAF 0xEB SHR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"411:484:65:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220ab00708f1b97d5c518c4e3df8b698f3e9a310b84361854f4263e8e2911afeb1c64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAB STOP PUSH17 0x8F1B97D5C518C4E3DF8B698F3E9A310B84 CALLDATASIZE XOR SLOAD DELEGATECALL 0x26 RETURNDATACOPY DUP15 0x29 GT 0xAF 0xEB SHR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"411:484:65:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"MissingPrecompile\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of common custom errors used in multiple contracts IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library. It is recommended to avoid relying on the error API for critical functionality. _Available since v5.1._\",\"errors\":{\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"MissingPrecompile(address)\":[{\"details\":\"A necessary precompile is missing.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Errors.sol\":\"Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Panic.sol":{"Panic":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220d3a5982222b30002df369035be4874e942e654df250dc0553547f71f3c32ebdc64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 0xA5 SWAP9 0x22 0x22 0xB3 STOP MUL 0xDF CALLDATASIZE SWAP1 CALLDATALOAD 0xBE BASEFEE PUSH21 0xE942E654DF250DC0553547F71F3C32EBDC64736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"657:1315:66:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220d3a5982222b30002df369035be4874e942e654df250dc0553547f71f3c32ebdc64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 0xA5 SWAP9 0x22 0x22 0xB3 STOP MUL 0xDF CALLDATASIZE SWAP1 CALLDATALOAD 0xBE BASEFEE PUSH21 0xE942E654DF250DC0553547F71F3C32EBDC64736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"657:1315:66:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Helper library for emitting standardized panic codes. ```solidity contract Example { using Panic for uint256; // Use any of the declared internal constants function foo() { Panic.GENERIC.panic(); } // Alternatively function foo() { Panic.panic(Panic.GENERIC); } } ``` Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil]. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"ARRAY_OUT_OF_BOUNDS\":{\"details\":\"array out of bounds access\"},\"ASSERT\":{\"details\":\"used by the assert() builtin\"},\"DIVISION_BY_ZERO\":{\"details\":\"division or modulo by zero\"},\"EMPTY_ARRAY_POP\":{\"details\":\"empty array pop\"},\"ENUM_CONVERSION_ERROR\":{\"details\":\"enum conversion error\"},\"GENERIC\":{\"details\":\"generic / unspecified error\"},\"INVALID_INTERNAL_FUNCTION\":{\"details\":\"calling invalid internal function\"},\"RESOURCE_ERROR\":{\"details\":\"resource error (too large allocation or too large array)\"},\"STORAGE_ENCODING_ERROR\":{\"details\":\"invalid encoding in storage\"},\"UNDER_OVERFLOW\":{\"details\":\"arithmetic underflow or overflow\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Panic.sol\":\"Panic\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/SlotDerivation.sol":{"SlotDerivation":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212201892b12973f073d5474d992dc8add6f831fd6b74ac6b26720bef437f409ab99064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 XOR SWAP3 0xB1 0x29 PUSH20 0xF073D5474D992DC8ADD6F831FD6B74AC6B26720B 0xEF NUMBER PUSH32 0x409AB99064736F6C634300081B00330000000000000000000000000000000000 ","sourceMap":"1599:3723:67:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212201892b12973f073d5474d992dc8add6f831fd6b74ac6b26720bef437f409ab99064736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 XOR SWAP3 0xB1 0x29 PUSH20 0xF073D5474D992DC8ADD6F831FD6B74AC6B26720B 0xEF NUMBER PUSH32 0x409AB99064736F6C634300081B00330000000000000000000000000000000000 ","sourceMap":"1599:3723:67:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for computing storage (and transient storage) locations from namespaces and deriving slots corresponding to standard patterns. The derivation method for array and mapping matches the storage layout used by the solidity language / compiler. See https://docs.soliditylang.org/en/v0.8.20/internals/layout_in_storage.html#mappings-and-dynamic-arrays[Solidity docs for mappings and dynamic arrays.]. Example usage: ```solidity contract Example { // Add the library methods using StorageSlot for bytes32; using SlotDerivation for bytes32; // Declare a namespace string private constant _NAMESPACE = \\\"\\\"; // eg. OpenZeppelin.Slot function setValueInNamespace(uint256 key, address newValue) internal { _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value = newValue; } function getValueInNamespace(uint256 key) internal view returns (address) { return _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value; } } ``` TIP: Consider using this library along with {StorageSlot}. NOTE: This library provides a way to manipulate storage locations in a non-standard way. Tooling for checking upgrade safety will ignore the slots accessed through this library. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/SlotDerivation.sol\":\"SlotDerivation\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/StorageSlot.sol":{"StorageSlot":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122050f73745e69e49cc88dab61e2fa7aa0ad76b60b422dec0938ad4ec0227727c1164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 POP 0xF7 CALLDATACOPY GASLIMIT 0xE6 SWAP15 BLOBHASH 0xCC DUP9 0xDA 0xB6 0x1E 0x2F 0xA7 0xAA EXP 0xD7 PUSH12 0x60B422DEC0938AD4EC022772 PUSH29 0x1164736F6C634300081B00330000000000000000000000000000000000 ","sourceMap":"1407:2774:68:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122050f73745e69e49cc88dab61e2fa7aa0ad76b60b422dec0938ad4ec0227727c1164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 POP 0xF7 CALLDATACOPY GASLIMIT 0xE6 SWAP15 BLOBHASH 0xCC DUP9 0xDA 0xB6 0x1E 0x2F 0xA7 0xAA EXP 0xD7 PUSH12 0x60B422DEC0938AD4EC022772 PUSH29 0x1164736F6C634300081B00330000000000000000000000000000000000 ","sourceMap":"1407:2774:68:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC-1967 implementation slot: ```solidity contract ERC1967 { // Define the slot. Alternatively, use the SlotDerivation library to derive the slot. bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; function _getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } function _setImplementation(address newImplementation) internal { require(newImplementation.code.length > 0); StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } } ``` TIP: Consider using this library along with {SlotDerivation}.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":\"StorageSlot\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"IERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[ERC]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/Math.sol":{"Math":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122087ec85cb5079d131873b16a6f4b17a530d66b2989d93c63b79ade7f83e19b13064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP8 0xEC DUP6 0xCB POP PUSH26 0xD131873B16A6F4B17A530D66B2989D93C63B79ADE7F83E19B130 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"281:31863:70:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122087ec85cb5079d131873b16a6f4b17a530d66b2989d93c63b79ade7f83e19b13064736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP8 0xEC DUP6 0xCB POP PUSH26 0xD131873B16A6F4B17A530D66B2989D93C63B79ADE7F83E19B130 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"281:31863:70:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/Math.sol\":\"Math\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"SafeCast":{"abi":[{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntDowncast","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220702df93c9db3f38b430ad452d58a6ea14360067cf2e8ad9900c318aeb6fd362a64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH17 0x2DF93C9DB3F38B430AD452D58A6EA14360 MOD PUSH29 0xF2E8AD9900C318AEB6FD362A64736F6C634300081B0033000000000000 ","sourceMap":"769:34173:71:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220702df93c9db3f38b430ad452d58a6ea14360067cf2e8ad9900c318aeb6fd362a64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH17 0x2DF93C9DB3F38B430AD452D58A6EA14360 MOD PUSH29 0xF2E8AD9900C318AEB6FD362A64736F6C634300081B0033000000000000 ","sourceMap":"769:34173:71:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"errors\":{\"SafeCastOverflowedIntDowncast(uint8,int256)\":[{\"details\":\"Value doesn't fit in an int of `bits` size.\"}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/structs/EnumerableSet.sol":{"EnumerableSet":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220c0b5b7ddd8fef2ff26e5d1b8c3db2fb9eb5b37c8ccdbd78eddfb09615800e3f264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 0xB5 0xB7 0xDD 0xD8 INVALID CALLCODE SELFDESTRUCT 0x26 0xE5 0xD1 0xB8 0xC3 0xDB 0x2F 0xB9 0xEB JUMPDEST CALLDATACOPY 0xC8 0xCC 0xDB 0xD7 DUP15 0xDD 0xFB MULMOD PUSH2 0x5800 0xE3 CALLCODE PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1586:28038:72:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220c0b5b7ddd8fef2ff26e5d1b8c3db2fb9eb5b37c8ccdbd78eddfb09615800e3f264736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 0xB5 0xB7 0xDD 0xD8 INVALID CALLCODE SELFDESTRUCT 0x26 0xE5 0xD1 0xB8 0xC3 0xDB 0x2F 0xB9 0xEB JUMPDEST CALLDATACOPY 0xC8 0xCC 0xDB 0xD7 DUP15 0xDD 0xFB MULMOD PUSH2 0x5800 0xE3 CALLCODE PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1586:28038:72:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for managing https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types. Sets have the following properties: - Elements are added, removed, and checked for existence in constant time (O(1)). - Elements are enumerated in O(n). No guarantees are made on the ordering. - Set can be cleared (all elements removed) in O(n). ```solidity contract Example { // Add the library methods using EnumerableSet for EnumerableSet.AddressSet; // Declare a set state variable EnumerableSet.AddressSet private mySet; } ``` The following types are supported: - `bytes32` (`Bytes32Set`) since v3.3.0 - `address` (`AddressSet`) since v3.3.0 - `uint256` (`UintSet`) since v3.3.0 - `string` (`StringSet`) since v5.4.0 - `bytes` (`BytesSet`) since v5.4.0 [WARNING] ==== Trying to delete such a structure from storage will likely result in data corruption, rendering the structure unusable. See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an array of EnumerableSet. ====\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":\"EnumerableSet\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]}},\"version\":1}"}},"contracts/BalancerContractRegistry.sol":{"BalancerContractRegistry":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressNotRegistered","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractAliasInUseAsName","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAlreadyDeprecated","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractNameInUseAsAlias","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameNotRegistered","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"InconsistentState","type":"error"},{"inputs":[],"name":"InvalidContractAlias","type":"error"},{"inputs":[],"name":"InvalidContractName","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[],"name":"ZeroContractAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeprecated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"contractAlias","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAliasUpdated","type":"event"},{"inputs":[{"internalType":"string","name":"contractAlias","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"addOrUpdateBalancerContractAlias","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"deprecateBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"deregisterBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"getBalancerContract","outputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"getBalancerContractInfo","outputs":[{"components":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"bool","name":"isRegistered","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"}],"internalType":"struct IBalancerContractRegistry.ContractInfo","name":"info","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"isActiveBalancerContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"isTrustedRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"registerBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461009a57601f6112ec38819003918201601f19168301916001600160401b0383118484101761009e5780849260209460405283398101031261009a57516001600160a01b03811680820361009a57306080521561008b5760a05260405161123990816100b3823960805181610fb7015260a0518181816106c60152818161076701526110c30152f35b630647140b60e51b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080604081815260049182361015610015575f80fd5b5f3560e01c908163264e97e014610cfb575080632967af9614610b0457806341d8c0bb146109f157806344969a9c14610886578063851c1bb3146108365780638554c3271461078b5780638d928af81461073b578063aaabadc514610672578063ae2733a41461059f578063c7f90793146103dd5763e0376ab414610098575f80fd5b346103d95760606003193601126103d957813560058110156103d95760243567ffffffffffffffff81116103d9576100d39036908501610e66565b6044359273ffffffffffffffffffffffffffffffffffffffff948585168095036103d9576100ff611051565b84156103b35782511561038d57845f52602060018152825f209683519761012589610ddc565b549760ff986101368a821683610f14565b89808260081c16151591828685015260101c16151586830152610354575061015d856111db565b90815f525f835280855f205416806102c65750815f5260028352845f2054168061028d57505f525f8152825f20867fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790558251926101be84610ddc565b6101c88685610f14565b8184019060018252600181860193818552895f52525f20935192600584101561026157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000061023a96979862ff000061ff0087549451151560081b169451151560101b16941691161717179055610f70565b907fb12ed936cf481273b3ed037dc706d110c49bd7ba6743e67082cd772a6e9102e25f80a4005b6021907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b836102c2879287519384937f6d4f9990000000000000000000000000000000000000000000000000000000008552840161101d565b0390fd5b846102c288610311878e8b965f5260018252865f20918751926102e884610ddc565b54906102f683831685610f14565b828260081c1615159084015260101c16151586820152610f20565b9361034581519586957fa1e69ed3000000000000000000000000000000000000000000000000000000008752860190610eda565b60248401526044830190610f2d565b518790846005821015610261577f25a14e0c000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b7f830c907e000000000000000000000000000000000000000000000000000000005f525ffd5b7fb4d92c53000000000000000000000000000000000000000000000000000000005f525ffd5b5f80fd5b5090346103d957602091826003193601126103d957813567ffffffffffffffff81116103d9576104109036908401610e66565b90610419611051565b81511561057857610429826111db565b90815f525f855273ffffffffffffffffffffffffffffffffffffffff815f20541694851561053e57855f5260018152815f209282519361046885610ddc565b5461047660ff821686610f14565b60ff808260081c16159182158588015260101c1615158486015261050b575f929160019184528381528284207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055878452528120555191600583101561026157506104e490610f70565b907ffa2e7bfe3791287aa74ffe867372b78e61b60e0516978c4952f83f7416fafb7c5f80a4005b82517f36a7ac0a000000000000000000000000000000000000000000000000000000008152806102c28988838b0161101d565b846102c28584519384937fcd3599f90000000000000000000000000000000000000000000000000000000085528401526024830190610f2d565b827f830c907e000000000000000000000000000000000000000000000000000000005f525ffd5b50346103d957806003193601126103d95781359060058210156103d95773ffffffffffffffffffffffffffffffffffffffff6105d9610db9565b165f526001602052805f209160ff8251936105f385610ddc565b5461060082821686610f14565b818160081c161515602086015260101c1615159283838201528361062b575b60208484519015158152f35b90919250516005811015610646576020935014905f8061061f565b6021847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346103d9575f6003193601126103d95773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561073157926020935f93610702575b505191168152f35b610723919350843d861161072a575b61071b8183610e25565b810190610ff1565b915f6106fa565b503d610711565b83513d5f823e3d90fd5b50346103d9575f6003193601126103d9576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103d95760206003193601126103d95760609073ffffffffffffffffffffffffffffffffffffffff6107bd610d96565b5f8380516107ca81610ddc565b8281528260208201520152165f526001602052805f20908051916107ed83610ddc565b546107fb60ff821684610f14565b6020830160ff8260081c161515815260ff8385019260101c16151582526108258351809551610eda565b511515602084015251151590820152f35b5090346103d95760206003193601126103d95735907fffffffff00000000000000000000000000000000000000000000000000000000821682036103d95761087f602092610f8c565b9051908152f35b50346103d95760206003193601126103d95773ffffffffffffffffffffffffffffffffffffffff6108b5610d96565b6108bd611051565b169182156103b357825f526001602052815f20918051926108dd84610ddc565b54906108ec60ff831685610f14565b602084019060ff8360081c16158015835260ff8287019460101c16151584526109c65782511561099b575f8352855f5260016020525f20935192600584101561026157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000060ff62ff000061ff0087549451151560081b169451151560101b169416911617171790557f07b81cace396ea12f83465895486ac006cd17917e41b9759ad5e663404f1497b5f80a2005b85847f1f118c35000000000000000000000000000000000000000000000000000000005f525260245ffd5b85847ff5b5d364000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346103d957816003193601126103d957803560058110156103d95760243567ffffffffffffffff81116103d957610a2d9036908401610e66565b905f92610a3a5f936111db565b5f525f60205273ffffffffffffffffffffffffffffffffffffffff9182865f205416908115610af1575b8382165f526001602052865f2090875191610a7e83610ddc565b5493610a8d60ff861684610f14565b60ff8560081c1615159283602082015260ff8a82019660101c161515865283610ada575b505050610aca575b505083519216825215156020820152f35b9051909350151591505f80610ab9565b5191925060058210156102615750145f8080610ab1565b9050600260205282865f20541690610a64565b5090346103d957816003193601126103d957803567ffffffffffffffff81116103d957610b349036908301610e66565b610b3c610db9565b91610b45611051565b815115610cd55773ffffffffffffffffffffffffffffffffffffffff809316928315610cae57835f5260209160018352855f20865190610b8482610ddc565b5460ff91610b9483831682610f14565b8883808460081c16159384158985015260101c161515910152610c8357610bba856111db565b92835f525f8552875f20541680610c2d5786610c07878a600289895f52525f20837fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055610f70565b7f06618a6a1a6a413a59097e7c362ee8260afae8f07bd94bc0938e5730584654835f80a3005b85610c4f868a95946102c2945f5260018252865f20918751926102e884610ddc565b9361034581519586957f4466cf0c000000000000000000000000000000000000000000000000000000008752860190610eda565b85827ff5b5d364000000000000000000000000000000000000000000000000000000005f525260245ffd5b507fb4d92c53000000000000000000000000000000000000000000000000000000005f525ffd5b7f907f9fd9000000000000000000000000000000000000000000000000000000005f525ffd5b919050346103d95760206003193601126103d95773ffffffffffffffffffffffffffffffffffffffff610d2c610d96565b165f52600160205260ff815f20610d4284610ddc565b54610d4f82821685610f14565b818160081c161515602085015260101c16151591828282015282610d7a575b60208383519015158152f35b909150519160058310156102615750600260209214905f610d6e565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036103d957565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036103d957565b6060810190811067ffffffffffffffff821117610df857604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610df857604052565b81601f820112156103d95780359067ffffffffffffffff8211610df85760405192610eb960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185610e25565b828452602083830101116103d957815f926020809301838601378301015290565b906005821015610ee75752565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6005821015610ee75752565b516005811015610ee75790565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b602090604051918183925191829101835e81015f815203902090565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152610feb81610ddc565b51902090565b908160209103126103d9575173ffffffffffffffffffffffffffffffffffffffff811681036103d95790565b9073ffffffffffffffffffffffffffffffffffffffff61104a602092959495604085526040850190610f2d565b9416910152565b61107d7fffffffff000000000000000000000000000000000000000000000000000000005f3516610f8c565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111ae5784925f926111b9575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa9182156111ae575f92611177575b50501561114f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116111a7575b61118e8183610e25565b810103126103d9575180151581036103d9575f80611146565b503d611184565b6040513d5f823e3d90fd5b60649192506111d490843d861161072a5761071b8183610e25565b91906110f5565b604051610feb6020828180820195805191829101875e81015f83820152038084520182610e2556fea2646970667358221220ae533797c8ccb00c86c707d40115e8325a9f65d02dbf3131321a1ba62c35008864736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x9A JUMPI PUSH1 0x1F PUSH2 0x12EC CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x9E JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x9A JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 DUP3 SUB PUSH2 0x9A JUMPI ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0x8B JUMPI PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x1239 SWAP1 DUP2 PUSH2 0xB3 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0xFB7 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x6C6 ADD MSTORE DUP2 DUP2 PUSH2 0x767 ADD MSTORE PUSH2 0x10C3 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x264E97E0 EQ PUSH2 0xCFB JUMPI POP DUP1 PUSH4 0x2967AF96 EQ PUSH2 0xB04 JUMPI DUP1 PUSH4 0x41D8C0BB EQ PUSH2 0x9F1 JUMPI DUP1 PUSH4 0x44969A9C EQ PUSH2 0x886 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x836 JUMPI DUP1 PUSH4 0x8554C327 EQ PUSH2 0x78B JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x73B JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x672 JUMPI DUP1 PUSH4 0xAE2733A4 EQ PUSH2 0x59F JUMPI DUP1 PUSH4 0xC7F90793 EQ PUSH2 0x3DD JUMPI PUSH4 0xE0376AB4 EQ PUSH2 0x98 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xD3 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0xE66 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 AND DUP1 SWAP6 SUB PUSH2 0x3D9 JUMPI PUSH2 0xFF PUSH2 0x1051 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x3B3 JUMPI DUP3 MLOAD ISZERO PUSH2 0x38D JUMPI DUP5 PUSH0 MSTORE PUSH1 0x20 PUSH1 0x1 DUP2 MSTORE DUP3 PUSH0 KECCAK256 SWAP7 DUP4 MLOAD SWAP8 PUSH2 0x125 DUP10 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP8 PUSH1 0xFF SWAP9 PUSH2 0x136 DUP11 DUP3 AND DUP4 PUSH2 0xF14 JUMP JUMPDEST DUP10 DUP1 DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP2 DUP3 DUP7 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 DUP4 ADD MSTORE PUSH2 0x354 JUMPI POP PUSH2 0x15D DUP6 PUSH2 0x11DB JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH0 DUP4 MSTORE DUP1 DUP6 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x2C6 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 DUP4 MSTORE DUP5 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x28D JUMPI POP PUSH0 MSTORE PUSH0 DUP2 MSTORE DUP3 PUSH0 KECCAK256 DUP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP3 MLOAD SWAP3 PUSH2 0x1BE DUP5 PUSH2 0xDDC JUMP JUMPDEST PUSH2 0x1C8 DUP7 DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP5 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 DUP2 DUP7 ADD SWAP4 DUP2 DUP6 MSTORE DUP10 PUSH0 MSTORE MSTORE PUSH0 KECCAK256 SWAP4 MLOAD SWAP3 PUSH1 0x5 DUP5 LT ISZERO PUSH2 0x261 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 PUSH2 0x23A SWAP7 SWAP8 SWAP9 PUSH3 0xFF0000 PUSH2 0xFF00 DUP8 SLOAD SWAP5 MLOAD ISZERO ISZERO PUSH1 0x8 SHL AND SWAP5 MLOAD ISZERO ISZERO PUSH1 0x10 SHL AND SWAP5 AND SWAP2 AND OR OR OR SWAP1 SSTORE PUSH2 0xF70 JUMP JUMPDEST SWAP1 PUSH32 0xB12ED936CF481273B3ED037DC706D110C49BD7BA6743E67082CD772A6E9102E2 PUSH0 DUP1 LOG4 STOP JUMPDEST PUSH1 0x21 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 PUSH2 0x2C2 DUP8 SWAP3 DUP8 MLOAD SWAP4 DUP5 SWAP4 PUSH32 0x6D4F999000000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD PUSH2 0x101D JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST DUP5 PUSH2 0x2C2 DUP9 PUSH2 0x311 DUP8 DUP15 DUP12 SWAP7 PUSH0 MSTORE PUSH1 0x1 DUP3 MSTORE DUP7 PUSH0 KECCAK256 SWAP2 DUP8 MLOAD SWAP3 PUSH2 0x2E8 DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x2F6 DUP4 DUP4 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP3 DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP1 DUP5 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 DUP3 ADD MSTORE PUSH2 0xF20 JUMP JUMPDEST SWAP4 PUSH2 0x345 DUP2 MLOAD SWAP6 DUP7 SWAP6 PUSH32 0xA1E69ED300000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD SWAP1 PUSH2 0xEDA JUMP JUMPDEST PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST MLOAD DUP8 SWAP1 DUP5 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x261 JUMPI PUSH32 0x25A14E0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH32 0x830C907E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0xB4D92C5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0x410 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xE66 JUMP JUMPDEST SWAP1 PUSH2 0x419 PUSH2 0x1051 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x578 JUMPI PUSH2 0x429 DUP3 PUSH2 0x11DB JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH0 DUP6 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP5 DUP6 ISZERO PUSH2 0x53E JUMPI DUP6 PUSH0 MSTORE PUSH1 0x1 DUP2 MSTORE DUP2 PUSH0 KECCAK256 SWAP3 DUP3 MLOAD SWAP4 PUSH2 0x468 DUP6 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x476 PUSH1 0xFF DUP3 AND DUP7 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0xFF DUP1 DUP3 PUSH1 0x8 SHR AND ISZERO SWAP2 DUP3 ISZERO DUP6 DUP9 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP5 DUP7 ADD MSTORE PUSH2 0x50B JUMPI PUSH0 SWAP3 SWAP2 PUSH1 0x1 SWAP2 DUP5 MSTORE DUP4 DUP2 MSTORE DUP3 DUP5 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 SLOAD AND SWAP1 SSTORE DUP8 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE MLOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x261 JUMPI POP PUSH2 0x4E4 SWAP1 PUSH2 0xF70 JUMP JUMPDEST SWAP1 PUSH32 0xFA2E7BFE3791287AA74FFE867372B78E61B60E0516978C4952F83F7416FAFB7C PUSH0 DUP1 LOG4 STOP JUMPDEST DUP3 MLOAD PUSH32 0x36A7AC0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP1 PUSH2 0x2C2 DUP10 DUP9 DUP4 DUP12 ADD PUSH2 0x101D JUMP JUMPDEST DUP5 PUSH2 0x2C2 DUP6 DUP5 MLOAD SWAP4 DUP5 SWAP4 PUSH32 0xCD3599F900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST DUP3 PUSH32 0x830C907E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5D9 PUSH2 0xDB9 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SWAP2 PUSH1 0xFF DUP3 MLOAD SWAP4 PUSH2 0x5F3 DUP6 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x600 DUP3 DUP3 AND DUP7 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x8 SHR AND ISZERO ISZERO PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP3 DUP4 DUP4 DUP3 ADD MSTORE DUP4 PUSH2 0x62B JUMPI JUMPDEST PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x646 JUMPI PUSH1 0x20 SWAP4 POP EQ SWAP1 PUSH0 DUP1 PUSH2 0x61F JUMP JUMPDEST PUSH1 0x21 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x731 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x702 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x723 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x72A JUMPI JUMPDEST PUSH2 0x71B DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xFF1 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x6FA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x711 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH1 0x60 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x7BD PUSH2 0xD96 JUMP JUMPDEST PUSH0 DUP4 DUP1 MLOAD PUSH2 0x7CA DUP2 PUSH2 0xDDC JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SWAP1 DUP1 MLOAD SWAP2 PUSH2 0x7ED DUP4 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x7FB PUSH1 0xFF DUP3 AND DUP5 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD PUSH1 0xFF DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO DUP2 MSTORE PUSH1 0xFF DUP4 DUP6 ADD SWAP3 PUSH1 0x10 SHR AND ISZERO ISZERO DUP3 MSTORE PUSH2 0x825 DUP4 MLOAD DUP1 SWAP6 MLOAD PUSH2 0xEDA JUMP JUMPDEST MLOAD ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI PUSH2 0x87F PUSH1 0x20 SWAP3 PUSH2 0xF8C JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x8B5 PUSH2 0xD96 JUMP JUMPDEST PUSH2 0x8BD PUSH2 0x1051 JUMP JUMPDEST AND SWAP2 DUP3 ISZERO PUSH2 0x3B3 JUMPI DUP3 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP3 PUSH2 0x8DD DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x8EC PUSH1 0xFF DUP4 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD SWAP1 PUSH1 0xFF DUP4 PUSH1 0x8 SHR AND ISZERO DUP1 ISZERO DUP4 MSTORE PUSH1 0xFF DUP3 DUP8 ADD SWAP5 PUSH1 0x10 SHR AND ISZERO ISZERO DUP5 MSTORE PUSH2 0x9C6 JUMPI DUP3 MLOAD ISZERO PUSH2 0x99B JUMPI PUSH0 DUP4 MSTORE DUP6 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH0 KECCAK256 SWAP4 MLOAD SWAP3 PUSH1 0x5 DUP5 LT ISZERO PUSH2 0x261 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 PUSH1 0xFF PUSH3 0xFF0000 PUSH2 0xFF00 DUP8 SLOAD SWAP5 MLOAD ISZERO ISZERO PUSH1 0x8 SHL AND SWAP5 MLOAD ISZERO ISZERO PUSH1 0x10 SHL AND SWAP5 AND SWAP2 AND OR OR OR SWAP1 SSTORE PUSH32 0x7B81CACE396EA12F83465895486AC006CD17917E41B9759AD5E663404F1497B PUSH0 DUP1 LOG2 STOP JUMPDEST DUP6 DUP5 PUSH32 0x1F118C3500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP6 DUP5 PUSH32 0xF5B5D36400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xA2D SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xE66 JUMP JUMPDEST SWAP1 PUSH0 SWAP3 PUSH2 0xA3A PUSH0 SWAP4 PUSH2 0x11DB JUMP JUMPDEST PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP7 PUSH0 KECCAK256 SLOAD AND SWAP1 DUP2 ISZERO PUSH2 0xAF1 JUMPI JUMPDEST DUP4 DUP3 AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SWAP1 DUP8 MLOAD SWAP2 PUSH2 0xA7E DUP4 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP4 PUSH2 0xA8D PUSH1 0xFF DUP7 AND DUP5 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0xFF DUP6 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP3 DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP11 DUP3 ADD SWAP7 PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 MSTORE DUP4 PUSH2 0xADA JUMPI JUMPDEST POP POP POP PUSH2 0xACA JUMPI JUMPDEST POP POP DUP4 MLOAD SWAP3 AND DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 MLOAD SWAP1 SWAP4 POP ISZERO ISZERO SWAP2 POP PUSH0 DUP1 PUSH2 0xAB9 JUMP JUMPDEST MLOAD SWAP2 SWAP3 POP PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x261 JUMPI POP EQ PUSH0 DUP1 DUP1 PUSH2 0xAB1 JUMP JUMPDEST SWAP1 POP PUSH1 0x2 PUSH1 0x20 MSTORE DUP3 DUP7 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0xA64 JUMP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xB34 SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0xE66 JUMP JUMPDEST PUSH2 0xB3C PUSH2 0xDB9 JUMP JUMPDEST SWAP2 PUSH2 0xB45 PUSH2 0x1051 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0xCD5 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP4 AND SWAP3 DUP4 ISZERO PUSH2 0xCAE JUMPI DUP4 PUSH0 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x1 DUP4 MSTORE DUP6 PUSH0 KECCAK256 DUP7 MLOAD SWAP1 PUSH2 0xB84 DUP3 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH1 0xFF SWAP2 PUSH2 0xB94 DUP4 DUP4 AND DUP3 PUSH2 0xF14 JUMP JUMPDEST DUP9 DUP4 DUP1 DUP5 PUSH1 0x8 SHR AND ISZERO SWAP4 DUP5 ISZERO DUP10 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP2 ADD MSTORE PUSH2 0xC83 JUMPI PUSH2 0xBBA DUP6 PUSH2 0x11DB JUMP JUMPDEST SWAP3 DUP4 PUSH0 MSTORE PUSH0 DUP6 MSTORE DUP8 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0xC2D JUMPI DUP7 PUSH2 0xC07 DUP8 DUP11 PUSH1 0x2 DUP10 DUP10 PUSH0 MSTORE MSTORE PUSH0 KECCAK256 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0xF70 JUMP JUMPDEST PUSH32 0x6618A6A1A6A413A59097E7C362EE8260AFAE8F07BD94BC0938E573058465483 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP6 PUSH2 0xC4F DUP7 DUP11 SWAP6 SWAP5 PUSH2 0x2C2 SWAP5 PUSH0 MSTORE PUSH1 0x1 DUP3 MSTORE DUP7 PUSH0 KECCAK256 SWAP2 DUP8 MLOAD SWAP3 PUSH2 0x2E8 DUP5 PUSH2 0xDDC JUMP JUMPDEST SWAP4 PUSH2 0x345 DUP2 MLOAD SWAP6 DUP7 SWAP6 PUSH32 0x4466CF0C00000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD SWAP1 PUSH2 0xEDA JUMP JUMPDEST DUP6 DUP3 PUSH32 0xF5B5D36400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH32 0xB4D92C5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0x907F9FD900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xD2C PUSH2 0xD96 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 PUSH2 0xD42 DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0xD4F DUP3 DUP3 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x8 SHR AND ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP2 DUP3 DUP3 DUP3 ADD MSTORE DUP3 PUSH2 0xD7A JUMPI JUMPDEST PUSH1 0x20 DUP4 DUP4 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP MLOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x261 JUMPI POP PUSH1 0x2 PUSH1 0x20 SWAP3 EQ SWAP1 PUSH0 PUSH2 0xD6E JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDF8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDF8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xDF8 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0xEB9 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND ADD DUP6 PUSH2 0xE25 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x3D9 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xEE7 JUMPI MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xEE7 JUMPI MSTORE JUMP JUMPDEST MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0xEE7 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP2 DUP4 SWAP3 MLOAD SWAP2 DUP3 SWAP2 ADD DUP4 MCOPY DUP2 ADD PUSH0 DUP2 MSTORE SUB SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0xFEB DUP2 PUSH2 0xDDC JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x3D9 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x3D9 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x104A PUSH1 0x20 SWAP3 SWAP6 SWAP5 SWAP6 PUSH1 0x40 DUP6 MSTORE PUSH1 0x40 DUP6 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST SWAP5 AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH2 0x107D PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0xF8C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x11AE JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x11B9 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x11AE JUMPI PUSH0 SWAP3 PUSH2 0x1177 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x114F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x11A7 JUMPI JUMPDEST PUSH2 0x118E DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3D9 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x3D9 JUMPI PUSH0 DUP1 PUSH2 0x1146 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1184 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x11D4 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x72A JUMPI PUSH2 0x71B DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x10F5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFEB PUSH1 0x20 DUP3 DUP2 DUP1 DUP3 ADD SWAP6 DUP1 MLOAD SWAP2 DUP3 SWAP2 ADD DUP8 MCOPY DUP2 ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB DUP1 DUP5 MSTORE ADD DUP3 PUSH2 0xE25 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE MSTORE8 CALLDATACOPY SWAP8 0xC8 0xCC 0xB0 0xC DUP7 0xC7 SMOD 0xD4 ADD ISZERO 0xE8 ORIGIN GAS SWAP16 PUSH6 0xD02DBF313132 BYTE SHL 0xA6 0x2C CALLDATALOAD STOP DUP9 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"2741:12089:73:-:0;;;;;;;;;;;;;-1:-1:-1;;2741:12089:73;;;;-1:-1:-1;;;;;2741:12089:73;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2741:12089:73;;;;;;;922:4:47;1347:46:33;;943:28:45;939:79;;1028:14;;2741:12089:73;;;;;;;;1347:46:33;2741:12089:73;;;;;1028:14:45;2741:12089:73;;;;;;;;;;;;;;;;939:79:45;994:13;;;-1:-1:-1;994:13:45;;-1:-1:-1;994:13:45;2741:12089:73;-1:-1:-1;2741:12089:73;;;;;;-1:-1:-1;2741:12089:73;;;;;-1:-1:-1;2741:12089:73"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":3478,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_12134":{"entryPoint":3513,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":4081,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_string":{"entryPoint":3686,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_enum_ContractType":{"entryPoint":3802,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_string":{"entryPoint":3885,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string_address":{"entryPoint":4125,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":3621,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_12135":{"entryPoint":3548,"id":null,"parameterSlots":1,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":4177,"id":4356,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":3980,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_getContractId":{"entryPoint":4571,"id":18178,"parameterSlots":1,"returnSlots":1},"packed_hashed_string_to_string":{"entryPoint":3952,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_memoryt_enum_ContractType":{"entryPoint":3872,"id":null,"parameterSlots":1,"returnSlots":1},"write_to_memory_enum_ContractType":{"entryPoint":3860,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":4023}],"7358":[{"length":32,"start":1734},{"length":32,"start":1895},{"length":32,"start":4291}]},"linkReferences":{},"object":"6080604081815260049182361015610015575f80fd5b5f3560e01c908163264e97e014610cfb575080632967af9614610b0457806341d8c0bb146109f157806344969a9c14610886578063851c1bb3146108365780638554c3271461078b5780638d928af81461073b578063aaabadc514610672578063ae2733a41461059f578063c7f90793146103dd5763e0376ab414610098575f80fd5b346103d95760606003193601126103d957813560058110156103d95760243567ffffffffffffffff81116103d9576100d39036908501610e66565b6044359273ffffffffffffffffffffffffffffffffffffffff948585168095036103d9576100ff611051565b84156103b35782511561038d57845f52602060018152825f209683519761012589610ddc565b549760ff986101368a821683610f14565b89808260081c16151591828685015260101c16151586830152610354575061015d856111db565b90815f525f835280855f205416806102c65750815f5260028352845f2054168061028d57505f525f8152825f20867fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790558251926101be84610ddc565b6101c88685610f14565b8184019060018252600181860193818552895f52525f20935192600584101561026157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000061023a96979862ff000061ff0087549451151560081b169451151560101b16941691161717179055610f70565b907fb12ed936cf481273b3ed037dc706d110c49bd7ba6743e67082cd772a6e9102e25f80a4005b6021907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b836102c2879287519384937f6d4f9990000000000000000000000000000000000000000000000000000000008552840161101d565b0390fd5b846102c288610311878e8b965f5260018252865f20918751926102e884610ddc565b54906102f683831685610f14565b828260081c1615159084015260101c16151586820152610f20565b9361034581519586957fa1e69ed3000000000000000000000000000000000000000000000000000000008752860190610eda565b60248401526044830190610f2d565b518790846005821015610261577f25a14e0c000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b7f830c907e000000000000000000000000000000000000000000000000000000005f525ffd5b7fb4d92c53000000000000000000000000000000000000000000000000000000005f525ffd5b5f80fd5b5090346103d957602091826003193601126103d957813567ffffffffffffffff81116103d9576104109036908401610e66565b90610419611051565b81511561057857610429826111db565b90815f525f855273ffffffffffffffffffffffffffffffffffffffff815f20541694851561053e57855f5260018152815f209282519361046885610ddc565b5461047660ff821686610f14565b60ff808260081c16159182158588015260101c1615158486015261050b575f929160019184528381528284207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055878452528120555191600583101561026157506104e490610f70565b907ffa2e7bfe3791287aa74ffe867372b78e61b60e0516978c4952f83f7416fafb7c5f80a4005b82517f36a7ac0a000000000000000000000000000000000000000000000000000000008152806102c28988838b0161101d565b846102c28584519384937fcd3599f90000000000000000000000000000000000000000000000000000000085528401526024830190610f2d565b827f830c907e000000000000000000000000000000000000000000000000000000005f525ffd5b50346103d957806003193601126103d95781359060058210156103d95773ffffffffffffffffffffffffffffffffffffffff6105d9610db9565b165f526001602052805f209160ff8251936105f385610ddc565b5461060082821686610f14565b818160081c161515602086015260101c1615159283838201528361062b575b60208484519015158152f35b90919250516005811015610646576020935014905f8061061f565b6021847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346103d9575f6003193601126103d95773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561073157926020935f93610702575b505191168152f35b610723919350843d861161072a575b61071b8183610e25565b810190610ff1565b915f6106fa565b503d610711565b83513d5f823e3d90fd5b50346103d9575f6003193601126103d9576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103d95760206003193601126103d95760609073ffffffffffffffffffffffffffffffffffffffff6107bd610d96565b5f8380516107ca81610ddc565b8281528260208201520152165f526001602052805f20908051916107ed83610ddc565b546107fb60ff821684610f14565b6020830160ff8260081c161515815260ff8385019260101c16151582526108258351809551610eda565b511515602084015251151590820152f35b5090346103d95760206003193601126103d95735907fffffffff00000000000000000000000000000000000000000000000000000000821682036103d95761087f602092610f8c565b9051908152f35b50346103d95760206003193601126103d95773ffffffffffffffffffffffffffffffffffffffff6108b5610d96565b6108bd611051565b169182156103b357825f526001602052815f20918051926108dd84610ddc565b54906108ec60ff831685610f14565b602084019060ff8360081c16158015835260ff8287019460101c16151584526109c65782511561099b575f8352855f5260016020525f20935192600584101561026157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000060ff62ff000061ff0087549451151560081b169451151560101b169416911617171790557f07b81cace396ea12f83465895486ac006cd17917e41b9759ad5e663404f1497b5f80a2005b85847f1f118c35000000000000000000000000000000000000000000000000000000005f525260245ffd5b85847ff5b5d364000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346103d957816003193601126103d957803560058110156103d95760243567ffffffffffffffff81116103d957610a2d9036908401610e66565b905f92610a3a5f936111db565b5f525f60205273ffffffffffffffffffffffffffffffffffffffff9182865f205416908115610af1575b8382165f526001602052865f2090875191610a7e83610ddc565b5493610a8d60ff861684610f14565b60ff8560081c1615159283602082015260ff8a82019660101c161515865283610ada575b505050610aca575b505083519216825215156020820152f35b9051909350151591505f80610ab9565b5191925060058210156102615750145f8080610ab1565b9050600260205282865f20541690610a64565b5090346103d957816003193601126103d957803567ffffffffffffffff81116103d957610b349036908301610e66565b610b3c610db9565b91610b45611051565b815115610cd55773ffffffffffffffffffffffffffffffffffffffff809316928315610cae57835f5260209160018352855f20865190610b8482610ddc565b5460ff91610b9483831682610f14565b8883808460081c16159384158985015260101c161515910152610c8357610bba856111db565b92835f525f8552875f20541680610c2d5786610c07878a600289895f52525f20837fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055610f70565b7f06618a6a1a6a413a59097e7c362ee8260afae8f07bd94bc0938e5730584654835f80a3005b85610c4f868a95946102c2945f5260018252865f20918751926102e884610ddc565b9361034581519586957f4466cf0c000000000000000000000000000000000000000000000000000000008752860190610eda565b85827ff5b5d364000000000000000000000000000000000000000000000000000000005f525260245ffd5b507fb4d92c53000000000000000000000000000000000000000000000000000000005f525ffd5b7f907f9fd9000000000000000000000000000000000000000000000000000000005f525ffd5b919050346103d95760206003193601126103d95773ffffffffffffffffffffffffffffffffffffffff610d2c610d96565b165f52600160205260ff815f20610d4284610ddc565b54610d4f82821685610f14565b818160081c161515602085015260101c16151591828282015282610d7a575b60208383519015158152f35b909150519160058310156102615750600260209214905f610d6e565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036103d957565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036103d957565b6060810190811067ffffffffffffffff821117610df857604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610df857604052565b81601f820112156103d95780359067ffffffffffffffff8211610df85760405192610eb960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185610e25565b828452602083830101116103d957815f926020809301838601378301015290565b906005821015610ee75752565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6005821015610ee75752565b516005811015610ee75790565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b602090604051918183925191829101835e81015f815203902090565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152610feb81610ddc565b51902090565b908160209103126103d9575173ffffffffffffffffffffffffffffffffffffffff811681036103d95790565b9073ffffffffffffffffffffffffffffffffffffffff61104a602092959495604085526040850190610f2d565b9416910152565b61107d7fffffffff000000000000000000000000000000000000000000000000000000005f3516610f8c565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111ae5784925f926111b9575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa9182156111ae575f92611177575b50501561114f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116111a7575b61118e8183610e25565b810103126103d9575180151581036103d9575f80611146565b503d611184565b6040513d5f823e3d90fd5b60649192506111d490843d861161072a5761071b8183610e25565b91906110f5565b604051610feb6020828180820195805191829101875e81015f83820152038084520182610e2556fea2646970667358221220ae533797c8ccb00c86c707d40115e8325a9f65d02dbf3131321a1ba62c35008864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x264E97E0 EQ PUSH2 0xCFB JUMPI POP DUP1 PUSH4 0x2967AF96 EQ PUSH2 0xB04 JUMPI DUP1 PUSH4 0x41D8C0BB EQ PUSH2 0x9F1 JUMPI DUP1 PUSH4 0x44969A9C EQ PUSH2 0x886 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x836 JUMPI DUP1 PUSH4 0x8554C327 EQ PUSH2 0x78B JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x73B JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x672 JUMPI DUP1 PUSH4 0xAE2733A4 EQ PUSH2 0x59F JUMPI DUP1 PUSH4 0xC7F90793 EQ PUSH2 0x3DD JUMPI PUSH4 0xE0376AB4 EQ PUSH2 0x98 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xD3 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0xE66 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 AND DUP1 SWAP6 SUB PUSH2 0x3D9 JUMPI PUSH2 0xFF PUSH2 0x1051 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x3B3 JUMPI DUP3 MLOAD ISZERO PUSH2 0x38D JUMPI DUP5 PUSH0 MSTORE PUSH1 0x20 PUSH1 0x1 DUP2 MSTORE DUP3 PUSH0 KECCAK256 SWAP7 DUP4 MLOAD SWAP8 PUSH2 0x125 DUP10 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP8 PUSH1 0xFF SWAP9 PUSH2 0x136 DUP11 DUP3 AND DUP4 PUSH2 0xF14 JUMP JUMPDEST DUP10 DUP1 DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP2 DUP3 DUP7 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 DUP4 ADD MSTORE PUSH2 0x354 JUMPI POP PUSH2 0x15D DUP6 PUSH2 0x11DB JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH0 DUP4 MSTORE DUP1 DUP6 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x2C6 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 DUP4 MSTORE DUP5 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x28D JUMPI POP PUSH0 MSTORE PUSH0 DUP2 MSTORE DUP3 PUSH0 KECCAK256 DUP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP3 MLOAD SWAP3 PUSH2 0x1BE DUP5 PUSH2 0xDDC JUMP JUMPDEST PUSH2 0x1C8 DUP7 DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP5 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 DUP2 DUP7 ADD SWAP4 DUP2 DUP6 MSTORE DUP10 PUSH0 MSTORE MSTORE PUSH0 KECCAK256 SWAP4 MLOAD SWAP3 PUSH1 0x5 DUP5 LT ISZERO PUSH2 0x261 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 PUSH2 0x23A SWAP7 SWAP8 SWAP9 PUSH3 0xFF0000 PUSH2 0xFF00 DUP8 SLOAD SWAP5 MLOAD ISZERO ISZERO PUSH1 0x8 SHL AND SWAP5 MLOAD ISZERO ISZERO PUSH1 0x10 SHL AND SWAP5 AND SWAP2 AND OR OR OR SWAP1 SSTORE PUSH2 0xF70 JUMP JUMPDEST SWAP1 PUSH32 0xB12ED936CF481273B3ED037DC706D110C49BD7BA6743E67082CD772A6E9102E2 PUSH0 DUP1 LOG4 STOP JUMPDEST PUSH1 0x21 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 PUSH2 0x2C2 DUP8 SWAP3 DUP8 MLOAD SWAP4 DUP5 SWAP4 PUSH32 0x6D4F999000000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD PUSH2 0x101D JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST DUP5 PUSH2 0x2C2 DUP9 PUSH2 0x311 DUP8 DUP15 DUP12 SWAP7 PUSH0 MSTORE PUSH1 0x1 DUP3 MSTORE DUP7 PUSH0 KECCAK256 SWAP2 DUP8 MLOAD SWAP3 PUSH2 0x2E8 DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x2F6 DUP4 DUP4 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP3 DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP1 DUP5 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 DUP3 ADD MSTORE PUSH2 0xF20 JUMP JUMPDEST SWAP4 PUSH2 0x345 DUP2 MLOAD SWAP6 DUP7 SWAP6 PUSH32 0xA1E69ED300000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD SWAP1 PUSH2 0xEDA JUMP JUMPDEST PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST MLOAD DUP8 SWAP1 DUP5 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x261 JUMPI PUSH32 0x25A14E0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH32 0x830C907E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0xB4D92C5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0x410 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xE66 JUMP JUMPDEST SWAP1 PUSH2 0x419 PUSH2 0x1051 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x578 JUMPI PUSH2 0x429 DUP3 PUSH2 0x11DB JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH0 DUP6 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP5 DUP6 ISZERO PUSH2 0x53E JUMPI DUP6 PUSH0 MSTORE PUSH1 0x1 DUP2 MSTORE DUP2 PUSH0 KECCAK256 SWAP3 DUP3 MLOAD SWAP4 PUSH2 0x468 DUP6 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x476 PUSH1 0xFF DUP3 AND DUP7 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0xFF DUP1 DUP3 PUSH1 0x8 SHR AND ISZERO SWAP2 DUP3 ISZERO DUP6 DUP9 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP5 DUP7 ADD MSTORE PUSH2 0x50B JUMPI PUSH0 SWAP3 SWAP2 PUSH1 0x1 SWAP2 DUP5 MSTORE DUP4 DUP2 MSTORE DUP3 DUP5 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 SLOAD AND SWAP1 SSTORE DUP8 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE MLOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x261 JUMPI POP PUSH2 0x4E4 SWAP1 PUSH2 0xF70 JUMP JUMPDEST SWAP1 PUSH32 0xFA2E7BFE3791287AA74FFE867372B78E61B60E0516978C4952F83F7416FAFB7C PUSH0 DUP1 LOG4 STOP JUMPDEST DUP3 MLOAD PUSH32 0x36A7AC0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP1 PUSH2 0x2C2 DUP10 DUP9 DUP4 DUP12 ADD PUSH2 0x101D JUMP JUMPDEST DUP5 PUSH2 0x2C2 DUP6 DUP5 MLOAD SWAP4 DUP5 SWAP4 PUSH32 0xCD3599F900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST DUP3 PUSH32 0x830C907E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5D9 PUSH2 0xDB9 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SWAP2 PUSH1 0xFF DUP3 MLOAD SWAP4 PUSH2 0x5F3 DUP6 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x600 DUP3 DUP3 AND DUP7 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x8 SHR AND ISZERO ISZERO PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP3 DUP4 DUP4 DUP3 ADD MSTORE DUP4 PUSH2 0x62B JUMPI JUMPDEST PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x646 JUMPI PUSH1 0x20 SWAP4 POP EQ SWAP1 PUSH0 DUP1 PUSH2 0x61F JUMP JUMPDEST PUSH1 0x21 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x731 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x702 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x723 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x72A JUMPI JUMPDEST PUSH2 0x71B DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xFF1 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x6FA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x711 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH1 0x60 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x7BD PUSH2 0xD96 JUMP JUMPDEST PUSH0 DUP4 DUP1 MLOAD PUSH2 0x7CA DUP2 PUSH2 0xDDC JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SWAP1 DUP1 MLOAD SWAP2 PUSH2 0x7ED DUP4 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x7FB PUSH1 0xFF DUP3 AND DUP5 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD PUSH1 0xFF DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO DUP2 MSTORE PUSH1 0xFF DUP4 DUP6 ADD SWAP3 PUSH1 0x10 SHR AND ISZERO ISZERO DUP3 MSTORE PUSH2 0x825 DUP4 MLOAD DUP1 SWAP6 MLOAD PUSH2 0xEDA JUMP JUMPDEST MLOAD ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI PUSH2 0x87F PUSH1 0x20 SWAP3 PUSH2 0xF8C JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x8B5 PUSH2 0xD96 JUMP JUMPDEST PUSH2 0x8BD PUSH2 0x1051 JUMP JUMPDEST AND SWAP2 DUP3 ISZERO PUSH2 0x3B3 JUMPI DUP3 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP3 PUSH2 0x8DD DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x8EC PUSH1 0xFF DUP4 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD SWAP1 PUSH1 0xFF DUP4 PUSH1 0x8 SHR AND ISZERO DUP1 ISZERO DUP4 MSTORE PUSH1 0xFF DUP3 DUP8 ADD SWAP5 PUSH1 0x10 SHR AND ISZERO ISZERO DUP5 MSTORE PUSH2 0x9C6 JUMPI DUP3 MLOAD ISZERO PUSH2 0x99B JUMPI PUSH0 DUP4 MSTORE DUP6 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH0 KECCAK256 SWAP4 MLOAD SWAP3 PUSH1 0x5 DUP5 LT ISZERO PUSH2 0x261 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 PUSH1 0xFF PUSH3 0xFF0000 PUSH2 0xFF00 DUP8 SLOAD SWAP5 MLOAD ISZERO ISZERO PUSH1 0x8 SHL AND SWAP5 MLOAD ISZERO ISZERO PUSH1 0x10 SHL AND SWAP5 AND SWAP2 AND OR OR OR SWAP1 SSTORE PUSH32 0x7B81CACE396EA12F83465895486AC006CD17917E41B9759AD5E663404F1497B PUSH0 DUP1 LOG2 STOP JUMPDEST DUP6 DUP5 PUSH32 0x1F118C3500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP6 DUP5 PUSH32 0xF5B5D36400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xA2D SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xE66 JUMP JUMPDEST SWAP1 PUSH0 SWAP3 PUSH2 0xA3A PUSH0 SWAP4 PUSH2 0x11DB JUMP JUMPDEST PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP7 PUSH0 KECCAK256 SLOAD AND SWAP1 DUP2 ISZERO PUSH2 0xAF1 JUMPI JUMPDEST DUP4 DUP3 AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SWAP1 DUP8 MLOAD SWAP2 PUSH2 0xA7E DUP4 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP4 PUSH2 0xA8D PUSH1 0xFF DUP7 AND DUP5 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0xFF DUP6 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP3 DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP11 DUP3 ADD SWAP7 PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 MSTORE DUP4 PUSH2 0xADA JUMPI JUMPDEST POP POP POP PUSH2 0xACA JUMPI JUMPDEST POP POP DUP4 MLOAD SWAP3 AND DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 MLOAD SWAP1 SWAP4 POP ISZERO ISZERO SWAP2 POP PUSH0 DUP1 PUSH2 0xAB9 JUMP JUMPDEST MLOAD SWAP2 SWAP3 POP PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x261 JUMPI POP EQ PUSH0 DUP1 DUP1 PUSH2 0xAB1 JUMP JUMPDEST SWAP1 POP PUSH1 0x2 PUSH1 0x20 MSTORE DUP3 DUP7 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0xA64 JUMP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xB34 SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0xE66 JUMP JUMPDEST PUSH2 0xB3C PUSH2 0xDB9 JUMP JUMPDEST SWAP2 PUSH2 0xB45 PUSH2 0x1051 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0xCD5 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP4 AND SWAP3 DUP4 ISZERO PUSH2 0xCAE JUMPI DUP4 PUSH0 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x1 DUP4 MSTORE DUP6 PUSH0 KECCAK256 DUP7 MLOAD SWAP1 PUSH2 0xB84 DUP3 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH1 0xFF SWAP2 PUSH2 0xB94 DUP4 DUP4 AND DUP3 PUSH2 0xF14 JUMP JUMPDEST DUP9 DUP4 DUP1 DUP5 PUSH1 0x8 SHR AND ISZERO SWAP4 DUP5 ISZERO DUP10 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP2 ADD MSTORE PUSH2 0xC83 JUMPI PUSH2 0xBBA DUP6 PUSH2 0x11DB JUMP JUMPDEST SWAP3 DUP4 PUSH0 MSTORE PUSH0 DUP6 MSTORE DUP8 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0xC2D JUMPI DUP7 PUSH2 0xC07 DUP8 DUP11 PUSH1 0x2 DUP10 DUP10 PUSH0 MSTORE MSTORE PUSH0 KECCAK256 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0xF70 JUMP JUMPDEST PUSH32 0x6618A6A1A6A413A59097E7C362EE8260AFAE8F07BD94BC0938E573058465483 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP6 PUSH2 0xC4F DUP7 DUP11 SWAP6 SWAP5 PUSH2 0x2C2 SWAP5 PUSH0 MSTORE PUSH1 0x1 DUP3 MSTORE DUP7 PUSH0 KECCAK256 SWAP2 DUP8 MLOAD SWAP3 PUSH2 0x2E8 DUP5 PUSH2 0xDDC JUMP JUMPDEST SWAP4 PUSH2 0x345 DUP2 MLOAD SWAP6 DUP7 SWAP6 PUSH32 0x4466CF0C00000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD SWAP1 PUSH2 0xEDA JUMP JUMPDEST DUP6 DUP3 PUSH32 0xF5B5D36400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH32 0xB4D92C5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0x907F9FD900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xD2C PUSH2 0xD96 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 PUSH2 0xD42 DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0xD4F DUP3 DUP3 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x8 SHR AND ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP2 DUP3 DUP3 DUP3 ADD MSTORE DUP3 PUSH2 0xD7A JUMPI JUMPDEST PUSH1 0x20 DUP4 DUP4 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP MLOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x261 JUMPI POP PUSH1 0x2 PUSH1 0x20 SWAP3 EQ SWAP1 PUSH0 PUSH2 0xD6E JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDF8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDF8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xDF8 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0xEB9 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND ADD DUP6 PUSH2 0xE25 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x3D9 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xEE7 JUMPI MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xEE7 JUMPI MSTORE JUMP JUMPDEST MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0xEE7 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP2 DUP4 SWAP3 MLOAD SWAP2 DUP3 SWAP2 ADD DUP4 MCOPY DUP2 ADD PUSH0 DUP2 MSTORE SUB SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0xFEB DUP2 PUSH2 0xDDC JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x3D9 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x3D9 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x104A PUSH1 0x20 SWAP3 SWAP6 SWAP5 SWAP6 PUSH1 0x40 DUP6 MSTORE PUSH1 0x40 DUP6 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST SWAP5 AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH2 0x107D PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0xF8C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x11AE JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x11B9 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x11AE JUMPI PUSH0 SWAP3 PUSH2 0x1177 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x114F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x11A7 JUMPI JUMPDEST PUSH2 0x118E DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3D9 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x3D9 JUMPI PUSH0 DUP1 PUSH2 0x1146 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1184 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x11D4 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x72A JUMPI PUSH2 0x71B DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x10F5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFEB PUSH1 0x20 DUP3 DUP2 DUP1 DUP3 ADD SWAP6 DUP1 MLOAD SWAP2 DUP3 SWAP2 ADD DUP8 MCOPY DUP2 ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB DUP1 DUP5 MSTORE ADD DUP3 PUSH2 0xE25 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE MSTORE8 CALLDATACOPY SWAP8 0xC8 0xCC 0xB0 0xC DUP7 0xC7 SMOD 0xD4 ADD ISZERO 0xE8 ORIGIN GAS SWAP16 PUSH6 0xD02DBF313132 BYTE SHL 0xA6 0x2C CALLDATALOAD STOP DUP9 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"2741:12089:73:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1581:26:47;2741:12089:73;1581:26:47;;;2741:12089:73;;;;;;;;;;;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;1525:73:33;;:::i;:::-;7303:29:73;;7299:88;;2741:12089;;7401:31;7397:90;;2741:12089;;;;7572:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;7612:123;;7841:28;;;;:::i;:::-;2741:12089;;;;;;;;;;;;;7956:37;7952:197;;2741:12089;;;;8245:16;2741:12089;;;;;;;8287:34;8283:132;;2741:12089;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8728:124;;;;:::i;:::-;;;;2741:12089;7572:13;2741:12089;;7572:13;8728:124;;;2741:12089;;;;;;;;;;;;;;;;;;;;;8868:71;2741:12089;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8868:71;:::i;:::-;;;2741:12089;8868:71;;2741:12089;;;;;;;;;;;8283:132;2741:12089;8344:60;2741:12089;;;;8344:60;;;;;;;;;:::i;:::-;;;;7952:197;2741:12089;;;8106:17;2741:12089;;;;;;7572:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8106:17;:::i;:::-;2741:12089;;;;8076:62;;;;;;;;2741:12089;;:::i;:::-;;;;;;;;;;:::i;7612:123::-;2741:12089;;;;;;;;;;7656:68;2741:12089;7656:68;2741:12089;;;;;7656:68;7397:90;7455:21;2741:12089;7455:21;2741:12089;7455:21;7299:88;7355:21;2741:12089;7355:21;2741:12089;7355:21;2741:12089;;;;;;;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;;;;;;;;;;;;:::i;:::-;1525:73:33;;;:::i;:::-;2741:12089:73;;9098:31;9094:90;;9256:28;;;:::i;:::-;2741:12089;;;;;;;;;;;;;9364:29;;;9360:106;;2741:12089;;;9503:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;9629:112;;2741:12089;;;9503:13;2741:12089;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9850:78;;;;:::i;:::-;;;2741:12089;9850:78;;2741:12089;9629:112;2741:12089;;9682:48;;;2741:12089;9682:48;2741:12089;;9682:48;;;;:::i;9360:106::-;2741:12089;;;;;9416:39;;;;;;;;2741:12089;;;;;;:::i;9094:90::-;9152:21;;2741:12089;9152:21;2741:12089;9152:21;2741:12089;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;;;;;;;;;;:::i;:::-;;;;13008:13;2741:12089;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13149:50;;;2741:12089;;;;;;;;;;;13149:50;2741:12089;;;;;;;;;;;;;;13166:33;13149:50;;;;;2741:12089;;;;;;;;;;;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;1581:26:47;2741:12089:73;;1581:26:47;;2741:12089:73;1581:26:47;;1124:6:45;;;2741:12089:73;1581:26:47;;;;;;;;;;2741:12089:73;1581:26:47;;;2741:12089:73;;;;;;;;1581:26:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;2741:12089:73;;;;;;;;;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;;1124:6:45;2741:12089:73;;;;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;14436:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;:::i;:::-;1525:73:33;;:::i;:::-;2741:12089:73;10083:29;;;10079:88;;2741:12089;;;10204:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;10300:109;;2741:12089;;;10499:102;;2741:12089;;;;;;10204:13;2741:12089;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10968:43;2741:12089;10968:43;;2741:12089;10499:102;10548:42;;;2741:12089;10548:42;2741:12089;;;10548:42;10300:109;10353:45;;;2741:12089;10353:45;2741:12089;;;10353:45;2741:12089;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13412:13;13458:28;2741:12089;13458:28;;:::i;:::-;2741:12089;;;;;;;;;;;;;13641:31;;;13637:110;;2741:12089;;;;;;13784:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;14100:54;;;2741:12089;14096:158;;;;;2741:12089;;;;;;;;;;;;;;;;14096:158;2741:12089;;14170:35;;-1:-1:-1;2741:12089:73;;;-1:-1:-1;14096:158:73;;;;14100:54;2741:12089;;;-1:-1:-1;2741:12089:73;;;;;;;14121:33;14100:54;;;;;13637:110;2741:12089;;13708:16;2741:12089;;;;;;;;13637:110;;;2741:12089;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;1525:73:33;;;:::i;:::-;2741:12089:73;;11263:32;11259:92;;2741:12089;;;;11365:29;;;11361:88;;2741:12089;;;;;11540:13;2741:12089;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;11580:109;;12074:29;;;:::i;:::-;2741:12089;;;;;;;;;;;;12190:37;12186:193;;2741:12089;12521:52;2741:12089;;12459:16;2741:12089;;;;;;;;;;;;;;;12521:52;:::i;:::-;;2741:12089;12521:52;;2741:12089;12186:193;2741:12089;12335:17;2741:12089;;;;;;;;11540:13;2741:12089;;;;;;;;;;;;:::i;12335:17::-;2741:12089;;;;12310:58;;;;;;;;2741:12089;;:::i;11580:109::-;11633:45;;;2741:12089;11633:45;2741:12089;;;11633:45;11361:88;11417:21;;2741:12089;11417:21;2741:12089;11417:21;11259:92;11318:22;2741:12089;11318:22;2741:12089;11318:22;2741:12089;;;;;;;;-1:-1:-1;;2741:12089:73;;;;;;;;:::i;:::-;;;;13008:13;2741:12089;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13149:50;;;2741:12089;;;;;;;;;;;13149:50;2741:12089;;;;;;;;;;;;14638:19;2741:12089;;13166:33;13149:50;;;;2741:12089;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;2741:12089:73;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;-1:-1:-1;2741:12089:73;;;;;-1:-1:-1;2741:12089:73;;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2741:12089:73;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;2741:12089:73;;;;;;:::o;1931:430:33:-;2741:12089:73;;;2303:50:33;;;2320:22;;2741:12089:73;;;;;;;2303:50:33;;;;;;:::i;:::-;2741:12089:73;2293:61:33;;1931:430;:::o;2741:12089:73:-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;1688:201:33:-;1762:20;1774:7;;;;1762:20;:::i;:::-;2741:12089:73;;;;1336:22:45;;;:6;;;:22;:6;;;2741:12089:73;1336:22:45;;;;;;;;;1774:7:33;1336:22:45;;;1688:201:33;2741:12089:73;;;;;1336:64:45;;;;;2741:12089:73;1336:64:45;;:22;:64;;2741:12089:73;1820:10:33;2741:12089:73;;;;1394:4:45;2741:12089:73;;;;;1336:64:45;;;;;;;1774:7:33;1336:64:45;;;1688:201:33;1797:34;;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;1336:22:45;1774:7:33;1854:18;1336:64:45;;;;;;;;;;;;;;;;:::i;:::-;;;2741:12089:73;;;;;;;;;;;;1336:64:45;;;;;;;;;;2741:12089:73;;;1774:7:33;2741:12089:73;;;;;1336:22:45;2741:12089:73;1336:22:45;;;;;;;;;;;;;;;:::i;:::-;;;;;14679:149:73;2741:12089;;14790:30;;;;;;;2741:12089;;;;;;;;;;;-1:-1:-1;2741:12089:73;;;;14790:30;;;;;;;:::i"},"methodIdentifiers":{"addOrUpdateBalancerContractAlias(string,address)":"2967af96","deprecateBalancerContract(address)":"44969a9c","deregisterBalancerContract(string)":"c7f90793","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getBalancerContract(uint8,string)":"41d8c0bb","getBalancerContractInfo(address)":"8554c327","getVault()":"8d928af8","isActiveBalancerContract(uint8,address)":"ae2733a4","isTrustedRouter(address)":"264e97e0","registerBalancerContract(uint8,string,address)":"e0376ab4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractAliasInUseAsName\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAlreadyDeprecated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractNameInUseAsAlias\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"InconsistentState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractAlias\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractName\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroContractAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAliasUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"addOrUpdateBalancerContractAlias\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"deprecateBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"deregisterBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"getBalancerContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"getBalancerContractInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"internalType\":\"struct IBalancerContractRegistry.ContractInfo\",\"name\":\"info\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"isActiveBalancerContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"isTrustedRouter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"registerBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Maintain a registry of official Balancer Factories, Routers, Hooks, and valid ERC4626 tokens, for two main purposes. The first is to support the many instances where we need to know that a contract is \\\"trusted\\\" (i.e., is safe and behaves in the required manner). For instance, some hooks depend critically on the identity of the msg.sender, which must be passed down through the Router. Since Routers are permissionless, a malicious one could spoof the sender and \\\"fool\\\" the hook. The hook must therefore \\\"trust\\\" the Router. It is also important for the front-end to know when a particular wrapped token should be used with buffers. Not all \\\"ERC4626\\\" wrapped tokens are fully conforming, and buffer operations with non-conforming tokens may fail in various unexpected ways. It is not enough to simply check whether a buffer exists (e.g., by calling `getBufferAsset`), since best practice is for the pool creator to initialize buffers for all such tokens regardless. They are permissionless, and could otherwise be initialized by anyone in unexpected ways. This registry could be used to keep track of \\\"known good\\\" buffers, such that `isActiveBalancerContract(ContractType.ERC4626,
)` returns true for fully-compliant tokens with properly initialized buffers. Current solutions involve passing in the address of the trusted Router on deployment: but what if it needs to support multiple Routers? Or if the Router is deprecated and replaced? Instead, we can pass the registry address, and query this contract to determine whether the Router is a \\\"trusted\\\" one. The second use case is for off-chain queries, or other protocols that need to easily determine, say, the \\\"latest\\\" Weighted Pool Factory. This contract provides `isActiveBalancerContract(type, address)` for the first case, and `getBalancerContract(type, name)` for the second. It is also possible to query all known information about an address, using `getBalancerContractInfo(address)`, which returns a struct with the detailed state. Note that the `SingletonAuthentication` base contract provides `getVault`, so it is also possible to ask this contract for the Vault address, so it doesn't need to be a type.\",\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"details\":\"Both names and addresses must be unique in the primary registration mapping. Though there are two mappings to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent name => address => state mapping.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractType\":\"The contract type, provided for documentation purposes\"}}],\"ContractAddressNotRegistered(address)\":[{\"details\":\"A contract being deprecated was never registered, or the target of an alias isn't a previously registered contract.\",\"params\":{\"contractAddress\":\"The address of the contract that was not registered\"}}],\"ContractAliasInUseAsName(uint8,string)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractName\":\"The name of the previously registered contract (and proposed alias)\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractAlreadyDeprecated(address)\":[{\"params\":{\"contractAddress\":\"The address of the previously deprecated contract\"}}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"details\":\"Note that names must be unique; it is not possible to register two contracts with the same name and different types, or the same name and different addresses.\",\"params\":{\"contractName\":\"The name of the previously registered contract\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractNameInUseAsAlias(string,address)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractName\":\"The name of the previously registered contract\"}}],\"ContractNameNotRegistered(string)\":[{\"params\":{\"contractName\":\"The name of the unregistered contract\"}}],\"InconsistentState(string,address)\":[{\"details\":\"This should never happen.\",\"params\":{\"contractAddress\":\"The address of the contract with missing state\",\"contractName\":\"The name of the contract that has a registry entry but no contract info\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"details\":\"This sets the `isActive` flag to false.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"BalancerContractDeregistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deregistered\",\"contractName\":\"The name of the contract being deregistered\",\"contractType\":\"The type of contract being deregistered\"}},\"BalancerContractRegistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being registered\",\"contractName\":\"The name of the contract being registered\",\"contractType\":\"The type of contract being registered\"}},\"ContractAliasUpdated(string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deprecated\",\"contractAlias\":\"The alias name\"}}},\"kind\":\"dev\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"details\":\"This is a permissioned function to support querying by a contract alias. For instance, we might create a `WeightedPool` alias meaning the \\\"latest\\\" version of the `WeightedPoolFactory`, so that off-chain users don't need to track specific versions. Once added, an alias can also be updated to point to a different address (e.g., when migrating from the v2 to the v3 weighted pool).\",\"params\":{\"contractAlias\":\"An alternate name that can be used to fetch a contract address\",\"existingContract\":\"The target address of the contract alias\"}},\"deprecateBalancerContract(address)\":{\"details\":\"This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are enforced unique, so either the name or address could be specified in principle.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"deregisterBalancerContract(string)\":{\"details\":\"This is a permissioned function, and makes it possible to correct errors without complex update logic. If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete it, and register it again with the correct data. It must start with the name, as this is the registry key, required for complete deletion. Note that there might still be an alias targeting the address being deleted, but accessing it will just return inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to the correct address.\",\"params\":{\"contractName\":\"The name of the contract being deprecated (cannot be an alias)\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getBalancerContract(uint8,string)\":{\"details\":\"This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias (e.g., `WeightedPool`).\",\"params\":{\"contractName\":\"The name of the contract\",\"contractType\":\"The type of the contract\"},\"returns\":{\"contractAddress\":\"The address of the associated contract, if registered, or zero\",\"isActive\":\"True if the contract was registered and not deprecated\"}},\"getBalancerContractInfo(address)\":{\"params\":{\"contractAddress\":\"The address of the associated contract\"},\"returns\":{\"info\":\"ContractInfo struct corresponding to the address\"}},\"getVault()\":{\"details\":\"This function is virtual to allow for overriding in derived contracts which also inherits contracts with `getVault()` definition.\",\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isActiveBalancerContract(uint8,address)\":{\"params\":{\"contractAddress\":\"The address of the contract\",\"contractType\":\"The type of contract\"},\"returns\":{\"_0\":\"True if the given address is a registered and active contract of the specified type\"}},\"registerBalancerContract(uint8,string,address)\":{\"details\":\"This is a permissioned function, and does only basic validation of the address (non-zero) and the name (not blank). Governance must ensure this is called with valid information. Emits the `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or already in use.\",\"params\":{\"contractAddress\":\"The address of the contract\",\"contractName\":\"A text description of the contract, usually the deployed version (e.g., \\\"v3-pool-weighted\\\")\",\"contractType\":\"The type of contract being registered\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"notice\":\"A contract has already been registered under the given address.\"}],\"ContractAddressNotRegistered(address)\":[{\"notice\":\"An operation that requires a valid contract specified an unrecognized address.\"}],\"ContractAliasInUseAsName(uint8,string)\":[{\"notice\":\"The proposed alias has already been registered as a contract.\"}],\"ContractAlreadyDeprecated(address)\":[{\"notice\":\"Contracts can only be deprecated once.\"}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"notice\":\"A contract has already been registered under the given name.\"}],\"ContractNameInUseAsAlias(string,address)\":[{\"notice\":\"The proposed contract name has already been added as an alias.\"}],\"ContractNameNotRegistered(string)\":[{\"notice\":\"Thrown when attempting to deregister a contract that was not previously registered.\"}],\"InconsistentState(string,address)\":[{\"notice\":\"A `_contractRegistry` entry has no corresponding `_contractInfo`.\"}],\"InvalidContractAlias()\":[{\"notice\":\"Cannot add an empty string as an alias.\"}],\"InvalidContractName()\":[{\"notice\":\"Cannot register (or deregister) a contract with an empty string as a name.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"ZeroContractAddress()\":[{\"notice\":\"Cannot register or deprecate contracts, or add an alias targeting the zero address.\"}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"notice\":\"Emitted when a registered contract is deprecated.\"},\"BalancerContractDeregistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is deregistered (deleted).\"},\"BalancerContractRegistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is registered.\"},\"ContractAliasUpdated(string,address)\":{\"notice\":\"Emitted when an alias is added or updated.\"}},\"kind\":\"user\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"notice\":\"Add an alias for a registered contract.\"},\"deprecateBalancerContract(address)\":{\"notice\":\"Deprecate an official Balancer contract.\"},\"deregisterBalancerContract(string)\":{\"notice\":\"Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getBalancerContract(uint8,string)\":{\"notice\":\"Look up a registered contract by type and name.\"},\"getBalancerContractInfo(address)\":{\"notice\":\"Look up complete information about a registered contract by address.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isActiveBalancerContract(uint8,address)\":{\"notice\":\"Determine whether an address is an official contract of the specified type.\"},\"isTrustedRouter(address)\":{\"notice\":\"Returns `true` if the given address is an active contract under the ROUTER type.\"},\"registerBalancerContract(uint8,string,address)\":{\"notice\":\"Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"}},\"notice\":\"On-chain registry of standard Balancer contracts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/BalancerContractRegistry.sol\":\"BalancerContractRegistry\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x11ec2b653633cbcc6a99d426df178007a98d1154a39a1ada961239be39eec069\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://40eed42ee57746bbf4711bb4aee856328cd70cc02aa3ff05e8dd719868fcd524\",\"dweb:/ipfs/QmX5uAoB9W6UUehgSRvVW6hun3XE53eZwKsm4kHVqtJs8C\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"contracts/BalancerContractRegistry.sol\":{\"keccak256\":\"0xe663b63efd85bfd87be43f71aa1ab26bea25b774d28a7395247dae4c7c574549\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://56b5ebe6871f2531c7c5f640ecc3a71819502aabaed032ae7b1b097c1de6bbec\",\"dweb:/ipfs/QmVNHtCJWMuQcQBq5zbucsTXAHdGpzgGNkvt7TAxHtvxGW\"]}},\"version\":1}"}},"contracts/BalancerFeeBurner.sol":{"BalancerFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IProtocolFeeSweeper","name":"_protocolFeeSweeper","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BurnPathDoesNotExist","type":"error"},{"inputs":[],"name":"InvalidProtocolFeeSweeper","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"inputs":[],"name":"TargetTokenOutMismatch","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"feeTokenAmount","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"feeTokenAmount","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct IBalancerFeeBurner.BurnHookParams","name":"params","type":"tuple"}],"name":"burnHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"feeToken","type":"address"}],"name":"getBurnPath","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"}],"internalType":"struct IBalancerFeeBurner.SwapPathStep[]","name":"steps","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeSweeper","outputs":[{"internalType":"contract IProtocolFeeSweeper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"}],"internalType":"struct IBalancerFeeBurner.SwapPathStep[]","name":"steps","type":"tuple[]"}],"name":"setBurnPath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461013e57601f61162a38819003918201601f19168301916001600160401b038311848410176101425780849260609460405283398101031261013e5780516001600160a01b0391828216820361013e576020810151918383169182840361013e57604001519084821680920361013e57608052801561012b5760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a31561011c5760a0526114d390816101578239608051818181610622015281816107c80152818161093a01528181610a3101528181610c5101528181610d540152610de7015260a0518181816101bd015281816104b201526112530152f35b63932c92a560e01b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f905f3560e01c908163178ac96e1461122957508063715018a6146111a457806379ba5097146110ed5780638da5cb5b146110bb578063c1cfb02a1461103a578063c66472de14610754578063de557a3214610456578063e30c397814610422578063e3746cb21461011d5763f2fde38b1461008c575f80fd5b3461011a57602060031936011261011a576100a5611277565b6100ad61147d565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b503461011a57604060031936011261011a57610137611277565b602480359167ffffffffffffffff9182841161041e573660238501121561041e57836004013592831161041e5760069336828560061b8301011161041a5773ffffffffffffffffffffffffffffffffffffffff90604051937f4ccb20c00000000000000000000000000000000000000000000000000000000085526020948581600481877f0000000000000000000000000000000000000000000000000000000000000000165afa801561040f5784918a916103d1575b5016331415806103c4575b61039c57821680885260029060028652604089208054908a815581610318575b5050885b878110610228578980f35b818a5282875260408a20818a1b8501908054680100000000000000008110156102ec576001918282018082558210156102c0578d52898d20600194939291821b019088906102b2906044908361027f878f016113b5565b16947fffffffffffffffffffffffff000000000000000000000000000000000000000095868254161781550194016113b5565b16908254161790550161021d565b898e7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b888d7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6001907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83168303610370578b5283888c209260011b8301925b838110610360575050610219565b8c81558c83820155018490610352565b878c7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004887f23dada53000000000000000000000000000000000000000000000000000000008152fd5b50828854163314156101f9565b809250878092503d8311610408575b6103ea818361129a565b81010312610404575183811681036104045783905f6101ee565b8880fd5b503d6103e0565b6040513d8b823e3d90fd5b8580fd5b8480fd5b503461011a578060031936011261011a57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461011a5760e060031936011261011a57610470611277565b60243573ffffffffffffffffffffffffffffffffffffffff9182821680920361075057606435928084168094036107505760a4359381851680950361075057817f0000000000000000000000000000000000000000000000000000000000000000163303610728576040519261010084019567ffffffffffffffff96858110888211176106ec5784928391604052168552602095828787019433865260408801928352606088016044358152608089019182528260a08a0194608435865260c08b019687528160e08c019960c4358b528d826040519e8f9283017fc66472de00000000000000000000000000000000000000000000000000000000905251169060240152511660448c0152511660648a0152516084890152511660a48701525160c4860152511660e484015251610104908184015282526101409182810191818310868411176106ec57828791816040527f48c894910000000000000000000000000000000000000000000000000000000082528661014485015281837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08661061d61016482018261143a565b0301927f0000000000000000000000000000000000000000000000000000000000000000165af1801561071d57610652578580f35b3d8087843e610661818461129a565b81019184828585019403126107195751908582116107195701918161015f8401121561041a57820151916101609483116106ec578594604051926106cc867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116018561129a565b84845281858401011161041a578391018483015e0101525f808080808580f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8680fd5b6040513d88823e3d90fd5b6004867f23dada53000000000000000000000000000000000000000000000000000000008152fd5b5f80fd5b503461075057610100600319360112610750577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6110125760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610fe65760e4354211610fbe5773ffffffffffffffffffffffffffffffffffffffff60443516604435036107505760843573ffffffffffffffffffffffffffffffffffffffff81168103610750576108436044356112db565b91825190817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810111610f915773ffffffffffffffffffffffffffffffffffffffff831673ffffffffffffffffffffffffffffffffffffffff60206108ca7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8601886113d6565b5101511603610f695760243573ffffffffffffffffffffffffffffffffffffffff811680910361075057604051907f23b872dd000000000000000000000000000000000000000000000000000000006020830152602482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660448201526064356064820152606481528060a081011067ffffffffffffffff60a0830111176106ec575f8160a0602093016040528281519101826044355af115610cf3575f513d610f60575073ffffffffffffffffffffffffffffffffffffffff604435163b155b610f1c576040517f15afd40900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff60443516600482015260643560248201526020816044815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610cf357610eed575b50604435935f916064355b8251841015610d3257610a7c84846113d6565b519073ffffffffffffffffffffffffffffffffffffffff8251169073ffffffffffffffffffffffffffffffffffffffff602084015116907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff880187145f14610d2b5760a435915b6040519384602081011067ffffffffffffffff6020870111176106ec57602085016040525f85526040519b8c67ffffffffffffffff60e08281810110920111176106ec5773ffffffffffffffffffffffffffffffffffffffff9160208e60e081016040525f815201521660408c015260608b015260808a015260a089015260c0880152604051967f2bfb780c000000000000000000000000000000000000000000000000000000008852602060048901528051906002821015610cfe5788610c3760c08293606095602485015273ffffffffffffffffffffffffffffffffffffffff602082015116604485015273ffffffffffffffffffffffffffffffffffffffff604082015116606485015273ffffffffffffffffffffffffffffffffffffffff86820151166084850152608081015160a485015260a081015160c4850152015160e060e484015261010483019061143a565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1968715610cf3575f97610ca8575b5073ffffffffffffffffffffffffffffffffffffffff602060019201511696930192610a69565b9096506060813d606011610ceb575b81610cc46060938361129a565b8101031261075057604001519573ffffffffffffffffffffffffffffffffffffffff610c81565b3d9150610cb7565b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f91610ae3565b859087610d3d611417565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156107505773ffffffffffffffffffffffffffffffffffffffff9081604051937fae6393290000000000000000000000000000000000000000000000000000000085521660048401521660248201528160448201525f816064818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610cf357610ed0575b506004359173ffffffffffffffffffffffffffffffffffffffff83168093036107505773ffffffffffffffffffffffffffffffffffffffff9081610e56611417565b604051946064358652602086015216604084015216917f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d606073ffffffffffffffffffffffffffffffffffffffff6044351693a4807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b90925067ffffffffffffffff81116106ec576040525f9183610e14565b6020813d602011610f14575b81610f066020938361129a565b810103126107505751610a5e565b3d9150610ef9565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff6044351660045260245ffd5b600114156109c3565b7fa682e903000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7fe08b8af0000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610750576020806003193601126107505761105c611057611277565b6112db565b60405190828201838352815180915283604084019201935f5b8281106110825784840385f35b8551805173ffffffffffffffffffffffffffffffffffffffff908116865290830151168483015294810194604090930192600101611075565b34610750575f60031936011261075057602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610750575f6003193601126107505760015473ffffffffffffffffffffffffffffffffffffffff3381831603611178577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b34610750575f600319360112610750576111bc61147d565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610750575f6003193601126107505760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361075057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106ec57604052565b9073ffffffffffffffffffffffffffffffffffffffff8092165f52600260206002815260409160405f209485549267ffffffffffffffff968785116106ec57916040519761132e838760051b018a61129a565b8589525f93845282842091838a015b87861061137e5750505050505050505081511561135657565b7ff9aa0315000000000000000000000000000000000000000000000000000000005f5260045ffd5b8851898101818110858211176106ec57600192899288928d528588541681528585890154168382015281520194019501949261133d565b3573ffffffffffffffffffffffffffffffffffffffff811681036107505790565b80518210156113ea5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b60c43573ffffffffffffffffffffffffffffffffffffffff811681036107505790565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f541633036111785756fea2646970667358221220bdadc1f960d3e63533605b5824854ab1992a4aaef56fd475a3e09a574f3dbd5164736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x13E JUMPI PUSH1 0x1F PUSH2 0x162A CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x142 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x60 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x13E JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND DUP3 SUB PUSH2 0x13E JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP2 DUP4 DUP4 AND SWAP2 DUP3 DUP5 SUB PUSH2 0x13E JUMPI PUSH1 0x40 ADD MLOAD SWAP1 DUP5 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x13E JUMPI PUSH1 0x80 MSTORE DUP1 ISZERO PUSH2 0x12B JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ISZERO PUSH2 0x11C JUMPI PUSH1 0xA0 MSTORE PUSH2 0x14D3 SWAP1 DUP2 PUSH2 0x157 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH2 0x622 ADD MSTORE DUP2 DUP2 PUSH2 0x7C8 ADD MSTORE DUP2 DUP2 PUSH2 0x93A ADD MSTORE DUP2 DUP2 PUSH2 0xA31 ADD MSTORE DUP2 DUP2 PUSH2 0xC51 ADD MSTORE DUP2 DUP2 PUSH2 0xD54 ADD MSTORE PUSH2 0xDE7 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1BD ADD MSTORE DUP2 DUP2 PUSH2 0x4B2 ADD MSTORE PUSH2 0x1253 ADD MSTORE RETURN JUMPDEST PUSH4 0x932C92A5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP1 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x178AC96E EQ PUSH2 0x1229 JUMPI POP DUP1 PUSH4 0x715018A6 EQ PUSH2 0x11A4 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x10ED JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x10BB JUMPI DUP1 PUSH4 0xC1CFB02A EQ PUSH2 0x103A JUMPI DUP1 PUSH4 0xC66472DE EQ PUSH2 0x754 JUMPI DUP1 PUSH4 0xDE557A32 EQ PUSH2 0x456 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x422 JUMPI DUP1 PUSH4 0xE3746CB2 EQ PUSH2 0x11D JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0x8C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x11A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH2 0xA5 PUSH2 0x1277 JUMP JUMPDEST PUSH2 0xAD PUSH2 0x147D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE DUP3 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x11A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH2 0x137 PUSH2 0x1277 JUMP JUMPDEST PUSH1 0x24 DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 GT PUSH2 0x41E JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x41E JUMPI DUP4 PUSH1 0x4 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0x41E JUMPI PUSH1 0x6 SWAP4 CALLDATASIZE DUP3 DUP6 PUSH1 0x6 SHL DUP4 ADD ADD GT PUSH2 0x41A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 DUP2 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x40F JUMPI DUP5 SWAP2 DUP11 SWAP2 PUSH2 0x3D1 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0x3C4 JUMPI JUMPDEST PUSH2 0x39C JUMPI DUP3 AND DUP1 DUP9 MSTORE PUSH1 0x2 SWAP1 PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 DUP10 KECCAK256 DUP1 SLOAD SWAP1 DUP11 DUP2 SSTORE DUP2 PUSH2 0x318 JUMPI JUMPDEST POP POP DUP9 JUMPDEST DUP8 DUP2 LT PUSH2 0x228 JUMPI DUP10 DUP1 RETURN JUMPDEST DUP2 DUP11 MSTORE DUP3 DUP8 MSTORE PUSH1 0x40 DUP11 KECCAK256 DUP2 DUP11 SHL DUP6 ADD SWAP1 DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x2EC JUMPI PUSH1 0x1 SWAP2 DUP3 DUP3 ADD DUP1 DUP3 SSTORE DUP3 LT ISZERO PUSH2 0x2C0 JUMPI DUP14 MSTORE DUP10 DUP14 KECCAK256 PUSH1 0x1 SWAP5 SWAP4 SWAP3 SWAP2 DUP3 SHL ADD SWAP1 DUP9 SWAP1 PUSH2 0x2B2 SWAP1 PUSH1 0x44 SWAP1 DUP4 PUSH2 0x27F DUP8 DUP16 ADD PUSH2 0x13B5 JUMP JUMPDEST AND SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP6 DUP7 DUP3 SLOAD AND OR DUP2 SSTORE ADD SWAP5 ADD PUSH2 0x13B5 JUMP JUMPDEST AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE ADD PUSH2 0x21D JUMP JUMPDEST DUP10 DUP15 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE REVERT JUMPDEST DUP9 DUP14 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH1 0x1 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP4 SUB PUSH2 0x370 JUMPI DUP12 MSTORE DUP4 DUP9 DUP13 KECCAK256 SWAP3 PUSH1 0x1 SHL DUP4 ADD SWAP3 JUMPDEST DUP4 DUP2 LT PUSH2 0x360 JUMPI POP POP PUSH2 0x219 JUMP JUMPDEST DUP13 DUP2 SSTORE DUP13 DUP4 DUP3 ADD SSTORE ADD DUP5 SWAP1 PUSH2 0x352 JUMP JUMPDEST DUP8 DUP13 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP9 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP DUP3 DUP9 SLOAD AND CALLER EQ ISZERO PUSH2 0x1F9 JUMP JUMPDEST DUP1 SWAP3 POP DUP8 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x408 JUMPI JUMPDEST PUSH2 0x3EA DUP2 DUP4 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x404 JUMPI MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x404 JUMPI DUP4 SWAP1 PUSH0 PUSH2 0x1EE JUMP JUMPDEST DUP9 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x3E0 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x11A JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x11A JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH2 0x470 PUSH2 0x1277 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x750 JUMPI PUSH1 0x64 CALLDATALOAD SWAP3 DUP1 DUP5 AND DUP1 SWAP5 SUB PUSH2 0x750 JUMPI PUSH1 0xA4 CALLDATALOAD SWAP4 DUP2 DUP6 AND DUP1 SWAP6 SUB PUSH2 0x750 JUMPI DUP2 PUSH32 0x0 AND CALLER SUB PUSH2 0x728 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x100 DUP5 ADD SWAP6 PUSH8 0xFFFFFFFFFFFFFFFF SWAP7 DUP6 DUP2 LT DUP9 DUP3 GT OR PUSH2 0x6EC JUMPI DUP5 SWAP3 DUP4 SWAP2 PUSH1 0x40 MSTORE AND DUP6 MSTORE PUSH1 0x20 SWAP6 DUP3 DUP8 DUP8 ADD SWAP5 CALLER DUP7 MSTORE PUSH1 0x40 DUP9 ADD SWAP3 DUP4 MSTORE PUSH1 0x60 DUP9 ADD PUSH1 0x44 CALLDATALOAD DUP2 MSTORE PUSH1 0x80 DUP10 ADD SWAP2 DUP3 MSTORE DUP3 PUSH1 0xA0 DUP11 ADD SWAP5 PUSH1 0x84 CALLDATALOAD DUP7 MSTORE PUSH1 0xC0 DUP12 ADD SWAP7 DUP8 MSTORE DUP2 PUSH1 0xE0 DUP13 ADD SWAP10 PUSH1 0xC4 CALLDATALOAD DUP12 MSTORE DUP14 DUP3 PUSH1 0x40 MLOAD SWAP15 DUP16 SWAP3 DUP4 ADD PUSH32 0xC66472DE00000000000000000000000000000000000000000000000000000000 SWAP1 MSTORE MLOAD AND SWAP1 PUSH1 0x24 ADD MSTORE MLOAD AND PUSH1 0x44 DUP13 ADD MSTORE MLOAD AND PUSH1 0x64 DUP11 ADD MSTORE MLOAD PUSH1 0x84 DUP10 ADD MSTORE MLOAD AND PUSH1 0xA4 DUP8 ADD MSTORE MLOAD PUSH1 0xC4 DUP7 ADD MSTORE MLOAD AND PUSH1 0xE4 DUP5 ADD MSTORE MLOAD PUSH2 0x104 SWAP1 DUP2 DUP5 ADD MSTORE DUP3 MSTORE PUSH2 0x140 SWAP2 DUP3 DUP2 ADD SWAP2 DUP2 DUP4 LT DUP7 DUP5 GT OR PUSH2 0x6EC JUMPI DUP3 DUP8 SWAP2 DUP2 PUSH1 0x40 MSTORE PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH2 0x144 DUP6 ADD MSTORE DUP2 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC0 DUP7 PUSH2 0x61D PUSH2 0x164 DUP3 ADD DUP3 PUSH2 0x143A JUMP JUMPDEST SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x71D JUMPI PUSH2 0x652 JUMPI DUP6 DUP1 RETURN JUMPDEST RETURNDATASIZE DUP1 DUP8 DUP5 RETURNDATACOPY PUSH2 0x661 DUP2 DUP5 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SWAP2 DUP5 DUP3 DUP6 DUP6 ADD SWAP5 SUB SLT PUSH2 0x719 JUMPI MLOAD SWAP1 DUP6 DUP3 GT PUSH2 0x719 JUMPI ADD SWAP2 DUP2 PUSH2 0x15F DUP5 ADD SLT ISZERO PUSH2 0x41A JUMPI DUP3 ADD MLOAD SWAP2 PUSH2 0x160 SWAP5 DUP4 GT PUSH2 0x6EC JUMPI DUP6 SWAP5 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x6CC DUP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP9 ADD AND ADD DUP6 PUSH2 0x129A JUMP JUMPDEST DUP5 DUP5 MSTORE DUP2 DUP6 DUP5 ADD ADD GT PUSH2 0x41A JUMPI DUP4 SWAP2 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE PUSH0 DUP1 DUP1 DUP1 DUP1 DUP6 DUP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP7 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x750 JUMPI PUSH2 0x100 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x1012 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0xFE6 JUMPI PUSH1 0xE4 CALLDATALOAD TIMESTAMP GT PUSH2 0xFBE JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD SUB PUSH2 0x750 JUMPI PUSH1 0x84 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x750 JUMPI PUSH2 0x843 PUSH1 0x44 CALLDATALOAD PUSH2 0x12DB JUMP JUMPDEST SWAP2 DUP3 MLOAD SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD GT PUSH2 0xF91 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 PUSH2 0x8CA PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 ADD DUP9 PUSH2 0x13D6 JUMP JUMPDEST MLOAD ADD MLOAD AND SUB PUSH2 0xF69 JUMPI PUSH1 0x24 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x750 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE DUP1 PUSH1 0xA0 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP4 ADD GT OR PUSH2 0x6EC JUMPI PUSH0 DUP2 PUSH1 0xA0 PUSH1 0x20 SWAP4 ADD PUSH1 0x40 MSTORE DUP3 DUP2 MLOAD SWAP2 ADD DUP3 PUSH1 0x44 CALLDATALOAD GAS CALL ISZERO PUSH2 0xCF3 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0xF60 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0xF1C JUMPI PUSH1 0x40 MLOAD PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xCF3 JUMPI PUSH2 0xEED JUMPI JUMPDEST POP PUSH1 0x44 CALLDATALOAD SWAP4 PUSH0 SWAP2 PUSH1 0x64 CALLDATALOAD JUMPDEST DUP3 MLOAD DUP5 LT ISZERO PUSH2 0xD32 JUMPI PUSH2 0xA7C DUP5 DUP5 PUSH2 0x13D6 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD AND SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP5 ADD MLOAD AND SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 ADD DUP8 EQ PUSH0 EQ PUSH2 0xD2B JUMPI PUSH1 0xA4 CALLDATALOAD SWAP2 JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH1 0x20 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x20 DUP8 ADD GT OR PUSH2 0x6EC JUMPI PUSH1 0x20 DUP6 ADD PUSH1 0x40 MSTORE PUSH0 DUP6 MSTORE PUSH1 0x40 MLOAD SWAP12 DUP13 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xE0 DUP3 DUP2 DUP2 ADD LT SWAP3 ADD GT OR PUSH2 0x6EC JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x20 DUP15 PUSH1 0xE0 DUP2 ADD PUSH1 0x40 MSTORE PUSH0 DUP2 MSTORE ADD MSTORE AND PUSH1 0x40 DUP13 ADD MSTORE PUSH1 0x60 DUP12 ADD MSTORE PUSH1 0x80 DUP11 ADD MSTORE PUSH1 0xA0 DUP10 ADD MSTORE PUSH1 0xC0 DUP9 ADD MSTORE PUSH1 0x40 MLOAD SWAP7 PUSH32 0x2BFB780C00000000000000000000000000000000000000000000000000000000 DUP9 MSTORE PUSH1 0x20 PUSH1 0x4 DUP10 ADD MSTORE DUP1 MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0xCFE JUMPI DUP9 PUSH2 0xC37 PUSH1 0xC0 DUP3 SWAP4 PUSH1 0x60 SWAP6 PUSH1 0x24 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x44 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x64 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP3 ADD MLOAD AND PUSH1 0x84 DUP6 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA4 DUP6 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC4 DUP6 ADD MSTORE ADD MLOAD PUSH1 0xE0 PUSH1 0xE4 DUP5 ADD MSTORE PUSH2 0x104 DUP4 ADD SWAP1 PUSH2 0x143A JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP7 DUP8 ISZERO PUSH2 0xCF3 JUMPI PUSH0 SWAP8 PUSH2 0xCA8 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 PUSH1 0x1 SWAP3 ADD MLOAD AND SWAP7 SWAP4 ADD SWAP3 PUSH2 0xA69 JUMP JUMPDEST SWAP1 SWAP7 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0xCEB JUMPI JUMPDEST DUP2 PUSH2 0xCC4 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x750 JUMPI PUSH1 0x40 ADD MLOAD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xC81 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCB7 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP2 PUSH2 0xAE3 JUMP JUMPDEST DUP6 SWAP1 DUP8 PUSH2 0xD3D PUSH2 0x1417 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x750 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE DUP2 PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xCF3 JUMPI PUSH2 0xED0 JUMPI JUMPDEST POP PUSH1 0x4 CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP1 SWAP4 SUB PUSH2 0x750 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH2 0xE56 PUSH2 0x1417 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 PUSH1 0x64 CALLDATALOAD DUP7 MSTORE PUSH1 0x20 DUP7 ADD MSTORE AND PUSH1 0x40 DUP5 ADD MSTORE AND SWAP2 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND SWAP4 LOG4 DUP1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST SWAP1 SWAP3 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6EC JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF14 JUMPI JUMPDEST DUP2 PUSH2 0xF06 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x750 JUMPI MLOAD PUSH2 0xA5E JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xEF9 JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x9C3 JUMP JUMPDEST PUSH32 0xA682E90300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH2 0x105C PUSH2 0x1057 PUSH2 0x1277 JUMP JUMPDEST PUSH2 0x12DB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP3 DUP3 ADD DUP4 DUP4 MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE DUP4 PUSH1 0x40 DUP5 ADD SWAP3 ADD SWAP4 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1082 JUMPI DUP5 DUP5 SUB DUP6 RETURN JUMPDEST DUP6 MLOAD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP7 MSTORE SWAP1 DUP4 ADD MLOAD AND DUP5 DUP4 ADD MSTORE SWAP5 DUP2 ADD SWAP5 PUSH1 0x40 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1075 JUMP JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0x1178 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH2 0x11BC PUSH2 0x147D JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x750 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x6EC JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 SWAP2 PUSH1 0x40 PUSH0 KECCAK256 SWAP5 DUP6 SLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP6 GT PUSH2 0x6EC JUMPI SWAP2 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x132E DUP4 DUP8 PUSH1 0x5 SHL ADD DUP11 PUSH2 0x129A JUMP JUMPDEST DUP6 DUP10 MSTORE PUSH0 SWAP4 DUP5 MSTORE DUP3 DUP5 KECCAK256 SWAP2 DUP4 DUP11 ADD JUMPDEST DUP8 DUP7 LT PUSH2 0x137E JUMPI POP POP POP POP POP POP POP POP POP DUP2 MLOAD ISZERO PUSH2 0x1356 JUMPI JUMP JUMPDEST PUSH32 0xF9AA031500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP9 MLOAD DUP10 DUP2 ADD DUP2 DUP2 LT DUP6 DUP3 GT OR PUSH2 0x6EC JUMPI PUSH1 0x1 SWAP3 DUP10 SWAP3 DUP9 SWAP3 DUP14 MSTORE DUP6 DUP9 SLOAD AND DUP2 MSTORE DUP6 DUP6 DUP10 ADD SLOAD AND DUP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP5 ADD SWAP6 ADD SWAP5 SWAP3 PUSH2 0x133D JUMP JUMPDEST CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x750 JUMPI SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x13EA JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xC4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x750 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x1178 JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBD 0xAD 0xC1 0xF9 PUSH1 0xD3 0xE6 CALLDATALOAD CALLER PUSH1 0x5B PC 0x24 DUP6 BLOBBASEFEE 0xB1 SWAP10 0x2A BLOBBASEFEE 0xAE CREATE2 PUSH16 0xD475A3E09A574F3DBD5164736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1118:3855:74:-:0;;;;;;;;;;;;;-1:-1:-1;;1118:3855:74;;;;-1:-1:-1;;;;;1118:3855:74;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1118:3855:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;409:14:48;;1273:26:49;;1269:95;;1118:3855:74;;;;;;;;2093:20:50;1118:3855:74;;2093:20:50;1118:3855:74;;-1:-1:-1;1118:3855:74;;;;;-1:-1:-1;1118:3855:74;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1203:42:78;1199:107;;1316:40;1541::74;1118:3855;;;;;;409:14:48;1118:3855:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1316:40:78;1118:3855:74;;;;;;;;;;;;;;;;1199:107:78;1268:27;;;-1:-1:-1;1268:27:78;;-1:-1:-1;1268:27:78;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;1118:3855:74;;-1:-1:-1;1322:31:49;1118:3855:74;-1:-1:-1;1118:3855:74;;;;;;-1:-1:-1;1118:3855:74;;;;;-1:-1:-1;1118:3855:74"},"deployedBytecode":{"functionDebugData":{"abi_decode_contract_IERC20":{"entryPoint":4727,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_bytes":{"entryPoint":5178,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":4762,"id":null,"parameterSlots":2,"returnSlots":0},"fun_checkOwner":{"entryPoint":5245,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_getBurnPath":{"entryPoint":4827,"id":18312,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_struct_SwapPathStep_dyn":{"entryPoint":5078,"id":null,"parameterSlots":2,"returnSlots":1},"read_from_calldatat_address":{"entryPoint":5143,"id":null,"parameterSlots":0,"returnSlots":1},"read_from_calldatat_contract_IERC20":{"entryPoint":5045,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"9299":[{"length":32,"start":1570},{"length":32,"start":1992},{"length":32,"start":2362},{"length":32,"start":2609},{"length":32,"start":3153},{"length":32,"start":3412},{"length":32,"start":3559}],"19771":[{"length":32,"start":445},{"length":32,"start":1202},{"length":32,"start":4691}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f905f3560e01c908163178ac96e1461122957508063715018a6146111a457806379ba5097146110ed5780638da5cb5b146110bb578063c1cfb02a1461103a578063c66472de14610754578063de557a3214610456578063e30c397814610422578063e3746cb21461011d5763f2fde38b1461008c575f80fd5b3461011a57602060031936011261011a576100a5611277565b6100ad61147d565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b503461011a57604060031936011261011a57610137611277565b602480359167ffffffffffffffff9182841161041e573660238501121561041e57836004013592831161041e5760069336828560061b8301011161041a5773ffffffffffffffffffffffffffffffffffffffff90604051937f4ccb20c00000000000000000000000000000000000000000000000000000000085526020948581600481877f0000000000000000000000000000000000000000000000000000000000000000165afa801561040f5784918a916103d1575b5016331415806103c4575b61039c57821680885260029060028652604089208054908a815581610318575b5050885b878110610228578980f35b818a5282875260408a20818a1b8501908054680100000000000000008110156102ec576001918282018082558210156102c0578d52898d20600194939291821b019088906102b2906044908361027f878f016113b5565b16947fffffffffffffffffffffffff000000000000000000000000000000000000000095868254161781550194016113b5565b16908254161790550161021d565b898e7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b888d7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6001907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83168303610370578b5283888c209260011b8301925b838110610360575050610219565b8c81558c83820155018490610352565b878c7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004887f23dada53000000000000000000000000000000000000000000000000000000008152fd5b50828854163314156101f9565b809250878092503d8311610408575b6103ea818361129a565b81010312610404575183811681036104045783905f6101ee565b8880fd5b503d6103e0565b6040513d8b823e3d90fd5b8580fd5b8480fd5b503461011a578060031936011261011a57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461011a5760e060031936011261011a57610470611277565b60243573ffffffffffffffffffffffffffffffffffffffff9182821680920361075057606435928084168094036107505760a4359381851680950361075057817f0000000000000000000000000000000000000000000000000000000000000000163303610728576040519261010084019567ffffffffffffffff96858110888211176106ec5784928391604052168552602095828787019433865260408801928352606088016044358152608089019182528260a08a0194608435865260c08b019687528160e08c019960c4358b528d826040519e8f9283017fc66472de00000000000000000000000000000000000000000000000000000000905251169060240152511660448c0152511660648a0152516084890152511660a48701525160c4860152511660e484015251610104908184015282526101409182810191818310868411176106ec57828791816040527f48c894910000000000000000000000000000000000000000000000000000000082528661014485015281837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08661061d61016482018261143a565b0301927f0000000000000000000000000000000000000000000000000000000000000000165af1801561071d57610652578580f35b3d8087843e610661818461129a565b81019184828585019403126107195751908582116107195701918161015f8401121561041a57820151916101609483116106ec578594604051926106cc867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116018561129a565b84845281858401011161041a578391018483015e0101525f808080808580f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8680fd5b6040513d88823e3d90fd5b6004867f23dada53000000000000000000000000000000000000000000000000000000008152fd5b5f80fd5b503461075057610100600319360112610750577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6110125760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610fe65760e4354211610fbe5773ffffffffffffffffffffffffffffffffffffffff60443516604435036107505760843573ffffffffffffffffffffffffffffffffffffffff81168103610750576108436044356112db565b91825190817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810111610f915773ffffffffffffffffffffffffffffffffffffffff831673ffffffffffffffffffffffffffffffffffffffff60206108ca7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8601886113d6565b5101511603610f695760243573ffffffffffffffffffffffffffffffffffffffff811680910361075057604051907f23b872dd000000000000000000000000000000000000000000000000000000006020830152602482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660448201526064356064820152606481528060a081011067ffffffffffffffff60a0830111176106ec575f8160a0602093016040528281519101826044355af115610cf3575f513d610f60575073ffffffffffffffffffffffffffffffffffffffff604435163b155b610f1c576040517f15afd40900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff60443516600482015260643560248201526020816044815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610cf357610eed575b50604435935f916064355b8251841015610d3257610a7c84846113d6565b519073ffffffffffffffffffffffffffffffffffffffff8251169073ffffffffffffffffffffffffffffffffffffffff602084015116907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff880187145f14610d2b5760a435915b6040519384602081011067ffffffffffffffff6020870111176106ec57602085016040525f85526040519b8c67ffffffffffffffff60e08281810110920111176106ec5773ffffffffffffffffffffffffffffffffffffffff9160208e60e081016040525f815201521660408c015260608b015260808a015260a089015260c0880152604051967f2bfb780c000000000000000000000000000000000000000000000000000000008852602060048901528051906002821015610cfe5788610c3760c08293606095602485015273ffffffffffffffffffffffffffffffffffffffff602082015116604485015273ffffffffffffffffffffffffffffffffffffffff604082015116606485015273ffffffffffffffffffffffffffffffffffffffff86820151166084850152608081015160a485015260a081015160c4850152015160e060e484015261010483019061143a565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1968715610cf3575f97610ca8575b5073ffffffffffffffffffffffffffffffffffffffff602060019201511696930192610a69565b9096506060813d606011610ceb575b81610cc46060938361129a565b8101031261075057604001519573ffffffffffffffffffffffffffffffffffffffff610c81565b3d9150610cb7565b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f91610ae3565b859087610d3d611417565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156107505773ffffffffffffffffffffffffffffffffffffffff9081604051937fae6393290000000000000000000000000000000000000000000000000000000085521660048401521660248201528160448201525f816064818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610cf357610ed0575b506004359173ffffffffffffffffffffffffffffffffffffffff83168093036107505773ffffffffffffffffffffffffffffffffffffffff9081610e56611417565b604051946064358652602086015216604084015216917f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d606073ffffffffffffffffffffffffffffffffffffffff6044351693a4807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b90925067ffffffffffffffff81116106ec576040525f9183610e14565b6020813d602011610f14575b81610f066020938361129a565b810103126107505751610a5e565b3d9150610ef9565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff6044351660045260245ffd5b600114156109c3565b7fa682e903000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7fe08b8af0000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610750576020806003193601126107505761105c611057611277565b6112db565b60405190828201838352815180915283604084019201935f5b8281106110825784840385f35b8551805173ffffffffffffffffffffffffffffffffffffffff908116865290830151168483015294810194604090930192600101611075565b34610750575f60031936011261075057602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610750575f6003193601126107505760015473ffffffffffffffffffffffffffffffffffffffff3381831603611178577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b34610750575f600319360112610750576111bc61147d565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610750575f6003193601126107505760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361075057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106ec57604052565b9073ffffffffffffffffffffffffffffffffffffffff8092165f52600260206002815260409160405f209485549267ffffffffffffffff968785116106ec57916040519761132e838760051b018a61129a565b8589525f93845282842091838a015b87861061137e5750505050505050505081511561135657565b7ff9aa0315000000000000000000000000000000000000000000000000000000005f5260045ffd5b8851898101818110858211176106ec57600192899288928d528588541681528585890154168382015281520194019501949261133d565b3573ffffffffffffffffffffffffffffffffffffffff811681036107505790565b80518210156113ea5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b60c43573ffffffffffffffffffffffffffffffffffffffff811681036107505790565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f541633036111785756fea2646970667358221220bdadc1f960d3e63533605b5824854ab1992a4aaef56fd475a3e09a574f3dbd5164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP1 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x178AC96E EQ PUSH2 0x1229 JUMPI POP DUP1 PUSH4 0x715018A6 EQ PUSH2 0x11A4 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x10ED JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x10BB JUMPI DUP1 PUSH4 0xC1CFB02A EQ PUSH2 0x103A JUMPI DUP1 PUSH4 0xC66472DE EQ PUSH2 0x754 JUMPI DUP1 PUSH4 0xDE557A32 EQ PUSH2 0x456 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x422 JUMPI DUP1 PUSH4 0xE3746CB2 EQ PUSH2 0x11D JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0x8C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x11A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH2 0xA5 PUSH2 0x1277 JUMP JUMPDEST PUSH2 0xAD PUSH2 0x147D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE DUP3 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x11A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH2 0x137 PUSH2 0x1277 JUMP JUMPDEST PUSH1 0x24 DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 GT PUSH2 0x41E JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x41E JUMPI DUP4 PUSH1 0x4 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0x41E JUMPI PUSH1 0x6 SWAP4 CALLDATASIZE DUP3 DUP6 PUSH1 0x6 SHL DUP4 ADD ADD GT PUSH2 0x41A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 DUP2 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x40F JUMPI DUP5 SWAP2 DUP11 SWAP2 PUSH2 0x3D1 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0x3C4 JUMPI JUMPDEST PUSH2 0x39C JUMPI DUP3 AND DUP1 DUP9 MSTORE PUSH1 0x2 SWAP1 PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 DUP10 KECCAK256 DUP1 SLOAD SWAP1 DUP11 DUP2 SSTORE DUP2 PUSH2 0x318 JUMPI JUMPDEST POP POP DUP9 JUMPDEST DUP8 DUP2 LT PUSH2 0x228 JUMPI DUP10 DUP1 RETURN JUMPDEST DUP2 DUP11 MSTORE DUP3 DUP8 MSTORE PUSH1 0x40 DUP11 KECCAK256 DUP2 DUP11 SHL DUP6 ADD SWAP1 DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x2EC JUMPI PUSH1 0x1 SWAP2 DUP3 DUP3 ADD DUP1 DUP3 SSTORE DUP3 LT ISZERO PUSH2 0x2C0 JUMPI DUP14 MSTORE DUP10 DUP14 KECCAK256 PUSH1 0x1 SWAP5 SWAP4 SWAP3 SWAP2 DUP3 SHL ADD SWAP1 DUP9 SWAP1 PUSH2 0x2B2 SWAP1 PUSH1 0x44 SWAP1 DUP4 PUSH2 0x27F DUP8 DUP16 ADD PUSH2 0x13B5 JUMP JUMPDEST AND SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP6 DUP7 DUP3 SLOAD AND OR DUP2 SSTORE ADD SWAP5 ADD PUSH2 0x13B5 JUMP JUMPDEST AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE ADD PUSH2 0x21D JUMP JUMPDEST DUP10 DUP15 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE REVERT JUMPDEST DUP9 DUP14 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH1 0x1 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP4 SUB PUSH2 0x370 JUMPI DUP12 MSTORE DUP4 DUP9 DUP13 KECCAK256 SWAP3 PUSH1 0x1 SHL DUP4 ADD SWAP3 JUMPDEST DUP4 DUP2 LT PUSH2 0x360 JUMPI POP POP PUSH2 0x219 JUMP JUMPDEST DUP13 DUP2 SSTORE DUP13 DUP4 DUP3 ADD SSTORE ADD DUP5 SWAP1 PUSH2 0x352 JUMP JUMPDEST DUP8 DUP13 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP9 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP DUP3 DUP9 SLOAD AND CALLER EQ ISZERO PUSH2 0x1F9 JUMP JUMPDEST DUP1 SWAP3 POP DUP8 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x408 JUMPI JUMPDEST PUSH2 0x3EA DUP2 DUP4 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x404 JUMPI MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x404 JUMPI DUP4 SWAP1 PUSH0 PUSH2 0x1EE JUMP JUMPDEST DUP9 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x3E0 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x11A JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x11A JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH2 0x470 PUSH2 0x1277 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x750 JUMPI PUSH1 0x64 CALLDATALOAD SWAP3 DUP1 DUP5 AND DUP1 SWAP5 SUB PUSH2 0x750 JUMPI PUSH1 0xA4 CALLDATALOAD SWAP4 DUP2 DUP6 AND DUP1 SWAP6 SUB PUSH2 0x750 JUMPI DUP2 PUSH32 0x0 AND CALLER SUB PUSH2 0x728 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x100 DUP5 ADD SWAP6 PUSH8 0xFFFFFFFFFFFFFFFF SWAP7 DUP6 DUP2 LT DUP9 DUP3 GT OR PUSH2 0x6EC JUMPI DUP5 SWAP3 DUP4 SWAP2 PUSH1 0x40 MSTORE AND DUP6 MSTORE PUSH1 0x20 SWAP6 DUP3 DUP8 DUP8 ADD SWAP5 CALLER DUP7 MSTORE PUSH1 0x40 DUP9 ADD SWAP3 DUP4 MSTORE PUSH1 0x60 DUP9 ADD PUSH1 0x44 CALLDATALOAD DUP2 MSTORE PUSH1 0x80 DUP10 ADD SWAP2 DUP3 MSTORE DUP3 PUSH1 0xA0 DUP11 ADD SWAP5 PUSH1 0x84 CALLDATALOAD DUP7 MSTORE PUSH1 0xC0 DUP12 ADD SWAP7 DUP8 MSTORE DUP2 PUSH1 0xE0 DUP13 ADD SWAP10 PUSH1 0xC4 CALLDATALOAD DUP12 MSTORE DUP14 DUP3 PUSH1 0x40 MLOAD SWAP15 DUP16 SWAP3 DUP4 ADD PUSH32 0xC66472DE00000000000000000000000000000000000000000000000000000000 SWAP1 MSTORE MLOAD AND SWAP1 PUSH1 0x24 ADD MSTORE MLOAD AND PUSH1 0x44 DUP13 ADD MSTORE MLOAD AND PUSH1 0x64 DUP11 ADD MSTORE MLOAD PUSH1 0x84 DUP10 ADD MSTORE MLOAD AND PUSH1 0xA4 DUP8 ADD MSTORE MLOAD PUSH1 0xC4 DUP7 ADD MSTORE MLOAD AND PUSH1 0xE4 DUP5 ADD MSTORE MLOAD PUSH2 0x104 SWAP1 DUP2 DUP5 ADD MSTORE DUP3 MSTORE PUSH2 0x140 SWAP2 DUP3 DUP2 ADD SWAP2 DUP2 DUP4 LT DUP7 DUP5 GT OR PUSH2 0x6EC JUMPI DUP3 DUP8 SWAP2 DUP2 PUSH1 0x40 MSTORE PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH2 0x144 DUP6 ADD MSTORE DUP2 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC0 DUP7 PUSH2 0x61D PUSH2 0x164 DUP3 ADD DUP3 PUSH2 0x143A JUMP JUMPDEST SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x71D JUMPI PUSH2 0x652 JUMPI DUP6 DUP1 RETURN JUMPDEST RETURNDATASIZE DUP1 DUP8 DUP5 RETURNDATACOPY PUSH2 0x661 DUP2 DUP5 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SWAP2 DUP5 DUP3 DUP6 DUP6 ADD SWAP5 SUB SLT PUSH2 0x719 JUMPI MLOAD SWAP1 DUP6 DUP3 GT PUSH2 0x719 JUMPI ADD SWAP2 DUP2 PUSH2 0x15F DUP5 ADD SLT ISZERO PUSH2 0x41A JUMPI DUP3 ADD MLOAD SWAP2 PUSH2 0x160 SWAP5 DUP4 GT PUSH2 0x6EC JUMPI DUP6 SWAP5 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x6CC DUP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP9 ADD AND ADD DUP6 PUSH2 0x129A JUMP JUMPDEST DUP5 DUP5 MSTORE DUP2 DUP6 DUP5 ADD ADD GT PUSH2 0x41A JUMPI DUP4 SWAP2 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE PUSH0 DUP1 DUP1 DUP1 DUP1 DUP6 DUP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP7 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x750 JUMPI PUSH2 0x100 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x1012 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0xFE6 JUMPI PUSH1 0xE4 CALLDATALOAD TIMESTAMP GT PUSH2 0xFBE JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD SUB PUSH2 0x750 JUMPI PUSH1 0x84 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x750 JUMPI PUSH2 0x843 PUSH1 0x44 CALLDATALOAD PUSH2 0x12DB JUMP JUMPDEST SWAP2 DUP3 MLOAD SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD GT PUSH2 0xF91 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 PUSH2 0x8CA PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 ADD DUP9 PUSH2 0x13D6 JUMP JUMPDEST MLOAD ADD MLOAD AND SUB PUSH2 0xF69 JUMPI PUSH1 0x24 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x750 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE DUP1 PUSH1 0xA0 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP4 ADD GT OR PUSH2 0x6EC JUMPI PUSH0 DUP2 PUSH1 0xA0 PUSH1 0x20 SWAP4 ADD PUSH1 0x40 MSTORE DUP3 DUP2 MLOAD SWAP2 ADD DUP3 PUSH1 0x44 CALLDATALOAD GAS CALL ISZERO PUSH2 0xCF3 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0xF60 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0xF1C JUMPI PUSH1 0x40 MLOAD PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xCF3 JUMPI PUSH2 0xEED JUMPI JUMPDEST POP PUSH1 0x44 CALLDATALOAD SWAP4 PUSH0 SWAP2 PUSH1 0x64 CALLDATALOAD JUMPDEST DUP3 MLOAD DUP5 LT ISZERO PUSH2 0xD32 JUMPI PUSH2 0xA7C DUP5 DUP5 PUSH2 0x13D6 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD AND SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP5 ADD MLOAD AND SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 ADD DUP8 EQ PUSH0 EQ PUSH2 0xD2B JUMPI PUSH1 0xA4 CALLDATALOAD SWAP2 JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH1 0x20 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x20 DUP8 ADD GT OR PUSH2 0x6EC JUMPI PUSH1 0x20 DUP6 ADD PUSH1 0x40 MSTORE PUSH0 DUP6 MSTORE PUSH1 0x40 MLOAD SWAP12 DUP13 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xE0 DUP3 DUP2 DUP2 ADD LT SWAP3 ADD GT OR PUSH2 0x6EC JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x20 DUP15 PUSH1 0xE0 DUP2 ADD PUSH1 0x40 MSTORE PUSH0 DUP2 MSTORE ADD MSTORE AND PUSH1 0x40 DUP13 ADD MSTORE PUSH1 0x60 DUP12 ADD MSTORE PUSH1 0x80 DUP11 ADD MSTORE PUSH1 0xA0 DUP10 ADD MSTORE PUSH1 0xC0 DUP9 ADD MSTORE PUSH1 0x40 MLOAD SWAP7 PUSH32 0x2BFB780C00000000000000000000000000000000000000000000000000000000 DUP9 MSTORE PUSH1 0x20 PUSH1 0x4 DUP10 ADD MSTORE DUP1 MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0xCFE JUMPI DUP9 PUSH2 0xC37 PUSH1 0xC0 DUP3 SWAP4 PUSH1 0x60 SWAP6 PUSH1 0x24 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x44 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x64 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP3 ADD MLOAD AND PUSH1 0x84 DUP6 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA4 DUP6 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC4 DUP6 ADD MSTORE ADD MLOAD PUSH1 0xE0 PUSH1 0xE4 DUP5 ADD MSTORE PUSH2 0x104 DUP4 ADD SWAP1 PUSH2 0x143A JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP7 DUP8 ISZERO PUSH2 0xCF3 JUMPI PUSH0 SWAP8 PUSH2 0xCA8 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 PUSH1 0x1 SWAP3 ADD MLOAD AND SWAP7 SWAP4 ADD SWAP3 PUSH2 0xA69 JUMP JUMPDEST SWAP1 SWAP7 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0xCEB JUMPI JUMPDEST DUP2 PUSH2 0xCC4 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x750 JUMPI PUSH1 0x40 ADD MLOAD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xC81 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCB7 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP2 PUSH2 0xAE3 JUMP JUMPDEST DUP6 SWAP1 DUP8 PUSH2 0xD3D PUSH2 0x1417 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x750 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE DUP2 PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xCF3 JUMPI PUSH2 0xED0 JUMPI JUMPDEST POP PUSH1 0x4 CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP1 SWAP4 SUB PUSH2 0x750 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH2 0xE56 PUSH2 0x1417 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 PUSH1 0x64 CALLDATALOAD DUP7 MSTORE PUSH1 0x20 DUP7 ADD MSTORE AND PUSH1 0x40 DUP5 ADD MSTORE AND SWAP2 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND SWAP4 LOG4 DUP1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST SWAP1 SWAP3 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6EC JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF14 JUMPI JUMPDEST DUP2 PUSH2 0xF06 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x750 JUMPI MLOAD PUSH2 0xA5E JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xEF9 JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x9C3 JUMP JUMPDEST PUSH32 0xA682E90300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH2 0x105C PUSH2 0x1057 PUSH2 0x1277 JUMP JUMPDEST PUSH2 0x12DB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP3 DUP3 ADD DUP4 DUP4 MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE DUP4 PUSH1 0x40 DUP5 ADD SWAP3 ADD SWAP4 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1082 JUMPI DUP5 DUP5 SUB DUP6 RETURN JUMPDEST DUP6 MLOAD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP7 MSTORE SWAP1 DUP4 ADD MLOAD AND DUP5 DUP4 ADD MSTORE SWAP5 DUP2 ADD SWAP5 PUSH1 0x40 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1075 JUMP JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0x1178 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH2 0x11BC PUSH2 0x147D JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x750 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x6EC JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 SWAP2 PUSH1 0x40 PUSH0 KECCAK256 SWAP5 DUP6 SLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP6 GT PUSH2 0x6EC JUMPI SWAP2 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x132E DUP4 DUP8 PUSH1 0x5 SHL ADD DUP11 PUSH2 0x129A JUMP JUMPDEST DUP6 DUP10 MSTORE PUSH0 SWAP4 DUP5 MSTORE DUP3 DUP5 KECCAK256 SWAP2 DUP4 DUP11 ADD JUMPDEST DUP8 DUP7 LT PUSH2 0x137E JUMPI POP POP POP POP POP POP POP POP POP DUP2 MLOAD ISZERO PUSH2 0x1356 JUMPI JUMP JUMPDEST PUSH32 0xF9AA031500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP9 MLOAD DUP10 DUP2 ADD DUP2 DUP2 LT DUP6 DUP3 GT OR PUSH2 0x6EC JUMPI PUSH1 0x1 SWAP3 DUP10 SWAP3 DUP9 SWAP3 DUP14 MSTORE DUP6 DUP9 SLOAD AND DUP2 MSTORE DUP6 DUP6 DUP10 ADD SLOAD AND DUP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP5 ADD SWAP6 ADD SWAP5 SWAP3 PUSH2 0x133D JUMP JUMPDEST CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x750 JUMPI SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x13EA JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xC4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x750 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x1178 JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBD 0xAD 0xC1 0xF9 PUSH1 0xD3 0xE6 CALLDATALOAD CALLER PUSH1 0x5B PC 0x24 DUP6 BLOBBASEFEE 0xB1 SWAP10 0x2A BLOBBASEFEE 0xAE CREATE2 PUSH16 0xD475A3E09A574F3DBD5164736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1118:3855:74:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1118:3855:74;;;;;;;:::i;:::-;1500:62:49;;:::i;:::-;1118:3855:74;;;;;;;1738:24:50;1118:3855:74;;;1738:24:50;1118:3855:74;;;;1777:43:50;;;;1118:3855:74;;;;;;;;;;;-1:-1:-1;;1118:3855:74;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;956:36:78;1118:3855:74;956:36:78;;1118:3855:74;956:18:78;;;1118:3855:74;956:18:78;;;1118:3855:74;956:36:78;;;;;;;;;;;;1118:3855:74;;;942:10:78;:50;;:75;;;1118:3855:74;938:131:78;;1118:3855:74;;;;;1752:10;1118:3855;1752:10;1118:3855;;;;;;;;;;;;;;;1788:13;;;1803:16;;;;;;1118:3855;;;1821:3;1118:3855;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1788:13;;1118:3855;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;938:131:78;1118:3855:74;1040:18:78;;;;;942:75;1118:3855:74;;;;;942:10:78;996:21;;942:75;;956:36;;;;;;;;;;;;;;;;;;:::i;:::-;;;1118:3855:74;;;;;;;;;;;;956:36:78;;;;;1118:3855:74;;;;956:36:78;;;;;;1118:3855:74;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1118:3855:74;;;;;;;1311:13:50;1118:3855:74;;;;;;;;;;;;;;-1:-1:-1;;1118:3855:74;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;799:18:78;;1118:3855:74;777:10:78;:41;773:97;;1118:3855:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;2557:374;;;;;777:10:78;;1118:3855:74;;;2557:374;;1118:3855;;;;2557:374;;1118:3855;;;;;2557:374;;1118:3855;;;2557:374;1118:3855;2557:374;;1118:3855;;;;;;2557:374;;1118:3855;;;2557:374;1118:3855;2557:374;;1118:3855;;;;;;;;;2481:464;;;;;;;;1118:3855;;2481:464;1118:3855;2481:464;1118:3855;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2481:464;;1118:3855;;;;;;;;;;;;;;;;;;;;;;2454:501;;;;;;1118:3855;;;2454:501;1118:3855;;;;;;;:::i;:::-;2454:501;;:6;;1118:3855;2454:501;;;;;;;;1118:3855;;;2454:501;;;;;;;;;;:::i;:::-;;;;;;;;;1118:3855;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;2454:501;;;;;1118:3855;;;;;;;;;;;;;;;;;2454:501;1118:3855;;;;;;;;;773:97:78;1118:3855:74;841:18:78;;;;;1118:3855:74;;;;;;;;;;-1:-1:-1;;1118:3855:74;;;;;551:66:42;2806:53:43;1316:93:42;;1529:4;551:66;3051:52:43;1118:3855:74;586:6:48;1118:3855:74;564:10:48;:29;560:108;;3234:15:74;1118:3855;3216:15;:33;3212:85;;1118:3855;3325:15;1118:3855;;3325:15;1118:3855;;;;3371:18;1118:3855;;;;;;;;3486:21;3325:15;1118:3855;3486:21;:::i;:::-;1118:3855;;;;;;;;;;;;;;;3571:29;:20;1118:3855;;;3571:20;;:::i;:::-;;:29;1118:3855;;3571:44;3567:106;;3757:13;1118:3855;;;;;;;;;;;1745:53:60;1118:3855:74;3571:29;1745:53:60;;;3757:13:74;1745:53:60;;1118:3855:74;;586:6:48;1118:3855:74;3325:15;1118:3855;;;3424:21;1118:3855;3424:21;1118:3855;;;3424:21;1745:53:60;;1118:3855:74;;;;;;;;;;;;;;;;3571:29;1118:3855;;;;8507:421:60;;;1745:53;;1118:3855:74;3325:15;1118:3855;8507:421:60;;;;;1118:3855:74;8507:421:60;;8942:15;;1118:3855:74;;3325:15;1118:3855;;8960:26:60;:31;8942:68;8938:146;;1118:3855:74;;;3814:39;;1118:3855;3325:15;1118:3855;;;3814:39;;1118:3855;3424:21;1118:3855;3757:13;1118:3855;;;3571:29;586:6:48;3325:15:74;586:6:48;1118:3855:74;;586:6:48;1118:3855:74;3814:39;;;;;;;;8942:68:60;-1:-1:-1;3325:15:74;1118:3855;;;;3424:21;1118:3855;4063:3;1118:3855;;4045:16;;;;;4109:8;;;;:::i;:::-;;1118:3855;;;;;4359:13;1118:3855;3571:29;4359:13;;1118:3855;;4459:46;1118:3855;;;4460:18;;4459:46;1118:3855;;;;;4459:46;;1118:3855;;;;3571:29;1118:3855;;;;3571:29;1118:3855;;;;;;3571:29;1118:3855;;;;;;;;;;;;;;;;;;;;;;;;;;3571:29;1118:3855;;;;;;;;;4187:378;1118:3855;;;4187:378;;1118:3855;3424:21;4187:378;;1118:3855;3371:18;4187:378;;1118:3855;;4187:378;;1118:3855;4187:378;;;1118:3855;;;4158:421;1118:3855;4158:421;;3571:29;1118:3855;4158:421;;1118:3855;;;;;;;;;;;;4187:378;1118:3855;;3424:21;1118:3855;3757:13;1118:3855;;;;3571:29;4187:378;;1118:3855;;3325:15;1118:3855;;;;;4187:378;;1118:3855;;3424:21;1118:3855;;;;4187:378;;;1118:3855;;3371:18;1118:3855;;;3371:18;4187:378;;1118:3855;;;;;;4187:378;;1118:3855;;;;;4187:378;1118:3855;;3234:15;1118:3855;;;;;;;;:::i;:::-;4158:421;586:6:48;1118:3855:74;;586:6:48;1118:3855:74;4158:421;;;;;;;1118:3855;4158:421;;;4459:46;4359:13;1118:3855;3571:29;1529:4:42;4359:13:74;;1118:3855;;4635:29;4063:3;1118:3855;4030:13;;;4158:421;;;;3424:21;4158:421;;3424:21;4158:421;;;;;;3424:21;4158:421;;;:::i;:::-;;;1118:3855;;;;;;;;;4158:421;;;;;-1:-1:-1;4158:421:74;;;1118:3855;;;;;;;;;;;;;;;;3757:13;1118:3855;;4459:46;1118:3855;4459:46;;;4045:16;;;;4806;;:::i;:::-;1118:3855;586:6:48;1118:3855:74;4779:63;;;;1118:3855;;;;;4779:63;1118:3855;4779:63;;1118:3855;;4779:63;;1118:3855;;3757:13;1118:3855;;;;3325:15;1118:3855;;;;586:6:48;3424:21:74;586:6:48;;1118:3855:74;586:6:48;1118:3855:74;4779:63;;;;;;;;4025:650;1118:3855;;;;;;;;;;;;;4947:16;;;;:::i;:::-;1118:3855;;;3424:21;1118:3855;;;3571:29;1118:3855;;;;;;;;;;4858:106;3424:21;1118:3855;3325:15;1118:3855;;4858:106;;3051:52:43;551:66:42;3051:52:43;1118:3855:74;;4779:63;1118:3855;;;;;;;;;;;4779:63;;;;3814:39;3571:29;3814:39;;3571:29;3814:39;;;;;;3571:29;3814:39;;;:::i;:::-;;;1118:3855;;;;;3814:39;;;;;-1:-1:-1;3814:39:74;;8938:146:60;9033:40;1118:3855:74;9033:40:60;1118:3855:74;3325:15;1118:3855;;;;3757:13;1118:3855;9033:40:60;8942:68;1529:4:42;8994:16:60;;8942:68;;3567:106:74;3638:24;1118:3855;3638:24;1118:3855;;3638:24;1118:3855;;;;;;;;;;3212:85;3272:14;1118:3855;3272:14;1118:3855;;3272:14;560:108:48;616:41;1118:3855:74;616:41:48;564:10;1118:3855:74;;;;616:41:48;1316:93:42;1368:30;1118:3855:74;1368:30:42;1118:3855:74;;1368:30:42;1118:3855:74;;;;;;-1:-1:-1;;1118:3855:74;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1118:3855:74;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1118:3855:74;;;;;1311:13:50;1118:3855:74;;735:10:64;1118:3855:74;;;2339:24:50;2335:96;;1118:3855:74;;;;1311:13:50;1118:3855:74;;;735:10:64;;1118:3855:74;;;;;;735:10:64;1118:3855:74;;3052:40:49;1118:3855:74;3052:40:49;;1118:3855:74;2335:96:50;2386:34;1118:3855:74;2386:34:50;735:10:64;1118:3855:74;;;;2386:34:50;1118:3855:74;;;;;-1:-1:-1;;1118:3855:74;;;;;1500:62:49;;:::i;:::-;1118:3855:74;;;;2093:20:50;1118:3855:74;;2093:20:50;1118:3855:74;;;;;;;;;3052:40:49;;;;1118:3855:74;;;;;;-1:-1:-1;;1118:3855:74;;;;;;479:55:78;1118:3855:74;479:55:78;1118:3855:74;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;1937:220::-;;1118:3855;;;;-1:-1:-1;1118:3855:74;2043:10;1118:3855;2043:10;1118:3855;;;;;-1:-1:-1;1118:3855:74;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;1118:3855:74;;;;;;;;;;;;;;;;2035:28;;;;;;;;;;1118:3855;2078:17;2074:77;;1937:220::o;2074:77::-;2118:22;-1:-1:-1;2118:22:74;;-1:-1:-1;2118:22:74;1118:3855;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;4806:16;1118:3855;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1118:3855:74;;;;;;;;;;;:::o;1796:162:49:-;1118:3855:74;1710:6:49;1118:3855:74;;735:10:64;1855:23:49;1851:101;;1796:162::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","burnHook((address,address,address,uint256,address,uint256,address,uint256))":"c66472de","getBurnPath(address)":"c1cfb02a","owner()":"8da5cb5b","pendingOwner()":"e30c3978","protocolFeeSweeper()":"178ac96e","renounceOwnership()":"715018a6","setBurnPath(address,(address,address)[])":"e3746cb2","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"_protocolFeeSweeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BurnPathDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeSweeper\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetTokenOutMismatch\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IBalancerFeeBurner.BurnHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"burnHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"getBurnPath\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"internalType\":\"struct IBalancerFeeBurner.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFeeSweeper\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"internalType\":\"struct IBalancerFeeBurner.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"}],\"name\":\"setBurnPath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}},\"getBurnPath(address)\":{\"params\":{\"feeToken\":\"The fee token to get the path for\"},\"returns\":{\"steps\":\"The steps in the burn path\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setBurnPath(address,(address,address)[])\":{\"details\":\"This is the sequence of swaps required to convert the `feeToken` to the `targetToken`. This is a permissioned function.\",\"params\":{\"feeToken\":\"The fee token to set the path for\",\"steps\":\"The steps in the burn path\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BurnPathDoesNotExist()\":[{\"notice\":\"Burn path not set for the fee token.\"}],\"InvalidProtocolFeeSweeper()\":[{\"notice\":\"The fee protocol is invalid.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}],\"TargetTokenOutMismatch()\":[{\"notice\":\"The last token in the path is not the same as the target token.\"}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"},\"getBurnPath(address)\":{\"notice\":\"Get the burn path for a fee token.\"},\"setBurnPath(address,(address,address)[])\":{\"notice\":\"Set the burn path for a fee token.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/BalancerFeeBurner.sol\":\"BalancerFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol\":{\"keccak256\":\"0xb5dc03fa23c5481ff4bebe9136c73e363a96e5beaf89d22f4eedb142331a0478\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d33361a79282a589f7b167caa04acb3b7eba0cc85b11a21f8504187151542ed6\",\"dweb:/ipfs/Qmc5WZFBfq9oZEQ4Zhv6VgJpeBJA7v68Jc1cKTJ5iFBuhM\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/BalancerFeeBurner.sol\":{\"keccak256\":\"0x79faa46e1a6171ee5b9fd9a2f980e100a3cd1ba824db5202d75dc2de4348e5c6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://83cb2621d9eda7eaec004401b4770f923c1f65e2596f9051ff6b72addc0af0d4\",\"dweb:/ipfs/QmWTSXD85nqakqZA2ygrn254sLX2XGugV6YtzUbaym1wAy\"]},\"contracts/FeeBurnerAuthentication.sol\":{\"keccak256\":\"0x4861db67bf113a4775c165241802df34a6c0e9fefaec82e8aaf969b5879759f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f522b3af683e09e1b67ed515be9972e7cf9514a584e264c4ca9656cc12c2f06\",\"dweb:/ipfs/QmNYqMsvWcNqACozLm3cYeR4oC3KKfKNBDSqR3vcpjv3zo\"]}},\"version\":1}"}},"contracts/CallAndRevert.sol":{"CallAndRevert":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callAndRevertHook","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608080604052346015576103b0908161001a8239f35b5f80fdfe6080604052600480361015610012575f80fd5b5f3560e01c63a769963814610025575f80fd5b346102325760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102325780359073ffffffffffffffffffffffffffffffffffffffff82168203610232576024359167ffffffffffffffff8311610232573660238401121561023257828201356100a76100a2826102a7565b610236565b91818352602094858401903660248583010111610232575f948588868297602484960187378301015251925af1903d1561022957823d926100ea6100a2856102a7565b9384523d5f8386013e5b8015610179577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0918461012c604496601f94336102e1565b506040519687957f5ab64fb80000000000000000000000000000000000000000000000000000000087528601528051918291826024880152018686015e5f85828601015201168101030190fd5b5050808251106101dd577f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000848401511614610203578151156101dd575080519101fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f525ffd5b7f28f95541000000000000000000000000000000000000000000000000000000005f525ffd5b826060926100f4565b5f80fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff82111761027a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161027a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9061031e57508051156102f657602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610371575b61032f575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561032756fea2646970667358221220fe11d0a57628ea08877b4090e16e969cdadbb042c6375ec75ff301a9774ed5e964736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x15 JUMPI PUSH2 0x3B0 SWAP1 DUP2 PUSH2 0x1A DUP3 CODECOPY RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0xA7699638 EQ PUSH2 0x25 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x232 JUMPI PUSH1 0x40 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x232 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x232 JUMPI PUSH1 0x24 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x232 JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x232 JUMPI DUP3 DUP3 ADD CALLDATALOAD PUSH2 0xA7 PUSH2 0xA2 DUP3 PUSH2 0x2A7 JUMP JUMPDEST PUSH2 0x236 JUMP JUMPDEST SWAP2 DUP2 DUP4 MSTORE PUSH1 0x20 SWAP5 DUP6 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0x232 JUMPI PUSH0 SWAP5 DUP6 DUP9 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL SWAP1 RETURNDATASIZE ISZERO PUSH2 0x229 JUMPI DUP3 RETURNDATASIZE SWAP3 PUSH2 0xEA PUSH2 0xA2 DUP6 PUSH2 0x2A7 JUMP JUMPDEST SWAP4 DUP5 MSTORE RETURNDATASIZE PUSH0 DUP4 DUP7 ADD RETURNDATACOPY JUMPDEST DUP1 ISZERO PUSH2 0x179 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 DUP5 PUSH2 0x12C PUSH1 0x44 SWAP7 PUSH1 0x1F SWAP5 CALLER PUSH2 0x2E1 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP9 ADD MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST POP POP DUP1 DUP3 MLOAD LT PUSH2 0x1DD JUMPI PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 DUP5 ADD MLOAD AND EQ PUSH2 0x203 JUMPI DUP2 MLOAD ISZERO PUSH2 0x1DD JUMPI POP DUP1 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH1 0x60 SWAP3 PUSH2 0xF4 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x40 MLOAD SWAP4 ADD AND DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x27A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x27A JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x31E JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2F6 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x371 JUMPI JUMPDEST PUSH2 0x32F JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x327 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID GT 0xD0 0xA5 PUSH23 0x28EA08877B4090E16E969CDADBB042C6375EC75FF301A9 PUSH24 0x4ED5E964736F6C634300081B003300000000000000000000 ","sourceMap":"241:1325:75:-:0;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"allocate_memory":{"entryPoint":566,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":679,"id":null,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":737,"id":11283,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600480361015610012575f80fd5b5f3560e01c63a769963814610025575f80fd5b346102325760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102325780359073ffffffffffffffffffffffffffffffffffffffff82168203610232576024359167ffffffffffffffff8311610232573660238401121561023257828201356100a76100a2826102a7565b610236565b91818352602094858401903660248583010111610232575f948588868297602484960187378301015251925af1903d1561022957823d926100ea6100a2856102a7565b9384523d5f8386013e5b8015610179577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0918461012c604496601f94336102e1565b506040519687957f5ab64fb80000000000000000000000000000000000000000000000000000000087528601528051918291826024880152018686015e5f85828601015201168101030190fd5b5050808251106101dd577f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000848401511614610203578151156101dd575080519101fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f525ffd5b7f28f95541000000000000000000000000000000000000000000000000000000005f525ffd5b826060926100f4565b5f80fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff82111761027a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161027a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9061031e57508051156102f657602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610371575b61032f575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561032756fea2646970667358221220fe11d0a57628ea08877b4090e16e969cdadbb042c6375ec75ff301a9774ed5e964736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0xA7699638 EQ PUSH2 0x25 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x232 JUMPI PUSH1 0x40 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x232 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x232 JUMPI PUSH1 0x24 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x232 JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x232 JUMPI DUP3 DUP3 ADD CALLDATALOAD PUSH2 0xA7 PUSH2 0xA2 DUP3 PUSH2 0x2A7 JUMP JUMPDEST PUSH2 0x236 JUMP JUMPDEST SWAP2 DUP2 DUP4 MSTORE PUSH1 0x20 SWAP5 DUP6 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0x232 JUMPI PUSH0 SWAP5 DUP6 DUP9 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL SWAP1 RETURNDATASIZE ISZERO PUSH2 0x229 JUMPI DUP3 RETURNDATASIZE SWAP3 PUSH2 0xEA PUSH2 0xA2 DUP6 PUSH2 0x2A7 JUMP JUMPDEST SWAP4 DUP5 MSTORE RETURNDATASIZE PUSH0 DUP4 DUP7 ADD RETURNDATACOPY JUMPDEST DUP1 ISZERO PUSH2 0x179 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 DUP5 PUSH2 0x12C PUSH1 0x44 SWAP7 PUSH1 0x1F SWAP5 CALLER PUSH2 0x2E1 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP9 ADD MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST POP POP DUP1 DUP3 MLOAD LT PUSH2 0x1DD JUMPI PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 DUP5 ADD MLOAD AND EQ PUSH2 0x203 JUMPI DUP2 MLOAD ISZERO PUSH2 0x1DD JUMPI POP DUP1 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH1 0x60 SWAP3 PUSH2 0xF4 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x40 MLOAD SWAP4 ADD AND DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x27A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x27A JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x31E JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2F6 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x371 JUMPI JUMPDEST PUSH2 0x32F JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x327 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID GT 0xD0 0xA5 PUSH23 0x28EA08877B4090E16E969CDADBB042C6375EC75FF301A9 PUSH24 0x4ED5E964736F6C634300081B003300000000000000000000 ","sourceMap":"241:1325:75:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;811:19;;;;;241:1325;;;;;;;;;;;:::i;:::-;;;;;;;;;;;840:718;;;;241:1325;990:10;;955:63;241:1325;990:10;241:1325;990:10;;955:63;:::i;:::-;;241:1325;;1084:26;;;;;;;;241:1325;;;;;;;;;;;;;;;;;;;;;;;;;;;1084:26;;;;840:718;241:1325;;;;;1443:21:37;1439:82;;1344:27:75;241:1325;1530:151:37;;;;241:1325:75;1327:44;1323:110;;241:1325;;1881:21:37;:17;;2008:160;;;;;;1877:362;2205:23;241:1325:75;2205:23:37;241:1325:75;2205:23:37;1323:110:75;1398:20;241:1325;1398:20;241:1325;1398:20;241:1325;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;4437:582:61:-;;4609:8;;-1:-1:-1;241:1325:75;;5690:21:61;:17;;5815:105;;;;;;5686:301;5957:19;5710:1;5957:19;;5710:1;5957:19;4605:408;241:1325:75;;4857:22:61;:49;;;4605:408;4853:119;;4985:17;;:::o;4853:119::-;241:1325:75;4933:24:61;;4878:1;4933:24;241:1325:75;4933:24:61;241:1325:75;;4878:1:61;4933:24;4857:49;4883:18;;;:23;4857:49;"},"methodIdentifiers":{"callAndRevertHook(address,bytes)":"a7699638"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callAndRevertHook\",\"outputs\":[],\"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.\"}],\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/CallAndRevert.sol\":\"CallAndRevert\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"contracts/CallAndRevert.sol\":{\"keccak256\":\"0xe0f09e833265592b398c7607db658e3541b800f66c9536ee129ae6863e4185f2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bc7dd31dd95f738debb5ca8c8b80e90384c1d8b72dc70e02dd7ae22e7c77f337\",\"dweb:/ipfs/QmNaJXyazNRD1fbqs6QJSwB3VWKu3ZjHqecMqKg57UeMuS\"]}},\"version\":1}"}},"contracts/CowSwapFeeBurner.sol":{"CowSwapFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IProtocolFeeSweeper","name":"_protocolFeeSweeper","type":"address"},{"internalType":"contract IComposableCow","name":"_composableCow","type":"address"},{"internalType":"address","name":"_cowVaultRelayer","type":"address"},{"internalType":"bytes32","name":"_appData","type":"bytes32"},{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"string","name":"_version","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"InterfaceIsSignatureVerifierMuxer","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"InvalidOrderParameters","type":"error"},{"inputs":[],"name":"InvalidProtocolFeeSweeper","type":"error"},{"inputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"actualStatus","type":"uint8"}],"name":"OrderHasUnexpectedStatus","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"OrderNotValid","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollNever","type":"error"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtBlock","type":"error"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtEpoch","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryNextBlock","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"indexed":false,"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"}],"name":"ConditionalOrderCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"OrderCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"OrderRetried","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"appData","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"composableCow","outputs":[{"internalType":"contract IComposableCow","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"emergencyCancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrderStatus","outputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"getTradeableOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeSweeper","outputs":[{"internalType":"contract IProtocolFeeSweeper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"retryOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vaultRelayer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"},{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"_order","type":"tuple"}],"name":"verify","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_address_fromMemory":{"entryPoint":909,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory":{"entryPoint":872,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"61014060405234610364576129dc8038038061001a81610368565b92833981019060c0818303126103645780516001600160a01b0391828216919082820361036457602093848201519381851685036103645761005e6040840161038d565b966060840151966100716080860161038d565b9560a086015160018060401b0396878211610364570193601f9484868201121561036457805198888a1161032e57601f19996100b28882018c168701610368565b968188528682850101116103645785815f92828c9601838b015e8801015216801561035157600180546001600160a01b031990811682555f805491821684178155919816907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a31561034257608052815194851161032e576002548481811c91168015610324575b82821014610310578381116102cc575b508092851160011461026a5750839450908392915f9461025f575b50501b915f199060031b1c1916176002555b7ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677560a0527f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc960c05260e0526101009182526101209081526040519061263a92836103a2843960805183818161021e0152818161066401528181610cef01528181610e5f01526110aa015260a05183611ff8015260c05183611f87015260e051838181610a590152818161135b0152818161156101526122cf0152518281816103d80152818161071b01528181610a090152611d7a015251818181610ac60152611fcc0152f35b015192505f80610167565b92948490811660025f52845f20945f905b888383106102b2575050501061029a575b505050811b01600255610179565b01515f1960f88460031b161c191690555f808061028c565b85870151885590960195948501948793509081019061027b565b60025f52815f208480880160051c820192848910610307575b0160051c019085905b8281106102fc57505061014c565b5f81550185906102ee565b925081926102e5565b634e487b7160e01b5f52602260045260245ffd5b90607f169061013c565b634e487b7160e01b5f52604160045260245ffd5b63932c92a560e01b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761032e57604052565b51906001600160a01b03821682036103645756fe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a7146119505750806314a2a784146116785780631626ba7e146110ce578063178ac96e1461107e57806354fd4d5014610f3e57806360e092c614610dfa57806368bce71214610c875780636eba2b1314610c5a5780636f9d75cd14610c25578063715018a614610ba057806379ba509714610ae95780638aebd34814610aaf5780638da5cb5b14610a7d57806393504c5214610a2d5780639b552cc2146109dd578063b8296fc4146108c3578063d83b06a4146105fe578063de557a32146101bc578063e30c3978146101895763f2fde38b146100f8575f80fd5b3461018557602060031936011261018557610111611a9f565b6101196120cb565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b34610185575f60031936011261018557602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346101855760e0600319360112610185576101d5611a9f565b6101dd611ac2565b90604435916064359073ffffffffffffffffffffffffffffffffffffffff93848316809303610185576084359360a4358681168091036101855760c43595877f00000000000000000000000000000000000000000000000000000000000000001633036105d6577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0096875c6105ae576001885d858916958787036102ff5760846040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f46656520746f6b656e20616e642074617267657420746f6b656e20617265207460448201527f68652073616d65000000000000000000000000000000000000000000000000006064820152fd5b85156105505761030e836120eb565b61031782612150565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523060448201528660648201526064815260a081019080821067ffffffffffffffff8311176105235761037b916040528261257d565b610385868261247d565b506004811015806104e95781151580610516575b6104ba575050925f99927f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d95926103fd88876103d66060996122b7565b7f0000000000000000000000000000000000000000000000000000000000000000906121b6565b63ffffffff600360405161041081611b4c565b8c8152602081018681526040820190868252848b8401961686525f8e9052836020525f60408b91209351167fffffffffffffffffffffffff000000000000000000000000000000000000000090818554161784558a6001850192511690825416179055516002820155019151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000825416179055604051968752602087015260408601521692a45d005b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f526104e95760045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b50505f6002821415610399565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f46656520746f6b656e20616d6f756e74206973207a65726f00000000000000006044820152fd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461018557606060031936011261018557610617611a9f565b60243560443573ffffffffffffffffffffffffffffffffffffffff916040517f4ccb20c00000000000000000000000000000000000000000000000000000000081526020908181600481887f0000000000000000000000000000000000000000000000000000000000000000165afa80156108485785915f9161088b575b50163314158061087e575b6105d6576106ad856123aa565b919060048110156104e9576003810361085357506106ca836120eb565b6106d384612150565b84861694855f5260038252600360405f208560028201550163ffffffff86167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790557f000000000000000000000000000000000000000000000000000000000000000090604051907fdd62ed3e0000000000000000000000000000000000000000000000000000000082523060048301528216602482015282816044818a5afa908115610848575f916107ea575b507f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a97849392846080999897966107c394106107d9575b50506122b7565b60405194855284015260408301526060820152a1005b6107e391836121b6565b89846107bc565b90508281819398979695943d8311610841575b6108078183611b68565b81010312610185575194959394929391929091907f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a610785565b503d6107fd565b6040513d5f823e3d90fd5b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50835f54163314156106a0565b809250838092503d83116108bc575b6108a48183611b68565b81010312610185576108b68591611bcc565b87610695565b503d61089a565b346101855760a0600319360112610185576108dc611a9f565b506108e5611ac2565b5067ffffffffffffffff60643581811161018557610907903690600401611ae5565b608492919235918211610185576109d992610929610930933690600401611ae5565b5050611ccb565b6040519182918291909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b0390f35b34610185575f60031936011261018557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610185575f60031936011261018557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610185575f60031936011261018557602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610185575f6003193601126101855760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610185575f6003193601126101855760015473ffffffffffffffffffffffffffffffffffffffff3381831603610b74577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b34610185575f60031936011261018557610bb86120cb565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461018557602060031936011261018557610c46610c41611a9f565b6123aa565b5060405160048210156104e9576020918152f35b34610185576020600319360112610185576109d9610930610c79611a9f565b610c81611c73565b50611ebd565b3461018557604060031936011261018557610ca0611a9f565b610ca8611ac2565b6040517f4ccb20c000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff926020929183816004817f000000000000000000000000000000000000000000000000000000000000000089165afa80156108485785915f91610dc2575b501633141580610db5575b6105d65782602494604051958680927f70a0823100000000000000000000000000000000000000000000000000000000825230600483015285165afa928315610848575f93610d83575b50610d819350611d09565b005b90925083813d8311610dae575b610d9a8183611b68565b8101031261018557610d8192519184610d76565b503d610d90565b50835f5416331415610d2c565b809250858092503d8311610df3575b610ddb8183611b68565b8101031261018557610ded8591611bcc565b86610d21565b503d610dd1565b3461018557604060031936011261018557610e13611a9f565b610e1b611ac2565b73ffffffffffffffffffffffffffffffffffffffff6040517f4ccb20c0000000000000000000000000000000000000000000000000000000008152602081600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156108485782915f91610f02575b50163314159081610ef4575b506105d657610eaa826123aa565b91909260048410156104e95760038403610ec857610d819350611d09565b837fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90505f541633141583610e9c565b9150506020813d602011610f36575b81610f1e60209383611b68565b8101031261018557610f308291611bcc565b85610e90565b3d9150610f11565b34610185575f600319360112610185576040515f6002549060018260011c9160018416918215611074575b60209485851084146110475785879486865291825f14611009575050600114610fae575b50610f9a92500383611b68565b6109d9604051928284938452830190611ba7565b84915060025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace905f915b858310610ff1575050610f9a935082010185610f8d565b80548389018501528794508693909201918101610fda565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685820152610f9a95151560051b8501019250879150610f8d9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f1692610f69565b34610185575f60031936011261018557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101855760406003193601126101855760243567ffffffffffffffff80821161018557366023830112156101855781600401359161110c83611b8b565b9261111a6040519485611b68565b8084526020840191366024838301011161018557815f92602460209301853785010152825183019160208301938084036101a09081811261018557610180809112610185576111746040519561116f87611b13565b611bcc565b855261118260408401611bcc565b602086015261119360608401611bcc565b60408601526080830151606086015260a0830151608086015260c083015163ffffffff811681036101855760a086015260e083015160c0860152610100908184015160e08701526101209182850151908701526101409182850151908115158203610185578701526101609182850151908701528301519085015281015190828211610185570193606085850312610185576040519461123286611b30565b602081015183811161018557810182603f8201121561018557602081015190848211610523578160051b6040519261126d6020830185611b68565b8352604060208401918301019185831161018557604001905b828210611668575050508652604081015183811161018557606090820180960312610185576040516112b781611b30565b60208601519573ffffffffffffffffffffffffffffffffffffffff9687811681036101855782526040810151602083015260608101518581116101855760208591611303930101611bed565b604082015260208701526060810151928311610185576113269201602001611bed565b6040840152604051907ff698da25000000000000000000000000000000000000000000000000000000008252602082600481867f0000000000000000000000000000000000000000000000000000000000000000165afa918215610848575f92611632575b509061144e611440926040519384916020830191909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101845283611b68565b604051809460208083015260a08201815190606060408501528151809152602060c085019201905f5b8181106116195785602061154b8b8b8b6114eb866114dd8d8d60406114cb8b840151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09384888303016060890152611c33565b92015190848303016080850152611ba7565b03601f198101885287611b68565b61155d604051968795869485947f53f00b14000000000000000000000000000000000000000000000000000000008652306004870152336024870152600435604487015260648601525f608486015260e060a486015260e4850190611ba7565b906003198483030160c4850152611ba7565b03917f0000000000000000000000000000000000000000000000000000000000000000165afa8015610848575f906115bd575b6020907fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b506020813d602011611611575b816115d760209383611b68565b8101031261018557517fffffffff000000000000000000000000000000000000000000000000000000008116810361018557602090611590565b3d91506115ca565b8251845289955060209384019390920191600101611477565b91506020823d602011611660575b8161164d60209383611b68565b810103126101855790519061144e61138b565b3d9150611640565b8151815260209182019101611286565b346101855761026060031936011261018557611692611a9f565b5061169b611ac2565b5067ffffffffffffffff60a435818111610185576116bd903690600401611ae5565b919060c435828111610185576116d7903690600401611ae5565b505061018092837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c3601126101855761170f91611ccb565b916101643592836080820180518211611948575b50506040516117e5816117d760208201948591909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101835282611b68565b51902090604051602081019460e43573ffffffffffffffffffffffffffffffffffffffff90818116809103610185578752610104358181168091036101855760408401526101243590811680910361018557606083015261014435608083015260a08201526101843563ffffffff81168091036101855760c08201526101a492833560e08301526101c49081356101008401526101e49687356101208501526102049485358015158091036101855761014086015261022435610160860152610244358186015284526101a0840196871184881017610523578660405283519020036118cd57005b608495602f7f566572696679206f7264657220646f6573206e6f74206d6174636820776974689260207f206578697374696e67206f726465720000000000000000000000000000000000977f8d8a6110000000000000000000000000000000000000000000000000000000008a528601528401528201520152fd5b528385611723565b3461018557602060031936011261018557600435907fffffffff000000000000000000000000000000000000000000000000000000008216809203610185577f62af8dc2000000000000000000000000000000000000000000000000000000008214611a7757817f14a2a7840000000000000000000000000000000000000000000000000000000060209314908115611a4d575b8115611a23575b81156119f9575b5015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836119f2565b7f1626ba7e00000000000000000000000000000000000000000000000000000000811491506119eb565b7fb8296fc400000000000000000000000000000000000000000000000000000000811491506119e4565b7f32798566000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361018557565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361018557565b9181601f840112156101855782359167ffffffffffffffff8311610185576020838186019501011161018557565b610180810190811067ffffffffffffffff82111761052357604052565b6060810190811067ffffffffffffffff82111761052357604052565b6080810190811067ffffffffffffffff82111761052357604052565b90601f601f19910116810190811067ffffffffffffffff82111761052357604052565b67ffffffffffffffff811161052357601f01601f191660200190565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b519073ffffffffffffffffffffffffffffffffffffffff8216820361018557565b81601f8201121561018557805190611c0482611b8b565b92611c126040519485611b68565b8284526020838301011161018557815f9260208093018386015e8301015290565b9060606040611c709373ffffffffffffffffffffffffffffffffffffffff8151168452602081015160208501520151918160408201520190611ba7565b90565b60405190611c8082611b13565b5f610160838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b9081602091611cd8611c73565b5081010312610185573573ffffffffffffffffffffffffffffffffffffffff811680910361018557611c7090611ebd565b6060917f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a936040918251916020808401937f095ea7b3000000000000000000000000000000000000000000000000000000009081865273ffffffffffffffffffffffffffffffffffffffff95835f887f0000000000000000000000000000000000000000000000000000000000000000169283602486015281604486015260448552611db485611b4c565b845190828d5af15f513d82611e9f575b505015611e64575b5050508584165f81815260038084528782208281556001810183905560028101839055015585517fa9059cbb000000000000000000000000000000000000000000000000000000008184015273ffffffffffffffffffffffffffffffffffffffff85166024820152604481018490529096611e549190611e4f8260648101611440565b61257d565b84519586528501521690820152a1565b611e9792611e91918951918683015260248201525f604482015260448152611e8b81611b4c565b8961257d565b8761257d565b5f8080611dcc565b909150611eb557508689163b15155b5f80611dc4565b600114611eae565b611ec5611c73565b5073ffffffffffffffffffffffffffffffffffffffff80911690815f52602090600382526040805f206003825192611efc84611b4c565b848354168452846001840154169486850195865260028401549382860194855263ffffffff9384910154169460608101958087521561206e5781905116955116918151937f70a0823100000000000000000000000000000000000000000000000000000000855230600486015287856024818c5afa948515612064575f95612035575b5051945116947f000000000000000000000000000000000000000000000000000000000000000096825198611fb38a611b13565b89528801528601526060850152608084015260a08301527f000000000000000000000000000000000000000000000000000000000000000060c08301525f60e08301527f000000000000000000000000000000000000000000000000000000000000000061010083015260016101208301528061014083015261016082015290565b9094508781813d831161205d575b61204d8183611b68565b810103126101855751935f611f7f565b503d612043565b83513d5f823e3d90fd5b6064888451907fc8fc27250000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4f7264657220646f6573206e6f742065786973740000000000000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff5f54163303610b7457565b156120f257565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d696e20616d6f756e74206f7574206973207a65726f000000000000000000006044820152fd5b421161215857565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f446561646c696e6520697320696e2074686520706173740000000000000000006044820152fd5b6040519160205f818501612219866114dd7f095ea7b300000000000000000000000000000000000000000000000000000000998a855287602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b85519082865af15f513d82612285575b505015612237575b50505050565b61227c9373ffffffffffffffffffffffffffffffffffffffff611e4f926040519260208401521660248201525f60448201526044815261227681611b4c565b8261257d565b5f808080612231565b9091506122af575073ffffffffffffffffffffffffffffffffffffffff82163b15155b5f80612229565b6001146122a8565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691604091825191166020820152602081528181019267ffffffffffffffff91808510838611176105235784845261232585611b30565b3085525f60608201526080810152803b156101855761237d5f9491859285519687809481937f6bfae1ca0000000000000000000000000000000000000000000000000000000083528960048401526044830190611c33565b6001602483015203925af180156123a05761239757505050565b82116105235752565b82513d5f823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff1690815f52600360205263ffffffff600360405f200154168015612475576020602493604051948580927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa928315610848575f93612441575b508261242f575060029190565b421161243b5760019190565b60039190565b9092506020813d60201161246d575b8161245d60209383611b68565b810103126101855751915f612422565b3d9150612450565b505f91508190565b73ffffffffffffffffffffffffffffffffffffffff909291921691825f52600360205263ffffffff600360405f20015416908115612573576020602494604051958680927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa938415610848575f9461253f575b5080840393808511612512570361242f575060029190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9093506020813d60201161256b575b8161255b60209383611b68565b810103126101855751925f6124fa565b3d915061254e565b505090505f905f90565b905f602091828151910182855af115610848575f513d6125fb575073ffffffffffffffffffffffffffffffffffffffff81163b155b6125b95750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b600114156125b256fea2646970667358221220bb788be1190a2f5816caa3342d23eb0fcb57bf52424d3d75a53808fcc8e303f864736f6c634300081b0033","opcodes":"PUSH2 0x140 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x364 JUMPI PUSH2 0x29DC DUP1 CODESIZE SUB DUP1 PUSH2 0x1A DUP2 PUSH2 0x368 JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD SWAP1 PUSH1 0xC0 DUP2 DUP4 SUB SLT PUSH2 0x364 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP2 SWAP1 DUP3 DUP3 SUB PUSH2 0x364 JUMPI PUSH1 0x20 SWAP4 DUP5 DUP3 ADD MLOAD SWAP4 DUP2 DUP6 AND DUP6 SUB PUSH2 0x364 JUMPI PUSH2 0x5E PUSH1 0x40 DUP5 ADD PUSH2 0x38D JUMP JUMPDEST SWAP7 PUSH1 0x60 DUP5 ADD MLOAD SWAP7 PUSH2 0x71 PUSH1 0x80 DUP7 ADD PUSH2 0x38D JUMP JUMPDEST SWAP6 PUSH1 0xA0 DUP7 ADD MLOAD PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB SWAP7 DUP8 DUP3 GT PUSH2 0x364 JUMPI ADD SWAP4 PUSH1 0x1F SWAP5 DUP5 DUP7 DUP3 ADD SLT ISZERO PUSH2 0x364 JUMPI DUP1 MLOAD SWAP9 DUP9 DUP11 GT PUSH2 0x32E JUMPI PUSH1 0x1F NOT SWAP10 PUSH2 0xB2 DUP9 DUP3 ADD DUP13 AND DUP8 ADD PUSH2 0x368 JUMP JUMPDEST SWAP7 DUP2 DUP9 MSTORE DUP7 DUP3 DUP6 ADD ADD GT PUSH2 0x364 JUMPI DUP6 DUP2 PUSH0 SWAP3 DUP3 DUP13 SWAP7 ADD DUP4 DUP12 ADD MCOPY DUP9 ADD ADD MSTORE AND DUP1 ISZERO PUSH2 0x351 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP3 SSTORE PUSH0 DUP1 SLOAD SWAP2 DUP3 AND DUP5 OR DUP2 SSTORE SWAP2 SWAP9 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP1 LOG3 ISZERO PUSH2 0x342 JUMPI PUSH1 0x80 MSTORE DUP2 MLOAD SWAP5 DUP6 GT PUSH2 0x32E JUMPI PUSH1 0x2 SLOAD DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x324 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x310 JUMPI DUP4 DUP2 GT PUSH2 0x2CC JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x26A JUMPI POP DUP4 SWAP5 POP SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP5 PUSH2 0x25F JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x2 SSTORE JUMPDEST PUSH32 0xF3B277728B3FEE749481EB3E0B3B48980DBBAB78658FC419025CB16EEE346775 PUSH1 0xA0 MSTORE PUSH32 0x5A28E9363BB942B639270062AA6BB295F434BCDFC42C97267BF003F272060DC9 PUSH1 0xC0 MSTORE PUSH1 0xE0 MSTORE PUSH2 0x100 SWAP2 DUP3 MSTORE PUSH2 0x120 SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH2 0x263A SWAP3 DUP4 PUSH2 0x3A2 DUP5 CODECOPY PUSH1 0x80 MLOAD DUP4 DUP2 DUP2 PUSH2 0x21E ADD MSTORE DUP2 DUP2 PUSH2 0x664 ADD MSTORE DUP2 DUP2 PUSH2 0xCEF ADD MSTORE DUP2 DUP2 PUSH2 0xE5F ADD MSTORE PUSH2 0x10AA ADD MSTORE PUSH1 0xA0 MLOAD DUP4 PUSH2 0x1FF8 ADD MSTORE PUSH1 0xC0 MLOAD DUP4 PUSH2 0x1F87 ADD MSTORE PUSH1 0xE0 MLOAD DUP4 DUP2 DUP2 PUSH2 0xA59 ADD MSTORE DUP2 DUP2 PUSH2 0x135B ADD MSTORE DUP2 DUP2 PUSH2 0x1561 ADD MSTORE PUSH2 0x22CF ADD MSTORE MLOAD DUP3 DUP2 DUP2 PUSH2 0x3D8 ADD MSTORE DUP2 DUP2 PUSH2 0x71B ADD MSTORE DUP2 DUP2 PUSH2 0xA09 ADD MSTORE PUSH2 0x1D7A ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0xAC6 ADD MSTORE PUSH2 0x1FCC ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x167 JUMP JUMPDEST SWAP3 SWAP5 DUP5 SWAP1 DUP2 AND PUSH1 0x2 PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x2B2 JUMPI POP POP POP LT PUSH2 0x29A JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x2 SSTORE PUSH2 0x179 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x28C JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x27B JUMP JUMPDEST PUSH1 0x2 PUSH0 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x307 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP6 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x2FC JUMPI POP POP PUSH2 0x14C JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x2EE JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x2E5 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x13C JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x932C92A5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x32E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x364 JUMPI JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x1950 JUMPI POP DUP1 PUSH4 0x14A2A784 EQ PUSH2 0x1678 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0x10CE JUMPI DUP1 PUSH4 0x178AC96E EQ PUSH2 0x107E JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0xF3E JUMPI DUP1 PUSH4 0x60E092C6 EQ PUSH2 0xDFA JUMPI DUP1 PUSH4 0x68BCE712 EQ PUSH2 0xC87 JUMPI DUP1 PUSH4 0x6EBA2B13 EQ PUSH2 0xC5A JUMPI DUP1 PUSH4 0x6F9D75CD EQ PUSH2 0xC25 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xBA0 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xAE9 JUMPI DUP1 PUSH4 0x8AEBD348 EQ PUSH2 0xAAF JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xA7D JUMPI DUP1 PUSH4 0x93504C52 EQ PUSH2 0xA2D JUMPI DUP1 PUSH4 0x9B552CC2 EQ PUSH2 0x9DD JUMPI DUP1 PUSH4 0xB8296FC4 EQ PUSH2 0x8C3 JUMPI DUP1 PUSH4 0xD83B06A4 EQ PUSH2 0x5FE JUMPI DUP1 PUSH4 0xDE557A32 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x189 JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0xF8 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x111 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0x119 PUSH2 0x20CB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x1D5 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0x1DD PUSH2 0x1AC2 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP4 AND DUP1 SWAP4 SUB PUSH2 0x185 JUMPI PUSH1 0x84 CALLDATALOAD SWAP4 PUSH1 0xA4 CALLDATALOAD DUP7 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0xC4 CALLDATALOAD SWAP6 DUP8 PUSH32 0x0 AND CALLER SUB PUSH2 0x5D6 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SWAP7 DUP8 TLOAD PUSH2 0x5AE JUMPI PUSH1 0x1 DUP9 TSTORE DUP6 DUP10 AND SWAP6 DUP8 DUP8 SUB PUSH2 0x2FF JUMPI PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616E642074617267657420746F6B656E206172652074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x68652073616D6500000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST DUP6 ISZERO PUSH2 0x550 JUMPI PUSH2 0x30E DUP4 PUSH2 0x20EB JUMP JUMPDEST PUSH2 0x317 DUP3 PUSH2 0x2150 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE DUP7 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE PUSH1 0xA0 DUP2 ADD SWAP1 DUP1 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x523 JUMPI PUSH2 0x37B SWAP2 PUSH1 0x40 MSTORE DUP3 PUSH2 0x257D JUMP JUMPDEST PUSH2 0x385 DUP7 DUP3 PUSH2 0x247D JUMP JUMPDEST POP PUSH1 0x4 DUP2 LT ISZERO DUP1 PUSH2 0x4E9 JUMPI DUP2 ISZERO ISZERO DUP1 PUSH2 0x516 JUMPI JUMPDEST PUSH2 0x4BA JUMPI POP POP SWAP3 PUSH0 SWAP10 SWAP3 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP6 SWAP3 PUSH2 0x3FD DUP9 DUP8 PUSH2 0x3D6 PUSH1 0x60 SWAP10 PUSH2 0x22B7 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0x21B6 JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 MLOAD PUSH2 0x410 DUP2 PUSH2 0x1B4C JUMP JUMPDEST DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 DUP2 MSTORE PUSH1 0x40 DUP3 ADD SWAP1 DUP7 DUP3 MSTORE DUP5 DUP12 DUP5 ADD SWAP7 AND DUP7 MSTORE PUSH0 DUP15 SWAP1 MSTORE DUP4 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP12 SWAP2 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 SLOAD AND OR DUP5 SSTORE DUP11 PUSH1 0x1 DUP6 ADD SWAP3 MLOAD AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE MLOAD PUSH1 0x2 DUP3 ADD SSTORE ADD SWAP2 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x40 DUP7 ADD MSTORE AND SWAP3 LOG4 TSTORE STOP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH2 0x4E9 JUMPI PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP PUSH0 PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x399 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616D6F756E74206973207A65726F0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x617 PUSH2 0x1A9F JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0x88B JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0x87E JUMPI JUMPDEST PUSH2 0x5D6 JUMPI PUSH2 0x6AD DUP6 PUSH2 0x23AA JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x3 DUP2 SUB PUSH2 0x853 JUMPI POP PUSH2 0x6CA DUP4 PUSH2 0x20EB JUMP JUMPDEST PUSH2 0x6D3 DUP5 PUSH2 0x2150 JUMP JUMPDEST DUP5 DUP7 AND SWAP5 DUP6 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH1 0x2 DUP3 ADD SSTORE ADD PUSH4 0xFFFFFFFF DUP7 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0x0 SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x44 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP2 PUSH2 0x7EA JUMPI JUMPDEST POP PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A SWAP8 DUP5 SWAP4 SWAP3 DUP5 PUSH1 0x80 SWAP10 SWAP9 SWAP8 SWAP7 PUSH2 0x7C3 SWAP5 LT PUSH2 0x7D9 JUMPI JUMPDEST POP POP PUSH2 0x22B7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE LOG1 STOP JUMPDEST PUSH2 0x7E3 SWAP2 DUP4 PUSH2 0x21B6 JUMP JUMPDEST DUP10 DUP5 PUSH2 0x7BC JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 SWAP4 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 RETURNDATASIZE DUP4 GT PUSH2 0x841 JUMPI JUMPDEST PUSH2 0x807 DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP5 SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A PUSH2 0x785 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x7FD JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0x6A0 JUMP JUMPDEST DUP1 SWAP3 POP DUP4 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x8BC JUMPI JUMPDEST PUSH2 0x8A4 DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0x8B6 DUP6 SWAP2 PUSH2 0x1BCC JUMP JUMPDEST DUP8 PUSH2 0x695 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x89A JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x8DC PUSH2 0x1A9F JUMP JUMPDEST POP PUSH2 0x8E5 PUSH2 0x1AC2 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x185 JUMPI PUSH2 0x907 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST PUSH1 0x84 SWAP3 SWAP2 SWAP3 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x185 JUMPI PUSH2 0x9D9 SWAP3 PUSH2 0x929 PUSH2 0x930 SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST POP POP PUSH2 0x1CCB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0xB74 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xBB8 PUSH2 0x20CB JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xC46 PUSH2 0xC41 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0x23AA JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x20 SWAP2 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x9D9 PUSH2 0x930 PUSH2 0xC79 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0xC81 PUSH2 0x1C73 JUMP JUMPDEST POP PUSH2 0x1EBD JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xCA0 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0xCA8 PUSH2 0x1AC2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 PUSH1 0x20 SWAP3 SWAP2 DUP4 DUP2 PUSH1 0x4 DUP2 PUSH32 0x0 DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0xDC2 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0xDB5 JUMPI JUMPDEST PUSH2 0x5D6 JUMPI DUP3 PUSH1 0x24 SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP4 PUSH2 0xD83 JUMPI JUMPDEST POP PUSH2 0xD81 SWAP4 POP PUSH2 0x1D09 JUMP JUMPDEST STOP JUMPDEST SWAP1 SWAP3 POP DUP4 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xDAE JUMPI JUMPDEST PUSH2 0xD9A DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0xD81 SWAP3 MLOAD SWAP2 DUP5 PUSH2 0xD76 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xD90 JUMP JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0xD2C JUMP JUMPDEST DUP1 SWAP3 POP DUP6 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xDF3 JUMPI JUMPDEST PUSH2 0xDDB DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0xDED DUP6 SWAP2 PUSH2 0x1BCC JUMP JUMPDEST DUP7 PUSH2 0xD21 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xDD1 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xE13 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0xE1B PUSH2 0x1AC2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0xF02 JUMPI JUMPDEST POP AND CALLER EQ ISZERO SWAP1 DUP2 PUSH2 0xEF4 JUMPI JUMPDEST POP PUSH2 0x5D6 JUMPI PUSH2 0xEAA DUP3 PUSH2 0x23AA JUMP JUMPDEST SWAP2 SWAP1 SWAP3 PUSH1 0x4 DUP5 LT ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x3 DUP5 SUB PUSH2 0xEC8 JUMPI PUSH2 0xD81 SWAP4 POP PUSH2 0x1D09 JUMP JUMPDEST DUP4 PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH0 SLOAD AND CALLER EQ ISZERO DUP4 PUSH2 0xE9C JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF36 JUMPI JUMPDEST DUP2 PUSH2 0xF1E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0xF30 DUP3 SWAP2 PUSH2 0x1BCC JUMP JUMPDEST DUP6 PUSH2 0xE90 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF11 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH1 0x2 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x1074 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x1047 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x1009 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xFAE JUMPI JUMPDEST POP PUSH2 0xF9A SWAP3 POP SUB DUP4 PUSH2 0x1B68 JUMP JUMPDEST PUSH2 0x9D9 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x2 PUSH0 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0xFF1 JUMPI POP POP PUSH2 0xF9A SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0xF8D JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0xFDA JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0xF9A SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0xF8D SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0xF69 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT PUSH2 0x185 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x185 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x110C DUP4 PUSH2 0x1B8B JUMP JUMPDEST SWAP3 PUSH2 0x111A PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1B68 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP2 CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0x185 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH1 0x20 SWAP4 ADD DUP6 CALLDATACOPY DUP6 ADD ADD MSTORE DUP3 MLOAD DUP4 ADD SWAP2 PUSH1 0x20 DUP4 ADD SWAP4 DUP1 DUP5 SUB PUSH2 0x1A0 SWAP1 DUP2 DUP2 SLT PUSH2 0x185 JUMPI PUSH2 0x180 DUP1 SWAP2 SLT PUSH2 0x185 JUMPI PUSH2 0x1174 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x116F DUP8 PUSH2 0x1B13 JUMP JUMPDEST PUSH2 0x1BCC JUMP JUMPDEST DUP6 MSTORE PUSH2 0x1182 PUSH1 0x40 DUP5 ADD PUSH2 0x1BCC JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x1193 PUSH1 0x60 DUP5 ADD PUSH2 0x1BCC JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x185 JUMPI PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP5 ADD MLOAD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x120 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH2 0x140 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x185 JUMPI DUP8 ADD MSTORE PUSH2 0x160 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x185 JUMPI ADD SWAP4 PUSH1 0x60 DUP6 DUP6 SUB SLT PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH2 0x1232 DUP7 PUSH2 0x1B30 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x185 JUMPI DUP2 ADD DUP3 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x185 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x523 JUMPI DUP2 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP3 PUSH2 0x126D PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1B68 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD SWAP2 DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x185 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1668 JUMPI POP POP POP DUP7 MSTORE PUSH1 0x40 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x185 JUMPI PUSH1 0x60 SWAP1 DUP3 ADD DUP1 SWAP7 SUB SLT PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD PUSH2 0x12B7 DUP2 PUSH2 0x1B30 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP2 AND DUP2 SUB PUSH2 0x185 JUMPI DUP3 MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD DUP6 DUP2 GT PUSH2 0x185 JUMPI PUSH1 0x20 DUP6 SWAP2 PUSH2 0x1303 SWAP4 ADD ADD PUSH2 0x1BED JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP3 DUP4 GT PUSH2 0x185 JUMPI PUSH2 0x1326 SWAP3 ADD PUSH1 0x20 ADD PUSH2 0x1BED JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF698DA2500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP3 PUSH2 0x1632 JUMPI JUMPDEST POP SWAP1 PUSH2 0x144E PUSH2 0x1440 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x1B68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 PUSH1 0x20 DUP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP2 MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP6 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0xC0 DUP6 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1619 JUMPI DUP6 PUSH1 0x20 PUSH2 0x154B DUP12 DUP12 DUP12 PUSH2 0x14EB DUP7 PUSH2 0x14DD DUP14 DUP14 PUSH1 0x40 PUSH2 0x14CB DUP12 DUP5 ADD MLOAD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 SWAP4 DUP5 DUP9 DUP4 SUB ADD PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x1C33 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1BA7 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP9 MSTORE DUP8 PUSH2 0x1B68 JUMP JUMPDEST PUSH2 0x155D PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP5 PUSH32 0x53F00B1400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE ADDRESS PUSH1 0x4 DUP8 ADD MSTORE CALLER PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0x44 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD MSTORE PUSH0 PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0xE0 PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xE4 DUP6 ADD SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0xC4 DUP6 ADD MSTORE PUSH2 0x1BA7 JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP1 PUSH2 0x15BD JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1611 JUMPI JUMPDEST DUP2 PUSH2 0x15D7 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x185 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1590 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x15CA JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP10 SWAP6 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1477 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1660 JUMPI JUMPDEST DUP2 PUSH2 0x164D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI SWAP1 MLOAD SWAP1 PUSH2 0x144E PUSH2 0x138B JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1640 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1286 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH2 0x260 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x1692 PUSH2 0x1A9F JUMP JUMPDEST POP PUSH2 0x169B PUSH2 0x1AC2 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x185 JUMPI PUSH2 0x16BD SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x185 JUMPI PUSH2 0x16D7 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST POP POP PUSH2 0x180 SWAP3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x170F SWAP2 PUSH2 0x1CCB JUMP JUMPDEST SWAP2 PUSH2 0x164 CALLDATALOAD SWAP3 DUP4 PUSH1 0x80 DUP3 ADD DUP1 MLOAD DUP3 GT PUSH2 0x1948 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH2 0x17E5 DUP2 PUSH2 0x17D7 PUSH1 0x20 DUP3 ADD SWAP5 DUP6 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1B68 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 PUSH1 0xE4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI DUP8 MSTORE PUSH2 0x104 CALLDATALOAD DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x124 CALLDATALOAD SWAP1 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x184 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1A4 SWAP3 DUP4 CALLDATALOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x1C4 SWAP1 DUP2 CALLDATALOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x1E4 SWAP7 DUP8 CALLDATALOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x204 SWAP5 DUP6 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x224 CALLDATALOAD PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x244 CALLDATALOAD DUP2 DUP7 ADD MSTORE DUP5 MSTORE PUSH2 0x1A0 DUP5 ADD SWAP7 DUP8 GT DUP5 DUP9 LT OR PUSH2 0x523 JUMPI DUP7 PUSH1 0x40 MSTORE DUP4 MLOAD SWAP1 KECCAK256 SUB PUSH2 0x18CD JUMPI STOP JUMPDEST PUSH1 0x84 SWAP6 PUSH1 0x2F PUSH32 0x566572696679206F7264657220646F6573206E6F74206D617463682077697468 SWAP3 PUSH1 0x20 PUSH32 0x206578697374696E67206F726465720000000000000000000000000000000000 SWAP8 PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP7 ADD MSTORE DUP5 ADD MSTORE DUP3 ADD MSTORE ADD MSTORE REVERT JUMPDEST MSTORE DUP4 DUP6 PUSH2 0x1723 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x185 JUMPI PUSH32 0x62AF8DC200000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x1A77 JUMPI DUP2 PUSH32 0x14A2A78400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x1A4D JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1A23 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x19F9 JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x19F2 JUMP JUMPDEST PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x19EB JUMP JUMPDEST PUSH32 0xB8296FC400000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x19E4 JUMP JUMPDEST PUSH32 0x3279856600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x185 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x185 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x185 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x185 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x185 JUMPI JUMP JUMPDEST PUSH2 0x180 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x523 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x185 JUMPI JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x185 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1C04 DUP3 PUSH2 0x1B8B JUMP JUMPDEST SWAP3 PUSH2 0x1C12 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1B68 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x185 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x60 PUSH1 0x40 PUSH2 0x1C70 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP6 ADD MSTORE ADD MLOAD SWAP2 DUP2 PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1C80 DUP3 PUSH2 0x1B13 JUMP JUMPDEST PUSH0 PUSH2 0x160 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE DUP3 PUSH2 0x140 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 PUSH2 0x1CD8 PUSH2 0x1C73 JUMP JUMPDEST POP DUP2 ADD SUB SLT PUSH2 0x185 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH2 0x1C70 SWAP1 PUSH2 0x1EBD JUMP JUMPDEST PUSH1 0x60 SWAP2 PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP4 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 PUSH1 0x20 DUP1 DUP5 ADD SWAP4 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP7 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP4 PUSH0 DUP9 PUSH32 0x0 AND SWAP3 DUP4 PUSH1 0x24 DUP7 ADD MSTORE DUP2 PUSH1 0x44 DUP7 ADD MSTORE PUSH1 0x44 DUP6 MSTORE PUSH2 0x1DB4 DUP6 PUSH2 0x1B4C JUMP JUMPDEST DUP5 MLOAD SWAP1 DUP3 DUP14 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x1E9F JUMPI JUMPDEST POP POP ISZERO PUSH2 0x1E64 JUMPI JUMPDEST POP POP POP DUP6 DUP5 AND PUSH0 DUP2 DUP2 MSTORE PUSH1 0x3 DUP1 DUP5 MSTORE DUP8 DUP3 KECCAK256 DUP3 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP4 SWAP1 SSTORE ADD SSTORE DUP6 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 SWAP7 PUSH2 0x1E54 SWAP2 SWAP1 PUSH2 0x1E4F DUP3 PUSH1 0x64 DUP2 ADD PUSH2 0x1440 JUMP JUMPDEST PUSH2 0x257D JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 MSTORE DUP6 ADD MSTORE AND SWAP1 DUP3 ADD MSTORE LOG1 JUMP JUMPDEST PUSH2 0x1E97 SWAP3 PUSH2 0x1E91 SWAP2 DUP10 MLOAD SWAP2 DUP7 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x1E8B DUP2 PUSH2 0x1B4C JUMP JUMPDEST DUP10 PUSH2 0x257D JUMP JUMPDEST DUP8 PUSH2 0x257D JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x1DCC JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x1EB5 JUMPI POP DUP7 DUP10 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x1DC4 JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x1EAE JUMP JUMPDEST PUSH2 0x1EC5 PUSH2 0x1C73 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH1 0x3 DUP3 MLOAD SWAP3 PUSH2 0x1EFC DUP5 PUSH2 0x1B4C JUMP JUMPDEST DUP5 DUP4 SLOAD AND DUP5 MSTORE DUP5 PUSH1 0x1 DUP5 ADD SLOAD AND SWAP5 DUP7 DUP6 ADD SWAP6 DUP7 MSTORE PUSH1 0x2 DUP5 ADD SLOAD SWAP4 DUP3 DUP7 ADD SWAP5 DUP6 MSTORE PUSH4 0xFFFFFFFF SWAP4 DUP5 SWAP2 ADD SLOAD AND SWAP5 PUSH1 0x60 DUP2 ADD SWAP6 DUP1 DUP8 MSTORE ISZERO PUSH2 0x206E JUMPI DUP2 SWAP1 MLOAD AND SWAP6 MLOAD AND SWAP2 DUP2 MLOAD SWAP4 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS PUSH1 0x4 DUP7 ADD MSTORE DUP8 DUP6 PUSH1 0x24 DUP2 DUP13 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x2064 JUMPI PUSH0 SWAP6 PUSH2 0x2035 JUMPI JUMPDEST POP MLOAD SWAP5 MLOAD AND SWAP5 PUSH32 0x0 SWAP7 DUP3 MLOAD SWAP9 PUSH2 0x1FB3 DUP11 PUSH2 0x1B13 JUMP JUMPDEST DUP10 MSTORE DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH32 0x0 PUSH1 0xC0 DUP4 ADD MSTORE PUSH0 PUSH1 0xE0 DUP4 ADD MSTORE PUSH32 0x0 PUSH2 0x100 DUP4 ADD MSTORE PUSH1 0x1 PUSH2 0x120 DUP4 ADD MSTORE DUP1 PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x205D JUMPI JUMPDEST PUSH2 0x204D DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x1F7F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2043 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP9 DUP5 MLOAD SWAP1 PUSH32 0xC8FC272500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7264657220646F6573206E6F74206578697374000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0xB74 JUMPI JUMP JUMPDEST ISZERO PUSH2 0x20F2 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D696E20616D6F756E74206F7574206973207A65726F00000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST TIMESTAMP GT PUSH2 0x2158 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446561646C696E6520697320696E207468652070617374000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 PUSH0 DUP2 DUP6 ADD PUSH2 0x2219 DUP7 PUSH2 0x14DD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP10 DUP11 DUP6 MSTORE DUP8 PUSH1 0x24 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST DUP6 MLOAD SWAP1 DUP3 DUP7 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x2285 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x2237 JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x227C SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1E4F SWAP3 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x2276 DUP2 PUSH2 0x1B4C JUMP JUMPDEST DUP3 PUSH2 0x257D JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 PUSH2 0x2231 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x22AF JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x2229 JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x22A8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP2 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE DUP2 DUP2 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP1 DUP6 LT DUP4 DUP7 GT OR PUSH2 0x523 JUMPI DUP5 DUP5 MSTORE PUSH2 0x2325 DUP6 PUSH2 0x1B30 JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD MSTORE DUP1 EXTCODESIZE ISZERO PUSH2 0x185 JUMPI PUSH2 0x237D PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x6BFAE1CA00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x1C33 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x23A0 JUMPI PUSH2 0x2397 JUMPI POP POP POP JUMP JUMPDEST DUP3 GT PUSH2 0x523 JUMPI MSTORE JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND DUP1 ISZERO PUSH2 0x2475 JUMPI PUSH1 0x20 PUSH1 0x24 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP4 PUSH2 0x2441 JUMPI JUMPDEST POP DUP3 PUSH2 0x242F JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x243B JUMPI PUSH1 0x1 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x246D JUMPI JUMPDEST DUP2 PUSH2 0x245D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x2422 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2450 JUMP JUMPDEST POP PUSH0 SWAP2 POP DUP2 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 SWAP2 SWAP3 AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND SWAP1 DUP2 ISZERO PUSH2 0x2573 JUMPI PUSH1 0x20 PUSH1 0x24 SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP5 PUSH2 0x253F JUMPI JUMPDEST POP DUP1 DUP5 SUB SWAP4 DUP1 DUP6 GT PUSH2 0x2512 JUMPI SUB PUSH2 0x242F JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP4 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x256B JUMPI JUMPDEST DUP2 PUSH2 0x255B PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP3 PUSH0 PUSH2 0x24FA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x254E JUMP JUMPDEST POP POP SWAP1 POP PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 PUSH1 0x20 SWAP2 DUP3 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL ISZERO PUSH2 0x848 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x25FB JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x25B9 JUMPI POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x25B2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBB PUSH25 0x8BE1190A2F5816CAA3342D23EB0FCB57BF52424D3D75A53808 0xFC 0xC8 0xE3 SUB 0xF8 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1814:11638:76:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1814:11638:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;1273:26:49;;1269:95;;1814:11638:76;;;-1:-1:-1;;;;;;1814:11638:76;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;3052:40:49;;-1:-1:-1;3052:40:49;1203:42:78;1199:107;;1814:11638:76;1316:40:78;1814:11638:76;;;;;;;1156:21:38;1814:11638:76;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;;;1156:21:38;1814:11638:76;;2215:17;1814:11638;2215:17;2281:18;1814:11638;2281:18;2893:30;;2933:31;;;;2974:18;;;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2893:30;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;1156:21:38;-1:-1:-1;1814:11638:76;;-1:-1:-1;1814:11638:76;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;;;;;;;1156:21:38;1814:11638:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;1156:21:38;-1:-1:-1;1814:11638:76;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;-1:-1:-1;1814:11638:76;1199:107:78;1268:27;;;-1:-1:-1;1268:27:78;;-1:-1:-1;1268:27:78;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;1814:11638:76;;-1:-1:-1;1322:31:49;1814:11638:76;-1:-1:-1;1814:11638:76;;;;;;;;;-1:-1:-1;;1814:11638:76;;;-1:-1:-1;;;;;1814:11638:76;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1814:11638:76;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":6815,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_20932":{"entryPoint":6850,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":6885,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_fromMemory":{"entryPoint":7149,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC20_fromMemory":{"entryPoint":7116,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_string":{"entryPoint":7079,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_ConditionalOrderParams":{"entryPoint":7219,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_GPv2Order":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_and_zero_memory_struct_struct_GPv2Order":{"entryPoint":7283,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":7051,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":7016,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_20936":{"entryPoint":6931,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_20937":{"entryPoint":6960,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_20956":{"entryPoint":6988,"id":null,"parameterSlots":1,"returnSlots":0},"fun_callOptionalReturn":{"entryPoint":9597,"id":11024,"parameterSlots":2,"returnSlots":0},"fun_cancelOrder":{"entryPoint":7433,"id":18969,"parameterSlots":3,"returnSlots":0},"fun_checkDeadline":{"entryPoint":8528,"id":19482,"parameterSlots":1,"returnSlots":0},"fun_checkMinAmountOut":{"entryPoint":8427,"id":19497,"parameterSlots":1,"returnSlots":0},"fun_checkOwner":{"entryPoint":8395,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_createCowOrder":{"entryPoint":8887,"id":19527,"parameterSlots":1,"returnSlots":0},"fun_forceApprove":{"entryPoint":8630,"id":10850,"parameterSlots":3,"returnSlots":0},"fun_getOrder":{"entryPoint":7869,"id":19375,"parameterSlots":1,"returnSlots":1},"fun_getOrderStatusAndBalance":{"entryPoint":9341,"id":19466,"parameterSlots":2,"returnSlots":2},"fun_getOrderStatusAndBalance_20941":{"entryPoint":9130,"id":19466,"parameterSlots":1,"returnSlots":2},"fun_getTradeableOrder":{"entryPoint":7371,"id":19160,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"18695":[{"length":32,"start":8184}],"18700":[{"length":32,"start":8071}],"18703":[{"length":32,"start":2649},{"length":32,"start":4955},{"length":32,"start":5473},{"length":32,"start":8911}],"18705":[{"length":32,"start":984},{"length":32,"start":1819},{"length":32,"start":2569},{"length":32,"start":7546}],"18707":[{"length":32,"start":2758},{"length":32,"start":8140}],"19771":[{"length":32,"start":542},{"length":32,"start":1636},{"length":32,"start":3311},{"length":32,"start":3679},{"length":32,"start":4266}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a7146119505750806314a2a784146116785780631626ba7e146110ce578063178ac96e1461107e57806354fd4d5014610f3e57806360e092c614610dfa57806368bce71214610c875780636eba2b1314610c5a5780636f9d75cd14610c25578063715018a614610ba057806379ba509714610ae95780638aebd34814610aaf5780638da5cb5b14610a7d57806393504c5214610a2d5780639b552cc2146109dd578063b8296fc4146108c3578063d83b06a4146105fe578063de557a32146101bc578063e30c3978146101895763f2fde38b146100f8575f80fd5b3461018557602060031936011261018557610111611a9f565b6101196120cb565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b34610185575f60031936011261018557602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346101855760e0600319360112610185576101d5611a9f565b6101dd611ac2565b90604435916064359073ffffffffffffffffffffffffffffffffffffffff93848316809303610185576084359360a4358681168091036101855760c43595877f00000000000000000000000000000000000000000000000000000000000000001633036105d6577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0096875c6105ae576001885d858916958787036102ff5760846040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f46656520746f6b656e20616e642074617267657420746f6b656e20617265207460448201527f68652073616d65000000000000000000000000000000000000000000000000006064820152fd5b85156105505761030e836120eb565b61031782612150565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523060448201528660648201526064815260a081019080821067ffffffffffffffff8311176105235761037b916040528261257d565b610385868261247d565b506004811015806104e95781151580610516575b6104ba575050925f99927f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d95926103fd88876103d66060996122b7565b7f0000000000000000000000000000000000000000000000000000000000000000906121b6565b63ffffffff600360405161041081611b4c565b8c8152602081018681526040820190868252848b8401961686525f8e9052836020525f60408b91209351167fffffffffffffffffffffffff000000000000000000000000000000000000000090818554161784558a6001850192511690825416179055516002820155019151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000825416179055604051968752602087015260408601521692a45d005b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f526104e95760045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b50505f6002821415610399565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f46656520746f6b656e20616d6f756e74206973207a65726f00000000000000006044820152fd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461018557606060031936011261018557610617611a9f565b60243560443573ffffffffffffffffffffffffffffffffffffffff916040517f4ccb20c00000000000000000000000000000000000000000000000000000000081526020908181600481887f0000000000000000000000000000000000000000000000000000000000000000165afa80156108485785915f9161088b575b50163314158061087e575b6105d6576106ad856123aa565b919060048110156104e9576003810361085357506106ca836120eb565b6106d384612150565b84861694855f5260038252600360405f208560028201550163ffffffff86167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790557f000000000000000000000000000000000000000000000000000000000000000090604051907fdd62ed3e0000000000000000000000000000000000000000000000000000000082523060048301528216602482015282816044818a5afa908115610848575f916107ea575b507f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a97849392846080999897966107c394106107d9575b50506122b7565b60405194855284015260408301526060820152a1005b6107e391836121b6565b89846107bc565b90508281819398979695943d8311610841575b6108078183611b68565b81010312610185575194959394929391929091907f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a610785565b503d6107fd565b6040513d5f823e3d90fd5b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50835f54163314156106a0565b809250838092503d83116108bc575b6108a48183611b68565b81010312610185576108b68591611bcc565b87610695565b503d61089a565b346101855760a0600319360112610185576108dc611a9f565b506108e5611ac2565b5067ffffffffffffffff60643581811161018557610907903690600401611ae5565b608492919235918211610185576109d992610929610930933690600401611ae5565b5050611ccb565b6040519182918291909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b0390f35b34610185575f60031936011261018557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610185575f60031936011261018557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610185575f60031936011261018557602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610185575f6003193601126101855760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610185575f6003193601126101855760015473ffffffffffffffffffffffffffffffffffffffff3381831603610b74577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b34610185575f60031936011261018557610bb86120cb565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461018557602060031936011261018557610c46610c41611a9f565b6123aa565b5060405160048210156104e9576020918152f35b34610185576020600319360112610185576109d9610930610c79611a9f565b610c81611c73565b50611ebd565b3461018557604060031936011261018557610ca0611a9f565b610ca8611ac2565b6040517f4ccb20c000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff926020929183816004817f000000000000000000000000000000000000000000000000000000000000000089165afa80156108485785915f91610dc2575b501633141580610db5575b6105d65782602494604051958680927f70a0823100000000000000000000000000000000000000000000000000000000825230600483015285165afa928315610848575f93610d83575b50610d819350611d09565b005b90925083813d8311610dae575b610d9a8183611b68565b8101031261018557610d8192519184610d76565b503d610d90565b50835f5416331415610d2c565b809250858092503d8311610df3575b610ddb8183611b68565b8101031261018557610ded8591611bcc565b86610d21565b503d610dd1565b3461018557604060031936011261018557610e13611a9f565b610e1b611ac2565b73ffffffffffffffffffffffffffffffffffffffff6040517f4ccb20c0000000000000000000000000000000000000000000000000000000008152602081600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156108485782915f91610f02575b50163314159081610ef4575b506105d657610eaa826123aa565b91909260048410156104e95760038403610ec857610d819350611d09565b837fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90505f541633141583610e9c565b9150506020813d602011610f36575b81610f1e60209383611b68565b8101031261018557610f308291611bcc565b85610e90565b3d9150610f11565b34610185575f600319360112610185576040515f6002549060018260011c9160018416918215611074575b60209485851084146110475785879486865291825f14611009575050600114610fae575b50610f9a92500383611b68565b6109d9604051928284938452830190611ba7565b84915060025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace905f915b858310610ff1575050610f9a935082010185610f8d565b80548389018501528794508693909201918101610fda565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685820152610f9a95151560051b8501019250879150610f8d9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f1692610f69565b34610185575f60031936011261018557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101855760406003193601126101855760243567ffffffffffffffff80821161018557366023830112156101855781600401359161110c83611b8b565b9261111a6040519485611b68565b8084526020840191366024838301011161018557815f92602460209301853785010152825183019160208301938084036101a09081811261018557610180809112610185576111746040519561116f87611b13565b611bcc565b855261118260408401611bcc565b602086015261119360608401611bcc565b60408601526080830151606086015260a0830151608086015260c083015163ffffffff811681036101855760a086015260e083015160c0860152610100908184015160e08701526101209182850151908701526101409182850151908115158203610185578701526101609182850151908701528301519085015281015190828211610185570193606085850312610185576040519461123286611b30565b602081015183811161018557810182603f8201121561018557602081015190848211610523578160051b6040519261126d6020830185611b68565b8352604060208401918301019185831161018557604001905b828210611668575050508652604081015183811161018557606090820180960312610185576040516112b781611b30565b60208601519573ffffffffffffffffffffffffffffffffffffffff9687811681036101855782526040810151602083015260608101518581116101855760208591611303930101611bed565b604082015260208701526060810151928311610185576113269201602001611bed565b6040840152604051907ff698da25000000000000000000000000000000000000000000000000000000008252602082600481867f0000000000000000000000000000000000000000000000000000000000000000165afa918215610848575f92611632575b509061144e611440926040519384916020830191909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101845283611b68565b604051809460208083015260a08201815190606060408501528151809152602060c085019201905f5b8181106116195785602061154b8b8b8b6114eb866114dd8d8d60406114cb8b840151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09384888303016060890152611c33565b92015190848303016080850152611ba7565b03601f198101885287611b68565b61155d604051968795869485947f53f00b14000000000000000000000000000000000000000000000000000000008652306004870152336024870152600435604487015260648601525f608486015260e060a486015260e4850190611ba7565b906003198483030160c4850152611ba7565b03917f0000000000000000000000000000000000000000000000000000000000000000165afa8015610848575f906115bd575b6020907fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b506020813d602011611611575b816115d760209383611b68565b8101031261018557517fffffffff000000000000000000000000000000000000000000000000000000008116810361018557602090611590565b3d91506115ca565b8251845289955060209384019390920191600101611477565b91506020823d602011611660575b8161164d60209383611b68565b810103126101855790519061144e61138b565b3d9150611640565b8151815260209182019101611286565b346101855761026060031936011261018557611692611a9f565b5061169b611ac2565b5067ffffffffffffffff60a435818111610185576116bd903690600401611ae5565b919060c435828111610185576116d7903690600401611ae5565b505061018092837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c3601126101855761170f91611ccb565b916101643592836080820180518211611948575b50506040516117e5816117d760208201948591909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101835282611b68565b51902090604051602081019460e43573ffffffffffffffffffffffffffffffffffffffff90818116809103610185578752610104358181168091036101855760408401526101243590811680910361018557606083015261014435608083015260a08201526101843563ffffffff81168091036101855760c08201526101a492833560e08301526101c49081356101008401526101e49687356101208501526102049485358015158091036101855761014086015261022435610160860152610244358186015284526101a0840196871184881017610523578660405283519020036118cd57005b608495602f7f566572696679206f7264657220646f6573206e6f74206d6174636820776974689260207f206578697374696e67206f726465720000000000000000000000000000000000977f8d8a6110000000000000000000000000000000000000000000000000000000008a528601528401528201520152fd5b528385611723565b3461018557602060031936011261018557600435907fffffffff000000000000000000000000000000000000000000000000000000008216809203610185577f62af8dc2000000000000000000000000000000000000000000000000000000008214611a7757817f14a2a7840000000000000000000000000000000000000000000000000000000060209314908115611a4d575b8115611a23575b81156119f9575b5015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836119f2565b7f1626ba7e00000000000000000000000000000000000000000000000000000000811491506119eb565b7fb8296fc400000000000000000000000000000000000000000000000000000000811491506119e4565b7f32798566000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361018557565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361018557565b9181601f840112156101855782359167ffffffffffffffff8311610185576020838186019501011161018557565b610180810190811067ffffffffffffffff82111761052357604052565b6060810190811067ffffffffffffffff82111761052357604052565b6080810190811067ffffffffffffffff82111761052357604052565b90601f601f19910116810190811067ffffffffffffffff82111761052357604052565b67ffffffffffffffff811161052357601f01601f191660200190565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b519073ffffffffffffffffffffffffffffffffffffffff8216820361018557565b81601f8201121561018557805190611c0482611b8b565b92611c126040519485611b68565b8284526020838301011161018557815f9260208093018386015e8301015290565b9060606040611c709373ffffffffffffffffffffffffffffffffffffffff8151168452602081015160208501520151918160408201520190611ba7565b90565b60405190611c8082611b13565b5f610160838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b9081602091611cd8611c73565b5081010312610185573573ffffffffffffffffffffffffffffffffffffffff811680910361018557611c7090611ebd565b6060917f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a936040918251916020808401937f095ea7b3000000000000000000000000000000000000000000000000000000009081865273ffffffffffffffffffffffffffffffffffffffff95835f887f0000000000000000000000000000000000000000000000000000000000000000169283602486015281604486015260448552611db485611b4c565b845190828d5af15f513d82611e9f575b505015611e64575b5050508584165f81815260038084528782208281556001810183905560028101839055015585517fa9059cbb000000000000000000000000000000000000000000000000000000008184015273ffffffffffffffffffffffffffffffffffffffff85166024820152604481018490529096611e549190611e4f8260648101611440565b61257d565b84519586528501521690820152a1565b611e9792611e91918951918683015260248201525f604482015260448152611e8b81611b4c565b8961257d565b8761257d565b5f8080611dcc565b909150611eb557508689163b15155b5f80611dc4565b600114611eae565b611ec5611c73565b5073ffffffffffffffffffffffffffffffffffffffff80911690815f52602090600382526040805f206003825192611efc84611b4c565b848354168452846001840154169486850195865260028401549382860194855263ffffffff9384910154169460608101958087521561206e5781905116955116918151937f70a0823100000000000000000000000000000000000000000000000000000000855230600486015287856024818c5afa948515612064575f95612035575b5051945116947f000000000000000000000000000000000000000000000000000000000000000096825198611fb38a611b13565b89528801528601526060850152608084015260a08301527f000000000000000000000000000000000000000000000000000000000000000060c08301525f60e08301527f000000000000000000000000000000000000000000000000000000000000000061010083015260016101208301528061014083015261016082015290565b9094508781813d831161205d575b61204d8183611b68565b810103126101855751935f611f7f565b503d612043565b83513d5f823e3d90fd5b6064888451907fc8fc27250000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4f7264657220646f6573206e6f742065786973740000000000000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff5f54163303610b7457565b156120f257565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d696e20616d6f756e74206f7574206973207a65726f000000000000000000006044820152fd5b421161215857565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f446561646c696e6520697320696e2074686520706173740000000000000000006044820152fd5b6040519160205f818501612219866114dd7f095ea7b300000000000000000000000000000000000000000000000000000000998a855287602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b85519082865af15f513d82612285575b505015612237575b50505050565b61227c9373ffffffffffffffffffffffffffffffffffffffff611e4f926040519260208401521660248201525f60448201526044815261227681611b4c565b8261257d565b5f808080612231565b9091506122af575073ffffffffffffffffffffffffffffffffffffffff82163b15155b5f80612229565b6001146122a8565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691604091825191166020820152602081528181019267ffffffffffffffff91808510838611176105235784845261232585611b30565b3085525f60608201526080810152803b156101855761237d5f9491859285519687809481937f6bfae1ca0000000000000000000000000000000000000000000000000000000083528960048401526044830190611c33565b6001602483015203925af180156123a05761239757505050565b82116105235752565b82513d5f823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff1690815f52600360205263ffffffff600360405f200154168015612475576020602493604051948580927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa928315610848575f93612441575b508261242f575060029190565b421161243b5760019190565b60039190565b9092506020813d60201161246d575b8161245d60209383611b68565b810103126101855751915f612422565b3d9150612450565b505f91508190565b73ffffffffffffffffffffffffffffffffffffffff909291921691825f52600360205263ffffffff600360405f20015416908115612573576020602494604051958680927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa938415610848575f9461253f575b5080840393808511612512570361242f575060029190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9093506020813d60201161256b575b8161255b60209383611b68565b810103126101855751925f6124fa565b3d915061254e565b505090505f905f90565b905f602091828151910182855af115610848575f513d6125fb575073ffffffffffffffffffffffffffffffffffffffff81163b155b6125b95750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b600114156125b256fea2646970667358221220bb788be1190a2f5816caa3342d23eb0fcb57bf52424d3d75a53808fcc8e303f864736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x1950 JUMPI POP DUP1 PUSH4 0x14A2A784 EQ PUSH2 0x1678 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0x10CE JUMPI DUP1 PUSH4 0x178AC96E EQ PUSH2 0x107E JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0xF3E JUMPI DUP1 PUSH4 0x60E092C6 EQ PUSH2 0xDFA JUMPI DUP1 PUSH4 0x68BCE712 EQ PUSH2 0xC87 JUMPI DUP1 PUSH4 0x6EBA2B13 EQ PUSH2 0xC5A JUMPI DUP1 PUSH4 0x6F9D75CD EQ PUSH2 0xC25 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xBA0 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xAE9 JUMPI DUP1 PUSH4 0x8AEBD348 EQ PUSH2 0xAAF JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xA7D JUMPI DUP1 PUSH4 0x93504C52 EQ PUSH2 0xA2D JUMPI DUP1 PUSH4 0x9B552CC2 EQ PUSH2 0x9DD JUMPI DUP1 PUSH4 0xB8296FC4 EQ PUSH2 0x8C3 JUMPI DUP1 PUSH4 0xD83B06A4 EQ PUSH2 0x5FE JUMPI DUP1 PUSH4 0xDE557A32 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x189 JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0xF8 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x111 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0x119 PUSH2 0x20CB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x1D5 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0x1DD PUSH2 0x1AC2 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP4 AND DUP1 SWAP4 SUB PUSH2 0x185 JUMPI PUSH1 0x84 CALLDATALOAD SWAP4 PUSH1 0xA4 CALLDATALOAD DUP7 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0xC4 CALLDATALOAD SWAP6 DUP8 PUSH32 0x0 AND CALLER SUB PUSH2 0x5D6 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SWAP7 DUP8 TLOAD PUSH2 0x5AE JUMPI PUSH1 0x1 DUP9 TSTORE DUP6 DUP10 AND SWAP6 DUP8 DUP8 SUB PUSH2 0x2FF JUMPI PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616E642074617267657420746F6B656E206172652074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x68652073616D6500000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST DUP6 ISZERO PUSH2 0x550 JUMPI PUSH2 0x30E DUP4 PUSH2 0x20EB JUMP JUMPDEST PUSH2 0x317 DUP3 PUSH2 0x2150 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE DUP7 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE PUSH1 0xA0 DUP2 ADD SWAP1 DUP1 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x523 JUMPI PUSH2 0x37B SWAP2 PUSH1 0x40 MSTORE DUP3 PUSH2 0x257D JUMP JUMPDEST PUSH2 0x385 DUP7 DUP3 PUSH2 0x247D JUMP JUMPDEST POP PUSH1 0x4 DUP2 LT ISZERO DUP1 PUSH2 0x4E9 JUMPI DUP2 ISZERO ISZERO DUP1 PUSH2 0x516 JUMPI JUMPDEST PUSH2 0x4BA JUMPI POP POP SWAP3 PUSH0 SWAP10 SWAP3 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP6 SWAP3 PUSH2 0x3FD DUP9 DUP8 PUSH2 0x3D6 PUSH1 0x60 SWAP10 PUSH2 0x22B7 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0x21B6 JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 MLOAD PUSH2 0x410 DUP2 PUSH2 0x1B4C JUMP JUMPDEST DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 DUP2 MSTORE PUSH1 0x40 DUP3 ADD SWAP1 DUP7 DUP3 MSTORE DUP5 DUP12 DUP5 ADD SWAP7 AND DUP7 MSTORE PUSH0 DUP15 SWAP1 MSTORE DUP4 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP12 SWAP2 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 SLOAD AND OR DUP5 SSTORE DUP11 PUSH1 0x1 DUP6 ADD SWAP3 MLOAD AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE MLOAD PUSH1 0x2 DUP3 ADD SSTORE ADD SWAP2 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x40 DUP7 ADD MSTORE AND SWAP3 LOG4 TSTORE STOP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH2 0x4E9 JUMPI PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP PUSH0 PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x399 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616D6F756E74206973207A65726F0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x617 PUSH2 0x1A9F JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0x88B JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0x87E JUMPI JUMPDEST PUSH2 0x5D6 JUMPI PUSH2 0x6AD DUP6 PUSH2 0x23AA JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x3 DUP2 SUB PUSH2 0x853 JUMPI POP PUSH2 0x6CA DUP4 PUSH2 0x20EB JUMP JUMPDEST PUSH2 0x6D3 DUP5 PUSH2 0x2150 JUMP JUMPDEST DUP5 DUP7 AND SWAP5 DUP6 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH1 0x2 DUP3 ADD SSTORE ADD PUSH4 0xFFFFFFFF DUP7 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0x0 SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x44 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP2 PUSH2 0x7EA JUMPI JUMPDEST POP PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A SWAP8 DUP5 SWAP4 SWAP3 DUP5 PUSH1 0x80 SWAP10 SWAP9 SWAP8 SWAP7 PUSH2 0x7C3 SWAP5 LT PUSH2 0x7D9 JUMPI JUMPDEST POP POP PUSH2 0x22B7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE LOG1 STOP JUMPDEST PUSH2 0x7E3 SWAP2 DUP4 PUSH2 0x21B6 JUMP JUMPDEST DUP10 DUP5 PUSH2 0x7BC JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 SWAP4 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 RETURNDATASIZE DUP4 GT PUSH2 0x841 JUMPI JUMPDEST PUSH2 0x807 DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP5 SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A PUSH2 0x785 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x7FD JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0x6A0 JUMP JUMPDEST DUP1 SWAP3 POP DUP4 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x8BC JUMPI JUMPDEST PUSH2 0x8A4 DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0x8B6 DUP6 SWAP2 PUSH2 0x1BCC JUMP JUMPDEST DUP8 PUSH2 0x695 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x89A JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x8DC PUSH2 0x1A9F JUMP JUMPDEST POP PUSH2 0x8E5 PUSH2 0x1AC2 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x185 JUMPI PUSH2 0x907 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST PUSH1 0x84 SWAP3 SWAP2 SWAP3 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x185 JUMPI PUSH2 0x9D9 SWAP3 PUSH2 0x929 PUSH2 0x930 SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST POP POP PUSH2 0x1CCB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0xB74 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xBB8 PUSH2 0x20CB JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xC46 PUSH2 0xC41 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0x23AA JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x20 SWAP2 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x9D9 PUSH2 0x930 PUSH2 0xC79 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0xC81 PUSH2 0x1C73 JUMP JUMPDEST POP PUSH2 0x1EBD JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xCA0 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0xCA8 PUSH2 0x1AC2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 PUSH1 0x20 SWAP3 SWAP2 DUP4 DUP2 PUSH1 0x4 DUP2 PUSH32 0x0 DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0xDC2 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0xDB5 JUMPI JUMPDEST PUSH2 0x5D6 JUMPI DUP3 PUSH1 0x24 SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP4 PUSH2 0xD83 JUMPI JUMPDEST POP PUSH2 0xD81 SWAP4 POP PUSH2 0x1D09 JUMP JUMPDEST STOP JUMPDEST SWAP1 SWAP3 POP DUP4 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xDAE JUMPI JUMPDEST PUSH2 0xD9A DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0xD81 SWAP3 MLOAD SWAP2 DUP5 PUSH2 0xD76 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xD90 JUMP JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0xD2C JUMP JUMPDEST DUP1 SWAP3 POP DUP6 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xDF3 JUMPI JUMPDEST PUSH2 0xDDB DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0xDED DUP6 SWAP2 PUSH2 0x1BCC JUMP JUMPDEST DUP7 PUSH2 0xD21 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xDD1 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xE13 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0xE1B PUSH2 0x1AC2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0xF02 JUMPI JUMPDEST POP AND CALLER EQ ISZERO SWAP1 DUP2 PUSH2 0xEF4 JUMPI JUMPDEST POP PUSH2 0x5D6 JUMPI PUSH2 0xEAA DUP3 PUSH2 0x23AA JUMP JUMPDEST SWAP2 SWAP1 SWAP3 PUSH1 0x4 DUP5 LT ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x3 DUP5 SUB PUSH2 0xEC8 JUMPI PUSH2 0xD81 SWAP4 POP PUSH2 0x1D09 JUMP JUMPDEST DUP4 PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH0 SLOAD AND CALLER EQ ISZERO DUP4 PUSH2 0xE9C JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF36 JUMPI JUMPDEST DUP2 PUSH2 0xF1E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0xF30 DUP3 SWAP2 PUSH2 0x1BCC JUMP JUMPDEST DUP6 PUSH2 0xE90 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF11 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH1 0x2 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x1074 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x1047 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x1009 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xFAE JUMPI JUMPDEST POP PUSH2 0xF9A SWAP3 POP SUB DUP4 PUSH2 0x1B68 JUMP JUMPDEST PUSH2 0x9D9 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x2 PUSH0 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0xFF1 JUMPI POP POP PUSH2 0xF9A SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0xF8D JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0xFDA JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0xF9A SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0xF8D SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0xF69 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT PUSH2 0x185 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x185 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x110C DUP4 PUSH2 0x1B8B JUMP JUMPDEST SWAP3 PUSH2 0x111A PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1B68 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP2 CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0x185 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH1 0x20 SWAP4 ADD DUP6 CALLDATACOPY DUP6 ADD ADD MSTORE DUP3 MLOAD DUP4 ADD SWAP2 PUSH1 0x20 DUP4 ADD SWAP4 DUP1 DUP5 SUB PUSH2 0x1A0 SWAP1 DUP2 DUP2 SLT PUSH2 0x185 JUMPI PUSH2 0x180 DUP1 SWAP2 SLT PUSH2 0x185 JUMPI PUSH2 0x1174 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x116F DUP8 PUSH2 0x1B13 JUMP JUMPDEST PUSH2 0x1BCC JUMP JUMPDEST DUP6 MSTORE PUSH2 0x1182 PUSH1 0x40 DUP5 ADD PUSH2 0x1BCC JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x1193 PUSH1 0x60 DUP5 ADD PUSH2 0x1BCC JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x185 JUMPI PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP5 ADD MLOAD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x120 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH2 0x140 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x185 JUMPI DUP8 ADD MSTORE PUSH2 0x160 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x185 JUMPI ADD SWAP4 PUSH1 0x60 DUP6 DUP6 SUB SLT PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH2 0x1232 DUP7 PUSH2 0x1B30 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x185 JUMPI DUP2 ADD DUP3 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x185 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x523 JUMPI DUP2 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP3 PUSH2 0x126D PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1B68 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD SWAP2 DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x185 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1668 JUMPI POP POP POP DUP7 MSTORE PUSH1 0x40 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x185 JUMPI PUSH1 0x60 SWAP1 DUP3 ADD DUP1 SWAP7 SUB SLT PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD PUSH2 0x12B7 DUP2 PUSH2 0x1B30 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP2 AND DUP2 SUB PUSH2 0x185 JUMPI DUP3 MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD DUP6 DUP2 GT PUSH2 0x185 JUMPI PUSH1 0x20 DUP6 SWAP2 PUSH2 0x1303 SWAP4 ADD ADD PUSH2 0x1BED JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP3 DUP4 GT PUSH2 0x185 JUMPI PUSH2 0x1326 SWAP3 ADD PUSH1 0x20 ADD PUSH2 0x1BED JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF698DA2500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP3 PUSH2 0x1632 JUMPI JUMPDEST POP SWAP1 PUSH2 0x144E PUSH2 0x1440 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x1B68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 PUSH1 0x20 DUP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP2 MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP6 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0xC0 DUP6 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1619 JUMPI DUP6 PUSH1 0x20 PUSH2 0x154B DUP12 DUP12 DUP12 PUSH2 0x14EB DUP7 PUSH2 0x14DD DUP14 DUP14 PUSH1 0x40 PUSH2 0x14CB DUP12 DUP5 ADD MLOAD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 SWAP4 DUP5 DUP9 DUP4 SUB ADD PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x1C33 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1BA7 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP9 MSTORE DUP8 PUSH2 0x1B68 JUMP JUMPDEST PUSH2 0x155D PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP5 PUSH32 0x53F00B1400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE ADDRESS PUSH1 0x4 DUP8 ADD MSTORE CALLER PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0x44 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD MSTORE PUSH0 PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0xE0 PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xE4 DUP6 ADD SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0xC4 DUP6 ADD MSTORE PUSH2 0x1BA7 JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP1 PUSH2 0x15BD JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1611 JUMPI JUMPDEST DUP2 PUSH2 0x15D7 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x185 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1590 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x15CA JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP10 SWAP6 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1477 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1660 JUMPI JUMPDEST DUP2 PUSH2 0x164D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI SWAP1 MLOAD SWAP1 PUSH2 0x144E PUSH2 0x138B JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1640 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1286 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH2 0x260 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x1692 PUSH2 0x1A9F JUMP JUMPDEST POP PUSH2 0x169B PUSH2 0x1AC2 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x185 JUMPI PUSH2 0x16BD SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x185 JUMPI PUSH2 0x16D7 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST POP POP PUSH2 0x180 SWAP3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x170F SWAP2 PUSH2 0x1CCB JUMP JUMPDEST SWAP2 PUSH2 0x164 CALLDATALOAD SWAP3 DUP4 PUSH1 0x80 DUP3 ADD DUP1 MLOAD DUP3 GT PUSH2 0x1948 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH2 0x17E5 DUP2 PUSH2 0x17D7 PUSH1 0x20 DUP3 ADD SWAP5 DUP6 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1B68 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 PUSH1 0xE4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI DUP8 MSTORE PUSH2 0x104 CALLDATALOAD DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x124 CALLDATALOAD SWAP1 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x184 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1A4 SWAP3 DUP4 CALLDATALOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x1C4 SWAP1 DUP2 CALLDATALOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x1E4 SWAP7 DUP8 CALLDATALOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x204 SWAP5 DUP6 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x224 CALLDATALOAD PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x244 CALLDATALOAD DUP2 DUP7 ADD MSTORE DUP5 MSTORE PUSH2 0x1A0 DUP5 ADD SWAP7 DUP8 GT DUP5 DUP9 LT OR PUSH2 0x523 JUMPI DUP7 PUSH1 0x40 MSTORE DUP4 MLOAD SWAP1 KECCAK256 SUB PUSH2 0x18CD JUMPI STOP JUMPDEST PUSH1 0x84 SWAP6 PUSH1 0x2F PUSH32 0x566572696679206F7264657220646F6573206E6F74206D617463682077697468 SWAP3 PUSH1 0x20 PUSH32 0x206578697374696E67206F726465720000000000000000000000000000000000 SWAP8 PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP7 ADD MSTORE DUP5 ADD MSTORE DUP3 ADD MSTORE ADD MSTORE REVERT JUMPDEST MSTORE DUP4 DUP6 PUSH2 0x1723 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x185 JUMPI PUSH32 0x62AF8DC200000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x1A77 JUMPI DUP2 PUSH32 0x14A2A78400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x1A4D JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1A23 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x19F9 JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x19F2 JUMP JUMPDEST PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x19EB JUMP JUMPDEST PUSH32 0xB8296FC400000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x19E4 JUMP JUMPDEST PUSH32 0x3279856600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x185 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x185 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x185 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x185 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x185 JUMPI JUMP JUMPDEST PUSH2 0x180 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x523 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x185 JUMPI JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x185 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1C04 DUP3 PUSH2 0x1B8B JUMP JUMPDEST SWAP3 PUSH2 0x1C12 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1B68 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x185 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x60 PUSH1 0x40 PUSH2 0x1C70 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP6 ADD MSTORE ADD MLOAD SWAP2 DUP2 PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1C80 DUP3 PUSH2 0x1B13 JUMP JUMPDEST PUSH0 PUSH2 0x160 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE DUP3 PUSH2 0x140 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 PUSH2 0x1CD8 PUSH2 0x1C73 JUMP JUMPDEST POP DUP2 ADD SUB SLT PUSH2 0x185 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH2 0x1C70 SWAP1 PUSH2 0x1EBD JUMP JUMPDEST PUSH1 0x60 SWAP2 PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP4 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 PUSH1 0x20 DUP1 DUP5 ADD SWAP4 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP7 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP4 PUSH0 DUP9 PUSH32 0x0 AND SWAP3 DUP4 PUSH1 0x24 DUP7 ADD MSTORE DUP2 PUSH1 0x44 DUP7 ADD MSTORE PUSH1 0x44 DUP6 MSTORE PUSH2 0x1DB4 DUP6 PUSH2 0x1B4C JUMP JUMPDEST DUP5 MLOAD SWAP1 DUP3 DUP14 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x1E9F JUMPI JUMPDEST POP POP ISZERO PUSH2 0x1E64 JUMPI JUMPDEST POP POP POP DUP6 DUP5 AND PUSH0 DUP2 DUP2 MSTORE PUSH1 0x3 DUP1 DUP5 MSTORE DUP8 DUP3 KECCAK256 DUP3 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP4 SWAP1 SSTORE ADD SSTORE DUP6 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 SWAP7 PUSH2 0x1E54 SWAP2 SWAP1 PUSH2 0x1E4F DUP3 PUSH1 0x64 DUP2 ADD PUSH2 0x1440 JUMP JUMPDEST PUSH2 0x257D JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 MSTORE DUP6 ADD MSTORE AND SWAP1 DUP3 ADD MSTORE LOG1 JUMP JUMPDEST PUSH2 0x1E97 SWAP3 PUSH2 0x1E91 SWAP2 DUP10 MLOAD SWAP2 DUP7 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x1E8B DUP2 PUSH2 0x1B4C JUMP JUMPDEST DUP10 PUSH2 0x257D JUMP JUMPDEST DUP8 PUSH2 0x257D JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x1DCC JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x1EB5 JUMPI POP DUP7 DUP10 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x1DC4 JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x1EAE JUMP JUMPDEST PUSH2 0x1EC5 PUSH2 0x1C73 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH1 0x3 DUP3 MLOAD SWAP3 PUSH2 0x1EFC DUP5 PUSH2 0x1B4C JUMP JUMPDEST DUP5 DUP4 SLOAD AND DUP5 MSTORE DUP5 PUSH1 0x1 DUP5 ADD SLOAD AND SWAP5 DUP7 DUP6 ADD SWAP6 DUP7 MSTORE PUSH1 0x2 DUP5 ADD SLOAD SWAP4 DUP3 DUP7 ADD SWAP5 DUP6 MSTORE PUSH4 0xFFFFFFFF SWAP4 DUP5 SWAP2 ADD SLOAD AND SWAP5 PUSH1 0x60 DUP2 ADD SWAP6 DUP1 DUP8 MSTORE ISZERO PUSH2 0x206E JUMPI DUP2 SWAP1 MLOAD AND SWAP6 MLOAD AND SWAP2 DUP2 MLOAD SWAP4 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS PUSH1 0x4 DUP7 ADD MSTORE DUP8 DUP6 PUSH1 0x24 DUP2 DUP13 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x2064 JUMPI PUSH0 SWAP6 PUSH2 0x2035 JUMPI JUMPDEST POP MLOAD SWAP5 MLOAD AND SWAP5 PUSH32 0x0 SWAP7 DUP3 MLOAD SWAP9 PUSH2 0x1FB3 DUP11 PUSH2 0x1B13 JUMP JUMPDEST DUP10 MSTORE DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH32 0x0 PUSH1 0xC0 DUP4 ADD MSTORE PUSH0 PUSH1 0xE0 DUP4 ADD MSTORE PUSH32 0x0 PUSH2 0x100 DUP4 ADD MSTORE PUSH1 0x1 PUSH2 0x120 DUP4 ADD MSTORE DUP1 PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x205D JUMPI JUMPDEST PUSH2 0x204D DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x1F7F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2043 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP9 DUP5 MLOAD SWAP1 PUSH32 0xC8FC272500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7264657220646F6573206E6F74206578697374000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0xB74 JUMPI JUMP JUMPDEST ISZERO PUSH2 0x20F2 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D696E20616D6F756E74206F7574206973207A65726F00000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST TIMESTAMP GT PUSH2 0x2158 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446561646C696E6520697320696E207468652070617374000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 PUSH0 DUP2 DUP6 ADD PUSH2 0x2219 DUP7 PUSH2 0x14DD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP10 DUP11 DUP6 MSTORE DUP8 PUSH1 0x24 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST DUP6 MLOAD SWAP1 DUP3 DUP7 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x2285 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x2237 JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x227C SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1E4F SWAP3 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x2276 DUP2 PUSH2 0x1B4C JUMP JUMPDEST DUP3 PUSH2 0x257D JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 PUSH2 0x2231 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x22AF JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x2229 JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x22A8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP2 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE DUP2 DUP2 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP1 DUP6 LT DUP4 DUP7 GT OR PUSH2 0x523 JUMPI DUP5 DUP5 MSTORE PUSH2 0x2325 DUP6 PUSH2 0x1B30 JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD MSTORE DUP1 EXTCODESIZE ISZERO PUSH2 0x185 JUMPI PUSH2 0x237D PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x6BFAE1CA00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x1C33 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x23A0 JUMPI PUSH2 0x2397 JUMPI POP POP POP JUMP JUMPDEST DUP3 GT PUSH2 0x523 JUMPI MSTORE JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND DUP1 ISZERO PUSH2 0x2475 JUMPI PUSH1 0x20 PUSH1 0x24 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP4 PUSH2 0x2441 JUMPI JUMPDEST POP DUP3 PUSH2 0x242F JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x243B JUMPI PUSH1 0x1 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x246D JUMPI JUMPDEST DUP2 PUSH2 0x245D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x2422 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2450 JUMP JUMPDEST POP PUSH0 SWAP2 POP DUP2 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 SWAP2 SWAP3 AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND SWAP1 DUP2 ISZERO PUSH2 0x2573 JUMPI PUSH1 0x20 PUSH1 0x24 SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP5 PUSH2 0x253F JUMPI JUMPDEST POP DUP1 DUP5 SUB SWAP4 DUP1 DUP6 GT PUSH2 0x2512 JUMPI SUB PUSH2 0x242F JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP4 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x256B JUMPI JUMPDEST DUP2 PUSH2 0x255B PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP3 PUSH0 PUSH2 0x24FA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x254E JUMP JUMPDEST POP POP SWAP1 POP PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 PUSH1 0x20 SWAP2 DUP3 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL ISZERO PUSH2 0x848 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x25FB JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x25B9 JUMPI POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x25B2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBB PUSH25 0x8BE1190A2F5816CAA3342D23EB0FCB57BF52424D3D75A53808 0xFC 0xC8 0xE3 SUB 0xF8 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1814:11638:76:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;:::i;:::-;1500:62:49;;:::i;:::-;1814:11638:76;;;;;;;1738:24:50;1814:11638:76;;;1738:24:50;1814:11638:76;;;;1777:43:50;1814:11638:76;1777:43:50;;1814:11638:76;;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;1311:13:50;1814:11638:76;;;;;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;799:18:78;;;1814:11638:76;777:10:78;:41;773:97;;551:66:42;2806:53:43;;;1316:93:42;;1814:11638:76;3051:52:43;;1814:11638:76;;;;6365:23;;;1814:11638;;;;;6411:65;;;1814:11638;;6411:65;;1814:11638;;;;;;;;;;;;;;;;6411:65;6361:239;6497:19;;6493:107;;6629:23;;;:::i;:::-;6678:8;;;:::i;:::-;1814:11638;;;;1745:53:60;;;777:10:78;1814:11638:76;1745:53:60;;1814:11638:76;6776:4;1814:11638;;;;;;;;;;1745:53:60;;1814:11638:76;;;;;;;;;;;;;1745:53:60;1814:11638:76;;;1745:53:60;;:::i;:::-;6844:51:76;;;;:::i;:::-;1814:11638;;;;;;;;6909:33;;;:65;;;6361:239;6905:310;;7241:8;;;1814:11638;7241:8;;7540:98;7241:8;;7297:14;7241:8;;;1814:11638;7241:8;;:::i;:::-;7283:12;7297:14;;:::i;:::-;1814:11638;7323:7;1814:11638;;;;;:::i;:::-;;;;;7343:181;;1814:11638;;;;7343:181;;1814:11638;;;;7343:181;;;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7540:98;;3051:52:43;1814:11638:76;6905:310;7172:32;1814:11638;7172:32;1814:11638;;;;;;7172:32;1814:11638;;;;;;;;;;6909:65;1814:11638;;;6956:18;6946:28;;;6909:65;;1814:11638;;;;;;;;;;6493:107;1814:11638;;;6539:50;;;1814:11638;;6539:50;;1814:11638;;;;;;;;;;;6539:50;1316:93:42;1368:30;1814:11638:76;1368:30:42;1814:11638:76;;1368:30:42;773:97:78;841:18;1814:11638:76;841:18:78;1814:11638:76;;841:18:78;1814:11638:76;;;;;-1:-1:-1;;1814:11638:76;;;;;;;:::i;:::-;;;;;;;;;;956:36:78;;1814:11638:76;956:18:78;;;1814:11638:76;956:18:78;;;1814:11638:76;956:36:78;;;;;;;;1814:11638:76;956:36:78;;;1814:11638:76;;;942:10:78;:50;;:75;;;1814:11638:76;938:131:78;;11575:37:76;;;:::i;:::-;1814:11638;;;;;;;;3825:18;3815:28;;3811:98;;3938:12;;;;:::i;:::-;3976:8;;;:::i;:::-;1814:11638;;;;;;;3825:18;1814:11638;;3825:18;1814:11638;;;3996:29;;;;1814:11638;4050:25;1814:11638;;;;;;;;;;4205:12;1814:11638;;;4172:46;1814:11638;4172:46;;4198:4;1814:11638;4172:46;;1814:11638;;;;;;;4172:46;;1814:11638;4172:46;;;;;;;;;1814:11638;4172:46;;;1814:11638;4172:55;4346:53;4172:55;;;;;1814:11638;4172:55;;;;4322:7;4172:55;;4168:128;;1814:11638;4322:7;;;:::i;:::-;1814:11638;;;;;;;;;;;;;;;;4346:53;1814:11638;4168:128;4278:6;;;;:::i;:::-;4168:128;;;;4172:46;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1814:11638;;;;;4172:46;;;;;;1814:11638;;4172:46;;1814:11638;4346:53;4172:46;;;;;;;;1814:11638;;;;;;;;;3811:98;3866:32;1814:11638;3866:32;1814:11638;;;;3866:32;942:75:78;1814:11638:76;;;;;942:10:78;996:21;;942:75;;956:36;;;;;;;;;;;;;;;;;;:::i;:::-;;;1814:11638:76;;;;;;;;:::i;:::-;956:36:78;;;;;;;;1814:11638:76;;;;;-1:-1:-1;;1814:11638:76;;;;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;;;2357:37;1814:11638;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;;;2306:45;1814:11638;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;;2400:32;1814:11638;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;1311:13:50;1814:11638:76;;735:10:64;1814:11638:76;;;2339:24:50;2335:96;;1814:11638:76;;;;1311:13:50;1814:11638:76;;;735:10:64;;1814:11638:76;;;;;;735:10:64;1814:11638:76;;3052:40:49;1814:11638:76;3052:40:49;;1814:11638:76;2335:96:50;2386:34;1814:11638:76;2386:34:50;735:10:64;1814:11638:76;;;;2386:34:50;1814:11638:76;;;;;-1:-1:-1;;1814:11638:76;;;;;1500:62:49;;:::i;:::-;1814:11638:76;;;;2093:20:50;1814:11638:76;;2093:20:50;1814:11638:76;;;;;;;;;3052:40:49;;;;1814:11638:76;;;;;;-1:-1:-1;;1814:11638:76;;;;;11575:37;1814:11638;;:::i;:::-;11575:37;:::i;:::-;1814:11638;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;3348:18;1814:11638;;:::i;:::-;;;:::i;:::-;;3348:18;:::i;1814:11638::-;;;;;-1:-1:-1;;1814:11638:76;;;;;;;:::i;:::-;;;:::i;:::-;;;;956:36:78;;1814:11638:76;;;;;;;;;956:18:78;1814:11638:76;;956:36:78;;;;;;;;1814:11638:76;956:36:78;;;1814:11638:76;;;942:10:78;:50;;:75;;;1814:11638:76;938:131:78;;1814:11638:76;;;;;4969:32;;;;1814:11638;4969:32;;4995:4;1814:11638;4969:32;;1814:11638;;;4969:32;;;;;;;1814:11638;4969:32;;;1814:11638;4969:32;;;;;:::i;:::-;1814:11638;4969:32;;;;;;;;;;;;;;;;:::i;:::-;;;1814:11638;;;;4969:32;1814:11638;;4969:32;;;;;;;;;942:75:78;1814:11638:76;;;;;942:10:78;996:21;;942:75;;956:36;;;;;;;;;;;;;;;;;;:::i;:::-;;;1814:11638:76;;;;;;;;:::i;:::-;956:36:78;;;;;;;;1814:11638:76;;;;;-1:-1:-1;;1814:11638:76;;;;;;;:::i;:::-;;;:::i;:::-;;;;;956:36:78;;1814:11638:76;956:18:78;1814:11638:76;956:18:78;;;1814:11638:76;956:36:78;;;;;;;;1814:11638:76;956:36:78;;;1814:11638:76;;;942:10:78;:50;;:75;;;;1814:11638:76;938:131:78;;;11575:37:76;;;:::i;:::-;1814:11638;;;;;;;;;4646:18;4636:28;;4632:98;;4772:6;;;;:::i;4632:98::-;4687:32;;1814:11638;4687:32;1814:11638;;;;4687:32;942:75:78;1814:11638:76;;;;;942:10:78;996:21;;942:75;;;956:36;;;;1814:11638:76;956:36:78;;1814:11638:76;956:36:78;;;;;;1814:11638:76;956:36:78;;;:::i;:::-;;;1814:11638:76;;;;;;;;:::i;:::-;956:36:78;;;;;;-1:-1:-1;956:36:78;;1814:11638:76;;;;;-1:-1:-1;;1814:11638:76;;;;;;;;991:8:38;1814:11638:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;991:8:38;1814:11638:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;-1:-1:-1;1814:11638:76;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;;;479:55:78;1814:11638:76;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9344:92;;;1814:11638;9344:92;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;9646:31;1814:11638;9646:31;;1814:11638;9512:13;1814:11638;9512:13;;;1814:11638;9646:31;;;;;;;1814:11638;9646:31;;;1814:11638;;;9723:17;;1814:11638;;;9723:17;;;1814:11638;9723:17;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9723:17;;-1:-1:-1;;9723:17:76;;;;;;:::i;:::-;1814:11638;;9758:19;;1814:11638;9758:19;;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9758:19;1814:11638;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;9758:19;-1:-1:-1;;9758:19:76;;;;;;:::i;:::-;1814:11638;;;9512:279;;;;;;;1814:11638;9512:279;;9572:4;1814:11638;9512:279;;1814:11638;9595:10;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;1814:11638:76;;;;;;;;;:::i;:::-;9512:279;:13;;1814:11638;9512:279;;;;;;1814:11638;9512:279;;;1814:11638;;;;;;;;;;;9512:279;;1814:11638;9512:279;;1814:11638;9512:279;;;;;;1814:11638;9512:279;;;:::i;:::-;;;1814:11638;;;;;;;;;;;;;9512:279;;;;;;-1:-1:-1;9512:279:76;;1814:11638;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;9646:31;;;1814:11638;9646:31;;1814:11638;9646:31;;;;;;1814:11638;9646:31;;;:::i;:::-;;;1814:11638;;;;;;;9723:17;9646:31;;;;;-1:-1:-1;9646:31:76;;1814:11638;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:76;;;;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;8546:65;;;:::i;:::-;1814:11638;8626:16;1814:11638;8645:20;;1814:11638;8645:20;;1814:11638;;8626:39;;8622:109;;1814:11638;;;;;8755:22;;;1814:11638;8755:22;;;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8755:22;;-1:-1:-1;;8755:22:76;;;;;;:::i;:::-;1814:11638;8745:33;;1814:11638;;;;8792:18;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8792:18;;1814:11638;;;;;;;;;;;;;;;;;8782:29;;8745:66;8741:177;;1814:11638;8741:177;1814:11638;8834:73;1814:11638;;8834:73;1814:11638;;8834:73;;;;;;1814:11638;;;;;;;;;8834:73;8622:109;1814:11638;8622:109;;;;1814:11638;;;;;-1:-1:-1;;1814:11638:76;;;;;;;;;;;;;;;;;10011:50;;10007:123;;10159:53;10174:38;1814:11638;10159:53;;:131;;;;;1814:11638;10159:188;;;;1814:11638;10159:244;;;;1814:11638;;;;;;;10159:244;10378:25;10363:40;;;10159:244;;;:188;10321:26;10306:41;;;-1:-1:-1;10159:188:76;;:131;10243:47;10228:62;;;-1:-1:-1;10159:131:76;;10007:123;10084:35;1814:11638;10084:35;1814:11638;;10084:35;1814:11638;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;1814:11638:76;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;1814:11638:76;;;;:::o;:::-;;-1:-1:-1;;1814:11638:76;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;1814:11638:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7917:295::-;;;1814:11638;7917:295;1814:11638;;:::i;:::-;;8134:34;;1814:11638;;;;;;;;;;;;;8187:18;;;:::i;5015:284::-;1814:11638;5015:284;5252:40;5015:284;1814:11638;;;;5199:47:60;;;;;1814:11638:76;;5199:47:60;;;;1814:11638:76;5127:12;;5141:1;5127:12;;1814:11638;5199:47:60;;;;;1814:11638:76;;;;;;;5199:47:60;;;;;:::i;:::-;9770:199;;;;;;;5141:1:76;9770:199:60;;9985:80;;;5015:284:76;5261:45:60;;;5257:201;;5015:284:76;-1:-1:-1;;;1814:11638:76;;;5141:1;1814:11638;;;5160:7;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;1328:43:60;;;;1814:11638:76;;;5199:47:60;1328:43;;1814:11638:76;;;;;;;;;1328:43:60;;1814:11638:76;1328:43:60;1814:11638:76;;;;1328:43:60;1814:11638:76;1328:43:60;;:::i;:::-;1814:11638:76;;;;;;;;;;;;;5252:40;5015:284::o;5257:201:60:-;5434:12;1814:11638:76;5349:43:60;1814:11638:76;;;5349:43:60;;;;;5199:47;5349:43;;1814:11638:76;5141:1;1814:11638;;;;;5349:43:60;;;;;:::i;:::-;;;:::i;:::-;5434:12;;:::i;:::-;5257:201;;;;;9985:80;9997:67;;-1:-1:-1;9997:15:60;;1814:11638:76;;;;10015:26:60;:30;;9997:67;9985:80;;;;9997:67;10063:1;10048:16;9997:67;;10629:828:76;1814:11638;;:::i;:::-;;;;;;;;-1:-1:-1;1814:11638:76;;;10745:7;1814:11638;;;;-1:-1:-1;1814:11638:76;10745:7;1814:11638;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10776:24;10772:99;;1814:11638;;;;;;;;;;11070:32;1814:11638;11070:32;;11096:4;11070:32;;;1814:11638;11070:32;;1814:11638;11070:32;;;;;;;;;-1:-1:-1;11070:32:76;;;10629:828;1814:11638;;;;;11374:13;;1814:11638;;;;;;;:::i;:::-;;;10900:550;;1814:11638;10900:550;;1814:11638;;10900:550;;1814:11638;;10900:550;;1814:11638;10900:550;;;1814:11638;11227:7;10900:550;;;1814:11638;-1:-1:-1;1814:11638:76;10900:550;;1814:11638;11288:9;10900:550;;;1814:11638;;10900:550;;;1814:11638;10900:550;;;;1814:11638;10900:550;;;1814:11638;10629:828;:::o;11070:32::-;;;;;;;;;;;;;;;;;:::i;:::-;;;1814:11638;;;;;11070:32;;;;;;;;;;1814:11638;;;-1:-1:-1;1814:11638:76;;;;;10772:99;1814:11638;;;;10823:37;;;;;;;1814:11638;;;;;;;;;;;10823:37;1796:162:49;1814:11638:76;1710:6:49;1814:11638:76;;735:10:64;1855:23:49;1851:101;;1796:162::o;12930:182:76:-;13007:17;13003:103;;12930:182::o;13003:103::-;1814:11638;;;13047:48;;;1814:11638;13047:48;;;1814:11638;;;;;;;;;;;13047:48;12740:184;12809:15;:26;12805:113;;12740:184::o;12805:113::-;1814:11638;;;12858:49;;;1814:11638;12858:49;;;1814:11638;;;;;;;;;;;12858:49;5084:380:60;1814:11638:76;;5199:47:60;;-1:-1:-1;5199:47:60;;;;1814:11638:76;5199:47:60;1814:11638:76;5199:47:60;;;;;;;;1814:11638:76;;;;;;;;;;;;;;;;;5199:47:60;9770:199;;;;;;;-1:-1:-1;9770:199:60;;9985:80;;;5084:380;5261:45;;;5257:201;;5084:380;;;;;:::o;5257:201::-;5434:12;1814:11638:76;;5349:43:60;1814:11638:76;;;5349:43:60;5199:47;5349:43;;;1814:11638:76;5199:47:60;5349:43;;1814:11638:76;-1:-1:-1;1814:11638:76;;;;;5349:43:60;;;;;:::i;:::-;;;:::i;5434:12::-;5257:201;;;;;;9985:80;9997:67;;-1:-1:-1;9997:15:60;;1814:11638:76;;;;10015:26:60;:30;;9997:67;9985:80;;;;9997:67;10063:1;10048:16;9997:67;;13118:332:76;1814:11638;13177:13;;1814:11638;;;;;;;;13381:19;;;1814:11638;13381:19;;;1814:11638;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13311:4;1814:11638;;13349:1;13211:204;;;1814:11638;13211:204;;;1814:11638;13177:266;;;;;1814:11638;13349:1;1814:11638;;;;;;13177:266;;;;;;1814:11638;13177:266;;;;;;1814:11638;;;;;;:::i;:::-;13429:4;1814:11638;;;;13177:266;;;;;;;;;;13118:332;;;:::o;13177:266::-;1814:11638;;;;;13118:332::o;13177:266::-;1814:11638;;;13349:1;1814:11638;;;;;11625:1109;1814:11638;;;;;;11806:7;1814:11638;;;11806:7;1814:11638;;;11852:19;1814:11638;;11886:13;;11882:147;;1814:11638;;;;;12148:32;;;;1814:11638;12148:32;;12174:4;12148:32;;;1814:11638;12148:32;;;;;;;1814:11638;12148:32;;;11625:1109;-1:-1:-1;12209:12:76;1814:11638;;12397:36;12405:18;12397:36;;:::o;12205:427::-;12454:15;:26;12450:182;;12699:18;12691:36;11625:1109;:::o;12450:182::-;11806:7;12585:36;;:::o;12148:32::-;;;;1814:11638;12148:32;;1814:11638;12148:32;;;;;;1814:11638;12148:32;;;:::i;:::-;;;1814:11638;;;;;12148:32;;;;;;;-1:-1:-1;12148:32:76;;11882:147;-1:-1:-1;1814:11638:76;;-1:-1:-1;1814:11638:76;;11983:35::o;11625:1109::-;1814:11638;11625:1109;;;;1814:11638;;;;;11806:7;1814:11638;;;11806:7;1814:11638;;;11852:19;1814:11638;;11886:13;;;11882:147;;1814:11638;;;;;12148:32;;;;1814:11638;12148:32;;12174:4;12148:32;;;1814:11638;12148:32;;;;;;;1814:11638;12148:32;;;11625:1109;1814:11638;;;;;;;;;;12209:12;1814:11638;;12397:36;12405:18;12397:36;;:::o;1814:11638::-;;;;;12148:32;1814:11638;;;;12148:32;;;;1814:11638;12148:32;;1814:11638;12148:32;;;;;;1814:11638;12148:32;;;:::i;:::-;;;1814:11638;;;;;12148:32;;;;;;;-1:-1:-1;12148:32:76;;11882:147;11983:35;;;;1814:11638;11983:35;1814:11638;11983:35;:::o;8370:720:60:-;;-1:-1:-1;8507:421:60;8370:720;8507:421;;;;;;;;;;;;-1:-1:-1;8507:421:60;;8942:15;;1814:11638:76;;;;8960:26:60;:31;8942:68;8938:146;;8370:720;:::o;8938:146::-;1814:11638:76;9033:40:60;;-1:-1:-1;9033:40:60;1814:11638:76;9033:40:60;1814:11638:76;;-1:-1:-1;9033:40:60;8942:68;9009:1;8994:16;;8942:68;"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","appData()":"8aebd348","burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","cancelOrder(address,address)":"60e092c6","composableCow()":"93504c52","emergencyCancelOrder(address,address)":"68bce712","getOrder(address)":"6eba2b13","getOrderStatus(address)":"6f9d75cd","getTradeableOrder(address,address,bytes32,bytes,bytes)":"b8296fc4","isValidSignature(bytes32,bytes)":"1626ba7e","owner()":"8da5cb5b","pendingOwner()":"e30c3978","protocolFeeSweeper()":"178ac96e","renounceOwnership()":"715018a6","retryOrder(address,uint256,uint256)":"d83b06a4","supportsInterface(bytes4)":"01ffc9a7","transferOwnership(address)":"f2fde38b","vaultRelayer()":"9b552cc2","verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))":"14a2a784","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"_protocolFeeSweeper\",\"type\":\"address\"},{\"internalType\":\"contract IComposableCow\",\"name\":\"_composableCow\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_cowVaultRelayer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_appData\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_version\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InterfaceIsSignatureVerifierMuxer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"InvalidOrderParameters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeSweeper\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"actualStatus\",\"type\":\"uint8\"}],\"name\":\"OrderHasUnexpectedStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"OrderNotValid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollNever\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtEpoch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryNextBlock\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"ConditionalOrderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"OrderCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"OrderRetried\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"appData\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"cancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"composableCow\",\"outputs\":[{\"internalType\":\"contract IComposableCow\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"emergencyCancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrderStatus\",\"outputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"getTradeableOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFeeSweeper\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"retryOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultRelayer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"_order\",\"type\":\"tuple\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function. Only one order per token is allowed at a time.\",\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"InvalidOrderParameters(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"OrderHasUnexpectedStatus(uint8)\":[{\"details\":\"`revertOrder` should only be called when the OrderStatus is `Failed`.\",\"params\":{\"actualStatus\":\"The status of the order when `revertOrder` was called\"}}],\"OrderNotValid(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PollNever(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be deleted\"}}],\"PollTryAtBlock(uint256,string)\":[{\"params\":{\"blockNumber\":\"The block number when polling should resume\",\"reason\":\"Text description of the reason it should be retried\"}}],\"PollTryAtEpoch(uint256,string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\",\"timestamp\":\"The unix timestamp when polling should resume\"}}],\"PollTryNextBlock(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\"}}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"ConditionalOrderCreated(address,(address,bytes32,bytes))\":{\"details\":\"Emitted when a new conditional order is created.\",\"params\":{\"owner\":\"The address that created the conditional order\",\"params\":\"The conditional order data\"}},\"OrderCanceled(address,uint256,address)\":{\"params\":{\"exactAmountIn\":\"The number of tokens in the order\",\"receiver\":\"The account that received the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"OrderRetried(address,uint256,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the new order to be filled\",\"exactAmountIn\":\"The number of tokens in the order\",\"minAmountOut\":\"The minimum number of target tokens required\",\"tokenIn\":\"The token used to identify the order\"}},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}},\"cancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"emergencyCancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"getOrder(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"_0\":\"The order data for the given token\"}},\"getOrderStatus(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"status\":\"The status of the order for the given token\"}},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"details\":\"**MUST** revert if the order conditions are not met.\",\"params\":{\"ctx\":\"The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\",\"offchainInput\":\"Off-chain input (similar to Balancer `userData`); currently unused\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` of the parent `isValidSignature` call\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"},\"returns\":{\"_0\":\"order Tradeable order for submission to the CoW Protocol API\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"Should return whether the signature provided is valid for the provided data\",\"params\":{\"hash\":\"Hash of the data to be signed\",\"signature\":\"Signature byte array associated with `hash`\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"retryOrder(address,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the order to be filled.\",\"minAmountOut\":\"The minimum number of target tokens to receive (tokenOut)\",\"tokenIn\":\"The token used to identify the order\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"details\":\"Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe. **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over the order verification logic, and to allow a watchtower / user to propose a discrete order without it being generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\",\"params\":{\"_hash\":\"`EIP712` order digest\",\"ctx\":\"See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\",\"domainSeparator\":\"`EIP712` domain separator\",\"offchainInput\":\"Type-specific data NOT known at time of creation for a specific discrete order (or zero)\",\"order\":\"The proposed discrete order's `GPv2Order` data struct\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` calling `isValidSignature`\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"title\":\"CowSwapFeeBurner\",\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"InterfaceIsSignatureVerifierMuxer()\":[{\"notice\":\"Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\"}],\"InvalidOrderParameters(string)\":[{\"notice\":\"The order parameters were invalid.\"}],\"InvalidProtocolFeeSweeper()\":[{\"notice\":\"The fee protocol is invalid.\"}],\"OrderHasUnexpectedStatus(uint8)\":[{\"notice\":\"Attempt to revert an order that had not failed.\"}],\"OrderNotValid(string)\":[{\"notice\":\"This error is returned by the `getTradeableOrder` function if the order conditions are not met.\"}],\"PollNever(string)\":[{\"notice\":\"The conditional order should not be polled again (i.e., deleted).\"}],\"PollTryAtBlock(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific block number.\"}],\"PollTryAtEpoch(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific epoch (unix timestamp).\"}],\"PollTryNextBlock(string)\":[{\"notice\":\"Polling should be retried at the next block.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"OrderCanceled(address,uint256,address)\":{\"notice\":\"An order was canceled after failure.\"},\"OrderRetried(address,uint256,uint256,uint256)\":{\"notice\":\"An order was retried after failing.\"},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"},\"cancelOrder(address,address)\":{\"notice\":\"Return tokens from an order that has failed.\"},\"emergencyCancelOrder(address,address)\":{\"notice\":\"Emergency return tokens from an order regardless of status.\"},\"getOrder(address)\":{\"notice\":\"Get the order at the sell token.\"},\"getOrderStatus(address)\":{\"notice\":\"Get the status of the order at the sell token.\"},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"notice\":\"Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\"},\"retryOrder(address,uint256,uint256)\":{\"notice\":\"Retry an order that has not been filled yet and expired.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"notice\":\"Verify that a given discrete order is valid.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"A contract that burns protocol fees using CowSwap.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/CowSwapFeeBurner.sol\":\"CowSwapFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\":{\"keccak256\":\"0xc82721c94d5e741f168aed4c94dc6a9006cb3348bee7398a5e3fa9b7e28557bd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://784c16c17fb89736ec5be650668d81a548acec3ccc2073e2be0f79029f84f512\",\"dweb:/ipfs/QmSk9seqC2YEJqy5pPdXKjmhEKoQhXQdQXCN4f9R8jcXKX\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":{\"keccak256\":\"0x7b8f0149ba41d28c3d0cd956911816b083f7ccec35ddc7bb7fdb829c3c11d9b2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2d39a71115b9018711726b6c7498038e6d3a41338fa635c88cc8025b4e0e5f34\",\"dweb:/ipfs/QmYqnnkXCd1yjs6kpQgxNUotpudgN37X5FTFNFyKE62PMj\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\":{\"keccak256\":\"0xc3717c516d816bd012f47a18bfd69f7887ce262435c10be9748beb4b11aee033\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://237a9295364524846f26c1b92b523e6039b414d3b691f77ba55c6deefa4b14bc\",\"dweb:/ipfs/QmXYg1paW7kDeXCFkiunzSWSWT3DD2p15CHnJZzDyEQ6Jo\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x66c7ec42c6c43712be2107a50ab4529379bc76a632b425babec698d9da921ac6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dce2778f0b638adfc5ba29c2c618c855fe725fa74a16846386aa1d56a834aa04\",\"dweb:/ipfs/QmPV9oWnzQdi58od266j62xvviavLNHqKLZfm6k2K1qy9E\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/CowSwapFeeBurner.sol\":{\"keccak256\":\"0xa37c5fd04da51fc47ce8bfe6c4a0b6c0b7687af60849420f11de03f62c2a9fa3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d35b60d3e201e591583d43a5133e0c7cc8984a64be325d66c09d02939b75149c\",\"dweb:/ipfs/Qmd298snw1uayUE9LsjPiwcvKcPsKto1v4zKePKXV5Q7fb\"]},\"contracts/FeeBurnerAuthentication.sol\":{\"keccak256\":\"0x4861db67bf113a4775c165241802df34a6c0e9fefaec82e8aaf969b5879759f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f522b3af683e09e1b67ed515be9972e7cf9514a584e264c4ca9656cc12c2f06\",\"dweb:/ipfs/QmNYqMsvWcNqACozLm3cYeR4oC3KKfKNBDSqR3vcpjv3zo\"]}},\"version\":1}"}},"contracts/ERC4626CowSwapFeeBurner.sol":{"ERC4626CowSwapFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IProtocolFeeSweeper","name":"_protocolFeeSweeper","type":"address"},{"internalType":"contract IComposableCow","name":"_composableCow","type":"address"},{"internalType":"address","name":"_cowVaultRelayer","type":"address"},{"internalType":"bytes32","name":"_appData","type":"bytes32"},{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"string","name":"_version","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"AmountOutIsZero","type":"error"},{"inputs":[],"name":"InterfaceIsSignatureVerifierMuxer","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"InvalidOrderParameters","type":"error"},{"inputs":[],"name":"InvalidProtocolFeeSweeper","type":"error"},{"inputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"actualStatus","type":"uint8"}],"name":"OrderHasUnexpectedStatus","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"OrderNotValid","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollNever","type":"error"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtBlock","type":"error"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtEpoch","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryNextBlock","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"indexed":false,"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"}],"name":"ConditionalOrderCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"OrderCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"OrderRetried","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"appData","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"encodedMinAmountsOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"composableCow","outputs":[{"internalType":"contract IComposableCow","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"emergencyCancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrderStatus","outputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"getTradeableOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeSweeper","outputs":[{"internalType":"contract IProtocolFeeSweeper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"retryOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vaultRelayer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"},{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"_order","type":"tuple"}],"name":"verify","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_address_fromMemory":{"entryPoint":909,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory":{"entryPoint":872,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6101406040523461036457612c4f8038038061001a81610368565b92833981019060c0818303126103645780516001600160a01b0391828216919082820361036457602093848201519381851685036103645761005e6040840161038d565b966060840151966100716080860161038d565b9560a086015160018060401b0396878211610364570193601f9484868201121561036457805198888a1161032e57601f19996100b28882018c168701610368565b968188528682850101116103645785815f92828c9601838b015e8801015216801561035157600180546001600160a01b031990811682555f805491821684178155919816907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a31561034257608052815194851161032e576002548481811c91168015610324575b82821014610310578381116102cc575b508092851160011461026a5750839450908392915f9461025f575b50501b915f199060031b1c1916176002555b7ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677560a0527f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc960c05260e052610100918252610120908152604051906128ad92836103a284396080518381816101f401528181610a490152818161106e015281816111d1015261140f015260a051836122b5015260c05183612244015260e051838181610e0c015281816116b3015281816118ac015261255001525182818161067701528181610b0001528181610dc90152612095015251818181610e6c01526122890152f35b015192505f80610167565b92948490811660025f52845f20945f905b888383106102b2575050501061029a575b505050811b01600255610179565b01515f1960f88460031b161c191690555f808061028c565b85870151885590960195948501948793509081019061027b565b60025f52815f208480880160051c820192848910610307575b0160051c019085905b8281106102fc57505061014c565b5f81550185906102ee565b925081926102e5565b634e487b7160e01b5f52602260045260245ffd5b90607f169061013c565b634e487b7160e01b5f52604160045260245ffd5b63932c92a560e01b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761032e57604052565b51906001600160a01b03821682036103645756fe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714611c815750806314a2a784146119c35780631626ba7e14611433578063178ac96e146113f057806354fd4d50146112b057806360e092c61461117957806368bce712146110135780636eba2b1314610fe65780636f9d75cd14610fb1578063715018a614610f3957806379ba509714610e8f5780638aebd34814610e555780638da5cb5b14610e3057806393504c5214610ded5780639b552cc214610daa578063b8296fc414610c9d578063d83b06a4146109f0578063de557a32146101a2578063e30c39781461017c5763f2fde38b146100f8575f80fd5b3461017857602060031936011261017857610111611dd0565b610119612388565b6001600160a01b0380911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b34610178575f6003193601126101785760206001600160a01b0360015416604051908152f35b346101785760e0600319360112610178576101bb611dd0565b6101c3611de6565b6064356001600160a01b0381168103610178576001600160a01b0360a4351660a43503610178576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036109c8577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6109a05760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051917f38d52e0f0000000000000000000000000000000000000000000000000000000083526020836004816001600160a01b0385165afa9283156108c8575f93610964575b506040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523060448201526044356064820152606481528060a081011067ffffffffffffffff60a083011117610937578060a061032092016040526001600160a01b03831661280a565b604051907f70a082310000000000000000000000000000000000000000000000000000000082523060048301526020826024816001600160a01b0388165afa9182156108c8575f92610902575b5060206001600160a01b0360645f9360405194859384927fba0876520000000000000000000000000000000000000000000000000000000084526044356004850152306024850152306044850152165af180156108c8576108d3575b50604051907f70a082310000000000000000000000000000000000000000000000000000000082523060048301526020826024816001600160a01b0388165afa80156108c8575f90610894575b6104209250611ff9565b9260843560801c84101561047057836001600160a01b03847f2f785e46000000000000000000000000000000000000000000000000000000005f521660045260245260843560801c60445260645ffd5b831561085f576001600160a01b0382166001600160a01b038416145f1461053b57506fffffffffffffffffffffffffffffffff6084351683106104ea5750906104c5916001600160a01b0360a435911661262b565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b6001600160a01b0391507f2f785e46000000000000000000000000000000000000000000000000000000005f52166004526024526fffffffffffffffffffffffffffffffff6084351660445260645ffd5b9192906001600160a01b0384166001600160a01b038216145f146105dd5760846040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f46656520746f6b656e20616e642074617267657420746f6b656e20617265207460448201527f68652073616d65000000000000000000000000000000000000000000000000006064820152fd5b8115610801576106006fffffffffffffffffffffffffffffffff6084351661239b565b61060b60c435612400565b61061e826001600160a01b038616612745565b506004811015806107c757811515806107f4575b61079857505060606001600160a01b0380807f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d94610671828a16612545565b61069e877f0000000000000000000000000000000000000000000000000000000000000000848c16612466565b8863ffffffff60036040516106b281611e63565b8585168152602081018660a43516815260408201906fffffffffffffffffffffffffffffffff608435168252878b8401968660c435168852165f52836020528760405f209351167fffffffffffffffffffffffff00000000000000000000000000000000000000009081855416178455886001850192511690825416179055516002820155019151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790556040519687526fffffffffffffffffffffffffffffffff6084351660208801528160a435166040880152169616941692a46104c5565b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f526107c75760045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b50505f6002821415610632565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f46656520746f6b656e20616d6f756e74206973207a65726f00000000000000006044820152fd5b6001600160a01b03837f5db1dd1e000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b506020823d6020116108c0575b816108ae60209383611e7f565b81010312610178576104209151610416565b3d91506108a1565b6040513d5f823e3d90fd5b6020813d6020116108fa575b816108ec60209383611e7f565b8101031261017857516103c9565b3d91506108df565b9091506020813d60201161092f575b8161091e60209383611e7f565b81010312610178575190602061036d565b3d9150610911565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b9092506020813d602011610998575b8161098060209383611e7f565b810103126101785761099190611ee3565b91846102ab565b3d9150610973565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461017857606060031936011261017857610a09611dd0565b6024356044356001600160a01b03916040517f4ccb20c00000000000000000000000000000000000000000000000000000000081526020908181600481887f0000000000000000000000000000000000000000000000000000000000000000165afa80156108c85785915f91610c65575b501633141580610c58575b6109c857610a928561267f565b919060048110156107c75760038103610c2d5750610aaf8361239b565b610ab884612400565b84861694855f5260038252600360405f208560028201550163ffffffff86167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790557f000000000000000000000000000000000000000000000000000000000000000090604051907fdd62ed3e0000000000000000000000000000000000000000000000000000000082523060048301528216602482015282816044818a5afa9081156108c8575f91610bcf575b507f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a9784939284608099989796610ba89410610bbe575b5050612545565b60405194855284015260408301526060820152a1005b610bc89183612466565b8984610ba1565b90508281819398979695943d8311610c26575b610bec8183611e7f565b81010312610178575194959394929391929091907f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a610b6a565b503d610be2565b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50835f5416331415610a85565b809250838092503d8311610c96575b610c7e8183611e7f565b8101031261017857610c908591611ee3565b87610a7a565b503d610c74565b346101785760a060031936011261017857610cb6611dd0565b50610cbf611de6565b5067ffffffffffffffff60643581811161017857610ce1903690600401611dfc565b60849291923591821161017857610da692610d03610d0a933690600401611dfc565b5050611fc8565b604051918291829190916101808101926001600160a01b038082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b0390f35b34610178575f6003193601126101785760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610178575f6003193601126101785760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610178575f6003193601126101785760206001600160a01b035f5416604051908152f35b34610178575f6003193601126101785760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610178575f600319360112610178576001546001600160a01b033381831603610f0d577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b34610178575f60031936011261017857610f51612388565b5f6001600160a01b037fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461017857602060031936011261017857610fd2610fcd611dd0565b61267f565b5060405160048210156107c7576020918152f35b3461017857602060031936011261017857610da6610d0a611005611dd0565b61100d611f70565b50612187565b346101785760406003193601126101785761102c611dd0565b611034611de6565b6040517f4ccb20c00000000000000000000000000000000000000000000000000000000081526001600160a01b03926020929183816004817f000000000000000000000000000000000000000000000000000000000000000089165afa80156108c85785915f91611141575b501633141580611134575b6109c85782602494604051958680927f70a0823100000000000000000000000000000000000000000000000000000000825230600483015285165afa9283156108c8575f93611102575b506111009350612033565b005b90925083813d831161112d575b6111198183611e7f565b8101031261017857611100925191846110f5565b503d61110f565b50835f54163314156110ab565b809250858092503d8311611172575b61115a8183611e7f565b810103126101785761116c8591611ee3565b866110a0565b503d611150565b3461017857604060031936011261017857611192611dd0565b61119a611de6565b6001600160a01b036040517f4ccb20c0000000000000000000000000000000000000000000000000000000008152602081600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156108c85782915f91611274575b50163314159081611266575b506109c85761121c8261267f565b91909260048410156107c7576003840361123a576111009350612033565b837fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90505f54163314158361120e565b9150506020813d6020116112a8575b8161129060209383611e7f565b81010312610178576112a28291611ee3565b85611202565b3d9150611283565b34610178575f600319360112610178576040515f6002549060018260011c91600184169182156113e6575b60209485851084146113b95785879486865291825f1461137b575050600114611320575b5061130c92500383611e7f565b610da6604051928284938452830190611ebe565b84915060025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace905f915b85831061136357505061130c9350820101856112ff565b8054838901850152879450869390920191810161134c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261130c95151560051b85010192508791506112ff9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f16926112db565b34610178575f6003193601126101785760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101785760406003193601126101785760243567ffffffffffffffff80821161017857366023830112156101785781600401359161147183611ea2565b9261147f6040519485611e7f565b8084526020840191366024838301011161017857815f92602460209301853785010152825183019160208301938084036101a09081811261017857610180809112610178576114d9604051956114d487611e2a565b611ee3565b85526114e760408401611ee3565b60208601526114f860608401611ee3565b60408601526080830151606086015260a0830151608086015260c083015163ffffffff811681036101785760a086015260e083015160c0860152610100908184015160e08701526101209182850151908701526101409182850151908115158203610178578701526101609182850151908701528301519085015281015190828211610178570193606085850312610178576040519461159786611e47565b602081015183811161017857810182603f8201121561017857602081015190848211610937578160051b604051926115d26020830185611e7f565b8352604060208401918301019185831161017857604001905b8282106119b35750505086526040810151838111610178576060908201809603126101785760405161161c81611e47565b6020860151956001600160a01b03968781168103610178578252604081015160208301526060810151858111610178576020859161165b930101611ef7565b6040820152602087015260608101519283116101785761167e9201602001611ef7565b6040840152604051907ff698da25000000000000000000000000000000000000000000000000000000008252602082600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9182156108c8575f9261197d575b509061179961178b92604051938491602083019190916101808101926001600160a01b038082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101845283611e7f565b604051809460208083015260a08201815190606060408501528151809152602060c085019201905f5b818110611964578560206118968b8b8b611836866118288d8d60406118168b840151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09384888303016060890152611f3d565b92015190848303016080850152611ebe565b03601f198101885287611e7f565b6118a8604051968795869485947f53f00b14000000000000000000000000000000000000000000000000000000008652306004870152336024870152600435604487015260648601525f608486015260e060a486015260e4850190611ebe565b906003198483030160c4850152611ebe565b03917f0000000000000000000000000000000000000000000000000000000000000000165afa80156108c8575f90611908575b6020907fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b506020813d60201161195c575b8161192260209383611e7f565b8101031261017857517fffffffff0000000000000000000000000000000000000000000000000000000081168103610178576020906118db565b3d9150611915565b82518452899550602093840193909201916001016117c2565b91506020823d6020116119ab575b8161199860209383611e7f565b81010312610178579051906117996116e3565b3d915061198b565b81518152602091820191016115eb565b3461017857610260600319360112610178576119dd611dd0565b506119e6611de6565b5067ffffffffffffffff60a43581811161017857611a08903690600401611dfc565b919060c43582811161017857611a22903690600401611dfc565b505061018092837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c36011261017857611a5a91611fc8565b916101643592836080820180518211611c79575b5050604051611b2381611b156020820194859190916101808101926001600160a01b038082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101835282611e7f565b51902090604051602081019460e4356001600160a01b0390818116809103610178578752610104358181168091036101785760408401526101243590811680910361017857606083015261014435608083015260a08201526101843563ffffffff81168091036101785760c08201526101a492833560e08301526101c49081356101008401526101e49687356101208501526102049485358015158091036101785761014086015261022435610160860152610244358186015284526101a084019687118488101761093757866040528351902003611bfe57005b608495602f7f566572696679206f7264657220646f6573206e6f74206d6174636820776974689260207f206578697374696e67206f726465720000000000000000000000000000000000977f8d8a6110000000000000000000000000000000000000000000000000000000008a528601528401528201520152fd5b528385611a6e565b3461017857602060031936011261017857600435907fffffffff000000000000000000000000000000000000000000000000000000008216809203610178577f62af8dc2000000000000000000000000000000000000000000000000000000008214611da857817f14a2a7840000000000000000000000000000000000000000000000000000000060209314908115611d7e575b8115611d54575b8115611d2a575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483611d23565b7f1626ba7e0000000000000000000000000000000000000000000000000000000081149150611d1c565b7fb8296fc40000000000000000000000000000000000000000000000000000000081149150611d15565b7f32798566000000000000000000000000000000000000000000000000000000005f5260045ffd5b600435906001600160a01b038216820361017857565b602435906001600160a01b038216820361017857565b9181601f840112156101785782359167ffffffffffffffff8311610178576020838186019501011161017857565b610180810190811067ffffffffffffffff82111761093757604052565b6060810190811067ffffffffffffffff82111761093757604052565b6080810190811067ffffffffffffffff82111761093757604052565b90601f601f19910116810190811067ffffffffffffffff82111761093757604052565b67ffffffffffffffff811161093757601f01601f191660200190565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b51906001600160a01b038216820361017857565b81601f8201121561017857805190611f0e82611ea2565b92611f1c6040519485611e7f565b8284526020838301011161017857815f9260208093018386015e8301015290565b9060606040611f6d936001600160a01b038151168452602081015160208501520151918160408201520190611ebe565b90565b60405190611f7d82611e2a565b5f610160838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b9081602091611fd5611f70565b508101031261017857356001600160a01b03811680910361017857611f6d90612187565b9190820391821161200657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a926060926040519160208301927f095ea7b300000000000000000000000000000000000000000000000000000000908185526001600160a01b039460205f877f00000000000000000000000000000000000000000000000000000000000000001692836024860152816044860152604485526120cf85611e63565b845190828b5af15f513d82612169575b50501561212c575b505050612118818385871696875f5260036020525f600360408220828155826001820155826002820155015561262b565b6040519384526020840152166040820152a1565b6121619261215b9160405191602083015260248201525f60448201526044815261215581611e63565b8761280a565b8561280a565b5f80806120e7565b90915061217f57508587163b15155b5f806120df565b600114612178565b61218f611f70565b506001600160a01b0380911690815f52602090600382526040805f2060038251926121b984611e63565b848354168452846001840154169486850195865260028401549382860194855263ffffffff9384910154169460608101958087521561232b5781905116955116918151937f70a0823100000000000000000000000000000000000000000000000000000000855230600486015287856024818c5afa948515612321575f956122f2575b5051945116947f0000000000000000000000000000000000000000000000000000000000000000968251986122708a611e2a565b89528801528601526060850152608084015260a08301527f000000000000000000000000000000000000000000000000000000000000000060c08301525f60e08301527f000000000000000000000000000000000000000000000000000000000000000061010083015260016101208301528061014083015261016082015290565b9094508781813d831161231a575b61230a8183611e7f565b810103126101785751935f61223c565b503d612300565b83513d5f823e3d90fd5b6064888451907fc8fc27250000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4f7264657220646f6573206e6f742065786973740000000000000000000000006044820152fd5b6001600160a01b035f54163303610f0d57565b156123a257565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d696e20616d6f756e74206f7574206973207a65726f000000000000000000006044820152fd5b421161240857565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f446561646c696e6520697320696e2074686520706173740000000000000000006044820152fd5b6040519160205f8185016124bc866118287f095ea7b300000000000000000000000000000000000000000000000000000000998a85528760248401602090939291936001600160a01b0360408201951681520152565b85519082865af15f513d82612520575b5050156124da575b50505050565b612517936001600160a01b03612512926040519260208401521660248201525f60448201526044815261250c81611e63565b8261280a565b61280a565b5f8080806124d4565b90915061253d57506001600160a01b0382163b15155b5f806124cc565b600114612536565b6001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001691604091825191166020820152602081528181019267ffffffffffffffff9180851083861117610937578484526125a685611e47565b3085525f60608201526080810152803b15610178576125fe5f9491859285519687809481937f6bfae1ca0000000000000000000000000000000000000000000000000000000083528960048401526044830190611f3d565b6001602483015203925af180156126215761261857505050565b82116109375752565b82513d5f823e3d90fd5b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b039092166024830152604482019290925261267d91612512826064810161178b565b565b6001600160a01b031690815f52600360205263ffffffff600360405f20015416801561273d576020602493604051948580927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa9283156108c8575f93612709575b50826126f7575060029190565b42116127035760019190565b60039190565b9092506020813d602011612735575b8161272560209383611e7f565b810103126101785751915f6126ea565b3d9150612718565b505f91508190565b6001600160a01b03909291921691825f52600360205263ffffffff600360405f2001541692831561280057906020602492604051938480927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa80156108c8575f906127cc575b6127bf9250611ff9565b91826126f7575060029190565b506020823d6020116127f8575b816127e660209383611e7f565b81010312610178576127bf91516127b5565b3d91506127d9565b505090505f905f90565b905f602091828151910182855af1156108c8575f513d61286e57506001600160a01b0381163b155b6128395750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6001141561283256fea26469706673582212209d7552bdbf91926dc34e36927c2968116a3141dcd8dc11b543be7c1c2655140d64736f6c634300081b0033","opcodes":"PUSH2 0x140 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x364 JUMPI PUSH2 0x2C4F DUP1 CODESIZE SUB DUP1 PUSH2 0x1A DUP2 PUSH2 0x368 JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD SWAP1 PUSH1 0xC0 DUP2 DUP4 SUB SLT PUSH2 0x364 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP2 SWAP1 DUP3 DUP3 SUB PUSH2 0x364 JUMPI PUSH1 0x20 SWAP4 DUP5 DUP3 ADD MLOAD SWAP4 DUP2 DUP6 AND DUP6 SUB PUSH2 0x364 JUMPI PUSH2 0x5E PUSH1 0x40 DUP5 ADD PUSH2 0x38D JUMP JUMPDEST SWAP7 PUSH1 0x60 DUP5 ADD MLOAD SWAP7 PUSH2 0x71 PUSH1 0x80 DUP7 ADD PUSH2 0x38D JUMP JUMPDEST SWAP6 PUSH1 0xA0 DUP7 ADD MLOAD PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB SWAP7 DUP8 DUP3 GT PUSH2 0x364 JUMPI ADD SWAP4 PUSH1 0x1F SWAP5 DUP5 DUP7 DUP3 ADD SLT ISZERO PUSH2 0x364 JUMPI DUP1 MLOAD SWAP9 DUP9 DUP11 GT PUSH2 0x32E JUMPI PUSH1 0x1F NOT SWAP10 PUSH2 0xB2 DUP9 DUP3 ADD DUP13 AND DUP8 ADD PUSH2 0x368 JUMP JUMPDEST SWAP7 DUP2 DUP9 MSTORE DUP7 DUP3 DUP6 ADD ADD GT PUSH2 0x364 JUMPI DUP6 DUP2 PUSH0 SWAP3 DUP3 DUP13 SWAP7 ADD DUP4 DUP12 ADD MCOPY DUP9 ADD ADD MSTORE AND DUP1 ISZERO PUSH2 0x351 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP3 SSTORE PUSH0 DUP1 SLOAD SWAP2 DUP3 AND DUP5 OR DUP2 SSTORE SWAP2 SWAP9 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP1 LOG3 ISZERO PUSH2 0x342 JUMPI PUSH1 0x80 MSTORE DUP2 MLOAD SWAP5 DUP6 GT PUSH2 0x32E JUMPI PUSH1 0x2 SLOAD DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x324 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x310 JUMPI DUP4 DUP2 GT PUSH2 0x2CC JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x26A JUMPI POP DUP4 SWAP5 POP SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP5 PUSH2 0x25F JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x2 SSTORE JUMPDEST PUSH32 0xF3B277728B3FEE749481EB3E0B3B48980DBBAB78658FC419025CB16EEE346775 PUSH1 0xA0 MSTORE PUSH32 0x5A28E9363BB942B639270062AA6BB295F434BCDFC42C97267BF003F272060DC9 PUSH1 0xC0 MSTORE PUSH1 0xE0 MSTORE PUSH2 0x100 SWAP2 DUP3 MSTORE PUSH2 0x120 SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH2 0x28AD SWAP3 DUP4 PUSH2 0x3A2 DUP5 CODECOPY PUSH1 0x80 MLOAD DUP4 DUP2 DUP2 PUSH2 0x1F4 ADD MSTORE DUP2 DUP2 PUSH2 0xA49 ADD MSTORE DUP2 DUP2 PUSH2 0x106E ADD MSTORE DUP2 DUP2 PUSH2 0x11D1 ADD MSTORE PUSH2 0x140F ADD MSTORE PUSH1 0xA0 MLOAD DUP4 PUSH2 0x22B5 ADD MSTORE PUSH1 0xC0 MLOAD DUP4 PUSH2 0x2244 ADD MSTORE PUSH1 0xE0 MLOAD DUP4 DUP2 DUP2 PUSH2 0xE0C ADD MSTORE DUP2 DUP2 PUSH2 0x16B3 ADD MSTORE DUP2 DUP2 PUSH2 0x18AC ADD MSTORE PUSH2 0x2550 ADD MSTORE MLOAD DUP3 DUP2 DUP2 PUSH2 0x677 ADD MSTORE DUP2 DUP2 PUSH2 0xB00 ADD MSTORE DUP2 DUP2 PUSH2 0xDC9 ADD MSTORE PUSH2 0x2095 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0xE6C ADD MSTORE PUSH2 0x2289 ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x167 JUMP JUMPDEST SWAP3 SWAP5 DUP5 SWAP1 DUP2 AND PUSH1 0x2 PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x2B2 JUMPI POP POP POP LT PUSH2 0x29A JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x2 SSTORE PUSH2 0x179 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x28C JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x27B JUMP JUMPDEST PUSH1 0x2 PUSH0 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x307 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP6 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x2FC JUMPI POP POP PUSH2 0x14C JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x2EE JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x2E5 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x13C JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x932C92A5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x32E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x364 JUMPI JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x1C81 JUMPI POP DUP1 PUSH4 0x14A2A784 EQ PUSH2 0x19C3 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0x1433 JUMPI DUP1 PUSH4 0x178AC96E EQ PUSH2 0x13F0 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x12B0 JUMPI DUP1 PUSH4 0x60E092C6 EQ PUSH2 0x1179 JUMPI DUP1 PUSH4 0x68BCE712 EQ PUSH2 0x1013 JUMPI DUP1 PUSH4 0x6EBA2B13 EQ PUSH2 0xFE6 JUMPI DUP1 PUSH4 0x6F9D75CD EQ PUSH2 0xFB1 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xF39 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xE8F JUMPI DUP1 PUSH4 0x8AEBD348 EQ PUSH2 0xE55 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xE30 JUMPI DUP1 PUSH4 0x93504C52 EQ PUSH2 0xDED JUMPI DUP1 PUSH4 0x9B552CC2 EQ PUSH2 0xDAA JUMPI DUP1 PUSH4 0xB8296FC4 EQ PUSH2 0xC9D JUMPI DUP1 PUSH4 0xD83B06A4 EQ PUSH2 0x9F0 JUMPI DUP1 PUSH4 0xDE557A32 EQ PUSH2 0x1A2 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x17C JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0xF8 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x111 PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x119 PUSH2 0x2388 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x1BB PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA4 CALLDATALOAD AND PUSH1 0xA4 CALLDATALOAD SUB PUSH2 0x178 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x9C8 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x9A0 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 DUP4 PUSH1 0x4 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP4 PUSH2 0x964 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE DUP1 PUSH1 0xA0 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP4 ADD GT OR PUSH2 0x937 JUMPI DUP1 PUSH1 0xA0 PUSH2 0x320 SWAP3 ADD PUSH1 0x40 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x280A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP3 PUSH2 0x902 JUMPI JUMPDEST POP PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x64 PUSH0 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x4 DUP6 ADD MSTORE ADDRESS PUSH1 0x24 DUP6 ADD MSTORE ADDRESS PUSH1 0x44 DUP6 ADD MSTORE AND GAS CALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH2 0x8D3 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP1 PUSH2 0x894 JUMPI JUMPDEST PUSH2 0x420 SWAP3 POP PUSH2 0x1FF9 JUMP JUMPDEST SWAP3 PUSH1 0x84 CALLDATALOAD PUSH1 0x80 SHR DUP5 LT ISZERO PUSH2 0x470 JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x80 SHR PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP4 ISZERO PUSH2 0x85F JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EQ PUSH0 EQ PUSH2 0x53B JUMPI POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND DUP4 LT PUSH2 0x4EA JUMPI POP SWAP1 PUSH2 0x4C5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA4 CALLDATALOAD SWAP2 AND PUSH2 0x262B JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 POP PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST SWAP2 SWAP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ PUSH0 EQ PUSH2 0x5DD JUMPI PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616E642074617267657420746F6B656E206172652074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x68652073616D6500000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST DUP2 ISZERO PUSH2 0x801 JUMPI PUSH2 0x600 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND PUSH2 0x239B JUMP JUMPDEST PUSH2 0x60B PUSH1 0xC4 CALLDATALOAD PUSH2 0x2400 JUMP JUMPDEST PUSH2 0x61E DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x2745 JUMP JUMPDEST POP PUSH1 0x4 DUP2 LT ISZERO DUP1 PUSH2 0x7C7 JUMPI DUP2 ISZERO ISZERO DUP1 PUSH2 0x7F4 JUMPI JUMPDEST PUSH2 0x798 JUMPI POP POP PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP1 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP5 PUSH2 0x671 DUP3 DUP11 AND PUSH2 0x2545 JUMP JUMPDEST PUSH2 0x69E DUP8 PUSH32 0x0 DUP5 DUP13 AND PUSH2 0x2466 JUMP JUMPDEST DUP9 PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 MLOAD PUSH2 0x6B2 DUP2 PUSH2 0x1E63 JUMP JUMPDEST DUP6 DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 PUSH1 0xA4 CALLDATALOAD AND DUP2 MSTORE PUSH1 0x40 DUP3 ADD SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND DUP3 MSTORE DUP8 DUP12 DUP5 ADD SWAP7 DUP7 PUSH1 0xC4 CALLDATALOAD AND DUP9 MSTORE AND PUSH0 MSTORE DUP4 PUSH1 0x20 MSTORE DUP8 PUSH1 0x40 PUSH0 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 SLOAD AND OR DUP5 SSTORE DUP9 PUSH1 0x1 DUP6 ADD SWAP3 MLOAD AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE MLOAD PUSH1 0x2 DUP3 ADD SSTORE ADD SWAP2 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND PUSH1 0x20 DUP9 ADD MSTORE DUP2 PUSH1 0xA4 CALLDATALOAD AND PUSH1 0x40 DUP9 ADD MSTORE AND SWAP7 AND SWAP5 AND SWAP3 LOG4 PUSH2 0x4C5 JUMP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH2 0x7C7 JUMPI PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP PUSH0 PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x632 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616D6F756E74206973207A65726F0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 PUSH32 0x5DB1DD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x8C0 JUMPI JUMPDEST DUP2 PUSH2 0x8AE PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x420 SWAP2 MLOAD PUSH2 0x416 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x8A1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x8FA JUMPI JUMPDEST DUP2 PUSH2 0x8EC PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD PUSH2 0x3C9 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x8DF JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x92F JUMPI JUMPDEST DUP2 PUSH2 0x91E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP1 PUSH1 0x20 PUSH2 0x36D JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x911 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x998 JUMPI JUMPDEST DUP2 PUSH2 0x980 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x991 SWAP1 PUSH2 0x1EE3 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x2AB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x973 JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xA09 PUSH2 0x1DD0 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0xC65 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0xC58 JUMPI JUMPDEST PUSH2 0x9C8 JUMPI PUSH2 0xA92 DUP6 PUSH2 0x267F JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x3 DUP2 SUB PUSH2 0xC2D JUMPI POP PUSH2 0xAAF DUP4 PUSH2 0x239B JUMP JUMPDEST PUSH2 0xAB8 DUP5 PUSH2 0x2400 JUMP JUMPDEST DUP5 DUP7 AND SWAP5 DUP6 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH1 0x2 DUP3 ADD SSTORE ADD PUSH4 0xFFFFFFFF DUP7 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0x0 SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x44 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP2 PUSH2 0xBCF JUMPI JUMPDEST POP PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A SWAP8 DUP5 SWAP4 SWAP3 DUP5 PUSH1 0x80 SWAP10 SWAP9 SWAP8 SWAP7 PUSH2 0xBA8 SWAP5 LT PUSH2 0xBBE JUMPI JUMPDEST POP POP PUSH2 0x2545 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE LOG1 STOP JUMPDEST PUSH2 0xBC8 SWAP2 DUP4 PUSH2 0x2466 JUMP JUMPDEST DUP10 DUP5 PUSH2 0xBA1 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 SWAP4 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 RETURNDATASIZE DUP4 GT PUSH2 0xC26 JUMPI JUMPDEST PUSH2 0xBEC DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP5 SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A PUSH2 0xB6A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xBE2 JUMP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0xA85 JUMP JUMPDEST DUP1 SWAP3 POP DUP4 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xC96 JUMPI JUMPDEST PUSH2 0xC7E DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0xC90 DUP6 SWAP2 PUSH2 0x1EE3 JUMP JUMPDEST DUP8 PUSH2 0xA7A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xC74 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xCB6 PUSH2 0x1DD0 JUMP JUMPDEST POP PUSH2 0xCBF PUSH2 0x1DE6 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x178 JUMPI PUSH2 0xCE1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST PUSH1 0x84 SWAP3 SWAP2 SWAP3 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x178 JUMPI PUSH2 0xDA6 SWAP3 PUSH2 0xD03 PUSH2 0xD0A SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST POP POP PUSH2 0x1FC8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB CALLER DUP2 DUP4 AND SUB PUSH2 0xF0D JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xF51 PUSH2 0x2388 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xFD2 PUSH2 0xFCD PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x267F JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x20 SWAP2 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xDA6 PUSH2 0xD0A PUSH2 0x1005 PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x100D PUSH2 0x1F70 JUMP JUMPDEST POP PUSH2 0x2187 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x102C PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x1034 PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x20 SWAP3 SWAP2 DUP4 DUP2 PUSH1 0x4 DUP2 PUSH32 0x0 DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0x1141 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0x1134 JUMPI JUMPDEST PUSH2 0x9C8 JUMPI DUP3 PUSH1 0x24 SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP4 PUSH2 0x1102 JUMPI JUMPDEST POP PUSH2 0x1100 SWAP4 POP PUSH2 0x2033 JUMP JUMPDEST STOP JUMPDEST SWAP1 SWAP3 POP DUP4 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x112D JUMPI JUMPDEST PUSH2 0x1119 DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x1100 SWAP3 MLOAD SWAP2 DUP5 PUSH2 0x10F5 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x110F JUMP JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0x10AB JUMP JUMPDEST DUP1 SWAP3 POP DUP6 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1172 JUMPI JUMPDEST PUSH2 0x115A DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x116C DUP6 SWAP2 PUSH2 0x1EE3 JUMP JUMPDEST DUP7 PUSH2 0x10A0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1150 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x1192 PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x119A PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1274 JUMPI JUMPDEST POP AND CALLER EQ ISZERO SWAP1 DUP2 PUSH2 0x1266 JUMPI JUMPDEST POP PUSH2 0x9C8 JUMPI PUSH2 0x121C DUP3 PUSH2 0x267F JUMP JUMPDEST SWAP2 SWAP1 SWAP3 PUSH1 0x4 DUP5 LT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x3 DUP5 SUB PUSH2 0x123A JUMPI PUSH2 0x1100 SWAP4 POP PUSH2 0x2033 JUMP JUMPDEST DUP4 PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH0 SLOAD AND CALLER EQ ISZERO DUP4 PUSH2 0x120E JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x12A8 JUMPI JUMPDEST DUP2 PUSH2 0x1290 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x12A2 DUP3 SWAP2 PUSH2 0x1EE3 JUMP JUMPDEST DUP6 PUSH2 0x1202 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1283 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH1 0x2 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x13E6 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x13B9 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x137B JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1320 JUMPI JUMPDEST POP PUSH2 0x130C SWAP3 POP SUB DUP4 PUSH2 0x1E7F JUMP JUMPDEST PUSH2 0xDA6 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1EBE JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x2 PUSH0 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x1363 JUMPI POP POP PUSH2 0x130C SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x12FF JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x134C JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0x130C SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x12FF SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0x12DB JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT PUSH2 0x178 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x178 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x1471 DUP4 PUSH2 0x1EA2 JUMP JUMPDEST SWAP3 PUSH2 0x147F PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1E7F JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP2 CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0x178 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH1 0x20 SWAP4 ADD DUP6 CALLDATACOPY DUP6 ADD ADD MSTORE DUP3 MLOAD DUP4 ADD SWAP2 PUSH1 0x20 DUP4 ADD SWAP4 DUP1 DUP5 SUB PUSH2 0x1A0 SWAP1 DUP2 DUP2 SLT PUSH2 0x178 JUMPI PUSH2 0x180 DUP1 SWAP2 SLT PUSH2 0x178 JUMPI PUSH2 0x14D9 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x14D4 DUP8 PUSH2 0x1E2A JUMP JUMPDEST PUSH2 0x1EE3 JUMP JUMPDEST DUP6 MSTORE PUSH2 0x14E7 PUSH1 0x40 DUP5 ADD PUSH2 0x1EE3 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x14F8 PUSH1 0x60 DUP5 ADD PUSH2 0x1EE3 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP5 ADD MLOAD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x120 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH2 0x140 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x178 JUMPI DUP8 ADD MSTORE PUSH2 0x160 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x178 JUMPI ADD SWAP4 PUSH1 0x60 DUP6 DUP6 SUB SLT PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH2 0x1597 DUP7 PUSH2 0x1E47 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x178 JUMPI DUP2 ADD DUP3 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x178 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x937 JUMPI DUP2 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP3 PUSH2 0x15D2 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1E7F JUMP JUMPDEST DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD SWAP2 DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x178 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x19B3 JUMPI POP POP POP DUP7 MSTORE PUSH1 0x40 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x178 JUMPI PUSH1 0x60 SWAP1 DUP3 ADD DUP1 SWAP7 SUB SLT PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD PUSH2 0x161C DUP2 PUSH2 0x1E47 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI DUP3 MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD DUP6 DUP2 GT PUSH2 0x178 JUMPI PUSH1 0x20 DUP6 SWAP2 PUSH2 0x165B SWAP4 ADD ADD PUSH2 0x1EF7 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP3 DUP4 GT PUSH2 0x178 JUMPI PUSH2 0x167E SWAP3 ADD PUSH1 0x20 ADD PUSH2 0x1EF7 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF698DA2500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP3 PUSH2 0x197D JUMPI JUMPDEST POP SWAP1 PUSH2 0x1799 PUSH2 0x178B SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x1E7F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 PUSH1 0x20 DUP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP2 MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP6 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0xC0 DUP6 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1964 JUMPI DUP6 PUSH1 0x20 PUSH2 0x1896 DUP12 DUP12 DUP12 PUSH2 0x1836 DUP7 PUSH2 0x1828 DUP14 DUP14 PUSH1 0x40 PUSH2 0x1816 DUP12 DUP5 ADD MLOAD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 SWAP4 DUP5 DUP9 DUP4 SUB ADD PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x1F3D JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1EBE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP9 MSTORE DUP8 PUSH2 0x1E7F JUMP JUMPDEST PUSH2 0x18A8 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP5 PUSH32 0x53F00B1400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE ADDRESS PUSH1 0x4 DUP8 ADD MSTORE CALLER PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0x44 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD MSTORE PUSH0 PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0xE0 PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xE4 DUP6 ADD SWAP1 PUSH2 0x1EBE JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0xC4 DUP6 ADD MSTORE PUSH2 0x1EBE JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP1 PUSH2 0x1908 JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x195C JUMPI JUMPDEST DUP2 PUSH2 0x1922 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x18DB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1915 JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP10 SWAP6 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x17C2 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x19AB JUMPI JUMPDEST DUP2 PUSH2 0x1998 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI SWAP1 MLOAD SWAP1 PUSH2 0x1799 PUSH2 0x16E3 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x198B JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x15EB JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH2 0x260 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x19DD PUSH2 0x1DD0 JUMP JUMPDEST POP PUSH2 0x19E6 PUSH2 0x1DE6 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x178 JUMPI PUSH2 0x1A08 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x178 JUMPI PUSH2 0x1A22 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST POP POP PUSH2 0x180 SWAP3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x1A5A SWAP2 PUSH2 0x1FC8 JUMP JUMPDEST SWAP2 PUSH2 0x164 CALLDATALOAD SWAP3 DUP4 PUSH1 0x80 DUP3 ADD DUP1 MLOAD DUP3 GT PUSH2 0x1C79 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH2 0x1B23 DUP2 PUSH2 0x1B15 PUSH1 0x20 DUP3 ADD SWAP5 DUP6 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1E7F JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 PUSH1 0xE4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI DUP8 MSTORE PUSH2 0x104 CALLDATALOAD DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x124 CALLDATALOAD SWAP1 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x184 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1A4 SWAP3 DUP4 CALLDATALOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x1C4 SWAP1 DUP2 CALLDATALOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x1E4 SWAP7 DUP8 CALLDATALOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x204 SWAP5 DUP6 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x224 CALLDATALOAD PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x244 CALLDATALOAD DUP2 DUP7 ADD MSTORE DUP5 MSTORE PUSH2 0x1A0 DUP5 ADD SWAP7 DUP8 GT DUP5 DUP9 LT OR PUSH2 0x937 JUMPI DUP7 PUSH1 0x40 MSTORE DUP4 MLOAD SWAP1 KECCAK256 SUB PUSH2 0x1BFE JUMPI STOP JUMPDEST PUSH1 0x84 SWAP6 PUSH1 0x2F PUSH32 0x566572696679206F7264657220646F6573206E6F74206D617463682077697468 SWAP3 PUSH1 0x20 PUSH32 0x206578697374696E67206F726465720000000000000000000000000000000000 SWAP8 PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP7 ADD MSTORE DUP5 ADD MSTORE DUP3 ADD MSTORE ADD MSTORE REVERT JUMPDEST MSTORE DUP4 DUP6 PUSH2 0x1A6E JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x178 JUMPI PUSH32 0x62AF8DC200000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x1DA8 JUMPI DUP2 PUSH32 0x14A2A78400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x1D7E JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1D54 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1D2A JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x1D23 JUMP JUMPDEST PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1D1C JUMP JUMPDEST PUSH32 0xB8296FC400000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1D15 JUMP JUMPDEST PUSH32 0x3279856600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x178 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x178 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x178 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x178 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x178 JUMPI JUMP JUMPDEST PUSH2 0x180 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x937 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x178 JUMPI JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x178 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1F0E DUP3 PUSH2 0x1EA2 JUMP JUMPDEST SWAP3 PUSH2 0x1F1C PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1E7F JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x178 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x60 PUSH1 0x40 PUSH2 0x1F6D SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP6 ADD MSTORE ADD MLOAD SWAP2 DUP2 PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1EBE JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1F7D DUP3 PUSH2 0x1E2A JUMP JUMPDEST PUSH0 PUSH2 0x160 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE DUP3 PUSH2 0x140 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 PUSH2 0x1FD5 PUSH2 0x1F70 JUMP JUMPDEST POP DUP2 ADD SUB SLT PUSH2 0x178 JUMPI CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH2 0x1F6D SWAP1 PUSH2 0x2187 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x2006 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP3 PUSH1 0x60 SWAP3 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD SWAP3 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH1 0x20 PUSH0 DUP8 PUSH32 0x0 AND SWAP3 DUP4 PUSH1 0x24 DUP7 ADD MSTORE DUP2 PUSH1 0x44 DUP7 ADD MSTORE PUSH1 0x44 DUP6 MSTORE PUSH2 0x20CF DUP6 PUSH2 0x1E63 JUMP JUMPDEST DUP5 MLOAD SWAP1 DUP3 DUP12 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x2169 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x212C JUMPI JUMPDEST POP POP POP PUSH2 0x2118 DUP2 DUP4 DUP6 DUP8 AND SWAP7 DUP8 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x3 PUSH1 0x40 DUP3 KECCAK256 DUP3 DUP2 SSTORE DUP3 PUSH1 0x1 DUP3 ADD SSTORE DUP3 PUSH1 0x2 DUP3 ADD SSTORE ADD SSTORE PUSH2 0x262B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE LOG1 JUMP JUMPDEST PUSH2 0x2161 SWAP3 PUSH2 0x215B SWAP2 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x2155 DUP2 PUSH2 0x1E63 JUMP JUMPDEST DUP8 PUSH2 0x280A JUMP JUMPDEST DUP6 PUSH2 0x280A JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x20E7 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x217F JUMPI POP DUP6 DUP8 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x20DF JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x2178 JUMP JUMPDEST PUSH2 0x218F PUSH2 0x1F70 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH1 0x3 DUP3 MLOAD SWAP3 PUSH2 0x21B9 DUP5 PUSH2 0x1E63 JUMP JUMPDEST DUP5 DUP4 SLOAD AND DUP5 MSTORE DUP5 PUSH1 0x1 DUP5 ADD SLOAD AND SWAP5 DUP7 DUP6 ADD SWAP6 DUP7 MSTORE PUSH1 0x2 DUP5 ADD SLOAD SWAP4 DUP3 DUP7 ADD SWAP5 DUP6 MSTORE PUSH4 0xFFFFFFFF SWAP4 DUP5 SWAP2 ADD SLOAD AND SWAP5 PUSH1 0x60 DUP2 ADD SWAP6 DUP1 DUP8 MSTORE ISZERO PUSH2 0x232B JUMPI DUP2 SWAP1 MLOAD AND SWAP6 MLOAD AND SWAP2 DUP2 MLOAD SWAP4 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS PUSH1 0x4 DUP7 ADD MSTORE DUP8 DUP6 PUSH1 0x24 DUP2 DUP13 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x2321 JUMPI PUSH0 SWAP6 PUSH2 0x22F2 JUMPI JUMPDEST POP MLOAD SWAP5 MLOAD AND SWAP5 PUSH32 0x0 SWAP7 DUP3 MLOAD SWAP9 PUSH2 0x2270 DUP11 PUSH2 0x1E2A JUMP JUMPDEST DUP10 MSTORE DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH32 0x0 PUSH1 0xC0 DUP4 ADD MSTORE PUSH0 PUSH1 0xE0 DUP4 ADD MSTORE PUSH32 0x0 PUSH2 0x100 DUP4 ADD MSTORE PUSH1 0x1 PUSH2 0x120 DUP4 ADD MSTORE DUP1 PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x231A JUMPI JUMPDEST PUSH2 0x230A DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x223C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2300 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP9 DUP5 MLOAD SWAP1 PUSH32 0xC8FC272500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7264657220646F6573206E6F74206578697374000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND CALLER SUB PUSH2 0xF0D JUMPI JUMP JUMPDEST ISZERO PUSH2 0x23A2 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D696E20616D6F756E74206F7574206973207A65726F00000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST TIMESTAMP GT PUSH2 0x2408 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446561646C696E6520697320696E207468652070617374000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 PUSH0 DUP2 DUP6 ADD PUSH2 0x24BC DUP7 PUSH2 0x1828 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP10 DUP11 DUP6 MSTORE DUP8 PUSH1 0x24 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST DUP6 MLOAD SWAP1 DUP3 DUP7 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x2520 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x24DA JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x2517 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2512 SWAP3 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x250C DUP2 PUSH2 0x1E63 JUMP JUMPDEST DUP3 PUSH2 0x280A JUMP JUMPDEST PUSH2 0x280A JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 PUSH2 0x24D4 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x253D JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x24CC JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x2536 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP2 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE DUP2 DUP2 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP1 DUP6 LT DUP4 DUP7 GT OR PUSH2 0x937 JUMPI DUP5 DUP5 MSTORE PUSH2 0x25A6 DUP6 PUSH2 0x1E47 JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD MSTORE DUP1 EXTCODESIZE ISZERO PUSH2 0x178 JUMPI PUSH2 0x25FE PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x6BFAE1CA00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x1F3D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x2621 JUMPI PUSH2 0x2618 JUMPI POP POP POP JUMP JUMPDEST DUP3 GT PUSH2 0x937 JUMPI MSTORE JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x267D SWAP2 PUSH2 0x2512 DUP3 PUSH1 0x64 DUP2 ADD PUSH2 0x178B JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND DUP1 ISZERO PUSH2 0x273D JUMPI PUSH1 0x20 PUSH1 0x24 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP4 PUSH2 0x2709 JUMPI JUMPDEST POP DUP3 PUSH2 0x26F7 JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x2703 JUMPI PUSH1 0x1 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2735 JUMPI JUMPDEST DUP2 PUSH2 0x2725 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x26EA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2718 JUMP JUMPDEST POP PUSH0 SWAP2 POP DUP2 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 SWAP2 SWAP3 AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND SWAP3 DUP4 ISZERO PUSH2 0x2800 JUMPI SWAP1 PUSH1 0x20 PUSH1 0x24 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP1 PUSH2 0x27CC JUMPI JUMPDEST PUSH2 0x27BF SWAP3 POP PUSH2 0x1FF9 JUMP JUMPDEST SWAP2 DUP3 PUSH2 0x26F7 JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x27F8 JUMPI JUMPDEST DUP2 PUSH2 0x27E6 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x27BF SWAP2 MLOAD PUSH2 0x27B5 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x27D9 JUMP JUMPDEST POP POP SWAP1 POP PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 PUSH1 0x20 SWAP2 DUP3 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL ISZERO PUSH2 0x8C8 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x286E JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x2839 JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x2832 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 PUSH22 0x52BDBF91926DC34E36927C2968116A3141DCD8DC11B5 NUMBER 0xBE PUSH29 0x1C2655140D64736F6C634300081B003300000000000000000000000000 ","sourceMap":"1248:3961:77:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;1273:26:49;;1269:95;;1248:3961:77;;;-1:-1:-1;;;;;;1248:3961:77;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;3052:40:49;;-1:-1:-1;3052:40:49;1203:42:78;1199:107;;1248:3961:77;1316:40:78;1248:3961:77;;;;;;;1156:21:38;1248:3961:77;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;;;1156:21:38;1248:3961:77;;2215:17:76;1248:3961:77;2215:17:76;2281:18;1248:3961:77;2281:18:76;2893:30;;2933:31;;;;2974:18;;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2893:30:76;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;1156:21:38;-1:-1:-1;1248:3961:77;;-1:-1:-1;1248:3961:77;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;;;;;;;1156:21:38;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;1156:21:38;-1:-1:-1;1248:3961:77;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;-1:-1:-1;1248:3961:77;1199:107:78;1268:27;;;-1:-1:-1;1268:27:78;;-1:-1:-1;1268:27:78;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;1248:3961:77;;-1:-1:-1;1322:31:49;1248:3961:77;-1:-1:-1;1248:3961:77;;;;;;;;;-1:-1:-1;;1248:3961:77;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1248:3961:77;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":7632,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_23215":{"entryPoint":7654,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":7676,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_fromMemory":{"entryPoint":7927,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC20_fromMemory":{"entryPoint":7907,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_string":{"entryPoint":7870,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_ConditionalOrderParams":{"entryPoint":7997,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_GPv2Order":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_and_zero_memory_struct_struct_GPv2Order":{"entryPoint":8048,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":7842,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":8185,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":7807,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_23219":{"entryPoint":7722,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_23220":{"entryPoint":7751,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_23239":{"entryPoint":7779,"id":null,"parameterSlots":1,"returnSlots":0},"fun_callOptionalReturn":{"entryPoint":10250,"id":11024,"parameterSlots":2,"returnSlots":0},"fun_cancelOrder":{"entryPoint":8243,"id":18969,"parameterSlots":3,"returnSlots":0},"fun_checkDeadline":{"entryPoint":9216,"id":19482,"parameterSlots":1,"returnSlots":0},"fun_checkMinAmountOut":{"entryPoint":9115,"id":19497,"parameterSlots":1,"returnSlots":0},"fun_checkOwner":{"entryPoint":9096,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_createCowOrder":{"entryPoint":9541,"id":19527,"parameterSlots":1,"returnSlots":0},"fun_forceApprove":{"entryPoint":9318,"id":10850,"parameterSlots":3,"returnSlots":0},"fun_getOrder":{"entryPoint":8583,"id":19375,"parameterSlots":1,"returnSlots":1},"fun_getOrderStatusAndBalance":{"entryPoint":10053,"id":19466,"parameterSlots":2,"returnSlots":2},"fun_getOrderStatusAndBalance_23224":{"entryPoint":9855,"id":19466,"parameterSlots":1,"returnSlots":2},"fun_getTradeableOrder":{"entryPoint":8136,"id":19160,"parameterSlots":2,"returnSlots":1},"fun_safeTransfer":{"entryPoint":9771,"id":10647,"parameterSlots":3,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"18695":[{"length":32,"start":8885}],"18700":[{"length":32,"start":8772}],"18703":[{"length":32,"start":3596},{"length":32,"start":5811},{"length":32,"start":6316},{"length":32,"start":9552}],"18705":[{"length":32,"start":1655},{"length":32,"start":2816},{"length":32,"start":3529},{"length":32,"start":8341}],"18707":[{"length":32,"start":3692},{"length":32,"start":8841}],"19771":[{"length":32,"start":500},{"length":32,"start":2633},{"length":32,"start":4206},{"length":32,"start":4561},{"length":32,"start":5135}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714611c815750806314a2a784146119c35780631626ba7e14611433578063178ac96e146113f057806354fd4d50146112b057806360e092c61461117957806368bce712146110135780636eba2b1314610fe65780636f9d75cd14610fb1578063715018a614610f3957806379ba509714610e8f5780638aebd34814610e555780638da5cb5b14610e3057806393504c5214610ded5780639b552cc214610daa578063b8296fc414610c9d578063d83b06a4146109f0578063de557a32146101a2578063e30c39781461017c5763f2fde38b146100f8575f80fd5b3461017857602060031936011261017857610111611dd0565b610119612388565b6001600160a01b0380911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b34610178575f6003193601126101785760206001600160a01b0360015416604051908152f35b346101785760e0600319360112610178576101bb611dd0565b6101c3611de6565b6064356001600160a01b0381168103610178576001600160a01b0360a4351660a43503610178576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036109c8577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6109a05760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051917f38d52e0f0000000000000000000000000000000000000000000000000000000083526020836004816001600160a01b0385165afa9283156108c8575f93610964575b506040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523060448201526044356064820152606481528060a081011067ffffffffffffffff60a083011117610937578060a061032092016040526001600160a01b03831661280a565b604051907f70a082310000000000000000000000000000000000000000000000000000000082523060048301526020826024816001600160a01b0388165afa9182156108c8575f92610902575b5060206001600160a01b0360645f9360405194859384927fba0876520000000000000000000000000000000000000000000000000000000084526044356004850152306024850152306044850152165af180156108c8576108d3575b50604051907f70a082310000000000000000000000000000000000000000000000000000000082523060048301526020826024816001600160a01b0388165afa80156108c8575f90610894575b6104209250611ff9565b9260843560801c84101561047057836001600160a01b03847f2f785e46000000000000000000000000000000000000000000000000000000005f521660045260245260843560801c60445260645ffd5b831561085f576001600160a01b0382166001600160a01b038416145f1461053b57506fffffffffffffffffffffffffffffffff6084351683106104ea5750906104c5916001600160a01b0360a435911661262b565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b6001600160a01b0391507f2f785e46000000000000000000000000000000000000000000000000000000005f52166004526024526fffffffffffffffffffffffffffffffff6084351660445260645ffd5b9192906001600160a01b0384166001600160a01b038216145f146105dd5760846040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f46656520746f6b656e20616e642074617267657420746f6b656e20617265207460448201527f68652073616d65000000000000000000000000000000000000000000000000006064820152fd5b8115610801576106006fffffffffffffffffffffffffffffffff6084351661239b565b61060b60c435612400565b61061e826001600160a01b038616612745565b506004811015806107c757811515806107f4575b61079857505060606001600160a01b0380807f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d94610671828a16612545565b61069e877f0000000000000000000000000000000000000000000000000000000000000000848c16612466565b8863ffffffff60036040516106b281611e63565b8585168152602081018660a43516815260408201906fffffffffffffffffffffffffffffffff608435168252878b8401968660c435168852165f52836020528760405f209351167fffffffffffffffffffffffff00000000000000000000000000000000000000009081855416178455886001850192511690825416179055516002820155019151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790556040519687526fffffffffffffffffffffffffffffffff6084351660208801528160a435166040880152169616941692a46104c5565b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f526107c75760045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b50505f6002821415610632565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f46656520746f6b656e20616d6f756e74206973207a65726f00000000000000006044820152fd5b6001600160a01b03837f5db1dd1e000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b506020823d6020116108c0575b816108ae60209383611e7f565b81010312610178576104209151610416565b3d91506108a1565b6040513d5f823e3d90fd5b6020813d6020116108fa575b816108ec60209383611e7f565b8101031261017857516103c9565b3d91506108df565b9091506020813d60201161092f575b8161091e60209383611e7f565b81010312610178575190602061036d565b3d9150610911565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b9092506020813d602011610998575b8161098060209383611e7f565b810103126101785761099190611ee3565b91846102ab565b3d9150610973565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461017857606060031936011261017857610a09611dd0565b6024356044356001600160a01b03916040517f4ccb20c00000000000000000000000000000000000000000000000000000000081526020908181600481887f0000000000000000000000000000000000000000000000000000000000000000165afa80156108c85785915f91610c65575b501633141580610c58575b6109c857610a928561267f565b919060048110156107c75760038103610c2d5750610aaf8361239b565b610ab884612400565b84861694855f5260038252600360405f208560028201550163ffffffff86167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790557f000000000000000000000000000000000000000000000000000000000000000090604051907fdd62ed3e0000000000000000000000000000000000000000000000000000000082523060048301528216602482015282816044818a5afa9081156108c8575f91610bcf575b507f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a9784939284608099989796610ba89410610bbe575b5050612545565b60405194855284015260408301526060820152a1005b610bc89183612466565b8984610ba1565b90508281819398979695943d8311610c26575b610bec8183611e7f565b81010312610178575194959394929391929091907f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a610b6a565b503d610be2565b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50835f5416331415610a85565b809250838092503d8311610c96575b610c7e8183611e7f565b8101031261017857610c908591611ee3565b87610a7a565b503d610c74565b346101785760a060031936011261017857610cb6611dd0565b50610cbf611de6565b5067ffffffffffffffff60643581811161017857610ce1903690600401611dfc565b60849291923591821161017857610da692610d03610d0a933690600401611dfc565b5050611fc8565b604051918291829190916101808101926001600160a01b038082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b0390f35b34610178575f6003193601126101785760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610178575f6003193601126101785760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610178575f6003193601126101785760206001600160a01b035f5416604051908152f35b34610178575f6003193601126101785760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610178575f600319360112610178576001546001600160a01b033381831603610f0d577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b34610178575f60031936011261017857610f51612388565b5f6001600160a01b037fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461017857602060031936011261017857610fd2610fcd611dd0565b61267f565b5060405160048210156107c7576020918152f35b3461017857602060031936011261017857610da6610d0a611005611dd0565b61100d611f70565b50612187565b346101785760406003193601126101785761102c611dd0565b611034611de6565b6040517f4ccb20c00000000000000000000000000000000000000000000000000000000081526001600160a01b03926020929183816004817f000000000000000000000000000000000000000000000000000000000000000089165afa80156108c85785915f91611141575b501633141580611134575b6109c85782602494604051958680927f70a0823100000000000000000000000000000000000000000000000000000000825230600483015285165afa9283156108c8575f93611102575b506111009350612033565b005b90925083813d831161112d575b6111198183611e7f565b8101031261017857611100925191846110f5565b503d61110f565b50835f54163314156110ab565b809250858092503d8311611172575b61115a8183611e7f565b810103126101785761116c8591611ee3565b866110a0565b503d611150565b3461017857604060031936011261017857611192611dd0565b61119a611de6565b6001600160a01b036040517f4ccb20c0000000000000000000000000000000000000000000000000000000008152602081600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156108c85782915f91611274575b50163314159081611266575b506109c85761121c8261267f565b91909260048410156107c7576003840361123a576111009350612033565b837fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90505f54163314158361120e565b9150506020813d6020116112a8575b8161129060209383611e7f565b81010312610178576112a28291611ee3565b85611202565b3d9150611283565b34610178575f600319360112610178576040515f6002549060018260011c91600184169182156113e6575b60209485851084146113b95785879486865291825f1461137b575050600114611320575b5061130c92500383611e7f565b610da6604051928284938452830190611ebe565b84915060025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace905f915b85831061136357505061130c9350820101856112ff565b8054838901850152879450869390920191810161134c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261130c95151560051b85010192508791506112ff9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f16926112db565b34610178575f6003193601126101785760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101785760406003193601126101785760243567ffffffffffffffff80821161017857366023830112156101785781600401359161147183611ea2565b9261147f6040519485611e7f565b8084526020840191366024838301011161017857815f92602460209301853785010152825183019160208301938084036101a09081811261017857610180809112610178576114d9604051956114d487611e2a565b611ee3565b85526114e760408401611ee3565b60208601526114f860608401611ee3565b60408601526080830151606086015260a0830151608086015260c083015163ffffffff811681036101785760a086015260e083015160c0860152610100908184015160e08701526101209182850151908701526101409182850151908115158203610178578701526101609182850151908701528301519085015281015190828211610178570193606085850312610178576040519461159786611e47565b602081015183811161017857810182603f8201121561017857602081015190848211610937578160051b604051926115d26020830185611e7f565b8352604060208401918301019185831161017857604001905b8282106119b35750505086526040810151838111610178576060908201809603126101785760405161161c81611e47565b6020860151956001600160a01b03968781168103610178578252604081015160208301526060810151858111610178576020859161165b930101611ef7565b6040820152602087015260608101519283116101785761167e9201602001611ef7565b6040840152604051907ff698da25000000000000000000000000000000000000000000000000000000008252602082600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9182156108c8575f9261197d575b509061179961178b92604051938491602083019190916101808101926001600160a01b038082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101845283611e7f565b604051809460208083015260a08201815190606060408501528151809152602060c085019201905f5b818110611964578560206118968b8b8b611836866118288d8d60406118168b840151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09384888303016060890152611f3d565b92015190848303016080850152611ebe565b03601f198101885287611e7f565b6118a8604051968795869485947f53f00b14000000000000000000000000000000000000000000000000000000008652306004870152336024870152600435604487015260648601525f608486015260e060a486015260e4850190611ebe565b906003198483030160c4850152611ebe565b03917f0000000000000000000000000000000000000000000000000000000000000000165afa80156108c8575f90611908575b6020907fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b506020813d60201161195c575b8161192260209383611e7f565b8101031261017857517fffffffff0000000000000000000000000000000000000000000000000000000081168103610178576020906118db565b3d9150611915565b82518452899550602093840193909201916001016117c2565b91506020823d6020116119ab575b8161199860209383611e7f565b81010312610178579051906117996116e3565b3d915061198b565b81518152602091820191016115eb565b3461017857610260600319360112610178576119dd611dd0565b506119e6611de6565b5067ffffffffffffffff60a43581811161017857611a08903690600401611dfc565b919060c43582811161017857611a22903690600401611dfc565b505061018092837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c36011261017857611a5a91611fc8565b916101643592836080820180518211611c79575b5050604051611b2381611b156020820194859190916101808101926001600160a01b038082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101835282611e7f565b51902090604051602081019460e4356001600160a01b0390818116809103610178578752610104358181168091036101785760408401526101243590811680910361017857606083015261014435608083015260a08201526101843563ffffffff81168091036101785760c08201526101a492833560e08301526101c49081356101008401526101e49687356101208501526102049485358015158091036101785761014086015261022435610160860152610244358186015284526101a084019687118488101761093757866040528351902003611bfe57005b608495602f7f566572696679206f7264657220646f6573206e6f74206d6174636820776974689260207f206578697374696e67206f726465720000000000000000000000000000000000977f8d8a6110000000000000000000000000000000000000000000000000000000008a528601528401528201520152fd5b528385611a6e565b3461017857602060031936011261017857600435907fffffffff000000000000000000000000000000000000000000000000000000008216809203610178577f62af8dc2000000000000000000000000000000000000000000000000000000008214611da857817f14a2a7840000000000000000000000000000000000000000000000000000000060209314908115611d7e575b8115611d54575b8115611d2a575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483611d23565b7f1626ba7e0000000000000000000000000000000000000000000000000000000081149150611d1c565b7fb8296fc40000000000000000000000000000000000000000000000000000000081149150611d15565b7f32798566000000000000000000000000000000000000000000000000000000005f5260045ffd5b600435906001600160a01b038216820361017857565b602435906001600160a01b038216820361017857565b9181601f840112156101785782359167ffffffffffffffff8311610178576020838186019501011161017857565b610180810190811067ffffffffffffffff82111761093757604052565b6060810190811067ffffffffffffffff82111761093757604052565b6080810190811067ffffffffffffffff82111761093757604052565b90601f601f19910116810190811067ffffffffffffffff82111761093757604052565b67ffffffffffffffff811161093757601f01601f191660200190565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b51906001600160a01b038216820361017857565b81601f8201121561017857805190611f0e82611ea2565b92611f1c6040519485611e7f565b8284526020838301011161017857815f9260208093018386015e8301015290565b9060606040611f6d936001600160a01b038151168452602081015160208501520151918160408201520190611ebe565b90565b60405190611f7d82611e2a565b5f610160838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b9081602091611fd5611f70565b508101031261017857356001600160a01b03811680910361017857611f6d90612187565b9190820391821161200657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a926060926040519160208301927f095ea7b300000000000000000000000000000000000000000000000000000000908185526001600160a01b039460205f877f00000000000000000000000000000000000000000000000000000000000000001692836024860152816044860152604485526120cf85611e63565b845190828b5af15f513d82612169575b50501561212c575b505050612118818385871696875f5260036020525f600360408220828155826001820155826002820155015561262b565b6040519384526020840152166040820152a1565b6121619261215b9160405191602083015260248201525f60448201526044815261215581611e63565b8761280a565b8561280a565b5f80806120e7565b90915061217f57508587163b15155b5f806120df565b600114612178565b61218f611f70565b506001600160a01b0380911690815f52602090600382526040805f2060038251926121b984611e63565b848354168452846001840154169486850195865260028401549382860194855263ffffffff9384910154169460608101958087521561232b5781905116955116918151937f70a0823100000000000000000000000000000000000000000000000000000000855230600486015287856024818c5afa948515612321575f956122f2575b5051945116947f0000000000000000000000000000000000000000000000000000000000000000968251986122708a611e2a565b89528801528601526060850152608084015260a08301527f000000000000000000000000000000000000000000000000000000000000000060c08301525f60e08301527f000000000000000000000000000000000000000000000000000000000000000061010083015260016101208301528061014083015261016082015290565b9094508781813d831161231a575b61230a8183611e7f565b810103126101785751935f61223c565b503d612300565b83513d5f823e3d90fd5b6064888451907fc8fc27250000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4f7264657220646f6573206e6f742065786973740000000000000000000000006044820152fd5b6001600160a01b035f54163303610f0d57565b156123a257565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d696e20616d6f756e74206f7574206973207a65726f000000000000000000006044820152fd5b421161240857565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f446561646c696e6520697320696e2074686520706173740000000000000000006044820152fd5b6040519160205f8185016124bc866118287f095ea7b300000000000000000000000000000000000000000000000000000000998a85528760248401602090939291936001600160a01b0360408201951681520152565b85519082865af15f513d82612520575b5050156124da575b50505050565b612517936001600160a01b03612512926040519260208401521660248201525f60448201526044815261250c81611e63565b8261280a565b61280a565b5f8080806124d4565b90915061253d57506001600160a01b0382163b15155b5f806124cc565b600114612536565b6001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001691604091825191166020820152602081528181019267ffffffffffffffff9180851083861117610937578484526125a685611e47565b3085525f60608201526080810152803b15610178576125fe5f9491859285519687809481937f6bfae1ca0000000000000000000000000000000000000000000000000000000083528960048401526044830190611f3d565b6001602483015203925af180156126215761261857505050565b82116109375752565b82513d5f823e3d90fd5b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b039092166024830152604482019290925261267d91612512826064810161178b565b565b6001600160a01b031690815f52600360205263ffffffff600360405f20015416801561273d576020602493604051948580927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa9283156108c8575f93612709575b50826126f7575060029190565b42116127035760019190565b60039190565b9092506020813d602011612735575b8161272560209383611e7f565b810103126101785751915f6126ea565b3d9150612718565b505f91508190565b6001600160a01b03909291921691825f52600360205263ffffffff600360405f2001541692831561280057906020602492604051938480927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa80156108c8575f906127cc575b6127bf9250611ff9565b91826126f7575060029190565b506020823d6020116127f8575b816127e660209383611e7f565b81010312610178576127bf91516127b5565b3d91506127d9565b505090505f905f90565b905f602091828151910182855af1156108c8575f513d61286e57506001600160a01b0381163b155b6128395750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6001141561283256fea26469706673582212209d7552bdbf91926dc34e36927c2968116a3141dcd8dc11b543be7c1c2655140d64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x1C81 JUMPI POP DUP1 PUSH4 0x14A2A784 EQ PUSH2 0x19C3 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0x1433 JUMPI DUP1 PUSH4 0x178AC96E EQ PUSH2 0x13F0 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x12B0 JUMPI DUP1 PUSH4 0x60E092C6 EQ PUSH2 0x1179 JUMPI DUP1 PUSH4 0x68BCE712 EQ PUSH2 0x1013 JUMPI DUP1 PUSH4 0x6EBA2B13 EQ PUSH2 0xFE6 JUMPI DUP1 PUSH4 0x6F9D75CD EQ PUSH2 0xFB1 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xF39 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xE8F JUMPI DUP1 PUSH4 0x8AEBD348 EQ PUSH2 0xE55 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xE30 JUMPI DUP1 PUSH4 0x93504C52 EQ PUSH2 0xDED JUMPI DUP1 PUSH4 0x9B552CC2 EQ PUSH2 0xDAA JUMPI DUP1 PUSH4 0xB8296FC4 EQ PUSH2 0xC9D JUMPI DUP1 PUSH4 0xD83B06A4 EQ PUSH2 0x9F0 JUMPI DUP1 PUSH4 0xDE557A32 EQ PUSH2 0x1A2 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x17C JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0xF8 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x111 PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x119 PUSH2 0x2388 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x1BB PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA4 CALLDATALOAD AND PUSH1 0xA4 CALLDATALOAD SUB PUSH2 0x178 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x9C8 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x9A0 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 DUP4 PUSH1 0x4 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP4 PUSH2 0x964 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE DUP1 PUSH1 0xA0 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP4 ADD GT OR PUSH2 0x937 JUMPI DUP1 PUSH1 0xA0 PUSH2 0x320 SWAP3 ADD PUSH1 0x40 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x280A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP3 PUSH2 0x902 JUMPI JUMPDEST POP PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x64 PUSH0 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x4 DUP6 ADD MSTORE ADDRESS PUSH1 0x24 DUP6 ADD MSTORE ADDRESS PUSH1 0x44 DUP6 ADD MSTORE AND GAS CALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH2 0x8D3 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP1 PUSH2 0x894 JUMPI JUMPDEST PUSH2 0x420 SWAP3 POP PUSH2 0x1FF9 JUMP JUMPDEST SWAP3 PUSH1 0x84 CALLDATALOAD PUSH1 0x80 SHR DUP5 LT ISZERO PUSH2 0x470 JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x80 SHR PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP4 ISZERO PUSH2 0x85F JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EQ PUSH0 EQ PUSH2 0x53B JUMPI POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND DUP4 LT PUSH2 0x4EA JUMPI POP SWAP1 PUSH2 0x4C5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA4 CALLDATALOAD SWAP2 AND PUSH2 0x262B JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 POP PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST SWAP2 SWAP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ PUSH0 EQ PUSH2 0x5DD JUMPI PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616E642074617267657420746F6B656E206172652074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x68652073616D6500000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST DUP2 ISZERO PUSH2 0x801 JUMPI PUSH2 0x600 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND PUSH2 0x239B JUMP JUMPDEST PUSH2 0x60B PUSH1 0xC4 CALLDATALOAD PUSH2 0x2400 JUMP JUMPDEST PUSH2 0x61E DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x2745 JUMP JUMPDEST POP PUSH1 0x4 DUP2 LT ISZERO DUP1 PUSH2 0x7C7 JUMPI DUP2 ISZERO ISZERO DUP1 PUSH2 0x7F4 JUMPI JUMPDEST PUSH2 0x798 JUMPI POP POP PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP1 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP5 PUSH2 0x671 DUP3 DUP11 AND PUSH2 0x2545 JUMP JUMPDEST PUSH2 0x69E DUP8 PUSH32 0x0 DUP5 DUP13 AND PUSH2 0x2466 JUMP JUMPDEST DUP9 PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 MLOAD PUSH2 0x6B2 DUP2 PUSH2 0x1E63 JUMP JUMPDEST DUP6 DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 PUSH1 0xA4 CALLDATALOAD AND DUP2 MSTORE PUSH1 0x40 DUP3 ADD SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND DUP3 MSTORE DUP8 DUP12 DUP5 ADD SWAP7 DUP7 PUSH1 0xC4 CALLDATALOAD AND DUP9 MSTORE AND PUSH0 MSTORE DUP4 PUSH1 0x20 MSTORE DUP8 PUSH1 0x40 PUSH0 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 SLOAD AND OR DUP5 SSTORE DUP9 PUSH1 0x1 DUP6 ADD SWAP3 MLOAD AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE MLOAD PUSH1 0x2 DUP3 ADD SSTORE ADD SWAP2 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND PUSH1 0x20 DUP9 ADD MSTORE DUP2 PUSH1 0xA4 CALLDATALOAD AND PUSH1 0x40 DUP9 ADD MSTORE AND SWAP7 AND SWAP5 AND SWAP3 LOG4 PUSH2 0x4C5 JUMP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH2 0x7C7 JUMPI PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP PUSH0 PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x632 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616D6F756E74206973207A65726F0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 PUSH32 0x5DB1DD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x8C0 JUMPI JUMPDEST DUP2 PUSH2 0x8AE PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x420 SWAP2 MLOAD PUSH2 0x416 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x8A1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x8FA JUMPI JUMPDEST DUP2 PUSH2 0x8EC PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD PUSH2 0x3C9 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x8DF JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x92F JUMPI JUMPDEST DUP2 PUSH2 0x91E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP1 PUSH1 0x20 PUSH2 0x36D JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x911 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x998 JUMPI JUMPDEST DUP2 PUSH2 0x980 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x991 SWAP1 PUSH2 0x1EE3 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x2AB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x973 JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xA09 PUSH2 0x1DD0 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0xC65 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0xC58 JUMPI JUMPDEST PUSH2 0x9C8 JUMPI PUSH2 0xA92 DUP6 PUSH2 0x267F JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x3 DUP2 SUB PUSH2 0xC2D JUMPI POP PUSH2 0xAAF DUP4 PUSH2 0x239B JUMP JUMPDEST PUSH2 0xAB8 DUP5 PUSH2 0x2400 JUMP JUMPDEST DUP5 DUP7 AND SWAP5 DUP6 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH1 0x2 DUP3 ADD SSTORE ADD PUSH4 0xFFFFFFFF DUP7 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0x0 SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x44 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP2 PUSH2 0xBCF JUMPI JUMPDEST POP PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A SWAP8 DUP5 SWAP4 SWAP3 DUP5 PUSH1 0x80 SWAP10 SWAP9 SWAP8 SWAP7 PUSH2 0xBA8 SWAP5 LT PUSH2 0xBBE JUMPI JUMPDEST POP POP PUSH2 0x2545 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE LOG1 STOP JUMPDEST PUSH2 0xBC8 SWAP2 DUP4 PUSH2 0x2466 JUMP JUMPDEST DUP10 DUP5 PUSH2 0xBA1 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 SWAP4 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 RETURNDATASIZE DUP4 GT PUSH2 0xC26 JUMPI JUMPDEST PUSH2 0xBEC DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP5 SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A PUSH2 0xB6A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xBE2 JUMP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0xA85 JUMP JUMPDEST DUP1 SWAP3 POP DUP4 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xC96 JUMPI JUMPDEST PUSH2 0xC7E DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0xC90 DUP6 SWAP2 PUSH2 0x1EE3 JUMP JUMPDEST DUP8 PUSH2 0xA7A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xC74 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xCB6 PUSH2 0x1DD0 JUMP JUMPDEST POP PUSH2 0xCBF PUSH2 0x1DE6 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x178 JUMPI PUSH2 0xCE1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST PUSH1 0x84 SWAP3 SWAP2 SWAP3 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x178 JUMPI PUSH2 0xDA6 SWAP3 PUSH2 0xD03 PUSH2 0xD0A SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST POP POP PUSH2 0x1FC8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB CALLER DUP2 DUP4 AND SUB PUSH2 0xF0D JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xF51 PUSH2 0x2388 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xFD2 PUSH2 0xFCD PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x267F JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x20 SWAP2 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xDA6 PUSH2 0xD0A PUSH2 0x1005 PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x100D PUSH2 0x1F70 JUMP JUMPDEST POP PUSH2 0x2187 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x102C PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x1034 PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x20 SWAP3 SWAP2 DUP4 DUP2 PUSH1 0x4 DUP2 PUSH32 0x0 DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0x1141 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0x1134 JUMPI JUMPDEST PUSH2 0x9C8 JUMPI DUP3 PUSH1 0x24 SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP4 PUSH2 0x1102 JUMPI JUMPDEST POP PUSH2 0x1100 SWAP4 POP PUSH2 0x2033 JUMP JUMPDEST STOP JUMPDEST SWAP1 SWAP3 POP DUP4 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x112D JUMPI JUMPDEST PUSH2 0x1119 DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x1100 SWAP3 MLOAD SWAP2 DUP5 PUSH2 0x10F5 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x110F JUMP JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0x10AB JUMP JUMPDEST DUP1 SWAP3 POP DUP6 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1172 JUMPI JUMPDEST PUSH2 0x115A DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x116C DUP6 SWAP2 PUSH2 0x1EE3 JUMP JUMPDEST DUP7 PUSH2 0x10A0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1150 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x1192 PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x119A PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1274 JUMPI JUMPDEST POP AND CALLER EQ ISZERO SWAP1 DUP2 PUSH2 0x1266 JUMPI JUMPDEST POP PUSH2 0x9C8 JUMPI PUSH2 0x121C DUP3 PUSH2 0x267F JUMP JUMPDEST SWAP2 SWAP1 SWAP3 PUSH1 0x4 DUP5 LT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x3 DUP5 SUB PUSH2 0x123A JUMPI PUSH2 0x1100 SWAP4 POP PUSH2 0x2033 JUMP JUMPDEST DUP4 PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH0 SLOAD AND CALLER EQ ISZERO DUP4 PUSH2 0x120E JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x12A8 JUMPI JUMPDEST DUP2 PUSH2 0x1290 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x12A2 DUP3 SWAP2 PUSH2 0x1EE3 JUMP JUMPDEST DUP6 PUSH2 0x1202 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1283 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH1 0x2 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x13E6 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x13B9 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x137B JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1320 JUMPI JUMPDEST POP PUSH2 0x130C SWAP3 POP SUB DUP4 PUSH2 0x1E7F JUMP JUMPDEST PUSH2 0xDA6 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1EBE JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x2 PUSH0 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x1363 JUMPI POP POP PUSH2 0x130C SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x12FF JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x134C JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0x130C SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x12FF SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0x12DB JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT PUSH2 0x178 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x178 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x1471 DUP4 PUSH2 0x1EA2 JUMP JUMPDEST SWAP3 PUSH2 0x147F PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1E7F JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP2 CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0x178 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH1 0x20 SWAP4 ADD DUP6 CALLDATACOPY DUP6 ADD ADD MSTORE DUP3 MLOAD DUP4 ADD SWAP2 PUSH1 0x20 DUP4 ADD SWAP4 DUP1 DUP5 SUB PUSH2 0x1A0 SWAP1 DUP2 DUP2 SLT PUSH2 0x178 JUMPI PUSH2 0x180 DUP1 SWAP2 SLT PUSH2 0x178 JUMPI PUSH2 0x14D9 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x14D4 DUP8 PUSH2 0x1E2A JUMP JUMPDEST PUSH2 0x1EE3 JUMP JUMPDEST DUP6 MSTORE PUSH2 0x14E7 PUSH1 0x40 DUP5 ADD PUSH2 0x1EE3 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x14F8 PUSH1 0x60 DUP5 ADD PUSH2 0x1EE3 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP5 ADD MLOAD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x120 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH2 0x140 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x178 JUMPI DUP8 ADD MSTORE PUSH2 0x160 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x178 JUMPI ADD SWAP4 PUSH1 0x60 DUP6 DUP6 SUB SLT PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH2 0x1597 DUP7 PUSH2 0x1E47 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x178 JUMPI DUP2 ADD DUP3 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x178 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x937 JUMPI DUP2 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP3 PUSH2 0x15D2 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1E7F JUMP JUMPDEST DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD SWAP2 DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x178 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x19B3 JUMPI POP POP POP DUP7 MSTORE PUSH1 0x40 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x178 JUMPI PUSH1 0x60 SWAP1 DUP3 ADD DUP1 SWAP7 SUB SLT PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD PUSH2 0x161C DUP2 PUSH2 0x1E47 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI DUP3 MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD DUP6 DUP2 GT PUSH2 0x178 JUMPI PUSH1 0x20 DUP6 SWAP2 PUSH2 0x165B SWAP4 ADD ADD PUSH2 0x1EF7 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP3 DUP4 GT PUSH2 0x178 JUMPI PUSH2 0x167E SWAP3 ADD PUSH1 0x20 ADD PUSH2 0x1EF7 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF698DA2500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP3 PUSH2 0x197D JUMPI JUMPDEST POP SWAP1 PUSH2 0x1799 PUSH2 0x178B SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x1E7F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 PUSH1 0x20 DUP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP2 MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP6 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0xC0 DUP6 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1964 JUMPI DUP6 PUSH1 0x20 PUSH2 0x1896 DUP12 DUP12 DUP12 PUSH2 0x1836 DUP7 PUSH2 0x1828 DUP14 DUP14 PUSH1 0x40 PUSH2 0x1816 DUP12 DUP5 ADD MLOAD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 SWAP4 DUP5 DUP9 DUP4 SUB ADD PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x1F3D JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1EBE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP9 MSTORE DUP8 PUSH2 0x1E7F JUMP JUMPDEST PUSH2 0x18A8 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP5 PUSH32 0x53F00B1400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE ADDRESS PUSH1 0x4 DUP8 ADD MSTORE CALLER PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0x44 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD MSTORE PUSH0 PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0xE0 PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xE4 DUP6 ADD SWAP1 PUSH2 0x1EBE JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0xC4 DUP6 ADD MSTORE PUSH2 0x1EBE JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP1 PUSH2 0x1908 JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x195C JUMPI JUMPDEST DUP2 PUSH2 0x1922 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x18DB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1915 JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP10 SWAP6 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x17C2 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x19AB JUMPI JUMPDEST DUP2 PUSH2 0x1998 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI SWAP1 MLOAD SWAP1 PUSH2 0x1799 PUSH2 0x16E3 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x198B JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x15EB JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH2 0x260 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x19DD PUSH2 0x1DD0 JUMP JUMPDEST POP PUSH2 0x19E6 PUSH2 0x1DE6 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x178 JUMPI PUSH2 0x1A08 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x178 JUMPI PUSH2 0x1A22 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST POP POP PUSH2 0x180 SWAP3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x1A5A SWAP2 PUSH2 0x1FC8 JUMP JUMPDEST SWAP2 PUSH2 0x164 CALLDATALOAD SWAP3 DUP4 PUSH1 0x80 DUP3 ADD DUP1 MLOAD DUP3 GT PUSH2 0x1C79 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH2 0x1B23 DUP2 PUSH2 0x1B15 PUSH1 0x20 DUP3 ADD SWAP5 DUP6 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1E7F JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 PUSH1 0xE4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI DUP8 MSTORE PUSH2 0x104 CALLDATALOAD DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x124 CALLDATALOAD SWAP1 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x184 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1A4 SWAP3 DUP4 CALLDATALOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x1C4 SWAP1 DUP2 CALLDATALOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x1E4 SWAP7 DUP8 CALLDATALOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x204 SWAP5 DUP6 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x224 CALLDATALOAD PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x244 CALLDATALOAD DUP2 DUP7 ADD MSTORE DUP5 MSTORE PUSH2 0x1A0 DUP5 ADD SWAP7 DUP8 GT DUP5 DUP9 LT OR PUSH2 0x937 JUMPI DUP7 PUSH1 0x40 MSTORE DUP4 MLOAD SWAP1 KECCAK256 SUB PUSH2 0x1BFE JUMPI STOP JUMPDEST PUSH1 0x84 SWAP6 PUSH1 0x2F PUSH32 0x566572696679206F7264657220646F6573206E6F74206D617463682077697468 SWAP3 PUSH1 0x20 PUSH32 0x206578697374696E67206F726465720000000000000000000000000000000000 SWAP8 PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP7 ADD MSTORE DUP5 ADD MSTORE DUP3 ADD MSTORE ADD MSTORE REVERT JUMPDEST MSTORE DUP4 DUP6 PUSH2 0x1A6E JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x178 JUMPI PUSH32 0x62AF8DC200000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x1DA8 JUMPI DUP2 PUSH32 0x14A2A78400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x1D7E JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1D54 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1D2A JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x1D23 JUMP JUMPDEST PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1D1C JUMP JUMPDEST PUSH32 0xB8296FC400000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1D15 JUMP JUMPDEST PUSH32 0x3279856600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x178 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x178 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x178 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x178 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x178 JUMPI JUMP JUMPDEST PUSH2 0x180 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x937 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x178 JUMPI JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x178 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1F0E DUP3 PUSH2 0x1EA2 JUMP JUMPDEST SWAP3 PUSH2 0x1F1C PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1E7F JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x178 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x60 PUSH1 0x40 PUSH2 0x1F6D SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP6 ADD MSTORE ADD MLOAD SWAP2 DUP2 PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1EBE JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1F7D DUP3 PUSH2 0x1E2A JUMP JUMPDEST PUSH0 PUSH2 0x160 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE DUP3 PUSH2 0x140 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 PUSH2 0x1FD5 PUSH2 0x1F70 JUMP JUMPDEST POP DUP2 ADD SUB SLT PUSH2 0x178 JUMPI CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH2 0x1F6D SWAP1 PUSH2 0x2187 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x2006 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP3 PUSH1 0x60 SWAP3 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD SWAP3 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH1 0x20 PUSH0 DUP8 PUSH32 0x0 AND SWAP3 DUP4 PUSH1 0x24 DUP7 ADD MSTORE DUP2 PUSH1 0x44 DUP7 ADD MSTORE PUSH1 0x44 DUP6 MSTORE PUSH2 0x20CF DUP6 PUSH2 0x1E63 JUMP JUMPDEST DUP5 MLOAD SWAP1 DUP3 DUP12 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x2169 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x212C JUMPI JUMPDEST POP POP POP PUSH2 0x2118 DUP2 DUP4 DUP6 DUP8 AND SWAP7 DUP8 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x3 PUSH1 0x40 DUP3 KECCAK256 DUP3 DUP2 SSTORE DUP3 PUSH1 0x1 DUP3 ADD SSTORE DUP3 PUSH1 0x2 DUP3 ADD SSTORE ADD SSTORE PUSH2 0x262B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE LOG1 JUMP JUMPDEST PUSH2 0x2161 SWAP3 PUSH2 0x215B SWAP2 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x2155 DUP2 PUSH2 0x1E63 JUMP JUMPDEST DUP8 PUSH2 0x280A JUMP JUMPDEST DUP6 PUSH2 0x280A JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x20E7 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x217F JUMPI POP DUP6 DUP8 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x20DF JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x2178 JUMP JUMPDEST PUSH2 0x218F PUSH2 0x1F70 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH1 0x3 DUP3 MLOAD SWAP3 PUSH2 0x21B9 DUP5 PUSH2 0x1E63 JUMP JUMPDEST DUP5 DUP4 SLOAD AND DUP5 MSTORE DUP5 PUSH1 0x1 DUP5 ADD SLOAD AND SWAP5 DUP7 DUP6 ADD SWAP6 DUP7 MSTORE PUSH1 0x2 DUP5 ADD SLOAD SWAP4 DUP3 DUP7 ADD SWAP5 DUP6 MSTORE PUSH4 0xFFFFFFFF SWAP4 DUP5 SWAP2 ADD SLOAD AND SWAP5 PUSH1 0x60 DUP2 ADD SWAP6 DUP1 DUP8 MSTORE ISZERO PUSH2 0x232B JUMPI DUP2 SWAP1 MLOAD AND SWAP6 MLOAD AND SWAP2 DUP2 MLOAD SWAP4 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS PUSH1 0x4 DUP7 ADD MSTORE DUP8 DUP6 PUSH1 0x24 DUP2 DUP13 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x2321 JUMPI PUSH0 SWAP6 PUSH2 0x22F2 JUMPI JUMPDEST POP MLOAD SWAP5 MLOAD AND SWAP5 PUSH32 0x0 SWAP7 DUP3 MLOAD SWAP9 PUSH2 0x2270 DUP11 PUSH2 0x1E2A JUMP JUMPDEST DUP10 MSTORE DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH32 0x0 PUSH1 0xC0 DUP4 ADD MSTORE PUSH0 PUSH1 0xE0 DUP4 ADD MSTORE PUSH32 0x0 PUSH2 0x100 DUP4 ADD MSTORE PUSH1 0x1 PUSH2 0x120 DUP4 ADD MSTORE DUP1 PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x231A JUMPI JUMPDEST PUSH2 0x230A DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x223C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2300 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP9 DUP5 MLOAD SWAP1 PUSH32 0xC8FC272500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7264657220646F6573206E6F74206578697374000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND CALLER SUB PUSH2 0xF0D JUMPI JUMP JUMPDEST ISZERO PUSH2 0x23A2 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D696E20616D6F756E74206F7574206973207A65726F00000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST TIMESTAMP GT PUSH2 0x2408 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446561646C696E6520697320696E207468652070617374000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 PUSH0 DUP2 DUP6 ADD PUSH2 0x24BC DUP7 PUSH2 0x1828 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP10 DUP11 DUP6 MSTORE DUP8 PUSH1 0x24 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST DUP6 MLOAD SWAP1 DUP3 DUP7 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x2520 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x24DA JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x2517 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2512 SWAP3 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x250C DUP2 PUSH2 0x1E63 JUMP JUMPDEST DUP3 PUSH2 0x280A JUMP JUMPDEST PUSH2 0x280A JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 PUSH2 0x24D4 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x253D JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x24CC JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x2536 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP2 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE DUP2 DUP2 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP1 DUP6 LT DUP4 DUP7 GT OR PUSH2 0x937 JUMPI DUP5 DUP5 MSTORE PUSH2 0x25A6 DUP6 PUSH2 0x1E47 JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD MSTORE DUP1 EXTCODESIZE ISZERO PUSH2 0x178 JUMPI PUSH2 0x25FE PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x6BFAE1CA00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x1F3D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x2621 JUMPI PUSH2 0x2618 JUMPI POP POP POP JUMP JUMPDEST DUP3 GT PUSH2 0x937 JUMPI MSTORE JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x267D SWAP2 PUSH2 0x2512 DUP3 PUSH1 0x64 DUP2 ADD PUSH2 0x178B JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND DUP1 ISZERO PUSH2 0x273D JUMPI PUSH1 0x20 PUSH1 0x24 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP4 PUSH2 0x2709 JUMPI JUMPDEST POP DUP3 PUSH2 0x26F7 JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x2703 JUMPI PUSH1 0x1 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2735 JUMPI JUMPDEST DUP2 PUSH2 0x2725 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x26EA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2718 JUMP JUMPDEST POP PUSH0 SWAP2 POP DUP2 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 SWAP2 SWAP3 AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND SWAP3 DUP4 ISZERO PUSH2 0x2800 JUMPI SWAP1 PUSH1 0x20 PUSH1 0x24 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP1 PUSH2 0x27CC JUMPI JUMPDEST PUSH2 0x27BF SWAP3 POP PUSH2 0x1FF9 JUMP JUMPDEST SWAP2 DUP3 PUSH2 0x26F7 JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x27F8 JUMPI JUMPDEST DUP2 PUSH2 0x27E6 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x27BF SWAP2 MLOAD PUSH2 0x27B5 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x27D9 JUMP JUMPDEST POP POP SWAP1 POP PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 PUSH1 0x20 SWAP2 DUP3 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL ISZERO PUSH2 0x8C8 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x286E JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x2839 JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x2832 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 PUSH22 0x52BDBF91926DC34E36927C2968116A3141DCD8DC11B5 NUMBER 0xBE PUSH29 0x1C2655140D64736F6C634300081B003300000000000000000000000000 ","sourceMap":"1248:3961:77:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;;:::i;:::-;1500:62:49;;:::i;:::-;-1:-1:-1;;;;;1248:3961:77;;;;;;1738:24:50;1248:3961:77;;;1738:24:50;1248:3961:77;;;;1777:43:50;1248:3961:77;1777:43:50;;1248:3961:77;;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;-1:-1:-1;;;;;1311:13:50;1248:3961:77;;;;;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;;:::i;:::-;;;:::i;:::-;;;-1:-1:-1;;;;;1248:3961:77;;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;-1:-1:-1;;;;;799:18:78;1248:3961:77;777:10:78;:41;773:97;;551:66:42;2806:53:43;1316:93:42;;1248:3961:77;551:66:42;3051:52:43;1248:3961:77;;3212:20;1248:3961;3212:20;;1248:3961;;;;-1:-1:-1;;;;;1248:3961:77;;3212:20;;;;;;;1248:3961;3212:20;;;1248:3961;;;;;;1745:53:60;;;777:10:78;1745:53:60;;;1248:3961:77;3459:4;1248:3961;;;;;;;;;;;1745:53:60;;1248:3961:77;;;;;;;;;;;;;;;1745:53:60;1248:3961:77;;;;-1:-1:-1;;;;;1248:3961:77;;1745:53:60;:::i;:::-;1248:3961:77;;3696:40;1248:3961;3696:40;;3459:4;1248:3961;3696:40;;1248:3961;;;1745:53:60;1248:3961:77;-1:-1:-1;;;;;1248:3961:77;;3696:40;;;;;;;1248:3961;3696:40;;;1248:3961;;;-1:-1:-1;;;;;1248:3961:77;;;;;3747:72;;;;;1248:3961;3747:72;;1248:3961;;;3747:72;;1248:3961;3459:4;1745:53:60;1248:3961:77;;;3459:4;1248:3961;;;;;3747:72;;;;;;;;1248:3961;;;;3861:40;1248:3961;3861:40;;3459:4;1248:3961;3861:40;;1248:3961;;;1745:53:60;1248:3961:77;-1:-1:-1;;;;;1248:3961:77;;3861:40;;;;;;1248:3961;3861:40;;;1248:3961;3935:44;;;;:::i;:::-;1248:3961;;;;;3994:43;;1248:3961;;;4060:78;-1:-1:-1;;;;;4060:78:77;;1248:3961;4060:78;1248:3961;;;1745:53:60;1248:3961:77;;;;;;;;;4060:78;3990:261;4159:26;;4155:96;;-1:-1:-1;;;;;1248:3961:77;;-1:-1:-1;;;;;1248:3961:77;;4484:30;4480:721;1248:3961;;;;1237:14:36;1248:3961:77;;1460:31:36;4644:47:77;;4640:171;;1248:3961;;4865:21;1248:3961;-1:-1:-1;;;;;1248:3961:77;;;;4865:21;:::i;:::-;1248:3961;551:66:42;3051:52:43;1248:3961:77;4640:171;-1:-1:-1;;;;;4718:78:77;;;1248:3961;4718:78;1248:3961;;;1745:53:60;1248:3961:77;1237:14:36;1248:3961:77;;1460:31:36;1248:3961:77;;;;4718:78;4480:721;1248:3961;;;-1:-1:-1;;;;;1248:3961:77;;-1:-1:-1;;;;;1248:3961:77;;6365:23:76;6361:239;1248:3961:77;;;;;;6411:65:76;;;1248:3961:77;;6411:65:76;;1248:3961:77;;1745:53:60;1248:3961:77;;;;;;;;;;;;;6411:65:76;6361:239;6497:19;;6493:107;;6629:23;1237:14:36;1248:3961:77;;1460:31:36;6629:23:76;:::i;:::-;6678:8;1248:3961:77;;6678:8:76;:::i;:::-;6844:51;1248:3961:77;-1:-1:-1;;;;;1248:3961:77;;6844:51:76;:::i;:::-;1248:3961:77;;;;;;;;6909:33:76;;;:65;;;6361:239;6905:310;;1248:3961:77;;;-1:-1:-1;;;;;1248:3961:77;;7540:98:76;1248:3961:77;7241:8:76;1248:3961:77;;;7241:8:76;:::i;:::-;7297:14;7283:12;;1248:3961:77;;;7297:14:76;:::i;:::-;1248:3961:77;;7323:7:76;1248:3961:77;;;;;:::i;:::-;;;;;;;7343:181:76;;1248:3961:77;;;;;;;7343:181:76;;1248:3961:77;1237:14:36;1248:3961:77;;1460:31:36;1248:3961:77;;7343:181:76;;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1237:14:36;1248:3961:77;;1460:31:36;1248:3961:77;;;;;;;;;;;;;;;;;7540:98:76;;4480:721:77;;6905:310:76;7172:32;1248:3961:77;7172:32:76;1248:3961:77;;;;1745:53:60;1248:3961:77;7172:32:76;1248:3961:77;;;;;;;1745:53:60;1248:3961:77;;6909:65:76;1248:3961:77;;;6956:18:76;6946:28;;;6909:65;;6493:107;1248:3961:77;;;6539:50:76;;;1248:3961:77;;6539:50:76;;1248:3961:77;;1745:53:60;1248:3961:77;;;;;;;;6539:50:76;4155:96:77;-1:-1:-1;;;;;4208:32:77;;1248:3961;4208:32;1248:3961;;;1745:53:60;1248:3961:77;4208:32;3861:40;;1248:3961;3861:40;;1248:3961;3861:40;;;;;;1248:3961;3861:40;;;:::i;:::-;;;1248:3961;;;;3935:44;1248:3961;;3861:40;;;;;-1:-1:-1;3861:40:77;;;1248:3961;;;;;;;;;3747:72;1248:3961;3747:72;;1248:3961;3747:72;;;;;;1248:3961;3747:72;;;:::i;:::-;;;1248:3961;;;;;3747:72;;;;;-1:-1:-1;3747:72:77;;3696:40;;;;1248:3961;3696:40;;1248:3961;3696:40;;;;;;1248:3961;3696:40;;;:::i;:::-;;;1248:3961;;;;;;;3696:40;;;;;-1:-1:-1;3696:40:77;;1248:3961;;;;;;;1745:53:60;1248:3961:77;;3212:20;;;;1248:3961;3212:20;;1248:3961;3212:20;;;;;;1248:3961;3212:20;;;:::i;:::-;;;1248:3961;;;;;;;:::i;:::-;3212:20;;;;;;;-1:-1:-1;3212:20:77;;1316:93:42;1368:30;1248:3961:77;1368:30:42;1248:3961:77;;1368:30:42;773:97:78;841:18;1248:3961:77;841:18:78;1248:3961:77;;841:18:78;1248:3961:77;;;;;-1:-1:-1;;1248:3961:77;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;1248:3961:77;;;;956:36:78;;1248:3961:77;956:18:78;;;1248:3961:77;956:18:78;;;1248:3961:77;956:36:78;;;;;;;;1248:3961:77;956:36:78;;;1248:3961:77;;;942:10:78;:50;;:75;;;1248:3961:77;938:131:78;;11575:37:76;;;:::i;:::-;1248:3961:77;;;;;;;;3825:18:76;3815:28;;3811:98;;3938:12;;;;:::i;:::-;3976:8;;;:::i;:::-;1248:3961:77;;;;;;;3825:18:76;1248:3961:77;;3825:18:76;1248:3961:77;;;3996:29:76;;;;1248:3961:77;4050:25:76;1248:3961:77;;;;;;;;;;4205:12:76;1248:3961:77;;;4172:46:76;1248:3961:77;4172:46:76;;4198:4;1248:3961:77;4172:46:76;;1248:3961:77;;;;;;;4172:46:76;;1248:3961:77;4172:46:76;;;;;;;;;1248:3961:77;4172:46:76;;;1248:3961:77;4172:55:76;4346:53;4172:55;;;;;1248:3961:77;4172:55:76;;;;4322:7;4172:55;;4168:128;;1248:3961:77;4322:7:76;;;:::i;:::-;1248:3961:77;;;;;;;;;;;;;;;;4346:53:76;1248:3961:77;4168:128:76;4278:6;;;;:::i;:::-;4168:128;;;;4172:46;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1248:3961:77;;;;;4172:46:76;;;;;;1248:3961:77;;4172:46:76;;1248:3961:77;4346:53:76;4172:46;;;;;;;3811:98;3866:32;1248:3961:77;3866:32:76;1248:3961:77;;;;3866:32:76;942:75:78;1248:3961:77;;;;;942:10:78;996:21;;942:75;;956:36;;;;;;;;;;;;;;;;;;:::i;:::-;;;1248:3961:77;;;;;;;;:::i;:::-;956:36:78;;;;;;;;1248:3961:77;;;;;-1:-1:-1;;1248:3961:77;;;;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;;;-1:-1:-1;;;;;2357:37:76;1248:3961:77;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;;;-1:-1:-1;;;;;2306:45:76;1248:3961:77;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;;;2400:32:76;1248:3961:77;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;1311:13:50;1248:3961:77;-1:-1:-1;;;;;735:10:64;1248:3961:77;;;2339:24:50;2335:96;;1248:3961:77;;;;1311:13:50;1248:3961:77;;;735:10:64;;1248:3961:77;;;;;;735:10:64;1248:3961:77;;3052:40:49;1248:3961:77;3052:40:49;;1248:3961:77;2335:96:50;2386:34;1248:3961:77;2386:34:50;735:10:64;1248:3961:77;;;;2386:34:50;1248:3961:77;;;;;-1:-1:-1;;1248:3961:77;;;;;1500:62:49;;:::i;:::-;1248:3961:77;-1:-1:-1;;;;;1248:3961:77;;2093:20:50;1248:3961:77;;2093:20:50;1248:3961:77;;;;;;;;;3052:40:49;;;;1248:3961:77;;;;;;-1:-1:-1;;1248:3961:77;;;;;11575:37:76;1248:3961:77;;:::i;:::-;11575:37:76;:::i;:::-;1248:3961:77;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;3348:18:76;1248:3961:77;;:::i;:::-;;;:::i;:::-;;3348:18:76;:::i;1248:3961:77:-;;;;;-1:-1:-1;;1248:3961:77;;;;;;;:::i;:::-;;;:::i;:::-;;;;956:36:78;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;956:18:78;1248:3961:77;;956:36:78;;;;;;;;1248:3961:77;956:36:78;;;1248:3961:77;;;942:10:78;:50;;:75;;;1248:3961:77;938:131:78;;1248:3961:77;;;;;4969:32:76;;;;1248:3961:77;4969:32:76;;4995:4;1248:3961:77;4969:32:76;;1248:3961:77;;;4969:32:76;;;;;;;1248:3961:77;4969:32:76;;;1248:3961:77;4969:32:76;;;;;:::i;:::-;1248:3961:77;4969:32:76;;;;;;;;;;;;;;;;:::i;:::-;;;1248:3961:77;;;;4969:32:76;1248:3961:77;;4969:32:76;;;;;;;;;942:75:78;1248:3961:77;;;;;942:10:78;996:21;;942:75;;956:36;;;;;;;;;;;;;;;;;;:::i;:::-;;;1248:3961:77;;;;;;;;:::i;:::-;956:36:78;;;;;;;;1248:3961:77;;;;;-1:-1:-1;;1248:3961:77;;;;;;;:::i;:::-;;;:::i;:::-;-1:-1:-1;;;;;1248:3961:77;;;956:36:78;;1248:3961:77;956:18:78;1248:3961:77;956:18:78;;;1248:3961:77;956:36:78;;;;;;;;1248:3961:77;956:36:78;;;1248:3961:77;;;942:10:78;:50;;:75;;;;1248:3961:77;938:131:78;;;11575:37:76;;;:::i;:::-;1248:3961:77;;;;;;;;;4646:18:76;4636:28;;4632:98;;4772:6;;;;:::i;4632:98::-;4687:32;;1248:3961:77;4687:32:76;1248:3961:77;;;;4687:32:76;942:75:78;1248:3961:77;;;;;942:10:78;996:21;;942:75;;;956:36;;;;1248:3961:77;956:36:78;;1248:3961:77;956:36:78;;;;;;1248:3961:77;956:36:78;;;:::i;:::-;;;1248:3961:77;;;;;;;;:::i;:::-;956:36:78;;;;;;-1:-1:-1;956:36:78;;1248:3961:77;;;;;-1:-1:-1;;1248:3961:77;;;;;;;;991:8:38;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;991:8:38;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;-1:-1:-1;1248:3961:77;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;;;-1:-1:-1;;;;;479:55:78;1248:3961:77;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9344:92:76;;;1248:3961:77;9344:92:76;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;9646:31:76;1248:3961:77;9646:31:76;;1248:3961:77;9512:13:76;1248:3961:77;9512:13:76;;;1248:3961:77;9646:31:76;;;;;;;1248:3961:77;9646:31:76;;;1248:3961:77;;;9723:17:76;;1248:3961:77;;;9723:17:76;;;1248:3961:77;9723:17:76;;1248:3961:77;;;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9723:17:76;;-1:-1:-1;;9723:17:76;;;;;;:::i;:::-;1248:3961:77;;9758:19:76;;1248:3961:77;9758:19:76;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9758:19:76;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;9758:19:76;-1:-1:-1;;9758:19:76;;;;;;:::i;:::-;1248:3961:77;;;9512:279:76;;;;;;;1248:3961:77;9512:279:76;;9572:4;1248:3961:77;9512:279:76;;1248:3961:77;9595:10:76;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;1248:3961:77;;;;;;;;;:::i;:::-;9512:279:76;:13;;1248:3961:77;9512:279:76;;;;;;1248:3961:77;9512:279:76;;;1248:3961:77;;;;;;;;;;;9512:279:76;;1248:3961:77;9512:279:76;;1248:3961:77;9512:279:76;;;;;;1248:3961:77;9512:279:76;;;:::i;:::-;;;1248:3961:77;;;;;;;;;;;;;9512:279:76;;;;;;-1:-1:-1;9512:279:76;;1248:3961:77;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;9646:31:76;;;1248:3961:77;9646:31:76;;1248:3961:77;9646:31:76;;;;;;1248:3961:77;9646:31:76;;;:::i;:::-;;;1248:3961:77;;;;;;;9723:17:76;9646:31;;;;;-1:-1:-1;9646:31:76;;1248:3961:77;;;;;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:77;;;;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;8546:65:76;;;:::i;:::-;1248:3961:77;8626:16:76;1248:3961:77;8645:20:76;;1248:3961:77;8645:20:76;;1248:3961:77;;8626:39:76;;8622:109;;1248:3961:77;;;;;8755:22:76;;;1248:3961:77;8755:22:76;;;;1248:3961:77;;;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8755:22:76;;-1:-1:-1;;8755:22:76;;;;;;:::i;:::-;1248:3961:77;8745:33:76;;1248:3961:77;;;;8792:18:76;;1248:3961:77;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8792:18:76;;1248:3961:77;;;;;;;;;;;;;;;;;8782:29:76;;8745:66;8741:177;;1248:3961:77;8741:177:76;1248:3961:77;8834:73:76;1248:3961:77;;8834:73:76;1248:3961:77;;8834:73:76;;;;;;1248:3961:77;;;;;;;;;8834:73:76;8622:109;1248:3961:77;8622:109:76;;;;1248:3961:77;;;;;-1:-1:-1;;1248:3961:77;;;;;;;;;;;;;;;;;10011:50:76;;10007:123;;10159:53;10174:38;1248:3961:77;10159:53:76;;:131;;;;;1248:3961:77;10159:188:76;;;;1248:3961:77;10159:244:76;;;;1248:3961:77;;;;;;;10159:244:76;10378:25;10363:40;;;10159:244;;;:188;10321:26;10306:41;;;-1:-1:-1;10159:188:76;;:131;10243:47;10228:62;;;-1:-1:-1;10159:131:76;;10007:123;10084:35;1248:3961:77;10084:35:76;1248:3961:77;;10084:35:76;1248:3961:77;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;1248:3961:77;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;1248:3961:77;;;;:::o;:::-;;-1:-1:-1;;1248:3961:77;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1248:3961:77;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;1248:3961:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7917:295:76:-;;;1248:3961:77;7917:295:76;1248:3961:77;;:::i;:::-;;8134:34:76;;1248:3961:77;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;8187:18:76;;;:::i;1248:3961:77:-;;;;;;;;;;:::o;:::-;;;;;;;;;;5015:284:76;5252:40;5015:284;1248:3961:77;5015:284:76;1248:3961:77;;5199:47:60;;;;1248:3961:77;;5199:47:60;;;;-1:-1:-1;;;;;5127:12:76;5199:47:60;5141:1:76;5127:12;;1248:3961:77;5199:47:60;;;;;1248:3961:77;;;;;;;5199:47:60;;;;;:::i;:::-;9770:199;;;;;;;5141:1:76;9770:199:60;;9985:80;;;5015:284:76;5261:45:60;;;5257:201;;5015:284:76;1248:3961:77;;;5229:6:76;1248:3961:77;;;;;;;5141:1:76;1248:3961:77;5160:7:76;5199:47:60;1248:3961:77;5141:1:76;5160:7;1248:3961:77;;;;;;;;;;;;;;;;;;5229:6:76;:::i;:::-;1248:3961:77;;;;;5199:47:60;1248:3961:77;;;;;;;;5252:40:76;5015:284::o;5257:201:60:-;5434:12;1248:3961:77;5349:43:60;1248:3961:77;;;5349:43:60;5199:47;5349:43;;;5199:47;5349:43;;1248:3961:77;5141:1:76;1248:3961:77;;;;;5349:43:60;;;;;:::i;:::-;;;:::i;:::-;5434:12;;:::i;:::-;5257:201;;;;;9985:80;9997:67;;-1:-1:-1;9997:15:60;;1248:3961:77;;;;10015:26:60;:30;;9997:67;9985:80;;;;9997:67;10063:1;10048:16;9997:67;;10629:828:76;1248:3961:77;;:::i;:::-;;-1:-1:-1;;;;;1248:3961:77;;;;;-1:-1:-1;1248:3961:77;;;10745:7:76;1248:3961:77;;;;-1:-1:-1;1248:3961:77;10745:7:76;1248:3961:77;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10776:24:76;10772:99;;1248:3961:77;;;;;;;;;;11070:32:76;1248:3961:77;11070:32:76;;11096:4;11070:32;;;1248:3961:77;11070:32:76;;1248:3961:77;11070:32:76;;;;;;;;;-1:-1:-1;11070:32:76;;;10629:828;1248:3961:77;;;;;11374:13:76;;1248:3961:77;;;;;;;:::i;:::-;;;10900:550:76;;1248:3961:77;10900:550:76;;1248:3961:77;;10900:550:76;;1248:3961:77;;10900:550:76;;1248:3961:77;10900:550:76;;;1248:3961:77;11227:7:76;10900:550;;;1248:3961:77;-1:-1:-1;1248:3961:77;10900:550:76;;1248:3961:77;11288:9:76;10900:550;;;1248:3961:77;;10900:550:76;;;1248:3961:77;10900:550:76;;;;1248:3961:77;10900:550:76;;;1248:3961:77;10629:828:76;:::o;11070:32::-;;;;;;;;;;;;;;;;;:::i;:::-;;;1248:3961:77;;;;;11070:32:76;;;;;;;;;;1248:3961:77;;;-1:-1:-1;1248:3961:77;;;;;10772:99:76;1248:3961:77;;;;10823:37:76;;;;;;;1248:3961:77;;;;;;;;;;;10823:37:76;1796:162:49;-1:-1:-1;;;;;1710:6:49;1248:3961:77;;735:10:64;1855:23:49;1851:101;;1796:162::o;12930:182:76:-;13007:17;13003:103;;12930:182::o;13003:103::-;1248:3961:77;;;13047:48:76;;;1248:3961:77;13047:48:76;;;1248:3961:77;;;;;;;;;;;13047:48:76;12740:184;12809:15;:26;12805:113;;12740:184::o;12805:113::-;1248:3961:77;;;12858:49:76;;;1248:3961:77;12858:49:76;;;1248:3961:77;;;;;;;;;;;12858:49:76;5084:380:60;1248:3961:77;;5199:47:60;;-1:-1:-1;5199:47:60;;;;1248:3961:77;5199:47:60;1248:3961:77;5199:47:60;;;;;;;;1248:3961:77;;;;;;-1:-1:-1;;;;;1248:3961:77;;;;;;;;;;5199:47:60;9770:199;;;;;;;-1:-1:-1;9770:199:60;;9985:80;;;5084:380;5261:45;;;5257:201;;5084:380;;;;;:::o;5257:201::-;5434:12;1248:3961:77;-1:-1:-1;;;;;5349:43:60;1248:3961:77;;;5349:43:60;5199:47;5349:43;;;1248:3961:77;5199:47:60;5349:43;;1248:3961:77;-1:-1:-1;1248:3961:77;;;;;5349:43:60;;;;;:::i;:::-;;;:::i;:::-;5434:12;:::i;:::-;5257:201;;;;;;9985:80;9997:67;;-1:-1:-1;9997:15:60;;1248:3961:77;-1:-1:-1;;;;;1248:3961:77;;10015:26:60;:30;;9997:67;9985:80;;;;9997:67;10063:1;10048:16;9997:67;;13118:332:76;-1:-1:-1;;;;;13177:13:76;;1248:3961:77;;;;;;;;13381:19:76;;;1248:3961:77;13381:19:76;;;1248:3961:77;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13311:4:76;1248:3961:77;;13349:1:76;13211:204;;;1248:3961:77;13211:204:76;;;1248:3961:77;13177:266:76;;;;;1248:3961:77;13349:1:76;1248:3961:77;;;;;;13177:266:76;;;;;;1248:3961:77;13177:266:76;;;;;;1248:3961:77;;;;;;:::i;:::-;13429:4:76;1248:3961:77;;;;13177:266:76;;;;;;;;;;13118:332;;;:::o;13177:266::-;1248:3961:77;;;;;13118:332:76:o;13177:266::-;1248:3961:77;;;13349:1:76;1248:3961:77;;;;;1219:160:60;1248:3961:77;;;1328:43:60;;;;-1:-1:-1;;;;;1248:3961:77;;;1328:43:60;;;1248:3961:77;;;;;;;;1328:43:60;;;1248:3961:77;;;;1328:43:60;1248:3961:77;1328:43:60;1219:160::o;11625:1109:76:-;-1:-1:-1;;;;;1248:3961:77;;;;;11806:7:76;1248:3961:77;;;11806:7:76;1248:3961:77;;;11852:19:76;1248:3961:77;;11886:13:76;;11882:147;;1248:3961:77;;;;;12148:32:76;;;;1248:3961:77;12148:32:76;;12174:4;12148:32;;;1248:3961:77;12148:32:76;;;;;;;1248:3961:77;12148:32:76;;;11625:1109;-1:-1:-1;12209:12:76;;;12397:36;12405:18;12397:36;;:::o;12205:427::-;12454:15;:26;12450:182;;12699:18;12691:36;11625:1109;:::o;12450:182::-;11806:7;12585:36;;:::o;12148:32::-;;;;1248:3961:77;12148:32:76;;1248:3961:77;12148:32:76;;;;;;1248:3961:77;12148:32:76;;;:::i;:::-;;;1248:3961:77;;;;;12148:32:76;;;;;;;-1:-1:-1;12148:32:76;;11882:147;-1:-1:-1;1248:3961:77;;-1:-1:-1;1248:3961:77;;11983:35:76:o;11625:1109::-;-1:-1:-1;;;;;11625:1109:76;;;;1248:3961:77;;;;;11806:7:76;1248:3961:77;;;11806:7:76;1248:3961:77;;;11852:19:76;1248:3961:77;;11886:13:76;;;11882:147;;1248:3961:77;;;;;;12148:32:76;;;;1248:3961:77;12148:32:76;;12174:4;12148:32;;;1248:3961:77;12148:32:76;;;;;;1248:3961:77;12148:32:76;;;11625:1109;12148:47;;;;:::i;:::-;12209:12;;;;12397:36;12405:18;12397:36;;:::o;12148:32::-;;1248:3961:77;12148:32:76;;1248:3961:77;12148:32:76;;;;;;1248:3961:77;12148:32:76;;;:::i;:::-;;;1248:3961:77;;;;12148:47:76;1248:3961:77;;12148:32:76;;;;;-1:-1:-1;12148:32:76;;11882:147;11983:35;;;;1248:3961:77;11983:35:76;1248:3961:77;11983:35:76;:::o;8370:720:60:-;;-1:-1:-1;8507:421:60;8370:720;8507:421;;;;;;;;;;;;-1:-1:-1;8507:421:60;;8942:15;;1248:3961:77;-1:-1:-1;;;;;1248:3961:77;;8960:26:60;:31;8942:68;8938:146;;8370:720;:::o;8938:146::-;-1:-1:-1;;;;;9033:40:60;;-1:-1:-1;9033:40:60;1248:3961:77;9033:40:60;1248:3961:77;;-1:-1:-1;9033:40:60;8942:68;9009:1;8994:16;;8942:68;"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","appData()":"8aebd348","burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","cancelOrder(address,address)":"60e092c6","composableCow()":"93504c52","emergencyCancelOrder(address,address)":"68bce712","getOrder(address)":"6eba2b13","getOrderStatus(address)":"6f9d75cd","getTradeableOrder(address,address,bytes32,bytes,bytes)":"b8296fc4","isValidSignature(bytes32,bytes)":"1626ba7e","owner()":"8da5cb5b","pendingOwner()":"e30c3978","protocolFeeSweeper()":"178ac96e","renounceOwnership()":"715018a6","retryOrder(address,uint256,uint256)":"d83b06a4","supportsInterface(bytes4)":"01ffc9a7","transferOwnership(address)":"f2fde38b","vaultRelayer()":"9b552cc2","verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))":"14a2a784","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"_protocolFeeSweeper\",\"type\":\"address\"},{\"internalType\":\"contract IComposableCow\",\"name\":\"_composableCow\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_cowVaultRelayer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_appData\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_version\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"AmountOutIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InterfaceIsSignatureVerifierMuxer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"InvalidOrderParameters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeSweeper\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"actualStatus\",\"type\":\"uint8\"}],\"name\":\"OrderHasUnexpectedStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"OrderNotValid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollNever\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtEpoch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryNextBlock\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"ConditionalOrderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"OrderCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"OrderRetried\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"appData\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"encodedMinAmountsOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"cancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"composableCow\",\"outputs\":[{\"internalType\":\"contract IComposableCow\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"emergencyCancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrderStatus\",\"outputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"getTradeableOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFeeSweeper\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"retryOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultRelayer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"_order\",\"type\":\"tuple\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function. Only one order per token is allowed at a time.\",\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"InvalidOrderParameters(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"OrderHasUnexpectedStatus(uint8)\":[{\"details\":\"`revertOrder` should only be called when the OrderStatus is `Failed`.\",\"params\":{\"actualStatus\":\"The status of the order when `revertOrder` was called\"}}],\"OrderNotValid(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PollNever(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be deleted\"}}],\"PollTryAtBlock(uint256,string)\":[{\"params\":{\"blockNumber\":\"The block number when polling should resume\",\"reason\":\"Text description of the reason it should be retried\"}}],\"PollTryAtEpoch(uint256,string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\",\"timestamp\":\"The unix timestamp when polling should resume\"}}],\"PollTryNextBlock(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\"}}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"ConditionalOrderCreated(address,(address,bytes32,bytes))\":{\"details\":\"Emitted when a new conditional order is created.\",\"params\":{\"owner\":\"The address that created the conditional order\",\"params\":\"The conditional order data\"}},\"OrderCanceled(address,uint256,address)\":{\"params\":{\"exactAmountIn\":\"The number of tokens in the order\",\"receiver\":\"The account that received the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"OrderRetried(address,uint256,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the new order to be filled\",\"exactAmountIn\":\"The number of tokens in the order\",\"minAmountOut\":\"The minimum number of target tokens required\",\"tokenIn\":\"The token used to identify the order\"}},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"encodedMinAmountsOut\":\"The minimum amounts out for the swap, encoded as a 256-bit integer: - Upper 128 bits: the minimum amount of the target token to receive - Lower 128 bits: the minimum amount of the ERC4626 token to receive\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (`tokenOut` of the swap)\"}},\"cancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"emergencyCancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"getOrder(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"_0\":\"The order data for the given token\"}},\"getOrderStatus(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"status\":\"The status of the order for the given token\"}},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"details\":\"**MUST** revert if the order conditions are not met.\",\"params\":{\"ctx\":\"The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\",\"offchainInput\":\"Off-chain input (similar to Balancer `userData`); currently unused\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` of the parent `isValidSignature` call\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"},\"returns\":{\"_0\":\"order Tradeable order for submission to the CoW Protocol API\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"Should return whether the signature provided is valid for the provided data\",\"params\":{\"hash\":\"Hash of the data to be signed\",\"signature\":\"Signature byte array associated with `hash`\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"retryOrder(address,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the order to be filled.\",\"minAmountOut\":\"The minimum number of target tokens to receive (tokenOut)\",\"tokenIn\":\"The token used to identify the order\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"details\":\"Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe. **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over the order verification logic, and to allow a watchtower / user to propose a discrete order without it being generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\",\"params\":{\"_hash\":\"`EIP712` order digest\",\"ctx\":\"See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\",\"domainSeparator\":\"`EIP712` domain separator\",\"offchainInput\":\"Type-specific data NOT known at time of creation for a specific discrete order (or zero)\",\"order\":\"The proposed discrete order's `GPv2Order` data struct\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` calling `isValidSignature`\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"title\":\"ERC4626CowSwapFeeBurner\",\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"AmountOutIsZero(address)\":[{\"notice\":\"The amount out is zero.\"}],\"InterfaceIsSignatureVerifierMuxer()\":[{\"notice\":\"Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\"}],\"InvalidOrderParameters(string)\":[{\"notice\":\"The order parameters were invalid.\"}],\"InvalidProtocolFeeSweeper()\":[{\"notice\":\"The fee protocol is invalid.\"}],\"OrderHasUnexpectedStatus(uint8)\":[{\"notice\":\"Attempt to revert an order that had not failed.\"}],\"OrderNotValid(string)\":[{\"notice\":\"This error is returned by the `getTradeableOrder` function if the order conditions are not met.\"}],\"PollNever(string)\":[{\"notice\":\"The conditional order should not be polled again (i.e., deleted).\"}],\"PollTryAtBlock(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific block number.\"}],\"PollTryAtEpoch(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific epoch (unix timestamp).\"}],\"PollTryNextBlock(string)\":[{\"notice\":\"Polling should be retried at the next block.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"OrderCanceled(address,uint256,address)\":{\"notice\":\"An order was canceled after failure.\"},\"OrderRetried(address,uint256,uint256,uint256)\":{\"notice\":\"An order was retried after failing.\"},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Treats `feeToken` as an ERC4626, redeems `exactFeeTokenAmountIn`, swaps the underlying asset for `targetToken`, and sends the proceeds to the `recipient`.\"},\"cancelOrder(address,address)\":{\"notice\":\"Return tokens from an order that has failed.\"},\"emergencyCancelOrder(address,address)\":{\"notice\":\"Emergency return tokens from an order regardless of status.\"},\"getOrder(address)\":{\"notice\":\"Get the order at the sell token.\"},\"getOrderStatus(address)\":{\"notice\":\"Get the status of the order at the sell token.\"},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"notice\":\"Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\"},\"retryOrder(address,uint256,uint256)\":{\"notice\":\"Retry an order that has not been filled yet and expired.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"notice\":\"Verify that a given discrete order is valid.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"A contract that burns ERC4626 protocol fee tokens using CowSwap, previously redeeming underlying assets.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ERC4626CowSwapFeeBurner.sol\":\"ERC4626CowSwapFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\":{\"keccak256\":\"0xc82721c94d5e741f168aed4c94dc6a9006cb3348bee7398a5e3fa9b7e28557bd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://784c16c17fb89736ec5be650668d81a548acec3ccc2073e2be0f79029f84f512\",\"dweb:/ipfs/QmSk9seqC2YEJqy5pPdXKjmhEKoQhXQdQXCN4f9R8jcXKX\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":{\"keccak256\":\"0x7b8f0149ba41d28c3d0cd956911816b083f7ccec35ddc7bb7fdb829c3c11d9b2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2d39a71115b9018711726b6c7498038e6d3a41338fa635c88cc8025b4e0e5f34\",\"dweb:/ipfs/QmYqnnkXCd1yjs6kpQgxNUotpudgN37X5FTFNFyKE62PMj\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\":{\"keccak256\":\"0xc3717c516d816bd012f47a18bfd69f7887ce262435c10be9748beb4b11aee033\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://237a9295364524846f26c1b92b523e6039b414d3b691f77ba55c6deefa4b14bc\",\"dweb:/ipfs/QmXYg1paW7kDeXCFkiunzSWSWT3DD2p15CHnJZzDyEQ6Jo\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x66c7ec42c6c43712be2107a50ab4529379bc76a632b425babec698d9da921ac6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dce2778f0b638adfc5ba29c2c618c855fe725fa74a16846386aa1d56a834aa04\",\"dweb:/ipfs/QmPV9oWnzQdi58od266j62xvviavLNHqKLZfm6k2K1qy9E\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/CowSwapFeeBurner.sol\":{\"keccak256\":\"0xa37c5fd04da51fc47ce8bfe6c4a0b6c0b7687af60849420f11de03f62c2a9fa3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d35b60d3e201e591583d43a5133e0c7cc8984a64be325d66c09d02939b75149c\",\"dweb:/ipfs/Qmd298snw1uayUE9LsjPiwcvKcPsKto1v4zKePKXV5Q7fb\"]},\"contracts/ERC4626CowSwapFeeBurner.sol\":{\"keccak256\":\"0xc9955ccec1e4850bd1a47fcaa7297c50948fedf2988edd9a261cf2854d00f912\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://36f4d78fb2e64a3a906a9843a7efbda051a92a2821152dbe76fb6eaa7fd9a5ba\",\"dweb:/ipfs/QmVQJbvMRLsXsuWogwbgXv2PJDS5t1snq6c5mvYangeSeH\"]},\"contracts/FeeBurnerAuthentication.sol\":{\"keccak256\":\"0x4861db67bf113a4775c165241802df34a6c0e9fefaec82e8aaf969b5879759f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f522b3af683e09e1b67ed515be9972e7cf9514a584e264c4ca9656cc12c2f06\",\"dweb:/ipfs/QmNYqMsvWcNqACozLm3cYeR4oC3KKfKNBDSqR3vcpjv3zo\"]}},\"version\":1}"}},"contracts/FeeBurnerAuthentication.sol":{"FeeBurnerAuthentication":{"abi":[{"inputs":[{"internalType":"contract IProtocolFeeSweeper","name":"_protocolFeeSweeper","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidProtocolFeeSweeper","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeSweeper","outputs":[{"internalType":"contract IProtocolFeeSweeper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a0346100e957601f61043738819003918201601f19168301916001600160401b038311848410176100ed5780849260409485528339810103126100e95780516001600160a01b0391828216908183036100e957602001518381168091036100e95780156100d65760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3156100c75760805261033590816101028239608051816102bb0152f35b63932c92a560e01b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c908163178ac96e1461029157508063715018a61461020c57806379ba5097146101555780638da5cb5b14610123578063e30c3978146100f05763f2fde38b1461005e575f80fd5b346100ec5760206003193601126100ec5760043573ffffffffffffffffffffffffffffffffffffffff8082168092036100ec576100996102df565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b346100ec575f6003193601126100ec57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100ec575f6003193601126100ec57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100ec575f6003193601126100ec5760015473ffffffffffffffffffffffffffffffffffffffff33818316036101e0577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b346100ec575f6003193601126100ec576102246102df565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346100ec575f6003193601126100ec5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b73ffffffffffffffffffffffffffffffffffffffff5f541633036101e05756fea26469706673582212203ed8463bc743d2efb939cc670ea5ba6990b6c050196061d0e492a37fda001cfb64736f6c634300081b0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH2 0xE9 JUMPI PUSH1 0x1F PUSH2 0x437 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0xED JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0xE9 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0xE9 JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0xE9 JUMPI DUP1 ISZERO PUSH2 0xD6 JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ISZERO PUSH2 0xC7 JUMPI PUSH1 0x80 MSTORE PUSH2 0x335 SWAP1 DUP2 PUSH2 0x102 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x2BB ADD MSTORE RETURN JUMPDEST PUSH4 0x932C92A5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x178AC96E EQ PUSH2 0x291 JUMPI POP DUP1 PUSH4 0x715018A6 EQ PUSH2 0x20C JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0xF0 JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0x5E JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xEC JUMPI PUSH2 0x99 PUSH2 0x2DF JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0x1E0 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH2 0x224 PUSH2 0x2DF JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x1E0 JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATACOPY 0xD8 CHAINID EXTCODESIZE 0xC7 NUMBER 0xD2 0xEF 0xB9 CODECOPY 0xCC PUSH8 0xEA5BA6990B6C050 NOT PUSH1 0x61 0xD0 0xE4 SWAP3 LOG3 PUSH32 0xDA001CFB64736F6C634300081B00330000000000000000000000000000000000 ","sourceMap":"424:941:78:-:0;;;;;;;;;;;;;-1:-1:-1;;424:941:78;;;;-1:-1:-1;;;;;424:941:78;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;424:941:78;;;;;;;;;;;;;;;;;;;;;1273:26:49;;1269:95;;424:941:78;;;;;;;;2093:20:50;424:941:78;;2093:20:50;424:941:78;;-1:-1:-1;424:941:78;;;;;-1:-1:-1;424:941:78;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1203:42:78;1199:107;;1316:40;;424:941;;;;;;1316:40;424:941;;;;;;1199:107;1268:27;;;-1:-1:-1;1268:27:78;;-1:-1:-1;1268:27:78;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;424:941:78;;-1:-1:-1;1322:31:49;424:941:78;-1:-1:-1;424:941:78;;;;;;-1:-1:-1;424:941:78;;;;;-1:-1:-1;424:941:78"},"deployedBytecode":{"functionDebugData":{"fun_checkOwner":{"entryPoint":735,"id":9423,"parameterSlots":0,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"19771":[{"length":32,"start":699}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c908163178ac96e1461029157508063715018a61461020c57806379ba5097146101555780638da5cb5b14610123578063e30c3978146100f05763f2fde38b1461005e575f80fd5b346100ec5760206003193601126100ec5760043573ffffffffffffffffffffffffffffffffffffffff8082168092036100ec576100996102df565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b346100ec575f6003193601126100ec57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100ec575f6003193601126100ec57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100ec575f6003193601126100ec5760015473ffffffffffffffffffffffffffffffffffffffff33818316036101e0577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b346100ec575f6003193601126100ec576102246102df565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346100ec575f6003193601126100ec5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b73ffffffffffffffffffffffffffffffffffffffff5f541633036101e05756fea26469706673582212203ed8463bc743d2efb939cc670ea5ba6990b6c050196061d0e492a37fda001cfb64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x178AC96E EQ PUSH2 0x291 JUMPI POP DUP1 PUSH4 0x715018A6 EQ PUSH2 0x20C JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0xF0 JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0x5E JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xEC JUMPI PUSH2 0x99 PUSH2 0x2DF JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0x1E0 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH2 0x224 PUSH2 0x2DF JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x1E0 JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATACOPY 0xD8 CHAINID EXTCODESIZE 0xC7 NUMBER 0xD2 0xEF 0xB9 CODECOPY 0xCC PUSH8 0xEA5BA6990B6C050 NOT PUSH1 0x61 0xD0 0xE4 SWAP3 LOG3 PUSH32 0xDA001CFB64736F6C634300081B00330000000000000000000000000000000000 ","sourceMap":"424:941:78:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;424:941:78;;;;;;;;;;;;;;;;1500:62:49;;:::i;:::-;424:941:78;;1738:24:50;424:941:78;;;1738:24:50;424:941:78;;;;1777:43:50;424:941:78;1777:43:50;;424:941:78;;;;;;;;;;-1:-1:-1;;424:941:78;;;;;;;1311:13:50;424:941:78;;;;;;;;;;;;;-1:-1:-1;;424:941:78;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;424:941:78;;;;;1311:13:50;424:941:78;;735:10:64;424:941:78;;;2339:24:50;2335:96;;424:941:78;;;;1311:13:50;424:941:78;;;735:10:64;;424:941:78;;;;;;735:10:64;424:941:78;;3052:40:49;424:941:78;3052:40:49;;424:941:78;2335:96:50;2386:34;424:941:78;2386:34:50;735:10:64;424:941:78;;;;2386:34:50;424:941:78;;;;;-1:-1:-1;;424:941:78;;;;;1500:62:49;;:::i;:::-;424:941:78;;;;2093:20:50;424:941:78;;2093:20:50;424:941:78;;;;;;;;;3052:40:49;;;;424:941:78;;;;;;-1:-1:-1;;424:941:78;;;;;;479:55;424:941;479:55;424:941;;;;1796:162:49;424:941:78;1710:6:49;424:941:78;;735:10:64;1855:23:49;1851:101;;1796:162::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","owner()":"8da5cb5b","pendingOwner()":"e30c3978","protocolFeeSweeper()":"178ac96e","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"_protocolFeeSweeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeSweeper\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFeeSweeper\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidProtocolFeeSweeper()\":[{\"notice\":\"The fee protocol is invalid.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/FeeBurnerAuthentication.sol\":\"FeeBurnerAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"contracts/FeeBurnerAuthentication.sol\":{\"keccak256\":\"0x4861db67bf113a4775c165241802df34a6c0e9fefaec82e8aaf969b5879759f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f522b3af683e09e1b67ed515be9972e7cf9514a584e264c4ca9656cc12c2f06\",\"dweb:/ipfs/QmNYqMsvWcNqACozLm3cYeR4oC3KKfKNBDSqR3vcpjv3zo\"]}},\"version\":1}"}},"contracts/HyperEVMRateProvider.sol":{"HyperEVMRateProvider":{"abi":[{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"SpotPriceIsZero","type":"error"},{"inputs":[],"name":"SpotPricePrecompileFailed","type":"error"},{"inputs":[],"name":"TokenInfoPrecompileFailed","type":"error"},{"inputs":[],"name":"getPairIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSpotPriceMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_address_fromMemory":{"entryPoint":820,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint32_fromMemory":{"entryPoint":756,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint64_fromMemory":{"entryPoint":800,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint8_fromMemory":{"entryPoint":840,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":773,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":721,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"60e06040908082523461028a5781816106f6803803809161002082856102d1565b83398101031261028a57610033816102f4565b9061004160208092016102f4565b908351908082019163ffffffff8516835281815285810160018060401b0393828210858311176102a6575f9283928952519061080c5afa913d156102c9573d9261008a84610305565b93610097885195866102d1565b84523d5f8486013e5b156102ba57825183019082820193838184031261028a57838101519082821161028a5701928392610100938491031261028a57875194838601868110848211176102a65789528185015183811161028a57850181603f8201121561028a578281015161010b81610305565b916101188c5193846102d1565b818352838c838301011161028a57815f928d8793018386015e8301015286528885015183811161028a57850181603f8201121561028a57828101519384116102a6578360051b908a519461016e858401876102d1565b85528a8486019282010192831161028a578a849101915b83831061028e575050505084015261019f60608301610320565b868401526101af60808301610334565b60608401526101c060a08301610334565b60808401526101d160c08301610348565b918260a08501526101e460e08201610348565b60c08501520151805f0b810361028a5760e060ff9301521660080360ff81116102765760ff16604d811161027657600a0a801561026257670de0b6b3a76400000460805260a05260c0525161039f9081610357823960805181818160800152610202015260a05181818160e10152610145015260c051816103450152f35b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b819061029984610320565b8152019101908390610185565b634e487b7160e01b5f52604160045260245ffd5b631870604d60e21b5f5260045ffd5b6060926100a0565b601f909101601f19168101906001600160401b038211908210176102a657604052565b519063ffffffff8216820361028a57565b6001600160401b0381116102a657601f01601f191660200190565b51906001600160401b038216820361028a57565b51906001600160a01b038216820361028a57565b519060ff8216820361028a5756fe6080604090808252600480361015610015575f80fd5b5f3560e01c918263295d3ee81461030d57508163679aefce146101055750806381bfa5d1146100a75763a747d56f1461004c575f80fd5b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a357602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5f80fd5b50346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a3576020905163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35781519160209283810163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681528482528282019167ffffffffffffffff92818110848211176102ac578452515f918291906108085afa3d15610304573d8281116102d857835192601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168401908111848210176102ac57845282523d5f8684013e5b156102855783818051810103126100a35783015191821561025f577f000000000000000000000000000000000000000000000000000000000000000080840293840403610233575051908152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f44526c24000000000000000000000000000000000000000000000000000000005f525ffd5b827f79827df5000000000000000000000000000000000000000000000000000000005f525ffd5b6041867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b6041857f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b606091506101e5565b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35760209063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f3fea26469706673582212202408cf674357dec88ca1433641cb21e1a28b854edacb3295ccc92250b82ca41864736f6c634300081b0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x28A JUMPI DUP2 DUP2 PUSH2 0x6F6 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x20 DUP3 DUP6 PUSH2 0x2D1 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x28A JUMPI PUSH2 0x33 DUP2 PUSH2 0x2F4 JUMP JUMPDEST SWAP1 PUSH2 0x41 PUSH1 0x20 DUP1 SWAP3 ADD PUSH2 0x2F4 JUMP JUMPDEST SWAP1 DUP4 MLOAD SWAP1 DUP1 DUP3 ADD SWAP2 PUSH4 0xFFFFFFFF DUP6 AND DUP4 MSTORE DUP2 DUP2 MSTORE DUP6 DUP2 ADD PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB SWAP4 DUP3 DUP3 LT DUP6 DUP4 GT OR PUSH2 0x2A6 JUMPI PUSH0 SWAP3 DUP4 SWAP3 DUP10 MSTORE MLOAD SWAP1 PUSH2 0x80C GAS STATICCALL SWAP2 RETURNDATASIZE ISZERO PUSH2 0x2C9 JUMPI RETURNDATASIZE SWAP3 PUSH2 0x8A DUP5 PUSH2 0x305 JUMP JUMPDEST SWAP4 PUSH2 0x97 DUP9 MLOAD SWAP6 DUP7 PUSH2 0x2D1 JUMP JUMPDEST DUP5 MSTORE RETURNDATASIZE PUSH0 DUP5 DUP7 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x2BA JUMPI DUP3 MLOAD DUP4 ADD SWAP1 DUP3 DUP3 ADD SWAP4 DUP4 DUP2 DUP5 SUB SLT PUSH2 0x28A JUMPI DUP4 DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x28A JUMPI ADD SWAP3 DUP4 SWAP3 PUSH2 0x100 SWAP4 DUP5 SWAP2 SUB SLT PUSH2 0x28A JUMPI DUP8 MLOAD SWAP5 DUP4 DUP7 ADD DUP7 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2A6 JUMPI DUP10 MSTORE DUP2 DUP6 ADD MLOAD DUP4 DUP2 GT PUSH2 0x28A JUMPI DUP6 ADD DUP2 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x28A JUMPI DUP3 DUP2 ADD MLOAD PUSH2 0x10B DUP2 PUSH2 0x305 JUMP JUMPDEST SWAP2 PUSH2 0x118 DUP13 MLOAD SWAP4 DUP5 PUSH2 0x2D1 JUMP JUMPDEST DUP2 DUP4 MSTORE DUP4 DUP13 DUP4 DUP4 ADD ADD GT PUSH2 0x28A JUMPI DUP2 PUSH0 SWAP3 DUP14 DUP8 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE DUP7 MSTORE DUP9 DUP6 ADD MLOAD DUP4 DUP2 GT PUSH2 0x28A JUMPI DUP6 ADD DUP2 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x28A JUMPI DUP3 DUP2 ADD MLOAD SWAP4 DUP5 GT PUSH2 0x2A6 JUMPI DUP4 PUSH1 0x5 SHL SWAP1 DUP11 MLOAD SWAP5 PUSH2 0x16E DUP6 DUP5 ADD DUP8 PUSH2 0x2D1 JUMP JUMPDEST DUP6 MSTORE DUP11 DUP5 DUP7 ADD SWAP3 DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x28A JUMPI DUP11 DUP5 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x28E JUMPI POP POP POP POP DUP5 ADD MSTORE PUSH2 0x19F PUSH1 0x60 DUP4 ADD PUSH2 0x320 JUMP JUMPDEST DUP7 DUP5 ADD MSTORE PUSH2 0x1AF PUSH1 0x80 DUP4 ADD PUSH2 0x334 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x1C0 PUSH1 0xA0 DUP4 ADD PUSH2 0x334 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x1D1 PUSH1 0xC0 DUP4 ADD PUSH2 0x348 JUMP JUMPDEST SWAP2 DUP3 PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x1E4 PUSH1 0xE0 DUP3 ADD PUSH2 0x348 JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE ADD MLOAD DUP1 PUSH0 SIGNEXTEND DUP2 SUB PUSH2 0x28A JUMPI PUSH1 0xE0 PUSH1 0xFF SWAP4 ADD MSTORE AND PUSH1 0x8 SUB PUSH1 0xFF DUP2 GT PUSH2 0x276 JUMPI PUSH1 0xFF AND PUSH1 0x4D DUP2 GT PUSH2 0x276 JUMPI PUSH1 0xA EXP DUP1 ISZERO PUSH2 0x262 JUMPI PUSH8 0xDE0B6B3A7640000 DIV PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE MLOAD PUSH2 0x39F SWAP1 DUP2 PUSH2 0x357 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0x80 ADD MSTORE PUSH2 0x202 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xE1 ADD MSTORE PUSH2 0x145 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0x345 ADD MSTORE RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP2 SWAP1 PUSH2 0x299 DUP5 PUSH2 0x320 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 DUP4 SWAP1 PUSH2 0x185 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x1870604D PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP3 PUSH2 0xA0 JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x2A6 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x2A6 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST MLOAD SWAP1 PUSH1 0xFF DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x295D3EE8 EQ PUSH2 0x30D JUMPI POP DUP2 PUSH4 0x679AEFCE EQ PUSH2 0x105 JUMPI POP DUP1 PUSH4 0x81BFA5D1 EQ PUSH2 0xA7 JUMPI PUSH4 0xA747D56F EQ PUSH2 0x4C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP3 DUP4 DUP2 ADD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE DUP5 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP2 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2AC JUMPI DUP5 MSTORE MLOAD PUSH0 SWAP2 DUP3 SWAP2 SWAP1 PUSH2 0x808 GAS STATICCALL RETURNDATASIZE ISZERO PUSH2 0x304 JUMPI RETURNDATASIZE DUP3 DUP2 GT PUSH2 0x2D8 JUMPI DUP4 MLOAD SWAP3 PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP5 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x2AC JUMPI DUP5 MSTORE DUP3 MSTORE RETURNDATASIZE PUSH0 DUP7 DUP5 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x285 JUMPI DUP4 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xA3 JUMPI DUP4 ADD MLOAD SWAP2 DUP3 ISZERO PUSH2 0x25F JUMPI PUSH32 0x0 DUP1 DUP5 MUL SWAP4 DUP5 DIV SUB PUSH2 0x233 JUMPI POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x44526C2400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH32 0x79827DF500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP2 POP PUSH2 0x1E5 JUMP JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 ADDMOD 0xCF PUSH8 0x4357DEC88CA14336 COINBASE 0xCB 0x21 0xE1 LOG2 DUP12 DUP6 0x4E 0xDA 0xCB ORIGIN SWAP6 0xCC 0xC9 0x22 POP 0xB8 0x2C LOG4 XOR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"806:1640:79:-:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;1116:22:97;;;;806:1640:79;;;;797:42:97;;1116:22;;;806:1640:79;;;;;;;;;;;;;;;;;;-1:-1:-1;806:1640:79;;;;;1075:64:97;;797:42;1075:64;;;797:42;;;;;;;;;:::i;:::-;806:1640:79;;;;;;;:::i;:::-;797:42:97;;;-1:-1:-1;797:42:97;;;;;;1149:81;;797:42;;1273:33;;;;;;797:42;;;;;;;;1273:33;;;797:42;;;;;;;;;;;;;;;;;;;806:1640:79;;;;;;;;;;;;;;;;;797:42:97;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;806:1640:79;;;;;;;:::i;:::-;797:42:97;;;;;;;;;;;;;-1:-1:-1;797:42:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;806:1640:79;;;797:42:97;806:1640:79;797:42:97;;;806:1640:79;;:::i;:::-;797:42:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;1323:20;797:42;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;1323:20;797:42;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;797:42:97;;;;;;806:1640:79;797:42:97;;;806:1640:79;1697:1;806:1640;;;;;;;;;;;;;;;;;;;1682:4;806:1640;797:42:97;1659:54:79;1323:20:97;1724:22:79;797:42:97;1756:24:79;806:1640;;;;;;;797:42:97;806:1640:79;;;;;;;;;;1323:20:97;806:1640:79;;;;;;;;;;797:42:97;806:1640:79;;;;;;;;;;-1:-1:-1;806:1640:79;;;;;-1:-1:-1;806:1640:79;;;;;-1:-1:-1;806:1640:79;;;;;-1:-1:-1;806:1640:79;797:42:97;-1:-1:-1;797:42:97;;;;;;;;:::i;:::-;;;;;;;;;;;;806:1640:79;;;-1:-1:-1;806:1640:79;;;;;-1:-1:-1;806:1640:79;1149:81:97;1192:27;;;-1:-1:-1;1192:27:97;;-1:-1:-1;1192:27:97;797:42;;;;;806:1640:79;;;;;-1:-1:-1;;806:1640:79;;;;-1:-1:-1;;;;;806:1640:79;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;797:42:97:-;-1:-1:-1;;;;;797:42:97;;;;806:1640:79;;-1:-1:-1;;806:1640:79;797:42:97;;;:::o;:::-;;;-1:-1:-1;;;;;797:42:97;;;;;;:::o;:::-;;;-1:-1:-1;;;;;797:42:97;;;;;;:::o;:::-;;806:1640:79;;;;797:42:97;;;;:::o"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{"19862":[{"length":32,"start":128},{"length":32,"start":514}],"19864":[{"length":32,"start":225},{"length":32,"start":325}],"19866":[{"length":32,"start":837}]},"linkReferences":{},"object":"6080604090808252600480361015610015575f80fd5b5f3560e01c918263295d3ee81461030d57508163679aefce146101055750806381bfa5d1146100a75763a747d56f1461004c575f80fd5b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a357602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5f80fd5b50346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a3576020905163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35781519160209283810163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681528482528282019167ffffffffffffffff92818110848211176102ac578452515f918291906108085afa3d15610304573d8281116102d857835192601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168401908111848210176102ac57845282523d5f8684013e5b156102855783818051810103126100a35783015191821561025f577f000000000000000000000000000000000000000000000000000000000000000080840293840403610233575051908152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f44526c24000000000000000000000000000000000000000000000000000000005f525ffd5b827f79827df5000000000000000000000000000000000000000000000000000000005f525ffd5b6041867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b6041857f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b606091506101e5565b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35760209063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f3fea26469706673582212202408cf674357dec88ca1433641cb21e1a28b854edacb3295ccc92250b82ca41864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x295D3EE8 EQ PUSH2 0x30D JUMPI POP DUP2 PUSH4 0x679AEFCE EQ PUSH2 0x105 JUMPI POP DUP1 PUSH4 0x81BFA5D1 EQ PUSH2 0xA7 JUMPI PUSH4 0xA747D56F EQ PUSH2 0x4C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP3 DUP4 DUP2 ADD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE DUP5 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP2 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2AC JUMPI DUP5 MSTORE MLOAD PUSH0 SWAP2 DUP3 SWAP2 SWAP1 PUSH2 0x808 GAS STATICCALL RETURNDATASIZE ISZERO PUSH2 0x304 JUMPI RETURNDATASIZE DUP3 DUP2 GT PUSH2 0x2D8 JUMPI DUP4 MLOAD SWAP3 PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP5 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x2AC JUMPI DUP5 MSTORE DUP3 MSTORE RETURNDATASIZE PUSH0 DUP7 DUP5 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x285 JUMPI DUP4 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xA3 JUMPI DUP4 ADD MLOAD SWAP2 DUP3 ISZERO PUSH2 0x25F JUMPI PUSH32 0x0 DUP1 DUP5 MUL SWAP4 DUP5 DIV SUB PUSH2 0x233 JUMPI POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x44526C2400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH32 0x79827DF500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP2 POP PUSH2 0x1E5 JUMP JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 ADDMOD 0xCF PUSH8 0x4357DEC88CA14336 COINBASE 0xCB 0x21 0xE1 LOG2 DUP12 DUP6 0x4E 0xDA 0xCB ORIGIN SWAP6 0xCC 0xC9 0x22 POP 0xB8 0x2C LOG4 XOR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"806:1640:79:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;863:21:96;;806:1640:79;863:21:96;;;806:1640:79;;;;;;;;;;;;;;;;;;;;;1918:20;806:1640;;;;;;;;;;;;;;;;;;;;;;;2204:10;806:1640;;;;;;;;;;;;;;;;;;;863:21:96;;;;;;806:1640:79;2377:10;806:1640;;;863:21:96;;;463:42;;;;;;;;;;;;;;;;;822:63;806:1640:79;;;;822:63:96;463:42;822:63;;463:42;;;;;;;;;;806:1640:79;;;463:42:96;;;863:21;463:42;;;;;;;;;;;;;;;;;;;;;;806:1640:79;463:42:96;;;;;;895:81;;463:42;;;;1001:37;;463:42;;;;1001:37;;463:42;1052:10;;;1048:65;;2417:20:79;806:1640;;;;;;;;;;;;;;;;;;;;;;;;;1048:65:96;1085:17;806:1640:79;1085:17:96;806:1640:79;1085:17:96;895:81;938:27;;806:1640:79;938:27:96;806:1640:79;938:27:96;463:42;;;;806:1640:79;463:42:96;;;806:1640:79;463:42:96;;;;;806:1640:79;463:42:96;;;806:1640:79;463:42:96;;;;-1:-1:-1;463:42:96;;806:1640:79;;;;;;;;;;;;2066:11;806:1640;2066:11;806:1640;;;"},"methodIdentifiers":{"getPairIndex()":"81bfa5d1","getRate()":"679aefce","getSpotPriceMultiplier()":"a747d56f","getTokenIndex()":"295d3ee8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"SpotPriceIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SpotPricePrecompileFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenInfoPrecompileFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"getPairIndex\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSpotPriceMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenIndex\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"HyperEVM has precompiles that allow to fetch the spot price of a token (in terms of USD or other tokens). This contract uses the spot price and the token info precompiles to return the rate of a token on-chain, scaled with 18 decimals (compatible with the Vault).\",\"kind\":\"dev\",\"methods\":{\"getPairIndex()\":{\"details\":\"Hypercore has an index that identifies a pair of tokens to fetch the spot price.\",\"returns\":{\"_0\":\"pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\"}},\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"_0\":\"The current token rate\"}},\"getSpotPriceMultiplier()\":{\"details\":\"Hypercore returns the spot price with a different number of decimals for each token. So, to make this rate provider compatible with the vault, we need to scale the spot price to 18 decimals using this multiplier.\",\"returns\":{\"_0\":\"The spot price multiplier\"}},\"getTokenIndex()\":{\"returns\":{\"_0\":\"tokenIndex The index of the token on the Hyperliquid public API\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SpotPriceIsZero()\":[{\"notice\":\"The spot price is zero.\"}],\"SpotPricePrecompileFailed()\":[{\"notice\":\"The precompile had an error while fetching the spot price.\"}],\"TokenInfoPrecompileFailed()\":[{\"notice\":\"The precompile had an error while fetching the token info.\"}]},\"kind\":\"user\",\"methods\":{\"getPairIndex()\":{\"notice\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API.\"},\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"},\"getSpotPriceMultiplier()\":{\"notice\":\"The spot price multiplier.\"},\"getTokenIndex()\":{\"notice\":\"The index of the token on the Hyperliquid public API.\"}},\"notice\":\"A rate provider for the HyperEVM.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/HyperEVMRateProvider.sol\":\"HyperEVMRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\":{\"keccak256\":\"0xa2b797f83f03ad80f6512aecc2c1aed8d8aac3ffe968e0f696ec98ec4c200cd5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93ec4d5a140fed3f7885318e2816d2c498ec44730a320d491d47c990660bc268\",\"dweb:/ipfs/QmPK2pHX4dEYf77K6vyT1LMU83neZP5xe5AzcBsv7oJoLm\"]},\"contracts/HyperEVMRateProvider.sol\":{\"keccak256\":\"0x8946f432e7337d4db52606d91f60b1adb65648473b8fb7354a9266da5543bd0e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8abb5a40dd0a5d62be1022dd58c35b05521751e79c26f0f96c9e986857b0a0e8\",\"dweb:/ipfs/QmXh6BeSz1W8XmuKyo1TdTBHDxnTZqHSxTRtpcrE7fjwBz\"]},\"contracts/utils/HyperSpotPricePrecompile.sol\":{\"keccak256\":\"0x956b7c8f826704431ea1d94bec623d2c5b8b34442365f0b249f3a2c25c2c6c54\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3a70d1a6c57fc7cf290d9b4684c5740166cc04bc2a32aa17421edbc7f844d0ae\",\"dweb:/ipfs/QmXAypsKxGf5YAxWUcMeSHkXFfcDZv8WuZWS44HNf8wMZB\"]},\"contracts/utils/HyperTokenInfoPrecompile.sol\":{\"keccak256\":\"0xea3b203aa3635705f168c210f2d82b6fda6c63a01acb79f78111302b54fb2c8f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f96d680a8cb86611a2a2a55e675230d9fc397e5e5b875877e62055fb814d929\",\"dweb:/ipfs/Qme2iitvGmf1yBndr1n2yUE8sB1G54HQQqsCWg5HL5NNvZ\"]}},\"version\":1}"}},"contracts/HyperEVMRateProviderFactory.sol":{"HyperEVMRateProviderFactory":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"string","name":"factoryVersion","type":"string"},{"internalType":"uint256","name":"rateProviderVersion","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"},{"internalType":"address","name":"rateProvider","type":"address"}],"name":"RateProviderAlreadyExists","type":"error"},{"inputs":[],"name":"RateProviderFactoryIsDisabled","type":"error"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"name":"RateProviderNotFound","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"rateProvider","type":"address"}],"name":"RateProviderCreated","type":"event"},{"anonymous":false,"inputs":[],"name":"RateProviderFactoryDisabled","type":"event"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"name":"create","outputs":[{"internalType":"contract IHyperEVMRateProvider","name":"rateProvider","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"name":"getRateProvider","outputs":[{"internalType":"contract IHyperEVMRateProvider","name":"rateProvider","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRateProviderVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IHyperEVMRateProvider","name":"rateProvider","type":"address"}],"name":"isRateProviderFromFactory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"allocate_memory":{"entryPoint":568,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"60e060405234610234576113878038038061001981610238565b9283398101906060818303126102345780516001600160a01b0381169290838103610234576020838101516001600160401b03939192919084811161023457850191601f928284820112156102345780519686881161021157601f19976100858682018a168801610238565b948186528782850101116102345786815f9282604096018389015e8601015201519630608052156102255760a0528051938411610211575f54926001938481811c91168015610207575b828210146101f3578381116101b0575b50809285116001146101505750839450908392915f94610145575b50501b915f199060031b1c1916175f555b60c052604051611129908161025e823960805181610924015260a05181818160d70152818161021301526106a7015260c051816106010152f35b015192505f806100fa565b9294849081165f8052845f20945f905b88838310610196575050501061017e575b505050811b015f5561010b565b01515f1960f88460031b161c191690555f8080610171565b858701518855909601959485019487935090810190610160565b5f8052815f208480880160051c8201928489106101ea575b0160051c019085905b8281106101df5750506100df565b5f81550185906101d1565b925081926101c8565b634e487b7160e01b5f52602260045260245ffd5b90607f16906100cf565b634e487b7160e01b5f52604160045260245ffd5b630647140b60e51b5f5260045ffd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176102115760405256fe608060409080825260049081361015610016575f80fd5b5f358060e01c91826319912f711461081c575081632f2770db1461062457508063381c7a4f146105ea57806354fd4d501461043b578063568acb7914610286578063851c1bb3146102375780638d928af8146101e757806399b8113f146101505763aaabadc514610085575f80fd5b3461014c575f60031936011261014c5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561014257926020935f93610113575b505191168152f35b610134919350843d861161013b575b61012c818361088b565b81019061096f565b915f61010b565b503d610122565b83513d5f823e3d90fd5b5f80fd5b503461014c578160031936011261014c57610169610865565b91610172610878565b61017c81856109cf565b5f52600260205273ffffffffffffffffffffffffffffffffffffffff825f2054169283156101ae576020848451908152f35b8492507fdc120e77000000000000000000000000000000000000000000000000000000005f5263ffffffff80931690521660245260445ffd5b823461014c575f60031936011261014c576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461014c57602060031936011261014c5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361014c5761027f6020926108f9565b9051908152f35b50903461014c578060031936011261014c576102a0610865565b906102a9610878565b916102b261099b565b6102bc83826109cf565b90815f52600260205273ffffffffffffffffffffffffffffffffffffffff9485845f205416806103ff57508351906106f68083019183831067ffffffffffffffff8411176103d3575086848493610329936109fe863963ffffffff91821681529116602082015260400190565b03905ff094851561014257602095169283925f5260028652805f20837fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055825f5260038652805f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905563ffffffff809151951691167fd2dc19a986df7300887ed27436ca60160b58dcbcc7a657427d35cbf60154ba025f80a48152f35b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b8286837ff4c64ee1000000000000000000000000000000000000000000000000000000005f5263ffffffff80931690521660245260445260645ffd5b50903461014c575f60031936011261014c5780515f5f549060018260011c90600184169384156105e0575b60209788841086146105b457509187918694938286528386019690815f1461055c57506001146104e8575b505050916104c4601f927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe094038561088b565b845195869481865251918280928701528686015e5f85828601015201168101030190f35b5f8080529293507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106105465750505082010185827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610491565b8054888501860152879550928401928101610511565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687525050151560051b830101905085827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610491565b6022907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b91607f1691610466565b823461014c575f60031936011261014c57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b8391503461014c575f60031936011261014c577fffffffff0000000000000000000000000000000000000000000000000000000061066291166108f9565b73ffffffffffffffffffffffffffffffffffffffff9082517faaabadc500000000000000000000000000000000000000000000000000000000815260209182828781877f0000000000000000000000000000000000000000000000000000000000000000165afa91821561081257908392915f926107f0575b50606490865195869384927f9be2a8840000000000000000000000000000000000000000000000000000000084528a840152336024840152306044840152165afa9283156107e757505f926107b0575b50501561078a5761073a61099b565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416176001557f1e8641758c70961d246979e3c073388b65a37bad9cc604ec5511e7200e7d144b5f80a1005b7f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90809250813d83116107e0575b6107c7818361088b565b8101031261014c5751801515810361014c57828061072b565b503d6107bd565b513d5f823e3d90fd5b606491925061080b90843d861161013b5761012c818361088b565b91906106db565b85513d5f823e3d90fd5b8490843461014c57602060031936011261014c573573ffffffffffffffffffffffffffffffffffffffff811680910361014c5760209260ff915f52600384525f20541615158152f35b6004359063ffffffff8216820361014c57565b6024359063ffffffff8216820361014c57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176108cc57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176108cc5760405251902090565b9081602091031261014c575173ffffffffffffffffffffffffffffffffffffffff8116810361014c5790565b60ff600154166109a757565b7f42fb89b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b6040805163ffffffff92831660208201908152939092168282015281526109f760608261088b565b5190209056fe60e06040908082523461028a5781816106f6803803809161002082856102d1565b83398101031261028a57610033816102f4565b9061004160208092016102f4565b908351908082019163ffffffff8516835281815285810160018060401b0393828210858311176102a6575f9283928952519061080c5afa913d156102c9573d9261008a84610305565b93610097885195866102d1565b84523d5f8486013e5b156102ba57825183019082820193838184031261028a57838101519082821161028a5701928392610100938491031261028a57875194838601868110848211176102a65789528185015183811161028a57850181603f8201121561028a578281015161010b81610305565b916101188c5193846102d1565b818352838c838301011161028a57815f928d8793018386015e8301015286528885015183811161028a57850181603f8201121561028a57828101519384116102a6578360051b908a519461016e858401876102d1565b85528a8486019282010192831161028a578a849101915b83831061028e575050505084015261019f60608301610320565b868401526101af60808301610334565b60608401526101c060a08301610334565b60808401526101d160c08301610348565b918260a08501526101e460e08201610348565b60c08501520151805f0b810361028a5760e060ff9301521660080360ff81116102765760ff16604d811161027657600a0a801561026257670de0b6b3a76400000460805260a05260c0525161039f9081610357823960805181818160800152610202015260a05181818160e10152610145015260c051816103450152f35b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b819061029984610320565b8152019101908390610185565b634e487b7160e01b5f52604160045260245ffd5b631870604d60e21b5f5260045ffd5b6060926100a0565b601f909101601f19168101906001600160401b038211908210176102a657604052565b519063ffffffff8216820361028a57565b6001600160401b0381116102a657601f01601f191660200190565b51906001600160401b038216820361028a57565b51906001600160a01b038216820361028a57565b519060ff8216820361028a5756fe6080604090808252600480361015610015575f80fd5b5f3560e01c918263295d3ee81461030d57508163679aefce146101055750806381bfa5d1146100a75763a747d56f1461004c575f80fd5b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a357602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5f80fd5b50346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a3576020905163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35781519160209283810163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681528482528282019167ffffffffffffffff92818110848211176102ac578452515f918291906108085afa3d15610304573d8281116102d857835192601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168401908111848210176102ac57845282523d5f8684013e5b156102855783818051810103126100a35783015191821561025f577f000000000000000000000000000000000000000000000000000000000000000080840293840403610233575051908152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f44526c24000000000000000000000000000000000000000000000000000000005f525ffd5b827f79827df5000000000000000000000000000000000000000000000000000000005f525ffd5b6041867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b6041857f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b606091506101e5565b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35760209063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f3fea26469706673582212202408cf674357dec88ca1433641cb21e1a28b854edacb3295ccc92250b82ca41864736f6c634300081b0033a2646970667358221220aa8a7fceeb1c17bb3a1d8defc7d21eaa36f1ddbefd69587f79db9ef4b8b303cc64736f6c634300081b0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x234 JUMPI PUSH2 0x1387 DUP1 CODESIZE SUB DUP1 PUSH2 0x19 DUP2 PUSH2 0x238 JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD SWAP1 PUSH1 0x60 DUP2 DUP4 SUB SLT PUSH2 0x234 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP3 SWAP1 DUP4 DUP2 SUB PUSH2 0x234 JUMPI PUSH1 0x20 DUP4 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP4 SWAP2 SWAP3 SWAP2 SWAP1 DUP5 DUP2 GT PUSH2 0x234 JUMPI DUP6 ADD SWAP2 PUSH1 0x1F SWAP3 DUP3 DUP5 DUP3 ADD SLT ISZERO PUSH2 0x234 JUMPI DUP1 MLOAD SWAP7 DUP7 DUP9 GT PUSH2 0x211 JUMPI PUSH1 0x1F NOT SWAP8 PUSH2 0x85 DUP7 DUP3 ADD DUP11 AND DUP9 ADD PUSH2 0x238 JUMP JUMPDEST SWAP5 DUP2 DUP7 MSTORE DUP8 DUP3 DUP6 ADD ADD GT PUSH2 0x234 JUMPI DUP7 DUP2 PUSH0 SWAP3 DUP3 PUSH1 0x40 SWAP7 ADD DUP4 DUP10 ADD MCOPY DUP7 ADD ADD MSTORE ADD MLOAD SWAP7 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0x225 JUMPI PUSH1 0xA0 MSTORE DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x211 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x207 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x1F3 JUMPI DUP4 DUP2 GT PUSH2 0x1B0 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x150 JUMPI POP DUP4 SWAP5 POP SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP5 PUSH2 0x145 JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST PUSH1 0xC0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x1129 SWAP1 DUP2 PUSH2 0x25E DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x924 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xD7 ADD MSTORE DUP2 DUP2 PUSH2 0x213 ADD MSTORE PUSH2 0x6A7 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0x601 ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0xFA JUMP JUMPDEST SWAP3 SWAP5 DUP5 SWAP1 DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x196 JUMPI POP POP POP LT PUSH2 0x17E JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0x10B JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x171 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x160 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x1EA JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP6 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x1DF JUMPI POP POP PUSH2 0xDF JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x1D1 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x1C8 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xCF JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x211 JUMPI PUSH1 0x40 MSTORE JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x19912F71 EQ PUSH2 0x81C JUMPI POP DUP2 PUSH4 0x2F2770DB EQ PUSH2 0x624 JUMPI POP DUP1 PUSH4 0x381C7A4F EQ PUSH2 0x5EA JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x43B JUMPI DUP1 PUSH4 0x568ACB79 EQ PUSH2 0x286 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x237 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x1E7 JUMPI DUP1 PUSH4 0x99B8113F EQ PUSH2 0x150 JUMPI PUSH4 0xAAABADC5 EQ PUSH2 0x85 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x142 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x113 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x134 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x13B JUMPI JUMPDEST PUSH2 0x12C DUP2 DUP4 PUSH2 0x88B JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x96F JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x10B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x122 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x14C JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH2 0x169 PUSH2 0x865 JUMP JUMPDEST SWAP2 PUSH2 0x172 PUSH2 0x878 JUMP JUMPDEST PUSH2 0x17C DUP2 DUP6 PUSH2 0x9CF JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SLOAD AND SWAP3 DUP4 ISZERO PUSH2 0x1AE JUMPI PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP5 SWAP3 POP PUSH32 0xDC120E7700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH4 0xFFFFFFFF DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x14C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x14C JUMPI PUSH2 0x27F PUSH1 0x20 SWAP3 PUSH2 0x8F9 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x14C JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH2 0x2A0 PUSH2 0x865 JUMP JUMPDEST SWAP1 PUSH2 0x2A9 PUSH2 0x878 JUMP JUMPDEST SWAP2 PUSH2 0x2B2 PUSH2 0x99B JUMP JUMPDEST PUSH2 0x2BC DUP4 DUP3 PUSH2 0x9CF JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP5 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x3FF JUMPI POP DUP4 MLOAD SWAP1 PUSH2 0x6F6 DUP1 DUP4 ADD SWAP2 DUP4 DUP4 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT OR PUSH2 0x3D3 JUMPI POP DUP7 DUP5 DUP5 SWAP4 PUSH2 0x329 SWAP4 PUSH2 0x9FE DUP7 CODECOPY PUSH4 0xFFFFFFFF SWAP2 DUP3 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 PUSH0 CREATE SWAP5 DUP6 ISZERO PUSH2 0x142 JUMPI PUSH1 0x20 SWAP6 AND SWAP3 DUP4 SWAP3 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE DUP1 PUSH0 KECCAK256 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP3 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE DUP1 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH4 0xFFFFFFFF DUP1 SWAP2 MLOAD SWAP6 AND SWAP2 AND PUSH32 0xD2DC19A986DF7300887ED27436CA60160B58DCBCC7A657427D35CBF60154BA02 PUSH0 DUP1 LOG4 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP7 DUP4 PUSH32 0xF4C64EE100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH4 0xFFFFFFFF DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI DUP1 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP1 PUSH1 0x1 DUP5 AND SWAP4 DUP5 ISZERO PUSH2 0x5E0 JUMPI JUMPDEST PUSH1 0x20 SWAP8 DUP9 DUP5 LT DUP7 EQ PUSH2 0x5B4 JUMPI POP SWAP2 DUP8 SWAP2 DUP7 SWAP5 SWAP4 DUP3 DUP7 MSTORE DUP4 DUP7 ADD SWAP7 SWAP1 DUP2 PUSH0 EQ PUSH2 0x55C JUMPI POP PUSH1 0x1 EQ PUSH2 0x4E8 JUMPI JUMPDEST POP POP POP SWAP2 PUSH2 0x4C4 PUSH1 0x1F SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP5 SUB DUP6 PUSH2 0x88B JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH0 DUP1 DUP1 MSTORE SWAP3 SWAP4 POP PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x546 JUMPI POP POP POP DUP3 ADD ADD DUP6 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x491 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP7 ADD MSTORE DUP8 SWAP6 POP SWAP3 DUP5 ADD SWAP3 DUP2 ADD PUSH2 0x511 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP6 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x491 JUMP JUMPDEST PUSH1 0x22 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x466 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST DUP4 SWAP2 POP CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x662 SWAP2 AND PUSH2 0x8F9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP3 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 DUP3 DUP8 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x812 JUMPI SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP3 PUSH2 0x7F0 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP11 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x7E7 JUMPI POP PUSH0 SWAP3 PUSH2 0x7B0 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x78A JUMPI PUSH2 0x73A PUSH2 0x99B JUMP JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND OR PUSH1 0x1 SSTORE PUSH32 0x1E8641758C70961D246979E3C073388B65A37BAD9CC604EC5511E7200E7D144B PUSH0 DUP1 LOG1 STOP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x7E0 JUMPI JUMPDEST PUSH2 0x7C7 DUP2 DUP4 PUSH2 0x88B JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x14C JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x14C JUMPI DUP3 DUP1 PUSH2 0x72B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x7BD JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x80B SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x13B JUMPI PUSH2 0x12C DUP2 DUP4 PUSH2 0x88B JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x6DB JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 SWAP1 DUP5 CALLVALUE PUSH2 0x14C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x14C JUMPI PUSH1 0x20 SWAP3 PUSH1 0xFF SWAP2 PUSH0 MSTORE PUSH1 0x3 DUP5 MSTORE PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x14C JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x14C JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x8CC JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x8CC JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x14C JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x14C JUMPI SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 SLOAD AND PUSH2 0x9A7 JUMPI JUMP JUMPDEST PUSH32 0x42FB89B800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP3 DUP4 AND PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE SWAP4 SWAP1 SWAP3 AND DUP3 DUP3 ADD MSTORE DUP2 MSTORE PUSH2 0x9F7 PUSH1 0x60 DUP3 PUSH2 0x88B JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP INVALID PUSH1 0xE0 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x28A JUMPI DUP2 DUP2 PUSH2 0x6F6 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x20 DUP3 DUP6 PUSH2 0x2D1 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x28A JUMPI PUSH2 0x33 DUP2 PUSH2 0x2F4 JUMP JUMPDEST SWAP1 PUSH2 0x41 PUSH1 0x20 DUP1 SWAP3 ADD PUSH2 0x2F4 JUMP JUMPDEST SWAP1 DUP4 MLOAD SWAP1 DUP1 DUP3 ADD SWAP2 PUSH4 0xFFFFFFFF DUP6 AND DUP4 MSTORE DUP2 DUP2 MSTORE DUP6 DUP2 ADD PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB SWAP4 DUP3 DUP3 LT DUP6 DUP4 GT OR PUSH2 0x2A6 JUMPI PUSH0 SWAP3 DUP4 SWAP3 DUP10 MSTORE MLOAD SWAP1 PUSH2 0x80C GAS STATICCALL SWAP2 RETURNDATASIZE ISZERO PUSH2 0x2C9 JUMPI RETURNDATASIZE SWAP3 PUSH2 0x8A DUP5 PUSH2 0x305 JUMP JUMPDEST SWAP4 PUSH2 0x97 DUP9 MLOAD SWAP6 DUP7 PUSH2 0x2D1 JUMP JUMPDEST DUP5 MSTORE RETURNDATASIZE PUSH0 DUP5 DUP7 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x2BA JUMPI DUP3 MLOAD DUP4 ADD SWAP1 DUP3 DUP3 ADD SWAP4 DUP4 DUP2 DUP5 SUB SLT PUSH2 0x28A JUMPI DUP4 DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x28A JUMPI ADD SWAP3 DUP4 SWAP3 PUSH2 0x100 SWAP4 DUP5 SWAP2 SUB SLT PUSH2 0x28A JUMPI DUP8 MLOAD SWAP5 DUP4 DUP7 ADD DUP7 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2A6 JUMPI DUP10 MSTORE DUP2 DUP6 ADD MLOAD DUP4 DUP2 GT PUSH2 0x28A JUMPI DUP6 ADD DUP2 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x28A JUMPI DUP3 DUP2 ADD MLOAD PUSH2 0x10B DUP2 PUSH2 0x305 JUMP JUMPDEST SWAP2 PUSH2 0x118 DUP13 MLOAD SWAP4 DUP5 PUSH2 0x2D1 JUMP JUMPDEST DUP2 DUP4 MSTORE DUP4 DUP13 DUP4 DUP4 ADD ADD GT PUSH2 0x28A JUMPI DUP2 PUSH0 SWAP3 DUP14 DUP8 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE DUP7 MSTORE DUP9 DUP6 ADD MLOAD DUP4 DUP2 GT PUSH2 0x28A JUMPI DUP6 ADD DUP2 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x28A JUMPI DUP3 DUP2 ADD MLOAD SWAP4 DUP5 GT PUSH2 0x2A6 JUMPI DUP4 PUSH1 0x5 SHL SWAP1 DUP11 MLOAD SWAP5 PUSH2 0x16E DUP6 DUP5 ADD DUP8 PUSH2 0x2D1 JUMP JUMPDEST DUP6 MSTORE DUP11 DUP5 DUP7 ADD SWAP3 DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x28A JUMPI DUP11 DUP5 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x28E JUMPI POP POP POP POP DUP5 ADD MSTORE PUSH2 0x19F PUSH1 0x60 DUP4 ADD PUSH2 0x320 JUMP JUMPDEST DUP7 DUP5 ADD MSTORE PUSH2 0x1AF PUSH1 0x80 DUP4 ADD PUSH2 0x334 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x1C0 PUSH1 0xA0 DUP4 ADD PUSH2 0x334 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x1D1 PUSH1 0xC0 DUP4 ADD PUSH2 0x348 JUMP JUMPDEST SWAP2 DUP3 PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x1E4 PUSH1 0xE0 DUP3 ADD PUSH2 0x348 JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE ADD MLOAD DUP1 PUSH0 SIGNEXTEND DUP2 SUB PUSH2 0x28A JUMPI PUSH1 0xE0 PUSH1 0xFF SWAP4 ADD MSTORE AND PUSH1 0x8 SUB PUSH1 0xFF DUP2 GT PUSH2 0x276 JUMPI PUSH1 0xFF AND PUSH1 0x4D DUP2 GT PUSH2 0x276 JUMPI PUSH1 0xA EXP DUP1 ISZERO PUSH2 0x262 JUMPI PUSH8 0xDE0B6B3A7640000 DIV PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE MLOAD PUSH2 0x39F SWAP1 DUP2 PUSH2 0x357 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0x80 ADD MSTORE PUSH2 0x202 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xE1 ADD MSTORE PUSH2 0x145 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0x345 ADD MSTORE RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP2 SWAP1 PUSH2 0x299 DUP5 PUSH2 0x320 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 DUP4 SWAP1 PUSH2 0x185 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x1870604D PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP3 PUSH2 0xA0 JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x2A6 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x2A6 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST MLOAD SWAP1 PUSH1 0xFF DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x295D3EE8 EQ PUSH2 0x30D JUMPI POP DUP2 PUSH4 0x679AEFCE EQ PUSH2 0x105 JUMPI POP DUP1 PUSH4 0x81BFA5D1 EQ PUSH2 0xA7 JUMPI PUSH4 0xA747D56F EQ PUSH2 0x4C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP3 DUP4 DUP2 ADD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE DUP5 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP2 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2AC JUMPI DUP5 MSTORE MLOAD PUSH0 SWAP2 DUP3 SWAP2 SWAP1 PUSH2 0x808 GAS STATICCALL RETURNDATASIZE ISZERO PUSH2 0x304 JUMPI RETURNDATASIZE DUP3 DUP2 GT PUSH2 0x2D8 JUMPI DUP4 MLOAD SWAP3 PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP5 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x2AC JUMPI DUP5 MSTORE DUP3 MSTORE RETURNDATASIZE PUSH0 DUP7 DUP5 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x285 JUMPI DUP4 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xA3 JUMPI DUP4 ADD MLOAD SWAP2 DUP3 ISZERO PUSH2 0x25F JUMPI PUSH32 0x0 DUP1 DUP5 MUL SWAP4 DUP5 DIV SUB PUSH2 0x233 JUMPI POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x44526C2400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH32 0x79827DF500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP2 POP PUSH2 0x1E5 JUMP JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 ADDMOD 0xCF PUSH8 0x4357DEC88CA14336 COINBASE 0xCB 0x21 0xE1 LOG2 DUP12 DUP6 0x4E 0xDA 0xCB ORIGIN SWAP6 0xCC 0xC9 0x22 POP 0xB8 0x2C LOG4 XOR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAA DUP11 PUSH32 0xCEEB1C17BB3A1D8DEFC7D21EAA36F1DDBEFD69587F79DB9EF4B8B303CC64736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"759:2835:80:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;759:2835:80;;;;;;;;;;;;;;-1:-1:-1;;;;;759:2835:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;759:2835:80;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;;;922:4:47;;1347:46:33;;943:28:45;939:79;;1028:14;;759:2835:80;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;1339:42;;759:2835;;;;;;;;1347:46:33;759:2835:80;;;;;1028:14:45;759:2835:80;;;;;;;;;;;;;;;1339:42;759:2835;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;-1:-1:-1;759:2835:80;;;-1:-1:-1;759:2835:80;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;-1:-1:-1;759:2835:80;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;-1:-1:-1;759:2835:80;939:79:45;994:13;;;-1:-1:-1;994:13:45;;-1:-1:-1;994:13:45;759:2835:80;-1:-1:-1;759:2835:80;;;;;;;;;-1:-1:-1;;759:2835:80;;;-1:-1:-1;;;;;759:2835:80;;;;;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":2415,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint32":{"entryPoint":2168,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_uint32_4637":{"entryPoint":2149,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_uint32_uint32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":2187,"id":null,"parameterSlots":2,"returnSlots":0},"fun_computeRateProviderId":{"entryPoint":2511,"id":20184,"parameterSlots":2,"returnSlots":1},"fun_ensureEnabled":{"entryPoint":2459,"id":20194,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":2297,"id":4374,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":2340}],"7358":[{"length":32,"start":215},{"length":32,"start":531},{"length":32,"start":1703}],"19970":[{"length":32,"start":1537}]},"linkReferences":{},"object":"608060409080825260049081361015610016575f80fd5b5f358060e01c91826319912f711461081c575081632f2770db1461062457508063381c7a4f146105ea57806354fd4d501461043b578063568acb7914610286578063851c1bb3146102375780638d928af8146101e757806399b8113f146101505763aaabadc514610085575f80fd5b3461014c575f60031936011261014c5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561014257926020935f93610113575b505191168152f35b610134919350843d861161013b575b61012c818361088b565b81019061096f565b915f61010b565b503d610122565b83513d5f823e3d90fd5b5f80fd5b503461014c578160031936011261014c57610169610865565b91610172610878565b61017c81856109cf565b5f52600260205273ffffffffffffffffffffffffffffffffffffffff825f2054169283156101ae576020848451908152f35b8492507fdc120e77000000000000000000000000000000000000000000000000000000005f5263ffffffff80931690521660245260445ffd5b823461014c575f60031936011261014c576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461014c57602060031936011261014c5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361014c5761027f6020926108f9565b9051908152f35b50903461014c578060031936011261014c576102a0610865565b906102a9610878565b916102b261099b565b6102bc83826109cf565b90815f52600260205273ffffffffffffffffffffffffffffffffffffffff9485845f205416806103ff57508351906106f68083019183831067ffffffffffffffff8411176103d3575086848493610329936109fe863963ffffffff91821681529116602082015260400190565b03905ff094851561014257602095169283925f5260028652805f20837fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055825f5260038652805f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905563ffffffff809151951691167fd2dc19a986df7300887ed27436ca60160b58dcbcc7a657427d35cbf60154ba025f80a48152f35b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b8286837ff4c64ee1000000000000000000000000000000000000000000000000000000005f5263ffffffff80931690521660245260445260645ffd5b50903461014c575f60031936011261014c5780515f5f549060018260011c90600184169384156105e0575b60209788841086146105b457509187918694938286528386019690815f1461055c57506001146104e8575b505050916104c4601f927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe094038561088b565b845195869481865251918280928701528686015e5f85828601015201168101030190f35b5f8080529293507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106105465750505082010185827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610491565b8054888501860152879550928401928101610511565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687525050151560051b830101905085827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610491565b6022907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b91607f1691610466565b823461014c575f60031936011261014c57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b8391503461014c575f60031936011261014c577fffffffff0000000000000000000000000000000000000000000000000000000061066291166108f9565b73ffffffffffffffffffffffffffffffffffffffff9082517faaabadc500000000000000000000000000000000000000000000000000000000815260209182828781877f0000000000000000000000000000000000000000000000000000000000000000165afa91821561081257908392915f926107f0575b50606490865195869384927f9be2a8840000000000000000000000000000000000000000000000000000000084528a840152336024840152306044840152165afa9283156107e757505f926107b0575b50501561078a5761073a61099b565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416176001557f1e8641758c70961d246979e3c073388b65a37bad9cc604ec5511e7200e7d144b5f80a1005b7f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90809250813d83116107e0575b6107c7818361088b565b8101031261014c5751801515810361014c57828061072b565b503d6107bd565b513d5f823e3d90fd5b606491925061080b90843d861161013b5761012c818361088b565b91906106db565b85513d5f823e3d90fd5b8490843461014c57602060031936011261014c573573ffffffffffffffffffffffffffffffffffffffff811680910361014c5760209260ff915f52600384525f20541615158152f35b6004359063ffffffff8216820361014c57565b6024359063ffffffff8216820361014c57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176108cc57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176108cc5760405251902090565b9081602091031261014c575173ffffffffffffffffffffffffffffffffffffffff8116810361014c5790565b60ff600154166109a757565b7f42fb89b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b6040805163ffffffff92831660208201908152939092168282015281526109f760608261088b565b5190209056fe60e06040908082523461028a5781816106f6803803809161002082856102d1565b83398101031261028a57610033816102f4565b9061004160208092016102f4565b908351908082019163ffffffff8516835281815285810160018060401b0393828210858311176102a6575f9283928952519061080c5afa913d156102c9573d9261008a84610305565b93610097885195866102d1565b84523d5f8486013e5b156102ba57825183019082820193838184031261028a57838101519082821161028a5701928392610100938491031261028a57875194838601868110848211176102a65789528185015183811161028a57850181603f8201121561028a578281015161010b81610305565b916101188c5193846102d1565b818352838c838301011161028a57815f928d8793018386015e8301015286528885015183811161028a57850181603f8201121561028a57828101519384116102a6578360051b908a519461016e858401876102d1565b85528a8486019282010192831161028a578a849101915b83831061028e575050505084015261019f60608301610320565b868401526101af60808301610334565b60608401526101c060a08301610334565b60808401526101d160c08301610348565b918260a08501526101e460e08201610348565b60c08501520151805f0b810361028a5760e060ff9301521660080360ff81116102765760ff16604d811161027657600a0a801561026257670de0b6b3a76400000460805260a05260c0525161039f9081610357823960805181818160800152610202015260a05181818160e10152610145015260c051816103450152f35b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b819061029984610320565b8152019101908390610185565b634e487b7160e01b5f52604160045260245ffd5b631870604d60e21b5f5260045ffd5b6060926100a0565b601f909101601f19168101906001600160401b038211908210176102a657604052565b519063ffffffff8216820361028a57565b6001600160401b0381116102a657601f01601f191660200190565b51906001600160401b038216820361028a57565b51906001600160a01b038216820361028a57565b519060ff8216820361028a5756fe6080604090808252600480361015610015575f80fd5b5f3560e01c918263295d3ee81461030d57508163679aefce146101055750806381bfa5d1146100a75763a747d56f1461004c575f80fd5b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a357602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5f80fd5b50346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a3576020905163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35781519160209283810163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681528482528282019167ffffffffffffffff92818110848211176102ac578452515f918291906108085afa3d15610304573d8281116102d857835192601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168401908111848210176102ac57845282523d5f8684013e5b156102855783818051810103126100a35783015191821561025f577f000000000000000000000000000000000000000000000000000000000000000080840293840403610233575051908152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f44526c24000000000000000000000000000000000000000000000000000000005f525ffd5b827f79827df5000000000000000000000000000000000000000000000000000000005f525ffd5b6041867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b6041857f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b606091506101e5565b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35760209063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f3fea26469706673582212202408cf674357dec88ca1433641cb21e1a28b854edacb3295ccc92250b82ca41864736f6c634300081b0033a2646970667358221220aa8a7fceeb1c17bb3a1d8defc7d21eaa36f1ddbefd69587f79db9ef4b8b303cc64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x19912F71 EQ PUSH2 0x81C JUMPI POP DUP2 PUSH4 0x2F2770DB EQ PUSH2 0x624 JUMPI POP DUP1 PUSH4 0x381C7A4F EQ PUSH2 0x5EA JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x43B JUMPI DUP1 PUSH4 0x568ACB79 EQ PUSH2 0x286 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x237 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x1E7 JUMPI DUP1 PUSH4 0x99B8113F EQ PUSH2 0x150 JUMPI PUSH4 0xAAABADC5 EQ PUSH2 0x85 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x142 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x113 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x134 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x13B JUMPI JUMPDEST PUSH2 0x12C DUP2 DUP4 PUSH2 0x88B JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x96F JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x10B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x122 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x14C JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH2 0x169 PUSH2 0x865 JUMP JUMPDEST SWAP2 PUSH2 0x172 PUSH2 0x878 JUMP JUMPDEST PUSH2 0x17C DUP2 DUP6 PUSH2 0x9CF JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SLOAD AND SWAP3 DUP4 ISZERO PUSH2 0x1AE JUMPI PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP5 SWAP3 POP PUSH32 0xDC120E7700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH4 0xFFFFFFFF DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x14C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x14C JUMPI PUSH2 0x27F PUSH1 0x20 SWAP3 PUSH2 0x8F9 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x14C JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH2 0x2A0 PUSH2 0x865 JUMP JUMPDEST SWAP1 PUSH2 0x2A9 PUSH2 0x878 JUMP JUMPDEST SWAP2 PUSH2 0x2B2 PUSH2 0x99B JUMP JUMPDEST PUSH2 0x2BC DUP4 DUP3 PUSH2 0x9CF JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP5 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x3FF JUMPI POP DUP4 MLOAD SWAP1 PUSH2 0x6F6 DUP1 DUP4 ADD SWAP2 DUP4 DUP4 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT OR PUSH2 0x3D3 JUMPI POP DUP7 DUP5 DUP5 SWAP4 PUSH2 0x329 SWAP4 PUSH2 0x9FE DUP7 CODECOPY PUSH4 0xFFFFFFFF SWAP2 DUP3 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 PUSH0 CREATE SWAP5 DUP6 ISZERO PUSH2 0x142 JUMPI PUSH1 0x20 SWAP6 AND SWAP3 DUP4 SWAP3 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE DUP1 PUSH0 KECCAK256 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP3 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE DUP1 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH4 0xFFFFFFFF DUP1 SWAP2 MLOAD SWAP6 AND SWAP2 AND PUSH32 0xD2DC19A986DF7300887ED27436CA60160B58DCBCC7A657427D35CBF60154BA02 PUSH0 DUP1 LOG4 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP7 DUP4 PUSH32 0xF4C64EE100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH4 0xFFFFFFFF DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI DUP1 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP1 PUSH1 0x1 DUP5 AND SWAP4 DUP5 ISZERO PUSH2 0x5E0 JUMPI JUMPDEST PUSH1 0x20 SWAP8 DUP9 DUP5 LT DUP7 EQ PUSH2 0x5B4 JUMPI POP SWAP2 DUP8 SWAP2 DUP7 SWAP5 SWAP4 DUP3 DUP7 MSTORE DUP4 DUP7 ADD SWAP7 SWAP1 DUP2 PUSH0 EQ PUSH2 0x55C JUMPI POP PUSH1 0x1 EQ PUSH2 0x4E8 JUMPI JUMPDEST POP POP POP SWAP2 PUSH2 0x4C4 PUSH1 0x1F SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP5 SUB DUP6 PUSH2 0x88B JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH0 DUP1 DUP1 MSTORE SWAP3 SWAP4 POP PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x546 JUMPI POP POP POP DUP3 ADD ADD DUP6 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x491 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP7 ADD MSTORE DUP8 SWAP6 POP SWAP3 DUP5 ADD SWAP3 DUP2 ADD PUSH2 0x511 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP6 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x491 JUMP JUMPDEST PUSH1 0x22 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x466 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST DUP4 SWAP2 POP CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x662 SWAP2 AND PUSH2 0x8F9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP3 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 DUP3 DUP8 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x812 JUMPI SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP3 PUSH2 0x7F0 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP11 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x7E7 JUMPI POP PUSH0 SWAP3 PUSH2 0x7B0 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x78A JUMPI PUSH2 0x73A PUSH2 0x99B JUMP JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND OR PUSH1 0x1 SSTORE PUSH32 0x1E8641758C70961D246979E3C073388B65A37BAD9CC604EC5511E7200E7D144B PUSH0 DUP1 LOG1 STOP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x7E0 JUMPI JUMPDEST PUSH2 0x7C7 DUP2 DUP4 PUSH2 0x88B JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x14C JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x14C JUMPI DUP3 DUP1 PUSH2 0x72B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x7BD JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x80B SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x13B JUMPI PUSH2 0x12C DUP2 DUP4 PUSH2 0x88B JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x6DB JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 SWAP1 DUP5 CALLVALUE PUSH2 0x14C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x14C JUMPI PUSH1 0x20 SWAP3 PUSH1 0xFF SWAP2 PUSH0 MSTORE PUSH1 0x3 DUP5 MSTORE PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x14C JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x14C JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x8CC JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x8CC JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x14C JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x14C JUMPI SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 SLOAD AND PUSH2 0x9A7 JUMPI JUMP JUMPDEST PUSH32 0x42FB89B800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP3 DUP4 AND PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE SWAP4 SWAP1 SWAP3 AND DUP3 DUP3 ADD MSTORE DUP2 MSTORE PUSH2 0x9F7 PUSH1 0x60 DUP3 PUSH2 0x88B JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP INVALID PUSH1 0xE0 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x28A JUMPI DUP2 DUP2 PUSH2 0x6F6 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x20 DUP3 DUP6 PUSH2 0x2D1 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x28A JUMPI PUSH2 0x33 DUP2 PUSH2 0x2F4 JUMP JUMPDEST SWAP1 PUSH2 0x41 PUSH1 0x20 DUP1 SWAP3 ADD PUSH2 0x2F4 JUMP JUMPDEST SWAP1 DUP4 MLOAD SWAP1 DUP1 DUP3 ADD SWAP2 PUSH4 0xFFFFFFFF DUP6 AND DUP4 MSTORE DUP2 DUP2 MSTORE DUP6 DUP2 ADD PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB SWAP4 DUP3 DUP3 LT DUP6 DUP4 GT OR PUSH2 0x2A6 JUMPI PUSH0 SWAP3 DUP4 SWAP3 DUP10 MSTORE MLOAD SWAP1 PUSH2 0x80C GAS STATICCALL SWAP2 RETURNDATASIZE ISZERO PUSH2 0x2C9 JUMPI RETURNDATASIZE SWAP3 PUSH2 0x8A DUP5 PUSH2 0x305 JUMP JUMPDEST SWAP4 PUSH2 0x97 DUP9 MLOAD SWAP6 DUP7 PUSH2 0x2D1 JUMP JUMPDEST DUP5 MSTORE RETURNDATASIZE PUSH0 DUP5 DUP7 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x2BA JUMPI DUP3 MLOAD DUP4 ADD SWAP1 DUP3 DUP3 ADD SWAP4 DUP4 DUP2 DUP5 SUB SLT PUSH2 0x28A JUMPI DUP4 DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x28A JUMPI ADD SWAP3 DUP4 SWAP3 PUSH2 0x100 SWAP4 DUP5 SWAP2 SUB SLT PUSH2 0x28A JUMPI DUP8 MLOAD SWAP5 DUP4 DUP7 ADD DUP7 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2A6 JUMPI DUP10 MSTORE DUP2 DUP6 ADD MLOAD DUP4 DUP2 GT PUSH2 0x28A JUMPI DUP6 ADD DUP2 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x28A JUMPI DUP3 DUP2 ADD MLOAD PUSH2 0x10B DUP2 PUSH2 0x305 JUMP JUMPDEST SWAP2 PUSH2 0x118 DUP13 MLOAD SWAP4 DUP5 PUSH2 0x2D1 JUMP JUMPDEST DUP2 DUP4 MSTORE DUP4 DUP13 DUP4 DUP4 ADD ADD GT PUSH2 0x28A JUMPI DUP2 PUSH0 SWAP3 DUP14 DUP8 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE DUP7 MSTORE DUP9 DUP6 ADD MLOAD DUP4 DUP2 GT PUSH2 0x28A JUMPI DUP6 ADD DUP2 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x28A JUMPI DUP3 DUP2 ADD MLOAD SWAP4 DUP5 GT PUSH2 0x2A6 JUMPI DUP4 PUSH1 0x5 SHL SWAP1 DUP11 MLOAD SWAP5 PUSH2 0x16E DUP6 DUP5 ADD DUP8 PUSH2 0x2D1 JUMP JUMPDEST DUP6 MSTORE DUP11 DUP5 DUP7 ADD SWAP3 DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x28A JUMPI DUP11 DUP5 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x28E JUMPI POP POP POP POP DUP5 ADD MSTORE PUSH2 0x19F PUSH1 0x60 DUP4 ADD PUSH2 0x320 JUMP JUMPDEST DUP7 DUP5 ADD MSTORE PUSH2 0x1AF PUSH1 0x80 DUP4 ADD PUSH2 0x334 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x1C0 PUSH1 0xA0 DUP4 ADD PUSH2 0x334 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x1D1 PUSH1 0xC0 DUP4 ADD PUSH2 0x348 JUMP JUMPDEST SWAP2 DUP3 PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x1E4 PUSH1 0xE0 DUP3 ADD PUSH2 0x348 JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE ADD MLOAD DUP1 PUSH0 SIGNEXTEND DUP2 SUB PUSH2 0x28A JUMPI PUSH1 0xE0 PUSH1 0xFF SWAP4 ADD MSTORE AND PUSH1 0x8 SUB PUSH1 0xFF DUP2 GT PUSH2 0x276 JUMPI PUSH1 0xFF AND PUSH1 0x4D DUP2 GT PUSH2 0x276 JUMPI PUSH1 0xA EXP DUP1 ISZERO PUSH2 0x262 JUMPI PUSH8 0xDE0B6B3A7640000 DIV PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE MLOAD PUSH2 0x39F SWAP1 DUP2 PUSH2 0x357 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0x80 ADD MSTORE PUSH2 0x202 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xE1 ADD MSTORE PUSH2 0x145 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0x345 ADD MSTORE RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP2 SWAP1 PUSH2 0x299 DUP5 PUSH2 0x320 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 DUP4 SWAP1 PUSH2 0x185 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x1870604D PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP3 PUSH2 0xA0 JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x2A6 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x2A6 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST MLOAD SWAP1 PUSH1 0xFF DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x295D3EE8 EQ PUSH2 0x30D JUMPI POP DUP2 PUSH4 0x679AEFCE EQ PUSH2 0x105 JUMPI POP DUP1 PUSH4 0x81BFA5D1 EQ PUSH2 0xA7 JUMPI PUSH4 0xA747D56F EQ PUSH2 0x4C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP3 DUP4 DUP2 ADD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE DUP5 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP2 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2AC JUMPI DUP5 MSTORE MLOAD PUSH0 SWAP2 DUP3 SWAP2 SWAP1 PUSH2 0x808 GAS STATICCALL RETURNDATASIZE ISZERO PUSH2 0x304 JUMPI RETURNDATASIZE DUP3 DUP2 GT PUSH2 0x2D8 JUMPI DUP4 MLOAD SWAP3 PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP5 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x2AC JUMPI DUP5 MSTORE DUP3 MSTORE RETURNDATASIZE PUSH0 DUP7 DUP5 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x285 JUMPI DUP4 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xA3 JUMPI DUP4 ADD MLOAD SWAP2 DUP3 ISZERO PUSH2 0x25F JUMPI PUSH32 0x0 DUP1 DUP5 MUL SWAP4 DUP5 DIV SUB PUSH2 0x233 JUMPI POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x44526C2400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH32 0x79827DF500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP2 POP PUSH2 0x1E5 JUMP JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 ADDMOD 0xCF PUSH8 0x4357DEC88CA14336 COINBASE 0xCB 0x21 0xE1 LOG2 DUP12 DUP6 0x4E 0xDA 0xCB ORIGIN SWAP6 0xCC 0xC9 0x22 POP 0xB8 0x2C LOG4 XOR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAA DUP11 PUSH32 0xCEEB1C17BB3A1D8DEFC7D21EAA36F1DDBEFD69587F79DB9EF4B8B303CC64736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"759:2835:80:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;759:2835:80;;;;;;1581:26:47;759:2835:80;;1581:26:47;;759:2835:80;1581:26:47;;1124:6:45;;;759:2835:80;1581:26:47;;;;;;;;;;759:2835:80;1581:26:47;;;759:2835:80;;;;;;;;1581:26:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;759:2835:80;;;;;;;;;;;;;;;;;;;-1:-1:-1;;759:2835:80;;;;;;;:::i;:::-;;;;:::i;:::-;2593:45;;;;:::i;:::-;759:2835;;2663:14;759:2835;;;;;;;;2707:35;;;2703:116;;759:2835;;;;;;;;2703:116;2765:43;;;;759:2835;2765:43;759:2835;;;;;;;;;;;2765:43;759:2835;;;;;;-1:-1:-1;;759:2835:80;;;;;;;;;1124:6:45;759:2835:80;;;;;;;;;;-1:-1:-1;;759:2835:80;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;759:2835:80;;;;;;;:::i;:::-;;;;:::i;:::-;1679:34;;;:::i;:::-;1777:45;;;;:::i;:::-;759:2835;;;;1872:14;759:2835;;;;;;;;;;1918:34;1914:142;;759:2835;;;2111:47;;;;;;;;;;;;;;;;;;;;;;;;;759:2835;;;;;;;;;;;;;;;;2111:47;;;759:2835;2111:47;;;;;;759:2835;;;;;;;;1872:14;759:2835;;;;;;;;;;;;;;;;2225:26;759:2835;;;;;2268:4;759:2835;;;;;;;;;;;;;;;2288:65;759:2835;2288:65;;759:2835;;;2111:47;759:2835;;;;;;;;;1914:142;1975:70;;;;759:2835;1975:70;759:2835;;;;;;;;;;;;;1975:70;759:2835;;;;;;;-1:-1:-1;;759:2835:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;-1:-1:-1;;;759:2835:80;;;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;-1:-1:-1;;759:2835:80;;;;;;;;-1:-1:-1;759:2835:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;759:2835:80;;;;;;;;1526:20;759:2835;;;;;;;;;;;-1:-1:-1;;759:2835:80;;;;;1774:7:33;1762:20;1774:7;;1762:20;:::i;:::-;759:2835:80;;;;;1336:22:45;;;:6;;;;;;;759:2835:80;1336:22:45;;;;;;;;;;;759:2835:80;1336:22:45;;;759:2835:80;;;;;;1336:64:45;;;;;759:2835:80;1336:64:45;;;;;759:2835:80;1820:10:33;759:2835:80;;;;1394:4:45;759:2835:80;;;;;1336:64:45;;;;;;;;759:2835:80;1336:64:45;;;759:2835:80;1797:34:33;;;1793:90;;3128:147:80;;:::i;:::-;3220:4;759:2835;;;;;3220:4;759:2835;3239:29;759:2835;3239:29;;759:2835;1793:90:33;1854:18;759:2835:80;1854:18:33;759:2835:80;1854:18:33;1336:64:45;;;;;;;;;;;;;;;;:::i;:::-;;;759:2835:80;;;;;;;;;;;;1336:64:45;;;;;;;;;;759:2835:80;;;;;;;;1336:22:45;759:2835:80;1336:22:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;759:2835:80;;;;;;;;;;;;;;;;;-1:-1:-1;;759:2835:80;;;;;;;;;;;;;;;;;;;;3026:26;759:2835;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:33;759:2835:80;;;2303:50:33;;;2320:22;;759:2835:80;;;;;;;2303:50:33;;;759:2835:80;;;;;;;;;;;;;;;2293:61:33;;1931:430;:::o;759:2835:80:-;;;;;;;;;;;;;;;;;;:::o;3456:136::-;759:2835;3510:11;759:2835;;3506:80;;3456:136::o;3506:80::-;3544:31;-1:-1:-1;3544:31:80;;-1:-1:-1;3544:31:80;3281:169;759:2835;;;;;;;3409:33;;;759:2835;;;;;;;;;;;3409:33;;;759:2835;;3409:33;:::i;:::-;759:2835;3399:44;;3281:169;:::o"},"methodIdentifiers":{"create(uint32,uint32)":"568acb79","disable()":"2f2770db","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getRateProvider(uint32,uint32)":"99b8113f","getRateProviderVersion()":"381c7a4f","getVault()":"8d928af8","isRateProviderFromFactory(address)":"19912f71","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"factoryVersion\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"rateProviderVersion\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"name\":\"RateProviderAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateProviderFactoryIsDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"name\":\"RateProviderNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pairIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"name\":\"RateProviderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"RateProviderFactoryDisabled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"contract IHyperEVMRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"name\":\"getRateProvider\",\"outputs\":[{\"internalType\":\"contract IHyperEVMRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProviderVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IHyperEVMRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"name\":\"isRateProviderFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"RateProviderAlreadyExists(uint32,uint32,address)\":[{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"rateProvider\":\"The address of the deployed rate provider\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"}}],\"RateProviderNotFound(uint32,uint32)\":[{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"RateProviderCreated(uint256,uint256,address)\":{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"rateProvider\":\"The address of the deployed rate provider\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"}}},\"kind\":\"dev\",\"methods\":{\"create(uint32,uint32)\":{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"},\"returns\":{\"rateProvider\":\"The address of the deployed rate provider\"}},\"disable()\":{\"details\":\"A disabled rate provider factory cannot create new rate providers and cannot be re-enabled. However, already created rate providers are still usable. This is a permissioned function.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getRateProvider(uint32,uint32)\":{\"details\":\"Reverts if the rate provider was not found for the given token and pair.\",\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"},\"returns\":{\"rateProvider\":\"The address of the rate provider for the given token and pair\"}},\"getRateProviderVersion()\":{\"returns\":{\"_0\":\"The rate provider version number\"}},\"getVault()\":{\"details\":\"This function is virtual to allow for overriding in derived contracts which also inherits contracts with `getVault()` definition.\",\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isRateProviderFromFactory(address)\":{\"params\":{\"rateProvider\":\"The rate provider to check\"},\"returns\":{\"_0\":\"True if the rate provider was created by this factory; false otherwise\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"RateProviderAlreadyExists(uint32,uint32,address)\":[{\"notice\":\"A rate provider already exists for the given token and pair.\"}],\"RateProviderFactoryIsDisabled()\":[{\"notice\":\"The factory is disabled.\"}],\"RateProviderNotFound(uint32,uint32)\":[{\"notice\":\"The rate provider was not found for the given token and pair.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"events\":{\"RateProviderCreated(uint256,uint256,address)\":{\"notice\":\"A new HyperEVM Rate Provider was created.\"},\"RateProviderFactoryDisabled()\":{\"notice\":\"Emitted when the factory is disabled.\"}},\"kind\":\"user\",\"methods\":{\"create(uint32,uint32)\":{\"notice\":\"Creates a new HyperEVM Rate Provider for the given token and pair.\"},\"disable()\":{\"notice\":\"Disables the rate provider factory.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getRateProvider(uint32,uint32)\":{\"notice\":\"Gets the rate provider for the given token and pair.\"},\"getRateProviderVersion()\":{\"notice\":\"Returns a number representing the rate provider version.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isRateProviderFromFactory(address)\":{\"notice\":\"Checks whether the given rate provider was created by this factory.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"Factory for deploying and managing HyperEVM rate providers.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/HyperEVMRateProviderFactory.sol\":\"HyperEVMRateProviderFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\":{\"keccak256\":\"0xa2b797f83f03ad80f6512aecc2c1aed8d8aac3ffe968e0f696ec98ec4c200cd5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93ec4d5a140fed3f7885318e2816d2c498ec44730a320d491d47c990660bc268\",\"dweb:/ipfs/QmPK2pHX4dEYf77K6vyT1LMU83neZP5xe5AzcBsv7oJoLm\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol\":{\"keccak256\":\"0x9b1db72d212780046987be96919d7bc0bf9829faac6d47820a5d5f038d356d96\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://157ccbf98c1631eb1efc363e9cfb64646744b6a0c1e17f021a49c1c3649ae382\",\"dweb:/ipfs/QmUVnwLEJ8qghiReoZKUApRDP7cp4EdxKj7vEeyrZ8s453\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x11ec2b653633cbcc6a99d426df178007a98d1154a39a1ada961239be39eec069\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://40eed42ee57746bbf4711bb4aee856328cd70cc02aa3ff05e8dd719868fcd524\",\"dweb:/ipfs/QmX5uAoB9W6UUehgSRvVW6hun3XE53eZwKsm4kHVqtJs8C\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"contracts/HyperEVMRateProvider.sol\":{\"keccak256\":\"0x8946f432e7337d4db52606d91f60b1adb65648473b8fb7354a9266da5543bd0e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8abb5a40dd0a5d62be1022dd58c35b05521751e79c26f0f96c9e986857b0a0e8\",\"dweb:/ipfs/QmXh6BeSz1W8XmuKyo1TdTBHDxnTZqHSxTRtpcrE7fjwBz\"]},\"contracts/HyperEVMRateProviderFactory.sol\":{\"keccak256\":\"0x1da29e3f6fb173fc927ed05cfec8e9c79c80c2415ab299f7f2da6a2432856ab2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://381b828fe004e8f981dec61b777d26f248eb64f48cef43e7f39c04cbdd3a4b60\",\"dweb:/ipfs/QmQhY2HhjhjvqbwKd8PdfADf6pgFBzSHJ36jcXYhg3NxGH\"]},\"contracts/utils/HyperSpotPricePrecompile.sol\":{\"keccak256\":\"0x956b7c8f826704431ea1d94bec623d2c5b8b34442365f0b249f3a2c25c2c6c54\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3a70d1a6c57fc7cf290d9b4684c5740166cc04bc2a32aa17421edbc7f844d0ae\",\"dweb:/ipfs/QmXAypsKxGf5YAxWUcMeSHkXFfcDZv8WuZWS44HNf8wMZB\"]},\"contracts/utils/HyperTokenInfoPrecompile.sol\":{\"keccak256\":\"0xea3b203aa3635705f168c210f2d82b6fda6c63a01acb79f78111302b54fb2c8f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f96d680a8cb86611a2a2a55e675230d9fc397e5e5b875877e62055fb814d929\",\"dweb:/ipfs/Qme2iitvGmf1yBndr1n2yUE8sB1G54HQQqsCWg5HL5NNvZ\"]}},\"version\":1}"}},"contracts/OwnableAuthentication.sol":{"OwnableAuthentication":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault_","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461010357601f61090238819003918201601f19168301916001600160401b038311848410176101075780849260409485528339810103126101035780516001600160a01b03918282169081830361010357602001518381168091036101035780156100f05760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100e15760a0526107e6908161011c823960805181610533015260a05181818160ae015281816101ea01526106bf0152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f35908160e01c918263715018a61461041557826379ba5097146103b1578263851c1bb3146103615782638da5cb5b1461032e578263a89b11281461025f57508163aaabadc514610196578163e30c397814610162578163f2fde38b146100d6575063fbfa77cf14610083575f80fd5b346100d2575f6003193601126100d2576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b346100d25760206003193601126100d2573573ffffffffffffffffffffffffffffffffffffffff8082168092036100d25761010f6105aa565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b82346100d2575f6003193601126100d25760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b9050346100d2575f6003193601126100d25773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561025557926020935f93610226575b505191168152f35b610247919350843d861161024e575b61023f818361049a565b81019061057e565b915f61021e565b503d610235565b83513d5f823e3d90fd5b346100d25760206003193601126100d25781359073ffffffffffffffffffffffffffffffffffffffff9081831683036100d2576102c07fffffffff000000000000000000000000000000000000000000000000000000006102c79216610508565b3390610668565b15610307575f541633146102e0576102de906105f6565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b827f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b83346100d2575f6003193601126100d25760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b8382346100d25760206003193601126100d25735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100d2576103aa602092610508565b9051908152f35b50346100d2575f6003193601126100d2573373ffffffffffffffffffffffffffffffffffffffff60015416036103ea576102de336105f6565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b346100d2575f6003193601126100d25761042d6105aa565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104db57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176104db5760405251902090565b908160209103126100d2575173ffffffffffffffffffffffffffffffffffffffff811681036100d25790565b73ffffffffffffffffffffffffffffffffffffffff5f541633036105ca57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146107a857604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156107795785935f95610784575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa918215610779575f9261074657505090565b90809250813d8311610772575b61075d818361049a565b810103126100d2575180151581036100d25790565b503d610753565b6040513d5f823e3d90fd5b6064929195506107a090853d871161024e5761023f818361049a565b9490916106f1565b50505060019056fea2646970667358221220dd9e17197a4db1c55e38f27d8795035c089ddf2da4504915c7eb1442de947e7c64736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x103 JUMPI PUSH1 0x1F PUSH2 0x902 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x107 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x103 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x103 JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x103 JUMPI DUP1 ISZERO PUSH2 0xF0 JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xE1 JUMPI PUSH1 0xA0 MSTORE PUSH2 0x7E6 SWAP1 DUP2 PUSH2 0x11C DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x533 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xAE ADD MSTORE DUP2 DUP2 PUSH2 0x1EA ADD MSTORE PUSH2 0x6BF ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x715018A6 EQ PUSH2 0x415 JUMPI DUP3 PUSH4 0x79BA5097 EQ PUSH2 0x3B1 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0x361 JUMPI DUP3 PUSH4 0x8DA5CB5B EQ PUSH2 0x32E JUMPI DUP3 PUSH4 0xA89B1128 EQ PUSH2 0x25F JUMPI POP DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x196 JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x162 JUMPI DUP2 PUSH4 0xF2FDE38B EQ PUSH2 0xD6 JUMPI POP PUSH4 0xFBFA77CF EQ PUSH2 0x83 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xD2 JUMPI PUSH2 0x10F PUSH2 0x5AA JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x255 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x226 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x247 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x24E JUMPI JUMPDEST PUSH2 0x23F DUP2 DUP4 PUSH2 0x49A JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x57E JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x21E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x235 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP4 AND DUP4 SUB PUSH2 0xD2 JUMPI PUSH2 0x2C0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x2C7 SWAP3 AND PUSH2 0x508 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x668 JUMP JUMPDEST ISZERO PUSH2 0x307 JUMPI PUSH0 SLOAD AND CALLER EQ PUSH2 0x2E0 JUMPI PUSH2 0x2DE SWAP1 PUSH2 0x5F6 JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0xD2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xD2 JUMPI PUSH2 0x3AA PUSH1 0x20 SWAP3 PUSH2 0x508 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0x3EA JUMPI PUSH2 0x2DE CALLER PUSH2 0x5F6 JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH2 0x42D PUSH2 0x5AA JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x4DB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x4DB JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xD2 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xD2 JUMPI SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x5CA JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x7A8 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x779 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x784 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x779 JUMPI PUSH0 SWAP3 PUSH2 0x746 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x772 JUMPI JUMPDEST PUSH2 0x75D DUP2 DUP4 PUSH2 0x49A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xD2 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xD2 JUMPI SWAP1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x753 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x7A0 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x24E JUMPI PUSH2 0x23F DUP2 DUP4 PUSH2 0x49A JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x6F1 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD SWAP15 OR NOT PUSH27 0x4DB1C55E38F27D8795035C089DDF2DA4504915C7EB1442DE947E7C PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1209:1721:81:-:0;;;;;;;;;;;;;-1:-1:-1;;1209:1721:81;;;;-1:-1:-1;;;;;1209:1721:81;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1209:1721:81;;;;;;;;;;;;;;;;;;;;;1273:26:49;;1269:95;;1209:1721:81;;;;;;;;2093:20:50;1209:1721:81;;2093:20:50;1209:1721:81;;-1:-1:-1;1209:1721:81;;;;;-1:-1:-1;1209:1721:81;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1524:4:81;1347:46:33;;1548:29:81;1544:80;;1634:14;;1209:1721;;;;;;1347:46:33;1209:1721:81;;;;;1634:14;1209:1721;;;;;;;;;;;;;;;;1544:80;1600:13;;;-1:-1:-1;1600:13:81;;-1:-1:-1;1600:13:81;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;1209:1721:81;;-1:-1:-1;1322:31:49;1209:1721:81;-1:-1:-1;1209:1721:81;;;;;;-1:-1:-1;1209:1721:81;;;;;-1:-1:-1;1209:1721:81"},"deployedBytecode":{"functionDebugData":{"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":1406,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":1178,"id":null,"parameterSlots":2,"returnSlots":0},"fun_canPerform":{"entryPoint":1640,"id":20329,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":1450,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":1288,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_transferOwnership":{"entryPoint":1526,"id":9547,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":1331}],"20218":[{"length":32,"start":174},{"length":32,"start":490},{"length":32,"start":1727}]},"linkReferences":{},"object":"604060808152600480361015610013575f80fd5b5f35908160e01c918263715018a61461041557826379ba5097146103b1578263851c1bb3146103615782638da5cb5b1461032e578263a89b11281461025f57508163aaabadc514610196578163e30c397814610162578163f2fde38b146100d6575063fbfa77cf14610083575f80fd5b346100d2575f6003193601126100d2576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b346100d25760206003193601126100d2573573ffffffffffffffffffffffffffffffffffffffff8082168092036100d25761010f6105aa565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b82346100d2575f6003193601126100d25760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b9050346100d2575f6003193601126100d25773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561025557926020935f93610226575b505191168152f35b610247919350843d861161024e575b61023f818361049a565b81019061057e565b915f61021e565b503d610235565b83513d5f823e3d90fd5b346100d25760206003193601126100d25781359073ffffffffffffffffffffffffffffffffffffffff9081831683036100d2576102c07fffffffff000000000000000000000000000000000000000000000000000000006102c79216610508565b3390610668565b15610307575f541633146102e0576102de906105f6565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b827f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b83346100d2575f6003193601126100d25760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b8382346100d25760206003193601126100d25735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100d2576103aa602092610508565b9051908152f35b50346100d2575f6003193601126100d2573373ffffffffffffffffffffffffffffffffffffffff60015416036103ea576102de336105f6565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b346100d2575f6003193601126100d25761042d6105aa565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104db57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176104db5760405251902090565b908160209103126100d2575173ffffffffffffffffffffffffffffffffffffffff811681036100d25790565b73ffffffffffffffffffffffffffffffffffffffff5f541633036105ca57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146107a857604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156107795785935f95610784575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa918215610779575f9261074657505090565b90809250813d8311610772575b61075d818361049a565b810103126100d2575180151581036100d25790565b503d610753565b6040513d5f823e3d90fd5b6064929195506107a090853d871161024e5761023f818361049a565b9490916106f1565b50505060019056fea2646970667358221220dd9e17197a4db1c55e38f27d8795035c089ddf2da4504915c7eb1442de947e7c64736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x715018A6 EQ PUSH2 0x415 JUMPI DUP3 PUSH4 0x79BA5097 EQ PUSH2 0x3B1 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0x361 JUMPI DUP3 PUSH4 0x8DA5CB5B EQ PUSH2 0x32E JUMPI DUP3 PUSH4 0xA89B1128 EQ PUSH2 0x25F JUMPI POP DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x196 JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x162 JUMPI DUP2 PUSH4 0xF2FDE38B EQ PUSH2 0xD6 JUMPI POP PUSH4 0xFBFA77CF EQ PUSH2 0x83 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xD2 JUMPI PUSH2 0x10F PUSH2 0x5AA JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x255 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x226 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x247 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x24E JUMPI JUMPDEST PUSH2 0x23F DUP2 DUP4 PUSH2 0x49A JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x57E JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x21E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x235 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP4 AND DUP4 SUB PUSH2 0xD2 JUMPI PUSH2 0x2C0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x2C7 SWAP3 AND PUSH2 0x508 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x668 JUMP JUMPDEST ISZERO PUSH2 0x307 JUMPI PUSH0 SLOAD AND CALLER EQ PUSH2 0x2E0 JUMPI PUSH2 0x2DE SWAP1 PUSH2 0x5F6 JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0xD2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xD2 JUMPI PUSH2 0x3AA PUSH1 0x20 SWAP3 PUSH2 0x508 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0x3EA JUMPI PUSH2 0x2DE CALLER PUSH2 0x5F6 JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH2 0x42D PUSH2 0x5AA JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x4DB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x4DB JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xD2 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xD2 JUMPI SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x5CA JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x7A8 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x779 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x784 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x779 JUMPI PUSH0 SWAP3 PUSH2 0x746 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x772 JUMPI JUMPDEST PUSH2 0x75D DUP2 DUP4 PUSH2 0x49A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xD2 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xD2 JUMPI SWAP1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x753 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x7A0 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x24E JUMPI PUSH2 0x23F DUP2 DUP4 PUSH2 0x49A JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x6F1 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD SWAP15 OR NOT PUSH27 0x4DB1C55E38F27D8795035C089DDF2DA4504915C7EB1442DE947E7C PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1209:1721:81:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21;1209:1721;1810:21;;;1209:1721;;;;;;;;;;;;;;;;;;-1:-1:-1;;1209:1721:81;;;;;;;;;1348:29;1209:1721;;;;;;;;;;;;;-1:-1:-1;;1209:1721:81;;;;;;;;;;;;;;;1500:62:49;;:::i;:::-;1209:1721:81;;1738:24:50;1209:1721:81;;;1738:24:50;1209:1721:81;;;;1777:43:50;1209:1721:81;1777:43:50;;1209:1721:81;;;;;;;-1:-1:-1;;1209:1721:81;;;;;;;;1311:13:50;1209:1721:81;;;;;;;;;;;;;;;-1:-1:-1;;1209:1721:81;;;;;;1810:21;1209:1721;;1810:21;;1209:1721;1810:21;;:5;;;1209:1721;1810:21;;;;;;;;;;1209:1721;1810:21;;;1209:1721;;;;;;;;1810:21;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;1209:1721;;;;;;;;;;;;;;-1:-1:-1;;1209:1721:81;;;;;;;;;;;;;;;;;1762:20:33;1774:7;1798:33;1774:7;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;1209:1721:81;;;1820:10:33;2423:21:81;2419:77;;2524:8;;;:::i;:::-;1209:1721;2419:77;2467:18;;1209:1721;2467:18;1209:1721;2467:18;1793:90:33;1854:18;;1209:1721:81;1854:18:33;1209:1721:81;1854:18:33;1209:1721:81;;;;;;-1:-1:-1;;1209:1721:81;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1209:1721:81;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;1209:1721:81;;;;;735:10:64;1209:1721:81;1311:13:50;1209:1721:81;;2339:24:50;2335:96;;2459:6;735:10:64;2459:6:50;:::i;2335:96::-;2386:34;1209:1721:81;2386:34:50;735:10:64;1209:1721:81;;;;2386:34:50;1209:1721:81;;;;;-1:-1:-1;;1209:1721:81;;;;;1500:62:49;;:::i;:::-;1209:1721:81;;;;2093:20:50;1209:1721:81;;2093:20:50;1209:1721:81;;;;;;;;;3052:40:49;;;;1209:1721:81;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:33;1209:1721:81;;;2303:50:33;;;2320:22;;1209:1721:81;;;;;;;2303:50:33;;;1209:1721:81;;;;;;;;;;;;;;;2293:61:33;;1931:430;:::o;1209:1721:81:-;;;;;;;;;;;;;;;;;;:::o;1796:162:49:-;1209:1721:81;1710:6:49;1209:1721:81;;735:10:64;1855:23:49;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:64;1901:40:49;1209:1721:81;;1710:6:49;1901:40;2011:153:50;1209:1721:81;;;2093:20:50;1209:1721:81;;2093:20:50;1209:1721:81;2093:20:50;1209:1721:81;;;;;;;;;;2093:20:50;1209:1721:81;;3052:40:49;2093:20:50;3052:40:49;;2011:153:50:o;2546:382:81:-;;1209:1721;;;;;;;;;2721:15;;;2717:57;;1209:1721;;2858:21;1209:1721;2858:21;;;:5;;;:21;:5;;;1209:1721;2858:21;;;;;;;;;1209:1721;2858:21;;;2546:382;1209:1721;;;;;;2858:63;;;;;1209:1721;2858:63;;:21;:63;;1209:1721;;;;;2915:4;1209:1721;;;;;2858:63;;;;;;;1209:1721;2858:63;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;;;;;;;;;;;:::i;:::-;;;1209:1721;;;;;;;;;;;;2546:382;:::o;2858:63::-;;;;;;1209:1721;;;;;;;;;2858:21;1209:1721;2858:21;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","owner()":"8da5cb5b","pendingOwner()":"e30c3978","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Use it to pre-wire admin multisigs upon deployment to a contract that requires permissioned functions to work, where the impact of the owner going rogue is minimal. Contract registries, fee burners, and other utility contracts are good examples. In turn, the pre-configured owner can speed up operations as it can perform any action right after deployment without waiting for governance to set up the authorizer, which can take whole weeks. On the other hand, governance can always revoke or change the owner at any given time, keeping superior powers above the owner.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"kind\":\"user\",\"methods\":{\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"}},\"notice\":\"OwnableAuthentication is a contract that combines ownership management with authentication.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/OwnableAuthentication.sol\":\"OwnableAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]}},\"version\":1}"}},"contracts/PoolHelperCommon.sol":{"PoolHelperCommon":{"abi":[{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"InvalidPoolSetId","type":"error"},{"inputs":[],"name":"InvalidPoolSetManager","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"poolSetManager","type":"address"}],"name":"PoolSetManagerNotUnique","type":"error"},{"inputs":[],"name":"SenderIsNotPoolSetManager","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolRemovedFromSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"initialManager","type":"address"}],"name":"PoolSetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"PoolSetDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"PoolSetOwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPoolsToSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"destroyPoolSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getAllPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getManagerForPoolSet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextPoolSetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getPoolCountForSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolSetIdForCaller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"getPoolSetIdForManager","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isPoolInSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isValidPoolSetId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePoolsFromSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferPoolSetOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"acceptOwnership()":"79ba5097","addPoolsToSet(uint256,address[])":"ebf3a8d0","createPoolSet(address)":"e909c19b","createPoolSet(address,address[])":"3e035f9b","destroyPoolSet(uint256)":"7c1ec460","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAllPoolsInSet(uint256)":"94fc4058","getAuthorizer()":"aaabadc5","getManagerForPoolSet(uint256)":"f167a1e6","getNextPoolSetId()":"c482e822","getPoolCountForSet(uint256)":"62d53462","getPoolSetIdForCaller()":"ce998aba","getPoolSetIdForManager(address)":"25c427ed","getPoolsInSet(uint256,uint256,uint256)":"8c60ebd0","isPoolInSet(address,uint256)":"182551da","isValidPoolSetId(uint256)":"255dae41","owner()":"8da5cb5b","pendingOwner()":"e30c3978","removePoolsFromSet(uint256,address[])":"2da55a1d","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","transferPoolSetOwnership(address)":"3700f987","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"InvalidPoolSetId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolSetManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolSetManager\",\"type\":\"address\"}],\"name\":\"PoolSetManagerNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderIsNotPoolSetManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"PoolSetCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"PoolSetDestroyed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"PoolSetOwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPoolsToSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"destroyPoolSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getAllPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getManagerForPoolSet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextPoolSetId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getPoolCountForSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSetIdForCaller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getPoolSetIdForManager\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isPoolInSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isValidPoolSetId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePoolsFromSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferPoolSetOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"params\":{\"poolSetId\":\"Id of the set involved in the operation\"}}],\"InvalidPoolSetId(uint256)\":[{\"details\":\"This can mean the value is invalid, or it was never created, or it was destroyed.\",\"params\":{\"poolSetId\":\"The id of the invalid set\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolSetManagerNotUnique(address)\":[{\"details\":\"Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\",\"params\":{\"poolSetManager\":\"Address of the manager that is already assigned to another pool set id\"}}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolRemovedFromSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetCreated(uint256,address)\":{\"details\":\"Pools are organized into separate sets, controlled by a manager, which can be changed independently.\",\"params\":{\"initialManager\":\"Address of the pool set manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetDestroyed(uint256,address)\":{\"params\":{\"manager\":\"The address of the set's last manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"details\":\"Managers can only control one pool set. Transfers to existing managers of other sets will revert.\",\"params\":{\"newManager\":\"Address of the new manager\",\"oldManager\":\"Address of the previous manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"addPoolsToSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may add pools to a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"newPools\":\"List of pools to add\",\"poolSetId\":\"Id of the set to which the new pools belong\"}},\"createPoolSet(address)\":{\"details\":\"Convenience function to create a pool set with no initial pools. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\"}},\"createPoolSet(address,address[])\":{\"details\":\"The `newPools` list can be empty, in which case this will only create the set. Pools can then be added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\",\"newPools\":\"Set of pools to add to the set\"}},\"destroyPoolSet(uint256)\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may destroy sets, effectively removing control of any pools in the set from the associated manager. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set being destroyed\"}},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAllPoolsInSet(uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"pools\":\"List of pools\"}},\"getManagerForPoolSet(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\"}},\"getNextPoolSetId()\":{\"returns\":{\"_0\":\"The pool set id that will be used on the next call of `createPoolSet`\"}},\"getPoolCountForSet(uint256)\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction. Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The current number of pools in the set\"}},\"getPoolSetIdForCaller()\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the caller is not a pool set manager\"}},\"getPoolSetIdForManager(address)\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the address given is not a pool set manager\"}},\"getPoolsInSet(uint256,uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`). Reverts if the poolSetId is not valid.\",\"params\":{\"from\":\"Start index\",\"poolSetId\":\"Id of the set containing the pools\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"isPoolInSet(address,uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"pool\":\"Address of the pool to check\",\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the pool is in the given set, false otherwise\"}},\"isValidPoolSetId(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the poolSetId exists\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"removePoolsFromSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may remove pools from a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set to which the pools belong\",\"pools\":\"List of pools to remove from the set\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"transferPoolSetOwnership(address)\":{\"details\":\"This is a permissioned function. Only the current manager of a set can call this to set a new manager. Since managers can only control a single set, there is no need to specify the id in the call. Note that this is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts if the new manager address is zero or already the manager of a pool set.\",\"params\":{\"newManager\":\"The address of the new manager\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"InvalidPoolSetId(uint256)\":[{\"notice\":\"Pool set id associated with an operation is invalid.\"}],\"InvalidPoolSetManager()\":[{\"notice\":\"The initial manager of a pool set cannot be zero.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolNotInSet(address,uint256)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolSetManagerNotUnique(address)\":[{\"notice\":\"Pool set managers can only manage a single pool set.\"}],\"SenderIsNotPoolSetManager()\":[{\"notice\":\"Permissioned operations on pools can only be performed by the pool set manager.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"notice\":\"The owner added a pool to the given set.\"},\"PoolRemovedFromSet(address,uint256)\":{\"notice\":\"The owner removed a pool from the given set.\"},\"PoolSetCreated(uint256,address)\":{\"notice\":\"The owner created a new pool set.\"},\"PoolSetDestroyed(uint256,address)\":{\"notice\":\"The owner destroyed a pool set.\"},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"notice\":\"The current manager of a pool set transferred ownership to a new address.\"}},\"kind\":\"user\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"createPoolSet(address)\":{\"notice\":\"Create a new empty set with an initial manager.\"},\"createPoolSet(address,address[])\":{\"notice\":\"Create a new set with an initial manager, optionally initialized with a set of pools.\"},\"destroyPoolSet(uint256)\":{\"notice\":\"Simple way to remove an entire set of pools from control of the helper function.\"},\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAllPoolsInSet(uint256)\":{\"notice\":\"Get the full set of pools from a given set.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"},\"getManagerForPoolSet(uint256)\":{\"notice\":\"Get the manager address associated with a given poolSetId.\"},\"getNextPoolSetId()\":{\"notice\":\"Utility function to predict the next pool set id.\"},\"getPoolCountForSet(uint256)\":{\"notice\":\"Get the number of pools associated with the given set.\"},\"getPoolSetIdForCaller()\":{\"notice\":\"Get the pool set id associated with the caller.\"},\"getPoolSetIdForManager(address)\":{\"notice\":\"Get the pool set id associated with a given manager address.\"},\"getPoolsInSet(uint256,uint256,uint256)\":{\"notice\":\"Get a range of pools from a given set.\"},\"isPoolInSet(address,uint256)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"isValidPoolSetId(uint256)\":{\"notice\":\"Check whether a poolSetId has been created.\"},\"removePoolsFromSet(uint256,address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"transferPoolSetOwnership(address)\":{\"notice\":\"Transfer ownership of a pool set from the current manager to a new manager.\"}},\"notice\":\"Common code for helper functions that operate on a subset of pools.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/PoolHelperCommon.sol\":\"PoolHelperCommon\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xdb8365416c9dd9d7be16677c13819065511e9bc7705d6bad85fd52b65d3b3c39\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b90206982d126075b074f0a77ea9cb3ec173ed9fe9e4504b12d6807532b1b7ff\",\"dweb:/ipfs/QmYjKTu4Mrew94sSxfQ8jP4yT7wZFgghSRyB9A2kDdSy8X\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/PoolHelperCommon.sol\":{\"keccak256\":\"0xc3bd72a44d8479bacbfa4ebca2354b315160e77c378c3dc24d8cd7a41990a83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://fed38b2ea6f2842633d8d555d298adc889605bbeb3ec32728811fbc907989519\",\"dweb:/ipfs/QmX1aEVFkPAZbbSFXn6tfJnaPYWr9TDe9YHCQAiLvgZahg\"]}},\"version\":1}"}},"contracts/PoolPauseHelper.sol":{"PoolPauseHelper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"InvalidPoolSetId","type":"error"},{"inputs":[],"name":"InvalidPoolSetManager","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"poolSetManager","type":"address"}],"name":"PoolSetManagerNotUnique","type":"error"},{"inputs":[],"name":"SenderIsNotPoolSetManager","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolRemovedFromSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"initialManager","type":"address"}],"name":"PoolSetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"PoolSetDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"PoolSetOwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPoolsToSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"destroyPoolSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getAllPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getManagerForPoolSet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextPoolSetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getPoolCountForSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolSetIdForCaller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"getPoolSetIdForManager","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isPoolInSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isValidPoolSetId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"pausePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePoolsFromSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferPoolSetOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461011e57601f61199738819003918201601f19168301916001600160401b0383118484101761012257808492604094855283398101031261011e5780516001600160a01b03918282169081830361011e576020015183811680910361011e57801561010b5760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100fc5760a0526001600255611860908161013782396080518161125c015260a05181818161015e0152818161028e015281816104f10152818161066901528181610cbe01526116fe0152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f35908160e01c918263182551da14610fde578263255dae4114610f9e57826325c427ed14610f5b5782632da55a1d14610ec25782633700f98714610e0e5782633e035f9b14610c3657826362d5346214610c05578263715018a614610b8057826379ba509714610b1c5782637c1ec460146109d0578263851c1bb3146109875782638c60ebd0146108415782638da5cb5b1461080e57826394fc40581461078e578263a20dc52914610609578263a89b11281461056657508163aaabadc51461049d578163c482e8221461047f578163ce998aba1461045b578163e30c397814610427578163e909c19b146103ea578163ebf3a8d014610250578163f167a1e61461021357508063f2fde38b146101865763fbfa77cf14610133575f80fd5b34610182575f600319360112610182576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b346101825760206003193601126101825761019f611046565b6101a761138a565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b823461018257602060031936011261018257602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f2054169051908152f35b823461018257906102603661116c565b61026b93919361138a565b61027484611325565b80519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116925f5b8681106102bb57005b826102c682846111f0565b511686517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156103e0575f916103b3575b5015610389579060058b9392845f5252610328828a5f206117d2565b1561035d575090600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a3016102b2565b90867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b5090857f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b6103d39150823d84116103d9575b6103cb8183611069565b81019061130d565b8c61030c565b503d6103c1565b8a513d5f823e3d90fd5b82346101825760206003193601126101825760209061042061040a611046565b61041261138a565b61041b816113d6565b611497565b9051908152f35b8234610182575f6003193601126101825760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b8234610182575f60031936011261018257602091335f528252805f20549051908152f35b8234610182575f600319360112610182576020906002549051908152f35b905034610182575f6003193601126101825773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561055c57926020935f9361052d575b505191168152f35b61054e919350843d8611610555575b6105468183611069565b8101906112e1565b915f610525565b503d61053c565b83513d5f823e3d90fd5b34610182576020600319360112610182576105b46105ad7fffffffff000000000000000000000000000000000000000000000000000000006105a6611046565b9316611231565b33906116a7565b156105e25773ffffffffffffffffffffffffffffffffffffffff5f541633146105e2576105e09061152c565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b8382346101825760209160206003193601126101825767ffffffffffffffff9082358281116101825761064290939293369084016110ef565b9161064b611459565b938351945f9473ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016965b88811061069457005b8161069f82856111f0565b5116845f5260058b526106c281895f206001915f520160205260405f2054151590565b1561075f57883b15610182578751907f55aca1ec000000000000000000000000000000000000000000000000000000008252878201525f80828b8160249485925af1801561075557610719575b505060010161068b565b86821161072b5750875260018b61070f565b6041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b89513d5f823e3d90fd5b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b83823461018257602090602060031936011261018257356107ae81611325565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b8282106107f7576107f386866107e9828b0383611069565b519182918261119f565b0390f35b8354875295860195600193840193909101906107d1565b8334610182575f6003193601126101825760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b838234610182576060600319360112610182578035906024356044359161086784611325565b835f526005906020906005602052865f205485851190811561097d575b8115610972575b50610947575061089b83856112a7565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06108de6108c9886110d7565b976108d68a51998a611069565b8089526110d7565b01366020880137835b8581106108fb578751806107f3898261119f565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff610925828b5f2061159e565b90549060031b1c1661094061093a88846112a7565b8a6111f0565b52016108e7565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b90508410158861088b565b8087119150610884565b8382346101825760206003193601126101825735907fffffffff000000000000000000000000000000000000000000000000000000008216820361018257610420602092611231565b8382346101825760209182600319360112610182578135916109f061138a565b6109f983611325565b825f5260058452815f208054805b610abc575050825f5260058452815f208054905f815581610a9f575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610a23575f8155600101610aa9565b5f190180610b1673ffffffffffffffffffffffffffffffffffffffff610ae2838661159e565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a3846115b3565b50610a07565b5034610182575f600319360112610182573373ffffffffffffffffffffffffffffffffffffffff6001541603610b55576105e03361152c565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b34610182575f60031936011261018257610b9861138a565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b5082346101825760206003193601126101825760209135610c2581611325565b5f5260058252805f20549051908152f35b508234610182578060031936011261018257610c50611046565b60249260243567ffffffffffffffff811161018257610c75610c7e91369084016110ef565b9261041261138a565b938251610c90575b6020858551908152f35b610c9b92919261138a565b610ca485611325565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610cf25750505050610c86565b82610cfd82846111f0565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610e04575f91610de7575b5015610dbd579060058b92835f5252610d5c818b5f206117d2565b15610d905790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610ce2565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610dfe9150823d84116103d9576103cb8183611069565b8c610d41565b8b513d5f823e3d90fd5b50823461018257602060031936011261018257610e29611046565b91610e33836113d6565b610e3b611459565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b50823461018257610ed23661116c565b91610edb61138a565b610ee482611325565b8251925f5b848110610ef257005b73ffffffffffffffffffffffffffffffffffffffff610f1182846111f0565b5116845f526005602052610f2781855f206115b3565b1561075f5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610ee9565b5082346101825760206003193601126101825760209173ffffffffffffffffffffffffffffffffffffffff610f8e611046565b165f528252805f20549051908152f35b50823461018257602060031936011261018257602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b833461018257806003193601126101825760209061103d610ffd611046565b60243561100981611325565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361018257565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110aa57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116110aa5760051b60200190565b9080601f83011215610182576020908235611109816110d7565b936111176040519586611069565b81855260208086019260051b82010192831161018257602001905b828210611140575050505090565b813573ffffffffffffffffffffffffffffffffffffffff81168103610182578152908301908301611132565b90604060031983011261018257600435916024359067ffffffffffffffff82116101825761119c916004016110ef565b90565b60209060206040818301928281528551809452019301915f5b8281106111c6575050505090565b835173ffffffffffffffffffffffffffffffffffffffff16855293810193928101926001016111b8565b80518210156112045760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176110aa5760405251902090565b919082039182116112b457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90816020910312610182575173ffffffffffffffffffffffffffffffffffffffff811681036101825790565b90816020910312610182575180151581036101825790565b80158015611360575b6113355750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f2054161561132e565b73ffffffffffffffffffffffffffffffffffffffff5f541633036113aa57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff16801561143157805f52600460205260405f20546114065750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561146f57565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f1983146112b4576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b8054821015611204575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f1461169f575f19918281018181116112b4578254908482019182116112b457818103611654575b5050508054801561162757820191611609838361159e565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61168a611664611674938661159e565b90549060031b1c9283928661159e565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806115f1565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146117ca57604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa93841561179b5785935f956117a6575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa91821561179b575f9261178557505090565b61119c9250803d106103d9576103cb8183611069565b6040513d5f823e3d90fd5b6064929195506117c290853d8711610555576105468183611069565b949091611730565b505050600190565b5f82815260018201602052604090205461182457805490680100000000000000008210156110aa578261180f61167484600180960185558461159e565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220af4ddd4d79f5571a144b7e1e3507a11ee11fbc84ff726ec139cf7dcd5483fd0d64736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x11E JUMPI PUSH1 0x1F PUSH2 0x1997 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x122 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x11E JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x11E JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x11E JUMPI DUP1 ISZERO PUSH2 0x10B JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xFC JUMPI PUSH1 0xA0 MSTORE PUSH1 0x1 PUSH1 0x2 SSTORE PUSH2 0x1860 SWAP1 DUP2 PUSH2 0x137 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x125C ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x15E ADD MSTORE DUP2 DUP2 PUSH2 0x28E ADD MSTORE DUP2 DUP2 PUSH2 0x4F1 ADD MSTORE DUP2 DUP2 PUSH2 0x669 ADD MSTORE DUP2 DUP2 PUSH2 0xCBE ADD MSTORE PUSH2 0x16FE ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x182551DA EQ PUSH2 0xFDE JUMPI DUP3 PUSH4 0x255DAE41 EQ PUSH2 0xF9E JUMPI DUP3 PUSH4 0x25C427ED EQ PUSH2 0xF5B JUMPI DUP3 PUSH4 0x2DA55A1D EQ PUSH2 0xEC2 JUMPI DUP3 PUSH4 0x3700F987 EQ PUSH2 0xE0E JUMPI DUP3 PUSH4 0x3E035F9B EQ PUSH2 0xC36 JUMPI DUP3 PUSH4 0x62D53462 EQ PUSH2 0xC05 JUMPI DUP3 PUSH4 0x715018A6 EQ PUSH2 0xB80 JUMPI DUP3 PUSH4 0x79BA5097 EQ PUSH2 0xB1C JUMPI DUP3 PUSH4 0x7C1EC460 EQ PUSH2 0x9D0 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0x987 JUMPI DUP3 PUSH4 0x8C60EBD0 EQ PUSH2 0x841 JUMPI DUP3 PUSH4 0x8DA5CB5B EQ PUSH2 0x80E JUMPI DUP3 PUSH4 0x94FC4058 EQ PUSH2 0x78E JUMPI DUP3 PUSH4 0xA20DC529 EQ PUSH2 0x609 JUMPI DUP3 PUSH4 0xA89B1128 EQ PUSH2 0x566 JUMPI POP DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x49D JUMPI DUP2 PUSH4 0xC482E822 EQ PUSH2 0x47F JUMPI DUP2 PUSH4 0xCE998ABA EQ PUSH2 0x45B JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x427 JUMPI DUP2 PUSH4 0xE909C19B EQ PUSH2 0x3EA JUMPI DUP2 PUSH4 0xEBF3A8D0 EQ PUSH2 0x250 JUMPI DUP2 PUSH4 0xF167A1E6 EQ PUSH2 0x213 JUMPI POP DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x186 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x133 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0x19F PUSH2 0x1046 JUMP JUMPDEST PUSH2 0x1A7 PUSH2 0x138A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI SWAP1 PUSH2 0x260 CALLDATASIZE PUSH2 0x116C JUMP JUMPDEST PUSH2 0x26B SWAP4 SWAP2 SWAP4 PUSH2 0x138A JUMP JUMPDEST PUSH2 0x274 DUP5 PUSH2 0x1325 JUMP JUMPDEST DUP1 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x2BB JUMPI STOP JUMPDEST DUP3 PUSH2 0x2C6 DUP3 DUP5 PUSH2 0x11F0 JUMP JUMPDEST MLOAD AND DUP7 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3E0 JUMPI PUSH0 SWAP2 PUSH2 0x3B3 JUMPI JUMPDEST POP ISZERO PUSH2 0x389 JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP4 SWAP3 DUP5 PUSH0 MSTORE MSTORE PUSH2 0x328 DUP3 DUP11 PUSH0 KECCAK256 PUSH2 0x17D2 JUMP JUMPDEST ISZERO PUSH2 0x35D JUMPI POP SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0x2B2 JUMP JUMPDEST SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x3D3 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3D9 JUMPI JUMPDEST PUSH2 0x3CB DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x130D JUMP JUMPDEST DUP13 PUSH2 0x30C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3C1 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x420 PUSH2 0x40A PUSH2 0x1046 JUMP JUMPDEST PUSH2 0x412 PUSH2 0x138A JUMP JUMPDEST PUSH2 0x41B DUP2 PUSH2 0x13D6 JUMP JUMPDEST PUSH2 0x1497 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 CALLER PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x55C JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x52D JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x54E SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x555 JUMPI JUMPDEST PUSH2 0x546 DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x12E1 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x525 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x53C JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0x5B4 PUSH2 0x5AD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x5A6 PUSH2 0x1046 JUMP JUMPDEST SWAP4 AND PUSH2 0x1231 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x16A7 JUMP JUMPDEST ISZERO PUSH2 0x5E2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x5E2 JUMPI PUSH2 0x5E0 SWAP1 PUSH2 0x152C JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP3 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x182 JUMPI PUSH2 0x642 SWAP1 SWAP4 SWAP3 SWAP4 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x10EF JUMP JUMPDEST SWAP2 PUSH2 0x64B PUSH2 0x1459 JUMP JUMPDEST SWAP4 DUP4 MLOAD SWAP5 PUSH0 SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP7 JUMPDEST DUP9 DUP2 LT PUSH2 0x694 JUMPI STOP JUMPDEST DUP2 PUSH2 0x69F DUP3 DUP6 PUSH2 0x11F0 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 DUP12 MSTORE PUSH2 0x6C2 DUP2 DUP10 PUSH0 KECCAK256 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x75F JUMPI DUP9 EXTCODESIZE ISZERO PUSH2 0x182 JUMPI DUP8 MLOAD SWAP1 PUSH32 0x55ACA1EC00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP8 DUP3 ADD MSTORE PUSH0 DUP1 DUP3 DUP12 DUP2 PUSH1 0x24 SWAP5 DUP6 SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x755 JUMPI PUSH2 0x719 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x68B JUMP JUMPDEST DUP7 DUP3 GT PUSH2 0x72B JUMPI POP DUP8 MSTORE PUSH1 0x1 DUP12 PUSH2 0x70F JUMP JUMPDEST PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP10 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI CALLDATALOAD PUSH2 0x7AE DUP2 PUSH2 0x1325 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x7F7 JUMPI PUSH2 0x7F3 DUP7 DUP7 PUSH2 0x7E9 DUP3 DUP12 SUB DUP4 PUSH2 0x1069 JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x119F JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x7D1 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x867 DUP5 PUSH2 0x1325 JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x97D JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x972 JUMPI JUMPDEST POP PUSH2 0x947 JUMPI POP PUSH2 0x89B DUP4 DUP6 PUSH2 0x12A7 JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x8DE PUSH2 0x8C9 DUP9 PUSH2 0x10D7 JUMP JUMPDEST SWAP8 PUSH2 0x8D6 DUP11 MLOAD SWAP10 DUP11 PUSH2 0x1069 JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x10D7 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x8FB JUMPI DUP8 MLOAD DUP1 PUSH2 0x7F3 DUP10 DUP3 PUSH2 0x119F JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x925 DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x159E JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x940 PUSH2 0x93A DUP9 DUP5 PUSH2 0x12A7 JUMP JUMPDEST DUP11 PUSH2 0x11F0 JUMP JUMPDEST MSTORE ADD PUSH2 0x8E7 JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x88B JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x884 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x182 JUMPI PUSH2 0x420 PUSH1 0x20 SWAP3 PUSH2 0x1231 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0x9F0 PUSH2 0x138A JUMP JUMPDEST PUSH2 0x9F9 DUP4 PUSH2 0x1325 JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0xABC JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0xA9F JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA23 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xAA9 JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0xB16 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xAE2 DUP4 DUP7 PUSH2 0x159E JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x15B3 JUMP JUMPDEST POP PUSH2 0xA07 JUMP JUMPDEST POP CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0xB55 JUMPI PUSH2 0x5E0 CALLER PUSH2 0x152C JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0xB98 PUSH2 0x138A JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xC25 DUP2 PUSH2 0x1325 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0xC50 PUSH2 0x1046 JUMP JUMPDEST PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x182 JUMPI PUSH2 0xC75 PUSH2 0xC7E SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x10EF JUMP JUMPDEST SWAP3 PUSH2 0x412 PUSH2 0x138A JUMP JUMPDEST SWAP4 DUP3 MLOAD PUSH2 0xC90 JUMPI JUMPDEST PUSH1 0x20 DUP6 DUP6 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xC9B SWAP3 SWAP2 SWAP3 PUSH2 0x138A JUMP JUMPDEST PUSH2 0xCA4 DUP6 PUSH2 0x1325 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0xCF2 JUMPI POP POP POP POP PUSH2 0xC86 JUMP JUMPDEST DUP3 PUSH2 0xCFD DUP3 DUP5 PUSH2 0x11F0 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP10 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xE04 JUMPI PUSH0 SWAP2 PUSH2 0xDE7 JUMPI JUMPDEST POP ISZERO PUSH2 0xDBD JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP3 DUP4 PUSH0 MSTORE MSTORE PUSH2 0xD5C DUP2 DUP12 PUSH0 KECCAK256 PUSH2 0x17D2 JUMP JUMPDEST ISZERO PUSH2 0xD90 JUMPI SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xCE2 JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xDFE SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3D9 JUMPI PUSH2 0x3CB DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST DUP13 PUSH2 0xD41 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0xE29 PUSH2 0x1046 JUMP JUMPDEST SWAP2 PUSH2 0xE33 DUP4 PUSH2 0x13D6 JUMP JUMPDEST PUSH2 0xE3B PUSH2 0x1459 JUMP JUMPDEST SWAP2 DUP3 SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH2 0xED2 CALLDATASIZE PUSH2 0x116C JUMP JUMPDEST SWAP2 PUSH2 0xEDB PUSH2 0x138A JUMP JUMPDEST PUSH2 0xEE4 DUP3 PUSH2 0x1325 JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xEF2 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xF11 DUP3 DUP5 PUSH2 0x11F0 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0xF27 DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x15B3 JUMP JUMPDEST ISZERO PUSH2 0x75F JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0xEE9 JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xF8E PUSH2 0x1046 JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x182 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x103D PUSH2 0xFFD PUSH2 0x1046 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x1009 DUP2 PUSH2 0x1325 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x182 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10AA JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10AA JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x1109 DUP2 PUSH2 0x10D7 JUMP JUMPDEST SWAP4 PUSH2 0x1117 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1069 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x182 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1140 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x182 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1132 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x182 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x182 JUMPI PUSH2 0x119C SWAP2 PUSH1 0x4 ADD PUSH2 0x10EF JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x11C6 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x11B8 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1204 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10AA JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x12B4 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x182 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x182 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x182 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x182 JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x1360 JUMPI JUMPDEST PUSH2 0x1335 JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x132E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x13AA JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x1431 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x1406 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLER PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x146F JUMPI JUMP JUMPDEST PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x12B4 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x1204 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x169F JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x12B4 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x12B4 JUMPI DUP2 DUP2 SUB PUSH2 0x1654 JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x1627 JUMPI DUP3 ADD SWAP2 PUSH2 0x1609 DUP4 DUP4 PUSH2 0x159E JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x168A PUSH2 0x1664 PUSH2 0x1674 SWAP4 DUP7 PUSH2 0x159E JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x159E JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x15F1 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x17CA JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x179B JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x17A6 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x179B JUMPI PUSH0 SWAP3 PUSH2 0x1785 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x119C SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x3D9 JUMPI PUSH2 0x3CB DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x17C2 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x555 JUMPI PUSH2 0x546 DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1730 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1824 JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0x10AA JUMPI DUP3 PUSH2 0x180F PUSH2 0x1674 DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x159E JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF 0x4D 0xDD 0x4D PUSH26 0xF5571A144B7E1E3507A11EE11FBC84FF726EC139CF7DCD5483FD 0xD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"328:853:83:-:0;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;-1:-1:-1;;;;;328:853:83;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;328:853:83;;;;;;;;;;;;;;;;;;;;;1273:26:49;;1269:95;;328:853:83;;;;;;;;2093:20:50;328:853:83;;2093:20:50;328:853:83;;-1:-1:-1;328:853:83;;;;;-1:-1:-1;328:853:83;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1524:4:81;1347:46:33;;1548:29:81;1544:80;;1634:14;;2093:20:50;853:1:82;328:853:83;;;;;;;1347:46:33;328:853:83;;;;;1634:14:81;328:853:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1544:80:81;1600:13;;;-1:-1:-1;1600:13:81;;-1:-1:-1;1600:13:81;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;328:853:83;;-1:-1:-1;1322:31:49;328:853:83;-1:-1:-1;328:853:83;;;;;;-1:-1:-1;328:853:83;;;;;-1:-1:-1;328:853:83"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":4166,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_array_address_dyn":{"entryPoint":4335,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":4877,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":4833,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_array_address_dyn":{"entryPoint":4460,"id":null,"parameterSlots":1,"returnSlots":2},"abi_encode_array_address_dyn":{"entryPoint":4511,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":4311,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":4775,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":4201,"id":null,"parameterSlots":2,"returnSlots":0},"fun_add":{"entryPoint":6098,"id":16149,"parameterSlots":2,"returnSlots":1},"fun_canPerform":{"entryPoint":5799,"id":20329,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":5002,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_contains":{"entryPoint":null,"id":16295,"parameterSlots":2,"returnSlots":1},"fun_createPoolSet":{"entryPoint":5271,"id":20497,"parameterSlots":1,"returnSlots":1},"fun_ensureValidManager":{"entryPoint":5078,"id":21004,"parameterSlots":1,"returnSlots":0},"fun_ensureValidPoolSet":{"entryPoint":4901,"id":21058,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":4657,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_getValidPoolSetId":{"entryPoint":5209,"id":20976,"parameterSlots":0,"returnSlots":1},"fun_remove":{"entryPoint":5555,"id":16233,"parameterSlots":2,"returnSlots":1},"fun_transferOwnership":{"entryPoint":5420,"id":9547,"parameterSlots":1,"returnSlots":0},"memory_array_index_access_address_dyn":{"entryPoint":4592,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_bytes32_dyn":{"entryPoint":5534,"id":null,"parameterSlots":2,"returnSlots":2},"update_byte_slice_dynamic32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":4700}],"20218":[{"length":32,"start":350},{"length":32,"start":654},{"length":32,"start":1265},{"length":32,"start":1641},{"length":32,"start":3262},{"length":32,"start":5886}]},"linkReferences":{},"object":"604060808152600480361015610013575f80fd5b5f35908160e01c918263182551da14610fde578263255dae4114610f9e57826325c427ed14610f5b5782632da55a1d14610ec25782633700f98714610e0e5782633e035f9b14610c3657826362d5346214610c05578263715018a614610b8057826379ba509714610b1c5782637c1ec460146109d0578263851c1bb3146109875782638c60ebd0146108415782638da5cb5b1461080e57826394fc40581461078e578263a20dc52914610609578263a89b11281461056657508163aaabadc51461049d578163c482e8221461047f578163ce998aba1461045b578163e30c397814610427578163e909c19b146103ea578163ebf3a8d014610250578163f167a1e61461021357508063f2fde38b146101865763fbfa77cf14610133575f80fd5b34610182575f600319360112610182576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b346101825760206003193601126101825761019f611046565b6101a761138a565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b823461018257602060031936011261018257602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f2054169051908152f35b823461018257906102603661116c565b61026b93919361138a565b61027484611325565b80519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116925f5b8681106102bb57005b826102c682846111f0565b511686517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156103e0575f916103b3575b5015610389579060058b9392845f5252610328828a5f206117d2565b1561035d575090600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a3016102b2565b90867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b5090857f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b6103d39150823d84116103d9575b6103cb8183611069565b81019061130d565b8c61030c565b503d6103c1565b8a513d5f823e3d90fd5b82346101825760206003193601126101825760209061042061040a611046565b61041261138a565b61041b816113d6565b611497565b9051908152f35b8234610182575f6003193601126101825760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b8234610182575f60031936011261018257602091335f528252805f20549051908152f35b8234610182575f600319360112610182576020906002549051908152f35b905034610182575f6003193601126101825773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561055c57926020935f9361052d575b505191168152f35b61054e919350843d8611610555575b6105468183611069565b8101906112e1565b915f610525565b503d61053c565b83513d5f823e3d90fd5b34610182576020600319360112610182576105b46105ad7fffffffff000000000000000000000000000000000000000000000000000000006105a6611046565b9316611231565b33906116a7565b156105e25773ffffffffffffffffffffffffffffffffffffffff5f541633146105e2576105e09061152c565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b8382346101825760209160206003193601126101825767ffffffffffffffff9082358281116101825761064290939293369084016110ef565b9161064b611459565b938351945f9473ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016965b88811061069457005b8161069f82856111f0565b5116845f5260058b526106c281895f206001915f520160205260405f2054151590565b1561075f57883b15610182578751907f55aca1ec000000000000000000000000000000000000000000000000000000008252878201525f80828b8160249485925af1801561075557610719575b505060010161068b565b86821161072b5750875260018b61070f565b6041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b89513d5f823e3d90fd5b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b83823461018257602090602060031936011261018257356107ae81611325565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b8282106107f7576107f386866107e9828b0383611069565b519182918261119f565b0390f35b8354875295860195600193840193909101906107d1565b8334610182575f6003193601126101825760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b838234610182576060600319360112610182578035906024356044359161086784611325565b835f526005906020906005602052865f205485851190811561097d575b8115610972575b50610947575061089b83856112a7565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06108de6108c9886110d7565b976108d68a51998a611069565b8089526110d7565b01366020880137835b8581106108fb578751806107f3898261119f565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff610925828b5f2061159e565b90549060031b1c1661094061093a88846112a7565b8a6111f0565b52016108e7565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b90508410158861088b565b8087119150610884565b8382346101825760206003193601126101825735907fffffffff000000000000000000000000000000000000000000000000000000008216820361018257610420602092611231565b8382346101825760209182600319360112610182578135916109f061138a565b6109f983611325565b825f5260058452815f208054805b610abc575050825f5260058452815f208054905f815581610a9f575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610a23575f8155600101610aa9565b5f190180610b1673ffffffffffffffffffffffffffffffffffffffff610ae2838661159e565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a3846115b3565b50610a07565b5034610182575f600319360112610182573373ffffffffffffffffffffffffffffffffffffffff6001541603610b55576105e03361152c565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b34610182575f60031936011261018257610b9861138a565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b5082346101825760206003193601126101825760209135610c2581611325565b5f5260058252805f20549051908152f35b508234610182578060031936011261018257610c50611046565b60249260243567ffffffffffffffff811161018257610c75610c7e91369084016110ef565b9261041261138a565b938251610c90575b6020858551908152f35b610c9b92919261138a565b610ca485611325565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610cf25750505050610c86565b82610cfd82846111f0565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610e04575f91610de7575b5015610dbd579060058b92835f5252610d5c818b5f206117d2565b15610d905790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610ce2565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610dfe9150823d84116103d9576103cb8183611069565b8c610d41565b8b513d5f823e3d90fd5b50823461018257602060031936011261018257610e29611046565b91610e33836113d6565b610e3b611459565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b50823461018257610ed23661116c565b91610edb61138a565b610ee482611325565b8251925f5b848110610ef257005b73ffffffffffffffffffffffffffffffffffffffff610f1182846111f0565b5116845f526005602052610f2781855f206115b3565b1561075f5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610ee9565b5082346101825760206003193601126101825760209173ffffffffffffffffffffffffffffffffffffffff610f8e611046565b165f528252805f20549051908152f35b50823461018257602060031936011261018257602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b833461018257806003193601126101825760209061103d610ffd611046565b60243561100981611325565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361018257565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110aa57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116110aa5760051b60200190565b9080601f83011215610182576020908235611109816110d7565b936111176040519586611069565b81855260208086019260051b82010192831161018257602001905b828210611140575050505090565b813573ffffffffffffffffffffffffffffffffffffffff81168103610182578152908301908301611132565b90604060031983011261018257600435916024359067ffffffffffffffff82116101825761119c916004016110ef565b90565b60209060206040818301928281528551809452019301915f5b8281106111c6575050505090565b835173ffffffffffffffffffffffffffffffffffffffff16855293810193928101926001016111b8565b80518210156112045760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176110aa5760405251902090565b919082039182116112b457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90816020910312610182575173ffffffffffffffffffffffffffffffffffffffff811681036101825790565b90816020910312610182575180151581036101825790565b80158015611360575b6113355750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f2054161561132e565b73ffffffffffffffffffffffffffffffffffffffff5f541633036113aa57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff16801561143157805f52600460205260405f20546114065750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561146f57565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f1983146112b4576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b8054821015611204575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f1461169f575f19918281018181116112b4578254908482019182116112b457818103611654575b5050508054801561162757820191611609838361159e565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61168a611664611674938661159e565b90549060031b1c9283928661159e565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806115f1565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146117ca57604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa93841561179b5785935f956117a6575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa91821561179b575f9261178557505090565b61119c9250803d106103d9576103cb8183611069565b6040513d5f823e3d90fd5b6064929195506117c290853d8711610555576105468183611069565b949091611730565b505050600190565b5f82815260018201602052604090205461182457805490680100000000000000008210156110aa578261180f61167484600180960185558461159e565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220af4ddd4d79f5571a144b7e1e3507a11ee11fbc84ff726ec139cf7dcd5483fd0d64736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x182551DA EQ PUSH2 0xFDE JUMPI DUP3 PUSH4 0x255DAE41 EQ PUSH2 0xF9E JUMPI DUP3 PUSH4 0x25C427ED EQ PUSH2 0xF5B JUMPI DUP3 PUSH4 0x2DA55A1D EQ PUSH2 0xEC2 JUMPI DUP3 PUSH4 0x3700F987 EQ PUSH2 0xE0E JUMPI DUP3 PUSH4 0x3E035F9B EQ PUSH2 0xC36 JUMPI DUP3 PUSH4 0x62D53462 EQ PUSH2 0xC05 JUMPI DUP3 PUSH4 0x715018A6 EQ PUSH2 0xB80 JUMPI DUP3 PUSH4 0x79BA5097 EQ PUSH2 0xB1C JUMPI DUP3 PUSH4 0x7C1EC460 EQ PUSH2 0x9D0 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0x987 JUMPI DUP3 PUSH4 0x8C60EBD0 EQ PUSH2 0x841 JUMPI DUP3 PUSH4 0x8DA5CB5B EQ PUSH2 0x80E JUMPI DUP3 PUSH4 0x94FC4058 EQ PUSH2 0x78E JUMPI DUP3 PUSH4 0xA20DC529 EQ PUSH2 0x609 JUMPI DUP3 PUSH4 0xA89B1128 EQ PUSH2 0x566 JUMPI POP DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x49D JUMPI DUP2 PUSH4 0xC482E822 EQ PUSH2 0x47F JUMPI DUP2 PUSH4 0xCE998ABA EQ PUSH2 0x45B JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x427 JUMPI DUP2 PUSH4 0xE909C19B EQ PUSH2 0x3EA JUMPI DUP2 PUSH4 0xEBF3A8D0 EQ PUSH2 0x250 JUMPI DUP2 PUSH4 0xF167A1E6 EQ PUSH2 0x213 JUMPI POP DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x186 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x133 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0x19F PUSH2 0x1046 JUMP JUMPDEST PUSH2 0x1A7 PUSH2 0x138A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI SWAP1 PUSH2 0x260 CALLDATASIZE PUSH2 0x116C JUMP JUMPDEST PUSH2 0x26B SWAP4 SWAP2 SWAP4 PUSH2 0x138A JUMP JUMPDEST PUSH2 0x274 DUP5 PUSH2 0x1325 JUMP JUMPDEST DUP1 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x2BB JUMPI STOP JUMPDEST DUP3 PUSH2 0x2C6 DUP3 DUP5 PUSH2 0x11F0 JUMP JUMPDEST MLOAD AND DUP7 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3E0 JUMPI PUSH0 SWAP2 PUSH2 0x3B3 JUMPI JUMPDEST POP ISZERO PUSH2 0x389 JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP4 SWAP3 DUP5 PUSH0 MSTORE MSTORE PUSH2 0x328 DUP3 DUP11 PUSH0 KECCAK256 PUSH2 0x17D2 JUMP JUMPDEST ISZERO PUSH2 0x35D JUMPI POP SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0x2B2 JUMP JUMPDEST SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x3D3 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3D9 JUMPI JUMPDEST PUSH2 0x3CB DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x130D JUMP JUMPDEST DUP13 PUSH2 0x30C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3C1 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x420 PUSH2 0x40A PUSH2 0x1046 JUMP JUMPDEST PUSH2 0x412 PUSH2 0x138A JUMP JUMPDEST PUSH2 0x41B DUP2 PUSH2 0x13D6 JUMP JUMPDEST PUSH2 0x1497 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 CALLER PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x55C JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x52D JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x54E SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x555 JUMPI JUMPDEST PUSH2 0x546 DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x12E1 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x525 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x53C JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0x5B4 PUSH2 0x5AD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x5A6 PUSH2 0x1046 JUMP JUMPDEST SWAP4 AND PUSH2 0x1231 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x16A7 JUMP JUMPDEST ISZERO PUSH2 0x5E2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x5E2 JUMPI PUSH2 0x5E0 SWAP1 PUSH2 0x152C JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP3 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x182 JUMPI PUSH2 0x642 SWAP1 SWAP4 SWAP3 SWAP4 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x10EF JUMP JUMPDEST SWAP2 PUSH2 0x64B PUSH2 0x1459 JUMP JUMPDEST SWAP4 DUP4 MLOAD SWAP5 PUSH0 SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP7 JUMPDEST DUP9 DUP2 LT PUSH2 0x694 JUMPI STOP JUMPDEST DUP2 PUSH2 0x69F DUP3 DUP6 PUSH2 0x11F0 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 DUP12 MSTORE PUSH2 0x6C2 DUP2 DUP10 PUSH0 KECCAK256 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x75F JUMPI DUP9 EXTCODESIZE ISZERO PUSH2 0x182 JUMPI DUP8 MLOAD SWAP1 PUSH32 0x55ACA1EC00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP8 DUP3 ADD MSTORE PUSH0 DUP1 DUP3 DUP12 DUP2 PUSH1 0x24 SWAP5 DUP6 SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x755 JUMPI PUSH2 0x719 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x68B JUMP JUMPDEST DUP7 DUP3 GT PUSH2 0x72B JUMPI POP DUP8 MSTORE PUSH1 0x1 DUP12 PUSH2 0x70F JUMP JUMPDEST PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP10 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI CALLDATALOAD PUSH2 0x7AE DUP2 PUSH2 0x1325 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x7F7 JUMPI PUSH2 0x7F3 DUP7 DUP7 PUSH2 0x7E9 DUP3 DUP12 SUB DUP4 PUSH2 0x1069 JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x119F JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x7D1 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x867 DUP5 PUSH2 0x1325 JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x97D JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x972 JUMPI JUMPDEST POP PUSH2 0x947 JUMPI POP PUSH2 0x89B DUP4 DUP6 PUSH2 0x12A7 JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x8DE PUSH2 0x8C9 DUP9 PUSH2 0x10D7 JUMP JUMPDEST SWAP8 PUSH2 0x8D6 DUP11 MLOAD SWAP10 DUP11 PUSH2 0x1069 JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x10D7 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x8FB JUMPI DUP8 MLOAD DUP1 PUSH2 0x7F3 DUP10 DUP3 PUSH2 0x119F JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x925 DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x159E JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x940 PUSH2 0x93A DUP9 DUP5 PUSH2 0x12A7 JUMP JUMPDEST DUP11 PUSH2 0x11F0 JUMP JUMPDEST MSTORE ADD PUSH2 0x8E7 JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x88B JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x884 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x182 JUMPI PUSH2 0x420 PUSH1 0x20 SWAP3 PUSH2 0x1231 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0x9F0 PUSH2 0x138A JUMP JUMPDEST PUSH2 0x9F9 DUP4 PUSH2 0x1325 JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0xABC JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0xA9F JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA23 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xAA9 JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0xB16 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xAE2 DUP4 DUP7 PUSH2 0x159E JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x15B3 JUMP JUMPDEST POP PUSH2 0xA07 JUMP JUMPDEST POP CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0xB55 JUMPI PUSH2 0x5E0 CALLER PUSH2 0x152C JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x182 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0xB98 PUSH2 0x138A JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xC25 DUP2 PUSH2 0x1325 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0xC50 PUSH2 0x1046 JUMP JUMPDEST PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x182 JUMPI PUSH2 0xC75 PUSH2 0xC7E SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x10EF JUMP JUMPDEST SWAP3 PUSH2 0x412 PUSH2 0x138A JUMP JUMPDEST SWAP4 DUP3 MLOAD PUSH2 0xC90 JUMPI JUMPDEST PUSH1 0x20 DUP6 DUP6 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xC9B SWAP3 SWAP2 SWAP3 PUSH2 0x138A JUMP JUMPDEST PUSH2 0xCA4 DUP6 PUSH2 0x1325 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0xCF2 JUMPI POP POP POP POP PUSH2 0xC86 JUMP JUMPDEST DUP3 PUSH2 0xCFD DUP3 DUP5 PUSH2 0x11F0 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP10 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xE04 JUMPI PUSH0 SWAP2 PUSH2 0xDE7 JUMPI JUMPDEST POP ISZERO PUSH2 0xDBD JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP3 DUP4 PUSH0 MSTORE MSTORE PUSH2 0xD5C DUP2 DUP12 PUSH0 KECCAK256 PUSH2 0x17D2 JUMP JUMPDEST ISZERO PUSH2 0xD90 JUMPI SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xCE2 JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xDFE SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3D9 JUMPI PUSH2 0x3CB DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST DUP13 PUSH2 0xD41 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH2 0xE29 PUSH2 0x1046 JUMP JUMPDEST SWAP2 PUSH2 0xE33 DUP4 PUSH2 0x13D6 JUMP JUMPDEST PUSH2 0xE3B PUSH2 0x1459 JUMP JUMPDEST SWAP2 DUP3 SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH2 0xED2 CALLDATASIZE PUSH2 0x116C JUMP JUMPDEST SWAP2 PUSH2 0xEDB PUSH2 0x138A JUMP JUMPDEST PUSH2 0xEE4 DUP3 PUSH2 0x1325 JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xEF2 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xF11 DUP3 DUP5 PUSH2 0x11F0 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0xF27 DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x15B3 JUMP JUMPDEST ISZERO PUSH2 0x75F JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0xEE9 JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xF8E PUSH2 0x1046 JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x182 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x103D PUSH2 0xFFD PUSH2 0x1046 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x1009 DUP2 PUSH2 0x1325 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x182 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10AA JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10AA JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x1109 DUP2 PUSH2 0x10D7 JUMP JUMPDEST SWAP4 PUSH2 0x1117 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1069 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x182 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1140 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x182 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1132 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x182 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x182 JUMPI PUSH2 0x119C SWAP2 PUSH1 0x4 ADD PUSH2 0x10EF JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x11C6 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x11B8 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1204 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10AA JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x12B4 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x182 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x182 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x182 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x182 JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x1360 JUMPI JUMPDEST PUSH2 0x1335 JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x132E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x13AA JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x1431 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x1406 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLER PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x146F JUMPI JUMP JUMPDEST PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x12B4 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x1204 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x169F JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x12B4 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x12B4 JUMPI DUP2 DUP2 SUB PUSH2 0x1654 JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x1627 JUMPI DUP3 ADD SWAP2 PUSH2 0x1609 DUP4 DUP4 PUSH2 0x159E JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x168A PUSH2 0x1664 PUSH2 0x1674 SWAP4 DUP7 PUSH2 0x159E JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x159E JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x15F1 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x17CA JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x179B JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x17A6 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x179B JUMPI PUSH0 SWAP3 PUSH2 0x1785 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x119C SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x3D9 JUMPI PUSH2 0x3CB DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x17C2 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x555 JUMPI PUSH2 0x546 DUP2 DUP4 PUSH2 0x1069 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1730 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1824 JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0x10AA JUMPI DUP3 PUSH2 0x180F PUSH2 0x1674 DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x159E JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF 0x4D 0xDD 0x4D PUSH26 0xF5571A144B7E1E3507A11EE11FBC84FF726EC139CF7DCD5483FD 0xD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"328:853:83:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21:81;328:853:83;1810:21:81;;;328:853:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;;1348:29:81;328:853:83;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;:::i;:::-;1500:62:49;;:::i;:::-;328:853:83;;;;;;;1738:24:50;328:853:83;;;1738:24:50;328:853:83;;;;1777:43:50;328:853:83;1777:43:50;;328:853:83;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;;;8417:16:82;328:853:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1500:62:49;;;;;:::i;:::-;1515:9:82;;;:::i;:::-;328:853:83;;;;5232:5:82;328:853:83;;;;5103:12:82;;;;;;328:853:83;5117:3:82;5151:11;;;;;:::i;:::-;328:853:83;;;;;5232:28:82;;;;;;328:853:83;5232:28:82;328:853:83;5232:28:82;;;;;;;;;;;;;328:853:83;5232:28:82;;;5117:3;328:853:83;;5228:119:82;;328:853:83;5365:9:82;328:853:83;;;;;;;11511:50:72;328:853:83;;;;11511:50:72;:::i;:::-;328:853:83;5361:118:82;;5610:31;;328:853:83;5610:31:82;;;328:853:83;5610:31:82;;328:853:83;5088:13:82;;5361:118;5431:33;;;328:853:83;5431:33:82;328:853:83;;;;5431:33:82;5228:119;5296:36;;;;328:853:83;5296:36:82;328:853:83;;5296:36:82;5232:28;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;328:853:83;;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;2554:30:82;328:853:83;;:::i;:::-;1500:62:49;;:::i;:::-;1962:7:82;;;:::i;:::-;2554:30;:::i;:::-;328:853:83;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;1311:13:50;328:853:83;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;6549:10:82;;328:853:83;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;8254:14:82;328:853:83;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;1810:21:81;328:853:83;;1810:21:81;;328:853:83;1810:21:81;;:5;;;328:853:83;1810:21:81;;;;;;;;;;328:853:83;1810:21:81;;;328:853:83;;;;;;;;1810:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;328:853:83;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;1798:33:33;1762:20;1774:7;328:853:83;;:::i;:::-;1774:7:33;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;328:853:83;;;;1820:10:33;2423:21:81;2419:77;;2524:8;;;:::i;:::-;328:853:83;2419:77:81;2467:18;;328:853:83;2467:18:81;328:853:83;2467:18:81;328:853:83;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;934:20;;;:::i;:::-;328:853;;;1010:13;328:853;;;1141:5;;328:853;1005:168;1025:10;;;;;;328:853;1037:3;1071:8;;;;;:::i;:::-;328:853;;;;;9336:9:82;328:853:83;;12473:55:72;328:853:83;;;;5197:14:72;5101:129;-1:-1:-1;328:853:83;5197:14:72;328:853:83;;;-1:-1:-1;328:853:83;;5197:26:72;;5101:129;;12473:55;328:853:83;9332:111:82;;1141:21:83;;;;;328:853;;1141:21;328:853;1141:21;;;;;328:853;;;;;;;1141:21;;;;;;;;;;;1037:3;;;328:853;;1010:13;;1141:21;328:853;;;;;-1:-1:-1;328:853:83;;;1141:21;;;328:853;;;;;;;;;1141:21;328:853;;;;;;;;;9332:111:82;9403:29;;;;328:853:83;9403:29:82;328:853:83;;;;;9403:29:82;328:853:83;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;1515:9:82;;;:::i;:::-;328:853:83;;7533:9:82;328:853:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;;;;;1515:9:82;;;;:::i;:::-;328:853:83;;;7815:9:82;328:853:83;;;7815:9:82;328:853:83;;;;;;7859:9:82;;;:28;;;;;328:853:83;7859:50:82;;;;328:853:83;7855:115:82;;;8002:9;;;;;:::i;:::-;328:853:83;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;8027:16:82;8045:6;;;;;;328:853:83;;;;;;;:::i;8053:3:82:-;328:853:83;;;;;;;;;5853:18:72;328:853:83;;;;5853:18:72;:::i;:::-;328:853:83;;;;;;;8072:44:82;8078:8;;;;:::i;:::-;8072:44;;:::i;:::-;328:853:83;;8027:16:82;;7855:115;7932:27;;;328:853:83;7932:27:82;328:853:83;;;7932:27:82;7859:50;7891:18;;;;;7859:50;;;:28;7872:15;;;;-1:-1:-1;7859:28:82;;328:853:83;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;1500:62:49;;;:::i;:::-;1515:9:82;;;:::i;:::-;328:853:83;;;3499:9:82;328:853:83;;;;;;;3618:237:82;3625:12;;;328:853:83;;;;;3499:9:82;328:853:83;;;;;;;;;;;;;;3618:237:82;328:853:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4148:36:82;328:853:83;4148:36:82;;328:853:83;;;;;;;;;;;;;;;;;;;;;;;;;3618:237:82;-1:-1:-1;;328:853:83;5853:18:72;11832:53;328:853:83;5853:18:72;;;;:::i;:::-;328:853:83;;;;;;;3774:35:82;;;328:853:83;3774:35:82;;11832:53:72;;:::i;:::-;;3618:237:82;;328:853:83;;;;;;-1:-1:-1;;328:853:83;;;;;735:10:64;328:853:83;1311:13:50;328:853:83;;2339:24:50;2335:96;;2459:6;735:10:64;2459:6:50;:::i;2335:96::-;2386:34;328:853:83;2386:34:50;735:10:64;328:853:83;;;;2386:34:50;328:853:83;;;;;-1:-1:-1;;328:853:83;;;;;1500:62:49;;:::i;:::-;328:853:83;;;;2093:20:50;328:853:83;;2093:20:50;328:853:83;;;;;;;;;3052:40:49;;;;328:853:83;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;1515:9:82;;;:::i;:::-;328:853:83;;6905:9:82;328:853:83;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;:::i;:::-;;;;;;;;;;;2833:30:82;328:853:83;;;;;;:::i;:::-;1500:62:49;;;:::i;2833:30:82:-;328:853:83;;;2874:84:82;;328:853:83;;;;;;;;;2874:84:82;1500:62:49;;;;;:::i;:::-;1515:9:82;;;:::i;:::-;328:853:83;;;;5232:5:82;328:853:83;;;;5103:12:82;;;;;;2874:84;;;;;;5117:3;5151:11;;;;;:::i;:::-;328:853:83;;;;;5232:28:82;;;;;;328:853:83;;5232:28:82;;;;;;;;;;;;;328:853:83;5232:28:82;;;5117:3;328:853:83;;5228:119:82;;328:853:83;5365:9:82;328:853:83;;;;;;11511:50:72;328:853:83;;;;11511:50:72;:::i;:::-;328:853:83;5361:118:82;;5610:31;328:853:83;5610:31:82;;;328:853:83;5610:31:82;;328:853:83;5088:13:82;;5361:118;5431:33;;;;328:853:83;5431:33:82;328:853:83;;;;5431:33:82;5228:119;5296:36;;;;328:853:83;5296:36:82;328:853:83;;5296:36:82;5232:28;;;;;;;;;;;;;;:::i;:::-;;;;;328:853:83;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;:::i;:::-;1962:7:82;;;;:::i;:::-;4357:20;;:::i;:::-;328:853:83;;;;;;4388:16:82;328:853:83;;;;;;;;;;;;;;;;;4511:10:82;328:853:83;;;;;;;;;;;;;;;4511:10:82;4590:62;;328:853:83;4590:62:82;;328:853:83;;;;;;;;;;:::i;:::-;1500:62:49;;;:::i;:::-;1515:9:82;;;:::i;:::-;328:853:83;;5897:13:82;328:853:83;5912:12:82;;;;;;328:853:83;5926:3:82;328:853:83;5960:8:82;;;;:::i;:::-;328:853:83;;;;;5987:9:82;328:853:83;;11832:53:72;328:853:83;;;;11832:53:72;:::i;:::-;328:853:83;5983:117:82;;6119:35;;328:853:83;6119:35:82;;328:853:83;6119:35:82;;328:853:83;5897:13:82;;328:853:83;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;;;7076:16:82;328:853:83;;;;;;;;7076:41:82;;328:853:83;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;12473:55:72;328:853:83;;:::i;:::-;;;1515:9:82;;;:::i;:::-;328:853:83;;7296:9:82;328:853:83;;;;;;;;12473:55:72;5197:14;5101:129;-1:-1:-1;328:853:83;5197:14:72;328:853:83;;;-1:-1:-1;328:853:83;;5197:26:72;;5101:129;;12473:55;328:853:83;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:83;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:33;328:853:83;;;2303:50:33;;;2320:22;;328:853:83;;;;;;;2303:50:33;;;328:853:83;;;;;;;;;;;;;;;2293:61:33;;1931:430;:::o;328:853:83:-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;9677:202:82:-;9753:14;;:59;;;;9677:202;9749:124;;9677:202;:::o;9749:124::-;9835:27;9766:1;9835:27;;328:853:83;;9766:1:82;9835:27;9753:59;328:853:83;;9766:1:82;328:853:83;9771:16:82;328:853:83;;;;9766:1:82;328:853:83;;;9771:41:82;9753:59;;1796:162:49;328:853:83;1710:6:49;328:853:83;;735:10:64;1855:23:49;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:64;1901:40:49;328:853:83;;1710:6:49;1901:40;8977:266:82;328:853:83;;9051:21:82;;9047:82;;328:853:83;9070:1:82;328:853:83;9143:14:82;328:853:83;;;9070:1:82;328:853:83;;9139:98:82;;8977:266;:::o;9139:98::-;9194:32;9070:1;9194:32;9143:14;328:853:83;;9070:1:82;9194:32;9047:82;9095:23;9070:1;9095:23;;9070:1;9095:23;8758:213;6549:10;-1:-1:-1;328:853:83;6534:14:82;328:853:83;;;-1:-1:-1;328:853:83;;8890:14:82;;;8886:79;;8758:213::o;8886:79::-;8927:27;-1:-1:-1;8927:27:82;6534:14;-1:-1:-1;8927:27:82;2970:342;;3077:16;328:853:83;;-1:-1:-1;;328:853:83;;;;;;;3077:16:82;328:853:83;3065:28:82;328:853:83;-1:-1:-1;328:853:83;3152:16:82;328:853:83;;;;-1:-1:-1;328:853:83;;;;;;;;;;;;;-1:-1:-1;328:853:83;3206:14:82;328:853:83;;;;-1:-1:-1;328:853:83;;3264:41:82;-1:-1:-1;3264:41:82;;2970:342::o;2011:153:50:-;328:853:83;;;2093:20:50;328:853:83;;2093:20:50;328:853:83;2093:20:50;328:853:83;;;;;;;;;;2093:20:50;328:853:83;;3052:40:49;2093:20:50;3052:40:49;;2011:153:50:o;328:853:83:-;;;;;;;;-1:-1:-1;328:853:83;;-1:-1:-1;328:853:83;;;-1:-1:-1;328:853:83;:::o;3071:1368:72:-;;3266:14;;;328:853:83;;;;;;;;;;;3302:13:72;;;;3298:1135;3302:13;;;-1:-1:-1;;328:853:83;;;;;;;;;;;;;;;;;;;;3777:23:72;;;3773:378;;3298:1135;328:853:83;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3266:14:72;4368:11;:::o;328:853:83:-;;;;;;;;;;3773:378:72;328:853:83;3840:22:72;3961:23;3840:22;;;:::i;:::-;328:853:83;;;;;;3961:23:72;;;;;:::i;:::-;328:853:83;;;;;-1:-1:-1;;328:853:83;;;;;;;;;;;;;;;;;;;;;;;;;3773:378:72;;;;;3298:1135;4410:12;;;;328:853:83;4410:12:72;:::o;2546:382:81:-;;328:853:83;;;;;;;;;2721:15:81;;;2717:57;;328:853:83;;2858:21:81;328:853:83;2858:21:81;;;:5;;;:21;:5;;;328:853:83;2858:21:81;;;;;;;;;328:853:83;2858:21:81;;;2546:382;328:853:83;;;;;;2858:63:81;;;;;328:853:83;2858:63:81;;:21;:63;;328:853:83;;;;;2915:4:81;328:853:83;;;;;2858:63:81;;;;;;;328:853:83;2858:63:81;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;-1:-1:-1;2858:63:81;;;;;;:::i;:::-;328:853:83;;;;;;;;;2858:21:81;328:853:83;2858:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o;2497:406:72:-;-1:-1:-1;328:853:83;;;5197:14:72;;;328:853:83;;;;;;2581:21:72;;328:853:83;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2776:14:72;328:853:83;;;;;;;2832:11:72;:::o;2576:321::-;2874:12;;328:853:83;2874:12:72;:::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","addPoolsToSet(uint256,address[])":"ebf3a8d0","createPoolSet(address)":"e909c19b","createPoolSet(address,address[])":"3e035f9b","destroyPoolSet(uint256)":"7c1ec460","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAllPoolsInSet(uint256)":"94fc4058","getAuthorizer()":"aaabadc5","getManagerForPoolSet(uint256)":"f167a1e6","getNextPoolSetId()":"c482e822","getPoolCountForSet(uint256)":"62d53462","getPoolSetIdForCaller()":"ce998aba","getPoolSetIdForManager(address)":"25c427ed","getPoolsInSet(uint256,uint256,uint256)":"8c60ebd0","isPoolInSet(address,uint256)":"182551da","isValidPoolSetId(uint256)":"255dae41","owner()":"8da5cb5b","pausePools(address[])":"a20dc529","pendingOwner()":"e30c3978","removePoolsFromSet(uint256,address[])":"2da55a1d","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","transferPoolSetOwnership(address)":"3700f987","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"InvalidPoolSetId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolSetManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolSetManager\",\"type\":\"address\"}],\"name\":\"PoolSetManagerNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderIsNotPoolSetManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"PoolSetCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"PoolSetDestroyed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"PoolSetOwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPoolsToSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"destroyPoolSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getAllPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getManagerForPoolSet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextPoolSetId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getPoolCountForSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSetIdForCaller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getPoolSetIdForManager\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isPoolInSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isValidPoolSetId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"pausePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePoolsFromSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferPoolSetOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"params\":{\"poolSetId\":\"Id of the set involved in the operation\"}}],\"InvalidPoolSetId(uint256)\":[{\"details\":\"This can mean the value is invalid, or it was never created, or it was destroyed.\",\"params\":{\"poolSetId\":\"The id of the invalid set\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolSetManagerNotUnique(address)\":[{\"details\":\"Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\",\"params\":{\"poolSetManager\":\"Address of the manager that is already assigned to another pool set id\"}}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolRemovedFromSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetCreated(uint256,address)\":{\"details\":\"Pools are organized into separate sets, controlled by a manager, which can be changed independently.\",\"params\":{\"initialManager\":\"Address of the pool set manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetDestroyed(uint256,address)\":{\"params\":{\"manager\":\"The address of the set's last manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"details\":\"Managers can only control one pool set. Transfers to existing managers of other sets will revert.\",\"params\":{\"newManager\":\"Address of the new manager\",\"oldManager\":\"Address of the previous manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"addPoolsToSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may add pools to a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"newPools\":\"List of pools to add\",\"poolSetId\":\"Id of the set to which the new pools belong\"}},\"createPoolSet(address)\":{\"details\":\"Convenience function to create a pool set with no initial pools. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\"}},\"createPoolSet(address,address[])\":{\"details\":\"The `newPools` list can be empty, in which case this will only create the set. Pools can then be added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\",\"newPools\":\"Set of pools to add to the set\"}},\"destroyPoolSet(uint256)\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may destroy sets, effectively removing control of any pools in the set from the associated manager. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set being destroyed\"}},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAllPoolsInSet(uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"pools\":\"List of pools\"}},\"getManagerForPoolSet(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\"}},\"getNextPoolSetId()\":{\"returns\":{\"_0\":\"The pool set id that will be used on the next call of `createPoolSet`\"}},\"getPoolCountForSet(uint256)\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction. Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The current number of pools in the set\"}},\"getPoolSetIdForCaller()\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the caller is not a pool set manager\"}},\"getPoolSetIdForManager(address)\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the address given is not a pool set manager\"}},\"getPoolsInSet(uint256,uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`). Reverts if the poolSetId is not valid.\",\"params\":{\"from\":\"Start index\",\"poolSetId\":\"Id of the set containing the pools\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"isPoolInSet(address,uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"pool\":\"Address of the pool to check\",\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the pool is in the given set, false otherwise\"}},\"isValidPoolSetId(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the poolSetId exists\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pausePools(address[])\":{\"details\":\"This is a permissioned function. Governance must first grant this contract permission to call `pausePool` on the Vault, then grant another account permission to call `pausePools` here. Note that this is not necessarily the same account that can add or remove pools from the pausable list. Note that there is no `unpause`. This is a helper contract designed to react quickly to emergencies. Unpausing is a more deliberate action that should be performed by accounts approved by governance for this purpose, or by the individual pools' pause managers.\",\"params\":{\"pools\":\"List of pools to pause\"}},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"removePoolsFromSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may remove pools from a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set to which the pools belong\",\"pools\":\"List of pools to remove from the set\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"transferPoolSetOwnership(address)\":{\"details\":\"This is a permissioned function. Only the current manager of a set can call this to set a new manager. Since managers can only control a single set, there is no need to specify the id in the call. Note that this is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts if the new manager address is zero or already the manager of a pool set.\",\"params\":{\"newManager\":\"The address of the new manager\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"InvalidPoolSetId(uint256)\":[{\"notice\":\"Pool set id associated with an operation is invalid.\"}],\"InvalidPoolSetManager()\":[{\"notice\":\"The initial manager of a pool set cannot be zero.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolNotInSet(address,uint256)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolSetManagerNotUnique(address)\":[{\"notice\":\"Pool set managers can only manage a single pool set.\"}],\"SenderIsNotPoolSetManager()\":[{\"notice\":\"Permissioned operations on pools can only be performed by the pool set manager.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"notice\":\"The owner added a pool to the given set.\"},\"PoolRemovedFromSet(address,uint256)\":{\"notice\":\"The owner removed a pool from the given set.\"},\"PoolSetCreated(uint256,address)\":{\"notice\":\"The owner created a new pool set.\"},\"PoolSetDestroyed(uint256,address)\":{\"notice\":\"The owner destroyed a pool set.\"},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"notice\":\"The current manager of a pool set transferred ownership to a new address.\"}},\"kind\":\"user\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"createPoolSet(address)\":{\"notice\":\"Create a new empty set with an initial manager.\"},\"createPoolSet(address,address[])\":{\"notice\":\"Create a new set with an initial manager, optionally initialized with a set of pools.\"},\"destroyPoolSet(uint256)\":{\"notice\":\"Simple way to remove an entire set of pools from control of the helper function.\"},\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAllPoolsInSet(uint256)\":{\"notice\":\"Get the full set of pools from a given set.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"},\"getManagerForPoolSet(uint256)\":{\"notice\":\"Get the manager address associated with a given poolSetId.\"},\"getNextPoolSetId()\":{\"notice\":\"Utility function to predict the next pool set id.\"},\"getPoolCountForSet(uint256)\":{\"notice\":\"Get the number of pools associated with the given set.\"},\"getPoolSetIdForCaller()\":{\"notice\":\"Get the pool set id associated with the caller.\"},\"getPoolSetIdForManager(address)\":{\"notice\":\"Get the pool set id associated with a given manager address.\"},\"getPoolsInSet(uint256,uint256,uint256)\":{\"notice\":\"Get a range of pools from a given set.\"},\"isPoolInSet(address,uint256)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"isValidPoolSetId(uint256)\":{\"notice\":\"Check whether a poolSetId has been created.\"},\"pausePools(address[])\":{\"notice\":\"Pause a set of pools.\"},\"removePoolsFromSet(uint256,address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"transferPoolSetOwnership(address)\":{\"notice\":\"Transfer ownership of a pool set from the current manager to a new manager.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/PoolPauseHelper.sol\":\"PoolPauseHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xdb8365416c9dd9d7be16677c13819065511e9bc7705d6bad85fd52b65d3b3c39\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b90206982d126075b074f0a77ea9cb3ec173ed9fe9e4504b12d6807532b1b7ff\",\"dweb:/ipfs/QmYjKTu4Mrew94sSxfQ8jP4yT7wZFgghSRyB9A2kDdSy8X\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol\":{\"keccak256\":\"0x5d5225c4c283e407458f36d0a10770445b0bd570333fce8d1365af978e8d7829\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://27d0e427a303790222bb696a940882129bafcd3ff57215179d4434d6506b8372\",\"dweb:/ipfs/QmNvL9juq6FzUXHHEufHreckXsPupv2rJw2CC3EBZQiEY5\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/PoolHelperCommon.sol\":{\"keccak256\":\"0xc3bd72a44d8479bacbfa4ebca2354b315160e77c378c3dc24d8cd7a41990a83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://fed38b2ea6f2842633d8d555d298adc889605bbeb3ec32728811fbc907989519\",\"dweb:/ipfs/QmX1aEVFkPAZbbSFXn6tfJnaPYWr9TDe9YHCQAiLvgZahg\"]},\"contracts/PoolPauseHelper.sol\":{\"keccak256\":\"0x8b11ff2aebad966caa7c1e207d48d8debc3ffd23d3ce88fb193c8c93dbb43692\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4ef5deef1194e8e4847d6f82f74ed482264cb123391f964adc48076aad90d2d0\",\"dweb:/ipfs/QmfL9Yc2Tfchb3vJS7oehD2otYZ5tSKpCb1Z7KiuUQkHuu\"]}},\"version\":1}"}},"contracts/PoolSwapFeeHelper.sol":{"PoolSwapFeeHelper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"InvalidPoolSetId","type":"error"},{"inputs":[],"name":"InvalidPoolSetManager","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolHasSwapManager","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"poolSetManager","type":"address"}],"name":"PoolSetManagerNotUnique","type":"error"},{"inputs":[],"name":"SenderIsNotPoolSetManager","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolRemovedFromSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"initialManager","type":"address"}],"name":"PoolSetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"PoolSetDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"PoolSetOwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPoolsToSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"destroyPoolSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getAllPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getManagerForPoolSet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextPoolSetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getPoolCountForSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolSetIdForCaller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"getPoolSetIdForManager","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isPoolInSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isValidPoolSetId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePoolsFromSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferPoolSetOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461011e57601f611b8d38819003918201601f19168301916001600160401b0383118484101761012257808492604094855283398101031261011e5780516001600160a01b03918282169081830361011e576020015183811680910361011e57801561010b5760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100fc5760a0526001600255611a569081610137823960805181611442015260a0518181816101610152818161029b015281816105c20152818161074b01528181610d9301526118f40152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60406080815260049081361015610014575f80fd5b5f915f35908160e01c918263182551da146111a8578263255dae411461116857826325c427ed146111255782632da55a1d1461105d5782633700f98714610fa95782633e035f9b14610d0b57826362d5346214610cda578263715018a614610c5557826379ba509714610bf15782637c1ec46014610aa5578263851c1bb314610a5c5782638c60ebd0146109165782638da5cb5b146108e357826394fc405814610863578263a89b1128146107c057508163aaabadc5146106f7578163c482e822146106d9578163ce998aba146106b5578163d15126ba14610559578163e30c397814610524578163e909c19b146104e6578163ebf3a8d01461025d578163f167a1e61461021b57508063f2fde38b146101895763fbfa77cf14610136575f80fd5b346101855781600319360112610185576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b8234610218576020600319360112610218576101a3611210565b6101ab61155f565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b905034610259576020600319360112610259578160209373ffffffffffffffffffffffffffffffffffffffff92358152600385522054169051908152f35b8280fd5b919050346102595761026e36611352565b909161027861155f565b610281836114fa565b81519373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811693875b8781106102ca578880f35b826102d582846113d6565b511685517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818d5afa9081156104dc578d916104af575b50156104855761033483898e8d815260058552206119c8565b15610457578b88517fe9ddeb260000000000000000000000000000000000000000000000000000000081528489820152808b818660609384935afa92831561044c57908994939291926103e4575b50500151166103bb575090876001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b698c80a3016102bf565b8a82877ff043494a00000000000000000000000000000000000000000000000000000000835252fd5b8194508092503d8311610445575b6103fc818361127c565b810103126104415786916104368a80519261041684611233565b61041f81611773565b845261042c858201611773565b8585015201611773565b8a8201525f80610382565b8c80fd5b503d6103f2565b8b51903d90823e3d90fd5b60448c8b84868b7f5a17aa8d0000000000000000000000000000000000000000000000000000000085525252fd5b508a82877f9e51bd5c00000000000000000000000000000000000000000000000000000000835252fd5b6104cf9150823d84116104d5575b6104c7818361127c565b8101906114e2565b5f61031b565b503d6104bd565b89513d8f823e3d90fd5b5050346101855760206003193601126101855760209061051d610507611210565b61050f61155f565b610518816115ab565b61166c565b9051908152f35b50503461018557816003193601126101855760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b91905034610683578060031936011261068357610574611210565b9161057d61162e565b92835f526005602052825f20936105ba73ffffffffffffffffffffffffffffffffffffffff80931680966001915f520160205260405f2054151590565b1561068757507f00000000000000000000000000000000000000000000000000000000000000001692833b15610683575f9360448592855196879384927fd15126ba0000000000000000000000000000000000000000000000000000000084528784015260243560248401525af1801561067957610636578380f35b9091925067ffffffffffffffff831161064d575052005b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b82513d5f823e3d90fd5b5f80fd5b84837f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b8234610683575f60031936011261068357602091335f528252805f20549051908152f35b8234610683575f600319360112610683576020906002549051908152f35b905034610683575f6003193601126106835773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa9182156107b657926020935f93610787575b505191168152f35b6107a8919350843d86116107af575b6107a0818361127c565b8101906114b6565b918461077f565b503d610796565b83513d5f823e3d90fd5b346106835760206003193601126106835761080e6108077fffffffff00000000000000000000000000000000000000000000000000000000610800611210565b9316611417565b339061189d565b1561083c5773ffffffffffffffffffffffffffffffffffffffff5f5416331461083c5761083a90611701565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b8382346106835760209060206003193601126106835735610883816114fa565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b8282106108cc576108c886866108be828b038361127c565b5191829182611385565b0390f35b8354875295860195600193840193909101906108a6565b8334610683575f6003193601126106835760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b838234610683576060600319360112610683578035906024356044359161093c846114fa565b835f526005906020906005602052865f2054858511908115610a52575b8115610a47575b50610a1c5750610970838561147c565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06109b361099e886112bd565b976109ab8a51998a61127c565b8089526112bd565b01366020880137835b8581106109d0578751806108c88982611385565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff6109fa828b5f20611794565b90549060031b1c16610a15610a0f888461147c565b8a6113d6565b52016109bc565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b905084101588610960565b8087119150610959565b8382346106835760206003193601126106835735907fffffffff00000000000000000000000000000000000000000000000000000000821682036106835761051d602092611417565b838234610683576020918260031936011261068357813591610ac561155f565b610ace836114fa565b825f5260058452815f208054805b610b91575050825f5260058452815f208054905f815581610b74575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610af8575f8155600101610b7e565b5f190180610beb73ffffffffffffffffffffffffffffffffffffffff610bb78386611794565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a3846117a9565b50610adc565b5034610683575f600319360112610683573373ffffffffffffffffffffffffffffffffffffffff6001541603610c2a5761083a33611701565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b34610683575f60031936011261068357610c6d61155f565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b5082346106835760206003193601126106835760209135610cfa816114fa565b5f5260058252805f20549051908152f35b838234610683578160031936011261068357610d25611210565b91602492833567ffffffffffffffff811161068357610d4a610d5391369086016112d5565b9161050f61155f565b928151610d65575b6020848451908152f35b610d6d61155f565b610d76846114fa565b8151915f73ffffffffffffffffffffffffffffffffffffffff91827f000000000000000000000000000000000000000000000000000000000000000016915b858110610dc55750505050610d5b565b83610dd082846113d6565b511687517fc673bdaf000000000000000000000000000000000000000000000000000000008152818782015260209081818d81895afa908115610f9f575f91610f82575b5015610f5857895f5260058152610e2d828a5f206119c8565b15610f2a5788517fe9ddeb260000000000000000000000000000000000000000000000000000000081528288820152808c6060928391818a5afa918215610f205790889392915f92610edc575b5050015116610eb25790886001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610db5565b8990867ff043494a000000000000000000000000000000000000000000000000000000005f52525ffd5b8194508092503d8311610f19575b610ef4818361127c565b81010312610683578691610f0e8b80519261041684611233565b8b8201528d80610e7a565b503d610eea565b8b513d5f823e3d90fd5b898b83897f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8a82887f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610f999150823d84116104d5576104c7818361127c565b8c610e14565b8a513d5f823e3d90fd5b50823461068357602060031936011261068357610fc4611210565b91610fce836115ab565b610fd661162e565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b5082346106835761106d36611352565b9161107661155f565b61107f826114fa565b8251925f5b84811061108d57005b73ffffffffffffffffffffffffffffffffffffffff6110ac82846113d6565b5116845f5260056020526110c281855f206117a9565b156110f65790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301611084565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b5082346106835760206003193601126106835760209173ffffffffffffffffffffffffffffffffffffffff611158611210565b165f528252805f20549051908152f35b50823461068357602060031936011261068357602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b83346106835780600319360112610683576020906112076111c7611210565b6024356111d3816114fa565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361068357565b6060810190811067ffffffffffffffff82111761124f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761124f57604052565b67ffffffffffffffff811161124f5760051b60200190565b9080601f830112156106835760209082356112ef816112bd565b936112fd604051958661127c565b81855260208086019260051b82010192831161068357602001905b828210611326575050505090565b813573ffffffffffffffffffffffffffffffffffffffff81168103610683578152908301908301611318565b90604060031983011261068357600435916024359067ffffffffffffffff821161068357611382916004016112d5565b90565b60209060206040818301928281528551809452019301915f5b8281106113ac575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161139e565b80518210156113ea5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f000000000000000000000000000000000000000000000000000000000000000084521660408201526024815261147681611233565b51902090565b9190820391821161148957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90816020910312610683575173ffffffffffffffffffffffffffffffffffffffff811681036106835790565b90816020910312610683575180151581036106835790565b80158015611535575b61150a5750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20541615611503565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361157f57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff16801561160657805f52600460205260405f20546115db5750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561164457565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611489576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b519073ffffffffffffffffffffffffffffffffffffffff8216820361068357565b80548210156113ea575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f14611895575f1991828101818111611489578254908482019182116114895781810361184a575b5050508054801561181d578201916117ff8383611794565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61188061185a61186a9386611794565b90549060031b1c92839286611794565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806117e7565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146119c057604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156119915785935f9561199c575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa918215611991575f9261197b57505090565b6113829250803d106104d5576104c7818361127c565b6040513d5f823e3d90fd5b6064929195506119b890853d87116107af576107a0818361127c565b949091611926565b505050600190565b5f828152600182016020526040902054611a1a578054906801000000000000000082101561124f5782611a0561186a846001809601855584611794565b90558054925f520160205260405f2055600190565b50505f9056fea26469706673582212208dc0e4743e12ee5f0d77b67b9e416275d12bb9532fbad2e7db007a9e72871de864736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x11E JUMPI PUSH1 0x1F PUSH2 0x1B8D CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x122 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x11E JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x11E JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x11E JUMPI DUP1 ISZERO PUSH2 0x10B JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xFC JUMPI PUSH1 0xA0 MSTORE PUSH1 0x1 PUSH1 0x2 SSTORE PUSH2 0x1A56 SWAP1 DUP2 PUSH2 0x137 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x1442 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x161 ADD MSTORE DUP2 DUP2 PUSH2 0x29B ADD MSTORE DUP2 DUP2 PUSH2 0x5C2 ADD MSTORE DUP2 DUP2 PUSH2 0x74B ADD MSTORE DUP2 DUP2 PUSH2 0xD93 ADD MSTORE PUSH2 0x18F4 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x182551DA EQ PUSH2 0x11A8 JUMPI DUP3 PUSH4 0x255DAE41 EQ PUSH2 0x1168 JUMPI DUP3 PUSH4 0x25C427ED EQ PUSH2 0x1125 JUMPI DUP3 PUSH4 0x2DA55A1D EQ PUSH2 0x105D JUMPI DUP3 PUSH4 0x3700F987 EQ PUSH2 0xFA9 JUMPI DUP3 PUSH4 0x3E035F9B EQ PUSH2 0xD0B JUMPI DUP3 PUSH4 0x62D53462 EQ PUSH2 0xCDA JUMPI DUP3 PUSH4 0x715018A6 EQ PUSH2 0xC55 JUMPI DUP3 PUSH4 0x79BA5097 EQ PUSH2 0xBF1 JUMPI DUP3 PUSH4 0x7C1EC460 EQ PUSH2 0xAA5 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0xA5C JUMPI DUP3 PUSH4 0x8C60EBD0 EQ PUSH2 0x916 JUMPI DUP3 PUSH4 0x8DA5CB5B EQ PUSH2 0x8E3 JUMPI DUP3 PUSH4 0x94FC4058 EQ PUSH2 0x863 JUMPI DUP3 PUSH4 0xA89B1128 EQ PUSH2 0x7C0 JUMPI POP DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x6F7 JUMPI DUP2 PUSH4 0xC482E822 EQ PUSH2 0x6D9 JUMPI DUP2 PUSH4 0xCE998ABA EQ PUSH2 0x6B5 JUMPI DUP2 PUSH4 0xD15126BA EQ PUSH2 0x559 JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x524 JUMPI DUP2 PUSH4 0xE909C19B EQ PUSH2 0x4E6 JUMPI DUP2 PUSH4 0xEBF3A8D0 EQ PUSH2 0x25D JUMPI DUP2 PUSH4 0xF167A1E6 EQ PUSH2 0x21B JUMPI POP DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x189 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x136 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x218 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x218 JUMPI PUSH2 0x1A3 PUSH2 0x1210 JUMP JUMPDEST PUSH2 0x1AB PUSH2 0x155F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE DUP3 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x259 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x259 JUMPI DUP2 PUSH1 0x20 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x3 DUP6 MSTORE KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x259 JUMPI PUSH2 0x26E CALLDATASIZE PUSH2 0x1352 JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x278 PUSH2 0x155F JUMP JUMPDEST PUSH2 0x281 DUP4 PUSH2 0x14FA JUMP JUMPDEST DUP2 MLOAD SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 DUP8 JUMPDEST DUP8 DUP2 LT PUSH2 0x2CA JUMPI DUP9 DUP1 RETURN JUMPDEST DUP3 PUSH2 0x2D5 DUP3 DUP5 PUSH2 0x13D6 JUMP JUMPDEST MLOAD AND DUP6 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP14 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x4DC JUMPI DUP14 SWAP2 PUSH2 0x4AF JUMPI JUMPDEST POP ISZERO PUSH2 0x485 JUMPI PUSH2 0x334 DUP4 DUP10 DUP15 DUP14 DUP2 MSTORE PUSH1 0x5 DUP6 MSTORE KECCAK256 PUSH2 0x19C8 JUMP JUMPDEST ISZERO PUSH2 0x457 JUMPI DUP12 DUP9 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP5 DUP10 DUP3 ADD MSTORE DUP1 DUP12 DUP2 DUP7 PUSH1 0x60 SWAP4 DUP5 SWAP4 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x44C JUMPI SWAP1 DUP10 SWAP5 SWAP4 SWAP3 SWAP2 SWAP3 PUSH2 0x3E4 JUMPI JUMPDEST POP POP ADD MLOAD AND PUSH2 0x3BB JUMPI POP SWAP1 DUP8 PUSH1 0x1 SWAP3 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 DUP13 DUP1 LOG3 ADD PUSH2 0x2BF JUMP JUMPDEST DUP11 DUP3 DUP8 PUSH32 0xF043494A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST DUP2 SWAP5 POP DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x445 JUMPI JUMPDEST PUSH2 0x3FC DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x441 JUMPI DUP7 SWAP2 PUSH2 0x436 DUP11 DUP1 MLOAD SWAP3 PUSH2 0x416 DUP5 PUSH2 0x1233 JUMP JUMPDEST PUSH2 0x41F DUP2 PUSH2 0x1773 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x42C DUP6 DUP3 ADD PUSH2 0x1773 JUMP JUMPDEST DUP6 DUP6 ADD MSTORE ADD PUSH2 0x1773 JUMP JUMPDEST DUP11 DUP3 ADD MSTORE PUSH0 DUP1 PUSH2 0x382 JUMP JUMPDEST DUP13 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x3F2 JUMP JUMPDEST DUP12 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x44 DUP13 DUP12 DUP5 DUP7 DUP12 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE MSTORE MSTORE REVERT JUMPDEST POP DUP11 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH2 0x4CF SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D5 JUMPI JUMPDEST PUSH2 0x4C7 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x14E2 JUMP JUMPDEST PUSH0 PUSH2 0x31B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4BD JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x51D PUSH2 0x507 PUSH2 0x1210 JUMP JUMPDEST PUSH2 0x50F PUSH2 0x155F JUMP JUMPDEST PUSH2 0x518 DUP2 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x166C JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x185 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x683 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0x574 PUSH2 0x1210 JUMP JUMPDEST SWAP2 PUSH2 0x57D PUSH2 0x162E JUMP JUMPDEST SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP4 PUSH2 0x5BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP1 SWAP7 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x687 JUMPI POP PUSH32 0x0 AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x683 JUMPI PUSH0 SWAP4 PUSH1 0x44 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 SWAP4 DUP5 SWAP3 PUSH32 0xD15126BA00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP8 DUP5 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x24 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x679 JUMPI PUSH2 0x636 JUMPI DUP4 DUP1 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x64D JUMPI POP MSTORE STOP JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP5 DUP4 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 CALLER PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7B6 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x787 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x7A8 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x7AF JUMPI JUMPDEST PUSH2 0x7A0 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x14B6 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x77F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x796 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0x80E PUSH2 0x807 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x800 PUSH2 0x1210 JUMP JUMPDEST SWAP4 AND PUSH2 0x1417 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x189D JUMP JUMPDEST ISZERO PUSH2 0x83C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x83C JUMPI PUSH2 0x83A SWAP1 PUSH2 0x1701 JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI CALLDATALOAD PUSH2 0x883 DUP2 PUSH2 0x14FA JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x8CC JUMPI PUSH2 0x8C8 DUP7 DUP7 PUSH2 0x8BE DUP3 DUP12 SUB DUP4 PUSH2 0x127C JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1385 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x8A6 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x93C DUP5 PUSH2 0x14FA JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0xA52 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0xA47 JUMPI JUMPDEST POP PUSH2 0xA1C JUMPI POP PUSH2 0x970 DUP4 DUP6 PUSH2 0x147C JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x9B3 PUSH2 0x99E DUP9 PUSH2 0x12BD JUMP JUMPDEST SWAP8 PUSH2 0x9AB DUP11 MLOAD SWAP10 DUP11 PUSH2 0x127C JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x12BD JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x9D0 JUMPI DUP8 MLOAD DUP1 PUSH2 0x8C8 DUP10 DUP3 PUSH2 0x1385 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x9FA DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0xA15 PUSH2 0xA0F DUP9 DUP5 PUSH2 0x147C JUMP JUMPDEST DUP11 PUSH2 0x13D6 JUMP JUMPDEST MSTORE ADD PUSH2 0x9BC JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x960 JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x959 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x683 JUMPI PUSH2 0x51D PUSH1 0x20 SWAP3 PUSH2 0x1417 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0xAC5 PUSH2 0x155F JUMP JUMPDEST PUSH2 0xACE DUP4 PUSH2 0x14FA JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0xB91 JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0xB74 JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAF8 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xB7E JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0xBEB PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xBB7 DUP4 DUP7 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x17A9 JUMP JUMPDEST POP PUSH2 0xADC JUMP JUMPDEST POP CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0xC2A JUMPI PUSH2 0x83A CALLER PUSH2 0x1701 JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0xC6D PUSH2 0x155F JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xCFA DUP2 PUSH2 0x14FA JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0xD25 PUSH2 0x1210 JUMP JUMPDEST SWAP2 PUSH1 0x24 SWAP3 DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x683 JUMPI PUSH2 0xD4A PUSH2 0xD53 SWAP2 CALLDATASIZE SWAP1 DUP7 ADD PUSH2 0x12D5 JUMP JUMPDEST SWAP2 PUSH2 0x50F PUSH2 0x155F JUMP JUMPDEST SWAP3 DUP2 MLOAD PUSH2 0xD65 JUMPI JUMPDEST PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xD6D PUSH2 0x155F JUMP JUMPDEST PUSH2 0xD76 DUP5 PUSH2 0x14FA JUMP JUMPDEST DUP2 MLOAD SWAP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 PUSH32 0x0 AND SWAP2 JUMPDEST DUP6 DUP2 LT PUSH2 0xDC5 JUMPI POP POP POP POP PUSH2 0xD5B JUMP JUMPDEST DUP4 PUSH2 0xDD0 DUP3 DUP5 PUSH2 0x13D6 JUMP JUMPDEST MLOAD AND DUP8 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP8 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP14 DUP2 DUP10 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xF9F JUMPI PUSH0 SWAP2 PUSH2 0xF82 JUMPI JUMPDEST POP ISZERO PUSH2 0xF58 JUMPI DUP10 PUSH0 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH2 0xE2D DUP3 DUP11 PUSH0 KECCAK256 PUSH2 0x19C8 JUMP JUMPDEST ISZERO PUSH2 0xF2A JUMPI DUP9 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP9 DUP3 ADD MSTORE DUP1 DUP13 PUSH1 0x60 SWAP3 DUP4 SWAP2 DUP2 DUP11 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xF20 JUMPI SWAP1 DUP9 SWAP4 SWAP3 SWAP2 PUSH0 SWAP3 PUSH2 0xEDC JUMPI JUMPDEST POP POP ADD MLOAD AND PUSH2 0xEB2 JUMPI SWAP1 DUP9 PUSH1 0x1 SWAP3 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xDB5 JUMP JUMPDEST DUP10 SWAP1 DUP7 PUSH32 0xF043494A00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP2 SWAP5 POP DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xF19 JUMPI JUMPDEST PUSH2 0xEF4 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x683 JUMPI DUP7 SWAP2 PUSH2 0xF0E DUP12 DUP1 MLOAD SWAP3 PUSH2 0x416 DUP5 PUSH2 0x1233 JUMP JUMPDEST DUP12 DUP3 ADD MSTORE DUP14 DUP1 PUSH2 0xE7A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xEEA JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP10 DUP12 DUP4 DUP10 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP11 DUP3 DUP9 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xF99 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D5 JUMPI PUSH2 0x4C7 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP13 PUSH2 0xE14 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0xFC4 PUSH2 0x1210 JUMP JUMPDEST SWAP2 PUSH2 0xFCE DUP4 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0xFD6 PUSH2 0x162E JUMP JUMPDEST SWAP2 DUP3 SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH2 0x106D CALLDATASIZE PUSH2 0x1352 JUMP JUMPDEST SWAP2 PUSH2 0x1076 PUSH2 0x155F JUMP JUMPDEST PUSH2 0x107F DUP3 PUSH2 0x14FA JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x108D JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x10AC DUP3 DUP5 PUSH2 0x13D6 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0x10C2 DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x17A9 JUMP JUMPDEST ISZERO PUSH2 0x10F6 JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0x1084 JUMP JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1158 PUSH2 0x1210 JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x683 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1207 PUSH2 0x11C7 PUSH2 0x1210 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x11D3 DUP2 PUSH2 0x14FA JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x683 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x124F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x124F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x124F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x12EF DUP2 PUSH2 0x12BD JUMP JUMPDEST SWAP4 PUSH2 0x12FD PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x127C JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x683 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1326 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x683 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1318 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x683 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x683 JUMPI PUSH2 0x1382 SWAP2 PUSH1 0x4 ADD PUSH2 0x12D5 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x13AC JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x139E JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x13EA JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x1476 DUP2 PUSH2 0x1233 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1489 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x683 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x683 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x683 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x683 JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x1535 JUMPI JUMPDEST PUSH2 0x150A JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x1503 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x157F JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x1606 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x15DB JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLER PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x1644 JUMPI JUMP JUMPDEST PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x1489 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x683 JUMPI JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x13EA JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x1895 JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x1489 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x1489 JUMPI DUP2 DUP2 SUB PUSH2 0x184A JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x181D JUMPI DUP3 ADD SWAP2 PUSH2 0x17FF DUP4 DUP4 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x1880 PUSH2 0x185A PUSH2 0x186A SWAP4 DUP7 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x1794 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x17E7 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x19C0 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x1991 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x199C JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1991 JUMPI PUSH0 SWAP3 PUSH2 0x197B JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1382 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x4D5 JUMPI PUSH2 0x4C7 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x19B8 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x7AF JUMPI PUSH2 0x7A0 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1926 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1A1A JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0x124F JUMPI DUP3 PUSH2 0x1A05 PUSH2 0x186A DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 0xC0 0xE4 PUSH21 0x3E12EE5F0D77B67B9E416275D12BB9532FBAD2E7DB STOP PUSH27 0x9E72871DE864736F6C634300081B00330000000000000000000000 ","sourceMap":"332:1205:84:-:0;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;-1:-1:-1;;;;;332:1205:84;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;332:1205:84;;;;;;;;;;;;;;;;;;;;;1273:26:49;;1269:95;;332:1205:84;;;;;;;;2093:20:50;332:1205:84;;2093:20:50;332:1205:84;;-1:-1:-1;332:1205:84;;;;;-1:-1:-1;332:1205:84;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1524:4:81;1347:46:33;;1548:29:81;1544:80;;1634:14;;2093:20:50;853:1:82;332:1205:84;;;;;;;1347:46:33;332:1205:84;;;;;1634:14:81;332:1205:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1544:80:81;1600:13;;;-1:-1:-1;1600:13:81;;-1:-1:-1;1600:13:81;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;332:1205:84;;-1:-1:-1;1322:31:49;332:1205:84;-1:-1:-1;332:1205:84;;;;;;-1:-1:-1;332:1205:84;;;;;-1:-1:-1;332:1205:84"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":4624,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":6003,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn":{"entryPoint":4821,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":5346,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":5302,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_array_address_dyn":{"entryPoint":4946,"id":null,"parameterSlots":1,"returnSlots":2},"abi_encode_array_address_dyn":{"entryPoint":4997,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":4797,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":5244,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":4732,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_17076":{"entryPoint":4659,"id":null,"parameterSlots":1,"returnSlots":0},"fun_add":{"entryPoint":6600,"id":16149,"parameterSlots":2,"returnSlots":1},"fun_canPerform":{"entryPoint":6301,"id":20329,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":5471,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_contains":{"entryPoint":null,"id":16295,"parameterSlots":2,"returnSlots":1},"fun_createPoolSet":{"entryPoint":5740,"id":20497,"parameterSlots":1,"returnSlots":1},"fun_ensureValidManager":{"entryPoint":5547,"id":21004,"parameterSlots":1,"returnSlots":0},"fun_ensureValidPoolSet":{"entryPoint":5370,"id":21058,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":5143,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_getValidPoolSetId":{"entryPoint":5678,"id":20976,"parameterSlots":0,"returnSlots":1},"fun_remove":{"entryPoint":6057,"id":16233,"parameterSlots":2,"returnSlots":1},"fun_transferOwnership":{"entryPoint":5889,"id":9547,"parameterSlots":1,"returnSlots":0},"memory_array_index_access_address_dyn":{"entryPoint":5078,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_bytes32_dyn":{"entryPoint":6036,"id":null,"parameterSlots":2,"returnSlots":2},"update_byte_slice_dynamic32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":5186}],"20218":[{"length":32,"start":353},{"length":32,"start":667},{"length":32,"start":1474},{"length":32,"start":1867},{"length":32,"start":3475},{"length":32,"start":6388}]},"linkReferences":{},"object":"60406080815260049081361015610014575f80fd5b5f915f35908160e01c918263182551da146111a8578263255dae411461116857826325c427ed146111255782632da55a1d1461105d5782633700f98714610fa95782633e035f9b14610d0b57826362d5346214610cda578263715018a614610c5557826379ba509714610bf15782637c1ec46014610aa5578263851c1bb314610a5c5782638c60ebd0146109165782638da5cb5b146108e357826394fc405814610863578263a89b1128146107c057508163aaabadc5146106f7578163c482e822146106d9578163ce998aba146106b5578163d15126ba14610559578163e30c397814610524578163e909c19b146104e6578163ebf3a8d01461025d578163f167a1e61461021b57508063f2fde38b146101895763fbfa77cf14610136575f80fd5b346101855781600319360112610185576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b8234610218576020600319360112610218576101a3611210565b6101ab61155f565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b905034610259576020600319360112610259578160209373ffffffffffffffffffffffffffffffffffffffff92358152600385522054169051908152f35b8280fd5b919050346102595761026e36611352565b909161027861155f565b610281836114fa565b81519373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811693875b8781106102ca578880f35b826102d582846113d6565b511685517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818d5afa9081156104dc578d916104af575b50156104855761033483898e8d815260058552206119c8565b15610457578b88517fe9ddeb260000000000000000000000000000000000000000000000000000000081528489820152808b818660609384935afa92831561044c57908994939291926103e4575b50500151166103bb575090876001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b698c80a3016102bf565b8a82877ff043494a00000000000000000000000000000000000000000000000000000000835252fd5b8194508092503d8311610445575b6103fc818361127c565b810103126104415786916104368a80519261041684611233565b61041f81611773565b845261042c858201611773565b8585015201611773565b8a8201525f80610382565b8c80fd5b503d6103f2565b8b51903d90823e3d90fd5b60448c8b84868b7f5a17aa8d0000000000000000000000000000000000000000000000000000000085525252fd5b508a82877f9e51bd5c00000000000000000000000000000000000000000000000000000000835252fd5b6104cf9150823d84116104d5575b6104c7818361127c565b8101906114e2565b5f61031b565b503d6104bd565b89513d8f823e3d90fd5b5050346101855760206003193601126101855760209061051d610507611210565b61050f61155f565b610518816115ab565b61166c565b9051908152f35b50503461018557816003193601126101855760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b91905034610683578060031936011261068357610574611210565b9161057d61162e565b92835f526005602052825f20936105ba73ffffffffffffffffffffffffffffffffffffffff80931680966001915f520160205260405f2054151590565b1561068757507f00000000000000000000000000000000000000000000000000000000000000001692833b15610683575f9360448592855196879384927fd15126ba0000000000000000000000000000000000000000000000000000000084528784015260243560248401525af1801561067957610636578380f35b9091925067ffffffffffffffff831161064d575052005b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b82513d5f823e3d90fd5b5f80fd5b84837f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b8234610683575f60031936011261068357602091335f528252805f20549051908152f35b8234610683575f600319360112610683576020906002549051908152f35b905034610683575f6003193601126106835773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa9182156107b657926020935f93610787575b505191168152f35b6107a8919350843d86116107af575b6107a0818361127c565b8101906114b6565b918461077f565b503d610796565b83513d5f823e3d90fd5b346106835760206003193601126106835761080e6108077fffffffff00000000000000000000000000000000000000000000000000000000610800611210565b9316611417565b339061189d565b1561083c5773ffffffffffffffffffffffffffffffffffffffff5f5416331461083c5761083a90611701565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b8382346106835760209060206003193601126106835735610883816114fa565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b8282106108cc576108c886866108be828b038361127c565b5191829182611385565b0390f35b8354875295860195600193840193909101906108a6565b8334610683575f6003193601126106835760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b838234610683576060600319360112610683578035906024356044359161093c846114fa565b835f526005906020906005602052865f2054858511908115610a52575b8115610a47575b50610a1c5750610970838561147c565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06109b361099e886112bd565b976109ab8a51998a61127c565b8089526112bd565b01366020880137835b8581106109d0578751806108c88982611385565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff6109fa828b5f20611794565b90549060031b1c16610a15610a0f888461147c565b8a6113d6565b52016109bc565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b905084101588610960565b8087119150610959565b8382346106835760206003193601126106835735907fffffffff00000000000000000000000000000000000000000000000000000000821682036106835761051d602092611417565b838234610683576020918260031936011261068357813591610ac561155f565b610ace836114fa565b825f5260058452815f208054805b610b91575050825f5260058452815f208054905f815581610b74575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610af8575f8155600101610b7e565b5f190180610beb73ffffffffffffffffffffffffffffffffffffffff610bb78386611794565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a3846117a9565b50610adc565b5034610683575f600319360112610683573373ffffffffffffffffffffffffffffffffffffffff6001541603610c2a5761083a33611701565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b34610683575f60031936011261068357610c6d61155f565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b5082346106835760206003193601126106835760209135610cfa816114fa565b5f5260058252805f20549051908152f35b838234610683578160031936011261068357610d25611210565b91602492833567ffffffffffffffff811161068357610d4a610d5391369086016112d5565b9161050f61155f565b928151610d65575b6020848451908152f35b610d6d61155f565b610d76846114fa565b8151915f73ffffffffffffffffffffffffffffffffffffffff91827f000000000000000000000000000000000000000000000000000000000000000016915b858110610dc55750505050610d5b565b83610dd082846113d6565b511687517fc673bdaf000000000000000000000000000000000000000000000000000000008152818782015260209081818d81895afa908115610f9f575f91610f82575b5015610f5857895f5260058152610e2d828a5f206119c8565b15610f2a5788517fe9ddeb260000000000000000000000000000000000000000000000000000000081528288820152808c6060928391818a5afa918215610f205790889392915f92610edc575b5050015116610eb25790886001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610db5565b8990867ff043494a000000000000000000000000000000000000000000000000000000005f52525ffd5b8194508092503d8311610f19575b610ef4818361127c565b81010312610683578691610f0e8b80519261041684611233565b8b8201528d80610e7a565b503d610eea565b8b513d5f823e3d90fd5b898b83897f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8a82887f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610f999150823d84116104d5576104c7818361127c565b8c610e14565b8a513d5f823e3d90fd5b50823461068357602060031936011261068357610fc4611210565b91610fce836115ab565b610fd661162e565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b5082346106835761106d36611352565b9161107661155f565b61107f826114fa565b8251925f5b84811061108d57005b73ffffffffffffffffffffffffffffffffffffffff6110ac82846113d6565b5116845f5260056020526110c281855f206117a9565b156110f65790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301611084565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b5082346106835760206003193601126106835760209173ffffffffffffffffffffffffffffffffffffffff611158611210565b165f528252805f20549051908152f35b50823461068357602060031936011261068357602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b83346106835780600319360112610683576020906112076111c7611210565b6024356111d3816114fa565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361068357565b6060810190811067ffffffffffffffff82111761124f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761124f57604052565b67ffffffffffffffff811161124f5760051b60200190565b9080601f830112156106835760209082356112ef816112bd565b936112fd604051958661127c565b81855260208086019260051b82010192831161068357602001905b828210611326575050505090565b813573ffffffffffffffffffffffffffffffffffffffff81168103610683578152908301908301611318565b90604060031983011261068357600435916024359067ffffffffffffffff821161068357611382916004016112d5565b90565b60209060206040818301928281528551809452019301915f5b8281106113ac575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161139e565b80518210156113ea5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f000000000000000000000000000000000000000000000000000000000000000084521660408201526024815261147681611233565b51902090565b9190820391821161148957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90816020910312610683575173ffffffffffffffffffffffffffffffffffffffff811681036106835790565b90816020910312610683575180151581036106835790565b80158015611535575b61150a5750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20541615611503565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361157f57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff16801561160657805f52600460205260405f20546115db5750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561164457565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611489576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b519073ffffffffffffffffffffffffffffffffffffffff8216820361068357565b80548210156113ea575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f14611895575f1991828101818111611489578254908482019182116114895781810361184a575b5050508054801561181d578201916117ff8383611794565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61188061185a61186a9386611794565b90549060031b1c92839286611794565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806117e7565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146119c057604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156119915785935f9561199c575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa918215611991575f9261197b57505090565b6113829250803d106104d5576104c7818361127c565b6040513d5f823e3d90fd5b6064929195506119b890853d87116107af576107a0818361127c565b949091611926565b505050600190565b5f828152600182016020526040902054611a1a578054906801000000000000000082101561124f5782611a0561186a846001809601855584611794565b90558054925f520160205260405f2055600190565b50505f9056fea26469706673582212208dc0e4743e12ee5f0d77b67b9e416275d12bb9532fbad2e7db007a9e72871de864736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x182551DA EQ PUSH2 0x11A8 JUMPI DUP3 PUSH4 0x255DAE41 EQ PUSH2 0x1168 JUMPI DUP3 PUSH4 0x25C427ED EQ PUSH2 0x1125 JUMPI DUP3 PUSH4 0x2DA55A1D EQ PUSH2 0x105D JUMPI DUP3 PUSH4 0x3700F987 EQ PUSH2 0xFA9 JUMPI DUP3 PUSH4 0x3E035F9B EQ PUSH2 0xD0B JUMPI DUP3 PUSH4 0x62D53462 EQ PUSH2 0xCDA JUMPI DUP3 PUSH4 0x715018A6 EQ PUSH2 0xC55 JUMPI DUP3 PUSH4 0x79BA5097 EQ PUSH2 0xBF1 JUMPI DUP3 PUSH4 0x7C1EC460 EQ PUSH2 0xAA5 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0xA5C JUMPI DUP3 PUSH4 0x8C60EBD0 EQ PUSH2 0x916 JUMPI DUP3 PUSH4 0x8DA5CB5B EQ PUSH2 0x8E3 JUMPI DUP3 PUSH4 0x94FC4058 EQ PUSH2 0x863 JUMPI DUP3 PUSH4 0xA89B1128 EQ PUSH2 0x7C0 JUMPI POP DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x6F7 JUMPI DUP2 PUSH4 0xC482E822 EQ PUSH2 0x6D9 JUMPI DUP2 PUSH4 0xCE998ABA EQ PUSH2 0x6B5 JUMPI DUP2 PUSH4 0xD15126BA EQ PUSH2 0x559 JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x524 JUMPI DUP2 PUSH4 0xE909C19B EQ PUSH2 0x4E6 JUMPI DUP2 PUSH4 0xEBF3A8D0 EQ PUSH2 0x25D JUMPI DUP2 PUSH4 0xF167A1E6 EQ PUSH2 0x21B JUMPI POP DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x189 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x136 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x218 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x218 JUMPI PUSH2 0x1A3 PUSH2 0x1210 JUMP JUMPDEST PUSH2 0x1AB PUSH2 0x155F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE DUP3 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x259 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x259 JUMPI DUP2 PUSH1 0x20 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x3 DUP6 MSTORE KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x259 JUMPI PUSH2 0x26E CALLDATASIZE PUSH2 0x1352 JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x278 PUSH2 0x155F JUMP JUMPDEST PUSH2 0x281 DUP4 PUSH2 0x14FA JUMP JUMPDEST DUP2 MLOAD SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 DUP8 JUMPDEST DUP8 DUP2 LT PUSH2 0x2CA JUMPI DUP9 DUP1 RETURN JUMPDEST DUP3 PUSH2 0x2D5 DUP3 DUP5 PUSH2 0x13D6 JUMP JUMPDEST MLOAD AND DUP6 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP14 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x4DC JUMPI DUP14 SWAP2 PUSH2 0x4AF JUMPI JUMPDEST POP ISZERO PUSH2 0x485 JUMPI PUSH2 0x334 DUP4 DUP10 DUP15 DUP14 DUP2 MSTORE PUSH1 0x5 DUP6 MSTORE KECCAK256 PUSH2 0x19C8 JUMP JUMPDEST ISZERO PUSH2 0x457 JUMPI DUP12 DUP9 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP5 DUP10 DUP3 ADD MSTORE DUP1 DUP12 DUP2 DUP7 PUSH1 0x60 SWAP4 DUP5 SWAP4 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x44C JUMPI SWAP1 DUP10 SWAP5 SWAP4 SWAP3 SWAP2 SWAP3 PUSH2 0x3E4 JUMPI JUMPDEST POP POP ADD MLOAD AND PUSH2 0x3BB JUMPI POP SWAP1 DUP8 PUSH1 0x1 SWAP3 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 DUP13 DUP1 LOG3 ADD PUSH2 0x2BF JUMP JUMPDEST DUP11 DUP3 DUP8 PUSH32 0xF043494A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST DUP2 SWAP5 POP DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x445 JUMPI JUMPDEST PUSH2 0x3FC DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x441 JUMPI DUP7 SWAP2 PUSH2 0x436 DUP11 DUP1 MLOAD SWAP3 PUSH2 0x416 DUP5 PUSH2 0x1233 JUMP JUMPDEST PUSH2 0x41F DUP2 PUSH2 0x1773 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x42C DUP6 DUP3 ADD PUSH2 0x1773 JUMP JUMPDEST DUP6 DUP6 ADD MSTORE ADD PUSH2 0x1773 JUMP JUMPDEST DUP11 DUP3 ADD MSTORE PUSH0 DUP1 PUSH2 0x382 JUMP JUMPDEST DUP13 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x3F2 JUMP JUMPDEST DUP12 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x44 DUP13 DUP12 DUP5 DUP7 DUP12 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE MSTORE MSTORE REVERT JUMPDEST POP DUP11 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH2 0x4CF SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D5 JUMPI JUMPDEST PUSH2 0x4C7 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x14E2 JUMP JUMPDEST PUSH0 PUSH2 0x31B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4BD JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x51D PUSH2 0x507 PUSH2 0x1210 JUMP JUMPDEST PUSH2 0x50F PUSH2 0x155F JUMP JUMPDEST PUSH2 0x518 DUP2 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x166C JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x185 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x683 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0x574 PUSH2 0x1210 JUMP JUMPDEST SWAP2 PUSH2 0x57D PUSH2 0x162E JUMP JUMPDEST SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP4 PUSH2 0x5BA PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP1 SWAP7 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x687 JUMPI POP PUSH32 0x0 AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x683 JUMPI PUSH0 SWAP4 PUSH1 0x44 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 SWAP4 DUP5 SWAP3 PUSH32 0xD15126BA00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP8 DUP5 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x24 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x679 JUMPI PUSH2 0x636 JUMPI DUP4 DUP1 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x64D JUMPI POP MSTORE STOP JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP5 DUP4 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 CALLER PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7B6 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x787 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x7A8 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x7AF JUMPI JUMPDEST PUSH2 0x7A0 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x14B6 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x77F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x796 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0x80E PUSH2 0x807 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x800 PUSH2 0x1210 JUMP JUMPDEST SWAP4 AND PUSH2 0x1417 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x189D JUMP JUMPDEST ISZERO PUSH2 0x83C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x83C JUMPI PUSH2 0x83A SWAP1 PUSH2 0x1701 JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI CALLDATALOAD PUSH2 0x883 DUP2 PUSH2 0x14FA JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x8CC JUMPI PUSH2 0x8C8 DUP7 DUP7 PUSH2 0x8BE DUP3 DUP12 SUB DUP4 PUSH2 0x127C JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1385 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x8A6 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x93C DUP5 PUSH2 0x14FA JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0xA52 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0xA47 JUMPI JUMPDEST POP PUSH2 0xA1C JUMPI POP PUSH2 0x970 DUP4 DUP6 PUSH2 0x147C JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x9B3 PUSH2 0x99E DUP9 PUSH2 0x12BD JUMP JUMPDEST SWAP8 PUSH2 0x9AB DUP11 MLOAD SWAP10 DUP11 PUSH2 0x127C JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x12BD JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x9D0 JUMPI DUP8 MLOAD DUP1 PUSH2 0x8C8 DUP10 DUP3 PUSH2 0x1385 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x9FA DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0xA15 PUSH2 0xA0F DUP9 DUP5 PUSH2 0x147C JUMP JUMPDEST DUP11 PUSH2 0x13D6 JUMP JUMPDEST MSTORE ADD PUSH2 0x9BC JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x960 JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x959 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x683 JUMPI PUSH2 0x51D PUSH1 0x20 SWAP3 PUSH2 0x1417 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0xAC5 PUSH2 0x155F JUMP JUMPDEST PUSH2 0xACE DUP4 PUSH2 0x14FA JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0xB91 JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0xB74 JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAF8 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xB7E JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0xBEB PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xBB7 DUP4 DUP7 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x17A9 JUMP JUMPDEST POP PUSH2 0xADC JUMP JUMPDEST POP CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0xC2A JUMPI PUSH2 0x83A CALLER PUSH2 0x1701 JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x683 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0xC6D PUSH2 0x155F JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xCFA DUP2 PUSH2 0x14FA JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x683 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0xD25 PUSH2 0x1210 JUMP JUMPDEST SWAP2 PUSH1 0x24 SWAP3 DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x683 JUMPI PUSH2 0xD4A PUSH2 0xD53 SWAP2 CALLDATASIZE SWAP1 DUP7 ADD PUSH2 0x12D5 JUMP JUMPDEST SWAP2 PUSH2 0x50F PUSH2 0x155F JUMP JUMPDEST SWAP3 DUP2 MLOAD PUSH2 0xD65 JUMPI JUMPDEST PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xD6D PUSH2 0x155F JUMP JUMPDEST PUSH2 0xD76 DUP5 PUSH2 0x14FA JUMP JUMPDEST DUP2 MLOAD SWAP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 PUSH32 0x0 AND SWAP2 JUMPDEST DUP6 DUP2 LT PUSH2 0xDC5 JUMPI POP POP POP POP PUSH2 0xD5B JUMP JUMPDEST DUP4 PUSH2 0xDD0 DUP3 DUP5 PUSH2 0x13D6 JUMP JUMPDEST MLOAD AND DUP8 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP8 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP14 DUP2 DUP10 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xF9F JUMPI PUSH0 SWAP2 PUSH2 0xF82 JUMPI JUMPDEST POP ISZERO PUSH2 0xF58 JUMPI DUP10 PUSH0 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH2 0xE2D DUP3 DUP11 PUSH0 KECCAK256 PUSH2 0x19C8 JUMP JUMPDEST ISZERO PUSH2 0xF2A JUMPI DUP9 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP9 DUP3 ADD MSTORE DUP1 DUP13 PUSH1 0x60 SWAP3 DUP4 SWAP2 DUP2 DUP11 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xF20 JUMPI SWAP1 DUP9 SWAP4 SWAP3 SWAP2 PUSH0 SWAP3 PUSH2 0xEDC JUMPI JUMPDEST POP POP ADD MLOAD AND PUSH2 0xEB2 JUMPI SWAP1 DUP9 PUSH1 0x1 SWAP3 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xDB5 JUMP JUMPDEST DUP10 SWAP1 DUP7 PUSH32 0xF043494A00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP2 SWAP5 POP DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xF19 JUMPI JUMPDEST PUSH2 0xEF4 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x683 JUMPI DUP7 SWAP2 PUSH2 0xF0E DUP12 DUP1 MLOAD SWAP3 PUSH2 0x416 DUP5 PUSH2 0x1233 JUMP JUMPDEST DUP12 DUP3 ADD MSTORE DUP14 DUP1 PUSH2 0xE7A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xEEA JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP10 DUP12 DUP4 DUP10 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP11 DUP3 DUP9 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xF99 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D5 JUMPI PUSH2 0x4C7 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST DUP13 PUSH2 0xE14 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH2 0xFC4 PUSH2 0x1210 JUMP JUMPDEST SWAP2 PUSH2 0xFCE DUP4 PUSH2 0x15AB JUMP JUMPDEST PUSH2 0xFD6 PUSH2 0x162E JUMP JUMPDEST SWAP2 DUP3 SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH2 0x106D CALLDATASIZE PUSH2 0x1352 JUMP JUMPDEST SWAP2 PUSH2 0x1076 PUSH2 0x155F JUMP JUMPDEST PUSH2 0x107F DUP3 PUSH2 0x14FA JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x108D JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x10AC DUP3 DUP5 PUSH2 0x13D6 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0x10C2 DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x17A9 JUMP JUMPDEST ISZERO PUSH2 0x10F6 JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0x1084 JUMP JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1158 PUSH2 0x1210 JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x683 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x683 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1207 PUSH2 0x11C7 PUSH2 0x1210 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x11D3 DUP2 PUSH2 0x14FA JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x683 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x124F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x124F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x124F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x683 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x12EF DUP2 PUSH2 0x12BD JUMP JUMPDEST SWAP4 PUSH2 0x12FD PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x127C JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x683 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1326 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x683 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1318 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x683 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x683 JUMPI PUSH2 0x1382 SWAP2 PUSH1 0x4 ADD PUSH2 0x12D5 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x13AC JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x139E JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x13EA JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x1476 DUP2 PUSH2 0x1233 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1489 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x683 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x683 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x683 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x683 JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x1535 JUMPI JUMPDEST PUSH2 0x150A JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x1503 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x157F JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x1606 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x15DB JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLER PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x1644 JUMPI JUMP JUMPDEST PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x1489 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x683 JUMPI JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x13EA JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x1895 JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x1489 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x1489 JUMPI DUP2 DUP2 SUB PUSH2 0x184A JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x181D JUMPI DUP3 ADD SWAP2 PUSH2 0x17FF DUP4 DUP4 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x1880 PUSH2 0x185A PUSH2 0x186A SWAP4 DUP7 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x1794 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x17E7 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x19C0 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x1991 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x199C JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1991 JUMPI PUSH0 SWAP3 PUSH2 0x197B JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1382 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x4D5 JUMPI PUSH2 0x4C7 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x19B8 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x7AF JUMPI PUSH2 0x7A0 DUP2 DUP4 PUSH2 0x127C JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1926 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1A1A JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0x124F JUMPI DUP3 PUSH2 0x1A05 PUSH2 0x186A DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x1794 JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 0xC0 0xE4 PUSH21 0x3E12EE5F0D77B67B9E416275D12BB9532FBAD2E7DB STOP PUSH27 0x9E72871DE864736F6C634300081B00330000000000000000000000 ","sourceMap":"332:1205:84:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21:81;332:1205:84;1810:21:81;;;332:1205:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;;1348:29:81;332:1205:84;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;:::i;:::-;1500:62:49;;:::i;:::-;332:1205:84;;;;;;;1738:24:50;332:1205:84;;;1738:24:50;332:1205:84;;;;1777:43:50;;;;332:1205:84;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;;;;;;8417:16:82;332:1205:84;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1500:62:49;;;;:::i;:::-;1515:9:82;;;:::i;:::-;332:1205:84;;;;5232:5:82;332:1205:84;;;5088:13:82;5103:12;;;;;;332:1205:84;;;5117:3:82;5151:11;;;;;:::i;:::-;332:1205:84;;;;;5232:28:82;;;;;;332:1205:84;5232:28:82;332:1205:84;5232:28:82;;;;;;;;;;;;;;;;;5117:3;332:1205:84;;5228:119:82;;11511:50:72;332:1205:84;;;;;;5365:9:82;332:1205:84;;;11511:50:72;:::i;:::-;332:1205:84;5361:118:82;;332:1205:84;;;;1411:31;;;;;;332:1205;1411:31;;;;;;;;;;;;;;;;;;;;;;;;5117:3:82;1411:46:84;;;332:1205;;1407:122;;5610:31:82;;;332:1205:84;5610:31:82;;;;;332:1205:84;5088:13:82;;1407:122:84;1494:24;;;;;;332:1205;1494:24;1411:31;;;;;;;;;;;;;;;;;:::i;:::-;;;332:1205;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;1411:31;;;;332:1205;;;;1411:31;;;;;;332:1205;;;;;;;;;;5361:118:82;332:1205:84;5431:33:82;;;;;;;;332:1205:84;;5431:33:82;5228:119;5296:36;;;;;;;332:1205:84;5296:36:82;5232:28;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;332:1205:84;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;2554:30:82;332:1205:84;;:::i;:::-;1500:62:49;;:::i;:::-;1962:7:82;;;:::i;:::-;2554:30;:::i;:::-;332:1205:84;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;1311:13:50;332:1205:84;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;:::i;:::-;1721:20:82;;;:::i;:::-;332:1205:84;;;;9336:9:82;332:1205:84;;;;;;12473:55:72;332:1205:84;;;;12473:55:72;;5197:14;5101:129;-1:-1:-1;332:1205:84;5197:14:72;332:1205:84;;;-1:-1:-1;332:1205:84;;5197:26:72;;5101:129;;12473:55;332:1205:84;9332:111:82;;935:5:84;;332:1205;935:57;;;;;;332:1205;;;;;;;935:57;;;;;332:1205;935:57;;;;;332:1205;;;;;;;935:57;;;;;;;;332:1205;;;935:57;332:1205;;;;;;;;;-1:-1:-1;332:1205:84;;;;;;;;;;;;935:57;332:1205;;;;;;;;;935:57;332:1205;;;9332:111:82;9403:29;;;332:1205:84;9403:29:82;332:1205:84;;;;;9403:29:82;332:1205:84;;;;;;-1:-1:-1;;332:1205:84;;;;;;6549:10:82;;332:1205:84;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;8254:14:82;332:1205:84;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;1810:21:81;332:1205:84;;1810:21:81;;332:1205:84;1810:21:81;;:5;;;332:1205:84;1810:21:81;;;;;;;;;;332:1205:84;1810:21:81;;;332:1205:84;;;;;;;;1810:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;332:1205:84;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;1798:33:33;1762:20;1774:7;332:1205:84;;:::i;:::-;1774:7:33;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;332:1205:84;;;;1820:10:33;2423:21:81;2419:77;;2524:8;;;:::i;:::-;332:1205:84;2419:77:81;2467:18;;332:1205:84;2467:18:81;332:1205:84;2467:18:81;332:1205:84;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;1515:9:82;;;:::i;:::-;332:1205:84;;7533:9:82;332:1205:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;;;;;1515:9:82;;;;:::i;:::-;332:1205:84;;;7815:9:82;332:1205:84;;;7815:9:82;332:1205:84;;;;;;7859:9:82;;;:28;;;;;332:1205:84;7859:50:82;;;;332:1205:84;7855:115:82;;;8002:9;;;;;:::i;:::-;332:1205:84;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;8027:16:82;8045:6;;;;;;332:1205:84;;;;;;;:::i;8053:3:82:-;332:1205:84;;;;;;;;;5853:18:72;332:1205:84;;;;5853:18:72;:::i;:::-;332:1205:84;;;;;;;8072:44:82;8078:8;;;;:::i;:::-;8072:44;;:::i;:::-;332:1205:84;;8027:16:82;;7855:115;7932:27;;;332:1205:84;7932:27:82;332:1205:84;;;7932:27:82;7859:50;7891:18;;;;;7859:50;;;:28;7872:15;;;;-1:-1:-1;7859:28:82;;332:1205:84;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;1500:62:49;;;:::i;:::-;1515:9:82;;;:::i;:::-;332:1205:84;;;3499:9:82;332:1205:84;;;;;;;3618:237:82;3625:12;;;332:1205:84;;;;;3499:9:82;332:1205:84;;;;;;;;;;;;;;3618:237:82;332:1205:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4148:36:82;332:1205:84;4148:36:82;;332:1205:84;;;;;;;;;;;;;;;;;;;;;;;;;3618:237:82;-1:-1:-1;;332:1205:84;5853:18:72;11832:53;332:1205:84;5853:18:72;;;;:::i;:::-;332:1205:84;;;;;;;3774:35:82;;;332:1205:84;3774:35:82;;11832:53:72;;:::i;:::-;;3618:237:82;;332:1205:84;;;;;;-1:-1:-1;;332:1205:84;;;;;735:10:64;332:1205:84;1311:13:50;332:1205:84;;2339:24:50;2335:96;;2459:6;735:10:64;2459:6:50;:::i;2335:96::-;2386:34;332:1205:84;2386:34:50;735:10:64;332:1205:84;;;;2386:34:50;332:1205:84;;;;;-1:-1:-1;;332:1205:84;;;;;1500:62:49;;:::i;:::-;332:1205:84;;;;2093:20:50;332:1205:84;;2093:20:50;332:1205:84;;;;;;;;;3052:40:49;;;;332:1205:84;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;1515:9:82;;;:::i;:::-;332:1205:84;;6905:9:82;332:1205:84;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;:::i;:::-;;;;;;;;;;;;2833:30:82;332:1205:84;;;;;;:::i;:::-;1500:62:49;;;:::i;2833:30:82:-;332:1205:84;;;2874:84:82;;332:1205:84;;;;;;;;;2874:84:82;1500:62:49;;:::i;:::-;1515:9:82;;;:::i;:::-;332:1205:84;;5088:13:82;332:1205:84;;5232:5:82;;;332:1205:84;5083:569:82;5103:12;;;;;;2874:84;;;;;;5117:3;5151:11;;;;;:::i;:::-;332:1205:84;;;;;5232:28:82;;;;;;332:1205:84;;5232:28:82;;;;;;;;;;;;;332:1205:84;5232:28:82;;;5117:3;332:1205:84;;5228:119:82;;332:1205:84;;;5365:9:82;332:1205:84;;11511:50:72;332:1205:84;;;;11511:50:72;:::i;:::-;332:1205:84;5361:118:82;;332:1205:84;;;1411:31;;;;;;332:1205;1411:31;;;;;;;;;;;;;;;;;;;;332:1205;1411:31;;;5117:3:82;1411:46:84;;;332:1205;;1407:122;;5610:31:82;;332:1205:84;5610:31:82;;332:1205:84;5610:31:82;;332:1205:84;5088:13:82;;1407:122:84;1494:24;;;;332:1205;1494:24;332:1205;;1494:24;1411:31;;;;;;;;;;;;;;;;;:::i;:::-;;;332:1205;;;;;;;;;;;;;;:::i;:::-;;;;;1411:31;;;;;;;;;;332:1205;;;;;;;;;5361:118:82;5431:33;;;;;332:1205:84;5431:33:82;332:1205:84;;;;5431:33:82;5228:119;5296:36;;;;332:1205:84;5296:36:82;332:1205:84;;5296:36:82;5232:28;;;;;;;;;;;;;;:::i;:::-;;;;;332:1205:84;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;:::i;:::-;1962:7:82;;;;:::i;:::-;4357:20;;:::i;:::-;332:1205:84;;;;;;4388:16:82;332:1205:84;;;;;;;;;;;;;;;;;4511:10:82;332:1205:84;;;;;;;;;;;;;;;4511:10:82;4590:62;;332:1205:84;4590:62:82;;332:1205:84;;;;;;;;;;:::i;:::-;1500:62:49;;;:::i;:::-;1515:9:82;;;:::i;:::-;332:1205:84;;5897:13:82;332:1205:84;5912:12:82;;;;;;332:1205:84;5926:3:82;332:1205:84;5960:8:82;;;;:::i;:::-;332:1205:84;;;;;5987:9:82;332:1205:84;;11832:53:72;332:1205:84;;;;11832:53:72;:::i;:::-;332:1205:84;5983:117:82;;6119:35;;332:1205:84;6119:35:82;;332:1205:84;6119:35:82;;332:1205:84;5897:13:82;;5983:117;6056:29;;;;332:1205:84;6056:29:82;332:1205:84;;;;;6056:29:82;332:1205:84;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;;;7076:16:82;332:1205:84;;;;;;;;7076:41:82;;332:1205:84;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;12473:55:72;332:1205:84;;:::i;:::-;;;1515:9:82;;;:::i;:::-;332:1205:84;;7296:9:82;332:1205:84;;;;;;;;12473:55:72;5197:14;5101:129;-1:-1:-1;332:1205:84;5197:14:72;332:1205:84;;;-1:-1:-1;332:1205:84;;5197:26:72;;5101:129;;12473:55;332:1205:84;;;;;;;;;;;;;;;;;;;:::o;:::-;1411:31;332:1205;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:84;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:33;332:1205:84;;;2303:50:33;;;2320:22;;332:1205:84;;;;;;;2303:50:33;;;;;;:::i;:::-;332:1205:84;2293:61:33;;1931:430;:::o;332:1205:84:-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;9677:202:82:-;9753:14;;:59;;;;9677:202;9749:124;;9677:202;:::o;9749:124::-;9835:27;9766:1;9835:27;;332:1205:84;;9766:1:82;9835:27;9753:59;332:1205:84;;9766:1:82;332:1205:84;9771:16:82;332:1205:84;;;;9766:1:82;332:1205:84;;;9771:41:82;9753:59;;1796:162:49;332:1205:84;1710:6:49;332:1205:84;;735:10:64;1855:23:49;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:64;1901:40:49;332:1205:84;;1710:6:49;1901:40;8977:266:82;332:1205:84;;9051:21:82;;9047:82;;332:1205:84;9070:1:82;332:1205:84;9143:14:82;332:1205:84;;;9070:1:82;332:1205:84;;9139:98:82;;8977:266;:::o;9139:98::-;9194:32;9070:1;9194:32;9143:14;332:1205:84;;9070:1:82;9194:32;9047:82;9095:23;9070:1;9095:23;;9070:1;9095:23;8758:213;6549:10;-1:-1:-1;332:1205:84;6534:14:82;332:1205:84;;;-1:-1:-1;332:1205:84;;8890:14:82;;;8886:79;;8758:213::o;8886:79::-;8927:27;-1:-1:-1;8927:27:82;6534:14;-1:-1:-1;8927:27:82;2970:342;;3077:16;332:1205:84;;-1:-1:-1;;332:1205:84;;;;;;;3077:16:82;332:1205:84;3065:28:82;332:1205:84;-1:-1:-1;332:1205:84;3152:16:82;332:1205:84;;;;-1:-1:-1;332:1205:84;;;;;;;;;;;;;-1:-1:-1;332:1205:84;3206:14:82;332:1205:84;;;;-1:-1:-1;332:1205:84;;3264:41:82;-1:-1:-1;3264:41:82;;2970:342::o;2011:153:50:-;332:1205:84;;;2093:20:50;332:1205:84;;2093:20:50;332:1205:84;2093:20:50;332:1205:84;;;;;;;;;;2093:20:50;332:1205:84;;3052:40:49;2093:20:50;3052:40:49;;2011:153:50:o;332:1205:84:-;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;332:1205:84;;-1:-1:-1;332:1205:84;;;-1:-1:-1;332:1205:84;:::o;3071:1368:72:-;;3266:14;;;332:1205:84;;;;;;;;;;;3302:13:72;;;;3298:1135;3302:13;;;-1:-1:-1;;332:1205:84;;;;;;;;;;;;;;;;;;;;3777:23:72;;;3773:378;;3298:1135;332:1205:84;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3266:14:72;4368:11;:::o;332:1205:84:-;;;;;;;;;;3773:378:72;332:1205:84;3840:22:72;3961:23;3840:22;;;:::i;:::-;332:1205:84;;;;;;3961:23:72;;;;;:::i;:::-;332:1205:84;;;;;-1:-1:-1;;332:1205:84;;;;;;;;;;;;;;;;;;;;;;;;;3773:378:72;;;;;3298:1135;4410:12;;;;332:1205:84;4410:12:72;:::o;2546:382:81:-;;332:1205:84;;;;;;;;;2721:15:81;;;2717:57;;332:1205:84;;2858:21:81;332:1205:84;2858:21:81;;;:5;;;:21;:5;;;332:1205:84;2858:21:81;;;;;;;;;332:1205:84;2858:21:81;;;2546:382;332:1205:84;;;;;;2858:63:81;;;;;332:1205:84;2858:63:81;;:21;:63;;332:1205:84;;;;;2915:4:81;332:1205:84;;;;;2858:63:81;;;;;;;332:1205:84;2858:63:81;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;-1:-1:-1;2858:63:81;;;;;;:::i;:::-;332:1205:84;;;;;;;;;2858:21:81;332:1205:84;2858:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o;2497:406:72:-;-1:-1:-1;332:1205:84;;;5197:14:72;;;332:1205:84;;;;;;2581:21:72;;332:1205:84;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2776:14:72;332:1205:84;;;;;;;2832:11:72;:::o;2576:321::-;2874:12;;332:1205:84;2874:12:72;:::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","addPoolsToSet(uint256,address[])":"ebf3a8d0","createPoolSet(address)":"e909c19b","createPoolSet(address,address[])":"3e035f9b","destroyPoolSet(uint256)":"7c1ec460","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAllPoolsInSet(uint256)":"94fc4058","getAuthorizer()":"aaabadc5","getManagerForPoolSet(uint256)":"f167a1e6","getNextPoolSetId()":"c482e822","getPoolCountForSet(uint256)":"62d53462","getPoolSetIdForCaller()":"ce998aba","getPoolSetIdForManager(address)":"25c427ed","getPoolsInSet(uint256,uint256,uint256)":"8c60ebd0","isPoolInSet(address,uint256)":"182551da","isValidPoolSetId(uint256)":"255dae41","owner()":"8da5cb5b","pendingOwner()":"e30c3978","removePoolsFromSet(uint256,address[])":"2da55a1d","renounceOwnership()":"715018a6","setStaticSwapFeePercentage(address,uint256)":"d15126ba","transferOwnership(address)":"f2fde38b","transferPoolSetOwnership(address)":"3700f987","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"InvalidPoolSetId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolSetManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolHasSwapManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolSetManager\",\"type\":\"address\"}],\"name\":\"PoolSetManagerNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderIsNotPoolSetManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"PoolSetCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"PoolSetDestroyed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"PoolSetOwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPoolsToSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"destroyPoolSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getAllPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getManagerForPoolSet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextPoolSetId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getPoolCountForSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSetIdForCaller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getPoolSetIdForManager\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isPoolInSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isValidPoolSetId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePoolsFromSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferPoolSetOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"params\":{\"poolSetId\":\"Id of the set involved in the operation\"}}],\"InvalidPoolSetId(uint256)\":[{\"details\":\"This can mean the value is invalid, or it was never created, or it was destroyed.\",\"params\":{\"poolSetId\":\"The id of the invalid set\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolHasSwapManager(address)\":[{\"details\":\"The swap manager is an exclusive role. If it is set to a non-zero value during pool registration, only the swap manager can change the fee. This helper can only set fees on pools that allow governance to grant this permission.\",\"params\":{\"pool\":\"Address of the pool being added\"}}],\"PoolNotInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolSetManagerNotUnique(address)\":[{\"details\":\"Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\",\"params\":{\"poolSetManager\":\"Address of the manager that is already assigned to another pool set id\"}}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolRemovedFromSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetCreated(uint256,address)\":{\"details\":\"Pools are organized into separate sets, controlled by a manager, which can be changed independently.\",\"params\":{\"initialManager\":\"Address of the pool set manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetDestroyed(uint256,address)\":{\"params\":{\"manager\":\"The address of the set's last manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"details\":\"Managers can only control one pool set. Transfers to existing managers of other sets will revert.\",\"params\":{\"newManager\":\"Address of the new manager\",\"oldManager\":\"Address of the previous manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"addPoolsToSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may add pools to a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"newPools\":\"List of pools to add\",\"poolSetId\":\"Id of the set to which the new pools belong\"}},\"createPoolSet(address)\":{\"details\":\"Convenience function to create a pool set with no initial pools. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\"}},\"createPoolSet(address,address[])\":{\"details\":\"The `newPools` list can be empty, in which case this will only create the set. Pools can then be added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\",\"newPools\":\"Set of pools to add to the set\"}},\"destroyPoolSet(uint256)\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may destroy sets, effectively removing control of any pools in the set from the associated manager. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set being destroyed\"}},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAllPoolsInSet(uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"pools\":\"List of pools\"}},\"getManagerForPoolSet(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\"}},\"getNextPoolSetId()\":{\"returns\":{\"_0\":\"The pool set id that will be used on the next call of `createPoolSet`\"}},\"getPoolCountForSet(uint256)\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction. Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The current number of pools in the set\"}},\"getPoolSetIdForCaller()\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the caller is not a pool set manager\"}},\"getPoolSetIdForManager(address)\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the address given is not a pool set manager\"}},\"getPoolsInSet(uint256,uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`). Reverts if the poolSetId is not valid.\",\"params\":{\"from\":\"Start index\",\"poolSetId\":\"Id of the set containing the pools\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"isPoolInSet(address,uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"pool\":\"Address of the pool to check\",\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the pool is in the given set, false otherwise\"}},\"isValidPoolSetId(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the poolSetId exists\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"removePoolsFromSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may remove pools from a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set to which the pools belong\",\"pools\":\"List of pools to remove from the set\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function. Governance must grant this contract permission to call `setStaticSwapFeePercentage` on the Vault. Note that since the swap manager is an exclusive role, the swap fee cannot be changed by governance if it is set, and the pool cannot be added to the set.\",\"params\":{\"pool\":\"The address of the pool\",\"swapFeePercentage\":\"The new swap fee percentage\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"transferPoolSetOwnership(address)\":{\"details\":\"This is a permissioned function. Only the current manager of a set can call this to set a new manager. Since managers can only control a single set, there is no need to specify the id in the call. Note that this is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts if the new manager address is zero or already the manager of a pool set.\",\"params\":{\"newManager\":\"The address of the new manager\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"InvalidPoolSetId(uint256)\":[{\"notice\":\"Pool set id associated with an operation is invalid.\"}],\"InvalidPoolSetManager()\":[{\"notice\":\"The initial manager of a pool set cannot be zero.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolHasSwapManager(address)\":[{\"notice\":\"Cannot add a pool that has a swap manager.\"}],\"PoolNotInSet(address,uint256)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolSetManagerNotUnique(address)\":[{\"notice\":\"Pool set managers can only manage a single pool set.\"}],\"SenderIsNotPoolSetManager()\":[{\"notice\":\"Permissioned operations on pools can only be performed by the pool set manager.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"notice\":\"The owner added a pool to the given set.\"},\"PoolRemovedFromSet(address,uint256)\":{\"notice\":\"The owner removed a pool from the given set.\"},\"PoolSetCreated(uint256,address)\":{\"notice\":\"The owner created a new pool set.\"},\"PoolSetDestroyed(uint256,address)\":{\"notice\":\"The owner destroyed a pool set.\"},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"notice\":\"The current manager of a pool set transferred ownership to a new address.\"}},\"kind\":\"user\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"createPoolSet(address)\":{\"notice\":\"Create a new empty set with an initial manager.\"},\"createPoolSet(address,address[])\":{\"notice\":\"Create a new set with an initial manager, optionally initialized with a set of pools.\"},\"destroyPoolSet(uint256)\":{\"notice\":\"Simple way to remove an entire set of pools from control of the helper function.\"},\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAllPoolsInSet(uint256)\":{\"notice\":\"Get the full set of pools from a given set.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"},\"getManagerForPoolSet(uint256)\":{\"notice\":\"Get the manager address associated with a given poolSetId.\"},\"getNextPoolSetId()\":{\"notice\":\"Utility function to predict the next pool set id.\"},\"getPoolCountForSet(uint256)\":{\"notice\":\"Get the number of pools associated with the given set.\"},\"getPoolSetIdForCaller()\":{\"notice\":\"Get the pool set id associated with the caller.\"},\"getPoolSetIdForManager(address)\":{\"notice\":\"Get the pool set id associated with a given manager address.\"},\"getPoolsInSet(uint256,uint256,uint256)\":{\"notice\":\"Get a range of pools from a given set.\"},\"isPoolInSet(address,uint256)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"isValidPoolSetId(uint256)\":{\"notice\":\"Check whether a poolSetId has been created.\"},\"removePoolsFromSet(uint256,address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Set the static swap fee percentage on a given pool.\"},\"transferPoolSetOwnership(address)\":{\"notice\":\"Transfer ownership of a pool set from the current manager to a new manager.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/PoolSwapFeeHelper.sol\":\"PoolSwapFeeHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xdb8365416c9dd9d7be16677c13819065511e9bc7705d6bad85fd52b65d3b3c39\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b90206982d126075b074f0a77ea9cb3ec173ed9fe9e4504b12d6807532b1b7ff\",\"dweb:/ipfs/QmYjKTu4Mrew94sSxfQ8jP4yT7wZFgghSRyB9A2kDdSy8X\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol\":{\"keccak256\":\"0x28f0e2ffd4fda0cb7b1f55d368e5bf8672d6f907e0171674a8a93c7c65c4a29b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37bb56bb5e66cead63626efaacae7dad39f3fd725d001825db861f22aceb0124\",\"dweb:/ipfs/QmdNskvPgTo6R3AmuA3zp8vY9waoEbKsTPWHp5v6aAbhkE\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/PoolHelperCommon.sol\":{\"keccak256\":\"0xc3bd72a44d8479bacbfa4ebca2354b315160e77c378c3dc24d8cd7a41990a83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://fed38b2ea6f2842633d8d555d298adc889605bbeb3ec32728811fbc907989519\",\"dweb:/ipfs/QmX1aEVFkPAZbbSFXn6tfJnaPYWr9TDe9YHCQAiLvgZahg\"]},\"contracts/PoolSwapFeeHelper.sol\":{\"keccak256\":\"0x8a437e7654311261de87663258f04b68a61a7a52e635f7263599ddc49cd2a159\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://55631bc88c6a36b362e143bc303f1dd293deb9ce0b48988d87be2b60f6934dc5\",\"dweb:/ipfs/QmfCN1AmHBYfQweVLLT2QF1co6JCTDXpWcV58miru7CmCE\"]}},\"version\":1}"}},"contracts/PriceImpactHelper.sol":{"PriceImpactHelper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IRouter","name":"router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"}],"name":"calculateAddLiquidityUnbalancedPriceImpact","outputs":[{"internalType":"uint256","name":"priceImpact","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callAndRevertHook","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461009a57601f6111fb38819003918201601f19168301916001600160401b0383118484101761009e57808492604094855283398101031261009a5780516001600160a01b0391828216820361009a5760200151918216820361009a5760805260a05260405161114890816100b38239608051816104b1015260a05181818161030201528181610735015281816108e40152610cd70152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c806348406a54146101a75763a76996381461002f575f80fd5b346101a35760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a357610066610aaf565b6024359067ffffffffffffffff82116101a357366023830112156101a35781600401359061009382610b0d565b926100a16040519485610ad2565b828452602084019036602485830101116101a3575f94856020868297602484960187378301015251925af16100d4610bc7565b90801561012957906100ea816101259333610e82565b506040519182917f5ab64fb8000000000000000000000000000000000000000000000000000000008352602060048401526024830190610bf6565b0390fd5b507f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000061017583610e3b565b1603610e73577f28f95541000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b346101a35760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a3576101de610aaf565b67ffffffffffffffff6024358181116101a357366023820112156101a35780600401359061020b82610af5565b916102196040519384610ad2565b8083526024602084019160051b830101913683116101a357602401905b828210610a9f5750505073ffffffffffffffffffffffffffffffffffffffff604435169182604435036101a3576102706044358386610c1b565b92604051907f0f71088800000000000000000000000000000000000000000000000000000000602083015273ffffffffffffffffffffffffffffffffffffffff86169485602484015260448301526064820152608060848201525f60a482015260a4815260e081019080821083831117610a72576103279160405273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b9081518201916020818185019403126101a3576020810151908282116101a357019180603f840112156101a357602083015161036281610af5565b936103706040519586610ad2565b8185526040602086019260051b8201019283116101a357604001905b828210610a62575050506103a08351610b29565b945f5b8451811015610425576103bf6103b98286610b5a565b51610d21565b906103cd6103b98288610b5a565b915f83820393128184128116918413901516176103f8576001916103f1828a610b5a565b52016103a3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50915091926104348451610b29565b925f5b855181101561046257600190610451604435898388610d76565b61045b8288610b5a565b5201610437565b50919094935f95604051907fca4f280300000000000000000000000000000000000000000000000000000000825260048201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa938415610a57575f946109ad575b505094905f915b85517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116103f85783101561092f57505f917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965f5b8651811015610595575f6105568289610b5a565b511380610582575b61056b575b600101610542565b61057a91985080945086610b5a565b519683610563565b508861058e8289610b5a565b511261055e565b509650919490925f907f8000000000000000000000000000000000000000000000000000000000000000975f5b8751811015610615575f6105d6828a610b5a565b511280610602575b6105eb575b6001016105c2565b6105fa91995080935087610b5a565b5197826105e3565b508961060e828a610b5a565b51136105de565b5092969750939281976106288188610b5a565b5161063c610636858a610b5a565b51610b9b565b13156107df5761075a8661071e8a61071061068e6106888773ffffffffffffffffffffffffffffffffffffffff6106808c82610678858c610b5a565b511699610b5a565b511694610b5a565b51610e06565b936040519485937f3ebc54e5000000000000000000000000000000000000000000000000000000006020860152604435928d60248701939060e095929373ffffffffffffffffffffffffffffffffffffffff8095818094168852166020870152166040850152606084015216608082015260c060a08201525f60c08201520190565b03601f198101835282610ad2565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b6020818051810103126101a3575f610787838261078061078d9660208f97015196610b5a565b528a610b5a565b52610d21565b916107988189610b5a565b515f84820194851291129080158216911516176103f8576001926107bc828a610b5a565b526107d56107ce6044358a8489610d76565b9188610b5a565b52019190956104e8565b91806107eb8488610b5a565b5173ffffffffffffffffffffffffffffffffffffffff16908661080e828a610b5a565b5173ffffffffffffffffffffffffffffffffffffffff1691610830908c610b5a565b5161083a90610b9b565b61084390610e06565b6040517f175d440800000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff92831660248201529382166044808601919091529282166064850152608484015290351660a482015260c060c48201525f60e48083019190915281526108c961010482610ad2565b6109099073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b8080518101036020136101a3575f610787838261078061078d9660208f97015196610b5a565b61094f816109496109446106368b958b610b5a565b610e06565b92610b5a565b5190670de0b6b3a7640000908181029181830414901517156103f857811561098057602091604051910460011c8152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b909193503d805f843e6109c08184610ad2565b8201916020818403126101a35780519182116101a357019080601f830112156101a3578151906109ef82610af5565b926109fd6040519485610ad2565b82845260208085019360051b8201019182116101a357602001915b818310610a2a575050509186806104e1565b825173ffffffffffffffffffffffffffffffffffffffff811681036101a357815260209283019201610a18565b6040513d5f823e3d90fd5b815181526020918201910161038c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8135815260209182019101610236565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101a357565b90601f601f19910116810190811067ffffffffffffffff821117610a7257604052565b67ffffffffffffffff8111610a725760051b60200190565b67ffffffffffffffff8111610a7257601f01601f191660200190565b90610b3382610af5565b610b406040519182610ad2565b828152601f19610b508294610af5565b0190602036910137565b8051821015610b6e5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f800000000000000000000000000000000000000000000000000000000000000081146103f8575f0390565b3d15610bf1573d90610bd882610b0d565b91610be66040519384610ad2565b82523d5f602084013e565b606090565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b90929173ffffffffffffffffffffffffffffffffffffffff604051916020937fda001f7d00000000000000000000000000000000000000000000000000000000858501528260a48501911660248501526080604485015286518091528460c485019701905f5b818110610d0d5750505083610cfc94959683610cd5931660648601525f858203917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83016084880152528085520183610ad2565b7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b81818051810103126101a357015190565b825189529786019791860191600101610c81565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610d4b5790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b929091610db183825192601f19610da5610d8f86610af5565b95610d9d6040519788610ad2565b808752610af5565b01366020860137610b5a565b51938415610dfd57610dd993610dd35f871396875f14610dee57915b84610b5a565b52610c1b565b9015610de25790565b610deb90610b9b565b90565b610df790610b9b565b91610dcd565b50505050505f90565b5f8112610e105790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6004815110610e4b576020015190565b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b805115610e4b57805190602001fd5b90610ebf5750805115610e9757602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610f12575b610ed0575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15610ec8565b90303b156101a3575f610f8091604051809381927fa769963800000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff8597166004840152604060248401526044830190610bf6565b038183305af190816110f5575b5061109757610f9a610bc7565b907f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000610fe684610e3b565b16036110915781519160207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc938481016004840152820193828286019503011261108d5760248101519067ffffffffffffffff821161108957018260438201121561108d5760248101519061105a82610b0d565b936110686040519586610ad2565b828552604483830101116110895790806044602093018386015e8301015290565b8280fd5b5080fd5b50610e73565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6578706563746564207375636365737300000000000000000000000000006044820152fd5b90915067ffffffffffffffff8111610a72576040525f905f610f8d56fea26469706673582212201675b6747c06a232114d5996ab74371bbdc52003636d23d3871344f3a854590864736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x9A JUMPI PUSH1 0x1F PUSH2 0x11FB CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x9E JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x9A JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND DUP3 SUB PUSH2 0x9A JUMPI PUSH1 0x20 ADD MLOAD SWAP2 DUP3 AND DUP3 SUB PUSH2 0x9A JUMPI PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x1148 SWAP1 DUP2 PUSH2 0xB3 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x4B1 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x302 ADD MSTORE DUP2 DUP2 PUSH2 0x735 ADD MSTORE DUP2 DUP2 PUSH2 0x8E4 ADD MSTORE PUSH2 0xCD7 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x48406A54 EQ PUSH2 0x1A7 JUMPI PUSH4 0xA7699638 EQ PUSH2 0x2F JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1A3 JUMPI PUSH1 0x40 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1A3 JUMPI PUSH2 0x66 PUSH2 0xAAF JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1A3 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x93 DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP3 PUSH2 0xA1 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0x1A3 JUMPI PUSH0 SWAP5 DUP6 PUSH1 0x20 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL PUSH2 0xD4 PUSH2 0xBC7 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x129 JUMPI SWAP1 PUSH2 0xEA DUP2 PUSH2 0x125 SWAP4 CALLER PUSH2 0xE82 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0xBF6 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x175 DUP4 PUSH2 0xE3B JUMP JUMPDEST AND SUB PUSH2 0xE73 JUMPI PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1A3 JUMPI PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1A3 JUMPI PUSH2 0x1DE PUSH2 0xAAF JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x1A3 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x20B DUP3 PUSH2 0xAF5 JUMP JUMPDEST SWAP2 PUSH2 0x219 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x1A3 JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xA9F JUMPI POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND SWAP2 DUP3 PUSH1 0x44 CALLDATALOAD SUB PUSH2 0x1A3 JUMPI PUSH2 0x270 PUSH1 0x44 CALLDATALOAD DUP4 DUP7 PUSH2 0xC1B JUMP JUMPDEST SWAP3 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF71088800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP5 DUP6 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP3 ADD MSTORE PUSH0 PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 MSTORE PUSH1 0xE0 DUP2 ADD SWAP1 DUP1 DUP3 LT DUP4 DUP4 GT OR PUSH2 0xA72 JUMPI PUSH2 0x327 SWAP2 PUSH1 0x40 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP2 DUP6 ADD SWAP5 SUB SLT PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x1A3 JUMPI ADD SWAP2 DUP1 PUSH1 0x3F DUP5 ADD SLT ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x362 DUP2 PUSH2 0xAF5 JUMP JUMPDEST SWAP4 PUSH2 0x370 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xAD2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x40 PUSH1 0x20 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1A3 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xA62 JUMPI POP POP POP PUSH2 0x3A0 DUP4 MLOAD PUSH2 0xB29 JUMP JUMPDEST SWAP5 PUSH0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x425 JUMPI PUSH2 0x3BF PUSH2 0x3B9 DUP3 DUP7 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xD21 JUMP JUMPDEST SWAP1 PUSH2 0x3CD PUSH2 0x3B9 DUP3 DUP9 PUSH2 0xB5A JUMP JUMPDEST SWAP2 PUSH0 DUP4 DUP3 SUB SWAP4 SLT DUP2 DUP5 SLT DUP2 AND SWAP2 DUP5 SGT SWAP1 ISZERO AND OR PUSH2 0x3F8 JUMPI PUSH1 0x1 SWAP2 PUSH2 0x3F1 DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD PUSH2 0x3A3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 POP SWAP2 SWAP3 PUSH2 0x434 DUP5 MLOAD PUSH2 0xB29 JUMP JUMPDEST SWAP3 PUSH0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x462 JUMPI PUSH1 0x1 SWAP1 PUSH2 0x451 PUSH1 0x44 CALLDATALOAD DUP10 DUP4 DUP9 PUSH2 0xD76 JUMP JUMPDEST PUSH2 0x45B DUP3 DUP9 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD PUSH2 0x437 JUMP JUMPDEST POP SWAP2 SWAP1 SWAP5 SWAP4 PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0xA57 JUMPI PUSH0 SWAP5 PUSH2 0x9AD JUMPI JUMPDEST POP POP SWAP5 SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 GT PUSH2 0x3F8 JUMPI DUP4 LT ISZERO PUSH2 0x92F JUMPI POP PUSH0 SWAP2 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x595 JUMPI PUSH0 PUSH2 0x556 DUP3 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD SGT DUP1 PUSH2 0x582 JUMPI JUMPDEST PUSH2 0x56B JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x542 JUMP JUMPDEST PUSH2 0x57A SWAP2 SWAP9 POP DUP1 SWAP5 POP DUP7 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP7 DUP4 PUSH2 0x563 JUMP JUMPDEST POP DUP9 PUSH2 0x58E DUP3 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD SLT PUSH2 0x55E JUMP JUMPDEST POP SWAP7 POP SWAP2 SWAP5 SWAP1 SWAP3 PUSH0 SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 SWAP8 PUSH0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x615 JUMPI PUSH0 PUSH2 0x5D6 DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD SLT DUP1 PUSH2 0x602 JUMPI JUMPDEST PUSH2 0x5EB JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x5C2 JUMP JUMPDEST PUSH2 0x5FA SWAP2 SWAP10 POP DUP1 SWAP4 POP DUP8 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP8 DUP3 PUSH2 0x5E3 JUMP JUMPDEST POP DUP10 PUSH2 0x60E DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD SGT PUSH2 0x5DE JUMP JUMPDEST POP SWAP3 SWAP7 SWAP8 POP SWAP4 SWAP3 DUP2 SWAP8 PUSH2 0x628 DUP2 DUP9 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0x63C PUSH2 0x636 DUP6 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xB9B JUMP JUMPDEST SGT ISZERO PUSH2 0x7DF JUMPI PUSH2 0x75A DUP7 PUSH2 0x71E DUP11 PUSH2 0x710 PUSH2 0x68E PUSH2 0x688 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x680 DUP13 DUP3 PUSH2 0x678 DUP6 DUP13 PUSH2 0xB5A JUMP JUMPDEST MLOAD AND SWAP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD AND SWAP5 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xE06 JUMP JUMPDEST SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 PUSH32 0x3EBC54E500000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x44 CALLDATALOAD SWAP3 DUP14 PUSH1 0x24 DUP8 ADD SWAP4 SWAP1 PUSH1 0xE0 SWAP6 SWAP3 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP6 DUP2 DUP1 SWAP5 AND DUP9 MSTORE AND PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0xAD2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST PUSH1 0x20 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0x787 DUP4 DUP3 PUSH2 0x780 PUSH2 0x78D SWAP7 PUSH1 0x20 DUP16 SWAP8 ADD MLOAD SWAP7 PUSH2 0xB5A JUMP JUMPDEST MSTORE DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0xD21 JUMP JUMPDEST SWAP2 PUSH2 0x798 DUP2 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH0 DUP5 DUP3 ADD SWAP5 DUP6 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x3F8 JUMPI PUSH1 0x1 SWAP3 PUSH2 0x7BC DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0x7D5 PUSH2 0x7CE PUSH1 0x44 CALLDATALOAD DUP11 DUP5 DUP10 PUSH2 0xD76 JUMP JUMPDEST SWAP2 DUP9 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD SWAP2 SWAP1 SWAP6 PUSH2 0x4E8 JUMP JUMPDEST SWAP2 DUP1 PUSH2 0x7EB DUP5 DUP9 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP7 PUSH2 0x80E DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH2 0x830 SWAP1 DUP13 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0x83A SWAP1 PUSH2 0xB9B JUMP JUMPDEST PUSH2 0x843 SWAP1 PUSH2 0xE06 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x175D440800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP4 DUP3 AND PUSH1 0x44 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP3 AND PUSH1 0x64 DUP6 ADD MSTORE PUSH1 0x84 DUP5 ADD MSTORE SWAP1 CALLDATALOAD AND PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xC4 DUP3 ADD MSTORE PUSH0 PUSH1 0xE4 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE PUSH2 0x8C9 PUSH2 0x104 DUP3 PUSH2 0xAD2 JUMP JUMPDEST PUSH2 0x909 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST DUP1 DUP1 MLOAD DUP2 ADD SUB PUSH1 0x20 SGT PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0x787 DUP4 DUP3 PUSH2 0x780 PUSH2 0x78D SWAP7 PUSH1 0x20 DUP16 SWAP8 ADD MLOAD SWAP7 PUSH2 0xB5A JUMP JUMPDEST PUSH2 0x94F DUP2 PUSH2 0x949 PUSH2 0x944 PUSH2 0x636 DUP12 SWAP6 DUP12 PUSH2 0xB5A JUMP JUMPDEST PUSH2 0xE06 JUMP JUMPDEST SWAP3 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x3F8 JUMPI DUP2 ISZERO PUSH2 0x980 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x40 MLOAD SWAP2 DIV PUSH1 0x1 SHR DUP2 MSTORE RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP4 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x9C0 DUP2 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0x1A3 JUMPI DUP1 MLOAD SWAP2 DUP3 GT PUSH2 0x1A3 JUMPI ADD SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP2 MLOAD SWAP1 PUSH2 0x9EF DUP3 PUSH2 0xAF5 JUMP JUMPDEST SWAP3 PUSH2 0x9FD PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP4 PUSH1 0x5 SHL DUP3 ADD ADD SWAP2 DUP3 GT PUSH2 0x1A3 JUMPI PUSH1 0x20 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0xA2A JUMPI POP POP POP SWAP2 DUP7 DUP1 PUSH2 0x4E1 JUMP JUMPDEST DUP3 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1A3 JUMPI DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0xA18 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x38C JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x236 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1A3 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xA72 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0xB33 DUP3 PUSH2 0xAF5 JUMP JUMPDEST PUSH2 0xB40 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0xB50 DUP3 SWAP5 PUSH2 0xAF5 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0xB6E JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x3F8 JUMPI PUSH0 SUB SWAP1 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0xBF1 JUMPI RETURNDATASIZE SWAP1 PUSH2 0xBD8 DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP2 PUSH2 0xBE6 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP1 SWAP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 SWAP4 PUSH32 0xDA001F7D00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE DUP3 PUSH1 0xA4 DUP6 ADD SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x80 PUSH1 0x44 DUP6 ADD MSTORE DUP7 MLOAD DUP1 SWAP2 MSTORE DUP5 PUSH1 0xC4 DUP6 ADD SWAP8 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xD0D JUMPI POP POP POP DUP4 PUSH2 0xCFC SWAP5 SWAP6 SWAP7 DUP4 PUSH2 0xCD5 SWAP4 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH0 DUP6 DUP3 SUB SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP4 ADD PUSH1 0x84 DUP9 ADD MSTORE MSTORE DUP1 DUP6 MSTORE ADD DUP4 PUSH2 0xAD2 JUMP JUMPDEST PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST DUP2 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x1A3 JUMPI ADD MLOAD SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP10 MSTORE SWAP8 DUP7 ADD SWAP8 SWAP2 DUP7 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xC81 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xD4B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0xDB1 DUP4 DUP3 MLOAD SWAP3 PUSH1 0x1F NOT PUSH2 0xDA5 PUSH2 0xD8F DUP7 PUSH2 0xAF5 JUMP JUMPDEST SWAP6 PUSH2 0xD9D PUSH1 0x40 MLOAD SWAP8 DUP9 PUSH2 0xAD2 JUMP JUMPDEST DUP1 DUP8 MSTORE PUSH2 0xAF5 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP4 DUP5 ISZERO PUSH2 0xDFD JUMPI PUSH2 0xDD9 SWAP4 PUSH2 0xDD3 PUSH0 DUP8 SGT SWAP7 DUP8 PUSH0 EQ PUSH2 0xDEE JUMPI SWAP2 JUMPDEST DUP5 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0xC1B JUMP JUMPDEST SWAP1 ISZERO PUSH2 0xDE2 JUMPI SWAP1 JUMP JUMPDEST PUSH2 0xDEB SWAP1 PUSH2 0xB9B JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0xDF7 SWAP1 PUSH2 0xB9B JUMP JUMPDEST SWAP2 PUSH2 0xDCD JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0xE10 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP2 MLOAD LT PUSH2 0xE4B JUMPI PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xE4B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0xEBF JUMPI POP DUP1 MLOAD ISZERO PUSH2 0xE97 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0xF12 JUMPI JUMPDEST PUSH2 0xED0 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0xEC8 JUMP JUMPDEST SWAP1 ADDRESS EXTCODESIZE ISZERO PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0xF80 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA769963800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SWAP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0xBF6 JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL SWAP1 DUP2 PUSH2 0x10F5 JUMPI JUMPDEST POP PUSH2 0x1097 JUMPI PUSH2 0xF9A PUSH2 0xBC7 JUMP JUMPDEST SWAP1 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0xFE6 DUP5 PUSH2 0xE3B JUMP JUMPDEST AND SUB PUSH2 0x1091 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC SWAP4 DUP5 DUP2 ADD PUSH1 0x4 DUP5 ADD MSTORE DUP3 ADD SWAP4 DUP3 DUP3 DUP7 ADD SWAP6 SUB ADD SLT PUSH2 0x108D JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1089 JUMPI ADD DUP3 PUSH1 0x43 DUP3 ADD SLT ISZERO PUSH2 0x108D JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH2 0x105A DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP4 PUSH2 0x1068 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP6 MSTORE PUSH1 0x44 DUP4 DUP4 ADD ADD GT PUSH2 0x1089 JUMPI SWAP1 DUP1 PUSH1 0x44 PUSH1 0x20 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP PUSH2 0xE73 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420737563636573730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP1 PUSH0 PUSH2 0xF8D JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 AND PUSH22 0xB6747C06A232114D5996AB74371BBDC52003636D23D3 DUP8 SGT PREVRANDAO RETURN 0xA8 SLOAD MSIZE ADDMOD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"635:8728:85:-:0;;;;;;;;;;;;;-1:-1:-1;;635:8728:85;;;;-1:-1:-1;;;;;635:8728:85;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;635:8728:85;;;;;;;;;;;;;;;;;;877:14;;901:16;;635:8728;;;;;;;;877:14;635:8728;;;;;901:16;635:8728;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;635:8728:85;;;;;;-1:-1:-1;635:8728:85;;;;;-1:-1:-1;635:8728:85"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":2735,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_address_contract_IERC20_contract_IERC20_uint256_address_stringliteral_c5d2":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_bytes":{"entryPoint":3062,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_and_zero_memory_array_array_int256_dyn":{"entryPoint":2857,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":2805,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":2829,"id":null,"parameterSlots":1,"returnSlots":1},"extract_returndata":{"entryPoint":3015,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":2770,"id":null,"parameterSlots":2,"returnSlots":0},"fun_bubbleUpRevert":{"entryPoint":3699,"id":4958,"parameterSlots":1,"returnSlots":0},"fun_callAndRevert":{"entryPoint":3867,"id":18572,"parameterSlots":2,"returnSlots":1},"fun_parseSelector":{"entryPoint":3643,"id":4940,"parameterSlots":1,"returnSlots":1},"fun_queryAddLiquidityUnbalanced":{"entryPoint":3099,"id":21421,"parameterSlots":3,"returnSlots":1},"fun_queryAddLiquidityUnbalancedForTokenDeltas":{"entryPoint":3446,"id":21618,"parameterSlots":4,"returnSlots":1},"fun_toInt256":{"entryPoint":3361,"id":16081,"parameterSlots":1,"returnSlots":1},"fun_toUint256":{"entryPoint":3590,"id":15245,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":3714,"id":11283,"parameterSlots":3,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":2906,"id":null,"parameterSlots":2,"returnSlots":1},"negate_int256":{"entryPoint":2971,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"21227":[{"length":32,"start":1201}],"21230":[{"length":32,"start":770},{"length":32,"start":1845},{"length":32,"start":2276},{"length":32,"start":3287}]},"linkReferences":{},"object":"60806040526004361015610011575f80fd5b5f3560e01c806348406a54146101a75763a76996381461002f575f80fd5b346101a35760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a357610066610aaf565b6024359067ffffffffffffffff82116101a357366023830112156101a35781600401359061009382610b0d565b926100a16040519485610ad2565b828452602084019036602485830101116101a3575f94856020868297602484960187378301015251925af16100d4610bc7565b90801561012957906100ea816101259333610e82565b506040519182917f5ab64fb8000000000000000000000000000000000000000000000000000000008352602060048401526024830190610bf6565b0390fd5b507f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000061017583610e3b565b1603610e73577f28f95541000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b346101a35760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a3576101de610aaf565b67ffffffffffffffff6024358181116101a357366023820112156101a35780600401359061020b82610af5565b916102196040519384610ad2565b8083526024602084019160051b830101913683116101a357602401905b828210610a9f5750505073ffffffffffffffffffffffffffffffffffffffff604435169182604435036101a3576102706044358386610c1b565b92604051907f0f71088800000000000000000000000000000000000000000000000000000000602083015273ffffffffffffffffffffffffffffffffffffffff86169485602484015260448301526064820152608060848201525f60a482015260a4815260e081019080821083831117610a72576103279160405273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b9081518201916020818185019403126101a3576020810151908282116101a357019180603f840112156101a357602083015161036281610af5565b936103706040519586610ad2565b8185526040602086019260051b8201019283116101a357604001905b828210610a62575050506103a08351610b29565b945f5b8451811015610425576103bf6103b98286610b5a565b51610d21565b906103cd6103b98288610b5a565b915f83820393128184128116918413901516176103f8576001916103f1828a610b5a565b52016103a3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50915091926104348451610b29565b925f5b855181101561046257600190610451604435898388610d76565b61045b8288610b5a565b5201610437565b50919094935f95604051907fca4f280300000000000000000000000000000000000000000000000000000000825260048201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa938415610a57575f946109ad575b505094905f915b85517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116103f85783101561092f57505f917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965f5b8651811015610595575f6105568289610b5a565b511380610582575b61056b575b600101610542565b61057a91985080945086610b5a565b519683610563565b508861058e8289610b5a565b511261055e565b509650919490925f907f8000000000000000000000000000000000000000000000000000000000000000975f5b8751811015610615575f6105d6828a610b5a565b511280610602575b6105eb575b6001016105c2565b6105fa91995080935087610b5a565b5197826105e3565b508961060e828a610b5a565b51136105de565b5092969750939281976106288188610b5a565b5161063c610636858a610b5a565b51610b9b565b13156107df5761075a8661071e8a61071061068e6106888773ffffffffffffffffffffffffffffffffffffffff6106808c82610678858c610b5a565b511699610b5a565b511694610b5a565b51610e06565b936040519485937f3ebc54e5000000000000000000000000000000000000000000000000000000006020860152604435928d60248701939060e095929373ffffffffffffffffffffffffffffffffffffffff8095818094168852166020870152166040850152606084015216608082015260c060a08201525f60c08201520190565b03601f198101835282610ad2565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b6020818051810103126101a3575f610787838261078061078d9660208f97015196610b5a565b528a610b5a565b52610d21565b916107988189610b5a565b515f84820194851291129080158216911516176103f8576001926107bc828a610b5a565b526107d56107ce6044358a8489610d76565b9188610b5a565b52019190956104e8565b91806107eb8488610b5a565b5173ffffffffffffffffffffffffffffffffffffffff16908661080e828a610b5a565b5173ffffffffffffffffffffffffffffffffffffffff1691610830908c610b5a565b5161083a90610b9b565b61084390610e06565b6040517f175d440800000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff92831660248201529382166044808601919091529282166064850152608484015290351660a482015260c060c48201525f60e48083019190915281526108c961010482610ad2565b6109099073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b8080518101036020136101a3575f610787838261078061078d9660208f97015196610b5a565b61094f816109496109446106368b958b610b5a565b610e06565b92610b5a565b5190670de0b6b3a7640000908181029181830414901517156103f857811561098057602091604051910460011c8152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b909193503d805f843e6109c08184610ad2565b8201916020818403126101a35780519182116101a357019080601f830112156101a3578151906109ef82610af5565b926109fd6040519485610ad2565b82845260208085019360051b8201019182116101a357602001915b818310610a2a575050509186806104e1565b825173ffffffffffffffffffffffffffffffffffffffff811681036101a357815260209283019201610a18565b6040513d5f823e3d90fd5b815181526020918201910161038c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8135815260209182019101610236565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101a357565b90601f601f19910116810190811067ffffffffffffffff821117610a7257604052565b67ffffffffffffffff8111610a725760051b60200190565b67ffffffffffffffff8111610a7257601f01601f191660200190565b90610b3382610af5565b610b406040519182610ad2565b828152601f19610b508294610af5565b0190602036910137565b8051821015610b6e5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f800000000000000000000000000000000000000000000000000000000000000081146103f8575f0390565b3d15610bf1573d90610bd882610b0d565b91610be66040519384610ad2565b82523d5f602084013e565b606090565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b90929173ffffffffffffffffffffffffffffffffffffffff604051916020937fda001f7d00000000000000000000000000000000000000000000000000000000858501528260a48501911660248501526080604485015286518091528460c485019701905f5b818110610d0d5750505083610cfc94959683610cd5931660648601525f858203917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83016084880152528085520183610ad2565b7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b81818051810103126101a357015190565b825189529786019791860191600101610c81565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610d4b5790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b929091610db183825192601f19610da5610d8f86610af5565b95610d9d6040519788610ad2565b808752610af5565b01366020860137610b5a565b51938415610dfd57610dd993610dd35f871396875f14610dee57915b84610b5a565b52610c1b565b9015610de25790565b610deb90610b9b565b90565b610df790610b9b565b91610dcd565b50505050505f90565b5f8112610e105790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6004815110610e4b576020015190565b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b805115610e4b57805190602001fd5b90610ebf5750805115610e9757602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610f12575b610ed0575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15610ec8565b90303b156101a3575f610f8091604051809381927fa769963800000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff8597166004840152604060248401526044830190610bf6565b038183305af190816110f5575b5061109757610f9a610bc7565b907f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000610fe684610e3b565b16036110915781519160207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc938481016004840152820193828286019503011261108d5760248101519067ffffffffffffffff821161108957018260438201121561108d5760248101519061105a82610b0d565b936110686040519586610ad2565b828552604483830101116110895790806044602093018386015e8301015290565b8280fd5b5080fd5b50610e73565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6578706563746564207375636365737300000000000000000000000000006044820152fd5b90915067ffffffffffffffff8111610a72576040525f905f610f8d56fea26469706673582212201675b6747c06a232114d5996ab74371bbdc52003636d23d3871344f3a854590864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x48406A54 EQ PUSH2 0x1A7 JUMPI PUSH4 0xA7699638 EQ PUSH2 0x2F JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1A3 JUMPI PUSH1 0x40 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1A3 JUMPI PUSH2 0x66 PUSH2 0xAAF JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1A3 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x93 DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP3 PUSH2 0xA1 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0x1A3 JUMPI PUSH0 SWAP5 DUP6 PUSH1 0x20 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL PUSH2 0xD4 PUSH2 0xBC7 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x129 JUMPI SWAP1 PUSH2 0xEA DUP2 PUSH2 0x125 SWAP4 CALLER PUSH2 0xE82 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0xBF6 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x175 DUP4 PUSH2 0xE3B JUMP JUMPDEST AND SUB PUSH2 0xE73 JUMPI PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1A3 JUMPI PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1A3 JUMPI PUSH2 0x1DE PUSH2 0xAAF JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x1A3 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x20B DUP3 PUSH2 0xAF5 JUMP JUMPDEST SWAP2 PUSH2 0x219 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x1A3 JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xA9F JUMPI POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND SWAP2 DUP3 PUSH1 0x44 CALLDATALOAD SUB PUSH2 0x1A3 JUMPI PUSH2 0x270 PUSH1 0x44 CALLDATALOAD DUP4 DUP7 PUSH2 0xC1B JUMP JUMPDEST SWAP3 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF71088800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP5 DUP6 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP3 ADD MSTORE PUSH0 PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 MSTORE PUSH1 0xE0 DUP2 ADD SWAP1 DUP1 DUP3 LT DUP4 DUP4 GT OR PUSH2 0xA72 JUMPI PUSH2 0x327 SWAP2 PUSH1 0x40 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP2 DUP6 ADD SWAP5 SUB SLT PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x1A3 JUMPI ADD SWAP2 DUP1 PUSH1 0x3F DUP5 ADD SLT ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x362 DUP2 PUSH2 0xAF5 JUMP JUMPDEST SWAP4 PUSH2 0x370 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xAD2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x40 PUSH1 0x20 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1A3 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xA62 JUMPI POP POP POP PUSH2 0x3A0 DUP4 MLOAD PUSH2 0xB29 JUMP JUMPDEST SWAP5 PUSH0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x425 JUMPI PUSH2 0x3BF PUSH2 0x3B9 DUP3 DUP7 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xD21 JUMP JUMPDEST SWAP1 PUSH2 0x3CD PUSH2 0x3B9 DUP3 DUP9 PUSH2 0xB5A JUMP JUMPDEST SWAP2 PUSH0 DUP4 DUP3 SUB SWAP4 SLT DUP2 DUP5 SLT DUP2 AND SWAP2 DUP5 SGT SWAP1 ISZERO AND OR PUSH2 0x3F8 JUMPI PUSH1 0x1 SWAP2 PUSH2 0x3F1 DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD PUSH2 0x3A3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 POP SWAP2 SWAP3 PUSH2 0x434 DUP5 MLOAD PUSH2 0xB29 JUMP JUMPDEST SWAP3 PUSH0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x462 JUMPI PUSH1 0x1 SWAP1 PUSH2 0x451 PUSH1 0x44 CALLDATALOAD DUP10 DUP4 DUP9 PUSH2 0xD76 JUMP JUMPDEST PUSH2 0x45B DUP3 DUP9 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD PUSH2 0x437 JUMP JUMPDEST POP SWAP2 SWAP1 SWAP5 SWAP4 PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0xA57 JUMPI PUSH0 SWAP5 PUSH2 0x9AD JUMPI JUMPDEST POP POP SWAP5 SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 GT PUSH2 0x3F8 JUMPI DUP4 LT ISZERO PUSH2 0x92F JUMPI POP PUSH0 SWAP2 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x595 JUMPI PUSH0 PUSH2 0x556 DUP3 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD SGT DUP1 PUSH2 0x582 JUMPI JUMPDEST PUSH2 0x56B JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x542 JUMP JUMPDEST PUSH2 0x57A SWAP2 SWAP9 POP DUP1 SWAP5 POP DUP7 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP7 DUP4 PUSH2 0x563 JUMP JUMPDEST POP DUP9 PUSH2 0x58E DUP3 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD SLT PUSH2 0x55E JUMP JUMPDEST POP SWAP7 POP SWAP2 SWAP5 SWAP1 SWAP3 PUSH0 SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 SWAP8 PUSH0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x615 JUMPI PUSH0 PUSH2 0x5D6 DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD SLT DUP1 PUSH2 0x602 JUMPI JUMPDEST PUSH2 0x5EB JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x5C2 JUMP JUMPDEST PUSH2 0x5FA SWAP2 SWAP10 POP DUP1 SWAP4 POP DUP8 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP8 DUP3 PUSH2 0x5E3 JUMP JUMPDEST POP DUP10 PUSH2 0x60E DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD SGT PUSH2 0x5DE JUMP JUMPDEST POP SWAP3 SWAP7 SWAP8 POP SWAP4 SWAP3 DUP2 SWAP8 PUSH2 0x628 DUP2 DUP9 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0x63C PUSH2 0x636 DUP6 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xB9B JUMP JUMPDEST SGT ISZERO PUSH2 0x7DF JUMPI PUSH2 0x75A DUP7 PUSH2 0x71E DUP11 PUSH2 0x710 PUSH2 0x68E PUSH2 0x688 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x680 DUP13 DUP3 PUSH2 0x678 DUP6 DUP13 PUSH2 0xB5A JUMP JUMPDEST MLOAD AND SWAP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD AND SWAP5 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xE06 JUMP JUMPDEST SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 PUSH32 0x3EBC54E500000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x44 CALLDATALOAD SWAP3 DUP14 PUSH1 0x24 DUP8 ADD SWAP4 SWAP1 PUSH1 0xE0 SWAP6 SWAP3 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP6 DUP2 DUP1 SWAP5 AND DUP9 MSTORE AND PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0xAD2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST PUSH1 0x20 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0x787 DUP4 DUP3 PUSH2 0x780 PUSH2 0x78D SWAP7 PUSH1 0x20 DUP16 SWAP8 ADD MLOAD SWAP7 PUSH2 0xB5A JUMP JUMPDEST MSTORE DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0xD21 JUMP JUMPDEST SWAP2 PUSH2 0x798 DUP2 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH0 DUP5 DUP3 ADD SWAP5 DUP6 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x3F8 JUMPI PUSH1 0x1 SWAP3 PUSH2 0x7BC DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0x7D5 PUSH2 0x7CE PUSH1 0x44 CALLDATALOAD DUP11 DUP5 DUP10 PUSH2 0xD76 JUMP JUMPDEST SWAP2 DUP9 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD SWAP2 SWAP1 SWAP6 PUSH2 0x4E8 JUMP JUMPDEST SWAP2 DUP1 PUSH2 0x7EB DUP5 DUP9 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP7 PUSH2 0x80E DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH2 0x830 SWAP1 DUP13 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0x83A SWAP1 PUSH2 0xB9B JUMP JUMPDEST PUSH2 0x843 SWAP1 PUSH2 0xE06 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x175D440800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP4 DUP3 AND PUSH1 0x44 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP3 AND PUSH1 0x64 DUP6 ADD MSTORE PUSH1 0x84 DUP5 ADD MSTORE SWAP1 CALLDATALOAD AND PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xC4 DUP3 ADD MSTORE PUSH0 PUSH1 0xE4 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE PUSH2 0x8C9 PUSH2 0x104 DUP3 PUSH2 0xAD2 JUMP JUMPDEST PUSH2 0x909 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST DUP1 DUP1 MLOAD DUP2 ADD SUB PUSH1 0x20 SGT PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0x787 DUP4 DUP3 PUSH2 0x780 PUSH2 0x78D SWAP7 PUSH1 0x20 DUP16 SWAP8 ADD MLOAD SWAP7 PUSH2 0xB5A JUMP JUMPDEST PUSH2 0x94F DUP2 PUSH2 0x949 PUSH2 0x944 PUSH2 0x636 DUP12 SWAP6 DUP12 PUSH2 0xB5A JUMP JUMPDEST PUSH2 0xE06 JUMP JUMPDEST SWAP3 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x3F8 JUMPI DUP2 ISZERO PUSH2 0x980 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x40 MLOAD SWAP2 DIV PUSH1 0x1 SHR DUP2 MSTORE RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP4 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x9C0 DUP2 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0x1A3 JUMPI DUP1 MLOAD SWAP2 DUP3 GT PUSH2 0x1A3 JUMPI ADD SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP2 MLOAD SWAP1 PUSH2 0x9EF DUP3 PUSH2 0xAF5 JUMP JUMPDEST SWAP3 PUSH2 0x9FD PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP4 PUSH1 0x5 SHL DUP3 ADD ADD SWAP2 DUP3 GT PUSH2 0x1A3 JUMPI PUSH1 0x20 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0xA2A JUMPI POP POP POP SWAP2 DUP7 DUP1 PUSH2 0x4E1 JUMP JUMPDEST DUP3 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1A3 JUMPI DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0xA18 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x38C JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x236 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1A3 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xA72 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0xB33 DUP3 PUSH2 0xAF5 JUMP JUMPDEST PUSH2 0xB40 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0xB50 DUP3 SWAP5 PUSH2 0xAF5 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0xB6E JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x3F8 JUMPI PUSH0 SUB SWAP1 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0xBF1 JUMPI RETURNDATASIZE SWAP1 PUSH2 0xBD8 DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP2 PUSH2 0xBE6 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP1 SWAP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 SWAP4 PUSH32 0xDA001F7D00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE DUP3 PUSH1 0xA4 DUP6 ADD SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x80 PUSH1 0x44 DUP6 ADD MSTORE DUP7 MLOAD DUP1 SWAP2 MSTORE DUP5 PUSH1 0xC4 DUP6 ADD SWAP8 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xD0D JUMPI POP POP POP DUP4 PUSH2 0xCFC SWAP5 SWAP6 SWAP7 DUP4 PUSH2 0xCD5 SWAP4 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH0 DUP6 DUP3 SUB SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP4 ADD PUSH1 0x84 DUP9 ADD MSTORE MSTORE DUP1 DUP6 MSTORE ADD DUP4 PUSH2 0xAD2 JUMP JUMPDEST PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST DUP2 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x1A3 JUMPI ADD MLOAD SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP10 MSTORE SWAP8 DUP7 ADD SWAP8 SWAP2 DUP7 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xC81 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xD4B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0xDB1 DUP4 DUP3 MLOAD SWAP3 PUSH1 0x1F NOT PUSH2 0xDA5 PUSH2 0xD8F DUP7 PUSH2 0xAF5 JUMP JUMPDEST SWAP6 PUSH2 0xD9D PUSH1 0x40 MLOAD SWAP8 DUP9 PUSH2 0xAD2 JUMP JUMPDEST DUP1 DUP8 MSTORE PUSH2 0xAF5 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP4 DUP5 ISZERO PUSH2 0xDFD JUMPI PUSH2 0xDD9 SWAP4 PUSH2 0xDD3 PUSH0 DUP8 SGT SWAP7 DUP8 PUSH0 EQ PUSH2 0xDEE JUMPI SWAP2 JUMPDEST DUP5 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0xC1B JUMP JUMPDEST SWAP1 ISZERO PUSH2 0xDE2 JUMPI SWAP1 JUMP JUMPDEST PUSH2 0xDEB SWAP1 PUSH2 0xB9B JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0xDF7 SWAP1 PUSH2 0xB9B JUMP JUMPDEST SWAP2 PUSH2 0xDCD JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0xE10 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP2 MLOAD LT PUSH2 0xE4B JUMPI PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xE4B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0xEBF JUMPI POP DUP1 MLOAD ISZERO PUSH2 0xE97 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0xF12 JUMPI JUMPDEST PUSH2 0xED0 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0xEC8 JUMP JUMPDEST SWAP1 ADDRESS EXTCODESIZE ISZERO PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0xF80 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA769963800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SWAP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0xBF6 JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL SWAP1 DUP2 PUSH2 0x10F5 JUMPI JUMPDEST POP PUSH2 0x1097 JUMPI PUSH2 0xF9A PUSH2 0xBC7 JUMP JUMPDEST SWAP1 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0xFE6 DUP5 PUSH2 0xE3B JUMP JUMPDEST AND SUB PUSH2 0x1091 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC SWAP4 DUP5 DUP2 ADD PUSH1 0x4 DUP5 ADD MSTORE DUP3 ADD SWAP4 DUP3 DUP3 DUP7 ADD SWAP6 SUB ADD SLT PUSH2 0x108D JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1089 JUMPI ADD DUP3 PUSH1 0x43 DUP3 ADD SLT ISZERO PUSH2 0x108D JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH2 0x105A DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP4 PUSH2 0x1068 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP6 MSTORE PUSH1 0x44 DUP4 DUP4 ADD ADD GT PUSH2 0x1089 JUMPI SWAP1 DUP1 PUSH1 0x44 PUSH1 0x20 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP PUSH2 0xE73 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420737563636573730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP1 PUSH0 PUSH2 0xF8D JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 AND PUSH22 0xB6747C06A232114D5996AB74371BBDC52003636D23D3 DUP8 SGT PREVRANDAO RETURN 0xA8 SLOAD MSIZE ADDMOD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"635:8728:85:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;811:19:75;;;;;;:::i;:::-;840:718;;;;;990:10;955:63;990:10;635:8728:85;990:10:75;;955:63;:::i;:::-;;635:8728:85;;1084:26:75;;;;;;635:8728:85;;1084:26:75;;635:8728:85;;;;;;:::i;:::-;1084:26:75;;;840:718;1276:33;1344:27;635:8728:85;1276:33:75;;;:::i;:::-;635:8728:85;1327:44:75;1540:6;1323:110;1398:20;635:8728:85;1398:20:75;635:8728:85;;1398:20:75;635:8728:85;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1363:58;635:8728;;1363:58;;;:::i;:::-;635:8728;;;3822:254;3870:56;635:8728;3822:254;;;635:8728;;;3822:254;;635:8728;3822:254;;635:8728;;;;;;;;;;;;;;;;;;;;3822:254;;635:8728;;;;;;;;;;;;;3748:346;635:8728;;;;3792:7;635:8728;3748:346;:::i;:::-;635:8728;;;3720:417;;;635:8728;3720:417;;;;635:8728;;;;;;3720:417;;635:8728;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1642:35;635:8728;;1642:35;:::i;:::-;1692:13;635:8728;1734:3;635:8728;;1707:25;;;;;1765:36;:25;;;;:::i;:::-;635:8728;1765:36;:::i;:::-;1804:17;:28;:17;;;;:::i;:28::-;635:8728;;;;;;;;;;;;;;;;;;;;;;1753:79;;;;;:::i;:::-;635:8728;;1692:13;;635:8728;;;;;;;;;;1707:25;;;;;;1988:35;635:8728;;1988:35;:::i;:::-;2038:13;635:8728;2080:3;635:8728;;2053:25;;;;;635:8728;;2114:67;635:8728;;2114:67;;;;:::i;:::-;2099:82;;;;:::i;:::-;635:8728;;2038:13;;2053:25;;;;;;635:8728;;;;6714:26;635:8728;6714:26;;635:8728;6714:26;;635:8728;;6714:6;635:8728;6714:6;635:8728;6714:6;635:8728;6714:26;;;;;;;635:8728;6714:26;;;2033:159;6756:13;;;;635:8728;6751:1710;6794:3;635:8728;;;;;;;;;;6771:21;;;;;6912:28;635:8728;8712:29;8725:16;8756:13;635:8728;8789:3;635:8728;;8771:16;;;;;635:8728;8812:8;;;;:::i;:::-;635:8728;8812:12;:30;;;8789:3;8808:110;;8789:3;635:8728;;8756:13;;8808:110;8868:8;;;;;;;;;:::i;:::-;635:8728;;8894:9;8808:110;;8812:30;8828:8;;;;;;:::i;:::-;635:8728;8828:14;8812:30;;8771:16;;;;;;;;635:8728;9139:29;9152:16;9183:13;635:8728;9216:3;635:8728;;9198:16;;;;;635:8728;9239:8;;;;:::i;:::-;635:8728;9239:12;:30;;;9216:3;9235:110;;9216:3;635:8728;;9183:13;;9235:110;9295:8;;;;;;;;;:::i;:::-;635:8728;;9321:9;9235:110;;9239:30;9255:8;;;;;;:::i;:::-;635:8728;9255:14;9239:30;;9198:16;;;;;;;;6954:52;7021:23;7135:32;;;;:::i;:::-;635:8728;7170:33;7171:32;;;;:::i;:::-;635:8728;7170:33;:::i;:::-;-1:-1:-1;7171:32:85;;;4399:404;7223:39;4473:312;7223:39;4473:312;7528:35;:23;7223:39;635:8728;7478:28;7280:40;7429:27;;;;;:::i;:::-;635:8728;;7478:28;;:::i;:::-;635:8728;;7528:23;;:::i;:::-;635:8728;7528:35;:::i;:::-;635:8728;;;4473:312;;;4521:51;635:8728;4473:312;;;635:8728;;4473:312;;635:8728;4473:312;;635:8728;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4473:312;;-1:-1:-1;;4473:312:85;;;;;;:::i;:::-;635:8728;3792:7;635:8728;4399:404;:::i;:::-;635:8728;;;;4371:473;;635:8728;;;;;8151:30;4371:473;;8110:27;8223:23;4371:473;635:8728;4371:473;;;635:8728;7131:922;8110:27;:::i;:::-;635:8728;8151:30;;:::i;:::-;635:8728;8223:23;:::i;:::-;8195:51;;;;;:::i;:::-;635:8728;;;;;;;;;;;;;;;;;;;;;;8195:51;;;;;:::i;:::-;635:8728;8260:190;8290:160;635:8728;;8290:160;;;;:::i;:::-;8260:190;;;:::i;:::-;635:8728;;6756:13;;;;;7131:922;7648:39;;7855:28;7648:39;7855:28;;:::i;:::-;635:8728;;;7905:27;;;;;;:::i;:::-;635:8728;;;7956:23;;;;;:::i;:::-;635:8728;7955:24;;;:::i;:::-;7954:38;;;:::i;:::-;635:8728;;5230:52;635:8728;5182:314;;;635:8728;;;;;5182:314;;635:8728;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;635:8728:85;;;;;;;;5182:314;;;635:8728;;5182:314;:::i;:::-;5108:406;;635:8728;3792:7;635:8728;5108:406;:::i;:::-;635:8728;;;5080:475;;635:8728;;-1:-1:-1;635:8728:85;;;8151:30;5080:475;;8110:27;8223:23;5080:475;635:8728;5080:475;;;635:8728;7131:922;8110:27;:::i;6771:21::-;2647:35;6771:21;2574:42;2575:28;2576:27;6771:21;;;2576:27;:::i;2575:28::-;2574:42;:::i;:::-;2647:35;;:::i;:::-;635:8728;465:4:39;;;;;;;;;;;;;;;;;635:8728:85;;;;;;;;;;;;;;;;;;;;;;;;;6714:26;;;;;;;635:8728;6714:26;;;;;;:::i;:::-;;;635:8728;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;6714:26;;;;;;;;635:8728;;;;;;;;;;;;;;;;;;;;6714:26;635:8728;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;635:8728:85;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;635:8728:85;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;635:8728:85;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;635:8728:85;;;;:::o;:::-;;;:::o;:::-;;-1:-1:-1;;635:8728:85;;;;;;;;;;;;;;;;;-1:-1:-1;635:8728:85;;;;;;;;;;;:::o;2918:606::-;;;;635:8728;;;3207:251;;;3255:51;3207:251;;;;635:8728;;;;;;3207:251;;;635:8728;;;;;;;;;;;;;;;;;;-1:-1:-1;635:8728:85;;;;;;;;;;3133:343;635:8728;;;;3207:251;635:8728;;;;;;-1:-1:-1;635:8728:85;;;;;;;;;;;;3207:251;;;;;;:::i;:::-;3177:7;635:8728;3133:343;:::i;:::-;635:8728;;;;3105:412;;635:8728;;;;3105:412;635:8728;2918:606;:::o;635:8728::-;;;;;;;;;;;;;;;;;34380:314:71;34573:16;34557:33;;34553:105;;34380:314;:::o;34553:105::-;34613:34;;;;635:8728:85;;34613:34:71;;5783:602:85;;;;6076:18;635:8728;;;;-1:-1:-1;;635:8728:85;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;6076:18;:::i;:::-;635:8728;6109:10;;;6105:49;;6267:64;6207:9;6164:70;635:8728;6207:9;;:26;;;;;;;;6164:70;;:::i;:::-;635:8728;6267:64;:::i;:::-;6350:28;;;;5783:602;:::o;6350:28::-;6371:7;;;:::i;:::-;5783:602;:::o;6207:26::-;6227:6;;;:::i;:::-;6207:26;;;6105:49;6135:8;;;;;635:8728;6135:8;:::o;17171:193:71:-;17258:1;17250:9;;17246:81;;17171:193;:::o;17246:81::-;17282:34;17258:1;17282:34;;635:8728:85;;17258:1:71;17282:34;1336:351:37;1463:1;635:8728:85;;1443:21:37;1439:82;;1530:151;;;1336:351;:::o;1439:82::-;1487:23;;;1463:1;1487:23;;1741:504;635:8728:85;;1881:21:37;:17;;2008:160;;;;;;4437:582:61;;4609:8;;-1:-1:-1;635:8728:85;;5690:21:61;:17;;5815:105;;;;;;5686:301;5957:19;5710:1;5957:19;;5710:1;5957:19;4605:408;635:8728:85;;4857:22:61;:49;;;4605:408;4853:119;;4985:17;;:::o;4853:119::-;635:8728:85;4933:24:61;;4878:1;4933:24;635:8728:85;4933:24:61;635:8728:85;;4878:1:61;4933:24;4857:49;4883:18;;;:23;4857:49;;303:324:75;;430:4;408:60;;;;;635:8728:85;;;;408:60:75;;;;635:8728:85;408:60:75;;635:8728:85;408:60:75;635:8728:85;;408:60:75;;;635:8728:85;;;;;;;;;;;:::i;:::-;408:60:75;430:4;;;408:60;;;;;;303:324;-1:-1:-1;404:217:75;;523:98;;:::i;:::-;720:36:37;787:15;635:8728:85;720:36:37;;;:::i;:::-;635:8728:85;770:32:37;766:185;;635:8728:85;;1013:179:37;1209:30;1013:179;;;;;408:60:75;1013:179:37;;;1209:30;;;;;;;635:8728:85;;;;;;;1209:30:37;;635:8728:85;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;1209:30:37;635:8728:85;;;;;;;;;;565:45:75;:::o;635:8728:85:-;;;;;;;;766:185:37;930:9;;:::i;404:217:75:-;635:8728:85;;;483:28:75;;;635:8728:85;408:60:75;483:28;;635:8728:85;;;;;;;;;;;483:28:75;408:60;635:8728:85;;;;;;;;;;408:60:75;;;;"},"methodIdentifiers":{"calculateAddLiquidityUnbalancedPriceImpact(address,uint256[],address)":"48406a54","callAndRevertHook(address,bytes)":"a7699638"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IRouter\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"calculateAddLiquidityUnbalancedPriceImpact\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"priceImpact\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callAndRevertHook\",\"outputs\":[],\"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.\"}],\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/PriceImpactHelper.sol\":\"PriceImpactHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":{\"keccak256\":\"0x5a0ee9f30170b2df308aa992f331d2070f389c1c7261b166ad8dcf058b079c00\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://89a654106d847701efa4cffbe73d98aea2bc0f9a041a28b4762f127fce48eba3\",\"dweb:/ipfs/QmVZKnQqxmydspv6P6e4137QHiNnhP6J7fzWh9XFuJj6At\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol\":{\"keccak256\":\"0x7a46d0e972ea96fe2190b4975d71fa033fbc65cb596f3c584a47b37b2b58ade1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://56e07234b208282d0751b31eefbed6d48cfacddd9c2dbad7f4fbc55789bdc0ca\",\"dweb:/ipfs/QmTRLGeyZNzKY3S4JUWwDshCMfnY6WMFq2BGD5BozWFAnC\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"contracts/CallAndRevert.sol\":{\"keccak256\":\"0xe0f09e833265592b398c7607db658e3541b800f66c9536ee129ae6863e4185f2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bc7dd31dd95f738debb5ca8c8b80e90384c1d8b72dc70e02dd7ae22e7c77f337\",\"dweb:/ipfs/QmNaJXyazNRD1fbqs6QJSwB3VWKu3ZjHqecMqKg57UeMuS\"]},\"contracts/PriceImpactHelper.sol\":{\"keccak256\":\"0xdba22a15b68c0631a6da1de1a5e2e568339959f29950046b8ca881f7ac5e301f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5973227783a748f09558f2b5943d66128636b63936d847719c33d1158b06ce86\",\"dweb:/ipfs/QmVke3xsrpFf9H28dyrTaYhxbPU4aGywtUf6NaKzgRAb4v\"]}},\"version\":1}"}},"contracts/ProtocolFeeHelper.sol":{"ProtocolFeeHelper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"InvalidPoolSetId","type":"error"},{"inputs":[],"name":"InvalidPoolSetManager","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"poolSetManager","type":"address"}],"name":"PoolSetManagerNotUnique","type":"error"},{"inputs":[],"name":"SenderIsNotPoolSetManager","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolRemovedFromSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"initialManager","type":"address"}],"name":"PoolSetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"PoolSetDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"PoolSetOwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPoolsToSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"destroyPoolSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getAllPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getManagerForPoolSet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextPoolSetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getPoolCountForSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolSetIdForCaller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"getPoolSetIdForManager","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isPoolInSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isValidPoolSetId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePoolsFromSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferPoolSetOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461011e57601f611b4d38819003918201601f19168301916001600160401b0383118484101761012257808492604094855283398101031261011e5780516001600160a01b03918282169081830361011e576020015183811680910361011e57801561010b5760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100fc5760a0526001600255611a1690816101378239608051816112ee015260a05181818161025401528181610386015281816106c501528181610d0d015281816116e601526118bf0152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60406080815260049081361015610014575f80fd5b5f915f358060e01c908163182551da1461105c578163255dae411461101c57816325c427ed14610fd95781632da55a1d14610f115781633700f98714610e5d5781633e035f9b14610c8557816362d5346214610c54578163715018a614610bcf57816379ba509714610b6b5781637c1ec46014610a1f578163851c1bb3146109d65781638c60ebd0146108905781638da5cb5b1461085d57816394fc4058146107dd578163a89b11281461073a57508063aaabadc514610672578063abaa335614610599578063c482e8221461057a578063ce998aba14610556578063e30c397814610521578063e909c19b146104e3578063ebf3a8d01461034c578063f167a1e61461030b578063f2fde38b1461027c578063fbfa77cf146102275763fd267f391461013f575f80fd5b8291346102235780600319360112610223576101596110c4565b61016a816101656114eb565b611630565b73ffffffffffffffffffffffffffffffffffffffff6101876116a3565b1692833b1561021f576101f09385928385518097819582947ffd267f390000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af190811561021657506102035750f35b61020c906110e7565b6102135780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b5050346102785781600319360112610278576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b8334610213576020600319360112610213576102966110c4565b61029e61141c565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5034610348576020600319360112610348578160209373ffffffffffffffffffffffffffffffffffffffff92358152600385522054169051908152f35b8280fd5b50346103485761035b366111fe565b61036361141c565b61036c826113b7565b80519273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692875b8681106103b5578880f35b826103c08284611282565b511688517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156104d9578d916104ac575b501561048257600590898d525261041f828b8d20611988565b15610454575090866001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b698c80a3016103aa565b878b91604493887f5a17aa8d0000000000000000000000000000000000000000000000000000000085525252fd5b508a82877f9e51bd5c00000000000000000000000000000000000000000000000000000000835252fd5b6104cc9150823d84116104d2575b6104c48183611128565b81019061139f565b5f610406565b503d6104ba565b8c513d8f823e3d90fd5b5050346102785760206003193601126102785760209061051a6105046110c4565b61050c61141c565b61051581611468565b611529565b9051908152f35b50503461027857816003193601126102785760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50346103485782600319360112610348576020928291338252845220549051908152f35b5050346102785781600319360112610278576020906002549051908152f35b50903461066e578060031936011261066e576105b36110c4565b6105bf816101656114eb565b73ffffffffffffffffffffffffffffffffffffffff6105dc6116a3565b1692833b1561066e57610645935f928385518097819582947fabaa33560000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19081156106655750610659575080f35b61066391506110e7565b005b513d5f823e3d90fd5b5f80fd5b503461066e575f60031936011261066e5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561073057926020935f93610701575b505191168152f35b610722919350843d8611610729575b61071a8183611128565b810190611373565b91846106f9565b503d610710565b83513d5f823e3d90fd5b90503461066e57602060031936011261066e5761078a6107837fffffffff0000000000000000000000000000000000000000000000000000000061077c6110c4565b93166112c3565b3390611868565b156107b65773ffffffffffffffffffffffffffffffffffffffff5f541633146107b657610663906115be565b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b50503461066e57602090602060031936011261066e57356107fd816113b7565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b828210610846576108428686610838828b0383611128565b5191829182611231565b0390f35b835487529586019560019384019390910190610820565b833461066e575f60031936011261066e5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50503461066e57606060031936011261066e57803590602435604435916108b6846113b7565b835f526005906020906005602052865f20548585119081156109cc575b81156109c1575b5061099657506108ea8385611339565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061092d61091888611169565b976109258a51998a611128565b808952611169565b01366020880137835b85811061094a578751806108428982611231565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff610974828b5f2061175f565b90549060031b1c1661098f6109898884611339565b8a611282565b5201610936565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b9050841015886108da565b80871191506108d3565b50503461066e57602060031936011261066e5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361066e5761051a6020926112c3565b50503461066e576020918260031936011261066e57813591610a3f61141c565b610a48836113b7565b825f5260058452815f208054805b610b0b575050825f5260058452815f208054905f815581610aee575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610a72575f8155600101610af8565b5f190180610b6573ffffffffffffffffffffffffffffffffffffffff610b31838661175f565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a384611774565b50610a56565b823461066e575f60031936011261066e573373ffffffffffffffffffffffffffffffffffffffff6001541603610ba457610663336115be565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b3461066e575f60031936011261066e57610be761141c565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b82843461066e57602060031936011261066e5760209135610c74816113b7565b5f5260058252805f20549051908152f35b82843461066e578060031936011261066e57610c9f6110c4565b60249260243567ffffffffffffffff811161066e57610cc4610ccd9136908401611181565b9261050c61141c565b938251610cdf575b6020858551908152f35b610cea92919261141c565b610cf3856113b7565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610d415750505050610cd5565b82610d4c8284611282565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610e53575f91610e36575b5015610e0c579060058b92835f5252610dab818b5f20611988565b15610ddf5790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610d31565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610e4d9150823d84116104d2576104c48183611128565b8c610d90565b8b513d5f823e3d90fd5b82843461066e57602060031936011261066e57610e786110c4565b91610e8283611468565b610e8a6114eb565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b82843461066e57610f21366111fe565b91610f2a61141c565b610f33826113b7565b8251925f5b848110610f4157005b73ffffffffffffffffffffffffffffffffffffffff610f608284611282565b5116845f526005602052610f7681855f20611774565b15610faa5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610f38565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b82843461066e57602060031936011261066e5760209173ffffffffffffffffffffffffffffffffffffffff61100c6110c4565b165f528252805f20549051908152f35b82843461066e57602060031936011261066e57602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b833461066e578060031936011261066e576020906110bb61107b6110c4565b602435611087816113b7565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361066e57565b67ffffffffffffffff81116110fb57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110fb57604052565b67ffffffffffffffff81116110fb5760051b60200190565b9080601f8301121561066e57602090823561119b81611169565b936111a96040519586611128565b81855260208086019260051b82010192831161066e57602001905b8282106111d2575050505090565b813573ffffffffffffffffffffffffffffffffffffffff8116810361066e5781529083019083016111c4565b90604060031983011261066e57600435916024359067ffffffffffffffff821161066e5761122e91600401611181565b90565b60209060206040818301928281528551809452019301915f5b828110611258575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161124a565b80518210156112965760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176110fb5760405251902090565b9190820391821161134657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9081602091031261066e575173ffffffffffffffffffffffffffffffffffffffff8116810361066e5790565b9081602091031261066e5751801515810361066e5790565b801580156113f2575b6113c75750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f205416156113c0565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361143c57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff1680156114c357805f52600460205260405f20546114985750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561150157565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611346576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b90815f52600560205261166c73ffffffffffffffffffffffffffffffffffffffff60405f20921680926001915f520160205260405f2054151590565b15611675575050565b7f80145d72000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa918215611754575f9261171b57505090565b9091506020813d60201161174c575b8161173760209383611128565b8101031261066e5751908116810361066e5790565b3d915061172a565b6040513d5f823e3d90fd5b8054821015611296575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f14611860575f19918281018181116113465782549084820191821161134657818103611815575b505050805480156117e8578201916117ca838361175f565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61184b611825611835938661175f565b90549060031b1c9283928661175f565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806117b2565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f5416911690811461198057604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156117545785935f9561195c575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa918215611754575f9261194657505090565b61122e9250803d106104d2576104c48183611128565b60649291955061197890853d87116107295761071a8183611128565b9490916118f1565b505050600190565b5f8281526001820160205260409020546119da57805490680100000000000000008210156110fb57826119c561183584600180960185558461175f565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220a86eee931a88d4f839c9313a069eb3f4357676a3b7e1548b9f23cf223f177aaf64736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x11E JUMPI PUSH1 0x1F PUSH2 0x1B4D CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x122 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x11E JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x11E JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x11E JUMPI DUP1 ISZERO PUSH2 0x10B JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xFC JUMPI PUSH1 0xA0 MSTORE PUSH1 0x1 PUSH1 0x2 SSTORE PUSH2 0x1A16 SWAP1 DUP2 PUSH2 0x137 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x12EE ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x254 ADD MSTORE DUP2 DUP2 PUSH2 0x386 ADD MSTORE DUP2 DUP2 PUSH2 0x6C5 ADD MSTORE DUP2 DUP2 PUSH2 0xD0D ADD MSTORE DUP2 DUP2 PUSH2 0x16E6 ADD MSTORE PUSH2 0x18BF ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x182551DA EQ PUSH2 0x105C JUMPI DUP2 PUSH4 0x255DAE41 EQ PUSH2 0x101C JUMPI DUP2 PUSH4 0x25C427ED EQ PUSH2 0xFD9 JUMPI DUP2 PUSH4 0x2DA55A1D EQ PUSH2 0xF11 JUMPI DUP2 PUSH4 0x3700F987 EQ PUSH2 0xE5D JUMPI DUP2 PUSH4 0x3E035F9B EQ PUSH2 0xC85 JUMPI DUP2 PUSH4 0x62D53462 EQ PUSH2 0xC54 JUMPI DUP2 PUSH4 0x715018A6 EQ PUSH2 0xBCF JUMPI DUP2 PUSH4 0x79BA5097 EQ PUSH2 0xB6B JUMPI DUP2 PUSH4 0x7C1EC460 EQ PUSH2 0xA1F JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x9D6 JUMPI DUP2 PUSH4 0x8C60EBD0 EQ PUSH2 0x890 JUMPI DUP2 PUSH4 0x8DA5CB5B EQ PUSH2 0x85D JUMPI DUP2 PUSH4 0x94FC4058 EQ PUSH2 0x7DD JUMPI DUP2 PUSH4 0xA89B1128 EQ PUSH2 0x73A JUMPI POP DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x672 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0x599 JUMPI DUP1 PUSH4 0xC482E822 EQ PUSH2 0x57A JUMPI DUP1 PUSH4 0xCE998ABA EQ PUSH2 0x556 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x521 JUMPI DUP1 PUSH4 0xE909C19B EQ PUSH2 0x4E3 JUMPI DUP1 PUSH4 0xEBF3A8D0 EQ PUSH2 0x34C JUMPI DUP1 PUSH4 0xF167A1E6 EQ PUSH2 0x30B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x227 JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x13F JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP3 SWAP2 CALLVALUE PUSH2 0x223 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x223 JUMPI PUSH2 0x159 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x16A DUP2 PUSH2 0x165 PUSH2 0x14EB JUMP JUMPDEST PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x187 PUSH2 0x16A3 JUMP JUMPDEST AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x21F JUMPI PUSH2 0x1F0 SWAP4 DUP6 SWAP3 DUP4 DUP6 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0xFD267F3900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 CALLDATALOAD SWAP2 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x216 JUMPI POP PUSH2 0x203 JUMPI POP RETURN JUMPDEST PUSH2 0x20C SWAP1 PUSH2 0x10E7 JUMP JUMPDEST PUSH2 0x213 JUMPI DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST POP POP REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x278 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x278 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x213 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x213 JUMPI PUSH2 0x296 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x29E PUSH2 0x141C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE DUP3 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x348 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI DUP2 PUSH1 0x20 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x3 DUP6 MSTORE KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x348 JUMPI PUSH2 0x35B CALLDATASIZE PUSH2 0x11FE JUMP JUMPDEST PUSH2 0x363 PUSH2 0x141C JUMP JUMPDEST PUSH2 0x36C DUP3 PUSH2 0x13B7 JUMP JUMPDEST DUP1 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 DUP8 JUMPDEST DUP7 DUP2 LT PUSH2 0x3B5 JUMPI DUP9 DUP1 RETURN JUMPDEST DUP3 PUSH2 0x3C0 DUP3 DUP5 PUSH2 0x1282 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x4D9 JUMPI DUP14 SWAP2 PUSH2 0x4AC JUMPI JUMPDEST POP ISZERO PUSH2 0x482 JUMPI PUSH1 0x5 SWAP1 DUP10 DUP14 MSTORE MSTORE PUSH2 0x41F DUP3 DUP12 DUP14 KECCAK256 PUSH2 0x1988 JUMP JUMPDEST ISZERO PUSH2 0x454 JUMPI POP SWAP1 DUP7 PUSH1 0x1 SWAP3 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 DUP13 DUP1 LOG3 ADD PUSH2 0x3AA JUMP JUMPDEST DUP8 DUP12 SWAP2 PUSH1 0x44 SWAP4 DUP9 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE MSTORE MSTORE REVERT JUMPDEST POP DUP11 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH2 0x4CC SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D2 JUMPI JUMPDEST PUSH2 0x4C4 DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x139F JUMP JUMPDEST PUSH0 PUSH2 0x406 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4BA JUMP JUMPDEST DUP13 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x278 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x278 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x51A PUSH2 0x504 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x50C PUSH2 0x141C JUMP JUMPDEST PUSH2 0x515 DUP2 PUSH2 0x1468 JUMP JUMPDEST PUSH2 0x1529 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x278 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x278 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x348 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0x20 SWAP3 DUP3 SWAP2 CALLER DUP3 MSTORE DUP5 MSTORE KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x278 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x278 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x66E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0x5B3 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x5BF DUP2 PUSH2 0x165 PUSH2 0x14EB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5DC PUSH2 0x16A3 JUMP JUMPDEST AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x66E JUMPI PUSH2 0x645 SWAP4 PUSH0 SWAP3 DUP4 DUP6 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0xABAA335600000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 CALLDATALOAD SWAP2 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x665 JUMPI POP PUSH2 0x659 JUMPI POP DUP1 RETURN JUMPDEST PUSH2 0x663 SWAP2 POP PUSH2 0x10E7 JUMP JUMPDEST STOP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x66E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x730 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x701 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x722 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x729 JUMPI JUMPDEST PUSH2 0x71A DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1373 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x6F9 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x710 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0x78A PUSH2 0x783 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x77C PUSH2 0x10C4 JUMP JUMPDEST SWAP4 AND PUSH2 0x12C3 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x1868 JUMP JUMPDEST ISZERO PUSH2 0x7B6 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x7B6 JUMPI PUSH2 0x663 SWAP1 PUSH2 0x15BE JUMP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI CALLDATALOAD PUSH2 0x7FD DUP2 PUSH2 0x13B7 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x846 JUMPI PUSH2 0x842 DUP7 DUP7 PUSH2 0x838 DUP3 DUP12 SUB DUP4 PUSH2 0x1128 JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1231 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x820 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x66E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x8B6 DUP5 PUSH2 0x13B7 JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x9CC JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x9C1 JUMPI JUMPDEST POP PUSH2 0x996 JUMPI POP PUSH2 0x8EA DUP4 DUP6 PUSH2 0x1339 JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x92D PUSH2 0x918 DUP9 PUSH2 0x1169 JUMP JUMPDEST SWAP8 PUSH2 0x925 DUP11 MLOAD SWAP10 DUP11 PUSH2 0x1128 JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x1169 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x94A JUMPI DUP8 MLOAD DUP1 PUSH2 0x842 DUP10 DUP3 PUSH2 0x1231 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x974 DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x175F JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x98F PUSH2 0x989 DUP9 DUP5 PUSH2 0x1339 JUMP JUMPDEST DUP11 PUSH2 0x1282 JUMP JUMPDEST MSTORE ADD PUSH2 0x936 JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x8DA JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x8D3 JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x66E JUMPI PUSH2 0x51A PUSH1 0x20 SWAP3 PUSH2 0x12C3 JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0xA3F PUSH2 0x141C JUMP JUMPDEST PUSH2 0xA48 DUP4 PUSH2 0x13B7 JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0xB0B JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0xAEE JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA72 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xAF8 JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0xB65 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xB31 DUP4 DUP7 PUSH2 0x175F JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x1774 JUMP JUMPDEST POP PUSH2 0xA56 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x66E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0xBA4 JUMPI PUSH2 0x663 CALLER PUSH2 0x15BE JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x66E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0xBE7 PUSH2 0x141C JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xC74 DUP2 PUSH2 0x13B7 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0xC9F PUSH2 0x10C4 JUMP JUMPDEST PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x66E JUMPI PUSH2 0xCC4 PUSH2 0xCCD SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1181 JUMP JUMPDEST SWAP3 PUSH2 0x50C PUSH2 0x141C JUMP JUMPDEST SWAP4 DUP3 MLOAD PUSH2 0xCDF JUMPI JUMPDEST PUSH1 0x20 DUP6 DUP6 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xCEA SWAP3 SWAP2 SWAP3 PUSH2 0x141C JUMP JUMPDEST PUSH2 0xCF3 DUP6 PUSH2 0x13B7 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0xD41 JUMPI POP POP POP POP PUSH2 0xCD5 JUMP JUMPDEST DUP3 PUSH2 0xD4C DUP3 DUP5 PUSH2 0x1282 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP10 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xE53 JUMPI PUSH0 SWAP2 PUSH2 0xE36 JUMPI JUMPDEST POP ISZERO PUSH2 0xE0C JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP3 DUP4 PUSH0 MSTORE MSTORE PUSH2 0xDAB DUP2 DUP12 PUSH0 KECCAK256 PUSH2 0x1988 JUMP JUMPDEST ISZERO PUSH2 0xDDF JUMPI SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xD31 JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xE4D SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D2 JUMPI PUSH2 0x4C4 DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST DUP13 PUSH2 0xD90 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0xE78 PUSH2 0x10C4 JUMP JUMPDEST SWAP2 PUSH2 0xE82 DUP4 PUSH2 0x1468 JUMP JUMPDEST PUSH2 0xE8A PUSH2 0x14EB JUMP JUMPDEST SWAP2 DUP3 SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH2 0xF21 CALLDATASIZE PUSH2 0x11FE JUMP JUMPDEST SWAP2 PUSH2 0xF2A PUSH2 0x141C JUMP JUMPDEST PUSH2 0xF33 DUP3 PUSH2 0x13B7 JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xF41 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xF60 DUP3 DUP5 PUSH2 0x1282 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0xF76 DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x1774 JUMP JUMPDEST ISZERO PUSH2 0xFAA JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0xF38 JUMP JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100C PUSH2 0x10C4 JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x66E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP1 PUSH2 0x10BB PUSH2 0x107B PUSH2 0x10C4 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x1087 DUP2 PUSH2 0x13B7 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x66E JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10FB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10FB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10FB JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x66E JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x119B DUP2 PUSH2 0x1169 JUMP JUMPDEST SWAP4 PUSH2 0x11A9 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1128 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x66E JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x11D2 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x66E JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x11C4 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x66E JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x66E JUMPI PUSH2 0x122E SWAP2 PUSH1 0x4 ADD PUSH2 0x1181 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1258 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x124A JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1296 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10FB JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1346 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x66E JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x66E JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x66E JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x66E JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x13F2 JUMPI JUMPDEST PUSH2 0x13C7 JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x13C0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x143C JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x14C3 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x1498 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLER PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x1501 JUMPI JUMP JUMPDEST PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x1346 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0x166C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND DUP1 SWAP3 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x1675 JUMPI POP POP JUMP JUMPDEST PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1754 JUMPI PUSH0 SWAP3 PUSH2 0x171B JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x174C JUMPI JUMPDEST DUP2 PUSH2 0x1737 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1128 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x66E JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x66E JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x172A JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x1296 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x1860 JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x1346 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x1346 JUMPI DUP2 DUP2 SUB PUSH2 0x1815 JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x17E8 JUMPI DUP3 ADD SWAP2 PUSH2 0x17CA DUP4 DUP4 PUSH2 0x175F JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x184B PUSH2 0x1825 PUSH2 0x1835 SWAP4 DUP7 PUSH2 0x175F JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x175F JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x17B2 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x1980 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x1754 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x195C JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1754 JUMPI PUSH0 SWAP3 PUSH2 0x1946 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x122E SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x4D2 JUMPI PUSH2 0x4C4 DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x1978 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x729 JUMPI PUSH2 0x71A DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x18F1 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x19DA JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0x10FB JUMPI DUP3 PUSH2 0x19C5 PUSH2 0x1835 DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x175F JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 PUSH15 0xEE931A88D4F839C9313A069EB3F435 PUSH23 0x76A3B7E1548B9F23CF223F177AAF64736F6C634300081B STOP CALLER ","sourceMap":"446:1537:86:-:0;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;-1:-1:-1;;;;;446:1537:86;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;446:1537:86;;;;;;;;;;;;;;;;;;;;;1273:26:49;;1269:95;;446:1537:86;;;;;;;;2093:20:50;446:1537:86;;2093:20:50;446:1537:86;;-1:-1:-1;446:1537:86;;;;;-1:-1:-1;446:1537:86;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1524:4:81;1347:46:33;;1548:29:81;1544:80;;1634:14;;2093:20:50;853:1:82;446:1537:86;;;;;;;1347:46:33;446:1537:86;;;;;1634:14:81;446:1537:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1544:80:81;1600:13;;;-1:-1:-1;1600:13:81;;-1:-1:-1;1600:13:81;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;446:1537:86;;-1:-1:-1;1322:31:49;446:1537:86;-1:-1:-1;446:1537:86;;;;;;-1:-1:-1;446:1537:86;;;;;-1:-1:-1;446:1537:86"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":4292,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_array_address_dyn":{"entryPoint":4481,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":5023,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":4979,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_array_address_dyn":{"entryPoint":4606,"id":null,"parameterSlots":1,"returnSlots":2},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_address_dyn":{"entryPoint":4657,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":4457,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":4921,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":4392,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_15528":{"entryPoint":4327,"id":null,"parameterSlots":1,"returnSlots":0},"fun_add":{"entryPoint":6536,"id":16149,"parameterSlots":2,"returnSlots":1},"fun_canPerform":{"entryPoint":6248,"id":20329,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":5148,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_contains":{"entryPoint":null,"id":16295,"parameterSlots":2,"returnSlots":1},"fun_createPoolSet":{"entryPoint":5417,"id":20497,"parameterSlots":1,"returnSlots":1},"fun_ensurePoolInSet":{"entryPoint":5680,"id":21027,"parameterSlots":2,"returnSlots":0},"fun_ensureValidManager":{"entryPoint":5224,"id":21004,"parameterSlots":1,"returnSlots":0},"fun_ensureValidPoolSet":{"entryPoint":5047,"id":21058,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":4803,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_getProtocolFeeController":{"entryPoint":5795,"id":21965,"parameterSlots":0,"returnSlots":1},"fun_getValidPoolSetId":{"entryPoint":5355,"id":20976,"parameterSlots":0,"returnSlots":1},"fun_remove":{"entryPoint":6004,"id":16233,"parameterSlots":2,"returnSlots":1},"fun_transferOwnership":{"entryPoint":5566,"id":9547,"parameterSlots":1,"returnSlots":0},"memory_array_index_access_address_dyn":{"entryPoint":4738,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_bytes32_dyn":{"entryPoint":5983,"id":null,"parameterSlots":2,"returnSlots":2},"update_byte_slice_dynamic32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":4846}],"20218":[{"length":32,"start":596},{"length":32,"start":902},{"length":32,"start":1733},{"length":32,"start":3341},{"length":32,"start":5862},{"length":32,"start":6335}]},"linkReferences":{},"object":"60406080815260049081361015610014575f80fd5b5f915f358060e01c908163182551da1461105c578163255dae411461101c57816325c427ed14610fd95781632da55a1d14610f115781633700f98714610e5d5781633e035f9b14610c8557816362d5346214610c54578163715018a614610bcf57816379ba509714610b6b5781637c1ec46014610a1f578163851c1bb3146109d65781638c60ebd0146108905781638da5cb5b1461085d57816394fc4058146107dd578163a89b11281461073a57508063aaabadc514610672578063abaa335614610599578063c482e8221461057a578063ce998aba14610556578063e30c397814610521578063e909c19b146104e3578063ebf3a8d01461034c578063f167a1e61461030b578063f2fde38b1461027c578063fbfa77cf146102275763fd267f391461013f575f80fd5b8291346102235780600319360112610223576101596110c4565b61016a816101656114eb565b611630565b73ffffffffffffffffffffffffffffffffffffffff6101876116a3565b1692833b1561021f576101f09385928385518097819582947ffd267f390000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af190811561021657506102035750f35b61020c906110e7565b6102135780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b5050346102785781600319360112610278576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b8334610213576020600319360112610213576102966110c4565b61029e61141c565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5034610348576020600319360112610348578160209373ffffffffffffffffffffffffffffffffffffffff92358152600385522054169051908152f35b8280fd5b50346103485761035b366111fe565b61036361141c565b61036c826113b7565b80519273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692875b8681106103b5578880f35b826103c08284611282565b511688517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156104d9578d916104ac575b501561048257600590898d525261041f828b8d20611988565b15610454575090866001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b698c80a3016103aa565b878b91604493887f5a17aa8d0000000000000000000000000000000000000000000000000000000085525252fd5b508a82877f9e51bd5c00000000000000000000000000000000000000000000000000000000835252fd5b6104cc9150823d84116104d2575b6104c48183611128565b81019061139f565b5f610406565b503d6104ba565b8c513d8f823e3d90fd5b5050346102785760206003193601126102785760209061051a6105046110c4565b61050c61141c565b61051581611468565b611529565b9051908152f35b50503461027857816003193601126102785760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50346103485782600319360112610348576020928291338252845220549051908152f35b5050346102785781600319360112610278576020906002549051908152f35b50903461066e578060031936011261066e576105b36110c4565b6105bf816101656114eb565b73ffffffffffffffffffffffffffffffffffffffff6105dc6116a3565b1692833b1561066e57610645935f928385518097819582947fabaa33560000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19081156106655750610659575080f35b61066391506110e7565b005b513d5f823e3d90fd5b5f80fd5b503461066e575f60031936011261066e5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561073057926020935f93610701575b505191168152f35b610722919350843d8611610729575b61071a8183611128565b810190611373565b91846106f9565b503d610710565b83513d5f823e3d90fd5b90503461066e57602060031936011261066e5761078a6107837fffffffff0000000000000000000000000000000000000000000000000000000061077c6110c4565b93166112c3565b3390611868565b156107b65773ffffffffffffffffffffffffffffffffffffffff5f541633146107b657610663906115be565b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b50503461066e57602090602060031936011261066e57356107fd816113b7565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b828210610846576108428686610838828b0383611128565b5191829182611231565b0390f35b835487529586019560019384019390910190610820565b833461066e575f60031936011261066e5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50503461066e57606060031936011261066e57803590602435604435916108b6846113b7565b835f526005906020906005602052865f20548585119081156109cc575b81156109c1575b5061099657506108ea8385611339565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061092d61091888611169565b976109258a51998a611128565b808952611169565b01366020880137835b85811061094a578751806108428982611231565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff610974828b5f2061175f565b90549060031b1c1661098f6109898884611339565b8a611282565b5201610936565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b9050841015886108da565b80871191506108d3565b50503461066e57602060031936011261066e5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361066e5761051a6020926112c3565b50503461066e576020918260031936011261066e57813591610a3f61141c565b610a48836113b7565b825f5260058452815f208054805b610b0b575050825f5260058452815f208054905f815581610aee575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610a72575f8155600101610af8565b5f190180610b6573ffffffffffffffffffffffffffffffffffffffff610b31838661175f565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a384611774565b50610a56565b823461066e575f60031936011261066e573373ffffffffffffffffffffffffffffffffffffffff6001541603610ba457610663336115be565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b3461066e575f60031936011261066e57610be761141c565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b82843461066e57602060031936011261066e5760209135610c74816113b7565b5f5260058252805f20549051908152f35b82843461066e578060031936011261066e57610c9f6110c4565b60249260243567ffffffffffffffff811161066e57610cc4610ccd9136908401611181565b9261050c61141c565b938251610cdf575b6020858551908152f35b610cea92919261141c565b610cf3856113b7565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610d415750505050610cd5565b82610d4c8284611282565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610e53575f91610e36575b5015610e0c579060058b92835f5252610dab818b5f20611988565b15610ddf5790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610d31565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610e4d9150823d84116104d2576104c48183611128565b8c610d90565b8b513d5f823e3d90fd5b82843461066e57602060031936011261066e57610e786110c4565b91610e8283611468565b610e8a6114eb565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b82843461066e57610f21366111fe565b91610f2a61141c565b610f33826113b7565b8251925f5b848110610f4157005b73ffffffffffffffffffffffffffffffffffffffff610f608284611282565b5116845f526005602052610f7681855f20611774565b15610faa5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610f38565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b82843461066e57602060031936011261066e5760209173ffffffffffffffffffffffffffffffffffffffff61100c6110c4565b165f528252805f20549051908152f35b82843461066e57602060031936011261066e57602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b833461066e578060031936011261066e576020906110bb61107b6110c4565b602435611087816113b7565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361066e57565b67ffffffffffffffff81116110fb57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110fb57604052565b67ffffffffffffffff81116110fb5760051b60200190565b9080601f8301121561066e57602090823561119b81611169565b936111a96040519586611128565b81855260208086019260051b82010192831161066e57602001905b8282106111d2575050505090565b813573ffffffffffffffffffffffffffffffffffffffff8116810361066e5781529083019083016111c4565b90604060031983011261066e57600435916024359067ffffffffffffffff821161066e5761122e91600401611181565b90565b60209060206040818301928281528551809452019301915f5b828110611258575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161124a565b80518210156112965760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176110fb5760405251902090565b9190820391821161134657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9081602091031261066e575173ffffffffffffffffffffffffffffffffffffffff8116810361066e5790565b9081602091031261066e5751801515810361066e5790565b801580156113f2575b6113c75750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f205416156113c0565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361143c57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff1680156114c357805f52600460205260405f20546114985750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561150157565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611346576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b90815f52600560205261166c73ffffffffffffffffffffffffffffffffffffffff60405f20921680926001915f520160205260405f2054151590565b15611675575050565b7f80145d72000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa918215611754575f9261171b57505090565b9091506020813d60201161174c575b8161173760209383611128565b8101031261066e5751908116810361066e5790565b3d915061172a565b6040513d5f823e3d90fd5b8054821015611296575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f14611860575f19918281018181116113465782549084820191821161134657818103611815575b505050805480156117e8578201916117ca838361175f565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61184b611825611835938661175f565b90549060031b1c9283928661175f565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806117b2565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f5416911690811461198057604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156117545785935f9561195c575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa918215611754575f9261194657505090565b61122e9250803d106104d2576104c48183611128565b60649291955061197890853d87116107295761071a8183611128565b9490916118f1565b505050600190565b5f8281526001820160205260409020546119da57805490680100000000000000008210156110fb57826119c561183584600180960185558461175f565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220a86eee931a88d4f839c9313a069eb3f4357676a3b7e1548b9f23cf223f177aaf64736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x182551DA EQ PUSH2 0x105C JUMPI DUP2 PUSH4 0x255DAE41 EQ PUSH2 0x101C JUMPI DUP2 PUSH4 0x25C427ED EQ PUSH2 0xFD9 JUMPI DUP2 PUSH4 0x2DA55A1D EQ PUSH2 0xF11 JUMPI DUP2 PUSH4 0x3700F987 EQ PUSH2 0xE5D JUMPI DUP2 PUSH4 0x3E035F9B EQ PUSH2 0xC85 JUMPI DUP2 PUSH4 0x62D53462 EQ PUSH2 0xC54 JUMPI DUP2 PUSH4 0x715018A6 EQ PUSH2 0xBCF JUMPI DUP2 PUSH4 0x79BA5097 EQ PUSH2 0xB6B JUMPI DUP2 PUSH4 0x7C1EC460 EQ PUSH2 0xA1F JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x9D6 JUMPI DUP2 PUSH4 0x8C60EBD0 EQ PUSH2 0x890 JUMPI DUP2 PUSH4 0x8DA5CB5B EQ PUSH2 0x85D JUMPI DUP2 PUSH4 0x94FC4058 EQ PUSH2 0x7DD JUMPI DUP2 PUSH4 0xA89B1128 EQ PUSH2 0x73A JUMPI POP DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x672 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0x599 JUMPI DUP1 PUSH4 0xC482E822 EQ PUSH2 0x57A JUMPI DUP1 PUSH4 0xCE998ABA EQ PUSH2 0x556 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x521 JUMPI DUP1 PUSH4 0xE909C19B EQ PUSH2 0x4E3 JUMPI DUP1 PUSH4 0xEBF3A8D0 EQ PUSH2 0x34C JUMPI DUP1 PUSH4 0xF167A1E6 EQ PUSH2 0x30B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x227 JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x13F JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP3 SWAP2 CALLVALUE PUSH2 0x223 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x223 JUMPI PUSH2 0x159 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x16A DUP2 PUSH2 0x165 PUSH2 0x14EB JUMP JUMPDEST PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x187 PUSH2 0x16A3 JUMP JUMPDEST AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x21F JUMPI PUSH2 0x1F0 SWAP4 DUP6 SWAP3 DUP4 DUP6 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0xFD267F3900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 CALLDATALOAD SWAP2 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x216 JUMPI POP PUSH2 0x203 JUMPI POP RETURN JUMPDEST PUSH2 0x20C SWAP1 PUSH2 0x10E7 JUMP JUMPDEST PUSH2 0x213 JUMPI DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST POP POP REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x278 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x278 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x213 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x213 JUMPI PUSH2 0x296 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x29E PUSH2 0x141C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE DUP3 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x348 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI DUP2 PUSH1 0x20 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x3 DUP6 MSTORE KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x348 JUMPI PUSH2 0x35B CALLDATASIZE PUSH2 0x11FE JUMP JUMPDEST PUSH2 0x363 PUSH2 0x141C JUMP JUMPDEST PUSH2 0x36C DUP3 PUSH2 0x13B7 JUMP JUMPDEST DUP1 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 DUP8 JUMPDEST DUP7 DUP2 LT PUSH2 0x3B5 JUMPI DUP9 DUP1 RETURN JUMPDEST DUP3 PUSH2 0x3C0 DUP3 DUP5 PUSH2 0x1282 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x4D9 JUMPI DUP14 SWAP2 PUSH2 0x4AC JUMPI JUMPDEST POP ISZERO PUSH2 0x482 JUMPI PUSH1 0x5 SWAP1 DUP10 DUP14 MSTORE MSTORE PUSH2 0x41F DUP3 DUP12 DUP14 KECCAK256 PUSH2 0x1988 JUMP JUMPDEST ISZERO PUSH2 0x454 JUMPI POP SWAP1 DUP7 PUSH1 0x1 SWAP3 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 DUP13 DUP1 LOG3 ADD PUSH2 0x3AA JUMP JUMPDEST DUP8 DUP12 SWAP2 PUSH1 0x44 SWAP4 DUP9 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE MSTORE MSTORE REVERT JUMPDEST POP DUP11 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH2 0x4CC SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D2 JUMPI JUMPDEST PUSH2 0x4C4 DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x139F JUMP JUMPDEST PUSH0 PUSH2 0x406 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4BA JUMP JUMPDEST DUP13 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x278 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x278 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x51A PUSH2 0x504 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x50C PUSH2 0x141C JUMP JUMPDEST PUSH2 0x515 DUP2 PUSH2 0x1468 JUMP JUMPDEST PUSH2 0x1529 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x278 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x278 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x348 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0x20 SWAP3 DUP3 SWAP2 CALLER DUP3 MSTORE DUP5 MSTORE KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x278 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x278 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x66E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0x5B3 PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x5BF DUP2 PUSH2 0x165 PUSH2 0x14EB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5DC PUSH2 0x16A3 JUMP JUMPDEST AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x66E JUMPI PUSH2 0x645 SWAP4 PUSH0 SWAP3 DUP4 DUP6 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0xABAA335600000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 CALLDATALOAD SWAP2 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x665 JUMPI POP PUSH2 0x659 JUMPI POP DUP1 RETURN JUMPDEST PUSH2 0x663 SWAP2 POP PUSH2 0x10E7 JUMP JUMPDEST STOP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x66E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x730 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x701 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x722 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x729 JUMPI JUMPDEST PUSH2 0x71A DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1373 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x6F9 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x710 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0x78A PUSH2 0x783 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x77C PUSH2 0x10C4 JUMP JUMPDEST SWAP4 AND PUSH2 0x12C3 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x1868 JUMP JUMPDEST ISZERO PUSH2 0x7B6 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x7B6 JUMPI PUSH2 0x663 SWAP1 PUSH2 0x15BE JUMP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI CALLDATALOAD PUSH2 0x7FD DUP2 PUSH2 0x13B7 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x846 JUMPI PUSH2 0x842 DUP7 DUP7 PUSH2 0x838 DUP3 DUP12 SUB DUP4 PUSH2 0x1128 JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1231 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x820 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x66E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x8B6 DUP5 PUSH2 0x13B7 JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x9CC JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x9C1 JUMPI JUMPDEST POP PUSH2 0x996 JUMPI POP PUSH2 0x8EA DUP4 DUP6 PUSH2 0x1339 JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x92D PUSH2 0x918 DUP9 PUSH2 0x1169 JUMP JUMPDEST SWAP8 PUSH2 0x925 DUP11 MLOAD SWAP10 DUP11 PUSH2 0x1128 JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x1169 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x94A JUMPI DUP8 MLOAD DUP1 PUSH2 0x842 DUP10 DUP3 PUSH2 0x1231 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x974 DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x175F JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x98F PUSH2 0x989 DUP9 DUP5 PUSH2 0x1339 JUMP JUMPDEST DUP11 PUSH2 0x1282 JUMP JUMPDEST MSTORE ADD PUSH2 0x936 JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x8DA JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x8D3 JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x66E JUMPI PUSH2 0x51A PUSH1 0x20 SWAP3 PUSH2 0x12C3 JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0xA3F PUSH2 0x141C JUMP JUMPDEST PUSH2 0xA48 DUP4 PUSH2 0x13B7 JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0xB0B JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0xAEE JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA72 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xAF8 JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0xB65 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xB31 DUP4 DUP7 PUSH2 0x175F JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x1774 JUMP JUMPDEST POP PUSH2 0xA56 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x66E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0xBA4 JUMPI PUSH2 0x663 CALLER PUSH2 0x15BE JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x66E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0xBE7 PUSH2 0x141C JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xC74 DUP2 PUSH2 0x13B7 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0xC9F PUSH2 0x10C4 JUMP JUMPDEST PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x66E JUMPI PUSH2 0xCC4 PUSH2 0xCCD SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1181 JUMP JUMPDEST SWAP3 PUSH2 0x50C PUSH2 0x141C JUMP JUMPDEST SWAP4 DUP3 MLOAD PUSH2 0xCDF JUMPI JUMPDEST PUSH1 0x20 DUP6 DUP6 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xCEA SWAP3 SWAP2 SWAP3 PUSH2 0x141C JUMP JUMPDEST PUSH2 0xCF3 DUP6 PUSH2 0x13B7 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0xD41 JUMPI POP POP POP POP PUSH2 0xCD5 JUMP JUMPDEST DUP3 PUSH2 0xD4C DUP3 DUP5 PUSH2 0x1282 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP10 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xE53 JUMPI PUSH0 SWAP2 PUSH2 0xE36 JUMPI JUMPDEST POP ISZERO PUSH2 0xE0C JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP3 DUP4 PUSH0 MSTORE MSTORE PUSH2 0xDAB DUP2 DUP12 PUSH0 KECCAK256 PUSH2 0x1988 JUMP JUMPDEST ISZERO PUSH2 0xDDF JUMPI SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xD31 JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xE4D SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D2 JUMPI PUSH2 0x4C4 DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST DUP13 PUSH2 0xD90 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH2 0xE78 PUSH2 0x10C4 JUMP JUMPDEST SWAP2 PUSH2 0xE82 DUP4 PUSH2 0x1468 JUMP JUMPDEST PUSH2 0xE8A PUSH2 0x14EB JUMP JUMPDEST SWAP2 DUP3 SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH2 0xF21 CALLDATASIZE PUSH2 0x11FE JUMP JUMPDEST SWAP2 PUSH2 0xF2A PUSH2 0x141C JUMP JUMPDEST PUSH2 0xF33 DUP3 PUSH2 0x13B7 JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xF41 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xF60 DUP3 DUP5 PUSH2 0x1282 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0xF76 DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x1774 JUMP JUMPDEST ISZERO PUSH2 0xFAA JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0xF38 JUMP JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100C PUSH2 0x10C4 JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP5 CALLVALUE PUSH2 0x66E JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x66E JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66E JUMPI PUSH1 0x20 SWAP1 PUSH2 0x10BB PUSH2 0x107B PUSH2 0x10C4 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x1087 DUP2 PUSH2 0x13B7 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x66E JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10FB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10FB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10FB JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x66E JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x119B DUP2 PUSH2 0x1169 JUMP JUMPDEST SWAP4 PUSH2 0x11A9 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1128 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x66E JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x11D2 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x66E JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x11C4 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x66E JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x66E JUMPI PUSH2 0x122E SWAP2 PUSH1 0x4 ADD PUSH2 0x1181 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1258 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x124A JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1296 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10FB JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1346 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x66E JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x66E JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x66E JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x66E JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x13F2 JUMPI JUMPDEST PUSH2 0x13C7 JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x13C0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x143C JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x14C3 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x1498 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLER PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x1501 JUMPI JUMP JUMPDEST PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x1346 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0x166C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND DUP1 SWAP3 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x1675 JUMPI POP POP JUMP JUMPDEST PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1754 JUMPI PUSH0 SWAP3 PUSH2 0x171B JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x174C JUMPI JUMPDEST DUP2 PUSH2 0x1737 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1128 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x66E JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x66E JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x172A JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x1296 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x1860 JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x1346 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x1346 JUMPI DUP2 DUP2 SUB PUSH2 0x1815 JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x17E8 JUMPI DUP3 ADD SWAP2 PUSH2 0x17CA DUP4 DUP4 PUSH2 0x175F JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x184B PUSH2 0x1825 PUSH2 0x1835 SWAP4 DUP7 PUSH2 0x175F JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x175F JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x17B2 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x1980 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x1754 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x195C JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1754 JUMPI PUSH0 SWAP3 PUSH2 0x1946 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x122E SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x4D2 JUMPI PUSH2 0x4C4 DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x1978 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x729 JUMPI PUSH2 0x71A DUP2 DUP4 PUSH2 0x1128 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x18F1 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x19DA JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0x10FB JUMPI DUP3 PUSH2 0x19C5 PUSH2 0x1835 DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x175F JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 PUSH15 0xEE931A88D4F839C9313A069EB3F435 PUSH23 0x76A3B7E1548B9F23CF223F177AAF64736F6C634300081B STOP CALLER ","sourceMap":"446:1537:86:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21:81;446:1537:86;1810:21:81;;;446:1537:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;:::i;:::-;1779:4:82;1721:20;;;:::i;:::-;1779:4;:::i;:::-;446:1537:86;1086:27;;:::i;:::-;446:1537;1086:92;;;;;;;446:1537;;;;;;1086:92;;;;;;446:1537;1086:92;;446:1537;;1086:92;;;446:1537;;;;;;;;;;;;;;;;;1086:92;;;;;;;;;;;;;446:1537;;1086:92;;;;:::i;:::-;446:1537;;1086:92;446:1537;;;;1086:92;446:1537;;;;;;;;1086:92;446:1537;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;;1348:29:81;446:1537:86;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;:::i;:::-;1500:62:49;;:::i;:::-;446:1537:86;;;;;;;1738:24:50;446:1537:86;;;1738:24:50;446:1537:86;;;;1777:43:50;;;;446:1537:86;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;;;;;;8417:16:82;446:1537:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1500:62:49;;:::i;:::-;1515:9:82;;;:::i;:::-;446:1537:86;;;;5232:5:82;446:1537:86;;;5088:13:82;5103:12;;;;;;446:1537:86;;;5117:3:82;5151:11;;;;;:::i;:::-;446:1537:86;;;;;5232:28:82;;;;;;446:1537:86;5232:28:82;446:1537:86;5232:28:82;;;;;;;;;;;;;;;;;5117:3;446:1537:86;;5228:119:82;;5365:9;446:1537:86;;;;;11511:50:72;446:1537:86;;;;11511:50:72;:::i;:::-;446:1537:86;5361:118:82;;5610:31;;;446:1537:86;5610:31:82;;;;;446:1537:86;5088:13:82;;5361:118;5431:33;;;446:1537:86;5431:33:82;;;;;446:1537:86;;5431:33:82;5228:119;5296:36;;;;;;;446:1537:86;5296:36:82;5232:28;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;446:1537:86;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;2554:30:82;446:1537:86;;:::i;:::-;1500:62:49;;:::i;:::-;1962:7:82;;;:::i;:::-;2554:30;:::i;:::-;446:1537:86;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;1311:13:50;446:1537:86;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;6549:10:82;;;;446:1537:86;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;8254:14:82;446:1537:86;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;:::i;:::-;1779:4:82;1721:20;;;:::i;1779:4::-;446:1537:86;1392:27;;:::i;:::-;446:1537;1392:94;;;;;;;446:1537;;;;;;1392:94;;;;;;446:1537;1392:94;;446:1537;;1392:94;;;446:1537;;;;;;;;;;;;;;;;;1392:94;;;;;;;;;;;;;446:1537;;;1392:94;;;;;:::i;:::-;446:1537;1392:94;446:1537;;;;;;;;1392:94;446:1537;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;1810:21:81;446:1537:86;;1810:21:81;;446:1537:86;1810:21:81;;:5;;;446:1537:86;1810:21:81;;;;;;;;;;446:1537:86;1810:21:81;;;446:1537:86;;;;;;;;1810:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;446:1537:86;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;1798:33:33;1762:20;1774:7;446:1537:86;;:::i;:::-;1774:7:33;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;446:1537:86;;;;1820:10:33;2423:21:81;2419:77;;2524:8;;;:::i;2419:77::-;2467:18;;446:1537:86;2467:18:81;446:1537:86;2467:18:81;446:1537:86;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;1515:9:82;;;:::i;:::-;446:1537:86;;7533:9:82;446:1537:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;;;;;1515:9:82;;;;:::i;:::-;446:1537:86;;;7815:9:82;446:1537:86;;;7815:9:82;446:1537:86;;;;;;7859:9:82;;;:28;;;;;446:1537:86;7859:50:82;;;;446:1537:86;7855:115:82;;;8002:9;;;;;:::i;:::-;446:1537:86;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;8027:16:82;8045:6;;;;;;446:1537:86;;;;;;;:::i;8053:3:82:-;446:1537:86;;;;;;;;;5853:18:72;446:1537:86;;;;5853:18:72;:::i;:::-;446:1537:86;;;;;;;8072:44:82;8078:8;;;;:::i;:::-;8072:44;;:::i;:::-;446:1537:86;;8027:16:82;;7855:115;7932:27;;;446:1537:86;7932:27:82;446:1537:86;;;7932:27:82;7859:50;7891:18;;;;;7859:50;;;:28;7872:15;;;;-1:-1:-1;7859:28:82;;446:1537:86;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;1500:62:49;;;:::i;:::-;1515:9:82;;;:::i;:::-;446:1537:86;;;3499:9:82;446:1537:86;;;;;;;3618:237:82;3625:12;;;446:1537:86;;;;;3499:9:82;446:1537:86;;;;;;;;;;;;;;3618:237:82;446:1537:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4148:36:82;446:1537:86;4148:36:82;;446:1537:86;;;;;;;;;;;;;;;;;;;;;;;;;3618:237:82;-1:-1:-1;;446:1537:86;5853:18:72;11832:53;446:1537:86;5853:18:72;;;;:::i;:::-;446:1537:86;;;;;;;3774:35:82;;;446:1537:86;3774:35:82;;11832:53:72;;:::i;:::-;;3618:237:82;;446:1537:86;;;;;;-1:-1:-1;;446:1537:86;;;;;735:10:64;446:1537:86;1311:13:50;446:1537:86;;2339:24:50;2335:96;;2459:6;735:10:64;2459:6:50;:::i;2335:96::-;2386:34;446:1537:86;2386:34:50;735:10:64;446:1537:86;;;;2386:34:50;446:1537:86;;;;;-1:-1:-1;;446:1537:86;;;;;1500:62:49;;:::i;:::-;446:1537:86;;;;2093:20:50;446:1537:86;;2093:20:50;446:1537:86;;;;;;;;;3052:40:49;;;;446:1537:86;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;1515:9:82;;;:::i;:::-;446:1537:86;;6905:9:82;446:1537:86;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;:::i;:::-;;;;;;;;;;;2833:30:82;446:1537:86;;;;;;:::i;:::-;1500:62:49;;;:::i;2833:30:82:-;446:1537:86;;;2874:84:82;;446:1537:86;;;;;;;;;2874:84:82;1500:62:49;;;;;:::i;:::-;1515:9:82;;;:::i;:::-;446:1537:86;;;;5232:5:82;446:1537:86;;;;5103:12:82;;;;;;2874:84;;;;;;5117:3;5151:11;;;;;:::i;:::-;446:1537:86;;;;;5232:28:82;;;;;;446:1537:86;;5232:28:82;;;;;;;;;;;;;446:1537:86;5232:28:82;;;5117:3;446:1537:86;;5228:119:82;;446:1537:86;5365:9:82;446:1537:86;;;;;;11511:50:72;446:1537:86;;;;11511:50:72;:::i;:::-;446:1537:86;5361:118:82;;5610:31;446:1537:86;5610:31:82;;;446:1537:86;5610:31:82;;446:1537:86;5088:13:82;;5361:118;5431:33;;;;446:1537:86;5431:33:82;446:1537:86;;;;5431:33:82;5228:119;5296:36;;;;446:1537:86;5296:36:82;446:1537:86;;5296:36:82;5232:28;;;;;;;;;;;;;;:::i;:::-;;;;;446:1537:86;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;:::i;:::-;1962:7:82;;;;:::i;:::-;4357:20;;:::i;:::-;446:1537:86;;;;;;4388:16:82;446:1537:86;;;;;;;;;;;;;;;;;4511:10:82;446:1537:86;;;;;;;;;;;;;;;4511:10:82;4590:62;;446:1537:86;4590:62:82;;446:1537:86;;;;;;;;;;:::i;:::-;1500:62:49;;;:::i;:::-;1515:9:82;;;:::i;:::-;446:1537:86;;5897:13:82;446:1537:86;5912:12:82;;;;;;446:1537:86;5926:3:82;446:1537:86;5960:8:82;;;;:::i;:::-;446:1537:86;;;;;5987:9:82;446:1537:86;;11832:53:72;446:1537:86;;;;11832:53:72;:::i;:::-;446:1537:86;5983:117:82;;6119:35;;446:1537:86;6119:35:82;;446:1537:86;6119:35:82;;446:1537:86;5897:13:82;;5983:117;6056:29;;;;446:1537:86;6056:29:82;446:1537:86;;;;;6056:29:82;446:1537:86;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;;;7076:16:82;446:1537:86;;;;;;;;7076:41:82;;446:1537:86;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;12473:55:72;446:1537:86;;:::i;:::-;;;1515:9:82;;;:::i;:::-;446:1537:86;;7296:9:82;446:1537:86;;;;;;;;12473:55:72;5197:14;5101:129;-1:-1:-1;446:1537:86;5197:14:72;446:1537:86;;;-1:-1:-1;446:1537:86;;5197:26:72;;5101:129;;12473:55;446:1537:86;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:86;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:33;446:1537:86;;;2303:50:33;;;2320:22;;446:1537:86;;;;;;;2303:50:33;;;446:1537:86;;;;;;;;;;;;;;;2293:61:33;;1931:430;:::o;446:1537:86:-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;9677:202:82:-;9753:14;;:59;;;;9677:202;9749:124;;9677:202;:::o;9749:124::-;9835:27;9766:1;9835:27;;446:1537:86;;9766:1:82;9835:27;9753:59;446:1537:86;;9766:1:82;446:1537:86;9771:16:82;446:1537:86;;;;9766:1:82;446:1537:86;;;9771:41:82;9753:59;;1796:162:49;446:1537:86;1710:6:49;446:1537:86;;735:10:64;1855:23:49;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:64;1901:40:49;446:1537:86;;1710:6:49;1901:40;8977:266:82;446:1537:86;;9051:21:82;;9047:82;;446:1537:86;9070:1:82;446:1537:86;9143:14:82;446:1537:86;;;9070:1:82;446:1537:86;;9139:98:82;;8977:266;:::o;9139:98::-;9194:32;9070:1;9194:32;9143:14;446:1537:86;;9070:1:82;9194:32;9047:82;9095:23;9070:1;9095:23;;9070:1;9095:23;8758:213;6549:10;-1:-1:-1;446:1537:86;6534:14:82;446:1537:86;;;-1:-1:-1;446:1537:86;;8890:14:82;;;8886:79;;8758:213::o;8886:79::-;8927:27;-1:-1:-1;8927:27:82;6534:14;-1:-1:-1;8927:27:82;2970:342;;3077:16;446:1537:86;;-1:-1:-1;;446:1537:86;;;;;;;3077:16:82;446:1537:86;3065:28:82;446:1537:86;-1:-1:-1;446:1537:86;3152:16:82;446:1537:86;;;;-1:-1:-1;446:1537:86;;;;;;;;;;;;;-1:-1:-1;446:1537:86;3206:14:82;446:1537:86;;;;-1:-1:-1;446:1537:86;;3264:41:82;-1:-1:-1;3264:41:82;;2970:342::o;2011:153:50:-;446:1537:86;;;2093:20:50;446:1537:86;;2093:20:50;446:1537:86;2093:20:50;446:1537:86;;;;;;;;;;2093:20:50;446:1537:86;;3052:40:49;2093:20:50;3052:40:49;;2011:153:50:o;9249:200:82:-;;446:1537:86;-1:-1:-1;446:1537:86;9336:9:82;446:1537:86;;12473:55:72;446:1537:86;;-1:-1:-1;446:1537:86;;;12473:55:72;;5197:14;5101:129;-1:-1:-1;446:1537:86;5197:14:72;446:1537:86;;;-1:-1:-1;446:1537:86;;5197:26:72;;5101:129;;12473:55;446:1537:86;9332:111:82;;9249:200;;:::o;9332:111::-;9403:29;-1:-1:-1;9403:29:82;;446:1537:86;;;;-1:-1:-1;9403:29:82;1841:140:86;446:1537;;;1942:32;;446:1537;1942:32;446:1537;1942:32;446:1537;1942:5;446:1537;;1942:32;;;;;;;;;;;1935:39;;1841:140;:::o;1942:32::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;446:1537;;;;;;;;;;;;1841:140;:::o;1942:32::-;;;-1:-1:-1;1942:32:86;;;446:1537;;;1942:32;446:1537;;;;;;;;;;;;;-1:-1:-1;446:1537:86;;-1:-1:-1;446:1537:86;;;-1:-1:-1;446:1537:86;:::o;3071:1368:72:-;;3266:14;;;446:1537:86;;;;;;;;;;;3302:13:72;;;;3298:1135;3302:13;;;-1:-1:-1;;446:1537:86;;;;;;;;;;;;;;;;;;;;3777:23:72;;;3773:378;;3298:1135;446:1537:86;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3266:14:72;4368:11;:::o;446:1537:86:-;;;;;;;;;;3773:378:72;446:1537:86;3840:22:72;3961:23;3840:22;;;:::i;:::-;446:1537:86;;;;;;3961:23:72;;;;;:::i;:::-;446:1537:86;;;;;-1:-1:-1;;446:1537:86;;;;;;;;;;;;;;;;;;;;;;;;;3773:378:72;;;;;3298:1135;4410:12;;;;446:1537:86;4410:12:72;:::o;2546:382:81:-;;446:1537:86;;;;;;;;;2721:15:81;;;2717:57;;446:1537:86;;2858:21:81;446:1537:86;2858:21:81;;;:5;;;:21;:5;;;446:1537:86;2858:21:81;;;;;;;;;446:1537:86;2858:21:81;;;2546:382;446:1537:86;;;;;;2858:63:81;;;;;446:1537:86;2858:63:81;;:21;:63;;446:1537:86;;;;;2915:4:81;446:1537:86;;;;;2858:63:81;;;;;;;446:1537:86;2858:63:81;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;-1:-1:-1;2858:63:81;;;;;;:::i;:21::-;446:1537:86;2858:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o;2497:406:72:-;-1:-1:-1;446:1537:86;;;5197:14:72;;;446:1537:86;;;;;;2581:21:72;;446:1537:86;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2776:14:72;446:1537:86;;;;;;;2832:11:72;:::o;2576:321::-;2874:12;;446:1537:86;2874:12:72;:::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","addPoolsToSet(uint256,address[])":"ebf3a8d0","createPoolSet(address)":"e909c19b","createPoolSet(address,address[])":"3e035f9b","destroyPoolSet(uint256)":"7c1ec460","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAllPoolsInSet(uint256)":"94fc4058","getAuthorizer()":"aaabadc5","getManagerForPoolSet(uint256)":"f167a1e6","getNextPoolSetId()":"c482e822","getPoolCountForSet(uint256)":"62d53462","getPoolSetIdForCaller()":"ce998aba","getPoolSetIdForManager(address)":"25c427ed","getPoolsInSet(uint256,uint256,uint256)":"8c60ebd0","isPoolInSet(address,uint256)":"182551da","isValidPoolSetId(uint256)":"255dae41","owner()":"8da5cb5b","pendingOwner()":"e30c3978","removePoolsFromSet(uint256,address[])":"2da55a1d","renounceOwnership()":"715018a6","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","transferOwnership(address)":"f2fde38b","transferPoolSetOwnership(address)":"3700f987","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"InvalidPoolSetId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolSetManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolSetManager\",\"type\":\"address\"}],\"name\":\"PoolSetManagerNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderIsNotPoolSetManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"PoolSetCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"PoolSetDestroyed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"PoolSetOwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPoolsToSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"destroyPoolSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getAllPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getManagerForPoolSet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextPoolSetId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getPoolCountForSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSetIdForCaller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getPoolSetIdForManager\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isPoolInSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isValidPoolSetId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePoolsFromSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferPoolSetOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"params\":{\"poolSetId\":\"Id of the set involved in the operation\"}}],\"InvalidPoolSetId(uint256)\":[{\"details\":\"This can mean the value is invalid, or it was never created, or it was destroyed.\",\"params\":{\"poolSetId\":\"The id of the invalid set\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolSetManagerNotUnique(address)\":[{\"details\":\"Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\",\"params\":{\"poolSetManager\":\"Address of the manager that is already assigned to another pool set id\"}}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolRemovedFromSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetCreated(uint256,address)\":{\"details\":\"Pools are organized into separate sets, controlled by a manager, which can be changed independently.\",\"params\":{\"initialManager\":\"Address of the pool set manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetDestroyed(uint256,address)\":{\"params\":{\"manager\":\"The address of the set's last manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"details\":\"Managers can only control one pool set. Transfers to existing managers of other sets will revert.\",\"params\":{\"newManager\":\"Address of the new manager\",\"oldManager\":\"Address of the previous manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"addPoolsToSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may add pools to a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"newPools\":\"List of pools to add\",\"poolSetId\":\"Id of the set to which the new pools belong\"}},\"createPoolSet(address)\":{\"details\":\"Convenience function to create a pool set with no initial pools. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\"}},\"createPoolSet(address,address[])\":{\"details\":\"The `newPools` list can be empty, in which case this will only create the set. Pools can then be added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\",\"newPools\":\"Set of pools to add to the set\"}},\"destroyPoolSet(uint256)\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may destroy sets, effectively removing control of any pools in the set from the associated manager. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set being destroyed\"}},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAllPoolsInSet(uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"pools\":\"List of pools\"}},\"getManagerForPoolSet(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\"}},\"getNextPoolSetId()\":{\"returns\":{\"_0\":\"The pool set id that will be used on the next call of `createPoolSet`\"}},\"getPoolCountForSet(uint256)\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction. Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The current number of pools in the set\"}},\"getPoolSetIdForCaller()\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the caller is not a pool set manager\"}},\"getPoolSetIdForManager(address)\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the address given is not a pool set manager\"}},\"getPoolsInSet(uint256,uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`). Reverts if the poolSetId is not valid.\",\"params\":{\"from\":\"Start index\",\"poolSetId\":\"Id of the set containing the pools\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"isPoolInSet(address,uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"pool\":\"Address of the pool to check\",\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the pool is in the given set, false otherwise\"}},\"isValidPoolSetId(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the poolSetId exists\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"removePoolsFromSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may remove pools from a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set to which the pools belong\",\"pools\":\"List of pools to remove from the set\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"details\":\"This contract must be granted permission to set swap and yield protocol fees, but governance can independently grant permission to call the swap and yield fee setters.\",\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\",\"pool\":\"The address of the pool\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"details\":\"This contract must be granted permission to set swap and yield protocol fees, but governance can independently grant permission to call the swap and yield fee setters.\",\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\",\"pool\":\"The address of the pool\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"transferPoolSetOwnership(address)\":{\"details\":\"This is a permissioned function. Only the current manager of a set can call this to set a new manager. Since managers can only control a single set, there is no need to specify the id in the call. Note that this is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts if the new manager address is zero or already the manager of a pool set.\",\"params\":{\"newManager\":\"The address of the new manager\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"InvalidPoolSetId(uint256)\":[{\"notice\":\"Pool set id associated with an operation is invalid.\"}],\"InvalidPoolSetManager()\":[{\"notice\":\"The initial manager of a pool set cannot be zero.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolNotInSet(address,uint256)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolSetManagerNotUnique(address)\":[{\"notice\":\"Pool set managers can only manage a single pool set.\"}],\"SenderIsNotPoolSetManager()\":[{\"notice\":\"Permissioned operations on pools can only be performed by the pool set manager.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"notice\":\"The owner added a pool to the given set.\"},\"PoolRemovedFromSet(address,uint256)\":{\"notice\":\"The owner removed a pool from the given set.\"},\"PoolSetCreated(uint256,address)\":{\"notice\":\"The owner created a new pool set.\"},\"PoolSetDestroyed(uint256,address)\":{\"notice\":\"The owner destroyed a pool set.\"},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"notice\":\"The current manager of a pool set transferred ownership to a new address.\"}},\"kind\":\"user\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"createPoolSet(address)\":{\"notice\":\"Create a new empty set with an initial manager.\"},\"createPoolSet(address,address[])\":{\"notice\":\"Create a new set with an initial manager, optionally initialized with a set of pools.\"},\"destroyPoolSet(uint256)\":{\"notice\":\"Simple way to remove an entire set of pools from control of the helper function.\"},\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAllPoolsInSet(uint256)\":{\"notice\":\"Get the full set of pools from a given set.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"},\"getManagerForPoolSet(uint256)\":{\"notice\":\"Get the manager address associated with a given poolSetId.\"},\"getNextPoolSetId()\":{\"notice\":\"Utility function to predict the next pool set id.\"},\"getPoolCountForSet(uint256)\":{\"notice\":\"Get the number of pools associated with the given set.\"},\"getPoolSetIdForCaller()\":{\"notice\":\"Get the pool set id associated with the caller.\"},\"getPoolSetIdForManager(address)\":{\"notice\":\"Get the pool set id associated with a given manager address.\"},\"getPoolsInSet(uint256,uint256,uint256)\":{\"notice\":\"Get a range of pools from a given set.\"},\"isPoolInSet(address,uint256)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"isValidPoolSetId(uint256)\":{\"notice\":\"Check whether a poolSetId has been created.\"},\"removePoolsFromSet(uint256,address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Set the protocol swap fee for a pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Set the protocol yield fee for a pool.\"},\"transferPoolSetOwnership(address)\":{\"notice\":\"Transfer ownership of a pool set from the current manager to a new manager.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ProtocolFeeHelper.sol\":\"ProtocolFeeHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xdb8365416c9dd9d7be16677c13819065511e9bc7705d6bad85fd52b65d3b3c39\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b90206982d126075b074f0a77ea9cb3ec173ed9fe9e4504b12d6807532b1b7ff\",\"dweb:/ipfs/QmYjKTu4Mrew94sSxfQ8jP4yT7wZFgghSRyB9A2kDdSy8X\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol\":{\"keccak256\":\"0x79b4a52c34d448b3a67d91d37319c08b2a2c45e1ef94c66f1102d1df05f672f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d85fcc28f6c2cfbeefdb307c551d8904f82b6c2fc3e5bc2e5deb111a6a1007f1\",\"dweb:/ipfs/QmWa96ZJajKfwhGemApEoFCpFmStKHaMLUaZwpTQjYjoF3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/PoolHelperCommon.sol\":{\"keccak256\":\"0xc3bd72a44d8479bacbfa4ebca2354b315160e77c378c3dc24d8cd7a41990a83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://fed38b2ea6f2842633d8d555d298adc889605bbeb3ec32728811fbc907989519\",\"dweb:/ipfs/QmX1aEVFkPAZbbSFXn6tfJnaPYWr9TDe9YHCQAiLvgZahg\"]},\"contracts/ProtocolFeeHelper.sol\":{\"keccak256\":\"0xb95fd02c5339c0a2762de1efb3f75e6d0c29b72ffc20a626a09f183f2d3baec1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1dcbfa9f53a907355fc237662f1aa6d4a8090cc41af5dc2b43d0f525a315d82e\",\"dweb:/ipfs/QmUF6cQZWEyQ3YPSA2XmuP4m57e2ha87G2DDaCmYQ7JiER\"]}},\"version\":1}"}},"contracts/ProtocolFeePercentagesProvider.sol":{"ProtocolFeePercentagesProvider":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IBalancerContractRegistry","name":"trustedContractRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"FactoryFeesNotSet","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"factory","type":"address"}],"name":"PoolNotFromFactory","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"UnknownFactory","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"indexed":false,"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"name":"FactorySpecificProtocolFeePercentagesSet","type":"event"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalancerContractRegistry","outputs":[{"internalType":"contract IBalancerContractRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"getFactorySpecificProtocolFeePercentages","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"name":"setFactorySpecificProtocolFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"setProtocolFeePercentagesForPools","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"finalize_allocation":{"entryPoint":510,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"61014060409080825234610169578181610ee1803803809161002182856101fe565b8339810103126101695780516001600160a01b03908181169081810361016957602080940151908382168203610169573060805282156101ef5760a052845163217cb6f560e21b8152918490839060049082905afa9182156101e5575f926101ad575b5060e082905260c05283516313b968ab60e11b81529391168284600481845afa938415610174575f9461017e575b5082600491610100958652835192838092630bc65c9d60e31b82525afa928315610174575f93610140575b50506101209182525190610cab9283610236843960805183610ab4015260a05183818161015f015281816102000152610668015260c05183818160e7015261077e015260e0518381816102500152610373015251826106f40152518161071b0152f35b9080929350813d831161016d575b61015881836101fe565b810103126101695751905f806100dd565b5f80fd5b503d61014e565b82513d5f823e3d90fd5b9093508281813d83116101a6575b61019681836101fe565b81010312610169575192826100b2565b503d61018c565b9091508381813d83116101de575b6101c581836101fe565b810103126101695751828116810361016957905f610084565b503d6101bb565b85513d5f823e3d90fd5b630647140b60e51b5f5260045ffd5b601f909101601f19168101906001600160401b0382119082101761022157604052565b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f35908160e01c918262859689146105d557508163344b12d5146102c4578163851c1bb31461027457816385f2dbd4146102245781638d928af8146101d4578163aaabadc51461010b57508063deb27a7a146100bb5763f2c24ec814610077575f80fd5b346100b75760206003193601126100b7576100986100936109b0565b610bd4565b67ffffffffffffffff6020818351169201511682519182526020820152f35b5f80fd5b50346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100b7575f6003193601126100b75773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa9182156101ca57926020935f9361019b575b505191168152f35b6101bc919350843d86116101c3575b6101b48183610a30565b810190610aee565b915f610193565b503d6101aa565b83513d5f823e3d90fd5b82346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b82346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100b75760206003193601126100b75735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100b7576102bd602092610a89565b9051908152f35b9050346100b757816003193601126100b7576102de6109b0565b60249182359167ffffffffffffffff8084116100b757366023850112156100b75783830135908082116105aa5760058260051b9560209689519461032489830187610a30565b85528888860191830101913683116100b7579880959901905b8282106105785750505061035084610bd4565b905f938783019573ffffffffffffffffffffffffffffffffffffffff80911692817f000000000000000000000000000000000000000000000000000000000000000016965b8b5181101561057657828b8d83851b01015116908d517f6634b753000000000000000000000000000000000000000000000000000000008152828c8201528c8187818a5afa90811561056c575f9161053f575b5015610510578787511691888b5116928a3b156100b7578f517ffd267f3900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83168e82019081526020810192909252905f90829081900360400181838f5af18015610505576104f6575b50893b156100b7578e517fabaa335600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116818d019081526020810193909352915f90839081906040010381838d5af19182156104ec576001926104dd575b5001610395565b6104e690610a1c565b5f6104d6565b8e513d5f823e3d90fd5b6104ff90610a1c565b5f610464565b508f513d5f823e3d90fd5b50915050877ff400ce63000000000000000000000000000000000000000000000000000000005f52525260445ffd5b61055f91508d803d10610565575b6105578183610a30565b810190610a71565b5f6103e8565b503d61054d565b8f513d5f823e3d90fd5b005b819995993573ffffffffffffffffffffffffffffffffffffffff811681036100b757815294989490880190880161033d565b856041857f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b9083346100b75760606003193601126100b7576105f06109b0565b92602435906106237fffffffff000000000000000000000000000000000000000000000000000000006044359216610a89565b73ffffffffffffffffffffffffffffffffffffffff9584517faaabadc5000000000000000000000000000000000000000000000000000000008152602092838289818c7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156109a6579184918a935f92610984575b50606490895194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084528d840152336024840152306044840152165afa90811561097a575f9161095d575b5015610936577f0000000000000000000000000000000000000000000000000000000000000000841161090f577f000000000000000000000000000000000000000000000000000000000000000083116108e85781879160448751809481937fae2733a400000000000000000000000000000000000000000000000000000000835260018c840152169a8b60248301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156108de575f916108c1575b5015610896577f2c3f7d4fd7252aea844c55450b24cac1853ac3a3293a3d0616193b7d854cf0f094506107e083610b1a565b6107e982610b1a565b6107f283610b8f565b6107fb83610b8f565b855191610807836109d3565b67ffffffffffffffff809116835280848401921682528683019060018252895f525f8552875f209351167fffffffffffffffffffffffffffffff000000000000000000000000000000000070ff000000000000000000000000000000006fffffffffffffffff0000000000000000865495518b1b169351151560801b16931617171790558351928352820152a2005b85857fc2a47384000000000000000000000000000000000000000000000000000000005f525260245ffd5b6108d89150823d8411610565576105578183610a30565b876107ae565b85513d5f823e3d90fd5b857fa7849e8e000000000000000000000000000000000000000000000000000000005f525ffd5b857f7e6eb7fb000000000000000000000000000000000000000000000000000000005f525ffd5b857f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b6109749150833d8511610565576105578183610a30565b886106ec565b86513d5f823e3d90fd5b606491925061099f90843d86116101c3576101b48183610a30565b919061069d565b87513d5f823e3d90fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100b757565b6060810190811067ffffffffffffffff8211176109ef57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116109ef57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109ef57604052565b908160209103126100b7575180151581036100b75790565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152610ae8816109d3565b51902090565b908160209103126100b7575173ffffffffffffffffffffffffffffffffffffffff811681036100b75790565b64174876e800808204818102918183041490151715610b625703610b3a57565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff90818111610ba4571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b9073ffffffffffffffffffffffffffffffffffffffff6040925f848051610bfa816109d3565b828152826020820152015216805f525f602052825f2060ff845191610c1e836109d3565b5467ffffffffffffffff808216845281871c16602084015260801c16159384159082015292610c4a5750565b7fa589c09e000000000000000000000000000000000000000000000000000000005f5260045260245ffdfea2646970667358221220675ca2229049ac0d86702a3f8b91328e9f60bdf58f2a73eeebdb46b3de39e33f64736f6c634300081b0033","opcodes":"PUSH2 0x140 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x169 JUMPI DUP2 DUP2 PUSH2 0xEE1 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x21 DUP3 DUP6 PUSH2 0x1FE JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x169 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP2 AND SWAP1 DUP2 DUP2 SUB PUSH2 0x169 JUMPI PUSH1 0x20 DUP1 SWAP5 ADD MLOAD SWAP1 DUP4 DUP3 AND DUP3 SUB PUSH2 0x169 JUMPI ADDRESS PUSH1 0x80 MSTORE DUP3 ISZERO PUSH2 0x1EF JUMPI PUSH1 0xA0 MSTORE DUP5 MLOAD PUSH4 0x217CB6F5 PUSH1 0xE2 SHL DUP2 MSTORE SWAP2 DUP5 SWAP1 DUP4 SWAP1 PUSH1 0x4 SWAP1 DUP3 SWAP1 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1E5 JUMPI PUSH0 SWAP3 PUSH2 0x1AD JUMPI JUMPDEST POP PUSH1 0xE0 DUP3 SWAP1 MSTORE PUSH1 0xC0 MSTORE DUP4 MLOAD PUSH4 0x13B968AB PUSH1 0xE1 SHL DUP2 MSTORE SWAP4 SWAP2 AND DUP3 DUP5 PUSH1 0x4 DUP2 DUP5 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x174 JUMPI PUSH0 SWAP5 PUSH2 0x17E JUMPI JUMPDEST POP DUP3 PUSH1 0x4 SWAP2 PUSH2 0x100 SWAP6 DUP7 MSTORE DUP4 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0xBC65C9D PUSH1 0xE3 SHL DUP3 MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x174 JUMPI PUSH0 SWAP4 PUSH2 0x140 JUMPI JUMPDEST POP POP PUSH2 0x120 SWAP2 DUP3 MSTORE MLOAD SWAP1 PUSH2 0xCAB SWAP3 DUP4 PUSH2 0x236 DUP5 CODECOPY PUSH1 0x80 MLOAD DUP4 PUSH2 0xAB4 ADD MSTORE PUSH1 0xA0 MLOAD DUP4 DUP2 DUP2 PUSH2 0x15F ADD MSTORE DUP2 DUP2 PUSH2 0x200 ADD MSTORE PUSH2 0x668 ADD MSTORE PUSH1 0xC0 MLOAD DUP4 DUP2 DUP2 PUSH1 0xE7 ADD MSTORE PUSH2 0x77E ADD MSTORE PUSH1 0xE0 MLOAD DUP4 DUP2 DUP2 PUSH2 0x250 ADD MSTORE PUSH2 0x373 ADD MSTORE MLOAD DUP3 PUSH2 0x6F4 ADD MSTORE MLOAD DUP2 PUSH2 0x71B ADD MSTORE RETURN JUMPDEST SWAP1 DUP1 SWAP3 SWAP4 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x16D JUMPI JUMPDEST PUSH2 0x158 DUP2 DUP4 PUSH2 0x1FE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x169 JUMPI MLOAD SWAP1 PUSH0 DUP1 PUSH2 0xDD JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x14E JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP4 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1A6 JUMPI JUMPDEST PUSH2 0x196 DUP2 DUP4 PUSH2 0x1FE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x169 JUMPI MLOAD SWAP3 DUP3 PUSH2 0xB2 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x18C JUMP JUMPDEST SWAP1 SWAP2 POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1DE JUMPI JUMPDEST PUSH2 0x1C5 DUP2 DUP4 PUSH2 0x1FE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x169 JUMPI MLOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x169 JUMPI SWAP1 PUSH0 PUSH2 0x84 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1BB JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x221 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH3 0x859689 EQ PUSH2 0x5D5 JUMPI POP DUP2 PUSH4 0x344B12D5 EQ PUSH2 0x2C4 JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x274 JUMPI DUP2 PUSH4 0x85F2DBD4 EQ PUSH2 0x224 JUMPI DUP2 PUSH4 0x8D928AF8 EQ PUSH2 0x1D4 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x10B JUMPI POP DUP1 PUSH4 0xDEB27A7A EQ PUSH2 0xBB JUMPI PUSH4 0xF2C24EC8 EQ PUSH2 0x77 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x98 PUSH2 0x93 PUSH2 0x9B0 JUMP JUMPDEST PUSH2 0xBD4 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x20 DUP2 DUP4 MLOAD AND SWAP3 ADD MLOAD AND DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1CA JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x19B JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1BC SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x1C3 JUMPI JUMPDEST PUSH2 0x1B4 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xAEE JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x193 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1AA JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xB7 JUMPI PUSH2 0x2BD PUSH1 0x20 SWAP3 PUSH2 0xA89 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x2DE PUSH2 0x9B0 JUMP JUMPDEST PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT PUSH2 0xB7 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0xB7 JUMPI DUP4 DUP4 ADD CALLDATALOAD SWAP1 DUP1 DUP3 GT PUSH2 0x5AA JUMPI PUSH1 0x5 DUP3 PUSH1 0x5 SHL SWAP6 PUSH1 0x20 SWAP7 DUP10 MLOAD SWAP5 PUSH2 0x324 DUP10 DUP4 ADD DUP8 PUSH2 0xA30 JUMP JUMPDEST DUP6 MSTORE DUP9 DUP9 DUP7 ADD SWAP2 DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xB7 JUMPI SWAP9 DUP1 SWAP6 SWAP10 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x578 JUMPI POP POP POP PUSH2 0x350 DUP5 PUSH2 0xBD4 JUMP JUMPDEST SWAP1 PUSH0 SWAP4 DUP8 DUP4 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP3 DUP2 PUSH32 0x0 AND SWAP7 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x576 JUMPI DUP3 DUP12 DUP14 DUP4 DUP6 SHL ADD ADD MLOAD AND SWAP1 DUP14 MLOAD PUSH32 0x6634B75300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP13 DUP3 ADD MSTORE DUP13 DUP2 DUP8 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x56C JUMPI PUSH0 SWAP2 PUSH2 0x53F JUMPI JUMPDEST POP ISZERO PUSH2 0x510 JUMPI DUP8 DUP8 MLOAD AND SWAP2 DUP9 DUP12 MLOAD AND SWAP3 DUP11 EXTCODESIZE ISZERO PUSH2 0xB7 JUMPI DUP16 MLOAD PUSH32 0xFD267F3900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP15 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 PUSH0 SWAP1 DUP3 SWAP1 DUP2 SWAP1 SUB PUSH1 0x40 ADD DUP2 DUP4 DUP16 GAS CALL DUP1 ISZERO PUSH2 0x505 JUMPI PUSH2 0x4F6 JUMPI JUMPDEST POP DUP10 EXTCODESIZE ISZERO PUSH2 0xB7 JUMPI DUP15 MLOAD PUSH32 0xABAA335600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 DUP14 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP14 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x4EC JUMPI PUSH1 0x1 SWAP3 PUSH2 0x4DD JUMPI JUMPDEST POP ADD PUSH2 0x395 JUMP JUMPDEST PUSH2 0x4E6 SWAP1 PUSH2 0xA1C JUMP JUMPDEST PUSH0 PUSH2 0x4D6 JUMP JUMPDEST DUP15 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x4FF SWAP1 PUSH2 0xA1C JUMP JUMPDEST PUSH0 PUSH2 0x464 JUMP JUMPDEST POP DUP16 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP2 POP POP DUP8 PUSH32 0xF400CE6300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x55F SWAP2 POP DUP14 DUP1 RETURNDATASIZE LT PUSH2 0x565 JUMPI JUMPDEST PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xA71 JUMP JUMPDEST PUSH0 PUSH2 0x3E8 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x54D JUMP JUMPDEST DUP16 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST STOP JUMPDEST DUP2 SWAP10 SWAP6 SWAP10 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB7 JUMPI DUP2 MSTORE SWAP5 SWAP9 SWAP5 SWAP1 DUP9 ADD SWAP1 DUP9 ADD PUSH2 0x33D JUMP JUMPDEST DUP6 PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP4 CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x5F0 PUSH2 0x9B0 JUMP JUMPDEST SWAP3 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x623 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x44 CALLDATALOAD SWAP3 AND PUSH2 0xA89 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP5 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 DUP10 DUP2 DUP13 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x9A6 JUMPI SWAP2 DUP5 SWAP2 DUP11 SWAP4 PUSH0 SWAP3 PUSH2 0x984 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 DUP10 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP14 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x97A JUMPI PUSH0 SWAP2 PUSH2 0x95D JUMPI JUMPDEST POP ISZERO PUSH2 0x936 JUMPI PUSH32 0x0 DUP5 GT PUSH2 0x90F JUMPI PUSH32 0x0 DUP4 GT PUSH2 0x8E8 JUMPI DUP2 DUP8 SWAP2 PUSH1 0x44 DUP8 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xAE2733A400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x1 DUP13 DUP5 ADD MSTORE AND SWAP11 DUP12 PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8DE JUMPI PUSH0 SWAP2 PUSH2 0x8C1 JUMPI JUMPDEST POP ISZERO PUSH2 0x896 JUMPI PUSH32 0x2C3F7D4FD7252AEA844C55450B24CAC1853AC3A3293A3D0616193B7D854CF0F0 SWAP5 POP PUSH2 0x7E0 DUP4 PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x7E9 DUP3 PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x7F2 DUP4 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x7FB DUP4 PUSH2 0xB8F JUMP JUMPDEST DUP6 MLOAD SWAP2 PUSH2 0x807 DUP4 PUSH2 0x9D3 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP4 MSTORE DUP1 DUP5 DUP5 ADD SWAP3 AND DUP3 MSTORE DUP7 DUP4 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE DUP10 PUSH0 MSTORE PUSH0 DUP6 MSTORE DUP8 PUSH0 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000 PUSH17 0xFF00000000000000000000000000000000 PUSH16 0xFFFFFFFFFFFFFFFF0000000000000000 DUP7 SLOAD SWAP6 MLOAD DUP12 SHL AND SWAP4 MLOAD ISZERO ISZERO PUSH1 0x80 SHL AND SWAP4 AND OR OR OR SWAP1 SSTORE DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE LOG2 STOP JUMPDEST DUP6 DUP6 PUSH32 0xC2A4738400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x8D8 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x565 JUMPI PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP8 PUSH2 0x7AE JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP6 PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP6 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x974 SWAP2 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x565 JUMPI PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP9 PUSH2 0x6EC JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x99F SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x1C3 JUMPI PUSH2 0x1B4 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x69D JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB7 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xB7 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xB7 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0xAE8 DUP2 PUSH2 0x9D3 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xB7 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB7 JUMPI SWAP1 JUMP JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0xB62 JUMPI SUB PUSH2 0xB3A JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0xBA4 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 SWAP3 PUSH0 DUP5 DUP1 MLOAD PUSH2 0xBFA DUP2 PUSH2 0x9D3 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 PUSH1 0xFF DUP5 MLOAD SWAP2 PUSH2 0xC1E DUP4 PUSH2 0x9D3 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP5 MSTORE DUP2 DUP8 SHR AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x80 SHR AND ISZERO SWAP4 DUP5 ISZERO SWAP1 DUP3 ADD MSTORE SWAP3 PUSH2 0xC4A JUMPI POP JUMP JUMPDEST PUSH32 0xA589C09E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH8 0x5CA2229049AC0D86 PUSH17 0x2A3F8B91328E9F60BDF58F2A73EEEBDB46 0xB3 0xDE CODECOPY 0xE3 EXTCODEHASH PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1136:7209:87:-:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1136:7209:87;;;;;;;;;;;;;;;;;;;;;;;922:4:47;1347:46:33;;943:28:45;;939:79;;1028:14;;1136:7209:87;;-1:-1:-1;;;2434:32:87;;1136:7209;1028:14:45;;1136:7209:87;;2434:32;;1136:7209;;2434:32;;;;;;;-1:-1:-1;2434:32:87;;;-1:-1:-1;;1136:7209:87;2477:46;;;2533:50;;1136:7209;;-1:-1:-1;;;2700:101:87;;1136:7209;;;2700:101;1136:7209;2434:32;1136:7209;;2700:101;;;;;;;-1:-1:-1;2700:101:87;;;-1:-1:-1;2668:133:87;;2434:32;2668:133;;;;;1136:7209;;;;;;;;;2844:102;;;;;;;;;-1:-1:-1;2844:102:87;;;-1:-1:-1;2811:135:87;;;;;;1136:7209;;;;;;;;1347:46:33;1136:7209:87;;;;;1028:14:45;1136:7209:87;;;;;;;;;;;;;;;2533:50;1136:7209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2844:102;;;;;;;;;;;;;;;;;:::i;:::-;;;1136:7209;;;;;2844:102;;;;;1136:7209;-1:-1:-1;1136:7209:87;;2844:102;;;;;;1136:7209;;;-1:-1:-1;1136:7209:87;;;;;2700:101;;;;;;;;;;;;;;;;;:::i;:::-;;;1136:7209;;;;;;;2700:101;;;;;;;2434:32;;;;;;;;;;;;;;;;;:::i;:::-;;;1136:7209;;;;;;;;;;;;2434:32;;;;;;;;;;1136:7209;;;-1:-1:-1;1136:7209:87;;;;;939:79:45;994:13;;;-1:-1:-1;994:13:45;;-1:-1:-1;994:13:45;1136:7209:87;;;;;-1:-1:-1;;1136:7209:87;;;;-1:-1:-1;;;;;1136:7209:87;;;;;;;;;;:::o;:::-;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":2480,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":2673,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":2798,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":2608,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_6540":{"entryPoint":2515,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_6542":{"entryPoint":2588,"id":null,"parameterSlots":1,"returnSlots":0},"fun_ensureValidPrecision":{"entryPoint":2842,"id":22328,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":2697,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_getValidatedProtocolFees":{"entryPoint":3028,"id":22281,"parameterSlots":1,"returnSlots":1},"fun_toUint64":{"entryPoint":2959,"id":15026,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":2740}],"7358":[{"length":32,"start":351},{"length":32,"start":512},{"length":32,"start":1640}],"22007":[{"length":32,"start":231},{"length":32,"start":1918}],"22010":[{"length":32,"start":592},{"length":32,"start":883}],"22012":[{"length":32,"start":1780}],"22014":[{"length":32,"start":1819}]},"linkReferences":{},"object":"604060808152600480361015610013575f80fd5b5f35908160e01c918262859689146105d557508163344b12d5146102c4578163851c1bb31461027457816385f2dbd4146102245781638d928af8146101d4578163aaabadc51461010b57508063deb27a7a146100bb5763f2c24ec814610077575f80fd5b346100b75760206003193601126100b7576100986100936109b0565b610bd4565b67ffffffffffffffff6020818351169201511682519182526020820152f35b5f80fd5b50346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100b7575f6003193601126100b75773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa9182156101ca57926020935f9361019b575b505191168152f35b6101bc919350843d86116101c3575b6101b48183610a30565b810190610aee565b915f610193565b503d6101aa565b83513d5f823e3d90fd5b82346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b82346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100b75760206003193601126100b75735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100b7576102bd602092610a89565b9051908152f35b9050346100b757816003193601126100b7576102de6109b0565b60249182359167ffffffffffffffff8084116100b757366023850112156100b75783830135908082116105aa5760058260051b9560209689519461032489830187610a30565b85528888860191830101913683116100b7579880959901905b8282106105785750505061035084610bd4565b905f938783019573ffffffffffffffffffffffffffffffffffffffff80911692817f000000000000000000000000000000000000000000000000000000000000000016965b8b5181101561057657828b8d83851b01015116908d517f6634b753000000000000000000000000000000000000000000000000000000008152828c8201528c8187818a5afa90811561056c575f9161053f575b5015610510578787511691888b5116928a3b156100b7578f517ffd267f3900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83168e82019081526020810192909252905f90829081900360400181838f5af18015610505576104f6575b50893b156100b7578e517fabaa335600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116818d019081526020810193909352915f90839081906040010381838d5af19182156104ec576001926104dd575b5001610395565b6104e690610a1c565b5f6104d6565b8e513d5f823e3d90fd5b6104ff90610a1c565b5f610464565b508f513d5f823e3d90fd5b50915050877ff400ce63000000000000000000000000000000000000000000000000000000005f52525260445ffd5b61055f91508d803d10610565575b6105578183610a30565b810190610a71565b5f6103e8565b503d61054d565b8f513d5f823e3d90fd5b005b819995993573ffffffffffffffffffffffffffffffffffffffff811681036100b757815294989490880190880161033d565b856041857f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b9083346100b75760606003193601126100b7576105f06109b0565b92602435906106237fffffffff000000000000000000000000000000000000000000000000000000006044359216610a89565b73ffffffffffffffffffffffffffffffffffffffff9584517faaabadc5000000000000000000000000000000000000000000000000000000008152602092838289818c7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156109a6579184918a935f92610984575b50606490895194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084528d840152336024840152306044840152165afa90811561097a575f9161095d575b5015610936577f0000000000000000000000000000000000000000000000000000000000000000841161090f577f000000000000000000000000000000000000000000000000000000000000000083116108e85781879160448751809481937fae2733a400000000000000000000000000000000000000000000000000000000835260018c840152169a8b60248301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156108de575f916108c1575b5015610896577f2c3f7d4fd7252aea844c55450b24cac1853ac3a3293a3d0616193b7d854cf0f094506107e083610b1a565b6107e982610b1a565b6107f283610b8f565b6107fb83610b8f565b855191610807836109d3565b67ffffffffffffffff809116835280848401921682528683019060018252895f525f8552875f209351167fffffffffffffffffffffffffffffff000000000000000000000000000000000070ff000000000000000000000000000000006fffffffffffffffff0000000000000000865495518b1b169351151560801b16931617171790558351928352820152a2005b85857fc2a47384000000000000000000000000000000000000000000000000000000005f525260245ffd5b6108d89150823d8411610565576105578183610a30565b876107ae565b85513d5f823e3d90fd5b857fa7849e8e000000000000000000000000000000000000000000000000000000005f525ffd5b857f7e6eb7fb000000000000000000000000000000000000000000000000000000005f525ffd5b857f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b6109749150833d8511610565576105578183610a30565b886106ec565b86513d5f823e3d90fd5b606491925061099f90843d86116101c3576101b48183610a30565b919061069d565b87513d5f823e3d90fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100b757565b6060810190811067ffffffffffffffff8211176109ef57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116109ef57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109ef57604052565b908160209103126100b7575180151581036100b75790565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152610ae8816109d3565b51902090565b908160209103126100b7575173ffffffffffffffffffffffffffffffffffffffff811681036100b75790565b64174876e800808204818102918183041490151715610b625703610b3a57565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff90818111610ba4571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b9073ffffffffffffffffffffffffffffffffffffffff6040925f848051610bfa816109d3565b828152826020820152015216805f525f602052825f2060ff845191610c1e836109d3565b5467ffffffffffffffff808216845281871c16602084015260801c16159384159082015292610c4a5750565b7fa589c09e000000000000000000000000000000000000000000000000000000005f5260045260245ffdfea2646970667358221220675ca2229049ac0d86702a3f8b91328e9f60bdf58f2a73eeebdb46b3de39e33f64736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH3 0x859689 EQ PUSH2 0x5D5 JUMPI POP DUP2 PUSH4 0x344B12D5 EQ PUSH2 0x2C4 JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x274 JUMPI DUP2 PUSH4 0x85F2DBD4 EQ PUSH2 0x224 JUMPI DUP2 PUSH4 0x8D928AF8 EQ PUSH2 0x1D4 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x10B JUMPI POP DUP1 PUSH4 0xDEB27A7A EQ PUSH2 0xBB JUMPI PUSH4 0xF2C24EC8 EQ PUSH2 0x77 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x98 PUSH2 0x93 PUSH2 0x9B0 JUMP JUMPDEST PUSH2 0xBD4 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x20 DUP2 DUP4 MLOAD AND SWAP3 ADD MLOAD AND DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1CA JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x19B JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1BC SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x1C3 JUMPI JUMPDEST PUSH2 0x1B4 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xAEE JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x193 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1AA JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xB7 JUMPI PUSH2 0x2BD PUSH1 0x20 SWAP3 PUSH2 0xA89 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x2DE PUSH2 0x9B0 JUMP JUMPDEST PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT PUSH2 0xB7 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0xB7 JUMPI DUP4 DUP4 ADD CALLDATALOAD SWAP1 DUP1 DUP3 GT PUSH2 0x5AA JUMPI PUSH1 0x5 DUP3 PUSH1 0x5 SHL SWAP6 PUSH1 0x20 SWAP7 DUP10 MLOAD SWAP5 PUSH2 0x324 DUP10 DUP4 ADD DUP8 PUSH2 0xA30 JUMP JUMPDEST DUP6 MSTORE DUP9 DUP9 DUP7 ADD SWAP2 DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xB7 JUMPI SWAP9 DUP1 SWAP6 SWAP10 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x578 JUMPI POP POP POP PUSH2 0x350 DUP5 PUSH2 0xBD4 JUMP JUMPDEST SWAP1 PUSH0 SWAP4 DUP8 DUP4 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP3 DUP2 PUSH32 0x0 AND SWAP7 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x576 JUMPI DUP3 DUP12 DUP14 DUP4 DUP6 SHL ADD ADD MLOAD AND SWAP1 DUP14 MLOAD PUSH32 0x6634B75300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP13 DUP3 ADD MSTORE DUP13 DUP2 DUP8 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x56C JUMPI PUSH0 SWAP2 PUSH2 0x53F JUMPI JUMPDEST POP ISZERO PUSH2 0x510 JUMPI DUP8 DUP8 MLOAD AND SWAP2 DUP9 DUP12 MLOAD AND SWAP3 DUP11 EXTCODESIZE ISZERO PUSH2 0xB7 JUMPI DUP16 MLOAD PUSH32 0xFD267F3900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP15 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 PUSH0 SWAP1 DUP3 SWAP1 DUP2 SWAP1 SUB PUSH1 0x40 ADD DUP2 DUP4 DUP16 GAS CALL DUP1 ISZERO PUSH2 0x505 JUMPI PUSH2 0x4F6 JUMPI JUMPDEST POP DUP10 EXTCODESIZE ISZERO PUSH2 0xB7 JUMPI DUP15 MLOAD PUSH32 0xABAA335600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 DUP14 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP14 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x4EC JUMPI PUSH1 0x1 SWAP3 PUSH2 0x4DD JUMPI JUMPDEST POP ADD PUSH2 0x395 JUMP JUMPDEST PUSH2 0x4E6 SWAP1 PUSH2 0xA1C JUMP JUMPDEST PUSH0 PUSH2 0x4D6 JUMP JUMPDEST DUP15 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x4FF SWAP1 PUSH2 0xA1C JUMP JUMPDEST PUSH0 PUSH2 0x464 JUMP JUMPDEST POP DUP16 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP2 POP POP DUP8 PUSH32 0xF400CE6300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x55F SWAP2 POP DUP14 DUP1 RETURNDATASIZE LT PUSH2 0x565 JUMPI JUMPDEST PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xA71 JUMP JUMPDEST PUSH0 PUSH2 0x3E8 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x54D JUMP JUMPDEST DUP16 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST STOP JUMPDEST DUP2 SWAP10 SWAP6 SWAP10 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB7 JUMPI DUP2 MSTORE SWAP5 SWAP9 SWAP5 SWAP1 DUP9 ADD SWAP1 DUP9 ADD PUSH2 0x33D JUMP JUMPDEST DUP6 PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP4 CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x5F0 PUSH2 0x9B0 JUMP JUMPDEST SWAP3 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x623 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x44 CALLDATALOAD SWAP3 AND PUSH2 0xA89 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP5 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 DUP10 DUP2 DUP13 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x9A6 JUMPI SWAP2 DUP5 SWAP2 DUP11 SWAP4 PUSH0 SWAP3 PUSH2 0x984 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 DUP10 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP14 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x97A JUMPI PUSH0 SWAP2 PUSH2 0x95D JUMPI JUMPDEST POP ISZERO PUSH2 0x936 JUMPI PUSH32 0x0 DUP5 GT PUSH2 0x90F JUMPI PUSH32 0x0 DUP4 GT PUSH2 0x8E8 JUMPI DUP2 DUP8 SWAP2 PUSH1 0x44 DUP8 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xAE2733A400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x1 DUP13 DUP5 ADD MSTORE AND SWAP11 DUP12 PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8DE JUMPI PUSH0 SWAP2 PUSH2 0x8C1 JUMPI JUMPDEST POP ISZERO PUSH2 0x896 JUMPI PUSH32 0x2C3F7D4FD7252AEA844C55450B24CAC1853AC3A3293A3D0616193B7D854CF0F0 SWAP5 POP PUSH2 0x7E0 DUP4 PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x7E9 DUP3 PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x7F2 DUP4 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x7FB DUP4 PUSH2 0xB8F JUMP JUMPDEST DUP6 MLOAD SWAP2 PUSH2 0x807 DUP4 PUSH2 0x9D3 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP4 MSTORE DUP1 DUP5 DUP5 ADD SWAP3 AND DUP3 MSTORE DUP7 DUP4 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE DUP10 PUSH0 MSTORE PUSH0 DUP6 MSTORE DUP8 PUSH0 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000 PUSH17 0xFF00000000000000000000000000000000 PUSH16 0xFFFFFFFFFFFFFFFF0000000000000000 DUP7 SLOAD SWAP6 MLOAD DUP12 SHL AND SWAP4 MLOAD ISZERO ISZERO PUSH1 0x80 SHL AND SWAP4 AND OR OR OR SWAP1 SSTORE DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE LOG2 STOP JUMPDEST DUP6 DUP6 PUSH32 0xC2A4738400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x8D8 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x565 JUMPI PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP8 PUSH2 0x7AE JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP6 PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP6 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x974 SWAP2 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x565 JUMPI PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP9 PUSH2 0x6EC JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x99F SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x1C3 JUMPI PUSH2 0x1B4 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x69D JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB7 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xB7 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xB7 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0xAE8 DUP2 PUSH2 0x9D3 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xB7 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB7 JUMPI SWAP1 JUMP JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0xB62 JUMPI SUB PUSH2 0xB3A JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0xBA4 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 SWAP3 PUSH0 DUP5 DUP1 MLOAD PUSH2 0xBFA DUP2 PUSH2 0x9D3 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 PUSH1 0xFF DUP5 MLOAD SWAP2 PUSH2 0xC1E DUP4 PUSH2 0x9D3 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP5 MSTORE DUP2 DUP8 SHR AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x80 SHR AND ISZERO SWAP4 DUP5 ISZERO SWAP1 DUP3 ADD MSTORE SWAP3 PUSH2 0xC4A JUMPI POP JUMP JUMPDEST PUSH32 0xA589C09E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH8 0x5CA2229049AC0D86 PUSH17 0x2A3F8B91328E9F60BDF58F2A73EEEBDB46 0xB3 0xDE CODECOPY 0xE3 EXTCODEHASH PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1136:7209:87:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1581:26:47;;1136:7209:87;1581:26:47;;;1136:7209:87;;;;;;;;;;;;-1:-1:-1;;1136:7209:87;;;;;3619:34;1136:7209;;:::i;:::-;3619:34;:::i;:::-;1136:7209;;;;;;3768:38;;1136:7209;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1136:7209:87;;;;;;;;;3304:24;1136:7209;;;;;;;;;;;-1:-1:-1;;1136:7209:87;;;;;;1581:26:47;1136:7209:87;;1581:26:47;;1136:7209:87;1581:26:47;;1124:6:45;;;1136:7209:87;1581:26:47;;;;;;;;;;1136:7209:87;1581:26:47;;;1136:7209:87;;;;;;;;1581:26:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;1136:7209:87;;;;;;;;;;;;;;;-1:-1:-1;;1136:7209:87;;;;;;;;;1124:6:45;1136:7209:87;;;;;;;;;;-1:-1:-1;;1136:7209:87;;;;;;;;;3111:22;1136:7209;;;;;;;;;;;-1:-1:-1;;1136:7209:87;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;1136:7209:87;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5862:34;;;;;;:::i;:::-;5912:13;1136:7209;6451:38;;;;1136:7209;;;;;7227:22;;;1136:7209;5907:607;5945:3;1136:7209;;5927:16;;;;;1136:7209;;;;;;;;;;;;;;6168:56;;;;;;1136:7209;6168:56;;;;;;;;;;;;1136:7209;6168:56;;;5945:3;1136:7209;;6164:151;;1136:7209;;;;;;;;;7227:84;;;;;;1136:7209;;;7227:84;;1136:7209;;;7227:84;;;1136:7209;;;;;;;;;;;-1:-1:-1;;1136:7209:87;;7227:84;;;1136:7209;7227:84;1136:7209;-1:-1:-1;1136:7209:87;7227:84;;;;;;;;5945:3;7321:86;;;;;;1136:7209;;;7321:86;;1136:7209;;;;7321:86;;;1136:7209;;;;;;;;;;;;;;;;;;;7321:86;;;;;;;;;;;1136:7209;7321:86;;;5945:3;;1136:7209;5912:13;;7321:86;;;;:::i;:::-;;;;;1136:7209;;;;;;;;;7227:84;;;;:::i;:::-;;;;;1136:7209;;;;;;;;;;6164:151;6260:40;;;;;;1136:7209;6260:40;1136:7209;;;;6260:40;6168:56;;;;;;;-1:-1:-1;6168:56:87;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;1136:7209;;;;;;;;;5927:16;1136:7209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1136:7209:87;;;;;;;:::i;:::-;;;;;1762:20:33;1774:7;1136:7209:87;;1774:7:33;;1762:20;:::i;:::-;1136:7209:87;;;;;1336:22:45;;1136:7209:87;1336:6:45;;;;;;;1136:7209:87;1336:22:45;;;;;;;;;;;;1136:7209:87;1336:22:45;;;1136:7209:87;;;;;;1336:64:45;;;;;1136:7209:87;1336:64:45;;;;;1136:7209:87;1820:10:33;1136:7209:87;;;;1394:4:45;1136:7209:87;;;;;1336:64:45;;;;;;;1136:7209:87;1336:64:45;;;1136:7209:87;1797:34:33;;1793:90;;4208:29:87;4180:57;;4176:152;;4371:30;4342:59;;4338:155;;1136:7209;;;;;;4547:85;;;;1136:7209;4547:85;;1136:7209;4547:85;;;1136:7209;;;;;;;;4547:24;1136:7209;4547:85;;;;;;;1136:7209;4547:85;;;1136:7209;;;4543:155;;5253:104;4776:25;;;;;:::i;:::-;4834:26;;;:::i;:::-;5074:36;;;:::i;:::-;5152:37;;;:::i;:::-;1136:7209;;;;;;:::i;:::-;;;;;;;5013:224;;;;1136:7209;;;;5013:224;;;1136:7209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5253:104;1136:7209;4543:155;4664:23;;;1136:7209;4664:23;1136:7209;;;4664:23;4547:85;;;;;;;;;;;;;;:::i;:::-;;;;;1136:7209;;;;;;;;;4338:155;4424:58;;1136:7209;4424:58;1136:7209;4424:58;4176:152;4260:57;;1136:7209;4260:57;1136:7209;4260:57;1793:90:33;1854:18;;1136:7209:87;1854:18:33;1136:7209:87;1854:18:33;1336:64:45;;;;;;;;;;;;;;:::i;:::-;;;;;1136:7209:87;;;;;;;;;1336:22:45;1136:7209:87;1336:22:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;1136:7209:87;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;1931:430:33:-;1136:7209:87;;;2303:50:33;;;2320:22;;1136:7209:87;;;;;;;2303:50:33;;;;;;:::i;:::-;1136:7209:87;2293:61:33;;1931:430;:::o;1136:7209:87:-;;;;;;;;;;;;;;;;;;:::o;7594:749::-;19669:4:32;;;;;;;;;;;;;;;;;;8195:74:87;8191:146;;7594:749::o;8191:146::-;8292:34;-1:-1:-1;8292:34:87;;-1:-1:-1;8292:34:87;19669:4:32;;-1:-1:-1;19669:4:32;;;;;-1:-1:-1;19669:4:32;13296:213:71;1136:7209:87;13374:24:71;;;;13370:103;;1136:7209:87;13296:213:71;:::o;13370:103::-;13421:41;;;13452:2;13421:41;1136:7209:87;;;;13421:41:71;;6526:313:87;;1136:7209;;;-1:-1:-1;1136:7209:87;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1136:7209:87;-1:-1:-1;1136:7209:87;;;-1:-1:-1;1136:7209:87;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;6731:102;;;6526:313;:::o;6731:102::-;6796:26;-1:-1:-1;6796:26:87;;1136:7209;;-1:-1:-1;6796:26:87"},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getBalancerContractRegistry()":"deb27a7a","getFactorySpecificProtocolFeePercentages(address)":"f2c24ec8","getProtocolFeeController()":"85f2dbd4","getVault()":"8d928af8","setFactorySpecificProtocolFeePercentages(address,uint256,uint256)":"00859689","setProtocolFeePercentagesForPools(address,address[])":"344b12d5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IBalancerContractRegistry\",\"name\":\"trustedContractRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"FactoryFeesNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"PoolNotFromFactory\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"UnknownFactory\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"FactorySpecificProtocolFeePercentagesSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBalancerContractRegistry\",\"outputs\":[{\"internalType\":\"contract IBalancerContractRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"getFactorySpecificProtocolFeePercentages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setFactorySpecificProtocolFeePercentages\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"setProtocolFeePercentagesForPools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"FactoryFeesNotSet(address)\":[{\"details\":\"This error can by thrown by `getFactorySpecificProtocolFeePercentages` or `setProtocolFeePercentagesForPools`, as both require that valid fee percentages have been set. You need to set the factory fees before you can apply them to pools from that factory.\",\"params\":{\"factory\":\"The factory address where fees have not been set\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"PoolNotFromFactory(address,address)\":[{\"details\":\"Occurs when one of the pools supplied to `setProtocolFeePercentagesForPools` is not from the given factory.\",\"params\":{\"factory\":\"The address of the factory\",\"pool\":\"The address of the unrecognized pool\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"UnknownFactory(address)\":[{\"params\":{\"factory\":\"The address of the unknown factory\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"FactorySpecificProtocolFeePercentagesSet(address,uint256,uint256)\":{\"params\":{\"factory\":\"The pool factory\",\"protocolSwapFeePercentage\":\"The protocol swap fee percentage intended for pools from this factory\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage intended for pools from this factory\"}}},\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getBalancerContractRegistry()\":{\"returns\":{\"_0\":\"The address of the Balancer contract registry\"}},\"getFactorySpecificProtocolFeePercentages(address)\":{\"params\":{\"factory\":\"The address of the factory\"},\"returns\":{\"protocolSwapFeePercentage\":\"The protocol swap fee percentage set for that factory\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage set for that factory\"}},\"getProtocolFeeController()\":{\"returns\":{\"_0\":\"The address of the fee controller\"}},\"getVault()\":{\"details\":\"This function is virtual to allow for overriding in derived contracts which also inherits contracts with `getVault()` definition.\",\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"setFactorySpecificProtocolFeePercentages(address,uint256,uint256)\":{\"details\":\"This is a permissioned call. After the fee percentages have been set, and governance has granted this contract permission to set fee percentages on pools, anyone can call `setProtocolFeePercentagesForPools` to update the fee percentages on a set of pools from that factory.\",\"params\":{\"factory\":\"The address of the factory\",\"protocolSwapFeePercentage\":\"The new protocol swap fee percentage\",\"protocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setProtocolFeePercentagesForPools(address,address[])\":{\"details\":\"This call is permissionless. Anyone can update the fee percentages, once they're set by governance. Note that governance must also grant this contract permission to set protocol fee percentages on pools.\",\"params\":{\"factory\":\"The address of the factory\",\"pools\":\"The pools whose fees will be set according to `setFactorySpecificProtocolFeePercentages`\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"FactoryFeesNotSet(address)\":[{\"notice\":\"`setFactorySpecificProtocolFeePercentages` has not been called for this factory address.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"PoolNotFromFactory(address,address)\":[{\"notice\":\"The given pool is not from the expected factory.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"UnknownFactory(address)\":[{\"notice\":\"Fees can only be set on recognized factories (i.e., registered in the `BalancerContractRegistry`).\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The protocol fee controller was configured with an incorrect Vault address.\"}]},\"events\":{\"FactorySpecificProtocolFeePercentagesSet(address,uint256,uint256)\":{\"notice\":\"Protocol fee percentages have been set for the given factory.\"}},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getBalancerContractRegistry()\":{\"notice\":\"Get the address of the `BalancerContractRegistry` used to validate factory contracts.\"},\"getFactorySpecificProtocolFeePercentages(address)\":{\"notice\":\"Query the protocol fee percentages for a given factory.\"},\"getProtocolFeeController()\":{\"notice\":\"Get the address of the `ProtocolFeeController` used to set fees.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"setFactorySpecificProtocolFeePercentages(address,uint256,uint256)\":{\"notice\":\"Assign intended protocol fee percentages for a given factory.\"},\"setProtocolFeePercentagesForPools(address,address[])\":{\"notice\":\"Update the protocol fees for a set of pools from a given factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ProtocolFeePercentagesProvider.sol\":\"ProtocolFeePercentagesProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0x6f8c558b0520faae0c4576f30225b5a97821a4cd210878a0ba10c102a2f753f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b40aa7a5ee39fa2e297c684fd29ad45d866f1fc61cd997120a417b02a4d908aa\",\"dweb:/ipfs/QmYP5pQAF7SDLgy3aerqfnc4VwdmfQix2jcQUNL3o83BY9\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xcb2fa9725bb158d1bd24984d39da7b69628d390740ef13b5578ecab903e0be0b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://fa02bc7433e3c93261e6644049bc2bddb474a7071874eaad4b4150af1afbb43f\",\"dweb:/ipfs/QmR2jYnyT7zg3wWbn4qpUhzpMoYVd9iZ7HsE1FNJqrFtUM\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0x4e6eceea41f31faa3f4228315c1d54c0d6f7befaaa1d158775e0b2a860c9de12\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6fc6d998ca7860d5c8f08a4fc045d5d1ebdcb4c777e934f6cd081d05252a024f\",\"dweb:/ipfs/QmbsPGHVrBdVfpcWkm3BNWPQXUZWbvPb6VGiEbf5ezvAmj\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x11ec2b653633cbcc6a99d426df178007a98d1154a39a1ada961239be39eec069\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://40eed42ee57746bbf4711bb4aee856328cd70cc02aa3ff05e8dd719868fcd524\",\"dweb:/ipfs/QmX5uAoB9W6UUehgSRvVW6hun3XE53eZwKsm4kHVqtJs8C\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"contracts/ProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xfeb8192a52018fbe8fa3df7398ca90b42487e1ae128473ac60895740a10d97c7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://05898cb2e0b82b2910aa891d1657be38189c180590f949145ab61b7cbd8552f7\",\"dweb:/ipfs/QmSnHhbmrCBhnjsSHbVPswBm7NHsUHq5zzQV2wqZqokoqA\"]}},\"version\":1}"}},"contracts/ProtocolFeeSweeper.sol":{"ProtocolFeeSweeper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"feeRecipient","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BurnerDidNotConsumeAllowance","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"InvalidFeeRecipient","type":"error"},{"inputs":[],"name":"InvalidProtocolFeeBurner","type":"error"},{"inputs":[],"name":"InvalidTargetToken","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerAlreadyAdded","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerNotAdded","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"UnsupportedProtocolFeeBurner","type":"error"},{"inputs":[],"name":"UnwrapIsNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"feeRecipient","type":"address"}],"name":"FeeRecipientSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"feeTokenAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeSwept","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TargetTokenSet","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"contract IProtocolFeeBurner","name":"protocolFeeBurner","type":"address"}],"name":"addProtocolFeeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTargetToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"isApprovedProtocolFeeBurner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"feeTokens","type":"address[]"}],"name":"recoverProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeBurner","name":"protocolFeeBurner","type":"address"}],"name":"removeProtocolFeeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feeRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"targetToken","type":"address"}],"name":"setTargetToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"contract IProtocolFeeBurner","name":"feeBurner","type":"address"}],"name":"sweepProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC4626","name":"feeToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"contract IProtocolFeeBurner","name":"feeBurner","type":"address"}],"name":"sweepProtocolFeesForWrappedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c0346100fe57601f611ced38819003918201601f19168301916001600160401b038311848410176101025780849260409485528339810103126100fe5780516001600160a01b0391828216908183036100fe57602001519283168093036100fe5730608052156100ef5760a05280156100e057600180546001600160a01b03191682179055604051907fbf9a9534339a9d6b81696e05dcfb614b7dc518a31d48be3cfb757988381fb3235f80a2611bd6908161011782396080518161173f015260a051818181610d3b01528181610e25015281816117cd01526118f40152f35b630ed1b8b360e31b5f5260045ffd5b630647140b60e51b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe604060808152600490813610156100a0575b361561007957346100795790602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600f60248201527f4e6f7420696d706c656d656e74656400000000000000000000000000000000006044820152fd5b507ff2238896000000000000000000000000000000000000000000000000000000005f525ffd5b5f3560e01c80631b66cb00146115a45780634ccb20c01461157057806380db0d511461153d578063851c1bb3146114ed57806385f2dbd4146114b457806388f6d2a414610e495780638d928af814610df95780639c5cee9b14610db0578063aaabadc514610ce7578063b0edcc5314610ae1578063b11f061e14610a0b578063b974699514610302578063e20c482f146101fe5763e74b981b036100115750346101fa5760206003193601126101fa57610158611630565b6001549073ffffffffffffffffffffffffffffffffffffffff9061017e82841630611872565b169182156101d457507fffffffffffffffffffffffff00000000000000000000000000000000000000001681176001557fbf9a9534339a9d6b81696e05dcfb614b7dc518a31d48be3cfb757988381fb3235f80a2005b7f768dc598000000000000000000000000000000000000000000000000000000005f525ffd5b5f80fd5b50346101fa5760206003193601126101fa57610218611630565b73ffffffffffffffffffffffffffffffffffffffff9061023c826001541630611872565b1691825f52600260205260ff825f2054166102d75782156102b15750815f5260026020525f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f0ef09fc346b7c2cae78d9a37ed785840e7d3c6072022cd8c41c3b37a239b7fd15f80a2005b7f31ec2736000000000000000000000000000000000000000000000000000000005f525ffd5b90507f6fe47af6000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101fa5760a06003193601126101fa5761031d611630565b602490813573ffffffffffffffffffffffffffffffffffffffff948582168083036101fa5761034a611653565b926103536119fd565b610361886001541630611872565b8095885f9516918261099d575b84517f70a08231000000000000000000000000000000000000000000000000000000009a8b8252308b83015260209586838681845afa928315610993575f93610964575b50816103bc61178a565b1693843b156101fa578c9489517f8f4ab9ca000000000000000000000000000000000000000000000000000000008152848d1680978201525f81898183865af1801561095a57610947575b50803b15610727578a868f606490838e5195869485937fb53a70b2000000000000000000000000000000000000000000000000000000008552840152308d8401528860448401525af1801561093d57610929575b508c9d89519d8e91825230910152878d8781855afa9c8d156108aa578a9d6108fa575b50838d03938d85116108cf57849d036104b7575b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b86156108b45750885482169281840361051d57505050505050505050806104f657506104e39350611abb565b5f80808080808080808080808080610492565b807fca9e3a1e00000000000000000000000000000000000000000000000000000000869252fd5b9091929395979a949698809c9a50610782575b505088517f095ea7b30000000000000000000000000000000000000000000000000000000081890181815273ffffffffffffffffffffffffffffffffffffffff8916838901908152602081018c90529192918a918e916105bc9085906040015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018652856116d3565b83519082895af18c513d82610764575b50501561072b575b5050806001541692863b15610727578951947fde557a320000000000000000000000000000000000000000000000000000000086528c8601521696878585015260448401526064830152604435608483015260a482015260643560c4820152868160e48183875af1801561071d578493929188916106fe575b5050604490865195869384927fdd62ed3e000000000000000000000000000000000000000000000000000000008452308c8501528301525afa9283156106f5575083926106c7575b50506106a25750506104e3565b7fc5bc8d51000000000000000000000000000000000000000000000000000000008152fd5b90809250813d83116106ee575b6106de81836116d3565b810103126101fa57515f80610695565b503d6106d4565b513d85823e3d90fd5b61070b9192939450611676565b61071957908291865f61064d565b8580fd5b86513d89823e3d90fd5b8a80fd5b61075761075d928c51908b82015289898201528d604482015260448152610751816116b7565b86611b19565b84611b19565b5f806105d4565b90915061077a57508285163b15155b5f806105cc565b600114610773565b8a517f38d52e0f000000000000000000000000000000000000000000000000000000008152919c9b9a9950935087818c818f5afa9081156108aa57889183918c9161086b575b50169389519c8d917fba0876520000000000000000000000000000000000000000000000000000000083528d8301523088830152306044830152818c5a92606493f19a8b156108615798809a9b899a829161082c575b509850859050610590610530565b995050508688813d831161085a575b61084581836116d3565b810103126101fa5796518897908a908861081e565b503d61083b565b88513d8b823e3d90fd5b928092508391503d83116108a3575b61088481836116d3565b8101031261089f5751818116810361089f578188915f6107c8565b8980fd5b503d61087a565b89513d8c823e3d90fd5b9a50505098505050505050506108ca9350611abb565b6104e3565b7f4e487b71000000000000000000000000000000000000000000000000000000008b5260118f52868bfd5b909c508781813d8311610922575b61091281836116d3565b810103126101fa57519b5f61047e565b503d610908565b6109338b91611676565b61089f575f61045b565b8a513d8d823e3d90fd5b610952919b50611676565b5f995f610407565b8b513d5f823e3d90fd5b9092508681813d831161098c575b61097c81836116d3565b810103126101fa5751915f6103b2565b503d610972565b88513d5f823e3d90fd5b825f52600260205260ff855f2054165f146109e157895f541661036e57887f8562eb45000000000000000000000000000000000000000000000000000000005f525ffd5b5090877f38553f6c000000000000000000000000000000000000000000000000000000005f52525ffd5b50346101fa5760206003193601126101fa57610a25611630565b73ffffffffffffffffffffffffffffffffffffffff90610a49826001541630611872565b1691825f52600260205260ff825f20541615610ab65750815f5260026020525f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690557f0ed3ea501d1a23f23a7dc56c2d33e1e5a6a97694c707ef67b1e0159f239746bf5f80a2005b90507fbca5ab34000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101fa57602090816003193601126101fa5780359267ffffffffffffffff8085116101fa57366023860112156101fa5784830135936024918511610cbb576005958560051b845196610b38848301896116d3565b8752602483880191830101913683116101fa57602401905b828210610c8f57505050610b626119fd565b73ffffffffffffffffffffffffffffffffffffffff9460019580600154163303610c68575f97875b610bb3575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b8251891015610c635781848a831b8501015116988651997f70a08231000000000000000000000000000000000000000000000000000000008b5230898c0152858b8881845afa8015610993578a9b5f91610c2e575b5090818b9392610c1c575b50500198610b8a565b610c27913390611a52565b5f80610c13565b8093929b50878092503d8311610c5c575b610c4981836116d3565b810103126101fa5790518a99908a610c08565b503d610c3f565b610492565b857f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b813573ffffffffffffffffffffffffffffffffffffffff811681036101fa578152908301908301610b50565b6041847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101fa575f6003193601126101fa5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa918215610da657926020935f93610d77575b505191168152f35b610d98919350843d8611610d9f575b610d9081836116d3565b810190611846565b915f610d6f565b503d610d86565b83513d5f823e3d90fd5b50346101fa5760206003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff610de2611630565b165f526002825260ff815f20541690519015158152f35b50346101fa575f6003193601126101fa576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346101fa5760a06003193601126101fa57610e63611630565b90602491823573ffffffffffffffffffffffffffffffffffffffff8082168092036101fa57610e90611653565b94610e996119fd565b610ea7826001541630611872565b815f9616918215159384611446575b8651917f70a082310000000000000000000000000000000000000000000000000000000096878452308b85015260209687858781875afa94851561143c575f9561140d575b5082610f0561178a565b1694853b156101fa578c958b517f8f4ab9ca00000000000000000000000000000000000000000000000000000000815285851680988201525f818a8183865af18015611403576113f0575b50803b156113ec578c878f6064908f84905195869485937fb53a70b20000000000000000000000000000000000000000000000000000000085528401528d30908401528b60448401525af180156113e257908d916113ca575b50508a51998a52308d8b0152888a8881885afa998a156113c0578c9a611391575b50808a0399808b116113655703611000575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b1561134c57508854811690828203611039578a8a7fca9e3a1e000000000000000000000000000000000000000000000000000000008152fd5b88517f38d52e0f00000000000000000000000000000000000000000000000000000000815287818d81875afa90811561093d57889183918d91611311575b50169860648d8d8d5197889485937fba087652000000000000000000000000000000000000000000000000000000008552840152308b8401523060448401525af19283156108aa578a936112e2575b50848951888c8b8a611155856111298b878301947f095ea7b3000000000000000000000000000000000000000000000000000000009a8b875284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866116d3565b828551925af18c513d826112c6575b50501561128d575b50506001541691853b1561089f578851937fde557a320000000000000000000000000000000000000000000000000000000085528b850152878585015260448401526064830152604435608483015260a482015260643560c4820152868160e48183875af1801561071d57849392918891611272575b5050604490865195869384927fdd62ed3e000000000000000000000000000000000000000000000000000000008452308c8501528301525afa9283156106f557508392611244575b50506106a25750505b5f8080808080808080808080610492565b90809250813d831161126b575b61125b81836116d3565b810103126101fa57515f8061122a565b503d611251565b61127f9192939450611676565b61071957908291865f6111e2565b6112b96112bf928c51908b82015289898201528d6044820152604481526112b3816116b7565b8b611b19565b89611b19565b5f8061116c565b9091506112da5750893b15155b5f80611164565b6001146112d3565b9092508681813d831161130a575b6112fa81836116d3565b810103126101fa5751915f6110c6565b503d6112f0565b928092508391503d8311611345575b61132a81836116d3565b8101031261072757518181168103610727578188915f611077565b503d611320565b969850509550505050506113609350611abb565b611233565b50868c60118f7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b9099508881813d83116113b9575b6113a981836116d3565b810103126101fa5751985f610fca565b503d61139f565b8b513d8e823e3d90fd5b6113d390611676565b6113de578b5f610fa9565b8b80fd5b8c513d8f823e3d90fd5b8c80fd5b6113fb919d50611676565b5f9b5f610f50565b8d513d5f823e3d90fd5b9094508781813d8311611435575b61142581836116d3565b810103126101fa5751935f610efb565b503d61141b565b8a513d5f823e3d90fd5b835f52600260205260ff875f2054165f1461148a57815f5416610eb657887f8562eb45000000000000000000000000000000000000000000000000000000005f525ffd5b82848a7f38553f6c000000000000000000000000000000000000000000000000000000005f52525ffd5b50346101fa575f6003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff6114e561178a565b915191168152f35b5090346101fa5760206003193601126101fa5735907fffffffff00000000000000000000000000000000000000000000000000000000821682036101fa57611536602092611714565b9051908152f35b50346101fa575f6003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50346101fa575f6003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b346101fa5760206003193601126101fa576115bd611630565b73ffffffffffffffffffffffffffffffffffffffff906115e1826001541630611872565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f557f873950c2ac59c570001b99d815ffb260542df229d07132922e2e6f9941fd3da65f80a2005b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101fa57565b6084359073ffffffffffffffffffffffffffffffffffffffff821682036101fa57565b67ffffffffffffffff811161168a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761168a57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761168a57604052565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff82111761168a5760405251902090565b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561183b575f9261180257505090565b9091506020813d602011611833575b8161181e602093836116d3565b810103126101fa575190811681036101fa5790565b3d9150611811565b6040513d5f823e3d90fd5b908160209103126101fa575173ffffffffffffffffffffffffffffffffffffffff811681036101fa5790565b9073ffffffffffffffffffffffffffffffffffffffff8091163303611895575050565b6118c17fffffffff000000000000000000000000000000000000000000000000000000005f3516611714565b91604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa90811561183b578460649287955f916119e0575b5060405196879586947f9be2a8840000000000000000000000000000000000000000000000000000000086526004860152336024860152166044840152165afa91821561183b575f926119a9575b50501561198157565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116119d9575b6119c081836116d3565b810103126101fa575180151581036101fa575f80611978565b503d6119b6565b6119f79150863d8811610d9f57610d9081836116d3565b5f61192a565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c611a2a576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff929092166024830152604480830193909352918152611ab991611ab46064836116d3565b611b19565b565b919060407fd6b9382ec1786c32610e376e8ee8f2f16abeda4ace3b6276ac958193c75bbbc89173ffffffffffffffffffffffffffffffffffffffff80918160015416611b08878284611a52565b8451968752602087015216941692a3565b905f602091828151910182855af11561183b575f513d611b97575073ffffffffffffffffffffffffffffffffffffffff81163b155b611b555750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415611b4e56fea26469706673582212205480978df623c804a8b886384f67d95375c26dc77bed8f7ed539d94969b947c064736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0xFE JUMPI PUSH1 0x1F PUSH2 0x1CED CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x102 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0xFE JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0xFE JUMPI PUSH1 0x20 ADD MLOAD SWAP3 DUP4 AND DUP1 SWAP4 SUB PUSH2 0xFE JUMPI ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xEF JUMPI PUSH1 0xA0 MSTORE DUP1 ISZERO PUSH2 0xE0 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP3 OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xBF9A9534339A9D6B81696E05DCFB614B7DC518A31D48BE3CFB757988381FB323 PUSH0 DUP1 LOG2 PUSH2 0x1BD6 SWAP1 DUP2 PUSH2 0x117 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x173F ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0xD3B ADD MSTORE DUP2 DUP2 PUSH2 0xE25 ADD MSTORE DUP2 DUP2 PUSH2 0x17CD ADD MSTORE PUSH2 0x18F4 ADD MSTORE RETURN JUMPDEST PUSH4 0xED1B8B3 PUSH1 0xE3 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0xA0 JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x79 JUMPI CALLVALUE PUSH2 0x79 JUMPI SWAP1 PUSH1 0x20 PUSH1 0x64 SWAP3 MLOAD SWAP2 PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420696D706C656D656E7465640000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST POP PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1B66CB00 EQ PUSH2 0x15A4 JUMPI DUP1 PUSH4 0x4CCB20C0 EQ PUSH2 0x1570 JUMPI DUP1 PUSH4 0x80DB0D51 EQ PUSH2 0x153D JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x14ED JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x14B4 JUMPI DUP1 PUSH4 0x88F6D2A4 EQ PUSH2 0xE49 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0xDF9 JUMPI DUP1 PUSH4 0x9C5CEE9B EQ PUSH2 0xDB0 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB0EDCC53 EQ PUSH2 0xAE1 JUMPI DUP1 PUSH4 0xB11F061E EQ PUSH2 0xA0B JUMPI DUP1 PUSH4 0xB9746995 EQ PUSH2 0x302 JUMPI DUP1 PUSH4 0xE20C482F EQ PUSH2 0x1FE JUMPI PUSH4 0xE74B981B SUB PUSH2 0x11 JUMPI POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x158 PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x17E DUP3 DUP5 AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND SWAP2 DUP3 ISZERO PUSH2 0x1D4 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP2 OR PUSH1 0x1 SSTORE PUSH32 0xBF9A9534339A9D6B81696E05DCFB614B7DC518A31D48BE3CFB757988381FB323 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH32 0x768DC59800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x218 PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x23C DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP3 PUSH0 KECCAK256 SLOAD AND PUSH2 0x2D7 JUMPI DUP3 ISZERO PUSH2 0x2B1 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0xEF09FC346B7C2CAE78D9A37ED785840E7D3C6072022CD8C41C3B37A239B7FD1 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH32 0x31EC273600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP PUSH32 0x6FE47AF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x31D PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x24 SWAP1 DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP3 AND DUP1 DUP4 SUB PUSH2 0x1FA JUMPI PUSH2 0x34A PUSH2 0x1653 JUMP JUMPDEST SWAP3 PUSH2 0x353 PUSH2 0x19FD JUMP JUMPDEST PUSH2 0x361 DUP9 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST DUP1 SWAP6 DUP9 PUSH0 SWAP6 AND SWAP2 DUP3 PUSH2 0x99D JUMPI JUMPDEST DUP5 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 SWAP11 DUP12 DUP3 MSTORE ADDRESS DUP12 DUP4 ADD MSTORE PUSH1 0x20 SWAP6 DUP7 DUP4 DUP7 DUP2 DUP5 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x993 JUMPI PUSH0 SWAP4 PUSH2 0x964 JUMPI JUMPDEST POP DUP2 PUSH2 0x3BC PUSH2 0x178A JUMP JUMPDEST AND SWAP4 DUP5 EXTCODESIZE ISZERO PUSH2 0x1FA JUMPI DUP13 SWAP5 DUP10 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP5 DUP14 AND DUP1 SWAP8 DUP3 ADD MSTORE PUSH0 DUP2 DUP10 DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x95A JUMPI PUSH2 0x947 JUMPI JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x727 JUMPI DUP11 DUP7 DUP16 PUSH1 0x64 SWAP1 DUP4 DUP15 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xB53A70B200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE ADDRESS DUP14 DUP5 ADD MSTORE DUP9 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x93D JUMPI PUSH2 0x929 JUMPI JUMPDEST POP DUP13 SWAP14 DUP10 MLOAD SWAP14 DUP15 SWAP2 DUP3 MSTORE ADDRESS SWAP2 ADD MSTORE DUP8 DUP14 DUP8 DUP2 DUP6 GAS STATICCALL SWAP13 DUP14 ISZERO PUSH2 0x8AA JUMPI DUP11 SWAP14 PUSH2 0x8FA JUMPI JUMPDEST POP DUP4 DUP14 SUB SWAP4 DUP14 DUP6 GT PUSH2 0x8CF JUMPI DUP5 SWAP14 SUB PUSH2 0x4B7 JUMPI JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST DUP7 ISZERO PUSH2 0x8B4 JUMPI POP DUP9 SLOAD DUP3 AND SWAP3 DUP2 DUP5 SUB PUSH2 0x51D JUMPI POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x4F6 JUMPI POP PUSH2 0x4E3 SWAP4 POP PUSH2 0x1ABB JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x492 JUMP JUMPDEST DUP1 PUSH32 0xCA9E3A1E00000000000000000000000000000000000000000000000000000000 DUP7 SWAP3 MSTORE REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 SWAP8 SWAP11 SWAP5 SWAP7 SWAP9 DUP1 SWAP13 SWAP11 POP PUSH2 0x782 JUMPI JUMPDEST POP POP DUP9 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 DUP10 ADD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP4 DUP10 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP13 SWAP1 MSTORE SWAP2 SWAP3 SWAP2 DUP11 SWAP2 DUP15 SWAP2 PUSH2 0x5BC SWAP1 DUP6 SWAP1 PUSH1 0x40 ADD JUMPDEST SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 ADD DUP7 MSTORE DUP6 PUSH2 0x16D3 JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP3 DUP10 GAS CALL DUP13 MLOAD RETURNDATASIZE DUP3 PUSH2 0x764 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x72B JUMPI JUMPDEST POP POP DUP1 PUSH1 0x1 SLOAD AND SWAP3 DUP7 EXTCODESIZE ISZERO PUSH2 0x727 JUMPI DUP10 MLOAD SWAP5 PUSH32 0xDE557A3200000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP13 DUP7 ADD MSTORE AND SWAP7 DUP8 DUP6 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0xC4 DUP3 ADD MSTORE DUP7 DUP2 PUSH1 0xE4 DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x71D JUMPI DUP5 SWAP4 SWAP3 SWAP2 DUP9 SWAP2 PUSH2 0x6FE JUMPI JUMPDEST POP POP PUSH1 0x44 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS DUP13 DUP6 ADD MSTORE DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x6F5 JUMPI POP DUP4 SWAP3 PUSH2 0x6C7 JUMPI JUMPDEST POP POP PUSH2 0x6A2 JUMPI POP POP PUSH2 0x4E3 JUMP JUMPDEST PUSH32 0xC5BC8D5100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x6EE JUMPI JUMPDEST PUSH2 0x6DE DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD PUSH0 DUP1 PUSH2 0x695 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x6D4 JUMP JUMPDEST MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x70B SWAP2 SWAP3 SWAP4 SWAP5 POP PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x719 JUMPI SWAP1 DUP3 SWAP2 DUP7 PUSH0 PUSH2 0x64D JUMP JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP11 DUP1 REVERT JUMPDEST PUSH2 0x757 PUSH2 0x75D SWAP3 DUP13 MLOAD SWAP1 DUP12 DUP3 ADD MSTORE DUP10 DUP10 DUP3 ADD MSTORE DUP14 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x751 DUP2 PUSH2 0x16B7 JUMP JUMPDEST DUP7 PUSH2 0x1B19 JUMP JUMPDEST DUP5 PUSH2 0x1B19 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x5D4 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x77A JUMPI POP DUP3 DUP6 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x5CC JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x773 JUMP JUMPDEST DUP11 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP13 SWAP12 SWAP11 SWAP10 POP SWAP4 POP DUP8 DUP2 DUP13 DUP2 DUP16 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8AA JUMPI DUP9 SWAP2 DUP4 SWAP2 DUP13 SWAP2 PUSH2 0x86B JUMPI JUMPDEST POP AND SWAP4 DUP10 MLOAD SWAP13 DUP14 SWAP2 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP14 DUP4 ADD MSTORE ADDRESS DUP9 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE DUP2 DUP13 GAS SWAP3 PUSH1 0x64 SWAP4 CALL SWAP11 DUP12 ISZERO PUSH2 0x861 JUMPI SWAP9 DUP1 SWAP11 SWAP12 DUP10 SWAP11 DUP3 SWAP2 PUSH2 0x82C JUMPI JUMPDEST POP SWAP9 POP DUP6 SWAP1 POP PUSH2 0x590 PUSH2 0x530 JUMP JUMPDEST SWAP10 POP POP POP DUP7 DUP9 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x85A JUMPI JUMPDEST PUSH2 0x845 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI SWAP7 MLOAD DUP9 SWAP8 SWAP1 DUP11 SWAP1 DUP9 PUSH2 0x81E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x83B JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP3 DUP1 SWAP3 POP DUP4 SWAP2 POP RETURNDATASIZE DUP4 GT PUSH2 0x8A3 JUMPI JUMPDEST PUSH2 0x884 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x89F JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x89F JUMPI DUP2 DUP9 SWAP2 PUSH0 PUSH2 0x7C8 JUMP JUMPDEST DUP10 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x87A JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP13 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP11 POP POP POP SWAP9 POP POP POP POP POP POP POP PUSH2 0x8CA SWAP4 POP PUSH2 0x1ABB JUMP JUMPDEST PUSH2 0x4E3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP12 MSTORE PUSH1 0x11 DUP16 MSTORE DUP7 DUP12 REVERT JUMPDEST SWAP1 SWAP13 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x922 JUMPI JUMPDEST PUSH2 0x912 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP12 PUSH0 PUSH2 0x47E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x908 JUMP JUMPDEST PUSH2 0x933 DUP12 SWAP2 PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x89F JUMPI PUSH0 PUSH2 0x45B JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE DUP14 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x952 SWAP2 SWAP12 POP PUSH2 0x1676 JUMP JUMPDEST PUSH0 SWAP10 PUSH0 PUSH2 0x407 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 POP DUP7 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x98C JUMPI JUMPDEST PUSH2 0x97C DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x3B2 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x972 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP6 PUSH0 KECCAK256 SLOAD AND PUSH0 EQ PUSH2 0x9E1 JUMPI DUP10 PUSH0 SLOAD AND PUSH2 0x36E JUMPI DUP9 PUSH32 0x8562EB4500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 DUP8 PUSH32 0x38553F6C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0xA25 PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0xA49 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP3 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0xAB6 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH32 0xED3EA501D1A23F23A7DC56C2D33E1E5A6A97694C707EF67B1E0159F239746BF PUSH0 DUP1 LOG2 STOP JUMPDEST SWAP1 POP PUSH32 0xBCA5AB3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI DUP1 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP6 GT PUSH2 0x1FA JUMPI CALLDATASIZE PUSH1 0x23 DUP7 ADD SLT ISZERO PUSH2 0x1FA JUMPI DUP5 DUP4 ADD CALLDATALOAD SWAP4 PUSH1 0x24 SWAP2 DUP6 GT PUSH2 0xCBB JUMPI PUSH1 0x5 SWAP6 DUP6 PUSH1 0x5 SHL DUP5 MLOAD SWAP7 PUSH2 0xB38 DUP5 DUP4 ADD DUP10 PUSH2 0x16D3 JUMP JUMPDEST DUP8 MSTORE PUSH1 0x24 DUP4 DUP9 ADD SWAP2 DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x1FA JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xC8F JUMPI POP POP POP PUSH2 0xB62 PUSH2 0x19FD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 PUSH1 0x1 SWAP6 DUP1 PUSH1 0x1 SLOAD AND CALLER SUB PUSH2 0xC68 JUMPI PUSH0 SWAP8 DUP8 JUMPDEST PUSH2 0xBB3 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST DUP3 MLOAD DUP10 LT ISZERO PUSH2 0xC63 JUMPI DUP2 DUP5 DUP11 DUP4 SHL DUP6 ADD ADD MLOAD AND SWAP9 DUP7 MLOAD SWAP10 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP12 MSTORE ADDRESS DUP10 DUP13 ADD MSTORE DUP6 DUP12 DUP9 DUP2 DUP5 GAS STATICCALL DUP1 ISZERO PUSH2 0x993 JUMPI DUP11 SWAP12 PUSH0 SWAP2 PUSH2 0xC2E JUMPI JUMPDEST POP SWAP1 DUP2 DUP12 SWAP4 SWAP3 PUSH2 0xC1C JUMPI JUMPDEST POP POP ADD SWAP9 PUSH2 0xB8A JUMP JUMPDEST PUSH2 0xC27 SWAP2 CALLER SWAP1 PUSH2 0x1A52 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xC13 JUMP JUMPDEST DUP1 SWAP4 SWAP3 SWAP12 POP DUP8 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xC5C JUMPI JUMPDEST PUSH2 0xC49 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI SWAP1 MLOAD DUP11 SWAP10 SWAP1 DUP11 PUSH2 0xC08 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xC3F JUMP JUMPDEST PUSH2 0x492 JUMP JUMPDEST DUP6 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1FA JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xB50 JUMP JUMPDEST PUSH1 0x41 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xDA6 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0xD77 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xD98 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xD9F JUMPI JUMPDEST PUSH2 0xD90 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1846 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0xD6F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xD86 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xDE2 PUSH2 0x1630 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0xE63 PUSH2 0x1630 JUMP JUMPDEST SWAP1 PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1FA JUMPI PUSH2 0xE90 PUSH2 0x1653 JUMP JUMPDEST SWAP5 PUSH2 0xE99 PUSH2 0x19FD JUMP JUMPDEST PUSH2 0xEA7 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST DUP2 PUSH0 SWAP7 AND SWAP2 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0x1446 JUMPI JUMPDEST DUP7 MLOAD SWAP2 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 SWAP7 DUP8 DUP5 MSTORE ADDRESS DUP12 DUP6 ADD MSTORE PUSH1 0x20 SWAP7 DUP8 DUP6 DUP8 DUP2 DUP8 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x143C JUMPI PUSH0 SWAP6 PUSH2 0x140D JUMPI JUMPDEST POP DUP3 PUSH2 0xF05 PUSH2 0x178A JUMP JUMPDEST AND SWAP5 DUP6 EXTCODESIZE ISZERO PUSH2 0x1FA JUMPI DUP13 SWAP6 DUP12 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 DUP6 AND DUP1 SWAP9 DUP3 ADD MSTORE PUSH0 DUP2 DUP11 DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x1403 JUMPI PUSH2 0x13F0 JUMPI JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x13EC JUMPI DUP13 DUP8 DUP16 PUSH1 0x64 SWAP1 DUP16 DUP5 SWAP1 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xB53A70B200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE DUP14 ADDRESS SWAP1 DUP5 ADD MSTORE DUP12 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x13E2 JUMPI SWAP1 DUP14 SWAP2 PUSH2 0x13CA JUMPI JUMPDEST POP POP DUP11 MLOAD SWAP10 DUP11 MSTORE ADDRESS DUP14 DUP12 ADD MSTORE DUP9 DUP11 DUP9 DUP2 DUP9 GAS STATICCALL SWAP10 DUP11 ISZERO PUSH2 0x13C0 JUMPI DUP13 SWAP11 PUSH2 0x1391 JUMPI JUMPDEST POP DUP1 DUP11 SUB SWAP10 DUP1 DUP12 GT PUSH2 0x1365 JUMPI SUB PUSH2 0x1000 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST ISZERO PUSH2 0x134C JUMPI POP DUP9 SLOAD DUP2 AND SWAP1 DUP3 DUP3 SUB PUSH2 0x1039 JUMPI DUP11 DUP11 PUSH32 0xCA9E3A1E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP9 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP8 DUP2 DUP14 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x93D JUMPI DUP9 SWAP2 DUP4 SWAP2 DUP14 SWAP2 PUSH2 0x1311 JUMPI JUMPDEST POP AND SWAP9 PUSH1 0x64 DUP14 DUP14 DUP14 MLOAD SWAP8 DUP9 SWAP5 DUP6 SWAP4 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE ADDRESS DUP12 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x8AA JUMPI DUP11 SWAP4 PUSH2 0x12E2 JUMPI JUMPDEST POP DUP5 DUP10 MLOAD DUP9 DUP13 DUP12 DUP11 PUSH2 0x1155 DUP6 PUSH2 0x1129 DUP12 DUP8 DUP4 ADD SWAP5 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP11 DUP12 DUP8 MSTORE DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 ADD DUP8 MSTORE DUP7 PUSH2 0x16D3 JUMP JUMPDEST DUP3 DUP6 MLOAD SWAP3 GAS CALL DUP13 MLOAD RETURNDATASIZE DUP3 PUSH2 0x12C6 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x128D JUMPI JUMPDEST POP POP PUSH1 0x1 SLOAD AND SWAP2 DUP6 EXTCODESIZE ISZERO PUSH2 0x89F JUMPI DUP9 MLOAD SWAP4 PUSH32 0xDE557A3200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 DUP6 ADD MSTORE DUP8 DUP6 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0xC4 DUP3 ADD MSTORE DUP7 DUP2 PUSH1 0xE4 DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x71D JUMPI DUP5 SWAP4 SWAP3 SWAP2 DUP9 SWAP2 PUSH2 0x1272 JUMPI JUMPDEST POP POP PUSH1 0x44 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS DUP13 DUP6 ADD MSTORE DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x6F5 JUMPI POP DUP4 SWAP3 PUSH2 0x1244 JUMPI JUMPDEST POP POP PUSH2 0x6A2 JUMPI POP POP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x492 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x126B JUMPI JUMPDEST PUSH2 0x125B DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD PUSH0 DUP1 PUSH2 0x122A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1251 JUMP JUMPDEST PUSH2 0x127F SWAP2 SWAP3 SWAP4 SWAP5 POP PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x719 JUMPI SWAP1 DUP3 SWAP2 DUP7 PUSH0 PUSH2 0x11E2 JUMP JUMPDEST PUSH2 0x12B9 PUSH2 0x12BF SWAP3 DUP13 MLOAD SWAP1 DUP12 DUP3 ADD MSTORE DUP10 DUP10 DUP3 ADD MSTORE DUP14 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x12B3 DUP2 PUSH2 0x16B7 JUMP JUMPDEST DUP12 PUSH2 0x1B19 JUMP JUMPDEST DUP10 PUSH2 0x1B19 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x116C JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x12DA JUMPI POP DUP10 EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x1164 JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x12D3 JUMP JUMPDEST SWAP1 SWAP3 POP DUP7 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x130A JUMPI JUMPDEST PUSH2 0x12FA DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x10C6 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x12F0 JUMP JUMPDEST SWAP3 DUP1 SWAP3 POP DUP4 SWAP2 POP RETURNDATASIZE DUP4 GT PUSH2 0x1345 JUMPI JUMPDEST PUSH2 0x132A DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x727 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x727 JUMPI DUP2 DUP9 SWAP2 PUSH0 PUSH2 0x1077 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1320 JUMP JUMPDEST SWAP7 SWAP9 POP POP SWAP6 POP POP POP POP POP PUSH2 0x1360 SWAP4 POP PUSH2 0x1ABB JUMP JUMPDEST PUSH2 0x1233 JUMP JUMPDEST POP DUP7 DUP13 PUSH1 0x11 DUP16 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 SWAP10 POP DUP9 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x13B9 JUMPI JUMPDEST PUSH2 0x13A9 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP9 PUSH0 PUSH2 0xFCA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x139F JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE DUP15 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x13D3 SWAP1 PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x13DE JUMPI DUP12 PUSH0 PUSH2 0xFA9 JUMP JUMPDEST DUP12 DUP1 REVERT JUMPDEST DUP13 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP13 DUP1 REVERT JUMPDEST PUSH2 0x13FB SWAP2 SWAP14 POP PUSH2 0x1676 JUMP JUMPDEST PUSH0 SWAP12 PUSH0 PUSH2 0xF50 JUMP JUMPDEST DUP14 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1435 JUMPI JUMPDEST PUSH2 0x1425 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP4 PUSH0 PUSH2 0xEFB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x141B JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP8 PUSH0 KECCAK256 SLOAD AND PUSH0 EQ PUSH2 0x148A JUMPI DUP2 PUSH0 SLOAD AND PUSH2 0xEB6 JUMPI DUP9 PUSH32 0x8562EB4500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 DUP5 DUP11 PUSH32 0x38553F6C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x14E5 PUSH2 0x178A JUMP JUMPDEST SWAP2 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x1FA JUMPI PUSH2 0x1536 PUSH1 0x20 SWAP3 PUSH2 0x1714 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x15BD PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x15E1 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH0 SLOAD AND OR PUSH0 SSTORE PUSH32 0x873950C2AC59C570001B99D815FFB260542DF229D07132922E2E6F9941FD3DA6 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1FA JUMPI JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1FA JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x183B JUMPI PUSH0 SWAP3 PUSH2 0x1802 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1833 JUMPI JUMPDEST DUP2 PUSH2 0x181E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1FA JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1811 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x1FA JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1FA JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND CALLER SUB PUSH2 0x1895 JUMPI POP POP JUMP JUMPDEST PUSH2 0x18C1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x1714 JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x183B JUMPI DUP5 PUSH1 0x64 SWAP3 DUP8 SWAP6 PUSH0 SWAP2 PUSH2 0x19E0 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x4 DUP7 ADD MSTORE CALLER PUSH1 0x24 DUP7 ADD MSTORE AND PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x183B JUMPI PUSH0 SWAP3 PUSH2 0x19A9 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x1981 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x19D9 JUMPI JUMPDEST PUSH2 0x19C0 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x1FA JUMPI PUSH0 DUP1 PUSH2 0x1978 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x19B6 JUMP JUMPDEST PUSH2 0x19F7 SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0xD9F JUMPI PUSH2 0xD90 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST PUSH0 PUSH2 0x192A JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x1A2A JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 MSTORE PUSH2 0x1AB9 SWAP2 PUSH2 0x1AB4 PUSH1 0x64 DUP4 PUSH2 0x16D3 JUMP JUMPDEST PUSH2 0x1B19 JUMP JUMPDEST JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x40 PUSH32 0xD6B9382EC1786C32610E376E8EE8F2F16ABEDA4ACE3B6276AC958193C75BBBC8 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 DUP2 PUSH1 0x1 SLOAD AND PUSH2 0x1B08 DUP8 DUP3 DUP5 PUSH2 0x1A52 JUMP JUMPDEST DUP5 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE AND SWAP5 AND SWAP3 LOG3 JUMP JUMPDEST SWAP1 PUSH0 PUSH1 0x20 SWAP2 DUP3 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL ISZERO PUSH2 0x183B JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x1B97 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x1B55 JUMPI POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x1B4E JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SLOAD DUP1 SWAP8 DUP14 0xF6 0x23 0xC8 DIV 0xA8 0xB8 DUP7 CODESIZE 0x4F PUSH8 0xD95375C26DC77BED DUP16 PUSH31 0xD539D94969B947C064736F6C634300081B0033000000000000000000000000 ","sourceMap":"1713:10354:88:-:0;;;;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;-1:-1:-1;;;;;1713:10354:88;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1713:10354:88;;;;;;;;;;;;;;;;;;;;;922:4:47;1347:46:33;;943:28:45;939:79;;1028:14;;9350:26:88;;9346:85;;1713:10354;;;-1:-1:-1;;;;;;1713:10354:88;;;;;;;;9485:29;-1:-1:-1;;9485:29:88;1713:10354;;;;;;1347:46:33;1713:10354:88;;;;;1028:14:45;1713:10354:88;;;;;;;;;;;;;;;;;;;;;9346:85;9399:21;;;-1:-1:-1;9399:21:88;;-1:-1:-1;9399:21:88;939:79:45;994:13;;;-1:-1:-1;994:13:45;;-1:-1:-1;994:13:45;1713:10354:88;-1:-1:-1;1713:10354:88;;;;;;-1:-1:-1;1713:10354:88;;;;;-1:-1:-1;1713:10354:88"},"deployedBytecode":{"functionDebugData":{"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":6214,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC20":{"entryPoint":5680,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_contract_IProtocolFeeBurner":{"entryPoint":5715,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":5843,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_22929":{"entryPoint":5815,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_8829":{"entryPoint":5750,"id":null,"parameterSlots":1,"returnSlots":0},"fun_callOptionalReturn":{"entryPoint":6937,"id":11024,"parameterSlots":2,"returnSlots":0},"fun_ensureAuthenticatedByRole":{"entryPoint":6258,"id":7534,"parameterSlots":2,"returnSlots":0},"fun_getActionId":{"entryPoint":5908,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_getProtocolFeeController":{"entryPoint":6026,"id":22743,"parameterSlots":0,"returnSlots":1},"fun_nonReentrantBefore":{"entryPoint":6653,"id":6986,"parameterSlots":0,"returnSlots":0},"fun_safeTransfer":{"entryPoint":6738,"id":10647,"parameterSlots":3,"returnSlots":0},"fun_transferFeeToken":{"entryPoint":6843,"id":22730,"parameterSlots":3,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":5951}],"7358":[{"length":32,"start":3387},{"length":32,"start":3621},{"length":32,"start":6093},{"length":32,"start":6388}]},"linkReferences":{},"object":"604060808152600490813610156100a0575b361561007957346100795790602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600f60248201527f4e6f7420696d706c656d656e74656400000000000000000000000000000000006044820152fd5b507ff2238896000000000000000000000000000000000000000000000000000000005f525ffd5b5f3560e01c80631b66cb00146115a45780634ccb20c01461157057806380db0d511461153d578063851c1bb3146114ed57806385f2dbd4146114b457806388f6d2a414610e495780638d928af814610df95780639c5cee9b14610db0578063aaabadc514610ce7578063b0edcc5314610ae1578063b11f061e14610a0b578063b974699514610302578063e20c482f146101fe5763e74b981b036100115750346101fa5760206003193601126101fa57610158611630565b6001549073ffffffffffffffffffffffffffffffffffffffff9061017e82841630611872565b169182156101d457507fffffffffffffffffffffffff00000000000000000000000000000000000000001681176001557fbf9a9534339a9d6b81696e05dcfb614b7dc518a31d48be3cfb757988381fb3235f80a2005b7f768dc598000000000000000000000000000000000000000000000000000000005f525ffd5b5f80fd5b50346101fa5760206003193601126101fa57610218611630565b73ffffffffffffffffffffffffffffffffffffffff9061023c826001541630611872565b1691825f52600260205260ff825f2054166102d75782156102b15750815f5260026020525f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f0ef09fc346b7c2cae78d9a37ed785840e7d3c6072022cd8c41c3b37a239b7fd15f80a2005b7f31ec2736000000000000000000000000000000000000000000000000000000005f525ffd5b90507f6fe47af6000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101fa5760a06003193601126101fa5761031d611630565b602490813573ffffffffffffffffffffffffffffffffffffffff948582168083036101fa5761034a611653565b926103536119fd565b610361886001541630611872565b8095885f9516918261099d575b84517f70a08231000000000000000000000000000000000000000000000000000000009a8b8252308b83015260209586838681845afa928315610993575f93610964575b50816103bc61178a565b1693843b156101fa578c9489517f8f4ab9ca000000000000000000000000000000000000000000000000000000008152848d1680978201525f81898183865af1801561095a57610947575b50803b15610727578a868f606490838e5195869485937fb53a70b2000000000000000000000000000000000000000000000000000000008552840152308d8401528860448401525af1801561093d57610929575b508c9d89519d8e91825230910152878d8781855afa9c8d156108aa578a9d6108fa575b50838d03938d85116108cf57849d036104b7575b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b86156108b45750885482169281840361051d57505050505050505050806104f657506104e39350611abb565b5f80808080808080808080808080610492565b807fca9e3a1e00000000000000000000000000000000000000000000000000000000869252fd5b9091929395979a949698809c9a50610782575b505088517f095ea7b30000000000000000000000000000000000000000000000000000000081890181815273ffffffffffffffffffffffffffffffffffffffff8916838901908152602081018c90529192918a918e916105bc9085906040015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018652856116d3565b83519082895af18c513d82610764575b50501561072b575b5050806001541692863b15610727578951947fde557a320000000000000000000000000000000000000000000000000000000086528c8601521696878585015260448401526064830152604435608483015260a482015260643560c4820152868160e48183875af1801561071d578493929188916106fe575b5050604490865195869384927fdd62ed3e000000000000000000000000000000000000000000000000000000008452308c8501528301525afa9283156106f5575083926106c7575b50506106a25750506104e3565b7fc5bc8d51000000000000000000000000000000000000000000000000000000008152fd5b90809250813d83116106ee575b6106de81836116d3565b810103126101fa57515f80610695565b503d6106d4565b513d85823e3d90fd5b61070b9192939450611676565b61071957908291865f61064d565b8580fd5b86513d89823e3d90fd5b8a80fd5b61075761075d928c51908b82015289898201528d604482015260448152610751816116b7565b86611b19565b84611b19565b5f806105d4565b90915061077a57508285163b15155b5f806105cc565b600114610773565b8a517f38d52e0f000000000000000000000000000000000000000000000000000000008152919c9b9a9950935087818c818f5afa9081156108aa57889183918c9161086b575b50169389519c8d917fba0876520000000000000000000000000000000000000000000000000000000083528d8301523088830152306044830152818c5a92606493f19a8b156108615798809a9b899a829161082c575b509850859050610590610530565b995050508688813d831161085a575b61084581836116d3565b810103126101fa5796518897908a908861081e565b503d61083b565b88513d8b823e3d90fd5b928092508391503d83116108a3575b61088481836116d3565b8101031261089f5751818116810361089f578188915f6107c8565b8980fd5b503d61087a565b89513d8c823e3d90fd5b9a50505098505050505050506108ca9350611abb565b6104e3565b7f4e487b71000000000000000000000000000000000000000000000000000000008b5260118f52868bfd5b909c508781813d8311610922575b61091281836116d3565b810103126101fa57519b5f61047e565b503d610908565b6109338b91611676565b61089f575f61045b565b8a513d8d823e3d90fd5b610952919b50611676565b5f995f610407565b8b513d5f823e3d90fd5b9092508681813d831161098c575b61097c81836116d3565b810103126101fa5751915f6103b2565b503d610972565b88513d5f823e3d90fd5b825f52600260205260ff855f2054165f146109e157895f541661036e57887f8562eb45000000000000000000000000000000000000000000000000000000005f525ffd5b5090877f38553f6c000000000000000000000000000000000000000000000000000000005f52525ffd5b50346101fa5760206003193601126101fa57610a25611630565b73ffffffffffffffffffffffffffffffffffffffff90610a49826001541630611872565b1691825f52600260205260ff825f20541615610ab65750815f5260026020525f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690557f0ed3ea501d1a23f23a7dc56c2d33e1e5a6a97694c707ef67b1e0159f239746bf5f80a2005b90507fbca5ab34000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101fa57602090816003193601126101fa5780359267ffffffffffffffff8085116101fa57366023860112156101fa5784830135936024918511610cbb576005958560051b845196610b38848301896116d3565b8752602483880191830101913683116101fa57602401905b828210610c8f57505050610b626119fd565b73ffffffffffffffffffffffffffffffffffffffff9460019580600154163303610c68575f97875b610bb3575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b8251891015610c635781848a831b8501015116988651997f70a08231000000000000000000000000000000000000000000000000000000008b5230898c0152858b8881845afa8015610993578a9b5f91610c2e575b5090818b9392610c1c575b50500198610b8a565b610c27913390611a52565b5f80610c13565b8093929b50878092503d8311610c5c575b610c4981836116d3565b810103126101fa5790518a99908a610c08565b503d610c3f565b610492565b857f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b813573ffffffffffffffffffffffffffffffffffffffff811681036101fa578152908301908301610b50565b6041847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101fa575f6003193601126101fa5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa918215610da657926020935f93610d77575b505191168152f35b610d98919350843d8611610d9f575b610d9081836116d3565b810190611846565b915f610d6f565b503d610d86565b83513d5f823e3d90fd5b50346101fa5760206003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff610de2611630565b165f526002825260ff815f20541690519015158152f35b50346101fa575f6003193601126101fa576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346101fa5760a06003193601126101fa57610e63611630565b90602491823573ffffffffffffffffffffffffffffffffffffffff8082168092036101fa57610e90611653565b94610e996119fd565b610ea7826001541630611872565b815f9616918215159384611446575b8651917f70a082310000000000000000000000000000000000000000000000000000000096878452308b85015260209687858781875afa94851561143c575f9561140d575b5082610f0561178a565b1694853b156101fa578c958b517f8f4ab9ca00000000000000000000000000000000000000000000000000000000815285851680988201525f818a8183865af18015611403576113f0575b50803b156113ec578c878f6064908f84905195869485937fb53a70b20000000000000000000000000000000000000000000000000000000085528401528d30908401528b60448401525af180156113e257908d916113ca575b50508a51998a52308d8b0152888a8881885afa998a156113c0578c9a611391575b50808a0399808b116113655703611000575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b1561134c57508854811690828203611039578a8a7fca9e3a1e000000000000000000000000000000000000000000000000000000008152fd5b88517f38d52e0f00000000000000000000000000000000000000000000000000000000815287818d81875afa90811561093d57889183918d91611311575b50169860648d8d8d5197889485937fba087652000000000000000000000000000000000000000000000000000000008552840152308b8401523060448401525af19283156108aa578a936112e2575b50848951888c8b8a611155856111298b878301947f095ea7b3000000000000000000000000000000000000000000000000000000009a8b875284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866116d3565b828551925af18c513d826112c6575b50501561128d575b50506001541691853b1561089f578851937fde557a320000000000000000000000000000000000000000000000000000000085528b850152878585015260448401526064830152604435608483015260a482015260643560c4820152868160e48183875af1801561071d57849392918891611272575b5050604490865195869384927fdd62ed3e000000000000000000000000000000000000000000000000000000008452308c8501528301525afa9283156106f557508392611244575b50506106a25750505b5f8080808080808080808080610492565b90809250813d831161126b575b61125b81836116d3565b810103126101fa57515f8061122a565b503d611251565b61127f9192939450611676565b61071957908291865f6111e2565b6112b96112bf928c51908b82015289898201528d6044820152604481526112b3816116b7565b8b611b19565b89611b19565b5f8061116c565b9091506112da5750893b15155b5f80611164565b6001146112d3565b9092508681813d831161130a575b6112fa81836116d3565b810103126101fa5751915f6110c6565b503d6112f0565b928092508391503d8311611345575b61132a81836116d3565b8101031261072757518181168103610727578188915f611077565b503d611320565b969850509550505050506113609350611abb565b611233565b50868c60118f7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b9099508881813d83116113b9575b6113a981836116d3565b810103126101fa5751985f610fca565b503d61139f565b8b513d8e823e3d90fd5b6113d390611676565b6113de578b5f610fa9565b8b80fd5b8c513d8f823e3d90fd5b8c80fd5b6113fb919d50611676565b5f9b5f610f50565b8d513d5f823e3d90fd5b9094508781813d8311611435575b61142581836116d3565b810103126101fa5751935f610efb565b503d61141b565b8a513d5f823e3d90fd5b835f52600260205260ff875f2054165f1461148a57815f5416610eb657887f8562eb45000000000000000000000000000000000000000000000000000000005f525ffd5b82848a7f38553f6c000000000000000000000000000000000000000000000000000000005f52525ffd5b50346101fa575f6003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff6114e561178a565b915191168152f35b5090346101fa5760206003193601126101fa5735907fffffffff00000000000000000000000000000000000000000000000000000000821682036101fa57611536602092611714565b9051908152f35b50346101fa575f6003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50346101fa575f6003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b346101fa5760206003193601126101fa576115bd611630565b73ffffffffffffffffffffffffffffffffffffffff906115e1826001541630611872565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f557f873950c2ac59c570001b99d815ffb260542df229d07132922e2e6f9941fd3da65f80a2005b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101fa57565b6084359073ffffffffffffffffffffffffffffffffffffffff821682036101fa57565b67ffffffffffffffff811161168a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761168a57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761168a57604052565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff82111761168a5760405251902090565b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561183b575f9261180257505090565b9091506020813d602011611833575b8161181e602093836116d3565b810103126101fa575190811681036101fa5790565b3d9150611811565b6040513d5f823e3d90fd5b908160209103126101fa575173ffffffffffffffffffffffffffffffffffffffff811681036101fa5790565b9073ffffffffffffffffffffffffffffffffffffffff8091163303611895575050565b6118c17fffffffff000000000000000000000000000000000000000000000000000000005f3516611714565b91604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa90811561183b578460649287955f916119e0575b5060405196879586947f9be2a8840000000000000000000000000000000000000000000000000000000086526004860152336024860152166044840152165afa91821561183b575f926119a9575b50501561198157565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116119d9575b6119c081836116d3565b810103126101fa575180151581036101fa575f80611978565b503d6119b6565b6119f79150863d8811610d9f57610d9081836116d3565b5f61192a565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c611a2a576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff929092166024830152604480830193909352918152611ab991611ab46064836116d3565b611b19565b565b919060407fd6b9382ec1786c32610e376e8ee8f2f16abeda4ace3b6276ac958193c75bbbc89173ffffffffffffffffffffffffffffffffffffffff80918160015416611b08878284611a52565b8451968752602087015216941692a3565b905f602091828151910182855af11561183b575f513d611b97575073ffffffffffffffffffffffffffffffffffffffff81163b155b611b555750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415611b4e56fea26469706673582212205480978df623c804a8b886384f67d95375c26dc77bed8f7ed539d94969b947c064736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0xA0 JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x79 JUMPI CALLVALUE PUSH2 0x79 JUMPI SWAP1 PUSH1 0x20 PUSH1 0x64 SWAP3 MLOAD SWAP2 PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420696D706C656D656E7465640000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST POP PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1B66CB00 EQ PUSH2 0x15A4 JUMPI DUP1 PUSH4 0x4CCB20C0 EQ PUSH2 0x1570 JUMPI DUP1 PUSH4 0x80DB0D51 EQ PUSH2 0x153D JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x14ED JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x14B4 JUMPI DUP1 PUSH4 0x88F6D2A4 EQ PUSH2 0xE49 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0xDF9 JUMPI DUP1 PUSH4 0x9C5CEE9B EQ PUSH2 0xDB0 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB0EDCC53 EQ PUSH2 0xAE1 JUMPI DUP1 PUSH4 0xB11F061E EQ PUSH2 0xA0B JUMPI DUP1 PUSH4 0xB9746995 EQ PUSH2 0x302 JUMPI DUP1 PUSH4 0xE20C482F EQ PUSH2 0x1FE JUMPI PUSH4 0xE74B981B SUB PUSH2 0x11 JUMPI POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x158 PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x17E DUP3 DUP5 AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND SWAP2 DUP3 ISZERO PUSH2 0x1D4 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP2 OR PUSH1 0x1 SSTORE PUSH32 0xBF9A9534339A9D6B81696E05DCFB614B7DC518A31D48BE3CFB757988381FB323 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH32 0x768DC59800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x218 PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x23C DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP3 PUSH0 KECCAK256 SLOAD AND PUSH2 0x2D7 JUMPI DUP3 ISZERO PUSH2 0x2B1 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0xEF09FC346B7C2CAE78D9A37ED785840E7D3C6072022CD8C41C3B37A239B7FD1 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH32 0x31EC273600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP PUSH32 0x6FE47AF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x31D PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x24 SWAP1 DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP3 AND DUP1 DUP4 SUB PUSH2 0x1FA JUMPI PUSH2 0x34A PUSH2 0x1653 JUMP JUMPDEST SWAP3 PUSH2 0x353 PUSH2 0x19FD JUMP JUMPDEST PUSH2 0x361 DUP9 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST DUP1 SWAP6 DUP9 PUSH0 SWAP6 AND SWAP2 DUP3 PUSH2 0x99D JUMPI JUMPDEST DUP5 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 SWAP11 DUP12 DUP3 MSTORE ADDRESS DUP12 DUP4 ADD MSTORE PUSH1 0x20 SWAP6 DUP7 DUP4 DUP7 DUP2 DUP5 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x993 JUMPI PUSH0 SWAP4 PUSH2 0x964 JUMPI JUMPDEST POP DUP2 PUSH2 0x3BC PUSH2 0x178A JUMP JUMPDEST AND SWAP4 DUP5 EXTCODESIZE ISZERO PUSH2 0x1FA JUMPI DUP13 SWAP5 DUP10 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP5 DUP14 AND DUP1 SWAP8 DUP3 ADD MSTORE PUSH0 DUP2 DUP10 DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x95A JUMPI PUSH2 0x947 JUMPI JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x727 JUMPI DUP11 DUP7 DUP16 PUSH1 0x64 SWAP1 DUP4 DUP15 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xB53A70B200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE ADDRESS DUP14 DUP5 ADD MSTORE DUP9 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x93D JUMPI PUSH2 0x929 JUMPI JUMPDEST POP DUP13 SWAP14 DUP10 MLOAD SWAP14 DUP15 SWAP2 DUP3 MSTORE ADDRESS SWAP2 ADD MSTORE DUP8 DUP14 DUP8 DUP2 DUP6 GAS STATICCALL SWAP13 DUP14 ISZERO PUSH2 0x8AA JUMPI DUP11 SWAP14 PUSH2 0x8FA JUMPI JUMPDEST POP DUP4 DUP14 SUB SWAP4 DUP14 DUP6 GT PUSH2 0x8CF JUMPI DUP5 SWAP14 SUB PUSH2 0x4B7 JUMPI JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST DUP7 ISZERO PUSH2 0x8B4 JUMPI POP DUP9 SLOAD DUP3 AND SWAP3 DUP2 DUP5 SUB PUSH2 0x51D JUMPI POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x4F6 JUMPI POP PUSH2 0x4E3 SWAP4 POP PUSH2 0x1ABB JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x492 JUMP JUMPDEST DUP1 PUSH32 0xCA9E3A1E00000000000000000000000000000000000000000000000000000000 DUP7 SWAP3 MSTORE REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 SWAP8 SWAP11 SWAP5 SWAP7 SWAP9 DUP1 SWAP13 SWAP11 POP PUSH2 0x782 JUMPI JUMPDEST POP POP DUP9 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 DUP10 ADD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP4 DUP10 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP13 SWAP1 MSTORE SWAP2 SWAP3 SWAP2 DUP11 SWAP2 DUP15 SWAP2 PUSH2 0x5BC SWAP1 DUP6 SWAP1 PUSH1 0x40 ADD JUMPDEST SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 ADD DUP7 MSTORE DUP6 PUSH2 0x16D3 JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP3 DUP10 GAS CALL DUP13 MLOAD RETURNDATASIZE DUP3 PUSH2 0x764 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x72B JUMPI JUMPDEST POP POP DUP1 PUSH1 0x1 SLOAD AND SWAP3 DUP7 EXTCODESIZE ISZERO PUSH2 0x727 JUMPI DUP10 MLOAD SWAP5 PUSH32 0xDE557A3200000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP13 DUP7 ADD MSTORE AND SWAP7 DUP8 DUP6 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0xC4 DUP3 ADD MSTORE DUP7 DUP2 PUSH1 0xE4 DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x71D JUMPI DUP5 SWAP4 SWAP3 SWAP2 DUP9 SWAP2 PUSH2 0x6FE JUMPI JUMPDEST POP POP PUSH1 0x44 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS DUP13 DUP6 ADD MSTORE DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x6F5 JUMPI POP DUP4 SWAP3 PUSH2 0x6C7 JUMPI JUMPDEST POP POP PUSH2 0x6A2 JUMPI POP POP PUSH2 0x4E3 JUMP JUMPDEST PUSH32 0xC5BC8D5100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x6EE JUMPI JUMPDEST PUSH2 0x6DE DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD PUSH0 DUP1 PUSH2 0x695 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x6D4 JUMP JUMPDEST MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x70B SWAP2 SWAP3 SWAP4 SWAP5 POP PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x719 JUMPI SWAP1 DUP3 SWAP2 DUP7 PUSH0 PUSH2 0x64D JUMP JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP11 DUP1 REVERT JUMPDEST PUSH2 0x757 PUSH2 0x75D SWAP3 DUP13 MLOAD SWAP1 DUP12 DUP3 ADD MSTORE DUP10 DUP10 DUP3 ADD MSTORE DUP14 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x751 DUP2 PUSH2 0x16B7 JUMP JUMPDEST DUP7 PUSH2 0x1B19 JUMP JUMPDEST DUP5 PUSH2 0x1B19 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x5D4 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x77A JUMPI POP DUP3 DUP6 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x5CC JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x773 JUMP JUMPDEST DUP11 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP13 SWAP12 SWAP11 SWAP10 POP SWAP4 POP DUP8 DUP2 DUP13 DUP2 DUP16 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8AA JUMPI DUP9 SWAP2 DUP4 SWAP2 DUP13 SWAP2 PUSH2 0x86B JUMPI JUMPDEST POP AND SWAP4 DUP10 MLOAD SWAP13 DUP14 SWAP2 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP14 DUP4 ADD MSTORE ADDRESS DUP9 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE DUP2 DUP13 GAS SWAP3 PUSH1 0x64 SWAP4 CALL SWAP11 DUP12 ISZERO PUSH2 0x861 JUMPI SWAP9 DUP1 SWAP11 SWAP12 DUP10 SWAP11 DUP3 SWAP2 PUSH2 0x82C JUMPI JUMPDEST POP SWAP9 POP DUP6 SWAP1 POP PUSH2 0x590 PUSH2 0x530 JUMP JUMPDEST SWAP10 POP POP POP DUP7 DUP9 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x85A JUMPI JUMPDEST PUSH2 0x845 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI SWAP7 MLOAD DUP9 SWAP8 SWAP1 DUP11 SWAP1 DUP9 PUSH2 0x81E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x83B JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP3 DUP1 SWAP3 POP DUP4 SWAP2 POP RETURNDATASIZE DUP4 GT PUSH2 0x8A3 JUMPI JUMPDEST PUSH2 0x884 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x89F JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x89F JUMPI DUP2 DUP9 SWAP2 PUSH0 PUSH2 0x7C8 JUMP JUMPDEST DUP10 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x87A JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP13 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP11 POP POP POP SWAP9 POP POP POP POP POP POP POP PUSH2 0x8CA SWAP4 POP PUSH2 0x1ABB JUMP JUMPDEST PUSH2 0x4E3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP12 MSTORE PUSH1 0x11 DUP16 MSTORE DUP7 DUP12 REVERT JUMPDEST SWAP1 SWAP13 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x922 JUMPI JUMPDEST PUSH2 0x912 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP12 PUSH0 PUSH2 0x47E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x908 JUMP JUMPDEST PUSH2 0x933 DUP12 SWAP2 PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x89F JUMPI PUSH0 PUSH2 0x45B JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE DUP14 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x952 SWAP2 SWAP12 POP PUSH2 0x1676 JUMP JUMPDEST PUSH0 SWAP10 PUSH0 PUSH2 0x407 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 POP DUP7 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x98C JUMPI JUMPDEST PUSH2 0x97C DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x3B2 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x972 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP6 PUSH0 KECCAK256 SLOAD AND PUSH0 EQ PUSH2 0x9E1 JUMPI DUP10 PUSH0 SLOAD AND PUSH2 0x36E JUMPI DUP9 PUSH32 0x8562EB4500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 DUP8 PUSH32 0x38553F6C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0xA25 PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0xA49 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP3 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0xAB6 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH32 0xED3EA501D1A23F23A7DC56C2D33E1E5A6A97694C707EF67B1E0159F239746BF PUSH0 DUP1 LOG2 STOP JUMPDEST SWAP1 POP PUSH32 0xBCA5AB3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI DUP1 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP6 GT PUSH2 0x1FA JUMPI CALLDATASIZE PUSH1 0x23 DUP7 ADD SLT ISZERO PUSH2 0x1FA JUMPI DUP5 DUP4 ADD CALLDATALOAD SWAP4 PUSH1 0x24 SWAP2 DUP6 GT PUSH2 0xCBB JUMPI PUSH1 0x5 SWAP6 DUP6 PUSH1 0x5 SHL DUP5 MLOAD SWAP7 PUSH2 0xB38 DUP5 DUP4 ADD DUP10 PUSH2 0x16D3 JUMP JUMPDEST DUP8 MSTORE PUSH1 0x24 DUP4 DUP9 ADD SWAP2 DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x1FA JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xC8F JUMPI POP POP POP PUSH2 0xB62 PUSH2 0x19FD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 PUSH1 0x1 SWAP6 DUP1 PUSH1 0x1 SLOAD AND CALLER SUB PUSH2 0xC68 JUMPI PUSH0 SWAP8 DUP8 JUMPDEST PUSH2 0xBB3 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST DUP3 MLOAD DUP10 LT ISZERO PUSH2 0xC63 JUMPI DUP2 DUP5 DUP11 DUP4 SHL DUP6 ADD ADD MLOAD AND SWAP9 DUP7 MLOAD SWAP10 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP12 MSTORE ADDRESS DUP10 DUP13 ADD MSTORE DUP6 DUP12 DUP9 DUP2 DUP5 GAS STATICCALL DUP1 ISZERO PUSH2 0x993 JUMPI DUP11 SWAP12 PUSH0 SWAP2 PUSH2 0xC2E JUMPI JUMPDEST POP SWAP1 DUP2 DUP12 SWAP4 SWAP3 PUSH2 0xC1C JUMPI JUMPDEST POP POP ADD SWAP9 PUSH2 0xB8A JUMP JUMPDEST PUSH2 0xC27 SWAP2 CALLER SWAP1 PUSH2 0x1A52 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xC13 JUMP JUMPDEST DUP1 SWAP4 SWAP3 SWAP12 POP DUP8 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xC5C JUMPI JUMPDEST PUSH2 0xC49 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI SWAP1 MLOAD DUP11 SWAP10 SWAP1 DUP11 PUSH2 0xC08 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xC3F JUMP JUMPDEST PUSH2 0x492 JUMP JUMPDEST DUP6 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1FA JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xB50 JUMP JUMPDEST PUSH1 0x41 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xDA6 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0xD77 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xD98 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xD9F JUMPI JUMPDEST PUSH2 0xD90 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1846 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0xD6F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xD86 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xDE2 PUSH2 0x1630 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0xE63 PUSH2 0x1630 JUMP JUMPDEST SWAP1 PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1FA JUMPI PUSH2 0xE90 PUSH2 0x1653 JUMP JUMPDEST SWAP5 PUSH2 0xE99 PUSH2 0x19FD JUMP JUMPDEST PUSH2 0xEA7 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST DUP2 PUSH0 SWAP7 AND SWAP2 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0x1446 JUMPI JUMPDEST DUP7 MLOAD SWAP2 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 SWAP7 DUP8 DUP5 MSTORE ADDRESS DUP12 DUP6 ADD MSTORE PUSH1 0x20 SWAP7 DUP8 DUP6 DUP8 DUP2 DUP8 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x143C JUMPI PUSH0 SWAP6 PUSH2 0x140D JUMPI JUMPDEST POP DUP3 PUSH2 0xF05 PUSH2 0x178A JUMP JUMPDEST AND SWAP5 DUP6 EXTCODESIZE ISZERO PUSH2 0x1FA JUMPI DUP13 SWAP6 DUP12 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 DUP6 AND DUP1 SWAP9 DUP3 ADD MSTORE PUSH0 DUP2 DUP11 DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x1403 JUMPI PUSH2 0x13F0 JUMPI JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x13EC JUMPI DUP13 DUP8 DUP16 PUSH1 0x64 SWAP1 DUP16 DUP5 SWAP1 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xB53A70B200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE DUP14 ADDRESS SWAP1 DUP5 ADD MSTORE DUP12 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x13E2 JUMPI SWAP1 DUP14 SWAP2 PUSH2 0x13CA JUMPI JUMPDEST POP POP DUP11 MLOAD SWAP10 DUP11 MSTORE ADDRESS DUP14 DUP12 ADD MSTORE DUP9 DUP11 DUP9 DUP2 DUP9 GAS STATICCALL SWAP10 DUP11 ISZERO PUSH2 0x13C0 JUMPI DUP13 SWAP11 PUSH2 0x1391 JUMPI JUMPDEST POP DUP1 DUP11 SUB SWAP10 DUP1 DUP12 GT PUSH2 0x1365 JUMPI SUB PUSH2 0x1000 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST ISZERO PUSH2 0x134C JUMPI POP DUP9 SLOAD DUP2 AND SWAP1 DUP3 DUP3 SUB PUSH2 0x1039 JUMPI DUP11 DUP11 PUSH32 0xCA9E3A1E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP9 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP8 DUP2 DUP14 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x93D JUMPI DUP9 SWAP2 DUP4 SWAP2 DUP14 SWAP2 PUSH2 0x1311 JUMPI JUMPDEST POP AND SWAP9 PUSH1 0x64 DUP14 DUP14 DUP14 MLOAD SWAP8 DUP9 SWAP5 DUP6 SWAP4 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE ADDRESS DUP12 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x8AA JUMPI DUP11 SWAP4 PUSH2 0x12E2 JUMPI JUMPDEST POP DUP5 DUP10 MLOAD DUP9 DUP13 DUP12 DUP11 PUSH2 0x1155 DUP6 PUSH2 0x1129 DUP12 DUP8 DUP4 ADD SWAP5 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP11 DUP12 DUP8 MSTORE DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 ADD DUP8 MSTORE DUP7 PUSH2 0x16D3 JUMP JUMPDEST DUP3 DUP6 MLOAD SWAP3 GAS CALL DUP13 MLOAD RETURNDATASIZE DUP3 PUSH2 0x12C6 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x128D JUMPI JUMPDEST POP POP PUSH1 0x1 SLOAD AND SWAP2 DUP6 EXTCODESIZE ISZERO PUSH2 0x89F JUMPI DUP9 MLOAD SWAP4 PUSH32 0xDE557A3200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 DUP6 ADD MSTORE DUP8 DUP6 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0xC4 DUP3 ADD MSTORE DUP7 DUP2 PUSH1 0xE4 DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x71D JUMPI DUP5 SWAP4 SWAP3 SWAP2 DUP9 SWAP2 PUSH2 0x1272 JUMPI JUMPDEST POP POP PUSH1 0x44 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS DUP13 DUP6 ADD MSTORE DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x6F5 JUMPI POP DUP4 SWAP3 PUSH2 0x1244 JUMPI JUMPDEST POP POP PUSH2 0x6A2 JUMPI POP POP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x492 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x126B JUMPI JUMPDEST PUSH2 0x125B DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD PUSH0 DUP1 PUSH2 0x122A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1251 JUMP JUMPDEST PUSH2 0x127F SWAP2 SWAP3 SWAP4 SWAP5 POP PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x719 JUMPI SWAP1 DUP3 SWAP2 DUP7 PUSH0 PUSH2 0x11E2 JUMP JUMPDEST PUSH2 0x12B9 PUSH2 0x12BF SWAP3 DUP13 MLOAD SWAP1 DUP12 DUP3 ADD MSTORE DUP10 DUP10 DUP3 ADD MSTORE DUP14 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x12B3 DUP2 PUSH2 0x16B7 JUMP JUMPDEST DUP12 PUSH2 0x1B19 JUMP JUMPDEST DUP10 PUSH2 0x1B19 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x116C JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x12DA JUMPI POP DUP10 EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x1164 JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x12D3 JUMP JUMPDEST SWAP1 SWAP3 POP DUP7 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x130A JUMPI JUMPDEST PUSH2 0x12FA DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x10C6 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x12F0 JUMP JUMPDEST SWAP3 DUP1 SWAP3 POP DUP4 SWAP2 POP RETURNDATASIZE DUP4 GT PUSH2 0x1345 JUMPI JUMPDEST PUSH2 0x132A DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x727 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x727 JUMPI DUP2 DUP9 SWAP2 PUSH0 PUSH2 0x1077 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1320 JUMP JUMPDEST SWAP7 SWAP9 POP POP SWAP6 POP POP POP POP POP PUSH2 0x1360 SWAP4 POP PUSH2 0x1ABB JUMP JUMPDEST PUSH2 0x1233 JUMP JUMPDEST POP DUP7 DUP13 PUSH1 0x11 DUP16 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 SWAP10 POP DUP9 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x13B9 JUMPI JUMPDEST PUSH2 0x13A9 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP9 PUSH0 PUSH2 0xFCA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x139F JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE DUP15 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x13D3 SWAP1 PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x13DE JUMPI DUP12 PUSH0 PUSH2 0xFA9 JUMP JUMPDEST DUP12 DUP1 REVERT JUMPDEST DUP13 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP13 DUP1 REVERT JUMPDEST PUSH2 0x13FB SWAP2 SWAP14 POP PUSH2 0x1676 JUMP JUMPDEST PUSH0 SWAP12 PUSH0 PUSH2 0xF50 JUMP JUMPDEST DUP14 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1435 JUMPI JUMPDEST PUSH2 0x1425 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP4 PUSH0 PUSH2 0xEFB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x141B JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP8 PUSH0 KECCAK256 SLOAD AND PUSH0 EQ PUSH2 0x148A JUMPI DUP2 PUSH0 SLOAD AND PUSH2 0xEB6 JUMPI DUP9 PUSH32 0x8562EB4500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 DUP5 DUP11 PUSH32 0x38553F6C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x14E5 PUSH2 0x178A JUMP JUMPDEST SWAP2 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x1FA JUMPI PUSH2 0x1536 PUSH1 0x20 SWAP3 PUSH2 0x1714 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x15BD PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x15E1 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH0 SLOAD AND OR PUSH0 SSTORE PUSH32 0x873950C2AC59C570001B99D815FFB260542DF229D07132922E2E6F9941FD3DA6 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1FA JUMPI JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1FA JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x183B JUMPI PUSH0 SWAP3 PUSH2 0x1802 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1833 JUMPI JUMPDEST DUP2 PUSH2 0x181E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1FA JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1811 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x1FA JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1FA JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND CALLER SUB PUSH2 0x1895 JUMPI POP POP JUMP JUMPDEST PUSH2 0x18C1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x1714 JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x183B JUMPI DUP5 PUSH1 0x64 SWAP3 DUP8 SWAP6 PUSH0 SWAP2 PUSH2 0x19E0 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x4 DUP7 ADD MSTORE CALLER PUSH1 0x24 DUP7 ADD MSTORE AND PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x183B JUMPI PUSH0 SWAP3 PUSH2 0x19A9 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x1981 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x19D9 JUMPI JUMPDEST PUSH2 0x19C0 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x1FA JUMPI PUSH0 DUP1 PUSH2 0x1978 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x19B6 JUMP JUMPDEST PUSH2 0x19F7 SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0xD9F JUMPI PUSH2 0xD90 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST PUSH0 PUSH2 0x192A JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x1A2A JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 MSTORE PUSH2 0x1AB9 SWAP2 PUSH2 0x1AB4 PUSH1 0x64 DUP4 PUSH2 0x16D3 JUMP JUMPDEST PUSH2 0x1B19 JUMP JUMPDEST JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x40 PUSH32 0xD6B9382EC1786C32610E376E8EE8F2F16ABEDA4ACE3B6276AC958193C75BBBC8 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 DUP2 PUSH1 0x1 SLOAD AND PUSH2 0x1B08 DUP8 DUP3 DUP5 PUSH2 0x1A52 JUMP JUMPDEST DUP5 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE AND SWAP5 AND SWAP3 LOG3 JUMP JUMPDEST SWAP1 PUSH0 PUSH1 0x20 SWAP2 DUP3 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL ISZERO PUSH2 0x183B JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x1B97 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x1B55 JUMPI POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x1B4E JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SLOAD DUP1 SWAP8 DUP14 0xF6 0x23 0xC8 DIV 0xA8 0xB8 DUP7 CODESIZE 0x4F PUSH8 0xD95375C26DC77BED DUP16 PUSH31 0xD539D94969B947C064736F6C634300081B0033000000000000000000000000 ","sourceMap":"1713:10354:88:-:0;;;;;;;;;;;;-1:-1:-1;1713:10354:88;;;;11958:9;11954:69;;1713:10354;;;;;12033:25;;;;;;1713:10354;;;;;;;;;;;12033:25;11954:69;11994:18;;11970:1;11994:18;11970:1;11994:18;1713:10354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1581:26:47;1713:10354:88;1581:26:47;;;1713:10354:88;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;:::i;:::-;2533:13;1713:10354;;;;2533:13;1713:10354;;;2526:4;2533:13;:::i;:::-;1713:10354;9350:26;;;9346:85;;-1:-1:-1;1713:10354:88;;;;2533:13;1713:10354;9485:29;1713:10354;;9485:29;1713:10354;9346:85;9399:21;1713:10354;9399:21;1713:10354;9399:21;1713:10354;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;:::i;:::-;;;2533:13;1713:10354;2533:13;1713:10354;;2526:4;2533:13;:::i;:::-;1713:10354;;;;;9901:19;1713:10354;;;;;;;;9897:133;;10159:40;;10155:104;;1713:10354;;;;9901:19;1713:10354;;;;2533:13;1713:10354;;;;;;;10330:50;1713:10354;10330:50;;1713:10354;10155:104;10222:26;1713:10354;10222:26;1713:10354;10222:26;9897:133;9962:57;;;1713:10354;9962:57;1713:10354;;;9962:57;1713:10354;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;1083:103:42;;;:::i;:::-;2533:13:88;1713:10354;;;;2526:4;2533:13;:::i;:::-;3187:5;3633:3050;;1713:10354;;;6823:32;;7041:318;;1713:10354;;;;3964:33;;;;2526:4;3964:33;;;1713:10354;3964:33;;;;;;;;;;;;;;1713:10354;3964:33;;;1713:10354;4245:26;;;;:::i;:::-;1713:10354;4428:40;;;;;;1713:10354;;;;;4428:40;;1713:10354;;;4428:40;;;;1713:10354;;4428:40;;;;;;;;;;;;;1713:10354;4572:73;;;;;;1713:10354;;;;;;;;4572:73;;;;;1713:10354;4572:73;;;;1713:10354;2526:4;1713:10354;;;;;;;;;4572:73;;;;;;;;1713:10354;;;;;;4683:33;;;;;2526:4;4683:33;;1713:10354;4683:33;;;;;;;;;;;;;;;;1713:10354;;;;;;;;;;;4656:78;4749:20;;4745:1932;;1713:10354;;551:66:42;3051:52:43;1713:10354:88;4745:1932;6823:32;;1713:10354;;-1:-1:-1;1713:10354:88;;;;;4986:23;;;1713:10354;;5033:94;;;;;;;;;;;;5183:16;;;;;:::i;:::-;4745:1932;;;;;;;;;;;;;;;;5033:94;5084:20;;;;;;4982:1488;5247:296;;;;;;;;;;;;;;;;4982:1488;-1:-1:-1;;1713:10354:88;;;5199:47:60;;;;;;1713:10354:88;;;5199:47:60;;;1713:10354:88;;;;;;;;;;;;;;;;5199:47:60;;1713:10354:88;;;;5199:47:60;;;;;;;;;:::i;:::-;9770:199;;;;;;;;;;9985:80;;;4982:1488:88;5261:45:60;;;5257:201;;4982:1488:88;1713:10354;;;;;;5979:301;;;;;;1713:10354;;5979:301;1713:10354;5979:301;;;;;1713:10354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5979:301;;1713:10354;5979:301;;;;;;;;;;;;;;;;;4982:1488;1713:10354;;;;;;6307:53;;;;;1713:10354;6307:53;;2526:4;6307:53;;;1713:10354;;;;6307:53;;;;;;;;;;;;4982:1488;6307:57;;6303:149;;4982:1488;;;;6303:149;6399:30;;;;6307:53;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;6307:53;;;;;;;;;;1713:10354;;;;;;;;5979:301;;;;;;;;:::i;:::-;1713:10354;;5979:301;;;;;;;1713:10354;;;;5979:301;1713:10354;;;;;;;;;5979:301;1713:10354;;;5257:201:60;5349:43;5434:12;1713:10354:88;;;5349:43:60;;;;;;;;;1713:10354:88;;;;;;;5349:43:60;;;;;:::i;:::-;;;:::i;:::-;5434:12;;:::i;:::-;5257:201;;;;9985:80;9997:67;;-1:-1:-1;9997:15:60;;1713:10354:88;;;;10015:26:60;:30;;9997:67;9985:80;;;;9997:67;1713:10354:88;10048:16:60;9997:67;;5247:296:88;1713:10354;;;5387:20;;1713:10354;;;;;-1:-1:-1;1713:10354:88;-1:-1:-1;1713:10354:88;;;;;5387:20;;;;;;;;;;;;;;;5247:296;1713:10354;;;;;5453:67;;;1713:10354;5453:67;;;;;1713:10354;2526:4;1713:10354;;;;2526:4;1713:10354;;;;5453:67;;;;1713:10354;5453:67;;;;;;;;;;;;;;;;;5247:296;-1:-1:-1;5434:86:88;-1:-1:-1;5434:86:88;;-1:-1:-1;5199:47:60;5247:296:88;;5453:67;;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;;;;-1:-1:-1;1713:10354:88;;;5453:67;;;;;;;;1713:10354;;;;;;;;;5387:20;;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;;;;;;;;5387:20;;;;;;1713:10354;;;;5387:20;;;;;;1713:10354;;;;;;;;;4785:1882;6635:16;;;;;;;;;;;;;;;;:::i;:::-;4785:1882;;1713:10354;;;;;;;;;;4683:33;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;4683:33;;;;;;;;;4572:73;;;;;:::i;:::-;1713:10354;;4572:73;;;;1713:10354;;;;;;;;;4428:40;;;;;;:::i;:::-;1713:10354;4428:40;;;;;1713:10354;;;;;;;;;3964:33;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;3964:33;;;;;;;;;;1713:10354;;;;;;;;;7041:318;1713:10354;;;7082:19;1713:10354;;;;;;;;7078:271;1713:10354;;;;;;;7041:318;7132:109;7202:20;;1713:10354;7202:20;1713:10354;7202:20;7078:271;7286:48;;;;1713:10354;7286:48;1713:10354;;7286:48;1713:10354;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;:::i;:::-;;;2533:13;1713:10354;2533:13;1713:10354;;2526:4;2533:13;:::i;:::-;1713:10354;;;;;10556:19;1713:10354;;;;;;;;;10552:138;;1713:10354;;;;10556:19;1713:10354;;;;;;;;;;10762:52;1713:10354;10762:52;;1713:10354;10552:138;10626:53;;;1713:10354;10626:53;1713:10354;;;10626:53;1713:10354;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;1083:103:42;;;;;:::i;:::-;1713:10354:88;10973:13;;1713:10354;;10973:13;1713:10354;;10959:10;:27;10955:83;;1713:10354;;11053:13;10973;;;1713:10354;551:66:42;3051:52:43;1713:10354:88;11090:3;1713:10354;;11068:20;;;;;1713:10354;;;;;;;;;;;;;11176:33;1713:10354;11176:33;;11203:4;11176:33;;;1713:10354;11176:33;;;;;;;;;;;;;1713:10354;11176:33;;;11090:3;11228:16;;;;;;11224:102;;11090:3;;;1713:10354;11053:13;;;11224:102;11298:12;10959:10;;11298:12;;:::i;:::-;11224:102;;;;11176:33;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;;;;;;11176:33;;;;;;;11068:20;;;10955:83;11009:18;;1713:10354;11009:18;1713:10354;11009:18;1713:10354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;1581:26:47;1713:10354:88;;1581:26:47;;1713:10354:88;1581:26:47;;1124:6:45;;;1713:10354:88;1581:26:47;;;;;;;;;;1713:10354:88;1581:26:47;;;1713:10354:88;;;;;;;;1581:26:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;1713:10354:88;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;;;;:::i;:::-;;;;8290:19;1713:10354;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;;;1124:6:45;1713:10354:88;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;1083:103:42;;;:::i;:::-;2533:13:88;1713:10354;;;;2526:4;2533:13;:::i;:::-;3898:29;1713:10354;;;6823:32;;;;7041:318;;;;1713:10354;;;;;3964:33;;;;2526:4;3964:33;;;1713:10354;3964:33;;;;;;;;;;;;;;1713:10354;3964:33;;;1713:10354;4245:26;;;;:::i;:::-;1713:10354;4428:40;;;;;;1713:10354;;;;;4428:40;;1713:10354;;;4428:40;;;;1713:10354;;4428:40;;;;;;;;;;;;;1713:10354;4572:73;;;;;;1713:10354;;;;;;;;;4572:73;;;;;1713:10354;4572:73;;;;1713:10354;2526:4;;1713:10354;;;;;;;;;4572:73;;;;;;;;;;;1713:10354;;;;;4683:33;;;2526:4;4683:33;;;1713:10354;4683:33;;;;;;;;;;;;;;;;1713:10354;;;;;;;;;;;4749:20;4745:1932;;1713:10354;551:66:42;3051:52:43;1713:10354:88;4745:1932;4785:1882;;;-1:-1:-1;1713:10354:88;;;;;4986:23;;;1713:10354;;5084:20;;;;;;4982:1488;1713:10354;;;5387:20;;;;;;;;;;;;;;;;;;;;;;4982:1488;1713:10354;;;;;;;;5453:67;;;;;1713:10354;5453:67;;;;1713:10354;2526:4;1713:10354;;;;2526:4;1713:10354;;;;5453:67;;;;;;;;;;;4982:1488;1713:10354;;;;5199:47:60;;;;;;;;;;;1713:10354:88;;5199:47:60;;;;;;1713:10354:88;;;;;;;;;;;;;;;;;5199:47:60;;;;;;;;;:::i;:::-;9770:199;;;;;;;;;9985:80;;;4982:1488:88;5261:45:60;;;5257:201;;4982:1488:88;1713:10354;;;;;5979:301;;;;;;1713:10354;;5979:301;1713:10354;5979:301;;;;;1713:10354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5979:301;;1713:10354;5979:301;;;;;;;;;;;;;;;;;4982:1488;1713:10354;;;;;;6307:53;;;;;1713:10354;6307:53;;2526:4;6307:53;;;1713:10354;;;;6307:53;;;;;;;;;;;;4982:1488;6307:57;;6303:149;;4982:1488;;4785:1882;4745:1932;;;;;;;;;;;;;;6307:53;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;6307:53;;;;;;;;;5979:301;;;;;;;;:::i;:::-;1713:10354;;5979:301;;;;;;;5257:201:60;5349:43;5434:12;1713:10354:88;;;5349:43:60;;;;;;;;;1713:10354:88;;;;;;;5349:43:60;;;;;:::i;:::-;;;:::i;:::-;5434:12;;:::i;:::-;5257:201;;;;9985:80;9997:67;;-1:-1:-1;9997:15:60;;10015:26;;;:30;;9997:67;9985:80;;;;9997:67;1713:10354:88;10048:16:60;9997:67;;5453::88;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;5453:67;;;;;;;;;5387:20;;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;;;;;;;;5387:20;;;;;;;;;;;4785:1882;6635:16;;;;;;;;;;;;;;:::i;:::-;4785:1882;;1713:10354;;;;;;;;;;;4683:33;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;4683:33;;;;;;;;;;1713:10354;;;;;;;;;4572:73;;;;:::i;:::-;1713:10354;;4572:73;;;;1713:10354;;;;4572:73;1713:10354;;;;;;;;;4572:73;1713:10354;;;4428:40;;;;;;:::i;:::-;1713:10354;4428:40;;;;;1713:10354;;;;;;;;;3964:33;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;3964:33;;;;;;;;;;1713:10354;;;;;;;;;7041:318;1713:10354;;;7082:19;1713:10354;;;;;;;;7078:271;1713:10354;;;;;;;7041:318;7132:109;7202:20;;1713:10354;7202:20;1713:10354;7202:20;7078:271;7286:48;;;;1713:10354;7286:48;1713:10354;;7286:48;1713:10354;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;;8114:13;1713:10354;;;;;;;;;;;;;-1:-1:-1;;1713:10354:88;;;;;;;:::i;:::-;;;2533:13;1713:10354;2533:13;1713:10354;;2526:4;2533:13;:::i;:::-;1713:10354;;;;;;;;;9701:27;1713:10354;9701:27;;1713:10354;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;1931:430:33:-;1713:10354:88;;;2303:50:33;;;2320:22;;1713:10354:88;;;;;;;2303:50:33;;;1713:10354:88;;;;;;;;;;;;;;;2293:61:33;;1931:430;:::o;7711:142:88:-;1713:10354;;;7809:37;;1713:10354;7809:37;1713:10354;7809:37;1713:10354;1124:6:45;1713:10354:88;;7809:37;;;;;;;-1:-1:-1;7809:37:88;;;7802:44;;7711:142;:::o;7809:37::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;;;;;;;;7711:142;:::o;7809:37::-;;;-1:-1:-1;7809:37:88;;;1713:10354;;;-1:-1:-1;1713:10354:88;;;;;;;;;;;;;;;;;;;;;;;:::o;2255:438:45:-;;1713:10354:88;;;;2444:10:45;:25;2440:180;;2255:438;;:::o;2440:180::-;2501:20;2513:7;;;;2501:20;:::i;:::-;1713:10354:88;;;1530:22:45;1713:10354:88;1530:22:45;;;:6;;;:22;:6;;;1713:10354:88;1530:22:45;;;;;;;;1713:10354:88;1530:22:45;;;2513:7;1530:22;;;2440:180;1713:10354:88;;;1530:59:45;;;;;1713:10354:88;1530:59:45;;:22;:59;;1713:10354:88;2444:10:45;1713:10354:88;;;;;;;;;;1530:59:45;;;;;;;2513:7;1530:59;;;2440:180;1713:10354:88;;;2485:125:45;;2255:438::o;2485:125::-;2577:18;2513:7;2577:18;1530:22;2513:7;2577:18;1530:59;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354:88;;;;;;;;;;;;1530:59:45;;;;;;;;;:22;;;;;;;;;;;;;;:::i;:::-;;;;1192:349:42;551:66;2806:53:43;;1316:93:42;;1529:4;3051:52:43;;1192:349:42:o;1316:93::-;1368:30;-1:-1:-1;1368:30:42;;-1:-1:-1;1368:30:42;1219:160:60;1713:10354:88;;;1328:43:60;;;;1713:10354:88;;;;;1328:43:60;;;1713:10354:88;;;;;;;;;1328:43:60;;;;;;1713:10354:88;;1328:43:60;:::i;:::-;;:::i;:::-;1219:160::o;7371:294:88:-;;;1713:10354;7592:66;7371:294;1713:10354;;;;7498:13;1713:10354;;7554:21;;;;;:::i;:::-;1713:10354;;;;;;;;;;;;7592:66;;7371:294::o;8370:720:60:-;;-1:-1:-1;8507:421:60;8370:720;8507:421;;;;;;;;;;;;-1:-1:-1;8507:421:60;;8942:15;;1713:10354:88;;;;8960:26:60;:31;8942:68;8938:146;;8370:720;:::o;8938:146::-;1713:10354:88;9033:40:60;;-1:-1:-1;9033:40:60;1713:10354:88;9033:40:60;1713:10354:88;;-1:-1:-1;9033:40:60;8942:68;9009:1;8994:16;;8942:68;"},"methodIdentifiers":{"addProtocolFeeBurner(address)":"e20c482f","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getFeeRecipient()":"4ccb20c0","getProtocolFeeController()":"85f2dbd4","getTargetToken()":"80db0d51","getVault()":"8d928af8","isApprovedProtocolFeeBurner(address)":"9c5cee9b","recoverProtocolFees(address[])":"b0edcc53","removeProtocolFeeBurner(address)":"b11f061e","setFeeRecipient(address)":"e74b981b","setTargetToken(address)":"1b66cb00","sweepProtocolFeesForToken(address,address,uint256,uint256,address)":"b9746995","sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)":"88f6d2a4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BurnerDidNotConsumeAllowance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidFeeRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeBurner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTargetToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerNotAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"UnsupportedProtocolFeeBurner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnwrapIsNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"FeeRecipientSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeSwept\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TargetTokenSet\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"addProtocolFeeBurner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTargetToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"isApprovedProtocolFeeBurner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"feeTokens\",\"type\":\"address[]\"}],\"name\":\"recoverProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"removeProtocolFeeBurner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"setFeeRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"}],\"name\":\"setTargetToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"feeBurner\",\"type\":\"address\"}],\"name\":\"sweepProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC4626\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"feeBurner\",\"type\":\"address\"}],\"name\":\"sweepProtocolFeesForWrappedToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This withdraws all protocol fees previously collected and allocated to the protocol by the `ProtocolFeeController`, processes them with a configurable \\\"burner\\\" (e.g., from CowSwap) and forwards them to a recipient address. An off-chain process can call `collectAggregateFees(pool)` on the fee controller for a given pool, which will collect and allocate the fees to the protocol and pool creator. `getProtocolFeeAmounts(pool)` returns the fee amounts available for withdrawal. If these are great enough, `sweepProtocolFeesForToken` here will withdraw, convert, and forward them to the final recipient.\",\"errors\":{\"BurnerDidNotConsumeAllowance()\":[{\"details\":\"The fee sweeper approves the burner to pull tokens. If it doesn't do so, revert to avoid a \\\"hanging\\\" approval that could be exploited later.\"}],\"ProtocolFeeBurnerAlreadyAdded(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of an approved protocol fee burner\"}}],\"ProtocolFeeBurnerNotAdded(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of a protocol fee burner to be removed from the allowlist\"}}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}],\"UnsupportedProtocolFeeBurner(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of the unsupported fee burner\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"FeeRecipientSet(address)\":{\"params\":{\"feeRecipient\":\"The final destination of collected protocol fees\"}},\"ProtocolFeeBurnerAdded(address)\":{\"details\":\"`sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\",\"params\":{\"protocolFeeBurner\":\"The address of the approved protocol fee burner that was added\"}},\"ProtocolFeeBurnerRemoved(address)\":{\"details\":\"`sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\",\"params\":{\"protocolFeeBurner\":\"The address of the approved protocol fee burner that was removed\"}},\"ProtocolFeeSwept(address,address,uint256,address)\":{\"details\":\"This can happen if no target token or burner contract was specified, or the fee token is the target token.\",\"params\":{\"feeToken\":\"The token the fee was collected in (also the target token in this case; no swap necessary)\",\"feeTokenAmount\":\"The number of feeTokens\",\"pool\":\"The pool on which the fee was collected\",\"recipient\":\"The recipient of the fee tokens\"}},\"TargetTokenSet(address)\":{\"params\":{\"token\":\"The preferred token for receiving protocol fees\"}}},\"kind\":\"dev\",\"methods\":{\"addProtocolFeeBurner(address)\":{\"details\":\"This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol fee burners.\",\"params\":{\"protocolFeeBurner\":\"The address of an approved protocol fee burner to be added\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getFeeRecipient()\":{\"details\":\"Can be changed by `setFeeRecipient`.\",\"returns\":{\"_0\":\"feeRecipient The current fee recipient\"}},\"getProtocolFeeController()\":{\"details\":\"It is not immutable in the Vault, so we need to fetch it every time.\",\"returns\":{\"_0\":\"protocolFeeController The address of the current `ProtocolFeeController`\"}},\"getTargetToken()\":{\"details\":\"This is the token the burner will swap all fee tokens for. Can be changed by `setTargetToken`.\",\"returns\":{\"_0\":\"targetToken The current target token\"}},\"getVault()\":{\"details\":\"This function is virtual to allow for overriding in derived contracts which also inherits contracts with `getVault()` definition.\",\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isApprovedProtocolFeeBurner(address)\":{\"params\":{\"protocolFeeBurner\":\"The address to be checked\"},\"returns\":{\"_0\":\"isApproved True if the given address is on the approved protocol fee burner allowlist\"}},\"recoverProtocolFees(address[])\":{\"details\":\"It will recover the full balance of all the tokens. This can only be called by the `feeRecipient`.\",\"params\":{\"feeTokens\":\"The tokens to recover\"}},\"removeProtocolFeeBurner(address)\":{\"details\":\"This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol fee burners.\",\"params\":{\"protocolFeeBurner\":\"The address of a protocol fee burner on the allowlist to be removed\"}},\"setFeeRecipient(address)\":{\"details\":\"This is a permissioned function.\",\"params\":{\"feeRecipient\":\"The address of the new fee recipient\"}},\"setTargetToken(address)\":{\"details\":\"This is the token for which the burner will attempt to swap all collected fee tokens.\",\"params\":{\"targetToken\":\"The address of the target token\"}},\"sweepProtocolFeesForToken(address,address,uint256,uint256,address)\":{\"details\":\"This will withdraw the fee token from the controller to this contract, and attempt to convert and forward the proceeds to the fee recipient. Note that this requires governance to grant this contract permission to call `withdrawProtocolFeesForToken` on the `ProtocolFeeController`. This is a permissioned call, since it involves a swap and a permissionless sweep could be triggered at times disadvantageous to the protocol (e.g., flash crashes). The general design is for an off-chain process to periodically collect fees from the Vault and check the protocol fee amounts available for withdrawal. Once these are greater than a threshold, compute the expected proceeds to determine the limits (amount and deadline), then call the sweeper to put in the order with the burner.\",\"params\":{\"deadline\":\"Deadline for the burn operation (swap), after which it will revert\",\"feeBurner\":\"The protocol fee burner to be used (or the zero address to fall back on direct transfer)\",\"feeToken\":\"The fee token in the pool\",\"minTargetTokenAmountOut\":\"The minimum number of target tokens to be received\",\"pool\":\"The pool that incurred the fees we're withdrawing\"}},\"sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)\":{\"params\":{\"deadline\":\"Deadline for the burn operation (swap), after which it will revert\",\"feeBurner\":\"The protocol fee burner to be used (or the zero address to fall back on direct transfer)\",\"feeToken\":\"The fee token in the pool\",\"minTargetTokenAmountOut\":\"The minimum number of target tokens to be received\",\"pool\":\"The pool that incurred the fees we're withdrawing\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BurnerDidNotConsumeAllowance()\":[{\"notice\":\"The burner did not consume its entire allowance.\"}],\"CannotReceiveEth()\":[{\"notice\":\"All pool tokens are ERC20, so this contract should not handle ETH.\"}],\"InvalidFeeRecipient()\":[{\"notice\":\"The fee recipient is invalid.\"}],\"InvalidProtocolFeeBurner()\":[{\"notice\":\"The protocol fee burner to be added is invalid.\"}],\"InvalidTargetToken()\":[{\"notice\":\"The target token is invalid.\"}],\"ProtocolFeeBurnerAlreadyAdded(address)\":[{\"notice\":\"Protocol fee burners can only be added to the allowlist once.\"}],\"ProtocolFeeBurnerNotAdded(address)\":[{\"notice\":\"Protocol fee burners must be added to the allowlist before being removed.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"UnsupportedProtocolFeeBurner(address)\":[{\"notice\":\"The specified fee burner has not been approved.\"}],\"UnwrapIsNotAllowed()\":[{\"notice\":\"Unwrapping is not allowed for the operation.\"}]},\"events\":{\"FeeRecipientSet(address)\":{\"notice\":\"Emitted when the fee recipient address is set or updated.\"},\"ProtocolFeeBurnerAdded(address)\":{\"notice\":\"Emitted when a burner is added to the protocol fee burner allowlist.\"},\"ProtocolFeeBurnerRemoved(address)\":{\"notice\":\"Emitted when a burner is removed from the protocol fee burner allowlist.\"},\"ProtocolFeeSwept(address,address,uint256,address)\":{\"notice\":\"Emitted when a fee token is transferred directly, vs. calling the burner.\"},\"TargetTokenSet(address)\":{\"notice\":\"Emitted when the target token is set or updated.\"}},\"kind\":\"user\",\"methods\":{\"addProtocolFeeBurner(address)\":{\"notice\":\"Add an approved fee burner to the allowlist.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getFeeRecipient()\":{\"notice\":\"Getter for the current fee recipient.\"},\"getProtocolFeeController()\":{\"notice\":\"Return the address of the current `ProtocolFeeController` from the Vault.\"},\"getTargetToken()\":{\"notice\":\"Getter for the target token.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isApprovedProtocolFeeBurner(address)\":{\"notice\":\"Check whether a given address corresponds to an approved protocol fee burner.\"},\"recoverProtocolFees(address[])\":{\"notice\":\"Retrieve any tokens \\\"stuck\\\" in this contract (e.g., dust, or failed conversions).\"},\"removeProtocolFeeBurner(address)\":{\"notice\":\"Remove a fee burner from the allowlist.\"},\"setFeeRecipient(address)\":{\"notice\":\"Update the fee recipient address.\"},\"setTargetToken(address)\":{\"notice\":\"Update the address of the target token.\"},\"sweepProtocolFeesForToken(address,address,uint256,uint256,address)\":{\"notice\":\"Withdraw, convert, and forward protocol fees for a given pool and token.\"},\"sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)\":{\"notice\":\"The same as `sweepProtocolFeesForToken`, but for wrapped tokens.\"}},\"notice\":\"Withdraw protocol fees, convert them to a target token, and forward to a recipient.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ProtocolFeeSweeper.sol\":\"ProtocolFeeSweeper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x11ec2b653633cbcc6a99d426df178007a98d1154a39a1ada961239be39eec069\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://40eed42ee57746bbf4711bb4aee856328cd70cc02aa3ff05e8dd719868fcd524\",\"dweb:/ipfs/QmX5uAoB9W6UUehgSRvVW6hun3XE53eZwKsm4kHVqtJs8C\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/ProtocolFeeSweeper.sol\":{\"keccak256\":\"0x111475fcdfd10e5e6c6b054e6b37cc5a89725050c73cfd338d13497a425931a3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6dc090a277adf9e63a93f1f0db8e15ebfb354f30e415a5bc566087f6284beeb7\",\"dweb:/ipfs/QmRequjbKYe8nLLdkwqHEw6eakHLQe1MYAyRuQZj1zLM7y\"]}},\"version\":1}"}},"contracts/TokenPairRegistry.sol":{"TokenPairRegistry":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"buffer","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"EmptyPath","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"address","name":"buffer","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"InvalidBufferPath","type":"error"},{"inputs":[{"internalType":"address","name":"poolOrBuffer","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"InvalidRemovePath","type":"error"},{"inputs":[{"internalType":"address","name":"path","type":"address"}],"name":"InvalidSimplePath","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"pathsLength","type":"uint256"}],"name":"PathAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"pathsLength","type":"uint256"}],"name":"PathRemoved","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct SwapPathStep[]","name":"steps","type":"tuple[]"}],"name":"addPath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolOrBuffer","type":"address"}],"name":"addSimplePath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getPathAt","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct SwapPathStep[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getPathCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getPaths","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct SwapPathStep[][]","name":"","type":"tuple[][]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removePathAtIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolOrBuffer","type":"address"}],"name":"removeSimplePath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461011f57601f611e7438819003918201601f19168301916001600160401b0383118484101761012357808492604094855283398101031261011f5780516001600160a01b03918282169081830361011f576020015183811680910361011f57801561010c5760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100fd5760a052611d3c9081610138823960805181611796015260a05181818160e80152818161013d0152818161050e0152818161079b01528181610a4501528181610be801526119d80152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c8063057074ff1461119357806332fffdbd14611074578063715018a614610ffc57806379ba509714610fa55780637c7d370a14610e55578063815ca70f14610910578063851c1bb3146108c05780638da5cb5b1461089b57806394ee0a3b1461085b578063a89b1128146107f8578063aaabadc514610755578063bc138aa3146104e1578063e30c3978146104bb578063f2fde38b1461043b578063f335b520146101105763fbfa77cf146100c9575f80fd5b3461010c575f60031936011261010c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b3461010c5760208060031936011261010c5761012a611237565b61013261184f565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016604051937fc673bdaf0000000000000000000000000000000000000000000000000000000085528284169081600487015260249581818881875afa9081156102e6575f9161041e575b50156102f157505f9085604051809481937fca4f280300000000000000000000000000000000000000000000000000000000835260048301525afa9081156102e6575f916102c4575b508051925f198401938411610298575f5b84811061020957005b600180820180831161026c57815b610226575b5050600101610200565b84518110156102675781809161026088610240878a611656565b51168961024d848b611656565b511661025a81838b611cbd565b88611cbd565b0190610217565b61021c565b877f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b847f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b6102e091503d805f833e6102d881836112e1565b810190611904565b846101ef565b6040513d5f823e3d90fd5b94935091506040517f6844846b00000000000000000000000000000000000000000000000000000000815282600482015284818581855afa9081156102e6575f916103f1575b50156103c7578390604051938480927f0387587d0000000000000000000000000000000000000000000000000000000082528560048301525afa9182156102e657610396935f93610398575b5050610390818381611c16565b80611c16565b005b6103b8929350803d106103c0575b6103b081836112e1565b8101906117d0565b908380610383565b503d6103a6565b507fb309199b000000000000000000000000000000000000000000000000000000005f526004525ffd5b6104119150853d8711610417575b61040981836112e1565b8101906117ef565b85610337565b503d6103ff565b6104359150823d84116104175761040981836112e1565b876101a6565b3461010c57602060031936011261010c57610454611237565b61045c61188c565b6001600160a01b0380911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b3461010c575f60031936011261010c5760206001600160a01b0360015416604051908152f35b3461010c5760208060031936011261010c576104fb611237565b61050361184f565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016604051937fc673bdaf0000000000000000000000000000000000000000000000000000000085528284169081600487015260249581818881875afa9081156102e6575f91610738575b501561065757505f9085604051809481937fca4f280300000000000000000000000000000000000000000000000000000000835260048301525afa9081156102e6575f9161063d575b508051925f198401938411610298575f5b8481106105da57005b600180820180831161026c57815b6105f7575b50506001016105d1565b84518110156106385781809161063188610611878a611656565b51168961061e848b611656565b511661062b81838b611aa4565b88611aa4565b01906105e8565b6105ed565b61065191503d805f833e6102d881836112e1565b846105c0565b94935091506040517f6844846b00000000000000000000000000000000000000000000000000000000815282600482015284818581855afa9081156102e6575f9161071b575b50156103c7578390604051938480927f0387587d0000000000000000000000000000000000000000000000000000000082528560048301525afa9182156102e657610396935f936106fc575b50506106f6818381611aa4565b80611aa4565b610713929350803d106103c0576103b081836112e1565b9083806106e9565b6107329150853d87116104175761040981836112e1565b8561069d565b61074f9150823d84116104175761040981836112e1565b87610577565b3461010c575f60031936011261010c576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa9081156102e6576020925f926107d9575b5060405191168152f35b6107f1919250833d85116103c0576103b081836112e1565b90836107cf565b3461010c57602060031936011261010c57610811611237565b61081961184f565b6001600160a01b035f54163314610833576103969061189f565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461010c57604060031936011261010c57610885610877611237565b61087f61124d565b90611807565b5f526002602052602060405f2054604051908152f35b3461010c575f60031936011261010c5760206001600160a01b035f5416604051908152f35b3461010c57602060031936011261010c576004357fffffffff000000000000000000000000000000000000000000000000000000008116810361010c5761090860209161176b565b604051908152f35b3461010c57604060031936011261010c57610929611237565b60243567ffffffffffffffff811161010c573660238201121561010c57806004013561095481611322565b9161096260405193846112e1565b81835260208301602460608094028301019136831161010c57602401905b828210610df357858561099161184f565b805115610dcb5780515f198101908111610d595760206109b96001600160a01b039284611656565b51015116906109c88284611807565b5f9390815b8351861015610cfe576109e08685611656565b51604081015190919015610b8b576001600160a01b03825116906001600160a01b03602084015116916040517f0387587d0000000000000000000000000000000000000000000000000000000081528160048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa80156102e6576001600160a01b03915f91610b6c575b5016918215610b40576001600160a01b031691808303610aec5750808303610abb575050506001600160a01b0360206001925b0151169501946109cd565b7f29198c3d000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b828203610b0e578303610abb575050506001600160a01b036020600192610ab0565b507f29198c3d000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b507f85f41299000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b610b85915060203d6020116103c0576103b081836112e1565b8b610a7d565b926001600160a01b038293959697925116906001600160a01b0360208501511695604051987fca4f2803000000000000000000000000000000000000000000000000000000008a528360048b01525f8a6024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa998a156102e6575f9a610ce2575b505f985f935f5b8c51811015610c82578c6001600160a01b03610c3b8383611656565b51166001600160a01b038c1614610c79575b6001600160a01b03610c60838e93611656565b511614610c70575b600101610c1f565b60019550610c68565b60019c50610c4d565b509750975097909493985015908115610cd9575b50610cae57506001600160a01b036020600192610ab0565b7fb309199b000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90501588610c96565b610cf7919a503d805f833e6102d881836112e1565b988a610c18565b508284825f52600260205260405f2093610d178561166a565b50505f5b8351811015610d86578554905f198201918211610d5957610d53610d416001938961133a565b50610d4c8388611656565b51906116a2565b01610d1b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50835f5260026020527f0836045dc838da47be101a8d10036b82ec004688d856daa53cd0e56807d3bfca60206001600160a01b0360405f2054936040519485521692a3005b7f20a2d33d000000000000000000000000000000000000000000000000000000005f5260045ffd5b838236031261010c5760405190610e0982611298565b6001600160a01b038335818116810361010c5783526020840135908116810361010c576020830152604083013590811515820361010c5782602092604088950152815201910190610980565b3461010c57604060031936011261010c57610e71610877611237565b5f5260206002815260405f208054610e8881611322565b90610e9660405192836112e1565b80825283820180935f52845f20855f925b848410610f87575084866040519283928184019082855251809152604084019160408260051b86010193925f905b838210610ee25786860387f35b919395947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08592949682030183528651908280835192838152019201905f905b808210610f4357505050908060019297019201920186959492939193610ed5565b9193610f7a6001929486519060406060926001600160a01b0380825116845260208201511660208401520151151560408201520190565b9401920186939291610f22565b6001918291610f958561137c565b8152019201920191908690610ea7565b3461010c575f60031936011261010c57336001600160a01b036001541603610fd0576103963361189f565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b3461010c575f60031936011261010c5761101461188c565b5f6001600160a01b037fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461010c5761108236611263565b61108a61184f565b6110948284611807565b5f52600260205260405f20908154908181101561116b576001821180611157575b611102575b50506020816110e97fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da936115a8565b54926001600160a01b03809160405195865216941692a3005b90915f198301928311610d595761115160209261114b6111437fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da968561133a565b50918461133a565b9061156b565b916110ba565b505f198201828111610d59578114156110b5565b7f4e23d035000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461010c576111ab6111a436611263565b9291611807565b5f526111ca6111c4602092600260205260405f2061133a565b5061137c565b60405190602082016020835281518091526020604084019201935f5b8281106111f35784840385f35b9091928261122b60019288519060406060926001600160a01b0380825116845260208201511660208401520151151560408201520190565b960195939291016111e6565b600435906001600160a01b038216820361010c57565b602435906001600160a01b038216820361010c57565b600319606091011261010c576001600160a01b0390600435828116810361010c5791602435908116810361010c579060443590565b6060810190811067ffffffffffffffff8211176112b457604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176112b457604052565b67ffffffffffffffff81116112b45760051b60200190565b805482101561134f575f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b90815461138881611322565b9260409361139960405191826112e1565b82815280946020809201925f5260205f20905f935b8585106113bd57505050505050565b60028460019284516113ce81611298565b60ff6001600160a01b03808954168352868901549081168584015260a01c161515868201528152019301940193916113ae565b818114611567578154916801000000000000000083116112b4578154838355808410611501575b505f5260205f20905f5260205f20905f905b8382106114475750505050565b806001918403611462575b600280910193019101909161143a565b6114fc6001600160a01b0360ff81845416917fffffffffffffffffffffffff00000000000000000000000000000000000000009283895416178855859283890193860191825416908454161783555460a01c167fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff0000000000000000000000000000000000000000835492151560a01b169116179055565b611452565b60017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083168303610d595785168503610d5957835f5260205f209160011b8201918560011b015b828110611557575050611428565b5f80825582820155600201611549565b5050565b919061157c5761157a91611401565b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b80548015611629575f1901906115be828261133a565b61157c578054905f8155816115d257505055565b6001907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83168303610d59575f5260205f209160011b8201915b8281106116195750505055565b5f8082558282015560020161160c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b805182101561134f5760209160051b010190565b8054680100000000000000008110156112b45761168c9160018201815561133a565b9091565b80541561134f575f5260205f20905f90565b90815491680100000000000000008310156112b4576001830180825583101561134f5761157a926040915f5260205f209060011b01916001600160a01b0392600184835116917fffffffffffffffffffffffff00000000000000000000000000000000000000009283825416178155019360208301511690845416178355015115157fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff0000000000000000000000000000000000000000835492151560a01b169116179055565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526117ca81611298565b51902090565b9081602091031261010c57516001600160a01b038116810361010c5790565b9081602091031261010c5751801515810361010c5790565b6040519060208201927fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16845260601b166034820152602881526117ca81611298565b61188561187e7fffffffff000000000000000000000000000000000000000000000000000000005f351661176b565b339061198e565b1561083357565b6001600160a01b035f54163303610fd057565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f546001600160a01b0380921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b602090818184031261010c5780519067ffffffffffffffff821161010c57019180601f8401121561010c57825161193a81611322565b9361194860405195866112e1565b818552838086019260051b82010192831161010c578301905b82821061196f575050505090565b81516001600160a01b038116810361010c578152908301908301611961565b906001600160a01b039081805f54169116908114611a9c57604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156102e65785935f95611a78575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa9182156102e6575f92611a5f57505090565b611a759250803d106104175761040981836112e1565b90565b606492919550611a9490853d87116103c0576103b081836112e1565b949091611a0a565b505050600190565b91611aaf8183611807565b5f526020600260205260409160405f205f5b815480821015611bd357611ad5828461133a565b5060019081808254149182611bb2575b82611b8f575b5050611afb575050600101611ac1565b9080929697985011611b4c575b507fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da9350611b35816115a8565b5493519384526001600160a01b03908116941692a3565b5f198101908111610d59577fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da9461114b611143611b89938561133a565b5f611b08565b611b9a919250611690565b5001546001600160a01b03868116911614815f611aeb565b9150611bbd82611690565b50546001600160a01b038c811691161491611ae5565b8684897f3a9458d9000000000000000000000000000000000000000000000000000000005f526001600160a01b039283809216600452166024521660445260645ffd5b611c208383611807565b6001600160a01b03809416938060405193611c3a85611298565b16835284602084015260016040840152815f52600260205260405f2091611c608361166a565b505082545f198101908111610d59577f0836045dc838da47be101a8d10036b82ec004688d856daa53cd0e56807d3bfca94611ca0611ca69260209661133a565b506116a2565b5f526002825260405f2054936040519485521692a3565b611cc78383611807565b6001600160a01b03809416938060405193611ce185611298565b1683528460208401525f6040840152815f52600260205260405f2091611c608361166a56fea2646970667358221220c8a382897f62aa9b3b813657f2d689d3d97b0b2bc9ef3117f10b3d087f5fa65564736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x11F JUMPI PUSH1 0x1F PUSH2 0x1E74 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x123 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x11F JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x11F JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x11F JUMPI DUP1 ISZERO PUSH2 0x10C JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xFD JUMPI PUSH1 0xA0 MSTORE PUSH2 0x1D3C SWAP1 DUP2 PUSH2 0x138 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x1796 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xE8 ADD MSTORE DUP2 DUP2 PUSH2 0x13D ADD MSTORE DUP2 DUP2 PUSH2 0x50E ADD MSTORE DUP2 DUP2 PUSH2 0x79B ADD MSTORE DUP2 DUP2 PUSH2 0xA45 ADD MSTORE DUP2 DUP2 PUSH2 0xBE8 ADD MSTORE PUSH2 0x19D8 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x57074FF EQ PUSH2 0x1193 JUMPI DUP1 PUSH4 0x32FFFDBD EQ PUSH2 0x1074 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xFFC JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xFA5 JUMPI DUP1 PUSH4 0x7C7D370A EQ PUSH2 0xE55 JUMPI DUP1 PUSH4 0x815CA70F EQ PUSH2 0x910 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x8C0 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x89B JUMPI DUP1 PUSH4 0x94EE0A3B EQ PUSH2 0x85B JUMPI DUP1 PUSH4 0xA89B1128 EQ PUSH2 0x7F8 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x755 JUMPI DUP1 PUSH4 0xBC138AA3 EQ PUSH2 0x4E1 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x4BB JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x43B JUMPI DUP1 PUSH4 0xF335B520 EQ PUSH2 0x110 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0xC9 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x12A PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x132 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP4 PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP3 DUP5 AND SWAP1 DUP2 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x24 SWAP6 DUP2 DUP2 DUP9 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x41E JUMPI JUMPDEST POP ISZERO PUSH2 0x2F1 JUMPI POP PUSH0 SWAP1 DUP6 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x2C4 JUMPI JUMPDEST POP DUP1 MLOAD SWAP3 PUSH0 NOT DUP5 ADD SWAP4 DUP5 GT PUSH2 0x298 JUMPI PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x209 JUMPI STOP JUMPDEST PUSH1 0x1 DUP1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x26C JUMPI DUP2 JUMPDEST PUSH2 0x226 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x200 JUMP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x267 JUMPI DUP2 DUP1 SWAP2 PUSH2 0x260 DUP9 PUSH2 0x240 DUP8 DUP11 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND DUP10 PUSH2 0x24D DUP5 DUP12 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND PUSH2 0x25A DUP2 DUP4 DUP12 PUSH2 0x1CBD JUMP JUMPDEST DUP9 PUSH2 0x1CBD JUMP JUMPDEST ADD SWAP1 PUSH2 0x217 JUMP JUMPDEST PUSH2 0x21C JUMP JUMPDEST DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x2E0 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2D8 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1904 JUMP JUMPDEST DUP5 PUSH2 0x1EF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP5 SWAP4 POP SWAP2 POP PUSH1 0x40 MLOAD PUSH32 0x6844846B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 DUP6 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x3F1 JUMPI JUMPDEST POP ISZERO PUSH2 0x3C7 JUMPI DUP4 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x387587D00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP6 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2E6 JUMPI PUSH2 0x396 SWAP4 PUSH0 SWAP4 PUSH2 0x398 JUMPI JUMPDEST POP POP PUSH2 0x390 DUP2 DUP4 DUP2 PUSH2 0x1C16 JUMP JUMPDEST DUP1 PUSH2 0x1C16 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3B8 SWAP3 SWAP4 POP DUP1 RETURNDATASIZE LT PUSH2 0x3C0 JUMPI JUMPDEST PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x17D0 JUMP JUMPDEST SWAP1 DUP4 DUP1 PUSH2 0x383 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3A6 JUMP JUMPDEST POP PUSH32 0xB309199B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x411 SWAP2 POP DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x417 JUMPI JUMPDEST PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x17EF JUMP JUMPDEST DUP6 PUSH2 0x337 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3FF JUMP JUMPDEST PUSH2 0x435 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP8 PUSH2 0x1A6 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x454 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x45C PUSH2 0x188C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x4FB PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x503 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP4 PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP3 DUP5 AND SWAP1 DUP2 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x24 SWAP6 DUP2 DUP2 DUP9 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x738 JUMPI JUMPDEST POP ISZERO PUSH2 0x657 JUMPI POP PUSH0 SWAP1 DUP6 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x63D JUMPI JUMPDEST POP DUP1 MLOAD SWAP3 PUSH0 NOT DUP5 ADD SWAP4 DUP5 GT PUSH2 0x298 JUMPI PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x5DA JUMPI STOP JUMPDEST PUSH1 0x1 DUP1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x26C JUMPI DUP2 JUMPDEST PUSH2 0x5F7 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x5D1 JUMP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x638 JUMPI DUP2 DUP1 SWAP2 PUSH2 0x631 DUP9 PUSH2 0x611 DUP8 DUP11 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND DUP10 PUSH2 0x61E DUP5 DUP12 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND PUSH2 0x62B DUP2 DUP4 DUP12 PUSH2 0x1AA4 JUMP JUMPDEST DUP9 PUSH2 0x1AA4 JUMP JUMPDEST ADD SWAP1 PUSH2 0x5E8 JUMP JUMPDEST PUSH2 0x5ED JUMP JUMPDEST PUSH2 0x651 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2D8 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP5 PUSH2 0x5C0 JUMP JUMPDEST SWAP5 SWAP4 POP SWAP2 POP PUSH1 0x40 MLOAD PUSH32 0x6844846B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 DUP6 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x71B JUMPI JUMPDEST POP ISZERO PUSH2 0x3C7 JUMPI DUP4 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x387587D00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP6 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2E6 JUMPI PUSH2 0x396 SWAP4 PUSH0 SWAP4 PUSH2 0x6FC JUMPI JUMPDEST POP POP PUSH2 0x6F6 DUP2 DUP4 DUP2 PUSH2 0x1AA4 JUMP JUMPDEST DUP1 PUSH2 0x1AA4 JUMP JUMPDEST PUSH2 0x713 SWAP3 SWAP4 POP DUP1 RETURNDATASIZE LT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP1 DUP4 DUP1 PUSH2 0x6E9 JUMP JUMPDEST PUSH2 0x732 SWAP2 POP DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP6 PUSH2 0x69D JUMP JUMPDEST PUSH2 0x74F SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP8 PUSH2 0x577 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0x7D9 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x7F1 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x7CF JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x811 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x819 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND CALLER EQ PUSH2 0x833 JUMPI PUSH2 0x396 SWAP1 PUSH2 0x189F JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x885 PUSH2 0x877 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x87F PUSH2 0x124D JUMP JUMPDEST SWAP1 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI PUSH2 0x908 PUSH1 0x20 SWAP2 PUSH2 0x176B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x929 PUSH2 0x1237 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10C JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x10C JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x954 DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP2 PUSH2 0x962 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x12E1 JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x24 PUSH1 0x60 DUP1 SWAP5 MUL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x10C JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xDF3 JUMPI DUP6 DUP6 PUSH2 0x991 PUSH2 0x184F JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xDCB JUMPI DUP1 MLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0xD59 JUMPI PUSH1 0x20 PUSH2 0x9B9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP5 PUSH2 0x1656 JUMP JUMPDEST MLOAD ADD MLOAD AND SWAP1 PUSH2 0x9C8 DUP3 DUP5 PUSH2 0x1807 JUMP JUMPDEST PUSH0 SWAP4 SWAP1 DUP2 JUMPDEST DUP4 MLOAD DUP7 LT ISZERO PUSH2 0xCFE JUMPI PUSH2 0x9E0 DUP7 DUP6 PUSH2 0x1656 JUMP JUMPDEST MLOAD PUSH1 0x40 DUP2 ADD MLOAD SWAP1 SWAP2 SWAP1 ISZERO PUSH2 0xB8B JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 MLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 ADD MLOAD AND SWAP2 PUSH1 0x40 MLOAD PUSH32 0x387587D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH0 SWAP2 PUSH2 0xB6C JUMPI JUMPDEST POP AND SWAP2 DUP3 ISZERO PUSH2 0xB40 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP1 DUP4 SUB PUSH2 0xAEC JUMPI POP DUP1 DUP4 SUB PUSH2 0xABB JUMPI POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH1 0x1 SWAP3 JUMPDEST ADD MLOAD AND SWAP6 ADD SWAP5 PUSH2 0x9CD JUMP JUMPDEST PUSH32 0x29198C3D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP3 DUP3 SUB PUSH2 0xB0E JUMPI DUP4 SUB PUSH2 0xABB JUMPI POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH2 0xAB0 JUMP JUMPDEST POP PUSH32 0x29198C3D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST POP PUSH32 0x85F4129900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xB85 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP12 PUSH2 0xA7D JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 SWAP4 SWAP6 SWAP7 SWAP8 SWAP3 MLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP6 ADD MLOAD AND SWAP6 PUSH1 0x40 MLOAD SWAP9 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP4 PUSH1 0x4 DUP12 ADD MSTORE PUSH0 DUP11 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP10 DUP11 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP11 PUSH2 0xCE2 JUMPI JUMPDEST POP PUSH0 SWAP9 PUSH0 SWAP4 PUSH0 JUMPDEST DUP13 MLOAD DUP2 LT ISZERO PUSH2 0xC82 JUMPI DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC3B DUP4 DUP4 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND EQ PUSH2 0xC79 JUMPI JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC60 DUP4 DUP15 SWAP4 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND EQ PUSH2 0xC70 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0xC1F JUMP JUMPDEST PUSH1 0x1 SWAP6 POP PUSH2 0xC68 JUMP JUMPDEST PUSH1 0x1 SWAP13 POP PUSH2 0xC4D JUMP JUMPDEST POP SWAP8 POP SWAP8 POP SWAP8 SWAP1 SWAP5 SWAP4 SWAP9 POP ISZERO SWAP1 DUP2 ISZERO PUSH2 0xCD9 JUMPI JUMPDEST POP PUSH2 0xCAE JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH2 0xAB0 JUMP JUMPDEST PUSH32 0xB309199B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP ISZERO DUP9 PUSH2 0xC96 JUMP JUMPDEST PUSH2 0xCF7 SWAP2 SWAP11 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2D8 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP9 DUP11 PUSH2 0xC18 JUMP JUMPDEST POP DUP3 DUP5 DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP4 PUSH2 0xD17 DUP6 PUSH2 0x166A JUMP JUMPDEST POP POP PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0xD86 JUMPI DUP6 SLOAD SWAP1 PUSH0 NOT DUP3 ADD SWAP2 DUP3 GT PUSH2 0xD59 JUMPI PUSH2 0xD53 PUSH2 0xD41 PUSH1 0x1 SWAP4 DUP10 PUSH2 0x133A JUMP JUMPDEST POP PUSH2 0xD4C DUP4 DUP9 PUSH2 0x1656 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x16A2 JUMP JUMPDEST ADD PUSH2 0xD1B JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP4 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x836045DC838DA47BE101A8D10036B82EC004688D856DAA53CD0E56807D3BFCA PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 STOP JUMPDEST PUSH32 0x20A2D33D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLDATASIZE SUB SLT PUSH2 0x10C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0xE09 DUP3 PUSH2 0x1298 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI DUP4 MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x10C JUMPI DUP3 PUSH1 0x20 SWAP3 PUSH1 0x40 DUP9 SWAP6 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x980 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0xE71 PUSH2 0x877 PUSH2 0x1237 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x20 PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD PUSH2 0xE88 DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP1 PUSH2 0xE96 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP1 DUP3 MSTORE DUP4 DUP3 ADD DUP1 SWAP4 PUSH0 MSTORE DUP5 PUSH0 KECCAK256 DUP6 PUSH0 SWAP3 JUMPDEST DUP5 DUP5 LT PUSH2 0xF87 JUMPI POP DUP5 DUP7 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP3 DUP2 DUP5 ADD SWAP1 DUP3 DUP6 MSTORE MLOAD DUP1 SWAP2 MSTORE PUSH1 0x40 DUP5 ADD SWAP2 PUSH1 0x40 DUP3 PUSH1 0x5 SHL DUP7 ADD ADD SWAP4 SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xEE2 JUMPI DUP7 DUP7 SUB DUP8 RETURN JUMPDEST SWAP2 SWAP4 SWAP6 SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP6 SWAP3 SWAP5 SWAP7 DUP3 SUB ADD DUP4 MSTORE DUP7 MLOAD SWAP1 DUP3 DUP1 DUP4 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP3 ADD SWAP1 PUSH0 SWAP1 JUMPDEST DUP1 DUP3 LT PUSH2 0xF43 JUMPI POP POP POP SWAP1 DUP1 PUSH1 0x1 SWAP3 SWAP8 ADD SWAP3 ADD SWAP3 ADD DUP7 SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP4 PUSH2 0xED5 JUMP JUMPDEST SWAP2 SWAP4 PUSH2 0xF7A PUSH1 0x1 SWAP3 SWAP5 DUP7 MLOAD SWAP1 PUSH1 0x40 PUSH1 0x60 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SWAP5 ADD SWAP3 ADD DUP7 SWAP4 SWAP3 SWAP2 PUSH2 0xF22 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP3 SWAP2 PUSH2 0xF95 DUP6 PUSH2 0x137C JUMP JUMPDEST DUP2 MSTORE ADD SWAP3 ADD SWAP3 ADD SWAP2 SWAP1 DUP7 SWAP1 PUSH2 0xEA7 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SLOAD AND SUB PUSH2 0xFD0 JUMPI PUSH2 0x396 CALLER PUSH2 0x189F JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x1014 PUSH2 0x188C JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH2 0x1082 CALLDATASIZE PUSH2 0x1263 JUMP JUMPDEST PUSH2 0x108A PUSH2 0x184F JUMP JUMPDEST PUSH2 0x1094 DUP3 DUP5 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 DUP2 SLOAD SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x116B JUMPI PUSH1 0x1 DUP3 GT DUP1 PUSH2 0x1157 JUMPI JUMPDEST PUSH2 0x1102 JUMPI JUMPDEST POP POP PUSH1 0x20 DUP2 PUSH2 0x10E9 PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP4 PUSH2 0x15A8 JUMP JUMPDEST SLOAD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 MSTORE AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST SWAP1 SWAP2 PUSH0 NOT DUP4 ADD SWAP3 DUP4 GT PUSH2 0xD59 JUMPI PUSH2 0x1151 PUSH1 0x20 SWAP3 PUSH2 0x114B PUSH2 0x1143 PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP7 DUP6 PUSH2 0x133A JUMP JUMPDEST POP SWAP2 DUP5 PUSH2 0x133A JUMP JUMPDEST SWAP1 PUSH2 0x156B JUMP JUMPDEST SWAP2 PUSH2 0x10BA JUMP JUMPDEST POP PUSH0 NOT DUP3 ADD DUP3 DUP2 GT PUSH2 0xD59 JUMPI DUP2 EQ ISZERO PUSH2 0x10B5 JUMP JUMPDEST PUSH32 0x4E23D03500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH2 0x11AB PUSH2 0x11A4 CALLDATASIZE PUSH2 0x1263 JUMP JUMPDEST SWAP3 SWAP2 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH2 0x11CA PUSH2 0x11C4 PUSH1 0x20 SWAP3 PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x133A JUMP JUMPDEST POP PUSH2 0x137C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0x20 DUP4 MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0x40 DUP5 ADD SWAP3 ADD SWAP4 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x11F3 JUMPI DUP5 DUP5 SUB DUP6 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 DUP3 PUSH2 0x122B PUSH1 0x1 SWAP3 DUP9 MLOAD SWAP1 PUSH1 0x40 PUSH1 0x60 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SWAP7 ADD SWAP6 SWAP4 SWAP3 SWAP2 ADD PUSH2 0x11E6 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x10C JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x10C JUMPI JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x10C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B4 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B4 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x12B4 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x134F JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 SLOAD PUSH2 0x1388 DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP3 PUSH1 0x40 SWAP4 PUSH2 0x1399 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x12E1 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP1 SWAP5 PUSH1 0x20 DUP1 SWAP3 ADD SWAP3 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 SWAP4 JUMPDEST DUP6 DUP6 LT PUSH2 0x13BD JUMPI POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 DUP5 PUSH1 0x1 SWAP3 DUP5 MLOAD PUSH2 0x13CE DUP2 PUSH2 0x1298 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 SLOAD AND DUP4 MSTORE DUP7 DUP10 ADD SLOAD SWAP1 DUP2 AND DUP6 DUP5 ADD MSTORE PUSH1 0xA0 SHR AND ISZERO ISZERO DUP7 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP5 ADD SWAP4 SWAP2 PUSH2 0x13AE JUMP JUMPDEST DUP2 DUP2 EQ PUSH2 0x1567 JUMPI DUP2 SLOAD SWAP2 PUSH9 0x10000000000000000 DUP4 GT PUSH2 0x12B4 JUMPI DUP2 SLOAD DUP4 DUP4 SSTORE DUP1 DUP5 LT PUSH2 0x1501 JUMPI JUMPDEST POP PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x1447 JUMPI POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 SWAP2 DUP5 SUB PUSH2 0x1462 JUMPI JUMPDEST PUSH1 0x2 DUP1 SWAP2 ADD SWAP4 ADD SWAP2 ADD SWAP1 SWAP2 PUSH2 0x143A JUMP JUMPDEST PUSH2 0x14FC PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xFF DUP2 DUP5 SLOAD AND SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 DUP10 SLOAD AND OR DUP9 SSTORE DUP6 SWAP3 DUP4 DUP10 ADD SWAP4 DUP7 ADD SWAP2 DUP3 SLOAD AND SWAP1 DUP5 SLOAD AND OR DUP4 SSTORE SLOAD PUSH1 0xA0 SHR AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH21 0xFF0000000000000000000000000000000000000000 DUP4 SLOAD SWAP3 ISZERO ISZERO PUSH1 0xA0 SHL AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x1452 JUMP JUMPDEST PUSH1 0x1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP4 SUB PUSH2 0xD59 JUMPI DUP6 AND DUP6 SUB PUSH2 0xD59 JUMPI DUP4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH1 0x1 SHL DUP3 ADD SWAP2 DUP6 PUSH1 0x1 SHL ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x1557 JUMPI POP POP PUSH2 0x1428 JUMP JUMPDEST PUSH0 DUP1 DUP3 SSTORE DUP3 DUP3 ADD SSTORE PUSH1 0x2 ADD PUSH2 0x1549 JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x157C JUMPI PUSH2 0x157A SWAP2 PUSH2 0x1401 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 SLOAD DUP1 ISZERO PUSH2 0x1629 JUMPI PUSH0 NOT ADD SWAP1 PUSH2 0x15BE DUP3 DUP3 PUSH2 0x133A JUMP JUMPDEST PUSH2 0x157C JUMPI DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0x15D2 JUMPI POP POP SSTORE JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP4 SUB PUSH2 0xD59 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH1 0x1 SHL DUP3 ADD SWAP2 JUMPDEST DUP3 DUP2 LT PUSH2 0x1619 JUMPI POP POP POP SSTORE JUMP JUMPDEST PUSH0 DUP1 DUP3 SSTORE DUP3 DUP3 ADD SSTORE PUSH1 0x2 ADD PUSH2 0x160C JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x134F JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x12B4 JUMPI PUSH2 0x168C SWAP2 PUSH1 0x1 DUP3 ADD DUP2 SSTORE PUSH2 0x133A JUMP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST DUP1 SLOAD ISZERO PUSH2 0x134F JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 DUP2 SLOAD SWAP2 PUSH9 0x10000000000000000 DUP4 LT ISZERO PUSH2 0x12B4 JUMPI PUSH1 0x1 DUP4 ADD DUP1 DUP3 SSTORE DUP4 LT ISZERO PUSH2 0x134F JUMPI PUSH2 0x157A SWAP3 PUSH1 0x40 SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 SHL ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x1 DUP5 DUP4 MLOAD AND SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 DUP3 SLOAD AND OR DUP2 SSTORE ADD SWAP4 PUSH1 0x20 DUP4 ADD MLOAD AND SWAP1 DUP5 SLOAD AND OR DUP4 SSTORE ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH21 0xFF0000000000000000000000000000000000000000 DUP4 SLOAD SWAP3 ISZERO ISZERO PUSH1 0xA0 SHL AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x17CA DUP2 PUSH2 0x1298 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x10C JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x10C JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x10C JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 DUP1 SWAP3 PUSH1 0x60 SHL AND DUP5 MSTORE PUSH1 0x60 SHL AND PUSH1 0x34 DUP3 ADD MSTORE PUSH1 0x28 DUP2 MSTORE PUSH2 0x17CA DUP2 PUSH2 0x1298 JUMP JUMPDEST PUSH2 0x1885 PUSH2 0x187E PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x176B JUMP JUMPDEST CALLER SWAP1 PUSH2 0x198E JUMP JUMPDEST ISZERO PUSH2 0x833 JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND CALLER SUB PUSH2 0xFD0 JUMPI JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x10C JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x10C JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x10C JUMPI DUP3 MLOAD PUSH2 0x193A DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP4 PUSH2 0x1948 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x12E1 JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x10C JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x196F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1961 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x1A9C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x2E6 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x1A78 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP3 PUSH2 0x1A5F JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1A75 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x1A94 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1A0A JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x1AAF DUP2 DUP4 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x20 PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP2 PUSH1 0x40 PUSH0 KECCAK256 PUSH0 JUMPDEST DUP2 SLOAD DUP1 DUP3 LT ISZERO PUSH2 0x1BD3 JUMPI PUSH2 0x1AD5 DUP3 DUP5 PUSH2 0x133A JUMP JUMPDEST POP PUSH1 0x1 SWAP1 DUP2 DUP1 DUP3 SLOAD EQ SWAP2 DUP3 PUSH2 0x1BB2 JUMPI JUMPDEST DUP3 PUSH2 0x1B8F JUMPI JUMPDEST POP POP PUSH2 0x1AFB JUMPI POP POP PUSH1 0x1 ADD PUSH2 0x1AC1 JUMP JUMPDEST SWAP1 DUP1 SWAP3 SWAP7 SWAP8 SWAP9 POP GT PUSH2 0x1B4C JUMPI JUMPDEST POP PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP4 POP PUSH2 0x1B35 DUP2 PUSH2 0x15A8 JUMP JUMPDEST SLOAD SWAP4 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 JUMP JUMPDEST PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0xD59 JUMPI PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP5 PUSH2 0x114B PUSH2 0x1143 PUSH2 0x1B89 SWAP4 DUP6 PUSH2 0x133A JUMP JUMPDEST PUSH0 PUSH2 0x1B08 JUMP JUMPDEST PUSH2 0x1B9A SWAP2 SWAP3 POP PUSH2 0x1690 JUMP JUMPDEST POP ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND SWAP2 AND EQ DUP2 PUSH0 PUSH2 0x1AEB JUMP JUMPDEST SWAP2 POP PUSH2 0x1BBD DUP3 PUSH2 0x1690 JUMP JUMPDEST POP SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 DUP2 AND SWAP2 AND EQ SWAP2 PUSH2 0x1AE5 JUMP JUMPDEST DUP7 DUP5 DUP10 PUSH32 0x3A9458D900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP1 SWAP3 AND PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE AND PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH2 0x1C20 DUP4 DUP4 PUSH2 0x1807 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 AND SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1C3A DUP6 PUSH2 0x1298 JUMP JUMPDEST AND DUP4 MSTORE DUP5 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x40 DUP5 ADD MSTORE DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP2 PUSH2 0x1C60 DUP4 PUSH2 0x166A JUMP JUMPDEST POP POP DUP3 SLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0xD59 JUMPI PUSH32 0x836045DC838DA47BE101A8D10036B82EC004688D856DAA53CD0E56807D3BFCA SWAP5 PUSH2 0x1CA0 PUSH2 0x1CA6 SWAP3 PUSH1 0x20 SWAP7 PUSH2 0x133A JUMP JUMPDEST POP PUSH2 0x16A2 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 JUMP JUMPDEST PUSH2 0x1CC7 DUP4 DUP4 PUSH2 0x1807 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 AND SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1CE1 DUP6 PUSH2 0x1298 JUMP JUMPDEST AND DUP4 MSTORE DUP5 PUSH1 0x20 DUP5 ADD MSTORE PUSH0 PUSH1 0x40 DUP5 ADD MSTORE DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP2 PUSH2 0x1C60 DUP4 PUSH2 0x166A JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 LOG3 DUP3 DUP10 PUSH32 0x62AA9B3B813657F2D689D3D97B0B2BC9EF3117F10B3D087F5FA65564736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"1158:8825:89:-:0;;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;1273:26:49;;1269:95;;1158:8825:89;;;;;;;;2093:20:50;1158:8825:89;;2093:20:50;1158:8825:89;;-1:-1:-1;1158:8825:89;;;;;-1:-1:-1;1158:8825:89;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1524:4:81;1347:46:33;;1548:29:81;1544:80;;1634:14;;1158:8825:89;;;;;;1347:46:33;1158:8825:89;;;;;1634:14:81;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1544:80:81;1600:13;;;-1:-1:-1;1600:13:81;;-1:-1:-1;1600:13:81;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;1158:8825:89;;-1:-1:-1;1322:31:49;1158:8825:89;-1:-1:-1;1158:8825:89;;;;;;-1:-1:-1;1158:8825:89;;;;;-1:-1:-1;1158:8825:89"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":4685,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_16851":{"entryPoint":4663,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_addresst_addresst_uint256":{"entryPoint":4707,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_array_contract_IERC20_dyn_fromMemory":{"entryPoint":6404,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":6127,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":6096,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encodeUpdatedPos_struct_SwapPathStep":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_struct_SwapPathStep_dyn":{"entryPoint":4898,"id":null,"parameterSlots":1,"returnSlots":1},"array_pop_array_array_struct_SwapPathStep_storage_dyn__dyn_ptr":{"entryPoint":5544,"id":null,"parameterSlots":1,"returnSlots":0},"array_push_from_struct_SwapPathStep_to_array_struct_SwapPathStep_storage_dyn_ptr":{"entryPoint":5794,"id":null,"parameterSlots":2,"returnSlots":0},"array_push_zero_array_array_struct_SwapPathStep_storage_dyn__dyn_ptr":{"entryPoint":5738,"id":null,"parameterSlots":1,"returnSlots":2},"copy_array_from_storage_to_memory_array_struct_SwapPathStep__dyn":{"entryPoint":4988,"id":null,"parameterSlots":1,"returnSlots":1},"copy_array_to_storage_from_array_struct_SwapPathStep_storage_dyn_storage_to_array_struct_SwapPathStep__dyn":{"entryPoint":5121,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation":{"entryPoint":4833,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_16854":{"entryPoint":4760,"id":null,"parameterSlots":1,"returnSlots":0},"fun_addSimplePairStep":{"entryPoint":7190,"id":23617,"parameterSlots":3,"returnSlots":0},"fun_addSimplePairStep_16863":{"entryPoint":7357,"id":23617,"parameterSlots":3,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":6223,"id":4356,"parameterSlots":0,"returnSlots":0},"fun_canPerform":{"entryPoint":6542,"id":20329,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":6284,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":5995,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_getTokenPairId":{"entryPoint":6151,"id":23857,"parameterSlots":2,"returnSlots":1},"fun_removeSimplePairStep":{"entryPoint":6820,"id":23813,"parameterSlots":3,"returnSlots":0},"fun_transferOwnership":{"entryPoint":6303,"id":9547,"parameterSlots":1,"returnSlots":0},"memory_array_index_access_struct_SwapPathStep_dyn":{"entryPoint":5718,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_struct_SwapPathStep__dyn_ptr":{"entryPoint":5776,"id":null,"parameterSlots":1,"returnSlots":2},"storage_array_index_access_struct_SwapPathStep_storage_dyn__dyn":{"entryPoint":4922,"id":null,"parameterSlots":2,"returnSlots":2},"update_storage_value_array_struct_SwapPathStep_storage_dyn_storage_to_array_struct_SwapPathStep__dyn":{"entryPoint":5483,"id":null,"parameterSlots":3,"returnSlots":0},"update_storage_value_offsett_bool_to_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":6038}],"20218":[{"length":32,"start":232},{"length":32,"start":317},{"length":32,"start":1294},{"length":32,"start":1947},{"length":32,"start":2629},{"length":32,"start":3048},{"length":32,"start":6616}]},"linkReferences":{},"object":"60806040526004361015610011575f80fd5b5f3560e01c8063057074ff1461119357806332fffdbd14611074578063715018a614610ffc57806379ba509714610fa55780637c7d370a14610e55578063815ca70f14610910578063851c1bb3146108c05780638da5cb5b1461089b57806394ee0a3b1461085b578063a89b1128146107f8578063aaabadc514610755578063bc138aa3146104e1578063e30c3978146104bb578063f2fde38b1461043b578063f335b520146101105763fbfa77cf146100c9575f80fd5b3461010c575f60031936011261010c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b3461010c5760208060031936011261010c5761012a611237565b61013261184f565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016604051937fc673bdaf0000000000000000000000000000000000000000000000000000000085528284169081600487015260249581818881875afa9081156102e6575f9161041e575b50156102f157505f9085604051809481937fca4f280300000000000000000000000000000000000000000000000000000000835260048301525afa9081156102e6575f916102c4575b508051925f198401938411610298575f5b84811061020957005b600180820180831161026c57815b610226575b5050600101610200565b84518110156102675781809161026088610240878a611656565b51168961024d848b611656565b511661025a81838b611cbd565b88611cbd565b0190610217565b61021c565b877f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b847f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b6102e091503d805f833e6102d881836112e1565b810190611904565b846101ef565b6040513d5f823e3d90fd5b94935091506040517f6844846b00000000000000000000000000000000000000000000000000000000815282600482015284818581855afa9081156102e6575f916103f1575b50156103c7578390604051938480927f0387587d0000000000000000000000000000000000000000000000000000000082528560048301525afa9182156102e657610396935f93610398575b5050610390818381611c16565b80611c16565b005b6103b8929350803d106103c0575b6103b081836112e1565b8101906117d0565b908380610383565b503d6103a6565b507fb309199b000000000000000000000000000000000000000000000000000000005f526004525ffd5b6104119150853d8711610417575b61040981836112e1565b8101906117ef565b85610337565b503d6103ff565b6104359150823d84116104175761040981836112e1565b876101a6565b3461010c57602060031936011261010c57610454611237565b61045c61188c565b6001600160a01b0380911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b3461010c575f60031936011261010c5760206001600160a01b0360015416604051908152f35b3461010c5760208060031936011261010c576104fb611237565b61050361184f565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016604051937fc673bdaf0000000000000000000000000000000000000000000000000000000085528284169081600487015260249581818881875afa9081156102e6575f91610738575b501561065757505f9085604051809481937fca4f280300000000000000000000000000000000000000000000000000000000835260048301525afa9081156102e6575f9161063d575b508051925f198401938411610298575f5b8481106105da57005b600180820180831161026c57815b6105f7575b50506001016105d1565b84518110156106385781809161063188610611878a611656565b51168961061e848b611656565b511661062b81838b611aa4565b88611aa4565b01906105e8565b6105ed565b61065191503d805f833e6102d881836112e1565b846105c0565b94935091506040517f6844846b00000000000000000000000000000000000000000000000000000000815282600482015284818581855afa9081156102e6575f9161071b575b50156103c7578390604051938480927f0387587d0000000000000000000000000000000000000000000000000000000082528560048301525afa9182156102e657610396935f936106fc575b50506106f6818381611aa4565b80611aa4565b610713929350803d106103c0576103b081836112e1565b9083806106e9565b6107329150853d87116104175761040981836112e1565b8561069d565b61074f9150823d84116104175761040981836112e1565b87610577565b3461010c575f60031936011261010c576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa9081156102e6576020925f926107d9575b5060405191168152f35b6107f1919250833d85116103c0576103b081836112e1565b90836107cf565b3461010c57602060031936011261010c57610811611237565b61081961184f565b6001600160a01b035f54163314610833576103969061189f565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461010c57604060031936011261010c57610885610877611237565b61087f61124d565b90611807565b5f526002602052602060405f2054604051908152f35b3461010c575f60031936011261010c5760206001600160a01b035f5416604051908152f35b3461010c57602060031936011261010c576004357fffffffff000000000000000000000000000000000000000000000000000000008116810361010c5761090860209161176b565b604051908152f35b3461010c57604060031936011261010c57610929611237565b60243567ffffffffffffffff811161010c573660238201121561010c57806004013561095481611322565b9161096260405193846112e1565b81835260208301602460608094028301019136831161010c57602401905b828210610df357858561099161184f565b805115610dcb5780515f198101908111610d595760206109b96001600160a01b039284611656565b51015116906109c88284611807565b5f9390815b8351861015610cfe576109e08685611656565b51604081015190919015610b8b576001600160a01b03825116906001600160a01b03602084015116916040517f0387587d0000000000000000000000000000000000000000000000000000000081528160048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa80156102e6576001600160a01b03915f91610b6c575b5016918215610b40576001600160a01b031691808303610aec5750808303610abb575050506001600160a01b0360206001925b0151169501946109cd565b7f29198c3d000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b828203610b0e578303610abb575050506001600160a01b036020600192610ab0565b507f29198c3d000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b507f85f41299000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b610b85915060203d6020116103c0576103b081836112e1565b8b610a7d565b926001600160a01b038293959697925116906001600160a01b0360208501511695604051987fca4f2803000000000000000000000000000000000000000000000000000000008a528360048b01525f8a6024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa998a156102e6575f9a610ce2575b505f985f935f5b8c51811015610c82578c6001600160a01b03610c3b8383611656565b51166001600160a01b038c1614610c79575b6001600160a01b03610c60838e93611656565b511614610c70575b600101610c1f565b60019550610c68565b60019c50610c4d565b509750975097909493985015908115610cd9575b50610cae57506001600160a01b036020600192610ab0565b7fb309199b000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90501588610c96565b610cf7919a503d805f833e6102d881836112e1565b988a610c18565b508284825f52600260205260405f2093610d178561166a565b50505f5b8351811015610d86578554905f198201918211610d5957610d53610d416001938961133a565b50610d4c8388611656565b51906116a2565b01610d1b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50835f5260026020527f0836045dc838da47be101a8d10036b82ec004688d856daa53cd0e56807d3bfca60206001600160a01b0360405f2054936040519485521692a3005b7f20a2d33d000000000000000000000000000000000000000000000000000000005f5260045ffd5b838236031261010c5760405190610e0982611298565b6001600160a01b038335818116810361010c5783526020840135908116810361010c576020830152604083013590811515820361010c5782602092604088950152815201910190610980565b3461010c57604060031936011261010c57610e71610877611237565b5f5260206002815260405f208054610e8881611322565b90610e9660405192836112e1565b80825283820180935f52845f20855f925b848410610f87575084866040519283928184019082855251809152604084019160408260051b86010193925f905b838210610ee25786860387f35b919395947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08592949682030183528651908280835192838152019201905f905b808210610f4357505050908060019297019201920186959492939193610ed5565b9193610f7a6001929486519060406060926001600160a01b0380825116845260208201511660208401520151151560408201520190565b9401920186939291610f22565b6001918291610f958561137c565b8152019201920191908690610ea7565b3461010c575f60031936011261010c57336001600160a01b036001541603610fd0576103963361189f565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b3461010c575f60031936011261010c5761101461188c565b5f6001600160a01b037fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461010c5761108236611263565b61108a61184f565b6110948284611807565b5f52600260205260405f20908154908181101561116b576001821180611157575b611102575b50506020816110e97fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da936115a8565b54926001600160a01b03809160405195865216941692a3005b90915f198301928311610d595761115160209261114b6111437fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da968561133a565b50918461133a565b9061156b565b916110ba565b505f198201828111610d59578114156110b5565b7f4e23d035000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461010c576111ab6111a436611263565b9291611807565b5f526111ca6111c4602092600260205260405f2061133a565b5061137c565b60405190602082016020835281518091526020604084019201935f5b8281106111f35784840385f35b9091928261122b60019288519060406060926001600160a01b0380825116845260208201511660208401520151151560408201520190565b960195939291016111e6565b600435906001600160a01b038216820361010c57565b602435906001600160a01b038216820361010c57565b600319606091011261010c576001600160a01b0390600435828116810361010c5791602435908116810361010c579060443590565b6060810190811067ffffffffffffffff8211176112b457604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176112b457604052565b67ffffffffffffffff81116112b45760051b60200190565b805482101561134f575f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b90815461138881611322565b9260409361139960405191826112e1565b82815280946020809201925f5260205f20905f935b8585106113bd57505050505050565b60028460019284516113ce81611298565b60ff6001600160a01b03808954168352868901549081168584015260a01c161515868201528152019301940193916113ae565b818114611567578154916801000000000000000083116112b4578154838355808410611501575b505f5260205f20905f5260205f20905f905b8382106114475750505050565b806001918403611462575b600280910193019101909161143a565b6114fc6001600160a01b0360ff81845416917fffffffffffffffffffffffff00000000000000000000000000000000000000009283895416178855859283890193860191825416908454161783555460a01c167fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff0000000000000000000000000000000000000000835492151560a01b169116179055565b611452565b60017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083168303610d595785168503610d5957835f5260205f209160011b8201918560011b015b828110611557575050611428565b5f80825582820155600201611549565b5050565b919061157c5761157a91611401565b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b80548015611629575f1901906115be828261133a565b61157c578054905f8155816115d257505055565b6001907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83168303610d59575f5260205f209160011b8201915b8281106116195750505055565b5f8082558282015560020161160c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b805182101561134f5760209160051b010190565b8054680100000000000000008110156112b45761168c9160018201815561133a565b9091565b80541561134f575f5260205f20905f90565b90815491680100000000000000008310156112b4576001830180825583101561134f5761157a926040915f5260205f209060011b01916001600160a01b0392600184835116917fffffffffffffffffffffffff00000000000000000000000000000000000000009283825416178155019360208301511690845416178355015115157fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff0000000000000000000000000000000000000000835492151560a01b169116179055565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526117ca81611298565b51902090565b9081602091031261010c57516001600160a01b038116810361010c5790565b9081602091031261010c5751801515810361010c5790565b6040519060208201927fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16845260601b166034820152602881526117ca81611298565b61188561187e7fffffffff000000000000000000000000000000000000000000000000000000005f351661176b565b339061198e565b1561083357565b6001600160a01b035f54163303610fd057565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f546001600160a01b0380921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b602090818184031261010c5780519067ffffffffffffffff821161010c57019180601f8401121561010c57825161193a81611322565b9361194860405195866112e1565b818552838086019260051b82010192831161010c578301905b82821061196f575050505090565b81516001600160a01b038116810361010c578152908301908301611961565b906001600160a01b039081805f54169116908114611a9c57604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156102e65785935f95611a78575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa9182156102e6575f92611a5f57505090565b611a759250803d106104175761040981836112e1565b90565b606492919550611a9490853d87116103c0576103b081836112e1565b949091611a0a565b505050600190565b91611aaf8183611807565b5f526020600260205260409160405f205f5b815480821015611bd357611ad5828461133a565b5060019081808254149182611bb2575b82611b8f575b5050611afb575050600101611ac1565b9080929697985011611b4c575b507fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da9350611b35816115a8565b5493519384526001600160a01b03908116941692a3565b5f198101908111610d59577fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da9461114b611143611b89938561133a565b5f611b08565b611b9a919250611690565b5001546001600160a01b03868116911614815f611aeb565b9150611bbd82611690565b50546001600160a01b038c811691161491611ae5565b8684897f3a9458d9000000000000000000000000000000000000000000000000000000005f526001600160a01b039283809216600452166024521660445260645ffd5b611c208383611807565b6001600160a01b03809416938060405193611c3a85611298565b16835284602084015260016040840152815f52600260205260405f2091611c608361166a565b505082545f198101908111610d59577f0836045dc838da47be101a8d10036b82ec004688d856daa53cd0e56807d3bfca94611ca0611ca69260209661133a565b506116a2565b5f526002825260405f2054936040519485521692a3565b611cc78383611807565b6001600160a01b03809416938060405193611ce185611298565b1683528460208401525f6040840152815f52600260205260405f2091611c608361166a56fea2646970667358221220c8a382897f62aa9b3b813657f2d689d3d97b0b2bc9ef3117f10b3d087f5fa65564736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x57074FF EQ PUSH2 0x1193 JUMPI DUP1 PUSH4 0x32FFFDBD EQ PUSH2 0x1074 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xFFC JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xFA5 JUMPI DUP1 PUSH4 0x7C7D370A EQ PUSH2 0xE55 JUMPI DUP1 PUSH4 0x815CA70F EQ PUSH2 0x910 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x8C0 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x89B JUMPI DUP1 PUSH4 0x94EE0A3B EQ PUSH2 0x85B JUMPI DUP1 PUSH4 0xA89B1128 EQ PUSH2 0x7F8 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x755 JUMPI DUP1 PUSH4 0xBC138AA3 EQ PUSH2 0x4E1 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x4BB JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x43B JUMPI DUP1 PUSH4 0xF335B520 EQ PUSH2 0x110 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0xC9 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x12A PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x132 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP4 PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP3 DUP5 AND SWAP1 DUP2 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x24 SWAP6 DUP2 DUP2 DUP9 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x41E JUMPI JUMPDEST POP ISZERO PUSH2 0x2F1 JUMPI POP PUSH0 SWAP1 DUP6 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x2C4 JUMPI JUMPDEST POP DUP1 MLOAD SWAP3 PUSH0 NOT DUP5 ADD SWAP4 DUP5 GT PUSH2 0x298 JUMPI PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x209 JUMPI STOP JUMPDEST PUSH1 0x1 DUP1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x26C JUMPI DUP2 JUMPDEST PUSH2 0x226 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x200 JUMP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x267 JUMPI DUP2 DUP1 SWAP2 PUSH2 0x260 DUP9 PUSH2 0x240 DUP8 DUP11 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND DUP10 PUSH2 0x24D DUP5 DUP12 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND PUSH2 0x25A DUP2 DUP4 DUP12 PUSH2 0x1CBD JUMP JUMPDEST DUP9 PUSH2 0x1CBD JUMP JUMPDEST ADD SWAP1 PUSH2 0x217 JUMP JUMPDEST PUSH2 0x21C JUMP JUMPDEST DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x2E0 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2D8 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1904 JUMP JUMPDEST DUP5 PUSH2 0x1EF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP5 SWAP4 POP SWAP2 POP PUSH1 0x40 MLOAD PUSH32 0x6844846B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 DUP6 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x3F1 JUMPI JUMPDEST POP ISZERO PUSH2 0x3C7 JUMPI DUP4 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x387587D00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP6 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2E6 JUMPI PUSH2 0x396 SWAP4 PUSH0 SWAP4 PUSH2 0x398 JUMPI JUMPDEST POP POP PUSH2 0x390 DUP2 DUP4 DUP2 PUSH2 0x1C16 JUMP JUMPDEST DUP1 PUSH2 0x1C16 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3B8 SWAP3 SWAP4 POP DUP1 RETURNDATASIZE LT PUSH2 0x3C0 JUMPI JUMPDEST PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x17D0 JUMP JUMPDEST SWAP1 DUP4 DUP1 PUSH2 0x383 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3A6 JUMP JUMPDEST POP PUSH32 0xB309199B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x411 SWAP2 POP DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x417 JUMPI JUMPDEST PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x17EF JUMP JUMPDEST DUP6 PUSH2 0x337 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3FF JUMP JUMPDEST PUSH2 0x435 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP8 PUSH2 0x1A6 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x454 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x45C PUSH2 0x188C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x4FB PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x503 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP4 PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP3 DUP5 AND SWAP1 DUP2 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x24 SWAP6 DUP2 DUP2 DUP9 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x738 JUMPI JUMPDEST POP ISZERO PUSH2 0x657 JUMPI POP PUSH0 SWAP1 DUP6 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x63D JUMPI JUMPDEST POP DUP1 MLOAD SWAP3 PUSH0 NOT DUP5 ADD SWAP4 DUP5 GT PUSH2 0x298 JUMPI PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x5DA JUMPI STOP JUMPDEST PUSH1 0x1 DUP1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x26C JUMPI DUP2 JUMPDEST PUSH2 0x5F7 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x5D1 JUMP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x638 JUMPI DUP2 DUP1 SWAP2 PUSH2 0x631 DUP9 PUSH2 0x611 DUP8 DUP11 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND DUP10 PUSH2 0x61E DUP5 DUP12 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND PUSH2 0x62B DUP2 DUP4 DUP12 PUSH2 0x1AA4 JUMP JUMPDEST DUP9 PUSH2 0x1AA4 JUMP JUMPDEST ADD SWAP1 PUSH2 0x5E8 JUMP JUMPDEST PUSH2 0x5ED JUMP JUMPDEST PUSH2 0x651 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2D8 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP5 PUSH2 0x5C0 JUMP JUMPDEST SWAP5 SWAP4 POP SWAP2 POP PUSH1 0x40 MLOAD PUSH32 0x6844846B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 DUP6 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x71B JUMPI JUMPDEST POP ISZERO PUSH2 0x3C7 JUMPI DUP4 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x387587D00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP6 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2E6 JUMPI PUSH2 0x396 SWAP4 PUSH0 SWAP4 PUSH2 0x6FC JUMPI JUMPDEST POP POP PUSH2 0x6F6 DUP2 DUP4 DUP2 PUSH2 0x1AA4 JUMP JUMPDEST DUP1 PUSH2 0x1AA4 JUMP JUMPDEST PUSH2 0x713 SWAP3 SWAP4 POP DUP1 RETURNDATASIZE LT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP1 DUP4 DUP1 PUSH2 0x6E9 JUMP JUMPDEST PUSH2 0x732 SWAP2 POP DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP6 PUSH2 0x69D JUMP JUMPDEST PUSH2 0x74F SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP8 PUSH2 0x577 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0x7D9 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x7F1 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x7CF JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x811 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x819 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND CALLER EQ PUSH2 0x833 JUMPI PUSH2 0x396 SWAP1 PUSH2 0x189F JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x885 PUSH2 0x877 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x87F PUSH2 0x124D JUMP JUMPDEST SWAP1 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI PUSH2 0x908 PUSH1 0x20 SWAP2 PUSH2 0x176B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x929 PUSH2 0x1237 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10C JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x10C JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x954 DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP2 PUSH2 0x962 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x12E1 JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x24 PUSH1 0x60 DUP1 SWAP5 MUL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x10C JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xDF3 JUMPI DUP6 DUP6 PUSH2 0x991 PUSH2 0x184F JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xDCB JUMPI DUP1 MLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0xD59 JUMPI PUSH1 0x20 PUSH2 0x9B9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP5 PUSH2 0x1656 JUMP JUMPDEST MLOAD ADD MLOAD AND SWAP1 PUSH2 0x9C8 DUP3 DUP5 PUSH2 0x1807 JUMP JUMPDEST PUSH0 SWAP4 SWAP1 DUP2 JUMPDEST DUP4 MLOAD DUP7 LT ISZERO PUSH2 0xCFE JUMPI PUSH2 0x9E0 DUP7 DUP6 PUSH2 0x1656 JUMP JUMPDEST MLOAD PUSH1 0x40 DUP2 ADD MLOAD SWAP1 SWAP2 SWAP1 ISZERO PUSH2 0xB8B JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 MLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 ADD MLOAD AND SWAP2 PUSH1 0x40 MLOAD PUSH32 0x387587D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH0 SWAP2 PUSH2 0xB6C JUMPI JUMPDEST POP AND SWAP2 DUP3 ISZERO PUSH2 0xB40 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP1 DUP4 SUB PUSH2 0xAEC JUMPI POP DUP1 DUP4 SUB PUSH2 0xABB JUMPI POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH1 0x1 SWAP3 JUMPDEST ADD MLOAD AND SWAP6 ADD SWAP5 PUSH2 0x9CD JUMP JUMPDEST PUSH32 0x29198C3D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP3 DUP3 SUB PUSH2 0xB0E JUMPI DUP4 SUB PUSH2 0xABB JUMPI POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH2 0xAB0 JUMP JUMPDEST POP PUSH32 0x29198C3D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST POP PUSH32 0x85F4129900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xB85 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP12 PUSH2 0xA7D JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 SWAP4 SWAP6 SWAP7 SWAP8 SWAP3 MLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP6 ADD MLOAD AND SWAP6 PUSH1 0x40 MLOAD SWAP9 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP4 PUSH1 0x4 DUP12 ADD MSTORE PUSH0 DUP11 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP10 DUP11 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP11 PUSH2 0xCE2 JUMPI JUMPDEST POP PUSH0 SWAP9 PUSH0 SWAP4 PUSH0 JUMPDEST DUP13 MLOAD DUP2 LT ISZERO PUSH2 0xC82 JUMPI DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC3B DUP4 DUP4 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND EQ PUSH2 0xC79 JUMPI JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC60 DUP4 DUP15 SWAP4 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND EQ PUSH2 0xC70 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0xC1F JUMP JUMPDEST PUSH1 0x1 SWAP6 POP PUSH2 0xC68 JUMP JUMPDEST PUSH1 0x1 SWAP13 POP PUSH2 0xC4D JUMP JUMPDEST POP SWAP8 POP SWAP8 POP SWAP8 SWAP1 SWAP5 SWAP4 SWAP9 POP ISZERO SWAP1 DUP2 ISZERO PUSH2 0xCD9 JUMPI JUMPDEST POP PUSH2 0xCAE JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH2 0xAB0 JUMP JUMPDEST PUSH32 0xB309199B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP ISZERO DUP9 PUSH2 0xC96 JUMP JUMPDEST PUSH2 0xCF7 SWAP2 SWAP11 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2D8 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP9 DUP11 PUSH2 0xC18 JUMP JUMPDEST POP DUP3 DUP5 DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP4 PUSH2 0xD17 DUP6 PUSH2 0x166A JUMP JUMPDEST POP POP PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0xD86 JUMPI DUP6 SLOAD SWAP1 PUSH0 NOT DUP3 ADD SWAP2 DUP3 GT PUSH2 0xD59 JUMPI PUSH2 0xD53 PUSH2 0xD41 PUSH1 0x1 SWAP4 DUP10 PUSH2 0x133A JUMP JUMPDEST POP PUSH2 0xD4C DUP4 DUP9 PUSH2 0x1656 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x16A2 JUMP JUMPDEST ADD PUSH2 0xD1B JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP4 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x836045DC838DA47BE101A8D10036B82EC004688D856DAA53CD0E56807D3BFCA PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 STOP JUMPDEST PUSH32 0x20A2D33D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLDATASIZE SUB SLT PUSH2 0x10C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0xE09 DUP3 PUSH2 0x1298 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI DUP4 MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x10C JUMPI DUP3 PUSH1 0x20 SWAP3 PUSH1 0x40 DUP9 SWAP6 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x980 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0xE71 PUSH2 0x877 PUSH2 0x1237 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x20 PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD PUSH2 0xE88 DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP1 PUSH2 0xE96 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP1 DUP3 MSTORE DUP4 DUP3 ADD DUP1 SWAP4 PUSH0 MSTORE DUP5 PUSH0 KECCAK256 DUP6 PUSH0 SWAP3 JUMPDEST DUP5 DUP5 LT PUSH2 0xF87 JUMPI POP DUP5 DUP7 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP3 DUP2 DUP5 ADD SWAP1 DUP3 DUP6 MSTORE MLOAD DUP1 SWAP2 MSTORE PUSH1 0x40 DUP5 ADD SWAP2 PUSH1 0x40 DUP3 PUSH1 0x5 SHL DUP7 ADD ADD SWAP4 SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xEE2 JUMPI DUP7 DUP7 SUB DUP8 RETURN JUMPDEST SWAP2 SWAP4 SWAP6 SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP6 SWAP3 SWAP5 SWAP7 DUP3 SUB ADD DUP4 MSTORE DUP7 MLOAD SWAP1 DUP3 DUP1 DUP4 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP3 ADD SWAP1 PUSH0 SWAP1 JUMPDEST DUP1 DUP3 LT PUSH2 0xF43 JUMPI POP POP POP SWAP1 DUP1 PUSH1 0x1 SWAP3 SWAP8 ADD SWAP3 ADD SWAP3 ADD DUP7 SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP4 PUSH2 0xED5 JUMP JUMPDEST SWAP2 SWAP4 PUSH2 0xF7A PUSH1 0x1 SWAP3 SWAP5 DUP7 MLOAD SWAP1 PUSH1 0x40 PUSH1 0x60 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SWAP5 ADD SWAP3 ADD DUP7 SWAP4 SWAP3 SWAP2 PUSH2 0xF22 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP3 SWAP2 PUSH2 0xF95 DUP6 PUSH2 0x137C JUMP JUMPDEST DUP2 MSTORE ADD SWAP3 ADD SWAP3 ADD SWAP2 SWAP1 DUP7 SWAP1 PUSH2 0xEA7 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SLOAD AND SUB PUSH2 0xFD0 JUMPI PUSH2 0x396 CALLER PUSH2 0x189F JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x1014 PUSH2 0x188C JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH2 0x1082 CALLDATASIZE PUSH2 0x1263 JUMP JUMPDEST PUSH2 0x108A PUSH2 0x184F JUMP JUMPDEST PUSH2 0x1094 DUP3 DUP5 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 DUP2 SLOAD SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x116B JUMPI PUSH1 0x1 DUP3 GT DUP1 PUSH2 0x1157 JUMPI JUMPDEST PUSH2 0x1102 JUMPI JUMPDEST POP POP PUSH1 0x20 DUP2 PUSH2 0x10E9 PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP4 PUSH2 0x15A8 JUMP JUMPDEST SLOAD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 MSTORE AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST SWAP1 SWAP2 PUSH0 NOT DUP4 ADD SWAP3 DUP4 GT PUSH2 0xD59 JUMPI PUSH2 0x1151 PUSH1 0x20 SWAP3 PUSH2 0x114B PUSH2 0x1143 PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP7 DUP6 PUSH2 0x133A JUMP JUMPDEST POP SWAP2 DUP5 PUSH2 0x133A JUMP JUMPDEST SWAP1 PUSH2 0x156B JUMP JUMPDEST SWAP2 PUSH2 0x10BA JUMP JUMPDEST POP PUSH0 NOT DUP3 ADD DUP3 DUP2 GT PUSH2 0xD59 JUMPI DUP2 EQ ISZERO PUSH2 0x10B5 JUMP JUMPDEST PUSH32 0x4E23D03500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH2 0x11AB PUSH2 0x11A4 CALLDATASIZE PUSH2 0x1263 JUMP JUMPDEST SWAP3 SWAP2 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH2 0x11CA PUSH2 0x11C4 PUSH1 0x20 SWAP3 PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x133A JUMP JUMPDEST POP PUSH2 0x137C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0x20 DUP4 MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0x40 DUP5 ADD SWAP3 ADD SWAP4 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x11F3 JUMPI DUP5 DUP5 SUB DUP6 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 DUP3 PUSH2 0x122B PUSH1 0x1 SWAP3 DUP9 MLOAD SWAP1 PUSH1 0x40 PUSH1 0x60 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SWAP7 ADD SWAP6 SWAP4 SWAP3 SWAP2 ADD PUSH2 0x11E6 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x10C JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x10C JUMPI JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x10C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B4 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B4 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x12B4 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x134F JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 SLOAD PUSH2 0x1388 DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP3 PUSH1 0x40 SWAP4 PUSH2 0x1399 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x12E1 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP1 SWAP5 PUSH1 0x20 DUP1 SWAP3 ADD SWAP3 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 SWAP4 JUMPDEST DUP6 DUP6 LT PUSH2 0x13BD JUMPI POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 DUP5 PUSH1 0x1 SWAP3 DUP5 MLOAD PUSH2 0x13CE DUP2 PUSH2 0x1298 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 SLOAD AND DUP4 MSTORE DUP7 DUP10 ADD SLOAD SWAP1 DUP2 AND DUP6 DUP5 ADD MSTORE PUSH1 0xA0 SHR AND ISZERO ISZERO DUP7 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP5 ADD SWAP4 SWAP2 PUSH2 0x13AE JUMP JUMPDEST DUP2 DUP2 EQ PUSH2 0x1567 JUMPI DUP2 SLOAD SWAP2 PUSH9 0x10000000000000000 DUP4 GT PUSH2 0x12B4 JUMPI DUP2 SLOAD DUP4 DUP4 SSTORE DUP1 DUP5 LT PUSH2 0x1501 JUMPI JUMPDEST POP PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x1447 JUMPI POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 SWAP2 DUP5 SUB PUSH2 0x1462 JUMPI JUMPDEST PUSH1 0x2 DUP1 SWAP2 ADD SWAP4 ADD SWAP2 ADD SWAP1 SWAP2 PUSH2 0x143A JUMP JUMPDEST PUSH2 0x14FC PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xFF DUP2 DUP5 SLOAD AND SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 DUP10 SLOAD AND OR DUP9 SSTORE DUP6 SWAP3 DUP4 DUP10 ADD SWAP4 DUP7 ADD SWAP2 DUP3 SLOAD AND SWAP1 DUP5 SLOAD AND OR DUP4 SSTORE SLOAD PUSH1 0xA0 SHR AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH21 0xFF0000000000000000000000000000000000000000 DUP4 SLOAD SWAP3 ISZERO ISZERO PUSH1 0xA0 SHL AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x1452 JUMP JUMPDEST PUSH1 0x1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP4 SUB PUSH2 0xD59 JUMPI DUP6 AND DUP6 SUB PUSH2 0xD59 JUMPI DUP4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH1 0x1 SHL DUP3 ADD SWAP2 DUP6 PUSH1 0x1 SHL ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x1557 JUMPI POP POP PUSH2 0x1428 JUMP JUMPDEST PUSH0 DUP1 DUP3 SSTORE DUP3 DUP3 ADD SSTORE PUSH1 0x2 ADD PUSH2 0x1549 JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x157C JUMPI PUSH2 0x157A SWAP2 PUSH2 0x1401 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 SLOAD DUP1 ISZERO PUSH2 0x1629 JUMPI PUSH0 NOT ADD SWAP1 PUSH2 0x15BE DUP3 DUP3 PUSH2 0x133A JUMP JUMPDEST PUSH2 0x157C JUMPI DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0x15D2 JUMPI POP POP SSTORE JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP4 SUB PUSH2 0xD59 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH1 0x1 SHL DUP3 ADD SWAP2 JUMPDEST DUP3 DUP2 LT PUSH2 0x1619 JUMPI POP POP POP SSTORE JUMP JUMPDEST PUSH0 DUP1 DUP3 SSTORE DUP3 DUP3 ADD SSTORE PUSH1 0x2 ADD PUSH2 0x160C JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x134F JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x12B4 JUMPI PUSH2 0x168C SWAP2 PUSH1 0x1 DUP3 ADD DUP2 SSTORE PUSH2 0x133A JUMP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST DUP1 SLOAD ISZERO PUSH2 0x134F JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 DUP2 SLOAD SWAP2 PUSH9 0x10000000000000000 DUP4 LT ISZERO PUSH2 0x12B4 JUMPI PUSH1 0x1 DUP4 ADD DUP1 DUP3 SSTORE DUP4 LT ISZERO PUSH2 0x134F JUMPI PUSH2 0x157A SWAP3 PUSH1 0x40 SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 SHL ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x1 DUP5 DUP4 MLOAD AND SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 DUP3 SLOAD AND OR DUP2 SSTORE ADD SWAP4 PUSH1 0x20 DUP4 ADD MLOAD AND SWAP1 DUP5 SLOAD AND OR DUP4 SSTORE ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH21 0xFF0000000000000000000000000000000000000000 DUP4 SLOAD SWAP3 ISZERO ISZERO PUSH1 0xA0 SHL AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x17CA DUP2 PUSH2 0x1298 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x10C JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x10C JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x10C JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 DUP1 SWAP3 PUSH1 0x60 SHL AND DUP5 MSTORE PUSH1 0x60 SHL AND PUSH1 0x34 DUP3 ADD MSTORE PUSH1 0x28 DUP2 MSTORE PUSH2 0x17CA DUP2 PUSH2 0x1298 JUMP JUMPDEST PUSH2 0x1885 PUSH2 0x187E PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x176B JUMP JUMPDEST CALLER SWAP1 PUSH2 0x198E JUMP JUMPDEST ISZERO PUSH2 0x833 JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND CALLER SUB PUSH2 0xFD0 JUMPI JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x10C JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x10C JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x10C JUMPI DUP3 MLOAD PUSH2 0x193A DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP4 PUSH2 0x1948 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x12E1 JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x10C JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x196F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1961 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x1A9C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x2E6 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x1A78 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP3 PUSH2 0x1A5F JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1A75 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x1A94 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1A0A JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x1AAF DUP2 DUP4 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x20 PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP2 PUSH1 0x40 PUSH0 KECCAK256 PUSH0 JUMPDEST DUP2 SLOAD DUP1 DUP3 LT ISZERO PUSH2 0x1BD3 JUMPI PUSH2 0x1AD5 DUP3 DUP5 PUSH2 0x133A JUMP JUMPDEST POP PUSH1 0x1 SWAP1 DUP2 DUP1 DUP3 SLOAD EQ SWAP2 DUP3 PUSH2 0x1BB2 JUMPI JUMPDEST DUP3 PUSH2 0x1B8F JUMPI JUMPDEST POP POP PUSH2 0x1AFB JUMPI POP POP PUSH1 0x1 ADD PUSH2 0x1AC1 JUMP JUMPDEST SWAP1 DUP1 SWAP3 SWAP7 SWAP8 SWAP9 POP GT PUSH2 0x1B4C JUMPI JUMPDEST POP PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP4 POP PUSH2 0x1B35 DUP2 PUSH2 0x15A8 JUMP JUMPDEST SLOAD SWAP4 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 JUMP JUMPDEST PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0xD59 JUMPI PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP5 PUSH2 0x114B PUSH2 0x1143 PUSH2 0x1B89 SWAP4 DUP6 PUSH2 0x133A JUMP JUMPDEST PUSH0 PUSH2 0x1B08 JUMP JUMPDEST PUSH2 0x1B9A SWAP2 SWAP3 POP PUSH2 0x1690 JUMP JUMPDEST POP ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND SWAP2 AND EQ DUP2 PUSH0 PUSH2 0x1AEB JUMP JUMPDEST SWAP2 POP PUSH2 0x1BBD DUP3 PUSH2 0x1690 JUMP JUMPDEST POP SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 DUP2 AND SWAP2 AND EQ SWAP2 PUSH2 0x1AE5 JUMP JUMPDEST DUP7 DUP5 DUP10 PUSH32 0x3A9458D900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP1 SWAP3 AND PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE AND PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH2 0x1C20 DUP4 DUP4 PUSH2 0x1807 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 AND SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1C3A DUP6 PUSH2 0x1298 JUMP JUMPDEST AND DUP4 MSTORE DUP5 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x40 DUP5 ADD MSTORE DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP2 PUSH2 0x1C60 DUP4 PUSH2 0x166A JUMP JUMPDEST POP POP DUP3 SLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0xD59 JUMPI PUSH32 0x836045DC838DA47BE101A8D10036B82EC004688D856DAA53CD0E56807D3BFCA SWAP5 PUSH2 0x1CA0 PUSH2 0x1CA6 SWAP3 PUSH1 0x20 SWAP7 PUSH2 0x133A JUMP JUMPDEST POP PUSH2 0x16A2 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 JUMP JUMPDEST PUSH2 0x1CC7 DUP4 DUP4 PUSH2 0x1807 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 AND SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1CE1 DUP6 PUSH2 0x1298 JUMP JUMPDEST AND DUP4 MSTORE DUP5 PUSH1 0x20 DUP5 ADD MSTORE PUSH0 PUSH1 0x40 DUP5 ADD MSTORE DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP2 PUSH2 0x1C60 DUP4 PUSH2 0x166A JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 LOG3 DUP3 DUP10 PUSH32 0x62AA9B3B813657F2D689D3D97B0B2BC9EF3117F10B3D087F5FA65564736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"1158:8825:89:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21:81;1158:8825:89;1810:21:81;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;;;;;-1:-1:-1;;;;;1348:29:81;1158:8825:89;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;;;;:::i;:::-;1525:73:33;;:::i;:::-;-1:-1:-1;;;;;3539:5:89;;1158:8825;;;3539:36;1158:8825;3539:36;;1158:8825;;;3539:36;;1158:8825;3539:36;;1158:8825;;3539:36;;;;;;;;;;;;;1158:8825;3539:36;;;1158:8825;-1:-1:-1;3535:285:89;;;1158:8825;;;;;;5057:25;;;;1158:8825;5057:25;;1158:8825;5057:25;;1158:8825;5057:25;;;;;;;1158:8825;5057:25;;;3535:285;1158:8825;;;;-1:-1:-1;;1158:8825:89;;;;;;;;5161:14;;;;;;1158:8825;5177:3;5130:1;1158:8825;;;;;;;;5201:17;5130:1;;;5196:147;5177:3;;5130:1;1158:8825;5146:13;;5239:3;1158:8825;;5220:17;;;;;5290:9;;;5896:8;5290:9;;;;;:::i;:::-;1158:8825;;5310:9;;;;;:::i;:::-;1158:8825;;5828:8;;;;;:::i;:::-;5896;;:::i;:::-;1158:8825;5201:17;;;5220;;;1158:8825;;;;;;;;;;;;;;;;;;;;5057:25;;;;;;1158:8825;5057:25;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;1158:8825;;;;;;;;;3535:285;1158:8825;;;;;;;;3634:56;;;1158:8825;3634:56;;1158:8825;3634:56;;;;;;;;;;;;1158:8825;3634:56;;;3535:285;-1:-1:-1;3630:190:89;;;1158:8825;;;;5529:34;;;;1158:8825;5529:34;;;1158:8825;5529:34;;1158:8825;5529:34;;;;;;;5896:8;5529:34;1158:8825;5529:34;;;3630:190;5828:8;;;;;;;:::i;:::-;5896;;:::i;:::-;1158:8825;5529:34;;;;;;;-1:-1:-1;5529:34:89;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;3630:190;3778:31;;1158:8825;3778:31;1158:8825;;;3778:31;3634:56;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;3539:36;;;;;;;;;;;;;;:::i;:::-;;;;1158:8825;;;;;-1:-1:-1;;1158:8825:89;;;;;;;:::i;:::-;1500:62:49;;:::i;:::-;-1:-1:-1;;;;;1158:8825:89;;;;;;1738:24:50;1158:8825:89;;;1738:24:50;1158:8825:89;;;;1777:43:50;1158:8825:89;1777:43:50;;1158:8825:89;;;;;;-1:-1:-1;;1158:8825:89;;;;;;-1:-1:-1;;;;;1311:13:50;1158:8825:89;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;;;;:::i;:::-;1525:73:33;;:::i;:::-;-1:-1:-1;;;;;4682:5:89;;1158:8825;;;4682:36;1158:8825;4682:36;;1158:8825;;;4682:36;;1158:8825;4682:36;;1158:8825;;4682:36;;;;;;;;;;;;;1158:8825;4682:36;;;1158:8825;-1:-1:-1;4678:291:89;;;1158:8825;;;;;;6508:25;;;;1158:8825;6508:25;;1158:8825;6508:25;;1158:8825;6508:25;;;;;;;1158:8825;6508:25;;;4678:291;1158:8825;;;;-1:-1:-1;;1158:8825:89;;;;;;;;6612:14;;;;;;1158:8825;6628:3;6581:1;1158:8825;;;;;;;;6652:17;6581:1;;;6647:143;6628:3;;6581:1;1158:8825;6597:13;;6690:3;1158:8825;;6671:17;;;;;6744:9;;;7016:6;6744:9;;;;;:::i;:::-;1158:8825;;6764:9;;;;;:::i;:::-;1158:8825;;6955:6;;;;;:::i;:::-;7016;;:::i;:::-;1158:8825;6652:17;;;6671;;;6508:25;;;;;;1158:8825;6508:25;;;;;;:::i;:::-;;;;4678:291;1158:8825;;;;;;;;4780:56;;;1158:8825;4780:56;;1158:8825;4780:56;;;;;;;;;;;;1158:8825;4780:56;;;4678:291;-1:-1:-1;4776:193:89;;;1158:8825;;;;8255:34;;;;1158:8825;8255:34;;;1158:8825;8255:34;;1158:8825;8255:34;;;;;;;7016:6;8255:34;1158:8825;8255:34;;;4776:193;6955:6;;;;;;;:::i;:::-;7016;;:::i;8255:34::-;;;;;;;-1:-1:-1;8255:34:89;;;;;;:::i;:::-;;;;;;4780:56;;;;;;;;;;;;;;:::i;:::-;;;;4682:36;;;;;;;;;;;;;;:::i;:::-;;;;1158:8825;;;;;-1:-1:-1;;1158:8825:89;;;;;;;;1810:21:81;;-1:-1:-1;;;;;1810:21:81;1158:8825:89;;;1810:5:81;1158:8825:89;;1810:21:81;;;;;;;;;1158:8825:89;1810:21:81;;;1158:8825:89;;;;;;;;;1810:21:81;;;;;;;;;;;;;;;:::i;:::-;;;;;1158:8825:89;;;;;-1:-1:-1;;1158:8825:89;;;;;;;:::i;:::-;1525:73:33;;:::i;:::-;-1:-1:-1;;;;;1158:8825:89;;;2423:10:81;:21;2419:77;;2524:8;;;:::i;2419:77::-;2467:18;1158:8825:89;2467:18:81;1158:8825:89;;2467:18:81;1158:8825:89;;;;;-1:-1:-1;;1158:8825:89;;;;;1962:34;1158:8825;;:::i;:::-;;;:::i;:::-;1962:34;;:::i;:::-;1158:8825;;2013:13;1158:8825;;;;;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1525:73:33;;;;:::i;:::-;1158:8825:89;;2447:17;2443:66;;1158:8825;;-1:-1:-1;;1158:8825:89;;;;;;;;2546:23;-1:-1:-1;;;;;2546:23:89;;;:::i;:::-;;:32;1158:8825;;2607:34;;;;;:::i;:::-;1158:8825;;2652:29;;2729:3;1158:8825;;2711:16;;;;;2775:8;;;;:::i;:::-;;1158:8825;2801:13;;1158:8825;2775:8;;2801:13;1158:8825;;;-1:-1:-1;;;;;1158:8825:89;;;2883:13;-1:-1:-1;;;;;1158:8825:89;2883:13;;1158:8825;;;;;;8689:38;;;1158:8825;8689:38;;1158:8825;;8689:5;1158:8825;8689:5;-1:-1:-1;;;;;8689:5:89;1158:8825;8689:38;;;;;;-1:-1:-1;;;;;8689:38:89;1158:8825;8689:38;;;2797:217;1158:8825;;8743:24;;;8739:90;;-1:-1:-1;;;;;1158:8825:89;;8843:21;;;;;8915:27;;;;8911:117;;8839:551;;;-1:-1:-1;;;;;1158:8825:89;2567:1;8839:551;;3105:13;1158:8825;;2729:3;1158:8825;2696:13;;;8911:117;8969:44;1158:8825;8969:44;1158:8825;;;;;;;;8969:44;8839:551;9048:17;;;1158:8825;;9119:31;;9115:121;;9044:346;;;-1:-1:-1;;;;;1158:8825:89;2567:1;9044:346;8839:551;;9044:346;9335:44;;1158:8825;9335:44;1158:8825;;;;;;;;9335:44;8739:90;8790:28;;1158:8825;8790:28;1158:8825;;;;8790:28;8689:38;;;;1158:8825;8689:38;1158:8825;8689:38;;;;;;;:::i;:::-;;;;2797:217;1158:8825;-1:-1:-1;;;;;1158:8825:89;;;;;;;;2984:13;-1:-1:-1;;;;;1158:8825:89;2984:13;;1158:8825;;;;;9524:25;1158:8825;9524:25;;;1158:8825;9524:25;;1158:8825;;9524:5;1158:8825;9524:5;-1:-1:-1;;;;;9524:5:89;1158:8825;9524:25;;;;;;;1158:8825;9524:25;;;2797:217;9560:20;1158:8825;9590:21;1158:8825;9627:13;1158:8825;9661:3;1158:8825;;9642:17;;;;;9684:9;-1:-1:-1;;;;;9684:9:89;;;;:::i;:::-;1158:8825;;-1:-1:-1;;;;;1158:8825:89;;9684:28;9680:81;;9661:3;-1:-1:-1;;;;;9778:9:89;;;;;:::i;:::-;1158:8825;;9778:29;9774:83;;9661:3;2567:1;1158:8825;9627:13;;9774:83;2567:1;;-1:-1:-1;9774:83:89;;9680:81;2567:1;;-1:-1:-1;9680:81:89;;9642:17;;;;;;;;;;;;1158:8825;;;;9881:37;;9622:245;9877:98;;;2797:217;-1:-1:-1;;;;;1158:8825:89;2567:1;2797:217;;;9877:98;9941:23;1158:8825;9941:23;1158:8825;;;;9941:23;9881:37;1158:8825;;;9881:37;;;9524:25;;;;;;;1158:8825;9524:25;;;;;;:::i;:::-;;;;;2711:16;;;;1158:8825;;;3173:13;1158:8825;;;;;3205:12;;;;:::i;:::-;3232:13;;1158:8825;3265:3;1158:8825;;3247:16;;;;;1158:8825;;;-1:-1:-1;;1158:8825:89;;;;;;;3284:38;:23;2567:1;3284:23;;;:::i;:::-;3313:8;;;;;:::i;:::-;;3284:38;;:::i;:::-;1158:8825;3232:13;;1158:8825;;;;;;;;;;3247:16;;;1158:8825;;3173:13;1158:8825;;3347:59;1158:8825;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;3347:59;;1158:8825;2443:66;2487:11;1158:8825;2487:11;1158:8825;;2487:11;1158:8825;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;;2223:34;1158:8825;;:::i;2223:34::-;1158:8825;;;2274:13;1158:8825;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;;735:10:64;-1:-1:-1;;;;;1311:13:50;1158:8825:89;;2339:24:50;2335:96;;2459:6;735:10:64;2459:6:50;:::i;2335:96::-;2386:34;1158:8825:89;2386:34:50;735:10:64;1158:8825:89;;;;2386:34:50;1158:8825:89;;;;;-1:-1:-1;;1158:8825:89;;;;;1500:62:49;;:::i;:::-;1158:8825:89;-1:-1:-1;;;;;1158:8825:89;;2093:20:50;1158:8825:89;;2093:20:50;1158:8825:89;;;;;;;;;3052:40:49;;;;1158:8825:89;;;;;;;;:::i;:::-;1525:73:33;;:::i;:::-;3998:34:89;;;;:::i;:::-;1158:8825;;4075:13;1158:8825;;;;;;;;4156:20;;;;;4152:76;;4256:1;4242:15;;:43;;;1158:8825;4238:111;;1158:8825;4475:9;;1158:8825;4475:9;;4502:44;4475:9;;:::i;:::-;1158:8825;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;4502:44;;1158:8825;4238:111;1158:8825;;-1:-1:-1;;1158:8825:89;;;;;;;4301:37;1158:8825;4316:22;4301:12;4316:22;4502:44;4316:22;;;:::i;:::-;4301:12;;;;:::i;:::-;:37;;:::i;:::-;4238:111;;;4242:43;1158:8825;-1:-1:-1;;1158:8825:89;;;;;;;4261:24;;;4242:43;;4152:76;4199:18;1158:8825;4199:18;1158:8825;;4199:18;1158:8825;;;;1713:34;1158:8825;;;:::i;:::-;1713:34;;;:::i;:::-;1158:8825;;;1764:29;1158:8825;;1764:13;1158:8825;;;;;1764:29;:::i;:::-;1158:8825;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;:::o;:::-;-1:-1:-1;;1158:8825:89;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;1158:8825:89;;-1:-1:-1;1158:8825:89;;;-1:-1:-1;1158:8825:89;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;1158:8825:89;;-1:-1:-1;1158:8825:89;;-1:-1:-1;1158:8825:89;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1158:8825:89;;-1:-1:-1;1158:8825:89;;-1:-1:-1;1158:8825:89;;-1:-1:-1;1158:8825:89;;-1:-1:-1;1158:8825:89;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1158:8825:89;;-1:-1:-1;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1158:8825:89;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:89;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;7366:1;1158:8825;;7366:1;1158:8825;;7366:1;1158:8825;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1158:8825:89;;-1:-1:-1;1158:8825:89;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1931:430:33;1158:8825:89;;;2303:50:33;;;2320:22;;1158:8825:89;;;;;;;2303:50:33;;;;;;:::i;:::-;1158:8825:89;2293:61:33;;1931:430;:::o;1158:8825:89:-;;;;;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;8391:162::-;1158:8825;;8510:35;;;;1158:8825;;;;;;;;;;;;;;;;8510:35;;;;;;:::i;1688:201:33:-;1798:33;1762:20;1774:7;;;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;1688:201::o;1796:162:49:-;-1:-1:-1;;;;;1710:6:49;1158:8825:89;;735:10:64;1855:23:49;1851:101;;1796:162::o;2011:153:50:-;1158:8825:89;;;2093:20:50;1158:8825:89;;2093:20:50;1158:8825:89;2093:20:50;1158:8825:89;-1:-1:-1;;;;;1158:8825:89;;;;;;;;2093:20:50;1158:8825:89;;3052:40:49;2093:20:50;3052:40:49;;2011:153:50:o;1158:8825:89:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;;;;;;2546:382:81;;-1:-1:-1;;;;;1158:8825:89;;;;;;;;2721:15:81;;;2717:57;;1158:8825:89;;2858:21:81;1158:8825:89;2858:21:81;;;:5;;;:21;:5;;;1158:8825:89;2858:21:81;;;;;;;;;1158:8825:89;2858:21:81;;;2546:382;1158:8825:89;;;;;;2858:63:81;;;;;1158:8825:89;2858:63:81;;:21;:63;;1158:8825:89;;;;;2915:4:81;1158:8825:89;;;;;2858:63:81;;;;;;;1158:8825:89;2858:63:81;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;-1:-1:-1;2858:63:81;;;;;;:::i;:::-;2546:382;:::o;2858:21::-;1158:8825:89;2858:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o;7036:1122:89:-;;7161:34;;;;:::i;:::-;-1:-1:-1;1158:8825:89;;7239:13;1158:8825;;;;;-1:-1:-1;1158:8825:89;-1:-1:-1;7387:3:89;1158:8825;;7369:16;;;;;;7437:8;;;;:::i;:::-;7480:1;;1158:8825;;;;;7464:17;:50;;;;7387:3;7464:92;;;7387:3;7460:504;;;;7387:3;;7480:1;1158:8825;7354:13;;7460:504;7691:16;;;;;;;;7687:97;;7460:504;7846:9;7880:44;7846:9;;;;;:::i;:::-;1158:8825;;;;;;-1:-1:-1;;;;;1158:8825:89;;;;;;7880:44;7943:7::o;7687:97::-;-1:-1:-1;;1158:8825:89;;;;;;;7880:44;7742:23;7731:8;7742:23;7731:34;7742:23;;;:::i;7731:34::-;7687:97;;;7464:92;7526:8;;;;;:::i;:::-;-1:-1:-1;7526:17:89;1158:8825;-1:-1:-1;;;;;1158:8825:89;;;;;7518:38;7464:92;;;;:50;7485:8;;;;;:::i;:::-;-1:-1:-1;1158:8825:89;-1:-1:-1;;;;;1158:8825:89;;;;;7485:29;;7464:50;;7369:16;;;;8101:50;-1:-1:-1;8101:50:89;-1:-1:-1;;;;;1158:8825:89;;;;;8101:50;1158:8825;;;;;;;;-1:-1:-1;8101:50:89;5918:505;6055:34;;;;:::i;:::-;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;:::i;:::-;;;;6126:84;;;;1158:8825;5650:4;1158:8825;6126:84;;1158:8825;;-1:-1:-1;1158:8825:89;6254:13;6126:84;1158:8825;;-1:-1:-1;1158:8825:89;6286:12;;;;:::i;:::-;1158:8825;;;;-1:-1:-1;;1158:8825:89;;;;;;;6357:59;6308:23;;:34;:23;6126:84;6308:23;;:::i;:::-;:34;;:::i;:::-;-1:-1:-1;1158:8825:89;6254:13;1158:8825;;;-1:-1:-1;1158:8825:89;;;;;;;;;6357:59;;5918:505::o;:::-;6055:34;;;;:::i;:::-;-1:-1:-1;;;;;1158:8825:89;;;;;;;;;;;:::i;:::-;;;;6126:84;;;;1158:8825;;;6126:84;;1158:8825;;;;6254:13;6126:84;1158:8825;;;;6286:12;;;;:::i"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","addPath(address,(address,address,bool)[])":"815ca70f","addSimplePath(address)":"f335b520","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getPathAt(address,address,uint256)":"057074ff","getPathCount(address,address)":"94ee0a3b","getPaths(address,address)":"7c7d370a","owner()":"8da5cb5b","pendingOwner()":"e30c3978","removePathAtIndex(address,address,uint256)":"32fffdbd","removeSimplePath(address)":"bc138aa3","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"buffer\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyPath\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"buffer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"InvalidBufferPath\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolOrBuffer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"InvalidRemovePath\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"path\",\"type\":\"address\"}],\"name\":\"InvalidSimplePath\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pathsLength\",\"type\":\"uint256\"}],\"name\":\"PathAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pathsLength\",\"type\":\"uint256\"}],\"name\":\"PathRemoved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"}],\"name\":\"addPath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolOrBuffer\",\"type\":\"address\"}],\"name\":\"addSimplePath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getPathAt\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct SwapPathStep[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"getPathCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"getPaths\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct SwapPathStep[][]\",\"name\":\"\",\"type\":\"tuple[][]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"removePathAtIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolOrBuffer\",\"type\":\"address\"}],\"name\":\"removeSimplePath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The paths are stored as arrays of `SwapPathStep` structs, which contain the pool or buffer address, the output token, and a boolean indicating whether the step is a buffer or not. Functions that add information to the registry are permissioned.\",\"errors\":{\"BufferNotInitialized(address)\":[{\"params\":{\"buffer\":\"The address of the uninitialized buffer\"}}],\"InvalidBufferPath(address,address,address)\":[{\"params\":{\"buffer\":\"The address of the buffer\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}}],\"InvalidRemovePath(address,address,address)\":[{\"params\":{\"poolOrBuffer\":\"The address of the pool or buffer\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}}],\"InvalidSimplePath(address)\":[{\"params\":{\"path\":\"Pool or buffer address\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"PathAdded(address,address,uint256)\":{\"params\":{\"pathsLength\":\"The number of paths added for the token pair\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}},\"PathRemoved(address,address,uint256)\":{\"params\":{\"pathsLength\":\"The number of paths associated with the token pair after the removal\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"addPath(address,(address,address,bool)[])\":{\"details\":\"This function is permissioned. Use it to register boosted pool paths with leading / trailing buffer steps. The registry will validate that each step is valid (i.e. each pool step contains the `tokenIn` and `tokenOut`, and each buffer step has the correct wrapped / underlying token).\",\"params\":{\"steps\":\"An array of `SwapPathStep` structs representing the path steps to reach the output token\",\"tokenIn\":\"The address of the input token in the pair\"}},\"addSimplePath(address)\":{\"details\":\"This function is permissioned.\",\"params\":{\"poolOrBuffer\":\"The address of the pool or buffer\"}},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getPathAt(address,address,uint256)\":{\"details\":\"Safe version; reverts if the index is out of bounds.\",\"params\":{\"index\":\"The index of the path in the list of paths for the token pair\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"},\"returns\":{\"_0\":\"The path at the specified index for the token pair\"}},\"getPathCount(address,address)\":{\"params\":{\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"},\"returns\":{\"_0\":\"The number of paths registered for the token pair\"}},\"getPaths(address,address)\":{\"params\":{\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"},\"returns\":{\"_0\":\"An array of path addresses registered for the token pair\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"removePathAtIndex(address,address,uint256)\":{\"details\":\"This function is permissioned.\",\"params\":{\"index\":\"The index of the path to remove in the list of paths for the token pair\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}},\"removeSimplePath(address)\":{\"details\":\"This function is permissioned.\",\"params\":{\"poolOrBuffer\":\"The address of the pool or buffer\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"BufferNotInitialized(address)\":[{\"notice\":\"The given buffer address does not correspond to an initialized buffer.\"}],\"EmptyPath()\":[{\"notice\":\"The path to add cannot be empty.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"Attempted to remove a path at an index beyond the registered length.\"}],\"InvalidBufferPath(address,address,address)\":[{\"notice\":\"The output token does not match the expected address in a wrap or unwrap operation.\"}],\"InvalidRemovePath(address,address,address)\":[{\"notice\":\"The given pool or buffer is not registered as a path for the token pair.\"}],\"InvalidSimplePath(address)\":[{\"notice\":\"The given address is not a valid pool or buffer.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"events\":{\"PathAdded(address,address,uint256)\":{\"notice\":\"Emitted when a new token pair is added to the registry.\"},\"PathRemoved(address,address,uint256)\":{\"notice\":\"Emitted when an existing token pair is removed from the registry.\"}},\"kind\":\"user\",\"methods\":{\"addPath(address,(address,address,bool)[])\":{\"notice\":\"Adds an arbitrary path between `tokenIn` and the last step's `tokenOut` to the registry.\"},\"addSimplePath(address)\":{\"notice\":\"Adds a pool or buffer to the registry with all token pairs it supports.\"},\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"},\"getPathAt(address,address,uint256)\":{\"notice\":\"Returns the path for a given token pair at a specific index.\"},\"getPathCount(address,address)\":{\"notice\":\"Returns the number of paths registered for a given token pair.\"},\"getPaths(address,address)\":{\"notice\":\"Returns the paths registered for a given token pair.\"},\"removePathAtIndex(address,address,uint256)\":{\"notice\":\"Removes an arbitrary path from the registry at a given index.\"},\"removeSimplePath(address)\":{\"notice\":\"Removes all token paths registered for a given pool or buffer.\"}},\"notice\":\"Stores token pair swap paths on-chain, allowing an admin to maintain swap routes.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/TokenPairRegistry.sol\":\"TokenPairRegistry\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol\":{\"keccak256\":\"0xd4b893a6f835f8bdf514b99a4bd0ba00cd54d0b575f675abd95efd99742b0fb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3cf813c85596cffa3198175d9d288c643937b6629166832cebd3878d192e04c3\",\"dweb:/ipfs/QmXnK5iKZ9ZJ4sEUqJbTJ2UWpqbbehkwLZT8WraPcnDCDh\"]},\"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol\":{\"keccak256\":\"0x956f0a455276ada0193331696b9e3402d8b32fbacc5a5d7fa659ff4b5a2fc47a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03169eeb5ca1b2594fce7f13fb06e268545044c4501b6d1f98b8e86dff788afc\",\"dweb:/ipfs/QmPLsewKZZoG4QaeQEn1WGsaCKyABsYku4KgLQtumTAyVv\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\":{\"keccak256\":\"0xa981b2a584a81920bc4bd25570ce31f83890bdd41174e11d230e9da179a29468\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5908435bef8ce18bed32900d668530bade6d9207059cbc3ad2460c5e41eba532\",\"dweb:/ipfs/QmZZePBFw5vkoZZNKt9q5PBCFNuGS9LJABAMjAaG6kg6u8\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/TokenPairRegistry.sol\":{\"keccak256\":\"0xd11748453140ed8348635fff6a4a12da8c5bbc4cfdf3b4b7b30c8e7130d3b993\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://081e50c993a489c673a38e4ce2f720857b2cbbd468b77a8adc1c95434055d98f\",\"dweb:/ipfs/QmPiC1Y1o9gVRGvtpWFGFs3Tmi3i2NQtmUwNiznUKtyQ5v\"]}},\"version\":1}"}},"contracts/test/FeeBurnerAuthenticationMock.sol":{"FeeBurnerAuthenticationMock":{"abi":[{"inputs":[{"internalType":"contract IProtocolFeeSweeper","name":"protocolFeeSweeper","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidProtocolFeeSweeper","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualOnlyFeeRecipientOrOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualOnlyProtocolFeeSweeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeSweeper","outputs":[{"internalType":"contract IProtocolFeeSweeper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a0346100f657601f61065638819003918201601f19168301916001600160401b038311848410176100fa5780849260409485528339810103126100f65780516001600160a01b0391828216908183036100f657602001518381168091036100f65780156100e35760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3156100d457608052610547908161010f823960805181818160ca015281816102dd01526104a10152f35b63932c92a560e01b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe608060409080825260049081361015610016575f80fd5b5f3560e01c908163178ac96e1461047757508063715018a6146103f257806379ba5097146103385780638da5cb5b146103055780638ec20833146102b5578063e30c397814610281578063f2fde38b146101f45763f405ce4414610078575f80fd5b346101b2575f6003193601126101b25773ffffffffffffffffffffffffffffffffffffffff82517f4ccb20c00000000000000000000000000000000000000000000000000000000081526020818481857f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101ea578293945f92610145575b5050163314159081610137575b5061011157005b7f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90505f54163314155f61010a565b915091506020903d6020116101e2575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011683019083821067ffffffffffffffff8311176101b657526020908201829003126101b2575181811681036101b25781905f806100fd565b5f80fd5b6041867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b3d9150610155565b84513d5f823e3d90fd5b50346101b25760206003193601126101b2573573ffffffffffffffffffffffffffffffffffffffff8082168092036101b25761022e6104c5565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b82346101b2575f6003193601126101b25760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50346101b2575f6003193601126101b25773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361011157005b82346101b2575f6003193601126101b25760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50346101b2575f6003193601126101b2576001549073ffffffffffffffffffffffffffffffffffffffff9033828416036103c757507fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b346101b2575f6003193601126101b25761040a6104c5565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101b2575f6003193601126101b25760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b73ffffffffffffffffffffffffffffffffffffffff5f541633036104e557565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffdfea264697066735822122038f5d9fd03f05eb911f88bdf390163e3b48e829e643ec61bad0b6dc300adc56864736f6c634300081b0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH2 0xF6 JUMPI PUSH1 0x1F PUSH2 0x656 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0xFA JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0xF6 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0xF6 JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0xF6 JUMPI DUP1 ISZERO PUSH2 0xE3 JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ISZERO PUSH2 0xD4 JUMPI PUSH1 0x80 MSTORE PUSH2 0x547 SWAP1 DUP2 PUSH2 0x10F DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0xCA ADD MSTORE DUP2 DUP2 PUSH2 0x2DD ADD MSTORE PUSH2 0x4A1 ADD MSTORE RETURN JUMPDEST PUSH4 0x932C92A5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x178AC96E EQ PUSH2 0x477 JUMPI POP DUP1 PUSH4 0x715018A6 EQ PUSH2 0x3F2 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x338 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x8EC20833 EQ PUSH2 0x2B5 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x281 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1F4 JUMPI PUSH4 0xF405CE44 EQ PUSH2 0x78 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 DUP5 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1EA JUMPI DUP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0x145 JUMPI JUMPDEST POP POP AND CALLER EQ ISZERO SWAP1 DUP2 PUSH2 0x137 JUMPI JUMPDEST POP PUSH2 0x111 JUMPI STOP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP PUSH0 SLOAD AND CALLER EQ ISZERO PUSH0 PUSH2 0x10A JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x20 SWAP1 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1E2 JUMPI JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP4 ADD AND DUP4 ADD SWAP1 DUP4 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x1B6 JUMPI MSTORE PUSH1 0x20 SWAP1 DUP3 ADD DUP3 SWAP1 SUB SLT PUSH2 0x1B2 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x1B2 JUMPI DUP2 SWAP1 PUSH0 DUP1 PUSH2 0xFD JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x41 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x155 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1B2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1B2 JUMPI PUSH2 0x22E PUSH2 0x4C5 JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x111 JUMPI STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x1 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 CALLER DUP3 DUP5 AND SUB PUSH2 0x3C7 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH2 0x40A PUSH2 0x4C5 JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x4E5 JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CODESIZE CREATE2 0xD9 REVERT SUB CREATE MCOPY 0xB9 GT 0xF8 DUP12 0xDF CODECOPY ADD PUSH4 0xE3B48E82 SWAP15 PUSH5 0x3EC61BAD0B PUSH14 0xC300ADC56864736F6C634300081B STOP CALLER ","sourceMap":"349:452:90:-:0;;;;;;;;;;;;;-1:-1:-1;;349:452:90;;;;-1:-1:-1;;;;;349:452:90;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;349:452:90;;;;;;;;;;;;;;;;;;;;;1273:26:49;;1269:95;;349:452:90;;;;;;;;2093:20:50;349:452:90;;2093:20:50;349:452:90;;-1:-1:-1;349:452:90;;;;;-1:-1:-1;349:452:90;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1203:42:78;1199:107;;1316:40;;349:452:90;;;;;;1316:40:78;349:452:90;;;;;;;;;;;;;;;;1199:107:78;1268:27;;;-1:-1:-1;1268:27:78;;-1:-1:-1;1268:27:78;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;349:452:90;;-1:-1:-1;1322:31:49;349:452:90;-1:-1:-1;349:452:90;;;;;;-1:-1:-1;349:452:90;;;;;-1:-1:-1;349:452:90"},"deployedBytecode":{"functionDebugData":{"fun_checkOwner":{"entryPoint":1221,"id":9423,"parameterSlots":0,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"19771":[{"length":32,"start":202},{"length":32,"start":733},{"length":32,"start":1185}]},"linkReferences":{},"object":"608060409080825260049081361015610016575f80fd5b5f3560e01c908163178ac96e1461047757508063715018a6146103f257806379ba5097146103385780638da5cb5b146103055780638ec20833146102b5578063e30c397814610281578063f2fde38b146101f45763f405ce4414610078575f80fd5b346101b2575f6003193601126101b25773ffffffffffffffffffffffffffffffffffffffff82517f4ccb20c00000000000000000000000000000000000000000000000000000000081526020818481857f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101ea578293945f92610145575b5050163314159081610137575b5061011157005b7f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90505f54163314155f61010a565b915091506020903d6020116101e2575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011683019083821067ffffffffffffffff8311176101b657526020908201829003126101b2575181811681036101b25781905f806100fd565b5f80fd5b6041867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b3d9150610155565b84513d5f823e3d90fd5b50346101b25760206003193601126101b2573573ffffffffffffffffffffffffffffffffffffffff8082168092036101b25761022e6104c5565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b82346101b2575f6003193601126101b25760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50346101b2575f6003193601126101b25773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361011157005b82346101b2575f6003193601126101b25760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50346101b2575f6003193601126101b2576001549073ffffffffffffffffffffffffffffffffffffffff9033828416036103c757507fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b346101b2575f6003193601126101b25761040a6104c5565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101b2575f6003193601126101b25760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b73ffffffffffffffffffffffffffffffffffffffff5f541633036104e557565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffdfea264697066735822122038f5d9fd03f05eb911f88bdf390163e3b48e829e643ec61bad0b6dc300adc56864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x178AC96E EQ PUSH2 0x477 JUMPI POP DUP1 PUSH4 0x715018A6 EQ PUSH2 0x3F2 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x338 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x8EC20833 EQ PUSH2 0x2B5 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x281 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1F4 JUMPI PUSH4 0xF405CE44 EQ PUSH2 0x78 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 DUP5 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1EA JUMPI DUP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0x145 JUMPI JUMPDEST POP POP AND CALLER EQ ISZERO SWAP1 DUP2 PUSH2 0x137 JUMPI JUMPDEST POP PUSH2 0x111 JUMPI STOP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP PUSH0 SLOAD AND CALLER EQ ISZERO PUSH0 PUSH2 0x10A JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x20 SWAP1 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1E2 JUMPI JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP4 ADD AND DUP4 ADD SWAP1 DUP4 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x1B6 JUMPI MSTORE PUSH1 0x20 SWAP1 DUP3 ADD DUP3 SWAP1 SUB SLT PUSH2 0x1B2 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x1B2 JUMPI DUP2 SWAP1 PUSH0 DUP1 PUSH2 0xFD JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x41 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x155 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1B2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1B2 JUMPI PUSH2 0x22E PUSH2 0x4C5 JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x111 JUMPI STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x1 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 CALLER DUP3 DUP5 AND SUB PUSH2 0x3C7 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH2 0x40A PUSH2 0x4C5 JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x4E5 JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CODESIZE CREATE2 0xD9 REVERT SUB CREATE MCOPY 0xB9 GT 0xF8 DUP12 0xDF CODECOPY ADD PUSH4 0xE3B48E82 SWAP15 PUSH5 0x3EC61BAD0B PUSH14 0xC300ADC56864736F6C634300081B STOP CALLER ","sourceMap":"349:452:90:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;349:452:90;;;;;;;;;956:36:78;;;:18;;;;;349:452:90;956:36:78;;;;;;;;;;349:452:90;956:36:78;;;349:452:90;;;;942:10:78;:50;;:75;;;;349:452:90;938:131:78;;;349:452:90;938:131:78;1040:18;349:452:90;1040:18:78;349:452:90;1040:18:78;942:75;349:452:90;;;;;942:10:78;996:21;;942:75;;;956:36;;;;;;;;;;;;;349:452:90;;;;;;;;;;;;;;;;;;956:36:78;;;;349:452:90;;;;;;;;;;;;;;956:36:78;;;;;;349:452:90;;;;;;;;;;;;;;956:36:78;;;-1:-1:-1;956:36:78;;;349:452:90;;;;;;;;;;;;;;;-1:-1:-1;;349:452:90;;;;;;;;;;;;;;;1500:62:49;;:::i;:::-;349:452:90;;1738:24:50;349:452:90;;;1738:24:50;349:452:90;;;;1777:43:50;349:452:90;1777:43:50;;349:452:90;;;;;;;-1:-1:-1;;349:452:90;;;;;;;;1311:13:50;349:452:90;;;;;;;;;;;;;;-1:-1:-1;;349:452:90;;;;;;799:18:78;349:452:90;777:10:78;:41;773:97;;349:452:90;;;;;;;-1:-1:-1;;349:452:90;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;349:452:90;;;;;1311:13:50;349:452:90;;;735:10:64;;349:452:90;;;2339:24:50;2335:96;;349:452:90;;;;;1311:13:50;349:452:90;;;735:10:64;;349:452:90;;;;;;735:10:64;349:452:90;;3052:40:49;349:452:90;3052:40:49;;349:452:90;2335:96:50;2386:34;349:452:90;2386:34:50;735:10:64;349:452:90;;;;2386:34:50;349:452:90;;;;;-1:-1:-1;;349:452:90;;;;;1500:62:49;;:::i;:::-;349:452:90;;;;2093:20:50;349:452:90;;2093:20:50;349:452:90;;;;;;;;;3052:40:49;;;;349:452:90;;;;;;-1:-1:-1;;349:452:90;;;;;;479:55:78;349:452:90;479:55:78;349:452:90;;;;1796:162:49;349:452:90;1710:6:49;349:452:90;;735:10:64;1855:23:49;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:64;1901:40:49;349:452:90;;1710:6:49;1901:40"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","manualOnlyFeeRecipientOrOwner()":"f405ce44","manualOnlyProtocolFeeSweeper()":"8ec20833","owner()":"8da5cb5b","pendingOwner()":"e30c3978","protocolFeeSweeper()":"178ac96e","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"protocolFeeSweeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeSweeper\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualOnlyFeeRecipientOrOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualOnlyProtocolFeeSweeper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFeeSweeper\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidProtocolFeeSweeper()\":[{\"notice\":\"The fee protocol is invalid.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/FeeBurnerAuthenticationMock.sol\":\"FeeBurnerAuthenticationMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"contracts/FeeBurnerAuthentication.sol\":{\"keccak256\":\"0x4861db67bf113a4775c165241802df34a6c0e9fefaec82e8aaf969b5879759f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f522b3af683e09e1b67ed515be9972e7cf9514a584e264c4ca9656cc12c2f06\",\"dweb:/ipfs/QmNYqMsvWcNqACozLm3cYeR4oC3KKfKNBDSqR3vcpjv3zo\"]},\"contracts/test/FeeBurnerAuthenticationMock.sol\":{\"keccak256\":\"0xb5e7ba14717b87abf9cdf5fa11f1c22897abcaf828cf79e30353fc2d6e00c7e6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b2686f5a5c9fc53139e1110a32b6fee6ab2b08e0fb6490db942d4c68c7339a4d\",\"dweb:/ipfs/QmZmQf75fe96NMQXcen6trFGcxmNWkhdF8atir5L78ppUj\"]}},\"version\":1}"}},"contracts/test/OwnableAuthenticationMock.sol":{"OwnableAuthenticationMock":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"permissionedFunction","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461010357601f61092b38819003918201601f19168301916001600160401b038311848410176101075780849260409485528339810103126101035780516001600160a01b03918282169081830361010357602001518381168091036101035780156100f05760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100e15760a05261080f908161011c8239608051816104f7015260a05181818160b60152818161020c01526106e80152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f3560e01c908163715018a6146103d957816379ba509714610376578163851c1bb3146103265781638da5cb5b146102f3578163a89b112814610281578163aaabadc5146101b8578163c1d080101461019e578163e30c39781461016a578163f2fde38b146100de575063fbfa77cf1461008b575f80fd5b346100da575f6003193601126100da576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b346100da5760206003193601126100da573573ffffffffffffffffffffffffffffffffffffffff8082168092036100da5761011761056e565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b82346100da575f6003193601126100da5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b346100da575f6003193601126100da576101b661062c565b005b9050346100da575f6003193601126100da5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561027757926020935f93610248575b505191168152f35b610269919350843d8611610270575b610261818361045e565b810190610542565b915f610240565b503d610257565b83513d5f823e3d90fd5b346100da5760206003193601126100da57803573ffffffffffffffffffffffffffffffffffffffff80821682036100da576102ba61062c565b5f541633146102cc576101b6906105ba565b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b82346100da575f6003193601126100da5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b9050346100da5760206003193601126100da5735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100da5761036f6020926104cc565b9051908152f35b346100da575f6003193601126100da573373ffffffffffffffffffffffffffffffffffffffff60015416036103ae576101b6336105ba565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b346100da575f6003193601126100da576103f161056e565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761049f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff82111761049f5760405251902090565b908160209103126100da575173ffffffffffffffffffffffffffffffffffffffff811681036100da5790565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361058e57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b61066261065b7fffffffff000000000000000000000000000000000000000000000000000000005f35166104cc565b3390610691565b1561066957565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146107d157604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156107a25785935f956107ad575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa9182156107a2575f9261076f57505090565b90809250813d831161079b575b610786818361045e565b810103126100da575180151581036100da5790565b503d61077c565b6040513d5f823e3d90fd5b6064929195506107c990853d871161027057610261818361045e565b94909161071a565b50505060019056fea2646970667358221220248f838b072c70b516f68d61cba8d45e5457802995051bda0db4d4d92f2fe24964736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x103 JUMPI PUSH1 0x1F PUSH2 0x92B CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x107 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x103 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x103 JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x103 JUMPI DUP1 ISZERO PUSH2 0xF0 JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xE1 JUMPI PUSH1 0xA0 MSTORE PUSH2 0x80F SWAP1 DUP2 PUSH2 0x11C DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x4F7 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xB6 ADD MSTORE DUP2 DUP2 PUSH2 0x20C ADD MSTORE PUSH2 0x6E8 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x715018A6 EQ PUSH2 0x3D9 JUMPI DUP2 PUSH4 0x79BA5097 EQ PUSH2 0x376 JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x326 JUMPI DUP2 PUSH4 0x8DA5CB5B EQ PUSH2 0x2F3 JUMPI DUP2 PUSH4 0xA89B1128 EQ PUSH2 0x281 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x1B8 JUMPI DUP2 PUSH4 0xC1D08010 EQ PUSH2 0x19E JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x16A JUMPI DUP2 PUSH4 0xF2FDE38B EQ PUSH2 0xDE JUMPI POP PUSH4 0xFBFA77CF EQ PUSH2 0x8B JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xDA JUMPI PUSH2 0x117 PUSH2 0x56E JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH2 0x1B6 PUSH2 0x62C JUMP JUMPDEST STOP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x277 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x248 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x269 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x270 JUMPI JUMPDEST PUSH2 0x261 DUP2 DUP4 PUSH2 0x45E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x542 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x240 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x257 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP3 SUB PUSH2 0xDA JUMPI PUSH2 0x2BA PUSH2 0x62C JUMP JUMPDEST PUSH0 SLOAD AND CALLER EQ PUSH2 0x2CC JUMPI PUSH2 0x1B6 SWAP1 PUSH2 0x5BA JUMP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xDA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xDA JUMPI PUSH2 0x36F PUSH1 0x20 SWAP3 PUSH2 0x4CC JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0x3AE JUMPI PUSH2 0x1B6 CALLER PUSH2 0x5BA JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH2 0x3F1 PUSH2 0x56E JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x49F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x49F JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xDA JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xDA JUMPI SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x58E JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH2 0x662 PUSH2 0x65B PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x4CC JUMP JUMPDEST CALLER SWAP1 PUSH2 0x691 JUMP JUMPDEST ISZERO PUSH2 0x669 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x7D1 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x7A2 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x7AD JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7A2 JUMPI PUSH0 SWAP3 PUSH2 0x76F JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x79B JUMPI JUMPDEST PUSH2 0x786 DUP2 DUP4 PUSH2 0x45E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xDA JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xDA JUMPI SWAP1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x77C JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x7C9 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x270 JUMPI PUSH2 0x261 DUP2 DUP4 PUSH2 0x45E JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x71A JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 DUP16 DUP4 DUP12 SMOD 0x2C PUSH17 0xB516F68D61CBA8D45E5457802995051BDA 0xD 0xB4 0xD4 0xD9 0x2F 0x2F 0xE2 BLOBHASH PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"574:352:91:-:0;;;;;;;;;;;;;-1:-1:-1;;574:352:91;;;;-1:-1:-1;;;;;574:352:91;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;574:352:91;;;;;;;;;;;;;;;;;;;;;1273:26:49;;1269:95;;574:352:91;;;;;;;;2093:20:50;574:352:91;;2093:20:50;574:352:91;;-1:-1:-1;574:352:91;;;;;-1:-1:-1;574:352:91;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1524:4:81;1347:46:33;;1548:29:81;1544:80;;1634:14;;574:352:91;;;;;;1347:46:33;574:352:91;;;;;1634:14:81;574:352:91;;;;;;;;;;;;;;;;1544:80:81;1600:13;;;-1:-1:-1;1600:13:81;;-1:-1:-1;1600:13:81;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;574:352:91;;-1:-1:-1;1322:31:49;574:352:91;-1:-1:-1;574:352:91;;;;;;-1:-1:-1;574:352:91;;;;;-1:-1:-1;574:352:91"},"deployedBytecode":{"functionDebugData":{"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":1346,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":1118,"id":null,"parameterSlots":2,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":1580,"id":4356,"parameterSlots":0,"returnSlots":0},"fun_canPerform":{"entryPoint":1681,"id":20329,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":1390,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":1228,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_transferOwnership":{"entryPoint":1466,"id":9547,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":1271}],"20218":[{"length":32,"start":182},{"length":32,"start":524},{"length":32,"start":1768}]},"linkReferences":{},"object":"604060808152600480361015610013575f80fd5b5f3560e01c908163715018a6146103d957816379ba509714610376578163851c1bb3146103265781638da5cb5b146102f3578163a89b112814610281578163aaabadc5146101b8578163c1d080101461019e578163e30c39781461016a578163f2fde38b146100de575063fbfa77cf1461008b575f80fd5b346100da575f6003193601126100da576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b346100da5760206003193601126100da573573ffffffffffffffffffffffffffffffffffffffff8082168092036100da5761011761056e565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b82346100da575f6003193601126100da5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b346100da575f6003193601126100da576101b661062c565b005b9050346100da575f6003193601126100da5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561027757926020935f93610248575b505191168152f35b610269919350843d8611610270575b610261818361045e565b810190610542565b915f610240565b503d610257565b83513d5f823e3d90fd5b346100da5760206003193601126100da57803573ffffffffffffffffffffffffffffffffffffffff80821682036100da576102ba61062c565b5f541633146102cc576101b6906105ba565b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b82346100da575f6003193601126100da5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b9050346100da5760206003193601126100da5735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100da5761036f6020926104cc565b9051908152f35b346100da575f6003193601126100da573373ffffffffffffffffffffffffffffffffffffffff60015416036103ae576101b6336105ba565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b346100da575f6003193601126100da576103f161056e565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761049f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff82111761049f5760405251902090565b908160209103126100da575173ffffffffffffffffffffffffffffffffffffffff811681036100da5790565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361058e57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b61066261065b7fffffffff000000000000000000000000000000000000000000000000000000005f35166104cc565b3390610691565b1561066957565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146107d157604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156107a25785935f956107ad575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa9182156107a2575f9261076f57505090565b90809250813d831161079b575b610786818361045e565b810103126100da575180151581036100da5790565b503d61077c565b6040513d5f823e3d90fd5b6064929195506107c990853d871161027057610261818361045e565b94909161071a565b50505060019056fea2646970667358221220248f838b072c70b516f68d61cba8d45e5457802995051bda0db4d4d92f2fe24964736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x715018A6 EQ PUSH2 0x3D9 JUMPI DUP2 PUSH4 0x79BA5097 EQ PUSH2 0x376 JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x326 JUMPI DUP2 PUSH4 0x8DA5CB5B EQ PUSH2 0x2F3 JUMPI DUP2 PUSH4 0xA89B1128 EQ PUSH2 0x281 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x1B8 JUMPI DUP2 PUSH4 0xC1D08010 EQ PUSH2 0x19E JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x16A JUMPI DUP2 PUSH4 0xF2FDE38B EQ PUSH2 0xDE JUMPI POP PUSH4 0xFBFA77CF EQ PUSH2 0x8B JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xDA JUMPI PUSH2 0x117 PUSH2 0x56E JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH2 0x1B6 PUSH2 0x62C JUMP JUMPDEST STOP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x277 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x248 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x269 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x270 JUMPI JUMPDEST PUSH2 0x261 DUP2 DUP4 PUSH2 0x45E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x542 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x240 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x257 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP3 SUB PUSH2 0xDA JUMPI PUSH2 0x2BA PUSH2 0x62C JUMP JUMPDEST PUSH0 SLOAD AND CALLER EQ PUSH2 0x2CC JUMPI PUSH2 0x1B6 SWAP1 PUSH2 0x5BA JUMP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xDA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xDA JUMPI PUSH2 0x36F PUSH1 0x20 SWAP3 PUSH2 0x4CC JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0x3AE JUMPI PUSH2 0x1B6 CALLER PUSH2 0x5BA JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH2 0x3F1 PUSH2 0x56E JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x49F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x49F JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xDA JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xDA JUMPI SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x58E JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH2 0x662 PUSH2 0x65B PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x4CC JUMP JUMPDEST CALLER SWAP1 PUSH2 0x691 JUMP JUMPDEST ISZERO PUSH2 0x669 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x7D1 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x7A2 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x7AD JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7A2 JUMPI PUSH0 SWAP3 PUSH2 0x76F JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x79B JUMPI JUMPDEST PUSH2 0x786 DUP2 DUP4 PUSH2 0x45E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xDA JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xDA JUMPI SWAP1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x77C JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x7C9 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x270 JUMPI PUSH2 0x261 DUP2 DUP4 PUSH2 0x45E JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x71A JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 DUP16 DUP4 DUP12 SMOD 0x2C PUSH17 0xB516F68D61CBA8D45E5457802995051BDA 0xD 0xB4 0xD4 0xD9 0x2F 0x2F 0xE2 BLOBHASH PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"574:352:91:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21:81;574:352:91;1810:21:81;;;574:352:91;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;574:352:91;;;;;;;;;1348:29:81;574:352:91;;;;;;;;;;;;;-1:-1:-1;;574:352:91;;;;;;;;;;;;;;;1500:62:49;;:::i;:::-;574:352:91;;1738:24:50;574:352:91;;;1738:24:50;574:352:91;;;;1777:43:50;574:352:91;1777:43:50;;574:352:91;;;;;;;-1:-1:-1;;574:352:91;;;;;;;;1311:13:50;574:352:91;;;;;;;;;;;;;-1:-1:-1;;574:352:91;;;;;1525:73:33;;:::i;:::-;574:352:91;;;;;;;;-1:-1:-1;;574:352:91;;;;;;1810:21:81;574:352:91;;1810:21:81;;574:352:91;1810:21:81;;:5;;;574:352:91;1810:21:81;;;;;;;;;;574:352:91;1810:21:81;;;574:352:91;;;;;;;;1810:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;574:352:91;;;;;;;;;;;;;;-1:-1:-1;;574:352:91;;;;;;;;;;;;;;;1525:73:33;;:::i;:::-;574:352:91;;;2423:10:81;:21;2419:77;;2524:8;;;:::i;2419:77::-;2467:18;;574:352:91;2467:18:81;574:352:91;2467:18:81;574:352:91;;;;;;-1:-1:-1;;574:352:91;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;574:352:91;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;574:352:91;;;;;735:10:64;574:352:91;1311:13:50;574:352:91;;2339:24:50;2335:96;;2459:6;735:10:64;2459:6:50;:::i;2335:96::-;2386:34;574:352:91;2386:34:50;735:10:64;574:352:91;;;;2386:34:50;574:352:91;;;;;-1:-1:-1;;574:352:91;;;;;1500:62:49;;:::i;:::-;574:352:91;;;;2093:20:50;574:352:91;;2093:20:50;574:352:91;;;;;;;;;3052:40:49;;;;574:352:91;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:33;574:352:91;;;2303:50:33;;;2320:22;;574:352:91;;;;;;;2303:50:33;;;574:352:91;;;;;;;;;;;;;;;2293:61:33;;1931:430;:::o;574:352:91:-;;;;;;;;;;;;;;;;;;:::o;1796:162:49:-;574:352:91;1710:6:49;574:352:91;;735:10:64;1855:23:49;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:64;1901:40:49;574:352:91;;1710:6:49;1901:40;2011:153:50;574:352:91;;;2093:20:50;574:352:91;;2093:20:50;574:352:91;2093:20:50;574:352:91;;;;;;;;;;2093:20:50;574:352:91;;3052:40:49;2093:20:50;3052:40:49;;2011:153:50:o;1688:201:33:-;1798:33;1762:20;1774:7;;;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;;1774:7;1854:18;2546:382:81;;574:352:91;;;;;;;;;2721:15:81;;;2717:57;;574:352:91;;2858:21:81;574:352:91;2858:21:81;;;:5;;;:21;:5;;;574:352:91;2858:21:81;;;;;;;;;574:352:91;2858:21:81;;;2546:382;574:352:91;;;;;;2858:63:81;;;;;574:352:91;2858:63:81;;:21;:63;;574:352:91;;;;;2915:4:81;574:352:91;;;;;2858:63:81;;;;;;;574:352:91;2858:63:81;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;;;;;;;;;;;:::i;:::-;;;574:352:91;;;;;;;;;;;;2546:382:81;:::o;2858:63::-;;;;;;574:352:91;;;;;;;;;2858:21:81;574:352:91;2858:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","owner()":"8da5cb5b","pendingOwner()":"e30c3978","permissionedFunction()":"c1d08010","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"permissionedFunction\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"kind\":\"user\",\"methods\":{\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/OwnableAuthenticationMock.sol\":\"OwnableAuthenticationMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/test/OwnableAuthenticationMock.sol\":{\"keccak256\":\"0x9db9a3a18520c17880fbe2d49b9592d77e6412b200ebfc11d2dd84c5b326bf89\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e4a1ce6e79220ca4f904fbe9a42aca464b4fac8cfdaecc32bbd922bf0173e9ab\",\"dweb:/ipfs/QmZ3wFHp7EGB6AmD8FsgpsgEUtpAbSJB5EskETF9GnPe7S\"]}},\"version\":1}"}},"contracts/test/PoolHelperMock.sol":{"PoolHelperMock":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"InvalidPoolSetId","type":"error"},{"inputs":[],"name":"InvalidPoolSetManager","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"poolSetManager","type":"address"}],"name":"PoolSetManagerNotUnique","type":"error"},{"inputs":[],"name":"SenderIsNotPoolSetManager","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolRemovedFromSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"initialManager","type":"address"}],"name":"PoolSetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"PoolSetDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"PoolSetOwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPoolsToSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"destroyPoolSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getAllPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getManagerForPoolSet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextPoolSetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getPoolCountForSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolSetIdForCaller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"getPoolSetIdForManager","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isPoolInSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isValidPoolSetId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePoolsFromSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferPoolSetOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461011757601f61182238819003918201601f19168301916001600160401b0383118484101761011b5780849260409485528339810103126101175780516001600160a01b03918282169081830361011757602001518381168091036101175780156101045760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100f55760a05260016002556116f2908161013082396080518161112c015260a05181818161015301528181610283015281816104e601528181610b2e01526115900152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f35908160e01c918263182551da14610eae578263255dae4114610e6e57826325c427ed14610e2b5782632da55a1d14610d635782633700f98714610c7e5782633e035f9b14610aa657826362d5346214610a75578263715018a6146109f057826379ba50971461098c5782637c1ec46014610840578263851c1bb3146107f75782638c60ebd0146106b15782638da5cb5b1461067e57826394fc4058146105fe578263a89b11281461055b57508163aaabadc514610492578163c482e82214610474578163ce998aba14610450578163e30c39781461041c578163e909c19b146103df578163ebf3a8d014610245578163f167a1e61461020857508063f2fde38b1461017b5763fbfa77cf14610128575f80fd5b34610177575f600319360112610177576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b3461017757602060031936011261017757610194610f16565b61019c61125a565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b823461017757602060031936011261017757602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f2054169051908152f35b823461017757906102553661103c565b61026093919361125a565b610269846111f5565b80519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116925f5b8681106102b057005b826102bb82846110c0565b511686517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156103d5575f916103a8575b501561037e579060058b9392845f525261031d828a5f20611664565b15610352575090600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a3016102a7565b90867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b5090857f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b6103c89150823d84116103ce575b6103c08183610f39565b8101906111dd565b8c610301565b503d6103b6565b8a513d5f823e3d90fd5b8234610177576020600319360112610177576020906104156103ff610f16565b61040761125a565b610410816112a6565b611329565b9051908152f35b8234610177575f6003193601126101775760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b8234610177575f60031936011261017757602091335f528252805f20549051908152f35b8234610177575f600319360112610177576020906002549051908152f35b905034610177575f6003193601126101775773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561055157926020935f93610522575b505191168152f35b610543919350843d861161054a575b61053b8183610f39565b8101906111b1565b915f61051a565b503d610531565b83513d5f823e3d90fd5b34610177576020600319360112610177576105a96105a27fffffffff0000000000000000000000000000000000000000000000000000000061059b610f16565b9316611101565b3390611539565b156105d75773ffffffffffffffffffffffffffffffffffffffff5f541633146105d7576105d5906113be565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b838234610177576020906020600319360112610177573561061e816111f5565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b828210610667576106638686610659828b0383610f39565b519182918261106f565b0390f35b835487529586019560019384019390910190610641565b8334610177575f6003193601126101775760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b83823461017757606060031936011261017757803590602435604435916106d7846111f5565b835f526005906020906005602052865f20548585119081156107ed575b81156107e2575b506107b7575061070b8385611177565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061074e61073988610fa7565b976107468a51998a610f39565b808952610fa7565b01366020880137835b85811061076b57875180610663898261106f565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff610795828b5f20611430565b90549060031b1c166107b06107aa8884611177565b8a6110c0565b5201610757565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b9050841015886106fb565b80871191506106f4565b8382346101775760206003193601126101775735907fffffffff000000000000000000000000000000000000000000000000000000008216820361017757610415602092611101565b83823461017757602091826003193601126101775781359161086061125a565b610869836111f5565b825f5260058452815f208054805b61092c575050825f5260058452815f208054905f81558161090f575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610893575f8155600101610919565b5f19018061098673ffffffffffffffffffffffffffffffffffffffff6109528386611430565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a384611445565b50610877565b5034610177575f600319360112610177573373ffffffffffffffffffffffffffffffffffffffff60015416036109c5576105d5336113be565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b34610177575f60031936011261017757610a0861125a565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b5082346101775760206003193601126101775760209135610a95816111f5565b5f5260058252805f20549051908152f35b508234610177578060031936011261017757610ac0610f16565b60249260243567ffffffffffffffff811161017757610ae5610aee9136908401610fbf565b9261040761125a565b938251610b00575b6020858551908152f35b610b0b92919261125a565b610b14856111f5565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610b625750505050610af6565b82610b6d82846110c0565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610c74575f91610c57575b5015610c2d579060058b92835f5252610bcc818b5f20611664565b15610c005790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610b52565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610c6e9150823d84116103ce576103c08183610f39565b8c610bb1565b8b513d5f823e3d90fd5b50823461017757602060031936011261017757610c99610f16565b90610ca3826112a6565b335f5282602052805f2054908115610d3c57819293825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b837fbcc08f74000000000000000000000000000000000000000000000000000000005f525ffd5b50823461017757610d733661103c565b91610d7c61125a565b610d85826111f5565b8251925f5b848110610d9357005b73ffffffffffffffffffffffffffffffffffffffff610db282846110c0565b5116845f526005602052610dc881855f20611445565b15610dfc5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610d8a565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b5082346101775760206003193601126101775760209173ffffffffffffffffffffffffffffffffffffffff610e5e610f16565b165f528252805f20549051908152f35b50823461017757602060031936011261017757602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b8334610177578060031936011261017757602090610f0d610ecd610f16565b602435610ed9816111f5565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361017757565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610f7a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111610f7a5760051b60200190565b9080601f83011215610177576020908235610fd981610fa7565b93610fe76040519586610f39565b81855260208086019260051b82010192831161017757602001905b828210611010575050505090565b813573ffffffffffffffffffffffffffffffffffffffff81168103610177578152908301908301611002565b90604060031983011261017757600435916024359067ffffffffffffffff82116101775761106c91600401610fbf565b90565b60209060206040818301928281528551809452019301915f5b828110611096575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611088565b80518210156110d45760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff821117610f7a5760405251902090565b9190820391821161118457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90816020910312610177575173ffffffffffffffffffffffffffffffffffffffff811681036101775790565b90816020910312610177575180151581036101775790565b80158015611230575b6112055750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f205416156111fe565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361127a57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff16801561130157805f52600460205260405f20546112d65750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611184576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b80548210156110d4575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f14611531575f199182810181811161118457825490848201918211611184578181036114e6575b505050805480156114b95782019161149b8383611430565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61151c6114f66115069386611430565b90549060031b1c92839286611430565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f8080611483565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f5416911690811461165c57604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa93841561162d5785935f95611638575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa91821561162d575f9261161757505090565b61106c9250803d106103ce576103c08183610f39565b6040513d5f823e3d90fd5b60649291955061165490853d871161054a5761053b8183610f39565b9490916115c2565b505050600190565b5f8281526001820160205260409020546116b65780549068010000000000000000821015610f7a57826116a1611506846001809601855584611430565b90558054925f520160205260405f2055600190565b50505f9056fea26469706673582212205be0235868e23855616f639cbf97b99c061b1e688ad25fb6dbd3c504fe907f2f64736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x117 JUMPI PUSH1 0x1F PUSH2 0x1822 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x11B JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x117 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x117 JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x117 JUMPI DUP1 ISZERO PUSH2 0x104 JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xF5 JUMPI PUSH1 0xA0 MSTORE PUSH1 0x1 PUSH1 0x2 SSTORE PUSH2 0x16F2 SWAP1 DUP2 PUSH2 0x130 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x112C ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x153 ADD MSTORE DUP2 DUP2 PUSH2 0x283 ADD MSTORE DUP2 DUP2 PUSH2 0x4E6 ADD MSTORE DUP2 DUP2 PUSH2 0xB2E ADD MSTORE PUSH2 0x1590 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x182551DA EQ PUSH2 0xEAE JUMPI DUP3 PUSH4 0x255DAE41 EQ PUSH2 0xE6E JUMPI DUP3 PUSH4 0x25C427ED EQ PUSH2 0xE2B JUMPI DUP3 PUSH4 0x2DA55A1D EQ PUSH2 0xD63 JUMPI DUP3 PUSH4 0x3700F987 EQ PUSH2 0xC7E JUMPI DUP3 PUSH4 0x3E035F9B EQ PUSH2 0xAA6 JUMPI DUP3 PUSH4 0x62D53462 EQ PUSH2 0xA75 JUMPI DUP3 PUSH4 0x715018A6 EQ PUSH2 0x9F0 JUMPI DUP3 PUSH4 0x79BA5097 EQ PUSH2 0x98C JUMPI DUP3 PUSH4 0x7C1EC460 EQ PUSH2 0x840 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0x7F7 JUMPI DUP3 PUSH4 0x8C60EBD0 EQ PUSH2 0x6B1 JUMPI DUP3 PUSH4 0x8DA5CB5B EQ PUSH2 0x67E JUMPI DUP3 PUSH4 0x94FC4058 EQ PUSH2 0x5FE JUMPI DUP3 PUSH4 0xA89B1128 EQ PUSH2 0x55B JUMPI POP DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x492 JUMPI DUP2 PUSH4 0xC482E822 EQ PUSH2 0x474 JUMPI DUP2 PUSH4 0xCE998ABA EQ PUSH2 0x450 JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x41C JUMPI DUP2 PUSH4 0xE909C19B EQ PUSH2 0x3DF JUMPI DUP2 PUSH4 0xEBF3A8D0 EQ PUSH2 0x245 JUMPI DUP2 PUSH4 0xF167A1E6 EQ PUSH2 0x208 JUMPI POP DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x17B JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x128 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0x194 PUSH2 0xF16 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x125A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI SWAP1 PUSH2 0x255 CALLDATASIZE PUSH2 0x103C JUMP JUMPDEST PUSH2 0x260 SWAP4 SWAP2 SWAP4 PUSH2 0x125A JUMP JUMPDEST PUSH2 0x269 DUP5 PUSH2 0x11F5 JUMP JUMPDEST DUP1 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x2B0 JUMPI STOP JUMPDEST DUP3 PUSH2 0x2BB DUP3 DUP5 PUSH2 0x10C0 JUMP JUMPDEST MLOAD AND DUP7 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3D5 JUMPI PUSH0 SWAP2 PUSH2 0x3A8 JUMPI JUMPDEST POP ISZERO PUSH2 0x37E JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP4 SWAP3 DUP5 PUSH0 MSTORE MSTORE PUSH2 0x31D DUP3 DUP11 PUSH0 KECCAK256 PUSH2 0x1664 JUMP JUMPDEST ISZERO PUSH2 0x352 JUMPI POP SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0x2A7 JUMP JUMPDEST SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x3C8 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3CE JUMPI JUMPDEST PUSH2 0x3C0 DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x11DD JUMP JUMPDEST DUP13 PUSH2 0x301 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3B6 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x415 PUSH2 0x3FF PUSH2 0xF16 JUMP JUMPDEST PUSH2 0x407 PUSH2 0x125A JUMP JUMPDEST PUSH2 0x410 DUP2 PUSH2 0x12A6 JUMP JUMPDEST PUSH2 0x1329 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 CALLER PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x551 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x522 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x543 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x54A JUMPI JUMPDEST PUSH2 0x53B DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x11B1 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x51A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x531 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0x5A9 PUSH2 0x5A2 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x59B PUSH2 0xF16 JUMP JUMPDEST SWAP4 AND PUSH2 0x1101 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x1539 JUMP JUMPDEST ISZERO PUSH2 0x5D7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x5D7 JUMPI PUSH2 0x5D5 SWAP1 PUSH2 0x13BE JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI CALLDATALOAD PUSH2 0x61E DUP2 PUSH2 0x11F5 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x667 JUMPI PUSH2 0x663 DUP7 DUP7 PUSH2 0x659 DUP3 DUP12 SUB DUP4 PUSH2 0xF39 JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x106F JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x641 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x6D7 DUP5 PUSH2 0x11F5 JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x7ED JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x7E2 JUMPI JUMPDEST POP PUSH2 0x7B7 JUMPI POP PUSH2 0x70B DUP4 DUP6 PUSH2 0x1177 JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x74E PUSH2 0x739 DUP9 PUSH2 0xFA7 JUMP JUMPDEST SWAP8 PUSH2 0x746 DUP11 MLOAD SWAP10 DUP11 PUSH2 0xF39 JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0xFA7 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x76B JUMPI DUP8 MLOAD DUP1 PUSH2 0x663 DUP10 DUP3 PUSH2 0x106F JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x795 DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x7B0 PUSH2 0x7AA DUP9 DUP5 PUSH2 0x1177 JUMP JUMPDEST DUP11 PUSH2 0x10C0 JUMP JUMPDEST MSTORE ADD PUSH2 0x757 JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x6FB JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x6F4 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x177 JUMPI PUSH2 0x415 PUSH1 0x20 SWAP3 PUSH2 0x1101 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0x860 PUSH2 0x125A JUMP JUMPDEST PUSH2 0x869 DUP4 PUSH2 0x11F5 JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0x92C JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0x90F JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x893 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x919 JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0x986 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x952 DUP4 DUP7 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x1445 JUMP JUMPDEST POP PUSH2 0x877 JUMP JUMPDEST POP CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0x9C5 JUMPI PUSH2 0x5D5 CALLER PUSH2 0x13BE JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0xA08 PUSH2 0x125A JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xA95 DUP2 PUSH2 0x11F5 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0xAC0 PUSH2 0xF16 JUMP JUMPDEST PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x177 JUMPI PUSH2 0xAE5 PUSH2 0xAEE SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xFBF JUMP JUMPDEST SWAP3 PUSH2 0x407 PUSH2 0x125A JUMP JUMPDEST SWAP4 DUP3 MLOAD PUSH2 0xB00 JUMPI JUMPDEST PUSH1 0x20 DUP6 DUP6 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xB0B SWAP3 SWAP2 SWAP3 PUSH2 0x125A JUMP JUMPDEST PUSH2 0xB14 DUP6 PUSH2 0x11F5 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0xB62 JUMPI POP POP POP POP PUSH2 0xAF6 JUMP JUMPDEST DUP3 PUSH2 0xB6D DUP3 DUP5 PUSH2 0x10C0 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP10 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xC74 JUMPI PUSH0 SWAP2 PUSH2 0xC57 JUMPI JUMPDEST POP ISZERO PUSH2 0xC2D JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP3 DUP4 PUSH0 MSTORE MSTORE PUSH2 0xBCC DUP2 DUP12 PUSH0 KECCAK256 PUSH2 0x1664 JUMP JUMPDEST ISZERO PUSH2 0xC00 JUMPI SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xB52 JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xC6E SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3CE JUMPI PUSH2 0x3C0 DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST DUP13 PUSH2 0xBB1 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0xC99 PUSH2 0xF16 JUMP JUMPDEST SWAP1 PUSH2 0xCA3 DUP3 PUSH2 0x12A6 JUMP JUMPDEST CALLER PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0xD3C JUMPI DUP2 SWAP3 SWAP4 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST DUP4 PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH2 0xD73 CALLDATASIZE PUSH2 0x103C JUMP JUMPDEST SWAP2 PUSH2 0xD7C PUSH2 0x125A JUMP JUMPDEST PUSH2 0xD85 DUP3 PUSH2 0x11F5 JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xD93 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xDB2 DUP3 DUP5 PUSH2 0x10C0 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0xDC8 DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x1445 JUMP JUMPDEST ISZERO PUSH2 0xDFC JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0xD8A JUMP JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xE5E PUSH2 0xF16 JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x177 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xF0D PUSH2 0xECD PUSH2 0xF16 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0xED9 DUP2 PUSH2 0x11F5 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x177 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF7A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF7A JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0xFD9 DUP2 PUSH2 0xFA7 JUMP JUMPDEST SWAP4 PUSH2 0xFE7 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xF39 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x177 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1010 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x177 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1002 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x177 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x177 JUMPI PUSH2 0x106C SWAP2 PUSH1 0x4 ADD PUSH2 0xFBF JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1096 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1088 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x10D4 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF7A JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1184 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x177 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x177 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x177 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x177 JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x1230 JUMPI JUMPDEST PUSH2 0x1205 JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x11FE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x127A JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x1301 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x12D6 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x1184 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x10D4 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x1531 JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x1184 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x1184 JUMPI DUP2 DUP2 SUB PUSH2 0x14E6 JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x14B9 JUMPI DUP3 ADD SWAP2 PUSH2 0x149B DUP4 DUP4 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x151C PUSH2 0x14F6 PUSH2 0x1506 SWAP4 DUP7 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x1430 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x1483 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x165C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x162D JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x1638 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x162D JUMPI PUSH0 SWAP3 PUSH2 0x1617 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x106C SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x3CE JUMPI PUSH2 0x3C0 DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x1654 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x54A JUMPI PUSH2 0x53B DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x15C2 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x16B6 JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0xF7A JUMPI DUP3 PUSH2 0x16A1 PUSH2 0x1506 DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMPDEST 0xE0 0x23 PC PUSH9 0xE23855616F639CBF97 0xB9 SWAP13 MOD SHL 0x1E PUSH9 0x8AD25FB6DBD3C504FE SWAP1 PUSH32 0x2F64736F6C634300081B00330000000000000000000000000000000000000000 ","sourceMap":"216:202:92:-:0;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;-1:-1:-1;;;;;216:202:92;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;216:202:92;;;;;;;;;;;;;;;;;;;;;1273:26:49;;1269:95;;216:202:92;;;;;;;;2093:20:50;216:202:92;;2093:20:50;216:202:92;;-1:-1:-1;216:202:92;;;;;-1:-1:-1;216:202:92;;;;;3052:40:49;-1:-1:-1;3052:40:49;;1524:4:81;1347:46:33;;1548:29:81;1544:80;;1634:14;;2093:20:50;853:1:82;216:202:92;;;;;;;1347:46:33;216:202:92;;;;;1634:14:81;216:202:92;;;;;;;;;;;;;;;;;;;;;;;;;;1544:80:81;1600:13;;;-1:-1:-1;1600:13:81;;-1:-1:-1;1600:13:81;1269:95:49;1322:31;;;-1:-1:-1;1322:31:49;-1:-1:-1;1322:31:49;216:202:92;;-1:-1:-1;1322:31:49;216:202:92;-1:-1:-1;216:202:92;;;;;;-1:-1:-1;216:202:92;;;;;-1:-1:-1;216:202:92"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":3862,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_array_address_dyn":{"entryPoint":4031,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":4573,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":4529,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_array_address_dyn":{"entryPoint":4156,"id":null,"parameterSlots":1,"returnSlots":2},"abi_encode_array_address_dyn":{"entryPoint":4207,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":4007,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":4471,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":3897,"id":null,"parameterSlots":2,"returnSlots":0},"fun_add":{"entryPoint":5732,"id":16149,"parameterSlots":2,"returnSlots":1},"fun_canPerform":{"entryPoint":5433,"id":20329,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":4698,"id":9423,"parameterSlots":0,"returnSlots":0},"fun_contains":{"entryPoint":null,"id":16295,"parameterSlots":2,"returnSlots":1},"fun_createPoolSet":{"entryPoint":4905,"id":20497,"parameterSlots":1,"returnSlots":1},"fun_ensureValidManager":{"entryPoint":4774,"id":21004,"parameterSlots":1,"returnSlots":0},"fun_ensureValidPoolSet":{"entryPoint":4597,"id":21058,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":4353,"id":4374,"parameterSlots":1,"returnSlots":1},"fun_remove":{"entryPoint":5189,"id":16233,"parameterSlots":2,"returnSlots":1},"fun_transferOwnership":{"entryPoint":5054,"id":9547,"parameterSlots":1,"returnSlots":0},"memory_array_index_access_address_dyn":{"entryPoint":4288,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_bytes32_dyn":{"entryPoint":5168,"id":null,"parameterSlots":2,"returnSlots":2},"update_byte_slice_dynamic32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4314":[{"length":32,"start":4396}],"20218":[{"length":32,"start":339},{"length":32,"start":643},{"length":32,"start":1254},{"length":32,"start":2862},{"length":32,"start":5520}]},"linkReferences":{},"object":"604060808152600480361015610013575f80fd5b5f35908160e01c918263182551da14610eae578263255dae4114610e6e57826325c427ed14610e2b5782632da55a1d14610d635782633700f98714610c7e5782633e035f9b14610aa657826362d5346214610a75578263715018a6146109f057826379ba50971461098c5782637c1ec46014610840578263851c1bb3146107f75782638c60ebd0146106b15782638da5cb5b1461067e57826394fc4058146105fe578263a89b11281461055b57508163aaabadc514610492578163c482e82214610474578163ce998aba14610450578163e30c39781461041c578163e909c19b146103df578163ebf3a8d014610245578163f167a1e61461020857508063f2fde38b1461017b5763fbfa77cf14610128575f80fd5b34610177575f600319360112610177576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b3461017757602060031936011261017757610194610f16565b61019c61125a565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b823461017757602060031936011261017757602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f2054169051908152f35b823461017757906102553661103c565b61026093919361125a565b610269846111f5565b80519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116925f5b8681106102b057005b826102bb82846110c0565b511686517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156103d5575f916103a8575b501561037e579060058b9392845f525261031d828a5f20611664565b15610352575090600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a3016102a7565b90867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b5090857f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b6103c89150823d84116103ce575b6103c08183610f39565b8101906111dd565b8c610301565b503d6103b6565b8a513d5f823e3d90fd5b8234610177576020600319360112610177576020906104156103ff610f16565b61040761125a565b610410816112a6565b611329565b9051908152f35b8234610177575f6003193601126101775760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b8234610177575f60031936011261017757602091335f528252805f20549051908152f35b8234610177575f600319360112610177576020906002549051908152f35b905034610177575f6003193601126101775773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561055157926020935f93610522575b505191168152f35b610543919350843d861161054a575b61053b8183610f39565b8101906111b1565b915f61051a565b503d610531565b83513d5f823e3d90fd5b34610177576020600319360112610177576105a96105a27fffffffff0000000000000000000000000000000000000000000000000000000061059b610f16565b9316611101565b3390611539565b156105d75773ffffffffffffffffffffffffffffffffffffffff5f541633146105d7576105d5906113be565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b838234610177576020906020600319360112610177573561061e816111f5565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b828210610667576106638686610659828b0383610f39565b519182918261106f565b0390f35b835487529586019560019384019390910190610641565b8334610177575f6003193601126101775760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b83823461017757606060031936011261017757803590602435604435916106d7846111f5565b835f526005906020906005602052865f20548585119081156107ed575b81156107e2575b506107b7575061070b8385611177565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061074e61073988610fa7565b976107468a51998a610f39565b808952610fa7565b01366020880137835b85811061076b57875180610663898261106f565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff610795828b5f20611430565b90549060031b1c166107b06107aa8884611177565b8a6110c0565b5201610757565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b9050841015886106fb565b80871191506106f4565b8382346101775760206003193601126101775735907fffffffff000000000000000000000000000000000000000000000000000000008216820361017757610415602092611101565b83823461017757602091826003193601126101775781359161086061125a565b610869836111f5565b825f5260058452815f208054805b61092c575050825f5260058452815f208054905f81558161090f575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610893575f8155600101610919565b5f19018061098673ffffffffffffffffffffffffffffffffffffffff6109528386611430565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a384611445565b50610877565b5034610177575f600319360112610177573373ffffffffffffffffffffffffffffffffffffffff60015416036109c5576105d5336113be565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b34610177575f60031936011261017757610a0861125a565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b5082346101775760206003193601126101775760209135610a95816111f5565b5f5260058252805f20549051908152f35b508234610177578060031936011261017757610ac0610f16565b60249260243567ffffffffffffffff811161017757610ae5610aee9136908401610fbf565b9261040761125a565b938251610b00575b6020858551908152f35b610b0b92919261125a565b610b14856111f5565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610b625750505050610af6565b82610b6d82846110c0565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610c74575f91610c57575b5015610c2d579060058b92835f5252610bcc818b5f20611664565b15610c005790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610b52565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610c6e9150823d84116103ce576103c08183610f39565b8c610bb1565b8b513d5f823e3d90fd5b50823461017757602060031936011261017757610c99610f16565b90610ca3826112a6565b335f5282602052805f2054908115610d3c57819293825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b837fbcc08f74000000000000000000000000000000000000000000000000000000005f525ffd5b50823461017757610d733661103c565b91610d7c61125a565b610d85826111f5565b8251925f5b848110610d9357005b73ffffffffffffffffffffffffffffffffffffffff610db282846110c0565b5116845f526005602052610dc881855f20611445565b15610dfc5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610d8a565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b5082346101775760206003193601126101775760209173ffffffffffffffffffffffffffffffffffffffff610e5e610f16565b165f528252805f20549051908152f35b50823461017757602060031936011261017757602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b8334610177578060031936011261017757602090610f0d610ecd610f16565b602435610ed9816111f5565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361017757565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610f7a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111610f7a5760051b60200190565b9080601f83011215610177576020908235610fd981610fa7565b93610fe76040519586610f39565b81855260208086019260051b82010192831161017757602001905b828210611010575050505090565b813573ffffffffffffffffffffffffffffffffffffffff81168103610177578152908301908301611002565b90604060031983011261017757600435916024359067ffffffffffffffff82116101775761106c91600401610fbf565b90565b60209060206040818301928281528551809452019301915f5b828110611096575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611088565b80518210156110d45760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff821117610f7a5760405251902090565b9190820391821161118457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90816020910312610177575173ffffffffffffffffffffffffffffffffffffffff811681036101775790565b90816020910312610177575180151581036101775790565b80158015611230575b6112055750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f205416156111fe565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361127a57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff16801561130157805f52600460205260405f20546112d65750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611184576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b80548210156110d4575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f14611531575f199182810181811161118457825490848201918211611184578181036114e6575b505050805480156114b95782019161149b8383611430565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61151c6114f66115069386611430565b90549060031b1c92839286611430565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f8080611483565b505050505f90565b9073ffffffffffffffffffffffffffffffffffffffff9081805f5416911690811461165c57604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa93841561162d5785935f95611638575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa91821561162d575f9261161757505090565b61106c9250803d106103ce576103c08183610f39565b6040513d5f823e3d90fd5b60649291955061165490853d871161054a5761053b8183610f39565b9490916115c2565b505050600190565b5f8281526001820160205260409020546116b65780549068010000000000000000821015610f7a57826116a1611506846001809601855584611430565b90558054925f520160205260405f2055600190565b50505f9056fea26469706673582212205be0235868e23855616f639cbf97b99c061b1e688ad25fb6dbd3c504fe907f2f64736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x182551DA EQ PUSH2 0xEAE JUMPI DUP3 PUSH4 0x255DAE41 EQ PUSH2 0xE6E JUMPI DUP3 PUSH4 0x25C427ED EQ PUSH2 0xE2B JUMPI DUP3 PUSH4 0x2DA55A1D EQ PUSH2 0xD63 JUMPI DUP3 PUSH4 0x3700F987 EQ PUSH2 0xC7E JUMPI DUP3 PUSH4 0x3E035F9B EQ PUSH2 0xAA6 JUMPI DUP3 PUSH4 0x62D53462 EQ PUSH2 0xA75 JUMPI DUP3 PUSH4 0x715018A6 EQ PUSH2 0x9F0 JUMPI DUP3 PUSH4 0x79BA5097 EQ PUSH2 0x98C JUMPI DUP3 PUSH4 0x7C1EC460 EQ PUSH2 0x840 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0x7F7 JUMPI DUP3 PUSH4 0x8C60EBD0 EQ PUSH2 0x6B1 JUMPI DUP3 PUSH4 0x8DA5CB5B EQ PUSH2 0x67E JUMPI DUP3 PUSH4 0x94FC4058 EQ PUSH2 0x5FE JUMPI DUP3 PUSH4 0xA89B1128 EQ PUSH2 0x55B JUMPI POP DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x492 JUMPI DUP2 PUSH4 0xC482E822 EQ PUSH2 0x474 JUMPI DUP2 PUSH4 0xCE998ABA EQ PUSH2 0x450 JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x41C JUMPI DUP2 PUSH4 0xE909C19B EQ PUSH2 0x3DF JUMPI DUP2 PUSH4 0xEBF3A8D0 EQ PUSH2 0x245 JUMPI DUP2 PUSH4 0xF167A1E6 EQ PUSH2 0x208 JUMPI POP DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x17B JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x128 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0x194 PUSH2 0xF16 JUMP JUMPDEST PUSH2 0x19C PUSH2 0x125A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI SWAP1 PUSH2 0x255 CALLDATASIZE PUSH2 0x103C JUMP JUMPDEST PUSH2 0x260 SWAP4 SWAP2 SWAP4 PUSH2 0x125A JUMP JUMPDEST PUSH2 0x269 DUP5 PUSH2 0x11F5 JUMP JUMPDEST DUP1 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x2B0 JUMPI STOP JUMPDEST DUP3 PUSH2 0x2BB DUP3 DUP5 PUSH2 0x10C0 JUMP JUMPDEST MLOAD AND DUP7 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3D5 JUMPI PUSH0 SWAP2 PUSH2 0x3A8 JUMPI JUMPDEST POP ISZERO PUSH2 0x37E JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP4 SWAP3 DUP5 PUSH0 MSTORE MSTORE PUSH2 0x31D DUP3 DUP11 PUSH0 KECCAK256 PUSH2 0x1664 JUMP JUMPDEST ISZERO PUSH2 0x352 JUMPI POP SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0x2A7 JUMP JUMPDEST SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x3C8 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3CE JUMPI JUMPDEST PUSH2 0x3C0 DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x11DD JUMP JUMPDEST DUP13 PUSH2 0x301 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3B6 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x415 PUSH2 0x3FF PUSH2 0xF16 JUMP JUMPDEST PUSH2 0x407 PUSH2 0x125A JUMP JUMPDEST PUSH2 0x410 DUP2 PUSH2 0x12A6 JUMP JUMPDEST PUSH2 0x1329 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 CALLER PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x551 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x522 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x543 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x54A JUMPI JUMPDEST PUSH2 0x53B DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x11B1 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x51A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x531 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0x5A9 PUSH2 0x5A2 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x59B PUSH2 0xF16 JUMP JUMPDEST SWAP4 AND PUSH2 0x1101 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x1539 JUMP JUMPDEST ISZERO PUSH2 0x5D7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x5D7 JUMPI PUSH2 0x5D5 SWAP1 PUSH2 0x13BE JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI CALLDATALOAD PUSH2 0x61E DUP2 PUSH2 0x11F5 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x667 JUMPI PUSH2 0x663 DUP7 DUP7 PUSH2 0x659 DUP3 DUP12 SUB DUP4 PUSH2 0xF39 JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x106F JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x641 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x6D7 DUP5 PUSH2 0x11F5 JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x7ED JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x7E2 JUMPI JUMPDEST POP PUSH2 0x7B7 JUMPI POP PUSH2 0x70B DUP4 DUP6 PUSH2 0x1177 JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x74E PUSH2 0x739 DUP9 PUSH2 0xFA7 JUMP JUMPDEST SWAP8 PUSH2 0x746 DUP11 MLOAD SWAP10 DUP11 PUSH2 0xF39 JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0xFA7 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x76B JUMPI DUP8 MLOAD DUP1 PUSH2 0x663 DUP10 DUP3 PUSH2 0x106F JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x795 DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x7B0 PUSH2 0x7AA DUP9 DUP5 PUSH2 0x1177 JUMP JUMPDEST DUP11 PUSH2 0x10C0 JUMP JUMPDEST MSTORE ADD PUSH2 0x757 JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x6FB JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x6F4 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x177 JUMPI PUSH2 0x415 PUSH1 0x20 SWAP3 PUSH2 0x1101 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0x860 PUSH2 0x125A JUMP JUMPDEST PUSH2 0x869 DUP4 PUSH2 0x11F5 JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0x92C JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0x90F JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x893 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x919 JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0x986 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x952 DUP4 DUP7 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x1445 JUMP JUMPDEST POP PUSH2 0x877 JUMP JUMPDEST POP CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0x9C5 JUMPI PUSH2 0x5D5 CALLER PUSH2 0x13BE JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x177 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0xA08 PUSH2 0x125A JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xA95 DUP2 PUSH2 0x11F5 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0xAC0 PUSH2 0xF16 JUMP JUMPDEST PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x177 JUMPI PUSH2 0xAE5 PUSH2 0xAEE SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xFBF JUMP JUMPDEST SWAP3 PUSH2 0x407 PUSH2 0x125A JUMP JUMPDEST SWAP4 DUP3 MLOAD PUSH2 0xB00 JUMPI JUMPDEST PUSH1 0x20 DUP6 DUP6 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xB0B SWAP3 SWAP2 SWAP3 PUSH2 0x125A JUMP JUMPDEST PUSH2 0xB14 DUP6 PUSH2 0x11F5 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0xB62 JUMPI POP POP POP POP PUSH2 0xAF6 JUMP JUMPDEST DUP3 PUSH2 0xB6D DUP3 DUP5 PUSH2 0x10C0 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP10 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xC74 JUMPI PUSH0 SWAP2 PUSH2 0xC57 JUMPI JUMPDEST POP ISZERO PUSH2 0xC2D JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP3 DUP4 PUSH0 MSTORE MSTORE PUSH2 0xBCC DUP2 DUP12 PUSH0 KECCAK256 PUSH2 0x1664 JUMP JUMPDEST ISZERO PUSH2 0xC00 JUMPI SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xB52 JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xC6E SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3CE JUMPI PUSH2 0x3C0 DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST DUP13 PUSH2 0xBB1 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH2 0xC99 PUSH2 0xF16 JUMP JUMPDEST SWAP1 PUSH2 0xCA3 DUP3 PUSH2 0x12A6 JUMP JUMPDEST CALLER PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0xD3C JUMPI DUP2 SWAP3 SWAP4 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST DUP4 PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH2 0xD73 CALLDATASIZE PUSH2 0x103C JUMP JUMPDEST SWAP2 PUSH2 0xD7C PUSH2 0x125A JUMP JUMPDEST PUSH2 0xD85 DUP3 PUSH2 0x11F5 JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xD93 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xDB2 DUP3 DUP5 PUSH2 0x10C0 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0xDC8 DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x1445 JUMP JUMPDEST ISZERO PUSH2 0xDFC JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0xD8A JUMP JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xE5E PUSH2 0xF16 JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x177 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x177 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xF0D PUSH2 0xECD PUSH2 0xF16 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0xED9 DUP2 PUSH2 0x11F5 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x177 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF7A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF7A JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x177 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0xFD9 DUP2 PUSH2 0xFA7 JUMP JUMPDEST SWAP4 PUSH2 0xFE7 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xF39 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x177 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1010 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x177 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1002 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x177 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x177 JUMPI PUSH2 0x106C SWAP2 PUSH1 0x4 ADD PUSH2 0xFBF JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1096 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1088 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x10D4 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF7A JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1184 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x177 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x177 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x177 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x177 JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x1230 JUMPI JUMPDEST PUSH2 0x1205 JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x11FE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x127A JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x1301 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x12D6 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x1184 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x10D4 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x1531 JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x1184 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x1184 JUMPI DUP2 DUP2 SUB PUSH2 0x14E6 JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x14B9 JUMPI DUP3 ADD SWAP2 PUSH2 0x149B DUP4 DUP4 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x151C PUSH2 0x14F6 PUSH2 0x1506 SWAP4 DUP7 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x1430 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x1483 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x165C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x162D JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x1638 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x162D JUMPI PUSH0 SWAP3 PUSH2 0x1617 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x106C SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x3CE JUMPI PUSH2 0x3C0 DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x1654 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x54A JUMPI PUSH2 0x53B DUP2 DUP4 PUSH2 0xF39 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x15C2 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x16B6 JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0xF7A JUMPI DUP3 PUSH2 0x16A1 PUSH2 0x1506 DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x1430 JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMPDEST 0xE0 0x23 PC PUSH9 0xE23855616F639CBF97 0xB9 SWAP13 MOD SHL 0x1E PUSH9 0x8AD25FB6DBD3C504FE SWAP1 PUSH32 0x2F64736F6C634300081B00330000000000000000000000000000000000000000 ","sourceMap":"216:202:92:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21:81;216:202:92;1810:21:81;;;216:202:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;;1348:29:81;216:202:92;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;:::i;:::-;1500:62:49;;:::i;:::-;216:202:92;;;;;;;1738:24:50;216:202:92;;;1738:24:50;216:202:92;;;;1777:43:50;216:202:92;1777:43:50;;216:202:92;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;;;8417:16:82;216:202:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1500:62:49;;;;;:::i;:::-;1515:9:82;;;:::i;:::-;216:202:92;;;;5232:5:82;216:202:92;;;;5103:12:82;;;;;;216:202:92;5117:3:82;5151:11;;;;;:::i;:::-;216:202:92;;;;;5232:28:82;;;;;;216:202:92;5232:28:82;216:202:92;5232:28:82;;;;;;;;;;;;;216:202:92;5232:28:82;;;5117:3;216:202:92;;5228:119:82;;216:202:92;5365:9:82;216:202:92;;;;;;;11511:50:72;216:202:92;;;;11511:50:72;:::i;:::-;216:202:92;5361:118:82;;5610:31;;216:202:92;5610:31:82;;;216:202:92;5610:31:82;;216:202:92;5088:13:82;;5361:118;5431:33;;;216:202:92;5431:33:82;216:202:92;;;;5431:33:82;5228:119;5296:36;;;;216:202:92;5296:36:82;216:202:92;;5296:36:82;5232:28;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;216:202:92;;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;2554:30:82;216:202:92;;:::i;:::-;1500:62:49;;:::i;:::-;1962:7:82;;;:::i;:::-;2554:30;:::i;:::-;216:202:92;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;1311:13:50;216:202:92;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;6549:10:82;;216:202:92;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;8254:14:82;216:202:92;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;1810:21:81;216:202:92;;1810:21:81;;216:202:92;1810:21:81;;:5;;;216:202:92;1810:21:81;;;;;;;;;;216:202:92;1810:21:81;;;216:202:92;;;;;;;;1810:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;216:202:92;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;1798:33:33;1762:20;1774:7;216:202:92;;:::i;:::-;1774:7:33;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;216:202:92;;;;1820:10:33;2423:21:81;2419:77;;2524:8;;;:::i;:::-;216:202:92;2419:77:81;2467:18;;216:202:92;2467:18:81;216:202:92;2467:18:81;216:202:92;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;1515:9:82;;;:::i;:::-;216:202:92;;7533:9:82;216:202:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;;;;;1515:9:82;;;;:::i;:::-;216:202:92;;;7815:9:82;216:202:92;;;7815:9:82;216:202:92;;;;;;7859:9:82;;;:28;;;;;216:202:92;7859:50:82;;;;216:202:92;7855:115:82;;;8002:9;;;;;:::i;:::-;216:202:92;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;8027:16:82;8045:6;;;;;;216:202:92;;;;;;;:::i;8053:3:82:-;216:202:92;;;;;;;;;5853:18:72;216:202:92;;;;5853:18:72;:::i;:::-;216:202:92;;;;;;;8072:44:82;8078:8;;;;:::i;:::-;8072:44;;:::i;:::-;216:202:92;;8027:16:82;;7855:115;7932:27;;;216:202:92;7932:27:82;216:202:92;;;7932:27:82;7859:50;7891:18;;;;;7859:50;;;:28;7872:15;;;;-1:-1:-1;7859:28:82;;216:202:92;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;1500:62:49;;;:::i;:::-;1515:9:82;;;:::i;:::-;216:202:92;;;3499:9:82;216:202:92;;;;;;;3618:237:82;3625:12;;;216:202:92;;;;;3499:9:82;216:202:92;;;;;;;;;;;;;;3618:237:82;216:202:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4148:36:82;216:202:92;4148:36:82;;216:202:92;;;;;;;;;;;;;;;;;;;;;;;;;3618:237:82;-1:-1:-1;;216:202:92;5853:18:72;11832:53;216:202:92;5853:18:72;;;;:::i;:::-;216:202:92;;;;;;;3774:35:82;;;216:202:92;3774:35:82;;11832:53:72;;:::i;:::-;;3618:237:82;;216:202:92;;;;;;-1:-1:-1;;216:202:92;;;;;735:10:64;216:202:92;1311:13:50;216:202:92;;2339:24:50;2335:96;;2459:6;735:10:64;2459:6:50;:::i;2335:96::-;2386:34;216:202:92;2386:34:50;735:10:64;216:202:92;;;;2386:34:50;216:202:92;;;;;-1:-1:-1;;216:202:92;;;;;1500:62:49;;:::i;:::-;216:202:92;;;;2093:20:50;216:202:92;;2093:20:50;216:202:92;;;;;;;;;3052:40:49;;;;216:202:92;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;1515:9:82;;;:::i;:::-;216:202:92;;6905:9:82;216:202:92;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;:::i;:::-;;;;;;;;;;;2833:30:82;216:202:92;;;;;;:::i;:::-;1500:62:49;;;:::i;2833:30:82:-;216:202:92;;;2874:84:82;;216:202:92;;;;;;;;;2874:84:82;1500:62:49;;;;;:::i;:::-;1515:9:82;;;:::i;:::-;216:202:92;;;;5232:5:82;216:202:92;;;;5103:12:82;;;;;;2874:84;;;;;;5117:3;5151:11;;;;;:::i;:::-;216:202:92;;;;;5232:28:82;;;;;;216:202:92;;5232:28:82;;;;;;;;;;;;;216:202:92;5232:28:82;;;5117:3;216:202:92;;5228:119:82;;216:202:92;5365:9:82;216:202:92;;;;;;11511:50:72;216:202:92;;;;11511:50:72;:::i;:::-;216:202:92;5361:118:82;;5610:31;216:202:92;5610:31:82;;;216:202:92;5610:31:82;;216:202:92;5088:13:82;;5361:118;5431:33;;;;216:202:92;5431:33:82;216:202:92;;;;5431:33:82;5228:119;5296:36;;;;216:202:92;5296:36:82;216:202:92;;5296:36:82;5232:28;;;;;;;;;;;;;;:::i;:::-;;;;;216:202:92;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;:::i;:::-;1962:7:82;;;;:::i;:::-;6549:10;216:202:92;;;;;;;;;8890:14:82;;;8886:79;;216:202:92;;;;;;4388:16:82;216:202:92;;;;;;;;;;;;;;;;;6549:10:82;216:202:92;;;;;;;;;;;;;;;6549:10:82;4590:62;;216:202:92;4590:62:82;;216:202:92;8886:79:82;8927:27;;216:202:92;8927:27:82;216:202:92;8927:27:82;216:202:92;;;;;;;;;:::i;:::-;1500:62:49;;;:::i;:::-;1515:9:82;;;:::i;:::-;216:202:92;;5897:13:82;216:202:92;5912:12:82;;;;;;216:202:92;5926:3:82;216:202:92;5960:8:82;;;;:::i;:::-;216:202:92;;;;;5987:9:82;216:202:92;;11832:53:72;216:202:92;;;;11832:53:72;:::i;:::-;216:202:92;5983:117:82;;6119:35;;216:202:92;6119:35:82;;216:202:92;6119:35:82;;216:202:92;5897:13:82;;5983:117;6056:29;;;;216:202:92;6056:29:82;216:202:92;;;;;6056:29:82;216:202:92;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;;;7076:16:82;216:202:92;;;;;;;;7076:41:82;;216:202:92;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;12473:55:72;216:202:92;;:::i;:::-;;;1515:9:82;;;:::i;:::-;216:202:92;;7296:9:82;216:202:92;;;;;;;;12473:55:72;5197:14;5101:129;-1:-1:-1;216:202:92;5197:14:72;216:202:92;;;-1:-1:-1;216:202:92;;5197:26:72;;5101:129;;12473:55;216:202:92;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:92;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:33;216:202:92;;;2303:50:33;;;2320:22;;216:202:92;;;;;;;2303:50:33;;;216:202:92;;;;;;;;;;;;;;;2293:61:33;;1931:430;:::o;216:202:92:-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;9677::82:-;9753:14;;:59;;;;9677:202;9749:124;;9677:202;:::o;9749:124::-;9835:27;9766:1;9835:27;;216:202:92;;9766:1:82;9835:27;9753:59;216:202:92;;9766:1:82;216:202:92;9771:16:82;216:202:92;;;;9766:1:82;216:202:92;;;9771:41:82;9753:59;;1796:162:49;216:202:92;1710:6:49;216:202:92;;735:10:64;1855:23:49;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:64;1901:40:49;216:202:92;;1710:6:49;1901:40;8977:266:82;216:202:92;;9051:21:82;;9047:82;;216:202:92;9070:1:82;216:202:92;9143:14:82;216:202:92;;;9070:1:82;216:202:92;;9139:98:82;;8977:266;:::o;9139:98::-;9194:32;9070:1;9194:32;9143:14;216:202:92;;9070:1:82;9194:32;9047:82;9095:23;9070:1;9095:23;;9070:1;9095:23;2970:342;;3077:16;216:202:92;;-1:-1:-1;;216:202:92;;;;;;;3077:16:82;216:202:92;3065:28:82;216:202:92;-1:-1:-1;216:202:92;3152:16:82;216:202:92;;;;-1:-1:-1;216:202:92;;;;;;;;;;;;;-1:-1:-1;216:202:92;3206:14:82;216:202:92;;;;-1:-1:-1;216:202:92;;3264:41:82;-1:-1:-1;3264:41:82;;2970:342::o;2011:153:50:-;216:202:92;;;2093:20:50;216:202:92;;2093:20:50;216:202:92;2093:20:50;216:202:92;;;;;;;;;;2093:20:50;216:202:92;;3052:40:49;2093:20:50;3052:40:49;;2011:153:50:o;216:202:92:-;;;;;;;;-1:-1:-1;216:202:92;;-1:-1:-1;216:202:92;;;-1:-1:-1;216:202:92;:::o;3071:1368:72:-;;3266:14;;;216:202:92;;;;;;;;;;;3302:13:72;;;;3298:1135;3302:13;;;-1:-1:-1;;216:202:92;;;;;;;;;;;;;;;;;;;;3777:23:72;;;3773:378;;3298:1135;216:202:92;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3266:14:72;4368:11;:::o;216:202:92:-;;;;;;;;;;3773:378:72;216:202:92;3840:22:72;3961:23;3840:22;;;:::i;:::-;216:202:92;;;;;;3961:23:72;;;;;:::i;:::-;216:202:92;;;;;-1:-1:-1;;216:202:92;;;;;;;;;;;;;;;;;;;;;;;;;3773:378:72;;;;;3298:1135;4410:12;;;;216:202:92;4410:12:72;:::o;2546:382:81:-;;216:202:92;;;;;;;;;2721:15:81;;;2717:57;;216:202:92;;2858:21:81;216:202:92;2858:21:81;;;:5;;;:21;:5;;;216:202:92;2858:21:81;;;;;;;;;216:202:92;2858:21:81;;;2546:382;216:202:92;;;;;;2858:63:81;;;;;216:202:92;2858:63:81;;:21;:63;;216:202:92;;;;;2915:4:81;216:202:92;;;;;2858:63:81;;;;;;;216:202:92;2858:63:81;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;-1:-1:-1;2858:63:81;;;;;;:::i;:::-;216:202:92;;;;;;;;;2858:21:81;216:202:92;2858:21:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o;2497:406:72:-;-1:-1:-1;216:202:92;;;5197:14:72;;;216:202:92;;;;;;2581:21:72;;216:202:92;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2776:14:72;216:202:92;;;;;;;2832:11:72;:::o;2576:321::-;2874:12;;216:202:92;2874:12:72;:::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","addPoolsToSet(uint256,address[])":"ebf3a8d0","createPoolSet(address)":"e909c19b","createPoolSet(address,address[])":"3e035f9b","destroyPoolSet(uint256)":"7c1ec460","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAllPoolsInSet(uint256)":"94fc4058","getAuthorizer()":"aaabadc5","getManagerForPoolSet(uint256)":"f167a1e6","getNextPoolSetId()":"c482e822","getPoolCountForSet(uint256)":"62d53462","getPoolSetIdForCaller()":"ce998aba","getPoolSetIdForManager(address)":"25c427ed","getPoolsInSet(uint256,uint256,uint256)":"8c60ebd0","isPoolInSet(address,uint256)":"182551da","isValidPoolSetId(uint256)":"255dae41","owner()":"8da5cb5b","pendingOwner()":"e30c3978","removePoolsFromSet(uint256,address[])":"2da55a1d","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","transferPoolSetOwnership(address)":"3700f987","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"InvalidPoolSetId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolSetManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolSetManager\",\"type\":\"address\"}],\"name\":\"PoolSetManagerNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderIsNotPoolSetManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"PoolSetCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"PoolSetDestroyed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"PoolSetOwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPoolsToSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"destroyPoolSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getAllPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getManagerForPoolSet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextPoolSetId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getPoolCountForSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSetIdForCaller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getPoolSetIdForManager\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isPoolInSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isValidPoolSetId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePoolsFromSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferPoolSetOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"params\":{\"poolSetId\":\"Id of the set involved in the operation\"}}],\"InvalidPoolSetId(uint256)\":[{\"details\":\"This can mean the value is invalid, or it was never created, or it was destroyed.\",\"params\":{\"poolSetId\":\"The id of the invalid set\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolSetManagerNotUnique(address)\":[{\"details\":\"Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\",\"params\":{\"poolSetManager\":\"Address of the manager that is already assigned to another pool set id\"}}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolRemovedFromSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetCreated(uint256,address)\":{\"details\":\"Pools are organized into separate sets, controlled by a manager, which can be changed independently.\",\"params\":{\"initialManager\":\"Address of the pool set manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetDestroyed(uint256,address)\":{\"params\":{\"manager\":\"The address of the set's last manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"details\":\"Managers can only control one pool set. Transfers to existing managers of other sets will revert.\",\"params\":{\"newManager\":\"Address of the new manager\",\"oldManager\":\"Address of the previous manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"addPoolsToSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may add pools to a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"newPools\":\"List of pools to add\",\"poolSetId\":\"Id of the set to which the new pools belong\"}},\"createPoolSet(address)\":{\"details\":\"Convenience function to create a pool set with no initial pools. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\"}},\"createPoolSet(address,address[])\":{\"details\":\"The `newPools` list can be empty, in which case this will only create the set. Pools can then be added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\",\"newPools\":\"Set of pools to add to the set\"}},\"destroyPoolSet(uint256)\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may destroy sets, effectively removing control of any pools in the set from the associated manager. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set being destroyed\"}},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAllPoolsInSet(uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"pools\":\"List of pools\"}},\"getManagerForPoolSet(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\"}},\"getNextPoolSetId()\":{\"returns\":{\"_0\":\"The pool set id that will be used on the next call of `createPoolSet`\"}},\"getPoolCountForSet(uint256)\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction. Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The current number of pools in the set\"}},\"getPoolSetIdForCaller()\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the caller is not a pool set manager\"}},\"getPoolSetIdForManager(address)\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the address given is not a pool set manager\"}},\"getPoolsInSet(uint256,uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`). Reverts if the poolSetId is not valid.\",\"params\":{\"from\":\"Start index\",\"poolSetId\":\"Id of the set containing the pools\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"isPoolInSet(address,uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"pool\":\"Address of the pool to check\",\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the pool is in the given set, false otherwise\"}},\"isValidPoolSetId(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the poolSetId exists\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"removePoolsFromSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may remove pools from a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set to which the pools belong\",\"pools\":\"List of pools to remove from the set\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"transferPoolSetOwnership(address)\":{\"details\":\"This is a permissioned function. Only the current manager of a set can call this to set a new manager. Since managers can only control a single set, there is no need to specify the id in the call. Note that this is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts if the new manager address is zero or already the manager of a pool set.\",\"params\":{\"newManager\":\"The address of the new manager\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"InvalidPoolSetId(uint256)\":[{\"notice\":\"Pool set id associated with an operation is invalid.\"}],\"InvalidPoolSetManager()\":[{\"notice\":\"The initial manager of a pool set cannot be zero.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolNotInSet(address,uint256)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolSetManagerNotUnique(address)\":[{\"notice\":\"Pool set managers can only manage a single pool set.\"}],\"SenderIsNotPoolSetManager()\":[{\"notice\":\"Permissioned operations on pools can only be performed by the pool set manager.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"notice\":\"The owner added a pool to the given set.\"},\"PoolRemovedFromSet(address,uint256)\":{\"notice\":\"The owner removed a pool from the given set.\"},\"PoolSetCreated(uint256,address)\":{\"notice\":\"The owner created a new pool set.\"},\"PoolSetDestroyed(uint256,address)\":{\"notice\":\"The owner destroyed a pool set.\"},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"notice\":\"The current manager of a pool set transferred ownership to a new address.\"}},\"kind\":\"user\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"createPoolSet(address)\":{\"notice\":\"Create a new empty set with an initial manager.\"},\"createPoolSet(address,address[])\":{\"notice\":\"Create a new set with an initial manager, optionally initialized with a set of pools.\"},\"destroyPoolSet(uint256)\":{\"notice\":\"Simple way to remove an entire set of pools from control of the helper function.\"},\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAllPoolsInSet(uint256)\":{\"notice\":\"Get the full set of pools from a given set.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"},\"getManagerForPoolSet(uint256)\":{\"notice\":\"Get the manager address associated with a given poolSetId.\"},\"getNextPoolSetId()\":{\"notice\":\"Utility function to predict the next pool set id.\"},\"getPoolCountForSet(uint256)\":{\"notice\":\"Get the number of pools associated with the given set.\"},\"getPoolSetIdForCaller()\":{\"notice\":\"Get the pool set id associated with the caller.\"},\"getPoolSetIdForManager(address)\":{\"notice\":\"Get the pool set id associated with a given manager address.\"},\"getPoolsInSet(uint256,uint256,uint256)\":{\"notice\":\"Get a range of pools from a given set.\"},\"isPoolInSet(address,uint256)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"isValidPoolSetId(uint256)\":{\"notice\":\"Check whether a poolSetId has been created.\"},\"removePoolsFromSet(uint256,address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"transferPoolSetOwnership(address)\":{\"notice\":\"Transfer ownership of a pool set from the current manager to a new manager.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/PoolHelperMock.sol\":\"PoolHelperMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xdb8365416c9dd9d7be16677c13819065511e9bc7705d6bad85fd52b65d3b3c39\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b90206982d126075b074f0a77ea9cb3ec173ed9fe9e4504b12d6807532b1b7ff\",\"dweb:/ipfs/QmYjKTu4Mrew94sSxfQ8jP4yT7wZFgghSRyB9A2kDdSy8X\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/PoolHelperCommon.sol\":{\"keccak256\":\"0xc3bd72a44d8479bacbfa4ebca2354b315160e77c378c3dc24d8cd7a41990a83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://fed38b2ea6f2842633d8d555d298adc889605bbeb3ec32728811fbc907989519\",\"dweb:/ipfs/QmX1aEVFkPAZbbSFXn6tfJnaPYWr9TDe9YHCQAiLvgZahg\"]},\"contracts/test/PoolHelperMock.sol\":{\"keccak256\":\"0xfc56a98e7725668f497e7f94766e4980346c290e0339e49ecde9bc5e5239657f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3025e9ecf7f5022a0216006a4226b37213763ab610b8f556e79f49f8582b995b\",\"dweb:/ipfs/QmUBcn7556mGNCN8SgCfkrmV7iUsewwLwKmAevbBBcvyZv\"]}},\"version\":1}"}},"contracts/test/PriceImpactHelperMock.sol":{"PriceImpactHelperMock":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IRouter","name":"router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"}],"name":"calculateAddLiquidityUnbalancedPriceImpact","outputs":[{"internalType":"uint256","name":"priceImpact","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callAndRevertHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256[]","name":"array","type":"int256[]"}],"name":"maxNegativeIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"int256[]","name":"array","type":"int256[]"}],"name":"minPositiveIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"tokenIndex","type":"uint256"},{"internalType":"int256[]","name":"deltas","type":"int256[]"},{"internalType":"address","name":"sender","type":"address"}],"name":"queryAddLiquidityUnbalancedForTokenDeltas","outputs":[{"internalType":"int256","name":"deltaBPT","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"int256[]","name":"deltas","type":"int256[]"},{"internalType":"int256[]","name":"deltaBPTs","type":"int256[]"},{"internalType":"address","name":"sender","type":"address"}],"name":"zeroOutDeltas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461009a57601f6113fd38819003918201601f19168301916001600160401b0383118484101761009e57808492604094855283398101031261009a5780516001600160a01b0391828216820361009a5760200151918216820361009a5760805260a05260405161134a90816100b3823960805181610a00015260a05181818161032501528181610b9c01528181610d500152610ef70152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60406080815260049081361015610014575f80fd5b5f3560e01c806301ef39ee146106225780630d4277d1146105e75780633b064ca31461058057806348406a5414610212578063a7699638146100ba5763e3a50d821461005e575f80fd5b346100b65760806003193601126100b657610077610725565b916044359267ffffffffffffffff84116100b65761009d6100af926020953691016106c5565b6100a5610748565b9160243590610f96565b9051908152f35b5f80fd5b5090346100b657816003193601126100b6576100d4610725565b6024359067ffffffffffffffff82116100b657366023830112156100b65781830135906101008261076b565b9261010d8651948561065d565b828452602084019036602485830101116100b6575f94856020868297602484960187378301015251925af191610141610852565b928015610193579261018f9161015a82602096336110a2565b50519384937f5ab64fb80000000000000000000000000000000000000000000000000000000085528401526024830190610881565b0390fd5b50507f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000006101e08461105b565b16146101ec5750611093565b7f28f95541000000000000000000000000000000000000000000000000000000005f525ffd5b5090346100b65760606003193601126100b65761022d610725565b90602480359167ffffffffffffffff8084116100b657366023850112156100b657838201359461025c866106ad565b946102698851968761065d565b868652602096858888019160051b830101913683116100b65786899101915b83831061057057505050506044359673ffffffffffffffffffffffffffffffffffffffff80891690818a036100b6576102c28a8986610e3b565b918351927f0f710888000000000000000000000000000000000000000000000000000000008b8501528286168985015260448401526064830152608060848301525f60a483015260a4825260e082018281108682111761054557835261034a91907f00000000000000000000000000000000000000000000000000000000000000001661113b565b92835184019388818187019603126100b657888101519182116100b657019280603f850112156100b65787840151610381816106ad565b9461038e8451968761065d565b818652838a87019260051b8201019283116100b657838a9101915b83831061053557505050506103be8651610787565b975f5b8751811015610441576103dd6103d782876107b8565b51610f41565b6103ea6103d7838b6107b8565b905f8282039212818312811691831390151617610416579060019161040f828d6107b8565b52016103c1565b876011887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50908591898989886104538251610787565b955f5b835181101561047f578061046e88886001948e610f96565b610478828b6107b8565b5201610456565b50876104b3866104ad6104a86104a261049b8f8e868f9261099c565b80946107b8565b516107f9565b611026565b956107b8565b5192670de0b6b3a76400009485810295818704149015171561050b5783156104e157505051910460011c8152f35b6012907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b82518152918101918a91016103a9565b876041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b8235815291810191899101610288565b50346100b65760806003193601126100b65761059a610725565b67ffffffffffffffff92906024358481116100b6576105bc90369084016106c5565b6044359485116100b6576105d86100af936020963691016106c5565b906105e1610748565b9261099c565b50346100b65760206003193601126100b65781359167ffffffffffffffff83116100b65761061d6100af916020943691016106c5565b610924565b50346100b65760206003193601126100b65781359167ffffffffffffffff83116100b6576106586100af916020943691016106c5565b6108a6565b90601f601f19910116810190811067ffffffffffffffff82111761068057604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116106805760051b60200190565b9080601f830112156100b65760209082356106df816106ad565b936106ed604051958661065d565b81855260208086019260051b8201019283116100b657602001905b828210610716575050505090565b81358152908301908301610708565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100b657565b6064359073ffffffffffffffffffffffffffffffffffffffff821682036100b657565b67ffffffffffffffff811161068057601f01601f191660200190565b90610791826106ad565b61079e604051918261065d565b828152601f196107ae82946106ad565b0190602036910137565b80518210156107cc5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f80000000000000000000000000000000000000000000000000000000000000008114610825575f0390565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b3d1561087c573d906108638261076b565b91610871604051938461065d565b82523d5f602084013e565b606090565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b7f800000000000000000000000000000000000000000000000000000000000000091905f805b825181101561091e575f6108e082856107b8565b51128061090b575b6108f5575b6001016108cc565b8094506109039150826107b8565b5192806108ed565b508461091782856107b8565b51136108e8565b50925050565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91905f805b825181101561091e575f61095e82856107b8565b511380610989575b610973575b60010161094a565b8094506109819150826107b8565b51928061096b565b508461099582856107b8565b5112610966565b9290935f93604051917fca4f280300000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff821660048401525f8360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa928315610e30575f93610d80575b50909192945f905b87517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161082557821015610d7557509085939291610a7a86610924565b90838986610a878a6108a6565b9a8b958b610aa36104a289610a9c85856107b8565b51936107b8565b1315610c4457610bc192610b77889593610af9610af38573ffffffffffffffffffffffffffffffffffffffff610aeb610b85989b9e82610ae3858b6107b8565b5116986107b8565b5116976107b8565b51611026565b60405195869460209a7f3ebc54e5000000000000000000000000000000000000000000000000000000008c88015260248701939060e095929373ffffffffffffffffffffffffffffffffffffffff8095818094168852166020870152166040850152606084015216608082015260c060a08201525f60c08201520190565b03601f19810183528261065d565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661113b565b82818051810103126100b657610bec825f610be58f95610bf29783960151966107b8565b528b6107b8565b52610f41565b91610bfd818b6107b8565b515f848201948512911290801582169115161761082557600192610c21828c6107b8565b52610c38610c31888c8489610f96565b91896107b8565b52019091929395610a38565b95935050505082610c5590876107b8565b5173ffffffffffffffffffffffffffffffffffffffff1690610c778a886107b8565b5173ffffffffffffffffffffffffffffffffffffffff16610c988b8d6107b8565b51610ca2906107f9565b610cab90611026565b6040517f175d44080000000000000000000000000000000000000000000000000000000060208083019190915273ffffffffffffffffffffffffffffffffffffffff8a8116602484015295861660448301529285166064820152608481019190915292891660a484015260c060c48401525f60e480850191909152835291610d356101048261065d565b610bc19073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661113b565b955050945050505090565b9092503d805f833e610d92818361065d565b81019060209081818403126100b65780519067ffffffffffffffff82116100b657019180601f840112156100b6578251610dcb816106ad565b93610dd9604051958661065d565b818552838086019260051b8201019283116100b6578301905b828210610e045750505050915f610a30565b815173ffffffffffffffffffffffffffffffffffffffff811681036100b6578152908301908301610df2565b6040513d5f823e3d90fd5b90929173ffffffffffffffffffffffffffffffffffffffff604051916020937fda001f7d00000000000000000000000000000000000000000000000000000000858501528260a48501911660248501526080604485015286518091528460c485019701905f5b818110610f2d5750505083610f1c94959683610ef5931660648601525f858203917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8301608488015252808552018361065d565b7f00000000000000000000000000000000000000000000000000000000000000001661113b565b81818051810103126100b657015190565b825189529786019791860191600101610ea1565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610f6b5790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b929091610fd183825192601f19610fc5610faf866106ad565b95610fbd604051978861065d565b8087526106ad565b013660208601376107b8565b5193841561101d57610ff993610ff35f871396875f1461100e57915b846107b8565b52610e3b565b90156110025790565b61100b906107f9565b90565b611017906107f9565b91610fed565b50505050505f90565b5f81126110305790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600481511061106b576020015190565b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b80511561106b57805190602001fd5b906110df57508051156110b757602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611132575b6110f0575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156110e8565b90303b156100b6575f6111a091604051809381927fa769963800000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff8597166004840152604060248401526044830190610881565b038183305af190816112f7575b50611299576111ba610852565b907f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000006112068461105b565b1603611293578151916020600319938481016004840152820193828286019503011261128f5760248101519067ffffffffffffffff821161128b57018260438201121561128f5760248101519061125c8261076b565b9361126a604051958661065d565b8285526044838301011161128b5790806044602093018386015e8301015290565b8280fd5b5080fd5b50611093565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6578706563746564207375636365737300000000000000000000000000006044820152fd5b90915067ffffffffffffffff8111610680576040525f905f6111ad56fea26469706673582212204db0e7aa5c44cbe955819c9d8b15e05ffce56ab00beafcdffa7c3d29a4522a2364736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x9A JUMPI PUSH1 0x1F PUSH2 0x13FD CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x9E JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x9A JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND DUP3 SUB PUSH2 0x9A JUMPI PUSH1 0x20 ADD MLOAD SWAP2 DUP3 AND DUP3 SUB PUSH2 0x9A JUMPI PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x134A SWAP1 DUP2 PUSH2 0xB3 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0xA00 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x325 ADD MSTORE DUP2 DUP2 PUSH2 0xB9C ADD MSTORE DUP2 DUP2 PUSH2 0xD50 ADD MSTORE PUSH2 0xEF7 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1EF39EE EQ PUSH2 0x622 JUMPI DUP1 PUSH4 0xD4277D1 EQ PUSH2 0x5E7 JUMPI DUP1 PUSH4 0x3B064CA3 EQ PUSH2 0x580 JUMPI DUP1 PUSH4 0x48406A54 EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0xA7699638 EQ PUSH2 0xBA JUMPI PUSH4 0xE3A50D82 EQ PUSH2 0x5E JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x77 PUSH2 0x725 JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0xB6 JUMPI PUSH2 0x9D PUSH2 0xAF SWAP3 PUSH1 0x20 SWAP6 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0xA5 PUSH2 0x748 JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xF96 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0xB6 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0xD4 PUSH2 0x725 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB6 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP2 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x100 DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP3 PUSH2 0x10D DUP7 MLOAD SWAP5 DUP6 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0xB6 JUMPI PUSH0 SWAP5 DUP6 PUSH1 0x20 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL SWAP2 PUSH2 0x141 PUSH2 0x852 JUMP JUMPDEST SWAP3 DUP1 ISZERO PUSH2 0x193 JUMPI SWAP3 PUSH2 0x18F SWAP2 PUSH2 0x15A DUP3 PUSH1 0x20 SWAP7 CALLER PUSH2 0x10A2 JUMP JUMPDEST POP MLOAD SWAP4 DUP5 SWAP4 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x881 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP POP PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x1E0 DUP5 PUSH2 0x105B JUMP JUMPDEST AND EQ PUSH2 0x1EC JUMPI POP PUSH2 0x1093 JUMP JUMPDEST PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x22D PUSH2 0x725 JUMP JUMPDEST SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT PUSH2 0xB6 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP4 DUP3 ADD CALLDATALOAD SWAP5 PUSH2 0x25C DUP7 PUSH2 0x6AD JUMP JUMPDEST SWAP5 PUSH2 0x269 DUP9 MLOAD SWAP7 DUP8 PUSH2 0x65D JUMP JUMPDEST DUP7 DUP7 MSTORE PUSH1 0x20 SWAP7 DUP6 DUP9 DUP9 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xB6 JUMPI DUP7 DUP10 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x570 JUMPI POP POP POP POP PUSH1 0x44 CALLDATALOAD SWAP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP1 DUP2 DUP11 SUB PUSH2 0xB6 JUMPI PUSH2 0x2C2 DUP11 DUP10 DUP7 PUSH2 0xE3B JUMP JUMPDEST SWAP2 DUP4 MLOAD SWAP3 PUSH32 0xF71088800000000000000000000000000000000000000000000000000000000 DUP12 DUP6 ADD MSTORE DUP3 DUP7 AND DUP10 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP4 ADD MSTORE PUSH0 PUSH1 0xA4 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 MSTORE PUSH1 0xE0 DUP3 ADD DUP3 DUP2 LT DUP7 DUP3 GT OR PUSH2 0x545 JUMPI DUP4 MSTORE PUSH2 0x34A SWAP2 SWAP1 PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST SWAP3 DUP4 MLOAD DUP5 ADD SWAP4 DUP9 DUP2 DUP2 DUP8 ADD SWAP7 SUB SLT PUSH2 0xB6 JUMPI DUP9 DUP2 ADD MLOAD SWAP2 DUP3 GT PUSH2 0xB6 JUMPI ADD SWAP3 DUP1 PUSH1 0x3F DUP6 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP8 DUP5 ADD MLOAD PUSH2 0x381 DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP5 PUSH2 0x38E DUP5 MLOAD SWAP7 DUP8 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP7 MSTORE DUP4 DUP11 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI DUP4 DUP11 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x535 JUMPI POP POP POP POP PUSH2 0x3BE DUP7 MLOAD PUSH2 0x787 JUMP JUMPDEST SWAP8 PUSH0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x441 JUMPI PUSH2 0x3DD PUSH2 0x3D7 DUP3 DUP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0xF41 JUMP JUMPDEST PUSH2 0x3EA PUSH2 0x3D7 DUP4 DUP12 PUSH2 0x7B8 JUMP JUMPDEST SWAP1 PUSH0 DUP3 DUP3 SUB SWAP3 SLT DUP2 DUP4 SLT DUP2 AND SWAP2 DUP4 SGT SWAP1 ISZERO AND OR PUSH2 0x416 JUMPI SWAP1 PUSH1 0x1 SWAP2 PUSH2 0x40F DUP3 DUP14 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD PUSH2 0x3C1 JUMP JUMPDEST DUP8 PUSH1 0x11 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 SWAP2 DUP10 DUP10 DUP10 DUP9 PUSH2 0x453 DUP3 MLOAD PUSH2 0x787 JUMP JUMPDEST SWAP6 PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x47F JUMPI DUP1 PUSH2 0x46E DUP9 DUP9 PUSH1 0x1 SWAP5 DUP15 PUSH2 0xF96 JUMP JUMPDEST PUSH2 0x478 DUP3 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD PUSH2 0x456 JUMP JUMPDEST POP DUP8 PUSH2 0x4B3 DUP7 PUSH2 0x4AD PUSH2 0x4A8 PUSH2 0x4A2 PUSH2 0x49B DUP16 DUP15 DUP7 DUP16 SWAP3 PUSH2 0x99C JUMP JUMPDEST DUP1 SWAP5 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0x7F9 JUMP JUMPDEST PUSH2 0x1026 JUMP JUMPDEST SWAP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 DUP2 MUL SWAP6 DUP2 DUP8 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x50B JUMPI DUP4 ISZERO PUSH2 0x4E1 JUMPI POP POP MLOAD SWAP2 DIV PUSH1 0x1 SHR DUP2 MSTORE RETURN JUMPDEST PUSH1 0x12 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP3 MLOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP11 SWAP2 ADD PUSH2 0x3A9 JUMP JUMPDEST DUP8 PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP10 SWAP2 ADD PUSH2 0x288 JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x59A PUSH2 0x725 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 PUSH1 0x24 CALLDATALOAD DUP5 DUP2 GT PUSH2 0xB6 JUMPI PUSH2 0x5BC SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP5 DUP6 GT PUSH2 0xB6 JUMPI PUSH2 0x5D8 PUSH2 0xAF SWAP4 PUSH1 0x20 SWAP7 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST SWAP1 PUSH2 0x5E1 PUSH2 0x748 JUMP JUMPDEST SWAP3 PUSH2 0x99C JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0xB6 JUMPI PUSH2 0x61D PUSH2 0xAF SWAP2 PUSH1 0x20 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0x924 JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0xB6 JUMPI PUSH2 0x658 PUSH2 0xAF SWAP2 PUSH1 0x20 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0x8A6 JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xB6 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x6DF DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP4 PUSH2 0x6ED PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x716 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x708 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB6 JUMPI JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB6 JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x791 DUP3 PUSH2 0x6AD JUMP JUMPDEST PUSH2 0x79E PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x7AE DUP3 SWAP5 PUSH2 0x6AD JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x7CC JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x825 JUMPI PUSH0 SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x87C JUMPI RETURNDATASIZE SWAP1 PUSH2 0x863 DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP2 PUSH2 0x871 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x65D JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 SWAP2 SWAP1 PUSH0 DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x91E JUMPI PUSH0 PUSH2 0x8E0 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SLT DUP1 PUSH2 0x90B JUMPI JUMPDEST PUSH2 0x8F5 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x8CC JUMP JUMPDEST DUP1 SWAP5 POP PUSH2 0x903 SWAP2 POP DUP3 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 DUP1 PUSH2 0x8ED JUMP JUMPDEST POP DUP5 PUSH2 0x917 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SGT PUSH2 0x8E8 JUMP JUMPDEST POP SWAP3 POP POP JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 PUSH0 DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x91E JUMPI PUSH0 PUSH2 0x95E DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SGT DUP1 PUSH2 0x989 JUMPI JUMPDEST PUSH2 0x973 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x94A JUMP JUMPDEST DUP1 SWAP5 POP PUSH2 0x981 SWAP2 POP DUP3 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 DUP1 PUSH2 0x96B JUMP JUMPDEST POP DUP5 PUSH2 0x995 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SLT PUSH2 0x966 JUMP JUMPDEST SWAP3 SWAP1 SWAP4 PUSH0 SWAP4 PUSH1 0x40 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xE30 JUMPI PUSH0 SWAP4 PUSH2 0xD80 JUMPI JUMPDEST POP SWAP1 SWAP2 SWAP3 SWAP5 PUSH0 SWAP1 JUMPDEST DUP8 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 GT PUSH2 0x825 JUMPI DUP3 LT ISZERO PUSH2 0xD75 JUMPI POP SWAP1 DUP6 SWAP4 SWAP3 SWAP2 PUSH2 0xA7A DUP7 PUSH2 0x924 JUMP JUMPDEST SWAP1 DUP4 DUP10 DUP7 PUSH2 0xA87 DUP11 PUSH2 0x8A6 JUMP JUMPDEST SWAP11 DUP12 SWAP6 DUP12 PUSH2 0xAA3 PUSH2 0x4A2 DUP10 PUSH2 0xA9C DUP6 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP4 PUSH2 0x7B8 JUMP JUMPDEST SGT ISZERO PUSH2 0xC44 JUMPI PUSH2 0xBC1 SWAP3 PUSH2 0xB77 DUP9 SWAP6 SWAP4 PUSH2 0xAF9 PUSH2 0xAF3 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xAEB PUSH2 0xB85 SWAP9 SWAP12 SWAP15 DUP3 PUSH2 0xAE3 DUP6 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MLOAD AND SWAP9 PUSH2 0x7B8 JUMP JUMPDEST MLOAD AND SWAP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0x1026 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 PUSH1 0x20 SWAP11 PUSH32 0x3EBC54E500000000000000000000000000000000000000000000000000000000 DUP13 DUP9 ADD MSTORE PUSH1 0x24 DUP8 ADD SWAP4 SWAP1 PUSH1 0xE0 SWAP6 SWAP3 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP6 DUP2 DUP1 SWAP5 AND DUP9 MSTORE AND PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x65D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST DUP3 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xB6 JUMPI PUSH2 0xBEC DUP3 PUSH0 PUSH2 0xBE5 DUP16 SWAP6 PUSH2 0xBF2 SWAP8 DUP4 SWAP7 ADD MLOAD SWAP7 PUSH2 0x7B8 JUMP JUMPDEST MSTORE DUP12 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xF41 JUMP JUMPDEST SWAP2 PUSH2 0xBFD DUP2 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH0 DUP5 DUP3 ADD SWAP5 DUP6 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x825 JUMPI PUSH1 0x1 SWAP3 PUSH2 0xC21 DUP3 DUP13 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xC38 PUSH2 0xC31 DUP9 DUP13 DUP5 DUP10 PUSH2 0xF96 JUMP JUMPDEST SWAP2 DUP10 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 PUSH2 0xA38 JUMP JUMPDEST SWAP6 SWAP4 POP POP POP POP DUP3 PUSH2 0xC55 SWAP1 DUP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0xC77 DUP11 DUP9 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xC98 DUP12 DUP14 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0xCA2 SWAP1 PUSH2 0x7F9 JUMP JUMPDEST PUSH2 0xCAB SWAP1 PUSH2 0x1026 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x175D440800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND PUSH1 0x24 DUP5 ADD MSTORE SWAP6 DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE SWAP3 DUP6 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP10 AND PUSH1 0xA4 DUP5 ADD MSTORE PUSH1 0xC0 PUSH1 0xC4 DUP5 ADD MSTORE PUSH0 PUSH1 0xE4 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MSTORE SWAP2 PUSH2 0xD35 PUSH2 0x104 DUP3 PUSH2 0x65D JUMP JUMPDEST PUSH2 0xBC1 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST SWAP6 POP POP SWAP5 POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xD92 DUP2 DUP4 PUSH2 0x65D JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0xB6 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB6 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP3 MLOAD PUSH2 0xDCB DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP4 PUSH2 0xDD9 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xE04 JUMPI POP POP POP POP SWAP2 PUSH0 PUSH2 0xA30 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB6 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 SWAP4 PUSH32 0xDA001F7D00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE DUP3 PUSH1 0xA4 DUP6 ADD SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x80 PUSH1 0x44 DUP6 ADD MSTORE DUP7 MLOAD DUP1 SWAP2 MSTORE DUP5 PUSH1 0xC4 DUP6 ADD SWAP8 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xF2D JUMPI POP POP POP DUP4 PUSH2 0xF1C SWAP5 SWAP6 SWAP7 DUP4 PUSH2 0xEF5 SWAP4 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH0 DUP6 DUP3 SUB SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP4 ADD PUSH1 0x84 DUP9 ADD MSTORE MSTORE DUP1 DUP6 MSTORE ADD DUP4 PUSH2 0x65D JUMP JUMPDEST PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST DUP2 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xB6 JUMPI ADD MLOAD SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP10 MSTORE SWAP8 DUP7 ADD SWAP8 SWAP2 DUP7 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xEA1 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF6B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0xFD1 DUP4 DUP3 MLOAD SWAP3 PUSH1 0x1F NOT PUSH2 0xFC5 PUSH2 0xFAF DUP7 PUSH2 0x6AD JUMP JUMPDEST SWAP6 PUSH2 0xFBD PUSH1 0x40 MLOAD SWAP8 DUP9 PUSH2 0x65D JUMP JUMPDEST DUP1 DUP8 MSTORE PUSH2 0x6AD JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP4 DUP5 ISZERO PUSH2 0x101D JUMPI PUSH2 0xFF9 SWAP4 PUSH2 0xFF3 PUSH0 DUP8 SGT SWAP7 DUP8 PUSH0 EQ PUSH2 0x100E JUMPI SWAP2 JUMPDEST DUP5 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xE3B JUMP JUMPDEST SWAP1 ISZERO PUSH2 0x1002 JUMPI SWAP1 JUMP JUMPDEST PUSH2 0x100B SWAP1 PUSH2 0x7F9 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1017 SWAP1 PUSH2 0x7F9 JUMP JUMPDEST SWAP2 PUSH2 0xFED JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0x1030 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP2 MLOAD LT PUSH2 0x106B JUMPI PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x106B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0x10DF JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x10B7 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x1132 JUMPI JUMPDEST PUSH2 0x10F0 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x10E8 JUMP JUMPDEST SWAP1 ADDRESS EXTCODESIZE ISZERO PUSH2 0xB6 JUMPI PUSH0 PUSH2 0x11A0 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA769963800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SWAP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x881 JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL SWAP1 DUP2 PUSH2 0x12F7 JUMPI JUMPDEST POP PUSH2 0x1299 JUMPI PUSH2 0x11BA PUSH2 0x852 JUMP JUMPDEST SWAP1 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x1206 DUP5 PUSH2 0x105B JUMP JUMPDEST AND SUB PUSH2 0x1293 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 PUSH1 0x3 NOT SWAP4 DUP5 DUP2 ADD PUSH1 0x4 DUP5 ADD MSTORE DUP3 ADD SWAP4 DUP3 DUP3 DUP7 ADD SWAP6 SUB ADD SLT PUSH2 0x128F JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x128B JUMPI ADD DUP3 PUSH1 0x43 DUP3 ADD SLT ISZERO PUSH2 0x128F JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH2 0x125C DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP4 PUSH2 0x126A PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP6 MSTORE PUSH1 0x44 DUP4 DUP4 ADD ADD GT PUSH2 0x128B JUMPI SWAP1 DUP1 PUSH1 0x44 PUSH1 0x20 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP PUSH2 0x1093 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420737563636573730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP1 PUSH0 PUSH2 0x11AD JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4D 0xB0 0xE7 0xAA TLOAD PREVRANDAO 0xCB 0xE9 SSTORE DUP2 SWAP13 SWAP14 DUP12 ISZERO 0xE0 PUSH0 0xFC 0xE5 PUSH11 0xB00BEAFCDFFA7C3D29A452 0x2A 0x23 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"302:957:93:-:0;;;;;;;;;;;;;-1:-1:-1;;302:957:93;;;;-1:-1:-1;;;;;302:957:93;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;302:957:93;;;;;;;;;;;;;;;;;;877:14:85;;901:16;;302:957:93;;;;;;;;877:14:85;302:957:93;;;;;901:16:85;302:957:93;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;302:957:93;;;;;;-1:-1:-1;302:957:93;;;;;-1:-1:-1;302:957:93"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":1864,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_6997":{"entryPoint":1829,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_array_int256_dyn":{"entryPoint":1733,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_contract_IERC20_contract_IERC20_uint256_address_stringliteral_c5d2":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_bytes":{"entryPoint":2177,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_and_zero_memory_array_array_int256_dyn":{"entryPoint":1927,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_int256_dyn":{"entryPoint":1709,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":1899,"id":null,"parameterSlots":1,"returnSlots":1},"extract_returndata":{"entryPoint":2130,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":1629,"id":null,"parameterSlots":2,"returnSlots":0},"fun_bubbleUpRevert":{"entryPoint":4243,"id":4958,"parameterSlots":1,"returnSlots":0},"fun_callAndRevert":{"entryPoint":4411,"id":18572,"parameterSlots":2,"returnSlots":1},"fun_maxNegativeIndex":{"entryPoint":2214,"id":21888,"parameterSlots":1,"returnSlots":1},"fun_minPositiveIndex":{"entryPoint":2340,"id":21835,"parameterSlots":1,"returnSlots":1},"fun_parseSelector":{"entryPoint":4187,"id":4940,"parameterSlots":1,"returnSlots":1},"fun_queryAddLiquidityUnbalanced":{"entryPoint":3643,"id":21421,"parameterSlots":3,"returnSlots":1},"fun_queryAddLiquidityUnbalancedForTokenDeltas":{"entryPoint":3990,"id":21618,"parameterSlots":4,"returnSlots":1},"fun_toInt256":{"entryPoint":3905,"id":16081,"parameterSlots":1,"returnSlots":1},"fun_toUint256":{"entryPoint":4134,"id":15245,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":4258,"id":11283,"parameterSlots":3,"returnSlots":1},"fun_zeroOutDeltas":{"entryPoint":2460,"id":21782,"parameterSlots":4,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":1976,"id":null,"parameterSlots":2,"returnSlots":1},"negate_int256":{"entryPoint":2041,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"21227":[{"length":32,"start":2560}],"21230":[{"length":32,"start":805},{"length":32,"start":2972},{"length":32,"start":3408},{"length":32,"start":3831}]},"linkReferences":{},"object":"60406080815260049081361015610014575f80fd5b5f3560e01c806301ef39ee146106225780630d4277d1146105e75780633b064ca31461058057806348406a5414610212578063a7699638146100ba5763e3a50d821461005e575f80fd5b346100b65760806003193601126100b657610077610725565b916044359267ffffffffffffffff84116100b65761009d6100af926020953691016106c5565b6100a5610748565b9160243590610f96565b9051908152f35b5f80fd5b5090346100b657816003193601126100b6576100d4610725565b6024359067ffffffffffffffff82116100b657366023830112156100b65781830135906101008261076b565b9261010d8651948561065d565b828452602084019036602485830101116100b6575f94856020868297602484960187378301015251925af191610141610852565b928015610193579261018f9161015a82602096336110a2565b50519384937f5ab64fb80000000000000000000000000000000000000000000000000000000085528401526024830190610881565b0390fd5b50507f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000006101e08461105b565b16146101ec5750611093565b7f28f95541000000000000000000000000000000000000000000000000000000005f525ffd5b5090346100b65760606003193601126100b65761022d610725565b90602480359167ffffffffffffffff8084116100b657366023850112156100b657838201359461025c866106ad565b946102698851968761065d565b868652602096858888019160051b830101913683116100b65786899101915b83831061057057505050506044359673ffffffffffffffffffffffffffffffffffffffff80891690818a036100b6576102c28a8986610e3b565b918351927f0f710888000000000000000000000000000000000000000000000000000000008b8501528286168985015260448401526064830152608060848301525f60a483015260a4825260e082018281108682111761054557835261034a91907f00000000000000000000000000000000000000000000000000000000000000001661113b565b92835184019388818187019603126100b657888101519182116100b657019280603f850112156100b65787840151610381816106ad565b9461038e8451968761065d565b818652838a87019260051b8201019283116100b657838a9101915b83831061053557505050506103be8651610787565b975f5b8751811015610441576103dd6103d782876107b8565b51610f41565b6103ea6103d7838b6107b8565b905f8282039212818312811691831390151617610416579060019161040f828d6107b8565b52016103c1565b876011887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50908591898989886104538251610787565b955f5b835181101561047f578061046e88886001948e610f96565b610478828b6107b8565b5201610456565b50876104b3866104ad6104a86104a261049b8f8e868f9261099c565b80946107b8565b516107f9565b611026565b956107b8565b5192670de0b6b3a76400009485810295818704149015171561050b5783156104e157505051910460011c8152f35b6012907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b82518152918101918a91016103a9565b876041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b8235815291810191899101610288565b50346100b65760806003193601126100b65761059a610725565b67ffffffffffffffff92906024358481116100b6576105bc90369084016106c5565b6044359485116100b6576105d86100af936020963691016106c5565b906105e1610748565b9261099c565b50346100b65760206003193601126100b65781359167ffffffffffffffff83116100b65761061d6100af916020943691016106c5565b610924565b50346100b65760206003193601126100b65781359167ffffffffffffffff83116100b6576106586100af916020943691016106c5565b6108a6565b90601f601f19910116810190811067ffffffffffffffff82111761068057604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116106805760051b60200190565b9080601f830112156100b65760209082356106df816106ad565b936106ed604051958661065d565b81855260208086019260051b8201019283116100b657602001905b828210610716575050505090565b81358152908301908301610708565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100b657565b6064359073ffffffffffffffffffffffffffffffffffffffff821682036100b657565b67ffffffffffffffff811161068057601f01601f191660200190565b90610791826106ad565b61079e604051918261065d565b828152601f196107ae82946106ad565b0190602036910137565b80518210156107cc5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f80000000000000000000000000000000000000000000000000000000000000008114610825575f0390565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b3d1561087c573d906108638261076b565b91610871604051938461065d565b82523d5f602084013e565b606090565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b7f800000000000000000000000000000000000000000000000000000000000000091905f805b825181101561091e575f6108e082856107b8565b51128061090b575b6108f5575b6001016108cc565b8094506109039150826107b8565b5192806108ed565b508461091782856107b8565b51136108e8565b50925050565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91905f805b825181101561091e575f61095e82856107b8565b511380610989575b610973575b60010161094a565b8094506109819150826107b8565b51928061096b565b508461099582856107b8565b5112610966565b9290935f93604051917fca4f280300000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff821660048401525f8360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa928315610e30575f93610d80575b50909192945f905b87517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161082557821015610d7557509085939291610a7a86610924565b90838986610a878a6108a6565b9a8b958b610aa36104a289610a9c85856107b8565b51936107b8565b1315610c4457610bc192610b77889593610af9610af38573ffffffffffffffffffffffffffffffffffffffff610aeb610b85989b9e82610ae3858b6107b8565b5116986107b8565b5116976107b8565b51611026565b60405195869460209a7f3ebc54e5000000000000000000000000000000000000000000000000000000008c88015260248701939060e095929373ffffffffffffffffffffffffffffffffffffffff8095818094168852166020870152166040850152606084015216608082015260c060a08201525f60c08201520190565b03601f19810183528261065d565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661113b565b82818051810103126100b657610bec825f610be58f95610bf29783960151966107b8565b528b6107b8565b52610f41565b91610bfd818b6107b8565b515f848201948512911290801582169115161761082557600192610c21828c6107b8565b52610c38610c31888c8489610f96565b91896107b8565b52019091929395610a38565b95935050505082610c5590876107b8565b5173ffffffffffffffffffffffffffffffffffffffff1690610c778a886107b8565b5173ffffffffffffffffffffffffffffffffffffffff16610c988b8d6107b8565b51610ca2906107f9565b610cab90611026565b6040517f175d44080000000000000000000000000000000000000000000000000000000060208083019190915273ffffffffffffffffffffffffffffffffffffffff8a8116602484015295861660448301529285166064820152608481019190915292891660a484015260c060c48401525f60e480850191909152835291610d356101048261065d565b610bc19073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661113b565b955050945050505090565b9092503d805f833e610d92818361065d565b81019060209081818403126100b65780519067ffffffffffffffff82116100b657019180601f840112156100b6578251610dcb816106ad565b93610dd9604051958661065d565b818552838086019260051b8201019283116100b6578301905b828210610e045750505050915f610a30565b815173ffffffffffffffffffffffffffffffffffffffff811681036100b6578152908301908301610df2565b6040513d5f823e3d90fd5b90929173ffffffffffffffffffffffffffffffffffffffff604051916020937fda001f7d00000000000000000000000000000000000000000000000000000000858501528260a48501911660248501526080604485015286518091528460c485019701905f5b818110610f2d5750505083610f1c94959683610ef5931660648601525f858203917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8301608488015252808552018361065d565b7f00000000000000000000000000000000000000000000000000000000000000001661113b565b81818051810103126100b657015190565b825189529786019791860191600101610ea1565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610f6b5790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b929091610fd183825192601f19610fc5610faf866106ad565b95610fbd604051978861065d565b8087526106ad565b013660208601376107b8565b5193841561101d57610ff993610ff35f871396875f1461100e57915b846107b8565b52610e3b565b90156110025790565b61100b906107f9565b90565b611017906107f9565b91610fed565b50505050505f90565b5f81126110305790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600481511061106b576020015190565b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b80511561106b57805190602001fd5b906110df57508051156110b757602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611132575b6110f0575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156110e8565b90303b156100b6575f6111a091604051809381927fa769963800000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff8597166004840152604060248401526044830190610881565b038183305af190816112f7575b50611299576111ba610852565b907f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000006112068461105b565b1603611293578151916020600319938481016004840152820193828286019503011261128f5760248101519067ffffffffffffffff821161128b57018260438201121561128f5760248101519061125c8261076b565b9361126a604051958661065d565b8285526044838301011161128b5790806044602093018386015e8301015290565b8280fd5b5080fd5b50611093565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6578706563746564207375636365737300000000000000000000000000006044820152fd5b90915067ffffffffffffffff8111610680576040525f905f6111ad56fea26469706673582212204db0e7aa5c44cbe955819c9d8b15e05ffce56ab00beafcdffa7c3d29a4522a2364736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1EF39EE EQ PUSH2 0x622 JUMPI DUP1 PUSH4 0xD4277D1 EQ PUSH2 0x5E7 JUMPI DUP1 PUSH4 0x3B064CA3 EQ PUSH2 0x580 JUMPI DUP1 PUSH4 0x48406A54 EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0xA7699638 EQ PUSH2 0xBA JUMPI PUSH4 0xE3A50D82 EQ PUSH2 0x5E JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x77 PUSH2 0x725 JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0xB6 JUMPI PUSH2 0x9D PUSH2 0xAF SWAP3 PUSH1 0x20 SWAP6 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0xA5 PUSH2 0x748 JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xF96 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0xB6 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0xD4 PUSH2 0x725 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB6 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP2 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x100 DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP3 PUSH2 0x10D DUP7 MLOAD SWAP5 DUP6 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0xB6 JUMPI PUSH0 SWAP5 DUP6 PUSH1 0x20 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL SWAP2 PUSH2 0x141 PUSH2 0x852 JUMP JUMPDEST SWAP3 DUP1 ISZERO PUSH2 0x193 JUMPI SWAP3 PUSH2 0x18F SWAP2 PUSH2 0x15A DUP3 PUSH1 0x20 SWAP7 CALLER PUSH2 0x10A2 JUMP JUMPDEST POP MLOAD SWAP4 DUP5 SWAP4 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x881 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP POP PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x1E0 DUP5 PUSH2 0x105B JUMP JUMPDEST AND EQ PUSH2 0x1EC JUMPI POP PUSH2 0x1093 JUMP JUMPDEST PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x22D PUSH2 0x725 JUMP JUMPDEST SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT PUSH2 0xB6 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP4 DUP3 ADD CALLDATALOAD SWAP5 PUSH2 0x25C DUP7 PUSH2 0x6AD JUMP JUMPDEST SWAP5 PUSH2 0x269 DUP9 MLOAD SWAP7 DUP8 PUSH2 0x65D JUMP JUMPDEST DUP7 DUP7 MSTORE PUSH1 0x20 SWAP7 DUP6 DUP9 DUP9 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xB6 JUMPI DUP7 DUP10 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x570 JUMPI POP POP POP POP PUSH1 0x44 CALLDATALOAD SWAP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP1 DUP2 DUP11 SUB PUSH2 0xB6 JUMPI PUSH2 0x2C2 DUP11 DUP10 DUP7 PUSH2 0xE3B JUMP JUMPDEST SWAP2 DUP4 MLOAD SWAP3 PUSH32 0xF71088800000000000000000000000000000000000000000000000000000000 DUP12 DUP6 ADD MSTORE DUP3 DUP7 AND DUP10 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP4 ADD MSTORE PUSH0 PUSH1 0xA4 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 MSTORE PUSH1 0xE0 DUP3 ADD DUP3 DUP2 LT DUP7 DUP3 GT OR PUSH2 0x545 JUMPI DUP4 MSTORE PUSH2 0x34A SWAP2 SWAP1 PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST SWAP3 DUP4 MLOAD DUP5 ADD SWAP4 DUP9 DUP2 DUP2 DUP8 ADD SWAP7 SUB SLT PUSH2 0xB6 JUMPI DUP9 DUP2 ADD MLOAD SWAP2 DUP3 GT PUSH2 0xB6 JUMPI ADD SWAP3 DUP1 PUSH1 0x3F DUP6 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP8 DUP5 ADD MLOAD PUSH2 0x381 DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP5 PUSH2 0x38E DUP5 MLOAD SWAP7 DUP8 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP7 MSTORE DUP4 DUP11 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI DUP4 DUP11 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x535 JUMPI POP POP POP POP PUSH2 0x3BE DUP7 MLOAD PUSH2 0x787 JUMP JUMPDEST SWAP8 PUSH0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x441 JUMPI PUSH2 0x3DD PUSH2 0x3D7 DUP3 DUP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0xF41 JUMP JUMPDEST PUSH2 0x3EA PUSH2 0x3D7 DUP4 DUP12 PUSH2 0x7B8 JUMP JUMPDEST SWAP1 PUSH0 DUP3 DUP3 SUB SWAP3 SLT DUP2 DUP4 SLT DUP2 AND SWAP2 DUP4 SGT SWAP1 ISZERO AND OR PUSH2 0x416 JUMPI SWAP1 PUSH1 0x1 SWAP2 PUSH2 0x40F DUP3 DUP14 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD PUSH2 0x3C1 JUMP JUMPDEST DUP8 PUSH1 0x11 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 SWAP2 DUP10 DUP10 DUP10 DUP9 PUSH2 0x453 DUP3 MLOAD PUSH2 0x787 JUMP JUMPDEST SWAP6 PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x47F JUMPI DUP1 PUSH2 0x46E DUP9 DUP9 PUSH1 0x1 SWAP5 DUP15 PUSH2 0xF96 JUMP JUMPDEST PUSH2 0x478 DUP3 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD PUSH2 0x456 JUMP JUMPDEST POP DUP8 PUSH2 0x4B3 DUP7 PUSH2 0x4AD PUSH2 0x4A8 PUSH2 0x4A2 PUSH2 0x49B DUP16 DUP15 DUP7 DUP16 SWAP3 PUSH2 0x99C JUMP JUMPDEST DUP1 SWAP5 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0x7F9 JUMP JUMPDEST PUSH2 0x1026 JUMP JUMPDEST SWAP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 DUP2 MUL SWAP6 DUP2 DUP8 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x50B JUMPI DUP4 ISZERO PUSH2 0x4E1 JUMPI POP POP MLOAD SWAP2 DIV PUSH1 0x1 SHR DUP2 MSTORE RETURN JUMPDEST PUSH1 0x12 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP3 MLOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP11 SWAP2 ADD PUSH2 0x3A9 JUMP JUMPDEST DUP8 PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP10 SWAP2 ADD PUSH2 0x288 JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x59A PUSH2 0x725 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 PUSH1 0x24 CALLDATALOAD DUP5 DUP2 GT PUSH2 0xB6 JUMPI PUSH2 0x5BC SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP5 DUP6 GT PUSH2 0xB6 JUMPI PUSH2 0x5D8 PUSH2 0xAF SWAP4 PUSH1 0x20 SWAP7 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST SWAP1 PUSH2 0x5E1 PUSH2 0x748 JUMP JUMPDEST SWAP3 PUSH2 0x99C JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0xB6 JUMPI PUSH2 0x61D PUSH2 0xAF SWAP2 PUSH1 0x20 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0x924 JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0xB6 JUMPI PUSH2 0x658 PUSH2 0xAF SWAP2 PUSH1 0x20 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0x8A6 JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xB6 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x6DF DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP4 PUSH2 0x6ED PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x716 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x708 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB6 JUMPI JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB6 JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x791 DUP3 PUSH2 0x6AD JUMP JUMPDEST PUSH2 0x79E PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x7AE DUP3 SWAP5 PUSH2 0x6AD JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x7CC JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x825 JUMPI PUSH0 SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x87C JUMPI RETURNDATASIZE SWAP1 PUSH2 0x863 DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP2 PUSH2 0x871 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x65D JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 SWAP2 SWAP1 PUSH0 DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x91E JUMPI PUSH0 PUSH2 0x8E0 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SLT DUP1 PUSH2 0x90B JUMPI JUMPDEST PUSH2 0x8F5 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x8CC JUMP JUMPDEST DUP1 SWAP5 POP PUSH2 0x903 SWAP2 POP DUP3 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 DUP1 PUSH2 0x8ED JUMP JUMPDEST POP DUP5 PUSH2 0x917 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SGT PUSH2 0x8E8 JUMP JUMPDEST POP SWAP3 POP POP JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 PUSH0 DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x91E JUMPI PUSH0 PUSH2 0x95E DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SGT DUP1 PUSH2 0x989 JUMPI JUMPDEST PUSH2 0x973 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x94A JUMP JUMPDEST DUP1 SWAP5 POP PUSH2 0x981 SWAP2 POP DUP3 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 DUP1 PUSH2 0x96B JUMP JUMPDEST POP DUP5 PUSH2 0x995 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SLT PUSH2 0x966 JUMP JUMPDEST SWAP3 SWAP1 SWAP4 PUSH0 SWAP4 PUSH1 0x40 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xE30 JUMPI PUSH0 SWAP4 PUSH2 0xD80 JUMPI JUMPDEST POP SWAP1 SWAP2 SWAP3 SWAP5 PUSH0 SWAP1 JUMPDEST DUP8 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 GT PUSH2 0x825 JUMPI DUP3 LT ISZERO PUSH2 0xD75 JUMPI POP SWAP1 DUP6 SWAP4 SWAP3 SWAP2 PUSH2 0xA7A DUP7 PUSH2 0x924 JUMP JUMPDEST SWAP1 DUP4 DUP10 DUP7 PUSH2 0xA87 DUP11 PUSH2 0x8A6 JUMP JUMPDEST SWAP11 DUP12 SWAP6 DUP12 PUSH2 0xAA3 PUSH2 0x4A2 DUP10 PUSH2 0xA9C DUP6 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP4 PUSH2 0x7B8 JUMP JUMPDEST SGT ISZERO PUSH2 0xC44 JUMPI PUSH2 0xBC1 SWAP3 PUSH2 0xB77 DUP9 SWAP6 SWAP4 PUSH2 0xAF9 PUSH2 0xAF3 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xAEB PUSH2 0xB85 SWAP9 SWAP12 SWAP15 DUP3 PUSH2 0xAE3 DUP6 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MLOAD AND SWAP9 PUSH2 0x7B8 JUMP JUMPDEST MLOAD AND SWAP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0x1026 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 PUSH1 0x20 SWAP11 PUSH32 0x3EBC54E500000000000000000000000000000000000000000000000000000000 DUP13 DUP9 ADD MSTORE PUSH1 0x24 DUP8 ADD SWAP4 SWAP1 PUSH1 0xE0 SWAP6 SWAP3 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP6 DUP2 DUP1 SWAP5 AND DUP9 MSTORE AND PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x65D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST DUP3 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xB6 JUMPI PUSH2 0xBEC DUP3 PUSH0 PUSH2 0xBE5 DUP16 SWAP6 PUSH2 0xBF2 SWAP8 DUP4 SWAP7 ADD MLOAD SWAP7 PUSH2 0x7B8 JUMP JUMPDEST MSTORE DUP12 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xF41 JUMP JUMPDEST SWAP2 PUSH2 0xBFD DUP2 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH0 DUP5 DUP3 ADD SWAP5 DUP6 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x825 JUMPI PUSH1 0x1 SWAP3 PUSH2 0xC21 DUP3 DUP13 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xC38 PUSH2 0xC31 DUP9 DUP13 DUP5 DUP10 PUSH2 0xF96 JUMP JUMPDEST SWAP2 DUP10 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 PUSH2 0xA38 JUMP JUMPDEST SWAP6 SWAP4 POP POP POP POP DUP3 PUSH2 0xC55 SWAP1 DUP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0xC77 DUP11 DUP9 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xC98 DUP12 DUP14 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0xCA2 SWAP1 PUSH2 0x7F9 JUMP JUMPDEST PUSH2 0xCAB SWAP1 PUSH2 0x1026 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x175D440800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND PUSH1 0x24 DUP5 ADD MSTORE SWAP6 DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE SWAP3 DUP6 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP10 AND PUSH1 0xA4 DUP5 ADD MSTORE PUSH1 0xC0 PUSH1 0xC4 DUP5 ADD MSTORE PUSH0 PUSH1 0xE4 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MSTORE SWAP2 PUSH2 0xD35 PUSH2 0x104 DUP3 PUSH2 0x65D JUMP JUMPDEST PUSH2 0xBC1 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST SWAP6 POP POP SWAP5 POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xD92 DUP2 DUP4 PUSH2 0x65D JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0xB6 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB6 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP3 MLOAD PUSH2 0xDCB DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP4 PUSH2 0xDD9 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xE04 JUMPI POP POP POP POP SWAP2 PUSH0 PUSH2 0xA30 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB6 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 SWAP4 PUSH32 0xDA001F7D00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE DUP3 PUSH1 0xA4 DUP6 ADD SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x80 PUSH1 0x44 DUP6 ADD MSTORE DUP7 MLOAD DUP1 SWAP2 MSTORE DUP5 PUSH1 0xC4 DUP6 ADD SWAP8 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xF2D JUMPI POP POP POP DUP4 PUSH2 0xF1C SWAP5 SWAP6 SWAP7 DUP4 PUSH2 0xEF5 SWAP4 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH0 DUP6 DUP3 SUB SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP4 ADD PUSH1 0x84 DUP9 ADD MSTORE MSTORE DUP1 DUP6 MSTORE ADD DUP4 PUSH2 0x65D JUMP JUMPDEST PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST DUP2 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xB6 JUMPI ADD MLOAD SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP10 MSTORE SWAP8 DUP7 ADD SWAP8 SWAP2 DUP7 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xEA1 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF6B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0xFD1 DUP4 DUP3 MLOAD SWAP3 PUSH1 0x1F NOT PUSH2 0xFC5 PUSH2 0xFAF DUP7 PUSH2 0x6AD JUMP JUMPDEST SWAP6 PUSH2 0xFBD PUSH1 0x40 MLOAD SWAP8 DUP9 PUSH2 0x65D JUMP JUMPDEST DUP1 DUP8 MSTORE PUSH2 0x6AD JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP4 DUP5 ISZERO PUSH2 0x101D JUMPI PUSH2 0xFF9 SWAP4 PUSH2 0xFF3 PUSH0 DUP8 SGT SWAP7 DUP8 PUSH0 EQ PUSH2 0x100E JUMPI SWAP2 JUMPDEST DUP5 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xE3B JUMP JUMPDEST SWAP1 ISZERO PUSH2 0x1002 JUMPI SWAP1 JUMP JUMPDEST PUSH2 0x100B SWAP1 PUSH2 0x7F9 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1017 SWAP1 PUSH2 0x7F9 JUMP JUMPDEST SWAP2 PUSH2 0xFED JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0x1030 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP2 MLOAD LT PUSH2 0x106B JUMPI PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x106B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0x10DF JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x10B7 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x1132 JUMPI JUMPDEST PUSH2 0x10F0 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x10E8 JUMP JUMPDEST SWAP1 ADDRESS EXTCODESIZE ISZERO PUSH2 0xB6 JUMPI PUSH0 PUSH2 0x11A0 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA769963800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SWAP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x881 JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL SWAP1 DUP2 PUSH2 0x12F7 JUMPI JUMPDEST POP PUSH2 0x1299 JUMPI PUSH2 0x11BA PUSH2 0x852 JUMP JUMPDEST SWAP1 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x1206 DUP5 PUSH2 0x105B JUMP JUMPDEST AND SUB PUSH2 0x1293 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 PUSH1 0x3 NOT SWAP4 DUP5 DUP2 ADD PUSH1 0x4 DUP5 ADD MSTORE DUP3 ADD SWAP4 DUP3 DUP3 DUP7 ADD SWAP6 SUB ADD SLT PUSH2 0x128F JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x128B JUMPI ADD DUP3 PUSH1 0x43 DUP3 ADD SLT ISZERO PUSH2 0x128F JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH2 0x125C DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP4 PUSH2 0x126A PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP6 MSTORE PUSH1 0x44 DUP4 DUP4 ADD ADD GT PUSH2 0x128B JUMPI SWAP1 DUP1 PUSH1 0x44 PUSH1 0x20 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP PUSH2 0x1093 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420737563636573730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP1 PUSH0 PUSH2 0x11AD JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4D 0xB0 0xE7 0xAA TLOAD PREVRANDAO 0xCB 0xE9 SSTORE DUP2 SWAP13 SWAP14 DUP12 ISZERO 0xE0 PUSH0 0xFC 0xE5 PUSH11 0xB00BEAFCDFFA7C3D29A452 0x2A 0x23 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"302:957:93:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1084:26:75;;;302:957:93;;;;;;;;-1:-1:-1;;302:957:93;;;;;;;:::i;:::-;;;;;;;;;;;658:76;302:957;;;;;;;:::i;:::-;;;:::i;:::-;;;;658:76;;:::i;:::-;302:957;;;;;;;;;;;;;;;;;-1:-1:-1;;302:957:93;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;811:19:75;;;;;;;:::i;:::-;840:718;;;;;990:10;302:957:93;990:10:75;955:63;990:10;302:957:93;990:10:75;;955:63;:::i;:::-;;302:957:93;1084:26:75;;;;;;;;302:957:93;;;;;;:::i;:::-;1084:26:75;;;840:718;1276:33;;1344:27;302:957:93;1276:33:75;;;:::i;:::-;302:957:93;1327:44:75;1323:110;;1540:6;;:::i;1323:110::-;1398:20;302:957:93;1398:20:75;302:957:93;1398:20:75;302:957:93;;;;;;;-1:-1:-1;;302:957:93;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1363:58:85;;;;;:::i;:::-;302:957:93;;;3822:254:85;3870:56;3822:254;;;;302:957:93;;;3822:254:85;;;302:957:93;;;;;;;;;;;;;;;;;;;;3822:254:85;;302:957:93;;;;;;;;;;;;;;3748:346:85;;302:957:93;3792:7:85;302:957:93;3748:346:85;:::i;:::-;302:957:93;;;3720:417:85;;;;;;;;302:957:93;;;;;3720:417:85;;;302:957:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1642:35:85;302:957:93;;1642:35:85;:::i;:::-;1692:13;302:957:93;1734:3:85;302:957:93;;1707:25:85;;;;;1765:36;:25;;;;:::i;:::-;302:957:93;1765:36:85;:::i;:::-;1804:28;:17;;;;:::i;:28::-;302:957:93;;;;;;;;;;;;;;;;;;;;;1753:79:85;302:957:93;1753:79:85;;;;;:::i;:::-;302:957:93;;1692:13:85;;302:957:93;;;;;;;;;;1707:25:85;;;;;;;;;1988:35;302:957:93;;1988:35:85;:::i;:::-;2038:13;302:957:93;2080:3:85;302:957:93;;2053:25:85;;;;;2114:67;;;;302:957:93;2114:67:85;;;:::i;:::-;2099:82;;;;:::i;:::-;302:957:93;;2038:13:85;;2053:25;;;2647:35;2053:25;2574:42;2575:28;2576:27;2312:47;2053:25;;;;;2312:47;:::i;:::-;2576:27;;;:::i;:::-;302:957:93;2575:28:85;:::i;:::-;2574:42;:::i;:::-;2647:35;;:::i;:::-;302:957:93;465:4:39;;;;;;;;;;;;;;;;;302:957:93;;;;;;;;;;;;;;;;;;;;;;;465:4:39;302:957:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;302:957:93;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;933:47;302:957;;;;;;;:::i;:::-;;;;:::i;:::-;933:47;;:::i;302:957::-;;;;;;-1:-1:-1;;302:957:93;;;;;;;;;;;;;;1091:24;302:957;;;;;;;:::i;:::-;1091:24;:::i;302:957::-;;;;;;-1:-1:-1;;302:957:93;;;;;;;;;;;;;;1226:24;302:957;;;;;;;:::i;:::-;1226:24;:::i;302:957::-;;;-1:-1:-1;;302:957:93;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;302:957:93;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;302:957:93;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;302:957:93;;;;:::o;:::-;;;:::o;:::-;;-1:-1:-1;;302:957:93;;;;;;;;;;;;;;;;;-1:-1:-1;302:957:93;;;;;;;;;;;:::o;9041:320:85:-;9152:16;;9041:320;302:957:93;;9216:3:85;302:957:93;;9198:16:85;;;;;302:957:93;9239:8:85;;;;:::i;:::-;302:957:93;9239:12:85;:30;;;9216:3;9235:110;;9216:3;302:957:93;;9183:13:85;;9235:110;9295:8;;;;;;;;:::i;:::-;302:957:93;;9321:9:85;9235:110;;9239:30;9255:8;;;;;;:::i;:::-;302:957:93;9255:14:85;9239:30;;9198:16;;;;;9041:320::o;8614:::-;8725:16;;8614:320;302:957:93;;8789:3:85;302:957:93;;8771:16:85;;;;;302:957:93;8812:8:85;;;;:::i;:::-;302:957:93;8812:12:85;:30;;;8789:3;8808:110;;8789:3;302:957:93;;8756:13:85;;8808:110;8868:8;;;;;;;;:::i;:::-;302:957:93;;8894:9:85;8808:110;;8812:30;8828:8;;;;;;:::i;:::-;302:957:93;8828:14:85;8812:30;;6391:2115;;;;302:957:93;;;;6714:26:85;302:957:93;6714:26:85;;302:957:93;;;6714:26:85;;;302:957:93;;6714:6:85;302:957:93;6714:6:85;302:957:93;6714:6:85;302:957:93;6714:26:85;;;;;;;302:957:93;6714:26:85;;;6391:2115;6756:13;;;;;302:957:93;6751:1710:85;6794:3;302:957:93;;;;;;;;;;6771:21:85;;;;;6912:28;;;;;;;;;:::i;:::-;6978;;;;;;;:::i;:::-;7021:23;;;7135:32;7170:33;7171:32;7135;;;;;:::i;:::-;302:957:93;7171:32:85;;:::i;7170:33::-;-1:-1:-1;7171:32:85;;;4399:404;7223:39;4473:312;7223:39;;;7528:35;:23;7223:39;302:957:93;7478:28:85;4473:312;7223:39;7280:40;7429:27;;;;;;:::i;:::-;302:957:93;;7478:28:85;;:::i;:::-;302:957:93;;7528:23:85;;:::i;:::-;302:957:93;7528:35:85;:::i;:::-;302:957:93;;;;;;4473:312:85;4521:51;4473:312;;;;302:957:93;4473:312:85;;302:957:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4473:312:85;;-1:-1:-1;;4473:312:85;;;;;;:::i;:::-;302:957:93;4443:7:85;302:957:93;4399:404:85;:::i;:::-;302:957:93;;;;4371:473:85;;302:957:93;;;;8151:30:85;4371:473;302:957:93;8110:27:85;4371:473;;8223:23;4371:473;;;;302:957:93;7131:922:85;8110:27;:::i;:::-;302:957:93;8151:30:85;;:::i;:::-;302:957:93;8223:23:85;:::i;:::-;8195:51;;;;;:::i;:::-;302:957:93;;;;;;;;;;;;;;;;;;;;;6791:1:85;8195:51;;;;;:::i;:::-;302:957:93;8260:190:85;8290:160;;;;;;:::i;:::-;8260:190;;;:::i;:::-;302:957:93;;6756:13:85;;;;;;;7131:922;7648:39;;;;;;7705:40;7855:28;;;;:::i;:::-;302:957:93;;;7905:27:85;;;;;:::i;:::-;302:957:93;;;7956:23:85;;;;:::i;:::-;302:957:93;7955:24:85;;;:::i;:::-;7954:38;;;:::i;:::-;302:957:93;;5230:52:85;302:957:93;5182:314:85;;;;;;;302:957:93;;;;;5182:314:85;;302:957:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;302:957:93;;;;;;;;5182:314:85;;302:957:93;5182:314:85;302:957:93;;5182:314:85;:::i;:::-;5108:406;;302:957:93;5152:7:85;302:957:93;5108:406:85;:::i;6771:21::-;;;;;;;;;6391:2115;:::o;6714:26::-;;;;;;302:957:93;6714:26:85;;;;;;:::i;:::-;;;302:957:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;6714:26:85;;;;;;;;302:957:93;;;;;;;;;;;;;;;;;;;;6714:26:85;302:957:93;;;;;;;;;2918:606:85;;;;302:957:93;;;3207:251:85;;;3255:51;3207:251;;;;302:957:93;;;;;;3207:251:85;;;302:957:93;;;;;;;;;;;;;;;;;;-1:-1:-1;302:957:93;;;;;;;;;;3133:343:85;302:957:93;;;;3207:251:85;302:957:93;;;;;;-1:-1:-1;302:957:93;;;;;;;;;;;;3207:251:85;;;;;;:::i;:::-;3177:7;302:957:93;3133:343:85;:::i;:::-;302:957:93;;;;3105:412:85;;302:957:93;;;;3105:412:85;302:957:93;2918:606:85;:::o;302:957:93:-;;;;;;;;;;;;;;;;;34380:314:71;34573:16;34557:33;;34553:105;;34380:314;:::o;34553:105::-;34613:34;;;;302:957:93;;34613:34:71;;5783:602:85;;;;6076:18;302:957:93;;;;-1:-1:-1;;302:957:93;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;6076:18:85;:::i;:::-;302:957:93;6109:10:85;;;6105:49;;6267:64;6207:9;6164:70;302:957:93;6207:9:85;;:26;;;;;;;;6164:70;;:::i;:::-;302:957:93;6267:64:85;:::i;:::-;6350:28;;;;5783:602;:::o;6350:28::-;6371:7;;;:::i;:::-;5783:602;:::o;6207:26::-;6227:6;;;:::i;:::-;6207:26;;;6105:49;6135:8;;;;;302:957:93;6135:8:85;:::o;17171:193:71:-;17258:1;17250:9;;17246:81;;17171:193;:::o;17246:81::-;17282:34;17258:1;17282:34;;302:957:93;;17258:1:71;17282:34;1336:351:37;1463:1;302:957:93;;1443:21:37;1439:82;;1530:151;;;1336:351;:::o;1439:82::-;1487:23;;;1463:1;1487:23;;1741:504;302:957:93;;1881:21:37;:17;;2008:160;;;;;;4437:582:61;;4609:8;;-1:-1:-1;302:957:93;;5690:21:61;:17;;5815:105;;;;;;5686:301;5957:19;5710:1;5957:19;;5710:1;5957:19;4605:408;302:957:93;;4857:22:61;:49;;;4605:408;4853:119;;4985:17;;:::o;4853:119::-;302:957:93;4933:24:61;;4878:1;4933:24;302:957:93;4933:24:61;302:957:93;;4878:1:61;4933:24;4857:49;4883:18;;;:23;4857:49;;303:324:75;;430:4;408:60;;;;;302:957:93;;;;408:60:75;;;;302:957:93;408:60:75;;302:957:93;408:60:75;302:957:93;;408:60:75;;;302:957:93;;;;;;;;;;;:::i;:::-;408:60:75;430:4;;;408:60;;;;;;303:324;-1:-1:-1;404:217:75;;523:98;;:::i;:::-;720:36:37;787:15;302:957:93;720:36:37;;;:::i;:::-;302:957:93;770:32:37;766:185;;302:957:93;;1013:179:37;1209:30;-1:-1:-1;;1013:179:37;;;;408:60:75;1013:179:37;;;1209:30;;;;;;;302:957:93;;;;;;;1209:30:37;;302:957:93;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;1209:30:37;302:957:93;;;;;;;;;;565:45:75;:::o;302:957:93:-;;;;;;;;766:185:37;930:9;;:::i;404:217:75:-;302:957:93;;;483:28:75;;;302:957:93;408:60:75;483:28;;302:957:93;;;;;;;;;;;483:28:75;408:60;302:957:93;;;;;;;;;;408:60:75;;;;"},"methodIdentifiers":{"calculateAddLiquidityUnbalancedPriceImpact(address,uint256[],address)":"48406a54","callAndRevertHook(address,bytes)":"a7699638","maxNegativeIndex(int256[])":"01ef39ee","minPositiveIndex(int256[])":"0d4277d1","queryAddLiquidityUnbalancedForTokenDeltas(address,uint256,int256[],address)":"e3a50d82","zeroOutDeltas(address,int256[],int256[],address)":"3b064ca3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IRouter\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"calculateAddLiquidityUnbalancedPriceImpact\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"priceImpact\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callAndRevertHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"array\",\"type\":\"int256[]\"}],\"name\":\"maxNegativeIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"array\",\"type\":\"int256[]\"}],\"name\":\"minPositiveIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"int256[]\",\"name\":\"deltas\",\"type\":\"int256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"queryAddLiquidityUnbalancedForTokenDeltas\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"deltaBPT\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"int256[]\",\"name\":\"deltas\",\"type\":\"int256[]\"},{\"internalType\":\"int256[]\",\"name\":\"deltaBPTs\",\"type\":\"int256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"zeroOutDeltas\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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.\"}],\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/PriceImpactHelperMock.sol\":\"PriceImpactHelperMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":{\"keccak256\":\"0x5a0ee9f30170b2df308aa992f331d2070f389c1c7261b166ad8dcf058b079c00\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://89a654106d847701efa4cffbe73d98aea2bc0f9a041a28b4762f127fce48eba3\",\"dweb:/ipfs/QmVZKnQqxmydspv6P6e4137QHiNnhP6J7fzWh9XFuJj6At\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouterQueries.sol\":{\"keccak256\":\"0x7a46d0e972ea96fe2190b4975d71fa033fbc65cb596f3c584a47b37b2b58ade1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://56e07234b208282d0751b31eefbed6d48cfacddd9c2dbad7f4fbc55789bdc0ca\",\"dweb:/ipfs/QmTRLGeyZNzKY3S4JUWwDshCMfnY6WMFq2BGD5BozWFAnC\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"contracts/CallAndRevert.sol\":{\"keccak256\":\"0xe0f09e833265592b398c7607db658e3541b800f66c9536ee129ae6863e4185f2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bc7dd31dd95f738debb5ca8c8b80e90384c1d8b72dc70e02dd7ae22e7c77f337\",\"dweb:/ipfs/QmNaJXyazNRD1fbqs6QJSwB3VWKu3ZjHqecMqKg57UeMuS\"]},\"contracts/PriceImpactHelper.sol\":{\"keccak256\":\"0xdba22a15b68c0631a6da1de1a5e2e568339959f29950046b8ca881f7ac5e301f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5973227783a748f09558f2b5943d66128636b63936d847719c33d1158b06ce86\",\"dweb:/ipfs/QmVke3xsrpFf9H28dyrTaYhxbPU4aGywtUf6NaKzgRAb4v\"]},\"contracts/test/PriceImpactHelperMock.sol\":{\"keccak256\":\"0xe26253f71789842fffe3d5e48f5fb13a7aed480f8027c1084a0601b02d9fb3f9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70f67c49efb5abf6e726635b6e797a7b4e335d4cd9650affce44c19305511566\",\"dweb:/ipfs/QmU2XCzDpMjBrhdaQJ6aAvqPJ2xQbomTpJGEmG6BpDAKrE\"]}},\"version\":1}"}},"contracts/test/ProtocolFeeBurnerMock.sol":{"ProtocolFeeBurnerMock":{"abi":[{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ratio","type":"uint256"}],"name":"setTokenRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setTransferFromEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234602c57670de0b6b3a76400005f55600160ff198154161760015561042490816100318239f35b5f80fdfe6080604081815260049081361015610015575f80fd5b5f925f3560e01c9182637d341ad614610382578263de557a321461007c57505063e38e91f914610043575f80fd5b346100785760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100785735815580f35b5080fd5b909150346102735760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102735782359073ffffffffffffffffffffffffffffffffffffffff8083168093036102735760249182359582871695868803610273576044359460643598858a16809a03610273576084359260a4359687168097036102735760c435421161035b5760ff60015416610277575b5050883b15610273575f808a60448751809481937f40c10f190000000000000000000000000000000000000000000000000000000083528b8a8401528c888401525af1801561026957610222575b5089548087029087820414871517156101f757670de0b6b3a76400009004928284106101c557505082519485525060208401528201527f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d90606090a480f35b928a92918a6064957f2f785e460000000000000000000000000000000000000000000000000000000086525252604452fd5b50896011847f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b90995067ffffffffffffffff811161023e5783525f985f610166565b896041847f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b85513d5f823e3d90fd5b5f80fd5b60208101907f23b872dd00000000000000000000000000000000000000000000000000000000825233848201523060448201528860648201526064815260a0810181811067ffffffffffffffff821117610330578752516020925f929083905af115610326575f513d61031d5750873b155b6102f4575f80610118565b87837f5274afe7000000000000000000000000000000000000000000000000000000005f52525ffd5b600114156102e9565b83513d5f823e3d90fd5b846041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b847fe08b8af0000000000000000000000000000000000000000000000000000000005f525ffd5b83346102735760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027357358015158091036102735760ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00600154169116176001555f80f3fea264697066735822122017388e506030eb1c0482f93d9b1ae15973d16fee6ae35bff834e94d3e594c05e64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x2C JUMPI PUSH8 0xDE0B6B3A7640000 PUSH0 SSTORE PUSH1 0x1 PUSH1 0xFF NOT DUP2 SLOAD AND OR PUSH1 0x1 SSTORE PUSH2 0x424 SWAP1 DUP2 PUSH2 0x31 DUP3 CODECOPY RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP3 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x7D341AD6 EQ PUSH2 0x382 JUMPI DUP3 PUSH4 0xDE557A32 EQ PUSH2 0x7C JUMPI POP POP PUSH4 0xE38E91F9 EQ PUSH2 0x43 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x78 JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x78 JUMPI CALLDATALOAD DUP2 SSTORE DUP1 RETURN JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0x273 JUMPI PUSH1 0xE0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x273 JUMPI DUP3 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP1 SWAP4 SUB PUSH2 0x273 JUMPI PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD SWAP6 DUP3 DUP8 AND SWAP6 DUP7 DUP9 SUB PUSH2 0x273 JUMPI PUSH1 0x44 CALLDATALOAD SWAP5 PUSH1 0x64 CALLDATALOAD SWAP9 DUP6 DUP11 AND DUP1 SWAP11 SUB PUSH2 0x273 JUMPI PUSH1 0x84 CALLDATALOAD SWAP3 PUSH1 0xA4 CALLDATALOAD SWAP7 DUP8 AND DUP1 SWAP8 SUB PUSH2 0x273 JUMPI PUSH1 0xC4 CALLDATALOAD TIMESTAMP GT PUSH2 0x35B JUMPI PUSH1 0xFF PUSH1 0x1 SLOAD AND PUSH2 0x277 JUMPI JUMPDEST POP POP DUP9 EXTCODESIZE ISZERO PUSH2 0x273 JUMPI PUSH0 DUP1 DUP11 PUSH1 0x44 DUP8 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x40C10F1900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP12 DUP11 DUP5 ADD MSTORE DUP13 DUP9 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x269 JUMPI PUSH2 0x222 JUMPI JUMPDEST POP DUP10 SLOAD DUP1 DUP8 MUL SWAP1 DUP8 DUP3 DIV EQ DUP8 ISZERO OR ISZERO PUSH2 0x1F7 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP3 DUP3 DUP5 LT PUSH2 0x1C5 JUMPI POP POP DUP3 MLOAD SWAP5 DUP6 MSTORE POP PUSH1 0x20 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP1 PUSH1 0x60 SWAP1 LOG4 DUP1 RETURN JUMPDEST SWAP3 DUP11 SWAP3 SWAP2 DUP11 PUSH1 0x64 SWAP6 PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE MSTORE MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST POP DUP10 PUSH1 0x11 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 SWAP10 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x23E JUMPI DUP4 MSTORE PUSH0 SWAP9 PUSH0 PUSH2 0x166 JUMP JUMPDEST DUP10 PUSH1 0x41 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE CALLER DUP5 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE DUP9 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x330 JUMPI DUP8 MSTORE MLOAD PUSH1 0x20 SWAP3 PUSH0 SWAP3 SWAP1 DUP4 SWAP1 GAS CALL ISZERO PUSH2 0x326 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x31D JUMPI POP DUP8 EXTCODESIZE ISZERO JUMPDEST PUSH2 0x2F4 JUMPI PUSH0 DUP1 PUSH2 0x118 JUMP JUMPDEST DUP8 DUP4 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x2E9 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x273 JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x273 JUMPI CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x273 JUMPI PUSH1 0xFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x1 SLOAD AND SWAP2 AND OR PUSH1 0x1 SSTORE PUSH0 DUP1 RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 OR CODESIZE DUP15 POP PUSH1 0x30 0xEB SHR DIV DUP3 0xF9 RETURNDATASIZE SWAP12 BYTE 0xE1 MSIZE PUSH20 0xD16FEE6AE35BFF834E94D3E594C05E64736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"544:1496:94:-:0;;;;;;;465:4:39;700:14:94;465:4:39;748::94;465::39;;;;;;748::94;465::39;544:1496:94;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604081815260049081361015610015575f80fd5b5f925f3560e01c9182637d341ad614610382578263de557a321461007c57505063e38e91f914610043575f80fd5b346100785760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100785735815580f35b5080fd5b909150346102735760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102735782359073ffffffffffffffffffffffffffffffffffffffff8083168093036102735760249182359582871695868803610273576044359460643598858a16809a03610273576084359260a4359687168097036102735760c435421161035b5760ff60015416610277575b5050883b15610273575f808a60448751809481937f40c10f190000000000000000000000000000000000000000000000000000000083528b8a8401528c888401525af1801561026957610222575b5089548087029087820414871517156101f757670de0b6b3a76400009004928284106101c557505082519485525060208401528201527f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d90606090a480f35b928a92918a6064957f2f785e460000000000000000000000000000000000000000000000000000000086525252604452fd5b50896011847f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b90995067ffffffffffffffff811161023e5783525f985f610166565b896041847f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b85513d5f823e3d90fd5b5f80fd5b60208101907f23b872dd00000000000000000000000000000000000000000000000000000000825233848201523060448201528860648201526064815260a0810181811067ffffffffffffffff821117610330578752516020925f929083905af115610326575f513d61031d5750873b155b6102f4575f80610118565b87837f5274afe7000000000000000000000000000000000000000000000000000000005f52525ffd5b600114156102e9565b83513d5f823e3d90fd5b846041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b847fe08b8af0000000000000000000000000000000000000000000000000000000005f525ffd5b83346102735760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027357358015158091036102735760ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00600154169116176001555f80f3fea264697066735822122017388e506030eb1c0482f93d9b1ae15973d16fee6ae35bff834e94d3e594c05e64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP3 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x7D341AD6 EQ PUSH2 0x382 JUMPI DUP3 PUSH4 0xDE557A32 EQ PUSH2 0x7C JUMPI POP POP PUSH4 0xE38E91F9 EQ PUSH2 0x43 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x78 JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x78 JUMPI CALLDATALOAD DUP2 SSTORE DUP1 RETURN JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0x273 JUMPI PUSH1 0xE0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x273 JUMPI DUP3 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP1 SWAP4 SUB PUSH2 0x273 JUMPI PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD SWAP6 DUP3 DUP8 AND SWAP6 DUP7 DUP9 SUB PUSH2 0x273 JUMPI PUSH1 0x44 CALLDATALOAD SWAP5 PUSH1 0x64 CALLDATALOAD SWAP9 DUP6 DUP11 AND DUP1 SWAP11 SUB PUSH2 0x273 JUMPI PUSH1 0x84 CALLDATALOAD SWAP3 PUSH1 0xA4 CALLDATALOAD SWAP7 DUP8 AND DUP1 SWAP8 SUB PUSH2 0x273 JUMPI PUSH1 0xC4 CALLDATALOAD TIMESTAMP GT PUSH2 0x35B JUMPI PUSH1 0xFF PUSH1 0x1 SLOAD AND PUSH2 0x277 JUMPI JUMPDEST POP POP DUP9 EXTCODESIZE ISZERO PUSH2 0x273 JUMPI PUSH0 DUP1 DUP11 PUSH1 0x44 DUP8 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x40C10F1900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP12 DUP11 DUP5 ADD MSTORE DUP13 DUP9 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x269 JUMPI PUSH2 0x222 JUMPI JUMPDEST POP DUP10 SLOAD DUP1 DUP8 MUL SWAP1 DUP8 DUP3 DIV EQ DUP8 ISZERO OR ISZERO PUSH2 0x1F7 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP3 DUP3 DUP5 LT PUSH2 0x1C5 JUMPI POP POP DUP3 MLOAD SWAP5 DUP6 MSTORE POP PUSH1 0x20 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP1 PUSH1 0x60 SWAP1 LOG4 DUP1 RETURN JUMPDEST SWAP3 DUP11 SWAP3 SWAP2 DUP11 PUSH1 0x64 SWAP6 PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE MSTORE MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST POP DUP10 PUSH1 0x11 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 SWAP10 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x23E JUMPI DUP4 MSTORE PUSH0 SWAP9 PUSH0 PUSH2 0x166 JUMP JUMPDEST DUP10 PUSH1 0x41 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE CALLER DUP5 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE DUP9 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x330 JUMPI DUP8 MSTORE MLOAD PUSH1 0x20 SWAP3 PUSH0 SWAP3 SWAP1 DUP4 SWAP1 GAS CALL ISZERO PUSH2 0x326 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x31D JUMPI POP DUP8 EXTCODESIZE ISZERO JUMPDEST PUSH2 0x2F4 JUMPI PUSH0 DUP1 PUSH2 0x118 JUMP JUMPDEST DUP8 DUP4 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x2E9 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x273 JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x273 JUMPI CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x273 JUMPI PUSH1 0xFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x1 SLOAD AND SWAP2 AND OR PUSH1 0x1 SSTORE PUSH0 DUP1 RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 OR CODESIZE DUP15 POP PUSH1 0x30 0xEB SHR DIV DUP3 0xF9 RETURNDATASIZE SWAP12 BYTE 0xE1 MSIZE PUSH20 0xD16FEE6AE35BFF834E94D3E594C05E64736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"544:1496:94:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1038:15;:26;1034:78;;544:1496;;;;1122:125;;544:1496;1341:75;;;;;;;544:1496;;;;;;1341:75;;;;544:1496;1341:75;;;;;;544:1496;;;;;;1341:75;;;;;;;;544:1496;;;;;;;;;;;;;;;;;;465:4:39;;;1511:32:94;;;;1507:133;;-1:-1:-1;;544:1496:94;;;;;-1:-1:-1;544:1496:94;;;;;;;1736:99;;544:1496;;1736:99;544:1496;;1507:133;1566:63;;;;;544:1496;1566:63;;;;544:1496;;;;1566:63;544:1496;;;;;;;;;;1341:75;544:1496;;;;;;;;;;;1341:75;;;;544:1496;;;;;;;;;;1341:75;544:1496;;;;;;;;;1341:75;544:1496;;;1122:125;544:1496;1745:53:60;;;544:1496:94;1745:53:60;;1187:10:94;1745:53:60;;;544:1496:94;1207:4;544:1496;;;;;;;;;;1745:53:60;;544:1496:94;;;;;;;;;;;;;;8507:421:60;544:1496:94;;;;;;;8507:421:60;;;;;544:1496:94;8507:421:60;;8942:15;;8960:26;;;:31;8942:68;8938:146;;1122:125:94;;;;8938:146:60;9033:40;;;544:1496:94;9033:40:60;544:1496:94;;9033:40:60;8942:68;544:1496:94;8994:16:60;;8942:68;;8507:421;;;;544:1496:94;8507:421:60;;;;;544:1496:94;;;;;;;;;;1034:78;1087:14;;544:1496;1087:14;544:1496;1087:14;544:1496;;;;;;;;;;;;;;;;;;;;;;;2002:29;544:1496;;;;;2002:29;544:1496;;;"},"methodIdentifiers":{"burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","setTokenRatio(uint256)":"e38e91f9","setTransferFromEnabled(bool)":"7d341ad6"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ratio\",\"type\":\"uint256\"}],\"name\":\"setTokenRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setTransferFromEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/ProtocolFeeBurnerMock.sol\":\"ProtocolFeeBurnerMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol\":{\"keccak256\":\"0x6c1d91dd0f44221f140ab22e9e981ef1f9028018428f0c9cb41577e757e1b4b8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c42dce6530450a6476970b6bd0aa8feec8b12c5b3837702f94395ab3157cede7\",\"dweb:/ipfs/QmYb3V9wcMTjdN1XwNdQM4ZHG9EcFvKLZNKDFRyraBW5DQ\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x86b7b71a6aedefdad89b607378eeab1dcc5389b9ea7d17346d08af01d7190994\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1dc2db8d94a21eac8efe03adf574c419b08536409b416057a2b5b95cb772c43c\",\"dweb:/ipfs/QmZfqJCKVU1ScuX2A7s8WZdQEaikwJbDH5JBrBdKTUT4Gu\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/test/ProtocolFeeBurnerMock.sol\":{\"keccak256\":\"0x7cfd3dfbc1895894ba1d79d4f0d9846b23885d73efaa632793a0492ad87438a3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d7455c59d8ad21fbf51407692f502313802d5cb0fdd96b3542b5f58c865781bf\",\"dweb:/ipfs/QmVe1Zuor843H3SgX3kBNHnJUENHJU3jK3eUfVAnPBbtsD\"]}},\"version\":1}"}},"contracts/test/VaultMockForFeeSweeper.sol":{"VaultMockForFeeSweeper":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"addOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"owners","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"removeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234602b57335f525f60205260405f20600160ff1982541617905561059790816100308239f35b5f80fdfe60806040908082526004361015610014575f80fd5b5f3560e01c908163022914a71461044c57508063173825d9146103d45780637065cb481461035957806385f2dbd4146102bd5780638f4ab9ca1461033e5780639be2a884146102d7578063aaabadc5146102bd578063b53a70b2146100d35763c6a92e1614610081575f80fd5b346100cf57806003193601126100cf576020906100c661009f6104b4565b73ffffffffffffffffffffffffffffffffffffffff165f525f60205260ff60405f20541690565b90519015158152f35b5f80fd5b50346100cf5760606003193601126100cf576100ed610491565b506100f66104b4565b906044359173ffffffffffffffffffffffffffffffffffffffff808416938481036100cf57335f526020925f845261013360ff865f2054166104d7565b84517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015284816024818a5afa9081156102b3575f91610251575b50855193858501927fa9059cbb0000000000000000000000000000000000000000000000000000000084521660248501526044840152604483526080830183811067ffffffffffffffff821117610224575f938491875251925af11561021b57505f513d6102125750803b155b6101e757005b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600114156101e1565b513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b9050843d86116102ac575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116820182811067ffffffffffffffff82111761022457869183918952810103126100cf57515f610174565b503d61025c565b86513d5f823e3d90fd5b50346100cf575f6003193601126100cf5760209051308152f35b50346100cf5760606003193601126100cf576102f16104b4565b9060443573ffffffffffffffffffffffffffffffffffffffff8116036100cf576100c660209273ffffffffffffffffffffffffffffffffffffffff165f525f60205260ff60405f20541690565b346100cf5760206003193601126100cf57610357610491565b005b50346100cf5760206003193601126100cf5773ffffffffffffffffffffffffffffffffffffffff610388610491565b335f525f60205261039e60ff845f2054166104d7565b165f525f6020525f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790555f80f35b50346100cf5760206003193601126100cf5773ffffffffffffffffffffffffffffffffffffffff610403610491565b335f525f60205261041960ff845f2054166104d7565b165f525f6020525f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690555f80f35b9050346100cf5760206003193601126100cf5760ff60209273ffffffffffffffffffffffffffffffffffffffff610481610491565b165f525f84525f20541615158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100cf57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100cf57565b156104de57565b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f5661756c744d6f636b466f72466565537765657065723a204e6f7420616e206f60448201527f776e6572000000000000000000000000000000000000000000000000000000006064820152fdfea2646970667358221220a41a3f95fcc7752ceb33f3d50027f614411ea4da2e3990e0b4f62173b674999964736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x2B JUMPI CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH1 0xFF NOT DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0x597 SWAP1 DUP2 PUSH2 0x30 DUP3 CODECOPY RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x22914A7 EQ PUSH2 0x44C JUMPI POP DUP1 PUSH4 0x173825D9 EQ PUSH2 0x3D4 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x359 JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x2BD JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x33E JUMPI DUP1 PUSH4 0x9BE2A884 EQ PUSH2 0x2D7 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x2BD JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xD3 JUMPI PUSH4 0xC6A92E16 EQ PUSH2 0x81 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xCF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0x20 SWAP1 PUSH2 0xC6 PUSH2 0x9F PUSH2 0x4B4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0xED PUSH2 0x491 JUMP JUMPDEST POP PUSH2 0xF6 PUSH2 0x4B4 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND SWAP4 DUP5 DUP2 SUB PUSH2 0xCF JUMPI CALLER PUSH0 MSTORE PUSH1 0x20 SWAP3 PUSH0 DUP5 MSTORE PUSH2 0x133 PUSH1 0xFF DUP7 PUSH0 KECCAK256 SLOAD AND PUSH2 0x4D7 JUMP JUMPDEST DUP5 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2B3 JUMPI PUSH0 SWAP2 PUSH2 0x251 JUMPI JUMPDEST POP DUP6 MLOAD SWAP4 DUP6 DUP6 ADD SWAP3 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x44 DUP4 MSTORE PUSH1 0x80 DUP4 ADD DUP4 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x224 JUMPI PUSH0 SWAP4 DUP5 SWAP2 DUP8 MSTORE MLOAD SWAP3 GAS CALL ISZERO PUSH2 0x21B JUMPI POP PUSH0 MLOAD RETURNDATASIZE PUSH2 0x212 JUMPI POP DUP1 EXTCODESIZE ISZERO JUMPDEST PUSH2 0x1E7 JUMPI STOP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x1E1 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x2AC JUMPI JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x224 JUMPI DUP7 SWAP2 DUP4 SWAP2 DUP10 MSTORE DUP2 ADD SUB SLT PUSH2 0xCF JUMPI MLOAD PUSH0 PUSH2 0x174 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x25C JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0x20 SWAP1 MLOAD ADDRESS DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0x2F1 PUSH2 0x4B4 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND SUB PUSH2 0xCF JUMPI PUSH2 0xC6 PUSH1 0x20 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0x357 PUSH2 0x491 JUMP JUMPDEST STOP JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x388 PUSH2 0x491 JUMP JUMPDEST CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x39E PUSH1 0xFF DUP5 PUSH0 KECCAK256 SLOAD AND PUSH2 0x4D7 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x403 PUSH2 0x491 JUMP JUMPDEST CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x419 PUSH1 0xFF DUP5 PUSH0 KECCAK256 SLOAD AND PUSH2 0x4D7 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0xFF PUSH1 0x20 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x481 PUSH2 0x491 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 DUP5 MSTORE PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xCF JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xCF JUMPI JUMP JUMPDEST ISZERO PUSH2 0x4DE JUMPI JUMP JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x5661756C744D6F636B466F72466565537765657065723A204E6F7420616E206F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x776E657200000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG4 BYTE EXTCODEHASH SWAP6 0xFC 0xC7 PUSH22 0x2CEB33F3D50027F614411EA4DA2E3990E0B4F62173B6 PUSH21 0x999964736F6C634300081B00330000000000000000 ","sourceMap":"437:1297:95:-:0;;;;;;;599:10;592:6;437:1297;592:6;437:1297;;;592:6;437:1297;613:4;437:1297;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":1204,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_3916":{"entryPoint":1169,"id":null,"parameterSlots":0,"returnSlots":1},"fun_canPerform":{"entryPoint":null,"id":24412,"parameterSlots":1,"returnSlots":1},"require_helper_stringliteral_6a76":{"entryPoint":1239,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"60806040908082526004361015610014575f80fd5b5f3560e01c908163022914a71461044c57508063173825d9146103d45780637065cb481461035957806385f2dbd4146102bd5780638f4ab9ca1461033e5780639be2a884146102d7578063aaabadc5146102bd578063b53a70b2146100d35763c6a92e1614610081575f80fd5b346100cf57806003193601126100cf576020906100c661009f6104b4565b73ffffffffffffffffffffffffffffffffffffffff165f525f60205260ff60405f20541690565b90519015158152f35b5f80fd5b50346100cf5760606003193601126100cf576100ed610491565b506100f66104b4565b906044359173ffffffffffffffffffffffffffffffffffffffff808416938481036100cf57335f526020925f845261013360ff865f2054166104d7565b84517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015284816024818a5afa9081156102b3575f91610251575b50855193858501927fa9059cbb0000000000000000000000000000000000000000000000000000000084521660248501526044840152604483526080830183811067ffffffffffffffff821117610224575f938491875251925af11561021b57505f513d6102125750803b155b6101e757005b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600114156101e1565b513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b9050843d86116102ac575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116820182811067ffffffffffffffff82111761022457869183918952810103126100cf57515f610174565b503d61025c565b86513d5f823e3d90fd5b50346100cf575f6003193601126100cf5760209051308152f35b50346100cf5760606003193601126100cf576102f16104b4565b9060443573ffffffffffffffffffffffffffffffffffffffff8116036100cf576100c660209273ffffffffffffffffffffffffffffffffffffffff165f525f60205260ff60405f20541690565b346100cf5760206003193601126100cf57610357610491565b005b50346100cf5760206003193601126100cf5773ffffffffffffffffffffffffffffffffffffffff610388610491565b335f525f60205261039e60ff845f2054166104d7565b165f525f6020525f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790555f80f35b50346100cf5760206003193601126100cf5773ffffffffffffffffffffffffffffffffffffffff610403610491565b335f525f60205261041960ff845f2054166104d7565b165f525f6020525f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690555f80f35b9050346100cf5760206003193601126100cf5760ff60209273ffffffffffffffffffffffffffffffffffffffff610481610491565b165f525f84525f20541615158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100cf57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100cf57565b156104de57565b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f5661756c744d6f636b466f72466565537765657065723a204e6f7420616e206f60448201527f776e6572000000000000000000000000000000000000000000000000000000006064820152fdfea2646970667358221220a41a3f95fcc7752ceb33f3d50027f614411ea4da2e3990e0b4f62173b674999964736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x22914A7 EQ PUSH2 0x44C JUMPI POP DUP1 PUSH4 0x173825D9 EQ PUSH2 0x3D4 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x359 JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x2BD JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x33E JUMPI DUP1 PUSH4 0x9BE2A884 EQ PUSH2 0x2D7 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x2BD JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xD3 JUMPI PUSH4 0xC6A92E16 EQ PUSH2 0x81 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xCF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0x20 SWAP1 PUSH2 0xC6 PUSH2 0x9F PUSH2 0x4B4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0xED PUSH2 0x491 JUMP JUMPDEST POP PUSH2 0xF6 PUSH2 0x4B4 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND SWAP4 DUP5 DUP2 SUB PUSH2 0xCF JUMPI CALLER PUSH0 MSTORE PUSH1 0x20 SWAP3 PUSH0 DUP5 MSTORE PUSH2 0x133 PUSH1 0xFF DUP7 PUSH0 KECCAK256 SLOAD AND PUSH2 0x4D7 JUMP JUMPDEST DUP5 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2B3 JUMPI PUSH0 SWAP2 PUSH2 0x251 JUMPI JUMPDEST POP DUP6 MLOAD SWAP4 DUP6 DUP6 ADD SWAP3 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x44 DUP4 MSTORE PUSH1 0x80 DUP4 ADD DUP4 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x224 JUMPI PUSH0 SWAP4 DUP5 SWAP2 DUP8 MSTORE MLOAD SWAP3 GAS CALL ISZERO PUSH2 0x21B JUMPI POP PUSH0 MLOAD RETURNDATASIZE PUSH2 0x212 JUMPI POP DUP1 EXTCODESIZE ISZERO JUMPDEST PUSH2 0x1E7 JUMPI STOP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x1E1 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x2AC JUMPI JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x224 JUMPI DUP7 SWAP2 DUP4 SWAP2 DUP10 MSTORE DUP2 ADD SUB SLT PUSH2 0xCF JUMPI MLOAD PUSH0 PUSH2 0x174 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x25C JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0x20 SWAP1 MLOAD ADDRESS DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0x2F1 PUSH2 0x4B4 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND SUB PUSH2 0xCF JUMPI PUSH2 0xC6 PUSH1 0x20 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0x357 PUSH2 0x491 JUMP JUMPDEST STOP JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x388 PUSH2 0x491 JUMP JUMPDEST CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x39E PUSH1 0xFF DUP5 PUSH0 KECCAK256 SLOAD AND PUSH2 0x4D7 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x403 PUSH2 0x491 JUMP JUMPDEST CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x419 PUSH1 0xFF DUP5 PUSH0 KECCAK256 SLOAD AND PUSH2 0x4D7 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0xFF PUSH1 0x20 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x481 PUSH2 0x491 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 DUP5 MSTORE PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xCF JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xCF JUMPI JUMP JUMPDEST ISZERO PUSH2 0x4DE JUMPI JUMP JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x5661756C744D6F636B466F72466565537765657065723A204E6F7420616E206F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x776E657200000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG4 BYTE EXTCODEHASH SWAP6 0xFC 0xC7 PUSH22 0x2CEB33F3D50027F614411EA4DA2E3990E0B4F62173B6 PUSH21 0x999964736F6C634300081B00330000000000000000 ","sourceMap":"437:1297:95:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:95;;;;;;;;;;:::i;:::-;;;981:6;437:1297;981:6;437:1297;;;;981:6;437:1297;;;880:123;;437:1297;;;;;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:95;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;676:10;437:1297;;;;;;;661:67;437:1297;;;;;;661:67;:::i;:::-;437:1297;;;1694:30;;1718:4;437:1297;1694:30;;437:1297;1694:30;;437:1297;1694:30;;;;;;;;;437:1297;1694:30;;;437:1297;;;;1328:43:60;;;;;437:1297:95;1328:43:60;;437:1297:95;;1328:43:60;;437:1297:95;;;;;;1328:43:60;;437:1297:95;;;;;;;;;;;;;;;;;;8507:421:60;;;;;;;-1:-1:-1;437:1297:95;8507:421:60;;8942:15;;8960:26;;;:31;8942:68;8938:146;;437:1297:95;8938:146:60;9033:40;437:1297:95;9033:40:60;437:1297:95;;;;9033:40:60;8942:68;9009:1;8994:16;;8942:68;;8507:421;;;437:1297:95;8507:421:60;;;;;437:1297:95;;;;;;;;;;1694:30;;;;;;;;;;437:1297;;;;;;;;;;;;;;;;;;;;;;1694:30;;437:1297;;;;;1694:30;;;;;;;;;437:1297;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:95;;;;;;;;861:4;437:1297;;;;;;;;;-1:-1:-1;;437:1297:95;;;;;;;:::i;:::-;;;;;;;;;;;;;;;981:6;437:1297;981:6;437:1297;;;;981:6;437:1297;;;880:123;;437:1297;;;;;-1:-1:-1;;437:1297:95;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;437:1297:95;;;;;;;;:::i;:::-;676:10;437:1297;;;;;661:67;437:1297;;;;;;661:67;:::i;:::-;437:1297;;;;;;;;1209:4;437:1297;;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:95;;;;;;;;:::i;:::-;676:10;437:1297;;;;;661:67;437:1297;;;;;;661:67;:::i;:::-;437:1297;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:95;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"methodIdentifiers":{"addOwner(address)":"7065cb48","canPerform(bytes32,address)":"c6a92e16","canPerform(bytes32,address,address)":"9be2a884","collectAggregateFees(address)":"8f4ab9ca","getAuthorizer()":"aaabadc5","getProtocolFeeController()":"85f2dbd4","owners(address)":"022914a7","removeOwner(address)":"173825d9","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"name\":\"addOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"owners\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"name\":\"removeOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/VaultMockForFeeSweeper.sol\":\"VaultMockForFeeSweeper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/test/VaultMockForFeeSweeper.sol\":{\"keccak256\":\"0x48c7112d31adaf06bbbe4d1959227d5919ff86f21d3bffc0196d5cd2f7fdcf26\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a1791c0f942abe86b2fd13977412f3fd021cac29922b54482e59d840479fc42f\",\"dweb:/ipfs/QmYLEbg3SgTUDBQ3ZktT2exGbpk7MSBsNpCpAdvqfoTcU4\"]}},\"version\":1}"}},"contracts/utils/HyperSpotPricePrecompile.sol":{"HyperSpotPricePrecompile":{"abi":[{"inputs":[],"name":"SpotPriceIsZero","type":"error"},{"inputs":[],"name":"SpotPricePrecompileFailed","type":"error"},{"inputs":[],"name":"SPOT_PRICE_PRECOMPILE_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234601757608f9081601c823930815050f35b5f80fdfe60808060405260043610156011575f80fd5b5f3560e01c63ef89de08146023575f80fd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126055578061080860209252f35b5f80fdfea26469706673582212209b6b57462f6c148ef9ea0b914f34a5202f3e3aa5cb2388765eb037833826a05064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x8F SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0xEF89DE08 EQ PUSH1 0x23 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x55 JUMPI DUP1 PUSH2 0x808 PUSH1 0x20 SWAP3 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP12 PUSH12 0x57462F6C148EF9EA0B914F34 0xA5 KECCAK256 0x2F RETURNDATACOPY GASPRICE 0xA5 0xCB 0x23 DUP9 PUSH23 0x5EB037833826A05064736F6C634300081B003300000000 ","sourceMap":"368:775:96:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"60808060405260043610156011575f80fd5b5f3560e01c63ef89de08146023575f80fd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126055578061080860209252f35b5f80fdfea26469706673582212209b6b57462f6c148ef9ea0b914f34a5202f3e3aa5cb2388765eb037833826a05064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0xEF89DE08 EQ PUSH1 0x23 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x55 JUMPI DUP1 PUSH2 0x808 PUSH1 0x20 SWAP3 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP12 PUSH12 0x57462F6C148EF9EA0B914F34 0xA5 KECCAK256 0x2F RETURNDATACOPY GASPRICE 0xA5 0xCB 0x23 DUP9 PUSH23 0x5EB037833826A05064736F6C634300081B003300000000 ","sourceMap":"368:775:96:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;463:42;368:775;;;;;;;"},"methodIdentifiers":{"SPOT_PRICE_PRECOMPILE_ADDRESS()":"ef89de08"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SpotPriceIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SpotPricePrecompileFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SPOT_PRICE_PRECOMPILE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The precompile is a special type of code, executed in the Hypercore's node. For more information, see https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore .\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"SpotPriceIsZero()\":[{\"notice\":\"The spot price is zero.\"}],\"SpotPricePrecompileFailed()\":[{\"notice\":\"The precompile had an error while fetching the spot price.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Library to interact with the Hyperliquid spot price precompile.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/utils/HyperSpotPricePrecompile.sol\":\"HyperSpotPricePrecompile\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"contracts/utils/HyperSpotPricePrecompile.sol\":{\"keccak256\":\"0x956b7c8f826704431ea1d94bec623d2c5b8b34442365f0b249f3a2c25c2c6c54\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3a70d1a6c57fc7cf290d9b4684c5740166cc04bc2a32aa17421edbc7f844d0ae\",\"dweb:/ipfs/QmXAypsKxGf5YAxWUcMeSHkXFfcDZv8WuZWS44HNf8wMZB\"]}},\"version\":1}"}},"contracts/utils/HyperTokenInfoPrecompile.sol":{"HyperTokenInfoPrecompile":{"abi":[{"inputs":[],"name":"TokenInfoPrecompileFailed","type":"error"},{"inputs":[],"name":"TOKEN_INFO_PRECOMPILE_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234601757608f9081601c823930815050f35b5f80fdfe60808060405260043610156011575f80fd5b5f3560e01c6319dd39d3146023575f80fd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126055578061080c60209252f35b5f80fdfea26469706673582212201956249f019fbe9aa077144a48cc73cf07b32bc804070ac67406dce6e8ad202a64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x8F SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x19DD39D3 EQ PUSH1 0x23 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x55 JUMPI DUP1 PUSH2 0x80C PUSH1 0x20 SWAP3 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NOT JUMP 0x24 SWAP16 ADD SWAP16 0xBE SWAP11 LOG0 PUSH24 0x144A48CC73CF07B32BC804070AC67406DCE6E8AD202A6473 PUSH16 0x6C634300081B00330000000000000000 ","sourceMap":"368:984:97:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"60808060405260043610156011575f80fd5b5f3560e01c6319dd39d3146023575f80fd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126055578061080c60209252f35b5f80fdfea26469706673582212201956249f019fbe9aa077144a48cc73cf07b32bc804070ac67406dce6e8ad202a64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x19DD39D3 EQ PUSH1 0x23 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x55 JUMPI DUP1 PUSH2 0x80C PUSH1 0x20 SWAP3 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NOT JUMP 0x24 SWAP16 ADD SWAP16 0xBE SWAP11 LOG0 PUSH24 0x144A48CC73CF07B32BC804070AC67406DCE6E8AD202A6473 PUSH16 0x6C634300081B00330000000000000000 ","sourceMap":"368:984:97:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;797:42;368:984;;;;;;;"},"methodIdentifiers":{"TOKEN_INFO_PRECOMPILE_ADDRESS()":"19dd39d3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"TokenInfoPrecompileFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TOKEN_INFO_PRECOMPILE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The precompile is a special type of code, executed in the Hypercore's node. For more information, see https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore .\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"TokenInfoPrecompileFailed()\":[{\"notice\":\"The precompile had an error while fetching the token info.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Library to interact with the Hyperliquid token info precompile.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/utils/HyperTokenInfoPrecompile.sol\":\"HyperTokenInfoPrecompile\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"contracts/utils/HyperTokenInfoPrecompile.sol\":{\"keccak256\":\"0xea3b203aa3635705f168c210f2d82b6fda6c63a01acb79f78111302b54fb2c8f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f96d680a8cb86611a2a2a55e675230d9fc397e5e5b875877e62055fb814d929\",\"dweb:/ipfs/Qme2iitvGmf1yBndr1n2yUE8sB1G54HQQqsCWg5HL5NNvZ\"]}},\"version\":1}"}}}}} \ No newline at end of file +{"id":"fd8f787fc9f457ac9a3912a274b2e60f","_format":"hh-sol-build-info-1","solcVersion":"0.8.27","solcLongVersion":"0.8.27+commit.40a35a09","input":{"language":"Solidity","sources":{"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface for permissioned calling of external functions.\ninterface IAuthentication {\n /// @notice The sender does not have permission to call a function.\n error SenderNotAllowed();\n\n /**\n * @notice Returns the action identifier associated with the external function described by `selector`.\n * @param selector The 4-byte selector of the permissioned function\n * @return actionId The computed actionId\n */\n function getActionId(bytes4 selector) external view returns (bytes32 actionId);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice General interface for token exchange rates.\ninterface IRateProvider {\n /**\n * @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n * @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n * rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n * does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n * rates in downstream computations.\n *\n * @return rate The current token rate\n */\n function getRate() external view returns (uint256 rate);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface to retrieve the version of a deployed contract.\ninterface IVersion {\n /**\n * @notice Return arbitrary text representing the version of a contract.\n * @dev For standard Balancer contracts, returns a JSON representation of the contract version containing name,\n * version number and task ID. See real examples in the deployment repo; local tests just use plain text strings.\n *\n * @return version The version string corresponding to the current deployed contract\n */\n function version() external view returns (string memory);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Registered contracts must be one of these types.\nenum ContractType {\n OTHER, // a blank entry will have a 0-value type, and it's safest to return this in that case\n POOL_FACTORY,\n ROUTER,\n HOOK,\n ERC4626\n}\n\ninterface IBalancerContractRegistry {\n /**\n * @notice Store the state of a registered Balancer contract.\n * @dev Contracts can be deprecated, so we store an active flag indicating the status. With two flags, we can\n * differentiate between deprecated and non-existent. The same contract address can have multiple names, but\n * only one type. If a contract is legitimately multiple types (e.g., a hook that also acts as a router), set\n * the type to its \"primary\" function: hook, in this case. The \"Other\" type is intended as a catch-all for\n * things that don't find into the standard types (e.g., helper contracts).\n *\n * @param contractType The type of contract (e.g., Router or Hook)\n * @param isRegistered This flag indicates whether there is an entry for the associated address\n * @param isActive If there is an entry, this flag indicates whether it is active or deprecated\n */\n struct ContractInfo {\n ContractType contractType;\n bool isRegistered;\n bool isActive;\n }\n\n /**\n * @notice Emitted when a new contract is registered.\n * @param contractType The type of contract being registered\n * @param contractName The name of the contract being registered\n * @param contractAddress The address of the contract being registered\n */\n event BalancerContractRegistered(\n ContractType indexed contractType,\n string indexed contractName,\n address indexed contractAddress\n );\n\n /**\n * @notice Emitted when a new contract is deregistered (deleted).\n * @param contractType The type of contract being deregistered\n * @param contractName The name of the contract being deregistered\n * @param contractAddress The address of the contract being deregistered\n */\n event BalancerContractDeregistered(\n ContractType indexed contractType,\n string indexed contractName,\n address indexed contractAddress\n );\n\n /**\n * @notice Emitted when a registered contract is deprecated.\n * @dev This sets the `isActive` flag to false.\n * @param contractAddress The address of the contract being deprecated\n */\n event BalancerContractDeprecated(address indexed contractAddress);\n\n /**\n * @notice Emitted when an alias is added or updated.\n * @param contractAlias The alias name\n * @param contractAddress The address of the contract being deprecated\n */\n event ContractAliasUpdated(string indexed contractAlias, address indexed contractAddress);\n\n /**\n * @notice A contract has already been registered under the given address.\n * @dev Both names and addresses must be unique in the primary registration mapping. Though there are two mappings\n * to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent\n * name => address => state mapping.\n *\n * @param contractType The contract type, provided for documentation purposes\n * @param contractAddress The address of the previously registered contract\n */\n error ContractAddressAlreadyRegistered(ContractType contractType, address contractAddress);\n\n /**\n * @notice A contract has already been registered under the given name.\n * @dev Note that names must be unique; it is not possible to register two contracts with the same name and\n * different types, or the same name and different addresses.\n *\n * @param contractType The registered contract type, provided for documentation purposes\n * @param contractName The name of the previously registered contract\n */\n error ContractNameAlreadyRegistered(ContractType contractType, string contractName);\n\n /**\n * @notice The proposed contract name has already been added as an alias.\n * @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n * @param contractName The name of the previously registered contract\n * @param contractAddress The address of the previously registered contract\n */\n error ContractNameInUseAsAlias(string contractName, address contractAddress);\n\n /**\n * @notice The proposed alias has already been registered as a contract.\n * @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n * @param contractType The registered contract type, provided for documentation purposes\n * @param contractName The name of the previously registered contract (and proposed alias)\n */\n error ContractAliasInUseAsName(ContractType contractType, string contractName);\n\n /**\n * @notice Thrown when attempting to deregister a contract that was not previously registered.\n * @param contractName The name of the unregistered contract\n */\n error ContractNameNotRegistered(string contractName);\n\n /**\n * @notice An operation that requires a valid contract specified an unrecognized address.\n * @dev A contract being deprecated was never registered, or the target of an alias isn't a previously\n * registered contract.\n *\n * @param contractAddress The address of the contract that was not registered\n */\n error ContractAddressNotRegistered(address contractAddress);\n\n /**\n * @notice Contracts can only be deprecated once.\n * @param contractAddress The address of the previously deprecated contract\n */\n error ContractAlreadyDeprecated(address contractAddress);\n\n /// @notice Cannot register or deprecate contracts, or add an alias targeting the zero address.\n error ZeroContractAddress();\n\n /// @notice Cannot register (or deregister) a contract with an empty string as a name.\n error InvalidContractName();\n\n /// @notice Cannot add an empty string as an alias.\n error InvalidContractAlias();\n\n /**\n * @notice Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n * @dev This is a permissioned function, and does only basic validation of the address (non-zero) and the name\n * (not blank). Governance must ensure this is called with valid information. Emits the\n * `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or\n * already in use.\n *\n * @param contractType The type of contract being registered\n * @param contractName A text description of the contract, usually the deployed version (e.g., \"v3-pool-weighted\")\n * @param contractAddress The address of the contract\n */\n function registerBalancerContract(\n ContractType contractType,\n string memory contractName,\n address contractAddress\n ) external;\n\n /**\n * @notice Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n * @dev This is a permissioned function, and makes it possible to correct errors without complex update logic.\n * If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete\n * it, and register it again with the correct data. It must start with the name, as this is the registry key,\n * required for complete deletion.\n *\n * Note that there might still be an alias targeting the address being deleted, but accessing it will just return\n * inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to\n * the correct address.\n *\n * @param contractName The name of the contract being deprecated (cannot be an alias)\n */\n function deregisterBalancerContract(string memory contractName) external;\n\n /**\n * @notice Deprecate an official Balancer contract.\n * @dev This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the\n * address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are\n * enforced unique, so either the name or address could be specified in principle.\n *\n * @param contractAddress The address of the contract being deprecated\n */\n function deprecateBalancerContract(address contractAddress) external;\n\n /**\n * @notice Add an alias for a registered contract.\n * @dev This is a permissioned function to support querying by a contract alias. For instance, we might create a\n * `WeightedPool` alias meaning the \"latest\" version of the `WeightedPoolFactory`, so that off-chain users don't\n * need to track specific versions. Once added, an alias can also be updated to point to a different address\n * (e.g., when migrating from the v2 to the v3 weighted pool).\n *\n * @param contractAlias An alternate name that can be used to fetch a contract address\n * @param existingContract The target address of the contract alias\n */\n function addOrUpdateBalancerContractAlias(string memory contractAlias, address existingContract) external;\n\n /**\n * @notice Determine whether an address is an official contract of the specified type.\n * @param contractType The type of contract\n * @param contractAddress The address of the contract\n * @return isActive True if the given address is a registered and active contract of the specified type\n */\n function isActiveBalancerContract(\n ContractType contractType,\n address contractAddress\n ) external view returns (bool isActive);\n\n /**\n * @notice Look up a registered contract by type and name.\n * @dev This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias\n * (e.g., `WeightedPool`).\n *\n * @param contractType The type of the contract\n * @param contractName The name of the contract\n * @return contractAddress The address of the associated contract, if registered, or zero\n * @return isActive True if the contract was registered and not deprecated\n */\n function getBalancerContract(\n ContractType contractType,\n string memory contractName\n ) external view returns (address contractAddress, bool isActive);\n\n /**\n * @notice Look up complete information about a registered contract by address.\n * @param contractAddress The address of the associated contract\n * @return info ContractInfo struct corresponding to the address\n */\n function getBalancerContractInfo(address contractAddress) external view returns (ContractInfo memory info);\n\n /// @notice Returns `true` if the given address is an active contract under the ROUTER type.\n function isTrustedRouter(address router) external view returns (bool);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IProtocolFeeBurner } from \"./IProtocolFeeBurner.sol\";\n\ninterface IBalancerFeeBurner is IProtocolFeeBurner {\n /**\n * @notice Steps for the burn path.\n * @param pool The pool for the swap\n * @param tokenOut The `tokenOut` of the swap operation\n */\n struct SwapPathStep {\n address pool;\n IERC20 tokenOut;\n }\n\n /**\n * @notice Data for the burn hook.\n * @param pool The pool the fees came from (only used for documentation in the event)\n * @param sender The sender of the call. In most cases, this is the sweeper.\n * @param feeToken The token collected from the pool\n * @param feeTokenAmount The number of fee tokens collected\n * @param targetToken The desired target token (`tokenOut` of the swap)\n * @param minAmountOut The minimum `amountOut` for the swap\n * @param recipient The recipient of the swap proceeds\n * @param deadline Deadline for the burn operation (i.e., swap), after which it will revert\n */\n struct BurnHookParams {\n address pool;\n address sender;\n IERC20 feeToken;\n uint256 feeTokenAmount;\n IERC20 targetToken;\n uint256 minAmountOut;\n address recipient;\n uint256 deadline;\n }\n\n /// @notice Burn path not set for the fee token.\n error BurnPathDoesNotExist();\n\n /// @notice The last token in the path is not the same as the target token.\n error TargetTokenOutMismatch();\n\n /**\n * @notice Set the burn path for a fee token.\n * @dev This is the sequence of swaps required to convert the `feeToken` to the `targetToken`.\n * This is a permissioned function.\n *\n * @param feeToken The fee token to set the path for\n * @param steps The steps in the burn path\n */\n function setBurnPath(IERC20 feeToken, SwapPathStep[] calldata steps) external;\n\n /**\n * @notice Get the burn path for a fee token.\n * @param feeToken The fee token to get the path for\n * @return steps The steps in the burn path\n */\n function getBurnPath(IERC20 feeToken) external view returns (SwapPathStep[] memory steps);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { ICowConditionalOrder } from \"./ICowConditionalOrder.sol\";\n\n/// @notice Utility contract used to validate orders in the `CowSwapFeeBurner`.\ninterface IComposableCow {\n /**\n * @notice Data passed to ComposableCoW via the payload parameter of isValidSafeSignature.\n * @dev See github.com/curvefi/curve-burners/blob/main/contracts/burners/CowSwapBurner.vy#L66:L69.\n * @param proof Merkle Tree proof\n * @param params Conditional order params\n * @param offchainInput Off-chain input (similar to Balancer `userData`); currently unused\n */\n struct Payload {\n bytes32[] proof;\n ICowConditionalOrder.ConditionalOrderParams params;\n bytes offchainInput;\n }\n\n /**\n * @notice Construct a CoW order.\n * @param params Order parameters\n * @param dispatch If true, submit the order (always true in the CowSwapBurner)\n */\n function create(ICowConditionalOrder.ConditionalOrderParams calldata params, bool dispatch) external;\n\n function domainSeparator() external view returns (bytes32);\n\n /// @notice Delegated ERC-1271 signature validation with an enhanced context.\n function isValidSafeSignature(\n address safe,\n address sender,\n bytes32 _hash,\n bytes32 _domainSeparator,\n bytes32 typeHash,\n bytes calldata encodeData,\n bytes calldata payload\n ) external view returns (bytes4);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol":{"content":"// SPDX-License-Identifier: GPL-3.0\npragma solidity >=0.8.0 <0.9.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n// See https://github.com/curvefi/curve-burners/blob/main/contracts/burners/CowSwapBurner.vy#L44:L56\nstruct GPv2Order {\n IERC20 sellToken;\n IERC20 buyToken;\n address receiver;\n uint256 sellAmount;\n uint256 buyAmount;\n uint32 validTo;\n bytes32 appData;\n uint256 feeAmount;\n bytes32 kind;\n bool partiallyFillable;\n bytes32 sellTokenBalance;\n bytes32 buyTokenBalance;\n}\n\n/**\n * @notice Conditional Order Interface - verify a Cow order.\n * @author CoW Protocol Developers + mfw78 \n */\ninterface ICowConditionalOrder {\n /**\n * @notice This struct is used to uniquely identify a conditional order for an owner.\n * @dev H(handler || salt || staticData) **MUST** be unique for an owner.\n * @param handler The contract implementing the conditional order logic\n * @param salt Allows for multiple conditional orders of the same type and data (currently unused)\n * @param staticData Data available to ALL discrete orders created by the conditional order\n */\n struct ConditionalOrderParams {\n ICowConditionalOrder handler;\n bytes32 salt;\n bytes staticData;\n }\n\n /**\n * @notice This error is returned by the `getTradeableOrder` function if the order conditions are not met.\n * @param reason Text explaining the reason the order is invalid\n */\n error OrderNotValid(string reason);\n\n // Errors specific to polling (interpreted by the off-chain Watchtower).\n\n /**\n * @notice Polling should be retried at the next block.\n * @param reason Text description of the reason it should be retried\n */\n error PollTryNextBlock(string reason);\n\n /**\n * @notice Polling should be retried at a specific block number.\n * @param blockNumber The block number when polling should resume\n * @param reason Text description of the reason it should be retried\n */\n error PollTryAtBlock(uint256 blockNumber, string reason);\n\n /**\n * @notice Polling should be retried at a specific epoch (unix timestamp).\n * @param timestamp The unix timestamp when polling should resume\n * @param reason Text description of the reason it should be retried\n */\n error PollTryAtEpoch(uint256 timestamp, string reason);\n\n /**\n * @notice The conditional order should not be polled again (i.e., deleted).\n * @param reason Text description of the reason it should be deleted\n */\n error PollNever(string reason);\n\n /**\n * @notice Verify that a given discrete order is valid.\n * @dev Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe.\n * **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the\n * `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over\n * the order verification logic, and to allow a watchtower / user to propose a discrete order without it being\n * generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\n *\n * @param owner The owner of the order (usually a contract)\n * @param sender The `msg.sender` calling `isValidSignature`\n * @param _hash `EIP712` order digest\n * @param domainSeparator `EIP712` domain separator\n * @param ctx See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\n * @param staticInput Conditional order type-specific data known at time of creation for all discrete orders\n * @param offchainInput Type-specific data NOT known at time of creation for a specific discrete order (or zero)\n * @param order The proposed discrete order's `GPv2Order` data struct\n */\n function verify(\n address owner,\n address sender,\n bytes32 _hash,\n bytes32 domainSeparator,\n bytes32 ctx,\n bytes calldata staticInput,\n bytes calldata offchainInput,\n GPv2Order calldata order\n ) external view;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol":{"content":"// SPDX-License-Identifier: GPL-3.0\npragma solidity >=0.8.0 <0.9.0;\n\nimport { IERC165 } from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\n\nimport { ICowConditionalOrder, GPv2Order } from \"./ICowConditionalOrder.sol\";\n\n/**\n * @notice Conditional Order Generator Interface\n * @author mfw78 \n */\ninterface ICowConditionalOrderGenerator is IERC165 {\n /**\n * @dev Emitted when a new conditional order is created.\n * @param owner The address that created the conditional order\n * @param params The conditional order data\n */\n event ConditionalOrderCreated(address indexed owner, ICowConditionalOrder.ConditionalOrderParams params);\n\n /**\n * @notice Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\n * @dev **MUST** revert if the order conditions are not met.\n * @param owner The owner of the order (usually a contract)\n * @param sender The `msg.sender` of the parent `isValidSignature` call\n * @param ctx The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\n * @param staticInput Conditional order type-specific data known at time of creation for all discrete orders\n * @param offchainInput Off-chain input (similar to Balancer `userData`); currently unused\n * @return order Tradeable order for submission to the CoW Protocol API\n */\n function getTradeableOrder(\n address owner,\n address sender,\n bytes32 ctx,\n bytes calldata staticInput,\n bytes calldata offchainInput\n ) external view returns (GPv2Order memory);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC1271 } from \"@openzeppelin/contracts/interfaces/IERC1271.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { ICowConditionalOrderGenerator } from \"./ICowConditionalOrderGenerator.sol\";\nimport { ICowConditionalOrder, GPv2Order } from \"./ICowConditionalOrder.sol\";\nimport { IProtocolFeeBurner } from \"./IProtocolFeeBurner.sol\";\n\ninterface ICowSwapFeeBurner is IERC1271, IProtocolFeeBurner, ICowConditionalOrder, ICowConditionalOrderGenerator {\n enum OrderStatus {\n Nonexistent,\n Active,\n Filled,\n Failed\n }\n\n /**\n * @notice An order was retried after failing.\n * @param tokenIn The token used to identify the order\n * @param exactAmountIn The number of tokens in the order\n * @param minAmountOut The minimum number of target tokens required\n * @param deadline The deadline for the new order to be filled\n */\n event OrderRetried(IERC20 tokenIn, uint256 exactAmountIn, uint256 minAmountOut, uint256 deadline);\n\n /**\n * @notice An order was canceled after failure.\n * @param tokenIn The token used to identify the order\n * @param exactAmountIn The number of tokens in the order\n * @param receiver The account that received the tokens from the unfilled order\n */\n event OrderCanceled(IERC20 tokenIn, uint256 exactAmountIn, address receiver);\n\n /**\n * @notice The order parameters were invalid.\n * @param reason Text explaining the reason the order is invalid\n */\n error InvalidOrderParameters(string reason);\n\n /**\n * @notice Attempt to revert an order that had not failed.\n * @dev `revertOrder` should only be called when the OrderStatus is `Failed`.\n * @param actualStatus The status of the order when `revertOrder` was called\n */\n error OrderHasUnexpectedStatus(OrderStatus actualStatus);\n\n /// @notice Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\n error InterfaceIsSignatureVerifierMuxer();\n\n /**\n * @notice Get the order at the sell token.\n * @param tokenIn The token used to identify the order\n * @return orderData The order data for the given token\n */\n function getOrder(IERC20 tokenIn) external view returns (GPv2Order memory orderData);\n\n /**\n * @notice Get the status of the order at the sell token.\n * @param tokenIn The token used to identify the order\n * @return orderStatus The status of the order for the given token\n */\n function getOrderStatus(IERC20 tokenIn) external view returns (OrderStatus orderStatus);\n\n /**\n * @notice Retry an order that has not been filled yet and expired.\n * @param tokenIn The token used to identify the order\n * @param minAmountOut The minimum number of target tokens to receive (tokenOut)\n * @param deadline The deadline for the order to be filled.\n */\n function retryOrder(IERC20 tokenIn, uint256 minAmountOut, uint256 deadline) external;\n\n /**\n * @notice Return tokens from an order that has failed.\n * @dev Canceling an order prevents it from being retried.\n * @param tokenIn The token used to identify the order\n * @param receiver The address to receive the tokens from the unfilled order\n */\n function cancelOrder(IERC20 tokenIn, address receiver) external;\n\n /**\n * @notice Emergency return tokens from an order regardless of status.\n * @dev Canceling an order prevents it from being retried.\n * @param tokenIn The token used to identify the order\n * @param receiver The address to receive the from the unfilled order\n */\n function emergencyCancelOrder(IERC20 tokenIn, address receiver) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\ninterface IHyperEVMRateProvider {\n /**\n * @notice The index of the token on the Hyperliquid public API.\n * @return tokenIndex The index of the token on the Hyperliquid public API\n */\n function getTokenIndex() external view returns (uint32);\n\n /**\n * @notice The index of the pair to fetch the spot price, according to the Hyperliquid public API.\n * @dev Hypercore has an index that identifies a pair of tokens to fetch the spot price.\n * @return pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n */\n function getPairIndex() external view returns (uint32);\n\n /**\n * @notice The spot price multiplier.\n * @dev Hypercore returns the spot price with a different number of decimals for each token. So, to make this rate\n * provider compatible with the vault, we need to scale the spot price to 18 decimals using this multiplier.\n * @return spotPriceMultiplier The spot price multiplier\n */\n function getSpotPriceMultiplier() external view returns (uint256 spotPriceMultiplier);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IHyperEVMRateProvider } from \"./IHyperEVMRateProvider.sol\";\n\ninterface IHyperEVMRateProviderFactory {\n /**\n * @notice A new HyperEVM Rate Provider was created.\n * @param tokenIndex The index of the base asset on the Hyperliquid public API\n * @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n * @param rateProvider The address of the deployed rate provider\n */\n event RateProviderCreated(uint256 indexed tokenIndex, uint256 indexed pairIndex, address indexed rateProvider);\n\n /// @notice Emitted when the factory is disabled.\n event RateProviderFactoryDisabled();\n\n /**\n * @notice A rate provider already exists for the given token and pair.\n * @param tokenIndex The index of the base asset on the Hyperliquid public API\n * @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n * @param rateProvider The address of the deployed rate provider\n */\n error RateProviderAlreadyExists(uint32 tokenIndex, uint32 pairIndex, address rateProvider);\n\n /**\n * @notice The rate provider was not found for the given token and pair.\n * @param tokenIndex The index of the base asset on the Hyperliquid public API\n * @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n */\n error RateProviderNotFound(uint32 tokenIndex, uint32 pairIndex);\n\n /// @notice The factory is disabled.\n error RateProviderFactoryIsDisabled();\n\n /**\n * @notice Returns a number representing the rate provider version.\n * @return rateProviderVersion The rate provider version number\n */\n function getRateProviderVersion() external view returns (uint256 rateProviderVersion);\n\n /**\n * @notice Creates a new HyperEVM Rate Provider for the given token and pair.\n * @param tokenIndex The index of the base asset on the Hyperliquid public API\n * @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n * @return rateProvider The address of the deployed rate provider\n */\n function create(uint32 tokenIndex, uint32 pairIndex) external returns (IHyperEVMRateProvider rateProvider);\n\n /**\n * @notice Gets the rate provider for the given token and pair.\n * @dev Reverts if the rate provider was not found for the given token and pair.\n * @param tokenIndex The index of the base asset on the Hyperliquid public API\n * @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n * @return rateProvider The address of the rate provider for the given token and pair\n */\n function getRateProvider(\n uint32 tokenIndex,\n uint32 pairIndex\n ) external view returns (IHyperEVMRateProvider rateProvider);\n\n /**\n * @notice Checks whether the given rate provider was created by this factory.\n * @param rateProvider The rate provider to check\n * @return success True if the rate provider was created by this factory; false otherwise\n */\n function isRateProviderFromFactory(IHyperEVMRateProvider rateProvider) external view returns (bool success);\n\n /**\n * @notice Disables the rate provider factory.\n * @dev A disabled rate provider factory cannot create new rate providers and cannot be re-enabled. However,\n * already created rate providers are still usable. This is a permissioned function.\n */\n function disable() external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Common interface for helper functions that operate on a subset of pools.\ninterface IPoolHelperCommon {\n /**\n * @notice The owner created a new pool set.\n * @dev Pools are organized into separate sets, controlled by a manager, which can be changed independently.\n * @param poolSetId Id of the set with which the pool is associated\n * @param initialManager Address of the pool set manager\n */\n event PoolSetCreated(uint256 indexed poolSetId, address indexed initialManager);\n\n /**\n * @notice The owner destroyed a pool set.\n * @param poolSetId Id of the set with which the pool is associated\n * @param manager The address of the set's last manager\n */\n event PoolSetDestroyed(uint256 indexed poolSetId, address indexed manager);\n\n /**\n * @notice The owner added a pool to the given set.\n * @param pool Address of the pool that was added\n * @param poolSetId Id of the set with which the pool is associated\n */\n event PoolAddedToSet(address indexed pool, uint256 indexed poolSetId);\n\n /**\n * @notice The owner removed a pool from the given set.\n * @param poolSetId Id of the set with which the pool is associated\n * @param pool Address of the pool that was removed\n */\n event PoolRemovedFromSet(address indexed pool, uint256 indexed poolSetId);\n\n /**\n * @notice The current manager of a pool set transferred ownership to a new address.\n * @dev Managers can only control one pool set. Transfers to existing managers of other sets will revert.\n * @param poolSetId Id of the set with which the pool is associated\n * @param oldManager Address of the previous manager\n * @param newManager Address of the new manager\n */\n event PoolSetOwnershipTransferred(\n uint256 indexed poolSetId,\n address indexed oldManager,\n address indexed newManager\n );\n\n /**\n * @notice Cannot add a pool that is already there.\n * @param pool Address of the pool being added\n * @param poolSetId Id of the set with which the pool is associated\n */\n error PoolAlreadyInSet(address pool, uint256 poolSetId);\n\n /**\n * @notice Cannot remove a pool that was not added.\n * @param pool Address of the pool being removed\n * @param poolSetId Id of the set with which the pool is associated\n */\n error PoolNotInSet(address pool, uint256 poolSetId);\n\n /**\n * @notice Pool set id associated with an operation is invalid.\n * @dev This can mean the value is invalid, or it was never created, or it was destroyed.\n * @param poolSetId The id of the invalid set\n */\n error InvalidPoolSetId(uint256 poolSetId);\n\n /// @notice The initial manager of a pool set cannot be zero.\n error InvalidPoolSetManager();\n\n /**\n * @notice Pool set managers can only manage a single pool set.\n * @dev Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\n * @param poolSetManager Address of the manager that is already assigned to another pool set id\n */\n error PoolSetManagerNotUnique(address poolSetManager);\n\n /// @notice Permissioned operations on pools can only be performed by the pool set manager.\n error SenderIsNotPoolSetManager();\n\n /**\n * @notice An index is beyond the current bounds of the set.\n * @param poolSetId Id of the set involved in the operation\n */\n error IndexOutOfBounds(uint256 poolSetId);\n\n /***************************************************************************\n Manage Pool Sets\n ***************************************************************************/\n\n /**\n * @notice Create a new set with an initial manager, optionally initialized with a set of pools.\n * @dev The `newPools` list can be empty, in which case this will only create the set. Pools can then be\n * added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function.\n * Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the\n * initial manager address is zero or already a manager of another pool set.\n *\n * @param initialManager Address of the account authorized to perform operations on the set\n * @param newPools Set of pools to add to the set\n */\n function createPoolSet(address initialManager, address[] memory newPools) external returns (uint256 poolSetId);\n\n /**\n * @notice Create a new empty set with an initial manager.\n * @dev Convenience function to create a pool set with no initial pools. Also reverts if the initial manager\n * address is zero or already a manager of another pool set.\n *\n * @param initialManager Address of the account authorized to perform operations on the set\n */\n function createPoolSet(address initialManager) external returns (uint256 poolSetId);\n\n /**\n * @notice Simple way to remove an entire set of pools from control of the helper function.\n * @dev This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis)\n * may destroy sets, effectively removing control of any pools in the set from the associated manager.\n * Also reverts if the poolSetId is not valid.\n *\n * @param poolSetId Id of the set being destroyed\n */\n function destroyPoolSet(uint256 poolSetId) external;\n\n /**\n * @notice Transfer ownership of a pool set from the current manager to a new manager.\n * @dev This is a permissioned function. Only the current manager of a set can call this to set a new manager.\n * Since managers can only control a single set, there is no need to specify the id in the call. Note that this\n * is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this\n * contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts\n * if the new manager address is zero or already the manager of a pool set.\n *\n * @param newManager The address of the new manager\n */\n function transferPoolSetOwnership(address newManager) external;\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /**\n * @notice Add pools to the set of pools controlled by this helper contract.\n * @dev This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis)\n * may add pools to a set. Also reverts if the poolSetId is not valid.\n *\n * @param newPools List of pools to add\n * @param poolSetId Id of the set to which the new pools belong\n */\n function addPoolsToSet(uint256 poolSetId, address[] memory newPools) external;\n\n /**\n * @notice Remove pools from the set of pools controlled by this helper contract.\n * @dev This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis)\n * may remove pools from a set. Also reverts if the poolSetId is not valid.\n *\n * @param pools List of pools to remove from the set\n * @param poolSetId Id of the set to which the pools belong\n */\n function removePoolsFromSet(uint256 poolSetId, address[] memory pools) external;\n\n /***************************************************************************\n Getters \n ***************************************************************************/\n\n /**\n * @notice Get the pool set id associated with the caller.\n * @return poolSetId The numeric pool set id, or zero if the caller is not a pool set manager\n */\n function getPoolSetIdForCaller() external view returns (uint256 poolSetId);\n\n /**\n * @notice Get the pool set id associated with a given manager address.\n * @return poolSetId The numeric pool set id, or zero if the address given is not a pool set manager\n */\n function getPoolSetIdForManager(address manager) external view returns (uint256 poolSetId);\n\n /**\n * @notice Get the number of pools associated with the given set.\n * @dev Needed to support pagination in case the set is too large to process in a single transaction.\n * Reverts if the poolSetId is not valid.\n *\n * @param poolSetId Id of the set containing the pools\n * @return poolCount The current number of pools in the set\n */\n function getPoolCountForSet(uint256 poolSetId) external view returns (uint256 poolCount);\n\n /**\n * @notice Check whether a poolSetId has been created.\n * @param poolSetId Id of the set containing the pools\n * @return isValid True if the poolSetId exists\n */\n function isValidPoolSetId(uint256 poolSetId) external view returns (bool isValid);\n\n /**\n * @notice Check whether a pool is in the set of pools.\n * @dev Reverts if the poolSetId is not valid.\n * @param pool Address of the pool to check\n * @param poolSetId Id of the set containing the pools\n * @return poolInSet True if the pool is in the given set, false otherwise\n */\n function isPoolInSet(address pool, uint256 poolSetId) external view returns (bool poolInSet);\n\n /**\n * @notice Get the full set of pools from a given set.\n * @dev Reverts if the poolSetId is not valid.\n * @param poolSetId Id of the set containing the pools\n * @return pools List of pools\n */\n function getAllPoolsInSet(uint256 poolSetId) external view returns (address[] memory pools);\n\n /**\n * @notice Get a range of pools from a given set.\n * @dev Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`).\n * Reverts if the poolSetId is not valid.\n *\n * @param poolSetId Id of the set containing the pools\n * @param from Start index\n * @param to End index\n * @return pools List of pools\n */\n function getPoolsInSet(uint256 poolSetId, uint256 from, uint256 to) external view returns (address[] memory pools);\n\n /**\n * @notice Utility function to predict the next pool set id.\n * @return nextPoolSetId The pool set id that will be used on the next call of `createPoolSet`\n */\n function getNextPoolSetId() external view returns (uint256 nextPoolSetId);\n\n /**\n * @notice Get the manager address associated with a given poolSetId.\n * @param poolSetId Id of the set containing the pools\n * @return manager The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\n */\n function getManagerForPoolSet(uint256 poolSetId) external view returns (address manager);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Maintain a set of pools that can be paused from this helper contract, vs. directly from the Vault.\n * @dev Governance can add a set of pools to this contract, then grant pause permission to accounts here, which\n * allows greater granularity than setting the permission directly on the Vault.\n *\n * Note that governance must grant this contract permission to pause pools from the Vault. Unpausing is not\n * addressed here, and must still be done through the Vault.\n */\ninterface IPoolPauseHelper {\n /**\n * @notice Pause a set of pools.\n * @dev This is a permissioned function. Governance must first grant this contract permission to call `pausePool`\n * on the Vault, then grant another account permission to call `pausePools` here. Note that this is not necessarily\n * the same account that can add or remove pools from the pausable list.\n *\n * Note that there is no `unpause`. This is a helper contract designed to react quickly to emergencies. Unpausing\n * is a more deliberate action that should be performed by accounts approved by governance for this purpose, or by\n * the individual pools' pause managers.\n *\n * @param pools List of pools to pause\n */\n function pausePools(address[] memory pools) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Maintain a set of pools whose static swap fee percentages can be changed from here, vs. from the Vault.\n * @dev Governance can add a set of pools to this contract, then grant swap fee setting permission to accounts on this\n * contract, which allows greater granularity than setting the permission directly on the Vault.\n *\n * Note that governance must grant this contract permission to set swap fees from the Vault, and only pools that\n * allow governance to set fees can be added (i.e., they must not have swap managers).\n */\ninterface IPoolSwapFeeHelper {\n /**\n * @notice Cannot add a pool that has a swap manager.\n * @dev The swap manager is an exclusive role. If it is set to a non-zero value during pool registration,\n * only the swap manager can change the fee. This helper can only set fees on pools that allow governance\n * to grant this permission.\n *\n * @param pool Address of the pool being added\n */\n error PoolHasSwapManager(address pool);\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /**\n * @notice Set the static swap fee percentage on a given pool.\n * @dev This is a permissioned function. Governance must grant this contract permission to call\n * `setStaticSwapFeePercentage` on the Vault. Note that since the swap manager is an exclusive role, the swap fee\n * cannot be changed by governance if it is set, and the pool cannot be added to the set.\n *\n * @param pool The address of the pool\n * @param swapFeePercentage The new swap fee percentage\n */\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\ninterface IProtocolFeeBurner {\n /**\n * @notice A protocol fee token has been \"burned\" (i.e., swapped for the desired target token).\n * @param pool The pool on which the fee was collected (used for event tracking)\n * @param feeToken The token in which the fee was originally collected\n * @param exactFeeTokenAmountIn The number of feeTokens collected\n * @param targetToken The preferred token for fee collection (e.g., USDC)\n * @param actualTargetTokenAmountOut The number of target tokens actually received\n * @param recipient The address where the target tokens were sent\n */\n event ProtocolFeeBurned(\n address indexed pool,\n IERC20 indexed feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 indexed targetToken,\n uint256 actualTargetTokenAmountOut,\n address recipient\n );\n\n /**\n * @notice The actual amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error AmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /// @notice The swap transaction was not validated before the specified deadline timestamp.\n error SwapDeadline();\n\n /**\n * @notice Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\n * @dev Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\n * @param pool The pool the fees came from (only used for documentation in the event)\n * @param feeToken The token collected from the pool\n * @param exactFeeTokenAmountIn The number of fee tokens collected\n * @param targetToken The desired target token (token out of the swap)\n * @param minTargetTokenAmountOut The minimum amount out for the swap\n * @param recipient The recipient of the swap proceeds\n * @param deadline Deadline for the burn operation (i.e., swap), after which it will revert\n */\n function burn(\n address pool,\n IERC20 feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 targetToken,\n uint256 minTargetTokenAmountOut,\n address recipient,\n uint256 deadline\n ) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Maintain a set of pools whose protocol fees can be set from this helper contract, vs. the fee controller.\n * @dev Governance can add a set of pools to this contract, then grant permission to call protocol swap- or yield-\n * setting functions here, which allows greater granularity than setting permissions directly on the fee controller.\n *\n * Note that governance must grant this contract permission to call the pool protocol fee setting functions on the\n * controller.\n */\ninterface IProtocolFeeHelper {\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /**\n * @notice Set the protocol swap fee for a pool.\n * @dev This contract must be granted permission to set swap and yield protocol fees, but governance can\n * independently grant permission to call the swap and yield fee setters.\n *\n * @param pool The address of the pool\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage\n */\n function setProtocolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Set the protocol yield fee for a pool.\n * @dev This contract must be granted permission to set swap and yield protocol fees, but governance can\n * independently grant permission to call the swap and yield fee setters.\n *\n * @param pool The address of the pool\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setProtocolYieldFeePercentage(address pool, uint256 newProtocolYieldFeePercentage) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IProtocolFeeController } from \"../vault/IProtocolFeeController.sol\";\nimport { IProtocolFeeBurner } from \"./IProtocolFeeBurner.sol\";\n\ninterface IProtocolFeeSweeper {\n /**\n * @notice Emitted when the target token is set or updated.\n * @param token The preferred token for receiving protocol fees\n */\n event TargetTokenSet(IERC20 indexed token);\n\n /**\n * @notice Emitted when the fee recipient address is set or updated.\n * @param feeRecipient The final destination of collected protocol fees\n */\n event FeeRecipientSet(address indexed feeRecipient);\n\n /**\n * @notice Emitted when a fee token is transferred directly, vs. calling the burner.\n * @dev This can happen if no target token or burner contract was specified, or the fee token is the target token.\n * @param pool The pool on which the fee was collected\n * @param feeToken The token the fee was collected in (also the target token in this case; no swap necessary)\n * @param feeTokenAmount The number of feeTokens\n * @param recipient The recipient of the fee tokens\n */\n event ProtocolFeeSwept(address indexed pool, IERC20 indexed feeToken, uint256 feeTokenAmount, address recipient);\n\n /**\n * @notice Emitted when a burner is added to the protocol fee burner allowlist.\n * @dev `sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\n * @param protocolFeeBurner The address of the approved protocol fee burner that was added\n */\n event ProtocolFeeBurnerAdded(address indexed protocolFeeBurner);\n\n /**\n * @notice Emitted when a burner is removed from the protocol fee burner allowlist.\n * @dev `sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\n * @param protocolFeeBurner The address of the approved protocol fee burner that was removed\n */\n event ProtocolFeeBurnerRemoved(address indexed protocolFeeBurner);\n\n /// @notice The fee recipient is invalid.\n error InvalidFeeRecipient();\n\n /// @notice The target token is invalid.\n error InvalidTargetToken();\n\n /// @notice The protocol fee burner to be added is invalid.\n error InvalidProtocolFeeBurner();\n\n /**\n * @notice The specified fee burner has not been approved.\n * @param protocolFeeBurner The address of the unsupported fee burner\n */\n error UnsupportedProtocolFeeBurner(address protocolFeeBurner);\n\n /**\n * @notice Protocol fee burners can only be added to the allowlist once.\n * @param protocolFeeBurner The address of an approved protocol fee burner\n */\n error ProtocolFeeBurnerAlreadyAdded(address protocolFeeBurner);\n\n /**\n * @notice Protocol fee burners must be added to the allowlist before being removed.\n * @param protocolFeeBurner The address of a protocol fee burner to be removed from the allowlist\n */\n error ProtocolFeeBurnerNotAdded(address protocolFeeBurner);\n\n /**\n * @notice The burner did not consume its entire allowance.\n * @dev The fee sweeper approves the burner to pull tokens. If it doesn't do so, revert to avoid a \"hanging\"\n * approval that could be exploited later.\n */\n error BurnerDidNotConsumeAllowance();\n\n /// @notice Unwrapping is not allowed for the operation.\n error UnwrapIsNotAllowed();\n\n /**\n * @notice Withdraw, convert, and forward protocol fees for a given pool and token.\n * @dev This will withdraw the fee token from the controller to this contract, and attempt to convert and forward\n * the proceeds to the fee recipient. Note that this requires governance to grant this contract permission to call\n * `withdrawProtocolFeesForToken` on the `ProtocolFeeController`.\n *\n * This is a permissioned call, since it involves a swap and a permissionless sweep could be triggered at times\n * disadvantageous to the protocol (e.g., flash crashes). The general design is for an off-chain process to\n * periodically collect fees from the Vault and check the protocol fee amounts available for withdrawal. Once\n * these are greater than a threshold, compute the expected proceeds to determine the limits (amount and deadline),\n * then call the sweeper to put in the order with the burner.\n *\n * @param pool The pool that incurred the fees we're withdrawing\n * @param feeToken The fee token in the pool\n * @param minTargetTokenAmountOut The minimum number of target tokens to be received\n * @param deadline Deadline for the burn operation (swap), after which it will revert\n * @param feeBurner The protocol fee burner to be used (or the zero address to fall back on direct transfer)\n */\n function sweepProtocolFeesForToken(\n address pool,\n IERC20 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner\n ) external;\n\n /**\n * @notice The same as `sweepProtocolFeesForToken`, but for wrapped tokens.\n * @param pool The pool that incurred the fees we're withdrawing\n * @param feeToken The fee token in the pool\n * @param minTargetTokenAmountOut The minimum number of target tokens to be received\n * @param deadline Deadline for the burn operation (swap), after which it will revert\n * @param feeBurner The protocol fee burner to be used (or the zero address to fall back on direct transfer)\n */\n function sweepProtocolFeesForWrappedToken(\n address pool,\n IERC4626 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner\n ) external;\n\n /**\n * @notice Return the address of the current `ProtocolFeeController` from the Vault.\n * @dev It is not immutable in the Vault, so we need to fetch it every time.\n * @return protocolFeeController The address of the current `ProtocolFeeController`\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController);\n\n /**\n * @notice Getter for the target token.\n * @dev This is the token the burner will swap all fee tokens for. Can be changed by `setTargetToken`.\n * @return targetToken The current target token\n */\n function getTargetToken() external view returns (IERC20);\n\n /**\n * @notice Getter for the current fee recipient.\n * @dev Can be changed by `setFeeRecipient`.\n * @return feeRecipient The current fee recipient\n */\n function getFeeRecipient() external view returns (address);\n\n /**\n * @notice Check whether a given address corresponds to an approved protocol fee burner.\n * @param protocolFeeBurner The address to be checked\n * @return isApproved True if the given address is on the approved protocol fee burner allowlist\n */\n function isApprovedProtocolFeeBurner(address protocolFeeBurner) external view returns (bool);\n\n /**\n * @notice Update the fee recipient address.\n * @dev This is a permissioned function.\n * @param feeRecipient The address of the new fee recipient\n */\n function setFeeRecipient(address feeRecipient) external;\n\n /**\n * @notice Update the address of the target token.\n * @dev This is the token for which the burner will attempt to swap all collected fee tokens.\n * @param targetToken The address of the target token\n */\n function setTargetToken(IERC20 targetToken) external;\n\n /**\n * @notice Add an approved fee burner to the allowlist.\n * @dev This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol\n * fee burners.\n *\n * @param protocolFeeBurner The address of an approved protocol fee burner to be added\n */\n function addProtocolFeeBurner(IProtocolFeeBurner protocolFeeBurner) external;\n\n /**\n * @notice Remove a fee burner from the allowlist.\n * @dev This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol\n * fee burners.\n *\n * @param protocolFeeBurner The address of a protocol fee burner on the allowlist to be removed\n */\n function removeProtocolFeeBurner(IProtocolFeeBurner protocolFeeBurner) external;\n\n /**\n * @notice Retrieve any tokens \"stuck\" in this contract (e.g., dust, or failed conversions).\n * @dev It will recover the full balance of all the tokens. This can only be called by the `feeRecipient`.\n * @param feeTokens The tokens to recover\n */\n function recoverProtocolFees(IERC20[] memory feeTokens) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\nimport { SwapPathStep } from \"../vault/BatchRouterTypes.sol\";\n\npragma solidity ^0.8.24;\n\ninterface ITokenPairRegistry {\n /**\n * @notice Emitted when a new token pair is added to the registry.\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n * @param pathsLength The number of paths added for the token pair\n */\n event PathAdded(address indexed tokenIn, address indexed tokenOut, uint256 pathsLength);\n\n /**\n * @notice Emitted when an existing token pair is removed from the registry.\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n * @param pathsLength The number of paths associated with the token pair after the removal\n */\n event PathRemoved(address indexed tokenIn, address indexed tokenOut, uint256 pathsLength);\n\n /**\n * @notice The given buffer address does not correspond to an initialized buffer.\n * @param buffer The address of the uninitialized buffer\n */\n error BufferNotInitialized(address buffer);\n\n /// @notice The path to add cannot be empty.\n error EmptyPath();\n\n /**\n * @notice The given address is not a valid pool or buffer.\n * @param path Pool or buffer address\n */\n error InvalidSimplePath(address path);\n\n /**\n * @notice The given pool or buffer is not registered as a path for the token pair.\n * @param poolOrBuffer The address of the pool or buffer\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n */\n error InvalidRemovePath(address poolOrBuffer, address tokenIn, address tokenOut);\n\n /**\n * @notice The output token does not match the expected address in a wrap or unwrap operation.\n * @param buffer The address of the buffer\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n */\n error InvalidBufferPath(address buffer, address tokenIn, address tokenOut);\n\n /// @notice Attempted to remove a path at an index beyond the registered length.\n error IndexOutOfBounds();\n\n /**\n * @notice Returns the path for a given token pair at a specific index.\n * @dev Safe version; reverts if the index is out of bounds.\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n * @param index The index of the path in the list of paths for the token pair\n * @return The path at the specified index for the token pair\n */\n function getPathAt(address tokenIn, address tokenOut, uint256 index) external view returns (SwapPathStep[] memory);\n\n /**\n * @notice Returns the number of paths registered for a given token pair.\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n * @return The number of paths registered for the token pair\n */\n function getPathCount(address tokenIn, address tokenOut) external view returns (uint256);\n\n /**\n * @notice Returns the paths registered for a given token pair.\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n * @return An array of path addresses registered for the token pair\n */\n function getPaths(address tokenIn, address tokenOut) external view returns (SwapPathStep[][] memory);\n\n /**\n * @notice Adds an arbitrary path between `tokenIn` and the last step's `tokenOut` to the registry.\n * @dev This function is permissioned. Use it to register boosted pool paths with leading / trailing buffer steps.\n * The registry will validate that each step is valid (i.e. each pool step contains the `tokenIn` and `tokenOut`,\n * and each buffer step has the correct wrapped / underlying token).\n *\n * @param tokenIn The address of the input token in the pair\n * @param steps An array of `SwapPathStep` structs representing the path steps to reach the output token\n */\n function addPath(address tokenIn, SwapPathStep[] memory steps) external;\n\n /**\n * @notice Adds a pool or buffer to the registry with all token pairs it supports.\n * @dev This function is permissioned.\n * @param poolOrBuffer The address of the pool or buffer\n */\n function addSimplePath(address poolOrBuffer) external;\n\n /**\n * @notice Removes an arbitrary path from the registry at a given index.\n * @dev This function is permissioned.\n * @param tokenIn The address of the input token in the pair\n * @param tokenOut The address of the output token in the pair\n * @param index The index of the path to remove in the list of paths for the token pair\n */\n function removePathAtIndex(address tokenIn, address tokenOut, uint256 index) external;\n\n /**\n * @notice Removes all token paths registered for a given pool or buffer.\n * @dev This function is permissioned.\n * @param poolOrBuffer The address of the pool or buffer\n */\n function removeSimplePath(address poolOrBuffer) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nstruct SwapPathStep {\n address pool;\n IERC20 tokenOut;\n // If true, the \"pool\" is an ERC4626 Buffer. Used to wrap/unwrap tokens if pool doesn't have enough liquidity.\n bool isBuffer;\n}\n\nstruct SwapPathExactAmountIn {\n IERC20 tokenIn;\n // For each step:\n // If tokenIn == pool, use removeLiquidity SINGLE_TOKEN_EXACT_IN.\n // If tokenOut == pool, use addLiquidity UNBALANCED.\n SwapPathStep[] steps;\n uint256 exactAmountIn;\n uint256 minAmountOut;\n}\n\nstruct SwapPathExactAmountOut {\n IERC20 tokenIn;\n // for each step:\n // If tokenIn == pool, use removeLiquidity SINGLE_TOKEN_EXACT_OUT.\n // If tokenOut == pool, use addLiquidity SINGLE_TOKEN_EXACT_OUT.\n SwapPathStep[] steps;\n uint256 maxAmountIn;\n uint256 exactAmountOut;\n}\n\nstruct SwapExactInHookParams {\n address sender;\n SwapPathExactAmountIn[] paths;\n uint256 deadline;\n bool wethIsEth;\n bytes userData;\n}\n\nstruct SwapExactOutHookParams {\n address sender;\n SwapPathExactAmountOut[] paths;\n uint256 deadline;\n bool wethIsEth;\n bytes userData;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Interface to the Vault's permission system.\ninterface IAuthorizer {\n /**\n * @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n * @param actionId Identifier for the action to be performed\n * @param account Account trying to perform the action\n * @param where Target contract for the action\n * @return success True if the action is permitted\n */\n function canPerform(bytes32 actionId, address account, address where) external view returns (bool success);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"../solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @notice Base interface for a Balancer Pool Factory.\n * @dev All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types\n * (e.g., address prediction, tracking deployed pools, and governance-facilitated migration).\n */\ninterface IBasePoolFactory is IAuthentication {\n /**\n * @notice A pool was deployed.\n * @param pool The address of the new pool\n */\n event PoolCreated(address indexed pool);\n\n /// @notice The factory was disabled by governance.\n event FactoryDisabled();\n\n /// @notice Attempted pool creation after the factory was disabled.\n error Disabled();\n\n /// @notice A pool index is beyond the current bounds of the array.\n error IndexOutOfBounds();\n\n /**\n * @notice Check whether a pool was deployed by this factory.\n * @param pool The pool to check\n * @return success True if `pool` was created by this factory\n */\n function isPoolFromFactory(address pool) external view returns (bool success);\n\n /**\n * @notice Return the total number of pools deployed by this factory.\n * @dev This can then be used to \"paginate\" calls to `getPools` to control gas costs.\n * @return poolCount The number of pools deployed by this factory\n */\n function getPoolCount() external view returns (uint256 poolCount);\n\n /**\n * @notice Return a subset of the list of pools deployed by this factory.\n * @dev `start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply\n * stop at the end and return fewer results than requested.\n *\n * @param start The index of the first pool to return\n * @param count The maximum number of pools to return\n * @return pools The list of pools deployed by this factory, starting at `start` and returning up to `count` pools\n */\n function getPoolsInRange(uint256 start, uint256 count) external view returns (address[] memory pools);\n\n /**\n * @notice Return the complete list of pools deployed by this factory.\n * @return pools The list of pools deployed by this factory\n */\n function getPools() external view returns (address[] memory pools);\n\n /**\n * @notice Return the address where a new pool will be deployed, based on the factory address and salt.\n * @param constructorArgs The arguments used to create the pool\n * @param salt The salt used to deploy the pool\n * @return deploymentAddress The predicted address of the pool, given the salt\n */\n function getDeploymentAddress(\n bytes memory constructorArgs,\n bytes32 salt\n ) external view returns (address deploymentAddress);\n\n /**\n * @notice Check whether this factory has been disabled by governance.\n * @return success True if this factory was disabled\n */\n function isDisabled() external view returns (bool success);\n\n /**\n * @notice Disable the factory, preventing the creation of more pools.\n * @dev Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\n */\n function disable() external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n// Explicitly import VaultTypes structs because we expect this interface to be heavily used by external developers.\n// Internally, when this list gets too long, we usually just do a simple import to keep things tidy.\nimport {\n TokenConfig,\n LiquidityManagement,\n PoolSwapParams,\n AfterSwapParams,\n HookFlags,\n AddLiquidityKind,\n RemoveLiquidityKind,\n SwapKind\n} from \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for pool hooks.\n * @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n * they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n * should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n * then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\n */\ninterface IHooks {\n /***************************************************************************\n Register\n ***************************************************************************/\n\n /**\n * @notice Hook executed when a pool is registered with a non-zero hooks contract.\n * @dev Returns true if registration was successful, and false to revert the pool registration.\n * Make sure this function is properly implemented (e.g. check the factory, and check that the\n * given pool is from the factory). The Vault address will be msg.sender.\n *\n * @param factory Address of the pool factory (contract deploying the pool)\n * @param pool Address of the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param liquidityManagement Liquidity management flags indicating which functions are enabled\n * @return success True if the hook allowed the registration, false otherwise\n */\n function onRegister(\n address factory,\n address pool,\n TokenConfig[] memory tokenConfig,\n LiquidityManagement calldata liquidityManagement\n ) external returns (bool success);\n\n /**\n * @notice Return the set of hooks implemented by the contract.\n * @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n * (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n * `onRegister` is the only \"mandatory\" hook.\n *\n * @return hookFlags Flags indicating which hooks the contract supports\n */\n function getHookFlags() external view returns (HookFlags memory hookFlags);\n\n /***************************************************************************\n Initialize\n ***************************************************************************/\n\n /**\n * @notice Hook executed before pool initialization.\n * @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with initialization\n */\n function onBeforeInitialize(uint256[] memory exactAmountsIn, bytes memory userData) external returns (bool success);\n\n /**\n * @notice Hook to be executed after pool initialization.\n * @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param bptAmountOut Amount of pool tokens minted during initialization\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool accepts the initialization results\n */\n function onAfterInitialize(\n uint256[] memory exactAmountsIn,\n uint256 bptAmountOut,\n bytes memory userData\n ) external returns (bool success);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before adding liquidity.\n * @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param maxAmountsInScaled18 Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory maxAmountsInScaled18,\n uint256 minBptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after adding liquidity.\n * @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n * @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n * @param bptAmountOut Amount of pool tokens minted\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook\n */\n function onAfterAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory amountsInScaled18,\n uint256[] memory amountsInRaw,\n uint256 bptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsInRaw);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before removing liquidity.\n * @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOutScaled18,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after removing liquidity.\n * @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param bptAmountIn Amount of pool tokens to burn\n * @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n * @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook\n */\n function onAfterRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 bptAmountIn,\n uint256[] memory amountsOutScaled18,\n uint256[] memory amountsOutRaw,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsOutRaw);\n\n /***************************************************************************\n Swap\n ***************************************************************************/\n\n /**\n * @notice Called before a swap to give the Pool an opportunity to perform actions.\n * @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeSwap(PoolSwapParams calldata params, address pool) external returns (bool success);\n\n /**\n * @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n * @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n * use the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see above for struct definition)\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook\n */\n function onAfterSwap(\n AfterSwapParams calldata params\n ) external returns (bool success, uint256 hookAdjustedAmountCalculatedRaw);\n\n /**\n * @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n * @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n * @return success True if the pool wishes to proceed with settlement\n * @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value\n */\n function onComputeDynamicSwapFeePercentage(\n PoolSwapParams calldata params,\n address pool,\n uint256 staticSwapFeePercentage\n ) external view returns (bool success, uint256 dynamicSwapFeePercentage);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVault } from \"./IVault.sol\";\n\n/// @notice Contract that handles protocol and pool creator fees for the Vault.\ninterface IProtocolFeeController {\n /**\n * @notice Emitted when the protocol swap fee percentage is updated.\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event GlobalProtocolSwapFeePercentageChanged(uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated.\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event GlobalProtocolYieldFeePercentageChanged(uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol swap fee will be changed\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event ProtocolSwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol yield fee will be changed\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event ProtocolYieldFeePercentageChanged(address indexed pool, uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n * @param pool The pool whose pool creator swap fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool\n */\n event PoolCreatorSwapFeePercentageChanged(address indexed pool, uint256 poolCreatorSwapFeePercentage);\n\n /**\n * @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n * @param pool The pool whose pool creator yield fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool\n */\n event PoolCreatorYieldFeePercentageChanged(address indexed pool, uint256 poolCreatorYieldFeePercentage);\n\n /**\n * @notice Logs the collection of protocol swap fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the swap fee was charged\n * @param token The token in which the swap fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolSwapFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the collection of protocol yield fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the yield fee was charged\n * @param token The token in which the yield fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolYieldFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of protocol fees in a specific token and amount.\n * @param pool The pool from which protocol fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds\n * @param amount The amount of the fee token that was withdrawn\n */\n event ProtocolFeesWithdrawn(address indexed pool, IERC20 indexed token, address indexed recipient, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n * @param pool The pool from which pool creator fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n * @param amount The amount of the fee token that was withdrawn\n */\n event PoolCreatorFeesWithdrawn(\n address indexed pool,\n IERC20 indexed token,\n address indexed recipient,\n uint256 amount\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global swap fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateSwapFeePercentage(\n address indexed pool,\n uint256 aggregateSwapFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global yield fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateYieldFeePercentage(\n address indexed pool,\n uint256 aggregateYieldFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\n * @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n * simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n * counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n * @param protocolFeeExempt True if the pool is initially exempt from protocol fees\n */\n event PoolRegisteredWithFeeController(address indexed pool, address indexed poolCreator, bool protocolFeeExempt);\n\n /**\n * @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages.\n */\n error ProtocolSwapFeePercentageTooHigh();\n\n /**\n * @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages.\n */\n error ProtocolYieldFeePercentageTooHigh();\n\n /**\n * @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n * @param pool The pool with no creator\n */\n error PoolCreatorNotRegistered(address pool);\n\n /**\n * @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n * @param caller The account attempting to withdraw pool creator fees\n * @param pool The pool the caller tried to withdraw from\n */\n error CallerIsNotPoolCreator(address caller, address pool);\n\n /// @notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\n error PoolCreatorFeePercentageTooHigh();\n\n /**\n * @notice Get the address of the main Vault contract.\n * @return vault The Vault address\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Collects aggregate fees from the Vault for a given pool.\n * @param pool The pool with aggregate fees\n */\n function collectAggregateFees(address pool) external;\n\n /**\n * @notice Getter for the current global protocol swap fee.\n * @return protocolSwapFeePercentage The global protocol swap fee percentage\n */\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256 protocolSwapFeePercentage);\n\n /**\n * @notice Getter for the current global protocol yield fee.\n * @return protocolYieldFeePercentage The global protocol yield fee percentage\n */\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256 protocolYieldFeePercentage);\n\n /**\n * @notice Getter for pool registration flag.\n * @param pool The address of the pool\n * @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\n */\n function isPoolRegistered(address pool) external view returns (bool);\n\n /**\n * @notice Getter for the current protocol swap fee for a given pool.\n * @param pool The address of the pool\n * @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolSwapFeeInfo(\n address pool\n ) external view returns (uint256 protocolSwapFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current protocol yield fee for a given pool.\n * @param pool The address of the pool\n * @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolYieldFeeInfo(\n address pool\n ) external view returns (uint256 protocolYieldFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current pool creator swap fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\n */\n function getPoolCreatorSwapFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Getter for the current pool creator yield fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\n */\n function getPoolCreatorYieldFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n * @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n * pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n * stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n * It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n * components, but the truncation ensures it will not revert for any valid set of fee percentages.\n *\n * See example below:\n *\n * tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n * totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n * protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n * creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n * creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n * lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n *\n * @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n * @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n * @return aggregateFeePercentage The computed aggregate percentage\n */\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256 aggregateFeePercentage);\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol swap fee\n */\n function updateProtocolSwapFeePercentage(address pool) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol yield fee\n */\n function updateProtocolYieldFeePercentage(address pool) external;\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /**\n * @notice Add pool-specific entries to the protocol swap and yield percentages.\n * @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n * protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n * fee percentages, based on an initial pool creator fee of 0.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n * @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n * @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @return aggregateYieldFeePercentage The initial aggregate yield fee percentage\n */\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice Set the global protocol swap fee percentage, used by standard pools.\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage\n */\n function setGlobalProtocolSwapFeePercentage(uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Set the global protocol yield fee percentage, used by standard pools.\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setGlobalProtocolYieldFeePercentage(uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol swap fee\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool\n */\n function setProtocolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol yield fee\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool\n */\n function setProtocolYieldFeePercentage(address pool, uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator swap fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool\n */\n function setPoolCreatorSwapFeePercentage(address pool, uint256 poolCreatorSwapFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator yield fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool\n */\n function setPoolCreatorYieldFeePercentage(address pool, uint256 poolCreatorYieldFeePercentage) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawProtocolFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n * @param token Token to withdraw\n */\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n * @dev Sends swap and yield pool creator fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawPoolCreatorFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool.\n * @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n * value, this function is permissionless.\n *\n * @param pool The pool on which fees were collected\n */\n function withdrawPoolCreatorFees(address pool) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IBalancerContractRegistry } from \"../standalone-utils/IBalancerContractRegistry.sol\";\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\n\ninterface IProtocolFeePercentagesProvider {\n /**\n * @notice Protocol fee percentages have been set for the given factory.\n * @param factory The pool factory\n * @param protocolSwapFeePercentage The protocol swap fee percentage intended for pools from this factory\n * @param protocolYieldFeePercentage The protocol yield fee percentage intended for pools from this factory\n */\n event FactorySpecificProtocolFeePercentagesSet(\n address indexed factory,\n uint256 protocolSwapFeePercentage,\n uint256 protocolYieldFeePercentage\n );\n\n /// @notice The protocol fee controller was configured with an incorrect Vault address.\n error WrongProtocolFeeControllerDeployment();\n\n /**\n * @notice Fees can only be set on recognized factories (i.e., registered in the `BalancerContractRegistry`).\n * @param factory The address of the unknown factory\n */\n error UnknownFactory(address factory);\n\n /**\n * @notice `setFactorySpecificProtocolFeePercentages` has not been called for this factory address.\n * @dev This error can by thrown by `getFactorySpecificProtocolFeePercentages` or\n * `setProtocolFeePercentagesForPools`, as both require that valid fee percentages have been set.\n * You need to set the factory fees before you can apply them to pools from that factory.\n *\n * @param factory The factory address where fees have not been set\n */\n error FactoryFeesNotSet(address factory);\n\n /**\n * @notice The given pool is not from the expected factory.\n * @dev Occurs when one of the pools supplied to `setProtocolFeePercentagesForPools` is not from the given factory.\n * @param pool The address of the unrecognized pool\n * @param factory The address of the factory\n */\n error PoolNotFromFactory(address pool, address factory);\n\n /**\n * @notice Get the address of the `ProtocolFeeController` used to set fees.\n * @return protocolFeeController The address of the fee controller\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController);\n\n /**\n * @notice Get the address of the `BalancerContractRegistry` used to validate factory contracts.\n * @return balancerContractRegistry The address of the Balancer contract registry\n */\n function getBalancerContractRegistry() external view returns (IBalancerContractRegistry balancerContractRegistry);\n\n /**\n * @notice Query the protocol fee percentages for a given factory.\n * @param factory The address of the factory\n * @return protocolSwapFeePercentage The protocol swap fee percentage set for that factory\n * @return protocolYieldFeePercentage The protocol yield fee percentage set for that factory\n */\n function getFactorySpecificProtocolFeePercentages(\n address factory\n ) external view returns (uint256 protocolSwapFeePercentage, uint256 protocolYieldFeePercentage);\n\n /**\n * @notice Assign intended protocol fee percentages for a given factory.\n * @dev This is a permissioned call. After the fee percentages have been set, and governance has granted\n * this contract permission to set fee percentages on pools, anyone can call `setProtocolFeePercentagesForPools`\n * to update the fee percentages on a set of pools from that factory.\n *\n * @param factory The address of the factory\n * @param protocolSwapFeePercentage The new protocol swap fee percentage\n * @param protocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setFactorySpecificProtocolFeePercentages(\n address factory,\n uint256 protocolSwapFeePercentage,\n uint256 protocolYieldFeePercentage\n ) external;\n\n /**\n * @notice Update the protocol fees for a set of pools from a given factory.\n * @dev This call is permissionless. Anyone can update the fee percentages, once they're set by governance.\n * Note that governance must also grant this contract permission to set protocol fee percentages on pools.\n *\n * @param factory The address of the factory\n * @param pools The pools whose fees will be set according to `setFactorySpecificProtocolFeePercentages`\n */\n function setProtocolFeePercentagesForPools(address factory, address[] memory pools) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVault } from \"./IVault.sol\";\n\nimport { AddLiquidityKind, RemoveLiquidityKind, SwapKind } from \"./VaultTypes.sol\";\n\n/// @notice User-friendly interface to basic Vault operations: swap, add/remove liquidity, and associated queries.\ninterface IRouter {\n /***************************************************************************\n Pool Initialization\n ***************************************************************************/\n\n /**\n * @notice Initialize a liquidity pool.\n * @param pool Address of the liquidity pool\n * @param tokens Pool tokens, in token registration order\n * @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Minimum amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add initial liquidity\n * @return bptAmountOut Actual amount of pool tokens minted in exchange for initial liquidity\n */\n function initialize(\n address pool,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountOut);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Adds liquidity to a pool with proportional token amounts, receiving an exact amount of pool tokens.\n * @param pool Address of the liquidity pool\n * @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n * @param exactBptAmountOut Exact amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return amountsIn Actual amounts of tokens added, sorted in token registration order\n */\n function addLiquidityProportional(\n address pool,\n uint256[] memory maxAmountsIn,\n uint256 exactBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256[] memory amountsIn);\n\n /**\n * @notice Queries an `addLiquidityProportional` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountOut Exact amount of pool tokens to be received\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountsIn Expected amounts of tokens to add, sorted in token registration order\n */\n function queryAddLiquidityProportional(\n address pool,\n uint256 exactBptAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256[] memory amountsIn);\n\n /**\n * @notice Adds liquidity to a pool with arbitrary token amounts.\n * @param pool Address of the liquidity pool\n * @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Minimum amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return bptAmountOut Actual amount of pool tokens received\n */\n function addLiquidityUnbalanced(\n address pool,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountOut);\n\n /**\n * @notice Queries an `addLiquidityUnbalanced` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return bptAmountOut Expected amount of pool tokens to receive\n */\n function queryAddLiquidityUnbalanced(\n address pool,\n uint256[] memory exactAmountsIn,\n address sender,\n bytes memory userData\n ) external returns (uint256 bptAmountOut);\n\n /**\n * @notice Adds liquidity to a pool in a single token, receiving an exact amount of pool tokens.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token used to add liquidity\n * @param maxAmountIn Maximum amount of tokens to be added\n * @param exactBptAmountOut Exact amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return amountIn Actual amount of tokens added\n */\n function addLiquiditySingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n uint256 maxAmountIn,\n uint256 exactBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 amountIn);\n\n /**\n * @notice Queries an `addLiquiditySingleTokenExactOut` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token used to add liquidity\n * @param exactBptAmountOut Expected exact amount of pool tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountIn Expected amount of tokens to add\n */\n function queryAddLiquiditySingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n uint256 exactBptAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 amountIn);\n\n /**\n * @notice Adds liquidity to a pool by donating the amounts in (no BPT out).\n * @dev To support donation, the pool config `enableDonation` flag must be set to true.\n * @param pool Address of the liquidity pool\n * @param amountsIn Amounts of tokens to be donated, sorted in token registration order\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to donate liquidity\n */\n function donate(address pool, uint256[] memory amountsIn, bool wethIsEth, bytes memory userData) external payable;\n\n /**\n * @notice Adds liquidity to a pool with a custom request.\n * @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n * In any case the caller can expect them to be hard boundaries for the request.\n *\n * @param pool Address of the liquidity pool\n * @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Minimum amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return amountsIn Actual amounts of tokens added, sorted in token registration order\n * @return bptAmountOut Actual amount of pool tokens received\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function addLiquidityCustom(\n address pool,\n uint256[] memory maxAmountsIn,\n uint256 minBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /**\n * @notice Queries an `addLiquidityCustom` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Expected minimum amount of pool tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountsIn Expected amounts of tokens to add, sorted in token registration order\n * @return bptAmountOut Expected amount of pool tokens to receive\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function queryAddLiquidityCustom(\n address pool,\n uint256[] memory maxAmountsIn,\n uint256 minBptAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Removes liquidity with proportional token amounts from a pool, burning an exact pool token amount.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return amountsOut Actual amounts of tokens received, sorted in token registration order\n */\n function removeLiquidityProportional(\n address pool,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256[] memory amountsOut);\n\n /**\n * @notice Queries a `removeLiquidityProportional` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided for the query\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n */\n function queryRemoveLiquidityProportional(\n address pool,\n uint256 exactBptAmountIn,\n address sender,\n bytes memory userData\n ) external returns (uint256[] memory amountsOut);\n\n /**\n * @notice Removes liquidity from a pool via a single token, burning an exact pool token amount.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided\n * @param tokenOut Token used to remove liquidity\n * @param minAmountOut Minimum amount of tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return amountOut Actual amount of tokens received\n */\n function removeLiquiditySingleTokenExactIn(\n address pool,\n uint256 exactBptAmountIn,\n IERC20 tokenOut,\n uint256 minAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 amountOut);\n\n /**\n * @notice Queries a `removeLiquiditySingleTokenExactIn` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided for the query\n * @param tokenOut Token used to remove liquidity\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountOut Expected amount of tokens to receive\n */\n function queryRemoveLiquiditySingleTokenExactIn(\n address pool,\n uint256 exactBptAmountIn,\n IERC20 tokenOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 amountOut);\n\n /**\n * @notice Removes liquidity from a pool via a single token, specifying the exact amount of tokens to receive.\n * @param pool Address of the liquidity pool\n * @param maxBptAmountIn Maximum amount of pool tokens provided\n * @param tokenOut Token used to remove liquidity\n * @param exactAmountOut Exact amount of tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return bptAmountIn Actual amount of pool tokens burned\n */\n function removeLiquiditySingleTokenExactOut(\n address pool,\n uint256 maxBptAmountIn,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountIn);\n\n /**\n * @notice Queries a `removeLiquiditySingleTokenExactOut` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenOut Token used to remove liquidity\n * @param exactAmountOut Expected exact amount of tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return bptAmountIn Expected amount of pool tokens to burn\n */\n function queryRemoveLiquiditySingleTokenExactOut(\n address pool,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 bptAmountIn);\n\n /**\n * @notice Removes liquidity from a pool with a custom request.\n * @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n * In any case the caller can expect them to be hard boundaries for the request.\n *\n * @param pool Address of the liquidity pool\n * @param maxBptAmountIn Maximum amount of pool tokens provided\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return bptAmountIn Actual amount of pool tokens burned\n * @return amountsOut Actual amounts of tokens received, sorted in token registration order\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function removeLiquidityCustom(\n address pool,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /**\n * @notice Queries a `removeLiquidityCustom` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param maxBptAmountIn Maximum amount of pool tokens provided\n * @param minAmountsOut Expected minimum amounts of tokens to receive, sorted in token registration order\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return bptAmountIn Expected amount of pool tokens to burn\n * @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function queryRemoveLiquidityCustom(\n address pool,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /**\n * @notice Removes liquidity proportionally, burning an exact pool token amount. Only available in Recovery Mode.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @return amountsOut Actual amounts of tokens received, sorted in token registration order\n */\n function removeLiquidityRecovery(\n address pool,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external payable returns (uint256[] memory amountsOut);\n\n /**\n * @notice Queries a `removeLiquidityRecovery` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided for the query\n * @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n */\n function queryRemoveLiquidityRecovery(\n address pool,\n uint256 exactBptAmountIn\n ) external returns (uint256[] memory amountsOut);\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Executes a swap operation specifying an exact input token amount.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountIn Exact amounts of input tokens to send\n * @param minAmountOut Minimum amount of tokens to be received\n * @param deadline Deadline for the swap, after which it will revert\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the swap request\n * @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens\n */\n function swapSingleTokenExactIn(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountIn,\n uint256 minAmountOut,\n uint256 deadline,\n bool wethIsEth,\n bytes calldata userData\n ) external payable returns (uint256 amountOut);\n\n /**\n * @notice Queries a swap operation specifying an exact input token amount without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountIn Exact amounts of input tokens to send\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens\n */\n function querySwapSingleTokenExactIn(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountIn,\n address sender,\n bytes calldata userData\n ) external returns (uint256 amountOut);\n\n /**\n * @notice Executes a swap operation specifying an exact output token amount.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountOut Exact amounts of input tokens to receive\n * @param maxAmountIn Maximum amount of tokens to be sent\n * @param deadline Deadline for the swap, after which it will revert\n * @param userData Additional (optional) data sent with the swap request\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens\n */\n function swapSingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n uint256 maxAmountIn,\n uint256 deadline,\n bool wethIsEth,\n bytes calldata userData\n ) external payable returns (uint256 amountIn);\n\n /**\n * @notice Queries a swap operation specifying an exact output token amount without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountOut Exact amounts of input tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens\n */\n function querySwapSingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n address sender,\n bytes calldata userData\n ) external returns (uint256 amountIn);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"../solidity-utils/helpers/IAuthentication.sol\";\nimport { IVaultExtension } from \"./IVaultExtension.sol\";\nimport { IVaultErrors } from \"./IVaultErrors.sol\";\nimport { IVaultEvents } from \"./IVaultEvents.sol\";\nimport { IVaultAdmin } from \"./IVaultAdmin.sol\";\nimport { IVaultMain } from \"./IVaultMain.sol\";\n\n/// @notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\ninterface IVault is IVaultMain, IVaultExtension, IVaultAdmin, IVaultErrors, IVaultEvents, IAuthentication {\n /// @return vault The main Vault address.\n function vault() external view override(IVaultAdmin, IVaultExtension) returns (IVault);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IVault } from \"./IVault.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultAdmin` contract.\n * @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n * as two delegate calls add gas to each call. Most of the permissioned calls are here.\n */\ninterface IVaultAdmin {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the Vault's pause window end time.\n * @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n * by governance. Balancer timestamps are 32 bits.\n *\n * @return pauseWindowEndTime The timestamp when the Vault's pause window ends\n */\n function getPauseWindowEndTime() external view returns (uint32 pauseWindowEndTime);\n\n /**\n * @notice Returns the Vault's buffer period duration.\n * @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n * This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodDuration The length of the buffer period in seconds\n */\n function getBufferPeriodDuration() external view returns (uint32 bufferPeriodDuration);\n\n /**\n * @notice Returns the Vault's buffer period end time.\n * @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused\n */\n function getBufferPeriodEndTime() external view returns (uint32 bufferPeriodEndTime);\n\n /**\n * @notice Get the minimum number of tokens in a pool.\n * @dev We expect the vast majority of pools to be 2-token.\n * @return minTokens The minimum token count of a pool\n */\n function getMinimumPoolTokens() external pure returns (uint256 minTokens);\n\n /**\n * @notice Get the maximum number of tokens in a pool.\n * @return maxTokens The maximum token count of a pool\n */\n function getMaximumPoolTokens() external pure returns (uint256 maxTokens);\n\n /**\n * @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n * @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n * is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n *\n * @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization\n */\n function getPoolMinimumTotalSupply() external pure returns (uint256 poolMinimumTotalSupply);\n\n /**\n * @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n * @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n * of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n * to the Vault, as buffers are not tokenized.\n *\n * @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization\n */\n function getBufferMinimumTotalSupply() external pure returns (uint256 bufferMinimumTotalSupply);\n\n /**\n * @notice Get the minimum trade amount in a pool operation.\n * @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n * @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number\n */\n function getMinimumTradeAmount() external view returns (uint256 minimumTradeAmount);\n\n /**\n * @notice Get the minimum wrap amount in a buffer operation.\n * @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n * @return minimumWrapAmount The minimum wrap amount in native underlying token decimals\n */\n function getMinimumWrapAmount() external view returns (uint256 minimumWrapAmount);\n\n /*******************************************************************************\n Vault Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault is paused.\n * @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n * ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n * also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n * `areBuffersPaused` to check the pause state of the buffers.\n *\n * @return vaultPaused True if the Vault is paused\n */\n function isVaultPaused() external view returns (bool vaultPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n * @dev Balancer timestamps are 32 bits.\n * @return vaultPaused True if the Vault is paused\n * @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n * @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period\n */\n function getVaultPausedState()\n external\n view\n returns (bool vaultPaused, uint32 vaultPauseWindowEndTime, uint32 vaultBufferPeriodEndTime);\n\n /**\n * @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n * @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n * Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n * the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n * are also paused (with `pauseVaultBuffers`).\n */\n function pauseVault() external;\n\n /**\n * @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n * deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n * `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\n */\n function unpauseVault() external;\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Pause the Pool: an emergency action which disables all pool functions.\n * @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n * deployment.\n *\n * @param pool The pool being paused\n */\n function pausePool(address pool) external;\n\n /**\n * @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n * deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n *\n * @param pool The pool being unpaused\n */\n function unpausePool(address pool) external;\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Assigns a new static swap fee percentage to the specified pool.\n * @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n * the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n * Emits the SwapFeePercentageChanged event.\n *\n * @param pool The address of the pool for which the static swap fee will be changed\n * @param swapFeePercentage The new swap fee percentage to apply to the pool\n */\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) external;\n\n /**\n * @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n * @dev Fees are sent to the ProtocolFeeController address.\n * @param pool The pool on which all aggregate fees should be collected\n * @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function collectAggregateFees(\n address pool\n ) external returns (uint256[] memory swapFeeAmounts, uint256[] memory yieldFeeAmounts);\n\n /**\n * @notice Update an aggregate swap fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateSwapFeePercentageChanged` event.\n *\n * @param pool The pool whose swap fee percentage will be updated\n * @param newAggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n function updateAggregateSwapFeePercentage(address pool, uint256 newAggregateSwapFeePercentage) external;\n\n /**\n * @notice Update an aggregate yield fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateYieldFeePercentageChanged` event.\n *\n * @param pool The pool whose yield fee percentage will be updated\n * @param newAggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n function updateAggregateYieldFeePercentage(address pool, uint256 newAggregateYieldFeePercentage) external;\n\n /**\n * @notice Sets a new Protocol Fee Controller for the Vault.\n * @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n * @param newProtocolFeeController The address of the new Protocol Fee Controller\n */\n function setProtocolFeeController(IProtocolFeeController newProtocolFeeController) external;\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Enable recovery mode for a pool.\n * @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n * Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n * must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n * balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n *\n * @param pool The address of the pool\n */\n function enableRecoveryMode(address pool) external;\n\n /**\n * @notice Disable recovery mode for a pool.\n * @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n * Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n * potentially fail if there is an issue with any associated Rate Providers.\n *\n * @param pool The address of the pool\n */\n function disableRecoveryMode(address pool) external;\n\n /*******************************************************************************\n Query Functionality\n *******************************************************************************/\n\n /**\n * @notice Disables query functionality on the Vault. Can only be called by governance.\n * @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n * settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n * queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n * This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n * disabling queries is completely necessary; queries can still be re-enabled after this call.\n */\n function disableQuery() external;\n\n /**\n * @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n * @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\n */\n function disableQueryPermanently() external;\n\n /**\n * @notice Enables query functionality on the Vault. Can only be called by governance.\n * @dev Only works if queries are not permanently disabled.\n */\n function enableQuery() external;\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault buffers are paused.\n * @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n * will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n * independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n * would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n *\n * @return buffersPaused True if the Vault buffers are paused\n */\n function areBuffersPaused() external view returns (bool buffersPaused);\n\n /**\n * @notice Pauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n * possible to pause vault buffers individually.\n *\n * This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n * and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n * buffers, and vice versa.\n */\n function pauseVaultBuffers() external;\n\n /**\n * @notice Unpauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n * If the Vault was also paused, it will remain in that state until explicitly unpaused.\n *\n * This is a permissioned call.\n */\n function unpauseVaultBuffers() external;\n\n /**\n * @notice Initializes buffer for the given wrapped token.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n * @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n * @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n * native decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n * (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\n */\n function initializeBuffer(\n IERC4626 wrappedToken,\n uint256 amountUnderlyingRaw,\n uint256 amountWrappedRaw,\n uint256 minIssuedShares,\n address sharesOwner\n ) external returns (uint256 issuedShares);\n\n /**\n * @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n * @dev The buffer needs to be initialized beforehand.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n * underlying token native decimals\n * @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n * token native decimals\n * @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n * in underlying token decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n * @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer\n */\n function addLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 maxAmountUnderlyingInRaw,\n uint256 maxAmountWrappedInRaw,\n uint256 exactSharesToIssue,\n address sharesOwner\n ) external returns (uint256 amountUnderlyingRaw, uint256 amountWrappedRaw);\n\n /**\n * @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n * @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n * This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n *\n * Pre-conditions:\n * - The buffer needs to be initialized.\n * - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n * this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n * - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n * total shares. It is expressed in underlying token native decimals\n * @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n * in underlying token native decimals\n * @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n * wrapped token native decimals\n * @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n * @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user\n */\n function removeLiquidityFromBuffer(\n IERC4626 wrappedToken,\n uint256 sharesToRemove,\n uint256 minAmountUnderlyingOutRaw,\n uint256 minAmountWrappedOutRaw\n ) external returns (uint256 removedUnderlyingBalanceRaw, uint256 removedWrappedBalanceRaw);\n\n /**\n * @notice Returns the asset registered for a given wrapped token.\n * @dev The asset can never change after buffer initialization.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n * has not been initialized.\n */\n function getBufferAsset(IERC4626 wrappedToken) external view returns (address underlyingToken);\n\n /**\n * @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n * in the buffer.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n * @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals\n */\n function getBufferOwnerShares(\n IERC4626 wrappedToken,\n address liquidityOwner\n ) external view returns (uint256 ownerShares);\n\n /**\n * @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals\n */\n function getBufferTotalShares(IERC4626 wrappedToken) external view returns (uint256 bufferShares);\n\n /**\n * @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n * @dev All values are in native token decimals of the wrapped or underlying tokens.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n * @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals\n */\n function getBufferBalance(\n IERC4626 wrappedToken\n ) external view returns (uint256 underlyingBalanceRaw, uint256 wrappedBalanceRaw);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Sets a new Authorizer for the Vault.\n * @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n * @param newAuthorizer The address of the new authorizer\n */\n function setAuthorizer(IAuthorizer newAuthorizer) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Errors are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultErrors {\n /*******************************************************************************\n Registration and Initialization\n *******************************************************************************/\n\n /**\n * @notice A pool has already been registered. `registerPool` may only be called once.\n * @param pool The already registered pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /**\n * @notice A pool has already been initialized. `initialize` may only be called once.\n * @param pool The already initialized pool\n */\n error PoolAlreadyInitialized(address pool);\n\n /**\n * @notice A pool has not been registered.\n * @param pool The unregistered pool\n */\n error PoolNotRegistered(address pool);\n\n /**\n * @notice A referenced pool has not been initialized.\n * @param pool The uninitialized pool\n */\n error PoolNotInitialized(address pool);\n\n /**\n * @notice A hook contract rejected a pool on registration.\n * @param poolHooksContract Address of the hook contract that rejected the pool registration\n * @param pool Address of the rejected pool\n * @param poolFactory Address of the pool factory\n */\n error HookRegistrationFailed(address poolHooksContract, address pool, address poolFactory);\n\n /**\n * @notice A token was already registered (i.e., it is a duplicate in the pool).\n * @param token The duplicate token\n */\n error TokenAlreadyRegistered(IERC20 token);\n\n /// @notice The token count is below the minimum allowed.\n error MinTokens();\n\n /// @notice The token count is above the maximum allowed.\n error MaxTokens();\n\n /// @notice Invalid tokens (e.g., zero) cannot be registered.\n error InvalidToken();\n\n /// @notice The token type given in a TokenConfig during pool registration is invalid.\n error InvalidTokenType();\n\n /// @notice The data in a TokenConfig struct is inconsistent or unsupported.\n error InvalidTokenConfiguration();\n\n /// @notice Tokens with more than 18 decimals are not supported.\n error InvalidTokenDecimals();\n\n /**\n * @notice The token list passed into an operation does not match the pool tokens in the pool.\n * @param pool Address of the pool\n * @param expectedToken The correct token at a given index in the pool\n * @param actualToken The actual token found at that index\n */\n error TokensMismatch(address pool, address expectedToken, address actualToken);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /// @notice A transient accounting operation completed with outstanding token deltas.\n error BalanceNotSettled();\n\n /// @notice A user called a Vault function (swap, add/remove liquidity) outside the lock context.\n error VaultIsNotUnlocked();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error DynamicSwapFeeHookFailed();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error BeforeSwapHookFailed();\n\n /// @notice The pool has returned false to the afterSwap hook, indicating the transaction should revert.\n error AfterSwapHookFailed();\n\n /// @notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\n error BeforeInitializeHookFailed();\n\n /// @notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\n error AfterInitializeHookFailed();\n\n /// @notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\n error BeforeAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\n error AfterAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\n error BeforeRemoveLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\n error AfterRemoveLiquidityHookFailed();\n\n /// @notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\n error RouterNotTrusted();\n\n /*******************************************************************************\n Swaps\n *******************************************************************************/\n\n /// @notice The user tried to swap zero tokens.\n error AmountGivenZero();\n\n /// @notice The user attempted to swap a token for itself.\n error CannotSwapSameToken();\n\n /**\n * @notice The user attempted to operate with a token that is not in the pool.\n * @param token The unregistered token\n */\n error TokenNotRegistered(IERC20 token);\n\n /**\n * @notice An amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error SwapLimit(uint256 amount, uint256 limit);\n\n /**\n * @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error HookAdjustedSwapLimit(uint256 amount, uint256 limit);\n\n /// @notice The amount given or calculated for an operation is below the minimum limit.\n error TradeAmountTooSmall();\n\n /*******************************************************************************\n Add Liquidity\n *******************************************************************************/\n\n /// @notice Add liquidity kind not supported.\n error InvalidAddLiquidityKind();\n\n /**\n * @notice A required amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error AmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error BptAmountOutBelowMin(uint256 amountOut, uint256 minAmountOut);\n\n /// @notice Pool does not support adding liquidity with a customized input.\n error DoesNotSupportAddLiquidityCustom();\n\n /// @notice Pool does not support adding liquidity through donation.\n error DoesNotSupportDonation();\n\n /*******************************************************************************\n Remove Liquidity\n *******************************************************************************/\n\n /// @notice Remove liquidity kind not supported.\n error InvalidRemoveLiquidityKind();\n\n /**\n * @notice The actual amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error AmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n * @param amountIn The total BPT amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error BptAmountInAboveMax(uint256 amountIn, uint256 maxAmountIn);\n\n /// @notice Pool does not support removing liquidity with a customized input.\n error DoesNotSupportRemoveLiquidityCustom();\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Error raised when there is an overflow in the fee calculation.\n * @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n * (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n * percentages in the Vault.\n */\n error ProtocolFeesExceedTotalCollected();\n\n /**\n * @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is below the minimum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooLow();\n\n /**\n * @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is above the maximum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooHigh();\n\n /**\n * @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n * @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n * precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n * corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n * Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n * the aggregate fee calculated here and that stored in the Vault.\n */\n error FeePrecisionTooHigh();\n\n /// @notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\n error PercentageAboveMax();\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /// @notice A user tried to execute a query operation when they were disabled.\n error QueriesDisabled();\n\n /// @notice An admin tried to re-enable queries, but they were disabled permanently.\n error QueriesDisabledPermanently();\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Cannot enable recovery mode when already enabled.\n * @param pool The pool\n */\n error PoolInRecoveryMode(address pool);\n\n /**\n * @notice Cannot disable recovery mode when not enabled.\n * @param pool The pool\n */\n error PoolNotInRecoveryMode(address pool);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n * @param sender The account attempting to call a permissioned function\n */\n error SenderIsNotVault(address sender);\n\n /*******************************************************************************\n Pausing\n *******************************************************************************/\n\n /// @notice The caller specified a pause window period longer than the maximum.\n error VaultPauseWindowDurationTooLarge();\n\n /// @notice The caller specified a buffer period longer than the maximum.\n error PauseBufferPeriodDurationTooLarge();\n\n /// @notice A user tried to perform an operation while the Vault was paused.\n error VaultPaused();\n\n /// @notice Governance tried to unpause the Vault when it was not paused.\n error VaultNotPaused();\n\n /// @notice Governance tried to pause the Vault after the pause period expired.\n error VaultPauseWindowExpired();\n\n /**\n * @notice A user tried to perform an operation involving a paused Pool.\n * @param pool The paused pool\n */\n error PoolPaused(address pool);\n\n /**\n * @notice Governance tried to unpause the Pool when it was not paused.\n * @param pool The unpaused pool\n */\n error PoolNotPaused(address pool);\n\n /**\n * @notice Governance tried to pause a Pool after the pause period expired.\n * @param pool The pool\n */\n error PoolPauseWindowExpired(address pool);\n\n /*******************************************************************************\n ERC4626 token buffers\n *******************************************************************************/\n\n /**\n * @notice The buffer for the given wrapped token was already initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferAlreadyInitialized(IERC4626 wrappedToken);\n\n /**\n * @notice The buffer for the given wrapped token was not initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferNotInitialized(IERC4626 wrappedToken);\n\n /// @notice The user is trying to remove more than their allocated shares from the buffer.\n error NotEnoughBufferShares();\n\n /**\n * @notice The wrapped token asset does not match the underlying token.\n * @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n * Legitimate wrapper contracts should make the asset a constant or immutable value.\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n * @param underlyingToken The underlying token returned by `asset`\n */\n error WrongUnderlyingToken(IERC4626 wrappedToken, address underlyingToken);\n\n /**\n * @notice A wrapped token reported the zero address as its underlying token asset.\n * @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n * re-initialize the buffer).\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error InvalidUnderlyingToken(IERC4626 wrappedToken);\n\n /**\n * @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error WrapAmountTooSmall(IERC4626 wrappedToken);\n\n /// @notice Buffer operation attempted while vault buffers are paused.\n error VaultBuffersArePaused();\n\n /// @notice Buffer shares were minted to the zero address.\n error BufferSharesInvalidReceiver();\n\n /// @notice Buffer shares were burned from the zero address.\n error BufferSharesInvalidOwner();\n\n /**\n * @notice The total supply of a buffer can't be lower than the absolute minimum.\n * @param totalSupply The total supply value that was below the minimum\n */\n error BufferTotalSupplyTooLow(uint256 totalSupply);\n\n /// @dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\n error NotEnoughUnderlying(IERC4626 wrappedToken, uint256 expectedUnderlyingAmount, uint256 actualUnderlyingAmount);\n\n /// @dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\n error NotEnoughWrapped(IERC4626 wrappedToken, uint256 expectedWrappedAmount, uint256 actualWrappedAmount);\n\n /// @dev Shares issued during initialization are below the requested amount.\n error IssuedSharesBelowMin(uint256 issuedShares, uint256 minIssuedShares);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /// @notice Pool does not support adding / removing liquidity with an unbalanced input.\n error DoesNotSupportUnbalancedLiquidity();\n\n /// @notice The contract should not receive ETH.\n error CannotReceiveEth();\n\n /**\n * @notice The `VaultExtension` contract was called by an account directly.\n * @dev It can only be called by the Vault via delegatecall.\n */\n error NotVaultDelegateCall();\n\n /// @notice The `VaultExtension` contract was configured with an incorrect Vault address.\n error WrongVaultExtensionDeployment();\n\n /// @notice The `ProtocolFeeController` contract was configured with an incorrect Vault address.\n error WrongProtocolFeeControllerDeployment();\n\n /// @notice The `VaultAdmin` contract was configured with an incorrect Vault address.\n error WrongVaultAdminDeployment();\n\n /// @notice Quote reverted with a reserved error code.\n error QuoteResultSpoofed();\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/// @dev Events are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultEvents {\n /**\n * @notice A Pool was registered by calling `registerPool`.\n * @param pool The pool being registered\n * @param factory The factory creating the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The static swap fee of the pool\n * @param pauseWindowEndTime The pool's pause window end time\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n * @param liquidityManagement Supported liquidity management hook flags\n */\n event PoolRegistered(\n address indexed pool,\n address indexed factory,\n TokenConfig[] tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n PoolRoleAccounts roleAccounts,\n HooksConfig hooksConfig,\n LiquidityManagement liquidityManagement\n );\n\n /**\n * @notice A Pool was initialized by calling `initialize`.\n * @param pool The pool being initialized\n */\n event PoolInitialized(address indexed pool);\n\n /**\n * @notice A swap has occurred.\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountIn Number of tokenIn tokens\n * @param amountOut Number of tokenOut tokens\n * @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n * @param swapFeeAmount Swap fee amount paid\n */\n event Swap(\n address indexed pool,\n IERC20 indexed tokenIn,\n IERC20 indexed tokenOut,\n uint256 amountIn,\n uint256 amountOut,\n uint256 swapFeePercentage,\n uint256 swapFeeAmount\n );\n\n /**\n * @notice A wrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param depositedUnderlying Number of underlying tokens deposited\n * @param mintedShares Number of shares (wrapped tokens) minted\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Wrap(\n IERC4626 indexed wrappedToken,\n uint256 depositedUnderlying,\n uint256 mintedShares,\n bytes32 bufferBalances\n );\n\n /**\n * @notice An unwrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param burnedShares Number of shares (wrapped tokens) burned\n * @param withdrawnUnderlying Number of underlying tokens withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Unwrap(\n IERC4626 indexed wrappedToken,\n uint256 burnedShares,\n uint256 withdrawnUnderlying,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Liquidity has been added to a pool (including initialization).\n * @param pool The pool with liquidity added\n * @param liquidityProvider The user performing the operation\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityAdded(\n address indexed pool,\n address indexed liquidityProvider,\n AddLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsAddedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice Liquidity has been removed from a pool.\n * @param pool The pool with liquidity removed\n * @param liquidityProvider The user performing the operation\n * @param kind The remove liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityRemoved(\n address indexed pool,\n address indexed liquidityProvider,\n RemoveLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsRemovedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice The Vault's pause status has changed.\n * @param paused True if the Vault was paused\n */\n event VaultPausedStateChanged(bool paused);\n\n /// @notice `disableQuery` has been called on the Vault, disabling query functionality.\n event VaultQueriesDisabled();\n\n /// @notice `enableQuery` has been called on the Vault, enabling query functionality.\n event VaultQueriesEnabled();\n\n /**\n * @notice A Pool's pause status has changed.\n * @param pool The pool that was just paused or unpaused\n * @param paused True if the pool was paused\n */\n event PoolPausedStateChanged(address indexed pool, bool paused);\n\n /**\n * @notice Emitted when the swap fee percentage of a pool is updated.\n * @param swapFeePercentage The new swap fee percentage for the pool\n */\n event SwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Recovery mode has been enabled or disabled for a pool.\n * @param pool The pool\n * @param recoveryMode True if recovery mode was enabled\n */\n event PoolRecoveryModeStateChanged(address indexed pool, bool recoveryMode);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate swap fee percentage changed\n * @param aggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n event AggregateSwapFeePercentageChanged(address indexed pool, uint256 aggregateSwapFeePercentage);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate yield fee percentage changed\n * @param aggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n event AggregateYieldFeePercentageChanged(address indexed pool, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice A new authorizer is set by `setAuthorizer`.\n * @param newAuthorizer The address of the new authorizer\n */\n event AuthorizerChanged(IAuthorizer indexed newAuthorizer);\n\n /**\n * @notice A new protocol fee controller is set by `setProtocolFeeController`.\n * @param newProtocolFeeController The address of the new protocol fee controller\n */\n event ProtocolFeeControllerChanged(IProtocolFeeController indexed newProtocolFeeController);\n\n /**\n * @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was deposited\n * @param amountWrapped The amount of the wrapped token that was deposited\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityAddedToBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param to The owner of the minted shares\n * @param issuedShares The amount of \"internal BPT\" shares created\n */\n event BufferSharesMinted(IERC4626 indexed wrappedToken, address indexed to, uint256 issuedShares);\n\n /**\n * @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param from The owner of the burned shares\n * @param burnedShares The amount of \"internal BPT\" shares burned\n */\n event BufferSharesBurned(IERC4626 indexed wrappedToken, address indexed from, uint256 burnedShares);\n\n /**\n * @notice Liquidity was removed from an ERC4626 buffer.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was withdrawn\n * @param amountWrapped The amount of the wrapped token that was withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityRemovedFromBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice The Vault buffers pause status has changed.\n * @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n * set to true) will revert.\n *\n * @param paused True if the Vault buffers were paused\n */\n event VaultBuffersPausedStateChanged(bool paused);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param pool Pool address\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n event VaultAuxiliary(address indexed pool, bytes32 indexed eventKey, bytes eventData);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IVault } from \"./IVault.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultExtension` contract.\n * @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n * the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n * liquidity operations.\n */\ninterface IVaultExtension {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the VaultAdmin contract address.\n * @dev The VaultAdmin contract mostly implements permissioned functions.\n * @return vaultAdmin The address of the Vault admin\n */\n function getVaultAdmin() external view returns (address vaultAdmin);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n * @dev The Vault must be unlocked to perform state-changing liquidity operations.\n * @return unlocked True if the Vault is unlocked, false otherwise\n */\n function isUnlocked() external view returns (bool unlocked);\n\n /**\n * @notice Returns the count of non-zero deltas.\n * @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`\n */\n function getNonzeroDeltaCount() external view returns (uint256 nonzeroDeltaCount);\n\n /**\n * @notice Retrieves the token delta for a specific token.\n * @dev This function allows reading the value from the `_tokenDeltas` mapping.\n * @param token The token for which the delta is being fetched\n * @return tokenDelta The delta of the specified token\n */\n function getTokenDelta(IERC20 token) external view returns (int256 tokenDelta);\n\n /**\n * @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n * @param token The token for which to retrieve the reserve\n * @return reserveAmount The amount of reserves for the given token\n */\n function getReservesOf(IERC20 token) external view returns (uint256 reserveAmount);\n\n /**\n * @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n * same pool).\n * @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n * layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n * is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n * It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n * than a simple swap for every pool type.\n *\n * @param pool Address of the pool to check\n * @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n \n * Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\n */\n function getAddLiquidityCalledFlag(address pool) external view returns (bool liquidityAdded);\n\n /*******************************************************************************\n Pool Registration\n *******************************************************************************/\n\n /**\n * @notice Registers a pool, associating it with its factory and the tokens it manages.\n * @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n * by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n * additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n * pool will automatically unpause. Balancer timestamps are 32 bits.\n *\n * A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n * multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n * the Vault.\n *\n * If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n * authorizer.\n *\n * @param pool The address of the pool being registered\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The initial static swap fee percentage of the pool\n * @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n * @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param poolHooksContract Contract that implements the hooks for the pool\n * @param liquidityManagement Liquidity management flags with implemented methods\n */\n function registerPool(\n address pool,\n TokenConfig[] memory tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n bool protocolFeeExempt,\n PoolRoleAccounts calldata roleAccounts,\n address poolHooksContract,\n LiquidityManagement calldata liquidityManagement\n ) external;\n\n /**\n * @notice Checks whether a pool is registered.\n * @param pool Address of the pool to check\n * @return registered True if the pool is registered, false otherwise\n */\n function isPoolRegistered(address pool) external view returns (bool registered);\n\n /**\n * @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n * @param pool Address of the pool to initialize\n * @param to Address that will receive the output BPT\n * @param tokens Tokens used to seed the pool (must match the registered tokens)\n * @param exactAmountsIn Exact amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param userData Additional (optional) data required for adding initial liquidity\n * @return bptAmountOut Output pool token amount\n */\n function initialize(\n address pool,\n address to,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bytes memory userData\n ) external returns (uint256 bptAmountOut);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is initialized.\n * @dev An initialized pool can be considered registered as well.\n * @param pool Address of the pool to check\n * @return initialized True if the pool is initialized, false otherwise\n */\n function isPoolInitialized(address pool) external view returns (bool initialized);\n\n /**\n * @notice Gets the tokens registered to a pool.\n * @param pool Address of the pool\n * @return tokens List of tokens in the pool\n */\n function getPoolTokens(address pool) external view returns (IERC20[] memory tokens);\n\n /**\n * @notice Gets pool token rates.\n * @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n * registration order.\n *\n * @param pool Address of the pool\n * @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. FP(1) for 18-decimal tokens\n * @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n */\n function getPoolTokenRates(\n address pool\n ) external view returns (uint256[] memory decimalScalingFactors, uint256[] memory tokenRates);\n\n /**\n * @notice Returns comprehensive pool data for the given pool.\n * @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n * @param pool The address of the pool\n * @return poolData The `PoolData` result\n */\n function getPoolData(address pool) external view returns (PoolData memory poolData);\n\n /**\n * @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n * @param pool Address of the pool\n * @return tokens The pool tokens, sorted in registration order\n * @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n * @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n * @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order\n */\n function getPoolTokenInfo(\n address pool\n )\n external\n view\n returns (\n IERC20[] memory tokens,\n TokenInfo[] memory tokenInfo,\n uint256[] memory balancesRaw,\n uint256[] memory lastBalancesLiveScaled18\n );\n\n /**\n * @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n * registration order.\n *\n * @param pool Address of the pool\n * @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n */\n function getCurrentLiveBalances(address pool) external view returns (uint256[] memory balancesLiveScaled18);\n\n /**\n * @notice Gets the configuration parameters of a pool.\n * @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n * @param pool Address of the pool\n * @return poolConfig The pool configuration as a `PoolConfig` struct\n */\n function getPoolConfig(address pool) external view returns (PoolConfig memory poolConfig);\n\n /**\n * @notice Gets the hooks configuration parameters of a pool.\n * @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n * @param pool Address of the pool\n * @return hooksConfig The hooks configuration as a `HooksConfig` struct\n */\n function getHooksConfig(address pool) external view returns (HooksConfig memory hooksConfig);\n\n /**\n * @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n * @param pool Address of the pool\n * @return rate BPT rate\n */\n function getBptRate(address pool) external view returns (uint256 rate);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Gets the total supply of a given ERC20 token.\n * @param token The token address\n * @return tokenTotalSupply Total supply of the token\n */\n function totalSupply(address token) external view returns (uint256 tokenTotalSupply);\n\n /**\n * @notice Gets the balance of an account for a given ERC20 token.\n * @param token Address of the token\n * @param account Address of the account\n * @return tokenBalance Token balance of the account\n */\n function balanceOf(address token, address account) external view returns (uint256 tokenBalance);\n\n /**\n * @notice Gets the allowance of a spender for a given ERC20 token and owner.\n * @param token Address of the token\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @return tokenAllowance Amount of tokens the spender is allowed to spend\n */\n function allowance(address token, address owner, address spender) external view returns (uint256 tokenAllowance);\n\n /**\n * @notice Approves a spender to spend pool tokens on behalf of sender.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @param amount Amount of tokens to approve\n * @return success True if successful, false otherwise\n */\n function approve(address owner, address spender, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether a pool is paused.\n * @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n * @param pool The pool to be checked\n * @return poolPaused True if the pool is paused\n */\n function isPoolPaused(address pool) external view returns (bool poolPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n * @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n * the buffer period. Balancer timestamps are 32 bits.\n *\n * @param pool The pool whose data is requested\n * @return poolPaused True if the Pool is paused\n * @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n * @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n * @return pauseManager The pause manager, or the zero address\n */\n function getPoolPausedState(\n address pool\n )\n external\n view\n returns (bool poolPaused, uint32 poolPauseWindowEndTime, uint32 poolBufferPeriodEndTime, address pauseManager);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Checks if the wrapped token has an initialized buffer in the Vault.\n * @dev An initialized buffer should have an asset registered in the Vault.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return isBufferInitialized True if the ERC4626 buffer is initialized\n */\n function isERC4626BufferInitialized(IERC4626 wrappedToken) external view returns (bool isBufferInitialized);\n\n /**\n * @notice Gets the registered asset for a given buffer.\n * @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n * should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n * the Vault on initialization.\n *\n * @param wrappedToken The wrapped token specifying the buffer\n * @return asset The underlying asset of the wrapped token\n */\n function getERC4626BufferAsset(IERC4626 wrappedToken) external view returns (address asset);\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return swapFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateSwapFeeAmount(address pool, IERC20 token) external view returns (uint256 swapFeeAmount);\n\n /**\n * @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return yieldFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateYieldFeeAmount(address pool, IERC20 token) external view returns (uint256 yieldFeeAmount);\n\n /**\n * @notice Fetches the static swap fee percentage for a given pool.\n * @param pool The address of the pool whose static swap fee percentage is being queried\n * @return swapFeePercentage The current static swap fee percentage for the specified pool\n */\n function getStaticSwapFeePercentage(address pool) external view returns (uint256 swapFeePercentage);\n\n /**\n * @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n * @param pool The address of the pool whose roles are being queried\n * @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)\n */\n function getPoolRoleAccounts(address pool) external view returns (PoolRoleAccounts memory roleAccounts);\n\n /**\n * @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n * @dev Reverts if the hook doesn't return the success flag set to `true`.\n * @param pool The pool\n * @param swapParams The swap parameters used to compute the fee\n * @return dynamicSwapFeePercentage The dynamic swap fee percentage\n */\n function computeDynamicSwapFeePercentage(\n address pool,\n PoolSwapParams memory swapParams\n ) external view returns (uint256 dynamicSwapFeePercentage);\n\n /**\n * @notice Returns the Protocol Fee Controller address.\n * @return protocolFeeController Address of the ProtocolFeeController\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController);\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is in Recovery Mode.\n * @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n * @param pool Address of the pool to check\n * @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise\n */\n function isPoolInRecoveryMode(address pool) external view returns (bool inRecoveryMode);\n\n /**\n * @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n * The request is implemented by the Vault without any interaction with the pool, ensuring that\n * it works the same for all pools, and cannot be disabled by a new pool type.\n *\n * @param pool Address of the pool\n * @param from Address of user to burn pool tokens from\n * @param exactBptAmountIn Input pool token amount\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order\n */\n function removeLiquidityRecovery(\n address pool,\n address from,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external returns (uint256[] memory amountsOut);\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function quote(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * This call always reverts, returning the result in the revert reason.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n */\n function quoteAndRevert(bytes calldata data) external;\n\n /**\n * @notice Returns true if queries are disabled on the Vault.\n * @dev If true, queries might either be disabled temporarily or permanently.\n * @return queryDisabled True if query functionality is reversibly disabled\n */\n function isQueryDisabled() external view returns (bool queryDisabled);\n\n /**\n * @notice Returns true if queries are disabled permanently; false if they are enabled.\n * @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n * @return queryDisabledPermanently True if query functionality is permanently disabled\n */\n function isQueryDisabledPermanently() external view returns (bool queryDisabledPermanently);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n function emitAuxiliaryEvent(bytes32 eventKey, bytes calldata eventData) external;\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Returns the Authorizer address.\n * @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n * and can be changed through a permissioned call.\n *\n * @return authorizer Address of the authorizer contract\n */\n function getAuthorizer() external view returns (IAuthorizer authorizer);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the main Vault contract.\n * @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n * for technical or performance reasons.\n */\ninterface IVaultMain {\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n * @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n * meaning all balances for the caller have to be settled at the end.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function unlock(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Settles deltas for a token; must be successful for the current lock to be released.\n * @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n * should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n * excess in the Vault balance.\n *\n * If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n * credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n *\n * If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n * In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n * not affect settlement.\n *\n * The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n * difference equals current balance of the token minus existing reserves of the token when the function is called.\n *\n * @param token Address of the token\n * @param amountHint Amount paid as reported by the caller\n * @return credit Credit received in return of the payment\n */\n function settle(IERC20 token, uint256 amountHint) external returns (uint256 credit);\n\n /**\n * @notice Sends tokens to a recipient.\n * @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n * debts.\n *\n * @param token Address of the token\n * @param to Recipient address\n * @param amount Amount of tokens to send\n */\n function sendTo(IERC20 token, address to, uint256 amount) external;\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Swaps tokens based on provided parameters.\n * @dev All parameters are given in raw token decimal encoding.\n * @param vaultSwapParams Parameters for the swap (see above for struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function swap(\n VaultSwapParams memory vaultSwapParams\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Adds liquidity to a pool.\n * @dev Caution should be exercised when adding liquidity because the Vault has the capability\n * to transfer tokens from any user, given that it holds all allowances.\n *\n * @param params Parameters for the add liquidity (see above for struct definition)\n * @return amountsIn Actual amounts of input tokens\n * @return bptAmountOut Output pool token amount\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function addLiquidity(\n AddLiquidityParams memory params\n ) external returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Removes liquidity from a pool.\n * @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n * Untrusted routers require prior approval from the user. This is the only function allowed to call\n * _queryModeBalanceIncrease (and only in a query context).\n *\n * @param params Parameters for the remove liquidity (see above for struct definition)\n * @return bptAmountIn Actual amount of BPT burned\n * @return amountsOut Actual amounts of output tokens\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function removeLiquidity(\n RemoveLiquidityParams memory params\n ) external returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Gets the index of a token in a given pool.\n * @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n * @param pool Address of the pool\n * @param token Address of the token\n * @return tokenCount Number of tokens in the pool\n * @return index Index corresponding to the given token in the pool's token list\n */\n function getPoolTokenCountAndIndexOfToken(\n address pool,\n IERC20 token\n ) external view returns (uint256 tokenCount, uint256 index);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Transfers pool token from owner to a recipient.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transfer(address owner, address to, uint256 amount) external returns (bool);\n\n /**\n * @notice Transfers pool token from a sender to a recipient using an allowance.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param spender Address allowed to perform the transfer\n * @param from Address of the sender\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transferFrom(address spender, address from, address to, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Wraps/unwraps tokens based on the parameters provided.\n * @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n * and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n *\n * @param params Parameters for the wrap/unwrap operation (see struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function erc4626BufferWrapOrUnwrap(\n BufferWrapOrUnwrapParams memory params\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /**\n * @notice Returns the VaultExtension contract address.\n * @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n * functions, since delegate calls through the Vault are more expensive than direct calls.\n *\n * @return vaultExtension Address of the VaultExtension\n */\n function getVaultExtension() external view returns (address vaultExtension);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IRateProvider } from \"../solidity-utils/helpers/IRateProvider.sol\";\n\n/**\n * @notice Represents a pool's liquidity management configuration.\n * @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n * @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n * @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n * @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION\n */\nstruct LiquidityManagement {\n bool disableUnbalancedLiquidity;\n bool enableAddLiquidityCustom;\n bool enableRemoveLiquidityCustom;\n bool enableDonation;\n}\n\n// @notice Custom type to store the entire configuration of the pool.\ntype PoolConfigBits is bytes32;\n\n/**\n * @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n * @param liquidityManagement Flags related to adding/removing liquidity\n * @param staticSwapFeePercentage The pool's native swap fee\n * @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n * @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n * @param isPoolRegistered If true, the pool has been registered with the Vault\n * @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n * @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n * @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals\n */\nstruct PoolConfig {\n LiquidityManagement liquidityManagement;\n uint256 staticSwapFeePercentage;\n uint256 aggregateSwapFeePercentage;\n uint256 aggregateYieldFeePercentage;\n uint40 tokenDecimalDiffs;\n uint32 pauseWindowEndTime;\n bool isPoolRegistered;\n bool isPoolInitialized;\n bool isPoolPaused;\n bool isPoolInRecoveryMode;\n}\n\n/**\n * @notice The flag portion of the `HooksConfig`.\n * @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n * in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n * flags to true will cause the Vault to call the corresponding hook during operations.\n */\nstruct HookFlags {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n}\n\n/// @notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address).\nstruct HooksConfig {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n address hooksContract;\n}\n\n/**\n * @notice Represents temporary state used during a swap operation.\n * @param indexIn The zero-based index of tokenIn\n * @param indexOut The zero-based index of tokenOut\n * @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n * @param swapFeePercentage The swap fee to be applied (might be static or dynamic)\n */\nstruct SwapState {\n uint256 indexIn;\n uint256 indexOut;\n uint256 amountGivenScaled18;\n uint256 swapFeePercentage;\n}\n\n/**\n * @notice Represents the Vault's configuration.\n * @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n * @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n * @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled\n */\nstruct VaultState {\n bool isQueryDisabled;\n bool isVaultPaused;\n bool areBuffersPaused;\n}\n\n/**\n * @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n * @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n * @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n * @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)\n */\nstruct PoolRoleAccounts {\n address pauseManager;\n address swapFeeManager;\n address poolCreator;\n}\n\n/*******************************************************************************\n Tokens\n*******************************************************************************/\n\n// Note that the following tokens are unsupported by the Vault. This list is not meant to be exhaustive, but covers\n// many common types of tokens that will not work with the Vault architecture. (See https://github.com/d-xo/weird-erc20\n// for examples of token features that are problematic for many protocols.)\n//\n// * Rebasing tokens (e.g., aDAI). The Vault keeps track of token balances in its internal accounting; any token whose\n// balance changes asynchronously (i.e., outside a swap or liquidity operation), would get out-of-sync with this\n// internal accounting. This category would also include \"airdrop\" tokens, whose balances can change unexpectedly.\n//\n// * Double entrypoint (e.g., old Synthetix tokens, now fixed). These could likewise bypass internal accounting by\n// registering the token under one address, then accessing it through another. This is especially troublesome\n// in v3, with the introduction of ERC4626 buffers.\n//\n// * Fee on transfer (e.g., PAXG). The Vault issues credits and debits according to given and calculated token amounts,\n// and settlement assumes that the send/receive transfer functions transfer exactly the given number of tokens.\n// If this is not the case, transactions will not settle. Unlike with the other types, which are fundamentally\n// incompatible, it would be possible to design a Router to handle this - but we didn't try it. In any case, it's\n// not supported in the current Routers.\n//\n// * Tokens with more than 18 decimals (e.g., YAM-V2). The Vault handles token scaling: i.e., handling I/O for\n// amounts in native token decimals, but doing calculations with full 18-decimal precision. This requires reading\n// and storing the decimals for each token. Since virtually all tokens are 18 or fewer decimals, and we have limited\n// storage space, 18 was a reasonable maximum. Unlike the other types, this is enforceable by the Vault. Attempting\n// to register such tokens will revert with `InvalidTokenDecimals`. Of course, we must also be able to read the token\n// decimals, so the Vault only supports tokens that implement `IERC20Metadata.decimals`, and return a value less than\n// or equal to 18.\n//\n// * Token decimals are checked and stored only once, on registration. Valid tokens store their decimals as immutable\n// variables or constants. Malicious tokens that don't respect this basic property would not work anywhere in DeFi.\n//\n// These types of tokens are supported but discouraged, as they don't tend to play well with AMMs generally.\n//\n// * Very low-decimal tokens (e.g., GUSD). The Vault has been extensively tested with 6-decimal tokens (e.g., USDC),\n// but going much below that may lead to unanticipated effects due to precision loss, especially with smaller trade\n// values.\n//\n// * Revert on zero value approval/transfer. The Vault has been tested against these, but peripheral contracts, such\n// as hooks, might not have been designed with this in mind.\n//\n// * Other types from \"weird-erc20,\" such as upgradeable, pausable, or tokens with blocklists. We have seen cases\n// where a token upgrade fails, \"bricking\" the token - and many operations on pools containing that token. Any\n// sort of \"permissioned\" token that can make transfers fail can cause operations on pools containing them to\n// revert. Even Recovery Mode cannot help then, as it does a proportional withdrawal of all tokens. If one of\n// them is bricked, the whole operation will revert. Since v3 does not have \"internal balances\" like v2, there\n// is no recourse.\n//\n// Of course, many tokens in common use have some of these \"features\" (especially centralized stable coins), so\n// we have to support them anyway. Working with common centralized tokens is a risk common to all of DeFi.\n\n/**\n * @notice Token types supported by the Vault.\n * @dev In general, pools may contain any combination of these tokens.\n *\n * STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n * WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n * because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n * tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n * yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n * in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n * not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n * yield fees are charged elsewhere).\n *\n * NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard.\n */\nenum TokenType {\n STANDARD,\n WITH_RATE\n}\n\n/**\n * @notice Encapsulate the data required for the Vault to support a token of the given type.\n * @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n * need a rate provider, and may or may not be yield-bearing.\n *\n * At registration time, it is useful to include the token address along with the token parameters in the structure\n * passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n * validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n *\n * @param token The token address\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenConfig {\n IERC20 token;\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n * @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n * it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n *\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenInfo {\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice Data structure used to represent the current pool state in memory\n * @param poolConfigBits Custom type to store the entire configuration of the pool.\n * @param tokens Pool tokens, sorted in token registration order\n * @param tokenInfo Configuration data for each token, sorted in token registration order\n * @param balancesRaw Token balances in native decimals\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n * @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. It is 1e18 (FP 1) for 18-decimal tokens\n */\nstruct PoolData {\n PoolConfigBits poolConfigBits;\n IERC20[] tokens;\n TokenInfo[] tokenInfo;\n uint256[] balancesRaw;\n uint256[] balancesLiveScaled18;\n uint256[] tokenRates;\n uint256[] decimalScalingFactors;\n}\n\nenum Rounding {\n ROUND_UP,\n ROUND_DOWN\n}\n\n/*******************************************************************************\n Swaps\n*******************************************************************************/\n\nenum SwapKind {\n EXACT_IN,\n EXACT_OUT\n}\n\n// There are two \"SwapParams\" structs defined below. `VaultSwapParams` corresponds to the external swap API defined\n// in the Router contracts, which uses explicit token addresses, the amount given and limit on the calculated amount\n// expressed in native token decimals, and optional user data passed in from the caller.\n//\n// `PoolSwapParams` passes some of this information through (kind, userData), but \"translates\" the parameters to fit\n// the internal swap API used by `IBasePool`. It scales amounts to full 18-decimal precision, adds the token balances,\n// converts the raw token addresses to indices, and adds the address of the Router originating the request. It does\n// not need the limit, since this is checked at the Router level.\n\n/**\n * @notice Data passed into primary Vault `swap` operations.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n * @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n * @param userData Additional (optional) user data\n */\nstruct VaultSwapParams {\n SwapKind kind;\n address pool;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n bytes userData;\n}\n\n/**\n * @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n * @param kind Type of swap (exact in or exact out)\n * @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n * @param balancesScaled18 Current pool balances\n * @param indexIn Index of tokenIn\n * @param indexOut Index of tokenOut\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param userData Additional (optional) data required for the swap\n */\nstruct PoolSwapParams {\n SwapKind kind;\n uint256 amountGivenScaled18;\n uint256[] balancesScaled18;\n uint256 indexIn;\n uint256 indexOut;\n address router;\n bytes userData;\n}\n\n/**\n * @notice Data for the hook after a swap operation.\n * @param kind Type of swap (exact in or exact out)\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param amountInScaled18 Amount of tokenIn (entering the Vault)\n * @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n * @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n * @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n * @param amountCalculatedScaled18 Token amount calculated by the swap\n * @param amountCalculatedRaw Token amount calculated by the swap\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param pool Pool address\n * @param userData Additional (optional) data required for the swap\n */\nstruct AfterSwapParams {\n SwapKind kind;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountInScaled18;\n uint256 amountOutScaled18;\n uint256 tokenInBalanceScaled18;\n uint256 tokenOutBalanceScaled18;\n uint256 amountCalculatedScaled18;\n uint256 amountCalculatedRaw;\n address router;\n address pool;\n bytes userData;\n}\n\n/*******************************************************************************\n Add liquidity\n*******************************************************************************/\n\nenum AddLiquidityKind {\n PROPORTIONAL,\n UNBALANCED,\n SINGLE_TOKEN_EXACT_OUT,\n DONATION,\n CUSTOM\n}\n\n/**\n * @notice Data for an add liquidity operation.\n * @param pool Address of the pool\n * @param to Address of user to mint to\n * @param maxAmountsIn Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param kind Add liquidity kind\n * @param userData Optional user data\n */\nstruct AddLiquidityParams {\n address pool;\n address to;\n uint256[] maxAmountsIn;\n uint256 minBptAmountOut;\n AddLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum RemoveLiquidityKind {\n PROPORTIONAL,\n SINGLE_TOKEN_EXACT_IN,\n SINGLE_TOKEN_EXACT_OUT,\n CUSTOM\n}\n\n/**\n * @notice Data for an remove liquidity operation.\n * @param pool Address of the pool\n * @param from Address of user to burn from\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOut Minimum amounts of output tokens\n * @param kind Remove liquidity kind\n * @param userData Optional user data\n */\nstruct RemoveLiquidityParams {\n address pool;\n address from;\n uint256 maxBptAmountIn;\n uint256[] minAmountsOut;\n RemoveLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum WrappingDirection {\n WRAP,\n UNWRAP\n}\n\n/**\n * @notice Data for a wrap/unwrap operation.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param direction Direction of the wrapping operation (Wrap or Unwrap)\n * @param wrappedToken Wrapped token, compatible with interface ERC4626\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n * @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n * direction)\n */\nstruct BufferWrapOrUnwrapParams {\n SwapKind kind;\n WrappingDirection direction;\n IERC4626 wrappedToken;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n}\n\n// Protocol Fees are 24-bit values. We transform them by multiplying by 1e11, so that they can be set to any value\n// between 0% and 100% (step 0.00001%). Protocol and pool creator fees are set in the `ProtocolFeeController`, and\n// ensure both constituent and aggregate fees do not exceed this precision.\nuint256 constant FEE_BITLENGTH = 24;\nuint256 constant FEE_SCALING_FACTOR = 1e11;\n// Used to ensure the safety of fee-related math (e.g., pools or hooks don't set it greater than 100%).\n// This value should work for practical purposes and is well within the max precision requirements.\nuint256 constant MAX_FEE_PERCENTAGE = 99.9999e16; // 99.9999%\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @notice Building block for performing access control on external functions.\n * @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n * applied to external functions to make them only callable by authorized accounts.\n *\n * Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\n */\nabstract contract Authentication is IAuthentication {\n bytes32 private immutable _actionIdDisambiguator;\n\n /**\n * @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n * multi-contract systems.\n *\n * There are two main uses for it:\n * - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n * unique. The contract's own address is a good option.\n * - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n * shared by the entire family (and no other contract) should be used instead.\n */\n constructor(bytes32 actionIdDisambiguator) {\n _actionIdDisambiguator = actionIdDisambiguator;\n }\n\n /// @dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions.\n modifier authenticate() {\n _authenticateCaller();\n _;\n }\n\n /// @dev Reverts unless the caller is allowed to call the entry point function.\n function _authenticateCaller() internal view {\n bytes32 actionId = getActionId(msg.sig);\n\n if (!_canPerform(actionId, msg.sender)) {\n revert SenderNotAllowed();\n }\n }\n\n /// @inheritdoc IAuthentication\n function getActionId(bytes4 selector) public view override returns (bytes32) {\n // Each external function is dynamically assigned an action identifier as the hash of the disambiguator and the\n // function selector. Disambiguation is necessary to avoid potential collisions in the function selectors of\n // multiple contracts.\n return keccak256(abi.encodePacked(_actionIdDisambiguator, selector));\n }\n\n /**\n * @dev Derived contracts must implement this function to perform the actual access control logic.\n * @param actionId The action identifier associated with an external function\n * @param user The account performing the action\n * @return success True if the action is permitted\n */\n function _canPerform(bytes32 actionId, address user) internal view virtual returns (bool);\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Library of helper functions related to typecasting arrays.\nlibrary CastingHelpers {\n /// @dev Returns a native array of addresses as an IERC20[] array.\n function asIERC20(address[] memory addresses) internal pure returns (IERC20[] memory tokens) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n tokens := addresses\n }\n }\n\n /// @dev Returns an IERC20[] array as an address[] array.\n function asAddress(IERC20[] memory tokens) internal pure returns (address[] memory addresses) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n addresses := tokens\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { CastingHelpers } from \"./CastingHelpers.sol\";\n\nlibrary InputHelpers {\n /// @notice Arrays passed to a function and intended to be parallel have different lengths.\n error InputLengthMismatch();\n\n /**\n * @notice More than one non-zero value was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n * corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\n */\n error MultipleNonZeroInputs();\n\n /**\n * @notice No valid input was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n * corresponding to the token being added or removed. This error results if all entries are zero.\n */\n error AllZeroInputs();\n\n /**\n * @notice The tokens supplied to an array argument were not sorted in numerical order.\n * @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n * predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\n */\n error TokensNotSorted();\n\n function ensureInputLengthMatch(uint256 a, uint256 b) internal pure {\n if (a != b) {\n revert InputLengthMismatch();\n }\n }\n\n function ensureInputLengthMatch(uint256 a, uint256 b, uint256 c) internal pure {\n if (a != b || b != c) {\n revert InputLengthMismatch();\n }\n }\n\n // Find the single non-zero input; revert if there is not exactly one such value.\n function getSingleInputIndex(uint256[] memory maxAmountsIn) internal pure returns (uint256 inputIndex) {\n uint256 length = maxAmountsIn.length;\n inputIndex = length;\n\n for (uint256 i = 0; i < length; ++i) {\n if (maxAmountsIn[i] != 0) {\n if (inputIndex != length) {\n revert MultipleNonZeroInputs();\n }\n inputIndex = i;\n }\n }\n\n if (inputIndex >= length) {\n revert AllZeroInputs();\n }\n\n return inputIndex;\n }\n\n /**\n * @dev Sort an array of tokens, mutating in place (and also returning them).\n * This assumes the tokens have been (or will be) validated elsewhere for length\n * and non-duplication. All this does is the sorting.\n *\n * A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n * Could have also done \"manual\" comparisons for each of the cases, but this is\n * about the same number of operations, and more concise.\n *\n * This is less efficient for larger token count (i.e., above 4), but such pools should\n * be rare. And in any case, sorting is only done on-chain in test code.\n */\n function sortTokens(IERC20[] memory tokens) internal pure returns (IERC20[] memory) {\n for (uint256 i = 0; i < tokens.length - 1; ++i) {\n for (uint256 j = 0; j < tokens.length - i - 1; ++j) {\n if (tokens[j] > tokens[j + 1]) {\n // Swap if they're out of order.\n (tokens[j], tokens[j + 1]) = (tokens[j + 1], tokens[j]);\n }\n }\n }\n\n return tokens;\n }\n\n /// @dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness.\n function ensureSortedTokens(IERC20[] memory tokens) internal pure {\n if (tokens.length < 2) {\n return;\n }\n\n IERC20 previous = tokens[0];\n\n for (uint256 i = 1; i < tokens.length; ++i) {\n IERC20 current = tokens[i];\n\n if (previous > current) {\n revert TokensNotSorted();\n }\n\n previous = current;\n }\n }\n\n /// @dev Ensure an array of amounts is sorted. As above, does not validate length or uniqueness.\n function ensureSortedAmounts(uint256[] memory amounts) internal pure {\n if (amounts.length < 2) {\n return;\n }\n\n uint256 previous = amounts[0];\n\n for (uint256 i = 1; i < amounts.length; ++i) {\n uint256 current = amounts[i];\n\n if (previous > current) {\n revert TokensNotSorted();\n }\n\n previous = current;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice This library represents a data structure for packing a token's current raw and derived balances. A derived\n * balance can be the \"last\" live balance scaled18 of the raw token, or the balance of the wrapped version of the\n * token in a vault buffer, among others.\n *\n * @dev We could use a Solidity struct to pack balance values together in a single storage slot, but unfortunately\n * Solidity only allows for structs to live in either storage, calldata or memory. Because a memory struct still takes\n * up a slot in the stack (to store its memory location), and because the entire balance fits in a single stack slot\n * (two 128 bit values), using memory is strictly less gas performant. Therefore, we do manual packing and unpacking.\n *\n * We could also use custom types now, but given the simplicity here, and the existing EnumerableMap type, it seemed\n * easier to leave it as a bytes32.\n */\nlibrary PackedTokenBalance {\n // The 'rawBalance' portion of the balance is stored in the least significant 128 bits of a 256 bit word, while the\n // The 'derivedBalance' part uses the remaining 128 bits.\n uint256 private constant _MAX_BALANCE = 2 ** (128) - 1;\n\n /// @notice One of the balances is above the maximum value that can be stored.\n error BalanceOverflow();\n\n function getBalanceRaw(bytes32 balance) internal pure returns (uint256) {\n return uint256(balance) & _MAX_BALANCE;\n }\n\n function getBalanceDerived(bytes32 balance) internal pure returns (uint256) {\n return uint256(balance >> 128) & _MAX_BALANCE;\n }\n\n /// @dev Sets only the raw balance of balances and returns the new bytes32 balance.\n function setBalanceRaw(bytes32 balance, uint256 newBalanceRaw) internal pure returns (bytes32) {\n return toPackedBalance(newBalanceRaw, getBalanceDerived(balance));\n }\n\n /// @dev Sets only the derived balance of balances and returns the new bytes32 balance.\n function setBalanceDerived(bytes32 balance, uint256 newBalanceDerived) internal pure returns (bytes32) {\n return toPackedBalance(getBalanceRaw(balance), newBalanceDerived);\n }\n\n /// @dev Validates the size of `balanceRaw` and `balanceDerived`, then returns a packed balance bytes32.\n function toPackedBalance(uint256 balanceRaw, uint256 balanceDerived) internal pure returns (bytes32) {\n if (balanceRaw > _MAX_BALANCE || balanceDerived > _MAX_BALANCE) {\n revert BalanceOverflow();\n }\n\n return _pack(balanceRaw, balanceDerived);\n }\n\n /// @dev Decode and fetch both balances.\n function fromPackedBalance(bytes32 balance) internal pure returns (uint256 balanceRaw, uint256 balanceDerived) {\n return (getBalanceRaw(balance), getBalanceDerived(balance));\n }\n\n /// @dev Packs two uint128 values into a packed balance bytes32. It does not check balance sizes.\n function _pack(uint256 leastSignificant, uint256 mostSignificant) private pure returns (bytes32) {\n return bytes32((mostSignificant << 128) + leastSignificant);\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n// solhint-disable no-inline-assembly\n\n/// @notice Support `quoteAndRevert`: a v2-style query which always reverts, and returns the result in the return data.\nlibrary RevertCodec {\n /**\n * @notice On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\n * @param result The result of the query operation\n */\n error Result(bytes result);\n\n /// @notice Handle the \"reverted without a reason\" case (i.e., no return data).\n error ErrorSelectorNotFound();\n\n function catchEncodedResult(bytes memory resultRaw) internal pure returns (bytes memory) {\n bytes4 errorSelector = RevertCodec.parseSelector(resultRaw);\n if (errorSelector != Result.selector) {\n // Bubble up error message if the revert reason is not the expected one.\n RevertCodec.bubbleUpRevert(resultRaw);\n }\n\n uint256 resultRawLength = resultRaw.length;\n assembly (\"memory-safe\") {\n resultRaw := add(resultRaw, 0x04) // Slice the sighash\n mstore(resultRaw, sub(resultRawLength, 4)) // Set proper length\n }\n\n return abi.decode(resultRaw, (bytes));\n }\n\n /// @dev Returns the first 4 bytes in an array, reverting if the length is < 4.\n function parseSelector(bytes memory callResult) internal pure returns (bytes4 errorSelector) {\n if (callResult.length < 4) {\n revert ErrorSelectorNotFound();\n }\n assembly (\"memory-safe\") {\n errorSelector := mload(add(callResult, 0x20)) // Load the first 4 bytes from data (skip length offset)\n }\n }\n\n /// @dev Taken from Openzeppelin's Address.\n function bubbleUpRevert(bytes memory returnData) internal pure {\n // Look for revert reason and bubble it up if present.\n if (returnData.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly.\n\n assembly (\"memory-safe\") {\n let return_data_size := mload(returnData)\n revert(add(32, returnData), return_data_size)\n }\n } else {\n revert ErrorSelectorNotFound();\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVersion } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\";\n\n/**\n * @notice Retrieves a contract's version from storage.\n * @dev The version is set at deployment time and cannot be changed. It would be immutable, but immutable strings\n * are not yet supported.\n *\n * Contracts like factories and pools should have versions. These typically take the form of JSON strings containing\n * detailed information about the deployment. For instance:\n *\n * `{name: 'ChildChainGaugeFactory', version: 2, deployment: '20230316-child-chain-gauge-factory-v2'}`\n */\ncontract Version is IVersion {\n string private _version;\n\n constructor(string memory version_) {\n _setVersion(version_);\n }\n\n /**\n * @notice Getter for the version.\n * @return version The stored contract version\n */\n function version() external view returns (string memory) {\n return _version;\n }\n\n /// @dev Internal setter that allows this contract to be used in proxies.\n function _setVersion(string memory newVersion) internal {\n _version = newVersion;\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { LogExpMath } from \"./LogExpMath.sol\";\n\n/// @notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\nlibrary FixedPoint {\n /// @notice Attempted division by zero.\n error ZeroDivision();\n\n // solhint-disable no-inline-assembly\n // solhint-disable private-vars-leading-underscore\n\n uint256 internal constant ONE = 1e18; // 18 decimal places\n uint256 internal constant TWO = 2 * ONE;\n uint256 internal constant FOUR = 4 * ONE;\n uint256 internal constant MAX_POW_RELATIVE_ERROR = 10000; // 10^(-14)\n\n function mulDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n return product / ONE;\n }\n\n function mulUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n // Equivalent to:\n // result = product == 0 ? 0 : ((product - 1) / FixedPoint.ONE) + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), ONE), 1))\n }\n }\n\n function divDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Solidity 0.8 reverts with a Panic code (0x11) if the multiplication overflows.\n uint256 aInflated = a * ONE;\n\n // Solidity 0.8 reverts with a \"Division by Zero\" Panic code (0x12) if b is zero\n return aInflated / b;\n }\n\n function divUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n return mulDivUp(a, ONE, b);\n }\n\n /// @dev Return (a * b) / c, rounding up.\n function mulDivUp(uint256 a, uint256 b, uint256 c) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on c==0.\n if (c == 0) {\n revert ZeroDivision();\n }\n\n // Multiple overflow protection is done by Solidity 0.8.x.\n uint256 product = a * b;\n\n // The traditional divUp formula is:\n // divUp(x, y) := (x + y - 1) / y\n // To avoid intermediate overflow in the addition, we distribute the division and get:\n // divUp(x, y) := (x - 1) / y + 1\n // Note that this requires x != 0, if x == 0 then the result is zero\n //\n // Equivalent to:\n // result = a == 0 ? 0 : (a * b - 1) / c + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), c), 1))\n }\n }\n\n /**\n * @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n * invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n * This can occur in calculations with many successive multiplications and divisions, and\n * we want to minimize the number of operations by avoiding unnecessary scaling by ONE.\n */\n function divUpRaw(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on b==0.\n if (b == 0) {\n revert ZeroDivision();\n }\n\n // Equivalent to:\n // result = a == 0 ? 0 : 1 + (a - 1) / b\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(a)), add(1, div(sub(a, 1), b)))\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n * the true value (that is, the error function expected - actual is always positive).\n */\n function powDown(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulDown(x, x);\n } else if (y == FOUR) {\n uint256 square = mulDown(x, x);\n return mulDown(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n if (raw < maxError) {\n return 0;\n } else {\n unchecked {\n return raw - maxError;\n }\n }\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n * the true value (that is, the error function expected - actual is always negative).\n */\n function powUp(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulUp(x, x);\n } else if (y == FOUR) {\n uint256 square = mulUp(x, x);\n return mulUp(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n return raw + maxError;\n }\n }\n\n /**\n * @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n *\n * Useful when computing the complement for values with some level of relative error, as it strips this error and\n * prevents intermediate negative values.\n */\n function complement(uint256 x) internal pure returns (uint256 result) {\n // Equivalent to:\n // result = (x < ONE) ? (ONE - x) : 0\n assembly (\"memory-safe\") {\n result := mul(lt(x, ONE), sub(ONE, x))\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n// solhint-disable\n\n/**\n * @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n *\n * Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n * exponentiation and logarithm (where the base is Euler's number).\n *\n * All math operations are unchecked in order to save gas.\n *\n * @author Fernando Martinelli - @fernandomartinelli\n * @author Sergio Yuhjtman - @sergioyuhjtman\n * @author Daniel Fernandez - @dmf7z\n */\nlibrary LogExpMath {\n /// @notice This error is thrown when a base is not within an acceptable range.\n error BaseOutOfBounds();\n\n /// @notice This error is thrown when a exponent is not within an acceptable range.\n error ExponentOutOfBounds();\n\n /// @notice This error is thrown when the exponent * ln(base) is not within an acceptable range.\n error ProductOutOfBounds();\n\n /// @notice This error is thrown when an exponent used in the exp function is not within an acceptable range.\n error InvalidExponent();\n\n /// @notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\n error OutOfBounds();\n\n // All fixed point multiplications and divisions are inlined. This means we need to divide by ONE when multiplying\n // two numbers, and multiply by ONE when dividing them.\n\n // All arguments and return values are 18 decimal fixed point numbers.\n int256 constant ONE_18 = 1e18;\n\n // Internally, intermediate values are computed with higher precision as 20 decimal fixed point numbers, and in the\n // case of ln36, 36 decimals.\n int256 constant ONE_20 = 1e20;\n int256 constant ONE_36 = 1e36;\n\n // The domain of natural exponentiation is bound by the word size and number of decimals used.\n //\n // Because internally the result will be stored using 20 decimals, the largest possible result is\n // (2^255 - 1) / 10^20, which makes the largest exponent ln((2^255 - 1) / 10^20) = 130.700829182905140221.\n // The smallest possible result is 10^(-18), which makes largest negative argument\n // ln(10^(-18)) = -41.446531673892822312.\n // We use 130.0 and -41.0 to have some safety margin.\n int256 constant MAX_NATURAL_EXPONENT = 130e18;\n int256 constant MIN_NATURAL_EXPONENT = -41e18;\n\n // Bounds for ln_36's argument. Both ln(0.9) and ln(1.1) can be represented with 36 decimal places in a fixed point\n // 256 bit integer.\n int256 constant LN_36_LOWER_BOUND = ONE_18 - 1e17;\n int256 constant LN_36_UPPER_BOUND = ONE_18 + 1e17;\n\n uint256 constant MILD_EXPONENT_BOUND = 2 ** 254 / uint256(ONE_20);\n\n // 18 decimal constants\n int256 constant x0 = 128000000000000000000; // 2ˆ7\n int256 constant a0 = 38877084059945950922200000000000000000000000000000000000; // eˆ(x0) (no decimals)\n int256 constant x1 = 64000000000000000000; // 2ˆ6\n int256 constant a1 = 6235149080811616882910000000; // eˆ(x1) (no decimals)\n\n // 20 decimal constants\n int256 constant x2 = 3200000000000000000000; // 2ˆ5\n int256 constant a2 = 7896296018268069516100000000000000; // eˆ(x2)\n int256 constant x3 = 1600000000000000000000; // 2ˆ4\n int256 constant a3 = 888611052050787263676000000; // eˆ(x3)\n int256 constant x4 = 800000000000000000000; // 2ˆ3\n int256 constant a4 = 298095798704172827474000; // eˆ(x4)\n int256 constant x5 = 400000000000000000000; // 2ˆ2\n int256 constant a5 = 5459815003314423907810; // eˆ(x5)\n int256 constant x6 = 200000000000000000000; // 2ˆ1\n int256 constant a6 = 738905609893065022723; // eˆ(x6)\n int256 constant x7 = 100000000000000000000; // 2ˆ0\n int256 constant a7 = 271828182845904523536; // eˆ(x7)\n int256 constant x8 = 50000000000000000000; // 2ˆ-1\n int256 constant a8 = 164872127070012814685; // eˆ(x8)\n int256 constant x9 = 25000000000000000000; // 2ˆ-2\n int256 constant a9 = 128402541668774148407; // eˆ(x9)\n int256 constant x10 = 12500000000000000000; // 2ˆ-3\n int256 constant a10 = 113314845306682631683; // eˆ(x10)\n int256 constant x11 = 6250000000000000000; // 2ˆ-4\n int256 constant a11 = 106449445891785942956; // eˆ(x11)\n\n /**\n * @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n *\n * Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function pow(uint256 x, uint256 y) internal pure returns (uint256) {\n if (y == 0) {\n // We solve the 0^0 indetermination by making it equal one.\n return uint256(ONE_18);\n }\n\n if (x == 0) {\n return 0;\n }\n\n // Instead of computing x^y directly, we instead rely on the properties of logarithms and exponentiation to\n // arrive at that result. In particular, exp(ln(x)) = x, and ln(x^y) = y * ln(x). This means\n // x^y = exp(y * ln(x)).\n\n // The ln function takes a signed value, so we need to make sure x fits in the signed 256 bit range.\n if (x >> 255 != 0) {\n revert BaseOutOfBounds();\n }\n int256 x_int256 = int256(x);\n\n // We will compute y * ln(x) in a single step. Depending on the value of x, we can either use ln or ln_36. In\n // both cases, we leave the division by ONE_18 (due to fixed point multiplication) to the end.\n\n // This prevents y * ln(x) from overflowing, and at the same time guarantees y fits in the signed 256 bit range.\n if (y >= MILD_EXPONENT_BOUND) {\n revert ExponentOutOfBounds();\n }\n int256 y_int256 = int256(y);\n\n int256 logx_times_y;\n unchecked {\n if (LN_36_LOWER_BOUND < x_int256 && x_int256 < LN_36_UPPER_BOUND) {\n int256 ln_36_x = _ln_36(x_int256);\n\n // ln_36_x has 36 decimal places, so multiplying by y_int256 isn't as straightforward, since we can't just\n // bring y_int256 to 36 decimal places, as it might overflow. Instead, we perform two 18 decimal\n // multiplications and add the results: one with the first 18 decimals of ln_36_x, and one with the\n // (downscaled) last 18 decimals.\n logx_times_y = ((ln_36_x / ONE_18) * y_int256 + ((ln_36_x % ONE_18) * y_int256) / ONE_18);\n } else {\n logx_times_y = _ln(x_int256) * y_int256;\n }\n logx_times_y /= ONE_18;\n }\n\n // Finally, we compute exp(y * ln(x)) to arrive at x^y\n if (!(MIN_NATURAL_EXPONENT <= logx_times_y && logx_times_y <= MAX_NATURAL_EXPONENT)) {\n revert ProductOutOfBounds();\n }\n\n return uint256(exp(logx_times_y));\n }\n\n /**\n * @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n *\n * Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function exp(int256 x) internal pure returns (int256) {\n if (!(x >= MIN_NATURAL_EXPONENT && x <= MAX_NATURAL_EXPONENT)) {\n revert InvalidExponent();\n }\n\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (x < 0) {\n // We only handle positive exponents: e^(-x) is computed as 1 / e^x. We can safely make x positive since it\n // fits in the signed 256 bit range (as it is larger than MIN_NATURAL_EXPONENT). In the negative\n // exponent case, compute e^x, then return 1 / result.\n unchecked {\n x = -x;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that e^(x+y) = e^x * e^y to decompose x into a sum of powers of two, which we call x_n,\n // where x_n == 2^(7 - n), and e^x_n = a_n has been precomputed. We choose the first x_n, x0, to equal 2^7\n // because all larger powers are larger than MAX_NATURAL_EXPONENT, and therefore not present in the\n // decomposition.\n // At the end of this process we will have the product of all e^x_n = a_n that apply, and the remainder of this\n // decomposition, which will be lower than the smallest x_n.\n // exp(x) = k_0 * a_0 * k_1 * a_1 * ... + k_n * a_n * exp(remainder), where each k_n equals either 0 or 1.\n // We mutate x by subtracting x_n, making it the remainder of the decomposition.\n\n // The first two a_n (e^(2^7) and e^(2^6)) are too large if stored as 18 decimal numbers, and could cause\n // intermediate overflows. Instead we store them as plain integers, with 0 decimals.\n // Additionally, x0 + x1 is larger than MAX_NATURAL_EXPONENT, which means they will not both be present in the\n // decomposition.\n\n // For each x_n, we test if that term is present in the decomposition (if x is larger than it), and if so deduct\n // it and compute the accumulated product.\n\n int256 firstAN;\n unchecked {\n if (x >= x0) {\n x -= x0;\n firstAN = a0;\n } else if (x >= x1) {\n x -= x1;\n firstAN = a1;\n } else {\n firstAN = 1; // One with no decimal places\n }\n\n // We now transform x into a 20 decimal fixed point number, to have enhanced precision when computing the\n // smaller terms.\n x *= 100;\n }\n\n // `product` is the accumulated product of all a_n (except a0 and a1), which starts at 20 decimal fixed point\n // one. Recall that fixed point multiplication requires dividing by ONE_20.\n int256 product = ONE_20;\n\n unchecked {\n if (x >= x2) {\n x -= x2;\n product = (product * a2) / ONE_20;\n }\n if (x >= x3) {\n x -= x3;\n product = (product * a3) / ONE_20;\n }\n if (x >= x4) {\n x -= x4;\n product = (product * a4) / ONE_20;\n }\n if (x >= x5) {\n x -= x5;\n product = (product * a5) / ONE_20;\n }\n if (x >= x6) {\n x -= x6;\n product = (product * a6) / ONE_20;\n }\n if (x >= x7) {\n x -= x7;\n product = (product * a7) / ONE_20;\n }\n if (x >= x8) {\n x -= x8;\n product = (product * a8) / ONE_20;\n }\n if (x >= x9) {\n x -= x9;\n product = (product * a9) / ONE_20;\n }\n }\n\n // x10 and x11 are unnecessary here since we have high enough precision already.\n\n // Now we need to compute e^x, where x is small (in particular, it is smaller than x9). We use the Taylor series\n // expansion for e^x: 1 + x + (x^2 / 2!) + (x^3 / 3!) + ... + (x^n / n!).\n\n int256 seriesSum = ONE_20; // The initial one in the sum, with 20 decimal places.\n int256 term; // Each term in the sum, where the nth term is (x^n / n!).\n\n // The first term is simply x.\n term = x;\n unchecked {\n seriesSum += term;\n\n // Each term (x^n / n!) equals the previous one times x, divided by n. Since x is a fixed point number,\n // multiplying by it requires dividing by ONE_20, but dividing by the non-fixed point n values does not.\n\n term = ((term * x) / ONE_20) / 2;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 3;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 4;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 5;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 6;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 7;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 8;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 9;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 10;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 11;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 12;\n seriesSum += term;\n\n // 12 Taylor terms are sufficient for 18 decimal precision.\n\n // We now have the first a_n (with no decimals), and the product of all other a_n present, and the Taylor\n // approximation of the exponentiation of the remainder (both with 20 decimals). All that remains is to multiply\n // all three (one 20 decimal fixed point multiplication, dividing by ONE_20, and one integer multiplication),\n // and then drop two digits to return an 18 decimal value.\n\n int256 result = (((product * seriesSum) / ONE_20) * firstAN) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? (ONE_18 * ONE_18) / result : result;\n }\n }\n\n /// @dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument.\n function log(int256 arg, int256 base) internal pure returns (int256) {\n // This performs a simple base change: log(arg, base) = ln(arg) / ln(base).\n\n // Both logBase and logArg are computed as 36 decimal fixed point numbers, either by using ln_36, or by\n // upscaling.\n\n int256 logBase;\n unchecked {\n if (LN_36_LOWER_BOUND < base && base < LN_36_UPPER_BOUND) {\n logBase = _ln_36(base);\n } else {\n logBase = _ln(base) * ONE_18;\n }\n }\n\n int256 logArg;\n unchecked {\n if (LN_36_LOWER_BOUND < arg && arg < LN_36_UPPER_BOUND) {\n logArg = _ln_36(arg);\n } else {\n logArg = _ln(arg) * ONE_18;\n }\n\n // When dividing, we multiply by ONE_18 to arrive at a result with 18 decimal places\n return (logArg * ONE_18) / logBase;\n }\n }\n\n /// @dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function ln(int256 a) internal pure returns (int256) {\n // The real natural logarithm is not defined for negative numbers or zero.\n if (a <= 0) {\n revert OutOfBounds();\n }\n if (LN_36_LOWER_BOUND < a && a < LN_36_UPPER_BOUND) {\n unchecked {\n return _ln_36(a) / ONE_18;\n }\n } else {\n return _ln(a);\n }\n }\n\n /// @dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function _ln(int256 a) private pure returns (int256) {\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (a < ONE_18) {\n // Since ln(a^k) = k * ln(a), we can compute ln(a) as ln(a) = ln((1/a)^(-1)) = - ln((1/a)). If a is less\n // than one, 1/a will be greater than one, so in this case we compute ln(1/a) and negate the final result.\n unchecked {\n a = (ONE_18 * ONE_18) / a;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that ln^(a * b) = ln(a) + ln(b) to decompose ln(a) into a sum of powers of two, which\n // we call x_n, where x_n == 2^(7 - n), which are the natural logarithm of precomputed quantities a_n (that is,\n // ln(a_n) = x_n). We choose the first x_n, x0, to equal 2^7 because the exponential of all larger powers cannot\n // be represented as 18 fixed point decimal numbers in 256 bits, and are therefore larger than a.\n // At the end of this process we will have the sum of all x_n = ln(a_n) that apply, and the remainder of this\n // decomposition, which will be lower than the smallest a_n.\n // ln(a) = k_0 * x_0 + k_1 * x_1 + ... + k_n * x_n + ln(remainder), where each k_n equals either 0 or 1.\n // We mutate a by subtracting a_n, making it the remainder of the decomposition.\n\n // For reasons related to how `exp` works, the first two a_n (e^(2^7) and e^(2^6)) are not stored as fixed point\n // numbers with 18 decimals, but instead as plain integers with 0 decimals, so we need to multiply them by\n // ONE_18 to convert them to fixed point.\n // For each a_n, we test if that term is present in the decomposition (if a is larger than it), and if so divide\n // by it and compute the accumulated sum.\n\n int256 sum = 0;\n unchecked {\n if (a >= a0 * ONE_18) {\n a /= a0; // Integer, not fixed point division\n sum += x0;\n }\n\n if (a >= a1 * ONE_18) {\n a /= a1; // Integer, not fixed point division\n sum += x1;\n }\n\n // All other a_n and x_n are stored as 20 digit fixed point numbers, so we convert the sum and a to this format.\n sum *= 100;\n a *= 100;\n\n // Because further a_n are 20 digit fixed point numbers, we multiply by ONE_20 when dividing by them.\n\n if (a >= a2) {\n a = (a * ONE_20) / a2;\n sum += x2;\n }\n\n if (a >= a3) {\n a = (a * ONE_20) / a3;\n sum += x3;\n }\n\n if (a >= a4) {\n a = (a * ONE_20) / a4;\n sum += x4;\n }\n\n if (a >= a5) {\n a = (a * ONE_20) / a5;\n sum += x5;\n }\n\n if (a >= a6) {\n a = (a * ONE_20) / a6;\n sum += x6;\n }\n\n if (a >= a7) {\n a = (a * ONE_20) / a7;\n sum += x7;\n }\n\n if (a >= a8) {\n a = (a * ONE_20) / a8;\n sum += x8;\n }\n\n if (a >= a9) {\n a = (a * ONE_20) / a9;\n sum += x9;\n }\n\n if (a >= a10) {\n a = (a * ONE_20) / a10;\n sum += x10;\n }\n\n if (a >= a11) {\n a = (a * ONE_20) / a11;\n sum += x11;\n }\n }\n\n // a is now a small number (smaller than a_11, which roughly equals 1.06). This means we can use a Taylor series\n // that converges rapidly for values of `a` close to one - the same one used in ln_36.\n // Let z = (a - 1) / (a + 1).\n // ln(a) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 20 digit fixed point division requires multiplying by ONE_20, and multiplication requires\n // division by ONE_20.\n unchecked {\n int256 z = ((a - ONE_20) * ONE_20) / (a + ONE_20);\n int256 z_squared = (z * z) / ONE_20;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 11;\n\n // 6 Taylor terms are sufficient for 36 decimal precision.\n\n // Finally, we multiply by 2 (non fixed point) to compute ln(remainder)\n seriesSum *= 2;\n\n // We now have the sum of all x_n present, and the Taylor approximation of the logarithm of the remainder (both\n // with 20 decimals). All that remains is to sum these two, and then drop two digits to return a 18 decimal\n // value.\n\n int256 result = (sum + seriesSum) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? -result : result;\n }\n }\n\n /**\n * @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n * for x close to one.\n *\n * Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND.\n */\n function _ln_36(int256 x) private pure returns (int256) {\n // Since ln(1) = 0, a value of x close to one will yield a very small result, which makes using 36 digits\n // worthwhile.\n\n // First, we transform x to a 36 digit fixed point value.\n unchecked {\n x *= ONE_18;\n\n // We will use the following Taylor expansion, which converges very rapidly. Let z = (x - 1) / (x + 1).\n // ln(x) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 36 digit fixed point division requires multiplying by ONE_36, and multiplication requires\n // division by ONE_36.\n int256 z = ((x - ONE_36) * ONE_36) / (x + ONE_36);\n int256 z_squared = (z * z) / ONE_36;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 11;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 13;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 15;\n\n // 8 Taylor terms are sufficient for 36 decimal precision.\n\n // All that remains is multiplying by 2 (non fixed point).\n return seriesSum * 2;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Library for managing sets of primitive types.\n * @dev See https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types.\n *\n * Based on the EnumerableSet library from OpenZeppelin Contracts, altered to remove the base private functions that\n * work on bytes32, replacing them with a native implementation for address values, to reduce bytecode size and\n * runtime costs.\n *\n * The `unchecked_at` function was also added, which allows for more gas efficient data reads in some scenarios.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n */\nlibrary EnumerableSet {\n // The original OpenZeppelin implementation uses a generic Set type with bytes32 values: this was replaced with\n // AddressSet, which uses address keys natively, resulting in more dense bytecode.\n\n // solhint-disable func-name-mixedcase\n\n struct AddressSet {\n // Storage of set values.\n address[] _values;\n // Position of the value in the `values` array, plus 1 because index 0\n // means a value is not in the set.\n mapping(address addressKey => uint256 indexValue) _indexes;\n }\n\n /// @notice An index is beyond the current bounds of the set.\n error IndexOutOfBounds();\n\n /// @notice An element that is not present in the set.\n error ElementNotFound();\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, if it was not already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n if (!contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value.\n set._indexes[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n * Returns true if the value was removed from the set; i.e., if it was present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n // We read and store the value's index to prevent multiple reads from the same storage slot.\n uint256 valueIndex = set._indexes[value];\n\n if (valueIndex != 0) {\n // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n uint256 toDeleteIndex;\n uint256 lastIndex;\n\n unchecked {\n toDeleteIndex = valueIndex - 1;\n lastIndex = set._values.length - 1;\n }\n\n // The swap is only necessary if we're not removing the last element.\n if (toDeleteIndex != lastIndex) {\n address lastValue = set._values[lastIndex];\n\n // Move the last entry to the index of the entry to delete.\n set._values[toDeleteIndex] = lastValue;\n // Update the index for the moved value\n set._indexes[lastValue] = valueIndex; // = toDeleteIndex + 1; all indices are 1-based.\n }\n\n // Delete the slot where the moved value was stored.\n set._values.pop();\n\n // Delete the index for the deleted slot.\n delete set._indexes[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /// @dev Returns true if the value is in the set. O(1).\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return set._indexes[value] != 0;\n }\n\n /// @dev Returns the number of values on the set. O(1).\n function length(AddressSet storage set) internal view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n if (index >= set._values.length) {\n revert IndexOutOfBounds();\n }\n\n return unchecked_at(set, index);\n }\n\n /**\n * @dev Same as {at}, except this doesn't revert if `index` it outside of the set (i.e. if it is equal or larger\n * than {length}). O(1).\n *\n * This function performs one less storage read than {at}, but should only be used when `index` is known to be\n * within bounds.\n */\n function unchecked_at(AddressSet storage set, uint256 index) internal view returns (address) {\n return set._values[index];\n }\n\n /// @dev Return the index of an element in the set, or revert if not found.\n function indexOf(AddressSet storage set, address value) internal view returns (uint256) {\n uint256 rawIndex = set._indexes[value];\n\n if (rawIndex == 0) {\n revert ElementNotFound();\n }\n\n unchecked {\n return rawIndex - 1;\n }\n }\n\n /**\n * @dev Same as {indexOf}, except this doesn't revert if the element isn't present in the set.\n * In this case, it returns 0.\n *\n * This function performs one less storage read than {indexOf}, but should only be used when `index` is known to be\n * within bounds.\n */\n function unchecked_indexOf(AddressSet storage set, address value) internal view returns (uint256) {\n uint256 rawIndex = set._indexes[value];\n\n unchecked {\n return rawIndex == 0 ? 0 : rawIndex - 1;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\nimport { StorageSlotExtension } from \"./StorageSlotExtension.sol\";\n\n/**\n * @notice Variant of {ReentrancyGuard} that uses transient storage.\n * @dev NOTE: This variant only works on networks where EIP-1153 is available.\n */\nabstract contract ReentrancyGuardTransient {\n using StorageSlotExtension for *;\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.ReentrancyGuard\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant _REENTRANCY_GUARD_STORAGE =\n 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00;\n\n /// @notice Unauthorized reentrant call.\n error ReentrancyGuardReentrantCall();\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be NOT_ENTERED.\n if (_reentrancyGuardEntered()) {\n revert ReentrancyGuardReentrantCall();\n }\n\n // Any calls to nonReentrant after this point will fail.\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(true);\n }\n\n function _nonReentrantAfter() private {\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(false);\n }\n\n /**\n * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n * `nonReentrant` function in the call stack.\n */\n function _reentrancyGuardEntered() internal view returns (bool) {\n return _REENTRANCY_GUARD_STORAGE.asBoolean().tload();\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n * @dev TIP: Consider using this library along with {SlotDerivation}.\n */\nlibrary StorageSlotExtension {\n struct Int256Slot {\n int256 value;\n }\n\n /// @dev Returns an `Int256Slot` with member `value` located at `slot`.\n function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /// @dev Custom type that represents a slot holding an address.\n type AddressSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a AddressSlotType.\n function asAddress(bytes32 slot) internal pure returns (AddressSlotType) {\n return AddressSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a boolean.\n type BooleanSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a BooleanSlotType.\n function asBoolean(bytes32 slot) internal pure returns (BooleanSlotType) {\n return BooleanSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a bytes32.\n type Bytes32SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Bytes32SlotType.\n function asBytes32(bytes32 slot) internal pure returns (Bytes32SlotType) {\n return Bytes32SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a uint256.\n type Uint256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Uint256SlotType.\n function asUint256(bytes32 slot) internal pure returns (Uint256SlotType) {\n return Uint256SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding an int256.\n type Int256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to an Int256SlotType.\n function asInt256(bytes32 slot) internal pure returns (Int256SlotType) {\n return Int256SlotType.wrap(slot);\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(AddressSlotType slot) internal view returns (address value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(AddressSlotType slot, address value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(BooleanSlotType slot) internal view returns (bool value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(BooleanSlotType slot, bool value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Bytes32SlotType slot) internal view returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Bytes32SlotType slot, bytes32 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Uint256SlotType slot) internal view returns (uint256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Uint256SlotType slot, uint256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Int256SlotType slot) internal view returns (int256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Int256SlotType slot, int256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\ncontract ERC20TestToken is ERC20 {\n uint8 private immutable _decimals;\n\n /// @dev Simulate tokens that don't allow zero transfers.\n error ZeroTransfer();\n\n constructor(string memory name, string memory symbol, uint8 decimals_) ERC20(name, symbol) {\n _decimals = decimals_;\n }\n\n function decimals() public view override returns (uint8) {\n return _decimals;\n }\n\n function mint(address recipient, uint256 amount) external {\n _mint(recipient, amount);\n }\n\n function burn(address sender, uint256 amount) external {\n _burn(sender, amount);\n }\n\n function transfer(address to, uint256 value) public override returns (bool) {\n if (value == 0) {\n revert ZeroTransfer();\n }\n\n return super.transfer(to, value);\n }\n\n function transferFrom(address from, address to, uint256 value) public override returns (bool) {\n if (value == 0) {\n revert ZeroTransfer();\n }\n\n return super.transferFrom(from, to, value);\n }\n}\n"},"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { Authentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\";\n\n/// @dev Base contract for performing access control on external functions within pools.\nabstract contract CommonAuthentication is Authentication {\n /// @dev Vault cannot be address(0).\n error VaultNotSet();\n\n IVault private immutable _vault;\n\n /// @notice Caller must be the swapFeeManager, if defined. Otherwise, default to governance.\n modifier onlySwapFeeManagerOrGovernance(address pool) {\n address roleAddress = _vault.getPoolRoleAccounts(pool).swapFeeManager;\n _ensureAuthenticatedByExclusiveRole(pool, roleAddress);\n _;\n }\n\n constructor(IVault vault, bytes32 actionIdDisambiguator) Authentication(actionIdDisambiguator) {\n if (address(vault) == address(0)) {\n revert VaultNotSet();\n }\n\n _vault = vault;\n }\n\n function _getVault() internal view returns (IVault) {\n return _vault;\n }\n\n // Access control is delegated to the Authorizer in the `_canPerform` functions.\n function _canPerform(bytes32 actionId, address user) internal view override returns (bool) {\n return _vault.getAuthorizer().canPerform(actionId, user, address(this));\n }\n\n function _canPerform(bytes32 actionId, address account, address where) internal view returns (bool) {\n return _vault.getAuthorizer().canPerform(actionId, account, where);\n }\n\n /// @dev Ensure the sender is the roleAccount, or default to governance if roleAccount is address(0).\n function _ensureAuthenticatedByExclusiveRole(address where, address roleAccount) internal view {\n if (roleAccount == address(0)) {\n // Defer to governance if no role assigned.\n if (_canPerform(getActionId(msg.sig), msg.sender, where) == false) {\n revert SenderNotAllowed();\n }\n } else if (msg.sender != roleAccount) {\n revert SenderNotAllowed();\n }\n }\n\n /// @dev Ensure the sender is either the role manager, or is authorized by governance (non-exclusive).\n function _ensureAuthenticatedByRole(address where, address roleAccount) internal view {\n // If the sender is not the delegated manager for the role, defer to governance.\n if (msg.sender != roleAccount) {\n if (_canPerform(getActionId(msg.sig), msg.sender, where) == false) {\n revert SenderNotAllowed();\n }\n }\n // (else) if the sender is the delegated manager, proceed.\n }\n}\n"},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport {\n FEE_SCALING_FACTOR,\n MAX_FEE_PERCENTAGE,\n PoolRoleAccounts\n} from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nimport { SingletonAuthentication } from \"./SingletonAuthentication.sol\";\nimport { VaultGuard } from \"./VaultGuard.sol\";\n\n/**\n * @notice Helper contract to manage protocol and creator fees outside the Vault.\n * @dev This contract stores global default protocol swap and yield fees, and also tracks the values of those fees\n * for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but\n * pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`).\n *\n * The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows\n * the component fee percentages, and how to compute the aggregate from the components. This is done for performance\n * reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \"cut\", and stores the\n * fee amounts separately from the pool balances.\n *\n * The pool creator fees are \"net\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee\n * percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided\n * between the pool creator and the LPs.\n *\n * There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this\n * contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any\n * time by governance and the pool creator, respectively.\n *\n * Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero\n * if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator\n * fees are computed \"net\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible.\n * A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool\n * creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs.\n *\n * This contract is deployed with the Vault, but can be changed by governance.\n */\ncontract ProtocolFeeController is\n IProtocolFeeController,\n SingletonAuthentication,\n ReentrancyGuardTransient,\n VaultGuard\n{\n using FixedPoint for uint256;\n using SafeERC20 for IERC20;\n using SafeCast for *;\n\n enum ProtocolFeeType {\n SWAP,\n YIELD\n }\n\n /**\n * @notice Fee configuration stored in the swap and yield fee mappings.\n * @dev Instead of storing only the fee in the mapping, also store a flag to indicate whether the fee has been\n * set by governance through a permissioned call. (The fee is stored in 64-bits, so that the struct fits\n * within a single slot.)\n *\n * We know the percentage is an 18-decimal FP value, which only takes 60 bits, so it's guaranteed to fit,\n * and we can do simple casts to truncate the high bits without needed SafeCast.\n *\n * We want to enable permissionless updates for pools, so that it is less onerous to update potentially\n * hundreds of pools if the global protocol fees change. However, we don't want to overwrite pools that\n * have had their fee percentages manually set by the DAO (i.e., after off-chain negotiation and agreement).\n *\n * @param feePercentage The raw swap or yield fee percentage\n * @param isOverride When set, this fee is controlled by governance, and cannot be changed permissionlessly\n */\n struct PoolFeeConfig {\n uint64 feePercentage;\n bool isOverride;\n }\n\n // Maximum protocol swap fee percentage. FixedPoint.ONE corresponds to a 100% fee.\n uint256 public constant MAX_PROTOCOL_SWAP_FEE_PERCENTAGE = 50e16; // 50%\n\n // Maximum protocol yield fee percentage.\n uint256 public constant MAX_PROTOCOL_YIELD_FEE_PERCENTAGE = 50e16; // 50%\n\n // Maximum pool creator (swap, yield) fee percentage.\n uint256 public constant MAX_CREATOR_FEE_PERCENTAGE = 99.999e16; // 99.999%\n\n // Global protocol swap fee.\n uint256 private _globalProtocolSwapFeePercentage;\n\n // Global protocol yield fee.\n uint256 private _globalProtocolYieldFeePercentage;\n\n // Store the pool-specific swap fee percentages (the Vault's poolConfigBits stores the aggregate percentage).\n mapping(address pool => PoolFeeConfig swapFeeConfig) internal _poolProtocolSwapFeePercentages;\n\n // Store the pool-specific yield fee percentages (the Vault's poolConfigBits stores the aggregate percentage).\n mapping(address pool => PoolFeeConfig yieldFeeConfig) internal _poolProtocolYieldFeePercentages;\n\n // Explicitly mark a pool as registered. This will enable future migrations to safely update protected state.\n mapping(address pool => bool isRegistered) internal _registeredPools;\n\n // Pool creator swap fee percentages for each pool.\n mapping(address pool => uint256 poolCreatorSwapFee) internal _poolCreatorSwapFeePercentages;\n\n // Pool creator yield fee percentages for each pool.\n mapping(address pool => uint256 poolCreatorYieldFee) internal _poolCreatorYieldFeePercentages;\n\n // Disaggregated protocol fees (from swap and yield), available for withdrawal by governance.\n mapping(address pool => mapping(IERC20 poolToken => uint256 feeAmount)) internal _protocolFeeAmounts;\n\n // Disaggregated pool creator fees (from swap and yield), available for withdrawal by the pool creator.\n mapping(address pool => mapping(IERC20 poolToken => uint256 feeAmount)) internal _poolCreatorFeeAmounts;\n\n /**\n * @notice Prevent pool data from being registered more than once.\n * @dev This can happen if there is an error in the migration, or if governance somehow grants permission to\n * `migratePool`, which should never happen.\n *\n * @param pool The pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /// @notice Migration source cannot be this contract.\n error InvalidMigrationSource();\n\n // Ensure that the caller is the pool creator.\n modifier onlyPoolCreator(address pool) {\n _ensureCallerIsPoolCreator(pool);\n _;\n }\n\n // Validate the swap fee percentage against the maximum.\n modifier withValidSwapFee(uint256 newSwapFeePercentage) {\n if (newSwapFeePercentage > MAX_PROTOCOL_SWAP_FEE_PERCENTAGE) {\n revert ProtocolSwapFeePercentageTooHigh();\n }\n _ensureValidPrecision(newSwapFeePercentage);\n _;\n }\n\n // Validate the yield fee percentage against the maximum.\n modifier withValidYieldFee(uint256 newYieldFeePercentage) {\n if (newYieldFeePercentage > MAX_PROTOCOL_YIELD_FEE_PERCENTAGE) {\n revert ProtocolYieldFeePercentageTooHigh();\n }\n _ensureValidPrecision(newYieldFeePercentage);\n _;\n }\n\n modifier withValidPoolCreatorFee(uint256 newPoolCreatorFeePercentage) {\n if (newPoolCreatorFeePercentage > MAX_CREATOR_FEE_PERCENTAGE) {\n revert PoolCreatorFeePercentageTooHigh();\n }\n _;\n }\n\n // Force collection and disaggregation (e.g., before changing protocol fee percentages).\n modifier withLatestFees(address pool) {\n collectAggregateFees(pool);\n _;\n }\n\n constructor(\n IVault vault_,\n uint256 initialGlobalSwapFeePercentage,\n uint256 initialGlobalYieldFeePercentage\n ) SingletonAuthentication(vault_) VaultGuard(vault_) {\n _setGlobalProtocolSwapFeePercentage(initialGlobalSwapFeePercentage);\n _setGlobalProtocolYieldFeePercentage(initialGlobalYieldFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function vault() external view returns (IVault) {\n return _vault;\n }\n\n /// @inheritdoc IProtocolFeeController\n function collectAggregateFees(address pool) public {\n _vault.unlock(abi.encodeCall(ProtocolFeeController.collectAggregateFeesHook, pool));\n }\n\n /**\n * @dev Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit\n * for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount\n * transferred so that the transaction settles when the hook returns.\n */\n function collectAggregateFeesHook(address pool) external onlyVault {\n (uint256[] memory totalSwapFees, uint256[] memory totalYieldFees) = _vault.collectAggregateFees(pool);\n _receiveAggregateFees(pool, totalSwapFees, totalYieldFees);\n }\n\n /**\n * @notice Settle fee credits from the Vault.\n * @dev This must be called after calling `collectAggregateFees` in the Vault. Note that since charging protocol\n * fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection\n * happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations. The Vault\n * differentiates between swap and yield fees (since they can have different percentage values); the Controller\n * combines swap and yield fees, then allocates the total between the protocol and pool creator.\n *\n * @param pool The address of the pool on which the swap fees were charged\n * @param swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @param yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function _receiveAggregateFees(\n address pool,\n uint256[] memory swapFeeAmounts,\n uint256[] memory yieldFeeAmounts\n ) internal {\n _receiveAggregateFees(pool, ProtocolFeeType.SWAP, swapFeeAmounts);\n _receiveAggregateFees(pool, ProtocolFeeType.YIELD, yieldFeeAmounts);\n }\n\n function _receiveAggregateFees(address pool, ProtocolFeeType feeType, uint256[] memory feeAmounts) private {\n // There are two cases when we don't need to split fees (in which case we can save gas and avoid rounding\n // errors by skipping calculations) if either the protocol or pool creator fee percentage is zero.\n\n uint256 protocolFeePercentage = feeType == ProtocolFeeType.SWAP\n ? _poolProtocolSwapFeePercentages[pool].feePercentage\n : _poolProtocolYieldFeePercentages[pool].feePercentage;\n\n uint256 poolCreatorFeePercentage = feeType == ProtocolFeeType.SWAP\n ? _poolCreatorSwapFeePercentages[pool]\n : _poolCreatorYieldFeePercentages[pool];\n\n uint256 aggregateFeePercentage;\n\n bool needToSplitFees = poolCreatorFeePercentage > 0 && protocolFeePercentage > 0;\n if (needToSplitFees) {\n // Calculate once, outside the loop.\n aggregateFeePercentage = _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n for (uint256 i = 0; i < numTokens; ++i) {\n if (feeAmounts[i] > 0) {\n IERC20 token = poolTokens[i];\n\n _vault.sendTo(token, address(this), feeAmounts[i]);\n\n // It should be easier for off-chain processes to handle two events, rather than parsing the type\n // out of a single event.\n if (feeType == ProtocolFeeType.SWAP) {\n emit ProtocolSwapFeeCollected(pool, token, feeAmounts[i]);\n } else {\n emit ProtocolYieldFeeCollected(pool, token, feeAmounts[i]);\n }\n\n if (needToSplitFees) {\n // The Vault took a single \"cut\" for the aggregate total percentage (protocol + pool creator) for\n // this fee type (swap or yield). The first step is to reconstruct this total fee amount. Then we\n // need to \"disaggregate\" this total, dividing it between the protocol and pool creator according\n // to their individual percentages. We do this by computing the protocol portion first, then\n // assigning the remainder to the pool creator.\n uint256 totalFeeAmountRaw = feeAmounts[i].divUp(aggregateFeePercentage);\n uint256 protocolPortion = totalFeeAmountRaw.mulUp(protocolFeePercentage);\n\n _protocolFeeAmounts[pool][token] += protocolPortion;\n _poolCreatorFeeAmounts[pool][token] += feeAmounts[i] - protocolPortion;\n } else {\n // If we don't need to split, one of them must be zero.\n if (poolCreatorFeePercentage == 0) {\n _protocolFeeAmounts[pool][token] += feeAmounts[i];\n } else {\n _poolCreatorFeeAmounts[pool][token] += feeAmounts[i];\n }\n }\n }\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256) {\n return _globalProtocolSwapFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeeController\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256) {\n return _globalProtocolYieldFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeeController\n function isPoolRegistered(address pool) external view returns (bool) {\n return _registeredPools[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolProtocolSwapFeeInfo(address pool) external view returns (uint256, bool) {\n PoolFeeConfig memory config = _poolProtocolSwapFeePercentages[pool];\n\n return (config.feePercentage, config.isOverride);\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolProtocolYieldFeeInfo(address pool) external view returns (uint256, bool) {\n PoolFeeConfig memory config = _poolProtocolYieldFeePercentages[pool];\n\n return (config.feePercentage, config.isOverride);\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorSwapFeePercentage(address pool) external view returns (uint256) {\n return _poolCreatorSwapFeePercentages[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorYieldFeePercentage(address pool) external view returns (uint256) {\n return _poolCreatorYieldFeePercentages[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts) {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n feeAmounts = new uint256[](numTokens);\n for (uint256 i = 0; i < numTokens; ++i) {\n feeAmounts[i] = _protocolFeeAmounts[pool][poolTokens[i]];\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts) {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n feeAmounts = new uint256[](numTokens);\n for (uint256 i = 0; i < numTokens; ++i) {\n feeAmounts[i] = _poolCreatorFeeAmounts[pool][poolTokens[i]];\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256) {\n return _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function updateProtocolSwapFeePercentage(address pool) external withLatestFees(pool) {\n PoolFeeConfig memory feeConfig = _poolProtocolSwapFeePercentages[pool];\n uint256 globalProtocolSwapFee = _globalProtocolSwapFeePercentage;\n\n if (feeConfig.isOverride == false && globalProtocolSwapFee != feeConfig.feePercentage) {\n _updatePoolSwapFeePercentage(pool, globalProtocolSwapFee, false);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function updateProtocolYieldFeePercentage(address pool) external withLatestFees(pool) {\n PoolFeeConfig memory feeConfig = _poolProtocolYieldFeePercentages[pool];\n uint256 globalProtocolYieldFee = _globalProtocolYieldFeePercentage;\n\n if (feeConfig.isOverride == false && globalProtocolYieldFee != feeConfig.feePercentage) {\n _updatePoolYieldFeePercentage(pool, globalProtocolYieldFee, false);\n }\n }\n\n function _getAggregateFeePercentage(address pool, ProtocolFeeType feeType) internal view returns (uint256) {\n uint256 protocolFeePercentage;\n uint256 poolCreatorFeePercentage;\n\n if (feeType == ProtocolFeeType.SWAP) {\n protocolFeePercentage = _poolProtocolSwapFeePercentages[pool].feePercentage;\n poolCreatorFeePercentage = _poolCreatorSwapFeePercentages[pool];\n } else {\n protocolFeePercentage = _poolProtocolYieldFeePercentages[pool].feePercentage;\n poolCreatorFeePercentage = _poolCreatorYieldFeePercentages[pool];\n }\n\n return _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n function _computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) internal pure returns (uint256 aggregateFeePercentage) {\n aggregateFeePercentage =\n protocolFeePercentage +\n protocolFeePercentage.complement().mulDown(poolCreatorFeePercentage);\n\n // Protocol fee percentages are limited to 24-bit precision for performance reasons (i.e., to fit all the fees\n // in a single slot), and because high precision is not needed. Generally we expect protocol fees set by\n // governance to be simple integers.\n //\n // However, the pool creator fee is entirely controlled by the pool creator, and it is possible to craft a\n // valid pool creator fee percentage that would cause the aggregate fee percentage to fail the precision check.\n // This case should be rare, so we ensure this can't happen by truncating the final value.\n aggregateFeePercentage = (aggregateFeePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR;\n }\n\n function _ensureCallerIsPoolCreator(address pool) internal view {\n address poolCreator = _getPoolCreator(pool);\n\n if (poolCreator == address(0)) {\n revert PoolCreatorNotRegistered(pool);\n }\n\n if (poolCreator != msg.sender) {\n revert CallerIsNotPoolCreator(msg.sender, pool);\n }\n }\n\n function _getPoolTokensAndCount(address pool) internal view returns (IERC20[] memory tokens, uint256 numTokens) {\n tokens = _vault.getPoolTokens(pool);\n numTokens = tokens.length;\n }\n\n // Retrieve the pool creator for a pool from the Vault.\n function _getPoolCreator(address pool) internal view returns (address) {\n PoolRoleAccounts memory roleAccounts = _vault.getPoolRoleAccounts(pool);\n\n return roleAccounts.poolCreator;\n }\n\n /***************************************************************************\n Pool Migration\n ***************************************************************************/\n\n /**\n * @notice Not exposed in the interface, this enables migration of hidden pool state.\n * @dev Permission should NEVER be granted to this function outside of a migration contract. It is necessary to\n * permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool\n * creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool\n * deployment.\n *\n * Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe,\n * guaranteeing that it is impossible to use this function to change anything after registration. A pool can only\n * be registered / configured once - either copied to a new controller in the migration context, or added normally\n * through the Vault calling `registerPool`.\n *\n * @param pool The address of the pool to be migrated\n */\n function migratePool(address pool) external {\n IProtocolFeeController oldFeeController = _vault.getProtocolFeeController();\n\n if (address(oldFeeController) == address(this)) {\n revert InvalidMigrationSource();\n }\n\n if (_registeredPools[pool]) {\n revert PoolAlreadyRegistered(pool);\n }\n\n _registeredPools[pool] = true;\n\n (uint256 protocolSwapFeePercentage, bool swapFeeIsOverride) = oldFeeController.getPoolProtocolSwapFeeInfo(pool);\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: protocolSwapFeePercentage.toUint64(),\n isOverride: swapFeeIsOverride\n });\n\n (uint256 protocolYieldFeePercentage, bool yieldFeeIsOverride) = oldFeeController.getPoolProtocolYieldFeeInfo(\n pool\n );\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: protocolYieldFeePercentage.toUint64(),\n isOverride: yieldFeeIsOverride\n });\n\n // On the first migration, these functions won't exist, as they were not included in the originally deployed\n // contract. This is ok, as the first time the contract will be migrated, there will be no pool creators.\n // In the event a pool that did have a pool creator was missed, the pool creator can simply set the fee\n // percentage again on the new controller. The fact that a pool has a pool creator cannot be lost, as this\n // is stored in the Vault on initial registration.\n try oldFeeController.getPoolCreatorSwapFeePercentage(pool) returns (uint256 poolCreatorSwapFeePercentage) {\n _poolCreatorSwapFeePercentages[pool] = poolCreatorSwapFeePercentage;\n } catch {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n try oldFeeController.getPoolCreatorYieldFeePercentage(pool) returns (uint256 poolCreatorYieldFeePercentage) {\n _poolCreatorYieldFeePercentages[pool] = poolCreatorYieldFeePercentage;\n } catch {\n // solhint-disable-previous-line no-empty-blocks\n }\n }\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeController\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external onlyVault returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage) {\n _registeredPools[pool] = true;\n\n // Set local storage of the actual percentages for the pool (default to global).\n aggregateSwapFeePercentage = protocolFeeExempt ? 0 : _globalProtocolSwapFeePercentage;\n aggregateYieldFeePercentage = protocolFeeExempt ? 0 : _globalProtocolYieldFeePercentage;\n\n // `isOverride` is true if the pool is protocol fee exempt; otherwise, default to false.\n // If exempt, this pool cannot be updated to the current global percentage permissionlessly.\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: aggregateSwapFeePercentage.toUint64(),\n isOverride: protocolFeeExempt\n });\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: aggregateYieldFeePercentage.toUint64(),\n isOverride: protocolFeeExempt\n });\n\n // Allow tracking pool fee percentages in all cases (e.g., when the pool is protocol-fee exempt).\n emit InitialPoolAggregateSwapFeePercentage(pool, aggregateSwapFeePercentage, protocolFeeExempt);\n emit InitialPoolAggregateYieldFeePercentage(pool, aggregateYieldFeePercentage, protocolFeeExempt);\n\n emit PoolRegisteredWithFeeController(pool, poolCreator, protocolFeeExempt);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setGlobalProtocolSwapFeePercentage(uint256 newProtocolSwapFeePercentage) external authenticate {\n _setGlobalProtocolSwapFeePercentage(newProtocolSwapFeePercentage);\n }\n\n function _setGlobalProtocolSwapFeePercentage(\n uint256 newProtocolSwapFeePercentage\n ) internal withValidSwapFee(newProtocolSwapFeePercentage) {\n _globalProtocolSwapFeePercentage = newProtocolSwapFeePercentage;\n\n emit GlobalProtocolSwapFeePercentageChanged(newProtocolSwapFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setGlobalProtocolYieldFeePercentage(uint256 newProtocolYieldFeePercentage) external authenticate {\n _setGlobalProtocolYieldFeePercentage(newProtocolYieldFeePercentage);\n }\n\n function _setGlobalProtocolYieldFeePercentage(\n uint256 newProtocolYieldFeePercentage\n ) internal withValidYieldFee(newProtocolYieldFeePercentage) {\n _globalProtocolYieldFeePercentage = newProtocolYieldFeePercentage;\n\n emit GlobalProtocolYieldFeePercentageChanged(newProtocolYieldFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setProtocolSwapFeePercentage(\n address pool,\n uint256 newProtocolSwapFeePercentage\n ) external authenticate withValidSwapFee(newProtocolSwapFeePercentage) withLatestFees(pool) {\n _updatePoolSwapFeePercentage(pool, newProtocolSwapFeePercentage, true);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setProtocolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage\n ) external authenticate withValidYieldFee(newProtocolYieldFeePercentage) withLatestFees(pool) {\n _updatePoolYieldFeePercentage(pool, newProtocolYieldFeePercentage, true);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setPoolCreatorSwapFeePercentage(\n address pool,\n uint256 poolCreatorSwapFeePercentage\n ) external onlyPoolCreator(pool) withValidPoolCreatorFee(poolCreatorSwapFeePercentage) withLatestFees(pool) {\n _setPoolCreatorFeePercentage(pool, poolCreatorSwapFeePercentage, ProtocolFeeType.SWAP);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setPoolCreatorYieldFeePercentage(\n address pool,\n uint256 poolCreatorYieldFeePercentage\n ) external onlyPoolCreator(pool) withValidPoolCreatorFee(poolCreatorYieldFeePercentage) withLatestFees(pool) {\n _setPoolCreatorFeePercentage(pool, poolCreatorYieldFeePercentage, ProtocolFeeType.YIELD);\n }\n\n function _setPoolCreatorFeePercentage(\n address pool,\n uint256 poolCreatorFeePercentage,\n ProtocolFeeType feeType\n ) internal {\n // Need to set locally, and update the aggregate percentage in the Vault.\n if (feeType == ProtocolFeeType.SWAP) {\n _poolCreatorSwapFeePercentages[pool] = poolCreatorFeePercentage;\n\n // The Vault will also emit an `AggregateSwapFeePercentageChanged` event.\n _vault.updateAggregateSwapFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.SWAP));\n\n emit PoolCreatorSwapFeePercentageChanged(pool, poolCreatorFeePercentage);\n } else {\n _poolCreatorYieldFeePercentages[pool] = poolCreatorFeePercentage;\n\n // The Vault will also emit an `AggregateYieldFeePercentageChanged` event.\n _vault.updateAggregateYieldFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.YIELD));\n\n emit PoolCreatorYieldFeePercentageChanged(pool, poolCreatorFeePercentage);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawProtocolFees(address pool, address recipient) external authenticate {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolTokens[i];\n\n _withdrawProtocolFees(pool, recipient, token);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external authenticate {\n // Revert if the pool is not registered or if the token does not belong to the pool.\n _vault.getPoolTokenCountAndIndexOfToken(pool, token);\n _withdrawProtocolFees(pool, recipient, token);\n }\n\n function _withdrawProtocolFees(address pool, address recipient, IERC20 token) internal {\n uint256 amountToWithdraw = _protocolFeeAmounts[pool][token];\n if (amountToWithdraw > 0) {\n _protocolFeeAmounts[pool][token] = 0;\n token.safeTransfer(recipient, amountToWithdraw);\n\n emit ProtocolFeesWithdrawn(pool, token, recipient, amountToWithdraw);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawPoolCreatorFees(address pool, address recipient) external onlyPoolCreator(pool) {\n _withdrawPoolCreatorFees(pool, recipient);\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawPoolCreatorFees(address pool) external {\n _withdrawPoolCreatorFees(pool, _getPoolCreator(pool));\n }\n\n function _withdrawPoolCreatorFees(address pool, address recipient) private {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolTokens[i];\n\n uint256 amountToWithdraw = _poolCreatorFeeAmounts[pool][token];\n if (amountToWithdraw > 0) {\n _poolCreatorFeeAmounts[pool][token] = 0;\n token.safeTransfer(recipient, amountToWithdraw);\n\n emit PoolCreatorFeesWithdrawn(pool, token, recipient, amountToWithdraw);\n }\n }\n }\n\n /// @dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage.\n function _updatePoolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage, bool isOverride) private {\n // Update local storage of the raw percentage.\n //\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: newProtocolSwapFeePercentage.toUint64(),\n isOverride: isOverride\n });\n\n // Update the resulting aggregate swap fee value in the Vault (PoolConfig).\n _vault.updateAggregateSwapFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.SWAP));\n\n emit ProtocolSwapFeePercentageChanged(pool, newProtocolSwapFeePercentage);\n }\n\n /// @dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage.\n function _updatePoolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage,\n bool isOverride\n ) private {\n // Update local storage of the raw percentage.\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: newProtocolYieldFeePercentage.toUint64(),\n isOverride: isOverride\n });\n\n // Update the resulting aggregate yield fee value in the Vault (PoolConfig).\n _vault.updateAggregateYieldFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.YIELD));\n\n emit ProtocolYieldFeePercentageChanged(pool, newProtocolYieldFeePercentage);\n }\n\n function _ensureValidPrecision(uint256 feePercentage) private pure {\n // Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n // precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n // corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n // Ensure there will be no precision loss in the Vault - which would lead to a discrepancy between the\n // aggregate fee calculated here and that stored in the Vault.\n if ((feePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR != feePercentage) {\n revert IVaultErrors.FeePrecisionTooHigh();\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { CommonAuthentication } from \"./CommonAuthentication.sol\";\n\n/**\n * @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n * @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n * functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n * function name.\n */\nabstract contract SingletonAuthentication is CommonAuthentication {\n // Use the contract's own address to disambiguate action identifiers.\n constructor(IVault vault) CommonAuthentication(vault, bytes32(uint256(uint160(address(this))))) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /**\n * @notice Get the address of the Balancer Vault.\n * @dev This function is virtual to allow for overriding in derived contracts which also inherits contracts with\n * `getVault()` definition.\n * @return vault An interface pointer to the Vault\n */\n function getVault() public view virtual returns (IVault) {\n return _getVault();\n }\n\n /**\n * @notice Get the address of the Authorizer.\n * @return authorizer An interface pointer to the Authorizer\n */\n function getAuthorizer() public view returns (IAuthorizer) {\n return getVault().getAuthorizer();\n }\n}\n"},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\n/// @notice Contract that shares the modifier `onlyVault`.\ncontract VaultGuard {\n IVault internal immutable _vault;\n\n constructor(IVault vault) {\n _vault = vault;\n }\n\n modifier onlyVault() {\n _ensureOnlyVault();\n _;\n }\n\n function _ensureOnlyVault() private view {\n if (msg.sender != address(_vault)) {\n revert IVaultErrors.SenderIsNotVault(msg.sender);\n }\n }\n}\n"},"@openzeppelin/contracts/access/Ownable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n constructor(address initialOwner) {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n"},"@openzeppelin/contracts/access/Ownable2Step.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (access/Ownable2Step.sol)\n\npragma solidity ^0.8.20;\n\nimport {Ownable} from \"./Ownable.sol\";\n\n/**\n * @dev Contract module which provides access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * This extension of the {Ownable} contract includes a two-step mechanism to transfer\n * ownership, where the new owner must call {acceptOwnership} in order to replace the\n * old one. This can help prevent common mistakes, such as transfers of ownership to\n * incorrect accounts, or to contracts that are unable to interact with the\n * permission system.\n *\n * The initial owner is specified at deployment time in the constructor for `Ownable`. This\n * can later be changed with {transferOwnership} and {acceptOwnership}.\n *\n * This module is used through inheritance. It will make available all functions\n * from parent (Ownable).\n */\nabstract contract Ownable2Step is Ownable {\n address private _pendingOwner;\n\n event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Returns the address of the pending owner.\n */\n function pendingOwner() public view virtual returns (address) {\n return _pendingOwner;\n }\n\n /**\n * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\n * Can only be called by the current owner.\n *\n * Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\n */\n function transferOwnership(address newOwner) public virtual override onlyOwner {\n _pendingOwner = newOwner;\n emit OwnershipTransferStarted(owner(), newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual override {\n delete _pendingOwner;\n super._transferOwnership(newOwner);\n }\n\n /**\n * @dev The new owner accepts the ownership transfer.\n */\n function acceptOwnership() public virtual {\n address sender = _msgSender();\n if (pendingOwner() != sender) {\n revert OwnableUnauthorizedAccount(sender);\n }\n _transferOwnership(sender);\n }\n}\n"},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/draft-IERC6093.sol)\npragma solidity >=0.8.4;\n\n/**\n * @dev Standard ERC-20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\n */\ninterface IERC20Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC20InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC20InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n * @param allowance Amount of tokens a `spender` is allowed to operate with.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC20InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC-721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\n */\ninterface IERC721Errors {\n /**\n * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\n * Used in balance queries.\n * @param owner Address of the current owner of a token.\n */\n error ERC721InvalidOwner(address owner);\n\n /**\n * @dev Indicates a `tokenId` whose `owner` is the zero address.\n * @param tokenId Identifier number of a token.\n */\n error ERC721NonexistentToken(uint256 tokenId);\n\n /**\n * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param tokenId Identifier number of a token.\n * @param owner Address of the current owner of a token.\n */\n error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC721InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC721InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param tokenId Identifier number of a token.\n */\n error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC721InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC-1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\n */\ninterface IERC1155Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n * @param tokenId Identifier number of a token.\n */\n error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC1155InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC1155InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param owner Address of the current owner of a token.\n */\n error ERC1155MissingApprovalForAll(address operator, address owner);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC1155InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC1155InvalidOperator(address operator);\n\n /**\n * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n * Used in batch transfers.\n * @param idsLength Length of the array of token identifiers\n * @param valuesLength Length of the array of token amounts\n */\n error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n"},"@openzeppelin/contracts/interfaces/IERC1271.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC1271.sol)\n\npragma solidity >=0.5.0;\n\n/**\n * @dev Interface of the ERC-1271 standard signature validation method for\n * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\n */\ninterface IERC1271 {\n /**\n * @dev Should return whether the signature provided is valid for the provided data\n * @param hash Hash of the data to be signed\n * @param signature Signature byte array associated with `hash`\n */\n function isValidSignature(bytes32 hash, bytes calldata signature) external view returns (bytes4 magicValue);\n}\n"},"@openzeppelin/contracts/interfaces/IERC1363.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC1363.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n /*\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n * 0xb0202a11 ===\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n */\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @param data Additional data with no specified format, sent in call to `spender`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n"},"@openzeppelin/contracts/interfaces/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC165.sol)\n\npragma solidity >=0.4.16;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n"},"@openzeppelin/contracts/interfaces/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC20.sol)\n\npragma solidity >=0.4.16;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n"},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC4626.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\nimport {IERC20Metadata} from \"../token/ERC20/extensions/IERC20Metadata.sol\";\n\n/**\n * @dev Interface of the ERC-4626 \"Tokenized Vault Standard\", as defined in\n * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\n */\ninterface IERC4626 is IERC20, IERC20Metadata {\n event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);\n\n event Withdraw(\n address indexed sender,\n address indexed receiver,\n address indexed owner,\n uint256 assets,\n uint256 shares\n );\n\n /**\n * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n *\n * - MUST be an ERC-20 token contract.\n * - MUST NOT revert.\n */\n function asset() external view returns (address assetTokenAddress);\n\n /**\n * @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n *\n * - SHOULD include any compounding that occurs from yield.\n * - MUST be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT revert.\n */\n function totalAssets() external view returns (uint256 totalManagedAssets);\n\n /**\n * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToShares(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToAssets(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n * through a deposit call.\n *\n * - MUST return a limited value if receiver is subject to some deposit limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n * - MUST NOT revert.\n */\n function maxDeposit(address receiver) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n * call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n * in the same transaction.\n * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n * deposit would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewDeposit(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * deposit execution, and are accounted for during deposit.\n * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function deposit(uint256 assets, address receiver) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n * - MUST return a limited value if receiver is subject to some mint limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n * - MUST NOT revert.\n */\n function maxMint(address receiver) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n * in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n * same transaction.\n * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n * would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by minting.\n */\n function previewMint(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n * execution, and are accounted for during mint.\n * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function mint(uint256 shares, address receiver) external returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n * Vault, through a withdraw call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxWithdraw(address owner) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n * call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n * called\n * in the same transaction.\n * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n * the withdrawal would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewWithdraw(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * withdraw execution, and are accounted for during withdraw.\n * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n * through a redeem call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxRedeem(address owner) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their redemption at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n * in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n * same transaction.\n * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n * redemption would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\n */\n function previewRedeem(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * redeem execution, and are accounted for during redeem.\n * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);\n}\n"},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC20Metadata} from \"./extensions/IERC20Metadata.sol\";\nimport {Context} from \"../../utils/Context.sol\";\nimport {IERC20Errors} from \"../../interfaces/draft-IERC6093.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * The default value of {decimals} is 18. To change this, you should override\n * this function so it returns a different value.\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC-20\n * applications.\n */\nabstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {\n mapping(address account => uint256) private _balances;\n\n mapping(address account => mapping(address spender => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n\n /**\n * @dev Sets the values for {name} and {symbol}.\n *\n * Both values are immutable: they can only be set once during construction.\n */\n constructor(string memory name_, string memory symbol_) {\n _name = name_;\n _symbol = symbol_;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view virtual returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view virtual returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the default value returned by this function, unless\n * it's overridden.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view virtual returns (uint8) {\n return 18;\n }\n\n /// @inheritdoc IERC20\n function totalSupply() public view virtual returns (uint256) {\n return _totalSupply;\n }\n\n /// @inheritdoc IERC20\n function balanceOf(address account) public view virtual returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - the caller must have a balance of at least `value`.\n */\n function transfer(address to, uint256 value) public virtual returns (bool) {\n address owner = _msgSender();\n _transfer(owner, to, value);\n return true;\n }\n\n /// @inheritdoc IERC20\n function allowance(address owner, address spender) public view virtual returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n * `transferFrom`. This is semantically equivalent to an infinite approval.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 value) public virtual returns (bool) {\n address owner = _msgSender();\n _approve(owner, spender, value);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\n * Skips emitting an {Approval} event indicating an allowance update. This is not\n * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\n *\n * NOTE: Does not update the allowance if the current allowance\n * is the maximum `uint256`.\n *\n * Requirements:\n *\n * - `from` and `to` cannot be the zero address.\n * - `from` must have a balance of at least `value`.\n * - the caller must have allowance for ``from``'s tokens of at least\n * `value`.\n */\n function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\n address spender = _msgSender();\n _spendAllowance(from, spender, value);\n _transfer(from, to, value);\n return true;\n }\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to`.\n *\n * This internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead.\n */\n function _transfer(address from, address to, uint256 value) internal {\n if (from == address(0)) {\n revert ERC20InvalidSender(address(0));\n }\n if (to == address(0)) {\n revert ERC20InvalidReceiver(address(0));\n }\n _update(from, to, value);\n }\n\n /**\n * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n * this function.\n *\n * Emits a {Transfer} event.\n */\n function _update(address from, address to, uint256 value) internal virtual {\n if (from == address(0)) {\n // Overflow check required: The rest of the code assumes that totalSupply never overflows\n _totalSupply += value;\n } else {\n uint256 fromBalance = _balances[from];\n if (fromBalance < value) {\n revert ERC20InsufficientBalance(from, fromBalance, value);\n }\n unchecked {\n // Overflow not possible: value <= fromBalance <= totalSupply.\n _balances[from] = fromBalance - value;\n }\n }\n\n if (to == address(0)) {\n unchecked {\n // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\n _totalSupply -= value;\n }\n } else {\n unchecked {\n // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\n _balances[to] += value;\n }\n }\n\n emit Transfer(from, to, value);\n }\n\n /**\n * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n * Relies on the `_update` mechanism\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead.\n */\n function _mint(address account, uint256 value) internal {\n if (account == address(0)) {\n revert ERC20InvalidReceiver(address(0));\n }\n _update(address(0), account, value);\n }\n\n /**\n * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n * Relies on the `_update` mechanism.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead\n */\n function _burn(address account, uint256 value) internal {\n if (account == address(0)) {\n revert ERC20InvalidSender(address(0));\n }\n _update(account, address(0), value);\n }\n\n /**\n * @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n *\n * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\n */\n function _approve(address owner, address spender, uint256 value) internal {\n _approve(owner, spender, value, true);\n }\n\n /**\n * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n *\n * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\n * `Approval` event during `transferFrom` operations.\n *\n * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\n * true using the following override:\n *\n * ```solidity\n * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n * super._approve(owner, spender, value, true);\n * }\n * ```\n *\n * Requirements are the same as {_approve}.\n */\n function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\n if (owner == address(0)) {\n revert ERC20InvalidApprover(address(0));\n }\n if (spender == address(0)) {\n revert ERC20InvalidSpender(address(0));\n }\n _allowances[owner][spender] = value;\n if (emitEvent) {\n emit Approval(owner, spender, value);\n }\n }\n\n /**\n * @dev Updates `owner`'s allowance for `spender` based on spent `value`.\n *\n * Does not update the allowance value in case of infinite allowance.\n * Revert if not enough allowance is available.\n *\n * Does not emit an {Approval} event.\n */\n function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\n uint256 currentAllowance = allowance(owner, spender);\n if (currentAllowance < type(uint256).max) {\n if (currentAllowance < value) {\n revert ERC20InsufficientAllowance(spender, currentAllowance, value);\n }\n unchecked {\n _approve(owner, spender, currentAllowance - value, false);\n }\n }\n }\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n /**\n * @dev Returns the name of the token.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n */\n function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\n\npragma solidity >=0.4.16;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n /**\n * @dev An operation with an ERC-20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Variant of {safeTransfer} that returns a bool instead of reverting if the operation is not successful.\n */\n function trySafeTransfer(IERC20 token, address to, uint256 value) internal returns (bool) {\n return _callOptionalReturnBool(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Variant of {safeTransferFrom} that returns a bool instead of reverting if the operation is not successful.\n */\n function trySafeTransferFrom(IERC20 token, address from, address to, uint256 value) internal returns (bool) {\n return _callOptionalReturnBool(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n *\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n * set here.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n safeTransfer(token, to, value);\n } else if (!token.transferAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferFromAndCallRelaxed(\n IERC1363 token,\n address from,\n address to,\n uint256 value,\n bytes memory data\n ) internal {\n if (to.code.length == 0) {\n safeTransferFrom(token, from, to, value);\n } else if (!token.transferFromAndCall(from, to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n * once without retrying, and relies on the returned value to be true.\n *\n * Reverts if the returned value is other than `true`.\n */\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n forceApprove(token, to, value);\n } else if (!token.approveAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n // bubble errors\n if iszero(success) {\n let ptr := mload(0x40)\n returndatacopy(ptr, 0, returndatasize())\n revert(ptr, returndatasize())\n }\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n bool success;\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\n }\n}\n"},"@openzeppelin/contracts/utils/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert Errors.InsufficientBalance(address(this).balance, amount);\n }\n\n (bool success, bytes memory returndata) = recipient.call{value: amount}(\"\");\n if (!success) {\n _revert(returndata);\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {Errors.FailedCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert Errors.InsufficientBalance(address(this).balance, value);\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n * of an unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {Errors.FailedCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n assembly (\"memory-safe\") {\n revert(add(returndata, 0x20), mload(returndata))\n }\n } else {\n revert Errors.FailedCall();\n }\n }\n}\n"},"@openzeppelin/contracts/utils/Arrays.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/Arrays.sol)\n// This file was procedurally generated from scripts/generate/templates/Arrays.js.\n\npragma solidity ^0.8.20;\n\nimport {Comparators} from \"./Comparators.sol\";\nimport {SlotDerivation} from \"./SlotDerivation.sol\";\nimport {StorageSlot} from \"./StorageSlot.sol\";\nimport {Math} from \"./math/Math.sol\";\n\n/**\n * @dev Collection of functions related to array types.\n */\nlibrary Arrays {\n using SlotDerivation for bytes32;\n using StorageSlot for bytes32;\n\n /**\n * @dev Sort an array of uint256 (in memory) following the provided comparator function.\n *\n * This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n * convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n *\n * NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n * array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n * when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n * consume more gas than is available in a block, leading to potential DoS.\n *\n * IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way.\n */\n function sort(\n uint256[] memory array,\n function(uint256, uint256) pure returns (bool) comp\n ) internal pure returns (uint256[] memory) {\n _quickSort(_begin(array), _end(array), comp);\n return array;\n }\n\n /**\n * @dev Variant of {sort} that sorts an array of uint256 in increasing order.\n */\n function sort(uint256[] memory array) internal pure returns (uint256[] memory) {\n sort(array, Comparators.lt);\n return array;\n }\n\n /**\n * @dev Sort an array of address (in memory) following the provided comparator function.\n *\n * This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n * convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n *\n * NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n * array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n * when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n * consume more gas than is available in a block, leading to potential DoS.\n *\n * IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way.\n */\n function sort(\n address[] memory array,\n function(address, address) pure returns (bool) comp\n ) internal pure returns (address[] memory) {\n sort(_castToUint256Array(array), _castToUint256Comp(comp));\n return array;\n }\n\n /**\n * @dev Variant of {sort} that sorts an array of address in increasing order.\n */\n function sort(address[] memory array) internal pure returns (address[] memory) {\n sort(_castToUint256Array(array), Comparators.lt);\n return array;\n }\n\n /**\n * @dev Sort an array of bytes32 (in memory) following the provided comparator function.\n *\n * This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n * convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n *\n * NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n * array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n * when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n * consume more gas than is available in a block, leading to potential DoS.\n *\n * IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way.\n */\n function sort(\n bytes32[] memory array,\n function(bytes32, bytes32) pure returns (bool) comp\n ) internal pure returns (bytes32[] memory) {\n sort(_castToUint256Array(array), _castToUint256Comp(comp));\n return array;\n }\n\n /**\n * @dev Variant of {sort} that sorts an array of bytes32 in increasing order.\n */\n function sort(bytes32[] memory array) internal pure returns (bytes32[] memory) {\n sort(_castToUint256Array(array), Comparators.lt);\n return array;\n }\n\n /**\n * @dev Performs a quick sort of a segment of memory. The segment sorted starts at `begin` (inclusive), and stops\n * at end (exclusive). Sorting follows the `comp` comparator.\n *\n * Invariant: `begin <= end`. This is the case when initially called by {sort} and is preserved in subcalls.\n *\n * IMPORTANT: Memory locations between `begin` and `end` are not validated/zeroed. This function should\n * be used only if the limits are within a memory array.\n */\n function _quickSort(uint256 begin, uint256 end, function(uint256, uint256) pure returns (bool) comp) private pure {\n unchecked {\n if (end - begin < 0x40) return;\n\n // Use first element as pivot\n uint256 pivot = _mload(begin);\n // Position where the pivot should be at the end of the loop\n uint256 pos = begin;\n\n for (uint256 it = begin + 0x20; it < end; it += 0x20) {\n if (comp(_mload(it), pivot)) {\n // If the value stored at the iterator's position comes before the pivot, we increment the\n // position of the pivot and move the value there.\n pos += 0x20;\n _swap(pos, it);\n }\n }\n\n _swap(begin, pos); // Swap pivot into place\n _quickSort(begin, pos, comp); // Sort the left side of the pivot\n _quickSort(pos + 0x20, end, comp); // Sort the right side of the pivot\n }\n }\n\n /**\n * @dev Pointer to the memory location of the first element of `array`.\n */\n function _begin(uint256[] memory array) private pure returns (uint256 ptr) {\n assembly (\"memory-safe\") {\n ptr := add(array, 0x20)\n }\n }\n\n /**\n * @dev Pointer to the memory location of the first memory word (32bytes) after `array`. This is the memory word\n * that comes just after the last element of the array.\n */\n function _end(uint256[] memory array) private pure returns (uint256 ptr) {\n unchecked {\n return _begin(array) + array.length * 0x20;\n }\n }\n\n /**\n * @dev Load memory word (as a uint256) at location `ptr`.\n */\n function _mload(uint256 ptr) private pure returns (uint256 value) {\n assembly {\n value := mload(ptr)\n }\n }\n\n /**\n * @dev Swaps the elements memory location `ptr1` and `ptr2`.\n */\n function _swap(uint256 ptr1, uint256 ptr2) private pure {\n assembly {\n let value1 := mload(ptr1)\n let value2 := mload(ptr2)\n mstore(ptr1, value2)\n mstore(ptr2, value1)\n }\n }\n\n /// @dev Helper: low level cast address memory array to uint256 memory array\n function _castToUint256Array(address[] memory input) private pure returns (uint256[] memory output) {\n assembly {\n output := input\n }\n }\n\n /// @dev Helper: low level cast bytes32 memory array to uint256 memory array\n function _castToUint256Array(bytes32[] memory input) private pure returns (uint256[] memory output) {\n assembly {\n output := input\n }\n }\n\n /// @dev Helper: low level cast address comp function to uint256 comp function\n function _castToUint256Comp(\n function(address, address) pure returns (bool) input\n ) private pure returns (function(uint256, uint256) pure returns (bool) output) {\n assembly {\n output := input\n }\n }\n\n /// @dev Helper: low level cast bytes32 comp function to uint256 comp function\n function _castToUint256Comp(\n function(bytes32, bytes32) pure returns (bool) input\n ) private pure returns (function(uint256, uint256) pure returns (bool) output) {\n assembly {\n output := input\n }\n }\n\n /**\n * @dev Searches a sorted `array` and returns the first index that contains\n * a value greater or equal to `element`. If no such index exists (i.e. all\n * values in the array are strictly less than `element`), the array length is\n * returned. Time complexity O(log n).\n *\n * NOTE: The `array` is expected to be sorted in ascending order, and to\n * contain no repeated elements.\n *\n * IMPORTANT: Deprecated. This implementation behaves as {lowerBound} but lacks\n * support for repeated elements in the array. The {lowerBound} function should\n * be used instead.\n */\n function findUpperBound(uint256[] storage array, uint256 element) internal view returns (uint256) {\n uint256 low = 0;\n uint256 high = array.length;\n\n if (high == 0) {\n return 0;\n }\n\n while (low < high) {\n uint256 mid = Math.average(low, high);\n\n // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n // because Math.average rounds towards zero (it does integer division with truncation).\n if (unsafeAccess(array, mid).value > element) {\n high = mid;\n } else {\n low = mid + 1;\n }\n }\n\n // At this point `low` is the exclusive upper bound. We will return the inclusive upper bound.\n if (low > 0 && unsafeAccess(array, low - 1).value == element) {\n return low - 1;\n } else {\n return low;\n }\n }\n\n /**\n * @dev Searches an `array` sorted in ascending order and returns the first\n * index that contains a value greater or equal than `element`. If no such index\n * exists (i.e. all values in the array are strictly less than `element`), the array\n * length is returned. Time complexity O(log n).\n *\n * See C++'s https://en.cppreference.com/w/cpp/algorithm/lower_bound[lower_bound].\n */\n function lowerBound(uint256[] storage array, uint256 element) internal view returns (uint256) {\n uint256 low = 0;\n uint256 high = array.length;\n\n if (high == 0) {\n return 0;\n }\n\n while (low < high) {\n uint256 mid = Math.average(low, high);\n\n // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n // because Math.average rounds towards zero (it does integer division with truncation).\n if (unsafeAccess(array, mid).value < element) {\n // this cannot overflow because mid < high\n unchecked {\n low = mid + 1;\n }\n } else {\n high = mid;\n }\n }\n\n return low;\n }\n\n /**\n * @dev Searches an `array` sorted in ascending order and returns the first\n * index that contains a value strictly greater than `element`. If no such index\n * exists (i.e. all values in the array are strictly less than `element`), the array\n * length is returned. Time complexity O(log n).\n *\n * See C++'s https://en.cppreference.com/w/cpp/algorithm/upper_bound[upper_bound].\n */\n function upperBound(uint256[] storage array, uint256 element) internal view returns (uint256) {\n uint256 low = 0;\n uint256 high = array.length;\n\n if (high == 0) {\n return 0;\n }\n\n while (low < high) {\n uint256 mid = Math.average(low, high);\n\n // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n // because Math.average rounds towards zero (it does integer division with truncation).\n if (unsafeAccess(array, mid).value > element) {\n high = mid;\n } else {\n // this cannot overflow because mid < high\n unchecked {\n low = mid + 1;\n }\n }\n }\n\n return low;\n }\n\n /**\n * @dev Same as {lowerBound}, but with an array in memory.\n */\n function lowerBoundMemory(uint256[] memory array, uint256 element) internal pure returns (uint256) {\n uint256 low = 0;\n uint256 high = array.length;\n\n if (high == 0) {\n return 0;\n }\n\n while (low < high) {\n uint256 mid = Math.average(low, high);\n\n // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n // because Math.average rounds towards zero (it does integer division with truncation).\n if (unsafeMemoryAccess(array, mid) < element) {\n // this cannot overflow because mid < high\n unchecked {\n low = mid + 1;\n }\n } else {\n high = mid;\n }\n }\n\n return low;\n }\n\n /**\n * @dev Same as {upperBound}, but with an array in memory.\n */\n function upperBoundMemory(uint256[] memory array, uint256 element) internal pure returns (uint256) {\n uint256 low = 0;\n uint256 high = array.length;\n\n if (high == 0) {\n return 0;\n }\n\n while (low < high) {\n uint256 mid = Math.average(low, high);\n\n // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n // because Math.average rounds towards zero (it does integer division with truncation).\n if (unsafeMemoryAccess(array, mid) > element) {\n high = mid;\n } else {\n // this cannot overflow because mid < high\n unchecked {\n low = mid + 1;\n }\n }\n }\n\n return low;\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeAccess(address[] storage arr, uint256 pos) internal pure returns (StorageSlot.AddressSlot storage) {\n bytes32 slot;\n assembly (\"memory-safe\") {\n slot := arr.slot\n }\n return slot.deriveArray().offset(pos).getAddressSlot();\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeAccess(bytes32[] storage arr, uint256 pos) internal pure returns (StorageSlot.Bytes32Slot storage) {\n bytes32 slot;\n assembly (\"memory-safe\") {\n slot := arr.slot\n }\n return slot.deriveArray().offset(pos).getBytes32Slot();\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeAccess(uint256[] storage arr, uint256 pos) internal pure returns (StorageSlot.Uint256Slot storage) {\n bytes32 slot;\n assembly (\"memory-safe\") {\n slot := arr.slot\n }\n return slot.deriveArray().offset(pos).getUint256Slot();\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeAccess(bytes[] storage arr, uint256 pos) internal pure returns (StorageSlot.BytesSlot storage) {\n bytes32 slot;\n assembly (\"memory-safe\") {\n slot := arr.slot\n }\n return slot.deriveArray().offset(pos).getBytesSlot();\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeAccess(string[] storage arr, uint256 pos) internal pure returns (StorageSlot.StringSlot storage) {\n bytes32 slot;\n assembly (\"memory-safe\") {\n slot := arr.slot\n }\n return slot.deriveArray().offset(pos).getStringSlot();\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeMemoryAccess(address[] memory arr, uint256 pos) internal pure returns (address res) {\n assembly {\n res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n }\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeMemoryAccess(bytes32[] memory arr, uint256 pos) internal pure returns (bytes32 res) {\n assembly {\n res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n }\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeMemoryAccess(uint256[] memory arr, uint256 pos) internal pure returns (uint256 res) {\n assembly {\n res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n }\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeMemoryAccess(bytes[] memory arr, uint256 pos) internal pure returns (bytes memory res) {\n assembly {\n res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n }\n }\n\n /**\n * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n *\n * WARNING: Only use if you are certain `pos` is lower than the array length.\n */\n function unsafeMemoryAccess(string[] memory arr, uint256 pos) internal pure returns (string memory res) {\n assembly {\n res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n }\n }\n\n /**\n * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n *\n * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n */\n function unsafeSetLength(address[] storage array, uint256 len) internal {\n assembly (\"memory-safe\") {\n sstore(array.slot, len)\n }\n }\n\n /**\n * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n *\n * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n */\n function unsafeSetLength(bytes32[] storage array, uint256 len) internal {\n assembly (\"memory-safe\") {\n sstore(array.slot, len)\n }\n }\n\n /**\n * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n *\n * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n */\n function unsafeSetLength(uint256[] storage array, uint256 len) internal {\n assembly (\"memory-safe\") {\n sstore(array.slot, len)\n }\n }\n\n /**\n * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n *\n * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n */\n function unsafeSetLength(bytes[] storage array, uint256 len) internal {\n assembly (\"memory-safe\") {\n sstore(array.slot, len)\n }\n }\n\n /**\n * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n *\n * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n */\n function unsafeSetLength(string[] storage array, uint256 len) internal {\n assembly (\"memory-safe\") {\n sstore(array.slot, len)\n }\n }\n}\n"},"@openzeppelin/contracts/utils/Comparators.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Comparators.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides a set of functions to compare values.\n *\n * _Available since v5.1._\n */\nlibrary Comparators {\n function lt(uint256 a, uint256 b) internal pure returns (bool) {\n return a < b;\n }\n\n function gt(uint256 a, uint256 b) internal pure returns (bool) {\n return a > b;\n }\n}\n"},"@openzeppelin/contracts/utils/Context.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n"},"@openzeppelin/contracts/utils/Errors.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error InsufficientBalance(uint256 balance, uint256 needed);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedCall();\n\n /**\n * @dev The deployment failed.\n */\n error FailedDeployment();\n\n /**\n * @dev A necessary precompile is missing.\n */\n error MissingPrecompile(address);\n}\n"},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/IERC165.sol)\n\npragma solidity >=0.4.16;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"},"@openzeppelin/contracts/utils/math/Math.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.20;\n\nimport {Panic} from \"../Panic.sol\";\nimport {SafeCast} from \"./SafeCast.sol\";\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n enum Rounding {\n Floor, // Toward negative infinity\n Ceil, // Toward positive infinity\n Trunc, // Toward zero\n Expand // Away from zero\n }\n\n /**\n * @dev Return the 512-bit addition of two uint256.\n *\n * The result is stored in two 256 variables such that sum = high * 2²⁵⁶ + low.\n */\n function add512(uint256 a, uint256 b) internal pure returns (uint256 high, uint256 low) {\n assembly (\"memory-safe\") {\n low := add(a, b)\n high := lt(low, a)\n }\n }\n\n /**\n * @dev Return the 512-bit multiplication of two uint256.\n *\n * The result is stored in two 256 variables such that product = high * 2²⁵⁶ + low.\n */\n function mul512(uint256 a, uint256 b) internal pure returns (uint256 high, uint256 low) {\n // 512-bit multiply [high low] = x * y. Compute the product mod 2²⁵⁶ and mod 2²⁵⁶ - 1, then use\n // the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = high * 2²⁵⁶ + low.\n assembly (\"memory-safe\") {\n let mm := mulmod(a, b, not(0))\n low := mul(a, b)\n high := sub(sub(mm, low), lt(mm, low))\n }\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, with a success flag (no overflow).\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n uint256 c = a + b;\n success = c >= a;\n result = c * SafeCast.toUint(success);\n }\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, with a success flag (no overflow).\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n uint256 c = a - b;\n success = c <= a;\n result = c * SafeCast.toUint(success);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with a success flag (no overflow).\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n uint256 c = a * b;\n assembly (\"memory-safe\") {\n // Only true when the multiplication doesn't overflow\n // (c / a == b) || (a == 0)\n success := or(eq(div(c, a), b), iszero(a))\n }\n // equivalent to: success ? c : 0\n result = c * SafeCast.toUint(success);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a success flag (no division by zero).\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n success = b > 0;\n assembly (\"memory-safe\") {\n // The `DIV` opcode returns zero when the denominator is 0.\n result := div(a, b)\n }\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a success flag (no division by zero).\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n success = b > 0;\n assembly (\"memory-safe\") {\n // The `MOD` opcode returns zero when the denominator is 0.\n result := mod(a, b)\n }\n }\n }\n\n /**\n * @dev Unsigned saturating addition, bounds to `2²⁵⁶ - 1` instead of overflowing.\n */\n function saturatingAdd(uint256 a, uint256 b) internal pure returns (uint256) {\n (bool success, uint256 result) = tryAdd(a, b);\n return ternary(success, result, type(uint256).max);\n }\n\n /**\n * @dev Unsigned saturating subtraction, bounds to zero instead of overflowing.\n */\n function saturatingSub(uint256 a, uint256 b) internal pure returns (uint256) {\n (, uint256 result) = trySub(a, b);\n return result;\n }\n\n /**\n * @dev Unsigned saturating multiplication, bounds to `2²⁵⁶ - 1` instead of overflowing.\n */\n function saturatingMul(uint256 a, uint256 b) internal pure returns (uint256) {\n (bool success, uint256 result) = tryMul(a, b);\n return ternary(success, result, type(uint256).max);\n }\n\n /**\n * @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n *\n * IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n * However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n * one branch when needed, making this function more expensive.\n */\n function ternary(bool condition, uint256 a, uint256 b) internal pure returns (uint256) {\n unchecked {\n // branchless ternary works because:\n // b ^ (a ^ b) == a\n // b ^ 0 == b\n return b ^ ((a ^ b) * SafeCast.toUint(condition));\n }\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return ternary(a > b, a, b);\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return ternary(a < b, a, b);\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds towards infinity instead\n * of rounding towards zero.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n if (b == 0) {\n // Guarantee the same behavior as in a regular Solidity division.\n Panic.panic(Panic.DIVISION_BY_ZERO);\n }\n\n // The following calculation ensures accurate ceiling division without overflow.\n // Since a is non-zero, (a - 1) / b will not overflow.\n // The largest possible result occurs when (a - 1) / b is type(uint256).max,\n // but the largest value we can obtain is type(uint256).max - 1, which happens\n // when a = type(uint256).max and b = 1.\n unchecked {\n return SafeCast.toUint(a > 0) * ((a - 1) / b + 1);\n }\n }\n\n /**\n * @dev Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n * denominator == 0.\n *\n * Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n * Uniswap Labs also under MIT license.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\n unchecked {\n (uint256 high, uint256 low) = mul512(x, y);\n\n // Handle non-overflow cases, 256 by 256 division.\n if (high == 0) {\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\n // The surrounding unchecked block does not change this fact.\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\n return low / denominator;\n }\n\n // Make sure the result is less than 2²⁵⁶. Also prevents denominator == 0.\n if (denominator <= high) {\n Panic.panic(ternary(denominator == 0, Panic.DIVISION_BY_ZERO, Panic.UNDER_OVERFLOW));\n }\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [high low].\n uint256 remainder;\n assembly (\"memory-safe\") {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n high := sub(high, gt(remainder, low))\n low := sub(low, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\n // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\n\n uint256 twos = denominator & (0 - denominator);\n assembly (\"memory-safe\") {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [high low] by twos.\n low := div(low, twos)\n\n // Flip twos such that it is 2²⁵⁶ / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from high into low.\n low |= high * twos;\n\n // Invert denominator mod 2²⁵⁶. Now that denominator is an odd number, it has an inverse modulo 2²⁵⁶ such\n // that denominator * inv ≡ 1 mod 2²⁵⁶. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv ≡ 1 mod 2⁴.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\n // works in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2⁸\n inverse *= 2 - denominator * inverse; // inverse mod 2¹⁶\n inverse *= 2 - denominator * inverse; // inverse mod 2³²\n inverse *= 2 - denominator * inverse; // inverse mod 2⁶⁴\n inverse *= 2 - denominator * inverse; // inverse mod 2¹²⁸\n inverse *= 2 - denominator * inverse; // inverse mod 2²⁵⁶\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2²⁵⁶. Since the preconditions guarantee that the outcome is\n // less than 2²⁵⁶, this is the final result. We don't need to compute the high bits of the result and high\n // is no longer required.\n result = low * inverse;\n return result;\n }\n }\n\n /**\n * @dev Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\n return mulDiv(x, y, denominator) + SafeCast.toUint(unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0);\n }\n\n /**\n * @dev Calculates floor(x * y >> n) with full precision. Throws if result overflows a uint256.\n */\n function mulShr(uint256 x, uint256 y, uint8 n) internal pure returns (uint256 result) {\n unchecked {\n (uint256 high, uint256 low) = mul512(x, y);\n if (high >= 1 << n) {\n Panic.panic(Panic.UNDER_OVERFLOW);\n }\n return (high << (256 - n)) | (low >> n);\n }\n }\n\n /**\n * @dev Calculates x * y >> n with full precision, following the selected rounding direction.\n */\n function mulShr(uint256 x, uint256 y, uint8 n, Rounding rounding) internal pure returns (uint256) {\n return mulShr(x, y, n) + SafeCast.toUint(unsignedRoundsUp(rounding) && mulmod(x, y, 1 << n) > 0);\n }\n\n /**\n * @dev Calculate the modular multiplicative inverse of a number in Z/nZ.\n *\n * If n is a prime, then Z/nZ is a field. In that case all elements are inversible, except 0.\n * If n is not a prime, then Z/nZ is not a field, and some elements might not be inversible.\n *\n * If the input value is not inversible, 0 is returned.\n *\n * NOTE: If you know for sure that n is (big) a prime, it may be cheaper to use Fermat's little theorem and get the\n * inverse using `Math.modExp(a, n - 2, n)`. See {invModPrime}.\n */\n function invMod(uint256 a, uint256 n) internal pure returns (uint256) {\n unchecked {\n if (n == 0) return 0;\n\n // The inverse modulo is calculated using the Extended Euclidean Algorithm (iterative version)\n // Used to compute integers x and y such that: ax + ny = gcd(a, n).\n // When the gcd is 1, then the inverse of a modulo n exists and it's x.\n // ax + ny = 1\n // ax = 1 + (-y)n\n // ax ≡ 1 (mod n) # x is the inverse of a modulo n\n\n // If the remainder is 0 the gcd is n right away.\n uint256 remainder = a % n;\n uint256 gcd = n;\n\n // Therefore the initial coefficients are:\n // ax + ny = gcd(a, n) = n\n // 0a + 1n = n\n int256 x = 0;\n int256 y = 1;\n\n while (remainder != 0) {\n uint256 quotient = gcd / remainder;\n\n (gcd, remainder) = (\n // The old remainder is the next gcd to try.\n remainder,\n // Compute the next remainder.\n // Can't overflow given that (a % gcd) * (gcd // (a % gcd)) <= gcd\n // where gcd is at most n (capped to type(uint256).max)\n gcd - remainder * quotient\n );\n\n (x, y) = (\n // Increment the coefficient of a.\n y,\n // Decrement the coefficient of n.\n // Can overflow, but the result is casted to uint256 so that the\n // next value of y is \"wrapped around\" to a value between 0 and n - 1.\n x - y * int256(quotient)\n );\n }\n\n if (gcd != 1) return 0; // No inverse exists.\n return ternary(x < 0, n - uint256(-x), uint256(x)); // Wrap the result if it's negative.\n }\n }\n\n /**\n * @dev Variant of {invMod}. More efficient, but only works if `p` is known to be a prime greater than `2`.\n *\n * From https://en.wikipedia.org/wiki/Fermat%27s_little_theorem[Fermat's little theorem], we know that if p is\n * prime, then `a**(p-1) ≡ 1 mod p`. As a consequence, we have `a * a**(p-2) ≡ 1 mod p`, which means that\n * `a**(p-2)` is the modular multiplicative inverse of a in Fp.\n *\n * NOTE: this function does NOT check that `p` is a prime greater than `2`.\n */\n function invModPrime(uint256 a, uint256 p) internal view returns (uint256) {\n unchecked {\n return Math.modExp(a, p - 2, p);\n }\n }\n\n /**\n * @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m)\n *\n * Requirements:\n * - modulus can't be zero\n * - underlying staticcall to precompile must succeed\n *\n * IMPORTANT: The result is only valid if the underlying call succeeds. When using this function, make\n * sure the chain you're using it on supports the precompiled contract for modular exponentiation\n * at address 0x05 as specified in https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise,\n * the underlying function will succeed given the lack of a revert, but the result may be incorrectly\n * interpreted as 0.\n */\n function modExp(uint256 b, uint256 e, uint256 m) internal view returns (uint256) {\n (bool success, uint256 result) = tryModExp(b, e, m);\n if (!success) {\n Panic.panic(Panic.DIVISION_BY_ZERO);\n }\n return result;\n }\n\n /**\n * @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m).\n * It includes a success flag indicating if the operation succeeded. Operation will be marked as failed if trying\n * to operate modulo 0 or if the underlying precompile reverted.\n *\n * IMPORTANT: The result is only valid if the success flag is true. When using this function, make sure the chain\n * you're using it on supports the precompiled contract for modular exponentiation at address 0x05 as specified in\n * https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise, the underlying function will succeed given the lack\n * of a revert, but the result may be incorrectly interpreted as 0.\n */\n function tryModExp(uint256 b, uint256 e, uint256 m) internal view returns (bool success, uint256 result) {\n if (m == 0) return (false, 0);\n assembly (\"memory-safe\") {\n let ptr := mload(0x40)\n // | Offset | Content | Content (Hex) |\n // |-----------|------------|--------------------------------------------------------------------|\n // | 0x00:0x1f | size of b | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n // | 0x20:0x3f | size of e | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n // | 0x40:0x5f | size of m | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n // | 0x60:0x7f | value of b | 0x<.............................................................b> |\n // | 0x80:0x9f | value of e | 0x<.............................................................e> |\n // | 0xa0:0xbf | value of m | 0x<.............................................................m> |\n mstore(ptr, 0x20)\n mstore(add(ptr, 0x20), 0x20)\n mstore(add(ptr, 0x40), 0x20)\n mstore(add(ptr, 0x60), b)\n mstore(add(ptr, 0x80), e)\n mstore(add(ptr, 0xa0), m)\n\n // Given the result < m, it's guaranteed to fit in 32 bytes,\n // so we can use the memory scratch space located at offset 0.\n success := staticcall(gas(), 0x05, ptr, 0xc0, 0x00, 0x20)\n result := mload(0x00)\n }\n }\n\n /**\n * @dev Variant of {modExp} that supports inputs of arbitrary length.\n */\n function modExp(bytes memory b, bytes memory e, bytes memory m) internal view returns (bytes memory) {\n (bool success, bytes memory result) = tryModExp(b, e, m);\n if (!success) {\n Panic.panic(Panic.DIVISION_BY_ZERO);\n }\n return result;\n }\n\n /**\n * @dev Variant of {tryModExp} that supports inputs of arbitrary length.\n */\n function tryModExp(\n bytes memory b,\n bytes memory e,\n bytes memory m\n ) internal view returns (bool success, bytes memory result) {\n if (_zeroBytes(m)) return (false, new bytes(0));\n\n uint256 mLen = m.length;\n\n // Encode call args in result and move the free memory pointer\n result = abi.encodePacked(b.length, e.length, mLen, b, e, m);\n\n assembly (\"memory-safe\") {\n let dataPtr := add(result, 0x20)\n // Write result on top of args to avoid allocating extra memory.\n success := staticcall(gas(), 0x05, dataPtr, mload(result), dataPtr, mLen)\n // Overwrite the length.\n // result.length > returndatasize() is guaranteed because returndatasize() == m.length\n mstore(result, mLen)\n // Set the memory pointer after the returned data.\n mstore(0x40, add(dataPtr, mLen))\n }\n }\n\n /**\n * @dev Returns whether the provided byte array is zero.\n */\n function _zeroBytes(bytes memory byteArray) private pure returns (bool) {\n for (uint256 i = 0; i < byteArray.length; ++i) {\n if (byteArray[i] != 0) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n * towards zero.\n *\n * This method is based on Newton's method for computing square roots; the algorithm is restricted to only\n * using integer operations.\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n unchecked {\n // Take care of easy edge cases when a == 0 or a == 1\n if (a <= 1) {\n return a;\n }\n\n // In this function, we use Newton's method to get a root of `f(x) := x² - a`. It involves building a\n // sequence x_n that converges toward sqrt(a). For each iteration x_n, we also define the error between\n // the current value as `ε_n = | x_n - sqrt(a) |`.\n //\n // For our first estimation, we consider `e` the smallest power of 2 which is bigger than the square root\n // of the target. (i.e. `2**(e-1) ≤ sqrt(a) < 2**e`). We know that `e ≤ 128` because `(2¹²⁸)² = 2²⁵⁶` is\n // bigger than any uint256.\n //\n // By noticing that\n // `2**(e-1) ≤ sqrt(a) < 2**e → (2**(e-1))² ≤ a < (2**e)² → 2**(2*e-2) ≤ a < 2**(2*e)`\n // we can deduce that `e - 1` is `log2(a) / 2`. We can thus compute `x_n = 2**(e-1)` using a method similar\n // to the msb function.\n uint256 aa = a;\n uint256 xn = 1;\n\n if (aa >= (1 << 128)) {\n aa >>= 128;\n xn <<= 64;\n }\n if (aa >= (1 << 64)) {\n aa >>= 64;\n xn <<= 32;\n }\n if (aa >= (1 << 32)) {\n aa >>= 32;\n xn <<= 16;\n }\n if (aa >= (1 << 16)) {\n aa >>= 16;\n xn <<= 8;\n }\n if (aa >= (1 << 8)) {\n aa >>= 8;\n xn <<= 4;\n }\n if (aa >= (1 << 4)) {\n aa >>= 4;\n xn <<= 2;\n }\n if (aa >= (1 << 2)) {\n xn <<= 1;\n }\n\n // We now have x_n such that `x_n = 2**(e-1) ≤ sqrt(a) < 2**e = 2 * x_n`. This implies ε_n ≤ 2**(e-1).\n //\n // We can refine our estimation by noticing that the middle of that interval minimizes the error.\n // If we move x_n to equal 2**(e-1) + 2**(e-2), then we reduce the error to ε_n ≤ 2**(e-2).\n // This is going to be our x_0 (and ε_0)\n xn = (3 * xn) >> 1; // ε_0 := | x_0 - sqrt(a) | ≤ 2**(e-2)\n\n // From here, Newton's method give us:\n // x_{n+1} = (x_n + a / x_n) / 2\n //\n // One should note that:\n // x_{n+1}² - a = ((x_n + a / x_n) / 2)² - a\n // = ((x_n² + a) / (2 * x_n))² - a\n // = (x_n⁴ + 2 * a * x_n² + a²) / (4 * x_n²) - a\n // = (x_n⁴ + 2 * a * x_n² + a² - 4 * a * x_n²) / (4 * x_n²)\n // = (x_n⁴ - 2 * a * x_n² + a²) / (4 * x_n²)\n // = (x_n² - a)² / (2 * x_n)²\n // = ((x_n² - a) / (2 * x_n))²\n // ≥ 0\n // Which proves that for all n ≥ 1, sqrt(a) ≤ x_n\n //\n // This gives us the proof of quadratic convergence of the sequence:\n // ε_{n+1} = | x_{n+1} - sqrt(a) |\n // = | (x_n + a / x_n) / 2 - sqrt(a) |\n // = | (x_n² + a - 2*x_n*sqrt(a)) / (2 * x_n) |\n // = | (x_n - sqrt(a))² / (2 * x_n) |\n // = | ε_n² / (2 * x_n) |\n // = ε_n² / | (2 * x_n) |\n //\n // For the first iteration, we have a special case where x_0 is known:\n // ε_1 = ε_0² / | (2 * x_0) |\n // ≤ (2**(e-2))² / (2 * (2**(e-1) + 2**(e-2)))\n // ≤ 2**(2*e-4) / (3 * 2**(e-1))\n // ≤ 2**(e-3) / 3\n // ≤ 2**(e-3-log2(3))\n // ≤ 2**(e-4.5)\n //\n // For the following iterations, we use the fact that, 2**(e-1) ≤ sqrt(a) ≤ x_n:\n // ε_{n+1} = ε_n² / | (2 * x_n) |\n // ≤ (2**(e-k))² / (2 * 2**(e-1))\n // ≤ 2**(2*e-2*k) / 2**e\n // ≤ 2**(e-2*k)\n xn = (xn + a / xn) >> 1; // ε_1 := | x_1 - sqrt(a) | ≤ 2**(e-4.5) -- special case, see above\n xn = (xn + a / xn) >> 1; // ε_2 := | x_2 - sqrt(a) | ≤ 2**(e-9) -- general case with k = 4.5\n xn = (xn + a / xn) >> 1; // ε_3 := | x_3 - sqrt(a) | ≤ 2**(e-18) -- general case with k = 9\n xn = (xn + a / xn) >> 1; // ε_4 := | x_4 - sqrt(a) | ≤ 2**(e-36) -- general case with k = 18\n xn = (xn + a / xn) >> 1; // ε_5 := | x_5 - sqrt(a) | ≤ 2**(e-72) -- general case with k = 36\n xn = (xn + a / xn) >> 1; // ε_6 := | x_6 - sqrt(a) | ≤ 2**(e-144) -- general case with k = 72\n\n // Because e ≤ 128 (as discussed during the first estimation phase), we know have reached a precision\n // ε_6 ≤ 2**(e-144) < 1. Given we're operating on integers, then we can ensure that xn is now either\n // sqrt(a) or sqrt(a) + 1.\n return xn - SafeCast.toUint(xn > a / xn);\n }\n }\n\n /**\n * @dev Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && result * result < a);\n }\n }\n\n /**\n * @dev Return the log in base 2 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log2(uint256 x) internal pure returns (uint256 r) {\n // If value has upper 128 bits set, log2 result is at least 128\n r = SafeCast.toUint(x > 0xffffffffffffffffffffffffffffffff) << 7;\n // If upper 64 bits of 128-bit half set, add 64 to result\n r |= SafeCast.toUint((x >> r) > 0xffffffffffffffff) << 6;\n // If upper 32 bits of 64-bit half set, add 32 to result\n r |= SafeCast.toUint((x >> r) > 0xffffffff) << 5;\n // If upper 16 bits of 32-bit half set, add 16 to result\n r |= SafeCast.toUint((x >> r) > 0xffff) << 4;\n // If upper 8 bits of 16-bit half set, add 8 to result\n r |= SafeCast.toUint((x >> r) > 0xff) << 3;\n // If upper 4 bits of 8-bit half set, add 4 to result\n r |= SafeCast.toUint((x >> r) > 0xf) << 2;\n\n // Shifts value right by the current result and use it as an index into this lookup table:\n //\n // | x (4 bits) | index | table[index] = MSB position |\n // |------------|---------|-----------------------------|\n // | 0000 | 0 | table[0] = 0 |\n // | 0001 | 1 | table[1] = 0 |\n // | 0010 | 2 | table[2] = 1 |\n // | 0011 | 3 | table[3] = 1 |\n // | 0100 | 4 | table[4] = 2 |\n // | 0101 | 5 | table[5] = 2 |\n // | 0110 | 6 | table[6] = 2 |\n // | 0111 | 7 | table[7] = 2 |\n // | 1000 | 8 | table[8] = 3 |\n // | 1001 | 9 | table[9] = 3 |\n // | 1010 | 10 | table[10] = 3 |\n // | 1011 | 11 | table[11] = 3 |\n // | 1100 | 12 | table[12] = 3 |\n // | 1101 | 13 | table[13] = 3 |\n // | 1110 | 14 | table[14] = 3 |\n // | 1111 | 15 | table[15] = 3 |\n //\n // The lookup table is represented as a 32-byte value with the MSB positions for 0-15 in the last 16 bytes.\n assembly (\"memory-safe\") {\n r := or(r, byte(shr(r, x), 0x0000010102020202030303030303030300000000000000000000000000000000))\n }\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << result < value);\n }\n }\n\n /**\n * @dev Return the log in base 10 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10 ** 64) {\n value /= 10 ** 64;\n result += 64;\n }\n if (value >= 10 ** 32) {\n value /= 10 ** 32;\n result += 32;\n }\n if (value >= 10 ** 16) {\n value /= 10 ** 16;\n result += 16;\n }\n if (value >= 10 ** 8) {\n value /= 10 ** 8;\n result += 8;\n }\n if (value >= 10 ** 4) {\n value /= 10 ** 4;\n result += 4;\n }\n if (value >= 10 ** 2) {\n value /= 10 ** 2;\n result += 2;\n }\n if (value >= 10 ** 1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 10 ** result < value);\n }\n }\n\n /**\n * @dev Return the log in base 256 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 x) internal pure returns (uint256 r) {\n // If value has upper 128 bits set, log2 result is at least 128\n r = SafeCast.toUint(x > 0xffffffffffffffffffffffffffffffff) << 7;\n // If upper 64 bits of 128-bit half set, add 64 to result\n r |= SafeCast.toUint((x >> r) > 0xffffffffffffffff) << 6;\n // If upper 32 bits of 64-bit half set, add 32 to result\n r |= SafeCast.toUint((x >> r) > 0xffffffff) << 5;\n // If upper 16 bits of 32-bit half set, add 16 to result\n r |= SafeCast.toUint((x >> r) > 0xffff) << 4;\n // Add 1 if upper 8 bits of 16-bit half set, and divide accumulated result by 8\n return (r >> 3) | SafeCast.toUint((x >> r) > 0xff);\n }\n\n /**\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << (result << 3) < value);\n }\n }\n\n /**\n * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\n */\n function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\n return uint8(rounding) % 2 == 1;\n }\n}\n"},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SafeCast.sol)\n// This file was procedurally generated from scripts/generate/templates/SafeCast.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeCast {\n /**\n * @dev Value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);\n\n /**\n * @dev An int value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedIntToUint(int256 value);\n\n /**\n * @dev Value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedIntDowncast(uint8 bits, int256 value);\n\n /**\n * @dev An uint value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedUintToInt(uint256 value);\n\n /**\n * @dev Returns the downcasted uint248 from uint256, reverting on\n * overflow (when the input is greater than largest uint248).\n *\n * Counterpart to Solidity's `uint248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toUint248(uint256 value) internal pure returns (uint248) {\n if (value > type(uint248).max) {\n revert SafeCastOverflowedUintDowncast(248, value);\n }\n return uint248(value);\n }\n\n /**\n * @dev Returns the downcasted uint240 from uint256, reverting on\n * overflow (when the input is greater than largest uint240).\n *\n * Counterpart to Solidity's `uint240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toUint240(uint256 value) internal pure returns (uint240) {\n if (value > type(uint240).max) {\n revert SafeCastOverflowedUintDowncast(240, value);\n }\n return uint240(value);\n }\n\n /**\n * @dev Returns the downcasted uint232 from uint256, reverting on\n * overflow (when the input is greater than largest uint232).\n *\n * Counterpart to Solidity's `uint232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toUint232(uint256 value) internal pure returns (uint232) {\n if (value > type(uint232).max) {\n revert SafeCastOverflowedUintDowncast(232, value);\n }\n return uint232(value);\n }\n\n /**\n * @dev Returns the downcasted uint224 from uint256, reverting on\n * overflow (when the input is greater than largest uint224).\n *\n * Counterpart to Solidity's `uint224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toUint224(uint256 value) internal pure returns (uint224) {\n if (value > type(uint224).max) {\n revert SafeCastOverflowedUintDowncast(224, value);\n }\n return uint224(value);\n }\n\n /**\n * @dev Returns the downcasted uint216 from uint256, reverting on\n * overflow (when the input is greater than largest uint216).\n *\n * Counterpart to Solidity's `uint216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toUint216(uint256 value) internal pure returns (uint216) {\n if (value > type(uint216).max) {\n revert SafeCastOverflowedUintDowncast(216, value);\n }\n return uint216(value);\n }\n\n /**\n * @dev Returns the downcasted uint208 from uint256, reverting on\n * overflow (when the input is greater than largest uint208).\n *\n * Counterpart to Solidity's `uint208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toUint208(uint256 value) internal pure returns (uint208) {\n if (value > type(uint208).max) {\n revert SafeCastOverflowedUintDowncast(208, value);\n }\n return uint208(value);\n }\n\n /**\n * @dev Returns the downcasted uint200 from uint256, reverting on\n * overflow (when the input is greater than largest uint200).\n *\n * Counterpart to Solidity's `uint200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toUint200(uint256 value) internal pure returns (uint200) {\n if (value > type(uint200).max) {\n revert SafeCastOverflowedUintDowncast(200, value);\n }\n return uint200(value);\n }\n\n /**\n * @dev Returns the downcasted uint192 from uint256, reverting on\n * overflow (when the input is greater than largest uint192).\n *\n * Counterpart to Solidity's `uint192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toUint192(uint256 value) internal pure returns (uint192) {\n if (value > type(uint192).max) {\n revert SafeCastOverflowedUintDowncast(192, value);\n }\n return uint192(value);\n }\n\n /**\n * @dev Returns the downcasted uint184 from uint256, reverting on\n * overflow (when the input is greater than largest uint184).\n *\n * Counterpart to Solidity's `uint184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toUint184(uint256 value) internal pure returns (uint184) {\n if (value > type(uint184).max) {\n revert SafeCastOverflowedUintDowncast(184, value);\n }\n return uint184(value);\n }\n\n /**\n * @dev Returns the downcasted uint176 from uint256, reverting on\n * overflow (when the input is greater than largest uint176).\n *\n * Counterpart to Solidity's `uint176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toUint176(uint256 value) internal pure returns (uint176) {\n if (value > type(uint176).max) {\n revert SafeCastOverflowedUintDowncast(176, value);\n }\n return uint176(value);\n }\n\n /**\n * @dev Returns the downcasted uint168 from uint256, reverting on\n * overflow (when the input is greater than largest uint168).\n *\n * Counterpart to Solidity's `uint168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toUint168(uint256 value) internal pure returns (uint168) {\n if (value > type(uint168).max) {\n revert SafeCastOverflowedUintDowncast(168, value);\n }\n return uint168(value);\n }\n\n /**\n * @dev Returns the downcasted uint160 from uint256, reverting on\n * overflow (when the input is greater than largest uint160).\n *\n * Counterpart to Solidity's `uint160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toUint160(uint256 value) internal pure returns (uint160) {\n if (value > type(uint160).max) {\n revert SafeCastOverflowedUintDowncast(160, value);\n }\n return uint160(value);\n }\n\n /**\n * @dev Returns the downcasted uint152 from uint256, reverting on\n * overflow (when the input is greater than largest uint152).\n *\n * Counterpart to Solidity's `uint152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toUint152(uint256 value) internal pure returns (uint152) {\n if (value > type(uint152).max) {\n revert SafeCastOverflowedUintDowncast(152, value);\n }\n return uint152(value);\n }\n\n /**\n * @dev Returns the downcasted uint144 from uint256, reverting on\n * overflow (when the input is greater than largest uint144).\n *\n * Counterpart to Solidity's `uint144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toUint144(uint256 value) internal pure returns (uint144) {\n if (value > type(uint144).max) {\n revert SafeCastOverflowedUintDowncast(144, value);\n }\n return uint144(value);\n }\n\n /**\n * @dev Returns the downcasted uint136 from uint256, reverting on\n * overflow (when the input is greater than largest uint136).\n *\n * Counterpart to Solidity's `uint136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toUint136(uint256 value) internal pure returns (uint136) {\n if (value > type(uint136).max) {\n revert SafeCastOverflowedUintDowncast(136, value);\n }\n return uint136(value);\n }\n\n /**\n * @dev Returns the downcasted uint128 from uint256, reverting on\n * overflow (when the input is greater than largest uint128).\n *\n * Counterpart to Solidity's `uint128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toUint128(uint256 value) internal pure returns (uint128) {\n if (value > type(uint128).max) {\n revert SafeCastOverflowedUintDowncast(128, value);\n }\n return uint128(value);\n }\n\n /**\n * @dev Returns the downcasted uint120 from uint256, reverting on\n * overflow (when the input is greater than largest uint120).\n *\n * Counterpart to Solidity's `uint120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toUint120(uint256 value) internal pure returns (uint120) {\n if (value > type(uint120).max) {\n revert SafeCastOverflowedUintDowncast(120, value);\n }\n return uint120(value);\n }\n\n /**\n * @dev Returns the downcasted uint112 from uint256, reverting on\n * overflow (when the input is greater than largest uint112).\n *\n * Counterpart to Solidity's `uint112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toUint112(uint256 value) internal pure returns (uint112) {\n if (value > type(uint112).max) {\n revert SafeCastOverflowedUintDowncast(112, value);\n }\n return uint112(value);\n }\n\n /**\n * @dev Returns the downcasted uint104 from uint256, reverting on\n * overflow (when the input is greater than largest uint104).\n *\n * Counterpart to Solidity's `uint104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toUint104(uint256 value) internal pure returns (uint104) {\n if (value > type(uint104).max) {\n revert SafeCastOverflowedUintDowncast(104, value);\n }\n return uint104(value);\n }\n\n /**\n * @dev Returns the downcasted uint96 from uint256, reverting on\n * overflow (when the input is greater than largest uint96).\n *\n * Counterpart to Solidity's `uint96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toUint96(uint256 value) internal pure returns (uint96) {\n if (value > type(uint96).max) {\n revert SafeCastOverflowedUintDowncast(96, value);\n }\n return uint96(value);\n }\n\n /**\n * @dev Returns the downcasted uint88 from uint256, reverting on\n * overflow (when the input is greater than largest uint88).\n *\n * Counterpart to Solidity's `uint88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toUint88(uint256 value) internal pure returns (uint88) {\n if (value > type(uint88).max) {\n revert SafeCastOverflowedUintDowncast(88, value);\n }\n return uint88(value);\n }\n\n /**\n * @dev Returns the downcasted uint80 from uint256, reverting on\n * overflow (when the input is greater than largest uint80).\n *\n * Counterpart to Solidity's `uint80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toUint80(uint256 value) internal pure returns (uint80) {\n if (value > type(uint80).max) {\n revert SafeCastOverflowedUintDowncast(80, value);\n }\n return uint80(value);\n }\n\n /**\n * @dev Returns the downcasted uint72 from uint256, reverting on\n * overflow (when the input is greater than largest uint72).\n *\n * Counterpart to Solidity's `uint72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toUint72(uint256 value) internal pure returns (uint72) {\n if (value > type(uint72).max) {\n revert SafeCastOverflowedUintDowncast(72, value);\n }\n return uint72(value);\n }\n\n /**\n * @dev Returns the downcasted uint64 from uint256, reverting on\n * overflow (when the input is greater than largest uint64).\n *\n * Counterpart to Solidity's `uint64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toUint64(uint256 value) internal pure returns (uint64) {\n if (value > type(uint64).max) {\n revert SafeCastOverflowedUintDowncast(64, value);\n }\n return uint64(value);\n }\n\n /**\n * @dev Returns the downcasted uint56 from uint256, reverting on\n * overflow (when the input is greater than largest uint56).\n *\n * Counterpart to Solidity's `uint56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toUint56(uint256 value) internal pure returns (uint56) {\n if (value > type(uint56).max) {\n revert SafeCastOverflowedUintDowncast(56, value);\n }\n return uint56(value);\n }\n\n /**\n * @dev Returns the downcasted uint48 from uint256, reverting on\n * overflow (when the input is greater than largest uint48).\n *\n * Counterpart to Solidity's `uint48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toUint48(uint256 value) internal pure returns (uint48) {\n if (value > type(uint48).max) {\n revert SafeCastOverflowedUintDowncast(48, value);\n }\n return uint48(value);\n }\n\n /**\n * @dev Returns the downcasted uint40 from uint256, reverting on\n * overflow (when the input is greater than largest uint40).\n *\n * Counterpart to Solidity's `uint40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toUint40(uint256 value) internal pure returns (uint40) {\n if (value > type(uint40).max) {\n revert SafeCastOverflowedUintDowncast(40, value);\n }\n return uint40(value);\n }\n\n /**\n * @dev Returns the downcasted uint32 from uint256, reverting on\n * overflow (when the input is greater than largest uint32).\n *\n * Counterpart to Solidity's `uint32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toUint32(uint256 value) internal pure returns (uint32) {\n if (value > type(uint32).max) {\n revert SafeCastOverflowedUintDowncast(32, value);\n }\n return uint32(value);\n }\n\n /**\n * @dev Returns the downcasted uint24 from uint256, reverting on\n * overflow (when the input is greater than largest uint24).\n *\n * Counterpart to Solidity's `uint24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toUint24(uint256 value) internal pure returns (uint24) {\n if (value > type(uint24).max) {\n revert SafeCastOverflowedUintDowncast(24, value);\n }\n return uint24(value);\n }\n\n /**\n * @dev Returns the downcasted uint16 from uint256, reverting on\n * overflow (when the input is greater than largest uint16).\n *\n * Counterpart to Solidity's `uint16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toUint16(uint256 value) internal pure returns (uint16) {\n if (value > type(uint16).max) {\n revert SafeCastOverflowedUintDowncast(16, value);\n }\n return uint16(value);\n }\n\n /**\n * @dev Returns the downcasted uint8 from uint256, reverting on\n * overflow (when the input is greater than largest uint8).\n *\n * Counterpart to Solidity's `uint8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toUint8(uint256 value) internal pure returns (uint8) {\n if (value > type(uint8).max) {\n revert SafeCastOverflowedUintDowncast(8, value);\n }\n return uint8(value);\n }\n\n /**\n * @dev Converts a signed int256 into an unsigned uint256.\n *\n * Requirements:\n *\n * - input must be greater than or equal to 0.\n */\n function toUint256(int256 value) internal pure returns (uint256) {\n if (value < 0) {\n revert SafeCastOverflowedIntToUint(value);\n }\n return uint256(value);\n }\n\n /**\n * @dev Returns the downcasted int248 from int256, reverting on\n * overflow (when the input is less than smallest int248 or\n * greater than largest int248).\n *\n * Counterpart to Solidity's `int248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toInt248(int256 value) internal pure returns (int248 downcasted) {\n downcasted = int248(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(248, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int240 from int256, reverting on\n * overflow (when the input is less than smallest int240 or\n * greater than largest int240).\n *\n * Counterpart to Solidity's `int240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toInt240(int256 value) internal pure returns (int240 downcasted) {\n downcasted = int240(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(240, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int232 from int256, reverting on\n * overflow (when the input is less than smallest int232 or\n * greater than largest int232).\n *\n * Counterpart to Solidity's `int232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toInt232(int256 value) internal pure returns (int232 downcasted) {\n downcasted = int232(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(232, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int224 from int256, reverting on\n * overflow (when the input is less than smallest int224 or\n * greater than largest int224).\n *\n * Counterpart to Solidity's `int224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toInt224(int256 value) internal pure returns (int224 downcasted) {\n downcasted = int224(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(224, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int216 from int256, reverting on\n * overflow (when the input is less than smallest int216 or\n * greater than largest int216).\n *\n * Counterpart to Solidity's `int216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toInt216(int256 value) internal pure returns (int216 downcasted) {\n downcasted = int216(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(216, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int208 from int256, reverting on\n * overflow (when the input is less than smallest int208 or\n * greater than largest int208).\n *\n * Counterpart to Solidity's `int208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toInt208(int256 value) internal pure returns (int208 downcasted) {\n downcasted = int208(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(208, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int200 from int256, reverting on\n * overflow (when the input is less than smallest int200 or\n * greater than largest int200).\n *\n * Counterpart to Solidity's `int200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toInt200(int256 value) internal pure returns (int200 downcasted) {\n downcasted = int200(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(200, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int192 from int256, reverting on\n * overflow (when the input is less than smallest int192 or\n * greater than largest int192).\n *\n * Counterpart to Solidity's `int192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toInt192(int256 value) internal pure returns (int192 downcasted) {\n downcasted = int192(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(192, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int184 from int256, reverting on\n * overflow (when the input is less than smallest int184 or\n * greater than largest int184).\n *\n * Counterpart to Solidity's `int184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toInt184(int256 value) internal pure returns (int184 downcasted) {\n downcasted = int184(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(184, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int176 from int256, reverting on\n * overflow (when the input is less than smallest int176 or\n * greater than largest int176).\n *\n * Counterpart to Solidity's `int176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toInt176(int256 value) internal pure returns (int176 downcasted) {\n downcasted = int176(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(176, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int168 from int256, reverting on\n * overflow (when the input is less than smallest int168 or\n * greater than largest int168).\n *\n * Counterpart to Solidity's `int168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toInt168(int256 value) internal pure returns (int168 downcasted) {\n downcasted = int168(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(168, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int160 from int256, reverting on\n * overflow (when the input is less than smallest int160 or\n * greater than largest int160).\n *\n * Counterpart to Solidity's `int160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toInt160(int256 value) internal pure returns (int160 downcasted) {\n downcasted = int160(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(160, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int152 from int256, reverting on\n * overflow (when the input is less than smallest int152 or\n * greater than largest int152).\n *\n * Counterpart to Solidity's `int152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toInt152(int256 value) internal pure returns (int152 downcasted) {\n downcasted = int152(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(152, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int144 from int256, reverting on\n * overflow (when the input is less than smallest int144 or\n * greater than largest int144).\n *\n * Counterpart to Solidity's `int144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toInt144(int256 value) internal pure returns (int144 downcasted) {\n downcasted = int144(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(144, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int136 from int256, reverting on\n * overflow (when the input is less than smallest int136 or\n * greater than largest int136).\n *\n * Counterpart to Solidity's `int136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toInt136(int256 value) internal pure returns (int136 downcasted) {\n downcasted = int136(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(136, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int128 from int256, reverting on\n * overflow (when the input is less than smallest int128 or\n * greater than largest int128).\n *\n * Counterpart to Solidity's `int128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toInt128(int256 value) internal pure returns (int128 downcasted) {\n downcasted = int128(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(128, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int120 from int256, reverting on\n * overflow (when the input is less than smallest int120 or\n * greater than largest int120).\n *\n * Counterpart to Solidity's `int120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toInt120(int256 value) internal pure returns (int120 downcasted) {\n downcasted = int120(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(120, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int112 from int256, reverting on\n * overflow (when the input is less than smallest int112 or\n * greater than largest int112).\n *\n * Counterpart to Solidity's `int112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toInt112(int256 value) internal pure returns (int112 downcasted) {\n downcasted = int112(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(112, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int104 from int256, reverting on\n * overflow (when the input is less than smallest int104 or\n * greater than largest int104).\n *\n * Counterpart to Solidity's `int104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toInt104(int256 value) internal pure returns (int104 downcasted) {\n downcasted = int104(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(104, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int96 from int256, reverting on\n * overflow (when the input is less than smallest int96 or\n * greater than largest int96).\n *\n * Counterpart to Solidity's `int96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toInt96(int256 value) internal pure returns (int96 downcasted) {\n downcasted = int96(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(96, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int88 from int256, reverting on\n * overflow (when the input is less than smallest int88 or\n * greater than largest int88).\n *\n * Counterpart to Solidity's `int88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toInt88(int256 value) internal pure returns (int88 downcasted) {\n downcasted = int88(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(88, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int80 from int256, reverting on\n * overflow (when the input is less than smallest int80 or\n * greater than largest int80).\n *\n * Counterpart to Solidity's `int80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toInt80(int256 value) internal pure returns (int80 downcasted) {\n downcasted = int80(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(80, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int72 from int256, reverting on\n * overflow (when the input is less than smallest int72 or\n * greater than largest int72).\n *\n * Counterpart to Solidity's `int72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toInt72(int256 value) internal pure returns (int72 downcasted) {\n downcasted = int72(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(72, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int64 from int256, reverting on\n * overflow (when the input is less than smallest int64 or\n * greater than largest int64).\n *\n * Counterpart to Solidity's `int64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toInt64(int256 value) internal pure returns (int64 downcasted) {\n downcasted = int64(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(64, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int56 from int256, reverting on\n * overflow (when the input is less than smallest int56 or\n * greater than largest int56).\n *\n * Counterpart to Solidity's `int56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toInt56(int256 value) internal pure returns (int56 downcasted) {\n downcasted = int56(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(56, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int48 from int256, reverting on\n * overflow (when the input is less than smallest int48 or\n * greater than largest int48).\n *\n * Counterpart to Solidity's `int48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toInt48(int256 value) internal pure returns (int48 downcasted) {\n downcasted = int48(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(48, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int40 from int256, reverting on\n * overflow (when the input is less than smallest int40 or\n * greater than largest int40).\n *\n * Counterpart to Solidity's `int40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toInt40(int256 value) internal pure returns (int40 downcasted) {\n downcasted = int40(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(40, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int32 from int256, reverting on\n * overflow (when the input is less than smallest int32 or\n * greater than largest int32).\n *\n * Counterpart to Solidity's `int32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toInt32(int256 value) internal pure returns (int32 downcasted) {\n downcasted = int32(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(32, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int24 from int256, reverting on\n * overflow (when the input is less than smallest int24 or\n * greater than largest int24).\n *\n * Counterpart to Solidity's `int24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toInt24(int256 value) internal pure returns (int24 downcasted) {\n downcasted = int24(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(24, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int16 from int256, reverting on\n * overflow (when the input is less than smallest int16 or\n * greater than largest int16).\n *\n * Counterpart to Solidity's `int16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toInt16(int256 value) internal pure returns (int16 downcasted) {\n downcasted = int16(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(16, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int8 from int256, reverting on\n * overflow (when the input is less than smallest int8 or\n * greater than largest int8).\n *\n * Counterpart to Solidity's `int8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toInt8(int256 value) internal pure returns (int8 downcasted) {\n downcasted = int8(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(8, value);\n }\n }\n\n /**\n * @dev Converts an unsigned uint256 into a signed int256.\n *\n * Requirements:\n *\n * - input must be less than or equal to maxInt256.\n */\n function toInt256(uint256 value) internal pure returns (int256) {\n // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\n if (value > uint256(type(int256).max)) {\n revert SafeCastOverflowedUintToInt(value);\n }\n return int256(value);\n }\n\n /**\n * @dev Cast a boolean (false or true) to a uint256 (0 or 1) with no jump.\n */\n function toUint(bool b) internal pure returns (uint256 u) {\n assembly (\"memory-safe\") {\n u := iszero(iszero(b))\n }\n }\n}\n"},"@openzeppelin/contracts/utils/Panic.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Panic.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Helper library for emitting standardized panic codes.\n *\n * ```solidity\n * contract Example {\n * using Panic for uint256;\n *\n * // Use any of the declared internal constants\n * function foo() { Panic.GENERIC.panic(); }\n *\n * // Alternatively\n * function foo() { Panic.panic(Panic.GENERIC); }\n * }\n * ```\n *\n * Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].\n *\n * _Available since v5.1._\n */\n// slither-disable-next-line unused-state\nlibrary Panic {\n /// @dev generic / unspecified error\n uint256 internal constant GENERIC = 0x00;\n /// @dev used by the assert() builtin\n uint256 internal constant ASSERT = 0x01;\n /// @dev arithmetic underflow or overflow\n uint256 internal constant UNDER_OVERFLOW = 0x11;\n /// @dev division or modulo by zero\n uint256 internal constant DIVISION_BY_ZERO = 0x12;\n /// @dev enum conversion error\n uint256 internal constant ENUM_CONVERSION_ERROR = 0x21;\n /// @dev invalid encoding in storage\n uint256 internal constant STORAGE_ENCODING_ERROR = 0x22;\n /// @dev empty array pop\n uint256 internal constant EMPTY_ARRAY_POP = 0x31;\n /// @dev array out of bounds access\n uint256 internal constant ARRAY_OUT_OF_BOUNDS = 0x32;\n /// @dev resource error (too large allocation or too large array)\n uint256 internal constant RESOURCE_ERROR = 0x41;\n /// @dev calling invalid internal function\n uint256 internal constant INVALID_INTERNAL_FUNCTION = 0x51;\n\n /// @dev Reverts with a panic code. Recommended to use with\n /// the internal constants with predefined codes.\n function panic(uint256 code) internal pure {\n assembly (\"memory-safe\") {\n mstore(0x00, 0x4e487b71)\n mstore(0x20, code)\n revert(0x1c, 0x24)\n }\n }\n}\n"},"@openzeppelin/contracts/utils/SlotDerivation.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (utils/SlotDerivation.sol)\n// This file was procedurally generated from scripts/generate/templates/SlotDerivation.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for computing storage (and transient storage) locations from namespaces and deriving slots\n * corresponding to standard patterns. The derivation method for array and mapping matches the storage layout used by\n * the solidity language / compiler.\n *\n * See https://docs.soliditylang.org/en/v0.8.20/internals/layout_in_storage.html#mappings-and-dynamic-arrays[Solidity docs for mappings and dynamic arrays.].\n *\n * Example usage:\n * ```solidity\n * contract Example {\n * // Add the library methods\n * using StorageSlot for bytes32;\n * using SlotDerivation for bytes32;\n *\n * // Declare a namespace\n * string private constant _NAMESPACE = \"\"; // eg. OpenZeppelin.Slot\n *\n * function setValueInNamespace(uint256 key, address newValue) internal {\n * _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value = newValue;\n * }\n *\n * function getValueInNamespace(uint256 key) internal view returns (address) {\n * return _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value;\n * }\n * }\n * ```\n *\n * TIP: Consider using this library along with {StorageSlot}.\n *\n * NOTE: This library provides a way to manipulate storage locations in a non-standard way. Tooling for checking\n * upgrade safety will ignore the slots accessed through this library.\n *\n * _Available since v5.1._\n */\nlibrary SlotDerivation {\n /**\n * @dev Derive an ERC-7201 slot from a string (namespace).\n */\n function erc7201Slot(string memory namespace) internal pure returns (bytes32 slot) {\n assembly (\"memory-safe\") {\n mstore(0x00, sub(keccak256(add(namespace, 0x20), mload(namespace)), 1))\n slot := and(keccak256(0x00, 0x20), not(0xff))\n }\n }\n\n /**\n * @dev Add an offset to a slot to get the n-th element of a structure or an array.\n */\n function offset(bytes32 slot, uint256 pos) internal pure returns (bytes32 result) {\n unchecked {\n return bytes32(uint256(slot) + pos);\n }\n }\n\n /**\n * @dev Derive the location of the first element in an array from the slot where the length is stored.\n */\n function deriveArray(bytes32 slot) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n mstore(0x00, slot)\n result := keccak256(0x00, 0x20)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, address key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n mstore(0x00, and(key, shr(96, not(0))))\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, bool key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n mstore(0x00, iszero(iszero(key)))\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, bytes32 key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n mstore(0x00, key)\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, uint256 key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n mstore(0x00, key)\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, int256 key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n mstore(0x00, key)\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, string memory key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n let length := mload(key)\n let begin := add(key, 0x20)\n let end := add(begin, length)\n let cache := mload(end)\n mstore(end, slot)\n result := keccak256(begin, add(length, 0x20))\n mstore(end, cache)\n }\n }\n\n /**\n * @dev Derive the location of a mapping element from the key.\n */\n function deriveMapping(bytes32 slot, bytes memory key) internal pure returns (bytes32 result) {\n assembly (\"memory-safe\") {\n let length := mload(key)\n let begin := add(key, 0x20)\n let end := add(begin, length)\n let cache := mload(end)\n mstore(end, slot)\n result := keccak256(begin, add(length, 0x20))\n mstore(end, cache)\n }\n }\n}\n"},"@openzeppelin/contracts/utils/StorageSlot.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/StorageSlot.sol)\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC-1967 implementation slot:\n * ```solidity\n * contract ERC1967 {\n * // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(newImplementation.code.length > 0);\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * TIP: Consider using this library along with {SlotDerivation}.\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n struct Int256Slot {\n int256 value;\n }\n\n struct StringSlot {\n string value;\n }\n\n struct BytesSlot {\n bytes value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `Int256Slot` with member `value` located at `slot`.\n */\n function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `StringSlot` with member `value` located at `slot`.\n */\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\n */\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := store.slot\n }\n }\n\n /**\n * @dev Returns a `BytesSlot` with member `value` located at `slot`.\n */\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\n */\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := store.slot\n }\n }\n}\n"},"@openzeppelin/contracts/utils/structs/EnumerableSet.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/structs/EnumerableSet.sol)\n// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.\n\npragma solidity ^0.8.20;\n\nimport {Arrays} from \"../Arrays.sol\";\nimport {Math} from \"../math/Math.sol\";\n\n/**\n * @dev Library for managing\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n * types.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n * - Set can be cleared (all elements removed) in O(n).\n *\n * ```solidity\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n *\n * The following types are supported:\n *\n * - `bytes32` (`Bytes32Set`) since v3.3.0\n * - `address` (`AddressSet`) since v3.3.0\n * - `uint256` (`UintSet`) since v3.3.0\n * - `string` (`StringSet`) since v5.4.0\n * - `bytes` (`BytesSet`) since v5.4.0\n *\n * [WARNING]\n * ====\n * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure\n * unusable.\n * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.\n *\n * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an\n * array of EnumerableSet.\n * ====\n */\nlibrary EnumerableSet {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Set type with\n // bytes32 values.\n // The Set implementation uses private functions, and user-facing\n // implementations (such as AddressSet) are just wrappers around the\n // underlying Set.\n // This means that we can only create new EnumerableSets for types that fit\n // in bytes32.\n\n struct Set {\n // Storage of set values\n bytes32[] _values;\n // Position is the index of the value in the `values` array plus 1.\n // Position 0 is used to mean a value is not in the set.\n mapping(bytes32 value => uint256) _positions;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function _add(Set storage set, bytes32 value) private returns (bool) {\n if (!_contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._positions[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function _remove(Set storage set, bytes32 value) private returns (bool) {\n // We cache the value's position to prevent multiple reads from the same storage slot\n uint256 position = set._positions[value];\n\n if (position != 0) {\n // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 valueIndex = position - 1;\n uint256 lastIndex = set._values.length - 1;\n\n if (valueIndex != lastIndex) {\n bytes32 lastValue = set._values[lastIndex];\n\n // Move the lastValue to the index where the value to delete is\n set._values[valueIndex] = lastValue;\n // Update the tracked position of the lastValue (that was just moved)\n set._positions[lastValue] = position;\n }\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the tracked position for the deleted slot\n delete set._positions[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes all the values from a set. O(n).\n *\n * WARNING: This function has an unbounded cost that scales with set size. Developers should keep in mind that\n * using it may render the function uncallable if the set grows to the point where clearing it consumes too much\n * gas to fit in a block.\n */\n function _clear(Set storage set) private {\n uint256 len = _length(set);\n for (uint256 i = 0; i < len; ++i) {\n delete set._positions[set._values[i]];\n }\n Arrays.unsafeSetLength(set._values, 0);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\n return set._positions[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function _length(Set storage set) private view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\n return set._values[index];\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function _values(Set storage set) private view returns (bytes32[] memory) {\n return set._values;\n }\n\n /**\n * @dev Return a slice of the set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function _values(Set storage set, uint256 start, uint256 end) private view returns (bytes32[] memory) {\n unchecked {\n end = Math.min(end, _length(set));\n start = Math.min(start, end);\n\n uint256 len = end - start;\n bytes32[] memory result = new bytes32[](len);\n for (uint256 i = 0; i < len; ++i) {\n result[i] = Arrays.unsafeAccess(set._values, start + i).value;\n }\n return result;\n }\n }\n\n // Bytes32Set\n\n struct Bytes32Set {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _add(set._inner, value);\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _remove(set._inner, value);\n }\n\n /**\n * @dev Removes all the values from a set. O(n).\n *\n * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n * function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.\n */\n function clear(Bytes32Set storage set) internal {\n _clear(set._inner);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\n return _contains(set._inner, value);\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(Bytes32Set storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\n return _at(set._inner, index);\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\n bytes32[] memory store = _values(set._inner);\n bytes32[] memory result;\n\n assembly (\"memory-safe\") {\n result := store\n }\n\n return result;\n }\n\n /**\n * @dev Return a slice of the set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(Bytes32Set storage set, uint256 start, uint256 end) internal view returns (bytes32[] memory) {\n bytes32[] memory store = _values(set._inner, start, end);\n bytes32[] memory result;\n\n assembly (\"memory-safe\") {\n result := store\n }\n\n return result;\n }\n\n // AddressSet\n\n struct AddressSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n return _add(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n return _remove(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes all the values from a set. O(n).\n *\n * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n * function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.\n */\n function clear(AddressSet storage set) internal {\n _clear(set._inner);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return _contains(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(AddressSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n return address(uint160(uint256(_at(set._inner, index))));\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(AddressSet storage set) internal view returns (address[] memory) {\n bytes32[] memory store = _values(set._inner);\n address[] memory result;\n\n assembly (\"memory-safe\") {\n result := store\n }\n\n return result;\n }\n\n /**\n * @dev Return a slice of the set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(AddressSet storage set, uint256 start, uint256 end) internal view returns (address[] memory) {\n bytes32[] memory store = _values(set._inner, start, end);\n address[] memory result;\n\n assembly (\"memory-safe\") {\n result := store\n }\n\n return result;\n }\n\n // UintSet\n\n struct UintSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(UintSet storage set, uint256 value) internal returns (bool) {\n return _add(set._inner, bytes32(value));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\n return _remove(set._inner, bytes32(value));\n }\n\n /**\n * @dev Removes all the values from a set. O(n).\n *\n * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n * function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.\n */\n function clear(UintSet storage set) internal {\n _clear(set._inner);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\n return _contains(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(UintSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\n return uint256(_at(set._inner, index));\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(UintSet storage set) internal view returns (uint256[] memory) {\n bytes32[] memory store = _values(set._inner);\n uint256[] memory result;\n\n assembly (\"memory-safe\") {\n result := store\n }\n\n return result;\n }\n\n /**\n * @dev Return a slice of the set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(UintSet storage set, uint256 start, uint256 end) internal view returns (uint256[] memory) {\n bytes32[] memory store = _values(set._inner, start, end);\n uint256[] memory result;\n\n assembly (\"memory-safe\") {\n result := store\n }\n\n return result;\n }\n\n struct StringSet {\n // Storage of set values\n string[] _values;\n // Position is the index of the value in the `values` array plus 1.\n // Position 0 is used to mean a value is not in the set.\n mapping(string value => uint256) _positions;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(StringSet storage set, string memory value) internal returns (bool) {\n if (!contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._positions[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(StringSet storage set, string memory value) internal returns (bool) {\n // We cache the value's position to prevent multiple reads from the same storage slot\n uint256 position = set._positions[value];\n\n if (position != 0) {\n // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 valueIndex = position - 1;\n uint256 lastIndex = set._values.length - 1;\n\n if (valueIndex != lastIndex) {\n string memory lastValue = set._values[lastIndex];\n\n // Move the lastValue to the index where the value to delete is\n set._values[valueIndex] = lastValue;\n // Update the tracked position of the lastValue (that was just moved)\n set._positions[lastValue] = position;\n }\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the tracked position for the deleted slot\n delete set._positions[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes all the values from a set. O(n).\n *\n * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n * function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.\n */\n function clear(StringSet storage set) internal {\n uint256 len = length(set);\n for (uint256 i = 0; i < len; ++i) {\n delete set._positions[set._values[i]];\n }\n Arrays.unsafeSetLength(set._values, 0);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(StringSet storage set, string memory value) internal view returns (bool) {\n return set._positions[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function length(StringSet storage set) internal view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(StringSet storage set, uint256 index) internal view returns (string memory) {\n return set._values[index];\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(StringSet storage set) internal view returns (string[] memory) {\n return set._values;\n }\n\n /**\n * @dev Return a slice of the set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(StringSet storage set, uint256 start, uint256 end) internal view returns (string[] memory) {\n unchecked {\n end = Math.min(end, length(set));\n start = Math.min(start, end);\n\n uint256 len = end - start;\n string[] memory result = new string[](len);\n for (uint256 i = 0; i < len; ++i) {\n result[i] = Arrays.unsafeAccess(set._values, start + i).value;\n }\n return result;\n }\n }\n\n struct BytesSet {\n // Storage of set values\n bytes[] _values;\n // Position is the index of the value in the `values` array plus 1.\n // Position 0 is used to mean a value is not in the set.\n mapping(bytes value => uint256) _positions;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(BytesSet storage set, bytes memory value) internal returns (bool) {\n if (!contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._positions[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(BytesSet storage set, bytes memory value) internal returns (bool) {\n // We cache the value's position to prevent multiple reads from the same storage slot\n uint256 position = set._positions[value];\n\n if (position != 0) {\n // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 valueIndex = position - 1;\n uint256 lastIndex = set._values.length - 1;\n\n if (valueIndex != lastIndex) {\n bytes memory lastValue = set._values[lastIndex];\n\n // Move the lastValue to the index where the value to delete is\n set._values[valueIndex] = lastValue;\n // Update the tracked position of the lastValue (that was just moved)\n set._positions[lastValue] = position;\n }\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the tracked position for the deleted slot\n delete set._positions[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes all the values from a set. O(n).\n *\n * WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n * function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block.\n */\n function clear(BytesSet storage set) internal {\n uint256 len = length(set);\n for (uint256 i = 0; i < len; ++i) {\n delete set._positions[set._values[i]];\n }\n Arrays.unsafeSetLength(set._values, 0);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(BytesSet storage set, bytes memory value) internal view returns (bool) {\n return set._positions[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function length(BytesSet storage set) internal view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(BytesSet storage set, uint256 index) internal view returns (bytes memory) {\n return set._values[index];\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(BytesSet storage set) internal view returns (bytes[] memory) {\n return set._values;\n }\n\n /**\n * @dev Return a slice of the set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(BytesSet storage set, uint256 start, uint256 end) internal view returns (bytes[] memory) {\n unchecked {\n end = Math.min(end, length(set));\n start = Math.min(start, end);\n\n uint256 len = end - start;\n bytes[] memory result = new bytes[](len);\n for (uint256 i = 0; i < len; ++i) {\n result[i] = Arrays.unsafeAccess(set._values, start + i).value;\n }\n return result;\n }\n }\n}\n"},"contracts/BalancerContractRegistry.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport {\n IBalancerContractRegistry,\n ContractType\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\n\n/**\n * @notice On-chain registry of standard Balancer contracts.\n * @dev Maintain a registry of official Balancer Factories, Routers, Hooks, and valid ERC4626 tokens, for two main\n * purposes. The first is to support the many instances where we need to know that a contract is \"trusted\" (i.e.,\n * is safe and behaves in the required manner). For instance, some hooks depend critically on the identity of the\n * msg.sender, which must be passed down through the Router. Since Routers are permissionless, a malicious one could\n * spoof the sender and \"fool\" the hook. The hook must therefore \"trust\" the Router.\n *\n * It is also important for the front-end to know when a particular wrapped token should be used with buffers. Not all\n * \"ERC4626\" wrapped tokens are fully conforming, and buffer operations with non-conforming tokens may fail in various\n * unexpected ways. It is not enough to simply check whether a buffer exists (e.g., by calling `getBufferAsset`),\n * since best practice is for the pool creator to initialize buffers for all such tokens regardless. They are\n * permissionless, and could otherwise be initialized by anyone in unexpected ways. This registry could be used to\n * keep track of \"known good\" buffers, such that `isActiveBalancerContract(ContractType.ERC4626,
)` returns\n * true for fully-compliant tokens with properly initialized buffers.\n *\n * Current solutions involve passing in the address of the trusted Router on deployment: but what if it needs to\n * support multiple Routers? Or if the Router is deprecated and replaced? Instead, we can pass the registry address,\n * and query this contract to determine whether the Router is a \"trusted\" one.\n *\n * The second use case is for off-chain queries, or other protocols that need to easily determine, say, the \"latest\"\n * Weighted Pool Factory. This contract provides `isActiveBalancerContract(type, address)` for the first case, and\n * `getBalancerContract(type, name)` for the second. It is also possible to query all known information about an\n * address, using `getBalancerContractInfo(address)`, which returns a struct with the detailed state.\n *\n * Note that the `SingletonAuthentication` base contract provides `getVault`, so it is also possible to ask this\n * contract for the Vault address, so it doesn't need to be a type.\n */\ncontract BalancerContractRegistry is IBalancerContractRegistry, SingletonAuthentication {\n // ContractId is the hash of contract name. Names must be unique (cannot have the same name with different types).\n mapping(bytes32 contractId => address addr) private _contractRegistry;\n\n // Given an address, store the contract state (i.e., type, and active or deprecated).\n //\n // Conceptually, we maintain a => => registry of contracts.\n // The only thing that can change is the `isActive` flag, when a contract is deprecated. If a contract is\n // registered in error (e.g., wrong type or address), the remedy is to deregister (delete) it, and then register\n // the correct one.\n //\n // We also maintain a registry of aliases: => , where the target address\n // must be in the main registry, and the alias cannot match a unique registered contract name. Aliases can be\n // overwritten (e.g., when the `WeightedPool` alias migrates from v2 to v3). See `_contractAliases` below.\n mapping(address addr => ContractInfo info) private _contractInfo;\n\n // ContractAliasId is the hash of the alias (e.g., \"WeightedPool\").\n // This is separate from the main contract registry to enforce different rules (e.g., prevent corrupting the\n // contract state by overwriting a registry entry with an \"alias\" that matches a different contract).\n mapping(bytes32 contractAliasId => address addr) private _contractAliases;\n\n /**\n * @notice A `_contractRegistry` entry has no corresponding `_contractInfo`.\n * @dev This should never happen.\n * @param contractName The name of the contract that has a registry entry but no contract info\n * @param contractAddress The address of the contract with missing state\n */\n error InconsistentState(string contractName, address contractAddress);\n\n constructor(IVault vault) SingletonAuthentication(vault) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /*\n * Example usage:\n *\n * // Register both the named version and the \"latest\" Weighted Pool Factory.\n * registerBalancerContract(\n * ContractType.POOL_FACTORY, '20241205-v3-weighted-pool', 0x201efd508c8DfE9DE1a13c2452863A78CB2a86Cc\n * );\n * addOrUpdateBalancerContractAlias('WeightedPool', 0x201efd508c8DfE9DE1a13c2452863A78CB2a86Cc);\n *\n * // Register the Routers (two of them anyway).\n * registerBalancerContract(ContractType.ROUTER, '20241205-v3-router', 0x5C6fb490BDFD3246EB0bB062c168DeCAF4bD9FDd);\n * registerBalancerContract(\n * ContractType.ROUTER, '20241205-v3-batch-router', 0x136f1EFcC3f8f88516B9E94110D56FDBfB1778d1\n * );\n *\n * // Now, hooks that require trusted routers can be deployed with the registry address, and query the router to\n * // see whether it's \"trusted\" (i.e., registered by governance):\n *\n * isActiveBalancerContract(ContractType.ROUTER, 0x5C6fb490BDFD3246EB0bB062c168DeCAF4bD9FDd) would return true.\n *\n * Off-chain processes that wanted to know the current address of the Weighted Pool Factory could query by either\n * name:\n *\n * (address, active) = getBalancerContract(ContractType.POOL_FACTORY, '20241205-v3-weighted-pool');\n * (address, active) = getBalancerContract(ContractType.POOL_FACTORY, 'WeightedPool');\n *\n * These would return the same result.\n *\n * If we replaced `20241205-v3-weighted-pool` with `20250107-v3-weighted-pool-v2`, governance would call:\n *\n * deprecateBalancerContract(0x201efd508c8DfE9DE1a13c2452863A78CB2a86Cc);\n * registerBalancerContract(\n * ContractType.POOL_FACTORY, '20250107-v3-weighted-pool-v2', 0x9FC3da866e7DF3a1c57adE1a97c9f00a70f010c8)\n * );\n * addOrUpdateBalancerContractAlias('WeightedPool', 0x9FC3da866e7DF3a1c57adE1a97c9f00a70f010c8);\n *\n * At that point,\n * getBalancerContract(ContractType.POOL_FACTORY, '20241205-v3-weighted-pool') returns active=false,\n * isActiveBalancerContract(ContractType.POOL_FACTORY, 0x201efd508c8DfE9DE1a13c2452863A78CB2a86Cc) returns false,\n * getBalancerContract(ContractType.POOL_FACTORY, 'WeightedPool') returns the v2 address (and active=true).\n */\n\n /// @inheritdoc IBalancerContractRegistry\n function registerBalancerContract(\n ContractType contractType,\n string memory contractName,\n address contractAddress\n ) external authenticate {\n // Ensure arguments are valid.\n if (contractAddress == address(0)) {\n revert ZeroContractAddress();\n }\n\n if (bytes(contractName).length == 0) {\n revert InvalidContractName();\n }\n\n // Ensure address isn't already in use.\n ContractInfo memory info = _contractInfo[contractAddress];\n if (info.isRegistered) {\n revert ContractAddressAlreadyRegistered(info.contractType, contractAddress);\n }\n\n // Ensure name isn't already in use as a registered contract name.\n bytes32 contractId = _getContractId(contractName);\n address existingRegistryAddress = _contractRegistry[contractId];\n if (existingRegistryAddress != address(0)) {\n info = _contractInfo[existingRegistryAddress];\n\n revert ContractNameAlreadyRegistered(info.contractType, contractName);\n }\n\n // Also check that it isn't an existing alias.\n address existingAliasAddress = _contractAliases[contractId];\n if (existingAliasAddress != address(0)) {\n revert ContractNameInUseAsAlias(contractName, existingAliasAddress);\n }\n\n // Store the address in the registry, under the unique name.\n _contractRegistry[contractId] = contractAddress;\n\n // Record the address as active. The `isActive` flag enables differentiating between unregistered and deprecated\n // addresses.\n _contractInfo[contractAddress] = ContractInfo({\n contractType: contractType,\n isRegistered: true,\n isActive: true\n });\n\n emit BalancerContractRegistered(contractType, contractName, contractAddress);\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function deregisterBalancerContract(string memory contractName) external authenticate {\n if (bytes(contractName).length == 0) {\n revert InvalidContractName();\n }\n\n // Ensure the name is registered\n bytes32 contractId = _getContractId(contractName);\n address contractAddress = _contractRegistry[contractId];\n\n if (contractAddress == address(0)) {\n revert ContractNameNotRegistered(contractName);\n }\n\n ContractInfo memory info = _contractInfo[contractAddress];\n // This should be impossible: the registry and info mappings must be in sync.\n if (info.isRegistered == false) {\n revert InconsistentState(contractName, contractAddress);\n }\n\n delete _contractRegistry[contractId];\n delete _contractInfo[contractAddress];\n\n emit BalancerContractDeregistered(info.contractType, contractName, contractAddress);\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function deprecateBalancerContract(address contractAddress) external authenticate {\n if (contractAddress == address(0)) {\n revert ZeroContractAddress();\n }\n\n ContractInfo memory info = _contractInfo[contractAddress];\n\n // Check that the address has been registered.\n if (info.isRegistered == false) {\n revert ContractAddressNotRegistered(contractAddress);\n }\n\n // If it was registered, check that it has not already been deprecated.\n if (info.isActive == false) {\n revert ContractAlreadyDeprecated(contractAddress);\n }\n\n // Set active to false to indicate that it's now deprecated. This is currently a one-way operation, since\n // deprecation is considered permanent. For instance, calling `disable` to deprecate a factory (preventing\n // new pool creation) is permanent.\n info.isActive = false;\n _contractInfo[contractAddress] = info;\n\n emit BalancerContractDeprecated(contractAddress);\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function addOrUpdateBalancerContractAlias(\n string memory contractAlias,\n address contractAddress\n ) external authenticate {\n // Ensure arguments are valid.\n if (bytes(contractAlias).length == 0) {\n revert InvalidContractAlias();\n }\n\n if (contractAddress == address(0)) {\n revert ZeroContractAddress();\n }\n\n // Ensure the address was already registered.\n ContractInfo memory info = _contractInfo[contractAddress];\n if (info.isRegistered == false) {\n revert ContractAddressNotRegistered(contractAddress);\n }\n\n // Ensure the proposed alias is not in use (i.e., no collision with existing registered contracts).\n // It can match an existing alias: that's the \"update\" case. For instance, if we wanted to migrate\n // the `WeightedPool` alias from v2 to v3. If the name is not already in `_contractAliases`, we are\n // adding a new alias.\n bytes32 contractId = _getContractId(contractAlias);\n address existingRegistryAddress = _contractRegistry[contractId];\n if (existingRegistryAddress != address(0)) {\n info = _contractInfo[existingRegistryAddress];\n\n revert ContractAliasInUseAsName(info.contractType, contractAlias);\n }\n\n // This will either add a new or overwrite an existing alias.\n _contractAliases[contractId] = contractAddress;\n\n emit ContractAliasUpdated(contractAlias, contractAddress);\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function isActiveBalancerContract(ContractType contractType, address contractAddress) external view returns (bool) {\n return _isActiveBalancerContract(contractType, contractAddress);\n }\n\n function _isActiveBalancerContract(\n ContractType contractType,\n address contractAddress\n ) internal view returns (bool) {\n ContractInfo memory info = _contractInfo[contractAddress];\n\n // Ensure the address was registered as the given type - and that it's still active.\n return info.isActive && info.contractType == contractType;\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function getBalancerContract(\n ContractType contractType,\n string memory contractName\n ) external view returns (address contractAddress, bool isActive) {\n bytes32 contractId = _getContractId(contractName);\n address registeredAddress = _contractRegistry[contractId];\n\n // Also check the aliases, if not found in the primary registry.\n if (registeredAddress == address(0)) {\n registeredAddress = _contractAliases[contractId];\n }\n\n ContractInfo memory info = _contractInfo[registeredAddress];\n // It is possible to register a contract and alias, then deregister the contract, leaving a \"stale\" alias\n // reference. In this case, `isRegistered` will be false. Only return the contract address if it is still\n // valid and of the correct type.\n if (info.isRegistered && info.contractType == contractType) {\n contractAddress = registeredAddress;\n isActive = info.isActive;\n }\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function getBalancerContractInfo(address contractAddress) external view returns (ContractInfo memory info) {\n return _contractInfo[contractAddress];\n }\n\n /// @inheritdoc IBalancerContractRegistry\n function isTrustedRouter(address router) external view returns (bool) {\n return _isActiveBalancerContract(ContractType.ROUTER, router);\n }\n\n function _getContractId(string memory contractName) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(contractName));\n }\n}\n"},"contracts/BalancerFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\";\nimport { IBalancerFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol\";\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport { VaultGuard } from \"@balancer-labs/v3-vault/contracts/VaultGuard.sol\";\n\nimport { FeeBurnerAuthentication } from \"./FeeBurnerAuthentication.sol\";\n\ncontract BalancerFeeBurner is IBalancerFeeBurner, ReentrancyGuardTransient, VaultGuard, FeeBurnerAuthentication {\n using SafeERC20 for IERC20;\n\n mapping(IERC20 => SwapPathStep[] steps) internal _burnSteps;\n\n constructor(\n IVault vault,\n IProtocolFeeSweeper _protocolFeeSweeper,\n address initialOwner\n ) VaultGuard(vault) FeeBurnerAuthentication(_protocolFeeSweeper, initialOwner) {\n protocolFeeSweeper = _protocolFeeSweeper;\n }\n\n /// @inheritdoc IBalancerFeeBurner\n function setBurnPath(IERC20 feeToken, SwapPathStep[] calldata steps) external onlyFeeRecipientOrOwner {\n delete _burnSteps[feeToken];\n\n for (uint256 i = 0; i < steps.length; i++) {\n _burnSteps[feeToken].push(steps[i]);\n }\n }\n\n /// @inheritdoc IBalancerFeeBurner\n function getBurnPath(IERC20 feeToken) public view returns (SwapPathStep[] memory steps) {\n steps = _burnSteps[feeToken];\n\n if (steps.length == 0) {\n revert BurnPathDoesNotExist();\n }\n }\n\n /// @inheritdoc IProtocolFeeBurner\n function burn(\n address pool,\n IERC20 feeToken,\n uint256 feeTokenAmount,\n IERC20 targetToken,\n uint256 minAmountOut,\n address recipient,\n uint256 deadline\n ) external onlyProtocolFeeSweeper {\n _vault.unlock(\n abi.encodeCall(\n BalancerFeeBurner.burnHook,\n BurnHookParams({\n pool: pool,\n sender: msg.sender,\n feeToken: feeToken,\n feeTokenAmount: feeTokenAmount,\n targetToken: targetToken,\n minAmountOut: minAmountOut,\n recipient: recipient,\n deadline: deadline\n })\n )\n );\n }\n\n function burnHook(BurnHookParams calldata params) external nonReentrant onlyVault {\n // The deadline is timestamp-based: it should not be relied upon for sub-minute accuracy.\n // solhint-disable-next-line not-rely-on-time\n if (block.timestamp > params.deadline) {\n revert SwapDeadline();\n }\n\n IERC20 feeToken = params.feeToken;\n IERC20 targetToken = params.targetToken;\n uint256 feeTokenAmount = params.feeTokenAmount;\n\n SwapPathStep[] memory steps = getBurnPath(feeToken);\n uint256 lastStepIndex = steps.length - 1;\n if (steps[lastStepIndex].tokenOut != targetToken) {\n revert TargetTokenOutMismatch();\n }\n\n // Transfer the `tokenIn` to the vault.\n feeToken.safeTransferFrom(params.sender, address(_vault), feeTokenAmount);\n _vault.settle(feeToken, feeTokenAmount);\n\n // Swap the fee token for the target token through the steps.\n IERC20 stepTokenIn = feeToken;\n uint256 stepExactAmountIn = feeTokenAmount;\n for (uint256 i = 0; i < steps.length; i++) {\n SwapPathStep memory step = steps[i];\n\n (, , uint256 amountOut) = _vault.swap(\n VaultSwapParams({\n kind: SwapKind.EXACT_IN,\n pool: step.pool,\n tokenIn: stepTokenIn,\n tokenOut: step.tokenOut,\n amountGivenRaw: stepExactAmountIn,\n limitRaw: (i == lastStepIndex) ? params.minAmountOut : 0,\n userData: bytes(\"\")\n })\n );\n\n stepTokenIn = step.tokenOut;\n stepExactAmountIn = amountOut;\n }\n\n // Last stepTokenIn is the final token out. Last stepExactAmountIn is the amount out.\n _vault.sendTo(stepTokenIn, params.recipient, stepExactAmountIn);\n\n emit ProtocolFeeBurned(params.pool, feeToken, feeTokenAmount, targetToken, stepExactAmountIn, params.recipient);\n }\n}\n"},"contracts/CallAndRevert.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport { RevertCodec } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\";\n\ncontract CallAndRevert {\n error QuoteResultSpoofed();\n\n function _callAndRevert(address target, bytes memory data) internal returns (bytes memory) {\n try CallAndRevert(address(this)).callAndRevertHook(target, data) {\n revert(\"Unexpected success\");\n } catch (bytes memory result) {\n return RevertCodec.catchEncodedResult(result);\n }\n }\n\n function callAndRevertHook(address target, bytes memory data) external {\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory result) = (target).call(data);\n if (success) {\n // This will only revert if result is empty and sender account has no code.\n Address.verifyCallResultFromTarget(msg.sender, success, result);\n // Send result in revert reason.\n revert RevertCodec.Result(result);\n } else {\n // If the call reverted with a spoofed `QuoteResult`, we catch it and bubble up a different reason.\n bytes4 errorSelector = RevertCodec.parseSelector(result);\n if (errorSelector == RevertCodec.Result.selector) {\n revert QuoteResultSpoofed();\n }\n\n // Otherwise we bubble up the original revert reason.\n RevertCodec.bubbleUpRevert(result);\n }\n }\n}\n"},"contracts/CowSwapFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC165 } from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport { IERC1271 } from \"@openzeppelin/contracts/interfaces/IERC1271.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\";\nimport { ICowSwapFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\";\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\nimport { IComposableCow } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\";\nimport {\n ICowConditionalOrderGenerator\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\";\nimport {\n ICowConditionalOrder,\n GPv2Order\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { Version } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\";\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\n\nimport { FeeBurnerAuthentication } from \"./FeeBurnerAuthentication.sol\";\n\n// solhint-disable not-rely-on-time\n\n/**\n * @title CowSwapFeeBurner\n * @notice A contract that burns protocol fees using CowSwap.\n * @dev The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function.\n * Only one order per token is allowed at a time.\n */\ncontract CowSwapFeeBurner is ICowSwapFeeBurner, FeeBurnerAuthentication, ReentrancyGuardTransient, Version {\n using SafeERC20 for IERC20;\n\n struct ShortOrder {\n IERC20 tokenOut;\n address receiver;\n uint256 minAmountOut;\n uint32 deadline;\n }\n\n bytes4 internal constant _SIGNATURE_VERIFIER_MUXER_INTERFACE = 0x62af8dc2;\n bytes32 internal immutable _sellKind = keccak256(\"sell\");\n bytes32 internal immutable _tokenBalance = keccak256(\"erc20\");\n\n IComposableCow public immutable composableCow;\n address public immutable vaultRelayer;\n bytes32 public immutable appData;\n\n // Orders are identified by the tokenIn (often called the tokenIn).\n mapping(IERC20 token => ShortOrder order) internal _orders;\n\n constructor(\n IProtocolFeeSweeper _protocolFeeSweeper,\n IComposableCow _composableCow,\n address _cowVaultRelayer,\n bytes32 _appData,\n address _initialOwner,\n string memory _version\n ) Version(_version) FeeBurnerAuthentication(_protocolFeeSweeper, _initialOwner) {\n composableCow = _composableCow;\n vaultRelayer = _cowVaultRelayer;\n appData = _appData;\n }\n\n /***************************************************************************\n ICowSwapFeeBurner\n ***************************************************************************/\n\n /// @inheritdoc ICowSwapFeeBurner\n function getOrder(IERC20 tokenIn) external view returns (GPv2Order memory) {\n return _getOrder(tokenIn);\n }\n\n /// @inheritdoc ICowSwapFeeBurner\n function getOrderStatus(IERC20 tokenIn) external view returns (OrderStatus status) {\n (status, ) = _getOrderStatusAndBalance(tokenIn);\n }\n\n /// @inheritdoc ICowSwapFeeBurner\n function retryOrder(IERC20 tokenIn, uint256 minAmountOut, uint256 deadline) external onlyFeeRecipientOrOwner {\n (OrderStatus status, uint256 amount) = _getOrderStatusAndBalance(tokenIn);\n\n if (status != OrderStatus.Failed) {\n revert OrderHasUnexpectedStatus(status);\n }\n\n _checkMinAmountOut(minAmountOut);\n _checkDeadline(deadline);\n\n _orders[tokenIn].minAmountOut = minAmountOut;\n _orders[tokenIn].deadline = uint32(deadline);\n\n // Refresh approval with current balance just in case.\n if (tokenIn.allowance(address(this), vaultRelayer) < amount) {\n tokenIn.forceApprove(vaultRelayer, amount);\n }\n\n _createCowOrder(tokenIn);\n\n emit OrderRetried(tokenIn, amount, minAmountOut, deadline);\n }\n\n /// @inheritdoc ICowSwapFeeBurner\n function cancelOrder(IERC20 tokenIn, address receiver) external onlyFeeRecipientOrOwner {\n (OrderStatus status, uint256 amount) = _getOrderStatusAndBalance(tokenIn);\n\n if (status != OrderStatus.Failed) {\n revert OrderHasUnexpectedStatus(status);\n }\n\n _cancelOrder(tokenIn, receiver, amount);\n }\n\n /// @inheritdoc ICowSwapFeeBurner\n function emergencyCancelOrder(IERC20 tokenIn, address receiver) external onlyFeeRecipientOrOwner {\n _cancelOrder(tokenIn, receiver, tokenIn.balanceOf(address(this)));\n }\n\n function _cancelOrder(IERC20 tokenIn, address receiver, uint256 amount) internal {\n tokenIn.forceApprove(vaultRelayer, 0);\n delete _orders[tokenIn];\n\n SafeERC20.safeTransfer(tokenIn, receiver, amount);\n\n emit OrderCanceled(tokenIn, amount, receiver);\n }\n\n /***************************************************************************\n IProtocolFeeBurner\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeBurner\n function burn(\n address pool,\n IERC20 feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 targetToken,\n uint256 minTargetTokenAmountOut,\n address recipient,\n uint256 deadline\n ) external virtual onlyProtocolFeeSweeper nonReentrant {\n _burn(\n pool,\n feeToken,\n exactFeeTokenAmountIn,\n targetToken,\n minTargetTokenAmountOut,\n recipient,\n deadline,\n true // pullFeeToken\n );\n }\n\n function _burn(\n address pool,\n IERC20 feeToken,\n uint256 feeTokenAmount,\n IERC20 targetToken,\n uint256 minTargetTokenAmountOut,\n address recipient,\n uint256 deadline,\n bool pullFeeToken\n ) internal {\n if (targetToken == feeToken) {\n revert InvalidOrderParameters(\"Fee token and target token are the same\");\n } else if (feeTokenAmount == 0) {\n revert InvalidOrderParameters(\"Fee token amount is zero\");\n }\n\n _checkMinAmountOut(minTargetTokenAmountOut);\n _checkDeadline(deadline);\n\n if (pullFeeToken) {\n feeToken.safeTransferFrom(msg.sender, address(this), feeTokenAmount);\n }\n\n (OrderStatus status, ) = _getOrderStatusAndBalance(feeToken, feeTokenAmount);\n if (status != OrderStatus.Nonexistent && status != OrderStatus.Filled) {\n // New order can only be created if no order exists or the previous one was completely filled.\n // This prevents overlapping orders for the same token.\n revert OrderHasUnexpectedStatus(status);\n }\n\n _createCowOrder(feeToken);\n\n feeToken.forceApprove(vaultRelayer, feeTokenAmount);\n\n _orders[feeToken] = ShortOrder({\n tokenOut: targetToken,\n receiver: recipient,\n minAmountOut: minTargetTokenAmountOut,\n deadline: uint32(deadline)\n });\n\n emit ProtocolFeeBurned(pool, feeToken, feeTokenAmount, targetToken, minTargetTokenAmountOut, recipient);\n }\n\n /***************************************************************************\n ICowConditionalOrder\n ***************************************************************************/\n\n /// @inheritdoc ICowConditionalOrderGenerator\n function getTradeableOrder(\n address,\n address,\n bytes32,\n bytes calldata staticInput,\n bytes calldata\n ) public view returns (GPv2Order memory) {\n IERC20 tokenIn = IERC20(abi.decode(staticInput, (address)));\n\n return _getOrder(tokenIn);\n }\n\n /// @inheritdoc ICowConditionalOrder\n function verify(\n address owner,\n address sender,\n bytes32,\n bytes32,\n bytes32 ctx,\n bytes calldata staticInput,\n bytes calldata offchainInput,\n GPv2Order calldata _order\n ) external view {\n GPv2Order memory savedOrder = getTradeableOrder(owner, sender, ctx, staticInput, offchainInput);\n\n if (_order.buyAmount > savedOrder.buyAmount) {\n savedOrder.buyAmount = _order.buyAmount;\n }\n\n if (keccak256(abi.encode(savedOrder)) != keccak256(abi.encode(_order))) {\n revert InvalidOrderParameters(\"Verify order does not match with existing order\");\n }\n }\n\n /***************************************************************************\n Miscellaneous\n ***************************************************************************/\n\n /// @inheritdoc IERC1271\n function isValidSignature(bytes32 _hash, bytes memory signature) external view returns (bytes4) {\n (GPv2Order memory order, IComposableCow.Payload memory payload) = abi.decode(\n signature,\n (GPv2Order, IComposableCow.Payload)\n );\n\n // Forward the query to ComposableCow\n return\n composableCow.isValidSafeSignature(\n address(this),\n msg.sender,\n _hash,\n composableCow.domainSeparator(),\n bytes32(0),\n abi.encode(order),\n abi.encode(payload)\n );\n }\n\n /// @inheritdoc IERC165\n function supportsInterface(bytes4 interfaceId) public pure returns (bool) {\n // Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\n if (interfaceId == _SIGNATURE_VERIFIER_MUXER_INTERFACE) {\n revert InterfaceIsSignatureVerifierMuxer();\n }\n\n return\n interfaceId == type(ICowConditionalOrder).interfaceId ||\n interfaceId == type(ICowConditionalOrderGenerator).interfaceId ||\n interfaceId == type(IERC1271).interfaceId ||\n interfaceId == type(IERC165).interfaceId;\n }\n\n /***************************************************************************\n Private Functions\n ***************************************************************************/\n\n function _getOrder(IERC20 tokenIn) private view returns (GPv2Order memory) {\n ShortOrder memory shortOrder = _orders[tokenIn];\n\n if (shortOrder.deadline == 0) {\n revert OrderNotValid(\"Order does not exist\");\n }\n\n return\n GPv2Order({\n sellToken: tokenIn,\n buyToken: shortOrder.tokenOut,\n receiver: shortOrder.receiver,\n sellAmount: tokenIn.balanceOf(address(this)),\n buyAmount: shortOrder.minAmountOut,\n validTo: shortOrder.deadline,\n appData: appData,\n feeAmount: 0,\n kind: _sellKind,\n partiallyFillable: true,\n sellTokenBalance: _tokenBalance,\n buyTokenBalance: _tokenBalance\n });\n }\n\n function _getOrderStatusAndBalance(IERC20 tokenIn) private view returns (OrderStatus, uint256) {\n return _getOrderStatusAndBalance(tokenIn, 0);\n }\n\n function _getOrderStatusAndBalance(\n IERC20 tokenIn,\n uint256 balanceDelta\n ) private view returns (OrderStatus, uint256) {\n ShortOrder storage shortOrder = _orders[tokenIn];\n\n uint256 deadline = shortOrder.deadline;\n\n if (deadline == 0) {\n // No order exists because it was never created before.\n return (OrderStatus.Nonexistent, 0);\n }\n\n // We return the balance to the state before we received tokens for the new order.\n uint256 balance = tokenIn.balanceOf(address(this)) - balanceDelta;\n if (balance == 0) {\n // If no tokens remain, we assume the order was fully executed\n // because all tokens are taken by the relayer when the order is filled.\n return (OrderStatus.Filled, balance);\n } else if (block.timestamp > deadline) {\n // If tokens remain and the deadline passed, the order is considered failed.\n return (OrderStatus.Failed, balance);\n }\n\n // Otherwise, the order is still active.\n return (OrderStatus.Active, balance);\n }\n\n function _checkDeadline(uint256 deadline) private view {\n if (block.timestamp > deadline) {\n revert InvalidOrderParameters(\"Deadline is in the past\");\n }\n }\n\n function _checkMinAmountOut(uint256 minAmountOut) private pure {\n if (minAmountOut == 0) {\n revert InvalidOrderParameters(\"Min amount out is zero\");\n }\n }\n\n function _createCowOrder(IERC20 tokenIn) private {\n composableCow.create(\n ICowConditionalOrder.ConditionalOrderParams({\n handler: ICowConditionalOrder(address(this)),\n salt: bytes32(0),\n staticData: abi.encode(tokenIn)\n }),\n true\n );\n }\n}\n"},"contracts/ERC4626CowSwapFeeBurner.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IComposableCow } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\";\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport { PackedTokenBalance } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\";\n\nimport { CowSwapFeeBurner } from \"./CowSwapFeeBurner.sol\";\n\n/**\n * @title ERC4626CowSwapFeeBurner\n * @notice A contract that burns ERC4626 protocol fee tokens using CowSwap, previously redeeming underlying assets.\n * @dev The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function.\n * Only one order per token is allowed at a time.\n */\ncontract ERC4626CowSwapFeeBurner is CowSwapFeeBurner {\n using SafeERC20 for IERC20;\n\n /// @notice The amount out is zero.\n error AmountOutIsZero(IERC20 token);\n\n constructor(\n IProtocolFeeSweeper _protocolFeeSweeper,\n IComposableCow _composableCow,\n address _cowVaultRelayer,\n bytes32 _appData,\n address _initialOwner,\n string memory _version\n ) CowSwapFeeBurner(_protocolFeeSweeper, _composableCow, _cowVaultRelayer, _appData, _initialOwner, _version) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /**\n * @notice Treats `feeToken` as an ERC4626, redeems `exactFeeTokenAmountIn`, swaps the underlying asset for\n * `targetToken`, and sends the proceeds to the `recipient`.\n * @dev Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\n * @param pool The pool the fees came from (only used for documentation in the event)\n * @param feeToken The token collected from the pool\n * @param exactFeeTokenAmountIn The number of fee tokens collected\n * @param targetToken The desired target token (`tokenOut` of the swap)\n * @param encodedMinAmountsOut The minimum amounts out for the swap, encoded as a 256-bit integer:\n * - Upper 128 bits: the minimum amount of the target token to receive\n * - Lower 128 bits: the minimum amount of the ERC4626 token to receive\n * @param recipient The recipient of the swap proceeds\n * @param deadline Deadline for the burn operation (i.e., swap), after which it will revert\n */\n function burn(\n address pool,\n IERC20 feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 targetToken,\n uint256 encodedMinAmountsOut,\n address recipient,\n uint256 deadline\n ) external override onlyProtocolFeeSweeper nonReentrant {\n IERC4626 erc4626Token = IERC4626(address(feeToken));\n IERC20 underlyingToken = IERC20(erc4626Token.asset());\n\n // In this case we first pull the wrapped token, unwrap, and then proceed to burn by creating an order for\n // the underlying token.\n IERC20(address(erc4626Token)).safeTransferFrom(msg.sender, address(this), exactFeeTokenAmountIn);\n\n (uint256 minTargetTokenAmountOut, uint256 minERC4626AmountOut) = PackedTokenBalance.fromPackedBalance(\n bytes32(encodedMinAmountsOut)\n );\n\n uint256 feeTokenBalanceBefore = underlyingToken.balanceOf(address(this));\n\n erc4626Token.redeem(exactFeeTokenAmountIn, address(this), address(this));\n\n uint256 feeTokenBalanceAfter = underlyingToken.balanceOf(address(this));\n exactFeeTokenAmountIn = feeTokenBalanceAfter - feeTokenBalanceBefore;\n\n if (exactFeeTokenAmountIn < minERC4626AmountOut) {\n revert AmountOutBelowMin(underlyingToken, exactFeeTokenAmountIn, minERC4626AmountOut);\n } else if (exactFeeTokenAmountIn == 0) {\n revert AmountOutIsZero(underlyingToken);\n }\n\n // This case is not handled by the internal `_burn` function, but it's valid: we can consider that the token\n // has already been converted to the correct token, so we just forward the result and finish.\n if (underlyingToken == targetToken) {\n // We apply the slippage check, but not deadline as the order settlement is instant in this case.\n if (exactFeeTokenAmountIn < minTargetTokenAmountOut) {\n revert AmountOutBelowMin(targetToken, exactFeeTokenAmountIn, minTargetTokenAmountOut);\n }\n\n underlyingToken.safeTransfer(recipient, exactFeeTokenAmountIn);\n } else {\n _burn(\n pool,\n underlyingToken,\n exactFeeTokenAmountIn,\n targetToken,\n minTargetTokenAmountOut,\n recipient,\n deadline,\n false // pullToken\n );\n }\n }\n}\n"},"contracts/FeeBurnerAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { Ownable2Step } from \"@openzeppelin/contracts/access/Ownable2Step.sol\";\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\n\ncontract FeeBurnerAuthentication is Ownable2Step {\n IProtocolFeeSweeper public immutable protocolFeeSweeper;\n\n /// @notice The fee protocol is invalid.\n error InvalidProtocolFeeSweeper();\n\n /// @notice The sender does not have permission to call a function.\n error SenderNotAllowed();\n\n modifier onlyProtocolFeeSweeper() {\n if (msg.sender != address(protocolFeeSweeper)) {\n revert SenderNotAllowed();\n }\n _;\n }\n\n modifier onlyFeeRecipientOrOwner() {\n if (msg.sender != protocolFeeSweeper.getFeeRecipient() && msg.sender != owner()) {\n revert SenderNotAllowed();\n }\n _;\n }\n\n constructor(IProtocolFeeSweeper _protocolFeeSweeper, address initialOwner) Ownable(initialOwner) {\n if (address(_protocolFeeSweeper) == address(0)) {\n revert InvalidProtocolFeeSweeper();\n }\n\n protocolFeeSweeper = _protocolFeeSweeper;\n }\n}\n"},"contracts/HyperEVMRateProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.24;\n\nimport {\n IHyperEVMRateProvider\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\";\nimport { IRateProvider } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\";\n\nimport { HyperSpotPricePrecompile } from \"./utils/HyperSpotPricePrecompile.sol\";\nimport { HyperTokenInfoPrecompile } from \"./utils/HyperTokenInfoPrecompile.sol\";\n\n/**\n * @notice A rate provider for the HyperEVM.\n * @dev HyperEVM has precompiles that allow to fetch the spot price of a token (in terms of USD or other tokens).\n * This contract uses the spot price and the token info precompiles to return the rate of a token on-chain,\n * scaled with 18 decimals (compatible with the Vault).\n */\ncontract HyperEVMRateProvider is IRateProvider, IHyperEVMRateProvider {\n uint256 private immutable _spotPriceMultiplier;\n uint32 private immutable _pairIndex;\n uint32 private immutable _tokenIndex;\n\n constructor(uint32 tokenIndex, uint32 pairIndex) {\n uint8 szDecimals = HyperTokenInfoPrecompile.szDecimals(tokenIndex);\n // The spot price is returned with a different number of decimals for each token. So, to make this rate\n // provider compatible with the vault, we need to scale the spot price to 18 decimals using this multiplier.\n // According to hyperliquid's documentation\n // (https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore),\n // szDecimals has a minimum of 0 and a maximum of 8, so the multiplier is always between 1e10 and 1e18.\n _spotPriceMultiplier = 1e18 / (10 ** (8 - szDecimals));\n\n _pairIndex = pairIndex;\n _tokenIndex = tokenIndex;\n }\n\n /// @inheritdoc IHyperEVMRateProvider\n function getSpotPriceMultiplier() external view returns (uint256) {\n return _spotPriceMultiplier;\n }\n\n /// @inheritdoc IHyperEVMRateProvider\n function getTokenIndex() external view returns (uint32) {\n return _tokenIndex;\n }\n\n /// @inheritdoc IHyperEVMRateProvider\n function getPairIndex() external view returns (uint32) {\n return _pairIndex;\n }\n\n /// @inheritdoc IRateProvider\n function getRate() external view returns (uint256) {\n uint256 spotPrice = HyperSpotPricePrecompile.spotPrice(_pairIndex);\n return spotPrice * _spotPriceMultiplier;\n }\n}\n"},"contracts/HyperEVMRateProviderFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport {\n IHyperEVMRateProviderFactory\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol\";\nimport {\n IHyperEVMRateProvider\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\nimport { Version } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\";\n\nimport { HyperEVMRateProvider } from \"./HyperEVMRateProvider.sol\";\n\n/// @notice Factory for deploying and managing HyperEVM rate providers.\ncontract HyperEVMRateProviderFactory is IHyperEVMRateProviderFactory, SingletonAuthentication, Version {\n uint256 internal immutable _rateProviderVersion;\n bool internal _isDisabled;\n\n mapping(bytes32 rateProviderId => IHyperEVMRateProvider rateProvider) internal _rateProviders;\n mapping(IHyperEVMRateProvider rateProvider => bool creationFlag) internal _isRateProviderFromFactory;\n\n constructor(\n IVault vault,\n string memory factoryVersion,\n uint256 rateProviderVersion\n ) SingletonAuthentication(vault) Version(factoryVersion) {\n _rateProviderVersion = rateProviderVersion;\n }\n\n /// @inheritdoc IHyperEVMRateProviderFactory\n function getRateProviderVersion() external view returns (uint256) {\n return _rateProviderVersion;\n }\n\n /// @inheritdoc IHyperEVMRateProviderFactory\n function create(uint32 tokenIndex, uint32 pairIndex) external returns (IHyperEVMRateProvider rateProvider) {\n _ensureEnabled();\n\n bytes32 rateProviderId = _computeRateProviderId(tokenIndex, pairIndex);\n\n address existingRateProvider = address(_rateProviders[rateProviderId]);\n\n if (existingRateProvider != address(0)) {\n revert RateProviderAlreadyExists(tokenIndex, pairIndex, existingRateProvider);\n }\n\n rateProvider = IHyperEVMRateProvider(address(new HyperEVMRateProvider(tokenIndex, pairIndex)));\n _rateProviders[rateProviderId] = rateProvider;\n _isRateProviderFromFactory[rateProvider] = true;\n\n emit RateProviderCreated(tokenIndex, pairIndex, address(rateProvider));\n }\n\n /// @inheritdoc IHyperEVMRateProviderFactory\n function getRateProvider(\n uint32 tokenIndex,\n uint32 pairIndex\n ) external view returns (IHyperEVMRateProvider rateProvider) {\n bytes32 rateProviderId = _computeRateProviderId(tokenIndex, pairIndex);\n rateProvider = _rateProviders[rateProviderId];\n if (address(rateProvider) == address(0)) {\n revert RateProviderNotFound(tokenIndex, pairIndex);\n }\n return rateProvider;\n }\n\n /// @inheritdoc IHyperEVMRateProviderFactory\n function isRateProviderFromFactory(IHyperEVMRateProvider rateProvider) external view returns (bool) {\n return _isRateProviderFromFactory[rateProvider];\n }\n\n /// @inheritdoc IHyperEVMRateProviderFactory\n function disable() external authenticate {\n _ensureEnabled();\n\n _isDisabled = true;\n emit RateProviderFactoryDisabled();\n }\n\n function _computeRateProviderId(uint32 tokenIndex, uint32 pairIndex) internal pure returns (bytes32) {\n return keccak256(abi.encode(tokenIndex, pairIndex));\n }\n\n function _ensureEnabled() internal view {\n if (_isDisabled) {\n revert RateProviderFactoryIsDisabled();\n }\n }\n}\n"},"contracts/OwnableAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { Ownable2Step } from \"@openzeppelin/contracts/access/Ownable2Step.sol\";\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { Authentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\";\n\n/**\n * @notice OwnableAuthentication is a contract that combines ownership management with authentication.\n * @dev Use it to pre-wire admin multisigs upon deployment to a contract that requires permissioned functions to work,\n * where the impact of the owner going rogue is minimal. Contract registries, fee burners, and other utility contracts\n * are good examples.\n * In turn, the pre-configured owner can speed up operations as it can perform any action right after deployment without\n * waiting for governance to set up the authorizer, which can take whole weeks.\n * On the other hand, governance can always revoke or change the owner at any given time, keeping superior powers\n * above the owner.\n */\ncontract OwnableAuthentication is Ownable2Step, Authentication {\n /// @notice The vault has not been set.\n error VaultNotSet();\n\n IVault public immutable vault;\n\n constructor(\n IVault vault_,\n address initialOwner\n ) Ownable(initialOwner) Authentication(bytes32(uint256(uint160(address(this))))) {\n if (address(vault_) == address(0)) {\n revert VaultNotSet();\n }\n\n vault = vault_;\n }\n\n /// @notice Returns the authorizer address according to the Vault.\n function getAuthorizer() external view returns (IAuthorizer) {\n return vault.getAuthorizer();\n }\n\n /**\n * @notice Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\n * @dev This allows governance to revoke the owner at any time, preserving control above the owner at all times.\n * address(0) is also a valid owner, as governance can simply choose to revoke ownership.\n * Ownership can always be forced back to any address later on.\n */\n function forceTransferOwnership(address newOwner) external authenticate {\n // `authenticate` let's the owner through, so we filter it out here.\n if (msg.sender == owner()) {\n revert SenderNotAllowed();\n }\n _transferOwnership(newOwner);\n }\n\n function _canPerform(bytes32 actionId, address user) internal view virtual override returns (bool) {\n // The owner is always allowed to perform any action.\n if (user == owner()) {\n return true;\n }\n\n // Otherwise, check the vault's authorizer for permission.\n return vault.getAuthorizer().canPerform(actionId, user, address(this));\n }\n}\n"},"contracts/PoolHelperCommon.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\";\n\nimport { IPoolHelperCommon } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { OwnableAuthentication } from \"./OwnableAuthentication.sol\";\n\n/// @notice Common code for helper functions that operate on a subset of pools.\nabstract contract PoolHelperCommon is IPoolHelperCommon, OwnableAuthentication {\n using EnumerableSet for EnumerableSet.AddressSet;\n\n // Counter for generating unique pool set IDs. Must start at 1, since 0 is defined as invalid.\n uint256 private _nextPoolSetId = 1;\n\n // Mapping from pool set ID to the manager address.\n mapping(uint256 poolSetId => address manager) private _poolSetManagers;\n\n // Reverse lookup to find which set a given manager owns.\n // Note that this means an address may only control a single pool set.\n mapping(address manager => uint256 poolSetId) private _poolSetLookup;\n\n // Mapping from a pool set ID to the set of pools in that pool set.\n mapping(uint256 poolSetId => EnumerableSet.AddressSet pools) private _poolSets;\n\n // Ensure the explicit poolSetId (used in the admin interface) is valid.\n modifier withValidPoolSet(uint256 poolSetId) {\n _ensureValidPoolSet(poolSetId);\n _;\n }\n\n // Ensure the pool is in a set controlled by the caller. This is used in derived contracts.\n modifier withValidPoolForSender(address pool) {\n uint256 poolSetId = _getValidPoolSetId();\n _ensurePoolInSet(poolSetId, pool);\n _;\n }\n\n // Ensure the manager is non-zero, and not already a manager of another set.\n modifier withValidManager(address manager) {\n _ensureValidManager(manager);\n _;\n }\n\n constructor(IVault vault, address initialOwner) OwnableAuthentication(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /***************************************************************************\n Manage Pool Sets\n ***************************************************************************/\n\n /// @inheritdoc IPoolHelperCommon\n function createPoolSet(\n address initialManager\n ) external authenticate withValidManager(initialManager) returns (uint256) {\n return _createPoolSet(initialManager);\n }\n\n /// @inheritdoc IPoolHelperCommon\n function createPoolSet(\n address initialManager,\n address[] memory newPools\n ) external authenticate withValidManager(initialManager) returns (uint256 poolSetId) {\n poolSetId = _createPoolSet(initialManager);\n\n if (newPools.length > 0) {\n addPoolsToSet(poolSetId, newPools);\n }\n }\n\n function _createPoolSet(address initialManager) internal returns (uint256 poolSetId) {\n poolSetId = _nextPoolSetId++;\n\n // Add to forward and reverse mappings.\n _poolSetManagers[poolSetId] = initialManager;\n _poolSetLookup[initialManager] = poolSetId;\n\n emit PoolSetCreated(poolSetId, initialManager);\n }\n\n /// @inheritdoc IPoolHelperCommon\n function destroyPoolSet(uint256 poolSetId) external authenticate withValidPoolSet(poolSetId) {\n EnumerableSet.AddressSet storage poolSet = _poolSets[poolSetId];\n\n // Remove all pools from the set.\n uint256 numPools = poolSet.length();\n\n while (numPools > 0) {\n unchecked {\n --numPools;\n }\n\n address pool = poolSet.at(numPools);\n emit PoolRemovedFromSet(pool, poolSetId);\n\n poolSet.remove(pool);\n }\n\n // Remove the set itself.\n delete _poolSets[poolSetId];\n\n address manager = _poolSetManagers[poolSetId];\n\n // Also remove associated manager from both mappings.\n _poolSetManagers[poolSetId] = address(0);\n _poolSetLookup[manager] = 0;\n\n emit PoolSetDestroyed(poolSetId, manager);\n }\n\n /// @inheritdoc IPoolHelperCommon\n function transferPoolSetOwnership(address newManager) external withValidManager(newManager) {\n uint256 poolSetId = _getValidPoolSetId();\n\n _poolSetManagers[poolSetId] = newManager;\n\n // The \"old\" manager must be the current sender.\n _poolSetLookup[msg.sender] = 0;\n _poolSetLookup[newManager] = poolSetId;\n\n emit PoolSetOwnershipTransferred(poolSetId, msg.sender, newManager);\n }\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /// @inheritdoc IPoolHelperCommon\n function addPoolsToSet(\n uint256 poolSetId,\n address[] memory newPools\n ) public authenticate withValidPoolSet(poolSetId) {\n uint256 numPools = newPools.length;\n\n for (uint256 i = 0; i < numPools; i++) {\n address pool = newPools[i];\n\n // Ensure the address is a valid pool.\n if (vault.isPoolRegistered(pool) == false) {\n revert IVaultErrors.PoolNotRegistered(pool);\n }\n\n if (_poolSets[poolSetId].add(pool) == false) {\n revert PoolAlreadyInSet(pool, poolSetId);\n }\n\n // Call virtual function in case additional validation is needed.\n _validatePool(pool);\n\n emit PoolAddedToSet(pool, poolSetId);\n }\n }\n\n /// @inheritdoc IPoolHelperCommon\n function removePoolsFromSet(\n uint256 poolSetId,\n address[] memory pools\n ) public authenticate withValidPoolSet(poolSetId) {\n uint256 numPools = pools.length;\n\n for (uint256 i = 0; i < numPools; i++) {\n address pool = pools[i];\n\n if (_poolSets[poolSetId].remove(pool) == false) {\n revert PoolNotInSet(pool, poolSetId);\n }\n\n emit PoolRemovedFromSet(pool, poolSetId);\n }\n }\n\n /***************************************************************************\n Getters \n ***************************************************************************/\n\n /// @inheritdoc IPoolHelperCommon\n function getPoolSetIdForCaller() public view returns (uint256) {\n return _poolSetLookup[msg.sender];\n }\n\n /// @inheritdoc IPoolHelperCommon\n function getPoolSetIdForManager(address manager) public view returns (uint256) {\n return _poolSetLookup[manager];\n }\n\n /// @inheritdoc IPoolHelperCommon\n function getPoolCountForSet(uint256 poolSetId) external view withValidPoolSet(poolSetId) returns (uint256) {\n return _poolSets[poolSetId].length();\n }\n\n /// @inheritdoc IPoolHelperCommon\n function isValidPoolSetId(uint256 poolSetId) external view returns (bool) {\n return _poolSetManagers[poolSetId] != address(0);\n }\n\n /// @inheritdoc IPoolHelperCommon\n function isPoolInSet(address pool, uint256 poolSetId) external view withValidPoolSet(poolSetId) returns (bool) {\n return _poolSets[poolSetId].contains(pool);\n }\n\n /// @inheritdoc IPoolHelperCommon\n function getAllPoolsInSet(\n uint256 poolSetId\n ) external view withValidPoolSet(poolSetId) returns (address[] memory pools) {\n return _poolSets[poolSetId].values();\n }\n\n /// @inheritdoc IPoolHelperCommon\n function getPoolsInSet(\n uint256 poolSetId,\n uint256 from,\n uint256 to\n ) public view withValidPoolSet(poolSetId) returns (address[] memory pools) {\n uint256 spanLength = _poolSets[poolSetId].length();\n\n if (from > to || to > spanLength || from >= spanLength) {\n revert IndexOutOfBounds(poolSetId);\n }\n\n pools = new address[](to - from);\n for (uint256 i = from; i < to; i++) {\n pools[i - from] = _poolSets[poolSetId].at(i);\n }\n }\n\n /// @inheritdoc IPoolHelperCommon\n function getNextPoolSetId() external view returns (uint256) {\n return _nextPoolSetId;\n }\n\n /// @inheritdoc IPoolHelperCommon\n function getManagerForPoolSet(uint256 poolSetId) external view returns (address) {\n return _poolSetManagers[poolSetId];\n }\n\n /***************************************************************************\n Internal functions \n ***************************************************************************/\n\n // Find and validate the poolSetId for the caller.\n function _getValidPoolSetId() internal view returns (uint256 poolSetId) {\n poolSetId = getPoolSetIdForCaller();\n\n if (poolSetId == 0) {\n revert SenderIsNotPoolSetManager();\n }\n }\n\n function _ensureValidManager(address manager) internal view {\n if (manager == address(0)) {\n revert InvalidPoolSetManager();\n }\n\n if (_poolSetLookup[manager] != 0) {\n revert PoolSetManagerNotUnique(manager);\n }\n }\n\n function _ensurePoolInSet(uint256 poolSetId, address pool) internal view {\n if (_poolSets[poolSetId].contains(pool) == false) {\n revert PoolNotInSet(pool, poolSetId);\n }\n }\n\n /// @dev Optional function called in `addPoolsToSet` for optional additional validation.\n function _validatePool(address pool) internal view virtual {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function _ensureValidPoolSet(uint256 poolSetId) internal view {\n if (poolSetId == 0 || _poolSetManagers[poolSetId] == address(0)) {\n revert InvalidPoolSetId(poolSetId);\n }\n }\n}\n"},"contracts/PoolPauseHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IPoolPauseHelper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { PoolHelperCommon } from \"./PoolHelperCommon.sol\";\n\ncontract PoolPauseHelper is IPoolPauseHelper, PoolHelperCommon {\n constructor(IVault vault, address initialOwner) PoolHelperCommon(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /// @inheritdoc IPoolPauseHelper\n function pausePools(address[] memory pools) public {\n // Retrieve the poolSetId for this sender.\n uint256 poolSetId = _getValidPoolSetId();\n\n uint256 length = pools.length;\n\n for (uint256 i = 0; i < length; i++) {\n address pool = pools[i];\n _ensurePoolInSet(poolSetId, pool);\n\n vault.pausePool(pool);\n }\n }\n}\n"},"contracts/PoolSwapFeeHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IPoolSwapFeeHelper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { PoolHelperCommon } from \"./PoolHelperCommon.sol\";\n\ncontract PoolSwapFeeHelper is IPoolSwapFeeHelper, PoolHelperCommon {\n constructor(IVault vault, address initialOwner) PoolHelperCommon(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /// @inheritdoc IPoolSwapFeeHelper\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) public withValidPoolForSender(pool) {\n vault.setStaticSwapFeePercentage(pool, swapFeePercentage);\n }\n\n /***************************************************************************\n Internal functions \n ***************************************************************************/\n\n /// @inheritdoc PoolHelperCommon\n function _validatePool(address pool) internal view override {\n // Pools cannot have a swap fee manager.\n if (vault.getPoolRoleAccounts(pool).swapFeeManager != address(0)) {\n revert PoolHasSwapManager(pool);\n }\n }\n}\n"},"contracts/PriceImpactHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { IRouter } from \"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\";\n\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nimport { CallAndRevert } from \"./CallAndRevert.sol\";\n\ncontract PriceImpactHelper is CallAndRevert {\n using FixedPoint for uint256;\n using SafeCast for *;\n\n IVault internal immutable _vault;\n IRouter internal immutable _router;\n\n constructor(IVault vault, IRouter router) {\n _vault = vault;\n _router = router;\n }\n\n /*******************************************************************************\n Price Impact\n *******************************************************************************/\n\n function calculateAddLiquidityUnbalancedPriceImpact(\n address pool,\n uint256[] memory exactAmountsIn,\n address sender\n ) external returns (uint256 priceImpact) {\n uint256 bptAmountOut = _queryAddLiquidityUnbalanced(pool, exactAmountsIn, sender);\n uint256[] memory proportionalAmountsOut = _queryRemoveLiquidityProportional(pool, bptAmountOut, sender);\n\n // get deltas between exactAmountsIn and proportionalAmountsOut\n int256[] memory deltas = new int256[](exactAmountsIn.length);\n for (uint256 i = 0; i < exactAmountsIn.length; i++) {\n deltas[i] = proportionalAmountsOut[i].toInt256() - exactAmountsIn[i].toInt256();\n }\n\n // query add liquidity for each delta, so we know how unbalanced each amount in is in terms of BPT\n int256[] memory deltaBPTs = new int256[](exactAmountsIn.length);\n for (uint256 i = 0; i < exactAmountsIn.length; i++) {\n deltaBPTs[i] = _queryAddLiquidityUnbalancedForTokenDeltas(pool, i, deltas, sender);\n }\n\n // zero out deltas leaving only a remaining delta within a single token\n uint256 remainingDeltaIndex = _zeroOutDeltas(pool, deltas, deltaBPTs, sender);\n\n // calculate price impact ABA with remaining delta and its respective exactAmountIn\n // remaining delta is always negative, so by multiplying by -1 we get a positive number\n uint256 delta = (-deltas[remainingDeltaIndex]).toUint256();\n return delta.divDown(exactAmountsIn[remainingDeltaIndex]) / 2;\n }\n\n /*******************************************************************************\n Router Queries\n *******************************************************************************/\n\n function _queryAddLiquidityUnbalanced(\n address pool,\n uint256[] memory exactAmountsIn,\n address sender\n ) internal returns (uint256) {\n return\n abi.decode(\n _callAndRevert(\n address(_router),\n abi.encodeWithSelector(\n IRouter.queryAddLiquidityUnbalanced.selector,\n pool,\n exactAmountsIn,\n sender,\n \"\"\n )\n ),\n (uint256)\n );\n }\n\n function _queryRemoveLiquidityProportional(\n address pool,\n uint256 bptAmountOut,\n address sender\n ) internal returns (uint256[] memory) {\n return\n abi.decode(\n _callAndRevert(\n address(_router),\n abi.encodeWithSelector(\n IRouter.queryRemoveLiquidityProportional.selector,\n pool,\n bptAmountOut,\n sender,\n \"\"\n )\n ),\n (uint256[])\n );\n }\n\n function _querySwapSingleTokenExactIn(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 amountIn,\n address sender\n ) internal returns (uint256) {\n return\n abi.decode(\n _callAndRevert(\n address(_router),\n abi.encodeWithSelector(\n IRouter.querySwapSingleTokenExactIn.selector,\n pool,\n tokenIn,\n tokenOut,\n amountIn,\n sender,\n \"\"\n )\n ),\n (uint256)\n );\n }\n\n function _querySwapSingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 amountOut,\n address sender\n ) internal returns (uint256) {\n return\n abi.decode(\n _callAndRevert(\n address(_router),\n abi.encodeWithSelector(\n IRouter.querySwapSingleTokenExactOut.selector,\n pool,\n tokenIn,\n tokenOut,\n amountOut,\n sender,\n \"\"\n )\n ),\n (uint256)\n );\n }\n\n /*******************************************************************************\n Helpers\n *******************************************************************************/\n\n function _queryAddLiquidityUnbalancedForTokenDeltas(\n address pool,\n uint256 tokenIndex,\n int256[] memory deltas,\n address sender\n ) internal returns (int256) {\n uint256[] memory zerosWithSingleDelta = new uint256[](deltas.length);\n int256 delta = deltas[tokenIndex];\n\n if (delta == 0) {\n return 0;\n }\n\n zerosWithSingleDelta[tokenIndex] = uint256(delta > 0 ? delta : -delta);\n int256 result = int256(_queryAddLiquidityUnbalanced(pool, zerosWithSingleDelta, sender));\n\n return delta > 0 ? result : -result;\n }\n\n function _zeroOutDeltas(\n address pool,\n int256[] memory deltas,\n int256[] memory deltaBPTs,\n address sender\n ) internal returns (uint256) {\n // Index of closest from 0 negative number in deltaBPTs array.\n uint256 maxNegativeDeltaIndex = 0;\n IERC20[] memory poolTokens = _vault.getPoolTokens(pool);\n\n for (uint256 i = 0; i < deltas.length - 1; i++) {\n // get minPositiveDeltaIndex and maxNegativeDeltaIndex\n uint256 minPositiveDeltaIndex = _minPositiveIndex(deltaBPTs);\n maxNegativeDeltaIndex = _maxNegativeIndex(deltaBPTs);\n\n uint256 givenTokenIndex;\n uint256 resultTokenIndex;\n uint256 resultAmount;\n\n if (deltaBPTs[minPositiveDeltaIndex] < -deltaBPTs[maxNegativeDeltaIndex]) {\n givenTokenIndex = minPositiveDeltaIndex;\n resultTokenIndex = maxNegativeDeltaIndex;\n resultAmount = _querySwapSingleTokenExactIn(\n pool,\n poolTokens[givenTokenIndex],\n poolTokens[resultTokenIndex],\n deltas[givenTokenIndex].toUint256(),\n sender\n );\n } else {\n givenTokenIndex = maxNegativeDeltaIndex;\n resultTokenIndex = minPositiveDeltaIndex;\n resultAmount = _querySwapSingleTokenExactOut(\n pool,\n poolTokens[resultTokenIndex],\n poolTokens[givenTokenIndex],\n (-deltas[givenTokenIndex]).toUint256(),\n sender\n );\n }\n\n // Update deltas and deltaBPTs\n deltas[givenTokenIndex] = 0;\n deltaBPTs[givenTokenIndex] = 0;\n deltas[resultTokenIndex] += resultAmount.toInt256();\n deltaBPTs[resultTokenIndex] = _queryAddLiquidityUnbalancedForTokenDeltas(\n pool,\n resultTokenIndex,\n deltas,\n sender\n );\n }\n\n return maxNegativeDeltaIndex;\n }\n\n // returns the index of the smallest positive integer in an array - i.e. [3, 2, -2, -3] returns 1\n function _minPositiveIndex(int256[] memory array) internal pure returns (uint256 index) {\n int256 min = type(int256).max;\n for (uint256 i = 0; i < array.length; i++) {\n if (array[i] > 0 && array[i] < min) {\n min = array[i];\n index = i;\n }\n }\n }\n\n // returns the index of the biggest negative integer in an array - i.e. [3, 1, -2, -3] returns 2\n function _maxNegativeIndex(int256[] memory array) internal pure returns (uint256 index) {\n int256 max = type(int256).min;\n for (uint256 i = 0; i < array.length; i++) {\n if (array[i] < 0 && array[i] > max) {\n max = array[i];\n index = i;\n }\n }\n }\n}\n"},"contracts/ProtocolFeeHelper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IProtocolFeeHelper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol\";\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { PoolHelperCommon } from \"./PoolHelperCommon.sol\";\n\ncontract ProtocolFeeHelper is IProtocolFeeHelper, PoolHelperCommon {\n constructor(IVault vault, address initialOwner) PoolHelperCommon(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /***************************************************************************\n Manage Pools\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeHelper\n function setProtocolSwapFeePercentage(\n address pool,\n uint256 newProtocolSwapFeePercentage\n ) external withValidPoolForSender(pool) {\n _getProtocolFeeController().setProtocolSwapFeePercentage(pool, newProtocolSwapFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeHelper\n function setProtocolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage\n ) external withValidPoolForSender(pool) {\n _getProtocolFeeController().setProtocolYieldFeePercentage(pool, newProtocolYieldFeePercentage);\n }\n\n /***************************************************************************\n Internal functions \n ***************************************************************************/\n\n // The protocol fee controller is upgradeable in the Vault, so we must fetch it every time.\n function _getProtocolFeeController() internal view returns (IProtocolFeeController) {\n return vault.getProtocolFeeController();\n }\n}\n"},"contracts/ProtocolFeePercentagesProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\n\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IBasePoolFactory } from \"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\";\nimport { FEE_SCALING_FACTOR } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport {\n IProtocolFeePercentagesProvider\n} from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol\";\nimport {\n IBalancerContractRegistry,\n ContractType\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\nimport { ProtocolFeeController } from \"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\";\n\ncontract ProtocolFeePercentagesProvider is IProtocolFeePercentagesProvider, SingletonAuthentication {\n using SafeCast for uint256;\n\n /**\n * @dev Data structure to store default protocol fees by factory. Fee percentages are 18-decimal floating point\n * numbers, so we know they fit in 64 bits, allowing the fees to be stored in a single slot.\n *\n * @param protocolSwapFee The protocol swap fee\n * @param protocolYieldFee The protocol yield fee\n * @param areFactoryFeesSet Flag indicating fees have been set (allows zero values)\n */\n struct FactoryProtocolFees {\n uint64 protocolSwapFeePercentage;\n uint64 protocolYieldFeePercentage;\n bool areFactoryFeesSet;\n }\n\n IBalancerContractRegistry private immutable _trustedContractRegistry;\n IProtocolFeeController private immutable _protocolFeeController;\n\n uint256 private immutable _maxProtocolSwapFeePercentage;\n uint256 private immutable _maxProtocolYieldFeePercentage;\n\n // Factory address => FactoryProtocolFees\n mapping(IBasePoolFactory => FactoryProtocolFees) private _factoryDefaultFeePercentages;\n\n constructor(IVault vault, IBalancerContractRegistry trustedContractRegistry) SingletonAuthentication(vault) {\n IProtocolFeeController protocolFeeController = vault.getProtocolFeeController();\n\n _protocolFeeController = protocolFeeController;\n _trustedContractRegistry = trustedContractRegistry;\n\n // Read the maximum percentages from the `protocolFeeController`.\n _maxProtocolSwapFeePercentage = ProtocolFeeController(address(protocolFeeController))\n .MAX_PROTOCOL_SWAP_FEE_PERCENTAGE();\n _maxProtocolYieldFeePercentage = ProtocolFeeController(address(protocolFeeController))\n .MAX_PROTOCOL_YIELD_FEE_PERCENTAGE();\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function getProtocolFeeController() external view returns (IProtocolFeeController) {\n return _protocolFeeController;\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function getBalancerContractRegistry() external view returns (IBalancerContractRegistry) {\n return _trustedContractRegistry;\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function getFactorySpecificProtocolFeePercentages(\n address factory\n ) external view returns (uint256 protocolSwapFeePercentage, uint256 protocolYieldFeePercentage) {\n FactoryProtocolFees memory factoryFees = _getValidatedProtocolFees(factory);\n\n protocolSwapFeePercentage = factoryFees.protocolSwapFeePercentage;\n protocolYieldFeePercentage = factoryFees.protocolYieldFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function setFactorySpecificProtocolFeePercentages(\n address factory,\n uint256 protocolSwapFeePercentage,\n uint256 protocolYieldFeePercentage\n ) external authenticate {\n // Validate the fee percentages; don't store values that the `ProtocolFeeCollector` will reject.\n if (protocolSwapFeePercentage > _maxProtocolSwapFeePercentage) {\n revert IProtocolFeeController.ProtocolSwapFeePercentageTooHigh();\n }\n\n if (protocolYieldFeePercentage > _maxProtocolYieldFeePercentage) {\n revert IProtocolFeeController.ProtocolYieldFeePercentageTooHigh();\n }\n\n // Ensure the factory is valid.\n if (_trustedContractRegistry.isActiveBalancerContract(ContractType.POOL_FACTORY, factory) == false) {\n revert UnknownFactory(factory);\n }\n\n // Ensure precision checks will pass.\n _ensureValidPrecision(protocolSwapFeePercentage);\n _ensureValidPrecision(protocolYieldFeePercentage);\n\n // Store the default fee percentages, and mark the factory as registered.\n _factoryDefaultFeePercentages[IBasePoolFactory(factory)] = FactoryProtocolFees({\n protocolSwapFeePercentage: protocolSwapFeePercentage.toUint64(),\n protocolYieldFeePercentage: protocolYieldFeePercentage.toUint64(),\n areFactoryFeesSet: true\n });\n\n emit FactorySpecificProtocolFeePercentagesSet(factory, protocolSwapFeePercentage, protocolYieldFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeePercentagesProvider\n function setProtocolFeePercentagesForPools(address factory, address[] memory pools) external {\n // Note that unless the factory fees were previously set in `setFactorySpecificProtocolFeePercentages` above,\n // this getter will revert. The fee setter function validates the factory with the `BalancerContractRegistry`,\n // so we know it is a valid Balancer pool factory.\n FactoryProtocolFees memory factoryFees = _getValidatedProtocolFees(factory);\n\n for (uint256 i = 0; i < pools.length; ++i) {\n address currentPool = pools[i];\n\n // We know from the logic above that the factory is valid. Now also check that the given pool actually\n // comes from that factory.\n if (IBasePoolFactory(factory).isPoolFromFactory(currentPool) == false) {\n revert PoolNotFromFactory(currentPool, factory);\n }\n\n _setPoolProtocolFees(\n currentPool,\n factoryFees.protocolSwapFeePercentage,\n factoryFees.protocolYieldFeePercentage\n );\n }\n }\n\n function _getValidatedProtocolFees(address factory) private view returns (FactoryProtocolFees memory factoryFees) {\n factoryFees = _factoryDefaultFeePercentages[IBasePoolFactory(factory)];\n\n if (factoryFees.areFactoryFeesSet == false) {\n revert FactoryFeesNotSet(factory);\n }\n }\n\n /**\n * @dev These are permissioned functions on `ProtocolFeeController`, so governance will need to allow this contract\n * to call `setProtocolSwapFeePercentage` and `setProtocolYieldFeePercentage`.\n */\n function _setPoolProtocolFees(\n address pool,\n uint256 protocolSwapFeePercentage,\n uint256 protocolYieldFeePercentage\n ) private {\n _protocolFeeController.setProtocolSwapFeePercentage(pool, protocolSwapFeePercentage);\n _protocolFeeController.setProtocolYieldFeePercentage(pool, protocolYieldFeePercentage);\n }\n\n /**\n * @dev This is a duplicate of the corresponding function in `ProtocolFeeController`, as it isn't exposed in the\n * deployed version of the contract.\n */\n function _ensureValidPrecision(uint256 feePercentage) private pure {\n // Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n // precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n // corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n // Ensure there will be no precision loss in the Vault - which would lead to a discrepancy between the\n // aggregate fee calculated here and that stored in the Vault.\n if ((feePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR != feePercentage) {\n revert IVaultErrors.FeePrecisionTooHigh();\n }\n }\n}\n"},"contracts/ProtocolFeeSweeper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\nimport { IProtocolFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\";\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\n\n/**\n * @notice Withdraw protocol fees, convert them to a target token, and forward to a recipient.\n * @dev This withdraws all protocol fees previously collected and allocated to the protocol by the\n * `ProtocolFeeController`, processes them with a configurable \"burner\" (e.g., from CowSwap) and forwards them to\n * a recipient address.\n *\n * An off-chain process can call `collectAggregateFees(pool)` on the fee controller for a given pool, which will\n * collect and allocate the fees to the protocol and pool creator. `getProtocolFeeAmounts(pool)` returns the fee\n * amounts available for withdrawal. If these are great enough, `sweepProtocolFeesForToken` here will withdraw,\n * convert, and forward them to the final recipient.\n */\ncontract ProtocolFeeSweeper is IProtocolFeeSweeper, SingletonAuthentication, ReentrancyGuardTransient {\n using SafeERC20 for IERC20;\n\n /// @notice All pool tokens are ERC20, so this contract should not handle ETH.\n error CannotReceiveEth();\n\n // Preferred token for receiving protocol fees. Passed to the fee burner as the target of fee token swaps.\n IERC20 private _targetToken;\n\n // Final destination of the collected protocol fees.\n address private _feeRecipient;\n\n // Allowlist of valid protocol fee burners.\n mapping(IProtocolFeeBurner feeBurner => bool isApproved) private _protocolFeeBurners;\n\n /// @notice Allows calls from fee recipient or governance allowed accounts (non-exclusive).\n modifier onlyFeeRecipientOrGovernance() {\n _ensureAuthenticatedByRole(address(this), _feeRecipient);\n _;\n }\n\n // The default configuration on deployment simply forwards all fee tokens to the `feeRecipient`.\n constructor(IVault vault, address feeRecipient) SingletonAuthentication(vault) {\n _setFeeRecipient(feeRecipient);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function sweepProtocolFeesForToken(\n address pool,\n IERC20 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner\n ) external nonReentrant onlyFeeRecipientOrGovernance {\n _sweepProtocolFeesForToken(pool, feeToken, minTargetTokenAmountOut, deadline, feeBurner, false);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function sweepProtocolFeesForWrappedToken(\n address pool,\n IERC4626 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner\n ) external nonReentrant onlyFeeRecipientOrGovernance {\n _sweepProtocolFeesForToken(pool, IERC20(address(feeToken)), minTargetTokenAmountOut, deadline, feeBurner, true);\n }\n\n function _sweepProtocolFeesForToken(\n address pool,\n IERC20 feeToken,\n uint256 minTargetTokenAmountOut,\n uint256 deadline,\n IProtocolFeeBurner feeBurner,\n bool shouldUnwrap\n ) internal {\n bool feeBurnerProvided = _getValidFeeBurner(feeBurner);\n\n uint256 existingBalance = feeToken.balanceOf(address(this));\n\n // Withdraw protocol fees to this contract. Note that governance will need to grant this contract permission\n // to call `withdrawProtocolFeesForToken` on the `ProtocolFeeController.\n IProtocolFeeController feeController = getProtocolFeeController();\n\n // Transfer any pending fees from the Vault to the ProtocolFeeController, and allocate the protocol and pool\n // creator portions.\n feeController.collectAggregateFees(pool);\n\n // Withdraw the protocol portion of the fees to this contract (requires permission).\n feeController.withdrawProtocolFeesForToken(pool, address(this), feeToken);\n\n uint256 withdrawnBalance = feeToken.balanceOf(address(this)) - existingBalance;\n\n if (withdrawnBalance > 0) {\n if (feeBurnerProvided) {\n IERC20 targetToken = _targetToken;\n\n // If the fee token is already the target, there's no need to swap. Simply transfer it.\n if (feeToken == targetToken) {\n if (shouldUnwrap) {\n revert UnwrapIsNotAllowed();\n }\n\n _transferFeeToken(pool, feeToken, withdrawnBalance);\n } else {\n if (shouldUnwrap) {\n IERC4626 erc4626Token = IERC4626(address(feeToken));\n\n feeToken = IERC20(erc4626Token.asset());\n withdrawnBalance = erc4626Token.redeem(withdrawnBalance, address(this), address(this));\n }\n\n // We must revert if this allowance is not entirely consumed by the burner, to avoid exploitable\n // \"hanging approvals.\" The order may be asynchronous, but it must pull the tokens immediately.\n feeToken.forceApprove(address(feeBurner), withdrawnBalance);\n // This is asynchronous; the burner will complete the action and emit an event.\n feeBurner.burn(\n pool,\n feeToken,\n withdrawnBalance,\n targetToken,\n minTargetTokenAmountOut,\n _feeRecipient,\n deadline\n );\n\n if (feeToken.allowance(address(this), address(feeBurner)) > 0) {\n revert BurnerDidNotConsumeAllowance();\n }\n }\n } else {\n // If no burner has been set, fall back on direct transfer of the fee token.\n _transferFeeToken(pool, feeToken, withdrawnBalance);\n }\n }\n }\n\n function _getValidFeeBurner(IProtocolFeeBurner feeBurner) private view returns (bool feeBurnerProvided) {\n feeBurnerProvided = address(feeBurner) != address(0);\n\n // Allow passing the zero address (no burner); this will simply transfer the fee tokens directly (e.g., if\n // there is no burner available for a given token).\n if (feeBurnerProvided) {\n if (_protocolFeeBurners[feeBurner]) {\n if (address(_targetToken) == address(0)) {\n revert InvalidTargetToken();\n }\n } else {\n revert UnsupportedProtocolFeeBurner(address(feeBurner));\n }\n }\n }\n\n function _transferFeeToken(address pool, IERC20 feeToken, uint256 withdrawnTokenBalance) private {\n address recipient = _feeRecipient;\n feeToken.safeTransfer(recipient, withdrawnTokenBalance);\n\n emit ProtocolFeeSwept(pool, feeToken, withdrawnTokenBalance, recipient);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function getProtocolFeeController() public view returns (IProtocolFeeController) {\n return getVault().getProtocolFeeController();\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function getTargetToken() external view returns (IERC20) {\n return _targetToken;\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function getFeeRecipient() external view returns (address) {\n return _feeRecipient;\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function isApprovedProtocolFeeBurner(address protocolFeeBurner) external view returns (bool) {\n return _protocolFeeBurners[IProtocolFeeBurner(protocolFeeBurner)];\n }\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeSweeper\n function setFeeRecipient(address feeRecipient) external onlyFeeRecipientOrGovernance {\n _setFeeRecipient(feeRecipient);\n }\n\n function _setFeeRecipient(address feeRecipient) internal {\n // Best effort to at least ensure the fee recipient isn't the zero address (so it doesn't literally burn all\n // protocol fees). Governance must ensure this is a valid address, as sweeping is permissionless.\n //\n // We could use a 2-step claim process like the `TimelockAuthorizer` here, but the consequences here are less\n // severe, so that might be overkill. Nothing can be bricked; the worst that can happen is loss of protocol\n // fees until the recipient is updated again.\n if (feeRecipient == address(0)) {\n revert InvalidFeeRecipient();\n }\n\n _feeRecipient = feeRecipient;\n\n emit FeeRecipientSet(feeRecipient);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function setTargetToken(IERC20 targetToken) external onlyFeeRecipientOrGovernance {\n _targetToken = targetToken;\n\n emit TargetTokenSet(targetToken);\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function addProtocolFeeBurner(IProtocolFeeBurner protocolFeeBurner) external onlyFeeRecipientOrGovernance {\n if (_protocolFeeBurners[protocolFeeBurner]) {\n revert ProtocolFeeBurnerAlreadyAdded(address(protocolFeeBurner));\n }\n\n // Since the zero address is a sentinel value indicating no burner should be used, do not allow adding it.\n if (address(protocolFeeBurner) == address(0)) {\n revert InvalidProtocolFeeBurner();\n }\n\n _protocolFeeBurners[protocolFeeBurner] = true;\n\n emit ProtocolFeeBurnerAdded(address(protocolFeeBurner));\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function removeProtocolFeeBurner(IProtocolFeeBurner protocolFeeBurner) external onlyFeeRecipientOrGovernance {\n if (_protocolFeeBurners[protocolFeeBurner] == false) {\n revert ProtocolFeeBurnerNotAdded(address(protocolFeeBurner));\n }\n\n _protocolFeeBurners[protocolFeeBurner] = false;\n\n emit ProtocolFeeBurnerRemoved(address(protocolFeeBurner));\n }\n\n /// @inheritdoc IProtocolFeeSweeper\n function recoverProtocolFees(IERC20[] memory feeTokens) external nonReentrant {\n if (msg.sender != _feeRecipient) {\n revert SenderNotAllowed();\n }\n\n for (uint256 i = 0; i < feeTokens.length; ++i) {\n IERC20 feeToken = feeTokens[i];\n uint256 tokenBalance = feeToken.balanceOf(address(this));\n\n if (tokenBalance > 0) {\n feeToken.safeTransfer(msg.sender, tokenBalance);\n }\n }\n }\n\n /*******************************************************************************\n Default handlers\n *******************************************************************************/\n\n // Maybe these aren't needed, but given the general sensitivity of this contract, preemptively disallow any\n // ETH-related shenanigans. Tokens are always ERC20, so there should be no ETH involved in any operations.\n\n receive() external payable {\n revert CannotReceiveEth();\n }\n\n // solhint-disable no-complex-fallback\n\n fallback() external payable {\n if (msg.value > 0) {\n revert CannotReceiveEth();\n }\n\n revert(\"Not implemented\");\n }\n}\n"},"contracts/test/FeeBurnerAuthenticationMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { IProtocolFeeSweeper } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\";\n\nimport { FeeBurnerAuthentication } from \"../FeeBurnerAuthentication.sol\";\n\ncontract FeeBurnerAuthenticationMock is FeeBurnerAuthentication {\n constructor(\n IProtocolFeeSweeper protocolFeeSweeper,\n address initialOwner\n ) FeeBurnerAuthentication(protocolFeeSweeper, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function manualOnlyProtocolFeeSweeper() external onlyProtocolFeeSweeper {}\n\n function manualOnlyFeeRecipientOrOwner() external onlyFeeRecipientOrOwner {}\n}\n"},"contracts/test/OwnableAuthenticationMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { Ownable2Step } from \"@openzeppelin/contracts/access/Ownable2Step.sol\";\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { Authentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\";\n\nimport { OwnableAuthentication } from \"../OwnableAuthentication.sol\";\n\ncontract OwnableAuthenticationMock is OwnableAuthentication {\n constructor(IVault vault, address initialOwner) OwnableAuthentication(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function permissionedFunction() external view authenticate {\n // solhint-disable-previous-line no-empty-blocks\n }\n}\n"},"contracts/test/PoolHelperMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { PoolHelperCommon } from \"../PoolHelperCommon.sol\";\n\ncontract PoolHelperMock is PoolHelperCommon {\n constructor(IVault vault, address initialOwner) PoolHelperCommon(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n}\n"},"contracts/test/PriceImpactHelperMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { IRouter } from \"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\";\n\nimport { PriceImpactHelper } from \"../PriceImpactHelper.sol\";\n\ncontract PriceImpactHelperMock is PriceImpactHelper {\n constructor(IVault vault, IRouter router) PriceImpactHelper(vault, router) {}\n\n function queryAddLiquidityUnbalancedForTokenDeltas(\n address pool,\n uint256 tokenIndex,\n int256[] memory deltas,\n address sender\n ) external returns (int256 deltaBPT) {\n return _queryAddLiquidityUnbalancedForTokenDeltas(pool, tokenIndex, deltas, sender);\n }\n\n function zeroOutDeltas(\n address pool,\n int256[] memory deltas,\n int256[] memory deltaBPTs,\n address sender\n ) external returns (uint256) {\n return _zeroOutDeltas(pool, deltas, deltaBPTs, sender);\n }\n\n function minPositiveIndex(int256[] memory array) external pure returns (uint256) {\n return _minPositiveIndex(array);\n }\n\n function maxNegativeIndex(int256[] memory array) external pure returns (uint256) {\n return _maxNegativeIndex(array);\n }\n}\n"},"contracts/test/ProtocolFeeBurnerMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { IProtocolFeeBurner } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\";\n\nimport { ERC20TestToken } from \"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\ncontract ProtocolFeeBurnerMock is IProtocolFeeBurner {\n using FixedPoint for uint256;\n using SafeERC20 for IERC20;\n\n uint256 private _tokenRatio = FixedPoint.ONE;\n\n bool transferFromEnabled = true;\n\n /// @inheritdoc IProtocolFeeBurner\n function burn(\n address pool,\n IERC20 feeToken,\n uint256 exactFeeTokenAmountIn,\n IERC20 targetToken,\n uint256 minAmountOut,\n address recipient,\n uint256 deadline\n ) external {\n if (block.timestamp > deadline) {\n revert SwapDeadline();\n }\n\n if (transferFromEnabled) {\n feeToken.safeTransferFrom(msg.sender, address(this), exactFeeTokenAmountIn);\n }\n\n // Simulate the swap by minting the same amount of target to the recipient.\n ERC20TestToken(address(targetToken)).mint(recipient, exactFeeTokenAmountIn);\n\n uint256 targetTokenAmount = exactFeeTokenAmountIn.mulDown(_tokenRatio);\n if (targetTokenAmount < minAmountOut) {\n revert AmountOutBelowMin(targetToken, targetTokenAmount, minAmountOut);\n }\n\n // Just emit the event, simulating the tokens being exchanged at 1-to-1.\n emit ProtocolFeeBurned(pool, feeToken, exactFeeTokenAmountIn, targetToken, targetTokenAmount, recipient);\n }\n\n function setTokenRatio(uint256 ratio) external {\n _tokenRatio = ratio;\n }\n\n function setTransferFromEnabled(bool enabled) external {\n transferFromEnabled = enabled;\n }\n}\n"},"contracts/test/VaultMockForFeeSweeper.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\n\ncontract VaultMockForFeeSweeper is IAuthorizer {\n using SafeERC20 for IERC20;\n\n mapping(address => bool) public owners;\n\n constructor() {\n owners[msg.sender] = true;\n }\n\n modifier onlyOwner() {\n require(owners[msg.sender], \"VaultMockForFeeSweeper: Not an owner\");\n _;\n }\n\n function getAuthorizer() external view returns (IAuthorizer authorizer) {\n return IAuthorizer(address(this));\n }\n\n function canPerform(bytes32, address account, address) external view returns (bool) {\n return owners[account];\n }\n\n function canPerform(bytes32, address account) external view returns (bool) {\n return owners[account];\n }\n\n function addOwner(address owner_) external onlyOwner {\n owners[owner_] = true;\n }\n\n function removeOwner(address owner_) external onlyOwner {\n owners[owner_] = false;\n }\n\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController) {\n return IProtocolFeeController(address(this));\n }\n\n function collectAggregateFees(address) external {}\n\n function withdrawProtocolFeesForToken(address, address recipient, IERC20 token) external onlyOwner {\n token.safeTransfer(recipient, token.balanceOf(address(this)));\n }\n}\n"},"contracts/TokenPairRegistry.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { ITokenPairRegistry } from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol\";\nimport { SwapPathStep } from \"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { EnumerableSet } from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\";\nimport { InputHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\";\n\nimport { OwnableAuthentication } from \"./OwnableAuthentication.sol\";\n\n/**\n * @notice Stores token pair swap paths on-chain, allowing an admin to maintain swap routes.\n * @dev The paths are stored as arrays of `SwapPathStep` structs, which contain the pool or buffer\n * address, the output token, and a boolean indicating whether the step is a buffer or not.\n * Functions that add information to the registry are permissioned.\n */\ncontract TokenPairRegistry is ITokenPairRegistry, OwnableAuthentication {\n using EnumerableSet for EnumerableSet.AddressSet;\n\n mapping(bytes32 pairId => SwapPathStep[][] paths) internal _pairsToPaths;\n\n constructor(IVault vault, address initialOwner) OwnableAuthentication(vault, initialOwner) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /// @inheritdoc ITokenPairRegistry\n function getPathAt(address tokenIn, address tokenOut, uint256 index) external view returns (SwapPathStep[] memory) {\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n return _pairsToPaths[tokenId][index];\n }\n\n /// @inheritdoc ITokenPairRegistry\n function getPathCount(address tokenIn, address tokenOut) external view returns (uint256) {\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n return _pairsToPaths[tokenId].length;\n }\n\n /// @inheritdoc ITokenPairRegistry\n function getPaths(address tokenIn, address tokenOut) external view returns (SwapPathStep[][] memory) {\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n return _pairsToPaths[tokenId];\n }\n\n /// @inheritdoc ITokenPairRegistry\n function addPath(address tokenIn, SwapPathStep[] memory steps) external authenticate {\n if (steps.length == 0) {\n revert EmptyPath();\n }\n\n address tokenOut = address(steps[steps.length - 1].tokenOut);\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n\n address stepTokenIn = tokenIn;\n for (uint256 i = 0; i < steps.length; ++i) {\n SwapPathStep memory step = steps[i];\n if (step.isBuffer) {\n _checkBufferStep(step.pool, stepTokenIn, address(step.tokenOut));\n } else {\n _checkPoolStep(step.pool, stepTokenIn, address(step.tokenOut));\n }\n\n // Update token in for the next iteration.\n stepTokenIn = address(step.tokenOut);\n }\n\n SwapPathStep[][] storage paths = _pairsToPaths[tokenId];\n paths.push();\n for (uint256 i = 0; i < steps.length; ++i) {\n paths[paths.length - 1].push(steps[i]);\n }\n emit PathAdded(tokenIn, tokenOut, _pairsToPaths[tokenId].length);\n }\n\n /// @inheritdoc ITokenPairRegistry\n function addSimplePath(address poolOrBuffer) external authenticate {\n if (vault.isPoolRegistered(poolOrBuffer)) {\n _addPool(poolOrBuffer);\n } else if (vault.isERC4626BufferInitialized(IERC4626(poolOrBuffer))) {\n _addBuffer(IERC4626(poolOrBuffer));\n } else {\n revert InvalidSimplePath(poolOrBuffer);\n }\n }\n\n /// @inheritdoc ITokenPairRegistry\n function removePathAtIndex(address tokenIn, address tokenOut, uint256 index) external authenticate {\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n SwapPathStep[][] storage paths = _pairsToPaths[tokenId];\n uint256 pathsLength = paths.length;\n\n if (index >= pathsLength) {\n revert IndexOutOfBounds();\n }\n\n if (pathsLength > 1 && index != pathsLength - 1) {\n paths[index] = paths[pathsLength - 1];\n }\n // pop() can be used to clear dynamic arrays: it deletes every element and removes the inner array entirely.\n paths.pop();\n\n emit PathRemoved(tokenIn, tokenOut, paths.length);\n }\n\n /// @inheritdoc ITokenPairRegistry\n function removeSimplePath(address poolOrBuffer) external authenticate {\n if (vault.isPoolRegistered(poolOrBuffer)) {\n _removePool(poolOrBuffer);\n } else if (vault.isERC4626BufferInitialized(IERC4626(poolOrBuffer))) {\n _removeBuffer(IERC4626(poolOrBuffer));\n } else {\n revert InvalidSimplePath(poolOrBuffer);\n }\n }\n\n function _addPool(address pool) internal {\n IERC20[] memory tokens = vault.getPoolTokens(pool);\n\n uint256 tokenPairs = tokens.length - 1;\n for (uint256 i = 0; i < tokenPairs; ++i) {\n for (uint256 j = i + 1; j < tokens.length; ++j) {\n _addTokenPair(pool, address(tokens[i]), address(tokens[j]), false);\n }\n }\n }\n\n /// @dev Always wrap, as long as it's a registered buffer in the Vault.\n function _addBuffer(IERC4626 wrappedToken) internal {\n address underlyingToken = vault.getBufferAsset(wrappedToken);\n _addTokenPair(address(wrappedToken), underlyingToken, address(wrappedToken), true);\n }\n\n function _addTokenPair(address poolOrBuffer, address tokenA, address tokenB, bool isBuffer) internal {\n _addSimplePairStep(poolOrBuffer, tokenA, tokenB, isBuffer);\n _addSimplePairStep(poolOrBuffer, tokenB, tokenA, isBuffer);\n }\n\n function _addSimplePairStep(address poolOrBuffer, address tokenIn, address tokenOut, bool isBuffer) internal {\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n SwapPathStep memory step = SwapPathStep({ pool: poolOrBuffer, tokenOut: IERC20(tokenOut), isBuffer: isBuffer });\n\n SwapPathStep[][] storage paths = _pairsToPaths[tokenId];\n paths.push();\n paths[paths.length - 1].push(step);\n emit PathAdded(tokenIn, tokenOut, _pairsToPaths[tokenId].length);\n }\n\n function _removePool(address pool) internal {\n IERC20[] memory tokens = vault.getPoolTokens(pool);\n\n uint256 tokenPairs = tokens.length - 1;\n for (uint256 i = 0; i < tokenPairs; ++i) {\n for (uint256 j = i + 1; j < tokens.length; ++j) {\n _removeTokenPair(pool, address(tokens[i]), address(tokens[j]));\n }\n }\n }\n\n function _removeTokenPair(address poolOrBuffer, address tokenA, address tokenB) internal {\n _removeSimplePairStep(poolOrBuffer, tokenA, tokenB);\n _removeSimplePairStep(poolOrBuffer, tokenB, tokenA);\n }\n\n function _removeSimplePairStep(address poolOrBuffer, address tokenIn, address tokenOut) internal {\n bytes32 tokenId = _getTokenPairId(tokenIn, tokenOut);\n\n SwapPathStep[][] storage paths = _pairsToPaths[tokenId];\n\n // We first look for a path of length 1, representing a simple pair.\n for (uint256 i = 0; i < paths.length; ++i) {\n SwapPathStep[] storage steps = paths[i];\n\n if (steps.length == 1 && steps[0].pool == poolOrBuffer && address(steps[0].tokenOut) == tokenOut) {\n // Element found. Re-arrange paths if needed, replacing the current element with the last one.\n if (paths.length > 1) {\n paths[i] = paths[paths.length - 1];\n }\n\n // Nothing else to do here.\n paths.pop();\n emit PathRemoved(tokenIn, tokenOut, paths.length);\n\n return;\n }\n }\n\n // If we didn't return at this point, we revert with an error indicating the invalid removal attempt.\n revert InvalidRemovePath(poolOrBuffer, tokenIn, tokenOut);\n }\n\n function _removeBuffer(IERC4626 wrappedToken) internal {\n address underlyingToken = vault.getBufferAsset(wrappedToken);\n _removeTokenPair(address(wrappedToken), underlyingToken, address(wrappedToken));\n }\n\n function _getTokenPairId(address tokenIn, address tokenOut) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(tokenIn, tokenOut));\n }\n\n function _checkBufferStep(address buffer, address tokenIn, address tokenOut) internal view {\n address underlying = address(vault.getBufferAsset(IERC4626(buffer)));\n\n if (underlying == address(0)) {\n revert BufferNotInitialized(buffer);\n }\n\n if (tokenIn == underlying) {\n // This is a wrap.\n if (tokenOut != address(buffer)) {\n revert InvalidBufferPath(buffer, tokenIn, tokenOut);\n }\n } else if (tokenIn == buffer) {\n // This is an unwrap.\n if (tokenOut != address(underlying)) {\n revert InvalidBufferPath(buffer, tokenIn, tokenOut);\n }\n } else {\n // Token in must be either wrapped or underlying.\n revert InvalidBufferPath(buffer, tokenIn, tokenOut);\n }\n }\n\n function _checkPoolStep(address pool, address tokenIn, address tokenOut) internal view {\n IERC20[] memory tokens = vault.getPoolTokens(pool);\n\n bool foundIn = false;\n bool foundOut = false;\n\n for (uint256 i = 0; i < tokens.length; ++i) {\n if (tokens[i] == IERC20(tokenIn)) {\n foundIn = true;\n }\n if (tokens[i] == IERC20(tokenOut)) {\n foundOut = true;\n }\n }\n\n if (foundIn == false || foundOut == false) {\n revert InvalidSimplePath(pool);\n }\n }\n}\n"},"contracts/utils/HyperSpotPricePrecompile.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.24;\n\n/**\n * @notice Library to interact with the Hyperliquid spot price precompile.\n * @dev The precompile is a special type of code, executed in the Hypercore's node. For more information, see\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore .\n */\nlibrary HyperSpotPricePrecompile {\n address public constant SPOT_PRICE_PRECOMPILE_ADDRESS = 0x0000000000000000000000000000000000000808;\n\n /// @notice The precompile had an error while fetching the spot price.\n error SpotPricePrecompileFailed();\n\n /// @notice The spot price is zero.\n error SpotPriceIsZero();\n\n function spotPrice(uint32 pairIndex) internal view returns (uint256) {\n (bool success, bytes memory spotPriceBytes) = SPOT_PRICE_PRECOMPILE_ADDRESS.staticcall(abi.encode(pairIndex));\n if (success == false) {\n revert SpotPricePrecompileFailed();\n }\n uint256 price = abi.decode(spotPriceBytes, (uint256));\n if (price == 0) {\n revert SpotPriceIsZero();\n }\n return price;\n }\n}\n"},"contracts/utils/HyperTokenInfoPrecompile.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.8.24;\n\n/**\n * @notice Library to interact with the Hyperliquid token info precompile.\n * @dev The precompile is a special type of code, executed in the Hypercore's node. For more information, see\n * https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore .\n */\nlibrary HyperTokenInfoPrecompile {\n // The following structure is defined by the token info precompile.\n struct HyperTokenInfo {\n string name;\n uint64[] spots;\n uint64 deployerTradingFeeShare;\n address deployer;\n address evmContract;\n uint8 szDecimals;\n uint8 weiDecimals;\n int8 evmExtraWeiDecimals;\n }\n\n address public constant TOKEN_INFO_PRECOMPILE_ADDRESS = 0x000000000000000000000000000000000000080C;\n\n /// @notice The precompile had an error while fetching the token info.\n error TokenInfoPrecompileFailed();\n\n function szDecimals(uint32 tokenIndex) internal view returns (uint8) {\n (bool success, bytes memory out) = TOKEN_INFO_PRECOMPILE_ADDRESS.staticcall(abi.encode(tokenIndex));\n if (success == false) {\n revert TokenInfoPrecompileFailed();\n }\n HyperTokenInfo memory tokenInfo = abi.decode(out, (HyperTokenInfo));\n return tokenInfo.szDecimals;\n }\n}\n"}},"settings":{"viaIR":true,"evmVersion":"cancun","optimizer":{"enabled":true,"runs":9999,"details":{"yulDetails":{"optimizerSteps":"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu"}}},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}}}},"output":{"errors":[{"component":"general","errorCode":"2394","formattedMessage":"Warning: Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.\n --> @balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol:74:13:\n |\n74 | tstore(slot, value)\n | ^^^^^^\n\n","message":"Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.","severity":"warning","sourceLocation":{"end":2572,"file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","start":2566},"type":"Warning"}],"sources":{"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","exportedSymbols":{"IAuthentication":[14]},"id":15,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthentication","contractDependencies":[],"contractKind":"interface","documentation":{"id":2,"nodeType":"StructuredDocumentation","src":"72:77:0","text":"@notice Simple interface for permissioned calling of external functions."},"fullyImplemented":false,"id":14,"linearizedBaseContracts":[14],"name":"IAuthentication","nameLocation":"159:15:0","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3,"nodeType":"StructuredDocumentation","src":"181:67:0","text":"@notice The sender does not have permission to call a function."},"errorSelector":"23dada53","id":5,"name":"SenderNotAllowed","nameLocation":"259:16:0","nodeType":"ErrorDefinition","parameters":{"id":4,"nodeType":"ParameterList","parameters":[],"src":"275:2:0"},"src":"253:25:0"},{"documentation":{"id":6,"nodeType":"StructuredDocumentation","src":"284:237:0","text":" @notice Returns the action identifier associated with the external function described by `selector`.\n @param selector The 4-byte selector of the permissioned function\n @return actionId The computed actionId"},"functionSelector":"851c1bb3","id":13,"implemented":false,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"535:11:0","nodeType":"FunctionDefinition","parameters":{"id":9,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8,"mutability":"mutable","name":"selector","nameLocation":"554:8:0","nodeType":"VariableDeclaration","scope":13,"src":"547:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":7,"name":"bytes4","nodeType":"ElementaryTypeName","src":"547:6:0","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"546:17:0"},"returnParameters":{"id":12,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11,"mutability":"mutable","name":"actionId","nameLocation":"595:8:0","nodeType":"VariableDeclaration","scope":13,"src":"587:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10,"name":"bytes32","nodeType":"ElementaryTypeName","src":"587:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"586:18:0"},"scope":14,"src":"526:79:0","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":15,"src":"149:458:0","usedErrors":[5],"usedEvents":[]}],"src":"46:562:0"},"id":0},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","exportedSymbols":{"IRateProvider":[24]},"id":25,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":16,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:1"},{"abstract":false,"baseContracts":[],"canonicalName":"IRateProvider","contractDependencies":[],"contractKind":"interface","documentation":{"id":17,"nodeType":"StructuredDocumentation","src":"72:56:1","text":"@notice General interface for token exchange rates."},"fullyImplemented":false,"id":24,"linearizedBaseContracts":[24],"name":"IRateProvider","nameLocation":"138:13:1","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":18,"nodeType":"StructuredDocumentation","src":"158:573:1","text":" @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n rates in downstream computations.\n @return rate The current token rate"},"functionSelector":"679aefce","id":23,"implemented":false,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"745:7:1","nodeType":"FunctionDefinition","parameters":{"id":19,"nodeType":"ParameterList","parameters":[],"src":"752:2:1"},"returnParameters":{"id":22,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21,"mutability":"mutable","name":"rate","nameLocation":"786:4:1","nodeType":"VariableDeclaration","scope":23,"src":"778:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20,"name":"uint256","nodeType":"ElementaryTypeName","src":"778:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"777:14:1"},"scope":24,"src":"736:56:1","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":25,"src":"128:666:1","usedErrors":[],"usedEvents":[]}],"src":"46:749:1"},"id":1},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol","exportedSymbols":{"IVersion":[34]},"id":35,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":26,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:2"},{"abstract":false,"baseContracts":[],"canonicalName":"IVersion","contractDependencies":[],"contractKind":"interface","documentation":{"id":27,"nodeType":"StructuredDocumentation","src":"72:77:2","text":"@notice Simple interface to retrieve the version of a deployed contract."},"fullyImplemented":false,"id":34,"linearizedBaseContracts":[34],"name":"IVersion","nameLocation":"159:8:2","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":28,"nodeType":"StructuredDocumentation","src":"174:418:2","text":" @notice Return arbitrary text representing the version of a contract.\n @dev For standard Balancer contracts, returns a JSON representation of the contract version containing name,\n version number and task ID. See real examples in the deployment repo; local tests just use plain text strings.\n @return version The version string corresponding to the current deployed contract"},"functionSelector":"54fd4d50","id":33,"implemented":false,"kind":"function","modifiers":[],"name":"version","nameLocation":"606:7:2","nodeType":"FunctionDefinition","parameters":{"id":29,"nodeType":"ParameterList","parameters":[],"src":"613:2:2"},"returnParameters":{"id":32,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33,"src":"639:13:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":30,"name":"string","nodeType":"ElementaryTypeName","src":"639:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"638:15:2"},"scope":34,"src":"597:57:2","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":35,"src":"149:507:2","usedErrors":[],"usedEvents":[]}],"src":"46:611:2"},"id":2},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","exportedSymbols":{"ContractType":[43],"IBalancerContractRegistry":[212]},"id":213,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":36,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:3"},{"canonicalName":"ContractType","documentation":{"id":37,"nodeType":"StructuredDocumentation","src":"72:61:3","text":"@notice Registered contracts must be one of these types."},"id":43,"members":[{"id":38,"name":"OTHER","nameLocation":"157:5:3","nodeType":"EnumValue","src":"157:5:3"},{"id":39,"name":"POOL_FACTORY","nameLocation":"255:12:3","nodeType":"EnumValue","src":"255:12:3"},{"id":40,"name":"ROUTER","nameLocation":"273:6:3","nodeType":"EnumValue","src":"273:6:3"},{"id":41,"name":"HOOK","nameLocation":"285:4:3","nodeType":"EnumValue","src":"285:4:3"},{"id":42,"name":"ERC4626","nameLocation":"295:7:3","nodeType":"EnumValue","src":"295:7:3"}],"name":"ContractType","nameLocation":"138:12:3","nodeType":"EnumDefinition","src":"133:171:3"},{"abstract":false,"baseContracts":[],"canonicalName":"IBalancerContractRegistry","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":212,"linearizedBaseContracts":[212],"name":"IBalancerContractRegistry","nameLocation":"316:25:3","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IBalancerContractRegistry.ContractInfo","documentation":{"id":44,"nodeType":"StructuredDocumentation","src":"348:887:3","text":" @notice Store the state of a registered Balancer contract.\n @dev Contracts can be deprecated, so we store an active flag indicating the status. With two flags, we can\n differentiate between deprecated and non-existent. The same contract address can have multiple names, but\n only one type. If a contract is legitimately multiple types (e.g., a hook that also acts as a router), set\n the type to its \"primary\" function: hook, in this case. The \"Other\" type is intended as a catch-all for\n things that don't find into the standard types (e.g., helper contracts).\n @param contractType The type of contract (e.g., Router or Hook)\n @param isRegistered This flag indicates whether there is an entry for the associated address\n @param isActive If there is an entry, this flag indicates whether it is active or deprecated"},"id":52,"members":[{"constant":false,"id":47,"mutability":"mutable","name":"contractType","nameLocation":"1283:12:3","nodeType":"VariableDeclaration","scope":52,"src":"1270:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":46,"nodeType":"UserDefinedTypeName","pathNode":{"id":45,"name":"ContractType","nameLocations":["1270:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"1270:12:3"},"referencedDeclaration":43,"src":"1270:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":49,"mutability":"mutable","name":"isRegistered","nameLocation":"1310:12:3","nodeType":"VariableDeclaration","scope":52,"src":"1305:17:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":48,"name":"bool","nodeType":"ElementaryTypeName","src":"1305:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":51,"mutability":"mutable","name":"isActive","nameLocation":"1337:8:3","nodeType":"VariableDeclaration","scope":52,"src":"1332:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":50,"name":"bool","nodeType":"ElementaryTypeName","src":"1332:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ContractInfo","nameLocation":"1247:12:3","nodeType":"StructDefinition","scope":212,"src":"1240:112:3","visibility":"public"},{"anonymous":false,"documentation":{"id":53,"nodeType":"StructuredDocumentation","src":"1358:278:3","text":" @notice Emitted when a new contract is registered.\n @param contractType The type of contract being registered\n @param contractName The name of the contract being registered\n @param contractAddress The address of the contract being registered"},"eventSelector":"b12ed936cf481273b3ed037dc706d110c49bd7ba6743e67082cd772a6e9102e2","id":62,"name":"BalancerContractRegistered","nameLocation":"1647:26:3","nodeType":"EventDefinition","parameters":{"id":61,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56,"indexed":true,"mutability":"mutable","name":"contractType","nameLocation":"1704:12:3","nodeType":"VariableDeclaration","scope":62,"src":"1683:33:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":55,"nodeType":"UserDefinedTypeName","pathNode":{"id":54,"name":"ContractType","nameLocations":["1683:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"1683:12:3"},"referencedDeclaration":43,"src":"1683:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":58,"indexed":true,"mutability":"mutable","name":"contractName","nameLocation":"1741:12:3","nodeType":"VariableDeclaration","scope":62,"src":"1726:27:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":57,"name":"string","nodeType":"ElementaryTypeName","src":"1726:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":60,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"1779:15:3","nodeType":"VariableDeclaration","scope":62,"src":"1763:31:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59,"name":"address","nodeType":"ElementaryTypeName","src":"1763:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1673:127:3"},"src":"1641:160:3"},{"anonymous":false,"documentation":{"id":63,"nodeType":"StructuredDocumentation","src":"1807:296:3","text":" @notice Emitted when a new contract is deregistered (deleted).\n @param contractType The type of contract being deregistered\n @param contractName The name of the contract being deregistered\n @param contractAddress The address of the contract being deregistered"},"eventSelector":"fa2e7bfe3791287aa74ffe867372b78e61b60e0516978c4952f83f7416fafb7c","id":72,"name":"BalancerContractDeregistered","nameLocation":"2114:28:3","nodeType":"EventDefinition","parameters":{"id":71,"nodeType":"ParameterList","parameters":[{"constant":false,"id":66,"indexed":true,"mutability":"mutable","name":"contractType","nameLocation":"2173:12:3","nodeType":"VariableDeclaration","scope":72,"src":"2152:33:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":65,"nodeType":"UserDefinedTypeName","pathNode":{"id":64,"name":"ContractType","nameLocations":["2152:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"2152:12:3"},"referencedDeclaration":43,"src":"2152:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":68,"indexed":true,"mutability":"mutable","name":"contractName","nameLocation":"2210:12:3","nodeType":"VariableDeclaration","scope":72,"src":"2195:27:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":67,"name":"string","nodeType":"ElementaryTypeName","src":"2195:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":70,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2248:15:3","nodeType":"VariableDeclaration","scope":72,"src":"2232:31:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":69,"name":"address","nodeType":"ElementaryTypeName","src":"2232:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2142:127:3"},"src":"2108:162:3"},{"anonymous":false,"documentation":{"id":73,"nodeType":"StructuredDocumentation","src":"2276:203:3","text":" @notice Emitted when a registered contract is deprecated.\n @dev This sets the `isActive` flag to false.\n @param contractAddress The address of the contract being deprecated"},"eventSelector":"07b81cace396ea12f83465895486ac006cd17917e41b9759ad5e663404f1497b","id":77,"name":"BalancerContractDeprecated","nameLocation":"2490:26:3","nodeType":"EventDefinition","parameters":{"id":76,"nodeType":"ParameterList","parameters":[{"constant":false,"id":75,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2533:15:3","nodeType":"VariableDeclaration","scope":77,"src":"2517:31:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":74,"name":"address","nodeType":"ElementaryTypeName","src":"2517:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2516:33:3"},"src":"2484:66:3"},{"anonymous":false,"documentation":{"id":78,"nodeType":"StructuredDocumentation","src":"2556:187:3","text":" @notice Emitted when an alias is added or updated.\n @param contractAlias The alias name\n @param contractAddress The address of the contract being deprecated"},"eventSelector":"06618a6a1a6a413a59097e7c362ee8260afae8f07bd94bc0938e573058465483","id":84,"name":"ContractAliasUpdated","nameLocation":"2754:20:3","nodeType":"EventDefinition","parameters":{"id":83,"nodeType":"ParameterList","parameters":[{"constant":false,"id":80,"indexed":true,"mutability":"mutable","name":"contractAlias","nameLocation":"2790:13:3","nodeType":"VariableDeclaration","scope":84,"src":"2775:28:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":79,"name":"string","nodeType":"ElementaryTypeName","src":"2775:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":82,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2821:15:3","nodeType":"VariableDeclaration","scope":84,"src":"2805:31:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":81,"name":"address","nodeType":"ElementaryTypeName","src":"2805:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2774:63:3"},"src":"2748:90:3"},{"documentation":{"id":85,"nodeType":"StructuredDocumentation","src":"2844:531:3","text":" @notice A contract has already been registered under the given address.\n @dev Both names and addresses must be unique in the primary registration mapping. Though there are two mappings\n to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent\n name => address => state mapping.\n @param contractType The contract type, provided for documentation purposes\n @param contractAddress The address of the previously registered contract"},"errorSelector":"25a14e0c","id":92,"name":"ContractAddressAlreadyRegistered","nameLocation":"3386:32:3","nodeType":"ErrorDefinition","parameters":{"id":91,"nodeType":"ParameterList","parameters":[{"constant":false,"id":88,"mutability":"mutable","name":"contractType","nameLocation":"3432:12:3","nodeType":"VariableDeclaration","scope":92,"src":"3419:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":87,"nodeType":"UserDefinedTypeName","pathNode":{"id":86,"name":"ContractType","nameLocations":["3419:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"3419:12:3"},"referencedDeclaration":43,"src":"3419:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":90,"mutability":"mutable","name":"contractAddress","nameLocation":"3454:15:3","nodeType":"VariableDeclaration","scope":92,"src":"3446:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":89,"name":"address","nodeType":"ElementaryTypeName","src":"3446:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3418:52:3"},"src":"3380:91:3"},{"documentation":{"id":93,"nodeType":"StructuredDocumentation","src":"3477:439:3","text":" @notice A contract has already been registered under the given name.\n @dev Note that names must be unique; it is not possible to register two contracts with the same name and\n different types, or the same name and different addresses.\n @param contractType The registered contract type, provided for documentation purposes\n @param contractName The name of the previously registered contract"},"errorSelector":"a1e69ed3","id":100,"name":"ContractNameAlreadyRegistered","nameLocation":"3927:29:3","nodeType":"ErrorDefinition","parameters":{"id":99,"nodeType":"ParameterList","parameters":[{"constant":false,"id":96,"mutability":"mutable","name":"contractType","nameLocation":"3970:12:3","nodeType":"VariableDeclaration","scope":100,"src":"3957:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":95,"nodeType":"UserDefinedTypeName","pathNode":{"id":94,"name":"ContractType","nameLocations":["3957:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"3957:12:3"},"referencedDeclaration":43,"src":"3957:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":98,"mutability":"mutable","name":"contractName","nameLocation":"3991:12:3","nodeType":"VariableDeclaration","scope":100,"src":"3984:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":97,"name":"string","nodeType":"ElementaryTypeName","src":"3984:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3956:48:3"},"src":"3921:84:3"},{"documentation":{"id":101,"nodeType":"StructuredDocumentation","src":"4011:338:3","text":" @notice The proposed contract name has already been added as an alias.\n @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n @param contractName The name of the previously registered contract\n @param contractAddress The address of the previously registered contract"},"errorSelector":"6d4f9990","id":107,"name":"ContractNameInUseAsAlias","nameLocation":"4360:24:3","nodeType":"ErrorDefinition","parameters":{"id":106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":103,"mutability":"mutable","name":"contractName","nameLocation":"4392:12:3","nodeType":"VariableDeclaration","scope":107,"src":"4385:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":102,"name":"string","nodeType":"ElementaryTypeName","src":"4385:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":105,"mutability":"mutable","name":"contractAddress","nameLocation":"4414:15:3","nodeType":"VariableDeclaration","scope":107,"src":"4406:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":104,"name":"address","nodeType":"ElementaryTypeName","src":"4406:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4384:46:3"},"src":"4354:77:3"},{"documentation":{"id":108,"nodeType":"StructuredDocumentation","src":"4437:371:3","text":" @notice The proposed alias has already been registered as a contract.\n @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n @param contractType The registered contract type, provided for documentation purposes\n @param contractName The name of the previously registered contract (and proposed alias)"},"errorSelector":"4466cf0c","id":115,"name":"ContractAliasInUseAsName","nameLocation":"4819:24:3","nodeType":"ErrorDefinition","parameters":{"id":114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":111,"mutability":"mutable","name":"contractType","nameLocation":"4857:12:3","nodeType":"VariableDeclaration","scope":115,"src":"4844:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":110,"nodeType":"UserDefinedTypeName","pathNode":{"id":109,"name":"ContractType","nameLocations":["4844:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"4844:12:3"},"referencedDeclaration":43,"src":"4844:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":113,"mutability":"mutable","name":"contractName","nameLocation":"4878:12:3","nodeType":"VariableDeclaration","scope":115,"src":"4871:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":112,"name":"string","nodeType":"ElementaryTypeName","src":"4871:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4843:48:3"},"src":"4813:79:3"},{"documentation":{"id":116,"nodeType":"StructuredDocumentation","src":"4898:175:3","text":" @notice Thrown when attempting to deregister a contract that was not previously registered.\n @param contractName The name of the unregistered contract"},"errorSelector":"cd3599f9","id":120,"name":"ContractNameNotRegistered","nameLocation":"5084:25:3","nodeType":"ErrorDefinition","parameters":{"id":119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":118,"mutability":"mutable","name":"contractName","nameLocation":"5117:12:3","nodeType":"VariableDeclaration","scope":120,"src":"5110:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":117,"name":"string","nodeType":"ElementaryTypeName","src":"5110:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5109:21:3"},"src":"5078:53:3"},{"documentation":{"id":121,"nodeType":"StructuredDocumentation","src":"5137:329:3","text":" @notice An operation that requires a valid contract specified an unrecognized address.\n @dev A contract being deprecated was never registered, or the target of an alias isn't a previously\n registered contract.\n @param contractAddress The address of the contract that was not registered"},"errorSelector":"f5b5d364","id":125,"name":"ContractAddressNotRegistered","nameLocation":"5477:28:3","nodeType":"ErrorDefinition","parameters":{"id":124,"nodeType":"ParameterList","parameters":[{"constant":false,"id":123,"mutability":"mutable","name":"contractAddress","nameLocation":"5514:15:3","nodeType":"VariableDeclaration","scope":125,"src":"5506:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":122,"name":"address","nodeType":"ElementaryTypeName","src":"5506:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5505:25:3"},"src":"5471:60:3"},{"documentation":{"id":126,"nodeType":"StructuredDocumentation","src":"5537:145:3","text":" @notice Contracts can only be deprecated once.\n @param contractAddress The address of the previously deprecated contract"},"errorSelector":"1f118c35","id":130,"name":"ContractAlreadyDeprecated","nameLocation":"5693:25:3","nodeType":"ErrorDefinition","parameters":{"id":129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":128,"mutability":"mutable","name":"contractAddress","nameLocation":"5727:15:3","nodeType":"VariableDeclaration","scope":130,"src":"5719:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":127,"name":"address","nodeType":"ElementaryTypeName","src":"5719:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5718:25:3"},"src":"5687:57:3"},{"documentation":{"id":131,"nodeType":"StructuredDocumentation","src":"5750:95:3","text":"@notice Cannot register or deprecate contracts, or add an alias targeting the zero address."},"errorSelector":"b4d92c53","id":133,"name":"ZeroContractAddress","nameLocation":"5856:19:3","nodeType":"ErrorDefinition","parameters":{"id":132,"nodeType":"ParameterList","parameters":[],"src":"5875:2:3"},"src":"5850:28:3"},{"documentation":{"id":134,"nodeType":"StructuredDocumentation","src":"5884:86:3","text":"@notice Cannot register (or deregister) a contract with an empty string as a name."},"errorSelector":"830c907e","id":136,"name":"InvalidContractName","nameLocation":"5981:19:3","nodeType":"ErrorDefinition","parameters":{"id":135,"nodeType":"ParameterList","parameters":[],"src":"6000:2:3"},"src":"5975:28:3"},{"documentation":{"id":137,"nodeType":"StructuredDocumentation","src":"6009:51:3","text":"@notice Cannot add an empty string as an alias."},"errorSelector":"907f9fd9","id":139,"name":"InvalidContractAlias","nameLocation":"6071:20:3","nodeType":"ErrorDefinition","parameters":{"id":138,"nodeType":"ParameterList","parameters":[],"src":"6091:2:3"},"src":"6065:29:3"},{"documentation":{"id":140,"nodeType":"StructuredDocumentation","src":"6100:711:3","text":" @notice Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n @dev This is a permissioned function, and does only basic validation of the address (non-zero) and the name\n (not blank). Governance must ensure this is called with valid information. Emits the\n `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or\n already in use.\n @param contractType The type of contract being registered\n @param contractName A text description of the contract, usually the deployed version (e.g., \"v3-pool-weighted\")\n @param contractAddress The address of the contract"},"functionSelector":"e0376ab4","id":150,"implemented":false,"kind":"function","modifiers":[],"name":"registerBalancerContract","nameLocation":"6825:24:3","nodeType":"FunctionDefinition","parameters":{"id":148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":143,"mutability":"mutable","name":"contractType","nameLocation":"6872:12:3","nodeType":"VariableDeclaration","scope":150,"src":"6859:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":142,"nodeType":"UserDefinedTypeName","pathNode":{"id":141,"name":"ContractType","nameLocations":["6859:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"6859:12:3"},"referencedDeclaration":43,"src":"6859:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":145,"mutability":"mutable","name":"contractName","nameLocation":"6908:12:3","nodeType":"VariableDeclaration","scope":150,"src":"6894:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":144,"name":"string","nodeType":"ElementaryTypeName","src":"6894:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":147,"mutability":"mutable","name":"contractAddress","nameLocation":"6938:15:3","nodeType":"VariableDeclaration","scope":150,"src":"6930:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":146,"name":"address","nodeType":"ElementaryTypeName","src":"6930:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6849:110:3"},"returnParameters":{"id":149,"nodeType":"ParameterList","parameters":[],"src":"6968:0:3"},"scope":212,"src":"6816:153:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":151,"nodeType":"StructuredDocumentation","src":"6975:878:3","text":" @notice Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n @dev This is a permissioned function, and makes it possible to correct errors without complex update logic.\n If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete\n it, and register it again with the correct data. It must start with the name, as this is the registry key,\n required for complete deletion.\n Note that there might still be an alias targeting the address being deleted, but accessing it will just return\n inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to\n the correct address.\n @param contractName The name of the contract being deprecated (cannot be an alias)"},"functionSelector":"c7f90793","id":156,"implemented":false,"kind":"function","modifiers":[],"name":"deregisterBalancerContract","nameLocation":"7867:26:3","nodeType":"FunctionDefinition","parameters":{"id":154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":153,"mutability":"mutable","name":"contractName","nameLocation":"7908:12:3","nodeType":"VariableDeclaration","scope":156,"src":"7894:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":152,"name":"string","nodeType":"ElementaryTypeName","src":"7894:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7893:28:3"},"returnParameters":{"id":155,"nodeType":"ParameterList","parameters":[],"src":"7930:0:3"},"scope":212,"src":"7858:73:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":157,"nodeType":"StructuredDocumentation","src":"7937:472:3","text":" @notice Deprecate an official Balancer contract.\n @dev This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the\n address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are\n enforced unique, so either the name or address could be specified in principle.\n @param contractAddress The address of the contract being deprecated"},"functionSelector":"44969a9c","id":162,"implemented":false,"kind":"function","modifiers":[],"name":"deprecateBalancerContract","nameLocation":"8423:25:3","nodeType":"FunctionDefinition","parameters":{"id":160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":159,"mutability":"mutable","name":"contractAddress","nameLocation":"8457:15:3","nodeType":"VariableDeclaration","scope":162,"src":"8449:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":158,"name":"address","nodeType":"ElementaryTypeName","src":"8449:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8448:25:3"},"returnParameters":{"id":161,"nodeType":"ParameterList","parameters":[],"src":"8482:0:3"},"scope":212,"src":"8414:69:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":163,"nodeType":"StructuredDocumentation","src":"8489:650:3","text":" @notice Add an alias for a registered contract.\n @dev This is a permissioned function to support querying by a contract alias. For instance, we might create a\n `WeightedPool` alias meaning the \"latest\" version of the `WeightedPoolFactory`, so that off-chain users don't\n need to track specific versions. Once added, an alias can also be updated to point to a different address\n (e.g., when migrating from the v2 to the v3 weighted pool).\n @param contractAlias An alternate name that can be used to fetch a contract address\n @param existingContract The target address of the contract alias"},"functionSelector":"2967af96","id":170,"implemented":false,"kind":"function","modifiers":[],"name":"addOrUpdateBalancerContractAlias","nameLocation":"9153:32:3","nodeType":"FunctionDefinition","parameters":{"id":168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":165,"mutability":"mutable","name":"contractAlias","nameLocation":"9200:13:3","nodeType":"VariableDeclaration","scope":170,"src":"9186:27:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":164,"name":"string","nodeType":"ElementaryTypeName","src":"9186:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":167,"mutability":"mutable","name":"existingContract","nameLocation":"9223:16:3","nodeType":"VariableDeclaration","scope":170,"src":"9215:24:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":166,"name":"address","nodeType":"ElementaryTypeName","src":"9215:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9185:55:3"},"returnParameters":{"id":169,"nodeType":"ParameterList","parameters":[],"src":"9249:0:3"},"scope":212,"src":"9144:106:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":171,"nodeType":"StructuredDocumentation","src":"9256:316:3","text":" @notice Determine whether an address is an official contract of the specified type.\n @param contractType The type of contract\n @param contractAddress The address of the contract\n @return isActive True if the given address is a registered and active contract of the specified type"},"functionSelector":"ae2733a4","id":181,"implemented":false,"kind":"function","modifiers":[],"name":"isActiveBalancerContract","nameLocation":"9586:24:3","nodeType":"FunctionDefinition","parameters":{"id":177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":174,"mutability":"mutable","name":"contractType","nameLocation":"9633:12:3","nodeType":"VariableDeclaration","scope":181,"src":"9620:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":173,"nodeType":"UserDefinedTypeName","pathNode":{"id":172,"name":"ContractType","nameLocations":["9620:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"9620:12:3"},"referencedDeclaration":43,"src":"9620:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":176,"mutability":"mutable","name":"contractAddress","nameLocation":"9663:15:3","nodeType":"VariableDeclaration","scope":181,"src":"9655:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":175,"name":"address","nodeType":"ElementaryTypeName","src":"9655:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9610:74:3"},"returnParameters":{"id":180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":179,"mutability":"mutable","name":"isActive","nameLocation":"9713:8:3","nodeType":"VariableDeclaration","scope":181,"src":"9708:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":178,"name":"bool","nodeType":"ElementaryTypeName","src":"9708:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9707:15:3"},"scope":212,"src":"9577:146:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":182,"nodeType":"StructuredDocumentation","src":"9729:496:3","text":" @notice Look up a registered contract by type and name.\n @dev This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias\n (e.g., `WeightedPool`).\n @param contractType The type of the contract\n @param contractName The name of the contract\n @return contractAddress The address of the associated contract, if registered, or zero\n @return isActive True if the contract was registered and not deprecated"},"functionSelector":"41d8c0bb","id":194,"implemented":false,"kind":"function","modifiers":[],"name":"getBalancerContract","nameLocation":"10239:19:3","nodeType":"FunctionDefinition","parameters":{"id":188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":185,"mutability":"mutable","name":"contractType","nameLocation":"10281:12:3","nodeType":"VariableDeclaration","scope":194,"src":"10268:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":184,"nodeType":"UserDefinedTypeName","pathNode":{"id":183,"name":"ContractType","nameLocations":["10268:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"10268:12:3"},"referencedDeclaration":43,"src":"10268:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":187,"mutability":"mutable","name":"contractName","nameLocation":"10317:12:3","nodeType":"VariableDeclaration","scope":194,"src":"10303:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":186,"name":"string","nodeType":"ElementaryTypeName","src":"10303:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"10258:77:3"},"returnParameters":{"id":193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":190,"mutability":"mutable","name":"contractAddress","nameLocation":"10367:15:3","nodeType":"VariableDeclaration","scope":194,"src":"10359:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":189,"name":"address","nodeType":"ElementaryTypeName","src":"10359:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":192,"mutability":"mutable","name":"isActive","nameLocation":"10389:8:3","nodeType":"VariableDeclaration","scope":194,"src":"10384:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":191,"name":"bool","nodeType":"ElementaryTypeName","src":"10384:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10358:40:3"},"scope":212,"src":"10230:169:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":195,"nodeType":"StructuredDocumentation","src":"10405:233:3","text":" @notice Look up complete information about a registered contract by address.\n @param contractAddress The address of the associated contract\n @return info ContractInfo struct corresponding to the address"},"functionSelector":"8554c327","id":203,"implemented":false,"kind":"function","modifiers":[],"name":"getBalancerContractInfo","nameLocation":"10652:23:3","nodeType":"FunctionDefinition","parameters":{"id":198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":197,"mutability":"mutable","name":"contractAddress","nameLocation":"10684:15:3","nodeType":"VariableDeclaration","scope":203,"src":"10676:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":196,"name":"address","nodeType":"ElementaryTypeName","src":"10676:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10675:25:3"},"returnParameters":{"id":202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":201,"mutability":"mutable","name":"info","nameLocation":"10744:4:3","nodeType":"VariableDeclaration","scope":203,"src":"10724:24:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":200,"nodeType":"UserDefinedTypeName","pathNode":{"id":199,"name":"ContractInfo","nameLocations":["10724:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"10724:12:3"},"referencedDeclaration":52,"src":"10724:12:3","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"src":"10723:26:3"},"scope":212,"src":"10643:107:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":204,"nodeType":"StructuredDocumentation","src":"10756:92:3","text":"@notice Returns `true` if the given address is an active contract under the ROUTER type."},"functionSelector":"264e97e0","id":211,"implemented":false,"kind":"function","modifiers":[],"name":"isTrustedRouter","nameLocation":"10862:15:3","nodeType":"FunctionDefinition","parameters":{"id":207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":206,"mutability":"mutable","name":"router","nameLocation":"10886:6:3","nodeType":"VariableDeclaration","scope":211,"src":"10878:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":205,"name":"address","nodeType":"ElementaryTypeName","src":"10878:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10877:16:3"},"returnParameters":{"id":210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":209,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":211,"src":"10917:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":208,"name":"bool","nodeType":"ElementaryTypeName","src":"10917:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10916:6:3"},"scope":212,"src":"10853:70:3","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":213,"src":"306:10619:3","usedErrors":[92,100,107,115,120,125,130,133,136,139],"usedEvents":[62,72,77,84]}],"src":"46:10880:3"},"id":3},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol","exportedSymbols":{"IBalancerFeeBurner":[276],"IERC20":[10558],"IProtocolFeeBurner":[948]},"id":277,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":214,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:4"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":216,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":277,"sourceUnit":10559,"src":"72:72:4","symbolAliases":[{"foreign":{"id":215,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"81:6:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"./IProtocolFeeBurner.sol","id":218,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":277,"sourceUnit":949,"src":"145:62:4","symbolAliases":[{"foreign":{"id":217,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"154:18:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":219,"name":"IProtocolFeeBurner","nameLocations":["241:18:4"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"241:18:4"},"id":220,"nodeType":"InheritanceSpecifier","src":"241:18:4"}],"canonicalName":"IBalancerFeeBurner","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":276,"linearizedBaseContracts":[276,948],"name":"IBalancerFeeBurner","nameLocation":"219:18:4","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IBalancerFeeBurner.SwapPathStep","documentation":{"id":221,"nodeType":"StructuredDocumentation","src":"266:152:4","text":" @notice Steps for the burn path.\n @param pool The pool for the swap\n @param tokenOut The `tokenOut` of the swap operation"},"id":227,"members":[{"constant":false,"id":223,"mutability":"mutable","name":"pool","nameLocation":"461:4:4","nodeType":"VariableDeclaration","scope":227,"src":"453:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":222,"name":"address","nodeType":"ElementaryTypeName","src":"453:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":226,"mutability":"mutable","name":"tokenOut","nameLocation":"482:8:4","nodeType":"VariableDeclaration","scope":227,"src":"475:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":225,"nodeType":"UserDefinedTypeName","pathNode":{"id":224,"name":"IERC20","nameLocations":["475:6:4"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"475:6:4"},"referencedDeclaration":10558,"src":"475:6:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"name":"SwapPathStep","nameLocation":"430:12:4","nodeType":"StructDefinition","scope":276,"src":"423:74:4","visibility":"public"},{"canonicalName":"IBalancerFeeBurner.BurnHookParams","documentation":{"id":228,"nodeType":"StructuredDocumentation","src":"503:637:4","text":" @notice Data for the burn hook.\n @param pool The pool the fees came from (only used for documentation in the event)\n @param sender The sender of the call. In most cases, this is the sweeper.\n @param feeToken The token collected from the pool\n @param feeTokenAmount The number of fee tokens collected\n @param targetToken The desired target token (`tokenOut` of the swap)\n @param minAmountOut The minimum `amountOut` for the swap\n @param recipient The recipient of the swap proceeds\n @param deadline Deadline for the burn operation (i.e., swap), after which it will revert"},"id":247,"members":[{"constant":false,"id":230,"mutability":"mutable","name":"pool","nameLocation":"1185:4:4","nodeType":"VariableDeclaration","scope":247,"src":"1177:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":229,"name":"address","nodeType":"ElementaryTypeName","src":"1177:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":232,"mutability":"mutable","name":"sender","nameLocation":"1207:6:4","nodeType":"VariableDeclaration","scope":247,"src":"1199:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":231,"name":"address","nodeType":"ElementaryTypeName","src":"1199:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":235,"mutability":"mutable","name":"feeToken","nameLocation":"1230:8:4","nodeType":"VariableDeclaration","scope":247,"src":"1223:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":234,"nodeType":"UserDefinedTypeName","pathNode":{"id":233,"name":"IERC20","nameLocations":["1223:6:4"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1223:6:4"},"referencedDeclaration":10558,"src":"1223:6:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":237,"mutability":"mutable","name":"feeTokenAmount","nameLocation":"1256:14:4","nodeType":"VariableDeclaration","scope":247,"src":"1248:22:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":236,"name":"uint256","nodeType":"ElementaryTypeName","src":"1248:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":240,"mutability":"mutable","name":"targetToken","nameLocation":"1287:11:4","nodeType":"VariableDeclaration","scope":247,"src":"1280:18:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":239,"nodeType":"UserDefinedTypeName","pathNode":{"id":238,"name":"IERC20","nameLocations":["1280:6:4"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1280:6:4"},"referencedDeclaration":10558,"src":"1280:6:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":242,"mutability":"mutable","name":"minAmountOut","nameLocation":"1316:12:4","nodeType":"VariableDeclaration","scope":247,"src":"1308:20:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":241,"name":"uint256","nodeType":"ElementaryTypeName","src":"1308:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":244,"mutability":"mutable","name":"recipient","nameLocation":"1346:9:4","nodeType":"VariableDeclaration","scope":247,"src":"1338:17:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":243,"name":"address","nodeType":"ElementaryTypeName","src":"1338:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":246,"mutability":"mutable","name":"deadline","nameLocation":"1373:8:4","nodeType":"VariableDeclaration","scope":247,"src":"1365:16:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":245,"name":"uint256","nodeType":"ElementaryTypeName","src":"1365:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"BurnHookParams","nameLocation":"1152:14:4","nodeType":"StructDefinition","scope":276,"src":"1145:243:4","visibility":"public"},{"documentation":{"id":248,"nodeType":"StructuredDocumentation","src":"1394:48:4","text":"@notice Burn path not set for the fee token."},"errorSelector":"f9aa0315","id":250,"name":"BurnPathDoesNotExist","nameLocation":"1453:20:4","nodeType":"ErrorDefinition","parameters":{"id":249,"nodeType":"ParameterList","parameters":[],"src":"1473:2:4"},"src":"1447:29:4"},{"documentation":{"id":251,"nodeType":"StructuredDocumentation","src":"1482:75:4","text":"@notice The last token in the path is not the same as the target token."},"errorSelector":"a682e903","id":253,"name":"TargetTokenOutMismatch","nameLocation":"1568:22:4","nodeType":"ErrorDefinition","parameters":{"id":252,"nodeType":"ParameterList","parameters":[],"src":"1590:2:4"},"src":"1562:31:4"},{"documentation":{"id":254,"nodeType":"StructuredDocumentation","src":"1599:311:4","text":" @notice Set the burn path for a fee token.\n @dev This is the sequence of swaps required to convert the `feeToken` to the `targetToken`.\n This is a permissioned function.\n @param feeToken The fee token to set the path for\n @param steps The steps in the burn path"},"functionSelector":"e3746cb2","id":264,"implemented":false,"kind":"function","modifiers":[],"name":"setBurnPath","nameLocation":"1924:11:4","nodeType":"FunctionDefinition","parameters":{"id":262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":257,"mutability":"mutable","name":"feeToken","nameLocation":"1943:8:4","nodeType":"VariableDeclaration","scope":264,"src":"1936:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":256,"nodeType":"UserDefinedTypeName","pathNode":{"id":255,"name":"IERC20","nameLocations":["1936:6:4"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1936:6:4"},"referencedDeclaration":10558,"src":"1936:6:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":261,"mutability":"mutable","name":"steps","nameLocation":"1977:5:4","nodeType":"VariableDeclaration","scope":264,"src":"1953:29:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"},"typeName":{"baseType":{"id":259,"nodeType":"UserDefinedTypeName","pathNode":{"id":258,"name":"SwapPathStep","nameLocations":["1953:12:4"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"1953:12:4"},"referencedDeclaration":227,"src":"1953:12:4","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"id":260,"nodeType":"ArrayTypeName","src":"1953:14:4","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"}},"visibility":"internal"}],"src":"1935:48:4"},"returnParameters":{"id":263,"nodeType":"ParameterList","parameters":[],"src":"1992:0:4"},"scope":276,"src":"1915:78:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":265,"nodeType":"StructuredDocumentation","src":"1999:166:4","text":" @notice Get the burn path for a fee token.\n @param feeToken The fee token to get the path for\n @return steps The steps in the burn path"},"functionSelector":"c1cfb02a","id":275,"implemented":false,"kind":"function","modifiers":[],"name":"getBurnPath","nameLocation":"2179:11:4","nodeType":"FunctionDefinition","parameters":{"id":269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":268,"mutability":"mutable","name":"feeToken","nameLocation":"2198:8:4","nodeType":"VariableDeclaration","scope":275,"src":"2191:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":267,"nodeType":"UserDefinedTypeName","pathNode":{"id":266,"name":"IERC20","nameLocations":["2191:6:4"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2191:6:4"},"referencedDeclaration":10558,"src":"2191:6:4","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2190:17:4"},"returnParameters":{"id":274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":273,"mutability":"mutable","name":"steps","nameLocation":"2253:5:4","nodeType":"VariableDeclaration","scope":275,"src":"2231:27:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"},"typeName":{"baseType":{"id":271,"nodeType":"UserDefinedTypeName","pathNode":{"id":270,"name":"SwapPathStep","nameLocations":["2231:12:4"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"2231:12:4"},"referencedDeclaration":227,"src":"2231:12:4","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"id":272,"nodeType":"ArrayTypeName","src":"2231:14:4","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"}},"visibility":"internal"}],"src":"2230:29:4"},"scope":276,"src":"2170:90:4","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":277,"src":"209:2053:4","usedErrors":[250,253,924,927],"usedEvents":[914]}],"src":"46:2217:4"},"id":4},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","exportedSymbols":{"IComposableCow":[326],"ICowConditionalOrder":[418]},"id":327,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":278,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:5"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","file":"./ICowConditionalOrder.sol","id":280,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":327,"sourceUnit":419,"src":"72:66:5","symbolAliases":[{"foreign":{"id":279,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"81:20:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IComposableCow","contractDependencies":[],"contractKind":"interface","documentation":{"id":281,"nodeType":"StructuredDocumentation","src":"140:80:5","text":"@notice Utility contract used to validate orders in the `CowSwapFeeBurner`."},"fullyImplemented":false,"id":326,"linearizedBaseContracts":[326],"name":"IComposableCow","nameLocation":"230:14:5","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IComposableCow.Payload","documentation":{"id":282,"nodeType":"StructuredDocumentation","src":"251:388:5","text":" @notice Data passed to ComposableCoW via the payload parameter of isValidSafeSignature.\n @dev See github.com/curvefi/curve-burners/blob/main/contracts/burners/CowSwapBurner.vy#L66:L69.\n @param proof Merkle Tree proof\n @param params Conditional order params\n @param offchainInput Off-chain input (similar to Balancer `userData`); currently unused"},"id":291,"members":[{"constant":false,"id":285,"mutability":"mutable","name":"proof","nameLocation":"679:5:5","nodeType":"VariableDeclaration","scope":291,"src":"669:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":283,"name":"bytes32","nodeType":"ElementaryTypeName","src":"669:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":284,"nodeType":"ArrayTypeName","src":"669:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":288,"mutability":"mutable","name":"params","nameLocation":"738:6:5","nodeType":"VariableDeclaration","scope":291,"src":"694:50:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_storage_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"},"typeName":{"id":287,"nodeType":"UserDefinedTypeName","pathNode":{"id":286,"name":"ICowConditionalOrder.ConditionalOrderParams","nameLocations":["694:20:5","715:22:5"],"nodeType":"IdentifierPath","referencedDeclaration":367,"src":"694:43:5"},"referencedDeclaration":367,"src":"694:43:5","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_storage_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"}},"visibility":"internal"},{"constant":false,"id":290,"mutability":"mutable","name":"offchainInput","nameLocation":"760:13:5","nodeType":"VariableDeclaration","scope":291,"src":"754:19:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":289,"name":"bytes","nodeType":"ElementaryTypeName","src":"754:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"Payload","nameLocation":"651:7:5","nodeType":"StructDefinition","scope":326,"src":"644:136:5","visibility":"public"},{"documentation":{"id":292,"nodeType":"StructuredDocumentation","src":"786:171:5","text":" @notice Construct a CoW order.\n @param params Order parameters\n @param dispatch If true, submit the order (always true in the CowSwapBurner)"},"functionSelector":"6bfae1ca","id":300,"implemented":false,"kind":"function","modifiers":[],"name":"create","nameLocation":"971:6:5","nodeType":"FunctionDefinition","parameters":{"id":298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":295,"mutability":"mutable","name":"params","nameLocation":"1031:6:5","nodeType":"VariableDeclaration","scope":300,"src":"978:59:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_calldata_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"},"typeName":{"id":294,"nodeType":"UserDefinedTypeName","pathNode":{"id":293,"name":"ICowConditionalOrder.ConditionalOrderParams","nameLocations":["978:20:5","999:22:5"],"nodeType":"IdentifierPath","referencedDeclaration":367,"src":"978:43:5"},"referencedDeclaration":367,"src":"978:43:5","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_storage_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"}},"visibility":"internal"},{"constant":false,"id":297,"mutability":"mutable","name":"dispatch","nameLocation":"1044:8:5","nodeType":"VariableDeclaration","scope":300,"src":"1039:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":296,"name":"bool","nodeType":"ElementaryTypeName","src":"1039:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"977:76:5"},"returnParameters":{"id":299,"nodeType":"ParameterList","parameters":[],"src":"1062:0:5"},"scope":326,"src":"962:101:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"f698da25","id":305,"implemented":false,"kind":"function","modifiers":[],"name":"domainSeparator","nameLocation":"1078:15:5","nodeType":"FunctionDefinition","parameters":{"id":301,"nodeType":"ParameterList","parameters":[],"src":"1093:2:5"},"returnParameters":{"id":304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":303,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":305,"src":"1119:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":302,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1119:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1118:9:5"},"scope":326,"src":"1069:59:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":306,"nodeType":"StructuredDocumentation","src":"1134:77:5","text":"@notice Delegated ERC-1271 signature validation with an enhanced context."},"functionSelector":"53f00b14","id":325,"implemented":false,"kind":"function","modifiers":[],"name":"isValidSafeSignature","nameLocation":"1225:20:5","nodeType":"FunctionDefinition","parameters":{"id":321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":308,"mutability":"mutable","name":"safe","nameLocation":"1263:4:5","nodeType":"VariableDeclaration","scope":325,"src":"1255:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":307,"name":"address","nodeType":"ElementaryTypeName","src":"1255:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":310,"mutability":"mutable","name":"sender","nameLocation":"1285:6:5","nodeType":"VariableDeclaration","scope":325,"src":"1277:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":309,"name":"address","nodeType":"ElementaryTypeName","src":"1277:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":312,"mutability":"mutable","name":"_hash","nameLocation":"1309:5:5","nodeType":"VariableDeclaration","scope":325,"src":"1301:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":311,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1301:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":314,"mutability":"mutable","name":"_domainSeparator","nameLocation":"1332:16:5","nodeType":"VariableDeclaration","scope":325,"src":"1324:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":313,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1324:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":316,"mutability":"mutable","name":"typeHash","nameLocation":"1366:8:5","nodeType":"VariableDeclaration","scope":325,"src":"1358:16:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":315,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1358:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":318,"mutability":"mutable","name":"encodeData","nameLocation":"1399:10:5","nodeType":"VariableDeclaration","scope":325,"src":"1384:25:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":317,"name":"bytes","nodeType":"ElementaryTypeName","src":"1384:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":320,"mutability":"mutable","name":"payload","nameLocation":"1434:7:5","nodeType":"VariableDeclaration","scope":325,"src":"1419:22:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":319,"name":"bytes","nodeType":"ElementaryTypeName","src":"1419:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1245:202:5"},"returnParameters":{"id":324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":323,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":325,"src":"1471:6:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":322,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1471:6:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1470:8:5"},"scope":326,"src":"1216:263:5","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":327,"src":"220:1261:5","usedErrors":[],"usedEvents":[]}],"src":"46:1436:5"},"id":5},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","exportedSymbols":{"GPv2Order":[357],"ICowConditionalOrder":[418],"IERC20":[10558]},"id":419,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":328,"literals":["solidity",">=","0.8",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"36:31:6"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":330,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":419,"sourceUnit":10559,"src":"69:72:6","symbolAliases":[{"foreign":{"id":329,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"78:6:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"GPv2Order","id":357,"members":[{"constant":false,"id":333,"mutability":"mutable","name":"sellToken","nameLocation":"274:9:6","nodeType":"VariableDeclaration","scope":357,"src":"267:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":332,"nodeType":"UserDefinedTypeName","pathNode":{"id":331,"name":"IERC20","nameLocations":["267:6:6"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"267:6:6"},"referencedDeclaration":10558,"src":"267:6:6","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":336,"mutability":"mutable","name":"buyToken","nameLocation":"296:8:6","nodeType":"VariableDeclaration","scope":357,"src":"289:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":335,"nodeType":"UserDefinedTypeName","pathNode":{"id":334,"name":"IERC20","nameLocations":["289:6:6"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"289:6:6"},"referencedDeclaration":10558,"src":"289:6:6","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":338,"mutability":"mutable","name":"receiver","nameLocation":"318:8:6","nodeType":"VariableDeclaration","scope":357,"src":"310:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":337,"name":"address","nodeType":"ElementaryTypeName","src":"310:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":340,"mutability":"mutable","name":"sellAmount","nameLocation":"340:10:6","nodeType":"VariableDeclaration","scope":357,"src":"332:18:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":339,"name":"uint256","nodeType":"ElementaryTypeName","src":"332:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":342,"mutability":"mutable","name":"buyAmount","nameLocation":"364:9:6","nodeType":"VariableDeclaration","scope":357,"src":"356:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":341,"name":"uint256","nodeType":"ElementaryTypeName","src":"356:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":344,"mutability":"mutable","name":"validTo","nameLocation":"386:7:6","nodeType":"VariableDeclaration","scope":357,"src":"379:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":343,"name":"uint32","nodeType":"ElementaryTypeName","src":"379:6:6","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":346,"mutability":"mutable","name":"appData","nameLocation":"407:7:6","nodeType":"VariableDeclaration","scope":357,"src":"399:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":345,"name":"bytes32","nodeType":"ElementaryTypeName","src":"399:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":348,"mutability":"mutable","name":"feeAmount","nameLocation":"428:9:6","nodeType":"VariableDeclaration","scope":357,"src":"420:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":347,"name":"uint256","nodeType":"ElementaryTypeName","src":"420:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":350,"mutability":"mutable","name":"kind","nameLocation":"451:4:6","nodeType":"VariableDeclaration","scope":357,"src":"443:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":349,"name":"bytes32","nodeType":"ElementaryTypeName","src":"443:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":352,"mutability":"mutable","name":"partiallyFillable","nameLocation":"466:17:6","nodeType":"VariableDeclaration","scope":357,"src":"461:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":351,"name":"bool","nodeType":"ElementaryTypeName","src":"461:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":354,"mutability":"mutable","name":"sellTokenBalance","nameLocation":"497:16:6","nodeType":"VariableDeclaration","scope":357,"src":"489:24:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":353,"name":"bytes32","nodeType":"ElementaryTypeName","src":"489:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":356,"mutability":"mutable","name":"buyTokenBalance","nameLocation":"527:15:6","nodeType":"VariableDeclaration","scope":357,"src":"519:23:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":355,"name":"bytes32","nodeType":"ElementaryTypeName","src":"519:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"GPv2Order","nameLocation":"251:9:6","nodeType":"StructDefinition","scope":419,"src":"244:301:6","visibility":"public"},{"abstract":false,"baseContracts":[],"canonicalName":"ICowConditionalOrder","contractDependencies":[],"contractKind":"interface","documentation":{"id":358,"nodeType":"StructuredDocumentation","src":"547:131:6","text":" @notice Conditional Order Interface - verify a Cow order.\n @author CoW Protocol Developers + mfw78 "},"fullyImplemented":false,"id":418,"linearizedBaseContracts":[418],"name":"ICowConditionalOrder","nameLocation":"689:20:6","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ICowConditionalOrder.ConditionalOrderParams","documentation":{"id":359,"nodeType":"StructuredDocumentation","src":"716:454:6","text":" @notice This struct is used to uniquely identify a conditional order for an owner.\n @dev H(handler || salt || staticData) **MUST** be unique for an owner.\n @param handler The contract implementing the conditional order logic\n @param salt Allows for multiple conditional orders of the same type and data (currently unused)\n @param staticData Data available to ALL discrete orders created by the conditional order"},"id":367,"members":[{"constant":false,"id":362,"mutability":"mutable","name":"handler","nameLocation":"1236:7:6","nodeType":"VariableDeclaration","scope":367,"src":"1215:28:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ICowConditionalOrder_$418","typeString":"contract ICowConditionalOrder"},"typeName":{"id":361,"nodeType":"UserDefinedTypeName","pathNode":{"id":360,"name":"ICowConditionalOrder","nameLocations":["1215:20:6"],"nodeType":"IdentifierPath","referencedDeclaration":418,"src":"1215:20:6"},"referencedDeclaration":418,"src":"1215:20:6","typeDescriptions":{"typeIdentifier":"t_contract$_ICowConditionalOrder_$418","typeString":"contract ICowConditionalOrder"}},"visibility":"internal"},{"constant":false,"id":364,"mutability":"mutable","name":"salt","nameLocation":"1261:4:6","nodeType":"VariableDeclaration","scope":367,"src":"1253:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":363,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1253:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":366,"mutability":"mutable","name":"staticData","nameLocation":"1281:10:6","nodeType":"VariableDeclaration","scope":367,"src":"1275:16:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":365,"name":"bytes","nodeType":"ElementaryTypeName","src":"1275:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"ConditionalOrderParams","nameLocation":"1182:22:6","nodeType":"StructDefinition","scope":418,"src":"1175:123:6","visibility":"public"},{"documentation":{"id":368,"nodeType":"StructuredDocumentation","src":"1304:191:6","text":" @notice This error is returned by the `getTradeableOrder` function if the order conditions are not met.\n @param reason Text explaining the reason the order is invalid"},"errorSelector":"c8fc2725","id":372,"name":"OrderNotValid","nameLocation":"1506:13:6","nodeType":"ErrorDefinition","parameters":{"id":371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":370,"mutability":"mutable","name":"reason","nameLocation":"1527:6:6","nodeType":"VariableDeclaration","scope":372,"src":"1520:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":369,"name":"string","nodeType":"ElementaryTypeName","src":"1520:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1519:15:6"},"src":"1500:35:6"},{"documentation":{"id":373,"nodeType":"StructuredDocumentation","src":"1619:144:6","text":" @notice Polling should be retried at the next block.\n @param reason Text description of the reason it should be retried"},"errorSelector":"d05f3065","id":377,"name":"PollTryNextBlock","nameLocation":"1774:16:6","nodeType":"ErrorDefinition","parameters":{"id":376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":375,"mutability":"mutable","name":"reason","nameLocation":"1798:6:6","nodeType":"VariableDeclaration","scope":377,"src":"1791:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":374,"name":"string","nodeType":"ElementaryTypeName","src":"1791:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1790:15:6"},"src":"1768:38:6"},{"documentation":{"id":378,"nodeType":"StructuredDocumentation","src":"1812:223:6","text":" @notice Polling should be retried at a specific block number.\n @param blockNumber The block number when polling should resume\n @param reason Text description of the reason it should be retried"},"errorSelector":"1fe8506e","id":384,"name":"PollTryAtBlock","nameLocation":"2046:14:6","nodeType":"ErrorDefinition","parameters":{"id":383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":380,"mutability":"mutable","name":"blockNumber","nameLocation":"2069:11:6","nodeType":"VariableDeclaration","scope":384,"src":"2061:19:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":379,"name":"uint256","nodeType":"ElementaryTypeName","src":"2061:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":382,"mutability":"mutable","name":"reason","nameLocation":"2089:6:6","nodeType":"VariableDeclaration","scope":384,"src":"2082:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":381,"name":"string","nodeType":"ElementaryTypeName","src":"2082:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2060:36:6"},"src":"2040:57:6"},{"documentation":{"id":385,"nodeType":"StructuredDocumentation","src":"2103:233:6","text":" @notice Polling should be retried at a specific epoch (unix timestamp).\n @param timestamp The unix timestamp when polling should resume\n @param reason Text description of the reason it should be retried"},"errorSelector":"7e334637","id":391,"name":"PollTryAtEpoch","nameLocation":"2347:14:6","nodeType":"ErrorDefinition","parameters":{"id":390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":387,"mutability":"mutable","name":"timestamp","nameLocation":"2370:9:6","nodeType":"VariableDeclaration","scope":391,"src":"2362:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":386,"name":"uint256","nodeType":"ElementaryTypeName","src":"2362:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":389,"mutability":"mutable","name":"reason","nameLocation":"2388:6:6","nodeType":"VariableDeclaration","scope":391,"src":"2381:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":388,"name":"string","nodeType":"ElementaryTypeName","src":"2381:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2361:34:6"},"src":"2341:55:6"},{"documentation":{"id":392,"nodeType":"StructuredDocumentation","src":"2402:165:6","text":" @notice The conditional order should not be polled again (i.e., deleted).\n @param reason Text description of the reason it should be deleted"},"errorSelector":"981b64cd","id":396,"name":"PollNever","nameLocation":"2578:9:6","nodeType":"ErrorDefinition","parameters":{"id":395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":394,"mutability":"mutable","name":"reason","nameLocation":"2595:6:6","nodeType":"VariableDeclaration","scope":396,"src":"2588:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":393,"name":"string","nodeType":"ElementaryTypeName","src":"2588:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2587:15:6"},"src":"2572:31:6"},{"documentation":{"id":397,"nodeType":"StructuredDocumentation","src":"2609:1295:6","text":" @notice Verify that a given discrete order is valid.\n @dev Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe.\n **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the\n `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over\n the order verification logic, and to allow a watchtower / user to propose a discrete order without it being\n generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\n @param owner The owner of the order (usually a contract)\n @param sender The `msg.sender` calling `isValidSignature`\n @param _hash `EIP712` order digest\n @param domainSeparator `EIP712` domain separator\n @param ctx See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\n @param staticInput Conditional order type-specific data known at time of creation for all discrete orders\n @param offchainInput Type-specific data NOT known at time of creation for a specific discrete order (or zero)\n @param order The proposed discrete order's `GPv2Order` data struct"},"functionSelector":"14a2a784","id":417,"implemented":false,"kind":"function","modifiers":[],"name":"verify","nameLocation":"3918:6:6","nodeType":"FunctionDefinition","parameters":{"id":415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":399,"mutability":"mutable","name":"owner","nameLocation":"3942:5:6","nodeType":"VariableDeclaration","scope":417,"src":"3934:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":398,"name":"address","nodeType":"ElementaryTypeName","src":"3934:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":401,"mutability":"mutable","name":"sender","nameLocation":"3965:6:6","nodeType":"VariableDeclaration","scope":417,"src":"3957:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":400,"name":"address","nodeType":"ElementaryTypeName","src":"3957:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":403,"mutability":"mutable","name":"_hash","nameLocation":"3989:5:6","nodeType":"VariableDeclaration","scope":417,"src":"3981:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":402,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3981:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":405,"mutability":"mutable","name":"domainSeparator","nameLocation":"4012:15:6","nodeType":"VariableDeclaration","scope":417,"src":"4004:23:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":404,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4004:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":407,"mutability":"mutable","name":"ctx","nameLocation":"4045:3:6","nodeType":"VariableDeclaration","scope":417,"src":"4037:11:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":406,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4037:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":409,"mutability":"mutable","name":"staticInput","nameLocation":"4073:11:6","nodeType":"VariableDeclaration","scope":417,"src":"4058:26:6","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":408,"name":"bytes","nodeType":"ElementaryTypeName","src":"4058:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":411,"mutability":"mutable","name":"offchainInput","nameLocation":"4109:13:6","nodeType":"VariableDeclaration","scope":417,"src":"4094:28:6","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":410,"name":"bytes","nodeType":"ElementaryTypeName","src":"4094:5:6","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":414,"mutability":"mutable","name":"order","nameLocation":"4151:5:6","nodeType":"VariableDeclaration","scope":417,"src":"4132:24:6","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_calldata_ptr","typeString":"struct GPv2Order"},"typeName":{"id":413,"nodeType":"UserDefinedTypeName","pathNode":{"id":412,"name":"GPv2Order","nameLocations":["4132:9:6"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"4132:9:6"},"referencedDeclaration":357,"src":"4132:9:6","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"3924:238:6"},"returnParameters":{"id":416,"nodeType":"ParameterList","parameters":[],"src":"4176:0:6"},"scope":418,"src":"3909:268:6","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":419,"src":"679:3500:6","usedErrors":[372,377,384,391,396],"usedEvents":[]}],"src":"36:4144:6"},"id":6},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol","exportedSymbols":{"GPv2Order":[357],"ICowConditionalOrder":[418],"ICowConditionalOrderGenerator":[454],"IERC165":[12688]},"id":455,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":420,"literals":["solidity",">=","0.8",".0","<","0.9",".0"],"nodeType":"PragmaDirective","src":"36:31:7"},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"@openzeppelin/contracts/utils/introspection/IERC165.sol","id":422,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":455,"sourceUnit":12689,"src":"69:82:7","symbolAliases":[{"foreign":{"id":421,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12688,"src":"78:7:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","file":"./ICowConditionalOrder.sol","id":425,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":455,"sourceUnit":419,"src":"153:77:7","symbolAliases":[{"foreign":{"id":423,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"162:20:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":424,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":357,"src":"184:9:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":427,"name":"IERC165","nameLocations":["369:7:7"],"nodeType":"IdentifierPath","referencedDeclaration":12688,"src":"369:7:7"},"id":428,"nodeType":"InheritanceSpecifier","src":"369:7:7"}],"canonicalName":"ICowConditionalOrderGenerator","contractDependencies":[],"contractKind":"interface","documentation":{"id":426,"nodeType":"StructuredDocumentation","src":"232:93:7","text":" @notice Conditional Order Generator Interface\n @author mfw78 "},"fullyImplemented":false,"id":454,"linearizedBaseContracts":[454,12688],"name":"ICowConditionalOrderGenerator","nameLocation":"336:29:7","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":429,"nodeType":"StructuredDocumentation","src":"383:187:7","text":" @dev Emitted when a new conditional order is created.\n @param owner The address that created the conditional order\n @param params The conditional order data"},"eventSelector":"2cceac5555b0ca45a3744ced542f54b56ad2eb45e521962372eef212a2cbf361","id":436,"name":"ConditionalOrderCreated","nameLocation":"581:23:7","nodeType":"EventDefinition","parameters":{"id":435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":431,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"621:5:7","nodeType":"VariableDeclaration","scope":436,"src":"605:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":430,"name":"address","nodeType":"ElementaryTypeName","src":"605:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":434,"indexed":false,"mutability":"mutable","name":"params","nameLocation":"672:6:7","nodeType":"VariableDeclaration","scope":436,"src":"628:50:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_memory_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"},"typeName":{"id":433,"nodeType":"UserDefinedTypeName","pathNode":{"id":432,"name":"ICowConditionalOrder.ConditionalOrderParams","nameLocations":["628:20:7","649:22:7"],"nodeType":"IdentifierPath","referencedDeclaration":367,"src":"628:43:7"},"referencedDeclaration":367,"src":"628:43:7","typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_storage_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams"}},"visibility":"internal"}],"src":"604:75:7"},"src":"575:105:7"},{"documentation":{"id":437,"nodeType":"StructuredDocumentation","src":"686:721:7","text":" @notice Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\n @dev **MUST** revert if the order conditions are not met.\n @param owner The owner of the order (usually a contract)\n @param sender The `msg.sender` of the parent `isValidSignature` call\n @param ctx The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\n @param staticInput Conditional order type-specific data known at time of creation for all discrete orders\n @param offchainInput Off-chain input (similar to Balancer `userData`); currently unused\n @return order Tradeable order for submission to the CoW Protocol API"},"functionSelector":"b8296fc4","id":453,"implemented":false,"kind":"function","modifiers":[],"name":"getTradeableOrder","nameLocation":"1421:17:7","nodeType":"FunctionDefinition","parameters":{"id":448,"nodeType":"ParameterList","parameters":[{"constant":false,"id":439,"mutability":"mutable","name":"owner","nameLocation":"1456:5:7","nodeType":"VariableDeclaration","scope":453,"src":"1448:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":438,"name":"address","nodeType":"ElementaryTypeName","src":"1448:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":441,"mutability":"mutable","name":"sender","nameLocation":"1479:6:7","nodeType":"VariableDeclaration","scope":453,"src":"1471:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":440,"name":"address","nodeType":"ElementaryTypeName","src":"1471:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":443,"mutability":"mutable","name":"ctx","nameLocation":"1503:3:7","nodeType":"VariableDeclaration","scope":453,"src":"1495:11:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":442,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1495:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":445,"mutability":"mutable","name":"staticInput","nameLocation":"1531:11:7","nodeType":"VariableDeclaration","scope":453,"src":"1516:26:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":444,"name":"bytes","nodeType":"ElementaryTypeName","src":"1516:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":447,"mutability":"mutable","name":"offchainInput","nameLocation":"1567:13:7","nodeType":"VariableDeclaration","scope":453,"src":"1552:28:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":446,"name":"bytes","nodeType":"ElementaryTypeName","src":"1552:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1438:148:7"},"returnParameters":{"id":452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":451,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":453,"src":"1610:16:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":450,"nodeType":"UserDefinedTypeName","pathNode":{"id":449,"name":"GPv2Order","nameLocations":["1610:9:7"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"1610:9:7"},"referencedDeclaration":357,"src":"1610:9:7","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"1609:18:7"},"scope":454,"src":"1412:216:7","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":455,"src":"326:1304:7","usedErrors":[],"usedEvents":[436]}],"src":"36:1595:7"},"id":7},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol","exportedSymbols":{"GPv2Order":[357],"ICowConditionalOrder":[418],"ICowConditionalOrderGenerator":[454],"ICowSwapFeeBurner":[566],"IERC1271":[9568],"IERC20":[10558],"IProtocolFeeBurner":[948]},"id":567,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":456,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:8"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1271.sol","file":"@openzeppelin/contracts/interfaces/IERC1271.sol","id":458,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":567,"sourceUnit":9569,"src":"72:75:8","symbolAliases":[{"foreign":{"id":457,"name":"IERC1271","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9568,"src":"81:8:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":460,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":567,"sourceUnit":10559,"src":"148:72:8","symbolAliases":[{"foreign":{"id":459,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"157:6:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol","file":"./ICowConditionalOrderGenerator.sol","id":462,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":567,"sourceUnit":455,"src":"222:84:8","symbolAliases":[{"foreign":{"id":461,"name":"ICowConditionalOrderGenerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":454,"src":"231:29:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","file":"./ICowConditionalOrder.sol","id":465,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":567,"sourceUnit":419,"src":"307:77:8","symbolAliases":[{"foreign":{"id":463,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"316:20:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":464,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":357,"src":"338:9:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"./IProtocolFeeBurner.sol","id":467,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":567,"sourceUnit":949,"src":"385:62:8","symbolAliases":[{"foreign":{"id":466,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"394:18:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":468,"name":"IERC1271","nameLocations":["480:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":9568,"src":"480:8:8"},"id":469,"nodeType":"InheritanceSpecifier","src":"480:8:8"},{"baseName":{"id":470,"name":"IProtocolFeeBurner","nameLocations":["490:18:8"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"490:18:8"},"id":471,"nodeType":"InheritanceSpecifier","src":"490:18:8"},{"baseName":{"id":472,"name":"ICowConditionalOrder","nameLocations":["510:20:8"],"nodeType":"IdentifierPath","referencedDeclaration":418,"src":"510:20:8"},"id":473,"nodeType":"InheritanceSpecifier","src":"510:20:8"},{"baseName":{"id":474,"name":"ICowConditionalOrderGenerator","nameLocations":["532:29:8"],"nodeType":"IdentifierPath","referencedDeclaration":454,"src":"532:29:8"},"id":475,"nodeType":"InheritanceSpecifier","src":"532:29:8"}],"canonicalName":"ICowSwapFeeBurner","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":566,"linearizedBaseContracts":[566,454,12688,418,948,9568],"name":"ICowSwapFeeBurner","nameLocation":"459:17:8","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ICowSwapFeeBurner.OrderStatus","id":480,"members":[{"id":476,"name":"Nonexistent","nameLocation":"595:11:8","nodeType":"EnumValue","src":"595:11:8"},{"id":477,"name":"Active","nameLocation":"616:6:8","nodeType":"EnumValue","src":"616:6:8"},{"id":478,"name":"Filled","nameLocation":"632:6:8","nodeType":"EnumValue","src":"632:6:8"},{"id":479,"name":"Failed","nameLocation":"648:6:8","nodeType":"EnumValue","src":"648:6:8"}],"name":"OrderStatus","nameLocation":"573:11:8","nodeType":"EnumDefinition","src":"568:92:8"},{"anonymous":false,"documentation":{"id":481,"nodeType":"StructuredDocumentation","src":"666:322:8","text":" @notice An order was retried after failing.\n @param tokenIn The token used to identify the order\n @param exactAmountIn The number of tokens in the order\n @param minAmountOut The minimum number of target tokens required\n @param deadline The deadline for the new order to be filled"},"eventSelector":"1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a","id":492,"name":"OrderRetried","nameLocation":"999:12:8","nodeType":"EventDefinition","parameters":{"id":491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":484,"indexed":false,"mutability":"mutable","name":"tokenIn","nameLocation":"1019:7:8","nodeType":"VariableDeclaration","scope":492,"src":"1012:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":483,"nodeType":"UserDefinedTypeName","pathNode":{"id":482,"name":"IERC20","nameLocations":["1012:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1012:6:8"},"referencedDeclaration":10558,"src":"1012:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":486,"indexed":false,"mutability":"mutable","name":"exactAmountIn","nameLocation":"1036:13:8","nodeType":"VariableDeclaration","scope":492,"src":"1028:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":485,"name":"uint256","nodeType":"ElementaryTypeName","src":"1028:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":488,"indexed":false,"mutability":"mutable","name":"minAmountOut","nameLocation":"1059:12:8","nodeType":"VariableDeclaration","scope":492,"src":"1051:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":487,"name":"uint256","nodeType":"ElementaryTypeName","src":"1051:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":490,"indexed":false,"mutability":"mutable","name":"deadline","nameLocation":"1081:8:8","nodeType":"VariableDeclaration","scope":492,"src":"1073:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":489,"name":"uint256","nodeType":"ElementaryTypeName","src":"1073:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1011:79:8"},"src":"993:98:8"},{"anonymous":false,"documentation":{"id":493,"nodeType":"StructuredDocumentation","src":"1097:268:8","text":" @notice An order was canceled after failure.\n @param tokenIn The token used to identify the order\n @param exactAmountIn The number of tokens in the order\n @param receiver The account that received the tokens from the unfilled order"},"eventSelector":"0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a","id":502,"name":"OrderCanceled","nameLocation":"1376:13:8","nodeType":"EventDefinition","parameters":{"id":501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":496,"indexed":false,"mutability":"mutable","name":"tokenIn","nameLocation":"1397:7:8","nodeType":"VariableDeclaration","scope":502,"src":"1390:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":495,"nodeType":"UserDefinedTypeName","pathNode":{"id":494,"name":"IERC20","nameLocations":["1390:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1390:6:8"},"referencedDeclaration":10558,"src":"1390:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":498,"indexed":false,"mutability":"mutable","name":"exactAmountIn","nameLocation":"1414:13:8","nodeType":"VariableDeclaration","scope":502,"src":"1406:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":497,"name":"uint256","nodeType":"ElementaryTypeName","src":"1406:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":500,"indexed":false,"mutability":"mutable","name":"receiver","nameLocation":"1437:8:8","nodeType":"VariableDeclaration","scope":502,"src":"1429:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":499,"name":"address","nodeType":"ElementaryTypeName","src":"1429:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1389:57:8"},"src":"1370:77:8"},{"documentation":{"id":503,"nodeType":"StructuredDocumentation","src":"1453:130:8","text":" @notice The order parameters were invalid.\n @param reason Text explaining the reason the order is invalid"},"errorSelector":"8d8a6110","id":507,"name":"InvalidOrderParameters","nameLocation":"1594:22:8","nodeType":"ErrorDefinition","parameters":{"id":506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":505,"mutability":"mutable","name":"reason","nameLocation":"1624:6:8","nodeType":"VariableDeclaration","scope":507,"src":"1617:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":504,"name":"string","nodeType":"ElementaryTypeName","src":"1617:6:8","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1616:15:8"},"src":"1588:44:8"},{"documentation":{"id":508,"nodeType":"StructuredDocumentation","src":"1638:237:8","text":" @notice Attempt to revert an order that had not failed.\n @dev `revertOrder` should only be called when the OrderStatus is `Failed`.\n @param actualStatus The status of the order when `revertOrder` was called"},"errorSelector":"d0c1b3cf","id":513,"name":"OrderHasUnexpectedStatus","nameLocation":"1886:24:8","nodeType":"ErrorDefinition","parameters":{"id":512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":511,"mutability":"mutable","name":"actualStatus","nameLocation":"1923:12:8","nodeType":"VariableDeclaration","scope":513,"src":"1911:24:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":510,"nodeType":"UserDefinedTypeName","pathNode":{"id":509,"name":"OrderStatus","nameLocations":["1911:11:8"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"1911:11:8"},"referencedDeclaration":480,"src":"1911:11:8","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"}],"src":"1910:26:8"},"src":"1880:57:8"},{"documentation":{"id":514,"nodeType":"StructuredDocumentation","src":"1943:91:8","text":"@notice Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow."},"errorSelector":"32798566","id":516,"name":"InterfaceIsSignatureVerifierMuxer","nameLocation":"2045:33:8","nodeType":"ErrorDefinition","parameters":{"id":515,"nodeType":"ParameterList","parameters":[],"src":"2078:2:8"},"src":"2039:42:8"},{"documentation":{"id":517,"nodeType":"StructuredDocumentation","src":"2087:178:8","text":" @notice Get the order at the sell token.\n @param tokenIn The token used to identify the order\n @return orderData The order data for the given token"},"functionSelector":"6eba2b13","id":526,"implemented":false,"kind":"function","modifiers":[],"name":"getOrder","nameLocation":"2279:8:8","nodeType":"FunctionDefinition","parameters":{"id":521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":520,"mutability":"mutable","name":"tokenIn","nameLocation":"2295:7:8","nodeType":"VariableDeclaration","scope":526,"src":"2288:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":519,"nodeType":"UserDefinedTypeName","pathNode":{"id":518,"name":"IERC20","nameLocations":["2288:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2288:6:8"},"referencedDeclaration":10558,"src":"2288:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2287:16:8"},"returnParameters":{"id":525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":524,"mutability":"mutable","name":"orderData","nameLocation":"2344:9:8","nodeType":"VariableDeclaration","scope":526,"src":"2327:26:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":523,"nodeType":"UserDefinedTypeName","pathNode":{"id":522,"name":"GPv2Order","nameLocations":["2327:9:8"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"2327:9:8"},"referencedDeclaration":357,"src":"2327:9:8","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"2326:28:8"},"scope":566,"src":"2270:85:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":527,"nodeType":"StructuredDocumentation","src":"2361:203:8","text":" @notice Get the status of the order at the sell token.\n @param tokenIn The token used to identify the order\n @return orderStatus The status of the order for the given token"},"functionSelector":"6f9d75cd","id":536,"implemented":false,"kind":"function","modifiers":[],"name":"getOrderStatus","nameLocation":"2578:14:8","nodeType":"FunctionDefinition","parameters":{"id":531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":530,"mutability":"mutable","name":"tokenIn","nameLocation":"2600:7:8","nodeType":"VariableDeclaration","scope":536,"src":"2593:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":529,"nodeType":"UserDefinedTypeName","pathNode":{"id":528,"name":"IERC20","nameLocations":["2593:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2593:6:8"},"referencedDeclaration":10558,"src":"2593:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2592:16:8"},"returnParameters":{"id":535,"nodeType":"ParameterList","parameters":[{"constant":false,"id":534,"mutability":"mutable","name":"orderStatus","nameLocation":"2644:11:8","nodeType":"VariableDeclaration","scope":536,"src":"2632:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":533,"nodeType":"UserDefinedTypeName","pathNode":{"id":532,"name":"OrderStatus","nameLocations":["2632:11:8"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"2632:11:8"},"referencedDeclaration":480,"src":"2632:11:8","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"}],"src":"2631:25:8"},"scope":566,"src":"2569:88:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":537,"nodeType":"StructuredDocumentation","src":"2663:291:8","text":" @notice Retry an order that has not been filled yet and expired.\n @param tokenIn The token used to identify the order\n @param minAmountOut The minimum number of target tokens to receive (tokenOut)\n @param deadline The deadline for the order to be filled."},"functionSelector":"d83b06a4","id":547,"implemented":false,"kind":"function","modifiers":[],"name":"retryOrder","nameLocation":"2968:10:8","nodeType":"FunctionDefinition","parameters":{"id":545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":540,"mutability":"mutable","name":"tokenIn","nameLocation":"2986:7:8","nodeType":"VariableDeclaration","scope":547,"src":"2979:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":539,"nodeType":"UserDefinedTypeName","pathNode":{"id":538,"name":"IERC20","nameLocations":["2979:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2979:6:8"},"referencedDeclaration":10558,"src":"2979:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":542,"mutability":"mutable","name":"minAmountOut","nameLocation":"3003:12:8","nodeType":"VariableDeclaration","scope":547,"src":"2995:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":541,"name":"uint256","nodeType":"ElementaryTypeName","src":"2995:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":544,"mutability":"mutable","name":"deadline","nameLocation":"3025:8:8","nodeType":"VariableDeclaration","scope":547,"src":"3017:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":543,"name":"uint256","nodeType":"ElementaryTypeName","src":"3017:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2978:56:8"},"returnParameters":{"id":546,"nodeType":"ParameterList","parameters":[],"src":"3043:0:8"},"scope":566,"src":"2959:85:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":548,"nodeType":"StructuredDocumentation","src":"3050:274:8","text":" @notice Return tokens from an order that has failed.\n @dev Canceling an order prevents it from being retried.\n @param tokenIn The token used to identify the order\n @param receiver The address to receive the tokens from the unfilled order"},"functionSelector":"60e092c6","id":556,"implemented":false,"kind":"function","modifiers":[],"name":"cancelOrder","nameLocation":"3338:11:8","nodeType":"FunctionDefinition","parameters":{"id":554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":551,"mutability":"mutable","name":"tokenIn","nameLocation":"3357:7:8","nodeType":"VariableDeclaration","scope":556,"src":"3350:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":550,"nodeType":"UserDefinedTypeName","pathNode":{"id":549,"name":"IERC20","nameLocations":["3350:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"3350:6:8"},"referencedDeclaration":10558,"src":"3350:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":553,"mutability":"mutable","name":"receiver","nameLocation":"3374:8:8","nodeType":"VariableDeclaration","scope":556,"src":"3366:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":552,"name":"address","nodeType":"ElementaryTypeName","src":"3366:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3349:34:8"},"returnParameters":{"id":555,"nodeType":"ParameterList","parameters":[],"src":"3392:0:8"},"scope":566,"src":"3329:64:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":557,"nodeType":"StructuredDocumentation","src":"3399:282:8","text":" @notice Emergency return tokens from an order regardless of status.\n @dev Canceling an order prevents it from being retried.\n @param tokenIn The token used to identify the order\n @param receiver The address to receive the from the unfilled order"},"functionSelector":"68bce712","id":565,"implemented":false,"kind":"function","modifiers":[],"name":"emergencyCancelOrder","nameLocation":"3695:20:8","nodeType":"FunctionDefinition","parameters":{"id":563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":560,"mutability":"mutable","name":"tokenIn","nameLocation":"3723:7:8","nodeType":"VariableDeclaration","scope":565,"src":"3716:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":559,"nodeType":"UserDefinedTypeName","pathNode":{"id":558,"name":"IERC20","nameLocations":["3716:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"3716:6:8"},"referencedDeclaration":10558,"src":"3716:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":562,"mutability":"mutable","name":"receiver","nameLocation":"3740:8:8","nodeType":"VariableDeclaration","scope":565,"src":"3732:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":561,"name":"address","nodeType":"ElementaryTypeName","src":"3732:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3715:34:8"},"returnParameters":{"id":564,"nodeType":"ParameterList","parameters":[],"src":"3758:0:8"},"scope":566,"src":"3686:73:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":567,"src":"449:3312:8","usedErrors":[372,377,384,391,396,507,513,516,924,927],"usedEvents":[436,492,502,914]}],"src":"46:3716:8"},"id":8},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol","exportedSymbols":{"IHyperEVMRateProvider":[587]},"id":588,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":568,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:9"},{"abstract":false,"baseContracts":[],"canonicalName":"IHyperEVMRateProvider","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":587,"linearizedBaseContracts":[587],"name":"IHyperEVMRateProvider","nameLocation":"82:21:9","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":569,"nodeType":"StructuredDocumentation","src":"110:159:9","text":" @notice The index of the token on the Hyperliquid public API.\n @return tokenIndex The index of the token on the Hyperliquid public API"},"functionSelector":"295d3ee8","id":574,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenIndex","nameLocation":"283:13:9","nodeType":"FunctionDefinition","parameters":{"id":570,"nodeType":"ParameterList","parameters":[],"src":"296:2:9"},"returnParameters":{"id":573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":572,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":574,"src":"322:6:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":571,"name":"uint32","nodeType":"ElementaryTypeName","src":"322:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"321:8:9"},"scope":587,"src":"274:56:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":575,"nodeType":"StructuredDocumentation","src":"336:319:9","text":" @notice The index of the pair to fetch the spot price, according to the Hyperliquid public API.\n @dev Hypercore has an index that identifies a pair of tokens to fetch the spot price.\n @return pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API"},"functionSelector":"81bfa5d1","id":580,"implemented":false,"kind":"function","modifiers":[],"name":"getPairIndex","nameLocation":"669:12:9","nodeType":"FunctionDefinition","parameters":{"id":576,"nodeType":"ParameterList","parameters":[],"src":"681:2:9"},"returnParameters":{"id":579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":578,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":580,"src":"707:6:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":577,"name":"uint32","nodeType":"ElementaryTypeName","src":"707:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"706:8:9"},"scope":587,"src":"660:55:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":581,"nodeType":"StructuredDocumentation","src":"721:346:9","text":" @notice The spot price multiplier.\n @dev Hypercore returns the spot price with a different number of decimals for each token. So, to make this rate\n provider compatible with the vault, we need to scale the spot price to 18 decimals using this multiplier.\n @return spotPriceMultiplier The spot price multiplier"},"functionSelector":"a747d56f","id":586,"implemented":false,"kind":"function","modifiers":[],"name":"getSpotPriceMultiplier","nameLocation":"1081:22:9","nodeType":"FunctionDefinition","parameters":{"id":582,"nodeType":"ParameterList","parameters":[],"src":"1103:2:9"},"returnParameters":{"id":585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":584,"mutability":"mutable","name":"spotPriceMultiplier","nameLocation":"1137:19:9","nodeType":"VariableDeclaration","scope":586,"src":"1129:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":583,"name":"uint256","nodeType":"ElementaryTypeName","src":"1129:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1128:29:9"},"scope":587,"src":"1072:86:9","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":588,"src":"72:1088:9","usedErrors":[],"usedEvents":[]}],"src":"46:1115:9"},"id":9},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol","exportedSymbols":{"IHyperEVMRateProvider":[587],"IHyperEVMRateProviderFactory":[664]},"id":665,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":589,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:10"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol","file":"./IHyperEVMRateProvider.sol","id":591,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":665,"sourceUnit":588,"src":"72:68:10","symbolAliases":[{"foreign":{"id":590,"name":"IHyperEVMRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":587,"src":"81:21:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IHyperEVMRateProviderFactory","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":664,"linearizedBaseContracts":[664],"name":"IHyperEVMRateProviderFactory","nameLocation":"152:28:10","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":592,"nodeType":"StructuredDocumentation","src":"187:331:10","text":" @notice A new HyperEVM Rate Provider was created.\n @param tokenIndex The index of the base asset on the Hyperliquid public API\n @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n @param rateProvider The address of the deployed rate provider"},"eventSelector":"d2dc19a986df7300887ed27436ca60160b58dcbcc7a657427d35cbf60154ba02","id":600,"name":"RateProviderCreated","nameLocation":"529:19:10","nodeType":"EventDefinition","parameters":{"id":599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":594,"indexed":true,"mutability":"mutable","name":"tokenIndex","nameLocation":"565:10:10","nodeType":"VariableDeclaration","scope":600,"src":"549:26:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":593,"name":"uint256","nodeType":"ElementaryTypeName","src":"549:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":596,"indexed":true,"mutability":"mutable","name":"pairIndex","nameLocation":"593:9:10","nodeType":"VariableDeclaration","scope":600,"src":"577:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":595,"name":"uint256","nodeType":"ElementaryTypeName","src":"577:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":598,"indexed":true,"mutability":"mutable","name":"rateProvider","nameLocation":"620:12:10","nodeType":"VariableDeclaration","scope":600,"src":"604:28:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":597,"name":"address","nodeType":"ElementaryTypeName","src":"604:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"548:85:10"},"src":"523:111:10"},{"anonymous":false,"documentation":{"id":601,"nodeType":"StructuredDocumentation","src":"640:49:10","text":"@notice Emitted when the factory is disabled."},"eventSelector":"1e8641758c70961d246979e3c073388b65a37bad9cc604ec5511e7200e7d144b","id":603,"name":"RateProviderFactoryDisabled","nameLocation":"700:27:10","nodeType":"EventDefinition","parameters":{"id":602,"nodeType":"ParameterList","parameters":[],"src":"727:2:10"},"src":"694:36:10"},{"documentation":{"id":604,"nodeType":"StructuredDocumentation","src":"736:350:10","text":" @notice A rate provider already exists for the given token and pair.\n @param tokenIndex The index of the base asset on the Hyperliquid public API\n @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n @param rateProvider The address of the deployed rate provider"},"errorSelector":"f4c64ee1","id":612,"name":"RateProviderAlreadyExists","nameLocation":"1097:25:10","nodeType":"ErrorDefinition","parameters":{"id":611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":606,"mutability":"mutable","name":"tokenIndex","nameLocation":"1130:10:10","nodeType":"VariableDeclaration","scope":612,"src":"1123:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":605,"name":"uint32","nodeType":"ElementaryTypeName","src":"1123:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":608,"mutability":"mutable","name":"pairIndex","nameLocation":"1149:9:10","nodeType":"VariableDeclaration","scope":612,"src":"1142:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":607,"name":"uint32","nodeType":"ElementaryTypeName","src":"1142:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":610,"mutability":"mutable","name":"rateProvider","nameLocation":"1168:12:10","nodeType":"VariableDeclaration","scope":612,"src":"1160:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":609,"name":"address","nodeType":"ElementaryTypeName","src":"1160:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1122:59:10"},"src":"1091:91:10"},{"documentation":{"id":613,"nodeType":"StructuredDocumentation","src":"1188:282:10","text":" @notice The rate provider was not found for the given token and pair.\n @param tokenIndex The index of the base asset on the Hyperliquid public API\n @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API"},"errorSelector":"dc120e77","id":619,"name":"RateProviderNotFound","nameLocation":"1481:20:10","nodeType":"ErrorDefinition","parameters":{"id":618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":615,"mutability":"mutable","name":"tokenIndex","nameLocation":"1509:10:10","nodeType":"VariableDeclaration","scope":619,"src":"1502:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":614,"name":"uint32","nodeType":"ElementaryTypeName","src":"1502:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":617,"mutability":"mutable","name":"pairIndex","nameLocation":"1528:9:10","nodeType":"VariableDeclaration","scope":619,"src":"1521:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":616,"name":"uint32","nodeType":"ElementaryTypeName","src":"1521:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1501:37:10"},"src":"1475:64:10"},{"documentation":{"id":620,"nodeType":"StructuredDocumentation","src":"1545:36:10","text":"@notice The factory is disabled."},"errorSelector":"42fb89b8","id":622,"name":"RateProviderFactoryIsDisabled","nameLocation":"1592:29:10","nodeType":"ErrorDefinition","parameters":{"id":621,"nodeType":"ParameterList","parameters":[],"src":"1621:2:10"},"src":"1586:38:10"},{"documentation":{"id":623,"nodeType":"StructuredDocumentation","src":"1630:151:10","text":" @notice Returns a number representing the rate provider version.\n @return rateProviderVersion The rate provider version number"},"functionSelector":"381c7a4f","id":628,"implemented":false,"kind":"function","modifiers":[],"name":"getRateProviderVersion","nameLocation":"1795:22:10","nodeType":"FunctionDefinition","parameters":{"id":624,"nodeType":"ParameterList","parameters":[],"src":"1817:2:10"},"returnParameters":{"id":627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":626,"mutability":"mutable","name":"rateProviderVersion","nameLocation":"1851:19:10","nodeType":"VariableDeclaration","scope":628,"src":"1843:27:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":625,"name":"uint256","nodeType":"ElementaryTypeName","src":"1843:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1842:29:10"},"scope":664,"src":"1786:86:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":629,"nodeType":"StructuredDocumentation","src":"1878:357:10","text":" @notice Creates a new HyperEVM Rate Provider for the given token and pair.\n @param tokenIndex The index of the base asset on the Hyperliquid public API\n @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n @return rateProvider The address of the deployed rate provider"},"functionSelector":"568acb79","id":639,"implemented":false,"kind":"function","modifiers":[],"name":"create","nameLocation":"2249:6:10","nodeType":"FunctionDefinition","parameters":{"id":634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":631,"mutability":"mutable","name":"tokenIndex","nameLocation":"2263:10:10","nodeType":"VariableDeclaration","scope":639,"src":"2256:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":630,"name":"uint32","nodeType":"ElementaryTypeName","src":"2256:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":633,"mutability":"mutable","name":"pairIndex","nameLocation":"2282:9:10","nodeType":"VariableDeclaration","scope":639,"src":"2275:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":632,"name":"uint32","nodeType":"ElementaryTypeName","src":"2275:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2255:37:10"},"returnParameters":{"id":638,"nodeType":"ParameterList","parameters":[{"constant":false,"id":637,"mutability":"mutable","name":"rateProvider","nameLocation":"2333:12:10","nodeType":"VariableDeclaration","scope":639,"src":"2311:34:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"},"typeName":{"id":636,"nodeType":"UserDefinedTypeName","pathNode":{"id":635,"name":"IHyperEVMRateProvider","nameLocations":["2311:21:10"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"2311:21:10"},"referencedDeclaration":587,"src":"2311:21:10","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"visibility":"internal"}],"src":"2310:36:10"},"scope":664,"src":"2240:107:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":640,"nodeType":"StructuredDocumentation","src":"2353:448:10","text":" @notice Gets the rate provider for the given token and pair.\n @dev Reverts if the rate provider was not found for the given token and pair.\n @param tokenIndex The index of the base asset on the Hyperliquid public API\n @param pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\n @return rateProvider The address of the rate provider for the given token and pair"},"functionSelector":"99b8113f","id":650,"implemented":false,"kind":"function","modifiers":[],"name":"getRateProvider","nameLocation":"2815:15:10","nodeType":"FunctionDefinition","parameters":{"id":645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":642,"mutability":"mutable","name":"tokenIndex","nameLocation":"2847:10:10","nodeType":"VariableDeclaration","scope":650,"src":"2840:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":641,"name":"uint32","nodeType":"ElementaryTypeName","src":"2840:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":644,"mutability":"mutable","name":"pairIndex","nameLocation":"2874:9:10","nodeType":"VariableDeclaration","scope":650,"src":"2867:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":643,"name":"uint32","nodeType":"ElementaryTypeName","src":"2867:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2830:59:10"},"returnParameters":{"id":649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":648,"mutability":"mutable","name":"rateProvider","nameLocation":"2935:12:10","nodeType":"VariableDeclaration","scope":650,"src":"2913:34:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"},"typeName":{"id":647,"nodeType":"UserDefinedTypeName","pathNode":{"id":646,"name":"IHyperEVMRateProvider","nameLocations":["2913:21:10"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"2913:21:10"},"referencedDeclaration":587,"src":"2913:21:10","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"visibility":"internal"}],"src":"2912:36:10"},"scope":664,"src":"2806:143:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":651,"nodeType":"StructuredDocumentation","src":"2955:242:10","text":" @notice Checks whether the given rate provider was created by this factory.\n @param rateProvider The rate provider to check\n @return success True if the rate provider was created by this factory; false otherwise"},"functionSelector":"19912f71","id":659,"implemented":false,"kind":"function","modifiers":[],"name":"isRateProviderFromFactory","nameLocation":"3211:25:10","nodeType":"FunctionDefinition","parameters":{"id":655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":654,"mutability":"mutable","name":"rateProvider","nameLocation":"3259:12:10","nodeType":"VariableDeclaration","scope":659,"src":"3237:34:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"},"typeName":{"id":653,"nodeType":"UserDefinedTypeName","pathNode":{"id":652,"name":"IHyperEVMRateProvider","nameLocations":["3237:21:10"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"3237:21:10"},"referencedDeclaration":587,"src":"3237:21:10","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"visibility":"internal"}],"src":"3236:36:10"},"returnParameters":{"id":658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":657,"mutability":"mutable","name":"success","nameLocation":"3301:7:10","nodeType":"VariableDeclaration","scope":659,"src":"3296:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":656,"name":"bool","nodeType":"ElementaryTypeName","src":"3296:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3295:14:10"},"scope":664,"src":"3202:108:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":660,"nodeType":"StructuredDocumentation","src":"3316:264:10","text":" @notice Disables the rate provider factory.\n @dev A disabled rate provider factory cannot create new rate providers and cannot be re-enabled. However,\n already created rate providers are still usable. This is a permissioned function."},"functionSelector":"2f2770db","id":663,"implemented":false,"kind":"function","modifiers":[],"name":"disable","nameLocation":"3594:7:10","nodeType":"FunctionDefinition","parameters":{"id":661,"nodeType":"ParameterList","parameters":[],"src":"3601:2:10"},"returnParameters":{"id":662,"nodeType":"ParameterList","parameters":[],"src":"3612:0:10"},"scope":664,"src":"3585:28:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":665,"src":"142:3473:10","usedErrors":[612,619,622],"usedEvents":[600,603]}],"src":"46:3570:10"},"id":10},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol","exportedSymbols":{"IPoolHelperCommon":[865]},"id":866,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":666,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:11"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolHelperCommon","contractDependencies":[],"contractKind":"interface","documentation":{"id":667,"nodeType":"StructuredDocumentation","src":"72:85:11","text":"@notice Common interface for helper functions that operate on a subset of pools."},"fullyImplemented":false,"id":865,"linearizedBaseContracts":[865],"name":"IPoolHelperCommon","nameLocation":"167:17:11","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":668,"nodeType":"StructuredDocumentation","src":"191:306:11","text":" @notice The owner created a new pool set.\n @dev Pools are organized into separate sets, controlled by a manager, which can be changed independently.\n @param poolSetId Id of the set with which the pool is associated\n @param initialManager Address of the pool set manager"},"eventSelector":"dc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be2","id":674,"name":"PoolSetCreated","nameLocation":"508:14:11","nodeType":"EventDefinition","parameters":{"id":673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":670,"indexed":true,"mutability":"mutable","name":"poolSetId","nameLocation":"539:9:11","nodeType":"VariableDeclaration","scope":674,"src":"523:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":669,"name":"uint256","nodeType":"ElementaryTypeName","src":"523:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":672,"indexed":true,"mutability":"mutable","name":"initialManager","nameLocation":"566:14:11","nodeType":"VariableDeclaration","scope":674,"src":"550:30:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":671,"name":"address","nodeType":"ElementaryTypeName","src":"550:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"522:59:11"},"src":"502:80:11"},{"anonymous":false,"documentation":{"id":675,"nodeType":"StructuredDocumentation","src":"588:190:11","text":" @notice The owner destroyed a pool set.\n @param poolSetId Id of the set with which the pool is associated\n @param manager The address of the set's last manager"},"eventSelector":"79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c0","id":681,"name":"PoolSetDestroyed","nameLocation":"789:16:11","nodeType":"EventDefinition","parameters":{"id":680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":677,"indexed":true,"mutability":"mutable","name":"poolSetId","nameLocation":"822:9:11","nodeType":"VariableDeclaration","scope":681,"src":"806:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":676,"name":"uint256","nodeType":"ElementaryTypeName","src":"806:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":679,"indexed":true,"mutability":"mutable","name":"manager","nameLocation":"849:7:11","nodeType":"VariableDeclaration","scope":681,"src":"833:23:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":678,"name":"address","nodeType":"ElementaryTypeName","src":"833:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"805:52:11"},"src":"783:75:11"},{"anonymous":false,"documentation":{"id":682,"nodeType":"StructuredDocumentation","src":"864:193:11","text":" @notice The owner added a pool to the given set.\n @param pool Address of the pool that was added\n @param poolSetId Id of the set with which the pool is associated"},"eventSelector":"5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b69","id":688,"name":"PoolAddedToSet","nameLocation":"1068:14:11","nodeType":"EventDefinition","parameters":{"id":687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":684,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1099:4:11","nodeType":"VariableDeclaration","scope":688,"src":"1083:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":683,"name":"address","nodeType":"ElementaryTypeName","src":"1083:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":686,"indexed":true,"mutability":"mutable","name":"poolSetId","nameLocation":"1121:9:11","nodeType":"VariableDeclaration","scope":688,"src":"1105:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":685,"name":"uint256","nodeType":"ElementaryTypeName","src":"1105:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1082:49:11"},"src":"1062:70:11"},{"anonymous":false,"documentation":{"id":689,"nodeType":"StructuredDocumentation","src":"1138:199:11","text":" @notice The owner removed a pool from the given set.\n @param poolSetId Id of the set with which the pool is associated\n @param pool Address of the pool that was removed"},"eventSelector":"e632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e","id":695,"name":"PoolRemovedFromSet","nameLocation":"1348:18:11","nodeType":"EventDefinition","parameters":{"id":694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":691,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1383:4:11","nodeType":"VariableDeclaration","scope":695,"src":"1367:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":690,"name":"address","nodeType":"ElementaryTypeName","src":"1367:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":693,"indexed":true,"mutability":"mutable","name":"poolSetId","nameLocation":"1405:9:11","nodeType":"VariableDeclaration","scope":695,"src":"1389:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":692,"name":"uint256","nodeType":"ElementaryTypeName","src":"1389:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1366:49:11"},"src":"1342:74:11"},{"anonymous":false,"documentation":{"id":696,"nodeType":"StructuredDocumentation","src":"1422:391:11","text":" @notice The current manager of a pool set transferred ownership to a new address.\n @dev Managers can only control one pool set. Transfers to existing managers of other sets will revert.\n @param poolSetId Id of the set with which the pool is associated\n @param oldManager Address of the previous manager\n @param newManager Address of the new manager"},"eventSelector":"8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d797205","id":704,"name":"PoolSetOwnershipTransferred","nameLocation":"1824:27:11","nodeType":"EventDefinition","parameters":{"id":703,"nodeType":"ParameterList","parameters":[{"constant":false,"id":698,"indexed":true,"mutability":"mutable","name":"poolSetId","nameLocation":"1877:9:11","nodeType":"VariableDeclaration","scope":704,"src":"1861:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":697,"name":"uint256","nodeType":"ElementaryTypeName","src":"1861:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":700,"indexed":true,"mutability":"mutable","name":"oldManager","nameLocation":"1912:10:11","nodeType":"VariableDeclaration","scope":704,"src":"1896:26:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":699,"name":"address","nodeType":"ElementaryTypeName","src":"1896:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":702,"indexed":true,"mutability":"mutable","name":"newManager","nameLocation":"1948:10:11","nodeType":"VariableDeclaration","scope":704,"src":"1932:26:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":701,"name":"address","nodeType":"ElementaryTypeName","src":"1932:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1851:113:11"},"src":"1818:147:11"},{"documentation":{"id":705,"nodeType":"StructuredDocumentation","src":"1971:190:11","text":" @notice Cannot add a pool that is already there.\n @param pool Address of the pool being added\n @param poolSetId Id of the set with which the pool is associated"},"errorSelector":"5a17aa8d","id":711,"name":"PoolAlreadyInSet","nameLocation":"2172:16:11","nodeType":"ErrorDefinition","parameters":{"id":710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":707,"mutability":"mutable","name":"pool","nameLocation":"2197:4:11","nodeType":"VariableDeclaration","scope":711,"src":"2189:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":706,"name":"address","nodeType":"ElementaryTypeName","src":"2189:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":709,"mutability":"mutable","name":"poolSetId","nameLocation":"2211:9:11","nodeType":"VariableDeclaration","scope":711,"src":"2203:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":708,"name":"uint256","nodeType":"ElementaryTypeName","src":"2203:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2188:33:11"},"src":"2166:56:11"},{"documentation":{"id":712,"nodeType":"StructuredDocumentation","src":"2228:192:11","text":" @notice Cannot remove a pool that was not added.\n @param pool Address of the pool being removed\n @param poolSetId Id of the set with which the pool is associated"},"errorSelector":"80145d72","id":718,"name":"PoolNotInSet","nameLocation":"2431:12:11","nodeType":"ErrorDefinition","parameters":{"id":717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":714,"mutability":"mutable","name":"pool","nameLocation":"2452:4:11","nodeType":"VariableDeclaration","scope":718,"src":"2444:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":713,"name":"address","nodeType":"ElementaryTypeName","src":"2444:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":716,"mutability":"mutable","name":"poolSetId","nameLocation":"2466:9:11","nodeType":"VariableDeclaration","scope":718,"src":"2458:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":715,"name":"uint256","nodeType":"ElementaryTypeName","src":"2458:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2443:33:11"},"src":"2425:52:11"},{"documentation":{"id":719,"nodeType":"StructuredDocumentation","src":"2483:223:11","text":" @notice Pool set id associated with an operation is invalid.\n @dev This can mean the value is invalid, or it was never created, or it was destroyed.\n @param poolSetId The id of the invalid set"},"errorSelector":"98592ddb","id":723,"name":"InvalidPoolSetId","nameLocation":"2717:16:11","nodeType":"ErrorDefinition","parameters":{"id":722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":721,"mutability":"mutable","name":"poolSetId","nameLocation":"2742:9:11","nodeType":"VariableDeclaration","scope":723,"src":"2734:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":720,"name":"uint256","nodeType":"ElementaryTypeName","src":"2734:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2733:19:11"},"src":"2711:42:11"},{"documentation":{"id":724,"nodeType":"StructuredDocumentation","src":"2759:61:11","text":"@notice The initial manager of a pool set cannot be zero."},"errorSelector":"2de5256e","id":726,"name":"InvalidPoolSetManager","nameLocation":"2831:21:11","nodeType":"ErrorDefinition","parameters":{"id":725,"nodeType":"ParameterList","parameters":[],"src":"2852:2:11"},"src":"2825:30:11"},{"documentation":{"id":727,"nodeType":"StructuredDocumentation","src":"2861:294:11","text":" @notice Pool set managers can only manage a single pool set.\n @dev Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\n @param poolSetManager Address of the manager that is already assigned to another pool set id"},"errorSelector":"2c35aa96","id":731,"name":"PoolSetManagerNotUnique","nameLocation":"3166:23:11","nodeType":"ErrorDefinition","parameters":{"id":730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":729,"mutability":"mutable","name":"poolSetManager","nameLocation":"3198:14:11","nodeType":"VariableDeclaration","scope":731,"src":"3190:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":728,"name":"address","nodeType":"ElementaryTypeName","src":"3190:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3189:24:11"},"src":"3160:54:11"},{"documentation":{"id":732,"nodeType":"StructuredDocumentation","src":"3220:91:11","text":"@notice Permissioned operations on pools can only be performed by the pool set manager."},"errorSelector":"bcc08f74","id":734,"name":"SenderIsNotPoolSetManager","nameLocation":"3322:25:11","nodeType":"ErrorDefinition","parameters":{"id":733,"nodeType":"ParameterList","parameters":[],"src":"3347:2:11"},"src":"3316:34:11"},{"documentation":{"id":735,"nodeType":"StructuredDocumentation","src":"3356:140:11","text":" @notice An index is beyond the current bounds of the set.\n @param poolSetId Id of the set involved in the operation"},"errorSelector":"44945fcc","id":739,"name":"IndexOutOfBounds","nameLocation":"3507:16:11","nodeType":"ErrorDefinition","parameters":{"id":738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":737,"mutability":"mutable","name":"poolSetId","nameLocation":"3532:9:11","nodeType":"VariableDeclaration","scope":739,"src":"3524:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":736,"name":"uint256","nodeType":"ElementaryTypeName","src":"3524:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3523:19:11"},"src":"3501:42:11"},{"documentation":{"id":740,"nodeType":"StructuredDocumentation","src":"3762:673:11","text":" @notice Create a new set with an initial manager, optionally initialized with a set of pools.\n @dev The `newPools` list can be empty, in which case this will only create the set. Pools can then be\n added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function.\n Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the\n initial manager address is zero or already a manager of another pool set.\n @param initialManager Address of the account authorized to perform operations on the set\n @param newPools Set of pools to add to the set"},"functionSelector":"3e035f9b","id":750,"implemented":false,"kind":"function","modifiers":[],"name":"createPoolSet","nameLocation":"4449:13:11","nodeType":"FunctionDefinition","parameters":{"id":746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":742,"mutability":"mutable","name":"initialManager","nameLocation":"4471:14:11","nodeType":"VariableDeclaration","scope":750,"src":"4463:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":741,"name":"address","nodeType":"ElementaryTypeName","src":"4463:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":745,"mutability":"mutable","name":"newPools","nameLocation":"4504:8:11","nodeType":"VariableDeclaration","scope":750,"src":"4487:25:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":743,"name":"address","nodeType":"ElementaryTypeName","src":"4487:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":744,"nodeType":"ArrayTypeName","src":"4487:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4462:51:11"},"returnParameters":{"id":749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":748,"mutability":"mutable","name":"poolSetId","nameLocation":"4540:9:11","nodeType":"VariableDeclaration","scope":750,"src":"4532:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":747,"name":"uint256","nodeType":"ElementaryTypeName","src":"4532:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4531:19:11"},"scope":865,"src":"4440:111:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":751,"nodeType":"StructuredDocumentation","src":"4557:355:11","text":" @notice Create a new empty set with an initial manager.\n @dev Convenience function to create a pool set with no initial pools. Also reverts if the initial manager\n address is zero or already a manager of another pool set.\n @param initialManager Address of the account authorized to perform operations on the set"},"functionSelector":"e909c19b","id":758,"implemented":false,"kind":"function","modifiers":[],"name":"createPoolSet","nameLocation":"4926:13:11","nodeType":"FunctionDefinition","parameters":{"id":754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":753,"mutability":"mutable","name":"initialManager","nameLocation":"4948:14:11","nodeType":"VariableDeclaration","scope":758,"src":"4940:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":752,"name":"address","nodeType":"ElementaryTypeName","src":"4940:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4939:24:11"},"returnParameters":{"id":757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":756,"mutability":"mutable","name":"poolSetId","nameLocation":"4990:9:11","nodeType":"VariableDeclaration","scope":758,"src":"4982:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":755,"name":"uint256","nodeType":"ElementaryTypeName","src":"4982:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4981:19:11"},"scope":865,"src":"4917:84:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":759,"nodeType":"StructuredDocumentation","src":"5007:431:11","text":" @notice Simple way to remove an entire set of pools from control of the helper function.\n @dev This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis)\n may destroy sets, effectively removing control of any pools in the set from the associated manager.\n Also reverts if the poolSetId is not valid.\n @param poolSetId Id of the set being destroyed"},"functionSelector":"7c1ec460","id":764,"implemented":false,"kind":"function","modifiers":[],"name":"destroyPoolSet","nameLocation":"5452:14:11","nodeType":"FunctionDefinition","parameters":{"id":762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":761,"mutability":"mutable","name":"poolSetId","nameLocation":"5475:9:11","nodeType":"VariableDeclaration","scope":764,"src":"5467:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":760,"name":"uint256","nodeType":"ElementaryTypeName","src":"5467:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5466:19:11"},"returnParameters":{"id":763,"nodeType":"ParameterList","parameters":[],"src":"5494:0:11"},"scope":865,"src":"5443:52:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":765,"nodeType":"StructuredDocumentation","src":"5501:712:11","text":" @notice Transfer ownership of a pool set from the current manager to a new manager.\n @dev This is a permissioned function. Only the current manager of a set can call this to set a new manager.\n Since managers can only control a single set, there is no need to specify the id in the call. Note that this\n is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this\n contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts\n if the new manager address is zero or already the manager of a pool set.\n @param newManager The address of the new manager"},"functionSelector":"3700f987","id":770,"implemented":false,"kind":"function","modifiers":[],"name":"transferPoolSetOwnership","nameLocation":"6227:24:11","nodeType":"FunctionDefinition","parameters":{"id":768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":767,"mutability":"mutable","name":"newManager","nameLocation":"6260:10:11","nodeType":"VariableDeclaration","scope":770,"src":"6252:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":766,"name":"address","nodeType":"ElementaryTypeName","src":"6252:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6251:20:11"},"returnParameters":{"id":769,"nodeType":"ParameterList","parameters":[],"src":"6280:0:11"},"scope":865,"src":"6218:63:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":771,"nodeType":"StructuredDocumentation","src":"6498:391:11","text":" @notice Add pools to the set of pools controlled by this helper contract.\n @dev This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis)\n may add pools to a set. Also reverts if the poolSetId is not valid.\n @param newPools List of pools to add\n @param poolSetId Id of the set to which the new pools belong"},"functionSelector":"ebf3a8d0","id":779,"implemented":false,"kind":"function","modifiers":[],"name":"addPoolsToSet","nameLocation":"6903:13:11","nodeType":"FunctionDefinition","parameters":{"id":777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":773,"mutability":"mutable","name":"poolSetId","nameLocation":"6925:9:11","nodeType":"VariableDeclaration","scope":779,"src":"6917:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":772,"name":"uint256","nodeType":"ElementaryTypeName","src":"6917:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":776,"mutability":"mutable","name":"newPools","nameLocation":"6953:8:11","nodeType":"VariableDeclaration","scope":779,"src":"6936:25:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":774,"name":"address","nodeType":"ElementaryTypeName","src":"6936:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":775,"nodeType":"ArrayTypeName","src":"6936:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"6916:46:11"},"returnParameters":{"id":778,"nodeType":"ParameterList","parameters":[],"src":"6971:0:11"},"scope":865,"src":"6894:78:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":780,"nodeType":"StructuredDocumentation","src":"6978:410:11","text":" @notice Remove pools from the set of pools controlled by this helper contract.\n @dev This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis)\n may remove pools from a set. Also reverts if the poolSetId is not valid.\n @param pools List of pools to remove from the set\n @param poolSetId Id of the set to which the pools belong"},"functionSelector":"2da55a1d","id":788,"implemented":false,"kind":"function","modifiers":[],"name":"removePoolsFromSet","nameLocation":"7402:18:11","nodeType":"FunctionDefinition","parameters":{"id":786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":782,"mutability":"mutable","name":"poolSetId","nameLocation":"7429:9:11","nodeType":"VariableDeclaration","scope":788,"src":"7421:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":781,"name":"uint256","nodeType":"ElementaryTypeName","src":"7421:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":785,"mutability":"mutable","name":"pools","nameLocation":"7457:5:11","nodeType":"VariableDeclaration","scope":788,"src":"7440:22:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":783,"name":"address","nodeType":"ElementaryTypeName","src":"7440:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":784,"nodeType":"ArrayTypeName","src":"7440:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"7420:43:11"},"returnParameters":{"id":787,"nodeType":"ParameterList","parameters":[],"src":"7472:0:11"},"scope":865,"src":"7393:80:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":789,"nodeType":"StructuredDocumentation","src":"7718:172:11","text":" @notice Get the pool set id associated with the caller.\n @return poolSetId The numeric pool set id, or zero if the caller is not a pool set manager"},"functionSelector":"ce998aba","id":794,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolSetIdForCaller","nameLocation":"7904:21:11","nodeType":"FunctionDefinition","parameters":{"id":790,"nodeType":"ParameterList","parameters":[],"src":"7925:2:11"},"returnParameters":{"id":793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":792,"mutability":"mutable","name":"poolSetId","nameLocation":"7959:9:11","nodeType":"VariableDeclaration","scope":794,"src":"7951:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":791,"name":"uint256","nodeType":"ElementaryTypeName","src":"7951:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7950:19:11"},"scope":865,"src":"7895:75:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":795,"nodeType":"StructuredDocumentation","src":"7976:192:11","text":" @notice Get the pool set id associated with a given manager address.\n @return poolSetId The numeric pool set id, or zero if the address given is not a pool set manager"},"functionSelector":"25c427ed","id":802,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolSetIdForManager","nameLocation":"8182:22:11","nodeType":"FunctionDefinition","parameters":{"id":798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":797,"mutability":"mutable","name":"manager","nameLocation":"8213:7:11","nodeType":"VariableDeclaration","scope":802,"src":"8205:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":796,"name":"address","nodeType":"ElementaryTypeName","src":"8205:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8204:17:11"},"returnParameters":{"id":801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":800,"mutability":"mutable","name":"poolSetId","nameLocation":"8253:9:11","nodeType":"VariableDeclaration","scope":802,"src":"8245:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":799,"name":"uint256","nodeType":"ElementaryTypeName","src":"8245:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8244:19:11"},"scope":865,"src":"8173:91:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":803,"nodeType":"StructuredDocumentation","src":"8270:363:11","text":" @notice Get the number of pools associated with the given set.\n @dev Needed to support pagination in case the set is too large to process in a single transaction.\n Reverts if the poolSetId is not valid.\n @param poolSetId Id of the set containing the pools\n @return poolCount The current number of pools in the set"},"functionSelector":"62d53462","id":810,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCountForSet","nameLocation":"8647:18:11","nodeType":"FunctionDefinition","parameters":{"id":806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":805,"mutability":"mutable","name":"poolSetId","nameLocation":"8674:9:11","nodeType":"VariableDeclaration","scope":810,"src":"8666:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":804,"name":"uint256","nodeType":"ElementaryTypeName","src":"8666:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8665:19:11"},"returnParameters":{"id":809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":808,"mutability":"mutable","name":"poolCount","nameLocation":"8716:9:11","nodeType":"VariableDeclaration","scope":810,"src":"8708:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":807,"name":"uint256","nodeType":"ElementaryTypeName","src":"8708:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8707:19:11"},"scope":865,"src":"8638:89:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":811,"nodeType":"StructuredDocumentation","src":"8733:181:11","text":" @notice Check whether a poolSetId has been created.\n @param poolSetId Id of the set containing the pools\n @return isValid True if the poolSetId exists"},"functionSelector":"255dae41","id":818,"implemented":false,"kind":"function","modifiers":[],"name":"isValidPoolSetId","nameLocation":"8928:16:11","nodeType":"FunctionDefinition","parameters":{"id":814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":813,"mutability":"mutable","name":"poolSetId","nameLocation":"8953:9:11","nodeType":"VariableDeclaration","scope":818,"src":"8945:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":812,"name":"uint256","nodeType":"ElementaryTypeName","src":"8945:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8944:19:11"},"returnParameters":{"id":817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":816,"mutability":"mutable","name":"isValid","nameLocation":"8992:7:11","nodeType":"VariableDeclaration","scope":818,"src":"8987:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":815,"name":"bool","nodeType":"ElementaryTypeName","src":"8987:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8986:14:11"},"scope":865,"src":"8919:82:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":819,"nodeType":"StructuredDocumentation","src":"9007:308:11","text":" @notice Check whether a pool is in the set of pools.\n @dev Reverts if the poolSetId is not valid.\n @param pool Address of the pool to check\n @param poolSetId Id of the set containing the pools\n @return poolInSet True if the pool is in the given set, false otherwise"},"functionSelector":"182551da","id":828,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInSet","nameLocation":"9329:11:11","nodeType":"FunctionDefinition","parameters":{"id":824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":821,"mutability":"mutable","name":"pool","nameLocation":"9349:4:11","nodeType":"VariableDeclaration","scope":828,"src":"9341:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":820,"name":"address","nodeType":"ElementaryTypeName","src":"9341:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":823,"mutability":"mutable","name":"poolSetId","nameLocation":"9363:9:11","nodeType":"VariableDeclaration","scope":828,"src":"9355:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":822,"name":"uint256","nodeType":"ElementaryTypeName","src":"9355:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9340:33:11"},"returnParameters":{"id":827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":826,"mutability":"mutable","name":"poolInSet","nameLocation":"9402:9:11","nodeType":"VariableDeclaration","scope":828,"src":"9397:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":825,"name":"bool","nodeType":"ElementaryTypeName","src":"9397:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9396:16:11"},"scope":865,"src":"9320:93:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":829,"nodeType":"StructuredDocumentation","src":"9419:215:11","text":" @notice Get the full set of pools from a given set.\n @dev Reverts if the poolSetId is not valid.\n @param poolSetId Id of the set containing the pools\n @return pools List of pools"},"functionSelector":"94fc4058","id":837,"implemented":false,"kind":"function","modifiers":[],"name":"getAllPoolsInSet","nameLocation":"9648:16:11","nodeType":"FunctionDefinition","parameters":{"id":832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":831,"mutability":"mutable","name":"poolSetId","nameLocation":"9673:9:11","nodeType":"VariableDeclaration","scope":837,"src":"9665:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":830,"name":"uint256","nodeType":"ElementaryTypeName","src":"9665:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9664:19:11"},"returnParameters":{"id":836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":835,"mutability":"mutable","name":"pools","nameLocation":"9724:5:11","nodeType":"VariableDeclaration","scope":837,"src":"9707:22:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":833,"name":"address","nodeType":"ElementaryTypeName","src":"9707:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":834,"nodeType":"ArrayTypeName","src":"9707:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"9706:24:11"},"scope":865,"src":"9639:92:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":838,"nodeType":"StructuredDocumentation","src":"9737:369:11","text":" @notice Get a range of pools from a given set.\n @dev Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`).\n Reverts if the poolSetId is not valid.\n @param poolSetId Id of the set containing the pools\n @param from Start index\n @param to End index\n @return pools List of pools"},"functionSelector":"8c60ebd0","id":850,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolsInSet","nameLocation":"10120:13:11","nodeType":"FunctionDefinition","parameters":{"id":845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":840,"mutability":"mutable","name":"poolSetId","nameLocation":"10142:9:11","nodeType":"VariableDeclaration","scope":850,"src":"10134:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":839,"name":"uint256","nodeType":"ElementaryTypeName","src":"10134:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":842,"mutability":"mutable","name":"from","nameLocation":"10161:4:11","nodeType":"VariableDeclaration","scope":850,"src":"10153:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":841,"name":"uint256","nodeType":"ElementaryTypeName","src":"10153:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":844,"mutability":"mutable","name":"to","nameLocation":"10175:2:11","nodeType":"VariableDeclaration","scope":850,"src":"10167:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":843,"name":"uint256","nodeType":"ElementaryTypeName","src":"10167:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10133:45:11"},"returnParameters":{"id":849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":848,"mutability":"mutable","name":"pools","nameLocation":"10219:5:11","nodeType":"VariableDeclaration","scope":850,"src":"10202:22:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":846,"name":"address","nodeType":"ElementaryTypeName","src":"10202:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":847,"nodeType":"ArrayTypeName","src":"10202:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"10201:24:11"},"scope":865,"src":"10111:115:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":851,"nodeType":"StructuredDocumentation","src":"10232:175:11","text":" @notice Utility function to predict the next pool set id.\n @return nextPoolSetId The pool set id that will be used on the next call of `createPoolSet`"},"functionSelector":"c482e822","id":856,"implemented":false,"kind":"function","modifiers":[],"name":"getNextPoolSetId","nameLocation":"10421:16:11","nodeType":"FunctionDefinition","parameters":{"id":852,"nodeType":"ParameterList","parameters":[],"src":"10437:2:11"},"returnParameters":{"id":855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":854,"mutability":"mutable","name":"nextPoolSetId","nameLocation":"10471:13:11","nodeType":"VariableDeclaration","scope":856,"src":"10463:21:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":853,"name":"uint256","nodeType":"ElementaryTypeName","src":"10463:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10462:23:11"},"scope":865,"src":"10412:74:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":857,"nodeType":"StructuredDocumentation","src":"10492:257:11","text":" @notice Get the manager address associated with a given poolSetId.\n @param poolSetId Id of the set containing the pools\n @return manager The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned"},"functionSelector":"f167a1e6","id":864,"implemented":false,"kind":"function","modifiers":[],"name":"getManagerForPoolSet","nameLocation":"10763:20:11","nodeType":"FunctionDefinition","parameters":{"id":860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":859,"mutability":"mutable","name":"poolSetId","nameLocation":"10792:9:11","nodeType":"VariableDeclaration","scope":864,"src":"10784:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":858,"name":"uint256","nodeType":"ElementaryTypeName","src":"10784:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10783:19:11"},"returnParameters":{"id":863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":862,"mutability":"mutable","name":"manager","nameLocation":"10834:7:11","nodeType":"VariableDeclaration","scope":864,"src":"10826:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":861,"name":"address","nodeType":"ElementaryTypeName","src":"10826:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10825:17:11"},"scope":865,"src":"10754:89:11","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":866,"src":"157:10688:11","usedErrors":[711,718,723,726,731,734,739],"usedEvents":[674,681,688,695,704]}],"src":"46:10800:11"},"id":11},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol","exportedSymbols":{"IPoolPauseHelper":[876]},"id":877,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":867,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:12"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolPauseHelper","contractDependencies":[],"contractKind":"interface","documentation":{"id":868,"nodeType":"StructuredDocumentation","src":"72:482:12","text":" @notice Maintain a set of pools that can be paused from this helper contract, vs. directly from the Vault.\n @dev Governance can add a set of pools to this contract, then grant pause permission to accounts here, which\n allows greater granularity than setting the permission directly on the Vault.\n Note that governance must grant this contract permission to pause pools from the Vault. Unpausing is not\n addressed here, and must still be done through the Vault."},"fullyImplemented":false,"id":876,"linearizedBaseContracts":[876],"name":"IPoolPauseHelper","nameLocation":"565:16:12","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":869,"nodeType":"StructuredDocumentation","src":"588:702:12","text":" @notice Pause a set of pools.\n @dev This is a permissioned function. Governance must first grant this contract permission to call `pausePool`\n on the Vault, then grant another account permission to call `pausePools` here. Note that this is not necessarily\n the same account that can add or remove pools from the pausable list.\n Note that there is no `unpause`. This is a helper contract designed to react quickly to emergencies. Unpausing\n is a more deliberate action that should be performed by accounts approved by governance for this purpose, or by\n the individual pools' pause managers.\n @param pools List of pools to pause"},"functionSelector":"a20dc529","id":875,"implemented":false,"kind":"function","modifiers":[],"name":"pausePools","nameLocation":"1304:10:12","nodeType":"FunctionDefinition","parameters":{"id":873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":872,"mutability":"mutable","name":"pools","nameLocation":"1332:5:12","nodeType":"VariableDeclaration","scope":875,"src":"1315:22:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":870,"name":"address","nodeType":"ElementaryTypeName","src":"1315:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":871,"nodeType":"ArrayTypeName","src":"1315:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1314:24:12"},"returnParameters":{"id":874,"nodeType":"ParameterList","parameters":[],"src":"1347:0:12"},"scope":876,"src":"1295:53:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":877,"src":"555:795:12","usedErrors":[],"usedEvents":[]}],"src":"46:1305:12"},"id":12},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol","exportedSymbols":{"IPoolSwapFeeHelper":[893]},"id":894,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":878,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:13"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolSwapFeeHelper","contractDependencies":[],"contractKind":"interface","documentation":{"id":879,"nodeType":"StructuredDocumentation","src":"72:541:13","text":" @notice Maintain a set of pools whose static swap fee percentages can be changed from here, vs. from the Vault.\n @dev Governance can add a set of pools to this contract, then grant swap fee setting permission to accounts on this\n contract, which allows greater granularity than setting the permission directly on the Vault.\n Note that governance must grant this contract permission to set swap fees from the Vault, and only pools that\n allow governance to set fees can be added (i.e., they must not have swap managers)."},"fullyImplemented":false,"id":893,"linearizedBaseContracts":[893],"name":"IPoolSwapFeeHelper","nameLocation":"624:18:13","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":880,"nodeType":"StructuredDocumentation","src":"649:380:13","text":" @notice Cannot add a pool that has a swap manager.\n @dev The swap manager is an exclusive role. If it is set to a non-zero value during pool registration,\n only the swap manager can change the fee. This helper can only set fees on pools that allow governance\n to grant this permission.\n @param pool Address of the pool being added"},"errorSelector":"f043494a","id":884,"name":"PoolHasSwapManager","nameLocation":"1040:18:13","nodeType":"ErrorDefinition","parameters":{"id":883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":882,"mutability":"mutable","name":"pool","nameLocation":"1067:4:13","nodeType":"VariableDeclaration","scope":884,"src":"1059:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":881,"name":"address","nodeType":"ElementaryTypeName","src":"1059:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1058:14:13"},"src":"1034:39:13"},{"documentation":{"id":885,"nodeType":"StructuredDocumentation","src":"1291:500:13","text":" @notice Set the static swap fee percentage on a given pool.\n @dev This is a permissioned function. Governance must grant this contract permission to call\n `setStaticSwapFeePercentage` on the Vault. Note that since the swap manager is an exclusive role, the swap fee\n cannot be changed by governance if it is set, and the pool cannot be added to the set.\n @param pool The address of the pool\n @param swapFeePercentage The new swap fee percentage"},"functionSelector":"d15126ba","id":892,"implemented":false,"kind":"function","modifiers":[],"name":"setStaticSwapFeePercentage","nameLocation":"1805:26:13","nodeType":"FunctionDefinition","parameters":{"id":890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":887,"mutability":"mutable","name":"pool","nameLocation":"1840:4:13","nodeType":"VariableDeclaration","scope":892,"src":"1832:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":886,"name":"address","nodeType":"ElementaryTypeName","src":"1832:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":889,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1854:17:13","nodeType":"VariableDeclaration","scope":892,"src":"1846:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":888,"name":"uint256","nodeType":"ElementaryTypeName","src":"1846:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1831:41:13"},"returnParameters":{"id":891,"nodeType":"ParameterList","parameters":[],"src":"1881:0:13"},"scope":893,"src":"1796:86:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":894,"src":"614:1270:13","usedErrors":[884],"usedEvents":[]}],"src":"46:1839:13"},"id":13},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","exportedSymbols":{"IERC20":[10558],"IProtocolFeeBurner":[948]},"id":949,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":895,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:14"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":897,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":949,"sourceUnit":10559,"src":"72:72:14","symbolAliases":[{"foreign":{"id":896,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"81:6:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeBurner","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":948,"linearizedBaseContracts":[948],"name":"IProtocolFeeBurner","nameLocation":"156:18:14","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":898,"nodeType":"StructuredDocumentation","src":"181:576:14","text":" @notice A protocol fee token has been \"burned\" (i.e., swapped for the desired target token).\n @param pool The pool on which the fee was collected (used for event tracking)\n @param feeToken The token in which the fee was originally collected\n @param exactFeeTokenAmountIn The number of feeTokens collected\n @param targetToken The preferred token for fee collection (e.g., USDC)\n @param actualTargetTokenAmountOut The number of target tokens actually received\n @param recipient The address where the target tokens were sent"},"eventSelector":"77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d","id":914,"name":"ProtocolFeeBurned","nameLocation":"768:17:14","nodeType":"EventDefinition","parameters":{"id":913,"nodeType":"ParameterList","parameters":[{"constant":false,"id":900,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"811:4:14","nodeType":"VariableDeclaration","scope":914,"src":"795:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":899,"name":"address","nodeType":"ElementaryTypeName","src":"795:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":903,"indexed":true,"mutability":"mutable","name":"feeToken","nameLocation":"840:8:14","nodeType":"VariableDeclaration","scope":914,"src":"825:23:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":902,"nodeType":"UserDefinedTypeName","pathNode":{"id":901,"name":"IERC20","nameLocations":["825:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"825:6:14"},"referencedDeclaration":10558,"src":"825:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":905,"indexed":false,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"866:21:14","nodeType":"VariableDeclaration","scope":914,"src":"858:29:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":904,"name":"uint256","nodeType":"ElementaryTypeName","src":"858:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":908,"indexed":true,"mutability":"mutable","name":"targetToken","nameLocation":"912:11:14","nodeType":"VariableDeclaration","scope":914,"src":"897:26:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":907,"nodeType":"UserDefinedTypeName","pathNode":{"id":906,"name":"IERC20","nameLocations":["897:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"897:6:14"},"referencedDeclaration":10558,"src":"897:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":910,"indexed":false,"mutability":"mutable","name":"actualTargetTokenAmountOut","nameLocation":"941:26:14","nodeType":"VariableDeclaration","scope":914,"src":"933:34:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":909,"name":"uint256","nodeType":"ElementaryTypeName","src":"933:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":912,"indexed":false,"mutability":"mutable","name":"recipient","nameLocation":"985:9:14","nodeType":"VariableDeclaration","scope":914,"src":"977:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":911,"name":"address","nodeType":"ElementaryTypeName","src":"977:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"785:215:14"},"src":"762:239:14"},{"documentation":{"id":915,"nodeType":"StructuredDocumentation","src":"1007:269:14","text":" @notice The actual amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"2f785e46","id":924,"name":"AmountOutBelowMin","nameLocation":"1287:17:14","nodeType":"ErrorDefinition","parameters":{"id":923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":918,"mutability":"mutable","name":"tokenOut","nameLocation":"1312:8:14","nodeType":"VariableDeclaration","scope":924,"src":"1305:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":917,"nodeType":"UserDefinedTypeName","pathNode":{"id":916,"name":"IERC20","nameLocations":["1305:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1305:6:14"},"referencedDeclaration":10558,"src":"1305:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":920,"mutability":"mutable","name":"amountOut","nameLocation":"1330:9:14","nodeType":"VariableDeclaration","scope":924,"src":"1322:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":919,"name":"uint256","nodeType":"ElementaryTypeName","src":"1322:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":922,"mutability":"mutable","name":"minAmountOut","nameLocation":"1349:12:14","nodeType":"VariableDeclaration","scope":924,"src":"1341:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":921,"name":"uint256","nodeType":"ElementaryTypeName","src":"1341:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1304:58:14"},"src":"1281:82:14"},{"documentation":{"id":925,"nodeType":"StructuredDocumentation","src":"1369:91:14","text":"@notice The swap transaction was not validated before the specified deadline timestamp."},"errorSelector":"e08b8af0","id":927,"name":"SwapDeadline","nameLocation":"1471:12:14","nodeType":"ErrorDefinition","parameters":{"id":926,"nodeType":"ParameterList","parameters":[],"src":"1483:2:14"},"src":"1465:21:14"},{"documentation":{"id":928,"nodeType":"StructuredDocumentation","src":"1492:750:14","text":" @notice Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\n @dev Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\n @param pool The pool the fees came from (only used for documentation in the event)\n @param feeToken The token collected from the pool\n @param exactFeeTokenAmountIn The number of fee tokens collected\n @param targetToken The desired target token (token out of the swap)\n @param minTargetTokenAmountOut The minimum amount out for the swap\n @param recipient The recipient of the swap proceeds\n @param deadline Deadline for the burn operation (i.e., swap), after which it will revert"},"functionSelector":"de557a32","id":947,"implemented":false,"kind":"function","modifiers":[],"name":"burn","nameLocation":"2256:4:14","nodeType":"FunctionDefinition","parameters":{"id":945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":930,"mutability":"mutable","name":"pool","nameLocation":"2278:4:14","nodeType":"VariableDeclaration","scope":947,"src":"2270:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":929,"name":"address","nodeType":"ElementaryTypeName","src":"2270:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":933,"mutability":"mutable","name":"feeToken","nameLocation":"2299:8:14","nodeType":"VariableDeclaration","scope":947,"src":"2292:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":932,"nodeType":"UserDefinedTypeName","pathNode":{"id":931,"name":"IERC20","nameLocations":["2292:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2292:6:14"},"referencedDeclaration":10558,"src":"2292:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":935,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"2325:21:14","nodeType":"VariableDeclaration","scope":947,"src":"2317:29:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":934,"name":"uint256","nodeType":"ElementaryTypeName","src":"2317:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":938,"mutability":"mutable","name":"targetToken","nameLocation":"2363:11:14","nodeType":"VariableDeclaration","scope":947,"src":"2356:18:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":937,"nodeType":"UserDefinedTypeName","pathNode":{"id":936,"name":"IERC20","nameLocations":["2356:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2356:6:14"},"referencedDeclaration":10558,"src":"2356:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":940,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"2392:23:14","nodeType":"VariableDeclaration","scope":947,"src":"2384:31:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":939,"name":"uint256","nodeType":"ElementaryTypeName","src":"2384:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":942,"mutability":"mutable","name":"recipient","nameLocation":"2433:9:14","nodeType":"VariableDeclaration","scope":947,"src":"2425:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":941,"name":"address","nodeType":"ElementaryTypeName","src":"2425:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":944,"mutability":"mutable","name":"deadline","nameLocation":"2460:8:14","nodeType":"VariableDeclaration","scope":947,"src":"2452:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":943,"name":"uint256","nodeType":"ElementaryTypeName","src":"2452:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2260:214:14"},"returnParameters":{"id":946,"nodeType":"ParameterList","parameters":[],"src":"2483:0:14"},"scope":948,"src":"2247:237:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":949,"src":"146:2340:14","usedErrors":[924,927],"usedEvents":[914]}],"src":"46:2441:14"},"id":14},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol","exportedSymbols":{"IProtocolFeeHelper":[968]},"id":969,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":950,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:15"},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeHelper","contractDependencies":[],"contractKind":"interface","documentation":{"id":951,"nodeType":"StructuredDocumentation","src":"72:489:15","text":" @notice Maintain a set of pools whose protocol fees can be set from this helper contract, vs. the fee controller.\n @dev Governance can add a set of pools to this contract, then grant permission to call protocol swap- or yield-\n setting functions here, which allows greater granularity than setting permissions directly on the fee controller.\n Note that governance must grant this contract permission to call the pool protocol fee setting functions on the\n controller."},"fullyImplemented":false,"id":968,"linearizedBaseContracts":[968],"name":"IProtocolFeeHelper","nameLocation":"572:18:15","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":952,"nodeType":"StructuredDocumentation","src":"809:381:15","text":" @notice Set the protocol swap fee for a pool.\n @dev This contract must be granted permission to set swap and yield protocol fees, but governance can\n independently grant permission to call the swap and yield fee setters.\n @param pool The address of the pool\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage"},"functionSelector":"fd267f39","id":959,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolSwapFeePercentage","nameLocation":"1204:28:15","nodeType":"FunctionDefinition","parameters":{"id":957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":954,"mutability":"mutable","name":"pool","nameLocation":"1241:4:15","nodeType":"VariableDeclaration","scope":959,"src":"1233:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":953,"name":"address","nodeType":"ElementaryTypeName","src":"1233:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":956,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"1255:28:15","nodeType":"VariableDeclaration","scope":959,"src":"1247:36:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":955,"name":"uint256","nodeType":"ElementaryTypeName","src":"1247:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1232:52:15"},"returnParameters":{"id":958,"nodeType":"ParameterList","parameters":[],"src":"1293:0:15"},"scope":968,"src":"1195:99:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":960,"nodeType":"StructuredDocumentation","src":"1300:384:15","text":" @notice Set the protocol yield fee for a pool.\n @dev This contract must be granted permission to set swap and yield protocol fees, but governance can\n independently grant permission to call the swap and yield fee setters.\n @param pool The address of the pool\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"abaa3356","id":967,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolYieldFeePercentage","nameLocation":"1698:29:15","nodeType":"FunctionDefinition","parameters":{"id":965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":962,"mutability":"mutable","name":"pool","nameLocation":"1736:4:15","nodeType":"VariableDeclaration","scope":967,"src":"1728:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":961,"name":"address","nodeType":"ElementaryTypeName","src":"1728:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":964,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"1750:29:15","nodeType":"VariableDeclaration","scope":967,"src":"1742:37:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":963,"name":"uint256","nodeType":"ElementaryTypeName","src":"1742:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1727:53:15"},"returnParameters":{"id":966,"nodeType":"ParameterList","parameters":[],"src":"1789:0:15"},"scope":968,"src":"1689:101:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":969,"src":"562:1230:15","usedErrors":[],"usedEvents":[]}],"src":"46:1747:15"},"id":15},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","exportedSymbols":{"IERC20":[10558],"IERC4626":[9828],"IProtocolFeeBurner":[948],"IProtocolFeeController":[1955],"IProtocolFeeSweeper":[1137]},"id":1138,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":970,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:16"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":972,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1138,"sourceUnit":10559,"src":"72:72:16","symbolAliases":[{"foreign":{"id":971,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"81:6:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":974,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1138,"sourceUnit":9829,"src":"145:75:16","symbolAliases":[{"foreign":{"id":973,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9828,"src":"154:8:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"../vault/IProtocolFeeController.sol","id":976,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1138,"sourceUnit":1956,"src":"222:77:16","symbolAliases":[{"foreign":{"id":975,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"231:22:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"./IProtocolFeeBurner.sol","id":978,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1138,"sourceUnit":949,"src":"300:62:16","symbolAliases":[{"foreign":{"id":977,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"309:18:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeSweeper","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":1137,"linearizedBaseContracts":[1137],"name":"IProtocolFeeSweeper","nameLocation":"374:19:16","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":979,"nodeType":"StructuredDocumentation","src":"400:143:16","text":" @notice Emitted when the target token is set or updated.\n @param token The preferred token for receiving protocol fees"},"eventSelector":"873950c2ac59c570001b99d815ffb260542df229d07132922e2e6f9941fd3da6","id":984,"name":"TargetTokenSet","nameLocation":"554:14:16","nodeType":"EventDefinition","parameters":{"id":983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":982,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"584:5:16","nodeType":"VariableDeclaration","scope":984,"src":"569:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":981,"nodeType":"UserDefinedTypeName","pathNode":{"id":980,"name":"IERC20","nameLocations":["569:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"569:6:16"},"referencedDeclaration":10558,"src":"569:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"568:22:16"},"src":"548:43:16"},{"anonymous":false,"documentation":{"id":985,"nodeType":"StructuredDocumentation","src":"597:160:16","text":" @notice Emitted when the fee recipient address is set or updated.\n @param feeRecipient The final destination of collected protocol fees"},"eventSelector":"bf9a9534339a9d6b81696e05dcfb614b7dc518a31d48be3cfb757988381fb323","id":989,"name":"FeeRecipientSet","nameLocation":"768:15:16","nodeType":"EventDefinition","parameters":{"id":988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":987,"indexed":true,"mutability":"mutable","name":"feeRecipient","nameLocation":"800:12:16","nodeType":"VariableDeclaration","scope":989,"src":"784:28:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":986,"name":"address","nodeType":"ElementaryTypeName","src":"784:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"783:30:16"},"src":"762:52:16"},{"anonymous":false,"documentation":{"id":990,"nodeType":"StructuredDocumentation","src":"820:501:16","text":" @notice Emitted when a fee token is transferred directly, vs. calling the burner.\n @dev This can happen if no target token or burner contract was specified, or the fee token is the target token.\n @param pool The pool on which the fee was collected\n @param feeToken The token the fee was collected in (also the target token in this case; no swap necessary)\n @param feeTokenAmount The number of feeTokens\n @param recipient The recipient of the fee tokens"},"eventSelector":"d6b9382ec1786c32610e376e8ee8f2f16abeda4ace3b6276ac958193c75bbbc8","id":1001,"name":"ProtocolFeeSwept","nameLocation":"1332:16:16","nodeType":"EventDefinition","parameters":{"id":1000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":992,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1365:4:16","nodeType":"VariableDeclaration","scope":1001,"src":"1349:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":991,"name":"address","nodeType":"ElementaryTypeName","src":"1349:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":995,"indexed":true,"mutability":"mutable","name":"feeToken","nameLocation":"1386:8:16","nodeType":"VariableDeclaration","scope":1001,"src":"1371:23:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":994,"nodeType":"UserDefinedTypeName","pathNode":{"id":993,"name":"IERC20","nameLocations":["1371:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1371:6:16"},"referencedDeclaration":10558,"src":"1371:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":997,"indexed":false,"mutability":"mutable","name":"feeTokenAmount","nameLocation":"1404:14:16","nodeType":"VariableDeclaration","scope":1001,"src":"1396:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":996,"name":"uint256","nodeType":"ElementaryTypeName","src":"1396:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":999,"indexed":false,"mutability":"mutable","name":"recipient","nameLocation":"1428:9:16","nodeType":"VariableDeclaration","scope":1001,"src":"1420:17:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":998,"name":"address","nodeType":"ElementaryTypeName","src":"1420:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1348:90:16"},"src":"1326:113:16"},{"anonymous":false,"documentation":{"id":1002,"nodeType":"StructuredDocumentation","src":"1445:294:16","text":" @notice Emitted when a burner is added to the protocol fee burner allowlist.\n @dev `sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\n @param protocolFeeBurner The address of the approved protocol fee burner that was added"},"eventSelector":"0ef09fc346b7c2cae78d9a37ed785840e7d3c6072022cd8c41c3b37a239b7fd1","id":1006,"name":"ProtocolFeeBurnerAdded","nameLocation":"1750:22:16","nodeType":"EventDefinition","parameters":{"id":1005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1004,"indexed":true,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"1789:17:16","nodeType":"VariableDeclaration","scope":1006,"src":"1773:33:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1003,"name":"address","nodeType":"ElementaryTypeName","src":"1773:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1772:35:16"},"src":"1744:64:16"},{"anonymous":false,"documentation":{"id":1007,"nodeType":"StructuredDocumentation","src":"1814:300:16","text":" @notice Emitted when a burner is removed from the protocol fee burner allowlist.\n @dev `sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\n @param protocolFeeBurner The address of the approved protocol fee burner that was removed"},"eventSelector":"0ed3ea501d1a23f23a7dc56c2d33e1e5a6a97694c707ef67b1e0159f239746bf","id":1011,"name":"ProtocolFeeBurnerRemoved","nameLocation":"2125:24:16","nodeType":"EventDefinition","parameters":{"id":1010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1009,"indexed":true,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"2166:17:16","nodeType":"VariableDeclaration","scope":1011,"src":"2150:33:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1008,"name":"address","nodeType":"ElementaryTypeName","src":"2150:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2149:35:16"},"src":"2119:66:16"},{"documentation":{"id":1012,"nodeType":"StructuredDocumentation","src":"2191:41:16","text":"@notice The fee recipient is invalid."},"errorSelector":"768dc598","id":1014,"name":"InvalidFeeRecipient","nameLocation":"2243:19:16","nodeType":"ErrorDefinition","parameters":{"id":1013,"nodeType":"ParameterList","parameters":[],"src":"2262:2:16"},"src":"2237:28:16"},{"documentation":{"id":1015,"nodeType":"StructuredDocumentation","src":"2271:40:16","text":"@notice The target token is invalid."},"errorSelector":"8562eb45","id":1017,"name":"InvalidTargetToken","nameLocation":"2322:18:16","nodeType":"ErrorDefinition","parameters":{"id":1016,"nodeType":"ParameterList","parameters":[],"src":"2340:2:16"},"src":"2316:27:16"},{"documentation":{"id":1018,"nodeType":"StructuredDocumentation","src":"2349:59:16","text":"@notice The protocol fee burner to be added is invalid."},"errorSelector":"31ec2736","id":1020,"name":"InvalidProtocolFeeBurner","nameLocation":"2419:24:16","nodeType":"ErrorDefinition","parameters":{"id":1019,"nodeType":"ParameterList","parameters":[],"src":"2443:2:16"},"src":"2413:33:16"},{"documentation":{"id":1021,"nodeType":"StructuredDocumentation","src":"2452:148:16","text":" @notice The specified fee burner has not been approved.\n @param protocolFeeBurner The address of the unsupported fee burner"},"errorSelector":"38553f6c","id":1025,"name":"UnsupportedProtocolFeeBurner","nameLocation":"2611:28:16","nodeType":"ErrorDefinition","parameters":{"id":1024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1023,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"2648:17:16","nodeType":"VariableDeclaration","scope":1025,"src":"2640:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1022,"name":"address","nodeType":"ElementaryTypeName","src":"2640:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2639:27:16"},"src":"2605:62:16"},{"documentation":{"id":1026,"nodeType":"StructuredDocumentation","src":"2673:167:16","text":" @notice Protocol fee burners can only be added to the allowlist once.\n @param protocolFeeBurner The address of an approved protocol fee burner"},"errorSelector":"6fe47af6","id":1030,"name":"ProtocolFeeBurnerAlreadyAdded","nameLocation":"2851:29:16","nodeType":"ErrorDefinition","parameters":{"id":1029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1028,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"2889:17:16","nodeType":"VariableDeclaration","scope":1030,"src":"2881:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1027,"name":"address","nodeType":"ElementaryTypeName","src":"2881:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2880:27:16"},"src":"2845:63:16"},{"documentation":{"id":1031,"nodeType":"StructuredDocumentation","src":"2914:202:16","text":" @notice Protocol fee burners must be added to the allowlist before being removed.\n @param protocolFeeBurner The address of a protocol fee burner to be removed from the allowlist"},"errorSelector":"bca5ab34","id":1035,"name":"ProtocolFeeBurnerNotAdded","nameLocation":"3127:25:16","nodeType":"ErrorDefinition","parameters":{"id":1034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1033,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"3161:17:16","nodeType":"VariableDeclaration","scope":1035,"src":"3153:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1032,"name":"address","nodeType":"ElementaryTypeName","src":"3153:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3152:27:16"},"src":"3121:59:16"},{"documentation":{"id":1036,"nodeType":"StructuredDocumentation","src":"3186:235:16","text":" @notice The burner did not consume its entire allowance.\n @dev The fee sweeper approves the burner to pull tokens. If it doesn't do so, revert to avoid a \"hanging\"\n approval that could be exploited later."},"errorSelector":"c5bc8d51","id":1038,"name":"BurnerDidNotConsumeAllowance","nameLocation":"3432:28:16","nodeType":"ErrorDefinition","parameters":{"id":1037,"nodeType":"ParameterList","parameters":[],"src":"3460:2:16"},"src":"3426:37:16"},{"documentation":{"id":1039,"nodeType":"StructuredDocumentation","src":"3469:56:16","text":"@notice Unwrapping is not allowed for the operation."},"errorSelector":"ca9e3a1e","id":1041,"name":"UnwrapIsNotAllowed","nameLocation":"3536:18:16","nodeType":"ErrorDefinition","parameters":{"id":1040,"nodeType":"ParameterList","parameters":[],"src":"3554:2:16"},"src":"3530:27:16"},{"documentation":{"id":1042,"nodeType":"StructuredDocumentation","src":"3563:1358:16","text":" @notice Withdraw, convert, and forward protocol fees for a given pool and token.\n @dev This will withdraw the fee token from the controller to this contract, and attempt to convert and forward\n the proceeds to the fee recipient. Note that this requires governance to grant this contract permission to call\n `withdrawProtocolFeesForToken` on the `ProtocolFeeController`.\n This is a permissioned call, since it involves a swap and a permissionless sweep could be triggered at times\n disadvantageous to the protocol (e.g., flash crashes). The general design is for an off-chain process to\n periodically collect fees from the Vault and check the protocol fee amounts available for withdrawal. Once\n these are greater than a threshold, compute the expected proceeds to determine the limits (amount and deadline),\n then call the sweeper to put in the order with the burner.\n @param pool The pool that incurred the fees we're withdrawing\n @param feeToken The fee token in the pool\n @param minTargetTokenAmountOut The minimum number of target tokens to be received\n @param deadline Deadline for the burn operation (swap), after which it will revert\n @param feeBurner The protocol fee burner to be used (or the zero address to fall back on direct transfer)"},"functionSelector":"b9746995","id":1057,"implemented":false,"kind":"function","modifiers":[],"name":"sweepProtocolFeesForToken","nameLocation":"4935:25:16","nodeType":"FunctionDefinition","parameters":{"id":1055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1044,"mutability":"mutable","name":"pool","nameLocation":"4978:4:16","nodeType":"VariableDeclaration","scope":1057,"src":"4970:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1043,"name":"address","nodeType":"ElementaryTypeName","src":"4970:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1047,"mutability":"mutable","name":"feeToken","nameLocation":"4999:8:16","nodeType":"VariableDeclaration","scope":1057,"src":"4992:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":1046,"nodeType":"UserDefinedTypeName","pathNode":{"id":1045,"name":"IERC20","nameLocations":["4992:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"4992:6:16"},"referencedDeclaration":10558,"src":"4992:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1049,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"5025:23:16","nodeType":"VariableDeclaration","scope":1057,"src":"5017:31:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1048,"name":"uint256","nodeType":"ElementaryTypeName","src":"5017:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1051,"mutability":"mutable","name":"deadline","nameLocation":"5066:8:16","nodeType":"VariableDeclaration","scope":1057,"src":"5058:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1050,"name":"uint256","nodeType":"ElementaryTypeName","src":"5058:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1054,"mutability":"mutable","name":"feeBurner","nameLocation":"5103:9:16","nodeType":"VariableDeclaration","scope":1057,"src":"5084:28:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":1053,"nodeType":"UserDefinedTypeName","pathNode":{"id":1052,"name":"IProtocolFeeBurner","nameLocations":["5084:18:16"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"5084:18:16"},"referencedDeclaration":948,"src":"5084:18:16","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"4960:158:16"},"returnParameters":{"id":1056,"nodeType":"ParameterList","parameters":[],"src":"5127:0:16"},"scope":1137,"src":"4926:202:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1058,"nodeType":"StructuredDocumentation","src":"5134:501:16","text":" @notice The same as `sweepProtocolFeesForToken`, but for wrapped tokens.\n @param pool The pool that incurred the fees we're withdrawing\n @param feeToken The fee token in the pool\n @param minTargetTokenAmountOut The minimum number of target tokens to be received\n @param deadline Deadline for the burn operation (swap), after which it will revert\n @param feeBurner The protocol fee burner to be used (or the zero address to fall back on direct transfer)"},"functionSelector":"88f6d2a4","id":1073,"implemented":false,"kind":"function","modifiers":[],"name":"sweepProtocolFeesForWrappedToken","nameLocation":"5649:32:16","nodeType":"FunctionDefinition","parameters":{"id":1071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1060,"mutability":"mutable","name":"pool","nameLocation":"5699:4:16","nodeType":"VariableDeclaration","scope":1073,"src":"5691:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1059,"name":"address","nodeType":"ElementaryTypeName","src":"5691:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1063,"mutability":"mutable","name":"feeToken","nameLocation":"5722:8:16","nodeType":"VariableDeclaration","scope":1073,"src":"5713:17:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":1062,"nodeType":"UserDefinedTypeName","pathNode":{"id":1061,"name":"IERC4626","nameLocations":["5713:8:16"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"5713:8:16"},"referencedDeclaration":9828,"src":"5713:8:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1065,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"5748:23:16","nodeType":"VariableDeclaration","scope":1073,"src":"5740:31:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1064,"name":"uint256","nodeType":"ElementaryTypeName","src":"5740:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1067,"mutability":"mutable","name":"deadline","nameLocation":"5789:8:16","nodeType":"VariableDeclaration","scope":1073,"src":"5781:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1066,"name":"uint256","nodeType":"ElementaryTypeName","src":"5781:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1070,"mutability":"mutable","name":"feeBurner","nameLocation":"5826:9:16","nodeType":"VariableDeclaration","scope":1073,"src":"5807:28:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":1069,"nodeType":"UserDefinedTypeName","pathNode":{"id":1068,"name":"IProtocolFeeBurner","nameLocations":["5807:18:16"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"5807:18:16"},"referencedDeclaration":948,"src":"5807:18:16","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"5681:160:16"},"returnParameters":{"id":1072,"nodeType":"ParameterList","parameters":[],"src":"5850:0:16"},"scope":1137,"src":"5640:211:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1074,"nodeType":"StructuredDocumentation","src":"5857:269:16","text":" @notice Return the address of the current `ProtocolFeeController` from the Vault.\n @dev It is not immutable in the Vault, so we need to fetch it every time.\n @return protocolFeeController The address of the current `ProtocolFeeController`"},"functionSelector":"85f2dbd4","id":1080,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"6140:24:16","nodeType":"FunctionDefinition","parameters":{"id":1075,"nodeType":"ParameterList","parameters":[],"src":"6164:2:16"},"returnParameters":{"id":1079,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1078,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1080,"src":"6190:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":1077,"nodeType":"UserDefinedTypeName","pathNode":{"id":1076,"name":"IProtocolFeeController","nameLocations":["6190:22:16"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"6190:22:16"},"referencedDeclaration":1955,"src":"6190:22:16","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"6189:24:16"},"scope":1137,"src":"6131:83:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1081,"nodeType":"StructuredDocumentation","src":"6220:214:16","text":" @notice Getter for the target token.\n @dev This is the token the burner will swap all fee tokens for. Can be changed by `setTargetToken`.\n @return targetToken The current target token"},"functionSelector":"80db0d51","id":1087,"implemented":false,"kind":"function","modifiers":[],"name":"getTargetToken","nameLocation":"6448:14:16","nodeType":"FunctionDefinition","parameters":{"id":1082,"nodeType":"ParameterList","parameters":[],"src":"6462:2:16"},"returnParameters":{"id":1086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1085,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1087,"src":"6488:6:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":1084,"nodeType":"UserDefinedTypeName","pathNode":{"id":1083,"name":"IERC20","nameLocations":["6488:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"6488:6:16"},"referencedDeclaration":10558,"src":"6488:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6487:8:16"},"scope":1137,"src":"6439:57:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1088,"nodeType":"StructuredDocumentation","src":"6502:167:16","text":" @notice Getter for the current fee recipient.\n @dev Can be changed by `setFeeRecipient`.\n @return feeRecipient The current fee recipient"},"functionSelector":"4ccb20c0","id":1093,"implemented":false,"kind":"function","modifiers":[],"name":"getFeeRecipient","nameLocation":"6683:15:16","nodeType":"FunctionDefinition","parameters":{"id":1089,"nodeType":"ParameterList","parameters":[],"src":"6698:2:16"},"returnParameters":{"id":1092,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1091,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1093,"src":"6724:7:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1090,"name":"address","nodeType":"ElementaryTypeName","src":"6724:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6723:9:16"},"scope":1137,"src":"6674:59:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1094,"nodeType":"StructuredDocumentation","src":"6739:263:16","text":" @notice Check whether a given address corresponds to an approved protocol fee burner.\n @param protocolFeeBurner The address to be checked\n @return isApproved True if the given address is on the approved protocol fee burner allowlist"},"functionSelector":"9c5cee9b","id":1101,"implemented":false,"kind":"function","modifiers":[],"name":"isApprovedProtocolFeeBurner","nameLocation":"7016:27:16","nodeType":"FunctionDefinition","parameters":{"id":1097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1096,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"7052:17:16","nodeType":"VariableDeclaration","scope":1101,"src":"7044:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1095,"name":"address","nodeType":"ElementaryTypeName","src":"7044:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7043:27:16"},"returnParameters":{"id":1100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1099,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1101,"src":"7094:4:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1098,"name":"bool","nodeType":"ElementaryTypeName","src":"7094:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7093:6:16"},"scope":1137,"src":"7007:93:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1102,"nodeType":"StructuredDocumentation","src":"7106:169:16","text":" @notice Update the fee recipient address.\n @dev This is a permissioned function.\n @param feeRecipient The address of the new fee recipient"},"functionSelector":"e74b981b","id":1107,"implemented":false,"kind":"function","modifiers":[],"name":"setFeeRecipient","nameLocation":"7289:15:16","nodeType":"FunctionDefinition","parameters":{"id":1105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1104,"mutability":"mutable","name":"feeRecipient","nameLocation":"7313:12:16","nodeType":"VariableDeclaration","scope":1107,"src":"7305:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1103,"name":"address","nodeType":"ElementaryTypeName","src":"7305:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7304:22:16"},"returnParameters":{"id":1106,"nodeType":"ParameterList","parameters":[],"src":"7335:0:16"},"scope":1137,"src":"7280:56:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1108,"nodeType":"StructuredDocumentation","src":"7342:222:16","text":" @notice Update the address of the target token.\n @dev This is the token for which the burner will attempt to swap all collected fee tokens.\n @param targetToken The address of the target token"},"functionSelector":"1b66cb00","id":1114,"implemented":false,"kind":"function","modifiers":[],"name":"setTargetToken","nameLocation":"7578:14:16","nodeType":"FunctionDefinition","parameters":{"id":1112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1111,"mutability":"mutable","name":"targetToken","nameLocation":"7600:11:16","nodeType":"VariableDeclaration","scope":1114,"src":"7593:18:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":1110,"nodeType":"UserDefinedTypeName","pathNode":{"id":1109,"name":"IERC20","nameLocations":["7593:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"7593:6:16"},"referencedDeclaration":10558,"src":"7593:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"7592:20:16"},"returnParameters":{"id":1113,"nodeType":"ParameterList","parameters":[],"src":"7621:0:16"},"scope":1137,"src":"7569:53:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1115,"nodeType":"StructuredDocumentation","src":"7628:300:16","text":" @notice Add an approved fee burner to the allowlist.\n @dev This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol\n fee burners.\n @param protocolFeeBurner The address of an approved protocol fee burner to be added"},"functionSelector":"e20c482f","id":1121,"implemented":false,"kind":"function","modifiers":[],"name":"addProtocolFeeBurner","nameLocation":"7942:20:16","nodeType":"FunctionDefinition","parameters":{"id":1119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1118,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"7982:17:16","nodeType":"VariableDeclaration","scope":1121,"src":"7963:36:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":1117,"nodeType":"UserDefinedTypeName","pathNode":{"id":1116,"name":"IProtocolFeeBurner","nameLocations":["7963:18:16"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"7963:18:16"},"referencedDeclaration":948,"src":"7963:18:16","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"7962:38:16"},"returnParameters":{"id":1120,"nodeType":"ParameterList","parameters":[],"src":"8009:0:16"},"scope":1137,"src":"7933:77:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1122,"nodeType":"StructuredDocumentation","src":"8016:304:16","text":" @notice Remove a fee burner from the allowlist.\n @dev This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol\n fee burners.\n @param protocolFeeBurner The address of a protocol fee burner on the allowlist to be removed"},"functionSelector":"b11f061e","id":1128,"implemented":false,"kind":"function","modifiers":[],"name":"removeProtocolFeeBurner","nameLocation":"8334:23:16","nodeType":"FunctionDefinition","parameters":{"id":1126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1125,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"8377:17:16","nodeType":"VariableDeclaration","scope":1128,"src":"8358:36:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":1124,"nodeType":"UserDefinedTypeName","pathNode":{"id":1123,"name":"IProtocolFeeBurner","nameLocations":["8358:18:16"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"8358:18:16"},"referencedDeclaration":948,"src":"8358:18:16","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"8357:38:16"},"returnParameters":{"id":1127,"nodeType":"ParameterList","parameters":[],"src":"8404:0:16"},"scope":1137,"src":"8325:80:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1129,"nodeType":"StructuredDocumentation","src":"8411:265:16","text":" @notice Retrieve any tokens \"stuck\" in this contract (e.g., dust, or failed conversions).\n @dev It will recover the full balance of all the tokens. This can only be called by the `feeRecipient`.\n @param feeTokens The tokens to recover"},"functionSelector":"b0edcc53","id":1136,"implemented":false,"kind":"function","modifiers":[],"name":"recoverProtocolFees","nameLocation":"8690:19:16","nodeType":"FunctionDefinition","parameters":{"id":1134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1133,"mutability":"mutable","name":"feeTokens","nameLocation":"8726:9:16","nodeType":"VariableDeclaration","scope":1136,"src":"8710:25:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1131,"nodeType":"UserDefinedTypeName","pathNode":{"id":1130,"name":"IERC20","nameLocations":["8710:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"8710:6:16"},"referencedDeclaration":10558,"src":"8710:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":1132,"nodeType":"ArrayTypeName","src":"8710:8:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"8709:27:16"},"returnParameters":{"id":1135,"nodeType":"ParameterList","parameters":[],"src":"8745:0:16"},"scope":1137,"src":"8681:65:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1138,"src":"364:8384:16","usedErrors":[1014,1017,1020,1025,1030,1035,1038,1041],"usedEvents":[984,989,1001,1006,1011]}],"src":"46:8703:16"},"id":16},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol","exportedSymbols":{"ITokenPairRegistry":[1263],"SwapPathStep":[1275]},"id":1264,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol","file":"../vault/BatchRouterTypes.sol","id":1140,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1264,"sourceUnit":1326,"src":"46:61:17","symbolAliases":[{"foreign":{"id":1139,"name":"SwapPathStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1275,"src":"55:12:17","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":1141,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"109:24:17"},{"abstract":false,"baseContracts":[],"canonicalName":"ITokenPairRegistry","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":1263,"linearizedBaseContracts":[1263],"name":"ITokenPairRegistry","nameLocation":"145:18:17","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1142,"nodeType":"StructuredDocumentation","src":"170:285:17","text":" @notice Emitted when a new token pair is added to the registry.\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair\n @param pathsLength The number of paths added for the token pair"},"eventSelector":"0836045dc838da47be101a8d10036b82ec004688d856daa53cd0e56807d3bfca","id":1150,"name":"PathAdded","nameLocation":"466:9:17","nodeType":"EventDefinition","parameters":{"id":1149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1144,"indexed":true,"mutability":"mutable","name":"tokenIn","nameLocation":"492:7:17","nodeType":"VariableDeclaration","scope":1150,"src":"476:23:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1143,"name":"address","nodeType":"ElementaryTypeName","src":"476:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1146,"indexed":true,"mutability":"mutable","name":"tokenOut","nameLocation":"517:8:17","nodeType":"VariableDeclaration","scope":1150,"src":"501:24:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1145,"name":"address","nodeType":"ElementaryTypeName","src":"501:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1148,"indexed":false,"mutability":"mutable","name":"pathsLength","nameLocation":"535:11:17","nodeType":"VariableDeclaration","scope":1150,"src":"527:19:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1147,"name":"uint256","nodeType":"ElementaryTypeName","src":"527:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"475:72:17"},"src":"460:88:17"},{"anonymous":false,"documentation":{"id":1151,"nodeType":"StructuredDocumentation","src":"554:319:17","text":" @notice Emitted when an existing token pair is removed from the registry.\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair\n @param pathsLength The number of paths associated with the token pair after the removal"},"eventSelector":"a38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da","id":1159,"name":"PathRemoved","nameLocation":"884:11:17","nodeType":"EventDefinition","parameters":{"id":1158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1153,"indexed":true,"mutability":"mutable","name":"tokenIn","nameLocation":"912:7:17","nodeType":"VariableDeclaration","scope":1159,"src":"896:23:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1152,"name":"address","nodeType":"ElementaryTypeName","src":"896:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1155,"indexed":true,"mutability":"mutable","name":"tokenOut","nameLocation":"937:8:17","nodeType":"VariableDeclaration","scope":1159,"src":"921:24:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1154,"name":"address","nodeType":"ElementaryTypeName","src":"921:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1157,"indexed":false,"mutability":"mutable","name":"pathsLength","nameLocation":"955:11:17","nodeType":"VariableDeclaration","scope":1159,"src":"947:19:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1156,"name":"uint256","nodeType":"ElementaryTypeName","src":"947:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"895:72:17"},"src":"878:90:17"},{"documentation":{"id":1160,"nodeType":"StructuredDocumentation","src":"974:158:17","text":" @notice The given buffer address does not correspond to an initialized buffer.\n @param buffer The address of the uninitialized buffer"},"errorSelector":"85f41299","id":1164,"name":"BufferNotInitialized","nameLocation":"1143:20:17","nodeType":"ErrorDefinition","parameters":{"id":1163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1162,"mutability":"mutable","name":"buffer","nameLocation":"1172:6:17","nodeType":"VariableDeclaration","scope":1164,"src":"1164:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1161,"name":"address","nodeType":"ElementaryTypeName","src":"1164:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1163:16:17"},"src":"1137:43:17"},{"documentation":{"id":1165,"nodeType":"StructuredDocumentation","src":"1186:44:17","text":"@notice The path to add cannot be empty."},"errorSelector":"20a2d33d","id":1167,"name":"EmptyPath","nameLocation":"1241:9:17","nodeType":"ErrorDefinition","parameters":{"id":1166,"nodeType":"ParameterList","parameters":[],"src":"1250:2:17"},"src":"1235:18:17"},{"documentation":{"id":1168,"nodeType":"StructuredDocumentation","src":"1259:117:17","text":" @notice The given address is not a valid pool or buffer.\n @param path Pool or buffer address"},"errorSelector":"b309199b","id":1172,"name":"InvalidSimplePath","nameLocation":"1387:17:17","nodeType":"ErrorDefinition","parameters":{"id":1171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1170,"mutability":"mutable","name":"path","nameLocation":"1413:4:17","nodeType":"VariableDeclaration","scope":1172,"src":"1405:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1169,"name":"address","nodeType":"ElementaryTypeName","src":"1405:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1404:14:17"},"src":"1381:38:17"},{"documentation":{"id":1173,"nodeType":"StructuredDocumentation","src":"1425:292:17","text":" @notice The given pool or buffer is not registered as a path for the token pair.\n @param poolOrBuffer The address of the pool or buffer\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair"},"errorSelector":"3a9458d9","id":1181,"name":"InvalidRemovePath","nameLocation":"1728:17:17","nodeType":"ErrorDefinition","parameters":{"id":1180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1175,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"1754:12:17","nodeType":"VariableDeclaration","scope":1181,"src":"1746:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1174,"name":"address","nodeType":"ElementaryTypeName","src":"1746:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1177,"mutability":"mutable","name":"tokenIn","nameLocation":"1776:7:17","nodeType":"VariableDeclaration","scope":1181,"src":"1768:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1176,"name":"address","nodeType":"ElementaryTypeName","src":"1768:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1179,"mutability":"mutable","name":"tokenOut","nameLocation":"1793:8:17","nodeType":"VariableDeclaration","scope":1181,"src":"1785:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1178,"name":"address","nodeType":"ElementaryTypeName","src":"1785:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1745:57:17"},"src":"1722:81:17"},{"documentation":{"id":1182,"nodeType":"StructuredDocumentation","src":"1809:289:17","text":" @notice The output token does not match the expected address in a wrap or unwrap operation.\n @param buffer The address of the buffer\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair"},"errorSelector":"29198c3d","id":1190,"name":"InvalidBufferPath","nameLocation":"2109:17:17","nodeType":"ErrorDefinition","parameters":{"id":1189,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1184,"mutability":"mutable","name":"buffer","nameLocation":"2135:6:17","nodeType":"VariableDeclaration","scope":1190,"src":"2127:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1183,"name":"address","nodeType":"ElementaryTypeName","src":"2127:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1186,"mutability":"mutable","name":"tokenIn","nameLocation":"2151:7:17","nodeType":"VariableDeclaration","scope":1190,"src":"2143:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1185,"name":"address","nodeType":"ElementaryTypeName","src":"2143:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1188,"mutability":"mutable","name":"tokenOut","nameLocation":"2168:8:17","nodeType":"VariableDeclaration","scope":1190,"src":"2160:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1187,"name":"address","nodeType":"ElementaryTypeName","src":"2160:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2126:51:17"},"src":"2103:75:17"},{"documentation":{"id":1191,"nodeType":"StructuredDocumentation","src":"2184:80:17","text":"@notice Attempted to remove a path at an index beyond the registered length."},"errorSelector":"4e23d035","id":1193,"name":"IndexOutOfBounds","nameLocation":"2275:16:17","nodeType":"ErrorDefinition","parameters":{"id":1192,"nodeType":"ParameterList","parameters":[],"src":"2291:2:17"},"src":"2269:25:17"},{"documentation":{"id":1194,"nodeType":"StructuredDocumentation","src":"2300:432:17","text":" @notice Returns the path for a given token pair at a specific index.\n @dev Safe version; reverts if the index is out of bounds.\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair\n @param index The index of the path in the list of paths for the token pair\n @return The path at the specified index for the token pair"},"functionSelector":"057074ff","id":1207,"implemented":false,"kind":"function","modifiers":[],"name":"getPathAt","nameLocation":"2746:9:17","nodeType":"FunctionDefinition","parameters":{"id":1201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1196,"mutability":"mutable","name":"tokenIn","nameLocation":"2764:7:17","nodeType":"VariableDeclaration","scope":1207,"src":"2756:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1195,"name":"address","nodeType":"ElementaryTypeName","src":"2756:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1198,"mutability":"mutable","name":"tokenOut","nameLocation":"2781:8:17","nodeType":"VariableDeclaration","scope":1207,"src":"2773:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1197,"name":"address","nodeType":"ElementaryTypeName","src":"2773:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1200,"mutability":"mutable","name":"index","nameLocation":"2799:5:17","nodeType":"VariableDeclaration","scope":1207,"src":"2791:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1199,"name":"uint256","nodeType":"ElementaryTypeName","src":"2791:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2755:50:17"},"returnParameters":{"id":1206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1205,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1207,"src":"2829:21:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":1203,"nodeType":"UserDefinedTypeName","pathNode":{"id":1202,"name":"SwapPathStep","nameLocations":["2829:12:17"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"2829:12:17"},"referencedDeclaration":1275,"src":"2829:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":1204,"nodeType":"ArrayTypeName","src":"2829:14:17","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"}],"src":"2828:23:17"},"scope":1263,"src":"2737:115:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1208,"nodeType":"StructuredDocumentation","src":"2858:286:17","text":" @notice Returns the number of paths registered for a given token pair.\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair\n @return The number of paths registered for the token pair"},"functionSelector":"94ee0a3b","id":1217,"implemented":false,"kind":"function","modifiers":[],"name":"getPathCount","nameLocation":"3158:12:17","nodeType":"FunctionDefinition","parameters":{"id":1213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1210,"mutability":"mutable","name":"tokenIn","nameLocation":"3179:7:17","nodeType":"VariableDeclaration","scope":1217,"src":"3171:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1209,"name":"address","nodeType":"ElementaryTypeName","src":"3171:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1212,"mutability":"mutable","name":"tokenOut","nameLocation":"3196:8:17","nodeType":"VariableDeclaration","scope":1217,"src":"3188:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1211,"name":"address","nodeType":"ElementaryTypeName","src":"3188:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3170:35:17"},"returnParameters":{"id":1216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1215,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1217,"src":"3229:7:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1214,"name":"uint256","nodeType":"ElementaryTypeName","src":"3229:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3228:9:17"},"scope":1263,"src":"3149:89:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1218,"nodeType":"StructuredDocumentation","src":"3244:283:17","text":" @notice Returns the paths registered for a given token pair.\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair\n @return An array of path addresses registered for the token pair"},"functionSelector":"7c7d370a","id":1230,"implemented":false,"kind":"function","modifiers":[],"name":"getPaths","nameLocation":"3541:8:17","nodeType":"FunctionDefinition","parameters":{"id":1223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1220,"mutability":"mutable","name":"tokenIn","nameLocation":"3558:7:17","nodeType":"VariableDeclaration","scope":1230,"src":"3550:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1219,"name":"address","nodeType":"ElementaryTypeName","src":"3550:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1222,"mutability":"mutable","name":"tokenOut","nameLocation":"3575:8:17","nodeType":"VariableDeclaration","scope":1230,"src":"3567:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1221,"name":"address","nodeType":"ElementaryTypeName","src":"3567:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3549:35:17"},"returnParameters":{"id":1229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1228,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1230,"src":"3608:23:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep[][]"},"typeName":{"baseType":{"baseType":{"id":1225,"nodeType":"UserDefinedTypeName","pathNode":{"id":1224,"name":"SwapPathStep","nameLocations":["3608:12:17"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"3608:12:17"},"referencedDeclaration":1275,"src":"3608:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":1226,"nodeType":"ArrayTypeName","src":"3608:14:17","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":1227,"nodeType":"ArrayTypeName","src":"3608:16:17","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}},"visibility":"internal"}],"src":"3607:25:17"},"scope":1263,"src":"3532:101:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1231,"nodeType":"StructuredDocumentation","src":"3639:606:17","text":" @notice Adds an arbitrary path between `tokenIn` and the last step's `tokenOut` to the registry.\n @dev This function is permissioned. Use it to register boosted pool paths with leading / trailing buffer steps.\n The registry will validate that each step is valid (i.e. each pool step contains the `tokenIn` and `tokenOut`,\n and each buffer step has the correct wrapped / underlying token).\n @param tokenIn The address of the input token in the pair\n @param steps An array of `SwapPathStep` structs representing the path steps to reach the output token"},"functionSelector":"815ca70f","id":1240,"implemented":false,"kind":"function","modifiers":[],"name":"addPath","nameLocation":"4259:7:17","nodeType":"FunctionDefinition","parameters":{"id":1238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1233,"mutability":"mutable","name":"tokenIn","nameLocation":"4275:7:17","nodeType":"VariableDeclaration","scope":1240,"src":"4267:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1232,"name":"address","nodeType":"ElementaryTypeName","src":"4267:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1237,"mutability":"mutable","name":"steps","nameLocation":"4306:5:17","nodeType":"VariableDeclaration","scope":1240,"src":"4284:27:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":1235,"nodeType":"UserDefinedTypeName","pathNode":{"id":1234,"name":"SwapPathStep","nameLocations":["4284:12:17"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"4284:12:17"},"referencedDeclaration":1275,"src":"4284:12:17","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":1236,"nodeType":"ArrayTypeName","src":"4284:14:17","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"}],"src":"4266:46:17"},"returnParameters":{"id":1239,"nodeType":"ParameterList","parameters":[],"src":"4321:0:17"},"scope":1263,"src":"4250:72:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1241,"nodeType":"StructuredDocumentation","src":"4328:202:17","text":" @notice Adds a pool or buffer to the registry with all token pairs it supports.\n @dev This function is permissioned.\n @param poolOrBuffer The address of the pool or buffer"},"functionSelector":"f335b520","id":1246,"implemented":false,"kind":"function","modifiers":[],"name":"addSimplePath","nameLocation":"4544:13:17","nodeType":"FunctionDefinition","parameters":{"id":1244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1243,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"4566:12:17","nodeType":"VariableDeclaration","scope":1246,"src":"4558:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1242,"name":"address","nodeType":"ElementaryTypeName","src":"4558:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4557:22:17"},"returnParameters":{"id":1245,"nodeType":"ParameterList","parameters":[],"src":"4588:0:17"},"scope":1263,"src":"4535:54:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1247,"nodeType":"StructuredDocumentation","src":"4595:355:17","text":" @notice Removes an arbitrary path from the registry at a given index.\n @dev This function is permissioned.\n @param tokenIn The address of the input token in the pair\n @param tokenOut The address of the output token in the pair\n @param index The index of the path to remove in the list of paths for the token pair"},"functionSelector":"32fffdbd","id":1256,"implemented":false,"kind":"function","modifiers":[],"name":"removePathAtIndex","nameLocation":"4964:17:17","nodeType":"FunctionDefinition","parameters":{"id":1254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1249,"mutability":"mutable","name":"tokenIn","nameLocation":"4990:7:17","nodeType":"VariableDeclaration","scope":1256,"src":"4982:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1248,"name":"address","nodeType":"ElementaryTypeName","src":"4982:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1251,"mutability":"mutable","name":"tokenOut","nameLocation":"5007:8:17","nodeType":"VariableDeclaration","scope":1256,"src":"4999:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1250,"name":"address","nodeType":"ElementaryTypeName","src":"4999:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1253,"mutability":"mutable","name":"index","nameLocation":"5025:5:17","nodeType":"VariableDeclaration","scope":1256,"src":"5017:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1252,"name":"uint256","nodeType":"ElementaryTypeName","src":"5017:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4981:50:17"},"returnParameters":{"id":1255,"nodeType":"ParameterList","parameters":[],"src":"5040:0:17"},"scope":1263,"src":"4955:86:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1257,"nodeType":"StructuredDocumentation","src":"5047:193:17","text":" @notice Removes all token paths registered for a given pool or buffer.\n @dev This function is permissioned.\n @param poolOrBuffer The address of the pool or buffer"},"functionSelector":"bc138aa3","id":1262,"implemented":false,"kind":"function","modifiers":[],"name":"removeSimplePath","nameLocation":"5254:16:17","nodeType":"FunctionDefinition","parameters":{"id":1260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1259,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"5279:12:17","nodeType":"VariableDeclaration","scope":1262,"src":"5271:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1258,"name":"address","nodeType":"ElementaryTypeName","src":"5271:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5270:22:17"},"returnParameters":{"id":1261,"nodeType":"ParameterList","parameters":[],"src":"5301:0:17"},"scope":1263,"src":"5245:57:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1264,"src":"135:5169:17","usedErrors":[1164,1167,1172,1181,1190,1193],"usedEvents":[1150,1159]}],"src":"46:5259:17"},"id":17},"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol","exportedSymbols":{"IERC20":[10558],"SwapExactInHookParams":[1312],"SwapExactOutHookParams":[1325],"SwapPathExactAmountIn":[1287],"SwapPathExactAmountOut":[1299],"SwapPathStep":[1275]},"id":1326,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1265,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:18"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1267,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1326,"sourceUnit":10559,"src":"72:72:18","symbolAliases":[{"foreign":{"id":1266,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"81:6:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"SwapPathStep","id":1275,"members":[{"constant":false,"id":1269,"mutability":"mutable","name":"pool","nameLocation":"180:4:18","nodeType":"VariableDeclaration","scope":1275,"src":"172:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1268,"name":"address","nodeType":"ElementaryTypeName","src":"172:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1272,"mutability":"mutable","name":"tokenOut","nameLocation":"197:8:18","nodeType":"VariableDeclaration","scope":1275,"src":"190:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":1271,"nodeType":"UserDefinedTypeName","pathNode":{"id":1270,"name":"IERC20","nameLocations":["190:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"190:6:18"},"referencedDeclaration":10558,"src":"190:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1274,"mutability":"mutable","name":"isBuffer","nameLocation":"331:8:18","nodeType":"VariableDeclaration","scope":1275,"src":"326:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1273,"name":"bool","nodeType":"ElementaryTypeName","src":"326:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"SwapPathStep","nameLocation":"153:12:18","nodeType":"StructDefinition","scope":1326,"src":"146:196:18","visibility":"public"},{"canonicalName":"SwapPathExactAmountIn","id":1287,"members":[{"constant":false,"id":1278,"mutability":"mutable","name":"tokenIn","nameLocation":"386:7:18","nodeType":"VariableDeclaration","scope":1287,"src":"379:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":1277,"nodeType":"UserDefinedTypeName","pathNode":{"id":1276,"name":"IERC20","nameLocations":["379:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"379:6:18"},"referencedDeclaration":10558,"src":"379:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1282,"mutability":"mutable","name":"steps","nameLocation":"563:5:18","nodeType":"VariableDeclaration","scope":1287,"src":"548:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":1280,"nodeType":"UserDefinedTypeName","pathNode":{"id":1279,"name":"SwapPathStep","nameLocations":["548:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"548:12:18"},"referencedDeclaration":1275,"src":"548:12:18","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":1281,"nodeType":"ArrayTypeName","src":"548:14:18","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"},{"constant":false,"id":1284,"mutability":"mutable","name":"exactAmountIn","nameLocation":"582:13:18","nodeType":"VariableDeclaration","scope":1287,"src":"574:21:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1283,"name":"uint256","nodeType":"ElementaryTypeName","src":"574:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1286,"mutability":"mutable","name":"minAmountOut","nameLocation":"609:12:18","nodeType":"VariableDeclaration","scope":1287,"src":"601:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1285,"name":"uint256","nodeType":"ElementaryTypeName","src":"601:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapPathExactAmountIn","nameLocation":"351:21:18","nodeType":"StructDefinition","scope":1326,"src":"344:280:18","visibility":"public"},{"canonicalName":"SwapPathExactAmountOut","id":1299,"members":[{"constant":false,"id":1290,"mutability":"mutable","name":"tokenIn","nameLocation":"669:7:18","nodeType":"VariableDeclaration","scope":1299,"src":"662:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":1289,"nodeType":"UserDefinedTypeName","pathNode":{"id":1288,"name":"IERC20","nameLocations":["662:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"662:6:18"},"referencedDeclaration":10558,"src":"662:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1294,"mutability":"mutable","name":"steps","nameLocation":"859:5:18","nodeType":"VariableDeclaration","scope":1299,"src":"844:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":1292,"nodeType":"UserDefinedTypeName","pathNode":{"id":1291,"name":"SwapPathStep","nameLocations":["844:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"844:12:18"},"referencedDeclaration":1275,"src":"844:12:18","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":1293,"nodeType":"ArrayTypeName","src":"844:14:18","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"},{"constant":false,"id":1296,"mutability":"mutable","name":"maxAmountIn","nameLocation":"878:11:18","nodeType":"VariableDeclaration","scope":1299,"src":"870:19:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1295,"name":"uint256","nodeType":"ElementaryTypeName","src":"870:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1298,"mutability":"mutable","name":"exactAmountOut","nameLocation":"903:14:18","nodeType":"VariableDeclaration","scope":1299,"src":"895:22:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1297,"name":"uint256","nodeType":"ElementaryTypeName","src":"895:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapPathExactAmountOut","nameLocation":"633:22:18","nodeType":"StructDefinition","scope":1326,"src":"626:294:18","visibility":"public"},{"canonicalName":"SwapExactInHookParams","id":1312,"members":[{"constant":false,"id":1301,"mutability":"mutable","name":"sender","nameLocation":"965:6:18","nodeType":"VariableDeclaration","scope":1312,"src":"957:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1300,"name":"address","nodeType":"ElementaryTypeName","src":"957:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1305,"mutability":"mutable","name":"paths","nameLocation":"1001:5:18","nodeType":"VariableDeclaration","scope":1312,"src":"977:29:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1287_storage_$dyn_storage_ptr","typeString":"struct SwapPathExactAmountIn[]"},"typeName":{"baseType":{"id":1303,"nodeType":"UserDefinedTypeName","pathNode":{"id":1302,"name":"SwapPathExactAmountIn","nameLocations":["977:21:18"],"nodeType":"IdentifierPath","referencedDeclaration":1287,"src":"977:21:18"},"referencedDeclaration":1287,"src":"977:21:18","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountIn_$1287_storage_ptr","typeString":"struct SwapPathExactAmountIn"}},"id":1304,"nodeType":"ArrayTypeName","src":"977:23:18","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1287_storage_$dyn_storage_ptr","typeString":"struct SwapPathExactAmountIn[]"}},"visibility":"internal"},{"constant":false,"id":1307,"mutability":"mutable","name":"deadline","nameLocation":"1020:8:18","nodeType":"VariableDeclaration","scope":1312,"src":"1012:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1306,"name":"uint256","nodeType":"ElementaryTypeName","src":"1012:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1309,"mutability":"mutable","name":"wethIsEth","nameLocation":"1039:9:18","nodeType":"VariableDeclaration","scope":1312,"src":"1034:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1308,"name":"bool","nodeType":"ElementaryTypeName","src":"1034:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1311,"mutability":"mutable","name":"userData","nameLocation":"1060:8:18","nodeType":"VariableDeclaration","scope":1312,"src":"1054:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":1310,"name":"bytes","nodeType":"ElementaryTypeName","src":"1054:5:18","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"SwapExactInHookParams","nameLocation":"929:21:18","nodeType":"StructDefinition","scope":1326,"src":"922:149:18","visibility":"public"},{"canonicalName":"SwapExactOutHookParams","id":1325,"members":[{"constant":false,"id":1314,"mutability":"mutable","name":"sender","nameLocation":"1117:6:18","nodeType":"VariableDeclaration","scope":1325,"src":"1109:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1313,"name":"address","nodeType":"ElementaryTypeName","src":"1109:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1318,"mutability":"mutable","name":"paths","nameLocation":"1154:5:18","nodeType":"VariableDeclaration","scope":1325,"src":"1129:30:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1299_storage_$dyn_storage_ptr","typeString":"struct SwapPathExactAmountOut[]"},"typeName":{"baseType":{"id":1316,"nodeType":"UserDefinedTypeName","pathNode":{"id":1315,"name":"SwapPathExactAmountOut","nameLocations":["1129:22:18"],"nodeType":"IdentifierPath","referencedDeclaration":1299,"src":"1129:22:18"},"referencedDeclaration":1299,"src":"1129:22:18","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1299_storage_ptr","typeString":"struct SwapPathExactAmountOut"}},"id":1317,"nodeType":"ArrayTypeName","src":"1129:24:18","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1299_storage_$dyn_storage_ptr","typeString":"struct SwapPathExactAmountOut[]"}},"visibility":"internal"},{"constant":false,"id":1320,"mutability":"mutable","name":"deadline","nameLocation":"1173:8:18","nodeType":"VariableDeclaration","scope":1325,"src":"1165:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1319,"name":"uint256","nodeType":"ElementaryTypeName","src":"1165:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1322,"mutability":"mutable","name":"wethIsEth","nameLocation":"1192:9:18","nodeType":"VariableDeclaration","scope":1325,"src":"1187:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1321,"name":"bool","nodeType":"ElementaryTypeName","src":"1187:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1324,"mutability":"mutable","name":"userData","nameLocation":"1213:8:18","nodeType":"VariableDeclaration","scope":1325,"src":"1207:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":1323,"name":"bytes","nodeType":"ElementaryTypeName","src":"1207:5:18","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"SwapExactOutHookParams","nameLocation":"1080:22:18","nodeType":"StructDefinition","scope":1326,"src":"1073:151:18","visibility":"public"}],"src":"46:1179:18"},"id":18},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","exportedSymbols":{"IAuthorizer":[1341]},"id":1342,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1327,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:19"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthorizer","contractDependencies":[],"contractKind":"interface","documentation":{"id":1328,"nodeType":"StructuredDocumentation","src":"72:56:19","text":"@notice Interface to the Vault's permission system."},"fullyImplemented":false,"id":1341,"linearizedBaseContracts":[1341],"name":"IAuthorizer","nameLocation":"138:11:19","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1329,"nodeType":"StructuredDocumentation","src":"156:354:19","text":" @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n @param actionId Identifier for the action to be performed\n @param account Account trying to perform the action\n @param where Target contract for the action\n @return success True if the action is permitted"},"functionSelector":"9be2a884","id":1340,"implemented":false,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"524:10:19","nodeType":"FunctionDefinition","parameters":{"id":1336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1331,"mutability":"mutable","name":"actionId","nameLocation":"543:8:19","nodeType":"VariableDeclaration","scope":1340,"src":"535:16:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1330,"name":"bytes32","nodeType":"ElementaryTypeName","src":"535:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1333,"mutability":"mutable","name":"account","nameLocation":"561:7:19","nodeType":"VariableDeclaration","scope":1340,"src":"553:15:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1332,"name":"address","nodeType":"ElementaryTypeName","src":"553:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1335,"mutability":"mutable","name":"where","nameLocation":"578:5:19","nodeType":"VariableDeclaration","scope":1340,"src":"570:13:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1334,"name":"address","nodeType":"ElementaryTypeName","src":"570:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"534:50:19"},"returnParameters":{"id":1339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1338,"mutability":"mutable","name":"success","nameLocation":"613:7:19","nodeType":"VariableDeclaration","scope":1340,"src":"608:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1337,"name":"bool","nodeType":"ElementaryTypeName","src":"608:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"607:14:19"},"scope":1341,"src":"515:107:19","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1342,"src":"128:496:19","usedErrors":[],"usedEvents":[]}],"src":"46:579:19"},"id":19},"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","exportedSymbols":{"IAuthentication":[14],"IBasePoolFactory":[1415]},"id":1416,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1343,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:20"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"../solidity-utils/helpers/IAuthentication.sol","id":1345,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1416,"sourceUnit":15,"src":"72:80:20","symbolAliases":[{"foreign":{"id":1344,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"81:15:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1347,"name":"IAuthentication","nameLocations":["454:15:20"],"nodeType":"IdentifierPath","referencedDeclaration":14,"src":"454:15:20"},"id":1348,"nodeType":"InheritanceSpecifier","src":"454:15:20"}],"canonicalName":"IBasePoolFactory","contractDependencies":[],"contractKind":"interface","documentation":{"id":1346,"nodeType":"StructuredDocumentation","src":"154:269:20","text":" @notice Base interface for a Balancer Pool Factory.\n @dev All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types\n (e.g., address prediction, tracking deployed pools, and governance-facilitated migration)."},"fullyImplemented":false,"id":1415,"linearizedBaseContracts":[1415,14],"name":"IBasePoolFactory","nameLocation":"434:16:20","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1349,"nodeType":"StructuredDocumentation","src":"476:94:20","text":" @notice A pool was deployed.\n @param pool The address of the new pool"},"eventSelector":"83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc","id":1353,"name":"PoolCreated","nameLocation":"581:11:20","nodeType":"EventDefinition","parameters":{"id":1352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1351,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"609:4:20","nodeType":"VariableDeclaration","scope":1353,"src":"593:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1350,"name":"address","nodeType":"ElementaryTypeName","src":"593:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"592:22:20"},"src":"575:40:20"},{"anonymous":false,"documentation":{"id":1354,"nodeType":"StructuredDocumentation","src":"621:51:20","text":"@notice The factory was disabled by governance."},"eventSelector":"432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d50","id":1356,"name":"FactoryDisabled","nameLocation":"683:15:20","nodeType":"EventDefinition","parameters":{"id":1355,"nodeType":"ParameterList","parameters":[],"src":"698:2:20"},"src":"677:24:20"},{"documentation":{"id":1357,"nodeType":"StructuredDocumentation","src":"707:67:20","text":"@notice Attempted pool creation after the factory was disabled."},"errorSelector":"75884cda","id":1359,"name":"Disabled","nameLocation":"785:8:20","nodeType":"ErrorDefinition","parameters":{"id":1358,"nodeType":"ParameterList","parameters":[],"src":"793:2:20"},"src":"779:17:20"},{"documentation":{"id":1360,"nodeType":"StructuredDocumentation","src":"802:67:20","text":"@notice A pool index is beyond the current bounds of the array."},"errorSelector":"4e23d035","id":1362,"name":"IndexOutOfBounds","nameLocation":"880:16:20","nodeType":"ErrorDefinition","parameters":{"id":1361,"nodeType":"ParameterList","parameters":[],"src":"896:2:20"},"src":"874:25:20"},{"documentation":{"id":1363,"nodeType":"StructuredDocumentation","src":"905:180:20","text":" @notice Check whether a pool was deployed by this factory.\n @param pool The pool to check\n @return success True if `pool` was created by this factory"},"functionSelector":"6634b753","id":1370,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolFromFactory","nameLocation":"1099:17:20","nodeType":"FunctionDefinition","parameters":{"id":1366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1365,"mutability":"mutable","name":"pool","nameLocation":"1125:4:20","nodeType":"VariableDeclaration","scope":1370,"src":"1117:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1364,"name":"address","nodeType":"ElementaryTypeName","src":"1117:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1116:14:20"},"returnParameters":{"id":1369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1368,"mutability":"mutable","name":"success","nameLocation":"1159:7:20","nodeType":"VariableDeclaration","scope":1370,"src":"1154:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1367,"name":"bool","nodeType":"ElementaryTypeName","src":"1154:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1153:14:20"},"scope":1415,"src":"1090:78:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1371,"nodeType":"StructuredDocumentation","src":"1174:245:20","text":" @notice Return the total number of pools deployed by this factory.\n @dev This can then be used to \"paginate\" calls to `getPools` to control gas costs.\n @return poolCount The number of pools deployed by this factory"},"functionSelector":"8eec5d70","id":1376,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCount","nameLocation":"1433:12:20","nodeType":"FunctionDefinition","parameters":{"id":1372,"nodeType":"ParameterList","parameters":[],"src":"1445:2:20"},"returnParameters":{"id":1375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1374,"mutability":"mutable","name":"poolCount","nameLocation":"1479:9:20","nodeType":"VariableDeclaration","scope":1376,"src":"1471:17:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1373,"name":"uint256","nodeType":"ElementaryTypeName","src":"1471:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1470:19:20"},"scope":1415,"src":"1424:66:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1377,"nodeType":"StructuredDocumentation","src":"1496:510:20","text":" @notice Return a subset of the list of pools deployed by this factory.\n @dev `start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply\n stop at the end and return fewer results than requested.\n @param start The index of the first pool to return\n @param count The maximum number of pools to return\n @return pools The list of pools deployed by this factory, starting at `start` and returning up to `count` pools"},"functionSelector":"53a72f7e","id":1387,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolsInRange","nameLocation":"2020:15:20","nodeType":"FunctionDefinition","parameters":{"id":1382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1379,"mutability":"mutable","name":"start","nameLocation":"2044:5:20","nodeType":"VariableDeclaration","scope":1387,"src":"2036:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1378,"name":"uint256","nodeType":"ElementaryTypeName","src":"2036:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1381,"mutability":"mutable","name":"count","nameLocation":"2059:5:20","nodeType":"VariableDeclaration","scope":1387,"src":"2051:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1380,"name":"uint256","nodeType":"ElementaryTypeName","src":"2051:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2035:30:20"},"returnParameters":{"id":1386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1385,"mutability":"mutable","name":"pools","nameLocation":"2106:5:20","nodeType":"VariableDeclaration","scope":1387,"src":"2089:22:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1383,"name":"address","nodeType":"ElementaryTypeName","src":"2089:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1384,"nodeType":"ArrayTypeName","src":"2089:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2088:24:20"},"scope":1415,"src":"2011:102:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1388,"nodeType":"StructuredDocumentation","src":"2119:150:20","text":" @notice Return the complete list of pools deployed by this factory.\n @return pools The list of pools deployed by this factory"},"functionSelector":"673a2a1f","id":1394,"implemented":false,"kind":"function","modifiers":[],"name":"getPools","nameLocation":"2283:8:20","nodeType":"FunctionDefinition","parameters":{"id":1389,"nodeType":"ParameterList","parameters":[],"src":"2291:2:20"},"returnParameters":{"id":1393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1392,"mutability":"mutable","name":"pools","nameLocation":"2334:5:20","nodeType":"VariableDeclaration","scope":1394,"src":"2317:22:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1390,"name":"address","nodeType":"ElementaryTypeName","src":"2317:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1391,"nodeType":"ArrayTypeName","src":"2317:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2316:24:20"},"scope":1415,"src":"2274:67:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1395,"nodeType":"StructuredDocumentation","src":"2347:322:20","text":" @notice Return the address where a new pool will be deployed, based on the factory address and salt.\n @param constructorArgs The arguments used to create the pool\n @param salt The salt used to deploy the pool\n @return deploymentAddress The predicted address of the pool, given the salt"},"functionSelector":"44f6fec7","id":1404,"implemented":false,"kind":"function","modifiers":[],"name":"getDeploymentAddress","nameLocation":"2683:20:20","nodeType":"FunctionDefinition","parameters":{"id":1400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1397,"mutability":"mutable","name":"constructorArgs","nameLocation":"2726:15:20","nodeType":"VariableDeclaration","scope":1404,"src":"2713:28:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1396,"name":"bytes","nodeType":"ElementaryTypeName","src":"2713:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1399,"mutability":"mutable","name":"salt","nameLocation":"2759:4:20","nodeType":"VariableDeclaration","scope":1404,"src":"2751:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1398,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2751:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2703:66:20"},"returnParameters":{"id":1403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1402,"mutability":"mutable","name":"deploymentAddress","nameLocation":"2801:17:20","nodeType":"VariableDeclaration","scope":1404,"src":"2793:25:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1401,"name":"address","nodeType":"ElementaryTypeName","src":"2793:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2792:27:20"},"scope":1415,"src":"2674:146:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1405,"nodeType":"StructuredDocumentation","src":"2826:143:20","text":" @notice Check whether this factory has been disabled by governance.\n @return success True if this factory was disabled"},"functionSelector":"6c57f5a9","id":1410,"implemented":false,"kind":"function","modifiers":[],"name":"isDisabled","nameLocation":"2983:10:20","nodeType":"FunctionDefinition","parameters":{"id":1406,"nodeType":"ParameterList","parameters":[],"src":"2993:2:20"},"returnParameters":{"id":1409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1408,"mutability":"mutable","name":"success","nameLocation":"3024:7:20","nodeType":"VariableDeclaration","scope":1410,"src":"3019:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1407,"name":"bool","nodeType":"ElementaryTypeName","src":"3019:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3018:14:20"},"scope":1415,"src":"2974:59:20","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1411,"nodeType":"StructuredDocumentation","src":"3039:182:20","text":" @notice Disable the factory, preventing the creation of more pools.\n @dev Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled."},"functionSelector":"2f2770db","id":1414,"implemented":false,"kind":"function","modifiers":[],"name":"disable","nameLocation":"3235:7:20","nodeType":"FunctionDefinition","parameters":{"id":1412,"nodeType":"ParameterList","parameters":[],"src":"3242:2:20"},"returnParameters":{"id":1413,"nodeType":"ParameterList","parameters":[],"src":"3253:0:20"},"scope":1415,"src":"3226:28:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1416,"src":"424:2832:20","usedErrors":[5,1359,1362],"usedEvents":[1353,1356]}],"src":"46:3211:20"},"id":20},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","exportedSymbols":{"AddLiquidityKind":[4223],"AfterSwapParams":[4217],"HookFlags":[4043],"IHooks":[1617],"LiquidityManagement":[3996],"PoolSwapParams":[4188],"RemoveLiquidityKind":[4244],"SwapKind":[4151],"TokenConfig":[4110]},"id":1618,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1417,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:21"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1426,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1618,"sourceUnit":4288,"src":"289:193:21","symbolAliases":[{"foreign":{"id":1418,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4110,"src":"302:11:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1419,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3996,"src":"319:19:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1420,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4188,"src":"344:14:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1421,"name":"AfterSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4217,"src":"364:15:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1422,"name":"HookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4043,"src":"385:9:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1423,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4223,"src":"400:16:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1424,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4244,"src":"422:19:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1425,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4151,"src":"447:8:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IHooks","contractDependencies":[],"contractKind":"interface","documentation":{"id":1427,"nodeType":"StructuredDocumentation","src":"484:490:21","text":" @notice Interface for pool hooks.\n @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)"},"fullyImplemented":false,"id":1617,"linearizedBaseContracts":[1617],"name":"IHooks","nameLocation":"985:6:21","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1428,"nodeType":"StructuredDocumentation","src":"1205:769:21","text":" @notice Hook executed when a pool is registered with a non-zero hooks contract.\n @dev Returns true if registration was successful, and false to revert the pool registration.\n Make sure this function is properly implemented (e.g. check the factory, and check that the\n given pool is from the factory). The Vault address will be msg.sender.\n @param factory Address of the pool factory (contract deploying the pool)\n @param pool Address of the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param liquidityManagement Liquidity management flags indicating which functions are enabled\n @return success True if the hook allowed the registration, false otherwise"},"functionSelector":"0b89f182","id":1444,"implemented":false,"kind":"function","modifiers":[],"name":"onRegister","nameLocation":"1988:10:21","nodeType":"FunctionDefinition","parameters":{"id":1440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1430,"mutability":"mutable","name":"factory","nameLocation":"2016:7:21","nodeType":"VariableDeclaration","scope":1444,"src":"2008:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1429,"name":"address","nodeType":"ElementaryTypeName","src":"2008:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1432,"mutability":"mutable","name":"pool","nameLocation":"2041:4:21","nodeType":"VariableDeclaration","scope":1444,"src":"2033:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1431,"name":"address","nodeType":"ElementaryTypeName","src":"2033:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1436,"mutability":"mutable","name":"tokenConfig","nameLocation":"2076:11:21","nodeType":"VariableDeclaration","scope":1444,"src":"2055:32:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4110_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1434,"nodeType":"UserDefinedTypeName","pathNode":{"id":1433,"name":"TokenConfig","nameLocations":["2055:11:21"],"nodeType":"IdentifierPath","referencedDeclaration":4110,"src":"2055:11:21"},"referencedDeclaration":4110,"src":"2055:11:21","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4110_storage_ptr","typeString":"struct TokenConfig"}},"id":1435,"nodeType":"ArrayTypeName","src":"2055:13:21","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4110_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1439,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2126:19:21","nodeType":"VariableDeclaration","scope":1444,"src":"2097:48:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$3996_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1438,"nodeType":"UserDefinedTypeName","pathNode":{"id":1437,"name":"LiquidityManagement","nameLocations":["2097:19:21"],"nodeType":"IdentifierPath","referencedDeclaration":3996,"src":"2097:19:21"},"referencedDeclaration":3996,"src":"2097:19:21","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$3996_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1998:153:21"},"returnParameters":{"id":1443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1442,"mutability":"mutable","name":"success","nameLocation":"2175:7:21","nodeType":"VariableDeclaration","scope":1444,"src":"2170:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1441,"name":"bool","nodeType":"ElementaryTypeName","src":"2170:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2169:14:21"},"scope":1617,"src":"1979:205:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1445,"nodeType":"StructuredDocumentation","src":"2190:412:21","text":" @notice Return the set of hooks implemented by the contract.\n @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n `onRegister` is the only \"mandatory\" hook.\n @return hookFlags Flags indicating which hooks the contract supports"},"functionSelector":"d77153a7","id":1451,"implemented":false,"kind":"function","modifiers":[],"name":"getHookFlags","nameLocation":"2616:12:21","nodeType":"FunctionDefinition","parameters":{"id":1446,"nodeType":"ParameterList","parameters":[],"src":"2628:2:21"},"returnParameters":{"id":1450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1449,"mutability":"mutable","name":"hookFlags","nameLocation":"2671:9:21","nodeType":"VariableDeclaration","scope":1451,"src":"2654:26:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4043_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":1448,"nodeType":"UserDefinedTypeName","pathNode":{"id":1447,"name":"HookFlags","nameLocations":["2654:9:21"],"nodeType":"IdentifierPath","referencedDeclaration":4043,"src":"2654:9:21"},"referencedDeclaration":4043,"src":"2654:9:21","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4043_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"src":"2653:28:21"},"scope":1617,"src":"2607:75:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1452,"nodeType":"StructuredDocumentation","src":"2897:484:21","text":" @notice Hook executed before pool initialization.\n @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with initialization"},"functionSelector":"1c149e28","id":1462,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeInitialize","nameLocation":"3395:18:21","nodeType":"FunctionDefinition","parameters":{"id":1458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1455,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"3431:14:21","nodeType":"VariableDeclaration","scope":1462,"src":"3414:31:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1453,"name":"uint256","nodeType":"ElementaryTypeName","src":"3414:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1454,"nodeType":"ArrayTypeName","src":"3414:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1457,"mutability":"mutable","name":"userData","nameLocation":"3460:8:21","nodeType":"VariableDeclaration","scope":1462,"src":"3447:21:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1456,"name":"bytes","nodeType":"ElementaryTypeName","src":"3447:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3413:56:21"},"returnParameters":{"id":1461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1460,"mutability":"mutable","name":"success","nameLocation":"3493:7:21","nodeType":"VariableDeclaration","scope":1462,"src":"3488:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1459,"name":"bool","nodeType":"ElementaryTypeName","src":"3488:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3487:14:21"},"scope":1617,"src":"3386:116:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1463,"nodeType":"StructuredDocumentation","src":"3508:563:21","text":" @notice Hook to be executed after pool initialization.\n @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param bptAmountOut Amount of pool tokens minted during initialization\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool accepts the initialization results"},"functionSelector":"38be241d","id":1475,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterInitialize","nameLocation":"4085:17:21","nodeType":"FunctionDefinition","parameters":{"id":1471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1466,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"4129:14:21","nodeType":"VariableDeclaration","scope":1475,"src":"4112:31:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1464,"name":"uint256","nodeType":"ElementaryTypeName","src":"4112:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1465,"nodeType":"ArrayTypeName","src":"4112:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1468,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4161:12:21","nodeType":"VariableDeclaration","scope":1475,"src":"4153:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1467,"name":"uint256","nodeType":"ElementaryTypeName","src":"4153:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1470,"mutability":"mutable","name":"userData","nameLocation":"4196:8:21","nodeType":"VariableDeclaration","scope":1475,"src":"4183:21:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1469,"name":"bytes","nodeType":"ElementaryTypeName","src":"4183:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4102:108:21"},"returnParameters":{"id":1474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1473,"mutability":"mutable","name":"success","nameLocation":"4234:7:21","nodeType":"VariableDeclaration","scope":1475,"src":"4229:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1472,"name":"bool","nodeType":"ElementaryTypeName","src":"4229:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4228:14:21"},"scope":1617,"src":"4076:167:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1476,"nodeType":"StructuredDocumentation","src":"4461:953:21","text":" @notice Hook to be executed before adding liquidity.\n @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param maxAmountsInScaled18 Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"45421ec7","id":1498,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeAddLiquidity","nameLocation":"5428:20:21","nodeType":"FunctionDefinition","parameters":{"id":1494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1478,"mutability":"mutable","name":"router","nameLocation":"5466:6:21","nodeType":"VariableDeclaration","scope":1498,"src":"5458:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1477,"name":"address","nodeType":"ElementaryTypeName","src":"5458:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1480,"mutability":"mutable","name":"pool","nameLocation":"5490:4:21","nodeType":"VariableDeclaration","scope":1498,"src":"5482:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1479,"name":"address","nodeType":"ElementaryTypeName","src":"5482:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1483,"mutability":"mutable","name":"kind","nameLocation":"5521:4:21","nodeType":"VariableDeclaration","scope":1498,"src":"5504:21:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4223","typeString":"enum AddLiquidityKind"},"typeName":{"id":1482,"nodeType":"UserDefinedTypeName","pathNode":{"id":1481,"name":"AddLiquidityKind","nameLocations":["5504:16:21"],"nodeType":"IdentifierPath","referencedDeclaration":4223,"src":"5504:16:21"},"referencedDeclaration":4223,"src":"5504:16:21","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4223","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1486,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"5552:20:21","nodeType":"VariableDeclaration","scope":1498,"src":"5535:37:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1484,"name":"uint256","nodeType":"ElementaryTypeName","src":"5535:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1485,"nodeType":"ArrayTypeName","src":"5535:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1488,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"5590:15:21","nodeType":"VariableDeclaration","scope":1498,"src":"5582:23:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1487,"name":"uint256","nodeType":"ElementaryTypeName","src":"5582:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1491,"mutability":"mutable","name":"balancesScaled18","nameLocation":"5632:16:21","nodeType":"VariableDeclaration","scope":1498,"src":"5615:33:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1489,"name":"uint256","nodeType":"ElementaryTypeName","src":"5615:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1490,"nodeType":"ArrayTypeName","src":"5615:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1493,"mutability":"mutable","name":"userData","nameLocation":"5671:8:21","nodeType":"VariableDeclaration","scope":1498,"src":"5658:21:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1492,"name":"bytes","nodeType":"ElementaryTypeName","src":"5658:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5448:237:21"},"returnParameters":{"id":1497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1496,"mutability":"mutable","name":"success","nameLocation":"5709:7:21","nodeType":"VariableDeclaration","scope":1498,"src":"5704:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1495,"name":"bool","nodeType":"ElementaryTypeName","src":"5704:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5703:14:21"},"scope":1617,"src":"5419:299:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1499,"nodeType":"StructuredDocumentation","src":"5724:1250:21","text":" @notice Hook to be executed after adding liquidity.\n @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n @param bptAmountOut Amount of pool tokens minted\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook"},"functionSelector":"976907cc","id":1527,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterAddLiquidity","nameLocation":"6988:19:21","nodeType":"FunctionDefinition","parameters":{"id":1520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1501,"mutability":"mutable","name":"router","nameLocation":"7025:6:21","nodeType":"VariableDeclaration","scope":1527,"src":"7017:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1500,"name":"address","nodeType":"ElementaryTypeName","src":"7017:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1503,"mutability":"mutable","name":"pool","nameLocation":"7049:4:21","nodeType":"VariableDeclaration","scope":1527,"src":"7041:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1502,"name":"address","nodeType":"ElementaryTypeName","src":"7041:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1506,"mutability":"mutable","name":"kind","nameLocation":"7080:4:21","nodeType":"VariableDeclaration","scope":1527,"src":"7063:21:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4223","typeString":"enum AddLiquidityKind"},"typeName":{"id":1505,"nodeType":"UserDefinedTypeName","pathNode":{"id":1504,"name":"AddLiquidityKind","nameLocations":["7063:16:21"],"nodeType":"IdentifierPath","referencedDeclaration":4223,"src":"7063:16:21"},"referencedDeclaration":4223,"src":"7063:16:21","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4223","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1509,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"7111:17:21","nodeType":"VariableDeclaration","scope":1527,"src":"7094:34:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1507,"name":"uint256","nodeType":"ElementaryTypeName","src":"7094:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1508,"nodeType":"ArrayTypeName","src":"7094:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1512,"mutability":"mutable","name":"amountsInRaw","nameLocation":"7155:12:21","nodeType":"VariableDeclaration","scope":1527,"src":"7138:29:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1510,"name":"uint256","nodeType":"ElementaryTypeName","src":"7138:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1511,"nodeType":"ArrayTypeName","src":"7138:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1514,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7185:12:21","nodeType":"VariableDeclaration","scope":1527,"src":"7177:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1513,"name":"uint256","nodeType":"ElementaryTypeName","src":"7177:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1517,"mutability":"mutable","name":"balancesScaled18","nameLocation":"7224:16:21","nodeType":"VariableDeclaration","scope":1527,"src":"7207:33:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1515,"name":"uint256","nodeType":"ElementaryTypeName","src":"7207:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1516,"nodeType":"ArrayTypeName","src":"7207:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1519,"mutability":"mutable","name":"userData","nameLocation":"7263:8:21","nodeType":"VariableDeclaration","scope":1527,"src":"7250:21:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1518,"name":"bytes","nodeType":"ElementaryTypeName","src":"7250:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7007:270:21"},"returnParameters":{"id":1526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1522,"mutability":"mutable","name":"success","nameLocation":"7301:7:21","nodeType":"VariableDeclaration","scope":1527,"src":"7296:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1521,"name":"bool","nodeType":"ElementaryTypeName","src":"7296:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1525,"mutability":"mutable","name":"hookAdjustedAmountsInRaw","nameLocation":"7327:24:21","nodeType":"VariableDeclaration","scope":1527,"src":"7310:41:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1523,"name":"uint256","nodeType":"ElementaryTypeName","src":"7310:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1524,"nodeType":"ArrayTypeName","src":"7310:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7295:57:21"},"scope":1617,"src":"6979:374:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1528,"nodeType":"StructuredDocumentation","src":"7572:992:21","text":" @notice Hook to be executed before removing liquidity.\n @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"ba5f9f40","id":1550,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeRemoveLiquidity","nameLocation":"8578:23:21","nodeType":"FunctionDefinition","parameters":{"id":1546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1530,"mutability":"mutable","name":"router","nameLocation":"8619:6:21","nodeType":"VariableDeclaration","scope":1550,"src":"8611:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1529,"name":"address","nodeType":"ElementaryTypeName","src":"8611:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1532,"mutability":"mutable","name":"pool","nameLocation":"8643:4:21","nodeType":"VariableDeclaration","scope":1550,"src":"8635:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1531,"name":"address","nodeType":"ElementaryTypeName","src":"8635:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1535,"mutability":"mutable","name":"kind","nameLocation":"8677:4:21","nodeType":"VariableDeclaration","scope":1550,"src":"8657:24:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4244","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":1534,"nodeType":"UserDefinedTypeName","pathNode":{"id":1533,"name":"RemoveLiquidityKind","nameLocations":["8657:19:21"],"nodeType":"IdentifierPath","referencedDeclaration":4244,"src":"8657:19:21"},"referencedDeclaration":4244,"src":"8657:19:21","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4244","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1537,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"8699:14:21","nodeType":"VariableDeclaration","scope":1550,"src":"8691:22:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1536,"name":"uint256","nodeType":"ElementaryTypeName","src":"8691:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1540,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"8740:21:21","nodeType":"VariableDeclaration","scope":1550,"src":"8723:38:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1538,"name":"uint256","nodeType":"ElementaryTypeName","src":"8723:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1539,"nodeType":"ArrayTypeName","src":"8723:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1543,"mutability":"mutable","name":"balancesScaled18","nameLocation":"8788:16:21","nodeType":"VariableDeclaration","scope":1550,"src":"8771:33:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1541,"name":"uint256","nodeType":"ElementaryTypeName","src":"8771:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1542,"nodeType":"ArrayTypeName","src":"8771:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1545,"mutability":"mutable","name":"userData","nameLocation":"8827:8:21","nodeType":"VariableDeclaration","scope":1550,"src":"8814:21:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1544,"name":"bytes","nodeType":"ElementaryTypeName","src":"8814:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8601:240:21"},"returnParameters":{"id":1549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1548,"mutability":"mutable","name":"success","nameLocation":"8865:7:21","nodeType":"VariableDeclaration","scope":1550,"src":"8860:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1547,"name":"bool","nodeType":"ElementaryTypeName","src":"8860:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8859:14:21"},"scope":1617,"src":"8569:305:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1551,"nodeType":"StructuredDocumentation","src":"8880:1276:21","text":" @notice Hook to be executed after removing liquidity.\n @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param bptAmountIn Amount of pool tokens to burn\n @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook"},"functionSelector":"2754888d","id":1579,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterRemoveLiquidity","nameLocation":"10170:22:21","nodeType":"FunctionDefinition","parameters":{"id":1572,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1553,"mutability":"mutable","name":"router","nameLocation":"10210:6:21","nodeType":"VariableDeclaration","scope":1579,"src":"10202:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1552,"name":"address","nodeType":"ElementaryTypeName","src":"10202:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1555,"mutability":"mutable","name":"pool","nameLocation":"10234:4:21","nodeType":"VariableDeclaration","scope":1579,"src":"10226:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1554,"name":"address","nodeType":"ElementaryTypeName","src":"10226:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1558,"mutability":"mutable","name":"kind","nameLocation":"10268:4:21","nodeType":"VariableDeclaration","scope":1579,"src":"10248:24:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4244","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":1557,"nodeType":"UserDefinedTypeName","pathNode":{"id":1556,"name":"RemoveLiquidityKind","nameLocations":["10248:19:21"],"nodeType":"IdentifierPath","referencedDeclaration":4244,"src":"10248:19:21"},"referencedDeclaration":4244,"src":"10248:19:21","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4244","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1560,"mutability":"mutable","name":"bptAmountIn","nameLocation":"10290:11:21","nodeType":"VariableDeclaration","scope":1579,"src":"10282:19:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1559,"name":"uint256","nodeType":"ElementaryTypeName","src":"10282:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1563,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"10328:18:21","nodeType":"VariableDeclaration","scope":1579,"src":"10311:35:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1561,"name":"uint256","nodeType":"ElementaryTypeName","src":"10311:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1562,"nodeType":"ArrayTypeName","src":"10311:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1566,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"10373:13:21","nodeType":"VariableDeclaration","scope":1579,"src":"10356:30:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1564,"name":"uint256","nodeType":"ElementaryTypeName","src":"10356:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1565,"nodeType":"ArrayTypeName","src":"10356:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1569,"mutability":"mutable","name":"balancesScaled18","nameLocation":"10413:16:21","nodeType":"VariableDeclaration","scope":1579,"src":"10396:33:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1567,"name":"uint256","nodeType":"ElementaryTypeName","src":"10396:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1568,"nodeType":"ArrayTypeName","src":"10396:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1571,"mutability":"mutable","name":"userData","nameLocation":"10452:8:21","nodeType":"VariableDeclaration","scope":1579,"src":"10439:21:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1570,"name":"bytes","nodeType":"ElementaryTypeName","src":"10439:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10192:274:21"},"returnParameters":{"id":1578,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1574,"mutability":"mutable","name":"success","nameLocation":"10490:7:21","nodeType":"VariableDeclaration","scope":1579,"src":"10485:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1573,"name":"bool","nodeType":"ElementaryTypeName","src":"10485:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1577,"mutability":"mutable","name":"hookAdjustedAmountsOutRaw","nameLocation":"10516:25:21","nodeType":"VariableDeclaration","scope":1579,"src":"10499:42:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1575,"name":"uint256","nodeType":"ElementaryTypeName","src":"10499:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1576,"nodeType":"ArrayTypeName","src":"10499:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10484:58:21"},"scope":1617,"src":"10161:382:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1580,"nodeType":"StructuredDocumentation","src":"10753:556:21","text":" @notice Called before a swap to give the Pool an opportunity to perform actions.\n @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"5211fa77","id":1590,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeSwap","nameLocation":"11323:12:21","nodeType":"FunctionDefinition","parameters":{"id":1586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1583,"mutability":"mutable","name":"params","nameLocation":"11360:6:21","nodeType":"VariableDeclaration","scope":1590,"src":"11336:30:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4188_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":1582,"nodeType":"UserDefinedTypeName","pathNode":{"id":1581,"name":"PoolSwapParams","nameLocations":["11336:14:21"],"nodeType":"IdentifierPath","referencedDeclaration":4188,"src":"11336:14:21"},"referencedDeclaration":4188,"src":"11336:14:21","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4188_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":1585,"mutability":"mutable","name":"pool","nameLocation":"11376:4:21","nodeType":"VariableDeclaration","scope":1590,"src":"11368:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1584,"name":"address","nodeType":"ElementaryTypeName","src":"11368:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11335:46:21"},"returnParameters":{"id":1589,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1588,"mutability":"mutable","name":"success","nameLocation":"11405:7:21","nodeType":"VariableDeclaration","scope":1590,"src":"11400:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1587,"name":"bool","nodeType":"ElementaryTypeName","src":"11400:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11399:14:21"},"scope":1617,"src":"11314:100:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1591,"nodeType":"StructuredDocumentation","src":"11420:671:21","text":" @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n use the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see above for struct definition)\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook"},"functionSelector":"18b6eb55","id":1601,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterSwap","nameLocation":"12105:11:21","nodeType":"FunctionDefinition","parameters":{"id":1595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1594,"mutability":"mutable","name":"params","nameLocation":"12151:6:21","nodeType":"VariableDeclaration","scope":1601,"src":"12126:31:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4217_calldata_ptr","typeString":"struct AfterSwapParams"},"typeName":{"id":1593,"nodeType":"UserDefinedTypeName","pathNode":{"id":1592,"name":"AfterSwapParams","nameLocations":["12126:15:21"],"nodeType":"IdentifierPath","referencedDeclaration":4217,"src":"12126:15:21"},"referencedDeclaration":4217,"src":"12126:15:21","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4217_storage_ptr","typeString":"struct AfterSwapParams"}},"visibility":"internal"}],"src":"12116:47:21"},"returnParameters":{"id":1600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1597,"mutability":"mutable","name":"success","nameLocation":"12187:7:21","nodeType":"VariableDeclaration","scope":1601,"src":"12182:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1596,"name":"bool","nodeType":"ElementaryTypeName","src":"12182:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1599,"mutability":"mutable","name":"hookAdjustedAmountCalculatedRaw","nameLocation":"12204:31:21","nodeType":"VariableDeclaration","scope":1601,"src":"12196:39:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1598,"name":"uint256","nodeType":"ElementaryTypeName","src":"12196:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12181:55:21"},"scope":1617,"src":"12096:141:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1602,"nodeType":"StructuredDocumentation","src":"12243:795:21","text":" @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n @return success True if the pool wishes to proceed with settlement\n @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value"},"functionSelector":"a0e8f5ac","id":1616,"implemented":false,"kind":"function","modifiers":[],"name":"onComputeDynamicSwapFeePercentage","nameLocation":"13052:33:21","nodeType":"FunctionDefinition","parameters":{"id":1610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1605,"mutability":"mutable","name":"params","nameLocation":"13119:6:21","nodeType":"VariableDeclaration","scope":1616,"src":"13095:30:21","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4188_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":1604,"nodeType":"UserDefinedTypeName","pathNode":{"id":1603,"name":"PoolSwapParams","nameLocations":["13095:14:21"],"nodeType":"IdentifierPath","referencedDeclaration":4188,"src":"13095:14:21"},"referencedDeclaration":4188,"src":"13095:14:21","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4188_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":1607,"mutability":"mutable","name":"pool","nameLocation":"13143:4:21","nodeType":"VariableDeclaration","scope":1616,"src":"13135:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1606,"name":"address","nodeType":"ElementaryTypeName","src":"13135:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1609,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"13165:23:21","nodeType":"VariableDeclaration","scope":1616,"src":"13157:31:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1608,"name":"uint256","nodeType":"ElementaryTypeName","src":"13157:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13085:109:21"},"returnParameters":{"id":1615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1612,"mutability":"mutable","name":"success","nameLocation":"13223:7:21","nodeType":"VariableDeclaration","scope":1616,"src":"13218:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1611,"name":"bool","nodeType":"ElementaryTypeName","src":"13218:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1614,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"13240:24:21","nodeType":"VariableDeclaration","scope":1616,"src":"13232:32:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1613,"name":"uint256","nodeType":"ElementaryTypeName","src":"13232:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13217:48:21"},"scope":1617,"src":"13043:223:21","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1618,"src":"975:12293:21","usedErrors":[],"usedEvents":[]}],"src":"46:13223:21"},"id":21},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","exportedSymbols":{"IERC20":[10558],"IProtocolFeeController":[1955],"IVault":[2527]},"id":1956,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1619,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:22"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1621,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1956,"sourceUnit":10559,"src":"72:72:22","symbolAliases":[{"foreign":{"id":1620,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"81:6:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":1623,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1956,"sourceUnit":2528,"src":"146:38:22","symbolAliases":[{"foreign":{"id":1622,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"155:6:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeController","contractDependencies":[],"contractKind":"interface","documentation":{"id":1624,"nodeType":"StructuredDocumentation","src":"186:80:22","text":"@notice Contract that handles protocol and pool creator fees for the Vault."},"fullyImplemented":false,"id":1955,"linearizedBaseContracts":[1955],"name":"IProtocolFeeController","nameLocation":"276:22:22","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1625,"nodeType":"StructuredDocumentation","src":"305:157:22","text":" @notice Emitted when the protocol swap fee percentage is updated.\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"bf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d","id":1629,"name":"GlobalProtocolSwapFeePercentageChanged","nameLocation":"473:38:22","nodeType":"EventDefinition","parameters":{"id":1628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1627,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"520:17:22","nodeType":"VariableDeclaration","scope":1629,"src":"512:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1626,"name":"uint256","nodeType":"ElementaryTypeName","src":"512:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"511:27:22"},"src":"467:72:22"},{"anonymous":false,"documentation":{"id":1630,"nodeType":"StructuredDocumentation","src":"545:160:22","text":" @notice Emitted when the protocol yield fee percentage is updated.\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6","id":1634,"name":"GlobalProtocolYieldFeePercentageChanged","nameLocation":"716:39:22","nodeType":"EventDefinition","parameters":{"id":1633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1632,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"764:18:22","nodeType":"VariableDeclaration","scope":1634,"src":"756:26:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1631,"name":"uint256","nodeType":"ElementaryTypeName","src":"756:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"755:28:22"},"src":"710:74:22"},{"anonymous":false,"documentation":{"id":1635,"nodeType":"StructuredDocumentation","src":"790:245:22","text":" @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n @param pool The pool whose protocol swap fee will be changed\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e","id":1641,"name":"ProtocolSwapFeePercentageChanged","nameLocation":"1046:32:22","nodeType":"EventDefinition","parameters":{"id":1640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1637,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1095:4:22","nodeType":"VariableDeclaration","scope":1641,"src":"1079:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1636,"name":"address","nodeType":"ElementaryTypeName","src":"1079:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1639,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1109:17:22","nodeType":"VariableDeclaration","scope":1641,"src":"1101:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1638,"name":"uint256","nodeType":"ElementaryTypeName","src":"1101:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1078:49:22"},"src":"1040:88:22"},{"anonymous":false,"documentation":{"id":1642,"nodeType":"StructuredDocumentation","src":"1134:249:22","text":" @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n @param pool The pool whose protocol yield fee will be changed\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"af47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd","id":1648,"name":"ProtocolYieldFeePercentageChanged","nameLocation":"1394:33:22","nodeType":"EventDefinition","parameters":{"id":1647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1644,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1444:4:22","nodeType":"VariableDeclaration","scope":1648,"src":"1428:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1643,"name":"address","nodeType":"ElementaryTypeName","src":"1428:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1646,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"1458:18:22","nodeType":"VariableDeclaration","scope":1648,"src":"1450:26:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1645,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1427:50:22"},"src":"1388:90:22"},{"anonymous":false,"documentation":{"id":1649,"nodeType":"StructuredDocumentation","src":"1484:267:22","text":" @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n @param pool The pool whose pool creator swap fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool"},"eventSelector":"b7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c","id":1655,"name":"PoolCreatorSwapFeePercentageChanged","nameLocation":"1762:35:22","nodeType":"EventDefinition","parameters":{"id":1654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1651,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1814:4:22","nodeType":"VariableDeclaration","scope":1655,"src":"1798:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1650,"name":"address","nodeType":"ElementaryTypeName","src":"1798:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1653,"indexed":false,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"1828:28:22","nodeType":"VariableDeclaration","scope":1655,"src":"1820:36:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1652,"name":"uint256","nodeType":"ElementaryTypeName","src":"1820:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1797:60:22"},"src":"1756:102:22"},{"anonymous":false,"documentation":{"id":1656,"nodeType":"StructuredDocumentation","src":"1864:271:22","text":" @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n @param pool The pool whose pool creator yield fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool"},"eventSelector":"47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34","id":1662,"name":"PoolCreatorYieldFeePercentageChanged","nameLocation":"2146:36:22","nodeType":"EventDefinition","parameters":{"id":1661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1658,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2199:4:22","nodeType":"VariableDeclaration","scope":1662,"src":"2183:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1657,"name":"address","nodeType":"ElementaryTypeName","src":"2183:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1660,"indexed":false,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"2213:29:22","nodeType":"VariableDeclaration","scope":1662,"src":"2205:37:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1659,"name":"uint256","nodeType":"ElementaryTypeName","src":"2205:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2182:61:22"},"src":"2140:104:22"},{"anonymous":false,"documentation":{"id":1663,"nodeType":"StructuredDocumentation","src":"2250:560:22","text":" @notice Logs the collection of protocol swap fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n multiple operations.\n @param pool The pool on which the swap fee was charged\n @param token The token in which the swap fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"ae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f","id":1672,"name":"ProtocolSwapFeeCollected","nameLocation":"2821:24:22","nodeType":"EventDefinition","parameters":{"id":1671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1665,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2862:4:22","nodeType":"VariableDeclaration","scope":1672,"src":"2846:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1664,"name":"address","nodeType":"ElementaryTypeName","src":"2846:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1668,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"2883:5:22","nodeType":"VariableDeclaration","scope":1672,"src":"2868:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":1667,"nodeType":"UserDefinedTypeName","pathNode":{"id":1666,"name":"IERC20","nameLocations":["2868:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2868:6:22"},"referencedDeclaration":10558,"src":"2868:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1670,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2898:6:22","nodeType":"VariableDeclaration","scope":1672,"src":"2890:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1669,"name":"uint256","nodeType":"ElementaryTypeName","src":"2890:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2845:60:22"},"src":"2815:91:22"},{"anonymous":false,"documentation":{"id":1673,"nodeType":"StructuredDocumentation","src":"2912:564:22","text":" @notice Logs the collection of protocol yield fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n multiple operations.\n @param pool The pool on which the yield fee was charged\n @param token The token in which the yield fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"e505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e2","id":1682,"name":"ProtocolYieldFeeCollected","nameLocation":"3487:25:22","nodeType":"EventDefinition","parameters":{"id":1681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1675,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3529:4:22","nodeType":"VariableDeclaration","scope":1682,"src":"3513:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1674,"name":"address","nodeType":"ElementaryTypeName","src":"3513:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1678,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3550:5:22","nodeType":"VariableDeclaration","scope":1682,"src":"3535:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":1677,"nodeType":"UserDefinedTypeName","pathNode":{"id":1676,"name":"IERC20","nameLocations":["3535:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"3535:6:22"},"referencedDeclaration":10558,"src":"3535:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1680,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"3565:6:22","nodeType":"VariableDeclaration","scope":1682,"src":"3557:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1679,"name":"uint256","nodeType":"ElementaryTypeName","src":"3557:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3512:60:22"},"src":"3481:92:22"},{"anonymous":false,"documentation":{"id":1683,"nodeType":"StructuredDocumentation","src":"3579:333:22","text":" @notice Logs the withdrawal of protocol fees in a specific token and amount.\n @param pool The pool from which protocol fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b5","id":1694,"name":"ProtocolFeesWithdrawn","nameLocation":"3923:21:22","nodeType":"EventDefinition","parameters":{"id":1693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1685,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3961:4:22","nodeType":"VariableDeclaration","scope":1694,"src":"3945:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1684,"name":"address","nodeType":"ElementaryTypeName","src":"3945:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1688,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3982:5:22","nodeType":"VariableDeclaration","scope":1694,"src":"3967:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":1687,"nodeType":"UserDefinedTypeName","pathNode":{"id":1686,"name":"IERC20","nameLocations":["3967:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"3967:6:22"},"referencedDeclaration":10558,"src":"3967:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1690,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4005:9:22","nodeType":"VariableDeclaration","scope":1694,"src":"3989:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1689,"name":"address","nodeType":"ElementaryTypeName","src":"3989:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1692,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4024:6:22","nodeType":"VariableDeclaration","scope":1694,"src":"4016:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1691,"name":"uint256","nodeType":"ElementaryTypeName","src":"4016:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3944:87:22"},"src":"3917:115:22"},{"anonymous":false,"documentation":{"id":1695,"nodeType":"StructuredDocumentation","src":"4038:398:22","text":" @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n @param pool The pool from which pool creator fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f9","id":1706,"name":"PoolCreatorFeesWithdrawn","nameLocation":"4447:24:22","nodeType":"EventDefinition","parameters":{"id":1705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1697,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4497:4:22","nodeType":"VariableDeclaration","scope":1706,"src":"4481:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1696,"name":"address","nodeType":"ElementaryTypeName","src":"4481:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1700,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"4526:5:22","nodeType":"VariableDeclaration","scope":1706,"src":"4511:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":1699,"nodeType":"UserDefinedTypeName","pathNode":{"id":1698,"name":"IERC20","nameLocations":["4511:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"4511:6:22"},"referencedDeclaration":10558,"src":"4511:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1702,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4557:9:22","nodeType":"VariableDeclaration","scope":1706,"src":"4541:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1701,"name":"address","nodeType":"ElementaryTypeName","src":"4541:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1704,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4584:6:22","nodeType":"VariableDeclaration","scope":1706,"src":"4576:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1703,"name":"uint256","nodeType":"ElementaryTypeName","src":"4576:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4471:125:22"},"src":"4441:156:22"},{"anonymous":false,"documentation":{"id":1707,"nodeType":"StructuredDocumentation","src":"4603:529:22","text":" @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global swap fee percentage.\n @param pool The pool being registered\n @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"a34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a78564","id":1715,"name":"InitialPoolAggregateSwapFeePercentage","nameLocation":"5143:37:22","nodeType":"EventDefinition","parameters":{"id":1714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1709,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5206:4:22","nodeType":"VariableDeclaration","scope":1715,"src":"5190:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1708,"name":"address","nodeType":"ElementaryTypeName","src":"5190:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1711,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"5228:26:22","nodeType":"VariableDeclaration","scope":1715,"src":"5220:34:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1710,"name":"uint256","nodeType":"ElementaryTypeName","src":"5220:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1713,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5269:19:22","nodeType":"VariableDeclaration","scope":1715,"src":"5264:24:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1712,"name":"bool","nodeType":"ElementaryTypeName","src":"5264:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5180:114:22"},"src":"5137:158:22"},{"anonymous":false,"documentation":{"id":1716,"nodeType":"StructuredDocumentation","src":"5301:533:22","text":" @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global yield fee percentage.\n @param pool The pool being registered\n @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"ce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb","id":1724,"name":"InitialPoolAggregateYieldFeePercentage","nameLocation":"5845:38:22","nodeType":"EventDefinition","parameters":{"id":1723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1718,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5909:4:22","nodeType":"VariableDeclaration","scope":1724,"src":"5893:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1717,"name":"address","nodeType":"ElementaryTypeName","src":"5893:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1720,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"5931:27:22","nodeType":"VariableDeclaration","scope":1724,"src":"5923:35:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1719,"name":"uint256","nodeType":"ElementaryTypeName","src":"5923:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1722,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5973:19:22","nodeType":"VariableDeclaration","scope":1724,"src":"5968:24:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1721,"name":"bool","nodeType":"ElementaryTypeName","src":"5968:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5883:115:22"},"src":"5839:160:22"},{"anonymous":false,"documentation":{"id":1725,"nodeType":"StructuredDocumentation","src":"6005:738:22","text":" @notice Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\n @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n @param protocolFeeExempt True if the pool is initially exempt from protocol fees"},"eventSelector":"d9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed07912","id":1733,"name":"PoolRegisteredWithFeeController","nameLocation":"6754:31:22","nodeType":"EventDefinition","parameters":{"id":1732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1727,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6802:4:22","nodeType":"VariableDeclaration","scope":1733,"src":"6786:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1726,"name":"address","nodeType":"ElementaryTypeName","src":"6786:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1729,"indexed":true,"mutability":"mutable","name":"poolCreator","nameLocation":"6824:11:22","nodeType":"VariableDeclaration","scope":1733,"src":"6808:27:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1728,"name":"address","nodeType":"ElementaryTypeName","src":"6808:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1731,"indexed":false,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6842:17:22","nodeType":"VariableDeclaration","scope":1733,"src":"6837:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1730,"name":"bool","nodeType":"ElementaryTypeName","src":"6837:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6785:75:22"},"src":"6748:113:22"},{"documentation":{"id":1734,"nodeType":"StructuredDocumentation","src":"6867:219:22","text":" @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages."},"errorSelector":"7e6eb7fb","id":1736,"name":"ProtocolSwapFeePercentageTooHigh","nameLocation":"7097:32:22","nodeType":"ErrorDefinition","parameters":{"id":1735,"nodeType":"ParameterList","parameters":[],"src":"7129:2:22"},"src":"7091:41:22"},{"documentation":{"id":1737,"nodeType":"StructuredDocumentation","src":"7138:221:22","text":" @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages."},"errorSelector":"a7849e8e","id":1739,"name":"ProtocolYieldFeePercentageTooHigh","nameLocation":"7370:33:22","nodeType":"ErrorDefinition","parameters":{"id":1738,"nodeType":"ParameterList","parameters":[],"src":"7403:2:22"},"src":"7364:42:22"},{"documentation":{"id":1740,"nodeType":"StructuredDocumentation","src":"7412:156:22","text":" @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n @param pool The pool with no creator"},"errorSelector":"8bcbf353","id":1744,"name":"PoolCreatorNotRegistered","nameLocation":"7579:24:22","nodeType":"ErrorDefinition","parameters":{"id":1743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1742,"mutability":"mutable","name":"pool","nameLocation":"7612:4:22","nodeType":"VariableDeclaration","scope":1744,"src":"7604:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1741,"name":"address","nodeType":"ElementaryTypeName","src":"7604:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7603:14:22"},"src":"7573:45:22"},{"documentation":{"id":1745,"nodeType":"StructuredDocumentation","src":"7624:236:22","text":" @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n @param caller The account attempting to withdraw pool creator fees\n @param pool The pool the caller tried to withdraw from"},"errorSelector":"fbecdbf4","id":1751,"name":"CallerIsNotPoolCreator","nameLocation":"7871:22:22","nodeType":"ErrorDefinition","parameters":{"id":1750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1747,"mutability":"mutable","name":"caller","nameLocation":"7902:6:22","nodeType":"VariableDeclaration","scope":1751,"src":"7894:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1746,"name":"address","nodeType":"ElementaryTypeName","src":"7894:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1749,"mutability":"mutable","name":"pool","nameLocation":"7918:4:22","nodeType":"VariableDeclaration","scope":1751,"src":"7910:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1748,"name":"address","nodeType":"ElementaryTypeName","src":"7910:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7893:30:22"},"src":"7865:59:22"},{"documentation":{"id":1752,"nodeType":"StructuredDocumentation","src":"7930:110:22","text":"@notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value."},"errorSelector":"0370da74","id":1754,"name":"PoolCreatorFeePercentageTooHigh","nameLocation":"8051:31:22","nodeType":"ErrorDefinition","parameters":{"id":1753,"nodeType":"ParameterList","parameters":[],"src":"8082:2:22"},"src":"8045:40:22"},{"documentation":{"id":1755,"nodeType":"StructuredDocumentation","src":"8091:109:22","text":" @notice Get the address of the main Vault contract.\n @return vault The Vault address"},"functionSelector":"fbfa77cf","id":1761,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"8214:5:22","nodeType":"FunctionDefinition","parameters":{"id":1756,"nodeType":"ParameterList","parameters":[],"src":"8219:2:22"},"returnParameters":{"id":1760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1759,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1761,"src":"8245:6:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":1758,"nodeType":"UserDefinedTypeName","pathNode":{"id":1757,"name":"IVault","nameLocations":["8245:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"8245:6:22"},"referencedDeclaration":2527,"src":"8245:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8244:8:22"},"scope":1955,"src":"8205:48:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1762,"nodeType":"StructuredDocumentation","src":"8259:131:22","text":" @notice Collects aggregate fees from the Vault for a given pool.\n @param pool The pool with aggregate fees"},"functionSelector":"8f4ab9ca","id":1767,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"8404:20:22","nodeType":"FunctionDefinition","parameters":{"id":1765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1764,"mutability":"mutable","name":"pool","nameLocation":"8433:4:22","nodeType":"VariableDeclaration","scope":1767,"src":"8425:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1763,"name":"address","nodeType":"ElementaryTypeName","src":"8425:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8424:14:22"},"returnParameters":{"id":1766,"nodeType":"ParameterList","parameters":[],"src":"8447:0:22"},"scope":1955,"src":"8395:53:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1768,"nodeType":"StructuredDocumentation","src":"8454:156:22","text":" @notice Getter for the current global protocol swap fee.\n @return protocolSwapFeePercentage The global protocol swap fee percentage"},"functionSelector":"7869ee18","id":1773,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"8624:34:22","nodeType":"FunctionDefinition","parameters":{"id":1769,"nodeType":"ParameterList","parameters":[],"src":"8658:2:22"},"returnParameters":{"id":1772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1771,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"8692:25:22","nodeType":"VariableDeclaration","scope":1773,"src":"8684:33:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1770,"name":"uint256","nodeType":"ElementaryTypeName","src":"8684:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8683:35:22"},"scope":1955,"src":"8615:104:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1774,"nodeType":"StructuredDocumentation","src":"8725:159:22","text":" @notice Getter for the current global protocol yield fee.\n @return protocolYieldFeePercentage The global protocol yield fee percentage"},"functionSelector":"55fb76af","id":1779,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"8898:35:22","nodeType":"FunctionDefinition","parameters":{"id":1775,"nodeType":"ParameterList","parameters":[],"src":"8933:2:22"},"returnParameters":{"id":1778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1777,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"8967:26:22","nodeType":"VariableDeclaration","scope":1779,"src":"8959:34:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1776,"name":"uint256","nodeType":"ElementaryTypeName","src":"8959:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8958:36:22"},"scope":1955,"src":"8889:106:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1780,"nodeType":"StructuredDocumentation","src":"9001:207:22","text":" @notice Getter for pool registration flag.\n @param pool The address of the pool\n @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)"},"functionSelector":"c673bdaf","id":1787,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"9222:16:22","nodeType":"FunctionDefinition","parameters":{"id":1783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1782,"mutability":"mutable","name":"pool","nameLocation":"9247:4:22","nodeType":"VariableDeclaration","scope":1787,"src":"9239:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1781,"name":"address","nodeType":"ElementaryTypeName","src":"9239:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9238:14:22"},"returnParameters":{"id":1786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1785,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1787,"src":"9276:4:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1784,"name":"bool","nodeType":"ElementaryTypeName","src":"9276:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9275:6:22"},"scope":1955,"src":"9213:69:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1788,"nodeType":"StructuredDocumentation","src":"9288:292:22","text":" @notice Getter for the current protocol swap fee for a given pool.\n @param pool The address of the pool\n @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"5c15a0b4","id":1797,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"9594:26:22","nodeType":"FunctionDefinition","parameters":{"id":1791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1790,"mutability":"mutable","name":"pool","nameLocation":"9638:4:22","nodeType":"VariableDeclaration","scope":1797,"src":"9630:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1789,"name":"address","nodeType":"ElementaryTypeName","src":"9630:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9620:28:22"},"returnParameters":{"id":1796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1793,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"9680:25:22","nodeType":"VariableDeclaration","scope":1797,"src":"9672:33:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1792,"name":"uint256","nodeType":"ElementaryTypeName","src":"9672:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1795,"mutability":"mutable","name":"isOverride","nameLocation":"9712:10:22","nodeType":"VariableDeclaration","scope":1797,"src":"9707:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1794,"name":"bool","nodeType":"ElementaryTypeName","src":"9707:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9671:52:22"},"scope":1955,"src":"9585:139:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1798,"nodeType":"StructuredDocumentation","src":"9730:295:22","text":" @notice Getter for the current protocol yield fee for a given pool.\n @param pool The address of the pool\n @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"7a2b97dc","id":1807,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"10039:27:22","nodeType":"FunctionDefinition","parameters":{"id":1801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1800,"mutability":"mutable","name":"pool","nameLocation":"10084:4:22","nodeType":"VariableDeclaration","scope":1807,"src":"10076:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1799,"name":"address","nodeType":"ElementaryTypeName","src":"10076:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10066:28:22"},"returnParameters":{"id":1806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1803,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"10126:26:22","nodeType":"VariableDeclaration","scope":1807,"src":"10118:34:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1802,"name":"uint256","nodeType":"ElementaryTypeName","src":"10118:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1805,"mutability":"mutable","name":"isOverride","nameLocation":"10159:10:22","nodeType":"VariableDeclaration","scope":1807,"src":"10154:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1804,"name":"bool","nodeType":"ElementaryTypeName","src":"10154:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10117:53:22"},"scope":1955,"src":"10030:141:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1808,"nodeType":"StructuredDocumentation","src":"10177:249:22","text":" @notice Getter for the current pool creator swap fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee"},"functionSelector":"0b8e059b","id":1815,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorSwapFeePercentage","nameLocation":"10440:31:22","nodeType":"FunctionDefinition","parameters":{"id":1811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1810,"mutability":"mutable","name":"pool","nameLocation":"10480:4:22","nodeType":"VariableDeclaration","scope":1815,"src":"10472:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1809,"name":"address","nodeType":"ElementaryTypeName","src":"10472:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10471:14:22"},"returnParameters":{"id":1814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1813,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1815,"src":"10509:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1812,"name":"uint256","nodeType":"ElementaryTypeName","src":"10509:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10508:9:22"},"scope":1955,"src":"10431:87:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1816,"nodeType":"StructuredDocumentation","src":"10524:252:22","text":" @notice Getter for the current pool creator yield fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee"},"functionSelector":"0252aab5","id":1823,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorYieldFeePercentage","nameLocation":"10790:32:22","nodeType":"FunctionDefinition","parameters":{"id":1819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1818,"mutability":"mutable","name":"pool","nameLocation":"10831:4:22","nodeType":"VariableDeclaration","scope":1823,"src":"10823:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1817,"name":"address","nodeType":"ElementaryTypeName","src":"10823:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10822:14:22"},"returnParameters":{"id":1822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1821,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1823,"src":"10860:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1820,"name":"uint256","nodeType":"ElementaryTypeName","src":"10860:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10859:9:22"},"scope":1955,"src":"10781:88:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1824,"nodeType":"StructuredDocumentation","src":"10875:344:22","text":" @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"8df44c54","id":1832,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"11233:21:22","nodeType":"FunctionDefinition","parameters":{"id":1827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1826,"mutability":"mutable","name":"pool","nameLocation":"11263:4:22","nodeType":"VariableDeclaration","scope":1832,"src":"11255:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1825,"name":"address","nodeType":"ElementaryTypeName","src":"11255:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11254:14:22"},"returnParameters":{"id":1831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1830,"mutability":"mutable","name":"feeAmounts","nameLocation":"11309:10:22","nodeType":"VariableDeclaration","scope":1832,"src":"11292:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1828,"name":"uint256","nodeType":"ElementaryTypeName","src":"11292:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1829,"nodeType":"ArrayTypeName","src":"11292:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11291:29:22"},"scope":1955,"src":"11224:97:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1833,"nodeType":"StructuredDocumentation","src":"11327:348:22","text":" @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"9e95f3fd","id":1841,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"11689:24:22","nodeType":"FunctionDefinition","parameters":{"id":1836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1835,"mutability":"mutable","name":"pool","nameLocation":"11722:4:22","nodeType":"VariableDeclaration","scope":1841,"src":"11714:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1834,"name":"address","nodeType":"ElementaryTypeName","src":"11714:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11713:14:22"},"returnParameters":{"id":1840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1839,"mutability":"mutable","name":"feeAmounts","nameLocation":"11768:10:22","nodeType":"VariableDeclaration","scope":1841,"src":"11751:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1837,"name":"uint256","nodeType":"ElementaryTypeName","src":"11751:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1838,"nodeType":"ArrayTypeName","src":"11751:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11750:29:22"},"scope":1955,"src":"11680:100:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1842,"nodeType":"StructuredDocumentation","src":"11786:1445:22","text":" @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n components, but the truncation ensures it will not revert for any valid set of fee percentages.\n See example below:\n tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n @return aggregateFeePercentage The computed aggregate percentage"},"functionSelector":"0ddd60c6","id":1851,"implemented":false,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"13245:29:22","nodeType":"FunctionDefinition","parameters":{"id":1847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1844,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"13292:21:22","nodeType":"VariableDeclaration","scope":1851,"src":"13284:29:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1843,"name":"uint256","nodeType":"ElementaryTypeName","src":"13284:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1846,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"13331:24:22","nodeType":"VariableDeclaration","scope":1851,"src":"13323:32:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1845,"name":"uint256","nodeType":"ElementaryTypeName","src":"13323:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13274:87:22"},"returnParameters":{"id":1850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1849,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"13393:22:22","nodeType":"VariableDeclaration","scope":1851,"src":"13385:30:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1848,"name":"uint256","nodeType":"ElementaryTypeName","src":"13385:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13384:32:22"},"scope":1955,"src":"13236:181:22","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":1852,"nodeType":"StructuredDocumentation","src":"13423:398:22","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol swap fee"},"functionSelector":"71ecc8fb","id":1857,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolSwapFeePercentage","nameLocation":"13835:31:22","nodeType":"FunctionDefinition","parameters":{"id":1855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1854,"mutability":"mutable","name":"pool","nameLocation":"13875:4:22","nodeType":"VariableDeclaration","scope":1857,"src":"13867:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1853,"name":"address","nodeType":"ElementaryTypeName","src":"13867:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13866:14:22"},"returnParameters":{"id":1856,"nodeType":"ParameterList","parameters":[],"src":"13889:0:22"},"scope":1955,"src":"13826:64:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1858,"nodeType":"StructuredDocumentation","src":"13896:400:22","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol yield fee"},"functionSelector":"71447ea8","id":1863,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolYieldFeePercentage","nameLocation":"14310:32:22","nodeType":"FunctionDefinition","parameters":{"id":1861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1860,"mutability":"mutable","name":"pool","nameLocation":"14351:4:22","nodeType":"VariableDeclaration","scope":1863,"src":"14343:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1859,"name":"address","nodeType":"ElementaryTypeName","src":"14343:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14342:14:22"},"returnParameters":{"id":1862,"nodeType":"ParameterList","parameters":[],"src":"14365:0:22"},"scope":1955,"src":"14301:65:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1864,"nodeType":"StructuredDocumentation","src":"14590:826:22","text":" @notice Add pool-specific entries to the protocol swap and yield percentages.\n @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n fee percentages, based on an initial pool creator fee of 0.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @return aggregateYieldFeePercentage The initial aggregate yield fee percentage"},"functionSelector":"77ff76e7","id":1877,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"15430:12:22","nodeType":"FunctionDefinition","parameters":{"id":1871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1866,"mutability":"mutable","name":"pool","nameLocation":"15460:4:22","nodeType":"VariableDeclaration","scope":1877,"src":"15452:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1865,"name":"address","nodeType":"ElementaryTypeName","src":"15452:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1868,"mutability":"mutable","name":"poolCreator","nameLocation":"15482:11:22","nodeType":"VariableDeclaration","scope":1877,"src":"15474:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1867,"name":"address","nodeType":"ElementaryTypeName","src":"15474:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1870,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"15508:17:22","nodeType":"VariableDeclaration","scope":1877,"src":"15503:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1869,"name":"bool","nodeType":"ElementaryTypeName","src":"15503:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15442:89:22"},"returnParameters":{"id":1876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1873,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"15558:26:22","nodeType":"VariableDeclaration","scope":1877,"src":"15550:34:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1872,"name":"uint256","nodeType":"ElementaryTypeName","src":"15550:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1875,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"15594:27:22","nodeType":"VariableDeclaration","scope":1877,"src":"15586:35:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1874,"name":"uint256","nodeType":"ElementaryTypeName","src":"15586:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15549:73:22"},"scope":1955,"src":"15421:202:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1878,"nodeType":"StructuredDocumentation","src":"15629:175:22","text":" @notice Set the global protocol swap fee percentage, used by standard pools.\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage"},"functionSelector":"8a3c5c69","id":1883,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"15818:34:22","nodeType":"FunctionDefinition","parameters":{"id":1881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1880,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"15861:28:22","nodeType":"VariableDeclaration","scope":1883,"src":"15853:36:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1879,"name":"uint256","nodeType":"ElementaryTypeName","src":"15853:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15852:38:22"},"returnParameters":{"id":1882,"nodeType":"ParameterList","parameters":[],"src":"15899:0:22"},"scope":1955,"src":"15809:91:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1884,"nodeType":"StructuredDocumentation","src":"15906:178:22","text":" @notice Set the global protocol yield fee percentage, used by standard pools.\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"a93df2a4","id":1889,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"16098:35:22","nodeType":"FunctionDefinition","parameters":{"id":1887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1886,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16142:29:22","nodeType":"VariableDeclaration","scope":1889,"src":"16134:37:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1885,"name":"uint256","nodeType":"ElementaryTypeName","src":"16134:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16133:39:22"},"returnParameters":{"id":1888,"nodeType":"ParameterList","parameters":[],"src":"16181:0:22"},"scope":1955,"src":"16089:93:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1890,"nodeType":"StructuredDocumentation","src":"16188:272:22","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol swap fee\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool"},"functionSelector":"fd267f39","id":1897,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolSwapFeePercentage","nameLocation":"16474:28:22","nodeType":"FunctionDefinition","parameters":{"id":1895,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1892,"mutability":"mutable","name":"pool","nameLocation":"16511:4:22","nodeType":"VariableDeclaration","scope":1897,"src":"16503:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1891,"name":"address","nodeType":"ElementaryTypeName","src":"16503:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1894,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"16525:28:22","nodeType":"VariableDeclaration","scope":1897,"src":"16517:36:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1893,"name":"uint256","nodeType":"ElementaryTypeName","src":"16517:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16502:52:22"},"returnParameters":{"id":1896,"nodeType":"ParameterList","parameters":[],"src":"16563:0:22"},"scope":1955,"src":"16465:99:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1898,"nodeType":"StructuredDocumentation","src":"16570:276:22","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol yield fee\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool"},"functionSelector":"abaa3356","id":1905,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolYieldFeePercentage","nameLocation":"16860:29:22","nodeType":"FunctionDefinition","parameters":{"id":1903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1900,"mutability":"mutable","name":"pool","nameLocation":"16898:4:22","nodeType":"VariableDeclaration","scope":1905,"src":"16890:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1899,"name":"address","nodeType":"ElementaryTypeName","src":"16890:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1902,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16912:29:22","nodeType":"VariableDeclaration","scope":1905,"src":"16904:37:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1901,"name":"uint256","nodeType":"ElementaryTypeName","src":"16904:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16889:53:22"},"returnParameters":{"id":1904,"nodeType":"ParameterList","parameters":[],"src":"16951:0:22"},"scope":1955,"src":"16851:101:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1906,"nodeType":"StructuredDocumentation","src":"16958:623:22","text":" @notice Assigns a new pool creator swap fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool"},"functionSelector":"1377c16c","id":1913,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"17595:31:22","nodeType":"FunctionDefinition","parameters":{"id":1911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1908,"mutability":"mutable","name":"pool","nameLocation":"17635:4:22","nodeType":"VariableDeclaration","scope":1913,"src":"17627:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1907,"name":"address","nodeType":"ElementaryTypeName","src":"17627:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1910,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"17649:28:22","nodeType":"VariableDeclaration","scope":1913,"src":"17641:36:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1909,"name":"uint256","nodeType":"ElementaryTypeName","src":"17641:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17626:52:22"},"returnParameters":{"id":1912,"nodeType":"ParameterList","parameters":[],"src":"17687:0:22"},"scope":1955,"src":"17586:102:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1914,"nodeType":"StructuredDocumentation","src":"17694:626:22","text":" @notice Assigns a new pool creator yield fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool"},"functionSelector":"3af52712","id":1921,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"18334:32:22","nodeType":"FunctionDefinition","parameters":{"id":1919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1916,"mutability":"mutable","name":"pool","nameLocation":"18375:4:22","nodeType":"VariableDeclaration","scope":1921,"src":"18367:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1915,"name":"address","nodeType":"ElementaryTypeName","src":"18367:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1918,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"18389:29:22","nodeType":"VariableDeclaration","scope":1921,"src":"18381:37:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1917,"name":"uint256","nodeType":"ElementaryTypeName","src":"18381:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18366:53:22"},"returnParameters":{"id":1920,"nodeType":"ParameterList","parameters":[],"src":"18428:0:22"},"scope":1955,"src":"18325:104:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1922,"nodeType":"StructuredDocumentation","src":"18435:296:22","text":" @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"cf7b287f","id":1929,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFees","nameLocation":"18745:20:22","nodeType":"FunctionDefinition","parameters":{"id":1927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1924,"mutability":"mutable","name":"pool","nameLocation":"18774:4:22","nodeType":"VariableDeclaration","scope":1929,"src":"18766:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1923,"name":"address","nodeType":"ElementaryTypeName","src":"18766:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1926,"mutability":"mutable","name":"recipient","nameLocation":"18788:9:22","nodeType":"VariableDeclaration","scope":1929,"src":"18780:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1925,"name":"address","nodeType":"ElementaryTypeName","src":"18780:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18765:33:22"},"returnParameters":{"id":1928,"nodeType":"ParameterList","parameters":[],"src":"18807:0:22"},"scope":1955,"src":"18736:72:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1930,"nodeType":"StructuredDocumentation","src":"18814:339:22","text":" @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens\n @param token Token to withdraw"},"functionSelector":"b53a70b2","id":1940,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFeesForToken","nameLocation":"19167:28:22","nodeType":"FunctionDefinition","parameters":{"id":1938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1932,"mutability":"mutable","name":"pool","nameLocation":"19204:4:22","nodeType":"VariableDeclaration","scope":1940,"src":"19196:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1931,"name":"address","nodeType":"ElementaryTypeName","src":"19196:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1934,"mutability":"mutable","name":"recipient","nameLocation":"19218:9:22","nodeType":"VariableDeclaration","scope":1940,"src":"19210:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1933,"name":"address","nodeType":"ElementaryTypeName","src":"19210:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1937,"mutability":"mutable","name":"token","nameLocation":"19236:5:22","nodeType":"VariableDeclaration","scope":1940,"src":"19229:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":1936,"nodeType":"UserDefinedTypeName","pathNode":{"id":1935,"name":"IERC20","nameLocations":["19229:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"19229:6:22"},"referencedDeclaration":10558,"src":"19229:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"19195:47:22"},"returnParameters":{"id":1939,"nodeType":"ParameterList","parameters":[],"src":"19251:0:22"},"scope":1955,"src":"19158:94:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1941,"nodeType":"StructuredDocumentation","src":"19258:291:22","text":" @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n @dev Sends swap and yield pool creator fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"f7061445","id":1948,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19563:23:22","nodeType":"FunctionDefinition","parameters":{"id":1946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1943,"mutability":"mutable","name":"pool","nameLocation":"19595:4:22","nodeType":"VariableDeclaration","scope":1948,"src":"19587:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1942,"name":"address","nodeType":"ElementaryTypeName","src":"19587:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1945,"mutability":"mutable","name":"recipient","nameLocation":"19609:9:22","nodeType":"VariableDeclaration","scope":1948,"src":"19601:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1944,"name":"address","nodeType":"ElementaryTypeName","src":"19601:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19586:33:22"},"returnParameters":{"id":1947,"nodeType":"ParameterList","parameters":[],"src":"19628:0:22"},"scope":1955,"src":"19554:75:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1949,"nodeType":"StructuredDocumentation","src":"19635:310:22","text":" @notice Withdraw collected pool creator fees for a given pool.\n @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n value, this function is permissionless.\n @param pool The pool on which fees were collected"},"functionSelector":"52f125f0","id":1954,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19959:23:22","nodeType":"FunctionDefinition","parameters":{"id":1952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1951,"mutability":"mutable","name":"pool","nameLocation":"19991:4:22","nodeType":"VariableDeclaration","scope":1954,"src":"19983:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1950,"name":"address","nodeType":"ElementaryTypeName","src":"19983:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19982:14:22"},"returnParameters":{"id":1953,"nodeType":"ParameterList","parameters":[],"src":"20005:0:22"},"scope":1955,"src":"19950:56:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1956,"src":"266:19742:22","usedErrors":[1736,1739,1744,1751,1754],"usedEvents":[1629,1634,1641,1648,1655,1662,1672,1682,1694,1706,1715,1724,1733]}],"src":"46:19963:22"},"id":22},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol","exportedSymbols":{"IBalancerContractRegistry":[212],"IProtocolFeeController":[1955],"IProtocolFeePercentagesProvider":[2034]},"id":2035,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1957,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:23"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","file":"../standalone-utils/IBalancerContractRegistry.sol","id":1959,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2035,"sourceUnit":213,"src":"72:94:23","symbolAliases":[{"foreign":{"id":1958,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":212,"src":"81:25:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1961,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2035,"sourceUnit":1956,"src":"167:70:23","symbolAliases":[{"foreign":{"id":1960,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"176:22:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeePercentagesProvider","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":2034,"linearizedBaseContracts":[2034],"name":"IProtocolFeePercentagesProvider","nameLocation":"249:31:23","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1962,"nodeType":"StructuredDocumentation","src":"287:349:23","text":" @notice Protocol fee percentages have been set for the given factory.\n @param factory The pool factory\n @param protocolSwapFeePercentage The protocol swap fee percentage intended for pools from this factory\n @param protocolYieldFeePercentage The protocol yield fee percentage intended for pools from this factory"},"eventSelector":"2c3f7d4fd7252aea844c55450b24cac1853ac3a3293a3d0616193b7d854cf0f0","id":1970,"name":"FactorySpecificProtocolFeePercentagesSet","nameLocation":"647:40:23","nodeType":"EventDefinition","parameters":{"id":1969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1964,"indexed":true,"mutability":"mutable","name":"factory","nameLocation":"713:7:23","nodeType":"VariableDeclaration","scope":1970,"src":"697:23:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1963,"name":"address","nodeType":"ElementaryTypeName","src":"697:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1966,"indexed":false,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"738:25:23","nodeType":"VariableDeclaration","scope":1970,"src":"730:33:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1965,"name":"uint256","nodeType":"ElementaryTypeName","src":"730:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1968,"indexed":false,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"781:26:23","nodeType":"VariableDeclaration","scope":1970,"src":"773:34:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1967,"name":"uint256","nodeType":"ElementaryTypeName","src":"773:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"687:126:23"},"src":"641:173:23"},{"documentation":{"id":1971,"nodeType":"StructuredDocumentation","src":"820:87:23","text":"@notice The protocol fee controller was configured with an incorrect Vault address."},"errorSelector":"1bbe95c7","id":1973,"name":"WrongProtocolFeeControllerDeployment","nameLocation":"918:36:23","nodeType":"ErrorDefinition","parameters":{"id":1972,"nodeType":"ParameterList","parameters":[],"src":"954:2:23"},"src":"912:45:23"},{"documentation":{"id":1974,"nodeType":"StructuredDocumentation","src":"963:182:23","text":" @notice Fees can only be set on recognized factories (i.e., registered in the `BalancerContractRegistry`).\n @param factory The address of the unknown factory"},"errorSelector":"c2a47384","id":1978,"name":"UnknownFactory","nameLocation":"1156:14:23","nodeType":"ErrorDefinition","parameters":{"id":1977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1976,"mutability":"mutable","name":"factory","nameLocation":"1179:7:23","nodeType":"VariableDeclaration","scope":1978,"src":"1171:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1975,"name":"address","nodeType":"ElementaryTypeName","src":"1171:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1170:17:23"},"src":"1150:38:23"},{"documentation":{"id":1979,"nodeType":"StructuredDocumentation","src":"1194:475:23","text":" @notice `setFactorySpecificProtocolFeePercentages` has not been called for this factory address.\n @dev This error can by thrown by `getFactorySpecificProtocolFeePercentages` or\n `setProtocolFeePercentagesForPools`, as both require that valid fee percentages have been set.\n You need to set the factory fees before you can apply them to pools from that factory.\n @param factory The factory address where fees have not been set"},"errorSelector":"a589c09e","id":1983,"name":"FactoryFeesNotSet","nameLocation":"1680:17:23","nodeType":"ErrorDefinition","parameters":{"id":1982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1981,"mutability":"mutable","name":"factory","nameLocation":"1706:7:23","nodeType":"VariableDeclaration","scope":1983,"src":"1698:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1980,"name":"address","nodeType":"ElementaryTypeName","src":"1698:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1697:17:23"},"src":"1674:41:23"},{"documentation":{"id":1984,"nodeType":"StructuredDocumentation","src":"1721:300:23","text":" @notice The given pool is not from the expected factory.\n @dev Occurs when one of the pools supplied to `setProtocolFeePercentagesForPools` is not from the given factory.\n @param pool The address of the unrecognized pool\n @param factory The address of the factory"},"errorSelector":"f400ce63","id":1990,"name":"PoolNotFromFactory","nameLocation":"2032:18:23","nodeType":"ErrorDefinition","parameters":{"id":1989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1986,"mutability":"mutable","name":"pool","nameLocation":"2059:4:23","nodeType":"VariableDeclaration","scope":1990,"src":"2051:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1985,"name":"address","nodeType":"ElementaryTypeName","src":"2051:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1988,"mutability":"mutable","name":"factory","nameLocation":"2073:7:23","nodeType":"VariableDeclaration","scope":1990,"src":"2065:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1987,"name":"address","nodeType":"ElementaryTypeName","src":"2065:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2050:31:23"},"src":"2026:56:23"},{"documentation":{"id":1991,"nodeType":"StructuredDocumentation","src":"2088:162:23","text":" @notice Get the address of the `ProtocolFeeController` used to set fees.\n @return protocolFeeController The address of the fee controller"},"functionSelector":"85f2dbd4","id":1997,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"2264:24:23","nodeType":"FunctionDefinition","parameters":{"id":1992,"nodeType":"ParameterList","parameters":[],"src":"2288:2:23"},"returnParameters":{"id":1996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1995,"mutability":"mutable","name":"protocolFeeController","nameLocation":"2337:21:23","nodeType":"VariableDeclaration","scope":1997,"src":"2314:44:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":1994,"nodeType":"UserDefinedTypeName","pathNode":{"id":1993,"name":"IProtocolFeeController","nameLocations":["2314:22:23"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"2314:22:23"},"referencedDeclaration":1955,"src":"2314:22:23","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"2313:46:23"},"scope":2034,"src":"2255:105:23","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1998,"nodeType":"StructuredDocumentation","src":"2366:198:23","text":" @notice Get the address of the `BalancerContractRegistry` used to validate factory contracts.\n @return balancerContractRegistry The address of the Balancer contract registry"},"functionSelector":"deb27a7a","id":2004,"implemented":false,"kind":"function","modifiers":[],"name":"getBalancerContractRegistry","nameLocation":"2578:27:23","nodeType":"FunctionDefinition","parameters":{"id":1999,"nodeType":"ParameterList","parameters":[],"src":"2605:2:23"},"returnParameters":{"id":2003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2002,"mutability":"mutable","name":"balancerContractRegistry","nameLocation":"2657:24:23","nodeType":"VariableDeclaration","scope":2004,"src":"2631:50:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":2001,"nodeType":"UserDefinedTypeName","pathNode":{"id":2000,"name":"IBalancerContractRegistry","nameLocations":["2631:25:23"],"nodeType":"IdentifierPath","referencedDeclaration":212,"src":"2631:25:23"},"referencedDeclaration":212,"src":"2631:25:23","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"visibility":"internal"}],"src":"2630:52:23"},"scope":2034,"src":"2569:114:23","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2005,"nodeType":"StructuredDocumentation","src":"2689:323:23","text":" @notice Query the protocol fee percentages for a given factory.\n @param factory The address of the factory\n @return protocolSwapFeePercentage The protocol swap fee percentage set for that factory\n @return protocolYieldFeePercentage The protocol yield fee percentage set for that factory"},"functionSelector":"f2c24ec8","id":2014,"implemented":false,"kind":"function","modifiers":[],"name":"getFactorySpecificProtocolFeePercentages","nameLocation":"3026:40:23","nodeType":"FunctionDefinition","parameters":{"id":2008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2007,"mutability":"mutable","name":"factory","nameLocation":"3084:7:23","nodeType":"VariableDeclaration","scope":2014,"src":"3076:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2006,"name":"address","nodeType":"ElementaryTypeName","src":"3076:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3066:31:23"},"returnParameters":{"id":2013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2010,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"3129:25:23","nodeType":"VariableDeclaration","scope":2014,"src":"3121:33:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2009,"name":"uint256","nodeType":"ElementaryTypeName","src":"3121:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2012,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"3164:26:23","nodeType":"VariableDeclaration","scope":2014,"src":"3156:34:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2011,"name":"uint256","nodeType":"ElementaryTypeName","src":"3156:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3120:71:23"},"scope":2034,"src":"3017:175:23","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2015,"nodeType":"StructuredDocumentation","src":"3198:600:23","text":" @notice Assign intended protocol fee percentages for a given factory.\n @dev This is a permissioned call. After the fee percentages have been set, and governance has granted\n this contract permission to set fee percentages on pools, anyone can call `setProtocolFeePercentagesForPools`\n to update the fee percentages on a set of pools from that factory.\n @param factory The address of the factory\n @param protocolSwapFeePercentage The new protocol swap fee percentage\n @param protocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"00859689","id":2024,"implemented":false,"kind":"function","modifiers":[],"name":"setFactorySpecificProtocolFeePercentages","nameLocation":"3812:40:23","nodeType":"FunctionDefinition","parameters":{"id":2022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2017,"mutability":"mutable","name":"factory","nameLocation":"3870:7:23","nodeType":"VariableDeclaration","scope":2024,"src":"3862:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2016,"name":"address","nodeType":"ElementaryTypeName","src":"3862:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2019,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"3895:25:23","nodeType":"VariableDeclaration","scope":2024,"src":"3887:33:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2018,"name":"uint256","nodeType":"ElementaryTypeName","src":"3887:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2021,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"3938:26:23","nodeType":"VariableDeclaration","scope":2024,"src":"3930:34:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2020,"name":"uint256","nodeType":"ElementaryTypeName","src":"3930:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3852:118:23"},"returnParameters":{"id":2023,"nodeType":"ParameterList","parameters":[],"src":"3979:0:23"},"scope":2034,"src":"3803:177:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2025,"nodeType":"StructuredDocumentation","src":"3986:480:23","text":" @notice Update the protocol fees for a set of pools from a given factory.\n @dev This call is permissionless. Anyone can update the fee percentages, once they're set by governance.\n Note that governance must also grant this contract permission to set protocol fee percentages on pools.\n @param factory The address of the factory\n @param pools The pools whose fees will be set according to `setFactorySpecificProtocolFeePercentages`"},"functionSelector":"344b12d5","id":2033,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolFeePercentagesForPools","nameLocation":"4480:33:23","nodeType":"FunctionDefinition","parameters":{"id":2031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2027,"mutability":"mutable","name":"factory","nameLocation":"4522:7:23","nodeType":"VariableDeclaration","scope":2033,"src":"4514:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2026,"name":"address","nodeType":"ElementaryTypeName","src":"4514:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2030,"mutability":"mutable","name":"pools","nameLocation":"4548:5:23","nodeType":"VariableDeclaration","scope":2033,"src":"4531:22:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":2028,"name":"address","nodeType":"ElementaryTypeName","src":"4531:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2029,"nodeType":"ArrayTypeName","src":"4531:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4513:41:23"},"returnParameters":{"id":2032,"nodeType":"ParameterList","parameters":[],"src":"4563:0:23"},"scope":2034,"src":"4471:93:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2035,"src":"239:4327:23","usedErrors":[1973,1978,1983,1990],"usedEvents":[1970]}],"src":"46:4521:23"},"id":23},"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","exportedSymbols":{"AddLiquidityKind":[4223],"IERC20":[10558],"IERC4626":[9828],"IRouter":[2489],"IVault":[2527],"RemoveLiquidityKind":[4244],"SwapKind":[4151]},"id":2490,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2036,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:24"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2038,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2490,"sourceUnit":9829,"src":"72:75:24","symbolAliases":[{"foreign":{"id":2037,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9828,"src":"81:8:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2040,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2490,"sourceUnit":10559,"src":"148:72:24","symbolAliases":[{"foreign":{"id":2039,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"157:6:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":2042,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2490,"sourceUnit":2528,"src":"222:38:24","symbolAliases":[{"foreign":{"id":2041,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"231:6:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":2046,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2490,"sourceUnit":4288,"src":"262:83:24","symbolAliases":[{"foreign":{"id":2043,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4223,"src":"271:16:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2044,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4244,"src":"289:19:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2045,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4151,"src":"310:8:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IRouter","contractDependencies":[],"contractKind":"interface","documentation":{"id":2047,"nodeType":"StructuredDocumentation","src":"347:115:24","text":"@notice User-friendly interface to basic Vault operations: swap, add/remove liquidity, and associated queries."},"fullyImplemented":false,"id":2489,"linearizedBaseContracts":[2489],"name":"IRouter","nameLocation":"472:7:24","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2048,"nodeType":"StructuredDocumentation","src":"701:650:24","text":" @notice Initialize a liquidity pool.\n @param pool Address of the liquidity pool\n @param tokens Pool tokens, in token registration order\n @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Minimum amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add initial liquidity\n @return bptAmountOut Actual amount of pool tokens minted in exchange for initial liquidity"},"functionSelector":"026b3d95","id":2068,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"1365:10:24","nodeType":"FunctionDefinition","parameters":{"id":2064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2050,"mutability":"mutable","name":"pool","nameLocation":"1393:4:24","nodeType":"VariableDeclaration","scope":2068,"src":"1385:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2049,"name":"address","nodeType":"ElementaryTypeName","src":"1385:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2054,"mutability":"mutable","name":"tokens","nameLocation":"1423:6:24","nodeType":"VariableDeclaration","scope":2068,"src":"1407:22:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2052,"nodeType":"UserDefinedTypeName","pathNode":{"id":2051,"name":"IERC20","nameLocations":["1407:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1407:6:24"},"referencedDeclaration":10558,"src":"1407:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":2053,"nodeType":"ArrayTypeName","src":"1407:8:24","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":2057,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"1456:14:24","nodeType":"VariableDeclaration","scope":2068,"src":"1439:31:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2055,"name":"uint256","nodeType":"ElementaryTypeName","src":"1439:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2056,"nodeType":"ArrayTypeName","src":"1439:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2059,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"1488:15:24","nodeType":"VariableDeclaration","scope":2068,"src":"1480:23:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2058,"name":"uint256","nodeType":"ElementaryTypeName","src":"1480:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2061,"mutability":"mutable","name":"wethIsEth","nameLocation":"1518:9:24","nodeType":"VariableDeclaration","scope":2068,"src":"1513:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2060,"name":"bool","nodeType":"ElementaryTypeName","src":"1513:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2063,"mutability":"mutable","name":"userData","nameLocation":"1550:8:24","nodeType":"VariableDeclaration","scope":2068,"src":"1537:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2062,"name":"bytes","nodeType":"ElementaryTypeName","src":"1537:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1375:189:24"},"returnParameters":{"id":2067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2066,"mutability":"mutable","name":"bptAmountOut","nameLocation":"1599:12:24","nodeType":"VariableDeclaration","scope":2068,"src":"1591:20:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2065,"name":"uint256","nodeType":"ElementaryTypeName","src":"1591:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1590:22:24"},"scope":2489,"src":"1356:257:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2069,"nodeType":"StructuredDocumentation","src":"1831:645:24","text":" @notice Adds liquidity to a pool with proportional token amounts, receiving an exact amount of pool tokens.\n @param pool Address of the liquidity pool\n @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n @param exactBptAmountOut Exact amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return amountsIn Actual amounts of tokens added, sorted in token registration order"},"functionSelector":"724dba33","id":2086,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityProportional","nameLocation":"2490:24:24","nodeType":"FunctionDefinition","parameters":{"id":2081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2071,"mutability":"mutable","name":"pool","nameLocation":"2532:4:24","nodeType":"VariableDeclaration","scope":2086,"src":"2524:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2070,"name":"address","nodeType":"ElementaryTypeName","src":"2524:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2074,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"2563:12:24","nodeType":"VariableDeclaration","scope":2086,"src":"2546:29:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2072,"name":"uint256","nodeType":"ElementaryTypeName","src":"2546:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2073,"nodeType":"ArrayTypeName","src":"2546:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2076,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"2593:17:24","nodeType":"VariableDeclaration","scope":2086,"src":"2585:25:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2075,"name":"uint256","nodeType":"ElementaryTypeName","src":"2585:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2078,"mutability":"mutable","name":"wethIsEth","nameLocation":"2625:9:24","nodeType":"VariableDeclaration","scope":2086,"src":"2620:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2077,"name":"bool","nodeType":"ElementaryTypeName","src":"2620:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2080,"mutability":"mutable","name":"userData","nameLocation":"2657:8:24","nodeType":"VariableDeclaration","scope":2086,"src":"2644:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2079,"name":"bytes","nodeType":"ElementaryTypeName","src":"2644:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2514:157:24"},"returnParameters":{"id":2085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2084,"mutability":"mutable","name":"amountsIn","nameLocation":"2715:9:24","nodeType":"VariableDeclaration","scope":2086,"src":"2698:26:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2082,"name":"uint256","nodeType":"ElementaryTypeName","src":"2698:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2083,"nodeType":"ArrayTypeName","src":"2698:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2697:28:24"},"scope":2489,"src":"2481:245:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2087,"nodeType":"StructuredDocumentation","src":"2732:518:24","text":" @notice Queries an `addLiquidityProportional` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountOut Exact amount of pool tokens to be received\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountsIn Expected amounts of tokens to add, sorted in token registration order"},"functionSelector":"9de90518","id":2101,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquidityProportional","nameLocation":"3264:29:24","nodeType":"FunctionDefinition","parameters":{"id":2096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2089,"mutability":"mutable","name":"pool","nameLocation":"3311:4:24","nodeType":"VariableDeclaration","scope":2101,"src":"3303:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2088,"name":"address","nodeType":"ElementaryTypeName","src":"3303:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2091,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"3333:17:24","nodeType":"VariableDeclaration","scope":2101,"src":"3325:25:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2090,"name":"uint256","nodeType":"ElementaryTypeName","src":"3325:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2093,"mutability":"mutable","name":"sender","nameLocation":"3368:6:24","nodeType":"VariableDeclaration","scope":2101,"src":"3360:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2092,"name":"address","nodeType":"ElementaryTypeName","src":"3360:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2095,"mutability":"mutable","name":"userData","nameLocation":"3397:8:24","nodeType":"VariableDeclaration","scope":2101,"src":"3384:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2094,"name":"bytes","nodeType":"ElementaryTypeName","src":"3384:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3293:118:24"},"returnParameters":{"id":2100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2099,"mutability":"mutable","name":"amountsIn","nameLocation":"3447:9:24","nodeType":"VariableDeclaration","scope":2101,"src":"3430:26:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2097,"name":"uint256","nodeType":"ElementaryTypeName","src":"3430:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2098,"nodeType":"ArrayTypeName","src":"3430:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3429:28:24"},"scope":2489,"src":"3255:203:24","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2102,"nodeType":"StructuredDocumentation","src":"3464:574:24","text":" @notice Adds liquidity to a pool with arbitrary token amounts.\n @param pool Address of the liquidity pool\n @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Minimum amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return bptAmountOut Actual amount of pool tokens received"},"functionSelector":"c08bc851","id":2118,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityUnbalanced","nameLocation":"4052:22:24","nodeType":"FunctionDefinition","parameters":{"id":2114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2104,"mutability":"mutable","name":"pool","nameLocation":"4092:4:24","nodeType":"VariableDeclaration","scope":2118,"src":"4084:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2103,"name":"address","nodeType":"ElementaryTypeName","src":"4084:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2107,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"4123:14:24","nodeType":"VariableDeclaration","scope":2118,"src":"4106:31:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2105,"name":"uint256","nodeType":"ElementaryTypeName","src":"4106:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2106,"nodeType":"ArrayTypeName","src":"4106:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2109,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"4155:15:24","nodeType":"VariableDeclaration","scope":2118,"src":"4147:23:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2108,"name":"uint256","nodeType":"ElementaryTypeName","src":"4147:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2111,"mutability":"mutable","name":"wethIsEth","nameLocation":"4185:9:24","nodeType":"VariableDeclaration","scope":2118,"src":"4180:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2110,"name":"bool","nodeType":"ElementaryTypeName","src":"4180:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2113,"mutability":"mutable","name":"userData","nameLocation":"4217:8:24","nodeType":"VariableDeclaration","scope":2118,"src":"4204:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2112,"name":"bytes","nodeType":"ElementaryTypeName","src":"4204:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4074:157:24"},"returnParameters":{"id":2117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2116,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4266:12:24","nodeType":"VariableDeclaration","scope":2118,"src":"4258:20:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2115,"name":"uint256","nodeType":"ElementaryTypeName","src":"4258:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4257:22:24"},"scope":2489,"src":"4043:237:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2119,"nodeType":"StructuredDocumentation","src":"4286:517:24","text":" @notice Queries an `addLiquidityUnbalanced` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return bptAmountOut Expected amount of pool tokens to receive"},"functionSelector":"da001f7d","id":2133,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquidityUnbalanced","nameLocation":"4817:27:24","nodeType":"FunctionDefinition","parameters":{"id":2129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2121,"mutability":"mutable","name":"pool","nameLocation":"4862:4:24","nodeType":"VariableDeclaration","scope":2133,"src":"4854:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2120,"name":"address","nodeType":"ElementaryTypeName","src":"4854:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2124,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"4893:14:24","nodeType":"VariableDeclaration","scope":2133,"src":"4876:31:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2122,"name":"uint256","nodeType":"ElementaryTypeName","src":"4876:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2123,"nodeType":"ArrayTypeName","src":"4876:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2126,"mutability":"mutable","name":"sender","nameLocation":"4925:6:24","nodeType":"VariableDeclaration","scope":2133,"src":"4917:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2125,"name":"address","nodeType":"ElementaryTypeName","src":"4917:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2128,"mutability":"mutable","name":"userData","nameLocation":"4954:8:24","nodeType":"VariableDeclaration","scope":2133,"src":"4941:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2127,"name":"bytes","nodeType":"ElementaryTypeName","src":"4941:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4844:124:24"},"returnParameters":{"id":2132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2131,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4995:12:24","nodeType":"VariableDeclaration","scope":2133,"src":"4987:20:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2130,"name":"uint256","nodeType":"ElementaryTypeName","src":"4987:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4986:22:24"},"scope":2489,"src":"4808:201:24","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2134,"nodeType":"StructuredDocumentation","src":"5015:605:24","text":" @notice Adds liquidity to a pool in a single token, receiving an exact amount of pool tokens.\n @param pool Address of the liquidity pool\n @param tokenIn Token used to add liquidity\n @param maxAmountIn Maximum amount of tokens to be added\n @param exactBptAmountOut Exact amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return amountIn Actual amount of tokens added"},"functionSelector":"72657d17","id":2152,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquiditySingleTokenExactOut","nameLocation":"5634:31:24","nodeType":"FunctionDefinition","parameters":{"id":2148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2136,"mutability":"mutable","name":"pool","nameLocation":"5683:4:24","nodeType":"VariableDeclaration","scope":2152,"src":"5675:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2135,"name":"address","nodeType":"ElementaryTypeName","src":"5675:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2139,"mutability":"mutable","name":"tokenIn","nameLocation":"5704:7:24","nodeType":"VariableDeclaration","scope":2152,"src":"5697:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":2138,"nodeType":"UserDefinedTypeName","pathNode":{"id":2137,"name":"IERC20","nameLocations":["5697:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"5697:6:24"},"referencedDeclaration":10558,"src":"5697:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2141,"mutability":"mutable","name":"maxAmountIn","nameLocation":"5729:11:24","nodeType":"VariableDeclaration","scope":2152,"src":"5721:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2140,"name":"uint256","nodeType":"ElementaryTypeName","src":"5721:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2143,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"5758:17:24","nodeType":"VariableDeclaration","scope":2152,"src":"5750:25:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2142,"name":"uint256","nodeType":"ElementaryTypeName","src":"5750:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2145,"mutability":"mutable","name":"wethIsEth","nameLocation":"5790:9:24","nodeType":"VariableDeclaration","scope":2152,"src":"5785:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2144,"name":"bool","nodeType":"ElementaryTypeName","src":"5785:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2147,"mutability":"mutable","name":"userData","nameLocation":"5822:8:24","nodeType":"VariableDeclaration","scope":2152,"src":"5809:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2146,"name":"bytes","nodeType":"ElementaryTypeName","src":"5809:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5665:171:24"},"returnParameters":{"id":2151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2150,"mutability":"mutable","name":"amountIn","nameLocation":"5871:8:24","nodeType":"VariableDeclaration","scope":2152,"src":"5863:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2149,"name":"uint256","nodeType":"ElementaryTypeName","src":"5863:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5862:18:24"},"scope":2489,"src":"5625:256:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2153,"nodeType":"StructuredDocumentation","src":"5887:542:24","text":" @notice Queries an `addLiquiditySingleTokenExactOut` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenIn Token used to add liquidity\n @param exactBptAmountOut Expected exact amount of pool tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountIn Expected amount of tokens to add"},"functionSelector":"1d56798d","id":2169,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquiditySingleTokenExactOut","nameLocation":"6443:36:24","nodeType":"FunctionDefinition","parameters":{"id":2165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2155,"mutability":"mutable","name":"pool","nameLocation":"6497:4:24","nodeType":"VariableDeclaration","scope":2169,"src":"6489:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2154,"name":"address","nodeType":"ElementaryTypeName","src":"6489:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2158,"mutability":"mutable","name":"tokenIn","nameLocation":"6518:7:24","nodeType":"VariableDeclaration","scope":2169,"src":"6511:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":2157,"nodeType":"UserDefinedTypeName","pathNode":{"id":2156,"name":"IERC20","nameLocations":["6511:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"6511:6:24"},"referencedDeclaration":10558,"src":"6511:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2160,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"6543:17:24","nodeType":"VariableDeclaration","scope":2169,"src":"6535:25:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2159,"name":"uint256","nodeType":"ElementaryTypeName","src":"6535:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2162,"mutability":"mutable","name":"sender","nameLocation":"6578:6:24","nodeType":"VariableDeclaration","scope":2169,"src":"6570:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2161,"name":"address","nodeType":"ElementaryTypeName","src":"6570:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2164,"mutability":"mutable","name":"userData","nameLocation":"6607:8:24","nodeType":"VariableDeclaration","scope":2169,"src":"6594:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2163,"name":"bytes","nodeType":"ElementaryTypeName","src":"6594:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6479:142:24"},"returnParameters":{"id":2168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2167,"mutability":"mutable","name":"amountIn","nameLocation":"6648:8:24","nodeType":"VariableDeclaration","scope":2169,"src":"6640:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2166,"name":"uint256","nodeType":"ElementaryTypeName","src":"6640:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6639:18:24"},"scope":2489,"src":"6434:224:24","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2170,"nodeType":"StructuredDocumentation","src":"6664:530:24","text":" @notice Adds liquidity to a pool by donating the amounts in (no BPT out).\n @dev To support donation, the pool config `enableDonation` flag must be set to true.\n @param pool Address of the liquidity pool\n @param amountsIn Amounts of tokens to be donated, sorted in token registration order\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to donate liquidity"},"functionSelector":"bf6ee3fd","id":2182,"implemented":false,"kind":"function","modifiers":[],"name":"donate","nameLocation":"7208:6:24","nodeType":"FunctionDefinition","parameters":{"id":2180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2172,"mutability":"mutable","name":"pool","nameLocation":"7223:4:24","nodeType":"VariableDeclaration","scope":2182,"src":"7215:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2171,"name":"address","nodeType":"ElementaryTypeName","src":"7215:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2175,"mutability":"mutable","name":"amountsIn","nameLocation":"7246:9:24","nodeType":"VariableDeclaration","scope":2182,"src":"7229:26:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2173,"name":"uint256","nodeType":"ElementaryTypeName","src":"7229:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2174,"nodeType":"ArrayTypeName","src":"7229:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2177,"mutability":"mutable","name":"wethIsEth","nameLocation":"7262:9:24","nodeType":"VariableDeclaration","scope":2182,"src":"7257:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2176,"name":"bool","nodeType":"ElementaryTypeName","src":"7257:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2179,"mutability":"mutable","name":"userData","nameLocation":"7286:8:24","nodeType":"VariableDeclaration","scope":2182,"src":"7273:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2178,"name":"bytes","nodeType":"ElementaryTypeName","src":"7273:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7214:81:24"},"returnParameters":{"id":2181,"nodeType":"ParameterList","parameters":[],"src":"7312:0:24"},"scope":2489,"src":"7199:114:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2183,"nodeType":"StructuredDocumentation","src":"7319:954:24","text":" @notice Adds liquidity to a pool with a custom request.\n @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n In any case the caller can expect them to be hard boundaries for the request.\n @param pool Address of the liquidity pool\n @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Minimum amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return amountsIn Actual amounts of tokens added, sorted in token registration order\n @return bptAmountOut Actual amount of pool tokens received\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"0ca078ec","id":2204,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityCustom","nameLocation":"8287:18:24","nodeType":"FunctionDefinition","parameters":{"id":2195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2185,"mutability":"mutable","name":"pool","nameLocation":"8323:4:24","nodeType":"VariableDeclaration","scope":2204,"src":"8315:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2184,"name":"address","nodeType":"ElementaryTypeName","src":"8315:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2188,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"8354:12:24","nodeType":"VariableDeclaration","scope":2204,"src":"8337:29:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2186,"name":"uint256","nodeType":"ElementaryTypeName","src":"8337:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2187,"nodeType":"ArrayTypeName","src":"8337:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2190,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"8384:15:24","nodeType":"VariableDeclaration","scope":2204,"src":"8376:23:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2189,"name":"uint256","nodeType":"ElementaryTypeName","src":"8376:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2192,"mutability":"mutable","name":"wethIsEth","nameLocation":"8414:9:24","nodeType":"VariableDeclaration","scope":2204,"src":"8409:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2191,"name":"bool","nodeType":"ElementaryTypeName","src":"8409:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2194,"mutability":"mutable","name":"userData","nameLocation":"8446:8:24","nodeType":"VariableDeclaration","scope":2204,"src":"8433:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2193,"name":"bytes","nodeType":"ElementaryTypeName","src":"8433:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8305:155:24"},"returnParameters":{"id":2203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2198,"mutability":"mutable","name":"amountsIn","nameLocation":"8504:9:24","nodeType":"VariableDeclaration","scope":2204,"src":"8487:26:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2196,"name":"uint256","nodeType":"ElementaryTypeName","src":"8487:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2197,"nodeType":"ArrayTypeName","src":"8487:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2200,"mutability":"mutable","name":"bptAmountOut","nameLocation":"8523:12:24","nodeType":"VariableDeclaration","scope":2204,"src":"8515:20:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2199,"name":"uint256","nodeType":"ElementaryTypeName","src":"8515:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2202,"mutability":"mutable","name":"returnData","nameLocation":"8550:10:24","nodeType":"VariableDeclaration","scope":2204,"src":"8537:23:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2201,"name":"bytes","nodeType":"ElementaryTypeName","src":"8537:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8486:75:24"},"scope":2489,"src":"8278:284:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2205,"nodeType":"StructuredDocumentation","src":"8568:779:24","text":" @notice Queries an `addLiquidityCustom` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Expected minimum amount of pool tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountsIn Expected amounts of tokens to add, sorted in token registration order\n @return bptAmountOut Expected amount of pool tokens to receive\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"452db952","id":2226,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquidityCustom","nameLocation":"9361:23:24","nodeType":"FunctionDefinition","parameters":{"id":2217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2207,"mutability":"mutable","name":"pool","nameLocation":"9402:4:24","nodeType":"VariableDeclaration","scope":2226,"src":"9394:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2206,"name":"address","nodeType":"ElementaryTypeName","src":"9394:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2210,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"9433:12:24","nodeType":"VariableDeclaration","scope":2226,"src":"9416:29:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2208,"name":"uint256","nodeType":"ElementaryTypeName","src":"9416:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2209,"nodeType":"ArrayTypeName","src":"9416:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2212,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"9463:15:24","nodeType":"VariableDeclaration","scope":2226,"src":"9455:23:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2211,"name":"uint256","nodeType":"ElementaryTypeName","src":"9455:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2214,"mutability":"mutable","name":"sender","nameLocation":"9496:6:24","nodeType":"VariableDeclaration","scope":2226,"src":"9488:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2213,"name":"address","nodeType":"ElementaryTypeName","src":"9488:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2216,"mutability":"mutable","name":"userData","nameLocation":"9525:8:24","nodeType":"VariableDeclaration","scope":2226,"src":"9512:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2215,"name":"bytes","nodeType":"ElementaryTypeName","src":"9512:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9384:155:24"},"returnParameters":{"id":2225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2220,"mutability":"mutable","name":"amountsIn","nameLocation":"9575:9:24","nodeType":"VariableDeclaration","scope":2226,"src":"9558:26:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2218,"name":"uint256","nodeType":"ElementaryTypeName","src":"9558:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2219,"nodeType":"ArrayTypeName","src":"9558:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2222,"mutability":"mutable","name":"bptAmountOut","nameLocation":"9594:12:24","nodeType":"VariableDeclaration","scope":2226,"src":"9586:20:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2221,"name":"uint256","nodeType":"ElementaryTypeName","src":"9586:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2224,"mutability":"mutable","name":"returnData","nameLocation":"9621:10:24","nodeType":"VariableDeclaration","scope":2226,"src":"9608:23:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2223,"name":"bytes","nodeType":"ElementaryTypeName","src":"9608:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9557:75:24"},"scope":2489,"src":"9352:281:24","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2227,"nodeType":"StructuredDocumentation","src":"9852:648:24","text":" @notice Removes liquidity with proportional token amounts from a pool, burning an exact pool token amount.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return amountsOut Actual amounts of tokens received, sorted in token registration order"},"functionSelector":"51682750","id":2244,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityProportional","nameLocation":"10514:27:24","nodeType":"FunctionDefinition","parameters":{"id":2239,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2229,"mutability":"mutable","name":"pool","nameLocation":"10559:4:24","nodeType":"VariableDeclaration","scope":2244,"src":"10551:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2228,"name":"address","nodeType":"ElementaryTypeName","src":"10551:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2231,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"10581:16:24","nodeType":"VariableDeclaration","scope":2244,"src":"10573:24:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2230,"name":"uint256","nodeType":"ElementaryTypeName","src":"10573:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2234,"mutability":"mutable","name":"minAmountsOut","nameLocation":"10624:13:24","nodeType":"VariableDeclaration","scope":2244,"src":"10607:30:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2232,"name":"uint256","nodeType":"ElementaryTypeName","src":"10607:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2233,"nodeType":"ArrayTypeName","src":"10607:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2236,"mutability":"mutable","name":"wethIsEth","nameLocation":"10652:9:24","nodeType":"VariableDeclaration","scope":2244,"src":"10647:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2235,"name":"bool","nodeType":"ElementaryTypeName","src":"10647:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2238,"mutability":"mutable","name":"userData","nameLocation":"10684:8:24","nodeType":"VariableDeclaration","scope":2244,"src":"10671:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2237,"name":"bytes","nodeType":"ElementaryTypeName","src":"10671:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10541:157:24"},"returnParameters":{"id":2243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2242,"mutability":"mutable","name":"amountsOut","nameLocation":"10742:10:24","nodeType":"VariableDeclaration","scope":2244,"src":"10725:27:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2240,"name":"uint256","nodeType":"ElementaryTypeName","src":"10725:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2241,"nodeType":"ArrayTypeName","src":"10725:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10724:29:24"},"scope":2489,"src":"10505:249:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2245,"nodeType":"StructuredDocumentation","src":"10760:532:24","text":" @notice Queries a `removeLiquidityProportional` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided for the query\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountsOut Expected amounts of tokens to receive, sorted in token registration order"},"functionSelector":"0f710888","id":2259,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquidityProportional","nameLocation":"11306:32:24","nodeType":"FunctionDefinition","parameters":{"id":2254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2247,"mutability":"mutable","name":"pool","nameLocation":"11356:4:24","nodeType":"VariableDeclaration","scope":2259,"src":"11348:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2246,"name":"address","nodeType":"ElementaryTypeName","src":"11348:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2249,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"11378:16:24","nodeType":"VariableDeclaration","scope":2259,"src":"11370:24:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2248,"name":"uint256","nodeType":"ElementaryTypeName","src":"11370:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2251,"mutability":"mutable","name":"sender","nameLocation":"11412:6:24","nodeType":"VariableDeclaration","scope":2259,"src":"11404:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2250,"name":"address","nodeType":"ElementaryTypeName","src":"11404:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2253,"mutability":"mutable","name":"userData","nameLocation":"11441:8:24","nodeType":"VariableDeclaration","scope":2259,"src":"11428:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2252,"name":"bytes","nodeType":"ElementaryTypeName","src":"11428:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11338:117:24"},"returnParameters":{"id":2258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2257,"mutability":"mutable","name":"amountsOut","nameLocation":"11491:10:24","nodeType":"VariableDeclaration","scope":2259,"src":"11474:27:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2255,"name":"uint256","nodeType":"ElementaryTypeName","src":"11474:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2256,"nodeType":"ArrayTypeName","src":"11474:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11473:29:24"},"scope":2489,"src":"11297:206:24","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2260,"nodeType":"StructuredDocumentation","src":"11509:613:24","text":" @notice Removes liquidity from a pool via a single token, burning an exact pool token amount.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided\n @param tokenOut Token used to remove liquidity\n @param minAmountOut Minimum amount of tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return amountOut Actual amount of tokens received"},"functionSelector":"ecb2182c","id":2278,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquiditySingleTokenExactIn","nameLocation":"12136:33:24","nodeType":"FunctionDefinition","parameters":{"id":2274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2262,"mutability":"mutable","name":"pool","nameLocation":"12187:4:24","nodeType":"VariableDeclaration","scope":2278,"src":"12179:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2261,"name":"address","nodeType":"ElementaryTypeName","src":"12179:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2264,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"12209:16:24","nodeType":"VariableDeclaration","scope":2278,"src":"12201:24:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2263,"name":"uint256","nodeType":"ElementaryTypeName","src":"12201:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2267,"mutability":"mutable","name":"tokenOut","nameLocation":"12242:8:24","nodeType":"VariableDeclaration","scope":2278,"src":"12235:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":2266,"nodeType":"UserDefinedTypeName","pathNode":{"id":2265,"name":"IERC20","nameLocations":["12235:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"12235:6:24"},"referencedDeclaration":10558,"src":"12235:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2269,"mutability":"mutable","name":"minAmountOut","nameLocation":"12268:12:24","nodeType":"VariableDeclaration","scope":2278,"src":"12260:20:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2268,"name":"uint256","nodeType":"ElementaryTypeName","src":"12260:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2271,"mutability":"mutable","name":"wethIsEth","nameLocation":"12295:9:24","nodeType":"VariableDeclaration","scope":2278,"src":"12290:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2270,"name":"bool","nodeType":"ElementaryTypeName","src":"12290:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2273,"mutability":"mutable","name":"userData","nameLocation":"12327:8:24","nodeType":"VariableDeclaration","scope":2278,"src":"12314:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2272,"name":"bytes","nodeType":"ElementaryTypeName","src":"12314:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12169:172:24"},"returnParameters":{"id":2277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2276,"mutability":"mutable","name":"amountOut","nameLocation":"12376:9:24","nodeType":"VariableDeclaration","scope":2278,"src":"12368:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2275,"name":"uint256","nodeType":"ElementaryTypeName","src":"12368:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12367:19:24"},"scope":2489,"src":"12127:260:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2279,"nodeType":"StructuredDocumentation","src":"12393:554:24","text":" @notice Queries a `removeLiquiditySingleTokenExactIn` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided for the query\n @param tokenOut Token used to remove liquidity\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountOut Expected amount of tokens to receive"},"functionSelector":"23b39241","id":2295,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquiditySingleTokenExactIn","nameLocation":"12961:38:24","nodeType":"FunctionDefinition","parameters":{"id":2291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2281,"mutability":"mutable","name":"pool","nameLocation":"13017:4:24","nodeType":"VariableDeclaration","scope":2295,"src":"13009:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2280,"name":"address","nodeType":"ElementaryTypeName","src":"13009:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2283,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"13039:16:24","nodeType":"VariableDeclaration","scope":2295,"src":"13031:24:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2282,"name":"uint256","nodeType":"ElementaryTypeName","src":"13031:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2286,"mutability":"mutable","name":"tokenOut","nameLocation":"13072:8:24","nodeType":"VariableDeclaration","scope":2295,"src":"13065:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":2285,"nodeType":"UserDefinedTypeName","pathNode":{"id":2284,"name":"IERC20","nameLocations":["13065:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"13065:6:24"},"referencedDeclaration":10558,"src":"13065:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2288,"mutability":"mutable","name":"sender","nameLocation":"13098:6:24","nodeType":"VariableDeclaration","scope":2295,"src":"13090:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2287,"name":"address","nodeType":"ElementaryTypeName","src":"13090:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2290,"mutability":"mutable","name":"userData","nameLocation":"13127:8:24","nodeType":"VariableDeclaration","scope":2295,"src":"13114:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2289,"name":"bytes","nodeType":"ElementaryTypeName","src":"13114:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12999:142:24"},"returnParameters":{"id":2294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2293,"mutability":"mutable","name":"amountOut","nameLocation":"13168:9:24","nodeType":"VariableDeclaration","scope":2295,"src":"13160:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2292,"name":"uint256","nodeType":"ElementaryTypeName","src":"13160:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13159:19:24"},"scope":2489,"src":"12952:227:24","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2296,"nodeType":"StructuredDocumentation","src":"13185:632:24","text":" @notice Removes liquidity from a pool via a single token, specifying the exact amount of tokens to receive.\n @param pool Address of the liquidity pool\n @param maxBptAmountIn Maximum amount of pool tokens provided\n @param tokenOut Token used to remove liquidity\n @param exactAmountOut Exact amount of tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return bptAmountIn Actual amount of pool tokens burned"},"functionSelector":"e7326def","id":2314,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquiditySingleTokenExactOut","nameLocation":"13831:34:24","nodeType":"FunctionDefinition","parameters":{"id":2310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2298,"mutability":"mutable","name":"pool","nameLocation":"13883:4:24","nodeType":"VariableDeclaration","scope":2314,"src":"13875:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2297,"name":"address","nodeType":"ElementaryTypeName","src":"13875:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2300,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"13905:14:24","nodeType":"VariableDeclaration","scope":2314,"src":"13897:22:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2299,"name":"uint256","nodeType":"ElementaryTypeName","src":"13897:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2303,"mutability":"mutable","name":"tokenOut","nameLocation":"13936:8:24","nodeType":"VariableDeclaration","scope":2314,"src":"13929:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":2302,"nodeType":"UserDefinedTypeName","pathNode":{"id":2301,"name":"IERC20","nameLocations":["13929:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"13929:6:24"},"referencedDeclaration":10558,"src":"13929:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2305,"mutability":"mutable","name":"exactAmountOut","nameLocation":"13962:14:24","nodeType":"VariableDeclaration","scope":2314,"src":"13954:22:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2304,"name":"uint256","nodeType":"ElementaryTypeName","src":"13954:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2307,"mutability":"mutable","name":"wethIsEth","nameLocation":"13991:9:24","nodeType":"VariableDeclaration","scope":2314,"src":"13986:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2306,"name":"bool","nodeType":"ElementaryTypeName","src":"13986:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2309,"mutability":"mutable","name":"userData","nameLocation":"14023:8:24","nodeType":"VariableDeclaration","scope":2314,"src":"14010:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2308,"name":"bytes","nodeType":"ElementaryTypeName","src":"14010:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"13865:172:24"},"returnParameters":{"id":2313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2312,"mutability":"mutable","name":"bptAmountIn","nameLocation":"14072:11:24","nodeType":"VariableDeclaration","scope":2314,"src":"14064:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2311,"name":"uint256","nodeType":"ElementaryTypeName","src":"14064:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14063:21:24"},"scope":2489,"src":"13822:263:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2315,"nodeType":"StructuredDocumentation","src":"14091:549:24","text":" @notice Queries a `removeLiquiditySingleTokenExactOut` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenOut Token used to remove liquidity\n @param exactAmountOut Expected exact amount of tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return bptAmountIn Expected amount of pool tokens to burn"},"functionSelector":"53d0bb98","id":2331,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquiditySingleTokenExactOut","nameLocation":"14654:39:24","nodeType":"FunctionDefinition","parameters":{"id":2327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2317,"mutability":"mutable","name":"pool","nameLocation":"14711:4:24","nodeType":"VariableDeclaration","scope":2331,"src":"14703:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2316,"name":"address","nodeType":"ElementaryTypeName","src":"14703:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2320,"mutability":"mutable","name":"tokenOut","nameLocation":"14732:8:24","nodeType":"VariableDeclaration","scope":2331,"src":"14725:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":2319,"nodeType":"UserDefinedTypeName","pathNode":{"id":2318,"name":"IERC20","nameLocations":["14725:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"14725:6:24"},"referencedDeclaration":10558,"src":"14725:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2322,"mutability":"mutable","name":"exactAmountOut","nameLocation":"14758:14:24","nodeType":"VariableDeclaration","scope":2331,"src":"14750:22:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2321,"name":"uint256","nodeType":"ElementaryTypeName","src":"14750:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2324,"mutability":"mutable","name":"sender","nameLocation":"14790:6:24","nodeType":"VariableDeclaration","scope":2331,"src":"14782:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2323,"name":"address","nodeType":"ElementaryTypeName","src":"14782:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2326,"mutability":"mutable","name":"userData","nameLocation":"14819:8:24","nodeType":"VariableDeclaration","scope":2331,"src":"14806:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2325,"name":"bytes","nodeType":"ElementaryTypeName","src":"14806:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"14693:140:24"},"returnParameters":{"id":2330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2329,"mutability":"mutable","name":"bptAmountIn","nameLocation":"14860:11:24","nodeType":"VariableDeclaration","scope":2331,"src":"14852:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2328,"name":"uint256","nodeType":"ElementaryTypeName","src":"14852:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14851:21:24"},"scope":2489,"src":"14645:228:24","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2332,"nodeType":"StructuredDocumentation","src":"14879:960:24","text":" @notice Removes liquidity from a pool with a custom request.\n @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n In any case the caller can expect them to be hard boundaries for the request.\n @param pool Address of the liquidity pool\n @param maxBptAmountIn Maximum amount of pool tokens provided\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return bptAmountIn Actual amount of pool tokens burned\n @return amountsOut Actual amounts of tokens received, sorted in token registration order\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"82bf2b24","id":2353,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityCustom","nameLocation":"15853:21:24","nodeType":"FunctionDefinition","parameters":{"id":2344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2334,"mutability":"mutable","name":"pool","nameLocation":"15892:4:24","nodeType":"VariableDeclaration","scope":2353,"src":"15884:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2333,"name":"address","nodeType":"ElementaryTypeName","src":"15884:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2336,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"15914:14:24","nodeType":"VariableDeclaration","scope":2353,"src":"15906:22:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2335,"name":"uint256","nodeType":"ElementaryTypeName","src":"15906:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2339,"mutability":"mutable","name":"minAmountsOut","nameLocation":"15955:13:24","nodeType":"VariableDeclaration","scope":2353,"src":"15938:30:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2337,"name":"uint256","nodeType":"ElementaryTypeName","src":"15938:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2338,"nodeType":"ArrayTypeName","src":"15938:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2341,"mutability":"mutable","name":"wethIsEth","nameLocation":"15983:9:24","nodeType":"VariableDeclaration","scope":2353,"src":"15978:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2340,"name":"bool","nodeType":"ElementaryTypeName","src":"15978:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2343,"mutability":"mutable","name":"userData","nameLocation":"16015:8:24","nodeType":"VariableDeclaration","scope":2353,"src":"16002:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2342,"name":"bytes","nodeType":"ElementaryTypeName","src":"16002:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"15874:155:24"},"returnParameters":{"id":2352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2346,"mutability":"mutable","name":"bptAmountIn","nameLocation":"16064:11:24","nodeType":"VariableDeclaration","scope":2353,"src":"16056:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2345,"name":"uint256","nodeType":"ElementaryTypeName","src":"16056:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2349,"mutability":"mutable","name":"amountsOut","nameLocation":"16094:10:24","nodeType":"VariableDeclaration","scope":2353,"src":"16077:27:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2347,"name":"uint256","nodeType":"ElementaryTypeName","src":"16077:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2348,"nodeType":"ArrayTypeName","src":"16077:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2351,"mutability":"mutable","name":"returnData","nameLocation":"16119:10:24","nodeType":"VariableDeclaration","scope":2353,"src":"16106:23:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2350,"name":"bytes","nodeType":"ElementaryTypeName","src":"16106:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"16055:75:24"},"scope":2489,"src":"15844:287:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2354,"nodeType":"StructuredDocumentation","src":"16137:779:24","text":" @notice Queries a `removeLiquidityCustom` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param maxBptAmountIn Maximum amount of pool tokens provided\n @param minAmountsOut Expected minimum amounts of tokens to receive, sorted in token registration order\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return bptAmountIn Expected amount of pool tokens to burn\n @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"c330c7be","id":2375,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquidityCustom","nameLocation":"16930:26:24","nodeType":"FunctionDefinition","parameters":{"id":2366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2356,"mutability":"mutable","name":"pool","nameLocation":"16974:4:24","nodeType":"VariableDeclaration","scope":2375,"src":"16966:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2355,"name":"address","nodeType":"ElementaryTypeName","src":"16966:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2358,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"16996:14:24","nodeType":"VariableDeclaration","scope":2375,"src":"16988:22:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2357,"name":"uint256","nodeType":"ElementaryTypeName","src":"16988:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2361,"mutability":"mutable","name":"minAmountsOut","nameLocation":"17037:13:24","nodeType":"VariableDeclaration","scope":2375,"src":"17020:30:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2359,"name":"uint256","nodeType":"ElementaryTypeName","src":"17020:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2360,"nodeType":"ArrayTypeName","src":"17020:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2363,"mutability":"mutable","name":"sender","nameLocation":"17068:6:24","nodeType":"VariableDeclaration","scope":2375,"src":"17060:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2362,"name":"address","nodeType":"ElementaryTypeName","src":"17060:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2365,"mutability":"mutable","name":"userData","nameLocation":"17097:8:24","nodeType":"VariableDeclaration","scope":2375,"src":"17084:21:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2364,"name":"bytes","nodeType":"ElementaryTypeName","src":"17084:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"16956:155:24"},"returnParameters":{"id":2374,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2368,"mutability":"mutable","name":"bptAmountIn","nameLocation":"17138:11:24","nodeType":"VariableDeclaration","scope":2375,"src":"17130:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2367,"name":"uint256","nodeType":"ElementaryTypeName","src":"17130:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2371,"mutability":"mutable","name":"amountsOut","nameLocation":"17168:10:24","nodeType":"VariableDeclaration","scope":2375,"src":"17151:27:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2369,"name":"uint256","nodeType":"ElementaryTypeName","src":"17151:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2370,"nodeType":"ArrayTypeName","src":"17151:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2373,"mutability":"mutable","name":"returnData","nameLocation":"17193:10:24","nodeType":"VariableDeclaration","scope":2375,"src":"17180:23:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2372,"name":"bytes","nodeType":"ElementaryTypeName","src":"17180:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"17129:75:24"},"scope":2489,"src":"16921:284:24","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2376,"nodeType":"StructuredDocumentation","src":"17211:447:24","text":" @notice Removes liquidity proportionally, burning an exact pool token amount. Only available in Recovery Mode.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @return amountsOut Actual amounts of tokens received, sorted in token registration order"},"functionSelector":"08c04793","id":2389,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityRecovery","nameLocation":"17672:23:24","nodeType":"FunctionDefinition","parameters":{"id":2384,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2378,"mutability":"mutable","name":"pool","nameLocation":"17713:4:24","nodeType":"VariableDeclaration","scope":2389,"src":"17705:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2377,"name":"address","nodeType":"ElementaryTypeName","src":"17705:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2380,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"17735:16:24","nodeType":"VariableDeclaration","scope":2389,"src":"17727:24:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2379,"name":"uint256","nodeType":"ElementaryTypeName","src":"17727:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2383,"mutability":"mutable","name":"minAmountsOut","nameLocation":"17778:13:24","nodeType":"VariableDeclaration","scope":2389,"src":"17761:30:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2381,"name":"uint256","nodeType":"ElementaryTypeName","src":"17761:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2382,"nodeType":"ArrayTypeName","src":"17761:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"17695:102:24"},"returnParameters":{"id":2388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2387,"mutability":"mutable","name":"amountsOut","nameLocation":"17841:10:24","nodeType":"VariableDeclaration","scope":2389,"src":"17824:27:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2385,"name":"uint256","nodeType":"ElementaryTypeName","src":"17824:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2386,"nodeType":"ArrayTypeName","src":"17824:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"17823:29:24"},"scope":2489,"src":"17663:190:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2390,"nodeType":"StructuredDocumentation","src":"17859:334:24","text":" @notice Queries a `removeLiquidityRecovery` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided for the query\n @return amountsOut Expected amounts of tokens to receive, sorted in token registration order"},"functionSelector":"b037ed36","id":2400,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquidityRecovery","nameLocation":"18207:28:24","nodeType":"FunctionDefinition","parameters":{"id":2395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2392,"mutability":"mutable","name":"pool","nameLocation":"18253:4:24","nodeType":"VariableDeclaration","scope":2400,"src":"18245:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2391,"name":"address","nodeType":"ElementaryTypeName","src":"18245:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2394,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"18275:16:24","nodeType":"VariableDeclaration","scope":2400,"src":"18267:24:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2393,"name":"uint256","nodeType":"ElementaryTypeName","src":"18267:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18235:62:24"},"returnParameters":{"id":2399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2398,"mutability":"mutable","name":"amountsOut","nameLocation":"18333:10:24","nodeType":"VariableDeclaration","scope":2400,"src":"18316:27:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2396,"name":"uint256","nodeType":"ElementaryTypeName","src":"18316:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2397,"nodeType":"ArrayTypeName","src":"18316:9:24","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"18315:29:24"},"scope":2489,"src":"18198:147:24","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2401,"nodeType":"StructuredDocumentation","src":"18559:744:24","text":" @notice Executes a swap operation specifying an exact input token amount.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountIn Exact amounts of input tokens to send\n @param minAmountOut Minimum amount of tokens to be received\n @param deadline Deadline for the swap, after which it will revert\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the swap request\n @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens"},"functionSelector":"750283bc","id":2424,"implemented":false,"kind":"function","modifiers":[],"name":"swapSingleTokenExactIn","nameLocation":"19317:22:24","nodeType":"FunctionDefinition","parameters":{"id":2420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2403,"mutability":"mutable","name":"pool","nameLocation":"19357:4:24","nodeType":"VariableDeclaration","scope":2424,"src":"19349:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2402,"name":"address","nodeType":"ElementaryTypeName","src":"19349:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2406,"mutability":"mutable","name":"tokenIn","nameLocation":"19378:7:24","nodeType":"VariableDeclaration","scope":2424,"src":"19371:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":2405,"nodeType":"UserDefinedTypeName","pathNode":{"id":2404,"name":"IERC20","nameLocations":["19371:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"19371:6:24"},"referencedDeclaration":10558,"src":"19371:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2409,"mutability":"mutable","name":"tokenOut","nameLocation":"19402:8:24","nodeType":"VariableDeclaration","scope":2424,"src":"19395:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":2408,"nodeType":"UserDefinedTypeName","pathNode":{"id":2407,"name":"IERC20","nameLocations":["19395:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"19395:6:24"},"referencedDeclaration":10558,"src":"19395:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2411,"mutability":"mutable","name":"exactAmountIn","nameLocation":"19428:13:24","nodeType":"VariableDeclaration","scope":2424,"src":"19420:21:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2410,"name":"uint256","nodeType":"ElementaryTypeName","src":"19420:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2413,"mutability":"mutable","name":"minAmountOut","nameLocation":"19459:12:24","nodeType":"VariableDeclaration","scope":2424,"src":"19451:20:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2412,"name":"uint256","nodeType":"ElementaryTypeName","src":"19451:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2415,"mutability":"mutable","name":"deadline","nameLocation":"19489:8:24","nodeType":"VariableDeclaration","scope":2424,"src":"19481:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2414,"name":"uint256","nodeType":"ElementaryTypeName","src":"19481:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2417,"mutability":"mutable","name":"wethIsEth","nameLocation":"19512:9:24","nodeType":"VariableDeclaration","scope":2424,"src":"19507:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2416,"name":"bool","nodeType":"ElementaryTypeName","src":"19507:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2419,"mutability":"mutable","name":"userData","nameLocation":"19546:8:24","nodeType":"VariableDeclaration","scope":2424,"src":"19531:23:24","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2418,"name":"bytes","nodeType":"ElementaryTypeName","src":"19531:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19339:221:24"},"returnParameters":{"id":2423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2422,"mutability":"mutable","name":"amountOut","nameLocation":"19595:9:24","nodeType":"VariableDeclaration","scope":2424,"src":"19587:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2421,"name":"uint256","nodeType":"ElementaryTypeName","src":"19587:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19586:19:24"},"scope":2489,"src":"19308:298:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2425,"nodeType":"StructuredDocumentation","src":"19612:637:24","text":" @notice Queries a swap operation specifying an exact input token amount without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountIn Exact amounts of input tokens to send\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens"},"functionSelector":"3ebc54e5","id":2444,"implemented":false,"kind":"function","modifiers":[],"name":"querySwapSingleTokenExactIn","nameLocation":"20263:27:24","nodeType":"FunctionDefinition","parameters":{"id":2440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2427,"mutability":"mutable","name":"pool","nameLocation":"20308:4:24","nodeType":"VariableDeclaration","scope":2444,"src":"20300:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2426,"name":"address","nodeType":"ElementaryTypeName","src":"20300:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2430,"mutability":"mutable","name":"tokenIn","nameLocation":"20329:7:24","nodeType":"VariableDeclaration","scope":2444,"src":"20322:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":2429,"nodeType":"UserDefinedTypeName","pathNode":{"id":2428,"name":"IERC20","nameLocations":["20322:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"20322:6:24"},"referencedDeclaration":10558,"src":"20322:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2433,"mutability":"mutable","name":"tokenOut","nameLocation":"20353:8:24","nodeType":"VariableDeclaration","scope":2444,"src":"20346:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":2432,"nodeType":"UserDefinedTypeName","pathNode":{"id":2431,"name":"IERC20","nameLocations":["20346:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"20346:6:24"},"referencedDeclaration":10558,"src":"20346:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2435,"mutability":"mutable","name":"exactAmountIn","nameLocation":"20379:13:24","nodeType":"VariableDeclaration","scope":2444,"src":"20371:21:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2434,"name":"uint256","nodeType":"ElementaryTypeName","src":"20371:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2437,"mutability":"mutable","name":"sender","nameLocation":"20410:6:24","nodeType":"VariableDeclaration","scope":2444,"src":"20402:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2436,"name":"address","nodeType":"ElementaryTypeName","src":"20402:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2439,"mutability":"mutable","name":"userData","nameLocation":"20441:8:24","nodeType":"VariableDeclaration","scope":2444,"src":"20426:23:24","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2438,"name":"bytes","nodeType":"ElementaryTypeName","src":"20426:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"20290:165:24"},"returnParameters":{"id":2443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2442,"mutability":"mutable","name":"amountOut","nameLocation":"20482:9:24","nodeType":"VariableDeclaration","scope":2444,"src":"20474:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2441,"name":"uint256","nodeType":"ElementaryTypeName","src":"20474:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20473:19:24"},"scope":2489,"src":"20254:239:24","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2445,"nodeType":"StructuredDocumentation","src":"20499:743:24","text":" @notice Executes a swap operation specifying an exact output token amount.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountOut Exact amounts of input tokens to receive\n @param maxAmountIn Maximum amount of tokens to be sent\n @param deadline Deadline for the swap, after which it will revert\n @param userData Additional (optional) data sent with the swap request\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens"},"functionSelector":"94e86ef8","id":2468,"implemented":false,"kind":"function","modifiers":[],"name":"swapSingleTokenExactOut","nameLocation":"21256:23:24","nodeType":"FunctionDefinition","parameters":{"id":2464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2447,"mutability":"mutable","name":"pool","nameLocation":"21297:4:24","nodeType":"VariableDeclaration","scope":2468,"src":"21289:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2446,"name":"address","nodeType":"ElementaryTypeName","src":"21289:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2450,"mutability":"mutable","name":"tokenIn","nameLocation":"21318:7:24","nodeType":"VariableDeclaration","scope":2468,"src":"21311:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":2449,"nodeType":"UserDefinedTypeName","pathNode":{"id":2448,"name":"IERC20","nameLocations":["21311:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"21311:6:24"},"referencedDeclaration":10558,"src":"21311:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2453,"mutability":"mutable","name":"tokenOut","nameLocation":"21342:8:24","nodeType":"VariableDeclaration","scope":2468,"src":"21335:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":2452,"nodeType":"UserDefinedTypeName","pathNode":{"id":2451,"name":"IERC20","nameLocations":["21335:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"21335:6:24"},"referencedDeclaration":10558,"src":"21335:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2455,"mutability":"mutable","name":"exactAmountOut","nameLocation":"21368:14:24","nodeType":"VariableDeclaration","scope":2468,"src":"21360:22:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2454,"name":"uint256","nodeType":"ElementaryTypeName","src":"21360:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2457,"mutability":"mutable","name":"maxAmountIn","nameLocation":"21400:11:24","nodeType":"VariableDeclaration","scope":2468,"src":"21392:19:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2456,"name":"uint256","nodeType":"ElementaryTypeName","src":"21392:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2459,"mutability":"mutable","name":"deadline","nameLocation":"21429:8:24","nodeType":"VariableDeclaration","scope":2468,"src":"21421:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2458,"name":"uint256","nodeType":"ElementaryTypeName","src":"21421:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2461,"mutability":"mutable","name":"wethIsEth","nameLocation":"21452:9:24","nodeType":"VariableDeclaration","scope":2468,"src":"21447:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2460,"name":"bool","nodeType":"ElementaryTypeName","src":"21447:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2463,"mutability":"mutable","name":"userData","nameLocation":"21486:8:24","nodeType":"VariableDeclaration","scope":2468,"src":"21471:23:24","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2462,"name":"bytes","nodeType":"ElementaryTypeName","src":"21471:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21279:221:24"},"returnParameters":{"id":2467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2466,"mutability":"mutable","name":"amountIn","nameLocation":"21535:8:24","nodeType":"VariableDeclaration","scope":2468,"src":"21527:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2465,"name":"uint256","nodeType":"ElementaryTypeName","src":"21527:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21526:18:24"},"scope":2489,"src":"21247:298:24","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2469,"nodeType":"StructuredDocumentation","src":"21551:641:24","text":" @notice Queries a swap operation specifying an exact output token amount without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountOut Exact amounts of input tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens"},"functionSelector":"175d4408","id":2488,"implemented":false,"kind":"function","modifiers":[],"name":"querySwapSingleTokenExactOut","nameLocation":"22206:28:24","nodeType":"FunctionDefinition","parameters":{"id":2484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2471,"mutability":"mutable","name":"pool","nameLocation":"22252:4:24","nodeType":"VariableDeclaration","scope":2488,"src":"22244:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2470,"name":"address","nodeType":"ElementaryTypeName","src":"22244:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2474,"mutability":"mutable","name":"tokenIn","nameLocation":"22273:7:24","nodeType":"VariableDeclaration","scope":2488,"src":"22266:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":2473,"nodeType":"UserDefinedTypeName","pathNode":{"id":2472,"name":"IERC20","nameLocations":["22266:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"22266:6:24"},"referencedDeclaration":10558,"src":"22266:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2477,"mutability":"mutable","name":"tokenOut","nameLocation":"22297:8:24","nodeType":"VariableDeclaration","scope":2488,"src":"22290:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":2476,"nodeType":"UserDefinedTypeName","pathNode":{"id":2475,"name":"IERC20","nameLocations":["22290:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"22290:6:24"},"referencedDeclaration":10558,"src":"22290:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2479,"mutability":"mutable","name":"exactAmountOut","nameLocation":"22323:14:24","nodeType":"VariableDeclaration","scope":2488,"src":"22315:22:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2478,"name":"uint256","nodeType":"ElementaryTypeName","src":"22315:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2481,"mutability":"mutable","name":"sender","nameLocation":"22355:6:24","nodeType":"VariableDeclaration","scope":2488,"src":"22347:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2480,"name":"address","nodeType":"ElementaryTypeName","src":"22347:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2483,"mutability":"mutable","name":"userData","nameLocation":"22386:8:24","nodeType":"VariableDeclaration","scope":2488,"src":"22371:23:24","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2482,"name":"bytes","nodeType":"ElementaryTypeName","src":"22371:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22234:166:24"},"returnParameters":{"id":2487,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2486,"mutability":"mutable","name":"amountIn","nameLocation":"22427:8:24","nodeType":"VariableDeclaration","scope":2488,"src":"22419:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2485,"name":"uint256","nodeType":"ElementaryTypeName","src":"22419:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22418:18:24"},"scope":2489,"src":"22197:240:24","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2490,"src":"462:21977:24","usedErrors":[],"usedEvents":[]}],"src":"46:22394:24"},"id":24},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","exportedSymbols":{"IAuthentication":[14],"IVault":[2527],"IVaultAdmin":[2817],"IVaultErrors":[3184],"IVaultEvents":[3423],"IVaultExtension":[3842],"IVaultMain":[3978]},"id":2528,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2491,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:25"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"../solidity-utils/helpers/IAuthentication.sol","id":2493,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2528,"sourceUnit":15,"src":"72:80:25","symbolAliases":[{"foreign":{"id":2492,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"81:15:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","file":"./IVaultExtension.sol","id":2495,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2528,"sourceUnit":3843,"src":"153:56:25","symbolAliases":[{"foreign":{"id":2494,"name":"IVaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"162:15:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"./IVaultErrors.sol","id":2497,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2528,"sourceUnit":3185,"src":"210:50:25","symbolAliases":[{"foreign":{"id":2496,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3184,"src":"219:12:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","file":"./IVaultEvents.sol","id":2499,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2528,"sourceUnit":3424,"src":"261:50:25","symbolAliases":[{"foreign":{"id":2498,"name":"IVaultEvents","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3423,"src":"270:12:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"./IVaultAdmin.sol","id":2501,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2528,"sourceUnit":2818,"src":"312:48:25","symbolAliases":[{"foreign":{"id":2500,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"321:11:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","file":"./IVaultMain.sol","id":2503,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2528,"sourceUnit":3979,"src":"361:46:25","symbolAliases":[{"foreign":{"id":2502,"name":"IVaultMain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3978,"src":"370:10:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2505,"name":"IVaultMain","nameLocations":["539:10:25"],"nodeType":"IdentifierPath","referencedDeclaration":3978,"src":"539:10:25"},"id":2506,"nodeType":"InheritanceSpecifier","src":"539:10:25"},{"baseName":{"id":2507,"name":"IVaultExtension","nameLocations":["551:15:25"],"nodeType":"IdentifierPath","referencedDeclaration":3842,"src":"551:15:25"},"id":2508,"nodeType":"InheritanceSpecifier","src":"551:15:25"},{"baseName":{"id":2509,"name":"IVaultAdmin","nameLocations":["568:11:25"],"nodeType":"IdentifierPath","referencedDeclaration":2817,"src":"568:11:25"},"id":2510,"nodeType":"InheritanceSpecifier","src":"568:11:25"},{"baseName":{"id":2511,"name":"IVaultErrors","nameLocations":["581:12:25"],"nodeType":"IdentifierPath","referencedDeclaration":3184,"src":"581:12:25"},"id":2512,"nodeType":"InheritanceSpecifier","src":"581:12:25"},{"baseName":{"id":2513,"name":"IVaultEvents","nameLocations":["595:12:25"],"nodeType":"IdentifierPath","referencedDeclaration":3423,"src":"595:12:25"},"id":2514,"nodeType":"InheritanceSpecifier","src":"595:12:25"},{"baseName":{"id":2515,"name":"IAuthentication","nameLocations":["609:15:25"],"nodeType":"IdentifierPath","referencedDeclaration":14,"src":"609:15:25"},"id":2516,"nodeType":"InheritanceSpecifier","src":"609:15:25"}],"canonicalName":"IVault","contractDependencies":[],"contractKind":"interface","documentation":{"id":2504,"nodeType":"StructuredDocumentation","src":"409:110:25","text":"@notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries."},"fullyImplemented":false,"id":2527,"linearizedBaseContracts":[2527,14,3423,3184,2817,3842,3978],"name":"IVault","nameLocation":"529:6:25","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[2545,3446],"documentation":{"id":2517,"nodeType":"StructuredDocumentation","src":"631:41:25","text":"@return vault The main Vault address."},"functionSelector":"fbfa77cf","id":2526,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"686:5:25","nodeType":"FunctionDefinition","overrides":{"id":2521,"nodeType":"OverrideSpecifier","overrides":[{"id":2519,"name":"IVaultAdmin","nameLocations":["717:11:25"],"nodeType":"IdentifierPath","referencedDeclaration":2817,"src":"717:11:25"},{"id":2520,"name":"IVaultExtension","nameLocations":["730:15:25"],"nodeType":"IdentifierPath","referencedDeclaration":3842,"src":"730:15:25"}],"src":"708:38:25"},"parameters":{"id":2518,"nodeType":"ParameterList","parameters":[],"src":"691:2:25"},"returnParameters":{"id":2525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2524,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2526,"src":"756:6:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":2523,"nodeType":"UserDefinedTypeName","pathNode":{"id":2522,"name":"IVault","nameLocations":["756:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"756:6:25"},"referencedDeclaration":2527,"src":"756:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"}],"src":"755:8:25"},"scope":2527,"src":"677:87:25","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2528,"src":"519:247:25","usedErrors":[5,2829,2834,2839,2844,2853,2859,2862,2865,2868,2871,2874,2877,2886,2889,2892,2895,2898,2901,2904,2907,2910,2913,2916,2919,2922,2925,2928,2934,2941,2948,2951,2954,2964,2974,2981,2984,2987,2990,3000,3010,3017,3020,3023,3026,3029,3032,3035,3038,3041,3046,3051,3056,3059,3062,3065,3068,3071,3076,3081,3086,3092,3098,3101,3109,3115,3121,3124,3127,3130,3135,3145,3155,3162,3165,3168,3171,3174,3177,3180,3183],"usedEvents":[3222,3227,3246,3258,3270,3288,3306,3311,3314,3317,3324,3331,3338,3345,3352,3358,3364,3376,3386,3396,3408,3413,3422]}],"src":"46:721:25"},"id":25},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","exportedSymbols":{"IAuthorizer":[1341],"IERC4626":[9828],"IProtocolFeeController":[1955],"IVault":[2527],"IVaultAdmin":[2817]},"id":2818,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2529,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:26"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2531,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2818,"sourceUnit":9829,"src":"72:75:26","symbolAliases":[{"foreign":{"id":2530,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9828,"src":"81:8:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":2533,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2818,"sourceUnit":1956,"src":"149:70:26","symbolAliases":[{"foreign":{"id":2532,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"158:22:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":2535,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2818,"sourceUnit":1342,"src":"220:48:26","symbolAliases":[{"foreign":{"id":2534,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"229:11:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":2537,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2818,"sourceUnit":2528,"src":"269:38:26","symbolAliases":[{"foreign":{"id":2536,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"278:6:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultAdmin","contractDependencies":[],"contractKind":"interface","documentation":{"id":2538,"nodeType":"StructuredDocumentation","src":"309:276:26","text":" @notice Interface for functions defined on the `VaultAdmin` contract.\n @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n as two delegate calls add gas to each call. Most of the permissioned calls are here."},"fullyImplemented":false,"id":2817,"linearizedBaseContracts":[2817],"name":"IVaultAdmin","nameLocation":"596:11:26","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2539,"nodeType":"StructuredDocumentation","src":"841:206:26","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":2545,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1061:5:26","nodeType":"FunctionDefinition","parameters":{"id":2540,"nodeType":"ParameterList","parameters":[],"src":"1066:2:26"},"returnParameters":{"id":2544,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2543,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2545,"src":"1092:6:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":2542,"nodeType":"UserDefinedTypeName","pathNode":{"id":2541,"name":"IVault","nameLocations":["1092:6:26"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"1092:6:26"},"referencedDeclaration":2527,"src":"1092:6:26","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1091:8:26"},"scope":2817,"src":"1052:48:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2546,"nodeType":"StructuredDocumentation","src":"1106:326:26","text":" @notice Returns the Vault's pause window end time.\n @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n by governance. Balancer timestamps are 32 bits.\n @return pauseWindowEndTime The timestamp when the Vault's pause window ends"},"functionSelector":"8a8d123a","id":2551,"implemented":false,"kind":"function","modifiers":[],"name":"getPauseWindowEndTime","nameLocation":"1446:21:26","nodeType":"FunctionDefinition","parameters":{"id":2547,"nodeType":"ParameterList","parameters":[],"src":"1467:2:26"},"returnParameters":{"id":2550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2549,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1500:18:26","nodeType":"VariableDeclaration","scope":2551,"src":"1493:25:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2548,"name":"uint32","nodeType":"ElementaryTypeName","src":"1493:6:26","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1492:27:26"},"scope":2817,"src":"1437:83:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2552,"nodeType":"StructuredDocumentation","src":"1526:414:26","text":" @notice Returns the Vault's buffer period duration.\n @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n timestamps are 32 bits.\n @return bufferPeriodDuration The length of the buffer period in seconds"},"functionSelector":"20c1fb7a","id":2557,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodDuration","nameLocation":"1954:23:26","nodeType":"FunctionDefinition","parameters":{"id":2553,"nodeType":"ParameterList","parameters":[],"src":"1977:2:26"},"returnParameters":{"id":2556,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2555,"mutability":"mutable","name":"bufferPeriodDuration","nameLocation":"2010:20:26","nodeType":"VariableDeclaration","scope":2557,"src":"2003:27:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2554,"name":"uint32","nodeType":"ElementaryTypeName","src":"2003:6:26","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2002:29:26"},"scope":2817,"src":"1945:87:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2558,"nodeType":"StructuredDocumentation","src":"2038:321:26","text":" @notice Returns the Vault's buffer period end time.\n @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n timestamps are 32 bits.\n @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused"},"functionSelector":"cd51c12f","id":2563,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodEndTime","nameLocation":"2373:22:26","nodeType":"FunctionDefinition","parameters":{"id":2559,"nodeType":"ParameterList","parameters":[],"src":"2395:2:26"},"returnParameters":{"id":2562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2561,"mutability":"mutable","name":"bufferPeriodEndTime","nameLocation":"2428:19:26","nodeType":"VariableDeclaration","scope":2563,"src":"2421:26:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2560,"name":"uint32","nodeType":"ElementaryTypeName","src":"2421:6:26","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2420:28:26"},"scope":2817,"src":"2364:85:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2564,"nodeType":"StructuredDocumentation","src":"2455:193:26","text":" @notice Get the minimum number of tokens in a pool.\n @dev We expect the vast majority of pools to be 2-token.\n @return minTokens The minimum token count of a pool"},"functionSelector":"a8175b27","id":2569,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumPoolTokens","nameLocation":"2662:20:26","nodeType":"FunctionDefinition","parameters":{"id":2565,"nodeType":"ParameterList","parameters":[],"src":"2682:2:26"},"returnParameters":{"id":2568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2567,"mutability":"mutable","name":"minTokens","nameLocation":"2716:9:26","nodeType":"VariableDeclaration","scope":2569,"src":"2708:17:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2566,"name":"uint256","nodeType":"ElementaryTypeName","src":"2708:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2707:19:26"},"scope":2817,"src":"2653:74:26","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":2570,"nodeType":"StructuredDocumentation","src":"2733:129:26","text":" @notice Get the maximum number of tokens in a pool.\n @return maxTokens The maximum token count of a pool"},"functionSelector":"2e42f4d5","id":2575,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumPoolTokens","nameLocation":"2876:20:26","nodeType":"FunctionDefinition","parameters":{"id":2571,"nodeType":"ParameterList","parameters":[],"src":"2896:2:26"},"returnParameters":{"id":2574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2573,"mutability":"mutable","name":"maxTokens","nameLocation":"2930:9:26","nodeType":"VariableDeclaration","scope":2575,"src":"2922:17:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2572,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2921:19:26"},"scope":2817,"src":"2867:74:26","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":2576,"nodeType":"StructuredDocumentation","src":"2947:439:26","text":" @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization"},"functionSelector":"d0965a6b","id":2581,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolMinimumTotalSupply","nameLocation":"3400:25:26","nodeType":"FunctionDefinition","parameters":{"id":2577,"nodeType":"ParameterList","parameters":[],"src":"3425:2:26"},"returnParameters":{"id":2580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2579,"mutability":"mutable","name":"poolMinimumTotalSupply","nameLocation":"3459:22:26","nodeType":"VariableDeclaration","scope":2581,"src":"3451:30:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2578,"name":"uint256","nodeType":"ElementaryTypeName","src":"3451:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3450:32:26"},"scope":2817,"src":"3391:92:26","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":2582,"nodeType":"StructuredDocumentation","src":"3489:502:26","text":" @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n to the Vault, as buffers are not tokenized.\n @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization"},"functionSelector":"26a8a991","id":2587,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferMinimumTotalSupply","nameLocation":"4005:27:26","nodeType":"FunctionDefinition","parameters":{"id":2583,"nodeType":"ParameterList","parameters":[],"src":"4032:2:26"},"returnParameters":{"id":2586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2585,"mutability":"mutable","name":"bufferMinimumTotalSupply","nameLocation":"4066:24:26","nodeType":"VariableDeclaration","scope":2587,"src":"4058:32:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2584,"name":"uint256","nodeType":"ElementaryTypeName","src":"4058:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4057:34:26"},"scope":2817,"src":"3996:96:26","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":2588,"nodeType":"StructuredDocumentation","src":"4098:291:26","text":" @notice Get the minimum trade amount in a pool operation.\n @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number"},"functionSelector":"e2cb0ba0","id":2593,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumTradeAmount","nameLocation":"4403:21:26","nodeType":"FunctionDefinition","parameters":{"id":2589,"nodeType":"ParameterList","parameters":[],"src":"4424:2:26"},"returnParameters":{"id":2592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2591,"mutability":"mutable","name":"minimumTradeAmount","nameLocation":"4458:18:26","nodeType":"VariableDeclaration","scope":2593,"src":"4450:26:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2590,"name":"uint256","nodeType":"ElementaryTypeName","src":"4450:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4449:28:26"},"scope":2817,"src":"4394:84:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2594,"nodeType":"StructuredDocumentation","src":"4484:271:26","text":" @notice Get the minimum wrap amount in a buffer operation.\n @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n @return minimumWrapAmount The minimum wrap amount in native underlying token decimals"},"functionSelector":"53956aa2","id":2599,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumWrapAmount","nameLocation":"4769:20:26","nodeType":"FunctionDefinition","parameters":{"id":2595,"nodeType":"ParameterList","parameters":[],"src":"4789:2:26"},"returnParameters":{"id":2598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2597,"mutability":"mutable","name":"minimumWrapAmount","nameLocation":"4823:17:26","nodeType":"VariableDeclaration","scope":2599,"src":"4815:25:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2596,"name":"uint256","nodeType":"ElementaryTypeName","src":"4815:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4814:27:26"},"scope":2817,"src":"4760:82:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2600,"nodeType":"StructuredDocumentation","src":"5069:529:26","text":" @notice Indicates whether the Vault is paused.\n @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n `areBuffersPaused` to check the pause state of the buffers.\n @return vaultPaused True if the Vault is paused"},"functionSelector":"098401f5","id":2605,"implemented":false,"kind":"function","modifiers":[],"name":"isVaultPaused","nameLocation":"5612:13:26","nodeType":"FunctionDefinition","parameters":{"id":2601,"nodeType":"ParameterList","parameters":[],"src":"5625:2:26"},"returnParameters":{"id":2604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2603,"mutability":"mutable","name":"vaultPaused","nameLocation":"5656:11:26","nodeType":"VariableDeclaration","scope":2605,"src":"5651:16:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2602,"name":"bool","nodeType":"ElementaryTypeName","src":"5651:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5650:18:26"},"scope":2817,"src":"5603:66:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2606,"nodeType":"StructuredDocumentation","src":"5675:400:26","text":" @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n @dev Balancer timestamps are 32 bits.\n @return vaultPaused True if the Vault is paused\n @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period"},"functionSelector":"85c8c015","id":2615,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultPausedState","nameLocation":"6089:19:26","nodeType":"FunctionDefinition","parameters":{"id":2607,"nodeType":"ParameterList","parameters":[],"src":"6108:2:26"},"returnParameters":{"id":2614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2609,"mutability":"mutable","name":"vaultPaused","nameLocation":"6163:11:26","nodeType":"VariableDeclaration","scope":2615,"src":"6158:16:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2608,"name":"bool","nodeType":"ElementaryTypeName","src":"6158:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2611,"mutability":"mutable","name":"vaultPauseWindowEndTime","nameLocation":"6183:23:26","nodeType":"VariableDeclaration","scope":2615,"src":"6176:30:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2610,"name":"uint32","nodeType":"ElementaryTypeName","src":"6176:6:26","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2613,"mutability":"mutable","name":"vaultBufferPeriodEndTime","nameLocation":"6215:24:26","nodeType":"VariableDeclaration","scope":2615,"src":"6208:31:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2612,"name":"uint32","nodeType":"ElementaryTypeName","src":"6208:6:26","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"6157:83:26"},"scope":2817,"src":"6080:161:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2616,"nodeType":"StructuredDocumentation","src":"6247:517:26","text":" @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n are also paused (with `pauseVaultBuffers`)."},"functionSelector":"9e0879c2","id":2619,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVault","nameLocation":"6778:10:26","nodeType":"FunctionDefinition","parameters":{"id":2617,"nodeType":"ParameterList","parameters":[],"src":"6788:2:26"},"returnParameters":{"id":2618,"nodeType":"ParameterList","parameters":[],"src":"6799:0:26"},"scope":2817,"src":"6769:31:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2620,"nodeType":"StructuredDocumentation","src":"6806:569:26","text":" @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused."},"functionSelector":"0b7562be","id":2623,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVault","nameLocation":"7389:12:26","nodeType":"FunctionDefinition","parameters":{"id":2621,"nodeType":"ParameterList","parameters":[],"src":"7401:2:26"},"returnParameters":{"id":2622,"nodeType":"ParameterList","parameters":[],"src":"7412:0:26"},"scope":2817,"src":"7380:33:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2624,"nodeType":"StructuredDocumentation","src":"7639:276:26","text":" @notice Pause the Pool: an emergency action which disables all pool functions.\n @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n deployment.\n @param pool The pool being paused"},"functionSelector":"55aca1ec","id":2629,"implemented":false,"kind":"function","modifiers":[],"name":"pausePool","nameLocation":"7929:9:26","nodeType":"FunctionDefinition","parameters":{"id":2627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2626,"mutability":"mutable","name":"pool","nameLocation":"7947:4:26","nodeType":"VariableDeclaration","scope":2629,"src":"7939:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2625,"name":"address","nodeType":"ElementaryTypeName","src":"7939:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7938:14:26"},"returnParameters":{"id":2628,"nodeType":"ParameterList","parameters":[],"src":"7961:0:26"},"scope":2817,"src":"7920:42:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2630,"nodeType":"StructuredDocumentation","src":"7968:366:26","text":" @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n @param pool The pool being unpaused"},"functionSelector":"f21c38cd","id":2635,"implemented":false,"kind":"function","modifiers":[],"name":"unpausePool","nameLocation":"8348:11:26","nodeType":"FunctionDefinition","parameters":{"id":2633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2632,"mutability":"mutable","name":"pool","nameLocation":"8368:4:26","nodeType":"VariableDeclaration","scope":2635,"src":"8360:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2631,"name":"address","nodeType":"ElementaryTypeName","src":"8360:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8359:14:26"},"returnParameters":{"id":2634,"nodeType":"ParameterList","parameters":[],"src":"8382:0:26"},"scope":2817,"src":"8339:44:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2636,"nodeType":"StructuredDocumentation","src":"8606:520:26","text":" @notice Assigns a new static swap fee percentage to the specified pool.\n @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n Emits the SwapFeePercentageChanged event.\n @param pool The address of the pool for which the static swap fee will be changed\n @param swapFeePercentage The new swap fee percentage to apply to the pool"},"functionSelector":"d15126ba","id":2643,"implemented":false,"kind":"function","modifiers":[],"name":"setStaticSwapFeePercentage","nameLocation":"9140:26:26","nodeType":"FunctionDefinition","parameters":{"id":2641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2638,"mutability":"mutable","name":"pool","nameLocation":"9175:4:26","nodeType":"VariableDeclaration","scope":2643,"src":"9167:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2637,"name":"address","nodeType":"ElementaryTypeName","src":"9167:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2640,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"9189:17:26","nodeType":"VariableDeclaration","scope":2643,"src":"9181:25:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2639,"name":"uint256","nodeType":"ElementaryTypeName","src":"9181:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9166:41:26"},"returnParameters":{"id":2642,"nodeType":"ParameterList","parameters":[],"src":"9216:0:26"},"scope":2817,"src":"9131:86:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2644,"nodeType":"StructuredDocumentation","src":"9223:463:26","text":" @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n @dev Fees are sent to the ProtocolFeeController address.\n @param pool The pool on which all aggregate fees should be collected\n @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"functionSelector":"8f4ab9ca","id":2655,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"9700:20:26","nodeType":"FunctionDefinition","parameters":{"id":2647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2646,"mutability":"mutable","name":"pool","nameLocation":"9738:4:26","nodeType":"VariableDeclaration","scope":2655,"src":"9730:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2645,"name":"address","nodeType":"ElementaryTypeName","src":"9730:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9720:28:26"},"returnParameters":{"id":2654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2650,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"9784:14:26","nodeType":"VariableDeclaration","scope":2655,"src":"9767:31:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2648,"name":"uint256","nodeType":"ElementaryTypeName","src":"9767:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2649,"nodeType":"ArrayTypeName","src":"9767:9:26","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2653,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"9817:15:26","nodeType":"VariableDeclaration","scope":2655,"src":"9800:32:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2651,"name":"uint256","nodeType":"ElementaryTypeName","src":"9800:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2652,"nodeType":"ArrayTypeName","src":"9800:9:26","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9766:67:26"},"scope":2817,"src":"9691:143:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2656,"nodeType":"StructuredDocumentation","src":"9840:755:26","text":" @notice Update an aggregate swap fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateSwapFeePercentageChanged` event.\n @param pool The pool whose swap fee percentage will be updated\n @param newAggregateSwapFeePercentage The new aggregate swap fee percentage"},"functionSelector":"5e0b06f4","id":2663,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateSwapFeePercentage","nameLocation":"10609:32:26","nodeType":"FunctionDefinition","parameters":{"id":2661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2658,"mutability":"mutable","name":"pool","nameLocation":"10650:4:26","nodeType":"VariableDeclaration","scope":2663,"src":"10642:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2657,"name":"address","nodeType":"ElementaryTypeName","src":"10642:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2660,"mutability":"mutable","name":"newAggregateSwapFeePercentage","nameLocation":"10664:29:26","nodeType":"VariableDeclaration","scope":2663,"src":"10656:37:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2659,"name":"uint256","nodeType":"ElementaryTypeName","src":"10656:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10641:53:26"},"returnParameters":{"id":2662,"nodeType":"ParameterList","parameters":[],"src":"10703:0:26"},"scope":2817,"src":"10600:104:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2664,"nodeType":"StructuredDocumentation","src":"10710:760:26","text":" @notice Update an aggregate yield fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateYieldFeePercentageChanged` event.\n @param pool The pool whose yield fee percentage will be updated\n @param newAggregateYieldFeePercentage The new aggregate yield fee percentage"},"functionSelector":"e253670a","id":2671,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateYieldFeePercentage","nameLocation":"11484:33:26","nodeType":"FunctionDefinition","parameters":{"id":2669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2666,"mutability":"mutable","name":"pool","nameLocation":"11526:4:26","nodeType":"VariableDeclaration","scope":2671,"src":"11518:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2665,"name":"address","nodeType":"ElementaryTypeName","src":"11518:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2668,"mutability":"mutable","name":"newAggregateYieldFeePercentage","nameLocation":"11540:30:26","nodeType":"VariableDeclaration","scope":2671,"src":"11532:38:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2667,"name":"uint256","nodeType":"ElementaryTypeName","src":"11532:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11517:54:26"},"returnParameters":{"id":2670,"nodeType":"ParameterList","parameters":[],"src":"11580:0:26"},"scope":2817,"src":"11475:106:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2672,"nodeType":"StructuredDocumentation","src":"11587:249:26","text":" @notice Sets a new Protocol Fee Controller for the Vault.\n @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n @param newProtocolFeeController The address of the new Protocol Fee Controller"},"functionSelector":"2d771389","id":2678,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolFeeController","nameLocation":"11850:24:26","nodeType":"FunctionDefinition","parameters":{"id":2676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2675,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"11898:24:26","nodeType":"VariableDeclaration","scope":2678,"src":"11875:47:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":2674,"nodeType":"UserDefinedTypeName","pathNode":{"id":2673,"name":"IProtocolFeeController","nameLocations":["11875:22:26"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"11875:22:26"},"referencedDeclaration":1955,"src":"11875:22:26","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"11874:49:26"},"returnParameters":{"id":2677,"nodeType":"ParameterList","parameters":[],"src":"11932:0:26"},"scope":2817,"src":"11841:92:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2679,"nodeType":"StructuredDocumentation","src":"12160:557:26","text":" @notice Enable recovery mode for a pool.\n @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n @param pool The address of the pool"},"functionSelector":"dc3f574e","id":2684,"implemented":false,"kind":"function","modifiers":[],"name":"enableRecoveryMode","nameLocation":"12731:18:26","nodeType":"FunctionDefinition","parameters":{"id":2682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2681,"mutability":"mutable","name":"pool","nameLocation":"12758:4:26","nodeType":"VariableDeclaration","scope":2684,"src":"12750:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2680,"name":"address","nodeType":"ElementaryTypeName","src":"12750:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12749:14:26"},"returnParameters":{"id":2683,"nodeType":"ParameterList","parameters":[],"src":"12772:0:26"},"scope":2817,"src":"12722:51:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2685,"nodeType":"StructuredDocumentation","src":"12779:409:26","text":" @notice Disable recovery mode for a pool.\n @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n potentially fail if there is an issue with any associated Rate Providers.\n @param pool The address of the pool"},"functionSelector":"bffb78b2","id":2690,"implemented":false,"kind":"function","modifiers":[],"name":"disableRecoveryMode","nameLocation":"13202:19:26","nodeType":"FunctionDefinition","parameters":{"id":2688,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2687,"mutability":"mutable","name":"pool","nameLocation":"13230:4:26","nodeType":"VariableDeclaration","scope":2690,"src":"13222:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2686,"name":"address","nodeType":"ElementaryTypeName","src":"13222:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13221:14:26"},"returnParameters":{"id":2689,"nodeType":"ParameterList","parameters":[],"src":"13244:0:26"},"scope":2817,"src":"13193:52:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2691,"nodeType":"StructuredDocumentation","src":"13476:653:26","text":" @notice Disables query functionality on the Vault. Can only be called by governance.\n @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n disabling queries is completely necessary; queries can still be re-enabled after this call."},"functionSelector":"de1a36a6","id":2694,"implemented":false,"kind":"function","modifiers":[],"name":"disableQuery","nameLocation":"14143:12:26","nodeType":"FunctionDefinition","parameters":{"id":2692,"nodeType":"ParameterList","parameters":[],"src":"14155:2:26"},"returnParameters":{"id":2693,"nodeType":"ParameterList","parameters":[],"src":"14166:0:26"},"scope":2817,"src":"14134:33:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2695,"nodeType":"StructuredDocumentation","src":"14173:223:26","text":" @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system."},"functionSelector":"821440f2","id":2698,"implemented":false,"kind":"function","modifiers":[],"name":"disableQueryPermanently","nameLocation":"14410:23:26","nodeType":"FunctionDefinition","parameters":{"id":2696,"nodeType":"ParameterList","parameters":[],"src":"14433:2:26"},"returnParameters":{"id":2697,"nodeType":"ParameterList","parameters":[],"src":"14444:0:26"},"scope":2817,"src":"14401:44:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2699,"nodeType":"StructuredDocumentation","src":"14451:166:26","text":" @notice Enables query functionality on the Vault. Can only be called by governance.\n @dev Only works if queries are not permanently disabled."},"functionSelector":"e0d55605","id":2702,"implemented":false,"kind":"function","modifiers":[],"name":"enableQuery","nameLocation":"14631:11:26","nodeType":"FunctionDefinition","parameters":{"id":2700,"nodeType":"ParameterList","parameters":[],"src":"14642:2:26"},"returnParameters":{"id":2701,"nodeType":"ParameterList","parameters":[],"src":"14653:0:26"},"scope":2817,"src":"14622:32:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2703,"nodeType":"StructuredDocumentation","src":"14881:590:26","text":" @notice Indicates whether the Vault buffers are paused.\n @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n @return buffersPaused True if the Vault buffers are paused"},"functionSelector":"55cba7fe","id":2708,"implemented":false,"kind":"function","modifiers":[],"name":"areBuffersPaused","nameLocation":"15485:16:26","nodeType":"FunctionDefinition","parameters":{"id":2704,"nodeType":"ParameterList","parameters":[],"src":"15501:2:26"},"returnParameters":{"id":2707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2706,"mutability":"mutable","name":"buffersPaused","nameLocation":"15532:13:26","nodeType":"VariableDeclaration","scope":2708,"src":"15527:18:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2705,"name":"bool","nodeType":"ElementaryTypeName","src":"15527:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15526:20:26"},"scope":2817,"src":"15476:71:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2709,"nodeType":"StructuredDocumentation","src":"15553:619:26","text":" @notice Pauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n possible to pause vault buffers individually.\n This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n buffers, and vice versa."},"functionSelector":"e085c5a8","id":2712,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVaultBuffers","nameLocation":"16186:17:26","nodeType":"FunctionDefinition","parameters":{"id":2710,"nodeType":"ParameterList","parameters":[],"src":"16203:2:26"},"returnParameters":{"id":2711,"nodeType":"ParameterList","parameters":[],"src":"16214:0:26"},"scope":2817,"src":"16177:38:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2713,"nodeType":"StructuredDocumentation","src":"16221:545:26","text":" @notice Unpauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n If the Vault was also paused, it will remain in that state until explicitly unpaused.\n This is a permissioned call."},"functionSelector":"b9212b49","id":2716,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVaultBuffers","nameLocation":"16780:19:26","nodeType":"FunctionDefinition","parameters":{"id":2714,"nodeType":"ParameterList","parameters":[],"src":"16799:2:26"},"returnParameters":{"id":2715,"nodeType":"ParameterList","parameters":[],"src":"16810:0:26"},"scope":2817,"src":"16771:40:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2717,"nodeType":"StructuredDocumentation","src":"16817:860:26","text":" @notice Initializes buffer for the given wrapped token.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n native decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals."},"functionSelector":"653eb3b0","id":2733,"implemented":false,"kind":"function","modifiers":[],"name":"initializeBuffer","nameLocation":"17691:16:26","nodeType":"FunctionDefinition","parameters":{"id":2729,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2720,"mutability":"mutable","name":"wrappedToken","nameLocation":"17726:12:26","nodeType":"VariableDeclaration","scope":2733,"src":"17717:21:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":2719,"nodeType":"UserDefinedTypeName","pathNode":{"id":2718,"name":"IERC4626","nameLocations":["17717:8:26"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"17717:8:26"},"referencedDeclaration":9828,"src":"17717:8:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2722,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"17756:19:26","nodeType":"VariableDeclaration","scope":2733,"src":"17748:27:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2721,"name":"uint256","nodeType":"ElementaryTypeName","src":"17748:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2724,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"17793:16:26","nodeType":"VariableDeclaration","scope":2733,"src":"17785:24:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2723,"name":"uint256","nodeType":"ElementaryTypeName","src":"17785:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2726,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17827:15:26","nodeType":"VariableDeclaration","scope":2733,"src":"17819:23:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2725,"name":"uint256","nodeType":"ElementaryTypeName","src":"17819:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2728,"mutability":"mutable","name":"sharesOwner","nameLocation":"17860:11:26","nodeType":"VariableDeclaration","scope":2733,"src":"17852:19:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2727,"name":"address","nodeType":"ElementaryTypeName","src":"17852:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17707:170:26"},"returnParameters":{"id":2732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2731,"mutability":"mutable","name":"issuedShares","nameLocation":"17904:12:26","nodeType":"VariableDeclaration","scope":2733,"src":"17896:20:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2730,"name":"uint256","nodeType":"ElementaryTypeName","src":"17896:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17895:22:26"},"scope":2817,"src":"17682:236:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2734,"nodeType":"StructuredDocumentation","src":"17924:1010:26","text":" @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n @dev The buffer needs to be initialized beforehand.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n underlying token native decimals\n @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n token native decimals\n @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n in underlying token decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer"},"functionSelector":"e2a92b1a","id":2752,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityToBuffer","nameLocation":"18948:20:26","nodeType":"FunctionDefinition","parameters":{"id":2746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2737,"mutability":"mutable","name":"wrappedToken","nameLocation":"18987:12:26","nodeType":"VariableDeclaration","scope":2752,"src":"18978:21:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":2736,"nodeType":"UserDefinedTypeName","pathNode":{"id":2735,"name":"IERC4626","nameLocations":["18978:8:26"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"18978:8:26"},"referencedDeclaration":9828,"src":"18978:8:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2739,"mutability":"mutable","name":"maxAmountUnderlyingInRaw","nameLocation":"19017:24:26","nodeType":"VariableDeclaration","scope":2752,"src":"19009:32:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2738,"name":"uint256","nodeType":"ElementaryTypeName","src":"19009:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2741,"mutability":"mutable","name":"maxAmountWrappedInRaw","nameLocation":"19059:21:26","nodeType":"VariableDeclaration","scope":2752,"src":"19051:29:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2740,"name":"uint256","nodeType":"ElementaryTypeName","src":"19051:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2743,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"19098:18:26","nodeType":"VariableDeclaration","scope":2752,"src":"19090:26:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2742,"name":"uint256","nodeType":"ElementaryTypeName","src":"19090:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2745,"mutability":"mutable","name":"sharesOwner","nameLocation":"19134:11:26","nodeType":"VariableDeclaration","scope":2752,"src":"19126:19:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2744,"name":"address","nodeType":"ElementaryTypeName","src":"19126:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18968:183:26"},"returnParameters":{"id":2751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2748,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"19178:19:26","nodeType":"VariableDeclaration","scope":2752,"src":"19170:27:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2747,"name":"uint256","nodeType":"ElementaryTypeName","src":"19170:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2750,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"19207:16:26","nodeType":"VariableDeclaration","scope":2752,"src":"19199:24:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2749,"name":"uint256","nodeType":"ElementaryTypeName","src":"19199:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19169:55:26"},"scope":2817,"src":"18939:286:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2753,"nodeType":"StructuredDocumentation","src":"19231:1458:26","text":" @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n Pre-conditions:\n - The buffer needs to be initialized.\n - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n total shares. It is expressed in underlying token native decimals\n @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n in underlying token native decimals\n @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n wrapped token native decimals\n @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user"},"functionSelector":"ebc7955c","id":2769,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityFromBuffer","nameLocation":"20703:25:26","nodeType":"FunctionDefinition","parameters":{"id":2763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2756,"mutability":"mutable","name":"wrappedToken","nameLocation":"20747:12:26","nodeType":"VariableDeclaration","scope":2769,"src":"20738:21:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":2755,"nodeType":"UserDefinedTypeName","pathNode":{"id":2754,"name":"IERC4626","nameLocations":["20738:8:26"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"20738:8:26"},"referencedDeclaration":9828,"src":"20738:8:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2758,"mutability":"mutable","name":"sharesToRemove","nameLocation":"20777:14:26","nodeType":"VariableDeclaration","scope":2769,"src":"20769:22:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2757,"name":"uint256","nodeType":"ElementaryTypeName","src":"20769:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2760,"mutability":"mutable","name":"minAmountUnderlyingOutRaw","nameLocation":"20809:25:26","nodeType":"VariableDeclaration","scope":2769,"src":"20801:33:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2759,"name":"uint256","nodeType":"ElementaryTypeName","src":"20801:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2762,"mutability":"mutable","name":"minAmountWrappedOutRaw","nameLocation":"20852:22:26","nodeType":"VariableDeclaration","scope":2769,"src":"20844:30:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2761,"name":"uint256","nodeType":"ElementaryTypeName","src":"20844:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20728:152:26"},"returnParameters":{"id":2768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2765,"mutability":"mutable","name":"removedUnderlyingBalanceRaw","nameLocation":"20907:27:26","nodeType":"VariableDeclaration","scope":2769,"src":"20899:35:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2764,"name":"uint256","nodeType":"ElementaryTypeName","src":"20899:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2767,"mutability":"mutable","name":"removedWrappedBalanceRaw","nameLocation":"20944:24:26","nodeType":"VariableDeclaration","scope":2769,"src":"20936:32:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2766,"name":"uint256","nodeType":"ElementaryTypeName","src":"20936:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20898:71:26"},"scope":2817,"src":"20694:276:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2770,"nodeType":"StructuredDocumentation","src":"20976:382:26","text":" @notice Returns the asset registered for a given wrapped token.\n @dev The asset can never change after buffer initialization.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n has not been initialized."},"functionSelector":"0387587d","id":2778,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferAsset","nameLocation":"21372:14:26","nodeType":"FunctionDefinition","parameters":{"id":2774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2773,"mutability":"mutable","name":"wrappedToken","nameLocation":"21396:12:26","nodeType":"VariableDeclaration","scope":2778,"src":"21387:21:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":2772,"nodeType":"UserDefinedTypeName","pathNode":{"id":2771,"name":"IERC4626","nameLocations":["21387:8:26"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"21387:8:26"},"referencedDeclaration":9828,"src":"21387:8:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"21386:23:26"},"returnParameters":{"id":2777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2776,"mutability":"mutable","name":"underlyingToken","nameLocation":"21441:15:26","nodeType":"VariableDeclaration","scope":2778,"src":"21433:23:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2775,"name":"address","nodeType":"ElementaryTypeName","src":"21433:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21432:25:26"},"scope":2817,"src":"21363:95:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2779,"nodeType":"StructuredDocumentation","src":"21464:441:26","text":" @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n in the buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals"},"functionSelector":"9385e39a","id":2789,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferOwnerShares","nameLocation":"21919:20:26","nodeType":"FunctionDefinition","parameters":{"id":2785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2782,"mutability":"mutable","name":"wrappedToken","nameLocation":"21958:12:26","nodeType":"VariableDeclaration","scope":2789,"src":"21949:21:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":2781,"nodeType":"UserDefinedTypeName","pathNode":{"id":2780,"name":"IERC4626","nameLocations":["21949:8:26"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"21949:8:26"},"referencedDeclaration":9828,"src":"21949:8:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2784,"mutability":"mutable","name":"liquidityOwner","nameLocation":"21988:14:26","nodeType":"VariableDeclaration","scope":2789,"src":"21980:22:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2783,"name":"address","nodeType":"ElementaryTypeName","src":"21980:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21939:69:26"},"returnParameters":{"id":2788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2787,"mutability":"mutable","name":"ownerShares","nameLocation":"22040:11:26","nodeType":"VariableDeclaration","scope":2789,"src":"22032:19:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2786,"name":"uint256","nodeType":"ElementaryTypeName","src":"22032:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22031:21:26"},"scope":2817,"src":"21910:143:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2790,"nodeType":"StructuredDocumentation","src":"22059:281:26","text":" @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals"},"functionSelector":"f2784e07","id":2798,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferTotalShares","nameLocation":"22354:20:26","nodeType":"FunctionDefinition","parameters":{"id":2794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2793,"mutability":"mutable","name":"wrappedToken","nameLocation":"22384:12:26","nodeType":"VariableDeclaration","scope":2798,"src":"22375:21:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":2792,"nodeType":"UserDefinedTypeName","pathNode":{"id":2791,"name":"IERC4626","nameLocations":["22375:8:26"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"22375:8:26"},"referencedDeclaration":9828,"src":"22375:8:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"22374:23:26"},"returnParameters":{"id":2797,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2796,"mutability":"mutable","name":"bufferShares","nameLocation":"22429:12:26","nodeType":"VariableDeclaration","scope":2798,"src":"22421:20:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2795,"name":"uint256","nodeType":"ElementaryTypeName","src":"22421:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22420:22:26"},"scope":2817,"src":"22345:98:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2799,"nodeType":"StructuredDocumentation","src":"22449:521:26","text":" @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n @dev All values are in native token decimals of the wrapped or underlying tokens.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals"},"functionSelector":"4021fe0f","id":2809,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferBalance","nameLocation":"22984:16:26","nodeType":"FunctionDefinition","parameters":{"id":2803,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2802,"mutability":"mutable","name":"wrappedToken","nameLocation":"23019:12:26","nodeType":"VariableDeclaration","scope":2809,"src":"23010:21:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":2801,"nodeType":"UserDefinedTypeName","pathNode":{"id":2800,"name":"IERC4626","nameLocations":["23010:8:26"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"23010:8:26"},"referencedDeclaration":9828,"src":"23010:8:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"23000:37:26"},"returnParameters":{"id":2808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2805,"mutability":"mutable","name":"underlyingBalanceRaw","nameLocation":"23069:20:26","nodeType":"VariableDeclaration","scope":2809,"src":"23061:28:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2804,"name":"uint256","nodeType":"ElementaryTypeName","src":"23061:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2807,"mutability":"mutable","name":"wrappedBalanceRaw","nameLocation":"23099:17:26","nodeType":"VariableDeclaration","scope":2809,"src":"23091:25:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2806,"name":"uint256","nodeType":"ElementaryTypeName","src":"23091:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23060:57:26"},"scope":2817,"src":"22975:143:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2810,"nodeType":"StructuredDocumentation","src":"23342:202:26","text":" @notice Sets a new Authorizer for the Vault.\n @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n @param newAuthorizer The address of the new authorizer"},"functionSelector":"058a628f","id":2816,"implemented":false,"kind":"function","modifiers":[],"name":"setAuthorizer","nameLocation":"23558:13:26","nodeType":"FunctionDefinition","parameters":{"id":2814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2813,"mutability":"mutable","name":"newAuthorizer","nameLocation":"23584:13:26","nodeType":"VariableDeclaration","scope":2816,"src":"23572:25:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"},"typeName":{"id":2812,"nodeType":"UserDefinedTypeName","pathNode":{"id":2811,"name":"IAuthorizer","nameLocations":["23572:11:26"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"23572:11:26"},"referencedDeclaration":1341,"src":"23572:11:26","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23571:27:26"},"returnParameters":{"id":2815,"nodeType":"ParameterList","parameters":[],"src":"23607:0:26"},"scope":2817,"src":"23549:59:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2818,"src":"586:23024:26","usedErrors":[],"usedEvents":[]}],"src":"46:23565:26"},"id":26},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","exportedSymbols":{"IERC20":[10558],"IERC4626":[9828],"IVaultErrors":[3184]},"id":3185,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2819,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:27"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2821,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3185,"sourceUnit":9829,"src":"72:75:27","symbolAliases":[{"foreign":{"id":2820,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9828,"src":"81:8:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2823,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3185,"sourceUnit":10559,"src":"148:72:27","symbolAliases":[{"foreign":{"id":2822,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"157:6:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultErrors","contractDependencies":[],"contractKind":"interface","documentation":{"id":2824,"nodeType":"StructuredDocumentation","src":"222:94:27","text":"@notice Errors are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":3184,"linearizedBaseContracts":[3184],"name":"IVaultErrors","nameLocation":"326:12:27","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2825,"nodeType":"StructuredDocumentation","src":"576:149:27","text":" @notice A pool has already been registered. `registerPool` may only be called once.\n @param pool The already registered pool"},"errorSelector":"db771c80","id":2829,"name":"PoolAlreadyRegistered","nameLocation":"736:21:27","nodeType":"ErrorDefinition","parameters":{"id":2828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2827,"mutability":"mutable","name":"pool","nameLocation":"766:4:27","nodeType":"VariableDeclaration","scope":2829,"src":"758:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2826,"name":"address","nodeType":"ElementaryTypeName","src":"758:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"757:14:27"},"src":"730:42:27"},{"documentation":{"id":2830,"nodeType":"StructuredDocumentation","src":"778:149:27","text":" @notice A pool has already been initialized. `initialize` may only be called once.\n @param pool The already initialized pool"},"errorSelector":"218e3747","id":2834,"name":"PoolAlreadyInitialized","nameLocation":"938:22:27","nodeType":"ErrorDefinition","parameters":{"id":2833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2832,"mutability":"mutable","name":"pool","nameLocation":"969:4:27","nodeType":"VariableDeclaration","scope":2834,"src":"961:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2831,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"960:14:27"},"src":"932:43:27"},{"documentation":{"id":2835,"nodeType":"StructuredDocumentation","src":"981:99:27","text":" @notice A pool has not been registered.\n @param pool The unregistered pool"},"errorSelector":"9e51bd5c","id":2839,"name":"PoolNotRegistered","nameLocation":"1091:17:27","nodeType":"ErrorDefinition","parameters":{"id":2838,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2837,"mutability":"mutable","name":"pool","nameLocation":"1117:4:27","nodeType":"VariableDeclaration","scope":2839,"src":"1109:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2836,"name":"address","nodeType":"ElementaryTypeName","src":"1109:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1108:14:27"},"src":"1085:38:27"},{"documentation":{"id":2840,"nodeType":"StructuredDocumentation","src":"1129:112:27","text":" @notice A referenced pool has not been initialized.\n @param pool The uninitialized pool"},"errorSelector":"4bdace13","id":2844,"name":"PoolNotInitialized","nameLocation":"1252:18:27","nodeType":"ErrorDefinition","parameters":{"id":2843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2842,"mutability":"mutable","name":"pool","nameLocation":"1279:4:27","nodeType":"VariableDeclaration","scope":2844,"src":"1271:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2841,"name":"address","nodeType":"ElementaryTypeName","src":"1271:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1270:14:27"},"src":"1246:39:27"},{"documentation":{"id":2845,"nodeType":"StructuredDocumentation","src":"1291:274:27","text":" @notice A hook contract rejected a pool on registration.\n @param poolHooksContract Address of the hook contract that rejected the pool registration\n @param pool Address of the rejected pool\n @param poolFactory Address of the pool factory"},"errorSelector":"fa93d814","id":2853,"name":"HookRegistrationFailed","nameLocation":"1576:22:27","nodeType":"ErrorDefinition","parameters":{"id":2852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2847,"mutability":"mutable","name":"poolHooksContract","nameLocation":"1607:17:27","nodeType":"VariableDeclaration","scope":2853,"src":"1599:25:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2846,"name":"address","nodeType":"ElementaryTypeName","src":"1599:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2849,"mutability":"mutable","name":"pool","nameLocation":"1634:4:27","nodeType":"VariableDeclaration","scope":2853,"src":"1626:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2848,"name":"address","nodeType":"ElementaryTypeName","src":"1626:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2851,"mutability":"mutable","name":"poolFactory","nameLocation":"1648:11:27","nodeType":"VariableDeclaration","scope":2853,"src":"1640:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2850,"name":"address","nodeType":"ElementaryTypeName","src":"1640:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1598:62:27"},"src":"1570:91:27"},{"documentation":{"id":2854,"nodeType":"StructuredDocumentation","src":"1667:136:27","text":" @notice A token was already registered (i.e., it is a duplicate in the pool).\n @param token The duplicate token"},"errorSelector":"4f4b634e","id":2859,"name":"TokenAlreadyRegistered","nameLocation":"1814:22:27","nodeType":"ErrorDefinition","parameters":{"id":2858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2857,"mutability":"mutable","name":"token","nameLocation":"1844:5:27","nodeType":"VariableDeclaration","scope":2859,"src":"1837:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":2856,"nodeType":"UserDefinedTypeName","pathNode":{"id":2855,"name":"IERC20","nameLocations":["1837:6:27"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1837:6:27"},"referencedDeclaration":10558,"src":"1837:6:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1836:14:27"},"src":"1808:43:27"},{"documentation":{"id":2860,"nodeType":"StructuredDocumentation","src":"1857:57:27","text":"@notice The token count is below the minimum allowed."},"errorSelector":"5ed4ba8f","id":2862,"name":"MinTokens","nameLocation":"1925:9:27","nodeType":"ErrorDefinition","parameters":{"id":2861,"nodeType":"ParameterList","parameters":[],"src":"1934:2:27"},"src":"1919:18:27"},{"documentation":{"id":2863,"nodeType":"StructuredDocumentation","src":"1943:57:27","text":"@notice The token count is above the maximum allowed."},"errorSelector":"707bdf58","id":2865,"name":"MaxTokens","nameLocation":"2011:9:27","nodeType":"ErrorDefinition","parameters":{"id":2864,"nodeType":"ParameterList","parameters":[],"src":"2020:2:27"},"src":"2005:18:27"},{"documentation":{"id":2866,"nodeType":"StructuredDocumentation","src":"2029:61:27","text":"@notice Invalid tokens (e.g., zero) cannot be registered."},"errorSelector":"c1ab6dc1","id":2868,"name":"InvalidToken","nameLocation":"2101:12:27","nodeType":"ErrorDefinition","parameters":{"id":2867,"nodeType":"ParameterList","parameters":[],"src":"2113:2:27"},"src":"2095:21:27"},{"documentation":{"id":2869,"nodeType":"StructuredDocumentation","src":"2122:86:27","text":"@notice The token type given in a TokenConfig during pool registration is invalid."},"errorSelector":"a1e9dd9d","id":2871,"name":"InvalidTokenType","nameLocation":"2219:16:27","nodeType":"ErrorDefinition","parameters":{"id":2870,"nodeType":"ParameterList","parameters":[],"src":"2235:2:27"},"src":"2213:25:27"},{"documentation":{"id":2872,"nodeType":"StructuredDocumentation","src":"2244:76:27","text":"@notice The data in a TokenConfig struct is inconsistent or unsupported."},"errorSelector":"df450632","id":2874,"name":"InvalidTokenConfiguration","nameLocation":"2331:25:27","nodeType":"ErrorDefinition","parameters":{"id":2873,"nodeType":"ParameterList","parameters":[],"src":"2356:2:27"},"src":"2325:34:27"},{"documentation":{"id":2875,"nodeType":"StructuredDocumentation","src":"2365:64:27","text":"@notice Tokens with more than 18 decimals are not supported."},"errorSelector":"686d3607","id":2877,"name":"InvalidTokenDecimals","nameLocation":"2440:20:27","nodeType":"ErrorDefinition","parameters":{"id":2876,"nodeType":"ParameterList","parameters":[],"src":"2460:2:27"},"src":"2434:29:27"},{"documentation":{"id":2878,"nodeType":"StructuredDocumentation","src":"2469:287:27","text":" @notice The token list passed into an operation does not match the pool tokens in the pool.\n @param pool Address of the pool\n @param expectedToken The correct token at a given index in the pool\n @param actualToken The actual token found at that index"},"errorSelector":"ffe261a1","id":2886,"name":"TokensMismatch","nameLocation":"2767:14:27","nodeType":"ErrorDefinition","parameters":{"id":2885,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2880,"mutability":"mutable","name":"pool","nameLocation":"2790:4:27","nodeType":"VariableDeclaration","scope":2886,"src":"2782:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2879,"name":"address","nodeType":"ElementaryTypeName","src":"2782:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2882,"mutability":"mutable","name":"expectedToken","nameLocation":"2804:13:27","nodeType":"VariableDeclaration","scope":2886,"src":"2796:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2881,"name":"address","nodeType":"ElementaryTypeName","src":"2796:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2884,"mutability":"mutable","name":"actualToken","nameLocation":"2827:11:27","nodeType":"VariableDeclaration","scope":2886,"src":"2819:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2883,"name":"address","nodeType":"ElementaryTypeName","src":"2819:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2781:58:27"},"src":"2761:79:27"},{"documentation":{"id":2887,"nodeType":"StructuredDocumentation","src":"3071:85:27","text":"@notice A transient accounting operation completed with outstanding token deltas."},"errorSelector":"20f1d86d","id":2889,"name":"BalanceNotSettled","nameLocation":"3167:17:27","nodeType":"ErrorDefinition","parameters":{"id":2888,"nodeType":"ParameterList","parameters":[],"src":"3184:2:27"},"src":"3161:26:27"},{"documentation":{"id":2890,"nodeType":"StructuredDocumentation","src":"3193:97:27","text":"@notice A user called a Vault function (swap, add/remove liquidity) outside the lock context."},"errorSelector":"c09ba736","id":2892,"name":"VaultIsNotUnlocked","nameLocation":"3301:18:27","nodeType":"ErrorDefinition","parameters":{"id":2891,"nodeType":"ParameterList","parameters":[],"src":"3319:2:27"},"src":"3295:27:27"},{"documentation":{"id":2893,"nodeType":"StructuredDocumentation","src":"3328:105:27","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"53f976d4","id":2895,"name":"DynamicSwapFeeHookFailed","nameLocation":"3444:24:27","nodeType":"ErrorDefinition","parameters":{"id":2894,"nodeType":"ParameterList","parameters":[],"src":"3468:2:27"},"src":"3438:33:27"},{"documentation":{"id":2896,"nodeType":"StructuredDocumentation","src":"3477:105:27","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"e91e17e7","id":2898,"name":"BeforeSwapHookFailed","nameLocation":"3593:20:27","nodeType":"ErrorDefinition","parameters":{"id":2897,"nodeType":"ParameterList","parameters":[],"src":"3613:2:27"},"src":"3587:29:27"},{"documentation":{"id":2899,"nodeType":"StructuredDocumentation","src":"3622:104:27","text":"@notice The pool has returned false to the afterSwap hook, indicating the transaction should revert."},"errorSelector":"15a29dec","id":2901,"name":"AfterSwapHookFailed","nameLocation":"3737:19:27","nodeType":"ErrorDefinition","parameters":{"id":2900,"nodeType":"ParameterList","parameters":[],"src":"3756:2:27"},"src":"3731:28:27"},{"documentation":{"id":2902,"nodeType":"StructuredDocumentation","src":"3765:111:27","text":"@notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert."},"errorSelector":"60612925","id":2904,"name":"BeforeInitializeHookFailed","nameLocation":"3887:26:27","nodeType":"ErrorDefinition","parameters":{"id":2903,"nodeType":"ParameterList","parameters":[],"src":"3913:2:27"},"src":"3881:35:27"},{"documentation":{"id":2905,"nodeType":"StructuredDocumentation","src":"3922:110:27","text":"@notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert."},"errorSelector":"0f23dbc6","id":2907,"name":"AfterInitializeHookFailed","nameLocation":"4043:25:27","nodeType":"ErrorDefinition","parameters":{"id":2906,"nodeType":"ParameterList","parameters":[],"src":"4068:2:27"},"src":"4037:34:27"},{"documentation":{"id":2908,"nodeType":"StructuredDocumentation","src":"4077:113:27","text":"@notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"0b2eb652","id":2910,"name":"BeforeAddLiquidityHookFailed","nameLocation":"4201:28:27","nodeType":"ErrorDefinition","parameters":{"id":2909,"nodeType":"ParameterList","parameters":[],"src":"4229:2:27"},"src":"4195:37:27"},{"documentation":{"id":2911,"nodeType":"StructuredDocumentation","src":"4238:112:27","text":"@notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"e1249165","id":2913,"name":"AfterAddLiquidityHookFailed","nameLocation":"4361:27:27","nodeType":"ErrorDefinition","parameters":{"id":2912,"nodeType":"ParameterList","parameters":[],"src":"4388:2:27"},"src":"4355:36:27"},{"documentation":{"id":2914,"nodeType":"StructuredDocumentation","src":"4397:116:27","text":"@notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"2aaf8866","id":2916,"name":"BeforeRemoveLiquidityHookFailed","nameLocation":"4524:31:27","nodeType":"ErrorDefinition","parameters":{"id":2915,"nodeType":"ParameterList","parameters":[],"src":"4555:2:27"},"src":"4518:40:27"},{"documentation":{"id":2917,"nodeType":"StructuredDocumentation","src":"4564:115:27","text":"@notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"1d3391d8","id":2919,"name":"AfterRemoveLiquidityHookFailed","nameLocation":"4690:30:27","nodeType":"ErrorDefinition","parameters":{"id":2918,"nodeType":"ParameterList","parameters":[],"src":"4720:2:27"},"src":"4684:39:27"},{"documentation":{"id":2920,"nodeType":"StructuredDocumentation","src":"4729:115:27","text":"@notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance)."},"errorSelector":"e5d185cf","id":2922,"name":"RouterNotTrusted","nameLocation":"4855:16:27","nodeType":"ErrorDefinition","parameters":{"id":2921,"nodeType":"ParameterList","parameters":[],"src":"4871:2:27"},"src":"4849:25:27"},{"documentation":{"id":2923,"nodeType":"StructuredDocumentation","src":"5097:47:27","text":"@notice The user tried to swap zero tokens."},"errorSelector":"57a456b7","id":2925,"name":"AmountGivenZero","nameLocation":"5155:15:27","nodeType":"ErrorDefinition","parameters":{"id":2924,"nodeType":"ParameterList","parameters":[],"src":"5170:2:27"},"src":"5149:24:27"},{"documentation":{"id":2926,"nodeType":"StructuredDocumentation","src":"5179:58:27","text":"@notice The user attempted to swap a token for itself."},"errorSelector":"a54b181d","id":2928,"name":"CannotSwapSameToken","nameLocation":"5248:19:27","nodeType":"ErrorDefinition","parameters":{"id":2927,"nodeType":"ParameterList","parameters":[],"src":"5267:2:27"},"src":"5242:28:27"},{"documentation":{"id":2929,"nodeType":"StructuredDocumentation","src":"5276:137:27","text":" @notice The user attempted to operate with a token that is not in the pool.\n @param token The unregistered token"},"errorSelector":"ddef98d7","id":2934,"name":"TokenNotRegistered","nameLocation":"5424:18:27","nodeType":"ErrorDefinition","parameters":{"id":2933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2932,"mutability":"mutable","name":"token","nameLocation":"5450:5:27","nodeType":"VariableDeclaration","scope":2934,"src":"5443:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":2931,"nodeType":"UserDefinedTypeName","pathNode":{"id":2930,"name":"IERC20","nameLocations":["5443:6:27"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"5443:6:27"},"referencedDeclaration":10558,"src":"5443:6:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"5442:14:27"},"src":"5418:39:27"},{"documentation":{"id":2935,"nodeType":"StructuredDocumentation","src":"5463:215:27","text":" @notice An amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"e2ea151b","id":2941,"name":"SwapLimit","nameLocation":"5689:9:27","nodeType":"ErrorDefinition","parameters":{"id":2940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2937,"mutability":"mutable","name":"amount","nameLocation":"5707:6:27","nodeType":"VariableDeclaration","scope":2941,"src":"5699:14:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2936,"name":"uint256","nodeType":"ElementaryTypeName","src":"5699:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2939,"mutability":"mutable","name":"limit","nameLocation":"5723:5:27","nodeType":"VariableDeclaration","scope":2941,"src":"5715:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2938,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5698:31:27"},"src":"5683:47:27"},{"documentation":{"id":2942,"nodeType":"StructuredDocumentation","src":"5736:228:27","text":" @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"cc0e4a99","id":2948,"name":"HookAdjustedSwapLimit","nameLocation":"5975:21:27","nodeType":"ErrorDefinition","parameters":{"id":2947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2944,"mutability":"mutable","name":"amount","nameLocation":"6005:6:27","nodeType":"VariableDeclaration","scope":2948,"src":"5997:14:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2943,"name":"uint256","nodeType":"ElementaryTypeName","src":"5997:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2946,"mutability":"mutable","name":"limit","nameLocation":"6021:5:27","nodeType":"VariableDeclaration","scope":2948,"src":"6013:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2945,"name":"uint256","nodeType":"ElementaryTypeName","src":"6013:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5996:31:27"},"src":"5969:59:27"},{"documentation":{"id":2949,"nodeType":"StructuredDocumentation","src":"6034:87:27","text":"@notice The amount given or calculated for an operation is below the minimum limit."},"errorSelector":"1ed4d118","id":2951,"name":"TradeAmountTooSmall","nameLocation":"6132:19:27","nodeType":"ErrorDefinition","parameters":{"id":2950,"nodeType":"ParameterList","parameters":[],"src":"6151:2:27"},"src":"6126:28:27"},{"documentation":{"id":2952,"nodeType":"StructuredDocumentation","src":"6381:45:27","text":"@notice Add liquidity kind not supported."},"errorSelector":"6c02b395","id":2954,"name":"InvalidAddLiquidityKind","nameLocation":"6437:23:27","nodeType":"ErrorDefinition","parameters":{"id":2953,"nodeType":"ParameterList","parameters":[],"src":"6460:2:27"},"src":"6431:32:27"},{"documentation":{"id":2955,"nodeType":"StructuredDocumentation","src":"6469:264:27","text":" @notice A required amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"8eda85e4","id":2964,"name":"AmountInAboveMax","nameLocation":"6744:16:27","nodeType":"ErrorDefinition","parameters":{"id":2963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2958,"mutability":"mutable","name":"tokenIn","nameLocation":"6768:7:27","nodeType":"VariableDeclaration","scope":2964,"src":"6761:14:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":2957,"nodeType":"UserDefinedTypeName","pathNode":{"id":2956,"name":"IERC20","nameLocations":["6761:6:27"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"6761:6:27"},"referencedDeclaration":10558,"src":"6761:6:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2960,"mutability":"mutable","name":"amountIn","nameLocation":"6785:8:27","nodeType":"VariableDeclaration","scope":2964,"src":"6777:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2959,"name":"uint256","nodeType":"ElementaryTypeName","src":"6777:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2962,"mutability":"mutable","name":"maxAmountIn","nameLocation":"6803:11:27","nodeType":"VariableDeclaration","scope":2964,"src":"6795:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2961,"name":"uint256","nodeType":"ElementaryTypeName","src":"6795:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6760:55:27"},"src":"6738:78:27"},{"documentation":{"id":2965,"nodeType":"StructuredDocumentation","src":"6822:269:27","text":" @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"cefa3afa","id":2974,"name":"HookAdjustedAmountInAboveMax","nameLocation":"7102:28:27","nodeType":"ErrorDefinition","parameters":{"id":2973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2968,"mutability":"mutable","name":"tokenIn","nameLocation":"7138:7:27","nodeType":"VariableDeclaration","scope":2974,"src":"7131:14:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":2967,"nodeType":"UserDefinedTypeName","pathNode":{"id":2966,"name":"IERC20","nameLocations":["7131:6:27"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"7131:6:27"},"referencedDeclaration":10558,"src":"7131:6:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2970,"mutability":"mutable","name":"amountIn","nameLocation":"7155:8:27","nodeType":"VariableDeclaration","scope":2974,"src":"7147:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2969,"name":"uint256","nodeType":"ElementaryTypeName","src":"7147:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2972,"mutability":"mutable","name":"maxAmountIn","nameLocation":"7173:11:27","nodeType":"VariableDeclaration","scope":2974,"src":"7165:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2971,"name":"uint256","nodeType":"ElementaryTypeName","src":"7165:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7130:55:27"},"src":"7096:90:27"},{"documentation":{"id":2975,"nodeType":"StructuredDocumentation","src":"7192:245:27","text":" @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"8d261d5d","id":2981,"name":"BptAmountOutBelowMin","nameLocation":"7448:20:27","nodeType":"ErrorDefinition","parameters":{"id":2980,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2977,"mutability":"mutable","name":"amountOut","nameLocation":"7477:9:27","nodeType":"VariableDeclaration","scope":2981,"src":"7469:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2976,"name":"uint256","nodeType":"ElementaryTypeName","src":"7469:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2979,"mutability":"mutable","name":"minAmountOut","nameLocation":"7496:12:27","nodeType":"VariableDeclaration","scope":2981,"src":"7488:20:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2978,"name":"uint256","nodeType":"ElementaryTypeName","src":"7488:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7468:41:27"},"src":"7442:68:27"},{"documentation":{"id":2982,"nodeType":"StructuredDocumentation","src":"7516:75:27","text":"@notice Pool does not support adding liquidity with a customized input."},"errorSelector":"4876c0bc","id":2984,"name":"DoesNotSupportAddLiquidityCustom","nameLocation":"7602:32:27","nodeType":"ErrorDefinition","parameters":{"id":2983,"nodeType":"ParameterList","parameters":[],"src":"7634:2:27"},"src":"7596:41:27"},{"documentation":{"id":2985,"nodeType":"StructuredDocumentation","src":"7643:68:27","text":"@notice Pool does not support adding liquidity through donation."},"errorSelector":"efe0265d","id":2987,"name":"DoesNotSupportDonation","nameLocation":"7722:22:27","nodeType":"ErrorDefinition","parameters":{"id":2986,"nodeType":"ParameterList","parameters":[],"src":"7744:2:27"},"src":"7716:31:27"},{"documentation":{"id":2988,"nodeType":"StructuredDocumentation","src":"7977:48:27","text":"@notice Remove liquidity kind not supported."},"errorSelector":"137a9a39","id":2990,"name":"InvalidRemoveLiquidityKind","nameLocation":"8036:26:27","nodeType":"ErrorDefinition","parameters":{"id":2989,"nodeType":"ParameterList","parameters":[],"src":"8062:2:27"},"src":"8030:35:27"},{"documentation":{"id":2991,"nodeType":"StructuredDocumentation","src":"8071:269:27","text":" @notice The actual amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"2f785e46","id":3000,"name":"AmountOutBelowMin","nameLocation":"8351:17:27","nodeType":"ErrorDefinition","parameters":{"id":2999,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2994,"mutability":"mutable","name":"tokenOut","nameLocation":"8376:8:27","nodeType":"VariableDeclaration","scope":3000,"src":"8369:15:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":2993,"nodeType":"UserDefinedTypeName","pathNode":{"id":2992,"name":"IERC20","nameLocations":["8369:6:27"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"8369:6:27"},"referencedDeclaration":10558,"src":"8369:6:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2996,"mutability":"mutable","name":"amountOut","nameLocation":"8394:9:27","nodeType":"VariableDeclaration","scope":3000,"src":"8386:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2995,"name":"uint256","nodeType":"ElementaryTypeName","src":"8386:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2998,"mutability":"mutable","name":"minAmountOut","nameLocation":"8413:12:27","nodeType":"VariableDeclaration","scope":3000,"src":"8405:20:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2997,"name":"uint256","nodeType":"ElementaryTypeName","src":"8405:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8368:58:27"},"src":"8345:82:27"},{"documentation":{"id":3001,"nodeType":"StructuredDocumentation","src":"8433:276:27","text":" @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"fbd8a724","id":3010,"name":"HookAdjustedAmountOutBelowMin","nameLocation":"8720:29:27","nodeType":"ErrorDefinition","parameters":{"id":3009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3004,"mutability":"mutable","name":"tokenOut","nameLocation":"8757:8:27","nodeType":"VariableDeclaration","scope":3010,"src":"8750:15:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":3003,"nodeType":"UserDefinedTypeName","pathNode":{"id":3002,"name":"IERC20","nameLocations":["8750:6:27"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"8750:6:27"},"referencedDeclaration":10558,"src":"8750:6:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3006,"mutability":"mutable","name":"amountOut","nameLocation":"8775:9:27","nodeType":"VariableDeclaration","scope":3010,"src":"8767:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3005,"name":"uint256","nodeType":"ElementaryTypeName","src":"8767:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3008,"mutability":"mutable","name":"minAmountOut","nameLocation":"8794:12:27","nodeType":"VariableDeclaration","scope":3010,"src":"8786:20:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3007,"name":"uint256","nodeType":"ElementaryTypeName","src":"8786:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8749:58:27"},"src":"8714:94:27"},{"documentation":{"id":3011,"nodeType":"StructuredDocumentation","src":"8814:228:27","text":" @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n @param amountIn The total BPT amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"31d38e0b","id":3017,"name":"BptAmountInAboveMax","nameLocation":"9053:19:27","nodeType":"ErrorDefinition","parameters":{"id":3016,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3013,"mutability":"mutable","name":"amountIn","nameLocation":"9081:8:27","nodeType":"VariableDeclaration","scope":3017,"src":"9073:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3012,"name":"uint256","nodeType":"ElementaryTypeName","src":"9073:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3015,"mutability":"mutable","name":"maxAmountIn","nameLocation":"9099:11:27","nodeType":"VariableDeclaration","scope":3017,"src":"9091:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3014,"name":"uint256","nodeType":"ElementaryTypeName","src":"9091:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9072:39:27"},"src":"9047:65:27"},{"documentation":{"id":3018,"nodeType":"StructuredDocumentation","src":"9118:77:27","text":"@notice Pool does not support removing liquidity with a customized input."},"errorSelector":"cf0a95c0","id":3020,"name":"DoesNotSupportRemoveLiquidityCustom","nameLocation":"9206:35:27","nodeType":"ErrorDefinition","parameters":{"id":3019,"nodeType":"ParameterList","parameters":[],"src":"9241:2:27"},"src":"9200:44:27"},{"documentation":{"id":3021,"nodeType":"StructuredDocumentation","src":"9463:332:27","text":" @notice Error raised when there is an overflow in the fee calculation.\n @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n percentages in the Vault."},"errorSelector":"4c69ac5d","id":3023,"name":"ProtocolFeesExceedTotalCollected","nameLocation":"9806:32:27","nodeType":"ErrorDefinition","parameters":{"id":3022,"nodeType":"ParameterList","parameters":[],"src":"9838:2:27"},"src":"9800:41:27"},{"documentation":{"id":3024,"nodeType":"StructuredDocumentation","src":"9847:430:27","text":" @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is below the minimum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"bfb20688","id":3026,"name":"SwapFeePercentageTooLow","nameLocation":"10288:23:27","nodeType":"ErrorDefinition","parameters":{"id":3025,"nodeType":"ParameterList","parameters":[],"src":"10311:2:27"},"src":"10282:32:27"},{"documentation":{"id":3027,"nodeType":"StructuredDocumentation","src":"10320:433:27","text":" @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is above the maximum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"7f47834b","id":3029,"name":"SwapFeePercentageTooHigh","nameLocation":"10764:24:27","nodeType":"ErrorDefinition","parameters":{"id":3028,"nodeType":"ParameterList","parameters":[],"src":"10788:2:27"},"src":"10758:33:27"},{"documentation":{"id":3030,"nodeType":"StructuredDocumentation","src":"10797:646:27","text":" @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n the aggregate fee calculated here and that stored in the Vault."},"errorSelector":"833fb3ce","id":3032,"name":"FeePrecisionTooHigh","nameLocation":"11454:19:27","nodeType":"ErrorDefinition","parameters":{"id":3031,"nodeType":"ParameterList","parameters":[],"src":"11473:2:27"},"src":"11448:28:27"},{"documentation":{"id":3033,"nodeType":"StructuredDocumentation","src":"11482:107:27","text":"@notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei)."},"errorSelector":"746e5940","id":3035,"name":"PercentageAboveMax","nameLocation":"11600:18:27","nodeType":"ErrorDefinition","parameters":{"id":3034,"nodeType":"ParameterList","parameters":[],"src":"11618:2:27"},"src":"11594:27:27"},{"documentation":{"id":3036,"nodeType":"StructuredDocumentation","src":"11842:78:27","text":"@notice A user tried to execute a query operation when they were disabled."},"errorSelector":"7a198886","id":3038,"name":"QueriesDisabled","nameLocation":"11931:15:27","nodeType":"ErrorDefinition","parameters":{"id":3037,"nodeType":"ParameterList","parameters":[],"src":"11946:2:27"},"src":"11925:24:27"},{"documentation":{"id":3039,"nodeType":"StructuredDocumentation","src":"11955:84:27","text":"@notice An admin tried to re-enable queries, but they were disabled permanently."},"errorSelector":"069f8cbc","id":3041,"name":"QueriesDisabledPermanently","nameLocation":"12050:26:27","nodeType":"ErrorDefinition","parameters":{"id":3040,"nodeType":"ParameterList","parameters":[],"src":"12076:2:27"},"src":"12044:35:27"},{"documentation":{"id":3042,"nodeType":"StructuredDocumentation","src":"12302:104:27","text":" @notice Cannot enable recovery mode when already enabled.\n @param pool The pool"},"errorSelector":"346d7607","id":3046,"name":"PoolInRecoveryMode","nameLocation":"12417:18:27","nodeType":"ErrorDefinition","parameters":{"id":3045,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3044,"mutability":"mutable","name":"pool","nameLocation":"12444:4:27","nodeType":"VariableDeclaration","scope":3046,"src":"12436:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3043,"name":"address","nodeType":"ElementaryTypeName","src":"12436:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12435:14:27"},"src":"12411:39:27"},{"documentation":{"id":3047,"nodeType":"StructuredDocumentation","src":"12456:101:27","text":" @notice Cannot disable recovery mode when not enabled.\n @param pool The pool"},"errorSelector":"ef029adf","id":3051,"name":"PoolNotInRecoveryMode","nameLocation":"12568:21:27","nodeType":"ErrorDefinition","parameters":{"id":3050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3049,"mutability":"mutable","name":"pool","nameLocation":"12598:4:27","nodeType":"VariableDeclaration","scope":3051,"src":"12590:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3048,"name":"address","nodeType":"ElementaryTypeName","src":"12590:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12589:14:27"},"src":"12562:42:27"},{"documentation":{"id":3052,"nodeType":"StructuredDocumentation","src":"12828:206:27","text":" @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n @param sender The account attempting to call a permissioned function"},"errorSelector":"089676d5","id":3056,"name":"SenderIsNotVault","nameLocation":"13045:16:27","nodeType":"ErrorDefinition","parameters":{"id":3055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3054,"mutability":"mutable","name":"sender","nameLocation":"13070:6:27","nodeType":"VariableDeclaration","scope":3056,"src":"13062:14:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3053,"name":"address","nodeType":"ElementaryTypeName","src":"13062:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13061:16:27"},"src":"13039:39:27"},{"documentation":{"id":3057,"nodeType":"StructuredDocumentation","src":"13303:79:27","text":"@notice The caller specified a pause window period longer than the maximum."},"errorSelector":"cc0e8fe5","id":3059,"name":"VaultPauseWindowDurationTooLarge","nameLocation":"13393:32:27","nodeType":"ErrorDefinition","parameters":{"id":3058,"nodeType":"ParameterList","parameters":[],"src":"13425:2:27"},"src":"13387:41:27"},{"documentation":{"id":3060,"nodeType":"StructuredDocumentation","src":"13434:73:27","text":"@notice The caller specified a buffer period longer than the maximum."},"errorSelector":"9ea4efee","id":3062,"name":"PauseBufferPeriodDurationTooLarge","nameLocation":"13518:33:27","nodeType":"ErrorDefinition","parameters":{"id":3061,"nodeType":"ParameterList","parameters":[],"src":"13551:2:27"},"src":"13512:42:27"},{"documentation":{"id":3063,"nodeType":"StructuredDocumentation","src":"13560:76:27","text":"@notice A user tried to perform an operation while the Vault was paused."},"errorSelector":"da9f8b34","id":3065,"name":"VaultPaused","nameLocation":"13647:11:27","nodeType":"ErrorDefinition","parameters":{"id":3064,"nodeType":"ParameterList","parameters":[],"src":"13658:2:27"},"src":"13641:20:27"},{"documentation":{"id":3066,"nodeType":"StructuredDocumentation","src":"13667:73:27","text":"@notice Governance tried to unpause the Vault when it was not paused."},"errorSelector":"f7ff4dca","id":3068,"name":"VaultNotPaused","nameLocation":"13751:14:27","nodeType":"ErrorDefinition","parameters":{"id":3067,"nodeType":"ParameterList","parameters":[],"src":"13765:2:27"},"src":"13745:23:27"},{"documentation":{"id":3069,"nodeType":"StructuredDocumentation","src":"13774:79:27","text":"@notice Governance tried to pause the Vault after the pause period expired."},"errorSelector":"0e4460b7","id":3071,"name":"VaultPauseWindowExpired","nameLocation":"13864:23:27","nodeType":"ErrorDefinition","parameters":{"id":3070,"nodeType":"ParameterList","parameters":[],"src":"13887:2:27"},"src":"13858:32:27"},{"documentation":{"id":3072,"nodeType":"StructuredDocumentation","src":"13896:123:27","text":" @notice A user tried to perform an operation involving a paused Pool.\n @param pool The paused pool"},"errorSelector":"d971f597","id":3076,"name":"PoolPaused","nameLocation":"14030:10:27","nodeType":"ErrorDefinition","parameters":{"id":3075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3074,"mutability":"mutable","name":"pool","nameLocation":"14049:4:27","nodeType":"VariableDeclaration","scope":3076,"src":"14041:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3073,"name":"address","nodeType":"ElementaryTypeName","src":"14041:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14040:14:27"},"src":"14024:31:27"},{"documentation":{"id":3077,"nodeType":"StructuredDocumentation","src":"14061:124:27","text":" @notice Governance tried to unpause the Pool when it was not paused.\n @param pool The unpaused pool"},"errorSelector":"fdcd6894","id":3081,"name":"PoolNotPaused","nameLocation":"14196:13:27","nodeType":"ErrorDefinition","parameters":{"id":3080,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3079,"mutability":"mutable","name":"pool","nameLocation":"14218:4:27","nodeType":"VariableDeclaration","scope":3081,"src":"14210:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3078,"name":"address","nodeType":"ElementaryTypeName","src":"14210:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14209:14:27"},"src":"14190:34:27"},{"documentation":{"id":3082,"nodeType":"StructuredDocumentation","src":"14230:119:27","text":" @notice Governance tried to pause a Pool after the pause period expired.\n @param pool The pool"},"errorSelector":"eb5a1217","id":3086,"name":"PoolPauseWindowExpired","nameLocation":"14360:22:27","nodeType":"ErrorDefinition","parameters":{"id":3085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3084,"mutability":"mutable","name":"pool","nameLocation":"14391:4:27","nodeType":"VariableDeclaration","scope":3086,"src":"14383:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3083,"name":"address","nodeType":"ElementaryTypeName","src":"14383:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14382:14:27"},"src":"14354:43:27"},{"documentation":{"id":3087,"nodeType":"StructuredDocumentation","src":"14628:163:27","text":" @notice The buffer for the given wrapped token was already initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"1690fa40","id":3092,"name":"BufferAlreadyInitialized","nameLocation":"14802:24:27","nodeType":"ErrorDefinition","parameters":{"id":3091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3090,"mutability":"mutable","name":"wrappedToken","nameLocation":"14836:12:27","nodeType":"VariableDeclaration","scope":3092,"src":"14827:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":3089,"nodeType":"UserDefinedTypeName","pathNode":{"id":3088,"name":"IERC4626","nameLocations":["14827:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"14827:8:27"},"referencedDeclaration":9828,"src":"14827:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"14826:23:27"},"src":"14796:54:27"},{"documentation":{"id":3093,"nodeType":"StructuredDocumentation","src":"14856:159:27","text":" @notice The buffer for the given wrapped token was not initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"85f41299","id":3098,"name":"BufferNotInitialized","nameLocation":"15026:20:27","nodeType":"ErrorDefinition","parameters":{"id":3097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3096,"mutability":"mutable","name":"wrappedToken","nameLocation":"15056:12:27","nodeType":"VariableDeclaration","scope":3098,"src":"15047:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":3095,"nodeType":"UserDefinedTypeName","pathNode":{"id":3094,"name":"IERC4626","nameLocations":["15047:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"15047:8:27"},"referencedDeclaration":9828,"src":"15047:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15046:23:27"},"src":"15020:50:27"},{"documentation":{"id":3099,"nodeType":"StructuredDocumentation","src":"15076:90:27","text":"@notice The user is trying to remove more than their allocated shares from the buffer."},"errorSelector":"98c5dbd6","id":3101,"name":"NotEnoughBufferShares","nameLocation":"15177:21:27","nodeType":"ErrorDefinition","parameters":{"id":3100,"nodeType":"ParameterList","parameters":[],"src":"15198:2:27"},"src":"15171:30:27"},{"documentation":{"id":3102,"nodeType":"StructuredDocumentation","src":"15207:436:27","text":" @notice The wrapped token asset does not match the underlying token.\n @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n Legitimate wrapper contracts should make the asset a constant or immutable value.\n @param wrappedToken The wrapped token corresponding to the buffer\n @param underlyingToken The underlying token returned by `asset`"},"errorSelector":"36b18d09","id":3109,"name":"WrongUnderlyingToken","nameLocation":"15654:20:27","nodeType":"ErrorDefinition","parameters":{"id":3108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3105,"mutability":"mutable","name":"wrappedToken","nameLocation":"15684:12:27","nodeType":"VariableDeclaration","scope":3109,"src":"15675:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":3104,"nodeType":"UserDefinedTypeName","pathNode":{"id":3103,"name":"IERC4626","nameLocations":["15675:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"15675:8:27"},"referencedDeclaration":9828,"src":"15675:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3107,"mutability":"mutable","name":"underlyingToken","nameLocation":"15706:15:27","nodeType":"VariableDeclaration","scope":3109,"src":"15698:23:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3106,"name":"address","nodeType":"ElementaryTypeName","src":"15698:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15674:48:27"},"src":"15648:75:27"},{"documentation":{"id":3110,"nodeType":"StructuredDocumentation","src":"15729:322:27","text":" @notice A wrapped token reported the zero address as its underlying token asset.\n @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n re-initialize the buffer).\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"d407f9c5","id":3115,"name":"InvalidUnderlyingToken","nameLocation":"16062:22:27","nodeType":"ErrorDefinition","parameters":{"id":3114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3113,"mutability":"mutable","name":"wrappedToken","nameLocation":"16094:12:27","nodeType":"VariableDeclaration","scope":3115,"src":"16085:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":3112,"nodeType":"UserDefinedTypeName","pathNode":{"id":3111,"name":"IERC4626","nameLocations":["16085:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"16085:8:27"},"referencedDeclaration":9828,"src":"16085:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16084:23:27"},"src":"16056:52:27"},{"documentation":{"id":3116,"nodeType":"StructuredDocumentation","src":"16114:183:27","text":" @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"18fe7385","id":3121,"name":"WrapAmountTooSmall","nameLocation":"16308:18:27","nodeType":"ErrorDefinition","parameters":{"id":3120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3119,"mutability":"mutable","name":"wrappedToken","nameLocation":"16336:12:27","nodeType":"VariableDeclaration","scope":3121,"src":"16327:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":3118,"nodeType":"UserDefinedTypeName","pathNode":{"id":3117,"name":"IERC4626","nameLocations":["16327:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"16327:8:27"},"referencedDeclaration":9828,"src":"16327:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16326:23:27"},"src":"16302:48:27"},{"documentation":{"id":3122,"nodeType":"StructuredDocumentation","src":"16356:70:27","text":"@notice Buffer operation attempted while vault buffers are paused."},"errorSelector":"0f27df09","id":3124,"name":"VaultBuffersArePaused","nameLocation":"16437:21:27","nodeType":"ErrorDefinition","parameters":{"id":3123,"nodeType":"ParameterList","parameters":[],"src":"16458:2:27"},"src":"16431:30:27"},{"documentation":{"id":3125,"nodeType":"StructuredDocumentation","src":"16467:58:27","text":"@notice Buffer shares were minted to the zero address."},"errorSelector":"dbe6b10e","id":3127,"name":"BufferSharesInvalidReceiver","nameLocation":"16536:27:27","nodeType":"ErrorDefinition","parameters":{"id":3126,"nodeType":"ParameterList","parameters":[],"src":"16563:2:27"},"src":"16530:36:27"},{"documentation":{"id":3128,"nodeType":"StructuredDocumentation","src":"16572:60:27","text":"@notice Buffer shares were burned from the zero address."},"errorSelector":"586d06df","id":3130,"name":"BufferSharesInvalidOwner","nameLocation":"16643:24:27","nodeType":"ErrorDefinition","parameters":{"id":3129,"nodeType":"ParameterList","parameters":[],"src":"16667:2:27"},"src":"16637:33:27"},{"documentation":{"id":3131,"nodeType":"StructuredDocumentation","src":"16676:173:27","text":" @notice The total supply of a buffer can't be lower than the absolute minimum.\n @param totalSupply The total supply value that was below the minimum"},"errorSelector":"34bdbfaa","id":3135,"name":"BufferTotalSupplyTooLow","nameLocation":"16860:23:27","nodeType":"ErrorDefinition","parameters":{"id":3134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3133,"mutability":"mutable","name":"totalSupply","nameLocation":"16892:11:27","nodeType":"VariableDeclaration","scope":3135,"src":"16884:19:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3132,"name":"uint256","nodeType":"ElementaryTypeName","src":"16884:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16883:21:27"},"src":"16854:51:27"},{"documentation":{"id":3136,"nodeType":"StructuredDocumentation","src":"16911:97:27","text":"@dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should."},"errorSelector":"1c6a5375","id":3145,"name":"NotEnoughUnderlying","nameLocation":"17019:19:27","nodeType":"ErrorDefinition","parameters":{"id":3144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3139,"mutability":"mutable","name":"wrappedToken","nameLocation":"17048:12:27","nodeType":"VariableDeclaration","scope":3145,"src":"17039:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":3138,"nodeType":"UserDefinedTypeName","pathNode":{"id":3137,"name":"IERC4626","nameLocations":["17039:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"17039:8:27"},"referencedDeclaration":9828,"src":"17039:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3141,"mutability":"mutable","name":"expectedUnderlyingAmount","nameLocation":"17070:24:27","nodeType":"VariableDeclaration","scope":3145,"src":"17062:32:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3140,"name":"uint256","nodeType":"ElementaryTypeName","src":"17062:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3143,"mutability":"mutable","name":"actualUnderlyingAmount","nameLocation":"17104:22:27","nodeType":"VariableDeclaration","scope":3145,"src":"17096:30:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3142,"name":"uint256","nodeType":"ElementaryTypeName","src":"17096:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17038:89:27"},"src":"17013:115:27"},{"documentation":{"id":3146,"nodeType":"StructuredDocumentation","src":"17134:94:27","text":"@dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should."},"errorSelector":"1149424d","id":3155,"name":"NotEnoughWrapped","nameLocation":"17239:16:27","nodeType":"ErrorDefinition","parameters":{"id":3154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3149,"mutability":"mutable","name":"wrappedToken","nameLocation":"17265:12:27","nodeType":"VariableDeclaration","scope":3155,"src":"17256:21:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":3148,"nodeType":"UserDefinedTypeName","pathNode":{"id":3147,"name":"IERC4626","nameLocations":["17256:8:27"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"17256:8:27"},"referencedDeclaration":9828,"src":"17256:8:27","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3151,"mutability":"mutable","name":"expectedWrappedAmount","nameLocation":"17287:21:27","nodeType":"VariableDeclaration","scope":3155,"src":"17279:29:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3150,"name":"uint256","nodeType":"ElementaryTypeName","src":"17279:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3153,"mutability":"mutable","name":"actualWrappedAmount","nameLocation":"17318:19:27","nodeType":"VariableDeclaration","scope":3155,"src":"17310:27:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3152,"name":"uint256","nodeType":"ElementaryTypeName","src":"17310:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17255:83:27"},"src":"17233:106:27"},{"documentation":{"id":3156,"nodeType":"StructuredDocumentation","src":"17345:76:27","text":"@dev Shares issued during initialization are below the requested amount."},"errorSelector":"da0cb07e","id":3162,"name":"IssuedSharesBelowMin","nameLocation":"17432:20:27","nodeType":"ErrorDefinition","parameters":{"id":3161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3158,"mutability":"mutable","name":"issuedShares","nameLocation":"17461:12:27","nodeType":"VariableDeclaration","scope":3162,"src":"17453:20:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3157,"name":"uint256","nodeType":"ElementaryTypeName","src":"17453:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3160,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17483:15:27","nodeType":"VariableDeclaration","scope":3162,"src":"17475:23:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3159,"name":"uint256","nodeType":"ElementaryTypeName","src":"17475:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17452:47:27"},"src":"17426:74:27"},{"documentation":{"id":3163,"nodeType":"StructuredDocumentation","src":"17727:87:27","text":"@notice Pool does not support adding / removing liquidity with an unbalanced input."},"errorSelector":"d4f5779c","id":3165,"name":"DoesNotSupportUnbalancedLiquidity","nameLocation":"17825:33:27","nodeType":"ErrorDefinition","parameters":{"id":3164,"nodeType":"ParameterList","parameters":[],"src":"17858:2:27"},"src":"17819:42:27"},{"documentation":{"id":3166,"nodeType":"StructuredDocumentation","src":"17867:48:27","text":"@notice The contract should not receive ETH."},"errorSelector":"f2238896","id":3168,"name":"CannotReceiveEth","nameLocation":"17926:16:27","nodeType":"ErrorDefinition","parameters":{"id":3167,"nodeType":"ParameterList","parameters":[],"src":"17942:2:27"},"src":"17920:25:27"},{"documentation":{"id":3169,"nodeType":"StructuredDocumentation","src":"17951:156:27","text":" @notice The `VaultExtension` contract was called by an account directly.\n @dev It can only be called by the Vault via delegatecall."},"errorSelector":"9fd25b36","id":3171,"name":"NotVaultDelegateCall","nameLocation":"18118:20:27","nodeType":"ErrorDefinition","parameters":{"id":3170,"nodeType":"ParameterList","parameters":[],"src":"18138:2:27"},"src":"18112:29:27"},{"documentation":{"id":3172,"nodeType":"StructuredDocumentation","src":"18147:89:27","text":"@notice The `VaultExtension` contract was configured with an incorrect Vault address."},"errorSelector":"1ab9d9d0","id":3174,"name":"WrongVaultExtensionDeployment","nameLocation":"18247:29:27","nodeType":"ErrorDefinition","parameters":{"id":3173,"nodeType":"ParameterList","parameters":[],"src":"18276:2:27"},"src":"18241:38:27"},{"documentation":{"id":3175,"nodeType":"StructuredDocumentation","src":"18285:96:27","text":"@notice The `ProtocolFeeController` contract was configured with an incorrect Vault address."},"errorSelector":"1bbe95c7","id":3177,"name":"WrongProtocolFeeControllerDeployment","nameLocation":"18392:36:27","nodeType":"ErrorDefinition","parameters":{"id":3176,"nodeType":"ParameterList","parameters":[],"src":"18428:2:27"},"src":"18386:45:27"},{"documentation":{"id":3178,"nodeType":"StructuredDocumentation","src":"18437:85:27","text":"@notice The `VaultAdmin` contract was configured with an incorrect Vault address."},"errorSelector":"82cc28b6","id":3180,"name":"WrongVaultAdminDeployment","nameLocation":"18533:25:27","nodeType":"ErrorDefinition","parameters":{"id":3179,"nodeType":"ParameterList","parameters":[],"src":"18558:2:27"},"src":"18527:34:27"},{"documentation":{"id":3181,"nodeType":"StructuredDocumentation","src":"18567:54:27","text":"@notice Quote reverted with a reserved error code."},"errorSelector":"28f95541","id":3183,"name":"QuoteResultSpoofed","nameLocation":"18632:18:27","nodeType":"ErrorDefinition","parameters":{"id":3182,"nodeType":"ParameterList","parameters":[],"src":"18650:2:27"},"src":"18626:27:27"}],"scope":3185,"src":"316:18339:27","usedErrors":[2829,2834,2839,2844,2853,2859,2862,2865,2868,2871,2874,2877,2886,2889,2892,2895,2898,2901,2904,2907,2910,2913,2916,2919,2922,2925,2928,2934,2941,2948,2951,2954,2964,2974,2981,2984,2987,2990,3000,3010,3017,3020,3023,3026,3029,3032,3035,3038,3041,3046,3051,3056,3059,3062,3065,3068,3071,3076,3081,3086,3092,3098,3101,3109,3115,3121,3124,3127,3130,3135,3145,3155,3162,3165,3168,3171,3174,3177,3180,3183],"usedEvents":[]}],"src":"46:18610:27"},"id":27},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","exportedSymbols":{"AddLiquidityKind":[4223],"AddLiquidityParams":[4239],"AfterSwapParams":[4217],"BufferWrapOrUnwrapParams":[4278],"FEE_BITLENGTH":[4281],"FEE_SCALING_FACTOR":[4284],"HookFlags":[4043],"HooksConfig":[4067],"IAuthorizer":[1341],"IERC20":[10558],"IERC4626":[9828],"IHooks":[1617],"IProtocolFeeController":[1955],"IRateProvider":[24],"IVaultEvents":[3423],"LiquidityManagement":[3996],"MAX_FEE_PERCENTAGE":[4287],"PoolConfig":[4021],"PoolConfigBits":[3998],"PoolData":[4145],"PoolRoleAccounts":[4093],"PoolSwapParams":[4188],"RemoveLiquidityKind":[4244],"RemoveLiquidityParams":[4260],"Rounding":[4148],"SwapKind":[4151],"SwapState":[4077],"TokenConfig":[4110],"TokenInfo":[4120],"TokenType":[4097],"VaultState":[4085],"VaultSwapParams":[4170],"WrappingDirection":[4263]},"id":3424,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3186,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:28"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":3188,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3424,"sourceUnit":9829,"src":"72:75:28","symbolAliases":[{"foreign":{"id":3187,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9828,"src":"81:8:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3190,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3424,"sourceUnit":10559,"src":"148:72:28","symbolAliases":[{"foreign":{"id":3189,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"157:6:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":3192,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3424,"sourceUnit":1956,"src":"222:70:28","symbolAliases":[{"foreign":{"id":3191,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"231:22:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":3194,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3424,"sourceUnit":1342,"src":"293:48:28","symbolAliases":[{"foreign":{"id":3193,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"302:11:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":3196,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3424,"sourceUnit":1618,"src":"342:38:28","symbolAliases":[{"foreign":{"id":3195,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1617,"src":"351:6:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":3197,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3424,"sourceUnit":4288,"src":"381:26:28","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultEvents","contractDependencies":[],"contractKind":"interface","documentation":{"id":3198,"nodeType":"StructuredDocumentation","src":"409:91:28","text":"@dev Events are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":3423,"linearizedBaseContracts":[3423],"name":"IVaultEvents","nameLocation":"510:12:28","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":3199,"nodeType":"StructuredDocumentation","src":"529:657:28","text":" @notice A Pool was registered by calling `registerPool`.\n @param pool The pool being registered\n @param factory The factory creating the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The static swap fee of the pool\n @param pauseWindowEndTime The pool's pause window end time\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n @param liquidityManagement Supported liquidity management hook flags"},"eventSelector":"bc1561eeab9f40962e2fb827a7ff9c7cdb47a9d7c84caeefa4ed90e043842dad","id":3222,"name":"PoolRegistered","nameLocation":"1197:14:28","nodeType":"EventDefinition","parameters":{"id":3221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3201,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1237:4:28","nodeType":"VariableDeclaration","scope":3222,"src":"1221:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3200,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3203,"indexed":true,"mutability":"mutable","name":"factory","nameLocation":"1267:7:28","nodeType":"VariableDeclaration","scope":3222,"src":"1251:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3202,"name":"address","nodeType":"ElementaryTypeName","src":"1251:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3207,"indexed":false,"mutability":"mutable","name":"tokenConfig","nameLocation":"1298:11:28","nodeType":"VariableDeclaration","scope":3222,"src":"1284:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4110_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":3205,"nodeType":"UserDefinedTypeName","pathNode":{"id":3204,"name":"TokenConfig","nameLocations":["1284:11:28"],"nodeType":"IdentifierPath","referencedDeclaration":4110,"src":"1284:11:28"},"referencedDeclaration":4110,"src":"1284:11:28","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4110_storage_ptr","typeString":"struct TokenConfig"}},"id":3206,"nodeType":"ArrayTypeName","src":"1284:13:28","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4110_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":3209,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1327:17:28","nodeType":"VariableDeclaration","scope":3222,"src":"1319:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3208,"name":"uint256","nodeType":"ElementaryTypeName","src":"1319:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3211,"indexed":false,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1361:18:28","nodeType":"VariableDeclaration","scope":3222,"src":"1354:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3210,"name":"uint32","nodeType":"ElementaryTypeName","src":"1354:6:28","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":3214,"indexed":false,"mutability":"mutable","name":"roleAccounts","nameLocation":"1406:12:28","nodeType":"VariableDeclaration","scope":3222,"src":"1389:29:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4093_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":3213,"nodeType":"UserDefinedTypeName","pathNode":{"id":3212,"name":"PoolRoleAccounts","nameLocations":["1389:16:28"],"nodeType":"IdentifierPath","referencedDeclaration":4093,"src":"1389:16:28"},"referencedDeclaration":4093,"src":"1389:16:28","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4093_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":3217,"indexed":false,"mutability":"mutable","name":"hooksConfig","nameLocation":"1440:11:28","nodeType":"VariableDeclaration","scope":3222,"src":"1428:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4067_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":3216,"nodeType":"UserDefinedTypeName","pathNode":{"id":3215,"name":"HooksConfig","nameLocations":["1428:11:28"],"nodeType":"IdentifierPath","referencedDeclaration":4067,"src":"1428:11:28"},"referencedDeclaration":4067,"src":"1428:11:28","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4067_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"},{"constant":false,"id":3220,"indexed":false,"mutability":"mutable","name":"liquidityManagement","nameLocation":"1481:19:28","nodeType":"VariableDeclaration","scope":3222,"src":"1461:39:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$3996_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":3219,"nodeType":"UserDefinedTypeName","pathNode":{"id":3218,"name":"LiquidityManagement","nameLocations":["1461:19:28"],"nodeType":"IdentifierPath","referencedDeclaration":3996,"src":"1461:19:28"},"referencedDeclaration":3996,"src":"1461:19:28","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$3996_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1211:295:28"},"src":"1191:316:28"},{"anonymous":false,"documentation":{"id":3223,"nodeType":"StructuredDocumentation","src":"1513:120:28","text":" @notice A Pool was initialized by calling `initialize`.\n @param pool The pool being initialized"},"eventSelector":"cad8c9d32507393b6508ca4a888b81979919b477510585bde8488f153072d6f3","id":3227,"name":"PoolInitialized","nameLocation":"1644:15:28","nodeType":"EventDefinition","parameters":{"id":3226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3225,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1676:4:28","nodeType":"VariableDeclaration","scope":3227,"src":"1660:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3224,"name":"address","nodeType":"ElementaryTypeName","src":"1660:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1659:22:28"},"src":"1638:44:28"},{"anonymous":false,"documentation":{"id":3228,"nodeType":"StructuredDocumentation","src":"1688:478:28","text":" @notice A swap has occurred.\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountIn Number of tokenIn tokens\n @param amountOut Number of tokenOut tokens\n @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n @param swapFeeAmount Swap fee amount paid"},"eventSelector":"0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db","id":3246,"name":"Swap","nameLocation":"2177:4:28","nodeType":"EventDefinition","parameters":{"id":3245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3230,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2207:4:28","nodeType":"VariableDeclaration","scope":3246,"src":"2191:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3229,"name":"address","nodeType":"ElementaryTypeName","src":"2191:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3233,"indexed":true,"mutability":"mutable","name":"tokenIn","nameLocation":"2236:7:28","nodeType":"VariableDeclaration","scope":3246,"src":"2221:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":3232,"nodeType":"UserDefinedTypeName","pathNode":{"id":3231,"name":"IERC20","nameLocations":["2221:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2221:6:28"},"referencedDeclaration":10558,"src":"2221:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3236,"indexed":true,"mutability":"mutable","name":"tokenOut","nameLocation":"2268:8:28","nodeType":"VariableDeclaration","scope":3246,"src":"2253:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":3235,"nodeType":"UserDefinedTypeName","pathNode":{"id":3234,"name":"IERC20","nameLocations":["2253:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2253:6:28"},"referencedDeclaration":10558,"src":"2253:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3238,"indexed":false,"mutability":"mutable","name":"amountIn","nameLocation":"2294:8:28","nodeType":"VariableDeclaration","scope":3246,"src":"2286:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3237,"name":"uint256","nodeType":"ElementaryTypeName","src":"2286:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3240,"indexed":false,"mutability":"mutable","name":"amountOut","nameLocation":"2320:9:28","nodeType":"VariableDeclaration","scope":3246,"src":"2312:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3239,"name":"uint256","nodeType":"ElementaryTypeName","src":"2312:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3242,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"2347:17:28","nodeType":"VariableDeclaration","scope":3246,"src":"2339:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3241,"name":"uint256","nodeType":"ElementaryTypeName","src":"2339:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3244,"indexed":false,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"2382:13:28","nodeType":"VariableDeclaration","scope":3246,"src":"2374:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3243,"name":"uint256","nodeType":"ElementaryTypeName","src":"2374:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2181:220:28"},"src":"2171:231:28"},{"anonymous":false,"documentation":{"id":3247,"nodeType":"StructuredDocumentation","src":"2408:352:28","text":" @notice A wrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param depositedUnderlying Number of underlying tokens deposited\n @param mintedShares Number of shares (wrapped tokens) minted\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"3771d13c67011e31e12031c54bb59b0bf544a80b81d280a3711e172aa8b7f47b","id":3258,"name":"Wrap","nameLocation":"2771:4:28","nodeType":"EventDefinition","parameters":{"id":3257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3250,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"2802:12:28","nodeType":"VariableDeclaration","scope":3258,"src":"2785:29:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":3249,"nodeType":"UserDefinedTypeName","pathNode":{"id":3248,"name":"IERC4626","nameLocations":["2785:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"2785:8:28"},"referencedDeclaration":9828,"src":"2785:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3252,"indexed":false,"mutability":"mutable","name":"depositedUnderlying","nameLocation":"2832:19:28","nodeType":"VariableDeclaration","scope":3258,"src":"2824:27:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3251,"name":"uint256","nodeType":"ElementaryTypeName","src":"2824:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3254,"indexed":false,"mutability":"mutable","name":"mintedShares","nameLocation":"2869:12:28","nodeType":"VariableDeclaration","scope":3258,"src":"2861:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3253,"name":"uint256","nodeType":"ElementaryTypeName","src":"2861:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3256,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"2899:14:28","nodeType":"VariableDeclaration","scope":3258,"src":"2891:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3255,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2891:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2775:144:28"},"src":"2765:155:28"},{"anonymous":false,"documentation":{"id":3259,"nodeType":"StructuredDocumentation","src":"2926:355:28","text":" @notice An unwrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param burnedShares Number of shares (wrapped tokens) burned\n @param withdrawnUnderlying Number of underlying tokens withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"eeb740c90bf2b18c9532eb7d473137767036d893dff3e009f32718f821b2a4c0","id":3270,"name":"Unwrap","nameLocation":"3292:6:28","nodeType":"EventDefinition","parameters":{"id":3269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3262,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"3325:12:28","nodeType":"VariableDeclaration","scope":3270,"src":"3308:29:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":3261,"nodeType":"UserDefinedTypeName","pathNode":{"id":3260,"name":"IERC4626","nameLocations":["3308:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"3308:8:28"},"referencedDeclaration":9828,"src":"3308:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3264,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"3355:12:28","nodeType":"VariableDeclaration","scope":3270,"src":"3347:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3263,"name":"uint256","nodeType":"ElementaryTypeName","src":"3347:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3266,"indexed":false,"mutability":"mutable","name":"withdrawnUnderlying","nameLocation":"3385:19:28","nodeType":"VariableDeclaration","scope":3270,"src":"3377:27:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3265,"name":"uint256","nodeType":"ElementaryTypeName","src":"3377:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3268,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"3422:14:28","nodeType":"VariableDeclaration","scope":3270,"src":"3414:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3267,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3414:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3298:144:28"},"src":"3286:157:28"},{"anonymous":false,"documentation":{"id":3271,"nodeType":"StructuredDocumentation","src":"3449:562:28","text":" @notice Liquidity has been added to a pool (including initialization).\n @param pool The pool with liquidity added\n @param liquidityProvider The user performing the operation\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"a26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca871","id":3288,"name":"LiquidityAdded","nameLocation":"4022:14:28","nodeType":"EventDefinition","parameters":{"id":3287,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3273,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4062:4:28","nodeType":"VariableDeclaration","scope":3288,"src":"4046:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3272,"name":"address","nodeType":"ElementaryTypeName","src":"4046:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3275,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4092:17:28","nodeType":"VariableDeclaration","scope":3288,"src":"4076:33:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3274,"name":"address","nodeType":"ElementaryTypeName","src":"4076:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3278,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4144:4:28","nodeType":"VariableDeclaration","scope":3288,"src":"4119:29:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4223","typeString":"enum AddLiquidityKind"},"typeName":{"id":3277,"nodeType":"UserDefinedTypeName","pathNode":{"id":3276,"name":"AddLiquidityKind","nameLocations":["4119:16:28"],"nodeType":"IdentifierPath","referencedDeclaration":4223,"src":"4119:16:28"},"referencedDeclaration":4223,"src":"4119:16:28","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4223","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":3280,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4166:11:28","nodeType":"VariableDeclaration","scope":3288,"src":"4158:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3279,"name":"uint256","nodeType":"ElementaryTypeName","src":"4158:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3283,"indexed":false,"mutability":"mutable","name":"amountsAddedRaw","nameLocation":"4197:15:28","nodeType":"VariableDeclaration","scope":3288,"src":"4187:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3281,"name":"uint256","nodeType":"ElementaryTypeName","src":"4187:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3282,"nodeType":"ArrayTypeName","src":"4187:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3286,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"4232:17:28","nodeType":"VariableDeclaration","scope":3288,"src":"4222:27:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3284,"name":"uint256","nodeType":"ElementaryTypeName","src":"4222:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3285,"nodeType":"ArrayTypeName","src":"4222:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4036:219:28"},"src":"4016:240:28"},{"anonymous":false,"documentation":{"id":3289,"nodeType":"StructuredDocumentation","src":"4262:548:28","text":" @notice Liquidity has been removed from a pool.\n @param pool The pool with liquidity removed\n @param liquidityProvider The user performing the operation\n @param kind The remove liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"fbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a5","id":3306,"name":"LiquidityRemoved","nameLocation":"4821:16:28","nodeType":"EventDefinition","parameters":{"id":3305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3291,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4863:4:28","nodeType":"VariableDeclaration","scope":3306,"src":"4847:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3290,"name":"address","nodeType":"ElementaryTypeName","src":"4847:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3293,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4893:17:28","nodeType":"VariableDeclaration","scope":3306,"src":"4877:33:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3292,"name":"address","nodeType":"ElementaryTypeName","src":"4877:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3296,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4948:4:28","nodeType":"VariableDeclaration","scope":3306,"src":"4920:32:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4244","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":3295,"nodeType":"UserDefinedTypeName","pathNode":{"id":3294,"name":"RemoveLiquidityKind","nameLocations":["4920:19:28"],"nodeType":"IdentifierPath","referencedDeclaration":4244,"src":"4920:19:28"},"referencedDeclaration":4244,"src":"4920:19:28","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4244","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":3298,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4970:11:28","nodeType":"VariableDeclaration","scope":3306,"src":"4962:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3297,"name":"uint256","nodeType":"ElementaryTypeName","src":"4962:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3301,"indexed":false,"mutability":"mutable","name":"amountsRemovedRaw","nameLocation":"5001:17:28","nodeType":"VariableDeclaration","scope":3306,"src":"4991:27:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3299,"name":"uint256","nodeType":"ElementaryTypeName","src":"4991:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3300,"nodeType":"ArrayTypeName","src":"4991:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3304,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"5038:17:28","nodeType":"VariableDeclaration","scope":3306,"src":"5028:27:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3302,"name":"uint256","nodeType":"ElementaryTypeName","src":"5028:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3303,"nodeType":"ArrayTypeName","src":"5028:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4837:224:28"},"src":"4815:247:28"},{"anonymous":false,"documentation":{"id":3307,"nodeType":"StructuredDocumentation","src":"5068:114:28","text":" @notice The Vault's pause status has changed.\n @param paused True if the Vault was paused"},"eventSelector":"e0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d02","id":3311,"name":"VaultPausedStateChanged","nameLocation":"5193:23:28","nodeType":"EventDefinition","parameters":{"id":3310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3309,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5222:6:28","nodeType":"VariableDeclaration","scope":3311,"src":"5217:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3308,"name":"bool","nodeType":"ElementaryTypeName","src":"5217:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5216:13:28"},"src":"5187:43:28"},{"anonymous":false,"documentation":{"id":3312,"nodeType":"StructuredDocumentation","src":"5236:87:28","text":"@notice `disableQuery` has been called on the Vault, disabling query functionality."},"eventSelector":"bd204090fd387f08e3076528bf09b4fc99d8100d749eace96c06002d3fedc625","id":3314,"name":"VaultQueriesDisabled","nameLocation":"5334:20:28","nodeType":"EventDefinition","parameters":{"id":3313,"nodeType":"ParameterList","parameters":[],"src":"5354:2:28"},"src":"5328:29:28"},{"anonymous":false,"documentation":{"id":3315,"nodeType":"StructuredDocumentation","src":"5363:85:28","text":"@notice `enableQuery` has been called on the Vault, enabling query functionality."},"eventSelector":"91d7478835f2b5adc315f5aad920f4a7f0a02f7fddf3042d17b2c80168ea17f5","id":3317,"name":"VaultQueriesEnabled","nameLocation":"5459:19:28","nodeType":"EventDefinition","parameters":{"id":3316,"nodeType":"ParameterList","parameters":[],"src":"5478:2:28"},"src":"5453:28:28"},{"anonymous":false,"documentation":{"id":3318,"nodeType":"StructuredDocumentation","src":"5487:171:28","text":" @notice A Pool's pause status has changed.\n @param pool The pool that was just paused or unpaused\n @param paused True if the pool was paused"},"eventSelector":"57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7","id":3324,"name":"PoolPausedStateChanged","nameLocation":"5669:22:28","nodeType":"EventDefinition","parameters":{"id":3323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3320,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5708:4:28","nodeType":"VariableDeclaration","scope":3324,"src":"5692:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3319,"name":"address","nodeType":"ElementaryTypeName","src":"5692:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3322,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5719:6:28","nodeType":"VariableDeclaration","scope":3324,"src":"5714:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3321,"name":"bool","nodeType":"ElementaryTypeName","src":"5714:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5691:35:28"},"src":"5663:64:28"},{"anonymous":false,"documentation":{"id":3325,"nodeType":"StructuredDocumentation","src":"5733:158:28","text":" @notice Emitted when the swap fee percentage of a pool is updated.\n @param swapFeePercentage The new swap fee percentage for the pool"},"eventSelector":"89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a1","id":3331,"name":"SwapFeePercentageChanged","nameLocation":"5902:24:28","nodeType":"EventDefinition","parameters":{"id":3330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3327,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5943:4:28","nodeType":"VariableDeclaration","scope":3331,"src":"5927:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3326,"name":"address","nodeType":"ElementaryTypeName","src":"5927:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3329,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"5957:17:28","nodeType":"VariableDeclaration","scope":3331,"src":"5949:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3328,"name":"uint256","nodeType":"ElementaryTypeName","src":"5949:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5926:49:28"},"src":"5896:80:28"},{"anonymous":false,"documentation":{"id":3332,"nodeType":"StructuredDocumentation","src":"5982:170:28","text":" @notice Recovery mode has been enabled or disabled for a pool.\n @param pool The pool\n @param recoveryMode True if recovery mode was enabled"},"eventSelector":"c2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a9","id":3338,"name":"PoolRecoveryModeStateChanged","nameLocation":"6163:28:28","nodeType":"EventDefinition","parameters":{"id":3337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3334,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6208:4:28","nodeType":"VariableDeclaration","scope":3338,"src":"6192:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3333,"name":"address","nodeType":"ElementaryTypeName","src":"6192:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3336,"indexed":false,"mutability":"mutable","name":"recoveryMode","nameLocation":"6219:12:28","nodeType":"VariableDeclaration","scope":3338,"src":"6214:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3335,"name":"bool","nodeType":"ElementaryTypeName","src":"6214:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6191:41:28"},"src":"6157:76:28"},{"anonymous":false,"documentation":{"id":3339,"nodeType":"StructuredDocumentation","src":"6239:353:28","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate swap fee percentage changed\n @param aggregateSwapFeePercentage The new aggregate swap fee percentage"},"eventSelector":"e4d371097beea42453a37406e2aef4c04f3c548f84ac50e72578662c0dcd7354","id":3345,"name":"AggregateSwapFeePercentageChanged","nameLocation":"6603:33:28","nodeType":"EventDefinition","parameters":{"id":3344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3341,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6653:4:28","nodeType":"VariableDeclaration","scope":3345,"src":"6637:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3340,"name":"address","nodeType":"ElementaryTypeName","src":"6637:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3343,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"6667:26:28","nodeType":"VariableDeclaration","scope":3345,"src":"6659:34:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3342,"name":"uint256","nodeType":"ElementaryTypeName","src":"6659:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6636:58:28"},"src":"6597:98:28"},{"anonymous":false,"documentation":{"id":3346,"nodeType":"StructuredDocumentation","src":"6701:357:28","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate yield fee percentage changed\n @param aggregateYieldFeePercentage The new aggregate yield fee percentage"},"eventSelector":"606eb97d83164bd6b200d638cd49c14c65d94d4f2c674cfd85e24e0e202c3ca5","id":3352,"name":"AggregateYieldFeePercentageChanged","nameLocation":"7069:34:28","nodeType":"EventDefinition","parameters":{"id":3351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3348,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"7120:4:28","nodeType":"VariableDeclaration","scope":3352,"src":"7104:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3347,"name":"address","nodeType":"ElementaryTypeName","src":"7104:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3350,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"7134:27:28","nodeType":"VariableDeclaration","scope":3352,"src":"7126:35:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3349,"name":"uint256","nodeType":"ElementaryTypeName","src":"7126:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7103:59:28"},"src":"7063:100:28"},{"anonymous":false,"documentation":{"id":3353,"nodeType":"StructuredDocumentation","src":"7169:132:28","text":" @notice A new authorizer is set by `setAuthorizer`.\n @param newAuthorizer The address of the new authorizer"},"eventSelector":"94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef","id":3358,"name":"AuthorizerChanged","nameLocation":"7312:17:28","nodeType":"EventDefinition","parameters":{"id":3357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3356,"indexed":true,"mutability":"mutable","name":"newAuthorizer","nameLocation":"7350:13:28","nodeType":"VariableDeclaration","scope":3358,"src":"7330:33:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"},"typeName":{"id":3355,"nodeType":"UserDefinedTypeName","pathNode":{"id":3354,"name":"IAuthorizer","nameLocations":["7330:11:28"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"7330:11:28"},"referencedDeclaration":1341,"src":"7330:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"7329:35:28"},"src":"7306:59:28"},{"anonymous":false,"documentation":{"id":3359,"nodeType":"StructuredDocumentation","src":"7371:180:28","text":" @notice A new protocol fee controller is set by `setProtocolFeeController`.\n @param newProtocolFeeController The address of the new protocol fee controller"},"eventSelector":"280a60b1e63c1774d397d35cce80eb80e51408ead755fb446e6f744ce98e5df0","id":3364,"name":"ProtocolFeeControllerChanged","nameLocation":"7562:28:28","nodeType":"EventDefinition","parameters":{"id":3363,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3362,"indexed":true,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"7622:24:28","nodeType":"VariableDeclaration","scope":3364,"src":"7591:55:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":3361,"nodeType":"UserDefinedTypeName","pathNode":{"id":3360,"name":"IProtocolFeeController","nameLocations":["7591:22:28"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"7591:22:28"},"referencedDeclaration":1955,"src":"7591:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"7590:57:28"},"src":"7556:92:28"},{"anonymous":false,"documentation":{"id":3365,"nodeType":"StructuredDocumentation","src":"7654:553:28","text":" @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was deposited\n @param amountWrapped The amount of the wrapped token that was deposited\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a9","id":3376,"name":"LiquidityAddedToBuffer","nameLocation":"8218:22:28","nodeType":"EventDefinition","parameters":{"id":3375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3368,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"8267:12:28","nodeType":"VariableDeclaration","scope":3376,"src":"8250:29:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":3367,"nodeType":"UserDefinedTypeName","pathNode":{"id":3366,"name":"IERC4626","nameLocations":["8250:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"8250:8:28"},"referencedDeclaration":9828,"src":"8250:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3370,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"8297:16:28","nodeType":"VariableDeclaration","scope":3376,"src":"8289:24:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3369,"name":"uint256","nodeType":"ElementaryTypeName","src":"8289:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3372,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"8331:13:28","nodeType":"VariableDeclaration","scope":3376,"src":"8323:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3371,"name":"uint256","nodeType":"ElementaryTypeName","src":"8323:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3374,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"8362:14:28","nodeType":"VariableDeclaration","scope":3376,"src":"8354:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3373,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8354:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8240:142:28"},"src":"8212:171:28"},{"anonymous":false,"documentation":{"id":3377,"nodeType":"StructuredDocumentation","src":"8389:570:28","text":" @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param to The owner of the minted shares\n @param issuedShares The amount of \"internal BPT\" shares created"},"eventSelector":"d66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec34","id":3386,"name":"BufferSharesMinted","nameLocation":"8970:18:28","nodeType":"EventDefinition","parameters":{"id":3385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3380,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9006:12:28","nodeType":"VariableDeclaration","scope":3386,"src":"8989:29:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":3379,"nodeType":"UserDefinedTypeName","pathNode":{"id":3378,"name":"IERC4626","nameLocations":["8989:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"8989:8:28"},"referencedDeclaration":9828,"src":"8989:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3382,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"9036:2:28","nodeType":"VariableDeclaration","scope":3386,"src":"9020:18:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3381,"name":"address","nodeType":"ElementaryTypeName","src":"9020:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3384,"indexed":false,"mutability":"mutable","name":"issuedShares","nameLocation":"9048:12:28","nodeType":"VariableDeclaration","scope":3386,"src":"9040:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3383,"name":"uint256","nodeType":"ElementaryTypeName","src":"9040:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8988:73:28"},"src":"8964:98:28"},{"anonymous":false,"documentation":{"id":3387,"nodeType":"StructuredDocumentation","src":"9068:571:28","text":" @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param from The owner of the burned shares\n @param burnedShares The amount of \"internal BPT\" shares burned"},"eventSelector":"4e09f7f7fc37ce2897800e2c2a9099565edb0a133d19d84a6871b3530af8846b","id":3396,"name":"BufferSharesBurned","nameLocation":"9650:18:28","nodeType":"EventDefinition","parameters":{"id":3395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3390,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9686:12:28","nodeType":"VariableDeclaration","scope":3396,"src":"9669:29:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":3389,"nodeType":"UserDefinedTypeName","pathNode":{"id":3388,"name":"IERC4626","nameLocations":["9669:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"9669:8:28"},"referencedDeclaration":9828,"src":"9669:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3392,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"9716:4:28","nodeType":"VariableDeclaration","scope":3396,"src":"9700:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3391,"name":"address","nodeType":"ElementaryTypeName","src":"9700:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3394,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"9730:12:28","nodeType":"VariableDeclaration","scope":3396,"src":"9722:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3393,"name":"uint256","nodeType":"ElementaryTypeName","src":"9722:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9668:75:28"},"src":"9644:100:28"},{"anonymous":false,"documentation":{"id":3397,"nodeType":"StructuredDocumentation","src":"9750:509:28","text":" @notice Liquidity was removed from an ERC4626 buffer.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was withdrawn\n @param amountWrapped The amount of the wrapped token that was withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"44d97b36e99b590b3d2875aad3b167b1d7fb1e063f3f1325a1eeac76caee5113","id":3408,"name":"LiquidityRemovedFromBuffer","nameLocation":"10270:26:28","nodeType":"EventDefinition","parameters":{"id":3407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3400,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"10323:12:28","nodeType":"VariableDeclaration","scope":3408,"src":"10306:29:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":3399,"nodeType":"UserDefinedTypeName","pathNode":{"id":3398,"name":"IERC4626","nameLocations":["10306:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"10306:8:28"},"referencedDeclaration":9828,"src":"10306:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3402,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"10353:16:28","nodeType":"VariableDeclaration","scope":3408,"src":"10345:24:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3401,"name":"uint256","nodeType":"ElementaryTypeName","src":"10345:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3404,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"10387:13:28","nodeType":"VariableDeclaration","scope":3408,"src":"10379:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3403,"name":"uint256","nodeType":"ElementaryTypeName","src":"10379:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3406,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"10418:14:28","nodeType":"VariableDeclaration","scope":3408,"src":"10410:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3405,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10410:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10296:142:28"},"src":"10264:175:28"},{"anonymous":false,"documentation":{"id":3409,"nodeType":"StructuredDocumentation","src":"10445:278:28","text":" @notice The Vault buffers pause status has changed.\n @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n set to true) will revert.\n @param paused True if the Vault buffers were paused"},"eventSelector":"300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a5","id":3413,"name":"VaultBuffersPausedStateChanged","nameLocation":"10734:30:28","nodeType":"EventDefinition","parameters":{"id":3412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3411,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"10770:6:28","nodeType":"VariableDeclaration","scope":3413,"src":"10765:11:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3410,"name":"bool","nodeType":"ElementaryTypeName","src":"10765:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10764:13:28"},"src":"10728:50:28"},{"anonymous":false,"documentation":{"id":3414,"nodeType":"StructuredDocumentation","src":"10784:194:28","text":" @notice Pools can use this event to emit event data from the Vault.\n @param pool Pool address\n @param eventKey Event key\n @param eventData Encoded event data"},"eventSelector":"4bc4412e210115456903c65b5277d299a505e79f2eb852b92b1ca52d85856428","id":3422,"name":"VaultAuxiliary","nameLocation":"10989:14:28","nodeType":"EventDefinition","parameters":{"id":3421,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3416,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"11020:4:28","nodeType":"VariableDeclaration","scope":3422,"src":"11004:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3415,"name":"address","nodeType":"ElementaryTypeName","src":"11004:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3418,"indexed":true,"mutability":"mutable","name":"eventKey","nameLocation":"11042:8:28","nodeType":"VariableDeclaration","scope":3422,"src":"11026:24:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3417,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11026:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3420,"indexed":false,"mutability":"mutable","name":"eventData","nameLocation":"11058:9:28","nodeType":"VariableDeclaration","scope":3422,"src":"11052:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3419,"name":"bytes","nodeType":"ElementaryTypeName","src":"11052:5:28","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11003:65:28"},"src":"10983:86:28"}],"scope":3424,"src":"500:10571:28","usedErrors":[],"usedEvents":[3222,3227,3246,3258,3270,3288,3306,3311,3314,3317,3324,3331,3338,3345,3352,3358,3364,3376,3386,3396,3408,3413,3422]}],"src":"46:11026:28"},"id":28},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","exportedSymbols":{"AddLiquidityKind":[4223],"AddLiquidityParams":[4239],"AfterSwapParams":[4217],"BufferWrapOrUnwrapParams":[4278],"FEE_BITLENGTH":[4281],"FEE_SCALING_FACTOR":[4284],"HookFlags":[4043],"HooksConfig":[4067],"IAuthorizer":[1341],"IERC20":[10558],"IERC4626":[9828],"IHooks":[1617],"IProtocolFeeController":[1955],"IRateProvider":[24],"IVault":[2527],"IVaultExtension":[3842],"LiquidityManagement":[3996],"MAX_FEE_PERCENTAGE":[4287],"PoolConfig":[4021],"PoolConfigBits":[3998],"PoolData":[4145],"PoolRoleAccounts":[4093],"PoolSwapParams":[4188],"RemoveLiquidityKind":[4244],"RemoveLiquidityParams":[4260],"Rounding":[4148],"SwapKind":[4151],"SwapState":[4077],"TokenConfig":[4110],"TokenInfo":[4120],"TokenType":[4097],"VaultState":[4085],"VaultSwapParams":[4170],"WrappingDirection":[4263]},"id":3843,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3425,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:29"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":3427,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3843,"sourceUnit":9829,"src":"72:75:29","symbolAliases":[{"foreign":{"id":3426,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9828,"src":"81:8:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3429,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3843,"sourceUnit":10559,"src":"148:72:29","symbolAliases":[{"foreign":{"id":3428,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"157:6:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":3431,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3843,"sourceUnit":1342,"src":"222:48:29","symbolAliases":[{"foreign":{"id":3430,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"231:11:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":3433,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3843,"sourceUnit":1956,"src":"271:70:29","symbolAliases":[{"foreign":{"id":3432,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"280:22:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":3435,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3843,"sourceUnit":2528,"src":"342:38:29","symbolAliases":[{"foreign":{"id":3434,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"351:6:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":3437,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3843,"sourceUnit":1618,"src":"381:38:29","symbolAliases":[{"foreign":{"id":3436,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1617,"src":"390:6:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":3438,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3843,"sourceUnit":4288,"src":"420:26:29","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultExtension","contractDependencies":[],"contractKind":"interface","documentation":{"id":3439,"nodeType":"StructuredDocumentation","src":"448:318:29","text":" @notice Interface for functions defined on the `VaultExtension` contract.\n @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n liquidity operations."},"fullyImplemented":false,"id":3842,"linearizedBaseContracts":[3842],"name":"IVaultExtension","nameLocation":"777:15:29","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3440,"nodeType":"StructuredDocumentation","src":"1025:206:29","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":3446,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1245:5:29","nodeType":"FunctionDefinition","parameters":{"id":3441,"nodeType":"ParameterList","parameters":[],"src":"1250:2:29"},"returnParameters":{"id":3445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3444,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3446,"src":"1276:6:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":3443,"nodeType":"UserDefinedTypeName","pathNode":{"id":3442,"name":"IVault","nameLocations":["1276:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"1276:6:29"},"referencedDeclaration":2527,"src":"1276:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1275:8:29"},"scope":3842,"src":"1236:48:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3447,"nodeType":"StructuredDocumentation","src":"1290:202:29","text":" @notice Returns the VaultAdmin contract address.\n @dev The VaultAdmin contract mostly implements permissioned functions.\n @return vaultAdmin The address of the Vault admin"},"functionSelector":"1ba0ae45","id":3452,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultAdmin","nameLocation":"1506:13:29","nodeType":"FunctionDefinition","parameters":{"id":3448,"nodeType":"ParameterList","parameters":[],"src":"1519:2:29"},"returnParameters":{"id":3451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3450,"mutability":"mutable","name":"vaultAdmin","nameLocation":"1553:10:29","nodeType":"VariableDeclaration","scope":3452,"src":"1545:18:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3449,"name":"address","nodeType":"ElementaryTypeName","src":"1545:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1544:20:29"},"scope":3842,"src":"1497:68:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3453,"nodeType":"StructuredDocumentation","src":"1793:254:29","text":" @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n @dev The Vault must be unlocked to perform state-changing liquidity operations.\n @return unlocked True if the Vault is unlocked, false otherwise"},"functionSelector":"8380edb7","id":3458,"implemented":false,"kind":"function","modifiers":[],"name":"isUnlocked","nameLocation":"2061:10:29","nodeType":"FunctionDefinition","parameters":{"id":3454,"nodeType":"ParameterList","parameters":[],"src":"2071:2:29"},"returnParameters":{"id":3457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3456,"mutability":"mutable","name":"unlocked","nameLocation":"2102:8:29","nodeType":"VariableDeclaration","scope":3458,"src":"2097:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3455,"name":"bool","nodeType":"ElementaryTypeName","src":"2097:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2096:15:29"},"scope":3842,"src":"2052:60:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3459,"nodeType":"StructuredDocumentation","src":"2118:141:29","text":" @notice Returns the count of non-zero deltas.\n @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`"},"functionSelector":"db817187","id":3464,"implemented":false,"kind":"function","modifiers":[],"name":"getNonzeroDeltaCount","nameLocation":"2273:20:29","nodeType":"FunctionDefinition","parameters":{"id":3460,"nodeType":"ParameterList","parameters":[],"src":"2293:2:29"},"returnParameters":{"id":3463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3462,"mutability":"mutable","name":"nonzeroDeltaCount","nameLocation":"2327:17:29","nodeType":"VariableDeclaration","scope":3464,"src":"2319:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3461,"name":"uint256","nodeType":"ElementaryTypeName","src":"2319:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2318:27:29"},"scope":3842,"src":"2264:82:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3465,"nodeType":"StructuredDocumentation","src":"2352:284:29","text":" @notice Retrieves the token delta for a specific token.\n @dev This function allows reading the value from the `_tokenDeltas` mapping.\n @param token The token for which the delta is being fetched\n @return tokenDelta The delta of the specified token"},"functionSelector":"9e825ff5","id":3473,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenDelta","nameLocation":"2650:13:29","nodeType":"FunctionDefinition","parameters":{"id":3469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3468,"mutability":"mutable","name":"token","nameLocation":"2671:5:29","nodeType":"VariableDeclaration","scope":3473,"src":"2664:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":3467,"nodeType":"UserDefinedTypeName","pathNode":{"id":3466,"name":"IERC20","nameLocations":["2664:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2664:6:29"},"referencedDeclaration":10558,"src":"2664:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2663:14:29"},"returnParameters":{"id":3472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3471,"mutability":"mutable","name":"tokenDelta","nameLocation":"2708:10:29","nodeType":"VariableDeclaration","scope":3473,"src":"2701:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3470,"name":"int256","nodeType":"ElementaryTypeName","src":"2701:6:29","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"2700:19:29"},"scope":3842,"src":"2641:79:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3474,"nodeType":"StructuredDocumentation","src":"2726:230:29","text":" @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n @param token The token for which to retrieve the reserve\n @return reserveAmount The amount of reserves for the given token"},"functionSelector":"96787092","id":3482,"implemented":false,"kind":"function","modifiers":[],"name":"getReservesOf","nameLocation":"2970:13:29","nodeType":"FunctionDefinition","parameters":{"id":3478,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3477,"mutability":"mutable","name":"token","nameLocation":"2991:5:29","nodeType":"VariableDeclaration","scope":3482,"src":"2984:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":3476,"nodeType":"UserDefinedTypeName","pathNode":{"id":3475,"name":"IERC20","nameLocations":["2984:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2984:6:29"},"referencedDeclaration":10558,"src":"2984:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2983:14:29"},"returnParameters":{"id":3481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3480,"mutability":"mutable","name":"reserveAmount","nameLocation":"3029:13:29","nodeType":"VariableDeclaration","scope":3482,"src":"3021:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3479,"name":"uint256","nodeType":"ElementaryTypeName","src":"3021:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3020:23:29"},"scope":3842,"src":"2961:83:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3483,"nodeType":"StructuredDocumentation","src":"3050:944:29","text":" @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n same pool).\n @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n than a simple swap for every pool type.\n @param pool Address of the pool to check\n @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session."},"functionSelector":"ace9b89b","id":3490,"implemented":false,"kind":"function","modifiers":[],"name":"getAddLiquidityCalledFlag","nameLocation":"4008:25:29","nodeType":"FunctionDefinition","parameters":{"id":3486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3485,"mutability":"mutable","name":"pool","nameLocation":"4042:4:29","nodeType":"VariableDeclaration","scope":3490,"src":"4034:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3484,"name":"address","nodeType":"ElementaryTypeName","src":"4034:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4033:14:29"},"returnParameters":{"id":3489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3488,"mutability":"mutable","name":"liquidityAdded","nameLocation":"4076:14:29","nodeType":"VariableDeclaration","scope":3490,"src":"4071:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3487,"name":"bool","nodeType":"ElementaryTypeName","src":"4071:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4070:21:29"},"scope":3842,"src":"3999:93:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3491,"nodeType":"StructuredDocumentation","src":"4323:1604:29","text":" @notice Registers a pool, associating it with its factory and the tokens it manages.\n @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n pool will automatically unpause. Balancer timestamps are 32 bits.\n A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n the Vault.\n If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n authorizer.\n @param pool The address of the pool being registered\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The initial static swap fee percentage of the pool\n @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param poolHooksContract Contract that implements the hooks for the pool\n @param liquidityManagement Liquidity management flags with implemented methods"},"functionSelector":"eeec802f","id":3514,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"5941:12:29","nodeType":"FunctionDefinition","parameters":{"id":3512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3493,"mutability":"mutable","name":"pool","nameLocation":"5971:4:29","nodeType":"VariableDeclaration","scope":3514,"src":"5963:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3492,"name":"address","nodeType":"ElementaryTypeName","src":"5963:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3497,"mutability":"mutable","name":"tokenConfig","nameLocation":"6006:11:29","nodeType":"VariableDeclaration","scope":3514,"src":"5985:32:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4110_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":3495,"nodeType":"UserDefinedTypeName","pathNode":{"id":3494,"name":"TokenConfig","nameLocations":["5985:11:29"],"nodeType":"IdentifierPath","referencedDeclaration":4110,"src":"5985:11:29"},"referencedDeclaration":4110,"src":"5985:11:29","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4110_storage_ptr","typeString":"struct TokenConfig"}},"id":3496,"nodeType":"ArrayTypeName","src":"5985:13:29","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4110_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":3499,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"6035:17:29","nodeType":"VariableDeclaration","scope":3514,"src":"6027:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3498,"name":"uint256","nodeType":"ElementaryTypeName","src":"6027:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3501,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"6069:18:29","nodeType":"VariableDeclaration","scope":3514,"src":"6062:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3500,"name":"uint32","nodeType":"ElementaryTypeName","src":"6062:6:29","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":3503,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6102:17:29","nodeType":"VariableDeclaration","scope":3514,"src":"6097:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3502,"name":"bool","nodeType":"ElementaryTypeName","src":"6097:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3506,"mutability":"mutable","name":"roleAccounts","nameLocation":"6155:12:29","nodeType":"VariableDeclaration","scope":3514,"src":"6129:38:29","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4093_calldata_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":3505,"nodeType":"UserDefinedTypeName","pathNode":{"id":3504,"name":"PoolRoleAccounts","nameLocations":["6129:16:29"],"nodeType":"IdentifierPath","referencedDeclaration":4093,"src":"6129:16:29"},"referencedDeclaration":4093,"src":"6129:16:29","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4093_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":3508,"mutability":"mutable","name":"poolHooksContract","nameLocation":"6185:17:29","nodeType":"VariableDeclaration","scope":3514,"src":"6177:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3507,"name":"address","nodeType":"ElementaryTypeName","src":"6177:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3511,"mutability":"mutable","name":"liquidityManagement","nameLocation":"6241:19:29","nodeType":"VariableDeclaration","scope":3514,"src":"6212:48:29","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$3996_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":3510,"nodeType":"UserDefinedTypeName","pathNode":{"id":3509,"name":"LiquidityManagement","nameLocations":["6212:19:29"],"nodeType":"IdentifierPath","referencedDeclaration":3996,"src":"6212:19:29"},"referencedDeclaration":3996,"src":"6212:19:29","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$3996_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"5953:313:29"},"returnParameters":{"id":3513,"nodeType":"ParameterList","parameters":[],"src":"6275:0:29"},"scope":3842,"src":"5932:344:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3515,"nodeType":"StructuredDocumentation","src":"6282:185:29","text":" @notice Checks whether a pool is registered.\n @param pool Address of the pool to check\n @return registered True if the pool is registered, false otherwise"},"functionSelector":"c673bdaf","id":3522,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"6481:16:29","nodeType":"FunctionDefinition","parameters":{"id":3518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3517,"mutability":"mutable","name":"pool","nameLocation":"6506:4:29","nodeType":"VariableDeclaration","scope":3522,"src":"6498:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3516,"name":"address","nodeType":"ElementaryTypeName","src":"6498:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6497:14:29"},"returnParameters":{"id":3521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3520,"mutability":"mutable","name":"registered","nameLocation":"6540:10:29","nodeType":"VariableDeclaration","scope":3522,"src":"6535:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3519,"name":"bool","nodeType":"ElementaryTypeName","src":"6535:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6534:17:29"},"scope":3842,"src":"6472:80:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3523,"nodeType":"StructuredDocumentation","src":"6558:589:29","text":" @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n @param pool Address of the pool to initialize\n @param to Address that will receive the output BPT\n @param tokens Tokens used to seed the pool (must match the registered tokens)\n @param exactAmountsIn Exact amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param userData Additional (optional) data required for adding initial liquidity\n @return bptAmountOut Output pool token amount"},"functionSelector":"ba8a2be0","id":3543,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"7161:10:29","nodeType":"FunctionDefinition","parameters":{"id":3539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3525,"mutability":"mutable","name":"pool","nameLocation":"7189:4:29","nodeType":"VariableDeclaration","scope":3543,"src":"7181:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3524,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3527,"mutability":"mutable","name":"to","nameLocation":"7211:2:29","nodeType":"VariableDeclaration","scope":3543,"src":"7203:10:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3526,"name":"address","nodeType":"ElementaryTypeName","src":"7203:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3531,"mutability":"mutable","name":"tokens","nameLocation":"7239:6:29","nodeType":"VariableDeclaration","scope":3543,"src":"7223:22:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3529,"nodeType":"UserDefinedTypeName","pathNode":{"id":3528,"name":"IERC20","nameLocations":["7223:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"7223:6:29"},"referencedDeclaration":10558,"src":"7223:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":3530,"nodeType":"ArrayTypeName","src":"7223:8:29","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":3534,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"7272:14:29","nodeType":"VariableDeclaration","scope":3543,"src":"7255:31:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3532,"name":"uint256","nodeType":"ElementaryTypeName","src":"7255:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3533,"nodeType":"ArrayTypeName","src":"7255:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3536,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"7304:15:29","nodeType":"VariableDeclaration","scope":3543,"src":"7296:23:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3535,"name":"uint256","nodeType":"ElementaryTypeName","src":"7296:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3538,"mutability":"mutable","name":"userData","nameLocation":"7342:8:29","nodeType":"VariableDeclaration","scope":3543,"src":"7329:21:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3537,"name":"bytes","nodeType":"ElementaryTypeName","src":"7329:5:29","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7171:185:29"},"returnParameters":{"id":3542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3541,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7383:12:29","nodeType":"VariableDeclaration","scope":3543,"src":"7375:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3540,"name":"uint256","nodeType":"ElementaryTypeName","src":"7375:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7374:22:29"},"scope":3842,"src":"7152:245:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3544,"nodeType":"StructuredDocumentation","src":"7627:258:29","text":" @notice Checks whether a pool is initialized.\n @dev An initialized pool can be considered registered as well.\n @param pool Address of the pool to check\n @return initialized True if the pool is initialized, false otherwise"},"functionSelector":"532cec7c","id":3551,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInitialized","nameLocation":"7899:17:29","nodeType":"FunctionDefinition","parameters":{"id":3547,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3546,"mutability":"mutable","name":"pool","nameLocation":"7925:4:29","nodeType":"VariableDeclaration","scope":3551,"src":"7917:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3545,"name":"address","nodeType":"ElementaryTypeName","src":"7917:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7916:14:29"},"returnParameters":{"id":3550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3549,"mutability":"mutable","name":"initialized","nameLocation":"7959:11:29","nodeType":"VariableDeclaration","scope":3551,"src":"7954:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3548,"name":"bool","nodeType":"ElementaryTypeName","src":"7954:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7953:18:29"},"scope":3842,"src":"7890:82:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3552,"nodeType":"StructuredDocumentation","src":"7978:152:29","text":" @notice Gets the tokens registered to a pool.\n @param pool Address of the pool\n @return tokens List of tokens in the pool"},"functionSelector":"ca4f2803","id":3561,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokens","nameLocation":"8144:13:29","nodeType":"FunctionDefinition","parameters":{"id":3555,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3554,"mutability":"mutable","name":"pool","nameLocation":"8166:4:29","nodeType":"VariableDeclaration","scope":3561,"src":"8158:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3553,"name":"address","nodeType":"ElementaryTypeName","src":"8158:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8157:14:29"},"returnParameters":{"id":3560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3559,"mutability":"mutable","name":"tokens","nameLocation":"8211:6:29","nodeType":"VariableDeclaration","scope":3561,"src":"8195:22:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3557,"nodeType":"UserDefinedTypeName","pathNode":{"id":3556,"name":"IERC20","nameLocations":["8195:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"8195:6:29"},"referencedDeclaration":10558,"src":"8195:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":3558,"nodeType":"ArrayTypeName","src":"8195:8:29","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"8194:24:29"},"scope":3842,"src":"8135:84:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3562,"nodeType":"StructuredDocumentation","src":"8225:512:29","text":" @notice Gets pool token rates.\n @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n registration order.\n @param pool Address of the pool\n @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. FP(1) for 18-decimal tokens\n @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens"},"functionSelector":"7e361bde","id":3573,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenRates","nameLocation":"8751:17:29","nodeType":"FunctionDefinition","parameters":{"id":3565,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3564,"mutability":"mutable","name":"pool","nameLocation":"8786:4:29","nodeType":"VariableDeclaration","scope":3573,"src":"8778:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3563,"name":"address","nodeType":"ElementaryTypeName","src":"8778:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8768:28:29"},"returnParameters":{"id":3572,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3568,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"8837:21:29","nodeType":"VariableDeclaration","scope":3573,"src":"8820:38:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3566,"name":"uint256","nodeType":"ElementaryTypeName","src":"8820:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3567,"nodeType":"ArrayTypeName","src":"8820:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3571,"mutability":"mutable","name":"tokenRates","nameLocation":"8877:10:29","nodeType":"VariableDeclaration","scope":3573,"src":"8860:27:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3569,"name":"uint256","nodeType":"ElementaryTypeName","src":"8860:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3570,"nodeType":"ArrayTypeName","src":"8860:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8819:69:29"},"scope":3842,"src":"8742:147:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3574,"nodeType":"StructuredDocumentation","src":"8895:287:29","text":" @notice Returns comprehensive pool data for the given pool.\n @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n @param pool The address of the pool\n @return poolData The `PoolData` result"},"functionSelector":"13d21cdf","id":3582,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolData","nameLocation":"9196:11:29","nodeType":"FunctionDefinition","parameters":{"id":3577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3576,"mutability":"mutable","name":"pool","nameLocation":"9216:4:29","nodeType":"VariableDeclaration","scope":3582,"src":"9208:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3575,"name":"address","nodeType":"ElementaryTypeName","src":"9208:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9207:14:29"},"returnParameters":{"id":3581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3580,"mutability":"mutable","name":"poolData","nameLocation":"9261:8:29","nodeType":"VariableDeclaration","scope":3582,"src":"9245:24:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4145_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":3579,"nodeType":"UserDefinedTypeName","pathNode":{"id":3578,"name":"PoolData","nameLocations":["9245:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":4145,"src":"9245:8:29"},"referencedDeclaration":4145,"src":"9245:8:29","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4145_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"9244:26:29"},"scope":3842,"src":"9187:84:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3583,"nodeType":"StructuredDocumentation","src":"9277:531:29","text":" @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n @param pool Address of the pool\n @return tokens The pool tokens, sorted in registration order\n @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order"},"functionSelector":"67e0e076","id":3602,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenInfo","nameLocation":"9822:16:29","nodeType":"FunctionDefinition","parameters":{"id":3586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3585,"mutability":"mutable","name":"pool","nameLocation":"9856:4:29","nodeType":"VariableDeclaration","scope":3602,"src":"9848:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3584,"name":"address","nodeType":"ElementaryTypeName","src":"9848:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9838:28:29"},"returnParameters":{"id":3601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3590,"mutability":"mutable","name":"tokens","nameLocation":"9943:6:29","nodeType":"VariableDeclaration","scope":3602,"src":"9927:22:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3588,"nodeType":"UserDefinedTypeName","pathNode":{"id":3587,"name":"IERC20","nameLocations":["9927:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"9927:6:29"},"referencedDeclaration":10558,"src":"9927:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":3589,"nodeType":"ArrayTypeName","src":"9927:8:29","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":3594,"mutability":"mutable","name":"tokenInfo","nameLocation":"9982:9:29","nodeType":"VariableDeclaration","scope":3602,"src":"9963:28:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4120_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":3592,"nodeType":"UserDefinedTypeName","pathNode":{"id":3591,"name":"TokenInfo","nameLocations":["9963:9:29"],"nodeType":"IdentifierPath","referencedDeclaration":4120,"src":"9963:9:29"},"referencedDeclaration":4120,"src":"9963:9:29","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4120_storage_ptr","typeString":"struct TokenInfo"}},"id":3593,"nodeType":"ArrayTypeName","src":"9963:11:29","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4120_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":3597,"mutability":"mutable","name":"balancesRaw","nameLocation":"10022:11:29","nodeType":"VariableDeclaration","scope":3602,"src":"10005:28:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3595,"name":"uint256","nodeType":"ElementaryTypeName","src":"10005:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3596,"nodeType":"ArrayTypeName","src":"10005:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3600,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"10064:24:29","nodeType":"VariableDeclaration","scope":3602,"src":"10047:41:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3598,"name":"uint256","nodeType":"ElementaryTypeName","src":"10047:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3599,"nodeType":"ArrayTypeName","src":"10047:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9913:185:29"},"scope":3842,"src":"9813:286:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3603,"nodeType":"StructuredDocumentation","src":"10105:312:29","text":" @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n registration order.\n @param pool Address of the pool\n @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates"},"functionSelector":"535cfd8a","id":3611,"implemented":false,"kind":"function","modifiers":[],"name":"getCurrentLiveBalances","nameLocation":"10431:22:29","nodeType":"FunctionDefinition","parameters":{"id":3606,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3605,"mutability":"mutable","name":"pool","nameLocation":"10462:4:29","nodeType":"VariableDeclaration","scope":3611,"src":"10454:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3604,"name":"address","nodeType":"ElementaryTypeName","src":"10454:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10453:14:29"},"returnParameters":{"id":3610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3609,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"10508:20:29","nodeType":"VariableDeclaration","scope":3611,"src":"10491:37:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3607,"name":"uint256","nodeType":"ElementaryTypeName","src":"10491:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3608,"nodeType":"ArrayTypeName","src":"10491:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10490:39:29"},"scope":3842,"src":"10422:108:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3612,"nodeType":"StructuredDocumentation","src":"10536:301:29","text":" @notice Gets the configuration parameters of a pool.\n @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n @param pool Address of the pool\n @return poolConfig The pool configuration as a `PoolConfig` struct"},"functionSelector":"f29486a1","id":3620,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolConfig","nameLocation":"10851:13:29","nodeType":"FunctionDefinition","parameters":{"id":3615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3614,"mutability":"mutable","name":"pool","nameLocation":"10873:4:29","nodeType":"VariableDeclaration","scope":3620,"src":"10865:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3613,"name":"address","nodeType":"ElementaryTypeName","src":"10865:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10864:14:29"},"returnParameters":{"id":3619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3618,"mutability":"mutable","name":"poolConfig","nameLocation":"10920:10:29","nodeType":"VariableDeclaration","scope":3620,"src":"10902:28:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4021_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":3617,"nodeType":"UserDefinedTypeName","pathNode":{"id":3616,"name":"PoolConfig","nameLocations":["10902:10:29"],"nodeType":"IdentifierPath","referencedDeclaration":4021,"src":"10902:10:29"},"referencedDeclaration":4021,"src":"10902:10:29","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4021_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"src":"10901:30:29"},"scope":3842,"src":"10842:90:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3621,"nodeType":"StructuredDocumentation","src":"10938:283:29","text":" @notice Gets the hooks configuration parameters of a pool.\n @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n @param pool Address of the pool\n @return hooksConfig The hooks configuration as a `HooksConfig` struct"},"functionSelector":"ce8630d4","id":3629,"implemented":false,"kind":"function","modifiers":[],"name":"getHooksConfig","nameLocation":"11235:14:29","nodeType":"FunctionDefinition","parameters":{"id":3624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3623,"mutability":"mutable","name":"pool","nameLocation":"11258:4:29","nodeType":"VariableDeclaration","scope":3629,"src":"11250:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3622,"name":"address","nodeType":"ElementaryTypeName","src":"11250:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11249:14:29"},"returnParameters":{"id":3628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3627,"mutability":"mutable","name":"hooksConfig","nameLocation":"11306:11:29","nodeType":"VariableDeclaration","scope":3629,"src":"11287:30:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4067_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":3626,"nodeType":"UserDefinedTypeName","pathNode":{"id":3625,"name":"HooksConfig","nameLocations":["11287:11:29"],"nodeType":"IdentifierPath","referencedDeclaration":4067,"src":"11287:11:29"},"referencedDeclaration":4067,"src":"11287:11:29","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4067_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"}],"src":"11286:32:29"},"scope":3842,"src":"11226:93:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3630,"nodeType":"StructuredDocumentation","src":"11325:160:29","text":" @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n @param pool Address of the pool\n @return rate BPT rate"},"functionSelector":"4f037ee7","id":3637,"implemented":false,"kind":"function","modifiers":[],"name":"getBptRate","nameLocation":"11499:10:29","nodeType":"FunctionDefinition","parameters":{"id":3633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3632,"mutability":"mutable","name":"pool","nameLocation":"11518:4:29","nodeType":"VariableDeclaration","scope":3637,"src":"11510:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3631,"name":"address","nodeType":"ElementaryTypeName","src":"11510:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11509:14:29"},"returnParameters":{"id":3636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3635,"mutability":"mutable","name":"rate","nameLocation":"11555:4:29","nodeType":"VariableDeclaration","scope":3637,"src":"11547:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3634,"name":"uint256","nodeType":"ElementaryTypeName","src":"11547:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11546:14:29"},"scope":3842,"src":"11490:71:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3638,"nodeType":"StructuredDocumentation","src":"11792:168:29","text":" @notice Gets the total supply of a given ERC20 token.\n @param token The token address\n @return tokenTotalSupply Total supply of the token"},"functionSelector":"e4dc2aa4","id":3645,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"11974:11:29","nodeType":"FunctionDefinition","parameters":{"id":3641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3640,"mutability":"mutable","name":"token","nameLocation":"11994:5:29","nodeType":"VariableDeclaration","scope":3645,"src":"11986:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3639,"name":"address","nodeType":"ElementaryTypeName","src":"11986:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11985:15:29"},"returnParameters":{"id":3644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3643,"mutability":"mutable","name":"tokenTotalSupply","nameLocation":"12032:16:29","nodeType":"VariableDeclaration","scope":3645,"src":"12024:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3642,"name":"uint256","nodeType":"ElementaryTypeName","src":"12024:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12023:26:29"},"scope":3842,"src":"11965:85:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3646,"nodeType":"StructuredDocumentation","src":"12056:225:29","text":" @notice Gets the balance of an account for a given ERC20 token.\n @param token Address of the token\n @param account Address of the account\n @return tokenBalance Token balance of the account"},"functionSelector":"f7888aec","id":3655,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"12295:9:29","nodeType":"FunctionDefinition","parameters":{"id":3651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3648,"mutability":"mutable","name":"token","nameLocation":"12313:5:29","nodeType":"VariableDeclaration","scope":3655,"src":"12305:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3647,"name":"address","nodeType":"ElementaryTypeName","src":"12305:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3650,"mutability":"mutable","name":"account","nameLocation":"12328:7:29","nodeType":"VariableDeclaration","scope":3655,"src":"12320:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3649,"name":"address","nodeType":"ElementaryTypeName","src":"12320:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12304:32:29"},"returnParameters":{"id":3654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3653,"mutability":"mutable","name":"tokenBalance","nameLocation":"12368:12:29","nodeType":"VariableDeclaration","scope":3655,"src":"12360:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3652,"name":"uint256","nodeType":"ElementaryTypeName","src":"12360:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12359:22:29"},"scope":3842,"src":"12286:96:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3656,"nodeType":"StructuredDocumentation","src":"12388:299:29","text":" @notice Gets the allowance of a spender for a given ERC20 token and owner.\n @param token Address of the token\n @param owner Address of the owner\n @param spender Address of the spender\n @return tokenAllowance Amount of tokens the spender is allowed to spend"},"functionSelector":"927da105","id":3667,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"12701:9:29","nodeType":"FunctionDefinition","parameters":{"id":3663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3658,"mutability":"mutable","name":"token","nameLocation":"12719:5:29","nodeType":"VariableDeclaration","scope":3667,"src":"12711:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3657,"name":"address","nodeType":"ElementaryTypeName","src":"12711:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3660,"mutability":"mutable","name":"owner","nameLocation":"12734:5:29","nodeType":"VariableDeclaration","scope":3667,"src":"12726:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3659,"name":"address","nodeType":"ElementaryTypeName","src":"12726:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3662,"mutability":"mutable","name":"spender","nameLocation":"12749:7:29","nodeType":"VariableDeclaration","scope":3667,"src":"12741:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3661,"name":"address","nodeType":"ElementaryTypeName","src":"12741:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12710:47:29"},"returnParameters":{"id":3666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3665,"mutability":"mutable","name":"tokenAllowance","nameLocation":"12789:14:29","nodeType":"VariableDeclaration","scope":3667,"src":"12781:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3664,"name":"uint256","nodeType":"ElementaryTypeName","src":"12781:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12780:24:29"},"scope":3842,"src":"12692:113:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3668,"nodeType":"StructuredDocumentation","src":"12811:475:29","text":" @notice Approves a spender to spend pool tokens on behalf of sender.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param spender Address of the spender\n @param amount Amount of tokens to approve\n @return success True if successful, false otherwise"},"functionSelector":"e1f21c67","id":3679,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"13300:7:29","nodeType":"FunctionDefinition","parameters":{"id":3675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3670,"mutability":"mutable","name":"owner","nameLocation":"13316:5:29","nodeType":"VariableDeclaration","scope":3679,"src":"13308:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3669,"name":"address","nodeType":"ElementaryTypeName","src":"13308:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3672,"mutability":"mutable","name":"spender","nameLocation":"13331:7:29","nodeType":"VariableDeclaration","scope":3679,"src":"13323:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3671,"name":"address","nodeType":"ElementaryTypeName","src":"13323:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3674,"mutability":"mutable","name":"amount","nameLocation":"13348:6:29","nodeType":"VariableDeclaration","scope":3679,"src":"13340:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3673,"name":"uint256","nodeType":"ElementaryTypeName","src":"13340:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13307:48:29"},"returnParameters":{"id":3678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3677,"mutability":"mutable","name":"success","nameLocation":"13379:7:29","nodeType":"VariableDeclaration","scope":3679,"src":"13374:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3676,"name":"bool","nodeType":"ElementaryTypeName","src":"13374:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13373:14:29"},"scope":3842,"src":"13291:97:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3680,"nodeType":"StructuredDocumentation","src":"13615:251:29","text":" @notice Indicates whether a pool is paused.\n @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n @param pool The pool to be checked\n @return poolPaused True if the pool is paused"},"functionSelector":"6c9bc732","id":3687,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolPaused","nameLocation":"13880:12:29","nodeType":"FunctionDefinition","parameters":{"id":3683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3682,"mutability":"mutable","name":"pool","nameLocation":"13901:4:29","nodeType":"VariableDeclaration","scope":3687,"src":"13893:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3681,"name":"address","nodeType":"ElementaryTypeName","src":"13893:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13892:14:29"},"returnParameters":{"id":3686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3685,"mutability":"mutable","name":"poolPaused","nameLocation":"13935:10:29","nodeType":"VariableDeclaration","scope":3687,"src":"13930:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3684,"name":"bool","nodeType":"ElementaryTypeName","src":"13930:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13929:17:29"},"scope":3842,"src":"13871:76:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3688,"nodeType":"StructuredDocumentation","src":"13953:648:29","text":" @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n the buffer period. Balancer timestamps are 32 bits.\n @param pool The pool whose data is requested\n @return poolPaused True if the Pool is paused\n @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n @return pauseManager The pause manager, or the zero address"},"functionSelector":"15e32046","id":3701,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolPausedState","nameLocation":"14615:18:29","nodeType":"FunctionDefinition","parameters":{"id":3691,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3690,"mutability":"mutable","name":"pool","nameLocation":"14651:4:29","nodeType":"VariableDeclaration","scope":3701,"src":"14643:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3689,"name":"address","nodeType":"ElementaryTypeName","src":"14643:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14633:28:29"},"returnParameters":{"id":3700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3693,"mutability":"mutable","name":"poolPaused","nameLocation":"14714:10:29","nodeType":"VariableDeclaration","scope":3701,"src":"14709:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3692,"name":"bool","nodeType":"ElementaryTypeName","src":"14709:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3695,"mutability":"mutable","name":"poolPauseWindowEndTime","nameLocation":"14733:22:29","nodeType":"VariableDeclaration","scope":3701,"src":"14726:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3694,"name":"uint32","nodeType":"ElementaryTypeName","src":"14726:6:29","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":3697,"mutability":"mutable","name":"poolBufferPeriodEndTime","nameLocation":"14764:23:29","nodeType":"VariableDeclaration","scope":3701,"src":"14757:30:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3696,"name":"uint32","nodeType":"ElementaryTypeName","src":"14757:6:29","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":3699,"mutability":"mutable","name":"pauseManager","nameLocation":"14797:12:29","nodeType":"VariableDeclaration","scope":3701,"src":"14789:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3698,"name":"address","nodeType":"ElementaryTypeName","src":"14789:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14708:102:29"},"scope":3842,"src":"14606:205:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3702,"nodeType":"StructuredDocumentation","src":"15039:332:29","text":" @notice Checks if the wrapped token has an initialized buffer in the Vault.\n @dev An initialized buffer should have an asset registered in the Vault.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return isBufferInitialized True if the ERC4626 buffer is initialized"},"functionSelector":"6844846b","id":3710,"implemented":false,"kind":"function","modifiers":[],"name":"isERC4626BufferInitialized","nameLocation":"15385:26:29","nodeType":"FunctionDefinition","parameters":{"id":3706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3705,"mutability":"mutable","name":"wrappedToken","nameLocation":"15421:12:29","nodeType":"VariableDeclaration","scope":3710,"src":"15412:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":3704,"nodeType":"UserDefinedTypeName","pathNode":{"id":3703,"name":"IERC4626","nameLocations":["15412:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"15412:8:29"},"referencedDeclaration":9828,"src":"15412:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15411:23:29"},"returnParameters":{"id":3709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3708,"mutability":"mutable","name":"isBufferInitialized","nameLocation":"15463:19:29","nodeType":"VariableDeclaration","scope":3710,"src":"15458:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3707,"name":"bool","nodeType":"ElementaryTypeName","src":"15458:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15457:26:29"},"scope":3842,"src":"15376:108:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3711,"nodeType":"StructuredDocumentation","src":"15490:477:29","text":" @notice Gets the registered asset for a given buffer.\n @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n the Vault on initialization.\n @param wrappedToken The wrapped token specifying the buffer\n @return asset The underlying asset of the wrapped token"},"functionSelector":"4afbaf5a","id":3719,"implemented":false,"kind":"function","modifiers":[],"name":"getERC4626BufferAsset","nameLocation":"15981:21:29","nodeType":"FunctionDefinition","parameters":{"id":3715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3714,"mutability":"mutable","name":"wrappedToken","nameLocation":"16012:12:29","nodeType":"VariableDeclaration","scope":3719,"src":"16003:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":3713,"nodeType":"UserDefinedTypeName","pathNode":{"id":3712,"name":"IERC4626","nameLocations":["16003:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"16003:8:29"},"referencedDeclaration":9828,"src":"16003:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16002:23:29"},"returnParameters":{"id":3718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3717,"mutability":"mutable","name":"asset","nameLocation":"16057:5:29","nodeType":"VariableDeclaration","scope":3719,"src":"16049:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3716,"name":"address","nodeType":"ElementaryTypeName","src":"16049:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16048:15:29"},"scope":3842,"src":"15972:92:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3720,"nodeType":"StructuredDocumentation","src":"16288:379:29","text":" @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return swapFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"85e0b999","id":3730,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateSwapFeeAmount","nameLocation":"16681:25:29","nodeType":"FunctionDefinition","parameters":{"id":3726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3722,"mutability":"mutable","name":"pool","nameLocation":"16715:4:29","nodeType":"VariableDeclaration","scope":3730,"src":"16707:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3721,"name":"address","nodeType":"ElementaryTypeName","src":"16707:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3725,"mutability":"mutable","name":"token","nameLocation":"16728:5:29","nodeType":"VariableDeclaration","scope":3730,"src":"16721:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":3724,"nodeType":"UserDefinedTypeName","pathNode":{"id":3723,"name":"IERC20","nameLocations":["16721:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"16721:6:29"},"referencedDeclaration":10558,"src":"16721:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"16706:28:29"},"returnParameters":{"id":3729,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3728,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"16766:13:29","nodeType":"VariableDeclaration","scope":3730,"src":"16758:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3727,"name":"uint256","nodeType":"ElementaryTypeName","src":"16758:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16757:23:29"},"scope":3842,"src":"16672:109:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3731,"nodeType":"StructuredDocumentation","src":"16787:381:29","text":" @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return yieldFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"00fdfa13","id":3741,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateYieldFeeAmount","nameLocation":"17182:26:29","nodeType":"FunctionDefinition","parameters":{"id":3737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3733,"mutability":"mutable","name":"pool","nameLocation":"17217:4:29","nodeType":"VariableDeclaration","scope":3741,"src":"17209:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3732,"name":"address","nodeType":"ElementaryTypeName","src":"17209:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3736,"mutability":"mutable","name":"token","nameLocation":"17230:5:29","nodeType":"VariableDeclaration","scope":3741,"src":"17223:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":3735,"nodeType":"UserDefinedTypeName","pathNode":{"id":3734,"name":"IERC20","nameLocations":["17223:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"17223:6:29"},"referencedDeclaration":10558,"src":"17223:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"17208:28:29"},"returnParameters":{"id":3740,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3739,"mutability":"mutable","name":"yieldFeeAmount","nameLocation":"17268:14:29","nodeType":"VariableDeclaration","scope":3741,"src":"17260:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3738,"name":"uint256","nodeType":"ElementaryTypeName","src":"17260:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17259:24:29"},"scope":3842,"src":"17173:111:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3742,"nodeType":"StructuredDocumentation","src":"17290:271:29","text":" @notice Fetches the static swap fee percentage for a given pool.\n @param pool The address of the pool whose static swap fee percentage is being queried\n @return swapFeePercentage The current static swap fee percentage for the specified pool"},"functionSelector":"b45090f9","id":3749,"implemented":false,"kind":"function","modifiers":[],"name":"getStaticSwapFeePercentage","nameLocation":"17575:26:29","nodeType":"FunctionDefinition","parameters":{"id":3745,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3744,"mutability":"mutable","name":"pool","nameLocation":"17610:4:29","nodeType":"VariableDeclaration","scope":3749,"src":"17602:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3743,"name":"address","nodeType":"ElementaryTypeName","src":"17602:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17601:14:29"},"returnParameters":{"id":3748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3747,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"17647:17:29","nodeType":"VariableDeclaration","scope":3749,"src":"17639:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3746,"name":"uint256","nodeType":"ElementaryTypeName","src":"17639:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17638:27:29"},"scope":3842,"src":"17566:100:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3750,"nodeType":"StructuredDocumentation","src":"17672:286:29","text":" @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n @param pool The address of the pool whose roles are being queried\n @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)"},"functionSelector":"e9ddeb26","id":3758,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolRoleAccounts","nameLocation":"17972:19:29","nodeType":"FunctionDefinition","parameters":{"id":3753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3752,"mutability":"mutable","name":"pool","nameLocation":"18000:4:29","nodeType":"VariableDeclaration","scope":3758,"src":"17992:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3751,"name":"address","nodeType":"ElementaryTypeName","src":"17992:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17991:14:29"},"returnParameters":{"id":3757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3756,"mutability":"mutable","name":"roleAccounts","nameLocation":"18053:12:29","nodeType":"VariableDeclaration","scope":3758,"src":"18029:36:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4093_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":3755,"nodeType":"UserDefinedTypeName","pathNode":{"id":3754,"name":"PoolRoleAccounts","nameLocations":["18029:16:29"],"nodeType":"IdentifierPath","referencedDeclaration":4093,"src":"18029:16:29"},"referencedDeclaration":4093,"src":"18029:16:29","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4093_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"src":"18028:38:29"},"scope":3842,"src":"17963:104:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3759,"nodeType":"StructuredDocumentation","src":"18073:363:29","text":" @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n @dev Reverts if the hook doesn't return the success flag set to `true`.\n @param pool The pool\n @param swapParams The swap parameters used to compute the fee\n @return dynamicSwapFeePercentage The dynamic swap fee percentage"},"functionSelector":"4d472bdd","id":3769,"implemented":false,"kind":"function","modifiers":[],"name":"computeDynamicSwapFeePercentage","nameLocation":"18450:31:29","nodeType":"FunctionDefinition","parameters":{"id":3765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3761,"mutability":"mutable","name":"pool","nameLocation":"18499:4:29","nodeType":"VariableDeclaration","scope":3769,"src":"18491:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3760,"name":"address","nodeType":"ElementaryTypeName","src":"18491:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3764,"mutability":"mutable","name":"swapParams","nameLocation":"18535:10:29","nodeType":"VariableDeclaration","scope":3769,"src":"18513:32:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4188_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":3763,"nodeType":"UserDefinedTypeName","pathNode":{"id":3762,"name":"PoolSwapParams","nameLocations":["18513:14:29"],"nodeType":"IdentifierPath","referencedDeclaration":4188,"src":"18513:14:29"},"referencedDeclaration":4188,"src":"18513:14:29","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4188_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"18481:70:29"},"returnParameters":{"id":3768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3767,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"18583:24:29","nodeType":"VariableDeclaration","scope":3769,"src":"18575:32:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3766,"name":"uint256","nodeType":"ElementaryTypeName","src":"18575:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18574:34:29"},"scope":3842,"src":"18441:168:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3770,"nodeType":"StructuredDocumentation","src":"18615:145:29","text":" @notice Returns the Protocol Fee Controller address.\n @return protocolFeeController Address of the ProtocolFeeController"},"functionSelector":"85f2dbd4","id":3776,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"18774:24:29","nodeType":"FunctionDefinition","parameters":{"id":3771,"nodeType":"ParameterList","parameters":[],"src":"18798:2:29"},"returnParameters":{"id":3775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3774,"mutability":"mutable","name":"protocolFeeController","nameLocation":"18847:21:29","nodeType":"VariableDeclaration","scope":3776,"src":"18824:44:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":3773,"nodeType":"UserDefinedTypeName","pathNode":{"id":3772,"name":"IProtocolFeeController","nameLocations":["18824:22:29"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"18824:22:29"},"referencedDeclaration":1955,"src":"18824:22:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"18823:46:29"},"scope":3842,"src":"18765:105:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3777,"nodeType":"StructuredDocumentation","src":"19098:296:29","text":" @notice Checks whether a pool is in Recovery Mode.\n @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n @param pool Address of the pool to check\n @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise"},"functionSelector":"be7d628a","id":3784,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInRecoveryMode","nameLocation":"19408:20:29","nodeType":"FunctionDefinition","parameters":{"id":3780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3779,"mutability":"mutable","name":"pool","nameLocation":"19437:4:29","nodeType":"VariableDeclaration","scope":3784,"src":"19429:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3778,"name":"address","nodeType":"ElementaryTypeName","src":"19429:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19428:14:29"},"returnParameters":{"id":3783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3782,"mutability":"mutable","name":"inRecoveryMode","nameLocation":"19471:14:29","nodeType":"VariableDeclaration","scope":3784,"src":"19466:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3781,"name":"bool","nodeType":"ElementaryTypeName","src":"19466:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19465:21:29"},"scope":3842,"src":"19399:88:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3785,"nodeType":"StructuredDocumentation","src":"19493:679:29","text":" @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n The request is implemented by the Vault without any interaction with the pool, ensuring that\n it works the same for all pools, and cannot be disabled by a new pool type.\n @param pool Address of the pool\n @param from Address of user to burn pool tokens from\n @param exactBptAmountIn Input pool token amount\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order"},"functionSelector":"a07d6040","id":3800,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityRecovery","nameLocation":"20186:23:29","nodeType":"FunctionDefinition","parameters":{"id":3795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3787,"mutability":"mutable","name":"pool","nameLocation":"20227:4:29","nodeType":"VariableDeclaration","scope":3800,"src":"20219:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3786,"name":"address","nodeType":"ElementaryTypeName","src":"20219:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3789,"mutability":"mutable","name":"from","nameLocation":"20249:4:29","nodeType":"VariableDeclaration","scope":3800,"src":"20241:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3788,"name":"address","nodeType":"ElementaryTypeName","src":"20241:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3791,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"20271:16:29","nodeType":"VariableDeclaration","scope":3800,"src":"20263:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3790,"name":"uint256","nodeType":"ElementaryTypeName","src":"20263:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3794,"mutability":"mutable","name":"minAmountsOut","nameLocation":"20314:13:29","nodeType":"VariableDeclaration","scope":3800,"src":"20297:30:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3792,"name":"uint256","nodeType":"ElementaryTypeName","src":"20297:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3793,"nodeType":"ArrayTypeName","src":"20297:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20209:124:29"},"returnParameters":{"id":3799,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3798,"mutability":"mutable","name":"amountsOut","nameLocation":"20369:10:29","nodeType":"VariableDeclaration","scope":3800,"src":"20352:27:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3796,"name":"uint256","nodeType":"ElementaryTypeName","src":"20352:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3797,"nodeType":"ArrayTypeName","src":"20352:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20351:29:29"},"scope":3842,"src":"20177:204:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3801,"nodeType":"StructuredDocumentation","src":"20602:699:29","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"edfa3568","id":3808,"implemented":false,"kind":"function","modifiers":[],"name":"quote","nameLocation":"21315:5:29","nodeType":"FunctionDefinition","parameters":{"id":3804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3803,"mutability":"mutable","name":"data","nameLocation":"21336:4:29","nodeType":"VariableDeclaration","scope":3808,"src":"21321:19:29","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3802,"name":"bytes","nodeType":"ElementaryTypeName","src":"21321:5:29","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21320:21:29"},"returnParameters":{"id":3807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3806,"mutability":"mutable","name":"result","nameLocation":"21373:6:29","nodeType":"VariableDeclaration","scope":3808,"src":"21360:19:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3805,"name":"bytes","nodeType":"ElementaryTypeName","src":"21360:5:29","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21359:21:29"},"scope":3842,"src":"21306:75:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3809,"nodeType":"StructuredDocumentation","src":"21387:731:29","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n This call always reverts, returning the result in the revert reason.\n @param data Contains function signature and args to be passed to the msg.sender"},"functionSelector":"757d64b3","id":3814,"implemented":false,"kind":"function","modifiers":[],"name":"quoteAndRevert","nameLocation":"22132:14:29","nodeType":"FunctionDefinition","parameters":{"id":3812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3811,"mutability":"mutable","name":"data","nameLocation":"22162:4:29","nodeType":"VariableDeclaration","scope":3814,"src":"22147:19:29","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3810,"name":"bytes","nodeType":"ElementaryTypeName","src":"22147:5:29","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22146:21:29"},"returnParameters":{"id":3813,"nodeType":"ParameterList","parameters":[],"src":"22176:0:29"},"scope":3842,"src":"22123:54:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3815,"nodeType":"StructuredDocumentation","src":"22183:239:29","text":" @notice Returns true if queries are disabled on the Vault.\n @dev If true, queries might either be disabled temporarily or permanently.\n @return queryDisabled True if query functionality is reversibly disabled"},"functionSelector":"b4aef0ab","id":3820,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabled","nameLocation":"22436:15:29","nodeType":"FunctionDefinition","parameters":{"id":3816,"nodeType":"ParameterList","parameters":[],"src":"22451:2:29"},"returnParameters":{"id":3819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3818,"mutability":"mutable","name":"queryDisabled","nameLocation":"22482:13:29","nodeType":"VariableDeclaration","scope":3820,"src":"22477:18:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3817,"name":"bool","nodeType":"ElementaryTypeName","src":"22477:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22476:20:29"},"scope":3842,"src":"22427:70:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3821,"nodeType":"StructuredDocumentation","src":"22503:302:29","text":" @notice Returns true if queries are disabled permanently; false if they are enabled.\n @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n @return queryDisabledPermanently True if query functionality is permanently disabled"},"functionSelector":"13ef8a5d","id":3826,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabledPermanently","nameLocation":"22819:26:29","nodeType":"FunctionDefinition","parameters":{"id":3822,"nodeType":"ParameterList","parameters":[],"src":"22845:2:29"},"returnParameters":{"id":3825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3824,"mutability":"mutable","name":"queryDisabledPermanently","nameLocation":"22876:24:29","nodeType":"VariableDeclaration","scope":3826,"src":"22871:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3823,"name":"bool","nodeType":"ElementaryTypeName","src":"22871:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22870:31:29"},"scope":3842,"src":"22810:92:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3827,"nodeType":"StructuredDocumentation","src":"22908:162:29","text":" @notice Pools can use this event to emit event data from the Vault.\n @param eventKey Event key\n @param eventData Encoded event data"},"functionSelector":"c8088247","id":3834,"implemented":false,"kind":"function","modifiers":[],"name":"emitAuxiliaryEvent","nameLocation":"23084:18:29","nodeType":"FunctionDefinition","parameters":{"id":3832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3829,"mutability":"mutable","name":"eventKey","nameLocation":"23111:8:29","nodeType":"VariableDeclaration","scope":3834,"src":"23103:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3828,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23103:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3831,"mutability":"mutable","name":"eventData","nameLocation":"23136:9:29","nodeType":"VariableDeclaration","scope":3834,"src":"23121:24:29","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3830,"name":"bytes","nodeType":"ElementaryTypeName","src":"23121:5:29","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"23102:44:29"},"returnParameters":{"id":3833,"nodeType":"ParameterList","parameters":[],"src":"23155:0:29"},"scope":3842,"src":"23075:81:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3835,"nodeType":"StructuredDocumentation","src":"23380:284:29","text":" @notice Returns the Authorizer address.\n @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n and can be changed through a permissioned call.\n @return authorizer Address of the authorizer contract"},"functionSelector":"aaabadc5","id":3841,"implemented":false,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"23678:13:29","nodeType":"FunctionDefinition","parameters":{"id":3836,"nodeType":"ParameterList","parameters":[],"src":"23691:2:29"},"returnParameters":{"id":3840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3839,"mutability":"mutable","name":"authorizer","nameLocation":"23729:10:29","nodeType":"VariableDeclaration","scope":3841,"src":"23717:22:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"},"typeName":{"id":3838,"nodeType":"UserDefinedTypeName","pathNode":{"id":3837,"name":"IAuthorizer","nameLocations":["23717:11:29"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"23717:11:29"},"referencedDeclaration":1341,"src":"23717:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23716:24:29"},"scope":3842,"src":"23669:72:29","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3843,"src":"767:22976:29","usedErrors":[],"usedEvents":[]}],"src":"46:23698:29"},"id":29},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","exportedSymbols":{"AddLiquidityKind":[4223],"AddLiquidityParams":[4239],"AfterSwapParams":[4217],"BufferWrapOrUnwrapParams":[4278],"FEE_BITLENGTH":[4281],"FEE_SCALING_FACTOR":[4284],"HookFlags":[4043],"HooksConfig":[4067],"IERC20":[10558],"IERC4626":[9828],"IRateProvider":[24],"IVaultMain":[3978],"LiquidityManagement":[3996],"MAX_FEE_PERCENTAGE":[4287],"PoolConfig":[4021],"PoolConfigBits":[3998],"PoolData":[4145],"PoolRoleAccounts":[4093],"PoolSwapParams":[4188],"RemoveLiquidityKind":[4244],"RemoveLiquidityParams":[4260],"Rounding":[4148],"SwapKind":[4151],"SwapState":[4077],"TokenConfig":[4110],"TokenInfo":[4120],"TokenType":[4097],"VaultState":[4085],"VaultSwapParams":[4170],"WrappingDirection":[4263]},"id":3979,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3844,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:30"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3846,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3979,"sourceUnit":10559,"src":"72:72:30","symbolAliases":[{"foreign":{"id":3845,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"81:6:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":3847,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3979,"sourceUnit":4288,"src":"146:26:30","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultMain","contractDependencies":[],"contractKind":"interface","documentation":{"id":3848,"nodeType":"StructuredDocumentation","src":"174:232:30","text":" @notice Interface for functions defined on the main Vault contract.\n @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n for technical or performance reasons."},"fullyImplemented":false,"id":3978,"linearizedBaseContracts":[3978],"name":"IVaultMain","nameLocation":"417:10:30","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3849,"nodeType":"StructuredDocumentation","src":"656:431:30","text":" @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n meaning all balances for the caller have to be settled at the end.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"48c89491","id":3856,"implemented":false,"kind":"function","modifiers":[],"name":"unlock","nameLocation":"1101:6:30","nodeType":"FunctionDefinition","parameters":{"id":3852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3851,"mutability":"mutable","name":"data","nameLocation":"1123:4:30","nodeType":"VariableDeclaration","scope":3856,"src":"1108:19:30","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3850,"name":"bytes","nodeType":"ElementaryTypeName","src":"1108:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1107:21:30"},"returnParameters":{"id":3855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3854,"mutability":"mutable","name":"result","nameLocation":"1160:6:30","nodeType":"VariableDeclaration","scope":3856,"src":"1147:19:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3853,"name":"bytes","nodeType":"ElementaryTypeName","src":"1147:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1146:21:30"},"scope":3978,"src":"1092:76:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3857,"nodeType":"StructuredDocumentation","src":"1174:1291:30","text":" @notice Settles deltas for a token; must be successful for the current lock to be released.\n @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n excess in the Vault balance.\n If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n not affect settlement.\n The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n difference equals current balance of the token minus existing reserves of the token when the function is called.\n @param token Address of the token\n @param amountHint Amount paid as reported by the caller\n @return credit Credit received in return of the payment"},"functionSelector":"15afd409","id":3867,"implemented":false,"kind":"function","modifiers":[],"name":"settle","nameLocation":"2479:6:30","nodeType":"FunctionDefinition","parameters":{"id":3863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3860,"mutability":"mutable","name":"token","nameLocation":"2493:5:30","nodeType":"VariableDeclaration","scope":3867,"src":"2486:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":3859,"nodeType":"UserDefinedTypeName","pathNode":{"id":3858,"name":"IERC20","nameLocations":["2486:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2486:6:30"},"referencedDeclaration":10558,"src":"2486:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3862,"mutability":"mutable","name":"amountHint","nameLocation":"2508:10:30","nodeType":"VariableDeclaration","scope":3867,"src":"2500:18:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3861,"name":"uint256","nodeType":"ElementaryTypeName","src":"2500:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2485:34:30"},"returnParameters":{"id":3866,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3865,"mutability":"mutable","name":"credit","nameLocation":"2546:6:30","nodeType":"VariableDeclaration","scope":3867,"src":"2538:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3864,"name":"uint256","nodeType":"ElementaryTypeName","src":"2538:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2537:16:30"},"scope":3978,"src":"2470:84:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3868,"nodeType":"StructuredDocumentation","src":"2560:315:30","text":" @notice Sends tokens to a recipient.\n @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n debts.\n @param token Address of the token\n @param to Recipient address\n @param amount Amount of tokens to send"},"functionSelector":"ae639329","id":3878,"implemented":false,"kind":"function","modifiers":[],"name":"sendTo","nameLocation":"2889:6:30","nodeType":"FunctionDefinition","parameters":{"id":3876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3871,"mutability":"mutable","name":"token","nameLocation":"2903:5:30","nodeType":"VariableDeclaration","scope":3878,"src":"2896:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":3870,"nodeType":"UserDefinedTypeName","pathNode":{"id":3869,"name":"IERC20","nameLocations":["2896:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2896:6:30"},"referencedDeclaration":10558,"src":"2896:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3873,"mutability":"mutable","name":"to","nameLocation":"2918:2:30","nodeType":"VariableDeclaration","scope":3878,"src":"2910:10:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3872,"name":"address","nodeType":"ElementaryTypeName","src":"2910:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3875,"mutability":"mutable","name":"amount","nameLocation":"2930:6:30","nodeType":"VariableDeclaration","scope":3878,"src":"2922:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3874,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2895:42:30"},"returnParameters":{"id":3877,"nodeType":"ParameterList","parameters":[],"src":"2946:0:30"},"scope":3978,"src":"2880:67:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3879,"nodeType":"StructuredDocumentation","src":"3161:412:30","text":" @notice Swaps tokens based on provided parameters.\n @dev All parameters are given in raw token decimal encoding.\n @param vaultSwapParams Parameters for the swap (see above for struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"2bfb780c","id":3891,"implemented":false,"kind":"function","modifiers":[],"name":"swap","nameLocation":"3587:4:30","nodeType":"FunctionDefinition","parameters":{"id":3883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3882,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"3624:15:30","nodeType":"VariableDeclaration","scope":3891,"src":"3601:38:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4170_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":3881,"nodeType":"UserDefinedTypeName","pathNode":{"id":3880,"name":"VaultSwapParams","nameLocations":["3601:15:30"],"nodeType":"IdentifierPath","referencedDeclaration":4170,"src":"3601:15:30"},"referencedDeclaration":4170,"src":"3601:15:30","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4170_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"}],"src":"3591:54:30"},"returnParameters":{"id":3890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3885,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"3672:19:30","nodeType":"VariableDeclaration","scope":3891,"src":"3664:27:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3884,"name":"uint256","nodeType":"ElementaryTypeName","src":"3664:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3887,"mutability":"mutable","name":"amountInRaw","nameLocation":"3701:11:30","nodeType":"VariableDeclaration","scope":3891,"src":"3693:19:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3886,"name":"uint256","nodeType":"ElementaryTypeName","src":"3693:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3889,"mutability":"mutable","name":"amountOutRaw","nameLocation":"3722:12:30","nodeType":"VariableDeclaration","scope":3891,"src":"3714:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3888,"name":"uint256","nodeType":"ElementaryTypeName","src":"3714:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3663:72:30"},"scope":3978,"src":"3578:158:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3892,"nodeType":"StructuredDocumentation","src":"3954:523:30","text":" @notice Adds liquidity to a pool.\n @dev Caution should be exercised when adding liquidity because the Vault has the capability\n to transfer tokens from any user, given that it holds all allowances.\n @param params Parameters for the add liquidity (see above for struct definition)\n @return amountsIn Actual amounts of input tokens\n @return bptAmountOut Output pool token amount\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"4af29ec4","id":3905,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidity","nameLocation":"4491:12:30","nodeType":"FunctionDefinition","parameters":{"id":3896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3895,"mutability":"mutable","name":"params","nameLocation":"4539:6:30","nodeType":"VariableDeclaration","scope":3905,"src":"4513:32:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4239_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":3894,"nodeType":"UserDefinedTypeName","pathNode":{"id":3893,"name":"AddLiquidityParams","nameLocations":["4513:18:30"],"nodeType":"IdentifierPath","referencedDeclaration":4239,"src":"4513:18:30"},"referencedDeclaration":4239,"src":"4513:18:30","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4239_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"}],"src":"4503:48:30"},"returnParameters":{"id":3904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3899,"mutability":"mutable","name":"amountsIn","nameLocation":"4587:9:30","nodeType":"VariableDeclaration","scope":3905,"src":"4570:26:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3897,"name":"uint256","nodeType":"ElementaryTypeName","src":"4570:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3898,"nodeType":"ArrayTypeName","src":"4570:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3901,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4606:12:30","nodeType":"VariableDeclaration","scope":3905,"src":"4598:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3900,"name":"uint256","nodeType":"ElementaryTypeName","src":"4598:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3903,"mutability":"mutable","name":"returnData","nameLocation":"4633:10:30","nodeType":"VariableDeclaration","scope":3905,"src":"4620:23:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3902,"name":"bytes","nodeType":"ElementaryTypeName","src":"4620:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4569:75:30"},"scope":3978,"src":"4482:163:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3906,"nodeType":"StructuredDocumentation","src":"4864:644:30","text":" @notice Removes liquidity from a pool.\n @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n Untrusted routers require prior approval from the user. This is the only function allowed to call\n _queryModeBalanceIncrease (and only in a query context).\n @param params Parameters for the remove liquidity (see above for struct definition)\n @return bptAmountIn Actual amount of BPT burned\n @return amountsOut Actual amounts of output tokens\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"21457897","id":3919,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidity","nameLocation":"5522:15:30","nodeType":"FunctionDefinition","parameters":{"id":3910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3909,"mutability":"mutable","name":"params","nameLocation":"5576:6:30","nodeType":"VariableDeclaration","scope":3919,"src":"5547:35:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4260_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":3908,"nodeType":"UserDefinedTypeName","pathNode":{"id":3907,"name":"RemoveLiquidityParams","nameLocations":["5547:21:30"],"nodeType":"IdentifierPath","referencedDeclaration":4260,"src":"5547:21:30"},"referencedDeclaration":4260,"src":"5547:21:30","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4260_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"}],"src":"5537:51:30"},"returnParameters":{"id":3918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3912,"mutability":"mutable","name":"bptAmountIn","nameLocation":"5615:11:30","nodeType":"VariableDeclaration","scope":3919,"src":"5607:19:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3911,"name":"uint256","nodeType":"ElementaryTypeName","src":"5607:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3915,"mutability":"mutable","name":"amountsOut","nameLocation":"5645:10:30","nodeType":"VariableDeclaration","scope":3919,"src":"5628:27:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3913,"name":"uint256","nodeType":"ElementaryTypeName","src":"5628:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3914,"nodeType":"ArrayTypeName","src":"5628:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3917,"mutability":"mutable","name":"returnData","nameLocation":"5670:10:30","nodeType":"VariableDeclaration","scope":3919,"src":"5657:23:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3916,"name":"bytes","nodeType":"ElementaryTypeName","src":"5657:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5606:75:30"},"scope":3978,"src":"5513:169:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3920,"nodeType":"StructuredDocumentation","src":"5912:385:30","text":" @notice Gets the index of a token in a given pool.\n @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n @param pool Address of the pool\n @param token Address of the token\n @return tokenCount Number of tokens in the pool\n @return index Index corresponding to the given token in the pool's token list"},"functionSelector":"c9c1661b","id":3932,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenCountAndIndexOfToken","nameLocation":"6311:32:30","nodeType":"FunctionDefinition","parameters":{"id":3926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3922,"mutability":"mutable","name":"pool","nameLocation":"6361:4:30","nodeType":"VariableDeclaration","scope":3932,"src":"6353:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3921,"name":"address","nodeType":"ElementaryTypeName","src":"6353:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3925,"mutability":"mutable","name":"token","nameLocation":"6382:5:30","nodeType":"VariableDeclaration","scope":3932,"src":"6375:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":3924,"nodeType":"UserDefinedTypeName","pathNode":{"id":3923,"name":"IERC20","nameLocations":["6375:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"6375:6:30"},"referencedDeclaration":10558,"src":"6375:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6343:50:30"},"returnParameters":{"id":3931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3928,"mutability":"mutable","name":"tokenCount","nameLocation":"6425:10:30","nodeType":"VariableDeclaration","scope":3932,"src":"6417:18:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3927,"name":"uint256","nodeType":"ElementaryTypeName","src":"6417:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3930,"mutability":"mutable","name":"index","nameLocation":"6445:5:30","nodeType":"VariableDeclaration","scope":3932,"src":"6437:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3929,"name":"uint256","nodeType":"ElementaryTypeName","src":"6437:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6416:35:30"},"scope":3978,"src":"6302:150:30","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3933,"nodeType":"StructuredDocumentation","src":"6683:460:30","text":" @notice Transfers pool token from owner to a recipient.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"beabacc8","id":3944,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"7157:8:30","nodeType":"FunctionDefinition","parameters":{"id":3940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3935,"mutability":"mutable","name":"owner","nameLocation":"7174:5:30","nodeType":"VariableDeclaration","scope":3944,"src":"7166:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3934,"name":"address","nodeType":"ElementaryTypeName","src":"7166:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3937,"mutability":"mutable","name":"to","nameLocation":"7189:2:30","nodeType":"VariableDeclaration","scope":3944,"src":"7181:10:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3936,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3939,"mutability":"mutable","name":"amount","nameLocation":"7201:6:30","nodeType":"VariableDeclaration","scope":3944,"src":"7193:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3938,"name":"uint256","nodeType":"ElementaryTypeName","src":"7193:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7165:43:30"},"returnParameters":{"id":3943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3942,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3944,"src":"7227:4:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3941,"name":"bool","nodeType":"ElementaryTypeName","src":"7227:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7226:6:30"},"scope":3978,"src":"7148:85:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3945,"nodeType":"StructuredDocumentation","src":"7239:544:30","text":" @notice Transfers pool token from a sender to a recipient using an allowance.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param spender Address allowed to perform the transfer\n @param from Address of the sender\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"15dacbea","id":3958,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"7797:12:30","nodeType":"FunctionDefinition","parameters":{"id":3954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3947,"mutability":"mutable","name":"spender","nameLocation":"7818:7:30","nodeType":"VariableDeclaration","scope":3958,"src":"7810:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3946,"name":"address","nodeType":"ElementaryTypeName","src":"7810:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3949,"mutability":"mutable","name":"from","nameLocation":"7835:4:30","nodeType":"VariableDeclaration","scope":3958,"src":"7827:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3948,"name":"address","nodeType":"ElementaryTypeName","src":"7827:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3951,"mutability":"mutable","name":"to","nameLocation":"7849:2:30","nodeType":"VariableDeclaration","scope":3958,"src":"7841:10:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3950,"name":"address","nodeType":"ElementaryTypeName","src":"7841:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3953,"mutability":"mutable","name":"amount","nameLocation":"7861:6:30","nodeType":"VariableDeclaration","scope":3958,"src":"7853:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3952,"name":"uint256","nodeType":"ElementaryTypeName","src":"7853:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7809:59:30"},"returnParameters":{"id":3957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3956,"mutability":"mutable","name":"success","nameLocation":"7892:7:30","nodeType":"VariableDeclaration","scope":3958,"src":"7887:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3955,"name":"bool","nodeType":"ElementaryTypeName","src":"7887:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7886:14:30"},"scope":3978,"src":"7788:113:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3959,"nodeType":"StructuredDocumentation","src":"8128:575:30","text":" @notice Wraps/unwraps tokens based on the parameters provided.\n @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n @param params Parameters for the wrap/unwrap operation (see struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"43583be5","id":3971,"implemented":false,"kind":"function","modifiers":[],"name":"erc4626BufferWrapOrUnwrap","nameLocation":"8717:25:30","nodeType":"FunctionDefinition","parameters":{"id":3963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3962,"mutability":"mutable","name":"params","nameLocation":"8784:6:30","nodeType":"VariableDeclaration","scope":3971,"src":"8752:38:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4278_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams"},"typeName":{"id":3961,"nodeType":"UserDefinedTypeName","pathNode":{"id":3960,"name":"BufferWrapOrUnwrapParams","nameLocations":["8752:24:30"],"nodeType":"IdentifierPath","referencedDeclaration":4278,"src":"8752:24:30"},"referencedDeclaration":4278,"src":"8752:24:30","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4278_storage_ptr","typeString":"struct BufferWrapOrUnwrapParams"}},"visibility":"internal"}],"src":"8742:54:30"},"returnParameters":{"id":3970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3965,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"8823:19:30","nodeType":"VariableDeclaration","scope":3971,"src":"8815:27:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3964,"name":"uint256","nodeType":"ElementaryTypeName","src":"8815:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3967,"mutability":"mutable","name":"amountInRaw","nameLocation":"8852:11:30","nodeType":"VariableDeclaration","scope":3971,"src":"8844:19:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3966,"name":"uint256","nodeType":"ElementaryTypeName","src":"8844:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3969,"mutability":"mutable","name":"amountOutRaw","nameLocation":"8873:12:30","nodeType":"VariableDeclaration","scope":3971,"src":"8865:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3968,"name":"uint256","nodeType":"ElementaryTypeName","src":"8865:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8814:72:30"},"scope":3978,"src":"8708:179:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3972,"nodeType":"StructuredDocumentation","src":"9115:345:30","text":" @notice Returns the VaultExtension contract address.\n @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n functions, since delegate calls through the Vault are more expensive than direct calls.\n @return vaultExtension Address of the VaultExtension"},"functionSelector":"b9a8effa","id":3977,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultExtension","nameLocation":"9474:17:30","nodeType":"FunctionDefinition","parameters":{"id":3973,"nodeType":"ParameterList","parameters":[],"src":"9491:2:30"},"returnParameters":{"id":3976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3975,"mutability":"mutable","name":"vaultExtension","nameLocation":"9525:14:30","nodeType":"VariableDeclaration","scope":3977,"src":"9517:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3974,"name":"address","nodeType":"ElementaryTypeName","src":"9517:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9516:24:30"},"scope":3978,"src":"9465:76:30","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3979,"src":"407:9136:30","usedErrors":[],"usedEvents":[]}],"src":"46:9498:30"},"id":30},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","exportedSymbols":{"AddLiquidityKind":[4223],"AddLiquidityParams":[4239],"AfterSwapParams":[4217],"BufferWrapOrUnwrapParams":[4278],"FEE_BITLENGTH":[4281],"FEE_SCALING_FACTOR":[4284],"HookFlags":[4043],"HooksConfig":[4067],"IERC20":[10558],"IERC4626":[9828],"IRateProvider":[24],"LiquidityManagement":[3996],"MAX_FEE_PERCENTAGE":[4287],"PoolConfig":[4021],"PoolConfigBits":[3998],"PoolData":[4145],"PoolRoleAccounts":[4093],"PoolSwapParams":[4188],"RemoveLiquidityKind":[4244],"RemoveLiquidityParams":[4260],"Rounding":[4148],"SwapKind":[4151],"SwapState":[4077],"TokenConfig":[4110],"TokenInfo":[4120],"TokenType":[4097],"VaultState":[4085],"VaultSwapParams":[4170],"WrappingDirection":[4263]},"id":4288,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3980,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:31"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3982,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4288,"sourceUnit":10559,"src":"72:72:31","symbolAliases":[{"foreign":{"id":3981,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"81:6:31","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":3984,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4288,"sourceUnit":9829,"src":"145:75:31","symbolAliases":[{"foreign":{"id":3983,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9828,"src":"154:8:31","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"../solidity-utils/helpers/IRateProvider.sol","id":3986,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4288,"sourceUnit":25,"src":"222:76:31","symbolAliases":[{"foreign":{"id":3985,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24,"src":"231:13:31","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"LiquidityManagement","documentation":{"id":3987,"nodeType":"StructuredDocumentation","src":"300:472:31","text":" @notice Represents a pool's liquidity management configuration.\n @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION"},"id":3996,"members":[{"constant":false,"id":3989,"mutability":"mutable","name":"disableUnbalancedLiquidity","nameLocation":"811:26:31","nodeType":"VariableDeclaration","scope":3996,"src":"806:31:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3988,"name":"bool","nodeType":"ElementaryTypeName","src":"806:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3991,"mutability":"mutable","name":"enableAddLiquidityCustom","nameLocation":"848:24:31","nodeType":"VariableDeclaration","scope":3996,"src":"843:29:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3990,"name":"bool","nodeType":"ElementaryTypeName","src":"843:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3993,"mutability":"mutable","name":"enableRemoveLiquidityCustom","nameLocation":"883:27:31","nodeType":"VariableDeclaration","scope":3996,"src":"878:32:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3992,"name":"bool","nodeType":"ElementaryTypeName","src":"878:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3995,"mutability":"mutable","name":"enableDonation","nameLocation":"921:14:31","nodeType":"VariableDeclaration","scope":3996,"src":"916:19:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3994,"name":"bool","nodeType":"ElementaryTypeName","src":"916:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"LiquidityManagement","nameLocation":"780:19:31","nodeType":"StructDefinition","scope":4288,"src":"773:165:31","visibility":"public"},{"canonicalName":"PoolConfigBits","id":3998,"name":"PoolConfigBits","nameLocation":"1015:14:31","nodeType":"UserDefinedValueTypeDefinition","src":"1010:31:31","underlyingType":{"id":3997,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1033:7:31","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"canonicalName":"PoolConfig","documentation":{"id":3999,"nodeType":"StructuredDocumentation","src":"1043:1034:31","text":" @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n @param liquidityManagement Flags related to adding/removing liquidity\n @param staticSwapFeePercentage The pool's native swap fee\n @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n @param isPoolRegistered If true, the pool has been registered with the Vault\n @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals"},"id":4021,"members":[{"constant":false,"id":4002,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2122:19:31","nodeType":"VariableDeclaration","scope":4021,"src":"2102:39:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$3996_storage_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":4001,"nodeType":"UserDefinedTypeName","pathNode":{"id":4000,"name":"LiquidityManagement","nameLocations":["2102:19:31"],"nodeType":"IdentifierPath","referencedDeclaration":3996,"src":"2102:19:31"},"referencedDeclaration":3996,"src":"2102:19:31","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$3996_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"},{"constant":false,"id":4004,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"2155:23:31","nodeType":"VariableDeclaration","scope":4021,"src":"2147:31:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4003,"name":"uint256","nodeType":"ElementaryTypeName","src":"2147:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4006,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"2192:26:31","nodeType":"VariableDeclaration","scope":4021,"src":"2184:34:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4005,"name":"uint256","nodeType":"ElementaryTypeName","src":"2184:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4008,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"2232:27:31","nodeType":"VariableDeclaration","scope":4021,"src":"2224:35:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4007,"name":"uint256","nodeType":"ElementaryTypeName","src":"2224:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4010,"mutability":"mutable","name":"tokenDecimalDiffs","nameLocation":"2272:17:31","nodeType":"VariableDeclaration","scope":4021,"src":"2265:24:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":4009,"name":"uint40","nodeType":"ElementaryTypeName","src":"2265:6:31","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":4012,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"2302:18:31","nodeType":"VariableDeclaration","scope":4021,"src":"2295:25:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4011,"name":"uint32","nodeType":"ElementaryTypeName","src":"2295:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":4014,"mutability":"mutable","name":"isPoolRegistered","nameLocation":"2331:16:31","nodeType":"VariableDeclaration","scope":4021,"src":"2326:21:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4013,"name":"bool","nodeType":"ElementaryTypeName","src":"2326:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4016,"mutability":"mutable","name":"isPoolInitialized","nameLocation":"2358:17:31","nodeType":"VariableDeclaration","scope":4021,"src":"2353:22:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4015,"name":"bool","nodeType":"ElementaryTypeName","src":"2353:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4018,"mutability":"mutable","name":"isPoolPaused","nameLocation":"2386:12:31","nodeType":"VariableDeclaration","scope":4021,"src":"2381:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4017,"name":"bool","nodeType":"ElementaryTypeName","src":"2381:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4020,"mutability":"mutable","name":"isPoolInRecoveryMode","nameLocation":"2409:20:31","nodeType":"VariableDeclaration","scope":4021,"src":"2404:25:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4019,"name":"bool","nodeType":"ElementaryTypeName","src":"2404:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolConfig","nameLocation":"2085:10:31","nodeType":"StructDefinition","scope":4288,"src":"2078:354:31","visibility":"public"},{"canonicalName":"HookFlags","documentation":{"id":4022,"nodeType":"StructuredDocumentation","src":"2434:352:31","text":" @notice The flag portion of the `HooksConfig`.\n @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n flags to true will cause the Vault to call the corresponding hook during operations."},"id":4043,"members":[{"constant":false,"id":4024,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"2815:25:31","nodeType":"VariableDeclaration","scope":4043,"src":"2810:30:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4023,"name":"bool","nodeType":"ElementaryTypeName","src":"2810:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4026,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"2851:26:31","nodeType":"VariableDeclaration","scope":4043,"src":"2846:31:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4025,"name":"bool","nodeType":"ElementaryTypeName","src":"2846:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4028,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"2888:25:31","nodeType":"VariableDeclaration","scope":4043,"src":"2883:30:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4027,"name":"bool","nodeType":"ElementaryTypeName","src":"2883:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4030,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"2924:31:31","nodeType":"VariableDeclaration","scope":4043,"src":"2919:36:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4029,"name":"bool","nodeType":"ElementaryTypeName","src":"2919:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4032,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"2966:20:31","nodeType":"VariableDeclaration","scope":4043,"src":"2961:25:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4031,"name":"bool","nodeType":"ElementaryTypeName","src":"2961:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4034,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"2997:19:31","nodeType":"VariableDeclaration","scope":4043,"src":"2992:24:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4033,"name":"bool","nodeType":"ElementaryTypeName","src":"2992:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4036,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3027:28:31","nodeType":"VariableDeclaration","scope":4043,"src":"3022:33:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4035,"name":"bool","nodeType":"ElementaryTypeName","src":"3022:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4038,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3066:27:31","nodeType":"VariableDeclaration","scope":4043,"src":"3061:32:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4037,"name":"bool","nodeType":"ElementaryTypeName","src":"3061:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4040,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3104:31:31","nodeType":"VariableDeclaration","scope":4043,"src":"3099:36:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4039,"name":"bool","nodeType":"ElementaryTypeName","src":"3099:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4042,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3146:30:31","nodeType":"VariableDeclaration","scope":4043,"src":"3141:35:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4041,"name":"bool","nodeType":"ElementaryTypeName","src":"3141:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"HookFlags","nameLocation":"2794:9:31","nodeType":"StructDefinition","scope":4288,"src":"2787:392:31","visibility":"public"},{"canonicalName":"HooksConfig","documentation":{"id":4044,"nodeType":"StructuredDocumentation","src":"3181:101:31","text":"@notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address)."},"id":4067,"members":[{"constant":false,"id":4046,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"3312:25:31","nodeType":"VariableDeclaration","scope":4067,"src":"3307:30:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4045,"name":"bool","nodeType":"ElementaryTypeName","src":"3307:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4048,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"3348:26:31","nodeType":"VariableDeclaration","scope":4067,"src":"3343:31:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4047,"name":"bool","nodeType":"ElementaryTypeName","src":"3343:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4050,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"3385:25:31","nodeType":"VariableDeclaration","scope":4067,"src":"3380:30:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4049,"name":"bool","nodeType":"ElementaryTypeName","src":"3380:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4052,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"3421:31:31","nodeType":"VariableDeclaration","scope":4067,"src":"3416:36:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4051,"name":"bool","nodeType":"ElementaryTypeName","src":"3416:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4054,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"3463:20:31","nodeType":"VariableDeclaration","scope":4067,"src":"3458:25:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4053,"name":"bool","nodeType":"ElementaryTypeName","src":"3458:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4056,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"3494:19:31","nodeType":"VariableDeclaration","scope":4067,"src":"3489:24:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4055,"name":"bool","nodeType":"ElementaryTypeName","src":"3489:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4058,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3524:28:31","nodeType":"VariableDeclaration","scope":4067,"src":"3519:33:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4057,"name":"bool","nodeType":"ElementaryTypeName","src":"3519:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4060,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3563:27:31","nodeType":"VariableDeclaration","scope":4067,"src":"3558:32:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4059,"name":"bool","nodeType":"ElementaryTypeName","src":"3558:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4062,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3601:31:31","nodeType":"VariableDeclaration","scope":4067,"src":"3596:36:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4061,"name":"bool","nodeType":"ElementaryTypeName","src":"3596:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4064,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3643:30:31","nodeType":"VariableDeclaration","scope":4067,"src":"3638:35:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4063,"name":"bool","nodeType":"ElementaryTypeName","src":"3638:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4066,"mutability":"mutable","name":"hooksContract","nameLocation":"3687:13:31","nodeType":"VariableDeclaration","scope":4067,"src":"3679:21:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4065,"name":"address","nodeType":"ElementaryTypeName","src":"3679:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"HooksConfig","nameLocation":"3289:11:31","nodeType":"StructDefinition","scope":4288,"src":"3282:421:31","visibility":"public"},{"canonicalName":"SwapState","documentation":{"id":4068,"nodeType":"StructuredDocumentation","src":"3705:364:31","text":" @notice Represents temporary state used during a swap operation.\n @param indexIn The zero-based index of tokenIn\n @param indexOut The zero-based index of tokenOut\n @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n @param swapFeePercentage The swap fee to be applied (might be static or dynamic)"},"id":4077,"members":[{"constant":false,"id":4070,"mutability":"mutable","name":"indexIn","nameLocation":"4101:7:31","nodeType":"VariableDeclaration","scope":4077,"src":"4093:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4069,"name":"uint256","nodeType":"ElementaryTypeName","src":"4093:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4072,"mutability":"mutable","name":"indexOut","nameLocation":"4122:8:31","nodeType":"VariableDeclaration","scope":4077,"src":"4114:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4071,"name":"uint256","nodeType":"ElementaryTypeName","src":"4114:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4074,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"4144:19:31","nodeType":"VariableDeclaration","scope":4077,"src":"4136:27:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4073,"name":"uint256","nodeType":"ElementaryTypeName","src":"4136:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4076,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"4177:17:31","nodeType":"VariableDeclaration","scope":4077,"src":"4169:25:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4075,"name":"uint256","nodeType":"ElementaryTypeName","src":"4169:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapState","nameLocation":"4077:9:31","nodeType":"StructDefinition","scope":4288,"src":"4070:127:31","visibility":"public"},{"canonicalName":"VaultState","documentation":{"id":4078,"nodeType":"StructuredDocumentation","src":"4199:381:31","text":" @notice Represents the Vault's configuration.\n @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled"},"id":4085,"members":[{"constant":false,"id":4080,"mutability":"mutable","name":"isQueryDisabled","nameLocation":"4610:15:31","nodeType":"VariableDeclaration","scope":4085,"src":"4605:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4079,"name":"bool","nodeType":"ElementaryTypeName","src":"4605:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4082,"mutability":"mutable","name":"isVaultPaused","nameLocation":"4636:13:31","nodeType":"VariableDeclaration","scope":4085,"src":"4631:18:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4081,"name":"bool","nodeType":"ElementaryTypeName","src":"4631:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4084,"mutability":"mutable","name":"areBuffersPaused","nameLocation":"4660:16:31","nodeType":"VariableDeclaration","scope":4085,"src":"4655:21:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4083,"name":"bool","nodeType":"ElementaryTypeName","src":"4655:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"VaultState","nameLocation":"4588:10:31","nodeType":"StructDefinition","scope":4288,"src":"4581:98:31","visibility":"public"},{"canonicalName":"PoolRoleAccounts","documentation":{"id":4086,"nodeType":"StructuredDocumentation","src":"4681:461:31","text":" @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)"},"id":4093,"members":[{"constant":false,"id":4088,"mutability":"mutable","name":"pauseManager","nameLocation":"5181:12:31","nodeType":"VariableDeclaration","scope":4093,"src":"5173:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4087,"name":"address","nodeType":"ElementaryTypeName","src":"5173:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4090,"mutability":"mutable","name":"swapFeeManager","nameLocation":"5207:14:31","nodeType":"VariableDeclaration","scope":4093,"src":"5199:22:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4089,"name":"address","nodeType":"ElementaryTypeName","src":"5199:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4092,"mutability":"mutable","name":"poolCreator","nameLocation":"5235:11:31","nodeType":"VariableDeclaration","scope":4093,"src":"5227:19:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4091,"name":"address","nodeType":"ElementaryTypeName","src":"5227:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"PoolRoleAccounts","nameLocation":"5150:16:31","nodeType":"StructDefinition","scope":4288,"src":"5143:106:31","visibility":"public"},{"canonicalName":"TokenType","documentation":{"id":4094,"nodeType":"StructuredDocumentation","src":"9245:1024:31","text":" @notice Token types supported by the Vault.\n @dev In general, pools may contain any combination of these tokens.\n STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n yield fees are charged elsewhere).\n NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard."},"id":4097,"members":[{"id":4095,"name":"STANDARD","nameLocation":"10291:8:31","nodeType":"EnumValue","src":"10291:8:31"},{"id":4096,"name":"WITH_RATE","nameLocation":"10305:9:31","nodeType":"EnumValue","src":"10305:9:31"}],"name":"TokenType","nameLocation":"10275:9:31","nodeType":"EnumDefinition","src":"10270:46:31"},{"canonicalName":"TokenConfig","documentation":{"id":4098,"nodeType":"StructuredDocumentation","src":"10318:915:31","text":" @notice Encapsulate the data required for the Vault to support a token of the given type.\n @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n need a rate provider, and may or may not be yield-bearing.\n At registration time, it is useful to include the token address along with the token parameters in the structure\n passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n @param token The token address\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":4110,"members":[{"constant":false,"id":4101,"mutability":"mutable","name":"token","nameLocation":"11266:5:31","nodeType":"VariableDeclaration","scope":4110,"src":"11259:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":4100,"nodeType":"UserDefinedTypeName","pathNode":{"id":4099,"name":"IERC20","nameLocations":["11259:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"11259:6:31"},"referencedDeclaration":10558,"src":"11259:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4104,"mutability":"mutable","name":"tokenType","nameLocation":"11287:9:31","nodeType":"VariableDeclaration","scope":4110,"src":"11277:19:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4097","typeString":"enum TokenType"},"typeName":{"id":4103,"nodeType":"UserDefinedTypeName","pathNode":{"id":4102,"name":"TokenType","nameLocations":["11277:9:31"],"nodeType":"IdentifierPath","referencedDeclaration":4097,"src":"11277:9:31"},"referencedDeclaration":4097,"src":"11277:9:31","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4097","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":4107,"mutability":"mutable","name":"rateProvider","nameLocation":"11316:12:31","nodeType":"VariableDeclaration","scope":4110,"src":"11302:26:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"},"typeName":{"id":4106,"nodeType":"UserDefinedTypeName","pathNode":{"id":4105,"name":"IRateProvider","nameLocations":["11302:13:31"],"nodeType":"IdentifierPath","referencedDeclaration":24,"src":"11302:13:31"},"referencedDeclaration":24,"src":"11302:13:31","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":4109,"mutability":"mutable","name":"paysYieldFees","nameLocation":"11339:13:31","nodeType":"VariableDeclaration","scope":4110,"src":"11334:18:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4108,"name":"bool","nodeType":"ElementaryTypeName","src":"11334:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenConfig","nameLocation":"11241:11:31","nodeType":"StructDefinition","scope":4288,"src":"11234:121:31","visibility":"public"},{"canonicalName":"TokenInfo","documentation":{"id":4111,"nodeType":"StructuredDocumentation","src":"11357:592:31","text":" @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":4120,"members":[{"constant":false,"id":4114,"mutability":"mutable","name":"tokenType","nameLocation":"11983:9:31","nodeType":"VariableDeclaration","scope":4120,"src":"11973:19:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4097","typeString":"enum TokenType"},"typeName":{"id":4113,"nodeType":"UserDefinedTypeName","pathNode":{"id":4112,"name":"TokenType","nameLocations":["11973:9:31"],"nodeType":"IdentifierPath","referencedDeclaration":4097,"src":"11973:9:31"},"referencedDeclaration":4097,"src":"11973:9:31","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4097","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":4117,"mutability":"mutable","name":"rateProvider","nameLocation":"12012:12:31","nodeType":"VariableDeclaration","scope":4120,"src":"11998:26:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"},"typeName":{"id":4116,"nodeType":"UserDefinedTypeName","pathNode":{"id":4115,"name":"IRateProvider","nameLocations":["11998:13:31"],"nodeType":"IdentifierPath","referencedDeclaration":24,"src":"11998:13:31"},"referencedDeclaration":24,"src":"11998:13:31","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":4119,"mutability":"mutable","name":"paysYieldFees","nameLocation":"12035:13:31","nodeType":"VariableDeclaration","scope":4120,"src":"12030:18:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4118,"name":"bool","nodeType":"ElementaryTypeName","src":"12030:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenInfo","nameLocation":"11957:9:31","nodeType":"StructDefinition","scope":4288,"src":"11950:101:31","visibility":"public"},{"canonicalName":"PoolData","documentation":{"id":4121,"nodeType":"StructuredDocumentation","src":"12053:761:31","text":" @notice Data structure used to represent the current pool state in memory\n @param poolConfigBits Custom type to store the entire configuration of the pool.\n @param tokens Pool tokens, sorted in token registration order\n @param tokenInfo Configuration data for each token, sorted in token registration order\n @param balancesRaw Token balances in native decimals\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. It is 1e18 (FP 1) for 18-decimal tokens"},"id":4145,"members":[{"constant":false,"id":4124,"mutability":"mutable","name":"poolConfigBits","nameLocation":"12852:14:31","nodeType":"VariableDeclaration","scope":4145,"src":"12837:29:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$3998","typeString":"PoolConfigBits"},"typeName":{"id":4123,"nodeType":"UserDefinedTypeName","pathNode":{"id":4122,"name":"PoolConfigBits","nameLocations":["12837:14:31"],"nodeType":"IdentifierPath","referencedDeclaration":3998,"src":"12837:14:31"},"referencedDeclaration":3998,"src":"12837:14:31","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$3998","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":4128,"mutability":"mutable","name":"tokens","nameLocation":"12881:6:31","nodeType":"VariableDeclaration","scope":4145,"src":"12872:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4126,"nodeType":"UserDefinedTypeName","pathNode":{"id":4125,"name":"IERC20","nameLocations":["12872:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"12872:6:31"},"referencedDeclaration":10558,"src":"12872:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":4127,"nodeType":"ArrayTypeName","src":"12872:8:31","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":4132,"mutability":"mutable","name":"tokenInfo","nameLocation":"12905:9:31","nodeType":"VariableDeclaration","scope":4145,"src":"12893:21:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4120_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":4130,"nodeType":"UserDefinedTypeName","pathNode":{"id":4129,"name":"TokenInfo","nameLocations":["12893:9:31"],"nodeType":"IdentifierPath","referencedDeclaration":4120,"src":"12893:9:31"},"referencedDeclaration":4120,"src":"12893:9:31","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4120_storage_ptr","typeString":"struct TokenInfo"}},"id":4131,"nodeType":"ArrayTypeName","src":"12893:11:31","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4120_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":4135,"mutability":"mutable","name":"balancesRaw","nameLocation":"12930:11:31","nodeType":"VariableDeclaration","scope":4145,"src":"12920:21:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4133,"name":"uint256","nodeType":"ElementaryTypeName","src":"12920:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4134,"nodeType":"ArrayTypeName","src":"12920:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4138,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"12957:20:31","nodeType":"VariableDeclaration","scope":4145,"src":"12947:30:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4136,"name":"uint256","nodeType":"ElementaryTypeName","src":"12947:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4137,"nodeType":"ArrayTypeName","src":"12947:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4141,"mutability":"mutable","name":"tokenRates","nameLocation":"12993:10:31","nodeType":"VariableDeclaration","scope":4145,"src":"12983:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4139,"name":"uint256","nodeType":"ElementaryTypeName","src":"12983:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4140,"nodeType":"ArrayTypeName","src":"12983:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4144,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"13019:21:31","nodeType":"VariableDeclaration","scope":4145,"src":"13009:31:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4142,"name":"uint256","nodeType":"ElementaryTypeName","src":"13009:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4143,"nodeType":"ArrayTypeName","src":"13009:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"PoolData","nameLocation":"12822:8:31","nodeType":"StructDefinition","scope":4288,"src":"12815:228:31","visibility":"public"},{"canonicalName":"Rounding","id":4148,"members":[{"id":4146,"name":"ROUND_UP","nameLocation":"13065:8:31","nodeType":"EnumValue","src":"13065:8:31"},{"id":4147,"name":"ROUND_DOWN","nameLocation":"13079:10:31","nodeType":"EnumValue","src":"13079:10:31"}],"name":"Rounding","nameLocation":"13050:8:31","nodeType":"EnumDefinition","src":"13045:46:31"},{"canonicalName":"SwapKind","id":4151,"members":[{"id":4149,"name":"EXACT_IN","nameLocation":"13318:8:31","nodeType":"EnumValue","src":"13318:8:31"},{"id":4150,"name":"EXACT_OUT","nameLocation":"13332:9:31","nodeType":"EnumValue","src":"13332:9:31"}],"name":"SwapKind","nameLocation":"13303:8:31","nodeType":"EnumDefinition","src":"13298:45:31"},{"canonicalName":"VaultSwapParams","documentation":{"id":4152,"nodeType":"StructuredDocumentation","src":"14089:558:31","text":" @notice Data passed into primary Vault `swap` operations.\n @param kind Type of swap (Exact In or Exact Out)\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n @param userData Additional (optional) user data"},"id":4170,"members":[{"constant":false,"id":4155,"mutability":"mutable","name":"kind","nameLocation":"14686:4:31","nodeType":"VariableDeclaration","scope":4170,"src":"14677:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4151","typeString":"enum SwapKind"},"typeName":{"id":4154,"nodeType":"UserDefinedTypeName","pathNode":{"id":4153,"name":"SwapKind","nameLocations":["14677:8:31"],"nodeType":"IdentifierPath","referencedDeclaration":4151,"src":"14677:8:31"},"referencedDeclaration":4151,"src":"14677:8:31","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4151","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":4157,"mutability":"mutable","name":"pool","nameLocation":"14704:4:31","nodeType":"VariableDeclaration","scope":4170,"src":"14696:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4156,"name":"address","nodeType":"ElementaryTypeName","src":"14696:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4160,"mutability":"mutable","name":"tokenIn","nameLocation":"14721:7:31","nodeType":"VariableDeclaration","scope":4170,"src":"14714:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":4159,"nodeType":"UserDefinedTypeName","pathNode":{"id":4158,"name":"IERC20","nameLocations":["14714:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"14714:6:31"},"referencedDeclaration":10558,"src":"14714:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4163,"mutability":"mutable","name":"tokenOut","nameLocation":"14741:8:31","nodeType":"VariableDeclaration","scope":4170,"src":"14734:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":4162,"nodeType":"UserDefinedTypeName","pathNode":{"id":4161,"name":"IERC20","nameLocations":["14734:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"14734:6:31"},"referencedDeclaration":10558,"src":"14734:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4165,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"14763:14:31","nodeType":"VariableDeclaration","scope":4170,"src":"14755:22:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4164,"name":"uint256","nodeType":"ElementaryTypeName","src":"14755:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4167,"mutability":"mutable","name":"limitRaw","nameLocation":"14791:8:31","nodeType":"VariableDeclaration","scope":4170,"src":"14783:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4166,"name":"uint256","nodeType":"ElementaryTypeName","src":"14783:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4169,"mutability":"mutable","name":"userData","nameLocation":"14811:8:31","nodeType":"VariableDeclaration","scope":4170,"src":"14805:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4168,"name":"bytes","nodeType":"ElementaryTypeName","src":"14805:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"VaultSwapParams","nameLocation":"14655:15:31","nodeType":"StructDefinition","scope":4288,"src":"14648:174:31","visibility":"public"},{"canonicalName":"PoolSwapParams","documentation":{"id":4171,"nodeType":"StructuredDocumentation","src":"14824:530:31","text":" @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n @param kind Type of swap (exact in or exact out)\n @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n @param balancesScaled18 Current pool balances\n @param indexIn Index of tokenIn\n @param indexOut Index of tokenOut\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param userData Additional (optional) data required for the swap"},"id":4188,"members":[{"constant":false,"id":4174,"mutability":"mutable","name":"kind","nameLocation":"15392:4:31","nodeType":"VariableDeclaration","scope":4188,"src":"15383:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4151","typeString":"enum SwapKind"},"typeName":{"id":4173,"nodeType":"UserDefinedTypeName","pathNode":{"id":4172,"name":"SwapKind","nameLocations":["15383:8:31"],"nodeType":"IdentifierPath","referencedDeclaration":4151,"src":"15383:8:31"},"referencedDeclaration":4151,"src":"15383:8:31","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4151","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":4176,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"15410:19:31","nodeType":"VariableDeclaration","scope":4188,"src":"15402:27:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4175,"name":"uint256","nodeType":"ElementaryTypeName","src":"15402:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4179,"mutability":"mutable","name":"balancesScaled18","nameLocation":"15445:16:31","nodeType":"VariableDeclaration","scope":4188,"src":"15435:26:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4177,"name":"uint256","nodeType":"ElementaryTypeName","src":"15435:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4178,"nodeType":"ArrayTypeName","src":"15435:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4181,"mutability":"mutable","name":"indexIn","nameLocation":"15475:7:31","nodeType":"VariableDeclaration","scope":4188,"src":"15467:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4180,"name":"uint256","nodeType":"ElementaryTypeName","src":"15467:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4183,"mutability":"mutable","name":"indexOut","nameLocation":"15496:8:31","nodeType":"VariableDeclaration","scope":4188,"src":"15488:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4182,"name":"uint256","nodeType":"ElementaryTypeName","src":"15488:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4185,"mutability":"mutable","name":"router","nameLocation":"15518:6:31","nodeType":"VariableDeclaration","scope":4188,"src":"15510:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4184,"name":"address","nodeType":"ElementaryTypeName","src":"15510:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4187,"mutability":"mutable","name":"userData","nameLocation":"15536:8:31","nodeType":"VariableDeclaration","scope":4188,"src":"15530:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4186,"name":"bytes","nodeType":"ElementaryTypeName","src":"15530:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"PoolSwapParams","nameLocation":"15362:14:31","nodeType":"StructDefinition","scope":4288,"src":"15355:192:31","visibility":"public"},{"canonicalName":"AfterSwapParams","documentation":{"id":4189,"nodeType":"StructuredDocumentation","src":"15549:813:31","text":" @notice Data for the hook after a swap operation.\n @param kind Type of swap (exact in or exact out)\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param amountInScaled18 Amount of tokenIn (entering the Vault)\n @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n @param amountCalculatedScaled18 Token amount calculated by the swap\n @param amountCalculatedRaw Token amount calculated by the swap\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param pool Pool address\n @param userData Additional (optional) data required for the swap"},"id":4217,"members":[{"constant":false,"id":4192,"mutability":"mutable","name":"kind","nameLocation":"16401:4:31","nodeType":"VariableDeclaration","scope":4217,"src":"16392:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4151","typeString":"enum SwapKind"},"typeName":{"id":4191,"nodeType":"UserDefinedTypeName","pathNode":{"id":4190,"name":"SwapKind","nameLocations":["16392:8:31"],"nodeType":"IdentifierPath","referencedDeclaration":4151,"src":"16392:8:31"},"referencedDeclaration":4151,"src":"16392:8:31","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4151","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":4195,"mutability":"mutable","name":"tokenIn","nameLocation":"16418:7:31","nodeType":"VariableDeclaration","scope":4217,"src":"16411:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":4194,"nodeType":"UserDefinedTypeName","pathNode":{"id":4193,"name":"IERC20","nameLocations":["16411:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"16411:6:31"},"referencedDeclaration":10558,"src":"16411:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4198,"mutability":"mutable","name":"tokenOut","nameLocation":"16438:8:31","nodeType":"VariableDeclaration","scope":4217,"src":"16431:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":4197,"nodeType":"UserDefinedTypeName","pathNode":{"id":4196,"name":"IERC20","nameLocations":["16431:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"16431:6:31"},"referencedDeclaration":10558,"src":"16431:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4200,"mutability":"mutable","name":"amountInScaled18","nameLocation":"16460:16:31","nodeType":"VariableDeclaration","scope":4217,"src":"16452:24:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4199,"name":"uint256","nodeType":"ElementaryTypeName","src":"16452:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4202,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"16490:17:31","nodeType":"VariableDeclaration","scope":4217,"src":"16482:25:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4201,"name":"uint256","nodeType":"ElementaryTypeName","src":"16482:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4204,"mutability":"mutable","name":"tokenInBalanceScaled18","nameLocation":"16521:22:31","nodeType":"VariableDeclaration","scope":4217,"src":"16513:30:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4203,"name":"uint256","nodeType":"ElementaryTypeName","src":"16513:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4206,"mutability":"mutable","name":"tokenOutBalanceScaled18","nameLocation":"16557:23:31","nodeType":"VariableDeclaration","scope":4217,"src":"16549:31:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4205,"name":"uint256","nodeType":"ElementaryTypeName","src":"16549:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4208,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"16594:24:31","nodeType":"VariableDeclaration","scope":4217,"src":"16586:32:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4207,"name":"uint256","nodeType":"ElementaryTypeName","src":"16586:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4210,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"16632:19:31","nodeType":"VariableDeclaration","scope":4217,"src":"16624:27:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4209,"name":"uint256","nodeType":"ElementaryTypeName","src":"16624:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4212,"mutability":"mutable","name":"router","nameLocation":"16665:6:31","nodeType":"VariableDeclaration","scope":4217,"src":"16657:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4211,"name":"address","nodeType":"ElementaryTypeName","src":"16657:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4214,"mutability":"mutable","name":"pool","nameLocation":"16685:4:31","nodeType":"VariableDeclaration","scope":4217,"src":"16677:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4213,"name":"address","nodeType":"ElementaryTypeName","src":"16677:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4216,"mutability":"mutable","name":"userData","nameLocation":"16701:8:31","nodeType":"VariableDeclaration","scope":4217,"src":"16695:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4215,"name":"bytes","nodeType":"ElementaryTypeName","src":"16695:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AfterSwapParams","nameLocation":"16370:15:31","nodeType":"StructDefinition","scope":4288,"src":"16363:349:31","visibility":"public"},{"canonicalName":"AddLiquidityKind","id":4223,"members":[{"id":4218,"name":"PROPORTIONAL","nameLocation":"16951:12:31","nodeType":"EnumValue","src":"16951:12:31"},{"id":4219,"name":"UNBALANCED","nameLocation":"16969:10:31","nodeType":"EnumValue","src":"16969:10:31"},{"id":4220,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"16985:22:31","nodeType":"EnumValue","src":"16985:22:31"},{"id":4221,"name":"DONATION","nameLocation":"17013:8:31","nodeType":"EnumValue","src":"17013:8:31"},{"id":4222,"name":"CUSTOM","nameLocation":"17027:6:31","nodeType":"EnumValue","src":"17027:6:31"}],"name":"AddLiquidityKind","nameLocation":"16928:16:31","nodeType":"EnumDefinition","src":"16923:112:31"},{"canonicalName":"AddLiquidityParams","documentation":{"id":4224,"nodeType":"StructuredDocumentation","src":"17037:320:31","text":" @notice Data for an add liquidity operation.\n @param pool Address of the pool\n @param to Address of user to mint to\n @param maxAmountsIn Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param kind Add liquidity kind\n @param userData Optional user data"},"id":4239,"members":[{"constant":false,"id":4226,"mutability":"mutable","name":"pool","nameLocation":"17398:4:31","nodeType":"VariableDeclaration","scope":4239,"src":"17390:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4225,"name":"address","nodeType":"ElementaryTypeName","src":"17390:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4228,"mutability":"mutable","name":"to","nameLocation":"17416:2:31","nodeType":"VariableDeclaration","scope":4239,"src":"17408:10:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4227,"name":"address","nodeType":"ElementaryTypeName","src":"17408:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4231,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"17434:12:31","nodeType":"VariableDeclaration","scope":4239,"src":"17424:22:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4229,"name":"uint256","nodeType":"ElementaryTypeName","src":"17424:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4230,"nodeType":"ArrayTypeName","src":"17424:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4233,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"17460:15:31","nodeType":"VariableDeclaration","scope":4239,"src":"17452:23:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4232,"name":"uint256","nodeType":"ElementaryTypeName","src":"17452:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4236,"mutability":"mutable","name":"kind","nameLocation":"17498:4:31","nodeType":"VariableDeclaration","scope":4239,"src":"17481:21:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4223","typeString":"enum AddLiquidityKind"},"typeName":{"id":4235,"nodeType":"UserDefinedTypeName","pathNode":{"id":4234,"name":"AddLiquidityKind","nameLocations":["17481:16:31"],"nodeType":"IdentifierPath","referencedDeclaration":4223,"src":"17481:16:31"},"referencedDeclaration":4223,"src":"17481:16:31","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4223","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":4238,"mutability":"mutable","name":"userData","nameLocation":"17514:8:31","nodeType":"VariableDeclaration","scope":4239,"src":"17508:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4237,"name":"bytes","nodeType":"ElementaryTypeName","src":"17508:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AddLiquidityParams","nameLocation":"17365:18:31","nodeType":"StructDefinition","scope":4288,"src":"17358:167:31","visibility":"public"},{"canonicalName":"RemoveLiquidityKind","id":4244,"members":[{"id":4240,"name":"PROPORTIONAL","nameLocation":"17770:12:31","nodeType":"EnumValue","src":"17770:12:31"},{"id":4241,"name":"SINGLE_TOKEN_EXACT_IN","nameLocation":"17788:21:31","nodeType":"EnumValue","src":"17788:21:31"},{"id":4242,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"17815:22:31","nodeType":"EnumValue","src":"17815:22:31"},{"id":4243,"name":"CUSTOM","nameLocation":"17843:6:31","nodeType":"EnumValue","src":"17843:6:31"}],"name":"RemoveLiquidityKind","nameLocation":"17744:19:31","nodeType":"EnumDefinition","src":"17739:112:31"},{"canonicalName":"RemoveLiquidityParams","documentation":{"id":4245,"nodeType":"StructuredDocumentation","src":"17853:330:31","text":" @notice Data for an remove liquidity operation.\n @param pool Address of the pool\n @param from Address of user to burn from\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOut Minimum amounts of output tokens\n @param kind Remove liquidity kind\n @param userData Optional user data"},"id":4260,"members":[{"constant":false,"id":4247,"mutability":"mutable","name":"pool","nameLocation":"18227:4:31","nodeType":"VariableDeclaration","scope":4260,"src":"18219:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4246,"name":"address","nodeType":"ElementaryTypeName","src":"18219:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4249,"mutability":"mutable","name":"from","nameLocation":"18245:4:31","nodeType":"VariableDeclaration","scope":4260,"src":"18237:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4248,"name":"address","nodeType":"ElementaryTypeName","src":"18237:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4251,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"18263:14:31","nodeType":"VariableDeclaration","scope":4260,"src":"18255:22:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4250,"name":"uint256","nodeType":"ElementaryTypeName","src":"18255:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4254,"mutability":"mutable","name":"minAmountsOut","nameLocation":"18293:13:31","nodeType":"VariableDeclaration","scope":4260,"src":"18283:23:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4252,"name":"uint256","nodeType":"ElementaryTypeName","src":"18283:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4253,"nodeType":"ArrayTypeName","src":"18283:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4257,"mutability":"mutable","name":"kind","nameLocation":"18332:4:31","nodeType":"VariableDeclaration","scope":4260,"src":"18312:24:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4244","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":4256,"nodeType":"UserDefinedTypeName","pathNode":{"id":4255,"name":"RemoveLiquidityKind","nameLocations":["18312:19:31"],"nodeType":"IdentifierPath","referencedDeclaration":4244,"src":"18312:19:31"},"referencedDeclaration":4244,"src":"18312:19:31","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4244","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":4259,"mutability":"mutable","name":"userData","nameLocation":"18348:8:31","nodeType":"VariableDeclaration","scope":4260,"src":"18342:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4258,"name":"bytes","nodeType":"ElementaryTypeName","src":"18342:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"RemoveLiquidityParams","nameLocation":"18191:21:31","nodeType":"StructDefinition","scope":4288,"src":"18184:175:31","visibility":"public"},{"canonicalName":"WrappingDirection","id":4263,"members":[{"id":4261,"name":"WRAP","nameLocation":"18602:4:31","nodeType":"EnumValue","src":"18602:4:31"},{"id":4262,"name":"UNWRAP","nameLocation":"18612:6:31","nodeType":"EnumValue","src":"18612:6:31"}],"name":"WrappingDirection","nameLocation":"18578:17:31","nodeType":"EnumDefinition","src":"18573:47:31"},{"canonicalName":"BufferWrapOrUnwrapParams","documentation":{"id":4264,"nodeType":"StructuredDocumentation","src":"18622:499:31","text":" @notice Data for a wrap/unwrap operation.\n @param kind Type of swap (Exact In or Exact Out)\n @param direction Direction of the wrapping operation (Wrap or Unwrap)\n @param wrappedToken Wrapped token, compatible with interface ERC4626\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n direction)"},"id":4278,"members":[{"constant":false,"id":4267,"mutability":"mutable","name":"kind","nameLocation":"19169:4:31","nodeType":"VariableDeclaration","scope":4278,"src":"19160:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4151","typeString":"enum SwapKind"},"typeName":{"id":4266,"nodeType":"UserDefinedTypeName","pathNode":{"id":4265,"name":"SwapKind","nameLocations":["19160:8:31"],"nodeType":"IdentifierPath","referencedDeclaration":4151,"src":"19160:8:31"},"referencedDeclaration":4151,"src":"19160:8:31","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4151","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":4270,"mutability":"mutable","name":"direction","nameLocation":"19197:9:31","nodeType":"VariableDeclaration","scope":4278,"src":"19179:27:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$4263","typeString":"enum WrappingDirection"},"typeName":{"id":4269,"nodeType":"UserDefinedTypeName","pathNode":{"id":4268,"name":"WrappingDirection","nameLocations":["19179:17:31"],"nodeType":"IdentifierPath","referencedDeclaration":4263,"src":"19179:17:31"},"referencedDeclaration":4263,"src":"19179:17:31","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$4263","typeString":"enum WrappingDirection"}},"visibility":"internal"},{"constant":false,"id":4273,"mutability":"mutable","name":"wrappedToken","nameLocation":"19221:12:31","nodeType":"VariableDeclaration","scope":4278,"src":"19212:21:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":4272,"nodeType":"UserDefinedTypeName","pathNode":{"id":4271,"name":"IERC4626","nameLocations":["19212:8:31"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"19212:8:31"},"referencedDeclaration":9828,"src":"19212:8:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":4275,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"19247:14:31","nodeType":"VariableDeclaration","scope":4278,"src":"19239:22:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4274,"name":"uint256","nodeType":"ElementaryTypeName","src":"19239:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4277,"mutability":"mutable","name":"limitRaw","nameLocation":"19275:8:31","nodeType":"VariableDeclaration","scope":4278,"src":"19267:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4276,"name":"uint256","nodeType":"ElementaryTypeName","src":"19267:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"BufferWrapOrUnwrapParams","nameLocation":"19129:24:31","nodeType":"StructDefinition","scope":4288,"src":"19122:164:31","visibility":"public"},{"constant":true,"id":4281,"mutability":"constant","name":"FEE_BITLENGTH","nameLocation":"19611:13:31","nodeType":"VariableDeclaration","scope":4288,"src":"19594:35:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4279,"name":"uint256","nodeType":"ElementaryTypeName","src":"19594:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3234","id":4280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19627:2:31","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},"visibility":"internal"},{"constant":true,"id":4284,"mutability":"constant","name":"FEE_SCALING_FACTOR","nameLocation":"19648:18:31","nodeType":"VariableDeclaration","scope":4288,"src":"19631:42:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4282,"name":"uint256","nodeType":"ElementaryTypeName","src":"19631:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653131","id":4283,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19669:4:31","typeDescriptions":{"typeIdentifier":"t_rational_100000000000_by_1","typeString":"int_const 100000000000"},"value":"1e11"},"visibility":"internal"},{"constant":true,"id":4287,"mutability":"constant","name":"MAX_FEE_PERCENTAGE","nameLocation":"19896:18:31","nodeType":"VariableDeclaration","scope":4288,"src":"19879:48:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4285,"name":"uint256","nodeType":"ElementaryTypeName","src":"19879:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e39393939653136","id":4286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19917:10:31","typeDescriptions":{"typeIdentifier":"t_rational_999999000000000000_by_1","typeString":"int_const 999999000000000000"},"value":"99.9999e16"},"visibility":"internal"}],"src":"46:19895:31"},"id":31},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","exportedSymbols":{"Authentication":[4367],"IAuthentication":[14]},"id":4368,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4289,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:32"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":4291,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4368,"sourceUnit":15,"src":"72:116:32","symbolAliases":[{"foreign":{"id":4290,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"81:15:32","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":4293,"name":"IAuthentication","nameLocations":["625:15:32"],"nodeType":"IdentifierPath","referencedDeclaration":14,"src":"625:15:32"},"id":4294,"nodeType":"InheritanceSpecifier","src":"625:15:32"}],"canonicalName":"Authentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":4292,"nodeType":"StructuredDocumentation","src":"190:398:32","text":" @notice Building block for performing access control on external functions.\n @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n applied to external functions to make them only callable by authorized accounts.\n Derived contracts must implement the `_canPerform` function, which holds the actual access control logic."},"fullyImplemented":false,"id":4367,"linearizedBaseContracts":[4367,14],"name":"Authentication","nameLocation":"607:14:32","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":4296,"mutability":"immutable","name":"_actionIdDisambiguator","nameLocation":"673:22:32","nodeType":"VariableDeclaration","scope":4367,"src":"647:48:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4295,"name":"bytes32","nodeType":"ElementaryTypeName","src":"647:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"body":{"id":4306,"nodeType":"Block","src":"1337:63:32","statements":[{"expression":{"id":4304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4302,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4296,"src":"1347:22:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4303,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4299,"src":"1372:21:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1347:46:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4305,"nodeType":"ExpressionStatement","src":"1347:46:32"}]},"documentation":{"id":4297,"nodeType":"StructuredDocumentation","src":"702:587:32","text":" @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n multi-contract systems.\n There are two main uses for it:\n - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n unique. The contract's own address is a good option.\n - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n shared by the entire family (and no other contract) should be used instead."},"id":4307,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4299,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"1314:21:32","nodeType":"VariableDeclaration","scope":4307,"src":"1306:29:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4298,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1306:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1305:31:32"},"returnParameters":{"id":4301,"nodeType":"ParameterList","parameters":[],"src":"1337:0:32"},"scope":4367,"src":"1294:106:32","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4314,"nodeType":"Block","src":"1549:49:32","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4310,"name":"_authenticateCaller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4338,"src":"1559:19:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":4311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1559:21:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4312,"nodeType":"ExpressionStatement","src":"1559:21:32"},{"id":4313,"nodeType":"PlaceholderStatement","src":"1590:1:32"}]},"documentation":{"id":4308,"nodeType":"StructuredDocumentation","src":"1406:114:32","text":"@dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions."},"id":4315,"name":"authenticate","nameLocation":"1534:12:32","nodeType":"ModifierDefinition","parameters":{"id":4309,"nodeType":"ParameterList","parameters":[],"src":"1546:2:32"},"src":"1525:73:32","virtual":false,"visibility":"internal"},{"body":{"id":4337,"nodeType":"Block","src":"1733:156:32","statements":[{"assignments":[4320],"declarations":[{"constant":false,"id":4320,"mutability":"mutable","name":"actionId","nameLocation":"1751:8:32","nodeType":"VariableDeclaration","scope":4337,"src":"1743:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4319,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1743:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":4325,"initialValue":{"arguments":[{"expression":{"id":4322,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1774:3:32","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1778:3:32","memberName":"sig","nodeType":"MemberAccess","src":"1774:7:32","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":4321,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4356,"src":"1762:11:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":4324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1762:20:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1743:39:32"},{"condition":{"id":4331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1797:34:32","subExpression":{"arguments":[{"id":4327,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4320,"src":"1810:8:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":4328,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1820:3:32","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":4329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1824:6:32","memberName":"sender","nodeType":"MemberAccess","src":"1820:10:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":4326,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4366,"src":"1798:11:32","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":4330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1798:33:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4336,"nodeType":"IfStatement","src":"1793:90:32","trueBody":{"id":4335,"nodeType":"Block","src":"1833:50:32","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4332,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"1854:16:32","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1854:18:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4334,"nodeType":"RevertStatement","src":"1847:25:32"}]}}]},"documentation":{"id":4316,"nodeType":"StructuredDocumentation","src":"1604:79:32","text":"@dev Reverts unless the caller is allowed to call the entry point function."},"id":4338,"implemented":true,"kind":"function","modifiers":[],"name":"_authenticateCaller","nameLocation":"1697:19:32","nodeType":"FunctionDefinition","parameters":{"id":4317,"nodeType":"ParameterList","parameters":[],"src":"1716:2:32"},"returnParameters":{"id":4318,"nodeType":"ParameterList","parameters":[],"src":"1733:0:32"},"scope":4367,"src":"1688:201:32","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[13],"body":{"id":4355,"nodeType":"Block","src":"2008:353:32","statements":[{"expression":{"arguments":[{"arguments":[{"id":4350,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4296,"src":"2320:22:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":4351,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4341,"src":"2344:8:32","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":4348,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2303:3:32","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":4349,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2307:12:32","memberName":"encodePacked","nodeType":"MemberAccess","src":"2303:16:32","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":4352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2303:50:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":4347,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2293:9:32","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":4353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2293:61:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4346,"id":4354,"nodeType":"Return","src":"2286:68:32"}]},"documentation":{"id":4339,"nodeType":"StructuredDocumentation","src":"1895:31:32","text":"@inheritdoc IAuthentication"},"functionSelector":"851c1bb3","id":4356,"implemented":true,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"1940:11:32","nodeType":"FunctionDefinition","overrides":{"id":4343,"nodeType":"OverrideSpecifier","overrides":[],"src":"1981:8:32"},"parameters":{"id":4342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4341,"mutability":"mutable","name":"selector","nameLocation":"1959:8:32","nodeType":"VariableDeclaration","scope":4356,"src":"1952:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4340,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1952:6:32","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1951:17:32"},"returnParameters":{"id":4346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4345,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4356,"src":"1999:7:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4344,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1999:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1998:9:32"},"scope":4367,"src":"1931:430:32","stateMutability":"view","virtual":false,"visibility":"public"},{"documentation":{"id":4357,"nodeType":"StructuredDocumentation","src":"2367:304:32","text":" @dev Derived contracts must implement this function to perform the actual access control logic.\n @param actionId The action identifier associated with an external function\n @param user The account performing the action\n @return success True if the action is permitted"},"id":4366,"implemented":false,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"2685:11:32","nodeType":"FunctionDefinition","parameters":{"id":4362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4359,"mutability":"mutable","name":"actionId","nameLocation":"2705:8:32","nodeType":"VariableDeclaration","scope":4366,"src":"2697:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4358,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2697:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4361,"mutability":"mutable","name":"user","nameLocation":"2723:4:32","nodeType":"VariableDeclaration","scope":4366,"src":"2715:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4360,"name":"address","nodeType":"ElementaryTypeName","src":"2715:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2696:32:32"},"returnParameters":{"id":4365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4364,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4366,"src":"2760:4:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4363,"name":"bool","nodeType":"ElementaryTypeName","src":"2760:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2759:6:32"},"scope":4367,"src":"2676:90:32","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":4368,"src":"589:2179:32","usedErrors":[5],"usedEvents":[]}],"src":"46:2723:32"},"id":32},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","exportedSymbols":{"CastingHelpers":[4399],"IERC20":[10558]},"id":4400,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4369,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:33"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":4371,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4400,"sourceUnit":10559,"src":"72:72:33","symbolAliases":[{"foreign":{"id":4370,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"81:6:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"CastingHelpers","contractDependencies":[],"contractKind":"library","documentation":{"id":4372,"nodeType":"StructuredDocumentation","src":"146:71:33","text":"@notice Library of helper functions related to typecasting arrays."},"fullyImplemented":true,"id":4399,"linearizedBaseContracts":[4399],"name":"CastingHelpers","nameLocation":"225:14:33","nodeType":"ContractDefinition","nodes":[{"body":{"id":4384,"nodeType":"Block","src":"410:140:33","statements":[{"AST":{"nativeSrc":"501:43:33","nodeType":"YulBlock","src":"501:43:33","statements":[{"nativeSrc":"515:19:33","nodeType":"YulAssignment","src":"515:19:33","value":{"name":"addresses","nativeSrc":"525:9:33","nodeType":"YulIdentifier","src":"525:9:33"},"variableNames":[{"name":"tokens","nativeSrc":"515:6:33","nodeType":"YulIdentifier","src":"515:6:33"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4376,"isOffset":false,"isSlot":false,"src":"525:9:33","valueSize":1},{"declaration":4381,"isOffset":false,"isSlot":false,"src":"515:6:33","valueSize":1}],"flags":["memory-safe"],"id":4383,"nodeType":"InlineAssembly","src":"476:68:33"}]},"documentation":{"id":4373,"nodeType":"StructuredDocumentation","src":"246:66:33","text":"@dev Returns a native array of addresses as an IERC20[] array."},"id":4385,"implemented":true,"kind":"function","modifiers":[],"name":"asIERC20","nameLocation":"326:8:33","nodeType":"FunctionDefinition","parameters":{"id":4377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4376,"mutability":"mutable","name":"addresses","nameLocation":"352:9:33","nodeType":"VariableDeclaration","scope":4385,"src":"335:26:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4374,"name":"address","nodeType":"ElementaryTypeName","src":"335:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4375,"nodeType":"ArrayTypeName","src":"335:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"334:28:33"},"returnParameters":{"id":4382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4381,"mutability":"mutable","name":"tokens","nameLocation":"402:6:33","nodeType":"VariableDeclaration","scope":4385,"src":"386:22:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4379,"nodeType":"UserDefinedTypeName","pathNode":{"id":4378,"name":"IERC20","nameLocations":["386:6:33"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"386:6:33"},"referencedDeclaration":10558,"src":"386:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":4380,"nodeType":"ArrayTypeName","src":"386:8:33","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"385:24:33"},"scope":4399,"src":"317:233:33","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4397,"nodeType":"Block","src":"712:140:33","statements":[{"AST":{"nativeSrc":"803:43:33","nodeType":"YulBlock","src":"803:43:33","statements":[{"nativeSrc":"817:19:33","nodeType":"YulAssignment","src":"817:19:33","value":{"name":"tokens","nativeSrc":"830:6:33","nodeType":"YulIdentifier","src":"830:6:33"},"variableNames":[{"name":"addresses","nativeSrc":"817:9:33","nodeType":"YulIdentifier","src":"817:9:33"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4394,"isOffset":false,"isSlot":false,"src":"817:9:33","valueSize":1},{"declaration":4390,"isOffset":false,"isSlot":false,"src":"830:6:33","valueSize":1}],"flags":["memory-safe"],"id":4396,"nodeType":"InlineAssembly","src":"778:68:33"}]},"documentation":{"id":4386,"nodeType":"StructuredDocumentation","src":"556:57:33","text":"@dev Returns an IERC20[] array as an address[] array."},"id":4398,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"627:9:33","nodeType":"FunctionDefinition","parameters":{"id":4391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4390,"mutability":"mutable","name":"tokens","nameLocation":"653:6:33","nodeType":"VariableDeclaration","scope":4398,"src":"637:22:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4388,"nodeType":"UserDefinedTypeName","pathNode":{"id":4387,"name":"IERC20","nameLocations":["637:6:33"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"637:6:33"},"referencedDeclaration":10558,"src":"637:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":4389,"nodeType":"ArrayTypeName","src":"637:8:33","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"636:24:33"},"returnParameters":{"id":4395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4394,"mutability":"mutable","name":"addresses","nameLocation":"701:9:33","nodeType":"VariableDeclaration","scope":4398,"src":"684:26:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4392,"name":"address","nodeType":"ElementaryTypeName","src":"684:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4393,"nodeType":"ArrayTypeName","src":"684:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"683:28:33"},"scope":4399,"src":"618:234:33","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4400,"src":"217:637:33","usedErrors":[],"usedEvents":[]}],"src":"46:809:33"},"id":33},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","exportedSymbols":{"CastingHelpers":[4399],"IERC20":[10558],"InputHelpers":[4700]},"id":4701,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4401,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:34"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":4403,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4701,"sourceUnit":10559,"src":"72:72:34","symbolAliases":[{"foreign":{"id":4402,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"81:6:34","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","file":"./CastingHelpers.sol","id":4405,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4701,"sourceUnit":4400,"src":"146:54:34","symbolAliases":[{"foreign":{"id":4404,"name":"CastingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4399,"src":"155:14:34","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"InputHelpers","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":4700,"linearizedBaseContracts":[4700],"name":"InputHelpers","nameLocation":"210:12:34","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4406,"nodeType":"StructuredDocumentation","src":"229:91:34","text":"@notice Arrays passed to a function and intended to be parallel have different lengths."},"errorSelector":"aaad13f7","id":4408,"name":"InputLengthMismatch","nameLocation":"331:19:34","nodeType":"ErrorDefinition","parameters":{"id":4407,"nodeType":"ParameterList","parameters":[],"src":"350:2:34"},"src":"325:28:34"},{"documentation":{"id":4409,"nodeType":"StructuredDocumentation","src":"359:332:34","text":" @notice More than one non-zero value was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n corresponding to the token being added or removed. This error results if there are multiple non-zero entries."},"errorSelector":"6b8c3be5","id":4411,"name":"MultipleNonZeroInputs","nameLocation":"702:21:34","nodeType":"ErrorDefinition","parameters":{"id":4410,"nodeType":"ParameterList","parameters":[],"src":"723:2:34"},"src":"696:30:34"},{"documentation":{"id":4412,"nodeType":"StructuredDocumentation","src":"732:298:34","text":" @notice No valid input was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n corresponding to the token being added or removed. This error results if all entries are zero."},"errorSelector":"7e46bddc","id":4414,"name":"AllZeroInputs","nameLocation":"1041:13:34","nodeType":"ErrorDefinition","parameters":{"id":4413,"nodeType":"ParameterList","parameters":[],"src":"1054:2:34"},"src":"1035:22:34"},{"documentation":{"id":4415,"nodeType":"StructuredDocumentation","src":"1063:320:34","text":" @notice The tokens supplied to an array argument were not sorted in numerical order.\n @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n predict the token order without having to query the Vault. (It is also legacy v2 behavior.)"},"errorSelector":"6e8f1947","id":4417,"name":"TokensNotSorted","nameLocation":"1394:15:34","nodeType":"ErrorDefinition","parameters":{"id":4416,"nodeType":"ParameterList","parameters":[],"src":"1409:2:34"},"src":"1388:24:34"},{"body":{"id":4432,"nodeType":"Block","src":"1486:81:34","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4424,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4419,"src":"1500:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4425,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4421,"src":"1505:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1500:6:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4431,"nodeType":"IfStatement","src":"1496:65:34","trueBody":{"id":4430,"nodeType":"Block","src":"1508:53:34","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4427,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4408,"src":"1529:19:34","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1529:21:34","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4429,"nodeType":"RevertStatement","src":"1522:28:34"}]}}]},"id":4433,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1427:22:34","nodeType":"FunctionDefinition","parameters":{"id":4422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4419,"mutability":"mutable","name":"a","nameLocation":"1458:1:34","nodeType":"VariableDeclaration","scope":4433,"src":"1450:9:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4418,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4421,"mutability":"mutable","name":"b","nameLocation":"1469:1:34","nodeType":"VariableDeclaration","scope":4433,"src":"1461:9:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4420,"name":"uint256","nodeType":"ElementaryTypeName","src":"1461:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1449:22:34"},"returnParameters":{"id":4423,"nodeType":"ParameterList","parameters":[],"src":"1486:0:34"},"scope":4700,"src":"1418:149:34","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4454,"nodeType":"Block","src":"1652:91:34","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4442,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4435,"src":"1666:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4443,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4437,"src":"1671:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1666:6:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4445,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4437,"src":"1676:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4446,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4439,"src":"1681:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1676:6:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1666:16:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4453,"nodeType":"IfStatement","src":"1662:75:34","trueBody":{"id":4452,"nodeType":"Block","src":"1684:53:34","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4449,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4408,"src":"1705:19:34","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1705:21:34","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4451,"nodeType":"RevertStatement","src":"1698:28:34"}]}}]},"id":4455,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1582:22:34","nodeType":"FunctionDefinition","parameters":{"id":4440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4435,"mutability":"mutable","name":"a","nameLocation":"1613:1:34","nodeType":"VariableDeclaration","scope":4455,"src":"1605:9:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4434,"name":"uint256","nodeType":"ElementaryTypeName","src":"1605:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4437,"mutability":"mutable","name":"b","nameLocation":"1624:1:34","nodeType":"VariableDeclaration","scope":4455,"src":"1616:9:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4436,"name":"uint256","nodeType":"ElementaryTypeName","src":"1616:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4439,"mutability":"mutable","name":"c","nameLocation":"1635:1:34","nodeType":"VariableDeclaration","scope":4455,"src":"1627:9:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4438,"name":"uint256","nodeType":"ElementaryTypeName","src":"1627:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1604:33:34"},"returnParameters":{"id":4441,"nodeType":"ParameterList","parameters":[],"src":"1652:0:34"},"scope":4700,"src":"1573:170:34","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4513,"nodeType":"Block","src":"1938:451:34","statements":[{"assignments":[4464],"declarations":[{"constant":false,"id":4464,"mutability":"mutable","name":"length","nameLocation":"1956:6:34","nodeType":"VariableDeclaration","scope":4513,"src":"1948:14:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4463,"name":"uint256","nodeType":"ElementaryTypeName","src":"1948:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4467,"initialValue":{"expression":{"id":4465,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4458,"src":"1965:12:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1978:6:34","memberName":"length","nodeType":"MemberAccess","src":"1965:19:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1948:36:34"},{"expression":{"id":4470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4468,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4461,"src":"1994:10:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4469,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4464,"src":"2007:6:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1994:19:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4471,"nodeType":"ExpressionStatement","src":"1994:19:34"},{"body":{"id":4501,"nodeType":"Block","src":"2061:211:34","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":4482,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4458,"src":"2079:12:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4484,"indexExpression":{"id":4483,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4473,"src":"2092:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2079:15:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4485,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2098:1:34","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2079:20:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4500,"nodeType":"IfStatement","src":"2075:187:34","trueBody":{"id":4499,"nodeType":"Block","src":"2101:161:34","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4487,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4461,"src":"2123:10:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":4488,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4464,"src":"2137:6:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2123:20:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4494,"nodeType":"IfStatement","src":"2119:97:34","trueBody":{"id":4493,"nodeType":"Block","src":"2145:71:34","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4490,"name":"MultipleNonZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4411,"src":"2174:21:34","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2174:23:34","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4492,"nodeType":"RevertStatement","src":"2167:30:34"}]}},{"expression":{"id":4497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4495,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4461,"src":"2233:10:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4496,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4473,"src":"2246:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2233:14:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4498,"nodeType":"ExpressionStatement","src":"2233:14:34"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4476,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4473,"src":"2044:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4477,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4464,"src":"2048:6:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2044:10:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4502,"initializationExpression":{"assignments":[4473],"declarations":[{"constant":false,"id":4473,"mutability":"mutable","name":"i","nameLocation":"2037:1:34","nodeType":"VariableDeclaration","scope":4502,"src":"2029:9:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4472,"name":"uint256","nodeType":"ElementaryTypeName","src":"2029:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4475,"initialValue":{"hexValue":"30","id":4474,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2041:1:34","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2029:13:34"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2056:3:34","subExpression":{"id":4479,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4473,"src":"2058:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4481,"nodeType":"ExpressionStatement","src":"2056:3:34"},"nodeType":"ForStatement","src":"2024:248:34"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4503,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4461,"src":"2286:10:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4504,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4464,"src":"2300:6:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2286:20:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4510,"nodeType":"IfStatement","src":"2282:73:34","trueBody":{"id":4509,"nodeType":"Block","src":"2308:47:34","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4506,"name":"AllZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4414,"src":"2329:13:34","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2329:15:34","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4508,"nodeType":"RevertStatement","src":"2322:22:34"}]}},{"expression":{"id":4511,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4461,"src":"2372:10:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4462,"id":4512,"nodeType":"Return","src":"2365:17:34"}]},"id":4514,"implemented":true,"kind":"function","modifiers":[],"name":"getSingleInputIndex","nameLocation":"1844:19:34","nodeType":"FunctionDefinition","parameters":{"id":4459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4458,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"1881:12:34","nodeType":"VariableDeclaration","scope":4514,"src":"1864:29:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4456,"name":"uint256","nodeType":"ElementaryTypeName","src":"1864:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4457,"nodeType":"ArrayTypeName","src":"1864:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1863:31:34"},"returnParameters":{"id":4462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4461,"mutability":"mutable","name":"inputIndex","nameLocation":"1926:10:34","nodeType":"VariableDeclaration","scope":4514,"src":"1918:18:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4460,"name":"uint256","nodeType":"ElementaryTypeName","src":"1918:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1917:20:34"},"scope":4700,"src":"1835:554:34","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4591,"nodeType":"Block","src":"3138:376:34","statements":[{"body":{"id":4587,"nodeType":"Block","src":"3196:288:34","statements":[{"body":{"id":4585,"nodeType":"Block","src":"3262:212:34","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"id":4562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":4554,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4519,"src":"3284:6:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4556,"indexExpression":{"id":4555,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4540,"src":"3291:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3284:9:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"id":4557,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4519,"src":"3296:6:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4561,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4558,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4540,"src":"3303:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4559,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3307:1:34","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3303:5:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3296:13:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"src":"3284:25:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4584,"nodeType":"IfStatement","src":"3280:180:34","trueBody":{"id":4583,"nodeType":"Block","src":"3311:149:34","statements":[{"expression":{"id":4581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":4563,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4519,"src":"3387:6:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4565,"indexExpression":{"id":4564,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4540,"src":"3394:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3387:9:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"baseExpression":{"id":4566,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4519,"src":"3398:6:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4570,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4567,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4540,"src":"3405:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4568,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3409:1:34","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3405:5:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3398:13:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"id":4571,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3386:26:34","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$10558_$_t_contract$_IERC20_$10558_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"baseExpression":{"id":4572,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4519,"src":"3416:6:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4576,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4573,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4540,"src":"3423:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3427:1:34","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3423:5:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3416:13:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"baseExpression":{"id":4577,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4519,"src":"3431:6:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4579,"indexExpression":{"id":4578,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4540,"src":"3438:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3431:9:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"id":4580,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3415:26:34","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$10558_$_t_contract$_IERC20_$10558_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"src":"3386:55:34","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4582,"nodeType":"ExpressionStatement","src":"3386:55:34"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4543,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4540,"src":"3230:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4544,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4519,"src":"3234:6:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3241:6:34","memberName":"length","nodeType":"MemberAccess","src":"3234:13:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":4546,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4527,"src":"3250:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3234:17:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":4548,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3254:1:34","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3234:21:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3230:25:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4586,"initializationExpression":{"assignments":[4540],"declarations":[{"constant":false,"id":4540,"mutability":"mutable","name":"j","nameLocation":"3223:1:34","nodeType":"VariableDeclaration","scope":4586,"src":"3215:9:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4539,"name":"uint256","nodeType":"ElementaryTypeName","src":"3215:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4542,"initialValue":{"hexValue":"30","id":4541,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3227:1:34","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3215:13:34"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3257:3:34","subExpression":{"id":4551,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4540,"src":"3259:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4553,"nodeType":"ExpressionStatement","src":"3257:3:34"},"nodeType":"ForStatement","src":"3210:264:34"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4530,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4527,"src":"3168:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4531,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4519,"src":"3172:6:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3179:6:34","memberName":"length","nodeType":"MemberAccess","src":"3172:13:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":4533,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3188:1:34","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3172:17:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3168:21:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4588,"initializationExpression":{"assignments":[4527],"declarations":[{"constant":false,"id":4527,"mutability":"mutable","name":"i","nameLocation":"3161:1:34","nodeType":"VariableDeclaration","scope":4588,"src":"3153:9:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4526,"name":"uint256","nodeType":"ElementaryTypeName","src":"3153:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4529,"initialValue":{"hexValue":"30","id":4528,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3165:1:34","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3153:13:34"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3191:3:34","subExpression":{"id":4536,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4527,"src":"3193:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4538,"nodeType":"ExpressionStatement","src":"3191:3:34"},"nodeType":"ForStatement","src":"3148:336:34"},{"expression":{"id":4589,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4519,"src":"3501:6:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"functionReturnParameters":4525,"id":4590,"nodeType":"Return","src":"3494:13:34"}]},"documentation":{"id":4515,"nodeType":"StructuredDocumentation","src":"2395:654:34","text":" @dev Sort an array of tokens, mutating in place (and also returning them).\n This assumes the tokens have been (or will be) validated elsewhere for length\n and non-duplication. All this does is the sorting.\n A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n Could have also done \"manual\" comparisons for each of the cases, but this is\n about the same number of operations, and more concise.\n This is less efficient for larger token count (i.e., above 4), but such pools should\n be rare. And in any case, sorting is only done on-chain in test code."},"id":4592,"implemented":true,"kind":"function","modifiers":[],"name":"sortTokens","nameLocation":"3063:10:34","nodeType":"FunctionDefinition","parameters":{"id":4520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4519,"mutability":"mutable","name":"tokens","nameLocation":"3090:6:34","nodeType":"VariableDeclaration","scope":4592,"src":"3074:22:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4517,"nodeType":"UserDefinedTypeName","pathNode":{"id":4516,"name":"IERC20","nameLocations":["3074:6:34"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"3074:6:34"},"referencedDeclaration":10558,"src":"3074:6:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":4518,"nodeType":"ArrayTypeName","src":"3074:8:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3073:24:34"},"returnParameters":{"id":4525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4524,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4592,"src":"3121:15:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4522,"nodeType":"UserDefinedTypeName","pathNode":{"id":4521,"name":"IERC20","nameLocations":["3121:6:34"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"3121:6:34"},"referencedDeclaration":10558,"src":"3121:6:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":4523,"nodeType":"ArrayTypeName","src":"3121:8:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3120:17:34"},"scope":4700,"src":"3054:460:34","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4646,"nodeType":"Block","src":"3686:341:34","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4600,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4597,"src":"3700:6:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3707:6:34","memberName":"length","nodeType":"MemberAccess","src":"3700:13:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":4602,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3716:1:34","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"3700:17:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4606,"nodeType":"IfStatement","src":"3696:54:34","trueBody":{"id":4605,"nodeType":"Block","src":"3719:31:34","statements":[{"functionReturnParameters":4599,"id":4604,"nodeType":"Return","src":"3733:7:34"}]}},{"assignments":[4609],"declarations":[{"constant":false,"id":4609,"mutability":"mutable","name":"previous","nameLocation":"3767:8:34","nodeType":"VariableDeclaration","scope":4646,"src":"3760:15:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":4608,"nodeType":"UserDefinedTypeName","pathNode":{"id":4607,"name":"IERC20","nameLocations":["3760:6:34"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"3760:6:34"},"referencedDeclaration":10558,"src":"3760:6:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"id":4613,"initialValue":{"baseExpression":{"id":4610,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4597,"src":"3778:6:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4612,"indexExpression":{"hexValue":"30","id":4611,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3785:1:34","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3778:9:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3760:27:34"},{"body":{"id":4644,"nodeType":"Block","src":"3842:179:34","statements":[{"assignments":[4627],"declarations":[{"constant":false,"id":4627,"mutability":"mutable","name":"current","nameLocation":"3863:7:34","nodeType":"VariableDeclaration","scope":4644,"src":"3856:14:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":4626,"nodeType":"UserDefinedTypeName","pathNode":{"id":4625,"name":"IERC20","nameLocations":["3856:6:34"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"3856:6:34"},"referencedDeclaration":10558,"src":"3856:6:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"id":4631,"initialValue":{"baseExpression":{"id":4628,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4597,"src":"3873:6:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4630,"indexExpression":{"id":4629,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4615,"src":"3880:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3873:9:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3856:26:34"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"id":4634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4632,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4609,"src":"3901:8:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4633,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4627,"src":"3912:7:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"src":"3901:18:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4639,"nodeType":"IfStatement","src":"3897:81:34","trueBody":{"id":4638,"nodeType":"Block","src":"3921:57:34","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4635,"name":"TokensNotSorted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4417,"src":"3946:15:34","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3946:17:34","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4637,"nodeType":"RevertStatement","src":"3939:24:34"}]}},{"expression":{"id":4642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4640,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4609,"src":"3992:8:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4641,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4627,"src":"4003:7:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"src":"3992:18:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":4643,"nodeType":"ExpressionStatement","src":"3992:18:34"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4618,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4615,"src":"3818:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":4619,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4597,"src":"3822:6:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3829:6:34","memberName":"length","nodeType":"MemberAccess","src":"3822:13:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3818:17:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4645,"initializationExpression":{"assignments":[4615],"declarations":[{"constant":false,"id":4615,"mutability":"mutable","name":"i","nameLocation":"3811:1:34","nodeType":"VariableDeclaration","scope":4645,"src":"3803:9:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4614,"name":"uint256","nodeType":"ElementaryTypeName","src":"3803:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4617,"initialValue":{"hexValue":"31","id":4616,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3815:1:34","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"3803:13:34"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3837:3:34","subExpression":{"id":4622,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4615,"src":"3839:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4624,"nodeType":"ExpressionStatement","src":"3837:3:34"},"nodeType":"ForStatement","src":"3798:223:34"}]},"documentation":{"id":4593,"nodeType":"StructuredDocumentation","src":"3520:95:34","text":"@dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness."},"id":4647,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedTokens","nameLocation":"3629:18:34","nodeType":"FunctionDefinition","parameters":{"id":4598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4597,"mutability":"mutable","name":"tokens","nameLocation":"3664:6:34","nodeType":"VariableDeclaration","scope":4647,"src":"3648:22:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4595,"nodeType":"UserDefinedTypeName","pathNode":{"id":4594,"name":"IERC20","nameLocations":["3648:6:34"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"3648:6:34"},"referencedDeclaration":10558,"src":"3648:6:34","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":4596,"nodeType":"ArrayTypeName","src":"3648:8:34","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3647:24:34"},"returnParameters":{"id":4599,"nodeType":"ParameterList","parameters":[],"src":"3686:0:34"},"scope":4700,"src":"3620:407:34","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4698,"nodeType":"Block","src":"4203:347:34","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4654,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4651,"src":"4217:7:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4225:6:34","memberName":"length","nodeType":"MemberAccess","src":"4217:14:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":4656,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4234:1:34","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4217:18:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4660,"nodeType":"IfStatement","src":"4213:55:34","trueBody":{"id":4659,"nodeType":"Block","src":"4237:31:34","statements":[{"functionReturnParameters":4653,"id":4658,"nodeType":"Return","src":"4251:7:34"}]}},{"assignments":[4662],"declarations":[{"constant":false,"id":4662,"mutability":"mutable","name":"previous","nameLocation":"4286:8:34","nodeType":"VariableDeclaration","scope":4698,"src":"4278:16:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4661,"name":"uint256","nodeType":"ElementaryTypeName","src":"4278:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4666,"initialValue":{"baseExpression":{"id":4663,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4651,"src":"4297:7:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4665,"indexExpression":{"hexValue":"30","id":4664,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4305:1:34","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4297:10:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4278:29:34"},{"body":{"id":4696,"nodeType":"Block","src":"4363:181:34","statements":[{"assignments":[4679],"declarations":[{"constant":false,"id":4679,"mutability":"mutable","name":"current","nameLocation":"4385:7:34","nodeType":"VariableDeclaration","scope":4696,"src":"4377:15:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4678,"name":"uint256","nodeType":"ElementaryTypeName","src":"4377:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4683,"initialValue":{"baseExpression":{"id":4680,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4651,"src":"4395:7:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4682,"indexExpression":{"id":4681,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4668,"src":"4403:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4395:10:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4377:28:34"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4684,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4662,"src":"4424:8:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4685,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4679,"src":"4435:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4424:18:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4691,"nodeType":"IfStatement","src":"4420:81:34","trueBody":{"id":4690,"nodeType":"Block","src":"4444:57:34","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4687,"name":"TokensNotSorted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4417,"src":"4469:15:34","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4469:17:34","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4689,"nodeType":"RevertStatement","src":"4462:24:34"}]}},{"expression":{"id":4694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4692,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4662,"src":"4515:8:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4693,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4679,"src":"4526:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4515:18:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4695,"nodeType":"ExpressionStatement","src":"4515:18:34"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4671,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4668,"src":"4338:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":4672,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4651,"src":"4342:7:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4350:6:34","memberName":"length","nodeType":"MemberAccess","src":"4342:14:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4338:18:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4697,"initializationExpression":{"assignments":[4668],"declarations":[{"constant":false,"id":4668,"mutability":"mutable","name":"i","nameLocation":"4331:1:34","nodeType":"VariableDeclaration","scope":4697,"src":"4323:9:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4667,"name":"uint256","nodeType":"ElementaryTypeName","src":"4323:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4670,"initialValue":{"hexValue":"31","id":4669,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4335:1:34","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"4323:13:34"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4358:3:34","subExpression":{"id":4675,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4668,"src":"4360:1:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4677,"nodeType":"ExpressionStatement","src":"4358:3:34"},"nodeType":"ForStatement","src":"4318:226:34"}]},"documentation":{"id":4648,"nodeType":"StructuredDocumentation","src":"4033:96:34","text":"@dev Ensure an array of amounts is sorted. As above, does not validate length or uniqueness."},"id":4699,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedAmounts","nameLocation":"4143:19:34","nodeType":"FunctionDefinition","parameters":{"id":4652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4651,"mutability":"mutable","name":"amounts","nameLocation":"4180:7:34","nodeType":"VariableDeclaration","scope":4699,"src":"4163:24:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4649,"name":"uint256","nodeType":"ElementaryTypeName","src":"4163:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4650,"nodeType":"ArrayTypeName","src":"4163:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4162:26:34"},"returnParameters":{"id":4653,"nodeType":"ParameterList","parameters":[],"src":"4203:0:34"},"scope":4700,"src":"4134:416:34","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4701,"src":"202:4350:34","usedErrors":[4408,4411,4414,4417],"usedEvents":[]}],"src":"46:4507:34"},"id":34},"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","exportedSymbols":{"PackedTokenBalance":[4851]},"id":4852,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4702,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:35"},{"abstract":false,"baseContracts":[],"canonicalName":"PackedTokenBalance","contractDependencies":[],"contractKind":"library","documentation":{"id":4703,"nodeType":"StructuredDocumentation","src":"72:909:35","text":" @notice This library represents a data structure for packing a token's current raw and derived balances. A derived\n balance can be the \"last\" live balance scaled18 of the raw token, or the balance of the wrapped version of the\n token in a vault buffer, among others.\n @dev We could use a Solidity struct to pack balance values together in a single storage slot, but unfortunately\n Solidity only allows for structs to live in either storage, calldata or memory. Because a memory struct still takes\n up a slot in the stack (to store its memory location), and because the entire balance fits in a single stack slot\n (two 128 bit values), using memory is strictly less gas performant. Therefore, we do manual packing and unpacking.\n We could also use custom types now, but given the simplicity here, and the existing EnumerableMap type, it seemed\n easier to leave it as a bytes32."},"fullyImplemented":true,"id":4851,"linearizedBaseContracts":[4851],"name":"PackedTokenBalance","nameLocation":"990:18:35","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":4711,"mutability":"constant","name":"_MAX_BALANCE","nameLocation":"1222:12:35","nodeType":"VariableDeclaration","scope":4851,"src":"1197:54:35","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4704,"name":"uint256","nodeType":"ElementaryTypeName","src":"1197:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"},"id":4710,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"},"id":4708,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":4705,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1237:1:35","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"hexValue":"313238","id":4706,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1243:3:35","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"}],"id":4707,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1242:5:35","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"}},"src":"1237:10:35","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":4709,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1250:1:35","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1237:14:35","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"}},"visibility":"private"},{"documentation":{"id":4712,"nodeType":"StructuredDocumentation","src":"1258:78:35","text":"@notice One of the balances is above the maximum value that can be stored."},"errorSelector":"89560ca1","id":4714,"name":"BalanceOverflow","nameLocation":"1347:15:35","nodeType":"ErrorDefinition","parameters":{"id":4713,"nodeType":"ParameterList","parameters":[],"src":"1362:2:35"},"src":"1341:24:35"},{"body":{"id":4728,"nodeType":"Block","src":"1443:55:35","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4723,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4716,"src":"1468:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4722,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1460:7:35","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4721,"name":"uint256","nodeType":"ElementaryTypeName","src":"1460:7:35","typeDescriptions":{}}},"id":4724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1460:16:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":4725,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4711,"src":"1479:12:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1460:31:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4720,"id":4727,"nodeType":"Return","src":"1453:38:35"}]},"id":4729,"implemented":true,"kind":"function","modifiers":[],"name":"getBalanceRaw","nameLocation":"1380:13:35","nodeType":"FunctionDefinition","parameters":{"id":4717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4716,"mutability":"mutable","name":"balance","nameLocation":"1402:7:35","nodeType":"VariableDeclaration","scope":4729,"src":"1394:15:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4715,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1394:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1393:17:35"},"returnParameters":{"id":4720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4719,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4729,"src":"1434:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4718,"name":"uint256","nodeType":"ElementaryTypeName","src":"1434:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1433:9:35"},"scope":4851,"src":"1371:127:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4745,"nodeType":"Block","src":"1580:62:35","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":4740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4738,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4731,"src":"1605:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"313238","id":4739,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1616:3:35","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"1605:14:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4737,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1597:7:35","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4736,"name":"uint256","nodeType":"ElementaryTypeName","src":"1597:7:35","typeDescriptions":{}}},"id":4741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1597:23:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":4742,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4711,"src":"1623:12:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1597:38:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4735,"id":4744,"nodeType":"Return","src":"1590:45:35"}]},"id":4746,"implemented":true,"kind":"function","modifiers":[],"name":"getBalanceDerived","nameLocation":"1513:17:35","nodeType":"FunctionDefinition","parameters":{"id":4732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4731,"mutability":"mutable","name":"balance","nameLocation":"1539:7:35","nodeType":"VariableDeclaration","scope":4746,"src":"1531:15:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4730,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1531:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1530:17:35"},"returnParameters":{"id":4735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4734,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4746,"src":"1571:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4733,"name":"uint256","nodeType":"ElementaryTypeName","src":"1571:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1570:9:35"},"scope":4851,"src":"1504:138:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4763,"nodeType":"Block","src":"1831:82:35","statements":[{"expression":{"arguments":[{"id":4757,"name":"newBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4751,"src":"1864:13:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":4759,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4749,"src":"1897:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4758,"name":"getBalanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4746,"src":"1879:17:35","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":4760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1879:26:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4756,"name":"toPackedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4810,"src":"1848:15:35","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":4761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1848:58:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4755,"id":4762,"nodeType":"Return","src":"1841:65:35"}]},"documentation":{"id":4747,"nodeType":"StructuredDocumentation","src":"1648:83:35","text":"@dev Sets only the raw balance of balances and returns the new bytes32 balance."},"id":4764,"implemented":true,"kind":"function","modifiers":[],"name":"setBalanceRaw","nameLocation":"1745:13:35","nodeType":"FunctionDefinition","parameters":{"id":4752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4749,"mutability":"mutable","name":"balance","nameLocation":"1767:7:35","nodeType":"VariableDeclaration","scope":4764,"src":"1759:15:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4748,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1759:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4751,"mutability":"mutable","name":"newBalanceRaw","nameLocation":"1784:13:35","nodeType":"VariableDeclaration","scope":4764,"src":"1776:21:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4750,"name":"uint256","nodeType":"ElementaryTypeName","src":"1776:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1758:40:35"},"returnParameters":{"id":4755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4754,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4764,"src":"1822:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4753,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1822:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1821:9:35"},"scope":4851,"src":"1736:177:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4781,"nodeType":"Block","src":"2114:82:35","statements":[{"expression":{"arguments":[{"arguments":[{"id":4776,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4767,"src":"2161:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4775,"name":"getBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4729,"src":"2147:13:35","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":4777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2147:22:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4778,"name":"newBalanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4769,"src":"2171:17:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4774,"name":"toPackedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4810,"src":"2131:15:35","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":4779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2131:58:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4773,"id":4780,"nodeType":"Return","src":"2124:65:35"}]},"documentation":{"id":4765,"nodeType":"StructuredDocumentation","src":"1919:87:35","text":"@dev Sets only the derived balance of balances and returns the new bytes32 balance."},"id":4782,"implemented":true,"kind":"function","modifiers":[],"name":"setBalanceDerived","nameLocation":"2020:17:35","nodeType":"FunctionDefinition","parameters":{"id":4770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4767,"mutability":"mutable","name":"balance","nameLocation":"2046:7:35","nodeType":"VariableDeclaration","scope":4782,"src":"2038:15:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4766,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2038:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4769,"mutability":"mutable","name":"newBalanceDerived","nameLocation":"2063:17:35","nodeType":"VariableDeclaration","scope":4782,"src":"2055:25:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4768,"name":"uint256","nodeType":"ElementaryTypeName","src":"2055:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2037:44:35"},"returnParameters":{"id":4773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4772,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4782,"src":"2105:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4771,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2105:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2104:9:35"},"scope":4851,"src":"2011:185:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4809,"nodeType":"Block","src":"2412:180:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4792,"name":"balanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4785,"src":"2426:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4793,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4711,"src":"2439:12:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2426:25:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4795,"name":"balanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"2455:14:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4796,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4711,"src":"2472:12:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2455:29:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2426:58:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4803,"nodeType":"IfStatement","src":"2422:113:35","trueBody":{"id":4802,"nodeType":"Block","src":"2486:49:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4799,"name":"BalanceOverflow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4714,"src":"2507:15:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2507:17:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4801,"nodeType":"RevertStatement","src":"2500:24:35"}]}},{"expression":{"arguments":[{"id":4805,"name":"balanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4785,"src":"2558:10:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4806,"name":"balanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4787,"src":"2570:14:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4804,"name":"_pack","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4850,"src":"2552:5:35","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":4807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2552:33:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4791,"id":4808,"nodeType":"Return","src":"2545:40:35"}]},"documentation":{"id":4783,"nodeType":"StructuredDocumentation","src":"2202:104:35","text":"@dev Validates the size of `balanceRaw` and `balanceDerived`, then returns a packed balance bytes32."},"id":4810,"implemented":true,"kind":"function","modifiers":[],"name":"toPackedBalance","nameLocation":"2320:15:35","nodeType":"FunctionDefinition","parameters":{"id":4788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4785,"mutability":"mutable","name":"balanceRaw","nameLocation":"2344:10:35","nodeType":"VariableDeclaration","scope":4810,"src":"2336:18:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4784,"name":"uint256","nodeType":"ElementaryTypeName","src":"2336:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4787,"mutability":"mutable","name":"balanceDerived","nameLocation":"2364:14:35","nodeType":"VariableDeclaration","scope":4810,"src":"2356:22:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4786,"name":"uint256","nodeType":"ElementaryTypeName","src":"2356:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2335:44:35"},"returnParameters":{"id":4791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4790,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4810,"src":"2403:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4789,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2403:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2402:9:35"},"scope":4851,"src":"2311:281:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4828,"nodeType":"Block","src":"2754:76:35","statements":[{"expression":{"components":[{"arguments":[{"id":4821,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4813,"src":"2786:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4820,"name":"getBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4729,"src":"2772:13:35","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":4822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2772:22:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":4824,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4813,"src":"2814:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":4823,"name":"getBalanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4746,"src":"2796:17:35","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":4825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2796:26:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4826,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2771:52:35","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":4819,"id":4827,"nodeType":"Return","src":"2764:59:35"}]},"documentation":{"id":4811,"nodeType":"StructuredDocumentation","src":"2598:40:35","text":"@dev Decode and fetch both balances."},"id":4829,"implemented":true,"kind":"function","modifiers":[],"name":"fromPackedBalance","nameLocation":"2652:17:35","nodeType":"FunctionDefinition","parameters":{"id":4814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4813,"mutability":"mutable","name":"balance","nameLocation":"2678:7:35","nodeType":"VariableDeclaration","scope":4829,"src":"2670:15:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4812,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2670:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2669:17:35"},"returnParameters":{"id":4819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4816,"mutability":"mutable","name":"balanceRaw","nameLocation":"2718:10:35","nodeType":"VariableDeclaration","scope":4829,"src":"2710:18:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4815,"name":"uint256","nodeType":"ElementaryTypeName","src":"2710:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4818,"mutability":"mutable","name":"balanceDerived","nameLocation":"2738:14:35","nodeType":"VariableDeclaration","scope":4829,"src":"2730:22:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4817,"name":"uint256","nodeType":"ElementaryTypeName","src":"2730:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2709:44:35"},"scope":4851,"src":"2643:187:35","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4849,"nodeType":"Block","src":"3035:76:35","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4841,"name":"mostSignificant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4834,"src":"3061:15:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"313238","id":4842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3080:3:35","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"3061:22:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4844,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3060:24:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4845,"name":"leastSignificant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4832,"src":"3087:16:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3060:43:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4840,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3052:7:35","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":4839,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3052:7:35","typeDescriptions":{}}},"id":4847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3052:52:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":4838,"id":4848,"nodeType":"Return","src":"3045:59:35"}]},"documentation":{"id":4830,"nodeType":"StructuredDocumentation","src":"2836:97:35","text":"@dev Packs two uint128 values into a packed balance bytes32. It does not check balance sizes."},"id":4850,"implemented":true,"kind":"function","modifiers":[],"name":"_pack","nameLocation":"2947:5:35","nodeType":"FunctionDefinition","parameters":{"id":4835,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4832,"mutability":"mutable","name":"leastSignificant","nameLocation":"2961:16:35","nodeType":"VariableDeclaration","scope":4850,"src":"2953:24:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4831,"name":"uint256","nodeType":"ElementaryTypeName","src":"2953:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4834,"mutability":"mutable","name":"mostSignificant","nameLocation":"2987:15:35","nodeType":"VariableDeclaration","scope":4850,"src":"2979:23:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4833,"name":"uint256","nodeType":"ElementaryTypeName","src":"2979:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2952:51:35"},"returnParameters":{"id":4838,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4837,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4850,"src":"3026:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4836,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3026:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3025:9:35"},"scope":4851,"src":"2938:173:35","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":4852,"src":"982:2131:35","usedErrors":[4714],"usedEvents":[]}],"src":"46:3068:35"},"id":35},"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol","exportedSymbols":{"RevertCodec":[4941]},"id":4942,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4853,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:36"},{"abstract":false,"baseContracts":[],"canonicalName":"RevertCodec","contractDependencies":[],"contractKind":"library","documentation":{"id":4854,"nodeType":"StructuredDocumentation","src":"111:120:36","text":"@notice Support `quoteAndRevert`: a v2-style query which always reverts, and returns the result in the return data."},"fullyImplemented":true,"id":4941,"linearizedBaseContracts":[4941],"name":"RevertCodec","nameLocation":"239:11:36","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4855,"nodeType":"StructuredDocumentation","src":"257:183:36","text":" @notice On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\n @param result The result of the query operation"},"errorSelector":"5ab64fb8","id":4859,"name":"Result","nameLocation":"451:6:36","nodeType":"ErrorDefinition","parameters":{"id":4858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4857,"mutability":"mutable","name":"result","nameLocation":"464:6:36","nodeType":"VariableDeclaration","scope":4859,"src":"458:12:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4856,"name":"bytes","nodeType":"ElementaryTypeName","src":"458:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"457:14:36"},"src":"445:27:36"},{"documentation":{"id":4860,"nodeType":"StructuredDocumentation","src":"478:79:36","text":"@notice Handle the \"reverted without a reason\" case (i.e., no return data)."},"errorSelector":"a7285689","id":4862,"name":"ErrorSelectorNotFound","nameLocation":"568:21:36","nodeType":"ErrorDefinition","parameters":{"id":4861,"nodeType":"ParameterList","parameters":[],"src":"589:2:36"},"src":"562:30:36"},{"body":{"id":4902,"nodeType":"Block","src":"687:559:36","statements":[{"assignments":[4870],"declarations":[{"constant":false,"id":4870,"mutability":"mutable","name":"errorSelector","nameLocation":"704:13:36","nodeType":"VariableDeclaration","scope":4902,"src":"697:20:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4869,"name":"bytes4","nodeType":"ElementaryTypeName","src":"697:6:36","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":4875,"initialValue":{"arguments":[{"id":4873,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4864,"src":"746:9:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":4871,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4941,"src":"720:11:36","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4941_$","typeString":"type(library RevertCodec)"}},"id":4872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"732:13:36","memberName":"parseSelector","nodeType":"MemberAccess","referencedDeclaration":4922,"src":"720:25:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$","typeString":"function (bytes memory) pure returns (bytes4)"}},"id":4874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"720:36:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"697:59:36"},{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":4879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4876,"name":"errorSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4870,"src":"770:13:36","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":4877,"name":"Result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4859,"src":"787:6:36","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$","typeString":"function (bytes memory) pure returns (error)"}},"id":4878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"794:8:36","memberName":"selector","nodeType":"MemberAccess","src":"787:15:36","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"770:32:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4887,"nodeType":"IfStatement","src":"766:185:36","trueBody":{"id":4886,"nodeType":"Block","src":"804:147:36","statements":[{"expression":{"arguments":[{"id":4883,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4864,"src":"930:9:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":4880,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4941,"src":"903:11:36","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4941_$","typeString":"type(library RevertCodec)"}},"id":4882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"915:14:36","memberName":"bubbleUpRevert","nodeType":"MemberAccess","referencedDeclaration":4940,"src":"903:26:36","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":4884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"903:37:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4885,"nodeType":"ExpressionStatement","src":"903:37:36"}]}},{"assignments":[4889],"declarations":[{"constant":false,"id":4889,"mutability":"mutable","name":"resultRawLength","nameLocation":"969:15:36","nodeType":"VariableDeclaration","scope":4902,"src":"961:23:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4888,"name":"uint256","nodeType":"ElementaryTypeName","src":"961:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4892,"initialValue":{"expression":{"id":4890,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4864,"src":"987:9:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"997:6:36","memberName":"length","nodeType":"MemberAccess","src":"987:16:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"961:42:36"},{"AST":{"nativeSrc":"1038:154:36","nodeType":"YulBlock","src":"1038:154:36","statements":[{"nativeSrc":"1052:33:36","nodeType":"YulAssignment","src":"1052:33:36","value":{"arguments":[{"name":"resultRaw","nativeSrc":"1069:9:36","nodeType":"YulIdentifier","src":"1069:9:36"},{"kind":"number","nativeSrc":"1080:4:36","nodeType":"YulLiteral","src":"1080:4:36","type":"","value":"0x04"}],"functionName":{"name":"add","nativeSrc":"1065:3:36","nodeType":"YulIdentifier","src":"1065:3:36"},"nativeSrc":"1065:20:36","nodeType":"YulFunctionCall","src":"1065:20:36"},"variableNames":[{"name":"resultRaw","nativeSrc":"1052:9:36","nodeType":"YulIdentifier","src":"1052:9:36"}]},{"expression":{"arguments":[{"name":"resultRaw","nativeSrc":"1126:9:36","nodeType":"YulIdentifier","src":"1126:9:36"},{"arguments":[{"name":"resultRawLength","nativeSrc":"1141:15:36","nodeType":"YulIdentifier","src":"1141:15:36"},{"kind":"number","nativeSrc":"1158:1:36","nodeType":"YulLiteral","src":"1158:1:36","type":"","value":"4"}],"functionName":{"name":"sub","nativeSrc":"1137:3:36","nodeType":"YulIdentifier","src":"1137:3:36"},"nativeSrc":"1137:23:36","nodeType":"YulFunctionCall","src":"1137:23:36"}],"functionName":{"name":"mstore","nativeSrc":"1119:6:36","nodeType":"YulIdentifier","src":"1119:6:36"},"nativeSrc":"1119:42:36","nodeType":"YulFunctionCall","src":"1119:42:36"},"nativeSrc":"1119:42:36","nodeType":"YulExpressionStatement","src":"1119:42:36"}]},"evmVersion":"cancun","externalReferences":[{"declaration":4864,"isOffset":false,"isSlot":false,"src":"1052:9:36","valueSize":1},{"declaration":4864,"isOffset":false,"isSlot":false,"src":"1069:9:36","valueSize":1},{"declaration":4864,"isOffset":false,"isSlot":false,"src":"1126:9:36","valueSize":1},{"declaration":4889,"isOffset":false,"isSlot":false,"src":"1141:15:36","valueSize":1}],"flags":["memory-safe"],"id":4893,"nodeType":"InlineAssembly","src":"1013:179:36"},{"expression":{"arguments":[{"id":4896,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4864,"src":"1220:9:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":4898,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1232:5:36","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":4897,"name":"bytes","nodeType":"ElementaryTypeName","src":"1232:5:36","typeDescriptions":{}}}],"id":4899,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1231:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"}],"expression":{"id":4894,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1209:3:36","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":4895,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1213:6:36","memberName":"decode","nodeType":"MemberAccess","src":"1209:10:36","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":4900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1209:30:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":4868,"id":4901,"nodeType":"Return","src":"1202:37:36"}]},"id":4903,"implemented":true,"kind":"function","modifiers":[],"name":"catchEncodedResult","nameLocation":"607:18:36","nodeType":"FunctionDefinition","parameters":{"id":4865,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4864,"mutability":"mutable","name":"resultRaw","nameLocation":"639:9:36","nodeType":"VariableDeclaration","scope":4903,"src":"626:22:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4863,"name":"bytes","nodeType":"ElementaryTypeName","src":"626:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"625:24:36"},"returnParameters":{"id":4868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4867,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4903,"src":"673:12:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4866,"name":"bytes","nodeType":"ElementaryTypeName","src":"673:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"672:14:36"},"scope":4941,"src":"598:648:36","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4921,"nodeType":"Block","src":"1429:258:36","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4911,"name":"callResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4906,"src":"1443:10:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1454:6:36","memberName":"length","nodeType":"MemberAccess","src":"1443:17:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"34","id":4913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1463:1:36","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"1443:21:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4919,"nodeType":"IfStatement","src":"1439:82:36","trueBody":{"id":4918,"nodeType":"Block","src":"1466:55:36","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4915,"name":"ErrorSelectorNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4862,"src":"1487:21:36","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1487:23:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4917,"nodeType":"RevertStatement","src":"1480:30:36"}]}},{"AST":{"nativeSrc":"1555:126:36","nodeType":"YulBlock","src":"1555:126:36","statements":[{"nativeSrc":"1569:45:36","nodeType":"YulAssignment","src":"1569:45:36","value":{"arguments":[{"arguments":[{"name":"callResult","nativeSrc":"1596:10:36","nodeType":"YulIdentifier","src":"1596:10:36"},{"kind":"number","nativeSrc":"1608:4:36","nodeType":"YulLiteral","src":"1608:4:36","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1592:3:36","nodeType":"YulIdentifier","src":"1592:3:36"},"nativeSrc":"1592:21:36","nodeType":"YulFunctionCall","src":"1592:21:36"}],"functionName":{"name":"mload","nativeSrc":"1586:5:36","nodeType":"YulIdentifier","src":"1586:5:36"},"nativeSrc":"1586:28:36","nodeType":"YulFunctionCall","src":"1586:28:36"},"variableNames":[{"name":"errorSelector","nativeSrc":"1569:13:36","nodeType":"YulIdentifier","src":"1569:13:36"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4906,"isOffset":false,"isSlot":false,"src":"1596:10:36","valueSize":1},{"declaration":4909,"isOffset":false,"isSlot":false,"src":"1569:13:36","valueSize":1}],"flags":["memory-safe"],"id":4920,"nodeType":"InlineAssembly","src":"1530:151:36"}]},"documentation":{"id":4904,"nodeType":"StructuredDocumentation","src":"1252:79:36","text":"@dev Returns the first 4 bytes in an array, reverting if the length is < 4."},"id":4922,"implemented":true,"kind":"function","modifiers":[],"name":"parseSelector","nameLocation":"1345:13:36","nodeType":"FunctionDefinition","parameters":{"id":4907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4906,"mutability":"mutable","name":"callResult","nameLocation":"1372:10:36","nodeType":"VariableDeclaration","scope":4922,"src":"1359:23:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4905,"name":"bytes","nodeType":"ElementaryTypeName","src":"1359:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1358:25:36"},"returnParameters":{"id":4910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4909,"mutability":"mutable","name":"errorSelector","nameLocation":"1414:13:36","nodeType":"VariableDeclaration","scope":4922,"src":"1407:20:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":4908,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1407:6:36","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1406:22:36"},"scope":4941,"src":"1336:351:36","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4939,"nodeType":"Block","src":"1804:441:36","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4928,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4925,"src":"1881:10:36","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1892:6:36","memberName":"length","nodeType":"MemberAccess","src":"1881:17:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":4930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1901:1:36","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1881:21:36","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4937,"nodeType":"Block","src":"2184:55:36","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4934,"name":"ErrorSelectorNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4862,"src":"2205:21:36","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2205:23:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4936,"nodeType":"RevertStatement","src":"2198:30:36"}]},"id":4938,"nodeType":"IfStatement","src":"1877:362:36","trueBody":{"id":4933,"nodeType":"Block","src":"1904:274:36","statements":[{"AST":{"nativeSrc":"2033:135:36","nodeType":"YulBlock","src":"2033:135:36","statements":[{"nativeSrc":"2051:41:36","nodeType":"YulVariableDeclaration","src":"2051:41:36","value":{"arguments":[{"name":"returnData","nativeSrc":"2081:10:36","nodeType":"YulIdentifier","src":"2081:10:36"}],"functionName":{"name":"mload","nativeSrc":"2075:5:36","nodeType":"YulIdentifier","src":"2075:5:36"},"nativeSrc":"2075:17:36","nodeType":"YulFunctionCall","src":"2075:17:36"},"variables":[{"name":"return_data_size","nativeSrc":"2055:16:36","nodeType":"YulTypedName","src":"2055:16:36","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"2120:2:36","nodeType":"YulLiteral","src":"2120:2:36","type":"","value":"32"},{"name":"returnData","nativeSrc":"2124:10:36","nodeType":"YulIdentifier","src":"2124:10:36"}],"functionName":{"name":"add","nativeSrc":"2116:3:36","nodeType":"YulIdentifier","src":"2116:3:36"},"nativeSrc":"2116:19:36","nodeType":"YulFunctionCall","src":"2116:19:36"},{"name":"return_data_size","nativeSrc":"2137:16:36","nodeType":"YulIdentifier","src":"2137:16:36"}],"functionName":{"name":"revert","nativeSrc":"2109:6:36","nodeType":"YulIdentifier","src":"2109:6:36"},"nativeSrc":"2109:45:36","nodeType":"YulFunctionCall","src":"2109:45:36"},"nativeSrc":"2109:45:36","nodeType":"YulExpressionStatement","src":"2109:45:36"}]},"evmVersion":"cancun","externalReferences":[{"declaration":4925,"isOffset":false,"isSlot":false,"src":"2081:10:36","valueSize":1},{"declaration":4925,"isOffset":false,"isSlot":false,"src":"2124:10:36","valueSize":1}],"flags":["memory-safe"],"id":4932,"nodeType":"InlineAssembly","src":"2008:160:36"}]}}]},"documentation":{"id":4923,"nodeType":"StructuredDocumentation","src":"1693:43:36","text":"@dev Taken from Openzeppelin's Address."},"id":4940,"implemented":true,"kind":"function","modifiers":[],"name":"bubbleUpRevert","nameLocation":"1750:14:36","nodeType":"FunctionDefinition","parameters":{"id":4926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4925,"mutability":"mutable","name":"returnData","nameLocation":"1778:10:36","nodeType":"VariableDeclaration","scope":4940,"src":"1765:23:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4924,"name":"bytes","nodeType":"ElementaryTypeName","src":"1765:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1764:25:36"},"returnParameters":{"id":4927,"nodeType":"ParameterList","parameters":[],"src":"1804:0:36"},"scope":4941,"src":"1741:504:36","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4942,"src":"231:2016:36","usedErrors":[4859,4862],"usedEvents":[]}],"src":"46:2202:36"},"id":36},"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","exportedSymbols":{"IVersion":[34],"Version":[4981]},"id":4982,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4943,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:37"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol","id":4945,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4982,"sourceUnit":35,"src":"72:102:37","symbolAliases":[{"foreign":{"id":4944,"name":"IVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34,"src":"81:8:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4947,"name":"IVersion","nameLocations":["686:8:37"],"nodeType":"IdentifierPath","referencedDeclaration":34,"src":"686:8:37"},"id":4948,"nodeType":"InheritanceSpecifier","src":"686:8:37"}],"canonicalName":"Version","contractDependencies":[],"contractKind":"contract","documentation":{"id":4946,"nodeType":"StructuredDocumentation","src":"176:489:37","text":" @notice Retrieves a contract's version from storage.\n @dev The version is set at deployment time and cannot be changed. It would be immutable, but immutable strings\n are not yet supported.\n Contracts like factories and pools should have versions. These typically take the form of JSON strings containing\n detailed information about the deployment. For instance:\n `{name: 'ChildChainGaugeFactory', version: 2, deployment: '20230316-child-chain-gauge-factory-v2'}`"},"fullyImplemented":true,"id":4981,"linearizedBaseContracts":[4981,34],"name":"Version","nameLocation":"675:7:37","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":4950,"mutability":"mutable","name":"_version","nameLocation":"716:8:37","nodeType":"VariableDeclaration","scope":4981,"src":"701:23:37","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":4949,"name":"string","nodeType":"ElementaryTypeName","src":"701:6:37","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":4959,"nodeType":"Block","src":"767:38:37","statements":[{"expression":{"arguments":[{"id":4956,"name":"version_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4952,"src":"789:8:37","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4955,"name":"_setVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4980,"src":"777:11:37","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":4957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"777:21:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4958,"nodeType":"ExpressionStatement","src":"777:21:37"}]},"id":4960,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4953,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4952,"mutability":"mutable","name":"version_","nameLocation":"757:8:37","nodeType":"VariableDeclaration","scope":4960,"src":"743:22:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4951,"name":"string","nodeType":"ElementaryTypeName","src":"743:6:37","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"742:24:37"},"returnParameters":{"id":4954,"nodeType":"ParameterList","parameters":[],"src":"767:0:37"},"scope":4981,"src":"731:74:37","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[33],"body":{"id":4968,"nodeType":"Block","src":"974:32:37","statements":[{"expression":{"id":4966,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4950,"src":"991:8:37","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":4965,"id":4967,"nodeType":"Return","src":"984:15:37"}]},"documentation":{"id":4961,"nodeType":"StructuredDocumentation","src":"811:101:37","text":" @notice Getter for the version.\n @return version The stored contract version"},"functionSelector":"54fd4d50","id":4969,"implemented":true,"kind":"function","modifiers":[],"name":"version","nameLocation":"926:7:37","nodeType":"FunctionDefinition","parameters":{"id":4962,"nodeType":"ParameterList","parameters":[],"src":"933:2:37"},"returnParameters":{"id":4965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4964,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4969,"src":"959:13:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4963,"name":"string","nodeType":"ElementaryTypeName","src":"959:6:37","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"958:15:37"},"scope":4981,"src":"917:89:37","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":4979,"nodeType":"Block","src":"1146:38:37","statements":[{"expression":{"id":4977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4975,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4950,"src":"1156:8:37","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4976,"name":"newVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4972,"src":"1167:10:37","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1156:21:37","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":4978,"nodeType":"ExpressionStatement","src":"1156:21:37"}]},"documentation":{"id":4970,"nodeType":"StructuredDocumentation","src":"1012:73:37","text":"@dev Internal setter that allows this contract to be used in proxies."},"id":4980,"implemented":true,"kind":"function","modifiers":[],"name":"_setVersion","nameLocation":"1099:11:37","nodeType":"FunctionDefinition","parameters":{"id":4973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4972,"mutability":"mutable","name":"newVersion","nameLocation":"1125:10:37","nodeType":"VariableDeclaration","scope":4980,"src":"1111:24:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4971,"name":"string","nodeType":"ElementaryTypeName","src":"1111:6:37","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1110:26:37"},"returnParameters":{"id":4974,"nodeType":"ParameterList","parameters":[],"src":"1146:0:37"},"scope":4981,"src":"1090:94:37","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":4982,"src":"666:520:37","usedErrors":[],"usedEvents":[]}],"src":"46:1141:37"},"id":37},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","exportedSymbols":{"FixedPoint":[5280],"LogExpMath":[6636]},"id":5281,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4983,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:38"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","file":"./LogExpMath.sol","id":4985,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5281,"sourceUnit":6637,"src":"72:46:38","symbolAliases":[{"foreign":{"id":4984,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6636,"src":"81:10:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"FixedPoint","contractDependencies":[],"contractKind":"library","documentation":{"id":4986,"nodeType":"StructuredDocumentation","src":"120:119:38","text":"@notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision."},"fullyImplemented":true,"id":5280,"linearizedBaseContracts":[5280],"name":"FixedPoint","nameLocation":"247:10:38","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4987,"nodeType":"StructuredDocumentation","src":"264:39:38","text":"@notice Attempted division by zero."},"errorSelector":"0a0c22c7","id":4989,"name":"ZeroDivision","nameLocation":"314:12:38","nodeType":"ErrorDefinition","parameters":{"id":4988,"nodeType":"ParameterList","parameters":[],"src":"326:2:38"},"src":"308:21:38"},{"constant":true,"id":4992,"mutability":"constant","name":"ONE","nameLocation":"459:3:38","nodeType":"VariableDeclaration","scope":5280,"src":"433:36:38","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4990,"name":"uint256","nodeType":"ElementaryTypeName","src":"433:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653138","id":4991,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"465:4:38","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":4997,"mutability":"constant","name":"TWO","nameLocation":"522:3:38","nodeType":"VariableDeclaration","scope":5280,"src":"496:39:38","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4993,"name":"uint256","nodeType":"ElementaryTypeName","src":"496:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4996,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":4994,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"528:1:38","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4995,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4992,"src":"532:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"528:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":5002,"mutability":"constant","name":"FOUR","nameLocation":"567:4:38","nodeType":"VariableDeclaration","scope":5280,"src":"541:40:38","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4998,"name":"uint256","nodeType":"ElementaryTypeName","src":"541:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5001,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":4999,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"574:1:38","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5000,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4992,"src":"578:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"574:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":5005,"mutability":"constant","name":"MAX_POW_RELATIVE_ERROR","nameLocation":"613:22:38","nodeType":"VariableDeclaration","scope":5280,"src":"587:56:38","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5003,"name":"uint256","nodeType":"ElementaryTypeName","src":"587:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3130303030","id":5004,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"638:5:38","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"visibility":"internal"},{"body":{"id":5024,"nodeType":"Block","src":"733:148:38","statements":[{"assignments":[5015],"declarations":[{"constant":false,"id":5015,"mutability":"mutable","name":"product","nameLocation":"828:7:38","nodeType":"VariableDeclaration","scope":5024,"src":"820:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5014,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5019,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5016,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5007,"src":"838:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5017,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5009,"src":"842:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"838:5:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"820:23:38"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5020,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5015,"src":"861:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5021,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4992,"src":"871:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"861:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5013,"id":5023,"nodeType":"Return","src":"854:20:38"}]},"id":5025,"implemented":true,"kind":"function","modifiers":[],"name":"mulDown","nameLocation":"671:7:38","nodeType":"FunctionDefinition","parameters":{"id":5010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5007,"mutability":"mutable","name":"a","nameLocation":"687:1:38","nodeType":"VariableDeclaration","scope":5025,"src":"679:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5006,"name":"uint256","nodeType":"ElementaryTypeName","src":"679:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5009,"mutability":"mutable","name":"b","nameLocation":"698:1:38","nodeType":"VariableDeclaration","scope":5025,"src":"690:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5008,"name":"uint256","nodeType":"ElementaryTypeName","src":"690:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"678:22:38"},"returnParameters":{"id":5013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5012,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5025,"src":"724:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5011,"name":"uint256","nodeType":"ElementaryTypeName","src":"724:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"723:9:38"},"scope":5280,"src":"662:219:38","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5041,"nodeType":"Block","src":"963:351:38","statements":[{"assignments":[5035],"declarations":[{"constant":false,"id":5035,"mutability":"mutable","name":"product","nameLocation":"1058:7:38","nodeType":"VariableDeclaration","scope":5041,"src":"1050:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5034,"name":"uint256","nodeType":"ElementaryTypeName","src":"1050:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5039,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5036,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5027,"src":"1068:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5037,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5029,"src":"1072:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1068:5:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1050:23:38"},{"AST":{"nativeSrc":"1211:97:38","nodeType":"YulBlock","src":"1211:97:38","statements":[{"nativeSrc":"1225:73:38","nodeType":"YulAssignment","src":"1225:73:38","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1253:7:38","nodeType":"YulIdentifier","src":"1253:7:38"}],"functionName":{"name":"iszero","nativeSrc":"1246:6:38","nodeType":"YulIdentifier","src":"1246:6:38"},"nativeSrc":"1246:15:38","nodeType":"YulFunctionCall","src":"1246:15:38"}],"functionName":{"name":"iszero","nativeSrc":"1239:6:38","nodeType":"YulIdentifier","src":"1239:6:38"},"nativeSrc":"1239:23:38","nodeType":"YulFunctionCall","src":"1239:23:38"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1276:7:38","nodeType":"YulIdentifier","src":"1276:7:38"},{"kind":"number","nativeSrc":"1285:1:38","nodeType":"YulLiteral","src":"1285:1:38","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1272:3:38","nodeType":"YulIdentifier","src":"1272:3:38"},"nativeSrc":"1272:15:38","nodeType":"YulFunctionCall","src":"1272:15:38"},{"name":"ONE","nativeSrc":"1289:3:38","nodeType":"YulIdentifier","src":"1289:3:38"}],"functionName":{"name":"div","nativeSrc":"1268:3:38","nodeType":"YulIdentifier","src":"1268:3:38"},"nativeSrc":"1268:25:38","nodeType":"YulFunctionCall","src":"1268:25:38"},{"kind":"number","nativeSrc":"1295:1:38","nodeType":"YulLiteral","src":"1295:1:38","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"1264:3:38","nodeType":"YulIdentifier","src":"1264:3:38"},"nativeSrc":"1264:33:38","nodeType":"YulFunctionCall","src":"1264:33:38"}],"functionName":{"name":"mul","nativeSrc":"1235:3:38","nodeType":"YulIdentifier","src":"1235:3:38"},"nativeSrc":"1235:63:38","nodeType":"YulFunctionCall","src":"1235:63:38"},"variableNames":[{"name":"result","nativeSrc":"1225:6:38","nodeType":"YulIdentifier","src":"1225:6:38"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4992,"isOffset":false,"isSlot":false,"src":"1289:3:38","valueSize":1},{"declaration":5035,"isOffset":false,"isSlot":false,"src":"1253:7:38","valueSize":1},{"declaration":5035,"isOffset":false,"isSlot":false,"src":"1276:7:38","valueSize":1},{"declaration":5032,"isOffset":false,"isSlot":false,"src":"1225:6:38","valueSize":1}],"flags":["memory-safe"],"id":5040,"nodeType":"InlineAssembly","src":"1186:122:38"}]},"id":5042,"implemented":true,"kind":"function","modifiers":[],"name":"mulUp","nameLocation":"896:5:38","nodeType":"FunctionDefinition","parameters":{"id":5030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5027,"mutability":"mutable","name":"a","nameLocation":"910:1:38","nodeType":"VariableDeclaration","scope":5042,"src":"902:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5026,"name":"uint256","nodeType":"ElementaryTypeName","src":"902:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5029,"mutability":"mutable","name":"b","nameLocation":"921:1:38","nodeType":"VariableDeclaration","scope":5042,"src":"913:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5028,"name":"uint256","nodeType":"ElementaryTypeName","src":"913:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"901:22:38"},"returnParameters":{"id":5033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5032,"mutability":"mutable","name":"result","nameLocation":"955:6:38","nodeType":"VariableDeclaration","scope":5042,"src":"947:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5031,"name":"uint256","nodeType":"ElementaryTypeName","src":"947:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"946:16:38"},"scope":5280,"src":"887:427:38","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5061,"nodeType":"Block","src":"1391:254:38","statements":[{"assignments":[5052],"declarations":[{"constant":false,"id":5052,"mutability":"mutable","name":"aInflated","nameLocation":"1499:9:38","nodeType":"VariableDeclaration","scope":5061,"src":"1491:17:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5051,"name":"uint256","nodeType":"ElementaryTypeName","src":"1491:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5056,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5053,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5044,"src":"1511:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5054,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4992,"src":"1515:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1511:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1491:27:38"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5057,"name":"aInflated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5052,"src":"1625:9:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5058,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5046,"src":"1637:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1625:13:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5050,"id":5060,"nodeType":"Return","src":"1618:20:38"}]},"id":5062,"implemented":true,"kind":"function","modifiers":[],"name":"divDown","nameLocation":"1329:7:38","nodeType":"FunctionDefinition","parameters":{"id":5047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5044,"mutability":"mutable","name":"a","nameLocation":"1345:1:38","nodeType":"VariableDeclaration","scope":5062,"src":"1337:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5043,"name":"uint256","nodeType":"ElementaryTypeName","src":"1337:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5046,"mutability":"mutable","name":"b","nameLocation":"1356:1:38","nodeType":"VariableDeclaration","scope":5062,"src":"1348:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5045,"name":"uint256","nodeType":"ElementaryTypeName","src":"1348:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1336:22:38"},"returnParameters":{"id":5050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5049,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5062,"src":"1382:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5048,"name":"uint256","nodeType":"ElementaryTypeName","src":"1382:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1381:9:38"},"scope":5280,"src":"1320:325:38","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5077,"nodeType":"Block","src":"1727:43:38","statements":[{"expression":{"arguments":[{"id":5072,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5064,"src":"1753:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5073,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4992,"src":"1756:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5074,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5066,"src":"1761:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5071,"name":"mulDivUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5106,"src":"1744:8:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":5075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1744:19:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5070,"id":5076,"nodeType":"Return","src":"1737:26:38"}]},"id":5078,"implemented":true,"kind":"function","modifiers":[],"name":"divUp","nameLocation":"1660:5:38","nodeType":"FunctionDefinition","parameters":{"id":5067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5064,"mutability":"mutable","name":"a","nameLocation":"1674:1:38","nodeType":"VariableDeclaration","scope":5078,"src":"1666:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5063,"name":"uint256","nodeType":"ElementaryTypeName","src":"1666:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5066,"mutability":"mutable","name":"b","nameLocation":"1685:1:38","nodeType":"VariableDeclaration","scope":5078,"src":"1677:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5065,"name":"uint256","nodeType":"ElementaryTypeName","src":"1677:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1665:22:38"},"returnParameters":{"id":5070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5069,"mutability":"mutable","name":"result","nameLocation":"1719:6:38","nodeType":"VariableDeclaration","scope":5078,"src":"1711:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5068,"name":"uint256","nodeType":"ElementaryTypeName","src":"1711:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1710:16:38"},"scope":5280,"src":"1651:119:38","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5105,"nodeType":"Block","src":"1912:774:38","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5090,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5085,"src":"2004:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5091,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2009:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2004:6:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5097,"nodeType":"IfStatement","src":"2000:58:38","trueBody":{"id":5096,"nodeType":"Block","src":"2012:46:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5093,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4989,"src":"2033:12:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2033:14:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5095,"nodeType":"RevertStatement","src":"2026:21:38"}]}},{"assignments":[5099],"declarations":[{"constant":false,"id":5099,"mutability":"mutable","name":"product","nameLocation":"2143:7:38","nodeType":"VariableDeclaration","scope":5105,"src":"2135:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5098,"name":"uint256","nodeType":"ElementaryTypeName","src":"2135:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5103,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5100,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5081,"src":"2153:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5101,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5083,"src":"2157:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2153:5:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2135:23:38"},{"AST":{"nativeSrc":"2585:95:38","nodeType":"YulBlock","src":"2585:95:38","statements":[{"nativeSrc":"2599:71:38","nodeType":"YulAssignment","src":"2599:71:38","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2627:7:38","nodeType":"YulIdentifier","src":"2627:7:38"}],"functionName":{"name":"iszero","nativeSrc":"2620:6:38","nodeType":"YulIdentifier","src":"2620:6:38"},"nativeSrc":"2620:15:38","nodeType":"YulFunctionCall","src":"2620:15:38"}],"functionName":{"name":"iszero","nativeSrc":"2613:6:38","nodeType":"YulIdentifier","src":"2613:6:38"},"nativeSrc":"2613:23:38","nodeType":"YulFunctionCall","src":"2613:23:38"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2650:7:38","nodeType":"YulIdentifier","src":"2650:7:38"},{"kind":"number","nativeSrc":"2659:1:38","nodeType":"YulLiteral","src":"2659:1:38","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"2646:3:38","nodeType":"YulIdentifier","src":"2646:3:38"},"nativeSrc":"2646:15:38","nodeType":"YulFunctionCall","src":"2646:15:38"},{"name":"c","nativeSrc":"2663:1:38","nodeType":"YulIdentifier","src":"2663:1:38"}],"functionName":{"name":"div","nativeSrc":"2642:3:38","nodeType":"YulIdentifier","src":"2642:3:38"},"nativeSrc":"2642:23:38","nodeType":"YulFunctionCall","src":"2642:23:38"},{"kind":"number","nativeSrc":"2667:1:38","nodeType":"YulLiteral","src":"2667:1:38","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"2638:3:38","nodeType":"YulIdentifier","src":"2638:3:38"},"nativeSrc":"2638:31:38","nodeType":"YulFunctionCall","src":"2638:31:38"}],"functionName":{"name":"mul","nativeSrc":"2609:3:38","nodeType":"YulIdentifier","src":"2609:3:38"},"nativeSrc":"2609:61:38","nodeType":"YulFunctionCall","src":"2609:61:38"},"variableNames":[{"name":"result","nativeSrc":"2599:6:38","nodeType":"YulIdentifier","src":"2599:6:38"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":5085,"isOffset":false,"isSlot":false,"src":"2663:1:38","valueSize":1},{"declaration":5099,"isOffset":false,"isSlot":false,"src":"2627:7:38","valueSize":1},{"declaration":5099,"isOffset":false,"isSlot":false,"src":"2650:7:38","valueSize":1},{"declaration":5088,"isOffset":false,"isSlot":false,"src":"2599:6:38","valueSize":1}],"flags":["memory-safe"],"id":5104,"nodeType":"InlineAssembly","src":"2560:120:38"}]},"documentation":{"id":5079,"nodeType":"StructuredDocumentation","src":"1776:41:38","text":"@dev Return (a * b) / c, rounding up."},"id":5106,"implemented":true,"kind":"function","modifiers":[],"name":"mulDivUp","nameLocation":"1831:8:38","nodeType":"FunctionDefinition","parameters":{"id":5086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5081,"mutability":"mutable","name":"a","nameLocation":"1848:1:38","nodeType":"VariableDeclaration","scope":5106,"src":"1840:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5080,"name":"uint256","nodeType":"ElementaryTypeName","src":"1840:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5083,"mutability":"mutable","name":"b","nameLocation":"1859:1:38","nodeType":"VariableDeclaration","scope":5106,"src":"1851:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5082,"name":"uint256","nodeType":"ElementaryTypeName","src":"1851:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5085,"mutability":"mutable","name":"c","nameLocation":"1870:1:38","nodeType":"VariableDeclaration","scope":5106,"src":"1862:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5084,"name":"uint256","nodeType":"ElementaryTypeName","src":"1862:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1839:33:38"},"returnParameters":{"id":5089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5088,"mutability":"mutable","name":"result","nameLocation":"1904:6:38","nodeType":"VariableDeclaration","scope":5106,"src":"1896:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5087,"name":"uint256","nodeType":"ElementaryTypeName","src":"1896:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1895:16:38"},"scope":5280,"src":"1822:864:38","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5125,"nodeType":"Block","src":"3159:345:38","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5116,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5111,"src":"3251:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3256:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3251:6:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5123,"nodeType":"IfStatement","src":"3247:58:38","trueBody":{"id":5122,"nodeType":"Block","src":"3259:46:38","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5119,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4989,"src":"3280:12:38","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3280:14:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5121,"nodeType":"RevertStatement","src":"3273:21:38"}]}},{"AST":{"nativeSrc":"3415:83:38","nodeType":"YulBlock","src":"3415:83:38","statements":[{"nativeSrc":"3429:59:38","nodeType":"YulAssignment","src":"3429:59:38","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3457:1:38","nodeType":"YulIdentifier","src":"3457:1:38"}],"functionName":{"name":"iszero","nativeSrc":"3450:6:38","nodeType":"YulIdentifier","src":"3450:6:38"},"nativeSrc":"3450:9:38","nodeType":"YulFunctionCall","src":"3450:9:38"}],"functionName":{"name":"iszero","nativeSrc":"3443:6:38","nodeType":"YulIdentifier","src":"3443:6:38"},"nativeSrc":"3443:17:38","nodeType":"YulFunctionCall","src":"3443:17:38"},{"arguments":[{"kind":"number","nativeSrc":"3466:1:38","nodeType":"YulLiteral","src":"3466:1:38","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3477:1:38","nodeType":"YulIdentifier","src":"3477:1:38"},{"kind":"number","nativeSrc":"3480:1:38","nodeType":"YulLiteral","src":"3480:1:38","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"3473:3:38","nodeType":"YulIdentifier","src":"3473:3:38"},"nativeSrc":"3473:9:38","nodeType":"YulFunctionCall","src":"3473:9:38"},{"name":"b","nativeSrc":"3484:1:38","nodeType":"YulIdentifier","src":"3484:1:38"}],"functionName":{"name":"div","nativeSrc":"3469:3:38","nodeType":"YulIdentifier","src":"3469:3:38"},"nativeSrc":"3469:17:38","nodeType":"YulFunctionCall","src":"3469:17:38"}],"functionName":{"name":"add","nativeSrc":"3462:3:38","nodeType":"YulIdentifier","src":"3462:3:38"},"nativeSrc":"3462:25:38","nodeType":"YulFunctionCall","src":"3462:25:38"}],"functionName":{"name":"mul","nativeSrc":"3439:3:38","nodeType":"YulIdentifier","src":"3439:3:38"},"nativeSrc":"3439:49:38","nodeType":"YulFunctionCall","src":"3439:49:38"},"variableNames":[{"name":"result","nativeSrc":"3429:6:38","nodeType":"YulIdentifier","src":"3429:6:38"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":5109,"isOffset":false,"isSlot":false,"src":"3457:1:38","valueSize":1},{"declaration":5109,"isOffset":false,"isSlot":false,"src":"3477:1:38","valueSize":1},{"declaration":5111,"isOffset":false,"isSlot":false,"src":"3484:1:38","valueSize":1},{"declaration":5114,"isOffset":false,"isSlot":false,"src":"3429:6:38","valueSize":1}],"flags":["memory-safe"],"id":5124,"nodeType":"InlineAssembly","src":"3390:108:38"}]},"documentation":{"id":5107,"nodeType":"StructuredDocumentation","src":"2692:383:38","text":" @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n This can occur in calculations with many successive multiplications and divisions, and\n we want to minimize the number of operations by avoiding unnecessary scaling by ONE."},"id":5126,"implemented":true,"kind":"function","modifiers":[],"name":"divUpRaw","nameLocation":"3089:8:38","nodeType":"FunctionDefinition","parameters":{"id":5112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5109,"mutability":"mutable","name":"a","nameLocation":"3106:1:38","nodeType":"VariableDeclaration","scope":5126,"src":"3098:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5108,"name":"uint256","nodeType":"ElementaryTypeName","src":"3098:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5111,"mutability":"mutable","name":"b","nameLocation":"3117:1:38","nodeType":"VariableDeclaration","scope":5126,"src":"3109:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5110,"name":"uint256","nodeType":"ElementaryTypeName","src":"3109:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3097:22:38"},"returnParameters":{"id":5115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5114,"mutability":"mutable","name":"result","nameLocation":"3151:6:38","nodeType":"VariableDeclaration","scope":5126,"src":"3143:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5113,"name":"uint256","nodeType":"ElementaryTypeName","src":"3143:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3142:16:38"},"scope":5280,"src":"3080:424:38","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5201,"nodeType":"Block","src":"3807:723:38","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5136,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5131,"src":"3975:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5137,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4992,"src":"3980:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3975:8:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5142,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5131,"src":"4028:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5143,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4997,"src":"4033:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4028:8:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5151,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5131,"src":"4093:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5152,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5002,"src":"4098:4:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4093:9:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5197,"nodeType":"Block","src":"4209:315:38","statements":[{"assignments":[5168],"declarations":[{"constant":false,"id":5168,"mutability":"mutable","name":"raw","nameLocation":"4231:3:38","nodeType":"VariableDeclaration","scope":5197,"src":"4223:11:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5167,"name":"uint256","nodeType":"ElementaryTypeName","src":"4223:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5174,"initialValue":{"arguments":[{"id":5171,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5129,"src":"4252:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5172,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5131,"src":"4255:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5169,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6636,"src":"4237:10:38","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$6636_$","typeString":"type(library LogExpMath)"}},"id":5170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4248:3:38","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":5539,"src":"4237:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4237:20:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4223:34:38"},{"assignments":[5176],"declarations":[{"constant":false,"id":5176,"mutability":"mutable","name":"maxError","nameLocation":"4279:8:38","nodeType":"VariableDeclaration","scope":5197,"src":"4271:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5175,"name":"uint256","nodeType":"ElementaryTypeName","src":"4271:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5183,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5178,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5168,"src":"4296:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5179,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5005,"src":"4301:22:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5177,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5042,"src":"4290:5:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4290:34:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":5181,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4327:1:38","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4290:38:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4271:57:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5184,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5168,"src":"4347:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5185,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5176,"src":"4353:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4347:14:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5195,"nodeType":"Block","src":"4410:104:38","statements":[{"id":5194,"nodeType":"UncheckedBlock","src":"4428:72:38","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5190,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5168,"src":"4467:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":5191,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5176,"src":"4473:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4467:14:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5135,"id":5193,"nodeType":"Return","src":"4460:21:38"}]}]},"id":5196,"nodeType":"IfStatement","src":"4343:171:38","trueBody":{"id":5189,"nodeType":"Block","src":"4363:41:38","statements":[{"expression":{"hexValue":"30","id":5187,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4388:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":5135,"id":5188,"nodeType":"Return","src":"4381:8:38"}]}}]},"id":5198,"nodeType":"IfStatement","src":"4089:435:38","trueBody":{"id":5166,"nodeType":"Block","src":"4104:99:38","statements":[{"assignments":[5155],"declarations":[{"constant":false,"id":5155,"mutability":"mutable","name":"square","nameLocation":"4126:6:38","nodeType":"VariableDeclaration","scope":5166,"src":"4118:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5154,"name":"uint256","nodeType":"ElementaryTypeName","src":"4118:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5160,"initialValue":{"arguments":[{"id":5157,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5129,"src":"4143:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5158,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5129,"src":"4146:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5156,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5025,"src":"4135:7:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4135:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4118:30:38"},{"expression":{"arguments":[{"id":5162,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5155,"src":"4177:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5163,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5155,"src":"4185:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5161,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5025,"src":"4169:7:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4169:23:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5135,"id":5165,"nodeType":"Return","src":"4162:30:38"}]}},"id":5199,"nodeType":"IfStatement","src":"4024:500:38","trueBody":{"id":5150,"nodeType":"Block","src":"4038:45:38","statements":[{"expression":{"arguments":[{"id":5146,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5129,"src":"4067:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5147,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5129,"src":"4070:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5145,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5025,"src":"4059:7:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4059:13:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5135,"id":5149,"nodeType":"Return","src":"4052:20:38"}]}},"id":5200,"nodeType":"IfStatement","src":"3971:553:38","trueBody":{"id":5141,"nodeType":"Block","src":"3985:33:38","statements":[{"expression":{"id":5139,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5129,"src":"4006:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5135,"id":5140,"nodeType":"Return","src":"3999:8:38"}]}}]},"documentation":{"id":5127,"nodeType":"StructuredDocumentation","src":"3510:221:38","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n the true value (that is, the error function expected - actual is always positive)."},"id":5202,"implemented":true,"kind":"function","modifiers":[],"name":"powDown","nameLocation":"3745:7:38","nodeType":"FunctionDefinition","parameters":{"id":5132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5129,"mutability":"mutable","name":"x","nameLocation":"3761:1:38","nodeType":"VariableDeclaration","scope":5202,"src":"3753:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5128,"name":"uint256","nodeType":"ElementaryTypeName","src":"3753:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5131,"mutability":"mutable","name":"y","nameLocation":"3772:1:38","nodeType":"VariableDeclaration","scope":5202,"src":"3764:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5130,"name":"uint256","nodeType":"ElementaryTypeName","src":"3764:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3752:22:38"},"returnParameters":{"id":5135,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5134,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5202,"src":"3798:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5133,"name":"uint256","nodeType":"ElementaryTypeName","src":"3798:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3797:9:38"},"scope":5280,"src":"3736:794:38","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5268,"nodeType":"Block","src":"4829:568:38","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5212,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5207,"src":"4997:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5213,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4992,"src":"5002:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4997:8:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5218,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5207,"src":"5050:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5219,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4997,"src":"5055:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5050:8:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5227,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5207,"src":"5113:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":5228,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5002,"src":"5118:4:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5113:9:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5264,"nodeType":"Block","src":"5225:166:38","statements":[{"assignments":[5244],"declarations":[{"constant":false,"id":5244,"mutability":"mutable","name":"raw","nameLocation":"5247:3:38","nodeType":"VariableDeclaration","scope":5264,"src":"5239:11:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5243,"name":"uint256","nodeType":"ElementaryTypeName","src":"5239:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5250,"initialValue":{"arguments":[{"id":5247,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5205,"src":"5268:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5248,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5207,"src":"5271:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5245,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6636,"src":"5253:10:38","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$6636_$","typeString":"type(library LogExpMath)"}},"id":5246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5264:3:38","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":5539,"src":"5253:14:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5253:20:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5239:34:38"},{"assignments":[5252],"declarations":[{"constant":false,"id":5252,"mutability":"mutable","name":"maxError","nameLocation":"5295:8:38","nodeType":"VariableDeclaration","scope":5264,"src":"5287:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5251,"name":"uint256","nodeType":"ElementaryTypeName","src":"5287:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5259,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5254,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5244,"src":"5312:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5255,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5005,"src":"5317:22:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5253,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5042,"src":"5306:5:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5306:34:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":5257,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5343:1:38","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5306:38:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5287:57:38"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5260,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5244,"src":"5366:3:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":5261,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5252,"src":"5372:8:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5366:14:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5211,"id":5263,"nodeType":"Return","src":"5359:21:38"}]},"id":5265,"nodeType":"IfStatement","src":"5109:282:38","trueBody":{"id":5242,"nodeType":"Block","src":"5124:95:38","statements":[{"assignments":[5231],"declarations":[{"constant":false,"id":5231,"mutability":"mutable","name":"square","nameLocation":"5146:6:38","nodeType":"VariableDeclaration","scope":5242,"src":"5138:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5230,"name":"uint256","nodeType":"ElementaryTypeName","src":"5138:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5236,"initialValue":{"arguments":[{"id":5233,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5205,"src":"5161:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5234,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5205,"src":"5164:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5232,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5042,"src":"5155:5:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5155:11:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5138:28:38"},{"expression":{"arguments":[{"id":5238,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5231,"src":"5193:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5239,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5231,"src":"5201:6:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5237,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5042,"src":"5187:5:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5187:21:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5211,"id":5241,"nodeType":"Return","src":"5180:28:38"}]}},"id":5266,"nodeType":"IfStatement","src":"5046:345:38","trueBody":{"id":5226,"nodeType":"Block","src":"5060:43:38","statements":[{"expression":{"arguments":[{"id":5222,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5205,"src":"5087:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5223,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5205,"src":"5090:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5221,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5042,"src":"5081:5:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5081:11:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5211,"id":5225,"nodeType":"Return","src":"5074:18:38"}]}},"id":5267,"nodeType":"IfStatement","src":"4993:398:38","trueBody":{"id":5217,"nodeType":"Block","src":"5007:33:38","statements":[{"expression":{"id":5215,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5205,"src":"5028:1:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5211,"id":5216,"nodeType":"Return","src":"5021:8:38"}]}}]},"documentation":{"id":5203,"nodeType":"StructuredDocumentation","src":"4536:219:38","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n the true value (that is, the error function expected - actual is always negative)."},"id":5269,"implemented":true,"kind":"function","modifiers":[],"name":"powUp","nameLocation":"4769:5:38","nodeType":"FunctionDefinition","parameters":{"id":5208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5205,"mutability":"mutable","name":"x","nameLocation":"4783:1:38","nodeType":"VariableDeclaration","scope":5269,"src":"4775:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5204,"name":"uint256","nodeType":"ElementaryTypeName","src":"4775:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5207,"mutability":"mutable","name":"y","nameLocation":"4794:1:38","nodeType":"VariableDeclaration","scope":5269,"src":"4786:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5206,"name":"uint256","nodeType":"ElementaryTypeName","src":"4786:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4774:22:38"},"returnParameters":{"id":5211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5210,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5269,"src":"4820:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5209,"name":"uint256","nodeType":"ElementaryTypeName","src":"4820:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4819:9:38"},"scope":5280,"src":"4760:637:38","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5278,"nodeType":"Block","src":"5750:175:38","statements":[{"AST":{"nativeSrc":"5857:62:38","nodeType":"YulBlock","src":"5857:62:38","statements":[{"nativeSrc":"5871:38:38","nodeType":"YulAssignment","src":"5871:38:38","value":{"arguments":[{"arguments":[{"name":"x","nativeSrc":"5888:1:38","nodeType":"YulIdentifier","src":"5888:1:38"},{"name":"ONE","nativeSrc":"5891:3:38","nodeType":"YulIdentifier","src":"5891:3:38"}],"functionName":{"name":"lt","nativeSrc":"5885:2:38","nodeType":"YulIdentifier","src":"5885:2:38"},"nativeSrc":"5885:10:38","nodeType":"YulFunctionCall","src":"5885:10:38"},{"arguments":[{"name":"ONE","nativeSrc":"5901:3:38","nodeType":"YulIdentifier","src":"5901:3:38"},{"name":"x","nativeSrc":"5906:1:38","nodeType":"YulIdentifier","src":"5906:1:38"}],"functionName":{"name":"sub","nativeSrc":"5897:3:38","nodeType":"YulIdentifier","src":"5897:3:38"},"nativeSrc":"5897:11:38","nodeType":"YulFunctionCall","src":"5897:11:38"}],"functionName":{"name":"mul","nativeSrc":"5881:3:38","nodeType":"YulIdentifier","src":"5881:3:38"},"nativeSrc":"5881:28:38","nodeType":"YulFunctionCall","src":"5881:28:38"},"variableNames":[{"name":"result","nativeSrc":"5871:6:38","nodeType":"YulIdentifier","src":"5871:6:38"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4992,"isOffset":false,"isSlot":false,"src":"5891:3:38","valueSize":1},{"declaration":4992,"isOffset":false,"isSlot":false,"src":"5901:3:38","valueSize":1},{"declaration":5275,"isOffset":false,"isSlot":false,"src":"5871:6:38","valueSize":1},{"declaration":5272,"isOffset":false,"isSlot":false,"src":"5888:1:38","valueSize":1},{"declaration":5272,"isOffset":false,"isSlot":false,"src":"5906:1:38","valueSize":1}],"flags":["memory-safe"],"id":5277,"nodeType":"InlineAssembly","src":"5832:87:38"}]},"documentation":{"id":5270,"nodeType":"StructuredDocumentation","src":"5403:272:38","text":" @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n Useful when computing the complement for values with some level of relative error, as it strips this error and\n prevents intermediate negative values."},"id":5279,"implemented":true,"kind":"function","modifiers":[],"name":"complement","nameLocation":"5689:10:38","nodeType":"FunctionDefinition","parameters":{"id":5273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5272,"mutability":"mutable","name":"x","nameLocation":"5708:1:38","nodeType":"VariableDeclaration","scope":5279,"src":"5700:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5271,"name":"uint256","nodeType":"ElementaryTypeName","src":"5700:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5699:11:38"},"returnParameters":{"id":5276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5275,"mutability":"mutable","name":"result","nameLocation":"5742:6:38","nodeType":"VariableDeclaration","scope":5279,"src":"5734:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5274,"name":"uint256","nodeType":"ElementaryTypeName","src":"5734:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5733:16:38"},"scope":5280,"src":"5680:245:38","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":5281,"src":"239:5688:38","usedErrors":[4989],"usedEvents":[]}],"src":"46:5882:38"},"id":38},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","exportedSymbols":{"LogExpMath":[6636]},"id":6637,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":5282,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:39"},{"abstract":false,"baseContracts":[],"canonicalName":"LogExpMath","contractDependencies":[],"contractKind":"library","documentation":{"id":5283,"nodeType":"StructuredDocumentation","src":"79:515:39","text":" @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n exponentiation and logarithm (where the base is Euler's number).\n All math operations are unchecked in order to save gas.\n @author Fernando Martinelli - @fernandomartinelli\n @author Sergio Yuhjtman - @sergioyuhjtman\n @author Daniel Fernandez - @dmf7z"},"fullyImplemented":true,"id":6636,"linearizedBaseContracts":[6636],"name":"LogExpMath","nameLocation":"603:10:39","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":5284,"nodeType":"StructuredDocumentation","src":"620:79:39","text":"@notice This error is thrown when a base is not within an acceptable range."},"errorSelector":"022701e0","id":5286,"name":"BaseOutOfBounds","nameLocation":"710:15:39","nodeType":"ErrorDefinition","parameters":{"id":5285,"nodeType":"ParameterList","parameters":[],"src":"725:2:39"},"src":"704:24:39"},{"documentation":{"id":5287,"nodeType":"StructuredDocumentation","src":"734:83:39","text":"@notice This error is thrown when a exponent is not within an acceptable range."},"errorSelector":"d8317311","id":5289,"name":"ExponentOutOfBounds","nameLocation":"828:19:39","nodeType":"ErrorDefinition","parameters":{"id":5288,"nodeType":"ParameterList","parameters":[],"src":"847:2:39"},"src":"822:28:39"},{"documentation":{"id":5290,"nodeType":"StructuredDocumentation","src":"856:96:39","text":"@notice This error is thrown when the exponent * ln(base) is not within an acceptable range."},"errorSelector":"a2f9f7e3","id":5292,"name":"ProductOutOfBounds","nameLocation":"963:18:39","nodeType":"ErrorDefinition","parameters":{"id":5291,"nodeType":"ParameterList","parameters":[],"src":"981:2:39"},"src":"957:27:39"},{"documentation":{"id":5293,"nodeType":"StructuredDocumentation","src":"990:109:39","text":"@notice This error is thrown when an exponent used in the exp function is not within an acceptable range."},"errorSelector":"d4794efd","id":5295,"name":"InvalidExponent","nameLocation":"1110:15:39","nodeType":"ErrorDefinition","parameters":{"id":5294,"nodeType":"ParameterList","parameters":[],"src":"1125:2:39"},"src":"1104:24:39"},{"documentation":{"id":5296,"nodeType":"StructuredDocumentation","src":"1134:119:39","text":"@notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function."},"errorSelector":"b4120f14","id":5298,"name":"OutOfBounds","nameLocation":"1264:11:39","nodeType":"ErrorDefinition","parameters":{"id":5297,"nodeType":"ParameterList","parameters":[],"src":"1275:2:39"},"src":"1258:20:39"},{"constant":true,"id":5301,"mutability":"constant","name":"ONE_18","nameLocation":"1555:6:39","nodeType":"VariableDeclaration","scope":6636,"src":"1539:29:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5299,"name":"int256","nodeType":"ElementaryTypeName","src":"1539:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653138","id":5300,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1564:4:39","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":5304,"mutability":"constant","name":"ONE_20","nameLocation":"1745:6:39","nodeType":"VariableDeclaration","scope":6636,"src":"1729:29:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5302,"name":"int256","nodeType":"ElementaryTypeName","src":"1729:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653230","id":5303,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1754:4:39","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"1e20"},"visibility":"internal"},{"constant":true,"id":5307,"mutability":"constant","name":"ONE_36","nameLocation":"1780:6:39","nodeType":"VariableDeclaration","scope":6636,"src":"1764:29:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5305,"name":"int256","nodeType":"ElementaryTypeName","src":"1764:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653336","id":5306,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1789:4:39","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(29 digits omitted)...0000"},"value":"1e36"},"visibility":"internal"},{"constant":true,"id":5310,"mutability":"constant","name":"MAX_NATURAL_EXPONENT","nameLocation":"2326:20:39","nodeType":"VariableDeclaration","scope":6636,"src":"2310:45:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5308,"name":"int256","nodeType":"ElementaryTypeName","src":"2310:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313330653138","id":5309,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2349:6:39","typeDescriptions":{"typeIdentifier":"t_rational_130000000000000000000_by_1","typeString":"int_const 130000000000000000000"},"value":"130e18"},"visibility":"internal"},{"constant":true,"id":5314,"mutability":"constant","name":"MIN_NATURAL_EXPONENT","nameLocation":"2377:20:39","nodeType":"VariableDeclaration","scope":6636,"src":"2361:45:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5311,"name":"int256","nodeType":"ElementaryTypeName","src":"2361:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"id":5313,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"2400:6:39","subExpression":{"hexValue":"3431653138","id":5312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2401:5:39","typeDescriptions":{"typeIdentifier":"t_rational_41000000000000000000_by_1","typeString":"int_const 41000000000000000000"},"value":"41e18"},"typeDescriptions":{"typeIdentifier":"t_rational_minus_41000000000000000000_by_1","typeString":"int_const -41000000000000000000"}},"visibility":"internal"},{"constant":true,"id":5319,"mutability":"constant","name":"LN_36_LOWER_BOUND","nameLocation":"2573:17:39","nodeType":"VariableDeclaration","scope":6636,"src":"2557:49:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5315,"name":"int256","nodeType":"ElementaryTypeName","src":"2557:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5318,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5316,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"2593:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31653137","id":5317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2602:4:39","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2593:13:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":5324,"mutability":"constant","name":"LN_36_UPPER_BOUND","nameLocation":"2628:17:39","nodeType":"VariableDeclaration","scope":6636,"src":"2612:49:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5320,"name":"int256","nodeType":"ElementaryTypeName","src":"2612:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5323,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5321,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"2648:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31653137","id":5322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2657:4:39","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2648:13:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":5334,"mutability":"constant","name":"MILD_EXPONENT_BOUND","nameLocation":"2685:19:39","nodeType":"VariableDeclaration","scope":6636,"src":"2668:65:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5325,"name":"uint256","nodeType":"ElementaryTypeName","src":"2668:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5333,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"},"id":5328,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":5326,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2707:1:39","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"323534","id":5327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2712:3:39","typeDescriptions":{"typeIdentifier":"t_rational_254_by_1","typeString":"int_const 254"},"value":"254"},"src":"2707:8:39","typeDescriptions":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"arguments":[{"id":5331,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"2726:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5330,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2718:7:39","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5329,"name":"uint256","nodeType":"ElementaryTypeName","src":"2718:7:39","typeDescriptions":{}}},"id":5332,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2718:15:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2707:26:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":5337,"mutability":"constant","name":"x0","nameLocation":"2784:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"2768:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5335,"name":"int256","nodeType":"ElementaryTypeName","src":"2768:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238303030303030303030303030303030303030","id":5336,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2789:21:39","typeDescriptions":{"typeIdentifier":"t_rational_128000000000000000000_by_1","typeString":"int_const 128000000000000000000"},"value":"128000000000000000000"},"visibility":"internal"},{"constant":true,"id":5340,"mutability":"constant","name":"a0","nameLocation":"2840:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"2824:77:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5338,"name":"int256","nodeType":"ElementaryTypeName","src":"2824:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3338383737303834303539393435393530393232323030303030303030303030303030303030303030303030303030303030303030303030","id":5339,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2845:56:39","typeDescriptions":{"typeIdentifier":"t_rational_38877084059945950922200000000000000000000000000000000000_by_1","typeString":"int_const 3887...(48 digits omitted)...0000"},"value":"38877084059945950922200000000000000000000000000000000000"},"visibility":"internal"},{"constant":true,"id":5343,"mutability":"constant","name":"x1","nameLocation":"2948:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"2932:41:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5341,"name":"int256","nodeType":"ElementaryTypeName","src":"2932:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3634303030303030303030303030303030303030","id":5342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2953:20:39","typeDescriptions":{"typeIdentifier":"t_rational_64000000000000000000_by_1","typeString":"int_const 64000000000000000000"},"value":"64000000000000000000"},"visibility":"internal"},{"constant":true,"id":5346,"mutability":"constant","name":"a1","nameLocation":"3003:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"2987:49:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5344,"name":"int256","nodeType":"ElementaryTypeName","src":"2987:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323335313439303830383131363136383832393130303030303030","id":5345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3008:28:39","typeDescriptions":{"typeIdentifier":"t_rational_6235149080811616882910000000_by_1","typeString":"int_const 6235149080811616882910000000"},"value":"6235149080811616882910000000"},"visibility":"internal"},{"constant":true,"id":5349,"mutability":"constant","name":"x2","nameLocation":"3112:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"3096:43:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5347,"name":"int256","nodeType":"ElementaryTypeName","src":"3096:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"33323030303030303030303030303030303030303030","id":5348,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3117:22:39","typeDescriptions":{"typeIdentifier":"t_rational_3200000000000000000000_by_1","typeString":"int_const 3200000000000000000000"},"value":"3200000000000000000000"},"visibility":"internal"},{"constant":true,"id":5352,"mutability":"constant","name":"a2","nameLocation":"3169:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"3153:55:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5350,"name":"int256","nodeType":"ElementaryTypeName","src":"3153:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"37383936323936303138323638303639353136313030303030303030303030303030","id":5351,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3174:34:39","typeDescriptions":{"typeIdentifier":"t_rational_7896296018268069516100000000000000_by_1","typeString":"int_const 7896...(26 digits omitted)...0000"},"value":"7896296018268069516100000000000000"},"visibility":"internal"},{"constant":true,"id":5355,"mutability":"constant","name":"x3","nameLocation":"3241:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"3225:43:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5353,"name":"int256","nodeType":"ElementaryTypeName","src":"3225:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31363030303030303030303030303030303030303030","id":5354,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3246:22:39","typeDescriptions":{"typeIdentifier":"t_rational_1600000000000000000000_by_1","typeString":"int_const 1600000000000000000000"},"value":"1600000000000000000000"},"visibility":"internal"},{"constant":true,"id":5358,"mutability":"constant","name":"a3","nameLocation":"3298:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"3282:48:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5356,"name":"int256","nodeType":"ElementaryTypeName","src":"3282:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383838363131303532303530373837323633363736303030303030","id":5357,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3303:27:39","typeDescriptions":{"typeIdentifier":"t_rational_888611052050787263676000000_by_1","typeString":"int_const 888611052050787263676000000"},"value":"888611052050787263676000000"},"visibility":"internal"},{"constant":true,"id":5361,"mutability":"constant","name":"x4","nameLocation":"3363:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"3347:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5359,"name":"int256","nodeType":"ElementaryTypeName","src":"3347:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383030303030303030303030303030303030303030","id":5360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3368:21:39","typeDescriptions":{"typeIdentifier":"t_rational_800000000000000000000_by_1","typeString":"int_const 800000000000000000000"},"value":"800000000000000000000"},"visibility":"internal"},{"constant":true,"id":5364,"mutability":"constant","name":"a4","nameLocation":"3419:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"3403:45:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5362,"name":"int256","nodeType":"ElementaryTypeName","src":"3403:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323938303935373938373034313732383237343734303030","id":5363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3424:24:39","typeDescriptions":{"typeIdentifier":"t_rational_298095798704172827474000_by_1","typeString":"int_const 298095798704172827474000"},"value":"298095798704172827474000"},"visibility":"internal"},{"constant":true,"id":5367,"mutability":"constant","name":"x5","nameLocation":"3481:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"3465:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5365,"name":"int256","nodeType":"ElementaryTypeName","src":"3465:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"343030303030303030303030303030303030303030","id":5366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3486:21:39","typeDescriptions":{"typeIdentifier":"t_rational_400000000000000000000_by_1","typeString":"int_const 400000000000000000000"},"value":"400000000000000000000"},"visibility":"internal"},{"constant":true,"id":5370,"mutability":"constant","name":"a5","nameLocation":"3537:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"3521:43:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5368,"name":"int256","nodeType":"ElementaryTypeName","src":"3521:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"35343539383135303033333134343233393037383130","id":5369,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3542:22:39","typeDescriptions":{"typeIdentifier":"t_rational_5459815003314423907810_by_1","typeString":"int_const 5459815003314423907810"},"value":"5459815003314423907810"},"visibility":"internal"},{"constant":true,"id":5373,"mutability":"constant","name":"x6","nameLocation":"3597:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"3581:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5371,"name":"int256","nodeType":"ElementaryTypeName","src":"3581:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323030303030303030303030303030303030303030","id":5372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3602:21:39","typeDescriptions":{"typeIdentifier":"t_rational_200000000000000000000_by_1","typeString":"int_const 200000000000000000000"},"value":"200000000000000000000"},"visibility":"internal"},{"constant":true,"id":5376,"mutability":"constant","name":"a6","nameLocation":"3653:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"3637:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5374,"name":"int256","nodeType":"ElementaryTypeName","src":"3637:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"373338393035363039383933303635303232373233","id":5375,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3658:21:39","typeDescriptions":{"typeIdentifier":"t_rational_738905609893065022723_by_1","typeString":"int_const 738905609893065022723"},"value":"738905609893065022723"},"visibility":"internal"},{"constant":true,"id":5379,"mutability":"constant","name":"x7","nameLocation":"3712:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"3696:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5377,"name":"int256","nodeType":"ElementaryTypeName","src":"3696:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313030303030303030303030303030303030303030","id":5378,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3717:21:39","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"100000000000000000000"},"visibility":"internal"},{"constant":true,"id":5382,"mutability":"constant","name":"a7","nameLocation":"3768:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"3752:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5380,"name":"int256","nodeType":"ElementaryTypeName","src":"3752:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323731383238313832383435393034353233353336","id":5381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3773:21:39","typeDescriptions":{"typeIdentifier":"t_rational_271828182845904523536_by_1","typeString":"int_const 271828182845904523536"},"value":"271828182845904523536"},"visibility":"internal"},{"constant":true,"id":5385,"mutability":"constant","name":"x8","nameLocation":"3827:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"3811:41:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5383,"name":"int256","nodeType":"ElementaryTypeName","src":"3811:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3530303030303030303030303030303030303030","id":5384,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3832:20:39","typeDescriptions":{"typeIdentifier":"t_rational_50000000000000000000_by_1","typeString":"int_const 50000000000000000000"},"value":"50000000000000000000"},"visibility":"internal"},{"constant":true,"id":5388,"mutability":"constant","name":"a8","nameLocation":"3883:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"3867:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5386,"name":"int256","nodeType":"ElementaryTypeName","src":"3867:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313634383732313237303730303132383134363835","id":5387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3888:21:39","typeDescriptions":{"typeIdentifier":"t_rational_164872127070012814685_by_1","typeString":"int_const 164872127070012814685"},"value":"164872127070012814685"},"visibility":"internal"},{"constant":true,"id":5391,"mutability":"constant","name":"x9","nameLocation":"3942:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"3926:41:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5389,"name":"int256","nodeType":"ElementaryTypeName","src":"3926:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3235303030303030303030303030303030303030","id":5390,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3947:20:39","typeDescriptions":{"typeIdentifier":"t_rational_25000000000000000000_by_1","typeString":"int_const 25000000000000000000"},"value":"25000000000000000000"},"visibility":"internal"},{"constant":true,"id":5394,"mutability":"constant","name":"a9","nameLocation":"3998:2:39","nodeType":"VariableDeclaration","scope":6636,"src":"3982:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5392,"name":"int256","nodeType":"ElementaryTypeName","src":"3982:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238343032353431363638373734313438343037","id":5393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4003:21:39","typeDescriptions":{"typeIdentifier":"t_rational_128402541668774148407_by_1","typeString":"int_const 128402541668774148407"},"value":"128402541668774148407"},"visibility":"internal"},{"constant":true,"id":5397,"mutability":"constant","name":"x10","nameLocation":"4057:3:39","nodeType":"VariableDeclaration","scope":6636,"src":"4041:42:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5395,"name":"int256","nodeType":"ElementaryTypeName","src":"4041:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3132353030303030303030303030303030303030","id":5396,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4063:20:39","typeDescriptions":{"typeIdentifier":"t_rational_12500000000000000000_by_1","typeString":"int_const 12500000000000000000"},"value":"12500000000000000000"},"visibility":"internal"},{"constant":true,"id":5400,"mutability":"constant","name":"a10","nameLocation":"4114:3:39","nodeType":"VariableDeclaration","scope":6636,"src":"4098:43:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5398,"name":"int256","nodeType":"ElementaryTypeName","src":"4098:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313133333134383435333036363832363331363833","id":5399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4120:21:39","typeDescriptions":{"typeIdentifier":"t_rational_113314845306682631683_by_1","typeString":"int_const 113314845306682631683"},"value":"113314845306682631683"},"visibility":"internal"},{"constant":true,"id":5403,"mutability":"constant","name":"x11","nameLocation":"4175:3:39","nodeType":"VariableDeclaration","scope":6636,"src":"4159:41:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5401,"name":"int256","nodeType":"ElementaryTypeName","src":"4159:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323530303030303030303030303030303030","id":5402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4181:19:39","typeDescriptions":{"typeIdentifier":"t_rational_6250000000000000000_by_1","typeString":"int_const 6250000000000000000"},"value":"6250000000000000000"},"visibility":"internal"},{"constant":true,"id":5406,"mutability":"constant","name":"a11","nameLocation":"4231:3:39","nodeType":"VariableDeclaration","scope":6636,"src":"4215:43:39","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5404,"name":"int256","nodeType":"ElementaryTypeName","src":"4215:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313036343439343435383931373835393432393536","id":5405,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4237:21:39","typeDescriptions":{"typeIdentifier":"t_rational_106449445891785942956_by_1","typeString":"int_const 106449445891785942956"},"value":"106449445891785942956"},"visibility":"internal"},{"body":{"id":5538,"nodeType":"Block","src":"4563:2233:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5416,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5411,"src":"4577:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5417,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4582:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4577:6:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5425,"nodeType":"IfStatement","src":"4573:131:39","trueBody":{"id":5424,"nodeType":"Block","src":"4585:119:39","statements":[{"expression":{"arguments":[{"id":5421,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"4686:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5420,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4678:7:39","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5419,"name":"uint256","nodeType":"ElementaryTypeName","src":"4678:7:39","typeDescriptions":{}}},"id":5422,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4678:15:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5415,"id":5423,"nodeType":"Return","src":"4671:22:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5426,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5409,"src":"4718:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5427,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4723:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4718:6:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5432,"nodeType":"IfStatement","src":"4714:45:39","trueBody":{"id":5431,"nodeType":"Block","src":"4726:33:39","statements":[{"expression":{"hexValue":"30","id":5429,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4747:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":5415,"id":5430,"nodeType":"Return","src":"4740:8:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5433,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5409,"src":"5133:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":5434,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5138:3:39","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"5133:8:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":5436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5145:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5133:13:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5442,"nodeType":"IfStatement","src":"5129:68:39","trueBody":{"id":5441,"nodeType":"Block","src":"5148:49:39","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5438,"name":"BaseOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5286,"src":"5169:15:39","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5169:17:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5440,"nodeType":"RevertStatement","src":"5162:24:39"}]}},{"assignments":[5444],"declarations":[{"constant":false,"id":5444,"mutability":"mutable","name":"x_int256","nameLocation":"5213:8:39","nodeType":"VariableDeclaration","scope":5538,"src":"5206:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5443,"name":"int256","nodeType":"ElementaryTypeName","src":"5206:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5449,"initialValue":{"arguments":[{"id":5447,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5409,"src":"5231:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5446,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5224:6:39","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":5445,"name":"int256","nodeType":"ElementaryTypeName","src":"5224:6:39","typeDescriptions":{}}},"id":5448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5224:9:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5206:27:39"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5450,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5411,"src":"5591:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5451,"name":"MILD_EXPONENT_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5334,"src":"5596:19:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5591:24:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5457,"nodeType":"IfStatement","src":"5587:83:39","trueBody":{"id":5456,"nodeType":"Block","src":"5617:53:39","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5453,"name":"ExponentOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5289,"src":"5638:19:39","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5638:21:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5455,"nodeType":"RevertStatement","src":"5631:28:39"}]}},{"assignments":[5459],"declarations":[{"constant":false,"id":5459,"mutability":"mutable","name":"y_int256","nameLocation":"5686:8:39","nodeType":"VariableDeclaration","scope":5538,"src":"5679:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5458,"name":"int256","nodeType":"ElementaryTypeName","src":"5679:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5464,"initialValue":{"arguments":[{"id":5462,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5411,"src":"5704:1:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5461,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5697:6:39","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":5460,"name":"int256","nodeType":"ElementaryTypeName","src":"5697:6:39","typeDescriptions":{}}},"id":5463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5697:9:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5679:27:39"},{"assignments":[5466],"declarations":[{"constant":false,"id":5466,"mutability":"mutable","name":"logx_times_y","nameLocation":"5724:12:39","nodeType":"VariableDeclaration","scope":5538,"src":"5717:19:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5465,"name":"int256","nodeType":"ElementaryTypeName","src":"5717:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5467,"nodeType":"VariableDeclarationStatement","src":"5717:19:39"},{"id":5516,"nodeType":"UncheckedBlock","src":"5746:790:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5468,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"5774:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5469,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5444,"src":"5794:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5774:28:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5471,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5444,"src":"5806:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5472,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5324,"src":"5817:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5806:28:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5774:60:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5510,"nodeType":"Block","src":"6418:72:39","statements":[{"expression":{"id":5508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5502,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5466,"src":"6436:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5504,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5444,"src":"6455:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5503,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6480,"src":"6451:3:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5505,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6451:13:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5506,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5459,"src":"6467:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6451:24:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6436:39:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5509,"nodeType":"ExpressionStatement","src":"6436:39:39"}]},"id":5511,"nodeType":"IfStatement","src":"5770:720:39","trueBody":{"id":5501,"nodeType":"Block","src":"5836:576:39","statements":[{"assignments":[5476],"declarations":[{"constant":false,"id":5476,"mutability":"mutable","name":"ln_36_x","nameLocation":"5861:7:39","nodeType":"VariableDeclaration","scope":5501,"src":"5854:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5475,"name":"int256","nodeType":"ElementaryTypeName","src":"5854:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5480,"initialValue":{"arguments":[{"id":5478,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5444,"src":"5878:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5477,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6635,"src":"5871:6:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5871:16:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5854:33:39"},{"expression":{"id":5499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5481,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5466,"src":"6308:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5482,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5476,"src":"6325:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5483,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"6335:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6325:16:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5485,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6324:18:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5486,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5459,"src":"6345:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:29:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5488,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5476,"src":"6358:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":5489,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"6368:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6358:16:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5491,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6357:18:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5492,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5459,"src":"6378:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6357:29:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5494,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6356:31:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5495,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"6390:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6356:40:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:72:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5498,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6323:74:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6308:89:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5500,"nodeType":"ExpressionStatement","src":"6308:89:39"}]}},{"expression":{"id":5514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5512,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5466,"src":"6503:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":5513,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"6519:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6503:22:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5515,"nodeType":"ExpressionStatement","src":"6503:22:39"}]},{"condition":{"id":5525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6613:79:39","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5517,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5314,"src":"6615:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":5518,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5466,"src":"6639:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6615:36:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5520,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5466,"src":"6655:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":5521,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5310,"src":"6671:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6655:36:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6615:76:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5524,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6614:78:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5530,"nodeType":"IfStatement","src":"6609:137:39","trueBody":{"id":5529,"nodeType":"Block","src":"6694:52:39","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5526,"name":"ProductOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5292,"src":"6715:18:39","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6715:20:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5528,"nodeType":"RevertStatement","src":"6708:27:39"}]}},{"expression":{"arguments":[{"arguments":[{"id":5534,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5466,"src":"6775:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5533,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5986,"src":"6771:3:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6771:17:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5532,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6763:7:39","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5531,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:39","typeDescriptions":{}}},"id":5536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6763:26:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5415,"id":5537,"nodeType":"Return","src":"6756:33:39"}]},"documentation":{"id":5407,"nodeType":"StructuredDocumentation","src":"4277:214:39","text":" @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`."},"id":5539,"implemented":true,"kind":"function","modifiers":[],"name":"pow","nameLocation":"4505:3:39","nodeType":"FunctionDefinition","parameters":{"id":5412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5409,"mutability":"mutable","name":"x","nameLocation":"4517:1:39","nodeType":"VariableDeclaration","scope":5539,"src":"4509:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5408,"name":"uint256","nodeType":"ElementaryTypeName","src":"4509:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5411,"mutability":"mutable","name":"y","nameLocation":"4528:1:39","nodeType":"VariableDeclaration","scope":5539,"src":"4520:9:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5410,"name":"uint256","nodeType":"ElementaryTypeName","src":"4520:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4508:22:39"},"returnParameters":{"id":5415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5414,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5539,"src":"4554:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5413,"name":"uint256","nodeType":"ElementaryTypeName","src":"4554:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4553:9:39"},"scope":6636,"src":"4496:2300:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5985,"nodeType":"Block","src":"7064:6082:39","statements":[{"condition":{"id":5555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7078:57:39","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5547,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"7080:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5548,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5314,"src":"7085:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7080:25:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5550,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"7109:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":5551,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5310,"src":"7114:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7109:25:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7080:54:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5554,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7079:56:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5560,"nodeType":"IfStatement","src":"7074:112:39","trueBody":{"id":5559,"nodeType":"Block","src":"7137:49:39","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5556,"name":"InvalidExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5295,"src":"7158:15:39","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7158:17:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5558,"nodeType":"RevertStatement","src":"7151:24:39"}]}},{"assignments":[5562],"declarations":[{"constant":false,"id":5562,"mutability":"mutable","name":"negativeExponent","nameLocation":"7277:16:39","nodeType":"VariableDeclaration","scope":5985,"src":"7272:21:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5561,"name":"bool","nodeType":"ElementaryTypeName","src":"7272:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5564,"initialValue":{"hexValue":"66616c7365","id":5563,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7296:5:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"7272:29:39"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5565,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"7316:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":5566,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7320:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7316:5:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5579,"nodeType":"IfStatement","src":"7312:417:39","trueBody":{"id":5578,"nodeType":"Block","src":"7323:406:39","statements":[{"id":5573,"nodeType":"UncheckedBlock","src":"7633:49:39","statements":[{"expression":{"id":5571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5568,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"7661:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"7665:2:39","subExpression":{"id":5569,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"7666:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7661:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5572,"nodeType":"ExpressionStatement","src":"7661:6:39"}]},{"expression":{"id":5576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5574,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5562,"src":"7695:16:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":5575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7714:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"7695:23:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5577,"nodeType":"ExpressionStatement","src":"7695:23:39"}]}},{"assignments":[5581],"declarations":[{"constant":false,"id":5581,"mutability":"mutable","name":"firstAN","nameLocation":"9037:7:39","nodeType":"VariableDeclaration","scope":5985,"src":"9030:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5580,"name":"int256","nodeType":"ElementaryTypeName","src":"9030:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5582,"nodeType":"VariableDeclarationStatement","src":"9030:14:39"},{"id":5618,"nodeType":"UncheckedBlock","src":"9054:457:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5583,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"9082:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5584,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5337,"src":"9087:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9082:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5595,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"9171:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5596,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5343,"src":"9176:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9171:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5611,"nodeType":"Block","src":"9256:74:39","statements":[{"expression":{"id":5609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5607,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5581,"src":"9274:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":5608,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9284:1:39","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9274:11:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5610,"nodeType":"ExpressionStatement","src":"9274:11:39"}]},"id":5612,"nodeType":"IfStatement","src":"9167:163:39","trueBody":{"id":5606,"nodeType":"Block","src":"9180:70:39","statements":[{"expression":{"id":5600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5598,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"9198:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5599,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5343,"src":"9203:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9198:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5601,"nodeType":"ExpressionStatement","src":"9198:7:39"},{"expression":{"id":5604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5602,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5581,"src":"9223:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5603,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5346,"src":"9233:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9223:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5605,"nodeType":"ExpressionStatement","src":"9223:12:39"}]}},"id":5613,"nodeType":"IfStatement","src":"9078:252:39","trueBody":{"id":5594,"nodeType":"Block","src":"9091:70:39","statements":[{"expression":{"id":5588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5586,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"9109:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5587,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5337,"src":"9114:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9109:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5589,"nodeType":"ExpressionStatement","src":"9109:7:39"},{"expression":{"id":5592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5590,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5581,"src":"9134:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5591,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5340,"src":"9144:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9134:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5593,"nodeType":"ExpressionStatement","src":"9134:12:39"}]}},{"expression":{"id":5616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5614,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"9492:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":5615,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9497:3:39","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"9492:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5617,"nodeType":"ExpressionStatement","src":"9492:8:39"}]},{"assignments":[5620],"declarations":[{"constant":false,"id":5620,"mutability":"mutable","name":"product","nameLocation":"9730:7:39","nodeType":"VariableDeclaration","scope":5985,"src":"9723:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5619,"name":"int256","nodeType":"ElementaryTypeName","src":"9723:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5622,"initialValue":{"id":5621,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"9740:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"9723:23:39"},{"id":5767,"nodeType":"UncheckedBlock","src":"9757:957:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5623,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"9785:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5624,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5349,"src":"9790:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9785:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5640,"nodeType":"IfStatement","src":"9781:104:39","trueBody":{"id":5639,"nodeType":"Block","src":"9794:91:39","statements":[{"expression":{"id":5628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5626,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"9812:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5627,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5349,"src":"9817:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9812:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5629,"nodeType":"ExpressionStatement","src":"9812:7:39"},{"expression":{"id":5637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5630,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5620,"src":"9837:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5631,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5620,"src":"9848:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5632,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5352,"src":"9858:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9848:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5634,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9847:14:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5635,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"9864:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9847:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9837:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5638,"nodeType":"ExpressionStatement","src":"9837:33:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5641,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"9902:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5642,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5355,"src":"9907:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9902:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5658,"nodeType":"IfStatement","src":"9898:104:39","trueBody":{"id":5657,"nodeType":"Block","src":"9911:91:39","statements":[{"expression":{"id":5646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5644,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"9929:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5645,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5355,"src":"9934:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9929:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5647,"nodeType":"ExpressionStatement","src":"9929:7:39"},{"expression":{"id":5655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5648,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5620,"src":"9954:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5649,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5620,"src":"9965:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5650,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5358,"src":"9975:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9965:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5652,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9964:14:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5653,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"9981:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9964:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9954:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5656,"nodeType":"ExpressionStatement","src":"9954:33:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5659,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"10019:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5660,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5361,"src":"10024:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10019:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5676,"nodeType":"IfStatement","src":"10015:104:39","trueBody":{"id":5675,"nodeType":"Block","src":"10028:91:39","statements":[{"expression":{"id":5664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5662,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"10046:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5663,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5361,"src":"10051:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10046:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5665,"nodeType":"ExpressionStatement","src":"10046:7:39"},{"expression":{"id":5673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5666,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5620,"src":"10071:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5667,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5620,"src":"10082:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5668,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5364,"src":"10092:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10082:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5670,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10081:14:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5671,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"10098:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10081:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10071:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5674,"nodeType":"ExpressionStatement","src":"10071:33:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5677,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"10136:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5678,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5367,"src":"10141:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10136:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5694,"nodeType":"IfStatement","src":"10132:104:39","trueBody":{"id":5693,"nodeType":"Block","src":"10145:91:39","statements":[{"expression":{"id":5682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5680,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"10163:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5681,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5367,"src":"10168:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10163:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5683,"nodeType":"ExpressionStatement","src":"10163:7:39"},{"expression":{"id":5691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5684,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5620,"src":"10188:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5685,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5620,"src":"10199:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5686,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5370,"src":"10209:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10199:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5688,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10198:14:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5689,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"10215:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10198:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10188:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5692,"nodeType":"ExpressionStatement","src":"10188:33:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5695,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"10253:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5696,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5373,"src":"10258:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10253:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5712,"nodeType":"IfStatement","src":"10249:104:39","trueBody":{"id":5711,"nodeType":"Block","src":"10262:91:39","statements":[{"expression":{"id":5700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5698,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"10280:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5699,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5373,"src":"10285:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10280:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5701,"nodeType":"ExpressionStatement","src":"10280:7:39"},{"expression":{"id":5709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5702,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5620,"src":"10305:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5703,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5620,"src":"10316:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5704,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5376,"src":"10326:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10316:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5706,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10315:14:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5707,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"10332:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10315:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10305:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5710,"nodeType":"ExpressionStatement","src":"10305:33:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5713,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"10370:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5714,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5379,"src":"10375:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10370:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5730,"nodeType":"IfStatement","src":"10366:104:39","trueBody":{"id":5729,"nodeType":"Block","src":"10379:91:39","statements":[{"expression":{"id":5718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5716,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"10397:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5717,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5379,"src":"10402:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10397:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5719,"nodeType":"ExpressionStatement","src":"10397:7:39"},{"expression":{"id":5727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5720,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5620,"src":"10422:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5721,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5620,"src":"10433:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5722,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"10443:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10433:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5724,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10432:14:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5725,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"10449:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10432:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10422:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5728,"nodeType":"ExpressionStatement","src":"10422:33:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5731,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"10487:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5732,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5385,"src":"10492:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10487:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5748,"nodeType":"IfStatement","src":"10483:104:39","trueBody":{"id":5747,"nodeType":"Block","src":"10496:91:39","statements":[{"expression":{"id":5736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5734,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"10514:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5735,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5385,"src":"10519:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10514:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5737,"nodeType":"ExpressionStatement","src":"10514:7:39"},{"expression":{"id":5745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5738,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5620,"src":"10539:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5739,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5620,"src":"10550:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5740,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5388,"src":"10560:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10550:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5742,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10549:14:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5743,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"10566:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10549:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10539:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5746,"nodeType":"ExpressionStatement","src":"10539:33:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5749,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"10604:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5750,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5391,"src":"10609:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10604:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5766,"nodeType":"IfStatement","src":"10600:104:39","trueBody":{"id":5765,"nodeType":"Block","src":"10613:91:39","statements":[{"expression":{"id":5754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5752,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"10631:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5753,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5391,"src":"10636:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10631:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5755,"nodeType":"ExpressionStatement","src":"10631:7:39"},{"expression":{"id":5763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5756,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5620,"src":"10656:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5757,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5620,"src":"10667:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5758,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5394,"src":"10677:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10667:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5760,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10666:14:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5761,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"10683:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10666:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10656:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5764,"nodeType":"ExpressionStatement","src":"10656:33:39"}]}}]},{"assignments":[5769],"declarations":[{"constant":false,"id":5769,"mutability":"mutable","name":"seriesSum","nameLocation":"11025:9:39","nodeType":"VariableDeclaration","scope":5985,"src":"11018:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5768,"name":"int256","nodeType":"ElementaryTypeName","src":"11018:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5771,"initialValue":{"id":5770,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"11037:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"11018:25:39"},{"assignments":[5773],"declarations":[{"constant":false,"id":5773,"mutability":"mutable","name":"term","nameLocation":"11115:4:39","nodeType":"VariableDeclaration","scope":5985,"src":"11108:11:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5772,"name":"int256","nodeType":"ElementaryTypeName","src":"11108:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5774,"nodeType":"VariableDeclarationStatement","src":"11108:11:39"},{"expression":{"id":5777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5775,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11228:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5776,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"11235:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11228:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5778,"nodeType":"ExpressionStatement","src":"11228:8:39"},{"id":5984,"nodeType":"UncheckedBlock","src":"11246:1894:39","statements":[{"expression":{"id":5781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5779,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"11270:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5780,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11283:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11270:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5782,"nodeType":"ExpressionStatement","src":"11270:17:39"},{"expression":{"id":5793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5783,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11536:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5784,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11545:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5785,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"11552:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11545:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5787,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11544:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5788,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"11557:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11544:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5790,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11543:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":5791,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11567:1:39","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11543:25:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11536:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5794,"nodeType":"ExpressionStatement","src":"11536:32:39"},{"expression":{"id":5797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5795,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"11582:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5796,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11595:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11582:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5798,"nodeType":"ExpressionStatement","src":"11582:17:39"},{"expression":{"id":5809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5799,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11614:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5800,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11623:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5801,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"11630:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11623:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5803,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11622:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5804,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"11635:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11622:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5806,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11621:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":5807,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11645:1:39","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"11621:25:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11614:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5810,"nodeType":"ExpressionStatement","src":"11614:32:39"},{"expression":{"id":5813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5811,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"11660:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5812,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11673:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11660:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5814,"nodeType":"ExpressionStatement","src":"11660:17:39"},{"expression":{"id":5825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5815,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11692:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5816,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11701:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5817,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"11708:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11701:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5819,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11700:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5820,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"11713:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11700:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5822,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11699:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"34","id":5823,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11723:1:39","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11699:25:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11692:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5826,"nodeType":"ExpressionStatement","src":"11692:32:39"},{"expression":{"id":5829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5827,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"11738:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5828,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11751:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11738:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5830,"nodeType":"ExpressionStatement","src":"11738:17:39"},{"expression":{"id":5841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5831,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11770:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5832,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11779:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5833,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"11786:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11779:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5835,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11778:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5836,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"11791:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11778:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5838,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11777:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":5839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11801:1:39","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"11777:25:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11770:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5842,"nodeType":"ExpressionStatement","src":"11770:32:39"},{"expression":{"id":5845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5843,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"11816:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5844,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11829:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11816:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5846,"nodeType":"ExpressionStatement","src":"11816:17:39"},{"expression":{"id":5857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5847,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11848:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5848,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11857:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5849,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"11864:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11857:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5851,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11856:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5852,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"11869:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11856:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5854,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11855:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"36","id":5855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11879:1:39","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"11855:25:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11848:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5858,"nodeType":"ExpressionStatement","src":"11848:32:39"},{"expression":{"id":5861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5859,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"11894:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5860,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11907:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11894:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5862,"nodeType":"ExpressionStatement","src":"11894:17:39"},{"expression":{"id":5873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5863,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11926:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5864,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11935:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5865,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"11942:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11935:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5867,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11934:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5868,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"11947:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11934:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5870,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11933:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":5871,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11957:1:39","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"11933:25:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11926:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5874,"nodeType":"ExpressionStatement","src":"11926:32:39"},{"expression":{"id":5877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5875,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"11972:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5876,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"11985:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11972:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5878,"nodeType":"ExpressionStatement","src":"11972:17:39"},{"expression":{"id":5889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5879,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"12004:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5880,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"12013:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5881,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"12020:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12013:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5883,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12012:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5884,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"12025:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12012:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5886,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12011:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"38","id":5887,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12035:1:39","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12011:25:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12004:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5890,"nodeType":"ExpressionStatement","src":"12004:32:39"},{"expression":{"id":5893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5891,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"12050:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5892,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"12063:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12050:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5894,"nodeType":"ExpressionStatement","src":"12050:17:39"},{"expression":{"id":5905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5895,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"12082:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5896,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"12091:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5897,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"12098:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12091:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5899,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12090:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5900,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"12103:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12090:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5902,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12089:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":5903,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12113:1:39","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"12089:25:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12082:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5906,"nodeType":"ExpressionStatement","src":"12082:32:39"},{"expression":{"id":5909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5907,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"12128:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5908,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"12141:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12128:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5910,"nodeType":"ExpressionStatement","src":"12128:17:39"},{"expression":{"id":5921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5911,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"12160:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5912,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"12169:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5913,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"12176:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12169:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5915,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12168:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5916,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"12181:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12168:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5918,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12167:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":5919,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12191:2:39","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"12167:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12160:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5922,"nodeType":"ExpressionStatement","src":"12160:33:39"},{"expression":{"id":5925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5923,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"12207:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5924,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"12220:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12207:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5926,"nodeType":"ExpressionStatement","src":"12207:17:39"},{"expression":{"id":5937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5927,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"12239:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5928,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"12248:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5929,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"12255:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12248:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5931,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12247:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5932,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"12260:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12247:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5934,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12246:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":5935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12270:2:39","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"12246:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12239:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5938,"nodeType":"ExpressionStatement","src":"12239:33:39"},{"expression":{"id":5941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5939,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"12286:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5940,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"12299:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12286:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5942,"nodeType":"ExpressionStatement","src":"12286:17:39"},{"expression":{"id":5953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5943,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"12318:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5944,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"12327:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5945,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5542,"src":"12334:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12327:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5947,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12326:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5948,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"12339:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12326:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5950,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12325:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3132","id":5951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12349:2:39","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"12"},"src":"12325:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12318:33:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5954,"nodeType":"ExpressionStatement","src":"12318:33:39"},{"expression":{"id":5957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5955,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"12365:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5956,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5773,"src":"12378:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12365:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5958,"nodeType":"ExpressionStatement","src":"12365:17:39"},{"assignments":[5960],"declarations":[{"constant":false,"id":5960,"mutability":"mutable","name":"result","nameLocation":"12914:6:39","nodeType":"VariableDeclaration","scope":5984,"src":"12907:13:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5959,"name":"int256","nodeType":"ElementaryTypeName","src":"12907:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5973,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5961,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5620,"src":"12926:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5962,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5769,"src":"12936:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12926:19:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5964,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12925:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5965,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"12949:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12925:30:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5967,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12924:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5968,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5581,"src":"12959:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12924:42:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5970,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12923:44:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":5971,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12970:3:39","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"12923:50:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"12907:66:39"},{"expression":{"condition":{"id":5974,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5562,"src":"13075:16:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":5981,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5960,"src":"13123:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"13075:54:39","trueExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5977,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5975,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"13095:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5976,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"13104:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13095:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5978,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"13094:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5979,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5960,"src":"13114:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13094:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5546,"id":5983,"nodeType":"Return","src":"13068:61:39"}]}]},"documentation":{"id":5540,"nodeType":"StructuredDocumentation","src":"6802:203:39","text":" @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`."},"id":5986,"implemented":true,"kind":"function","modifiers":[],"name":"exp","nameLocation":"7019:3:39","nodeType":"FunctionDefinition","parameters":{"id":5543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5542,"mutability":"mutable","name":"x","nameLocation":"7030:1:39","nodeType":"VariableDeclaration","scope":5986,"src":"7023:8:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5541,"name":"int256","nodeType":"ElementaryTypeName","src":"7023:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7022:10:39"},"returnParameters":{"id":5546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5545,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5986,"src":"7056:6:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5544,"name":"int256","nodeType":"ElementaryTypeName","src":"7056:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7055:8:39"},"scope":6636,"src":"7010:6136:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6059,"nodeType":"Block","src":"13315:861:39","statements":[{"assignments":[5997],"declarations":[{"constant":false,"id":5997,"mutability":"mutable","name":"logBase","nameLocation":"13552:7:39","nodeType":"VariableDeclaration","scope":6059,"src":"13545:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5996,"name":"int256","nodeType":"ElementaryTypeName","src":"13545:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5998,"nodeType":"VariableDeclarationStatement","src":"13545:14:39"},{"id":6023,"nodeType":"UncheckedBlock","src":"13569:214:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5999,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"13597:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6000,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5991,"src":"13617:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13597:24:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6002,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5991,"src":"13625:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6003,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5324,"src":"13632:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13625:24:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13597:52:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6021,"nodeType":"Block","src":"13712:61:39","statements":[{"expression":{"id":6019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6013,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5997,"src":"13730:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6015,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5991,"src":"13744:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6014,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6480,"src":"13740:3:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":6016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13740:9:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6017,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"13752:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13740:18:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13730:28:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6020,"nodeType":"ExpressionStatement","src":"13730:28:39"}]},"id":6022,"nodeType":"IfStatement","src":"13593:180:39","trueBody":{"id":6012,"nodeType":"Block","src":"13651:55:39","statements":[{"expression":{"id":6010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6006,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5997,"src":"13669:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6008,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5991,"src":"13686:4:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6007,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6635,"src":"13679:6:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":6009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13679:12:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13669:22:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6011,"nodeType":"ExpressionStatement","src":"13669:22:39"}]}}]},{"assignments":[6025],"declarations":[{"constant":false,"id":6025,"mutability":"mutable","name":"logArg","nameLocation":"13800:6:39","nodeType":"VariableDeclaration","scope":6059,"src":"13793:13:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6024,"name":"int256","nodeType":"ElementaryTypeName","src":"13793:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6026,"nodeType":"VariableDeclarationStatement","src":"13793:13:39"},{"id":6058,"nodeType":"UncheckedBlock","src":"13816:354:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6027,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"13844:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6028,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5989,"src":"13864:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13844:23:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6030,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5989,"src":"13871:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6031,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5324,"src":"13877:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13871:23:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13844:50:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6049,"nodeType":"Block","src":"13955:59:39","statements":[{"expression":{"id":6047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6041,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6025,"src":"13973:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6043,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5989,"src":"13986:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6042,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6480,"src":"13982:3:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":6044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13982:8:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6045,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"13993:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13982:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13973:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6048,"nodeType":"ExpressionStatement","src":"13973:26:39"}]},"id":6050,"nodeType":"IfStatement","src":"13840:174:39","trueBody":{"id":6040,"nodeType":"Block","src":"13896:53:39","statements":[{"expression":{"id":6038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6034,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6025,"src":"13914:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6036,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5989,"src":"13930:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6035,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6635,"src":"13923:6:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":6037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13923:11:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13914:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6039,"nodeType":"ExpressionStatement","src":"13914:20:39"}]}},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6051,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6025,"src":"14133:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6052,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"14142:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14133:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6054,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14132:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6055,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5997,"src":"14152:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14132:27:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5995,"id":6057,"nodeType":"Return","src":"14125:34:39"}]}]},"documentation":{"id":5987,"nodeType":"StructuredDocumentation","src":"13152:89:39","text":"@dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument."},"id":6060,"implemented":true,"kind":"function","modifiers":[],"name":"log","nameLocation":"13255:3:39","nodeType":"FunctionDefinition","parameters":{"id":5992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5989,"mutability":"mutable","name":"arg","nameLocation":"13266:3:39","nodeType":"VariableDeclaration","scope":6060,"src":"13259:10:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5988,"name":"int256","nodeType":"ElementaryTypeName","src":"13259:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":5991,"mutability":"mutable","name":"base","nameLocation":"13278:4:39","nodeType":"VariableDeclaration","scope":6060,"src":"13271:11:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5990,"name":"int256","nodeType":"ElementaryTypeName","src":"13271:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13258:25:39"},"returnParameters":{"id":5995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5994,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6060,"src":"13307:6:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5993,"name":"int256","nodeType":"ElementaryTypeName","src":"13307:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13306:8:39"},"scope":6636,"src":"13246:930:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6097,"nodeType":"Block","src":"14319:353:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6068,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6063,"src":"14416:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"30","id":6069,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14421:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14416:6:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6075,"nodeType":"IfStatement","src":"14412:57:39","trueBody":{"id":6074,"nodeType":"Block","src":"14424:45:39","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6071,"name":"OutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5298,"src":"14445:11:39","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14445:13:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6073,"nodeType":"RevertStatement","src":"14438:20:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6076,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5319,"src":"14482:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6077,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6063,"src":"14502:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14482:21:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6079,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6063,"src":"14507:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6080,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5324,"src":"14511:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14507:21:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14482:46:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6095,"nodeType":"Block","src":"14628:38:39","statements":[{"expression":{"arguments":[{"id":6092,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6063,"src":"14653:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6091,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6480,"src":"14649:3:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":6093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14649:6:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":6067,"id":6094,"nodeType":"Return","src":"14642:13:39"}]},"id":6096,"nodeType":"IfStatement","src":"14478:188:39","trueBody":{"id":6090,"nodeType":"Block","src":"14530:92:39","statements":[{"id":6089,"nodeType":"UncheckedBlock","src":"14544:68:39","statements":[{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6084,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6063,"src":"14586:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6083,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6635,"src":"14579:6:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":6085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14579:9:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6086,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"14591:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14579:18:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":6067,"id":6088,"nodeType":"Return","src":"14572:25:39"}]}]}}]},"documentation":{"id":6061,"nodeType":"StructuredDocumentation","src":"14182:79:39","text":"@dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":6098,"implemented":true,"kind":"function","modifiers":[],"name":"ln","nameLocation":"14275:2:39","nodeType":"FunctionDefinition","parameters":{"id":6064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6063,"mutability":"mutable","name":"a","nameLocation":"14285:1:39","nodeType":"VariableDeclaration","scope":6098,"src":"14278:8:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6062,"name":"int256","nodeType":"ElementaryTypeName","src":"14278:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14277:10:39"},"returnParameters":{"id":6067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6066,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6098,"src":"14311:6:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6065,"name":"int256","nodeType":"ElementaryTypeName","src":"14311:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14310:8:39"},"scope":6636,"src":"14266:406:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6479,"nodeType":"Block","src":"14824:5531:39","statements":[{"assignments":[6107],"declarations":[{"constant":false,"id":6107,"mutability":"mutable","name":"negativeExponent","nameLocation":"14915:16:39","nodeType":"VariableDeclaration","scope":6479,"src":"14910:21:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6106,"name":"bool","nodeType":"ElementaryTypeName","src":"14910:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":6109,"initialValue":{"hexValue":"66616c7365","id":6108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14934:5:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"14910:29:39"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6110,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"14954:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6111,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"14958:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14954:10:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6128,"nodeType":"IfStatement","src":"14950:381:39","trueBody":{"id":6127,"nodeType":"Block","src":"14966:365:39","statements":[{"id":6122,"nodeType":"UncheckedBlock","src":"15216:68:39","statements":[{"expression":{"id":6120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6113,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"15244:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6116,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":6114,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"15249:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6115,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"15258:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15249:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6117,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"15248:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6118,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"15268:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15248:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15244:25:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6121,"nodeType":"ExpressionStatement","src":"15244:25:39"}]},{"expression":{"id":6125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6123,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6107,"src":"15297:16:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":6124,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15316:4:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"15297:23:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6126,"nodeType":"ExpressionStatement","src":"15297:23:39"}]}},{"assignments":[6130],"declarations":[{"constant":false,"id":6130,"mutability":"mutable","name":"sum","nameLocation":"16663:3:39","nodeType":"VariableDeclaration","scope":6479,"src":"16656:10:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6129,"name":"int256","nodeType":"ElementaryTypeName","src":"16656:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6132,"initialValue":{"hexValue":"30","id":6131,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16669:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16656:14:39"},{"id":6351,"nodeType":"UncheckedBlock","src":"16680:1674:39","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6133,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"16708:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6136,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":6134,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5340,"src":"16713:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6135,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"16718:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16713:11:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16708:16:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6147,"nodeType":"IfStatement","src":"16704:126:39","trueBody":{"id":6146,"nodeType":"Block","src":"16726:104:39","statements":[{"expression":{"id":6140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6138,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"16744:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":6139,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5340,"src":"16749:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16744:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6141,"nodeType":"ExpressionStatement","src":"16744:7:39"},{"expression":{"id":6144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6142,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6130,"src":"16806:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6143,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5337,"src":"16813:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16806:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6145,"nodeType":"ExpressionStatement","src":"16806:9:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6148,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"16848:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6151,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":6149,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5346,"src":"16853:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6150,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"16858:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16853:11:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16848:16:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6162,"nodeType":"IfStatement","src":"16844:126:39","trueBody":{"id":6161,"nodeType":"Block","src":"16866:104:39","statements":[{"expression":{"id":6155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6153,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"16884:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":6154,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5346,"src":"16889:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16884:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6156,"nodeType":"ExpressionStatement","src":"16884:7:39"},{"expression":{"id":6159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6157,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6130,"src":"16946:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6158,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5343,"src":"16953:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16946:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6160,"nodeType":"ExpressionStatement","src":"16946:9:39"}]}},{"expression":{"id":6165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6163,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6130,"src":"17109:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":6164,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17116:3:39","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17109:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6166,"nodeType":"ExpressionStatement","src":"17109:10:39"},{"expression":{"id":6169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6167,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17133:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":6168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17138:3:39","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17133:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6170,"nodeType":"ExpressionStatement","src":"17133:8:39"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6171,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17276:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6172,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5352,"src":"17281:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17276:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6188,"nodeType":"IfStatement","src":"17272:94:39","trueBody":{"id":6187,"nodeType":"Block","src":"17285:81:39","statements":[{"expression":{"id":6181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6174,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17303:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6175,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17308:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6176,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"17312:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17308:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6178,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17307:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6179,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5352,"src":"17322:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17307:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17303:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6182,"nodeType":"ExpressionStatement","src":"17303:21:39"},{"expression":{"id":6185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6183,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6130,"src":"17342:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6184,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5349,"src":"17349:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17342:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6186,"nodeType":"ExpressionStatement","src":"17342:9:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6189,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17384:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6190,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5358,"src":"17389:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17384:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6206,"nodeType":"IfStatement","src":"17380:94:39","trueBody":{"id":6205,"nodeType":"Block","src":"17393:81:39","statements":[{"expression":{"id":6199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6192,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17411:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6193,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17416:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6194,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"17420:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17416:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6196,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17415:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6197,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5358,"src":"17430:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17415:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17411:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6200,"nodeType":"ExpressionStatement","src":"17411:21:39"},{"expression":{"id":6203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6201,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6130,"src":"17450:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6202,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5355,"src":"17457:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17450:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6204,"nodeType":"ExpressionStatement","src":"17450:9:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6207,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17492:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6208,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5364,"src":"17497:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17492:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6224,"nodeType":"IfStatement","src":"17488:94:39","trueBody":{"id":6223,"nodeType":"Block","src":"17501:81:39","statements":[{"expression":{"id":6217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6210,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17519:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6211,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17524:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6212,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"17528:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17524:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6214,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17523:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6215,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5364,"src":"17538:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17523:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17519:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6218,"nodeType":"ExpressionStatement","src":"17519:21:39"},{"expression":{"id":6221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6219,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6130,"src":"17558:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6220,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5361,"src":"17565:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17558:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6222,"nodeType":"ExpressionStatement","src":"17558:9:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6225,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17600:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6226,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5370,"src":"17605:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17600:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6242,"nodeType":"IfStatement","src":"17596:94:39","trueBody":{"id":6241,"nodeType":"Block","src":"17609:81:39","statements":[{"expression":{"id":6235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6228,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17627:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6229,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17632:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6230,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"17636:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17632:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6232,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17631:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6233,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5370,"src":"17646:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17631:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17627:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6236,"nodeType":"ExpressionStatement","src":"17627:21:39"},{"expression":{"id":6239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6237,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6130,"src":"17666:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6238,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5367,"src":"17673:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17666:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6240,"nodeType":"ExpressionStatement","src":"17666:9:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6243,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17708:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6244,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5376,"src":"17713:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17708:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6260,"nodeType":"IfStatement","src":"17704:94:39","trueBody":{"id":6259,"nodeType":"Block","src":"17717:81:39","statements":[{"expression":{"id":6253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6246,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17735:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6247,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17740:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6248,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"17744:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17740:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6250,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17739:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6251,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5376,"src":"17754:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17739:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17735:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6254,"nodeType":"ExpressionStatement","src":"17735:21:39"},{"expression":{"id":6257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6255,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6130,"src":"17774:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6256,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5373,"src":"17781:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17774:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6258,"nodeType":"ExpressionStatement","src":"17774:9:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6261,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17816:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6262,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"17821:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17816:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6278,"nodeType":"IfStatement","src":"17812:94:39","trueBody":{"id":6277,"nodeType":"Block","src":"17825:81:39","statements":[{"expression":{"id":6271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6264,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17843:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6265,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17848:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6266,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"17852:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17848:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6268,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17847:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6269,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"17862:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17847:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17843:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6272,"nodeType":"ExpressionStatement","src":"17843:21:39"},{"expression":{"id":6275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6273,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6130,"src":"17882:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6274,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5379,"src":"17889:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17882:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6276,"nodeType":"ExpressionStatement","src":"17882:9:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6279,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17924:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6280,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5388,"src":"17929:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17924:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6296,"nodeType":"IfStatement","src":"17920:94:39","trueBody":{"id":6295,"nodeType":"Block","src":"17933:81:39","statements":[{"expression":{"id":6289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6282,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17951:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6283,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"17956:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6284,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"17960:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17956:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6286,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17955:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6287,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5388,"src":"17970:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17955:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17951:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6290,"nodeType":"ExpressionStatement","src":"17951:21:39"},{"expression":{"id":6293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6291,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6130,"src":"17990:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6292,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5385,"src":"17997:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17990:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6294,"nodeType":"ExpressionStatement","src":"17990:9:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6297,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"18032:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6298,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5394,"src":"18037:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18032:7:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6314,"nodeType":"IfStatement","src":"18028:94:39","trueBody":{"id":6313,"nodeType":"Block","src":"18041:81:39","statements":[{"expression":{"id":6307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6300,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"18059:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6301,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"18064:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6302,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"18068:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18064:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6304,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18063:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6305,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5394,"src":"18078:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18063:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18059:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6308,"nodeType":"ExpressionStatement","src":"18059:21:39"},{"expression":{"id":6311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6309,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6130,"src":"18098:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6310,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5391,"src":"18105:2:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18098:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6312,"nodeType":"ExpressionStatement","src":"18098:9:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6315,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"18140:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6316,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5400,"src":"18145:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18140:8:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6332,"nodeType":"IfStatement","src":"18136:97:39","trueBody":{"id":6331,"nodeType":"Block","src":"18150:83:39","statements":[{"expression":{"id":6325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6318,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"18168:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6319,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"18173:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6320,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"18177:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18173:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6322,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18172:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6323,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5400,"src":"18187:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18172:18:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18168:22:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6326,"nodeType":"ExpressionStatement","src":"18168:22:39"},{"expression":{"id":6329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6327,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6130,"src":"18208:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6328,"name":"x10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5397,"src":"18215:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18208:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6330,"nodeType":"ExpressionStatement","src":"18208:10:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6333,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"18251:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":6334,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5406,"src":"18256:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18251:8:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6350,"nodeType":"IfStatement","src":"18247:97:39","trueBody":{"id":6349,"nodeType":"Block","src":"18261:83:39","statements":[{"expression":{"id":6343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6336,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"18279:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6337,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"18284:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6338,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"18288:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18284:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6340,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18283:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6341,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5406,"src":"18298:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18283:18:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18279:22:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6344,"nodeType":"ExpressionStatement","src":"18279:22:39"},{"expression":{"id":6347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6345,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6130,"src":"18319:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":6346,"name":"x11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5403,"src":"18326:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18319:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6348,"nodeType":"ExpressionStatement","src":"18319:10:39"}]}}]},{"id":6478,"nodeType":"UncheckedBlock","src":"18856:1493:39","statements":[{"assignments":[6353],"declarations":[{"constant":false,"id":6353,"mutability":"mutable","name":"z","nameLocation":"18887:1:39","nodeType":"VariableDeclaration","scope":6478,"src":"18880:8:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6352,"name":"int256","nodeType":"ElementaryTypeName","src":"18880:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6366,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6354,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"18893:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":6355,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"18897:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18893:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6357,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18892:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6358,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"18907:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18892:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6360,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18891:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6361,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6101,"src":"18918:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6362,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"18922:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18918:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6364,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18917:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18891:38:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18880:49:39"},{"assignments":[6368],"declarations":[{"constant":false,"id":6368,"mutability":"mutable","name":"z_squared","nameLocation":"18950:9:39","nodeType":"VariableDeclaration","scope":6478,"src":"18943:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6367,"name":"int256","nodeType":"ElementaryTypeName","src":"18943:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6375,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6369,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6353,"src":"18963:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6370,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6353,"src":"18967:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18963:5:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6372,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18962:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6373,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"18972:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18962:16:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18943:35:39"},{"assignments":[6377],"declarations":[{"constant":false,"id":6377,"mutability":"mutable","name":"num","nameLocation":"19074:3:39","nodeType":"VariableDeclaration","scope":6478,"src":"19067:10:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6376,"name":"int256","nodeType":"ElementaryTypeName","src":"19067:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6379,"initialValue":{"id":6378,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6353,"src":"19080:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19067:14:39"},{"assignments":[6381],"declarations":[{"constant":false,"id":6381,"mutability":"mutable","name":"seriesSum","nameLocation":"19210:9:39","nodeType":"VariableDeclaration","scope":6478,"src":"19203:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6380,"name":"int256","nodeType":"ElementaryTypeName","src":"19203:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6383,"initialValue":{"id":6382,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6377,"src":"19222:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19203:22:39"},{"expression":{"id":6391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6384,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6377,"src":"19304:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6385,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6377,"src":"19311:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6386,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6368,"src":"19317:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19311:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6388,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19310:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6389,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"19330:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19310:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19304:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6392,"nodeType":"ExpressionStatement","src":"19304:32:39"},{"expression":{"id":6397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6393,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6381,"src":"19350:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6394,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6377,"src":"19363:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":6395,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19369:1:39","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"19363:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19350:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6398,"nodeType":"ExpressionStatement","src":"19350:20:39"},{"expression":{"id":6406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6399,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6377,"src":"19385:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6400,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6377,"src":"19392:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6401,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6368,"src":"19398:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19392:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6403,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19391:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6404,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"19411:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19391:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19385:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6407,"nodeType":"ExpressionStatement","src":"19385:32:39"},{"expression":{"id":6412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6408,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6381,"src":"19431:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6409,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6377,"src":"19444:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":6410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19450:1:39","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"19444:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19431:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6413,"nodeType":"ExpressionStatement","src":"19431:20:39"},{"expression":{"id":6421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6414,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6377,"src":"19466:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6415,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6377,"src":"19473:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6416,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6368,"src":"19479:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19473:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6418,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19472:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6419,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"19492:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19472:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19466:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6422,"nodeType":"ExpressionStatement","src":"19466:32:39"},{"expression":{"id":6427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6423,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6381,"src":"19512:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6424,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6377,"src":"19525:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":6425,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19531:1:39","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"19525:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19512:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6428,"nodeType":"ExpressionStatement","src":"19512:20:39"},{"expression":{"id":6436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6429,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6377,"src":"19547:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6430,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6377,"src":"19554:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6431,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6368,"src":"19560:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19554:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6433,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19553:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6434,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"19573:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19553:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19547:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6437,"nodeType":"ExpressionStatement","src":"19547:32:39"},{"expression":{"id":6442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6438,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6381,"src":"19593:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6439,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6377,"src":"19606:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":6440,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19612:1:39","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"19606:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19593:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6443,"nodeType":"ExpressionStatement","src":"19593:20:39"},{"expression":{"id":6451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6444,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6377,"src":"19628:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6445,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6377,"src":"19635:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6446,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6368,"src":"19641:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19635:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6448,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19634:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6449,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5304,"src":"19654:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19634:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19628:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6452,"nodeType":"ExpressionStatement","src":"19628:32:39"},{"expression":{"id":6457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6453,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6381,"src":"19674:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6454,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6377,"src":"19687:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":6455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19693:2:39","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"19687:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19674:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6458,"nodeType":"ExpressionStatement","src":"19674:21:39"},{"expression":{"id":6461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6459,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6381,"src":"19866:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"32","id":6460,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19879:1:39","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"19866:14:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6462,"nodeType":"ExpressionStatement","src":"19866:14:39"},{"assignments":[6464],"declarations":[{"constant":false,"id":6464,"mutability":"mutable","name":"result","nameLocation":"20169:6:39","nodeType":"VariableDeclaration","scope":6478,"src":"20162:13:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6463,"name":"int256","nodeType":"ElementaryTypeName","src":"20162:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6471,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6465,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6130,"src":"20179:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6466,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6381,"src":"20185:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20179:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6468,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20178:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":6469,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20198:3:39","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"20178:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"20162:39:39"},{"expression":{"condition":{"id":6472,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6107,"src":"20303:16:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":6475,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6464,"src":"20332:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"20303:35:39","trueExpression":{"id":6474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"20322:7:39","subExpression":{"id":6473,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6464,"src":"20323:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":6105,"id":6477,"nodeType":"Return","src":"20296:42:39"}]}]},"documentation":{"id":6099,"nodeType":"StructuredDocumentation","src":"14678:88:39","text":"@dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":6480,"implemented":true,"kind":"function","modifiers":[],"name":"_ln","nameLocation":"14780:3:39","nodeType":"FunctionDefinition","parameters":{"id":6102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6101,"mutability":"mutable","name":"a","nameLocation":"14791:1:39","nodeType":"VariableDeclaration","scope":6480,"src":"14784:8:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6100,"name":"int256","nodeType":"ElementaryTypeName","src":"14784:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14783:10:39"},"returnParameters":{"id":6105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6104,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6480,"src":"14816:6:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6103,"name":"int256","nodeType":"ElementaryTypeName","src":"14816:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14815:8:39"},"scope":6636,"src":"14771:5584:39","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":6634,"nodeType":"Block","src":"20678:1804:39","statements":[{"id":6633,"nodeType":"UncheckedBlock","src":"20892:1584:39","statements":[{"expression":{"id":6490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6488,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6483,"src":"20916:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"id":6489,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"20921:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20916:11:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6491,"nodeType":"ExpressionStatement","src":"20916:11:39"},{"assignments":[6493],"declarations":[{"constant":false,"id":6493,"mutability":"mutable","name":"z","nameLocation":"21315:1:39","nodeType":"VariableDeclaration","scope":6633,"src":"21308:8:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6492,"name":"int256","nodeType":"ElementaryTypeName","src":"21308:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6506,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6494,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6483,"src":"21321:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":6495,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"21325:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21321:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6497,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21320:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6498,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"21335:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21320:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6500,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21319:23:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6501,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6483,"src":"21346:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6502,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"21350:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21346:10:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6504,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21345:12:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21319:38:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21308:49:39"},{"assignments":[6508],"declarations":[{"constant":false,"id":6508,"mutability":"mutable","name":"z_squared","nameLocation":"21378:9:39","nodeType":"VariableDeclaration","scope":6633,"src":"21371:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6507,"name":"int256","nodeType":"ElementaryTypeName","src":"21371:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6515,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6509,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6493,"src":"21391:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6510,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6493,"src":"21395:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21391:5:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6512,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21390:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6513,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"21400:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21390:16:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21371:35:39"},{"assignments":[6517],"declarations":[{"constant":false,"id":6517,"mutability":"mutable","name":"num","nameLocation":"21502:3:39","nodeType":"VariableDeclaration","scope":6633,"src":"21495:10:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6516,"name":"int256","nodeType":"ElementaryTypeName","src":"21495:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6519,"initialValue":{"id":6518,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6493,"src":"21508:1:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21495:14:39"},{"assignments":[6521],"declarations":[{"constant":false,"id":6521,"mutability":"mutable","name":"seriesSum","nameLocation":"21638:9:39","nodeType":"VariableDeclaration","scope":6633,"src":"21631:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6520,"name":"int256","nodeType":"ElementaryTypeName","src":"21631:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6523,"initialValue":{"id":6522,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"21650:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21631:22:39"},{"expression":{"id":6531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6524,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"21732:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6525,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"21739:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6526,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6508,"src":"21745:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21739:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6528,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21738:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6529,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"21758:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21738:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21732:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6532,"nodeType":"ExpressionStatement","src":"21732:32:39"},{"expression":{"id":6537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6533,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6521,"src":"21778:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6534,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"21791:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":6535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21797:1:39","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"21791:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21778:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6538,"nodeType":"ExpressionStatement","src":"21778:20:39"},{"expression":{"id":6546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6539,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"21813:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6540,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"21820:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6541,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6508,"src":"21826:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21820:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6543,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21819:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6544,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"21839:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21819:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21813:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6547,"nodeType":"ExpressionStatement","src":"21813:32:39"},{"expression":{"id":6552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6548,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6521,"src":"21859:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6549,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"21872:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":6550,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21878:1:39","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"21872:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21859:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6553,"nodeType":"ExpressionStatement","src":"21859:20:39"},{"expression":{"id":6561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6554,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"21894:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6555,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"21901:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6556,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6508,"src":"21907:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21901:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6558,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21900:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6559,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"21920:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21900:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21894:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6562,"nodeType":"ExpressionStatement","src":"21894:32:39"},{"expression":{"id":6567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6563,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6521,"src":"21940:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6564,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"21953:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":6565,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21959:1:39","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"21953:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21940:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6568,"nodeType":"ExpressionStatement","src":"21940:20:39"},{"expression":{"id":6576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6569,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"21975:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6570,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"21982:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6571,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6508,"src":"21988:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21982:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6573,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21981:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6574,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"22001:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21981:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21975:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6577,"nodeType":"ExpressionStatement","src":"21975:32:39"},{"expression":{"id":6582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6578,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6521,"src":"22021:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6579,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"22034:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":6580,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22040:1:39","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"22034:7:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22021:20:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6583,"nodeType":"ExpressionStatement","src":"22021:20:39"},{"expression":{"id":6591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6584,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"22056:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6585,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"22063:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6586,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6508,"src":"22069:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22063:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6588,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22062:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6589,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"22082:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22062:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22056:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6592,"nodeType":"ExpressionStatement","src":"22056:32:39"},{"expression":{"id":6597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6593,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6521,"src":"22102:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6594,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"22115:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":6595,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22121:2:39","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"22115:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22102:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6598,"nodeType":"ExpressionStatement","src":"22102:21:39"},{"expression":{"id":6606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6599,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"22138:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6600,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"22145:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6601,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6508,"src":"22151:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22145:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6603,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22144:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6604,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"22164:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22144:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22138:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6607,"nodeType":"ExpressionStatement","src":"22138:32:39"},{"expression":{"id":6612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6608,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6521,"src":"22184:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6609,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"22197:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3133","id":6610,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22203:2:39","typeDescriptions":{"typeIdentifier":"t_rational_13_by_1","typeString":"int_const 13"},"value":"13"},"src":"22197:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22184:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6613,"nodeType":"ExpressionStatement","src":"22184:21:39"},{"expression":{"id":6621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6614,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"22220:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6615,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"22227:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6616,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6508,"src":"22233:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22227:15:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6618,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22226:17:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6619,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"22246:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22226:26:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22220:32:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6622,"nodeType":"ExpressionStatement","src":"22220:32:39"},{"expression":{"id":6627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6623,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6521,"src":"22266:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6624,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6517,"src":"22279:3:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3135","id":6625,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22285:2:39","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"15"},"src":"22279:8:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22266:21:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6628,"nodeType":"ExpressionStatement","src":"22266:21:39"},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6629,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6521,"src":"22452:9:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":6630,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22464:1:39","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22452:13:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":6487,"id":6632,"nodeType":"Return","src":"22445:20:39"}]}]},"documentation":{"id":6481,"nodeType":"StructuredDocumentation","src":"20361:256:39","text":" @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n for x close to one.\n Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND."},"id":6635,"implemented":true,"kind":"function","modifiers":[],"name":"_ln_36","nameLocation":"20631:6:39","nodeType":"FunctionDefinition","parameters":{"id":6484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6483,"mutability":"mutable","name":"x","nameLocation":"20645:1:39","nodeType":"VariableDeclaration","scope":6635,"src":"20638:8:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6482,"name":"int256","nodeType":"ElementaryTypeName","src":"20638:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20637:10:39"},"returnParameters":{"id":6487,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6486,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6635,"src":"20670:6:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6485,"name":"int256","nodeType":"ElementaryTypeName","src":"20670:6:39","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20669:8:39"},"scope":6636,"src":"20622:1860:39","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":6637,"src":"595:21889:39","usedErrors":[5286,5289,5292,5295,5298],"usedEvents":[]}],"src":"33:22452:39"},"id":39},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol","exportedSymbols":{"EnumerableSet":[6925]},"id":6926,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6638,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:40"},{"abstract":false,"baseContracts":[],"canonicalName":"EnumerableSet","contractDependencies":[],"contractKind":"library","documentation":{"id":6639,"nodeType":"StructuredDocumentation","src":"59:956:40","text":" @notice Library for managing sets of primitive types.\n @dev See https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types.\n Based on the EnumerableSet library from OpenZeppelin Contracts, altered to remove the base private functions that\n work on bytes32, replacing them with a native implementation for address values, to reduce bytecode size and\n runtime costs.\n The `unchecked_at` function was also added, which allows for more gas efficient data reads in some scenarios.\n Sets have the following properties:\n - Elements are added, removed, and checked for existence in constant time (O(1)).\n - Elements are enumerated in O(n). No guarantees are made on the ordering.\n ```\n contract Example {\n // Add the library methods\n using EnumerableSet for EnumerableSet.AddressSet;\n // Declare a set state variable\n EnumerableSet.AddressSet private mySet;\n }\n ```"},"fullyImplemented":true,"id":6925,"linearizedBaseContracts":[6925],"name":"EnumerableSet","nameLocation":"1024:13:40","nodeType":"ContractDefinition","nodes":[{"canonicalName":"EnumerableSet.AddressSet","id":6647,"members":[{"constant":false,"id":6642,"mutability":"mutable","name":"_values","nameLocation":"1364:7:40","nodeType":"VariableDeclaration","scope":6647,"src":"1354:17:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6640,"name":"address","nodeType":"ElementaryTypeName","src":"1354:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6641,"nodeType":"ArrayTypeName","src":"1354:9:40","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":6646,"mutability":"mutable","name":"_indexes","nameLocation":"1554:8:40","nodeType":"VariableDeclaration","scope":6647,"src":"1504:58:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":6645,"keyName":"addressKey","keyNameLocation":"1520:10:40","keyType":{"id":6643,"name":"address","nodeType":"ElementaryTypeName","src":"1512:7:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1504:49:40","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"indexValue","valueNameLocation":"1542:10:40","valueType":{"id":6644,"name":"uint256","nodeType":"ElementaryTypeName","src":"1534:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"name":"AddressSet","nameLocation":"1299:10:40","nodeType":"StructDefinition","scope":6925,"src":"1292:277:40","visibility":"public"},{"documentation":{"id":6648,"nodeType":"StructuredDocumentation","src":"1575:61:40","text":"@notice An index is beyond the current bounds of the set."},"errorSelector":"4e23d035","id":6650,"name":"IndexOutOfBounds","nameLocation":"1647:16:40","nodeType":"ErrorDefinition","parameters":{"id":6649,"nodeType":"ParameterList","parameters":[],"src":"1663:2:40"},"src":"1641:25:40"},{"documentation":{"id":6651,"nodeType":"StructuredDocumentation","src":"1672:54:40","text":"@notice An element that is not present in the set."},"errorSelector":"66af5392","id":6653,"name":"ElementNotFound","nameLocation":"1737:15:40","nodeType":"ErrorDefinition","parameters":{"id":6652,"nodeType":"ParameterList","parameters":[],"src":"1752:2:40"},"src":"1731:24:40"},{"body":{"id":6694,"nodeType":"Block","src":"1986:335:40","statements":[{"condition":{"id":6668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2000:21:40","subExpression":{"arguments":[{"id":6665,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6657,"src":"2010:3:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},{"id":6666,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6659,"src":"2015:5:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6664,"name":"contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6805,"src":"2001:8:40","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$6647_storage_ptr_$_t_address_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"}},"id":6667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2001:20:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6692,"nodeType":"Block","src":"2278:37:40","statements":[{"expression":{"hexValue":"66616c7365","id":6690,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2299:5:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":6663,"id":6691,"nodeType":"Return","src":"2292:12:40"}]},"id":6693,"nodeType":"IfStatement","src":"1996:319:40","trueBody":{"id":6689,"nodeType":"Block","src":"2023:249:40","statements":[{"expression":{"arguments":[{"id":6674,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6659,"src":"2054:5:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":6669,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6657,"src":"2037:3:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6672,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2041:7:40","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6642,"src":"2037:11:40","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2049:4:40","memberName":"push","nodeType":"MemberAccess","src":"2037:16:40","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$attached_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer,address)"}},"id":6675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2037:23:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6676,"nodeType":"ExpressionStatement","src":"2037:23:40"},{"expression":{"id":6685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":6677,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6657,"src":"2196:3:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6680,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2200:8:40","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6646,"src":"2196:12:40","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6681,"indexExpression":{"id":6679,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6659,"src":"2209:5:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2196:19:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":6682,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6657,"src":"2218:3:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6683,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2222:7:40","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6642,"src":"2218:11:40","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2230:6:40","memberName":"length","nodeType":"MemberAccess","src":"2218:18:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2196:40:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6686,"nodeType":"ExpressionStatement","src":"2196:40:40"},{"expression":{"hexValue":"74727565","id":6687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2257:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":6663,"id":6688,"nodeType":"Return","src":"2250:11:40"}]}}]},"documentation":{"id":6654,"nodeType":"StructuredDocumentation","src":"1761:144:40","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, if it was not already present."},"id":6695,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"1919:3:40","nodeType":"FunctionDefinition","parameters":{"id":6660,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6657,"mutability":"mutable","name":"set","nameLocation":"1942:3:40","nodeType":"VariableDeclaration","scope":6695,"src":"1923:22:40","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6656,"nodeType":"UserDefinedTypeName","pathNode":{"id":6655,"name":"AddressSet","nameLocations":["1923:10:40"],"nodeType":"IdentifierPath","referencedDeclaration":6647,"src":"1923:10:40"},"referencedDeclaration":6647,"src":"1923:10:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6659,"mutability":"mutable","name":"value","nameLocation":"1955:5:40","nodeType":"VariableDeclaration","scope":6695,"src":"1947:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6658,"name":"address","nodeType":"ElementaryTypeName","src":"1947:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1922:39:40"},"returnParameters":{"id":6663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6662,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6695,"src":"1980:4:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6661,"name":"bool","nodeType":"ElementaryTypeName","src":"1980:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1979:6:40"},"scope":6925,"src":"1910:411:40","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6785,"nodeType":"Block","src":"2552:1498:40","statements":[{"assignments":[6707],"declarations":[{"constant":false,"id":6707,"mutability":"mutable","name":"valueIndex","nameLocation":"2671:10:40","nodeType":"VariableDeclaration","scope":6785,"src":"2663:18:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6706,"name":"uint256","nodeType":"ElementaryTypeName","src":"2663:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6712,"initialValue":{"baseExpression":{"expression":{"id":6708,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6699,"src":"2684:3:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6709,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2688:8:40","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6646,"src":"2684:12:40","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6711,"indexExpression":{"id":6710,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6701,"src":"2697:5:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2684:19:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2663:40:40"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6713,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6707,"src":"2718:10:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6714,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2732:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2718:15:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6783,"nodeType":"Block","src":"4007:37:40","statements":[{"expression":{"hexValue":"66616c7365","id":6781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4028:5:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":6705,"id":6782,"nodeType":"Return","src":"4021:12:40"}]},"id":6784,"nodeType":"IfStatement","src":"2714:1330:40","trueBody":{"id":6780,"nodeType":"Block","src":"2735:1266:40","statements":[{"assignments":[6717],"declarations":[{"constant":false,"id":6717,"mutability":"mutable","name":"toDeleteIndex","nameLocation":"3094:13:40","nodeType":"VariableDeclaration","scope":6780,"src":"3086:21:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6716,"name":"uint256","nodeType":"ElementaryTypeName","src":"3086:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6718,"nodeType":"VariableDeclarationStatement","src":"3086:21:40"},{"assignments":[6720],"declarations":[{"constant":false,"id":6720,"mutability":"mutable","name":"lastIndex","nameLocation":"3129:9:40","nodeType":"VariableDeclaration","scope":6780,"src":"3121:17:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6719,"name":"uint256","nodeType":"ElementaryTypeName","src":"3121:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6721,"nodeType":"VariableDeclarationStatement","src":"3121:17:40"},{"id":6736,"nodeType":"UncheckedBlock","src":"3153:125:40","statements":[{"expression":{"id":6726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6722,"name":"toDeleteIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6717,"src":"3181:13:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6723,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6707,"src":"3197:10:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":6724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3210:1:40","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3197:14:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3181:30:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6727,"nodeType":"ExpressionStatement","src":"3181:30:40"},{"expression":{"id":6734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6728,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6720,"src":"3229:9:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":6729,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6699,"src":"3241:3:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6730,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3245:7:40","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6642,"src":"3241:11:40","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3253:6:40","memberName":"length","nodeType":"MemberAccess","src":"3241:18:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":6732,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3262:1:40","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3241:22:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3229:34:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6735,"nodeType":"ExpressionStatement","src":"3229:34:40"}]},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6737,"name":"toDeleteIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6717,"src":"3378:13:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":6738,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6720,"src":"3395:9:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3378:26:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6764,"nodeType":"IfStatement","src":"3374:399:40","trueBody":{"id":6763,"nodeType":"Block","src":"3406:367:40","statements":[{"assignments":[6741],"declarations":[{"constant":false,"id":6741,"mutability":"mutable","name":"lastValue","nameLocation":"3432:9:40","nodeType":"VariableDeclaration","scope":6763,"src":"3424:17:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6740,"name":"address","nodeType":"ElementaryTypeName","src":"3424:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":6746,"initialValue":{"baseExpression":{"expression":{"id":6742,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6699,"src":"3444:3:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6743,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3448:7:40","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6642,"src":"3444:11:40","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6745,"indexExpression":{"id":6744,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6720,"src":"3456:9:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3444:22:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3424:42:40"},{"expression":{"id":6753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":6747,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6699,"src":"3561:3:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6750,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3565:7:40","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6642,"src":"3561:11:40","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6751,"indexExpression":{"id":6749,"name":"toDeleteIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6717,"src":"3573:13:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3561:26:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6752,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6741,"src":"3590:9:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3561:38:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6754,"nodeType":"ExpressionStatement","src":"3561:38:40"},{"expression":{"id":6761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":6755,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6699,"src":"3673:3:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6758,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3677:8:40","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6646,"src":"3673:12:40","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6759,"indexExpression":{"id":6757,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6741,"src":"3686:9:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3673:23:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6760,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6707,"src":"3699:10:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3673:36:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6762,"nodeType":"ExpressionStatement","src":"3673:36:40"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":6765,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6699,"src":"3852:3:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6768,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3856:7:40","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6642,"src":"3852:11:40","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3864:3:40","memberName":"pop","nodeType":"MemberAccess","src":"3852:15:40","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer)"}},"id":6770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3852:17:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6771,"nodeType":"ExpressionStatement","src":"3852:17:40"},{"expression":{"id":6776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"3938:26:40","subExpression":{"baseExpression":{"expression":{"id":6772,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6699,"src":"3945:3:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6773,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3949:8:40","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6646,"src":"3945:12:40","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6775,"indexExpression":{"id":6774,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6701,"src":"3958:5:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3945:19:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6777,"nodeType":"ExpressionStatement","src":"3938:26:40"},{"expression":{"hexValue":"74727565","id":6778,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3986:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":6705,"id":6779,"nodeType":"Return","src":"3979:11:40"}]}}]},"documentation":{"id":6696,"nodeType":"StructuredDocumentation","src":"2327:141:40","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set; i.e., if it was present."},"id":6786,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"2482:6:40","nodeType":"FunctionDefinition","parameters":{"id":6702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6699,"mutability":"mutable","name":"set","nameLocation":"2508:3:40","nodeType":"VariableDeclaration","scope":6786,"src":"2489:22:40","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6698,"nodeType":"UserDefinedTypeName","pathNode":{"id":6697,"name":"AddressSet","nameLocations":["2489:10:40"],"nodeType":"IdentifierPath","referencedDeclaration":6647,"src":"2489:10:40"},"referencedDeclaration":6647,"src":"2489:10:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6701,"mutability":"mutable","name":"value","nameLocation":"2521:5:40","nodeType":"VariableDeclaration","scope":6786,"src":"2513:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6700,"name":"address","nodeType":"ElementaryTypeName","src":"2513:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2488:39:40"},"returnParameters":{"id":6705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6704,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6786,"src":"2546:4:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6703,"name":"bool","nodeType":"ElementaryTypeName","src":"2546:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2545:6:40"},"scope":6925,"src":"2473:1577:40","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6804,"nodeType":"Block","src":"4202:48:40","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":6797,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6790,"src":"4219:3:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6798,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4223:8:40","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6646,"src":"4219:12:40","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6800,"indexExpression":{"id":6799,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6792,"src":"4232:5:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4219:19:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6801,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4242:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4219:24:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6796,"id":6803,"nodeType":"Return","src":"4212:31:40"}]},"documentation":{"id":6787,"nodeType":"StructuredDocumentation","src":"4056:55:40","text":"@dev Returns true if the value is in the set. O(1)."},"id":6805,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"4125:8:40","nodeType":"FunctionDefinition","parameters":{"id":6793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6790,"mutability":"mutable","name":"set","nameLocation":"4153:3:40","nodeType":"VariableDeclaration","scope":6805,"src":"4134:22:40","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6789,"nodeType":"UserDefinedTypeName","pathNode":{"id":6788,"name":"AddressSet","nameLocations":["4134:10:40"],"nodeType":"IdentifierPath","referencedDeclaration":6647,"src":"4134:10:40"},"referencedDeclaration":6647,"src":"4134:10:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6792,"mutability":"mutable","name":"value","nameLocation":"4166:5:40","nodeType":"VariableDeclaration","scope":6805,"src":"4158:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6791,"name":"address","nodeType":"ElementaryTypeName","src":"4158:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4133:39:40"},"returnParameters":{"id":6796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6795,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6805,"src":"4196:4:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6794,"name":"bool","nodeType":"ElementaryTypeName","src":"4196:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4195:6:40"},"scope":6925,"src":"4116:134:40","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6818,"nodeType":"Block","src":"4388:42:40","statements":[{"expression":{"expression":{"expression":{"id":6814,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6809,"src":"4405:3:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6815,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4409:7:40","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6642,"src":"4405:11:40","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4417:6:40","memberName":"length","nodeType":"MemberAccess","src":"4405:18:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6813,"id":6817,"nodeType":"Return","src":"4398:25:40"}]},"documentation":{"id":6806,"nodeType":"StructuredDocumentation","src":"4256:55:40","text":"@dev Returns the number of values on the set. O(1)."},"id":6819,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"4325:6:40","nodeType":"FunctionDefinition","parameters":{"id":6810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6809,"mutability":"mutable","name":"set","nameLocation":"4351:3:40","nodeType":"VariableDeclaration","scope":6819,"src":"4332:22:40","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6808,"nodeType":"UserDefinedTypeName","pathNode":{"id":6807,"name":"AddressSet","nameLocations":["4332:10:40"],"nodeType":"IdentifierPath","referencedDeclaration":6647,"src":"4332:10:40"},"referencedDeclaration":6647,"src":"4332:10:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"4331:24:40"},"returnParameters":{"id":6813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6812,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6819,"src":"4379:7:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6811,"name":"uint256","nodeType":"ElementaryTypeName","src":"4379:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4378:9:40"},"scope":6925,"src":"4316:114:40","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6845,"nodeType":"Block","src":"4855:141:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6830,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6825,"src":"4869:5:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"expression":{"id":6831,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6823,"src":"4878:3:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6832,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4882:7:40","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6642,"src":"4878:11:40","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4890:6:40","memberName":"length","nodeType":"MemberAccess","src":"4878:18:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4869:27:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6839,"nodeType":"IfStatement","src":"4865:83:40","trueBody":{"id":6838,"nodeType":"Block","src":"4898:50:40","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6835,"name":"IndexOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6650,"src":"4919:16:40","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4919:18:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6837,"nodeType":"RevertStatement","src":"4912:25:40"}]}},{"expression":{"arguments":[{"id":6841,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6823,"src":"4978:3:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},{"id":6842,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6825,"src":"4983:5:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6840,"name":"unchecked_at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6863,"src":"4965:12:40","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$6647_storage_ptr_$_t_uint256_$returns$_t_address_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":6843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4965:24:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":6829,"id":6844,"nodeType":"Return","src":"4958:31:40"}]},"documentation":{"id":6820,"nodeType":"StructuredDocumentation","src":"4436:331:40","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":6846,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"4781:2:40","nodeType":"FunctionDefinition","parameters":{"id":6826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6823,"mutability":"mutable","name":"set","nameLocation":"4803:3:40","nodeType":"VariableDeclaration","scope":6846,"src":"4784:22:40","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6822,"nodeType":"UserDefinedTypeName","pathNode":{"id":6821,"name":"AddressSet","nameLocations":["4784:10:40"],"nodeType":"IdentifierPath","referencedDeclaration":6647,"src":"4784:10:40"},"referencedDeclaration":6647,"src":"4784:10:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6825,"mutability":"mutable","name":"index","nameLocation":"4816:5:40","nodeType":"VariableDeclaration","scope":6846,"src":"4808:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6824,"name":"uint256","nodeType":"ElementaryTypeName","src":"4808:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4783:39:40"},"returnParameters":{"id":6829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6828,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6846,"src":"4846:7:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6827,"name":"address","nodeType":"ElementaryTypeName","src":"4846:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4845:9:40"},"scope":6925,"src":"4772:224:40","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6862,"nodeType":"Block","src":"5401:42:40","statements":[{"expression":{"baseExpression":{"expression":{"id":6857,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6850,"src":"5418:3:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6858,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5422:7:40","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":6642,"src":"5418:11:40","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":6860,"indexExpression":{"id":6859,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6852,"src":"5430:5:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5418:18:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":6856,"id":6861,"nodeType":"Return","src":"5411:25:40"}]},"documentation":{"id":6847,"nodeType":"StructuredDocumentation","src":"5002:301:40","text":" @dev Same as {at}, except this doesn't revert if `index` it outside of the set (i.e. if it is equal or larger\n than {length}). O(1).\n This function performs one less storage read than {at}, but should only be used when `index` is known to be\n within bounds."},"id":6863,"implemented":true,"kind":"function","modifiers":[],"name":"unchecked_at","nameLocation":"5317:12:40","nodeType":"FunctionDefinition","parameters":{"id":6853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6850,"mutability":"mutable","name":"set","nameLocation":"5349:3:40","nodeType":"VariableDeclaration","scope":6863,"src":"5330:22:40","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6849,"nodeType":"UserDefinedTypeName","pathNode":{"id":6848,"name":"AddressSet","nameLocations":["5330:10:40"],"nodeType":"IdentifierPath","referencedDeclaration":6647,"src":"5330:10:40"},"referencedDeclaration":6647,"src":"5330:10:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6852,"mutability":"mutable","name":"index","nameLocation":"5362:5:40","nodeType":"VariableDeclaration","scope":6863,"src":"5354:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6851,"name":"uint256","nodeType":"ElementaryTypeName","src":"5354:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5329:39:40"},"returnParameters":{"id":6856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6855,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6863,"src":"5392:7:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6854,"name":"address","nodeType":"ElementaryTypeName","src":"5392:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5391:9:40"},"scope":6925,"src":"5308:135:40","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6894,"nodeType":"Block","src":"5617:197:40","statements":[{"assignments":[6875],"declarations":[{"constant":false,"id":6875,"mutability":"mutable","name":"rawIndex","nameLocation":"5635:8:40","nodeType":"VariableDeclaration","scope":6894,"src":"5627:16:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6874,"name":"uint256","nodeType":"ElementaryTypeName","src":"5627:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6880,"initialValue":{"baseExpression":{"expression":{"id":6876,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6867,"src":"5646:3:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6877,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5650:8:40","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6646,"src":"5646:12:40","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6879,"indexExpression":{"id":6878,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6869,"src":"5659:5:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5646:19:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5627:38:40"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6881,"name":"rawIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6875,"src":"5680:8:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5692:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5680:13:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6888,"nodeType":"IfStatement","src":"5676:68:40","trueBody":{"id":6887,"nodeType":"Block","src":"5695:49:40","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6884,"name":"ElementNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6653,"src":"5716:15:40","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5716:17:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6886,"nodeType":"RevertStatement","src":"5709:24:40"}]}},{"id":6893,"nodeType":"UncheckedBlock","src":"5754:54:40","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6889,"name":"rawIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6875,"src":"5785:8:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":6890,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5796:1:40","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5785:12:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6873,"id":6892,"nodeType":"Return","src":"5778:19:40"}]}]},"documentation":{"id":6864,"nodeType":"StructuredDocumentation","src":"5449:75:40","text":"@dev Return the index of an element in the set, or revert if not found."},"id":6895,"implemented":true,"kind":"function","modifiers":[],"name":"indexOf","nameLocation":"5538:7:40","nodeType":"FunctionDefinition","parameters":{"id":6870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6867,"mutability":"mutable","name":"set","nameLocation":"5565:3:40","nodeType":"VariableDeclaration","scope":6895,"src":"5546:22:40","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6866,"nodeType":"UserDefinedTypeName","pathNode":{"id":6865,"name":"AddressSet","nameLocations":["5546:10:40"],"nodeType":"IdentifierPath","referencedDeclaration":6647,"src":"5546:10:40"},"referencedDeclaration":6647,"src":"5546:10:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6869,"mutability":"mutable","name":"value","nameLocation":"5578:5:40","nodeType":"VariableDeclaration","scope":6895,"src":"5570:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6868,"name":"address","nodeType":"ElementaryTypeName","src":"5570:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5545:39:40"},"returnParameters":{"id":6873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6872,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6895,"src":"5608:7:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6871,"name":"uint256","nodeType":"ElementaryTypeName","src":"5608:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5607:9:40"},"scope":6925,"src":"5529:285:40","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6923,"nodeType":"Block","src":"6217:139:40","statements":[{"assignments":[6907],"declarations":[{"constant":false,"id":6907,"mutability":"mutable","name":"rawIndex","nameLocation":"6235:8:40","nodeType":"VariableDeclaration","scope":6923,"src":"6227:16:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6906,"name":"uint256","nodeType":"ElementaryTypeName","src":"6227:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6912,"initialValue":{"baseExpression":{"expression":{"id":6908,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6899,"src":"6246:3:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":6909,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6250:8:40","memberName":"_indexes","nodeType":"MemberAccess","referencedDeclaration":6646,"src":"6246:12:40","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6911,"indexExpression":{"id":6910,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6901,"src":"6259:5:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6246:19:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6227:38:40"},{"id":6922,"nodeType":"UncheckedBlock","src":"6276:74:40","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6913,"name":"rawIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6907,"src":"6307:8:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6319:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6307:13:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6917,"name":"rawIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6907,"src":"6327:8:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":6918,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6338:1:40","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6327:12:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6307:32:40","trueExpression":{"hexValue":"30","id":6916,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6323:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6905,"id":6921,"nodeType":"Return","src":"6300:39:40"}]}]},"documentation":{"id":6896,"nodeType":"StructuredDocumentation","src":"5820:294:40","text":" @dev Same as {indexOf}, except this doesn't revert if the element isn't present in the set.\n In this case, it returns 0.\n This function performs one less storage read than {indexOf}, but should only be used when `index` is known to be\n within bounds."},"id":6924,"implemented":true,"kind":"function","modifiers":[],"name":"unchecked_indexOf","nameLocation":"6128:17:40","nodeType":"FunctionDefinition","parameters":{"id":6902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6899,"mutability":"mutable","name":"set","nameLocation":"6165:3:40","nodeType":"VariableDeclaration","scope":6924,"src":"6146:22:40","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":6898,"nodeType":"UserDefinedTypeName","pathNode":{"id":6897,"name":"AddressSet","nameLocations":["6146:10:40"],"nodeType":"IdentifierPath","referencedDeclaration":6647,"src":"6146:10:40"},"referencedDeclaration":6647,"src":"6146:10:40","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":6901,"mutability":"mutable","name":"value","nameLocation":"6178:5:40","nodeType":"VariableDeclaration","scope":6924,"src":"6170:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6900,"name":"address","nodeType":"ElementaryTypeName","src":"6170:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6145:39:40"},"returnParameters":{"id":6905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6904,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6924,"src":"6208:7:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6903,"name":"uint256","nodeType":"ElementaryTypeName","src":"6208:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6207:9:40"},"scope":6925,"src":"6119:237:40","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":6926,"src":"1016:5342:40","usedErrors":[6650,6653],"usedEvents":[]}],"src":"33:6326:40"},"id":40},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","exportedSymbols":{"ReentrancyGuardTransient":[6994],"StorageSlotExtension":[7207]},"id":6995,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6927,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:41"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"./StorageSlotExtension.sol","id":6929,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6995,"sourceUnit":7208,"src":"59:66:41","symbolAliases":[{"foreign":{"id":6928,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7207,"src":"68:20:41","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"ReentrancyGuardTransient","contractDependencies":[],"contractKind":"contract","documentation":{"id":6930,"nodeType":"StructuredDocumentation","src":"127:155:41","text":" @notice Variant of {ReentrancyGuard} that uses transient storage.\n @dev NOTE: This variant only works on networks where EIP-1153 is available."},"fullyImplemented":true,"id":6994,"linearizedBaseContracts":[6994],"name":"ReentrancyGuardTransient","nameLocation":"301:24:41","nodeType":"ContractDefinition","nodes":[{"global":false,"id":6932,"libraryName":{"id":6931,"name":"StorageSlotExtension","nameLocations":["338:20:41"],"nodeType":"IdentifierPath","referencedDeclaration":7207,"src":"338:20:41"},"nodeType":"UsingForDirective","src":"332:33:41"},{"constant":true,"id":6935,"mutability":"constant","name":"_REENTRANCY_GUARD_STORAGE","nameLocation":"515:25:41","nodeType":"VariableDeclaration","scope":6994,"src":"490:127:41","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6933,"name":"bytes32","nodeType":"ElementaryTypeName","src":"490:7:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307839623737396231373432326430646639323232333031386233326234643166613436653037313732336436383137653234383664303033626563633535663030","id":6934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"551:66:41","typeDescriptions":{"typeIdentifier":"t_rational_70319816728846589445362000750570655803700195216363692647688146666176345628416_by_1","typeString":"int_const 7031...(69 digits omitted)...8416"},"value":"0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"},"visibility":"private"},{"documentation":{"id":6936,"nodeType":"StructuredDocumentation","src":"624:40:41","text":"@notice Unauthorized reentrant call."},"errorSelector":"3ee5aeb5","id":6938,"name":"ReentrancyGuardReentrantCall","nameLocation":"675:28:41","nodeType":"ErrorDefinition","parameters":{"id":6937,"nodeType":"ParameterList","parameters":[],"src":"703:2:41"},"src":"669:37:41"},{"body":{"id":6948,"nodeType":"Block","src":"1107:79:41","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6941,"name":"_nonReentrantBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6968,"src":"1117:19:41","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":6942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1117:21:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6943,"nodeType":"ExpressionStatement","src":"1117:21:41"},{"id":6944,"nodeType":"PlaceholderStatement","src":"1148:1:41"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6945,"name":"_nonReentrantAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6980,"src":"1159:18:41","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":6946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1159:20:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6947,"nodeType":"ExpressionStatement","src":"1159:20:41"}]},"documentation":{"id":6939,"nodeType":"StructuredDocumentation","src":"712:366:41","text":" @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work."},"id":6949,"name":"nonReentrant","nameLocation":"1092:12:41","nodeType":"ModifierDefinition","parameters":{"id":6940,"nodeType":"ParameterList","parameters":[],"src":"1104:2:41"},"src":"1083:103:41","virtual":false,"visibility":"internal"},{"body":{"id":6967,"nodeType":"Block","src":"1231:310:41","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":6952,"name":"_reentrancyGuardEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6993,"src":"1320:23:41","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":6953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1320:25:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6958,"nodeType":"IfStatement","src":"1316:93:41","trueBody":{"id":6957,"nodeType":"Block","src":"1347:62:41","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6954,"name":"ReentrancyGuardReentrantCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6938,"src":"1368:28:41","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1368:30:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6956,"nodeType":"RevertStatement","src":"1361:37:41"}]}},{"expression":{"arguments":[{"hexValue":"74727565","id":6964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1529:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6959,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6935,"src":"1484:25:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1510:9:41","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":7045,"src":"1484:35:41","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$7030_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":6962,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:37:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7030","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":6963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1522:6:41","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":7140,"src":"1484:44:41","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$7030_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$7030_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":6965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:50:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6966,"nodeType":"ExpressionStatement","src":"1484:50:41"}]},"id":6968,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantBefore","nameLocation":"1201:19:41","nodeType":"FunctionDefinition","parameters":{"id":6950,"nodeType":"ParameterList","parameters":[],"src":"1220:2:41"},"returnParameters":{"id":6951,"nodeType":"ParameterList","parameters":[],"src":"1231:0:41"},"scope":6994,"src":"1192:349:41","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6979,"nodeType":"Block","src":"1585:68:41","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":6976,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1640:5:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6971,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6935,"src":"1595:25:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1621:9:41","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":7045,"src":"1595:35:41","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$7030_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":6974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:37:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7030","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":6975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1633:6:41","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":7140,"src":"1595:44:41","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$7030_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$7030_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":6977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:51:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6978,"nodeType":"ExpressionStatement","src":"1595:51:41"}]},"id":6980,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantAfter","nameLocation":"1556:18:41","nodeType":"FunctionDefinition","parameters":{"id":6969,"nodeType":"ParameterList","parameters":[],"src":"1574:2:41"},"returnParameters":{"id":6970,"nodeType":"ParameterList","parameters":[],"src":"1585:0:41"},"scope":6994,"src":"1547:106:41","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6992,"nodeType":"Block","src":"1896:69:41","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6986,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6935,"src":"1913:25:41","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1939:9:41","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":7045,"src":"1913:35:41","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$7030_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":6988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:37:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7030","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":6989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1951:5:41","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":7129,"src":"1913:43:41","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_BooleanSlotType_$7030_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_BooleanSlotType_$7030_$","typeString":"function (StorageSlotExtension.BooleanSlotType) view returns (bool)"}},"id":6990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:45:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6985,"id":6991,"nodeType":"Return","src":"1906:52:41"}]},"documentation":{"id":6981,"nodeType":"StructuredDocumentation","src":"1659:168:41","text":" @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n `nonReentrant` function in the call stack."},"id":6993,"implemented":true,"kind":"function","modifiers":[],"name":"_reentrancyGuardEntered","nameLocation":"1841:23:41","nodeType":"FunctionDefinition","parameters":{"id":6982,"nodeType":"ParameterList","parameters":[],"src":"1864:2:41"},"returnParameters":{"id":6985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6984,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6993,"src":"1890:4:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6983,"name":"bool","nodeType":"ElementaryTypeName","src":"1890:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1889:6:41"},"scope":6994,"src":"1832:133:41","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":6995,"src":"283:1684:41","usedErrors":[6938],"usedEvents":[]}],"src":"33:1935:41"},"id":41},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","exportedSymbols":{"StorageSlotExtension":[7207]},"id":7208,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6996,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:42"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlotExtension","contractDependencies":[],"contractKind":"library","documentation":{"id":6997,"nodeType":"StructuredDocumentation","src":"59:218:42","text":" @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n @dev TIP: Consider using this library along with {SlotDerivation}."},"fullyImplemented":true,"id":7207,"linearizedBaseContracts":[7207],"name":"StorageSlotExtension","nameLocation":"286:20:42","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlotExtension.Int256Slot","id":7000,"members":[{"constant":false,"id":6999,"mutability":"mutable","name":"value","nameLocation":"348:5:42","nodeType":"VariableDeclaration","scope":7000,"src":"341:12:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6998,"name":"int256","nodeType":"ElementaryTypeName","src":"341:6:42","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"name":"Int256Slot","nameLocation":"320:10:42","nodeType":"StructDefinition","scope":7207,"src":"313:47:42","visibility":"public"},{"body":{"id":7010,"nodeType":"Block","src":"524:106:42","statements":[{"AST":{"nativeSrc":"586:38:42","nodeType":"YulBlock","src":"586:38:42","statements":[{"nativeSrc":"600:14:42","nodeType":"YulAssignment","src":"600:14:42","value":{"name":"slot","nativeSrc":"610:4:42","nodeType":"YulIdentifier","src":"610:4:42"},"variableNames":[{"name":"r.slot","nativeSrc":"600:6:42","nodeType":"YulIdentifier","src":"600:6:42"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7007,"isOffset":false,"isSlot":true,"src":"600:6:42","suffix":"slot","valueSize":1},{"declaration":7003,"isOffset":false,"isSlot":false,"src":"610:4:42","valueSize":1}],"id":7009,"nodeType":"InlineAssembly","src":"577:47:42"}]},"documentation":{"id":7001,"nodeType":"StructuredDocumentation","src":"366:71:42","text":"@dev Returns an `Int256Slot` with member `value` located at `slot`."},"id":7011,"implemented":true,"kind":"function","modifiers":[],"name":"getInt256Slot","nameLocation":"451:13:42","nodeType":"FunctionDefinition","parameters":{"id":7004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7003,"mutability":"mutable","name":"slot","nameLocation":"473:4:42","nodeType":"VariableDeclaration","scope":7011,"src":"465:12:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7002,"name":"bytes32","nodeType":"ElementaryTypeName","src":"465:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"464:14:42"},"returnParameters":{"id":7008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7007,"mutability":"mutable","name":"r","nameLocation":"521:1:42","nodeType":"VariableDeclaration","scope":7011,"src":"502:20:42","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$7000_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"},"typeName":{"id":7006,"nodeType":"UserDefinedTypeName","pathNode":{"id":7005,"name":"Int256Slot","nameLocations":["502:10:42"],"nodeType":"IdentifierPath","referencedDeclaration":7000,"src":"502:10:42"},"referencedDeclaration":7000,"src":"502:10:42","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$7000_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"}},"visibility":"internal"}],"src":"501:22:42"},"scope":7207,"src":"442:188:42","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.AddressSlotType","id":7013,"name":"AddressSlotType","nameLocation":"709:15:42","nodeType":"UserDefinedValueTypeDefinition","src":"704:32:42","underlyingType":{"id":7012,"name":"bytes32","nodeType":"ElementaryTypeName","src":"728:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":7027,"nodeType":"Block","src":"873:50:42","statements":[{"expression":{"arguments":[{"id":7024,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7016,"src":"911:4:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7022,"name":"AddressSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7013,"src":"890:15:42","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressSlotType_$7013_$","typeString":"type(StorageSlotExtension.AddressSlotType)"}},"id":7023,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"906:4:42","memberName":"wrap","nodeType":"MemberAccess","src":"890:20:42","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$7013_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":7025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"890:26:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7013","typeString":"StorageSlotExtension.AddressSlotType"}},"functionReturnParameters":7021,"id":7026,"nodeType":"Return","src":"883:33:42"}]},"documentation":{"id":7014,"nodeType":"StructuredDocumentation","src":"742:53:42","text":"@dev Cast an arbitrary slot to a AddressSlotType."},"id":7028,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"809:9:42","nodeType":"FunctionDefinition","parameters":{"id":7017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7016,"mutability":"mutable","name":"slot","nameLocation":"827:4:42","nodeType":"VariableDeclaration","scope":7028,"src":"819:12:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7015,"name":"bytes32","nodeType":"ElementaryTypeName","src":"819:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"818:14:42"},"returnParameters":{"id":7021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7020,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7028,"src":"856:15:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7013","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":7019,"nodeType":"UserDefinedTypeName","pathNode":{"id":7018,"name":"AddressSlotType","nameLocations":["856:15:42"],"nodeType":"IdentifierPath","referencedDeclaration":7013,"src":"856:15:42"},"referencedDeclaration":7013,"src":"856:15:42","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7013","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"855:17:42"},"scope":7207,"src":"800:123:42","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.BooleanSlotType","id":7030,"name":"BooleanSlotType","nameLocation":"1001:15:42","nodeType":"UserDefinedValueTypeDefinition","src":"996:32:42","underlyingType":{"id":7029,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1020:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":7044,"nodeType":"Block","src":"1165:50:42","statements":[{"expression":{"arguments":[{"id":7041,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7033,"src":"1203:4:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7039,"name":"BooleanSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7030,"src":"1182:15:42","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_BooleanSlotType_$7030_$","typeString":"type(StorageSlotExtension.BooleanSlotType)"}},"id":7040,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1198:4:42","memberName":"wrap","nodeType":"MemberAccess","src":"1182:20:42","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$7030_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":7042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1182:26:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7030","typeString":"StorageSlotExtension.BooleanSlotType"}},"functionReturnParameters":7038,"id":7043,"nodeType":"Return","src":"1175:33:42"}]},"documentation":{"id":7031,"nodeType":"StructuredDocumentation","src":"1034:53:42","text":"@dev Cast an arbitrary slot to a BooleanSlotType."},"id":7045,"implemented":true,"kind":"function","modifiers":[],"name":"asBoolean","nameLocation":"1101:9:42","nodeType":"FunctionDefinition","parameters":{"id":7034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7033,"mutability":"mutable","name":"slot","nameLocation":"1119:4:42","nodeType":"VariableDeclaration","scope":7045,"src":"1111:12:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7032,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1111:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1110:14:42"},"returnParameters":{"id":7038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7037,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7045,"src":"1148:15:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7030","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":7036,"nodeType":"UserDefinedTypeName","pathNode":{"id":7035,"name":"BooleanSlotType","nameLocations":["1148:15:42"],"nodeType":"IdentifierPath","referencedDeclaration":7030,"src":"1148:15:42"},"referencedDeclaration":7030,"src":"1148:15:42","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7030","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"1147:17:42"},"scope":7207,"src":"1092:123:42","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Bytes32SlotType","id":7047,"name":"Bytes32SlotType","nameLocation":"1293:15:42","nodeType":"UserDefinedValueTypeDefinition","src":"1288:32:42","underlyingType":{"id":7046,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1312:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":7061,"nodeType":"Block","src":"1457:50:42","statements":[{"expression":{"arguments":[{"id":7058,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7050,"src":"1495:4:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7056,"name":"Bytes32SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7047,"src":"1474:15:42","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Bytes32SlotType_$7047_$","typeString":"type(StorageSlotExtension.Bytes32SlotType)"}},"id":7057,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1490:4:42","memberName":"wrap","nodeType":"MemberAccess","src":"1474:20:42","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Bytes32SlotType_$7047_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Bytes32SlotType)"}},"id":7059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1474:26:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7047","typeString":"StorageSlotExtension.Bytes32SlotType"}},"functionReturnParameters":7055,"id":7060,"nodeType":"Return","src":"1467:33:42"}]},"documentation":{"id":7048,"nodeType":"StructuredDocumentation","src":"1326:53:42","text":"@dev Cast an arbitrary slot to a Bytes32SlotType."},"id":7062,"implemented":true,"kind":"function","modifiers":[],"name":"asBytes32","nameLocation":"1393:9:42","nodeType":"FunctionDefinition","parameters":{"id":7051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7050,"mutability":"mutable","name":"slot","nameLocation":"1411:4:42","nodeType":"VariableDeclaration","scope":7062,"src":"1403:12:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7049,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1403:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1402:14:42"},"returnParameters":{"id":7055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7054,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7062,"src":"1440:15:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7047","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":7053,"nodeType":"UserDefinedTypeName","pathNode":{"id":7052,"name":"Bytes32SlotType","nameLocations":["1440:15:42"],"nodeType":"IdentifierPath","referencedDeclaration":7047,"src":"1440:15:42"},"referencedDeclaration":7047,"src":"1440:15:42","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7047","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"1439:17:42"},"scope":7207,"src":"1384:123:42","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Uint256SlotType","id":7064,"name":"Uint256SlotType","nameLocation":"1585:15:42","nodeType":"UserDefinedValueTypeDefinition","src":"1580:32:42","underlyingType":{"id":7063,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1604:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":7078,"nodeType":"Block","src":"1749:50:42","statements":[{"expression":{"arguments":[{"id":7075,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7067,"src":"1787:4:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7073,"name":"Uint256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7064,"src":"1766:15:42","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Uint256SlotType_$7064_$","typeString":"type(StorageSlotExtension.Uint256SlotType)"}},"id":7074,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1782:4:42","memberName":"wrap","nodeType":"MemberAccess","src":"1766:20:42","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$7064_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":7076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1766:26:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7064","typeString":"StorageSlotExtension.Uint256SlotType"}},"functionReturnParameters":7072,"id":7077,"nodeType":"Return","src":"1759:33:42"}]},"documentation":{"id":7065,"nodeType":"StructuredDocumentation","src":"1618:53:42","text":"@dev Cast an arbitrary slot to a Uint256SlotType."},"id":7079,"implemented":true,"kind":"function","modifiers":[],"name":"asUint256","nameLocation":"1685:9:42","nodeType":"FunctionDefinition","parameters":{"id":7068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7067,"mutability":"mutable","name":"slot","nameLocation":"1703:4:42","nodeType":"VariableDeclaration","scope":7079,"src":"1695:12:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7066,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1695:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1694:14:42"},"returnParameters":{"id":7072,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7071,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7079,"src":"1732:15:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7064","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":7070,"nodeType":"UserDefinedTypeName","pathNode":{"id":7069,"name":"Uint256SlotType","nameLocations":["1732:15:42"],"nodeType":"IdentifierPath","referencedDeclaration":7064,"src":"1732:15:42"},"referencedDeclaration":7064,"src":"1732:15:42","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7064","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"1731:17:42"},"scope":7207,"src":"1676:123:42","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Int256SlotType","id":7081,"name":"Int256SlotType","nameLocation":"1877:14:42","nodeType":"UserDefinedValueTypeDefinition","src":"1872:31:42","underlyingType":{"id":7080,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1895:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":7095,"nodeType":"Block","src":"2038:49:42","statements":[{"expression":{"arguments":[{"id":7092,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7084,"src":"2075:4:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7090,"name":"Int256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7081,"src":"2055:14:42","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Int256SlotType_$7081_$","typeString":"type(StorageSlotExtension.Int256SlotType)"}},"id":7091,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2070:4:42","memberName":"wrap","nodeType":"MemberAccess","src":"2055:19:42","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Int256SlotType_$7081_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Int256SlotType)"}},"id":7093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2055:25:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7081","typeString":"StorageSlotExtension.Int256SlotType"}},"functionReturnParameters":7089,"id":7094,"nodeType":"Return","src":"2048:32:42"}]},"documentation":{"id":7082,"nodeType":"StructuredDocumentation","src":"1909:53:42","text":"@dev Cast an arbitrary slot to an Int256SlotType."},"id":7096,"implemented":true,"kind":"function","modifiers":[],"name":"asInt256","nameLocation":"1976:8:42","nodeType":"FunctionDefinition","parameters":{"id":7085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7084,"mutability":"mutable","name":"slot","nameLocation":"1993:4:42","nodeType":"VariableDeclaration","scope":7096,"src":"1985:12:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7083,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1985:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1984:14:42"},"returnParameters":{"id":7089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7088,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7096,"src":"2022:14:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7081","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":7087,"nodeType":"UserDefinedTypeName","pathNode":{"id":7086,"name":"Int256SlotType","nameLocations":["2022:14:42"],"nodeType":"IdentifierPath","referencedDeclaration":7081,"src":"2022:14:42"},"referencedDeclaration":7081,"src":"2022:14:42","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7081","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"2021:16:42"},"scope":7207,"src":"1967:120:42","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7106,"nodeType":"Block","src":"2242:112:42","statements":[{"AST":{"nativeSrc":"2304:44:42","nodeType":"YulBlock","src":"2304:44:42","statements":[{"nativeSrc":"2318:20:42","nodeType":"YulAssignment","src":"2318:20:42","value":{"arguments":[{"name":"slot","nativeSrc":"2333:4:42","nodeType":"YulIdentifier","src":"2333:4:42"}],"functionName":{"name":"tload","nativeSrc":"2327:5:42","nodeType":"YulIdentifier","src":"2327:5:42"},"nativeSrc":"2327:11:42","nodeType":"YulFunctionCall","src":"2327:11:42"},"variableNames":[{"name":"value","nativeSrc":"2318:5:42","nodeType":"YulIdentifier","src":"2318:5:42"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7100,"isOffset":false,"isSlot":false,"src":"2333:4:42","valueSize":1},{"declaration":7103,"isOffset":false,"isSlot":false,"src":"2318:5:42","valueSize":1}],"id":7105,"nodeType":"InlineAssembly","src":"2295:53:42"}]},"documentation":{"id":7097,"nodeType":"StructuredDocumentation","src":"2093:69:42","text":"@dev Load the value held at location `slot` in transient storage."},"id":7107,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2176:5:42","nodeType":"FunctionDefinition","parameters":{"id":7101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7100,"mutability":"mutable","name":"slot","nameLocation":"2198:4:42","nodeType":"VariableDeclaration","scope":7107,"src":"2182:20:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7013","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":7099,"nodeType":"UserDefinedTypeName","pathNode":{"id":7098,"name":"AddressSlotType","nameLocations":["2182:15:42"],"nodeType":"IdentifierPath","referencedDeclaration":7013,"src":"2182:15:42"},"referencedDeclaration":7013,"src":"2182:15:42","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7013","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"2181:22:42"},"returnParameters":{"id":7104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7103,"mutability":"mutable","name":"value","nameLocation":"2235:5:42","nodeType":"VariableDeclaration","scope":7107,"src":"2227:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7102,"name":"address","nodeType":"ElementaryTypeName","src":"2227:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2226:15:42"},"scope":7207,"src":"2167:187:42","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7117,"nodeType":"Block","src":"2490:111:42","statements":[{"AST":{"nativeSrc":"2552:43:42","nodeType":"YulBlock","src":"2552:43:42","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"2573:4:42","nodeType":"YulIdentifier","src":"2573:4:42"},{"name":"value","nativeSrc":"2579:5:42","nodeType":"YulIdentifier","src":"2579:5:42"}],"functionName":{"name":"tstore","nativeSrc":"2566:6:42","nodeType":"YulIdentifier","src":"2566:6:42"},"nativeSrc":"2566:19:42","nodeType":"YulFunctionCall","src":"2566:19:42"},"nativeSrc":"2566:19:42","nodeType":"YulExpressionStatement","src":"2566:19:42"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7111,"isOffset":false,"isSlot":false,"src":"2573:4:42","valueSize":1},{"declaration":7113,"isOffset":false,"isSlot":false,"src":"2579:5:42","valueSize":1}],"id":7116,"nodeType":"InlineAssembly","src":"2543:52:42"}]},"documentation":{"id":7108,"nodeType":"StructuredDocumentation","src":"2360:63:42","text":"@dev Store `value` at location `slot` in transient storage."},"id":7118,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2437:6:42","nodeType":"FunctionDefinition","parameters":{"id":7114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7111,"mutability":"mutable","name":"slot","nameLocation":"2460:4:42","nodeType":"VariableDeclaration","scope":7118,"src":"2444:20:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7013","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":7110,"nodeType":"UserDefinedTypeName","pathNode":{"id":7109,"name":"AddressSlotType","nameLocations":["2444:15:42"],"nodeType":"IdentifierPath","referencedDeclaration":7013,"src":"2444:15:42"},"referencedDeclaration":7013,"src":"2444:15:42","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$7013","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"},{"constant":false,"id":7113,"mutability":"mutable","name":"value","nameLocation":"2474:5:42","nodeType":"VariableDeclaration","scope":7118,"src":"2466:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7112,"name":"address","nodeType":"ElementaryTypeName","src":"2466:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2443:37:42"},"returnParameters":{"id":7115,"nodeType":"ParameterList","parameters":[],"src":"2490:0:42"},"scope":7207,"src":"2428:173:42","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7128,"nodeType":"Block","src":"2753:112:42","statements":[{"AST":{"nativeSrc":"2815:44:42","nodeType":"YulBlock","src":"2815:44:42","statements":[{"nativeSrc":"2829:20:42","nodeType":"YulAssignment","src":"2829:20:42","value":{"arguments":[{"name":"slot","nativeSrc":"2844:4:42","nodeType":"YulIdentifier","src":"2844:4:42"}],"functionName":{"name":"tload","nativeSrc":"2838:5:42","nodeType":"YulIdentifier","src":"2838:5:42"},"nativeSrc":"2838:11:42","nodeType":"YulFunctionCall","src":"2838:11:42"},"variableNames":[{"name":"value","nativeSrc":"2829:5:42","nodeType":"YulIdentifier","src":"2829:5:42"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7122,"isOffset":false,"isSlot":false,"src":"2844:4:42","valueSize":1},{"declaration":7125,"isOffset":false,"isSlot":false,"src":"2829:5:42","valueSize":1}],"id":7127,"nodeType":"InlineAssembly","src":"2806:53:42"}]},"documentation":{"id":7119,"nodeType":"StructuredDocumentation","src":"2607:69:42","text":"@dev Load the value held at location `slot` in transient storage."},"id":7129,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2690:5:42","nodeType":"FunctionDefinition","parameters":{"id":7123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7122,"mutability":"mutable","name":"slot","nameLocation":"2712:4:42","nodeType":"VariableDeclaration","scope":7129,"src":"2696:20:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7030","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":7121,"nodeType":"UserDefinedTypeName","pathNode":{"id":7120,"name":"BooleanSlotType","nameLocations":["2696:15:42"],"nodeType":"IdentifierPath","referencedDeclaration":7030,"src":"2696:15:42"},"referencedDeclaration":7030,"src":"2696:15:42","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7030","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"2695:22:42"},"returnParameters":{"id":7126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7125,"mutability":"mutable","name":"value","nameLocation":"2746:5:42","nodeType":"VariableDeclaration","scope":7129,"src":"2741:10:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7124,"name":"bool","nodeType":"ElementaryTypeName","src":"2741:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2740:12:42"},"scope":7207,"src":"2681:184:42","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7139,"nodeType":"Block","src":"2998:111:42","statements":[{"AST":{"nativeSrc":"3060:43:42","nodeType":"YulBlock","src":"3060:43:42","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3081:4:42","nodeType":"YulIdentifier","src":"3081:4:42"},{"name":"value","nativeSrc":"3087:5:42","nodeType":"YulIdentifier","src":"3087:5:42"}],"functionName":{"name":"tstore","nativeSrc":"3074:6:42","nodeType":"YulIdentifier","src":"3074:6:42"},"nativeSrc":"3074:19:42","nodeType":"YulFunctionCall","src":"3074:19:42"},"nativeSrc":"3074:19:42","nodeType":"YulExpressionStatement","src":"3074:19:42"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7133,"isOffset":false,"isSlot":false,"src":"3081:4:42","valueSize":1},{"declaration":7135,"isOffset":false,"isSlot":false,"src":"3087:5:42","valueSize":1}],"id":7138,"nodeType":"InlineAssembly","src":"3051:52:42"}]},"documentation":{"id":7130,"nodeType":"StructuredDocumentation","src":"2871:63:42","text":"@dev Store `value` at location `slot` in transient storage."},"id":7140,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2948:6:42","nodeType":"FunctionDefinition","parameters":{"id":7136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7133,"mutability":"mutable","name":"slot","nameLocation":"2971:4:42","nodeType":"VariableDeclaration","scope":7140,"src":"2955:20:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7030","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":7132,"nodeType":"UserDefinedTypeName","pathNode":{"id":7131,"name":"BooleanSlotType","nameLocations":["2955:15:42"],"nodeType":"IdentifierPath","referencedDeclaration":7030,"src":"2955:15:42"},"referencedDeclaration":7030,"src":"2955:15:42","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$7030","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"},{"constant":false,"id":7135,"mutability":"mutable","name":"value","nameLocation":"2982:5:42","nodeType":"VariableDeclaration","scope":7140,"src":"2977:10:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7134,"name":"bool","nodeType":"ElementaryTypeName","src":"2977:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2954:34:42"},"returnParameters":{"id":7137,"nodeType":"ParameterList","parameters":[],"src":"2998:0:42"},"scope":7207,"src":"2939:170:42","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7150,"nodeType":"Block","src":"3264:112:42","statements":[{"AST":{"nativeSrc":"3326:44:42","nodeType":"YulBlock","src":"3326:44:42","statements":[{"nativeSrc":"3340:20:42","nodeType":"YulAssignment","src":"3340:20:42","value":{"arguments":[{"name":"slot","nativeSrc":"3355:4:42","nodeType":"YulIdentifier","src":"3355:4:42"}],"functionName":{"name":"tload","nativeSrc":"3349:5:42","nodeType":"YulIdentifier","src":"3349:5:42"},"nativeSrc":"3349:11:42","nodeType":"YulFunctionCall","src":"3349:11:42"},"variableNames":[{"name":"value","nativeSrc":"3340:5:42","nodeType":"YulIdentifier","src":"3340:5:42"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7144,"isOffset":false,"isSlot":false,"src":"3355:4:42","valueSize":1},{"declaration":7147,"isOffset":false,"isSlot":false,"src":"3340:5:42","valueSize":1}],"id":7149,"nodeType":"InlineAssembly","src":"3317:53:42"}]},"documentation":{"id":7141,"nodeType":"StructuredDocumentation","src":"3115:69:42","text":"@dev Load the value held at location `slot` in transient storage."},"id":7151,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3198:5:42","nodeType":"FunctionDefinition","parameters":{"id":7145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7144,"mutability":"mutable","name":"slot","nameLocation":"3220:4:42","nodeType":"VariableDeclaration","scope":7151,"src":"3204:20:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7047","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":7143,"nodeType":"UserDefinedTypeName","pathNode":{"id":7142,"name":"Bytes32SlotType","nameLocations":["3204:15:42"],"nodeType":"IdentifierPath","referencedDeclaration":7047,"src":"3204:15:42"},"referencedDeclaration":7047,"src":"3204:15:42","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7047","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"3203:22:42"},"returnParameters":{"id":7148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7147,"mutability":"mutable","name":"value","nameLocation":"3257:5:42","nodeType":"VariableDeclaration","scope":7151,"src":"3249:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7146,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3249:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3248:15:42"},"scope":7207,"src":"3189:187:42","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7161,"nodeType":"Block","src":"3512:111:42","statements":[{"AST":{"nativeSrc":"3574:43:42","nodeType":"YulBlock","src":"3574:43:42","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3595:4:42","nodeType":"YulIdentifier","src":"3595:4:42"},{"name":"value","nativeSrc":"3601:5:42","nodeType":"YulIdentifier","src":"3601:5:42"}],"functionName":{"name":"tstore","nativeSrc":"3588:6:42","nodeType":"YulIdentifier","src":"3588:6:42"},"nativeSrc":"3588:19:42","nodeType":"YulFunctionCall","src":"3588:19:42"},"nativeSrc":"3588:19:42","nodeType":"YulExpressionStatement","src":"3588:19:42"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7155,"isOffset":false,"isSlot":false,"src":"3595:4:42","valueSize":1},{"declaration":7157,"isOffset":false,"isSlot":false,"src":"3601:5:42","valueSize":1}],"id":7160,"nodeType":"InlineAssembly","src":"3565:52:42"}]},"documentation":{"id":7152,"nodeType":"StructuredDocumentation","src":"3382:63:42","text":"@dev Store `value` at location `slot` in transient storage."},"id":7162,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3459:6:42","nodeType":"FunctionDefinition","parameters":{"id":7158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7155,"mutability":"mutable","name":"slot","nameLocation":"3482:4:42","nodeType":"VariableDeclaration","scope":7162,"src":"3466:20:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7047","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":7154,"nodeType":"UserDefinedTypeName","pathNode":{"id":7153,"name":"Bytes32SlotType","nameLocations":["3466:15:42"],"nodeType":"IdentifierPath","referencedDeclaration":7047,"src":"3466:15:42"},"referencedDeclaration":7047,"src":"3466:15:42","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$7047","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"},{"constant":false,"id":7157,"mutability":"mutable","name":"value","nameLocation":"3496:5:42","nodeType":"VariableDeclaration","scope":7162,"src":"3488:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7156,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3488:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3465:37:42"},"returnParameters":{"id":7159,"nodeType":"ParameterList","parameters":[],"src":"3512:0:42"},"scope":7207,"src":"3450:173:42","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7172,"nodeType":"Block","src":"3778:112:42","statements":[{"AST":{"nativeSrc":"3840:44:42","nodeType":"YulBlock","src":"3840:44:42","statements":[{"nativeSrc":"3854:20:42","nodeType":"YulAssignment","src":"3854:20:42","value":{"arguments":[{"name":"slot","nativeSrc":"3869:4:42","nodeType":"YulIdentifier","src":"3869:4:42"}],"functionName":{"name":"tload","nativeSrc":"3863:5:42","nodeType":"YulIdentifier","src":"3863:5:42"},"nativeSrc":"3863:11:42","nodeType":"YulFunctionCall","src":"3863:11:42"},"variableNames":[{"name":"value","nativeSrc":"3854:5:42","nodeType":"YulIdentifier","src":"3854:5:42"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7166,"isOffset":false,"isSlot":false,"src":"3869:4:42","valueSize":1},{"declaration":7169,"isOffset":false,"isSlot":false,"src":"3854:5:42","valueSize":1}],"id":7171,"nodeType":"InlineAssembly","src":"3831:53:42"}]},"documentation":{"id":7163,"nodeType":"StructuredDocumentation","src":"3629:69:42","text":"@dev Load the value held at location `slot` in transient storage."},"id":7173,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3712:5:42","nodeType":"FunctionDefinition","parameters":{"id":7167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7166,"mutability":"mutable","name":"slot","nameLocation":"3734:4:42","nodeType":"VariableDeclaration","scope":7173,"src":"3718:20:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7064","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":7165,"nodeType":"UserDefinedTypeName","pathNode":{"id":7164,"name":"Uint256SlotType","nameLocations":["3718:15:42"],"nodeType":"IdentifierPath","referencedDeclaration":7064,"src":"3718:15:42"},"referencedDeclaration":7064,"src":"3718:15:42","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7064","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"3717:22:42"},"returnParameters":{"id":7170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7169,"mutability":"mutable","name":"value","nameLocation":"3771:5:42","nodeType":"VariableDeclaration","scope":7173,"src":"3763:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7168,"name":"uint256","nodeType":"ElementaryTypeName","src":"3763:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3762:15:42"},"scope":7207,"src":"3703:187:42","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7183,"nodeType":"Block","src":"4026:111:42","statements":[{"AST":{"nativeSrc":"4088:43:42","nodeType":"YulBlock","src":"4088:43:42","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4109:4:42","nodeType":"YulIdentifier","src":"4109:4:42"},{"name":"value","nativeSrc":"4115:5:42","nodeType":"YulIdentifier","src":"4115:5:42"}],"functionName":{"name":"tstore","nativeSrc":"4102:6:42","nodeType":"YulIdentifier","src":"4102:6:42"},"nativeSrc":"4102:19:42","nodeType":"YulFunctionCall","src":"4102:19:42"},"nativeSrc":"4102:19:42","nodeType":"YulExpressionStatement","src":"4102:19:42"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7177,"isOffset":false,"isSlot":false,"src":"4109:4:42","valueSize":1},{"declaration":7179,"isOffset":false,"isSlot":false,"src":"4115:5:42","valueSize":1}],"id":7182,"nodeType":"InlineAssembly","src":"4079:52:42"}]},"documentation":{"id":7174,"nodeType":"StructuredDocumentation","src":"3896:63:42","text":"@dev Store `value` at location `slot` in transient storage."},"id":7184,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3973:6:42","nodeType":"FunctionDefinition","parameters":{"id":7180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7177,"mutability":"mutable","name":"slot","nameLocation":"3996:4:42","nodeType":"VariableDeclaration","scope":7184,"src":"3980:20:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7064","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":7176,"nodeType":"UserDefinedTypeName","pathNode":{"id":7175,"name":"Uint256SlotType","nameLocations":["3980:15:42"],"nodeType":"IdentifierPath","referencedDeclaration":7064,"src":"3980:15:42"},"referencedDeclaration":7064,"src":"3980:15:42","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$7064","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"},{"constant":false,"id":7179,"mutability":"mutable","name":"value","nameLocation":"4010:5:42","nodeType":"VariableDeclaration","scope":7184,"src":"4002:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7178,"name":"uint256","nodeType":"ElementaryTypeName","src":"4002:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3979:37:42"},"returnParameters":{"id":7181,"nodeType":"ParameterList","parameters":[],"src":"4026:0:42"},"scope":7207,"src":"3964:173:42","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7194,"nodeType":"Block","src":"4290:112:42","statements":[{"AST":{"nativeSrc":"4352:44:42","nodeType":"YulBlock","src":"4352:44:42","statements":[{"nativeSrc":"4366:20:42","nodeType":"YulAssignment","src":"4366:20:42","value":{"arguments":[{"name":"slot","nativeSrc":"4381:4:42","nodeType":"YulIdentifier","src":"4381:4:42"}],"functionName":{"name":"tload","nativeSrc":"4375:5:42","nodeType":"YulIdentifier","src":"4375:5:42"},"nativeSrc":"4375:11:42","nodeType":"YulFunctionCall","src":"4375:11:42"},"variableNames":[{"name":"value","nativeSrc":"4366:5:42","nodeType":"YulIdentifier","src":"4366:5:42"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7188,"isOffset":false,"isSlot":false,"src":"4381:4:42","valueSize":1},{"declaration":7191,"isOffset":false,"isSlot":false,"src":"4366:5:42","valueSize":1}],"id":7193,"nodeType":"InlineAssembly","src":"4343:53:42"}]},"documentation":{"id":7185,"nodeType":"StructuredDocumentation","src":"4143:69:42","text":"@dev Load the value held at location `slot` in transient storage."},"id":7195,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"4226:5:42","nodeType":"FunctionDefinition","parameters":{"id":7189,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7188,"mutability":"mutable","name":"slot","nameLocation":"4247:4:42","nodeType":"VariableDeclaration","scope":7195,"src":"4232:19:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7081","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":7187,"nodeType":"UserDefinedTypeName","pathNode":{"id":7186,"name":"Int256SlotType","nameLocations":["4232:14:42"],"nodeType":"IdentifierPath","referencedDeclaration":7081,"src":"4232:14:42"},"referencedDeclaration":7081,"src":"4232:14:42","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7081","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"4231:21:42"},"returnParameters":{"id":7192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7191,"mutability":"mutable","name":"value","nameLocation":"4283:5:42","nodeType":"VariableDeclaration","scope":7195,"src":"4276:12:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7190,"name":"int256","nodeType":"ElementaryTypeName","src":"4276:6:42","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4275:14:42"},"scope":7207,"src":"4217:185:42","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7205,"nodeType":"Block","src":"4536:111:42","statements":[{"AST":{"nativeSrc":"4598:43:42","nodeType":"YulBlock","src":"4598:43:42","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4619:4:42","nodeType":"YulIdentifier","src":"4619:4:42"},{"name":"value","nativeSrc":"4625:5:42","nodeType":"YulIdentifier","src":"4625:5:42"}],"functionName":{"name":"tstore","nativeSrc":"4612:6:42","nodeType":"YulIdentifier","src":"4612:6:42"},"nativeSrc":"4612:19:42","nodeType":"YulFunctionCall","src":"4612:19:42"},"nativeSrc":"4612:19:42","nodeType":"YulExpressionStatement","src":"4612:19:42"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7199,"isOffset":false,"isSlot":false,"src":"4619:4:42","valueSize":1},{"declaration":7201,"isOffset":false,"isSlot":false,"src":"4625:5:42","valueSize":1}],"id":7204,"nodeType":"InlineAssembly","src":"4589:52:42"}]},"documentation":{"id":7196,"nodeType":"StructuredDocumentation","src":"4408:63:42","text":"@dev Store `value` at location `slot` in transient storage."},"id":7206,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"4485:6:42","nodeType":"FunctionDefinition","parameters":{"id":7202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7199,"mutability":"mutable","name":"slot","nameLocation":"4507:4:42","nodeType":"VariableDeclaration","scope":7206,"src":"4492:19:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7081","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":7198,"nodeType":"UserDefinedTypeName","pathNode":{"id":7197,"name":"Int256SlotType","nameLocations":["4492:14:42"],"nodeType":"IdentifierPath","referencedDeclaration":7081,"src":"4492:14:42"},"referencedDeclaration":7081,"src":"4492:14:42","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$7081","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"},{"constant":false,"id":7201,"mutability":"mutable","name":"value","nameLocation":"4520:5:42","nodeType":"VariableDeclaration","scope":7206,"src":"4513:12:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7200,"name":"int256","nodeType":"ElementaryTypeName","src":"4513:6:42","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4491:35:42"},"returnParameters":{"id":7203,"nodeType":"ParameterList","parameters":[],"src":"4536:0:42"},"scope":7207,"src":"4476:171:42","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":7208,"src":"278:4371:42","usedErrors":[],"usedEvents":[]}],"src":"33:4617:42"},"id":42},"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol","exportedSymbols":{"ERC20":[10480],"ERC20TestToken":[7325]},"id":7326,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":7209,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:43"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/ERC20.sol","file":"@openzeppelin/contracts/token/ERC20/ERC20.sol","id":7211,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7326,"sourceUnit":10481,"src":"72:70:43","symbolAliases":[{"foreign":{"id":7210,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10480,"src":"81:5:43","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":7212,"name":"ERC20","nameLocations":["171:5:43"],"nodeType":"IdentifierPath","referencedDeclaration":10480,"src":"171:5:43"},"id":7213,"nodeType":"InheritanceSpecifier","src":"171:5:43"}],"canonicalName":"ERC20TestToken","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":7325,"linearizedBaseContracts":[7325,10480,9870,10584,10558,12348],"name":"ERC20TestToken","nameLocation":"153:14:43","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":7215,"mutability":"immutable","name":"_decimals","nameLocation":"207:9:43","nodeType":"VariableDeclaration","scope":7325,"src":"183:33:43","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7214,"name":"uint8","nodeType":"ElementaryTypeName","src":"183:5:43","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"private"},{"documentation":{"id":7216,"nodeType":"StructuredDocumentation","src":"223:57:43","text":"@dev Simulate tokens that don't allow zero transfers."},"errorSelector":"10cadee3","id":7218,"name":"ZeroTransfer","nameLocation":"291:12:43","nodeType":"ErrorDefinition","parameters":{"id":7217,"nodeType":"ParameterList","parameters":[],"src":"303:2:43"},"src":"285:21:43"},{"body":{"id":7235,"nodeType":"Block","src":"403:38:43","statements":[{"expression":{"id":7233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7231,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7215,"src":"413:9:43","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7232,"name":"decimals_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7224,"src":"425:9:43","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"413:21:43","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":7234,"nodeType":"ExpressionStatement","src":"413:21:43"}]},"id":7236,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":7227,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7220,"src":"389:4:43","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":7228,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7222,"src":"395:6:43","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":7229,"kind":"baseConstructorSpecifier","modifierName":{"id":7226,"name":"ERC20","nameLocations":["383:5:43"],"nodeType":"IdentifierPath","referencedDeclaration":10480,"src":"383:5:43"},"nodeType":"ModifierInvocation","src":"383:19:43"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":7225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7220,"mutability":"mutable","name":"name","nameLocation":"338:4:43","nodeType":"VariableDeclaration","scope":7236,"src":"324:18:43","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7219,"name":"string","nodeType":"ElementaryTypeName","src":"324:6:43","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":7222,"mutability":"mutable","name":"symbol","nameLocation":"358:6:43","nodeType":"VariableDeclaration","scope":7236,"src":"344:20:43","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7221,"name":"string","nodeType":"ElementaryTypeName","src":"344:6:43","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":7224,"mutability":"mutable","name":"decimals_","nameLocation":"372:9:43","nodeType":"VariableDeclaration","scope":7236,"src":"366:15:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7223,"name":"uint8","nodeType":"ElementaryTypeName","src":"366:5:43","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"323:59:43"},"returnParameters":{"id":7230,"nodeType":"ParameterList","parameters":[],"src":"403:0:43"},"scope":7325,"src":"312:129:43","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[10044],"body":{"id":7244,"nodeType":"Block","src":"504:33:43","statements":[{"expression":{"id":7242,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7215,"src":"521:9:43","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":7241,"id":7243,"nodeType":"Return","src":"514:16:43"}]},"functionSelector":"313ce567","id":7245,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"456:8:43","nodeType":"FunctionDefinition","overrides":{"id":7238,"nodeType":"OverrideSpecifier","overrides":[],"src":"479:8:43"},"parameters":{"id":7237,"nodeType":"ParameterList","parameters":[],"src":"464:2:43"},"returnParameters":{"id":7241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7240,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7245,"src":"497:5:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7239,"name":"uint8","nodeType":"ElementaryTypeName","src":"497:5:43","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"496:7:43"},"scope":7325,"src":"447:90:43","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":7257,"nodeType":"Block","src":"601:41:43","statements":[{"expression":{"arguments":[{"id":7253,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7247,"src":"617:9:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7254,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7249,"src":"628:6:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7252,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10320,"src":"611:5:43","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":7255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"611:24:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7256,"nodeType":"ExpressionStatement","src":"611:24:43"}]},"functionSelector":"40c10f19","id":7258,"implemented":true,"kind":"function","modifiers":[],"name":"mint","nameLocation":"552:4:43","nodeType":"FunctionDefinition","parameters":{"id":7250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7247,"mutability":"mutable","name":"recipient","nameLocation":"565:9:43","nodeType":"VariableDeclaration","scope":7258,"src":"557:17:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7246,"name":"address","nodeType":"ElementaryTypeName","src":"557:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7249,"mutability":"mutable","name":"amount","nameLocation":"584:6:43","nodeType":"VariableDeclaration","scope":7258,"src":"576:14:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7248,"name":"uint256","nodeType":"ElementaryTypeName","src":"576:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"556:35:43"},"returnParameters":{"id":7251,"nodeType":"ParameterList","parameters":[],"src":"601:0:43"},"scope":7325,"src":"543:99:43","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7270,"nodeType":"Block","src":"703:38:43","statements":[{"expression":{"arguments":[{"id":7266,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7260,"src":"719:6:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7267,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7262,"src":"727:6:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7265,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10353,"src":"713:5:43","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":7268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"713:21:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7269,"nodeType":"ExpressionStatement","src":"713:21:43"}]},"functionSelector":"9dc29fac","id":7271,"implemented":true,"kind":"function","modifiers":[],"name":"burn","nameLocation":"657:4:43","nodeType":"FunctionDefinition","parameters":{"id":7263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7260,"mutability":"mutable","name":"sender","nameLocation":"670:6:43","nodeType":"VariableDeclaration","scope":7271,"src":"662:14:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7259,"name":"address","nodeType":"ElementaryTypeName","src":"662:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7262,"mutability":"mutable","name":"amount","nameLocation":"686:6:43","nodeType":"VariableDeclaration","scope":7271,"src":"678:14:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7261,"name":"uint256","nodeType":"ElementaryTypeName","src":"678:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"661:32:43"},"returnParameters":{"id":7264,"nodeType":"ParameterList","parameters":[],"src":"703:0:43"},"scope":7325,"src":"648:93:43","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[10090],"body":{"id":7295,"nodeType":"Block","src":"823:121:43","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7281,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7275,"src":"837:5:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7282,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"846:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"837:10:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7288,"nodeType":"IfStatement","src":"833:62:43","trueBody":{"id":7287,"nodeType":"Block","src":"849:46:43","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7284,"name":"ZeroTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"870:12:43","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"870:14:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7286,"nodeType":"RevertStatement","src":"863:21:43"}]}},{"expression":{"arguments":[{"id":7291,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7273,"src":"927:2:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7292,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7275,"src":"931:5:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7289,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"912:5:43","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ERC20TestToken_$7325_$","typeString":"type(contract super ERC20TestToken)"}},"id":7290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"918:8:43","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":10090,"src":"912:14:43","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) returns (bool)"}},"id":7293,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"912:25:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7280,"id":7294,"nodeType":"Return","src":"905:32:43"}]},"functionSelector":"a9059cbb","id":7296,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"756:8:43","nodeType":"FunctionDefinition","overrides":{"id":7277,"nodeType":"OverrideSpecifier","overrides":[],"src":"799:8:43"},"parameters":{"id":7276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7273,"mutability":"mutable","name":"to","nameLocation":"773:2:43","nodeType":"VariableDeclaration","scope":7296,"src":"765:10:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7272,"name":"address","nodeType":"ElementaryTypeName","src":"765:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7275,"mutability":"mutable","name":"value","nameLocation":"785:5:43","nodeType":"VariableDeclaration","scope":7296,"src":"777:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7274,"name":"uint256","nodeType":"ElementaryTypeName","src":"777:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"764:27:43"},"returnParameters":{"id":7280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7279,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7296,"src":"817:4:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7278,"name":"bool","nodeType":"ElementaryTypeName","src":"817:4:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"816:6:43"},"scope":7325,"src":"747:197:43","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[10163],"body":{"id":7323,"nodeType":"Block","src":"1044:131:43","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7308,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7302,"src":"1058:5:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7309,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1067:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1058:10:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7315,"nodeType":"IfStatement","src":"1054:62:43","trueBody":{"id":7314,"nodeType":"Block","src":"1070:46:43","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7311,"name":"ZeroTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"1091:12:43","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1091:14:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7313,"nodeType":"RevertStatement","src":"1084:21:43"}]}},{"expression":{"arguments":[{"id":7318,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7298,"src":"1152:4:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7319,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7300,"src":"1158:2:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7320,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7302,"src":"1162:5:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7316,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"1133:5:43","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ERC20TestToken_$7325_$","typeString":"type(contract super ERC20TestToken)"}},"id":7317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1139:12:43","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":10163,"src":"1133:18:43","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) returns (bool)"}},"id":7321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1133:35:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7307,"id":7322,"nodeType":"Return","src":"1126:42:43"}]},"functionSelector":"23b872dd","id":7324,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"959:12:43","nodeType":"FunctionDefinition","overrides":{"id":7304,"nodeType":"OverrideSpecifier","overrides":[],"src":"1020:8:43"},"parameters":{"id":7303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7298,"mutability":"mutable","name":"from","nameLocation":"980:4:43","nodeType":"VariableDeclaration","scope":7324,"src":"972:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7297,"name":"address","nodeType":"ElementaryTypeName","src":"972:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7300,"mutability":"mutable","name":"to","nameLocation":"994:2:43","nodeType":"VariableDeclaration","scope":7324,"src":"986:10:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7299,"name":"address","nodeType":"ElementaryTypeName","src":"986:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7302,"mutability":"mutable","name":"value","nameLocation":"1006:5:43","nodeType":"VariableDeclaration","scope":7324,"src":"998:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7301,"name":"uint256","nodeType":"ElementaryTypeName","src":"998:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"971:41:43"},"returnParameters":{"id":7307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7306,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7324,"src":"1038:4:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7305,"name":"bool","nodeType":"ElementaryTypeName","src":"1038:4:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1037:6:43"},"scope":7325,"src":"950:225:43","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":7326,"src":"144:1033:43","usedErrors":[7218,9840,9845,9850,9859,9864,9869],"usedEvents":[10492,10501]}],"src":"46:1132:43"},"id":43},"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol","exportedSymbols":{"Authentication":[4367],"CommonAuthentication":[7517],"IVault":[2527]},"id":7518,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":7327,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:44"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":7329,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7518,"sourceUnit":2528,"src":"72:81:44","symbolAliases":[{"foreign":{"id":7328,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"81:6:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","id":7331,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7518,"sourceUnit":4368,"src":"154:103:44","symbolAliases":[{"foreign":{"id":7330,"name":"Authentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4367,"src":"163:14:44","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":7333,"name":"Authentication","nameLocations":["390:14:44"],"nodeType":"IdentifierPath","referencedDeclaration":4367,"src":"390:14:44"},"id":7334,"nodeType":"InheritanceSpecifier","src":"390:14:44"}],"canonicalName":"CommonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":7332,"nodeType":"StructuredDocumentation","src":"259:89:44","text":"@dev Base contract for performing access control on external functions within pools."},"fullyImplemented":true,"id":7517,"linearizedBaseContracts":[7517,4367,14],"name":"CommonAuthentication","nameLocation":"366:20:44","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7335,"nodeType":"StructuredDocumentation","src":"411:36:44","text":"@dev Vault cannot be address(0)."},"errorSelector":"c8e28160","id":7337,"name":"VaultNotSet","nameLocation":"458:11:44","nodeType":"ErrorDefinition","parameters":{"id":7336,"nodeType":"ParameterList","parameters":[],"src":"469:2:44"},"src":"452:20:44"},{"constant":false,"id":7340,"mutability":"immutable","name":"_vault","nameLocation":"503:6:44","nodeType":"VariableDeclaration","scope":7517,"src":"478:31:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":7339,"nodeType":"UserDefinedTypeName","pathNode":{"id":7338,"name":"IVault","nameLocations":["478:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"478:6:44"},"referencedDeclaration":2527,"src":"478:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"private"},{"body":{"id":7359,"nodeType":"Block","src":"667:161:44","statements":[{"assignments":[7346],"declarations":[{"constant":false,"id":7346,"mutability":"mutable","name":"roleAddress","nameLocation":"685:11:44","nodeType":"VariableDeclaration","scope":7359,"src":"677:19:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7345,"name":"address","nodeType":"ElementaryTypeName","src":"677:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":7352,"initialValue":{"expression":{"arguments":[{"id":7349,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7343,"src":"726:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7347,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7340,"src":"699:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":7348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"706:19:44","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":3758,"src":"699:26:44","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$4093_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":7350,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"699:32:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4093_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":7351,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"732:14:44","memberName":"swapFeeManager","nodeType":"MemberAccess","referencedDeclaration":4090,"src":"699:47:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"677:69:44"},{"expression":{"arguments":[{"id":7354,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7343,"src":"792:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7355,"name":"roleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7346,"src":"798:11:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":7353,"name":"_ensureAuthenticatedByExclusiveRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7485,"src":"756:35:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) view"}},"id":7356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"756:54:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7357,"nodeType":"ExpressionStatement","src":"756:54:44"},{"id":7358,"nodeType":"PlaceholderStatement","src":"820:1:44"}]},"documentation":{"id":7341,"nodeType":"StructuredDocumentation","src":"516:92:44","text":"@notice Caller must be the swapFeeManager, if defined. Otherwise, default to governance."},"id":7360,"name":"onlySwapFeeManagerOrGovernance","nameLocation":"622:30:44","nodeType":"ModifierDefinition","parameters":{"id":7344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7343,"mutability":"mutable","name":"pool","nameLocation":"661:4:44","nodeType":"VariableDeclaration","scope":7360,"src":"653:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7342,"name":"address","nodeType":"ElementaryTypeName","src":"653:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"652:14:44"},"src":"613:215:44","virtual":false,"visibility":"internal"},{"body":{"id":7389,"nodeType":"Block","src":"929:120:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":7379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":7373,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7363,"src":"951:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}],"id":7372,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"943:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7371,"name":"address","nodeType":"ElementaryTypeName","src":"943:7:44","typeDescriptions":{}}},"id":7374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"943:14:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":7377,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"969:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":7376,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"961:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7375,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:44","typeDescriptions":{}}},"id":7378,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"961:10:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"943:28:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7384,"nodeType":"IfStatement","src":"939:79:44","trueBody":{"id":7383,"nodeType":"Block","src":"973:45:44","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7380,"name":"VaultNotSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7337,"src":"994:11:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"994:13:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7382,"nodeType":"RevertStatement","src":"987:20:44"}]}},{"expression":{"id":7387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7385,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7340,"src":"1028:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7386,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7363,"src":"1037:5:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"src":"1028:14:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":7388,"nodeType":"ExpressionStatement","src":"1028:14:44"}]},"id":7390,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":7368,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7365,"src":"906:21:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":7369,"kind":"baseConstructorSpecifier","modifierName":{"id":7367,"name":"Authentication","nameLocations":["891:14:44"],"nodeType":"IdentifierPath","referencedDeclaration":4367,"src":"891:14:44"},"nodeType":"ModifierInvocation","src":"891:37:44"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":7366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7363,"mutability":"mutable","name":"vault","nameLocation":"853:5:44","nodeType":"VariableDeclaration","scope":7390,"src":"846:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":7362,"nodeType":"UserDefinedTypeName","pathNode":{"id":7361,"name":"IVault","nameLocations":["846:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"846:6:44"},"referencedDeclaration":2527,"src":"846:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":7365,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"868:21:44","nodeType":"VariableDeclaration","scope":7390,"src":"860:29:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7364,"name":"bytes32","nodeType":"ElementaryTypeName","src":"860:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"845:45:44"},"returnParameters":{"id":7370,"nodeType":"ParameterList","parameters":[],"src":"929:0:44"},"scope":7517,"src":"834:215:44","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7398,"nodeType":"Block","src":"1107:30:44","statements":[{"expression":{"id":7396,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7340,"src":"1124:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"functionReturnParameters":7395,"id":7397,"nodeType":"Return","src":"1117:13:44"}]},"id":7399,"implemented":true,"kind":"function","modifiers":[],"name":"_getVault","nameLocation":"1064:9:44","nodeType":"FunctionDefinition","parameters":{"id":7391,"nodeType":"ParameterList","parameters":[],"src":"1073:2:44"},"returnParameters":{"id":7395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7394,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7399,"src":"1099:6:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":7393,"nodeType":"UserDefinedTypeName","pathNode":{"id":7392,"name":"IVault","nameLocations":["1099:6:44"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"1099:6:44"},"referencedDeclaration":2527,"src":"1099:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1098:8:44"},"scope":7517,"src":"1055:82:44","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[4366],"body":{"id":7421,"nodeType":"Block","src":"1319:88:44","statements":[{"expression":{"arguments":[{"id":7413,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7401,"src":"1370:8:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":7414,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7403,"src":"1380:4:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":7417,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1394:4:44","typeDescriptions":{"typeIdentifier":"t_contract$_CommonAuthentication_$7517","typeString":"contract CommonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CommonAuthentication_$7517","typeString":"contract CommonAuthentication"}],"id":7416,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1386:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7415,"name":"address","nodeType":"ElementaryTypeName","src":"1386:7:44","typeDescriptions":{}}},"id":7418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1386:13:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7409,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7340,"src":"1336:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":7410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1343:13:44","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":3841,"src":"1336:20:44","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1341_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":7411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1336:22:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"id":7412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1359:10:44","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":1340,"src":"1336:33:44","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":7419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1336:64:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7408,"id":7420,"nodeType":"Return","src":"1329:71:44"}]},"id":7422,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1237:11:44","nodeType":"FunctionDefinition","overrides":{"id":7405,"nodeType":"OverrideSpecifier","overrides":[],"src":"1295:8:44"},"parameters":{"id":7404,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7401,"mutability":"mutable","name":"actionId","nameLocation":"1257:8:44","nodeType":"VariableDeclaration","scope":7422,"src":"1249:16:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7400,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1249:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7403,"mutability":"mutable","name":"user","nameLocation":"1275:4:44","nodeType":"VariableDeclaration","scope":7422,"src":"1267:12:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7402,"name":"address","nodeType":"ElementaryTypeName","src":"1267:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1248:32:44"},"returnParameters":{"id":7408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7407,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7422,"src":"1313:4:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7406,"name":"bool","nodeType":"ElementaryTypeName","src":"1313:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1312:6:44"},"scope":7517,"src":"1228:179:44","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7442,"nodeType":"Block","src":"1513:83:44","statements":[{"expression":{"arguments":[{"id":7437,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7424,"src":"1564:8:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":7438,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7426,"src":"1574:7:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7439,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7428,"src":"1583:5:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7433,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7340,"src":"1530:6:44","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":7434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1537:13:44","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":3841,"src":"1530:20:44","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1341_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":7435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1530:22:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"id":7436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1553:10:44","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":1340,"src":"1530:33:44","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":7440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1530:59:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7432,"id":7441,"nodeType":"Return","src":"1523:66:44"}]},"id":7443,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1422:11:44","nodeType":"FunctionDefinition","parameters":{"id":7429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7424,"mutability":"mutable","name":"actionId","nameLocation":"1442:8:44","nodeType":"VariableDeclaration","scope":7443,"src":"1434:16:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7423,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1434:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7426,"mutability":"mutable","name":"account","nameLocation":"1460:7:44","nodeType":"VariableDeclaration","scope":7443,"src":"1452:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7425,"name":"address","nodeType":"ElementaryTypeName","src":"1452:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7428,"mutability":"mutable","name":"where","nameLocation":"1477:5:44","nodeType":"VariableDeclaration","scope":7443,"src":"1469:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7427,"name":"address","nodeType":"ElementaryTypeName","src":"1469:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1433:50:44"},"returnParameters":{"id":7432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7431,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7443,"src":"1507:4:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7430,"name":"bool","nodeType":"ElementaryTypeName","src":"1507:4:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1506:6:44"},"scope":7517,"src":"1413:183:44","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7484,"nodeType":"Block","src":"1803:339:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":7456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7451,"name":"roleAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7448,"src":"1817:11:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":7454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1840:1:44","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":7453,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1832:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7452,"name":"address","nodeType":"ElementaryTypeName","src":"1832:7:44","typeDescriptions":{}}},"id":7455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1832:10:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1817:25:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":7477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7474,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2059:3:44","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2063:6:44","memberName":"sender","nodeType":"MemberAccess","src":"2059:10:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":7476,"name":"roleAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7448,"src":"2073:11:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2059:25:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7482,"nodeType":"IfStatement","src":"2055:81:44","trueBody":{"id":7481,"nodeType":"Block","src":"2086:50:44","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7478,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"2107:16:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2107:18:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7480,"nodeType":"RevertStatement","src":"2100:25:44"}]}},"id":7483,"nodeType":"IfStatement","src":"1813:323:44","trueBody":{"id":7473,"nodeType":"Block","src":"1844:205:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"expression":{"id":7459,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1942:3:44","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1946:3:44","memberName":"sig","nodeType":"MemberAccess","src":"1942:7:44","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":7458,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4356,"src":"1930:11:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":7461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1930:20:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":7462,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1952:3:44","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1956:6:44","memberName":"sender","nodeType":"MemberAccess","src":"1952:10:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7464,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7446,"src":"1964:5:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":7457,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[7422,7443],"referencedDeclaration":7443,"src":"1918:11:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view returns (bool)"}},"id":7465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1918:52:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":7466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1974:5:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1918:61:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7472,"nodeType":"IfStatement","src":"1914:125:44","trueBody":{"id":7471,"nodeType":"Block","src":"1981:58:44","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7468,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"2006:16:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2006:18:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7470,"nodeType":"RevertStatement","src":"1999:25:44"}]}}]}}]},"documentation":{"id":7444,"nodeType":"StructuredDocumentation","src":"1602:101:44","text":"@dev Ensure the sender is the roleAccount, or default to governance if roleAccount is address(0)."},"id":7485,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureAuthenticatedByExclusiveRole","nameLocation":"1717:35:44","nodeType":"FunctionDefinition","parameters":{"id":7449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7446,"mutability":"mutable","name":"where","nameLocation":"1761:5:44","nodeType":"VariableDeclaration","scope":7485,"src":"1753:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7445,"name":"address","nodeType":"ElementaryTypeName","src":"1753:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7448,"mutability":"mutable","name":"roleAccount","nameLocation":"1776:11:44","nodeType":"VariableDeclaration","scope":7485,"src":"1768:19:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7447,"name":"address","nodeType":"ElementaryTypeName","src":"1768:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1752:36:44"},"returnParameters":{"id":7450,"nodeType":"ParameterList","parameters":[],"src":"1803:0:44"},"scope":7517,"src":"1708:434:44","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7515,"nodeType":"Block","src":"2341:352:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":7496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7493,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2444:3:44","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2448:6:44","memberName":"sender","nodeType":"MemberAccess","src":"2444:10:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":7495,"name":"roleAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7490,"src":"2458:11:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2444:25:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7514,"nodeType":"IfStatement","src":"2440:180:44","trueBody":{"id":7513,"nodeType":"Block","src":"2471:149:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"expression":{"id":7499,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2513:3:44","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2517:3:44","memberName":"sig","nodeType":"MemberAccess","src":"2513:7:44","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":7498,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4356,"src":"2501:11:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":7501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2501:20:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":7502,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2523:3:44","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2527:6:44","memberName":"sender","nodeType":"MemberAccess","src":"2523:10:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7504,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7488,"src":"2535:5:44","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":7497,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[7422,7443],"referencedDeclaration":7443,"src":"2489:11:44","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view returns (bool)"}},"id":7505,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2489:52:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":7506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2545:5:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"2489:61:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7512,"nodeType":"IfStatement","src":"2485:125:44","trueBody":{"id":7511,"nodeType":"Block","src":"2552:58:44","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7508,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"2577:16:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2577:18:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7510,"nodeType":"RevertStatement","src":"2570:25:44"}]}}]}}]},"documentation":{"id":7486,"nodeType":"StructuredDocumentation","src":"2148:102:44","text":"@dev Ensure the sender is either the role manager, or is authorized by governance (non-exclusive)."},"id":7516,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureAuthenticatedByRole","nameLocation":"2264:26:44","nodeType":"FunctionDefinition","parameters":{"id":7491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7488,"mutability":"mutable","name":"where","nameLocation":"2299:5:44","nodeType":"VariableDeclaration","scope":7516,"src":"2291:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7487,"name":"address","nodeType":"ElementaryTypeName","src":"2291:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7490,"mutability":"mutable","name":"roleAccount","nameLocation":"2314:11:44","nodeType":"VariableDeclaration","scope":7516,"src":"2306:19:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7489,"name":"address","nodeType":"ElementaryTypeName","src":"2306:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2290:36:44"},"returnParameters":{"id":7492,"nodeType":"ParameterList","parameters":[],"src":"2341:0:44"},"scope":7517,"src":"2255:438:44","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":7518,"src":"348:2347:44","usedErrors":[5,7337],"usedEvents":[]}],"src":"46:2650:44"},"id":44},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","exportedSymbols":{"FEE_SCALING_FACTOR":[4284],"FixedPoint":[5280],"IERC20":[10558],"IProtocolFeeController":[1955],"IVault":[2527],"IVaultErrors":[3184],"MAX_FEE_PERCENTAGE":[4287],"PoolRoleAccounts":[4093],"ProtocolFeeController":[9212],"ReentrancyGuardTransient":[6994],"SafeCast":[16074],"SafeERC20":[11048],"SingletonAuthentication":[9271],"VaultGuard":[9320]},"id":9213,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":7519,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:45"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":7521,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9213,"sourceUnit":11049,"src":"72:84:45","symbolAliases":[{"foreign":{"id":7520,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11048,"src":"81:9:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":7523,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9213,"sourceUnit":16075,"src":"157:75:45","symbolAliases":[{"foreign":{"id":7522,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"166:8:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":7525,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9213,"sourceUnit":10559,"src":"233:72:45","symbolAliases":[{"foreign":{"id":7524,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"242:6:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":7527,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9213,"sourceUnit":1956,"src":"307:113:45","symbolAliases":[{"foreign":{"id":7526,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"316:22:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":7529,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9213,"sourceUnit":3185,"src":"421:93:45","symbolAliases":[{"foreign":{"id":7528,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3184,"src":"430:12:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":7531,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9213,"sourceUnit":2528,"src":"515:81:45","symbolAliases":[{"foreign":{"id":7530,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"524:6:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":7535,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9213,"sourceUnit":4288,"src":"597:147:45","symbolAliases":[{"foreign":{"id":7532,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4284,"src":"610:18:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":7533,"name":"MAX_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4287,"src":"634:18:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":7534,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4093,"src":"658:16:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":7537,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9213,"sourceUnit":6995,"src":"746:132:45","symbolAliases":[{"foreign":{"id":7536,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6994,"src":"759:24:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":7539,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9213,"sourceUnit":5281,"src":"879:92:45","symbolAliases":[{"foreign":{"id":7538,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5280,"src":"888:10:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"./SingletonAuthentication.sol","id":7541,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9213,"sourceUnit":9272,"src":"973:72:45","symbolAliases":[{"foreign":{"id":7540,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9271,"src":"982:23:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","file":"./VaultGuard.sol","id":7543,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9213,"sourceUnit":9321,"src":"1046:46:45","symbolAliases":[{"foreign":{"id":7542,"name":"VaultGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9320,"src":"1055:10:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":7545,"name":"IProtocolFeeController","nameLocations":["3158:22:45"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"3158:22:45"},"id":7546,"nodeType":"InheritanceSpecifier","src":"3158:22:45"},{"baseName":{"id":7547,"name":"SingletonAuthentication","nameLocations":["3186:23:45"],"nodeType":"IdentifierPath","referencedDeclaration":9271,"src":"3186:23:45"},"id":7548,"nodeType":"InheritanceSpecifier","src":"3186:23:45"},{"baseName":{"id":7549,"name":"ReentrancyGuardTransient","nameLocations":["3215:24:45"],"nodeType":"IdentifierPath","referencedDeclaration":6994,"src":"3215:24:45"},"id":7550,"nodeType":"InheritanceSpecifier","src":"3215:24:45"},{"baseName":{"id":7551,"name":"VaultGuard","nameLocations":["3245:10:45"],"nodeType":"IdentifierPath","referencedDeclaration":9320,"src":"3245:10:45"},"id":7552,"nodeType":"InheritanceSpecifier","src":"3245:10:45"}],"canonicalName":"ProtocolFeeController","contractDependencies":[],"contractKind":"contract","documentation":{"id":7544,"nodeType":"StructuredDocumentation","src":"1094:2025:45","text":" @notice Helper contract to manage protocol and creator fees outside the Vault.\n @dev This contract stores global default protocol swap and yield fees, and also tracks the values of those fees\n for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but\n pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`).\n The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows\n the component fee percentages, and how to compute the aggregate from the components. This is done for performance\n reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \"cut\", and stores the\n fee amounts separately from the pool balances.\n The pool creator fees are \"net\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee\n percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided\n between the pool creator and the LPs.\n There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this\n contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any\n time by governance and the pool creator, respectively.\n Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero\n if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator\n fees are computed \"net\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible.\n A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool\n creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs.\n This contract is deployed with the Vault, but can be changed by governance."},"fullyImplemented":true,"id":9212,"linearizedBaseContracts":[9212,9320,6994,9271,7517,4367,14,1955],"name":"ProtocolFeeController","nameLocation":"3129:21:45","nodeType":"ContractDefinition","nodes":[{"global":false,"id":7555,"libraryName":{"id":7553,"name":"FixedPoint","nameLocations":["3268:10:45"],"nodeType":"IdentifierPath","referencedDeclaration":5280,"src":"3268:10:45"},"nodeType":"UsingForDirective","src":"3262:29:45","typeName":{"id":7554,"name":"uint256","nodeType":"ElementaryTypeName","src":"3283:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":7559,"libraryName":{"id":7556,"name":"SafeERC20","nameLocations":["3302:9:45"],"nodeType":"IdentifierPath","referencedDeclaration":11048,"src":"3302:9:45"},"nodeType":"UsingForDirective","src":"3296:27:45","typeName":{"id":7558,"nodeType":"UserDefinedTypeName","pathNode":{"id":7557,"name":"IERC20","nameLocations":["3316:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"3316:6:45"},"referencedDeclaration":10558,"src":"3316:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}},{"global":false,"id":7561,"libraryName":{"id":7560,"name":"SafeCast","nameLocations":["3334:8:45"],"nodeType":"IdentifierPath","referencedDeclaration":16074,"src":"3334:8:45"},"nodeType":"UsingForDirective","src":"3328:21:45"},{"canonicalName":"ProtocolFeeController.ProtocolFeeType","id":7564,"members":[{"id":7562,"name":"SWAP","nameLocation":"3386:4:45","nodeType":"EnumValue","src":"3386:4:45"},{"id":7563,"name":"YIELD","nameLocation":"3400:5:45","nodeType":"EnumValue","src":"3400:5:45"}],"name":"ProtocolFeeType","nameLocation":"3360:15:45","nodeType":"EnumDefinition","src":"3355:56:45"},{"canonicalName":"ProtocolFeeController.PoolFeeConfig","documentation":{"id":7565,"nodeType":"StructuredDocumentation","src":"3417:1063:45","text":" @notice Fee configuration stored in the swap and yield fee mappings.\n @dev Instead of storing only the fee in the mapping, also store a flag to indicate whether the fee has been\n set by governance through a permissioned call. (The fee is stored in 64-bits, so that the struct fits\n within a single slot.)\n We know the percentage is an 18-decimal FP value, which only takes 60 bits, so it's guaranteed to fit,\n and we can do simple casts to truncate the high bits without needed SafeCast.\n We want to enable permissionless updates for pools, so that it is less onerous to update potentially\n hundreds of pools if the global protocol fees change. However, we don't want to overwrite pools that\n have had their fee percentages manually set by the DAO (i.e., after off-chain negotiation and agreement).\n @param feePercentage The raw swap or yield fee percentage\n @param isOverride When set, this fee is controlled by governance, and cannot be changed permissionlessly"},"id":7570,"members":[{"constant":false,"id":7567,"mutability":"mutable","name":"feePercentage","nameLocation":"4523:13:45","nodeType":"VariableDeclaration","scope":7570,"src":"4516:20:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":7566,"name":"uint64","nodeType":"ElementaryTypeName","src":"4516:6:45","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":7569,"mutability":"mutable","name":"isOverride","nameLocation":"4551:10:45","nodeType":"VariableDeclaration","scope":7570,"src":"4546:15:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7568,"name":"bool","nodeType":"ElementaryTypeName","src":"4546:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolFeeConfig","nameLocation":"4492:13:45","nodeType":"StructDefinition","scope":9212,"src":"4485:83:45","visibility":"public"},{"constant":true,"functionSelector":"2772d156","id":7573,"mutability":"constant","name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nameLocation":"4685:32:45","nodeType":"VariableDeclaration","scope":9212,"src":"4661:64:45","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7571,"name":"uint256","nodeType":"ElementaryTypeName","src":"4661:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3530653136","id":7572,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4720:5:45","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"50e16"},"visibility":"public"},{"constant":true,"functionSelector":"5e32e4e8","id":7576,"mutability":"constant","name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nameLocation":"4809:33:45","nodeType":"VariableDeclaration","scope":9212,"src":"4785:65:45","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7574,"name":"uint256","nodeType":"ElementaryTypeName","src":"4785:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3530653136","id":7575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4845:5:45","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"50e16"},"visibility":"public"},{"constant":true,"functionSelector":"2e1d388d","id":7579,"mutability":"constant","name":"MAX_CREATOR_FEE_PERCENTAGE","nameLocation":"4946:26:45","nodeType":"VariableDeclaration","scope":9212,"src":"4922:62:45","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7577,"name":"uint256","nodeType":"ElementaryTypeName","src":"4922:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e393939653136","id":7578,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4975:9:45","typeDescriptions":{"typeIdentifier":"t_rational_999990000000000000_by_1","typeString":"int_const 999990000000000000"},"value":"99.999e16"},"visibility":"public"},{"constant":false,"id":7581,"mutability":"mutable","name":"_globalProtocolSwapFeePercentage","nameLocation":"5051:32:45","nodeType":"VariableDeclaration","scope":9212,"src":"5035:48:45","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7580,"name":"uint256","nodeType":"ElementaryTypeName","src":"5035:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":7583,"mutability":"mutable","name":"_globalProtocolYieldFeePercentage","nameLocation":"5140:33:45","nodeType":"VariableDeclaration","scope":9212,"src":"5124:49:45","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7582,"name":"uint256","nodeType":"ElementaryTypeName","src":"5124:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":7588,"mutability":"mutable","name":"_poolProtocolSwapFeePercentages","nameLocation":"5356:31:45","nodeType":"VariableDeclaration","scope":9212,"src":"5294:93:45","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7570_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"typeName":{"id":7587,"keyName":"pool","keyNameLocation":"5310:4:45","keyType":{"id":7584,"name":"address","nodeType":"ElementaryTypeName","src":"5302:7:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5294:52:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7570_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"valueName":"swapFeeConfig","valueNameLocation":"5332:13:45","valueType":{"id":7586,"nodeType":"UserDefinedTypeName","pathNode":{"id":7585,"name":"PoolFeeConfig","nameLocations":["5318:13:45"],"nodeType":"IdentifierPath","referencedDeclaration":7570,"src":"5318:13:45"},"referencedDeclaration":7570,"src":"5318:13:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}}},"visibility":"internal"},{"constant":false,"id":7593,"mutability":"mutable","name":"_poolProtocolYieldFeePercentages","nameLocation":"5572:32:45","nodeType":"VariableDeclaration","scope":9212,"src":"5509:95:45","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7570_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"typeName":{"id":7592,"keyName":"pool","keyNameLocation":"5525:4:45","keyType":{"id":7589,"name":"address","nodeType":"ElementaryTypeName","src":"5517:7:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5509:53:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7570_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"valueName":"yieldFeeConfig","valueNameLocation":"5547:14:45","valueType":{"id":7591,"nodeType":"UserDefinedTypeName","pathNode":{"id":7590,"name":"PoolFeeConfig","nameLocations":["5533:13:45"],"nodeType":"IdentifierPath","referencedDeclaration":7570,"src":"5533:13:45"},"referencedDeclaration":7570,"src":"5533:13:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}}},"visibility":"internal"},{"constant":false,"id":7597,"mutability":"mutable","name":"_registeredPools","nameLocation":"5777:16:45","nodeType":"VariableDeclaration","scope":9212,"src":"5725:68:45","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":7596,"keyName":"pool","keyNameLocation":"5741:4:45","keyType":{"id":7594,"name":"address","nodeType":"ElementaryTypeName","src":"5733:7:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5725:42:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"isRegistered","valueNameLocation":"5754:12:45","valueType":{"id":7595,"name":"bool","nodeType":"ElementaryTypeName","src":"5749:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":7601,"mutability":"mutable","name":"_poolCreatorSwapFeePercentages","nameLocation":"5917:30:45","nodeType":"VariableDeclaration","scope":9212,"src":"5856:91:45","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":7600,"keyName":"pool","keyNameLocation":"5872:4:45","keyType":{"id":7598,"name":"address","nodeType":"ElementaryTypeName","src":"5864:7:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5856:51:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolCreatorSwapFee","valueNameLocation":"5888:18:45","valueType":{"id":7599,"name":"uint256","nodeType":"ElementaryTypeName","src":"5880:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":7605,"mutability":"mutable","name":"_poolCreatorYieldFeePercentages","nameLocation":"6073:31:45","nodeType":"VariableDeclaration","scope":9212,"src":"6011:93:45","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":7604,"keyName":"pool","keyNameLocation":"6027:4:45","keyType":{"id":7602,"name":"address","nodeType":"ElementaryTypeName","src":"6019:7:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6011:52:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolCreatorYieldFee","valueNameLocation":"6043:19:45","valueType":{"id":7603,"name":"uint256","nodeType":"ElementaryTypeName","src":"6035:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":7612,"mutability":"mutable","name":"_protocolFeeAmounts","nameLocation":"6290:19:45","nodeType":"VariableDeclaration","scope":9212,"src":"6209:100:45","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"typeName":{"id":7611,"keyName":"pool","keyNameLocation":"6225:4:45","keyType":{"id":7606,"name":"address","nodeType":"ElementaryTypeName","src":"6217:7:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6209:71:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":7610,"keyName":"poolToken","keyNameLocation":"6248:9:45","keyType":{"id":7608,"nodeType":"UserDefinedTypeName","pathNode":{"id":7607,"name":"IERC20","nameLocations":["6241:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"6241:6:45"},"referencedDeclaration":10558,"src":"6241:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6233:46:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"feeAmount","valueNameLocation":"6269:9:45","valueType":{"id":7609,"name":"uint256","nodeType":"ElementaryTypeName","src":"6261:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"constant":false,"id":7619,"mutability":"mutable","name":"_poolCreatorFeeAmounts","nameLocation":"6505:22:45","nodeType":"VariableDeclaration","scope":9212,"src":"6424:103:45","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"typeName":{"id":7618,"keyName":"pool","keyNameLocation":"6440:4:45","keyType":{"id":7613,"name":"address","nodeType":"ElementaryTypeName","src":"6432:7:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6424:71:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":7617,"keyName":"poolToken","keyNameLocation":"6463:9:45","keyType":{"id":7615,"nodeType":"UserDefinedTypeName","pathNode":{"id":7614,"name":"IERC20","nameLocations":["6456:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"6456:6:45"},"referencedDeclaration":10558,"src":"6456:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6448:46:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"feeAmount","valueNameLocation":"6484:9:45","valueType":{"id":7616,"name":"uint256","nodeType":"ElementaryTypeName","src":"6476:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"documentation":{"id":7620,"nodeType":"StructuredDocumentation","src":"6534:279:45","text":" @notice Prevent pool data from being registered more than once.\n @dev This can happen if there is an error in the migration, or if governance somehow grants permission to\n `migratePool`, which should never happen.\n @param pool The pool"},"errorSelector":"db771c80","id":7624,"name":"PoolAlreadyRegistered","nameLocation":"6824:21:45","nodeType":"ErrorDefinition","parameters":{"id":7623,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7622,"mutability":"mutable","name":"pool","nameLocation":"6854:4:45","nodeType":"VariableDeclaration","scope":7624,"src":"6846:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7621,"name":"address","nodeType":"ElementaryTypeName","src":"6846:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6845:14:45"},"src":"6818:42:45"},{"documentation":{"id":7625,"nodeType":"StructuredDocumentation","src":"6866:53:45","text":"@notice Migration source cannot be this contract."},"errorSelector":"b82fd5bf","id":7627,"name":"InvalidMigrationSource","nameLocation":"6930:22:45","nodeType":"ErrorDefinition","parameters":{"id":7626,"nodeType":"ParameterList","parameters":[],"src":"6952:2:45"},"src":"6924:31:45"},{"body":{"id":7636,"nodeType":"Block","src":"7051:60:45","statements":[{"expression":{"arguments":[{"id":7632,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7629,"src":"7088:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7631,"name":"_ensureCallerIsPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8433,"src":"7061:26:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":7633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7061:32:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7634,"nodeType":"ExpressionStatement","src":"7061:32:45"},{"id":7635,"nodeType":"PlaceholderStatement","src":"7103:1:45"}]},"id":7637,"name":"onlyPoolCreator","nameLocation":"7021:15:45","nodeType":"ModifierDefinition","parameters":{"id":7630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7629,"mutability":"mutable","name":"pool","nameLocation":"7045:4:45","nodeType":"VariableDeclaration","scope":7637,"src":"7037:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7628,"name":"address","nodeType":"ElementaryTypeName","src":"7037:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7036:14:45"},"src":"7012:99:45","virtual":false,"visibility":"internal"},{"body":{"id":7654,"nodeType":"Block","src":"7234:207:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7641,"name":"newSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7639,"src":"7248:20:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":7642,"name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7573,"src":"7271:32:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7248:55:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7648,"nodeType":"IfStatement","src":"7244:127:45","trueBody":{"id":7647,"nodeType":"Block","src":"7305:66:45","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7644,"name":"ProtocolSwapFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1736,"src":"7326:32:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7326:34:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7646,"nodeType":"RevertStatement","src":"7319:41:45"}]}},{"expression":{"arguments":[{"id":7650,"name":"newSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7639,"src":"7402:20:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7649,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9211,"src":"7380:21:45","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":7651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7380:43:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7652,"nodeType":"ExpressionStatement","src":"7380:43:45"},{"id":7653,"nodeType":"PlaceholderStatement","src":"7433:1:45"}]},"id":7655,"name":"withValidSwapFee","nameLocation":"7187:16:45","nodeType":"ModifierDefinition","parameters":{"id":7640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7639,"mutability":"mutable","name":"newSwapFeePercentage","nameLocation":"7212:20:45","nodeType":"VariableDeclaration","scope":7655,"src":"7204:28:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7638,"name":"uint256","nodeType":"ElementaryTypeName","src":"7204:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7203:30:45"},"src":"7178:263:45","virtual":false,"visibility":"internal"},{"body":{"id":7672,"nodeType":"Block","src":"7567:211:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7659,"name":"newYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7657,"src":"7581:21:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":7660,"name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7576,"src":"7605:33:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7581:57:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7666,"nodeType":"IfStatement","src":"7577:130:45","trueBody":{"id":7665,"nodeType":"Block","src":"7640:67:45","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7662,"name":"ProtocolYieldFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1739,"src":"7661:33:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7661:35:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7664,"nodeType":"RevertStatement","src":"7654:42:45"}]}},{"expression":{"arguments":[{"id":7668,"name":"newYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7657,"src":"7738:21:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7667,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9211,"src":"7716:21:45","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":7669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7716:44:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7670,"nodeType":"ExpressionStatement","src":"7716:44:45"},{"id":7671,"nodeType":"PlaceholderStatement","src":"7770:1:45"}]},"id":7673,"name":"withValidYieldFee","nameLocation":"7518:17:45","nodeType":"ModifierDefinition","parameters":{"id":7658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7657,"mutability":"mutable","name":"newYieldFeePercentage","nameLocation":"7544:21:45","nodeType":"VariableDeclaration","scope":7673,"src":"7536:29:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7656,"name":"uint256","nodeType":"ElementaryTypeName","src":"7536:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7535:31:45"},"src":"7509:269:45","virtual":false,"visibility":"internal"},{"body":{"id":7686,"nodeType":"Block","src":"7854:154:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7677,"name":"newPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7675,"src":"7868:27:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":7678,"name":"MAX_CREATOR_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7579,"src":"7898:26:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7868:56:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7684,"nodeType":"IfStatement","src":"7864:127:45","trueBody":{"id":7683,"nodeType":"Block","src":"7926:65:45","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7680,"name":"PoolCreatorFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1754,"src":"7947:31:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7947:33:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7682,"nodeType":"RevertStatement","src":"7940:40:45"}]}},{"id":7685,"nodeType":"PlaceholderStatement","src":"8000:1:45"}]},"id":7687,"name":"withValidPoolCreatorFee","nameLocation":"7793:23:45","nodeType":"ModifierDefinition","parameters":{"id":7676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7675,"mutability":"mutable","name":"newPoolCreatorFeePercentage","nameLocation":"7825:27:45","nodeType":"VariableDeclaration","scope":7687,"src":"7817:35:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7674,"name":"uint256","nodeType":"ElementaryTypeName","src":"7817:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7816:37:45"},"src":"7784:224:45","virtual":false,"visibility":"internal"},{"body":{"id":7696,"nodeType":"Block","src":"8145:54:45","statements":[{"expression":{"arguments":[{"id":7692,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7689,"src":"8176:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7691,"name":"collectAggregateFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7750,"src":"8155:20:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":7693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8155:26:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7694,"nodeType":"ExpressionStatement","src":"8155:26:45"},{"id":7695,"nodeType":"PlaceholderStatement","src":"8191:1:45"}]},"id":7697,"name":"withLatestFees","nameLocation":"8116:14:45","nodeType":"ModifierDefinition","parameters":{"id":7690,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7689,"mutability":"mutable","name":"pool","nameLocation":"8139:4:45","nodeType":"VariableDeclaration","scope":7697,"src":"8131:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7688,"name":"address","nodeType":"ElementaryTypeName","src":"8131:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8130:14:45"},"src":"8107:92:45","virtual":false,"visibility":"internal"},{"body":{"id":7721,"nodeType":"Block","src":"8394:163:45","statements":[{"expression":{"arguments":[{"id":7714,"name":"initialGlobalSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7702,"src":"8440:30:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7713,"name":"_setGlobalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8702,"src":"8404:35:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":7715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8404:67:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7716,"nodeType":"ExpressionStatement","src":"8404:67:45"},{"expression":{"arguments":[{"id":7718,"name":"initialGlobalYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7704,"src":"8518:31:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7717,"name":"_setGlobalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8732,"src":"8481:36:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":7719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8481:69:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7720,"nodeType":"ExpressionStatement","src":"8481:69:45"}]},"id":7722,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":7707,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7700,"src":"8367:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}}],"id":7708,"kind":"baseConstructorSpecifier","modifierName":{"id":7706,"name":"SingletonAuthentication","nameLocations":["8343:23:45"],"nodeType":"IdentifierPath","referencedDeclaration":9271,"src":"8343:23:45"},"nodeType":"ModifierInvocation","src":"8343:31:45"},{"arguments":[{"id":7710,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7700,"src":"8386:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}}],"id":7711,"kind":"baseConstructorSpecifier","modifierName":{"id":7709,"name":"VaultGuard","nameLocations":["8375:10:45"],"nodeType":"IdentifierPath","referencedDeclaration":9320,"src":"8375:10:45"},"nodeType":"ModifierInvocation","src":"8375:18:45"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":7705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7700,"mutability":"mutable","name":"vault_","nameLocation":"8233:6:45","nodeType":"VariableDeclaration","scope":7722,"src":"8226:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":7699,"nodeType":"UserDefinedTypeName","pathNode":{"id":7698,"name":"IVault","nameLocations":["8226:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"8226:6:45"},"referencedDeclaration":2527,"src":"8226:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":7702,"mutability":"mutable","name":"initialGlobalSwapFeePercentage","nameLocation":"8257:30:45","nodeType":"VariableDeclaration","scope":7722,"src":"8249:38:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7701,"name":"uint256","nodeType":"ElementaryTypeName","src":"8249:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7704,"mutability":"mutable","name":"initialGlobalYieldFeePercentage","nameLocation":"8305:31:45","nodeType":"VariableDeclaration","scope":7722,"src":"8297:39:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7703,"name":"uint256","nodeType":"ElementaryTypeName","src":"8297:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8216:126:45"},"returnParameters":{"id":7712,"nodeType":"ParameterList","parameters":[],"src":"8394:0:45"},"scope":9212,"src":"8205:352:45","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1761],"body":{"id":7731,"nodeType":"Block","src":"8654:30:45","statements":[{"expression":{"id":7729,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"8671:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"functionReturnParameters":7728,"id":7730,"nodeType":"Return","src":"8664:13:45"}]},"documentation":{"id":7723,"nodeType":"StructuredDocumentation","src":"8563:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"fbfa77cf","id":7732,"implemented":true,"kind":"function","modifiers":[],"name":"vault","nameLocation":"8615:5:45","nodeType":"FunctionDefinition","parameters":{"id":7724,"nodeType":"ParameterList","parameters":[],"src":"8620:2:45"},"returnParameters":{"id":7728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7727,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7732,"src":"8646:6:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":7726,"nodeType":"UserDefinedTypeName","pathNode":{"id":7725,"name":"IVault","nameLocations":["8646:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"8646:6:45"},"referencedDeclaration":2527,"src":"8646:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8645:8:45"},"scope":9212,"src":"8606:78:45","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1767],"body":{"id":7749,"nodeType":"Block","src":"8784:100:45","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":7743,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9212,"src":"8823:21:45","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$9212_$","typeString":"type(contract ProtocolFeeController)"}},"id":7744,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8845:24:45","memberName":"collectAggregateFeesHook","nodeType":"MemberAccess","referencedDeclaration":7778,"src":"8823:46:45","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.collectAggregateFeesHook(address)"}},{"id":7745,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7735,"src":"8871:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.collectAggregateFeesHook(address)"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7741,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8808:3:45","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":7742,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8812:10:45","memberName":"encodeCall","nodeType":"MemberAccess","src":"8808:14:45","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":7746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8808:68:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":7738,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"8794:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":7740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8801:6:45","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":3856,"src":"8794:13:45","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":7747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8794:83:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7748,"nodeType":"ExpressionStatement","src":"8794:83:45"}]},"documentation":{"id":7733,"nodeType":"StructuredDocumentation","src":"8690:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8f4ab9ca","id":7750,"implemented":true,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"8742:20:45","nodeType":"FunctionDefinition","parameters":{"id":7736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7735,"mutability":"mutable","name":"pool","nameLocation":"8771:4:45","nodeType":"VariableDeclaration","scope":7750,"src":"8763:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7734,"name":"address","nodeType":"ElementaryTypeName","src":"8763:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8762:14:45"},"returnParameters":{"id":7737,"nodeType":"ParameterList","parameters":[],"src":"8784:0:45"},"scope":9212,"src":"8733:151:45","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":7777,"nodeType":"Block","src":"9267:186:45","statements":[{"assignments":[7762,7765],"declarations":[{"constant":false,"id":7762,"mutability":"mutable","name":"totalSwapFees","nameLocation":"9295:13:45","nodeType":"VariableDeclaration","scope":7777,"src":"9278:30:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7760,"name":"uint256","nodeType":"ElementaryTypeName","src":"9278:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7761,"nodeType":"ArrayTypeName","src":"9278:9:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":7765,"mutability":"mutable","name":"totalYieldFees","nameLocation":"9327:14:45","nodeType":"VariableDeclaration","scope":7777,"src":"9310:31:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7763,"name":"uint256","nodeType":"ElementaryTypeName","src":"9310:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7764,"nodeType":"ArrayTypeName","src":"9310:9:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":7770,"initialValue":{"arguments":[{"id":7768,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7753,"src":"9373:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7766,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"9345:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":7767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9352:20:45","memberName":"collectAggregateFees","nodeType":"MemberAccess","referencedDeclaration":2655,"src":"9345:27:45","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) external returns (uint256[] memory,uint256[] memory)"}},"id":7769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9345:33:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"9277:101:45"},{"expression":{"arguments":[{"id":7772,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7753,"src":"9410:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7773,"name":"totalSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7762,"src":"9416:13:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":7774,"name":"totalYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7765,"src":"9431:14:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":7771,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[7805,8009],"referencedDeclaration":7805,"src":"9388:21:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,uint256[] memory,uint256[] memory)"}},"id":7775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9388:58:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7776,"nodeType":"ExpressionStatement","src":"9388:58:45"}]},"documentation":{"id":7751,"nodeType":"StructuredDocumentation","src":"8890:305:45","text":" @dev Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit\n for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount\n transferred so that the transaction settles when the hook returns."},"functionSelector":"fa399f2a","id":7778,"implemented":true,"kind":"function","modifiers":[{"id":7756,"kind":"modifierInvocation","modifierName":{"id":7755,"name":"onlyVault","nameLocations":["9257:9:45"],"nodeType":"IdentifierPath","referencedDeclaration":9299,"src":"9257:9:45"},"nodeType":"ModifierInvocation","src":"9257:9:45"}],"name":"collectAggregateFeesHook","nameLocation":"9209:24:45","nodeType":"FunctionDefinition","parameters":{"id":7754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7753,"mutability":"mutable","name":"pool","nameLocation":"9242:4:45","nodeType":"VariableDeclaration","scope":7778,"src":"9234:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7752,"name":"address","nodeType":"ElementaryTypeName","src":"9234:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9233:14:45"},"returnParameters":{"id":7757,"nodeType":"ParameterList","parameters":[],"src":"9267:0:45"},"scope":9212,"src":"9200:253:45","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7804,"nodeType":"Block","src":"10544:159:45","statements":[{"expression":{"arguments":[{"id":7791,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7781,"src":"10576:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":7792,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7564,"src":"10582:15:45","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7564_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7793,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10598:4:45","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7562,"src":"10582:20:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},{"id":7794,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7784,"src":"10604:14:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":7790,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[7805,8009],"referencedDeclaration":8009,"src":"10554:21:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_ProtocolFeeType_$7564_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType,uint256[] memory)"}},"id":7795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10554:65:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7796,"nodeType":"ExpressionStatement","src":"10554:65:45"},{"expression":{"arguments":[{"id":7798,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7781,"src":"10651:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":7799,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7564,"src":"10657:15:45","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7564_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7800,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10673:5:45","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":7563,"src":"10657:21:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},{"id":7801,"name":"yieldFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7787,"src":"10680:15:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":7797,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[7805,8009],"referencedDeclaration":8009,"src":"10629:21:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_ProtocolFeeType_$7564_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType,uint256[] memory)"}},"id":7802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10629:67:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7803,"nodeType":"ExpressionStatement","src":"10629:67:45"}]},"documentation":{"id":7779,"nodeType":"StructuredDocumentation","src":"9459:929:45","text":" @notice Settle fee credits from the Vault.\n @dev This must be called after calling `collectAggregateFees` in the Vault. Note that since charging protocol\n fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection\n happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations. The Vault\n differentiates between swap and yield fees (since they can have different percentage values); the Controller\n combines swap and yield fees, then allocates the total between the protocol and pool creator.\n @param pool The address of the pool on which the swap fees were charged\n @param swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @param yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"id":7805,"implemented":true,"kind":"function","modifiers":[],"name":"_receiveAggregateFees","nameLocation":"10402:21:45","nodeType":"FunctionDefinition","parameters":{"id":7788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7781,"mutability":"mutable","name":"pool","nameLocation":"10441:4:45","nodeType":"VariableDeclaration","scope":7805,"src":"10433:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7780,"name":"address","nodeType":"ElementaryTypeName","src":"10433:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7784,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"10472:14:45","nodeType":"VariableDeclaration","scope":7805,"src":"10455:31:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7782,"name":"uint256","nodeType":"ElementaryTypeName","src":"10455:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7783,"nodeType":"ArrayTypeName","src":"10455:9:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":7787,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"10513:15:45","nodeType":"VariableDeclaration","scope":7805,"src":"10496:32:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7785,"name":"uint256","nodeType":"ElementaryTypeName","src":"10496:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7786,"nodeType":"ArrayTypeName","src":"10496:9:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10423:111:45"},"returnParameters":{"id":7789,"nodeType":"ParameterList","parameters":[],"src":"10544:0:45"},"scope":9212,"src":"10393:310:45","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":8008,"nodeType":"Block","src":"10816:2992:45","statements":[{"assignments":[7817],"declarations":[{"constant":false,"id":7817,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"11056:21:45","nodeType":"VariableDeclaration","scope":8008,"src":"11048:29:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7816,"name":"uint256","nodeType":"ElementaryTypeName","src":"11048:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7831,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":7821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7818,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7810,"src":"11080:7:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":7819,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7564,"src":"11091:15:45","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7564_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7820,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11107:4:45","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7562,"src":"11091:20:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"11080:31:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"baseExpression":{"id":7826,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7593,"src":"11192:32:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7570_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":7828,"indexExpression":{"id":7827,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7807,"src":"11225:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11192:38:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":7829,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11231:13:45","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7567,"src":"11192:52:45","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":7830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11080:164:45","trueExpression":{"expression":{"baseExpression":{"id":7822,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7588,"src":"11126:31:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7570_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":7824,"indexExpression":{"id":7823,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7807,"src":"11158:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11126:37:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":7825,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11164:13:45","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7567,"src":"11126:51:45","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"VariableDeclarationStatement","src":"11048:196:45"},{"assignments":[7833],"declarations":[{"constant":false,"id":7833,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"11263:24:45","nodeType":"VariableDeclaration","scope":8008,"src":"11255:32:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7832,"name":"uint256","nodeType":"ElementaryTypeName","src":"11255:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7845,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":7837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7834,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7810,"src":"11290:7:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":7835,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7564,"src":"11301:15:45","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7564_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7836,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11317:4:45","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7562,"src":"11301:20:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"11290:31:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"baseExpression":{"id":7841,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7605,"src":"11387:31:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7843,"indexExpression":{"id":7842,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7807,"src":"11419:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11387:37:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11290:134:45","trueExpression":{"baseExpression":{"id":7838,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7601,"src":"11336:30:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7840,"indexExpression":{"id":7839,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7807,"src":"11367:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11336:36:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11255:169:45"},{"assignments":[7847],"declarations":[{"constant":false,"id":7847,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"11443:22:45","nodeType":"VariableDeclaration","scope":8008,"src":"11435:30:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7846,"name":"uint256","nodeType":"ElementaryTypeName","src":"11435:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7848,"nodeType":"VariableDeclarationStatement","src":"11435:30:45"},{"assignments":[7850],"declarations":[{"constant":false,"id":7850,"mutability":"mutable","name":"needToSplitFees","nameLocation":"11481:15:45","nodeType":"VariableDeclaration","scope":8008,"src":"11476:20:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7849,"name":"bool","nodeType":"ElementaryTypeName","src":"11476:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":7858,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7851,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7833,"src":"11499:24:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":7852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11526:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11499:28:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7854,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7817,"src":"11531:21:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":7855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11555:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11531:25:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11499:57:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"11476:80:45"},{"condition":{"id":7859,"name":"needToSplitFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7850,"src":"11570:15:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7868,"nodeType":"IfStatement","src":"11566:199:45","trueBody":{"id":7867,"nodeType":"Block","src":"11587:178:45","statements":[{"expression":{"id":7865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7860,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7847,"src":"11650:22:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7862,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7817,"src":"11706:21:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7863,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7833,"src":"11729:24:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7861,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8397,"src":"11675:30:45","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11675:79:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11650:104:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7866,"nodeType":"ExpressionStatement","src":"11650:104:45"}]}},{"assignments":[7873,7875],"declarations":[{"constant":false,"id":7873,"mutability":"mutable","name":"poolTokens","nameLocation":"11792:10:45","nodeType":"VariableDeclaration","scope":8008,"src":"11776:26:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":7871,"nodeType":"UserDefinedTypeName","pathNode":{"id":7870,"name":"IERC20","nameLocations":["11776:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"11776:6:45"},"referencedDeclaration":10558,"src":"11776:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":7872,"nodeType":"ArrayTypeName","src":"11776:8:45","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":7875,"mutability":"mutable","name":"numTokens","nameLocation":"11812:9:45","nodeType":"VariableDeclaration","scope":8008,"src":"11804:17:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7874,"name":"uint256","nodeType":"ElementaryTypeName","src":"11804:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7879,"initialValue":{"arguments":[{"id":7877,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7807,"src":"11848:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7876,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8457,"src":"11825:22:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":7878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11825:28:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11775:78:45"},{"body":{"id":8006,"nodeType":"Block","src":"11903:1899:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":7890,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7813,"src":"11921:10:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7892,"indexExpression":{"id":7891,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7881,"src":"11932:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11921:13:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":7893,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11937:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11921:17:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8005,"nodeType":"IfStatement","src":"11917:1875:45","trueBody":{"id":8004,"nodeType":"Block","src":"11940:1852:45","statements":[{"assignments":[7897],"declarations":[{"constant":false,"id":7897,"mutability":"mutable","name":"token","nameLocation":"11965:5:45","nodeType":"VariableDeclaration","scope":8004,"src":"11958:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":7896,"nodeType":"UserDefinedTypeName","pathNode":{"id":7895,"name":"IERC20","nameLocations":["11958:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"11958:6:45"},"referencedDeclaration":10558,"src":"11958:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"id":7901,"initialValue":{"baseExpression":{"id":7898,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7873,"src":"11973:10:45","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":7900,"indexExpression":{"id":7899,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7881,"src":"11984:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11973:13:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"11958:28:45"},{"expression":{"arguments":[{"id":7905,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7897,"src":"12019:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"arguments":[{"id":7908,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12034:4:45","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$9212","typeString":"contract ProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeController_$9212","typeString":"contract ProtocolFeeController"}],"id":7907,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12026:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7906,"name":"address","nodeType":"ElementaryTypeName","src":"12026:7:45","typeDescriptions":{}}},"id":7909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12026:13:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":7910,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7813,"src":"12041:10:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7912,"indexExpression":{"id":7911,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7881,"src":"12052:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12041:13:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7902,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"12005:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":7904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12012:6:45","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":3878,"src":"12005:13:45","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":7913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12005:50:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7914,"nodeType":"ExpressionStatement","src":"12005:50:45"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":7918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7915,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7810,"src":"12234:7:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":7916,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7564,"src":"12245:15:45","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7564_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":7917,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12261:4:45","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7562,"src":"12245:20:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"12234:31:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7936,"nodeType":"Block","src":"12371:99:45","statements":[{"eventCall":{"arguments":[{"id":7929,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7807,"src":"12424:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7930,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7897,"src":"12430:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"baseExpression":{"id":7931,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7813,"src":"12437:10:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7933,"indexExpression":{"id":7932,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7881,"src":"12448:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12437:13:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7928,"name":"ProtocolYieldFeeCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1682,"src":"12398:25:45","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10558_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":7934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12398:53:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7935,"nodeType":"EmitStatement","src":"12393:58:45"}]},"id":7937,"nodeType":"IfStatement","src":"12230:240:45","trueBody":{"id":7927,"nodeType":"Block","src":"12267:98:45","statements":[{"eventCall":{"arguments":[{"id":7920,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7807,"src":"12319:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7921,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7897,"src":"12325:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"baseExpression":{"id":7922,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7813,"src":"12332:10:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7924,"indexExpression":{"id":7923,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7881,"src":"12343:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12332:13:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7919,"name":"ProtocolSwapFeeCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1672,"src":"12294:24:45","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10558_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":7925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12294:52:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7926,"nodeType":"EmitStatement","src":"12289:57:45"}]}},{"condition":{"id":7938,"name":"needToSplitFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7850,"src":"12492:15:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8002,"nodeType":"Block","src":"13422:356:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7976,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7833,"src":"13524:24:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7977,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13552:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13524:29:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8000,"nodeType":"Block","src":"13659:101:45","statements":[{"expression":{"id":7998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":7990,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7619,"src":"13685:22:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":7993,"indexExpression":{"id":7991,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7807,"src":"13708:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13685:28:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":7994,"indexExpression":{"id":7992,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7897,"src":"13714:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13685:35:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":7995,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7813,"src":"13724:10:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7997,"indexExpression":{"id":7996,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7881,"src":"13735:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13724:13:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13685:52:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7999,"nodeType":"ExpressionStatement","src":"13685:52:45"}]},"id":8001,"nodeType":"IfStatement","src":"13520:240:45","trueBody":{"id":7989,"nodeType":"Block","src":"13555:98:45","statements":[{"expression":{"id":7987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":7979,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7612,"src":"13581:19:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":7982,"indexExpression":{"id":7980,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7807,"src":"13601:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13581:25:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":7983,"indexExpression":{"id":7981,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7897,"src":"13607:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13581:32:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":7984,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7813,"src":"13617:10:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7986,"indexExpression":{"id":7985,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7881,"src":"13628:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13617:13:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13581:49:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7988,"nodeType":"ExpressionStatement","src":"13581:49:45"}]}}]},"id":8003,"nodeType":"IfStatement","src":"12488:1290:45","trueBody":{"id":7975,"nodeType":"Block","src":"12509:907:45","statements":[{"assignments":[7940],"declarations":[{"constant":false,"id":7940,"mutability":"mutable","name":"totalFeeAmountRaw","nameLocation":"13074:17:45","nodeType":"VariableDeclaration","scope":7975,"src":"13066:25:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7939,"name":"uint256","nodeType":"ElementaryTypeName","src":"13066:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7947,"initialValue":{"arguments":[{"id":7945,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7847,"src":"13114:22:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":7941,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7813,"src":"13094:10:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7943,"indexExpression":{"id":7942,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7881,"src":"13105:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13094:13:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13108:5:45","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":5078,"src":"13094:19:45","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13094:43:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13066:71:45"},{"assignments":[7949],"declarations":[{"constant":false,"id":7949,"mutability":"mutable","name":"protocolPortion","nameLocation":"13167:15:45","nodeType":"VariableDeclaration","scope":7975,"src":"13159:23:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7948,"name":"uint256","nodeType":"ElementaryTypeName","src":"13159:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7954,"initialValue":{"arguments":[{"id":7952,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7817,"src":"13209:21:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7950,"name":"totalFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7940,"src":"13185:17:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13203:5:45","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":5042,"src":"13185:23:45","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13185:46:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13159:72:45"},{"expression":{"id":7961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":7955,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7612,"src":"13254:19:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":7958,"indexExpression":{"id":7956,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7807,"src":"13274:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13254:25:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":7959,"indexExpression":{"id":7957,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7897,"src":"13280:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13254:32:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":7960,"name":"protocolPortion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7949,"src":"13290:15:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13254:51:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7962,"nodeType":"ExpressionStatement","src":"13254:51:45"},{"expression":{"id":7973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":7963,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7619,"src":"13327:22:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":7966,"indexExpression":{"id":7964,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7807,"src":"13350:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13327:28:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":7967,"indexExpression":{"id":7965,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7897,"src":"13356:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13327:35:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":7968,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7813,"src":"13366:10:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7970,"indexExpression":{"id":7969,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7881,"src":"13377:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13366:13:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":7971,"name":"protocolPortion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7949,"src":"13382:15:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13366:31:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13327:70:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7974,"nodeType":"ExpressionStatement","src":"13327:70:45"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7884,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7881,"src":"11883:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7885,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7875,"src":"11887:9:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11883:13:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8007,"initializationExpression":{"assignments":[7881],"declarations":[{"constant":false,"id":7881,"mutability":"mutable","name":"i","nameLocation":"11876:1:45","nodeType":"VariableDeclaration","scope":8007,"src":"11868:9:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7880,"name":"uint256","nodeType":"ElementaryTypeName","src":"11868:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7883,"initialValue":{"hexValue":"30","id":7882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11880:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11868:13:45"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":7888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11898:3:45","subExpression":{"id":7887,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7881,"src":"11900:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7889,"nodeType":"ExpressionStatement","src":"11898:3:45"},"nodeType":"ForStatement","src":"11863:1939:45"}]},"id":8009,"implemented":true,"kind":"function","modifiers":[],"name":"_receiveAggregateFees","nameLocation":"10718:21:45","nodeType":"FunctionDefinition","parameters":{"id":7814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7807,"mutability":"mutable","name":"pool","nameLocation":"10748:4:45","nodeType":"VariableDeclaration","scope":8009,"src":"10740:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7806,"name":"address","nodeType":"ElementaryTypeName","src":"10740:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7810,"mutability":"mutable","name":"feeType","nameLocation":"10770:7:45","nodeType":"VariableDeclaration","scope":8009,"src":"10754:23:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":7809,"nodeType":"UserDefinedTypeName","pathNode":{"id":7808,"name":"ProtocolFeeType","nameLocations":["10754:15:45"],"nodeType":"IdentifierPath","referencedDeclaration":7564,"src":"10754:15:45"},"referencedDeclaration":7564,"src":"10754:15:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"},{"constant":false,"id":7813,"mutability":"mutable","name":"feeAmounts","nameLocation":"10796:10:45","nodeType":"VariableDeclaration","scope":8009,"src":"10779:27:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7811,"name":"uint256","nodeType":"ElementaryTypeName","src":"10779:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7812,"nodeType":"ArrayTypeName","src":"10779:9:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10739:68:45"},"returnParameters":{"id":7815,"nodeType":"ParameterList","parameters":[],"src":"10816:0:45"},"scope":9212,"src":"10709:3099:45","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"baseFunctions":[1773],"body":{"id":8017,"nodeType":"Block","src":"13935:56:45","statements":[{"expression":{"id":8015,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7581,"src":"13952:32:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8014,"id":8016,"nodeType":"Return","src":"13945:39:45"}]},"documentation":{"id":8010,"nodeType":"StructuredDocumentation","src":"13814:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"7869ee18","id":8018,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"13866:34:45","nodeType":"FunctionDefinition","parameters":{"id":8011,"nodeType":"ParameterList","parameters":[],"src":"13900:2:45"},"returnParameters":{"id":8014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8013,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8018,"src":"13926:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8012,"name":"uint256","nodeType":"ElementaryTypeName","src":"13926:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13925:9:45"},"scope":9212,"src":"13857:134:45","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1779],"body":{"id":8026,"nodeType":"Block","src":"14119:57:45","statements":[{"expression":{"id":8024,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7583,"src":"14136:33:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8023,"id":8025,"nodeType":"Return","src":"14129:40:45"}]},"documentation":{"id":8019,"nodeType":"StructuredDocumentation","src":"13997:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"55fb76af","id":8027,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"14049:35:45","nodeType":"FunctionDefinition","parameters":{"id":8020,"nodeType":"ParameterList","parameters":[],"src":"14084:2:45"},"returnParameters":{"id":8023,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8022,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8027,"src":"14110:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8021,"name":"uint256","nodeType":"ElementaryTypeName","src":"14110:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14109:9:45"},"scope":9212,"src":"14040:136:45","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1787],"body":{"id":8039,"nodeType":"Block","src":"14294:46:45","statements":[{"expression":{"baseExpression":{"id":8035,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7597,"src":"14311:16:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":8037,"indexExpression":{"id":8036,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8030,"src":"14328:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14311:22:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":8034,"id":8038,"nodeType":"Return","src":"14304:29:45"}]},"documentation":{"id":8028,"nodeType":"StructuredDocumentation","src":"14182:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"c673bdaf","id":8040,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"14234:16:45","nodeType":"FunctionDefinition","parameters":{"id":8031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8030,"mutability":"mutable","name":"pool","nameLocation":"14259:4:45","nodeType":"VariableDeclaration","scope":8040,"src":"14251:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8029,"name":"address","nodeType":"ElementaryTypeName","src":"14251:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14250:14:45"},"returnParameters":{"id":8034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8033,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8040,"src":"14288:4:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8032,"name":"bool","nodeType":"ElementaryTypeName","src":"14288:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14287:6:45"},"scope":9212,"src":"14225:115:45","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1797],"body":{"id":8063,"nodeType":"Block","src":"14477:143:45","statements":[{"assignments":[8052],"declarations":[{"constant":false,"id":8052,"mutability":"mutable","name":"config","nameLocation":"14508:6:45","nodeType":"VariableDeclaration","scope":8063,"src":"14487:27:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":8051,"nodeType":"UserDefinedTypeName","pathNode":{"id":8050,"name":"PoolFeeConfig","nameLocations":["14487:13:45"],"nodeType":"IdentifierPath","referencedDeclaration":7570,"src":"14487:13:45"},"referencedDeclaration":7570,"src":"14487:13:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":8056,"initialValue":{"baseExpression":{"id":8053,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7588,"src":"14517:31:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7570_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8055,"indexExpression":{"id":8054,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8043,"src":"14549:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14517:37:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14487:67:45"},{"expression":{"components":[{"expression":{"id":8057,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8052,"src":"14573:6:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8058,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14580:13:45","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7567,"src":"14573:20:45","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":8059,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8052,"src":"14595:6:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8060,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14602:10:45","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":7569,"src":"14595:17:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":8061,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14572:41:45","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint64_$_t_bool_$","typeString":"tuple(uint64,bool)"}},"functionReturnParameters":8049,"id":8062,"nodeType":"Return","src":"14565:48:45"}]},"documentation":{"id":8041,"nodeType":"StructuredDocumentation","src":"14346:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"5c15a0b4","id":8064,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"14398:26:45","nodeType":"FunctionDefinition","parameters":{"id":8044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8043,"mutability":"mutable","name":"pool","nameLocation":"14433:4:45","nodeType":"VariableDeclaration","scope":8064,"src":"14425:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8042,"name":"address","nodeType":"ElementaryTypeName","src":"14425:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14424:14:45"},"returnParameters":{"id":8049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8046,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8064,"src":"14462:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8045,"name":"uint256","nodeType":"ElementaryTypeName","src":"14462:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8048,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8064,"src":"14471:4:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8047,"name":"bool","nodeType":"ElementaryTypeName","src":"14471:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14461:15:45"},"scope":9212,"src":"14389:231:45","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1807],"body":{"id":8087,"nodeType":"Block","src":"14758:144:45","statements":[{"assignments":[8076],"declarations":[{"constant":false,"id":8076,"mutability":"mutable","name":"config","nameLocation":"14789:6:45","nodeType":"VariableDeclaration","scope":8087,"src":"14768:27:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":8075,"nodeType":"UserDefinedTypeName","pathNode":{"id":8074,"name":"PoolFeeConfig","nameLocations":["14768:13:45"],"nodeType":"IdentifierPath","referencedDeclaration":7570,"src":"14768:13:45"},"referencedDeclaration":7570,"src":"14768:13:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":8080,"initialValue":{"baseExpression":{"id":8077,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7593,"src":"14798:32:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7570_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8079,"indexExpression":{"id":8078,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8067,"src":"14831:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14798:38:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14768:68:45"},{"expression":{"components":[{"expression":{"id":8081,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8076,"src":"14855:6:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8082,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14862:13:45","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7567,"src":"14855:20:45","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":8083,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8076,"src":"14877:6:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8084,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14884:10:45","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":7569,"src":"14877:17:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":8085,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14854:41:45","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint64_$_t_bool_$","typeString":"tuple(uint64,bool)"}},"functionReturnParameters":8073,"id":8086,"nodeType":"Return","src":"14847:48:45"}]},"documentation":{"id":8065,"nodeType":"StructuredDocumentation","src":"14626:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"7a2b97dc","id":8088,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"14678:27:45","nodeType":"FunctionDefinition","parameters":{"id":8068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8067,"mutability":"mutable","name":"pool","nameLocation":"14714:4:45","nodeType":"VariableDeclaration","scope":8088,"src":"14706:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8066,"name":"address","nodeType":"ElementaryTypeName","src":"14706:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14705:14:45"},"returnParameters":{"id":8073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8070,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8088,"src":"14743:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8069,"name":"uint256","nodeType":"ElementaryTypeName","src":"14743:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8072,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8088,"src":"14752:4:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8071,"name":"bool","nodeType":"ElementaryTypeName","src":"14752:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14742:15:45"},"scope":9212,"src":"14669:233:45","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1815],"body":{"id":8100,"nodeType":"Block","src":"15038:60:45","statements":[{"expression":{"baseExpression":{"id":8096,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7601,"src":"15055:30:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8098,"indexExpression":{"id":8097,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8091,"src":"15086:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15055:36:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8095,"id":8099,"nodeType":"Return","src":"15048:43:45"}]},"documentation":{"id":8089,"nodeType":"StructuredDocumentation","src":"14908:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0b8e059b","id":8101,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorSwapFeePercentage","nameLocation":"14960:31:45","nodeType":"FunctionDefinition","parameters":{"id":8092,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8091,"mutability":"mutable","name":"pool","nameLocation":"15000:4:45","nodeType":"VariableDeclaration","scope":8101,"src":"14992:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8090,"name":"address","nodeType":"ElementaryTypeName","src":"14992:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14991:14:45"},"returnParameters":{"id":8095,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8094,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8101,"src":"15029:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8093,"name":"uint256","nodeType":"ElementaryTypeName","src":"15029:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15028:9:45"},"scope":9212,"src":"14951:147:45","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1823],"body":{"id":8113,"nodeType":"Block","src":"15235:61:45","statements":[{"expression":{"baseExpression":{"id":8109,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7605,"src":"15252:31:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8111,"indexExpression":{"id":8110,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8104,"src":"15284:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15252:37:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8108,"id":8112,"nodeType":"Return","src":"15245:44:45"}]},"documentation":{"id":8102,"nodeType":"StructuredDocumentation","src":"15104:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0252aab5","id":8114,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorYieldFeePercentage","nameLocation":"15156:32:45","nodeType":"FunctionDefinition","parameters":{"id":8105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8104,"mutability":"mutable","name":"pool","nameLocation":"15197:4:45","nodeType":"VariableDeclaration","scope":8114,"src":"15189:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8103,"name":"address","nodeType":"ElementaryTypeName","src":"15189:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15188:14:45"},"returnParameters":{"id":8108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8107,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8114,"src":"15226:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8106,"name":"uint256","nodeType":"ElementaryTypeName","src":"15226:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15225:9:45"},"scope":9212,"src":"15147:149:45","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1832],"body":{"id":8166,"nodeType":"Block","src":"15442:273:45","statements":[{"assignments":[8127,8129],"declarations":[{"constant":false,"id":8127,"mutability":"mutable","name":"poolTokens","nameLocation":"15469:10:45","nodeType":"VariableDeclaration","scope":8166,"src":"15453:26:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":8125,"nodeType":"UserDefinedTypeName","pathNode":{"id":8124,"name":"IERC20","nameLocations":["15453:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"15453:6:45"},"referencedDeclaration":10558,"src":"15453:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":8126,"nodeType":"ArrayTypeName","src":"15453:8:45","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":8129,"mutability":"mutable","name":"numTokens","nameLocation":"15489:9:45","nodeType":"VariableDeclaration","scope":8166,"src":"15481:17:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8128,"name":"uint256","nodeType":"ElementaryTypeName","src":"15481:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8133,"initialValue":{"arguments":[{"id":8131,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8117,"src":"15525:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8130,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8457,"src":"15502:22:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":8132,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15502:28:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15452:78:45"},{"expression":{"id":8140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8134,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8121,"src":"15541:10:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8138,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8129,"src":"15568:9:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8137,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15554:13:45","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":8135,"name":"uint256","nodeType":"ElementaryTypeName","src":"15558:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8136,"nodeType":"ArrayTypeName","src":"15558:9:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":8139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15554:24:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15541:37:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8141,"nodeType":"ExpressionStatement","src":"15541:37:45"},{"body":{"id":8164,"nodeType":"Block","src":"15628:81:45","statements":[{"expression":{"id":8162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8152,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8121,"src":"15642:10:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8154,"indexExpression":{"id":8153,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8143,"src":"15653:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15642:13:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":8155,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7612,"src":"15658:19:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":8157,"indexExpression":{"id":8156,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8117,"src":"15678:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15658:25:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":8161,"indexExpression":{"baseExpression":{"id":8158,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8127,"src":"15684:10:45","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":8160,"indexExpression":{"id":8159,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8143,"src":"15695:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15684:13:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15658:40:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15642:56:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8163,"nodeType":"ExpressionStatement","src":"15642:56:45"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8146,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8143,"src":"15608:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8147,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8129,"src":"15612:9:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15608:13:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8165,"initializationExpression":{"assignments":[8143],"declarations":[{"constant":false,"id":8143,"mutability":"mutable","name":"i","nameLocation":"15601:1:45","nodeType":"VariableDeclaration","scope":8165,"src":"15593:9:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8142,"name":"uint256","nodeType":"ElementaryTypeName","src":"15593:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8145,"initialValue":{"hexValue":"30","id":8144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15605:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15593:13:45"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15623:3:45","subExpression":{"id":8149,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8143,"src":"15625:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8151,"nodeType":"ExpressionStatement","src":"15623:3:45"},"nodeType":"ForStatement","src":"15588:121:45"}]},"documentation":{"id":8115,"nodeType":"StructuredDocumentation","src":"15302:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8df44c54","id":8167,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"15354:21:45","nodeType":"FunctionDefinition","parameters":{"id":8118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8117,"mutability":"mutable","name":"pool","nameLocation":"15384:4:45","nodeType":"VariableDeclaration","scope":8167,"src":"15376:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8116,"name":"address","nodeType":"ElementaryTypeName","src":"15376:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15375:14:45"},"returnParameters":{"id":8122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8121,"mutability":"mutable","name":"feeAmounts","nameLocation":"15430:10:45","nodeType":"VariableDeclaration","scope":8167,"src":"15413:27:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":8119,"name":"uint256","nodeType":"ElementaryTypeName","src":"15413:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8120,"nodeType":"ArrayTypeName","src":"15413:9:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15412:29:45"},"scope":9212,"src":"15345:370:45","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1841],"body":{"id":8219,"nodeType":"Block","src":"15864:276:45","statements":[{"assignments":[8180,8182],"declarations":[{"constant":false,"id":8180,"mutability":"mutable","name":"poolTokens","nameLocation":"15891:10:45","nodeType":"VariableDeclaration","scope":8219,"src":"15875:26:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":8178,"nodeType":"UserDefinedTypeName","pathNode":{"id":8177,"name":"IERC20","nameLocations":["15875:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"15875:6:45"},"referencedDeclaration":10558,"src":"15875:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":8179,"nodeType":"ArrayTypeName","src":"15875:8:45","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":8182,"mutability":"mutable","name":"numTokens","nameLocation":"15911:9:45","nodeType":"VariableDeclaration","scope":8219,"src":"15903:17:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8181,"name":"uint256","nodeType":"ElementaryTypeName","src":"15903:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8186,"initialValue":{"arguments":[{"id":8184,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8170,"src":"15947:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8183,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8457,"src":"15924:22:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":8185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15924:28:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15874:78:45"},{"expression":{"id":8193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8187,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8174,"src":"15963:10:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8191,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8182,"src":"15990:9:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8190,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15976:13:45","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":8188,"name":"uint256","nodeType":"ElementaryTypeName","src":"15980:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8189,"nodeType":"ArrayTypeName","src":"15980:9:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":8192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15976:24:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15963:37:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8194,"nodeType":"ExpressionStatement","src":"15963:37:45"},{"body":{"id":8217,"nodeType":"Block","src":"16050:84:45","statements":[{"expression":{"id":8215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8205,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8174,"src":"16064:10:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":8207,"indexExpression":{"id":8206,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8196,"src":"16075:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16064:13:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":8208,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7619,"src":"16080:22:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":8210,"indexExpression":{"id":8209,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8170,"src":"16103:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16080:28:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":8214,"indexExpression":{"baseExpression":{"id":8211,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8180,"src":"16109:10:45","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":8213,"indexExpression":{"id":8212,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8196,"src":"16120:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16109:13:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16080:43:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16064:59:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8216,"nodeType":"ExpressionStatement","src":"16064:59:45"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8199,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8196,"src":"16030:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8200,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8182,"src":"16034:9:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16030:13:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8218,"initializationExpression":{"assignments":[8196],"declarations":[{"constant":false,"id":8196,"mutability":"mutable","name":"i","nameLocation":"16023:1:45","nodeType":"VariableDeclaration","scope":8218,"src":"16015:9:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8195,"name":"uint256","nodeType":"ElementaryTypeName","src":"16015:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8198,"initialValue":{"hexValue":"30","id":8197,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16027:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16015:13:45"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"16045:3:45","subExpression":{"id":8202,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8196,"src":"16047:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8204,"nodeType":"ExpressionStatement","src":"16045:3:45"},"nodeType":"ForStatement","src":"16010:124:45"}]},"documentation":{"id":8168,"nodeType":"StructuredDocumentation","src":"15721:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"9e95f3fd","id":8220,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"15773:24:45","nodeType":"FunctionDefinition","parameters":{"id":8171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8170,"mutability":"mutable","name":"pool","nameLocation":"15806:4:45","nodeType":"VariableDeclaration","scope":8220,"src":"15798:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8169,"name":"address","nodeType":"ElementaryTypeName","src":"15798:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15797:14:45"},"returnParameters":{"id":8175,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8174,"mutability":"mutable","name":"feeAmounts","nameLocation":"15852:10:45","nodeType":"VariableDeclaration","scope":8220,"src":"15835:27:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":8172,"name":"uint256","nodeType":"ElementaryTypeName","src":"15835:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8173,"nodeType":"ArrayTypeName","src":"15835:9:45","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15834:29:45"},"scope":9212,"src":"15764:376:45","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1851],"body":{"id":8235,"nodeType":"Block","src":"16347:103:45","statements":[{"expression":{"arguments":[{"id":8231,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8223,"src":"16395:21:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8232,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8225,"src":"16418:24:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8230,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8397,"src":"16364:30:45","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16364:79:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8229,"id":8234,"nodeType":"Return","src":"16357:86:45"}]},"documentation":{"id":8221,"nodeType":"StructuredDocumentation","src":"16146:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0ddd60c6","id":8236,"implemented":true,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"16198:29:45","nodeType":"FunctionDefinition","parameters":{"id":8226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8223,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"16245:21:45","nodeType":"VariableDeclaration","scope":8236,"src":"16237:29:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8222,"name":"uint256","nodeType":"ElementaryTypeName","src":"16237:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8225,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"16284:24:45","nodeType":"VariableDeclaration","scope":8236,"src":"16276:32:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8224,"name":"uint256","nodeType":"ElementaryTypeName","src":"16276:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16227:87:45"},"returnParameters":{"id":8229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8228,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8236,"src":"16338:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8227,"name":"uint256","nodeType":"ElementaryTypeName","src":"16338:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16337:9:45"},"scope":9212,"src":"16189:261:45","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[1857],"body":{"id":8273,"nodeType":"Block","src":"16584:347:45","statements":[{"assignments":[8247],"declarations":[{"constant":false,"id":8247,"mutability":"mutable","name":"feeConfig","nameLocation":"16615:9:45","nodeType":"VariableDeclaration","scope":8273,"src":"16594:30:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":8246,"nodeType":"UserDefinedTypeName","pathNode":{"id":8245,"name":"PoolFeeConfig","nameLocations":["16594:13:45"],"nodeType":"IdentifierPath","referencedDeclaration":7570,"src":"16594:13:45"},"referencedDeclaration":7570,"src":"16594:13:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":8251,"initialValue":{"baseExpression":{"id":8248,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7588,"src":"16627:31:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7570_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8250,"indexExpression":{"id":8249,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8239,"src":"16659:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16627:37:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"16594:70:45"},{"assignments":[8253],"declarations":[{"constant":false,"id":8253,"mutability":"mutable","name":"globalProtocolSwapFee","nameLocation":"16682:21:45","nodeType":"VariableDeclaration","scope":8273,"src":"16674:29:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8252,"name":"uint256","nodeType":"ElementaryTypeName","src":"16674:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8255,"initialValue":{"id":8254,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7581,"src":"16706:32:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16674:64:45"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":8256,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8247,"src":"16753:9:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8257,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16763:10:45","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":7569,"src":"16753:20:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":8258,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16777:5:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"16753:29:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8260,"name":"globalProtocolSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8253,"src":"16786:21:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":8261,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8247,"src":"16811:9:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8262,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16821:13:45","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7567,"src":"16811:23:45","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"16786:48:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16753:81:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8272,"nodeType":"IfStatement","src":"16749:176:45","trueBody":{"id":8271,"nodeType":"Block","src":"16836:89:45","statements":[{"expression":{"arguments":[{"id":8266,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8239,"src":"16879:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8267,"name":"globalProtocolSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8253,"src":"16885:21:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":8268,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16908:5:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8265,"name":"_updatePoolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9152,"src":"16850:28:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16850:64:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8270,"nodeType":"ExpressionStatement","src":"16850:64:45"}]}}]},"documentation":{"id":8237,"nodeType":"StructuredDocumentation","src":"16456:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"71ecc8fb","id":8274,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8242,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8239,"src":"16578:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8243,"kind":"modifierInvocation","modifierName":{"id":8241,"name":"withLatestFees","nameLocations":["16563:14:45"],"nodeType":"IdentifierPath","referencedDeclaration":7697,"src":"16563:14:45"},"nodeType":"ModifierInvocation","src":"16563:20:45"}],"name":"updateProtocolSwapFeePercentage","nameLocation":"16508:31:45","nodeType":"FunctionDefinition","parameters":{"id":8240,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8239,"mutability":"mutable","name":"pool","nameLocation":"16548:4:45","nodeType":"VariableDeclaration","scope":8274,"src":"16540:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8238,"name":"address","nodeType":"ElementaryTypeName","src":"16540:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16539:14:45"},"returnParameters":{"id":8244,"nodeType":"ParameterList","parameters":[],"src":"16584:0:45"},"scope":9212,"src":"16499:432:45","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1863],"body":{"id":8311,"nodeType":"Block","src":"17066:353:45","statements":[{"assignments":[8285],"declarations":[{"constant":false,"id":8285,"mutability":"mutable","name":"feeConfig","nameLocation":"17097:9:45","nodeType":"VariableDeclaration","scope":8311,"src":"17076:30:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":8284,"nodeType":"UserDefinedTypeName","pathNode":{"id":8283,"name":"PoolFeeConfig","nameLocations":["17076:13:45"],"nodeType":"IdentifierPath","referencedDeclaration":7570,"src":"17076:13:45"},"referencedDeclaration":7570,"src":"17076:13:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":8289,"initialValue":{"baseExpression":{"id":8286,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7593,"src":"17109:32:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7570_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8288,"indexExpression":{"id":8287,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8277,"src":"17142:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17109:38:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"17076:71:45"},{"assignments":[8291],"declarations":[{"constant":false,"id":8291,"mutability":"mutable","name":"globalProtocolYieldFee","nameLocation":"17165:22:45","nodeType":"VariableDeclaration","scope":8311,"src":"17157:30:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8290,"name":"uint256","nodeType":"ElementaryTypeName","src":"17157:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8293,"initialValue":{"id":8292,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7583,"src":"17190:33:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17157:66:45"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":8294,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8285,"src":"17238:9:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8295,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17248:10:45","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":7569,"src":"17238:20:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":8296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17262:5:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"17238:29:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8298,"name":"globalProtocolYieldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8291,"src":"17271:22:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":8299,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8285,"src":"17297:9:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":8300,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17307:13:45","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7567,"src":"17297:23:45","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17271:49:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17238:82:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8310,"nodeType":"IfStatement","src":"17234:179:45","trueBody":{"id":8309,"nodeType":"Block","src":"17322:91:45","statements":[{"expression":{"arguments":[{"id":8304,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8277,"src":"17366:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8305,"name":"globalProtocolYieldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8291,"src":"17372:22:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":8306,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17396:5:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8303,"name":"_updatePoolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9190,"src":"17336:29:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17336:66:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8308,"nodeType":"ExpressionStatement","src":"17336:66:45"}]}}]},"documentation":{"id":8275,"nodeType":"StructuredDocumentation","src":"16937:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"71447ea8","id":8312,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8280,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8277,"src":"17060:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8281,"kind":"modifierInvocation","modifierName":{"id":8279,"name":"withLatestFees","nameLocations":["17045:14:45"],"nodeType":"IdentifierPath","referencedDeclaration":7697,"src":"17045:14:45"},"nodeType":"ModifierInvocation","src":"17045:20:45"}],"name":"updateProtocolYieldFeePercentage","nameLocation":"16989:32:45","nodeType":"FunctionDefinition","parameters":{"id":8278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8277,"mutability":"mutable","name":"pool","nameLocation":"17030:4:45","nodeType":"VariableDeclaration","scope":8312,"src":"17022:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8276,"name":"address","nodeType":"ElementaryTypeName","src":"17022:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17021:14:45"},"returnParameters":{"id":8282,"nodeType":"ParameterList","parameters":[],"src":"17066:0:45"},"scope":9212,"src":"16980:439:45","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8366,"nodeType":"Block","src":"17532:594:45","statements":[{"assignments":[8323],"declarations":[{"constant":false,"id":8323,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"17550:21:45","nodeType":"VariableDeclaration","scope":8366,"src":"17542:29:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8322,"name":"uint256","nodeType":"ElementaryTypeName","src":"17542:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8324,"nodeType":"VariableDeclarationStatement","src":"17542:29:45"},{"assignments":[8326],"declarations":[{"constant":false,"id":8326,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"17589:24:45","nodeType":"VariableDeclaration","scope":8366,"src":"17581:32:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8325,"name":"uint256","nodeType":"ElementaryTypeName","src":"17581:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8327,"nodeType":"VariableDeclarationStatement","src":"17581:32:45"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":8331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8328,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8317,"src":"17628:7:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":8329,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7564,"src":"17639:15:45","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7564_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8330,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17655:4:45","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7562,"src":"17639:20:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"17628:31:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8359,"nodeType":"Block","src":"17844:179:45","statements":[{"expression":{"id":8351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8346,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8323,"src":"17858:21:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":8347,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7593,"src":"17882:32:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7570_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8349,"indexExpression":{"id":8348,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8314,"src":"17915:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17882:38:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8350,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17921:13:45","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7567,"src":"17882:52:45","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17858:76:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8352,"nodeType":"ExpressionStatement","src":"17858:76:45"},{"expression":{"id":8357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8353,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8326,"src":"17948:24:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":8354,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7605,"src":"17975:31:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8356,"indexExpression":{"id":8355,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8314,"src":"18007:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17975:37:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17948:64:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8358,"nodeType":"ExpressionStatement","src":"17948:64:45"}]},"id":8360,"nodeType":"IfStatement","src":"17624:399:45","trueBody":{"id":8345,"nodeType":"Block","src":"17661:177:45","statements":[{"expression":{"id":8337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8332,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8323,"src":"17675:21:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":8333,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7588,"src":"17699:31:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7570_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8335,"indexExpression":{"id":8334,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8314,"src":"17731:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17699:37:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8336,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17737:13:45","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":7567,"src":"17699:51:45","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17675:75:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8338,"nodeType":"ExpressionStatement","src":"17675:75:45"},{"expression":{"id":8343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8339,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8326,"src":"17764:24:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":8340,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7601,"src":"17791:30:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8342,"indexExpression":{"id":8341,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8314,"src":"17822:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17791:36:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17764:63:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8344,"nodeType":"ExpressionStatement","src":"17764:63:45"}]}},{"expression":{"arguments":[{"id":8362,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8323,"src":"18071:21:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8363,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8326,"src":"18094:24:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8361,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8397,"src":"18040:30:45","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18040:79:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8321,"id":8365,"nodeType":"Return","src":"18033:86:45"}]},"id":8367,"implemented":true,"kind":"function","modifiers":[],"name":"_getAggregateFeePercentage","nameLocation":"17434:26:45","nodeType":"FunctionDefinition","parameters":{"id":8318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8314,"mutability":"mutable","name":"pool","nameLocation":"17469:4:45","nodeType":"VariableDeclaration","scope":8367,"src":"17461:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8313,"name":"address","nodeType":"ElementaryTypeName","src":"17461:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8317,"mutability":"mutable","name":"feeType","nameLocation":"17491:7:45","nodeType":"VariableDeclaration","scope":8367,"src":"17475:23:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":8316,"nodeType":"UserDefinedTypeName","pathNode":{"id":8315,"name":"ProtocolFeeType","nameLocations":["17475:15:45"],"nodeType":"IdentifierPath","referencedDeclaration":7564,"src":"17475:15:45"},"referencedDeclaration":7564,"src":"17475:15:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"}],"src":"17460:39:45"},"returnParameters":{"id":8321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8320,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8367,"src":"17523:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8319,"name":"uint256","nodeType":"ElementaryTypeName","src":"17523:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17522:9:45"},"scope":9212,"src":"17425:701:45","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":8396,"nodeType":"Block","src":"18314:882:45","statements":[{"expression":{"id":8385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8376,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8374,"src":"18324:22:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8377,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8369,"src":"18361:21:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":8382,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8371,"src":"18440:24:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8378,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8369,"src":"18397:21:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18419:10:45","memberName":"complement","nodeType":"MemberAccess","referencedDeclaration":5279,"src":"18397:32:45","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":8380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18397:34:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18432:7:45","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":5025,"src":"18397:42:45","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18397:68:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18361:104:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18324:141:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8386,"nodeType":"ExpressionStatement","src":"18324:141:45"},{"expression":{"id":8394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8387,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8374,"src":"19098:22:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8388,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8374,"src":"19124:22:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8389,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4284,"src":"19149:18:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19124:43:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8391,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19123:45:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8392,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4284,"src":"19171:18:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19123:66:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19098:91:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8395,"nodeType":"ExpressionStatement","src":"19098:91:45"}]},"id":8397,"implemented":true,"kind":"function","modifiers":[],"name":"_computeAggregateFeePercentage","nameLocation":"18141:30:45","nodeType":"FunctionDefinition","parameters":{"id":8372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8369,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"18189:21:45","nodeType":"VariableDeclaration","scope":8397,"src":"18181:29:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8368,"name":"uint256","nodeType":"ElementaryTypeName","src":"18181:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8371,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"18228:24:45","nodeType":"VariableDeclaration","scope":8397,"src":"18220:32:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8370,"name":"uint256","nodeType":"ElementaryTypeName","src":"18220:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18171:87:45"},"returnParameters":{"id":8375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8374,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"18290:22:45","nodeType":"VariableDeclaration","scope":8397,"src":"18282:30:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8373,"name":"uint256","nodeType":"ElementaryTypeName","src":"18282:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18281:32:45"},"scope":9212,"src":"18132:1064:45","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8432,"nodeType":"Block","src":"19266:276:45","statements":[{"assignments":[8403],"declarations":[{"constant":false,"id":8403,"mutability":"mutable","name":"poolCreator","nameLocation":"19284:11:45","nodeType":"VariableDeclaration","scope":8432,"src":"19276:19:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8402,"name":"address","nodeType":"ElementaryTypeName","src":"19276:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":8407,"initialValue":{"arguments":[{"id":8405,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8399,"src":"19314:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8404,"name":"_getPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8476,"src":"19298:15:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":8406,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19298:21:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"19276:43:45"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8408,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8403,"src":"19334:11:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":8411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19357:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8410,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19349:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8409,"name":"address","nodeType":"ElementaryTypeName","src":"19349:7:45","typeDescriptions":{}}},"id":8412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19349:10:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19334:25:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8419,"nodeType":"IfStatement","src":"19330:93:45","trueBody":{"id":8418,"nodeType":"Block","src":"19361:62:45","statements":[{"errorCall":{"arguments":[{"id":8415,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8399,"src":"19407:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8414,"name":"PoolCreatorNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1744,"src":"19382:24:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":8416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19382:30:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8417,"nodeType":"RevertStatement","src":"19375:37:45"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8420,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8403,"src":"19437:11:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":8421,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19452:3:45","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":8422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19456:6:45","memberName":"sender","nodeType":"MemberAccess","src":"19452:10:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19437:25:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8431,"nodeType":"IfStatement","src":"19433:103:45","trueBody":{"id":8430,"nodeType":"Block","src":"19464:72:45","statements":[{"errorCall":{"arguments":[{"expression":{"id":8425,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19508:3:45","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":8426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19512:6:45","memberName":"sender","nodeType":"MemberAccess","src":"19508:10:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8427,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8399,"src":"19520:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":8424,"name":"CallerIsNotPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1751,"src":"19485:22:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address) pure returns (error)"}},"id":8428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19485:40:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8429,"nodeType":"RevertStatement","src":"19478:47:45"}]}}]},"id":8433,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureCallerIsPoolCreator","nameLocation":"19211:26:45","nodeType":"FunctionDefinition","parameters":{"id":8400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8399,"mutability":"mutable","name":"pool","nameLocation":"19246:4:45","nodeType":"VariableDeclaration","scope":8433,"src":"19238:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8398,"name":"address","nodeType":"ElementaryTypeName","src":"19238:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19237:14:45"},"returnParameters":{"id":8401,"nodeType":"ParameterList","parameters":[],"src":"19266:0:45"},"scope":9212,"src":"19202:340:45","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":8456,"nodeType":"Block","src":"19660:87:45","statements":[{"expression":{"id":8449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8444,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8440,"src":"19670:6:45","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8447,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8435,"src":"19700:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8445,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"19679:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":8446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19686:13:45","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":3561,"src":"19679:20:45","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":8448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19679:26:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"src":"19670:35:45","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":8450,"nodeType":"ExpressionStatement","src":"19670:35:45"},{"expression":{"id":8454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8451,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8442,"src":"19715:9:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":8452,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8440,"src":"19727:6:45","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":8453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19734:6:45","memberName":"length","nodeType":"MemberAccess","src":"19727:13:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19715:25:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8455,"nodeType":"ExpressionStatement","src":"19715:25:45"}]},"id":8457,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolTokensAndCount","nameLocation":"19557:22:45","nodeType":"FunctionDefinition","parameters":{"id":8436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8435,"mutability":"mutable","name":"pool","nameLocation":"19588:4:45","nodeType":"VariableDeclaration","scope":8457,"src":"19580:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8434,"name":"address","nodeType":"ElementaryTypeName","src":"19580:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19579:14:45"},"returnParameters":{"id":8443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8440,"mutability":"mutable","name":"tokens","nameLocation":"19633:6:45","nodeType":"VariableDeclaration","scope":8457,"src":"19617:22:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":8438,"nodeType":"UserDefinedTypeName","pathNode":{"id":8437,"name":"IERC20","nameLocations":["19617:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"19617:6:45"},"referencedDeclaration":10558,"src":"19617:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":8439,"nodeType":"ArrayTypeName","src":"19617:8:45","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":8442,"mutability":"mutable","name":"numTokens","nameLocation":"19649:9:45","nodeType":"VariableDeclaration","scope":8457,"src":"19641:17:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8441,"name":"uint256","nodeType":"ElementaryTypeName","src":"19641:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19616:43:45"},"scope":9212,"src":"19548:199:45","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":8475,"nodeType":"Block","src":"19884:130:45","statements":[{"assignments":[8466],"declarations":[{"constant":false,"id":8466,"mutability":"mutable","name":"roleAccounts","nameLocation":"19918:12:45","nodeType":"VariableDeclaration","scope":8475,"src":"19894:36:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4093_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":8465,"nodeType":"UserDefinedTypeName","pathNode":{"id":8464,"name":"PoolRoleAccounts","nameLocations":["19894:16:45"],"nodeType":"IdentifierPath","referencedDeclaration":4093,"src":"19894:16:45"},"referencedDeclaration":4093,"src":"19894:16:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4093_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"id":8471,"initialValue":{"arguments":[{"id":8469,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8459,"src":"19960:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8467,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"19933:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":8468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19940:19:45","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":3758,"src":"19933:26:45","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$4093_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":8470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19933:32:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4093_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"nodeType":"VariableDeclarationStatement","src":"19894:71:45"},{"expression":{"expression":{"id":8472,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8466,"src":"19983:12:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4093_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":8473,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19996:11:45","memberName":"poolCreator","nodeType":"MemberAccess","referencedDeclaration":4092,"src":"19983:24:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":8463,"id":8474,"nodeType":"Return","src":"19976:31:45"}]},"id":8476,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolCreator","nameLocation":"19822:15:45","nodeType":"FunctionDefinition","parameters":{"id":8460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8459,"mutability":"mutable","name":"pool","nameLocation":"19846:4:45","nodeType":"VariableDeclaration","scope":8476,"src":"19838:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8458,"name":"address","nodeType":"ElementaryTypeName","src":"19838:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19837:14:45"},"returnParameters":{"id":8463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8462,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8476,"src":"19875:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8461,"name":"address","nodeType":"ElementaryTypeName","src":"19875:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19874:9:45"},"scope":9212,"src":"19813:201:45","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":8594,"nodeType":"Block","src":"21225:2076:45","statements":[{"assignments":[8484],"declarations":[{"constant":false,"id":8484,"mutability":"mutable","name":"oldFeeController","nameLocation":"21258:16:45","nodeType":"VariableDeclaration","scope":8594,"src":"21235:39:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":8483,"nodeType":"UserDefinedTypeName","pathNode":{"id":8482,"name":"IProtocolFeeController","nameLocations":["21235:22:45"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"21235:22:45"},"referencedDeclaration":1955,"src":"21235:22:45","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"id":8488,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8485,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"21277:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":8486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21284:24:45","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":3776,"src":"21277:31:45","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":8487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21277:33:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"nodeType":"VariableDeclarationStatement","src":"21235:75:45"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":8491,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8484,"src":"21333:16:45","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}],"id":8490,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21325:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8489,"name":"address","nodeType":"ElementaryTypeName","src":"21325:7:45","typeDescriptions":{}}},"id":8492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21325:25:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":8495,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"21362:4:45","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$9212","typeString":"contract ProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeController_$9212","typeString":"contract ProtocolFeeController"}],"id":8494,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21354:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8493,"name":"address","nodeType":"ElementaryTypeName","src":"21354:7:45","typeDescriptions":{}}},"id":8496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21354:13:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21325:42:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8502,"nodeType":"IfStatement","src":"21321:104:45","trueBody":{"id":8501,"nodeType":"Block","src":"21369:56:45","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":8498,"name":"InvalidMigrationSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7627,"src":"21390:22:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":8499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21390:24:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8500,"nodeType":"RevertStatement","src":"21383:31:45"}]}},{"condition":{"baseExpression":{"id":8503,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7597,"src":"21439:16:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":8505,"indexExpression":{"id":8504,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8479,"src":"21456:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21439:22:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8511,"nodeType":"IfStatement","src":"21435:87:45","trueBody":{"id":8510,"nodeType":"Block","src":"21463:59:45","statements":[{"errorCall":{"arguments":[{"id":8507,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8479,"src":"21506:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8506,"name":"PoolAlreadyRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7624,"src":"21484:21:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":8508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21484:27:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8509,"nodeType":"RevertStatement","src":"21477:34:45"}]}},{"expression":{"id":8516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8512,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7597,"src":"21532:16:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":8514,"indexExpression":{"id":8513,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8479,"src":"21549:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21532:22:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":8515,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"21557:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"21532:29:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8517,"nodeType":"ExpressionStatement","src":"21532:29:45"},{"assignments":[8519,8521],"declarations":[{"constant":false,"id":8519,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"21581:25:45","nodeType":"VariableDeclaration","scope":8594,"src":"21573:33:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8518,"name":"uint256","nodeType":"ElementaryTypeName","src":"21573:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8521,"mutability":"mutable","name":"swapFeeIsOverride","nameLocation":"21613:17:45","nodeType":"VariableDeclaration","scope":8594,"src":"21608:22:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8520,"name":"bool","nodeType":"ElementaryTypeName","src":"21608:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":8526,"initialValue":{"arguments":[{"id":8524,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8479,"src":"21678:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8522,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8484,"src":"21634:16:45","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":8523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21651:26:45","memberName":"getPoolProtocolSwapFeeInfo","nodeType":"MemberAccess","referencedDeclaration":1797,"src":"21634:43:45","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (address) view external returns (uint256,bool)"}},"id":8525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21634:49:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"21572:111:45"},{"expression":{"id":8536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8527,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7588,"src":"21693:31:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7570_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8529,"indexExpression":{"id":8528,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8479,"src":"21725:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21693:37:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8531,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8519,"src":"21776:25:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21802:8:45","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15008,"src":"21776:34:45","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":8533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21776:36:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":8534,"name":"swapFeeIsOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8521,"src":"21838:17:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8530,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7570,"src":"21733:13:45","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$7570_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":8535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["21761:13:45","21826:10:45"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"21733:133:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"21693:173:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8537,"nodeType":"ExpressionStatement","src":"21693:173:45"},{"assignments":[8539,8541],"declarations":[{"constant":false,"id":8539,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"21886:26:45","nodeType":"VariableDeclaration","scope":8594,"src":"21878:34:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8538,"name":"uint256","nodeType":"ElementaryTypeName","src":"21878:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8541,"mutability":"mutable","name":"yieldFeeIsOverride","nameLocation":"21919:18:45","nodeType":"VariableDeclaration","scope":8594,"src":"21914:23:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8540,"name":"bool","nodeType":"ElementaryTypeName","src":"21914:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":8546,"initialValue":{"arguments":[{"id":8544,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8479,"src":"21999:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8542,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8484,"src":"21941:16:45","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":8543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21958:27:45","memberName":"getPoolProtocolYieldFeeInfo","nodeType":"MemberAccess","referencedDeclaration":1807,"src":"21941:44:45","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (address) view external returns (uint256,bool)"}},"id":8545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21941:72:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"21877:136:45"},{"expression":{"id":8556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8547,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7593,"src":"22023:32:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7570_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8549,"indexExpression":{"id":8548,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8479,"src":"22056:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22023:38:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8551,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8539,"src":"22107:26:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22134:8:45","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15008,"src":"22107:35:45","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":8553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22107:37:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":8554,"name":"yieldFeeIsOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8541,"src":"22170:18:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8550,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7570,"src":"22064:13:45","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$7570_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":8555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["22092:13:45","22158:10:45"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"22064:135:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"22023:176:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8557,"nodeType":"ExpressionStatement","src":"22023:176:45"},{"clauses":[{"block":{"id":8571,"nodeType":"Block","src":"22833:92:45","statements":[{"expression":{"id":8569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8565,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7601,"src":"22847:30:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8567,"indexExpression":{"id":8566,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8479,"src":"22878:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22847:36:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8568,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8563,"src":"22886:28:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22847:67:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8570,"nodeType":"ExpressionStatement","src":"22847:67:45"}]},"errorName":"","id":8572,"nodeType":"TryCatchClause","parameters":{"id":8564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8563,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"22803:28:45","nodeType":"VariableDeclaration","scope":8572,"src":"22795:36:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8562,"name":"uint256","nodeType":"ElementaryTypeName","src":"22795:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22794:38:45"},"src":"22786:139:45"},{"block":{"id":8573,"nodeType":"Block","src":"22932:72:45","statements":[]},"errorName":"","id":8574,"nodeType":"TryCatchClause","src":"22926:78:45"}],"externalCall":{"arguments":[{"id":8560,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8479,"src":"22780:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8558,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8484,"src":"22731:16:45","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":8559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22748:31:45","memberName":"getPoolCreatorSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1815,"src":"22731:48:45","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":8561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22731:54:45","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8575,"nodeType":"TryStatement","src":"22727:277:45"},{"clauses":[{"block":{"id":8589,"nodeType":"Block","src":"23122:94:45","statements":[{"expression":{"id":8587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8583,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7605,"src":"23136:31:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8585,"indexExpression":{"id":8584,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8479,"src":"23168:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23136:37:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8586,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8581,"src":"23176:29:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23136:69:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8588,"nodeType":"ExpressionStatement","src":"23136:69:45"}]},"errorName":"","id":8590,"nodeType":"TryCatchClause","parameters":{"id":8582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8581,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"23091:29:45","nodeType":"VariableDeclaration","scope":8590,"src":"23083:37:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8580,"name":"uint256","nodeType":"ElementaryTypeName","src":"23083:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23082:39:45"},"src":"23074:142:45"},{"block":{"id":8591,"nodeType":"Block","src":"23223:72:45","statements":[]},"errorName":"","id":8592,"nodeType":"TryCatchClause","src":"23217:78:45"}],"externalCall":{"arguments":[{"id":8578,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8479,"src":"23068:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8576,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8484,"src":"23018:16:45","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":8577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23035:32:45","memberName":"getPoolCreatorYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1823,"src":"23018:49:45","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":8579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23018:55:45","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8593,"nodeType":"TryStatement","src":"23014:281:45"}]},"documentation":{"id":8477,"nodeType":"StructuredDocumentation","src":"20231:945:45","text":" @notice Not exposed in the interface, this enables migration of hidden pool state.\n @dev Permission should NEVER be granted to this function outside of a migration contract. It is necessary to\n permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool\n creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool\n deployment.\n Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe,\n guaranteeing that it is impossible to use this function to change anything after registration. A pool can only\n be registered / configured once - either copied to a new controller in the migration context, or added normally\n through the Vault calling `registerPool`.\n @param pool The address of the pool to be migrated"},"functionSelector":"0874327f","id":8595,"implemented":true,"kind":"function","modifiers":[],"name":"migratePool","nameLocation":"21190:11:45","nodeType":"FunctionDefinition","parameters":{"id":8480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8479,"mutability":"mutable","name":"pool","nameLocation":"21210:4:45","nodeType":"VariableDeclaration","scope":8595,"src":"21202:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8478,"name":"address","nodeType":"ElementaryTypeName","src":"21202:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21201:14:45"},"returnParameters":{"id":8481,"nodeType":"ParameterList","parameters":[],"src":"21225:0:45"},"scope":9212,"src":"21181:2120:45","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1877],"body":{"id":8671,"nodeType":"Block","src":"23780:1540:45","statements":[{"expression":{"id":8615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8611,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7597,"src":"23790:16:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":8613,"indexExpression":{"id":8612,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8598,"src":"23807:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23790:22:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":8614,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"23815:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"23790:29:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8616,"nodeType":"ExpressionStatement","src":"23790:29:45"},{"expression":{"id":8622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8617,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8607,"src":"23919:26:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":8618,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8602,"src":"23948:17:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":8620,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7581,"src":"23972:32:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"23948:56:45","trueExpression":{"hexValue":"30","id":8619,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23968:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23919:85:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8623,"nodeType":"ExpressionStatement","src":"23919:85:45"},{"expression":{"id":8629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8624,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8609,"src":"24014:27:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":8625,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8602,"src":"24044:17:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":8627,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7583,"src":"24068:33:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"24044:57:45","trueExpression":{"hexValue":"30","id":8626,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24064:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24014:87:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8630,"nodeType":"ExpressionStatement","src":"24014:87:45"},{"expression":{"id":8640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8631,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7588,"src":"24549:31:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7570_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8633,"indexExpression":{"id":8632,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8598,"src":"24581:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24549:37:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8635,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8607,"src":"24632:26:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24659:8:45","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15008,"src":"24632:35:45","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":8637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24632:37:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":8638,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8602,"src":"24695:17:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8634,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7570,"src":"24589:13:45","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$7570_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":8639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["24617:13:45","24683:10:45"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"24589:134:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"24549:174:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8641,"nodeType":"ExpressionStatement","src":"24549:174:45"},{"expression":{"id":8651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8642,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7593,"src":"24733:32:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7570_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":8644,"indexExpression":{"id":8643,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8598,"src":"24766:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24733:38:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8646,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8609,"src":"24817:27:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24845:8:45","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15008,"src":"24817:36:45","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":8648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24817:38:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":8649,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8602,"src":"24881:17:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8645,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7570,"src":"24774:13:45","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$7570_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":8650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["24802:13:45","24869:10:45"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"24774:135:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"24733:176:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":8652,"nodeType":"ExpressionStatement","src":"24733:176:45"},{"eventCall":{"arguments":[{"id":8654,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8598,"src":"25069:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8655,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8607,"src":"25075:26:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8656,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8602,"src":"25103:17:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8653,"name":"InitialPoolAggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1715,"src":"25031:37:45","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25031:90:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8658,"nodeType":"EmitStatement","src":"25026:95:45"},{"eventCall":{"arguments":[{"id":8660,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8598,"src":"25175:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8661,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8609,"src":"25181:27:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8662,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8602,"src":"25210:17:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8659,"name":"InitialPoolAggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1724,"src":"25136:38:45","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25136:92:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8664,"nodeType":"EmitStatement","src":"25131:97:45"},{"eventCall":{"arguments":[{"id":8666,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8598,"src":"25276:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8667,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8600,"src":"25282:11:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8668,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8602,"src":"25295:17:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8665,"name":"PoolRegisteredWithFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1733,"src":"25244:31:45","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,bool)"}},"id":8669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25244:69:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8670,"nodeType":"EmitStatement","src":"25239:74:45"}]},"documentation":{"id":8596,"nodeType":"StructuredDocumentation","src":"23525:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"77ff76e7","id":8672,"implemented":true,"kind":"function","modifiers":[{"id":8605,"kind":"modifierInvocation","modifierName":{"id":8604,"name":"onlyVault","nameLocations":["23688:9:45"],"nodeType":"IdentifierPath","referencedDeclaration":9299,"src":"23688:9:45"},"nodeType":"ModifierInvocation","src":"23688:9:45"}],"name":"registerPool","nameLocation":"23577:12:45","nodeType":"FunctionDefinition","parameters":{"id":8603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8598,"mutability":"mutable","name":"pool","nameLocation":"23607:4:45","nodeType":"VariableDeclaration","scope":8672,"src":"23599:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8597,"name":"address","nodeType":"ElementaryTypeName","src":"23599:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8600,"mutability":"mutable","name":"poolCreator","nameLocation":"23629:11:45","nodeType":"VariableDeclaration","scope":8672,"src":"23621:19:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8599,"name":"address","nodeType":"ElementaryTypeName","src":"23621:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8602,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"23655:17:45","nodeType":"VariableDeclaration","scope":8672,"src":"23650:22:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8601,"name":"bool","nodeType":"ElementaryTypeName","src":"23650:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"23589:89:45"},"returnParameters":{"id":8610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8607,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"23715:26:45","nodeType":"VariableDeclaration","scope":8672,"src":"23707:34:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8606,"name":"uint256","nodeType":"ElementaryTypeName","src":"23707:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8609,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"23751:27:45","nodeType":"VariableDeclaration","scope":8672,"src":"23743:35:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8608,"name":"uint256","nodeType":"ElementaryTypeName","src":"23743:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23706:73:45"},"scope":9212,"src":"23568:1752:45","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1883],"body":{"id":8684,"nodeType":"Block","src":"25473:82:45","statements":[{"expression":{"arguments":[{"id":8681,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8675,"src":"25519:28:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8680,"name":"_setGlobalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8702,"src":"25483:35:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":8682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25483:65:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8683,"nodeType":"ExpressionStatement","src":"25483:65:45"}]},"documentation":{"id":8673,"nodeType":"StructuredDocumentation","src":"25326:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8a3c5c69","id":8685,"implemented":true,"kind":"function","modifiers":[{"id":8678,"kind":"modifierInvocation","modifierName":{"id":8677,"name":"authenticate","nameLocations":["25460:12:45"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"25460:12:45"},"nodeType":"ModifierInvocation","src":"25460:12:45"}],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"25378:34:45","nodeType":"FunctionDefinition","parameters":{"id":8676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8675,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"25421:28:45","nodeType":"VariableDeclaration","scope":8685,"src":"25413:36:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8674,"name":"uint256","nodeType":"ElementaryTypeName","src":"25413:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25412:38:45"},"returnParameters":{"id":8679,"nodeType":"ParameterList","parameters":[],"src":"25473:0:45"},"scope":9212,"src":"25369:186:45","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8701,"nodeType":"Block","src":"25714:164:45","statements":[{"expression":{"id":8695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8693,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7581,"src":"25724:32:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8694,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8687,"src":"25759:28:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25724:63:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8696,"nodeType":"ExpressionStatement","src":"25724:63:45"},{"eventCall":{"arguments":[{"id":8698,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8687,"src":"25842:28:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8697,"name":"GlobalProtocolSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1629,"src":"25803:38:45","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":8699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25803:68:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8700,"nodeType":"EmitStatement","src":"25798:73:45"}]},"id":8702,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8690,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8687,"src":"25684:28:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8691,"kind":"modifierInvocation","modifierName":{"id":8689,"name":"withValidSwapFee","nameLocations":["25667:16:45"],"nodeType":"IdentifierPath","referencedDeclaration":7655,"src":"25667:16:45"},"nodeType":"ModifierInvocation","src":"25667:46:45"}],"name":"_setGlobalProtocolSwapFeePercentage","nameLocation":"25570:35:45","nodeType":"FunctionDefinition","parameters":{"id":8688,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8687,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"25623:28:45","nodeType":"VariableDeclaration","scope":8702,"src":"25615:36:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8686,"name":"uint256","nodeType":"ElementaryTypeName","src":"25615:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25605:52:45"},"returnParameters":{"id":8692,"nodeType":"ParameterList","parameters":[],"src":"25714:0:45"},"scope":9212,"src":"25561:317:45","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1889],"body":{"id":8714,"nodeType":"Block","src":"26033:84:45","statements":[{"expression":{"arguments":[{"id":8711,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8705,"src":"26080:29:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8710,"name":"_setGlobalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8732,"src":"26043:36:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":8712,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26043:67:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8713,"nodeType":"ExpressionStatement","src":"26043:67:45"}]},"documentation":{"id":8703,"nodeType":"StructuredDocumentation","src":"25884:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"a93df2a4","id":8715,"implemented":true,"kind":"function","modifiers":[{"id":8708,"kind":"modifierInvocation","modifierName":{"id":8707,"name":"authenticate","nameLocations":["26020:12:45"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"26020:12:45"},"nodeType":"ModifierInvocation","src":"26020:12:45"}],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"25936:35:45","nodeType":"FunctionDefinition","parameters":{"id":8706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8705,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"25980:29:45","nodeType":"VariableDeclaration","scope":8715,"src":"25972:37:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8704,"name":"uint256","nodeType":"ElementaryTypeName","src":"25972:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25971:39:45"},"returnParameters":{"id":8709,"nodeType":"ParameterList","parameters":[],"src":"26033:0:45"},"scope":9212,"src":"25927:190:45","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8731,"nodeType":"Block","src":"26280:168:45","statements":[{"expression":{"id":8725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8723,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7583,"src":"26290:33:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8724,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8717,"src":"26326:29:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26290:65:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8726,"nodeType":"ExpressionStatement","src":"26290:65:45"},{"eventCall":{"arguments":[{"id":8728,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8717,"src":"26411:29:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8727,"name":"GlobalProtocolYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1634,"src":"26371:39:45","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":8729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26371:70:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8730,"nodeType":"EmitStatement","src":"26366:75:45"}]},"id":8732,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8720,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8717,"src":"26249:29:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8721,"kind":"modifierInvocation","modifierName":{"id":8719,"name":"withValidYieldFee","nameLocations":["26231:17:45"],"nodeType":"IdentifierPath","referencedDeclaration":7673,"src":"26231:17:45"},"nodeType":"ModifierInvocation","src":"26231:48:45"}],"name":"_setGlobalProtocolYieldFeePercentage","nameLocation":"26132:36:45","nodeType":"FunctionDefinition","parameters":{"id":8718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8717,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"26186:29:45","nodeType":"VariableDeclaration","scope":8732,"src":"26178:37:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8716,"name":"uint256","nodeType":"ElementaryTypeName","src":"26178:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26168:53:45"},"returnParameters":{"id":8722,"nodeType":"ParameterList","parameters":[],"src":"26280:0:45"},"scope":9212,"src":"26123:325:45","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1897],"body":{"id":8754,"nodeType":"Block","src":"26699:87:45","statements":[{"expression":{"arguments":[{"id":8749,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8735,"src":"26738:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8750,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8737,"src":"26744:28:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":8751,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26774:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8748,"name":"_updatePoolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9152,"src":"26709:28:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26709:70:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8753,"nodeType":"ExpressionStatement","src":"26709:70:45"}]},"documentation":{"id":8733,"nodeType":"StructuredDocumentation","src":"26454:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"fd267f39","id":8755,"implemented":true,"kind":"function","modifiers":[{"id":8740,"kind":"modifierInvocation","modifierName":{"id":8739,"name":"authenticate","nameLocations":["26618:12:45"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"26618:12:45"},"nodeType":"ModifierInvocation","src":"26618:12:45"},{"arguments":[{"id":8742,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8737,"src":"26648:28:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8743,"kind":"modifierInvocation","modifierName":{"id":8741,"name":"withValidSwapFee","nameLocations":["26631:16:45"],"nodeType":"IdentifierPath","referencedDeclaration":7655,"src":"26631:16:45"},"nodeType":"ModifierInvocation","src":"26631:46:45"},{"arguments":[{"id":8745,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8735,"src":"26693:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8746,"kind":"modifierInvocation","modifierName":{"id":8744,"name":"withLatestFees","nameLocations":["26678:14:45"],"nodeType":"IdentifierPath","referencedDeclaration":7697,"src":"26678:14:45"},"nodeType":"ModifierInvocation","src":"26678:20:45"}],"name":"setProtocolSwapFeePercentage","nameLocation":"26506:28:45","nodeType":"FunctionDefinition","parameters":{"id":8738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8735,"mutability":"mutable","name":"pool","nameLocation":"26552:4:45","nodeType":"VariableDeclaration","scope":8755,"src":"26544:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8734,"name":"address","nodeType":"ElementaryTypeName","src":"26544:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8737,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"26574:28:45","nodeType":"VariableDeclaration","scope":8755,"src":"26566:36:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8736,"name":"uint256","nodeType":"ElementaryTypeName","src":"26566:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26534:74:45"},"returnParameters":{"id":8747,"nodeType":"ParameterList","parameters":[],"src":"26699:0:45"},"scope":9212,"src":"26497:289:45","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1905],"body":{"id":8777,"nodeType":"Block","src":"27041:89:45","statements":[{"expression":{"arguments":[{"id":8772,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8758,"src":"27081:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8773,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8760,"src":"27087:29:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":8774,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"27118:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":8771,"name":"_updatePoolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9190,"src":"27051:29:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":8775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27051:72:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8776,"nodeType":"ExpressionStatement","src":"27051:72:45"}]},"documentation":{"id":8756,"nodeType":"StructuredDocumentation","src":"26792:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"abaa3356","id":8778,"implemented":true,"kind":"function","modifiers":[{"id":8763,"kind":"modifierInvocation","modifierName":{"id":8762,"name":"authenticate","nameLocations":["26958:12:45"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"26958:12:45"},"nodeType":"ModifierInvocation","src":"26958:12:45"},{"arguments":[{"id":8765,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8760,"src":"26989:29:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8766,"kind":"modifierInvocation","modifierName":{"id":8764,"name":"withValidYieldFee","nameLocations":["26971:17:45"],"nodeType":"IdentifierPath","referencedDeclaration":7673,"src":"26971:17:45"},"nodeType":"ModifierInvocation","src":"26971:48:45"},{"arguments":[{"id":8768,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8758,"src":"27035:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8769,"kind":"modifierInvocation","modifierName":{"id":8767,"name":"withLatestFees","nameLocations":["27020:14:45"],"nodeType":"IdentifierPath","referencedDeclaration":7697,"src":"27020:14:45"},"nodeType":"ModifierInvocation","src":"27020:20:45"}],"name":"setProtocolYieldFeePercentage","nameLocation":"26844:29:45","nodeType":"FunctionDefinition","parameters":{"id":8761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8758,"mutability":"mutable","name":"pool","nameLocation":"26891:4:45","nodeType":"VariableDeclaration","scope":8778,"src":"26883:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8757,"name":"address","nodeType":"ElementaryTypeName","src":"26883:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8760,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"26913:29:45","nodeType":"VariableDeclaration","scope":8778,"src":"26905:37:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8759,"name":"uint256","nodeType":"ElementaryTypeName","src":"26905:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26873:75:45"},"returnParameters":{"id":8770,"nodeType":"ParameterList","parameters":[],"src":"27041:0:45"},"scope":9212,"src":"26835:295:45","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1913],"body":{"id":8802,"nodeType":"Block","src":"27400:103:45","statements":[{"expression":{"arguments":[{"id":8796,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8781,"src":"27439:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8797,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8783,"src":"27445:28:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8798,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7564,"src":"27475:15:45","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7564_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8799,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27491:4:45","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7562,"src":"27475:20:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":8795,"name":"_setPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8890,"src":"27410:28:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_enum$_ProtocolFeeType_$7564_$returns$__$","typeString":"function (address,uint256,enum ProtocolFeeController.ProtocolFeeType)"}},"id":8800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27410:86:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8801,"nodeType":"ExpressionStatement","src":"27410:86:45"}]},"documentation":{"id":8779,"nodeType":"StructuredDocumentation","src":"27136:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"1377c16c","id":8803,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8786,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8781,"src":"27319:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8787,"kind":"modifierInvocation","modifierName":{"id":8785,"name":"onlyPoolCreator","nameLocations":["27303:15:45"],"nodeType":"IdentifierPath","referencedDeclaration":7637,"src":"27303:15:45"},"nodeType":"ModifierInvocation","src":"27303:21:45"},{"arguments":[{"id":8789,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8783,"src":"27349:28:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8790,"kind":"modifierInvocation","modifierName":{"id":8788,"name":"withValidPoolCreatorFee","nameLocations":["27325:23:45"],"nodeType":"IdentifierPath","referencedDeclaration":7687,"src":"27325:23:45"},"nodeType":"ModifierInvocation","src":"27325:53:45"},{"arguments":[{"id":8792,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8781,"src":"27394:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8793,"kind":"modifierInvocation","modifierName":{"id":8791,"name":"withLatestFees","nameLocations":["27379:14:45"],"nodeType":"IdentifierPath","referencedDeclaration":7697,"src":"27379:14:45"},"nodeType":"ModifierInvocation","src":"27379:20:45"}],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"27188:31:45","nodeType":"FunctionDefinition","parameters":{"id":8784,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8781,"mutability":"mutable","name":"pool","nameLocation":"27237:4:45","nodeType":"VariableDeclaration","scope":8803,"src":"27229:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8780,"name":"address","nodeType":"ElementaryTypeName","src":"27229:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8783,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"27259:28:45","nodeType":"VariableDeclaration","scope":8803,"src":"27251:36:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8782,"name":"uint256","nodeType":"ElementaryTypeName","src":"27251:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27219:74:45"},"returnParameters":{"id":8794,"nodeType":"ParameterList","parameters":[],"src":"27400:0:45"},"scope":9212,"src":"27179:324:45","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1921],"body":{"id":8827,"nodeType":"Block","src":"27776:105:45","statements":[{"expression":{"arguments":[{"id":8821,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8806,"src":"27815:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8822,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8808,"src":"27821:29:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8823,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7564,"src":"27852:15:45","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7564_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8824,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27868:5:45","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":7563,"src":"27852:21:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":8820,"name":"_setPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8890,"src":"27786:28:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_enum$_ProtocolFeeType_$7564_$returns$__$","typeString":"function (address,uint256,enum ProtocolFeeController.ProtocolFeeType)"}},"id":8825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27786:88:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8826,"nodeType":"ExpressionStatement","src":"27786:88:45"}]},"documentation":{"id":8804,"nodeType":"StructuredDocumentation","src":"27509:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"3af52712","id":8828,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":8811,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8806,"src":"27694:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8812,"kind":"modifierInvocation","modifierName":{"id":8810,"name":"onlyPoolCreator","nameLocations":["27678:15:45"],"nodeType":"IdentifierPath","referencedDeclaration":7637,"src":"27678:15:45"},"nodeType":"ModifierInvocation","src":"27678:21:45"},{"arguments":[{"id":8814,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8808,"src":"27724:29:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8815,"kind":"modifierInvocation","modifierName":{"id":8813,"name":"withValidPoolCreatorFee","nameLocations":["27700:23:45"],"nodeType":"IdentifierPath","referencedDeclaration":7687,"src":"27700:23:45"},"nodeType":"ModifierInvocation","src":"27700:54:45"},{"arguments":[{"id":8817,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8806,"src":"27770:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":8818,"kind":"modifierInvocation","modifierName":{"id":8816,"name":"withLatestFees","nameLocations":["27755:14:45"],"nodeType":"IdentifierPath","referencedDeclaration":7697,"src":"27755:14:45"},"nodeType":"ModifierInvocation","src":"27755:20:45"}],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"27561:32:45","nodeType":"FunctionDefinition","parameters":{"id":8809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8806,"mutability":"mutable","name":"pool","nameLocation":"27611:4:45","nodeType":"VariableDeclaration","scope":8828,"src":"27603:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8805,"name":"address","nodeType":"ElementaryTypeName","src":"27603:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8808,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"27633:29:45","nodeType":"VariableDeclaration","scope":8828,"src":"27625:37:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8807,"name":"uint256","nodeType":"ElementaryTypeName","src":"27625:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27593:75:45"},"returnParameters":{"id":8819,"nodeType":"ParameterList","parameters":[],"src":"27776:0:45"},"scope":9212,"src":"27552:329:45","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8889,"nodeType":"Block","src":"28037:900:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":8841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8838,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8835,"src":"28133:7:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":8839,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7564,"src":"28144:15:45","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7564_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8840,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28160:4:45","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7562,"src":"28144:20:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"28133:31:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8887,"nodeType":"Block","src":"28549:382:45","statements":[{"expression":{"id":8869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8865,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7605,"src":"28563:31:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8867,"indexExpression":{"id":8866,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8830,"src":"28595:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28563:37:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8868,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8832,"src":"28603:24:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28563:64:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8870,"nodeType":"ExpressionStatement","src":"28563:64:45"},{"expression":{"arguments":[{"id":8874,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8830,"src":"28770:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":8876,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8830,"src":"28803:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":8877,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7564,"src":"28809:15:45","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7564_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8878,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28825:5:45","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":7563,"src":"28809:21:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":8875,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8367,"src":"28776:26:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$7564_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":8879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28776:55:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8871,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"28729:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":8873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28736:33:45","memberName":"updateAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2671,"src":"28729:40:45","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":8880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28729:103:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8881,"nodeType":"ExpressionStatement","src":"28729:103:45"},{"eventCall":{"arguments":[{"id":8883,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8830,"src":"28889:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8884,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8832,"src":"28895:24:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8882,"name":"PoolCreatorYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1662,"src":"28852:36:45","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":8885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28852:68:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8886,"nodeType":"EmitStatement","src":"28847:73:45"}]},"id":8888,"nodeType":"IfStatement","src":"28129:802:45","trueBody":{"id":8864,"nodeType":"Block","src":"28166:377:45","statements":[{"expression":{"id":8846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8842,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7601,"src":"28180:30:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8844,"indexExpression":{"id":8843,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8830,"src":"28211:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28180:36:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8845,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8832,"src":"28219:24:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28180:63:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8847,"nodeType":"ExpressionStatement","src":"28180:63:45"},{"expression":{"arguments":[{"id":8851,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8830,"src":"28384:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":8853,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8830,"src":"28417:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":8854,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7564,"src":"28423:15:45","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7564_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":8855,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28439:4:45","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7562,"src":"28423:20:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":8852,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8367,"src":"28390:26:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$7564_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":8856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28390:54:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8848,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"28344:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":8850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28351:32:45","memberName":"updateAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2663,"src":"28344:39:45","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":8857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28344:101:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8858,"nodeType":"ExpressionStatement","src":"28344:101:45"},{"eventCall":{"arguments":[{"id":8860,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8830,"src":"28501:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8861,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8832,"src":"28507:24:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8859,"name":"PoolCreatorSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1655,"src":"28465:35:45","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":8862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28465:67:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8863,"nodeType":"EmitStatement","src":"28460:72:45"}]}}]},"id":8890,"implemented":true,"kind":"function","modifiers":[],"name":"_setPoolCreatorFeePercentage","nameLocation":"27896:28:45","nodeType":"FunctionDefinition","parameters":{"id":8836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8830,"mutability":"mutable","name":"pool","nameLocation":"27942:4:45","nodeType":"VariableDeclaration","scope":8890,"src":"27934:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8829,"name":"address","nodeType":"ElementaryTypeName","src":"27934:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8832,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"27964:24:45","nodeType":"VariableDeclaration","scope":8890,"src":"27956:32:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8831,"name":"uint256","nodeType":"ElementaryTypeName","src":"27956:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8835,"mutability":"mutable","name":"feeType","nameLocation":"28014:7:45","nodeType":"VariableDeclaration","scope":8890,"src":"27998:23:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":8834,"nodeType":"UserDefinedTypeName","pathNode":{"id":8833,"name":"ProtocolFeeType","nameLocations":["27998:15:45"],"nodeType":"IdentifierPath","referencedDeclaration":7564,"src":"27998:15:45"},"referencedDeclaration":7564,"src":"27998:15:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"}],"src":"27924:103:45"},"returnParameters":{"id":8837,"nodeType":"ParameterList","parameters":[],"src":"28037:0:45"},"scope":9212,"src":"27887:1050:45","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1929],"body":{"id":8936,"nodeType":"Block","src":"29071:258:45","statements":[{"assignments":[8904,8906],"declarations":[{"constant":false,"id":8904,"mutability":"mutable","name":"poolTokens","nameLocation":"29098:10:45","nodeType":"VariableDeclaration","scope":8936,"src":"29082:26:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":8902,"nodeType":"UserDefinedTypeName","pathNode":{"id":8901,"name":"IERC20","nameLocations":["29082:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"29082:6:45"},"referencedDeclaration":10558,"src":"29082:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":8903,"nodeType":"ArrayTypeName","src":"29082:8:45","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":8906,"mutability":"mutable","name":"numTokens","nameLocation":"29118:9:45","nodeType":"VariableDeclaration","scope":8936,"src":"29110:17:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8905,"name":"uint256","nodeType":"ElementaryTypeName","src":"29110:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8910,"initialValue":{"arguments":[{"id":8908,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8893,"src":"29154:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8907,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8457,"src":"29131:22:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":8909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29131:28:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"29081:78:45"},{"body":{"id":8934,"nodeType":"Block","src":"29210:113:45","statements":[{"assignments":[8923],"declarations":[{"constant":false,"id":8923,"mutability":"mutable","name":"token","nameLocation":"29231:5:45","nodeType":"VariableDeclaration","scope":8934,"src":"29224:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":8922,"nodeType":"UserDefinedTypeName","pathNode":{"id":8921,"name":"IERC20","nameLocations":["29224:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"29224:6:45"},"referencedDeclaration":10558,"src":"29224:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"id":8927,"initialValue":{"baseExpression":{"id":8924,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8904,"src":"29239:10:45","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":8926,"indexExpression":{"id":8925,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8912,"src":"29250:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29239:13:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"29224:28:45"},{"expression":{"arguments":[{"id":8929,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8893,"src":"29289:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8930,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8895,"src":"29295:9:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8931,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8923,"src":"29306:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":8928,"name":"_withdrawProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9010,"src":"29267:21:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$10558_$returns$__$","typeString":"function (address,address,contract IERC20)"}},"id":8932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29267:45:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8933,"nodeType":"ExpressionStatement","src":"29267:45:45"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8915,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8912,"src":"29190:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8916,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8906,"src":"29194:9:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29190:13:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8935,"initializationExpression":{"assignments":[8912],"declarations":[{"constant":false,"id":8912,"mutability":"mutable","name":"i","nameLocation":"29183:1:45","nodeType":"VariableDeclaration","scope":8935,"src":"29175:9:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8911,"name":"uint256","nodeType":"ElementaryTypeName","src":"29175:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8914,"initialValue":{"hexValue":"30","id":8913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29187:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"29175:13:45"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"29205:3:45","subExpression":{"id":8918,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8912,"src":"29207:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8920,"nodeType":"ExpressionStatement","src":"29205:3:45"},"nodeType":"ForStatement","src":"29170:153:45"}]},"documentation":{"id":8891,"nodeType":"StructuredDocumentation","src":"28943:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"cf7b287f","id":8937,"implemented":true,"kind":"function","modifiers":[{"id":8898,"kind":"modifierInvocation","modifierName":{"id":8897,"name":"authenticate","nameLocations":["29058:12:45"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"29058:12:45"},"nodeType":"ModifierInvocation","src":"29058:12:45"}],"name":"withdrawProtocolFees","nameLocation":"28995:20:45","nodeType":"FunctionDefinition","parameters":{"id":8896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8893,"mutability":"mutable","name":"pool","nameLocation":"29024:4:45","nodeType":"VariableDeclaration","scope":8937,"src":"29016:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8892,"name":"address","nodeType":"ElementaryTypeName","src":"29016:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8895,"mutability":"mutable","name":"recipient","nameLocation":"29038:9:45","nodeType":"VariableDeclaration","scope":8937,"src":"29030:17:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8894,"name":"address","nodeType":"ElementaryTypeName","src":"29030:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29015:33:45"},"returnParameters":{"id":8899,"nodeType":"ParameterList","parameters":[],"src":"29071:0:45"},"scope":9212,"src":"28986:343:45","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1940],"body":{"id":8963,"nodeType":"Block","src":"29485:217:45","statements":[{"expression":{"arguments":[{"id":8953,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8940,"src":"29628:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8954,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8945,"src":"29634:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"expression":{"id":8950,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"29588:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":8952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29595:32:45","memberName":"getPoolTokenCountAndIndexOfToken","nodeType":"MemberAccess","referencedDeclaration":3932,"src":"29588:39:45","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_contract$_IERC20_$10558_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,contract IERC20) view external returns (uint256,uint256)"}},"id":8955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29588:52:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":8956,"nodeType":"ExpressionStatement","src":"29588:52:45"},{"expression":{"arguments":[{"id":8958,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8940,"src":"29672:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8959,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8942,"src":"29678:9:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8960,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8945,"src":"29689:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":8957,"name":"_withdrawProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9010,"src":"29650:21:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$10558_$returns$__$","typeString":"function (address,address,contract IERC20)"}},"id":8961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29650:45:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8962,"nodeType":"ExpressionStatement","src":"29650:45:45"}]},"documentation":{"id":8938,"nodeType":"StructuredDocumentation","src":"29335:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"b53a70b2","id":8964,"implemented":true,"kind":"function","modifiers":[{"id":8948,"kind":"modifierInvocation","modifierName":{"id":8947,"name":"authenticate","nameLocations":["29472:12:45"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"29472:12:45"},"nodeType":"ModifierInvocation","src":"29472:12:45"}],"name":"withdrawProtocolFeesForToken","nameLocation":"29387:28:45","nodeType":"FunctionDefinition","parameters":{"id":8946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8940,"mutability":"mutable","name":"pool","nameLocation":"29424:4:45","nodeType":"VariableDeclaration","scope":8964,"src":"29416:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8939,"name":"address","nodeType":"ElementaryTypeName","src":"29416:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8942,"mutability":"mutable","name":"recipient","nameLocation":"29438:9:45","nodeType":"VariableDeclaration","scope":8964,"src":"29430:17:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8941,"name":"address","nodeType":"ElementaryTypeName","src":"29430:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8945,"mutability":"mutable","name":"token","nameLocation":"29456:5:45","nodeType":"VariableDeclaration","scope":8964,"src":"29449:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":8944,"nodeType":"UserDefinedTypeName","pathNode":{"id":8943,"name":"IERC20","nameLocations":["29449:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"29449:6:45"},"referencedDeclaration":10558,"src":"29449:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"29415:47:45"},"returnParameters":{"id":8949,"nodeType":"ParameterList","parameters":[],"src":"29485:0:45"},"scope":9212,"src":"29378:324:45","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9009,"nodeType":"Block","src":"29795:316:45","statements":[{"assignments":[8975],"declarations":[{"constant":false,"id":8975,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"29813:16:45","nodeType":"VariableDeclaration","scope":9009,"src":"29805:24:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8974,"name":"uint256","nodeType":"ElementaryTypeName","src":"29805:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8981,"initialValue":{"baseExpression":{"baseExpression":{"id":8976,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7612,"src":"29832:19:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":8978,"indexExpression":{"id":8977,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8966,"src":"29852:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29832:25:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":8980,"indexExpression":{"id":8979,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8971,"src":"29858:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29832:32:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29805:59:45"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8982,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8975,"src":"29878:16:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":8983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29897:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29878:20:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9008,"nodeType":"IfStatement","src":"29874:231:45","trueBody":{"id":9007,"nodeType":"Block","src":"29900:205:45","statements":[{"expression":{"id":8991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":8985,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7612,"src":"29914:19:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":8988,"indexExpression":{"id":8986,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8966,"src":"29934:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29914:25:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":8989,"indexExpression":{"id":8987,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8971,"src":"29940:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"29914:32:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":8990,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29949:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29914:36:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8992,"nodeType":"ExpressionStatement","src":"29914:36:45"},{"expression":{"arguments":[{"id":8996,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8968,"src":"29983:9:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8997,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8975,"src":"29994:16:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8993,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8971,"src":"29964:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":8995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29970:12:45","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10629,"src":"29964:18:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10558_$","typeString":"function (contract IERC20,address,uint256)"}},"id":8998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29964:47:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8999,"nodeType":"ExpressionStatement","src":"29964:47:45"},{"eventCall":{"arguments":[{"id":9001,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8966,"src":"30053:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9002,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8971,"src":"30059:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":9003,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8968,"src":"30066:9:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9004,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8975,"src":"30077:16:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9000,"name":"ProtocolFeesWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1694,"src":"30031:21:45","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,address,uint256)"}},"id":9005,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30031:63:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9006,"nodeType":"EmitStatement","src":"30026:68:45"}]}}]},"id":9010,"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawProtocolFees","nameLocation":"29717:21:45","nodeType":"FunctionDefinition","parameters":{"id":8972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8966,"mutability":"mutable","name":"pool","nameLocation":"29747:4:45","nodeType":"VariableDeclaration","scope":9010,"src":"29739:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8965,"name":"address","nodeType":"ElementaryTypeName","src":"29739:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8968,"mutability":"mutable","name":"recipient","nameLocation":"29761:9:45","nodeType":"VariableDeclaration","scope":9010,"src":"29753:17:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8967,"name":"address","nodeType":"ElementaryTypeName","src":"29753:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8971,"mutability":"mutable","name":"token","nameLocation":"29779:5:45","nodeType":"VariableDeclaration","scope":9010,"src":"29772:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":8970,"nodeType":"UserDefinedTypeName","pathNode":{"id":8969,"name":"IERC20","nameLocations":["29772:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"29772:6:45"},"referencedDeclaration":10558,"src":"29772:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"29738:47:45"},"returnParameters":{"id":8973,"nodeType":"ParameterList","parameters":[],"src":"29795:0:45"},"scope":9212,"src":"29708:403:45","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1948],"body":{"id":9026,"nodeType":"Block","src":"30257:58:45","statements":[{"expression":{"arguments":[{"id":9022,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9013,"src":"30292:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9023,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9015,"src":"30298:9:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9021,"name":"_withdrawPoolCreatorFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9114,"src":"30267:24:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30267:41:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9025,"nodeType":"ExpressionStatement","src":"30267:41:45"}]},"documentation":{"id":9011,"nodeType":"StructuredDocumentation","src":"30117:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"f7061445","id":9027,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":9018,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9013,"src":"30251:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":9019,"kind":"modifierInvocation","modifierName":{"id":9017,"name":"onlyPoolCreator","nameLocations":["30235:15:45"],"nodeType":"IdentifierPath","referencedDeclaration":7637,"src":"30235:15:45"},"nodeType":"ModifierInvocation","src":"30235:21:45"}],"name":"withdrawPoolCreatorFees","nameLocation":"30169:23:45","nodeType":"FunctionDefinition","parameters":{"id":9016,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9013,"mutability":"mutable","name":"pool","nameLocation":"30201:4:45","nodeType":"VariableDeclaration","scope":9027,"src":"30193:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9012,"name":"address","nodeType":"ElementaryTypeName","src":"30193:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9015,"mutability":"mutable","name":"recipient","nameLocation":"30215:9:45","nodeType":"VariableDeclaration","scope":9027,"src":"30207:17:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9014,"name":"address","nodeType":"ElementaryTypeName","src":"30207:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30192:33:45"},"returnParameters":{"id":9020,"nodeType":"ParameterList","parameters":[],"src":"30257:0:45"},"scope":9212,"src":"30160:155:45","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1954],"body":{"id":9040,"nodeType":"Block","src":"30420:70:45","statements":[{"expression":{"arguments":[{"id":9034,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9030,"src":"30455:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":9036,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9030,"src":"30477:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9035,"name":"_getPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8476,"src":"30461:15:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":9037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30461:21:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9033,"name":"_withdrawPoolCreatorFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9114,"src":"30430:24:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30430:53:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9039,"nodeType":"ExpressionStatement","src":"30430:53:45"}]},"documentation":{"id":9028,"nodeType":"StructuredDocumentation","src":"30321:38:45","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"52f125f0","id":9041,"implemented":true,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"30373:23:45","nodeType":"FunctionDefinition","parameters":{"id":9031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9030,"mutability":"mutable","name":"pool","nameLocation":"30405:4:45","nodeType":"VariableDeclaration","scope":9041,"src":"30397:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9029,"name":"address","nodeType":"ElementaryTypeName","src":"30397:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30396:14:45"},"returnParameters":{"id":9032,"nodeType":"ParameterList","parameters":[],"src":"30420:0:45"},"scope":9212,"src":"30364:126:45","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9113,"nodeType":"Block","src":"30571:541:45","statements":[{"assignments":[9052,9054],"declarations":[{"constant":false,"id":9052,"mutability":"mutable","name":"poolTokens","nameLocation":"30598:10:45","nodeType":"VariableDeclaration","scope":9113,"src":"30582:26:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":9050,"nodeType":"UserDefinedTypeName","pathNode":{"id":9049,"name":"IERC20","nameLocations":["30582:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"30582:6:45"},"referencedDeclaration":10558,"src":"30582:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":9051,"nodeType":"ArrayTypeName","src":"30582:8:45","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":9054,"mutability":"mutable","name":"numTokens","nameLocation":"30618:9:45","nodeType":"VariableDeclaration","scope":9113,"src":"30610:17:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9053,"name":"uint256","nodeType":"ElementaryTypeName","src":"30610:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9058,"initialValue":{"arguments":[{"id":9056,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9043,"src":"30654:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9055,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8457,"src":"30631:22:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":9057,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30631:28:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"30581:78:45"},{"body":{"id":9111,"nodeType":"Block","src":"30710:396:45","statements":[{"assignments":[9071],"declarations":[{"constant":false,"id":9071,"mutability":"mutable","name":"token","nameLocation":"30731:5:45","nodeType":"VariableDeclaration","scope":9111,"src":"30724:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":9070,"nodeType":"UserDefinedTypeName","pathNode":{"id":9069,"name":"IERC20","nameLocations":["30724:6:45"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"30724:6:45"},"referencedDeclaration":10558,"src":"30724:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"id":9075,"initialValue":{"baseExpression":{"id":9072,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9052,"src":"30739:10:45","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":9074,"indexExpression":{"id":9073,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9060,"src":"30750:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30739:13:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"30724:28:45"},{"assignments":[9077],"declarations":[{"constant":false,"id":9077,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"30775:16:45","nodeType":"VariableDeclaration","scope":9111,"src":"30767:24:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9076,"name":"uint256","nodeType":"ElementaryTypeName","src":"30767:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9083,"initialValue":{"baseExpression":{"baseExpression":{"id":9078,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7619,"src":"30794:22:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":9080,"indexExpression":{"id":9079,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9043,"src":"30817:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30794:28:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":9082,"indexExpression":{"id":9081,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9071,"src":"30823:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30794:35:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30767:62:45"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9084,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9077,"src":"30847:16:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":9085,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30866:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30847:20:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9110,"nodeType":"IfStatement","src":"30843:253:45","trueBody":{"id":9109,"nodeType":"Block","src":"30869:227:45","statements":[{"expression":{"id":9093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":9087,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7619,"src":"30887:22:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":9090,"indexExpression":{"id":9088,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9043,"src":"30910:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30887:28:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":9091,"indexExpression":{"id":9089,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9071,"src":"30916:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"30887:35:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":9092,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30925:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30887:39:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9094,"nodeType":"ExpressionStatement","src":"30887:39:45"},{"expression":{"arguments":[{"id":9098,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9045,"src":"30963:9:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9099,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9077,"src":"30974:16:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9095,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9071,"src":"30944:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":9097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30950:12:45","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10629,"src":"30944:18:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10558_$","typeString":"function (contract IERC20,address,uint256)"}},"id":9100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30944:47:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9101,"nodeType":"ExpressionStatement","src":"30944:47:45"},{"eventCall":{"arguments":[{"id":9103,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9043,"src":"31040:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9104,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9071,"src":"31046:5:45","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":9105,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9045,"src":"31053:9:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9106,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9077,"src":"31064:16:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9102,"name":"PoolCreatorFeesWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1706,"src":"31015:24:45","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,address,uint256)"}},"id":9107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31015:66:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9108,"nodeType":"EmitStatement","src":"31010:71:45"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9063,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9060,"src":"30690:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":9064,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9054,"src":"30694:9:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30690:13:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9112,"initializationExpression":{"assignments":[9060],"declarations":[{"constant":false,"id":9060,"mutability":"mutable","name":"i","nameLocation":"30683:1:45","nodeType":"VariableDeclaration","scope":9112,"src":"30675:9:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9059,"name":"uint256","nodeType":"ElementaryTypeName","src":"30675:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9062,"initialValue":{"hexValue":"30","id":9061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30687:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"30675:13:45"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":9067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"30705:3:45","subExpression":{"id":9066,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9060,"src":"30707:1:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9068,"nodeType":"ExpressionStatement","src":"30705:3:45"},"nodeType":"ForStatement","src":"30670:436:45"}]},"id":9114,"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawPoolCreatorFees","nameLocation":"30505:24:45","nodeType":"FunctionDefinition","parameters":{"id":9046,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9043,"mutability":"mutable","name":"pool","nameLocation":"30538:4:45","nodeType":"VariableDeclaration","scope":9114,"src":"30530:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9042,"name":"address","nodeType":"ElementaryTypeName","src":"30530:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9045,"mutability":"mutable","name":"recipient","nameLocation":"30552:9:45","nodeType":"VariableDeclaration","scope":9114,"src":"30544:17:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9044,"name":"address","nodeType":"ElementaryTypeName","src":"30544:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30529:33:45"},"returnParameters":{"id":9047,"nodeType":"ParameterList","parameters":[],"src":"30571:0:45"},"scope":9212,"src":"30496:616:45","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":9151,"nodeType":"Block","src":"31352:771:45","statements":[{"expression":{"id":9133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":9124,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7588,"src":"31667:31:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7570_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":9126,"indexExpression":{"id":9125,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9117,"src":"31699:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"31667:37:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9128,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9119,"src":"31750:28:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31779:8:45","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15008,"src":"31750:37:45","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":9130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31750:39:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":9131,"name":"isOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9121,"src":"31815:10:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":9127,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7570,"src":"31707:13:45","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$7570_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":9132,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["31735:13:45","31803:10:45"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"31707:129:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"31667:169:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":9134,"nodeType":"ExpressionStatement","src":"31667:169:45"},{"expression":{"arguments":[{"id":9138,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9117,"src":"31971:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":9140,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9117,"src":"32004:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":9141,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7564,"src":"32010:15:45","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7564_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":9142,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32026:4:45","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":7562,"src":"32010:20:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":9139,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8367,"src":"31977:26:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$7564_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":9143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31977:54:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9135,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"31931:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":9137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31938:32:45","memberName":"updateAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2663,"src":"31931:39:45","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":9144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31931:101:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9145,"nodeType":"ExpressionStatement","src":"31931:101:45"},{"eventCall":{"arguments":[{"id":9147,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9117,"src":"32081:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9148,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9119,"src":"32087:28:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9146,"name":"ProtocolSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1641,"src":"32048:32:45","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":9149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32048:68:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9150,"nodeType":"EmitStatement","src":"32043:73:45"}]},"documentation":{"id":9115,"nodeType":"StructuredDocumentation","src":"31118:114:45","text":"@dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage."},"id":9152,"implemented":true,"kind":"function","modifiers":[],"name":"_updatePoolSwapFeePercentage","nameLocation":"31246:28:45","nodeType":"FunctionDefinition","parameters":{"id":9122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9117,"mutability":"mutable","name":"pool","nameLocation":"31283:4:45","nodeType":"VariableDeclaration","scope":9152,"src":"31275:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9116,"name":"address","nodeType":"ElementaryTypeName","src":"31275:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9119,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"31297:28:45","nodeType":"VariableDeclaration","scope":9152,"src":"31289:36:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9118,"name":"uint256","nodeType":"ElementaryTypeName","src":"31289:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9121,"mutability":"mutable","name":"isOverride","nameLocation":"31332:10:45","nodeType":"VariableDeclaration","scope":9152,"src":"31327:15:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9120,"name":"bool","nodeType":"ElementaryTypeName","src":"31327:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"31274:69:45"},"returnParameters":{"id":9123,"nodeType":"ParameterList","parameters":[],"src":"31352:0:45"},"scope":9212,"src":"31237:886:45","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":9189,"nodeType":"Block","src":"32395:767:45","statements":[{"expression":{"id":9171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":9162,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7593,"src":"32699:32:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$7570_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":9164,"indexExpression":{"id":9163,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9155,"src":"32732:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"32699:38:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9166,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9157,"src":"32783:29:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32813:8:45","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15008,"src":"32783:38:45","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":9168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32783:40:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":9169,"name":"isOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9159,"src":"32849:10:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":9165,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7570,"src":"32740:13:45","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$7570_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":9170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["32768:13:45","32837:10:45"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"32740:130:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"32699:171:45","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$7570_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":9172,"nodeType":"ExpressionStatement","src":"32699:171:45"},{"expression":{"arguments":[{"id":9176,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9155,"src":"33007:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":9178,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9155,"src":"33040:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":9179,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7564,"src":"33046:15:45","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$7564_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":9180,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"33062:5:45","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":7563,"src":"33046:21:45","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$7564","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":9177,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8367,"src":"33013:26:45","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$7564_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":9181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33013:55:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9173,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"32966:6:45","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":9175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32973:33:45","memberName":"updateAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2671,"src":"32966:40:45","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":9182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32966:103:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9183,"nodeType":"ExpressionStatement","src":"32966:103:45"},{"eventCall":{"arguments":[{"id":9185,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9155,"src":"33119:4:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9186,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9157,"src":"33125:29:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9184,"name":"ProtocolYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1648,"src":"33085:33:45","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":9187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33085:70:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9188,"nodeType":"EmitStatement","src":"33080:75:45"}]},"documentation":{"id":9153,"nodeType":"StructuredDocumentation","src":"32129:114:45","text":"@dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage."},"id":9190,"implemented":true,"kind":"function","modifiers":[],"name":"_updatePoolYieldFeePercentage","nameLocation":"32257:29:45","nodeType":"FunctionDefinition","parameters":{"id":9160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9155,"mutability":"mutable","name":"pool","nameLocation":"32304:4:45","nodeType":"VariableDeclaration","scope":9190,"src":"32296:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9154,"name":"address","nodeType":"ElementaryTypeName","src":"32296:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9157,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"32326:29:45","nodeType":"VariableDeclaration","scope":9190,"src":"32318:37:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9156,"name":"uint256","nodeType":"ElementaryTypeName","src":"32318:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9159,"mutability":"mutable","name":"isOverride","nameLocation":"32370:10:45","nodeType":"VariableDeclaration","scope":9190,"src":"32365:15:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9158,"name":"bool","nodeType":"ElementaryTypeName","src":"32365:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"32286:100:45"},"returnParameters":{"id":9161,"nodeType":"ParameterList","parameters":[],"src":"32395:0:45"},"scope":9212,"src":"32248:914:45","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":9210,"nodeType":"Block","src":"33235:682:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9195,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9192,"src":"33770:13:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9196,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4284,"src":"33786:18:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33770:34:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9198,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"33769:36:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9199,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4284,"src":"33808:18:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33769:57:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9201,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9192,"src":"33830:13:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33769:74:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9209,"nodeType":"IfStatement","src":"33765:146:45","trueBody":{"id":9208,"nodeType":"Block","src":"33845:66:45","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9203,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3184,"src":"33866:12:45","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3184_$","typeString":"type(contract IVaultErrors)"}},"id":9205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33879:19:45","memberName":"FeePrecisionTooHigh","nodeType":"MemberAccess","referencedDeclaration":3032,"src":"33866:32:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33866:34:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9207,"nodeType":"RevertStatement","src":"33859:41:45"}]}}]},"id":9211,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidPrecision","nameLocation":"33177:21:45","nodeType":"FunctionDefinition","parameters":{"id":9193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9192,"mutability":"mutable","name":"feePercentage","nameLocation":"33207:13:45","nodeType":"VariableDeclaration","scope":9211,"src":"33199:21:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9191,"name":"uint256","nodeType":"ElementaryTypeName","src":"33199:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33198:23:45"},"returnParameters":{"id":9194,"nodeType":"ParameterList","parameters":[],"src":"33235:0:45"},"scope":9212,"src":"33168:749:45","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":9213,"src":"3120:30799:45","usedErrors":[5,1736,1739,1744,1751,1754,3032,3056,4989,6938,7337,7624,7627,10596,14319],"usedEvents":[1629,1634,1641,1648,1655,1662,1672,1682,1694,1706,1715,1724,1733]}],"src":"46:33874:45"},"id":45},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","exportedSymbols":{"CommonAuthentication":[7517],"IAuthorizer":[1341],"IVault":[2527],"SingletonAuthentication":[9271]},"id":9272,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":9214,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:46"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":9216,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9272,"sourceUnit":1342,"src":"72:91:46","symbolAliases":[{"foreign":{"id":9215,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"81:11:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":9218,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9272,"sourceUnit":2528,"src":"164:81:46","symbolAliases":[{"foreign":{"id":9217,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"173:6:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol","file":"./CommonAuthentication.sol","id":9220,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9272,"sourceUnit":7518,"src":"247:66:46","symbolAliases":[{"foreign":{"id":9219,"name":"CommonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"256:20:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9222,"name":"CommonAuthentication","nameLocations":["735:20:46"],"nodeType":"IdentifierPath","referencedDeclaration":7517,"src":"735:20:46"},"id":9223,"nodeType":"InheritanceSpecifier","src":"735:20:46"}],"canonicalName":"SingletonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":9221,"nodeType":"StructuredDocumentation","src":"315:374:46","text":" @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n function name."},"fullyImplemented":true,"id":9271,"linearizedBaseContracts":[9271,7517,4367,14],"name":"SingletonAuthentication","nameLocation":"708:23:46","nodeType":"ContractDefinition","nodes":[{"body":{"id":9245,"nodeType":"Block","src":"932:64:46","statements":[]},"id":9246,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":9229,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9226,"src":"883:5:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":9238,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"922:4:46","typeDescriptions":{"typeIdentifier":"t_contract$_SingletonAuthentication_$9271","typeString":"contract SingletonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SingletonAuthentication_$9271","typeString":"contract SingletonAuthentication"}],"id":9237,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"914:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9236,"name":"address","nodeType":"ElementaryTypeName","src":"914:7:46","typeDescriptions":{}}},"id":9239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"914:13:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9235,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"906:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":9234,"name":"uint160","nodeType":"ElementaryTypeName","src":"906:7:46","typeDescriptions":{}}},"id":9240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"906:22:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":9233,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"898:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":9232,"name":"uint256","nodeType":"ElementaryTypeName","src":"898:7:46","typeDescriptions":{}}},"id":9241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"898:31:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9231,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"890:7:46","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":9230,"name":"bytes32","nodeType":"ElementaryTypeName","src":"890:7:46","typeDescriptions":{}}},"id":9242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"890:40:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":9243,"kind":"baseConstructorSpecifier","modifierName":{"id":9228,"name":"CommonAuthentication","nameLocations":["862:20:46"],"nodeType":"IdentifierPath","referencedDeclaration":7517,"src":"862:20:46"},"nodeType":"ModifierInvocation","src":"862:69:46"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9226,"mutability":"mutable","name":"vault","nameLocation":"855:5:46","nodeType":"VariableDeclaration","scope":9246,"src":"848:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":9225,"nodeType":"UserDefinedTypeName","pathNode":{"id":9224,"name":"IVault","nameLocations":["848:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"848:6:46"},"referencedDeclaration":2527,"src":"848:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"}],"src":"847:14:46"},"returnParameters":{"id":9244,"nodeType":"ParameterList","parameters":[],"src":"932:0:46"},"scope":9271,"src":"836:160:46","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9256,"nodeType":"Block","src":"1333:35:46","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9253,"name":"_getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7399,"src":"1350:9:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$2527_$","typeString":"function () view returns (contract IVault)"}},"id":9254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1350:11:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"functionReturnParameters":9252,"id":9255,"nodeType":"Return","src":"1343:18:46"}]},"documentation":{"id":9247,"nodeType":"StructuredDocumentation","src":"1002:269:46","text":" @notice Get the address of the Balancer Vault.\n @dev This function is virtual to allow for overriding in derived contracts which also inherits contracts with\n `getVault()` definition.\n @return vault An interface pointer to the Vault"},"functionSelector":"8d928af8","id":9257,"implemented":true,"kind":"function","modifiers":[],"name":"getVault","nameLocation":"1285:8:46","nodeType":"FunctionDefinition","parameters":{"id":9248,"nodeType":"ParameterList","parameters":[],"src":"1293:2:46"},"returnParameters":{"id":9252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9251,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9257,"src":"1325:6:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":9250,"nodeType":"UserDefinedTypeName","pathNode":{"id":9249,"name":"IVault","nameLocations":["1325:6:46"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"1325:6:46"},"referencedDeclaration":2527,"src":"1325:6:46","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1324:8:46"},"scope":9271,"src":"1276:92:46","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":9269,"nodeType":"Block","src":"1564:50:46","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9264,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9257,"src":"1581:8:46","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$2527_$","typeString":"function () view returns (contract IVault)"}},"id":9265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1581:10:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":9266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1592:13:46","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":3841,"src":"1581:24:46","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1341_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":9267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1581:26:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"functionReturnParameters":9263,"id":9268,"nodeType":"Return","src":"1574:33:46"}]},"documentation":{"id":9258,"nodeType":"StructuredDocumentation","src":"1374:126:46","text":" @notice Get the address of the Authorizer.\n @return authorizer An interface pointer to the Authorizer"},"functionSelector":"aaabadc5","id":9270,"implemented":true,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"1514:13:46","nodeType":"FunctionDefinition","parameters":{"id":9259,"nodeType":"ParameterList","parameters":[],"src":"1527:2:46"},"returnParameters":{"id":9263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9262,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9270,"src":"1551:11:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"},"typeName":{"id":9261,"nodeType":"UserDefinedTypeName","pathNode":{"id":9260,"name":"IAuthorizer","nameLocations":["1551:11:46"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"1551:11:46"},"referencedDeclaration":1341,"src":"1551:11:46","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"1550:13:46"},"scope":9271,"src":"1505:109:46","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":9272,"src":"690:926:46","usedErrors":[5,7337],"usedEvents":[]}],"src":"46:1571:46"},"id":46},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","exportedSymbols":{"IVault":[2527],"IVaultErrors":[3184],"VaultGuard":[9320]},"id":9321,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":9273,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:47"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":9275,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9321,"sourceUnit":3185,"src":"72:93:47","symbolAliases":[{"foreign":{"id":9274,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3184,"src":"81:12:47","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":9277,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9321,"sourceUnit":2528,"src":"166:81:47","symbolAliases":[{"foreign":{"id":9276,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"175:6:47","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"VaultGuard","contractDependencies":[],"contractKind":"contract","documentation":{"id":9278,"nodeType":"StructuredDocumentation","src":"249:59:47","text":"@notice Contract that shares the modifier `onlyVault`."},"fullyImplemented":true,"id":9320,"linearizedBaseContracts":[9320],"name":"VaultGuard","nameLocation":"317:10:47","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":9281,"mutability":"immutable","name":"_vault","nameLocation":"360:6:47","nodeType":"VariableDeclaration","scope":9320,"src":"334:32:47","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":9280,"nodeType":"UserDefinedTypeName","pathNode":{"id":9279,"name":"IVault","nameLocations":["334:6:47"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"334:6:47"},"referencedDeclaration":2527,"src":"334:6:47","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"},{"body":{"id":9291,"nodeType":"Block","src":"399:31:47","statements":[{"expression":{"id":9289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9287,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"409:6:47","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9288,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9284,"src":"418:5:47","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"src":"409:14:47","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":9290,"nodeType":"ExpressionStatement","src":"409:14:47"}]},"id":9292,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9284,"mutability":"mutable","name":"vault","nameLocation":"392:5:47","nodeType":"VariableDeclaration","scope":9292,"src":"385:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":9283,"nodeType":"UserDefinedTypeName","pathNode":{"id":9282,"name":"IVault","nameLocations":["385:6:47"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"385:6:47"},"referencedDeclaration":2527,"src":"385:6:47","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"}],"src":"384:14:47"},"returnParameters":{"id":9286,"nodeType":"ParameterList","parameters":[],"src":"399:0:47"},"scope":9320,"src":"373:57:47","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":9298,"nodeType":"Block","src":"457:46:47","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9294,"name":"_ensureOnlyVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9319,"src":"467:16:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":9295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"467:18:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9296,"nodeType":"ExpressionStatement","src":"467:18:47"},{"id":9297,"nodeType":"PlaceholderStatement","src":"495:1:47"}]},"id":9299,"name":"onlyVault","nameLocation":"445:9:47","nodeType":"ModifierDefinition","parameters":{"id":9293,"nodeType":"ParameterList","parameters":[],"src":"454:2:47"},"src":"436:67:47","virtual":false,"visibility":"internal"},{"body":{"id":9318,"nodeType":"Block","src":"550:124:47","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":9302,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"564:3:47","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":9303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"568:6:47","memberName":"sender","nodeType":"MemberAccess","src":"564:10:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":9306,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"586:6:47","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}],"id":9305,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"578:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9304,"name":"address","nodeType":"ElementaryTypeName","src":"578:7:47","typeDescriptions":{}}},"id":9307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"578:15:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"564:29:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9317,"nodeType":"IfStatement","src":"560:108:47","trueBody":{"id":9316,"nodeType":"Block","src":"595:73:47","statements":[{"errorCall":{"arguments":[{"expression":{"id":9312,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"646:3:47","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":9313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"650:6:47","memberName":"sender","nodeType":"MemberAccess","src":"646:10:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9309,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3184,"src":"616:12:47","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3184_$","typeString":"type(contract IVaultErrors)"}},"id":9311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"629:16:47","memberName":"SenderIsNotVault","nodeType":"MemberAccess","referencedDeclaration":3056,"src":"616:29:47","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"616:41:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9315,"nodeType":"RevertStatement","src":"609:48:47"}]}}]},"id":9319,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureOnlyVault","nameLocation":"518:16:47","nodeType":"FunctionDefinition","parameters":{"id":9300,"nodeType":"ParameterList","parameters":[],"src":"534:2:47"},"returnParameters":{"id":9301,"nodeType":"ParameterList","parameters":[],"src":"550:0:47"},"scope":9320,"src":"509:165:47","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":9321,"src":"308:368:47","usedErrors":[],"usedEvents":[]}],"src":"46:631:47"},"id":47},"@openzeppelin/contracts/access/Ownable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","exportedSymbols":{"Context":[12348],"Ownable":[9468]},"id":9469,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9322,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"102:24:48"},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../utils/Context.sol","id":9324,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9469,"sourceUnit":12349,"src":"128:45:48","symbolAliases":[{"foreign":{"id":9323,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12348,"src":"136:7:48","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9326,"name":"Context","nameLocations":["692:7:48"],"nodeType":"IdentifierPath","referencedDeclaration":12348,"src":"692:7:48"},"id":9327,"nodeType":"InheritanceSpecifier","src":"692:7:48"}],"canonicalName":"Ownable","contractDependencies":[],"contractKind":"contract","documentation":{"id":9325,"nodeType":"StructuredDocumentation","src":"175:487:48","text":" @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n The initial owner is set to the address provided by the deployer. This can\n later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."},"fullyImplemented":true,"id":9468,"linearizedBaseContracts":[9468,12348],"name":"Ownable","nameLocation":"681:7:48","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":9329,"mutability":"mutable","name":"_owner","nameLocation":"722:6:48","nodeType":"VariableDeclaration","scope":9468,"src":"706:22:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9328,"name":"address","nodeType":"ElementaryTypeName","src":"706:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"documentation":{"id":9330,"nodeType":"StructuredDocumentation","src":"735:85:48","text":" @dev The caller account is not authorized to perform an operation."},"errorSelector":"118cdaa7","id":9334,"name":"OwnableUnauthorizedAccount","nameLocation":"831:26:48","nodeType":"ErrorDefinition","parameters":{"id":9333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9332,"mutability":"mutable","name":"account","nameLocation":"866:7:48","nodeType":"VariableDeclaration","scope":9334,"src":"858:15:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9331,"name":"address","nodeType":"ElementaryTypeName","src":"858:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"857:17:48"},"src":"825:50:48"},{"documentation":{"id":9335,"nodeType":"StructuredDocumentation","src":"881:82:48","text":" @dev The owner is not a valid owner account. (eg. `address(0)`)"},"errorSelector":"1e4fbdf7","id":9339,"name":"OwnableInvalidOwner","nameLocation":"974:19:48","nodeType":"ErrorDefinition","parameters":{"id":9338,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9337,"mutability":"mutable","name":"owner","nameLocation":"1002:5:48","nodeType":"VariableDeclaration","scope":9339,"src":"994:13:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9336,"name":"address","nodeType":"ElementaryTypeName","src":"994:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"993:15:48"},"src":"968:41:48"},{"anonymous":false,"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":9345,"name":"OwnershipTransferred","nameLocation":"1021:20:48","nodeType":"EventDefinition","parameters":{"id":9344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9341,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"1058:13:48","nodeType":"VariableDeclaration","scope":9345,"src":"1042:29:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9340,"name":"address","nodeType":"ElementaryTypeName","src":"1042:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9343,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"1089:8:48","nodeType":"VariableDeclaration","scope":9345,"src":"1073:24:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9342,"name":"address","nodeType":"ElementaryTypeName","src":"1073:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1041:57:48"},"src":"1015:84:48"},{"body":{"id":9370,"nodeType":"Block","src":"1259:153:48","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9351,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9348,"src":"1273:12:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9354,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1297:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9353,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1289:7:48","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9352,"name":"address","nodeType":"ElementaryTypeName","src":"1289:7:48","typeDescriptions":{}}},"id":9355,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1289:10:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1273:26:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9365,"nodeType":"IfStatement","src":"1269:95:48","trueBody":{"id":9364,"nodeType":"Block","src":"1301:63:48","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":9360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1350:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9359,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1342:7:48","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9358,"name":"address","nodeType":"ElementaryTypeName","src":"1342:7:48","typeDescriptions":{}}},"id":9361,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1342:10:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9357,"name":"OwnableInvalidOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9339,"src":"1322:19:48","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9362,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1322:31:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9363,"nodeType":"RevertStatement","src":"1315:38:48"}]}},{"expression":{"arguments":[{"id":9367,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9348,"src":"1392:12:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9366,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9467,"src":"1373:18:48","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1373:32:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9369,"nodeType":"ExpressionStatement","src":"1373:32:48"}]},"documentation":{"id":9346,"nodeType":"StructuredDocumentation","src":"1105:115:48","text":" @dev Initializes the contract setting the address provided by the deployer as the initial owner."},"id":9371,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9348,"mutability":"mutable","name":"initialOwner","nameLocation":"1245:12:48","nodeType":"VariableDeclaration","scope":9371,"src":"1237:20:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9347,"name":"address","nodeType":"ElementaryTypeName","src":"1237:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1236:22:48"},"returnParameters":{"id":9350,"nodeType":"ParameterList","parameters":[],"src":"1259:0:48"},"scope":9468,"src":"1225:187:48","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9378,"nodeType":"Block","src":"1521:41:48","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9374,"name":"_checkOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9405,"src":"1531:11:48","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":9375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1531:13:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9376,"nodeType":"ExpressionStatement","src":"1531:13:48"},{"id":9377,"nodeType":"PlaceholderStatement","src":"1554:1:48"}]},"documentation":{"id":9372,"nodeType":"StructuredDocumentation","src":"1418:77:48","text":" @dev Throws if called by any account other than the owner."},"id":9379,"name":"onlyOwner","nameLocation":"1509:9:48","nodeType":"ModifierDefinition","parameters":{"id":9373,"nodeType":"ParameterList","parameters":[],"src":"1518:2:48"},"src":"1500:62:48","virtual":false,"visibility":"internal"},{"body":{"id":9387,"nodeType":"Block","src":"1693:30:48","statements":[{"expression":{"id":9385,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9329,"src":"1710:6:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9384,"id":9386,"nodeType":"Return","src":"1703:13:48"}]},"documentation":{"id":9380,"nodeType":"StructuredDocumentation","src":"1568:65:48","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":9388,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"1647:5:48","nodeType":"FunctionDefinition","parameters":{"id":9381,"nodeType":"ParameterList","parameters":[],"src":"1652:2:48"},"returnParameters":{"id":9384,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9383,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9388,"src":"1684:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9382,"name":"address","nodeType":"ElementaryTypeName","src":"1684:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1683:9:48"},"scope":9468,"src":"1638:85:48","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":9404,"nodeType":"Block","src":"1841:117:48","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":9392,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9388,"src":"1855:5:48","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1855:7:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":9394,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12330,"src":"1866:10:48","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1866:12:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1855:23:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9403,"nodeType":"IfStatement","src":"1851:101:48","trueBody":{"id":9402,"nodeType":"Block","src":"1880:72:48","statements":[{"errorCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":9398,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12330,"src":"1928:10:48","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1928:12:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9397,"name":"OwnableUnauthorizedAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9334,"src":"1901:26:48","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1901:40:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9401,"nodeType":"RevertStatement","src":"1894:47:48"}]}}]},"documentation":{"id":9389,"nodeType":"StructuredDocumentation","src":"1729:62:48","text":" @dev Throws if the sender is not the owner."},"id":9405,"implemented":true,"kind":"function","modifiers":[],"name":"_checkOwner","nameLocation":"1805:11:48","nodeType":"FunctionDefinition","parameters":{"id":9390,"nodeType":"ParameterList","parameters":[],"src":"1816:2:48"},"returnParameters":{"id":9391,"nodeType":"ParameterList","parameters":[],"src":"1841:0:48"},"scope":9468,"src":"1796:162:48","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":9418,"nodeType":"Block","src":"2347:47:48","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":9414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2384:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9413,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2376:7:48","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9412,"name":"address","nodeType":"ElementaryTypeName","src":"2376:7:48","typeDescriptions":{}}},"id":9415,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2376:10:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9411,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9467,"src":"2357:18:48","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2357:30:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9417,"nodeType":"ExpressionStatement","src":"2357:30:48"}]},"documentation":{"id":9406,"nodeType":"StructuredDocumentation","src":"1964:324:48","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby disabling any functionality that is only available to the owner."},"functionSelector":"715018a6","id":9419,"implemented":true,"kind":"function","modifiers":[{"id":9409,"kind":"modifierInvocation","modifierName":{"id":9408,"name":"onlyOwner","nameLocations":["2337:9:48"],"nodeType":"IdentifierPath","referencedDeclaration":9379,"src":"2337:9:48"},"nodeType":"ModifierInvocation","src":"2337:9:48"}],"name":"renounceOwnership","nameLocation":"2302:17:48","nodeType":"FunctionDefinition","parameters":{"id":9407,"nodeType":"ParameterList","parameters":[],"src":"2319:2:48"},"returnParameters":{"id":9410,"nodeType":"ParameterList","parameters":[],"src":"2347:0:48"},"scope":9468,"src":"2293:101:48","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":9446,"nodeType":"Block","src":"2613:145:48","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9427,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9422,"src":"2627:8:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2647:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9429,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2639:7:48","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9428,"name":"address","nodeType":"ElementaryTypeName","src":"2639:7:48","typeDescriptions":{}}},"id":9431,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2639:10:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2627:22:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9441,"nodeType":"IfStatement","src":"2623:91:48","trueBody":{"id":9440,"nodeType":"Block","src":"2651:63:48","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":9436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2700:1:48","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9435,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2692:7:48","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9434,"name":"address","nodeType":"ElementaryTypeName","src":"2692:7:48","typeDescriptions":{}}},"id":9437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2692:10:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9433,"name":"OwnableInvalidOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9339,"src":"2672:19:48","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2672:31:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9439,"nodeType":"RevertStatement","src":"2665:38:48"}]}},{"expression":{"arguments":[{"id":9443,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9422,"src":"2742:8:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9442,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9467,"src":"2723:18:48","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2723:28:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9445,"nodeType":"ExpressionStatement","src":"2723:28:48"}]},"documentation":{"id":9420,"nodeType":"StructuredDocumentation","src":"2400:138:48","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":9447,"implemented":true,"kind":"function","modifiers":[{"id":9425,"kind":"modifierInvocation","modifierName":{"id":9424,"name":"onlyOwner","nameLocations":["2603:9:48"],"nodeType":"IdentifierPath","referencedDeclaration":9379,"src":"2603:9:48"},"nodeType":"ModifierInvocation","src":"2603:9:48"}],"name":"transferOwnership","nameLocation":"2552:17:48","nodeType":"FunctionDefinition","parameters":{"id":9423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9422,"mutability":"mutable","name":"newOwner","nameLocation":"2578:8:48","nodeType":"VariableDeclaration","scope":9447,"src":"2570:16:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9421,"name":"address","nodeType":"ElementaryTypeName","src":"2570:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2569:18:48"},"returnParameters":{"id":9426,"nodeType":"ParameterList","parameters":[],"src":"2613:0:48"},"scope":9468,"src":"2543:215:48","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":9466,"nodeType":"Block","src":"2975:124:48","statements":[{"assignments":[9454],"declarations":[{"constant":false,"id":9454,"mutability":"mutable","name":"oldOwner","nameLocation":"2993:8:48","nodeType":"VariableDeclaration","scope":9466,"src":"2985:16:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9453,"name":"address","nodeType":"ElementaryTypeName","src":"2985:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9456,"initialValue":{"id":9455,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9329,"src":"3004:6:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2985:25:48"},{"expression":{"id":9459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9457,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9329,"src":"3020:6:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9458,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9450,"src":"3029:8:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3020:17:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9460,"nodeType":"ExpressionStatement","src":"3020:17:48"},{"eventCall":{"arguments":[{"id":9462,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9454,"src":"3073:8:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9463,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9450,"src":"3083:8:48","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9461,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9345,"src":"3052:20:48","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3052:40:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9465,"nodeType":"EmitStatement","src":"3047:45:48"}]},"documentation":{"id":9448,"nodeType":"StructuredDocumentation","src":"2764:143:48","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction."},"id":9467,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"2921:18:48","nodeType":"FunctionDefinition","parameters":{"id":9451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9450,"mutability":"mutable","name":"newOwner","nameLocation":"2948:8:48","nodeType":"VariableDeclaration","scope":9467,"src":"2940:16:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9449,"name":"address","nodeType":"ElementaryTypeName","src":"2940:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2939:18:48"},"returnParameters":{"id":9452,"nodeType":"ParameterList","parameters":[],"src":"2975:0:48"},"scope":9468,"src":"2912:187:48","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":9469,"src":"663:2438:48","usedErrors":[9334,9339],"usedEvents":[9345]}],"src":"102:3000:48"},"id":48},"@openzeppelin/contracts/access/Ownable2Step.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/Ownable2Step.sol","exportedSymbols":{"Ownable":[9468],"Ownable2Step":[9554]},"id":9555,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9470,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:49"},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"./Ownable.sol","id":9472,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9555,"sourceUnit":9469,"src":"133:38:49","symbolAliases":[{"foreign":{"id":9471,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9468,"src":"141:7:49","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9474,"name":"Ownable","nameLocations":["1018:7:49"],"nodeType":"IdentifierPath","referencedDeclaration":9468,"src":"1018:7:49"},"id":9475,"nodeType":"InheritanceSpecifier","src":"1018:7:49"}],"canonicalName":"Ownable2Step","contractDependencies":[],"contractKind":"contract","documentation":{"id":9473,"nodeType":"StructuredDocumentation","src":"173:810:49","text":" @dev Contract module which provides access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n This extension of the {Ownable} contract includes a two-step mechanism to transfer\n ownership, where the new owner must call {acceptOwnership} in order to replace the\n old one. This can help prevent common mistakes, such as transfers of ownership to\n incorrect accounts, or to contracts that are unable to interact with the\n permission system.\n The initial owner is specified at deployment time in the constructor for `Ownable`. This\n can later be changed with {transferOwnership} and {acceptOwnership}.\n This module is used through inheritance. It will make available all functions\n from parent (Ownable)."},"fullyImplemented":true,"id":9554,"linearizedBaseContracts":[9554,9468,12348],"name":"Ownable2Step","nameLocation":"1002:12:49","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":9477,"mutability":"mutable","name":"_pendingOwner","nameLocation":"1048:13:49","nodeType":"VariableDeclaration","scope":9554,"src":"1032:29:49","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9476,"name":"address","nodeType":"ElementaryTypeName","src":"1032:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"eventSelector":"38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700","id":9483,"name":"OwnershipTransferStarted","nameLocation":"1074:24:49","nodeType":"EventDefinition","parameters":{"id":9482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9479,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"1115:13:49","nodeType":"VariableDeclaration","scope":9483,"src":"1099:29:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9478,"name":"address","nodeType":"ElementaryTypeName","src":"1099:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9481,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"1146:8:49","nodeType":"VariableDeclaration","scope":9483,"src":"1130:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9480,"name":"address","nodeType":"ElementaryTypeName","src":"1130:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1098:57:49"},"src":"1068:88:49"},{"body":{"id":9491,"nodeType":"Block","src":"1294:37:49","statements":[{"expression":{"id":9489,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9477,"src":"1311:13:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9488,"id":9490,"nodeType":"Return","src":"1304:20:49"}]},"documentation":{"id":9484,"nodeType":"StructuredDocumentation","src":"1162:65:49","text":" @dev Returns the address of the pending owner."},"functionSelector":"e30c3978","id":9492,"implemented":true,"kind":"function","modifiers":[],"name":"pendingOwner","nameLocation":"1241:12:49","nodeType":"FunctionDefinition","parameters":{"id":9485,"nodeType":"ParameterList","parameters":[],"src":"1253:2:49"},"returnParameters":{"id":9488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9487,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9492,"src":"1285:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9486,"name":"address","nodeType":"ElementaryTypeName","src":"1285:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1284:9:49"},"scope":9554,"src":"1232:99:49","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[9447],"body":{"id":9511,"nodeType":"Block","src":"1728:99:49","statements":[{"expression":{"id":9503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9501,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9477,"src":"1738:13:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9502,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9495,"src":"1754:8:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1738:24:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9504,"nodeType":"ExpressionStatement","src":"1738:24:49"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":9506,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9388,"src":"1802:5:49","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1802:7:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9508,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9495,"src":"1811:8:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9505,"name":"OwnershipTransferStarted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9483,"src":"1777:24:49","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1777:43:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9510,"nodeType":"EmitStatement","src":"1772:48:49"}]},"documentation":{"id":9493,"nodeType":"StructuredDocumentation","src":"1337:307:49","text":" @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\n Can only be called by the current owner.\n Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer."},"functionSelector":"f2fde38b","id":9512,"implemented":true,"kind":"function","modifiers":[{"id":9499,"kind":"modifierInvocation","modifierName":{"id":9498,"name":"onlyOwner","nameLocations":["1718:9:49"],"nodeType":"IdentifierPath","referencedDeclaration":9379,"src":"1718:9:49"},"nodeType":"ModifierInvocation","src":"1718:9:49"}],"name":"transferOwnership","nameLocation":"1658:17:49","nodeType":"FunctionDefinition","overrides":{"id":9497,"nodeType":"OverrideSpecifier","overrides":[],"src":"1709:8:49"},"parameters":{"id":9496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9495,"mutability":"mutable","name":"newOwner","nameLocation":"1684:8:49","nodeType":"VariableDeclaration","scope":9512,"src":"1676:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9494,"name":"address","nodeType":"ElementaryTypeName","src":"1676:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1675:18:49"},"returnParameters":{"id":9500,"nodeType":"ParameterList","parameters":[],"src":"1728:0:49"},"scope":9554,"src":"1649:178:49","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[9467],"body":{"id":9528,"nodeType":"Block","src":"2083:81:49","statements":[{"expression":{"id":9520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"2093:20:49","subExpression":{"id":9519,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9477,"src":"2100:13:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9521,"nodeType":"ExpressionStatement","src":"2093:20:49"},{"expression":{"arguments":[{"id":9525,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9515,"src":"2148:8:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9522,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2123:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_Ownable2Step_$9554_$","typeString":"type(contract super Ownable2Step)"}},"id":9524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2129:18:49","memberName":"_transferOwnership","nodeType":"MemberAccess","referencedDeclaration":9467,"src":"2123:24:49","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2123:34:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9527,"nodeType":"ExpressionStatement","src":"2123:34:49"}]},"documentation":{"id":9513,"nodeType":"StructuredDocumentation","src":"1833:173:49","text":" @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\n Internal function without access restriction."},"id":9529,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"2020:18:49","nodeType":"FunctionDefinition","overrides":{"id":9517,"nodeType":"OverrideSpecifier","overrides":[],"src":"2074:8:49"},"parameters":{"id":9516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9515,"mutability":"mutable","name":"newOwner","nameLocation":"2047:8:49","nodeType":"VariableDeclaration","scope":9529,"src":"2039:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9514,"name":"address","nodeType":"ElementaryTypeName","src":"2039:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2038:18:49"},"returnParameters":{"id":9518,"nodeType":"ParameterList","parameters":[],"src":"2083:0:49"},"scope":9554,"src":"2011:153:49","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":9552,"nodeType":"Block","src":"2286:187:49","statements":[{"assignments":[9534],"declarations":[{"constant":false,"id":9534,"mutability":"mutable","name":"sender","nameLocation":"2304:6:49","nodeType":"VariableDeclaration","scope":9552,"src":"2296:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9533,"name":"address","nodeType":"ElementaryTypeName","src":"2296:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9537,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":9535,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12330,"src":"2313:10:49","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2313:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2296:29:49"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":9538,"name":"pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9492,"src":"2339:12:49","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":9539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2339:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9540,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9534,"src":"2357:6:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2339:24:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9547,"nodeType":"IfStatement","src":"2335:96:49","trueBody":{"id":9546,"nodeType":"Block","src":"2365:66:49","statements":[{"errorCall":{"arguments":[{"id":9543,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9534,"src":"2413:6:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9542,"name":"OwnableUnauthorizedAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9334,"src":"2386:26:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":9544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2386:34:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9545,"nodeType":"RevertStatement","src":"2379:41:49"}]}},{"expression":{"arguments":[{"id":9549,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9534,"src":"2459:6:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9548,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[9529],"referencedDeclaration":9529,"src":"2440:18:49","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2440:26:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9551,"nodeType":"ExpressionStatement","src":"2440:26:49"}]},"documentation":{"id":9530,"nodeType":"StructuredDocumentation","src":"2170:69:49","text":" @dev The new owner accepts the ownership transfer."},"functionSelector":"79ba5097","id":9553,"implemented":true,"kind":"function","modifiers":[],"name":"acceptOwnership","nameLocation":"2253:15:49","nodeType":"FunctionDefinition","parameters":{"id":9531,"nodeType":"ParameterList","parameters":[],"src":"2268:2:49"},"returnParameters":{"id":9532,"nodeType":"ParameterList","parameters":[],"src":"2286:0:49"},"scope":9554,"src":"2244:229:49","stateMutability":"nonpayable","virtual":true,"visibility":"public"}],"scope":9555,"src":"984:1491:49","usedErrors":[9334,9339],"usedEvents":[9345,9483]}],"src":"107:2369:49"},"id":49},"@openzeppelin/contracts/interfaces/IERC1271.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1271.sol","exportedSymbols":{"IERC1271":[9568]},"id":9569,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9556,"literals":["solidity",">=","0.5",".0"],"nodeType":"PragmaDirective","src":"107:24:50"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1271","contractDependencies":[],"contractKind":"interface","documentation":{"id":9557,"nodeType":"StructuredDocumentation","src":"133:160:50","text":" @dev Interface of the ERC-1271 standard signature validation method for\n contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271]."},"fullyImplemented":false,"id":9568,"linearizedBaseContracts":[9568],"name":"IERC1271","nameLocation":"304:8:50","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9558,"nodeType":"StructuredDocumentation","src":"319:221:50","text":" @dev Should return whether the signature provided is valid for the provided data\n @param hash Hash of the data to be signed\n @param signature Signature byte array associated with `hash`"},"functionSelector":"1626ba7e","id":9567,"implemented":false,"kind":"function","modifiers":[],"name":"isValidSignature","nameLocation":"554:16:50","nodeType":"FunctionDefinition","parameters":{"id":9563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9560,"mutability":"mutable","name":"hash","nameLocation":"579:4:50","nodeType":"VariableDeclaration","scope":9567,"src":"571:12:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9559,"name":"bytes32","nodeType":"ElementaryTypeName","src":"571:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9562,"mutability":"mutable","name":"signature","nameLocation":"600:9:50","nodeType":"VariableDeclaration","scope":9567,"src":"585:24:50","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":9561,"name":"bytes","nodeType":"ElementaryTypeName","src":"585:5:50","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"570:40:50"},"returnParameters":{"id":9566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9565,"mutability":"mutable","name":"magicValue","nameLocation":"641:10:50","nodeType":"VariableDeclaration","scope":9567,"src":"634:17:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":9564,"name":"bytes4","nodeType":"ElementaryTypeName","src":"634:6:50","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"633:19:50"},"scope":9568,"src":"545:108:50","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":9569,"src":"294:361:50","usedErrors":[],"usedEvents":[]}],"src":"107:549:50"},"id":50},"@openzeppelin/contracts/interfaces/IERC1363.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1363.sol","exportedSymbols":{"IERC1363":[9650],"IERC165":[12688],"IERC20":[10558]},"id":9651,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9570,"literals":["solidity",">=","0.6",".2"],"nodeType":"PragmaDirective","src":"107:24:51"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC20.sol","file":"./IERC20.sol","id":9572,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9651,"sourceUnit":9659,"src":"133:36:51","symbolAliases":[{"foreign":{"id":9571,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"141:6:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC165.sol","file":"./IERC165.sol","id":9574,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9651,"sourceUnit":9655,"src":"170:38:51","symbolAliases":[{"foreign":{"id":9573,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12688,"src":"178:7:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9576,"name":"IERC20","nameLocations":["590:6:51"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"590:6:51"},"id":9577,"nodeType":"InheritanceSpecifier","src":"590:6:51"},{"baseName":{"id":9578,"name":"IERC165","nameLocations":["598:7:51"],"nodeType":"IdentifierPath","referencedDeclaration":12688,"src":"598:7:51"},"id":9579,"nodeType":"InheritanceSpecifier","src":"598:7:51"}],"canonicalName":"IERC1363","contractDependencies":[],"contractKind":"interface","documentation":{"id":9575,"nodeType":"StructuredDocumentation","src":"210:357:51","text":" @title IERC1363\n @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction."},"fullyImplemented":false,"id":9650,"linearizedBaseContracts":[9650,12688,10558],"name":"IERC1363","nameLocation":"578:8:51","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9580,"nodeType":"StructuredDocumentation","src":"1148:370:51","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"1296ee62","id":9589,"implemented":false,"kind":"function","modifiers":[],"name":"transferAndCall","nameLocation":"1532:15:51","nodeType":"FunctionDefinition","parameters":{"id":9585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9582,"mutability":"mutable","name":"to","nameLocation":"1556:2:51","nodeType":"VariableDeclaration","scope":9589,"src":"1548:10:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9581,"name":"address","nodeType":"ElementaryTypeName","src":"1548:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9584,"mutability":"mutable","name":"value","nameLocation":"1568:5:51","nodeType":"VariableDeclaration","scope":9589,"src":"1560:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9583,"name":"uint256","nodeType":"ElementaryTypeName","src":"1560:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1547:27:51"},"returnParameters":{"id":9588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9587,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9589,"src":"1593:4:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9586,"name":"bool","nodeType":"ElementaryTypeName","src":"1593:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1592:6:51"},"scope":9650,"src":"1523:76:51","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9590,"nodeType":"StructuredDocumentation","src":"1605:453:51","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @param data Additional data with no specified format, sent in call to `to`.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"4000aea0","id":9601,"implemented":false,"kind":"function","modifiers":[],"name":"transferAndCall","nameLocation":"2072:15:51","nodeType":"FunctionDefinition","parameters":{"id":9597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9592,"mutability":"mutable","name":"to","nameLocation":"2096:2:51","nodeType":"VariableDeclaration","scope":9601,"src":"2088:10:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9591,"name":"address","nodeType":"ElementaryTypeName","src":"2088:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9594,"mutability":"mutable","name":"value","nameLocation":"2108:5:51","nodeType":"VariableDeclaration","scope":9601,"src":"2100:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9593,"name":"uint256","nodeType":"ElementaryTypeName","src":"2100:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9596,"mutability":"mutable","name":"data","nameLocation":"2130:4:51","nodeType":"VariableDeclaration","scope":9601,"src":"2115:19:51","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":9595,"name":"bytes","nodeType":"ElementaryTypeName","src":"2115:5:51","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2087:48:51"},"returnParameters":{"id":9600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9599,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9601,"src":"2154:4:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9598,"name":"bool","nodeType":"ElementaryTypeName","src":"2154:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2153:6:51"},"scope":9650,"src":"2063:97:51","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9602,"nodeType":"StructuredDocumentation","src":"2166:453:51","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param from The address which you want to send tokens from.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"d8fbe994","id":9613,"implemented":false,"kind":"function","modifiers":[],"name":"transferFromAndCall","nameLocation":"2633:19:51","nodeType":"FunctionDefinition","parameters":{"id":9609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9604,"mutability":"mutable","name":"from","nameLocation":"2661:4:51","nodeType":"VariableDeclaration","scope":9613,"src":"2653:12:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9603,"name":"address","nodeType":"ElementaryTypeName","src":"2653:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9606,"mutability":"mutable","name":"to","nameLocation":"2675:2:51","nodeType":"VariableDeclaration","scope":9613,"src":"2667:10:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9605,"name":"address","nodeType":"ElementaryTypeName","src":"2667:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9608,"mutability":"mutable","name":"value","nameLocation":"2687:5:51","nodeType":"VariableDeclaration","scope":9613,"src":"2679:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9607,"name":"uint256","nodeType":"ElementaryTypeName","src":"2679:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2652:41:51"},"returnParameters":{"id":9612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9611,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9613,"src":"2712:4:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9610,"name":"bool","nodeType":"ElementaryTypeName","src":"2712:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2711:6:51"},"scope":9650,"src":"2624:94:51","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9614,"nodeType":"StructuredDocumentation","src":"2724:536:51","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param from The address which you want to send tokens from.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @param data Additional data with no specified format, sent in call to `to`.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"c1d34b89","id":9627,"implemented":false,"kind":"function","modifiers":[],"name":"transferFromAndCall","nameLocation":"3274:19:51","nodeType":"FunctionDefinition","parameters":{"id":9623,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9616,"mutability":"mutable","name":"from","nameLocation":"3302:4:51","nodeType":"VariableDeclaration","scope":9627,"src":"3294:12:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9615,"name":"address","nodeType":"ElementaryTypeName","src":"3294:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9618,"mutability":"mutable","name":"to","nameLocation":"3316:2:51","nodeType":"VariableDeclaration","scope":9627,"src":"3308:10:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9617,"name":"address","nodeType":"ElementaryTypeName","src":"3308:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9620,"mutability":"mutable","name":"value","nameLocation":"3328:5:51","nodeType":"VariableDeclaration","scope":9627,"src":"3320:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9619,"name":"uint256","nodeType":"ElementaryTypeName","src":"3320:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9622,"mutability":"mutable","name":"data","nameLocation":"3350:4:51","nodeType":"VariableDeclaration","scope":9627,"src":"3335:19:51","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":9621,"name":"bytes","nodeType":"ElementaryTypeName","src":"3335:5:51","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3293:62:51"},"returnParameters":{"id":9626,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9625,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9627,"src":"3374:4:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9624,"name":"bool","nodeType":"ElementaryTypeName","src":"3374:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3373:6:51"},"scope":9650,"src":"3265:115:51","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9628,"nodeType":"StructuredDocumentation","src":"3386:390:51","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n @param spender The address which will spend the funds.\n @param value The amount of tokens to be spent.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"3177029f","id":9637,"implemented":false,"kind":"function","modifiers":[],"name":"approveAndCall","nameLocation":"3790:14:51","nodeType":"FunctionDefinition","parameters":{"id":9633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9630,"mutability":"mutable","name":"spender","nameLocation":"3813:7:51","nodeType":"VariableDeclaration","scope":9637,"src":"3805:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9629,"name":"address","nodeType":"ElementaryTypeName","src":"3805:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9632,"mutability":"mutable","name":"value","nameLocation":"3830:5:51","nodeType":"VariableDeclaration","scope":9637,"src":"3822:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9631,"name":"uint256","nodeType":"ElementaryTypeName","src":"3822:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3804:32:51"},"returnParameters":{"id":9636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9635,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9637,"src":"3855:4:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9634,"name":"bool","nodeType":"ElementaryTypeName","src":"3855:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3854:6:51"},"scope":9650,"src":"3781:80:51","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9638,"nodeType":"StructuredDocumentation","src":"3867:478:51","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n @param spender The address which will spend the funds.\n @param value The amount of tokens to be spent.\n @param data Additional data with no specified format, sent in call to `spender`.\n @return A boolean value indicating whether the operation succeeded unless throwing."},"functionSelector":"cae9ca51","id":9649,"implemented":false,"kind":"function","modifiers":[],"name":"approveAndCall","nameLocation":"4359:14:51","nodeType":"FunctionDefinition","parameters":{"id":9645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9640,"mutability":"mutable","name":"spender","nameLocation":"4382:7:51","nodeType":"VariableDeclaration","scope":9649,"src":"4374:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9639,"name":"address","nodeType":"ElementaryTypeName","src":"4374:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9642,"mutability":"mutable","name":"value","nameLocation":"4399:5:51","nodeType":"VariableDeclaration","scope":9649,"src":"4391:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9641,"name":"uint256","nodeType":"ElementaryTypeName","src":"4391:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9644,"mutability":"mutable","name":"data","nameLocation":"4421:4:51","nodeType":"VariableDeclaration","scope":9649,"src":"4406:19:51","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":9643,"name":"bytes","nodeType":"ElementaryTypeName","src":"4406:5:51","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4373:53:51"},"returnParameters":{"id":9648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9647,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9649,"src":"4445:4:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9646,"name":"bool","nodeType":"ElementaryTypeName","src":"4445:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4444:6:51"},"scope":9650,"src":"4350:101:51","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":9651,"src":"568:3885:51","usedErrors":[],"usedEvents":[10492,10501]}],"src":"107:4347:51"},"id":51},"@openzeppelin/contracts/interfaces/IERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC165.sol","exportedSymbols":{"IERC165":[12688]},"id":9655,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9652,"literals":["solidity",">=","0.4",".16"],"nodeType":"PragmaDirective","src":"106:25:52"},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"../utils/introspection/IERC165.sol","id":9654,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9655,"sourceUnit":12689,"src":"133:59:52","symbolAliases":[{"foreign":{"id":9653,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12688,"src":"141:7:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""}],"src":"106:87:52"},"id":52},"@openzeppelin/contracts/interfaces/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC20.sol","exportedSymbols":{"IERC20":[10558]},"id":9659,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9656,"literals":["solidity",">=","0.4",".16"],"nodeType":"PragmaDirective","src":"105:25:53"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../token/ERC20/IERC20.sol","id":9658,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9659,"sourceUnit":10559,"src":"132:49:53","symbolAliases":[{"foreign":{"id":9657,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"140:6:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""}],"src":"105:77:53"},"id":53},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","exportedSymbols":{"IERC20":[10558],"IERC20Metadata":[10584],"IERC4626":[9828]},"id":9829,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9660,"literals":["solidity",">=","0.6",".2"],"nodeType":"PragmaDirective","src":"107:24:54"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../token/ERC20/IERC20.sol","id":9662,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9829,"sourceUnit":10559,"src":"133:49:54","symbolAliases":[{"foreign":{"id":9661,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"141:6:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"../token/ERC20/extensions/IERC20Metadata.sol","id":9664,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9829,"sourceUnit":10585,"src":"183:76:54","symbolAliases":[{"foreign":{"id":9663,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10584,"src":"191:14:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9666,"name":"IERC20","nameLocations":["421:6:54"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"421:6:54"},"id":9667,"nodeType":"InheritanceSpecifier","src":"421:6:54"},{"baseName":{"id":9668,"name":"IERC20Metadata","nameLocations":["429:14:54"],"nodeType":"IdentifierPath","referencedDeclaration":10584,"src":"429:14:54"},"id":9669,"nodeType":"InheritanceSpecifier","src":"429:14:54"}],"canonicalName":"IERC4626","contractDependencies":[],"contractKind":"interface","documentation":{"id":9665,"nodeType":"StructuredDocumentation","src":"261:137:54","text":" @dev Interface of the ERC-4626 \"Tokenized Vault Standard\", as defined in\n https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]."},"fullyImplemented":false,"id":9828,"linearizedBaseContracts":[9828,10584,10558],"name":"IERC4626","nameLocation":"409:8:54","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"dcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7","id":9679,"name":"Deposit","nameLocation":"456:7:54","nodeType":"EventDefinition","parameters":{"id":9678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9671,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"480:6:54","nodeType":"VariableDeclaration","scope":9679,"src":"464:22:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9670,"name":"address","nodeType":"ElementaryTypeName","src":"464:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9673,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"504:5:54","nodeType":"VariableDeclaration","scope":9679,"src":"488:21:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9672,"name":"address","nodeType":"ElementaryTypeName","src":"488:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9675,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"519:6:54","nodeType":"VariableDeclaration","scope":9679,"src":"511:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9674,"name":"uint256","nodeType":"ElementaryTypeName","src":"511:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9677,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"535:6:54","nodeType":"VariableDeclaration","scope":9679,"src":"527:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9676,"name":"uint256","nodeType":"ElementaryTypeName","src":"527:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"463:79:54"},"src":"450:93:54"},{"anonymous":false,"eventSelector":"fbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db","id":9691,"name":"Withdraw","nameLocation":"555:8:54","nodeType":"EventDefinition","parameters":{"id":9690,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9681,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"589:6:54","nodeType":"VariableDeclaration","scope":9691,"src":"573:22:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9680,"name":"address","nodeType":"ElementaryTypeName","src":"573:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9683,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"621:8:54","nodeType":"VariableDeclaration","scope":9691,"src":"605:24:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9682,"name":"address","nodeType":"ElementaryTypeName","src":"605:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9685,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"655:5:54","nodeType":"VariableDeclaration","scope":9691,"src":"639:21:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9684,"name":"address","nodeType":"ElementaryTypeName","src":"639:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9687,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"678:6:54","nodeType":"VariableDeclaration","scope":9691,"src":"670:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9686,"name":"uint256","nodeType":"ElementaryTypeName","src":"670:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9689,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"702:6:54","nodeType":"VariableDeclaration","scope":9691,"src":"694:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9688,"name":"uint256","nodeType":"ElementaryTypeName","src":"694:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"563:151:54"},"src":"549:166:54"},{"documentation":{"id":9692,"nodeType":"StructuredDocumentation","src":"721:207:54","text":" @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n - MUST be an ERC-20 token contract.\n - MUST NOT revert."},"functionSelector":"38d52e0f","id":9697,"implemented":false,"kind":"function","modifiers":[],"name":"asset","nameLocation":"942:5:54","nodeType":"FunctionDefinition","parameters":{"id":9693,"nodeType":"ParameterList","parameters":[],"src":"947:2:54"},"returnParameters":{"id":9696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9695,"mutability":"mutable","name":"assetTokenAddress","nameLocation":"981:17:54","nodeType":"VariableDeclaration","scope":9697,"src":"973:25:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9694,"name":"address","nodeType":"ElementaryTypeName","src":"973:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"972:27:54"},"scope":9828,"src":"933:67:54","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9698,"nodeType":"StructuredDocumentation","src":"1006:286:54","text":" @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n - SHOULD include any compounding that occurs from yield.\n - MUST be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT revert."},"functionSelector":"01e1d114","id":9703,"implemented":false,"kind":"function","modifiers":[],"name":"totalAssets","nameLocation":"1306:11:54","nodeType":"FunctionDefinition","parameters":{"id":9699,"nodeType":"ParameterList","parameters":[],"src":"1317:2:54"},"returnParameters":{"id":9702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9701,"mutability":"mutable","name":"totalManagedAssets","nameLocation":"1351:18:54","nodeType":"VariableDeclaration","scope":9703,"src":"1343:26:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9700,"name":"uint256","nodeType":"ElementaryTypeName","src":"1343:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1342:28:54"},"scope":9828,"src":"1297:74:54","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9704,"nodeType":"StructuredDocumentation","src":"1377:720:54","text":" @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"c6e6f592","id":9711,"implemented":false,"kind":"function","modifiers":[],"name":"convertToShares","nameLocation":"2111:15:54","nodeType":"FunctionDefinition","parameters":{"id":9707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9706,"mutability":"mutable","name":"assets","nameLocation":"2135:6:54","nodeType":"VariableDeclaration","scope":9711,"src":"2127:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9705,"name":"uint256","nodeType":"ElementaryTypeName","src":"2127:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2126:16:54"},"returnParameters":{"id":9710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9709,"mutability":"mutable","name":"shares","nameLocation":"2174:6:54","nodeType":"VariableDeclaration","scope":9711,"src":"2166:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9708,"name":"uint256","nodeType":"ElementaryTypeName","src":"2166:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2165:16:54"},"scope":9828,"src":"2102:80:54","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9712,"nodeType":"StructuredDocumentation","src":"2188:720:54","text":" @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"07a2d13a","id":9719,"implemented":false,"kind":"function","modifiers":[],"name":"convertToAssets","nameLocation":"2922:15:54","nodeType":"FunctionDefinition","parameters":{"id":9715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9714,"mutability":"mutable","name":"shares","nameLocation":"2946:6:54","nodeType":"VariableDeclaration","scope":9719,"src":"2938:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9713,"name":"uint256","nodeType":"ElementaryTypeName","src":"2938:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2937:16:54"},"returnParameters":{"id":9718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9717,"mutability":"mutable","name":"assets","nameLocation":"2985:6:54","nodeType":"VariableDeclaration","scope":9719,"src":"2977:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9716,"name":"uint256","nodeType":"ElementaryTypeName","src":"2977:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2976:16:54"},"scope":9828,"src":"2913:80:54","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9720,"nodeType":"StructuredDocumentation","src":"2999:386:54","text":" @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n through a deposit call.\n - MUST return a limited value if receiver is subject to some deposit limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n - MUST NOT revert."},"functionSelector":"402d267d","id":9727,"implemented":false,"kind":"function","modifiers":[],"name":"maxDeposit","nameLocation":"3399:10:54","nodeType":"FunctionDefinition","parameters":{"id":9723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9722,"mutability":"mutable","name":"receiver","nameLocation":"3418:8:54","nodeType":"VariableDeclaration","scope":9727,"src":"3410:16:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9721,"name":"address","nodeType":"ElementaryTypeName","src":"3410:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3409:18:54"},"returnParameters":{"id":9726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9725,"mutability":"mutable","name":"maxAssets","nameLocation":"3459:9:54","nodeType":"VariableDeclaration","scope":9727,"src":"3451:17:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9724,"name":"uint256","nodeType":"ElementaryTypeName","src":"3451:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3450:19:54"},"scope":9828,"src":"3390:80:54","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9728,"nodeType":"StructuredDocumentation","src":"3476:1012:54","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n current on-chain conditions.\n - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n in the same transaction.\n - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n deposit would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"ef8b30f7","id":9735,"implemented":false,"kind":"function","modifiers":[],"name":"previewDeposit","nameLocation":"4502:14:54","nodeType":"FunctionDefinition","parameters":{"id":9731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9730,"mutability":"mutable","name":"assets","nameLocation":"4525:6:54","nodeType":"VariableDeclaration","scope":9735,"src":"4517:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9729,"name":"uint256","nodeType":"ElementaryTypeName","src":"4517:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4516:16:54"},"returnParameters":{"id":9734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9733,"mutability":"mutable","name":"shares","nameLocation":"4564:6:54","nodeType":"VariableDeclaration","scope":9735,"src":"4556:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9732,"name":"uint256","nodeType":"ElementaryTypeName","src":"4556:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4555:16:54"},"scope":9828,"src":"4493:79:54","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9736,"nodeType":"StructuredDocumentation","src":"4578:651:54","text":" @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n deposit execution, and are accounted for during deposit.\n - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"6e553f65","id":9745,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"5243:7:54","nodeType":"FunctionDefinition","parameters":{"id":9741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9738,"mutability":"mutable","name":"assets","nameLocation":"5259:6:54","nodeType":"VariableDeclaration","scope":9745,"src":"5251:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9737,"name":"uint256","nodeType":"ElementaryTypeName","src":"5251:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9740,"mutability":"mutable","name":"receiver","nameLocation":"5275:8:54","nodeType":"VariableDeclaration","scope":9745,"src":"5267:16:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9739,"name":"address","nodeType":"ElementaryTypeName","src":"5267:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5250:34:54"},"returnParameters":{"id":9744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9743,"mutability":"mutable","name":"shares","nameLocation":"5311:6:54","nodeType":"VariableDeclaration","scope":9745,"src":"5303:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9742,"name":"uint256","nodeType":"ElementaryTypeName","src":"5303:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5302:16:54"},"scope":9828,"src":"5234:85:54","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9746,"nodeType":"StructuredDocumentation","src":"5325:341:54","text":" @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n - MUST return a limited value if receiver is subject to some mint limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n - MUST NOT revert."},"functionSelector":"c63d75b6","id":9753,"implemented":false,"kind":"function","modifiers":[],"name":"maxMint","nameLocation":"5680:7:54","nodeType":"FunctionDefinition","parameters":{"id":9749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9748,"mutability":"mutable","name":"receiver","nameLocation":"5696:8:54","nodeType":"VariableDeclaration","scope":9753,"src":"5688:16:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9747,"name":"address","nodeType":"ElementaryTypeName","src":"5688:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5687:18:54"},"returnParameters":{"id":9752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9751,"mutability":"mutable","name":"maxShares","nameLocation":"5737:9:54","nodeType":"VariableDeclaration","scope":9753,"src":"5729:17:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9750,"name":"uint256","nodeType":"ElementaryTypeName","src":"5729:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5728:19:54"},"scope":9828,"src":"5671:77:54","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9754,"nodeType":"StructuredDocumentation","src":"5754:984:54","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n same transaction.\n - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by minting."},"functionSelector":"b3d7f6b9","id":9761,"implemented":false,"kind":"function","modifiers":[],"name":"previewMint","nameLocation":"6752:11:54","nodeType":"FunctionDefinition","parameters":{"id":9757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9756,"mutability":"mutable","name":"shares","nameLocation":"6772:6:54","nodeType":"VariableDeclaration","scope":9761,"src":"6764:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9755,"name":"uint256","nodeType":"ElementaryTypeName","src":"6764:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6763:16:54"},"returnParameters":{"id":9760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9759,"mutability":"mutable","name":"assets","nameLocation":"6811:6:54","nodeType":"VariableDeclaration","scope":9761,"src":"6803:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9758,"name":"uint256","nodeType":"ElementaryTypeName","src":"6803:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6802:16:54"},"scope":9828,"src":"6743:76:54","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9762,"nodeType":"StructuredDocumentation","src":"6825:642:54","text":" @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n execution, and are accounted for during mint.\n - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"94bf804d","id":9771,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"7481:4:54","nodeType":"FunctionDefinition","parameters":{"id":9767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9764,"mutability":"mutable","name":"shares","nameLocation":"7494:6:54","nodeType":"VariableDeclaration","scope":9771,"src":"7486:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9763,"name":"uint256","nodeType":"ElementaryTypeName","src":"7486:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9766,"mutability":"mutable","name":"receiver","nameLocation":"7510:8:54","nodeType":"VariableDeclaration","scope":9771,"src":"7502:16:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9765,"name":"address","nodeType":"ElementaryTypeName","src":"7502:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7485:34:54"},"returnParameters":{"id":9770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9769,"mutability":"mutable","name":"assets","nameLocation":"7546:6:54","nodeType":"VariableDeclaration","scope":9771,"src":"7538:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9768,"name":"uint256","nodeType":"ElementaryTypeName","src":"7538:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7537:16:54"},"scope":9828,"src":"7472:82:54","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9772,"nodeType":"StructuredDocumentation","src":"7560:293:54","text":" @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n Vault, through a withdraw call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"ce96cb77","id":9779,"implemented":false,"kind":"function","modifiers":[],"name":"maxWithdraw","nameLocation":"7867:11:54","nodeType":"FunctionDefinition","parameters":{"id":9775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9774,"mutability":"mutable","name":"owner","nameLocation":"7887:5:54","nodeType":"VariableDeclaration","scope":9779,"src":"7879:13:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9773,"name":"address","nodeType":"ElementaryTypeName","src":"7879:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7878:15:54"},"returnParameters":{"id":9778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9777,"mutability":"mutable","name":"maxAssets","nameLocation":"7925:9:54","nodeType":"VariableDeclaration","scope":9779,"src":"7917:17:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9776,"name":"uint256","nodeType":"ElementaryTypeName","src":"7917:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7916:19:54"},"scope":9828,"src":"7858:78:54","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9780,"nodeType":"StructuredDocumentation","src":"7942:1034:54","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n given current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n called\n in the same transaction.\n - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n the withdrawal would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"0a28a477","id":9787,"implemented":false,"kind":"function","modifiers":[],"name":"previewWithdraw","nameLocation":"8990:15:54","nodeType":"FunctionDefinition","parameters":{"id":9783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9782,"mutability":"mutable","name":"assets","nameLocation":"9014:6:54","nodeType":"VariableDeclaration","scope":9787,"src":"9006:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9781,"name":"uint256","nodeType":"ElementaryTypeName","src":"9006:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9005:16:54"},"returnParameters":{"id":9786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9785,"mutability":"mutable","name":"shares","nameLocation":"9053:6:54","nodeType":"VariableDeclaration","scope":9787,"src":"9045:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9784,"name":"uint256","nodeType":"ElementaryTypeName","src":"9045:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9044:16:54"},"scope":9828,"src":"8981:80:54","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9788,"nodeType":"StructuredDocumentation","src":"9067:670:54","text":" @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n withdraw execution, and are accounted for during withdraw.\n - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"b460af94","id":9799,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"9751:8:54","nodeType":"FunctionDefinition","parameters":{"id":9795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9790,"mutability":"mutable","name":"assets","nameLocation":"9768:6:54","nodeType":"VariableDeclaration","scope":9799,"src":"9760:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9789,"name":"uint256","nodeType":"ElementaryTypeName","src":"9760:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9792,"mutability":"mutable","name":"receiver","nameLocation":"9784:8:54","nodeType":"VariableDeclaration","scope":9799,"src":"9776:16:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9791,"name":"address","nodeType":"ElementaryTypeName","src":"9776:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9794,"mutability":"mutable","name":"owner","nameLocation":"9802:5:54","nodeType":"VariableDeclaration","scope":9799,"src":"9794:13:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9793,"name":"address","nodeType":"ElementaryTypeName","src":"9794:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9759:49:54"},"returnParameters":{"id":9798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9797,"mutability":"mutable","name":"shares","nameLocation":"9835:6:54","nodeType":"VariableDeclaration","scope":9799,"src":"9827:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9796,"name":"uint256","nodeType":"ElementaryTypeName","src":"9827:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9826:16:54"},"scope":9828,"src":"9742:101:54","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":9800,"nodeType":"StructuredDocumentation","src":"9849:381:54","text":" @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n through a redeem call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"d905777e","id":9807,"implemented":false,"kind":"function","modifiers":[],"name":"maxRedeem","nameLocation":"10244:9:54","nodeType":"FunctionDefinition","parameters":{"id":9803,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9802,"mutability":"mutable","name":"owner","nameLocation":"10262:5:54","nodeType":"VariableDeclaration","scope":9807,"src":"10254:13:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9801,"name":"address","nodeType":"ElementaryTypeName","src":"10254:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10253:15:54"},"returnParameters":{"id":9806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9805,"mutability":"mutable","name":"maxShares","nameLocation":"10300:9:54","nodeType":"VariableDeclaration","scope":9807,"src":"10292:17:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9804,"name":"uint256","nodeType":"ElementaryTypeName","src":"10292:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10291:19:54"},"scope":9828,"src":"10235:76:54","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9808,"nodeType":"StructuredDocumentation","src":"10317:1009:54","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their redemption at the current block,\n given current on-chain conditions.\n - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n same transaction.\n - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n redemption would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by redeeming."},"functionSelector":"4cdad506","id":9815,"implemented":false,"kind":"function","modifiers":[],"name":"previewRedeem","nameLocation":"11340:13:54","nodeType":"FunctionDefinition","parameters":{"id":9811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9810,"mutability":"mutable","name":"shares","nameLocation":"11362:6:54","nodeType":"VariableDeclaration","scope":9815,"src":"11354:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9809,"name":"uint256","nodeType":"ElementaryTypeName","src":"11354:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11353:16:54"},"returnParameters":{"id":9814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9813,"mutability":"mutable","name":"assets","nameLocation":"11401:6:54","nodeType":"VariableDeclaration","scope":9815,"src":"11393:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9812,"name":"uint256","nodeType":"ElementaryTypeName","src":"11393:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11392:16:54"},"scope":9828,"src":"11331:78:54","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":9816,"nodeType":"StructuredDocumentation","src":"11415:661:54","text":" @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n redeem execution, and are accounted for during redeem.\n - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"ba087652","id":9827,"implemented":false,"kind":"function","modifiers":[],"name":"redeem","nameLocation":"12090:6:54","nodeType":"FunctionDefinition","parameters":{"id":9823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9818,"mutability":"mutable","name":"shares","nameLocation":"12105:6:54","nodeType":"VariableDeclaration","scope":9827,"src":"12097:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9817,"name":"uint256","nodeType":"ElementaryTypeName","src":"12097:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9820,"mutability":"mutable","name":"receiver","nameLocation":"12121:8:54","nodeType":"VariableDeclaration","scope":9827,"src":"12113:16:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9819,"name":"address","nodeType":"ElementaryTypeName","src":"12113:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9822,"mutability":"mutable","name":"owner","nameLocation":"12139:5:54","nodeType":"VariableDeclaration","scope":9827,"src":"12131:13:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9821,"name":"address","nodeType":"ElementaryTypeName","src":"12131:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12096:49:54"},"returnParameters":{"id":9826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9825,"mutability":"mutable","name":"assets","nameLocation":"12172:6:54","nodeType":"VariableDeclaration","scope":9827,"src":"12164:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9824,"name":"uint256","nodeType":"ElementaryTypeName","src":"12164:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12163:16:54"},"scope":9828,"src":"12081:99:54","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":9829,"src":"399:11783:54","usedErrors":[],"usedEvents":[9679,9691,10492,10501]}],"src":"107:12076:54"},"id":54},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","exportedSymbols":{"IERC1155Errors":[9965],"IERC20Errors":[9870],"IERC721Errors":[9918]},"id":9966,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9830,"literals":["solidity",">=","0.8",".4"],"nodeType":"PragmaDirective","src":"112:24:55"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":9831,"nodeType":"StructuredDocumentation","src":"138:141:55","text":" @dev Standard ERC-20 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens."},"fullyImplemented":true,"id":9870,"linearizedBaseContracts":[9870],"name":"IERC20Errors","nameLocation":"290:12:55","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9832,"nodeType":"StructuredDocumentation","src":"309:309:55","text":" @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer."},"errorSelector":"e450d38c","id":9840,"name":"ERC20InsufficientBalance","nameLocation":"629:24:55","nodeType":"ErrorDefinition","parameters":{"id":9839,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9834,"mutability":"mutable","name":"sender","nameLocation":"662:6:55","nodeType":"VariableDeclaration","scope":9840,"src":"654:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9833,"name":"address","nodeType":"ElementaryTypeName","src":"654:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9836,"mutability":"mutable","name":"balance","nameLocation":"678:7:55","nodeType":"VariableDeclaration","scope":9840,"src":"670:15:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9835,"name":"uint256","nodeType":"ElementaryTypeName","src":"670:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9838,"mutability":"mutable","name":"needed","nameLocation":"695:6:55","nodeType":"VariableDeclaration","scope":9840,"src":"687:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9837,"name":"uint256","nodeType":"ElementaryTypeName","src":"687:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"653:49:55"},"src":"623:80:55"},{"documentation":{"id":9841,"nodeType":"StructuredDocumentation","src":"709:152:55","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"96c6fd1e","id":9845,"name":"ERC20InvalidSender","nameLocation":"872:18:55","nodeType":"ErrorDefinition","parameters":{"id":9844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9843,"mutability":"mutable","name":"sender","nameLocation":"899:6:55","nodeType":"VariableDeclaration","scope":9845,"src":"891:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9842,"name":"address","nodeType":"ElementaryTypeName","src":"891:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"890:16:55"},"src":"866:41:55"},{"documentation":{"id":9846,"nodeType":"StructuredDocumentation","src":"913:159:55","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"ec442f05","id":9850,"name":"ERC20InvalidReceiver","nameLocation":"1083:20:55","nodeType":"ErrorDefinition","parameters":{"id":9849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9848,"mutability":"mutable","name":"receiver","nameLocation":"1112:8:55","nodeType":"VariableDeclaration","scope":9850,"src":"1104:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9847,"name":"address","nodeType":"ElementaryTypeName","src":"1104:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1103:18:55"},"src":"1077:45:55"},{"documentation":{"id":9851,"nodeType":"StructuredDocumentation","src":"1128:345:55","text":" @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n @param spender Address that may be allowed to operate on tokens without being their owner.\n @param allowance Amount of tokens a `spender` is allowed to operate with.\n @param needed Minimum amount required to perform a transfer."},"errorSelector":"fb8f41b2","id":9859,"name":"ERC20InsufficientAllowance","nameLocation":"1484:26:55","nodeType":"ErrorDefinition","parameters":{"id":9858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9853,"mutability":"mutable","name":"spender","nameLocation":"1519:7:55","nodeType":"VariableDeclaration","scope":9859,"src":"1511:15:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9852,"name":"address","nodeType":"ElementaryTypeName","src":"1511:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9855,"mutability":"mutable","name":"allowance","nameLocation":"1536:9:55","nodeType":"VariableDeclaration","scope":9859,"src":"1528:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9854,"name":"uint256","nodeType":"ElementaryTypeName","src":"1528:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9857,"mutability":"mutable","name":"needed","nameLocation":"1555:6:55","nodeType":"VariableDeclaration","scope":9859,"src":"1547:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9856,"name":"uint256","nodeType":"ElementaryTypeName","src":"1547:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1510:52:55"},"src":"1478:85:55"},{"documentation":{"id":9860,"nodeType":"StructuredDocumentation","src":"1569:174:55","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"e602df05","id":9864,"name":"ERC20InvalidApprover","nameLocation":"1754:20:55","nodeType":"ErrorDefinition","parameters":{"id":9863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9862,"mutability":"mutable","name":"approver","nameLocation":"1783:8:55","nodeType":"VariableDeclaration","scope":9864,"src":"1775:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9861,"name":"address","nodeType":"ElementaryTypeName","src":"1775:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1774:18:55"},"src":"1748:45:55"},{"documentation":{"id":9865,"nodeType":"StructuredDocumentation","src":"1799:195:55","text":" @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n @param spender Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"94280d62","id":9869,"name":"ERC20InvalidSpender","nameLocation":"2005:19:55","nodeType":"ErrorDefinition","parameters":{"id":9868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9867,"mutability":"mutable","name":"spender","nameLocation":"2033:7:55","nodeType":"VariableDeclaration","scope":9869,"src":"2025:15:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9866,"name":"address","nodeType":"ElementaryTypeName","src":"2025:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2024:17:55"},"src":"1999:43:55"}],"scope":9966,"src":"280:1764:55","usedErrors":[9840,9845,9850,9859,9864,9869],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"IERC721Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":9871,"nodeType":"StructuredDocumentation","src":"2046:143:55","text":" @dev Standard ERC-721 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens."},"fullyImplemented":true,"id":9918,"linearizedBaseContracts":[9918],"name":"IERC721Errors","nameLocation":"2200:13:55","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9872,"nodeType":"StructuredDocumentation","src":"2220:219:55","text":" @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\n Used in balance queries.\n @param owner Address of the current owner of a token."},"errorSelector":"89c62b64","id":9876,"name":"ERC721InvalidOwner","nameLocation":"2450:18:55","nodeType":"ErrorDefinition","parameters":{"id":9875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9874,"mutability":"mutable","name":"owner","nameLocation":"2477:5:55","nodeType":"VariableDeclaration","scope":9876,"src":"2469:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9873,"name":"address","nodeType":"ElementaryTypeName","src":"2469:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2468:15:55"},"src":"2444:40:55"},{"documentation":{"id":9877,"nodeType":"StructuredDocumentation","src":"2490:132:55","text":" @dev Indicates a `tokenId` whose `owner` is the zero address.\n @param tokenId Identifier number of a token."},"errorSelector":"7e273289","id":9881,"name":"ERC721NonexistentToken","nameLocation":"2633:22:55","nodeType":"ErrorDefinition","parameters":{"id":9880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9879,"mutability":"mutable","name":"tokenId","nameLocation":"2664:7:55","nodeType":"VariableDeclaration","scope":9881,"src":"2656:15:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9878,"name":"uint256","nodeType":"ElementaryTypeName","src":"2656:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2655:17:55"},"src":"2627:46:55"},{"documentation":{"id":9882,"nodeType":"StructuredDocumentation","src":"2679:289:55","text":" @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param tokenId Identifier number of a token.\n @param owner Address of the current owner of a token."},"errorSelector":"64283d7b","id":9890,"name":"ERC721IncorrectOwner","nameLocation":"2979:20:55","nodeType":"ErrorDefinition","parameters":{"id":9889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9884,"mutability":"mutable","name":"sender","nameLocation":"3008:6:55","nodeType":"VariableDeclaration","scope":9890,"src":"3000:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9883,"name":"address","nodeType":"ElementaryTypeName","src":"3000:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9886,"mutability":"mutable","name":"tokenId","nameLocation":"3024:7:55","nodeType":"VariableDeclaration","scope":9890,"src":"3016:15:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9885,"name":"uint256","nodeType":"ElementaryTypeName","src":"3016:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9888,"mutability":"mutable","name":"owner","nameLocation":"3041:5:55","nodeType":"VariableDeclaration","scope":9890,"src":"3033:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9887,"name":"address","nodeType":"ElementaryTypeName","src":"3033:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2999:48:55"},"src":"2973:75:55"},{"documentation":{"id":9891,"nodeType":"StructuredDocumentation","src":"3054:152:55","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"73c6ac6e","id":9895,"name":"ERC721InvalidSender","nameLocation":"3217:19:55","nodeType":"ErrorDefinition","parameters":{"id":9894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9893,"mutability":"mutable","name":"sender","nameLocation":"3245:6:55","nodeType":"VariableDeclaration","scope":9895,"src":"3237:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9892,"name":"address","nodeType":"ElementaryTypeName","src":"3237:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3236:16:55"},"src":"3211:42:55"},{"documentation":{"id":9896,"nodeType":"StructuredDocumentation","src":"3259:159:55","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"64a0ae92","id":9900,"name":"ERC721InvalidReceiver","nameLocation":"3429:21:55","nodeType":"ErrorDefinition","parameters":{"id":9899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9898,"mutability":"mutable","name":"receiver","nameLocation":"3459:8:55","nodeType":"VariableDeclaration","scope":9900,"src":"3451:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9897,"name":"address","nodeType":"ElementaryTypeName","src":"3451:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3450:18:55"},"src":"3423:46:55"},{"documentation":{"id":9901,"nodeType":"StructuredDocumentation","src":"3475:247:55","text":" @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param tokenId Identifier number of a token."},"errorSelector":"177e802f","id":9907,"name":"ERC721InsufficientApproval","nameLocation":"3733:26:55","nodeType":"ErrorDefinition","parameters":{"id":9906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9903,"mutability":"mutable","name":"operator","nameLocation":"3768:8:55","nodeType":"VariableDeclaration","scope":9907,"src":"3760:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9902,"name":"address","nodeType":"ElementaryTypeName","src":"3760:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9905,"mutability":"mutable","name":"tokenId","nameLocation":"3786:7:55","nodeType":"VariableDeclaration","scope":9907,"src":"3778:15:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9904,"name":"uint256","nodeType":"ElementaryTypeName","src":"3778:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3759:35:55"},"src":"3727:68:55"},{"documentation":{"id":9908,"nodeType":"StructuredDocumentation","src":"3801:174:55","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"a9fbf51f","id":9912,"name":"ERC721InvalidApprover","nameLocation":"3986:21:55","nodeType":"ErrorDefinition","parameters":{"id":9911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9910,"mutability":"mutable","name":"approver","nameLocation":"4016:8:55","nodeType":"VariableDeclaration","scope":9912,"src":"4008:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9909,"name":"address","nodeType":"ElementaryTypeName","src":"4008:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4007:18:55"},"src":"3980:46:55"},{"documentation":{"id":9913,"nodeType":"StructuredDocumentation","src":"4032:197:55","text":" @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"5b08ba18","id":9917,"name":"ERC721InvalidOperator","nameLocation":"4240:21:55","nodeType":"ErrorDefinition","parameters":{"id":9916,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9915,"mutability":"mutable","name":"operator","nameLocation":"4270:8:55","nodeType":"VariableDeclaration","scope":9917,"src":"4262:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9914,"name":"address","nodeType":"ElementaryTypeName","src":"4262:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4261:18:55"},"src":"4234:46:55"}],"scope":9966,"src":"2190:2092:55","usedErrors":[9876,9881,9890,9895,9900,9907,9912,9917],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1155Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":9919,"nodeType":"StructuredDocumentation","src":"4284:145:55","text":" @dev Standard ERC-1155 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens."},"fullyImplemented":true,"id":9965,"linearizedBaseContracts":[9965],"name":"IERC1155Errors","nameLocation":"4440:14:55","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9920,"nodeType":"StructuredDocumentation","src":"4461:361:55","text":" @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer.\n @param tokenId Identifier number of a token."},"errorSelector":"03dee4c5","id":9930,"name":"ERC1155InsufficientBalance","nameLocation":"4833:26:55","nodeType":"ErrorDefinition","parameters":{"id":9929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9922,"mutability":"mutable","name":"sender","nameLocation":"4868:6:55","nodeType":"VariableDeclaration","scope":9930,"src":"4860:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9921,"name":"address","nodeType":"ElementaryTypeName","src":"4860:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9924,"mutability":"mutable","name":"balance","nameLocation":"4884:7:55","nodeType":"VariableDeclaration","scope":9930,"src":"4876:15:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9923,"name":"uint256","nodeType":"ElementaryTypeName","src":"4876:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9926,"mutability":"mutable","name":"needed","nameLocation":"4901:6:55","nodeType":"VariableDeclaration","scope":9930,"src":"4893:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9925,"name":"uint256","nodeType":"ElementaryTypeName","src":"4893:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9928,"mutability":"mutable","name":"tokenId","nameLocation":"4917:7:55","nodeType":"VariableDeclaration","scope":9930,"src":"4909:15:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9927,"name":"uint256","nodeType":"ElementaryTypeName","src":"4909:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4859:66:55"},"src":"4827:99:55"},{"documentation":{"id":9931,"nodeType":"StructuredDocumentation","src":"4932:152:55","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"01a83514","id":9935,"name":"ERC1155InvalidSender","nameLocation":"5095:20:55","nodeType":"ErrorDefinition","parameters":{"id":9934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9933,"mutability":"mutable","name":"sender","nameLocation":"5124:6:55","nodeType":"VariableDeclaration","scope":9935,"src":"5116:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9932,"name":"address","nodeType":"ElementaryTypeName","src":"5116:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5115:16:55"},"src":"5089:43:55"},{"documentation":{"id":9936,"nodeType":"StructuredDocumentation","src":"5138:159:55","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"57f447ce","id":9940,"name":"ERC1155InvalidReceiver","nameLocation":"5308:22:55","nodeType":"ErrorDefinition","parameters":{"id":9939,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9938,"mutability":"mutable","name":"receiver","nameLocation":"5339:8:55","nodeType":"VariableDeclaration","scope":9940,"src":"5331:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9937,"name":"address","nodeType":"ElementaryTypeName","src":"5331:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5330:18:55"},"src":"5302:47:55"},{"documentation":{"id":9941,"nodeType":"StructuredDocumentation","src":"5355:256:55","text":" @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param owner Address of the current owner of a token."},"errorSelector":"e237d922","id":9947,"name":"ERC1155MissingApprovalForAll","nameLocation":"5622:28:55","nodeType":"ErrorDefinition","parameters":{"id":9946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9943,"mutability":"mutable","name":"operator","nameLocation":"5659:8:55","nodeType":"VariableDeclaration","scope":9947,"src":"5651:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9942,"name":"address","nodeType":"ElementaryTypeName","src":"5651:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9945,"mutability":"mutable","name":"owner","nameLocation":"5677:5:55","nodeType":"VariableDeclaration","scope":9947,"src":"5669:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9944,"name":"address","nodeType":"ElementaryTypeName","src":"5669:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5650:33:55"},"src":"5616:68:55"},{"documentation":{"id":9948,"nodeType":"StructuredDocumentation","src":"5690:174:55","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"3e31884e","id":9952,"name":"ERC1155InvalidApprover","nameLocation":"5875:22:55","nodeType":"ErrorDefinition","parameters":{"id":9951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9950,"mutability":"mutable","name":"approver","nameLocation":"5906:8:55","nodeType":"VariableDeclaration","scope":9952,"src":"5898:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9949,"name":"address","nodeType":"ElementaryTypeName","src":"5898:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5897:18:55"},"src":"5869:47:55"},{"documentation":{"id":9953,"nodeType":"StructuredDocumentation","src":"5922:197:55","text":" @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"ced3e100","id":9957,"name":"ERC1155InvalidOperator","nameLocation":"6130:22:55","nodeType":"ErrorDefinition","parameters":{"id":9956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9955,"mutability":"mutable","name":"operator","nameLocation":"6161:8:55","nodeType":"VariableDeclaration","scope":9957,"src":"6153:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9954,"name":"address","nodeType":"ElementaryTypeName","src":"6153:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6152:18:55"},"src":"6124:47:55"},{"documentation":{"id":9958,"nodeType":"StructuredDocumentation","src":"6177:280:55","text":" @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n Used in batch transfers.\n @param idsLength Length of the array of token identifiers\n @param valuesLength Length of the array of token amounts"},"errorSelector":"5b059991","id":9964,"name":"ERC1155InvalidArrayLength","nameLocation":"6468:25:55","nodeType":"ErrorDefinition","parameters":{"id":9963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9960,"mutability":"mutable","name":"idsLength","nameLocation":"6502:9:55","nodeType":"VariableDeclaration","scope":9964,"src":"6494:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9959,"name":"uint256","nodeType":"ElementaryTypeName","src":"6494:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9962,"mutability":"mutable","name":"valuesLength","nameLocation":"6521:12:55","nodeType":"VariableDeclaration","scope":9964,"src":"6513:20:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9961,"name":"uint256","nodeType":"ElementaryTypeName","src":"6513:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6493:41:55"},"src":"6462:73:55"}],"scope":9966,"src":"4430:2107:55","usedErrors":[9930,9935,9940,9947,9952,9957,9964],"usedEvents":[]}],"src":"112:6426:55"},"id":55},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/ERC20.sol","exportedSymbols":{"Context":[12348],"ERC20":[10480],"IERC20":[10558],"IERC20Errors":[9870],"IERC20Metadata":[10584]},"id":10481,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9967,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"105:24:56"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"./IERC20.sol","id":9969,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10481,"sourceUnit":10559,"src":"131:36:56","symbolAliases":[{"foreign":{"id":9968,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"139:6:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"./extensions/IERC20Metadata.sol","id":9971,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10481,"sourceUnit":10585,"src":"168:63:56","symbolAliases":[{"foreign":{"id":9970,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10584,"src":"176:14:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../../utils/Context.sol","id":9973,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10481,"sourceUnit":12349,"src":"232:48:56","symbolAliases":[{"foreign":{"id":9972,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12348,"src":"240:7:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","file":"../../interfaces/draft-IERC6093.sol","id":9975,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10481,"sourceUnit":9966,"src":"281:65:56","symbolAliases":[{"foreign":{"id":9974,"name":"IERC20Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9870,"src":"289:12:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9977,"name":"Context","nameLocations":["1133:7:56"],"nodeType":"IdentifierPath","referencedDeclaration":12348,"src":"1133:7:56"},"id":9978,"nodeType":"InheritanceSpecifier","src":"1133:7:56"},{"baseName":{"id":9979,"name":"IERC20","nameLocations":["1142:6:56"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1142:6:56"},"id":9980,"nodeType":"InheritanceSpecifier","src":"1142:6:56"},{"baseName":{"id":9981,"name":"IERC20Metadata","nameLocations":["1150:14:56"],"nodeType":"IdentifierPath","referencedDeclaration":10584,"src":"1150:14:56"},"id":9982,"nodeType":"InheritanceSpecifier","src":"1150:14:56"},{"baseName":{"id":9983,"name":"IERC20Errors","nameLocations":["1166:12:56"],"nodeType":"IdentifierPath","referencedDeclaration":9870,"src":"1166:12:56"},"id":9984,"nodeType":"InheritanceSpecifier","src":"1166:12:56"}],"canonicalName":"ERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":9976,"nodeType":"StructuredDocumentation","src":"348:757:56","text":" @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n TIP: For a detailed writeup see our guide\n https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n The default value of {decimals} is 18. To change this, you should override\n this function so it returns a different value.\n We have followed general OpenZeppelin Contracts guidelines: functions revert\n instead returning `false` on failure. This behavior is nonetheless\n conventional and does not conflict with the expectations of ERC-20\n applications."},"fullyImplemented":true,"id":10480,"linearizedBaseContracts":[10480,9870,10584,10558,12348],"name":"ERC20","nameLocation":"1124:5:56","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":9988,"mutability":"mutable","name":"_balances","nameLocation":"1229:9:56","nodeType":"VariableDeclaration","scope":10480,"src":"1185:53:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":9987,"keyName":"account","keyNameLocation":"1201:7:56","keyType":{"id":9985,"name":"address","nodeType":"ElementaryTypeName","src":"1193:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1185:35:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":9986,"name":"uint256","nodeType":"ElementaryTypeName","src":"1212:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":9994,"mutability":"mutable","name":"_allowances","nameLocation":"1317:11:56","nodeType":"VariableDeclaration","scope":10480,"src":"1245:83:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":9993,"keyName":"account","keyNameLocation":"1261:7:56","keyType":{"id":9989,"name":"address","nodeType":"ElementaryTypeName","src":"1253:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1245:63:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":9992,"keyName":"spender","keyNameLocation":"1288:7:56","keyType":{"id":9990,"name":"address","nodeType":"ElementaryTypeName","src":"1280:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1272:35:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":9991,"name":"uint256","nodeType":"ElementaryTypeName","src":"1299:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"constant":false,"id":9996,"mutability":"mutable","name":"_totalSupply","nameLocation":"1351:12:56","nodeType":"VariableDeclaration","scope":10480,"src":"1335:28:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9995,"name":"uint256","nodeType":"ElementaryTypeName","src":"1335:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":9998,"mutability":"mutable","name":"_name","nameLocation":"1385:5:56","nodeType":"VariableDeclaration","scope":10480,"src":"1370:20:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":9997,"name":"string","nodeType":"ElementaryTypeName","src":"1370:6:56","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":10000,"mutability":"mutable","name":"_symbol","nameLocation":"1411:7:56","nodeType":"VariableDeclaration","scope":10480,"src":"1396:22:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":9999,"name":"string","nodeType":"ElementaryTypeName","src":"1396:6:56","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":10016,"nodeType":"Block","src":"1638:57:56","statements":[{"expression":{"id":10010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10008,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9998,"src":"1648:5:56","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10009,"name":"name_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10003,"src":"1656:5:56","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1648:13:56","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":10011,"nodeType":"ExpressionStatement","src":"1648:13:56"},{"expression":{"id":10014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10012,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10000,"src":"1671:7:56","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10013,"name":"symbol_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10005,"src":"1681:7:56","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1671:17:56","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":10015,"nodeType":"ExpressionStatement","src":"1671:17:56"}]},"documentation":{"id":10001,"nodeType":"StructuredDocumentation","src":"1425:152:56","text":" @dev Sets the values for {name} and {symbol}.\n Both values are immutable: they can only be set once during construction."},"id":10017,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10003,"mutability":"mutable","name":"name_","nameLocation":"1608:5:56","nodeType":"VariableDeclaration","scope":10017,"src":"1594:19:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10002,"name":"string","nodeType":"ElementaryTypeName","src":"1594:6:56","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":10005,"mutability":"mutable","name":"symbol_","nameLocation":"1629:7:56","nodeType":"VariableDeclaration","scope":10017,"src":"1615:21:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10004,"name":"string","nodeType":"ElementaryTypeName","src":"1615:6:56","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1593:44:56"},"returnParameters":{"id":10007,"nodeType":"ParameterList","parameters":[],"src":"1638:0:56"},"scope":10480,"src":"1582:113:56","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[10571],"body":{"id":10025,"nodeType":"Block","src":"1820:29:56","statements":[{"expression":{"id":10023,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9998,"src":"1837:5:56","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":10022,"id":10024,"nodeType":"Return","src":"1830:12:56"}]},"documentation":{"id":10018,"nodeType":"StructuredDocumentation","src":"1701:54:56","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":10026,"implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"1769:4:56","nodeType":"FunctionDefinition","parameters":{"id":10019,"nodeType":"ParameterList","parameters":[],"src":"1773:2:56"},"returnParameters":{"id":10022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10021,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10026,"src":"1805:13:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10020,"name":"string","nodeType":"ElementaryTypeName","src":"1805:6:56","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1804:15:56"},"scope":10480,"src":"1760:89:56","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10577],"body":{"id":10034,"nodeType":"Block","src":"2024:31:56","statements":[{"expression":{"id":10032,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10000,"src":"2041:7:56","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":10031,"id":10033,"nodeType":"Return","src":"2034:14:56"}]},"documentation":{"id":10027,"nodeType":"StructuredDocumentation","src":"1855:102:56","text":" @dev Returns the symbol of the token, usually a shorter version of the\n name."},"functionSelector":"95d89b41","id":10035,"implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"1971:6:56","nodeType":"FunctionDefinition","parameters":{"id":10028,"nodeType":"ParameterList","parameters":[],"src":"1977:2:56"},"returnParameters":{"id":10031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10030,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10035,"src":"2009:13:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10029,"name":"string","nodeType":"ElementaryTypeName","src":"2009:6:56","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2008:15:56"},"scope":10480,"src":"1962:93:56","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10583],"body":{"id":10043,"nodeType":"Block","src":"2744:26:56","statements":[{"expression":{"hexValue":"3138","id":10041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2761:2:56","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"functionReturnParameters":10040,"id":10042,"nodeType":"Return","src":"2754:9:56"}]},"documentation":{"id":10036,"nodeType":"StructuredDocumentation","src":"2061:622:56","text":" @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5.05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the default value returned by this function, unless\n it's overridden.\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."},"functionSelector":"313ce567","id":10044,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"2697:8:56","nodeType":"FunctionDefinition","parameters":{"id":10037,"nodeType":"ParameterList","parameters":[],"src":"2705:2:56"},"returnParameters":{"id":10040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10039,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10044,"src":"2737:5:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":10038,"name":"uint8","nodeType":"ElementaryTypeName","src":"2737:5:56","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"2736:7:56"},"scope":10480,"src":"2688:82:56","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10507],"body":{"id":10052,"nodeType":"Block","src":"2864:36:56","statements":[{"expression":{"id":10050,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"2881:12:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10049,"id":10051,"nodeType":"Return","src":"2874:19:56"}]},"documentation":{"id":10045,"nodeType":"StructuredDocumentation","src":"2776:22:56","text":"@inheritdoc IERC20"},"functionSelector":"18160ddd","id":10053,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"2812:11:56","nodeType":"FunctionDefinition","parameters":{"id":10046,"nodeType":"ParameterList","parameters":[],"src":"2823:2:56"},"returnParameters":{"id":10049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10048,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10053,"src":"2855:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10047,"name":"uint256","nodeType":"ElementaryTypeName","src":"2855:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2854:9:56"},"scope":10480,"src":"2803:97:56","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10515],"body":{"id":10065,"nodeType":"Block","src":"3007:42:56","statements":[{"expression":{"baseExpression":{"id":10061,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9988,"src":"3024:9:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10063,"indexExpression":{"id":10062,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10056,"src":"3034:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3024:18:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10060,"id":10064,"nodeType":"Return","src":"3017:25:56"}]},"documentation":{"id":10054,"nodeType":"StructuredDocumentation","src":"2906:22:56","text":"@inheritdoc IERC20"},"functionSelector":"70a08231","id":10066,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"2942:9:56","nodeType":"FunctionDefinition","parameters":{"id":10057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10056,"mutability":"mutable","name":"account","nameLocation":"2960:7:56","nodeType":"VariableDeclaration","scope":10066,"src":"2952:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10055,"name":"address","nodeType":"ElementaryTypeName","src":"2952:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2951:17:56"},"returnParameters":{"id":10060,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10059,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10066,"src":"2998:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10058,"name":"uint256","nodeType":"ElementaryTypeName","src":"2998:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2997:9:56"},"scope":10480,"src":"2933:116:56","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10525],"body":{"id":10089,"nodeType":"Block","src":"3319:103:56","statements":[{"assignments":[10077],"declarations":[{"constant":false,"id":10077,"mutability":"mutable","name":"owner","nameLocation":"3337:5:56","nodeType":"VariableDeclaration","scope":10089,"src":"3329:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10076,"name":"address","nodeType":"ElementaryTypeName","src":"3329:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":10080,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":10078,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12330,"src":"3345:10:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":10079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3345:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3329:28:56"},{"expression":{"arguments":[{"id":10082,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10077,"src":"3377:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10083,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10069,"src":"3384:2:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10084,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10071,"src":"3388:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10081,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10210,"src":"3367:9:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3367:27:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10086,"nodeType":"ExpressionStatement","src":"3367:27:56"},{"expression":{"hexValue":"74727565","id":10087,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3411:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10075,"id":10088,"nodeType":"Return","src":"3404:11:56"}]},"documentation":{"id":10067,"nodeType":"StructuredDocumentation","src":"3055:184:56","text":" @dev See {IERC20-transfer}.\n Requirements:\n - `to` cannot be the zero address.\n - the caller must have a balance of at least `value`."},"functionSelector":"a9059cbb","id":10090,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"3253:8:56","nodeType":"FunctionDefinition","parameters":{"id":10072,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10069,"mutability":"mutable","name":"to","nameLocation":"3270:2:56","nodeType":"VariableDeclaration","scope":10090,"src":"3262:10:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10068,"name":"address","nodeType":"ElementaryTypeName","src":"3262:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10071,"mutability":"mutable","name":"value","nameLocation":"3282:5:56","nodeType":"VariableDeclaration","scope":10090,"src":"3274:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10070,"name":"uint256","nodeType":"ElementaryTypeName","src":"3274:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3261:27:56"},"returnParameters":{"id":10075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10074,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10090,"src":"3313:4:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10073,"name":"bool","nodeType":"ElementaryTypeName","src":"3313:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3312:6:56"},"scope":10480,"src":"3244:178:56","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[10535],"body":{"id":10106,"nodeType":"Block","src":"3544:51:56","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":10100,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9994,"src":"3561:11:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":10102,"indexExpression":{"id":10101,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10093,"src":"3573:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3561:18:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10104,"indexExpression":{"id":10103,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10095,"src":"3580:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3561:27:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10099,"id":10105,"nodeType":"Return","src":"3554:34:56"}]},"documentation":{"id":10091,"nodeType":"StructuredDocumentation","src":"3428:22:56","text":"@inheritdoc IERC20"},"functionSelector":"dd62ed3e","id":10107,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"3464:9:56","nodeType":"FunctionDefinition","parameters":{"id":10096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10093,"mutability":"mutable","name":"owner","nameLocation":"3482:5:56","nodeType":"VariableDeclaration","scope":10107,"src":"3474:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10092,"name":"address","nodeType":"ElementaryTypeName","src":"3474:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10095,"mutability":"mutable","name":"spender","nameLocation":"3497:7:56","nodeType":"VariableDeclaration","scope":10107,"src":"3489:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10094,"name":"address","nodeType":"ElementaryTypeName","src":"3489:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3473:32:56"},"returnParameters":{"id":10099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10098,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10107,"src":"3535:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10097,"name":"uint256","nodeType":"ElementaryTypeName","src":"3535:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3534:9:56"},"scope":10480,"src":"3455:140:56","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[10545],"body":{"id":10130,"nodeType":"Block","src":"3981:107:56","statements":[{"assignments":[10118],"declarations":[{"constant":false,"id":10118,"mutability":"mutable","name":"owner","nameLocation":"3999:5:56","nodeType":"VariableDeclaration","scope":10130,"src":"3991:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10117,"name":"address","nodeType":"ElementaryTypeName","src":"3991:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":10121,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":10119,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12330,"src":"4007:10:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":10120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4007:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3991:28:56"},{"expression":{"arguments":[{"id":10123,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10118,"src":"4038:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10124,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10110,"src":"4045:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10125,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10112,"src":"4054:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10122,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[10371,10431],"referencedDeclaration":10371,"src":"4029:8:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4029:31:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10127,"nodeType":"ExpressionStatement","src":"4029:31:56"},{"expression":{"hexValue":"74727565","id":10128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4077:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10116,"id":10129,"nodeType":"Return","src":"4070:11:56"}]},"documentation":{"id":10108,"nodeType":"StructuredDocumentation","src":"3601:296:56","text":" @dev See {IERC20-approve}.\n NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n `transferFrom`. This is semantically equivalent to an infinite approval.\n Requirements:\n - `spender` cannot be the zero address."},"functionSelector":"095ea7b3","id":10131,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"3911:7:56","nodeType":"FunctionDefinition","parameters":{"id":10113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10110,"mutability":"mutable","name":"spender","nameLocation":"3927:7:56","nodeType":"VariableDeclaration","scope":10131,"src":"3919:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10109,"name":"address","nodeType":"ElementaryTypeName","src":"3919:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10112,"mutability":"mutable","name":"value","nameLocation":"3944:5:56","nodeType":"VariableDeclaration","scope":10131,"src":"3936:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10111,"name":"uint256","nodeType":"ElementaryTypeName","src":"3936:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3918:32:56"},"returnParameters":{"id":10116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10115,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10131,"src":"3975:4:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10114,"name":"bool","nodeType":"ElementaryTypeName","src":"3975:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3974:6:56"},"scope":10480,"src":"3902:186:56","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[10557],"body":{"id":10162,"nodeType":"Block","src":"4773:151:56","statements":[{"assignments":[10144],"declarations":[{"constant":false,"id":10144,"mutability":"mutable","name":"spender","nameLocation":"4791:7:56","nodeType":"VariableDeclaration","scope":10162,"src":"4783:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10143,"name":"address","nodeType":"ElementaryTypeName","src":"4783:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":10147,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":10145,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12330,"src":"4801:10:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":10146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4801:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4783:30:56"},{"expression":{"arguments":[{"id":10149,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10134,"src":"4839:4:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10150,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10144,"src":"4845:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10151,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10138,"src":"4854:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10148,"name":"_spendAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10479,"src":"4823:15:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4823:37:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10153,"nodeType":"ExpressionStatement","src":"4823:37:56"},{"expression":{"arguments":[{"id":10155,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10134,"src":"4880:4:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10156,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10136,"src":"4886:2:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10157,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10138,"src":"4890:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10154,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10210,"src":"4870:9:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4870:26:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10159,"nodeType":"ExpressionStatement","src":"4870:26:56"},{"expression":{"hexValue":"74727565","id":10160,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4913:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10142,"id":10161,"nodeType":"Return","src":"4906:11:56"}]},"documentation":{"id":10132,"nodeType":"StructuredDocumentation","src":"4094:581:56","text":" @dev See {IERC20-transferFrom}.\n Skips emitting an {Approval} event indicating an allowance update. This is not\n required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\n NOTE: Does not update the allowance if the current allowance\n is the maximum `uint256`.\n Requirements:\n - `from` and `to` cannot be the zero address.\n - `from` must have a balance of at least `value`.\n - the caller must have allowance for ``from``'s tokens of at least\n `value`."},"functionSelector":"23b872dd","id":10163,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"4689:12:56","nodeType":"FunctionDefinition","parameters":{"id":10139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10134,"mutability":"mutable","name":"from","nameLocation":"4710:4:56","nodeType":"VariableDeclaration","scope":10163,"src":"4702:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10133,"name":"address","nodeType":"ElementaryTypeName","src":"4702:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10136,"mutability":"mutable","name":"to","nameLocation":"4724:2:56","nodeType":"VariableDeclaration","scope":10163,"src":"4716:10:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10135,"name":"address","nodeType":"ElementaryTypeName","src":"4716:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10138,"mutability":"mutable","name":"value","nameLocation":"4736:5:56","nodeType":"VariableDeclaration","scope":10163,"src":"4728:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10137,"name":"uint256","nodeType":"ElementaryTypeName","src":"4728:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4701:41:56"},"returnParameters":{"id":10142,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10141,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10163,"src":"4767:4:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10140,"name":"bool","nodeType":"ElementaryTypeName","src":"4767:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4766:6:56"},"scope":10480,"src":"4680:244:56","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":10209,"nodeType":"Block","src":"5366:231:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10173,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10166,"src":"5380:4:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10176,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5396:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10175,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5388:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10174,"name":"address","nodeType":"ElementaryTypeName","src":"5388:7:56","typeDescriptions":{}}},"id":10177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5388:10:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5380:18:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10187,"nodeType":"IfStatement","src":"5376:86:56","trueBody":{"id":10186,"nodeType":"Block","src":"5400:62:56","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10182,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5448:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10181,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5440:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10180,"name":"address","nodeType":"ElementaryTypeName","src":"5440:7:56","typeDescriptions":{}}},"id":10183,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5440:10:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10179,"name":"ERC20InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9845,"src":"5421:18:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5421:30:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10185,"nodeType":"RevertStatement","src":"5414:37:56"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10188,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10168,"src":"5475:2:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10191,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5489:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10190,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5481:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10189,"name":"address","nodeType":"ElementaryTypeName","src":"5481:7:56","typeDescriptions":{}}},"id":10192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5481:10:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5475:16:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10202,"nodeType":"IfStatement","src":"5471:86:56","trueBody":{"id":10201,"nodeType":"Block","src":"5493:64:56","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10197,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5543:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10196,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5535:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10195,"name":"address","nodeType":"ElementaryTypeName","src":"5535:7:56","typeDescriptions":{}}},"id":10198,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5535:10:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10194,"name":"ERC20InvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9850,"src":"5514:20:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5514:32:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10200,"nodeType":"RevertStatement","src":"5507:39:56"}]}},{"expression":{"arguments":[{"id":10204,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10166,"src":"5574:4:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10205,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10168,"src":"5580:2:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10206,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10170,"src":"5584:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10203,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10287,"src":"5566:7:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5566:24:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10208,"nodeType":"ExpressionStatement","src":"5566:24:56"}]},"documentation":{"id":10164,"nodeType":"StructuredDocumentation","src":"4930:362:56","text":" @dev Moves a `value` amount of tokens from `from` to `to`.\n This internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n NOTE: This function is not virtual, {_update} should be overridden instead."},"id":10210,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"5306:9:56","nodeType":"FunctionDefinition","parameters":{"id":10171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10166,"mutability":"mutable","name":"from","nameLocation":"5324:4:56","nodeType":"VariableDeclaration","scope":10210,"src":"5316:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10165,"name":"address","nodeType":"ElementaryTypeName","src":"5316:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10168,"mutability":"mutable","name":"to","nameLocation":"5338:2:56","nodeType":"VariableDeclaration","scope":10210,"src":"5330:10:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10167,"name":"address","nodeType":"ElementaryTypeName","src":"5330:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10170,"mutability":"mutable","name":"value","nameLocation":"5350:5:56","nodeType":"VariableDeclaration","scope":10210,"src":"5342:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10169,"name":"uint256","nodeType":"ElementaryTypeName","src":"5342:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5315:41:56"},"returnParameters":{"id":10172,"nodeType":"ParameterList","parameters":[],"src":"5366:0:56"},"scope":10480,"src":"5297:300:56","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10286,"nodeType":"Block","src":"5987:1032:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10220,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10213,"src":"6001:4:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10223,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6017:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10222,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6009:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10221,"name":"address","nodeType":"ElementaryTypeName","src":"6009:7:56","typeDescriptions":{}}},"id":10224,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6009:10:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6001:18:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":10257,"nodeType":"Block","src":"6175:362:56","statements":[{"assignments":[10232],"declarations":[{"constant":false,"id":10232,"mutability":"mutable","name":"fromBalance","nameLocation":"6197:11:56","nodeType":"VariableDeclaration","scope":10257,"src":"6189:19:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10231,"name":"uint256","nodeType":"ElementaryTypeName","src":"6189:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10236,"initialValue":{"baseExpression":{"id":10233,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9988,"src":"6211:9:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10235,"indexExpression":{"id":10234,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10213,"src":"6221:4:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6211:15:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6189:37:56"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10237,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10232,"src":"6244:11:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":10238,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10217,"src":"6258:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6244:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10247,"nodeType":"IfStatement","src":"6240:115:56","trueBody":{"id":10246,"nodeType":"Block","src":"6265:90:56","statements":[{"errorCall":{"arguments":[{"id":10241,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10213,"src":"6315:4:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10242,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10232,"src":"6321:11:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10243,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10217,"src":"6334:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10240,"name":"ERC20InsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9840,"src":"6290:24:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":10244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6290:50:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10245,"nodeType":"RevertStatement","src":"6283:57:56"}]}},{"id":10256,"nodeType":"UncheckedBlock","src":"6368:159:56","statements":[{"expression":{"id":10254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10248,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9988,"src":"6475:9:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10250,"indexExpression":{"id":10249,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10213,"src":"6485:4:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6475:15:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10251,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10232,"src":"6493:11:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":10252,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10217,"src":"6507:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6493:19:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6475:37:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10255,"nodeType":"ExpressionStatement","src":"6475:37:56"}]}]},"id":10258,"nodeType":"IfStatement","src":"5997:540:56","trueBody":{"id":10230,"nodeType":"Block","src":"6021:148:56","statements":[{"expression":{"id":10228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10226,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"6137:12:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":10227,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10217,"src":"6153:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6137:21:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10229,"nodeType":"ExpressionStatement","src":"6137:21:56"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10259,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10215,"src":"6551:2:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10262,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6565:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10261,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6557:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10260,"name":"address","nodeType":"ElementaryTypeName","src":"6557:7:56","typeDescriptions":{}}},"id":10263,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6557:10:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6551:16:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":10278,"nodeType":"Block","src":"6766:206:56","statements":[{"id":10277,"nodeType":"UncheckedBlock","src":"6780:182:56","statements":[{"expression":{"id":10275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10271,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9988,"src":"6925:9:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10273,"indexExpression":{"id":10272,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10215,"src":"6935:2:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6925:13:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":10274,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10217,"src":"6942:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6925:22:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10276,"nodeType":"ExpressionStatement","src":"6925:22:56"}]}]},"id":10279,"nodeType":"IfStatement","src":"6547:425:56","trueBody":{"id":10270,"nodeType":"Block","src":"6569:191:56","statements":[{"id":10269,"nodeType":"UncheckedBlock","src":"6583:167:56","statements":[{"expression":{"id":10267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10265,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9996,"src":"6714:12:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":10266,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10217,"src":"6730:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6714:21:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10268,"nodeType":"ExpressionStatement","src":"6714:21:56"}]}]}},{"eventCall":{"arguments":[{"id":10281,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10213,"src":"6996:4:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10282,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10215,"src":"7002:2:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10283,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10217,"src":"7006:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10280,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10492,"src":"6987:8:56","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6987:25:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10285,"nodeType":"EmitStatement","src":"6982:30:56"}]},"documentation":{"id":10211,"nodeType":"StructuredDocumentation","src":"5603:304:56","text":" @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n this function.\n Emits a {Transfer} event."},"id":10287,"implemented":true,"kind":"function","modifiers":[],"name":"_update","nameLocation":"5921:7:56","nodeType":"FunctionDefinition","parameters":{"id":10218,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10213,"mutability":"mutable","name":"from","nameLocation":"5937:4:56","nodeType":"VariableDeclaration","scope":10287,"src":"5929:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10212,"name":"address","nodeType":"ElementaryTypeName","src":"5929:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10215,"mutability":"mutable","name":"to","nameLocation":"5951:2:56","nodeType":"VariableDeclaration","scope":10287,"src":"5943:10:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10214,"name":"address","nodeType":"ElementaryTypeName","src":"5943:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10217,"mutability":"mutable","name":"value","nameLocation":"5963:5:56","nodeType":"VariableDeclaration","scope":10287,"src":"5955:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10216,"name":"uint256","nodeType":"ElementaryTypeName","src":"5955:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5928:41:56"},"returnParameters":{"id":10219,"nodeType":"ParameterList","parameters":[],"src":"5987:0:56"},"scope":10480,"src":"5912:1107:56","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":10319,"nodeType":"Block","src":"7418:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10295,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10290,"src":"7432:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10298,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7451:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10297,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7443:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10296,"name":"address","nodeType":"ElementaryTypeName","src":"7443:7:56","typeDescriptions":{}}},"id":10299,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7443:10:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7432:21:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10309,"nodeType":"IfStatement","src":"7428:91:56","trueBody":{"id":10308,"nodeType":"Block","src":"7455:64:56","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10304,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7505:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10303,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7497:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10302,"name":"address","nodeType":"ElementaryTypeName","src":"7497:7:56","typeDescriptions":{}}},"id":10305,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7497:10:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10301,"name":"ERC20InvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9850,"src":"7476:20:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7476:32:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10307,"nodeType":"RevertStatement","src":"7469:39:56"}]}},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":10313,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7544:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10312,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7536:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10311,"name":"address","nodeType":"ElementaryTypeName","src":"7536:7:56","typeDescriptions":{}}},"id":10314,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7536:10:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10315,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10290,"src":"7548:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10316,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10292,"src":"7557:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10310,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10287,"src":"7528:7:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7528:35:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10318,"nodeType":"ExpressionStatement","src":"7528:35:56"}]},"documentation":{"id":10288,"nodeType":"StructuredDocumentation","src":"7025:332:56","text":" @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n Relies on the `_update` mechanism\n Emits a {Transfer} event with `from` set to the zero address.\n NOTE: This function is not virtual, {_update} should be overridden instead."},"id":10320,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"7371:5:56","nodeType":"FunctionDefinition","parameters":{"id":10293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10290,"mutability":"mutable","name":"account","nameLocation":"7385:7:56","nodeType":"VariableDeclaration","scope":10320,"src":"7377:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10289,"name":"address","nodeType":"ElementaryTypeName","src":"7377:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10292,"mutability":"mutable","name":"value","nameLocation":"7402:5:56","nodeType":"VariableDeclaration","scope":10320,"src":"7394:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10291,"name":"uint256","nodeType":"ElementaryTypeName","src":"7394:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7376:32:56"},"returnParameters":{"id":10294,"nodeType":"ParameterList","parameters":[],"src":"7418:0:56"},"scope":10480,"src":"7362:208:56","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10352,"nodeType":"Block","src":"7944:150:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10328,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10323,"src":"7958:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10331,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7977:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10330,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7969:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10329,"name":"address","nodeType":"ElementaryTypeName","src":"7969:7:56","typeDescriptions":{}}},"id":10332,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7969:10:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7958:21:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10342,"nodeType":"IfStatement","src":"7954:89:56","trueBody":{"id":10341,"nodeType":"Block","src":"7981:62:56","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10337,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8029:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10336,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8021:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10335,"name":"address","nodeType":"ElementaryTypeName","src":"8021:7:56","typeDescriptions":{}}},"id":10338,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8021:10:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10334,"name":"ERC20InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9845,"src":"8002:18:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8002:30:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10340,"nodeType":"RevertStatement","src":"7995:37:56"}]}},{"expression":{"arguments":[{"id":10344,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10323,"src":"8060:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":10347,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8077:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10346,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8069:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10345,"name":"address","nodeType":"ElementaryTypeName","src":"8069:7:56","typeDescriptions":{}}},"id":10348,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8069:10:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10349,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10325,"src":"8081:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10343,"name":"_update","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10287,"src":"8052:7:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10350,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8052:35:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10351,"nodeType":"ExpressionStatement","src":"8052:35:56"}]},"documentation":{"id":10321,"nodeType":"StructuredDocumentation","src":"7576:307:56","text":" @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n Relies on the `_update` mechanism.\n Emits a {Transfer} event with `to` set to the zero address.\n NOTE: This function is not virtual, {_update} should be overridden instead"},"id":10353,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"7897:5:56","nodeType":"FunctionDefinition","parameters":{"id":10326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10323,"mutability":"mutable","name":"account","nameLocation":"7911:7:56","nodeType":"VariableDeclaration","scope":10353,"src":"7903:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10322,"name":"address","nodeType":"ElementaryTypeName","src":"7903:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10325,"mutability":"mutable","name":"value","nameLocation":"7928:5:56","nodeType":"VariableDeclaration","scope":10353,"src":"7920:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10324,"name":"uint256","nodeType":"ElementaryTypeName","src":"7920:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7902:32:56"},"returnParameters":{"id":10327,"nodeType":"ParameterList","parameters":[],"src":"7944:0:56"},"scope":10480,"src":"7888:206:56","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10370,"nodeType":"Block","src":"8704:54:56","statements":[{"expression":{"arguments":[{"id":10364,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10356,"src":"8723:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10365,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10358,"src":"8730:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10366,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10360,"src":"8739:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":10367,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8746:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":10363,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[10371,10431],"referencedDeclaration":10431,"src":"8714:8:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,bool)"}},"id":10368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8714:37:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10369,"nodeType":"ExpressionStatement","src":"8714:37:56"}]},"documentation":{"id":10354,"nodeType":"StructuredDocumentation","src":"8100:525:56","text":" @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address.\n Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument."},"id":10371,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"8639:8:56","nodeType":"FunctionDefinition","parameters":{"id":10361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10356,"mutability":"mutable","name":"owner","nameLocation":"8656:5:56","nodeType":"VariableDeclaration","scope":10371,"src":"8648:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10355,"name":"address","nodeType":"ElementaryTypeName","src":"8648:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10358,"mutability":"mutable","name":"spender","nameLocation":"8671:7:56","nodeType":"VariableDeclaration","scope":10371,"src":"8663:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10357,"name":"address","nodeType":"ElementaryTypeName","src":"8663:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10360,"mutability":"mutable","name":"value","nameLocation":"8688:5:56","nodeType":"VariableDeclaration","scope":10371,"src":"8680:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10359,"name":"uint256","nodeType":"ElementaryTypeName","src":"8680:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8647:47:56"},"returnParameters":{"id":10362,"nodeType":"ParameterList","parameters":[],"src":"8704:0:56"},"scope":10480,"src":"8630:128:56","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10430,"nodeType":"Block","src":"9703:334:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10383,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10374,"src":"9717:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10386,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9734:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10385,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9726:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10384,"name":"address","nodeType":"ElementaryTypeName","src":"9726:7:56","typeDescriptions":{}}},"id":10387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9726:10:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9717:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10397,"nodeType":"IfStatement","src":"9713:89:56","trueBody":{"id":10396,"nodeType":"Block","src":"9738:64:56","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10392,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9788:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10391,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9780:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10390,"name":"address","nodeType":"ElementaryTypeName","src":"9780:7:56","typeDescriptions":{}}},"id":10393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9780:10:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10389,"name":"ERC20InvalidApprover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9864,"src":"9759:20:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9759:32:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10395,"nodeType":"RevertStatement","src":"9752:39:56"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10398,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10376,"src":"9815:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10401,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9834:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10400,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9826:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10399,"name":"address","nodeType":"ElementaryTypeName","src":"9826:7:56","typeDescriptions":{}}},"id":10402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9826:10:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9815:21:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10412,"nodeType":"IfStatement","src":"9811:90:56","trueBody":{"id":10411,"nodeType":"Block","src":"9838:63:56","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":10407,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9887:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10406,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9879:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10405,"name":"address","nodeType":"ElementaryTypeName","src":"9879:7:56","typeDescriptions":{}}},"id":10408,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9879:10:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10404,"name":"ERC20InvalidSpender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9869,"src":"9859:19:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9859:31:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10410,"nodeType":"RevertStatement","src":"9852:38:56"}]}},{"expression":{"id":10419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":10413,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9994,"src":"9910:11:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":10416,"indexExpression":{"id":10414,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10374,"src":"9922:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9910:18:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10417,"indexExpression":{"id":10415,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10376,"src":"9929:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9910:27:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10418,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10378,"src":"9940:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9910:35:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10420,"nodeType":"ExpressionStatement","src":"9910:35:56"},{"condition":{"id":10421,"name":"emitEvent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10380,"src":"9959:9:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10429,"nodeType":"IfStatement","src":"9955:76:56","trueBody":{"id":10428,"nodeType":"Block","src":"9970:61:56","statements":[{"eventCall":{"arguments":[{"id":10423,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10374,"src":"9998:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10424,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10376,"src":"10005:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10425,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10378,"src":"10014:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10422,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10501,"src":"9989:8:56","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9989:31:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10427,"nodeType":"EmitStatement","src":"9984:36:56"}]}}]},"documentation":{"id":10372,"nodeType":"StructuredDocumentation","src":"8764:836:56","text":" @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\n `Approval` event during `transferFrom` operations.\n Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\n true using the following override:\n ```solidity\n function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n super._approve(owner, spender, value, true);\n }\n ```\n Requirements are the same as {_approve}."},"id":10431,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"9614:8:56","nodeType":"FunctionDefinition","parameters":{"id":10381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10374,"mutability":"mutable","name":"owner","nameLocation":"9631:5:56","nodeType":"VariableDeclaration","scope":10431,"src":"9623:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10373,"name":"address","nodeType":"ElementaryTypeName","src":"9623:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10376,"mutability":"mutable","name":"spender","nameLocation":"9646:7:56","nodeType":"VariableDeclaration","scope":10431,"src":"9638:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10375,"name":"address","nodeType":"ElementaryTypeName","src":"9638:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10378,"mutability":"mutable","name":"value","nameLocation":"9663:5:56","nodeType":"VariableDeclaration","scope":10431,"src":"9655:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10377,"name":"uint256","nodeType":"ElementaryTypeName","src":"9655:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10380,"mutability":"mutable","name":"emitEvent","nameLocation":"9675:9:56","nodeType":"VariableDeclaration","scope":10431,"src":"9670:14:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10379,"name":"bool","nodeType":"ElementaryTypeName","src":"9670:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9622:63:56"},"returnParameters":{"id":10382,"nodeType":"ParameterList","parameters":[],"src":"9703:0:56"},"scope":10480,"src":"9605:432:56","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":10478,"nodeType":"Block","src":"10408:387:56","statements":[{"assignments":[10442],"declarations":[{"constant":false,"id":10442,"mutability":"mutable","name":"currentAllowance","nameLocation":"10426:16:56","nodeType":"VariableDeclaration","scope":10478,"src":"10418:24:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10441,"name":"uint256","nodeType":"ElementaryTypeName","src":"10418:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10447,"initialValue":{"arguments":[{"id":10444,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10434,"src":"10455:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10445,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10436,"src":"10462:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":10443,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10107,"src":"10445:9:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":10446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10445:25:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10418:52:56"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10448,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10442,"src":"10484:16:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"arguments":[{"id":10451,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10508:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":10450,"name":"uint256","nodeType":"ElementaryTypeName","src":"10508:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":10449,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10503:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":10452,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10503:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":10453,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10517:3:56","memberName":"max","nodeType":"MemberAccess","src":"10503:17:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10484:36:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10477,"nodeType":"IfStatement","src":"10480:309:56","trueBody":{"id":10476,"nodeType":"Block","src":"10522:267:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10455,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10442,"src":"10540:16:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":10456,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10438,"src":"10559:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10540:24:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10465,"nodeType":"IfStatement","src":"10536:130:56","trueBody":{"id":10464,"nodeType":"Block","src":"10566:100:56","statements":[{"errorCall":{"arguments":[{"id":10459,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10436,"src":"10618:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10460,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10442,"src":"10627:16:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10461,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10438,"src":"10645:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10458,"name":"ERC20InsufficientAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9859,"src":"10591:26:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":10462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10591:60:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10463,"nodeType":"RevertStatement","src":"10584:67:56"}]}},{"id":10475,"nodeType":"UncheckedBlock","src":"10679:100:56","statements":[{"expression":{"arguments":[{"id":10467,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10434,"src":"10716:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10468,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10436,"src":"10723:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10469,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10442,"src":"10732:16:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":10470,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10438,"src":"10751:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10732:24:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":10472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10758:5:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":10466,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[10371,10431],"referencedDeclaration":10431,"src":"10707:8:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,bool)"}},"id":10473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10707:57:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10474,"nodeType":"ExpressionStatement","src":"10707:57:56"}]}]}}]},"documentation":{"id":10432,"nodeType":"StructuredDocumentation","src":"10043:271:56","text":" @dev Updates `owner`'s allowance for `spender` based on spent `value`.\n Does not update the allowance value in case of infinite allowance.\n Revert if not enough allowance is available.\n Does not emit an {Approval} event."},"id":10479,"implemented":true,"kind":"function","modifiers":[],"name":"_spendAllowance","nameLocation":"10328:15:56","nodeType":"FunctionDefinition","parameters":{"id":10439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10434,"mutability":"mutable","name":"owner","nameLocation":"10352:5:56","nodeType":"VariableDeclaration","scope":10479,"src":"10344:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10433,"name":"address","nodeType":"ElementaryTypeName","src":"10344:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10436,"mutability":"mutable","name":"spender","nameLocation":"10367:7:56","nodeType":"VariableDeclaration","scope":10479,"src":"10359:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10435,"name":"address","nodeType":"ElementaryTypeName","src":"10359:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10438,"mutability":"mutable","name":"value","nameLocation":"10384:5:56","nodeType":"VariableDeclaration","scope":10479,"src":"10376:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10437,"name":"uint256","nodeType":"ElementaryTypeName","src":"10376:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10343:47:56"},"returnParameters":{"id":10440,"nodeType":"ParameterList","parameters":[],"src":"10408:0:56"},"scope":10480,"src":"10319:476:56","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":10481,"src":"1106:9691:56","usedErrors":[9840,9845,9850,9859,9864,9869],"usedEvents":[10492,10501]}],"src":"105:10693:56"},"id":56},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[10558]},"id":10559,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10482,"literals":["solidity",">=","0.4",".16"],"nodeType":"PragmaDirective","src":"106:25:57"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":10483,"nodeType":"StructuredDocumentation","src":"133:71:57","text":" @dev Interface of the ERC-20 standard as defined in the ERC."},"fullyImplemented":false,"id":10558,"linearizedBaseContracts":[10558],"name":"IERC20","nameLocation":"215:6:57","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":10484,"nodeType":"StructuredDocumentation","src":"228:158:57","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":10492,"name":"Transfer","nameLocation":"397:8:57","nodeType":"EventDefinition","parameters":{"id":10491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10486,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"422:4:57","nodeType":"VariableDeclaration","scope":10492,"src":"406:20:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10485,"name":"address","nodeType":"ElementaryTypeName","src":"406:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10488,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"444:2:57","nodeType":"VariableDeclaration","scope":10492,"src":"428:18:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10487,"name":"address","nodeType":"ElementaryTypeName","src":"428:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10490,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"456:5:57","nodeType":"VariableDeclaration","scope":10492,"src":"448:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10489,"name":"uint256","nodeType":"ElementaryTypeName","src":"448:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"405:57:57"},"src":"391:72:57"},{"anonymous":false,"documentation":{"id":10493,"nodeType":"StructuredDocumentation","src":"469:148:57","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":10501,"name":"Approval","nameLocation":"628:8:57","nodeType":"EventDefinition","parameters":{"id":10500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10495,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"653:5:57","nodeType":"VariableDeclaration","scope":10501,"src":"637:21:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10494,"name":"address","nodeType":"ElementaryTypeName","src":"637:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10497,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"676:7:57","nodeType":"VariableDeclaration","scope":10501,"src":"660:23:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10496,"name":"address","nodeType":"ElementaryTypeName","src":"660:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10499,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"693:5:57","nodeType":"VariableDeclaration","scope":10501,"src":"685:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10498,"name":"uint256","nodeType":"ElementaryTypeName","src":"685:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"636:63:57"},"src":"622:78:57"},{"documentation":{"id":10502,"nodeType":"StructuredDocumentation","src":"706:65:57","text":" @dev Returns the value of tokens in existence."},"functionSelector":"18160ddd","id":10507,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"785:11:57","nodeType":"FunctionDefinition","parameters":{"id":10503,"nodeType":"ParameterList","parameters":[],"src":"796:2:57"},"returnParameters":{"id":10506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10505,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10507,"src":"822:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10504,"name":"uint256","nodeType":"ElementaryTypeName","src":"822:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"821:9:57"},"scope":10558,"src":"776:55:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10508,"nodeType":"StructuredDocumentation","src":"837:71:57","text":" @dev Returns the value of tokens owned by `account`."},"functionSelector":"70a08231","id":10515,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"922:9:57","nodeType":"FunctionDefinition","parameters":{"id":10511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10510,"mutability":"mutable","name":"account","nameLocation":"940:7:57","nodeType":"VariableDeclaration","scope":10515,"src":"932:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10509,"name":"address","nodeType":"ElementaryTypeName","src":"932:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"931:17:57"},"returnParameters":{"id":10514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10513,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10515,"src":"972:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10512,"name":"uint256","nodeType":"ElementaryTypeName","src":"972:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"971:9:57"},"scope":10558,"src":"913:68:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10516,"nodeType":"StructuredDocumentation","src":"987:213:57","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":10525,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1214:8:57","nodeType":"FunctionDefinition","parameters":{"id":10521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10518,"mutability":"mutable","name":"to","nameLocation":"1231:2:57","nodeType":"VariableDeclaration","scope":10525,"src":"1223:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10517,"name":"address","nodeType":"ElementaryTypeName","src":"1223:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10520,"mutability":"mutable","name":"value","nameLocation":"1243:5:57","nodeType":"VariableDeclaration","scope":10525,"src":"1235:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10519,"name":"uint256","nodeType":"ElementaryTypeName","src":"1235:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1222:27:57"},"returnParameters":{"id":10524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10523,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10525,"src":"1268:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10522,"name":"bool","nodeType":"ElementaryTypeName","src":"1268:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1267:6:57"},"scope":10558,"src":"1205:69:57","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":10526,"nodeType":"StructuredDocumentation","src":"1280:264:57","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":10535,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1558:9:57","nodeType":"FunctionDefinition","parameters":{"id":10531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10528,"mutability":"mutable","name":"owner","nameLocation":"1576:5:57","nodeType":"VariableDeclaration","scope":10535,"src":"1568:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10527,"name":"address","nodeType":"ElementaryTypeName","src":"1568:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10530,"mutability":"mutable","name":"spender","nameLocation":"1591:7:57","nodeType":"VariableDeclaration","scope":10535,"src":"1583:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10529,"name":"address","nodeType":"ElementaryTypeName","src":"1583:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1567:32:57"},"returnParameters":{"id":10534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10533,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10535,"src":"1623:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10532,"name":"uint256","nodeType":"ElementaryTypeName","src":"1623:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1622:9:57"},"scope":10558,"src":"1549:83:57","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10536,"nodeType":"StructuredDocumentation","src":"1638:667:57","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":10545,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2319:7:57","nodeType":"FunctionDefinition","parameters":{"id":10541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10538,"mutability":"mutable","name":"spender","nameLocation":"2335:7:57","nodeType":"VariableDeclaration","scope":10545,"src":"2327:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10537,"name":"address","nodeType":"ElementaryTypeName","src":"2327:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10540,"mutability":"mutable","name":"value","nameLocation":"2352:5:57","nodeType":"VariableDeclaration","scope":10545,"src":"2344:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10539,"name":"uint256","nodeType":"ElementaryTypeName","src":"2344:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2326:32:57"},"returnParameters":{"id":10544,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10543,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10545,"src":"2377:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10542,"name":"bool","nodeType":"ElementaryTypeName","src":"2377:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2376:6:57"},"scope":10558,"src":"2310:73:57","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":10546,"nodeType":"StructuredDocumentation","src":"2389:297:57","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":10557,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2700:12:57","nodeType":"FunctionDefinition","parameters":{"id":10553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10548,"mutability":"mutable","name":"from","nameLocation":"2721:4:57","nodeType":"VariableDeclaration","scope":10557,"src":"2713:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10547,"name":"address","nodeType":"ElementaryTypeName","src":"2713:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10550,"mutability":"mutable","name":"to","nameLocation":"2735:2:57","nodeType":"VariableDeclaration","scope":10557,"src":"2727:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10549,"name":"address","nodeType":"ElementaryTypeName","src":"2727:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10552,"mutability":"mutable","name":"value","nameLocation":"2747:5:57","nodeType":"VariableDeclaration","scope":10557,"src":"2739:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10551,"name":"uint256","nodeType":"ElementaryTypeName","src":"2739:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2712:41:57"},"returnParameters":{"id":10556,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10555,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10557,"src":"2772:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10554,"name":"bool","nodeType":"ElementaryTypeName","src":"2772:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2771:6:57"},"scope":10558,"src":"2691:87:57","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":10559,"src":"205:2575:57","usedErrors":[],"usedEvents":[10492,10501]}],"src":"106:2675:57"},"id":57},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","exportedSymbols":{"IERC20":[10558],"IERC20Metadata":[10584]},"id":10585,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10560,"literals":["solidity",">=","0.6",".2"],"nodeType":"PragmaDirective","src":"125:24:58"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":10562,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10585,"sourceUnit":10559,"src":"151:37:58","symbolAliases":[{"foreign":{"id":10561,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"159:6:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":10564,"name":"IERC20","nameLocations":["306:6:58"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"306:6:58"},"id":10565,"nodeType":"InheritanceSpecifier","src":"306:6:58"}],"canonicalName":"IERC20Metadata","contractDependencies":[],"contractKind":"interface","documentation":{"id":10563,"nodeType":"StructuredDocumentation","src":"190:87:58","text":" @dev Interface for the optional metadata functions from the ERC-20 standard."},"fullyImplemented":false,"id":10584,"linearizedBaseContracts":[10584,10558],"name":"IERC20Metadata","nameLocation":"288:14:58","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":10566,"nodeType":"StructuredDocumentation","src":"319:54:58","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":10571,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"387:4:58","nodeType":"FunctionDefinition","parameters":{"id":10567,"nodeType":"ParameterList","parameters":[],"src":"391:2:58"},"returnParameters":{"id":10570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10569,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10571,"src":"417:13:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10568,"name":"string","nodeType":"ElementaryTypeName","src":"417:6:58","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"416:15:58"},"scope":10584,"src":"378:54:58","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10572,"nodeType":"StructuredDocumentation","src":"438:56:58","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":10577,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"508:6:58","nodeType":"FunctionDefinition","parameters":{"id":10573,"nodeType":"ParameterList","parameters":[],"src":"514:2:58"},"returnParameters":{"id":10576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10575,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10577,"src":"540:13:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10574,"name":"string","nodeType":"ElementaryTypeName","src":"540:6:58","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"539:15:58"},"scope":10584,"src":"499:56:58","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":10578,"nodeType":"StructuredDocumentation","src":"561:65:58","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":10583,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"640:8:58","nodeType":"FunctionDefinition","parameters":{"id":10579,"nodeType":"ParameterList","parameters":[],"src":"648:2:58"},"returnParameters":{"id":10582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10581,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10583,"src":"674:5:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":10580,"name":"uint8","nodeType":"ElementaryTypeName","src":"674:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"673:7:58"},"scope":10584,"src":"631:50:58","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":10585,"src":"278:405:58","usedErrors":[],"usedEvents":[10492,10501]}],"src":"125:559:58"},"id":58},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","exportedSymbols":{"IERC1363":[9650],"IERC20":[10558],"SafeERC20":[11048]},"id":11049,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10586,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"115:24:59"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":10588,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11049,"sourceUnit":10559,"src":"141:37:59","symbolAliases":[{"foreign":{"id":10587,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"149:6:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1363.sol","file":"../../../interfaces/IERC1363.sol","id":10590,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11049,"sourceUnit":9651,"src":"179:58:59","symbolAliases":[{"foreign":{"id":10589,"name":"IERC1363","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9650,"src":"187:8:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":10591,"nodeType":"StructuredDocumentation","src":"239:458:59","text":" @title SafeERC20\n @dev Wrappers around ERC-20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."},"fullyImplemented":true,"id":11048,"linearizedBaseContracts":[11048],"name":"SafeERC20","nameLocation":"706:9:59","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":10592,"nodeType":"StructuredDocumentation","src":"722:65:59","text":" @dev An operation with an ERC-20 token failed."},"errorSelector":"5274afe7","id":10596,"name":"SafeERC20FailedOperation","nameLocation":"798:24:59","nodeType":"ErrorDefinition","parameters":{"id":10595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10594,"mutability":"mutable","name":"token","nameLocation":"831:5:59","nodeType":"VariableDeclaration","scope":10596,"src":"823:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10593,"name":"address","nodeType":"ElementaryTypeName","src":"823:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"822:15:59"},"src":"792:46:59"},{"documentation":{"id":10597,"nodeType":"StructuredDocumentation","src":"844:71:59","text":" @dev Indicates a failed `decreaseAllowance` request."},"errorSelector":"e570110f","id":10605,"name":"SafeERC20FailedDecreaseAllowance","nameLocation":"926:32:59","nodeType":"ErrorDefinition","parameters":{"id":10604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10599,"mutability":"mutable","name":"spender","nameLocation":"967:7:59","nodeType":"VariableDeclaration","scope":10605,"src":"959:15:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10598,"name":"address","nodeType":"ElementaryTypeName","src":"959:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10601,"mutability":"mutable","name":"currentAllowance","nameLocation":"984:16:59","nodeType":"VariableDeclaration","scope":10605,"src":"976:24:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10600,"name":"uint256","nodeType":"ElementaryTypeName","src":"976:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10603,"mutability":"mutable","name":"requestedDecrease","nameLocation":"1010:17:59","nodeType":"VariableDeclaration","scope":10605,"src":"1002:25:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10602,"name":"uint256","nodeType":"ElementaryTypeName","src":"1002:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"958:70:59"},"src":"920:109:59"},{"body":{"id":10628,"nodeType":"Block","src":"1291:88:59","statements":[{"expression":{"arguments":[{"id":10617,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10609,"src":"1321:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":10620,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10609,"src":"1343:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":10621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1349:8:59","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":10525,"src":"1343:14:59","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":10622,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10611,"src":"1360:2:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10623,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10613,"src":"1364:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10624,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1359:11:59","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":10618,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1328:3:59","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10619,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1332:10:59","memberName":"encodeCall","nodeType":"MemberAccess","src":"1328:14:59","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1328:43:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10616,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11006,"src":"1301:19:59","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":10626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1301:71:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10627,"nodeType":"ExpressionStatement","src":"1301:71:59"}]},"documentation":{"id":10606,"nodeType":"StructuredDocumentation","src":"1035:179:59","text":" @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":10629,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"1228:12:59","nodeType":"FunctionDefinition","parameters":{"id":10614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10609,"mutability":"mutable","name":"token","nameLocation":"1248:5:59","nodeType":"VariableDeclaration","scope":10629,"src":"1241:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":10608,"nodeType":"UserDefinedTypeName","pathNode":{"id":10607,"name":"IERC20","nameLocations":["1241:6:59"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1241:6:59"},"referencedDeclaration":10558,"src":"1241:6:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10611,"mutability":"mutable","name":"to","nameLocation":"1263:2:59","nodeType":"VariableDeclaration","scope":10629,"src":"1255:10:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10610,"name":"address","nodeType":"ElementaryTypeName","src":"1255:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10613,"mutability":"mutable","name":"value","nameLocation":"1275:5:59","nodeType":"VariableDeclaration","scope":10629,"src":"1267:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10612,"name":"uint256","nodeType":"ElementaryTypeName","src":"1267:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1240:41:59"},"returnParameters":{"id":10615,"nodeType":"ParameterList","parameters":[],"src":"1291:0:59"},"scope":11048,"src":"1219:160:59","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10655,"nodeType":"Block","src":"1708:98:59","statements":[{"expression":{"arguments":[{"id":10643,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10633,"src":"1738:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":10646,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10633,"src":"1760:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":10647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1766:12:59","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":10557,"src":"1760:18:59","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},{"components":[{"id":10648,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10635,"src":"1781:4:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10649,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10637,"src":"1787:2:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10650,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10639,"src":"1791:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10651,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1780:17:59","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}],"expression":{"id":10644,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1745:3:59","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10645,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1749:10:59","memberName":"encodeCall","nodeType":"MemberAccess","src":"1745:14:59","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1745:53:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10642,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11006,"src":"1718:19:59","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":10653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1718:81:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10654,"nodeType":"ExpressionStatement","src":"1718:81:59"}]},"documentation":{"id":10630,"nodeType":"StructuredDocumentation","src":"1385:228:59","text":" @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n calling contract. If `token` returns no value, non-reverting calls are assumed to be successful."},"id":10656,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"1627:16:59","nodeType":"FunctionDefinition","parameters":{"id":10640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10633,"mutability":"mutable","name":"token","nameLocation":"1651:5:59","nodeType":"VariableDeclaration","scope":10656,"src":"1644:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":10632,"nodeType":"UserDefinedTypeName","pathNode":{"id":10631,"name":"IERC20","nameLocations":["1644:6:59"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1644:6:59"},"referencedDeclaration":10558,"src":"1644:6:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10635,"mutability":"mutable","name":"from","nameLocation":"1666:4:59","nodeType":"VariableDeclaration","scope":10656,"src":"1658:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10634,"name":"address","nodeType":"ElementaryTypeName","src":"1658:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10637,"mutability":"mutable","name":"to","nameLocation":"1680:2:59","nodeType":"VariableDeclaration","scope":10656,"src":"1672:10:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10636,"name":"address","nodeType":"ElementaryTypeName","src":"1672:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10639,"mutability":"mutable","name":"value","nameLocation":"1692:5:59","nodeType":"VariableDeclaration","scope":10656,"src":"1684:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10638,"name":"uint256","nodeType":"ElementaryTypeName","src":"1684:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1643:55:59"},"returnParameters":{"id":10641,"nodeType":"ParameterList","parameters":[],"src":"1708:0:59"},"scope":11048,"src":"1618:188:59","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10681,"nodeType":"Block","src":"2033:99:59","statements":[{"expression":{"arguments":[{"id":10670,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10660,"src":"2074:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":10673,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10660,"src":"2096:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":10674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2102:8:59","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":10525,"src":"2096:14:59","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":10675,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10662,"src":"2113:2:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10676,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10664,"src":"2117:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10677,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2112:11:59","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":10671,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2081:3:59","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10672,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2085:10:59","memberName":"encodeCall","nodeType":"MemberAccess","src":"2081:14:59","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2081:43:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10669,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11047,"src":"2050:23:59","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":10679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2050:75:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":10668,"id":10680,"nodeType":"Return","src":"2043:82:59"}]},"documentation":{"id":10657,"nodeType":"StructuredDocumentation","src":"1812:126:59","text":" @dev Variant of {safeTransfer} that returns a bool instead of reverting if the operation is not successful."},"id":10682,"implemented":true,"kind":"function","modifiers":[],"name":"trySafeTransfer","nameLocation":"1952:15:59","nodeType":"FunctionDefinition","parameters":{"id":10665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10660,"mutability":"mutable","name":"token","nameLocation":"1975:5:59","nodeType":"VariableDeclaration","scope":10682,"src":"1968:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":10659,"nodeType":"UserDefinedTypeName","pathNode":{"id":10658,"name":"IERC20","nameLocations":["1968:6:59"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1968:6:59"},"referencedDeclaration":10558,"src":"1968:6:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10662,"mutability":"mutable","name":"to","nameLocation":"1990:2:59","nodeType":"VariableDeclaration","scope":10682,"src":"1982:10:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10661,"name":"address","nodeType":"ElementaryTypeName","src":"1982:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10664,"mutability":"mutable","name":"value","nameLocation":"2002:5:59","nodeType":"VariableDeclaration","scope":10682,"src":"1994:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10663,"name":"uint256","nodeType":"ElementaryTypeName","src":"1994:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1967:41:59"},"returnParameters":{"id":10668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10667,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10682,"src":"2027:4:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10666,"name":"bool","nodeType":"ElementaryTypeName","src":"2027:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2026:6:59"},"scope":11048,"src":"1943:189:59","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10710,"nodeType":"Block","src":"2381:109:59","statements":[{"expression":{"arguments":[{"id":10698,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10686,"src":"2422:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":10701,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10686,"src":"2444:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":10702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2450:12:59","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":10557,"src":"2444:18:59","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},{"components":[{"id":10703,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10688,"src":"2465:4:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10704,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10690,"src":"2471:2:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10705,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10692,"src":"2475:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10706,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2464:17:59","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}],"expression":{"id":10699,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2429:3:59","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10700,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2433:10:59","memberName":"encodeCall","nodeType":"MemberAccess","src":"2429:14:59","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2429:53:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10697,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11047,"src":"2398:23:59","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":10708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2398:85:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":10696,"id":10709,"nodeType":"Return","src":"2391:92:59"}]},"documentation":{"id":10683,"nodeType":"StructuredDocumentation","src":"2138:130:59","text":" @dev Variant of {safeTransferFrom} that returns a bool instead of reverting if the operation is not successful."},"id":10711,"implemented":true,"kind":"function","modifiers":[],"name":"trySafeTransferFrom","nameLocation":"2282:19:59","nodeType":"FunctionDefinition","parameters":{"id":10693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10686,"mutability":"mutable","name":"token","nameLocation":"2309:5:59","nodeType":"VariableDeclaration","scope":10711,"src":"2302:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":10685,"nodeType":"UserDefinedTypeName","pathNode":{"id":10684,"name":"IERC20","nameLocations":["2302:6:59"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2302:6:59"},"referencedDeclaration":10558,"src":"2302:6:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10688,"mutability":"mutable","name":"from","nameLocation":"2324:4:59","nodeType":"VariableDeclaration","scope":10711,"src":"2316:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10687,"name":"address","nodeType":"ElementaryTypeName","src":"2316:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10690,"mutability":"mutable","name":"to","nameLocation":"2338:2:59","nodeType":"VariableDeclaration","scope":10711,"src":"2330:10:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10689,"name":"address","nodeType":"ElementaryTypeName","src":"2330:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10692,"mutability":"mutable","name":"value","nameLocation":"2350:5:59","nodeType":"VariableDeclaration","scope":10711,"src":"2342:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10691,"name":"uint256","nodeType":"ElementaryTypeName","src":"2342:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2301:55:59"},"returnParameters":{"id":10696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10695,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10711,"src":"2375:4:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10694,"name":"bool","nodeType":"ElementaryTypeName","src":"2375:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2374:6:59"},"scope":11048,"src":"2273:217:59","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10741,"nodeType":"Block","src":"3232:139:59","statements":[{"assignments":[10723],"declarations":[{"constant":false,"id":10723,"mutability":"mutable","name":"oldAllowance","nameLocation":"3250:12:59","nodeType":"VariableDeclaration","scope":10741,"src":"3242:20:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10722,"name":"uint256","nodeType":"ElementaryTypeName","src":"3242:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10732,"initialValue":{"arguments":[{"arguments":[{"id":10728,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3289:4:59","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$11048","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$11048","typeString":"library SafeERC20"}],"id":10727,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3281:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10726,"name":"address","nodeType":"ElementaryTypeName","src":"3281:7:59","typeDescriptions":{}}},"id":10729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3281:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10730,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10717,"src":"3296:7:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10724,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10715,"src":"3265:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":10725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3271:9:59","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":10535,"src":"3265:15:59","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":10731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3265:39:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3242:62:59"},{"expression":{"arguments":[{"id":10734,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10715,"src":"3327:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":10735,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10717,"src":"3334:7:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10736,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10723,"src":"3343:12:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":10737,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10719,"src":"3358:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3343:20:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10733,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10832,"src":"3314:12:59","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":10739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3314:50:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10740,"nodeType":"ExpressionStatement","src":"3314:50:59"}]},"documentation":{"id":10712,"nodeType":"StructuredDocumentation","src":"2496:645:59","text":" @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful.\n IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior."},"id":10742,"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"3155:21:59","nodeType":"FunctionDefinition","parameters":{"id":10720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10715,"mutability":"mutable","name":"token","nameLocation":"3184:5:59","nodeType":"VariableDeclaration","scope":10742,"src":"3177:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":10714,"nodeType":"UserDefinedTypeName","pathNode":{"id":10713,"name":"IERC20","nameLocations":["3177:6:59"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"3177:6:59"},"referencedDeclaration":10558,"src":"3177:6:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10717,"mutability":"mutable","name":"spender","nameLocation":"3199:7:59","nodeType":"VariableDeclaration","scope":10742,"src":"3191:15:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10716,"name":"address","nodeType":"ElementaryTypeName","src":"3191:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10719,"mutability":"mutable","name":"value","nameLocation":"3216:5:59","nodeType":"VariableDeclaration","scope":10742,"src":"3208:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10718,"name":"uint256","nodeType":"ElementaryTypeName","src":"3208:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3176:46:59"},"returnParameters":{"id":10721,"nodeType":"ParameterList","parameters":[],"src":"3232:0:59"},"scope":11048,"src":"3146:225:59","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10784,"nodeType":"Block","src":"4137:370:59","statements":[{"id":10783,"nodeType":"UncheckedBlock","src":"4147:354:59","statements":[{"assignments":[10754],"declarations":[{"constant":false,"id":10754,"mutability":"mutable","name":"currentAllowance","nameLocation":"4179:16:59","nodeType":"VariableDeclaration","scope":10783,"src":"4171:24:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10753,"name":"uint256","nodeType":"ElementaryTypeName","src":"4171:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10763,"initialValue":{"arguments":[{"arguments":[{"id":10759,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4222:4:59","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$11048","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$11048","typeString":"library SafeERC20"}],"id":10758,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4214:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10757,"name":"address","nodeType":"ElementaryTypeName","src":"4214:7:59","typeDescriptions":{}}},"id":10760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4214:13:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10761,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10748,"src":"4229:7:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10755,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10746,"src":"4198:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":10756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4204:9:59","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":10535,"src":"4198:15:59","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":10762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4198:39:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4171:66:59"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10764,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10754,"src":"4255:16:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":10765,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10750,"src":"4274:17:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4255:36:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10774,"nodeType":"IfStatement","src":"4251:160:59","trueBody":{"id":10773,"nodeType":"Block","src":"4293:118:59","statements":[{"errorCall":{"arguments":[{"id":10768,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10748,"src":"4351:7:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10769,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10754,"src":"4360:16:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10770,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10750,"src":"4378:17:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10767,"name":"SafeERC20FailedDecreaseAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10605,"src":"4318:32:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":10771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4318:78:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10772,"nodeType":"RevertStatement","src":"4311:85:59"}]}},{"expression":{"arguments":[{"id":10776,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10746,"src":"4437:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":10777,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10748,"src":"4444:7:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10778,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10754,"src":"4453:16:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":10779,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10750,"src":"4472:17:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4453:36:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10775,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10832,"src":"4424:12:59","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":10781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4424:66:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10782,"nodeType":"ExpressionStatement","src":"4424:66:59"}]}]},"documentation":{"id":10743,"nodeType":"StructuredDocumentation","src":"3377:657:59","text":" @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n value, non-reverting calls are assumed to be successful.\n IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior."},"id":10785,"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"4048:21:59","nodeType":"FunctionDefinition","parameters":{"id":10751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10746,"mutability":"mutable","name":"token","nameLocation":"4077:5:59","nodeType":"VariableDeclaration","scope":10785,"src":"4070:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":10745,"nodeType":"UserDefinedTypeName","pathNode":{"id":10744,"name":"IERC20","nameLocations":["4070:6:59"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"4070:6:59"},"referencedDeclaration":10558,"src":"4070:6:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10748,"mutability":"mutable","name":"spender","nameLocation":"4092:7:59","nodeType":"VariableDeclaration","scope":10785,"src":"4084:15:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10747,"name":"address","nodeType":"ElementaryTypeName","src":"4084:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10750,"mutability":"mutable","name":"requestedDecrease","nameLocation":"4109:17:59","nodeType":"VariableDeclaration","scope":10785,"src":"4101:25:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10749,"name":"uint256","nodeType":"ElementaryTypeName","src":"4101:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4069:58:59"},"returnParameters":{"id":10752,"nodeType":"ParameterList","parameters":[],"src":"4137:0:59"},"scope":11048,"src":"4039:468:59","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10831,"nodeType":"Block","src":"5161:303:59","statements":[{"assignments":[10797],"declarations":[{"constant":false,"id":10797,"mutability":"mutable","name":"approvalCall","nameLocation":"5184:12:59","nodeType":"VariableDeclaration","scope":10831,"src":"5171:25:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10796,"name":"bytes","nodeType":"ElementaryTypeName","src":"5171:5:59","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":10806,"initialValue":{"arguments":[{"expression":{"id":10800,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10789,"src":"5214:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":10801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5220:7:59","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":10545,"src":"5214:13:59","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":10802,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10791,"src":"5230:7:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10803,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10793,"src":"5239:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10804,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5229:16:59","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":10798,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5199:3:59","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10799,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5203:10:59","memberName":"encodeCall","nodeType":"MemberAccess","src":"5199:14:59","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5199:47:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"5171:75:59"},{"condition":{"id":10811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5261:45:59","subExpression":{"arguments":[{"id":10808,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10789,"src":"5286:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":10809,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10797,"src":"5293:12:59","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10807,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11047,"src":"5262:23:59","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":10810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5262:44:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10830,"nodeType":"IfStatement","src":"5257:201:59","trueBody":{"id":10829,"nodeType":"Block","src":"5308:150:59","statements":[{"expression":{"arguments":[{"id":10813,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10789,"src":"5342:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":10816,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10789,"src":"5364:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":10817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5370:7:59","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":10545,"src":"5364:13:59","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":10818,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10791,"src":"5380:7:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":10819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5389:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":10820,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5379:12:59","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}],"expression":{"id":10814,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5349:3:59","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10815,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5353:10:59","memberName":"encodeCall","nodeType":"MemberAccess","src":"5349:14:59","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5349:43:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10812,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11006,"src":"5322:19:59","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":10822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5322:71:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10823,"nodeType":"ExpressionStatement","src":"5322:71:59"},{"expression":{"arguments":[{"id":10825,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10789,"src":"5427:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":10826,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10797,"src":"5434:12:59","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10824,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11006,"src":"5407:19:59","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":10827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5407:40:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10828,"nodeType":"ExpressionStatement","src":"5407:40:59"}]}}]},"documentation":{"id":10786,"nodeType":"StructuredDocumentation","src":"4513:566:59","text":" @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n to be set to zero before setting it to a non-zero value, such as USDT.\n NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n set here."},"id":10832,"implemented":true,"kind":"function","modifiers":[],"name":"forceApprove","nameLocation":"5093:12:59","nodeType":"FunctionDefinition","parameters":{"id":10794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10789,"mutability":"mutable","name":"token","nameLocation":"5113:5:59","nodeType":"VariableDeclaration","scope":10832,"src":"5106:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":10788,"nodeType":"UserDefinedTypeName","pathNode":{"id":10787,"name":"IERC20","nameLocations":["5106:6:59"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"5106:6:59"},"referencedDeclaration":10558,"src":"5106:6:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10791,"mutability":"mutable","name":"spender","nameLocation":"5128:7:59","nodeType":"VariableDeclaration","scope":10832,"src":"5120:15:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10790,"name":"address","nodeType":"ElementaryTypeName","src":"5120:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10793,"mutability":"mutable","name":"value","nameLocation":"5145:5:59","nodeType":"VariableDeclaration","scope":10832,"src":"5137:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10792,"name":"uint256","nodeType":"ElementaryTypeName","src":"5137:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5105:46:59"},"returnParameters":{"id":10795,"nodeType":"ParameterList","parameters":[],"src":"5161:0:59"},"scope":11048,"src":"5084:380:59","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10874,"nodeType":"Block","src":"5911:219:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":10845,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10838,"src":"5925:2:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5928:4:59","memberName":"code","nodeType":"MemberAccess","src":"5925:7:59","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5933:6:59","memberName":"length","nodeType":"MemberAccess","src":"5925:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10848,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5943:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5925:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"id":10863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6011:39:59","subExpression":{"arguments":[{"id":10859,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10838,"src":"6034:2:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10860,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10840,"src":"6038:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10861,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10842,"src":"6045:4:59","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":10857,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10836,"src":"6012:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"}},"id":10858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6018:15:59","memberName":"transferAndCall","nodeType":"MemberAccess","referencedDeclaration":9601,"src":"6012:21:59","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory) external returns (bool)"}},"id":10862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6012:38:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10872,"nodeType":"IfStatement","src":"6007:117:59","trueBody":{"id":10871,"nodeType":"Block","src":"6052:72:59","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":10867,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10836,"src":"6106:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"}],"id":10866,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6098:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10865,"name":"address","nodeType":"ElementaryTypeName","src":"6098:7:59","typeDescriptions":{}}},"id":10868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6098:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10864,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10596,"src":"6073:24:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6073:40:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10870,"nodeType":"RevertStatement","src":"6066:47:59"}]}},"id":10873,"nodeType":"IfStatement","src":"5921:203:59","trueBody":{"id":10856,"nodeType":"Block","src":"5946:55:59","statements":[{"expression":{"arguments":[{"id":10851,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10836,"src":"5973:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"}},{"id":10852,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10838,"src":"5980:2:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10853,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10840,"src":"5984:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10850,"name":"safeTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10629,"src":"5960:12:59","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":10854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5960:30:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10855,"nodeType":"ExpressionStatement","src":"5960:30:59"}]}}]},"documentation":{"id":10833,"nodeType":"StructuredDocumentation","src":"5470:333:59","text":" @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n targeting contracts.\n Reverts if the returned value is other than `true`."},"id":10875,"implemented":true,"kind":"function","modifiers":[],"name":"transferAndCallRelaxed","nameLocation":"5817:22:59","nodeType":"FunctionDefinition","parameters":{"id":10843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10836,"mutability":"mutable","name":"token","nameLocation":"5849:5:59","nodeType":"VariableDeclaration","scope":10875,"src":"5840:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"},"typeName":{"id":10835,"nodeType":"UserDefinedTypeName","pathNode":{"id":10834,"name":"IERC1363","nameLocations":["5840:8:59"],"nodeType":"IdentifierPath","referencedDeclaration":9650,"src":"5840:8:59"},"referencedDeclaration":9650,"src":"5840:8:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"}},"visibility":"internal"},{"constant":false,"id":10838,"mutability":"mutable","name":"to","nameLocation":"5864:2:59","nodeType":"VariableDeclaration","scope":10875,"src":"5856:10:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10837,"name":"address","nodeType":"ElementaryTypeName","src":"5856:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10840,"mutability":"mutable","name":"value","nameLocation":"5876:5:59","nodeType":"VariableDeclaration","scope":10875,"src":"5868:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10839,"name":"uint256","nodeType":"ElementaryTypeName","src":"5868:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10842,"mutability":"mutable","name":"data","nameLocation":"5896:4:59","nodeType":"VariableDeclaration","scope":10875,"src":"5883:17:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10841,"name":"bytes","nodeType":"ElementaryTypeName","src":"5883:5:59","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5839:62:59"},"returnParameters":{"id":10844,"nodeType":"ParameterList","parameters":[],"src":"5911:0:59"},"scope":11048,"src":"5808:322:59","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10921,"nodeType":"Block","src":"6649:239:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":10890,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10883,"src":"6663:2:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6666:4:59","memberName":"code","nodeType":"MemberAccess","src":"6663:7:59","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6671:6:59","memberName":"length","nodeType":"MemberAccess","src":"6663:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10893,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6681:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6663:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"id":10910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6759:49:59","subExpression":{"arguments":[{"id":10905,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10881,"src":"6786:4:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10906,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10883,"src":"6792:2:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10907,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10885,"src":"6796:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10908,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10887,"src":"6803:4:59","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":10903,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10879,"src":"6760:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"}},"id":10904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6766:19:59","memberName":"transferFromAndCall","nodeType":"MemberAccess","referencedDeclaration":9627,"src":"6760:25:59","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,address,uint256,bytes memory) external returns (bool)"}},"id":10909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6760:48:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10919,"nodeType":"IfStatement","src":"6755:127:59","trueBody":{"id":10918,"nodeType":"Block","src":"6810:72:59","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":10914,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10879,"src":"6864:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"}],"id":10913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6856:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10912,"name":"address","nodeType":"ElementaryTypeName","src":"6856:7:59","typeDescriptions":{}}},"id":10915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6856:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10911,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10596,"src":"6831:24:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6831:40:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10917,"nodeType":"RevertStatement","src":"6824:47:59"}]}},"id":10920,"nodeType":"IfStatement","src":"6659:223:59","trueBody":{"id":10902,"nodeType":"Block","src":"6684:65:59","statements":[{"expression":{"arguments":[{"id":10896,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10879,"src":"6715:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"}},{"id":10897,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10881,"src":"6722:4:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10898,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10883,"src":"6728:2:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10899,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10885,"src":"6732:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10895,"name":"safeTransferFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10656,"src":"6698:16:59","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":10900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6698:40:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10901,"nodeType":"ExpressionStatement","src":"6698:40:59"}]}}]},"documentation":{"id":10876,"nodeType":"StructuredDocumentation","src":"6136:341:59","text":" @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n targeting contracts.\n Reverts if the returned value is other than `true`."},"id":10922,"implemented":true,"kind":"function","modifiers":[],"name":"transferFromAndCallRelaxed","nameLocation":"6491:26:59","nodeType":"FunctionDefinition","parameters":{"id":10888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10879,"mutability":"mutable","name":"token","nameLocation":"6536:5:59","nodeType":"VariableDeclaration","scope":10922,"src":"6527:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"},"typeName":{"id":10878,"nodeType":"UserDefinedTypeName","pathNode":{"id":10877,"name":"IERC1363","nameLocations":["6527:8:59"],"nodeType":"IdentifierPath","referencedDeclaration":9650,"src":"6527:8:59"},"referencedDeclaration":9650,"src":"6527:8:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"}},"visibility":"internal"},{"constant":false,"id":10881,"mutability":"mutable","name":"from","nameLocation":"6559:4:59","nodeType":"VariableDeclaration","scope":10922,"src":"6551:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10880,"name":"address","nodeType":"ElementaryTypeName","src":"6551:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10883,"mutability":"mutable","name":"to","nameLocation":"6581:2:59","nodeType":"VariableDeclaration","scope":10922,"src":"6573:10:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10882,"name":"address","nodeType":"ElementaryTypeName","src":"6573:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10885,"mutability":"mutable","name":"value","nameLocation":"6601:5:59","nodeType":"VariableDeclaration","scope":10922,"src":"6593:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10884,"name":"uint256","nodeType":"ElementaryTypeName","src":"6593:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10887,"mutability":"mutable","name":"data","nameLocation":"6629:4:59","nodeType":"VariableDeclaration","scope":10922,"src":"6616:17:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10886,"name":"bytes","nodeType":"ElementaryTypeName","src":"6616:5:59","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6517:122:59"},"returnParameters":{"id":10889,"nodeType":"ParameterList","parameters":[],"src":"6649:0:59"},"scope":11048,"src":"6482:406:59","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10964,"nodeType":"Block","src":"7655:218:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":10935,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10928,"src":"7669:2:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7672:4:59","memberName":"code","nodeType":"MemberAccess","src":"7669:7:59","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7677:6:59","memberName":"length","nodeType":"MemberAccess","src":"7669:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10938,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7687:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7669:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"id":10953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7755:38:59","subExpression":{"arguments":[{"id":10949,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10928,"src":"7777:2:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10950,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10930,"src":"7781:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10951,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10932,"src":"7788:4:59","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":10947,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10926,"src":"7756:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"}},"id":10948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7762:14:59","memberName":"approveAndCall","nodeType":"MemberAccess","referencedDeclaration":9649,"src":"7756:20:59","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,uint256,bytes memory) external returns (bool)"}},"id":10952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7756:37:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10962,"nodeType":"IfStatement","src":"7751:116:59","trueBody":{"id":10961,"nodeType":"Block","src":"7795:72:59","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":10957,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10926,"src":"7849:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"}],"id":10956,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7841:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10955,"name":"address","nodeType":"ElementaryTypeName","src":"7841:7:59","typeDescriptions":{}}},"id":10958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7841:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10954,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10596,"src":"7816:24:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":10959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7816:40:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10960,"nodeType":"RevertStatement","src":"7809:47:59"}]}},"id":10963,"nodeType":"IfStatement","src":"7665:202:59","trueBody":{"id":10946,"nodeType":"Block","src":"7690:55:59","statements":[{"expression":{"arguments":[{"id":10941,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10926,"src":"7717:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"}},{"id":10942,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10928,"src":"7724:2:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10943,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10930,"src":"7728:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10940,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10832,"src":"7704:12:59","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":10944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7704:30:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10945,"nodeType":"ExpressionStatement","src":"7704:30:59"}]}}]},"documentation":{"id":10923,"nodeType":"StructuredDocumentation","src":"6894:654:59","text":" @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n targeting contracts.\n NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n once without retrying, and relies on the returned value to be true.\n Reverts if the returned value is other than `true`."},"id":10965,"implemented":true,"kind":"function","modifiers":[],"name":"approveAndCallRelaxed","nameLocation":"7562:21:59","nodeType":"FunctionDefinition","parameters":{"id":10933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10926,"mutability":"mutable","name":"token","nameLocation":"7593:5:59","nodeType":"VariableDeclaration","scope":10965,"src":"7584:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"},"typeName":{"id":10925,"nodeType":"UserDefinedTypeName","pathNode":{"id":10924,"name":"IERC1363","nameLocations":["7584:8:59"],"nodeType":"IdentifierPath","referencedDeclaration":9650,"src":"7584:8:59"},"referencedDeclaration":9650,"src":"7584:8:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC1363_$9650","typeString":"contract IERC1363"}},"visibility":"internal"},{"constant":false,"id":10928,"mutability":"mutable","name":"to","nameLocation":"7608:2:59","nodeType":"VariableDeclaration","scope":10965,"src":"7600:10:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10927,"name":"address","nodeType":"ElementaryTypeName","src":"7600:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10930,"mutability":"mutable","name":"value","nameLocation":"7620:5:59","nodeType":"VariableDeclaration","scope":10965,"src":"7612:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10929,"name":"uint256","nodeType":"ElementaryTypeName","src":"7612:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10932,"mutability":"mutable","name":"data","nameLocation":"7640:4:59","nodeType":"VariableDeclaration","scope":10965,"src":"7627:17:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10931,"name":"bytes","nodeType":"ElementaryTypeName","src":"7627:5:59","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7583:62:59"},"returnParameters":{"id":10934,"nodeType":"ParameterList","parameters":[],"src":"7655:0:59"},"scope":11048,"src":"7553:320:59","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11005,"nodeType":"Block","src":"8440:650:59","statements":[{"assignments":[10975],"declarations":[{"constant":false,"id":10975,"mutability":"mutable","name":"returnSize","nameLocation":"8458:10:59","nodeType":"VariableDeclaration","scope":11005,"src":"8450:18:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10974,"name":"uint256","nodeType":"ElementaryTypeName","src":"8450:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10976,"nodeType":"VariableDeclarationStatement","src":"8450:18:59"},{"assignments":[10978],"declarations":[{"constant":false,"id":10978,"mutability":"mutable","name":"returnValue","nameLocation":"8486:11:59","nodeType":"VariableDeclaration","scope":11005,"src":"8478:19:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10977,"name":"uint256","nodeType":"ElementaryTypeName","src":"8478:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10979,"nodeType":"VariableDeclarationStatement","src":"8478:19:59"},{"AST":{"nativeSrc":"8532:396:59","nodeType":"YulBlock","src":"8532:396:59","statements":[{"nativeSrc":"8546:75:59","nodeType":"YulVariableDeclaration","src":"8546:75:59","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"8566:3:59","nodeType":"YulIdentifier","src":"8566:3:59"},"nativeSrc":"8566:5:59","nodeType":"YulFunctionCall","src":"8566:5:59"},{"name":"token","nativeSrc":"8573:5:59","nodeType":"YulIdentifier","src":"8573:5:59"},{"kind":"number","nativeSrc":"8580:1:59","nodeType":"YulLiteral","src":"8580:1:59","type":"","value":"0"},{"arguments":[{"name":"data","nativeSrc":"8587:4:59","nodeType":"YulIdentifier","src":"8587:4:59"},{"kind":"number","nativeSrc":"8593:4:59","nodeType":"YulLiteral","src":"8593:4:59","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"8583:3:59","nodeType":"YulIdentifier","src":"8583:3:59"},"nativeSrc":"8583:15:59","nodeType":"YulFunctionCall","src":"8583:15:59"},{"arguments":[{"name":"data","nativeSrc":"8606:4:59","nodeType":"YulIdentifier","src":"8606:4:59"}],"functionName":{"name":"mload","nativeSrc":"8600:5:59","nodeType":"YulIdentifier","src":"8600:5:59"},"nativeSrc":"8600:11:59","nodeType":"YulFunctionCall","src":"8600:11:59"},{"kind":"number","nativeSrc":"8613:1:59","nodeType":"YulLiteral","src":"8613:1:59","type":"","value":"0"},{"kind":"number","nativeSrc":"8616:4:59","nodeType":"YulLiteral","src":"8616:4:59","type":"","value":"0x20"}],"functionName":{"name":"call","nativeSrc":"8561:4:59","nodeType":"YulIdentifier","src":"8561:4:59"},"nativeSrc":"8561:60:59","nodeType":"YulFunctionCall","src":"8561:60:59"},"variables":[{"name":"success","nativeSrc":"8550:7:59","nodeType":"YulTypedName","src":"8550:7:59","type":""}]},{"body":{"nativeSrc":"8682:157:59","nodeType":"YulBlock","src":"8682:157:59","statements":[{"nativeSrc":"8700:22:59","nodeType":"YulVariableDeclaration","src":"8700:22:59","value":{"arguments":[{"kind":"number","nativeSrc":"8717:4:59","nodeType":"YulLiteral","src":"8717:4:59","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"8711:5:59","nodeType":"YulIdentifier","src":"8711:5:59"},"nativeSrc":"8711:11:59","nodeType":"YulFunctionCall","src":"8711:11:59"},"variables":[{"name":"ptr","nativeSrc":"8704:3:59","nodeType":"YulTypedName","src":"8704:3:59","type":""}]},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"8754:3:59","nodeType":"YulIdentifier","src":"8754:3:59"},{"kind":"number","nativeSrc":"8759:1:59","nodeType":"YulLiteral","src":"8759:1:59","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"8762:14:59","nodeType":"YulIdentifier","src":"8762:14:59"},"nativeSrc":"8762:16:59","nodeType":"YulFunctionCall","src":"8762:16:59"}],"functionName":{"name":"returndatacopy","nativeSrc":"8739:14:59","nodeType":"YulIdentifier","src":"8739:14:59"},"nativeSrc":"8739:40:59","nodeType":"YulFunctionCall","src":"8739:40:59"},"nativeSrc":"8739:40:59","nodeType":"YulExpressionStatement","src":"8739:40:59"},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"8803:3:59","nodeType":"YulIdentifier","src":"8803:3:59"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"8808:14:59","nodeType":"YulIdentifier","src":"8808:14:59"},"nativeSrc":"8808:16:59","nodeType":"YulFunctionCall","src":"8808:16:59"}],"functionName":{"name":"revert","nativeSrc":"8796:6:59","nodeType":"YulIdentifier","src":"8796:6:59"},"nativeSrc":"8796:29:59","nodeType":"YulFunctionCall","src":"8796:29:59"},"nativeSrc":"8796:29:59","nodeType":"YulExpressionStatement","src":"8796:29:59"}]},"condition":{"arguments":[{"name":"success","nativeSrc":"8673:7:59","nodeType":"YulIdentifier","src":"8673:7:59"}],"functionName":{"name":"iszero","nativeSrc":"8666:6:59","nodeType":"YulIdentifier","src":"8666:6:59"},"nativeSrc":"8666:15:59","nodeType":"YulFunctionCall","src":"8666:15:59"},"nativeSrc":"8663:176:59","nodeType":"YulIf","src":"8663:176:59"},{"nativeSrc":"8852:30:59","nodeType":"YulAssignment","src":"8852:30:59","value":{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"8866:14:59","nodeType":"YulIdentifier","src":"8866:14:59"},"nativeSrc":"8866:16:59","nodeType":"YulFunctionCall","src":"8866:16:59"},"variableNames":[{"name":"returnSize","nativeSrc":"8852:10:59","nodeType":"YulIdentifier","src":"8852:10:59"}]},{"nativeSrc":"8895:23:59","nodeType":"YulAssignment","src":"8895:23:59","value":{"arguments":[{"kind":"number","nativeSrc":"8916:1:59","nodeType":"YulLiteral","src":"8916:1:59","type":"","value":"0"}],"functionName":{"name":"mload","nativeSrc":"8910:5:59","nodeType":"YulIdentifier","src":"8910:5:59"},"nativeSrc":"8910:8:59","nodeType":"YulFunctionCall","src":"8910:8:59"},"variableNames":[{"name":"returnValue","nativeSrc":"8895:11:59","nodeType":"YulIdentifier","src":"8895:11:59"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":10971,"isOffset":false,"isSlot":false,"src":"8587:4:59","valueSize":1},{"declaration":10971,"isOffset":false,"isSlot":false,"src":"8606:4:59","valueSize":1},{"declaration":10975,"isOffset":false,"isSlot":false,"src":"8852:10:59","valueSize":1},{"declaration":10978,"isOffset":false,"isSlot":false,"src":"8895:11:59","valueSize":1},{"declaration":10969,"isOffset":false,"isSlot":false,"src":"8573:5:59","valueSize":1}],"flags":["memory-safe"],"id":10980,"nodeType":"InlineAssembly","src":"8507:421:59"},{"condition":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10981,"name":"returnSize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10975,"src":"8942:10:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10982,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8956:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8942:15:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10992,"name":"returnValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10978,"src":"8994:11:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"31","id":10993,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9009:1:59","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8994:16:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8942:68:59","trueExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":10986,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10969,"src":"8968:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":10985,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8960:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10984,"name":"address","nodeType":"ElementaryTypeName","src":"8960:7:59","typeDescriptions":{}}},"id":10987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8960:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8975:4:59","memberName":"code","nodeType":"MemberAccess","src":"8960:19:59","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8980:6:59","memberName":"length","nodeType":"MemberAccess","src":"8960:26:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10990,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8990:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8960:31:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11004,"nodeType":"IfStatement","src":"8938:146:59","trueBody":{"id":11003,"nodeType":"Block","src":"9012:72:59","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":10999,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10969,"src":"9066:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":10998,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9058:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10997,"name":"address","nodeType":"ElementaryTypeName","src":"9058:7:59","typeDescriptions":{}}},"id":11000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9058:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10996,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10596,"src":"9033:24:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":11001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9033:40:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11002,"nodeType":"RevertStatement","src":"9026:47:59"}]}}]},"documentation":{"id":10966,"nodeType":"StructuredDocumentation","src":"7879:486:59","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements."},"id":11006,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturn","nameLocation":"8379:19:59","nodeType":"FunctionDefinition","parameters":{"id":10972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10969,"mutability":"mutable","name":"token","nameLocation":"8406:5:59","nodeType":"VariableDeclaration","scope":11006,"src":"8399:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":10968,"nodeType":"UserDefinedTypeName","pathNode":{"id":10967,"name":"IERC20","nameLocations":["8399:6:59"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"8399:6:59"},"referencedDeclaration":10558,"src":"8399:6:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":10971,"mutability":"mutable","name":"data","nameLocation":"8426:4:59","nodeType":"VariableDeclaration","scope":11006,"src":"8413:17:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10970,"name":"bytes","nodeType":"ElementaryTypeName","src":"8413:5:59","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8398:33:59"},"returnParameters":{"id":10973,"nodeType":"ParameterList","parameters":[],"src":"8440:0:59"},"scope":11048,"src":"8370:720:59","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":11046,"nodeType":"Block","src":"9681:391:59","statements":[{"assignments":[11018],"declarations":[{"constant":false,"id":11018,"mutability":"mutable","name":"success","nameLocation":"9696:7:59","nodeType":"VariableDeclaration","scope":11046,"src":"9691:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11017,"name":"bool","nodeType":"ElementaryTypeName","src":"9691:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":11019,"nodeType":"VariableDeclarationStatement","src":"9691:12:59"},{"assignments":[11021],"declarations":[{"constant":false,"id":11021,"mutability":"mutable","name":"returnSize","nameLocation":"9721:10:59","nodeType":"VariableDeclaration","scope":11046,"src":"9713:18:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11020,"name":"uint256","nodeType":"ElementaryTypeName","src":"9713:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11022,"nodeType":"VariableDeclarationStatement","src":"9713:18:59"},{"assignments":[11024],"declarations":[{"constant":false,"id":11024,"mutability":"mutable","name":"returnValue","nameLocation":"9749:11:59","nodeType":"VariableDeclaration","scope":11046,"src":"9741:19:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11023,"name":"uint256","nodeType":"ElementaryTypeName","src":"9741:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11025,"nodeType":"VariableDeclarationStatement","src":"9741:19:59"},{"AST":{"nativeSrc":"9795:174:59","nodeType":"YulBlock","src":"9795:174:59","statements":[{"nativeSrc":"9809:71:59","nodeType":"YulAssignment","src":"9809:71:59","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"9825:3:59","nodeType":"YulIdentifier","src":"9825:3:59"},"nativeSrc":"9825:5:59","nodeType":"YulFunctionCall","src":"9825:5:59"},{"name":"token","nativeSrc":"9832:5:59","nodeType":"YulIdentifier","src":"9832:5:59"},{"kind":"number","nativeSrc":"9839:1:59","nodeType":"YulLiteral","src":"9839:1:59","type":"","value":"0"},{"arguments":[{"name":"data","nativeSrc":"9846:4:59","nodeType":"YulIdentifier","src":"9846:4:59"},{"kind":"number","nativeSrc":"9852:4:59","nodeType":"YulLiteral","src":"9852:4:59","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"9842:3:59","nodeType":"YulIdentifier","src":"9842:3:59"},"nativeSrc":"9842:15:59","nodeType":"YulFunctionCall","src":"9842:15:59"},{"arguments":[{"name":"data","nativeSrc":"9865:4:59","nodeType":"YulIdentifier","src":"9865:4:59"}],"functionName":{"name":"mload","nativeSrc":"9859:5:59","nodeType":"YulIdentifier","src":"9859:5:59"},"nativeSrc":"9859:11:59","nodeType":"YulFunctionCall","src":"9859:11:59"},{"kind":"number","nativeSrc":"9872:1:59","nodeType":"YulLiteral","src":"9872:1:59","type":"","value":"0"},{"kind":"number","nativeSrc":"9875:4:59","nodeType":"YulLiteral","src":"9875:4:59","type":"","value":"0x20"}],"functionName":{"name":"call","nativeSrc":"9820:4:59","nodeType":"YulIdentifier","src":"9820:4:59"},"nativeSrc":"9820:60:59","nodeType":"YulFunctionCall","src":"9820:60:59"},"variableNames":[{"name":"success","nativeSrc":"9809:7:59","nodeType":"YulIdentifier","src":"9809:7:59"}]},{"nativeSrc":"9893:30:59","nodeType":"YulAssignment","src":"9893:30:59","value":{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"9907:14:59","nodeType":"YulIdentifier","src":"9907:14:59"},"nativeSrc":"9907:16:59","nodeType":"YulFunctionCall","src":"9907:16:59"},"variableNames":[{"name":"returnSize","nativeSrc":"9893:10:59","nodeType":"YulIdentifier","src":"9893:10:59"}]},{"nativeSrc":"9936:23:59","nodeType":"YulAssignment","src":"9936:23:59","value":{"arguments":[{"kind":"number","nativeSrc":"9957:1:59","nodeType":"YulLiteral","src":"9957:1:59","type":"","value":"0"}],"functionName":{"name":"mload","nativeSrc":"9951:5:59","nodeType":"YulIdentifier","src":"9951:5:59"},"nativeSrc":"9951:8:59","nodeType":"YulFunctionCall","src":"9951:8:59"},"variableNames":[{"name":"returnValue","nativeSrc":"9936:11:59","nodeType":"YulIdentifier","src":"9936:11:59"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11012,"isOffset":false,"isSlot":false,"src":"9846:4:59","valueSize":1},{"declaration":11012,"isOffset":false,"isSlot":false,"src":"9865:4:59","valueSize":1},{"declaration":11021,"isOffset":false,"isSlot":false,"src":"9893:10:59","valueSize":1},{"declaration":11024,"isOffset":false,"isSlot":false,"src":"9936:11:59","valueSize":1},{"declaration":11018,"isOffset":false,"isSlot":false,"src":"9809:7:59","valueSize":1},{"declaration":11010,"isOffset":false,"isSlot":false,"src":"9832:5:59","valueSize":1}],"flags":["memory-safe"],"id":11026,"nodeType":"InlineAssembly","src":"9770:199:59"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11027,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11018,"src":"9985:7:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11028,"name":"returnSize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11021,"src":"9997:10:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11029,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10011:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9997:15:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11039,"name":"returnValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11024,"src":"10048:11:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":11040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10063:1:59","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10048:16:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9997:67:59","trueExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":11033,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11010,"src":"10023:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":11032,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10015:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11031,"name":"address","nodeType":"ElementaryTypeName","src":"10015:7:59","typeDescriptions":{}}},"id":11034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10015:14:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10030:4:59","memberName":"code","nodeType":"MemberAccess","src":"10015:19:59","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10035:6:59","memberName":"length","nodeType":"MemberAccess","src":"10015:26:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11037,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10044:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10015:30:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":11043,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9996:69:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9985:80:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":11016,"id":11045,"nodeType":"Return","src":"9978:87:59"}]},"documentation":{"id":11007,"nodeType":"StructuredDocumentation","src":"9096:491:59","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead."},"id":11047,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturnBool","nameLocation":"9601:23:59","nodeType":"FunctionDefinition","parameters":{"id":11013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11010,"mutability":"mutable","name":"token","nameLocation":"9632:5:59","nodeType":"VariableDeclaration","scope":11047,"src":"9625:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":11009,"nodeType":"UserDefinedTypeName","pathNode":{"id":11008,"name":"IERC20","nameLocations":["9625:6:59"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"9625:6:59"},"referencedDeclaration":10558,"src":"9625:6:59","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":11012,"mutability":"mutable","name":"data","nameLocation":"9652:4:59","nodeType":"VariableDeclaration","scope":11047,"src":"9639:17:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11011,"name":"bytes","nodeType":"ElementaryTypeName","src":"9639:5:59","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9624:33:59"},"returnParameters":{"id":11016,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11015,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11047,"src":"9675:4:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11014,"name":"bool","nodeType":"ElementaryTypeName","src":"9675:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9674:6:59"},"scope":11048,"src":"9592:480:59","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":11049,"src":"698:9376:59","usedErrors":[10596,10605],"usedEvents":[]}],"src":"115:9960:59"},"id":59},"@openzeppelin/contracts/utils/Address.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","exportedSymbols":{"Address":[11308],"Errors":[12370]},"id":11309,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":11050,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:60"},{"absolutePath":"@openzeppelin/contracts/utils/Errors.sol","file":"./Errors.sol","id":11052,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11309,"sourceUnit":12371,"src":"127:36:60","symbolAliases":[{"foreign":{"id":11051,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12370,"src":"135:6:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":11053,"nodeType":"StructuredDocumentation","src":"165:67:60","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":11308,"linearizedBaseContracts":[11308],"name":"Address","nameLocation":"241:7:60","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":11054,"nodeType":"StructuredDocumentation","src":"255:75:60","text":" @dev There's no code at `target` (it is not a contract)."},"errorSelector":"9996b315","id":11058,"name":"AddressEmptyCode","nameLocation":"341:16:60","nodeType":"ErrorDefinition","parameters":{"id":11057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11056,"mutability":"mutable","name":"target","nameLocation":"366:6:60","nodeType":"VariableDeclaration","scope":11058,"src":"358:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11055,"name":"address","nodeType":"ElementaryTypeName","src":"358:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"357:16:60"},"src":"335:39:60"},{"body":{"id":11105,"nodeType":"Block","src":"1361:294:60","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11068,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1383:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$11308","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$11308","typeString":"library Address"}],"id":11067,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1375:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11066,"name":"address","nodeType":"ElementaryTypeName","src":"1375:7:60","typeDescriptions":{}}},"id":11069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1375:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1389:7:60","memberName":"balance","nodeType":"MemberAccess","src":"1375:21:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11071,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11063,"src":"1399:6:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1375:30:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11085,"nodeType":"IfStatement","src":"1371:125:60","trueBody":{"id":11084,"nodeType":"Block","src":"1407:89:60","statements":[{"errorCall":{"arguments":[{"expression":{"arguments":[{"id":11078,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1463:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$11308","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$11308","typeString":"library Address"}],"id":11077,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1455:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11076,"name":"address","nodeType":"ElementaryTypeName","src":"1455:7:60","typeDescriptions":{}}},"id":11079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1455:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1469:7:60","memberName":"balance","nodeType":"MemberAccess","src":"1455:21:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11081,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11063,"src":"1478:6:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11073,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12370,"src":"1428:6:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12370_$","typeString":"type(library Errors)"}},"id":11075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1435:19:60","memberName":"InsufficientBalance","nodeType":"MemberAccess","referencedDeclaration":12358,"src":"1428:26:60","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":11082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1428:57:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11083,"nodeType":"RevertStatement","src":"1421:64:60"}]}},{"assignments":[11087,11089],"declarations":[{"constant":false,"id":11087,"mutability":"mutable","name":"success","nameLocation":"1512:7:60","nodeType":"VariableDeclaration","scope":11105,"src":"1507:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11086,"name":"bool","nodeType":"ElementaryTypeName","src":"1507:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11089,"mutability":"mutable","name":"returndata","nameLocation":"1534:10:60","nodeType":"VariableDeclaration","scope":11105,"src":"1521:23:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11088,"name":"bytes","nodeType":"ElementaryTypeName","src":"1521:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":11096,"initialValue":{"arguments":[{"hexValue":"","id":11094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1578:2:60","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":11090,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11061,"src":"1548:9:60","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":11091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1558:4:60","memberName":"call","nodeType":"MemberAccess","src":"1548:14:60","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":11093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":11092,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11063,"src":"1570:6:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"1548:29:60","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":11095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1548:33:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1506:75:60"},{"condition":{"id":11098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1595:8:60","subExpression":{"id":11097,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11087,"src":"1596:7:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11104,"nodeType":"IfStatement","src":"1591:58:60","trueBody":{"id":11103,"nodeType":"Block","src":"1605:44:60","statements":[{"expression":{"arguments":[{"id":11100,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11089,"src":"1627:10:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11099,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11307,"src":"1619:7:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":11101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1619:19:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11102,"nodeType":"ExpressionStatement","src":"1619:19:60"}]}}]},"documentation":{"id":11059,"nodeType":"StructuredDocumentation","src":"380:905:60","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":11106,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"1299:9:60","nodeType":"FunctionDefinition","parameters":{"id":11064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11061,"mutability":"mutable","name":"recipient","nameLocation":"1325:9:60","nodeType":"VariableDeclaration","scope":11106,"src":"1309:25:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":11060,"name":"address","nodeType":"ElementaryTypeName","src":"1309:15:60","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":11063,"mutability":"mutable","name":"amount","nameLocation":"1344:6:60","nodeType":"VariableDeclaration","scope":11106,"src":"1336:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11062,"name":"uint256","nodeType":"ElementaryTypeName","src":"1336:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1308:43:60"},"returnParameters":{"id":11065,"nodeType":"ParameterList","parameters":[],"src":"1361:0:60"},"scope":11308,"src":"1290:365:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11122,"nodeType":"Block","src":"2589:62:60","statements":[{"expression":{"arguments":[{"id":11117,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11109,"src":"2628:6:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11118,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11111,"src":"2636:4:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":11119,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2642:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":11116,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11173,"src":"2606:21:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256) returns (bytes memory)"}},"id":11120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2606:38:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11115,"id":11121,"nodeType":"Return","src":"2599:45:60"}]},"documentation":{"id":11107,"nodeType":"StructuredDocumentation","src":"1661:834:60","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason or custom error, it is bubbled\n up by this function (like regular Solidity function calls). However, if\n the call reverted with no returned reason, this function reverts with a\n {Errors.FailedCall} error.\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert."},"id":11123,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"2509:12:60","nodeType":"FunctionDefinition","parameters":{"id":11112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11109,"mutability":"mutable","name":"target","nameLocation":"2530:6:60","nodeType":"VariableDeclaration","scope":11123,"src":"2522:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11108,"name":"address","nodeType":"ElementaryTypeName","src":"2522:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11111,"mutability":"mutable","name":"data","nameLocation":"2551:4:60","nodeType":"VariableDeclaration","scope":11123,"src":"2538:17:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11110,"name":"bytes","nodeType":"ElementaryTypeName","src":"2538:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2521:35:60"},"returnParameters":{"id":11115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11114,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11123,"src":"2575:12:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11113,"name":"bytes","nodeType":"ElementaryTypeName","src":"2575:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2574:14:60"},"scope":11308,"src":"2500:151:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11172,"nodeType":"Block","src":"3088:294:60","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11137,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3110:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$11308","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$11308","typeString":"library Address"}],"id":11136,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3102:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11135,"name":"address","nodeType":"ElementaryTypeName","src":"3102:7:60","typeDescriptions":{}}},"id":11138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3102:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3116:7:60","memberName":"balance","nodeType":"MemberAccess","src":"3102:21:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11140,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11130,"src":"3126:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3102:29:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11154,"nodeType":"IfStatement","src":"3098:123:60","trueBody":{"id":11153,"nodeType":"Block","src":"3133:88:60","statements":[{"errorCall":{"arguments":[{"expression":{"arguments":[{"id":11147,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3189:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$11308","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$11308","typeString":"library Address"}],"id":11146,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3181:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11145,"name":"address","nodeType":"ElementaryTypeName","src":"3181:7:60","typeDescriptions":{}}},"id":11148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3181:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3195:7:60","memberName":"balance","nodeType":"MemberAccess","src":"3181:21:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11150,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11130,"src":"3204:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11142,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12370,"src":"3154:6:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12370_$","typeString":"type(library Errors)"}},"id":11144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3161:19:60","memberName":"InsufficientBalance","nodeType":"MemberAccess","referencedDeclaration":12358,"src":"3154:26:60","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":11151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3154:56:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11152,"nodeType":"RevertStatement","src":"3147:63:60"}]}},{"assignments":[11156,11158],"declarations":[{"constant":false,"id":11156,"mutability":"mutable","name":"success","nameLocation":"3236:7:60","nodeType":"VariableDeclaration","scope":11172,"src":"3231:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11155,"name":"bool","nodeType":"ElementaryTypeName","src":"3231:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11158,"mutability":"mutable","name":"returndata","nameLocation":"3258:10:60","nodeType":"VariableDeclaration","scope":11172,"src":"3245:23:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11157,"name":"bytes","nodeType":"ElementaryTypeName","src":"3245:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":11165,"initialValue":{"arguments":[{"id":11163,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11128,"src":"3298:4:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":11159,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11126,"src":"3272:6:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3279:4:60","memberName":"call","nodeType":"MemberAccess","src":"3272:11:60","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":11162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":11161,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11130,"src":"3291:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"3272:25:60","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":11164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3272:31:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3230:73:60"},{"expression":{"arguments":[{"id":11167,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11126,"src":"3347:6:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11168,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11156,"src":"3355:7:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":11169,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11158,"src":"3364:10:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11166,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11265,"src":"3320:26:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":11170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3320:55:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11134,"id":11171,"nodeType":"Return","src":"3313:62:60"}]},"documentation":{"id":11124,"nodeType":"StructuredDocumentation","src":"2657:313:60","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`."},"id":11173,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"2984:21:60","nodeType":"FunctionDefinition","parameters":{"id":11131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11126,"mutability":"mutable","name":"target","nameLocation":"3014:6:60","nodeType":"VariableDeclaration","scope":11173,"src":"3006:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11125,"name":"address","nodeType":"ElementaryTypeName","src":"3006:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11128,"mutability":"mutable","name":"data","nameLocation":"3035:4:60","nodeType":"VariableDeclaration","scope":11173,"src":"3022:17:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11127,"name":"bytes","nodeType":"ElementaryTypeName","src":"3022:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":11130,"mutability":"mutable","name":"value","nameLocation":"3049:5:60","nodeType":"VariableDeclaration","scope":11173,"src":"3041:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11129,"name":"uint256","nodeType":"ElementaryTypeName","src":"3041:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3005:50:60"},"returnParameters":{"id":11134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11133,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11173,"src":"3074:12:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11132,"name":"bytes","nodeType":"ElementaryTypeName","src":"3074:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3073:14:60"},"scope":11308,"src":"2975:407:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11198,"nodeType":"Block","src":"3621:154:60","statements":[{"assignments":[11184,11186],"declarations":[{"constant":false,"id":11184,"mutability":"mutable","name":"success","nameLocation":"3637:7:60","nodeType":"VariableDeclaration","scope":11198,"src":"3632:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11183,"name":"bool","nodeType":"ElementaryTypeName","src":"3632:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11186,"mutability":"mutable","name":"returndata","nameLocation":"3659:10:60","nodeType":"VariableDeclaration","scope":11198,"src":"3646:23:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11185,"name":"bytes","nodeType":"ElementaryTypeName","src":"3646:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":11191,"initialValue":{"arguments":[{"id":11189,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11178,"src":"3691:4:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":11187,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11176,"src":"3673:6:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3680:10:60","memberName":"staticcall","nodeType":"MemberAccess","src":"3673:17:60","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":11190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3673:23:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3631:65:60"},{"expression":{"arguments":[{"id":11193,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11176,"src":"3740:6:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11194,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11184,"src":"3748:7:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":11195,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11186,"src":"3757:10:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11192,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11265,"src":"3713:26:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":11196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3713:55:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11182,"id":11197,"nodeType":"Return","src":"3706:62:60"}]},"documentation":{"id":11174,"nodeType":"StructuredDocumentation","src":"3388:128:60","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call."},"id":11199,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"3530:18:60","nodeType":"FunctionDefinition","parameters":{"id":11179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11176,"mutability":"mutable","name":"target","nameLocation":"3557:6:60","nodeType":"VariableDeclaration","scope":11199,"src":"3549:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11175,"name":"address","nodeType":"ElementaryTypeName","src":"3549:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11178,"mutability":"mutable","name":"data","nameLocation":"3578:4:60","nodeType":"VariableDeclaration","scope":11199,"src":"3565:17:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11177,"name":"bytes","nodeType":"ElementaryTypeName","src":"3565:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3548:35:60"},"returnParameters":{"id":11182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11181,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11199,"src":"3607:12:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11180,"name":"bytes","nodeType":"ElementaryTypeName","src":"3607:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3606:14:60"},"scope":11308,"src":"3521:254:60","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11224,"nodeType":"Block","src":"4013:156:60","statements":[{"assignments":[11210,11212],"declarations":[{"constant":false,"id":11210,"mutability":"mutable","name":"success","nameLocation":"4029:7:60","nodeType":"VariableDeclaration","scope":11224,"src":"4024:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11209,"name":"bool","nodeType":"ElementaryTypeName","src":"4024:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11212,"mutability":"mutable","name":"returndata","nameLocation":"4051:10:60","nodeType":"VariableDeclaration","scope":11224,"src":"4038:23:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11211,"name":"bytes","nodeType":"ElementaryTypeName","src":"4038:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":11217,"initialValue":{"arguments":[{"id":11215,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11204,"src":"4085:4:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":11213,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11202,"src":"4065:6:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4072:12:60","memberName":"delegatecall","nodeType":"MemberAccess","src":"4065:19:60","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":11216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4065:25:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4023:67:60"},{"expression":{"arguments":[{"id":11219,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11202,"src":"4134:6:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11220,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11210,"src":"4142:7:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":11221,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11212,"src":"4151:10:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11218,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11265,"src":"4107:26:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":11222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4107:55:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11208,"id":11223,"nodeType":"Return","src":"4100:62:60"}]},"documentation":{"id":11200,"nodeType":"StructuredDocumentation","src":"3781:130:60","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call."},"id":11225,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"3925:20:60","nodeType":"FunctionDefinition","parameters":{"id":11205,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11202,"mutability":"mutable","name":"target","nameLocation":"3954:6:60","nodeType":"VariableDeclaration","scope":11225,"src":"3946:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11201,"name":"address","nodeType":"ElementaryTypeName","src":"3946:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11204,"mutability":"mutable","name":"data","nameLocation":"3975:4:60","nodeType":"VariableDeclaration","scope":11225,"src":"3962:17:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11203,"name":"bytes","nodeType":"ElementaryTypeName","src":"3962:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3945:35:60"},"returnParameters":{"id":11208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11207,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11225,"src":"3999:12:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11206,"name":"bytes","nodeType":"ElementaryTypeName","src":"3999:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3998:14:60"},"scope":11308,"src":"3916:253:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11264,"nodeType":"Block","src":"4595:424:60","statements":[{"condition":{"id":11238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4609:8:60","subExpression":{"id":11237,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11230,"src":"4610:7:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11262,"nodeType":"Block","src":"4669:344:60","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11244,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11232,"src":"4857:10:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4868:6:60","memberName":"length","nodeType":"MemberAccess","src":"4857:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11246,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4878:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4857:22:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":11248,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11228,"src":"4883:6:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4890:4:60","memberName":"code","nodeType":"MemberAccess","src":"4883:11:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4895:6:60","memberName":"length","nodeType":"MemberAccess","src":"4883:18:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4905:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4883:23:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4857:49:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11259,"nodeType":"IfStatement","src":"4853:119:60","trueBody":{"id":11258,"nodeType":"Block","src":"4908:64:60","statements":[{"errorCall":{"arguments":[{"id":11255,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11228,"src":"4950:6:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11254,"name":"AddressEmptyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11058,"src":"4933:16:60","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":11256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4933:24:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11257,"nodeType":"RevertStatement","src":"4926:31:60"}]}},{"expression":{"id":11260,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11232,"src":"4992:10:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11236,"id":11261,"nodeType":"Return","src":"4985:17:60"}]},"id":11263,"nodeType":"IfStatement","src":"4605:408:60","trueBody":{"id":11243,"nodeType":"Block","src":"4619:44:60","statements":[{"expression":{"arguments":[{"id":11240,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11232,"src":"4641:10:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11239,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11307,"src":"4633:7:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":11241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4633:19:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11242,"nodeType":"ExpressionStatement","src":"4633:19:60"}]}}]},"documentation":{"id":11226,"nodeType":"StructuredDocumentation","src":"4175:257:60","text":" @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n of an unsuccessful call."},"id":11265,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"4446:26:60","nodeType":"FunctionDefinition","parameters":{"id":11233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11228,"mutability":"mutable","name":"target","nameLocation":"4490:6:60","nodeType":"VariableDeclaration","scope":11265,"src":"4482:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11227,"name":"address","nodeType":"ElementaryTypeName","src":"4482:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11230,"mutability":"mutable","name":"success","nameLocation":"4511:7:60","nodeType":"VariableDeclaration","scope":11265,"src":"4506:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11229,"name":"bool","nodeType":"ElementaryTypeName","src":"4506:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11232,"mutability":"mutable","name":"returndata","nameLocation":"4541:10:60","nodeType":"VariableDeclaration","scope":11265,"src":"4528:23:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11231,"name":"bytes","nodeType":"ElementaryTypeName","src":"4528:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4472:85:60"},"returnParameters":{"id":11236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11235,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11265,"src":"4581:12:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11234,"name":"bytes","nodeType":"ElementaryTypeName","src":"4581:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4580:14:60"},"scope":11308,"src":"4437:582:60","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11286,"nodeType":"Block","src":"5323:122:60","statements":[{"condition":{"id":11276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5337:8:60","subExpression":{"id":11275,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11268,"src":"5338:7:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11284,"nodeType":"Block","src":"5397:42:60","statements":[{"expression":{"id":11282,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11270,"src":"5418:10:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":11274,"id":11283,"nodeType":"Return","src":"5411:17:60"}]},"id":11285,"nodeType":"IfStatement","src":"5333:106:60","trueBody":{"id":11281,"nodeType":"Block","src":"5347:44:60","statements":[{"expression":{"arguments":[{"id":11278,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11270,"src":"5369:10:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11277,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11307,"src":"5361:7:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":11279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5361:19:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11280,"nodeType":"ExpressionStatement","src":"5361:19:60"}]}}]},"documentation":{"id":11266,"nodeType":"StructuredDocumentation","src":"5025:191:60","text":" @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n revert reason or with a default {Errors.FailedCall} error."},"id":11287,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"5230:16:60","nodeType":"FunctionDefinition","parameters":{"id":11271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11268,"mutability":"mutable","name":"success","nameLocation":"5252:7:60","nodeType":"VariableDeclaration","scope":11287,"src":"5247:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11267,"name":"bool","nodeType":"ElementaryTypeName","src":"5247:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11270,"mutability":"mutable","name":"returndata","nameLocation":"5274:10:60","nodeType":"VariableDeclaration","scope":11287,"src":"5261:23:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11269,"name":"bytes","nodeType":"ElementaryTypeName","src":"5261:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5246:39:60"},"returnParameters":{"id":11274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11273,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11287,"src":"5309:12:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11272,"name":"bytes","nodeType":"ElementaryTypeName","src":"5309:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5308:14:60"},"scope":11308,"src":"5221:224:60","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11306,"nodeType":"Block","src":"5614:379:60","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11293,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11290,"src":"5690:10:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":11294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5701:6:60","memberName":"length","nodeType":"MemberAccess","src":"5690:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11295,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5710:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5690:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11304,"nodeType":"Block","src":"5936:51:60","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":11299,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12370,"src":"5957:6:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12370_$","typeString":"type(library Errors)"}},"id":11301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5964:10:60","memberName":"FailedCall","nodeType":"MemberAccess","referencedDeclaration":12361,"src":"5957:17:60","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":11302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5957:19:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11303,"nodeType":"RevertStatement","src":"5950:26:60"}]},"id":11305,"nodeType":"IfStatement","src":"5686:301:60","trueBody":{"id":11298,"nodeType":"Block","src":"5713:217:60","statements":[{"AST":{"nativeSrc":"5840:80:60","nodeType":"YulBlock","src":"5840:80:60","statements":[{"expression":{"arguments":[{"arguments":[{"name":"returndata","nativeSrc":"5869:10:60","nodeType":"YulIdentifier","src":"5869:10:60"},{"kind":"number","nativeSrc":"5881:4:60","nodeType":"YulLiteral","src":"5881:4:60","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5865:3:60","nodeType":"YulIdentifier","src":"5865:3:60"},"nativeSrc":"5865:21:60","nodeType":"YulFunctionCall","src":"5865:21:60"},{"arguments":[{"name":"returndata","nativeSrc":"5894:10:60","nodeType":"YulIdentifier","src":"5894:10:60"}],"functionName":{"name":"mload","nativeSrc":"5888:5:60","nodeType":"YulIdentifier","src":"5888:5:60"},"nativeSrc":"5888:17:60","nodeType":"YulFunctionCall","src":"5888:17:60"}],"functionName":{"name":"revert","nativeSrc":"5858:6:60","nodeType":"YulIdentifier","src":"5858:6:60"},"nativeSrc":"5858:48:60","nodeType":"YulFunctionCall","src":"5858:48:60"},"nativeSrc":"5858:48:60","nodeType":"YulExpressionStatement","src":"5858:48:60"}]},"evmVersion":"cancun","externalReferences":[{"declaration":11290,"isOffset":false,"isSlot":false,"src":"5869:10:60","valueSize":1},{"declaration":11290,"isOffset":false,"isSlot":false,"src":"5894:10:60","valueSize":1}],"flags":["memory-safe"],"id":11297,"nodeType":"InlineAssembly","src":"5815:105:60"}]}}]},"documentation":{"id":11288,"nodeType":"StructuredDocumentation","src":"5451:103:60","text":" @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}."},"id":11307,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"5568:7:60","nodeType":"FunctionDefinition","parameters":{"id":11291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11290,"mutability":"mutable","name":"returndata","nameLocation":"5589:10:60","nodeType":"VariableDeclaration","scope":11307,"src":"5576:23:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11289,"name":"bytes","nodeType":"ElementaryTypeName","src":"5576:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5575:25:60"},"returnParameters":{"id":11292,"nodeType":"ParameterList","parameters":[],"src":"5614:0:60"},"scope":11308,"src":"5559:434:60","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":11309,"src":"233:5762:60","usedErrors":[11058],"usedEvents":[]}],"src":"101:5895:60"},"id":60},"@openzeppelin/contracts/utils/Arrays.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Arrays.sol","exportedSymbols":{"Arrays":[12286],"Comparators":[12318],"Math":[14309],"SlotDerivation":[12552],"StorageSlot":[12676]},"id":12287,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":11310,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"183:24:61"},{"absolutePath":"@openzeppelin/contracts/utils/Comparators.sol","file":"./Comparators.sol","id":11312,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12287,"sourceUnit":12319,"src":"209:46:61","symbolAliases":[{"foreign":{"id":11311,"name":"Comparators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12318,"src":"217:11:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/SlotDerivation.sol","file":"./SlotDerivation.sol","id":11314,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12287,"sourceUnit":12553,"src":"256:52:61","symbolAliases":[{"foreign":{"id":11313,"name":"SlotDerivation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12552,"src":"264:14:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","file":"./StorageSlot.sol","id":11316,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12287,"sourceUnit":12677,"src":"309:46:61","symbolAliases":[{"foreign":{"id":11315,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12676,"src":"317:11:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","file":"./math/Math.sol","id":11318,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12287,"sourceUnit":14310,"src":"356:37:61","symbolAliases":[{"foreign":{"id":11317,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14309,"src":"364:4:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Arrays","contractDependencies":[],"contractKind":"library","documentation":{"id":11319,"nodeType":"StructuredDocumentation","src":"395:63:61","text":" @dev Collection of functions related to array types."},"fullyImplemented":true,"id":12286,"linearizedBaseContracts":[12286],"name":"Arrays","nameLocation":"467:6:61","nodeType":"ContractDefinition","nodes":[{"global":false,"id":11322,"libraryName":{"id":11320,"name":"SlotDerivation","nameLocations":["486:14:61"],"nodeType":"IdentifierPath","referencedDeclaration":12552,"src":"486:14:61"},"nodeType":"UsingForDirective","src":"480:33:61","typeName":{"id":11321,"name":"bytes32","nodeType":"ElementaryTypeName","src":"505:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":11325,"libraryName":{"id":11323,"name":"StorageSlot","nameLocations":["524:11:61"],"nodeType":"IdentifierPath","referencedDeclaration":12676,"src":"524:11:61"},"nodeType":"UsingForDirective","src":"518:30:61","typeName":{"id":11324,"name":"bytes32","nodeType":"ElementaryTypeName","src":"540:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":11357,"nodeType":"Block","src":"1628:83:61","statements":[{"expression":{"arguments":[{"arguments":[{"id":11347,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11329,"src":"1656:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":11346,"name":"_begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11582,"src":"1649:6:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory) pure returns (uint256)"}},"id":11348,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1649:13:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":11350,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11329,"src":"1669:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":11349,"name":"_end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11602,"src":"1664:4:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory) pure returns (uint256)"}},"id":11351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1664:11:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11352,"name":"comp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11339,"src":"1677:4:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11345,"name":"_quickSort","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11571,"src":"1638:10:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$__$","typeString":"function (uint256,uint256,function (uint256,uint256) pure returns (bool)) pure"}},"id":11353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1638:44:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11354,"nodeType":"ExpressionStatement","src":"1638:44:61"},{"expression":{"id":11355,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11329,"src":"1699:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":11344,"id":11356,"nodeType":"Return","src":"1692:12:61"}]},"documentation":{"id":11326,"nodeType":"StructuredDocumentation","src":"554:915:61","text":" @dev Sort an array of uint256 (in memory) following the provided comparator function.\n This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n consume more gas than is available in a block, leading to potential DoS.\n IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way."},"id":11358,"implemented":true,"kind":"function","modifiers":[],"name":"sort","nameLocation":"1483:4:61","nodeType":"FunctionDefinition","parameters":{"id":11340,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11329,"mutability":"mutable","name":"array","nameLocation":"1514:5:61","nodeType":"VariableDeclaration","scope":11358,"src":"1497:22:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11327,"name":"uint256","nodeType":"ElementaryTypeName","src":"1497:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11328,"nodeType":"ArrayTypeName","src":"1497:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11339,"mutability":"mutable","name":"comp","nameLocation":"1576:4:61","nodeType":"VariableDeclaration","scope":11358,"src":"1529:51:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"typeName":{"id":11338,"nodeType":"FunctionTypeName","parameterTypes":{"id":11334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11331,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11338,"src":"1538:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11330,"name":"uint256","nodeType":"ElementaryTypeName","src":"1538:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11333,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11338,"src":"1547:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11332,"name":"uint256","nodeType":"ElementaryTypeName","src":"1547:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1537:18:61"},"returnParameterTypes":{"id":11337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11336,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11338,"src":"1570:4:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11335,"name":"bool","nodeType":"ElementaryTypeName","src":"1570:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1569:6:61"},"src":"1529:51:61","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"1487:99:61"},"returnParameters":{"id":11344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11343,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11358,"src":"1610:16:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11341,"name":"uint256","nodeType":"ElementaryTypeName","src":"1610:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11342,"nodeType":"ArrayTypeName","src":"1610:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1609:18:61"},"scope":12286,"src":"1474:237:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11376,"nodeType":"Block","src":"1894:66:61","statements":[{"expression":{"arguments":[{"id":11369,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11362,"src":"1909:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":11370,"name":"Comparators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12318,"src":"1916:11:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Comparators_$12318_$","typeString":"type(library Comparators)"}},"id":11371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1928:2:61","memberName":"lt","nodeType":"MemberAccess","referencedDeclaration":12303,"src":"1916:14:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11368,"name":"sort","nodeType":"Identifier","overloadedDeclarations":[11358,11377,11409,11430,11462,11483],"referencedDeclaration":11358,"src":"1904:4:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"}},"id":11372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1904:27:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11373,"nodeType":"ExpressionStatement","src":"1904:27:61"},{"expression":{"id":11374,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11362,"src":"1948:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":11367,"id":11375,"nodeType":"Return","src":"1941:12:61"}]},"documentation":{"id":11359,"nodeType":"StructuredDocumentation","src":"1717:93:61","text":" @dev Variant of {sort} that sorts an array of uint256 in increasing order."},"id":11377,"implemented":true,"kind":"function","modifiers":[],"name":"sort","nameLocation":"1824:4:61","nodeType":"FunctionDefinition","parameters":{"id":11363,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11362,"mutability":"mutable","name":"array","nameLocation":"1846:5:61","nodeType":"VariableDeclaration","scope":11377,"src":"1829:22:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11360,"name":"uint256","nodeType":"ElementaryTypeName","src":"1829:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11361,"nodeType":"ArrayTypeName","src":"1829:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1828:24:61"},"returnParameters":{"id":11367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11366,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11377,"src":"1876:16:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11364,"name":"uint256","nodeType":"ElementaryTypeName","src":"1876:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11365,"nodeType":"ArrayTypeName","src":"1876:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1875:18:61"},"scope":12286,"src":"1815:145:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11408,"nodeType":"Block","src":"3040:97:61","statements":[{"expression":{"arguments":[{"arguments":[{"id":11399,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11381,"src":"3075:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":11398,"name":"_castToUint256Array","nodeType":"Identifier","overloadedDeclarations":[11634,11646],"referencedDeclaration":11634,"src":"3055:19:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address[] memory) pure returns (uint256[] memory)"}},"id":11400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3055:26:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"arguments":[{"id":11402,"name":"comp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11391,"src":"3102:4:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) pure returns (bool)"}],"id":11401,"name":"_castToUint256Comp","nodeType":"Identifier","overloadedDeclarations":[11672,11698],"referencedDeclaration":11672,"src":"3083:18:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$_$returns$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$","typeString":"function (function (address,address) pure returns (bool)) pure returns (function (uint256,uint256) pure returns (bool))"}},"id":11403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3083:24:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11397,"name":"sort","nodeType":"Identifier","overloadedDeclarations":[11358,11377,11409,11430,11462,11483],"referencedDeclaration":11358,"src":"3050:4:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"}},"id":11404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3050:58:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11405,"nodeType":"ExpressionStatement","src":"3050:58:61"},{"expression":{"id":11406,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11381,"src":"3125:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":11396,"id":11407,"nodeType":"Return","src":"3118:12:61"}]},"documentation":{"id":11378,"nodeType":"StructuredDocumentation","src":"1966:915:61","text":" @dev Sort an array of address (in memory) following the provided comparator function.\n This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n consume more gas than is available in a block, leading to potential DoS.\n IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way."},"id":11409,"implemented":true,"kind":"function","modifiers":[],"name":"sort","nameLocation":"2895:4:61","nodeType":"FunctionDefinition","parameters":{"id":11392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11381,"mutability":"mutable","name":"array","nameLocation":"2926:5:61","nodeType":"VariableDeclaration","scope":11409,"src":"2909:22:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":11379,"name":"address","nodeType":"ElementaryTypeName","src":"2909:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11380,"nodeType":"ArrayTypeName","src":"2909:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":11391,"mutability":"mutable","name":"comp","nameLocation":"2988:4:61","nodeType":"VariableDeclaration","scope":11409,"src":"2941:51:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) pure returns (bool)"},"typeName":{"id":11390,"nodeType":"FunctionTypeName","parameterTypes":{"id":11386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11383,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11390,"src":"2950:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11382,"name":"address","nodeType":"ElementaryTypeName","src":"2950:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11385,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11390,"src":"2959:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11384,"name":"address","nodeType":"ElementaryTypeName","src":"2959:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2949:18:61"},"returnParameterTypes":{"id":11389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11388,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11390,"src":"2982:4:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11387,"name":"bool","nodeType":"ElementaryTypeName","src":"2982:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2981:6:61"},"src":"2941:51:61","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"2899:99:61"},"returnParameters":{"id":11396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11395,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11409,"src":"3022:16:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":11393,"name":"address","nodeType":"ElementaryTypeName","src":"3022:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11394,"nodeType":"ArrayTypeName","src":"3022:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3021:18:61"},"scope":12286,"src":"2886:251:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11429,"nodeType":"Block","src":"3320:87:61","statements":[{"expression":{"arguments":[{"arguments":[{"id":11421,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11413,"src":"3355:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":11420,"name":"_castToUint256Array","nodeType":"Identifier","overloadedDeclarations":[11634,11646],"referencedDeclaration":11634,"src":"3335:19:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address[] memory) pure returns (uint256[] memory)"}},"id":11422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3335:26:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":11423,"name":"Comparators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12318,"src":"3363:11:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Comparators_$12318_$","typeString":"type(library Comparators)"}},"id":11424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3375:2:61","memberName":"lt","nodeType":"MemberAccess","referencedDeclaration":12303,"src":"3363:14:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11419,"name":"sort","nodeType":"Identifier","overloadedDeclarations":[11358,11377,11409,11430,11462,11483],"referencedDeclaration":11358,"src":"3330:4:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"}},"id":11425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3330:48:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11426,"nodeType":"ExpressionStatement","src":"3330:48:61"},{"expression":{"id":11427,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11413,"src":"3395:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":11418,"id":11428,"nodeType":"Return","src":"3388:12:61"}]},"documentation":{"id":11410,"nodeType":"StructuredDocumentation","src":"3143:93:61","text":" @dev Variant of {sort} that sorts an array of address in increasing order."},"id":11430,"implemented":true,"kind":"function","modifiers":[],"name":"sort","nameLocation":"3250:4:61","nodeType":"FunctionDefinition","parameters":{"id":11414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11413,"mutability":"mutable","name":"array","nameLocation":"3272:5:61","nodeType":"VariableDeclaration","scope":11430,"src":"3255:22:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":11411,"name":"address","nodeType":"ElementaryTypeName","src":"3255:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11412,"nodeType":"ArrayTypeName","src":"3255:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3254:24:61"},"returnParameters":{"id":11418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11417,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11430,"src":"3302:16:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":11415,"name":"address","nodeType":"ElementaryTypeName","src":"3302:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11416,"nodeType":"ArrayTypeName","src":"3302:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3301:18:61"},"scope":12286,"src":"3241:166:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11461,"nodeType":"Block","src":"4487:97:61","statements":[{"expression":{"arguments":[{"arguments":[{"id":11452,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11434,"src":"4522:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}],"id":11451,"name":"_castToUint256Array","nodeType":"Identifier","overloadedDeclarations":[11634,11646],"referencedDeclaration":11646,"src":"4502:19:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (bytes32[] memory) pure returns (uint256[] memory)"}},"id":11453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4502:26:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"arguments":[{"id":11455,"name":"comp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11444,"src":"4549:4:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32,bytes32) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32,bytes32) pure returns (bool)"}],"id":11454,"name":"_castToUint256Comp","nodeType":"Identifier","overloadedDeclarations":[11672,11698],"referencedDeclaration":11698,"src":"4530:18:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$_$returns$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$","typeString":"function (function (bytes32,bytes32) pure returns (bool)) pure returns (function (uint256,uint256) pure returns (bool))"}},"id":11456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4530:24:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11450,"name":"sort","nodeType":"Identifier","overloadedDeclarations":[11358,11377,11409,11430,11462,11483],"referencedDeclaration":11358,"src":"4497:4:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"}},"id":11457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4497:58:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11458,"nodeType":"ExpressionStatement","src":"4497:58:61"},{"expression":{"id":11459,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11434,"src":"4572:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":11449,"id":11460,"nodeType":"Return","src":"4565:12:61"}]},"documentation":{"id":11431,"nodeType":"StructuredDocumentation","src":"3413:915:61","text":" @dev Sort an array of bytes32 (in memory) following the provided comparator function.\n This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n consume more gas than is available in a block, leading to potential DoS.\n IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way."},"id":11462,"implemented":true,"kind":"function","modifiers":[],"name":"sort","nameLocation":"4342:4:61","nodeType":"FunctionDefinition","parameters":{"id":11445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11434,"mutability":"mutable","name":"array","nameLocation":"4373:5:61","nodeType":"VariableDeclaration","scope":11462,"src":"4356:22:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":11432,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4356:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":11433,"nodeType":"ArrayTypeName","src":"4356:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":11444,"mutability":"mutable","name":"comp","nameLocation":"4435:4:61","nodeType":"VariableDeclaration","scope":11462,"src":"4388:51:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32,bytes32) pure returns (bool)"},"typeName":{"id":11443,"nodeType":"FunctionTypeName","parameterTypes":{"id":11439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11436,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11443,"src":"4397:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11435,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4397:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":11438,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11443,"src":"4406:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11437,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4406:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4396:18:61"},"returnParameterTypes":{"id":11442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11441,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11443,"src":"4429:4:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11440,"name":"bool","nodeType":"ElementaryTypeName","src":"4429:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4428:6:61"},"src":"4388:51:61","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32,bytes32) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"4346:99:61"},"returnParameters":{"id":11449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11448,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11462,"src":"4469:16:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":11446,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4469:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":11447,"nodeType":"ArrayTypeName","src":"4469:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"4468:18:61"},"scope":12286,"src":"4333:251:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11482,"nodeType":"Block","src":"4767:87:61","statements":[{"expression":{"arguments":[{"arguments":[{"id":11474,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11466,"src":"4802:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}],"id":11473,"name":"_castToUint256Array","nodeType":"Identifier","overloadedDeclarations":[11634,11646],"referencedDeclaration":11646,"src":"4782:19:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (bytes32[] memory) pure returns (uint256[] memory)"}},"id":11475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4782:26:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":11476,"name":"Comparators","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12318,"src":"4810:11:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Comparators_$12318_$","typeString":"type(library Comparators)"}},"id":11477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4822:2:61","memberName":"lt","nodeType":"MemberAccess","referencedDeclaration":12303,"src":"4810:14:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11472,"name":"sort","nodeType":"Identifier","overloadedDeclarations":[11358,11377,11409,11430,11462,11483],"referencedDeclaration":11358,"src":"4777:4:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"}},"id":11478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4777:48:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11479,"nodeType":"ExpressionStatement","src":"4777:48:61"},{"expression":{"id":11480,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11466,"src":"4842:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":11471,"id":11481,"nodeType":"Return","src":"4835:12:61"}]},"documentation":{"id":11463,"nodeType":"StructuredDocumentation","src":"4590:93:61","text":" @dev Variant of {sort} that sorts an array of bytes32 in increasing order."},"id":11483,"implemented":true,"kind":"function","modifiers":[],"name":"sort","nameLocation":"4697:4:61","nodeType":"FunctionDefinition","parameters":{"id":11467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11466,"mutability":"mutable","name":"array","nameLocation":"4719:5:61","nodeType":"VariableDeclaration","scope":11483,"src":"4702:22:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":11464,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4702:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":11465,"nodeType":"ArrayTypeName","src":"4702:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"4701:24:61"},"returnParameters":{"id":11471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11470,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11483,"src":"4749:16:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":11468,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4749:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":11469,"nodeType":"ArrayTypeName","src":"4749:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"4748:18:61"},"scope":12286,"src":"4688:166:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11570,"nodeType":"Block","src":"5470:889:61","statements":[{"id":11569,"nodeType":"UncheckedBlock","src":"5480:873:61","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11501,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11488,"src":"5508:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":11502,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11486,"src":"5514:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5508:11:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30783430","id":11504,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5522:4:61","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"0x40"},"src":"5508:18:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11507,"nodeType":"IfStatement","src":"5504:31:61","trueBody":{"functionReturnParameters":11500,"id":11506,"nodeType":"Return","src":"5528:7:61"}},{"assignments":[11509],"declarations":[{"constant":false,"id":11509,"mutability":"mutable","name":"pivot","nameLocation":"5599:5:61","nodeType":"VariableDeclaration","scope":11569,"src":"5591:13:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11508,"name":"uint256","nodeType":"ElementaryTypeName","src":"5591:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11513,"initialValue":{"arguments":[{"id":11511,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11486,"src":"5614:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11510,"name":"_mload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11612,"src":"5607:6:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":11512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5607:13:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5591:29:61"},{"assignments":[11515],"declarations":[{"constant":false,"id":11515,"mutability":"mutable","name":"pos","nameLocation":"5715:3:61","nodeType":"VariableDeclaration","scope":11569,"src":"5707:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11514,"name":"uint256","nodeType":"ElementaryTypeName","src":"5707:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11517,"initialValue":{"id":11516,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11486,"src":"5721:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5707:19:61"},{"body":{"id":11548,"nodeType":"Block","src":"5795:331:61","statements":[{"condition":{"arguments":[{"arguments":[{"id":11533,"name":"it","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11519,"src":"5829:2:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11532,"name":"_mload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11612,"src":"5822:6:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":11534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5822:10:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11535,"name":"pivot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11509,"src":"5834:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11531,"name":"comp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11498,"src":"5817:4:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":11536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5817:23:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11547,"nodeType":"IfStatement","src":"5813:299:61","trueBody":{"id":11546,"nodeType":"Block","src":"5842:270:61","statements":[{"expression":{"id":11539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11537,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11515,"src":"6046:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"30783230","id":11538,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6053:4:61","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"6046:11:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11540,"nodeType":"ExpressionStatement","src":"6046:11:61"},{"expression":{"arguments":[{"id":11542,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11515,"src":"6085:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11543,"name":"it","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11519,"src":"6090:2:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11541,"name":"_swap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11622,"src":"6079:5:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":11544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6079:14:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11545,"nodeType":"ExpressionStatement","src":"6079:14:61"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11524,"name":"it","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11519,"src":"5773:2:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11525,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11488,"src":"5778:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5773:8:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11549,"initializationExpression":{"assignments":[11519],"declarations":[{"constant":false,"id":11519,"mutability":"mutable","name":"it","nameLocation":"5754:2:61","nodeType":"VariableDeclaration","scope":11549,"src":"5746:10:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11518,"name":"uint256","nodeType":"ElementaryTypeName","src":"5746:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11523,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11520,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11486,"src":"5759:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783230","id":11521,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5767:4:61","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"5759:12:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5746:25:61"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":11529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11527,"name":"it","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11519,"src":"5783:2:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"30783230","id":11528,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5789:4:61","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"5783:10:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11530,"nodeType":"ExpressionStatement","src":"5783:10:61"},"nodeType":"ForStatement","src":"5741:385:61"},{"expression":{"arguments":[{"id":11551,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11486,"src":"6146:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11552,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11515,"src":"6153:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11550,"name":"_swap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11622,"src":"6140:5:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":11553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6140:17:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11554,"nodeType":"ExpressionStatement","src":"6140:17:61"},{"expression":{"arguments":[{"id":11556,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11486,"src":"6207:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11557,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11515,"src":"6214:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11558,"name":"comp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11498,"src":"6219:4:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11555,"name":"_quickSort","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11571,"src":"6196:10:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$__$","typeString":"function (uint256,uint256,function (uint256,uint256) pure returns (bool)) pure"}},"id":11559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6196:28:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11560,"nodeType":"ExpressionStatement","src":"6196:28:61"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11562,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11515,"src":"6284:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"30783230","id":11563,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6290:4:61","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"6284:10:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11565,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11488,"src":"6296:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11566,"name":"comp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11498,"src":"6301:4:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}],"id":11561,"name":"_quickSort","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11571,"src":"6273:10:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$__$","typeString":"function (uint256,uint256,function (uint256,uint256) pure returns (bool)) pure"}},"id":11567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6273:33:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11568,"nodeType":"ExpressionStatement","src":"6273:33:61"}]}]},"documentation":{"id":11484,"nodeType":"StructuredDocumentation","src":"4860:491:61","text":" @dev Performs a quick sort of a segment of memory. The segment sorted starts at `begin` (inclusive), and stops\n at end (exclusive). Sorting follows the `comp` comparator.\n Invariant: `begin <= end`. This is the case when initially called by {sort} and is preserved in subcalls.\n IMPORTANT: Memory locations between `begin` and `end` are not validated/zeroed. This function should\n be used only if the limits are within a memory array."},"id":11571,"implemented":true,"kind":"function","modifiers":[],"name":"_quickSort","nameLocation":"5365:10:61","nodeType":"FunctionDefinition","parameters":{"id":11499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11486,"mutability":"mutable","name":"begin","nameLocation":"5384:5:61","nodeType":"VariableDeclaration","scope":11571,"src":"5376:13:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11485,"name":"uint256","nodeType":"ElementaryTypeName","src":"5376:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11488,"mutability":"mutable","name":"end","nameLocation":"5399:3:61","nodeType":"VariableDeclaration","scope":11571,"src":"5391:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11487,"name":"uint256","nodeType":"ElementaryTypeName","src":"5391:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11498,"mutability":"mutable","name":"comp","nameLocation":"5451:4:61","nodeType":"VariableDeclaration","scope":11571,"src":"5404:51:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"typeName":{"id":11497,"nodeType":"FunctionTypeName","parameterTypes":{"id":11493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11490,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11497,"src":"5413:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11489,"name":"uint256","nodeType":"ElementaryTypeName","src":"5413:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11492,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11497,"src":"5422:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11491,"name":"uint256","nodeType":"ElementaryTypeName","src":"5422:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5412:18:61"},"returnParameterTypes":{"id":11496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11495,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11497,"src":"5445:4:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11494,"name":"bool","nodeType":"ElementaryTypeName","src":"5445:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5444:6:61"},"src":"5404:51:61","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"5375:81:61"},"returnParameters":{"id":11500,"nodeType":"ParameterList","parameters":[],"src":"5470:0:61"},"scope":12286,"src":"5356:1003:61","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11581,"nodeType":"Block","src":"6532:88:61","statements":[{"AST":{"nativeSrc":"6567:47:61","nodeType":"YulBlock","src":"6567:47:61","statements":[{"nativeSrc":"6581:23:61","nodeType":"YulAssignment","src":"6581:23:61","value":{"arguments":[{"name":"array","nativeSrc":"6592:5:61","nodeType":"YulIdentifier","src":"6592:5:61"},{"kind":"number","nativeSrc":"6599:4:61","nodeType":"YulLiteral","src":"6599:4:61","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"6588:3:61","nodeType":"YulIdentifier","src":"6588:3:61"},"nativeSrc":"6588:16:61","nodeType":"YulFunctionCall","src":"6588:16:61"},"variableNames":[{"name":"ptr","nativeSrc":"6581:3:61","nodeType":"YulIdentifier","src":"6581:3:61"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11575,"isOffset":false,"isSlot":false,"src":"6592:5:61","valueSize":1},{"declaration":11578,"isOffset":false,"isSlot":false,"src":"6581:3:61","valueSize":1}],"flags":["memory-safe"],"id":11580,"nodeType":"InlineAssembly","src":"6542:72:61"}]},"documentation":{"id":11572,"nodeType":"StructuredDocumentation","src":"6365:87:61","text":" @dev Pointer to the memory location of the first element of `array`."},"id":11582,"implemented":true,"kind":"function","modifiers":[],"name":"_begin","nameLocation":"6466:6:61","nodeType":"FunctionDefinition","parameters":{"id":11576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11575,"mutability":"mutable","name":"array","nameLocation":"6490:5:61","nodeType":"VariableDeclaration","scope":11582,"src":"6473:22:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11573,"name":"uint256","nodeType":"ElementaryTypeName","src":"6473:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11574,"nodeType":"ArrayTypeName","src":"6473:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"6472:24:61"},"returnParameters":{"id":11579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11578,"mutability":"mutable","name":"ptr","nameLocation":"6527:3:61","nodeType":"VariableDeclaration","scope":11582,"src":"6519:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11577,"name":"uint256","nodeType":"ElementaryTypeName","src":"6519:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6518:13:61"},"scope":12286,"src":"6457:163:61","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11601,"nodeType":"Block","src":"6892:93:61","statements":[{"id":11600,"nodeType":"UncheckedBlock","src":"6902:77:61","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":11592,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11586,"src":"6940:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":11591,"name":"_begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11582,"src":"6933:6:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory) pure returns (uint256)"}},"id":11593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6933:13:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11594,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11586,"src":"6949:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6955:6:61","memberName":"length","nodeType":"MemberAccess","src":"6949:12:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"30783230","id":11596,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6964:4:61","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"6949:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6933:35:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11590,"id":11599,"nodeType":"Return","src":"6926:42:61"}]}]},"documentation":{"id":11583,"nodeType":"StructuredDocumentation","src":"6626:188:61","text":" @dev Pointer to the memory location of the first memory word (32bytes) after `array`. This is the memory word\n that comes just after the last element of the array."},"id":11602,"implemented":true,"kind":"function","modifiers":[],"name":"_end","nameLocation":"6828:4:61","nodeType":"FunctionDefinition","parameters":{"id":11587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11586,"mutability":"mutable","name":"array","nameLocation":"6850:5:61","nodeType":"VariableDeclaration","scope":11602,"src":"6833:22:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11584,"name":"uint256","nodeType":"ElementaryTypeName","src":"6833:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11585,"nodeType":"ArrayTypeName","src":"6833:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"6832:24:61"},"returnParameters":{"id":11590,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11589,"mutability":"mutable","name":"ptr","nameLocation":"6887:3:61","nodeType":"VariableDeclaration","scope":11602,"src":"6879:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11588,"name":"uint256","nodeType":"ElementaryTypeName","src":"6879:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6878:13:61"},"scope":12286,"src":"6819:166:61","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11611,"nodeType":"Block","src":"7136:68:61","statements":[{"AST":{"nativeSrc":"7155:43:61","nodeType":"YulBlock","src":"7155:43:61","statements":[{"nativeSrc":"7169:19:61","nodeType":"YulAssignment","src":"7169:19:61","value":{"arguments":[{"name":"ptr","nativeSrc":"7184:3:61","nodeType":"YulIdentifier","src":"7184:3:61"}],"functionName":{"name":"mload","nativeSrc":"7178:5:61","nodeType":"YulIdentifier","src":"7178:5:61"},"nativeSrc":"7178:10:61","nodeType":"YulFunctionCall","src":"7178:10:61"},"variableNames":[{"name":"value","nativeSrc":"7169:5:61","nodeType":"YulIdentifier","src":"7169:5:61"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11605,"isOffset":false,"isSlot":false,"src":"7184:3:61","valueSize":1},{"declaration":11608,"isOffset":false,"isSlot":false,"src":"7169:5:61","valueSize":1}],"id":11610,"nodeType":"InlineAssembly","src":"7146:52:61"}]},"documentation":{"id":11603,"nodeType":"StructuredDocumentation","src":"6991:74:61","text":" @dev Load memory word (as a uint256) at location `ptr`."},"id":11612,"implemented":true,"kind":"function","modifiers":[],"name":"_mload","nameLocation":"7079:6:61","nodeType":"FunctionDefinition","parameters":{"id":11606,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11605,"mutability":"mutable","name":"ptr","nameLocation":"7094:3:61","nodeType":"VariableDeclaration","scope":11612,"src":"7086:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11604,"name":"uint256","nodeType":"ElementaryTypeName","src":"7086:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7085:13:61"},"returnParameters":{"id":11609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11608,"mutability":"mutable","name":"value","nameLocation":"7129:5:61","nodeType":"VariableDeclaration","scope":11612,"src":"7121:13:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11607,"name":"uint256","nodeType":"ElementaryTypeName","src":"7121:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7120:15:61"},"scope":12286,"src":"7070:134:61","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11621,"nodeType":"Block","src":"7348:178:61","statements":[{"AST":{"nativeSrc":"7367:153:61","nodeType":"YulBlock","src":"7367:153:61","statements":[{"nativeSrc":"7381:25:61","nodeType":"YulVariableDeclaration","src":"7381:25:61","value":{"arguments":[{"name":"ptr1","nativeSrc":"7401:4:61","nodeType":"YulIdentifier","src":"7401:4:61"}],"functionName":{"name":"mload","nativeSrc":"7395:5:61","nodeType":"YulIdentifier","src":"7395:5:61"},"nativeSrc":"7395:11:61","nodeType":"YulFunctionCall","src":"7395:11:61"},"variables":[{"name":"value1","nativeSrc":"7385:6:61","nodeType":"YulTypedName","src":"7385:6:61","type":""}]},{"nativeSrc":"7419:25:61","nodeType":"YulVariableDeclaration","src":"7419:25:61","value":{"arguments":[{"name":"ptr2","nativeSrc":"7439:4:61","nodeType":"YulIdentifier","src":"7439:4:61"}],"functionName":{"name":"mload","nativeSrc":"7433:5:61","nodeType":"YulIdentifier","src":"7433:5:61"},"nativeSrc":"7433:11:61","nodeType":"YulFunctionCall","src":"7433:11:61"},"variables":[{"name":"value2","nativeSrc":"7423:6:61","nodeType":"YulTypedName","src":"7423:6:61","type":""}]},{"expression":{"arguments":[{"name":"ptr1","nativeSrc":"7464:4:61","nodeType":"YulIdentifier","src":"7464:4:61"},{"name":"value2","nativeSrc":"7470:6:61","nodeType":"YulIdentifier","src":"7470:6:61"}],"functionName":{"name":"mstore","nativeSrc":"7457:6:61","nodeType":"YulIdentifier","src":"7457:6:61"},"nativeSrc":"7457:20:61","nodeType":"YulFunctionCall","src":"7457:20:61"},"nativeSrc":"7457:20:61","nodeType":"YulExpressionStatement","src":"7457:20:61"},{"expression":{"arguments":[{"name":"ptr2","nativeSrc":"7497:4:61","nodeType":"YulIdentifier","src":"7497:4:61"},{"name":"value1","nativeSrc":"7503:6:61","nodeType":"YulIdentifier","src":"7503:6:61"}],"functionName":{"name":"mstore","nativeSrc":"7490:6:61","nodeType":"YulIdentifier","src":"7490:6:61"},"nativeSrc":"7490:20:61","nodeType":"YulFunctionCall","src":"7490:20:61"},"nativeSrc":"7490:20:61","nodeType":"YulExpressionStatement","src":"7490:20:61"}]},"evmVersion":"cancun","externalReferences":[{"declaration":11615,"isOffset":false,"isSlot":false,"src":"7401:4:61","valueSize":1},{"declaration":11615,"isOffset":false,"isSlot":false,"src":"7464:4:61","valueSize":1},{"declaration":11617,"isOffset":false,"isSlot":false,"src":"7439:4:61","valueSize":1},{"declaration":11617,"isOffset":false,"isSlot":false,"src":"7497:4:61","valueSize":1}],"id":11620,"nodeType":"InlineAssembly","src":"7358:162:61"}]},"documentation":{"id":11613,"nodeType":"StructuredDocumentation","src":"7210:77:61","text":" @dev Swaps the elements memory location `ptr1` and `ptr2`."},"id":11622,"implemented":true,"kind":"function","modifiers":[],"name":"_swap","nameLocation":"7301:5:61","nodeType":"FunctionDefinition","parameters":{"id":11618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11615,"mutability":"mutable","name":"ptr1","nameLocation":"7315:4:61","nodeType":"VariableDeclaration","scope":11622,"src":"7307:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11614,"name":"uint256","nodeType":"ElementaryTypeName","src":"7307:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11617,"mutability":"mutable","name":"ptr2","nameLocation":"7329:4:61","nodeType":"VariableDeclaration","scope":11622,"src":"7321:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11616,"name":"uint256","nodeType":"ElementaryTypeName","src":"7321:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7306:28:61"},"returnParameters":{"id":11619,"nodeType":"ParameterList","parameters":[],"src":"7348:0:61"},"scope":12286,"src":"7292:234:61","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11633,"nodeType":"Block","src":"7713:64:61","statements":[{"AST":{"nativeSrc":"7732:39:61","nodeType":"YulBlock","src":"7732:39:61","statements":[{"nativeSrc":"7746:15:61","nodeType":"YulAssignment","src":"7746:15:61","value":{"name":"input","nativeSrc":"7756:5:61","nodeType":"YulIdentifier","src":"7756:5:61"},"variableNames":[{"name":"output","nativeSrc":"7746:6:61","nodeType":"YulIdentifier","src":"7746:6:61"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11626,"isOffset":false,"isSlot":false,"src":"7756:5:61","valueSize":1},{"declaration":11630,"isOffset":false,"isSlot":false,"src":"7746:6:61","valueSize":1}],"id":11632,"nodeType":"InlineAssembly","src":"7723:48:61"}]},"documentation":{"id":11623,"nodeType":"StructuredDocumentation","src":"7532:76:61","text":"@dev Helper: low level cast address memory array to uint256 memory array"},"id":11634,"implemented":true,"kind":"function","modifiers":[],"name":"_castToUint256Array","nameLocation":"7622:19:61","nodeType":"FunctionDefinition","parameters":{"id":11627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11626,"mutability":"mutable","name":"input","nameLocation":"7659:5:61","nodeType":"VariableDeclaration","scope":11634,"src":"7642:22:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":11624,"name":"address","nodeType":"ElementaryTypeName","src":"7642:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":11625,"nodeType":"ArrayTypeName","src":"7642:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"7641:24:61"},"returnParameters":{"id":11631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11630,"mutability":"mutable","name":"output","nameLocation":"7705:6:61","nodeType":"VariableDeclaration","scope":11634,"src":"7688:23:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11628,"name":"uint256","nodeType":"ElementaryTypeName","src":"7688:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11629,"nodeType":"ArrayTypeName","src":"7688:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7687:25:61"},"scope":12286,"src":"7613:164:61","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11645,"nodeType":"Block","src":"7964:64:61","statements":[{"AST":{"nativeSrc":"7983:39:61","nodeType":"YulBlock","src":"7983:39:61","statements":[{"nativeSrc":"7997:15:61","nodeType":"YulAssignment","src":"7997:15:61","value":{"name":"input","nativeSrc":"8007:5:61","nodeType":"YulIdentifier","src":"8007:5:61"},"variableNames":[{"name":"output","nativeSrc":"7997:6:61","nodeType":"YulIdentifier","src":"7997:6:61"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11638,"isOffset":false,"isSlot":false,"src":"8007:5:61","valueSize":1},{"declaration":11642,"isOffset":false,"isSlot":false,"src":"7997:6:61","valueSize":1}],"id":11644,"nodeType":"InlineAssembly","src":"7974:48:61"}]},"documentation":{"id":11635,"nodeType":"StructuredDocumentation","src":"7783:76:61","text":"@dev Helper: low level cast bytes32 memory array to uint256 memory array"},"id":11646,"implemented":true,"kind":"function","modifiers":[],"name":"_castToUint256Array","nameLocation":"7873:19:61","nodeType":"FunctionDefinition","parameters":{"id":11639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11638,"mutability":"mutable","name":"input","nameLocation":"7910:5:61","nodeType":"VariableDeclaration","scope":11646,"src":"7893:22:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":11636,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7893:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":11637,"nodeType":"ArrayTypeName","src":"7893:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"7892:24:61"},"returnParameters":{"id":11643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11642,"mutability":"mutable","name":"output","nameLocation":"7956:6:61","nodeType":"VariableDeclaration","scope":11646,"src":"7939:23:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11640,"name":"uint256","nodeType":"ElementaryTypeName","src":"7939:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11641,"nodeType":"ArrayTypeName","src":"7939:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7938:25:61"},"scope":12286,"src":"7864:164:61","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11671,"nodeType":"Block","src":"8290:64:61","statements":[{"AST":{"nativeSrc":"8309:39:61","nodeType":"YulBlock","src":"8309:39:61","statements":[{"nativeSrc":"8323:15:61","nodeType":"YulAssignment","src":"8323:15:61","value":{"name":"input","nativeSrc":"8333:5:61","nodeType":"YulIdentifier","src":"8333:5:61"},"variableNames":[{"name":"output","nativeSrc":"8323:6:61","nodeType":"YulIdentifier","src":"8323:6:61"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11657,"isOffset":false,"isSlot":false,"src":"8333:5:61","valueSize":1},{"declaration":11668,"isOffset":false,"isSlot":false,"src":"8323:6:61","valueSize":1}],"id":11670,"nodeType":"InlineAssembly","src":"8300:48:61"}]},"documentation":{"id":11647,"nodeType":"StructuredDocumentation","src":"8034:78:61","text":"@dev Helper: low level cast address comp function to uint256 comp function"},"id":11672,"implemented":true,"kind":"function","modifiers":[],"name":"_castToUint256Comp","nameLocation":"8126:18:61","nodeType":"FunctionDefinition","parameters":{"id":11658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11657,"mutability":"mutable","name":"input","nameLocation":"8201:5:61","nodeType":"VariableDeclaration","scope":11672,"src":"8154:52:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) pure returns (bool)"},"typeName":{"id":11656,"nodeType":"FunctionTypeName","parameterTypes":{"id":11652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11649,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11656,"src":"8163:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11648,"name":"address","nodeType":"ElementaryTypeName","src":"8163:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11651,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11656,"src":"8172:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11650,"name":"address","nodeType":"ElementaryTypeName","src":"8172:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8162:18:61"},"returnParameterTypes":{"id":11655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11654,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11656,"src":"8195:4:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11653,"name":"bool","nodeType":"ElementaryTypeName","src":"8195:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8194:6:61"},"src":"8154:52:61","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"8144:68:61"},"returnParameters":{"id":11669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11668,"mutability":"mutable","name":"output","nameLocation":"8282:6:61","nodeType":"VariableDeclaration","scope":11672,"src":"8235:53:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"typeName":{"id":11667,"nodeType":"FunctionTypeName","parameterTypes":{"id":11663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11660,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11667,"src":"8244:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11659,"name":"uint256","nodeType":"ElementaryTypeName","src":"8244:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11662,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11667,"src":"8253:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11661,"name":"uint256","nodeType":"ElementaryTypeName","src":"8253:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8243:18:61"},"returnParameterTypes":{"id":11666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11665,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11667,"src":"8276:4:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11664,"name":"bool","nodeType":"ElementaryTypeName","src":"8276:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8275:6:61"},"src":"8235:53:61","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"8234:55:61"},"scope":12286,"src":"8117:237:61","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11697,"nodeType":"Block","src":"8616:64:61","statements":[{"AST":{"nativeSrc":"8635:39:61","nodeType":"YulBlock","src":"8635:39:61","statements":[{"nativeSrc":"8649:15:61","nodeType":"YulAssignment","src":"8649:15:61","value":{"name":"input","nativeSrc":"8659:5:61","nodeType":"YulIdentifier","src":"8659:5:61"},"variableNames":[{"name":"output","nativeSrc":"8649:6:61","nodeType":"YulIdentifier","src":"8649:6:61"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":11683,"isOffset":false,"isSlot":false,"src":"8659:5:61","valueSize":1},{"declaration":11694,"isOffset":false,"isSlot":false,"src":"8649:6:61","valueSize":1}],"id":11696,"nodeType":"InlineAssembly","src":"8626:48:61"}]},"documentation":{"id":11673,"nodeType":"StructuredDocumentation","src":"8360:78:61","text":"@dev Helper: low level cast bytes32 comp function to uint256 comp function"},"id":11698,"implemented":true,"kind":"function","modifiers":[],"name":"_castToUint256Comp","nameLocation":"8452:18:61","nodeType":"FunctionDefinition","parameters":{"id":11684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11683,"mutability":"mutable","name":"input","nameLocation":"8527:5:61","nodeType":"VariableDeclaration","scope":11698,"src":"8480:52:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32,bytes32) pure returns (bool)"},"typeName":{"id":11682,"nodeType":"FunctionTypeName","parameterTypes":{"id":11678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11675,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11682,"src":"8489:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11674,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8489:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":11677,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11682,"src":"8498:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11676,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8498:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8488:18:61"},"returnParameterTypes":{"id":11681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11680,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11682,"src":"8521:4:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11679,"name":"bool","nodeType":"ElementaryTypeName","src":"8521:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8520:6:61"},"src":"8480:52:61","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32,bytes32) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"8470:68:61"},"returnParameters":{"id":11695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11694,"mutability":"mutable","name":"output","nameLocation":"8608:6:61","nodeType":"VariableDeclaration","scope":11698,"src":"8561:53:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"typeName":{"id":11693,"nodeType":"FunctionTypeName","parameterTypes":{"id":11689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11686,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11693,"src":"8570:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11685,"name":"uint256","nodeType":"ElementaryTypeName","src":"8570:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11688,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11693,"src":"8579:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11687,"name":"uint256","nodeType":"ElementaryTypeName","src":"8579:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8569:18:61"},"returnParameterTypes":{"id":11692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11691,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11693,"src":"8602:4:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11690,"name":"bool","nodeType":"ElementaryTypeName","src":"8602:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8601:6:61"},"src":"8561:53:61","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"},"visibility":"internal"},"visibility":"internal"}],"src":"8560:55:61"},"scope":12286,"src":"8443:237:61","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":11780,"nodeType":"Block","src":"9405:834:61","statements":[{"assignments":[11710],"declarations":[{"constant":false,"id":11710,"mutability":"mutable","name":"low","nameLocation":"9423:3:61","nodeType":"VariableDeclaration","scope":11780,"src":"9415:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11709,"name":"uint256","nodeType":"ElementaryTypeName","src":"9415:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11712,"initialValue":{"hexValue":"30","id":11711,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9429:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9415:15:61"},{"assignments":[11714],"declarations":[{"constant":false,"id":11714,"mutability":"mutable","name":"high","nameLocation":"9448:4:61","nodeType":"VariableDeclaration","scope":11780,"src":"9440:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11713,"name":"uint256","nodeType":"ElementaryTypeName","src":"9440:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11717,"initialValue":{"expression":{"id":11715,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11702,"src":"9455:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},"id":11716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9461:6:61","memberName":"length","nodeType":"MemberAccess","src":"9455:12:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9440:27:61"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11718,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11714,"src":"9482:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11719,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9490:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9482:9:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11724,"nodeType":"IfStatement","src":"9478:48:61","trueBody":{"id":11723,"nodeType":"Block","src":"9493:33:61","statements":[{"expression":{"hexValue":"30","id":11721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9514:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":11708,"id":11722,"nodeType":"Return","src":"9507:8:61"}]}},{"body":{"id":11756,"nodeType":"Block","src":"9555:423:61","statements":[{"assignments":[11729],"declarations":[{"constant":false,"id":11729,"mutability":"mutable","name":"mid","nameLocation":"9577:3:61","nodeType":"VariableDeclaration","scope":11756,"src":"9569:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11728,"name":"uint256","nodeType":"ElementaryTypeName","src":"9569:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11735,"initialValue":{"arguments":[{"id":11732,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11710,"src":"9596:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11733,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11714,"src":"9601:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11730,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14309,"src":"9583:4:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14309_$","typeString":"type(library Math)"}},"id":11731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9588:7:61","memberName":"average","nodeType":"MemberAccess","referencedDeclaration":13038,"src":"9583:12:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9583:23:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9569:37:61"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11737,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11702,"src":"9844:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},{"id":11738,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11729,"src":"9851:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11736,"name":"unsafeAccess","nodeType":"Identifier","overloadedDeclarations":[12061,12087,12113,12139,12165],"referencedDeclaration":12113,"src":"9831:12:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_Uint256Slot_$12567_storage_ptr_$","typeString":"function (uint256[] storage pointer,uint256) pure returns (struct StorageSlot.Uint256Slot storage pointer)"}},"id":11739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9831:24:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12567_storage_ptr","typeString":"struct StorageSlot.Uint256Slot storage pointer"}},"id":11740,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9856:5:61","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12566,"src":"9831:30:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":11741,"name":"element","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11704,"src":"9864:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9831:40:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11754,"nodeType":"Block","src":"9922:46:61","statements":[{"expression":{"id":11752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11748,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11710,"src":"9940:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11749,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11729,"src":"9946:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":11750,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9952:1:61","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9946:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9940:13:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11753,"nodeType":"ExpressionStatement","src":"9940:13:61"}]},"id":11755,"nodeType":"IfStatement","src":"9827:141:61","trueBody":{"id":11747,"nodeType":"Block","src":"9873:43:61","statements":[{"expression":{"id":11745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11743,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11714,"src":"9891:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11744,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11729,"src":"9898:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9891:10:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11746,"nodeType":"ExpressionStatement","src":"9891:10:61"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11725,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11710,"src":"9543:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11726,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11714,"src":"9549:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9543:10:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11757,"nodeType":"WhileStatement","src":"9536:442:61"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11758,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11710,"src":"10095:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":11759,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10101:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10095:7:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11762,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11702,"src":"10119:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11763,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11710,"src":"10126:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":11764,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10132:1:61","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10126:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11761,"name":"unsafeAccess","nodeType":"Identifier","overloadedDeclarations":[12061,12087,12113,12139,12165],"referencedDeclaration":12113,"src":"10106:12:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_Uint256Slot_$12567_storage_ptr_$","typeString":"function (uint256[] storage pointer,uint256) pure returns (struct StorageSlot.Uint256Slot storage pointer)"}},"id":11766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10106:28:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12567_storage_ptr","typeString":"struct StorageSlot.Uint256Slot storage pointer"}},"id":11767,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10135:5:61","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12566,"src":"10106:34:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":11768,"name":"element","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11704,"src":"10144:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10106:45:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10095:56:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11778,"nodeType":"Block","src":"10198:35:61","statements":[{"expression":{"id":11776,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11710,"src":"10219:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11708,"id":11777,"nodeType":"Return","src":"10212:10:61"}]},"id":11779,"nodeType":"IfStatement","src":"10091:142:61","trueBody":{"id":11775,"nodeType":"Block","src":"10153:39:61","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11771,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11710,"src":"10174:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":11772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10180:1:61","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10174:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11708,"id":11774,"nodeType":"Return","src":"10167:14:61"}]}}]},"documentation":{"id":11699,"nodeType":"StructuredDocumentation","src":"8686:616:61","text":" @dev Searches a sorted `array` and returns the first index that contains\n a value greater or equal to `element`. If no such index exists (i.e. all\n values in the array are strictly less than `element`), the array length is\n returned. Time complexity O(log n).\n NOTE: The `array` is expected to be sorted in ascending order, and to\n contain no repeated elements.\n IMPORTANT: Deprecated. This implementation behaves as {lowerBound} but lacks\n support for repeated elements in the array. The {lowerBound} function should\n be used instead."},"id":11781,"implemented":true,"kind":"function","modifiers":[],"name":"findUpperBound","nameLocation":"9316:14:61","nodeType":"FunctionDefinition","parameters":{"id":11705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11702,"mutability":"mutable","name":"array","nameLocation":"9349:5:61","nodeType":"VariableDeclaration","scope":11781,"src":"9331:23:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11700,"name":"uint256","nodeType":"ElementaryTypeName","src":"9331:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11701,"nodeType":"ArrayTypeName","src":"9331:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11704,"mutability":"mutable","name":"element","nameLocation":"9364:7:61","nodeType":"VariableDeclaration","scope":11781,"src":"9356:15:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11703,"name":"uint256","nodeType":"ElementaryTypeName","src":"9356:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9330:42:61"},"returnParameters":{"id":11708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11707,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11781,"src":"9396:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11706,"name":"uint256","nodeType":"ElementaryTypeName","src":"9396:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9395:9:61"},"scope":12286,"src":"9307:932:61","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11844,"nodeType":"Block","src":"10756:709:61","statements":[{"assignments":[11793],"declarations":[{"constant":false,"id":11793,"mutability":"mutable","name":"low","nameLocation":"10774:3:61","nodeType":"VariableDeclaration","scope":11844,"src":"10766:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11792,"name":"uint256","nodeType":"ElementaryTypeName","src":"10766:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11795,"initialValue":{"hexValue":"30","id":11794,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10780:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10766:15:61"},{"assignments":[11797],"declarations":[{"constant":false,"id":11797,"mutability":"mutable","name":"high","nameLocation":"10799:4:61","nodeType":"VariableDeclaration","scope":11844,"src":"10791:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11796,"name":"uint256","nodeType":"ElementaryTypeName","src":"10791:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11800,"initialValue":{"expression":{"id":11798,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11785,"src":"10806:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},"id":11799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10812:6:61","memberName":"length","nodeType":"MemberAccess","src":"10806:12:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10791:27:61"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11801,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11797,"src":"10833:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10841:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10833:9:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11807,"nodeType":"IfStatement","src":"10829:48:61","trueBody":{"id":11806,"nodeType":"Block","src":"10844:33:61","statements":[{"expression":{"hexValue":"30","id":11804,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10865:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":11791,"id":11805,"nodeType":"Return","src":"10858:8:61"}]}},{"body":{"id":11840,"nodeType":"Block","src":"10906:532:61","statements":[{"assignments":[11812],"declarations":[{"constant":false,"id":11812,"mutability":"mutable","name":"mid","nameLocation":"10928:3:61","nodeType":"VariableDeclaration","scope":11840,"src":"10920:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11811,"name":"uint256","nodeType":"ElementaryTypeName","src":"10920:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11818,"initialValue":{"arguments":[{"id":11815,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11793,"src":"10947:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11816,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11797,"src":"10952:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11813,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14309,"src":"10934:4:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14309_$","typeString":"type(library Math)"}},"id":11814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10939:7:61","memberName":"average","nodeType":"MemberAccess","referencedDeclaration":13038,"src":"10934:12:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10934:23:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10920:37:61"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11820,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11785,"src":"11195:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},{"id":11821,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11812,"src":"11202:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11819,"name":"unsafeAccess","nodeType":"Identifier","overloadedDeclarations":[12061,12087,12113,12139,12165],"referencedDeclaration":12113,"src":"11182:12:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_Uint256Slot_$12567_storage_ptr_$","typeString":"function (uint256[] storage pointer,uint256) pure returns (struct StorageSlot.Uint256Slot storage pointer)"}},"id":11822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11182:24:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12567_storage_ptr","typeString":"struct StorageSlot.Uint256Slot storage pointer"}},"id":11823,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11207:5:61","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12566,"src":"11182:30:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11824,"name":"element","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11787,"src":"11215:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11182:40:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11838,"nodeType":"Block","src":"11385:43:61","statements":[{"expression":{"id":11836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11834,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11797,"src":"11403:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11835,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11812,"src":"11410:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11403:10:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11837,"nodeType":"ExpressionStatement","src":"11403:10:61"}]},"id":11839,"nodeType":"IfStatement","src":"11178:250:61","trueBody":{"id":11833,"nodeType":"Block","src":"11224:155:61","statements":[{"id":11832,"nodeType":"UncheckedBlock","src":"11301:64:61","statements":[{"expression":{"id":11830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11826,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11793,"src":"11333:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11827,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11812,"src":"11339:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":11828,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11345:1:61","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11339:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11333:13:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11831,"nodeType":"ExpressionStatement","src":"11333:13:61"}]}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11808,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11793,"src":"10894:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11809,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11797,"src":"10900:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10894:10:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11841,"nodeType":"WhileStatement","src":"10887:551:61"},{"expression":{"id":11842,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11793,"src":"11455:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11791,"id":11843,"nodeType":"Return","src":"11448:10:61"}]},"documentation":{"id":11782,"nodeType":"StructuredDocumentation","src":"10245:412:61","text":" @dev Searches an `array` sorted in ascending order and returns the first\n index that contains a value greater or equal than `element`. If no such index\n exists (i.e. all values in the array are strictly less than `element`), the array\n length is returned. Time complexity O(log n).\n See C++'s https://en.cppreference.com/w/cpp/algorithm/lower_bound[lower_bound]."},"id":11845,"implemented":true,"kind":"function","modifiers":[],"name":"lowerBound","nameLocation":"10671:10:61","nodeType":"FunctionDefinition","parameters":{"id":11788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11785,"mutability":"mutable","name":"array","nameLocation":"10700:5:61","nodeType":"VariableDeclaration","scope":11845,"src":"10682:23:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11783,"name":"uint256","nodeType":"ElementaryTypeName","src":"10682:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11784,"nodeType":"ArrayTypeName","src":"10682:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11787,"mutability":"mutable","name":"element","nameLocation":"10715:7:61","nodeType":"VariableDeclaration","scope":11845,"src":"10707:15:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11786,"name":"uint256","nodeType":"ElementaryTypeName","src":"10707:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10681:42:61"},"returnParameters":{"id":11791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11790,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11845,"src":"10747:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11789,"name":"uint256","nodeType":"ElementaryTypeName","src":"10747:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10746:9:61"},"scope":12286,"src":"10662:803:61","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11908,"nodeType":"Block","src":"11982:709:61","statements":[{"assignments":[11857],"declarations":[{"constant":false,"id":11857,"mutability":"mutable","name":"low","nameLocation":"12000:3:61","nodeType":"VariableDeclaration","scope":11908,"src":"11992:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11856,"name":"uint256","nodeType":"ElementaryTypeName","src":"11992:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11859,"initialValue":{"hexValue":"30","id":11858,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12006:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11992:15:61"},{"assignments":[11861],"declarations":[{"constant":false,"id":11861,"mutability":"mutable","name":"high","nameLocation":"12025:4:61","nodeType":"VariableDeclaration","scope":11908,"src":"12017:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11860,"name":"uint256","nodeType":"ElementaryTypeName","src":"12017:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11864,"initialValue":{"expression":{"id":11862,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11849,"src":"12032:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},"id":11863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12038:6:61","memberName":"length","nodeType":"MemberAccess","src":"12032:12:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12017:27:61"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11865,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11861,"src":"12059:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11866,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12067:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12059:9:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11871,"nodeType":"IfStatement","src":"12055:48:61","trueBody":{"id":11870,"nodeType":"Block","src":"12070:33:61","statements":[{"expression":{"hexValue":"30","id":11868,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12091:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":11855,"id":11869,"nodeType":"Return","src":"12084:8:61"}]}},{"body":{"id":11904,"nodeType":"Block","src":"12132:532:61","statements":[{"assignments":[11876],"declarations":[{"constant":false,"id":11876,"mutability":"mutable","name":"mid","nameLocation":"12154:3:61","nodeType":"VariableDeclaration","scope":11904,"src":"12146:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11875,"name":"uint256","nodeType":"ElementaryTypeName","src":"12146:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11882,"initialValue":{"arguments":[{"id":11879,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11857,"src":"12173:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11880,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11861,"src":"12178:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11877,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14309,"src":"12160:4:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14309_$","typeString":"type(library Math)"}},"id":11878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12165:7:61","memberName":"average","nodeType":"MemberAccess","referencedDeclaration":13038,"src":"12160:12:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12160:23:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12146:37:61"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":11884,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11849,"src":"12421:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"}},{"id":11885,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11876,"src":"12428:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[] storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11883,"name":"unsafeAccess","nodeType":"Identifier","overloadedDeclarations":[12061,12087,12113,12139,12165],"referencedDeclaration":12113,"src":"12408:12:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_Uint256Slot_$12567_storage_ptr_$","typeString":"function (uint256[] storage pointer,uint256) pure returns (struct StorageSlot.Uint256Slot storage pointer)"}},"id":11886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12408:24:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12567_storage_ptr","typeString":"struct StorageSlot.Uint256Slot storage pointer"}},"id":11887,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12433:5:61","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12566,"src":"12408:30:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":11888,"name":"element","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11851,"src":"12441:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12408:40:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11902,"nodeType":"Block","src":"12499:155:61","statements":[{"id":11901,"nodeType":"UncheckedBlock","src":"12576:64:61","statements":[{"expression":{"id":11899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11895,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11857,"src":"12608:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11896,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11876,"src":"12614:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":11897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12620:1:61","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12614:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12608:13:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11900,"nodeType":"ExpressionStatement","src":"12608:13:61"}]}]},"id":11903,"nodeType":"IfStatement","src":"12404:250:61","trueBody":{"id":11894,"nodeType":"Block","src":"12450:43:61","statements":[{"expression":{"id":11892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11890,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11861,"src":"12468:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11891,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11876,"src":"12475:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12468:10:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11893,"nodeType":"ExpressionStatement","src":"12468:10:61"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11872,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11857,"src":"12120:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11873,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11861,"src":"12126:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12120:10:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11905,"nodeType":"WhileStatement","src":"12113:551:61"},{"expression":{"id":11906,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11857,"src":"12681:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11855,"id":11907,"nodeType":"Return","src":"12674:10:61"}]},"documentation":{"id":11846,"nodeType":"StructuredDocumentation","src":"11471:412:61","text":" @dev Searches an `array` sorted in ascending order and returns the first\n index that contains a value strictly greater than `element`. If no such index\n exists (i.e. all values in the array are strictly less than `element`), the array\n length is returned. Time complexity O(log n).\n See C++'s https://en.cppreference.com/w/cpp/algorithm/upper_bound[upper_bound]."},"id":11909,"implemented":true,"kind":"function","modifiers":[],"name":"upperBound","nameLocation":"11897:10:61","nodeType":"FunctionDefinition","parameters":{"id":11852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11849,"mutability":"mutable","name":"array","nameLocation":"11926:5:61","nodeType":"VariableDeclaration","scope":11909,"src":"11908:23:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11847,"name":"uint256","nodeType":"ElementaryTypeName","src":"11908:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11848,"nodeType":"ArrayTypeName","src":"11908:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11851,"mutability":"mutable","name":"element","nameLocation":"11941:7:61","nodeType":"VariableDeclaration","scope":11909,"src":"11933:15:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11850,"name":"uint256","nodeType":"ElementaryTypeName","src":"11933:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11907:42:61"},"returnParameters":{"id":11855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11854,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11909,"src":"11973:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11853,"name":"uint256","nodeType":"ElementaryTypeName","src":"11973:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11972:9:61"},"scope":12286,"src":"11888:803:61","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11971,"nodeType":"Block","src":"12875:709:61","statements":[{"assignments":[11921],"declarations":[{"constant":false,"id":11921,"mutability":"mutable","name":"low","nameLocation":"12893:3:61","nodeType":"VariableDeclaration","scope":11971,"src":"12885:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11920,"name":"uint256","nodeType":"ElementaryTypeName","src":"12885:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11923,"initialValue":{"hexValue":"30","id":11922,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12899:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12885:15:61"},{"assignments":[11925],"declarations":[{"constant":false,"id":11925,"mutability":"mutable","name":"high","nameLocation":"12918:4:61","nodeType":"VariableDeclaration","scope":11971,"src":"12910:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11924,"name":"uint256","nodeType":"ElementaryTypeName","src":"12910:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11928,"initialValue":{"expression":{"id":11926,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11913,"src":"12925:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12931:6:61","memberName":"length","nodeType":"MemberAccess","src":"12925:12:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12910:27:61"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11929,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11925,"src":"12952:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12960:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12952:9:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11935,"nodeType":"IfStatement","src":"12948:48:61","trueBody":{"id":11934,"nodeType":"Block","src":"12963:33:61","statements":[{"expression":{"hexValue":"30","id":11932,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12984:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":11919,"id":11933,"nodeType":"Return","src":"12977:8:61"}]}},{"body":{"id":11967,"nodeType":"Block","src":"13025:532:61","statements":[{"assignments":[11940],"declarations":[{"constant":false,"id":11940,"mutability":"mutable","name":"mid","nameLocation":"13047:3:61","nodeType":"VariableDeclaration","scope":11967,"src":"13039:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11939,"name":"uint256","nodeType":"ElementaryTypeName","src":"13039:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11946,"initialValue":{"arguments":[{"id":11943,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11921,"src":"13066:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11944,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11925,"src":"13071:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11941,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14309,"src":"13053:4:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14309_$","typeString":"type(library Math)"}},"id":11942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13058:7:61","memberName":"average","nodeType":"MemberAccess","referencedDeclaration":13038,"src":"13053:12:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13053:23:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13039:37:61"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":11948,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11913,"src":"13320:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":11949,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11940,"src":"13327:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11947,"name":"unsafeMemoryAccess","nodeType":"Identifier","overloadedDeclarations":[12178,12191,12204,12217,12230],"referencedDeclaration":12204,"src":"13301:18:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":11950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13301:30:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11951,"name":"element","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11915,"src":"13334:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13301:40:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11965,"nodeType":"Block","src":"13504:43:61","statements":[{"expression":{"id":11963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11961,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11925,"src":"13522:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11962,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11940,"src":"13529:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13522:10:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11964,"nodeType":"ExpressionStatement","src":"13522:10:61"}]},"id":11966,"nodeType":"IfStatement","src":"13297:250:61","trueBody":{"id":11960,"nodeType":"Block","src":"13343:155:61","statements":[{"id":11959,"nodeType":"UncheckedBlock","src":"13420:64:61","statements":[{"expression":{"id":11957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11953,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11921,"src":"13452:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11954,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11940,"src":"13458:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":11955,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13464:1:61","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13458:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13452:13:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11958,"nodeType":"ExpressionStatement","src":"13452:13:61"}]}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11936,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11921,"src":"13013:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11937,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11925,"src":"13019:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13013:10:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11968,"nodeType":"WhileStatement","src":"13006:551:61"},{"expression":{"id":11969,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11921,"src":"13574:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11919,"id":11970,"nodeType":"Return","src":"13567:10:61"}]},"documentation":{"id":11910,"nodeType":"StructuredDocumentation","src":"12697:74:61","text":" @dev Same as {lowerBound}, but with an array in memory."},"id":11972,"implemented":true,"kind":"function","modifiers":[],"name":"lowerBoundMemory","nameLocation":"12785:16:61","nodeType":"FunctionDefinition","parameters":{"id":11916,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11913,"mutability":"mutable","name":"array","nameLocation":"12819:5:61","nodeType":"VariableDeclaration","scope":11972,"src":"12802:22:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11911,"name":"uint256","nodeType":"ElementaryTypeName","src":"12802:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11912,"nodeType":"ArrayTypeName","src":"12802:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11915,"mutability":"mutable","name":"element","nameLocation":"12834:7:61","nodeType":"VariableDeclaration","scope":11972,"src":"12826:15:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11914,"name":"uint256","nodeType":"ElementaryTypeName","src":"12826:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12801:41:61"},"returnParameters":{"id":11919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11918,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11972,"src":"12866:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11917,"name":"uint256","nodeType":"ElementaryTypeName","src":"12866:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12865:9:61"},"scope":12286,"src":"12776:808:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12034,"nodeType":"Block","src":"13768:709:61","statements":[{"assignments":[11984],"declarations":[{"constant":false,"id":11984,"mutability":"mutable","name":"low","nameLocation":"13786:3:61","nodeType":"VariableDeclaration","scope":12034,"src":"13778:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11983,"name":"uint256","nodeType":"ElementaryTypeName","src":"13778:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11986,"initialValue":{"hexValue":"30","id":11985,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13792:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13778:15:61"},{"assignments":[11988],"declarations":[{"constant":false,"id":11988,"mutability":"mutable","name":"high","nameLocation":"13811:4:61","nodeType":"VariableDeclaration","scope":12034,"src":"13803:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11987,"name":"uint256","nodeType":"ElementaryTypeName","src":"13803:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11991,"initialValue":{"expression":{"id":11989,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11976,"src":"13818:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13824:6:61","memberName":"length","nodeType":"MemberAccess","src":"13818:12:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13803:27:61"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11992,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11988,"src":"13845:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":11993,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13853:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13845:9:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11998,"nodeType":"IfStatement","src":"13841:48:61","trueBody":{"id":11997,"nodeType":"Block","src":"13856:33:61","statements":[{"expression":{"hexValue":"30","id":11995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13877:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":11982,"id":11996,"nodeType":"Return","src":"13870:8:61"}]}},{"body":{"id":12030,"nodeType":"Block","src":"13918:532:61","statements":[{"assignments":[12003],"declarations":[{"constant":false,"id":12003,"mutability":"mutable","name":"mid","nameLocation":"13940:3:61","nodeType":"VariableDeclaration","scope":12030,"src":"13932:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12002,"name":"uint256","nodeType":"ElementaryTypeName","src":"13932:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12009,"initialValue":{"arguments":[{"id":12006,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11984,"src":"13959:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12007,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11988,"src":"13964:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12004,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14309,"src":"13946:4:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14309_$","typeString":"type(library Math)"}},"id":12005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13951:7:61","memberName":"average","nodeType":"MemberAccess","referencedDeclaration":13038,"src":"13946:12:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":12008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13946:23:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13932:37:61"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":12011,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11976,"src":"14213:5:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":12012,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12003,"src":"14220:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12010,"name":"unsafeMemoryAccess","nodeType":"Identifier","overloadedDeclarations":[12178,12191,12204,12217,12230],"referencedDeclaration":12204,"src":"14194:18:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256) pure returns (uint256)"}},"id":12013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14194:30:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":12014,"name":"element","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11978,"src":"14227:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14194:40:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":12028,"nodeType":"Block","src":"14285:155:61","statements":[{"id":12027,"nodeType":"UncheckedBlock","src":"14362:64:61","statements":[{"expression":{"id":12025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12021,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11984,"src":"14394:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12022,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12003,"src":"14400:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":12023,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14406:1:61","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"14400:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14394:13:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12026,"nodeType":"ExpressionStatement","src":"14394:13:61"}]}]},"id":12029,"nodeType":"IfStatement","src":"14190:250:61","trueBody":{"id":12020,"nodeType":"Block","src":"14236:43:61","statements":[{"expression":{"id":12018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12016,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11988,"src":"14254:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12017,"name":"mid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12003,"src":"14261:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14254:10:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12019,"nodeType":"ExpressionStatement","src":"14254:10:61"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11999,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11984,"src":"13906:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":12000,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11988,"src":"13912:4:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13906:10:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12031,"nodeType":"WhileStatement","src":"13899:551:61"},{"expression":{"id":12032,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11984,"src":"14467:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11982,"id":12033,"nodeType":"Return","src":"14460:10:61"}]},"documentation":{"id":11973,"nodeType":"StructuredDocumentation","src":"13590:74:61","text":" @dev Same as {upperBound}, but with an array in memory."},"id":12035,"implemented":true,"kind":"function","modifiers":[],"name":"upperBoundMemory","nameLocation":"13678:16:61","nodeType":"FunctionDefinition","parameters":{"id":11979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11976,"mutability":"mutable","name":"array","nameLocation":"13712:5:61","nodeType":"VariableDeclaration","scope":12035,"src":"13695:22:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11974,"name":"uint256","nodeType":"ElementaryTypeName","src":"13695:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11975,"nodeType":"ArrayTypeName","src":"13695:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11978,"mutability":"mutable","name":"element","nameLocation":"13727:7:61","nodeType":"VariableDeclaration","scope":12035,"src":"13719:15:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11977,"name":"uint256","nodeType":"ElementaryTypeName","src":"13719:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13694:41:61"},"returnParameters":{"id":11982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11981,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12035,"src":"13759:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11980,"name":"uint256","nodeType":"ElementaryTypeName","src":"13759:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13758:9:61"},"scope":12286,"src":"13669:808:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12060,"nodeType":"Block","src":"14793:167:61","statements":[{"assignments":[12048],"declarations":[{"constant":false,"id":12048,"mutability":"mutable","name":"slot","nameLocation":"14811:4:61","nodeType":"VariableDeclaration","scope":12060,"src":"14803:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12047,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14803:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12049,"nodeType":"VariableDeclarationStatement","src":"14803:12:61"},{"AST":{"nativeSrc":"14850:40:61","nodeType":"YulBlock","src":"14850:40:61","statements":[{"nativeSrc":"14864:16:61","nodeType":"YulAssignment","src":"14864:16:61","value":{"name":"arr.slot","nativeSrc":"14872:8:61","nodeType":"YulIdentifier","src":"14872:8:61"},"variableNames":[{"name":"slot","nativeSrc":"14864:4:61","nodeType":"YulIdentifier","src":"14864:4:61"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12039,"isOffset":false,"isSlot":true,"src":"14872:8:61","suffix":"slot","valueSize":1},{"declaration":12048,"isOffset":false,"isSlot":false,"src":"14864:4:61","valueSize":1}],"flags":["memory-safe"],"id":12050,"nodeType":"InlineAssembly","src":"14825:65:61"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":12055,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12041,"src":"14932:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12051,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12048,"src":"14906:4:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14911:11:61","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":12467,"src":"14906:16:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":12053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14906:18:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14925:6:61","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":12457,"src":"14906:25:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":12056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14906:30:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14937:14:61","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":12587,"src":"14906:45:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$12558_storage_ptr_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":12058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14906:47:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$12558_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"functionReturnParameters":12046,"id":12059,"nodeType":"Return","src":"14899:54:61"}]},"documentation":{"id":12036,"nodeType":"StructuredDocumentation","src":"14483:191:61","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12061,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeAccess","nameLocation":"14688:12:61","nodeType":"FunctionDefinition","parameters":{"id":12042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12039,"mutability":"mutable","name":"arr","nameLocation":"14719:3:61","nodeType":"VariableDeclaration","scope":12061,"src":"14701:21:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":12037,"name":"address","nodeType":"ElementaryTypeName","src":"14701:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12038,"nodeType":"ArrayTypeName","src":"14701:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":12041,"mutability":"mutable","name":"pos","nameLocation":"14732:3:61","nodeType":"VariableDeclaration","scope":12061,"src":"14724:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12040,"name":"uint256","nodeType":"ElementaryTypeName","src":"14724:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14700:36:61"},"returnParameters":{"id":12046,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12045,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12061,"src":"14760:31:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$12558_storage_ptr","typeString":"struct StorageSlot.AddressSlot"},"typeName":{"id":12044,"nodeType":"UserDefinedTypeName","pathNode":{"id":12043,"name":"StorageSlot.AddressSlot","nameLocations":["14760:11:61","14772:11:61"],"nodeType":"IdentifierPath","referencedDeclaration":12558,"src":"14760:23:61"},"referencedDeclaration":12558,"src":"14760:23:61","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$12558_storage_ptr","typeString":"struct StorageSlot.AddressSlot"}},"visibility":"internal"}],"src":"14759:33:61"},"scope":12286,"src":"14679:281:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12086,"nodeType":"Block","src":"15276:167:61","statements":[{"assignments":[12074],"declarations":[{"constant":false,"id":12074,"mutability":"mutable","name":"slot","nameLocation":"15294:4:61","nodeType":"VariableDeclaration","scope":12086,"src":"15286:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12073,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15286:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12075,"nodeType":"VariableDeclarationStatement","src":"15286:12:61"},{"AST":{"nativeSrc":"15333:40:61","nodeType":"YulBlock","src":"15333:40:61","statements":[{"nativeSrc":"15347:16:61","nodeType":"YulAssignment","src":"15347:16:61","value":{"name":"arr.slot","nativeSrc":"15355:8:61","nodeType":"YulIdentifier","src":"15355:8:61"},"variableNames":[{"name":"slot","nativeSrc":"15347:4:61","nodeType":"YulIdentifier","src":"15347:4:61"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12065,"isOffset":false,"isSlot":true,"src":"15355:8:61","suffix":"slot","valueSize":1},{"declaration":12074,"isOffset":false,"isSlot":false,"src":"15347:4:61","valueSize":1}],"flags":["memory-safe"],"id":12076,"nodeType":"InlineAssembly","src":"15308:65:61"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":12081,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12067,"src":"15415:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12077,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12074,"src":"15389:4:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15394:11:61","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":12467,"src":"15389:16:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":12079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15389:18:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15408:6:61","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":12457,"src":"15389:25:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":12082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15389:30:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15420:14:61","memberName":"getBytes32Slot","nodeType":"MemberAccess","referencedDeclaration":12609,"src":"15389:45:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$12564_storage_ptr_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":12084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15389:47:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$12564_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"functionReturnParameters":12072,"id":12085,"nodeType":"Return","src":"15382:54:61"}]},"documentation":{"id":12062,"nodeType":"StructuredDocumentation","src":"14966:191:61","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12087,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeAccess","nameLocation":"15171:12:61","nodeType":"FunctionDefinition","parameters":{"id":12068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12065,"mutability":"mutable","name":"arr","nameLocation":"15202:3:61","nodeType":"VariableDeclaration","scope":12087,"src":"15184:21:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":12063,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15184:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12064,"nodeType":"ArrayTypeName","src":"15184:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":12067,"mutability":"mutable","name":"pos","nameLocation":"15215:3:61","nodeType":"VariableDeclaration","scope":12087,"src":"15207:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12066,"name":"uint256","nodeType":"ElementaryTypeName","src":"15207:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15183:36:61"},"returnParameters":{"id":12072,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12071,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12087,"src":"15243:31:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$12564_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"},"typeName":{"id":12070,"nodeType":"UserDefinedTypeName","pathNode":{"id":12069,"name":"StorageSlot.Bytes32Slot","nameLocations":["15243:11:61","15255:11:61"],"nodeType":"IdentifierPath","referencedDeclaration":12564,"src":"15243:23:61"},"referencedDeclaration":12564,"src":"15243:23:61","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$12564_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"}},"visibility":"internal"}],"src":"15242:33:61"},"scope":12286,"src":"15162:281:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12112,"nodeType":"Block","src":"15759:167:61","statements":[{"assignments":[12100],"declarations":[{"constant":false,"id":12100,"mutability":"mutable","name":"slot","nameLocation":"15777:4:61","nodeType":"VariableDeclaration","scope":12112,"src":"15769:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12099,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15769:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12101,"nodeType":"VariableDeclarationStatement","src":"15769:12:61"},{"AST":{"nativeSrc":"15816:40:61","nodeType":"YulBlock","src":"15816:40:61","statements":[{"nativeSrc":"15830:16:61","nodeType":"YulAssignment","src":"15830:16:61","value":{"name":"arr.slot","nativeSrc":"15838:8:61","nodeType":"YulIdentifier","src":"15838:8:61"},"variableNames":[{"name":"slot","nativeSrc":"15830:4:61","nodeType":"YulIdentifier","src":"15830:4:61"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12091,"isOffset":false,"isSlot":true,"src":"15838:8:61","suffix":"slot","valueSize":1},{"declaration":12100,"isOffset":false,"isSlot":false,"src":"15830:4:61","valueSize":1}],"flags":["memory-safe"],"id":12102,"nodeType":"InlineAssembly","src":"15791:65:61"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":12107,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12093,"src":"15898:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12103,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12100,"src":"15872:4:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15877:11:61","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":12467,"src":"15872:16:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":12105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15872:18:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15891:6:61","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":12457,"src":"15872:25:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":12108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15872:30:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15903:14:61","memberName":"getUint256Slot","nodeType":"MemberAccess","referencedDeclaration":12620,"src":"15872:45:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Uint256Slot_$12567_storage_ptr_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (struct StorageSlot.Uint256Slot storage pointer)"}},"id":12110,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15872:47:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12567_storage_ptr","typeString":"struct StorageSlot.Uint256Slot storage pointer"}},"functionReturnParameters":12098,"id":12111,"nodeType":"Return","src":"15865:54:61"}]},"documentation":{"id":12088,"nodeType":"StructuredDocumentation","src":"15449:191:61","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12113,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeAccess","nameLocation":"15654:12:61","nodeType":"FunctionDefinition","parameters":{"id":12094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12091,"mutability":"mutable","name":"arr","nameLocation":"15685:3:61","nodeType":"VariableDeclaration","scope":12113,"src":"15667:21:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12089,"name":"uint256","nodeType":"ElementaryTypeName","src":"15667:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12090,"nodeType":"ArrayTypeName","src":"15667:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12093,"mutability":"mutable","name":"pos","nameLocation":"15698:3:61","nodeType":"VariableDeclaration","scope":12113,"src":"15690:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12092,"name":"uint256","nodeType":"ElementaryTypeName","src":"15690:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15666:36:61"},"returnParameters":{"id":12098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12097,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12113,"src":"15726:31:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12567_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"},"typeName":{"id":12096,"nodeType":"UserDefinedTypeName","pathNode":{"id":12095,"name":"StorageSlot.Uint256Slot","nameLocations":["15726:11:61","15738:11:61"],"nodeType":"IdentifierPath","referencedDeclaration":12567,"src":"15726:23:61"},"referencedDeclaration":12567,"src":"15726:23:61","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12567_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"}},"visibility":"internal"}],"src":"15725:33:61"},"scope":12286,"src":"15645:281:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12138,"nodeType":"Block","src":"16238:165:61","statements":[{"assignments":[12126],"declarations":[{"constant":false,"id":12126,"mutability":"mutable","name":"slot","nameLocation":"16256:4:61","nodeType":"VariableDeclaration","scope":12138,"src":"16248:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12125,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16248:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12127,"nodeType":"VariableDeclarationStatement","src":"16248:12:61"},{"AST":{"nativeSrc":"16295:40:61","nodeType":"YulBlock","src":"16295:40:61","statements":[{"nativeSrc":"16309:16:61","nodeType":"YulAssignment","src":"16309:16:61","value":{"name":"arr.slot","nativeSrc":"16317:8:61","nodeType":"YulIdentifier","src":"16317:8:61"},"variableNames":[{"name":"slot","nativeSrc":"16309:4:61","nodeType":"YulIdentifier","src":"16309:4:61"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12117,"isOffset":false,"isSlot":true,"src":"16317:8:61","suffix":"slot","valueSize":1},{"declaration":12126,"isOffset":false,"isSlot":false,"src":"16309:4:61","valueSize":1}],"flags":["memory-safe"],"id":12128,"nodeType":"InlineAssembly","src":"16270:65:61"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":12133,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12119,"src":"16377:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12129,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12126,"src":"16351:4:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16356:11:61","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":12467,"src":"16351:16:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":12131,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16351:18:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16370:6:61","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":12457,"src":"16351:25:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":12134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16351:30:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16382:12:61","memberName":"getBytesSlot","nodeType":"MemberAccess","referencedDeclaration":12664,"src":"16351:43:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_BytesSlot_$12576_storage_ptr_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (struct StorageSlot.BytesSlot storage pointer)"}},"id":12136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16351:45:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12576_storage_ptr","typeString":"struct StorageSlot.BytesSlot storage pointer"}},"functionReturnParameters":12124,"id":12137,"nodeType":"Return","src":"16344:52:61"}]},"documentation":{"id":12114,"nodeType":"StructuredDocumentation","src":"15932:191:61","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12139,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeAccess","nameLocation":"16137:12:61","nodeType":"FunctionDefinition","parameters":{"id":12120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12117,"mutability":"mutable","name":"arr","nameLocation":"16166:3:61","nodeType":"VariableDeclaration","scope":12139,"src":"16150:19:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":12115,"name":"bytes","nodeType":"ElementaryTypeName","src":"16150:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":12116,"nodeType":"ArrayTypeName","src":"16150:7:61","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"},{"constant":false,"id":12119,"mutability":"mutable","name":"pos","nameLocation":"16179:3:61","nodeType":"VariableDeclaration","scope":12139,"src":"16171:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12118,"name":"uint256","nodeType":"ElementaryTypeName","src":"16171:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16149:34:61"},"returnParameters":{"id":12124,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12123,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12139,"src":"16207:29:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12576_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":12122,"nodeType":"UserDefinedTypeName","pathNode":{"id":12121,"name":"StorageSlot.BytesSlot","nameLocations":["16207:11:61","16219:9:61"],"nodeType":"IdentifierPath","referencedDeclaration":12576,"src":"16207:21:61"},"referencedDeclaration":12576,"src":"16207:21:61","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12576_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"16206:31:61"},"scope":12286,"src":"16128:275:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12164,"nodeType":"Block","src":"16717:166:61","statements":[{"assignments":[12152],"declarations":[{"constant":false,"id":12152,"mutability":"mutable","name":"slot","nameLocation":"16735:4:61","nodeType":"VariableDeclaration","scope":12164,"src":"16727:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12151,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16727:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":12153,"nodeType":"VariableDeclarationStatement","src":"16727:12:61"},{"AST":{"nativeSrc":"16774:40:61","nodeType":"YulBlock","src":"16774:40:61","statements":[{"nativeSrc":"16788:16:61","nodeType":"YulAssignment","src":"16788:16:61","value":{"name":"arr.slot","nativeSrc":"16796:8:61","nodeType":"YulIdentifier","src":"16796:8:61"},"variableNames":[{"name":"slot","nativeSrc":"16788:4:61","nodeType":"YulIdentifier","src":"16788:4:61"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12143,"isOffset":false,"isSlot":true,"src":"16796:8:61","suffix":"slot","valueSize":1},{"declaration":12152,"isOffset":false,"isSlot":false,"src":"16788:4:61","valueSize":1}],"flags":["memory-safe"],"id":12154,"nodeType":"InlineAssembly","src":"16749:65:61"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":12159,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12145,"src":"16856:3:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12155,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12152,"src":"16830:4:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16835:11:61","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":12467,"src":"16830:16:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":12157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16830:18:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16849:6:61","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":12457,"src":"16830:25:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":12160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16830:30:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16861:13:61","memberName":"getStringSlot","nodeType":"MemberAccess","referencedDeclaration":12642,"src":"16830:44:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_StringSlot_$12573_storage_ptr_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (struct StorageSlot.StringSlot storage pointer)"}},"id":12162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16830:46:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12573_storage_ptr","typeString":"struct StorageSlot.StringSlot storage pointer"}},"functionReturnParameters":12150,"id":12163,"nodeType":"Return","src":"16823:53:61"}]},"documentation":{"id":12140,"nodeType":"StructuredDocumentation","src":"16409:191:61","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12165,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeAccess","nameLocation":"16614:12:61","nodeType":"FunctionDefinition","parameters":{"id":12146,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12143,"mutability":"mutable","name":"arr","nameLocation":"16644:3:61","nodeType":"VariableDeclaration","scope":12165,"src":"16627:20:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":12141,"name":"string","nodeType":"ElementaryTypeName","src":"16627:6:61","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":12142,"nodeType":"ArrayTypeName","src":"16627:8:61","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":12145,"mutability":"mutable","name":"pos","nameLocation":"16657:3:61","nodeType":"VariableDeclaration","scope":12165,"src":"16649:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12144,"name":"uint256","nodeType":"ElementaryTypeName","src":"16649:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16626:35:61"},"returnParameters":{"id":12150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12149,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12165,"src":"16685:30:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12573_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":12148,"nodeType":"UserDefinedTypeName","pathNode":{"id":12147,"name":"StorageSlot.StringSlot","nameLocations":["16685:11:61","16697:10:61"],"nodeType":"IdentifierPath","referencedDeclaration":12573,"src":"16685:22:61"},"referencedDeclaration":12573,"src":"16685:22:61","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12573_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"16684:32:61"},"scope":12286,"src":"16605:278:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12177,"nodeType":"Block","src":"17184:98:61","statements":[{"AST":{"nativeSrc":"17203:73:61","nodeType":"YulBlock","src":"17203:73:61","statements":[{"nativeSrc":"17217:49:61","nodeType":"YulAssignment","src":"17217:49:61","value":{"arguments":[{"arguments":[{"arguments":[{"name":"arr","nativeSrc":"17238:3:61","nodeType":"YulIdentifier","src":"17238:3:61"},{"kind":"number","nativeSrc":"17243:4:61","nodeType":"YulLiteral","src":"17243:4:61","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"17234:3:61","nodeType":"YulIdentifier","src":"17234:3:61"},"nativeSrc":"17234:14:61","nodeType":"YulFunctionCall","src":"17234:14:61"},{"arguments":[{"name":"pos","nativeSrc":"17254:3:61","nodeType":"YulIdentifier","src":"17254:3:61"},{"kind":"number","nativeSrc":"17259:4:61","nodeType":"YulLiteral","src":"17259:4:61","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"17250:3:61","nodeType":"YulIdentifier","src":"17250:3:61"},"nativeSrc":"17250:14:61","nodeType":"YulFunctionCall","src":"17250:14:61"}],"functionName":{"name":"add","nativeSrc":"17230:3:61","nodeType":"YulIdentifier","src":"17230:3:61"},"nativeSrc":"17230:35:61","nodeType":"YulFunctionCall","src":"17230:35:61"}],"functionName":{"name":"mload","nativeSrc":"17224:5:61","nodeType":"YulIdentifier","src":"17224:5:61"},"nativeSrc":"17224:42:61","nodeType":"YulFunctionCall","src":"17224:42:61"},"variableNames":[{"name":"res","nativeSrc":"17217:3:61","nodeType":"YulIdentifier","src":"17217:3:61"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12169,"isOffset":false,"isSlot":false,"src":"17238:3:61","valueSize":1},{"declaration":12171,"isOffset":false,"isSlot":false,"src":"17254:3:61","valueSize":1},{"declaration":12174,"isOffset":false,"isSlot":false,"src":"17217:3:61","valueSize":1}],"id":12176,"nodeType":"InlineAssembly","src":"17194:82:61"}]},"documentation":{"id":12166,"nodeType":"StructuredDocumentation","src":"16889:191:61","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12178,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeMemoryAccess","nameLocation":"17094:18:61","nodeType":"FunctionDefinition","parameters":{"id":12172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12169,"mutability":"mutable","name":"arr","nameLocation":"17130:3:61","nodeType":"VariableDeclaration","scope":12178,"src":"17113:20:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":12167,"name":"address","nodeType":"ElementaryTypeName","src":"17113:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12168,"nodeType":"ArrayTypeName","src":"17113:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":12171,"mutability":"mutable","name":"pos","nameLocation":"17143:3:61","nodeType":"VariableDeclaration","scope":12178,"src":"17135:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12170,"name":"uint256","nodeType":"ElementaryTypeName","src":"17135:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17112:35:61"},"returnParameters":{"id":12175,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12174,"mutability":"mutable","name":"res","nameLocation":"17179:3:61","nodeType":"VariableDeclaration","scope":12178,"src":"17171:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12173,"name":"address","nodeType":"ElementaryTypeName","src":"17171:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17170:13:61"},"scope":12286,"src":"17085:197:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12190,"nodeType":"Block","src":"17583:98:61","statements":[{"AST":{"nativeSrc":"17602:73:61","nodeType":"YulBlock","src":"17602:73:61","statements":[{"nativeSrc":"17616:49:61","nodeType":"YulAssignment","src":"17616:49:61","value":{"arguments":[{"arguments":[{"arguments":[{"name":"arr","nativeSrc":"17637:3:61","nodeType":"YulIdentifier","src":"17637:3:61"},{"kind":"number","nativeSrc":"17642:4:61","nodeType":"YulLiteral","src":"17642:4:61","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"17633:3:61","nodeType":"YulIdentifier","src":"17633:3:61"},"nativeSrc":"17633:14:61","nodeType":"YulFunctionCall","src":"17633:14:61"},{"arguments":[{"name":"pos","nativeSrc":"17653:3:61","nodeType":"YulIdentifier","src":"17653:3:61"},{"kind":"number","nativeSrc":"17658:4:61","nodeType":"YulLiteral","src":"17658:4:61","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"17649:3:61","nodeType":"YulIdentifier","src":"17649:3:61"},"nativeSrc":"17649:14:61","nodeType":"YulFunctionCall","src":"17649:14:61"}],"functionName":{"name":"add","nativeSrc":"17629:3:61","nodeType":"YulIdentifier","src":"17629:3:61"},"nativeSrc":"17629:35:61","nodeType":"YulFunctionCall","src":"17629:35:61"}],"functionName":{"name":"mload","nativeSrc":"17623:5:61","nodeType":"YulIdentifier","src":"17623:5:61"},"nativeSrc":"17623:42:61","nodeType":"YulFunctionCall","src":"17623:42:61"},"variableNames":[{"name":"res","nativeSrc":"17616:3:61","nodeType":"YulIdentifier","src":"17616:3:61"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12182,"isOffset":false,"isSlot":false,"src":"17637:3:61","valueSize":1},{"declaration":12184,"isOffset":false,"isSlot":false,"src":"17653:3:61","valueSize":1},{"declaration":12187,"isOffset":false,"isSlot":false,"src":"17616:3:61","valueSize":1}],"id":12189,"nodeType":"InlineAssembly","src":"17593:82:61"}]},"documentation":{"id":12179,"nodeType":"StructuredDocumentation","src":"17288:191:61","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12191,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeMemoryAccess","nameLocation":"17493:18:61","nodeType":"FunctionDefinition","parameters":{"id":12185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12182,"mutability":"mutable","name":"arr","nameLocation":"17529:3:61","nodeType":"VariableDeclaration","scope":12191,"src":"17512:20:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":12180,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17512:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12181,"nodeType":"ArrayTypeName","src":"17512:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":12184,"mutability":"mutable","name":"pos","nameLocation":"17542:3:61","nodeType":"VariableDeclaration","scope":12191,"src":"17534:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12183,"name":"uint256","nodeType":"ElementaryTypeName","src":"17534:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17511:35:61"},"returnParameters":{"id":12188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12187,"mutability":"mutable","name":"res","nameLocation":"17578:3:61","nodeType":"VariableDeclaration","scope":12191,"src":"17570:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12186,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17570:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"17569:13:61"},"scope":12286,"src":"17484:197:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12203,"nodeType":"Block","src":"17982:98:61","statements":[{"AST":{"nativeSrc":"18001:73:61","nodeType":"YulBlock","src":"18001:73:61","statements":[{"nativeSrc":"18015:49:61","nodeType":"YulAssignment","src":"18015:49:61","value":{"arguments":[{"arguments":[{"arguments":[{"name":"arr","nativeSrc":"18036:3:61","nodeType":"YulIdentifier","src":"18036:3:61"},{"kind":"number","nativeSrc":"18041:4:61","nodeType":"YulLiteral","src":"18041:4:61","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18032:3:61","nodeType":"YulIdentifier","src":"18032:3:61"},"nativeSrc":"18032:14:61","nodeType":"YulFunctionCall","src":"18032:14:61"},{"arguments":[{"name":"pos","nativeSrc":"18052:3:61","nodeType":"YulIdentifier","src":"18052:3:61"},{"kind":"number","nativeSrc":"18057:4:61","nodeType":"YulLiteral","src":"18057:4:61","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"18048:3:61","nodeType":"YulIdentifier","src":"18048:3:61"},"nativeSrc":"18048:14:61","nodeType":"YulFunctionCall","src":"18048:14:61"}],"functionName":{"name":"add","nativeSrc":"18028:3:61","nodeType":"YulIdentifier","src":"18028:3:61"},"nativeSrc":"18028:35:61","nodeType":"YulFunctionCall","src":"18028:35:61"}],"functionName":{"name":"mload","nativeSrc":"18022:5:61","nodeType":"YulIdentifier","src":"18022:5:61"},"nativeSrc":"18022:42:61","nodeType":"YulFunctionCall","src":"18022:42:61"},"variableNames":[{"name":"res","nativeSrc":"18015:3:61","nodeType":"YulIdentifier","src":"18015:3:61"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12195,"isOffset":false,"isSlot":false,"src":"18036:3:61","valueSize":1},{"declaration":12197,"isOffset":false,"isSlot":false,"src":"18052:3:61","valueSize":1},{"declaration":12200,"isOffset":false,"isSlot":false,"src":"18015:3:61","valueSize":1}],"id":12202,"nodeType":"InlineAssembly","src":"17992:82:61"}]},"documentation":{"id":12192,"nodeType":"StructuredDocumentation","src":"17687:191:61","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12204,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeMemoryAccess","nameLocation":"17892:18:61","nodeType":"FunctionDefinition","parameters":{"id":12198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12195,"mutability":"mutable","name":"arr","nameLocation":"17928:3:61","nodeType":"VariableDeclaration","scope":12204,"src":"17911:20:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12193,"name":"uint256","nodeType":"ElementaryTypeName","src":"17911:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12194,"nodeType":"ArrayTypeName","src":"17911:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12197,"mutability":"mutable","name":"pos","nameLocation":"17941:3:61","nodeType":"VariableDeclaration","scope":12204,"src":"17933:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12196,"name":"uint256","nodeType":"ElementaryTypeName","src":"17933:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17910:35:61"},"returnParameters":{"id":12201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12200,"mutability":"mutable","name":"res","nameLocation":"17977:3:61","nodeType":"VariableDeclaration","scope":12204,"src":"17969:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12199,"name":"uint256","nodeType":"ElementaryTypeName","src":"17969:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17968:13:61"},"scope":12286,"src":"17883:197:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12216,"nodeType":"Block","src":"18384:98:61","statements":[{"AST":{"nativeSrc":"18403:73:61","nodeType":"YulBlock","src":"18403:73:61","statements":[{"nativeSrc":"18417:49:61","nodeType":"YulAssignment","src":"18417:49:61","value":{"arguments":[{"arguments":[{"arguments":[{"name":"arr","nativeSrc":"18438:3:61","nodeType":"YulIdentifier","src":"18438:3:61"},{"kind":"number","nativeSrc":"18443:4:61","nodeType":"YulLiteral","src":"18443:4:61","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18434:3:61","nodeType":"YulIdentifier","src":"18434:3:61"},"nativeSrc":"18434:14:61","nodeType":"YulFunctionCall","src":"18434:14:61"},{"arguments":[{"name":"pos","nativeSrc":"18454:3:61","nodeType":"YulIdentifier","src":"18454:3:61"},{"kind":"number","nativeSrc":"18459:4:61","nodeType":"YulLiteral","src":"18459:4:61","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"18450:3:61","nodeType":"YulIdentifier","src":"18450:3:61"},"nativeSrc":"18450:14:61","nodeType":"YulFunctionCall","src":"18450:14:61"}],"functionName":{"name":"add","nativeSrc":"18430:3:61","nodeType":"YulIdentifier","src":"18430:3:61"},"nativeSrc":"18430:35:61","nodeType":"YulFunctionCall","src":"18430:35:61"}],"functionName":{"name":"mload","nativeSrc":"18424:5:61","nodeType":"YulIdentifier","src":"18424:5:61"},"nativeSrc":"18424:42:61","nodeType":"YulFunctionCall","src":"18424:42:61"},"variableNames":[{"name":"res","nativeSrc":"18417:3:61","nodeType":"YulIdentifier","src":"18417:3:61"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12208,"isOffset":false,"isSlot":false,"src":"18438:3:61","valueSize":1},{"declaration":12210,"isOffset":false,"isSlot":false,"src":"18454:3:61","valueSize":1},{"declaration":12213,"isOffset":false,"isSlot":false,"src":"18417:3:61","valueSize":1}],"id":12215,"nodeType":"InlineAssembly","src":"18394:82:61"}]},"documentation":{"id":12205,"nodeType":"StructuredDocumentation","src":"18086:191:61","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12217,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeMemoryAccess","nameLocation":"18291:18:61","nodeType":"FunctionDefinition","parameters":{"id":12211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12208,"mutability":"mutable","name":"arr","nameLocation":"18325:3:61","nodeType":"VariableDeclaration","scope":12217,"src":"18310:18:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":12206,"name":"bytes","nodeType":"ElementaryTypeName","src":"18310:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":12207,"nodeType":"ArrayTypeName","src":"18310:7:61","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"},{"constant":false,"id":12210,"mutability":"mutable","name":"pos","nameLocation":"18338:3:61","nodeType":"VariableDeclaration","scope":12217,"src":"18330:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12209,"name":"uint256","nodeType":"ElementaryTypeName","src":"18330:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18309:33:61"},"returnParameters":{"id":12214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12213,"mutability":"mutable","name":"res","nameLocation":"18379:3:61","nodeType":"VariableDeclaration","scope":12217,"src":"18366:16:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":12212,"name":"bytes","nodeType":"ElementaryTypeName","src":"18366:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"18365:18:61"},"scope":12286,"src":"18282:200:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12229,"nodeType":"Block","src":"18788:98:61","statements":[{"AST":{"nativeSrc":"18807:73:61","nodeType":"YulBlock","src":"18807:73:61","statements":[{"nativeSrc":"18821:49:61","nodeType":"YulAssignment","src":"18821:49:61","value":{"arguments":[{"arguments":[{"arguments":[{"name":"arr","nativeSrc":"18842:3:61","nodeType":"YulIdentifier","src":"18842:3:61"},{"kind":"number","nativeSrc":"18847:4:61","nodeType":"YulLiteral","src":"18847:4:61","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18838:3:61","nodeType":"YulIdentifier","src":"18838:3:61"},"nativeSrc":"18838:14:61","nodeType":"YulFunctionCall","src":"18838:14:61"},{"arguments":[{"name":"pos","nativeSrc":"18858:3:61","nodeType":"YulIdentifier","src":"18858:3:61"},{"kind":"number","nativeSrc":"18863:4:61","nodeType":"YulLiteral","src":"18863:4:61","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"18854:3:61","nodeType":"YulIdentifier","src":"18854:3:61"},"nativeSrc":"18854:14:61","nodeType":"YulFunctionCall","src":"18854:14:61"}],"functionName":{"name":"add","nativeSrc":"18834:3:61","nodeType":"YulIdentifier","src":"18834:3:61"},"nativeSrc":"18834:35:61","nodeType":"YulFunctionCall","src":"18834:35:61"}],"functionName":{"name":"mload","nativeSrc":"18828:5:61","nodeType":"YulIdentifier","src":"18828:5:61"},"nativeSrc":"18828:42:61","nodeType":"YulFunctionCall","src":"18828:42:61"},"variableNames":[{"name":"res","nativeSrc":"18821:3:61","nodeType":"YulIdentifier","src":"18821:3:61"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12221,"isOffset":false,"isSlot":false,"src":"18842:3:61","valueSize":1},{"declaration":12223,"isOffset":false,"isSlot":false,"src":"18858:3:61","valueSize":1},{"declaration":12226,"isOffset":false,"isSlot":false,"src":"18821:3:61","valueSize":1}],"id":12228,"nodeType":"InlineAssembly","src":"18798:82:61"}]},"documentation":{"id":12218,"nodeType":"StructuredDocumentation","src":"18488:191:61","text":" @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."},"id":12230,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeMemoryAccess","nameLocation":"18693:18:61","nodeType":"FunctionDefinition","parameters":{"id":12224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12221,"mutability":"mutable","name":"arr","nameLocation":"18728:3:61","nodeType":"VariableDeclaration","scope":12230,"src":"18712:19:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":12219,"name":"string","nodeType":"ElementaryTypeName","src":"18712:6:61","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":12220,"nodeType":"ArrayTypeName","src":"18712:8:61","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":12223,"mutability":"mutable","name":"pos","nameLocation":"18741:3:61","nodeType":"VariableDeclaration","scope":12230,"src":"18733:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12222,"name":"uint256","nodeType":"ElementaryTypeName","src":"18733:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18711:34:61"},"returnParameters":{"id":12227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12226,"mutability":"mutable","name":"res","nameLocation":"18783:3:61","nodeType":"VariableDeclaration","scope":12230,"src":"18769:17:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12225,"name":"string","nodeType":"ElementaryTypeName","src":"18769:6:61","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"18768:19:61"},"scope":12286,"src":"18684:202:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12240,"nodeType":"Block","src":"19202:88:61","statements":[{"AST":{"nativeSrc":"19237:47:61","nodeType":"YulBlock","src":"19237:47:61","statements":[{"expression":{"arguments":[{"name":"array.slot","nativeSrc":"19258:10:61","nodeType":"YulIdentifier","src":"19258:10:61"},{"name":"len","nativeSrc":"19270:3:61","nodeType":"YulIdentifier","src":"19270:3:61"}],"functionName":{"name":"sstore","nativeSrc":"19251:6:61","nodeType":"YulIdentifier","src":"19251:6:61"},"nativeSrc":"19251:23:61","nodeType":"YulFunctionCall","src":"19251:23:61"},"nativeSrc":"19251:23:61","nodeType":"YulExpressionStatement","src":"19251:23:61"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12234,"isOffset":false,"isSlot":true,"src":"19258:10:61","suffix":"slot","valueSize":1},{"declaration":12236,"isOffset":false,"isSlot":false,"src":"19270:3:61","valueSize":1}],"flags":["memory-safe"],"id":12239,"nodeType":"InlineAssembly","src":"19212:72:61"}]},"documentation":{"id":12231,"nodeType":"StructuredDocumentation","src":"18892:233:61","text":" @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."},"id":12241,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeSetLength","nameLocation":"19139:15:61","nodeType":"FunctionDefinition","parameters":{"id":12237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12234,"mutability":"mutable","name":"array","nameLocation":"19173:5:61","nodeType":"VariableDeclaration","scope":12241,"src":"19155:23:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":12232,"name":"address","nodeType":"ElementaryTypeName","src":"19155:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12233,"nodeType":"ArrayTypeName","src":"19155:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":12236,"mutability":"mutable","name":"len","nameLocation":"19188:3:61","nodeType":"VariableDeclaration","scope":12241,"src":"19180:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12235,"name":"uint256","nodeType":"ElementaryTypeName","src":"19180:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19154:38:61"},"returnParameters":{"id":12238,"nodeType":"ParameterList","parameters":[],"src":"19202:0:61"},"scope":12286,"src":"19130:160:61","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12251,"nodeType":"Block","src":"19606:88:61","statements":[{"AST":{"nativeSrc":"19641:47:61","nodeType":"YulBlock","src":"19641:47:61","statements":[{"expression":{"arguments":[{"name":"array.slot","nativeSrc":"19662:10:61","nodeType":"YulIdentifier","src":"19662:10:61"},{"name":"len","nativeSrc":"19674:3:61","nodeType":"YulIdentifier","src":"19674:3:61"}],"functionName":{"name":"sstore","nativeSrc":"19655:6:61","nodeType":"YulIdentifier","src":"19655:6:61"},"nativeSrc":"19655:23:61","nodeType":"YulFunctionCall","src":"19655:23:61"},"nativeSrc":"19655:23:61","nodeType":"YulExpressionStatement","src":"19655:23:61"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12245,"isOffset":false,"isSlot":true,"src":"19662:10:61","suffix":"slot","valueSize":1},{"declaration":12247,"isOffset":false,"isSlot":false,"src":"19674:3:61","valueSize":1}],"flags":["memory-safe"],"id":12250,"nodeType":"InlineAssembly","src":"19616:72:61"}]},"documentation":{"id":12242,"nodeType":"StructuredDocumentation","src":"19296:233:61","text":" @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."},"id":12252,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeSetLength","nameLocation":"19543:15:61","nodeType":"FunctionDefinition","parameters":{"id":12248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12245,"mutability":"mutable","name":"array","nameLocation":"19577:5:61","nodeType":"VariableDeclaration","scope":12252,"src":"19559:23:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":12243,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19559:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":12244,"nodeType":"ArrayTypeName","src":"19559:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":12247,"mutability":"mutable","name":"len","nameLocation":"19592:3:61","nodeType":"VariableDeclaration","scope":12252,"src":"19584:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12246,"name":"uint256","nodeType":"ElementaryTypeName","src":"19584:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19558:38:61"},"returnParameters":{"id":12249,"nodeType":"ParameterList","parameters":[],"src":"19606:0:61"},"scope":12286,"src":"19534:160:61","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12262,"nodeType":"Block","src":"20010:88:61","statements":[{"AST":{"nativeSrc":"20045:47:61","nodeType":"YulBlock","src":"20045:47:61","statements":[{"expression":{"arguments":[{"name":"array.slot","nativeSrc":"20066:10:61","nodeType":"YulIdentifier","src":"20066:10:61"},{"name":"len","nativeSrc":"20078:3:61","nodeType":"YulIdentifier","src":"20078:3:61"}],"functionName":{"name":"sstore","nativeSrc":"20059:6:61","nodeType":"YulIdentifier","src":"20059:6:61"},"nativeSrc":"20059:23:61","nodeType":"YulFunctionCall","src":"20059:23:61"},"nativeSrc":"20059:23:61","nodeType":"YulExpressionStatement","src":"20059:23:61"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12256,"isOffset":false,"isSlot":true,"src":"20066:10:61","suffix":"slot","valueSize":1},{"declaration":12258,"isOffset":false,"isSlot":false,"src":"20078:3:61","valueSize":1}],"flags":["memory-safe"],"id":12261,"nodeType":"InlineAssembly","src":"20020:72:61"}]},"documentation":{"id":12253,"nodeType":"StructuredDocumentation","src":"19700:233:61","text":" @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."},"id":12263,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeSetLength","nameLocation":"19947:15:61","nodeType":"FunctionDefinition","parameters":{"id":12259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12256,"mutability":"mutable","name":"array","nameLocation":"19981:5:61","nodeType":"VariableDeclaration","scope":12263,"src":"19963:23:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12254,"name":"uint256","nodeType":"ElementaryTypeName","src":"19963:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12255,"nodeType":"ArrayTypeName","src":"19963:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12258,"mutability":"mutable","name":"len","nameLocation":"19996:3:61","nodeType":"VariableDeclaration","scope":12263,"src":"19988:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12257,"name":"uint256","nodeType":"ElementaryTypeName","src":"19988:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19962:38:61"},"returnParameters":{"id":12260,"nodeType":"ParameterList","parameters":[],"src":"20010:0:61"},"scope":12286,"src":"19938:160:61","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12273,"nodeType":"Block","src":"20412:88:61","statements":[{"AST":{"nativeSrc":"20447:47:61","nodeType":"YulBlock","src":"20447:47:61","statements":[{"expression":{"arguments":[{"name":"array.slot","nativeSrc":"20468:10:61","nodeType":"YulIdentifier","src":"20468:10:61"},{"name":"len","nativeSrc":"20480:3:61","nodeType":"YulIdentifier","src":"20480:3:61"}],"functionName":{"name":"sstore","nativeSrc":"20461:6:61","nodeType":"YulIdentifier","src":"20461:6:61"},"nativeSrc":"20461:23:61","nodeType":"YulFunctionCall","src":"20461:23:61"},"nativeSrc":"20461:23:61","nodeType":"YulExpressionStatement","src":"20461:23:61"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12267,"isOffset":false,"isSlot":true,"src":"20468:10:61","suffix":"slot","valueSize":1},{"declaration":12269,"isOffset":false,"isSlot":false,"src":"20480:3:61","valueSize":1}],"flags":["memory-safe"],"id":12272,"nodeType":"InlineAssembly","src":"20422:72:61"}]},"documentation":{"id":12264,"nodeType":"StructuredDocumentation","src":"20104:233:61","text":" @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."},"id":12274,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeSetLength","nameLocation":"20351:15:61","nodeType":"FunctionDefinition","parameters":{"id":12270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12267,"mutability":"mutable","name":"array","nameLocation":"20383:5:61","nodeType":"VariableDeclaration","scope":12274,"src":"20367:21:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":12265,"name":"bytes","nodeType":"ElementaryTypeName","src":"20367:5:61","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":12266,"nodeType":"ArrayTypeName","src":"20367:7:61","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"},{"constant":false,"id":12269,"mutability":"mutable","name":"len","nameLocation":"20398:3:61","nodeType":"VariableDeclaration","scope":12274,"src":"20390:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12268,"name":"uint256","nodeType":"ElementaryTypeName","src":"20390:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20366:36:61"},"returnParameters":{"id":12271,"nodeType":"ParameterList","parameters":[],"src":"20412:0:61"},"scope":12286,"src":"20342:158:61","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12284,"nodeType":"Block","src":"20815:88:61","statements":[{"AST":{"nativeSrc":"20850:47:61","nodeType":"YulBlock","src":"20850:47:61","statements":[{"expression":{"arguments":[{"name":"array.slot","nativeSrc":"20871:10:61","nodeType":"YulIdentifier","src":"20871:10:61"},{"name":"len","nativeSrc":"20883:3:61","nodeType":"YulIdentifier","src":"20883:3:61"}],"functionName":{"name":"sstore","nativeSrc":"20864:6:61","nodeType":"YulIdentifier","src":"20864:6:61"},"nativeSrc":"20864:23:61","nodeType":"YulFunctionCall","src":"20864:23:61"},"nativeSrc":"20864:23:61","nodeType":"YulExpressionStatement","src":"20864:23:61"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12278,"isOffset":false,"isSlot":true,"src":"20871:10:61","suffix":"slot","valueSize":1},{"declaration":12280,"isOffset":false,"isSlot":false,"src":"20883:3:61","valueSize":1}],"flags":["memory-safe"],"id":12283,"nodeType":"InlineAssembly","src":"20825:72:61"}]},"documentation":{"id":12275,"nodeType":"StructuredDocumentation","src":"20506:233:61","text":" @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."},"id":12285,"implemented":true,"kind":"function","modifiers":[],"name":"unsafeSetLength","nameLocation":"20753:15:61","nodeType":"FunctionDefinition","parameters":{"id":12281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12278,"mutability":"mutable","name":"array","nameLocation":"20786:5:61","nodeType":"VariableDeclaration","scope":12285,"src":"20769:22:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":12276,"name":"string","nodeType":"ElementaryTypeName","src":"20769:6:61","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":12277,"nodeType":"ArrayTypeName","src":"20769:8:61","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":12280,"mutability":"mutable","name":"len","nameLocation":"20801:3:61","nodeType":"VariableDeclaration","scope":12285,"src":"20793:11:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12279,"name":"uint256","nodeType":"ElementaryTypeName","src":"20793:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20768:37:61"},"returnParameters":{"id":12282,"nodeType":"ParameterList","parameters":[],"src":"20815:0:61"},"scope":12286,"src":"20744:159:61","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":12287,"src":"459:20446:61","usedErrors":[],"usedEvents":[]}],"src":"183:20723:61"},"id":61},"@openzeppelin/contracts/utils/Comparators.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Comparators.sol","exportedSymbols":{"Comparators":[12318]},"id":12319,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12288,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"105:24:62"},{"abstract":false,"baseContracts":[],"canonicalName":"Comparators","contractDependencies":[],"contractKind":"library","documentation":{"id":12289,"nodeType":"StructuredDocumentation","src":"131:92:62","text":" @dev Provides a set of functions to compare values.\n _Available since v5.1._"},"fullyImplemented":true,"id":12318,"linearizedBaseContracts":[12318],"name":"Comparators","nameLocation":"232:11:62","nodeType":"ContractDefinition","nodes":[{"body":{"id":12302,"nodeType":"Block","src":"313:29:62","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12298,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12291,"src":"330:1:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":12299,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12293,"src":"334:1:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"330:5:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12297,"id":12301,"nodeType":"Return","src":"323:12:62"}]},"id":12303,"implemented":true,"kind":"function","modifiers":[],"name":"lt","nameLocation":"259:2:62","nodeType":"FunctionDefinition","parameters":{"id":12294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12291,"mutability":"mutable","name":"a","nameLocation":"270:1:62","nodeType":"VariableDeclaration","scope":12303,"src":"262:9:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12290,"name":"uint256","nodeType":"ElementaryTypeName","src":"262:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12293,"mutability":"mutable","name":"b","nameLocation":"281:1:62","nodeType":"VariableDeclaration","scope":12303,"src":"273:9:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12292,"name":"uint256","nodeType":"ElementaryTypeName","src":"273:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"261:22:62"},"returnParameters":{"id":12297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12296,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12303,"src":"307:4:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12295,"name":"bool","nodeType":"ElementaryTypeName","src":"307:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"306:6:62"},"scope":12318,"src":"250:92:62","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12316,"nodeType":"Block","src":"411:29:62","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12312,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12305,"src":"428:1:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":12313,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12307,"src":"432:1:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"428:5:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12311,"id":12315,"nodeType":"Return","src":"421:12:62"}]},"id":12317,"implemented":true,"kind":"function","modifiers":[],"name":"gt","nameLocation":"357:2:62","nodeType":"FunctionDefinition","parameters":{"id":12308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12305,"mutability":"mutable","name":"a","nameLocation":"368:1:62","nodeType":"VariableDeclaration","scope":12317,"src":"360:9:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12304,"name":"uint256","nodeType":"ElementaryTypeName","src":"360:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12307,"mutability":"mutable","name":"b","nameLocation":"379:1:62","nodeType":"VariableDeclaration","scope":12317,"src":"371:9:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12306,"name":"uint256","nodeType":"ElementaryTypeName","src":"371:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"359:22:62"},"returnParameters":{"id":12311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12310,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12317,"src":"405:4:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12309,"name":"bool","nodeType":"ElementaryTypeName","src":"405:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"404:6:62"},"scope":12318,"src":"348:92:62","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":12319,"src":"224:218:62","usedErrors":[],"usedEvents":[]}],"src":"105:338:62"},"id":62},"@openzeppelin/contracts/utils/Context.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","exportedSymbols":{"Context":[12348]},"id":12349,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12320,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:63"},{"abstract":true,"baseContracts":[],"canonicalName":"Context","contractDependencies":[],"contractKind":"contract","documentation":{"id":12321,"nodeType":"StructuredDocumentation","src":"127:496:63","text":" @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."},"fullyImplemented":true,"id":12348,"linearizedBaseContracts":[12348],"name":"Context","nameLocation":"642:7:63","nodeType":"ContractDefinition","nodes":[{"body":{"id":12329,"nodeType":"Block","src":"718:34:63","statements":[{"expression":{"expression":{"id":12326,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"735:3:63","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"739:6:63","memberName":"sender","nodeType":"MemberAccess","src":"735:10:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":12325,"id":12328,"nodeType":"Return","src":"728:17:63"}]},"id":12330,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"665:10:63","nodeType":"FunctionDefinition","parameters":{"id":12322,"nodeType":"ParameterList","parameters":[],"src":"675:2:63"},"returnParameters":{"id":12325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12324,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12330,"src":"709:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12323,"name":"address","nodeType":"ElementaryTypeName","src":"709:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"708:9:63"},"scope":12348,"src":"656:96:63","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":12338,"nodeType":"Block","src":"825:32:63","statements":[{"expression":{"expression":{"id":12335,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"842:3:63","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"846:4:63","memberName":"data","nodeType":"MemberAccess","src":"842:8:63","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":12334,"id":12337,"nodeType":"Return","src":"835:15:63"}]},"id":12339,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"767:8:63","nodeType":"FunctionDefinition","parameters":{"id":12331,"nodeType":"ParameterList","parameters":[],"src":"775:2:63"},"returnParameters":{"id":12334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12333,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12339,"src":"809:14:63","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":12332,"name":"bytes","nodeType":"ElementaryTypeName","src":"809:5:63","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"808:16:63"},"scope":12348,"src":"758:99:63","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":12346,"nodeType":"Block","src":"935:25:63","statements":[{"expression":{"hexValue":"30","id":12344,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"952:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":12343,"id":12345,"nodeType":"Return","src":"945:8:63"}]},"id":12347,"implemented":true,"kind":"function","modifiers":[],"name":"_contextSuffixLength","nameLocation":"872:20:63","nodeType":"FunctionDefinition","parameters":{"id":12340,"nodeType":"ParameterList","parameters":[],"src":"892:2:63"},"returnParameters":{"id":12343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12342,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12347,"src":"926:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12341,"name":"uint256","nodeType":"ElementaryTypeName","src":"926:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"925:9:63"},"scope":12348,"src":"863:97:63","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":12349,"src":"624:338:63","usedErrors":[],"usedEvents":[]}],"src":"101:862:63"},"id":63},"@openzeppelin/contracts/utils/Errors.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Errors.sol","exportedSymbols":{"Errors":[12370]},"id":12371,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12350,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"100:24:64"},{"abstract":false,"baseContracts":[],"canonicalName":"Errors","contractDependencies":[],"contractKind":"library","documentation":{"id":12351,"nodeType":"StructuredDocumentation","src":"126:284:64","text":" @dev Collection of common custom errors used in multiple contracts\n IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n It is recommended to avoid relying on the error API for critical functionality.\n _Available since v5.1._"},"fullyImplemented":true,"id":12370,"linearizedBaseContracts":[12370],"name":"Errors","nameLocation":"419:6:64","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":12352,"nodeType":"StructuredDocumentation","src":"432:94:64","text":" @dev The ETH balance of the account is not enough to perform the operation."},"errorSelector":"cf479181","id":12358,"name":"InsufficientBalance","nameLocation":"537:19:64","nodeType":"ErrorDefinition","parameters":{"id":12357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12354,"mutability":"mutable","name":"balance","nameLocation":"565:7:64","nodeType":"VariableDeclaration","scope":12358,"src":"557:15:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12353,"name":"uint256","nodeType":"ElementaryTypeName","src":"557:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12356,"mutability":"mutable","name":"needed","nameLocation":"582:6:64","nodeType":"VariableDeclaration","scope":12358,"src":"574:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12355,"name":"uint256","nodeType":"ElementaryTypeName","src":"574:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"556:33:64"},"src":"531:59:64"},{"documentation":{"id":12359,"nodeType":"StructuredDocumentation","src":"596:89:64","text":" @dev A call to an address target failed. The target may have reverted."},"errorSelector":"d6bda275","id":12361,"name":"FailedCall","nameLocation":"696:10:64","nodeType":"ErrorDefinition","parameters":{"id":12360,"nodeType":"ParameterList","parameters":[],"src":"706:2:64"},"src":"690:19:64"},{"documentation":{"id":12362,"nodeType":"StructuredDocumentation","src":"715:46:64","text":" @dev The deployment failed."},"errorSelector":"b06ebf3d","id":12364,"name":"FailedDeployment","nameLocation":"772:16:64","nodeType":"ErrorDefinition","parameters":{"id":12363,"nodeType":"ParameterList","parameters":[],"src":"788:2:64"},"src":"766:25:64"},{"documentation":{"id":12365,"nodeType":"StructuredDocumentation","src":"797:58:64","text":" @dev A necessary precompile is missing."},"errorSelector":"42b01bce","id":12369,"name":"MissingPrecompile","nameLocation":"866:17:64","nodeType":"ErrorDefinition","parameters":{"id":12368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12367,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12369,"src":"884:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12366,"name":"address","nodeType":"ElementaryTypeName","src":"884:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"883:9:64"},"src":"860:33:64"}],"scope":12371,"src":"411:484:64","usedErrors":[12358,12361,12364,12369],"usedEvents":[]}],"src":"100:796:64"},"id":64},"@openzeppelin/contracts/utils/Panic.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Panic.sol","exportedSymbols":{"Panic":[12422]},"id":12423,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12372,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"99:24:65"},{"abstract":false,"baseContracts":[],"canonicalName":"Panic","contractDependencies":[],"contractKind":"library","documentation":{"id":12373,"nodeType":"StructuredDocumentation","src":"125:489:65","text":" @dev Helper library for emitting standardized panic codes.\n ```solidity\n contract Example {\n using Panic for uint256;\n // Use any of the declared internal constants\n function foo() { Panic.GENERIC.panic(); }\n // Alternatively\n function foo() { Panic.panic(Panic.GENERIC); }\n }\n ```\n Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].\n _Available since v5.1._"},"fullyImplemented":true,"id":12422,"linearizedBaseContracts":[12422],"name":"Panic","nameLocation":"665:5:65","nodeType":"ContractDefinition","nodes":[{"constant":true,"documentation":{"id":12374,"nodeType":"StructuredDocumentation","src":"677:36:65","text":"@dev generic / unspecified error"},"id":12377,"mutability":"constant","name":"GENERIC","nameLocation":"744:7:65","nodeType":"VariableDeclaration","scope":12422,"src":"718:40:65","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12375,"name":"uint256","nodeType":"ElementaryTypeName","src":"718:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783030","id":12376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"754:4:65","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0x00"},"visibility":"internal"},{"constant":true,"documentation":{"id":12378,"nodeType":"StructuredDocumentation","src":"764:37:65","text":"@dev used by the assert() builtin"},"id":12381,"mutability":"constant","name":"ASSERT","nameLocation":"832:6:65","nodeType":"VariableDeclaration","scope":12422,"src":"806:39:65","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12379,"name":"uint256","nodeType":"ElementaryTypeName","src":"806:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783031","id":12380,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"841:4:65","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x01"},"visibility":"internal"},{"constant":true,"documentation":{"id":12382,"nodeType":"StructuredDocumentation","src":"851:41:65","text":"@dev arithmetic underflow or overflow"},"id":12385,"mutability":"constant","name":"UNDER_OVERFLOW","nameLocation":"923:14:65","nodeType":"VariableDeclaration","scope":12422,"src":"897:47:65","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12383,"name":"uint256","nodeType":"ElementaryTypeName","src":"897:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783131","id":12384,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"940:4:65","typeDescriptions":{"typeIdentifier":"t_rational_17_by_1","typeString":"int_const 17"},"value":"0x11"},"visibility":"internal"},{"constant":true,"documentation":{"id":12386,"nodeType":"StructuredDocumentation","src":"950:35:65","text":"@dev division or modulo by zero"},"id":12389,"mutability":"constant","name":"DIVISION_BY_ZERO","nameLocation":"1016:16:65","nodeType":"VariableDeclaration","scope":12422,"src":"990:49:65","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12387,"name":"uint256","nodeType":"ElementaryTypeName","src":"990:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783132","id":12388,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1035:4:65","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"0x12"},"visibility":"internal"},{"constant":true,"documentation":{"id":12390,"nodeType":"StructuredDocumentation","src":"1045:30:65","text":"@dev enum conversion error"},"id":12393,"mutability":"constant","name":"ENUM_CONVERSION_ERROR","nameLocation":"1106:21:65","nodeType":"VariableDeclaration","scope":12422,"src":"1080:54:65","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12391,"name":"uint256","nodeType":"ElementaryTypeName","src":"1080:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783231","id":12392,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1130:4:65","typeDescriptions":{"typeIdentifier":"t_rational_33_by_1","typeString":"int_const 33"},"value":"0x21"},"visibility":"internal"},{"constant":true,"documentation":{"id":12394,"nodeType":"StructuredDocumentation","src":"1140:36:65","text":"@dev invalid encoding in storage"},"id":12397,"mutability":"constant","name":"STORAGE_ENCODING_ERROR","nameLocation":"1207:22:65","nodeType":"VariableDeclaration","scope":12422,"src":"1181:55:65","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12395,"name":"uint256","nodeType":"ElementaryTypeName","src":"1181:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783232","id":12396,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1232:4:65","typeDescriptions":{"typeIdentifier":"t_rational_34_by_1","typeString":"int_const 34"},"value":"0x22"},"visibility":"internal"},{"constant":true,"documentation":{"id":12398,"nodeType":"StructuredDocumentation","src":"1242:24:65","text":"@dev empty array pop"},"id":12401,"mutability":"constant","name":"EMPTY_ARRAY_POP","nameLocation":"1297:15:65","nodeType":"VariableDeclaration","scope":12422,"src":"1271:48:65","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12399,"name":"uint256","nodeType":"ElementaryTypeName","src":"1271:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783331","id":12400,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1315:4:65","typeDescriptions":{"typeIdentifier":"t_rational_49_by_1","typeString":"int_const 49"},"value":"0x31"},"visibility":"internal"},{"constant":true,"documentation":{"id":12402,"nodeType":"StructuredDocumentation","src":"1325:35:65","text":"@dev array out of bounds access"},"id":12405,"mutability":"constant","name":"ARRAY_OUT_OF_BOUNDS","nameLocation":"1391:19:65","nodeType":"VariableDeclaration","scope":12422,"src":"1365:52:65","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12403,"name":"uint256","nodeType":"ElementaryTypeName","src":"1365:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783332","id":12404,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1413:4:65","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"0x32"},"visibility":"internal"},{"constant":true,"documentation":{"id":12406,"nodeType":"StructuredDocumentation","src":"1423:65:65","text":"@dev resource error (too large allocation or too large array)"},"id":12409,"mutability":"constant","name":"RESOURCE_ERROR","nameLocation":"1519:14:65","nodeType":"VariableDeclaration","scope":12422,"src":"1493:47:65","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12407,"name":"uint256","nodeType":"ElementaryTypeName","src":"1493:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783431","id":12408,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1536:4:65","typeDescriptions":{"typeIdentifier":"t_rational_65_by_1","typeString":"int_const 65"},"value":"0x41"},"visibility":"internal"},{"constant":true,"documentation":{"id":12410,"nodeType":"StructuredDocumentation","src":"1546:42:65","text":"@dev calling invalid internal function"},"id":12413,"mutability":"constant","name":"INVALID_INTERNAL_FUNCTION","nameLocation":"1619:25:65","nodeType":"VariableDeclaration","scope":12422,"src":"1593:58:65","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12411,"name":"uint256","nodeType":"ElementaryTypeName","src":"1593:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783531","id":12412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1647:4:65","typeDescriptions":{"typeIdentifier":"t_rational_81_by_1","typeString":"int_const 81"},"value":"0x51"},"visibility":"internal"},{"body":{"id":12420,"nodeType":"Block","src":"1819:151:65","statements":[{"AST":{"nativeSrc":"1854:110:65","nodeType":"YulBlock","src":"1854:110:65","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1875:4:65","nodeType":"YulLiteral","src":"1875:4:65","type":"","value":"0x00"},{"kind":"number","nativeSrc":"1881:10:65","nodeType":"YulLiteral","src":"1881:10:65","type":"","value":"0x4e487b71"}],"functionName":{"name":"mstore","nativeSrc":"1868:6:65","nodeType":"YulIdentifier","src":"1868:6:65"},"nativeSrc":"1868:24:65","nodeType":"YulFunctionCall","src":"1868:24:65"},"nativeSrc":"1868:24:65","nodeType":"YulExpressionStatement","src":"1868:24:65"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1912:4:65","nodeType":"YulLiteral","src":"1912:4:65","type":"","value":"0x20"},{"name":"code","nativeSrc":"1918:4:65","nodeType":"YulIdentifier","src":"1918:4:65"}],"functionName":{"name":"mstore","nativeSrc":"1905:6:65","nodeType":"YulIdentifier","src":"1905:6:65"},"nativeSrc":"1905:18:65","nodeType":"YulFunctionCall","src":"1905:18:65"},"nativeSrc":"1905:18:65","nodeType":"YulExpressionStatement","src":"1905:18:65"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1943:4:65","nodeType":"YulLiteral","src":"1943:4:65","type":"","value":"0x1c"},{"kind":"number","nativeSrc":"1949:4:65","nodeType":"YulLiteral","src":"1949:4:65","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"1936:6:65","nodeType":"YulIdentifier","src":"1936:6:65"},"nativeSrc":"1936:18:65","nodeType":"YulFunctionCall","src":"1936:18:65"},"nativeSrc":"1936:18:65","nodeType":"YulExpressionStatement","src":"1936:18:65"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12416,"isOffset":false,"isSlot":false,"src":"1918:4:65","valueSize":1}],"flags":["memory-safe"],"id":12419,"nodeType":"InlineAssembly","src":"1829:135:65"}]},"documentation":{"id":12414,"nodeType":"StructuredDocumentation","src":"1658:113:65","text":"@dev Reverts with a panic code. Recommended to use with\n the internal constants with predefined codes."},"id":12421,"implemented":true,"kind":"function","modifiers":[],"name":"panic","nameLocation":"1785:5:65","nodeType":"FunctionDefinition","parameters":{"id":12417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12416,"mutability":"mutable","name":"code","nameLocation":"1799:4:65","nodeType":"VariableDeclaration","scope":12421,"src":"1791:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12415,"name":"uint256","nodeType":"ElementaryTypeName","src":"1791:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1790:14:65"},"returnParameters":{"id":12418,"nodeType":"ParameterList","parameters":[],"src":"1819:0:65"},"scope":12422,"src":"1776:194:65","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":12423,"src":"657:1315:65","usedErrors":[],"usedEvents":[]}],"src":"99:1874:65"},"id":65},"@openzeppelin/contracts/utils/SlotDerivation.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/SlotDerivation.sol","exportedSymbols":{"SlotDerivation":[12552]},"id":12553,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12424,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"199:24:66"},{"abstract":false,"baseContracts":[],"canonicalName":"SlotDerivation","contractDependencies":[],"contractKind":"library","documentation":{"id":12425,"nodeType":"StructuredDocumentation","src":"225:1373:66","text":" @dev Library for computing storage (and transient storage) locations from namespaces and deriving slots\n corresponding to standard patterns. The derivation method for array and mapping matches the storage layout used by\n the solidity language / compiler.\n See https://docs.soliditylang.org/en/v0.8.20/internals/layout_in_storage.html#mappings-and-dynamic-arrays[Solidity docs for mappings and dynamic arrays.].\n Example usage:\n ```solidity\n contract Example {\n // Add the library methods\n using StorageSlot for bytes32;\n using SlotDerivation for bytes32;\n // Declare a namespace\n string private constant _NAMESPACE = \"\"; // eg. OpenZeppelin.Slot\n function setValueInNamespace(uint256 key, address newValue) internal {\n _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value = newValue;\n }\n function getValueInNamespace(uint256 key) internal view returns (address) {\n return _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value;\n }\n }\n ```\n TIP: Consider using this library along with {StorageSlot}.\n NOTE: This library provides a way to manipulate storage locations in a non-standard way. Tooling for checking\n upgrade safety will ignore the slots accessed through this library.\n _Available since v5.1._"},"fullyImplemented":true,"id":12552,"linearizedBaseContracts":[12552],"name":"SlotDerivation","nameLocation":"1607:14:66","nodeType":"ContractDefinition","nodes":[{"body":{"id":12434,"nodeType":"Block","src":"1790:194:66","statements":[{"AST":{"nativeSrc":"1825:153:66","nodeType":"YulBlock","src":"1825:153:66","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1846:4:66","nodeType":"YulLiteral","src":"1846:4:66","type":"","value":"0x00"},{"arguments":[{"arguments":[{"arguments":[{"name":"namespace","nativeSrc":"1870:9:66","nodeType":"YulIdentifier","src":"1870:9:66"},{"kind":"number","nativeSrc":"1881:4:66","nodeType":"YulLiteral","src":"1881:4:66","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1866:3:66","nodeType":"YulIdentifier","src":"1866:3:66"},"nativeSrc":"1866:20:66","nodeType":"YulFunctionCall","src":"1866:20:66"},{"arguments":[{"name":"namespace","nativeSrc":"1894:9:66","nodeType":"YulIdentifier","src":"1894:9:66"}],"functionName":{"name":"mload","nativeSrc":"1888:5:66","nodeType":"YulIdentifier","src":"1888:5:66"},"nativeSrc":"1888:16:66","nodeType":"YulFunctionCall","src":"1888:16:66"}],"functionName":{"name":"keccak256","nativeSrc":"1856:9:66","nodeType":"YulIdentifier","src":"1856:9:66"},"nativeSrc":"1856:49:66","nodeType":"YulFunctionCall","src":"1856:49:66"},{"kind":"number","nativeSrc":"1907:1:66","nodeType":"YulLiteral","src":"1907:1:66","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1852:3:66","nodeType":"YulIdentifier","src":"1852:3:66"},"nativeSrc":"1852:57:66","nodeType":"YulFunctionCall","src":"1852:57:66"}],"functionName":{"name":"mstore","nativeSrc":"1839:6:66","nodeType":"YulIdentifier","src":"1839:6:66"},"nativeSrc":"1839:71:66","nodeType":"YulFunctionCall","src":"1839:71:66"},"nativeSrc":"1839:71:66","nodeType":"YulExpressionStatement","src":"1839:71:66"},{"nativeSrc":"1923:45:66","nodeType":"YulAssignment","src":"1923:45:66","value":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"1945:4:66","nodeType":"YulLiteral","src":"1945:4:66","type":"","value":"0x00"},{"kind":"number","nativeSrc":"1951:4:66","nodeType":"YulLiteral","src":"1951:4:66","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nativeSrc":"1935:9:66","nodeType":"YulIdentifier","src":"1935:9:66"},"nativeSrc":"1935:21:66","nodeType":"YulFunctionCall","src":"1935:21:66"},{"arguments":[{"kind":"number","nativeSrc":"1962:4:66","nodeType":"YulLiteral","src":"1962:4:66","type":"","value":"0xff"}],"functionName":{"name":"not","nativeSrc":"1958:3:66","nodeType":"YulIdentifier","src":"1958:3:66"},"nativeSrc":"1958:9:66","nodeType":"YulFunctionCall","src":"1958:9:66"}],"functionName":{"name":"and","nativeSrc":"1931:3:66","nodeType":"YulIdentifier","src":"1931:3:66"},"nativeSrc":"1931:37:66","nodeType":"YulFunctionCall","src":"1931:37:66"},"variableNames":[{"name":"slot","nativeSrc":"1923:4:66","nodeType":"YulIdentifier","src":"1923:4:66"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12428,"isOffset":false,"isSlot":false,"src":"1870:9:66","valueSize":1},{"declaration":12428,"isOffset":false,"isSlot":false,"src":"1894:9:66","valueSize":1},{"declaration":12431,"isOffset":false,"isSlot":false,"src":"1923:4:66","valueSize":1}],"flags":["memory-safe"],"id":12433,"nodeType":"InlineAssembly","src":"1800:178:66"}]},"documentation":{"id":12426,"nodeType":"StructuredDocumentation","src":"1628:74:66","text":" @dev Derive an ERC-7201 slot from a string (namespace)."},"id":12435,"implemented":true,"kind":"function","modifiers":[],"name":"erc7201Slot","nameLocation":"1716:11:66","nodeType":"FunctionDefinition","parameters":{"id":12429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12428,"mutability":"mutable","name":"namespace","nameLocation":"1742:9:66","nodeType":"VariableDeclaration","scope":12435,"src":"1728:23:66","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12427,"name":"string","nodeType":"ElementaryTypeName","src":"1728:6:66","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1727:25:66"},"returnParameters":{"id":12432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12431,"mutability":"mutable","name":"slot","nameLocation":"1784:4:66","nodeType":"VariableDeclaration","scope":12435,"src":"1776:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12430,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1776:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1775:14:66"},"scope":12552,"src":"1707:277:66","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12456,"nodeType":"Block","src":"2176:86:66","statements":[{"id":12455,"nodeType":"UncheckedBlock","src":"2186:70:66","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":12449,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12438,"src":"2233:4:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":12448,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2225:7:66","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12447,"name":"uint256","nodeType":"ElementaryTypeName","src":"2225:7:66","typeDescriptions":{}}},"id":12450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2225:13:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":12451,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12440,"src":"2241:3:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2225:19:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12446,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2217:7:66","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":12445,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2217:7:66","typeDescriptions":{}}},"id":12453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2217:28:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":12444,"id":12454,"nodeType":"Return","src":"2210:35:66"}]}]},"documentation":{"id":12436,"nodeType":"StructuredDocumentation","src":"1990:99:66","text":" @dev Add an offset to a slot to get the n-th element of a structure or an array."},"id":12457,"implemented":true,"kind":"function","modifiers":[],"name":"offset","nameLocation":"2103:6:66","nodeType":"FunctionDefinition","parameters":{"id":12441,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12438,"mutability":"mutable","name":"slot","nameLocation":"2118:4:66","nodeType":"VariableDeclaration","scope":12457,"src":"2110:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12437,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2110:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12440,"mutability":"mutable","name":"pos","nameLocation":"2132:3:66","nodeType":"VariableDeclaration","scope":12457,"src":"2124:11:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12439,"name":"uint256","nodeType":"ElementaryTypeName","src":"2124:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2109:27:66"},"returnParameters":{"id":12444,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12443,"mutability":"mutable","name":"result","nameLocation":"2168:6:66","nodeType":"VariableDeclaration","scope":12457,"src":"2160:14:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12442,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2160:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2159:16:66"},"scope":12552,"src":"2094:168:66","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12466,"nodeType":"Block","src":"2465:127:66","statements":[{"AST":{"nativeSrc":"2500:86:66","nodeType":"YulBlock","src":"2500:86:66","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2521:4:66","nodeType":"YulLiteral","src":"2521:4:66","type":"","value":"0x00"},{"name":"slot","nativeSrc":"2527:4:66","nodeType":"YulIdentifier","src":"2527:4:66"}],"functionName":{"name":"mstore","nativeSrc":"2514:6:66","nodeType":"YulIdentifier","src":"2514:6:66"},"nativeSrc":"2514:18:66","nodeType":"YulFunctionCall","src":"2514:18:66"},"nativeSrc":"2514:18:66","nodeType":"YulExpressionStatement","src":"2514:18:66"},{"nativeSrc":"2545:31:66","nodeType":"YulAssignment","src":"2545:31:66","value":{"arguments":[{"kind":"number","nativeSrc":"2565:4:66","nodeType":"YulLiteral","src":"2565:4:66","type":"","value":"0x00"},{"kind":"number","nativeSrc":"2571:4:66","nodeType":"YulLiteral","src":"2571:4:66","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nativeSrc":"2555:9:66","nodeType":"YulIdentifier","src":"2555:9:66"},"nativeSrc":"2555:21:66","nodeType":"YulFunctionCall","src":"2555:21:66"},"variableNames":[{"name":"result","nativeSrc":"2545:6:66","nodeType":"YulIdentifier","src":"2545:6:66"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12463,"isOffset":false,"isSlot":false,"src":"2545:6:66","valueSize":1},{"declaration":12460,"isOffset":false,"isSlot":false,"src":"2527:4:66","valueSize":1}],"flags":["memory-safe"],"id":12465,"nodeType":"InlineAssembly","src":"2475:111:66"}]},"documentation":{"id":12458,"nodeType":"StructuredDocumentation","src":"2268:118:66","text":" @dev Derive the location of the first element in an array from the slot where the length is stored."},"id":12467,"implemented":true,"kind":"function","modifiers":[],"name":"deriveArray","nameLocation":"2400:11:66","nodeType":"FunctionDefinition","parameters":{"id":12461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12460,"mutability":"mutable","name":"slot","nameLocation":"2420:4:66","nodeType":"VariableDeclaration","scope":12467,"src":"2412:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12459,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2412:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2411:14:66"},"returnParameters":{"id":12464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12463,"mutability":"mutable","name":"result","nameLocation":"2457:6:66","nodeType":"VariableDeclaration","scope":12467,"src":"2449:14:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12462,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2449:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2448:16:66"},"scope":12552,"src":"2391:201:66","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12478,"nodeType":"Block","src":"2770:179:66","statements":[{"AST":{"nativeSrc":"2805:138:66","nodeType":"YulBlock","src":"2805:138:66","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2826:4:66","nodeType":"YulLiteral","src":"2826:4:66","type":"","value":"0x00"},{"arguments":[{"name":"key","nativeSrc":"2836:3:66","nodeType":"YulIdentifier","src":"2836:3:66"},{"arguments":[{"kind":"number","nativeSrc":"2845:2:66","nodeType":"YulLiteral","src":"2845:2:66","type":"","value":"96"},{"arguments":[{"kind":"number","nativeSrc":"2853:1:66","nodeType":"YulLiteral","src":"2853:1:66","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"2849:3:66","nodeType":"YulIdentifier","src":"2849:3:66"},"nativeSrc":"2849:6:66","nodeType":"YulFunctionCall","src":"2849:6:66"}],"functionName":{"name":"shr","nativeSrc":"2841:3:66","nodeType":"YulIdentifier","src":"2841:3:66"},"nativeSrc":"2841:15:66","nodeType":"YulFunctionCall","src":"2841:15:66"}],"functionName":{"name":"and","nativeSrc":"2832:3:66","nodeType":"YulIdentifier","src":"2832:3:66"},"nativeSrc":"2832:25:66","nodeType":"YulFunctionCall","src":"2832:25:66"}],"functionName":{"name":"mstore","nativeSrc":"2819:6:66","nodeType":"YulIdentifier","src":"2819:6:66"},"nativeSrc":"2819:39:66","nodeType":"YulFunctionCall","src":"2819:39:66"},"nativeSrc":"2819:39:66","nodeType":"YulExpressionStatement","src":"2819:39:66"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"2878:4:66","nodeType":"YulLiteral","src":"2878:4:66","type":"","value":"0x20"},{"name":"slot","nativeSrc":"2884:4:66","nodeType":"YulIdentifier","src":"2884:4:66"}],"functionName":{"name":"mstore","nativeSrc":"2871:6:66","nodeType":"YulIdentifier","src":"2871:6:66"},"nativeSrc":"2871:18:66","nodeType":"YulFunctionCall","src":"2871:18:66"},"nativeSrc":"2871:18:66","nodeType":"YulExpressionStatement","src":"2871:18:66"},{"nativeSrc":"2902:31:66","nodeType":"YulAssignment","src":"2902:31:66","value":{"arguments":[{"kind":"number","nativeSrc":"2922:4:66","nodeType":"YulLiteral","src":"2922:4:66","type":"","value":"0x00"},{"kind":"number","nativeSrc":"2928:4:66","nodeType":"YulLiteral","src":"2928:4:66","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"2912:9:66","nodeType":"YulIdentifier","src":"2912:9:66"},"nativeSrc":"2912:21:66","nodeType":"YulFunctionCall","src":"2912:21:66"},"variableNames":[{"name":"result","nativeSrc":"2902:6:66","nodeType":"YulIdentifier","src":"2902:6:66"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12472,"isOffset":false,"isSlot":false,"src":"2836:3:66","valueSize":1},{"declaration":12475,"isOffset":false,"isSlot":false,"src":"2902:6:66","valueSize":1},{"declaration":12470,"isOffset":false,"isSlot":false,"src":"2884:4:66","valueSize":1}],"flags":["memory-safe"],"id":12477,"nodeType":"InlineAssembly","src":"2780:163:66"}]},"documentation":{"id":12468,"nodeType":"StructuredDocumentation","src":"2598:78:66","text":" @dev Derive the location of a mapping element from the key."},"id":12479,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"2690:13:66","nodeType":"FunctionDefinition","parameters":{"id":12473,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12470,"mutability":"mutable","name":"slot","nameLocation":"2712:4:66","nodeType":"VariableDeclaration","scope":12479,"src":"2704:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12469,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2704:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12472,"mutability":"mutable","name":"key","nameLocation":"2726:3:66","nodeType":"VariableDeclaration","scope":12479,"src":"2718:11:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12471,"name":"address","nodeType":"ElementaryTypeName","src":"2718:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2703:27:66"},"returnParameters":{"id":12476,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12475,"mutability":"mutable","name":"result","nameLocation":"2762:6:66","nodeType":"VariableDeclaration","scope":12479,"src":"2754:14:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12474,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2754:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2753:16:66"},"scope":12552,"src":"2681:268:66","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12490,"nodeType":"Block","src":"3124:173:66","statements":[{"AST":{"nativeSrc":"3159:132:66","nodeType":"YulBlock","src":"3159:132:66","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3180:4:66","nodeType":"YulLiteral","src":"3180:4:66","type":"","value":"0x00"},{"arguments":[{"arguments":[{"name":"key","nativeSrc":"3200:3:66","nodeType":"YulIdentifier","src":"3200:3:66"}],"functionName":{"name":"iszero","nativeSrc":"3193:6:66","nodeType":"YulIdentifier","src":"3193:6:66"},"nativeSrc":"3193:11:66","nodeType":"YulFunctionCall","src":"3193:11:66"}],"functionName":{"name":"iszero","nativeSrc":"3186:6:66","nodeType":"YulIdentifier","src":"3186:6:66"},"nativeSrc":"3186:19:66","nodeType":"YulFunctionCall","src":"3186:19:66"}],"functionName":{"name":"mstore","nativeSrc":"3173:6:66","nodeType":"YulIdentifier","src":"3173:6:66"},"nativeSrc":"3173:33:66","nodeType":"YulFunctionCall","src":"3173:33:66"},"nativeSrc":"3173:33:66","nodeType":"YulExpressionStatement","src":"3173:33:66"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3226:4:66","nodeType":"YulLiteral","src":"3226:4:66","type":"","value":"0x20"},{"name":"slot","nativeSrc":"3232:4:66","nodeType":"YulIdentifier","src":"3232:4:66"}],"functionName":{"name":"mstore","nativeSrc":"3219:6:66","nodeType":"YulIdentifier","src":"3219:6:66"},"nativeSrc":"3219:18:66","nodeType":"YulFunctionCall","src":"3219:18:66"},"nativeSrc":"3219:18:66","nodeType":"YulExpressionStatement","src":"3219:18:66"},{"nativeSrc":"3250:31:66","nodeType":"YulAssignment","src":"3250:31:66","value":{"arguments":[{"kind":"number","nativeSrc":"3270:4:66","nodeType":"YulLiteral","src":"3270:4:66","type":"","value":"0x00"},{"kind":"number","nativeSrc":"3276:4:66","nodeType":"YulLiteral","src":"3276:4:66","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"3260:9:66","nodeType":"YulIdentifier","src":"3260:9:66"},"nativeSrc":"3260:21:66","nodeType":"YulFunctionCall","src":"3260:21:66"},"variableNames":[{"name":"result","nativeSrc":"3250:6:66","nodeType":"YulIdentifier","src":"3250:6:66"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12484,"isOffset":false,"isSlot":false,"src":"3200:3:66","valueSize":1},{"declaration":12487,"isOffset":false,"isSlot":false,"src":"3250:6:66","valueSize":1},{"declaration":12482,"isOffset":false,"isSlot":false,"src":"3232:4:66","valueSize":1}],"flags":["memory-safe"],"id":12489,"nodeType":"InlineAssembly","src":"3134:157:66"}]},"documentation":{"id":12480,"nodeType":"StructuredDocumentation","src":"2955:78:66","text":" @dev Derive the location of a mapping element from the key."},"id":12491,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"3047:13:66","nodeType":"FunctionDefinition","parameters":{"id":12485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12482,"mutability":"mutable","name":"slot","nameLocation":"3069:4:66","nodeType":"VariableDeclaration","scope":12491,"src":"3061:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12481,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3061:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12484,"mutability":"mutable","name":"key","nameLocation":"3080:3:66","nodeType":"VariableDeclaration","scope":12491,"src":"3075:8:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12483,"name":"bool","nodeType":"ElementaryTypeName","src":"3075:4:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3060:24:66"},"returnParameters":{"id":12488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12487,"mutability":"mutable","name":"result","nameLocation":"3116:6:66","nodeType":"VariableDeclaration","scope":12491,"src":"3108:14:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12486,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3108:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3107:16:66"},"scope":12552,"src":"3038:259:66","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12502,"nodeType":"Block","src":"3475:157:66","statements":[{"AST":{"nativeSrc":"3510:116:66","nodeType":"YulBlock","src":"3510:116:66","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3531:4:66","nodeType":"YulLiteral","src":"3531:4:66","type":"","value":"0x00"},{"name":"key","nativeSrc":"3537:3:66","nodeType":"YulIdentifier","src":"3537:3:66"}],"functionName":{"name":"mstore","nativeSrc":"3524:6:66","nodeType":"YulIdentifier","src":"3524:6:66"},"nativeSrc":"3524:17:66","nodeType":"YulFunctionCall","src":"3524:17:66"},"nativeSrc":"3524:17:66","nodeType":"YulExpressionStatement","src":"3524:17:66"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3561:4:66","nodeType":"YulLiteral","src":"3561:4:66","type":"","value":"0x20"},{"name":"slot","nativeSrc":"3567:4:66","nodeType":"YulIdentifier","src":"3567:4:66"}],"functionName":{"name":"mstore","nativeSrc":"3554:6:66","nodeType":"YulIdentifier","src":"3554:6:66"},"nativeSrc":"3554:18:66","nodeType":"YulFunctionCall","src":"3554:18:66"},"nativeSrc":"3554:18:66","nodeType":"YulExpressionStatement","src":"3554:18:66"},{"nativeSrc":"3585:31:66","nodeType":"YulAssignment","src":"3585:31:66","value":{"arguments":[{"kind":"number","nativeSrc":"3605:4:66","nodeType":"YulLiteral","src":"3605:4:66","type":"","value":"0x00"},{"kind":"number","nativeSrc":"3611:4:66","nodeType":"YulLiteral","src":"3611:4:66","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"3595:9:66","nodeType":"YulIdentifier","src":"3595:9:66"},"nativeSrc":"3595:21:66","nodeType":"YulFunctionCall","src":"3595:21:66"},"variableNames":[{"name":"result","nativeSrc":"3585:6:66","nodeType":"YulIdentifier","src":"3585:6:66"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12496,"isOffset":false,"isSlot":false,"src":"3537:3:66","valueSize":1},{"declaration":12499,"isOffset":false,"isSlot":false,"src":"3585:6:66","valueSize":1},{"declaration":12494,"isOffset":false,"isSlot":false,"src":"3567:4:66","valueSize":1}],"flags":["memory-safe"],"id":12501,"nodeType":"InlineAssembly","src":"3485:141:66"}]},"documentation":{"id":12492,"nodeType":"StructuredDocumentation","src":"3303:78:66","text":" @dev Derive the location of a mapping element from the key."},"id":12503,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"3395:13:66","nodeType":"FunctionDefinition","parameters":{"id":12497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12494,"mutability":"mutable","name":"slot","nameLocation":"3417:4:66","nodeType":"VariableDeclaration","scope":12503,"src":"3409:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12493,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3409:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12496,"mutability":"mutable","name":"key","nameLocation":"3431:3:66","nodeType":"VariableDeclaration","scope":12503,"src":"3423:11:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12495,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3423:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3408:27:66"},"returnParameters":{"id":12500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12499,"mutability":"mutable","name":"result","nameLocation":"3467:6:66","nodeType":"VariableDeclaration","scope":12503,"src":"3459:14:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12498,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3459:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3458:16:66"},"scope":12552,"src":"3386:246:66","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12514,"nodeType":"Block","src":"3810:157:66","statements":[{"AST":{"nativeSrc":"3845:116:66","nodeType":"YulBlock","src":"3845:116:66","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3866:4:66","nodeType":"YulLiteral","src":"3866:4:66","type":"","value":"0x00"},{"name":"key","nativeSrc":"3872:3:66","nodeType":"YulIdentifier","src":"3872:3:66"}],"functionName":{"name":"mstore","nativeSrc":"3859:6:66","nodeType":"YulIdentifier","src":"3859:6:66"},"nativeSrc":"3859:17:66","nodeType":"YulFunctionCall","src":"3859:17:66"},"nativeSrc":"3859:17:66","nodeType":"YulExpressionStatement","src":"3859:17:66"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3896:4:66","nodeType":"YulLiteral","src":"3896:4:66","type":"","value":"0x20"},{"name":"slot","nativeSrc":"3902:4:66","nodeType":"YulIdentifier","src":"3902:4:66"}],"functionName":{"name":"mstore","nativeSrc":"3889:6:66","nodeType":"YulIdentifier","src":"3889:6:66"},"nativeSrc":"3889:18:66","nodeType":"YulFunctionCall","src":"3889:18:66"},"nativeSrc":"3889:18:66","nodeType":"YulExpressionStatement","src":"3889:18:66"},{"nativeSrc":"3920:31:66","nodeType":"YulAssignment","src":"3920:31:66","value":{"arguments":[{"kind":"number","nativeSrc":"3940:4:66","nodeType":"YulLiteral","src":"3940:4:66","type":"","value":"0x00"},{"kind":"number","nativeSrc":"3946:4:66","nodeType":"YulLiteral","src":"3946:4:66","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"3930:9:66","nodeType":"YulIdentifier","src":"3930:9:66"},"nativeSrc":"3930:21:66","nodeType":"YulFunctionCall","src":"3930:21:66"},"variableNames":[{"name":"result","nativeSrc":"3920:6:66","nodeType":"YulIdentifier","src":"3920:6:66"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12508,"isOffset":false,"isSlot":false,"src":"3872:3:66","valueSize":1},{"declaration":12511,"isOffset":false,"isSlot":false,"src":"3920:6:66","valueSize":1},{"declaration":12506,"isOffset":false,"isSlot":false,"src":"3902:4:66","valueSize":1}],"flags":["memory-safe"],"id":12513,"nodeType":"InlineAssembly","src":"3820:141:66"}]},"documentation":{"id":12504,"nodeType":"StructuredDocumentation","src":"3638:78:66","text":" @dev Derive the location of a mapping element from the key."},"id":12515,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"3730:13:66","nodeType":"FunctionDefinition","parameters":{"id":12509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12506,"mutability":"mutable","name":"slot","nameLocation":"3752:4:66","nodeType":"VariableDeclaration","scope":12515,"src":"3744:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12505,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3744:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12508,"mutability":"mutable","name":"key","nameLocation":"3766:3:66","nodeType":"VariableDeclaration","scope":12515,"src":"3758:11:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12507,"name":"uint256","nodeType":"ElementaryTypeName","src":"3758:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3743:27:66"},"returnParameters":{"id":12512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12511,"mutability":"mutable","name":"result","nameLocation":"3802:6:66","nodeType":"VariableDeclaration","scope":12515,"src":"3794:14:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12510,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3794:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3793:16:66"},"scope":12552,"src":"3721:246:66","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12526,"nodeType":"Block","src":"4144:157:66","statements":[{"AST":{"nativeSrc":"4179:116:66","nodeType":"YulBlock","src":"4179:116:66","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4200:4:66","nodeType":"YulLiteral","src":"4200:4:66","type":"","value":"0x00"},{"name":"key","nativeSrc":"4206:3:66","nodeType":"YulIdentifier","src":"4206:3:66"}],"functionName":{"name":"mstore","nativeSrc":"4193:6:66","nodeType":"YulIdentifier","src":"4193:6:66"},"nativeSrc":"4193:17:66","nodeType":"YulFunctionCall","src":"4193:17:66"},"nativeSrc":"4193:17:66","nodeType":"YulExpressionStatement","src":"4193:17:66"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4230:4:66","nodeType":"YulLiteral","src":"4230:4:66","type":"","value":"0x20"},{"name":"slot","nativeSrc":"4236:4:66","nodeType":"YulIdentifier","src":"4236:4:66"}],"functionName":{"name":"mstore","nativeSrc":"4223:6:66","nodeType":"YulIdentifier","src":"4223:6:66"},"nativeSrc":"4223:18:66","nodeType":"YulFunctionCall","src":"4223:18:66"},"nativeSrc":"4223:18:66","nodeType":"YulExpressionStatement","src":"4223:18:66"},{"nativeSrc":"4254:31:66","nodeType":"YulAssignment","src":"4254:31:66","value":{"arguments":[{"kind":"number","nativeSrc":"4274:4:66","nodeType":"YulLiteral","src":"4274:4:66","type":"","value":"0x00"},{"kind":"number","nativeSrc":"4280:4:66","nodeType":"YulLiteral","src":"4280:4:66","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"4264:9:66","nodeType":"YulIdentifier","src":"4264:9:66"},"nativeSrc":"4264:21:66","nodeType":"YulFunctionCall","src":"4264:21:66"},"variableNames":[{"name":"result","nativeSrc":"4254:6:66","nodeType":"YulIdentifier","src":"4254:6:66"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12520,"isOffset":false,"isSlot":false,"src":"4206:3:66","valueSize":1},{"declaration":12523,"isOffset":false,"isSlot":false,"src":"4254:6:66","valueSize":1},{"declaration":12518,"isOffset":false,"isSlot":false,"src":"4236:4:66","valueSize":1}],"flags":["memory-safe"],"id":12525,"nodeType":"InlineAssembly","src":"4154:141:66"}]},"documentation":{"id":12516,"nodeType":"StructuredDocumentation","src":"3973:78:66","text":" @dev Derive the location of a mapping element from the key."},"id":12527,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"4065:13:66","nodeType":"FunctionDefinition","parameters":{"id":12521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12518,"mutability":"mutable","name":"slot","nameLocation":"4087:4:66","nodeType":"VariableDeclaration","scope":12527,"src":"4079:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12517,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4079:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12520,"mutability":"mutable","name":"key","nameLocation":"4100:3:66","nodeType":"VariableDeclaration","scope":12527,"src":"4093:10:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12519,"name":"int256","nodeType":"ElementaryTypeName","src":"4093:6:66","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4078:26:66"},"returnParameters":{"id":12524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12523,"mutability":"mutable","name":"result","nameLocation":"4136:6:66","nodeType":"VariableDeclaration","scope":12527,"src":"4128:14:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12522,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4128:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4127:16:66"},"scope":12552,"src":"4056:245:66","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12538,"nodeType":"Block","src":"4485:326:66","statements":[{"AST":{"nativeSrc":"4520:285:66","nodeType":"YulBlock","src":"4520:285:66","statements":[{"nativeSrc":"4534:24:66","nodeType":"YulVariableDeclaration","src":"4534:24:66","value":{"arguments":[{"name":"key","nativeSrc":"4554:3:66","nodeType":"YulIdentifier","src":"4554:3:66"}],"functionName":{"name":"mload","nativeSrc":"4548:5:66","nodeType":"YulIdentifier","src":"4548:5:66"},"nativeSrc":"4548:10:66","nodeType":"YulFunctionCall","src":"4548:10:66"},"variables":[{"name":"length","nativeSrc":"4538:6:66","nodeType":"YulTypedName","src":"4538:6:66","type":""}]},{"nativeSrc":"4571:27:66","nodeType":"YulVariableDeclaration","src":"4571:27:66","value":{"arguments":[{"name":"key","nativeSrc":"4588:3:66","nodeType":"YulIdentifier","src":"4588:3:66"},{"kind":"number","nativeSrc":"4593:4:66","nodeType":"YulLiteral","src":"4593:4:66","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4584:3:66","nodeType":"YulIdentifier","src":"4584:3:66"},"nativeSrc":"4584:14:66","nodeType":"YulFunctionCall","src":"4584:14:66"},"variables":[{"name":"begin","nativeSrc":"4575:5:66","nodeType":"YulTypedName","src":"4575:5:66","type":""}]},{"nativeSrc":"4611:29:66","nodeType":"YulVariableDeclaration","src":"4611:29:66","value":{"arguments":[{"name":"begin","nativeSrc":"4626:5:66","nodeType":"YulIdentifier","src":"4626:5:66"},{"name":"length","nativeSrc":"4633:6:66","nodeType":"YulIdentifier","src":"4633:6:66"}],"functionName":{"name":"add","nativeSrc":"4622:3:66","nodeType":"YulIdentifier","src":"4622:3:66"},"nativeSrc":"4622:18:66","nodeType":"YulFunctionCall","src":"4622:18:66"},"variables":[{"name":"end","nativeSrc":"4615:3:66","nodeType":"YulTypedName","src":"4615:3:66","type":""}]},{"nativeSrc":"4653:23:66","nodeType":"YulVariableDeclaration","src":"4653:23:66","value":{"arguments":[{"name":"end","nativeSrc":"4672:3:66","nodeType":"YulIdentifier","src":"4672:3:66"}],"functionName":{"name":"mload","nativeSrc":"4666:5:66","nodeType":"YulIdentifier","src":"4666:5:66"},"nativeSrc":"4666:10:66","nodeType":"YulFunctionCall","src":"4666:10:66"},"variables":[{"name":"cache","nativeSrc":"4657:5:66","nodeType":"YulTypedName","src":"4657:5:66","type":""}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"4696:3:66","nodeType":"YulIdentifier","src":"4696:3:66"},{"name":"slot","nativeSrc":"4701:4:66","nodeType":"YulIdentifier","src":"4701:4:66"}],"functionName":{"name":"mstore","nativeSrc":"4689:6:66","nodeType":"YulIdentifier","src":"4689:6:66"},"nativeSrc":"4689:17:66","nodeType":"YulFunctionCall","src":"4689:17:66"},"nativeSrc":"4689:17:66","nodeType":"YulExpressionStatement","src":"4689:17:66"},{"nativeSrc":"4719:45:66","nodeType":"YulAssignment","src":"4719:45:66","value":{"arguments":[{"name":"begin","nativeSrc":"4739:5:66","nodeType":"YulIdentifier","src":"4739:5:66"},{"arguments":[{"name":"length","nativeSrc":"4750:6:66","nodeType":"YulIdentifier","src":"4750:6:66"},{"kind":"number","nativeSrc":"4758:4:66","nodeType":"YulLiteral","src":"4758:4:66","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4746:3:66","nodeType":"YulIdentifier","src":"4746:3:66"},"nativeSrc":"4746:17:66","nodeType":"YulFunctionCall","src":"4746:17:66"}],"functionName":{"name":"keccak256","nativeSrc":"4729:9:66","nodeType":"YulIdentifier","src":"4729:9:66"},"nativeSrc":"4729:35:66","nodeType":"YulFunctionCall","src":"4729:35:66"},"variableNames":[{"name":"result","nativeSrc":"4719:6:66","nodeType":"YulIdentifier","src":"4719:6:66"}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"4784:3:66","nodeType":"YulIdentifier","src":"4784:3:66"},{"name":"cache","nativeSrc":"4789:5:66","nodeType":"YulIdentifier","src":"4789:5:66"}],"functionName":{"name":"mstore","nativeSrc":"4777:6:66","nodeType":"YulIdentifier","src":"4777:6:66"},"nativeSrc":"4777:18:66","nodeType":"YulFunctionCall","src":"4777:18:66"},"nativeSrc":"4777:18:66","nodeType":"YulExpressionStatement","src":"4777:18:66"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12532,"isOffset":false,"isSlot":false,"src":"4554:3:66","valueSize":1},{"declaration":12532,"isOffset":false,"isSlot":false,"src":"4588:3:66","valueSize":1},{"declaration":12535,"isOffset":false,"isSlot":false,"src":"4719:6:66","valueSize":1},{"declaration":12530,"isOffset":false,"isSlot":false,"src":"4701:4:66","valueSize":1}],"flags":["memory-safe"],"id":12537,"nodeType":"InlineAssembly","src":"4495:310:66"}]},"documentation":{"id":12528,"nodeType":"StructuredDocumentation","src":"4307:78:66","text":" @dev Derive the location of a mapping element from the key."},"id":12539,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"4399:13:66","nodeType":"FunctionDefinition","parameters":{"id":12533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12530,"mutability":"mutable","name":"slot","nameLocation":"4421:4:66","nodeType":"VariableDeclaration","scope":12539,"src":"4413:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12529,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4413:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12532,"mutability":"mutable","name":"key","nameLocation":"4441:3:66","nodeType":"VariableDeclaration","scope":12539,"src":"4427:17:66","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12531,"name":"string","nodeType":"ElementaryTypeName","src":"4427:6:66","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4412:33:66"},"returnParameters":{"id":12536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12535,"mutability":"mutable","name":"result","nameLocation":"4477:6:66","nodeType":"VariableDeclaration","scope":12539,"src":"4469:14:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12534,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4469:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4468:16:66"},"scope":12552,"src":"4390:421:66","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12550,"nodeType":"Block","src":"4994:326:66","statements":[{"AST":{"nativeSrc":"5029:285:66","nodeType":"YulBlock","src":"5029:285:66","statements":[{"nativeSrc":"5043:24:66","nodeType":"YulVariableDeclaration","src":"5043:24:66","value":{"arguments":[{"name":"key","nativeSrc":"5063:3:66","nodeType":"YulIdentifier","src":"5063:3:66"}],"functionName":{"name":"mload","nativeSrc":"5057:5:66","nodeType":"YulIdentifier","src":"5057:5:66"},"nativeSrc":"5057:10:66","nodeType":"YulFunctionCall","src":"5057:10:66"},"variables":[{"name":"length","nativeSrc":"5047:6:66","nodeType":"YulTypedName","src":"5047:6:66","type":""}]},{"nativeSrc":"5080:27:66","nodeType":"YulVariableDeclaration","src":"5080:27:66","value":{"arguments":[{"name":"key","nativeSrc":"5097:3:66","nodeType":"YulIdentifier","src":"5097:3:66"},{"kind":"number","nativeSrc":"5102:4:66","nodeType":"YulLiteral","src":"5102:4:66","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5093:3:66","nodeType":"YulIdentifier","src":"5093:3:66"},"nativeSrc":"5093:14:66","nodeType":"YulFunctionCall","src":"5093:14:66"},"variables":[{"name":"begin","nativeSrc":"5084:5:66","nodeType":"YulTypedName","src":"5084:5:66","type":""}]},{"nativeSrc":"5120:29:66","nodeType":"YulVariableDeclaration","src":"5120:29:66","value":{"arguments":[{"name":"begin","nativeSrc":"5135:5:66","nodeType":"YulIdentifier","src":"5135:5:66"},{"name":"length","nativeSrc":"5142:6:66","nodeType":"YulIdentifier","src":"5142:6:66"}],"functionName":{"name":"add","nativeSrc":"5131:3:66","nodeType":"YulIdentifier","src":"5131:3:66"},"nativeSrc":"5131:18:66","nodeType":"YulFunctionCall","src":"5131:18:66"},"variables":[{"name":"end","nativeSrc":"5124:3:66","nodeType":"YulTypedName","src":"5124:3:66","type":""}]},{"nativeSrc":"5162:23:66","nodeType":"YulVariableDeclaration","src":"5162:23:66","value":{"arguments":[{"name":"end","nativeSrc":"5181:3:66","nodeType":"YulIdentifier","src":"5181:3:66"}],"functionName":{"name":"mload","nativeSrc":"5175:5:66","nodeType":"YulIdentifier","src":"5175:5:66"},"nativeSrc":"5175:10:66","nodeType":"YulFunctionCall","src":"5175:10:66"},"variables":[{"name":"cache","nativeSrc":"5166:5:66","nodeType":"YulTypedName","src":"5166:5:66","type":""}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"5205:3:66","nodeType":"YulIdentifier","src":"5205:3:66"},{"name":"slot","nativeSrc":"5210:4:66","nodeType":"YulIdentifier","src":"5210:4:66"}],"functionName":{"name":"mstore","nativeSrc":"5198:6:66","nodeType":"YulIdentifier","src":"5198:6:66"},"nativeSrc":"5198:17:66","nodeType":"YulFunctionCall","src":"5198:17:66"},"nativeSrc":"5198:17:66","nodeType":"YulExpressionStatement","src":"5198:17:66"},{"nativeSrc":"5228:45:66","nodeType":"YulAssignment","src":"5228:45:66","value":{"arguments":[{"name":"begin","nativeSrc":"5248:5:66","nodeType":"YulIdentifier","src":"5248:5:66"},{"arguments":[{"name":"length","nativeSrc":"5259:6:66","nodeType":"YulIdentifier","src":"5259:6:66"},{"kind":"number","nativeSrc":"5267:4:66","nodeType":"YulLiteral","src":"5267:4:66","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5255:3:66","nodeType":"YulIdentifier","src":"5255:3:66"},"nativeSrc":"5255:17:66","nodeType":"YulFunctionCall","src":"5255:17:66"}],"functionName":{"name":"keccak256","nativeSrc":"5238:9:66","nodeType":"YulIdentifier","src":"5238:9:66"},"nativeSrc":"5238:35:66","nodeType":"YulFunctionCall","src":"5238:35:66"},"variableNames":[{"name":"result","nativeSrc":"5228:6:66","nodeType":"YulIdentifier","src":"5228:6:66"}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"5293:3:66","nodeType":"YulIdentifier","src":"5293:3:66"},{"name":"cache","nativeSrc":"5298:5:66","nodeType":"YulIdentifier","src":"5298:5:66"}],"functionName":{"name":"mstore","nativeSrc":"5286:6:66","nodeType":"YulIdentifier","src":"5286:6:66"},"nativeSrc":"5286:18:66","nodeType":"YulFunctionCall","src":"5286:18:66"},"nativeSrc":"5286:18:66","nodeType":"YulExpressionStatement","src":"5286:18:66"}]},"evmVersion":"cancun","externalReferences":[{"declaration":12544,"isOffset":false,"isSlot":false,"src":"5063:3:66","valueSize":1},{"declaration":12544,"isOffset":false,"isSlot":false,"src":"5097:3:66","valueSize":1},{"declaration":12547,"isOffset":false,"isSlot":false,"src":"5228:6:66","valueSize":1},{"declaration":12542,"isOffset":false,"isSlot":false,"src":"5210:4:66","valueSize":1}],"flags":["memory-safe"],"id":12549,"nodeType":"InlineAssembly","src":"5004:310:66"}]},"documentation":{"id":12540,"nodeType":"StructuredDocumentation","src":"4817:78:66","text":" @dev Derive the location of a mapping element from the key."},"id":12551,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"4909:13:66","nodeType":"FunctionDefinition","parameters":{"id":12545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12542,"mutability":"mutable","name":"slot","nameLocation":"4931:4:66","nodeType":"VariableDeclaration","scope":12551,"src":"4923:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12541,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4923:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":12544,"mutability":"mutable","name":"key","nameLocation":"4950:3:66","nodeType":"VariableDeclaration","scope":12551,"src":"4937:16:66","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":12543,"name":"bytes","nodeType":"ElementaryTypeName","src":"4937:5:66","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4922:32:66"},"returnParameters":{"id":12548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12547,"mutability":"mutable","name":"result","nameLocation":"4986:6:66","nodeType":"VariableDeclaration","scope":12551,"src":"4978:14:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12546,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4978:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4977:16:66"},"scope":12552,"src":"4900:420:66","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":12553,"src":"1599:3723:66","usedErrors":[],"usedEvents":[]}],"src":"199:5124:66"},"id":66},"@openzeppelin/contracts/utils/StorageSlot.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","exportedSymbols":{"StorageSlot":[12676]},"id":12677,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12554,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"193:24:67"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlot","contractDependencies":[],"contractKind":"library","documentation":{"id":12555,"nodeType":"StructuredDocumentation","src":"219:1187:67","text":" @dev Library for reading and writing primitive types to specific storage slots.\n Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n This library helps with reading and writing to such slots without the need for inline assembly.\n The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n Example usage to set ERC-1967 implementation slot:\n ```solidity\n contract ERC1967 {\n // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n function _setImplementation(address newImplementation) internal {\n require(newImplementation.code.length > 0);\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n }\n ```\n TIP: Consider using this library along with {SlotDerivation}."},"fullyImplemented":true,"id":12676,"linearizedBaseContracts":[12676],"name":"StorageSlot","nameLocation":"1415:11:67","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlot.AddressSlot","id":12558,"members":[{"constant":false,"id":12557,"mutability":"mutable","name":"value","nameLocation":"1470:5:67","nodeType":"VariableDeclaration","scope":12558,"src":"1462:13:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12556,"name":"address","nodeType":"ElementaryTypeName","src":"1462:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"AddressSlot","nameLocation":"1440:11:67","nodeType":"StructDefinition","scope":12676,"src":"1433:49:67","visibility":"public"},{"canonicalName":"StorageSlot.BooleanSlot","id":12561,"members":[{"constant":false,"id":12560,"mutability":"mutable","name":"value","nameLocation":"1522:5:67","nodeType":"VariableDeclaration","scope":12561,"src":"1517:10:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12559,"name":"bool","nodeType":"ElementaryTypeName","src":"1517:4:67","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"BooleanSlot","nameLocation":"1495:11:67","nodeType":"StructDefinition","scope":12676,"src":"1488:46:67","visibility":"public"},{"canonicalName":"StorageSlot.Bytes32Slot","id":12564,"members":[{"constant":false,"id":12563,"mutability":"mutable","name":"value","nameLocation":"1577:5:67","nodeType":"VariableDeclaration","scope":12564,"src":"1569:13:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12562,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1569:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"Bytes32Slot","nameLocation":"1547:11:67","nodeType":"StructDefinition","scope":12676,"src":"1540:49:67","visibility":"public"},{"canonicalName":"StorageSlot.Uint256Slot","id":12567,"members":[{"constant":false,"id":12566,"mutability":"mutable","name":"value","nameLocation":"1632:5:67","nodeType":"VariableDeclaration","scope":12567,"src":"1624:13:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12565,"name":"uint256","nodeType":"ElementaryTypeName","src":"1624:7:67","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Uint256Slot","nameLocation":"1602:11:67","nodeType":"StructDefinition","scope":12676,"src":"1595:49:67","visibility":"public"},{"canonicalName":"StorageSlot.Int256Slot","id":12570,"members":[{"constant":false,"id":12569,"mutability":"mutable","name":"value","nameLocation":"1685:5:67","nodeType":"VariableDeclaration","scope":12570,"src":"1678:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12568,"name":"int256","nodeType":"ElementaryTypeName","src":"1678:6:67","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"name":"Int256Slot","nameLocation":"1657:10:67","nodeType":"StructDefinition","scope":12676,"src":"1650:47:67","visibility":"public"},{"canonicalName":"StorageSlot.StringSlot","id":12573,"members":[{"constant":false,"id":12572,"mutability":"mutable","name":"value","nameLocation":"1738:5:67","nodeType":"VariableDeclaration","scope":12573,"src":"1731:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":12571,"name":"string","nodeType":"ElementaryTypeName","src":"1731:6:67","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"name":"StringSlot","nameLocation":"1710:10:67","nodeType":"StructDefinition","scope":12676,"src":"1703:47:67","visibility":"public"},{"canonicalName":"StorageSlot.BytesSlot","id":12576,"members":[{"constant":false,"id":12575,"mutability":"mutable","name":"value","nameLocation":"1789:5:67","nodeType":"VariableDeclaration","scope":12576,"src":"1783:11:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":12574,"name":"bytes","nodeType":"ElementaryTypeName","src":"1783:5:67","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"BytesSlot","nameLocation":"1763:9:67","nodeType":"StructDefinition","scope":12676,"src":"1756:45:67","visibility":"public"},{"body":{"id":12586,"nodeType":"Block","src":"1983:79:67","statements":[{"AST":{"nativeSrc":"2018:38:67","nodeType":"YulBlock","src":"2018:38:67","statements":[{"nativeSrc":"2032:14:67","nodeType":"YulAssignment","src":"2032:14:67","value":{"name":"slot","nativeSrc":"2042:4:67","nodeType":"YulIdentifier","src":"2042:4:67"},"variableNames":[{"name":"r.slot","nativeSrc":"2032:6:67","nodeType":"YulIdentifier","src":"2032:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12583,"isOffset":false,"isSlot":true,"src":"2032:6:67","suffix":"slot","valueSize":1},{"declaration":12579,"isOffset":false,"isSlot":false,"src":"2042:4:67","valueSize":1}],"flags":["memory-safe"],"id":12585,"nodeType":"InlineAssembly","src":"1993:63:67"}]},"documentation":{"id":12577,"nodeType":"StructuredDocumentation","src":"1807:87:67","text":" @dev Returns an `AddressSlot` with member `value` located at `slot`."},"id":12587,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressSlot","nameLocation":"1908:14:67","nodeType":"FunctionDefinition","parameters":{"id":12580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12579,"mutability":"mutable","name":"slot","nameLocation":"1931:4:67","nodeType":"VariableDeclaration","scope":12587,"src":"1923:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12578,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1923:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1922:14:67"},"returnParameters":{"id":12584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12583,"mutability":"mutable","name":"r","nameLocation":"1980:1:67","nodeType":"VariableDeclaration","scope":12587,"src":"1960:21:67","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$12558_storage_ptr","typeString":"struct StorageSlot.AddressSlot"},"typeName":{"id":12582,"nodeType":"UserDefinedTypeName","pathNode":{"id":12581,"name":"AddressSlot","nameLocations":["1960:11:67"],"nodeType":"IdentifierPath","referencedDeclaration":12558,"src":"1960:11:67"},"referencedDeclaration":12558,"src":"1960:11:67","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$12558_storage_ptr","typeString":"struct StorageSlot.AddressSlot"}},"visibility":"internal"}],"src":"1959:23:67"},"scope":12676,"src":"1899:163:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12597,"nodeType":"Block","src":"2243:79:67","statements":[{"AST":{"nativeSrc":"2278:38:67","nodeType":"YulBlock","src":"2278:38:67","statements":[{"nativeSrc":"2292:14:67","nodeType":"YulAssignment","src":"2292:14:67","value":{"name":"slot","nativeSrc":"2302:4:67","nodeType":"YulIdentifier","src":"2302:4:67"},"variableNames":[{"name":"r.slot","nativeSrc":"2292:6:67","nodeType":"YulIdentifier","src":"2292:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12594,"isOffset":false,"isSlot":true,"src":"2292:6:67","suffix":"slot","valueSize":1},{"declaration":12590,"isOffset":false,"isSlot":false,"src":"2302:4:67","valueSize":1}],"flags":["memory-safe"],"id":12596,"nodeType":"InlineAssembly","src":"2253:63:67"}]},"documentation":{"id":12588,"nodeType":"StructuredDocumentation","src":"2068:86:67","text":" @dev Returns a `BooleanSlot` with member `value` located at `slot`."},"id":12598,"implemented":true,"kind":"function","modifiers":[],"name":"getBooleanSlot","nameLocation":"2168:14:67","nodeType":"FunctionDefinition","parameters":{"id":12591,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12590,"mutability":"mutable","name":"slot","nameLocation":"2191:4:67","nodeType":"VariableDeclaration","scope":12598,"src":"2183:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12589,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2183:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2182:14:67"},"returnParameters":{"id":12595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12594,"mutability":"mutable","name":"r","nameLocation":"2240:1:67","nodeType":"VariableDeclaration","scope":12598,"src":"2220:21:67","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$12561_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"},"typeName":{"id":12593,"nodeType":"UserDefinedTypeName","pathNode":{"id":12592,"name":"BooleanSlot","nameLocations":["2220:11:67"],"nodeType":"IdentifierPath","referencedDeclaration":12561,"src":"2220:11:67"},"referencedDeclaration":12561,"src":"2220:11:67","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$12561_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"}},"visibility":"internal"}],"src":"2219:23:67"},"scope":12676,"src":"2159:163:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12608,"nodeType":"Block","src":"2503:79:67","statements":[{"AST":{"nativeSrc":"2538:38:67","nodeType":"YulBlock","src":"2538:38:67","statements":[{"nativeSrc":"2552:14:67","nodeType":"YulAssignment","src":"2552:14:67","value":{"name":"slot","nativeSrc":"2562:4:67","nodeType":"YulIdentifier","src":"2562:4:67"},"variableNames":[{"name":"r.slot","nativeSrc":"2552:6:67","nodeType":"YulIdentifier","src":"2552:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12605,"isOffset":false,"isSlot":true,"src":"2552:6:67","suffix":"slot","valueSize":1},{"declaration":12601,"isOffset":false,"isSlot":false,"src":"2562:4:67","valueSize":1}],"flags":["memory-safe"],"id":12607,"nodeType":"InlineAssembly","src":"2513:63:67"}]},"documentation":{"id":12599,"nodeType":"StructuredDocumentation","src":"2328:86:67","text":" @dev Returns a `Bytes32Slot` with member `value` located at `slot`."},"id":12609,"implemented":true,"kind":"function","modifiers":[],"name":"getBytes32Slot","nameLocation":"2428:14:67","nodeType":"FunctionDefinition","parameters":{"id":12602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12601,"mutability":"mutable","name":"slot","nameLocation":"2451:4:67","nodeType":"VariableDeclaration","scope":12609,"src":"2443:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12600,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2443:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2442:14:67"},"returnParameters":{"id":12606,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12605,"mutability":"mutable","name":"r","nameLocation":"2500:1:67","nodeType":"VariableDeclaration","scope":12609,"src":"2480:21:67","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$12564_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"},"typeName":{"id":12604,"nodeType":"UserDefinedTypeName","pathNode":{"id":12603,"name":"Bytes32Slot","nameLocations":["2480:11:67"],"nodeType":"IdentifierPath","referencedDeclaration":12564,"src":"2480:11:67"},"referencedDeclaration":12564,"src":"2480:11:67","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$12564_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"}},"visibility":"internal"}],"src":"2479:23:67"},"scope":12676,"src":"2419:163:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12619,"nodeType":"Block","src":"2763:79:67","statements":[{"AST":{"nativeSrc":"2798:38:67","nodeType":"YulBlock","src":"2798:38:67","statements":[{"nativeSrc":"2812:14:67","nodeType":"YulAssignment","src":"2812:14:67","value":{"name":"slot","nativeSrc":"2822:4:67","nodeType":"YulIdentifier","src":"2822:4:67"},"variableNames":[{"name":"r.slot","nativeSrc":"2812:6:67","nodeType":"YulIdentifier","src":"2812:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12616,"isOffset":false,"isSlot":true,"src":"2812:6:67","suffix":"slot","valueSize":1},{"declaration":12612,"isOffset":false,"isSlot":false,"src":"2822:4:67","valueSize":1}],"flags":["memory-safe"],"id":12618,"nodeType":"InlineAssembly","src":"2773:63:67"}]},"documentation":{"id":12610,"nodeType":"StructuredDocumentation","src":"2588:86:67","text":" @dev Returns a `Uint256Slot` with member `value` located at `slot`."},"id":12620,"implemented":true,"kind":"function","modifiers":[],"name":"getUint256Slot","nameLocation":"2688:14:67","nodeType":"FunctionDefinition","parameters":{"id":12613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12612,"mutability":"mutable","name":"slot","nameLocation":"2711:4:67","nodeType":"VariableDeclaration","scope":12620,"src":"2703:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12611,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2703:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2702:14:67"},"returnParameters":{"id":12617,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12616,"mutability":"mutable","name":"r","nameLocation":"2760:1:67","nodeType":"VariableDeclaration","scope":12620,"src":"2740:21:67","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12567_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"},"typeName":{"id":12615,"nodeType":"UserDefinedTypeName","pathNode":{"id":12614,"name":"Uint256Slot","nameLocations":["2740:11:67"],"nodeType":"IdentifierPath","referencedDeclaration":12567,"src":"2740:11:67"},"referencedDeclaration":12567,"src":"2740:11:67","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$12567_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"}},"visibility":"internal"}],"src":"2739:23:67"},"scope":12676,"src":"2679:163:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12630,"nodeType":"Block","src":"3020:79:67","statements":[{"AST":{"nativeSrc":"3055:38:67","nodeType":"YulBlock","src":"3055:38:67","statements":[{"nativeSrc":"3069:14:67","nodeType":"YulAssignment","src":"3069:14:67","value":{"name":"slot","nativeSrc":"3079:4:67","nodeType":"YulIdentifier","src":"3079:4:67"},"variableNames":[{"name":"r.slot","nativeSrc":"3069:6:67","nodeType":"YulIdentifier","src":"3069:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12627,"isOffset":false,"isSlot":true,"src":"3069:6:67","suffix":"slot","valueSize":1},{"declaration":12623,"isOffset":false,"isSlot":false,"src":"3079:4:67","valueSize":1}],"flags":["memory-safe"],"id":12629,"nodeType":"InlineAssembly","src":"3030:63:67"}]},"documentation":{"id":12621,"nodeType":"StructuredDocumentation","src":"2848:85:67","text":" @dev Returns a `Int256Slot` with member `value` located at `slot`."},"id":12631,"implemented":true,"kind":"function","modifiers":[],"name":"getInt256Slot","nameLocation":"2947:13:67","nodeType":"FunctionDefinition","parameters":{"id":12624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12623,"mutability":"mutable","name":"slot","nameLocation":"2969:4:67","nodeType":"VariableDeclaration","scope":12631,"src":"2961:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12622,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2961:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2960:14:67"},"returnParameters":{"id":12628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12627,"mutability":"mutable","name":"r","nameLocation":"3017:1:67","nodeType":"VariableDeclaration","scope":12631,"src":"2998:20:67","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$12570_storage_ptr","typeString":"struct StorageSlot.Int256Slot"},"typeName":{"id":12626,"nodeType":"UserDefinedTypeName","pathNode":{"id":12625,"name":"Int256Slot","nameLocations":["2998:10:67"],"nodeType":"IdentifierPath","referencedDeclaration":12570,"src":"2998:10:67"},"referencedDeclaration":12570,"src":"2998:10:67","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$12570_storage_ptr","typeString":"struct StorageSlot.Int256Slot"}},"visibility":"internal"}],"src":"2997:22:67"},"scope":12676,"src":"2938:161:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12641,"nodeType":"Block","src":"3277:79:67","statements":[{"AST":{"nativeSrc":"3312:38:67","nodeType":"YulBlock","src":"3312:38:67","statements":[{"nativeSrc":"3326:14:67","nodeType":"YulAssignment","src":"3326:14:67","value":{"name":"slot","nativeSrc":"3336:4:67","nodeType":"YulIdentifier","src":"3336:4:67"},"variableNames":[{"name":"r.slot","nativeSrc":"3326:6:67","nodeType":"YulIdentifier","src":"3326:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12638,"isOffset":false,"isSlot":true,"src":"3326:6:67","suffix":"slot","valueSize":1},{"declaration":12634,"isOffset":false,"isSlot":false,"src":"3336:4:67","valueSize":1}],"flags":["memory-safe"],"id":12640,"nodeType":"InlineAssembly","src":"3287:63:67"}]},"documentation":{"id":12632,"nodeType":"StructuredDocumentation","src":"3105:85:67","text":" @dev Returns a `StringSlot` with member `value` located at `slot`."},"id":12642,"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"3204:13:67","nodeType":"FunctionDefinition","parameters":{"id":12635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12634,"mutability":"mutable","name":"slot","nameLocation":"3226:4:67","nodeType":"VariableDeclaration","scope":12642,"src":"3218:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12633,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3218:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3217:14:67"},"returnParameters":{"id":12639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12638,"mutability":"mutable","name":"r","nameLocation":"3274:1:67","nodeType":"VariableDeclaration","scope":12642,"src":"3255:20:67","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12573_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":12637,"nodeType":"UserDefinedTypeName","pathNode":{"id":12636,"name":"StringSlot","nameLocations":["3255:10:67"],"nodeType":"IdentifierPath","referencedDeclaration":12573,"src":"3255:10:67"},"referencedDeclaration":12573,"src":"3255:10:67","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12573_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"3254:22:67"},"scope":12676,"src":"3195:161:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12652,"nodeType":"Block","src":"3558:85:67","statements":[{"AST":{"nativeSrc":"3593:44:67","nodeType":"YulBlock","src":"3593:44:67","statements":[{"nativeSrc":"3607:20:67","nodeType":"YulAssignment","src":"3607:20:67","value":{"name":"store.slot","nativeSrc":"3617:10:67","nodeType":"YulIdentifier","src":"3617:10:67"},"variableNames":[{"name":"r.slot","nativeSrc":"3607:6:67","nodeType":"YulIdentifier","src":"3607:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12649,"isOffset":false,"isSlot":true,"src":"3607:6:67","suffix":"slot","valueSize":1},{"declaration":12645,"isOffset":false,"isSlot":true,"src":"3617:10:67","suffix":"slot","valueSize":1}],"flags":["memory-safe"],"id":12651,"nodeType":"InlineAssembly","src":"3568:69:67"}]},"documentation":{"id":12643,"nodeType":"StructuredDocumentation","src":"3362:101:67","text":" @dev Returns an `StringSlot` representation of the string storage pointer `store`."},"id":12653,"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"3477:13:67","nodeType":"FunctionDefinition","parameters":{"id":12646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12645,"mutability":"mutable","name":"store","nameLocation":"3506:5:67","nodeType":"VariableDeclaration","scope":12653,"src":"3491:20:67","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":12644,"name":"string","nodeType":"ElementaryTypeName","src":"3491:6:67","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3490:22:67"},"returnParameters":{"id":12650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12649,"mutability":"mutable","name":"r","nameLocation":"3555:1:67","nodeType":"VariableDeclaration","scope":12653,"src":"3536:20:67","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12573_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":12648,"nodeType":"UserDefinedTypeName","pathNode":{"id":12647,"name":"StringSlot","nameLocations":["3536:10:67"],"nodeType":"IdentifierPath","referencedDeclaration":12573,"src":"3536:10:67"},"referencedDeclaration":12573,"src":"3536:10:67","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12573_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"3535:22:67"},"scope":12676,"src":"3468:175:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12663,"nodeType":"Block","src":"3818:79:67","statements":[{"AST":{"nativeSrc":"3853:38:67","nodeType":"YulBlock","src":"3853:38:67","statements":[{"nativeSrc":"3867:14:67","nodeType":"YulAssignment","src":"3867:14:67","value":{"name":"slot","nativeSrc":"3877:4:67","nodeType":"YulIdentifier","src":"3877:4:67"},"variableNames":[{"name":"r.slot","nativeSrc":"3867:6:67","nodeType":"YulIdentifier","src":"3867:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12660,"isOffset":false,"isSlot":true,"src":"3867:6:67","suffix":"slot","valueSize":1},{"declaration":12656,"isOffset":false,"isSlot":false,"src":"3877:4:67","valueSize":1}],"flags":["memory-safe"],"id":12662,"nodeType":"InlineAssembly","src":"3828:63:67"}]},"documentation":{"id":12654,"nodeType":"StructuredDocumentation","src":"3649:84:67","text":" @dev Returns a `BytesSlot` with member `value` located at `slot`."},"id":12664,"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"3747:12:67","nodeType":"FunctionDefinition","parameters":{"id":12657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12656,"mutability":"mutable","name":"slot","nameLocation":"3768:4:67","nodeType":"VariableDeclaration","scope":12664,"src":"3760:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":12655,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3760:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3759:14:67"},"returnParameters":{"id":12661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12660,"mutability":"mutable","name":"r","nameLocation":"3815:1:67","nodeType":"VariableDeclaration","scope":12664,"src":"3797:19:67","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12576_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":12659,"nodeType":"UserDefinedTypeName","pathNode":{"id":12658,"name":"BytesSlot","nameLocations":["3797:9:67"],"nodeType":"IdentifierPath","referencedDeclaration":12576,"src":"3797:9:67"},"referencedDeclaration":12576,"src":"3797:9:67","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12576_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"3796:21:67"},"scope":12676,"src":"3738:159:67","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12674,"nodeType":"Block","src":"4094:85:67","statements":[{"AST":{"nativeSrc":"4129:44:67","nodeType":"YulBlock","src":"4129:44:67","statements":[{"nativeSrc":"4143:20:67","nodeType":"YulAssignment","src":"4143:20:67","value":{"name":"store.slot","nativeSrc":"4153:10:67","nodeType":"YulIdentifier","src":"4153:10:67"},"variableNames":[{"name":"r.slot","nativeSrc":"4143:6:67","nodeType":"YulIdentifier","src":"4143:6:67"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12671,"isOffset":false,"isSlot":true,"src":"4143:6:67","suffix":"slot","valueSize":1},{"declaration":12667,"isOffset":false,"isSlot":true,"src":"4153:10:67","suffix":"slot","valueSize":1}],"flags":["memory-safe"],"id":12673,"nodeType":"InlineAssembly","src":"4104:69:67"}]},"documentation":{"id":12665,"nodeType":"StructuredDocumentation","src":"3903:99:67","text":" @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`."},"id":12675,"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"4016:12:67","nodeType":"FunctionDefinition","parameters":{"id":12668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12667,"mutability":"mutable","name":"store","nameLocation":"4043:5:67","nodeType":"VariableDeclaration","scope":12675,"src":"4029:19:67","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":12666,"name":"bytes","nodeType":"ElementaryTypeName","src":"4029:5:67","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4028:21:67"},"returnParameters":{"id":12672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12671,"mutability":"mutable","name":"r","nameLocation":"4091:1:67","nodeType":"VariableDeclaration","scope":12675,"src":"4073:19:67","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12576_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":12670,"nodeType":"UserDefinedTypeName","pathNode":{"id":12669,"name":"BytesSlot","nameLocations":["4073:9:67"],"nodeType":"IdentifierPath","referencedDeclaration":12576,"src":"4073:9:67"},"referencedDeclaration":12576,"src":"4073:9:67","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12576_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"4072:21:67"},"scope":12676,"src":"4007:172:67","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":12677,"src":"1407:2774:67","usedErrors":[],"usedEvents":[]}],"src":"193:3989:67"},"id":67},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","exportedSymbols":{"IERC165":[12688]},"id":12689,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12678,"literals":["solidity",">=","0.4",".16"],"nodeType":"PragmaDirective","src":"115:25:68"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC165","contractDependencies":[],"contractKind":"interface","documentation":{"id":12679,"nodeType":"StructuredDocumentation","src":"142:280:68","text":" @dev Interface of the ERC-165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[ERC].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}."},"fullyImplemented":false,"id":12688,"linearizedBaseContracts":[12688],"name":"IERC165","nameLocation":"433:7:68","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":12680,"nodeType":"StructuredDocumentation","src":"447:340:68","text":" @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."},"functionSelector":"01ffc9a7","id":12687,"implemented":false,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"801:17:68","nodeType":"FunctionDefinition","parameters":{"id":12683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12682,"mutability":"mutable","name":"interfaceId","nameLocation":"826:11:68","nodeType":"VariableDeclaration","scope":12687,"src":"819:18:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":12681,"name":"bytes4","nodeType":"ElementaryTypeName","src":"819:6:68","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"818:20:68"},"returnParameters":{"id":12686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12685,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12687,"src":"862:4:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12684,"name":"bool","nodeType":"ElementaryTypeName","src":"862:4:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"861:6:68"},"scope":12688,"src":"792:76:68","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":12689,"src":"423:447:68","usedErrors":[],"usedEvents":[]}],"src":"115:756:68"},"id":68},"@openzeppelin/contracts/utils/math/Math.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","exportedSymbols":{"Math":[14309],"Panic":[12422],"SafeCast":[16074]},"id":14310,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":12690,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"103:24:69"},{"absolutePath":"@openzeppelin/contracts/utils/Panic.sol","file":"../Panic.sol","id":12692,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14310,"sourceUnit":12423,"src":"129:35:69","symbolAliases":[{"foreign":{"id":12691,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12422,"src":"137:5:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"./SafeCast.sol","id":12694,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14310,"sourceUnit":16075,"src":"165:40:69","symbolAliases":[{"foreign":{"id":12693,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"173:8:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Math","contractDependencies":[],"contractKind":"library","documentation":{"id":12695,"nodeType":"StructuredDocumentation","src":"207:73:69","text":" @dev Standard math utilities missing in the Solidity language."},"fullyImplemented":true,"id":14309,"linearizedBaseContracts":[14309],"name":"Math","nameLocation":"289:4:69","nodeType":"ContractDefinition","nodes":[{"canonicalName":"Math.Rounding","id":12700,"members":[{"id":12696,"name":"Floor","nameLocation":"324:5:69","nodeType":"EnumValue","src":"324:5:69"},{"id":12697,"name":"Ceil","nameLocation":"367:4:69","nodeType":"EnumValue","src":"367:4:69"},{"id":12698,"name":"Trunc","nameLocation":"409:5:69","nodeType":"EnumValue","src":"409:5:69"},{"id":12699,"name":"Expand","nameLocation":"439:6:69","nodeType":"EnumValue","src":"439:6:69"}],"name":"Rounding","nameLocation":"305:8:69","nodeType":"EnumDefinition","src":"300:169:69"},{"body":{"id":12713,"nodeType":"Block","src":"731:112:69","statements":[{"AST":{"nativeSrc":"766:71:69","nodeType":"YulBlock","src":"766:71:69","statements":[{"nativeSrc":"780:16:69","nodeType":"YulAssignment","src":"780:16:69","value":{"arguments":[{"name":"a","nativeSrc":"791:1:69","nodeType":"YulIdentifier","src":"791:1:69"},{"name":"b","nativeSrc":"794:1:69","nodeType":"YulIdentifier","src":"794:1:69"}],"functionName":{"name":"add","nativeSrc":"787:3:69","nodeType":"YulIdentifier","src":"787:3:69"},"nativeSrc":"787:9:69","nodeType":"YulFunctionCall","src":"787:9:69"},"variableNames":[{"name":"low","nativeSrc":"780:3:69","nodeType":"YulIdentifier","src":"780:3:69"}]},{"nativeSrc":"809:18:69","nodeType":"YulAssignment","src":"809:18:69","value":{"arguments":[{"name":"low","nativeSrc":"820:3:69","nodeType":"YulIdentifier","src":"820:3:69"},{"name":"a","nativeSrc":"825:1:69","nodeType":"YulIdentifier","src":"825:1:69"}],"functionName":{"name":"lt","nativeSrc":"817:2:69","nodeType":"YulIdentifier","src":"817:2:69"},"nativeSrc":"817:10:69","nodeType":"YulFunctionCall","src":"817:10:69"},"variableNames":[{"name":"high","nativeSrc":"809:4:69","nodeType":"YulIdentifier","src":"809:4:69"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12703,"isOffset":false,"isSlot":false,"src":"791:1:69","valueSize":1},{"declaration":12703,"isOffset":false,"isSlot":false,"src":"825:1:69","valueSize":1},{"declaration":12705,"isOffset":false,"isSlot":false,"src":"794:1:69","valueSize":1},{"declaration":12708,"isOffset":false,"isSlot":false,"src":"809:4:69","valueSize":1},{"declaration":12710,"isOffset":false,"isSlot":false,"src":"780:3:69","valueSize":1},{"declaration":12710,"isOffset":false,"isSlot":false,"src":"820:3:69","valueSize":1}],"flags":["memory-safe"],"id":12712,"nodeType":"InlineAssembly","src":"741:96:69"}]},"documentation":{"id":12701,"nodeType":"StructuredDocumentation","src":"475:163:69","text":" @dev Return the 512-bit addition of two uint256.\n The result is stored in two 256 variables such that sum = high * 2²⁵⁶ + low."},"id":12714,"implemented":true,"kind":"function","modifiers":[],"name":"add512","nameLocation":"652:6:69","nodeType":"FunctionDefinition","parameters":{"id":12706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12703,"mutability":"mutable","name":"a","nameLocation":"667:1:69","nodeType":"VariableDeclaration","scope":12714,"src":"659:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12702,"name":"uint256","nodeType":"ElementaryTypeName","src":"659:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12705,"mutability":"mutable","name":"b","nameLocation":"678:1:69","nodeType":"VariableDeclaration","scope":12714,"src":"670:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12704,"name":"uint256","nodeType":"ElementaryTypeName","src":"670:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"658:22:69"},"returnParameters":{"id":12711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12708,"mutability":"mutable","name":"high","nameLocation":"712:4:69","nodeType":"VariableDeclaration","scope":12714,"src":"704:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12707,"name":"uint256","nodeType":"ElementaryTypeName","src":"704:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12710,"mutability":"mutable","name":"low","nameLocation":"726:3:69","nodeType":"VariableDeclaration","scope":12714,"src":"718:11:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12709,"name":"uint256","nodeType":"ElementaryTypeName","src":"718:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"703:27:69"},"scope":14309,"src":"643:200:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12727,"nodeType":"Block","src":"1115:462:69","statements":[{"AST":{"nativeSrc":"1437:134:69","nodeType":"YulBlock","src":"1437:134:69","statements":[{"nativeSrc":"1451:30:69","nodeType":"YulVariableDeclaration","src":"1451:30:69","value":{"arguments":[{"name":"a","nativeSrc":"1468:1:69","nodeType":"YulIdentifier","src":"1468:1:69"},{"name":"b","nativeSrc":"1471:1:69","nodeType":"YulIdentifier","src":"1471:1:69"},{"arguments":[{"kind":"number","nativeSrc":"1478:1:69","nodeType":"YulLiteral","src":"1478:1:69","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"1474:3:69","nodeType":"YulIdentifier","src":"1474:3:69"},"nativeSrc":"1474:6:69","nodeType":"YulFunctionCall","src":"1474:6:69"}],"functionName":{"name":"mulmod","nativeSrc":"1461:6:69","nodeType":"YulIdentifier","src":"1461:6:69"},"nativeSrc":"1461:20:69","nodeType":"YulFunctionCall","src":"1461:20:69"},"variables":[{"name":"mm","nativeSrc":"1455:2:69","nodeType":"YulTypedName","src":"1455:2:69","type":""}]},{"nativeSrc":"1494:16:69","nodeType":"YulAssignment","src":"1494:16:69","value":{"arguments":[{"name":"a","nativeSrc":"1505:1:69","nodeType":"YulIdentifier","src":"1505:1:69"},{"name":"b","nativeSrc":"1508:1:69","nodeType":"YulIdentifier","src":"1508:1:69"}],"functionName":{"name":"mul","nativeSrc":"1501:3:69","nodeType":"YulIdentifier","src":"1501:3:69"},"nativeSrc":"1501:9:69","nodeType":"YulFunctionCall","src":"1501:9:69"},"variableNames":[{"name":"low","nativeSrc":"1494:3:69","nodeType":"YulIdentifier","src":"1494:3:69"}]},{"nativeSrc":"1523:38:69","nodeType":"YulAssignment","src":"1523:38:69","value":{"arguments":[{"arguments":[{"name":"mm","nativeSrc":"1539:2:69","nodeType":"YulIdentifier","src":"1539:2:69"},{"name":"low","nativeSrc":"1543:3:69","nodeType":"YulIdentifier","src":"1543:3:69"}],"functionName":{"name":"sub","nativeSrc":"1535:3:69","nodeType":"YulIdentifier","src":"1535:3:69"},"nativeSrc":"1535:12:69","nodeType":"YulFunctionCall","src":"1535:12:69"},{"arguments":[{"name":"mm","nativeSrc":"1552:2:69","nodeType":"YulIdentifier","src":"1552:2:69"},{"name":"low","nativeSrc":"1556:3:69","nodeType":"YulIdentifier","src":"1556:3:69"}],"functionName":{"name":"lt","nativeSrc":"1549:2:69","nodeType":"YulIdentifier","src":"1549:2:69"},"nativeSrc":"1549:11:69","nodeType":"YulFunctionCall","src":"1549:11:69"}],"functionName":{"name":"sub","nativeSrc":"1531:3:69","nodeType":"YulIdentifier","src":"1531:3:69"},"nativeSrc":"1531:30:69","nodeType":"YulFunctionCall","src":"1531:30:69"},"variableNames":[{"name":"high","nativeSrc":"1523:4:69","nodeType":"YulIdentifier","src":"1523:4:69"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12717,"isOffset":false,"isSlot":false,"src":"1468:1:69","valueSize":1},{"declaration":12717,"isOffset":false,"isSlot":false,"src":"1505:1:69","valueSize":1},{"declaration":12719,"isOffset":false,"isSlot":false,"src":"1471:1:69","valueSize":1},{"declaration":12719,"isOffset":false,"isSlot":false,"src":"1508:1:69","valueSize":1},{"declaration":12722,"isOffset":false,"isSlot":false,"src":"1523:4:69","valueSize":1},{"declaration":12724,"isOffset":false,"isSlot":false,"src":"1494:3:69","valueSize":1},{"declaration":12724,"isOffset":false,"isSlot":false,"src":"1543:3:69","valueSize":1},{"declaration":12724,"isOffset":false,"isSlot":false,"src":"1556:3:69","valueSize":1}],"flags":["memory-safe"],"id":12726,"nodeType":"InlineAssembly","src":"1412:159:69"}]},"documentation":{"id":12715,"nodeType":"StructuredDocumentation","src":"849:173:69","text":" @dev Return the 512-bit multiplication of two uint256.\n The result is stored in two 256 variables such that product = high * 2²⁵⁶ + low."},"id":12728,"implemented":true,"kind":"function","modifiers":[],"name":"mul512","nameLocation":"1036:6:69","nodeType":"FunctionDefinition","parameters":{"id":12720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12717,"mutability":"mutable","name":"a","nameLocation":"1051:1:69","nodeType":"VariableDeclaration","scope":12728,"src":"1043:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12716,"name":"uint256","nodeType":"ElementaryTypeName","src":"1043:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12719,"mutability":"mutable","name":"b","nameLocation":"1062:1:69","nodeType":"VariableDeclaration","scope":12728,"src":"1054:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12718,"name":"uint256","nodeType":"ElementaryTypeName","src":"1054:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1042:22:69"},"returnParameters":{"id":12725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12722,"mutability":"mutable","name":"high","nameLocation":"1096:4:69","nodeType":"VariableDeclaration","scope":12728,"src":"1088:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12721,"name":"uint256","nodeType":"ElementaryTypeName","src":"1088:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12724,"mutability":"mutable","name":"low","nameLocation":"1110:3:69","nodeType":"VariableDeclaration","scope":12728,"src":"1102:11:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12723,"name":"uint256","nodeType":"ElementaryTypeName","src":"1102:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1087:27:69"},"scope":14309,"src":"1027:550:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12762,"nodeType":"Block","src":"1784:149:69","statements":[{"id":12761,"nodeType":"UncheckedBlock","src":"1794:133:69","statements":[{"assignments":[12741],"declarations":[{"constant":false,"id":12741,"mutability":"mutable","name":"c","nameLocation":"1826:1:69","nodeType":"VariableDeclaration","scope":12761,"src":"1818:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12740,"name":"uint256","nodeType":"ElementaryTypeName","src":"1818:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12745,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12742,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12731,"src":"1830:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":12743,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12733,"src":"1834:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1830:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1818:17:69"},{"expression":{"id":12750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12746,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12736,"src":"1849:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12747,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12741,"src":"1859:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":12748,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12731,"src":"1864:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1859:6:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1849:16:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12751,"nodeType":"ExpressionStatement","src":"1849:16:69"},{"expression":{"id":12759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12752,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12738,"src":"1879:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12753,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12741,"src":"1888:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":12756,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12736,"src":"1908:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":12754,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"1892:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":12755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1901:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"1892:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":12757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1892:24:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1888:28:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1879:37:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12760,"nodeType":"ExpressionStatement","src":"1879:37:69"}]}]},"documentation":{"id":12729,"nodeType":"StructuredDocumentation","src":"1583:105:69","text":" @dev Returns the addition of two unsigned integers, with a success flag (no overflow)."},"id":12763,"implemented":true,"kind":"function","modifiers":[],"name":"tryAdd","nameLocation":"1702:6:69","nodeType":"FunctionDefinition","parameters":{"id":12734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12731,"mutability":"mutable","name":"a","nameLocation":"1717:1:69","nodeType":"VariableDeclaration","scope":12763,"src":"1709:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12730,"name":"uint256","nodeType":"ElementaryTypeName","src":"1709:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12733,"mutability":"mutable","name":"b","nameLocation":"1728:1:69","nodeType":"VariableDeclaration","scope":12763,"src":"1720:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12732,"name":"uint256","nodeType":"ElementaryTypeName","src":"1720:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1708:22:69"},"returnParameters":{"id":12739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12736,"mutability":"mutable","name":"success","nameLocation":"1759:7:69","nodeType":"VariableDeclaration","scope":12763,"src":"1754:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12735,"name":"bool","nodeType":"ElementaryTypeName","src":"1754:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12738,"mutability":"mutable","name":"result","nameLocation":"1776:6:69","nodeType":"VariableDeclaration","scope":12763,"src":"1768:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12737,"name":"uint256","nodeType":"ElementaryTypeName","src":"1768:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1753:30:69"},"scope":14309,"src":"1693:240:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12797,"nodeType":"Block","src":"2143:149:69","statements":[{"id":12796,"nodeType":"UncheckedBlock","src":"2153:133:69","statements":[{"assignments":[12776],"declarations":[{"constant":false,"id":12776,"mutability":"mutable","name":"c","nameLocation":"2185:1:69","nodeType":"VariableDeclaration","scope":12796,"src":"2177:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12775,"name":"uint256","nodeType":"ElementaryTypeName","src":"2177:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12780,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12777,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12766,"src":"2189:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":12778,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12768,"src":"2193:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2189:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2177:17:69"},{"expression":{"id":12785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12781,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12771,"src":"2208:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12782,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12776,"src":"2218:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":12783,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12766,"src":"2223:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2218:6:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2208:16:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12786,"nodeType":"ExpressionStatement","src":"2208:16:69"},{"expression":{"id":12794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12787,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12773,"src":"2238:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12788,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12776,"src":"2247:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":12791,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12771,"src":"2267:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":12789,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"2251:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":12790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2260:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"2251:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":12792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2251:24:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2247:28:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2238:37:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12795,"nodeType":"ExpressionStatement","src":"2238:37:69"}]}]},"documentation":{"id":12764,"nodeType":"StructuredDocumentation","src":"1939:108:69","text":" @dev Returns the subtraction of two unsigned integers, with a success flag (no overflow)."},"id":12798,"implemented":true,"kind":"function","modifiers":[],"name":"trySub","nameLocation":"2061:6:69","nodeType":"FunctionDefinition","parameters":{"id":12769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12766,"mutability":"mutable","name":"a","nameLocation":"2076:1:69","nodeType":"VariableDeclaration","scope":12798,"src":"2068:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12765,"name":"uint256","nodeType":"ElementaryTypeName","src":"2068:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12768,"mutability":"mutable","name":"b","nameLocation":"2087:1:69","nodeType":"VariableDeclaration","scope":12798,"src":"2079:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12767,"name":"uint256","nodeType":"ElementaryTypeName","src":"2079:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2067:22:69"},"returnParameters":{"id":12774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12771,"mutability":"mutable","name":"success","nameLocation":"2118:7:69","nodeType":"VariableDeclaration","scope":12798,"src":"2113:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12770,"name":"bool","nodeType":"ElementaryTypeName","src":"2113:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12773,"mutability":"mutable","name":"result","nameLocation":"2135:6:69","nodeType":"VariableDeclaration","scope":12798,"src":"2127:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12772,"name":"uint256","nodeType":"ElementaryTypeName","src":"2127:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2112:30:69"},"scope":14309,"src":"2052:240:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12827,"nodeType":"Block","src":"2505:391:69","statements":[{"id":12826,"nodeType":"UncheckedBlock","src":"2515:375:69","statements":[{"assignments":[12811],"declarations":[{"constant":false,"id":12811,"mutability":"mutable","name":"c","nameLocation":"2547:1:69","nodeType":"VariableDeclaration","scope":12826,"src":"2539:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12810,"name":"uint256","nodeType":"ElementaryTypeName","src":"2539:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12815,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12812,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12801,"src":"2551:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":12813,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"2555:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2551:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2539:17:69"},{"AST":{"nativeSrc":"2595:188:69","nodeType":"YulBlock","src":"2595:188:69","statements":[{"nativeSrc":"2727:42:69","nodeType":"YulAssignment","src":"2727:42:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"c","nativeSrc":"2748:1:69","nodeType":"YulIdentifier","src":"2748:1:69"},{"name":"a","nativeSrc":"2751:1:69","nodeType":"YulIdentifier","src":"2751:1:69"}],"functionName":{"name":"div","nativeSrc":"2744:3:69","nodeType":"YulIdentifier","src":"2744:3:69"},"nativeSrc":"2744:9:69","nodeType":"YulFunctionCall","src":"2744:9:69"},{"name":"b","nativeSrc":"2755:1:69","nodeType":"YulIdentifier","src":"2755:1:69"}],"functionName":{"name":"eq","nativeSrc":"2741:2:69","nodeType":"YulIdentifier","src":"2741:2:69"},"nativeSrc":"2741:16:69","nodeType":"YulFunctionCall","src":"2741:16:69"},{"arguments":[{"name":"a","nativeSrc":"2766:1:69","nodeType":"YulIdentifier","src":"2766:1:69"}],"functionName":{"name":"iszero","nativeSrc":"2759:6:69","nodeType":"YulIdentifier","src":"2759:6:69"},"nativeSrc":"2759:9:69","nodeType":"YulFunctionCall","src":"2759:9:69"}],"functionName":{"name":"or","nativeSrc":"2738:2:69","nodeType":"YulIdentifier","src":"2738:2:69"},"nativeSrc":"2738:31:69","nodeType":"YulFunctionCall","src":"2738:31:69"},"variableNames":[{"name":"success","nativeSrc":"2727:7:69","nodeType":"YulIdentifier","src":"2727:7:69"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12801,"isOffset":false,"isSlot":false,"src":"2751:1:69","valueSize":1},{"declaration":12801,"isOffset":false,"isSlot":false,"src":"2766:1:69","valueSize":1},{"declaration":12803,"isOffset":false,"isSlot":false,"src":"2755:1:69","valueSize":1},{"declaration":12811,"isOffset":false,"isSlot":false,"src":"2748:1:69","valueSize":1},{"declaration":12806,"isOffset":false,"isSlot":false,"src":"2727:7:69","valueSize":1}],"flags":["memory-safe"],"id":12816,"nodeType":"InlineAssembly","src":"2570:213:69"},{"expression":{"id":12824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12817,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12808,"src":"2842:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12818,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12811,"src":"2851:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":12821,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12806,"src":"2871:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":12819,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"2855:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":12820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2864:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"2855:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":12822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2855:24:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2851:28:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2842:37:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12825,"nodeType":"ExpressionStatement","src":"2842:37:69"}]}]},"documentation":{"id":12799,"nodeType":"StructuredDocumentation","src":"2298:111:69","text":" @dev Returns the multiplication of two unsigned integers, with a success flag (no overflow)."},"id":12828,"implemented":true,"kind":"function","modifiers":[],"name":"tryMul","nameLocation":"2423:6:69","nodeType":"FunctionDefinition","parameters":{"id":12804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12801,"mutability":"mutable","name":"a","nameLocation":"2438:1:69","nodeType":"VariableDeclaration","scope":12828,"src":"2430:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12800,"name":"uint256","nodeType":"ElementaryTypeName","src":"2430:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12803,"mutability":"mutable","name":"b","nameLocation":"2449:1:69","nodeType":"VariableDeclaration","scope":12828,"src":"2441:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12802,"name":"uint256","nodeType":"ElementaryTypeName","src":"2441:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2429:22:69"},"returnParameters":{"id":12809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12806,"mutability":"mutable","name":"success","nameLocation":"2480:7:69","nodeType":"VariableDeclaration","scope":12828,"src":"2475:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12805,"name":"bool","nodeType":"ElementaryTypeName","src":"2475:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12808,"mutability":"mutable","name":"result","nameLocation":"2497:6:69","nodeType":"VariableDeclaration","scope":12828,"src":"2489:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12807,"name":"uint256","nodeType":"ElementaryTypeName","src":"2489:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2474:30:69"},"scope":14309,"src":"2414:482:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12848,"nodeType":"Block","src":"3111:231:69","statements":[{"id":12847,"nodeType":"UncheckedBlock","src":"3121:215:69","statements":[{"expression":{"id":12844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12840,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12836,"src":"3145:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12841,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12833,"src":"3155:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3159:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3155:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3145:15:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12845,"nodeType":"ExpressionStatement","src":"3145:15:69"},{"AST":{"nativeSrc":"3199:127:69","nodeType":"YulBlock","src":"3199:127:69","statements":[{"nativeSrc":"3293:19:69","nodeType":"YulAssignment","src":"3293:19:69","value":{"arguments":[{"name":"a","nativeSrc":"3307:1:69","nodeType":"YulIdentifier","src":"3307:1:69"},{"name":"b","nativeSrc":"3310:1:69","nodeType":"YulIdentifier","src":"3310:1:69"}],"functionName":{"name":"div","nativeSrc":"3303:3:69","nodeType":"YulIdentifier","src":"3303:3:69"},"nativeSrc":"3303:9:69","nodeType":"YulFunctionCall","src":"3303:9:69"},"variableNames":[{"name":"result","nativeSrc":"3293:6:69","nodeType":"YulIdentifier","src":"3293:6:69"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12831,"isOffset":false,"isSlot":false,"src":"3307:1:69","valueSize":1},{"declaration":12833,"isOffset":false,"isSlot":false,"src":"3310:1:69","valueSize":1},{"declaration":12838,"isOffset":false,"isSlot":false,"src":"3293:6:69","valueSize":1}],"flags":["memory-safe"],"id":12846,"nodeType":"InlineAssembly","src":"3174:152:69"}]}]},"documentation":{"id":12829,"nodeType":"StructuredDocumentation","src":"2902:113:69","text":" @dev Returns the division of two unsigned integers, with a success flag (no division by zero)."},"id":12849,"implemented":true,"kind":"function","modifiers":[],"name":"tryDiv","nameLocation":"3029:6:69","nodeType":"FunctionDefinition","parameters":{"id":12834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12831,"mutability":"mutable","name":"a","nameLocation":"3044:1:69","nodeType":"VariableDeclaration","scope":12849,"src":"3036:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12830,"name":"uint256","nodeType":"ElementaryTypeName","src":"3036:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12833,"mutability":"mutable","name":"b","nameLocation":"3055:1:69","nodeType":"VariableDeclaration","scope":12849,"src":"3047:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12832,"name":"uint256","nodeType":"ElementaryTypeName","src":"3047:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3035:22:69"},"returnParameters":{"id":12839,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12836,"mutability":"mutable","name":"success","nameLocation":"3086:7:69","nodeType":"VariableDeclaration","scope":12849,"src":"3081:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12835,"name":"bool","nodeType":"ElementaryTypeName","src":"3081:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12838,"mutability":"mutable","name":"result","nameLocation":"3103:6:69","nodeType":"VariableDeclaration","scope":12849,"src":"3095:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12837,"name":"uint256","nodeType":"ElementaryTypeName","src":"3095:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3080:30:69"},"scope":14309,"src":"3020:322:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12869,"nodeType":"Block","src":"3567:231:69","statements":[{"id":12868,"nodeType":"UncheckedBlock","src":"3577:215:69","statements":[{"expression":{"id":12865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12861,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12857,"src":"3601:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12862,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12854,"src":"3611:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12863,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3615:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3611:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3601:15:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12866,"nodeType":"ExpressionStatement","src":"3601:15:69"},{"AST":{"nativeSrc":"3655:127:69","nodeType":"YulBlock","src":"3655:127:69","statements":[{"nativeSrc":"3749:19:69","nodeType":"YulAssignment","src":"3749:19:69","value":{"arguments":[{"name":"a","nativeSrc":"3763:1:69","nodeType":"YulIdentifier","src":"3763:1:69"},{"name":"b","nativeSrc":"3766:1:69","nodeType":"YulIdentifier","src":"3766:1:69"}],"functionName":{"name":"mod","nativeSrc":"3759:3:69","nodeType":"YulIdentifier","src":"3759:3:69"},"nativeSrc":"3759:9:69","nodeType":"YulFunctionCall","src":"3759:9:69"},"variableNames":[{"name":"result","nativeSrc":"3749:6:69","nodeType":"YulIdentifier","src":"3749:6:69"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":12852,"isOffset":false,"isSlot":false,"src":"3763:1:69","valueSize":1},{"declaration":12854,"isOffset":false,"isSlot":false,"src":"3766:1:69","valueSize":1},{"declaration":12859,"isOffset":false,"isSlot":false,"src":"3749:6:69","valueSize":1}],"flags":["memory-safe"],"id":12867,"nodeType":"InlineAssembly","src":"3630:152:69"}]}]},"documentation":{"id":12850,"nodeType":"StructuredDocumentation","src":"3348:123:69","text":" @dev Returns the remainder of dividing two unsigned integers, with a success flag (no division by zero)."},"id":12870,"implemented":true,"kind":"function","modifiers":[],"name":"tryMod","nameLocation":"3485:6:69","nodeType":"FunctionDefinition","parameters":{"id":12855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12852,"mutability":"mutable","name":"a","nameLocation":"3500:1:69","nodeType":"VariableDeclaration","scope":12870,"src":"3492:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12851,"name":"uint256","nodeType":"ElementaryTypeName","src":"3492:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12854,"mutability":"mutable","name":"b","nameLocation":"3511:1:69","nodeType":"VariableDeclaration","scope":12870,"src":"3503:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12853,"name":"uint256","nodeType":"ElementaryTypeName","src":"3503:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3491:22:69"},"returnParameters":{"id":12860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12857,"mutability":"mutable","name":"success","nameLocation":"3542:7:69","nodeType":"VariableDeclaration","scope":12870,"src":"3537:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12856,"name":"bool","nodeType":"ElementaryTypeName","src":"3537:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12859,"mutability":"mutable","name":"result","nameLocation":"3559:6:69","nodeType":"VariableDeclaration","scope":12870,"src":"3551:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12858,"name":"uint256","nodeType":"ElementaryTypeName","src":"3551:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3536:30:69"},"scope":14309,"src":"3476:322:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12899,"nodeType":"Block","src":"3989:122:69","statements":[{"assignments":[12881,12883],"declarations":[{"constant":false,"id":12881,"mutability":"mutable","name":"success","nameLocation":"4005:7:69","nodeType":"VariableDeclaration","scope":12899,"src":"4000:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12880,"name":"bool","nodeType":"ElementaryTypeName","src":"4000:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12883,"mutability":"mutable","name":"result","nameLocation":"4022:6:69","nodeType":"VariableDeclaration","scope":12899,"src":"4014:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12882,"name":"uint256","nodeType":"ElementaryTypeName","src":"4014:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12888,"initialValue":{"arguments":[{"id":12885,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12873,"src":"4039:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12886,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12875,"src":"4042:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12884,"name":"tryAdd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12763,"src":"4032:6:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (bool,uint256)"}},"id":12887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4032:12:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"3999:45:69"},{"expression":{"arguments":[{"id":12890,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12881,"src":"4069:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":12891,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12883,"src":"4078:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"arguments":[{"id":12894,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4091:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12893,"name":"uint256","nodeType":"ElementaryTypeName","src":"4091:7:69","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":12892,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4086:4:69","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12895,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4086:13:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":12896,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4100:3:69","memberName":"max","nodeType":"MemberAccess","src":"4086:17:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12889,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12977,"src":"4061:7:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":12897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4061:43:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12879,"id":12898,"nodeType":"Return","src":"4054:50:69"}]},"documentation":{"id":12871,"nodeType":"StructuredDocumentation","src":"3804:103:69","text":" @dev Unsigned saturating addition, bounds to `2²⁵⁶ - 1` instead of overflowing."},"id":12900,"implemented":true,"kind":"function","modifiers":[],"name":"saturatingAdd","nameLocation":"3921:13:69","nodeType":"FunctionDefinition","parameters":{"id":12876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12873,"mutability":"mutable","name":"a","nameLocation":"3943:1:69","nodeType":"VariableDeclaration","scope":12900,"src":"3935:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12872,"name":"uint256","nodeType":"ElementaryTypeName","src":"3935:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12875,"mutability":"mutable","name":"b","nameLocation":"3954:1:69","nodeType":"VariableDeclaration","scope":12900,"src":"3946:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12874,"name":"uint256","nodeType":"ElementaryTypeName","src":"3946:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3934:22:69"},"returnParameters":{"id":12879,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12878,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12900,"src":"3980:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12877,"name":"uint256","nodeType":"ElementaryTypeName","src":"3980:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3979:9:69"},"scope":14309,"src":"3912:199:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12919,"nodeType":"Block","src":"4294:73:69","statements":[{"assignments":[null,12911],"declarations":[null,{"constant":false,"id":12911,"mutability":"mutable","name":"result","nameLocation":"4315:6:69","nodeType":"VariableDeclaration","scope":12919,"src":"4307:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12910,"name":"uint256","nodeType":"ElementaryTypeName","src":"4307:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12916,"initialValue":{"arguments":[{"id":12913,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12903,"src":"4332:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12914,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12905,"src":"4335:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12912,"name":"trySub","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12798,"src":"4325:6:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (bool,uint256)"}},"id":12915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4325:12:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4304:33:69"},{"expression":{"id":12917,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12911,"src":"4354:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12909,"id":12918,"nodeType":"Return","src":"4347:13:69"}]},"documentation":{"id":12901,"nodeType":"StructuredDocumentation","src":"4117:95:69","text":" @dev Unsigned saturating subtraction, bounds to zero instead of overflowing."},"id":12920,"implemented":true,"kind":"function","modifiers":[],"name":"saturatingSub","nameLocation":"4226:13:69","nodeType":"FunctionDefinition","parameters":{"id":12906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12903,"mutability":"mutable","name":"a","nameLocation":"4248:1:69","nodeType":"VariableDeclaration","scope":12920,"src":"4240:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12902,"name":"uint256","nodeType":"ElementaryTypeName","src":"4240:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12905,"mutability":"mutable","name":"b","nameLocation":"4259:1:69","nodeType":"VariableDeclaration","scope":12920,"src":"4251:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12904,"name":"uint256","nodeType":"ElementaryTypeName","src":"4251:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4239:22:69"},"returnParameters":{"id":12909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12908,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12920,"src":"4285:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12907,"name":"uint256","nodeType":"ElementaryTypeName","src":"4285:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4284:9:69"},"scope":14309,"src":"4217:150:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12949,"nodeType":"Block","src":"4564:122:69","statements":[{"assignments":[12931,12933],"declarations":[{"constant":false,"id":12931,"mutability":"mutable","name":"success","nameLocation":"4580:7:69","nodeType":"VariableDeclaration","scope":12949,"src":"4575:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12930,"name":"bool","nodeType":"ElementaryTypeName","src":"4575:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12933,"mutability":"mutable","name":"result","nameLocation":"4597:6:69","nodeType":"VariableDeclaration","scope":12949,"src":"4589:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12932,"name":"uint256","nodeType":"ElementaryTypeName","src":"4589:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12938,"initialValue":{"arguments":[{"id":12935,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12923,"src":"4614:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12936,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12925,"src":"4617:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12934,"name":"tryMul","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12828,"src":"4607:6:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (bool,uint256)"}},"id":12937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4607:12:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4574:45:69"},{"expression":{"arguments":[{"id":12940,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12931,"src":"4644:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":12941,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12933,"src":"4653:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"arguments":[{"id":12944,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4666:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12943,"name":"uint256","nodeType":"ElementaryTypeName","src":"4666:7:69","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":12942,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4661:4:69","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4661:13:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":12946,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4675:3:69","memberName":"max","nodeType":"MemberAccess","src":"4661:17:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12939,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12977,"src":"4636:7:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":12947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4636:43:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12929,"id":12948,"nodeType":"Return","src":"4629:50:69"}]},"documentation":{"id":12921,"nodeType":"StructuredDocumentation","src":"4373:109:69","text":" @dev Unsigned saturating multiplication, bounds to `2²⁵⁶ - 1` instead of overflowing."},"id":12950,"implemented":true,"kind":"function","modifiers":[],"name":"saturatingMul","nameLocation":"4496:13:69","nodeType":"FunctionDefinition","parameters":{"id":12926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12923,"mutability":"mutable","name":"a","nameLocation":"4518:1:69","nodeType":"VariableDeclaration","scope":12950,"src":"4510:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12922,"name":"uint256","nodeType":"ElementaryTypeName","src":"4510:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12925,"mutability":"mutable","name":"b","nameLocation":"4529:1:69","nodeType":"VariableDeclaration","scope":12950,"src":"4521:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12924,"name":"uint256","nodeType":"ElementaryTypeName","src":"4521:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4509:22:69"},"returnParameters":{"id":12929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12928,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12950,"src":"4555:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12927,"name":"uint256","nodeType":"ElementaryTypeName","src":"4555:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4554:9:69"},"scope":14309,"src":"4487:199:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12976,"nodeType":"Block","src":"5158:207:69","statements":[{"id":12975,"nodeType":"UncheckedBlock","src":"5168:191:69","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12962,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12957,"src":"5306:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12963,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12955,"src":"5312:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":12964,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12957,"src":"5316:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5312:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12966,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5311:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":12969,"name":"condition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12953,"src":"5337:9:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":12967,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"5321:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":12968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5330:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"5321:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":12970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5321:26:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5311:36:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12972,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5310:38:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5306:42:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12961,"id":12974,"nodeType":"Return","src":"5299:49:69"}]}]},"documentation":{"id":12951,"nodeType":"StructuredDocumentation","src":"4692:374:69","text":" @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n one branch when needed, making this function more expensive."},"id":12977,"implemented":true,"kind":"function","modifiers":[],"name":"ternary","nameLocation":"5080:7:69","nodeType":"FunctionDefinition","parameters":{"id":12958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12953,"mutability":"mutable","name":"condition","nameLocation":"5093:9:69","nodeType":"VariableDeclaration","scope":12977,"src":"5088:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12952,"name":"bool","nodeType":"ElementaryTypeName","src":"5088:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12955,"mutability":"mutable","name":"a","nameLocation":"5112:1:69","nodeType":"VariableDeclaration","scope":12977,"src":"5104:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12954,"name":"uint256","nodeType":"ElementaryTypeName","src":"5104:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12957,"mutability":"mutable","name":"b","nameLocation":"5123:1:69","nodeType":"VariableDeclaration","scope":12977,"src":"5115:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12956,"name":"uint256","nodeType":"ElementaryTypeName","src":"5115:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5087:38:69"},"returnParameters":{"id":12961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12960,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12977,"src":"5149:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12959,"name":"uint256","nodeType":"ElementaryTypeName","src":"5149:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5148:9:69"},"scope":14309,"src":"5071:294:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12995,"nodeType":"Block","src":"5502:44:69","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12988,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12980,"src":"5527:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":12989,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12982,"src":"5531:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5527:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":12991,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12980,"src":"5534:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12992,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12982,"src":"5537:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12987,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12977,"src":"5519:7:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":12993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5519:20:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12986,"id":12994,"nodeType":"Return","src":"5512:27:69"}]},"documentation":{"id":12978,"nodeType":"StructuredDocumentation","src":"5371:59:69","text":" @dev Returns the largest of two numbers."},"id":12996,"implemented":true,"kind":"function","modifiers":[],"name":"max","nameLocation":"5444:3:69","nodeType":"FunctionDefinition","parameters":{"id":12983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12980,"mutability":"mutable","name":"a","nameLocation":"5456:1:69","nodeType":"VariableDeclaration","scope":12996,"src":"5448:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12979,"name":"uint256","nodeType":"ElementaryTypeName","src":"5448:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12982,"mutability":"mutable","name":"b","nameLocation":"5467:1:69","nodeType":"VariableDeclaration","scope":12996,"src":"5459:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12981,"name":"uint256","nodeType":"ElementaryTypeName","src":"5459:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5447:22:69"},"returnParameters":{"id":12986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12985,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12996,"src":"5493:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12984,"name":"uint256","nodeType":"ElementaryTypeName","src":"5493:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5492:9:69"},"scope":14309,"src":"5435:111:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13014,"nodeType":"Block","src":"5684:44:69","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13007,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12999,"src":"5709:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":13008,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13001,"src":"5713:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5709:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":13010,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12999,"src":"5716:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13011,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13001,"src":"5719:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13006,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12977,"src":"5701:7:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":13012,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5701:20:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13005,"id":13013,"nodeType":"Return","src":"5694:27:69"}]},"documentation":{"id":12997,"nodeType":"StructuredDocumentation","src":"5552:60:69","text":" @dev Returns the smallest of two numbers."},"id":13015,"implemented":true,"kind":"function","modifiers":[],"name":"min","nameLocation":"5626:3:69","nodeType":"FunctionDefinition","parameters":{"id":13002,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12999,"mutability":"mutable","name":"a","nameLocation":"5638:1:69","nodeType":"VariableDeclaration","scope":13015,"src":"5630:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12998,"name":"uint256","nodeType":"ElementaryTypeName","src":"5630:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13001,"mutability":"mutable","name":"b","nameLocation":"5649:1:69","nodeType":"VariableDeclaration","scope":13015,"src":"5641:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13000,"name":"uint256","nodeType":"ElementaryTypeName","src":"5641:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5629:22:69"},"returnParameters":{"id":13005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13004,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13015,"src":"5675:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13003,"name":"uint256","nodeType":"ElementaryTypeName","src":"5675:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5674:9:69"},"scope":14309,"src":"5617:111:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13037,"nodeType":"Block","src":"5912:82:69","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13025,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13018,"src":"5967:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13026,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13020,"src":"5971:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5967:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13028,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5966:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13029,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13018,"src":"5977:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":13030,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13020,"src":"5981:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5977:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13032,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5976:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":13033,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5986:1:69","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"5976:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5966:21:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13024,"id":13036,"nodeType":"Return","src":"5959:28:69"}]},"documentation":{"id":13016,"nodeType":"StructuredDocumentation","src":"5734:102:69","text":" @dev Returns the average of two numbers. The result is rounded towards\n zero."},"id":13038,"implemented":true,"kind":"function","modifiers":[],"name":"average","nameLocation":"5850:7:69","nodeType":"FunctionDefinition","parameters":{"id":13021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13018,"mutability":"mutable","name":"a","nameLocation":"5866:1:69","nodeType":"VariableDeclaration","scope":13038,"src":"5858:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13017,"name":"uint256","nodeType":"ElementaryTypeName","src":"5858:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13020,"mutability":"mutable","name":"b","nameLocation":"5877:1:69","nodeType":"VariableDeclaration","scope":13038,"src":"5869:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13019,"name":"uint256","nodeType":"ElementaryTypeName","src":"5869:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5857:22:69"},"returnParameters":{"id":13024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13023,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13038,"src":"5903:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13022,"name":"uint256","nodeType":"ElementaryTypeName","src":"5903:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5902:9:69"},"scope":14309,"src":"5841:153:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13078,"nodeType":"Block","src":"6286:633:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13048,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13043,"src":"6300:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13049,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6305:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6300:6:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13059,"nodeType":"IfStatement","src":"6296:150:69","trueBody":{"id":13058,"nodeType":"Block","src":"6308:138:69","statements":[{"expression":{"arguments":[{"expression":{"id":13054,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12422,"src":"6412:5:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12422_$","typeString":"type(library Panic)"}},"id":13055,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6418:16:69","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":12389,"src":"6412:22:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13051,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12422,"src":"6400:5:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12422_$","typeString":"type(library Panic)"}},"id":13053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6406:5:69","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":12421,"src":"6400:11:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":13056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6400:35:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13057,"nodeType":"ExpressionStatement","src":"6400:35:69"}]}},{"id":13077,"nodeType":"UncheckedBlock","src":"6829:84:69","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13062,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13041,"src":"6876:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":13063,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6880:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6876:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13060,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"6860:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":13061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6869:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"6860:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6860:22:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13066,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13041,"src":"6887:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":13067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6891:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6887:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13069,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6886:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13070,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13043,"src":"6896:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6886:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":13072,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6900:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6886:15:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13074,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6885:17:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6860:42:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13047,"id":13076,"nodeType":"Return","src":"6853:49:69"}]}]},"documentation":{"id":13039,"nodeType":"StructuredDocumentation","src":"6000:210:69","text":" @dev Returns the ceiling of the division of two numbers.\n This differs from standard division with `/` in that it rounds towards infinity instead\n of rounding towards zero."},"id":13079,"implemented":true,"kind":"function","modifiers":[],"name":"ceilDiv","nameLocation":"6224:7:69","nodeType":"FunctionDefinition","parameters":{"id":13044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13041,"mutability":"mutable","name":"a","nameLocation":"6240:1:69","nodeType":"VariableDeclaration","scope":13079,"src":"6232:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13040,"name":"uint256","nodeType":"ElementaryTypeName","src":"6232:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13043,"mutability":"mutable","name":"b","nameLocation":"6251:1:69","nodeType":"VariableDeclaration","scope":13079,"src":"6243:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13042,"name":"uint256","nodeType":"ElementaryTypeName","src":"6243:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6231:22:69"},"returnParameters":{"id":13047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13046,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13079,"src":"6277:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13045,"name":"uint256","nodeType":"ElementaryTypeName","src":"6277:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6276:9:69"},"scope":14309,"src":"6215:704:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13214,"nodeType":"Block","src":"7340:3585:69","statements":[{"id":13213,"nodeType":"UncheckedBlock","src":"7350:3569:69","statements":[{"assignments":[13092,13094],"declarations":[{"constant":false,"id":13092,"mutability":"mutable","name":"high","nameLocation":"7383:4:69","nodeType":"VariableDeclaration","scope":13213,"src":"7375:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13091,"name":"uint256","nodeType":"ElementaryTypeName","src":"7375:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13094,"mutability":"mutable","name":"low","nameLocation":"7397:3:69","nodeType":"VariableDeclaration","scope":13213,"src":"7389:11:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13093,"name":"uint256","nodeType":"ElementaryTypeName","src":"7389:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13099,"initialValue":{"arguments":[{"id":13096,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13082,"src":"7411:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13097,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13084,"src":"7414:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13095,"name":"mul512","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12728,"src":"7404:6:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256,uint256)"}},"id":13098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7404:12:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"7374:42:69"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13100,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13092,"src":"7498:4:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13101,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7506:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7498:9:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13108,"nodeType":"IfStatement","src":"7494:365:69","trueBody":{"id":13107,"nodeType":"Block","src":"7509:350:69","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13103,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13094,"src":"7827:3:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13104,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13086,"src":"7833:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7827:17:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13090,"id":13106,"nodeType":"Return","src":"7820:24:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13109,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13086,"src":"7969:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":13110,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13092,"src":"7984:4:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7969:19:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13127,"nodeType":"IfStatement","src":"7965:142:69","trueBody":{"id":13126,"nodeType":"Block","src":"7990:117:69","statements":[{"expression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13116,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13086,"src":"8028:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8043:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8028:16:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":13119,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12422,"src":"8046:5:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12422_$","typeString":"type(library Panic)"}},"id":13120,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8052:16:69","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":12389,"src":"8046:22:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13121,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12422,"src":"8070:5:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12422_$","typeString":"type(library Panic)"}},"id":13122,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8076:14:69","memberName":"UNDER_OVERFLOW","nodeType":"MemberAccess","referencedDeclaration":12385,"src":"8070:20:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13115,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12977,"src":"8020:7:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":13123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8020:71:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13112,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12422,"src":"8008:5:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12422_$","typeString":"type(library Panic)"}},"id":13114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8014:5:69","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":12421,"src":"8008:11:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":13124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8008:84:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13125,"nodeType":"ExpressionStatement","src":"8008:84:69"}]}},{"assignments":[13129],"declarations":[{"constant":false,"id":13129,"mutability":"mutable","name":"remainder","nameLocation":"8367:9:69","nodeType":"VariableDeclaration","scope":13213,"src":"8359:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13128,"name":"uint256","nodeType":"ElementaryTypeName","src":"8359:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13130,"nodeType":"VariableDeclarationStatement","src":"8359:17:69"},{"AST":{"nativeSrc":"8415:283:69","nodeType":"YulBlock","src":"8415:283:69","statements":[{"nativeSrc":"8484:38:69","nodeType":"YulAssignment","src":"8484:38:69","value":{"arguments":[{"name":"x","nativeSrc":"8504:1:69","nodeType":"YulIdentifier","src":"8504:1:69"},{"name":"y","nativeSrc":"8507:1:69","nodeType":"YulIdentifier","src":"8507:1:69"},{"name":"denominator","nativeSrc":"8510:11:69","nodeType":"YulIdentifier","src":"8510:11:69"}],"functionName":{"name":"mulmod","nativeSrc":"8497:6:69","nodeType":"YulIdentifier","src":"8497:6:69"},"nativeSrc":"8497:25:69","nodeType":"YulFunctionCall","src":"8497:25:69"},"variableNames":[{"name":"remainder","nativeSrc":"8484:9:69","nodeType":"YulIdentifier","src":"8484:9:69"}]},{"nativeSrc":"8604:37:69","nodeType":"YulAssignment","src":"8604:37:69","value":{"arguments":[{"name":"high","nativeSrc":"8616:4:69","nodeType":"YulIdentifier","src":"8616:4:69"},{"arguments":[{"name":"remainder","nativeSrc":"8625:9:69","nodeType":"YulIdentifier","src":"8625:9:69"},{"name":"low","nativeSrc":"8636:3:69","nodeType":"YulIdentifier","src":"8636:3:69"}],"functionName":{"name":"gt","nativeSrc":"8622:2:69","nodeType":"YulIdentifier","src":"8622:2:69"},"nativeSrc":"8622:18:69","nodeType":"YulFunctionCall","src":"8622:18:69"}],"functionName":{"name":"sub","nativeSrc":"8612:3:69","nodeType":"YulIdentifier","src":"8612:3:69"},"nativeSrc":"8612:29:69","nodeType":"YulFunctionCall","src":"8612:29:69"},"variableNames":[{"name":"high","nativeSrc":"8604:4:69","nodeType":"YulIdentifier","src":"8604:4:69"}]},{"nativeSrc":"8658:26:69","nodeType":"YulAssignment","src":"8658:26:69","value":{"arguments":[{"name":"low","nativeSrc":"8669:3:69","nodeType":"YulIdentifier","src":"8669:3:69"},{"name":"remainder","nativeSrc":"8674:9:69","nodeType":"YulIdentifier","src":"8674:9:69"}],"functionName":{"name":"sub","nativeSrc":"8665:3:69","nodeType":"YulIdentifier","src":"8665:3:69"},"nativeSrc":"8665:19:69","nodeType":"YulFunctionCall","src":"8665:19:69"},"variableNames":[{"name":"low","nativeSrc":"8658:3:69","nodeType":"YulIdentifier","src":"8658:3:69"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":13086,"isOffset":false,"isSlot":false,"src":"8510:11:69","valueSize":1},{"declaration":13092,"isOffset":false,"isSlot":false,"src":"8604:4:69","valueSize":1},{"declaration":13092,"isOffset":false,"isSlot":false,"src":"8616:4:69","valueSize":1},{"declaration":13094,"isOffset":false,"isSlot":false,"src":"8636:3:69","valueSize":1},{"declaration":13094,"isOffset":false,"isSlot":false,"src":"8658:3:69","valueSize":1},{"declaration":13094,"isOffset":false,"isSlot":false,"src":"8669:3:69","valueSize":1},{"declaration":13129,"isOffset":false,"isSlot":false,"src":"8484:9:69","valueSize":1},{"declaration":13129,"isOffset":false,"isSlot":false,"src":"8625:9:69","valueSize":1},{"declaration":13129,"isOffset":false,"isSlot":false,"src":"8674:9:69","valueSize":1},{"declaration":13082,"isOffset":false,"isSlot":false,"src":"8504:1:69","valueSize":1},{"declaration":13084,"isOffset":false,"isSlot":false,"src":"8507:1:69","valueSize":1}],"flags":["memory-safe"],"id":13131,"nodeType":"InlineAssembly","src":"8390:308:69"},{"assignments":[13133],"declarations":[{"constant":false,"id":13133,"mutability":"mutable","name":"twos","nameLocation":"8910:4:69","nodeType":"VariableDeclaration","scope":13213,"src":"8902:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13132,"name":"uint256","nodeType":"ElementaryTypeName","src":"8902:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13140,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13134,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13086,"src":"8917:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"30","id":13135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8932:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13136,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13086,"src":"8936:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8932:15:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13138,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8931:17:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8917:31:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8902:46:69"},{"AST":{"nativeSrc":"8987:359:69","nodeType":"YulBlock","src":"8987:359:69","statements":[{"nativeSrc":"9052:37:69","nodeType":"YulAssignment","src":"9052:37:69","value":{"arguments":[{"name":"denominator","nativeSrc":"9071:11:69","nodeType":"YulIdentifier","src":"9071:11:69"},{"name":"twos","nativeSrc":"9084:4:69","nodeType":"YulIdentifier","src":"9084:4:69"}],"functionName":{"name":"div","nativeSrc":"9067:3:69","nodeType":"YulIdentifier","src":"9067:3:69"},"nativeSrc":"9067:22:69","nodeType":"YulFunctionCall","src":"9067:22:69"},"variableNames":[{"name":"denominator","nativeSrc":"9052:11:69","nodeType":"YulIdentifier","src":"9052:11:69"}]},{"nativeSrc":"9153:21:69","nodeType":"YulAssignment","src":"9153:21:69","value":{"arguments":[{"name":"low","nativeSrc":"9164:3:69","nodeType":"YulIdentifier","src":"9164:3:69"},{"name":"twos","nativeSrc":"9169:4:69","nodeType":"YulIdentifier","src":"9169:4:69"}],"functionName":{"name":"div","nativeSrc":"9160:3:69","nodeType":"YulIdentifier","src":"9160:3:69"},"nativeSrc":"9160:14:69","nodeType":"YulFunctionCall","src":"9160:14:69"},"variableNames":[{"name":"low","nativeSrc":"9153:3:69","nodeType":"YulIdentifier","src":"9153:3:69"}]},{"nativeSrc":"9293:39:69","nodeType":"YulAssignment","src":"9293:39:69","value":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"9313:1:69","nodeType":"YulLiteral","src":"9313:1:69","type":"","value":"0"},{"name":"twos","nativeSrc":"9316:4:69","nodeType":"YulIdentifier","src":"9316:4:69"}],"functionName":{"name":"sub","nativeSrc":"9309:3:69","nodeType":"YulIdentifier","src":"9309:3:69"},"nativeSrc":"9309:12:69","nodeType":"YulFunctionCall","src":"9309:12:69"},{"name":"twos","nativeSrc":"9323:4:69","nodeType":"YulIdentifier","src":"9323:4:69"}],"functionName":{"name":"div","nativeSrc":"9305:3:69","nodeType":"YulIdentifier","src":"9305:3:69"},"nativeSrc":"9305:23:69","nodeType":"YulFunctionCall","src":"9305:23:69"},{"kind":"number","nativeSrc":"9330:1:69","nodeType":"YulLiteral","src":"9330:1:69","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"9301:3:69","nodeType":"YulIdentifier","src":"9301:3:69"},"nativeSrc":"9301:31:69","nodeType":"YulFunctionCall","src":"9301:31:69"},"variableNames":[{"name":"twos","nativeSrc":"9293:4:69","nodeType":"YulIdentifier","src":"9293:4:69"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":13086,"isOffset":false,"isSlot":false,"src":"9052:11:69","valueSize":1},{"declaration":13086,"isOffset":false,"isSlot":false,"src":"9071:11:69","valueSize":1},{"declaration":13094,"isOffset":false,"isSlot":false,"src":"9153:3:69","valueSize":1},{"declaration":13094,"isOffset":false,"isSlot":false,"src":"9164:3:69","valueSize":1},{"declaration":13133,"isOffset":false,"isSlot":false,"src":"9084:4:69","valueSize":1},{"declaration":13133,"isOffset":false,"isSlot":false,"src":"9169:4:69","valueSize":1},{"declaration":13133,"isOffset":false,"isSlot":false,"src":"9293:4:69","valueSize":1},{"declaration":13133,"isOffset":false,"isSlot":false,"src":"9316:4:69","valueSize":1},{"declaration":13133,"isOffset":false,"isSlot":false,"src":"9323:4:69","valueSize":1}],"flags":["memory-safe"],"id":13141,"nodeType":"InlineAssembly","src":"8962:384:69"},{"expression":{"id":13146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13142,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13094,"src":"9409:3:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13143,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13092,"src":"9416:4:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13144,"name":"twos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13133,"src":"9423:4:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9416:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9409:18:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13147,"nodeType":"ExpressionStatement","src":"9409:18:69"},{"assignments":[13149],"declarations":[{"constant":false,"id":13149,"mutability":"mutable","name":"inverse","nameLocation":"9770:7:69","nodeType":"VariableDeclaration","scope":13213,"src":"9762:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13148,"name":"uint256","nodeType":"ElementaryTypeName","src":"9762:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13156,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"33","id":13150,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9781:1:69","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13151,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13086,"src":"9785:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9781:15:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13153,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9780:17:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"hexValue":"32","id":13154,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9800:1:69","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"9780:21:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9762:39:69"},{"expression":{"id":13163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13157,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13149,"src":"10018:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":13158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10029:1:69","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13159,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13086,"src":"10033:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13160,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13149,"src":"10047:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10033:21:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10029:25:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10018:36:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13164,"nodeType":"ExpressionStatement","src":"10018:36:69"},{"expression":{"id":13171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13165,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13149,"src":"10088:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":13166,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10099:1:69","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13167,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13086,"src":"10103:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13168,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13149,"src":"10117:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10103:21:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10099:25:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10088:36:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13172,"nodeType":"ExpressionStatement","src":"10088:36:69"},{"expression":{"id":13179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13173,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13149,"src":"10160:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":13174,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10171:1:69","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13175,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13086,"src":"10175:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13176,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13149,"src":"10189:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10175:21:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10171:25:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10160:36:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13180,"nodeType":"ExpressionStatement","src":"10160:36:69"},{"expression":{"id":13187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13181,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13149,"src":"10231:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":13182,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10242:1:69","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13183,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13086,"src":"10246:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13184,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13149,"src":"10260:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10246:21:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10242:25:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10231:36:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13188,"nodeType":"ExpressionStatement","src":"10231:36:69"},{"expression":{"id":13195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13189,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13149,"src":"10304:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":13190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10315:1:69","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13191,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13086,"src":"10319:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13192,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13149,"src":"10333:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10319:21:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10315:25:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10304:36:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13196,"nodeType":"ExpressionStatement","src":"10304:36:69"},{"expression":{"id":13203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13197,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13149,"src":"10378:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":13198,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10389:1:69","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13199,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13086,"src":"10393:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13200,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13149,"src":"10407:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10393:21:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10389:25:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10378:36:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13204,"nodeType":"ExpressionStatement","src":"10378:36:69"},{"expression":{"id":13209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13205,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13089,"src":"10859:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13206,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13094,"src":"10868:3:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13207,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13149,"src":"10874:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10868:13:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10859:22:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13210,"nodeType":"ExpressionStatement","src":"10859:22:69"},{"expression":{"id":13211,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13089,"src":"10902:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13090,"id":13212,"nodeType":"Return","src":"10895:13:69"}]}]},"documentation":{"id":13080,"nodeType":"StructuredDocumentation","src":"6925:312:69","text":" @dev Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n denominator == 0.\n Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n Uniswap Labs also under MIT license."},"id":13215,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"7251:6:69","nodeType":"FunctionDefinition","parameters":{"id":13087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13082,"mutability":"mutable","name":"x","nameLocation":"7266:1:69","nodeType":"VariableDeclaration","scope":13215,"src":"7258:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13081,"name":"uint256","nodeType":"ElementaryTypeName","src":"7258:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13084,"mutability":"mutable","name":"y","nameLocation":"7277:1:69","nodeType":"VariableDeclaration","scope":13215,"src":"7269:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13083,"name":"uint256","nodeType":"ElementaryTypeName","src":"7269:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13086,"mutability":"mutable","name":"denominator","nameLocation":"7288:11:69","nodeType":"VariableDeclaration","scope":13215,"src":"7280:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13085,"name":"uint256","nodeType":"ElementaryTypeName","src":"7280:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7257:43:69"},"returnParameters":{"id":13090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13089,"mutability":"mutable","name":"result","nameLocation":"7332:6:69","nodeType":"VariableDeclaration","scope":13215,"src":"7324:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13088,"name":"uint256","nodeType":"ElementaryTypeName","src":"7324:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7323:16:69"},"scope":14309,"src":"7242:3683:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13251,"nodeType":"Block","src":"11164:128:69","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13231,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13218,"src":"11188:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13232,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13220,"src":"11191:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13233,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13222,"src":"11194:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13230,"name":"mulDiv","nodeType":"Identifier","overloadedDeclarations":[13215,13252],"referencedDeclaration":13215,"src":"11181:6:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":13234,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11181:25:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13238,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13225,"src":"11242:8:69","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}],"id":13237,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14308,"src":"11225:16:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$12700_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":13239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11225:26:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13241,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13218,"src":"11262:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13242,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13220,"src":"11265:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13243,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13222,"src":"11268:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13240,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"11255:6:69","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":13244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11255:25:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":13245,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11283:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11255:29:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11225:59:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13235,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"11209:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":13236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11218:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"11209:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11209:76:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11181:104:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13229,"id":13250,"nodeType":"Return","src":"11174:111:69"}]},"documentation":{"id":13216,"nodeType":"StructuredDocumentation","src":"10931:118:69","text":" @dev Calculates x * y / denominator with full precision, following the selected rounding direction."},"id":13252,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"11063:6:69","nodeType":"FunctionDefinition","parameters":{"id":13226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13218,"mutability":"mutable","name":"x","nameLocation":"11078:1:69","nodeType":"VariableDeclaration","scope":13252,"src":"11070:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13217,"name":"uint256","nodeType":"ElementaryTypeName","src":"11070:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13220,"mutability":"mutable","name":"y","nameLocation":"11089:1:69","nodeType":"VariableDeclaration","scope":13252,"src":"11081:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13219,"name":"uint256","nodeType":"ElementaryTypeName","src":"11081:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13222,"mutability":"mutable","name":"denominator","nameLocation":"11100:11:69","nodeType":"VariableDeclaration","scope":13252,"src":"11092:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13221,"name":"uint256","nodeType":"ElementaryTypeName","src":"11092:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13225,"mutability":"mutable","name":"rounding","nameLocation":"11122:8:69","nodeType":"VariableDeclaration","scope":13252,"src":"11113:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"},"typeName":{"id":13224,"nodeType":"UserDefinedTypeName","pathNode":{"id":13223,"name":"Rounding","nameLocations":["11113:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":12700,"src":"11113:8:69"},"referencedDeclaration":12700,"src":"11113:8:69","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"11069:62:69"},"returnParameters":{"id":13229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13228,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13252,"src":"11155:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13227,"name":"uint256","nodeType":"ElementaryTypeName","src":"11155:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11154:9:69"},"scope":14309,"src":"11054:238:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13301,"nodeType":"Block","src":"11500:245:69","statements":[{"id":13300,"nodeType":"UncheckedBlock","src":"11510:229:69","statements":[{"assignments":[13265,13267],"declarations":[{"constant":false,"id":13265,"mutability":"mutable","name":"high","nameLocation":"11543:4:69","nodeType":"VariableDeclaration","scope":13300,"src":"11535:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13264,"name":"uint256","nodeType":"ElementaryTypeName","src":"11535:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13267,"mutability":"mutable","name":"low","nameLocation":"11557:3:69","nodeType":"VariableDeclaration","scope":13300,"src":"11549:11:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13266,"name":"uint256","nodeType":"ElementaryTypeName","src":"11549:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13272,"initialValue":{"arguments":[{"id":13269,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13255,"src":"11571:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13270,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13257,"src":"11574:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13268,"name":"mul512","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12728,"src":"11564:6:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256,uint256)"}},"id":13271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11564:12:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11534:42:69"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13273,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13265,"src":"11594:4:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13274,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11602:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13275,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13259,"src":"11607:1:69","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11602:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11594:14:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13286,"nodeType":"IfStatement","src":"11590:86:69","trueBody":{"id":13285,"nodeType":"Block","src":"11610:66:69","statements":[{"expression":{"arguments":[{"expression":{"id":13281,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12422,"src":"11640:5:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12422_$","typeString":"type(library Panic)"}},"id":13282,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11646:14:69","memberName":"UNDER_OVERFLOW","nodeType":"MemberAccess","referencedDeclaration":12385,"src":"11640:20:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13278,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12422,"src":"11628:5:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12422_$","typeString":"type(library Panic)"}},"id":13280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11634:5:69","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":12421,"src":"11628:11:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":13283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11628:33:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13284,"nodeType":"ExpressionStatement","src":"11628:33:69"}]}},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13287,"name":"high","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13265,"src":"11697:4:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":13290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"323536","id":13288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11706:3:69","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13289,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13259,"src":"11712:1:69","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11706:7:69","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"id":13291,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11705:9:69","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"11697:17:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13293,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11696:19:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13294,"name":"low","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13267,"src":"11719:3:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13295,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13259,"src":"11726:1:69","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11719:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13297,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11718:10:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11696:32:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13263,"id":13299,"nodeType":"Return","src":"11689:39:69"}]}]},"documentation":{"id":13253,"nodeType":"StructuredDocumentation","src":"11298:111:69","text":" @dev Calculates floor(x * y >> n) with full precision. Throws if result overflows a uint256."},"id":13302,"implemented":true,"kind":"function","modifiers":[],"name":"mulShr","nameLocation":"11423:6:69","nodeType":"FunctionDefinition","parameters":{"id":13260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13255,"mutability":"mutable","name":"x","nameLocation":"11438:1:69","nodeType":"VariableDeclaration","scope":13302,"src":"11430:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13254,"name":"uint256","nodeType":"ElementaryTypeName","src":"11430:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13257,"mutability":"mutable","name":"y","nameLocation":"11449:1:69","nodeType":"VariableDeclaration","scope":13302,"src":"11441:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13256,"name":"uint256","nodeType":"ElementaryTypeName","src":"11441:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13259,"mutability":"mutable","name":"n","nameLocation":"11458:1:69","nodeType":"VariableDeclaration","scope":13302,"src":"11452:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":13258,"name":"uint8","nodeType":"ElementaryTypeName","src":"11452:5:69","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"11429:31:69"},"returnParameters":{"id":13263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13262,"mutability":"mutable","name":"result","nameLocation":"11492:6:69","nodeType":"VariableDeclaration","scope":13302,"src":"11484:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13261,"name":"uint256","nodeType":"ElementaryTypeName","src":"11484:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11483:16:69"},"scope":14309,"src":"11414:331:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13340,"nodeType":"Block","src":"11963:113:69","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13318,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13305,"src":"11987:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13319,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13307,"src":"11990:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13320,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13309,"src":"11993:1:69","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":13317,"name":"mulShr","nodeType":"Identifier","overloadedDeclarations":[13302,13341],"referencedDeclaration":13302,"src":"11980:6:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint8_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint8) pure returns (uint256)"}},"id":13321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11980:15:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13325,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13312,"src":"12031:8:69","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}],"id":13324,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14308,"src":"12014:16:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$12700_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":13326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12014:26:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13328,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13305,"src":"12051:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13329,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13307,"src":"12054:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13330,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12057:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":13331,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13309,"src":"12062:1:69","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"12057:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13327,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"12044:6:69","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":13333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12044:20:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":13334,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12067:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12044:24:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12014:54:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13322,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"11998:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":13323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12007:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"11998:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11998:71:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11980:89:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13316,"id":13339,"nodeType":"Return","src":"11973:96:69"}]},"documentation":{"id":13303,"nodeType":"StructuredDocumentation","src":"11751:109:69","text":" @dev Calculates x * y >> n with full precision, following the selected rounding direction."},"id":13341,"implemented":true,"kind":"function","modifiers":[],"name":"mulShr","nameLocation":"11874:6:69","nodeType":"FunctionDefinition","parameters":{"id":13313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13305,"mutability":"mutable","name":"x","nameLocation":"11889:1:69","nodeType":"VariableDeclaration","scope":13341,"src":"11881:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13304,"name":"uint256","nodeType":"ElementaryTypeName","src":"11881:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13307,"mutability":"mutable","name":"y","nameLocation":"11900:1:69","nodeType":"VariableDeclaration","scope":13341,"src":"11892:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13306,"name":"uint256","nodeType":"ElementaryTypeName","src":"11892:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13309,"mutability":"mutable","name":"n","nameLocation":"11909:1:69","nodeType":"VariableDeclaration","scope":13341,"src":"11903:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":13308,"name":"uint8","nodeType":"ElementaryTypeName","src":"11903:5:69","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":13312,"mutability":"mutable","name":"rounding","nameLocation":"11921:8:69","nodeType":"VariableDeclaration","scope":13341,"src":"11912:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"},"typeName":{"id":13311,"nodeType":"UserDefinedTypeName","pathNode":{"id":13310,"name":"Rounding","nameLocations":["11912:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":12700,"src":"11912:8:69"},"referencedDeclaration":12700,"src":"11912:8:69","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"11880:50:69"},"returnParameters":{"id":13316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13315,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13341,"src":"11954:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13314,"name":"uint256","nodeType":"ElementaryTypeName","src":"11954:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11953:9:69"},"scope":14309,"src":"11865:211:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13437,"nodeType":"Block","src":"12710:1849:69","statements":[{"id":13436,"nodeType":"UncheckedBlock","src":"12720:1833:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13351,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13346,"src":"12748:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13352,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12753:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12748:6:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13356,"nodeType":"IfStatement","src":"12744:20:69","trueBody":{"expression":{"hexValue":"30","id":13354,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12763:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":13350,"id":13355,"nodeType":"Return","src":"12756:8:69"}},{"assignments":[13358],"declarations":[{"constant":false,"id":13358,"mutability":"mutable","name":"remainder","nameLocation":"13243:9:69","nodeType":"VariableDeclaration","scope":13436,"src":"13235:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13357,"name":"uint256","nodeType":"ElementaryTypeName","src":"13235:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13362,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13359,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13344,"src":"13255:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":13360,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13346,"src":"13259:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13255:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13235:25:69"},{"assignments":[13364],"declarations":[{"constant":false,"id":13364,"mutability":"mutable","name":"gcd","nameLocation":"13282:3:69","nodeType":"VariableDeclaration","scope":13436,"src":"13274:11:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13363,"name":"uint256","nodeType":"ElementaryTypeName","src":"13274:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13366,"initialValue":{"id":13365,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13346,"src":"13288:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13274:15:69"},{"assignments":[13368],"declarations":[{"constant":false,"id":13368,"mutability":"mutable","name":"x","nameLocation":"13432:1:69","nodeType":"VariableDeclaration","scope":13436,"src":"13425:8:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13367,"name":"int256","nodeType":"ElementaryTypeName","src":"13425:6:69","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":13370,"initialValue":{"hexValue":"30","id":13369,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13436:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13425:12:69"},{"assignments":[13372],"declarations":[{"constant":false,"id":13372,"mutability":"mutable","name":"y","nameLocation":"13458:1:69","nodeType":"VariableDeclaration","scope":13436,"src":"13451:8:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13371,"name":"int256","nodeType":"ElementaryTypeName","src":"13451:6:69","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":13374,"initialValue":{"hexValue":"31","id":13373,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13462:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"13451:12:69"},{"body":{"id":13411,"nodeType":"Block","src":"13501:882:69","statements":[{"assignments":[13379],"declarations":[{"constant":false,"id":13379,"mutability":"mutable","name":"quotient","nameLocation":"13527:8:69","nodeType":"VariableDeclaration","scope":13411,"src":"13519:16:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13378,"name":"uint256","nodeType":"ElementaryTypeName","src":"13519:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13383,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13380,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13364,"src":"13538:3:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13381,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13358,"src":"13544:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13538:15:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13519:34:69"},{"expression":{"id":13394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":13384,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13364,"src":"13573:3:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13385,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13358,"src":"13578:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13386,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"13572:16:69","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"id":13387,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13358,"src":"13678:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13388,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13364,"src":"13923:3:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13389,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13358,"src":"13929:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13390,"name":"quotient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13379,"src":"13941:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13929:20:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13923:26:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13393,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13591:376:69","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"13572:395:69","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13395,"nodeType":"ExpressionStatement","src":"13572:395:69"},{"expression":{"id":13409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":13396,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13368,"src":"13987:1:69","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"id":13397,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13372,"src":"13990:1:69","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":13398,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"13986:6:69","typeDescriptions":{"typeIdentifier":"t_tuple$_t_int256_$_t_int256_$","typeString":"tuple(int256,int256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"id":13399,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13372,"src":"14072:1:69","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13400,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13368,"src":"14326:1:69","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13401,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13372,"src":"14330:1:69","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":13404,"name":"quotient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13379,"src":"14341:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13403,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14334:6:69","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":13402,"name":"int256","nodeType":"ElementaryTypeName","src":"14334:6:69","typeDescriptions":{}}},"id":13405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14334:16:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14330:20:69","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14326:24:69","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":13408,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13995:373:69","typeDescriptions":{"typeIdentifier":"t_tuple$_t_int256_$_t_int256_$","typeString":"tuple(int256,int256)"}},"src":"13986:382:69","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13410,"nodeType":"ExpressionStatement","src":"13986:382:69"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13375,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13358,"src":"13485:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13498:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13485:14:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13412,"nodeType":"WhileStatement","src":"13478:905:69"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13413,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13364,"src":"14401:3:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"31","id":13414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14408:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"14401:8:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13418,"nodeType":"IfStatement","src":"14397:22:69","trueBody":{"expression":{"hexValue":"30","id":13416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14418:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":13350,"id":13417,"nodeType":"Return","src":"14411:8:69"}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13420,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13368,"src":"14470:1:69","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":13421,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14474:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14470:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13423,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13346,"src":"14477:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"id":13427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"14489:2:69","subExpression":{"id":13426,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13368,"src":"14490:1:69","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13425,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14481:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13424,"name":"uint256","nodeType":"ElementaryTypeName","src":"14481:7:69","typeDescriptions":{}}},"id":13428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14481:11:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14477:15:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":13432,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13368,"src":"14502:1:69","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13431,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14494:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13430,"name":"uint256","nodeType":"ElementaryTypeName","src":"14494:7:69","typeDescriptions":{}}},"id":13433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14494:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13419,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12977,"src":"14462:7:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":13434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14462:43:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13350,"id":13435,"nodeType":"Return","src":"14455:50:69"}]}]},"documentation":{"id":13342,"nodeType":"StructuredDocumentation","src":"12082:553:69","text":" @dev Calculate the modular multiplicative inverse of a number in Z/nZ.\n If n is a prime, then Z/nZ is a field. In that case all elements are inversible, except 0.\n If n is not a prime, then Z/nZ is not a field, and some elements might not be inversible.\n If the input value is not inversible, 0 is returned.\n NOTE: If you know for sure that n is (big) a prime, it may be cheaper to use Fermat's little theorem and get the\n inverse using `Math.modExp(a, n - 2, n)`. See {invModPrime}."},"id":13438,"implemented":true,"kind":"function","modifiers":[],"name":"invMod","nameLocation":"12649:6:69","nodeType":"FunctionDefinition","parameters":{"id":13347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13344,"mutability":"mutable","name":"a","nameLocation":"12664:1:69","nodeType":"VariableDeclaration","scope":13438,"src":"12656:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13343,"name":"uint256","nodeType":"ElementaryTypeName","src":"12656:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13346,"mutability":"mutable","name":"n","nameLocation":"12675:1:69","nodeType":"VariableDeclaration","scope":13438,"src":"12667:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13345,"name":"uint256","nodeType":"ElementaryTypeName","src":"12667:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12655:22:69"},"returnParameters":{"id":13350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13349,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13438,"src":"12701:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13348,"name":"uint256","nodeType":"ElementaryTypeName","src":"12701:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12700:9:69"},"scope":14309,"src":"12640:1919:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13458,"nodeType":"Block","src":"15159:82:69","statements":[{"id":13457,"nodeType":"UncheckedBlock","src":"15169:66:69","statements":[{"expression":{"arguments":[{"id":13450,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13441,"src":"15212:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13451,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13443,"src":"15215:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"32","id":13452,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15219:1:69","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"15215:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13454,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13443,"src":"15222:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13448,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14309,"src":"15200:4:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14309_$","typeString":"type(library Math)"}},"id":13449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15205:6:69","memberName":"modExp","nodeType":"MemberAccess","referencedDeclaration":13495,"src":"15200:11:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) view returns (uint256)"}},"id":13455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15200:24:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13447,"id":13456,"nodeType":"Return","src":"15193:31:69"}]}]},"documentation":{"id":13439,"nodeType":"StructuredDocumentation","src":"14565:514:69","text":" @dev Variant of {invMod}. More efficient, but only works if `p` is known to be a prime greater than `2`.\n From https://en.wikipedia.org/wiki/Fermat%27s_little_theorem[Fermat's little theorem], we know that if p is\n prime, then `a**(p-1) ≡ 1 mod p`. As a consequence, we have `a * a**(p-2) ≡ 1 mod p`, which means that\n `a**(p-2)` is the modular multiplicative inverse of a in Fp.\n NOTE: this function does NOT check that `p` is a prime greater than `2`."},"id":13459,"implemented":true,"kind":"function","modifiers":[],"name":"invModPrime","nameLocation":"15093:11:69","nodeType":"FunctionDefinition","parameters":{"id":13444,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13441,"mutability":"mutable","name":"a","nameLocation":"15113:1:69","nodeType":"VariableDeclaration","scope":13459,"src":"15105:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13440,"name":"uint256","nodeType":"ElementaryTypeName","src":"15105:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13443,"mutability":"mutable","name":"p","nameLocation":"15124:1:69","nodeType":"VariableDeclaration","scope":13459,"src":"15116:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13442,"name":"uint256","nodeType":"ElementaryTypeName","src":"15116:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15104:22:69"},"returnParameters":{"id":13447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13446,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13459,"src":"15150:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13445,"name":"uint256","nodeType":"ElementaryTypeName","src":"15150:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15149:9:69"},"scope":14309,"src":"15084:157:69","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13494,"nodeType":"Block","src":"16011:174:69","statements":[{"assignments":[13472,13474],"declarations":[{"constant":false,"id":13472,"mutability":"mutable","name":"success","nameLocation":"16027:7:69","nodeType":"VariableDeclaration","scope":13494,"src":"16022:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13471,"name":"bool","nodeType":"ElementaryTypeName","src":"16022:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":13474,"mutability":"mutable","name":"result","nameLocation":"16044:6:69","nodeType":"VariableDeclaration","scope":13494,"src":"16036:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13473,"name":"uint256","nodeType":"ElementaryTypeName","src":"16036:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13480,"initialValue":{"arguments":[{"id":13476,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13462,"src":"16064:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13477,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13464,"src":"16067:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13478,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13466,"src":"16070:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13475,"name":"tryModExp","nodeType":"Identifier","overloadedDeclarations":[13519,13601],"referencedDeclaration":13519,"src":"16054:9:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (uint256,uint256,uint256) view returns (bool,uint256)"}},"id":13479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16054:18:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"16021:51:69"},{"condition":{"id":13482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"16086:8:69","subExpression":{"id":13481,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13472,"src":"16087:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13491,"nodeType":"IfStatement","src":"16082:74:69","trueBody":{"id":13490,"nodeType":"Block","src":"16096:60:69","statements":[{"expression":{"arguments":[{"expression":{"id":13486,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12422,"src":"16122:5:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12422_$","typeString":"type(library Panic)"}},"id":13487,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16128:16:69","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":12389,"src":"16122:22:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13483,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12422,"src":"16110:5:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12422_$","typeString":"type(library Panic)"}},"id":13485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16116:5:69","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":12421,"src":"16110:11:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":13488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16110:35:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13489,"nodeType":"ExpressionStatement","src":"16110:35:69"}]}},{"expression":{"id":13492,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13474,"src":"16172:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13470,"id":13493,"nodeType":"Return","src":"16165:13:69"}]},"documentation":{"id":13460,"nodeType":"StructuredDocumentation","src":"15247:678:69","text":" @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m)\n Requirements:\n - modulus can't be zero\n - underlying staticcall to precompile must succeed\n IMPORTANT: The result is only valid if the underlying call succeeds. When using this function, make\n sure the chain you're using it on supports the precompiled contract for modular exponentiation\n at address 0x05 as specified in https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise,\n the underlying function will succeed given the lack of a revert, but the result may be incorrectly\n interpreted as 0."},"id":13495,"implemented":true,"kind":"function","modifiers":[],"name":"modExp","nameLocation":"15939:6:69","nodeType":"FunctionDefinition","parameters":{"id":13467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13462,"mutability":"mutable","name":"b","nameLocation":"15954:1:69","nodeType":"VariableDeclaration","scope":13495,"src":"15946:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13461,"name":"uint256","nodeType":"ElementaryTypeName","src":"15946:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13464,"mutability":"mutable","name":"e","nameLocation":"15965:1:69","nodeType":"VariableDeclaration","scope":13495,"src":"15957:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13463,"name":"uint256","nodeType":"ElementaryTypeName","src":"15957:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13466,"mutability":"mutable","name":"m","nameLocation":"15976:1:69","nodeType":"VariableDeclaration","scope":13495,"src":"15968:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13465,"name":"uint256","nodeType":"ElementaryTypeName","src":"15968:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15945:33:69"},"returnParameters":{"id":13470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13469,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13495,"src":"16002:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13468,"name":"uint256","nodeType":"ElementaryTypeName","src":"16002:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16001:9:69"},"scope":14309,"src":"15930:255:69","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13518,"nodeType":"Block","src":"17039:1493:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13509,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13502,"src":"17053:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17058:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17053:6:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13516,"nodeType":"IfStatement","src":"17049:29:69","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":13512,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17069:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":13513,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17076:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":13514,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"17068:10:69","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":13508,"id":13515,"nodeType":"Return","src":"17061:17:69"}},{"AST":{"nativeSrc":"17113:1413:69","nodeType":"YulBlock","src":"17113:1413:69","statements":[{"nativeSrc":"17127:22:69","nodeType":"YulVariableDeclaration","src":"17127:22:69","value":{"arguments":[{"kind":"number","nativeSrc":"17144:4:69","nodeType":"YulLiteral","src":"17144:4:69","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"17138:5:69","nodeType":"YulIdentifier","src":"17138:5:69"},"nativeSrc":"17138:11:69","nodeType":"YulFunctionCall","src":"17138:11:69"},"variables":[{"name":"ptr","nativeSrc":"17131:3:69","nodeType":"YulTypedName","src":"17131:3:69","type":""}]},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"18057:3:69","nodeType":"YulIdentifier","src":"18057:3:69"},{"kind":"number","nativeSrc":"18062:4:69","nodeType":"YulLiteral","src":"18062:4:69","type":"","value":"0x20"}],"functionName":{"name":"mstore","nativeSrc":"18050:6:69","nodeType":"YulIdentifier","src":"18050:6:69"},"nativeSrc":"18050:17:69","nodeType":"YulFunctionCall","src":"18050:17:69"},"nativeSrc":"18050:17:69","nodeType":"YulExpressionStatement","src":"18050:17:69"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18091:3:69","nodeType":"YulIdentifier","src":"18091:3:69"},{"kind":"number","nativeSrc":"18096:4:69","nodeType":"YulLiteral","src":"18096:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"18087:3:69","nodeType":"YulIdentifier","src":"18087:3:69"},"nativeSrc":"18087:14:69","nodeType":"YulFunctionCall","src":"18087:14:69"},{"kind":"number","nativeSrc":"18103:4:69","nodeType":"YulLiteral","src":"18103:4:69","type":"","value":"0x20"}],"functionName":{"name":"mstore","nativeSrc":"18080:6:69","nodeType":"YulIdentifier","src":"18080:6:69"},"nativeSrc":"18080:28:69","nodeType":"YulFunctionCall","src":"18080:28:69"},"nativeSrc":"18080:28:69","nodeType":"YulExpressionStatement","src":"18080:28:69"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18132:3:69","nodeType":"YulIdentifier","src":"18132:3:69"},{"kind":"number","nativeSrc":"18137:4:69","nodeType":"YulLiteral","src":"18137:4:69","type":"","value":"0x40"}],"functionName":{"name":"add","nativeSrc":"18128:3:69","nodeType":"YulIdentifier","src":"18128:3:69"},"nativeSrc":"18128:14:69","nodeType":"YulFunctionCall","src":"18128:14:69"},{"kind":"number","nativeSrc":"18144:4:69","nodeType":"YulLiteral","src":"18144:4:69","type":"","value":"0x20"}],"functionName":{"name":"mstore","nativeSrc":"18121:6:69","nodeType":"YulIdentifier","src":"18121:6:69"},"nativeSrc":"18121:28:69","nodeType":"YulFunctionCall","src":"18121:28:69"},"nativeSrc":"18121:28:69","nodeType":"YulExpressionStatement","src":"18121:28:69"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18173:3:69","nodeType":"YulIdentifier","src":"18173:3:69"},{"kind":"number","nativeSrc":"18178:4:69","nodeType":"YulLiteral","src":"18178:4:69","type":"","value":"0x60"}],"functionName":{"name":"add","nativeSrc":"18169:3:69","nodeType":"YulIdentifier","src":"18169:3:69"},"nativeSrc":"18169:14:69","nodeType":"YulFunctionCall","src":"18169:14:69"},{"name":"b","nativeSrc":"18185:1:69","nodeType":"YulIdentifier","src":"18185:1:69"}],"functionName":{"name":"mstore","nativeSrc":"18162:6:69","nodeType":"YulIdentifier","src":"18162:6:69"},"nativeSrc":"18162:25:69","nodeType":"YulFunctionCall","src":"18162:25:69"},"nativeSrc":"18162:25:69","nodeType":"YulExpressionStatement","src":"18162:25:69"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18211:3:69","nodeType":"YulIdentifier","src":"18211:3:69"},{"kind":"number","nativeSrc":"18216:4:69","nodeType":"YulLiteral","src":"18216:4:69","type":"","value":"0x80"}],"functionName":{"name":"add","nativeSrc":"18207:3:69","nodeType":"YulIdentifier","src":"18207:3:69"},"nativeSrc":"18207:14:69","nodeType":"YulFunctionCall","src":"18207:14:69"},{"name":"e","nativeSrc":"18223:1:69","nodeType":"YulIdentifier","src":"18223:1:69"}],"functionName":{"name":"mstore","nativeSrc":"18200:6:69","nodeType":"YulIdentifier","src":"18200:6:69"},"nativeSrc":"18200:25:69","nodeType":"YulFunctionCall","src":"18200:25:69"},"nativeSrc":"18200:25:69","nodeType":"YulExpressionStatement","src":"18200:25:69"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"18249:3:69","nodeType":"YulIdentifier","src":"18249:3:69"},{"kind":"number","nativeSrc":"18254:4:69","nodeType":"YulLiteral","src":"18254:4:69","type":"","value":"0xa0"}],"functionName":{"name":"add","nativeSrc":"18245:3:69","nodeType":"YulIdentifier","src":"18245:3:69"},"nativeSrc":"18245:14:69","nodeType":"YulFunctionCall","src":"18245:14:69"},{"name":"m","nativeSrc":"18261:1:69","nodeType":"YulIdentifier","src":"18261:1:69"}],"functionName":{"name":"mstore","nativeSrc":"18238:6:69","nodeType":"YulIdentifier","src":"18238:6:69"},"nativeSrc":"18238:25:69","nodeType":"YulFunctionCall","src":"18238:25:69"},"nativeSrc":"18238:25:69","nodeType":"YulExpressionStatement","src":"18238:25:69"},{"nativeSrc":"18425:57:69","nodeType":"YulAssignment","src":"18425:57:69","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"18447:3:69","nodeType":"YulIdentifier","src":"18447:3:69"},"nativeSrc":"18447:5:69","nodeType":"YulFunctionCall","src":"18447:5:69"},{"kind":"number","nativeSrc":"18454:4:69","nodeType":"YulLiteral","src":"18454:4:69","type":"","value":"0x05"},{"name":"ptr","nativeSrc":"18460:3:69","nodeType":"YulIdentifier","src":"18460:3:69"},{"kind":"number","nativeSrc":"18465:4:69","nodeType":"YulLiteral","src":"18465:4:69","type":"","value":"0xc0"},{"kind":"number","nativeSrc":"18471:4:69","nodeType":"YulLiteral","src":"18471:4:69","type":"","value":"0x00"},{"kind":"number","nativeSrc":"18477:4:69","nodeType":"YulLiteral","src":"18477:4:69","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nativeSrc":"18436:10:69","nodeType":"YulIdentifier","src":"18436:10:69"},"nativeSrc":"18436:46:69","nodeType":"YulFunctionCall","src":"18436:46:69"},"variableNames":[{"name":"success","nativeSrc":"18425:7:69","nodeType":"YulIdentifier","src":"18425:7:69"}]},{"nativeSrc":"18495:21:69","nodeType":"YulAssignment","src":"18495:21:69","value":{"arguments":[{"kind":"number","nativeSrc":"18511:4:69","nodeType":"YulLiteral","src":"18511:4:69","type":"","value":"0x00"}],"functionName":{"name":"mload","nativeSrc":"18505:5:69","nodeType":"YulIdentifier","src":"18505:5:69"},"nativeSrc":"18505:11:69","nodeType":"YulFunctionCall","src":"18505:11:69"},"variableNames":[{"name":"result","nativeSrc":"18495:6:69","nodeType":"YulIdentifier","src":"18495:6:69"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":13498,"isOffset":false,"isSlot":false,"src":"18185:1:69","valueSize":1},{"declaration":13500,"isOffset":false,"isSlot":false,"src":"18223:1:69","valueSize":1},{"declaration":13502,"isOffset":false,"isSlot":false,"src":"18261:1:69","valueSize":1},{"declaration":13507,"isOffset":false,"isSlot":false,"src":"18495:6:69","valueSize":1},{"declaration":13505,"isOffset":false,"isSlot":false,"src":"18425:7:69","valueSize":1}],"flags":["memory-safe"],"id":13517,"nodeType":"InlineAssembly","src":"17088:1438:69"}]},"documentation":{"id":13496,"nodeType":"StructuredDocumentation","src":"16191:738:69","text":" @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m).\n It includes a success flag indicating if the operation succeeded. Operation will be marked as failed if trying\n to operate modulo 0 or if the underlying precompile reverted.\n IMPORTANT: The result is only valid if the success flag is true. When using this function, make sure the chain\n you're using it on supports the precompiled contract for modular exponentiation at address 0x05 as specified in\n https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise, the underlying function will succeed given the lack\n of a revert, but the result may be incorrectly interpreted as 0."},"id":13519,"implemented":true,"kind":"function","modifiers":[],"name":"tryModExp","nameLocation":"16943:9:69","nodeType":"FunctionDefinition","parameters":{"id":13503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13498,"mutability":"mutable","name":"b","nameLocation":"16961:1:69","nodeType":"VariableDeclaration","scope":13519,"src":"16953:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13497,"name":"uint256","nodeType":"ElementaryTypeName","src":"16953:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13500,"mutability":"mutable","name":"e","nameLocation":"16972:1:69","nodeType":"VariableDeclaration","scope":13519,"src":"16964:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13499,"name":"uint256","nodeType":"ElementaryTypeName","src":"16964:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13502,"mutability":"mutable","name":"m","nameLocation":"16983:1:69","nodeType":"VariableDeclaration","scope":13519,"src":"16975:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13501,"name":"uint256","nodeType":"ElementaryTypeName","src":"16975:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16952:33:69"},"returnParameters":{"id":13508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13505,"mutability":"mutable","name":"success","nameLocation":"17014:7:69","nodeType":"VariableDeclaration","scope":13519,"src":"17009:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13504,"name":"bool","nodeType":"ElementaryTypeName","src":"17009:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":13507,"mutability":"mutable","name":"result","nameLocation":"17031:6:69","nodeType":"VariableDeclaration","scope":13519,"src":"17023:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13506,"name":"uint256","nodeType":"ElementaryTypeName","src":"17023:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17008:30:69"},"scope":14309,"src":"16934:1598:69","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13554,"nodeType":"Block","src":"18729:179:69","statements":[{"assignments":[13532,13534],"declarations":[{"constant":false,"id":13532,"mutability":"mutable","name":"success","nameLocation":"18745:7:69","nodeType":"VariableDeclaration","scope":13554,"src":"18740:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13531,"name":"bool","nodeType":"ElementaryTypeName","src":"18740:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":13534,"mutability":"mutable","name":"result","nameLocation":"18767:6:69","nodeType":"VariableDeclaration","scope":13554,"src":"18754:19:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13533,"name":"bytes","nodeType":"ElementaryTypeName","src":"18754:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":13540,"initialValue":{"arguments":[{"id":13536,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13522,"src":"18787:1:69","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":13537,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13524,"src":"18790:1:69","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":13538,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13526,"src":"18793:1:69","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":13535,"name":"tryModExp","nodeType":"Identifier","overloadedDeclarations":[13519,13601],"referencedDeclaration":13601,"src":"18777:9:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,bytes memory,bytes memory) view returns (bool,bytes memory)"}},"id":13539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18777:18:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"18739:56:69"},{"condition":{"id":13542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"18809:8:69","subExpression":{"id":13541,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13532,"src":"18810:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13551,"nodeType":"IfStatement","src":"18805:74:69","trueBody":{"id":13550,"nodeType":"Block","src":"18819:60:69","statements":[{"expression":{"arguments":[{"expression":{"id":13546,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12422,"src":"18845:5:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12422_$","typeString":"type(library Panic)"}},"id":13547,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"18851:16:69","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":12389,"src":"18845:22:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13543,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12422,"src":"18833:5:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$12422_$","typeString":"type(library Panic)"}},"id":13545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18839:5:69","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":12421,"src":"18833:11:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":13548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18833:35:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13549,"nodeType":"ExpressionStatement","src":"18833:35:69"}]}},{"expression":{"id":13552,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13534,"src":"18895:6:69","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":13530,"id":13553,"nodeType":"Return","src":"18888:13:69"}]},"documentation":{"id":13520,"nodeType":"StructuredDocumentation","src":"18538:85:69","text":" @dev Variant of {modExp} that supports inputs of arbitrary length."},"id":13555,"implemented":true,"kind":"function","modifiers":[],"name":"modExp","nameLocation":"18637:6:69","nodeType":"FunctionDefinition","parameters":{"id":13527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13522,"mutability":"mutable","name":"b","nameLocation":"18657:1:69","nodeType":"VariableDeclaration","scope":13555,"src":"18644:14:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13521,"name":"bytes","nodeType":"ElementaryTypeName","src":"18644:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":13524,"mutability":"mutable","name":"e","nameLocation":"18673:1:69","nodeType":"VariableDeclaration","scope":13555,"src":"18660:14:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13523,"name":"bytes","nodeType":"ElementaryTypeName","src":"18660:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":13526,"mutability":"mutable","name":"m","nameLocation":"18689:1:69","nodeType":"VariableDeclaration","scope":13555,"src":"18676:14:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13525,"name":"bytes","nodeType":"ElementaryTypeName","src":"18676:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"18643:48:69"},"returnParameters":{"id":13530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13529,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13555,"src":"18715:12:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13528,"name":"bytes","nodeType":"ElementaryTypeName","src":"18715:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"18714:14:69"},"scope":14309,"src":"18628:280:69","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13600,"nodeType":"Block","src":"19162:771:69","statements":[{"condition":{"arguments":[{"id":13570,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13562,"src":"19187:1:69","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":13569,"name":"_zeroBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13634,"src":"19176:10:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (bytes memory) pure returns (bool)"}},"id":13571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19176:13:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13579,"nodeType":"IfStatement","src":"19172:47:69","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":13572,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19199:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"arguments":[{"hexValue":"30","id":13575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19216:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":13574,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"19206:9:69","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":13573,"name":"bytes","nodeType":"ElementaryTypeName","src":"19210:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":13576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19206:12:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":13577,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"19198:21:69","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"functionReturnParameters":13568,"id":13578,"nodeType":"Return","src":"19191:28:69"}},{"assignments":[13581],"declarations":[{"constant":false,"id":13581,"mutability":"mutable","name":"mLen","nameLocation":"19238:4:69","nodeType":"VariableDeclaration","scope":13600,"src":"19230:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13580,"name":"uint256","nodeType":"ElementaryTypeName","src":"19230:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13584,"initialValue":{"expression":{"id":13582,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13562,"src":"19245:1:69","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19247:6:69","memberName":"length","nodeType":"MemberAccess","src":"19245:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19230:23:69"},{"expression":{"id":13597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13585,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13567,"src":"19335:6:69","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":13588,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13558,"src":"19361:1:69","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19363:6:69","memberName":"length","nodeType":"MemberAccess","src":"19361:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13590,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13560,"src":"19371:1:69","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19373:6:69","memberName":"length","nodeType":"MemberAccess","src":"19371:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13592,"name":"mLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13581,"src":"19381:4:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13593,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13558,"src":"19387:1:69","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":13594,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13560,"src":"19390:1:69","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":13595,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13562,"src":"19393:1:69","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":13586,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"19344:3:69","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":13587,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"19348:12:69","memberName":"encodePacked","nodeType":"MemberAccess","src":"19344:16:69","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":13596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19344:51:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"19335:60:69","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13598,"nodeType":"ExpressionStatement","src":"19335:60:69"},{"AST":{"nativeSrc":"19431:496:69","nodeType":"YulBlock","src":"19431:496:69","statements":[{"nativeSrc":"19445:32:69","nodeType":"YulVariableDeclaration","src":"19445:32:69","value":{"arguments":[{"name":"result","nativeSrc":"19464:6:69","nodeType":"YulIdentifier","src":"19464:6:69"},{"kind":"number","nativeSrc":"19472:4:69","nodeType":"YulLiteral","src":"19472:4:69","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"19460:3:69","nodeType":"YulIdentifier","src":"19460:3:69"},"nativeSrc":"19460:17:69","nodeType":"YulFunctionCall","src":"19460:17:69"},"variables":[{"name":"dataPtr","nativeSrc":"19449:7:69","nodeType":"YulTypedName","src":"19449:7:69","type":""}]},{"nativeSrc":"19567:73:69","nodeType":"YulAssignment","src":"19567:73:69","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"19589:3:69","nodeType":"YulIdentifier","src":"19589:3:69"},"nativeSrc":"19589:5:69","nodeType":"YulFunctionCall","src":"19589:5:69"},{"kind":"number","nativeSrc":"19596:4:69","nodeType":"YulLiteral","src":"19596:4:69","type":"","value":"0x05"},{"name":"dataPtr","nativeSrc":"19602:7:69","nodeType":"YulIdentifier","src":"19602:7:69"},{"arguments":[{"name":"result","nativeSrc":"19617:6:69","nodeType":"YulIdentifier","src":"19617:6:69"}],"functionName":{"name":"mload","nativeSrc":"19611:5:69","nodeType":"YulIdentifier","src":"19611:5:69"},"nativeSrc":"19611:13:69","nodeType":"YulFunctionCall","src":"19611:13:69"},{"name":"dataPtr","nativeSrc":"19626:7:69","nodeType":"YulIdentifier","src":"19626:7:69"},{"name":"mLen","nativeSrc":"19635:4:69","nodeType":"YulIdentifier","src":"19635:4:69"}],"functionName":{"name":"staticcall","nativeSrc":"19578:10:69","nodeType":"YulIdentifier","src":"19578:10:69"},"nativeSrc":"19578:62:69","nodeType":"YulFunctionCall","src":"19578:62:69"},"variableNames":[{"name":"success","nativeSrc":"19567:7:69","nodeType":"YulIdentifier","src":"19567:7:69"}]},{"expression":{"arguments":[{"name":"result","nativeSrc":"19796:6:69","nodeType":"YulIdentifier","src":"19796:6:69"},{"name":"mLen","nativeSrc":"19804:4:69","nodeType":"YulIdentifier","src":"19804:4:69"}],"functionName":{"name":"mstore","nativeSrc":"19789:6:69","nodeType":"YulIdentifier","src":"19789:6:69"},"nativeSrc":"19789:20:69","nodeType":"YulFunctionCall","src":"19789:20:69"},"nativeSrc":"19789:20:69","nodeType":"YulExpressionStatement","src":"19789:20:69"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"19892:4:69","nodeType":"YulLiteral","src":"19892:4:69","type":"","value":"0x40"},{"arguments":[{"name":"dataPtr","nativeSrc":"19902:7:69","nodeType":"YulIdentifier","src":"19902:7:69"},{"name":"mLen","nativeSrc":"19911:4:69","nodeType":"YulIdentifier","src":"19911:4:69"}],"functionName":{"name":"add","nativeSrc":"19898:3:69","nodeType":"YulIdentifier","src":"19898:3:69"},"nativeSrc":"19898:18:69","nodeType":"YulFunctionCall","src":"19898:18:69"}],"functionName":{"name":"mstore","nativeSrc":"19885:6:69","nodeType":"YulIdentifier","src":"19885:6:69"},"nativeSrc":"19885:32:69","nodeType":"YulFunctionCall","src":"19885:32:69"},"nativeSrc":"19885:32:69","nodeType":"YulExpressionStatement","src":"19885:32:69"}]},"evmVersion":"cancun","externalReferences":[{"declaration":13581,"isOffset":false,"isSlot":false,"src":"19635:4:69","valueSize":1},{"declaration":13581,"isOffset":false,"isSlot":false,"src":"19804:4:69","valueSize":1},{"declaration":13581,"isOffset":false,"isSlot":false,"src":"19911:4:69","valueSize":1},{"declaration":13567,"isOffset":false,"isSlot":false,"src":"19464:6:69","valueSize":1},{"declaration":13567,"isOffset":false,"isSlot":false,"src":"19617:6:69","valueSize":1},{"declaration":13567,"isOffset":false,"isSlot":false,"src":"19796:6:69","valueSize":1},{"declaration":13565,"isOffset":false,"isSlot":false,"src":"19567:7:69","valueSize":1}],"flags":["memory-safe"],"id":13599,"nodeType":"InlineAssembly","src":"19406:521:69"}]},"documentation":{"id":13556,"nodeType":"StructuredDocumentation","src":"18914:88:69","text":" @dev Variant of {tryModExp} that supports inputs of arbitrary length."},"id":13601,"implemented":true,"kind":"function","modifiers":[],"name":"tryModExp","nameLocation":"19016:9:69","nodeType":"FunctionDefinition","parameters":{"id":13563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13558,"mutability":"mutable","name":"b","nameLocation":"19048:1:69","nodeType":"VariableDeclaration","scope":13601,"src":"19035:14:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13557,"name":"bytes","nodeType":"ElementaryTypeName","src":"19035:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":13560,"mutability":"mutable","name":"e","nameLocation":"19072:1:69","nodeType":"VariableDeclaration","scope":13601,"src":"19059:14:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13559,"name":"bytes","nodeType":"ElementaryTypeName","src":"19059:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":13562,"mutability":"mutable","name":"m","nameLocation":"19096:1:69","nodeType":"VariableDeclaration","scope":13601,"src":"19083:14:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13561,"name":"bytes","nodeType":"ElementaryTypeName","src":"19083:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19025:78:69"},"returnParameters":{"id":13568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13565,"mutability":"mutable","name":"success","nameLocation":"19132:7:69","nodeType":"VariableDeclaration","scope":13601,"src":"19127:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13564,"name":"bool","nodeType":"ElementaryTypeName","src":"19127:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":13567,"mutability":"mutable","name":"result","nameLocation":"19154:6:69","nodeType":"VariableDeclaration","scope":13601,"src":"19141:19:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13566,"name":"bytes","nodeType":"ElementaryTypeName","src":"19141:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19126:35:69"},"scope":14309,"src":"19007:926:69","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13633,"nodeType":"Block","src":"20088:176:69","statements":[{"body":{"id":13629,"nodeType":"Block","src":"20145:92:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":13624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":13620,"name":"byteArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13604,"src":"20163:9:69","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13622,"indexExpression":{"id":13621,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13610,"src":"20173:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20163:12:69","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":13623,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20179:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20163:17:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13628,"nodeType":"IfStatement","src":"20159:68:69","trueBody":{"id":13627,"nodeType":"Block","src":"20182:45:69","statements":[{"expression":{"hexValue":"66616c7365","id":13625,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20207:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":13608,"id":13626,"nodeType":"Return","src":"20200:12:69"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13613,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13610,"src":"20118:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":13614,"name":"byteArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13604,"src":"20122:9:69","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":13615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20132:6:69","memberName":"length","nodeType":"MemberAccess","src":"20122:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20118:20:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13630,"initializationExpression":{"assignments":[13610],"declarations":[{"constant":false,"id":13610,"mutability":"mutable","name":"i","nameLocation":"20111:1:69","nodeType":"VariableDeclaration","scope":13630,"src":"20103:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13609,"name":"uint256","nodeType":"ElementaryTypeName","src":"20103:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13612,"initialValue":{"hexValue":"30","id":13611,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20115:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"20103:13:69"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":13618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"20140:3:69","subExpression":{"id":13617,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13610,"src":"20142:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13619,"nodeType":"ExpressionStatement","src":"20140:3:69"},"nodeType":"ForStatement","src":"20098:139:69"},{"expression":{"hexValue":"74727565","id":13631,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20253:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":13608,"id":13632,"nodeType":"Return","src":"20246:11:69"}]},"documentation":{"id":13602,"nodeType":"StructuredDocumentation","src":"19939:72:69","text":" @dev Returns whether the provided byte array is zero."},"id":13634,"implemented":true,"kind":"function","modifiers":[],"name":"_zeroBytes","nameLocation":"20025:10:69","nodeType":"FunctionDefinition","parameters":{"id":13605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13604,"mutability":"mutable","name":"byteArray","nameLocation":"20049:9:69","nodeType":"VariableDeclaration","scope":13634,"src":"20036:22:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13603,"name":"bytes","nodeType":"ElementaryTypeName","src":"20036:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"20035:24:69"},"returnParameters":{"id":13608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13607,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13634,"src":"20082:4:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13606,"name":"bool","nodeType":"ElementaryTypeName","src":"20082:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"20081:6:69"},"scope":14309,"src":"20016:248:69","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":13852,"nodeType":"Block","src":"20624:5124:69","statements":[{"id":13851,"nodeType":"UncheckedBlock","src":"20634:5108:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13642,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13637,"src":"20728:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"31","id":13643,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20733:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"20728:6:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13648,"nodeType":"IfStatement","src":"20724:53:69","trueBody":{"id":13647,"nodeType":"Block","src":"20736:41:69","statements":[{"expression":{"id":13645,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13637,"src":"20761:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13641,"id":13646,"nodeType":"Return","src":"20754:8:69"}]}},{"assignments":[13650],"declarations":[{"constant":false,"id":13650,"mutability":"mutable","name":"aa","nameLocation":"21712:2:69","nodeType":"VariableDeclaration","scope":13851,"src":"21704:10:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13649,"name":"uint256","nodeType":"ElementaryTypeName","src":"21704:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13652,"initialValue":{"id":13651,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13637,"src":"21717:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21704:14:69"},{"assignments":[13654],"declarations":[{"constant":false,"id":13654,"mutability":"mutable","name":"xn","nameLocation":"21740:2:69","nodeType":"VariableDeclaration","scope":13851,"src":"21732:10:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13653,"name":"uint256","nodeType":"ElementaryTypeName","src":"21732:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13656,"initialValue":{"hexValue":"31","id":13655,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21745:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"21732:14:69"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13657,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13650,"src":"21765:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"},"id":13660,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21772:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"313238","id":13659,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21777:3:69","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"21772:8:69","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}}],"id":13661,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"21771:10:69","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}},"src":"21765:16:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13672,"nodeType":"IfStatement","src":"21761:92:69","trueBody":{"id":13671,"nodeType":"Block","src":"21783:70:69","statements":[{"expression":{"id":13665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13663,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13650,"src":"21801:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"313238","id":13664,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21808:3:69","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"21801:10:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13666,"nodeType":"ExpressionStatement","src":"21801:10:69"},{"expression":{"id":13669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13667,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"21829:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"3634","id":13668,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21836:2:69","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"21829:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13670,"nodeType":"ExpressionStatement","src":"21829:9:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13673,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13650,"src":"21870:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"},"id":13676,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13674,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21877:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3634","id":13675,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21882:2:69","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"21877:7:69","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"}}],"id":13677,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"21876:9:69","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"}},"src":"21870:15:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13688,"nodeType":"IfStatement","src":"21866:90:69","trueBody":{"id":13687,"nodeType":"Block","src":"21887:69:69","statements":[{"expression":{"id":13681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13679,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13650,"src":"21905:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3634","id":13680,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21912:2:69","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"21905:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13682,"nodeType":"ExpressionStatement","src":"21905:9:69"},{"expression":{"id":13685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13683,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"21932:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"3332","id":13684,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21939:2:69","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"21932:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13686,"nodeType":"ExpressionStatement","src":"21932:9:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13689,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13650,"src":"21973:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"},"id":13692,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13690,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21980:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3332","id":13691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21985:2:69","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"21980:7:69","typeDescriptions":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"}}],"id":13693,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"21979:9:69","typeDescriptions":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"}},"src":"21973:15:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13704,"nodeType":"IfStatement","src":"21969:90:69","trueBody":{"id":13703,"nodeType":"Block","src":"21990:69:69","statements":[{"expression":{"id":13697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13695,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13650,"src":"22008:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3332","id":13696,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22015:2:69","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"22008:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13698,"nodeType":"ExpressionStatement","src":"22008:9:69"},{"expression":{"id":13701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13699,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"22035:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"3136","id":13700,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22042:2:69","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"22035:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13702,"nodeType":"ExpressionStatement","src":"22035:9:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13705,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13650,"src":"22076:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"},"id":13708,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13706,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22083:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3136","id":13707,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22088:2:69","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"22083:7:69","typeDescriptions":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"}}],"id":13709,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22082:9:69","typeDescriptions":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"}},"src":"22076:15:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13720,"nodeType":"IfStatement","src":"22072:89:69","trueBody":{"id":13719,"nodeType":"Block","src":"22093:68:69","statements":[{"expression":{"id":13713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13711,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13650,"src":"22111:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3136","id":13712,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22118:2:69","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"22111:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13714,"nodeType":"ExpressionStatement","src":"22111:9:69"},{"expression":{"id":13717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13715,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"22138:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"38","id":13716,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22145:1:69","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"22138:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13718,"nodeType":"ExpressionStatement","src":"22138:8:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13721,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13650,"src":"22178:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"id":13724,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13722,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22185:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"38","id":13723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22190:1:69","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"22185:6:69","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"}}],"id":13725,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22184:8:69","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"}},"src":"22178:14:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13736,"nodeType":"IfStatement","src":"22174:87:69","trueBody":{"id":13735,"nodeType":"Block","src":"22194:67:69","statements":[{"expression":{"id":13729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13727,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13650,"src":"22212:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"38","id":13728,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22219:1:69","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"22212:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13730,"nodeType":"ExpressionStatement","src":"22212:8:69"},{"expression":{"id":13733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13731,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"22238:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"34","id":13732,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22245:1:69","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"22238:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13734,"nodeType":"ExpressionStatement","src":"22238:8:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13737,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13650,"src":"22278:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"id":13740,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13738,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22285:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"34","id":13739,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22290:1:69","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"22285:6:69","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"}}],"id":13741,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22284:8:69","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"}},"src":"22278:14:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13752,"nodeType":"IfStatement","src":"22274:87:69","trueBody":{"id":13751,"nodeType":"Block","src":"22294:67:69","statements":[{"expression":{"id":13745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13743,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13650,"src":"22312:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":13744,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22319:1:69","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"22312:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13746,"nodeType":"ExpressionStatement","src":"22312:8:69"},{"expression":{"id":13749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13747,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"22338:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"32","id":13748,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22345:1:69","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22338:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13750,"nodeType":"ExpressionStatement","src":"22338:8:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13753,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13650,"src":"22378:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"id":13756,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":13754,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22385:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"32","id":13755,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22390:1:69","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22385:6:69","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"}}],"id":13757,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22384:8:69","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"}},"src":"22378:14:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13764,"nodeType":"IfStatement","src":"22374:61:69","trueBody":{"id":13763,"nodeType":"Block","src":"22394:41:69","statements":[{"expression":{"id":13761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13759,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"22412:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"31","id":13760,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22419:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"22412:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13762,"nodeType":"ExpressionStatement","src":"22412:8:69"}]}},{"expression":{"id":13772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13765,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"22855:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"33","id":13766,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22861:1:69","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13767,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"22865:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22861:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13769,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22860:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13770,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22872:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"22860:13:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22855:18:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13773,"nodeType":"ExpressionStatement","src":"22855:18:69"},{"expression":{"id":13783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13774,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"24760:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13775,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"24766:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13776,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13637,"src":"24771:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13777,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"24775:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24771:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24766:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13780,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24765:13:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24782:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"24765:18:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24760:23:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13784,"nodeType":"ExpressionStatement","src":"24760:23:69"},{"expression":{"id":13794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13785,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"24869:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13786,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"24875:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13787,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13637,"src":"24880:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13788,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"24884:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24880:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24875:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13791,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24874:13:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24891:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"24874:18:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24869:23:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13795,"nodeType":"ExpressionStatement","src":"24869:23:69"},{"expression":{"id":13805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13796,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"24980:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13797,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"24986:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13798,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13637,"src":"24991:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13799,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"24995:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24991:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24986:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13802,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24985:13:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13803,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25002:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"24985:18:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24980:23:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13806,"nodeType":"ExpressionStatement","src":"24980:23:69"},{"expression":{"id":13816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13807,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"25089:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13808,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"25095:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13809,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13637,"src":"25100:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13810,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"25104:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25100:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25095:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13813,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"25094:13:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13814,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25111:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25094:18:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25089:23:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13817,"nodeType":"ExpressionStatement","src":"25089:23:69"},{"expression":{"id":13827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13818,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"25199:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13819,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"25205:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13820,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13637,"src":"25210:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13821,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"25214:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25210:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25205:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13824,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"25204:13:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25221:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25204:18:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25199:23:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13828,"nodeType":"ExpressionStatement","src":"25199:23:69"},{"expression":{"id":13838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13829,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"25309:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13830,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"25315:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13831,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13637,"src":"25320:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13832,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"25324:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25320:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25315:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13835,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"25314:13:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13836,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25331:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25314:18:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25309:23:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13839,"nodeType":"ExpressionStatement","src":"25309:23:69"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13840,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"25698:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13843,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"25719:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13844,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13637,"src":"25724:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":13845,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"25728:2:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25724:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25719:11:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13841,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"25703:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":13842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25712:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"25703:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25703:28:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25698:33:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13641,"id":13850,"nodeType":"Return","src":"25691:40:69"}]}]},"documentation":{"id":13635,"nodeType":"StructuredDocumentation","src":"20270:292:69","text":" @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n towards zero.\n This method is based on Newton's method for computing square roots; the algorithm is restricted to only\n using integer operations."},"id":13853,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"20576:4:69","nodeType":"FunctionDefinition","parameters":{"id":13638,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13637,"mutability":"mutable","name":"a","nameLocation":"20589:1:69","nodeType":"VariableDeclaration","scope":13853,"src":"20581:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13636,"name":"uint256","nodeType":"ElementaryTypeName","src":"20581:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20580:11:69"},"returnParameters":{"id":13641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13640,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13853,"src":"20615:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13639,"name":"uint256","nodeType":"ElementaryTypeName","src":"20615:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20614:9:69"},"scope":14309,"src":"20567:5181:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13886,"nodeType":"Block","src":"25921:171:69","statements":[{"id":13885,"nodeType":"UncheckedBlock","src":"25931:155:69","statements":[{"assignments":[13865],"declarations":[{"constant":false,"id":13865,"mutability":"mutable","name":"result","nameLocation":"25963:6:69","nodeType":"VariableDeclaration","scope":13885,"src":"25955:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13864,"name":"uint256","nodeType":"ElementaryTypeName","src":"25955:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13869,"initialValue":{"arguments":[{"id":13867,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13856,"src":"25977:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13866,"name":"sqrt","nodeType":"Identifier","overloadedDeclarations":[13853,13887],"referencedDeclaration":13853,"src":"25972:4:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":13868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25972:7:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25955:24:69"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13870,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13865,"src":"26000:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13874,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13859,"src":"26042:8:69","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}],"id":13873,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14308,"src":"26025:16:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$12700_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":13875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26025:26:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13876,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13865,"src":"26055:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":13877,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13865,"src":"26064:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26055:15:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":13879,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13856,"src":"26073:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26055:19:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"26025:49:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13871,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"26009:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":13872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26018:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"26009:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26009:66:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26000:75:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13863,"id":13884,"nodeType":"Return","src":"25993:82:69"}]}]},"documentation":{"id":13854,"nodeType":"StructuredDocumentation","src":"25754:86:69","text":" @dev Calculates sqrt(a), following the selected rounding direction."},"id":13887,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"25854:4:69","nodeType":"FunctionDefinition","parameters":{"id":13860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13856,"mutability":"mutable","name":"a","nameLocation":"25867:1:69","nodeType":"VariableDeclaration","scope":13887,"src":"25859:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13855,"name":"uint256","nodeType":"ElementaryTypeName","src":"25859:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13859,"mutability":"mutable","name":"rounding","nameLocation":"25879:8:69","nodeType":"VariableDeclaration","scope":13887,"src":"25870:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"},"typeName":{"id":13858,"nodeType":"UserDefinedTypeName","pathNode":{"id":13857,"name":"Rounding","nameLocations":["25870:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":12700,"src":"25870:8:69"},"referencedDeclaration":12700,"src":"25870:8:69","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"25858:30:69"},"returnParameters":{"id":13863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13862,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13887,"src":"25912:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13861,"name":"uint256","nodeType":"ElementaryTypeName","src":"25912:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25911:9:69"},"scope":14309,"src":"25845:247:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13977,"nodeType":"Block","src":"26281:2334:69","statements":[{"expression":{"id":13904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13895,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13893,"src":"26363:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13898,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13890,"src":"26383:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666666666666666666666666666666666666666666666666666666666666666","id":13899,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26387:34:69","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"},"value":"0xffffffffffffffffffffffffffffffff"},"src":"26383:38:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13896,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"26367:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":13897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26376:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"26367:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26367:55:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"37","id":13902,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26426:1:69","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"26367:60:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26363:64:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13905,"nodeType":"ExpressionStatement","src":"26363:64:69"},{"expression":{"id":13918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13906,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13893,"src":"26503:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13909,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13890,"src":"26525:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13910,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13893,"src":"26530:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26525:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13912,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"26524:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866666666666666666666666666666666","id":13913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26535:18:69","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551615_by_1","typeString":"int_const 18446744073709551615"},"value":"0xffffffffffffffff"},"src":"26524:29:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13907,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"26508:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":13908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26517:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"26508:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26508:46:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"36","id":13916,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26558:1:69","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"26508:51:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26503:56:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13919,"nodeType":"ExpressionStatement","src":"26503:56:69"},{"expression":{"id":13932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13920,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13893,"src":"26634:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13923,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13890,"src":"26656:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13924,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13893,"src":"26661:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26656:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13926,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"26655:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666666666666666","id":13927,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26666:10:69","typeDescriptions":{"typeIdentifier":"t_rational_4294967295_by_1","typeString":"int_const 4294967295"},"value":"0xffffffff"},"src":"26655:21:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13921,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"26639:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":13922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26648:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"26639:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26639:38:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"35","id":13930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26681:1:69","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"26639:43:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26634:48:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13933,"nodeType":"ExpressionStatement","src":"26634:48:69"},{"expression":{"id":13946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13934,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13893,"src":"26757:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13937,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13890,"src":"26779:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13938,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13893,"src":"26784:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26779:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13940,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"26778:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866666666","id":13941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26789:6:69","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"0xffff"},"src":"26778:17:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13935,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"26762:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":13936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26771:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"26762:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26762:34:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"34","id":13944,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26800:1:69","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"26762:39:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26757:44:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13947,"nodeType":"ExpressionStatement","src":"26757:44:69"},{"expression":{"id":13960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13948,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13893,"src":"26874:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13951,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13890,"src":"26896:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13952,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13893,"src":"26901:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26896:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13954,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"26895:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666","id":13955,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26906:4:69","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"},"src":"26895:15:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13949,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"26879:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":13950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26888:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"26879:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26879:32:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"33","id":13958,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26915:1:69","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"26879:37:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26874:42:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13961,"nodeType":"ExpressionStatement","src":"26874:42:69"},{"expression":{"id":13974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13962,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13893,"src":"26988:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13965,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13890,"src":"27010:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":13966,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13893,"src":"27015:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27010:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13968,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27009:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866","id":13969,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27020:3:69","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"0xf"},"src":"27009:14:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13963,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"26993:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":13964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27002:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"26993:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26993:31:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"32","id":13972,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27028:1:69","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"26993:36:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26988:41:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13975,"nodeType":"ExpressionStatement","src":"26988:41:69"},{"AST":{"nativeSrc":"28490:119:69","nodeType":"YulBlock","src":"28490:119:69","statements":[{"nativeSrc":"28504:95:69","nodeType":"YulAssignment","src":"28504:95:69","value":{"arguments":[{"name":"r","nativeSrc":"28512:1:69","nodeType":"YulIdentifier","src":"28512:1:69"},{"arguments":[{"arguments":[{"name":"r","nativeSrc":"28524:1:69","nodeType":"YulIdentifier","src":"28524:1:69"},{"name":"x","nativeSrc":"28527:1:69","nodeType":"YulIdentifier","src":"28527:1:69"}],"functionName":{"name":"shr","nativeSrc":"28520:3:69","nodeType":"YulIdentifier","src":"28520:3:69"},"nativeSrc":"28520:9:69","nodeType":"YulFunctionCall","src":"28520:9:69"},{"kind":"number","nativeSrc":"28531:66:69","nodeType":"YulLiteral","src":"28531:66:69","type":"","value":"0x0000010102020202030303030303030300000000000000000000000000000000"}],"functionName":{"name":"byte","nativeSrc":"28515:4:69","nodeType":"YulIdentifier","src":"28515:4:69"},"nativeSrc":"28515:83:69","nodeType":"YulFunctionCall","src":"28515:83:69"}],"functionName":{"name":"or","nativeSrc":"28509:2:69","nodeType":"YulIdentifier","src":"28509:2:69"},"nativeSrc":"28509:90:69","nodeType":"YulFunctionCall","src":"28509:90:69"},"variableNames":[{"name":"r","nativeSrc":"28504:1:69","nodeType":"YulIdentifier","src":"28504:1:69"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":13893,"isOffset":false,"isSlot":false,"src":"28504:1:69","valueSize":1},{"declaration":13893,"isOffset":false,"isSlot":false,"src":"28512:1:69","valueSize":1},{"declaration":13893,"isOffset":false,"isSlot":false,"src":"28524:1:69","valueSize":1},{"declaration":13890,"isOffset":false,"isSlot":false,"src":"28527:1:69","valueSize":1}],"flags":["memory-safe"],"id":13976,"nodeType":"InlineAssembly","src":"28465:144:69"}]},"documentation":{"id":13888,"nodeType":"StructuredDocumentation","src":"26098:119:69","text":" @dev Return the log in base 2 of a positive value rounded towards zero.\n Returns 0 if given 0."},"id":13978,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"26231:4:69","nodeType":"FunctionDefinition","parameters":{"id":13891,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13890,"mutability":"mutable","name":"x","nameLocation":"26244:1:69","nodeType":"VariableDeclaration","scope":13978,"src":"26236:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13889,"name":"uint256","nodeType":"ElementaryTypeName","src":"26236:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26235:11:69"},"returnParameters":{"id":13894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13893,"mutability":"mutable","name":"r","nameLocation":"26278:1:69","nodeType":"VariableDeclaration","scope":13978,"src":"26270:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13892,"name":"uint256","nodeType":"ElementaryTypeName","src":"26270:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26269:11:69"},"scope":14309,"src":"26222:2393:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14011,"nodeType":"Block","src":"28848:175:69","statements":[{"id":14010,"nodeType":"UncheckedBlock","src":"28858:159:69","statements":[{"assignments":[13990],"declarations":[{"constant":false,"id":13990,"mutability":"mutable","name":"result","nameLocation":"28890:6:69","nodeType":"VariableDeclaration","scope":14010,"src":"28882:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13989,"name":"uint256","nodeType":"ElementaryTypeName","src":"28882:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13994,"initialValue":{"arguments":[{"id":13992,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13981,"src":"28904:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13991,"name":"log2","nodeType":"Identifier","overloadedDeclarations":[13978,14012],"referencedDeclaration":13978,"src":"28899:4:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":13993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28899:11:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28882:28:69"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13995,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13990,"src":"28931:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13999,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"28973:8:69","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}],"id":13998,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14308,"src":"28956:16:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$12700_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":14000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28956:26:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":14001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28986:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":14002,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13990,"src":"28991:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28986:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":14004,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13981,"src":"29000:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28986:19:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"28956:49:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13996,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"28940:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":13997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28949:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"28940:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28940:66:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28931:75:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13988,"id":14009,"nodeType":"Return","src":"28924:82:69"}]}]},"documentation":{"id":13979,"nodeType":"StructuredDocumentation","src":"28621:142:69","text":" @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":14012,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"28777:4:69","nodeType":"FunctionDefinition","parameters":{"id":13985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13981,"mutability":"mutable","name":"value","nameLocation":"28790:5:69","nodeType":"VariableDeclaration","scope":14012,"src":"28782:13:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13980,"name":"uint256","nodeType":"ElementaryTypeName","src":"28782:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13984,"mutability":"mutable","name":"rounding","nameLocation":"28806:8:69","nodeType":"VariableDeclaration","scope":14012,"src":"28797:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"},"typeName":{"id":13983,"nodeType":"UserDefinedTypeName","pathNode":{"id":13982,"name":"Rounding","nameLocations":["28797:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":12700,"src":"28797:8:69"},"referencedDeclaration":12700,"src":"28797:8:69","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"28781:34:69"},"returnParameters":{"id":13988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13987,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14012,"src":"28839:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13986,"name":"uint256","nodeType":"ElementaryTypeName","src":"28839:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"28838:9:69"},"scope":14309,"src":"28768:255:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14140,"nodeType":"Block","src":"29216:854:69","statements":[{"assignments":[14021],"declarations":[{"constant":false,"id":14021,"mutability":"mutable","name":"result","nameLocation":"29234:6:69","nodeType":"VariableDeclaration","scope":14140,"src":"29226:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14020,"name":"uint256","nodeType":"ElementaryTypeName","src":"29226:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14023,"initialValue":{"hexValue":"30","id":14022,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29243:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"29226:18:69"},{"id":14137,"nodeType":"UncheckedBlock","src":"29254:787:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14024,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14015,"src":"29282:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"},"id":14027,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14025,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29291:2:69","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":14026,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29297:2:69","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"29291:8:69","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"29282:17:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14040,"nodeType":"IfStatement","src":"29278:103:69","trueBody":{"id":14039,"nodeType":"Block","src":"29301:80:69","statements":[{"expression":{"id":14033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14029,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14015,"src":"29319:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"},"id":14032,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14030,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29328:2:69","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":14031,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29334:2:69","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"29328:8:69","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"29319:17:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14034,"nodeType":"ExpressionStatement","src":"29319:17:69"},{"expression":{"id":14037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14035,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14021,"src":"29354:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3634","id":14036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29364:2:69","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"29354:12:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14038,"nodeType":"ExpressionStatement","src":"29354:12:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14041,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14015,"src":"29398:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"},"id":14044,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14042,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29407:2:69","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":14043,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29413:2:69","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"29407:8:69","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"29398:17:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14057,"nodeType":"IfStatement","src":"29394:103:69","trueBody":{"id":14056,"nodeType":"Block","src":"29417:80:69","statements":[{"expression":{"id":14050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14046,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14015,"src":"29435:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"},"id":14049,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29444:2:69","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":14048,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29450:2:69","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"29444:8:69","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"29435:17:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14051,"nodeType":"ExpressionStatement","src":"29435:17:69"},{"expression":{"id":14054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14052,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14021,"src":"29470:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":14053,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29480:2:69","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"29470:12:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14055,"nodeType":"ExpressionStatement","src":"29470:12:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14058,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14015,"src":"29514:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":14061,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14059,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29523:2:69","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":14060,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29529:2:69","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"29523:8:69","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"29514:17:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14074,"nodeType":"IfStatement","src":"29510:103:69","trueBody":{"id":14073,"nodeType":"Block","src":"29533:80:69","statements":[{"expression":{"id":14067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14063,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14015,"src":"29551:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":14066,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14064,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29560:2:69","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":14065,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29566:2:69","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"29560:8:69","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"29551:17:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14068,"nodeType":"ExpressionStatement","src":"29551:17:69"},{"expression":{"id":14071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14069,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14021,"src":"29586:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":14070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29596:2:69","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"29586:12:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14072,"nodeType":"ExpressionStatement","src":"29586:12:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14075,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14015,"src":"29630:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":14078,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29639:2:69","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":14077,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29645:1:69","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"29639:7:69","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"29630:16:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14091,"nodeType":"IfStatement","src":"29626:100:69","trueBody":{"id":14090,"nodeType":"Block","src":"29648:78:69","statements":[{"expression":{"id":14084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14080,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14015,"src":"29666:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":14083,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14081,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29675:2:69","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":14082,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29681:1:69","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"29675:7:69","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"29666:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14085,"nodeType":"ExpressionStatement","src":"29666:16:69"},{"expression":{"id":14088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14086,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14021,"src":"29700:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":14087,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29710:1:69","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"29700:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14089,"nodeType":"ExpressionStatement","src":"29700:11:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14092,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14015,"src":"29743:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":14095,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14093,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29752:2:69","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":14094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29758:1:69","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"29752:7:69","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"29743:16:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14108,"nodeType":"IfStatement","src":"29739:100:69","trueBody":{"id":14107,"nodeType":"Block","src":"29761:78:69","statements":[{"expression":{"id":14101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14097,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14015,"src":"29779:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":14100,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29788:2:69","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":14099,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29794:1:69","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"29788:7:69","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"29779:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14102,"nodeType":"ExpressionStatement","src":"29779:16:69"},{"expression":{"id":14105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14103,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14021,"src":"29813:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":14104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29823:1:69","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"29813:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14106,"nodeType":"ExpressionStatement","src":"29813:11:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14109,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14015,"src":"29856:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":14112,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29865:2:69","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":14111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29871:1:69","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"29865:7:69","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"29856:16:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14125,"nodeType":"IfStatement","src":"29852:100:69","trueBody":{"id":14124,"nodeType":"Block","src":"29874:78:69","statements":[{"expression":{"id":14118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14114,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14015,"src":"29892:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":14117,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29901:2:69","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":14116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29907:1:69","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"29901:7:69","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"29892:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14119,"nodeType":"ExpressionStatement","src":"29892:16:69"},{"expression":{"id":14122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14120,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14021,"src":"29926:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":14121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29936:1:69","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"29926:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14123,"nodeType":"ExpressionStatement","src":"29926:11:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14126,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14015,"src":"29969:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"id":14129,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14127,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29978:2:69","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"31","id":14128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29984:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"29978:7:69","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"}},"src":"29969:16:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14136,"nodeType":"IfStatement","src":"29965:66:69","trueBody":{"id":14135,"nodeType":"Block","src":"29987:44:69","statements":[{"expression":{"id":14133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14131,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14021,"src":"30005:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":14132,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30015:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"30005:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14134,"nodeType":"ExpressionStatement","src":"30005:11:69"}]}}]},{"expression":{"id":14138,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14021,"src":"30057:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14019,"id":14139,"nodeType":"Return","src":"30050:13:69"}]},"documentation":{"id":14013,"nodeType":"StructuredDocumentation","src":"29029:120:69","text":" @dev Return the log in base 10 of a positive value rounded towards zero.\n Returns 0 if given 0."},"id":14141,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"29163:5:69","nodeType":"FunctionDefinition","parameters":{"id":14016,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14015,"mutability":"mutable","name":"value","nameLocation":"29177:5:69","nodeType":"VariableDeclaration","scope":14141,"src":"29169:13:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14014,"name":"uint256","nodeType":"ElementaryTypeName","src":"29169:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29168:15:69"},"returnParameters":{"id":14019,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14018,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14141,"src":"29207:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14017,"name":"uint256","nodeType":"ElementaryTypeName","src":"29207:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29206:9:69"},"scope":14309,"src":"29154:916:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14174,"nodeType":"Block","src":"30305:177:69","statements":[{"id":14173,"nodeType":"UncheckedBlock","src":"30315:161:69","statements":[{"assignments":[14153],"declarations":[{"constant":false,"id":14153,"mutability":"mutable","name":"result","nameLocation":"30347:6:69","nodeType":"VariableDeclaration","scope":14173,"src":"30339:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14152,"name":"uint256","nodeType":"ElementaryTypeName","src":"30339:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14157,"initialValue":{"arguments":[{"id":14155,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14144,"src":"30362:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14154,"name":"log10","nodeType":"Identifier","overloadedDeclarations":[14141,14175],"referencedDeclaration":14141,"src":"30356:5:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":14156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30356:12:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30339:29:69"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14158,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14153,"src":"30389:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":14162,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14147,"src":"30431:8:69","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}],"id":14161,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14308,"src":"30414:16:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$12700_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":14163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30414:26:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14164,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30444:2:69","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":14165,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14153,"src":"30450:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30444:12:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":14167,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14144,"src":"30459:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30444:20:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"30414:50:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14159,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"30398:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":14160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30407:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"30398:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30398:67:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30389:76:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14151,"id":14172,"nodeType":"Return","src":"30382:83:69"}]}]},"documentation":{"id":14142,"nodeType":"StructuredDocumentation","src":"30076:143:69","text":" @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":14175,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"30233:5:69","nodeType":"FunctionDefinition","parameters":{"id":14148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14144,"mutability":"mutable","name":"value","nameLocation":"30247:5:69","nodeType":"VariableDeclaration","scope":14175,"src":"30239:13:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14143,"name":"uint256","nodeType":"ElementaryTypeName","src":"30239:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14147,"mutability":"mutable","name":"rounding","nameLocation":"30263:8:69","nodeType":"VariableDeclaration","scope":14175,"src":"30254:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"},"typeName":{"id":14146,"nodeType":"UserDefinedTypeName","pathNode":{"id":14145,"name":"Rounding","nameLocations":["30254:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":12700,"src":"30254:8:69"},"referencedDeclaration":12700,"src":"30254:8:69","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"30238:34:69"},"returnParameters":{"id":14151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14150,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14175,"src":"30296:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14149,"name":"uint256","nodeType":"ElementaryTypeName","src":"30296:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30295:9:69"},"scope":14309,"src":"30224:258:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14251,"nodeType":"Block","src":"30800:675:69","statements":[{"expression":{"id":14192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14183,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14181,"src":"30882:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14186,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14178,"src":"30902:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666666666666666666666666666666666666666666666666666666666666666","id":14187,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30906:34:69","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"},"value":"0xffffffffffffffffffffffffffffffff"},"src":"30902:38:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14184,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"30886:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":14185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30895:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"30886:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30886:55:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"37","id":14190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30945:1:69","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"30886:60:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30882:64:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14193,"nodeType":"ExpressionStatement","src":"30882:64:69"},{"expression":{"id":14206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14194,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14181,"src":"31022:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14197,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14178,"src":"31044:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":14198,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14181,"src":"31049:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31044:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14200,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31043:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866666666666666666666666666666666","id":14201,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31054:18:69","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551615_by_1","typeString":"int_const 18446744073709551615"},"value":"0xffffffffffffffff"},"src":"31043:29:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14195,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"31027:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":14196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31036:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"31027:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31027:46:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"36","id":14204,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31077:1:69","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"31027:51:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31022:56:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14207,"nodeType":"ExpressionStatement","src":"31022:56:69"},{"expression":{"id":14220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14208,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14181,"src":"31153:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14211,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14178,"src":"31175:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":14212,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14181,"src":"31180:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31175:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14214,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31174:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666666666666666","id":14215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31185:10:69","typeDescriptions":{"typeIdentifier":"t_rational_4294967295_by_1","typeString":"int_const 4294967295"},"value":"0xffffffff"},"src":"31174:21:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14209,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"31158:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":14210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31167:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"31158:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31158:38:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"35","id":14218,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31200:1:69","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"31158:43:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31153:48:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14221,"nodeType":"ExpressionStatement","src":"31153:48:69"},{"expression":{"id":14234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14222,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14181,"src":"31276:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14225,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14178,"src":"31298:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":14226,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14181,"src":"31303:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31298:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14228,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31297:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307866666666","id":14229,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31308:6:69","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"0xffff"},"src":"31297:17:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14223,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"31281:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":14224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31290:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"31281:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31281:34:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"34","id":14232,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31319:1:69","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"31281:39:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31276:44:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14235,"nodeType":"ExpressionStatement","src":"31276:44:69"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14236,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14181,"src":"31426:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"33","id":14237,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31431:1:69","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"31426:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14239,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31425:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14242,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14178,"src":"31453:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":14243,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14181,"src":"31458:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31453:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14245,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31452:8:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30786666","id":14246,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31463:4:69","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"},"src":"31452:15:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14240,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"31436:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":14241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31445:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"31436:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31436:32:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31425:43:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14182,"id":14250,"nodeType":"Return","src":"31418:50:69"}]},"documentation":{"id":14176,"nodeType":"StructuredDocumentation","src":"30488:246:69","text":" @dev Return the log in base 256 of a positive value rounded towards zero.\n Returns 0 if given 0.\n Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string."},"id":14252,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"30748:6:69","nodeType":"FunctionDefinition","parameters":{"id":14179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14178,"mutability":"mutable","name":"x","nameLocation":"30763:1:69","nodeType":"VariableDeclaration","scope":14252,"src":"30755:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14177,"name":"uint256","nodeType":"ElementaryTypeName","src":"30755:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30754:11:69"},"returnParameters":{"id":14182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14181,"mutability":"mutable","name":"r","nameLocation":"30797:1:69","nodeType":"VariableDeclaration","scope":14252,"src":"30789:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14180,"name":"uint256","nodeType":"ElementaryTypeName","src":"30789:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30788:11:69"},"scope":14309,"src":"30739:736:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14288,"nodeType":"Block","src":"31712:184:69","statements":[{"id":14287,"nodeType":"UncheckedBlock","src":"31722:168:69","statements":[{"assignments":[14264],"declarations":[{"constant":false,"id":14264,"mutability":"mutable","name":"result","nameLocation":"31754:6:69","nodeType":"VariableDeclaration","scope":14287,"src":"31746:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14263,"name":"uint256","nodeType":"ElementaryTypeName","src":"31746:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14268,"initialValue":{"arguments":[{"id":14266,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14255,"src":"31770:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14265,"name":"log256","nodeType":"Identifier","overloadedDeclarations":[14252,14289],"referencedDeclaration":14252,"src":"31763:6:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":14267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31763:13:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"31746:30:69"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14269,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14264,"src":"31797:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":14273,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14258,"src":"31839:8:69","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}],"id":14272,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14308,"src":"31822:16:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$12700_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":14274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31822:26:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":14275,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31852:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14276,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14264,"src":"31858:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"33","id":14277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31868:1:69","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"31858:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14279,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31857:13:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31852:18:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":14281,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14255,"src":"31873:5:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31852:26:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"31822:56:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14270,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"31806:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$16074_$","typeString":"type(library SafeCast)"}},"id":14271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31815:6:69","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":16073,"src":"31806:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":14284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31806:73:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31797:82:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14262,"id":14286,"nodeType":"Return","src":"31790:89:69"}]}]},"documentation":{"id":14253,"nodeType":"StructuredDocumentation","src":"31481:144:69","text":" @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":14289,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"31639:6:69","nodeType":"FunctionDefinition","parameters":{"id":14259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14255,"mutability":"mutable","name":"value","nameLocation":"31654:5:69","nodeType":"VariableDeclaration","scope":14289,"src":"31646:13:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14254,"name":"uint256","nodeType":"ElementaryTypeName","src":"31646:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14258,"mutability":"mutable","name":"rounding","nameLocation":"31670:8:69","nodeType":"VariableDeclaration","scope":14289,"src":"31661:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"},"typeName":{"id":14257,"nodeType":"UserDefinedTypeName","pathNode":{"id":14256,"name":"Rounding","nameLocations":["31661:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":12700,"src":"31661:8:69"},"referencedDeclaration":12700,"src":"31661:8:69","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"31645:34:69"},"returnParameters":{"id":14262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14261,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14289,"src":"31703:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14260,"name":"uint256","nodeType":"ElementaryTypeName","src":"31703:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31702:9:69"},"scope":14309,"src":"31630:266:69","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14307,"nodeType":"Block","src":"32094:48:69","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":14305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":14303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":14300,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14293,"src":"32117:8:69","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}],"id":14299,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32111:5:69","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":14298,"name":"uint8","nodeType":"ElementaryTypeName","src":"32111:5:69","typeDescriptions":{}}},"id":14301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32111:15:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"hexValue":"32","id":14302,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32129:1:69","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"32111:19:69","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":14304,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32134:1:69","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"32111:24:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":14297,"id":14306,"nodeType":"Return","src":"32104:31:69"}]},"documentation":{"id":14290,"nodeType":"StructuredDocumentation","src":"31902:113:69","text":" @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers."},"id":14308,"implemented":true,"kind":"function","modifiers":[],"name":"unsignedRoundsUp","nameLocation":"32029:16:69","nodeType":"FunctionDefinition","parameters":{"id":14294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14293,"mutability":"mutable","name":"rounding","nameLocation":"32055:8:69","nodeType":"VariableDeclaration","scope":14308,"src":"32046:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"},"typeName":{"id":14292,"nodeType":"UserDefinedTypeName","pathNode":{"id":14291,"name":"Rounding","nameLocations":["32046:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":12700,"src":"32046:8:69"},"referencedDeclaration":12700,"src":"32046:8:69","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$12700","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"32045:19:69"},"returnParameters":{"id":14297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14296,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14308,"src":"32088:4:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14295,"name":"bool","nodeType":"ElementaryTypeName","src":"32088:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"32087:6:69"},"scope":14309,"src":"32020:122:69","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":14310,"src":"281:31863:69","usedErrors":[],"usedEvents":[]}],"src":"103:32042:69"},"id":69},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","exportedSymbols":{"SafeCast":[16074]},"id":16075,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":14311,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"192:24:70"},{"abstract":false,"baseContracts":[],"canonicalName":"SafeCast","contractDependencies":[],"contractKind":"library","documentation":{"id":14312,"nodeType":"StructuredDocumentation","src":"218:550:70","text":" @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always."},"fullyImplemented":true,"id":16074,"linearizedBaseContracts":[16074],"name":"SafeCast","nameLocation":"777:8:70","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":14313,"nodeType":"StructuredDocumentation","src":"792:68:70","text":" @dev Value doesn't fit in an uint of `bits` size."},"errorSelector":"6dfcc650","id":14319,"name":"SafeCastOverflowedUintDowncast","nameLocation":"871:30:70","nodeType":"ErrorDefinition","parameters":{"id":14318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14315,"mutability":"mutable","name":"bits","nameLocation":"908:4:70","nodeType":"VariableDeclaration","scope":14319,"src":"902:10:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":14314,"name":"uint8","nodeType":"ElementaryTypeName","src":"902:5:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":14317,"mutability":"mutable","name":"value","nameLocation":"922:5:70","nodeType":"VariableDeclaration","scope":14319,"src":"914:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14316,"name":"uint256","nodeType":"ElementaryTypeName","src":"914:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"901:27:70"},"src":"865:64:70"},{"documentation":{"id":14320,"nodeType":"StructuredDocumentation","src":"935:75:70","text":" @dev An int value doesn't fit in an uint of `bits` size."},"errorSelector":"a8ce4432","id":14324,"name":"SafeCastOverflowedIntToUint","nameLocation":"1021:27:70","nodeType":"ErrorDefinition","parameters":{"id":14323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14322,"mutability":"mutable","name":"value","nameLocation":"1056:5:70","nodeType":"VariableDeclaration","scope":14324,"src":"1049:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":14321,"name":"int256","nodeType":"ElementaryTypeName","src":"1049:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1048:14:70"},"src":"1015:48:70"},{"documentation":{"id":14325,"nodeType":"StructuredDocumentation","src":"1069:67:70","text":" @dev Value doesn't fit in an int of `bits` size."},"errorSelector":"327269a7","id":14331,"name":"SafeCastOverflowedIntDowncast","nameLocation":"1147:29:70","nodeType":"ErrorDefinition","parameters":{"id":14330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14327,"mutability":"mutable","name":"bits","nameLocation":"1183:4:70","nodeType":"VariableDeclaration","scope":14331,"src":"1177:10:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":14326,"name":"uint8","nodeType":"ElementaryTypeName","src":"1177:5:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":14329,"mutability":"mutable","name":"value","nameLocation":"1196:5:70","nodeType":"VariableDeclaration","scope":14331,"src":"1189:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":14328,"name":"int256","nodeType":"ElementaryTypeName","src":"1189:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1176:26:70"},"src":"1141:62:70"},{"documentation":{"id":14332,"nodeType":"StructuredDocumentation","src":"1209:75:70","text":" @dev An uint value doesn't fit in an int of `bits` size."},"errorSelector":"24775e06","id":14336,"name":"SafeCastOverflowedUintToInt","nameLocation":"1295:27:70","nodeType":"ErrorDefinition","parameters":{"id":14335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14334,"mutability":"mutable","name":"value","nameLocation":"1331:5:70","nodeType":"VariableDeclaration","scope":14336,"src":"1323:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14333,"name":"uint256","nodeType":"ElementaryTypeName","src":"1323:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1322:15:70"},"src":"1289:49:70"},{"body":{"id":14363,"nodeType":"Block","src":"1695:152:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14344,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14339,"src":"1709:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14347,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1722:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":14346,"name":"uint248","nodeType":"ElementaryTypeName","src":"1722:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"}],"id":14345,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1717:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14348,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1717:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint248","typeString":"type(uint248)"}},"id":14349,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1731:3:70","memberName":"max","nodeType":"MemberAccess","src":"1717:17:70","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"src":"1709:25:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14357,"nodeType":"IfStatement","src":"1705:105:70","trueBody":{"id":14356,"nodeType":"Block","src":"1736:74:70","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":14352,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1788:3:70","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":14353,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14339,"src":"1793:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14351,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"1757:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1757:42:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14355,"nodeType":"RevertStatement","src":"1750:49:70"}]}},{"expression":{"arguments":[{"id":14360,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14339,"src":"1834:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14359,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1826:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":14358,"name":"uint248","nodeType":"ElementaryTypeName","src":"1826:7:70","typeDescriptions":{}}},"id":14361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1826:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"functionReturnParameters":14343,"id":14362,"nodeType":"Return","src":"1819:21:70"}]},"documentation":{"id":14337,"nodeType":"StructuredDocumentation","src":"1344:280:70","text":" @dev Returns the downcasted uint248 from uint256, reverting on\n overflow (when the input is greater than largest uint248).\n Counterpart to Solidity's `uint248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":14364,"implemented":true,"kind":"function","modifiers":[],"name":"toUint248","nameLocation":"1638:9:70","nodeType":"FunctionDefinition","parameters":{"id":14340,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14339,"mutability":"mutable","name":"value","nameLocation":"1656:5:70","nodeType":"VariableDeclaration","scope":14364,"src":"1648:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14338,"name":"uint256","nodeType":"ElementaryTypeName","src":"1648:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1647:15:70"},"returnParameters":{"id":14343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14342,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14364,"src":"1686:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"},"typeName":{"id":14341,"name":"uint248","nodeType":"ElementaryTypeName","src":"1686:7:70","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"visibility":"internal"}],"src":"1685:9:70"},"scope":16074,"src":"1629:218:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14391,"nodeType":"Block","src":"2204:152:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14372,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14367,"src":"2218:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14375,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2231:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":14374,"name":"uint240","nodeType":"ElementaryTypeName","src":"2231:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"}],"id":14373,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2226:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2226:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint240","typeString":"type(uint240)"}},"id":14377,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2240:3:70","memberName":"max","nodeType":"MemberAccess","src":"2226:17:70","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"src":"2218:25:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14385,"nodeType":"IfStatement","src":"2214:105:70","trueBody":{"id":14384,"nodeType":"Block","src":"2245:74:70","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":14380,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2297:3:70","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":14381,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14367,"src":"2302:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14379,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"2266:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2266:42:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14383,"nodeType":"RevertStatement","src":"2259:49:70"}]}},{"expression":{"arguments":[{"id":14388,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14367,"src":"2343:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14387,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2335:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":14386,"name":"uint240","nodeType":"ElementaryTypeName","src":"2335:7:70","typeDescriptions":{}}},"id":14389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2335:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"functionReturnParameters":14371,"id":14390,"nodeType":"Return","src":"2328:21:70"}]},"documentation":{"id":14365,"nodeType":"StructuredDocumentation","src":"1853:280:70","text":" @dev Returns the downcasted uint240 from uint256, reverting on\n overflow (when the input is greater than largest uint240).\n Counterpart to Solidity's `uint240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":14392,"implemented":true,"kind":"function","modifiers":[],"name":"toUint240","nameLocation":"2147:9:70","nodeType":"FunctionDefinition","parameters":{"id":14368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14367,"mutability":"mutable","name":"value","nameLocation":"2165:5:70","nodeType":"VariableDeclaration","scope":14392,"src":"2157:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14366,"name":"uint256","nodeType":"ElementaryTypeName","src":"2157:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2156:15:70"},"returnParameters":{"id":14371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14370,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14392,"src":"2195:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"},"typeName":{"id":14369,"name":"uint240","nodeType":"ElementaryTypeName","src":"2195:7:70","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"visibility":"internal"}],"src":"2194:9:70"},"scope":16074,"src":"2138:218:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14419,"nodeType":"Block","src":"2713:152:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14400,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14395,"src":"2727:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14403,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2740:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":14402,"name":"uint232","nodeType":"ElementaryTypeName","src":"2740:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"}],"id":14401,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2735:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14404,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2735:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint232","typeString":"type(uint232)"}},"id":14405,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2749:3:70","memberName":"max","nodeType":"MemberAccess","src":"2735:17:70","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"src":"2727:25:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14413,"nodeType":"IfStatement","src":"2723:105:70","trueBody":{"id":14412,"nodeType":"Block","src":"2754:74:70","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":14408,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2806:3:70","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":14409,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14395,"src":"2811:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14407,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"2775:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2775:42:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14411,"nodeType":"RevertStatement","src":"2768:49:70"}]}},{"expression":{"arguments":[{"id":14416,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14395,"src":"2852:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14415,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2844:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":14414,"name":"uint232","nodeType":"ElementaryTypeName","src":"2844:7:70","typeDescriptions":{}}},"id":14417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2844:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"functionReturnParameters":14399,"id":14418,"nodeType":"Return","src":"2837:21:70"}]},"documentation":{"id":14393,"nodeType":"StructuredDocumentation","src":"2362:280:70","text":" @dev Returns the downcasted uint232 from uint256, reverting on\n overflow (when the input is greater than largest uint232).\n Counterpart to Solidity's `uint232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":14420,"implemented":true,"kind":"function","modifiers":[],"name":"toUint232","nameLocation":"2656:9:70","nodeType":"FunctionDefinition","parameters":{"id":14396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14395,"mutability":"mutable","name":"value","nameLocation":"2674:5:70","nodeType":"VariableDeclaration","scope":14420,"src":"2666:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14394,"name":"uint256","nodeType":"ElementaryTypeName","src":"2666:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2665:15:70"},"returnParameters":{"id":14399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14398,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14420,"src":"2704:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"},"typeName":{"id":14397,"name":"uint232","nodeType":"ElementaryTypeName","src":"2704:7:70","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"visibility":"internal"}],"src":"2703:9:70"},"scope":16074,"src":"2647:218:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14447,"nodeType":"Block","src":"3222:152:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14428,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14423,"src":"3236:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14431,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3249:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":14430,"name":"uint224","nodeType":"ElementaryTypeName","src":"3249:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"}],"id":14429,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3244:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14432,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3244:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint224","typeString":"type(uint224)"}},"id":14433,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3258:3:70","memberName":"max","nodeType":"MemberAccess","src":"3244:17:70","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"3236:25:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14441,"nodeType":"IfStatement","src":"3232:105:70","trueBody":{"id":14440,"nodeType":"Block","src":"3263:74:70","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":14436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3315:3:70","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":14437,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14423,"src":"3320:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14435,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"3284:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3284:42:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14439,"nodeType":"RevertStatement","src":"3277:49:70"}]}},{"expression":{"arguments":[{"id":14444,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14423,"src":"3361:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14443,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3353:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":14442,"name":"uint224","nodeType":"ElementaryTypeName","src":"3353:7:70","typeDescriptions":{}}},"id":14445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3353:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"functionReturnParameters":14427,"id":14446,"nodeType":"Return","src":"3346:21:70"}]},"documentation":{"id":14421,"nodeType":"StructuredDocumentation","src":"2871:280:70","text":" @dev Returns the downcasted uint224 from uint256, reverting on\n overflow (when the input is greater than largest uint224).\n Counterpart to Solidity's `uint224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":14448,"implemented":true,"kind":"function","modifiers":[],"name":"toUint224","nameLocation":"3165:9:70","nodeType":"FunctionDefinition","parameters":{"id":14424,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14423,"mutability":"mutable","name":"value","nameLocation":"3183:5:70","nodeType":"VariableDeclaration","scope":14448,"src":"3175:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14422,"name":"uint256","nodeType":"ElementaryTypeName","src":"3175:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3174:15:70"},"returnParameters":{"id":14427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14426,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14448,"src":"3213:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":14425,"name":"uint224","nodeType":"ElementaryTypeName","src":"3213:7:70","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"}],"src":"3212:9:70"},"scope":16074,"src":"3156:218:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14475,"nodeType":"Block","src":"3731:152:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14456,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14451,"src":"3745:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14459,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3758:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":14458,"name":"uint216","nodeType":"ElementaryTypeName","src":"3758:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"}],"id":14457,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3753:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14460,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3753:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint216","typeString":"type(uint216)"}},"id":14461,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3767:3:70","memberName":"max","nodeType":"MemberAccess","src":"3753:17:70","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"src":"3745:25:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14469,"nodeType":"IfStatement","src":"3741:105:70","trueBody":{"id":14468,"nodeType":"Block","src":"3772:74:70","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":14464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3824:3:70","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":14465,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14451,"src":"3829:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14463,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"3793:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3793:42:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14467,"nodeType":"RevertStatement","src":"3786:49:70"}]}},{"expression":{"arguments":[{"id":14472,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14451,"src":"3870:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14471,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3862:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":14470,"name":"uint216","nodeType":"ElementaryTypeName","src":"3862:7:70","typeDescriptions":{}}},"id":14473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3862:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"functionReturnParameters":14455,"id":14474,"nodeType":"Return","src":"3855:21:70"}]},"documentation":{"id":14449,"nodeType":"StructuredDocumentation","src":"3380:280:70","text":" @dev Returns the downcasted uint216 from uint256, reverting on\n overflow (when the input is greater than largest uint216).\n Counterpart to Solidity's `uint216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":14476,"implemented":true,"kind":"function","modifiers":[],"name":"toUint216","nameLocation":"3674:9:70","nodeType":"FunctionDefinition","parameters":{"id":14452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14451,"mutability":"mutable","name":"value","nameLocation":"3692:5:70","nodeType":"VariableDeclaration","scope":14476,"src":"3684:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14450,"name":"uint256","nodeType":"ElementaryTypeName","src":"3684:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3683:15:70"},"returnParameters":{"id":14455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14454,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14476,"src":"3722:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"},"typeName":{"id":14453,"name":"uint216","nodeType":"ElementaryTypeName","src":"3722:7:70","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"visibility":"internal"}],"src":"3721:9:70"},"scope":16074,"src":"3665:218:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14503,"nodeType":"Block","src":"4240:152:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14484,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14479,"src":"4254:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14487,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4267:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":14486,"name":"uint208","nodeType":"ElementaryTypeName","src":"4267:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"}],"id":14485,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4262:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4262:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint208","typeString":"type(uint208)"}},"id":14489,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4276:3:70","memberName":"max","nodeType":"MemberAccess","src":"4262:17:70","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"src":"4254:25:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14497,"nodeType":"IfStatement","src":"4250:105:70","trueBody":{"id":14496,"nodeType":"Block","src":"4281:74:70","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":14492,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4333:3:70","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":14493,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14479,"src":"4338:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14491,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"4302:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4302:42:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14495,"nodeType":"RevertStatement","src":"4295:49:70"}]}},{"expression":{"arguments":[{"id":14500,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14479,"src":"4379:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14499,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4371:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":14498,"name":"uint208","nodeType":"ElementaryTypeName","src":"4371:7:70","typeDescriptions":{}}},"id":14501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4371:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"functionReturnParameters":14483,"id":14502,"nodeType":"Return","src":"4364:21:70"}]},"documentation":{"id":14477,"nodeType":"StructuredDocumentation","src":"3889:280:70","text":" @dev Returns the downcasted uint208 from uint256, reverting on\n overflow (when the input is greater than largest uint208).\n Counterpart to Solidity's `uint208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":14504,"implemented":true,"kind":"function","modifiers":[],"name":"toUint208","nameLocation":"4183:9:70","nodeType":"FunctionDefinition","parameters":{"id":14480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14479,"mutability":"mutable","name":"value","nameLocation":"4201:5:70","nodeType":"VariableDeclaration","scope":14504,"src":"4193:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14478,"name":"uint256","nodeType":"ElementaryTypeName","src":"4193:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4192:15:70"},"returnParameters":{"id":14483,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14482,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14504,"src":"4231:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"},"typeName":{"id":14481,"name":"uint208","nodeType":"ElementaryTypeName","src":"4231:7:70","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"visibility":"internal"}],"src":"4230:9:70"},"scope":16074,"src":"4174:218:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14531,"nodeType":"Block","src":"4749:152:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14512,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14507,"src":"4763:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14515,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4776:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":14514,"name":"uint200","nodeType":"ElementaryTypeName","src":"4776:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"}],"id":14513,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4771:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14516,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4771:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint200","typeString":"type(uint200)"}},"id":14517,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4785:3:70","memberName":"max","nodeType":"MemberAccess","src":"4771:17:70","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"src":"4763:25:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14525,"nodeType":"IfStatement","src":"4759:105:70","trueBody":{"id":14524,"nodeType":"Block","src":"4790:74:70","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":14520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4842:3:70","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":14521,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14507,"src":"4847:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14519,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"4811:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4811:42:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14523,"nodeType":"RevertStatement","src":"4804:49:70"}]}},{"expression":{"arguments":[{"id":14528,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14507,"src":"4888:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14527,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4880:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":14526,"name":"uint200","nodeType":"ElementaryTypeName","src":"4880:7:70","typeDescriptions":{}}},"id":14529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4880:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"functionReturnParameters":14511,"id":14530,"nodeType":"Return","src":"4873:21:70"}]},"documentation":{"id":14505,"nodeType":"StructuredDocumentation","src":"4398:280:70","text":" @dev Returns the downcasted uint200 from uint256, reverting on\n overflow (when the input is greater than largest uint200).\n Counterpart to Solidity's `uint200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":14532,"implemented":true,"kind":"function","modifiers":[],"name":"toUint200","nameLocation":"4692:9:70","nodeType":"FunctionDefinition","parameters":{"id":14508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14507,"mutability":"mutable","name":"value","nameLocation":"4710:5:70","nodeType":"VariableDeclaration","scope":14532,"src":"4702:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14506,"name":"uint256","nodeType":"ElementaryTypeName","src":"4702:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4701:15:70"},"returnParameters":{"id":14511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14510,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14532,"src":"4740:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"},"typeName":{"id":14509,"name":"uint200","nodeType":"ElementaryTypeName","src":"4740:7:70","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"visibility":"internal"}],"src":"4739:9:70"},"scope":16074,"src":"4683:218:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14559,"nodeType":"Block","src":"5258:152:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14540,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14535,"src":"5272:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14543,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5285:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":14542,"name":"uint192","nodeType":"ElementaryTypeName","src":"5285:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"}],"id":14541,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5280:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14544,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5280:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint192","typeString":"type(uint192)"}},"id":14545,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5294:3:70","memberName":"max","nodeType":"MemberAccess","src":"5280:17:70","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"src":"5272:25:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14553,"nodeType":"IfStatement","src":"5268:105:70","trueBody":{"id":14552,"nodeType":"Block","src":"5299:74:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":14548,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5351:3:70","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":14549,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14535,"src":"5356:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14547,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"5320:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5320:42:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14551,"nodeType":"RevertStatement","src":"5313:49:70"}]}},{"expression":{"arguments":[{"id":14556,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14535,"src":"5397:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14555,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5389:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":14554,"name":"uint192","nodeType":"ElementaryTypeName","src":"5389:7:70","typeDescriptions":{}}},"id":14557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5389:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"functionReturnParameters":14539,"id":14558,"nodeType":"Return","src":"5382:21:70"}]},"documentation":{"id":14533,"nodeType":"StructuredDocumentation","src":"4907:280:70","text":" @dev Returns the downcasted uint192 from uint256, reverting on\n overflow (when the input is greater than largest uint192).\n Counterpart to Solidity's `uint192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":14560,"implemented":true,"kind":"function","modifiers":[],"name":"toUint192","nameLocation":"5201:9:70","nodeType":"FunctionDefinition","parameters":{"id":14536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14535,"mutability":"mutable","name":"value","nameLocation":"5219:5:70","nodeType":"VariableDeclaration","scope":14560,"src":"5211:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14534,"name":"uint256","nodeType":"ElementaryTypeName","src":"5211:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5210:15:70"},"returnParameters":{"id":14539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14538,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14560,"src":"5249:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"},"typeName":{"id":14537,"name":"uint192","nodeType":"ElementaryTypeName","src":"5249:7:70","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"visibility":"internal"}],"src":"5248:9:70"},"scope":16074,"src":"5192:218:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14587,"nodeType":"Block","src":"5767:152:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14568,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14563,"src":"5781:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14571,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5794:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":14570,"name":"uint184","nodeType":"ElementaryTypeName","src":"5794:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"}],"id":14569,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5789:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14572,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5789:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint184","typeString":"type(uint184)"}},"id":14573,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5803:3:70","memberName":"max","nodeType":"MemberAccess","src":"5789:17:70","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"src":"5781:25:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14581,"nodeType":"IfStatement","src":"5777:105:70","trueBody":{"id":14580,"nodeType":"Block","src":"5808:74:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":14576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5860:3:70","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":14577,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14563,"src":"5865:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14575,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"5829:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5829:42:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14579,"nodeType":"RevertStatement","src":"5822:49:70"}]}},{"expression":{"arguments":[{"id":14584,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14563,"src":"5906:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14583,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5898:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":14582,"name":"uint184","nodeType":"ElementaryTypeName","src":"5898:7:70","typeDescriptions":{}}},"id":14585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5898:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"functionReturnParameters":14567,"id":14586,"nodeType":"Return","src":"5891:21:70"}]},"documentation":{"id":14561,"nodeType":"StructuredDocumentation","src":"5416:280:70","text":" @dev Returns the downcasted uint184 from uint256, reverting on\n overflow (when the input is greater than largest uint184).\n Counterpart to Solidity's `uint184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":14588,"implemented":true,"kind":"function","modifiers":[],"name":"toUint184","nameLocation":"5710:9:70","nodeType":"FunctionDefinition","parameters":{"id":14564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14563,"mutability":"mutable","name":"value","nameLocation":"5728:5:70","nodeType":"VariableDeclaration","scope":14588,"src":"5720:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14562,"name":"uint256","nodeType":"ElementaryTypeName","src":"5720:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5719:15:70"},"returnParameters":{"id":14567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14566,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14588,"src":"5758:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"},"typeName":{"id":14565,"name":"uint184","nodeType":"ElementaryTypeName","src":"5758:7:70","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"visibility":"internal"}],"src":"5757:9:70"},"scope":16074,"src":"5701:218:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14615,"nodeType":"Block","src":"6276:152:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14596,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14591,"src":"6290:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14599,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6303:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":14598,"name":"uint176","nodeType":"ElementaryTypeName","src":"6303:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"}],"id":14597,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6298:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6298:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint176","typeString":"type(uint176)"}},"id":14601,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6312:3:70","memberName":"max","nodeType":"MemberAccess","src":"6298:17:70","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"src":"6290:25:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14609,"nodeType":"IfStatement","src":"6286:105:70","trueBody":{"id":14608,"nodeType":"Block","src":"6317:74:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":14604,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6369:3:70","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":14605,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14591,"src":"6374:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14603,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"6338:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6338:42:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14607,"nodeType":"RevertStatement","src":"6331:49:70"}]}},{"expression":{"arguments":[{"id":14612,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14591,"src":"6415:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14611,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6407:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":14610,"name":"uint176","nodeType":"ElementaryTypeName","src":"6407:7:70","typeDescriptions":{}}},"id":14613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6407:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"functionReturnParameters":14595,"id":14614,"nodeType":"Return","src":"6400:21:70"}]},"documentation":{"id":14589,"nodeType":"StructuredDocumentation","src":"5925:280:70","text":" @dev Returns the downcasted uint176 from uint256, reverting on\n overflow (when the input is greater than largest uint176).\n Counterpart to Solidity's `uint176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":14616,"implemented":true,"kind":"function","modifiers":[],"name":"toUint176","nameLocation":"6219:9:70","nodeType":"FunctionDefinition","parameters":{"id":14592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14591,"mutability":"mutable","name":"value","nameLocation":"6237:5:70","nodeType":"VariableDeclaration","scope":14616,"src":"6229:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14590,"name":"uint256","nodeType":"ElementaryTypeName","src":"6229:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6228:15:70"},"returnParameters":{"id":14595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14594,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14616,"src":"6267:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"},"typeName":{"id":14593,"name":"uint176","nodeType":"ElementaryTypeName","src":"6267:7:70","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"visibility":"internal"}],"src":"6266:9:70"},"scope":16074,"src":"6210:218:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14643,"nodeType":"Block","src":"6785:152:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14624,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14619,"src":"6799:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14627,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6812:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":14626,"name":"uint168","nodeType":"ElementaryTypeName","src":"6812:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"}],"id":14625,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6807:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6807:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint168","typeString":"type(uint168)"}},"id":14629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6821:3:70","memberName":"max","nodeType":"MemberAccess","src":"6807:17:70","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"src":"6799:25:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14637,"nodeType":"IfStatement","src":"6795:105:70","trueBody":{"id":14636,"nodeType":"Block","src":"6826:74:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":14632,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6878:3:70","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":14633,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14619,"src":"6883:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14631,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"6847:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6847:42:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14635,"nodeType":"RevertStatement","src":"6840:49:70"}]}},{"expression":{"arguments":[{"id":14640,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14619,"src":"6924:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14639,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6916:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":14638,"name":"uint168","nodeType":"ElementaryTypeName","src":"6916:7:70","typeDescriptions":{}}},"id":14641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6916:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"functionReturnParameters":14623,"id":14642,"nodeType":"Return","src":"6909:21:70"}]},"documentation":{"id":14617,"nodeType":"StructuredDocumentation","src":"6434:280:70","text":" @dev Returns the downcasted uint168 from uint256, reverting on\n overflow (when the input is greater than largest uint168).\n Counterpart to Solidity's `uint168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":14644,"implemented":true,"kind":"function","modifiers":[],"name":"toUint168","nameLocation":"6728:9:70","nodeType":"FunctionDefinition","parameters":{"id":14620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14619,"mutability":"mutable","name":"value","nameLocation":"6746:5:70","nodeType":"VariableDeclaration","scope":14644,"src":"6738:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14618,"name":"uint256","nodeType":"ElementaryTypeName","src":"6738:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6737:15:70"},"returnParameters":{"id":14623,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14622,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14644,"src":"6776:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"},"typeName":{"id":14621,"name":"uint168","nodeType":"ElementaryTypeName","src":"6776:7:70","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"visibility":"internal"}],"src":"6775:9:70"},"scope":16074,"src":"6719:218:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14671,"nodeType":"Block","src":"7294:152:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14652,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14647,"src":"7308:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14655,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7321:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":14654,"name":"uint160","nodeType":"ElementaryTypeName","src":"7321:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"}],"id":14653,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7316:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14656,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7316:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint160","typeString":"type(uint160)"}},"id":14657,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7330:3:70","memberName":"max","nodeType":"MemberAccess","src":"7316:17:70","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"src":"7308:25:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14665,"nodeType":"IfStatement","src":"7304:105:70","trueBody":{"id":14664,"nodeType":"Block","src":"7335:74:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":14660,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7387:3:70","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":14661,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14647,"src":"7392:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14659,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"7356:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7356:42:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14663,"nodeType":"RevertStatement","src":"7349:49:70"}]}},{"expression":{"arguments":[{"id":14668,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14647,"src":"7433:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14667,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7425:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":14666,"name":"uint160","nodeType":"ElementaryTypeName","src":"7425:7:70","typeDescriptions":{}}},"id":14669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7425:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"functionReturnParameters":14651,"id":14670,"nodeType":"Return","src":"7418:21:70"}]},"documentation":{"id":14645,"nodeType":"StructuredDocumentation","src":"6943:280:70","text":" @dev Returns the downcasted uint160 from uint256, reverting on\n overflow (when the input is greater than largest uint160).\n Counterpart to Solidity's `uint160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":14672,"implemented":true,"kind":"function","modifiers":[],"name":"toUint160","nameLocation":"7237:9:70","nodeType":"FunctionDefinition","parameters":{"id":14648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14647,"mutability":"mutable","name":"value","nameLocation":"7255:5:70","nodeType":"VariableDeclaration","scope":14672,"src":"7247:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14646,"name":"uint256","nodeType":"ElementaryTypeName","src":"7247:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7246:15:70"},"returnParameters":{"id":14651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14650,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14672,"src":"7285:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":14649,"name":"uint160","nodeType":"ElementaryTypeName","src":"7285:7:70","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"}],"src":"7284:9:70"},"scope":16074,"src":"7228:218:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14699,"nodeType":"Block","src":"7803:152:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14680,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14675,"src":"7817:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14683,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7830:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":14682,"name":"uint152","nodeType":"ElementaryTypeName","src":"7830:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"}],"id":14681,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7825:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14684,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7825:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint152","typeString":"type(uint152)"}},"id":14685,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7839:3:70","memberName":"max","nodeType":"MemberAccess","src":"7825:17:70","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"src":"7817:25:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14693,"nodeType":"IfStatement","src":"7813:105:70","trueBody":{"id":14692,"nodeType":"Block","src":"7844:74:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":14688,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7896:3:70","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":14689,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14675,"src":"7901:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14687,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"7865:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7865:42:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14691,"nodeType":"RevertStatement","src":"7858:49:70"}]}},{"expression":{"arguments":[{"id":14696,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14675,"src":"7942:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14695,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7934:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":14694,"name":"uint152","nodeType":"ElementaryTypeName","src":"7934:7:70","typeDescriptions":{}}},"id":14697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7934:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"functionReturnParameters":14679,"id":14698,"nodeType":"Return","src":"7927:21:70"}]},"documentation":{"id":14673,"nodeType":"StructuredDocumentation","src":"7452:280:70","text":" @dev Returns the downcasted uint152 from uint256, reverting on\n overflow (when the input is greater than largest uint152).\n Counterpart to Solidity's `uint152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":14700,"implemented":true,"kind":"function","modifiers":[],"name":"toUint152","nameLocation":"7746:9:70","nodeType":"FunctionDefinition","parameters":{"id":14676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14675,"mutability":"mutable","name":"value","nameLocation":"7764:5:70","nodeType":"VariableDeclaration","scope":14700,"src":"7756:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14674,"name":"uint256","nodeType":"ElementaryTypeName","src":"7756:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7755:15:70"},"returnParameters":{"id":14679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14678,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14700,"src":"7794:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"},"typeName":{"id":14677,"name":"uint152","nodeType":"ElementaryTypeName","src":"7794:7:70","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"visibility":"internal"}],"src":"7793:9:70"},"scope":16074,"src":"7737:218:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14727,"nodeType":"Block","src":"8312:152:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14708,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14703,"src":"8326:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14711,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8339:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":14710,"name":"uint144","nodeType":"ElementaryTypeName","src":"8339:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"}],"id":14709,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8334:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14712,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8334:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint144","typeString":"type(uint144)"}},"id":14713,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8348:3:70","memberName":"max","nodeType":"MemberAccess","src":"8334:17:70","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"src":"8326:25:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14721,"nodeType":"IfStatement","src":"8322:105:70","trueBody":{"id":14720,"nodeType":"Block","src":"8353:74:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":14716,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8405:3:70","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":14717,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14703,"src":"8410:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14715,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"8374:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8374:42:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14719,"nodeType":"RevertStatement","src":"8367:49:70"}]}},{"expression":{"arguments":[{"id":14724,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14703,"src":"8451:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14723,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8443:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":14722,"name":"uint144","nodeType":"ElementaryTypeName","src":"8443:7:70","typeDescriptions":{}}},"id":14725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8443:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"functionReturnParameters":14707,"id":14726,"nodeType":"Return","src":"8436:21:70"}]},"documentation":{"id":14701,"nodeType":"StructuredDocumentation","src":"7961:280:70","text":" @dev Returns the downcasted uint144 from uint256, reverting on\n overflow (when the input is greater than largest uint144).\n Counterpart to Solidity's `uint144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":14728,"implemented":true,"kind":"function","modifiers":[],"name":"toUint144","nameLocation":"8255:9:70","nodeType":"FunctionDefinition","parameters":{"id":14704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14703,"mutability":"mutable","name":"value","nameLocation":"8273:5:70","nodeType":"VariableDeclaration","scope":14728,"src":"8265:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14702,"name":"uint256","nodeType":"ElementaryTypeName","src":"8265:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8264:15:70"},"returnParameters":{"id":14707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14706,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14728,"src":"8303:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"},"typeName":{"id":14705,"name":"uint144","nodeType":"ElementaryTypeName","src":"8303:7:70","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"visibility":"internal"}],"src":"8302:9:70"},"scope":16074,"src":"8246:218:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14755,"nodeType":"Block","src":"8821:152:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14736,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14731,"src":"8835:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14739,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8848:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":14738,"name":"uint136","nodeType":"ElementaryTypeName","src":"8848:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"}],"id":14737,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8843:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8843:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint136","typeString":"type(uint136)"}},"id":14741,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8857:3:70","memberName":"max","nodeType":"MemberAccess","src":"8843:17:70","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"src":"8835:25:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14749,"nodeType":"IfStatement","src":"8831:105:70","trueBody":{"id":14748,"nodeType":"Block","src":"8862:74:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":14744,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8914:3:70","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":14745,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14731,"src":"8919:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14743,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"8883:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8883:42:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14747,"nodeType":"RevertStatement","src":"8876:49:70"}]}},{"expression":{"arguments":[{"id":14752,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14731,"src":"8960:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14751,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8952:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":14750,"name":"uint136","nodeType":"ElementaryTypeName","src":"8952:7:70","typeDescriptions":{}}},"id":14753,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8952:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"functionReturnParameters":14735,"id":14754,"nodeType":"Return","src":"8945:21:70"}]},"documentation":{"id":14729,"nodeType":"StructuredDocumentation","src":"8470:280:70","text":" @dev Returns the downcasted uint136 from uint256, reverting on\n overflow (when the input is greater than largest uint136).\n Counterpart to Solidity's `uint136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":14756,"implemented":true,"kind":"function","modifiers":[],"name":"toUint136","nameLocation":"8764:9:70","nodeType":"FunctionDefinition","parameters":{"id":14732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14731,"mutability":"mutable","name":"value","nameLocation":"8782:5:70","nodeType":"VariableDeclaration","scope":14756,"src":"8774:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14730,"name":"uint256","nodeType":"ElementaryTypeName","src":"8774:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8773:15:70"},"returnParameters":{"id":14735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14734,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14756,"src":"8812:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"},"typeName":{"id":14733,"name":"uint136","nodeType":"ElementaryTypeName","src":"8812:7:70","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"visibility":"internal"}],"src":"8811:9:70"},"scope":16074,"src":"8755:218:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14783,"nodeType":"Block","src":"9330:152:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14764,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14759,"src":"9344:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14767,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9357:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":14766,"name":"uint128","nodeType":"ElementaryTypeName","src":"9357:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":14765,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9352:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14768,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9352:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":14769,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9366:3:70","memberName":"max","nodeType":"MemberAccess","src":"9352:17:70","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"9344:25:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14777,"nodeType":"IfStatement","src":"9340:105:70","trueBody":{"id":14776,"nodeType":"Block","src":"9371:74:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":14772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9423:3:70","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":14773,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14759,"src":"9428:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14771,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"9392:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9392:42:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14775,"nodeType":"RevertStatement","src":"9385:49:70"}]}},{"expression":{"arguments":[{"id":14780,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14759,"src":"9469:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14779,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9461:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":14778,"name":"uint128","nodeType":"ElementaryTypeName","src":"9461:7:70","typeDescriptions":{}}},"id":14781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9461:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":14763,"id":14782,"nodeType":"Return","src":"9454:21:70"}]},"documentation":{"id":14757,"nodeType":"StructuredDocumentation","src":"8979:280:70","text":" @dev Returns the downcasted uint128 from uint256, reverting on\n overflow (when the input is greater than largest uint128).\n Counterpart to Solidity's `uint128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":14784,"implemented":true,"kind":"function","modifiers":[],"name":"toUint128","nameLocation":"9273:9:70","nodeType":"FunctionDefinition","parameters":{"id":14760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14759,"mutability":"mutable","name":"value","nameLocation":"9291:5:70","nodeType":"VariableDeclaration","scope":14784,"src":"9283:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14758,"name":"uint256","nodeType":"ElementaryTypeName","src":"9283:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9282:15:70"},"returnParameters":{"id":14763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14762,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14784,"src":"9321:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":14761,"name":"uint128","nodeType":"ElementaryTypeName","src":"9321:7:70","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9320:9:70"},"scope":16074,"src":"9264:218:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14811,"nodeType":"Block","src":"9839:152:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14792,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14787,"src":"9853:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14795,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9866:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":14794,"name":"uint120","nodeType":"ElementaryTypeName","src":"9866:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"}],"id":14793,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9861:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9861:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint120","typeString":"type(uint120)"}},"id":14797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9875:3:70","memberName":"max","nodeType":"MemberAccess","src":"9861:17:70","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"src":"9853:25:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14805,"nodeType":"IfStatement","src":"9849:105:70","trueBody":{"id":14804,"nodeType":"Block","src":"9880:74:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":14800,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9932:3:70","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":14801,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14787,"src":"9937:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14799,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"9901:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9901:42:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14803,"nodeType":"RevertStatement","src":"9894:49:70"}]}},{"expression":{"arguments":[{"id":14808,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14787,"src":"9978:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14807,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9970:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":14806,"name":"uint120","nodeType":"ElementaryTypeName","src":"9970:7:70","typeDescriptions":{}}},"id":14809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9970:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"functionReturnParameters":14791,"id":14810,"nodeType":"Return","src":"9963:21:70"}]},"documentation":{"id":14785,"nodeType":"StructuredDocumentation","src":"9488:280:70","text":" @dev Returns the downcasted uint120 from uint256, reverting on\n overflow (when the input is greater than largest uint120).\n Counterpart to Solidity's `uint120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":14812,"implemented":true,"kind":"function","modifiers":[],"name":"toUint120","nameLocation":"9782:9:70","nodeType":"FunctionDefinition","parameters":{"id":14788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14787,"mutability":"mutable","name":"value","nameLocation":"9800:5:70","nodeType":"VariableDeclaration","scope":14812,"src":"9792:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14786,"name":"uint256","nodeType":"ElementaryTypeName","src":"9792:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9791:15:70"},"returnParameters":{"id":14791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14790,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14812,"src":"9830:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"},"typeName":{"id":14789,"name":"uint120","nodeType":"ElementaryTypeName","src":"9830:7:70","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"visibility":"internal"}],"src":"9829:9:70"},"scope":16074,"src":"9773:218:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14839,"nodeType":"Block","src":"10348:152:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14820,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14815,"src":"10362:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14823,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10375:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":14822,"name":"uint112","nodeType":"ElementaryTypeName","src":"10375:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"}],"id":14821,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10370:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14824,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10370:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint112","typeString":"type(uint112)"}},"id":14825,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10384:3:70","memberName":"max","nodeType":"MemberAccess","src":"10370:17:70","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"src":"10362:25:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14833,"nodeType":"IfStatement","src":"10358:105:70","trueBody":{"id":14832,"nodeType":"Block","src":"10389:74:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":14828,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10441:3:70","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":14829,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14815,"src":"10446:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14827,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"10410:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10410:42:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14831,"nodeType":"RevertStatement","src":"10403:49:70"}]}},{"expression":{"arguments":[{"id":14836,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14815,"src":"10487:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14835,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10479:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":14834,"name":"uint112","nodeType":"ElementaryTypeName","src":"10479:7:70","typeDescriptions":{}}},"id":14837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10479:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"functionReturnParameters":14819,"id":14838,"nodeType":"Return","src":"10472:21:70"}]},"documentation":{"id":14813,"nodeType":"StructuredDocumentation","src":"9997:280:70","text":" @dev Returns the downcasted uint112 from uint256, reverting on\n overflow (when the input is greater than largest uint112).\n Counterpart to Solidity's `uint112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":14840,"implemented":true,"kind":"function","modifiers":[],"name":"toUint112","nameLocation":"10291:9:70","nodeType":"FunctionDefinition","parameters":{"id":14816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14815,"mutability":"mutable","name":"value","nameLocation":"10309:5:70","nodeType":"VariableDeclaration","scope":14840,"src":"10301:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14814,"name":"uint256","nodeType":"ElementaryTypeName","src":"10301:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10300:15:70"},"returnParameters":{"id":14819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14818,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14840,"src":"10339:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"},"typeName":{"id":14817,"name":"uint112","nodeType":"ElementaryTypeName","src":"10339:7:70","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"visibility":"internal"}],"src":"10338:9:70"},"scope":16074,"src":"10282:218:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14867,"nodeType":"Block","src":"10857:152:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14848,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14843,"src":"10871:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14851,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10884:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":14850,"name":"uint104","nodeType":"ElementaryTypeName","src":"10884:7:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"}],"id":14849,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10879:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10879:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint104","typeString":"type(uint104)"}},"id":14853,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10893:3:70","memberName":"max","nodeType":"MemberAccess","src":"10879:17:70","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"src":"10871:25:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14861,"nodeType":"IfStatement","src":"10867:105:70","trueBody":{"id":14860,"nodeType":"Block","src":"10898:74:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":14856,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10950:3:70","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":14857,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14843,"src":"10955:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14855,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"10919:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10919:42:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14859,"nodeType":"RevertStatement","src":"10912:49:70"}]}},{"expression":{"arguments":[{"id":14864,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14843,"src":"10996:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14863,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10988:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":14862,"name":"uint104","nodeType":"ElementaryTypeName","src":"10988:7:70","typeDescriptions":{}}},"id":14865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10988:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"functionReturnParameters":14847,"id":14866,"nodeType":"Return","src":"10981:21:70"}]},"documentation":{"id":14841,"nodeType":"StructuredDocumentation","src":"10506:280:70","text":" @dev Returns the downcasted uint104 from uint256, reverting on\n overflow (when the input is greater than largest uint104).\n Counterpart to Solidity's `uint104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":14868,"implemented":true,"kind":"function","modifiers":[],"name":"toUint104","nameLocation":"10800:9:70","nodeType":"FunctionDefinition","parameters":{"id":14844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14843,"mutability":"mutable","name":"value","nameLocation":"10818:5:70","nodeType":"VariableDeclaration","scope":14868,"src":"10810:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14842,"name":"uint256","nodeType":"ElementaryTypeName","src":"10810:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10809:15:70"},"returnParameters":{"id":14847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14846,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14868,"src":"10848:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"},"typeName":{"id":14845,"name":"uint104","nodeType":"ElementaryTypeName","src":"10848:7:70","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"visibility":"internal"}],"src":"10847:9:70"},"scope":16074,"src":"10791:218:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14895,"nodeType":"Block","src":"11360:149:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14876,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14871,"src":"11374:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14879,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11387:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":14878,"name":"uint96","nodeType":"ElementaryTypeName","src":"11387:6:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"}],"id":14877,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11382:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14880,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11382:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint96","typeString":"type(uint96)"}},"id":14881,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11395:3:70","memberName":"max","nodeType":"MemberAccess","src":"11382:16:70","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"11374:24:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14889,"nodeType":"IfStatement","src":"11370:103:70","trueBody":{"id":14888,"nodeType":"Block","src":"11400:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":14884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11452:2:70","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":14885,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14871,"src":"11456:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14883,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"11421:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11421:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14887,"nodeType":"RevertStatement","src":"11414:48:70"}]}},{"expression":{"arguments":[{"id":14892,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14871,"src":"11496:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14891,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11489:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":14890,"name":"uint96","nodeType":"ElementaryTypeName","src":"11489:6:70","typeDescriptions":{}}},"id":14893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11489:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"functionReturnParameters":14875,"id":14894,"nodeType":"Return","src":"11482:20:70"}]},"documentation":{"id":14869,"nodeType":"StructuredDocumentation","src":"11015:276:70","text":" @dev Returns the downcasted uint96 from uint256, reverting on\n overflow (when the input is greater than largest uint96).\n Counterpart to Solidity's `uint96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":14896,"implemented":true,"kind":"function","modifiers":[],"name":"toUint96","nameLocation":"11305:8:70","nodeType":"FunctionDefinition","parameters":{"id":14872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14871,"mutability":"mutable","name":"value","nameLocation":"11322:5:70","nodeType":"VariableDeclaration","scope":14896,"src":"11314:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14870,"name":"uint256","nodeType":"ElementaryTypeName","src":"11314:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11313:15:70"},"returnParameters":{"id":14875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14874,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14896,"src":"11352:6:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":14873,"name":"uint96","nodeType":"ElementaryTypeName","src":"11352:6:70","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"11351:8:70"},"scope":16074,"src":"11296:213:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14923,"nodeType":"Block","src":"11860:149:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14904,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14899,"src":"11874:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14907,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11887:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":14906,"name":"uint88","nodeType":"ElementaryTypeName","src":"11887:6:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"}],"id":14905,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11882:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14908,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11882:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint88","typeString":"type(uint88)"}},"id":14909,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11895:3:70","memberName":"max","nodeType":"MemberAccess","src":"11882:16:70","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"src":"11874:24:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14917,"nodeType":"IfStatement","src":"11870:103:70","trueBody":{"id":14916,"nodeType":"Block","src":"11900:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":14912,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11952:2:70","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":14913,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14899,"src":"11956:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14911,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"11921:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14914,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11921:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14915,"nodeType":"RevertStatement","src":"11914:48:70"}]}},{"expression":{"arguments":[{"id":14920,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14899,"src":"11996:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14919,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11989:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":14918,"name":"uint88","nodeType":"ElementaryTypeName","src":"11989:6:70","typeDescriptions":{}}},"id":14921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11989:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"functionReturnParameters":14903,"id":14922,"nodeType":"Return","src":"11982:20:70"}]},"documentation":{"id":14897,"nodeType":"StructuredDocumentation","src":"11515:276:70","text":" @dev Returns the downcasted uint88 from uint256, reverting on\n overflow (when the input is greater than largest uint88).\n Counterpart to Solidity's `uint88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":14924,"implemented":true,"kind":"function","modifiers":[],"name":"toUint88","nameLocation":"11805:8:70","nodeType":"FunctionDefinition","parameters":{"id":14900,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14899,"mutability":"mutable","name":"value","nameLocation":"11822:5:70","nodeType":"VariableDeclaration","scope":14924,"src":"11814:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14898,"name":"uint256","nodeType":"ElementaryTypeName","src":"11814:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11813:15:70"},"returnParameters":{"id":14903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14902,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14924,"src":"11852:6:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"},"typeName":{"id":14901,"name":"uint88","nodeType":"ElementaryTypeName","src":"11852:6:70","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"visibility":"internal"}],"src":"11851:8:70"},"scope":16074,"src":"11796:213:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14951,"nodeType":"Block","src":"12360:149:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14932,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14927,"src":"12374:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14935,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12387:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":14934,"name":"uint80","nodeType":"ElementaryTypeName","src":"12387:6:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"}],"id":14933,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12382:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14936,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12382:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint80","typeString":"type(uint80)"}},"id":14937,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12395:3:70","memberName":"max","nodeType":"MemberAccess","src":"12382:16:70","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"src":"12374:24:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14945,"nodeType":"IfStatement","src":"12370:103:70","trueBody":{"id":14944,"nodeType":"Block","src":"12400:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":14940,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12452:2:70","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":14941,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14927,"src":"12456:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14939,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"12421:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12421:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14943,"nodeType":"RevertStatement","src":"12414:48:70"}]}},{"expression":{"arguments":[{"id":14948,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14927,"src":"12496:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14947,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12489:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":14946,"name":"uint80","nodeType":"ElementaryTypeName","src":"12489:6:70","typeDescriptions":{}}},"id":14949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12489:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"functionReturnParameters":14931,"id":14950,"nodeType":"Return","src":"12482:20:70"}]},"documentation":{"id":14925,"nodeType":"StructuredDocumentation","src":"12015:276:70","text":" @dev Returns the downcasted uint80 from uint256, reverting on\n overflow (when the input is greater than largest uint80).\n Counterpart to Solidity's `uint80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":14952,"implemented":true,"kind":"function","modifiers":[],"name":"toUint80","nameLocation":"12305:8:70","nodeType":"FunctionDefinition","parameters":{"id":14928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14927,"mutability":"mutable","name":"value","nameLocation":"12322:5:70","nodeType":"VariableDeclaration","scope":14952,"src":"12314:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14926,"name":"uint256","nodeType":"ElementaryTypeName","src":"12314:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12313:15:70"},"returnParameters":{"id":14931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14930,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14952,"src":"12352:6:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":14929,"name":"uint80","nodeType":"ElementaryTypeName","src":"12352:6:70","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"12351:8:70"},"scope":16074,"src":"12296:213:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14979,"nodeType":"Block","src":"12860:149:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14960,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14955,"src":"12874:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14963,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12887:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":14962,"name":"uint72","nodeType":"ElementaryTypeName","src":"12887:6:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"}],"id":14961,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12882:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14964,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12882:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint72","typeString":"type(uint72)"}},"id":14965,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12895:3:70","memberName":"max","nodeType":"MemberAccess","src":"12882:16:70","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"src":"12874:24:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14973,"nodeType":"IfStatement","src":"12870:103:70","trueBody":{"id":14972,"nodeType":"Block","src":"12900:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":14968,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12952:2:70","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":14969,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14955,"src":"12956:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14967,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"12921:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12921:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14971,"nodeType":"RevertStatement","src":"12914:48:70"}]}},{"expression":{"arguments":[{"id":14976,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14955,"src":"12996:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14975,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12989:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":14974,"name":"uint72","nodeType":"ElementaryTypeName","src":"12989:6:70","typeDescriptions":{}}},"id":14977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12989:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"functionReturnParameters":14959,"id":14978,"nodeType":"Return","src":"12982:20:70"}]},"documentation":{"id":14953,"nodeType":"StructuredDocumentation","src":"12515:276:70","text":" @dev Returns the downcasted uint72 from uint256, reverting on\n overflow (when the input is greater than largest uint72).\n Counterpart to Solidity's `uint72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":14980,"implemented":true,"kind":"function","modifiers":[],"name":"toUint72","nameLocation":"12805:8:70","nodeType":"FunctionDefinition","parameters":{"id":14956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14955,"mutability":"mutable","name":"value","nameLocation":"12822:5:70","nodeType":"VariableDeclaration","scope":14980,"src":"12814:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14954,"name":"uint256","nodeType":"ElementaryTypeName","src":"12814:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12813:15:70"},"returnParameters":{"id":14959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14958,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14980,"src":"12852:6:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"},"typeName":{"id":14957,"name":"uint72","nodeType":"ElementaryTypeName","src":"12852:6:70","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"visibility":"internal"}],"src":"12851:8:70"},"scope":16074,"src":"12796:213:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15007,"nodeType":"Block","src":"13360:149:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14988,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14983,"src":"13374:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":14991,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13387:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":14990,"name":"uint64","nodeType":"ElementaryTypeName","src":"13387:6:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"}],"id":14989,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13382:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14992,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13382:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint64","typeString":"type(uint64)"}},"id":14993,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13395:3:70","memberName":"max","nodeType":"MemberAccess","src":"13382:16:70","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"13374:24:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15001,"nodeType":"IfStatement","src":"13370:103:70","trueBody":{"id":15000,"nodeType":"Block","src":"13400:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":14996,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13452:2:70","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":14997,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14983,"src":"13456:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14995,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"13421:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":14998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13421:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14999,"nodeType":"RevertStatement","src":"13414:48:70"}]}},{"expression":{"arguments":[{"id":15004,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14983,"src":"13496:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15003,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13489:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":15002,"name":"uint64","nodeType":"ElementaryTypeName","src":"13489:6:70","typeDescriptions":{}}},"id":15005,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13489:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":14987,"id":15006,"nodeType":"Return","src":"13482:20:70"}]},"documentation":{"id":14981,"nodeType":"StructuredDocumentation","src":"13015:276:70","text":" @dev Returns the downcasted uint64 from uint256, reverting on\n overflow (when the input is greater than largest uint64).\n Counterpart to Solidity's `uint64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":15008,"implemented":true,"kind":"function","modifiers":[],"name":"toUint64","nameLocation":"13305:8:70","nodeType":"FunctionDefinition","parameters":{"id":14984,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14983,"mutability":"mutable","name":"value","nameLocation":"13322:5:70","nodeType":"VariableDeclaration","scope":15008,"src":"13314:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14982,"name":"uint256","nodeType":"ElementaryTypeName","src":"13314:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13313:15:70"},"returnParameters":{"id":14987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14986,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15008,"src":"13352:6:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":14985,"name":"uint64","nodeType":"ElementaryTypeName","src":"13352:6:70","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"13351:8:70"},"scope":16074,"src":"13296:213:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15035,"nodeType":"Block","src":"13860:149:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15016,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15011,"src":"13874:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15019,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13887:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":15018,"name":"uint56","nodeType":"ElementaryTypeName","src":"13887:6:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"}],"id":15017,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13882:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13882:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint56","typeString":"type(uint56)"}},"id":15021,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13895:3:70","memberName":"max","nodeType":"MemberAccess","src":"13882:16:70","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"src":"13874:24:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15029,"nodeType":"IfStatement","src":"13870:103:70","trueBody":{"id":15028,"nodeType":"Block","src":"13900:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":15024,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13952:2:70","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":15025,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15011,"src":"13956:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15023,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"13921:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13921:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15027,"nodeType":"RevertStatement","src":"13914:48:70"}]}},{"expression":{"arguments":[{"id":15032,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15011,"src":"13996:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15031,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13989:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":15030,"name":"uint56","nodeType":"ElementaryTypeName","src":"13989:6:70","typeDescriptions":{}}},"id":15033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13989:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"functionReturnParameters":15015,"id":15034,"nodeType":"Return","src":"13982:20:70"}]},"documentation":{"id":15009,"nodeType":"StructuredDocumentation","src":"13515:276:70","text":" @dev Returns the downcasted uint56 from uint256, reverting on\n overflow (when the input is greater than largest uint56).\n Counterpart to Solidity's `uint56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":15036,"implemented":true,"kind":"function","modifiers":[],"name":"toUint56","nameLocation":"13805:8:70","nodeType":"FunctionDefinition","parameters":{"id":15012,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15011,"mutability":"mutable","name":"value","nameLocation":"13822:5:70","nodeType":"VariableDeclaration","scope":15036,"src":"13814:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15010,"name":"uint256","nodeType":"ElementaryTypeName","src":"13814:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13813:15:70"},"returnParameters":{"id":15015,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15014,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15036,"src":"13852:6:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"},"typeName":{"id":15013,"name":"uint56","nodeType":"ElementaryTypeName","src":"13852:6:70","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"visibility":"internal"}],"src":"13851:8:70"},"scope":16074,"src":"13796:213:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15063,"nodeType":"Block","src":"14360:149:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15044,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15039,"src":"14374:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15047,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14387:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":15046,"name":"uint48","nodeType":"ElementaryTypeName","src":"14387:6:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"}],"id":15045,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14382:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15048,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14382:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint48","typeString":"type(uint48)"}},"id":15049,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14395:3:70","memberName":"max","nodeType":"MemberAccess","src":"14382:16:70","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"14374:24:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15057,"nodeType":"IfStatement","src":"14370:103:70","trueBody":{"id":15056,"nodeType":"Block","src":"14400:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":15052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14452:2:70","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":15053,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15039,"src":"14456:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15051,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"14421:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14421:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15055,"nodeType":"RevertStatement","src":"14414:48:70"}]}},{"expression":{"arguments":[{"id":15060,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15039,"src":"14496:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15059,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14489:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":15058,"name":"uint48","nodeType":"ElementaryTypeName","src":"14489:6:70","typeDescriptions":{}}},"id":15061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14489:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":15043,"id":15062,"nodeType":"Return","src":"14482:20:70"}]},"documentation":{"id":15037,"nodeType":"StructuredDocumentation","src":"14015:276:70","text":" @dev Returns the downcasted uint48 from uint256, reverting on\n overflow (when the input is greater than largest uint48).\n Counterpart to Solidity's `uint48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":15064,"implemented":true,"kind":"function","modifiers":[],"name":"toUint48","nameLocation":"14305:8:70","nodeType":"FunctionDefinition","parameters":{"id":15040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15039,"mutability":"mutable","name":"value","nameLocation":"14322:5:70","nodeType":"VariableDeclaration","scope":15064,"src":"14314:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15038,"name":"uint256","nodeType":"ElementaryTypeName","src":"14314:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14313:15:70"},"returnParameters":{"id":15043,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15042,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15064,"src":"14352:6:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":15041,"name":"uint48","nodeType":"ElementaryTypeName","src":"14352:6:70","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"14351:8:70"},"scope":16074,"src":"14296:213:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15091,"nodeType":"Block","src":"14860:149:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15072,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15067,"src":"14874:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15075,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14887:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":15074,"name":"uint40","nodeType":"ElementaryTypeName","src":"14887:6:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"}],"id":15073,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14882:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14882:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint40","typeString":"type(uint40)"}},"id":15077,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14895:3:70","memberName":"max","nodeType":"MemberAccess","src":"14882:16:70","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"14874:24:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15085,"nodeType":"IfStatement","src":"14870:103:70","trueBody":{"id":15084,"nodeType":"Block","src":"14900:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":15080,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14952:2:70","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":15081,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15067,"src":"14956:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15079,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"14921:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14921:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15083,"nodeType":"RevertStatement","src":"14914:48:70"}]}},{"expression":{"arguments":[{"id":15088,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15067,"src":"14996:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15087,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14989:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":15086,"name":"uint40","nodeType":"ElementaryTypeName","src":"14989:6:70","typeDescriptions":{}}},"id":15089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14989:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":15071,"id":15090,"nodeType":"Return","src":"14982:20:70"}]},"documentation":{"id":15065,"nodeType":"StructuredDocumentation","src":"14515:276:70","text":" @dev Returns the downcasted uint40 from uint256, reverting on\n overflow (when the input is greater than largest uint40).\n Counterpart to Solidity's `uint40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":15092,"implemented":true,"kind":"function","modifiers":[],"name":"toUint40","nameLocation":"14805:8:70","nodeType":"FunctionDefinition","parameters":{"id":15068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15067,"mutability":"mutable","name":"value","nameLocation":"14822:5:70","nodeType":"VariableDeclaration","scope":15092,"src":"14814:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15066,"name":"uint256","nodeType":"ElementaryTypeName","src":"14814:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14813:15:70"},"returnParameters":{"id":15071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15070,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15092,"src":"14852:6:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":15069,"name":"uint40","nodeType":"ElementaryTypeName","src":"14852:6:70","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"14851:8:70"},"scope":16074,"src":"14796:213:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15119,"nodeType":"Block","src":"15360:149:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15100,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15095,"src":"15374:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15103,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15387:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":15102,"name":"uint32","nodeType":"ElementaryTypeName","src":"15387:6:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"}],"id":15101,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15382:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15382:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint32","typeString":"type(uint32)"}},"id":15105,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15395:3:70","memberName":"max","nodeType":"MemberAccess","src":"15382:16:70","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"15374:24:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15113,"nodeType":"IfStatement","src":"15370:103:70","trueBody":{"id":15112,"nodeType":"Block","src":"15400:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":15108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15452:2:70","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":15109,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15095,"src":"15456:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15107,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"15421:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15110,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15421:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15111,"nodeType":"RevertStatement","src":"15414:48:70"}]}},{"expression":{"arguments":[{"id":15116,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15095,"src":"15496:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15489:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":15114,"name":"uint32","nodeType":"ElementaryTypeName","src":"15489:6:70","typeDescriptions":{}}},"id":15117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15489:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":15099,"id":15118,"nodeType":"Return","src":"15482:20:70"}]},"documentation":{"id":15093,"nodeType":"StructuredDocumentation","src":"15015:276:70","text":" @dev Returns the downcasted uint32 from uint256, reverting on\n overflow (when the input is greater than largest uint32).\n Counterpart to Solidity's `uint32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":15120,"implemented":true,"kind":"function","modifiers":[],"name":"toUint32","nameLocation":"15305:8:70","nodeType":"FunctionDefinition","parameters":{"id":15096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15095,"mutability":"mutable","name":"value","nameLocation":"15322:5:70","nodeType":"VariableDeclaration","scope":15120,"src":"15314:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15094,"name":"uint256","nodeType":"ElementaryTypeName","src":"15314:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15313:15:70"},"returnParameters":{"id":15099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15098,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15120,"src":"15352:6:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":15097,"name":"uint32","nodeType":"ElementaryTypeName","src":"15352:6:70","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"15351:8:70"},"scope":16074,"src":"15296:213:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15147,"nodeType":"Block","src":"15860:149:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15128,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15123,"src":"15874:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15131,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15887:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":15130,"name":"uint24","nodeType":"ElementaryTypeName","src":"15887:6:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"}],"id":15129,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15882:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15132,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15882:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint24","typeString":"type(uint24)"}},"id":15133,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15895:3:70","memberName":"max","nodeType":"MemberAccess","src":"15882:16:70","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"src":"15874:24:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15141,"nodeType":"IfStatement","src":"15870:103:70","trueBody":{"id":15140,"nodeType":"Block","src":"15900:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":15136,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15952:2:70","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":15137,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15123,"src":"15956:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15135,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"15921:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15921:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15139,"nodeType":"RevertStatement","src":"15914:48:70"}]}},{"expression":{"arguments":[{"id":15144,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15123,"src":"15996:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15143,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15989:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":15142,"name":"uint24","nodeType":"ElementaryTypeName","src":"15989:6:70","typeDescriptions":{}}},"id":15145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15989:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"functionReturnParameters":15127,"id":15146,"nodeType":"Return","src":"15982:20:70"}]},"documentation":{"id":15121,"nodeType":"StructuredDocumentation","src":"15515:276:70","text":" @dev Returns the downcasted uint24 from uint256, reverting on\n overflow (when the input is greater than largest uint24).\n Counterpart to Solidity's `uint24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":15148,"implemented":true,"kind":"function","modifiers":[],"name":"toUint24","nameLocation":"15805:8:70","nodeType":"FunctionDefinition","parameters":{"id":15124,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15123,"mutability":"mutable","name":"value","nameLocation":"15822:5:70","nodeType":"VariableDeclaration","scope":15148,"src":"15814:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15122,"name":"uint256","nodeType":"ElementaryTypeName","src":"15814:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15813:15:70"},"returnParameters":{"id":15127,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15126,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15148,"src":"15852:6:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"},"typeName":{"id":15125,"name":"uint24","nodeType":"ElementaryTypeName","src":"15852:6:70","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"visibility":"internal"}],"src":"15851:8:70"},"scope":16074,"src":"15796:213:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15175,"nodeType":"Block","src":"16360:149:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15156,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15151,"src":"16374:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15159,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16387:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":15158,"name":"uint16","nodeType":"ElementaryTypeName","src":"16387:6:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"}],"id":15157,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16382:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15160,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16382:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint16","typeString":"type(uint16)"}},"id":15161,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16395:3:70","memberName":"max","nodeType":"MemberAccess","src":"16382:16:70","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"16374:24:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15169,"nodeType":"IfStatement","src":"16370:103:70","trueBody":{"id":15168,"nodeType":"Block","src":"16400:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":15164,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16452:2:70","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":15165,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15151,"src":"16456:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15163,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"16421:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16421:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15167,"nodeType":"RevertStatement","src":"16414:48:70"}]}},{"expression":{"arguments":[{"id":15172,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15151,"src":"16496:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15171,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16489:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":15170,"name":"uint16","nodeType":"ElementaryTypeName","src":"16489:6:70","typeDescriptions":{}}},"id":15173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16489:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":15155,"id":15174,"nodeType":"Return","src":"16482:20:70"}]},"documentation":{"id":15149,"nodeType":"StructuredDocumentation","src":"16015:276:70","text":" @dev Returns the downcasted uint16 from uint256, reverting on\n overflow (when the input is greater than largest uint16).\n Counterpart to Solidity's `uint16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":15176,"implemented":true,"kind":"function","modifiers":[],"name":"toUint16","nameLocation":"16305:8:70","nodeType":"FunctionDefinition","parameters":{"id":15152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15151,"mutability":"mutable","name":"value","nameLocation":"16322:5:70","nodeType":"VariableDeclaration","scope":15176,"src":"16314:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15150,"name":"uint256","nodeType":"ElementaryTypeName","src":"16314:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16313:15:70"},"returnParameters":{"id":15155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15154,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15176,"src":"16352:6:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":15153,"name":"uint16","nodeType":"ElementaryTypeName","src":"16352:6:70","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"16351:8:70"},"scope":16074,"src":"16296:213:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15203,"nodeType":"Block","src":"16854:146:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15184,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15179,"src":"16868:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":15187,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16881:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":15186,"name":"uint8","nodeType":"ElementaryTypeName","src":"16881:5:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":15185,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16876:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15188,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16876:11:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":15189,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16888:3:70","memberName":"max","nodeType":"MemberAccess","src":"16876:15:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"16868:23:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15197,"nodeType":"IfStatement","src":"16864:101:70","trueBody":{"id":15196,"nodeType":"Block","src":"16893:72:70","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":15192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16945:1:70","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":15193,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15179,"src":"16948:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15191,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14319,"src":"16914:30:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":15194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16914:40:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15195,"nodeType":"RevertStatement","src":"16907:47:70"}]}},{"expression":{"arguments":[{"id":15200,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15179,"src":"16987:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15199,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16981:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":15198,"name":"uint8","nodeType":"ElementaryTypeName","src":"16981:5:70","typeDescriptions":{}}},"id":15201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16981:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":15183,"id":15202,"nodeType":"Return","src":"16974:19:70"}]},"documentation":{"id":15177,"nodeType":"StructuredDocumentation","src":"16515:272:70","text":" @dev Returns the downcasted uint8 from uint256, reverting on\n overflow (when the input is greater than largest uint8).\n Counterpart to Solidity's `uint8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":15204,"implemented":true,"kind":"function","modifiers":[],"name":"toUint8","nameLocation":"16801:7:70","nodeType":"FunctionDefinition","parameters":{"id":15180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15179,"mutability":"mutable","name":"value","nameLocation":"16817:5:70","nodeType":"VariableDeclaration","scope":15204,"src":"16809:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15178,"name":"uint256","nodeType":"ElementaryTypeName","src":"16809:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16808:15:70"},"returnParameters":{"id":15183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15182,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15204,"src":"16847:5:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":15181,"name":"uint8","nodeType":"ElementaryTypeName","src":"16847:5:70","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"16846:7:70"},"scope":16074,"src":"16792:208:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15226,"nodeType":"Block","src":"17236:128:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15212,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15207,"src":"17250:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":15213,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17258:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17250:9:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15220,"nodeType":"IfStatement","src":"17246:81:70","trueBody":{"id":15219,"nodeType":"Block","src":"17261:66:70","statements":[{"errorCall":{"arguments":[{"id":15216,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15207,"src":"17310:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15215,"name":"SafeCastOverflowedIntToUint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14324,"src":"17282:27:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_int256_$returns$_t_error_$","typeString":"function (int256) pure returns (error)"}},"id":15217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17282:34:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15218,"nodeType":"RevertStatement","src":"17275:41:70"}]}},{"expression":{"arguments":[{"id":15223,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15207,"src":"17351:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15222,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17343:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":15221,"name":"uint256","nodeType":"ElementaryTypeName","src":"17343:7:70","typeDescriptions":{}}},"id":15224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17343:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15211,"id":15225,"nodeType":"Return","src":"17336:21:70"}]},"documentation":{"id":15205,"nodeType":"StructuredDocumentation","src":"17006:160:70","text":" @dev Converts a signed int256 into an unsigned uint256.\n Requirements:\n - input must be greater than or equal to 0."},"id":15227,"implemented":true,"kind":"function","modifiers":[],"name":"toUint256","nameLocation":"17180:9:70","nodeType":"FunctionDefinition","parameters":{"id":15208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15207,"mutability":"mutable","name":"value","nameLocation":"17197:5:70","nodeType":"VariableDeclaration","scope":15227,"src":"17190:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15206,"name":"int256","nodeType":"ElementaryTypeName","src":"17190:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17189:14:70"},"returnParameters":{"id":15211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15210,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15227,"src":"17227:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15209,"name":"uint256","nodeType":"ElementaryTypeName","src":"17227:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17226:9:70"},"scope":16074,"src":"17171:193:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15252,"nodeType":"Block","src":"17761:150:70","statements":[{"expression":{"id":15240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15235,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15233,"src":"17771:10:70","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15238,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15230,"src":"17791:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15237,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17784:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int248_$","typeString":"type(int248)"},"typeName":{"id":15236,"name":"int248","nodeType":"ElementaryTypeName","src":"17784:6:70","typeDescriptions":{}}},"id":15239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17784:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"src":"17771:26:70","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"id":15241,"nodeType":"ExpressionStatement","src":"17771:26:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15242,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15233,"src":"17811:10:70","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15243,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15230,"src":"17825:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17811:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15251,"nodeType":"IfStatement","src":"17807:98:70","trueBody":{"id":15250,"nodeType":"Block","src":"17832:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":15246,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17883:3:70","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":15247,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15230,"src":"17888:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15245,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"17853:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17853:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15249,"nodeType":"RevertStatement","src":"17846:48:70"}]}}]},"documentation":{"id":15228,"nodeType":"StructuredDocumentation","src":"17370:312:70","text":" @dev Returns the downcasted int248 from int256, reverting on\n overflow (when the input is less than smallest int248 or\n greater than largest int248).\n Counterpart to Solidity's `int248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":15253,"implemented":true,"kind":"function","modifiers":[],"name":"toInt248","nameLocation":"17696:8:70","nodeType":"FunctionDefinition","parameters":{"id":15231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15230,"mutability":"mutable","name":"value","nameLocation":"17712:5:70","nodeType":"VariableDeclaration","scope":15253,"src":"17705:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15229,"name":"int256","nodeType":"ElementaryTypeName","src":"17705:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17704:14:70"},"returnParameters":{"id":15234,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15233,"mutability":"mutable","name":"downcasted","nameLocation":"17749:10:70","nodeType":"VariableDeclaration","scope":15253,"src":"17742:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"},"typeName":{"id":15232,"name":"int248","nodeType":"ElementaryTypeName","src":"17742:6:70","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"visibility":"internal"}],"src":"17741:19:70"},"scope":16074,"src":"17687:224:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15278,"nodeType":"Block","src":"18308:150:70","statements":[{"expression":{"id":15266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15261,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15259,"src":"18318:10:70","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15264,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15256,"src":"18338:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15263,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18331:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int240_$","typeString":"type(int240)"},"typeName":{"id":15262,"name":"int240","nodeType":"ElementaryTypeName","src":"18331:6:70","typeDescriptions":{}}},"id":15265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18331:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"src":"18318:26:70","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"id":15267,"nodeType":"ExpressionStatement","src":"18318:26:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15268,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15259,"src":"18358:10:70","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15269,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15256,"src":"18372:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18358:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15277,"nodeType":"IfStatement","src":"18354:98:70","trueBody":{"id":15276,"nodeType":"Block","src":"18379:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":15272,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18430:3:70","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":15273,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15256,"src":"18435:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15271,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"18400:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18400:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15275,"nodeType":"RevertStatement","src":"18393:48:70"}]}}]},"documentation":{"id":15254,"nodeType":"StructuredDocumentation","src":"17917:312:70","text":" @dev Returns the downcasted int240 from int256, reverting on\n overflow (when the input is less than smallest int240 or\n greater than largest int240).\n Counterpart to Solidity's `int240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":15279,"implemented":true,"kind":"function","modifiers":[],"name":"toInt240","nameLocation":"18243:8:70","nodeType":"FunctionDefinition","parameters":{"id":15257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15256,"mutability":"mutable","name":"value","nameLocation":"18259:5:70","nodeType":"VariableDeclaration","scope":15279,"src":"18252:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15255,"name":"int256","nodeType":"ElementaryTypeName","src":"18252:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18251:14:70"},"returnParameters":{"id":15260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15259,"mutability":"mutable","name":"downcasted","nameLocation":"18296:10:70","nodeType":"VariableDeclaration","scope":15279,"src":"18289:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"},"typeName":{"id":15258,"name":"int240","nodeType":"ElementaryTypeName","src":"18289:6:70","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"visibility":"internal"}],"src":"18288:19:70"},"scope":16074,"src":"18234:224:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15304,"nodeType":"Block","src":"18855:150:70","statements":[{"expression":{"id":15292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15287,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15285,"src":"18865:10:70","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15290,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15282,"src":"18885:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15289,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18878:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int232_$","typeString":"type(int232)"},"typeName":{"id":15288,"name":"int232","nodeType":"ElementaryTypeName","src":"18878:6:70","typeDescriptions":{}}},"id":15291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18878:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"src":"18865:26:70","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"id":15293,"nodeType":"ExpressionStatement","src":"18865:26:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15294,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15285,"src":"18905:10:70","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15295,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15282,"src":"18919:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18905:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15303,"nodeType":"IfStatement","src":"18901:98:70","trueBody":{"id":15302,"nodeType":"Block","src":"18926:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":15298,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18977:3:70","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":15299,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15282,"src":"18982:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15297,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"18947:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18947:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15301,"nodeType":"RevertStatement","src":"18940:48:70"}]}}]},"documentation":{"id":15280,"nodeType":"StructuredDocumentation","src":"18464:312:70","text":" @dev Returns the downcasted int232 from int256, reverting on\n overflow (when the input is less than smallest int232 or\n greater than largest int232).\n Counterpart to Solidity's `int232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":15305,"implemented":true,"kind":"function","modifiers":[],"name":"toInt232","nameLocation":"18790:8:70","nodeType":"FunctionDefinition","parameters":{"id":15283,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15282,"mutability":"mutable","name":"value","nameLocation":"18806:5:70","nodeType":"VariableDeclaration","scope":15305,"src":"18799:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15281,"name":"int256","nodeType":"ElementaryTypeName","src":"18799:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18798:14:70"},"returnParameters":{"id":15286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15285,"mutability":"mutable","name":"downcasted","nameLocation":"18843:10:70","nodeType":"VariableDeclaration","scope":15305,"src":"18836:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"},"typeName":{"id":15284,"name":"int232","nodeType":"ElementaryTypeName","src":"18836:6:70","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"visibility":"internal"}],"src":"18835:19:70"},"scope":16074,"src":"18781:224:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15330,"nodeType":"Block","src":"19402:150:70","statements":[{"expression":{"id":15318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15313,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15311,"src":"19412:10:70","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15316,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15308,"src":"19432:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15315,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19425:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int224_$","typeString":"type(int224)"},"typeName":{"id":15314,"name":"int224","nodeType":"ElementaryTypeName","src":"19425:6:70","typeDescriptions":{}}},"id":15317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19425:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"src":"19412:26:70","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"id":15319,"nodeType":"ExpressionStatement","src":"19412:26:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15320,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15311,"src":"19452:10:70","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15321,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15308,"src":"19466:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19452:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15329,"nodeType":"IfStatement","src":"19448:98:70","trueBody":{"id":15328,"nodeType":"Block","src":"19473:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":15324,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19524:3:70","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":15325,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15308,"src":"19529:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15323,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"19494:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19494:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15327,"nodeType":"RevertStatement","src":"19487:48:70"}]}}]},"documentation":{"id":15306,"nodeType":"StructuredDocumentation","src":"19011:312:70","text":" @dev Returns the downcasted int224 from int256, reverting on\n overflow (when the input is less than smallest int224 or\n greater than largest int224).\n Counterpart to Solidity's `int224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":15331,"implemented":true,"kind":"function","modifiers":[],"name":"toInt224","nameLocation":"19337:8:70","nodeType":"FunctionDefinition","parameters":{"id":15309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15308,"mutability":"mutable","name":"value","nameLocation":"19353:5:70","nodeType":"VariableDeclaration","scope":15331,"src":"19346:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15307,"name":"int256","nodeType":"ElementaryTypeName","src":"19346:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19345:14:70"},"returnParameters":{"id":15312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15311,"mutability":"mutable","name":"downcasted","nameLocation":"19390:10:70","nodeType":"VariableDeclaration","scope":15331,"src":"19383:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"},"typeName":{"id":15310,"name":"int224","nodeType":"ElementaryTypeName","src":"19383:6:70","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"visibility":"internal"}],"src":"19382:19:70"},"scope":16074,"src":"19328:224:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15356,"nodeType":"Block","src":"19949:150:70","statements":[{"expression":{"id":15344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15339,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15337,"src":"19959:10:70","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15342,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15334,"src":"19979:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15341,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19972:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int216_$","typeString":"type(int216)"},"typeName":{"id":15340,"name":"int216","nodeType":"ElementaryTypeName","src":"19972:6:70","typeDescriptions":{}}},"id":15343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19972:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"src":"19959:26:70","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"id":15345,"nodeType":"ExpressionStatement","src":"19959:26:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15346,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15337,"src":"19999:10:70","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15347,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15334,"src":"20013:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19999:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15355,"nodeType":"IfStatement","src":"19995:98:70","trueBody":{"id":15354,"nodeType":"Block","src":"20020:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":15350,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20071:3:70","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":15351,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15334,"src":"20076:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15349,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"20041:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20041:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15353,"nodeType":"RevertStatement","src":"20034:48:70"}]}}]},"documentation":{"id":15332,"nodeType":"StructuredDocumentation","src":"19558:312:70","text":" @dev Returns the downcasted int216 from int256, reverting on\n overflow (when the input is less than smallest int216 or\n greater than largest int216).\n Counterpart to Solidity's `int216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":15357,"implemented":true,"kind":"function","modifiers":[],"name":"toInt216","nameLocation":"19884:8:70","nodeType":"FunctionDefinition","parameters":{"id":15335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15334,"mutability":"mutable","name":"value","nameLocation":"19900:5:70","nodeType":"VariableDeclaration","scope":15357,"src":"19893:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15333,"name":"int256","nodeType":"ElementaryTypeName","src":"19893:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19892:14:70"},"returnParameters":{"id":15338,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15337,"mutability":"mutable","name":"downcasted","nameLocation":"19937:10:70","nodeType":"VariableDeclaration","scope":15357,"src":"19930:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"},"typeName":{"id":15336,"name":"int216","nodeType":"ElementaryTypeName","src":"19930:6:70","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"visibility":"internal"}],"src":"19929:19:70"},"scope":16074,"src":"19875:224:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15382,"nodeType":"Block","src":"20496:150:70","statements":[{"expression":{"id":15370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15365,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15363,"src":"20506:10:70","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15368,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15360,"src":"20526:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15367,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20519:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int208_$","typeString":"type(int208)"},"typeName":{"id":15366,"name":"int208","nodeType":"ElementaryTypeName","src":"20519:6:70","typeDescriptions":{}}},"id":15369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20519:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"src":"20506:26:70","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"id":15371,"nodeType":"ExpressionStatement","src":"20506:26:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15372,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15363,"src":"20546:10:70","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15373,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15360,"src":"20560:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20546:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15381,"nodeType":"IfStatement","src":"20542:98:70","trueBody":{"id":15380,"nodeType":"Block","src":"20567:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":15376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20618:3:70","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":15377,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15360,"src":"20623:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15375,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"20588:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15378,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20588:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15379,"nodeType":"RevertStatement","src":"20581:48:70"}]}}]},"documentation":{"id":15358,"nodeType":"StructuredDocumentation","src":"20105:312:70","text":" @dev Returns the downcasted int208 from int256, reverting on\n overflow (when the input is less than smallest int208 or\n greater than largest int208).\n Counterpart to Solidity's `int208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":15383,"implemented":true,"kind":"function","modifiers":[],"name":"toInt208","nameLocation":"20431:8:70","nodeType":"FunctionDefinition","parameters":{"id":15361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15360,"mutability":"mutable","name":"value","nameLocation":"20447:5:70","nodeType":"VariableDeclaration","scope":15383,"src":"20440:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15359,"name":"int256","nodeType":"ElementaryTypeName","src":"20440:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20439:14:70"},"returnParameters":{"id":15364,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15363,"mutability":"mutable","name":"downcasted","nameLocation":"20484:10:70","nodeType":"VariableDeclaration","scope":15383,"src":"20477:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"},"typeName":{"id":15362,"name":"int208","nodeType":"ElementaryTypeName","src":"20477:6:70","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"visibility":"internal"}],"src":"20476:19:70"},"scope":16074,"src":"20422:224:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15408,"nodeType":"Block","src":"21043:150:70","statements":[{"expression":{"id":15396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15391,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15389,"src":"21053:10:70","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15394,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15386,"src":"21073:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15393,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21066:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int200_$","typeString":"type(int200)"},"typeName":{"id":15392,"name":"int200","nodeType":"ElementaryTypeName","src":"21066:6:70","typeDescriptions":{}}},"id":15395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21066:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"src":"21053:26:70","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"id":15397,"nodeType":"ExpressionStatement","src":"21053:26:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15398,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15389,"src":"21093:10:70","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15399,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15386,"src":"21107:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21093:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15407,"nodeType":"IfStatement","src":"21089:98:70","trueBody":{"id":15406,"nodeType":"Block","src":"21114:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":15402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21165:3:70","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":15403,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15386,"src":"21170:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15401,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"21135:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21135:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15405,"nodeType":"RevertStatement","src":"21128:48:70"}]}}]},"documentation":{"id":15384,"nodeType":"StructuredDocumentation","src":"20652:312:70","text":" @dev Returns the downcasted int200 from int256, reverting on\n overflow (when the input is less than smallest int200 or\n greater than largest int200).\n Counterpart to Solidity's `int200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":15409,"implemented":true,"kind":"function","modifiers":[],"name":"toInt200","nameLocation":"20978:8:70","nodeType":"FunctionDefinition","parameters":{"id":15387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15386,"mutability":"mutable","name":"value","nameLocation":"20994:5:70","nodeType":"VariableDeclaration","scope":15409,"src":"20987:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15385,"name":"int256","nodeType":"ElementaryTypeName","src":"20987:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20986:14:70"},"returnParameters":{"id":15390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15389,"mutability":"mutable","name":"downcasted","nameLocation":"21031:10:70","nodeType":"VariableDeclaration","scope":15409,"src":"21024:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"},"typeName":{"id":15388,"name":"int200","nodeType":"ElementaryTypeName","src":"21024:6:70","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"visibility":"internal"}],"src":"21023:19:70"},"scope":16074,"src":"20969:224:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15434,"nodeType":"Block","src":"21590:150:70","statements":[{"expression":{"id":15422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15417,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15415,"src":"21600:10:70","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15420,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15412,"src":"21620:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15419,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21613:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int192_$","typeString":"type(int192)"},"typeName":{"id":15418,"name":"int192","nodeType":"ElementaryTypeName","src":"21613:6:70","typeDescriptions":{}}},"id":15421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21613:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"src":"21600:26:70","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"id":15423,"nodeType":"ExpressionStatement","src":"21600:26:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15424,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15415,"src":"21640:10:70","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15425,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15412,"src":"21654:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21640:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15433,"nodeType":"IfStatement","src":"21636:98:70","trueBody":{"id":15432,"nodeType":"Block","src":"21661:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":15428,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21712:3:70","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":15429,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15412,"src":"21717:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15427,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"21682:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21682:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15431,"nodeType":"RevertStatement","src":"21675:48:70"}]}}]},"documentation":{"id":15410,"nodeType":"StructuredDocumentation","src":"21199:312:70","text":" @dev Returns the downcasted int192 from int256, reverting on\n overflow (when the input is less than smallest int192 or\n greater than largest int192).\n Counterpart to Solidity's `int192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":15435,"implemented":true,"kind":"function","modifiers":[],"name":"toInt192","nameLocation":"21525:8:70","nodeType":"FunctionDefinition","parameters":{"id":15413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15412,"mutability":"mutable","name":"value","nameLocation":"21541:5:70","nodeType":"VariableDeclaration","scope":15435,"src":"21534:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15411,"name":"int256","nodeType":"ElementaryTypeName","src":"21534:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"21533:14:70"},"returnParameters":{"id":15416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15415,"mutability":"mutable","name":"downcasted","nameLocation":"21578:10:70","nodeType":"VariableDeclaration","scope":15435,"src":"21571:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"},"typeName":{"id":15414,"name":"int192","nodeType":"ElementaryTypeName","src":"21571:6:70","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"visibility":"internal"}],"src":"21570:19:70"},"scope":16074,"src":"21516:224:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15460,"nodeType":"Block","src":"22137:150:70","statements":[{"expression":{"id":15448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15443,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15441,"src":"22147:10:70","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15446,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15438,"src":"22167:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15445,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22160:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int184_$","typeString":"type(int184)"},"typeName":{"id":15444,"name":"int184","nodeType":"ElementaryTypeName","src":"22160:6:70","typeDescriptions":{}}},"id":15447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22160:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"src":"22147:26:70","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"id":15449,"nodeType":"ExpressionStatement","src":"22147:26:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15450,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15441,"src":"22187:10:70","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15451,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15438,"src":"22201:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22187:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15459,"nodeType":"IfStatement","src":"22183:98:70","trueBody":{"id":15458,"nodeType":"Block","src":"22208:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":15454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22259:3:70","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":15455,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15438,"src":"22264:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15453,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"22229:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22229:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15457,"nodeType":"RevertStatement","src":"22222:48:70"}]}}]},"documentation":{"id":15436,"nodeType":"StructuredDocumentation","src":"21746:312:70","text":" @dev Returns the downcasted int184 from int256, reverting on\n overflow (when the input is less than smallest int184 or\n greater than largest int184).\n Counterpart to Solidity's `int184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":15461,"implemented":true,"kind":"function","modifiers":[],"name":"toInt184","nameLocation":"22072:8:70","nodeType":"FunctionDefinition","parameters":{"id":15439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15438,"mutability":"mutable","name":"value","nameLocation":"22088:5:70","nodeType":"VariableDeclaration","scope":15461,"src":"22081:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15437,"name":"int256","nodeType":"ElementaryTypeName","src":"22081:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22080:14:70"},"returnParameters":{"id":15442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15441,"mutability":"mutable","name":"downcasted","nameLocation":"22125:10:70","nodeType":"VariableDeclaration","scope":15461,"src":"22118:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"},"typeName":{"id":15440,"name":"int184","nodeType":"ElementaryTypeName","src":"22118:6:70","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"visibility":"internal"}],"src":"22117:19:70"},"scope":16074,"src":"22063:224:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15486,"nodeType":"Block","src":"22684:150:70","statements":[{"expression":{"id":15474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15469,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15467,"src":"22694:10:70","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15472,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15464,"src":"22714:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15471,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22707:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int176_$","typeString":"type(int176)"},"typeName":{"id":15470,"name":"int176","nodeType":"ElementaryTypeName","src":"22707:6:70","typeDescriptions":{}}},"id":15473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22707:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"src":"22694:26:70","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"id":15475,"nodeType":"ExpressionStatement","src":"22694:26:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15476,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15467,"src":"22734:10:70","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15477,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15464,"src":"22748:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22734:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15485,"nodeType":"IfStatement","src":"22730:98:70","trueBody":{"id":15484,"nodeType":"Block","src":"22755:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":15480,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22806:3:70","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":15481,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15464,"src":"22811:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15479,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"22776:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22776:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15483,"nodeType":"RevertStatement","src":"22769:48:70"}]}}]},"documentation":{"id":15462,"nodeType":"StructuredDocumentation","src":"22293:312:70","text":" @dev Returns the downcasted int176 from int256, reverting on\n overflow (when the input is less than smallest int176 or\n greater than largest int176).\n Counterpart to Solidity's `int176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":15487,"implemented":true,"kind":"function","modifiers":[],"name":"toInt176","nameLocation":"22619:8:70","nodeType":"FunctionDefinition","parameters":{"id":15465,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15464,"mutability":"mutable","name":"value","nameLocation":"22635:5:70","nodeType":"VariableDeclaration","scope":15487,"src":"22628:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15463,"name":"int256","nodeType":"ElementaryTypeName","src":"22628:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22627:14:70"},"returnParameters":{"id":15468,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15467,"mutability":"mutable","name":"downcasted","nameLocation":"22672:10:70","nodeType":"VariableDeclaration","scope":15487,"src":"22665:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"},"typeName":{"id":15466,"name":"int176","nodeType":"ElementaryTypeName","src":"22665:6:70","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"visibility":"internal"}],"src":"22664:19:70"},"scope":16074,"src":"22610:224:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15512,"nodeType":"Block","src":"23231:150:70","statements":[{"expression":{"id":15500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15495,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15493,"src":"23241:10:70","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15498,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"23261:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15497,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23254:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int168_$","typeString":"type(int168)"},"typeName":{"id":15496,"name":"int168","nodeType":"ElementaryTypeName","src":"23254:6:70","typeDescriptions":{}}},"id":15499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23254:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"src":"23241:26:70","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"id":15501,"nodeType":"ExpressionStatement","src":"23241:26:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15502,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15493,"src":"23281:10:70","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15503,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"23295:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23281:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15511,"nodeType":"IfStatement","src":"23277:98:70","trueBody":{"id":15510,"nodeType":"Block","src":"23302:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":15506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23353:3:70","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":15507,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15490,"src":"23358:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15505,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"23323:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23323:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15509,"nodeType":"RevertStatement","src":"23316:48:70"}]}}]},"documentation":{"id":15488,"nodeType":"StructuredDocumentation","src":"22840:312:70","text":" @dev Returns the downcasted int168 from int256, reverting on\n overflow (when the input is less than smallest int168 or\n greater than largest int168).\n Counterpart to Solidity's `int168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":15513,"implemented":true,"kind":"function","modifiers":[],"name":"toInt168","nameLocation":"23166:8:70","nodeType":"FunctionDefinition","parameters":{"id":15491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15490,"mutability":"mutable","name":"value","nameLocation":"23182:5:70","nodeType":"VariableDeclaration","scope":15513,"src":"23175:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15489,"name":"int256","nodeType":"ElementaryTypeName","src":"23175:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23174:14:70"},"returnParameters":{"id":15494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15493,"mutability":"mutable","name":"downcasted","nameLocation":"23219:10:70","nodeType":"VariableDeclaration","scope":15513,"src":"23212:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"},"typeName":{"id":15492,"name":"int168","nodeType":"ElementaryTypeName","src":"23212:6:70","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"visibility":"internal"}],"src":"23211:19:70"},"scope":16074,"src":"23157:224:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15538,"nodeType":"Block","src":"23778:150:70","statements":[{"expression":{"id":15526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15521,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15519,"src":"23788:10:70","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15524,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15516,"src":"23808:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15523,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23801:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int160_$","typeString":"type(int160)"},"typeName":{"id":15522,"name":"int160","nodeType":"ElementaryTypeName","src":"23801:6:70","typeDescriptions":{}}},"id":15525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23801:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"src":"23788:26:70","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"id":15527,"nodeType":"ExpressionStatement","src":"23788:26:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15528,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15519,"src":"23828:10:70","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15529,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15516,"src":"23842:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23828:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15537,"nodeType":"IfStatement","src":"23824:98:70","trueBody":{"id":15536,"nodeType":"Block","src":"23849:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":15532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23900:3:70","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":15533,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15516,"src":"23905:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15531,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"23870:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23870:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15535,"nodeType":"RevertStatement","src":"23863:48:70"}]}}]},"documentation":{"id":15514,"nodeType":"StructuredDocumentation","src":"23387:312:70","text":" @dev Returns the downcasted int160 from int256, reverting on\n overflow (when the input is less than smallest int160 or\n greater than largest int160).\n Counterpart to Solidity's `int160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":15539,"implemented":true,"kind":"function","modifiers":[],"name":"toInt160","nameLocation":"23713:8:70","nodeType":"FunctionDefinition","parameters":{"id":15517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15516,"mutability":"mutable","name":"value","nameLocation":"23729:5:70","nodeType":"VariableDeclaration","scope":15539,"src":"23722:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15515,"name":"int256","nodeType":"ElementaryTypeName","src":"23722:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23721:14:70"},"returnParameters":{"id":15520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15519,"mutability":"mutable","name":"downcasted","nameLocation":"23766:10:70","nodeType":"VariableDeclaration","scope":15539,"src":"23759:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"},"typeName":{"id":15518,"name":"int160","nodeType":"ElementaryTypeName","src":"23759:6:70","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"visibility":"internal"}],"src":"23758:19:70"},"scope":16074,"src":"23704:224:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15564,"nodeType":"Block","src":"24325:150:70","statements":[{"expression":{"id":15552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15547,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"24335:10:70","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15550,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15542,"src":"24355:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15549,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24348:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int152_$","typeString":"type(int152)"},"typeName":{"id":15548,"name":"int152","nodeType":"ElementaryTypeName","src":"24348:6:70","typeDescriptions":{}}},"id":15551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24348:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"src":"24335:26:70","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"id":15553,"nodeType":"ExpressionStatement","src":"24335:26:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15554,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15545,"src":"24375:10:70","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15555,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15542,"src":"24389:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24375:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15563,"nodeType":"IfStatement","src":"24371:98:70","trueBody":{"id":15562,"nodeType":"Block","src":"24396:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":15558,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24447:3:70","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":15559,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15542,"src":"24452:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15557,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"24417:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24417:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15561,"nodeType":"RevertStatement","src":"24410:48:70"}]}}]},"documentation":{"id":15540,"nodeType":"StructuredDocumentation","src":"23934:312:70","text":" @dev Returns the downcasted int152 from int256, reverting on\n overflow (when the input is less than smallest int152 or\n greater than largest int152).\n Counterpart to Solidity's `int152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":15565,"implemented":true,"kind":"function","modifiers":[],"name":"toInt152","nameLocation":"24260:8:70","nodeType":"FunctionDefinition","parameters":{"id":15543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15542,"mutability":"mutable","name":"value","nameLocation":"24276:5:70","nodeType":"VariableDeclaration","scope":15565,"src":"24269:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15541,"name":"int256","nodeType":"ElementaryTypeName","src":"24269:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24268:14:70"},"returnParameters":{"id":15546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15545,"mutability":"mutable","name":"downcasted","nameLocation":"24313:10:70","nodeType":"VariableDeclaration","scope":15565,"src":"24306:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"},"typeName":{"id":15544,"name":"int152","nodeType":"ElementaryTypeName","src":"24306:6:70","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"visibility":"internal"}],"src":"24305:19:70"},"scope":16074,"src":"24251:224:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15590,"nodeType":"Block","src":"24872:150:70","statements":[{"expression":{"id":15578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15573,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15571,"src":"24882:10:70","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15576,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15568,"src":"24902:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15575,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24895:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int144_$","typeString":"type(int144)"},"typeName":{"id":15574,"name":"int144","nodeType":"ElementaryTypeName","src":"24895:6:70","typeDescriptions":{}}},"id":15577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24895:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"src":"24882:26:70","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"id":15579,"nodeType":"ExpressionStatement","src":"24882:26:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15580,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15571,"src":"24922:10:70","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15581,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15568,"src":"24936:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24922:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15589,"nodeType":"IfStatement","src":"24918:98:70","trueBody":{"id":15588,"nodeType":"Block","src":"24943:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":15584,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24994:3:70","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":15585,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15568,"src":"24999:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15583,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"24964:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24964:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15587,"nodeType":"RevertStatement","src":"24957:48:70"}]}}]},"documentation":{"id":15566,"nodeType":"StructuredDocumentation","src":"24481:312:70","text":" @dev Returns the downcasted int144 from int256, reverting on\n overflow (when the input is less than smallest int144 or\n greater than largest int144).\n Counterpart to Solidity's `int144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":15591,"implemented":true,"kind":"function","modifiers":[],"name":"toInt144","nameLocation":"24807:8:70","nodeType":"FunctionDefinition","parameters":{"id":15569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15568,"mutability":"mutable","name":"value","nameLocation":"24823:5:70","nodeType":"VariableDeclaration","scope":15591,"src":"24816:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15567,"name":"int256","nodeType":"ElementaryTypeName","src":"24816:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24815:14:70"},"returnParameters":{"id":15572,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15571,"mutability":"mutable","name":"downcasted","nameLocation":"24860:10:70","nodeType":"VariableDeclaration","scope":15591,"src":"24853:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"},"typeName":{"id":15570,"name":"int144","nodeType":"ElementaryTypeName","src":"24853:6:70","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"visibility":"internal"}],"src":"24852:19:70"},"scope":16074,"src":"24798:224:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15616,"nodeType":"Block","src":"25419:150:70","statements":[{"expression":{"id":15604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15599,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15597,"src":"25429:10:70","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15602,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15594,"src":"25449:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15601,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25442:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int136_$","typeString":"type(int136)"},"typeName":{"id":15600,"name":"int136","nodeType":"ElementaryTypeName","src":"25442:6:70","typeDescriptions":{}}},"id":15603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25442:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"src":"25429:26:70","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"id":15605,"nodeType":"ExpressionStatement","src":"25429:26:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15606,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15597,"src":"25469:10:70","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15607,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15594,"src":"25483:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"25469:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15615,"nodeType":"IfStatement","src":"25465:98:70","trueBody":{"id":15614,"nodeType":"Block","src":"25490:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":15610,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25541:3:70","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":15611,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15594,"src":"25546:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15609,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"25511:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25511:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15613,"nodeType":"RevertStatement","src":"25504:48:70"}]}}]},"documentation":{"id":15592,"nodeType":"StructuredDocumentation","src":"25028:312:70","text":" @dev Returns the downcasted int136 from int256, reverting on\n overflow (when the input is less than smallest int136 or\n greater than largest int136).\n Counterpart to Solidity's `int136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":15617,"implemented":true,"kind":"function","modifiers":[],"name":"toInt136","nameLocation":"25354:8:70","nodeType":"FunctionDefinition","parameters":{"id":15595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15594,"mutability":"mutable","name":"value","nameLocation":"25370:5:70","nodeType":"VariableDeclaration","scope":15617,"src":"25363:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15593,"name":"int256","nodeType":"ElementaryTypeName","src":"25363:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25362:14:70"},"returnParameters":{"id":15598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15597,"mutability":"mutable","name":"downcasted","nameLocation":"25407:10:70","nodeType":"VariableDeclaration","scope":15617,"src":"25400:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"},"typeName":{"id":15596,"name":"int136","nodeType":"ElementaryTypeName","src":"25400:6:70","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"visibility":"internal"}],"src":"25399:19:70"},"scope":16074,"src":"25345:224:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15642,"nodeType":"Block","src":"25966:150:70","statements":[{"expression":{"id":15630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15625,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15623,"src":"25976:10:70","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15628,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15620,"src":"25996:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15627,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25989:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"},"typeName":{"id":15626,"name":"int128","nodeType":"ElementaryTypeName","src":"25989:6:70","typeDescriptions":{}}},"id":15629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25989:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"src":"25976:26:70","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"id":15631,"nodeType":"ExpressionStatement","src":"25976:26:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15632,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15623,"src":"26016:10:70","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15633,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15620,"src":"26030:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26016:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15641,"nodeType":"IfStatement","src":"26012:98:70","trueBody":{"id":15640,"nodeType":"Block","src":"26037:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":15636,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26088:3:70","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":15637,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15620,"src":"26093:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15635,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"26058:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15638,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26058:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15639,"nodeType":"RevertStatement","src":"26051:48:70"}]}}]},"documentation":{"id":15618,"nodeType":"StructuredDocumentation","src":"25575:312:70","text":" @dev Returns the downcasted int128 from int256, reverting on\n overflow (when the input is less than smallest int128 or\n greater than largest int128).\n Counterpart to Solidity's `int128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":15643,"implemented":true,"kind":"function","modifiers":[],"name":"toInt128","nameLocation":"25901:8:70","nodeType":"FunctionDefinition","parameters":{"id":15621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15620,"mutability":"mutable","name":"value","nameLocation":"25917:5:70","nodeType":"VariableDeclaration","scope":15643,"src":"25910:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15619,"name":"int256","nodeType":"ElementaryTypeName","src":"25910:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25909:14:70"},"returnParameters":{"id":15624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15623,"mutability":"mutable","name":"downcasted","nameLocation":"25954:10:70","nodeType":"VariableDeclaration","scope":15643,"src":"25947:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"},"typeName":{"id":15622,"name":"int128","nodeType":"ElementaryTypeName","src":"25947:6:70","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"visibility":"internal"}],"src":"25946:19:70"},"scope":16074,"src":"25892:224:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15668,"nodeType":"Block","src":"26513:150:70","statements":[{"expression":{"id":15656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15651,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15649,"src":"26523:10:70","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15654,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15646,"src":"26543:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15653,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26536:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int120_$","typeString":"type(int120)"},"typeName":{"id":15652,"name":"int120","nodeType":"ElementaryTypeName","src":"26536:6:70","typeDescriptions":{}}},"id":15655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26536:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"src":"26523:26:70","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"id":15657,"nodeType":"ExpressionStatement","src":"26523:26:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15658,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15649,"src":"26563:10:70","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15659,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15646,"src":"26577:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26563:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15667,"nodeType":"IfStatement","src":"26559:98:70","trueBody":{"id":15666,"nodeType":"Block","src":"26584:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":15662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26635:3:70","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":15663,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15646,"src":"26640:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15661,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"26605:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26605:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15665,"nodeType":"RevertStatement","src":"26598:48:70"}]}}]},"documentation":{"id":15644,"nodeType":"StructuredDocumentation","src":"26122:312:70","text":" @dev Returns the downcasted int120 from int256, reverting on\n overflow (when the input is less than smallest int120 or\n greater than largest int120).\n Counterpart to Solidity's `int120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":15669,"implemented":true,"kind":"function","modifiers":[],"name":"toInt120","nameLocation":"26448:8:70","nodeType":"FunctionDefinition","parameters":{"id":15647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15646,"mutability":"mutable","name":"value","nameLocation":"26464:5:70","nodeType":"VariableDeclaration","scope":15669,"src":"26457:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15645,"name":"int256","nodeType":"ElementaryTypeName","src":"26457:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"26456:14:70"},"returnParameters":{"id":15650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15649,"mutability":"mutable","name":"downcasted","nameLocation":"26501:10:70","nodeType":"VariableDeclaration","scope":15669,"src":"26494:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"},"typeName":{"id":15648,"name":"int120","nodeType":"ElementaryTypeName","src":"26494:6:70","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"visibility":"internal"}],"src":"26493:19:70"},"scope":16074,"src":"26439:224:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15694,"nodeType":"Block","src":"27060:150:70","statements":[{"expression":{"id":15682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15677,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15675,"src":"27070:10:70","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15680,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15672,"src":"27090:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15679,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27083:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int112_$","typeString":"type(int112)"},"typeName":{"id":15678,"name":"int112","nodeType":"ElementaryTypeName","src":"27083:6:70","typeDescriptions":{}}},"id":15681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27083:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"src":"27070:26:70","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"id":15683,"nodeType":"ExpressionStatement","src":"27070:26:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15684,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15675,"src":"27110:10:70","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15685,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15672,"src":"27124:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27110:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15693,"nodeType":"IfStatement","src":"27106:98:70","trueBody":{"id":15692,"nodeType":"Block","src":"27131:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":15688,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27182:3:70","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":15689,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15672,"src":"27187:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15687,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"27152:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27152:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15691,"nodeType":"RevertStatement","src":"27145:48:70"}]}}]},"documentation":{"id":15670,"nodeType":"StructuredDocumentation","src":"26669:312:70","text":" @dev Returns the downcasted int112 from int256, reverting on\n overflow (when the input is less than smallest int112 or\n greater than largest int112).\n Counterpart to Solidity's `int112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":15695,"implemented":true,"kind":"function","modifiers":[],"name":"toInt112","nameLocation":"26995:8:70","nodeType":"FunctionDefinition","parameters":{"id":15673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15672,"mutability":"mutable","name":"value","nameLocation":"27011:5:70","nodeType":"VariableDeclaration","scope":15695,"src":"27004:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15671,"name":"int256","nodeType":"ElementaryTypeName","src":"27004:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"27003:14:70"},"returnParameters":{"id":15676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15675,"mutability":"mutable","name":"downcasted","nameLocation":"27048:10:70","nodeType":"VariableDeclaration","scope":15695,"src":"27041:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"},"typeName":{"id":15674,"name":"int112","nodeType":"ElementaryTypeName","src":"27041:6:70","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"visibility":"internal"}],"src":"27040:19:70"},"scope":16074,"src":"26986:224:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15720,"nodeType":"Block","src":"27607:150:70","statements":[{"expression":{"id":15708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15703,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15701,"src":"27617:10:70","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15706,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15698,"src":"27637:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15705,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27630:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int104_$","typeString":"type(int104)"},"typeName":{"id":15704,"name":"int104","nodeType":"ElementaryTypeName","src":"27630:6:70","typeDescriptions":{}}},"id":15707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27630:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"src":"27617:26:70","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"id":15709,"nodeType":"ExpressionStatement","src":"27617:26:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15710,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15701,"src":"27657:10:70","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15711,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15698,"src":"27671:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27657:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15719,"nodeType":"IfStatement","src":"27653:98:70","trueBody":{"id":15718,"nodeType":"Block","src":"27678:73:70","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":15714,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27729:3:70","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":15715,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15698,"src":"27734:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15713,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"27699:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27699:41:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15717,"nodeType":"RevertStatement","src":"27692:48:70"}]}}]},"documentation":{"id":15696,"nodeType":"StructuredDocumentation","src":"27216:312:70","text":" @dev Returns the downcasted int104 from int256, reverting on\n overflow (when the input is less than smallest int104 or\n greater than largest int104).\n Counterpart to Solidity's `int104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":15721,"implemented":true,"kind":"function","modifiers":[],"name":"toInt104","nameLocation":"27542:8:70","nodeType":"FunctionDefinition","parameters":{"id":15699,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15698,"mutability":"mutable","name":"value","nameLocation":"27558:5:70","nodeType":"VariableDeclaration","scope":15721,"src":"27551:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15697,"name":"int256","nodeType":"ElementaryTypeName","src":"27551:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"27550:14:70"},"returnParameters":{"id":15702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15701,"mutability":"mutable","name":"downcasted","nameLocation":"27595:10:70","nodeType":"VariableDeclaration","scope":15721,"src":"27588:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"},"typeName":{"id":15700,"name":"int104","nodeType":"ElementaryTypeName","src":"27588:6:70","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"visibility":"internal"}],"src":"27587:19:70"},"scope":16074,"src":"27533:224:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15746,"nodeType":"Block","src":"28147:148:70","statements":[{"expression":{"id":15734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15729,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15727,"src":"28157:10:70","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15732,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15724,"src":"28176:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15731,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28170:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int96_$","typeString":"type(int96)"},"typeName":{"id":15730,"name":"int96","nodeType":"ElementaryTypeName","src":"28170:5:70","typeDescriptions":{}}},"id":15733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28170:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"src":"28157:25:70","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"id":15735,"nodeType":"ExpressionStatement","src":"28157:25:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15736,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15727,"src":"28196:10:70","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15737,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15724,"src":"28210:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28196:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15745,"nodeType":"IfStatement","src":"28192:97:70","trueBody":{"id":15744,"nodeType":"Block","src":"28217:72:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":15740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28268:2:70","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":15741,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15724,"src":"28272:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15739,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"28238:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28238:40:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15743,"nodeType":"RevertStatement","src":"28231:47:70"}]}}]},"documentation":{"id":15722,"nodeType":"StructuredDocumentation","src":"27763:307:70","text":" @dev Returns the downcasted int96 from int256, reverting on\n overflow (when the input is less than smallest int96 or\n greater than largest int96).\n Counterpart to Solidity's `int96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":15747,"implemented":true,"kind":"function","modifiers":[],"name":"toInt96","nameLocation":"28084:7:70","nodeType":"FunctionDefinition","parameters":{"id":15725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15724,"mutability":"mutable","name":"value","nameLocation":"28099:5:70","nodeType":"VariableDeclaration","scope":15747,"src":"28092:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15723,"name":"int256","nodeType":"ElementaryTypeName","src":"28092:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28091:14:70"},"returnParameters":{"id":15728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15727,"mutability":"mutable","name":"downcasted","nameLocation":"28135:10:70","nodeType":"VariableDeclaration","scope":15747,"src":"28129:16:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"},"typeName":{"id":15726,"name":"int96","nodeType":"ElementaryTypeName","src":"28129:5:70","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"visibility":"internal"}],"src":"28128:18:70"},"scope":16074,"src":"28075:220:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15772,"nodeType":"Block","src":"28685:148:70","statements":[{"expression":{"id":15760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15755,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15753,"src":"28695:10:70","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15758,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15750,"src":"28714:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28708:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int88_$","typeString":"type(int88)"},"typeName":{"id":15756,"name":"int88","nodeType":"ElementaryTypeName","src":"28708:5:70","typeDescriptions":{}}},"id":15759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28708:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"src":"28695:25:70","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"id":15761,"nodeType":"ExpressionStatement","src":"28695:25:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15762,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15753,"src":"28734:10:70","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15763,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15750,"src":"28748:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28734:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15771,"nodeType":"IfStatement","src":"28730:97:70","trueBody":{"id":15770,"nodeType":"Block","src":"28755:72:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":15766,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28806:2:70","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":15767,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15750,"src":"28810:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15765,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"28776:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28776:40:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15769,"nodeType":"RevertStatement","src":"28769:47:70"}]}}]},"documentation":{"id":15748,"nodeType":"StructuredDocumentation","src":"28301:307:70","text":" @dev Returns the downcasted int88 from int256, reverting on\n overflow (when the input is less than smallest int88 or\n greater than largest int88).\n Counterpart to Solidity's `int88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":15773,"implemented":true,"kind":"function","modifiers":[],"name":"toInt88","nameLocation":"28622:7:70","nodeType":"FunctionDefinition","parameters":{"id":15751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15750,"mutability":"mutable","name":"value","nameLocation":"28637:5:70","nodeType":"VariableDeclaration","scope":15773,"src":"28630:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15749,"name":"int256","nodeType":"ElementaryTypeName","src":"28630:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28629:14:70"},"returnParameters":{"id":15754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15753,"mutability":"mutable","name":"downcasted","nameLocation":"28673:10:70","nodeType":"VariableDeclaration","scope":15773,"src":"28667:16:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"},"typeName":{"id":15752,"name":"int88","nodeType":"ElementaryTypeName","src":"28667:5:70","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"visibility":"internal"}],"src":"28666:18:70"},"scope":16074,"src":"28613:220:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15798,"nodeType":"Block","src":"29223:148:70","statements":[{"expression":{"id":15786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15781,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15779,"src":"29233:10:70","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15784,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15776,"src":"29252:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15783,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29246:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int80_$","typeString":"type(int80)"},"typeName":{"id":15782,"name":"int80","nodeType":"ElementaryTypeName","src":"29246:5:70","typeDescriptions":{}}},"id":15785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29246:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"src":"29233:25:70","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"id":15787,"nodeType":"ExpressionStatement","src":"29233:25:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15788,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15779,"src":"29272:10:70","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15789,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15776,"src":"29286:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29272:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15797,"nodeType":"IfStatement","src":"29268:97:70","trueBody":{"id":15796,"nodeType":"Block","src":"29293:72:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":15792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29344:2:70","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":15793,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15776,"src":"29348:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15791,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"29314:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29314:40:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15795,"nodeType":"RevertStatement","src":"29307:47:70"}]}}]},"documentation":{"id":15774,"nodeType":"StructuredDocumentation","src":"28839:307:70","text":" @dev Returns the downcasted int80 from int256, reverting on\n overflow (when the input is less than smallest int80 or\n greater than largest int80).\n Counterpart to Solidity's `int80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":15799,"implemented":true,"kind":"function","modifiers":[],"name":"toInt80","nameLocation":"29160:7:70","nodeType":"FunctionDefinition","parameters":{"id":15777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15776,"mutability":"mutable","name":"value","nameLocation":"29175:5:70","nodeType":"VariableDeclaration","scope":15799,"src":"29168:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15775,"name":"int256","nodeType":"ElementaryTypeName","src":"29168:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29167:14:70"},"returnParameters":{"id":15780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15779,"mutability":"mutable","name":"downcasted","nameLocation":"29211:10:70","nodeType":"VariableDeclaration","scope":15799,"src":"29205:16:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"},"typeName":{"id":15778,"name":"int80","nodeType":"ElementaryTypeName","src":"29205:5:70","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"visibility":"internal"}],"src":"29204:18:70"},"scope":16074,"src":"29151:220:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15824,"nodeType":"Block","src":"29761:148:70","statements":[{"expression":{"id":15812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15807,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15805,"src":"29771:10:70","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15810,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15802,"src":"29790:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15809,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29784:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int72_$","typeString":"type(int72)"},"typeName":{"id":15808,"name":"int72","nodeType":"ElementaryTypeName","src":"29784:5:70","typeDescriptions":{}}},"id":15811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29784:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"src":"29771:25:70","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"id":15813,"nodeType":"ExpressionStatement","src":"29771:25:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15814,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15805,"src":"29810:10:70","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15815,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15802,"src":"29824:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29810:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15823,"nodeType":"IfStatement","src":"29806:97:70","trueBody":{"id":15822,"nodeType":"Block","src":"29831:72:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":15818,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29882:2:70","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":15819,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15802,"src":"29886:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15817,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"29852:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29852:40:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15821,"nodeType":"RevertStatement","src":"29845:47:70"}]}}]},"documentation":{"id":15800,"nodeType":"StructuredDocumentation","src":"29377:307:70","text":" @dev Returns the downcasted int72 from int256, reverting on\n overflow (when the input is less than smallest int72 or\n greater than largest int72).\n Counterpart to Solidity's `int72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":15825,"implemented":true,"kind":"function","modifiers":[],"name":"toInt72","nameLocation":"29698:7:70","nodeType":"FunctionDefinition","parameters":{"id":15803,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15802,"mutability":"mutable","name":"value","nameLocation":"29713:5:70","nodeType":"VariableDeclaration","scope":15825,"src":"29706:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15801,"name":"int256","nodeType":"ElementaryTypeName","src":"29706:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29705:14:70"},"returnParameters":{"id":15806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15805,"mutability":"mutable","name":"downcasted","nameLocation":"29749:10:70","nodeType":"VariableDeclaration","scope":15825,"src":"29743:16:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"},"typeName":{"id":15804,"name":"int72","nodeType":"ElementaryTypeName","src":"29743:5:70","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"visibility":"internal"}],"src":"29742:18:70"},"scope":16074,"src":"29689:220:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15850,"nodeType":"Block","src":"30299:148:70","statements":[{"expression":{"id":15838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15833,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15831,"src":"30309:10:70","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15836,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15828,"src":"30328:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15835,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30322:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"},"typeName":{"id":15834,"name":"int64","nodeType":"ElementaryTypeName","src":"30322:5:70","typeDescriptions":{}}},"id":15837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30322:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"src":"30309:25:70","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"id":15839,"nodeType":"ExpressionStatement","src":"30309:25:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15840,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15831,"src":"30348:10:70","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15841,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15828,"src":"30362:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30348:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15849,"nodeType":"IfStatement","src":"30344:97:70","trueBody":{"id":15848,"nodeType":"Block","src":"30369:72:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":15844,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30420:2:70","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":15845,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15828,"src":"30424:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15843,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"30390:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15846,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30390:40:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15847,"nodeType":"RevertStatement","src":"30383:47:70"}]}}]},"documentation":{"id":15826,"nodeType":"StructuredDocumentation","src":"29915:307:70","text":" @dev Returns the downcasted int64 from int256, reverting on\n overflow (when the input is less than smallest int64 or\n greater than largest int64).\n Counterpart to Solidity's `int64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":15851,"implemented":true,"kind":"function","modifiers":[],"name":"toInt64","nameLocation":"30236:7:70","nodeType":"FunctionDefinition","parameters":{"id":15829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15828,"mutability":"mutable","name":"value","nameLocation":"30251:5:70","nodeType":"VariableDeclaration","scope":15851,"src":"30244:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15827,"name":"int256","nodeType":"ElementaryTypeName","src":"30244:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30243:14:70"},"returnParameters":{"id":15832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15831,"mutability":"mutable","name":"downcasted","nameLocation":"30287:10:70","nodeType":"VariableDeclaration","scope":15851,"src":"30281:16:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"},"typeName":{"id":15830,"name":"int64","nodeType":"ElementaryTypeName","src":"30281:5:70","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"visibility":"internal"}],"src":"30280:18:70"},"scope":16074,"src":"30227:220:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15876,"nodeType":"Block","src":"30837:148:70","statements":[{"expression":{"id":15864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15859,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15857,"src":"30847:10:70","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15862,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15854,"src":"30866:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15861,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30860:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int56_$","typeString":"type(int56)"},"typeName":{"id":15860,"name":"int56","nodeType":"ElementaryTypeName","src":"30860:5:70","typeDescriptions":{}}},"id":15863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30860:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"src":"30847:25:70","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"id":15865,"nodeType":"ExpressionStatement","src":"30847:25:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15866,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15857,"src":"30886:10:70","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15867,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15854,"src":"30900:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30886:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15875,"nodeType":"IfStatement","src":"30882:97:70","trueBody":{"id":15874,"nodeType":"Block","src":"30907:72:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":15870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30958:2:70","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":15871,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15854,"src":"30962:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15869,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"30928:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30928:40:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15873,"nodeType":"RevertStatement","src":"30921:47:70"}]}}]},"documentation":{"id":15852,"nodeType":"StructuredDocumentation","src":"30453:307:70","text":" @dev Returns the downcasted int56 from int256, reverting on\n overflow (when the input is less than smallest int56 or\n greater than largest int56).\n Counterpart to Solidity's `int56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":15877,"implemented":true,"kind":"function","modifiers":[],"name":"toInt56","nameLocation":"30774:7:70","nodeType":"FunctionDefinition","parameters":{"id":15855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15854,"mutability":"mutable","name":"value","nameLocation":"30789:5:70","nodeType":"VariableDeclaration","scope":15877,"src":"30782:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15853,"name":"int256","nodeType":"ElementaryTypeName","src":"30782:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30781:14:70"},"returnParameters":{"id":15858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15857,"mutability":"mutable","name":"downcasted","nameLocation":"30825:10:70","nodeType":"VariableDeclaration","scope":15877,"src":"30819:16:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"},"typeName":{"id":15856,"name":"int56","nodeType":"ElementaryTypeName","src":"30819:5:70","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"visibility":"internal"}],"src":"30818:18:70"},"scope":16074,"src":"30765:220:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15902,"nodeType":"Block","src":"31375:148:70","statements":[{"expression":{"id":15890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15885,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15883,"src":"31385:10:70","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15888,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15880,"src":"31404:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15887,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31398:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int48_$","typeString":"type(int48)"},"typeName":{"id":15886,"name":"int48","nodeType":"ElementaryTypeName","src":"31398:5:70","typeDescriptions":{}}},"id":15889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31398:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"src":"31385:25:70","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"id":15891,"nodeType":"ExpressionStatement","src":"31385:25:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15892,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15883,"src":"31424:10:70","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15893,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15880,"src":"31438:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31424:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15901,"nodeType":"IfStatement","src":"31420:97:70","trueBody":{"id":15900,"nodeType":"Block","src":"31445:72:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":15896,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31496:2:70","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":15897,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15880,"src":"31500:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15895,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"31466:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15898,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31466:40:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15899,"nodeType":"RevertStatement","src":"31459:47:70"}]}}]},"documentation":{"id":15878,"nodeType":"StructuredDocumentation","src":"30991:307:70","text":" @dev Returns the downcasted int48 from int256, reverting on\n overflow (when the input is less than smallest int48 or\n greater than largest int48).\n Counterpart to Solidity's `int48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":15903,"implemented":true,"kind":"function","modifiers":[],"name":"toInt48","nameLocation":"31312:7:70","nodeType":"FunctionDefinition","parameters":{"id":15881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15880,"mutability":"mutable","name":"value","nameLocation":"31327:5:70","nodeType":"VariableDeclaration","scope":15903,"src":"31320:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15879,"name":"int256","nodeType":"ElementaryTypeName","src":"31320:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31319:14:70"},"returnParameters":{"id":15884,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15883,"mutability":"mutable","name":"downcasted","nameLocation":"31363:10:70","nodeType":"VariableDeclaration","scope":15903,"src":"31357:16:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"},"typeName":{"id":15882,"name":"int48","nodeType":"ElementaryTypeName","src":"31357:5:70","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"visibility":"internal"}],"src":"31356:18:70"},"scope":16074,"src":"31303:220:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15928,"nodeType":"Block","src":"31913:148:70","statements":[{"expression":{"id":15916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15911,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15909,"src":"31923:10:70","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15914,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15906,"src":"31942:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31936:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int40_$","typeString":"type(int40)"},"typeName":{"id":15912,"name":"int40","nodeType":"ElementaryTypeName","src":"31936:5:70","typeDescriptions":{}}},"id":15915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31936:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"src":"31923:25:70","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"id":15917,"nodeType":"ExpressionStatement","src":"31923:25:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15918,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15909,"src":"31962:10:70","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15919,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15906,"src":"31976:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31962:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15927,"nodeType":"IfStatement","src":"31958:97:70","trueBody":{"id":15926,"nodeType":"Block","src":"31983:72:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":15922,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32034:2:70","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":15923,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15906,"src":"32038:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15921,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"32004:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32004:40:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15925,"nodeType":"RevertStatement","src":"31997:47:70"}]}}]},"documentation":{"id":15904,"nodeType":"StructuredDocumentation","src":"31529:307:70","text":" @dev Returns the downcasted int40 from int256, reverting on\n overflow (when the input is less than smallest int40 or\n greater than largest int40).\n Counterpart to Solidity's `int40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":15929,"implemented":true,"kind":"function","modifiers":[],"name":"toInt40","nameLocation":"31850:7:70","nodeType":"FunctionDefinition","parameters":{"id":15907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15906,"mutability":"mutable","name":"value","nameLocation":"31865:5:70","nodeType":"VariableDeclaration","scope":15929,"src":"31858:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15905,"name":"int256","nodeType":"ElementaryTypeName","src":"31858:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31857:14:70"},"returnParameters":{"id":15910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15909,"mutability":"mutable","name":"downcasted","nameLocation":"31901:10:70","nodeType":"VariableDeclaration","scope":15929,"src":"31895:16:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"},"typeName":{"id":15908,"name":"int40","nodeType":"ElementaryTypeName","src":"31895:5:70","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"visibility":"internal"}],"src":"31894:18:70"},"scope":16074,"src":"31841:220:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15954,"nodeType":"Block","src":"32451:148:70","statements":[{"expression":{"id":15942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15937,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15935,"src":"32461:10:70","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15940,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15932,"src":"32480:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15939,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32474:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"},"typeName":{"id":15938,"name":"int32","nodeType":"ElementaryTypeName","src":"32474:5:70","typeDescriptions":{}}},"id":15941,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32474:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"src":"32461:25:70","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"id":15943,"nodeType":"ExpressionStatement","src":"32461:25:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15944,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15935,"src":"32500:10:70","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15945,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15932,"src":"32514:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"32500:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15953,"nodeType":"IfStatement","src":"32496:97:70","trueBody":{"id":15952,"nodeType":"Block","src":"32521:72:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":15948,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32572:2:70","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":15949,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15932,"src":"32576:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15947,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"32542:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32542:40:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15951,"nodeType":"RevertStatement","src":"32535:47:70"}]}}]},"documentation":{"id":15930,"nodeType":"StructuredDocumentation","src":"32067:307:70","text":" @dev Returns the downcasted int32 from int256, reverting on\n overflow (when the input is less than smallest int32 or\n greater than largest int32).\n Counterpart to Solidity's `int32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":15955,"implemented":true,"kind":"function","modifiers":[],"name":"toInt32","nameLocation":"32388:7:70","nodeType":"FunctionDefinition","parameters":{"id":15933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15932,"mutability":"mutable","name":"value","nameLocation":"32403:5:70","nodeType":"VariableDeclaration","scope":15955,"src":"32396:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15931,"name":"int256","nodeType":"ElementaryTypeName","src":"32396:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32395:14:70"},"returnParameters":{"id":15936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15935,"mutability":"mutable","name":"downcasted","nameLocation":"32439:10:70","nodeType":"VariableDeclaration","scope":15955,"src":"32433:16:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"},"typeName":{"id":15934,"name":"int32","nodeType":"ElementaryTypeName","src":"32433:5:70","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"visibility":"internal"}],"src":"32432:18:70"},"scope":16074,"src":"32379:220:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15980,"nodeType":"Block","src":"32989:148:70","statements":[{"expression":{"id":15968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15963,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15961,"src":"32999:10:70","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15966,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15958,"src":"33018:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15965,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33012:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int24_$","typeString":"type(int24)"},"typeName":{"id":15964,"name":"int24","nodeType":"ElementaryTypeName","src":"33012:5:70","typeDescriptions":{}}},"id":15967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33012:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"src":"32999:25:70","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"id":15969,"nodeType":"ExpressionStatement","src":"32999:25:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15970,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15961,"src":"33038:10:70","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15971,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15958,"src":"33052:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33038:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15979,"nodeType":"IfStatement","src":"33034:97:70","trueBody":{"id":15978,"nodeType":"Block","src":"33059:72:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":15974,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33110:2:70","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":15975,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15958,"src":"33114:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15973,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"33080:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":15976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33080:40:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15977,"nodeType":"RevertStatement","src":"33073:47:70"}]}}]},"documentation":{"id":15956,"nodeType":"StructuredDocumentation","src":"32605:307:70","text":" @dev Returns the downcasted int24 from int256, reverting on\n overflow (when the input is less than smallest int24 or\n greater than largest int24).\n Counterpart to Solidity's `int24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":15981,"implemented":true,"kind":"function","modifiers":[],"name":"toInt24","nameLocation":"32926:7:70","nodeType":"FunctionDefinition","parameters":{"id":15959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15958,"mutability":"mutable","name":"value","nameLocation":"32941:5:70","nodeType":"VariableDeclaration","scope":15981,"src":"32934:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15957,"name":"int256","nodeType":"ElementaryTypeName","src":"32934:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32933:14:70"},"returnParameters":{"id":15962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15961,"mutability":"mutable","name":"downcasted","nameLocation":"32977:10:70","nodeType":"VariableDeclaration","scope":15981,"src":"32971:16:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"},"typeName":{"id":15960,"name":"int24","nodeType":"ElementaryTypeName","src":"32971:5:70","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"visibility":"internal"}],"src":"32970:18:70"},"scope":16074,"src":"32917:220:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":16006,"nodeType":"Block","src":"33527:148:70","statements":[{"expression":{"id":15994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15989,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15987,"src":"33537:10:70","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15992,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15984,"src":"33556:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15991,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33550:5:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"},"typeName":{"id":15990,"name":"int16","nodeType":"ElementaryTypeName","src":"33550:5:70","typeDescriptions":{}}},"id":15993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33550:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"src":"33537:25:70","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"id":15995,"nodeType":"ExpressionStatement","src":"33537:25:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":15998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15996,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15987,"src":"33576:10:70","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":15997,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15984,"src":"33590:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33576:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16005,"nodeType":"IfStatement","src":"33572:97:70","trueBody":{"id":16004,"nodeType":"Block","src":"33597:72:70","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":16000,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33648:2:70","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":16001,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15984,"src":"33652:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":15999,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"33618:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":16002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33618:40:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16003,"nodeType":"RevertStatement","src":"33611:47:70"}]}}]},"documentation":{"id":15982,"nodeType":"StructuredDocumentation","src":"33143:307:70","text":" @dev Returns the downcasted int16 from int256, reverting on\n overflow (when the input is less than smallest int16 or\n greater than largest int16).\n Counterpart to Solidity's `int16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":16007,"implemented":true,"kind":"function","modifiers":[],"name":"toInt16","nameLocation":"33464:7:70","nodeType":"FunctionDefinition","parameters":{"id":15985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15984,"mutability":"mutable","name":"value","nameLocation":"33479:5:70","nodeType":"VariableDeclaration","scope":16007,"src":"33472:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":15983,"name":"int256","nodeType":"ElementaryTypeName","src":"33472:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"33471:14:70"},"returnParameters":{"id":15988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15987,"mutability":"mutable","name":"downcasted","nameLocation":"33515:10:70","nodeType":"VariableDeclaration","scope":16007,"src":"33509:16:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"},"typeName":{"id":15986,"name":"int16","nodeType":"ElementaryTypeName","src":"33509:5:70","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"visibility":"internal"}],"src":"33508:18:70"},"scope":16074,"src":"33455:220:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":16032,"nodeType":"Block","src":"34058:146:70","statements":[{"expression":{"id":16020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16015,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16013,"src":"34068:10:70","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16018,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16010,"src":"34086:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":16017,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34081:4:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"},"typeName":{"id":16016,"name":"int8","nodeType":"ElementaryTypeName","src":"34081:4:70","typeDescriptions":{}}},"id":16019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34081:11:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"src":"34068:24:70","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"id":16021,"nodeType":"ExpressionStatement","src":"34068:24:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":16024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16022,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16013,"src":"34106:10:70","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":16023,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16010,"src":"34120:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"34106:19:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16031,"nodeType":"IfStatement","src":"34102:96:70","trueBody":{"id":16030,"nodeType":"Block","src":"34127:71:70","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":16026,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34178:1:70","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":16027,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16010,"src":"34181:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":16025,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14331,"src":"34148:29:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":16028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34148:39:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16029,"nodeType":"RevertStatement","src":"34141:46:70"}]}}]},"documentation":{"id":16008,"nodeType":"StructuredDocumentation","src":"33681:302:70","text":" @dev Returns the downcasted int8 from int256, reverting on\n overflow (when the input is less than smallest int8 or\n greater than largest int8).\n Counterpart to Solidity's `int8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":16033,"implemented":true,"kind":"function","modifiers":[],"name":"toInt8","nameLocation":"33997:6:70","nodeType":"FunctionDefinition","parameters":{"id":16011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16010,"mutability":"mutable","name":"value","nameLocation":"34011:5:70","nodeType":"VariableDeclaration","scope":16033,"src":"34004:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":16009,"name":"int256","nodeType":"ElementaryTypeName","src":"34004:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"34003:14:70"},"returnParameters":{"id":16014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16013,"mutability":"mutable","name":"downcasted","nameLocation":"34046:10:70","nodeType":"VariableDeclaration","scope":16033,"src":"34041:15:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"},"typeName":{"id":16012,"name":"int8","nodeType":"ElementaryTypeName","src":"34041:4:70","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"visibility":"internal"}],"src":"34040:17:70"},"scope":16074,"src":"33988:216:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":16062,"nodeType":"Block","src":"34444:250:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16041,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16036,"src":"34557:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"expression":{"arguments":[{"id":16046,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34578:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":16045,"name":"int256","nodeType":"ElementaryTypeName","src":"34578:6:70","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":16044,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"34573:4:70","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":16047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34573:12:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":16048,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34586:3:70","memberName":"max","nodeType":"MemberAccess","src":"34573:16:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":16043,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34565:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16042,"name":"uint256","nodeType":"ElementaryTypeName","src":"34565:7:70","typeDescriptions":{}}},"id":16049,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34565:25:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34557:33:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16056,"nodeType":"IfStatement","src":"34553:105:70","trueBody":{"id":16055,"nodeType":"Block","src":"34592:66:70","statements":[{"errorCall":{"arguments":[{"id":16052,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16036,"src":"34641:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16051,"name":"SafeCastOverflowedUintToInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14336,"src":"34613:27:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":16053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34613:34:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16054,"nodeType":"RevertStatement","src":"34606:41:70"}]}},{"expression":{"arguments":[{"id":16059,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16036,"src":"34681:5:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16058,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34674:6:70","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":16057,"name":"int256","nodeType":"ElementaryTypeName","src":"34674:6:70","typeDescriptions":{}}},"id":16060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34674:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":16040,"id":16061,"nodeType":"Return","src":"34667:20:70"}]},"documentation":{"id":16034,"nodeType":"StructuredDocumentation","src":"34210:165:70","text":" @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256."},"id":16063,"implemented":true,"kind":"function","modifiers":[],"name":"toInt256","nameLocation":"34389:8:70","nodeType":"FunctionDefinition","parameters":{"id":16037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16036,"mutability":"mutable","name":"value","nameLocation":"34406:5:70","nodeType":"VariableDeclaration","scope":16063,"src":"34398:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16035,"name":"uint256","nodeType":"ElementaryTypeName","src":"34398:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34397:15:70"},"returnParameters":{"id":16040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16039,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16063,"src":"34436:6:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":16038,"name":"int256","nodeType":"ElementaryTypeName","src":"34436:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"34435:8:70"},"scope":16074,"src":"34380:314:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":16072,"nodeType":"Block","src":"34853:87:70","statements":[{"AST":{"nativeSrc":"34888:46:70","nodeType":"YulBlock","src":"34888:46:70","statements":[{"nativeSrc":"34902:22:70","nodeType":"YulAssignment","src":"34902:22:70","value":{"arguments":[{"arguments":[{"name":"b","nativeSrc":"34921:1:70","nodeType":"YulIdentifier","src":"34921:1:70"}],"functionName":{"name":"iszero","nativeSrc":"34914:6:70","nodeType":"YulIdentifier","src":"34914:6:70"},"nativeSrc":"34914:9:70","nodeType":"YulFunctionCall","src":"34914:9:70"}],"functionName":{"name":"iszero","nativeSrc":"34907:6:70","nodeType":"YulIdentifier","src":"34907:6:70"},"nativeSrc":"34907:17:70","nodeType":"YulFunctionCall","src":"34907:17:70"},"variableNames":[{"name":"u","nativeSrc":"34902:1:70","nodeType":"YulIdentifier","src":"34902:1:70"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16066,"isOffset":false,"isSlot":false,"src":"34921:1:70","valueSize":1},{"declaration":16069,"isOffset":false,"isSlot":false,"src":"34902:1:70","valueSize":1}],"flags":["memory-safe"],"id":16071,"nodeType":"InlineAssembly","src":"34863:71:70"}]},"documentation":{"id":16064,"nodeType":"StructuredDocumentation","src":"34700:90:70","text":" @dev Cast a boolean (false or true) to a uint256 (0 or 1) with no jump."},"id":16073,"implemented":true,"kind":"function","modifiers":[],"name":"toUint","nameLocation":"34804:6:70","nodeType":"FunctionDefinition","parameters":{"id":16067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16066,"mutability":"mutable","name":"b","nameLocation":"34816:1:70","nodeType":"VariableDeclaration","scope":16073,"src":"34811:6:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16065,"name":"bool","nodeType":"ElementaryTypeName","src":"34811:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34810:8:70"},"returnParameters":{"id":16070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16069,"mutability":"mutable","name":"u","nameLocation":"34850:1:70","nodeType":"VariableDeclaration","scope":16073,"src":"34842:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16068,"name":"uint256","nodeType":"ElementaryTypeName","src":"34842:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34841:11:70"},"scope":16074,"src":"34795:145:70","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":16075,"src":"769:34173:70","usedErrors":[14319,14324,14331,14336],"usedEvents":[]}],"src":"192:34751:70"},"id":70},"@openzeppelin/contracts/utils/structs/EnumerableSet.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/structs/EnumerableSet.sol","exportedSymbols":{"Arrays":[12286],"EnumerableSet":[17600],"Math":[14309]},"id":17601,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":16076,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"205:24:71"},{"absolutePath":"@openzeppelin/contracts/utils/Arrays.sol","file":"../Arrays.sol","id":16078,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17601,"sourceUnit":12287,"src":"231:37:71","symbolAliases":[{"foreign":{"id":16077,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12286,"src":"239:6:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","file":"../math/Math.sol","id":16080,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17601,"sourceUnit":14310,"src":"269:38:71","symbolAliases":[{"foreign":{"id":16079,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14309,"src":"277:4:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"EnumerableSet","contractDependencies":[],"contractKind":"library","documentation":{"id":16081,"nodeType":"StructuredDocumentation","src":"309:1276:71","text":" @dev Library for managing\n https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n types.\n Sets have the following properties:\n - Elements are added, removed, and checked for existence in constant time\n (O(1)).\n - Elements are enumerated in O(n). No guarantees are made on the ordering.\n - Set can be cleared (all elements removed) in O(n).\n ```solidity\n contract Example {\n // Add the library methods\n using EnumerableSet for EnumerableSet.AddressSet;\n // Declare a set state variable\n EnumerableSet.AddressSet private mySet;\n }\n ```\n The following types are supported:\n - `bytes32` (`Bytes32Set`) since v3.3.0\n - `address` (`AddressSet`) since v3.3.0\n - `uint256` (`UintSet`) since v3.3.0\n - `string` (`StringSet`) since v5.4.0\n - `bytes` (`BytesSet`) since v5.4.0\n [WARNING]\n ====\n Trying to delete such a structure from storage will likely result in data corruption, rendering the structure\n unusable.\n See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.\n In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an\n array of EnumerableSet.\n ===="},"fullyImplemented":true,"id":17600,"linearizedBaseContracts":[17600],"name":"EnumerableSet","nameLocation":"1594:13:71","nodeType":"ContractDefinition","nodes":[{"canonicalName":"EnumerableSet.Set","id":16089,"members":[{"constant":false,"id":16084,"mutability":"mutable","name":"_values","nameLocation":"2118:7:71","nodeType":"VariableDeclaration","scope":16089,"src":"2108:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16082,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2108:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16083,"nodeType":"ArrayTypeName","src":"2108:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"},{"constant":false,"id":16088,"mutability":"mutable","name":"_positions","nameLocation":"2310:10:71","nodeType":"VariableDeclaration","scope":16089,"src":"2276:44:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"typeName":{"id":16087,"keyName":"value","keyNameLocation":"2292:5:71","keyType":{"id":16085,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2284:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"2276:33:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":16086,"name":"uint256","nodeType":"ElementaryTypeName","src":"2301:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"name":"Set","nameLocation":"2061:3:71","nodeType":"StructDefinition","scope":17600,"src":"2054:273:71","visibility":"public"},{"body":{"id":16130,"nodeType":"Block","src":"2566:337:71","statements":[{"condition":{"id":16104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2580:22:71","subExpression":{"arguments":[{"id":16101,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16093,"src":"2591:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},{"id":16102,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16095,"src":"2596:5:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16100,"name":"_contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16277,"src":"2581:9:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16089_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"}},"id":16103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2581:21:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":16128,"nodeType":"Block","src":"2860:37:71","statements":[{"expression":{"hexValue":"66616c7365","id":16126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2881:5:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":16099,"id":16127,"nodeType":"Return","src":"2874:12:71"}]},"id":16129,"nodeType":"IfStatement","src":"2576:321:71","trueBody":{"id":16125,"nodeType":"Block","src":"2604:250:71","statements":[{"expression":{"arguments":[{"id":16110,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16095,"src":"2635:5:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"expression":{"id":16105,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16093,"src":"2618:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16108,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2622:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16084,"src":"2618:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2630:4:71","memberName":"push","nodeType":"MemberAccess","src":"2618:16:71","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$_t_bytes32_$returns$__$attached_to$_t_array$_t_bytes32_$dyn_storage_ptr_$","typeString":"function (bytes32[] storage pointer,bytes32)"}},"id":16111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2618:23:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16112,"nodeType":"ExpressionStatement","src":"2618:23:71"},{"expression":{"id":16121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":16113,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16093,"src":"2776:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16116,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2780:10:71","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16088,"src":"2776:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16117,"indexExpression":{"id":16115,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16095,"src":"2791:5:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2776:21:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":16118,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16093,"src":"2800:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16119,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2804:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16084,"src":"2800:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2812:6:71","memberName":"length","nodeType":"MemberAccess","src":"2800:18:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2776:42:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16122,"nodeType":"ExpressionStatement","src":"2776:42:71"},{"expression":{"hexValue":"74727565","id":16123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2839:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":16099,"id":16124,"nodeType":"Return","src":"2832:11:71"}]}}]},"documentation":{"id":16090,"nodeType":"StructuredDocumentation","src":"2333:159:71","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":16131,"implemented":true,"kind":"function","modifiers":[],"name":"_add","nameLocation":"2506:4:71","nodeType":"FunctionDefinition","parameters":{"id":16096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16093,"mutability":"mutable","name":"set","nameLocation":"2523:3:71","nodeType":"VariableDeclaration","scope":16131,"src":"2511:15:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16092,"nodeType":"UserDefinedTypeName","pathNode":{"id":16091,"name":"Set","nameLocations":["2511:3:71"],"nodeType":"IdentifierPath","referencedDeclaration":16089,"src":"2511:3:71"},"referencedDeclaration":16089,"src":"2511:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"},{"constant":false,"id":16095,"mutability":"mutable","name":"value","nameLocation":"2536:5:71","nodeType":"VariableDeclaration","scope":16131,"src":"2528:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16094,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2528:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2510:32:71"},"returnParameters":{"id":16099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16098,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16131,"src":"2560:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16097,"name":"bool","nodeType":"ElementaryTypeName","src":"2560:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2559:6:71"},"scope":17600,"src":"2497:406:71","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":16214,"nodeType":"Block","src":"3143:1296:71","statements":[{"assignments":[16143],"declarations":[{"constant":false,"id":16143,"mutability":"mutable","name":"position","nameLocation":"3255:8:71","nodeType":"VariableDeclaration","scope":16214,"src":"3247:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16142,"name":"uint256","nodeType":"ElementaryTypeName","src":"3247:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16148,"initialValue":{"baseExpression":{"expression":{"id":16144,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16135,"src":"3266:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16145,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3270:10:71","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16088,"src":"3266:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16147,"indexExpression":{"id":16146,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16137,"src":"3281:5:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3266:21:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3247:40:71"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16149,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16143,"src":"3302:8:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":16150,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3314:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3302:13:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":16212,"nodeType":"Block","src":"4396:37:71","statements":[{"expression":{"hexValue":"66616c7365","id":16210,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4417:5:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":16141,"id":16211,"nodeType":"Return","src":"4410:12:71"}]},"id":16213,"nodeType":"IfStatement","src":"3298:1135:71","trueBody":{"id":16209,"nodeType":"Block","src":"3317:1073:71","statements":[{"assignments":[16153],"declarations":[{"constant":false,"id":16153,"mutability":"mutable","name":"valueIndex","nameLocation":"3677:10:71","nodeType":"VariableDeclaration","scope":16209,"src":"3669:18:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16152,"name":"uint256","nodeType":"ElementaryTypeName","src":"3669:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16157,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16154,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16143,"src":"3690:8:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":16155,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3701:1:71","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3690:12:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3669:33:71"},{"assignments":[16159],"declarations":[{"constant":false,"id":16159,"mutability":"mutable","name":"lastIndex","nameLocation":"3724:9:71","nodeType":"VariableDeclaration","scope":16209,"src":"3716:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16158,"name":"uint256","nodeType":"ElementaryTypeName","src":"3716:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16165,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":16160,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16135,"src":"3736:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16161,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3740:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16084,"src":"3736:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3748:6:71","memberName":"length","nodeType":"MemberAccess","src":"3736:18:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":16163,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3757:1:71","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3736:22:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3716:42:71"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16166,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16153,"src":"3777:10:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":16167,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16159,"src":"3791:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3777:23:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16193,"nodeType":"IfStatement","src":"3773:378:71","trueBody":{"id":16192,"nodeType":"Block","src":"3802:349:71","statements":[{"assignments":[16170],"declarations":[{"constant":false,"id":16170,"mutability":"mutable","name":"lastValue","nameLocation":"3828:9:71","nodeType":"VariableDeclaration","scope":16192,"src":"3820:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16169,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3820:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":16175,"initialValue":{"baseExpression":{"expression":{"id":16171,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16135,"src":"3840:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16172,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3844:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16084,"src":"3840:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16174,"indexExpression":{"id":16173,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16159,"src":"3852:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3840:22:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3820:42:71"},{"expression":{"id":16182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":16176,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16135,"src":"3961:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16179,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3965:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16084,"src":"3961:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16180,"indexExpression":{"id":16178,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16153,"src":"3973:10:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3961:23:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16181,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16170,"src":"3987:9:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3961:35:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16183,"nodeType":"ExpressionStatement","src":"3961:35:71"},{"expression":{"id":16190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":16184,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16135,"src":"4100:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16187,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4104:10:71","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16088,"src":"4100:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16188,"indexExpression":{"id":16186,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16170,"src":"4115:9:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4100:25:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16189,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16143,"src":"4128:8:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4100:36:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16191,"nodeType":"ExpressionStatement","src":"4100:36:71"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":16194,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16135,"src":"4229:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16197,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4233:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16084,"src":"4229:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4241:3:71","memberName":"pop","nodeType":"MemberAccess","src":"4229:15:71","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_bytes32_$dyn_storage_ptr_$","typeString":"function (bytes32[] storage pointer)"}},"id":16199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4229:17:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16200,"nodeType":"ExpressionStatement","src":"4229:17:71"},{"expression":{"id":16205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"4325:28:71","subExpression":{"baseExpression":{"expression":{"id":16201,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16135,"src":"4332:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16202,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4336:10:71","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16088,"src":"4332:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16204,"indexExpression":{"id":16203,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16137,"src":"4347:5:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4332:21:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16206,"nodeType":"ExpressionStatement","src":"4325:28:71"},{"expression":{"hexValue":"74727565","id":16207,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4375:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":16141,"id":16208,"nodeType":"Return","src":"4368:11:71"}]}}]},"documentation":{"id":16132,"nodeType":"StructuredDocumentation","src":"2909:157:71","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":16215,"implemented":true,"kind":"function","modifiers":[],"name":"_remove","nameLocation":"3080:7:71","nodeType":"FunctionDefinition","parameters":{"id":16138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16135,"mutability":"mutable","name":"set","nameLocation":"3100:3:71","nodeType":"VariableDeclaration","scope":16215,"src":"3088:15:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16134,"nodeType":"UserDefinedTypeName","pathNode":{"id":16133,"name":"Set","nameLocations":["3088:3:71"],"nodeType":"IdentifierPath","referencedDeclaration":16089,"src":"3088:3:71"},"referencedDeclaration":16089,"src":"3088:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"},{"constant":false,"id":16137,"mutability":"mutable","name":"value","nameLocation":"3113:5:71","nodeType":"VariableDeclaration","scope":16215,"src":"3105:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16136,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3105:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3087:32:71"},"returnParameters":{"id":16141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16140,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16215,"src":"3137:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16139,"name":"bool","nodeType":"ElementaryTypeName","src":"3137:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3136:6:71"},"scope":17600,"src":"3071:1368:71","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":16257,"nodeType":"Block","src":"4824:196:71","statements":[{"assignments":[16223],"declarations":[{"constant":false,"id":16223,"mutability":"mutable","name":"len","nameLocation":"4842:3:71","nodeType":"VariableDeclaration","scope":16257,"src":"4834:11:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16222,"name":"uint256","nodeType":"ElementaryTypeName","src":"4834:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16227,"initialValue":{"arguments":[{"id":16225,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16219,"src":"4856:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}],"id":16224,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16291,"src":"4848:7:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16089_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (uint256)"}},"id":16226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4848:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4834:26:71"},{"body":{"id":16247,"nodeType":"Block","src":"4904:62:71","statements":[{"expression":{"id":16245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"4918:37:71","subExpression":{"baseExpression":{"expression":{"id":16238,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16219,"src":"4925:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16239,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4929:10:71","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16088,"src":"4925:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16244,"indexExpression":{"baseExpression":{"expression":{"id":16240,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16219,"src":"4940:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16241,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4944:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16084,"src":"4940:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16243,"indexExpression":{"id":16242,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16229,"src":"4952:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4940:14:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4925:30:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16246,"nodeType":"ExpressionStatement","src":"4918:37:71"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16232,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16229,"src":"4890:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":16233,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16223,"src":"4894:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4890:7:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16248,"initializationExpression":{"assignments":[16229],"declarations":[{"constant":false,"id":16229,"mutability":"mutable","name":"i","nameLocation":"4883:1:71","nodeType":"VariableDeclaration","scope":16248,"src":"4875:9:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16228,"name":"uint256","nodeType":"ElementaryTypeName","src":"4875:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16231,"initialValue":{"hexValue":"30","id":16230,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4887:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4875:13:71"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":16236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4899:3:71","subExpression":{"id":16235,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16229,"src":"4901:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16237,"nodeType":"ExpressionStatement","src":"4899:3:71"},"nodeType":"ForStatement","src":"4870:96:71"},{"expression":{"arguments":[{"expression":{"id":16252,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16219,"src":"4998:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16253,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5002:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16084,"src":"4998:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},{"hexValue":"30","id":16254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5011:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":16249,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12286,"src":"4975:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Arrays_$12286_$","typeString":"type(library Arrays)"}},"id":16251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4982:15:71","memberName":"unsafeSetLength","nodeType":"MemberAccess","referencedDeclaration":12252,"src":"4975:22:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_bytes32_$dyn_storage_ptr_$_t_uint256_$returns$__$","typeString":"function (bytes32[] storage pointer,uint256)"}},"id":16255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4975:38:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16256,"nodeType":"ExpressionStatement","src":"4975:38:71"}]},"documentation":{"id":16216,"nodeType":"StructuredDocumentation","src":"4445:333:71","text":" @dev Removes all the values from a set. O(n).\n WARNING: This function has an unbounded cost that scales with set size. Developers should keep in mind that\n using it may render the function uncallable if the set grows to the point where clearing it consumes too much\n gas to fit in a block."},"id":16258,"implemented":true,"kind":"function","modifiers":[],"name":"_clear","nameLocation":"4792:6:71","nodeType":"FunctionDefinition","parameters":{"id":16220,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16219,"mutability":"mutable","name":"set","nameLocation":"4811:3:71","nodeType":"VariableDeclaration","scope":16258,"src":"4799:15:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16218,"nodeType":"UserDefinedTypeName","pathNode":{"id":16217,"name":"Set","nameLocations":["4799:3:71"],"nodeType":"IdentifierPath","referencedDeclaration":16089,"src":"4799:3:71"},"referencedDeclaration":16089,"src":"4799:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"src":"4798:17:71"},"returnParameters":{"id":16221,"nodeType":"ParameterList","parameters":[],"src":"4824:0:71"},"scope":17600,"src":"4783:237:71","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":16276,"nodeType":"Block","src":"5180:50:71","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":16269,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16262,"src":"5197:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16270,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5201:10:71","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16088,"src":"5197:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":16272,"indexExpression":{"id":16271,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16264,"src":"5212:5:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5197:21:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":16273,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5222:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5197:26:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16268,"id":16275,"nodeType":"Return","src":"5190:33:71"}]},"documentation":{"id":16259,"nodeType":"StructuredDocumentation","src":"5026:70:71","text":" @dev Returns true if the value is in the set. O(1)."},"id":16277,"implemented":true,"kind":"function","modifiers":[],"name":"_contains","nameLocation":"5110:9:71","nodeType":"FunctionDefinition","parameters":{"id":16265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16262,"mutability":"mutable","name":"set","nameLocation":"5132:3:71","nodeType":"VariableDeclaration","scope":16277,"src":"5120:15:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16261,"nodeType":"UserDefinedTypeName","pathNode":{"id":16260,"name":"Set","nameLocations":["5120:3:71"],"nodeType":"IdentifierPath","referencedDeclaration":16089,"src":"5120:3:71"},"referencedDeclaration":16089,"src":"5120:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"},{"constant":false,"id":16264,"mutability":"mutable","name":"value","nameLocation":"5145:5:71","nodeType":"VariableDeclaration","scope":16277,"src":"5137:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16263,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5137:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5119:32:71"},"returnParameters":{"id":16268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16267,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16277,"src":"5174:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16266,"name":"bool","nodeType":"ElementaryTypeName","src":"5174:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5173:6:71"},"scope":17600,"src":"5101:129:71","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":16290,"nodeType":"Block","src":"5376:42:71","statements":[{"expression":{"expression":{"expression":{"id":16286,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16281,"src":"5393:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16287,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5397:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16084,"src":"5393:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5405:6:71","memberName":"length","nodeType":"MemberAccess","src":"5393:18:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16285,"id":16289,"nodeType":"Return","src":"5386:25:71"}]},"documentation":{"id":16278,"nodeType":"StructuredDocumentation","src":"5236:70:71","text":" @dev Returns the number of values on the set. O(1)."},"id":16291,"implemented":true,"kind":"function","modifiers":[],"name":"_length","nameLocation":"5320:7:71","nodeType":"FunctionDefinition","parameters":{"id":16282,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16281,"mutability":"mutable","name":"set","nameLocation":"5340:3:71","nodeType":"VariableDeclaration","scope":16291,"src":"5328:15:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16280,"nodeType":"UserDefinedTypeName","pathNode":{"id":16279,"name":"Set","nameLocations":["5328:3:71"],"nodeType":"IdentifierPath","referencedDeclaration":16089,"src":"5328:3:71"},"referencedDeclaration":16089,"src":"5328:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"src":"5327:17:71"},"returnParameters":{"id":16285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16284,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16291,"src":"5367:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16283,"name":"uint256","nodeType":"ElementaryTypeName","src":"5367:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5366:9:71"},"scope":17600,"src":"5311:107:71","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":16307,"nodeType":"Block","src":"5836:42:71","statements":[{"expression":{"baseExpression":{"expression":{"id":16302,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16295,"src":"5853:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16303,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5857:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16084,"src":"5853:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"id":16305,"indexExpression":{"id":16304,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16297,"src":"5865:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5853:18:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":16301,"id":16306,"nodeType":"Return","src":"5846:25:71"}]},"documentation":{"id":16292,"nodeType":"StructuredDocumentation","src":"5424:331:71","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":16308,"implemented":true,"kind":"function","modifiers":[],"name":"_at","nameLocation":"5769:3:71","nodeType":"FunctionDefinition","parameters":{"id":16298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16295,"mutability":"mutable","name":"set","nameLocation":"5785:3:71","nodeType":"VariableDeclaration","scope":16308,"src":"5773:15:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16294,"nodeType":"UserDefinedTypeName","pathNode":{"id":16293,"name":"Set","nameLocations":["5773:3:71"],"nodeType":"IdentifierPath","referencedDeclaration":16089,"src":"5773:3:71"},"referencedDeclaration":16089,"src":"5773:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"},{"constant":false,"id":16297,"mutability":"mutable","name":"index","nameLocation":"5798:5:71","nodeType":"VariableDeclaration","scope":16308,"src":"5790:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16296,"name":"uint256","nodeType":"ElementaryTypeName","src":"5790:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5772:32:71"},"returnParameters":{"id":16301,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16300,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16308,"src":"5827:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16299,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5827:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5826:9:71"},"scope":17600,"src":"5760:118:71","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":16321,"nodeType":"Block","src":"6492:35:71","statements":[{"expression":{"expression":{"id":16318,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16312,"src":"6509:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16319,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6513:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16084,"src":"6509:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},"functionReturnParameters":16317,"id":16320,"nodeType":"Return","src":"6502:18:71"}]},"documentation":{"id":16309,"nodeType":"StructuredDocumentation","src":"5884:529:71","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16322,"implemented":true,"kind":"function","modifiers":[],"name":"_values","nameLocation":"6427:7:71","nodeType":"FunctionDefinition","parameters":{"id":16313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16312,"mutability":"mutable","name":"set","nameLocation":"6447:3:71","nodeType":"VariableDeclaration","scope":16322,"src":"6435:15:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16311,"nodeType":"UserDefinedTypeName","pathNode":{"id":16310,"name":"Set","nameLocations":["6435:3:71"],"nodeType":"IdentifierPath","referencedDeclaration":16089,"src":"6435:3:71"},"referencedDeclaration":16089,"src":"6435:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"src":"6434:17:71"},"returnParameters":{"id":16317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16316,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16322,"src":"6474:16:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16314,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6474:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16315,"nodeType":"ArrayTypeName","src":"6474:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"6473:18:71"},"scope":17600,"src":"6418:109:71","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":16400,"nodeType":"Block","src":"7173:392:71","statements":[{"id":16399,"nodeType":"UncheckedBlock","src":"7183:376:71","statements":[{"expression":{"id":16344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16336,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16330,"src":"7207:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16339,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16330,"src":"7222:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":16341,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16326,"src":"7235:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}],"id":16340,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16291,"src":"7227:7:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16089_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (uint256)"}},"id":16342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7227:12:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16337,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14309,"src":"7213:4:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14309_$","typeString":"type(library Math)"}},"id":16338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7218:3:71","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":13015,"src":"7213:8:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":16343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7213:27:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7207:33:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16345,"nodeType":"ExpressionStatement","src":"7207:33:71"},{"expression":{"id":16352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16346,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16328,"src":"7254:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16349,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16328,"src":"7271:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16350,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16330,"src":"7278:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16347,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14309,"src":"7262:4:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14309_$","typeString":"type(library Math)"}},"id":16348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7267:3:71","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":13015,"src":"7262:8:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":16351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7262:20:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7254:28:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16353,"nodeType":"ExpressionStatement","src":"7254:28:71"},{"assignments":[16355],"declarations":[{"constant":false,"id":16355,"mutability":"mutable","name":"len","nameLocation":"7305:3:71","nodeType":"VariableDeclaration","scope":16399,"src":"7297:11:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16354,"name":"uint256","nodeType":"ElementaryTypeName","src":"7297:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16359,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16356,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16330,"src":"7311:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":16357,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16328,"src":"7317:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7311:11:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7297:25:71"},{"assignments":[16364],"declarations":[{"constant":false,"id":16364,"mutability":"mutable","name":"result","nameLocation":"7353:6:71","nodeType":"VariableDeclaration","scope":16399,"src":"7336:23:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16362,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7336:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16363,"nodeType":"ArrayTypeName","src":"7336:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16370,"initialValue":{"arguments":[{"id":16368,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16355,"src":"7376:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16367,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"7362:13:71","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes32[] memory)"},"typeName":{"baseType":{"id":16365,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7366:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16366,"nodeType":"ArrayTypeName","src":"7366:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}}},"id":16369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7362:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"7336:44:71"},{"body":{"id":16395,"nodeType":"Block","src":"7428:94:71","statements":[{"expression":{"id":16393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":16381,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16364,"src":"7446:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"id":16383,"indexExpression":{"id":16382,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16372,"src":"7453:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7446:9:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"expression":{"id":16386,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16326,"src":"7478:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set storage pointer"}},"id":16387,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7482:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16084,"src":"7478:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16388,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16328,"src":"7491:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16389,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16372,"src":"7499:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7491:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage","typeString":"bytes32[] storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16384,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12286,"src":"7458:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Arrays_$12286_$","typeString":"type(library Arrays)"}},"id":16385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7465:12:71","memberName":"unsafeAccess","nodeType":"MemberAccess","referencedDeclaration":12087,"src":"7458:19:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_bytes32_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_Bytes32Slot_$12564_storage_ptr_$","typeString":"function (bytes32[] storage pointer,uint256) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"}},"id":16391,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7458:43:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$12564_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot storage pointer"}},"id":16392,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7502:5:71","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12563,"src":"7458:49:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7446:61:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16394,"nodeType":"ExpressionStatement","src":"7446:61:71"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16375,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16372,"src":"7414:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":16376,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16355,"src":"7418:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7414:7:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16396,"initializationExpression":{"assignments":[16372],"declarations":[{"constant":false,"id":16372,"mutability":"mutable","name":"i","nameLocation":"7407:1:71","nodeType":"VariableDeclaration","scope":16396,"src":"7399:9:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16371,"name":"uint256","nodeType":"ElementaryTypeName","src":"7399:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16374,"initialValue":{"hexValue":"30","id":16373,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7411:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7399:13:71"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":16379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7423:3:71","subExpression":{"id":16378,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16372,"src":"7425:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16380,"nodeType":"ExpressionStatement","src":"7423:3:71"},"nodeType":"ForStatement","src":"7394:128:71"},{"expression":{"id":16397,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16364,"src":"7542:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":16335,"id":16398,"nodeType":"Return","src":"7535:13:71"}]}]},"documentation":{"id":16323,"nodeType":"StructuredDocumentation","src":"6533:533:71","text":" @dev Return a slice of the set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16401,"implemented":true,"kind":"function","modifiers":[],"name":"_values","nameLocation":"7080:7:71","nodeType":"FunctionDefinition","parameters":{"id":16331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16326,"mutability":"mutable","name":"set","nameLocation":"7100:3:71","nodeType":"VariableDeclaration","scope":16401,"src":"7088:15:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16325,"nodeType":"UserDefinedTypeName","pathNode":{"id":16324,"name":"Set","nameLocations":["7088:3:71"],"nodeType":"IdentifierPath","referencedDeclaration":16089,"src":"7088:3:71"},"referencedDeclaration":16089,"src":"7088:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"},{"constant":false,"id":16328,"mutability":"mutable","name":"start","nameLocation":"7113:5:71","nodeType":"VariableDeclaration","scope":16401,"src":"7105:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16327,"name":"uint256","nodeType":"ElementaryTypeName","src":"7105:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16330,"mutability":"mutable","name":"end","nameLocation":"7128:3:71","nodeType":"VariableDeclaration","scope":16401,"src":"7120:11:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16329,"name":"uint256","nodeType":"ElementaryTypeName","src":"7120:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7087:45:71"},"returnParameters":{"id":16335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16334,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16401,"src":"7155:16:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16332,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7155:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16333,"nodeType":"ArrayTypeName","src":"7155:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"7154:18:71"},"scope":17600,"src":"7071:494:71","stateMutability":"view","virtual":false,"visibility":"private"},{"canonicalName":"EnumerableSet.Bytes32Set","id":16405,"members":[{"constant":false,"id":16404,"mutability":"mutable","name":"_inner","nameLocation":"7622:6:71","nodeType":"VariableDeclaration","scope":16405,"src":"7618:10:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16403,"nodeType":"UserDefinedTypeName","pathNode":{"id":16402,"name":"Set","nameLocations":["7618:3:71"],"nodeType":"IdentifierPath","referencedDeclaration":16089,"src":"7618:3:71"},"referencedDeclaration":16089,"src":"7618:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"name":"Bytes32Set","nameLocation":"7597:10:71","nodeType":"StructDefinition","scope":17600,"src":"7590:45:71","visibility":"public"},{"body":{"id":16422,"nodeType":"Block","src":"7881:47:71","statements":[{"expression":{"arguments":[{"expression":{"id":16417,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16409,"src":"7903:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16418,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7907:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16404,"src":"7903:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16419,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16411,"src":"7915:5:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16416,"name":"_add","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"7898:4:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16089_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":16420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7898:23:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16415,"id":16421,"nodeType":"Return","src":"7891:30:71"}]},"documentation":{"id":16406,"nodeType":"StructuredDocumentation","src":"7641:159:71","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":16423,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"7814:3:71","nodeType":"FunctionDefinition","parameters":{"id":16412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16409,"mutability":"mutable","name":"set","nameLocation":"7837:3:71","nodeType":"VariableDeclaration","scope":16423,"src":"7818:22:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16408,"nodeType":"UserDefinedTypeName","pathNode":{"id":16407,"name":"Bytes32Set","nameLocations":["7818:10:71"],"nodeType":"IdentifierPath","referencedDeclaration":16405,"src":"7818:10:71"},"referencedDeclaration":16405,"src":"7818:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"},{"constant":false,"id":16411,"mutability":"mutable","name":"value","nameLocation":"7850:5:71","nodeType":"VariableDeclaration","scope":16423,"src":"7842:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16410,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7842:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7817:39:71"},"returnParameters":{"id":16415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16414,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16423,"src":"7875:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16413,"name":"bool","nodeType":"ElementaryTypeName","src":"7875:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7874:6:71"},"scope":17600,"src":"7805:123:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16440,"nodeType":"Block","src":"8175:50:71","statements":[{"expression":{"arguments":[{"expression":{"id":16435,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16427,"src":"8200:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16436,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8204:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16404,"src":"8200:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16437,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16429,"src":"8212:5:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16434,"name":"_remove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16215,"src":"8192:7:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16089_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":16438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8192:26:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16433,"id":16439,"nodeType":"Return","src":"8185:33:71"}]},"documentation":{"id":16424,"nodeType":"StructuredDocumentation","src":"7934:157:71","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":16441,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"8105:6:71","nodeType":"FunctionDefinition","parameters":{"id":16430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16427,"mutability":"mutable","name":"set","nameLocation":"8131:3:71","nodeType":"VariableDeclaration","scope":16441,"src":"8112:22:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16426,"nodeType":"UserDefinedTypeName","pathNode":{"id":16425,"name":"Bytes32Set","nameLocations":["8112:10:71"],"nodeType":"IdentifierPath","referencedDeclaration":16405,"src":"8112:10:71"},"referencedDeclaration":16405,"src":"8112:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"},{"constant":false,"id":16429,"mutability":"mutable","name":"value","nameLocation":"8144:5:71","nodeType":"VariableDeclaration","scope":16441,"src":"8136:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16428,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8136:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8111:39:71"},"returnParameters":{"id":16433,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16432,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16441,"src":"8169:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16431,"name":"bool","nodeType":"ElementaryTypeName","src":"8169:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8168:6:71"},"scope":17600,"src":"8096:129:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16453,"nodeType":"Block","src":"8587:35:71","statements":[{"expression":{"arguments":[{"expression":{"id":16449,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16445,"src":"8604:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16450,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8608:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16404,"src":"8604:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16448,"name":"_clear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16258,"src":"8597:6:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16089_storage_ptr_$returns$__$","typeString":"function (struct EnumerableSet.Set storage pointer)"}},"id":16451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8597:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16452,"nodeType":"ExpressionStatement","src":"8597:18:71"}]},"documentation":{"id":16442,"nodeType":"StructuredDocumentation","src":"8231:303:71","text":" @dev Removes all the values from a set. O(n).\n WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block."},"id":16454,"implemented":true,"kind":"function","modifiers":[],"name":"clear","nameLocation":"8548:5:71","nodeType":"FunctionDefinition","parameters":{"id":16446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16445,"mutability":"mutable","name":"set","nameLocation":"8573:3:71","nodeType":"VariableDeclaration","scope":16454,"src":"8554:22:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16444,"nodeType":"UserDefinedTypeName","pathNode":{"id":16443,"name":"Bytes32Set","nameLocations":["8554:10:71"],"nodeType":"IdentifierPath","referencedDeclaration":16405,"src":"8554:10:71"},"referencedDeclaration":16405,"src":"8554:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"}],"src":"8553:24:71"},"returnParameters":{"id":16447,"nodeType":"ParameterList","parameters":[],"src":"8587:0:71"},"scope":17600,"src":"8539:83:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16471,"nodeType":"Block","src":"8789:52:71","statements":[{"expression":{"arguments":[{"expression":{"id":16466,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16458,"src":"8816:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16467,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8820:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16404,"src":"8816:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16468,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16460,"src":"8828:5:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16465,"name":"_contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16277,"src":"8806:9:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16089_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"}},"id":16469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8806:28:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16464,"id":16470,"nodeType":"Return","src":"8799:35:71"}]},"documentation":{"id":16455,"nodeType":"StructuredDocumentation","src":"8628:70:71","text":" @dev Returns true if the value is in the set. O(1)."},"id":16472,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"8712:8:71","nodeType":"FunctionDefinition","parameters":{"id":16461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16458,"mutability":"mutable","name":"set","nameLocation":"8740:3:71","nodeType":"VariableDeclaration","scope":16472,"src":"8721:22:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16457,"nodeType":"UserDefinedTypeName","pathNode":{"id":16456,"name":"Bytes32Set","nameLocations":["8721:10:71"],"nodeType":"IdentifierPath","referencedDeclaration":16405,"src":"8721:10:71"},"referencedDeclaration":16405,"src":"8721:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"},{"constant":false,"id":16460,"mutability":"mutable","name":"value","nameLocation":"8753:5:71","nodeType":"VariableDeclaration","scope":16472,"src":"8745:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16459,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8745:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8720:39:71"},"returnParameters":{"id":16464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16463,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16472,"src":"8783:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16462,"name":"bool","nodeType":"ElementaryTypeName","src":"8783:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8782:6:71"},"scope":17600,"src":"8703:138:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16486,"nodeType":"Block","src":"8994:43:71","statements":[{"expression":{"arguments":[{"expression":{"id":16482,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16476,"src":"9019:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16483,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9023:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16404,"src":"9019:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16481,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16291,"src":"9011:7:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16089_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (uint256)"}},"id":16484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9011:19:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16480,"id":16485,"nodeType":"Return","src":"9004:26:71"}]},"documentation":{"id":16473,"nodeType":"StructuredDocumentation","src":"8847:70:71","text":" @dev Returns the number of values in the set. O(1)."},"id":16487,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"8931:6:71","nodeType":"FunctionDefinition","parameters":{"id":16477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16476,"mutability":"mutable","name":"set","nameLocation":"8957:3:71","nodeType":"VariableDeclaration","scope":16487,"src":"8938:22:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16475,"nodeType":"UserDefinedTypeName","pathNode":{"id":16474,"name":"Bytes32Set","nameLocations":["8938:10:71"],"nodeType":"IdentifierPath","referencedDeclaration":16405,"src":"8938:10:71"},"referencedDeclaration":16405,"src":"8938:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"}],"src":"8937:24:71"},"returnParameters":{"id":16480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16479,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16487,"src":"8985:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16478,"name":"uint256","nodeType":"ElementaryTypeName","src":"8985:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8984:9:71"},"scope":17600,"src":"8922:115:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16504,"nodeType":"Block","src":"9462:46:71","statements":[{"expression":{"arguments":[{"expression":{"id":16499,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16491,"src":"9483:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16500,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9487:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16404,"src":"9483:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16501,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16493,"src":"9495:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16498,"name":"_at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16308,"src":"9479:3:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16089_storage_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256) view returns (bytes32)"}},"id":16502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9479:22:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":16497,"id":16503,"nodeType":"Return","src":"9472:29:71"}]},"documentation":{"id":16488,"nodeType":"StructuredDocumentation","src":"9043:331:71","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":16505,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"9388:2:71","nodeType":"FunctionDefinition","parameters":{"id":16494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16491,"mutability":"mutable","name":"set","nameLocation":"9410:3:71","nodeType":"VariableDeclaration","scope":16505,"src":"9391:22:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16490,"nodeType":"UserDefinedTypeName","pathNode":{"id":16489,"name":"Bytes32Set","nameLocations":["9391:10:71"],"nodeType":"IdentifierPath","referencedDeclaration":16405,"src":"9391:10:71"},"referencedDeclaration":16405,"src":"9391:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"},{"constant":false,"id":16493,"mutability":"mutable","name":"index","nameLocation":"9423:5:71","nodeType":"VariableDeclaration","scope":16505,"src":"9415:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16492,"name":"uint256","nodeType":"ElementaryTypeName","src":"9415:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9390:39:71"},"returnParameters":{"id":16497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16496,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16505,"src":"9453:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16495,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9453:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9452:9:71"},"scope":17600,"src":"9379:129:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16534,"nodeType":"Block","src":"10129:192:71","statements":[{"assignments":[16519],"declarations":[{"constant":false,"id":16519,"mutability":"mutable","name":"store","nameLocation":"10156:5:71","nodeType":"VariableDeclaration","scope":16534,"src":"10139:22:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16517,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10139:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16518,"nodeType":"ArrayTypeName","src":"10139:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16524,"initialValue":{"arguments":[{"expression":{"id":16521,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16509,"src":"10172:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16522,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10176:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16404,"src":"10172:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16520,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[16322,16401],"referencedDeclaration":16322,"src":"10164:7:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16089_storage_ptr_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (bytes32[] memory)"}},"id":16523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10164:19:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10139:44:71"},{"assignments":[16529],"declarations":[{"constant":false,"id":16529,"mutability":"mutable","name":"result","nameLocation":"10210:6:71","nodeType":"VariableDeclaration","scope":16534,"src":"10193:23:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16527,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10193:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16528,"nodeType":"ArrayTypeName","src":"10193:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16530,"nodeType":"VariableDeclarationStatement","src":"10193:23:71"},{"AST":{"nativeSrc":"10252:39:71","nodeType":"YulBlock","src":"10252:39:71","statements":[{"nativeSrc":"10266:15:71","nodeType":"YulAssignment","src":"10266:15:71","value":{"name":"store","nativeSrc":"10276:5:71","nodeType":"YulIdentifier","src":"10276:5:71"},"variableNames":[{"name":"result","nativeSrc":"10266:6:71","nodeType":"YulIdentifier","src":"10266:6:71"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16529,"isOffset":false,"isSlot":false,"src":"10266:6:71","valueSize":1},{"declaration":16519,"isOffset":false,"isSlot":false,"src":"10276:5:71","valueSize":1}],"flags":["memory-safe"],"id":16531,"nodeType":"InlineAssembly","src":"10227:64:71"},{"expression":{"id":16532,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16529,"src":"10308:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":16514,"id":16533,"nodeType":"Return","src":"10301:13:71"}]},"documentation":{"id":16506,"nodeType":"StructuredDocumentation","src":"9514:529:71","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16535,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"10057:6:71","nodeType":"FunctionDefinition","parameters":{"id":16510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16509,"mutability":"mutable","name":"set","nameLocation":"10083:3:71","nodeType":"VariableDeclaration","scope":16535,"src":"10064:22:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16508,"nodeType":"UserDefinedTypeName","pathNode":{"id":16507,"name":"Bytes32Set","nameLocations":["10064:10:71"],"nodeType":"IdentifierPath","referencedDeclaration":16405,"src":"10064:10:71"},"referencedDeclaration":16405,"src":"10064:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"}],"src":"10063:24:71"},"returnParameters":{"id":16514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16513,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16535,"src":"10111:16:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16511,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10111:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16512,"nodeType":"ArrayTypeName","src":"10111:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"10110:18:71"},"scope":17600,"src":"10048:273:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16570,"nodeType":"Block","src":"10974:204:71","statements":[{"assignments":[16553],"declarations":[{"constant":false,"id":16553,"mutability":"mutable","name":"store","nameLocation":"11001:5:71","nodeType":"VariableDeclaration","scope":16570,"src":"10984:22:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16551,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10984:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16552,"nodeType":"ArrayTypeName","src":"10984:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16560,"initialValue":{"arguments":[{"expression":{"id":16555,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16539,"src":"11017:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set storage pointer"}},"id":16556,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11021:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16404,"src":"11017:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16557,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16541,"src":"11029:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16558,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16543,"src":"11036:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16554,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[16322,16401],"referencedDeclaration":16401,"src":"11009:7:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16089_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256,uint256) view returns (bytes32[] memory)"}},"id":16559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11009:31:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10984:56:71"},{"assignments":[16565],"declarations":[{"constant":false,"id":16565,"mutability":"mutable","name":"result","nameLocation":"11067:6:71","nodeType":"VariableDeclaration","scope":16570,"src":"11050:23:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16563,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11050:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16564,"nodeType":"ArrayTypeName","src":"11050:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16566,"nodeType":"VariableDeclarationStatement","src":"11050:23:71"},{"AST":{"nativeSrc":"11109:39:71","nodeType":"YulBlock","src":"11109:39:71","statements":[{"nativeSrc":"11123:15:71","nodeType":"YulAssignment","src":"11123:15:71","value":{"name":"store","nativeSrc":"11133:5:71","nodeType":"YulIdentifier","src":"11133:5:71"},"variableNames":[{"name":"result","nativeSrc":"11123:6:71","nodeType":"YulIdentifier","src":"11123:6:71"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16565,"isOffset":false,"isSlot":false,"src":"11123:6:71","valueSize":1},{"declaration":16553,"isOffset":false,"isSlot":false,"src":"11133:5:71","valueSize":1}],"flags":["memory-safe"],"id":16567,"nodeType":"InlineAssembly","src":"11084:64:71"},{"expression":{"id":16568,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16565,"src":"11165:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"functionReturnParameters":16548,"id":16569,"nodeType":"Return","src":"11158:13:71"}]},"documentation":{"id":16536,"nodeType":"StructuredDocumentation","src":"10327:533:71","text":" @dev Return a slice of the set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16571,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"10874:6:71","nodeType":"FunctionDefinition","parameters":{"id":16544,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16539,"mutability":"mutable","name":"set","nameLocation":"10900:3:71","nodeType":"VariableDeclaration","scope":16571,"src":"10881:22:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"},"typeName":{"id":16538,"nodeType":"UserDefinedTypeName","pathNode":{"id":16537,"name":"Bytes32Set","nameLocations":["10881:10:71"],"nodeType":"IdentifierPath","referencedDeclaration":16405,"src":"10881:10:71"},"referencedDeclaration":16405,"src":"10881:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Set_$16405_storage_ptr","typeString":"struct EnumerableSet.Bytes32Set"}},"visibility":"internal"},{"constant":false,"id":16541,"mutability":"mutable","name":"start","nameLocation":"10913:5:71","nodeType":"VariableDeclaration","scope":16571,"src":"10905:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16540,"name":"uint256","nodeType":"ElementaryTypeName","src":"10905:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16543,"mutability":"mutable","name":"end","nameLocation":"10928:3:71","nodeType":"VariableDeclaration","scope":16571,"src":"10920:11:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16542,"name":"uint256","nodeType":"ElementaryTypeName","src":"10920:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10880:52:71"},"returnParameters":{"id":16548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16547,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16571,"src":"10956:16:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16545,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10956:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16546,"nodeType":"ArrayTypeName","src":"10956:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"src":"10955:18:71"},"scope":17600,"src":"10865:313:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"EnumerableSet.AddressSet","id":16575,"members":[{"constant":false,"id":16574,"mutability":"mutable","name":"_inner","nameLocation":"11235:6:71","nodeType":"VariableDeclaration","scope":16575,"src":"11231:10:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16573,"nodeType":"UserDefinedTypeName","pathNode":{"id":16572,"name":"Set","nameLocations":["11231:3:71"],"nodeType":"IdentifierPath","referencedDeclaration":16089,"src":"11231:3:71"},"referencedDeclaration":16089,"src":"11231:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"name":"AddressSet","nameLocation":"11210:10:71","nodeType":"StructDefinition","scope":17600,"src":"11203:45:71","visibility":"public"},{"body":{"id":16601,"nodeType":"Block","src":"11494:74:71","statements":[{"expression":{"arguments":[{"expression":{"id":16587,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16579,"src":"11516:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16588,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11520:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16574,"src":"11516:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"arguments":[{"arguments":[{"id":16595,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16581,"src":"11552:5:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16594,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11544:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":16593,"name":"uint160","nodeType":"ElementaryTypeName","src":"11544:7:71","typeDescriptions":{}}},"id":16596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11544:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":16592,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11536:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16591,"name":"uint256","nodeType":"ElementaryTypeName","src":"11536:7:71","typeDescriptions":{}}},"id":16597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11536:23:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16590,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11528:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16589,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11528:7:71","typeDescriptions":{}}},"id":16598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11528:32:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16586,"name":"_add","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"11511:4:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16089_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":16599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11511:50:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16585,"id":16600,"nodeType":"Return","src":"11504:57:71"}]},"documentation":{"id":16576,"nodeType":"StructuredDocumentation","src":"11254:159:71","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":16602,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"11427:3:71","nodeType":"FunctionDefinition","parameters":{"id":16582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16579,"mutability":"mutable","name":"set","nameLocation":"11450:3:71","nodeType":"VariableDeclaration","scope":16602,"src":"11431:22:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16578,"nodeType":"UserDefinedTypeName","pathNode":{"id":16577,"name":"AddressSet","nameLocations":["11431:10:71"],"nodeType":"IdentifierPath","referencedDeclaration":16575,"src":"11431:10:71"},"referencedDeclaration":16575,"src":"11431:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":16581,"mutability":"mutable","name":"value","nameLocation":"11463:5:71","nodeType":"VariableDeclaration","scope":16602,"src":"11455:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16580,"name":"address","nodeType":"ElementaryTypeName","src":"11455:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11430:39:71"},"returnParameters":{"id":16585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16584,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16602,"src":"11488:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16583,"name":"bool","nodeType":"ElementaryTypeName","src":"11488:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11487:6:71"},"scope":17600,"src":"11418:150:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16628,"nodeType":"Block","src":"11815:77:71","statements":[{"expression":{"arguments":[{"expression":{"id":16614,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16606,"src":"11840:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16615,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11844:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16574,"src":"11840:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"arguments":[{"arguments":[{"id":16622,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16608,"src":"11876:5:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16621,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11868:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":16620,"name":"uint160","nodeType":"ElementaryTypeName","src":"11868:7:71","typeDescriptions":{}}},"id":16623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11868:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":16619,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11860:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16618,"name":"uint256","nodeType":"ElementaryTypeName","src":"11860:7:71","typeDescriptions":{}}},"id":16624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11860:23:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16617,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11852:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16616,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11852:7:71","typeDescriptions":{}}},"id":16625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11852:32:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16613,"name":"_remove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16215,"src":"11832:7:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16089_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":16626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11832:53:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16612,"id":16627,"nodeType":"Return","src":"11825:60:71"}]},"documentation":{"id":16603,"nodeType":"StructuredDocumentation","src":"11574:157:71","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":16629,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"11745:6:71","nodeType":"FunctionDefinition","parameters":{"id":16609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16606,"mutability":"mutable","name":"set","nameLocation":"11771:3:71","nodeType":"VariableDeclaration","scope":16629,"src":"11752:22:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16605,"nodeType":"UserDefinedTypeName","pathNode":{"id":16604,"name":"AddressSet","nameLocations":["11752:10:71"],"nodeType":"IdentifierPath","referencedDeclaration":16575,"src":"11752:10:71"},"referencedDeclaration":16575,"src":"11752:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":16608,"mutability":"mutable","name":"value","nameLocation":"11784:5:71","nodeType":"VariableDeclaration","scope":16629,"src":"11776:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16607,"name":"address","nodeType":"ElementaryTypeName","src":"11776:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11751:39:71"},"returnParameters":{"id":16612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16611,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16629,"src":"11809:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16610,"name":"bool","nodeType":"ElementaryTypeName","src":"11809:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11808:6:71"},"scope":17600,"src":"11736:156:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16641,"nodeType":"Block","src":"12254:35:71","statements":[{"expression":{"arguments":[{"expression":{"id":16637,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16633,"src":"12271:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16638,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12275:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16574,"src":"12271:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16636,"name":"_clear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16258,"src":"12264:6:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16089_storage_ptr_$returns$__$","typeString":"function (struct EnumerableSet.Set storage pointer)"}},"id":16639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12264:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16640,"nodeType":"ExpressionStatement","src":"12264:18:71"}]},"documentation":{"id":16630,"nodeType":"StructuredDocumentation","src":"11898:303:71","text":" @dev Removes all the values from a set. O(n).\n WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block."},"id":16642,"implemented":true,"kind":"function","modifiers":[],"name":"clear","nameLocation":"12215:5:71","nodeType":"FunctionDefinition","parameters":{"id":16634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16633,"mutability":"mutable","name":"set","nameLocation":"12240:3:71","nodeType":"VariableDeclaration","scope":16642,"src":"12221:22:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16632,"nodeType":"UserDefinedTypeName","pathNode":{"id":16631,"name":"AddressSet","nameLocations":["12221:10:71"],"nodeType":"IdentifierPath","referencedDeclaration":16575,"src":"12221:10:71"},"referencedDeclaration":16575,"src":"12221:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"12220:24:71"},"returnParameters":{"id":16635,"nodeType":"ParameterList","parameters":[],"src":"12254:0:71"},"scope":17600,"src":"12206:83:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16668,"nodeType":"Block","src":"12456:79:71","statements":[{"expression":{"arguments":[{"expression":{"id":16654,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16646,"src":"12483:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16655,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12487:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16574,"src":"12483:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"arguments":[{"arguments":[{"id":16662,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16648,"src":"12519:5:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16661,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12511:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":16660,"name":"uint160","nodeType":"ElementaryTypeName","src":"12511:7:71","typeDescriptions":{}}},"id":16663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12511:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":16659,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12503:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16658,"name":"uint256","nodeType":"ElementaryTypeName","src":"12503:7:71","typeDescriptions":{}}},"id":16664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12503:23:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16657,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12495:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16656,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12495:7:71","typeDescriptions":{}}},"id":16665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12495:32:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16653,"name":"_contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16277,"src":"12473:9:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16089_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"}},"id":16666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12473:55:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16652,"id":16667,"nodeType":"Return","src":"12466:62:71"}]},"documentation":{"id":16643,"nodeType":"StructuredDocumentation","src":"12295:70:71","text":" @dev Returns true if the value is in the set. O(1)."},"id":16669,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"12379:8:71","nodeType":"FunctionDefinition","parameters":{"id":16649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16646,"mutability":"mutable","name":"set","nameLocation":"12407:3:71","nodeType":"VariableDeclaration","scope":16669,"src":"12388:22:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16645,"nodeType":"UserDefinedTypeName","pathNode":{"id":16644,"name":"AddressSet","nameLocations":["12388:10:71"],"nodeType":"IdentifierPath","referencedDeclaration":16575,"src":"12388:10:71"},"referencedDeclaration":16575,"src":"12388:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":16648,"mutability":"mutable","name":"value","nameLocation":"12420:5:71","nodeType":"VariableDeclaration","scope":16669,"src":"12412:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16647,"name":"address","nodeType":"ElementaryTypeName","src":"12412:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12387:39:71"},"returnParameters":{"id":16652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16651,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16669,"src":"12450:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16650,"name":"bool","nodeType":"ElementaryTypeName","src":"12450:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12449:6:71"},"scope":17600,"src":"12370:165:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16683,"nodeType":"Block","src":"12688:43:71","statements":[{"expression":{"arguments":[{"expression":{"id":16679,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16673,"src":"12713:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16680,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12717:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16574,"src":"12713:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16678,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16291,"src":"12705:7:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16089_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (uint256)"}},"id":16681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12705:19:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16677,"id":16682,"nodeType":"Return","src":"12698:26:71"}]},"documentation":{"id":16670,"nodeType":"StructuredDocumentation","src":"12541:70:71","text":" @dev Returns the number of values in the set. O(1)."},"id":16684,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"12625:6:71","nodeType":"FunctionDefinition","parameters":{"id":16674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16673,"mutability":"mutable","name":"set","nameLocation":"12651:3:71","nodeType":"VariableDeclaration","scope":16684,"src":"12632:22:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16672,"nodeType":"UserDefinedTypeName","pathNode":{"id":16671,"name":"AddressSet","nameLocations":["12632:10:71"],"nodeType":"IdentifierPath","referencedDeclaration":16575,"src":"12632:10:71"},"referencedDeclaration":16575,"src":"12632:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"12631:24:71"},"returnParameters":{"id":16677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16676,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16684,"src":"12679:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16675,"name":"uint256","nodeType":"ElementaryTypeName","src":"12679:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12678:9:71"},"scope":17600,"src":"12616:115:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16710,"nodeType":"Block","src":"13156:73:71","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":16702,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16688,"src":"13201:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16703,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13205:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16574,"src":"13201:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16704,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16690,"src":"13213:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16701,"name":"_at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16308,"src":"13197:3:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16089_storage_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256) view returns (bytes32)"}},"id":16705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13197:22:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16700,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13189:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16699,"name":"uint256","nodeType":"ElementaryTypeName","src":"13189:7:71","typeDescriptions":{}}},"id":16706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13189:31:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16698,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13181:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":16697,"name":"uint160","nodeType":"ElementaryTypeName","src":"13181:7:71","typeDescriptions":{}}},"id":16707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13181:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":16696,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13173:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16695,"name":"address","nodeType":"ElementaryTypeName","src":"13173:7:71","typeDescriptions":{}}},"id":16708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13173:49:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":16694,"id":16709,"nodeType":"Return","src":"13166:56:71"}]},"documentation":{"id":16685,"nodeType":"StructuredDocumentation","src":"12737:331:71","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":16711,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"13082:2:71","nodeType":"FunctionDefinition","parameters":{"id":16691,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16688,"mutability":"mutable","name":"set","nameLocation":"13104:3:71","nodeType":"VariableDeclaration","scope":16711,"src":"13085:22:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16687,"nodeType":"UserDefinedTypeName","pathNode":{"id":16686,"name":"AddressSet","nameLocations":["13085:10:71"],"nodeType":"IdentifierPath","referencedDeclaration":16575,"src":"13085:10:71"},"referencedDeclaration":16575,"src":"13085:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":16690,"mutability":"mutable","name":"index","nameLocation":"13117:5:71","nodeType":"VariableDeclaration","scope":16711,"src":"13109:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16689,"name":"uint256","nodeType":"ElementaryTypeName","src":"13109:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13084:39:71"},"returnParameters":{"id":16694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16693,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16711,"src":"13147:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16692,"name":"address","nodeType":"ElementaryTypeName","src":"13147:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13146:9:71"},"scope":17600,"src":"13073:156:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16740,"nodeType":"Block","src":"13850:192:71","statements":[{"assignments":[16725],"declarations":[{"constant":false,"id":16725,"mutability":"mutable","name":"store","nameLocation":"13877:5:71","nodeType":"VariableDeclaration","scope":16740,"src":"13860:22:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16723,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13860:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16724,"nodeType":"ArrayTypeName","src":"13860:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16730,"initialValue":{"arguments":[{"expression":{"id":16727,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16715,"src":"13893:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16728,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13897:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16574,"src":"13893:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16726,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[16322,16401],"referencedDeclaration":16322,"src":"13885:7:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16089_storage_ptr_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (bytes32[] memory)"}},"id":16729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13885:19:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"13860:44:71"},{"assignments":[16735],"declarations":[{"constant":false,"id":16735,"mutability":"mutable","name":"result","nameLocation":"13931:6:71","nodeType":"VariableDeclaration","scope":16740,"src":"13914:23:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":16733,"name":"address","nodeType":"ElementaryTypeName","src":"13914:7:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16734,"nodeType":"ArrayTypeName","src":"13914:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":16736,"nodeType":"VariableDeclarationStatement","src":"13914:23:71"},{"AST":{"nativeSrc":"13973:39:71","nodeType":"YulBlock","src":"13973:39:71","statements":[{"nativeSrc":"13987:15:71","nodeType":"YulAssignment","src":"13987:15:71","value":{"name":"store","nativeSrc":"13997:5:71","nodeType":"YulIdentifier","src":"13997:5:71"},"variableNames":[{"name":"result","nativeSrc":"13987:6:71","nodeType":"YulIdentifier","src":"13987:6:71"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16735,"isOffset":false,"isSlot":false,"src":"13987:6:71","valueSize":1},{"declaration":16725,"isOffset":false,"isSlot":false,"src":"13997:5:71","valueSize":1}],"flags":["memory-safe"],"id":16737,"nodeType":"InlineAssembly","src":"13948:64:71"},{"expression":{"id":16738,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16735,"src":"14029:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":16720,"id":16739,"nodeType":"Return","src":"14022:13:71"}]},"documentation":{"id":16712,"nodeType":"StructuredDocumentation","src":"13235:529:71","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16741,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"13778:6:71","nodeType":"FunctionDefinition","parameters":{"id":16716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16715,"mutability":"mutable","name":"set","nameLocation":"13804:3:71","nodeType":"VariableDeclaration","scope":16741,"src":"13785:22:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16714,"nodeType":"UserDefinedTypeName","pathNode":{"id":16713,"name":"AddressSet","nameLocations":["13785:10:71"],"nodeType":"IdentifierPath","referencedDeclaration":16575,"src":"13785:10:71"},"referencedDeclaration":16575,"src":"13785:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"13784:24:71"},"returnParameters":{"id":16720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16719,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16741,"src":"13832:16:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":16717,"name":"address","nodeType":"ElementaryTypeName","src":"13832:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16718,"nodeType":"ArrayTypeName","src":"13832:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"13831:18:71"},"scope":17600,"src":"13769:273:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16776,"nodeType":"Block","src":"14695:204:71","statements":[{"assignments":[16759],"declarations":[{"constant":false,"id":16759,"mutability":"mutable","name":"store","nameLocation":"14722:5:71","nodeType":"VariableDeclaration","scope":16776,"src":"14705:22:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16757,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14705:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16758,"nodeType":"ArrayTypeName","src":"14705:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16766,"initialValue":{"arguments":[{"expression":{"id":16761,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16745,"src":"14738:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":16762,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14742:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16574,"src":"14738:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16763,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16747,"src":"14750:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16764,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16749,"src":"14757:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16760,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[16322,16401],"referencedDeclaration":16401,"src":"14730:7:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16089_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256,uint256) view returns (bytes32[] memory)"}},"id":16765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14730:31:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"14705:56:71"},{"assignments":[16771],"declarations":[{"constant":false,"id":16771,"mutability":"mutable","name":"result","nameLocation":"14788:6:71","nodeType":"VariableDeclaration","scope":16776,"src":"14771:23:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":16769,"name":"address","nodeType":"ElementaryTypeName","src":"14771:7:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16770,"nodeType":"ArrayTypeName","src":"14771:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":16772,"nodeType":"VariableDeclarationStatement","src":"14771:23:71"},{"AST":{"nativeSrc":"14830:39:71","nodeType":"YulBlock","src":"14830:39:71","statements":[{"nativeSrc":"14844:15:71","nodeType":"YulAssignment","src":"14844:15:71","value":{"name":"store","nativeSrc":"14854:5:71","nodeType":"YulIdentifier","src":"14854:5:71"},"variableNames":[{"name":"result","nativeSrc":"14844:6:71","nodeType":"YulIdentifier","src":"14844:6:71"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16771,"isOffset":false,"isSlot":false,"src":"14844:6:71","valueSize":1},{"declaration":16759,"isOffset":false,"isSlot":false,"src":"14854:5:71","valueSize":1}],"flags":["memory-safe"],"id":16773,"nodeType":"InlineAssembly","src":"14805:64:71"},{"expression":{"id":16774,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16771,"src":"14886:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":16754,"id":16775,"nodeType":"Return","src":"14879:13:71"}]},"documentation":{"id":16742,"nodeType":"StructuredDocumentation","src":"14048:533:71","text":" @dev Return a slice of the set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16777,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"14595:6:71","nodeType":"FunctionDefinition","parameters":{"id":16750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16745,"mutability":"mutable","name":"set","nameLocation":"14621:3:71","nodeType":"VariableDeclaration","scope":16777,"src":"14602:22:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":16744,"nodeType":"UserDefinedTypeName","pathNode":{"id":16743,"name":"AddressSet","nameLocations":["14602:10:71"],"nodeType":"IdentifierPath","referencedDeclaration":16575,"src":"14602:10:71"},"referencedDeclaration":16575,"src":"14602:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":16747,"mutability":"mutable","name":"start","nameLocation":"14634:5:71","nodeType":"VariableDeclaration","scope":16777,"src":"14626:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16746,"name":"uint256","nodeType":"ElementaryTypeName","src":"14626:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16749,"mutability":"mutable","name":"end","nameLocation":"14649:3:71","nodeType":"VariableDeclaration","scope":16777,"src":"14641:11:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16748,"name":"uint256","nodeType":"ElementaryTypeName","src":"14641:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14601:52:71"},"returnParameters":{"id":16754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16753,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16777,"src":"14677:16:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":16751,"name":"address","nodeType":"ElementaryTypeName","src":"14677:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16752,"nodeType":"ArrayTypeName","src":"14677:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"14676:18:71"},"scope":17600,"src":"14586:313:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"EnumerableSet.UintSet","id":16781,"members":[{"constant":false,"id":16780,"mutability":"mutable","name":"_inner","nameLocation":"14950:6:71","nodeType":"VariableDeclaration","scope":16781,"src":"14946:10:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"},"typeName":{"id":16779,"nodeType":"UserDefinedTypeName","pathNode":{"id":16778,"name":"Set","nameLocations":["14946:3:71"],"nodeType":"IdentifierPath","referencedDeclaration":16089,"src":"14946:3:71"},"referencedDeclaration":16089,"src":"14946:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage_ptr","typeString":"struct EnumerableSet.Set"}},"visibility":"internal"}],"name":"UintSet","nameLocation":"14928:7:71","nodeType":"StructDefinition","scope":17600,"src":"14921:42:71","visibility":"public"},{"body":{"id":16801,"nodeType":"Block","src":"15206:56:71","statements":[{"expression":{"arguments":[{"expression":{"id":16793,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16785,"src":"15228:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16794,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15232:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16780,"src":"15228:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"id":16797,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16787,"src":"15248:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16796,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15240:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16795,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15240:7:71","typeDescriptions":{}}},"id":16798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15240:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16792,"name":"_add","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"15223:4:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16089_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":16799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15223:32:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16791,"id":16800,"nodeType":"Return","src":"15216:39:71"}]},"documentation":{"id":16782,"nodeType":"StructuredDocumentation","src":"14969:159:71","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":16802,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"15142:3:71","nodeType":"FunctionDefinition","parameters":{"id":16788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16785,"mutability":"mutable","name":"set","nameLocation":"15162:3:71","nodeType":"VariableDeclaration","scope":16802,"src":"15146:19:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16784,"nodeType":"UserDefinedTypeName","pathNode":{"id":16783,"name":"UintSet","nameLocations":["15146:7:71"],"nodeType":"IdentifierPath","referencedDeclaration":16781,"src":"15146:7:71"},"referencedDeclaration":16781,"src":"15146:7:71","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"},{"constant":false,"id":16787,"mutability":"mutable","name":"value","nameLocation":"15175:5:71","nodeType":"VariableDeclaration","scope":16802,"src":"15167:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16786,"name":"uint256","nodeType":"ElementaryTypeName","src":"15167:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15145:36:71"},"returnParameters":{"id":16791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16790,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16802,"src":"15200:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16789,"name":"bool","nodeType":"ElementaryTypeName","src":"15200:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15199:6:71"},"scope":17600,"src":"15133:129:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16822,"nodeType":"Block","src":"15506:59:71","statements":[{"expression":{"arguments":[{"expression":{"id":16814,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16806,"src":"15531:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16815,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15535:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16780,"src":"15531:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"id":16818,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16808,"src":"15551:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16817,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15543:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16816,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15543:7:71","typeDescriptions":{}}},"id":16819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15543:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16813,"name":"_remove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16215,"src":"15523:7:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16089_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) returns (bool)"}},"id":16820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15523:35:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16812,"id":16821,"nodeType":"Return","src":"15516:42:71"}]},"documentation":{"id":16803,"nodeType":"StructuredDocumentation","src":"15268:157:71","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":16823,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"15439:6:71","nodeType":"FunctionDefinition","parameters":{"id":16809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16806,"mutability":"mutable","name":"set","nameLocation":"15462:3:71","nodeType":"VariableDeclaration","scope":16823,"src":"15446:19:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16805,"nodeType":"UserDefinedTypeName","pathNode":{"id":16804,"name":"UintSet","nameLocations":["15446:7:71"],"nodeType":"IdentifierPath","referencedDeclaration":16781,"src":"15446:7:71"},"referencedDeclaration":16781,"src":"15446:7:71","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"},{"constant":false,"id":16808,"mutability":"mutable","name":"value","nameLocation":"15475:5:71","nodeType":"VariableDeclaration","scope":16823,"src":"15467:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16807,"name":"uint256","nodeType":"ElementaryTypeName","src":"15467:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15445:36:71"},"returnParameters":{"id":16812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16811,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16823,"src":"15500:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16810,"name":"bool","nodeType":"ElementaryTypeName","src":"15500:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15499:6:71"},"scope":17600,"src":"15430:135:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16835,"nodeType":"Block","src":"15924:35:71","statements":[{"expression":{"arguments":[{"expression":{"id":16831,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16827,"src":"15941:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16832,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15945:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16780,"src":"15941:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16830,"name":"_clear","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16258,"src":"15934:6:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Set_$16089_storage_ptr_$returns$__$","typeString":"function (struct EnumerableSet.Set storage pointer)"}},"id":16833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15934:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16834,"nodeType":"ExpressionStatement","src":"15934:18:71"}]},"documentation":{"id":16824,"nodeType":"StructuredDocumentation","src":"15571:303:71","text":" @dev Removes all the values from a set. O(n).\n WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block."},"id":16836,"implemented":true,"kind":"function","modifiers":[],"name":"clear","nameLocation":"15888:5:71","nodeType":"FunctionDefinition","parameters":{"id":16828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16827,"mutability":"mutable","name":"set","nameLocation":"15910:3:71","nodeType":"VariableDeclaration","scope":16836,"src":"15894:19:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16826,"nodeType":"UserDefinedTypeName","pathNode":{"id":16825,"name":"UintSet","nameLocations":["15894:7:71"],"nodeType":"IdentifierPath","referencedDeclaration":16781,"src":"15894:7:71"},"referencedDeclaration":16781,"src":"15894:7:71","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"}],"src":"15893:21:71"},"returnParameters":{"id":16829,"nodeType":"ParameterList","parameters":[],"src":"15924:0:71"},"scope":17600,"src":"15879:80:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16856,"nodeType":"Block","src":"16123:61:71","statements":[{"expression":{"arguments":[{"expression":{"id":16848,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16840,"src":"16150:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16849,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16154:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16780,"src":"16150:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"arguments":[{"id":16852,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16842,"src":"16170:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16851,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16162:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":16850,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16162:7:71","typeDescriptions":{}}},"id":16853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16162:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16847,"name":"_contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16277,"src":"16140:9:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16089_storage_ptr_$_t_bytes32_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.Set storage pointer,bytes32) view returns (bool)"}},"id":16854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16140:37:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":16846,"id":16855,"nodeType":"Return","src":"16133:44:71"}]},"documentation":{"id":16837,"nodeType":"StructuredDocumentation","src":"15965:70:71","text":" @dev Returns true if the value is in the set. O(1)."},"id":16857,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"16049:8:71","nodeType":"FunctionDefinition","parameters":{"id":16843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16840,"mutability":"mutable","name":"set","nameLocation":"16074:3:71","nodeType":"VariableDeclaration","scope":16857,"src":"16058:19:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16839,"nodeType":"UserDefinedTypeName","pathNode":{"id":16838,"name":"UintSet","nameLocations":["16058:7:71"],"nodeType":"IdentifierPath","referencedDeclaration":16781,"src":"16058:7:71"},"referencedDeclaration":16781,"src":"16058:7:71","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"},{"constant":false,"id":16842,"mutability":"mutable","name":"value","nameLocation":"16087:5:71","nodeType":"VariableDeclaration","scope":16857,"src":"16079:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16841,"name":"uint256","nodeType":"ElementaryTypeName","src":"16079:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16057:36:71"},"returnParameters":{"id":16846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16845,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16857,"src":"16117:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16844,"name":"bool","nodeType":"ElementaryTypeName","src":"16117:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"16116:6:71"},"scope":17600,"src":"16040:144:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16871,"nodeType":"Block","src":"16334:43:71","statements":[{"expression":{"arguments":[{"expression":{"id":16867,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16861,"src":"16359:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16868,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16363:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16780,"src":"16359:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16866,"name":"_length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16291,"src":"16351:7:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16089_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (uint256)"}},"id":16869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16351:19:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16865,"id":16870,"nodeType":"Return","src":"16344:26:71"}]},"documentation":{"id":16858,"nodeType":"StructuredDocumentation","src":"16190:70:71","text":" @dev Returns the number of values in the set. O(1)."},"id":16872,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"16274:6:71","nodeType":"FunctionDefinition","parameters":{"id":16862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16861,"mutability":"mutable","name":"set","nameLocation":"16297:3:71","nodeType":"VariableDeclaration","scope":16872,"src":"16281:19:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16860,"nodeType":"UserDefinedTypeName","pathNode":{"id":16859,"name":"UintSet","nameLocations":["16281:7:71"],"nodeType":"IdentifierPath","referencedDeclaration":16781,"src":"16281:7:71"},"referencedDeclaration":16781,"src":"16281:7:71","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"}],"src":"16280:21:71"},"returnParameters":{"id":16865,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16864,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16872,"src":"16325:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16863,"name":"uint256","nodeType":"ElementaryTypeName","src":"16325:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16324:9:71"},"scope":17600,"src":"16265:112:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16892,"nodeType":"Block","src":"16799:55:71","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":16886,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16876,"src":"16828:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16887,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16832:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16780,"src":"16828:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16888,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16878,"src":"16840:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16885,"name":"_at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16308,"src":"16824:3:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16089_storage_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256) view returns (bytes32)"}},"id":16889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16824:22:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16884,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16816:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16883,"name":"uint256","nodeType":"ElementaryTypeName","src":"16816:7:71","typeDescriptions":{}}},"id":16890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16816:31:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16882,"id":16891,"nodeType":"Return","src":"16809:38:71"}]},"documentation":{"id":16873,"nodeType":"StructuredDocumentation","src":"16383:331:71","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":16893,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"16728:2:71","nodeType":"FunctionDefinition","parameters":{"id":16879,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16876,"mutability":"mutable","name":"set","nameLocation":"16747:3:71","nodeType":"VariableDeclaration","scope":16893,"src":"16731:19:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16875,"nodeType":"UserDefinedTypeName","pathNode":{"id":16874,"name":"UintSet","nameLocations":["16731:7:71"],"nodeType":"IdentifierPath","referencedDeclaration":16781,"src":"16731:7:71"},"referencedDeclaration":16781,"src":"16731:7:71","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"},{"constant":false,"id":16878,"mutability":"mutable","name":"index","nameLocation":"16760:5:71","nodeType":"VariableDeclaration","scope":16893,"src":"16752:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16877,"name":"uint256","nodeType":"ElementaryTypeName","src":"16752:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16730:36:71"},"returnParameters":{"id":16882,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16881,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16893,"src":"16790:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16880,"name":"uint256","nodeType":"ElementaryTypeName","src":"16790:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16789:9:71"},"scope":17600,"src":"16719:135:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16922,"nodeType":"Block","src":"17472:192:71","statements":[{"assignments":[16907],"declarations":[{"constant":false,"id":16907,"mutability":"mutable","name":"store","nameLocation":"17499:5:71","nodeType":"VariableDeclaration","scope":16922,"src":"17482:22:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16905,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17482:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16906,"nodeType":"ArrayTypeName","src":"17482:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16912,"initialValue":{"arguments":[{"expression":{"id":16909,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16897,"src":"17515:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16910,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17519:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16780,"src":"17515:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}],"id":16908,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[16322,16401],"referencedDeclaration":16322,"src":"17507:7:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16089_storage_ptr_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer) view returns (bytes32[] memory)"}},"id":16911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17507:19:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"17482:44:71"},{"assignments":[16917],"declarations":[{"constant":false,"id":16917,"mutability":"mutable","name":"result","nameLocation":"17553:6:71","nodeType":"VariableDeclaration","scope":16922,"src":"17536:23:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16915,"name":"uint256","nodeType":"ElementaryTypeName","src":"17536:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16916,"nodeType":"ArrayTypeName","src":"17536:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":16918,"nodeType":"VariableDeclarationStatement","src":"17536:23:71"},{"AST":{"nativeSrc":"17595:39:71","nodeType":"YulBlock","src":"17595:39:71","statements":[{"nativeSrc":"17609:15:71","nodeType":"YulAssignment","src":"17609:15:71","value":{"name":"store","nativeSrc":"17619:5:71","nodeType":"YulIdentifier","src":"17619:5:71"},"variableNames":[{"name":"result","nativeSrc":"17609:6:71","nodeType":"YulIdentifier","src":"17609:6:71"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16917,"isOffset":false,"isSlot":false,"src":"17609:6:71","valueSize":1},{"declaration":16907,"isOffset":false,"isSlot":false,"src":"17619:5:71","valueSize":1}],"flags":["memory-safe"],"id":16919,"nodeType":"InlineAssembly","src":"17570:64:71"},{"expression":{"id":16920,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16917,"src":"17651:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":16902,"id":16921,"nodeType":"Return","src":"17644:13:71"}]},"documentation":{"id":16894,"nodeType":"StructuredDocumentation","src":"16860:529:71","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16923,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"17403:6:71","nodeType":"FunctionDefinition","parameters":{"id":16898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16897,"mutability":"mutable","name":"set","nameLocation":"17426:3:71","nodeType":"VariableDeclaration","scope":16923,"src":"17410:19:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16896,"nodeType":"UserDefinedTypeName","pathNode":{"id":16895,"name":"UintSet","nameLocations":["17410:7:71"],"nodeType":"IdentifierPath","referencedDeclaration":16781,"src":"17410:7:71"},"referencedDeclaration":16781,"src":"17410:7:71","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"}],"src":"17409:21:71"},"returnParameters":{"id":16902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16901,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16923,"src":"17454:16:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16899,"name":"uint256","nodeType":"ElementaryTypeName","src":"17454:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16900,"nodeType":"ArrayTypeName","src":"17454:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"17453:18:71"},"scope":17600,"src":"17394:270:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16958,"nodeType":"Block","src":"18314:204:71","statements":[{"assignments":[16941],"declarations":[{"constant":false,"id":16941,"mutability":"mutable","name":"store","nameLocation":"18341:5:71","nodeType":"VariableDeclaration","scope":16958,"src":"18324:22:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[]"},"typeName":{"baseType":{"id":16939,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18324:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":16940,"nodeType":"ArrayTypeName","src":"18324:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_storage_ptr","typeString":"bytes32[]"}},"visibility":"internal"}],"id":16948,"initialValue":{"arguments":[{"expression":{"id":16943,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16927,"src":"18357:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet storage pointer"}},"id":16944,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18361:6:71","memberName":"_inner","nodeType":"MemberAccess","referencedDeclaration":16780,"src":"18357:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"}},{"id":16945,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16929,"src":"18369:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16946,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16931,"src":"18376:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Set_$16089_storage","typeString":"struct EnumerableSet.Set storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16942,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[16322,16401],"referencedDeclaration":16401,"src":"18349:7:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Set_$16089_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$","typeString":"function (struct EnumerableSet.Set storage pointer,uint256,uint256) view returns (bytes32[] memory)"}},"id":16947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18349:31:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes32_$dyn_memory_ptr","typeString":"bytes32[] memory"}},"nodeType":"VariableDeclarationStatement","src":"18324:56:71"},{"assignments":[16953],"declarations":[{"constant":false,"id":16953,"mutability":"mutable","name":"result","nameLocation":"18407:6:71","nodeType":"VariableDeclaration","scope":16958,"src":"18390:23:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16951,"name":"uint256","nodeType":"ElementaryTypeName","src":"18390:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16952,"nodeType":"ArrayTypeName","src":"18390:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":16954,"nodeType":"VariableDeclarationStatement","src":"18390:23:71"},{"AST":{"nativeSrc":"18449:39:71","nodeType":"YulBlock","src":"18449:39:71","statements":[{"nativeSrc":"18463:15:71","nodeType":"YulAssignment","src":"18463:15:71","value":{"name":"store","nativeSrc":"18473:5:71","nodeType":"YulIdentifier","src":"18473:5:71"},"variableNames":[{"name":"result","nativeSrc":"18463:6:71","nodeType":"YulIdentifier","src":"18463:6:71"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":16953,"isOffset":false,"isSlot":false,"src":"18463:6:71","valueSize":1},{"declaration":16941,"isOffset":false,"isSlot":false,"src":"18473:5:71","valueSize":1}],"flags":["memory-safe"],"id":16955,"nodeType":"InlineAssembly","src":"18424:64:71"},{"expression":{"id":16956,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16953,"src":"18505:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":16936,"id":16957,"nodeType":"Return","src":"18498:13:71"}]},"documentation":{"id":16924,"nodeType":"StructuredDocumentation","src":"17670:533:71","text":" @dev Return a slice of the set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":16959,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"18217:6:71","nodeType":"FunctionDefinition","parameters":{"id":16932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16927,"mutability":"mutable","name":"set","nameLocation":"18240:3:71","nodeType":"VariableDeclaration","scope":16959,"src":"18224:19:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet"},"typeName":{"id":16926,"nodeType":"UserDefinedTypeName","pathNode":{"id":16925,"name":"UintSet","nameLocations":["18224:7:71"],"nodeType":"IdentifierPath","referencedDeclaration":16781,"src":"18224:7:71"},"referencedDeclaration":16781,"src":"18224:7:71","typeDescriptions":{"typeIdentifier":"t_struct$_UintSet_$16781_storage_ptr","typeString":"struct EnumerableSet.UintSet"}},"visibility":"internal"},{"constant":false,"id":16929,"mutability":"mutable","name":"start","nameLocation":"18253:5:71","nodeType":"VariableDeclaration","scope":16959,"src":"18245:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16928,"name":"uint256","nodeType":"ElementaryTypeName","src":"18245:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16931,"mutability":"mutable","name":"end","nameLocation":"18268:3:71","nodeType":"VariableDeclaration","scope":16959,"src":"18260:11:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16930,"name":"uint256","nodeType":"ElementaryTypeName","src":"18260:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18223:49:71"},"returnParameters":{"id":16936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16935,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16959,"src":"18296:16:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16933,"name":"uint256","nodeType":"ElementaryTypeName","src":"18296:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16934,"nodeType":"ArrayTypeName","src":"18296:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"18295:18:71"},"scope":17600,"src":"18208:310:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"EnumerableSet.StringSet","id":16967,"members":[{"constant":false,"id":16962,"mutability":"mutable","name":"_values","nameLocation":"18593:7:71","nodeType":"VariableDeclaration","scope":16967,"src":"18584:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":16960,"name":"string","nodeType":"ElementaryTypeName","src":"18584:6:71","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":16961,"nodeType":"ArrayTypeName","src":"18584:8:71","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":16966,"mutability":"mutable","name":"_positions","nameLocation":"18784:10:71","nodeType":"VariableDeclaration","scope":16967,"src":"18751:43:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string => uint256)"},"typeName":{"id":16965,"keyName":"value","keyNameLocation":"18766:5:71","keyType":{"id":16963,"name":"string","nodeType":"ElementaryTypeName","src":"18759:6:71","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"nodeType":"Mapping","src":"18751:32:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":16964,"name":"uint256","nodeType":"ElementaryTypeName","src":"18775:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"name":"StringSet","nameLocation":"18531:9:71","nodeType":"StructDefinition","scope":17600,"src":"18524:277:71","visibility":"public"},{"body":{"id":17008,"nodeType":"Block","src":"19052:336:71","statements":[{"condition":{"id":16982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"19066:21:71","subExpression":{"arguments":[{"id":16979,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16971,"src":"19076:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},{"id":16980,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16973,"src":"19081:5:71","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":16978,"name":"contains","nodeType":"Identifier","overloadedDeclarations":[16472,16669,16857,17155,17475],"referencedDeclaration":17155,"src":"19067:8:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_StringSet_$16967_storage_ptr_$_t_string_memory_ptr_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.StringSet storage pointer,string memory) view returns (bool)"}},"id":16981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19067:20:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17006,"nodeType":"Block","src":"19345:37:71","statements":[{"expression":{"hexValue":"66616c7365","id":17004,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19366:5:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":16977,"id":17005,"nodeType":"Return","src":"19359:12:71"}]},"id":17007,"nodeType":"IfStatement","src":"19062:320:71","trueBody":{"id":17003,"nodeType":"Block","src":"19089:250:71","statements":[{"expression":{"arguments":[{"id":16988,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16973,"src":"19120:5:71","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"expression":{"id":16983,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16971,"src":"19103:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":16986,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19107:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16962,"src":"19103:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":16987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19115:4:71","memberName":"push","nodeType":"MemberAccess","src":"19103:16:71","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_string_storage_$dyn_storage_ptr_$_t_string_storage_$returns$__$attached_to$_t_array$_t_string_storage_$dyn_storage_ptr_$","typeString":"function (string storage ref[] storage pointer,string storage ref)"}},"id":16989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19103:23:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16990,"nodeType":"ExpressionStatement","src":"19103:23:71"},{"expression":{"id":16999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":16991,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16971,"src":"19261:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":16994,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19265:10:71","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16966,"src":"19261:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string memory => uint256)"}},"id":16995,"indexExpression":{"id":16993,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16973,"src":"19276:5:71","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"19261:21:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":16996,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16971,"src":"19285:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":16997,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19289:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16962,"src":"19285:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":16998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19297:6:71","memberName":"length","nodeType":"MemberAccess","src":"19285:18:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19261:42:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17000,"nodeType":"ExpressionStatement","src":"19261:42:71"},{"expression":{"hexValue":"74727565","id":17001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19324:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":16977,"id":17002,"nodeType":"Return","src":"19317:11:71"}]}}]},"documentation":{"id":16968,"nodeType":"StructuredDocumentation","src":"18807:159:71","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":17009,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"18980:3:71","nodeType":"FunctionDefinition","parameters":{"id":16974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16971,"mutability":"mutable","name":"set","nameLocation":"19002:3:71","nodeType":"VariableDeclaration","scope":17009,"src":"18984:21:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":16970,"nodeType":"UserDefinedTypeName","pathNode":{"id":16969,"name":"StringSet","nameLocations":["18984:9:71"],"nodeType":"IdentifierPath","referencedDeclaration":16967,"src":"18984:9:71"},"referencedDeclaration":16967,"src":"18984:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"},{"constant":false,"id":16973,"mutability":"mutable","name":"value","nameLocation":"19021:5:71","nodeType":"VariableDeclaration","scope":17009,"src":"19007:19:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":16972,"name":"string","nodeType":"ElementaryTypeName","src":"19007:6:71","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"18983:44:71"},"returnParameters":{"id":16977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16976,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17009,"src":"19046:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16975,"name":"bool","nodeType":"ElementaryTypeName","src":"19046:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19045:6:71"},"scope":17600,"src":"18971:417:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17092,"nodeType":"Block","src":"19640:1302:71","statements":[{"assignments":[17021],"declarations":[{"constant":false,"id":17021,"mutability":"mutable","name":"position","nameLocation":"19752:8:71","nodeType":"VariableDeclaration","scope":17092,"src":"19744:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17020,"name":"uint256","nodeType":"ElementaryTypeName","src":"19744:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17026,"initialValue":{"baseExpression":{"expression":{"id":17022,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17013,"src":"19763:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17023,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19767:10:71","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16966,"src":"19763:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string memory => uint256)"}},"id":17025,"indexExpression":{"id":17024,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17015,"src":"19778:5:71","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19763:21:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19744:40:71"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17027,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17021,"src":"19799:8:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":17028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19811:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"19799:13:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17090,"nodeType":"Block","src":"20899:37:71","statements":[{"expression":{"hexValue":"66616c7365","id":17088,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20920:5:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":17019,"id":17089,"nodeType":"Return","src":"20913:12:71"}]},"id":17091,"nodeType":"IfStatement","src":"19795:1141:71","trueBody":{"id":17087,"nodeType":"Block","src":"19814:1079:71","statements":[{"assignments":[17031],"declarations":[{"constant":false,"id":17031,"mutability":"mutable","name":"valueIndex","nameLocation":"20174:10:71","nodeType":"VariableDeclaration","scope":17087,"src":"20166:18:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17030,"name":"uint256","nodeType":"ElementaryTypeName","src":"20166:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17035,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17032,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17021,"src":"20187:8:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":17033,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20198:1:71","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"20187:12:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20166:33:71"},{"assignments":[17037],"declarations":[{"constant":false,"id":17037,"mutability":"mutable","name":"lastIndex","nameLocation":"20221:9:71","nodeType":"VariableDeclaration","scope":17087,"src":"20213:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17036,"name":"uint256","nodeType":"ElementaryTypeName","src":"20213:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17043,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":17038,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17013,"src":"20233:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17039,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20237:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16962,"src":"20233:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20245:6:71","memberName":"length","nodeType":"MemberAccess","src":"20233:18:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":17041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20254:1:71","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"20233:22:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20213:42:71"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17044,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17031,"src":"20274:10:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":17045,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17037,"src":"20288:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20274:23:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17071,"nodeType":"IfStatement","src":"20270:384:71","trueBody":{"id":17070,"nodeType":"Block","src":"20299:355:71","statements":[{"assignments":[17048],"declarations":[{"constant":false,"id":17048,"mutability":"mutable","name":"lastValue","nameLocation":"20331:9:71","nodeType":"VariableDeclaration","scope":17070,"src":"20317:23:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17047,"name":"string","nodeType":"ElementaryTypeName","src":"20317:6:71","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":17053,"initialValue":{"baseExpression":{"expression":{"id":17049,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17013,"src":"20343:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17050,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20347:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16962,"src":"20343:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17052,"indexExpression":{"id":17051,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17037,"src":"20355:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20343:22:71","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"VariableDeclarationStatement","src":"20317:48:71"},{"expression":{"id":17060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17054,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17013,"src":"20464:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17057,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20468:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16962,"src":"20464:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17058,"indexExpression":{"id":17056,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17031,"src":"20476:10:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20464:23:71","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17059,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17048,"src":"20490:9:71","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"20464:35:71","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":17061,"nodeType":"ExpressionStatement","src":"20464:35:71"},{"expression":{"id":17068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17062,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17013,"src":"20603:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17065,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20607:10:71","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16966,"src":"20603:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string memory => uint256)"}},"id":17066,"indexExpression":{"id":17064,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17048,"src":"20618:9:71","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20603:25:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17067,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17021,"src":"20631:8:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20603:36:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17069,"nodeType":"ExpressionStatement","src":"20603:36:71"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":17072,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17013,"src":"20732:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17075,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20736:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16962,"src":"20732:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20744:3:71","memberName":"pop","nodeType":"MemberAccess","src":"20732:15:71","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_string_storage_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_string_storage_$dyn_storage_ptr_$","typeString":"function (string storage ref[] storage pointer)"}},"id":17077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20732:17:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17078,"nodeType":"ExpressionStatement","src":"20732:17:71"},{"expression":{"id":17083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"20828:28:71","subExpression":{"baseExpression":{"expression":{"id":17079,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17013,"src":"20835:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17080,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20839:10:71","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16966,"src":"20835:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string memory => uint256)"}},"id":17082,"indexExpression":{"id":17081,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17015,"src":"20850:5:71","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20835:21:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17084,"nodeType":"ExpressionStatement","src":"20828:28:71"},{"expression":{"hexValue":"74727565","id":17085,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20878:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":17019,"id":17086,"nodeType":"Return","src":"20871:11:71"}]}}]},"documentation":{"id":17010,"nodeType":"StructuredDocumentation","src":"19394:157:71","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":17093,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"19565:6:71","nodeType":"FunctionDefinition","parameters":{"id":17016,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17013,"mutability":"mutable","name":"set","nameLocation":"19590:3:71","nodeType":"VariableDeclaration","scope":17093,"src":"19572:21:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17012,"nodeType":"UserDefinedTypeName","pathNode":{"id":17011,"name":"StringSet","nameLocations":["19572:9:71"],"nodeType":"IdentifierPath","referencedDeclaration":16967,"src":"19572:9:71"},"referencedDeclaration":16967,"src":"19572:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"},{"constant":false,"id":17015,"mutability":"mutable","name":"value","nameLocation":"19609:5:71","nodeType":"VariableDeclaration","scope":17093,"src":"19595:19:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17014,"name":"string","nodeType":"ElementaryTypeName","src":"19595:6:71","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"19571:44:71"},"returnParameters":{"id":17019,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17018,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17093,"src":"19634:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17017,"name":"bool","nodeType":"ElementaryTypeName","src":"19634:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19633:6:71"},"scope":17600,"src":"19556:1386:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17135,"nodeType":"Block","src":"21303:195:71","statements":[{"assignments":[17101],"declarations":[{"constant":false,"id":17101,"mutability":"mutable","name":"len","nameLocation":"21321:3:71","nodeType":"VariableDeclaration","scope":17135,"src":"21313:11:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17100,"name":"uint256","nodeType":"ElementaryTypeName","src":"21313:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17105,"initialValue":{"arguments":[{"id":17103,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17097,"src":"21334:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}],"id":17102,"name":"length","nodeType":"Identifier","overloadedDeclarations":[16487,16684,16872,17169,17489],"referencedDeclaration":17169,"src":"21327:6:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_StringSet_$16967_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.StringSet storage pointer) view returns (uint256)"}},"id":17104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21327:11:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21313:25:71"},{"body":{"id":17125,"nodeType":"Block","src":"21382:62:71","statements":[{"expression":{"id":17123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"21396:37:71","subExpression":{"baseExpression":{"expression":{"id":17116,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17097,"src":"21403:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17117,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21407:10:71","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16966,"src":"21403:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string memory => uint256)"}},"id":17122,"indexExpression":{"baseExpression":{"expression":{"id":17118,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17097,"src":"21418:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17119,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21422:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16962,"src":"21418:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17121,"indexExpression":{"id":17120,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17107,"src":"21430:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21418:14:71","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21403:30:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17124,"nodeType":"ExpressionStatement","src":"21396:37:71"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17110,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17107,"src":"21368:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17111,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17101,"src":"21372:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21368:7:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17126,"initializationExpression":{"assignments":[17107],"declarations":[{"constant":false,"id":17107,"mutability":"mutable","name":"i","nameLocation":"21361:1:71","nodeType":"VariableDeclaration","scope":17126,"src":"21353:9:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17106,"name":"uint256","nodeType":"ElementaryTypeName","src":"21353:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17109,"initialValue":{"hexValue":"30","id":17108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21365:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"21353:13:71"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":17114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"21377:3:71","subExpression":{"id":17113,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17107,"src":"21379:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17115,"nodeType":"ExpressionStatement","src":"21377:3:71"},"nodeType":"ForStatement","src":"21348:96:71"},{"expression":{"arguments":[{"expression":{"id":17130,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17097,"src":"21476:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17131,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21480:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16962,"src":"21476:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},{"hexValue":"30","id":17132,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21489:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":17127,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12286,"src":"21453:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Arrays_$12286_$","typeString":"type(library Arrays)"}},"id":17129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21460:15:71","memberName":"unsafeSetLength","nodeType":"MemberAccess","referencedDeclaration":12285,"src":"21453:22:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_string_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$","typeString":"function (string storage ref[] storage pointer,uint256)"}},"id":17133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21453:38:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17134,"nodeType":"ExpressionStatement","src":"21453:38:71"}]},"documentation":{"id":17094,"nodeType":"StructuredDocumentation","src":"20948:303:71","text":" @dev Removes all the values from a set. O(n).\n WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block."},"id":17136,"implemented":true,"kind":"function","modifiers":[],"name":"clear","nameLocation":"21265:5:71","nodeType":"FunctionDefinition","parameters":{"id":17098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17097,"mutability":"mutable","name":"set","nameLocation":"21289:3:71","nodeType":"VariableDeclaration","scope":17136,"src":"21271:21:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17096,"nodeType":"UserDefinedTypeName","pathNode":{"id":17095,"name":"StringSet","nameLocations":["21271:9:71"],"nodeType":"IdentifierPath","referencedDeclaration":16967,"src":"21271:9:71"},"referencedDeclaration":16967,"src":"21271:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"}],"src":"21270:23:71"},"returnParameters":{"id":17099,"nodeType":"ParameterList","parameters":[],"src":"21303:0:71"},"scope":17600,"src":"21256:242:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17154,"nodeType":"Block","src":"21670:50:71","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":17147,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17140,"src":"21687:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17148,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21691:10:71","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":16966,"src":"21687:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_string_memory_ptr_$_t_uint256_$","typeString":"mapping(string memory => uint256)"}},"id":17150,"indexExpression":{"id":17149,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17142,"src":"21702:5:71","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21687:21:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":17151,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21712:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21687:26:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17146,"id":17153,"nodeType":"Return","src":"21680:33:71"}]},"documentation":{"id":17137,"nodeType":"StructuredDocumentation","src":"21504:70:71","text":" @dev Returns true if the value is in the set. O(1)."},"id":17155,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"21588:8:71","nodeType":"FunctionDefinition","parameters":{"id":17143,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17140,"mutability":"mutable","name":"set","nameLocation":"21615:3:71","nodeType":"VariableDeclaration","scope":17155,"src":"21597:21:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17139,"nodeType":"UserDefinedTypeName","pathNode":{"id":17138,"name":"StringSet","nameLocations":["21597:9:71"],"nodeType":"IdentifierPath","referencedDeclaration":16967,"src":"21597:9:71"},"referencedDeclaration":16967,"src":"21597:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"},{"constant":false,"id":17142,"mutability":"mutable","name":"value","nameLocation":"21634:5:71","nodeType":"VariableDeclaration","scope":17155,"src":"21620:19:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17141,"name":"string","nodeType":"ElementaryTypeName","src":"21620:6:71","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"21596:44:71"},"returnParameters":{"id":17146,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17145,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17155,"src":"21664:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17144,"name":"bool","nodeType":"ElementaryTypeName","src":"21664:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"21663:6:71"},"scope":17600,"src":"21579:141:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17168,"nodeType":"Block","src":"21872:42:71","statements":[{"expression":{"expression":{"expression":{"id":17164,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17159,"src":"21889:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17165,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21893:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16962,"src":"21889:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21901:6:71","memberName":"length","nodeType":"MemberAccess","src":"21889:18:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17163,"id":17167,"nodeType":"Return","src":"21882:25:71"}]},"documentation":{"id":17156,"nodeType":"StructuredDocumentation","src":"21726:70:71","text":" @dev Returns the number of values on the set. O(1)."},"id":17169,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"21810:6:71","nodeType":"FunctionDefinition","parameters":{"id":17160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17159,"mutability":"mutable","name":"set","nameLocation":"21835:3:71","nodeType":"VariableDeclaration","scope":17169,"src":"21817:21:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17158,"nodeType":"UserDefinedTypeName","pathNode":{"id":17157,"name":"StringSet","nameLocations":["21817:9:71"],"nodeType":"IdentifierPath","referencedDeclaration":16967,"src":"21817:9:71"},"referencedDeclaration":16967,"src":"21817:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"}],"src":"21816:23:71"},"returnParameters":{"id":17163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17162,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17169,"src":"21863:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17161,"name":"uint256","nodeType":"ElementaryTypeName","src":"21863:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21862:9:71"},"scope":17600,"src":"21801:113:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17185,"nodeType":"Block","src":"22344:42:71","statements":[{"expression":{"baseExpression":{"expression":{"id":17180,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17173,"src":"22361:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17181,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22365:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16962,"src":"22361:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":17183,"indexExpression":{"id":17182,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17175,"src":"22373:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22361:18:71","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":17179,"id":17184,"nodeType":"Return","src":"22354:25:71"}]},"documentation":{"id":17170,"nodeType":"StructuredDocumentation","src":"21920:331:71","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":17186,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"22265:2:71","nodeType":"FunctionDefinition","parameters":{"id":17176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17173,"mutability":"mutable","name":"set","nameLocation":"22286:3:71","nodeType":"VariableDeclaration","scope":17186,"src":"22268:21:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17172,"nodeType":"UserDefinedTypeName","pathNode":{"id":17171,"name":"StringSet","nameLocations":["22268:9:71"],"nodeType":"IdentifierPath","referencedDeclaration":16967,"src":"22268:9:71"},"referencedDeclaration":16967,"src":"22268:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"},{"constant":false,"id":17175,"mutability":"mutable","name":"index","nameLocation":"22299:5:71","nodeType":"VariableDeclaration","scope":17186,"src":"22291:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17174,"name":"uint256","nodeType":"ElementaryTypeName","src":"22291:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22267:38:71"},"returnParameters":{"id":17179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17178,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17186,"src":"22329:13:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17177,"name":"string","nodeType":"ElementaryTypeName","src":"22329:6:71","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"22328:15:71"},"scope":17600,"src":"22256:130:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17199,"nodeType":"Block","src":"23005:35:71","statements":[{"expression":{"expression":{"id":17196,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17190,"src":"23022:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17197,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23026:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16962,"src":"23022:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"functionReturnParameters":17195,"id":17198,"nodeType":"Return","src":"23015:18:71"}]},"documentation":{"id":17187,"nodeType":"StructuredDocumentation","src":"22392:529:71","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":17200,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"22935:6:71","nodeType":"FunctionDefinition","parameters":{"id":17191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17190,"mutability":"mutable","name":"set","nameLocation":"22960:3:71","nodeType":"VariableDeclaration","scope":17200,"src":"22942:21:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17189,"nodeType":"UserDefinedTypeName","pathNode":{"id":17188,"name":"StringSet","nameLocations":["22942:9:71"],"nodeType":"IdentifierPath","referencedDeclaration":16967,"src":"22942:9:71"},"referencedDeclaration":16967,"src":"22942:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"}],"src":"22941:23:71"},"returnParameters":{"id":17195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17194,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17200,"src":"22988:15:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":17192,"name":"string","nodeType":"ElementaryTypeName","src":"22988:6:71","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":17193,"nodeType":"ArrayTypeName","src":"22988:8:71","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"}],"src":"22987:17:71"},"scope":17600,"src":"22926:114:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17278,"nodeType":"Block","src":"23691:389:71","statements":[{"id":17277,"nodeType":"UncheckedBlock","src":"23701:373:71","statements":[{"expression":{"id":17222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17214,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17208,"src":"23725:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17217,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17208,"src":"23740:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":17219,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17204,"src":"23752:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}],"id":17218,"name":"length","nodeType":"Identifier","overloadedDeclarations":[16487,16684,16872,17169,17489],"referencedDeclaration":17169,"src":"23745:6:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_StringSet_$16967_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.StringSet storage pointer) view returns (uint256)"}},"id":17220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23745:11:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17215,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14309,"src":"23731:4:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14309_$","typeString":"type(library Math)"}},"id":17216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23736:3:71","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":13015,"src":"23731:8:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23731:26:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23725:32:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17223,"nodeType":"ExpressionStatement","src":"23725:32:71"},{"expression":{"id":17230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17224,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17206,"src":"23771:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17227,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17206,"src":"23788:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17228,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17208,"src":"23795:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17225,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14309,"src":"23779:4:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14309_$","typeString":"type(library Math)"}},"id":17226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23784:3:71","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":13015,"src":"23779:8:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23779:20:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23771:28:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17231,"nodeType":"ExpressionStatement","src":"23771:28:71"},{"assignments":[17233],"declarations":[{"constant":false,"id":17233,"mutability":"mutable","name":"len","nameLocation":"23822:3:71","nodeType":"VariableDeclaration","scope":17277,"src":"23814:11:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17232,"name":"uint256","nodeType":"ElementaryTypeName","src":"23814:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17237,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17234,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17208,"src":"23828:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17235,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17206,"src":"23834:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23828:11:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23814:25:71"},{"assignments":[17242],"declarations":[{"constant":false,"id":17242,"mutability":"mutable","name":"result","nameLocation":"23869:6:71","nodeType":"VariableDeclaration","scope":17277,"src":"23853:22:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":17240,"name":"string","nodeType":"ElementaryTypeName","src":"23853:6:71","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":17241,"nodeType":"ArrayTypeName","src":"23853:8:71","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"}],"id":17248,"initialValue":{"arguments":[{"id":17246,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17233,"src":"23891:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17245,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"23878:12:71","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_string_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (string memory[] memory)"},"typeName":{"baseType":{"id":17243,"name":"string","nodeType":"ElementaryTypeName","src":"23882:6:71","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":17244,"nodeType":"ArrayTypeName","src":"23882:8:71","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}}},"id":17247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23878:17:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"23853:42:71"},{"body":{"id":17273,"nodeType":"Block","src":"23943:94:71","statements":[{"expression":{"id":17271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17259,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17242,"src":"23961:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"id":17261,"indexExpression":{"id":17260,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17250,"src":"23968:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23961:9:71","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"expression":{"id":17264,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17204,"src":"23993:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet storage pointer"}},"id":17265,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23997:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":16962,"src":"23993:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17266,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17206,"src":"24006:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":17267,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17250,"src":"24014:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24006:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17262,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12286,"src":"23973:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Arrays_$12286_$","typeString":"type(library Arrays)"}},"id":17263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23980:12:71","memberName":"unsafeAccess","nodeType":"MemberAccess","referencedDeclaration":12165,"src":"23973:19:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_string_storage_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_StringSlot_$12573_storage_ptr_$","typeString":"function (string storage ref[] storage pointer,uint256) pure returns (struct StorageSlot.StringSlot storage pointer)"}},"id":17269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23973:43:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$12573_storage_ptr","typeString":"struct StorageSlot.StringSlot storage pointer"}},"id":17270,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24017:5:71","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12572,"src":"23973:49:71","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"src":"23961:61:71","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":17272,"nodeType":"ExpressionStatement","src":"23961:61:71"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17253,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17250,"src":"23929:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17254,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17233,"src":"23933:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23929:7:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17274,"initializationExpression":{"assignments":[17250],"declarations":[{"constant":false,"id":17250,"mutability":"mutable","name":"i","nameLocation":"23922:1:71","nodeType":"VariableDeclaration","scope":17274,"src":"23914:9:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17249,"name":"uint256","nodeType":"ElementaryTypeName","src":"23914:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17252,"initialValue":{"hexValue":"30","id":17251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23926:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"23914:13:71"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":17257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"23938:3:71","subExpression":{"id":17256,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17250,"src":"23940:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17258,"nodeType":"ExpressionStatement","src":"23938:3:71"},"nodeType":"ForStatement","src":"23909:128:71"},{"expression":{"id":17275,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17242,"src":"24057:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"functionReturnParameters":17213,"id":17276,"nodeType":"Return","src":"24050:13:71"}]}]},"documentation":{"id":17201,"nodeType":"StructuredDocumentation","src":"23046:533:71","text":" @dev Return a slice of the set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":17279,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"23593:6:71","nodeType":"FunctionDefinition","parameters":{"id":17209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17204,"mutability":"mutable","name":"set","nameLocation":"23618:3:71","nodeType":"VariableDeclaration","scope":17279,"src":"23600:21:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet"},"typeName":{"id":17203,"nodeType":"UserDefinedTypeName","pathNode":{"id":17202,"name":"StringSet","nameLocations":["23600:9:71"],"nodeType":"IdentifierPath","referencedDeclaration":16967,"src":"23600:9:71"},"referencedDeclaration":16967,"src":"23600:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_StringSet_$16967_storage_ptr","typeString":"struct EnumerableSet.StringSet"}},"visibility":"internal"},{"constant":false,"id":17206,"mutability":"mutable","name":"start","nameLocation":"23631:5:71","nodeType":"VariableDeclaration","scope":17279,"src":"23623:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17205,"name":"uint256","nodeType":"ElementaryTypeName","src":"23623:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17208,"mutability":"mutable","name":"end","nameLocation":"23646:3:71","nodeType":"VariableDeclaration","scope":17279,"src":"23638:11:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17207,"name":"uint256","nodeType":"ElementaryTypeName","src":"23638:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23599:51:71"},"returnParameters":{"id":17213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17212,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17279,"src":"23674:15:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":17210,"name":"string","nodeType":"ElementaryTypeName","src":"23674:6:71","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":17211,"nodeType":"ArrayTypeName","src":"23674:8:71","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"}],"src":"23673:17:71"},"scope":17600,"src":"23584:496:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"EnumerableSet.BytesSet","id":17287,"members":[{"constant":false,"id":17282,"mutability":"mutable","name":"_values","nameLocation":"24153:7:71","nodeType":"VariableDeclaration","scope":17287,"src":"24145:15:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":17280,"name":"bytes","nodeType":"ElementaryTypeName","src":"24145:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":17281,"nodeType":"ArrayTypeName","src":"24145:7:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"},{"constant":false,"id":17286,"mutability":"mutable","name":"_positions","nameLocation":"24343:10:71","nodeType":"VariableDeclaration","scope":17287,"src":"24311:42:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes => uint256)"},"typeName":{"id":17285,"keyName":"value","keyNameLocation":"24325:5:71","keyType":{"id":17283,"name":"bytes","nodeType":"ElementaryTypeName","src":"24319:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"nodeType":"Mapping","src":"24311:31:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":17284,"name":"uint256","nodeType":"ElementaryTypeName","src":"24334:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"name":"BytesSet","nameLocation":"24093:8:71","nodeType":"StructDefinition","scope":17600,"src":"24086:274:71","visibility":"public"},{"body":{"id":17328,"nodeType":"Block","src":"24609:336:71","statements":[{"condition":{"id":17302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"24623:21:71","subExpression":{"arguments":[{"id":17299,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17291,"src":"24633:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},{"id":17300,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17293,"src":"24638:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":17298,"name":"contains","nodeType":"Identifier","overloadedDeclarations":[16472,16669,16857,17155,17475],"referencedDeclaration":17475,"src":"24624:8:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_BytesSet_$17287_storage_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (struct EnumerableSet.BytesSet storage pointer,bytes memory) view returns (bool)"}},"id":17301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24624:20:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17326,"nodeType":"Block","src":"24902:37:71","statements":[{"expression":{"hexValue":"66616c7365","id":17324,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"24923:5:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":17297,"id":17325,"nodeType":"Return","src":"24916:12:71"}]},"id":17327,"nodeType":"IfStatement","src":"24619:320:71","trueBody":{"id":17323,"nodeType":"Block","src":"24646:250:71","statements":[{"expression":{"arguments":[{"id":17308,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17293,"src":"24677:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"expression":{"id":17303,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17291,"src":"24660:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17306,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24664:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17282,"src":"24660:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24672:4:71","memberName":"push","nodeType":"MemberAccess","src":"24660:16:71","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_bytes_storage_$dyn_storage_ptr_$_t_bytes_storage_$returns$__$attached_to$_t_array$_t_bytes_storage_$dyn_storage_ptr_$","typeString":"function (bytes storage ref[] storage pointer,bytes storage ref)"}},"id":17309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24660:23:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17310,"nodeType":"ExpressionStatement","src":"24660:23:71"},{"expression":{"id":17319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17311,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17291,"src":"24818:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17314,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24822:10:71","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":17286,"src":"24818:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes memory => uint256)"}},"id":17315,"indexExpression":{"id":17313,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17293,"src":"24833:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24818:21:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":17316,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17291,"src":"24842:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17317,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24846:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17282,"src":"24842:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24854:6:71","memberName":"length","nodeType":"MemberAccess","src":"24842:18:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24818:42:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17320,"nodeType":"ExpressionStatement","src":"24818:42:71"},{"expression":{"hexValue":"74727565","id":17321,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"24881:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":17297,"id":17322,"nodeType":"Return","src":"24874:11:71"}]}}]},"documentation":{"id":17288,"nodeType":"StructuredDocumentation","src":"24366:159:71","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, that is if it was not\n already present."},"id":17329,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"24539:3:71","nodeType":"FunctionDefinition","parameters":{"id":17294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17291,"mutability":"mutable","name":"set","nameLocation":"24560:3:71","nodeType":"VariableDeclaration","scope":17329,"src":"24543:20:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17290,"nodeType":"UserDefinedTypeName","pathNode":{"id":17289,"name":"BytesSet","nameLocations":["24543:8:71"],"nodeType":"IdentifierPath","referencedDeclaration":17287,"src":"24543:8:71"},"referencedDeclaration":17287,"src":"24543:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"},{"constant":false,"id":17293,"mutability":"mutable","name":"value","nameLocation":"24578:5:71","nodeType":"VariableDeclaration","scope":17329,"src":"24565:18:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17292,"name":"bytes","nodeType":"ElementaryTypeName","src":"24565:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"24542:42:71"},"returnParameters":{"id":17297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17296,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17329,"src":"24603:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17295,"name":"bool","nodeType":"ElementaryTypeName","src":"24603:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"24602:6:71"},"scope":17600,"src":"24530:415:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17412,"nodeType":"Block","src":"25195:1301:71","statements":[{"assignments":[17341],"declarations":[{"constant":false,"id":17341,"mutability":"mutable","name":"position","nameLocation":"25307:8:71","nodeType":"VariableDeclaration","scope":17412,"src":"25299:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17340,"name":"uint256","nodeType":"ElementaryTypeName","src":"25299:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17346,"initialValue":{"baseExpression":{"expression":{"id":17342,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17333,"src":"25318:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17343,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25322:10:71","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":17286,"src":"25318:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes memory => uint256)"}},"id":17345,"indexExpression":{"id":17344,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17335,"src":"25333:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25318:21:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25299:40:71"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17347,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17341,"src":"25354:8:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":17348,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25366:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"25354:13:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17410,"nodeType":"Block","src":"26453:37:71","statements":[{"expression":{"hexValue":"66616c7365","id":17408,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26474:5:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":17339,"id":17409,"nodeType":"Return","src":"26467:12:71"}]},"id":17411,"nodeType":"IfStatement","src":"25350:1140:71","trueBody":{"id":17407,"nodeType":"Block","src":"25369:1078:71","statements":[{"assignments":[17351],"declarations":[{"constant":false,"id":17351,"mutability":"mutable","name":"valueIndex","nameLocation":"25729:10:71","nodeType":"VariableDeclaration","scope":17407,"src":"25721:18:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17350,"name":"uint256","nodeType":"ElementaryTypeName","src":"25721:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17355,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17352,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17341,"src":"25742:8:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":17353,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25753:1:71","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25742:12:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25721:33:71"},{"assignments":[17357],"declarations":[{"constant":false,"id":17357,"mutability":"mutable","name":"lastIndex","nameLocation":"25776:9:71","nodeType":"VariableDeclaration","scope":17407,"src":"25768:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17356,"name":"uint256","nodeType":"ElementaryTypeName","src":"25768:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17363,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":17358,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17333,"src":"25788:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17359,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25792:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17282,"src":"25788:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25800:6:71","memberName":"length","nodeType":"MemberAccess","src":"25788:18:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":17361,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25809:1:71","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"25788:22:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25768:42:71"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17364,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17351,"src":"25829:10:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":17365,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17357,"src":"25843:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25829:23:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17391,"nodeType":"IfStatement","src":"25825:383:71","trueBody":{"id":17390,"nodeType":"Block","src":"25854:354:71","statements":[{"assignments":[17368],"declarations":[{"constant":false,"id":17368,"mutability":"mutable","name":"lastValue","nameLocation":"25885:9:71","nodeType":"VariableDeclaration","scope":17390,"src":"25872:22:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17367,"name":"bytes","nodeType":"ElementaryTypeName","src":"25872:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":17373,"initialValue":{"baseExpression":{"expression":{"id":17369,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17333,"src":"25897:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17370,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25901:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17282,"src":"25897:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17372,"indexExpression":{"id":17371,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17357,"src":"25909:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25897:22:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"nodeType":"VariableDeclarationStatement","src":"25872:47:71"},{"expression":{"id":17380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17374,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17333,"src":"26018:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17377,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26022:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17282,"src":"26018:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17378,"indexExpression":{"id":17376,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17351,"src":"26030:10:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26018:23:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17379,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17368,"src":"26044:9:71","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"26018:35:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"id":17381,"nodeType":"ExpressionStatement","src":"26018:35:71"},{"expression":{"id":17388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":17382,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17333,"src":"26157:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17385,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26161:10:71","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":17286,"src":"26157:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes memory => uint256)"}},"id":17386,"indexExpression":{"id":17384,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17368,"src":"26172:9:71","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26157:25:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17387,"name":"position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17341,"src":"26185:8:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26157:36:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17389,"nodeType":"ExpressionStatement","src":"26157:36:71"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":17392,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17333,"src":"26286:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17395,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26290:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17282,"src":"26286:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26298:3:71","memberName":"pop","nodeType":"MemberAccess","src":"26286:15:71","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_bytes_storage_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_bytes_storage_$dyn_storage_ptr_$","typeString":"function (bytes storage ref[] storage pointer)"}},"id":17397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26286:17:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17398,"nodeType":"ExpressionStatement","src":"26286:17:71"},{"expression":{"id":17403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"26382:28:71","subExpression":{"baseExpression":{"expression":{"id":17399,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17333,"src":"26389:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17400,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26393:10:71","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":17286,"src":"26389:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes memory => uint256)"}},"id":17402,"indexExpression":{"id":17401,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17335,"src":"26404:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26389:21:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17404,"nodeType":"ExpressionStatement","src":"26382:28:71"},{"expression":{"hexValue":"74727565","id":17405,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26432:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":17339,"id":17406,"nodeType":"Return","src":"26425:11:71"}]}}]},"documentation":{"id":17330,"nodeType":"StructuredDocumentation","src":"24951:157:71","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set, that is if it was\n present."},"id":17413,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"25122:6:71","nodeType":"FunctionDefinition","parameters":{"id":17336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17333,"mutability":"mutable","name":"set","nameLocation":"25146:3:71","nodeType":"VariableDeclaration","scope":17413,"src":"25129:20:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17332,"nodeType":"UserDefinedTypeName","pathNode":{"id":17331,"name":"BytesSet","nameLocations":["25129:8:71"],"nodeType":"IdentifierPath","referencedDeclaration":17287,"src":"25129:8:71"},"referencedDeclaration":17287,"src":"25129:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"},{"constant":false,"id":17335,"mutability":"mutable","name":"value","nameLocation":"25164:5:71","nodeType":"VariableDeclaration","scope":17413,"src":"25151:18:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17334,"name":"bytes","nodeType":"ElementaryTypeName","src":"25151:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"25128:42:71"},"returnParameters":{"id":17339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17338,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17413,"src":"25189:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17337,"name":"bool","nodeType":"ElementaryTypeName","src":"25189:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"25188:6:71"},"scope":17600,"src":"25113:1383:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17455,"nodeType":"Block","src":"26856:195:71","statements":[{"assignments":[17421],"declarations":[{"constant":false,"id":17421,"mutability":"mutable","name":"len","nameLocation":"26874:3:71","nodeType":"VariableDeclaration","scope":17455,"src":"26866:11:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17420,"name":"uint256","nodeType":"ElementaryTypeName","src":"26866:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17425,"initialValue":{"arguments":[{"id":17423,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17417,"src":"26887:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}],"id":17422,"name":"length","nodeType":"Identifier","overloadedDeclarations":[16487,16684,16872,17169,17489],"referencedDeclaration":17489,"src":"26880:6:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_BytesSet_$17287_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.BytesSet storage pointer) view returns (uint256)"}},"id":17424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26880:11:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"26866:25:71"},{"body":{"id":17445,"nodeType":"Block","src":"26935:62:71","statements":[{"expression":{"id":17443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"26949:37:71","subExpression":{"baseExpression":{"expression":{"id":17436,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17417,"src":"26956:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17437,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26960:10:71","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":17286,"src":"26956:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes memory => uint256)"}},"id":17442,"indexExpression":{"baseExpression":{"expression":{"id":17438,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17417,"src":"26971:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17439,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26975:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17282,"src":"26971:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17441,"indexExpression":{"id":17440,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17427,"src":"26983:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26971:14:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26956:30:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17444,"nodeType":"ExpressionStatement","src":"26949:37:71"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17430,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17427,"src":"26921:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17431,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17421,"src":"26925:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26921:7:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17446,"initializationExpression":{"assignments":[17427],"declarations":[{"constant":false,"id":17427,"mutability":"mutable","name":"i","nameLocation":"26914:1:71","nodeType":"VariableDeclaration","scope":17446,"src":"26906:9:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17426,"name":"uint256","nodeType":"ElementaryTypeName","src":"26906:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17429,"initialValue":{"hexValue":"30","id":17428,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26918:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"26906:13:71"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":17434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"26930:3:71","subExpression":{"id":17433,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17427,"src":"26932:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17435,"nodeType":"ExpressionStatement","src":"26930:3:71"},"nodeType":"ForStatement","src":"26901:96:71"},{"expression":{"arguments":[{"expression":{"id":17450,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17417,"src":"27029:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17451,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27033:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17282,"src":"27029:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},{"hexValue":"30","id":17452,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27042:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":17447,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12286,"src":"27006:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Arrays_$12286_$","typeString":"type(library Arrays)"}},"id":17449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27013:15:71","memberName":"unsafeSetLength","nodeType":"MemberAccess","referencedDeclaration":12274,"src":"27006:22:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_bytes_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$","typeString":"function (bytes storage ref[] storage pointer,uint256)"}},"id":17453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27006:38:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17454,"nodeType":"ExpressionStatement","src":"27006:38:71"}]},"documentation":{"id":17414,"nodeType":"StructuredDocumentation","src":"26502:303:71","text":" @dev Removes all the values from a set. O(n).\n WARNING: Developers should keep in mind that this function has an unbounded cost and using it may render the\n function uncallable if the set grows to the point where clearing it consumes too much gas to fit in a block."},"id":17456,"implemented":true,"kind":"function","modifiers":[],"name":"clear","nameLocation":"26819:5:71","nodeType":"FunctionDefinition","parameters":{"id":17418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17417,"mutability":"mutable","name":"set","nameLocation":"26842:3:71","nodeType":"VariableDeclaration","scope":17456,"src":"26825:20:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17416,"nodeType":"UserDefinedTypeName","pathNode":{"id":17415,"name":"BytesSet","nameLocations":["26825:8:71"],"nodeType":"IdentifierPath","referencedDeclaration":17287,"src":"26825:8:71"},"referencedDeclaration":17287,"src":"26825:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"}],"src":"26824:22:71"},"returnParameters":{"id":17419,"nodeType":"ParameterList","parameters":[],"src":"26856:0:71"},"scope":17600,"src":"26810:241:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17474,"nodeType":"Block","src":"27221:50:71","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":17467,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17460,"src":"27238:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17468,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27242:10:71","memberName":"_positions","nodeType":"MemberAccess","referencedDeclaration":17286,"src":"27238:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes_memory_ptr_$_t_uint256_$","typeString":"mapping(bytes memory => uint256)"}},"id":17470,"indexExpression":{"id":17469,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17462,"src":"27253:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27238:21:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":17471,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27263:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"27238:26:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17466,"id":17473,"nodeType":"Return","src":"27231:33:71"}]},"documentation":{"id":17457,"nodeType":"StructuredDocumentation","src":"27057:70:71","text":" @dev Returns true if the value is in the set. O(1)."},"id":17475,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"27141:8:71","nodeType":"FunctionDefinition","parameters":{"id":17463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17460,"mutability":"mutable","name":"set","nameLocation":"27167:3:71","nodeType":"VariableDeclaration","scope":17475,"src":"27150:20:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17459,"nodeType":"UserDefinedTypeName","pathNode":{"id":17458,"name":"BytesSet","nameLocations":["27150:8:71"],"nodeType":"IdentifierPath","referencedDeclaration":17287,"src":"27150:8:71"},"referencedDeclaration":17287,"src":"27150:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"},{"constant":false,"id":17462,"mutability":"mutable","name":"value","nameLocation":"27185:5:71","nodeType":"VariableDeclaration","scope":17475,"src":"27172:18:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17461,"name":"bytes","nodeType":"ElementaryTypeName","src":"27172:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"27149:42:71"},"returnParameters":{"id":17466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17465,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17475,"src":"27215:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17464,"name":"bool","nodeType":"ElementaryTypeName","src":"27215:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"27214:6:71"},"scope":17600,"src":"27132:139:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17488,"nodeType":"Block","src":"27422:42:71","statements":[{"expression":{"expression":{"expression":{"id":17484,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17479,"src":"27439:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17485,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27443:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17282,"src":"27439:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27451:6:71","memberName":"length","nodeType":"MemberAccess","src":"27439:18:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17483,"id":17487,"nodeType":"Return","src":"27432:25:71"}]},"documentation":{"id":17476,"nodeType":"StructuredDocumentation","src":"27277:70:71","text":" @dev Returns the number of values on the set. O(1)."},"id":17489,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"27361:6:71","nodeType":"FunctionDefinition","parameters":{"id":17480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17479,"mutability":"mutable","name":"set","nameLocation":"27385:3:71","nodeType":"VariableDeclaration","scope":17489,"src":"27368:20:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17478,"nodeType":"UserDefinedTypeName","pathNode":{"id":17477,"name":"BytesSet","nameLocations":["27368:8:71"],"nodeType":"IdentifierPath","referencedDeclaration":17287,"src":"27368:8:71"},"referencedDeclaration":17287,"src":"27368:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"}],"src":"27367:22:71"},"returnParameters":{"id":17483,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17482,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17489,"src":"27413:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17481,"name":"uint256","nodeType":"ElementaryTypeName","src":"27413:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27412:9:71"},"scope":17600,"src":"27352:112:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17505,"nodeType":"Block","src":"27892:42:71","statements":[{"expression":{"baseExpression":{"expression":{"id":17500,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17493,"src":"27909:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17501,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27913:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17282,"src":"27909:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":17503,"indexExpression":{"id":17502,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17495,"src":"27921:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27909:18:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"functionReturnParameters":17499,"id":17504,"nodeType":"Return","src":"27902:25:71"}]},"documentation":{"id":17490,"nodeType":"StructuredDocumentation","src":"27470:331:71","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":17506,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"27815:2:71","nodeType":"FunctionDefinition","parameters":{"id":17496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17493,"mutability":"mutable","name":"set","nameLocation":"27835:3:71","nodeType":"VariableDeclaration","scope":17506,"src":"27818:20:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17492,"nodeType":"UserDefinedTypeName","pathNode":{"id":17491,"name":"BytesSet","nameLocations":["27818:8:71"],"nodeType":"IdentifierPath","referencedDeclaration":17287,"src":"27818:8:71"},"referencedDeclaration":17287,"src":"27818:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"},{"constant":false,"id":17495,"mutability":"mutable","name":"index","nameLocation":"27848:5:71","nodeType":"VariableDeclaration","scope":17506,"src":"27840:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17494,"name":"uint256","nodeType":"ElementaryTypeName","src":"27840:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27817:37:71"},"returnParameters":{"id":17499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17498,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17506,"src":"27878:12:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17497,"name":"bytes","nodeType":"ElementaryTypeName","src":"27878:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"27877:14:71"},"scope":17600,"src":"27806:128:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17519,"nodeType":"Block","src":"28551:35:71","statements":[{"expression":{"expression":{"id":17516,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17510,"src":"28568:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17517,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28572:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17282,"src":"28568:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"functionReturnParameters":17515,"id":17518,"nodeType":"Return","src":"28561:18:71"}]},"documentation":{"id":17507,"nodeType":"StructuredDocumentation","src":"27940:529:71","text":" @dev Return the entire set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":17520,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"28483:6:71","nodeType":"FunctionDefinition","parameters":{"id":17511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17510,"mutability":"mutable","name":"set","nameLocation":"28507:3:71","nodeType":"VariableDeclaration","scope":17520,"src":"28490:20:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17509,"nodeType":"UserDefinedTypeName","pathNode":{"id":17508,"name":"BytesSet","nameLocations":["28490:8:71"],"nodeType":"IdentifierPath","referencedDeclaration":17287,"src":"28490:8:71"},"referencedDeclaration":17287,"src":"28490:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"}],"src":"28489:22:71"},"returnParameters":{"id":17515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17514,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17520,"src":"28535:14:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":17512,"name":"bytes","nodeType":"ElementaryTypeName","src":"28535:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":17513,"nodeType":"ArrayTypeName","src":"28535:7:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"28534:16:71"},"scope":17600,"src":"28474:112:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17598,"nodeType":"Block","src":"29235:387:71","statements":[{"id":17597,"nodeType":"UncheckedBlock","src":"29245:371:71","statements":[{"expression":{"id":17542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17534,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17528,"src":"29269:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17537,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17528,"src":"29284:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":17539,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17524,"src":"29296:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}],"id":17538,"name":"length","nodeType":"Identifier","overloadedDeclarations":[16487,16684,16872,17169,17489],"referencedDeclaration":17489,"src":"29289:6:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_BytesSet_$17287_storage_ptr_$returns$_t_uint256_$","typeString":"function (struct EnumerableSet.BytesSet storage pointer) view returns (uint256)"}},"id":17540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29289:11:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17535,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14309,"src":"29275:4:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14309_$","typeString":"type(library Math)"}},"id":17536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29280:3:71","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":13015,"src":"29275:8:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29275:26:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29269:32:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17543,"nodeType":"ExpressionStatement","src":"29269:32:71"},{"expression":{"id":17550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17544,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17526,"src":"29315:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17547,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17526,"src":"29332:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17548,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17528,"src":"29339:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17545,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14309,"src":"29323:4:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$14309_$","typeString":"type(library Math)"}},"id":17546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29328:3:71","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":13015,"src":"29323:8:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29323:20:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29315:28:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17551,"nodeType":"ExpressionStatement","src":"29315:28:71"},{"assignments":[17553],"declarations":[{"constant":false,"id":17553,"mutability":"mutable","name":"len","nameLocation":"29366:3:71","nodeType":"VariableDeclaration","scope":17597,"src":"29358:11:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17552,"name":"uint256","nodeType":"ElementaryTypeName","src":"29358:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17557,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17554,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17528,"src":"29372:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17555,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17526,"src":"29378:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29372:11:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29358:25:71"},{"assignments":[17562],"declarations":[{"constant":false,"id":17562,"mutability":"mutable","name":"result","nameLocation":"29412:6:71","nodeType":"VariableDeclaration","scope":17597,"src":"29397:21:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":17560,"name":"bytes","nodeType":"ElementaryTypeName","src":"29397:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":17561,"nodeType":"ArrayTypeName","src":"29397:7:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"id":17568,"initialValue":{"arguments":[{"id":17566,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17553,"src":"29433:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"29421:11:71","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory[] memory)"},"typeName":{"baseType":{"id":17563,"name":"bytes","nodeType":"ElementaryTypeName","src":"29425:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":17564,"nodeType":"ArrayTypeName","src":"29425:7:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}}},"id":17567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29421:16:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"29397:40:71"},{"body":{"id":17593,"nodeType":"Block","src":"29485:94:71","statements":[{"expression":{"id":17591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17579,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17562,"src":"29503:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"id":17581,"indexExpression":{"id":17580,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17570,"src":"29510:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"29503:9:71","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"expression":{"id":17584,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17524,"src":"29535:3:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet storage pointer"}},"id":17585,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29539:7:71","memberName":"_values","nodeType":"MemberAccess","referencedDeclaration":17282,"src":"29535:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17586,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17526,"src":"29548:5:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":17587,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17570,"src":"29556:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29548:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17582,"name":"Arrays","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12286,"src":"29515:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Arrays_$12286_$","typeString":"type(library Arrays)"}},"id":17583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29522:12:71","memberName":"unsafeAccess","nodeType":"MemberAccess","referencedDeclaration":12139,"src":"29515:19:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_bytes_storage_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_BytesSlot_$12576_storage_ptr_$","typeString":"function (bytes storage ref[] storage pointer,uint256) pure returns (struct StorageSlot.BytesSlot storage pointer)"}},"id":17589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29515:43:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$12576_storage_ptr","typeString":"struct StorageSlot.BytesSlot storage pointer"}},"id":17590,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29559:5:71","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":12575,"src":"29515:49:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"src":"29503:61:71","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":17592,"nodeType":"ExpressionStatement","src":"29503:61:71"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17573,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17570,"src":"29471:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17574,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17553,"src":"29475:3:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29471:7:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17594,"initializationExpression":{"assignments":[17570],"declarations":[{"constant":false,"id":17570,"mutability":"mutable","name":"i","nameLocation":"29464:1:71","nodeType":"VariableDeclaration","scope":17594,"src":"29456:9:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17569,"name":"uint256","nodeType":"ElementaryTypeName","src":"29456:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17572,"initialValue":{"hexValue":"30","id":17571,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29468:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"29456:13:71"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":17577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"29480:3:71","subExpression":{"id":17576,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17570,"src":"29482:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17578,"nodeType":"ExpressionStatement","src":"29480:3:71"},"nodeType":"ForStatement","src":"29451:128:71"},{"expression":{"id":17595,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17562,"src":"29599:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"functionReturnParameters":17533,"id":17596,"nodeType":"Return","src":"29592:13:71"}]}]},"documentation":{"id":17521,"nodeType":"StructuredDocumentation","src":"28592:533:71","text":" @dev Return a slice of the set in an array\n WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n this function has an unbounded cost, and using it as part of a state-changing function may render the function\n uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block."},"id":17599,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"29139:6:71","nodeType":"FunctionDefinition","parameters":{"id":17529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17524,"mutability":"mutable","name":"set","nameLocation":"29163:3:71","nodeType":"VariableDeclaration","scope":17599,"src":"29146:20:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet"},"typeName":{"id":17523,"nodeType":"UserDefinedTypeName","pathNode":{"id":17522,"name":"BytesSet","nameLocations":["29146:8:71"],"nodeType":"IdentifierPath","referencedDeclaration":17287,"src":"29146:8:71"},"referencedDeclaration":17287,"src":"29146:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSet_$17287_storage_ptr","typeString":"struct EnumerableSet.BytesSet"}},"visibility":"internal"},{"constant":false,"id":17526,"mutability":"mutable","name":"start","nameLocation":"29176:5:71","nodeType":"VariableDeclaration","scope":17599,"src":"29168:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17525,"name":"uint256","nodeType":"ElementaryTypeName","src":"29168:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17528,"mutability":"mutable","name":"end","nameLocation":"29191:3:71","nodeType":"VariableDeclaration","scope":17599,"src":"29183:11:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17527,"name":"uint256","nodeType":"ElementaryTypeName","src":"29183:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29145:50:71"},"returnParameters":{"id":17533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17532,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17599,"src":"29219:14:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":17530,"name":"bytes","nodeType":"ElementaryTypeName","src":"29219:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":17531,"nodeType":"ArrayTypeName","src":"29219:7:71","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"29218:16:71"},"scope":17600,"src":"29130:492:71","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":17601,"src":"1586:28038:71","usedErrors":[],"usedEvents":[]}],"src":"205:29420:71"},"id":71},"contracts/BalancerContractRegistry.sol":{"ast":{"absolutePath":"contracts/BalancerContractRegistry.sol","exportedSymbols":{"BalancerContractRegistry":[18161],"ContractType":[43],"IBalancerContractRegistry":[212],"IVault":[2527],"SingletonAuthentication":[9271]},"id":18162,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":17602,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:72"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","id":17605,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18162,"sourceUnit":213,"src":"72:152:72","symbolAliases":[{"foreign":{"id":17603,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":212,"src":"85:25:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":17604,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43,"src":"116:12:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":17607,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18162,"sourceUnit":2528,"src":"225:81:72","symbolAliases":[{"foreign":{"id":17606,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"234:6:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":17609,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18162,"sourceUnit":9272,"src":"308:104:72","symbolAliases":[{"foreign":{"id":17608,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9271,"src":"317:23:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":17611,"name":"IBalancerContractRegistry","nameLocations":["2778:25:72"],"nodeType":"IdentifierPath","referencedDeclaration":212,"src":"2778:25:72"},"id":17612,"nodeType":"InheritanceSpecifier","src":"2778:25:72"},{"baseName":{"id":17613,"name":"SingletonAuthentication","nameLocations":["2805:23:72"],"nodeType":"IdentifierPath","referencedDeclaration":9271,"src":"2805:23:72"},"id":17614,"nodeType":"InheritanceSpecifier","src":"2805:23:72"}],"canonicalName":"BalancerContractRegistry","contractDependencies":[],"contractKind":"contract","documentation":{"id":17610,"nodeType":"StructuredDocumentation","src":"414:2326:72","text":" @notice On-chain registry of standard Balancer contracts.\n @dev Maintain a registry of official Balancer Factories, Routers, Hooks, and valid ERC4626 tokens, for two main\n purposes. The first is to support the many instances where we need to know that a contract is \"trusted\" (i.e.,\n is safe and behaves in the required manner). For instance, some hooks depend critically on the identity of the\n msg.sender, which must be passed down through the Router. Since Routers are permissionless, a malicious one could\n spoof the sender and \"fool\" the hook. The hook must therefore \"trust\" the Router.\n It is also important for the front-end to know when a particular wrapped token should be used with buffers. Not all\n \"ERC4626\" wrapped tokens are fully conforming, and buffer operations with non-conforming tokens may fail in various\n unexpected ways. It is not enough to simply check whether a buffer exists (e.g., by calling `getBufferAsset`),\n since best practice is for the pool creator to initialize buffers for all such tokens regardless. They are\n permissionless, and could otherwise be initialized by anyone in unexpected ways. This registry could be used to\n keep track of \"known good\" buffers, such that `isActiveBalancerContract(ContractType.ERC4626,
)` returns\n true for fully-compliant tokens with properly initialized buffers.\n Current solutions involve passing in the address of the trusted Router on deployment: but what if it needs to\n support multiple Routers? Or if the Router is deprecated and replaced? Instead, we can pass the registry address,\n and query this contract to determine whether the Router is a \"trusted\" one.\n The second use case is for off-chain queries, or other protocols that need to easily determine, say, the \"latest\"\n Weighted Pool Factory. This contract provides `isActiveBalancerContract(type, address)` for the first case, and\n `getBalancerContract(type, name)` for the second. It is also possible to query all known information about an\n address, using `getBalancerContractInfo(address)`, which returns a struct with the detailed state.\n Note that the `SingletonAuthentication` base contract provides `getVault`, so it is also possible to ask this\n contract for the Vault address, so it doesn't need to be a type."},"fullyImplemented":true,"id":18161,"linearizedBaseContracts":[18161,9271,7517,4367,14,212],"name":"BalancerContractRegistry","nameLocation":"2750:24:72","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":17618,"mutability":"mutable","name":"_contractRegistry","nameLocation":"3006:17:72","nodeType":"VariableDeclaration","scope":18161,"src":"2954:69:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"typeName":{"id":17617,"keyName":"contractId","keyNameLocation":"2970:10:72","keyType":{"id":17615,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2962:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"2954:43:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"valueName":"addr","valueNameLocation":"2992:4:72","valueType":{"id":17616,"name":"address","nodeType":"ElementaryTypeName","src":"2984:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"constant":false,"id":17623,"mutability":"mutable","name":"_contractInfo","nameLocation":"3891:13:72","nodeType":"VariableDeclaration","scope":18161,"src":"3840:64:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo)"},"typeName":{"id":17622,"keyName":"addr","keyNameLocation":"3856:4:72","keyType":{"id":17619,"name":"address","nodeType":"ElementaryTypeName","src":"3848:7:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3840:42:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo)"},"valueName":"info","valueNameLocation":"3877:4:72","valueType":{"id":17621,"nodeType":"UserDefinedTypeName","pathNode":{"id":17620,"name":"ContractInfo","nameLocations":["3864:12:72"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"3864:12:72"},"referencedDeclaration":52,"src":"3864:12:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}}},"visibility":"private"},{"constant":false,"id":17627,"mutability":"mutable","name":"_contractAliases","nameLocation":"4259:16:72","nodeType":"VariableDeclaration","scope":18161,"src":"4202:73:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"typeName":{"id":17626,"keyName":"contractAliasId","keyNameLocation":"4218:15:72","keyType":{"id":17624,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4210:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"4202:48:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"valueName":"addr","valueNameLocation":"4245:4:72","valueType":{"id":17625,"name":"address","nodeType":"ElementaryTypeName","src":"4237:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"documentation":{"id":17628,"nodeType":"StructuredDocumentation","src":"4282:306:72","text":" @notice A `_contractRegistry` entry has no corresponding `_contractInfo`.\n @dev This should never happen.\n @param contractName The name of the contract that has a registry entry but no contract info\n @param contractAddress The address of the contract with missing state"},"errorSelector":"36a7ac0a","id":17634,"name":"InconsistentState","nameLocation":"4599:17:72","nodeType":"ErrorDefinition","parameters":{"id":17633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17630,"mutability":"mutable","name":"contractName","nameLocation":"4624:12:72","nodeType":"VariableDeclaration","scope":17634,"src":"4617:19:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17629,"name":"string","nodeType":"ElementaryTypeName","src":"4617:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":17632,"mutability":"mutable","name":"contractAddress","nameLocation":"4646:15:72","nodeType":"VariableDeclaration","scope":17634,"src":"4638:23:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17631,"name":"address","nodeType":"ElementaryTypeName","src":"4638:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4616:46:72"},"src":"4593:70:72"},{"body":{"id":17643,"nodeType":"Block","src":"4726:64:72","statements":[]},"id":17644,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":17640,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17637,"src":"4719:5:72","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}}],"id":17641,"kind":"baseConstructorSpecifier","modifierName":{"id":17639,"name":"SingletonAuthentication","nameLocations":["4695:23:72"],"nodeType":"IdentifierPath","referencedDeclaration":9271,"src":"4695:23:72"},"nodeType":"ModifierInvocation","src":"4695:30:72"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":17638,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17637,"mutability":"mutable","name":"vault","nameLocation":"4688:5:72","nodeType":"VariableDeclaration","scope":17644,"src":"4681:12:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":17636,"nodeType":"UserDefinedTypeName","pathNode":{"id":17635,"name":"IVault","nameLocations":["4681:6:72"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"4681:6:72"},"referencedDeclaration":2527,"src":"4681:6:72","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"}],"src":"4680:14:72"},"returnParameters":{"id":17642,"nodeType":"ParameterList","parameters":[],"src":"4726:0:72"},"scope":18161,"src":"4669:121:72","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[150],"body":{"id":17770,"nodeType":"Block","src":"7250:1696:72","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17657,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17652,"src":"7303:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":17660,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7330:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17659,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7322:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17658,"name":"address","nodeType":"ElementaryTypeName","src":"7322:7:72","typeDescriptions":{}}},"id":17661,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7322:10:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7303:29:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17667,"nodeType":"IfStatement","src":"7299:88:72","trueBody":{"id":17666,"nodeType":"Block","src":"7334:53:72","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17663,"name":"ZeroContractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133,"src":"7355:19:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7355:21:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17665,"nodeType":"RevertStatement","src":"7348:28:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":17670,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17650,"src":"7407:12:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17669,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7401:5:72","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":17668,"name":"bytes","nodeType":"ElementaryTypeName","src":"7401:5:72","typeDescriptions":{}}},"id":17671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7401:19:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":17672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7421:6:72","memberName":"length","nodeType":"MemberAccess","src":"7401:26:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17673,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7431:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7401:31:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17679,"nodeType":"IfStatement","src":"7397:90:72","trueBody":{"id":17678,"nodeType":"Block","src":"7434:53:72","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17675,"name":"InvalidContractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":136,"src":"7455:19:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7455:21:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17677,"nodeType":"RevertStatement","src":"7448:28:72"}]}},{"assignments":[17682],"declarations":[{"constant":false,"id":17682,"mutability":"mutable","name":"info","nameLocation":"7565:4:72","nodeType":"VariableDeclaration","scope":17770,"src":"7545:24:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":17681,"nodeType":"UserDefinedTypeName","pathNode":{"id":17680,"name":"ContractInfo","nameLocations":["7545:12:72"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"7545:12:72"},"referencedDeclaration":52,"src":"7545:12:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":17686,"initialValue":{"baseExpression":{"id":17683,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17623,"src":"7572:13:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17685,"indexExpression":{"id":17684,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17652,"src":"7586:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7572:30:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7545:57:72"},{"condition":{"expression":{"id":17687,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17682,"src":"7616:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17688,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7621:12:72","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":49,"src":"7616:17:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17696,"nodeType":"IfStatement","src":"7612:123:72","trueBody":{"id":17695,"nodeType":"Block","src":"7635:100:72","statements":[{"errorCall":{"arguments":[{"expression":{"id":17690,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17682,"src":"7689:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17691,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7694:12:72","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":47,"src":"7689:17:72","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":17692,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17652,"src":"7708:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17689,"name":"ContractAddressAlreadyRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":92,"src":"7656:32:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_ContractType_$43_$_t_address_$returns$_t_error_$","typeString":"function (enum ContractType,address) pure returns (error)"}},"id":17693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7656:68:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17694,"nodeType":"RevertStatement","src":"7649:75:72"}]}},{"assignments":[17698],"declarations":[{"constant":false,"id":17698,"mutability":"mutable","name":"contractId","nameLocation":"7828:10:72","nodeType":"VariableDeclaration","scope":17770,"src":"7820:18:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17697,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7820:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":17702,"initialValue":{"arguments":[{"id":17700,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17650,"src":"7856:12:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17699,"name":"_getContractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18160,"src":"7841:14:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":17701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7841:28:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"7820:49:72"},{"assignments":[17704],"declarations":[{"constant":false,"id":17704,"mutability":"mutable","name":"existingRegistryAddress","nameLocation":"7887:23:72","nodeType":"VariableDeclaration","scope":17770,"src":"7879:31:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17703,"name":"address","nodeType":"ElementaryTypeName","src":"7879:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17708,"initialValue":{"baseExpression":{"id":17705,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17618,"src":"7913:17:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":17707,"indexExpression":{"id":17706,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17698,"src":"7931:10:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7913:29:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"7879:63:72"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17709,"name":"existingRegistryAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17704,"src":"7956:23:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":17712,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7991:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17711,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7983:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17710,"name":"address","nodeType":"ElementaryTypeName","src":"7983:7:72","typeDescriptions":{}}},"id":17713,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7983:10:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7956:37:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17728,"nodeType":"IfStatement","src":"7952:197:72","trueBody":{"id":17727,"nodeType":"Block","src":"7995:154:72","statements":[{"expression":{"id":17719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17715,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17682,"src":"8009:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":17716,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17623,"src":"8016:13:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17718,"indexExpression":{"id":17717,"name":"existingRegistryAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17704,"src":"8030:23:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8016:38:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"src":"8009:45:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17720,"nodeType":"ExpressionStatement","src":"8009:45:72"},{"errorCall":{"arguments":[{"expression":{"id":17722,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17682,"src":"8106:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17723,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8111:12:72","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":47,"src":"8106:17:72","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":17724,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17650,"src":"8125:12:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17721,"name":"ContractNameAlreadyRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":100,"src":"8076:29:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_ContractType_$43_$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (enum ContractType,string memory) pure returns (error)"}},"id":17725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8076:62:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17726,"nodeType":"RevertStatement","src":"8069:69:72"}]}},{"assignments":[17730],"declarations":[{"constant":false,"id":17730,"mutability":"mutable","name":"existingAliasAddress","nameLocation":"8222:20:72","nodeType":"VariableDeclaration","scope":17770,"src":"8214:28:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17729,"name":"address","nodeType":"ElementaryTypeName","src":"8214:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17734,"initialValue":{"baseExpression":{"id":17731,"name":"_contractAliases","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17627,"src":"8245:16:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":17733,"indexExpression":{"id":17732,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17698,"src":"8262:10:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8245:28:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8214:59:72"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17735,"name":"existingAliasAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17730,"src":"8287:20:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":17738,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8319:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17737,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8311:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17736,"name":"address","nodeType":"ElementaryTypeName","src":"8311:7:72","typeDescriptions":{}}},"id":17739,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8311:10:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8287:34:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17747,"nodeType":"IfStatement","src":"8283:132:72","trueBody":{"id":17746,"nodeType":"Block","src":"8323:92:72","statements":[{"errorCall":{"arguments":[{"id":17742,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17650,"src":"8369:12:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":17743,"name":"existingAliasAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17730,"src":"8383:20:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17741,"name":"ContractNameInUseAsAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":107,"src":"8344:24:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$_t_address_$returns$_t_error_$","typeString":"function (string memory,address) pure returns (error)"}},"id":17744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8344:60:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17745,"nodeType":"RevertStatement","src":"8337:67:72"}]}},{"expression":{"id":17752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17748,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17618,"src":"8494:17:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":17750,"indexExpression":{"id":17749,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17698,"src":"8512:10:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8494:29:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17751,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17652,"src":"8526:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8494:47:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":17753,"nodeType":"ExpressionStatement","src":"8494:47:72"},{"expression":{"id":17762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17754,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17623,"src":"8695:13:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17756,"indexExpression":{"id":17755,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17652,"src":"8709:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8695:30:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17758,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17648,"src":"8769:12:72","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"hexValue":"74727565","id":17759,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8809:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"74727565","id":17760,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8837:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":17757,"name":"ContractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52,"src":"8728:12:72","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ContractInfo_$52_storage_ptr_$","typeString":"type(struct IBalancerContractRegistry.ContractInfo storage pointer)"}},"id":17761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["8755:12:72","8795:12:72","8827:8:72"],"names":["contractType","isRegistered","isActive"],"nodeType":"FunctionCall","src":"8728:124:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"src":"8695:157:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"id":17763,"nodeType":"ExpressionStatement","src":"8695:157:72"},{"eventCall":{"arguments":[{"id":17765,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17648,"src":"8895:12:72","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":17766,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17650,"src":"8909:12:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":17767,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17652,"src":"8923:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17764,"name":"BalancerContractRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62,"src":"8868:26:72","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_enum$_ContractType_$43_$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (enum ContractType,string memory,address)"}},"id":17768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8868:71:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17769,"nodeType":"EmitStatement","src":"8863:76:72"}]},"documentation":{"id":17645,"nodeType":"StructuredDocumentation","src":"7038:41:72","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"e0376ab4","id":17771,"implemented":true,"kind":"function","modifiers":[{"id":17655,"kind":"modifierInvocation","modifierName":{"id":17654,"name":"authenticate","nameLocations":["7237:12:72"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"7237:12:72"},"nodeType":"ModifierInvocation","src":"7237:12:72"}],"name":"registerBalancerContract","nameLocation":"7093:24:72","nodeType":"FunctionDefinition","parameters":{"id":17653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17648,"mutability":"mutable","name":"contractType","nameLocation":"7140:12:72","nodeType":"VariableDeclaration","scope":17771,"src":"7127:25:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":17647,"nodeType":"UserDefinedTypeName","pathNode":{"id":17646,"name":"ContractType","nameLocations":["7127:12:72"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"7127:12:72"},"referencedDeclaration":43,"src":"7127:12:72","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":17650,"mutability":"mutable","name":"contractName","nameLocation":"7176:12:72","nodeType":"VariableDeclaration","scope":17771,"src":"7162:26:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17649,"name":"string","nodeType":"ElementaryTypeName","src":"7162:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":17652,"mutability":"mutable","name":"contractAddress","nameLocation":"7206:15:72","nodeType":"VariableDeclaration","scope":17771,"src":"7198:23:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17651,"name":"address","nodeType":"ElementaryTypeName","src":"7198:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7117:110:72"},"returnParameters":{"id":17656,"nodeType":"ParameterList","parameters":[],"src":"7250:0:72"},"scope":18161,"src":"7084:1862:72","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[156],"body":{"id":17850,"nodeType":"Block","src":"9084:851:72","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":17781,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17774,"src":"9104:12:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17780,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9098:5:72","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":17779,"name":"bytes","nodeType":"ElementaryTypeName","src":"9098:5:72","typeDescriptions":{}}},"id":17782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9098:19:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":17783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9118:6:72","memberName":"length","nodeType":"MemberAccess","src":"9098:26:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17784,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9128:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9098:31:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17790,"nodeType":"IfStatement","src":"9094:90:72","trueBody":{"id":17789,"nodeType":"Block","src":"9131:53:72","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17786,"name":"InvalidContractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":136,"src":"9152:19:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9152:21:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17788,"nodeType":"RevertStatement","src":"9145:28:72"}]}},{"assignments":[17792],"declarations":[{"constant":false,"id":17792,"mutability":"mutable","name":"contractId","nameLocation":"9243:10:72","nodeType":"VariableDeclaration","scope":17850,"src":"9235:18:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17791,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9235:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":17796,"initialValue":{"arguments":[{"id":17794,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17774,"src":"9271:12:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17793,"name":"_getContractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18160,"src":"9256:14:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":17795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9256:28:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9235:49:72"},{"assignments":[17798],"declarations":[{"constant":false,"id":17798,"mutability":"mutable","name":"contractAddress","nameLocation":"9302:15:72","nodeType":"VariableDeclaration","scope":17850,"src":"9294:23:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17797,"name":"address","nodeType":"ElementaryTypeName","src":"9294:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17802,"initialValue":{"baseExpression":{"id":17799,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17618,"src":"9320:17:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":17801,"indexExpression":{"id":17800,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17792,"src":"9338:10:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9320:29:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"9294:55:72"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17803,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17798,"src":"9364:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":17806,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9391:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17805,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9383:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17804,"name":"address","nodeType":"ElementaryTypeName","src":"9383:7:72","typeDescriptions":{}}},"id":17807,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9383:10:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9364:29:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17814,"nodeType":"IfStatement","src":"9360:106:72","trueBody":{"id":17813,"nodeType":"Block","src":"9395:71:72","statements":[{"errorCall":{"arguments":[{"id":17810,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17774,"src":"9442:12:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17809,"name":"ContractNameNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":120,"src":"9416:25:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":17811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9416:39:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17812,"nodeType":"RevertStatement","src":"9409:46:72"}]}},{"assignments":[17817],"declarations":[{"constant":false,"id":17817,"mutability":"mutable","name":"info","nameLocation":"9496:4:72","nodeType":"VariableDeclaration","scope":17850,"src":"9476:24:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":17816,"nodeType":"UserDefinedTypeName","pathNode":{"id":17815,"name":"ContractInfo","nameLocations":["9476:12:72"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"9476:12:72"},"referencedDeclaration":52,"src":"9476:12:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":17821,"initialValue":{"baseExpression":{"id":17818,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17623,"src":"9503:13:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17820,"indexExpression":{"id":17819,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17798,"src":"9517:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9503:30:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"9476:57:72"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17822,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17817,"src":"9633:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17823,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9638:12:72","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":49,"src":"9633:17:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":17824,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9654:5:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"9633:26:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17832,"nodeType":"IfStatement","src":"9629:112:72","trueBody":{"id":17831,"nodeType":"Block","src":"9661:80:72","statements":[{"errorCall":{"arguments":[{"id":17827,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17774,"src":"9700:12:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":17828,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17798,"src":"9714:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17826,"name":"InconsistentState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17634,"src":"9682:17:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$_t_address_$returns$_t_error_$","typeString":"function (string memory,address) pure returns (error)"}},"id":17829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9682:48:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17830,"nodeType":"RevertStatement","src":"9675:55:72"}]}},{"expression":{"id":17836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"9751:36:72","subExpression":{"baseExpression":{"id":17833,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17618,"src":"9758:17:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":17835,"indexExpression":{"id":17834,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17792,"src":"9776:10:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9758:29:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17837,"nodeType":"ExpressionStatement","src":"9751:36:72"},{"expression":{"id":17841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"9797:37:72","subExpression":{"baseExpression":{"id":17838,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17623,"src":"9804:13:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17840,"indexExpression":{"id":17839,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17798,"src":"9818:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9804:30:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17842,"nodeType":"ExpressionStatement","src":"9797:37:72"},{"eventCall":{"arguments":[{"expression":{"id":17844,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17817,"src":"9879:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17845,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9884:12:72","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":47,"src":"9879:17:72","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":17846,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17774,"src":"9898:12:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":17847,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17798,"src":"9912:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":17843,"name":"BalancerContractDeregistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":72,"src":"9850:28:72","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_enum$_ContractType_$43_$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (enum ContractType,string memory,address)"}},"id":17848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9850:78:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17849,"nodeType":"EmitStatement","src":"9845:83:72"}]},"documentation":{"id":17772,"nodeType":"StructuredDocumentation","src":"8952:41:72","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"c7f90793","id":17851,"implemented":true,"kind":"function","modifiers":[{"id":17777,"kind":"modifierInvocation","modifierName":{"id":17776,"name":"authenticate","nameLocations":["9071:12:72"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"9071:12:72"},"nodeType":"ModifierInvocation","src":"9071:12:72"}],"name":"deregisterBalancerContract","nameLocation":"9007:26:72","nodeType":"FunctionDefinition","parameters":{"id":17775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17774,"mutability":"mutable","name":"contractName","nameLocation":"9048:12:72","nodeType":"VariableDeclaration","scope":17851,"src":"9034:26:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17773,"name":"string","nodeType":"ElementaryTypeName","src":"9034:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"9033:28:72"},"returnParameters":{"id":17778,"nodeType":"ParameterList","parameters":[],"src":"9084:0:72"},"scope":18161,"src":"8998:937:72","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[162],"body":{"id":17913,"nodeType":"Block","src":"10069:949:72","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17859,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17854,"src":"10083:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":17862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10110:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17861,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10102:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17860,"name":"address","nodeType":"ElementaryTypeName","src":"10102:7:72","typeDescriptions":{}}},"id":17863,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10102:10:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10083:29:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17869,"nodeType":"IfStatement","src":"10079:88:72","trueBody":{"id":17868,"nodeType":"Block","src":"10114:53:72","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17865,"name":"ZeroContractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133,"src":"10135:19:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10135:21:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17867,"nodeType":"RevertStatement","src":"10128:28:72"}]}},{"assignments":[17872],"declarations":[{"constant":false,"id":17872,"mutability":"mutable","name":"info","nameLocation":"10197:4:72","nodeType":"VariableDeclaration","scope":17913,"src":"10177:24:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":17871,"nodeType":"UserDefinedTypeName","pathNode":{"id":17870,"name":"ContractInfo","nameLocations":["10177:12:72"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"10177:12:72"},"referencedDeclaration":52,"src":"10177:12:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":17876,"initialValue":{"baseExpression":{"id":17873,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17623,"src":"10204:13:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17875,"indexExpression":{"id":17874,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17854,"src":"10218:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10204:30:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"10177:57:72"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17877,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17872,"src":"10304:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17878,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10309:12:72","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":49,"src":"10304:17:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":17879,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10325:5:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10304:26:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17886,"nodeType":"IfStatement","src":"10300:109:72","trueBody":{"id":17885,"nodeType":"Block","src":"10332:77:72","statements":[{"errorCall":{"arguments":[{"id":17882,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17854,"src":"10382:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17881,"name":"ContractAddressNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":125,"src":"10353:28:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":17883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10353:45:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17884,"nodeType":"RevertStatement","src":"10346:52:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17887,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17872,"src":"10503:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17888,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10508:8:72","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":51,"src":"10503:13:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":17889,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10520:5:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10503:22:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17896,"nodeType":"IfStatement","src":"10499:102:72","trueBody":{"id":17895,"nodeType":"Block","src":"10527:74:72","statements":[{"errorCall":{"arguments":[{"id":17892,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17854,"src":"10574:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17891,"name":"ContractAlreadyDeprecated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":130,"src":"10548:25:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":17893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10548:42:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17894,"nodeType":"RevertStatement","src":"10541:49:72"}]}},{"expression":{"id":17901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17897,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17872,"src":"10884:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17899,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10889:8:72","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":51,"src":"10884:13:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":17900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10900:5:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10884:21:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17902,"nodeType":"ExpressionStatement","src":"10884:21:72"},{"expression":{"id":17907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17903,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17623,"src":"10915:13:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17905,"indexExpression":{"id":17904,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17854,"src":"10929:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10915:30:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17906,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17872,"src":"10948:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"src":"10915:37:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"id":17908,"nodeType":"ExpressionStatement","src":"10915:37:72"},{"eventCall":{"arguments":[{"id":17910,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17854,"src":"10995:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17909,"name":"BalancerContractDeprecated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":77,"src":"10968:26:72","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":17911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10968:43:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17912,"nodeType":"EmitStatement","src":"10963:48:72"}]},"documentation":{"id":17852,"nodeType":"StructuredDocumentation","src":"9941:41:72","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"44969a9c","id":17914,"implemented":true,"kind":"function","modifiers":[{"id":17857,"kind":"modifierInvocation","modifierName":{"id":17856,"name":"authenticate","nameLocations":["10056:12:72"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"10056:12:72"},"nodeType":"ModifierInvocation","src":"10056:12:72"}],"name":"deprecateBalancerContract","nameLocation":"9996:25:72","nodeType":"FunctionDefinition","parameters":{"id":17855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17854,"mutability":"mutable","name":"contractAddress","nameLocation":"10030:15:72","nodeType":"VariableDeclaration","scope":17914,"src":"10022:23:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17853,"name":"address","nodeType":"ElementaryTypeName","src":"10022:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10021:25:72"},"returnParameters":{"id":17858,"nodeType":"ParameterList","parameters":[],"src":"10069:0:72"},"scope":18161,"src":"9987:1031:72","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[170],"body":{"id":18007,"nodeType":"Block","src":"11210:1370:72","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":17926,"name":"contractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17917,"src":"11269:13:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11263:5:72","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":17924,"name":"bytes","nodeType":"ElementaryTypeName","src":"11263:5:72","typeDescriptions":{}}},"id":17927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11263:20:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":17928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11284:6:72","memberName":"length","nodeType":"MemberAccess","src":"11263:27:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17929,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11294:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11263:32:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17935,"nodeType":"IfStatement","src":"11259:92:72","trueBody":{"id":17934,"nodeType":"Block","src":"11297:54:72","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17931,"name":"InvalidContractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":139,"src":"11318:20:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11318:22:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17933,"nodeType":"RevertStatement","src":"11311:29:72"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17936,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17919,"src":"11365:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":17939,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11392:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17938,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11384:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17937,"name":"address","nodeType":"ElementaryTypeName","src":"11384:7:72","typeDescriptions":{}}},"id":17940,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11384:10:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11365:29:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17946,"nodeType":"IfStatement","src":"11361:88:72","trueBody":{"id":17945,"nodeType":"Block","src":"11396:53:72","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17942,"name":"ZeroContractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133,"src":"11417:19:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11417:21:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17944,"nodeType":"RevertStatement","src":"11410:28:72"}]}},{"assignments":[17949],"declarations":[{"constant":false,"id":17949,"mutability":"mutable","name":"info","nameLocation":"11533:4:72","nodeType":"VariableDeclaration","scope":18007,"src":"11513:24:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":17948,"nodeType":"UserDefinedTypeName","pathNode":{"id":17947,"name":"ContractInfo","nameLocations":["11513:12:72"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"11513:12:72"},"referencedDeclaration":52,"src":"11513:12:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":17953,"initialValue":{"baseExpression":{"id":17950,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17623,"src":"11540:13:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17952,"indexExpression":{"id":17951,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17919,"src":"11554:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11540:30:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"11513:57:72"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17954,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17949,"src":"11584:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17955,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11589:12:72","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":49,"src":"11584:17:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":17956,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11605:5:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"11584:26:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17963,"nodeType":"IfStatement","src":"11580:109:72","trueBody":{"id":17962,"nodeType":"Block","src":"11612:77:72","statements":[{"errorCall":{"arguments":[{"id":17959,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17919,"src":"11662:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17958,"name":"ContractAddressNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":125,"src":"11633:28:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":17960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11633:45:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17961,"nodeType":"RevertStatement","src":"11626:52:72"}]}},{"assignments":[17965],"declarations":[{"constant":false,"id":17965,"mutability":"mutable","name":"contractId","nameLocation":"12061:10:72","nodeType":"VariableDeclaration","scope":18007,"src":"12053:18:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":17964,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12053:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":17969,"initialValue":{"arguments":[{"id":17967,"name":"contractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17917,"src":"12089:13:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17966,"name":"_getContractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18160,"src":"12074:14:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":17968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12074:29:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"12053:50:72"},{"assignments":[17971],"declarations":[{"constant":false,"id":17971,"mutability":"mutable","name":"existingRegistryAddress","nameLocation":"12121:23:72","nodeType":"VariableDeclaration","scope":18007,"src":"12113:31:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17970,"name":"address","nodeType":"ElementaryTypeName","src":"12113:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17975,"initialValue":{"baseExpression":{"id":17972,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17618,"src":"12147:17:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":17974,"indexExpression":{"id":17973,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17965,"src":"12165:10:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12147:29:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"12113:63:72"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17976,"name":"existingRegistryAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17971,"src":"12190:23:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":17979,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12225:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17978,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12217:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17977,"name":"address","nodeType":"ElementaryTypeName","src":"12217:7:72","typeDescriptions":{}}},"id":17980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12217:10:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12190:37:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17995,"nodeType":"IfStatement","src":"12186:193:72","trueBody":{"id":17994,"nodeType":"Block","src":"12229:150:72","statements":[{"expression":{"id":17986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17982,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17949,"src":"12243:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":17983,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17623,"src":"12250:13:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":17985,"indexExpression":{"id":17984,"name":"existingRegistryAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17971,"src":"12264:23:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12250:38:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"src":"12243:45:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17987,"nodeType":"ExpressionStatement","src":"12243:45:72"},{"errorCall":{"arguments":[{"expression":{"id":17989,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17949,"src":"12335:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":17990,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12340:12:72","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":47,"src":"12335:17:72","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":17991,"name":"contractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17917,"src":"12354:13:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17988,"name":"ContractAliasInUseAsName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":115,"src":"12310:24:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_ContractType_$43_$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (enum ContractType,string memory) pure returns (error)"}},"id":17992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12310:58:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17993,"nodeType":"RevertStatement","src":"12303:65:72"}]}},{"expression":{"id":18000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17996,"name":"_contractAliases","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17627,"src":"12459:16:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":17998,"indexExpression":{"id":17997,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17965,"src":"12476:10:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12459:28:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17999,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17919,"src":"12490:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12459:46:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18001,"nodeType":"ExpressionStatement","src":"12459:46:72"},{"eventCall":{"arguments":[{"id":18003,"name":"contractAlias","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17917,"src":"12542:13:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":18004,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17919,"src":"12557:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18002,"name":"ContractAliasUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":84,"src":"12521:20:72","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (string memory,address)"}},"id":18005,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12521:52:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18006,"nodeType":"EmitStatement","src":"12516:57:72"}]},"documentation":{"id":17915,"nodeType":"StructuredDocumentation","src":"11024:41:72","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"2967af96","id":18008,"implemented":true,"kind":"function","modifiers":[{"id":17922,"kind":"modifierInvocation","modifierName":{"id":17921,"name":"authenticate","nameLocations":["11197:12:72"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"11197:12:72"},"nodeType":"ModifierInvocation","src":"11197:12:72"}],"name":"addOrUpdateBalancerContractAlias","nameLocation":"11079:32:72","nodeType":"FunctionDefinition","parameters":{"id":17920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17917,"mutability":"mutable","name":"contractAlias","nameLocation":"11135:13:72","nodeType":"VariableDeclaration","scope":18008,"src":"11121:27:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":17916,"name":"string","nodeType":"ElementaryTypeName","src":"11121:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":17919,"mutability":"mutable","name":"contractAddress","nameLocation":"11166:15:72","nodeType":"VariableDeclaration","scope":18008,"src":"11158:23:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17918,"name":"address","nodeType":"ElementaryTypeName","src":"11158:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11111:76:72"},"returnParameters":{"id":17923,"nodeType":"ParameterList","parameters":[],"src":"11210:0:72"},"scope":18161,"src":"11070:1510:72","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[181],"body":{"id":18024,"nodeType":"Block","src":"12747:80:72","statements":[{"expression":{"arguments":[{"id":18020,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18012,"src":"12790:12:72","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":18021,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18014,"src":"12804:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18019,"name":"_isActiveBalancerContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18051,"src":"12764:25:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_enum$_ContractType_$43_$_t_address_$returns$_t_bool_$","typeString":"function (enum ContractType,address) view returns (bool)"}},"id":18022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12764:56:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":18018,"id":18023,"nodeType":"Return","src":"12757:63:72"}]},"documentation":{"id":18009,"nodeType":"StructuredDocumentation","src":"12586:41:72","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"ae2733a4","id":18025,"implemented":true,"kind":"function","modifiers":[],"name":"isActiveBalancerContract","nameLocation":"12641:24:72","nodeType":"FunctionDefinition","parameters":{"id":18015,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18012,"mutability":"mutable","name":"contractType","nameLocation":"12679:12:72","nodeType":"VariableDeclaration","scope":18025,"src":"12666:25:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":18011,"nodeType":"UserDefinedTypeName","pathNode":{"id":18010,"name":"ContractType","nameLocations":["12666:12:72"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"12666:12:72"},"referencedDeclaration":43,"src":"12666:12:72","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":18014,"mutability":"mutable","name":"contractAddress","nameLocation":"12701:15:72","nodeType":"VariableDeclaration","scope":18025,"src":"12693:23:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18013,"name":"address","nodeType":"ElementaryTypeName","src":"12693:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12665:52:72"},"returnParameters":{"id":18018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18017,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18025,"src":"12741:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18016,"name":"bool","nodeType":"ElementaryTypeName","src":"12741:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12740:6:72"},"scope":18161,"src":"12632:195:72","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":18050,"nodeType":"Block","src":"12971:235:72","statements":[{"assignments":[18037],"declarations":[{"constant":false,"id":18037,"mutability":"mutable","name":"info","nameLocation":"13001:4:72","nodeType":"VariableDeclaration","scope":18050,"src":"12981:24:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":18036,"nodeType":"UserDefinedTypeName","pathNode":{"id":18035,"name":"ContractInfo","nameLocations":["12981:12:72"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"12981:12:72"},"referencedDeclaration":52,"src":"12981:12:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":18041,"initialValue":{"baseExpression":{"id":18038,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17623,"src":"13008:13:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":18040,"indexExpression":{"id":18039,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18030,"src":"13022:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13008:30:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"12981:57:72"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18042,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18037,"src":"13149:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":18043,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13154:8:72","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":51,"src":"13149:13:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"id":18047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18044,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18037,"src":"13166:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":18045,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13171:12:72","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":47,"src":"13166:17:72","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":18046,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18028,"src":"13187:12:72","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"src":"13166:33:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13149:50:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":18034,"id":18049,"nodeType":"Return","src":"13142:57:72"}]},"id":18051,"implemented":true,"kind":"function","modifiers":[],"name":"_isActiveBalancerContract","nameLocation":"12842:25:72","nodeType":"FunctionDefinition","parameters":{"id":18031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18028,"mutability":"mutable","name":"contractType","nameLocation":"12890:12:72","nodeType":"VariableDeclaration","scope":18051,"src":"12877:25:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":18027,"nodeType":"UserDefinedTypeName","pathNode":{"id":18026,"name":"ContractType","nameLocations":["12877:12:72"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"12877:12:72"},"referencedDeclaration":43,"src":"12877:12:72","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":18030,"mutability":"mutable","name":"contractAddress","nameLocation":"12920:15:72","nodeType":"VariableDeclaration","scope":18051,"src":"12912:23:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18029,"name":"address","nodeType":"ElementaryTypeName","src":"12912:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12867:74:72"},"returnParameters":{"id":18034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18033,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18051,"src":"12965:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18032,"name":"bool","nodeType":"ElementaryTypeName","src":"12965:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12964:6:72"},"scope":18161,"src":"12833:373:72","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[194],"body":{"id":18115,"nodeType":"Block","src":"13427:833:72","statements":[{"assignments":[18065],"declarations":[{"constant":false,"id":18065,"mutability":"mutable","name":"contractId","nameLocation":"13445:10:72","nodeType":"VariableDeclaration","scope":18115,"src":"13437:18:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18064,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13437:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":18069,"initialValue":{"arguments":[{"id":18067,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18057,"src":"13473:12:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":18066,"name":"_getContractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18160,"src":"13458:14:72","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":18068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13458:28:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13437:49:72"},{"assignments":[18071],"declarations":[{"constant":false,"id":18071,"mutability":"mutable","name":"registeredAddress","nameLocation":"13504:17:72","nodeType":"VariableDeclaration","scope":18115,"src":"13496:25:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18070,"name":"address","nodeType":"ElementaryTypeName","src":"13496:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":18075,"initialValue":{"baseExpression":{"id":18072,"name":"_contractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17618,"src":"13524:17:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":18074,"indexExpression":{"id":18073,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18065,"src":"13542:10:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13524:29:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"13496:57:72"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18076,"name":"registeredAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18071,"src":"13641:17:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":18079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13670:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":18078,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13662:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18077,"name":"address","nodeType":"ElementaryTypeName","src":"13662:7:72","typeDescriptions":{}}},"id":18080,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13662:10:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13641:31:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18089,"nodeType":"IfStatement","src":"13637:110:72","trueBody":{"id":18088,"nodeType":"Block","src":"13674:73:72","statements":[{"expression":{"id":18086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18082,"name":"registeredAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18071,"src":"13688:17:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":18083,"name":"_contractAliases","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17627,"src":"13708:16:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":18085,"indexExpression":{"id":18084,"name":"contractId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18065,"src":"13725:10:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13708:28:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13688:48:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18087,"nodeType":"ExpressionStatement","src":"13688:48:72"}]}},{"assignments":[18092],"declarations":[{"constant":false,"id":18092,"mutability":"mutable","name":"info","nameLocation":"13777:4:72","nodeType":"VariableDeclaration","scope":18115,"src":"13757:24:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":18091,"nodeType":"UserDefinedTypeName","pathNode":{"id":18090,"name":"ContractInfo","nameLocations":["13757:12:72"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"13757:12:72"},"referencedDeclaration":52,"src":"13757:12:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"id":18096,"initialValue":{"baseExpression":{"id":18093,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17623,"src":"13784:13:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":18095,"indexExpression":{"id":18094,"name":"registeredAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18071,"src":"13798:17:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13784:32:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"13757:59:72"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18097,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18092,"src":"14100:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":18098,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14105:12:72","memberName":"isRegistered","nodeType":"MemberAccess","referencedDeclaration":49,"src":"14100:17:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"id":18102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18099,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18092,"src":"14121:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":18100,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14126:12:72","memberName":"contractType","nodeType":"MemberAccess","referencedDeclaration":47,"src":"14121:17:72","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":18101,"name":"contractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18055,"src":"14142:12:72","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"src":"14121:33:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14100:54:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18114,"nodeType":"IfStatement","src":"14096:158:72","trueBody":{"id":18113,"nodeType":"Block","src":"14156:98:72","statements":[{"expression":{"id":18106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18104,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18060,"src":"14170:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18105,"name":"registeredAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18071,"src":"14188:17:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14170:35:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18107,"nodeType":"ExpressionStatement","src":"14170:35:72"},{"expression":{"id":18111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18108,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18062,"src":"14219:8:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":18109,"name":"info","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18092,"src":"14230:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo memory"}},"id":18110,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14235:8:72","memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":51,"src":"14230:13:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14219:24:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18112,"nodeType":"ExpressionStatement","src":"14219:24:72"}]}}]},"documentation":{"id":18052,"nodeType":"StructuredDocumentation","src":"13212:41:72","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"41d8c0bb","id":18116,"implemented":true,"kind":"function","modifiers":[],"name":"getBalancerContract","nameLocation":"13267:19:72","nodeType":"FunctionDefinition","parameters":{"id":18058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18055,"mutability":"mutable","name":"contractType","nameLocation":"13309:12:72","nodeType":"VariableDeclaration","scope":18116,"src":"13296:25:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},"typeName":{"id":18054,"nodeType":"UserDefinedTypeName","pathNode":{"id":18053,"name":"ContractType","nameLocations":["13296:12:72"],"nodeType":"IdentifierPath","referencedDeclaration":43,"src":"13296:12:72"},"referencedDeclaration":43,"src":"13296:12:72","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":18057,"mutability":"mutable","name":"contractName","nameLocation":"13345:12:72","nodeType":"VariableDeclaration","scope":18116,"src":"13331:26:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":18056,"name":"string","nodeType":"ElementaryTypeName","src":"13331:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"13286:77:72"},"returnParameters":{"id":18063,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18060,"mutability":"mutable","name":"contractAddress","nameLocation":"13395:15:72","nodeType":"VariableDeclaration","scope":18116,"src":"13387:23:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18059,"name":"address","nodeType":"ElementaryTypeName","src":"13387:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18062,"mutability":"mutable","name":"isActive","nameLocation":"13417:8:72","nodeType":"VariableDeclaration","scope":18116,"src":"13412:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18061,"name":"bool","nodeType":"ElementaryTypeName","src":"13412:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13386:40:72"},"scope":18161,"src":"13258:1002:72","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[203],"body":{"id":18129,"nodeType":"Block","src":"14419:54:72","statements":[{"expression":{"baseExpression":{"id":18125,"name":"_contractInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17623,"src":"14436:13:72","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ContractInfo_$52_storage_$","typeString":"mapping(address => struct IBalancerContractRegistry.ContractInfo storage ref)"}},"id":18127,"indexExpression":{"id":18126,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18119,"src":"14450:15:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14436:30:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage","typeString":"struct IBalancerContractRegistry.ContractInfo storage ref"}},"functionReturnParameters":18124,"id":18128,"nodeType":"Return","src":"14429:37:72"}]},"documentation":{"id":18117,"nodeType":"StructuredDocumentation","src":"14266:41:72","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"8554c327","id":18130,"implemented":true,"kind":"function","modifiers":[],"name":"getBalancerContractInfo","nameLocation":"14321:23:72","nodeType":"FunctionDefinition","parameters":{"id":18120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18119,"mutability":"mutable","name":"contractAddress","nameLocation":"14353:15:72","nodeType":"VariableDeclaration","scope":18130,"src":"14345:23:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18118,"name":"address","nodeType":"ElementaryTypeName","src":"14345:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14344:25:72"},"returnParameters":{"id":18124,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18123,"mutability":"mutable","name":"info","nameLocation":"14413:4:72","nodeType":"VariableDeclaration","scope":18130,"src":"14393:24:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":18122,"nodeType":"UserDefinedTypeName","pathNode":{"id":18121,"name":"ContractInfo","nameLocations":["14393:12:72"],"nodeType":"IdentifierPath","referencedDeclaration":52,"src":"14393:12:72"},"referencedDeclaration":52,"src":"14393:12:72","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$52_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"src":"14392:26:72"},"scope":18161,"src":"14312:161:72","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[211],"body":{"id":18144,"nodeType":"Block","src":"14595:78:72","statements":[{"expression":{"arguments":[{"expression":{"id":18139,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43,"src":"14638:12:72","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ContractType_$43_$","typeString":"type(enum ContractType)"}},"id":18140,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14651:6:72","memberName":"ROUTER","nodeType":"MemberAccess","referencedDeclaration":40,"src":"14638:19:72","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":18141,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18133,"src":"14659:6:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18138,"name":"_isActiveBalancerContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18051,"src":"14612:25:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_enum$_ContractType_$43_$_t_address_$returns$_t_bool_$","typeString":"function (enum ContractType,address) view returns (bool)"}},"id":18142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14612:54:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":18137,"id":18143,"nodeType":"Return","src":"14605:61:72"}]},"documentation":{"id":18131,"nodeType":"StructuredDocumentation","src":"14479:41:72","text":"@inheritdoc IBalancerContractRegistry"},"functionSelector":"264e97e0","id":18145,"implemented":true,"kind":"function","modifiers":[],"name":"isTrustedRouter","nameLocation":"14534:15:72","nodeType":"FunctionDefinition","parameters":{"id":18134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18133,"mutability":"mutable","name":"router","nameLocation":"14558:6:72","nodeType":"VariableDeclaration","scope":18145,"src":"14550:14:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18132,"name":"address","nodeType":"ElementaryTypeName","src":"14550:7:72","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14549:16:72"},"returnParameters":{"id":18137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18136,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18145,"src":"14589:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18135,"name":"bool","nodeType":"ElementaryTypeName","src":"14589:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14588:6:72"},"scope":18161,"src":"14525:148:72","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":18159,"nodeType":"Block","src":"14763:65:72","statements":[{"expression":{"arguments":[{"arguments":[{"id":18155,"name":"contractName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18147,"src":"14807:12:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":18153,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"14790:3:72","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18154,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14794:12:72","memberName":"encodePacked","nodeType":"MemberAccess","src":"14790:16:72","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":18156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14790:30:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":18152,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"14780:9:72","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":18157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14780:41:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":18151,"id":18158,"nodeType":"Return","src":"14773:48:72"}]},"id":18160,"implemented":true,"kind":"function","modifiers":[],"name":"_getContractId","nameLocation":"14688:14:72","nodeType":"FunctionDefinition","parameters":{"id":18148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18147,"mutability":"mutable","name":"contractName","nameLocation":"14717:12:72","nodeType":"VariableDeclaration","scope":18160,"src":"14703:26:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":18146,"name":"string","nodeType":"ElementaryTypeName","src":"14703:6:72","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"14702:28:72"},"returnParameters":{"id":18151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18150,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18160,"src":"14754:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18149,"name":"bytes32","nodeType":"ElementaryTypeName","src":"14754:7:72","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"14753:9:72"},"scope":18161,"src":"14679:149:72","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":18162,"src":"2741:12089:72","usedErrors":[5,92,100,107,115,120,125,130,133,136,139,7337,17634],"usedEvents":[62,72,77,84]}],"src":"46:14785:72"},"id":72},"contracts/BalancerFeeBurner.sol":{"ast":{"absolutePath":"contracts/BalancerFeeBurner.sol","exportedSymbols":{"AddLiquidityKind":[4223],"AddLiquidityParams":[4239],"AfterSwapParams":[4217],"BalancerFeeBurner":[18509],"BufferWrapOrUnwrapParams":[4278],"FEE_BITLENGTH":[4281],"FEE_SCALING_FACTOR":[4284],"FeeBurnerAuthentication":[19827],"HookFlags":[4043],"HooksConfig":[4067],"IBalancerFeeBurner":[276],"IERC20":[10558],"IERC4626":[9828],"IProtocolFeeBurner":[948],"IProtocolFeeSweeper":[1137],"IRateProvider":[24],"IVault":[2527],"IVaultErrors":[3184],"LiquidityManagement":[3996],"MAX_FEE_PERCENTAGE":[4287],"PoolConfig":[4021],"PoolConfigBits":[3998],"PoolData":[4145],"PoolRoleAccounts":[4093],"PoolSwapParams":[4188],"ReentrancyGuardTransient":[6994],"RemoveLiquidityKind":[4244],"RemoveLiquidityParams":[4260],"Rounding":[4148],"SafeERC20":[11048],"SwapKind":[4151],"SwapState":[4077],"TokenConfig":[4110],"TokenInfo":[4120],"TokenType":[4097],"VaultGuard":[9320],"VaultState":[4085],"VaultSwapParams":[4170],"WrappingDirection":[4263]},"id":18510,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":18163,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:73"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":18165,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18510,"sourceUnit":11049,"src":"72:84:73","symbolAliases":[{"foreign":{"id":18164,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11048,"src":"81:9:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":18167,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18510,"sourceUnit":10559,"src":"157:72:73","symbolAliases":[{"foreign":{"id":18166,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"166:6:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","id":18169,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18510,"sourceUnit":949,"src":"231:116:73","symbolAliases":[{"foreign":{"id":18168,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"240:18:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol","id":18171,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18510,"sourceUnit":277,"src":"348:116:73","symbolAliases":[{"foreign":{"id":18170,"name":"IBalancerFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":276,"src":"357:18:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":18173,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18510,"sourceUnit":1138,"src":"465:118:73","symbolAliases":[{"foreign":{"id":18172,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1137,"src":"474:19:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":18175,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18510,"sourceUnit":3185,"src":"584:93:73","symbolAliases":[{"foreign":{"id":18174,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3184,"src":"593:12:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":18177,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18510,"sourceUnit":2528,"src":"678:81:73","symbolAliases":[{"foreign":{"id":18176,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"687:6:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":18178,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18510,"sourceUnit":4288,"src":"760:69:73","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":18180,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18510,"sourceUnit":6995,"src":"831:132:73","symbolAliases":[{"foreign":{"id":18179,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6994,"src":"844:24:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","file":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","id":18182,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18510,"sourceUnit":9321,"src":"964:78:73","symbolAliases":[{"foreign":{"id":18181,"name":"VaultGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9320,"src":"973:10:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/FeeBurnerAuthentication.sol","file":"./FeeBurnerAuthentication.sol","id":18184,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18510,"sourceUnit":19828,"src":"1044:72:73","symbolAliases":[{"foreign":{"id":18183,"name":"FeeBurnerAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19827,"src":"1053:23:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":18185,"name":"IBalancerFeeBurner","nameLocations":["1148:18:73"],"nodeType":"IdentifierPath","referencedDeclaration":276,"src":"1148:18:73"},"id":18186,"nodeType":"InheritanceSpecifier","src":"1148:18:73"},{"baseName":{"id":18187,"name":"ReentrancyGuardTransient","nameLocations":["1168:24:73"],"nodeType":"IdentifierPath","referencedDeclaration":6994,"src":"1168:24:73"},"id":18188,"nodeType":"InheritanceSpecifier","src":"1168:24:73"},{"baseName":{"id":18189,"name":"VaultGuard","nameLocations":["1194:10:73"],"nodeType":"IdentifierPath","referencedDeclaration":9320,"src":"1194:10:73"},"id":18190,"nodeType":"InheritanceSpecifier","src":"1194:10:73"},{"baseName":{"id":18191,"name":"FeeBurnerAuthentication","nameLocations":["1206:23:73"],"nodeType":"IdentifierPath","referencedDeclaration":19827,"src":"1206:23:73"},"id":18192,"nodeType":"InheritanceSpecifier","src":"1206:23:73"}],"canonicalName":"BalancerFeeBurner","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":18509,"linearizedBaseContracts":[18509,19827,9554,9468,12348,9320,6994,276,948],"name":"BalancerFeeBurner","nameLocation":"1127:17:73","nodeType":"ContractDefinition","nodes":[{"global":false,"id":18196,"libraryName":{"id":18193,"name":"SafeERC20","nameLocations":["1242:9:73"],"nodeType":"IdentifierPath","referencedDeclaration":11048,"src":"1242:9:73"},"nodeType":"UsingForDirective","src":"1236:27:73","typeName":{"id":18195,"nodeType":"UserDefinedTypeName","pathNode":{"id":18194,"name":"IERC20","nameLocations":["1256:6:73"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1256:6:73"},"referencedDeclaration":10558,"src":"1256:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}},{"constant":false,"id":18203,"mutability":"mutable","name":"_burnSteps","nameLocation":"1318:10:73","nodeType":"VariableDeclaration","scope":18509,"src":"1269:59:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_$","typeString":"mapping(contract IERC20 => struct IBalancerFeeBurner.SwapPathStep[])"},"typeName":{"id":18202,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":18198,"nodeType":"UserDefinedTypeName","pathNode":{"id":18197,"name":"IERC20","nameLocations":["1277:6:73"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1277:6:73"},"referencedDeclaration":10558,"src":"1277:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"1269:39:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_$","typeString":"mapping(contract IERC20 => struct IBalancerFeeBurner.SwapPathStep[])"},"valueName":"steps","valueNameLocation":"1302:5:73","valueType":{"baseType":{"id":18200,"nodeType":"UserDefinedTypeName","pathNode":{"id":18199,"name":"SwapPathStep","nameLocations":["1287:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"1287:12:73"},"referencedDeclaration":227,"src":"1287:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"id":18201,"nodeType":"ArrayTypeName","src":"1287:14:73","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"}}},"visibility":"internal"},{"body":{"id":18225,"nodeType":"Block","src":"1531:57:73","statements":[{"expression":{"id":18223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18221,"name":"protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19753,"src":"1541:18:73","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18222,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18209,"src":"1562:19:73","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"src":"1541:40:73","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"id":18224,"nodeType":"ExpressionStatement","src":"1541:40:73"}]},"id":18226,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":18214,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18206,"src":"1465:5:73","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}}],"id":18215,"kind":"baseConstructorSpecifier","modifierName":{"id":18213,"name":"VaultGuard","nameLocations":["1454:10:73"],"nodeType":"IdentifierPath","referencedDeclaration":9320,"src":"1454:10:73"},"nodeType":"ModifierInvocation","src":"1454:17:73"},{"arguments":[{"id":18217,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18209,"src":"1496:19:73","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},{"id":18218,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18211,"src":"1517:12:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":18219,"kind":"baseConstructorSpecifier","modifierName":{"id":18216,"name":"FeeBurnerAuthentication","nameLocations":["1472:23:73"],"nodeType":"IdentifierPath","referencedDeclaration":19827,"src":"1472:23:73"},"nodeType":"ModifierInvocation","src":"1472:58:73"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":18212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18206,"mutability":"mutable","name":"vault","nameLocation":"1363:5:73","nodeType":"VariableDeclaration","scope":18226,"src":"1356:12:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":18205,"nodeType":"UserDefinedTypeName","pathNode":{"id":18204,"name":"IVault","nameLocations":["1356:6:73"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"1356:6:73"},"referencedDeclaration":2527,"src":"1356:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":18209,"mutability":"mutable","name":"_protocolFeeSweeper","nameLocation":"1398:19:73","nodeType":"VariableDeclaration","scope":18226,"src":"1378:39:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":18208,"nodeType":"UserDefinedTypeName","pathNode":{"id":18207,"name":"IProtocolFeeSweeper","nameLocations":["1378:19:73"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"1378:19:73"},"referencedDeclaration":1137,"src":"1378:19:73","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"visibility":"internal"},{"constant":false,"id":18211,"mutability":"mutable","name":"initialOwner","nameLocation":"1435:12:73","nodeType":"VariableDeclaration","scope":18226,"src":"1427:20:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18210,"name":"address","nodeType":"ElementaryTypeName","src":"1427:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1346:107:73"},"returnParameters":{"id":18220,"nodeType":"ParameterList","parameters":[],"src":"1531:0:73"},"scope":18509,"src":"1335:253:73","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[264],"body":{"id":18266,"nodeType":"Block","src":"1735:157:73","statements":[{"expression":{"id":18242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"1745:27:73","subExpression":{"baseExpression":{"id":18239,"name":"_burnSteps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18203,"src":"1752:10:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_$","typeString":"mapping(contract IERC20 => struct IBalancerFeeBurner.SwapPathStep storage ref[] storage ref)"}},"id":18241,"indexExpression":{"id":18240,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18230,"src":"1763:8:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1752:20:73","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage","typeString":"struct IBalancerFeeBurner.SwapPathStep storage ref[] storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18243,"nodeType":"ExpressionStatement","src":"1745:27:73"},{"body":{"id":18264,"nodeType":"Block","src":"1826:60:73","statements":[{"expression":{"arguments":[{"baseExpression":{"id":18259,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18234,"src":"1866:5:73","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep calldata[] calldata"}},"id":18261,"indexExpression":{"id":18260,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18245,"src":"1872:1:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1866:8:73","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_calldata_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SwapPathStep_$227_calldata_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep calldata"}],"expression":{"baseExpression":{"id":18255,"name":"_burnSteps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18203,"src":"1840:10:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_$","typeString":"mapping(contract IERC20 => struct IBalancerFeeBurner.SwapPathStep storage ref[] storage ref)"}},"id":18257,"indexExpression":{"id":18256,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18230,"src":"1851:8:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1840:20:73","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage","typeString":"struct IBalancerFeeBurner.SwapPathStep storage ref[] storage ref"}},"id":18258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1861:4:73","memberName":"push","nodeType":"MemberAccess","src":"1840:25:73","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr_$_t_struct$_SwapPathStep_$227_storage_$returns$__$attached_to$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr_$","typeString":"function (struct IBalancerFeeBurner.SwapPathStep storage ref[] storage pointer,struct IBalancerFeeBurner.SwapPathStep storage ref)"}},"id":18262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1840:35:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18263,"nodeType":"ExpressionStatement","src":"1840:35:73"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18248,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18245,"src":"1803:1:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":18249,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18234,"src":"1807:5:73","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep calldata[] calldata"}},"id":18250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1813:6:73","memberName":"length","nodeType":"MemberAccess","src":"1807:12:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1803:16:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18265,"initializationExpression":{"assignments":[18245],"declarations":[{"constant":false,"id":18245,"mutability":"mutable","name":"i","nameLocation":"1796:1:73","nodeType":"VariableDeclaration","scope":18265,"src":"1788:9:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18244,"name":"uint256","nodeType":"ElementaryTypeName","src":"1788:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18247,"initialValue":{"hexValue":"30","id":18246,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1800:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1788:13:73"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":18253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1821:3:73","subExpression":{"id":18252,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18245,"src":"1821:1:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18254,"nodeType":"ExpressionStatement","src":"1821:3:73"},"nodeType":"ForStatement","src":"1783:103:73"}]},"documentation":{"id":18227,"nodeType":"StructuredDocumentation","src":"1594:34:73","text":"@inheritdoc IBalancerFeeBurner"},"functionSelector":"e3746cb2","id":18267,"implemented":true,"kind":"function","modifiers":[{"id":18237,"kind":"modifierInvocation","modifierName":{"id":18236,"name":"onlyFeeRecipientOrOwner","nameLocations":["1711:23:73"],"nodeType":"IdentifierPath","referencedDeclaration":19796,"src":"1711:23:73"},"nodeType":"ModifierInvocation","src":"1711:23:73"}],"name":"setBurnPath","nameLocation":"1642:11:73","nodeType":"FunctionDefinition","parameters":{"id":18235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18230,"mutability":"mutable","name":"feeToken","nameLocation":"1661:8:73","nodeType":"VariableDeclaration","scope":18267,"src":"1654:15:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":18229,"nodeType":"UserDefinedTypeName","pathNode":{"id":18228,"name":"IERC20","nameLocations":["1654:6:73"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1654:6:73"},"referencedDeclaration":10558,"src":"1654:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18234,"mutability":"mutable","name":"steps","nameLocation":"1695:5:73","nodeType":"VariableDeclaration","scope":18267,"src":"1671:29:73","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"},"typeName":{"baseType":{"id":18232,"nodeType":"UserDefinedTypeName","pathNode":{"id":18231,"name":"SwapPathStep","nameLocations":["1671:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"1671:12:73"},"referencedDeclaration":227,"src":"1671:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"id":18233,"nodeType":"ArrayTypeName","src":"1671:14:73","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"}},"visibility":"internal"}],"src":"1653:48:73"},"returnParameters":{"id":18238,"nodeType":"ParameterList","parameters":[],"src":"1735:0:73"},"scope":18509,"src":"1633:259:73","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[275],"body":{"id":18293,"nodeType":"Block","src":"2025:132:73","statements":[{"expression":{"id":18282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18278,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18276,"src":"2035:5:73","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":18279,"name":"_burnSteps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18203,"src":"2043:10:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_$","typeString":"mapping(contract IERC20 => struct IBalancerFeeBurner.SwapPathStep storage ref[] storage ref)"}},"id":18281,"indexExpression":{"id":18280,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18271,"src":"2054:8:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2043:20:73","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage","typeString":"struct IBalancerFeeBurner.SwapPathStep storage ref[] storage ref"}},"src":"2035:28:73","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"id":18283,"nodeType":"ExpressionStatement","src":"2035:28:73"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18284,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18276,"src":"2078:5:73","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"id":18285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2084:6:73","memberName":"length","nodeType":"MemberAccess","src":"2078:12:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":18286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2094:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2078:17:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18292,"nodeType":"IfStatement","src":"2074:77:73","trueBody":{"id":18291,"nodeType":"Block","src":"2097:54:73","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18288,"name":"BurnPathDoesNotExist","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":250,"src":"2118:20:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2118:22:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18290,"nodeType":"RevertStatement","src":"2111:29:73"}]}}]},"documentation":{"id":18268,"nodeType":"StructuredDocumentation","src":"1898:34:73","text":"@inheritdoc IBalancerFeeBurner"},"functionSelector":"c1cfb02a","id":18294,"implemented":true,"kind":"function","modifiers":[],"name":"getBurnPath","nameLocation":"1946:11:73","nodeType":"FunctionDefinition","parameters":{"id":18272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18271,"mutability":"mutable","name":"feeToken","nameLocation":"1965:8:73","nodeType":"VariableDeclaration","scope":18294,"src":"1958:15:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":18270,"nodeType":"UserDefinedTypeName","pathNode":{"id":18269,"name":"IERC20","nameLocations":["1958:6:73"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1958:6:73"},"referencedDeclaration":10558,"src":"1958:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1957:17:73"},"returnParameters":{"id":18277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18276,"mutability":"mutable","name":"steps","nameLocation":"2018:5:73","nodeType":"VariableDeclaration","scope":18294,"src":"1996:27:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"},"typeName":{"baseType":{"id":18274,"nodeType":"UserDefinedTypeName","pathNode":{"id":18273,"name":"SwapPathStep","nameLocations":["1996:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"1996:12:73"},"referencedDeclaration":227,"src":"1996:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"id":18275,"nodeType":"ArrayTypeName","src":"1996:14:73","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"}},"visibility":"internal"}],"src":"1995:29:73"},"scope":18509,"src":"1937:220:73","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[947],"body":{"id":18337,"nodeType":"Block","src":"2444:518:73","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":18321,"name":"BalancerFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18509,"src":"2513:17:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BalancerFeeBurner_$18509_$","typeString":"type(contract BalancerFeeBurner)"}},"id":18322,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2531:8:73","memberName":"burnHook","nodeType":"MemberAccess","referencedDeclaration":18508,"src":"2513:26:73","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_BurnHookParams_$247_calldata_ptr_$returns$__$","typeString":"function BalancerFeeBurner.burnHook(struct IBalancerFeeBurner.BurnHookParams calldata)"}},{"arguments":[{"id":18324,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18297,"src":"2600:4:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18325,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2634:3:73","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2638:6:73","memberName":"sender","nodeType":"MemberAccess","src":"2634:10:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18327,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18300,"src":"2676:8:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":18328,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18302,"src":"2722:14:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18329,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18305,"src":"2771:11:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":18330,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18307,"src":"2818:12:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18331,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18309,"src":"2863:9:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18332,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18311,"src":"2904:8:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18323,"name":"BurnHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":247,"src":"2557:14:73","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_BurnHookParams_$247_storage_ptr_$","typeString":"type(struct IBalancerFeeBurner.BurnHookParams storage pointer)"}},"id":18333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["2594:4:73","2626:6:73","2666:8:73","2706:14:73","2758:11:73","2804:12:73","2852:9:73","2894:8:73"],"names":["pool","sender","feeToken","feeTokenAmount","targetToken","minAmountOut","recipient","deadline"],"nodeType":"FunctionCall","src":"2557:374:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_memory_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_BurnHookParams_$247_calldata_ptr_$returns$__$","typeString":"function BalancerFeeBurner.burnHook(struct IBalancerFeeBurner.BurnHookParams calldata)"},{"typeIdentifier":"t_struct$_BurnHookParams_$247_memory_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams memory"}],"expression":{"id":18319,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2481:3:73","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18320,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2485:10:73","memberName":"encodeCall","nodeType":"MemberAccess","src":"2481:14:73","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":18334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2481:464:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18316,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"2454:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":18318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2461:6:73","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":3856,"src":"2454:13:73","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":18335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2454:501:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":18336,"nodeType":"ExpressionStatement","src":"2454:501:73"}]},"documentation":{"id":18295,"nodeType":"StructuredDocumentation","src":"2163:34:73","text":"@inheritdoc IProtocolFeeBurner"},"functionSelector":"de557a32","id":18338,"implemented":true,"kind":"function","modifiers":[{"id":18314,"kind":"modifierInvocation","modifierName":{"id":18313,"name":"onlyProtocolFeeSweeper","nameLocations":["2421:22:73"],"nodeType":"IdentifierPath","referencedDeclaration":19775,"src":"2421:22:73"},"nodeType":"ModifierInvocation","src":"2421:22:73"}],"name":"burn","nameLocation":"2211:4:73","nodeType":"FunctionDefinition","parameters":{"id":18312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18297,"mutability":"mutable","name":"pool","nameLocation":"2233:4:73","nodeType":"VariableDeclaration","scope":18338,"src":"2225:12:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18296,"name":"address","nodeType":"ElementaryTypeName","src":"2225:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18300,"mutability":"mutable","name":"feeToken","nameLocation":"2254:8:73","nodeType":"VariableDeclaration","scope":18338,"src":"2247:15:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":18299,"nodeType":"UserDefinedTypeName","pathNode":{"id":18298,"name":"IERC20","nameLocations":["2247:6:73"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2247:6:73"},"referencedDeclaration":10558,"src":"2247:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18302,"mutability":"mutable","name":"feeTokenAmount","nameLocation":"2280:14:73","nodeType":"VariableDeclaration","scope":18338,"src":"2272:22:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18301,"name":"uint256","nodeType":"ElementaryTypeName","src":"2272:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18305,"mutability":"mutable","name":"targetToken","nameLocation":"2311:11:73","nodeType":"VariableDeclaration","scope":18338,"src":"2304:18:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":18304,"nodeType":"UserDefinedTypeName","pathNode":{"id":18303,"name":"IERC20","nameLocations":["2304:6:73"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2304:6:73"},"referencedDeclaration":10558,"src":"2304:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18307,"mutability":"mutable","name":"minAmountOut","nameLocation":"2340:12:73","nodeType":"VariableDeclaration","scope":18338,"src":"2332:20:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18306,"name":"uint256","nodeType":"ElementaryTypeName","src":"2332:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18309,"mutability":"mutable","name":"recipient","nameLocation":"2370:9:73","nodeType":"VariableDeclaration","scope":18338,"src":"2362:17:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18308,"name":"address","nodeType":"ElementaryTypeName","src":"2362:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18311,"mutability":"mutable","name":"deadline","nameLocation":"2397:8:73","nodeType":"VariableDeclaration","scope":18338,"src":"2389:16:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18310,"name":"uint256","nodeType":"ElementaryTypeName","src":"2389:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2215:196:73"},"returnParameters":{"id":18315,"nodeType":"ParameterList","parameters":[],"src":"2444:0:73"},"scope":18509,"src":"2202:760:73","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18507,"nodeType":"Block","src":"3050:1921:73","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18348,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3216:5:73","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":18349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3222:9:73","memberName":"timestamp","nodeType":"MemberAccess","src":"3216:15:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":18350,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18341,"src":"3234:6:73","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3241:8:73","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":246,"src":"3234:15:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3216:33:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18357,"nodeType":"IfStatement","src":"3212:85:73","trueBody":{"id":18356,"nodeType":"Block","src":"3251:46:73","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18353,"name":"SwapDeadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":927,"src":"3272:12:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3272:14:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18355,"nodeType":"RevertStatement","src":"3265:21:73"}]}},{"assignments":[18360],"declarations":[{"constant":false,"id":18360,"mutability":"mutable","name":"feeToken","nameLocation":"3314:8:73","nodeType":"VariableDeclaration","scope":18507,"src":"3307:15:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":18359,"nodeType":"UserDefinedTypeName","pathNode":{"id":18358,"name":"IERC20","nameLocations":["3307:6:73"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"3307:6:73"},"referencedDeclaration":10558,"src":"3307:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"id":18363,"initialValue":{"expression":{"id":18361,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18341,"src":"3325:6:73","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3332:8:73","memberName":"feeToken","nodeType":"MemberAccess","referencedDeclaration":235,"src":"3325:15:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3307:33:73"},{"assignments":[18366],"declarations":[{"constant":false,"id":18366,"mutability":"mutable","name":"targetToken","nameLocation":"3357:11:73","nodeType":"VariableDeclaration","scope":18507,"src":"3350:18:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":18365,"nodeType":"UserDefinedTypeName","pathNode":{"id":18364,"name":"IERC20","nameLocations":["3350:6:73"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"3350:6:73"},"referencedDeclaration":10558,"src":"3350:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"id":18369,"initialValue":{"expression":{"id":18367,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18341,"src":"3371:6:73","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3378:11:73","memberName":"targetToken","nodeType":"MemberAccess","referencedDeclaration":240,"src":"3371:18:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3350:39:73"},{"assignments":[18371],"declarations":[{"constant":false,"id":18371,"mutability":"mutable","name":"feeTokenAmount","nameLocation":"3407:14:73","nodeType":"VariableDeclaration","scope":18507,"src":"3399:22:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18370,"name":"uint256","nodeType":"ElementaryTypeName","src":"3399:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18374,"initialValue":{"expression":{"id":18372,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18341,"src":"3424:6:73","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3431:14:73","memberName":"feeTokenAmount","nodeType":"MemberAccess","referencedDeclaration":237,"src":"3424:21:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3399:46:73"},{"assignments":[18379],"declarations":[{"constant":false,"id":18379,"mutability":"mutable","name":"steps","nameLocation":"3478:5:73","nodeType":"VariableDeclaration","scope":18507,"src":"3456:27:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"},"typeName":{"baseType":{"id":18377,"nodeType":"UserDefinedTypeName","pathNode":{"id":18376,"name":"SwapPathStep","nameLocations":["3456:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"3456:12:73"},"referencedDeclaration":227,"src":"3456:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"id":18378,"nodeType":"ArrayTypeName","src":"3456:14:73","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_storage_$dyn_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep[]"}},"visibility":"internal"}],"id":18383,"initialValue":{"arguments":[{"id":18381,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18360,"src":"3498:8:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":18380,"name":"getBurnPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18294,"src":"3486:11:73","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10558_$returns$_t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr_$","typeString":"function (contract IERC20) view returns (struct IBalancerFeeBurner.SwapPathStep memory[] memory)"}},"id":18382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3486:21:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"3456:51:73"},{"assignments":[18385],"declarations":[{"constant":false,"id":18385,"mutability":"mutable","name":"lastStepIndex","nameLocation":"3525:13:73","nodeType":"VariableDeclaration","scope":18507,"src":"3517:21:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18384,"name":"uint256","nodeType":"ElementaryTypeName","src":"3517:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18390,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18386,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18379,"src":"3541:5:73","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"id":18387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3547:6:73","memberName":"length","nodeType":"MemberAccess","src":"3541:12:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":18388,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3556:1:73","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3541:16:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3517:40:73"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"id":18396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":18391,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18379,"src":"3571:5:73","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"id":18393,"indexExpression":{"id":18392,"name":"lastStepIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18385,"src":"3577:13:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3571:20:73","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory"}},"id":18394,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3592:8:73","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":226,"src":"3571:29:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":18395,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18366,"src":"3604:11:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"src":"3571:44:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18401,"nodeType":"IfStatement","src":"3567:106:73","trueBody":{"id":18400,"nodeType":"Block","src":"3617:56:73","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18397,"name":"TargetTokenOutMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":253,"src":"3638:22:73","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3638:24:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18399,"nodeType":"RevertStatement","src":"3631:31:73"}]}},{"expression":{"arguments":[{"expression":{"id":18405,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18341,"src":"3757:6:73","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3764:6:73","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":232,"src":"3757:13:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":18409,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"3780:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}],"id":18408,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3772:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18407,"name":"address","nodeType":"ElementaryTypeName","src":"3772:7:73","typeDescriptions":{}}},"id":18410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3772:15:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18411,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18371,"src":"3789:14:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18402,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18360,"src":"3731:8:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":18404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3740:16:73","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":10656,"src":"3731:25:73","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10558_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":18412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3731:73:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18413,"nodeType":"ExpressionStatement","src":"3731:73:73"},{"expression":{"arguments":[{"id":18417,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18360,"src":"3828:8:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":18418,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18371,"src":"3838:14:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18414,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"3814:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":18416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3821:6:73","memberName":"settle","nodeType":"MemberAccess","referencedDeclaration":3867,"src":"3814:13:73","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$10558_$_t_uint256_$returns$_t_uint256_$","typeString":"function (contract IERC20,uint256) external returns (uint256)"}},"id":18419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3814:39:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18420,"nodeType":"ExpressionStatement","src":"3814:39:73"},{"assignments":[18423],"declarations":[{"constant":false,"id":18423,"mutability":"mutable","name":"stepTokenIn","nameLocation":"3941:11:73","nodeType":"VariableDeclaration","scope":18507,"src":"3934:18:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":18422,"nodeType":"UserDefinedTypeName","pathNode":{"id":18421,"name":"IERC20","nameLocations":["3934:6:73"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"3934:6:73"},"referencedDeclaration":10558,"src":"3934:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"id":18425,"initialValue":{"id":18424,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18360,"src":"3955:8:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3934:29:73"},{"assignments":[18427],"declarations":[{"constant":false,"id":18427,"mutability":"mutable","name":"stepExactAmountIn","nameLocation":"3981:17:73","nodeType":"VariableDeclaration","scope":18507,"src":"3973:25:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18426,"name":"uint256","nodeType":"ElementaryTypeName","src":"3973:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18429,"initialValue":{"id":18428,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18371,"src":"4001:14:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3973:42:73"},{"body":{"id":18485,"nodeType":"Block","src":"4068:607:73","statements":[{"assignments":[18443],"declarations":[{"constant":false,"id":18443,"mutability":"mutable","name":"step","nameLocation":"4102:4:73","nodeType":"VariableDeclaration","scope":18485,"src":"4082:24:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"},"typeName":{"id":18442,"nodeType":"UserDefinedTypeName","pathNode":{"id":18441,"name":"SwapPathStep","nameLocations":["4082:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":227,"src":"4082:12:73"},"referencedDeclaration":227,"src":"4082:12:73","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_storage_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep"}},"visibility":"internal"}],"id":18447,"initialValue":{"baseExpression":{"id":18444,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18379,"src":"4109:5:73","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"id":18446,"indexExpression":{"id":18445,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18431,"src":"4115:1:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4109:8:73","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory"}},"nodeType":"VariableDeclarationStatement","src":"4082:35:73"},{"assignments":[null,null,18449],"declarations":[null,null,{"constant":false,"id":18449,"mutability":"mutable","name":"amountOut","nameLocation":"4145:9:73","nodeType":"VariableDeclaration","scope":18485,"src":"4137:17:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18448,"name":"uint256","nodeType":"ElementaryTypeName","src":"4137:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18475,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":18453,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4151,"src":"4231:8:73","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4151_$","typeString":"type(enum SwapKind)"}},"id":18454,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4240:8:73","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4149,"src":"4231:17:73","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4151","typeString":"enum SwapKind"}},{"expression":{"id":18455,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18443,"src":"4276:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory"}},"id":18456,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4281:4:73","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":223,"src":"4276:9:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18457,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18423,"src":"4316:11:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"expression":{"id":18458,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18443,"src":"4359:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory"}},"id":18459,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4364:8:73","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":226,"src":"4359:13:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":18460,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18427,"src":"4410:17:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"condition":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18461,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18431,"src":"4460:1:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":18462,"name":"lastStepIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18385,"src":"4465:13:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4460:18:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":18464,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4459:20:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":18467,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4504:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":18468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"4459:46:73","trueExpression":{"expression":{"id":18465,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18341,"src":"4482:6:73","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4489:12:73","memberName":"minAmountOut","nodeType":"MemberAccess","referencedDeclaration":242,"src":"4482:19:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"","id":18471,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4543:2:73","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":18470,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4537:5:73","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":18469,"name":"bytes","nodeType":"ElementaryTypeName","src":"4537:5:73","typeDescriptions":{}}},"id":18472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4537:9:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$4151","typeString":"enum SwapKind"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":18452,"name":"VaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4170,"src":"4187:15:73","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_VaultSwapParams_$4170_storage_ptr_$","typeString":"type(struct VaultSwapParams storage pointer)"}},"id":18473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["4225:4:73","4270:4:73","4307:7:73","4349:8:73","4394:14:73","4449:8:73","4527:8:73"],"names":["kind","pool","tokenIn","tokenOut","amountGivenRaw","limitRaw","userData"],"nodeType":"FunctionCall","src":"4187:378:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4170_memory_ptr","typeString":"struct VaultSwapParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$4170_memory_ptr","typeString":"struct VaultSwapParams memory"}],"expression":{"id":18450,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"4158:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":18451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4165:4:73","memberName":"swap","nodeType":"MemberAccess","referencedDeclaration":3891,"src":"4158:11:73","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_VaultSwapParams_$4170_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct VaultSwapParams memory) external returns (uint256,uint256,uint256)"}},"id":18474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4158:421:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4132:447:73"},{"expression":{"id":18479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18476,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18423,"src":"4594:11:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":18477,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18443,"src":"4608:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$227_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory"}},"id":18478,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4613:8:73","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":226,"src":"4608:13:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"src":"4594:27:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":18480,"nodeType":"ExpressionStatement","src":"4594:27:73"},{"expression":{"id":18483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18481,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18427,"src":"4635:17:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18482,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18449,"src":"4655:9:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4635:29:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18484,"nodeType":"ExpressionStatement","src":"4635:29:73"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18434,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18431,"src":"4045:1:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":18435,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18379,"src":"4049:5:73","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$227_memory_ptr_$dyn_memory_ptr","typeString":"struct IBalancerFeeBurner.SwapPathStep memory[] memory"}},"id":18436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4055:6:73","memberName":"length","nodeType":"MemberAccess","src":"4049:12:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4045:16:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18486,"initializationExpression":{"assignments":[18431],"declarations":[{"constant":false,"id":18431,"mutability":"mutable","name":"i","nameLocation":"4038:1:73","nodeType":"VariableDeclaration","scope":18486,"src":"4030:9:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18430,"name":"uint256","nodeType":"ElementaryTypeName","src":"4030:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18433,"initialValue":{"hexValue":"30","id":18432,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4042:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4030:13:73"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":18439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4063:3:73","subExpression":{"id":18438,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18431,"src":"4063:1:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18440,"nodeType":"ExpressionStatement","src":"4063:3:73"},"nodeType":"ForStatement","src":"4025:650:73"},{"expression":{"arguments":[{"id":18490,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18423,"src":"4793:11:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"expression":{"id":18491,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18341,"src":"4806:6:73","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4813:9:73","memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":244,"src":"4806:16:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18493,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18427,"src":"4824:17:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18487,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"4779:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":18489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4786:6:73","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":3878,"src":"4779:13:73","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":18494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4779:63:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18495,"nodeType":"ExpressionStatement","src":"4779:63:73"},{"eventCall":{"arguments":[{"expression":{"id":18497,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18341,"src":"4876:6:73","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4883:4:73","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":230,"src":"4876:11:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18499,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18360,"src":"4889:8:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":18500,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18371,"src":"4899:14:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18501,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18366,"src":"4915:11:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":18502,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18427,"src":"4928:17:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18503,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18341,"src":"4947:6:73","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams calldata"}},"id":18504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4954:9:73","memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":244,"src":"4947:16:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18496,"name":"ProtocolFeeBurned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":914,"src":"4858:17:73","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10558_$_t_uint256_$_t_contract$_IERC20_$10558_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address)"}},"id":18505,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4858:106:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18506,"nodeType":"EmitStatement","src":"4853:111:73"}]},"functionSelector":"c66472de","id":18508,"implemented":true,"kind":"function","modifiers":[{"id":18344,"kind":"modifierInvocation","modifierName":{"id":18343,"name":"nonReentrant","nameLocations":["3027:12:73"],"nodeType":"IdentifierPath","referencedDeclaration":6949,"src":"3027:12:73"},"nodeType":"ModifierInvocation","src":"3027:12:73"},{"id":18346,"kind":"modifierInvocation","modifierName":{"id":18345,"name":"onlyVault","nameLocations":["3040:9:73"],"nodeType":"IdentifierPath","referencedDeclaration":9299,"src":"3040:9:73"},"nodeType":"ModifierInvocation","src":"3040:9:73"}],"name":"burnHook","nameLocation":"2977:8:73","nodeType":"FunctionDefinition","parameters":{"id":18342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18341,"mutability":"mutable","name":"params","nameLocation":"3010:6:73","nodeType":"VariableDeclaration","scope":18508,"src":"2986:30:73","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_calldata_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams"},"typeName":{"id":18340,"nodeType":"UserDefinedTypeName","pathNode":{"id":18339,"name":"BurnHookParams","nameLocations":["2986:14:73"],"nodeType":"IdentifierPath","referencedDeclaration":247,"src":"2986:14:73"},"referencedDeclaration":247,"src":"2986:14:73","typeDescriptions":{"typeIdentifier":"t_struct$_BurnHookParams_$247_storage_ptr","typeString":"struct IBalancerFeeBurner.BurnHookParams"}},"visibility":"internal"}],"src":"2985:32:73"},"returnParameters":{"id":18347,"nodeType":"ParameterList","parameters":[],"src":"3050:0:73"},"scope":18509,"src":"2968:2003:73","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":18510,"src":"1118:3855:73","usedErrors":[250,253,924,927,3056,6938,9334,9339,10596,19756,19759],"usedEvents":[914,9345,9483]}],"src":"46:4928:73"},"id":73},"contracts/CallAndRevert.sol":{"ast":{"absolutePath":"contracts/CallAndRevert.sol","exportedSymbols":{"Address":[11308],"CallAndRevert":[18615],"RevertCodec":[4941]},"id":18616,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":18511,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:74"},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":18513,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18616,"sourceUnit":11309,"src":"72:68:74","symbolAliases":[{"foreign":{"id":18512,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11308,"src":"81:7:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol","id":18515,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18616,"sourceUnit":4942,"src":"142:97:74","symbolAliases":[{"foreign":{"id":18514,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4941,"src":"151:11:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"CallAndRevert","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":18615,"linearizedBaseContracts":[18615],"name":"CallAndRevert","nameLocation":"250:13:74","nodeType":"ContractDefinition","nodes":[{"errorSelector":"28f95541","id":18517,"name":"QuoteResultSpoofed","nameLocation":"276:18:74","nodeType":"ErrorDefinition","parameters":{"id":18516,"nodeType":"ParameterList","parameters":[],"src":"294:2:74"},"src":"270:27:74"},{"body":{"id":18553,"nodeType":"Block","src":"394:233:74","statements":[{"clauses":[{"block":{"id":18540,"nodeType":"Block","src":"469:53:74","statements":[{"expression":{"arguments":[{"hexValue":"556e65787065637465642073756363657373","id":18537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"490:20:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""},"value":"Unexpected success"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""}],"id":18536,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"483:6:74","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":18538,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"483:28:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18539,"nodeType":"ExpressionStatement","src":"483:28:74"}]},"errorName":"","id":18541,"nodeType":"TryCatchClause","src":"469:53:74"},{"block":{"id":18550,"nodeType":"Block","src":"551:70:74","statements":[{"expression":{"arguments":[{"id":18547,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18543,"src":"603:6:74","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18545,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4941,"src":"572:11:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4941_$","typeString":"type(library RevertCodec)"}},"id":18546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"584:18:74","memberName":"catchEncodedResult","nodeType":"MemberAccess","referencedDeclaration":4903,"src":"572:30:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (bytes memory)"}},"id":18548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"572:38:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":18525,"id":18549,"nodeType":"Return","src":"565:45:74"}]},"errorName":"","id":18551,"nodeType":"TryCatchClause","parameters":{"id":18544,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18543,"mutability":"mutable","name":"result","nameLocation":"543:6:74","nodeType":"VariableDeclaration","scope":18551,"src":"530:19:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18542,"name":"bytes","nodeType":"ElementaryTypeName","src":"530:5:74","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"529:21:74"},"src":"523:98:74"}],"externalCall":{"arguments":[{"id":18533,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18519,"src":"455:6:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18534,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18521,"src":"463:4:74","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"arguments":[{"id":18529,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"430:4:74","typeDescriptions":{"typeIdentifier":"t_contract$_CallAndRevert_$18615","typeString":"contract CallAndRevert"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CallAndRevert_$18615","typeString":"contract CallAndRevert"}],"id":18528,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"422:7:74","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18527,"name":"address","nodeType":"ElementaryTypeName","src":"422:7:74","typeDescriptions":{}}},"id":18530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"422:13:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18526,"name":"CallAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18615,"src":"408:13:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CallAndRevert_$18615_$","typeString":"type(contract CallAndRevert)"}},"id":18531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"408:28:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_CallAndRevert_$18615","typeString":"contract CallAndRevert"}},"id":18532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"437:17:74","memberName":"callAndRevertHook","nodeType":"MemberAccess","referencedDeclaration":18614,"src":"408:46:74","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory) external"}},"id":18535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"408:60:74","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18552,"nodeType":"TryStatement","src":"404:217:74"}]},"id":18554,"implemented":true,"kind":"function","modifiers":[],"name":"_callAndRevert","nameLocation":"312:14:74","nodeType":"FunctionDefinition","parameters":{"id":18522,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18519,"mutability":"mutable","name":"target","nameLocation":"335:6:74","nodeType":"VariableDeclaration","scope":18554,"src":"327:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18518,"name":"address","nodeType":"ElementaryTypeName","src":"327:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18521,"mutability":"mutable","name":"data","nameLocation":"356:4:74","nodeType":"VariableDeclaration","scope":18554,"src":"343:17:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18520,"name":"bytes","nodeType":"ElementaryTypeName","src":"343:5:74","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"326:35:74"},"returnParameters":{"id":18525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18524,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18554,"src":"380:12:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18523,"name":"bytes","nodeType":"ElementaryTypeName","src":"380:5:74","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"379:14:74"},"scope":18615,"src":"303:324:74","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":18613,"nodeType":"Block","src":"704:860:74","statements":[{"assignments":[18562,18564],"declarations":[{"constant":false,"id":18562,"mutability":"mutable","name":"success","nameLocation":"779:7:74","nodeType":"VariableDeclaration","scope":18613,"src":"774:12:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18561,"name":"bool","nodeType":"ElementaryTypeName","src":"774:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":18564,"mutability":"mutable","name":"result","nameLocation":"801:6:74","nodeType":"VariableDeclaration","scope":18613,"src":"788:19:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18563,"name":"bytes","nodeType":"ElementaryTypeName","src":"788:5:74","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":18570,"initialValue":{"arguments":[{"id":18568,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18558,"src":"825:4:74","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"components":[{"id":18565,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18556,"src":"812:6:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":18566,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"811:8:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"820:4:74","memberName":"call","nodeType":"MemberAccess","src":"811:13:74","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":18569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"811:19:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"773:57:74"},{"condition":{"id":18571,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18562,"src":"844:7:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":18611,"nodeType":"Block","src":"1127:431:74","statements":[{"assignments":[18589],"declarations":[{"constant":false,"id":18589,"mutability":"mutable","name":"errorSelector","nameLocation":"1260:13:74","nodeType":"VariableDeclaration","scope":18611,"src":"1253:20:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":18588,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1253:6:74","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":18594,"initialValue":{"arguments":[{"id":18592,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18564,"src":"1302:6:74","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18590,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4941,"src":"1276:11:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4941_$","typeString":"type(library RevertCodec)"}},"id":18591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1288:13:74","memberName":"parseSelector","nodeType":"MemberAccess","referencedDeclaration":4922,"src":"1276:25:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$","typeString":"function (bytes memory) pure returns (bytes4)"}},"id":18593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1276:33:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"1253:56:74"},{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":18599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18595,"name":"errorSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18589,"src":"1327:13:74","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":18596,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4941,"src":"1344:11:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4941_$","typeString":"type(library RevertCodec)"}},"id":18597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1356:6:74","memberName":"Result","nodeType":"MemberAccess","referencedDeclaration":4859,"src":"1344:18:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$","typeString":"function (bytes memory) pure returns (error)"}},"id":18598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1363:8:74","memberName":"selector","nodeType":"MemberAccess","src":"1344:27:74","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"1327:44:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18604,"nodeType":"IfStatement","src":"1323:110:74","trueBody":{"id":18603,"nodeType":"Block","src":"1373:60:74","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18600,"name":"QuoteResultSpoofed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18517,"src":"1398:18:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1398:20:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18602,"nodeType":"RevertStatement","src":"1391:27:74"}]}},{"expression":{"arguments":[{"id":18608,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18564,"src":"1540:6:74","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18605,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4941,"src":"1513:11:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4941_$","typeString":"type(library RevertCodec)"}},"id":18607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1525:14:74","memberName":"bubbleUpRevert","nodeType":"MemberAccess","referencedDeclaration":4940,"src":"1513:26:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":18609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1513:34:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18610,"nodeType":"ExpressionStatement","src":"1513:34:74"}]},"id":18612,"nodeType":"IfStatement","src":"840:718:74","trueBody":{"id":18587,"nodeType":"Block","src":"853:268:74","statements":[{"expression":{"arguments":[{"expression":{"id":18575,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"990:3:74","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"994:6:74","memberName":"sender","nodeType":"MemberAccess","src":"990:10:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18577,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18562,"src":"1002:7:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":18578,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18564,"src":"1011:6:74","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18572,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11308,"src":"955:7:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$11308_$","typeString":"type(library Address)"}},"id":18574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"963:26:74","memberName":"verifyCallResultFromTarget","nodeType":"MemberAccess","referencedDeclaration":11265,"src":"955:34:74","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":18579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"955:63:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":18580,"nodeType":"ExpressionStatement","src":"955:63:74"},{"errorCall":{"arguments":[{"id":18584,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18564,"src":"1103:6:74","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18581,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4941,"src":"1084:11:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$4941_$","typeString":"type(library RevertCodec)"}},"id":18583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1096:6:74","memberName":"Result","nodeType":"MemberAccess","referencedDeclaration":4859,"src":"1084:18:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$","typeString":"function (bytes memory) pure returns (error)"}},"id":18585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1084:26:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18586,"nodeType":"RevertStatement","src":"1077:33:74"}]}}]},"functionSelector":"a7699638","id":18614,"implemented":true,"kind":"function","modifiers":[],"name":"callAndRevertHook","nameLocation":"642:17:74","nodeType":"FunctionDefinition","parameters":{"id":18559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18556,"mutability":"mutable","name":"target","nameLocation":"668:6:74","nodeType":"VariableDeclaration","scope":18614,"src":"660:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18555,"name":"address","nodeType":"ElementaryTypeName","src":"660:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18558,"mutability":"mutable","name":"data","nameLocation":"689:4:74","nodeType":"VariableDeclaration","scope":18614,"src":"676:17:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18557,"name":"bytes","nodeType":"ElementaryTypeName","src":"676:5:74","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"659:35:74"},"returnParameters":{"id":18560,"nodeType":"ParameterList","parameters":[],"src":"704:0:74"},"scope":18615,"src":"633:931:74","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":18616,"src":"241:1325:74","usedErrors":[4859,4862,11058,12361,18517],"usedEvents":[]}],"src":"46:1521:74"},"id":74},"contracts/CowSwapFeeBurner.sol":{"ast":{"absolutePath":"contracts/CowSwapFeeBurner.sol","exportedSymbols":{"CowSwapFeeBurner":[19510],"FeeBurnerAuthentication":[19827],"GPv2Order":[357],"IComposableCow":[326],"ICowConditionalOrder":[418],"ICowConditionalOrderGenerator":[454],"ICowSwapFeeBurner":[566],"IERC1271":[9568],"IERC165":[12688],"IERC20":[10558],"IProtocolFeeBurner":[948],"IProtocolFeeSweeper":[1137],"IVault":[2527],"ReentrancyGuardTransient":[6994],"SafeERC20":[11048],"Version":[4981]},"id":19511,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":18617,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:75"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":18619,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19511,"sourceUnit":11049,"src":"72:84:75","symbolAliases":[{"foreign":{"id":18618,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11048,"src":"81:9:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"@openzeppelin/contracts/utils/introspection/IERC165.sol","id":18621,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19511,"sourceUnit":12689,"src":"157:82:75","symbolAliases":[{"foreign":{"id":18620,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12688,"src":"166:7:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC1271.sol","file":"@openzeppelin/contracts/interfaces/IERC1271.sol","id":18623,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19511,"sourceUnit":9569,"src":"240:75:75","symbolAliases":[{"foreign":{"id":18622,"name":"IERC1271","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9568,"src":"249:8:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":18625,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19511,"sourceUnit":10559,"src":"316:72:75","symbolAliases":[{"foreign":{"id":18624,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"325:6:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","id":18627,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19511,"sourceUnit":949,"src":"390:116:75","symbolAliases":[{"foreign":{"id":18626,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"399:18:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol","id":18629,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19511,"sourceUnit":567,"src":"507:114:75","symbolAliases":[{"foreign":{"id":18628,"name":"ICowSwapFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":566,"src":"516:17:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":18631,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19511,"sourceUnit":1138,"src":"622:118:75","symbolAliases":[{"foreign":{"id":18630,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1137,"src":"631:19:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","id":18633,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19511,"sourceUnit":327,"src":"741:108:75","symbolAliases":[{"foreign":{"id":18632,"name":"IComposableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":326,"src":"750:14:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol","id":18635,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19511,"sourceUnit":455,"src":"850:142:75","symbolAliases":[{"foreign":{"id":18634,"name":"ICowConditionalOrderGenerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":454,"src":"863:29:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol","id":18638,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19511,"sourceUnit":419,"src":"993:139:75","symbolAliases":[{"foreign":{"id":18636,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"1006:20:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":18637,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":357,"src":"1032:9:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":18640,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19511,"sourceUnit":2528,"src":"1133:81:75","symbolAliases":[{"foreign":{"id":18639,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"1142:6:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","id":18642,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19511,"sourceUnit":4982,"src":"1216:89:75","symbolAliases":[{"foreign":{"id":18641,"name":"Version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4981,"src":"1225:7:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":18644,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19511,"sourceUnit":6995,"src":"1306:132:75","symbolAliases":[{"foreign":{"id":18643,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6994,"src":"1319:24:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/FeeBurnerAuthentication.sol","file":"./FeeBurnerAuthentication.sol","id":18646,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19511,"sourceUnit":19828,"src":"1440:72:75","symbolAliases":[{"foreign":{"id":18645,"name":"FeeBurnerAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19827,"src":"1449:23:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":18648,"name":"ICowSwapFeeBurner","nameLocations":["1843:17:75"],"nodeType":"IdentifierPath","referencedDeclaration":566,"src":"1843:17:75"},"id":18649,"nodeType":"InheritanceSpecifier","src":"1843:17:75"},{"baseName":{"id":18650,"name":"FeeBurnerAuthentication","nameLocations":["1862:23:75"],"nodeType":"IdentifierPath","referencedDeclaration":19827,"src":"1862:23:75"},"id":18651,"nodeType":"InheritanceSpecifier","src":"1862:23:75"},{"baseName":{"id":18652,"name":"ReentrancyGuardTransient","nameLocations":["1887:24:75"],"nodeType":"IdentifierPath","referencedDeclaration":6994,"src":"1887:24:75"},"id":18653,"nodeType":"InheritanceSpecifier","src":"1887:24:75"},{"baseName":{"id":18654,"name":"Version","nameLocations":["1913:7:75"],"nodeType":"IdentifierPath","referencedDeclaration":4981,"src":"1913:7:75"},"id":18655,"nodeType":"InheritanceSpecifier","src":"1913:7:75"}],"canonicalName":"CowSwapFeeBurner","contractDependencies":[],"contractKind":"contract","documentation":{"id":18647,"nodeType":"StructuredDocumentation","src":"1551:262:75","text":" @title CowSwapFeeBurner\n @notice A contract that burns protocol fees using CowSwap.\n @dev The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function.\n Only one order per token is allowed at a time."},"fullyImplemented":true,"id":19510,"linearizedBaseContracts":[19510,4981,34,6994,19827,9554,9468,12348,566,454,12688,418,948,9568],"name":"CowSwapFeeBurner","nameLocation":"1823:16:75","nodeType":"ContractDefinition","nodes":[{"global":false,"id":18659,"libraryName":{"id":18656,"name":"SafeERC20","nameLocations":["1933:9:75"],"nodeType":"IdentifierPath","referencedDeclaration":11048,"src":"1933:9:75"},"nodeType":"UsingForDirective","src":"1927:27:75","typeName":{"id":18658,"nodeType":"UserDefinedTypeName","pathNode":{"id":18657,"name":"IERC20","nameLocations":["1947:6:75"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1947:6:75"},"referencedDeclaration":10558,"src":"1947:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}},{"canonicalName":"CowSwapFeeBurner.ShortOrder","id":18669,"members":[{"constant":false,"id":18662,"mutability":"mutable","name":"tokenOut","nameLocation":"1995:8:75","nodeType":"VariableDeclaration","scope":18669,"src":"1988:15:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":18661,"nodeType":"UserDefinedTypeName","pathNode":{"id":18660,"name":"IERC20","nameLocations":["1988:6:75"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1988:6:75"},"referencedDeclaration":10558,"src":"1988:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18664,"mutability":"mutable","name":"receiver","nameLocation":"2021:8:75","nodeType":"VariableDeclaration","scope":18669,"src":"2013:16:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18663,"name":"address","nodeType":"ElementaryTypeName","src":"2013:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18666,"mutability":"mutable","name":"minAmountOut","nameLocation":"2047:12:75","nodeType":"VariableDeclaration","scope":18669,"src":"2039:20:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18665,"name":"uint256","nodeType":"ElementaryTypeName","src":"2039:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18668,"mutability":"mutable","name":"deadline","nameLocation":"2076:8:75","nodeType":"VariableDeclaration","scope":18669,"src":"2069:15:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":18667,"name":"uint32","nodeType":"ElementaryTypeName","src":"2069:6:75","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"name":"ShortOrder","nameLocation":"1967:10:75","nodeType":"StructDefinition","scope":19510,"src":"1960:131:75","visibility":"public"},{"constant":true,"id":18672,"mutability":"constant","name":"_SIGNATURE_VERIFIER_MUXER_INTERFACE","nameLocation":"2122:35:75","nodeType":"VariableDeclaration","scope":19510,"src":"2097:73:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":18670,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2097:6:75","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"value":{"hexValue":"30783632616638646332","id":18671,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2160:10:75","typeDescriptions":{"typeIdentifier":"t_rational_1655672258_by_1","typeString":"int_const 1655672258"},"value":"0x62af8dc2"},"visibility":"internal"},{"constant":false,"id":18677,"mutability":"immutable","name":"_sellKind","nameLocation":"2203:9:75","nodeType":"VariableDeclaration","scope":19510,"src":"2176:56:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18673,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2176:7:75","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"73656c6c","id":18675,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2225:6:75","typeDescriptions":{"typeIdentifier":"t_stringliteral_f3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775","typeString":"literal_string \"sell\""},"value":"sell"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_f3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775","typeString":"literal_string \"sell\""}],"id":18674,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2215:9:75","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":18676,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2215:17:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":18682,"mutability":"immutable","name":"_tokenBalance","nameLocation":"2265:13:75","nodeType":"VariableDeclaration","scope":19510,"src":"2238:61:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18678,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2238:7:75","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"6572633230","id":18680,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2291:7:75","typeDescriptions":{"typeIdentifier":"t_stringliteral_5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9","typeString":"literal_string \"erc20\""},"value":"erc20"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc9","typeString":"literal_string \"erc20\""}],"id":18679,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2281:9:75","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":18681,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2281:18:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"functionSelector":"93504c52","id":18685,"mutability":"immutable","name":"composableCow","nameLocation":"2338:13:75","nodeType":"VariableDeclaration","scope":19510,"src":"2306:45:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"},"typeName":{"id":18684,"nodeType":"UserDefinedTypeName","pathNode":{"id":18683,"name":"IComposableCow","nameLocations":["2306:14:75"],"nodeType":"IdentifierPath","referencedDeclaration":326,"src":"2306:14:75"},"referencedDeclaration":326,"src":"2306:14:75","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"visibility":"public"},{"constant":false,"functionSelector":"9b552cc2","id":18687,"mutability":"immutable","name":"vaultRelayer","nameLocation":"2382:12:75","nodeType":"VariableDeclaration","scope":19510,"src":"2357:37:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18686,"name":"address","nodeType":"ElementaryTypeName","src":"2357:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"8aebd348","id":18689,"mutability":"immutable","name":"appData","nameLocation":"2425:7:75","nodeType":"VariableDeclaration","scope":19510,"src":"2400:32:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18688,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2400:7:75","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"constant":false,"id":18695,"mutability":"mutable","name":"_orders","nameLocation":"2562:7:75","nodeType":"VariableDeclaration","scope":19510,"src":"2511:58:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_struct$_ShortOrder_$18669_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder)"},"typeName":{"id":18694,"keyName":"token","keyNameLocation":"2526:5:75","keyType":{"id":18691,"nodeType":"UserDefinedTypeName","pathNode":{"id":18690,"name":"IERC20","nameLocations":["2519:6:75"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2519:6:75"},"referencedDeclaration":10558,"src":"2519:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"2511:41:75","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_struct$_ShortOrder_$18669_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder)"},"valueName":"order","valueNameLocation":"2546:5:75","valueType":{"id":18693,"nodeType":"UserDefinedTypeName","pathNode":{"id":18692,"name":"ShortOrder","nameLocations":["2535:10:75"],"nodeType":"IdentifierPath","referencedDeclaration":18669,"src":"2535:10:75"},"referencedDeclaration":18669,"src":"2535:10:75","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18669_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"}}},"visibility":"internal"},{"body":{"id":18731,"nodeType":"Block","src":"2883:116:75","statements":[{"expression":{"id":18721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18719,"name":"composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18685,"src":"2893:13:75","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18720,"name":"_composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18701,"src":"2909:14:75","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"src":"2893:30:75","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"id":18722,"nodeType":"ExpressionStatement","src":"2893:30:75"},{"expression":{"id":18725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18723,"name":"vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18687,"src":"2933:12:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18724,"name":"_cowVaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18703,"src":"2948:16:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2933:31:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18726,"nodeType":"ExpressionStatement","src":"2933:31:75"},{"expression":{"id":18729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18727,"name":"appData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18689,"src":"2974:7:75","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18728,"name":"_appData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18705,"src":"2984:8:75","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2974:18:75","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":18730,"nodeType":"ExpressionStatement","src":"2974:18:75"}]},"id":18732,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":18712,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18709,"src":"2813:8:75","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":18713,"kind":"baseConstructorSpecifier","modifierName":{"id":18711,"name":"Version","nameLocations":["2805:7:75"],"nodeType":"IdentifierPath","referencedDeclaration":4981,"src":"2805:7:75"},"nodeType":"ModifierInvocation","src":"2805:17:75"},{"arguments":[{"id":18715,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18698,"src":"2847:19:75","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},{"id":18716,"name":"_initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18707,"src":"2868:13:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":18717,"kind":"baseConstructorSpecifier","modifierName":{"id":18714,"name":"FeeBurnerAuthentication","nameLocations":["2823:23:75"],"nodeType":"IdentifierPath","referencedDeclaration":19827,"src":"2823:23:75"},"nodeType":"ModifierInvocation","src":"2823:59:75"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":18710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18698,"mutability":"mutable","name":"_protocolFeeSweeper","nameLocation":"2617:19:75","nodeType":"VariableDeclaration","scope":18732,"src":"2597:39:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":18697,"nodeType":"UserDefinedTypeName","pathNode":{"id":18696,"name":"IProtocolFeeSweeper","nameLocations":["2597:19:75"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"2597:19:75"},"referencedDeclaration":1137,"src":"2597:19:75","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"visibility":"internal"},{"constant":false,"id":18701,"mutability":"mutable","name":"_composableCow","nameLocation":"2661:14:75","nodeType":"VariableDeclaration","scope":18732,"src":"2646:29:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"},"typeName":{"id":18700,"nodeType":"UserDefinedTypeName","pathNode":{"id":18699,"name":"IComposableCow","nameLocations":["2646:14:75"],"nodeType":"IdentifierPath","referencedDeclaration":326,"src":"2646:14:75"},"referencedDeclaration":326,"src":"2646:14:75","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"visibility":"internal"},{"constant":false,"id":18703,"mutability":"mutable","name":"_cowVaultRelayer","nameLocation":"2693:16:75","nodeType":"VariableDeclaration","scope":18732,"src":"2685:24:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18702,"name":"address","nodeType":"ElementaryTypeName","src":"2685:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18705,"mutability":"mutable","name":"_appData","nameLocation":"2727:8:75","nodeType":"VariableDeclaration","scope":18732,"src":"2719:16:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18704,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2719:7:75","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":18707,"mutability":"mutable","name":"_initialOwner","nameLocation":"2753:13:75","nodeType":"VariableDeclaration","scope":18732,"src":"2745:21:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18706,"name":"address","nodeType":"ElementaryTypeName","src":"2745:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18709,"mutability":"mutable","name":"_version","nameLocation":"2790:8:75","nodeType":"VariableDeclaration","scope":18732,"src":"2776:22:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":18708,"name":"string","nodeType":"ElementaryTypeName","src":"2776:6:75","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2587:217:75"},"returnParameters":{"id":18718,"nodeType":"ParameterList","parameters":[],"src":"2883:0:75"},"scope":19510,"src":"2576:423:75","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[526],"body":{"id":18746,"nodeType":"Block","src":"3331:42:75","statements":[{"expression":{"arguments":[{"id":18743,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18736,"src":"3358:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":18742,"name":"_getOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19357,"src":"3348:9:75","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10558_$returns$_t_struct$_GPv2Order_$357_memory_ptr_$","typeString":"function (contract IERC20) view returns (struct GPv2Order memory)"}},"id":18744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3348:18:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}},"functionReturnParameters":18741,"id":18745,"nodeType":"Return","src":"3341:25:75"}]},"documentation":{"id":18733,"nodeType":"StructuredDocumentation","src":"3218:33:75","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"6eba2b13","id":18747,"implemented":true,"kind":"function","modifiers":[],"name":"getOrder","nameLocation":"3265:8:75","nodeType":"FunctionDefinition","parameters":{"id":18737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18736,"mutability":"mutable","name":"tokenIn","nameLocation":"3281:7:75","nodeType":"VariableDeclaration","scope":18747,"src":"3274:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":18735,"nodeType":"UserDefinedTypeName","pathNode":{"id":18734,"name":"IERC20","nameLocations":["3274:6:75"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"3274:6:75"},"referencedDeclaration":10558,"src":"3274:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"3273:16:75"},"returnParameters":{"id":18741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18740,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18747,"src":"3313:16:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":18739,"nodeType":"UserDefinedTypeName","pathNode":{"id":18738,"name":"GPv2Order","nameLocations":["3313:9:75"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"3313:9:75"},"referencedDeclaration":357,"src":"3313:9:75","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"3312:18:75"},"scope":19510,"src":"3256:117:75","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[536],"body":{"id":18764,"nodeType":"Block","src":"3500:64:75","statements":[{"expression":{"id":18762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":18757,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18755,"src":"3511:6:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},null],"id":18758,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3510:10:75","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$__$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":18760,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18751,"src":"3549:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":18759,"name":"_getOrderStatusAndBalance","nodeType":"Identifier","overloadedDeclarations":[19374,19448],"referencedDeclaration":19374,"src":"3523:25:75","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10558_$returns$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"function (contract IERC20) view returns (enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"id":18761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3523:34:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"src":"3510:47:75","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18763,"nodeType":"ExpressionStatement","src":"3510:47:75"}]},"documentation":{"id":18748,"nodeType":"StructuredDocumentation","src":"3379:33:75","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"6f9d75cd","id":18765,"implemented":true,"kind":"function","modifiers":[],"name":"getOrderStatus","nameLocation":"3426:14:75","nodeType":"FunctionDefinition","parameters":{"id":18752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18751,"mutability":"mutable","name":"tokenIn","nameLocation":"3448:7:75","nodeType":"VariableDeclaration","scope":18765,"src":"3441:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":18750,"nodeType":"UserDefinedTypeName","pathNode":{"id":18749,"name":"IERC20","nameLocations":["3441:6:75"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"3441:6:75"},"referencedDeclaration":10558,"src":"3441:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"3440:16:75"},"returnParameters":{"id":18756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18755,"mutability":"mutable","name":"status","nameLocation":"3492:6:75","nodeType":"VariableDeclaration","scope":18765,"src":"3480:18:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":18754,"nodeType":"UserDefinedTypeName","pathNode":{"id":18753,"name":"OrderStatus","nameLocations":["3480:11:75"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"3480:11:75"},"referencedDeclaration":480,"src":"3480:11:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"}],"src":"3479:20:75"},"scope":19510,"src":"3417:147:75","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[547],"body":{"id":18852,"nodeType":"Block","src":"3717:689:75","statements":[{"assignments":[18780,18782],"declarations":[{"constant":false,"id":18780,"mutability":"mutable","name":"status","nameLocation":"3740:6:75","nodeType":"VariableDeclaration","scope":18852,"src":"3728:18:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":18779,"nodeType":"UserDefinedTypeName","pathNode":{"id":18778,"name":"OrderStatus","nameLocations":["3728:11:75"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"3728:11:75"},"referencedDeclaration":480,"src":"3728:11:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"},{"constant":false,"id":18782,"mutability":"mutable","name":"amount","nameLocation":"3756:6:75","nodeType":"VariableDeclaration","scope":18852,"src":"3748:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18781,"name":"uint256","nodeType":"ElementaryTypeName","src":"3748:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18786,"initialValue":{"arguments":[{"id":18784,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18769,"src":"3792:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":18783,"name":"_getOrderStatusAndBalance","nodeType":"Identifier","overloadedDeclarations":[19374,19448],"referencedDeclaration":19374,"src":"3766:25:75","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10558_$returns$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"function (contract IERC20) view returns (enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"id":18785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3766:34:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"3727:73:75"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"id":18790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18787,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18780,"src":"3815:6:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":18788,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"3825:11:75","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":18789,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3837:6:75","memberName":"Failed","nodeType":"MemberAccess","referencedDeclaration":479,"src":"3825:18:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"src":"3815:28:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18796,"nodeType":"IfStatement","src":"3811:98:75","trueBody":{"id":18795,"nodeType":"Block","src":"3845:64:75","statements":[{"errorCall":{"arguments":[{"id":18792,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18780,"src":"3891:6:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}],"id":18791,"name":"OrderHasUnexpectedStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":513,"src":"3866:24:75","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_OrderStatus_$480_$returns$_t_error_$","typeString":"function (enum ICowSwapFeeBurner.OrderStatus) pure returns (error)"}},"id":18793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3866:32:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18794,"nodeType":"RevertStatement","src":"3859:39:75"}]}},{"expression":{"arguments":[{"id":18798,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18771,"src":"3938:12:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18797,"name":"_checkMinAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19479,"src":"3919:18:75","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":18799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3919:32:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18800,"nodeType":"ExpressionStatement","src":"3919:32:75"},{"expression":{"arguments":[{"id":18802,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18773,"src":"3976:8:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18801,"name":"_checkDeadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19464,"src":"3961:14:75","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":18803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3961:24:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18804,"nodeType":"ExpressionStatement","src":"3961:24:75"},{"expression":{"id":18810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":18805,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18695,"src":"3996:7:75","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_struct$_ShortOrder_$18669_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":18807,"indexExpression":{"id":18806,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18769,"src":"4004:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3996:16:75","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18669_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"id":18808,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4013:12:75","memberName":"minAmountOut","nodeType":"MemberAccess","referencedDeclaration":18666,"src":"3996:29:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18809,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18771,"src":"4028:12:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3996:44:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18811,"nodeType":"ExpressionStatement","src":"3996:44:75"},{"expression":{"id":18820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":18812,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18695,"src":"4050:7:75","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_struct$_ShortOrder_$18669_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":18814,"indexExpression":{"id":18813,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18769,"src":"4058:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4050:16:75","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18669_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"id":18815,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4067:8:75","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":18668,"src":"4050:25:75","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":18818,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18773,"src":"4085:8:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18817,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4078:6:75","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":18816,"name":"uint32","nodeType":"ElementaryTypeName","src":"4078:6:75","typeDescriptions":{}}},"id":18819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4078:16:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"4050:44:75","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":18821,"nodeType":"ExpressionStatement","src":"4050:44:75"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":18826,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4198:4:75","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19510","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19510","typeString":"contract CowSwapFeeBurner"}],"id":18825,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4190:7:75","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18824,"name":"address","nodeType":"ElementaryTypeName","src":"4190:7:75","typeDescriptions":{}}},"id":18827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4190:13:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18828,"name":"vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18687,"src":"4205:12:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18822,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18769,"src":"4172:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":18823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4180:9:75","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":10535,"src":"4172:17:75","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":18829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4172:46:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":18830,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18782,"src":"4221:6:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4172:55:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18840,"nodeType":"IfStatement","src":"4168:128:75","trueBody":{"id":18839,"nodeType":"Block","src":"4229:67:75","statements":[{"expression":{"arguments":[{"id":18835,"name":"vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18687,"src":"4264:12:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18836,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18782,"src":"4278:6:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18832,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18769,"src":"4243:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":18834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4251:12:75","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":10832,"src":"4243:20:75","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10558_$","typeString":"function (contract IERC20,address,uint256)"}},"id":18837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4243:42:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18838,"nodeType":"ExpressionStatement","src":"4243:42:75"}]}},{"expression":{"arguments":[{"id":18842,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18769,"src":"4322:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":18841,"name":"_createCowOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19509,"src":"4306:15:75","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$returns$__$","typeString":"function (contract IERC20)"}},"id":18843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4306:24:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18844,"nodeType":"ExpressionStatement","src":"4306:24:75"},{"eventCall":{"arguments":[{"id":18846,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18769,"src":"4359:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":18847,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18782,"src":"4368:6:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18848,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18771,"src":"4376:12:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18849,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18773,"src":"4390:8:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18845,"name":"OrderRetried","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":492,"src":"4346:12:75","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC20_$10558_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256,uint256,uint256)"}},"id":18850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4346:53:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18851,"nodeType":"EmitStatement","src":"4341:58:75"}]},"documentation":{"id":18766,"nodeType":"StructuredDocumentation","src":"3570:33:75","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"d83b06a4","id":18853,"implemented":true,"kind":"function","modifiers":[{"id":18776,"kind":"modifierInvocation","modifierName":{"id":18775,"name":"onlyFeeRecipientOrOwner","nameLocations":["3693:23:75"],"nodeType":"IdentifierPath","referencedDeclaration":19796,"src":"3693:23:75"},"nodeType":"ModifierInvocation","src":"3693:23:75"}],"name":"retryOrder","nameLocation":"3617:10:75","nodeType":"FunctionDefinition","parameters":{"id":18774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18769,"mutability":"mutable","name":"tokenIn","nameLocation":"3635:7:75","nodeType":"VariableDeclaration","scope":18853,"src":"3628:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":18768,"nodeType":"UserDefinedTypeName","pathNode":{"id":18767,"name":"IERC20","nameLocations":["3628:6:75"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"3628:6:75"},"referencedDeclaration":10558,"src":"3628:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18771,"mutability":"mutable","name":"minAmountOut","nameLocation":"3652:12:75","nodeType":"VariableDeclaration","scope":18853,"src":"3644:20:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18770,"name":"uint256","nodeType":"ElementaryTypeName","src":"3644:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18773,"mutability":"mutable","name":"deadline","nameLocation":"3674:8:75","nodeType":"VariableDeclaration","scope":18853,"src":"3666:16:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18772,"name":"uint256","nodeType":"ElementaryTypeName","src":"3666:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3627:56:75"},"returnParameters":{"id":18777,"nodeType":"ParameterList","parameters":[],"src":"3717:0:75"},"scope":19510,"src":"3608:798:75","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[556],"body":{"id":18889,"nodeType":"Block","src":"4538:248:75","statements":[{"assignments":[18866,18868],"declarations":[{"constant":false,"id":18866,"mutability":"mutable","name":"status","nameLocation":"4561:6:75","nodeType":"VariableDeclaration","scope":18889,"src":"4549:18:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":18865,"nodeType":"UserDefinedTypeName","pathNode":{"id":18864,"name":"OrderStatus","nameLocations":["4549:11:75"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"4549:11:75"},"referencedDeclaration":480,"src":"4549:11:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"},{"constant":false,"id":18868,"mutability":"mutable","name":"amount","nameLocation":"4577:6:75","nodeType":"VariableDeclaration","scope":18889,"src":"4569:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18867,"name":"uint256","nodeType":"ElementaryTypeName","src":"4569:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18872,"initialValue":{"arguments":[{"id":18870,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18857,"src":"4613:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":18869,"name":"_getOrderStatusAndBalance","nodeType":"Identifier","overloadedDeclarations":[19374,19448],"referencedDeclaration":19374,"src":"4587:25:75","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10558_$returns$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"function (contract IERC20) view returns (enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"id":18871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4587:34:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4548:73:75"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"id":18876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18873,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18866,"src":"4636:6:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":18874,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"4646:11:75","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":18875,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4658:6:75","memberName":"Failed","nodeType":"MemberAccess","referencedDeclaration":479,"src":"4646:18:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"src":"4636:28:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18882,"nodeType":"IfStatement","src":"4632:98:75","trueBody":{"id":18881,"nodeType":"Block","src":"4666:64:75","statements":[{"errorCall":{"arguments":[{"id":18878,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18866,"src":"4712:6:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}],"id":18877,"name":"OrderHasUnexpectedStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":513,"src":"4687:24:75","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_OrderStatus_$480_$returns$_t_error_$","typeString":"function (enum ICowSwapFeeBurner.OrderStatus) pure returns (error)"}},"id":18879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4687:32:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18880,"nodeType":"RevertStatement","src":"4680:39:75"}]}},{"expression":{"arguments":[{"id":18884,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18857,"src":"4753:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":18885,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18859,"src":"4762:8:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18886,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18868,"src":"4772:6:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18883,"name":"_cancelOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18951,"src":"4740:12:75","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":18887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4740:39:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18888,"nodeType":"ExpressionStatement","src":"4740:39:75"}]},"documentation":{"id":18854,"nodeType":"StructuredDocumentation","src":"4412:33:75","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"60e092c6","id":18890,"implemented":true,"kind":"function","modifiers":[{"id":18862,"kind":"modifierInvocation","modifierName":{"id":18861,"name":"onlyFeeRecipientOrOwner","nameLocations":["4514:23:75"],"nodeType":"IdentifierPath","referencedDeclaration":19796,"src":"4514:23:75"},"nodeType":"ModifierInvocation","src":"4514:23:75"}],"name":"cancelOrder","nameLocation":"4459:11:75","nodeType":"FunctionDefinition","parameters":{"id":18860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18857,"mutability":"mutable","name":"tokenIn","nameLocation":"4478:7:75","nodeType":"VariableDeclaration","scope":18890,"src":"4471:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":18856,"nodeType":"UserDefinedTypeName","pathNode":{"id":18855,"name":"IERC20","nameLocations":["4471:6:75"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"4471:6:75"},"referencedDeclaration":10558,"src":"4471:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18859,"mutability":"mutable","name":"receiver","nameLocation":"4495:8:75","nodeType":"VariableDeclaration","scope":18890,"src":"4487:16:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18858,"name":"address","nodeType":"ElementaryTypeName","src":"4487:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4470:34:75"},"returnParameters":{"id":18863,"nodeType":"ParameterList","parameters":[],"src":"4538:0:75"},"scope":19510,"src":"4450:336:75","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[565],"body":{"id":18913,"nodeType":"Block","src":"4927:82:75","statements":[{"expression":{"arguments":[{"id":18902,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18894,"src":"4950:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":18903,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18896,"src":"4959:8:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":18908,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4995:4:75","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19510","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19510","typeString":"contract CowSwapFeeBurner"}],"id":18907,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4987:7:75","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18906,"name":"address","nodeType":"ElementaryTypeName","src":"4987:7:75","typeDescriptions":{}}},"id":18909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4987:13:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18904,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18894,"src":"4969:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":18905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4977:9:75","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10515,"src":"4969:17:75","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":18910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4969:32:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18901,"name":"_cancelOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18951,"src":"4937:12:75","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":18911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4937:65:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18912,"nodeType":"ExpressionStatement","src":"4937:65:75"}]},"documentation":{"id":18891,"nodeType":"StructuredDocumentation","src":"4792:33:75","text":"@inheritdoc ICowSwapFeeBurner"},"functionSelector":"68bce712","id":18914,"implemented":true,"kind":"function","modifiers":[{"id":18899,"kind":"modifierInvocation","modifierName":{"id":18898,"name":"onlyFeeRecipientOrOwner","nameLocations":["4903:23:75"],"nodeType":"IdentifierPath","referencedDeclaration":19796,"src":"4903:23:75"},"nodeType":"ModifierInvocation","src":"4903:23:75"}],"name":"emergencyCancelOrder","nameLocation":"4839:20:75","nodeType":"FunctionDefinition","parameters":{"id":18897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18894,"mutability":"mutable","name":"tokenIn","nameLocation":"4867:7:75","nodeType":"VariableDeclaration","scope":18914,"src":"4860:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":18893,"nodeType":"UserDefinedTypeName","pathNode":{"id":18892,"name":"IERC20","nameLocations":["4860:6:75"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"4860:6:75"},"referencedDeclaration":10558,"src":"4860:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18896,"mutability":"mutable","name":"receiver","nameLocation":"4884:8:75","nodeType":"VariableDeclaration","scope":18914,"src":"4876:16:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18895,"name":"address","nodeType":"ElementaryTypeName","src":"4876:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4859:34:75"},"returnParameters":{"id":18900,"nodeType":"ParameterList","parameters":[],"src":"4927:0:75"},"scope":19510,"src":"4830:179:75","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18950,"nodeType":"Block","src":"5096:203:75","statements":[{"expression":{"arguments":[{"id":18927,"name":"vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18687,"src":"5127:12:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":18928,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5141:1:75","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":18924,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18917,"src":"5106:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":18926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5114:12:75","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":10832,"src":"5106:20:75","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10558_$","typeString":"function (contract IERC20,address,uint256)"}},"id":18929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5106:37:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18930,"nodeType":"ExpressionStatement","src":"5106:37:75"},{"expression":{"id":18934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"5153:23:75","subExpression":{"baseExpression":{"id":18931,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18695,"src":"5160:7:75","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_struct$_ShortOrder_$18669_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":18933,"indexExpression":{"id":18932,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18917,"src":"5168:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5160:16:75","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18669_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18935,"nodeType":"ExpressionStatement","src":"5153:23:75"},{"expression":{"arguments":[{"id":18939,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18917,"src":"5210:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":18940,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18919,"src":"5219:8:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18941,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18921,"src":"5229:6:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18936,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11048,"src":"5187:9:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeERC20_$11048_$","typeString":"type(library SafeERC20)"}},"id":18938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5197:12:75","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10629,"src":"5187:22:75","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":18942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5187:49:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18943,"nodeType":"ExpressionStatement","src":"5187:49:75"},{"eventCall":{"arguments":[{"id":18945,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18917,"src":"5266:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":18946,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18921,"src":"5275:6:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18947,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18919,"src":"5283:8:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18944,"name":"OrderCanceled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":502,"src":"5252:13:75","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC20_$10558_$_t_uint256_$_t_address_$returns$__$","typeString":"function (contract IERC20,uint256,address)"}},"id":18948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5252:40:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18949,"nodeType":"EmitStatement","src":"5247:45:75"}]},"id":18951,"implemented":true,"kind":"function","modifiers":[],"name":"_cancelOrder","nameLocation":"5024:12:75","nodeType":"FunctionDefinition","parameters":{"id":18922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18917,"mutability":"mutable","name":"tokenIn","nameLocation":"5044:7:75","nodeType":"VariableDeclaration","scope":18951,"src":"5037:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":18916,"nodeType":"UserDefinedTypeName","pathNode":{"id":18915,"name":"IERC20","nameLocations":["5037:6:75"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"5037:6:75"},"referencedDeclaration":10558,"src":"5037:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18919,"mutability":"mutable","name":"receiver","nameLocation":"5061:8:75","nodeType":"VariableDeclaration","scope":18951,"src":"5053:16:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18918,"name":"address","nodeType":"ElementaryTypeName","src":"5053:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18921,"mutability":"mutable","name":"amount","nameLocation":"5079:6:75","nodeType":"VariableDeclaration","scope":18951,"src":"5071:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18920,"name":"uint256","nodeType":"ElementaryTypeName","src":"5071:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5036:50:75"},"returnParameters":{"id":18923,"nodeType":"ParameterList","parameters":[],"src":"5096:0:75"},"scope":19510,"src":"5015:284:75","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[947],"body":{"id":18986,"nodeType":"Block","src":"5839:248:75","statements":[{"expression":{"arguments":[{"id":18976,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18954,"src":"5868:4:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18977,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18957,"src":"5886:8:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":18978,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18959,"src":"5908:21:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18979,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18962,"src":"5943:11:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":18980,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18964,"src":"5968:23:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18981,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18966,"src":"6005:9:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18982,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18968,"src":"6028:8:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":18983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6050:4:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":18975,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19107,"src":"5849:5:75","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10558_$_t_uint256_$_t_contract$_IERC20_$10558_$_t_uint256_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address,uint256,bool)"}},"id":18984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5849:231:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18985,"nodeType":"ExpressionStatement","src":"5849:231:75"}]},"documentation":{"id":18952,"nodeType":"StructuredDocumentation","src":"5519:34:75","text":"@inheritdoc IProtocolFeeBurner"},"functionSelector":"de557a32","id":18987,"implemented":true,"kind":"function","modifiers":[{"id":18971,"kind":"modifierInvocation","modifierName":{"id":18970,"name":"onlyProtocolFeeSweeper","nameLocations":["5803:22:75"],"nodeType":"IdentifierPath","referencedDeclaration":19775,"src":"5803:22:75"},"nodeType":"ModifierInvocation","src":"5803:22:75"},{"id":18973,"kind":"modifierInvocation","modifierName":{"id":18972,"name":"nonReentrant","nameLocations":["5826:12:75"],"nodeType":"IdentifierPath","referencedDeclaration":6949,"src":"5826:12:75"},"nodeType":"ModifierInvocation","src":"5826:12:75"}],"name":"burn","nameLocation":"5567:4:75","nodeType":"FunctionDefinition","parameters":{"id":18969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18954,"mutability":"mutable","name":"pool","nameLocation":"5589:4:75","nodeType":"VariableDeclaration","scope":18987,"src":"5581:12:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18953,"name":"address","nodeType":"ElementaryTypeName","src":"5581:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18957,"mutability":"mutable","name":"feeToken","nameLocation":"5610:8:75","nodeType":"VariableDeclaration","scope":18987,"src":"5603:15:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":18956,"nodeType":"UserDefinedTypeName","pathNode":{"id":18955,"name":"IERC20","nameLocations":["5603:6:75"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"5603:6:75"},"referencedDeclaration":10558,"src":"5603:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18959,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"5636:21:75","nodeType":"VariableDeclaration","scope":18987,"src":"5628:29:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18958,"name":"uint256","nodeType":"ElementaryTypeName","src":"5628:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18962,"mutability":"mutable","name":"targetToken","nameLocation":"5674:11:75","nodeType":"VariableDeclaration","scope":18987,"src":"5667:18:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":18961,"nodeType":"UserDefinedTypeName","pathNode":{"id":18960,"name":"IERC20","nameLocations":["5667:6:75"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"5667:6:75"},"referencedDeclaration":10558,"src":"5667:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18964,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"5703:23:75","nodeType":"VariableDeclaration","scope":18987,"src":"5695:31:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18963,"name":"uint256","nodeType":"ElementaryTypeName","src":"5695:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18966,"mutability":"mutable","name":"recipient","nameLocation":"5744:9:75","nodeType":"VariableDeclaration","scope":18987,"src":"5736:17:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18965,"name":"address","nodeType":"ElementaryTypeName","src":"5736:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18968,"mutability":"mutable","name":"deadline","nameLocation":"5771:8:75","nodeType":"VariableDeclaration","scope":18987,"src":"5763:16:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18967,"name":"uint256","nodeType":"ElementaryTypeName","src":"5763:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5571:214:75"},"returnParameters":{"id":18974,"nodeType":"ParameterList","parameters":[],"src":"5839:0:75"},"scope":19510,"src":"5558:529:75","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":19106,"nodeType":"Block","src":"6351:1294:75","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"id":19010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19008,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18997,"src":"6365:11:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":19009,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18992,"src":"6380:8:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"src":"6365:23:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19016,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18994,"src":"6497:14:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19017,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6515:1:75","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6497:19:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19024,"nodeType":"IfStatement","src":"6493:107:75","trueBody":{"id":19023,"nodeType":"Block","src":"6518:82:75","statements":[{"errorCall":{"arguments":[{"hexValue":"46656520746f6b656e20616d6f756e74206973207a65726f","id":19020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6562:26:75","typeDescriptions":{"typeIdentifier":"t_stringliteral_b445072e620860f3c79effa94f581ab6f5797ea12e86e8179c8038523c5a8d3b","typeString":"literal_string \"Fee token amount is zero\""},"value":"Fee token amount is zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_b445072e620860f3c79effa94f581ab6f5797ea12e86e8179c8038523c5a8d3b","typeString":"literal_string \"Fee token amount is zero\""}],"id":19019,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":507,"src":"6539:22:75","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":19021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6539:50:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19022,"nodeType":"RevertStatement","src":"6532:57:75"}]}},"id":19025,"nodeType":"IfStatement","src":"6361:239:75","trueBody":{"id":19015,"nodeType":"Block","src":"6390:97:75","statements":[{"errorCall":{"arguments":[{"hexValue":"46656520746f6b656e20616e642074617267657420746f6b656e20617265207468652073616d65","id":19012,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6434:41:75","typeDescriptions":{"typeIdentifier":"t_stringliteral_6f1e2122d98657c4f58b636400b0d4c24b5cda47622dbb3183030f888f336810","typeString":"literal_string \"Fee token and target token are the same\""},"value":"Fee token and target token are the same"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_6f1e2122d98657c4f58b636400b0d4c24b5cda47622dbb3183030f888f336810","typeString":"literal_string \"Fee token and target token are the same\""}],"id":19011,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":507,"src":"6411:22:75","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":19013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6411:65:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19014,"nodeType":"RevertStatement","src":"6404:72:75"}]}},{"expression":{"arguments":[{"id":19027,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18999,"src":"6629:23:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19026,"name":"_checkMinAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19479,"src":"6610:18:75","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":19028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6610:43:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19029,"nodeType":"ExpressionStatement","src":"6610:43:75"},{"expression":{"arguments":[{"id":19031,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19003,"src":"6678:8:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19030,"name":"_checkDeadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19464,"src":"6663:14:75","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":19032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6663:24:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19033,"nodeType":"ExpressionStatement","src":"6663:24:75"},{"condition":{"id":19034,"name":"pullFeeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19005,"src":"6702:12:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19048,"nodeType":"IfStatement","src":"6698:111:75","trueBody":{"id":19047,"nodeType":"Block","src":"6716:93:75","statements":[{"expression":{"arguments":[{"expression":{"id":19038,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6756:3:75","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6760:6:75","memberName":"sender","nodeType":"MemberAccess","src":"6756:10:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":19042,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6776:4:75","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19510","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19510","typeString":"contract CowSwapFeeBurner"}],"id":19041,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6768:7:75","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19040,"name":"address","nodeType":"ElementaryTypeName","src":"6768:7:75","typeDescriptions":{}}},"id":19043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6768:13:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19044,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18994,"src":"6783:14:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19035,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18992,"src":"6730:8:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":19037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6739:16:75","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":10656,"src":"6730:25:75","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10558_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":19045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6730:68:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19046,"nodeType":"ExpressionStatement","src":"6730:68:75"}]}},{"assignments":[19051,null],"declarations":[{"constant":false,"id":19051,"mutability":"mutable","name":"status","nameLocation":"6832:6:75","nodeType":"VariableDeclaration","scope":19106,"src":"6820:18:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":19050,"nodeType":"UserDefinedTypeName","pathNode":{"id":19049,"name":"OrderStatus","nameLocations":["6820:11:75"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"6820:11:75"},"referencedDeclaration":480,"src":"6820:11:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"},null],"id":19056,"initialValue":{"arguments":[{"id":19053,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18992,"src":"6870:8:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":19054,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18994,"src":"6880:14:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19052,"name":"_getOrderStatusAndBalance","nodeType":"Identifier","overloadedDeclarations":[19374,19448],"referencedDeclaration":19448,"src":"6844:25:75","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10558_$_t_uint256_$returns$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"function (contract IERC20,uint256) view returns (enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"id":19055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6844:51:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"6819:76:75"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"id":19060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19057,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19051,"src":"6909:6:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":19058,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"6919:11:75","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":19059,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6931:11:75","memberName":"Nonexistent","nodeType":"MemberAccess","referencedDeclaration":476,"src":"6919:23:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"src":"6909:33:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"id":19064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19061,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19051,"src":"6946:6:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":19062,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"6956:11:75","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":19063,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6968:6:75","memberName":"Filled","nodeType":"MemberAccess","referencedDeclaration":478,"src":"6956:18:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"src":"6946:28:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6909:65:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19071,"nodeType":"IfStatement","src":"6905:310:75","trueBody":{"id":19070,"nodeType":"Block","src":"6976:239:75","statements":[{"errorCall":{"arguments":[{"id":19067,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19051,"src":"7197:6:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}],"id":19066,"name":"OrderHasUnexpectedStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":513,"src":"7172:24:75","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_enum$_OrderStatus_$480_$returns$_t_error_$","typeString":"function (enum ICowSwapFeeBurner.OrderStatus) pure returns (error)"}},"id":19068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7172:32:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19069,"nodeType":"RevertStatement","src":"7165:39:75"}]}},{"expression":{"arguments":[{"id":19073,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18992,"src":"7241:8:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":19072,"name":"_createCowOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19509,"src":"7225:15:75","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$returns$__$","typeString":"function (contract IERC20)"}},"id":19074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7225:25:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19075,"nodeType":"ExpressionStatement","src":"7225:25:75"},{"expression":{"arguments":[{"id":19079,"name":"vaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18687,"src":"7283:12:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19080,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18994,"src":"7297:14:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19076,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18992,"src":"7261:8:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":19078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7270:12:75","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":10832,"src":"7261:21:75","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10558_$","typeString":"function (contract IERC20,address,uint256)"}},"id":19081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7261:51:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19082,"nodeType":"ExpressionStatement","src":"7261:51:75"},{"expression":{"id":19095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":19083,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18695,"src":"7323:7:75","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_struct$_ShortOrder_$18669_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":19085,"indexExpression":{"id":19084,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18992,"src":"7331:8:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7323:17:75","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18669_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19087,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18997,"src":"7378:11:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":19088,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19001,"src":"7413:9:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19089,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18999,"src":"7450:23:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":19092,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19003,"src":"7504:8:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19091,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7497:6:75","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":19090,"name":"uint32","nodeType":"ElementaryTypeName","src":"7497:6:75","typeDescriptions":{}}},"id":19093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7497:16:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":19086,"name":"ShortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18669,"src":"7343:10:75","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ShortOrder_$18669_storage_ptr_$","typeString":"type(struct CowSwapFeeBurner.ShortOrder storage pointer)"}},"id":19094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["7368:8:75","7403:8:75","7436:12:75","7487:8:75"],"names":["tokenOut","receiver","minAmountOut","deadline"],"nodeType":"FunctionCall","src":"7343:181:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18669_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"src":"7323:201:75","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18669_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"id":19096,"nodeType":"ExpressionStatement","src":"7323:201:75"},{"eventCall":{"arguments":[{"id":19098,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18989,"src":"7558:4:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19099,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18992,"src":"7564:8:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":19100,"name":"feeTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18994,"src":"7574:14:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19101,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18997,"src":"7590:11:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":19102,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18999,"src":"7603:23:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19103,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19001,"src":"7628:9:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":19097,"name":"ProtocolFeeBurned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":914,"src":"7540:17:75","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10558_$_t_uint256_$_t_contract$_IERC20_$10558_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address)"}},"id":19104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7540:98:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19105,"nodeType":"EmitStatement","src":"7535:103:75"}]},"id":19107,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"6102:5:75","nodeType":"FunctionDefinition","parameters":{"id":19006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18989,"mutability":"mutable","name":"pool","nameLocation":"6125:4:75","nodeType":"VariableDeclaration","scope":19107,"src":"6117:12:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18988,"name":"address","nodeType":"ElementaryTypeName","src":"6117:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18992,"mutability":"mutable","name":"feeToken","nameLocation":"6146:8:75","nodeType":"VariableDeclaration","scope":19107,"src":"6139:15:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":18991,"nodeType":"UserDefinedTypeName","pathNode":{"id":18990,"name":"IERC20","nameLocations":["6139:6:75"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"6139:6:75"},"referencedDeclaration":10558,"src":"6139:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18994,"mutability":"mutable","name":"feeTokenAmount","nameLocation":"6172:14:75","nodeType":"VariableDeclaration","scope":19107,"src":"6164:22:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18993,"name":"uint256","nodeType":"ElementaryTypeName","src":"6164:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18997,"mutability":"mutable","name":"targetToken","nameLocation":"6203:11:75","nodeType":"VariableDeclaration","scope":19107,"src":"6196:18:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":18996,"nodeType":"UserDefinedTypeName","pathNode":{"id":18995,"name":"IERC20","nameLocations":["6196:6:75"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"6196:6:75"},"referencedDeclaration":10558,"src":"6196:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18999,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"6232:23:75","nodeType":"VariableDeclaration","scope":19107,"src":"6224:31:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18998,"name":"uint256","nodeType":"ElementaryTypeName","src":"6224:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19001,"mutability":"mutable","name":"recipient","nameLocation":"6273:9:75","nodeType":"VariableDeclaration","scope":19107,"src":"6265:17:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19000,"name":"address","nodeType":"ElementaryTypeName","src":"6265:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19003,"mutability":"mutable","name":"deadline","nameLocation":"6300:8:75","nodeType":"VariableDeclaration","scope":19107,"src":"6292:16:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19002,"name":"uint256","nodeType":"ElementaryTypeName","src":"6292:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19005,"mutability":"mutable","name":"pullFeeToken","nameLocation":"6323:12:75","nodeType":"VariableDeclaration","scope":19107,"src":"6318:17:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19004,"name":"bool","nodeType":"ElementaryTypeName","src":"6318:4:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6107:234:75"},"returnParameters":{"id":19007,"nodeType":"ParameterList","parameters":[],"src":"6351:0:75"},"scope":19510,"src":"6093:1552:75","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[453],"body":{"id":19141,"nodeType":"Block","src":"8100:112:75","statements":[{"assignments":[19126],"declarations":[{"constant":false,"id":19126,"mutability":"mutable","name":"tokenIn","nameLocation":"8117:7:75","nodeType":"VariableDeclaration","scope":19141,"src":"8110:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":19125,"nodeType":"UserDefinedTypeName","pathNode":{"id":19124,"name":"IERC20","nameLocations":["8110:6:75"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"8110:6:75"},"referencedDeclaration":10558,"src":"8110:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"id":19136,"initialValue":{"arguments":[{"arguments":[{"id":19130,"name":"staticInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19116,"src":"8145:11:75","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"components":[{"id":19132,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8159:7:75","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19131,"name":"address","nodeType":"ElementaryTypeName","src":"8159:7:75","typeDescriptions":{}}}],"id":19133,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"8158:9:75","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}],"expression":{"id":19128,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8134:3:75","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19129,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8138:6:75","memberName":"decode","nodeType":"MemberAccess","src":"8134:10:75","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":19134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8134:34:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":19127,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"8127:6:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10558_$","typeString":"type(contract IERC20)"}},"id":19135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8127:42:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"8110:59:75"},{"expression":{"arguments":[{"id":19138,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19126,"src":"8197:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":19137,"name":"_getOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19357,"src":"8187:9:75","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10558_$returns$_t_struct$_GPv2Order_$357_memory_ptr_$","typeString":"function (contract IERC20) view returns (struct GPv2Order memory)"}},"id":19139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8187:18:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}},"functionReturnParameters":19123,"id":19140,"nodeType":"Return","src":"8180:25:75"}]},"documentation":{"id":19108,"nodeType":"StructuredDocumentation","src":"7867:45:75","text":"@inheritdoc ICowConditionalOrderGenerator"},"functionSelector":"b8296fc4","id":19142,"implemented":true,"kind":"function","modifiers":[],"name":"getTradeableOrder","nameLocation":"7926:17:75","nodeType":"FunctionDefinition","parameters":{"id":19119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19110,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19142,"src":"7953:7:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19109,"name":"address","nodeType":"ElementaryTypeName","src":"7953:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19112,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19142,"src":"7970:7:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19111,"name":"address","nodeType":"ElementaryTypeName","src":"7970:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19114,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19142,"src":"7987:7:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19113,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7987:7:75","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19116,"mutability":"mutable","name":"staticInput","nameLocation":"8019:11:75","nodeType":"VariableDeclaration","scope":19142,"src":"8004:26:75","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":19115,"name":"bytes","nodeType":"ElementaryTypeName","src":"8004:5:75","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19118,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19142,"src":"8040:14:75","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":19117,"name":"bytes","nodeType":"ElementaryTypeName","src":"8040:5:75","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7943:117:75"},"returnParameters":{"id":19123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19122,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19142,"src":"8082:16:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":19121,"nodeType":"UserDefinedTypeName","pathNode":{"id":19120,"name":"GPv2Order","nameLocations":["8082:9:75"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"8082:9:75"},"referencedDeclaration":357,"src":"8082:9:75","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"8081:18:75"},"scope":19510,"src":"7917:295:75","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[417],"body":{"id":19207,"nodeType":"Block","src":"8506:418:75","statements":[{"assignments":[19165],"declarations":[{"constant":false,"id":19165,"mutability":"mutable","name":"savedOrder","nameLocation":"8533:10:75","nodeType":"VariableDeclaration","scope":19207,"src":"8516:27:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":19164,"nodeType":"UserDefinedTypeName","pathNode":{"id":19163,"name":"GPv2Order","nameLocations":["8516:9:75"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"8516:9:75"},"referencedDeclaration":357,"src":"8516:9:75","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"id":19173,"initialValue":{"arguments":[{"id":19167,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19145,"src":"8564:5:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19168,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19147,"src":"8571:6:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19169,"name":"ctx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19153,"src":"8579:3:75","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":19170,"name":"staticInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19155,"src":"8584:11:75","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":19171,"name":"offchainInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19157,"src":"8597:13:75","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":19166,"name":"getTradeableOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19142,"src":"8546:17:75","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_bytes32_$_t_bytes_calldata_ptr_$_t_bytes_calldata_ptr_$returns$_t_struct$_GPv2Order_$357_memory_ptr_$","typeString":"function (address,address,bytes32,bytes calldata,bytes calldata) view returns (struct GPv2Order memory)"}},"id":19172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8546:65:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}},"nodeType":"VariableDeclarationStatement","src":"8516:95:75"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19174,"name":"_order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19160,"src":"8626:6:75","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_calldata_ptr","typeString":"struct GPv2Order calldata"}},"id":19175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8633:9:75","memberName":"buyAmount","nodeType":"MemberAccess","referencedDeclaration":342,"src":"8626:16:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":19176,"name":"savedOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19165,"src":"8645:10:75","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}},"id":19177,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8656:9:75","memberName":"buyAmount","nodeType":"MemberAccess","referencedDeclaration":342,"src":"8645:20:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8626:39:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19187,"nodeType":"IfStatement","src":"8622:109:75","trueBody":{"id":19186,"nodeType":"Block","src":"8667:64:75","statements":[{"expression":{"id":19184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19179,"name":"savedOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19165,"src":"8681:10:75","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}},"id":19181,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8692:9:75","memberName":"buyAmount","nodeType":"MemberAccess","referencedDeclaration":342,"src":"8681:20:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":19182,"name":"_order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19160,"src":"8704:6:75","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_calldata_ptr","typeString":"struct GPv2Order calldata"}},"id":19183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8711:9:75","memberName":"buyAmount","nodeType":"MemberAccess","referencedDeclaration":342,"src":"8704:16:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8681:39:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19185,"nodeType":"ExpressionStatement","src":"8681:39:75"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":19200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":19191,"name":"savedOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19165,"src":"8766:10:75","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}],"expression":{"id":19189,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8755:3:75","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19190,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8759:6:75","memberName":"encode","nodeType":"MemberAccess","src":"8755:10:75","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":19192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8755:22:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":19188,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8745:9:75","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":19193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8745:33:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"arguments":[{"id":19197,"name":"_order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19160,"src":"8803:6:75","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_calldata_ptr","typeString":"struct GPv2Order calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_GPv2Order_$357_calldata_ptr","typeString":"struct GPv2Order calldata"}],"expression":{"id":19195,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8792:3:75","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19196,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8796:6:75","memberName":"encode","nodeType":"MemberAccess","src":"8792:10:75","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":19198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8792:18:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":19194,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8782:9:75","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":19199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8782:29:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8745:66:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19206,"nodeType":"IfStatement","src":"8741:177:75","trueBody":{"id":19205,"nodeType":"Block","src":"8813:105:75","statements":[{"errorCall":{"arguments":[{"hexValue":"566572696679206f7264657220646f6573206e6f74206d617463682077697468206578697374696e67206f72646572","id":19202,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8857:49:75","typeDescriptions":{"typeIdentifier":"t_stringliteral_3f6784218a78441e96d7b8e76c001b98428b2ffe16b12c01b01268c6807c247f","typeString":"literal_string \"Verify order does not match with existing order\""},"value":"Verify order does not match with existing order"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_3f6784218a78441e96d7b8e76c001b98428b2ffe16b12c01b01268c6807c247f","typeString":"literal_string \"Verify order does not match with existing order\""}],"id":19201,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":507,"src":"8834:22:75","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":19203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8834:73:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19204,"nodeType":"RevertStatement","src":"8827:80:75"}]}}]},"documentation":{"id":19143,"nodeType":"StructuredDocumentation","src":"8218:36:75","text":"@inheritdoc ICowConditionalOrder"},"functionSelector":"14a2a784","id":19208,"implemented":true,"kind":"function","modifiers":[],"name":"verify","nameLocation":"8268:6:75","nodeType":"FunctionDefinition","parameters":{"id":19161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19145,"mutability":"mutable","name":"owner","nameLocation":"8292:5:75","nodeType":"VariableDeclaration","scope":19208,"src":"8284:13:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19144,"name":"address","nodeType":"ElementaryTypeName","src":"8284:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19147,"mutability":"mutable","name":"sender","nameLocation":"8315:6:75","nodeType":"VariableDeclaration","scope":19208,"src":"8307:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19146,"name":"address","nodeType":"ElementaryTypeName","src":"8307:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19149,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19208,"src":"8331:7:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19148,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8331:7:75","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19151,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19208,"src":"8348:7:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19150,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8348:7:75","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19153,"mutability":"mutable","name":"ctx","nameLocation":"8373:3:75","nodeType":"VariableDeclaration","scope":19208,"src":"8365:11:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19152,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8365:7:75","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19155,"mutability":"mutable","name":"staticInput","nameLocation":"8401:11:75","nodeType":"VariableDeclaration","scope":19208,"src":"8386:26:75","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":19154,"name":"bytes","nodeType":"ElementaryTypeName","src":"8386:5:75","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19157,"mutability":"mutable","name":"offchainInput","nameLocation":"8437:13:75","nodeType":"VariableDeclaration","scope":19208,"src":"8422:28:75","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":19156,"name":"bytes","nodeType":"ElementaryTypeName","src":"8422:5:75","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":19160,"mutability":"mutable","name":"_order","nameLocation":"8479:6:75","nodeType":"VariableDeclaration","scope":19208,"src":"8460:25:75","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_calldata_ptr","typeString":"struct GPv2Order"},"typeName":{"id":19159,"nodeType":"UserDefinedTypeName","pathNode":{"id":19158,"name":"GPv2Order","nameLocations":["8460:9:75"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"8460:9:75"},"referencedDeclaration":357,"src":"8460:9:75","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"8274:217:75"},"returnParameters":{"id":19162,"nodeType":"ParameterList","parameters":[],"src":"8506:0:75"},"scope":19510,"src":"8259:665:75","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[9567],"body":{"id":19259,"nodeType":"Block","src":"9268:530:75","statements":[{"assignments":[19220,19223],"declarations":[{"constant":false,"id":19220,"mutability":"mutable","name":"order","nameLocation":"9296:5:75","nodeType":"VariableDeclaration","scope":19259,"src":"9279:22:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":19219,"nodeType":"UserDefinedTypeName","pathNode":{"id":19218,"name":"GPv2Order","nameLocations":["9279:9:75"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"9279:9:75"},"referencedDeclaration":357,"src":"9279:9:75","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"},{"constant":false,"id":19223,"mutability":"mutable","name":"payload","nameLocation":"9333:7:75","nodeType":"VariableDeclaration","scope":19259,"src":"9303:37:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Payload_$291_memory_ptr","typeString":"struct IComposableCow.Payload"},"typeName":{"id":19222,"nodeType":"UserDefinedTypeName","pathNode":{"id":19221,"name":"IComposableCow.Payload","nameLocations":["9303:14:75","9318:7:75"],"nodeType":"IdentifierPath","referencedDeclaration":291,"src":"9303:22:75"},"referencedDeclaration":291,"src":"9303:22:75","typeDescriptions":{"typeIdentifier":"t_struct$_Payload_$291_storage_ptr","typeString":"struct IComposableCow.Payload"}},"visibility":"internal"}],"id":19232,"initialValue":{"arguments":[{"id":19226,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19213,"src":"9368:9:75","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":19227,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":357,"src":"9392:9:75","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_GPv2Order_$357_storage_ptr_$","typeString":"type(struct GPv2Order storage pointer)"}},{"expression":{"id":19228,"name":"IComposableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":326,"src":"9403:14:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IComposableCow_$326_$","typeString":"type(contract IComposableCow)"}},"id":19229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9418:7:75","memberName":"Payload","nodeType":"MemberAccess","referencedDeclaration":291,"src":"9403:22:75","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Payload_$291_storage_ptr_$","typeString":"type(struct IComposableCow.Payload storage pointer)"}}],"id":19230,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9391:35:75","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_struct$_GPv2Order_$357_storage_ptr_$_$_t_type$_t_struct$_Payload_$291_storage_ptr_$_$","typeString":"tuple(type(struct GPv2Order storage pointer),type(struct IComposableCow.Payload storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_struct$_GPv2Order_$357_storage_ptr_$_$_t_type$_t_struct$_Payload_$291_storage_ptr_$_$","typeString":"tuple(type(struct GPv2Order storage pointer),type(struct IComposableCow.Payload storage pointer))"}],"expression":{"id":19224,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"9344:3:75","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19225,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9348:6:75","memberName":"decode","nodeType":"MemberAccess","src":"9344:10:75","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":19231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9344:92:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_struct$_GPv2Order_$357_memory_ptr_$_t_struct$_Payload_$291_memory_ptr_$","typeString":"tuple(struct GPv2Order memory,struct IComposableCow.Payload memory)"}},"nodeType":"VariableDeclarationStatement","src":"9278:158:75"},{"expression":{"arguments":[{"arguments":[{"id":19237,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9572:4:75","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19510","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19510","typeString":"contract CowSwapFeeBurner"}],"id":19236,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9564:7:75","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19235,"name":"address","nodeType":"ElementaryTypeName","src":"9564:7:75","typeDescriptions":{}}},"id":19238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9564:13:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19239,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9595:3:75","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9599:6:75","memberName":"sender","nodeType":"MemberAccess","src":"9595:10:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19241,"name":"_hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19211,"src":"9623:5:75","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19242,"name":"composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18685,"src":"9646:13:75","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"id":19243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9660:15:75","memberName":"domainSeparator","nodeType":"MemberAccess","referencedDeclaration":305,"src":"9646:29:75","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":19244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9646:31:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"hexValue":"30","id":19247,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9703:1:75","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":19246,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9695:7:75","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":19245,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9695:7:75","typeDescriptions":{}}},"id":19248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9695:10:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":19251,"name":"order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19220,"src":"9734:5:75","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}],"expression":{"id":19249,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"9723:3:75","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19250,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9727:6:75","memberName":"encode","nodeType":"MemberAccess","src":"9723:10:75","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":19252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9723:17:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"arguments":[{"id":19255,"name":"payload","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19223,"src":"9769:7:75","typeDescriptions":{"typeIdentifier":"t_struct$_Payload_$291_memory_ptr","typeString":"struct IComposableCow.Payload memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Payload_$291_memory_ptr","typeString":"struct IComposableCow.Payload memory"}],"expression":{"id":19253,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"9758:3:75","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19254,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9762:6:75","memberName":"encode","nodeType":"MemberAccess","src":"9758:10:75","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":19256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9758:19:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":19233,"name":"composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18685,"src":"9512:13:75","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"id":19234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9526:20:75","memberName":"isValidSafeSignature","nodeType":"MemberAccess","referencedDeclaration":325,"src":"9512:34:75","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$_t_bytes32_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes4_$","typeString":"function (address,address,bytes32,bytes32,bytes32,bytes memory,bytes memory) view external returns (bytes4)"}},"id":19257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9512:279:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"functionReturnParameters":19217,"id":19258,"nodeType":"Return","src":"9493:298:75"}]},"documentation":{"id":19209,"nodeType":"StructuredDocumentation","src":"9143:24:75","text":"@inheritdoc IERC1271"},"functionSelector":"1626ba7e","id":19260,"implemented":true,"kind":"function","modifiers":[],"name":"isValidSignature","nameLocation":"9181:16:75","nodeType":"FunctionDefinition","parameters":{"id":19214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19211,"mutability":"mutable","name":"_hash","nameLocation":"9206:5:75","nodeType":"VariableDeclaration","scope":19260,"src":"9198:13:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19210,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9198:7:75","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19213,"mutability":"mutable","name":"signature","nameLocation":"9226:9:75","nodeType":"VariableDeclaration","scope":19260,"src":"9213:22:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19212,"name":"bytes","nodeType":"ElementaryTypeName","src":"9213:5:75","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9197:39:75"},"returnParameters":{"id":19217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19216,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19260,"src":"9260:6:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":19215,"name":"bytes4","nodeType":"ElementaryTypeName","src":"9260:6:75","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"9259:8:75"},"scope":19510,"src":"9172:626:75","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[12687],"body":{"id":19304,"nodeType":"Block","src":"9906:504:75","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":19270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19268,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19263,"src":"10011:11:75","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":19269,"name":"_SIGNATURE_VERIFIER_MUXER_INTERFACE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18672,"src":"10026:35:75","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10011:50:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19275,"nodeType":"IfStatement","src":"10007:123:75","trueBody":{"id":19274,"nodeType":"Block","src":"10063:67:75","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19271,"name":"InterfaceIsSignatureVerifierMuxer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":516,"src":"10084:33:75","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10084:35:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19273,"nodeType":"RevertStatement","src":"10077:42:75"}]}},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":19281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19276,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19263,"src":"10159:11:75","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":19278,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"10179:20:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrder_$418_$","typeString":"type(contract ICowConditionalOrder)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrder_$418_$","typeString":"type(contract ICowConditionalOrder)"}],"id":19277,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10174:4:75","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":19279,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10174:26:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_ICowConditionalOrder_$418","typeString":"type(contract ICowConditionalOrder)"}},"id":19280,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10201:11:75","memberName":"interfaceId","nodeType":"MemberAccess","src":"10174:38:75","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10159:53:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":19287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19282,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19263,"src":"10228:11:75","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":19284,"name":"ICowConditionalOrderGenerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":454,"src":"10248:29:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrderGenerator_$454_$","typeString":"type(contract ICowConditionalOrderGenerator)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrderGenerator_$454_$","typeString":"type(contract ICowConditionalOrderGenerator)"}],"id":19283,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10243:4:75","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":19285,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10243:35:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_ICowConditionalOrderGenerator_$454","typeString":"type(contract ICowConditionalOrderGenerator)"}},"id":19286,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10279:11:75","memberName":"interfaceId","nodeType":"MemberAccess","src":"10243:47:75","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10228:62:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10159:131:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":19294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19289,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19263,"src":"10306:11:75","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":19291,"name":"IERC1271","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9568,"src":"10326:8:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC1271_$9568_$","typeString":"type(contract IERC1271)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC1271_$9568_$","typeString":"type(contract IERC1271)"}],"id":19290,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10321:4:75","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":19292,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10321:14:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC1271_$9568","typeString":"type(contract IERC1271)"}},"id":19293,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10336:11:75","memberName":"interfaceId","nodeType":"MemberAccess","src":"10321:26:75","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10306:41:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10159:188:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":19301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19296,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19263,"src":"10363:11:75","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":19298,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12688,"src":"10383:7:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC165_$12688_$","typeString":"type(contract IERC165)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC165_$12688_$","typeString":"type(contract IERC165)"}],"id":19297,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10378:4:75","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":19299,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10378:13:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC165_$12688","typeString":"type(contract IERC165)"}},"id":19300,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10392:11:75","memberName":"interfaceId","nodeType":"MemberAccess","src":"10378:25:75","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"10363:40:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10159:244:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":19267,"id":19303,"nodeType":"Return","src":"10140:263:75"}]},"documentation":{"id":19261,"nodeType":"StructuredDocumentation","src":"9804:23:75","text":"@inheritdoc IERC165"},"functionSelector":"01ffc9a7","id":19305,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"9841:17:75","nodeType":"FunctionDefinition","parameters":{"id":19264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19263,"mutability":"mutable","name":"interfaceId","nameLocation":"9866:11:75","nodeType":"VariableDeclaration","scope":19305,"src":"9859:18:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":19262,"name":"bytes4","nodeType":"ElementaryTypeName","src":"9859:6:75","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"9858:20:75"},"returnParameters":{"id":19267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19266,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19305,"src":"9900:4:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19265,"name":"bool","nodeType":"ElementaryTypeName","src":"9900:4:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9899:6:75"},"scope":19510,"src":"9832:578:75","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":19356,"nodeType":"Block","src":"10704:753:75","statements":[{"assignments":[19316],"declarations":[{"constant":false,"id":19316,"mutability":"mutable","name":"shortOrder","nameLocation":"10732:10:75","nodeType":"VariableDeclaration","scope":19356,"src":"10714:28:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18669_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"},"typeName":{"id":19315,"nodeType":"UserDefinedTypeName","pathNode":{"id":19314,"name":"ShortOrder","nameLocations":["10714:10:75"],"nodeType":"IdentifierPath","referencedDeclaration":18669,"src":"10714:10:75"},"referencedDeclaration":18669,"src":"10714:10:75","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18669_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"}},"visibility":"internal"}],"id":19320,"initialValue":{"baseExpression":{"id":19317,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18695,"src":"10745:7:75","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_struct$_ShortOrder_$18669_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":19319,"indexExpression":{"id":19318,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19308,"src":"10753:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10745:16:75","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18669_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"nodeType":"VariableDeclarationStatement","src":"10714:47:75"},{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":19324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19321,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19316,"src":"10776:10:75","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18669_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":19322,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10787:8:75","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":18668,"src":"10776:19:75","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19323,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10799:1:75","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10776:24:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19330,"nodeType":"IfStatement","src":"10772:99:75","trueBody":{"id":19329,"nodeType":"Block","src":"10802:69:75","statements":[{"errorCall":{"arguments":[{"hexValue":"4f7264657220646f6573206e6f74206578697374","id":19326,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10837:22:75","typeDescriptions":{"typeIdentifier":"t_stringliteral_df3ce9a0158242e1c2e1bf99ceae8d44147108f9cc20b5e90ddb75a5171b5b80","typeString":"literal_string \"Order does not exist\""},"value":"Order does not exist"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_df3ce9a0158242e1c2e1bf99ceae8d44147108f9cc20b5e90ddb75a5171b5b80","typeString":"literal_string \"Order does not exist\""}],"id":19325,"name":"OrderNotValid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":372,"src":"10823:13:75","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":19327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10823:37:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19328,"nodeType":"RevertStatement","src":"10816:44:75"}]}},{"expression":{"arguments":[{"id":19332,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19308,"src":"10939:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"expression":{"id":19333,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19316,"src":"10974:10:75","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18669_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":19334,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10985:8:75","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":18662,"src":"10974:19:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"expression":{"id":19335,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19316,"src":"11021:10:75","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18669_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":19336,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11032:8:75","memberName":"receiver","nodeType":"MemberAccess","referencedDeclaration":18664,"src":"11021:19:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":19341,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11096:4:75","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19510","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19510","typeString":"contract CowSwapFeeBurner"}],"id":19340,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11088:7:75","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19339,"name":"address","nodeType":"ElementaryTypeName","src":"11088:7:75","typeDescriptions":{}}},"id":19342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11088:13:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19337,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19308,"src":"11070:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":19338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11078:9:75","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10515,"src":"11070:17:75","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11070:32:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19344,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19316,"src":"11131:10:75","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18669_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":19345,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11142:12:75","memberName":"minAmountOut","nodeType":"MemberAccess","referencedDeclaration":18666,"src":"11131:23:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19346,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19316,"src":"11181:10:75","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18669_memory_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder memory"}},"id":19347,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11192:8:75","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":18668,"src":"11181:19:75","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":19348,"name":"appData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18689,"src":"11227:7:75","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"30","id":19349,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11263:1:75","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":19350,"name":"_sellKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18677,"src":"11288:9:75","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"74727565","id":19351,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11334:4:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":19352,"name":"_tokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18682,"src":"11374:13:75","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":19353,"name":"_tokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18682,"src":"11422:13:75","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":19331,"name":"GPv2Order","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":357,"src":"10900:9:75","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_GPv2Order_$357_storage_ptr_$","typeString":"type(struct GPv2Order storage pointer)"}},"id":19354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["10928:9:75","10964:8:75","11011:8:75","11058:10:75","11120:9:75","11172:7:75","11218:7:75","11252:9:75","11282:4:75","11315:17:75","11356:16:75","11405:15:75"],"names":["sellToken","buyToken","receiver","sellAmount","buyAmount","validTo","appData","feeAmount","kind","partiallyFillable","sellTokenBalance","buyTokenBalance"],"nodeType":"FunctionCall","src":"10900:550:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order memory"}},"functionReturnParameters":19313,"id":19355,"nodeType":"Return","src":"10881:569:75"}]},"id":19357,"implemented":true,"kind":"function","modifiers":[],"name":"_getOrder","nameLocation":"10638:9:75","nodeType":"FunctionDefinition","parameters":{"id":19309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19308,"mutability":"mutable","name":"tokenIn","nameLocation":"10655:7:75","nodeType":"VariableDeclaration","scope":19357,"src":"10648:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":19307,"nodeType":"UserDefinedTypeName","pathNode":{"id":19306,"name":"IERC20","nameLocations":["10648:6:75"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"10648:6:75"},"referencedDeclaration":10558,"src":"10648:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"10647:16:75"},"returnParameters":{"id":19313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19312,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19357,"src":"10686:16:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_memory_ptr","typeString":"struct GPv2Order"},"typeName":{"id":19311,"nodeType":"UserDefinedTypeName","pathNode":{"id":19310,"name":"GPv2Order","nameLocations":["10686:9:75"],"nodeType":"IdentifierPath","referencedDeclaration":357,"src":"10686:9:75"},"referencedDeclaration":357,"src":"10686:9:75","typeDescriptions":{"typeIdentifier":"t_struct$_GPv2Order_$357_storage_ptr","typeString":"struct GPv2Order"}},"visibility":"internal"}],"src":"10685:18:75"},"scope":19510,"src":"10629:828:75","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":19373,"nodeType":"Block","src":"11558:61:75","statements":[{"expression":{"arguments":[{"id":19369,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19360,"src":"11601:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"hexValue":"30","id":19370,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11610:1:75","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":19368,"name":"_getOrderStatusAndBalance","nodeType":"Identifier","overloadedDeclarations":[19374,19448],"referencedDeclaration":19448,"src":"11575:25:75","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$10558_$_t_uint256_$returns$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"function (contract IERC20,uint256) view returns (enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"id":19371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11575:37:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"functionReturnParameters":19367,"id":19372,"nodeType":"Return","src":"11568:44:75"}]},"id":19374,"implemented":true,"kind":"function","modifiers":[],"name":"_getOrderStatusAndBalance","nameLocation":"11472:25:75","nodeType":"FunctionDefinition","parameters":{"id":19361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19360,"mutability":"mutable","name":"tokenIn","nameLocation":"11505:7:75","nodeType":"VariableDeclaration","scope":19374,"src":"11498:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":19359,"nodeType":"UserDefinedTypeName","pathNode":{"id":19358,"name":"IERC20","nameLocations":["11498:6:75"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"11498:6:75"},"referencedDeclaration":10558,"src":"11498:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"11497:16:75"},"returnParameters":{"id":19367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19364,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19374,"src":"11536:11:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":19363,"nodeType":"UserDefinedTypeName","pathNode":{"id":19362,"name":"OrderStatus","nameLocations":["11536:11:75"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"11536:11:75"},"referencedDeclaration":480,"src":"11536:11:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"},{"constant":false,"id":19366,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19374,"src":"11549:7:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19365,"name":"uint256","nodeType":"ElementaryTypeName","src":"11549:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11535:22:75"},"scope":19510,"src":"11463:156:75","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":19447,"nodeType":"Block","src":"11764:970:75","statements":[{"assignments":[19389],"declarations":[{"constant":false,"id":19389,"mutability":"mutable","name":"shortOrder","nameLocation":"11793:10:75","nodeType":"VariableDeclaration","scope":19447,"src":"11774:29:75","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18669_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"},"typeName":{"id":19388,"nodeType":"UserDefinedTypeName","pathNode":{"id":19387,"name":"ShortOrder","nameLocations":["11774:10:75"],"nodeType":"IdentifierPath","referencedDeclaration":18669,"src":"11774:10:75"},"referencedDeclaration":18669,"src":"11774:10:75","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18669_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder"}},"visibility":"internal"}],"id":19393,"initialValue":{"baseExpression":{"id":19390,"name":"_orders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18695,"src":"11806:7:75","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$10558_$_t_struct$_ShortOrder_$18669_storage_$","typeString":"mapping(contract IERC20 => struct CowSwapFeeBurner.ShortOrder storage ref)"}},"id":19392,"indexExpression":{"id":19391,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19377,"src":"11814:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11806:16:75","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18669_storage","typeString":"struct CowSwapFeeBurner.ShortOrder storage ref"}},"nodeType":"VariableDeclarationStatement","src":"11774:48:75"},{"assignments":[19395],"declarations":[{"constant":false,"id":19395,"mutability":"mutable","name":"deadline","nameLocation":"11841:8:75","nodeType":"VariableDeclaration","scope":19447,"src":"11833:16:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19394,"name":"uint256","nodeType":"ElementaryTypeName","src":"11833:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19398,"initialValue":{"expression":{"id":19396,"name":"shortOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19389,"src":"11852:10:75","typeDescriptions":{"typeIdentifier":"t_struct$_ShortOrder_$18669_storage_ptr","typeString":"struct CowSwapFeeBurner.ShortOrder storage pointer"}},"id":19397,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11863:8:75","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":18668,"src":"11852:19:75","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"11833:38:75"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19399,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19395,"src":"11886:8:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19400,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11898:1:75","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11886:13:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19408,"nodeType":"IfStatement","src":"11882:147:75","trueBody":{"id":19407,"nodeType":"Block","src":"11901:128:75","statements":[{"expression":{"components":[{"expression":{"id":19402,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"11991:11:75","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":19403,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12003:11:75","memberName":"Nonexistent","nodeType":"MemberAccess","referencedDeclaration":476,"src":"11991:23:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},{"hexValue":"30","id":19404,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12016:1:75","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":19405,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"11990:28:75","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_rational_0_by_1_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,int_const 0)"}},"functionReturnParameters":19386,"id":19406,"nodeType":"Return","src":"11983:35:75"}]}},{"assignments":[19410],"declarations":[{"constant":false,"id":19410,"mutability":"mutable","name":"balance","nameLocation":"12138:7:75","nodeType":"VariableDeclaration","scope":19447,"src":"12130:15:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19409,"name":"uint256","nodeType":"ElementaryTypeName","src":"12130:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19420,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":19415,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12174:4:75","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19510","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19510","typeString":"contract CowSwapFeeBurner"}],"id":19414,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12166:7:75","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19413,"name":"address","nodeType":"ElementaryTypeName","src":"12166:7:75","typeDescriptions":{}}},"id":19416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12166:13:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19411,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19377,"src":"12148:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":19412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12156:9:75","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10515,"src":"12148:17:75","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12148:32:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":19418,"name":"balanceDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19379,"src":"12183:12:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12148:47:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12130:65:75"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19421,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19410,"src":"12209:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19422,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12220:1:75","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12209:12:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19430,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"12454:5:75","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":19431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12460:9:75","memberName":"timestamp","nodeType":"MemberAccess","src":"12454:15:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":19432,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19395,"src":"12472:8:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12454:26:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19440,"nodeType":"IfStatement","src":"12450:182:75","trueBody":{"id":19439,"nodeType":"Block","src":"12482:150:75","statements":[{"expression":{"components":[{"expression":{"id":19434,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"12593:11:75","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":19435,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12605:6:75","memberName":"Failed","nodeType":"MemberAccess","referencedDeclaration":479,"src":"12593:18:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},{"id":19436,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19410,"src":"12613:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19437,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12592:29:75","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"functionReturnParameters":19386,"id":19438,"nodeType":"Return","src":"12585:36:75"}]}},"id":19441,"nodeType":"IfStatement","src":"12205:427:75","trueBody":{"id":19429,"nodeType":"Block","src":"12223:221:75","statements":[{"expression":{"components":[{"expression":{"id":19424,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"12405:11:75","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":19425,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12417:6:75","memberName":"Filled","nodeType":"MemberAccess","referencedDeclaration":478,"src":"12405:18:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},{"id":19426,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19410,"src":"12425:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19427,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12404:29:75","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"functionReturnParameters":19386,"id":19428,"nodeType":"Return","src":"12397:36:75"}]}},{"expression":{"components":[{"expression":{"id":19442,"name":"OrderStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":480,"src":"12699:11:75","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_OrderStatus_$480_$","typeString":"type(enum ICowSwapFeeBurner.OrderStatus)"}},"id":19443,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12711:6:75","memberName":"Active","nodeType":"MemberAccess","referencedDeclaration":477,"src":"12699:18:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},{"id":19444,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19410,"src":"12719:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19445,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12698:29:75","typeDescriptions":{"typeIdentifier":"t_tuple$_t_enum$_OrderStatus_$480_$_t_uint256_$","typeString":"tuple(enum ICowSwapFeeBurner.OrderStatus,uint256)"}},"functionReturnParameters":19386,"id":19446,"nodeType":"Return","src":"12691:36:75"}]},"id":19448,"implemented":true,"kind":"function","modifiers":[],"name":"_getOrderStatusAndBalance","nameLocation":"11634:25:75","nodeType":"FunctionDefinition","parameters":{"id":19380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19377,"mutability":"mutable","name":"tokenIn","nameLocation":"11676:7:75","nodeType":"VariableDeclaration","scope":19448,"src":"11669:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":19376,"nodeType":"UserDefinedTypeName","pathNode":{"id":19375,"name":"IERC20","nameLocations":["11669:6:75"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"11669:6:75"},"referencedDeclaration":10558,"src":"11669:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":19379,"mutability":"mutable","name":"balanceDelta","nameLocation":"11701:12:75","nodeType":"VariableDeclaration","scope":19448,"src":"11693:20:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19378,"name":"uint256","nodeType":"ElementaryTypeName","src":"11693:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11659:60:75"},"returnParameters":{"id":19386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19383,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19448,"src":"11742:11:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"},"typeName":{"id":19382,"nodeType":"UserDefinedTypeName","pathNode":{"id":19381,"name":"OrderStatus","nameLocations":["11742:11:75"],"nodeType":"IdentifierPath","referencedDeclaration":480,"src":"11742:11:75"},"referencedDeclaration":480,"src":"11742:11:75","typeDescriptions":{"typeIdentifier":"t_enum$_OrderStatus_$480","typeString":"enum ICowSwapFeeBurner.OrderStatus"}},"visibility":"internal"},{"constant":false,"id":19385,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19448,"src":"11755:7:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19384,"name":"uint256","nodeType":"ElementaryTypeName","src":"11755:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11741:22:75"},"scope":19510,"src":"11625:1109:75","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":19463,"nodeType":"Block","src":"12795:129:75","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19453,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"12809:5:75","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":19454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12815:9:75","memberName":"timestamp","nodeType":"MemberAccess","src":"12809:15:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":19455,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19450,"src":"12827:8:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12809:26:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19462,"nodeType":"IfStatement","src":"12805:113:75","trueBody":{"id":19461,"nodeType":"Block","src":"12837:81:75","statements":[{"errorCall":{"arguments":[{"hexValue":"446561646c696e6520697320696e207468652070617374","id":19458,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12881:25:75","typeDescriptions":{"typeIdentifier":"t_stringliteral_374fef2b87445dfdf2e706ba431b442bbacba974d397ef19ac6a95faebd7ce25","typeString":"literal_string \"Deadline is in the past\""},"value":"Deadline is in the past"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_374fef2b87445dfdf2e706ba431b442bbacba974d397ef19ac6a95faebd7ce25","typeString":"literal_string \"Deadline is in the past\""}],"id":19457,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":507,"src":"12858:22:75","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":19459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12858:49:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19460,"nodeType":"RevertStatement","src":"12851:56:75"}]}}]},"id":19464,"implemented":true,"kind":"function","modifiers":[],"name":"_checkDeadline","nameLocation":"12749:14:75","nodeType":"FunctionDefinition","parameters":{"id":19451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19450,"mutability":"mutable","name":"deadline","nameLocation":"12772:8:75","nodeType":"VariableDeclaration","scope":19464,"src":"12764:16:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19449,"name":"uint256","nodeType":"ElementaryTypeName","src":"12764:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12763:18:75"},"returnParameters":{"id":19452,"nodeType":"ParameterList","parameters":[],"src":"12795:0:75"},"scope":19510,"src":"12740:184:75","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":19478,"nodeType":"Block","src":"12993:119:75","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19469,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19466,"src":"13007:12:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13023:1:75","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13007:17:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19477,"nodeType":"IfStatement","src":"13003:103:75","trueBody":{"id":19476,"nodeType":"Block","src":"13026:80:75","statements":[{"errorCall":{"arguments":[{"hexValue":"4d696e20616d6f756e74206f7574206973207a65726f","id":19473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13070:24:75","typeDescriptions":{"typeIdentifier":"t_stringliteral_383d66dc4e6ecb7962cb5aa0d856bd222cb47a243a02d6668869f54ee5707233","typeString":"literal_string \"Min amount out is zero\""},"value":"Min amount out is zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_383d66dc4e6ecb7962cb5aa0d856bd222cb47a243a02d6668869f54ee5707233","typeString":"literal_string \"Min amount out is zero\""}],"id":19472,"name":"InvalidOrderParameters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":507,"src":"13047:22:75","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":19474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13047:48:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19475,"nodeType":"RevertStatement","src":"13040:55:75"}]}}]},"id":19479,"implemented":true,"kind":"function","modifiers":[],"name":"_checkMinAmountOut","nameLocation":"12939:18:75","nodeType":"FunctionDefinition","parameters":{"id":19467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19466,"mutability":"mutable","name":"minAmountOut","nameLocation":"12966:12:75","nodeType":"VariableDeclaration","scope":19479,"src":"12958:20:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19465,"name":"uint256","nodeType":"ElementaryTypeName","src":"12958:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12957:22:75"},"returnParameters":{"id":19468,"nodeType":"ParameterList","parameters":[],"src":"12993:0:75"},"scope":19510,"src":"12930:182:75","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":19508,"nodeType":"Block","src":"13167:283:75","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":19493,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"13311:4:75","typeDescriptions":{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19510","typeString":"contract CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CowSwapFeeBurner_$19510","typeString":"contract CowSwapFeeBurner"}],"id":19492,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13303:7:75","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19491,"name":"address","nodeType":"ElementaryTypeName","src":"13303:7:75","typeDescriptions":{}}},"id":19494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13303:13:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19490,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"13282:20:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrder_$418_$","typeString":"type(contract ICowConditionalOrder)"}},"id":19495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13282:35:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICowConditionalOrder_$418","typeString":"contract ICowConditionalOrder"}},{"arguments":[{"hexValue":"30","id":19498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13349:1:75","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":19497,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13341:7:75","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":19496,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13341:7:75","typeDescriptions":{}}},"id":19499,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13341:10:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":19502,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19482,"src":"13392:7:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"expression":{"id":19500,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"13381:3:75","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":19501,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13385:6:75","memberName":"encode","nodeType":"MemberAccess","src":"13381:10:75","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":19503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13381:19:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ICowConditionalOrder_$418","typeString":"contract ICowConditionalOrder"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":19488,"name":"ICowConditionalOrder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":418,"src":"13211:20:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICowConditionalOrder_$418_$","typeString":"type(contract ICowConditionalOrder)"}},"id":19489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13232:22:75","memberName":"ConditionalOrderParams","nodeType":"MemberAccess","referencedDeclaration":367,"src":"13211:43:75","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ConditionalOrderParams_$367_storage_ptr_$","typeString":"type(struct ICowConditionalOrder.ConditionalOrderParams storage pointer)"}},"id":19504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["13273:7:75","13335:4:75","13369:10:75"],"names":["handler","salt","staticData"],"nodeType":"FunctionCall","src":"13211:204:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_memory_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams memory"}},{"hexValue":"74727565","id":19505,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"13429:4:75","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ConditionalOrderParams_$367_memory_ptr","typeString":"struct ICowConditionalOrder.ConditionalOrderParams memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":19485,"name":"composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18685,"src":"13177:13:75","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"id":19487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13191:6:75","memberName":"create","nodeType":"MemberAccess","referencedDeclaration":300,"src":"13177:20:75","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_ConditionalOrderParams_$367_memory_ptr_$_t_bool_$returns$__$","typeString":"function (struct ICowConditionalOrder.ConditionalOrderParams memory,bool) external"}},"id":19506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13177:266:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19507,"nodeType":"ExpressionStatement","src":"13177:266:75"}]},"id":19509,"implemented":true,"kind":"function","modifiers":[],"name":"_createCowOrder","nameLocation":"13127:15:75","nodeType":"FunctionDefinition","parameters":{"id":19483,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19482,"mutability":"mutable","name":"tokenIn","nameLocation":"13150:7:75","nodeType":"VariableDeclaration","scope":19509,"src":"13143:14:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":19481,"nodeType":"UserDefinedTypeName","pathNode":{"id":19480,"name":"IERC20","nameLocations":["13143:6:75"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"13143:6:75"},"referencedDeclaration":10558,"src":"13143:6:75","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"13142:16:75"},"returnParameters":{"id":19484,"nodeType":"ParameterList","parameters":[],"src":"13167:0:75"},"scope":19510,"src":"13118:332:75","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":19511,"src":"1814:11638:75","usedErrors":[372,377,384,391,396,507,513,516,924,927,6938,9334,9339,10596,19756,19759],"usedEvents":[436,492,502,914,9345,9483]}],"src":"46:13407:75"},"id":75},"contracts/ERC4626CowSwapFeeBurner.sol":{"ast":{"absolutePath":"contracts/ERC4626CowSwapFeeBurner.sol","exportedSymbols":{"CowSwapFeeBurner":[19510],"ERC4626CowSwapFeeBurner":[19738],"IComposableCow":[326],"IERC20":[10558],"IERC4626":[9828],"IProtocolFeeSweeper":[1137],"IVault":[2527],"PackedTokenBalance":[4851],"ReentrancyGuardTransient":[6994],"SafeERC20":[11048]},"id":19739,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":19512,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:76"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":19514,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19739,"sourceUnit":9829,"src":"72:75:76","symbolAliases":[{"foreign":{"id":19513,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9828,"src":"81:8:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":19516,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19739,"sourceUnit":11049,"src":"148:84:76","symbolAliases":[{"foreign":{"id":19515,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11048,"src":"157:9:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":19518,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19739,"sourceUnit":10559,"src":"233:72:76","symbolAliases":[{"foreign":{"id":19517,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"242:6:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol","id":19520,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19739,"sourceUnit":327,"src":"307:108:76","symbolAliases":[{"foreign":{"id":19519,"name":"IComposableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":326,"src":"316:14:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":19522,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19739,"sourceUnit":1138,"src":"416:118:76","symbolAliases":[{"foreign":{"id":19521,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1137,"src":"425:19:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":19524,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19739,"sourceUnit":2528,"src":"535:81:76","symbolAliases":[{"foreign":{"id":19523,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"544:6:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":19526,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19739,"sourceUnit":6995,"src":"618:132:76","symbolAliases":[{"foreign":{"id":19525,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6994,"src":"631:24:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","id":19528,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19739,"sourceUnit":4852,"src":"751:111:76","symbolAliases":[{"foreign":{"id":19527,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4851,"src":"760:18:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/CowSwapFeeBurner.sol","file":"./CowSwapFeeBurner.sol","id":19530,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19739,"sourceUnit":19511,"src":"864:58:76","symbolAliases":[{"foreign":{"id":19529,"name":"CowSwapFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19510,"src":"873:16:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":19532,"name":"CowSwapFeeBurner","nameLocations":["1284:16:76"],"nodeType":"IdentifierPath","referencedDeclaration":19510,"src":"1284:16:76"},"id":19533,"nodeType":"InheritanceSpecifier","src":"1284:16:76"}],"canonicalName":"ERC4626CowSwapFeeBurner","contractDependencies":[],"contractKind":"contract","documentation":{"id":19531,"nodeType":"StructuredDocumentation","src":"924:323:76","text":" @title ERC4626CowSwapFeeBurner\n @notice A contract that burns ERC4626 protocol fee tokens using CowSwap, previously redeeming underlying assets.\n @dev The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function.\n Only one order per token is allowed at a time."},"fullyImplemented":true,"id":19738,"linearizedBaseContracts":[19738,19510,4981,34,6994,19827,9554,9468,12348,566,454,12688,418,948,9568],"name":"ERC4626CowSwapFeeBurner","nameLocation":"1257:23:76","nodeType":"ContractDefinition","nodes":[{"global":false,"id":19537,"libraryName":{"id":19534,"name":"SafeERC20","nameLocations":["1313:9:76"],"nodeType":"IdentifierPath","referencedDeclaration":11048,"src":"1313:9:76"},"nodeType":"UsingForDirective","src":"1307:27:76","typeName":{"id":19536,"nodeType":"UserDefinedTypeName","pathNode":{"id":19535,"name":"IERC20","nameLocations":["1327:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1327:6:76"},"referencedDeclaration":10558,"src":"1327:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}},{"documentation":{"id":19538,"nodeType":"StructuredDocumentation","src":"1340:35:76","text":"@notice The amount out is zero."},"errorSelector":"5db1dd1e","id":19543,"name":"AmountOutIsZero","nameLocation":"1386:15:76","nodeType":"ErrorDefinition","parameters":{"id":19542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19541,"mutability":"mutable","name":"token","nameLocation":"1409:5:76","nodeType":"VariableDeclaration","scope":19543,"src":"1402:12:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":19540,"nodeType":"UserDefinedTypeName","pathNode":{"id":19539,"name":"IERC20","nameLocations":["1402:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1402:6:76"},"referencedDeclaration":10558,"src":"1402:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1401:14:76"},"src":"1380:36:76"},{"body":{"id":19568,"nodeType":"Block","src":"1758:64:76","statements":[]},"id":19569,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":19560,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19546,"src":"1668:19:76","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},{"id":19561,"name":"_composableCow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19549,"src":"1689:14:76","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},{"id":19562,"name":"_cowVaultRelayer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19551,"src":"1705:16:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19563,"name":"_appData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19553,"src":"1723:8:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":19564,"name":"_initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19555,"src":"1733:13:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19565,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19557,"src":"1748:8:76","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":19566,"kind":"baseConstructorSpecifier","modifierName":{"id":19559,"name":"CowSwapFeeBurner","nameLocations":["1651:16:76"],"nodeType":"IdentifierPath","referencedDeclaration":19510,"src":"1651:16:76"},"nodeType":"ModifierInvocation","src":"1651:106:76"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19546,"mutability":"mutable","name":"_protocolFeeSweeper","nameLocation":"1463:19:76","nodeType":"VariableDeclaration","scope":19569,"src":"1443:39:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":19545,"nodeType":"UserDefinedTypeName","pathNode":{"id":19544,"name":"IProtocolFeeSweeper","nameLocations":["1443:19:76"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"1443:19:76"},"referencedDeclaration":1137,"src":"1443:19:76","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"visibility":"internal"},{"constant":false,"id":19549,"mutability":"mutable","name":"_composableCow","nameLocation":"1507:14:76","nodeType":"VariableDeclaration","scope":19569,"src":"1492:29:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"},"typeName":{"id":19548,"nodeType":"UserDefinedTypeName","pathNode":{"id":19547,"name":"IComposableCow","nameLocations":["1492:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":326,"src":"1492:14:76"},"referencedDeclaration":326,"src":"1492:14:76","typeDescriptions":{"typeIdentifier":"t_contract$_IComposableCow_$326","typeString":"contract IComposableCow"}},"visibility":"internal"},{"constant":false,"id":19551,"mutability":"mutable","name":"_cowVaultRelayer","nameLocation":"1539:16:76","nodeType":"VariableDeclaration","scope":19569,"src":"1531:24:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19550,"name":"address","nodeType":"ElementaryTypeName","src":"1531:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19553,"mutability":"mutable","name":"_appData","nameLocation":"1573:8:76","nodeType":"VariableDeclaration","scope":19569,"src":"1565:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19552,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1565:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":19555,"mutability":"mutable","name":"_initialOwner","nameLocation":"1599:13:76","nodeType":"VariableDeclaration","scope":19569,"src":"1591:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19554,"name":"address","nodeType":"ElementaryTypeName","src":"1591:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19557,"mutability":"mutable","name":"_version","nameLocation":"1636:8:76","nodeType":"VariableDeclaration","scope":19569,"src":"1622:22:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":19556,"name":"string","nodeType":"ElementaryTypeName","src":"1622:6:76","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1433:217:76"},"returnParameters":{"id":19567,"nodeType":"ParameterList","parameters":[],"src":"1758:0:76"},"scope":19738,"src":"1422:400:76","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[18987],"body":{"id":19736,"nodeType":"Block","src":"3109:2098:76","statements":[{"assignments":[19596],"declarations":[{"constant":false,"id":19596,"mutability":"mutable","name":"erc4626Token","nameLocation":"3128:12:76","nodeType":"VariableDeclaration","scope":19736,"src":"3119:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":19595,"nodeType":"UserDefinedTypeName","pathNode":{"id":19594,"name":"IERC4626","nameLocations":["3119:8:76"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"3119:8:76"},"referencedDeclaration":9828,"src":"3119:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"}],"id":19603,"initialValue":{"arguments":[{"arguments":[{"id":19600,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19575,"src":"3160:8:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":19599,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3152:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19598,"name":"address","nodeType":"ElementaryTypeName","src":"3152:7:76","typeDescriptions":{}}},"id":19601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3152:17:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19597,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9828,"src":"3143:8:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9828_$","typeString":"type(contract IERC4626)"}},"id":19602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3143:27:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"nodeType":"VariableDeclarationStatement","src":"3119:51:76"},{"assignments":[19606],"declarations":[{"constant":false,"id":19606,"mutability":"mutable","name":"underlyingToken","nameLocation":"3187:15:76","nodeType":"VariableDeclaration","scope":19736,"src":"3180:22:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":19605,"nodeType":"UserDefinedTypeName","pathNode":{"id":19604,"name":"IERC20","nameLocations":["3180:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"3180:6:76"},"referencedDeclaration":10558,"src":"3180:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"id":19612,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19608,"name":"erc4626Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19596,"src":"3212:12:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"id":19609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3225:5:76","memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":9697,"src":"3212:18:76","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":19610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3212:20:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19607,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"3205:6:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10558_$","typeString":"type(contract IERC20)"}},"id":19611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3205:28:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3180:53:76"},{"expression":{"arguments":[{"expression":{"id":19620,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3439:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3443:6:76","memberName":"sender","nodeType":"MemberAccess","src":"3439:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":19624,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3459:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19738","typeString":"contract ERC4626CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19738","typeString":"contract ERC4626CowSwapFeeBurner"}],"id":19623,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3451:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19622,"name":"address","nodeType":"ElementaryTypeName","src":"3451:7:76","typeDescriptions":{}}},"id":19625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3451:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19626,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19577,"src":"3466:21:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"arguments":[{"id":19616,"name":"erc4626Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19596,"src":"3407:12:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}],"id":19615,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3399:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19614,"name":"address","nodeType":"ElementaryTypeName","src":"3399:7:76","typeDescriptions":{}}},"id":19617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3399:21:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19613,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"3392:6:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10558_$","typeString":"type(contract IERC20)"}},"id":19618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3392:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":19619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3422:16:76","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":10656,"src":"3392:46:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10558_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":19627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3392:96:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19628,"nodeType":"ExpressionStatement","src":"3392:96:76"},{"assignments":[19630,19632],"declarations":[{"constant":false,"id":19630,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"3508:23:76","nodeType":"VariableDeclaration","scope":19736,"src":"3500:31:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19629,"name":"uint256","nodeType":"ElementaryTypeName","src":"3500:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19632,"mutability":"mutable","name":"minERC4626AmountOut","nameLocation":"3541:19:76","nodeType":"VariableDeclaration","scope":19736,"src":"3533:27:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19631,"name":"uint256","nodeType":"ElementaryTypeName","src":"3533:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19640,"initialValue":{"arguments":[{"arguments":[{"id":19637,"name":"encodedMinAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19582,"src":"3622:20:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19636,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3614:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":19635,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3614:7:76","typeDescriptions":{}}},"id":19638,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3614:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":19633,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4851,"src":"3564:18:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$4851_$","typeString":"type(library PackedTokenBalance)"}},"id":19634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3583:17:76","memberName":"fromPackedBalance","nodeType":"MemberAccess","referencedDeclaration":4829,"src":"3564:36:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256,uint256)"}},"id":19639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3564:89:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"3499:154:76"},{"assignments":[19642],"declarations":[{"constant":false,"id":19642,"mutability":"mutable","name":"feeTokenBalanceBefore","nameLocation":"3672:21:76","nodeType":"VariableDeclaration","scope":19736,"src":"3664:29:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19641,"name":"uint256","nodeType":"ElementaryTypeName","src":"3664:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19650,"initialValue":{"arguments":[{"arguments":[{"id":19647,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3730:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19738","typeString":"contract ERC4626CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19738","typeString":"contract ERC4626CowSwapFeeBurner"}],"id":19646,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3722:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19645,"name":"address","nodeType":"ElementaryTypeName","src":"3722:7:76","typeDescriptions":{}}},"id":19648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3722:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19643,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19606,"src":"3696:15:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":19644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3712:9:76","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10515,"src":"3696:25:76","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19649,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3696:40:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3664:72:76"},{"expression":{"arguments":[{"id":19654,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19577,"src":"3767:21:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":19657,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3798:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19738","typeString":"contract ERC4626CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19738","typeString":"contract ERC4626CowSwapFeeBurner"}],"id":19656,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3790:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19655,"name":"address","nodeType":"ElementaryTypeName","src":"3790:7:76","typeDescriptions":{}}},"id":19658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3790:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":19661,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3813:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19738","typeString":"contract ERC4626CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19738","typeString":"contract ERC4626CowSwapFeeBurner"}],"id":19660,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3805:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19659,"name":"address","nodeType":"ElementaryTypeName","src":"3805:7:76","typeDescriptions":{}}},"id":19662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3805:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19651,"name":"erc4626Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19596,"src":"3747:12:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"id":19653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3760:6:76","memberName":"redeem","nodeType":"MemberAccess","referencedDeclaration":9827,"src":"3747:19:76","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) external returns (uint256)"}},"id":19663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3747:72:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19664,"nodeType":"ExpressionStatement","src":"3747:72:76"},{"assignments":[19666],"declarations":[{"constant":false,"id":19666,"mutability":"mutable","name":"feeTokenBalanceAfter","nameLocation":"3838:20:76","nodeType":"VariableDeclaration","scope":19736,"src":"3830:28:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19665,"name":"uint256","nodeType":"ElementaryTypeName","src":"3830:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19674,"initialValue":{"arguments":[{"arguments":[{"id":19671,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3895:4:76","typeDescriptions":{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19738","typeString":"contract ERC4626CowSwapFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ERC4626CowSwapFeeBurner_$19738","typeString":"contract ERC4626CowSwapFeeBurner"}],"id":19670,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3887:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19669,"name":"address","nodeType":"ElementaryTypeName","src":"3887:7:76","typeDescriptions":{}}},"id":19672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3887:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19667,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19606,"src":"3861:15:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":19668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3877:9:76","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10515,"src":"3861:25:76","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3861:40:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3830:71:76"},{"expression":{"id":19679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19675,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19577,"src":"3911:21:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19676,"name":"feeTokenBalanceAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19666,"src":"3935:20:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":19677,"name":"feeTokenBalanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19642,"src":"3958:21:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3935:44:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3911:68:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19680,"nodeType":"ExpressionStatement","src":"3911:68:76"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19681,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19577,"src":"3994:21:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":19682,"name":"minERC4626AmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19632,"src":"4018:19:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3994:43:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19691,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19577,"src":"4159:21:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19692,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4184:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4159:26:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19699,"nodeType":"IfStatement","src":"4155:96:76","trueBody":{"id":19698,"nodeType":"Block","src":"4187:64:76","statements":[{"errorCall":{"arguments":[{"id":19695,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19606,"src":"4224:15:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":19694,"name":"AmountOutIsZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19543,"src":"4208:15:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$10558_$returns$_t_error_$","typeString":"function (contract IERC20) pure returns (error)"}},"id":19696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4208:32:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19697,"nodeType":"RevertStatement","src":"4201:39:76"}]}},"id":19700,"nodeType":"IfStatement","src":"3990:261:76","trueBody":{"id":19690,"nodeType":"Block","src":"4039:110:76","statements":[{"errorCall":{"arguments":[{"id":19685,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19606,"src":"4078:15:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":19686,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19577,"src":"4095:21:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19687,"name":"minERC4626AmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19632,"src":"4118:19:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19684,"name":"AmountOutBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":924,"src":"4060:17:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$10558_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":19688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4060:78:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19689,"nodeType":"RevertStatement","src":"4053:85:76"}]}},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"id":19703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19701,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19606,"src":"4484:15:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":19702,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19580,"src":"4503:11:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"src":"4484:30:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":19734,"nodeType":"Block","src":"4904:297:76","statements":[{"expression":{"arguments":[{"id":19724,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19572,"src":"4941:4:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19725,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19606,"src":"4963:15:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":19726,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19577,"src":"4996:21:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19727,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19580,"src":"5035:11:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":19728,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19630,"src":"5064:23:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19729,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19584,"src":"5105:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19730,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19586,"src":"5132:8:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":19731,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5158:5:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":19723,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19107,"src":"4918:5:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10558_$_t_uint256_$_t_contract$_IERC20_$10558_$_t_uint256_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address,uint256,bool)"}},"id":19732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4918:272:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19733,"nodeType":"ExpressionStatement","src":"4918:272:76"}]},"id":19735,"nodeType":"IfStatement","src":"4480:721:76","trueBody":{"id":19722,"nodeType":"Block","src":"4516:382:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19704,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19577,"src":"4644:21:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":19705,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19630,"src":"4668:23:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4644:47:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19714,"nodeType":"IfStatement","src":"4640:171:76","trueBody":{"id":19713,"nodeType":"Block","src":"4693:118:76","statements":[{"errorCall":{"arguments":[{"id":19708,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19580,"src":"4736:11:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":19709,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19577,"src":"4749:21:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19710,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19630,"src":"4772:23:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19707,"name":"AmountOutBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":924,"src":"4718:17:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$10558_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":19711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4718:78:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19712,"nodeType":"RevertStatement","src":"4711:85:76"}]}},{"expression":{"arguments":[{"id":19718,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19584,"src":"4854:9:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19719,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19577,"src":"4865:21:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19715,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19606,"src":"4825:15:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":19717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4841:12:76","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10629,"src":"4825:28:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10558_$","typeString":"function (contract IERC20,address,uint256)"}},"id":19720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4825:62:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19721,"nodeType":"ExpressionStatement","src":"4825:62:76"}]}}]},"documentation":{"id":19570,"nodeType":"StructuredDocumentation","src":"1828:997:76","text":" @notice Treats `feeToken` as an ERC4626, redeems `exactFeeTokenAmountIn`, swaps the underlying asset for\n `targetToken`, and sends the proceeds to the `recipient`.\n @dev Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\n @param pool The pool the fees came from (only used for documentation in the event)\n @param feeToken The token collected from the pool\n @param exactFeeTokenAmountIn The number of fee tokens collected\n @param targetToken The desired target token (`tokenOut` of the swap)\n @param encodedMinAmountsOut The minimum amounts out for the swap, encoded as a 256-bit integer:\n - Upper 128 bits: the minimum amount of the target token to receive\n - Lower 128 bits: the minimum amount of the ERC4626 token to receive\n @param recipient The recipient of the swap proceeds\n @param deadline Deadline for the burn operation (i.e., swap), after which it will revert"},"functionSelector":"de557a32","id":19737,"implemented":true,"kind":"function","modifiers":[{"id":19590,"kind":"modifierInvocation","modifierName":{"id":19589,"name":"onlyProtocolFeeSweeper","nameLocations":["3073:22:76"],"nodeType":"IdentifierPath","referencedDeclaration":19775,"src":"3073:22:76"},"nodeType":"ModifierInvocation","src":"3073:22:76"},{"id":19592,"kind":"modifierInvocation","modifierName":{"id":19591,"name":"nonReentrant","nameLocations":["3096:12:76"],"nodeType":"IdentifierPath","referencedDeclaration":6949,"src":"3096:12:76"},"nodeType":"ModifierInvocation","src":"3096:12:76"}],"name":"burn","nameLocation":"2839:4:76","nodeType":"FunctionDefinition","overrides":{"id":19588,"nodeType":"OverrideSpecifier","overrides":[],"src":"3064:8:76"},"parameters":{"id":19587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19572,"mutability":"mutable","name":"pool","nameLocation":"2861:4:76","nodeType":"VariableDeclaration","scope":19737,"src":"2853:12:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19571,"name":"address","nodeType":"ElementaryTypeName","src":"2853:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19575,"mutability":"mutable","name":"feeToken","nameLocation":"2882:8:76","nodeType":"VariableDeclaration","scope":19737,"src":"2875:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":19574,"nodeType":"UserDefinedTypeName","pathNode":{"id":19573,"name":"IERC20","nameLocations":["2875:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2875:6:76"},"referencedDeclaration":10558,"src":"2875:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":19577,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"2908:21:76","nodeType":"VariableDeclaration","scope":19737,"src":"2900:29:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19576,"name":"uint256","nodeType":"ElementaryTypeName","src":"2900:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19580,"mutability":"mutable","name":"targetToken","nameLocation":"2946:11:76","nodeType":"VariableDeclaration","scope":19737,"src":"2939:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":19579,"nodeType":"UserDefinedTypeName","pathNode":{"id":19578,"name":"IERC20","nameLocations":["2939:6:76"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2939:6:76"},"referencedDeclaration":10558,"src":"2939:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":19582,"mutability":"mutable","name":"encodedMinAmountsOut","nameLocation":"2975:20:76","nodeType":"VariableDeclaration","scope":19737,"src":"2967:28:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19581,"name":"uint256","nodeType":"ElementaryTypeName","src":"2967:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19584,"mutability":"mutable","name":"recipient","nameLocation":"3013:9:76","nodeType":"VariableDeclaration","scope":19737,"src":"3005:17:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19583,"name":"address","nodeType":"ElementaryTypeName","src":"3005:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19586,"mutability":"mutable","name":"deadline","nameLocation":"3040:8:76","nodeType":"VariableDeclaration","scope":19737,"src":"3032:16:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19585,"name":"uint256","nodeType":"ElementaryTypeName","src":"3032:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2843:211:76"},"returnParameters":{"id":19593,"nodeType":"ParameterList","parameters":[],"src":"3109:0:76"},"scope":19738,"src":"2830:2377:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":19739,"src":"1248:3961:76","usedErrors":[372,377,384,391,396,507,513,516,924,927,6938,9334,9339,10596,19543,19756,19759],"usedEvents":[436,492,502,914,9345,9483]}],"src":"46:5164:76"},"id":76},"contracts/FeeBurnerAuthentication.sol":{"ast":{"absolutePath":"contracts/FeeBurnerAuthentication.sol","exportedSymbols":{"FeeBurnerAuthentication":[19827],"IProtocolFeeSweeper":[1137],"IVault":[2527],"Ownable":[9468],"Ownable2Step":[9554]},"id":19828,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":19740,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:77"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":19742,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19828,"sourceUnit":2528,"src":"72:81:77","symbolAliases":[{"foreign":{"id":19741,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"81:6:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"@openzeppelin/contracts/access/Ownable.sol","id":19744,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19828,"sourceUnit":9469,"src":"154:69:77","symbolAliases":[{"foreign":{"id":19743,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9468,"src":"163:7:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/Ownable2Step.sol","file":"@openzeppelin/contracts/access/Ownable2Step.sol","id":19746,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19828,"sourceUnit":9555,"src":"224:79:77","symbolAliases":[{"foreign":{"id":19745,"name":"Ownable2Step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9554,"src":"233:12:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":19748,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19828,"sourceUnit":1138,"src":"304:118:77","symbolAliases":[{"foreign":{"id":19747,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1137,"src":"313:19:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":19749,"name":"Ownable2Step","nameLocations":["460:12:77"],"nodeType":"IdentifierPath","referencedDeclaration":9554,"src":"460:12:77"},"id":19750,"nodeType":"InheritanceSpecifier","src":"460:12:77"}],"canonicalName":"FeeBurnerAuthentication","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":19827,"linearizedBaseContracts":[19827,9554,9468,12348],"name":"FeeBurnerAuthentication","nameLocation":"433:23:77","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"178ac96e","id":19753,"mutability":"immutable","name":"protocolFeeSweeper","nameLocation":"516:18:77","nodeType":"VariableDeclaration","scope":19827,"src":"479:55:77","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":19752,"nodeType":"UserDefinedTypeName","pathNode":{"id":19751,"name":"IProtocolFeeSweeper","nameLocations":["479:19:77"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"479:19:77"},"referencedDeclaration":1137,"src":"479:19:77","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"visibility":"public"},{"documentation":{"id":19754,"nodeType":"StructuredDocumentation","src":"541:40:77","text":"@notice The fee protocol is invalid."},"errorSelector":"932c92a5","id":19756,"name":"InvalidProtocolFeeSweeper","nameLocation":"592:25:77","nodeType":"ErrorDefinition","parameters":{"id":19755,"nodeType":"ParameterList","parameters":[],"src":"617:2:77"},"src":"586:34:77"},{"documentation":{"id":19757,"nodeType":"StructuredDocumentation","src":"626:67:77","text":"@notice The sender does not have permission to call a function."},"errorSelector":"23dada53","id":19759,"name":"SenderNotAllowed","nameLocation":"704:16:77","nodeType":"ErrorDefinition","parameters":{"id":19758,"nodeType":"ParameterList","parameters":[],"src":"720:2:77"},"src":"698:25:77"},{"body":{"id":19774,"nodeType":"Block","src":"763:124:77","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19761,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"777:3:77","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"781:6:77","memberName":"sender","nodeType":"MemberAccess","src":"777:10:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":19765,"name":"protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19753,"src":"799:18:77","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}],"id":19764,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"791:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19763,"name":"address","nodeType":"ElementaryTypeName","src":"791:7:77","typeDescriptions":{}}},"id":19766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"791:27:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"777:41:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19772,"nodeType":"IfStatement","src":"773:97:77","trueBody":{"id":19771,"nodeType":"Block","src":"820:50:77","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19768,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19759,"src":"841:16:77","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"841:18:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19770,"nodeType":"RevertStatement","src":"834:25:77"}]}},{"id":19773,"nodeType":"PlaceholderStatement","src":"879:1:77"}]},"id":19775,"name":"onlyProtocolFeeSweeper","nameLocation":"738:22:77","nodeType":"ModifierDefinition","parameters":{"id":19760,"nodeType":"ParameterList","parameters":[],"src":"760:2:77"},"src":"729:158:77","virtual":false,"visibility":"internal"},{"body":{"id":19795,"nodeType":"Block","src":"928:158:77","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19777,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"942:3:77","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"946:6:77","memberName":"sender","nodeType":"MemberAccess","src":"942:10:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19779,"name":"protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19753,"src":"956:18:77","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"id":19780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"975:15:77","memberName":"getFeeRecipient","nodeType":"MemberAccess","referencedDeclaration":1093,"src":"956:34:77","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":19781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"956:36:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"942:50:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19783,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"996:3:77","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1000:6:77","memberName":"sender","nodeType":"MemberAccess","src":"996:10:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":19785,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9388,"src":"1010:5:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":19786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1010:7:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"996:21:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"942:75:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19793,"nodeType":"IfStatement","src":"938:131:77","trueBody":{"id":19792,"nodeType":"Block","src":"1019:50:77","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19789,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19759,"src":"1040:16:77","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19790,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1040:18:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19791,"nodeType":"RevertStatement","src":"1033:25:77"}]}},{"id":19794,"nodeType":"PlaceholderStatement","src":"1078:1:77"}]},"id":19796,"name":"onlyFeeRecipientOrOwner","nameLocation":"902:23:77","nodeType":"ModifierDefinition","parameters":{"id":19776,"nodeType":"ParameterList","parameters":[],"src":"925:2:77"},"src":"893:193:77","virtual":false,"visibility":"internal"},{"body":{"id":19825,"nodeType":"Block","src":"1189:174:77","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":19809,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19799,"src":"1211:19:77","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}],"id":19808,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1203:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19807,"name":"address","nodeType":"ElementaryTypeName","src":"1203:7:77","typeDescriptions":{}}},"id":19810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1203:28:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":19813,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1243:1:77","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":19812,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1235:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19811,"name":"address","nodeType":"ElementaryTypeName","src":"1235:7:77","typeDescriptions":{}}},"id":19814,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1235:10:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1203:42:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19820,"nodeType":"IfStatement","src":"1199:107:77","trueBody":{"id":19819,"nodeType":"Block","src":"1247:59:77","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19816,"name":"InvalidProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19756,"src":"1268:25:77","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1268:27:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19818,"nodeType":"RevertStatement","src":"1261:34:77"}]}},{"expression":{"id":19823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19821,"name":"protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19753,"src":"1316:18:77","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19822,"name":"_protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19799,"src":"1337:19:77","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"src":"1316:40:77","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"id":19824,"nodeType":"ExpressionStatement","src":"1316:40:77"}]},"id":19826,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":19804,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19801,"src":"1175:12:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":19805,"kind":"baseConstructorSpecifier","modifierName":{"id":19803,"name":"Ownable","nameLocations":["1167:7:77"],"nodeType":"IdentifierPath","referencedDeclaration":9468,"src":"1167:7:77"},"nodeType":"ModifierInvocation","src":"1167:21:77"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19799,"mutability":"mutable","name":"_protocolFeeSweeper","nameLocation":"1124:19:77","nodeType":"VariableDeclaration","scope":19826,"src":"1104:39:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":19798,"nodeType":"UserDefinedTypeName","pathNode":{"id":19797,"name":"IProtocolFeeSweeper","nameLocations":["1104:19:77"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"1104:19:77"},"referencedDeclaration":1137,"src":"1104:19:77","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"visibility":"internal"},{"constant":false,"id":19801,"mutability":"mutable","name":"initialOwner","nameLocation":"1153:12:77","nodeType":"VariableDeclaration","scope":19826,"src":"1145:20:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19800,"name":"address","nodeType":"ElementaryTypeName","src":"1145:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1103:63:77"},"returnParameters":{"id":19806,"nodeType":"ParameterList","parameters":[],"src":"1189:0:77"},"scope":19827,"src":"1092:271:77","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":19828,"src":"424:941:77","usedErrors":[9334,9339,19756,19759],"usedEvents":[9345,9483]}],"src":"46:1320:77"},"id":77},"contracts/HyperEVMRateProvider.sol":{"ast":{"absolutePath":"contracts/HyperEVMRateProvider.sol","exportedSymbols":{"HyperEVMRateProvider":[19929],"HyperSpotPricePrecompile":[24542],"HyperTokenInfoPrecompile":[24611],"IHyperEVMRateProvider":[587],"IRateProvider":[24]},"id":19930,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":19829,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"45:24:78"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol","id":19831,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19930,"sourceUnit":588,"src":"71:126:78","symbolAliases":[{"foreign":{"id":19830,"name":"IHyperEVMRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":587,"src":"84:21:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","id":19833,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19930,"sourceUnit":25,"src":"198:112:78","symbolAliases":[{"foreign":{"id":19832,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24,"src":"207:13:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/utils/HyperSpotPricePrecompile.sol","file":"./utils/HyperSpotPricePrecompile.sol","id":19835,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19930,"sourceUnit":24543,"src":"312:80:78","symbolAliases":[{"foreign":{"id":19834,"name":"HyperSpotPricePrecompile","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24542,"src":"321:24:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/utils/HyperTokenInfoPrecompile.sol","file":"./utils/HyperTokenInfoPrecompile.sol","id":19837,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19930,"sourceUnit":24612,"src":"393:80:78","symbolAliases":[{"foreign":{"id":19836,"name":"HyperTokenInfoPrecompile","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24611,"src":"402:24:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":19839,"name":"IRateProvider","nameLocations":["839:13:78"],"nodeType":"IdentifierPath","referencedDeclaration":24,"src":"839:13:78"},"id":19840,"nodeType":"InheritanceSpecifier","src":"839:13:78"},{"baseName":{"id":19841,"name":"IHyperEVMRateProvider","nameLocations":["854:21:78"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"854:21:78"},"id":19842,"nodeType":"InheritanceSpecifier","src":"854:21:78"}],"canonicalName":"HyperEVMRateProvider","contractDependencies":[],"contractKind":"contract","documentation":{"id":19838,"nodeType":"StructuredDocumentation","src":"475:330:78","text":" @notice A rate provider for the HyperEVM.\n @dev HyperEVM has precompiles that allow to fetch the spot price of a token (in terms of USD or other tokens).\n This contract uses the spot price and the token info precompiles to return the rate of a token on-chain,\n scaled with 18 decimals (compatible with the Vault)."},"fullyImplemented":true,"id":19929,"linearizedBaseContracts":[19929,587,24],"name":"HyperEVMRateProvider","nameLocation":"815:20:78","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":19844,"mutability":"immutable","name":"_spotPriceMultiplier","nameLocation":"908:20:78","nodeType":"VariableDeclaration","scope":19929,"src":"882:46:78","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19843,"name":"uint256","nodeType":"ElementaryTypeName","src":"882:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":19846,"mutability":"immutable","name":"_pairIndex","nameLocation":"959:10:78","nodeType":"VariableDeclaration","scope":19929,"src":"934:35:78","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19845,"name":"uint32","nodeType":"ElementaryTypeName","src":"934:6:78","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"private"},{"constant":false,"id":19848,"mutability":"immutable","name":"_tokenIndex","nameLocation":"1000:11:78","nodeType":"VariableDeclaration","scope":19929,"src":"975:36:78","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19847,"name":"uint32","nodeType":"ElementaryTypeName","src":"975:6:78","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"private"},{"body":{"id":19882,"nodeType":"Block","src":"1067:720:78","statements":[{"assignments":[19856],"declarations":[{"constant":false,"id":19856,"mutability":"mutable","name":"szDecimals","nameLocation":"1083:10:78","nodeType":"VariableDeclaration","scope":19882,"src":"1077:16:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":19855,"name":"uint8","nodeType":"ElementaryTypeName","src":"1077:5:78","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":19861,"initialValue":{"arguments":[{"id":19859,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19850,"src":"1132:10:78","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":19857,"name":"HyperTokenInfoPrecompile","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24611,"src":"1096:24:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_HyperTokenInfoPrecompile_$24611_$","typeString":"type(library HyperTokenInfoPrecompile)"}},"id":19858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1121:10:78","memberName":"szDecimals","nodeType":"MemberAccess","referencedDeclaration":24610,"src":"1096:35:78","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint32_$returns$_t_uint8_$","typeString":"function (uint32) view returns (uint8)"}},"id":19860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1096:47:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"1077:66:78"},{"expression":{"id":19872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19862,"name":"_spotPriceMultiplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19844,"src":"1659:20:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31653138","id":19863,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1682:4:78","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":19864,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1690:2:78","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":19867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"38","id":19865,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1697:1:78","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":19866,"name":"szDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19856,"src":"1701:10:78","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1697:14:78","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":19868,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1696:16:78","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1690:22:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19870,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1689:24:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1682:31:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1659:54:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19873,"nodeType":"ExpressionStatement","src":"1659:54:78"},{"expression":{"id":19876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19874,"name":"_pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19846,"src":"1724:10:78","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19875,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19852,"src":"1737:9:78","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"1724:22:78","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":19877,"nodeType":"ExpressionStatement","src":"1724:22:78"},{"expression":{"id":19880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19878,"name":"_tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19848,"src":"1756:11:78","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19879,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19850,"src":"1770:10:78","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"1756:24:78","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":19881,"nodeType":"ExpressionStatement","src":"1756:24:78"}]},"id":19883,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19850,"mutability":"mutable","name":"tokenIndex","nameLocation":"1037:10:78","nodeType":"VariableDeclaration","scope":19883,"src":"1030:17:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19849,"name":"uint32","nodeType":"ElementaryTypeName","src":"1030:6:78","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":19852,"mutability":"mutable","name":"pairIndex","nameLocation":"1056:9:78","nodeType":"VariableDeclaration","scope":19883,"src":"1049:16:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19851,"name":"uint32","nodeType":"ElementaryTypeName","src":"1049:6:78","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1029:37:78"},"returnParameters":{"id":19854,"nodeType":"ParameterList","parameters":[],"src":"1067:0:78"},"scope":19929,"src":"1018:769:78","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[586],"body":{"id":19891,"nodeType":"Block","src":"1901:44:78","statements":[{"expression":{"id":19889,"name":"_spotPriceMultiplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19844,"src":"1918:20:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19888,"id":19890,"nodeType":"Return","src":"1911:27:78"}]},"documentation":{"id":19884,"nodeType":"StructuredDocumentation","src":"1793:37:78","text":"@inheritdoc IHyperEVMRateProvider"},"functionSelector":"a747d56f","id":19892,"implemented":true,"kind":"function","modifiers":[],"name":"getSpotPriceMultiplier","nameLocation":"1844:22:78","nodeType":"FunctionDefinition","parameters":{"id":19885,"nodeType":"ParameterList","parameters":[],"src":"1866:2:78"},"returnParameters":{"id":19888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19887,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19892,"src":"1892:7:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19886,"name":"uint256","nodeType":"ElementaryTypeName","src":"1892:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1891:9:78"},"scope":19929,"src":"1835:110:78","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[574],"body":{"id":19900,"nodeType":"Block","src":"2049:35:78","statements":[{"expression":{"id":19898,"name":"_tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19848,"src":"2066:11:78","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":19897,"id":19899,"nodeType":"Return","src":"2059:18:78"}]},"documentation":{"id":19893,"nodeType":"StructuredDocumentation","src":"1951:37:78","text":"@inheritdoc IHyperEVMRateProvider"},"functionSelector":"295d3ee8","id":19901,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenIndex","nameLocation":"2002:13:78","nodeType":"FunctionDefinition","parameters":{"id":19894,"nodeType":"ParameterList","parameters":[],"src":"2015:2:78"},"returnParameters":{"id":19897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19896,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19901,"src":"2041:6:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19895,"name":"uint32","nodeType":"ElementaryTypeName","src":"2041:6:78","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2040:8:78"},"scope":19929,"src":"1993:91:78","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[580],"body":{"id":19909,"nodeType":"Block","src":"2187:34:78","statements":[{"expression":{"id":19907,"name":"_pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19846,"src":"2204:10:78","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":19906,"id":19908,"nodeType":"Return","src":"2197:17:78"}]},"documentation":{"id":19902,"nodeType":"StructuredDocumentation","src":"2090:37:78","text":"@inheritdoc IHyperEVMRateProvider"},"functionSelector":"81bfa5d1","id":19910,"implemented":true,"kind":"function","modifiers":[],"name":"getPairIndex","nameLocation":"2141:12:78","nodeType":"FunctionDefinition","parameters":{"id":19903,"nodeType":"ParameterList","parameters":[],"src":"2153:2:78"},"returnParameters":{"id":19906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19905,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19910,"src":"2179:6:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19904,"name":"uint32","nodeType":"ElementaryTypeName","src":"2179:6:78","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2178:8:78"},"scope":19929,"src":"2132:89:78","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[23],"body":{"id":19927,"nodeType":"Block","src":"2312:132:78","statements":[{"assignments":[19917],"declarations":[{"constant":false,"id":19917,"mutability":"mutable","name":"spotPrice","nameLocation":"2330:9:78","nodeType":"VariableDeclaration","scope":19927,"src":"2322:17:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19916,"name":"uint256","nodeType":"ElementaryTypeName","src":"2322:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19922,"initialValue":{"arguments":[{"id":19920,"name":"_pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19846,"src":"2377:10:78","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":19918,"name":"HyperSpotPricePrecompile","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24542,"src":"2342:24:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_HyperSpotPricePrecompile_$24542_$","typeString":"type(library HyperSpotPricePrecompile)"}},"id":19919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2367:9:78","memberName":"spotPrice","nodeType":"MemberAccess","referencedDeclaration":24541,"src":"2342:34:78","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint32_$returns$_t_uint256_$","typeString":"function (uint32) view returns (uint256)"}},"id":19921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2342:46:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2322:66:78"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19923,"name":"spotPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19917,"src":"2405:9:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":19924,"name":"_spotPriceMultiplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19844,"src":"2417:20:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2405:32:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19915,"id":19926,"nodeType":"Return","src":"2398:39:78"}]},"documentation":{"id":19911,"nodeType":"StructuredDocumentation","src":"2227:29:78","text":"@inheritdoc IRateProvider"},"functionSelector":"679aefce","id":19928,"implemented":true,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"2270:7:78","nodeType":"FunctionDefinition","parameters":{"id":19912,"nodeType":"ParameterList","parameters":[],"src":"2277:2:78"},"returnParameters":{"id":19915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19914,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19928,"src":"2303:7:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19913,"name":"uint256","nodeType":"ElementaryTypeName","src":"2303:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2302:9:78"},"scope":19929,"src":"2261:183:78","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":19930,"src":"806:1640:78","usedErrors":[24490,24493,24569],"usedEvents":[]}],"src":"45:2402:78"},"id":78},"contracts/HyperEVMRateProviderFactory.sol":{"ast":{"absolutePath":"contracts/HyperEVMRateProviderFactory.sol","exportedSymbols":{"HyperEVMRateProvider":[19929],"HyperEVMRateProviderFactory":[20177],"IHyperEVMRateProvider":[587],"IHyperEVMRateProviderFactory":[664],"IVault":[2527],"SingletonAuthentication":[9271],"Version":[4981]},"id":20178,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":19931,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:79"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol","id":19933,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20178,"sourceUnit":665,"src":"72:140:79","symbolAliases":[{"foreign":{"id":19932,"name":"IHyperEVMRateProviderFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":664,"src":"85:28:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol","id":19935,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20178,"sourceUnit":588,"src":"213:126:79","symbolAliases":[{"foreign":{"id":19934,"name":"IHyperEVMRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":587,"src":"226:21:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":19937,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20178,"sourceUnit":2528,"src":"340:81:79","symbolAliases":[{"foreign":{"id":19936,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"349:6:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":19939,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20178,"sourceUnit":9272,"src":"423:104:79","symbolAliases":[{"foreign":{"id":19938,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9271,"src":"432:23:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","id":19941,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20178,"sourceUnit":4982,"src":"528:89:79","symbolAliases":[{"foreign":{"id":19940,"name":"Version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4981,"src":"537:7:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/HyperEVMRateProvider.sol","file":"./HyperEVMRateProvider.sol","id":19943,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20178,"sourceUnit":19930,"src":"619:66:79","symbolAliases":[{"foreign":{"id":19942,"name":"HyperEVMRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19929,"src":"628:20:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":19945,"name":"IHyperEVMRateProviderFactory","nameLocations":["799:28:79"],"nodeType":"IdentifierPath","referencedDeclaration":664,"src":"799:28:79"},"id":19946,"nodeType":"InheritanceSpecifier","src":"799:28:79"},{"baseName":{"id":19947,"name":"SingletonAuthentication","nameLocations":["829:23:79"],"nodeType":"IdentifierPath","referencedDeclaration":9271,"src":"829:23:79"},"id":19948,"nodeType":"InheritanceSpecifier","src":"829:23:79"},{"baseName":{"id":19949,"name":"Version","nameLocations":["854:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":4981,"src":"854:7:79"},"id":19950,"nodeType":"InheritanceSpecifier","src":"854:7:79"}],"canonicalName":"HyperEVMRateProviderFactory","contractDependencies":[19929],"contractKind":"contract","documentation":{"id":19944,"nodeType":"StructuredDocumentation","src":"687:72:79","text":"@notice Factory for deploying and managing HyperEVM rate providers."},"fullyImplemented":true,"id":20177,"linearizedBaseContracts":[20177,4981,34,9271,7517,4367,14,664],"name":"HyperEVMRateProviderFactory","nameLocation":"768:27:79","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":19952,"mutability":"immutable","name":"_rateProviderVersion","nameLocation":"895:20:79","nodeType":"VariableDeclaration","scope":20177,"src":"868:47:79","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19951,"name":"uint256","nodeType":"ElementaryTypeName","src":"868:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19954,"mutability":"mutable","name":"_isDisabled","nameLocation":"935:11:79","nodeType":"VariableDeclaration","scope":20177,"src":"921:25:79","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19953,"name":"bool","nodeType":"ElementaryTypeName","src":"921:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":19959,"mutability":"mutable","name":"_rateProviders","nameLocation":"1032:14:79","nodeType":"VariableDeclaration","scope":20177,"src":"953:93:79","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_contract$_IHyperEVMRateProvider_$587_$","typeString":"mapping(bytes32 => contract IHyperEVMRateProvider)"},"typeName":{"id":19958,"keyName":"rateProviderId","keyNameLocation":"969:14:79","keyType":{"id":19955,"name":"bytes32","nodeType":"ElementaryTypeName","src":"961:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"953:69:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_contract$_IHyperEVMRateProvider_$587_$","typeString":"mapping(bytes32 => contract IHyperEVMRateProvider)"},"valueName":"rateProvider","valueNameLocation":"1009:12:79","valueType":{"id":19957,"nodeType":"UserDefinedTypeName","pathNode":{"id":19956,"name":"IHyperEVMRateProvider","nameLocations":["987:21:79"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"987:21:79"},"referencedDeclaration":587,"src":"987:21:79","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}}},"visibility":"internal"},{"constant":false,"id":19964,"mutability":"mutable","name":"_isRateProviderFromFactory","nameLocation":"1126:26:79","nodeType":"VariableDeclaration","scope":20177,"src":"1052:100:79","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IHyperEVMRateProvider_$587_$_t_bool_$","typeString":"mapping(contract IHyperEVMRateProvider => bool)"},"typeName":{"id":19963,"keyName":"rateProvider","keyNameLocation":"1082:12:79","keyType":{"id":19961,"nodeType":"UserDefinedTypeName","pathNode":{"id":19960,"name":"IHyperEVMRateProvider","nameLocations":["1060:21:79"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"1060:21:79"},"referencedDeclaration":587,"src":"1060:21:79","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"nodeType":"Mapping","src":"1052:64:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IHyperEVMRateProvider_$587_$_t_bool_$","typeString":"mapping(contract IHyperEVMRateProvider => bool)"},"valueName":"creationFlag","valueNameLocation":"1103:12:79","valueType":{"id":19962,"name":"bool","nodeType":"ElementaryTypeName","src":"1098:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"body":{"id":19984,"nodeType":"Block","src":"1329:59:79","statements":[{"expression":{"id":19982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19980,"name":"_rateProviderVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19952,"src":"1339:20:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19981,"name":"rateProviderVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19971,"src":"1362:19:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1339:42:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19983,"nodeType":"ExpressionStatement","src":"1339:42:79"}]},"id":19985,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":19974,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19967,"src":"1298:5:79","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}}],"id":19975,"kind":"baseConstructorSpecifier","modifierName":{"id":19973,"name":"SingletonAuthentication","nameLocations":["1274:23:79"],"nodeType":"IdentifierPath","referencedDeclaration":9271,"src":"1274:23:79"},"nodeType":"ModifierInvocation","src":"1274:30:79"},{"arguments":[{"id":19977,"name":"factoryVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19969,"src":"1313:14:79","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":19978,"kind":"baseConstructorSpecifier","modifierName":{"id":19976,"name":"Version","nameLocations":["1305:7:79"],"nodeType":"IdentifierPath","referencedDeclaration":4981,"src":"1305:7:79"},"nodeType":"ModifierInvocation","src":"1305:23:79"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19967,"mutability":"mutable","name":"vault","nameLocation":"1187:5:79","nodeType":"VariableDeclaration","scope":19985,"src":"1180:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":19966,"nodeType":"UserDefinedTypeName","pathNode":{"id":19965,"name":"IVault","nameLocations":["1180:6:79"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"1180:6:79"},"referencedDeclaration":2527,"src":"1180:6:79","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":19969,"mutability":"mutable","name":"factoryVersion","nameLocation":"1216:14:79","nodeType":"VariableDeclaration","scope":19985,"src":"1202:28:79","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":19968,"name":"string","nodeType":"ElementaryTypeName","src":"1202:6:79","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":19971,"mutability":"mutable","name":"rateProviderVersion","nameLocation":"1248:19:79","nodeType":"VariableDeclaration","scope":19985,"src":"1240:27:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19970,"name":"uint256","nodeType":"ElementaryTypeName","src":"1240:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1170:103:79"},"returnParameters":{"id":19979,"nodeType":"ParameterList","parameters":[],"src":"1329:0:79"},"scope":20177,"src":"1159:229:79","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[628],"body":{"id":19993,"nodeType":"Block","src":"1509:44:79","statements":[{"expression":{"id":19991,"name":"_rateProviderVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19952,"src":"1526:20:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":19990,"id":19992,"nodeType":"Return","src":"1519:27:79"}]},"documentation":{"id":19986,"nodeType":"StructuredDocumentation","src":"1394:44:79","text":"@inheritdoc IHyperEVMRateProviderFactory"},"functionSelector":"381c7a4f","id":19994,"implemented":true,"kind":"function","modifiers":[],"name":"getRateProviderVersion","nameLocation":"1452:22:79","nodeType":"FunctionDefinition","parameters":{"id":19987,"nodeType":"ParameterList","parameters":[],"src":"1474:2:79"},"returnParameters":{"id":19990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19989,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19994,"src":"1500:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19988,"name":"uint256","nodeType":"ElementaryTypeName","src":"1500:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1499:9:79"},"scope":20177,"src":"1443:110:79","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[639],"body":{"id":20073,"nodeType":"Block","src":"1715:645:79","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":20005,"name":"_ensureEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20176,"src":"1725:14:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":20006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1725:16:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20007,"nodeType":"ExpressionStatement","src":"1725:16:79"},{"assignments":[20009],"declarations":[{"constant":false,"id":20009,"mutability":"mutable","name":"rateProviderId","nameLocation":"1760:14:79","nodeType":"VariableDeclaration","scope":20073,"src":"1752:22:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20008,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1752:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":20014,"initialValue":{"arguments":[{"id":20011,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19997,"src":"1800:10:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20012,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19999,"src":"1812:9:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":20010,"name":"_computeRateProviderId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20166,"src":"1777:22:79","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (uint32,uint32) pure returns (bytes32)"}},"id":20013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1777:45:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1752:70:79"},{"assignments":[20016],"declarations":[{"constant":false,"id":20016,"mutability":"mutable","name":"existingRateProvider","nameLocation":"1841:20:79","nodeType":"VariableDeclaration","scope":20073,"src":"1833:28:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20015,"name":"address","nodeType":"ElementaryTypeName","src":"1833:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":20023,"initialValue":{"arguments":[{"baseExpression":{"id":20019,"name":"_rateProviders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19959,"src":"1872:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_contract$_IHyperEVMRateProvider_$587_$","typeString":"mapping(bytes32 => contract IHyperEVMRateProvider)"}},"id":20021,"indexExpression":{"id":20020,"name":"rateProviderId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20009,"src":"1887:14:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1872:30:79","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}],"id":20018,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1864:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20017,"name":"address","nodeType":"ElementaryTypeName","src":"1864:7:79","typeDescriptions":{}}},"id":20022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1864:39:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1833:70:79"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20024,"name":"existingRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20016,"src":"1918:20:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":20027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1950:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":20026,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1942:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20025,"name":"address","nodeType":"ElementaryTypeName","src":"1942:7:79","typeDescriptions":{}}},"id":20028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1942:10:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1918:34:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20037,"nodeType":"IfStatement","src":"1914:142:79","trueBody":{"id":20036,"nodeType":"Block","src":"1954:102:79","statements":[{"errorCall":{"arguments":[{"id":20031,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19997,"src":"2001:10:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20032,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19999,"src":"2013:9:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20033,"name":"existingRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20016,"src":"2024:20:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20030,"name":"RateProviderAlreadyExists","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":612,"src":"1975:25:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint32_$_t_uint32_$_t_address_$returns$_t_error_$","typeString":"function (uint32,uint32,address) pure returns (error)"}},"id":20034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1975:70:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20035,"nodeType":"RevertStatement","src":"1968:77:79"}]}},{"expression":{"id":20050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20038,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20003,"src":"2066:12:79","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"id":20045,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19997,"src":"2136:10:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20046,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19999,"src":"2148:9:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":20044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"2111:24:79","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$_t_uint32_$_t_uint32_$returns$_t_contract$_HyperEVMRateProvider_$19929_$","typeString":"function (uint32,uint32) returns (contract HyperEVMRateProvider)"},"typeName":{"id":20043,"nodeType":"UserDefinedTypeName","pathNode":{"id":20042,"name":"HyperEVMRateProvider","nameLocations":["2115:20:79"],"nodeType":"IdentifierPath","referencedDeclaration":19929,"src":"2115:20:79"},"referencedDeclaration":19929,"src":"2115:20:79","typeDescriptions":{"typeIdentifier":"t_contract$_HyperEVMRateProvider_$19929","typeString":"contract HyperEVMRateProvider"}}},"id":20047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2111:47:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_HyperEVMRateProvider_$19929","typeString":"contract HyperEVMRateProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_HyperEVMRateProvider_$19929","typeString":"contract HyperEVMRateProvider"}],"id":20041,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2103:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20040,"name":"address","nodeType":"ElementaryTypeName","src":"2103:7:79","typeDescriptions":{}}},"id":20048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2103:56:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20039,"name":"IHyperEVMRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":587,"src":"2081:21:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IHyperEVMRateProvider_$587_$","typeString":"type(contract IHyperEVMRateProvider)"}},"id":20049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2081:79:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"src":"2066:94:79","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"id":20051,"nodeType":"ExpressionStatement","src":"2066:94:79"},{"expression":{"id":20056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20052,"name":"_rateProviders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19959,"src":"2170:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_contract$_IHyperEVMRateProvider_$587_$","typeString":"mapping(bytes32 => contract IHyperEVMRateProvider)"}},"id":20054,"indexExpression":{"id":20053,"name":"rateProviderId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20009,"src":"2185:14:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2170:30:79","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20055,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20003,"src":"2203:12:79","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"src":"2170:45:79","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"id":20057,"nodeType":"ExpressionStatement","src":"2170:45:79"},{"expression":{"id":20062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20058,"name":"_isRateProviderFromFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19964,"src":"2225:26:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IHyperEVMRateProvider_$587_$_t_bool_$","typeString":"mapping(contract IHyperEVMRateProvider => bool)"}},"id":20060,"indexExpression":{"id":20059,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20003,"src":"2252:12:79","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2225:40:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":20061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2268:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2225:47:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20063,"nodeType":"ExpressionStatement","src":"2225:47:79"},{"eventCall":{"arguments":[{"id":20065,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19997,"src":"2308:10:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20066,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19999,"src":"2320:9:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"arguments":[{"id":20069,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20003,"src":"2339:12:79","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}],"id":20068,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2331:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20067,"name":"address","nodeType":"ElementaryTypeName","src":"2331:7:79","typeDescriptions":{}}},"id":20070,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2331:21:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20064,"name":"RateProviderCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":600,"src":"2288:19:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,uint256,address)"}},"id":20071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2288:65:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20072,"nodeType":"EmitStatement","src":"2283:70:79"}]},"documentation":{"id":19995,"nodeType":"StructuredDocumentation","src":"1559:44:79","text":"@inheritdoc IHyperEVMRateProviderFactory"},"functionSelector":"568acb79","id":20074,"implemented":true,"kind":"function","modifiers":[],"name":"create","nameLocation":"1617:6:79","nodeType":"FunctionDefinition","parameters":{"id":20000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19997,"mutability":"mutable","name":"tokenIndex","nameLocation":"1631:10:79","nodeType":"VariableDeclaration","scope":20074,"src":"1624:17:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19996,"name":"uint32","nodeType":"ElementaryTypeName","src":"1624:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":19999,"mutability":"mutable","name":"pairIndex","nameLocation":"1650:9:79","nodeType":"VariableDeclaration","scope":20074,"src":"1643:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":19998,"name":"uint32","nodeType":"ElementaryTypeName","src":"1643:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1623:37:79"},"returnParameters":{"id":20004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20003,"mutability":"mutable","name":"rateProvider","nameLocation":"1701:12:79","nodeType":"VariableDeclaration","scope":20074,"src":"1679:34:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"},"typeName":{"id":20002,"nodeType":"UserDefinedTypeName","pathNode":{"id":20001,"name":"IHyperEVMRateProvider","nameLocations":["1679:21:79"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"1679:21:79"},"referencedDeclaration":587,"src":"1679:21:79","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"visibility":"internal"}],"src":"1678:36:79"},"scope":20177,"src":"1608:752:79","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[650],"body":{"id":20116,"nodeType":"Block","src":"2558:296:79","statements":[{"assignments":[20086],"declarations":[{"constant":false,"id":20086,"mutability":"mutable","name":"rateProviderId","nameLocation":"2576:14:79","nodeType":"VariableDeclaration","scope":20116,"src":"2568:22:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20085,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2568:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":20091,"initialValue":{"arguments":[{"id":20088,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20077,"src":"2616:10:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20089,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20079,"src":"2628:9:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":20087,"name":"_computeRateProviderId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20166,"src":"2593:22:79","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint32_$_t_uint32_$returns$_t_bytes32_$","typeString":"function (uint32,uint32) pure returns (bytes32)"}},"id":20090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2593:45:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2568:70:79"},{"expression":{"id":20096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20092,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20083,"src":"2648:12:79","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":20093,"name":"_rateProviders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19959,"src":"2663:14:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_contract$_IHyperEVMRateProvider_$587_$","typeString":"mapping(bytes32 => contract IHyperEVMRateProvider)"}},"id":20095,"indexExpression":{"id":20094,"name":"rateProviderId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20086,"src":"2678:14:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2663:30:79","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"src":"2648:45:79","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"id":20097,"nodeType":"ExpressionStatement","src":"2648:45:79"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":20100,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20083,"src":"2715:12:79","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}],"id":20099,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2707:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20098,"name":"address","nodeType":"ElementaryTypeName","src":"2707:7:79","typeDescriptions":{}}},"id":20101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2707:21:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":20104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2740:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":20103,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2732:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20102,"name":"address","nodeType":"ElementaryTypeName","src":"2732:7:79","typeDescriptions":{}}},"id":20105,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2732:10:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2707:35:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20113,"nodeType":"IfStatement","src":"2703:116:79","trueBody":{"id":20112,"nodeType":"Block","src":"2744:75:79","statements":[{"errorCall":{"arguments":[{"id":20108,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20077,"src":"2786:10:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20109,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20079,"src":"2798:9:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":20107,"name":"RateProviderNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":619,"src":"2765:20:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint32_$_t_uint32_$returns$_t_error_$","typeString":"function (uint32,uint32) pure returns (error)"}},"id":20110,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2765:43:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20111,"nodeType":"RevertStatement","src":"2758:50:79"}]}},{"expression":{"id":20114,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20083,"src":"2835:12:79","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"functionReturnParameters":20084,"id":20115,"nodeType":"Return","src":"2828:19:79"}]},"documentation":{"id":20075,"nodeType":"StructuredDocumentation","src":"2366:44:79","text":"@inheritdoc IHyperEVMRateProviderFactory"},"functionSelector":"99b8113f","id":20117,"implemented":true,"kind":"function","modifiers":[],"name":"getRateProvider","nameLocation":"2424:15:79","nodeType":"FunctionDefinition","parameters":{"id":20080,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20077,"mutability":"mutable","name":"tokenIndex","nameLocation":"2456:10:79","nodeType":"VariableDeclaration","scope":20117,"src":"2449:17:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20076,"name":"uint32","nodeType":"ElementaryTypeName","src":"2449:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":20079,"mutability":"mutable","name":"pairIndex","nameLocation":"2483:9:79","nodeType":"VariableDeclaration","scope":20117,"src":"2476:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20078,"name":"uint32","nodeType":"ElementaryTypeName","src":"2476:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2439:59:79"},"returnParameters":{"id":20084,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20083,"mutability":"mutable","name":"rateProvider","nameLocation":"2544:12:79","nodeType":"VariableDeclaration","scope":20117,"src":"2522:34:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"},"typeName":{"id":20082,"nodeType":"UserDefinedTypeName","pathNode":{"id":20081,"name":"IHyperEVMRateProvider","nameLocations":["2522:21:79"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"2522:21:79"},"referencedDeclaration":587,"src":"2522:21:79","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"visibility":"internal"}],"src":"2521:36:79"},"scope":20177,"src":"2415:439:79","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[659],"body":{"id":20130,"nodeType":"Block","src":"3009:64:79","statements":[{"expression":{"baseExpression":{"id":20126,"name":"_isRateProviderFromFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19964,"src":"3026:26:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IHyperEVMRateProvider_$587_$_t_bool_$","typeString":"mapping(contract IHyperEVMRateProvider => bool)"}},"id":20128,"indexExpression":{"id":20127,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20121,"src":"3053:12:79","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3026:40:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":20125,"id":20129,"nodeType":"Return","src":"3019:47:79"}]},"documentation":{"id":20118,"nodeType":"StructuredDocumentation","src":"2860:44:79","text":"@inheritdoc IHyperEVMRateProviderFactory"},"functionSelector":"19912f71","id":20131,"implemented":true,"kind":"function","modifiers":[],"name":"isRateProviderFromFactory","nameLocation":"2918:25:79","nodeType":"FunctionDefinition","parameters":{"id":20122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20121,"mutability":"mutable","name":"rateProvider","nameLocation":"2966:12:79","nodeType":"VariableDeclaration","scope":20131,"src":"2944:34:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"},"typeName":{"id":20120,"nodeType":"UserDefinedTypeName","pathNode":{"id":20119,"name":"IHyperEVMRateProvider","nameLocations":["2944:21:79"],"nodeType":"IdentifierPath","referencedDeclaration":587,"src":"2944:21:79"},"referencedDeclaration":587,"src":"2944:21:79","typeDescriptions":{"typeIdentifier":"t_contract$_IHyperEVMRateProvider_$587","typeString":"contract IHyperEVMRateProvider"}},"visibility":"internal"}],"src":"2943:36:79"},"returnParameters":{"id":20125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20124,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20131,"src":"3003:4:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20123,"name":"bool","nodeType":"ElementaryTypeName","src":"3003:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3002:6:79"},"scope":20177,"src":"2909:164:79","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[663],"body":{"id":20147,"nodeType":"Block","src":"3169:106:79","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":20137,"name":"_ensureEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20176,"src":"3179:14:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":20138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3179:16:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20139,"nodeType":"ExpressionStatement","src":"3179:16:79"},{"expression":{"id":20142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20140,"name":"_isDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19954,"src":"3206:11:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":20141,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3220:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"3206:18:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20143,"nodeType":"ExpressionStatement","src":"3206:18:79"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20144,"name":"RateProviderFactoryDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":603,"src":"3239:27:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":20145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3239:29:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20146,"nodeType":"EmitStatement","src":"3234:34:79"}]},"documentation":{"id":20132,"nodeType":"StructuredDocumentation","src":"3079:44:79","text":"@inheritdoc IHyperEVMRateProviderFactory"},"functionSelector":"2f2770db","id":20148,"implemented":true,"kind":"function","modifiers":[{"id":20135,"kind":"modifierInvocation","modifierName":{"id":20134,"name":"authenticate","nameLocations":["3156:12:79"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"3156:12:79"},"nodeType":"ModifierInvocation","src":"3156:12:79"}],"name":"disable","nameLocation":"3137:7:79","nodeType":"FunctionDefinition","parameters":{"id":20133,"nodeType":"ParameterList","parameters":[],"src":"3144:2:79"},"returnParameters":{"id":20136,"nodeType":"ParameterList","parameters":[],"src":"3169:0:79"},"scope":20177,"src":"3128:147:79","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20165,"nodeType":"Block","src":"3382:68:79","statements":[{"expression":{"arguments":[{"arguments":[{"id":20160,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20150,"src":"3420:10:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":20161,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20152,"src":"3432:9:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":20158,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3409:3:79","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":20159,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3413:6:79","memberName":"encode","nodeType":"MemberAccess","src":"3409:10:79","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":20162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3409:33:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":20157,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3399:9:79","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":20163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3399:44:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":20156,"id":20164,"nodeType":"Return","src":"3392:51:79"}]},"id":20166,"implemented":true,"kind":"function","modifiers":[],"name":"_computeRateProviderId","nameLocation":"3290:22:79","nodeType":"FunctionDefinition","parameters":{"id":20153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20150,"mutability":"mutable","name":"tokenIndex","nameLocation":"3320:10:79","nodeType":"VariableDeclaration","scope":20166,"src":"3313:17:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20149,"name":"uint32","nodeType":"ElementaryTypeName","src":"3313:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":20152,"mutability":"mutable","name":"pairIndex","nameLocation":"3339:9:79","nodeType":"VariableDeclaration","scope":20166,"src":"3332:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":20151,"name":"uint32","nodeType":"ElementaryTypeName","src":"3332:6:79","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"3312:37:79"},"returnParameters":{"id":20156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20155,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20166,"src":"3373:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20154,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3373:7:79","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3372:9:79"},"scope":20177,"src":"3281:169:79","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":20175,"nodeType":"Block","src":"3496:96:79","statements":[{"condition":{"id":20169,"name":"_isDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19954,"src":"3510:11:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20174,"nodeType":"IfStatement","src":"3506:80:79","trueBody":{"id":20173,"nodeType":"Block","src":"3523:63:79","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20170,"name":"RateProviderFactoryIsDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":622,"src":"3544:29:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":20171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3544:31:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20172,"nodeType":"RevertStatement","src":"3537:38:79"}]}}]},"id":20176,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureEnabled","nameLocation":"3465:14:79","nodeType":"FunctionDefinition","parameters":{"id":20167,"nodeType":"ParameterList","parameters":[],"src":"3479:2:79"},"returnParameters":{"id":20168,"nodeType":"ParameterList","parameters":[],"src":"3496:0:79"},"scope":20177,"src":"3456:136:79","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":20178,"src":"759:2835:79","usedErrors":[5,612,619,622,7337],"usedEvents":[600,603]}],"src":"46:3549:79"},"id":79},"contracts/OwnableAuthentication.sol":{"ast":{"absolutePath":"contracts/OwnableAuthentication.sol","exportedSymbols":{"Authentication":[4367],"IAuthorizer":[1341],"IVault":[2527],"Ownable":[9468],"Ownable2Step":[9554],"OwnableAuthentication":[20312]},"id":20313,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":20179,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:80"},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"@openzeppelin/contracts/access/Ownable.sol","id":20181,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20313,"sourceUnit":9469,"src":"72:69:80","symbolAliases":[{"foreign":{"id":20180,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9468,"src":"81:7:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/Ownable2Step.sol","file":"@openzeppelin/contracts/access/Ownable2Step.sol","id":20183,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20313,"sourceUnit":9555,"src":"142:79:80","symbolAliases":[{"foreign":{"id":20182,"name":"Ownable2Step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9554,"src":"151:12:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":20185,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20313,"sourceUnit":1342,"src":"223:91:80","symbolAliases":[{"foreign":{"id":20184,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"232:11:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":20187,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20313,"sourceUnit":2528,"src":"315:81:80","symbolAliases":[{"foreign":{"id":20186,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"324:6:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","id":20189,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20313,"sourceUnit":4368,"src":"398:103:80","symbolAliases":[{"foreign":{"id":20188,"name":"Authentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4367,"src":"407:14:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":20191,"name":"Ownable2Step","nameLocations":["1243:12:80"],"nodeType":"IdentifierPath","referencedDeclaration":9554,"src":"1243:12:80"},"id":20192,"nodeType":"InheritanceSpecifier","src":"1243:12:80"},{"baseName":{"id":20193,"name":"Authentication","nameLocations":["1257:14:80"],"nodeType":"IdentifierPath","referencedDeclaration":4367,"src":"1257:14:80"},"id":20194,"nodeType":"InheritanceSpecifier","src":"1257:14:80"}],"canonicalName":"OwnableAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":20190,"nodeType":"StructuredDocumentation","src":"503:705:80","text":" @notice OwnableAuthentication is a contract that combines ownership management with authentication.\n @dev Use it to pre-wire admin multisigs upon deployment to a contract that requires permissioned functions to work,\n where the impact of the owner going rogue is minimal. Contract registries, fee burners, and other utility contracts\n are good examples.\n In turn, the pre-configured owner can speed up operations as it can perform any action right after deployment without\n waiting for governance to set up the authorizer, which can take whole weeks.\n On the other hand, governance can always revoke or change the owner at any given time, keeping superior powers\n above the owner."},"fullyImplemented":true,"id":20312,"linearizedBaseContracts":[20312,4367,14,9554,9468,12348],"name":"OwnableAuthentication","nameLocation":"1218:21:80","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":20195,"nodeType":"StructuredDocumentation","src":"1278:39:80","text":"@notice The vault has not been set."},"errorSelector":"c8e28160","id":20197,"name":"VaultNotSet","nameLocation":"1328:11:80","nodeType":"ErrorDefinition","parameters":{"id":20196,"nodeType":"ParameterList","parameters":[],"src":"1339:2:80"},"src":"1322:20:80"},{"constant":false,"functionSelector":"fbfa77cf","id":20200,"mutability":"immutable","name":"vault","nameLocation":"1372:5:80","nodeType":"VariableDeclaration","scope":20312,"src":"1348:29:80","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":20199,"nodeType":"UserDefinedTypeName","pathNode":{"id":20198,"name":"IVault","nameLocations":["1348:6:80"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"1348:6:80"},"referencedDeclaration":2527,"src":"1348:6:80","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"public"},{"body":{"id":20244,"nodeType":"Block","src":"1534:121:80","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":20228,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20203,"src":"1556:6:80","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}],"id":20227,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1548:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20226,"name":"address","nodeType":"ElementaryTypeName","src":"1548:7:80","typeDescriptions":{}}},"id":20229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1548:15:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":20232,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1575:1:80","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":20231,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1567:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20230,"name":"address","nodeType":"ElementaryTypeName","src":"1567:7:80","typeDescriptions":{}}},"id":20233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1567:10:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1548:29:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20239,"nodeType":"IfStatement","src":"1544:80:80","trueBody":{"id":20238,"nodeType":"Block","src":"1579:45:80","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20235,"name":"VaultNotSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20197,"src":"1600:11:80","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":20236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1600:13:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20237,"nodeType":"RevertStatement","src":"1593:20:80"}]}},{"expression":{"id":20242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20240,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20200,"src":"1634:5:80","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20241,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20203,"src":"1642:6:80","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"src":"1634:14:80","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":20243,"nodeType":"ExpressionStatement","src":"1634:14:80"}]},"id":20245,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":20208,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20205,"src":"1463:12:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":20209,"kind":"baseConstructorSpecifier","modifierName":{"id":20207,"name":"Ownable","nameLocations":["1455:7:80"],"nodeType":"IdentifierPath","referencedDeclaration":9468,"src":"1455:7:80"},"nodeType":"ModifierInvocation","src":"1455:21:80"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":20219,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1524:4:80","typeDescriptions":{"typeIdentifier":"t_contract$_OwnableAuthentication_$20312","typeString":"contract OwnableAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_OwnableAuthentication_$20312","typeString":"contract OwnableAuthentication"}],"id":20218,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1516:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20217,"name":"address","nodeType":"ElementaryTypeName","src":"1516:7:80","typeDescriptions":{}}},"id":20220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1516:13:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20216,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1508:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":20215,"name":"uint160","nodeType":"ElementaryTypeName","src":"1508:7:80","typeDescriptions":{}}},"id":20221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1508:22:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":20214,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1500:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":20213,"name":"uint256","nodeType":"ElementaryTypeName","src":"1500:7:80","typeDescriptions":{}}},"id":20222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1500:31:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20212,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1492:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":20211,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1492:7:80","typeDescriptions":{}}},"id":20223,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1492:40:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":20224,"kind":"baseConstructorSpecifier","modifierName":{"id":20210,"name":"Authentication","nameLocations":["1477:14:80"],"nodeType":"IdentifierPath","referencedDeclaration":4367,"src":"1477:14:80"},"nodeType":"ModifierInvocation","src":"1477:56:80"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":20206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20203,"mutability":"mutable","name":"vault_","nameLocation":"1412:6:80","nodeType":"VariableDeclaration","scope":20245,"src":"1405:13:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":20202,"nodeType":"UserDefinedTypeName","pathNode":{"id":20201,"name":"IVault","nameLocations":["1405:6:80"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"1405:6:80"},"referencedDeclaration":2527,"src":"1405:6:80","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":20205,"mutability":"mutable","name":"initialOwner","nameLocation":"1436:12:80","nodeType":"VariableDeclaration","scope":20245,"src":"1428:20:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20204,"name":"address","nodeType":"ElementaryTypeName","src":"1428:7:80","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1395:59:80"},"returnParameters":{"id":20225,"nodeType":"ParameterList","parameters":[],"src":"1534:0:80"},"scope":20312,"src":"1384:271:80","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":20256,"nodeType":"Block","src":"1793:45:80","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20252,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20200,"src":"1810:5:80","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":20253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1816:13:80","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":3841,"src":"1810:19:80","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1341_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":20254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1810:21:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"functionReturnParameters":20251,"id":20255,"nodeType":"Return","src":"1803:28:80"}]},"documentation":{"id":20246,"nodeType":"StructuredDocumentation","src":"1661:66:80","text":"@notice Returns the authorizer address according to the Vault."},"functionSelector":"aaabadc5","id":20257,"implemented":true,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"1741:13:80","nodeType":"FunctionDefinition","parameters":{"id":20247,"nodeType":"ParameterList","parameters":[],"src":"1754:2:80"},"returnParameters":{"id":20251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20250,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20257,"src":"1780:11:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"},"typeName":{"id":20249,"nodeType":"UserDefinedTypeName","pathNode":{"id":20248,"name":"IAuthorizer","nameLocations":["1780:11:80"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"1780:11:80"},"referencedDeclaration":1341,"src":"1780:11:80","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"1779:13:80"},"scope":20312,"src":"1732:106:80","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":20279,"nodeType":"Block","src":"2332:208:80","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20265,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2423:3:80","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2427:6:80","memberName":"sender","nodeType":"MemberAccess","src":"2423:10:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":20267,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9388,"src":"2437:5:80","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":20268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2437:7:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2423:21:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20274,"nodeType":"IfStatement","src":"2419:77:80","trueBody":{"id":20273,"nodeType":"Block","src":"2446:50:80","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20270,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"2467:16:80","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":20271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2467:18:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20272,"nodeType":"RevertStatement","src":"2460:25:80"}]}},{"expression":{"arguments":[{"id":20276,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20260,"src":"2524:8:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20275,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[9529],"referencedDeclaration":9529,"src":"2505:18:80","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":20277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2505:28:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20278,"nodeType":"ExpressionStatement","src":"2505:28:80"}]},"documentation":{"id":20258,"nodeType":"StructuredDocumentation","src":"1844:411:80","text":" @notice Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\n @dev This allows governance to revoke the owner at any time, preserving control above the owner at all times.\n address(0) is also a valid owner, as governance can simply choose to revoke ownership.\n Ownership can always be forced back to any address later on."},"functionSelector":"a89b1128","id":20280,"implemented":true,"kind":"function","modifiers":[{"id":20263,"kind":"modifierInvocation","modifierName":{"id":20262,"name":"authenticate","nameLocations":["2319:12:80"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"2319:12:80"},"nodeType":"ModifierInvocation","src":"2319:12:80"}],"name":"forceTransferOwnership","nameLocation":"2269:22:80","nodeType":"FunctionDefinition","parameters":{"id":20261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20260,"mutability":"mutable","name":"newOwner","nameLocation":"2300:8:80","nodeType":"VariableDeclaration","scope":20280,"src":"2292:16:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20259,"name":"address","nodeType":"ElementaryTypeName","src":"2292:7:80","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2291:18:80"},"returnParameters":{"id":20264,"nodeType":"ParameterList","parameters":[],"src":"2332:0:80"},"scope":20312,"src":"2260:280:80","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4366],"body":{"id":20310,"nodeType":"Block","src":"2645:283:80","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20290,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20284,"src":"2721:4:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":20291,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9388,"src":"2729:5:80","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":20292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2729:7:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2721:15:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20297,"nodeType":"IfStatement","src":"2717:57:80","trueBody":{"id":20296,"nodeType":"Block","src":"2738:36:80","statements":[{"expression":{"hexValue":"74727565","id":20294,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2759:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":20289,"id":20295,"nodeType":"Return","src":"2752:11:80"}]}},{"expression":{"arguments":[{"id":20302,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20282,"src":"2891:8:80","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":20303,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20284,"src":"2901:4:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":20306,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2915:4:80","typeDescriptions":{"typeIdentifier":"t_contract$_OwnableAuthentication_$20312","typeString":"contract OwnableAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_OwnableAuthentication_$20312","typeString":"contract OwnableAuthentication"}],"id":20305,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2907:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20304,"name":"address","nodeType":"ElementaryTypeName","src":"2907:7:80","typeDescriptions":{}}},"id":20307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2907:13:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20298,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20200,"src":"2858:5:80","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":20299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2864:13:80","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":3841,"src":"2858:19:80","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1341_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":20300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2858:21:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"id":20301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2880:10:80","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":1340,"src":"2858:32:80","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":20308,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2858:63:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":20289,"id":20309,"nodeType":"Return","src":"2851:70:80"}]},"id":20311,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"2555:11:80","nodeType":"FunctionDefinition","overrides":{"id":20286,"nodeType":"OverrideSpecifier","overrides":[],"src":"2621:8:80"},"parameters":{"id":20285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20282,"mutability":"mutable","name":"actionId","nameLocation":"2575:8:80","nodeType":"VariableDeclaration","scope":20311,"src":"2567:16:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20281,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2567:7:80","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":20284,"mutability":"mutable","name":"user","nameLocation":"2593:4:80","nodeType":"VariableDeclaration","scope":20311,"src":"2585:12:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20283,"name":"address","nodeType":"ElementaryTypeName","src":"2585:7:80","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2566:32:80"},"returnParameters":{"id":20289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20288,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20311,"src":"2639:4:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20287,"name":"bool","nodeType":"ElementaryTypeName","src":"2639:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2638:6:80"},"scope":20312,"src":"2546:382:80","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":20313,"src":"1209:1721:80","usedErrors":[5,9334,9339,20197],"usedEvents":[9345,9483]}],"src":"46:2885:80"},"id":80},"contracts/PoolHelperCommon.sol":{"ast":{"absolutePath":"contracts/PoolHelperCommon.sol","exportedSymbols":{"Arrays":[12286],"EnumerableSet":[17600],"IPoolHelperCommon":[865],"IVault":[2527],"IVaultErrors":[3184],"Math":[14309],"OwnableAuthentication":[20312],"PoolHelperCommon":[21041]},"id":21042,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":20314,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:81"},{"absolutePath":"@openzeppelin/contracts/utils/structs/EnumerableSet.sol","file":"@openzeppelin/contracts/utils/structs/EnumerableSet.sol","id":20315,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21042,"sourceUnit":17601,"src":"72:65:81","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol","id":20317,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21042,"sourceUnit":866,"src":"139:114:81","symbolAliases":[{"foreign":{"id":20316,"name":"IPoolHelperCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":865,"src":"148:17:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":20319,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21042,"sourceUnit":3185,"src":"254:93:81","symbolAliases":[{"foreign":{"id":20318,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3184,"src":"263:12:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":20321,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21042,"sourceUnit":2528,"src":"348:81:81","symbolAliases":[{"foreign":{"id":20320,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"357:6:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/OwnableAuthentication.sol","file":"./OwnableAuthentication.sol","id":20323,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21042,"sourceUnit":20313,"src":"431:68:81","symbolAliases":[{"foreign":{"id":20322,"name":"OwnableAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20312,"src":"440:21:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":20325,"name":"IPoolHelperCommon","nameLocations":["619:17:81"],"nodeType":"IdentifierPath","referencedDeclaration":865,"src":"619:17:81"},"id":20326,"nodeType":"InheritanceSpecifier","src":"619:17:81"},{"baseName":{"id":20327,"name":"OwnableAuthentication","nameLocations":["638:21:81"],"nodeType":"IdentifierPath","referencedDeclaration":20312,"src":"638:21:81"},"id":20328,"nodeType":"InheritanceSpecifier","src":"638:21:81"}],"canonicalName":"PoolHelperCommon","contractDependencies":[],"contractKind":"contract","documentation":{"id":20324,"nodeType":"StructuredDocumentation","src":"501:80:81","text":"@notice Common code for helper functions that operate on a subset of pools."},"fullyImplemented":true,"id":21041,"linearizedBaseContracts":[21041,20312,4367,14,9554,9468,12348,865],"name":"PoolHelperCommon","nameLocation":"599:16:81","nodeType":"ContractDefinition","nodes":[{"global":false,"id":20332,"libraryName":{"id":20329,"name":"EnumerableSet","nameLocations":["672:13:81"],"nodeType":"IdentifierPath","referencedDeclaration":17600,"src":"672:13:81"},"nodeType":"UsingForDirective","src":"666:49:81","typeName":{"id":20331,"nodeType":"UserDefinedTypeName","pathNode":{"id":20330,"name":"EnumerableSet.AddressSet","nameLocations":["690:13:81","704:10:81"],"nodeType":"IdentifierPath","referencedDeclaration":16575,"src":"690:24:81"},"referencedDeclaration":16575,"src":"690:24:81","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}}},{"constant":false,"id":20335,"mutability":"mutable","name":"_nextPoolSetId","nameLocation":"836:14:81","nodeType":"VariableDeclaration","scope":21041,"src":"820:34:81","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20333,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":20334,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"853:1:81","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"private"},{"constant":false,"id":20339,"mutability":"mutable","name":"_poolSetManagers","nameLocation":"971:16:81","nodeType":"VariableDeclaration","scope":21041,"src":"917:70:81","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":20338,"keyName":"poolSetId","keyNameLocation":"933:9:81","keyType":{"id":20336,"name":"uint256","nodeType":"ElementaryTypeName","src":"925:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"917:45:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueName":"manager","valueNameLocation":"954:7:81","valueType":{"id":20337,"name":"address","nodeType":"ElementaryTypeName","src":"946:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"constant":false,"id":20343,"mutability":"mutable","name":"_poolSetLookup","nameLocation":"1185:14:81","nodeType":"VariableDeclaration","scope":21041,"src":"1131:68:81","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":20342,"keyName":"manager","keyNameLocation":"1147:7:81","keyType":{"id":20340,"name":"address","nodeType":"ElementaryTypeName","src":"1139:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1131:45:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolSetId","valueNameLocation":"1166:9:81","valueType":{"id":20341,"name":"uint256","nodeType":"ElementaryTypeName","src":"1158:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":20348,"mutability":"mutable","name":"_poolSets","nameLocation":"1347:9:81","nodeType":"VariableDeclaration","scope":21041,"src":"1278:78:81","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16575_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet)"},"typeName":{"id":20347,"keyName":"poolSetId","keyNameLocation":"1294:9:81","keyType":{"id":20344,"name":"uint256","nodeType":"ElementaryTypeName","src":"1286:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"1278:60:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16575_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet)"},"valueName":"pools","valueNameLocation":"1332:5:81","valueType":{"id":20346,"nodeType":"UserDefinedTypeName","pathNode":{"id":20345,"name":"EnumerableSet.AddressSet","nameLocations":["1307:13:81","1321:10:81"],"nodeType":"IdentifierPath","referencedDeclaration":16575,"src":"1307:24:81"},"referencedDeclaration":16575,"src":"1307:24:81","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}}},"visibility":"private"},{"body":{"id":20357,"nodeType":"Block","src":"1485:58:81","statements":[{"expression":{"arguments":[{"id":20353,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20350,"src":"1515:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20352,"name":"_ensureValidPoolSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21040,"src":"1495:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":20354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1495:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20355,"nodeType":"ExpressionStatement","src":"1495:30:81"},{"id":20356,"nodeType":"PlaceholderStatement","src":"1535:1:81"}]},"id":20358,"name":"withValidPoolSet","nameLocation":"1449:16:81","nodeType":"ModifierDefinition","parameters":{"id":20351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20350,"mutability":"mutable","name":"poolSetId","nameLocation":"1474:9:81","nodeType":"VariableDeclaration","scope":20358,"src":"1466:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20349,"name":"uint256","nodeType":"ElementaryTypeName","src":"1466:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1465:19:81"},"src":"1440:103:81","virtual":false,"visibility":"internal"},{"body":{"id":20373,"nodeType":"Block","src":"1691:111:81","statements":[{"assignments":[20363],"declarations":[{"constant":false,"id":20363,"mutability":"mutable","name":"poolSetId","nameLocation":"1709:9:81","nodeType":"VariableDeclaration","scope":20373,"src":"1701:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20362,"name":"uint256","nodeType":"ElementaryTypeName","src":"1701:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20366,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":20364,"name":"_getValidPoolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20958,"src":"1721:18:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":20365,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1721:20:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1701:40:81"},{"expression":{"arguments":[{"id":20368,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20363,"src":"1768:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20369,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20360,"src":"1779:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20367,"name":"_ensurePoolInSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21009,"src":"1751:16:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address) view"}},"id":20370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1751:33:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20371,"nodeType":"ExpressionStatement","src":"1751:33:81"},{"id":20372,"nodeType":"PlaceholderStatement","src":"1794:1:81"}]},"id":20374,"name":"withValidPoolForSender","nameLocation":"1654:22:81","nodeType":"ModifierDefinition","parameters":{"id":20361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20360,"mutability":"mutable","name":"pool","nameLocation":"1685:4:81","nodeType":"VariableDeclaration","scope":20374,"src":"1677:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20359,"name":"address","nodeType":"ElementaryTypeName","src":"1677:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1676:14:81"},"src":"1645:157:81","virtual":false,"visibility":"internal"},{"body":{"id":20383,"nodeType":"Block","src":"1932:56:81","statements":[{"expression":{"arguments":[{"id":20379,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20376,"src":"1962:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20378,"name":"_ensureValidManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20986,"src":"1942:19:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":20380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1942:28:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20381,"nodeType":"ExpressionStatement","src":"1942:28:81"},{"id":20382,"nodeType":"PlaceholderStatement","src":"1980:1:81"}]},"id":20384,"name":"withValidManager","nameLocation":"1898:16:81","nodeType":"ModifierDefinition","parameters":{"id":20377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20376,"mutability":"mutable","name":"manager","nameLocation":"1923:7:81","nodeType":"VariableDeclaration","scope":20384,"src":"1915:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20375,"name":"address","nodeType":"ElementaryTypeName","src":"1915:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1914:17:81"},"src":"1889:99:81","virtual":false,"visibility":"internal"},{"body":{"id":20396,"nodeType":"Block","src":"2085:64:81","statements":[]},"id":20397,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":20392,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20387,"src":"2064:5:81","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},{"id":20393,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20389,"src":"2071:12:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":20394,"kind":"baseConstructorSpecifier","modifierName":{"id":20391,"name":"OwnableAuthentication","nameLocations":["2042:21:81"],"nodeType":"IdentifierPath","referencedDeclaration":20312,"src":"2042:21:81"},"nodeType":"ModifierInvocation","src":"2042:42:81"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":20390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20387,"mutability":"mutable","name":"vault","nameLocation":"2013:5:81","nodeType":"VariableDeclaration","scope":20397,"src":"2006:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":20386,"nodeType":"UserDefinedTypeName","pathNode":{"id":20385,"name":"IVault","nameLocations":["2006:6:81"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"2006:6:81"},"referencedDeclaration":2527,"src":"2006:6:81","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":20389,"mutability":"mutable","name":"initialOwner","nameLocation":"2028:12:81","nodeType":"VariableDeclaration","scope":20397,"src":"2020:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20388,"name":"address","nodeType":"ElementaryTypeName","src":"2020:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2005:36:81"},"returnParameters":{"id":20395,"nodeType":"ParameterList","parameters":[],"src":"2085:0:81"},"scope":21041,"src":"1994:155:81","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[758],"body":{"id":20414,"nodeType":"Block","src":"2540:54:81","statements":[{"expression":{"arguments":[{"id":20411,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20400,"src":"2572:14:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20410,"name":"_createPoolSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20479,"src":"2557:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$","typeString":"function (address) returns (uint256)"}},"id":20412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2557:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20409,"id":20413,"nodeType":"Return","src":"2550:37:81"}]},"documentation":{"id":20398,"nodeType":"StructuredDocumentation","src":"2368:33:81","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"e909c19b","id":20415,"implemented":true,"kind":"function","modifiers":[{"id":20403,"kind":"modifierInvocation","modifierName":{"id":20402,"name":"authenticate","nameLocations":["2476:12:81"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"2476:12:81"},"nodeType":"ModifierInvocation","src":"2476:12:81"},{"arguments":[{"id":20405,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20400,"src":"2506:14:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":20406,"kind":"modifierInvocation","modifierName":{"id":20404,"name":"withValidManager","nameLocations":["2489:16:81"],"nodeType":"IdentifierPath","referencedDeclaration":20384,"src":"2489:16:81"},"nodeType":"ModifierInvocation","src":"2489:32:81"}],"name":"createPoolSet","nameLocation":"2415:13:81","nodeType":"FunctionDefinition","parameters":{"id":20401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20400,"mutability":"mutable","name":"initialManager","nameLocation":"2446:14:81","nodeType":"VariableDeclaration","scope":20415,"src":"2438:22:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20399,"name":"address","nodeType":"ElementaryTypeName","src":"2438:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2428:38:81"},"returnParameters":{"id":20409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20408,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20415,"src":"2531:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20407,"name":"uint256","nodeType":"ElementaryTypeName","src":"2531:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2530:9:81"},"scope":21041,"src":"2406:188:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[750],"body":{"id":20448,"nodeType":"Block","src":"2817:153:81","statements":[{"expression":{"id":20435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20431,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20429,"src":"2827:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":20433,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20418,"src":"2854:14:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20432,"name":"_createPoolSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20479,"src":"2839:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$","typeString":"function (address) returns (uint256)"}},"id":20434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2839:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2827:42:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20436,"nodeType":"ExpressionStatement","src":"2827:42:81"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20437,"name":"newPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20421,"src":"2884:8:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2893:6:81","memberName":"length","nodeType":"MemberAccess","src":"2884:15:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":20439,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2902:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2884:19:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20447,"nodeType":"IfStatement","src":"2880:84:81","trueBody":{"id":20446,"nodeType":"Block","src":"2905:59:81","statements":[{"expression":{"arguments":[{"id":20442,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20429,"src":"2933:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20443,"name":"newPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20421,"src":"2944:8:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":20441,"name":"addPoolsToSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20681,"src":"2919:13:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (uint256,address[] memory)"}},"id":20444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2919:34:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20445,"nodeType":"ExpressionStatement","src":"2919:34:81"}]}}]},"documentation":{"id":20416,"nodeType":"StructuredDocumentation","src":"2600:33:81","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"3e035f9b","id":20449,"implemented":true,"kind":"function","modifiers":[{"id":20424,"kind":"modifierInvocation","modifierName":{"id":20423,"name":"authenticate","nameLocations":["2743:12:81"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"2743:12:81"},"nodeType":"ModifierInvocation","src":"2743:12:81"},{"arguments":[{"id":20426,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20418,"src":"2773:14:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":20427,"kind":"modifierInvocation","modifierName":{"id":20425,"name":"withValidManager","nameLocations":["2756:16:81"],"nodeType":"IdentifierPath","referencedDeclaration":20384,"src":"2756:16:81"},"nodeType":"ModifierInvocation","src":"2756:32:81"}],"name":"createPoolSet","nameLocation":"2647:13:81","nodeType":"FunctionDefinition","parameters":{"id":20422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20418,"mutability":"mutable","name":"initialManager","nameLocation":"2678:14:81","nodeType":"VariableDeclaration","scope":20449,"src":"2670:22:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20417,"name":"address","nodeType":"ElementaryTypeName","src":"2670:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20421,"mutability":"mutable","name":"newPools","nameLocation":"2719:8:81","nodeType":"VariableDeclaration","scope":20449,"src":"2702:25:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":20419,"name":"address","nodeType":"ElementaryTypeName","src":"2702:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20420,"nodeType":"ArrayTypeName","src":"2702:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2660:73:81"},"returnParameters":{"id":20430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20429,"mutability":"mutable","name":"poolSetId","nameLocation":"2806:9:81","nodeType":"VariableDeclaration","scope":20449,"src":"2798:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20428,"name":"uint256","nodeType":"ElementaryTypeName","src":"2798:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2797:19:81"},"scope":21041,"src":"2638:332:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20478,"nodeType":"Block","src":"3061:257:81","statements":[{"expression":{"id":20459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20456,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20454,"src":"3071:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3083:16:81","subExpression":{"id":20457,"name":"_nextPoolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20335,"src":"3083:14:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3071:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20460,"nodeType":"ExpressionStatement","src":"3071:28:81"},{"expression":{"id":20465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20461,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20339,"src":"3158:16:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20463,"indexExpression":{"id":20462,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20454,"src":"3175:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3158:27:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20464,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20451,"src":"3188:14:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3158:44:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20466,"nodeType":"ExpressionStatement","src":"3158:44:81"},{"expression":{"id":20471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20467,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20343,"src":"3212:14:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20469,"indexExpression":{"id":20468,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20451,"src":"3227:14:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3212:30:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20470,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20454,"src":"3245:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3212:42:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20472,"nodeType":"ExpressionStatement","src":"3212:42:81"},{"eventCall":{"arguments":[{"id":20474,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20454,"src":"3285:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20475,"name":"initialManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20451,"src":"3296:14:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20473,"name":"PoolSetCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":674,"src":"3270:14:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":20476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3270:41:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20477,"nodeType":"EmitStatement","src":"3265:46:81"}]},"id":20479,"implemented":true,"kind":"function","modifiers":[],"name":"_createPoolSet","nameLocation":"2985:14:81","nodeType":"FunctionDefinition","parameters":{"id":20452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20451,"mutability":"mutable","name":"initialManager","nameLocation":"3008:14:81","nodeType":"VariableDeclaration","scope":20479,"src":"3000:22:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20450,"name":"address","nodeType":"ElementaryTypeName","src":"3000:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2999:24:81"},"returnParameters":{"id":20455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20454,"mutability":"mutable","name":"poolSetId","nameLocation":"3050:9:81","nodeType":"VariableDeclaration","scope":20479,"src":"3042:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20453,"name":"uint256","nodeType":"ElementaryTypeName","src":"3042:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3041:19:81"},"scope":21041,"src":"2976:342:81","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[764],"body":{"id":20563,"nodeType":"Block","src":"3455:745:81","statements":[{"assignments":[20494],"declarations":[{"constant":false,"id":20494,"mutability":"mutable","name":"poolSet","nameLocation":"3498:7:81","nodeType":"VariableDeclaration","scope":20563,"src":"3465:40:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"},"typeName":{"id":20493,"nodeType":"UserDefinedTypeName","pathNode":{"id":20492,"name":"EnumerableSet.AddressSet","nameLocations":["3465:13:81","3479:10:81"],"nodeType":"IdentifierPath","referencedDeclaration":16575,"src":"3465:24:81"},"referencedDeclaration":16575,"src":"3465:24:81","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}},"visibility":"internal"}],"id":20498,"initialValue":{"baseExpression":{"id":20495,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20348,"src":"3508:9:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16575_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20497,"indexExpression":{"id":20496,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20482,"src":"3518:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3508:20:81","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3465:63:81"},{"assignments":[20500],"declarations":[{"constant":false,"id":20500,"mutability":"mutable","name":"numPools","nameLocation":"3589:8:81","nodeType":"VariableDeclaration","scope":20563,"src":"3581:16:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20499,"name":"uint256","nodeType":"ElementaryTypeName","src":"3581:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20504,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20501,"name":"poolSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20494,"src":"3600:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":20502,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3608:6:81","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":16684,"src":"3600:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16575_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$16575_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":20503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3600:16:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3581:35:81"},{"body":{"id":20530,"nodeType":"Block","src":"3648:216:81","statements":[{"id":20511,"nodeType":"UncheckedBlock","src":"3662:53:81","statements":[{"expression":{"id":20509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":true,"src":"3690:10:81","subExpression":{"id":20508,"name":"numPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20500,"src":"3692:8:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20510,"nodeType":"ExpressionStatement","src":"3690:10:81"}]},{"assignments":[20513],"declarations":[{"constant":false,"id":20513,"mutability":"mutable","name":"pool","nameLocation":"3737:4:81","nodeType":"VariableDeclaration","scope":20530,"src":"3729:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20512,"name":"address","nodeType":"ElementaryTypeName","src":"3729:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":20518,"initialValue":{"arguments":[{"id":20516,"name":"numPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20500,"src":"3755:8:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":20514,"name":"poolSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20494,"src":"3744:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":20515,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3752:2:81","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":16711,"src":"3744:10:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16575_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$16575_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":20517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3744:20:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3729:35:81"},{"eventCall":{"arguments":[{"id":20520,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20513,"src":"3802:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20521,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20482,"src":"3808:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20519,"name":"PoolRemovedFromSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":695,"src":"3783:18:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":20522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3783:35:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20523,"nodeType":"EmitStatement","src":"3778:40:81"},{"expression":{"arguments":[{"id":20527,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20513,"src":"3848:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":20524,"name":"poolSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20494,"src":"3833:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage_ptr","typeString":"struct EnumerableSet.AddressSet storage pointer"}},"id":20526,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3841:6:81","memberName":"remove","nodeType":"MemberAccess","referencedDeclaration":16629,"src":"3833:14:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$16575_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$16575_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":20528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3833:20:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20529,"nodeType":"ExpressionStatement","src":"3833:20:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20505,"name":"numPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20500,"src":"3634:8:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":20506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3645:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3634:12:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20531,"nodeType":"WhileStatement","src":"3627:237:81"},{"expression":{"id":20535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"3908:27:81","subExpression":{"baseExpression":{"id":20532,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20348,"src":"3915:9:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16575_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20534,"indexExpression":{"id":20533,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20482,"src":"3925:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3915:20:81","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20536,"nodeType":"ExpressionStatement","src":"3908:27:81"},{"assignments":[20538],"declarations":[{"constant":false,"id":20538,"mutability":"mutable","name":"manager","nameLocation":"3954:7:81","nodeType":"VariableDeclaration","scope":20563,"src":"3946:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20537,"name":"address","nodeType":"ElementaryTypeName","src":"3946:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":20542,"initialValue":{"baseExpression":{"id":20539,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20339,"src":"3964:16:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20541,"indexExpression":{"id":20540,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20482,"src":"3981:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3964:27:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3946:45:81"},{"expression":{"id":20550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20543,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20339,"src":"4064:16:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20545,"indexExpression":{"id":20544,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20482,"src":"4081:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4064:27:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":20548,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4102:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":20547,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4094:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20546,"name":"address","nodeType":"ElementaryTypeName","src":"4094:7:81","typeDescriptions":{}}},"id":20549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4094:10:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4064:40:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20551,"nodeType":"ExpressionStatement","src":"4064:40:81"},{"expression":{"id":20556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20552,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20343,"src":"4114:14:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20554,"indexExpression":{"id":20553,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20538,"src":"4129:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4114:23:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":20555,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4140:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4114:27:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20557,"nodeType":"ExpressionStatement","src":"4114:27:81"},{"eventCall":{"arguments":[{"id":20559,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20482,"src":"4174:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20560,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20538,"src":"4185:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20558,"name":"PoolSetDestroyed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":681,"src":"4157:16:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":20561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4157:36:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20562,"nodeType":"EmitStatement","src":"4152:41:81"}]},"documentation":{"id":20480,"nodeType":"StructuredDocumentation","src":"3324:33:81","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"7c1ec460","id":20564,"implemented":true,"kind":"function","modifiers":[{"id":20485,"kind":"modifierInvocation","modifierName":{"id":20484,"name":"authenticate","nameLocations":["3414:12:81"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"3414:12:81"},"nodeType":"ModifierInvocation","src":"3414:12:81"},{"arguments":[{"id":20487,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20482,"src":"3444:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20488,"kind":"modifierInvocation","modifierName":{"id":20486,"name":"withValidPoolSet","nameLocations":["3427:16:81"],"nodeType":"IdentifierPath","referencedDeclaration":20358,"src":"3427:16:81"},"nodeType":"ModifierInvocation","src":"3427:27:81"}],"name":"destroyPoolSet","nameLocation":"3371:14:81","nodeType":"FunctionDefinition","parameters":{"id":20483,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20482,"mutability":"mutable","name":"poolSetId","nameLocation":"3394:9:81","nodeType":"VariableDeclaration","scope":20564,"src":"3386:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20481,"name":"uint256","nodeType":"ElementaryTypeName","src":"3386:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3385:19:81"},"returnParameters":{"id":20489,"nodeType":"ParameterList","parameters":[],"src":"3455:0:81"},"scope":21041,"src":"3362:838:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[770],"body":{"id":20604,"nodeType":"Block","src":"4336:332:81","statements":[{"assignments":[20574],"declarations":[{"constant":false,"id":20574,"mutability":"mutable","name":"poolSetId","nameLocation":"4354:9:81","nodeType":"VariableDeclaration","scope":20604,"src":"4346:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20573,"name":"uint256","nodeType":"ElementaryTypeName","src":"4346:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20577,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":20575,"name":"_getValidPoolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20958,"src":"4366:18:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":20576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4366:20:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4346:40:81"},{"expression":{"id":20582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20578,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20339,"src":"4397:16:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20580,"indexExpression":{"id":20579,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20574,"src":"4414:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4397:27:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20581,"name":"newManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20567,"src":"4427:10:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4397:40:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20583,"nodeType":"ExpressionStatement","src":"4397:40:81"},{"expression":{"id":20589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20584,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20343,"src":"4505:14:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20587,"indexExpression":{"expression":{"id":20585,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4520:3:81","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4524:6:81","memberName":"sender","nodeType":"MemberAccess","src":"4520:10:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4505:26:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":20588,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4534:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4505:30:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20590,"nodeType":"ExpressionStatement","src":"4505:30:81"},{"expression":{"id":20595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20591,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20343,"src":"4545:14:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20593,"indexExpression":{"id":20592,"name":"newManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20567,"src":"4560:10:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4545:26:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20594,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20574,"src":"4574:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4545:38:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20596,"nodeType":"ExpressionStatement","src":"4545:38:81"},{"eventCall":{"arguments":[{"id":20598,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20574,"src":"4627:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20599,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4638:3:81","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4642:6:81","memberName":"sender","nodeType":"MemberAccess","src":"4638:10:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20601,"name":"newManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20567,"src":"4650:10:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20597,"name":"PoolSetOwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":704,"src":"4599:27:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (uint256,address,address)"}},"id":20602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4599:62:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20603,"nodeType":"EmitStatement","src":"4594:67:81"}]},"documentation":{"id":20565,"nodeType":"StructuredDocumentation","src":"4206:33:81","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"3700f987","id":20605,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":20570,"name":"newManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20567,"src":"4324:10:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":20571,"kind":"modifierInvocation","modifierName":{"id":20569,"name":"withValidManager","nameLocations":["4307:16:81"],"nodeType":"IdentifierPath","referencedDeclaration":20384,"src":"4307:16:81"},"nodeType":"ModifierInvocation","src":"4307:28:81"}],"name":"transferPoolSetOwnership","nameLocation":"4253:24:81","nodeType":"FunctionDefinition","parameters":{"id":20568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20567,"mutability":"mutable","name":"newManager","nameLocation":"4286:10:81","nodeType":"VariableDeclaration","scope":20605,"src":"4278:18:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20566,"name":"address","nodeType":"ElementaryTypeName","src":"4278:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4277:20:81"},"returnParameters":{"id":20572,"nodeType":"ParameterList","parameters":[],"src":"4336:0:81"},"scope":21041,"src":"4244:424:81","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[779],"body":{"id":20680,"nodeType":"Block","src":"5062:630:81","statements":[{"assignments":[20620],"declarations":[{"constant":false,"id":20620,"mutability":"mutable","name":"numPools","nameLocation":"5080:8:81","nodeType":"VariableDeclaration","scope":20680,"src":"5072:16:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20619,"name":"uint256","nodeType":"ElementaryTypeName","src":"5072:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20623,"initialValue":{"expression":{"id":20621,"name":"newPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20611,"src":"5091:8:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5100:6:81","memberName":"length","nodeType":"MemberAccess","src":"5091:15:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5072:34:81"},{"body":{"id":20678,"nodeType":"Block","src":"5156:530:81","statements":[{"assignments":[20635],"declarations":[{"constant":false,"id":20635,"mutability":"mutable","name":"pool","nameLocation":"5178:4:81","nodeType":"VariableDeclaration","scope":20678,"src":"5170:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20634,"name":"address","nodeType":"ElementaryTypeName","src":"5170:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":20639,"initialValue":{"baseExpression":{"id":20636,"name":"newPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20611,"src":"5185:8:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20638,"indexExpression":{"id":20637,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20625,"src":"5194:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5185:11:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5170:26:81"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":20642,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20635,"src":"5289:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":20640,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20200,"src":"5266:5:81","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":20641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5272:16:81","memberName":"isPoolRegistered","nodeType":"MemberAccess","referencedDeclaration":3522,"src":"5266:22:81","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":20643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5266:28:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":20644,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5298:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"5266:37:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20653,"nodeType":"IfStatement","src":"5262:119:81","trueBody":{"id":20652,"nodeType":"Block","src":"5305:76:81","statements":[{"errorCall":{"arguments":[{"id":20649,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20635,"src":"5361:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":20646,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3184,"src":"5330:12:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3184_$","typeString":"type(contract IVaultErrors)"}},"id":20648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5343:17:81","memberName":"PoolNotRegistered","nodeType":"MemberAccess","referencedDeclaration":2839,"src":"5330:30:81","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":20650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5330:36:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20651,"nodeType":"RevertStatement","src":"5323:43:81"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":20658,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20635,"src":"5424:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":20654,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20348,"src":"5399:9:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16575_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20656,"indexExpression":{"id":20655,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20608,"src":"5409:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5399:20:81","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20657,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5420:3:81","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":16602,"src":"5399:24:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$16575_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$16575_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":20659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5399:30:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":20660,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5433:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"5399:39:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20668,"nodeType":"IfStatement","src":"5395:118:81","trueBody":{"id":20667,"nodeType":"Block","src":"5440:73:81","statements":[{"errorCall":{"arguments":[{"id":20663,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20635,"src":"5482:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20664,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20608,"src":"5488:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20662,"name":"PoolAlreadyInSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":711,"src":"5465:16:81","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256) pure returns (error)"}},"id":20665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5465:33:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20666,"nodeType":"RevertStatement","src":"5458:40:81"}]}},{"expression":{"arguments":[{"id":20670,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20635,"src":"5619:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20669,"name":"_validatePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21016,"src":"5605:13:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":20671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5605:19:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20672,"nodeType":"ExpressionStatement","src":"5605:19:81"},{"eventCall":{"arguments":[{"id":20674,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20635,"src":"5659:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20675,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20608,"src":"5665:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20673,"name":"PoolAddedToSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":688,"src":"5644:14:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":20676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5644:31:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20677,"nodeType":"EmitStatement","src":"5639:36:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20628,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20625,"src":"5137:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":20629,"name":"numPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20620,"src":"5141:8:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5137:12:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20679,"initializationExpression":{"assignments":[20625],"declarations":[{"constant":false,"id":20625,"mutability":"mutable","name":"i","nameLocation":"5130:1:81","nodeType":"VariableDeclaration","scope":20679,"src":"5122:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20624,"name":"uint256","nodeType":"ElementaryTypeName","src":"5122:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20627,"initialValue":{"hexValue":"30","id":20626,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5134:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5122:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":20632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5151:3:81","subExpression":{"id":20631,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20625,"src":"5151:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20633,"nodeType":"ExpressionStatement","src":"5151:3:81"},"nodeType":"ForStatement","src":"5117:569:81"}]},"documentation":{"id":20606,"nodeType":"StructuredDocumentation","src":"4885:33:81","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"ebf3a8d0","id":20681,"implemented":true,"kind":"function","modifiers":[{"id":20614,"kind":"modifierInvocation","modifierName":{"id":20613,"name":"authenticate","nameLocations":["5021:12:81"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"5021:12:81"},"nodeType":"ModifierInvocation","src":"5021:12:81"},{"arguments":[{"id":20616,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20608,"src":"5051:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20617,"kind":"modifierInvocation","modifierName":{"id":20615,"name":"withValidPoolSet","nameLocations":["5034:16:81"],"nodeType":"IdentifierPath","referencedDeclaration":20358,"src":"5034:16:81"},"nodeType":"ModifierInvocation","src":"5034:27:81"}],"name":"addPoolsToSet","nameLocation":"4932:13:81","nodeType":"FunctionDefinition","parameters":{"id":20612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20608,"mutability":"mutable","name":"poolSetId","nameLocation":"4963:9:81","nodeType":"VariableDeclaration","scope":20681,"src":"4955:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20607,"name":"uint256","nodeType":"ElementaryTypeName","src":"4955:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20611,"mutability":"mutable","name":"newPools","nameLocation":"4999:8:81","nodeType":"VariableDeclaration","scope":20681,"src":"4982:25:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":20609,"name":"address","nodeType":"ElementaryTypeName","src":"4982:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20610,"nodeType":"ArrayTypeName","src":"4982:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4945:68:81"},"returnParameters":{"id":20618,"nodeType":"ParameterList","parameters":[],"src":"5062:0:81"},"scope":21041,"src":"4923:769:81","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[788],"body":{"id":20738,"nodeType":"Block","src":"5877:331:81","statements":[{"assignments":[20696],"declarations":[{"constant":false,"id":20696,"mutability":"mutable","name":"numPools","nameLocation":"5895:8:81","nodeType":"VariableDeclaration","scope":20738,"src":"5887:16:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20695,"name":"uint256","nodeType":"ElementaryTypeName","src":"5887:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20699,"initialValue":{"expression":{"id":20697,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20687,"src":"5906:5:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5912:6:81","memberName":"length","nodeType":"MemberAccess","src":"5906:12:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5887:31:81"},{"body":{"id":20736,"nodeType":"Block","src":"5968:234:81","statements":[{"assignments":[20711],"declarations":[{"constant":false,"id":20711,"mutability":"mutable","name":"pool","nameLocation":"5990:4:81","nodeType":"VariableDeclaration","scope":20736,"src":"5982:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20710,"name":"address","nodeType":"ElementaryTypeName","src":"5982:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":20715,"initialValue":{"baseExpression":{"id":20712,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20687,"src":"5997:5:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20714,"indexExpression":{"id":20713,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20701,"src":"6003:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5997:8:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5982:23:81"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":20720,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20711,"src":"6052:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":20716,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20348,"src":"6024:9:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16575_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20718,"indexExpression":{"id":20717,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20684,"src":"6034:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6024:20:81","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20719,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6045:6:81","memberName":"remove","nodeType":"MemberAccess","referencedDeclaration":16629,"src":"6024:27:81","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$16575_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$16575_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":20721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6024:33:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":20722,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6061:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"6024:42:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20730,"nodeType":"IfStatement","src":"6020:117:81","trueBody":{"id":20729,"nodeType":"Block","src":"6068:69:81","statements":[{"errorCall":{"arguments":[{"id":20725,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20711,"src":"6106:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20726,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20684,"src":"6112:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20724,"name":"PoolNotInSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":718,"src":"6093:12:81","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256) pure returns (error)"}},"id":20727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6093:29:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20728,"nodeType":"RevertStatement","src":"6086:36:81"}]}},{"eventCall":{"arguments":[{"id":20732,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20711,"src":"6175:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20733,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20684,"src":"6181:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20731,"name":"PoolRemovedFromSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":695,"src":"6156:18:81","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":20734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6156:35:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20735,"nodeType":"EmitStatement","src":"6151:40:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20704,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20701,"src":"5949:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":20705,"name":"numPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20696,"src":"5953:8:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5949:12:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20737,"initializationExpression":{"assignments":[20701],"declarations":[{"constant":false,"id":20701,"mutability":"mutable","name":"i","nameLocation":"5942:1:81","nodeType":"VariableDeclaration","scope":20737,"src":"5934:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20700,"name":"uint256","nodeType":"ElementaryTypeName","src":"5934:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20703,"initialValue":{"hexValue":"30","id":20702,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5946:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5934:13:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":20708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5963:3:81","subExpression":{"id":20707,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20701,"src":"5963:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20709,"nodeType":"ExpressionStatement","src":"5963:3:81"},"nodeType":"ForStatement","src":"5929:273:81"}]},"documentation":{"id":20682,"nodeType":"StructuredDocumentation","src":"5698:33:81","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"2da55a1d","id":20739,"implemented":true,"kind":"function","modifiers":[{"id":20690,"kind":"modifierInvocation","modifierName":{"id":20689,"name":"authenticate","nameLocations":["5836:12:81"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"5836:12:81"},"nodeType":"ModifierInvocation","src":"5836:12:81"},{"arguments":[{"id":20692,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20684,"src":"5866:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20693,"kind":"modifierInvocation","modifierName":{"id":20691,"name":"withValidPoolSet","nameLocations":["5849:16:81"],"nodeType":"IdentifierPath","referencedDeclaration":20358,"src":"5849:16:81"},"nodeType":"ModifierInvocation","src":"5849:27:81"}],"name":"removePoolsFromSet","nameLocation":"5745:18:81","nodeType":"FunctionDefinition","parameters":{"id":20688,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20684,"mutability":"mutable","name":"poolSetId","nameLocation":"5781:9:81","nodeType":"VariableDeclaration","scope":20739,"src":"5773:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20683,"name":"uint256","nodeType":"ElementaryTypeName","src":"5773:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20687,"mutability":"mutable","name":"pools","nameLocation":"5817:5:81","nodeType":"VariableDeclaration","scope":20739,"src":"5800:22:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":20685,"name":"address","nodeType":"ElementaryTypeName","src":"5800:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20686,"nodeType":"ArrayTypeName","src":"5800:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5763:65:81"},"returnParameters":{"id":20694,"nodeType":"ParameterList","parameters":[],"src":"5877:0:81"},"scope":21041,"src":"5736:472:81","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[794],"body":{"id":20750,"nodeType":"Block","src":"6554:50:81","statements":[{"expression":{"baseExpression":{"id":20745,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20343,"src":"6571:14:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20748,"indexExpression":{"expression":{"id":20746,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6586:3:81","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6590:6:81","memberName":"sender","nodeType":"MemberAccess","src":"6586:10:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6571:26:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20744,"id":20749,"nodeType":"Return","src":"6564:33:81"}]},"documentation":{"id":20740,"nodeType":"StructuredDocumentation","src":"6453:33:81","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"ce998aba","id":20751,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolSetIdForCaller","nameLocation":"6500:21:81","nodeType":"FunctionDefinition","parameters":{"id":20741,"nodeType":"ParameterList","parameters":[],"src":"6521:2:81"},"returnParameters":{"id":20744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20743,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20751,"src":"6545:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20742,"name":"uint256","nodeType":"ElementaryTypeName","src":"6545:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6544:9:81"},"scope":21041,"src":"6491:113:81","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[802],"body":{"id":20763,"nodeType":"Block","src":"6727:47:81","statements":[{"expression":{"baseExpression":{"id":20759,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20343,"src":"6744:14:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20761,"indexExpression":{"id":20760,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20754,"src":"6759:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6744:23:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20758,"id":20762,"nodeType":"Return","src":"6737:30:81"}]},"documentation":{"id":20752,"nodeType":"StructuredDocumentation","src":"6610:33:81","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"25c427ed","id":20764,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolSetIdForManager","nameLocation":"6657:22:81","nodeType":"FunctionDefinition","parameters":{"id":20755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20754,"mutability":"mutable","name":"manager","nameLocation":"6688:7:81","nodeType":"VariableDeclaration","scope":20764,"src":"6680:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20753,"name":"address","nodeType":"ElementaryTypeName","src":"6680:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6679:17:81"},"returnParameters":{"id":20758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20757,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20764,"src":"6718:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20756,"name":"uint256","nodeType":"ElementaryTypeName","src":"6718:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6717:9:81"},"scope":21041,"src":"6648:126:81","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[810],"body":{"id":20781,"nodeType":"Block","src":"6925:53:81","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":20775,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20348,"src":"6942:9:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16575_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20777,"indexExpression":{"id":20776,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20767,"src":"6952:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6942:20:81","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20778,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6963:6:81","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":16684,"src":"6942:27:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16575_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$16575_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":20779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6942:29:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20774,"id":20780,"nodeType":"Return","src":"6935:36:81"}]},"documentation":{"id":20765,"nodeType":"StructuredDocumentation","src":"6780:33:81","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"62d53462","id":20782,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":20770,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20767,"src":"6896:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20771,"kind":"modifierInvocation","modifierName":{"id":20769,"name":"withValidPoolSet","nameLocations":["6879:16:81"],"nodeType":"IdentifierPath","referencedDeclaration":20358,"src":"6879:16:81"},"nodeType":"ModifierInvocation","src":"6879:27:81"}],"name":"getPoolCountForSet","nameLocation":"6827:18:81","nodeType":"FunctionDefinition","parameters":{"id":20768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20767,"mutability":"mutable","name":"poolSetId","nameLocation":"6854:9:81","nodeType":"VariableDeclaration","scope":20782,"src":"6846:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20766,"name":"uint256","nodeType":"ElementaryTypeName","src":"6846:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6845:19:81"},"returnParameters":{"id":20774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20773,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20782,"src":"6916:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20772,"name":"uint256","nodeType":"ElementaryTypeName","src":"6916:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6915:9:81"},"scope":21041,"src":"6818:160:81","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[818],"body":{"id":20799,"nodeType":"Block","src":"7096:65:81","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":20790,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20339,"src":"7113:16:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20792,"indexExpression":{"id":20791,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20785,"src":"7130:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7113:27:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":20795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7152:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":20794,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7144:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20793,"name":"address","nodeType":"ElementaryTypeName","src":"7144:7:81","typeDescriptions":{}}},"id":20796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7144:10:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7113:41:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":20789,"id":20798,"nodeType":"Return","src":"7106:48:81"}]},"documentation":{"id":20783,"nodeType":"StructuredDocumentation","src":"6984:33:81","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"255dae41","id":20800,"implemented":true,"kind":"function","modifiers":[],"name":"isValidPoolSetId","nameLocation":"7031:16:81","nodeType":"FunctionDefinition","parameters":{"id":20786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20785,"mutability":"mutable","name":"poolSetId","nameLocation":"7056:9:81","nodeType":"VariableDeclaration","scope":20800,"src":"7048:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20784,"name":"uint256","nodeType":"ElementaryTypeName","src":"7048:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7047:19:81"},"returnParameters":{"id":20789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20788,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20800,"src":"7090:4:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20787,"name":"bool","nodeType":"ElementaryTypeName","src":"7090:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7089:6:81"},"scope":21041,"src":"7022:139:81","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[828],"body":{"id":20820,"nodeType":"Block","src":"7316:59:81","statements":[{"expression":{"arguments":[{"id":20817,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20803,"src":"7363:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":20813,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20348,"src":"7333:9:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16575_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20815,"indexExpression":{"id":20814,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20805,"src":"7343:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7333:20:81","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20816,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7354:8:81","memberName":"contains","nodeType":"MemberAccess","referencedDeclaration":16669,"src":"7333:29:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16575_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$16575_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"}},"id":20818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7333:35:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":20812,"id":20819,"nodeType":"Return","src":"7326:42:81"}]},"documentation":{"id":20801,"nodeType":"StructuredDocumentation","src":"7167:33:81","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"182551da","id":20821,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":20808,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20805,"src":"7290:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20809,"kind":"modifierInvocation","modifierName":{"id":20807,"name":"withValidPoolSet","nameLocations":["7273:16:81"],"nodeType":"IdentifierPath","referencedDeclaration":20358,"src":"7273:16:81"},"nodeType":"ModifierInvocation","src":"7273:27:81"}],"name":"isPoolInSet","nameLocation":"7214:11:81","nodeType":"FunctionDefinition","parameters":{"id":20806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20803,"mutability":"mutable","name":"pool","nameLocation":"7234:4:81","nodeType":"VariableDeclaration","scope":20821,"src":"7226:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20802,"name":"address","nodeType":"ElementaryTypeName","src":"7226:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20805,"mutability":"mutable","name":"poolSetId","nameLocation":"7248:9:81","nodeType":"VariableDeclaration","scope":20821,"src":"7240:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20804,"name":"uint256","nodeType":"ElementaryTypeName","src":"7240:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7225:33:81"},"returnParameters":{"id":20812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20811,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20821,"src":"7310:4:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20810,"name":"bool","nodeType":"ElementaryTypeName","src":"7310:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7309:6:81"},"scope":21041,"src":"7205:170:81","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[837],"body":{"id":20839,"nodeType":"Block","src":"7553:53:81","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":20833,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20348,"src":"7570:9:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16575_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20835,"indexExpression":{"id":20834,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20824,"src":"7580:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7570:20:81","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20836,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7591:6:81","memberName":"values","nodeType":"MemberAccess","referencedDeclaration":16741,"src":"7570:27:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16575_storage_ptr_$returns$_t_array$_t_address_$dyn_memory_ptr_$attached_to$_t_struct$_AddressSet_$16575_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (address[] memory)"}},"id":20837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7570:29:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":20832,"id":20838,"nodeType":"Return","src":"7563:36:81"}]},"documentation":{"id":20822,"nodeType":"StructuredDocumentation","src":"7381:33:81","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"94fc4058","id":20840,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":20827,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20824,"src":"7509:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20828,"kind":"modifierInvocation","modifierName":{"id":20826,"name":"withValidPoolSet","nameLocations":["7492:16:81"],"nodeType":"IdentifierPath","referencedDeclaration":20358,"src":"7492:16:81"},"nodeType":"ModifierInvocation","src":"7492:27:81"}],"name":"getAllPoolsInSet","nameLocation":"7428:16:81","nodeType":"FunctionDefinition","parameters":{"id":20825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20824,"mutability":"mutable","name":"poolSetId","nameLocation":"7462:9:81","nodeType":"VariableDeclaration","scope":20840,"src":"7454:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20823,"name":"uint256","nodeType":"ElementaryTypeName","src":"7454:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7444:33:81"},"returnParameters":{"id":20832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20831,"mutability":"mutable","name":"pools","nameLocation":"7546:5:81","nodeType":"VariableDeclaration","scope":20840,"src":"7529:22:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":20829,"name":"address","nodeType":"ElementaryTypeName","src":"7529:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20830,"nodeType":"ArrayTypeName","src":"7529:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"7528:24:81"},"scope":21041,"src":"7419:187:81","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[850],"body":{"id":20916,"nodeType":"Block","src":"7821:349:81","statements":[{"assignments":[20857],"declarations":[{"constant":false,"id":20857,"mutability":"mutable","name":"spanLength","nameLocation":"7839:10:81","nodeType":"VariableDeclaration","scope":20916,"src":"7831:18:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20856,"name":"uint256","nodeType":"ElementaryTypeName","src":"7831:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20863,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":20858,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20348,"src":"7852:9:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16575_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20860,"indexExpression":{"id":20859,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20843,"src":"7862:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7852:20:81","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20861,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7873:6:81","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":16684,"src":"7852:27:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16575_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$16575_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":20862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7852:29:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7831:50:81"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20864,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20845,"src":"7896:4:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":20865,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20847,"src":"7903:2:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7896:9:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20867,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20847,"src":"7909:2:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":20868,"name":"spanLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20857,"src":"7914:10:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7909:15:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7896:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20871,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20845,"src":"7928:4:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":20872,"name":"spanLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20857,"src":"7936:10:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7928:18:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7896:50:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20880,"nodeType":"IfStatement","src":"7892:115:81","trueBody":{"id":20879,"nodeType":"Block","src":"7948:59:81","statements":[{"errorCall":{"arguments":[{"id":20876,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20843,"src":"7986:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20875,"name":"IndexOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":739,"src":"7969:16:81","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":20877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7969:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20878,"nodeType":"RevertStatement","src":"7962:34:81"}]}},{"expression":{"id":20889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20881,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20854,"src":"8017:5:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20885,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20847,"src":"8039:2:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":20886,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20845,"src":"8044:4:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8039:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20884,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"8025:13:81","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":20882,"name":"address","nodeType":"ElementaryTypeName","src":"8029:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20883,"nodeType":"ArrayTypeName","src":"8029:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":20888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8025:24:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"8017:32:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20890,"nodeType":"ExpressionStatement","src":"8017:32:81"},{"body":{"id":20914,"nodeType":"Block","src":"8095:69:81","statements":[{"expression":{"id":20912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20901,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20854,"src":"8109:5:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20905,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20902,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20892,"src":"8115:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":20903,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20845,"src":"8119:4:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8115:8:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8109:15:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":20910,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20892,"src":"8151:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":20906,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20348,"src":"8127:9:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16575_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20908,"indexExpression":{"id":20907,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20843,"src":"8137:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8127:20:81","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20909,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8148:2:81","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":16711,"src":"8127:23:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16575_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$16575_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":20911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8127:26:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8109:44:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20913,"nodeType":"ExpressionStatement","src":"8109:44:81"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20895,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20892,"src":"8082:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":20896,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20847,"src":"8086:2:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8082:6:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20915,"initializationExpression":{"assignments":[20892],"declarations":[{"constant":false,"id":20892,"mutability":"mutable","name":"i","nameLocation":"8072:1:81","nodeType":"VariableDeclaration","scope":20915,"src":"8064:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20891,"name":"uint256","nodeType":"ElementaryTypeName","src":"8064:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20894,"initialValue":{"id":20893,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20845,"src":"8076:4:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8064:16:81"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":20899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8090:3:81","subExpression":{"id":20898,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20892,"src":"8090:1:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20900,"nodeType":"ExpressionStatement","src":"8090:3:81"},"nodeType":"ForStatement","src":"8059:105:81"}]},"documentation":{"id":20841,"nodeType":"StructuredDocumentation","src":"7612:33:81","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"8c60ebd0","id":20917,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":20850,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20843,"src":"7777:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20851,"kind":"modifierInvocation","modifierName":{"id":20849,"name":"withValidPoolSet","nameLocations":["7760:16:81"],"nodeType":"IdentifierPath","referencedDeclaration":20358,"src":"7760:16:81"},"nodeType":"ModifierInvocation","src":"7760:27:81"}],"name":"getPoolsInSet","nameLocation":"7659:13:81","nodeType":"FunctionDefinition","parameters":{"id":20848,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20843,"mutability":"mutable","name":"poolSetId","nameLocation":"7690:9:81","nodeType":"VariableDeclaration","scope":20917,"src":"7682:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20842,"name":"uint256","nodeType":"ElementaryTypeName","src":"7682:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20845,"mutability":"mutable","name":"from","nameLocation":"7717:4:81","nodeType":"VariableDeclaration","scope":20917,"src":"7709:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20844,"name":"uint256","nodeType":"ElementaryTypeName","src":"7709:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20847,"mutability":"mutable","name":"to","nameLocation":"7739:2:81","nodeType":"VariableDeclaration","scope":20917,"src":"7731:10:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20846,"name":"uint256","nodeType":"ElementaryTypeName","src":"7731:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7672:75:81"},"returnParameters":{"id":20855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20854,"mutability":"mutable","name":"pools","nameLocation":"7814:5:81","nodeType":"VariableDeclaration","scope":20917,"src":"7797:22:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":20852,"name":"address","nodeType":"ElementaryTypeName","src":"7797:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20853,"nodeType":"ArrayTypeName","src":"7797:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"7796:24:81"},"scope":21041,"src":"7650:520:81","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[856],"body":{"id":20925,"nodeType":"Block","src":"8274:38:81","statements":[{"expression":{"id":20923,"name":"_nextPoolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20335,"src":"8291:14:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20922,"id":20924,"nodeType":"Return","src":"8284:21:81"}]},"documentation":{"id":20918,"nodeType":"StructuredDocumentation","src":"8176:33:81","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"c482e822","id":20926,"implemented":true,"kind":"function","modifiers":[],"name":"getNextPoolSetId","nameLocation":"8223:16:81","nodeType":"FunctionDefinition","parameters":{"id":20919,"nodeType":"ParameterList","parameters":[],"src":"8239:2:81"},"returnParameters":{"id":20922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20921,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20926,"src":"8265:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20920,"name":"uint256","nodeType":"ElementaryTypeName","src":"8265:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8264:9:81"},"scope":21041,"src":"8214:98:81","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[864],"body":{"id":20938,"nodeType":"Block","src":"8437:51:81","statements":[{"expression":{"baseExpression":{"id":20934,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20339,"src":"8454:16:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20936,"indexExpression":{"id":20935,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20929,"src":"8471:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8454:27:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":20933,"id":20937,"nodeType":"Return","src":"8447:34:81"}]},"documentation":{"id":20927,"nodeType":"StructuredDocumentation","src":"8318:33:81","text":"@inheritdoc IPoolHelperCommon"},"functionSelector":"f167a1e6","id":20939,"implemented":true,"kind":"function","modifiers":[],"name":"getManagerForPoolSet","nameLocation":"8365:20:81","nodeType":"FunctionDefinition","parameters":{"id":20930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20929,"mutability":"mutable","name":"poolSetId","nameLocation":"8394:9:81","nodeType":"VariableDeclaration","scope":20939,"src":"8386:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20928,"name":"uint256","nodeType":"ElementaryTypeName","src":"8386:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8385:19:81"},"returnParameters":{"id":20933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20932,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20939,"src":"8428:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20931,"name":"address","nodeType":"ElementaryTypeName","src":"8428:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8427:9:81"},"scope":21041,"src":"8356:132:81","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":20957,"nodeType":"Block","src":"8867:141:81","statements":[{"expression":{"id":20947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20944,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20942,"src":"8877:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":20945,"name":"getPoolSetIdForCaller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20751,"src":"8889:21:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":20946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8889:23:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8877:35:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20948,"nodeType":"ExpressionStatement","src":"8877:35:81"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20949,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20942,"src":"8927:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":20950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8940:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8927:14:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20956,"nodeType":"IfStatement","src":"8923:79:81","trueBody":{"id":20955,"nodeType":"Block","src":"8943:59:81","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20952,"name":"SenderIsNotPoolSetManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":734,"src":"8964:25:81","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":20953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8964:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20954,"nodeType":"RevertStatement","src":"8957:34:81"}]}}]},"id":20958,"implemented":true,"kind":"function","modifiers":[],"name":"_getValidPoolSetId","nameLocation":"8804:18:81","nodeType":"FunctionDefinition","parameters":{"id":20940,"nodeType":"ParameterList","parameters":[],"src":"8822:2:81"},"returnParameters":{"id":20943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20942,"mutability":"mutable","name":"poolSetId","nameLocation":"8856:9:81","nodeType":"VariableDeclaration","scope":20958,"src":"8848:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20941,"name":"uint256","nodeType":"ElementaryTypeName","src":"8848:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8847:19:81"},"scope":21041,"src":"8795:213:81","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20985,"nodeType":"Block","src":"9074:206:81","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20963,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20960,"src":"9088:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":20966,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9107:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":20965,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9099:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20964,"name":"address","nodeType":"ElementaryTypeName","src":"9099:7:81","typeDescriptions":{}}},"id":20967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9099:10:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9088:21:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20973,"nodeType":"IfStatement","src":"9084:82:81","trueBody":{"id":20972,"nodeType":"Block","src":"9111:55:81","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20969,"name":"InvalidPoolSetManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":726,"src":"9132:21:81","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":20970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9132:23:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20971,"nodeType":"RevertStatement","src":"9125:30:81"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":20974,"name":"_poolSetLookup","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20343,"src":"9180:14:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":20976,"indexExpression":{"id":20975,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20960,"src":"9195:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9180:23:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":20977,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9207:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9180:28:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20984,"nodeType":"IfStatement","src":"9176:98:81","trueBody":{"id":20983,"nodeType":"Block","src":"9210:64:81","statements":[{"errorCall":{"arguments":[{"id":20980,"name":"manager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20960,"src":"9255:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20979,"name":"PoolSetManagerNotUnique","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":731,"src":"9231:23:81","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":20981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9231:32:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20982,"nodeType":"RevertStatement","src":"9224:39:81"}]}}]},"id":20986,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidManager","nameLocation":"9023:19:81","nodeType":"FunctionDefinition","parameters":{"id":20961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20960,"mutability":"mutable","name":"manager","nameLocation":"9051:7:81","nodeType":"VariableDeclaration","scope":20986,"src":"9043:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20959,"name":"address","nodeType":"ElementaryTypeName","src":"9043:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9042:17:81"},"returnParameters":{"id":20962,"nodeType":"ParameterList","parameters":[],"src":"9074:0:81"},"scope":21041,"src":"9014:266:81","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":21008,"nodeType":"Block","src":"9359:127:81","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":20997,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20990,"src":"9403:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":20993,"name":"_poolSets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20348,"src":"9373:9:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_AddressSet_$16575_storage_$","typeString":"mapping(uint256 => struct EnumerableSet.AddressSet storage ref)"}},"id":20995,"indexExpression":{"id":20994,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20988,"src":"9383:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9373:20:81","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$16575_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":20996,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9394:8:81","memberName":"contains","nodeType":"MemberAccess","referencedDeclaration":16669,"src":"9373:29:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$16575_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$16575_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) view returns (bool)"}},"id":20998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9373:35:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":20999,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9412:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"9373:44:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21007,"nodeType":"IfStatement","src":"9369:111:81","trueBody":{"id":21006,"nodeType":"Block","src":"9419:61:81","statements":[{"errorCall":{"arguments":[{"id":21002,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20990,"src":"9453:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21003,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20988,"src":"9459:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21001,"name":"PoolNotInSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":718,"src":"9440:12:81","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256) pure returns (error)"}},"id":21004,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9440:29:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":21005,"nodeType":"RevertStatement","src":"9433:36:81"}]}}]},"id":21009,"implemented":true,"kind":"function","modifiers":[],"name":"_ensurePoolInSet","nameLocation":"9295:16:81","nodeType":"FunctionDefinition","parameters":{"id":20991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20988,"mutability":"mutable","name":"poolSetId","nameLocation":"9320:9:81","nodeType":"VariableDeclaration","scope":21009,"src":"9312:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20987,"name":"uint256","nodeType":"ElementaryTypeName","src":"9312:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20990,"mutability":"mutable","name":"pool","nameLocation":"9339:4:81","nodeType":"VariableDeclaration","scope":21009,"src":"9331:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20989,"name":"address","nodeType":"ElementaryTypeName","src":"9331:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9311:33:81"},"returnParameters":{"id":20992,"nodeType":"ParameterList","parameters":[],"src":"9359:0:81"},"scope":21041,"src":"9286:200:81","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":21015,"nodeType":"Block","src":"9644:64:81","statements":[]},"documentation":{"id":21010,"nodeType":"StructuredDocumentation","src":"9492:88:81","text":"@dev Optional function called in `addPoolsToSet` for optional additional validation."},"id":21016,"implemented":true,"kind":"function","modifiers":[],"name":"_validatePool","nameLocation":"9594:13:81","nodeType":"FunctionDefinition","parameters":{"id":21013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21012,"mutability":"mutable","name":"pool","nameLocation":"9616:4:81","nodeType":"VariableDeclaration","scope":21016,"src":"9608:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21011,"name":"address","nodeType":"ElementaryTypeName","src":"9608:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9607:14:81"},"returnParameters":{"id":21014,"nodeType":"ParameterList","parameters":[],"src":"9644:0:81"},"scope":21041,"src":"9585:123:81","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":21039,"nodeType":"Block","src":"9776:140:81","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21021,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21018,"src":"9790:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":21022,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9803:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9790:14:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":21031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":21024,"name":"_poolSetManagers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20339,"src":"9808:16:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":21026,"indexExpression":{"id":21025,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21018,"src":"9825:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9808:27:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":21029,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9847:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":21028,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9839:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21027,"name":"address","nodeType":"ElementaryTypeName","src":"9839:7:81","typeDescriptions":{}}},"id":21030,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9839:10:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9808:41:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9790:59:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21038,"nodeType":"IfStatement","src":"9786:124:81","trueBody":{"id":21037,"nodeType":"Block","src":"9851:59:81","statements":[{"errorCall":{"arguments":[{"id":21034,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21018,"src":"9889:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21033,"name":"InvalidPoolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":723,"src":"9872:16:81","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":21035,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9872:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":21036,"nodeType":"RevertStatement","src":"9865:34:81"}]}}]},"id":21040,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidPoolSet","nameLocation":"9723:19:81","nodeType":"FunctionDefinition","parameters":{"id":21019,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21018,"mutability":"mutable","name":"poolSetId","nameLocation":"9751:9:81","nodeType":"VariableDeclaration","scope":21040,"src":"9743:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21017,"name":"uint256","nodeType":"ElementaryTypeName","src":"9743:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9742:19:81"},"returnParameters":{"id":21020,"nodeType":"ParameterList","parameters":[],"src":"9776:0:81"},"scope":21041,"src":"9714:202:81","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":21042,"src":"581:9337:81","usedErrors":[5,711,718,723,726,731,734,739,2839,9334,9339,20197],"usedEvents":[674,681,688,695,704,9345,9483]}],"src":"46:9873:81"},"id":81},"contracts/PoolPauseHelper.sol":{"ast":{"absolutePath":"contracts/PoolPauseHelper.sol","exportedSymbols":{"IPoolPauseHelper":[876],"IVault":[2527],"PoolHelperCommon":[21041],"PoolPauseHelper":[21114]},"id":21115,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":21043,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:82"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol","id":21045,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21115,"sourceUnit":877,"src":"72:112:82","symbolAliases":[{"foreign":{"id":21044,"name":"IPoolPauseHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":876,"src":"81:16:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":21047,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21115,"sourceUnit":2528,"src":"185:81:82","symbolAliases":[{"foreign":{"id":21046,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"194:6:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/PoolHelperCommon.sol","file":"./PoolHelperCommon.sol","id":21049,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21115,"sourceUnit":21042,"src":"268:58:82","symbolAliases":[{"foreign":{"id":21048,"name":"PoolHelperCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21041,"src":"277:16:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":21050,"name":"IPoolPauseHelper","nameLocations":["356:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":876,"src":"356:16:82"},"id":21051,"nodeType":"InheritanceSpecifier","src":"356:16:82"},{"baseName":{"id":21052,"name":"PoolHelperCommon","nameLocations":["374:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":21041,"src":"374:16:82"},"id":21053,"nodeType":"InheritanceSpecifier","src":"374:16:82"}],"canonicalName":"PoolPauseHelper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":21114,"linearizedBaseContracts":[21114,21041,20312,4367,14,9554,9468,12348,865,876],"name":"PoolPauseHelper","nameLocation":"337:15:82","nodeType":"ContractDefinition","nodes":[{"body":{"id":21065,"nodeType":"Block","src":"483:64:82","statements":[]},"id":21066,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":21061,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21056,"src":"462:5:82","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},{"id":21062,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21058,"src":"469:12:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21063,"kind":"baseConstructorSpecifier","modifierName":{"id":21060,"name":"PoolHelperCommon","nameLocations":["445:16:82"],"nodeType":"IdentifierPath","referencedDeclaration":21041,"src":"445:16:82"},"nodeType":"ModifierInvocation","src":"445:37:82"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":21059,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21056,"mutability":"mutable","name":"vault","nameLocation":"416:5:82","nodeType":"VariableDeclaration","scope":21066,"src":"409:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":21055,"nodeType":"UserDefinedTypeName","pathNode":{"id":21054,"name":"IVault","nameLocations":["409:6:82"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"409:6:82"},"referencedDeclaration":2527,"src":"409:6:82","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":21058,"mutability":"mutable","name":"initialOwner","nameLocation":"431:12:82","nodeType":"VariableDeclaration","scope":21066,"src":"423:20:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21057,"name":"address","nodeType":"ElementaryTypeName","src":"423:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"408:36:82"},"returnParameters":{"id":21064,"nodeType":"ParameterList","parameters":[],"src":"483:0:82"},"scope":21114,"src":"397:150:82","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[875],"body":{"id":21112,"nodeType":"Block","src":"853:326:82","statements":[{"assignments":[21074],"declarations":[{"constant":false,"id":21074,"mutability":"mutable","name":"poolSetId","nameLocation":"922:9:82","nodeType":"VariableDeclaration","scope":21112,"src":"914:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21073,"name":"uint256","nodeType":"ElementaryTypeName","src":"914:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21077,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":21075,"name":"_getValidPoolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20958,"src":"934:18:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":21076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"934:20:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"914:40:82"},{"assignments":[21079],"declarations":[{"constant":false,"id":21079,"mutability":"mutable","name":"length","nameLocation":"973:6:82","nodeType":"VariableDeclaration","scope":21112,"src":"965:14:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21078,"name":"uint256","nodeType":"ElementaryTypeName","src":"965:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21082,"initialValue":{"expression":{"id":21080,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21070,"src":"982:5:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":21081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"988:6:82","memberName":"length","nodeType":"MemberAccess","src":"982:12:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"965:29:82"},{"body":{"id":21110,"nodeType":"Block","src":"1042:131:82","statements":[{"assignments":[21094],"declarations":[{"constant":false,"id":21094,"mutability":"mutable","name":"pool","nameLocation":"1064:4:82","nodeType":"VariableDeclaration","scope":21110,"src":"1056:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21093,"name":"address","nodeType":"ElementaryTypeName","src":"1056:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":21098,"initialValue":{"baseExpression":{"id":21095,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21070,"src":"1071:5:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":21097,"indexExpression":{"id":21096,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21084,"src":"1077:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1071:8:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1056:23:82"},{"expression":{"arguments":[{"id":21100,"name":"poolSetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21074,"src":"1110:9:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21101,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21094,"src":"1121:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21099,"name":"_ensurePoolInSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21009,"src":"1093:16:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address) view"}},"id":21102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1093:33:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21103,"nodeType":"ExpressionStatement","src":"1093:33:82"},{"expression":{"arguments":[{"id":21107,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21094,"src":"1157:4:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":21104,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20200,"src":"1141:5:82","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":21106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1147:9:82","memberName":"pausePool","nodeType":"MemberAccess","referencedDeclaration":2629,"src":"1141:15:82","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":21108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1141:21:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21109,"nodeType":"ExpressionStatement","src":"1141:21:82"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21087,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21084,"src":"1025:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":21088,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21079,"src":"1029:6:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1025:10:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21111,"initializationExpression":{"assignments":[21084],"declarations":[{"constant":false,"id":21084,"mutability":"mutable","name":"i","nameLocation":"1018:1:82","nodeType":"VariableDeclaration","scope":21111,"src":"1010:9:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21083,"name":"uint256","nodeType":"ElementaryTypeName","src":"1010:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21086,"initialValue":{"hexValue":"30","id":21085,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1022:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1010:13:82"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1037:3:82","subExpression":{"id":21090,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21084,"src":"1037:1:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21092,"nodeType":"ExpressionStatement","src":"1037:3:82"},"nodeType":"ForStatement","src":"1005:168:82"}]},"documentation":{"id":21067,"nodeType":"StructuredDocumentation","src":"765:32:82","text":"@inheritdoc IPoolPauseHelper"},"functionSelector":"a20dc529","id":21113,"implemented":true,"kind":"function","modifiers":[],"name":"pausePools","nameLocation":"811:10:82","nodeType":"FunctionDefinition","parameters":{"id":21071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21070,"mutability":"mutable","name":"pools","nameLocation":"839:5:82","nodeType":"VariableDeclaration","scope":21113,"src":"822:22:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":21068,"name":"address","nodeType":"ElementaryTypeName","src":"822:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":21069,"nodeType":"ArrayTypeName","src":"822:9:82","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"821:24:82"},"returnParameters":{"id":21072,"nodeType":"ParameterList","parameters":[],"src":"853:0:82"},"scope":21114,"src":"802:377:82","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":21115,"src":"328:853:82","usedErrors":[5,711,718,723,726,731,734,739,2839,9334,9339,20197],"usedEvents":[674,681,688,695,704,9345,9483]}],"src":"46:1136:82"},"id":82},"contracts/PoolSwapFeeHelper.sol":{"ast":{"absolutePath":"contracts/PoolSwapFeeHelper.sol","exportedSymbols":{"IPoolSwapFeeHelper":[893],"IVault":[2527],"PoolHelperCommon":[21041],"PoolSwapFeeHelper":[21183]},"id":21184,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":21116,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:83"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol","id":21118,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21184,"sourceUnit":894,"src":"72:116:83","symbolAliases":[{"foreign":{"id":21117,"name":"IPoolSwapFeeHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":893,"src":"81:18:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":21120,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21184,"sourceUnit":2528,"src":"189:81:83","symbolAliases":[{"foreign":{"id":21119,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"198:6:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/PoolHelperCommon.sol","file":"./PoolHelperCommon.sol","id":21122,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21184,"sourceUnit":21042,"src":"272:58:83","symbolAliases":[{"foreign":{"id":21121,"name":"PoolHelperCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21041,"src":"281:16:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":21123,"name":"IPoolSwapFeeHelper","nameLocations":["362:18:83"],"nodeType":"IdentifierPath","referencedDeclaration":893,"src":"362:18:83"},"id":21124,"nodeType":"InheritanceSpecifier","src":"362:18:83"},{"baseName":{"id":21125,"name":"PoolHelperCommon","nameLocations":["382:16:83"],"nodeType":"IdentifierPath","referencedDeclaration":21041,"src":"382:16:83"},"id":21126,"nodeType":"InheritanceSpecifier","src":"382:16:83"}],"canonicalName":"PoolSwapFeeHelper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":21183,"linearizedBaseContracts":[21183,21041,20312,4367,14,9554,9468,12348,865,893],"name":"PoolSwapFeeHelper","nameLocation":"341:17:83","nodeType":"ContractDefinition","nodes":[{"body":{"id":21138,"nodeType":"Block","src":"491:64:83","statements":[]},"id":21139,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":21134,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21129,"src":"470:5:83","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},{"id":21135,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21131,"src":"477:12:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21136,"kind":"baseConstructorSpecifier","modifierName":{"id":21133,"name":"PoolHelperCommon","nameLocations":["453:16:83"],"nodeType":"IdentifierPath","referencedDeclaration":21041,"src":"453:16:83"},"nodeType":"ModifierInvocation","src":"453:37:83"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":21132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21129,"mutability":"mutable","name":"vault","nameLocation":"424:5:83","nodeType":"VariableDeclaration","scope":21139,"src":"417:12:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":21128,"nodeType":"UserDefinedTypeName","pathNode":{"id":21127,"name":"IVault","nameLocations":["417:6:83"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"417:6:83"},"referencedDeclaration":2527,"src":"417:6:83","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":21131,"mutability":"mutable","name":"initialOwner","nameLocation":"439:12:83","nodeType":"VariableDeclaration","scope":21139,"src":"431:20:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21130,"name":"address","nodeType":"ElementaryTypeName","src":"431:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"416:36:83"},"returnParameters":{"id":21137,"nodeType":"ParameterList","parameters":[],"src":"491:0:83"},"scope":21183,"src":"405:150:83","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[892],"body":{"id":21157,"nodeType":"Block","src":"925:74:83","statements":[{"expression":{"arguments":[{"id":21153,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21142,"src":"968:4:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21154,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21144,"src":"974:17:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":21150,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20200,"src":"935:5:83","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":21152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"941:26:83","memberName":"setStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2643,"src":"935:32:83","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":21155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"935:57:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21156,"nodeType":"ExpressionStatement","src":"935:57:83"}]},"documentation":{"id":21140,"nodeType":"StructuredDocumentation","src":"773:34:83","text":"@inheritdoc IPoolSwapFeeHelper"},"functionSelector":"d15126ba","id":21158,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":21147,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21142,"src":"919:4:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21148,"kind":"modifierInvocation","modifierName":{"id":21146,"name":"withValidPoolForSender","nameLocations":["896:22:83"],"nodeType":"IdentifierPath","referencedDeclaration":20374,"src":"896:22:83"},"nodeType":"ModifierInvocation","src":"896:28:83"}],"name":"setStaticSwapFeePercentage","nameLocation":"821:26:83","nodeType":"FunctionDefinition","parameters":{"id":21145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21142,"mutability":"mutable","name":"pool","nameLocation":"856:4:83","nodeType":"VariableDeclaration","scope":21158,"src":"848:12:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21141,"name":"address","nodeType":"ElementaryTypeName","src":"848:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21144,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"870:17:83","nodeType":"VariableDeclaration","scope":21158,"src":"862:25:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21143,"name":"uint256","nodeType":"ElementaryTypeName","src":"862:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"847:41:83"},"returnParameters":{"id":21149,"nodeType":"ParameterList","parameters":[],"src":"925:0:83"},"scope":21183,"src":"812:187:83","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[21016],"body":{"id":21181,"nodeType":"Block","src":"1348:187:83","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":21174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":21167,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21161,"src":"1437:4:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":21165,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20200,"src":"1411:5:83","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":21166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1417:19:83","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":3758,"src":"1411:25:83","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$4093_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":21168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1411:31:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4093_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":21169,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1443:14:83","memberName":"swapFeeManager","nodeType":"MemberAccess","referencedDeclaration":4090,"src":"1411:46:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":21172,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1469:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":21171,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1461:7:83","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21170,"name":"address","nodeType":"ElementaryTypeName","src":"1461:7:83","typeDescriptions":{}}},"id":21173,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1461:10:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1411:60:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21180,"nodeType":"IfStatement","src":"1407:122:83","trueBody":{"id":21179,"nodeType":"Block","src":"1473:56:83","statements":[{"errorCall":{"arguments":[{"id":21176,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21161,"src":"1513:4:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21175,"name":"PoolHasSwapManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":884,"src":"1494:18:83","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":21177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1494:24:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":21178,"nodeType":"RevertStatement","src":"1487:31:83"}]}}]},"documentation":{"id":21159,"nodeType":"StructuredDocumentation","src":"1251:32:83","text":"@inheritdoc PoolHelperCommon"},"id":21182,"implemented":true,"kind":"function","modifiers":[],"name":"_validatePool","nameLocation":"1297:13:83","nodeType":"FunctionDefinition","overrides":{"id":21163,"nodeType":"OverrideSpecifier","overrides":[],"src":"1339:8:83"},"parameters":{"id":21162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21161,"mutability":"mutable","name":"pool","nameLocation":"1319:4:83","nodeType":"VariableDeclaration","scope":21182,"src":"1311:12:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21160,"name":"address","nodeType":"ElementaryTypeName","src":"1311:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1310:14:83"},"returnParameters":{"id":21164,"nodeType":"ParameterList","parameters":[],"src":"1348:0:83"},"scope":21183,"src":"1288:247:83","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":21184,"src":"332:1205:83","usedErrors":[5,711,718,723,726,731,734,739,884,2839,9334,9339,20197],"usedEvents":[674,681,688,695,704,9345,9483]}],"src":"46:1492:83"},"id":83},"contracts/PriceImpactHelper.sol":{"ast":{"absolutePath":"contracts/PriceImpactHelper.sol","exportedSymbols":{"CallAndRevert":[18615],"FixedPoint":[5280],"IERC20":[10558],"IRouter":[2489],"IVault":[2527],"PriceImpactHelper":[21869],"SafeCast":[16074]},"id":21870,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":21185,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:84"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":21187,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21870,"sourceUnit":10559,"src":"72:72:84","symbolAliases":[{"foreign":{"id":21186,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"81:6:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":21189,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21870,"sourceUnit":16075,"src":"145:75:84","symbolAliases":[{"foreign":{"id":21188,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"154:8:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":21191,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21870,"sourceUnit":2528,"src":"222:81:84","symbolAliases":[{"foreign":{"id":21190,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"231:6:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","id":21193,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21870,"sourceUnit":2490,"src":"304:83:84","symbolAliases":[{"foreign":{"id":21192,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2489,"src":"313:7:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":21195,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21870,"sourceUnit":5281,"src":"389:92:84","symbolAliases":[{"foreign":{"id":21194,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5280,"src":"398:10:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/CallAndRevert.sol","file":"./CallAndRevert.sol","id":21197,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21870,"sourceUnit":18616,"src":"483:52:84","symbolAliases":[{"foreign":{"id":21196,"name":"CallAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18615,"src":"492:13:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":21198,"name":"CallAndRevert","nameLocations":["567:13:84"],"nodeType":"IdentifierPath","referencedDeclaration":18615,"src":"567:13:84"},"id":21199,"nodeType":"InheritanceSpecifier","src":"567:13:84"}],"canonicalName":"PriceImpactHelper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":21869,"linearizedBaseContracts":[21869,18615],"name":"PriceImpactHelper","nameLocation":"546:17:84","nodeType":"ContractDefinition","nodes":[{"global":false,"id":21202,"libraryName":{"id":21200,"name":"FixedPoint","nameLocations":["593:10:84"],"nodeType":"IdentifierPath","referencedDeclaration":5280,"src":"593:10:84"},"nodeType":"UsingForDirective","src":"587:29:84","typeName":{"id":21201,"name":"uint256","nodeType":"ElementaryTypeName","src":"608:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":21204,"libraryName":{"id":21203,"name":"SafeCast","nameLocations":["627:8:84"],"nodeType":"IdentifierPath","referencedDeclaration":16074,"src":"627:8:84"},"nodeType":"UsingForDirective","src":"621:21:84"},{"constant":false,"id":21207,"mutability":"immutable","name":"_vault","nameLocation":"674:6:84","nodeType":"VariableDeclaration","scope":21869,"src":"648:32:84","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":21206,"nodeType":"UserDefinedTypeName","pathNode":{"id":21205,"name":"IVault","nameLocations":["648:6:84"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"648:6:84"},"referencedDeclaration":2527,"src":"648:6:84","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":21210,"mutability":"immutable","name":"_router","nameLocation":"713:7:84","nodeType":"VariableDeclaration","scope":21869,"src":"686:34:84","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2489","typeString":"contract IRouter"},"typeName":{"id":21209,"nodeType":"UserDefinedTypeName","pathNode":{"id":21208,"name":"IRouter","nameLocations":["686:7:84"],"nodeType":"IdentifierPath","referencedDeclaration":2489,"src":"686:7:84"},"referencedDeclaration":2489,"src":"686:7:84","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2489","typeString":"contract IRouter"}},"visibility":"internal"},{"body":{"id":21227,"nodeType":"Block","src":"769:57:84","statements":[{"expression":{"id":21221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21219,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21207,"src":"779:6:84","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21220,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21213,"src":"788:5:84","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"src":"779:14:84","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":21222,"nodeType":"ExpressionStatement","src":"779:14:84"},{"expression":{"id":21225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21223,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21210,"src":"803:7:84","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2489","typeString":"contract IRouter"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21224,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21216,"src":"813:6:84","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2489","typeString":"contract IRouter"}},"src":"803:16:84","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2489","typeString":"contract IRouter"}},"id":21226,"nodeType":"ExpressionStatement","src":"803:16:84"}]},"id":21228,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":21217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21213,"mutability":"mutable","name":"vault","nameLocation":"746:5:84","nodeType":"VariableDeclaration","scope":21228,"src":"739:12:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":21212,"nodeType":"UserDefinedTypeName","pathNode":{"id":21211,"name":"IVault","nameLocations":["739:6:84"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"739:6:84"},"referencedDeclaration":2527,"src":"739:6:84","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":21216,"mutability":"mutable","name":"router","nameLocation":"761:6:84","nodeType":"VariableDeclaration","scope":21228,"src":"753:14:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2489","typeString":"contract IRouter"},"typeName":{"id":21215,"nodeType":"UserDefinedTypeName","pathNode":{"id":21214,"name":"IRouter","nameLocations":["753:7:84"],"nodeType":"IdentifierPath","referencedDeclaration":2489,"src":"753:7:84"},"referencedDeclaration":2489,"src":"753:7:84","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2489","typeString":"contract IRouter"}},"visibility":"internal"}],"src":"738:30:84"},"returnParameters":{"id":21218,"nodeType":"ParameterList","parameters":[],"src":"769:0:84"},"scope":21869,"src":"727:99:84","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":21364,"nodeType":"Block","src":"1232:1364:84","statements":[{"assignments":[21241],"declarations":[{"constant":false,"id":21241,"mutability":"mutable","name":"bptAmountOut","nameLocation":"1250:12:84","nodeType":"VariableDeclaration","scope":21364,"src":"1242:20:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21240,"name":"uint256","nodeType":"ElementaryTypeName","src":"1242:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21247,"initialValue":{"arguments":[{"id":21243,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21230,"src":"1294:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21244,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21233,"src":"1300:14:84","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":21245,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21235,"src":"1316:6:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21242,"name":"_queryAddLiquidityUnbalanced","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21401,"src":"1265:28:84","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256[] memory,address) returns (uint256)"}},"id":21246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1265:58:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1242:81:84"},{"assignments":[21252],"declarations":[{"constant":false,"id":21252,"mutability":"mutable","name":"proportionalAmountsOut","nameLocation":"1350:22:84","nodeType":"VariableDeclaration","scope":21364,"src":"1333:39:84","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21250,"name":"uint256","nodeType":"ElementaryTypeName","src":"1333:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21251,"nodeType":"ArrayTypeName","src":"1333:9:84","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":21258,"initialValue":{"arguments":[{"id":21254,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21230,"src":"1409:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21255,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21241,"src":"1415:12:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21256,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21235,"src":"1429:6:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21253,"name":"_queryRemoveLiquidityProportional","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21438,"src":"1375:33:84","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address,uint256,address) returns (uint256[] memory)"}},"id":21257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1375:61:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1333:103:84"},{"assignments":[21263],"declarations":[{"constant":false,"id":21263,"mutability":"mutable","name":"deltas","nameLocation":"1535:6:84","nodeType":"VariableDeclaration","scope":21364,"src":"1519:22:84","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21261,"name":"int256","nodeType":"ElementaryTypeName","src":"1519:6:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21262,"nodeType":"ArrayTypeName","src":"1519:8:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"id":21270,"initialValue":{"arguments":[{"expression":{"id":21267,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21233,"src":"1557:14:84","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1572:6:84","memberName":"length","nodeType":"MemberAccess","src":"1557:21:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21266,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1544:12:84","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_int256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (int256[] memory)"},"typeName":{"baseType":{"id":21264,"name":"int256","nodeType":"ElementaryTypeName","src":"1548:6:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21265,"nodeType":"ArrayTypeName","src":"1548:8:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}}},"id":21269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1544:35:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1519:60:84"},{"body":{"id":21298,"nodeType":"Block","src":"1641:104:84","statements":[{"expression":{"id":21296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21282,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21263,"src":"1655:6:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21284,"indexExpression":{"id":21283,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21272,"src":"1662:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1655:9:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":21285,"name":"proportionalAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21252,"src":"1667:22:84","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21287,"indexExpression":{"id":21286,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21272,"src":"1690:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1667:25:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1693:8:84","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":16063,"src":"1667:34:84","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":21289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1667:36:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":21290,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21233,"src":"1706:14:84","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21292,"indexExpression":{"id":21291,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21272,"src":"1721:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1706:17:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1724:8:84","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":16063,"src":"1706:26:84","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":21294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1706:28:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1667:67:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1655:79:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21297,"nodeType":"ExpressionStatement","src":"1655:79:84"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21275,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21272,"src":"1609:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":21276,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21233,"src":"1613:14:84","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1628:6:84","memberName":"length","nodeType":"MemberAccess","src":"1613:21:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1609:25:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21299,"initializationExpression":{"assignments":[21272],"declarations":[{"constant":false,"id":21272,"mutability":"mutable","name":"i","nameLocation":"1602:1:84","nodeType":"VariableDeclaration","scope":21299,"src":"1594:9:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21271,"name":"uint256","nodeType":"ElementaryTypeName","src":"1594:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21274,"initialValue":{"hexValue":"30","id":21273,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1606:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1594:13:84"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1636:3:84","subExpression":{"id":21279,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21272,"src":"1636:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21281,"nodeType":"ExpressionStatement","src":"1636:3:84"},"nodeType":"ForStatement","src":"1589:156:84"},{"assignments":[21304],"declarations":[{"constant":false,"id":21304,"mutability":"mutable","name":"deltaBPTs","nameLocation":"1878:9:84","nodeType":"VariableDeclaration","scope":21364,"src":"1862:25:84","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21302,"name":"int256","nodeType":"ElementaryTypeName","src":"1862:6:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21303,"nodeType":"ArrayTypeName","src":"1862:8:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"id":21311,"initialValue":{"arguments":[{"expression":{"id":21308,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21233,"src":"1903:14:84","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1918:6:84","memberName":"length","nodeType":"MemberAccess","src":"1903:21:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21307,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1890:12:84","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_int256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (int256[] memory)"},"typeName":{"baseType":{"id":21305,"name":"int256","nodeType":"ElementaryTypeName","src":"1894:6:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21306,"nodeType":"ArrayTypeName","src":"1894:8:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}}},"id":21310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1890:35:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1862:63:84"},{"body":{"id":21334,"nodeType":"Block","src":"1987:107:84","statements":[{"expression":{"id":21332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21323,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21304,"src":"2001:9:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21325,"indexExpression":{"id":21324,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21313,"src":"2011:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2001:12:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":21327,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21230,"src":"2059:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21328,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21313,"src":"2065:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21329,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21263,"src":"2068:6:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":21330,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21235,"src":"2076:6:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21326,"name":"_queryAddLiquidityUnbalancedForTokenDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21598,"src":"2016:42:84","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_int256_$","typeString":"function (address,uint256,int256[] memory,address) returns (int256)"}},"id":21331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2016:67:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"2001:82:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21333,"nodeType":"ExpressionStatement","src":"2001:82:84"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21316,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21313,"src":"1955:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":21317,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21233,"src":"1959:14:84","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1974:6:84","memberName":"length","nodeType":"MemberAccess","src":"1959:21:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1955:25:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21335,"initializationExpression":{"assignments":[21313],"declarations":[{"constant":false,"id":21313,"mutability":"mutable","name":"i","nameLocation":"1948:1:84","nodeType":"VariableDeclaration","scope":21335,"src":"1940:9:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21312,"name":"uint256","nodeType":"ElementaryTypeName","src":"1940:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21315,"initialValue":{"hexValue":"30","id":21314,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1952:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1940:13:84"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1982:3:84","subExpression":{"id":21320,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21313,"src":"1982:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21322,"nodeType":"ExpressionStatement","src":"1982:3:84"},"nodeType":"ForStatement","src":"1935:159:84"},{"assignments":[21337],"declarations":[{"constant":false,"id":21337,"mutability":"mutable","name":"remainingDeltaIndex","nameLocation":"2192:19:84","nodeType":"VariableDeclaration","scope":21364,"src":"2184:27:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21336,"name":"uint256","nodeType":"ElementaryTypeName","src":"2184:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21344,"initialValue":{"arguments":[{"id":21339,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21230,"src":"2229:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21340,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21263,"src":"2235:6:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":21341,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21304,"src":"2243:9:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":21342,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21235,"src":"2254:6:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21338,"name":"_zeroOutDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21762,"src":"2214:14:84","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_int256_$dyn_memory_ptr_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$","typeString":"function (address,int256[] memory,int256[] memory,address) returns (uint256)"}},"id":21343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2214:47:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2184:77:84"},{"assignments":[21346],"declarations":[{"constant":false,"id":21346,"mutability":"mutable","name":"delta","nameLocation":"2468:5:84","nodeType":"VariableDeclaration","scope":21364,"src":"2460:13:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21345,"name":"uint256","nodeType":"ElementaryTypeName","src":"2460:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21354,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"id":21350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"2477:28:84","subExpression":{"baseExpression":{"id":21347,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21263,"src":"2478:6:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21349,"indexExpression":{"id":21348,"name":"remainingDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21337,"src":"2485:19:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2478:27:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":21351,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2476:30:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2507:9:84","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":15227,"src":"2476:40:84","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":21353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2476:42:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2460:58:84"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"id":21357,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21233,"src":"2549:14:84","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21359,"indexExpression":{"id":21358,"name":"remainingDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21337,"src":"2564:19:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2549:35:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":21355,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21346,"src":"2535:5:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2541:7:84","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":5062,"src":"2535:13:84","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":21360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2535:50:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":21361,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2588:1:84","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2535:54:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21239,"id":21363,"nodeType":"Return","src":"2528:61:84"}]},"functionSelector":"48406a54","id":21365,"implemented":true,"kind":"function","modifiers":[],"name":"calculateAddLiquidityUnbalancedPriceImpact","nameLocation":"1057:42:84","nodeType":"FunctionDefinition","parameters":{"id":21236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21230,"mutability":"mutable","name":"pool","nameLocation":"1117:4:84","nodeType":"VariableDeclaration","scope":21365,"src":"1109:12:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21229,"name":"address","nodeType":"ElementaryTypeName","src":"1109:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21233,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"1148:14:84","nodeType":"VariableDeclaration","scope":21365,"src":"1131:31:84","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21231,"name":"uint256","nodeType":"ElementaryTypeName","src":"1131:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21232,"nodeType":"ArrayTypeName","src":"1131:9:84","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":21235,"mutability":"mutable","name":"sender","nameLocation":"1180:6:84","nodeType":"VariableDeclaration","scope":21365,"src":"1172:14:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21234,"name":"address","nodeType":"ElementaryTypeName","src":"1172:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1099:93:84"},"returnParameters":{"id":21239,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21238,"mutability":"mutable","name":"priceImpact","nameLocation":"1219:11:84","nodeType":"VariableDeclaration","scope":21365,"src":"1211:19:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21237,"name":"uint256","nodeType":"ElementaryTypeName","src":"1211:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1210:21:84"},"scope":21869,"src":"1048:1548:84","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":21400,"nodeType":"Block","src":"2978:441:84","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":21382,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21210,"src":"3079:7:84","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2489","typeString":"contract IRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRouter_$2489","typeString":"contract IRouter"}],"id":21381,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3071:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21380,"name":"address","nodeType":"ElementaryTypeName","src":"3071:7:84","typeDescriptions":{}}},"id":21383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3071:16:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":21386,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2489,"src":"3157:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$2489_$","typeString":"type(contract IRouter)"}},"id":21387,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3165:27:84","memberName":"queryAddLiquidityUnbalanced","nodeType":"MemberAccess","referencedDeclaration":2133,"src":"3157:35:84","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function IRouter.queryAddLiquidityUnbalanced(address,uint256[] memory,address,bytes memory) returns (uint256)"}},"id":21388,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3193:8:84","memberName":"selector","nodeType":"MemberAccess","src":"3157:44:84","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":21389,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21367,"src":"3227:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21390,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21370,"src":"3257:14:84","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":21391,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21372,"src":"3297:6:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":21392,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3329:2:84","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":21384,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3109:3:84","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21385,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3113:18:84","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"3109:22:84","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":21393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3109:244:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":21379,"name":"_callAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18554,"src":"3035:14:84","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":21394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3035:336:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":21396,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3390:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":21395,"name":"uint256","nodeType":"ElementaryTypeName","src":"3390:7:84","typeDescriptions":{}}}],"id":21397,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3389:9:84","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":21377,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3007:3:84","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21378,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3011:6:84","memberName":"decode","nodeType":"MemberAccess","src":"3007:10:84","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":21398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3007:405:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21376,"id":21399,"nodeType":"Return","src":"2988:424:84"}]},"id":21401,"implemented":true,"kind":"function","modifiers":[],"name":"_queryAddLiquidityUnbalanced","nameLocation":"2829:28:84","nodeType":"FunctionDefinition","parameters":{"id":21373,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21367,"mutability":"mutable","name":"pool","nameLocation":"2875:4:84","nodeType":"VariableDeclaration","scope":21401,"src":"2867:12:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21366,"name":"address","nodeType":"ElementaryTypeName","src":"2867:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21370,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"2906:14:84","nodeType":"VariableDeclaration","scope":21401,"src":"2889:31:84","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21368,"name":"uint256","nodeType":"ElementaryTypeName","src":"2889:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21369,"nodeType":"ArrayTypeName","src":"2889:9:84","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":21372,"mutability":"mutable","name":"sender","nameLocation":"2938:6:84","nodeType":"VariableDeclaration","scope":21401,"src":"2930:14:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21371,"name":"address","nodeType":"ElementaryTypeName","src":"2930:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2857:93:84"},"returnParameters":{"id":21376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21375,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21401,"src":"2969:7:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21374,"name":"uint256","nodeType":"ElementaryTypeName","src":"2969:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2968:9:84"},"scope":21869,"src":"2820:599:84","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21437,"nodeType":"Block","src":"3586:446:84","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":21418,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21210,"src":"3687:7:84","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2489","typeString":"contract IRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRouter_$2489","typeString":"contract IRouter"}],"id":21417,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3679:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21416,"name":"address","nodeType":"ElementaryTypeName","src":"3679:7:84","typeDescriptions":{}}},"id":21419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3679:16:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":21422,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2489,"src":"3765:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$2489_$","typeString":"type(contract IRouter)"}},"id":21423,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3773:32:84","memberName":"queryRemoveLiquidityProportional","nodeType":"MemberAccess","referencedDeclaration":2259,"src":"3765:40:84","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function IRouter.queryRemoveLiquidityProportional(address,uint256,address,bytes memory) returns (uint256[] memory)"}},"id":21424,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3806:8:84","memberName":"selector","nodeType":"MemberAccess","src":"3765:49:84","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":21425,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21403,"src":"3840:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21426,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21405,"src":"3870:12:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21427,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21407,"src":"3908:6:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":21428,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3940:2:84","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":21420,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3717:3:84","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21421,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3721:18:84","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"3717:22:84","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":21429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3717:247:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":21415,"name":"_callAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18554,"src":"3643:14:84","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":21430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3643:339:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":21432,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4001:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":21431,"name":"uint256","nodeType":"ElementaryTypeName","src":"4001:7:84","typeDescriptions":{}}},"id":21433,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"4001:9:84","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}}],"id":21434,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4000:11:84","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}],"expression":{"id":21413,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3615:3:84","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21414,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3619:6:84","memberName":"decode","nodeType":"MemberAccess","src":"3615:10:84","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":21435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3615:410:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":21412,"id":21436,"nodeType":"Return","src":"3596:429:84"}]},"id":21438,"implemented":true,"kind":"function","modifiers":[],"name":"_queryRemoveLiquidityProportional","nameLocation":"3434:33:84","nodeType":"FunctionDefinition","parameters":{"id":21408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21403,"mutability":"mutable","name":"pool","nameLocation":"3485:4:84","nodeType":"VariableDeclaration","scope":21438,"src":"3477:12:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21402,"name":"address","nodeType":"ElementaryTypeName","src":"3477:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21405,"mutability":"mutable","name":"bptAmountOut","nameLocation":"3507:12:84","nodeType":"VariableDeclaration","scope":21438,"src":"3499:20:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21404,"name":"uint256","nodeType":"ElementaryTypeName","src":"3499:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21407,"mutability":"mutable","name":"sender","nameLocation":"3537:6:84","nodeType":"VariableDeclaration","scope":21438,"src":"3529:14:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21406,"name":"address","nodeType":"ElementaryTypeName","src":"3529:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3467:82:84"},"returnParameters":{"id":21412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21411,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21438,"src":"3568:16:84","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21409,"name":"uint256","nodeType":"ElementaryTypeName","src":"3568:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21410,"nodeType":"ArrayTypeName","src":"3568:9:84","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3567:18:84"},"scope":21869,"src":"3425:607:84","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21480,"nodeType":"Block","src":"4230:502:84","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":21460,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21210,"src":"4331:7:84","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2489","typeString":"contract IRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRouter_$2489","typeString":"contract IRouter"}],"id":21459,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4323:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21458,"name":"address","nodeType":"ElementaryTypeName","src":"4323:7:84","typeDescriptions":{}}},"id":21461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4323:16:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":21464,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2489,"src":"4409:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$2489_$","typeString":"type(contract IRouter)"}},"id":21465,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4417:27:84","memberName":"querySwapSingleTokenExactIn","nodeType":"MemberAccess","referencedDeclaration":2444,"src":"4409:35:84","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_contract$_IERC20_$10558_$_t_contract$_IERC20_$10558_$_t_uint256_$_t_address_$_t_bytes_calldata_ptr_$returns$_t_uint256_$","typeString":"function IRouter.querySwapSingleTokenExactIn(address,contract IERC20,contract IERC20,uint256,address,bytes calldata) returns (uint256)"}},"id":21466,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4445:8:84","memberName":"selector","nodeType":"MemberAccess","src":"4409:44:84","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":21467,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21440,"src":"4479:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21468,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21443,"src":"4509:7:84","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":21469,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21446,"src":"4542:8:84","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":21470,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21448,"src":"4576:8:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21471,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21450,"src":"4610:6:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":21472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4642:2:84","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":21462,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4361:3:84","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21463,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4365:18:84","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"4361:22:84","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":21473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4361:305:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":21457,"name":"_callAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18554,"src":"4287:14:84","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":21474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4287:397:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":21476,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4703:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":21475,"name":"uint256","nodeType":"ElementaryTypeName","src":"4703:7:84","typeDescriptions":{}}}],"id":21477,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4702:9:84","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":21455,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4259:3:84","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21456,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4263:6:84","memberName":"decode","nodeType":"MemberAccess","src":"4259:10:84","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":21478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4259:466:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21454,"id":21479,"nodeType":"Return","src":"4240:485:84"}]},"id":21481,"implemented":true,"kind":"function","modifiers":[],"name":"_querySwapSingleTokenExactIn","nameLocation":"4047:28:84","nodeType":"FunctionDefinition","parameters":{"id":21451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21440,"mutability":"mutable","name":"pool","nameLocation":"4093:4:84","nodeType":"VariableDeclaration","scope":21481,"src":"4085:12:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21439,"name":"address","nodeType":"ElementaryTypeName","src":"4085:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21443,"mutability":"mutable","name":"tokenIn","nameLocation":"4114:7:84","nodeType":"VariableDeclaration","scope":21481,"src":"4107:14:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":21442,"nodeType":"UserDefinedTypeName","pathNode":{"id":21441,"name":"IERC20","nameLocations":["4107:6:84"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"4107:6:84"},"referencedDeclaration":10558,"src":"4107:6:84","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":21446,"mutability":"mutable","name":"tokenOut","nameLocation":"4138:8:84","nodeType":"VariableDeclaration","scope":21481,"src":"4131:15:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":21445,"nodeType":"UserDefinedTypeName","pathNode":{"id":21444,"name":"IERC20","nameLocations":["4131:6:84"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"4131:6:84"},"referencedDeclaration":10558,"src":"4131:6:84","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":21448,"mutability":"mutable","name":"amountIn","nameLocation":"4164:8:84","nodeType":"VariableDeclaration","scope":21481,"src":"4156:16:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21447,"name":"uint256","nodeType":"ElementaryTypeName","src":"4156:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21450,"mutability":"mutable","name":"sender","nameLocation":"4190:6:84","nodeType":"VariableDeclaration","scope":21481,"src":"4182:14:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21449,"name":"address","nodeType":"ElementaryTypeName","src":"4182:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4075:127:84"},"returnParameters":{"id":21454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21453,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21481,"src":"4221:7:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21452,"name":"uint256","nodeType":"ElementaryTypeName","src":"4221:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4220:9:84"},"scope":21869,"src":"4038:694:84","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21523,"nodeType":"Block","src":"4932:504:84","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":21503,"name":"_router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21210,"src":"5033:7:84","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2489","typeString":"contract IRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRouter_$2489","typeString":"contract IRouter"}],"id":21502,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5025:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21501,"name":"address","nodeType":"ElementaryTypeName","src":"5025:7:84","typeDescriptions":{}}},"id":21504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5025:16:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":21507,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2489,"src":"5111:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRouter_$2489_$","typeString":"type(contract IRouter)"}},"id":21508,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5119:28:84","memberName":"querySwapSingleTokenExactOut","nodeType":"MemberAccess","referencedDeclaration":2488,"src":"5111:36:84","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_contract$_IERC20_$10558_$_t_contract$_IERC20_$10558_$_t_uint256_$_t_address_$_t_bytes_calldata_ptr_$returns$_t_uint256_$","typeString":"function IRouter.querySwapSingleTokenExactOut(address,contract IERC20,contract IERC20,uint256,address,bytes calldata) returns (uint256)"}},"id":21509,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5148:8:84","memberName":"selector","nodeType":"MemberAccess","src":"5111:45:84","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":21510,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21483,"src":"5182:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21511,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21486,"src":"5212:7:84","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":21512,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21489,"src":"5245:8:84","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":21513,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21491,"src":"5279:9:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21514,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21493,"src":"5314:6:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"","id":21515,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5346:2:84","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":21505,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5063:3:84","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21506,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5067:18:84","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"5063:22:84","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":21516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5063:307:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":21500,"name":"_callAndRevert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18554,"src":"4989:14:84","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":21517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4989:399:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":21519,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5407:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":21518,"name":"uint256","nodeType":"ElementaryTypeName","src":"5407:7:84","typeDescriptions":{}}}],"id":21520,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5406:9:84","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":21498,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4961:3:84","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":21499,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4965:6:84","memberName":"decode","nodeType":"MemberAccess","src":"4961:10:84","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":21521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4961:468:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21497,"id":21522,"nodeType":"Return","src":"4942:487:84"}]},"id":21524,"implemented":true,"kind":"function","modifiers":[],"name":"_querySwapSingleTokenExactOut","nameLocation":"4747:29:84","nodeType":"FunctionDefinition","parameters":{"id":21494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21483,"mutability":"mutable","name":"pool","nameLocation":"4794:4:84","nodeType":"VariableDeclaration","scope":21524,"src":"4786:12:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21482,"name":"address","nodeType":"ElementaryTypeName","src":"4786:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21486,"mutability":"mutable","name":"tokenIn","nameLocation":"4815:7:84","nodeType":"VariableDeclaration","scope":21524,"src":"4808:14:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":21485,"nodeType":"UserDefinedTypeName","pathNode":{"id":21484,"name":"IERC20","nameLocations":["4808:6:84"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"4808:6:84"},"referencedDeclaration":10558,"src":"4808:6:84","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":21489,"mutability":"mutable","name":"tokenOut","nameLocation":"4839:8:84","nodeType":"VariableDeclaration","scope":21524,"src":"4832:15:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":21488,"nodeType":"UserDefinedTypeName","pathNode":{"id":21487,"name":"IERC20","nameLocations":["4832:6:84"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"4832:6:84"},"referencedDeclaration":10558,"src":"4832:6:84","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":21491,"mutability":"mutable","name":"amountOut","nameLocation":"4865:9:84","nodeType":"VariableDeclaration","scope":21524,"src":"4857:17:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21490,"name":"uint256","nodeType":"ElementaryTypeName","src":"4857:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21493,"mutability":"mutable","name":"sender","nameLocation":"4892:6:84","nodeType":"VariableDeclaration","scope":21524,"src":"4884:14:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21492,"name":"address","nodeType":"ElementaryTypeName","src":"4884:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4776:128:84"},"returnParameters":{"id":21497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21496,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21524,"src":"4923:7:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21495,"name":"uint256","nodeType":"ElementaryTypeName","src":"4923:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4922:9:84"},"scope":21869,"src":"4738:698:84","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21597,"nodeType":"Block","src":"5847:412:84","statements":[{"assignments":[21542],"declarations":[{"constant":false,"id":21542,"mutability":"mutable","name":"zerosWithSingleDelta","nameLocation":"5874:20:84","nodeType":"VariableDeclaration","scope":21597,"src":"5857:37:84","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21540,"name":"uint256","nodeType":"ElementaryTypeName","src":"5857:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21541,"nodeType":"ArrayTypeName","src":"5857:9:84","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":21549,"initialValue":{"arguments":[{"expression":{"id":21546,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21531,"src":"5911:6:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5918:6:84","memberName":"length","nodeType":"MemberAccess","src":"5911:13:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21545,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"5897:13:84","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":21543,"name":"uint256","nodeType":"ElementaryTypeName","src":"5901:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21544,"nodeType":"ArrayTypeName","src":"5901:9:84","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":21548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5897:28:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"5857:68:84"},{"assignments":[21551],"declarations":[{"constant":false,"id":21551,"mutability":"mutable","name":"delta","nameLocation":"5942:5:84","nodeType":"VariableDeclaration","scope":21597,"src":"5935:12:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":21550,"name":"int256","nodeType":"ElementaryTypeName","src":"5935:6:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":21555,"initialValue":{"baseExpression":{"id":21552,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21531,"src":"5950:6:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21554,"indexExpression":{"id":21553,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21528,"src":"5957:10:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5950:18:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5935:33:84"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21556,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21551,"src":"5983:5:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":21557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5992:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5983:10:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21562,"nodeType":"IfStatement","src":"5979:49:84","trueBody":{"id":21561,"nodeType":"Block","src":"5995:33:84","statements":[{"expression":{"hexValue":"30","id":21559,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6016:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":21537,"id":21560,"nodeType":"Return","src":"6009:8:84"}]}},{"expression":{"id":21576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21563,"name":"zerosWithSingleDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21542,"src":"6038:20:84","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21565,"indexExpression":{"id":21564,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21528,"src":"6059:10:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6038:32:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21568,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21551,"src":"6081:5:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":21569,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6089:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6081:9:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":21573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"6101:6:84","subExpression":{"id":21572,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21551,"src":"6102:5:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6081:26:84","trueExpression":{"id":21571,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21551,"src":"6093:5:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":21567,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6073:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":21566,"name":"uint256","nodeType":"ElementaryTypeName","src":"6073:7:84","typeDescriptions":{}}},"id":21575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6073:35:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6038:70:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21577,"nodeType":"ExpressionStatement","src":"6038:70:84"},{"assignments":[21579],"declarations":[{"constant":false,"id":21579,"mutability":"mutable","name":"result","nameLocation":"6125:6:84","nodeType":"VariableDeclaration","scope":21597,"src":"6118:13:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":21578,"name":"int256","nodeType":"ElementaryTypeName","src":"6118:6:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":21588,"initialValue":{"arguments":[{"arguments":[{"id":21583,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21526,"src":"6170:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21584,"name":"zerosWithSingleDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21542,"src":"6176:20:84","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":21585,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21533,"src":"6198:6:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21582,"name":"_queryAddLiquidityUnbalanced","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21401,"src":"6141:28:84","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256[] memory,address) returns (uint256)"}},"id":21586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6141:64:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21581,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6134:6:84","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":21580,"name":"int256","nodeType":"ElementaryTypeName","src":"6134:6:84","typeDescriptions":{}}},"id":21587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6134:72:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"6118:88:84"},{"expression":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21589,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21551,"src":"6224:5:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":21590,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6232:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6224:9:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":21594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"6245:7:84","subExpression":{"id":21593,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21579,"src":"6246:6:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6224:28:84","trueExpression":{"id":21592,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21579,"src":"6236:6:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":21537,"id":21596,"nodeType":"Return","src":"6217:35:84"}]},"id":21598,"implemented":true,"kind":"function","modifiers":[],"name":"_queryAddLiquidityUnbalancedForTokenDeltas","nameLocation":"5666:42:84","nodeType":"FunctionDefinition","parameters":{"id":21534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21526,"mutability":"mutable","name":"pool","nameLocation":"5726:4:84","nodeType":"VariableDeclaration","scope":21598,"src":"5718:12:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21525,"name":"address","nodeType":"ElementaryTypeName","src":"5718:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21528,"mutability":"mutable","name":"tokenIndex","nameLocation":"5748:10:84","nodeType":"VariableDeclaration","scope":21598,"src":"5740:18:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21527,"name":"uint256","nodeType":"ElementaryTypeName","src":"5740:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21531,"mutability":"mutable","name":"deltas","nameLocation":"5784:6:84","nodeType":"VariableDeclaration","scope":21598,"src":"5768:22:84","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21529,"name":"int256","nodeType":"ElementaryTypeName","src":"5768:6:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21530,"nodeType":"ArrayTypeName","src":"5768:8:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":21533,"mutability":"mutable","name":"sender","nameLocation":"5808:6:84","nodeType":"VariableDeclaration","scope":21598,"src":"5800:14:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21532,"name":"address","nodeType":"ElementaryTypeName","src":"5800:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5708:112:84"},"returnParameters":{"id":21537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21536,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21598,"src":"5839:6:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":21535,"name":"int256","nodeType":"ElementaryTypeName","src":"5839:6:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"5838:8:84"},"scope":21869,"src":"5657:602:84","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21761,"nodeType":"Block","src":"6435:1945:84","statements":[{"assignments":[21614],"declarations":[{"constant":false,"id":21614,"mutability":"mutable","name":"maxNegativeDeltaIndex","nameLocation":"6524:21:84","nodeType":"VariableDeclaration","scope":21761,"src":"6516:29:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21613,"name":"uint256","nodeType":"ElementaryTypeName","src":"6516:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21616,"initialValue":{"hexValue":"30","id":21615,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6548:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6516:33:84"},{"assignments":[21621],"declarations":[{"constant":false,"id":21621,"mutability":"mutable","name":"poolTokens","nameLocation":"6575:10:84","nodeType":"VariableDeclaration","scope":21761,"src":"6559:26:84","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":21619,"nodeType":"UserDefinedTypeName","pathNode":{"id":21618,"name":"IERC20","nameLocations":["6559:6:84"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"6559:6:84"},"referencedDeclaration":10558,"src":"6559:6:84","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":21620,"nodeType":"ArrayTypeName","src":"6559:8:84","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":21626,"initialValue":{"arguments":[{"id":21624,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21600,"src":"6609:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":21622,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21207,"src":"6588:6:84","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":21623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6595:13:84","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":3561,"src":"6588:20:84","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":21625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6588:26:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"6559:55:84"},{"body":{"id":21757,"nodeType":"Block","src":"6673:1662:84","statements":[{"assignments":[21641],"declarations":[{"constant":false,"id":21641,"mutability":"mutable","name":"minPositiveDeltaIndex","nameLocation":"6762:21:84","nodeType":"VariableDeclaration","scope":21757,"src":"6754:29:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21640,"name":"uint256","nodeType":"ElementaryTypeName","src":"6754:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21645,"initialValue":{"arguments":[{"id":21643,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21606,"src":"6804:9:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}],"id":21642,"name":"_minPositiveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21815,"src":"6786:17:84","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (int256[] memory) pure returns (uint256)"}},"id":21644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6786:28:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6754:60:84"},{"expression":{"id":21650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21646,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21614,"src":"6828:21:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":21648,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21606,"src":"6870:9:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}],"id":21647,"name":"_maxNegativeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21868,"src":"6852:17:84","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (int256[] memory) pure returns (uint256)"}},"id":21649,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6852:28:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6828:52:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21651,"nodeType":"ExpressionStatement","src":"6828:52:84"},{"assignments":[21653],"declarations":[{"constant":false,"id":21653,"mutability":"mutable","name":"givenTokenIndex","nameLocation":"6903:15:84","nodeType":"VariableDeclaration","scope":21757,"src":"6895:23:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21652,"name":"uint256","nodeType":"ElementaryTypeName","src":"6895:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21654,"nodeType":"VariableDeclarationStatement","src":"6895:23:84"},{"assignments":[21656],"declarations":[{"constant":false,"id":21656,"mutability":"mutable","name":"resultTokenIndex","nameLocation":"6940:16:84","nodeType":"VariableDeclaration","scope":21757,"src":"6932:24:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21655,"name":"uint256","nodeType":"ElementaryTypeName","src":"6932:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21657,"nodeType":"VariableDeclarationStatement","src":"6932:24:84"},{"assignments":[21659],"declarations":[{"constant":false,"id":21659,"mutability":"mutable","name":"resultAmount","nameLocation":"6978:12:84","nodeType":"VariableDeclaration","scope":21757,"src":"6970:20:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21658,"name":"uint256","nodeType":"ElementaryTypeName","src":"6970:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21660,"nodeType":"VariableDeclarationStatement","src":"6970:20:84"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":21661,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21606,"src":"7009:9:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21663,"indexExpression":{"id":21662,"name":"minPositiveDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21641,"src":"7019:21:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7009:32:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":21667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"7044:33:84","subExpression":{"baseExpression":{"id":21664,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21606,"src":"7045:9:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21666,"indexExpression":{"id":21665,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21614,"src":"7055:21:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7045:32:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7009:68:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":21724,"nodeType":"Block","src":"7504:423:84","statements":[{"expression":{"id":21698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21696,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21653,"src":"7522:15:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21697,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21614,"src":"7540:21:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7522:39:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21699,"nodeType":"ExpressionStatement","src":"7522:39:84"},{"expression":{"id":21702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21700,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21656,"src":"7579:16:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21701,"name":"minPositiveDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21641,"src":"7598:21:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7579:40:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21703,"nodeType":"ExpressionStatement","src":"7579:40:84"},{"expression":{"id":21722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21704,"name":"resultAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21659,"src":"7637:12:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":21706,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21600,"src":"7703:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":21707,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21621,"src":"7729:10:84","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":21709,"indexExpression":{"id":21708,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21656,"src":"7740:16:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7729:28:84","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"baseExpression":{"id":21710,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21621,"src":"7779:10:84","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":21712,"indexExpression":{"id":21711,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21653,"src":"7790:15:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7779:27:84","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"id":21716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"7829:24:84","subExpression":{"baseExpression":{"id":21713,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21603,"src":"7830:6:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21715,"indexExpression":{"id":21714,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21653,"src":"7837:15:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7830:23:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":21717,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7828:26:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7855:9:84","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":15227,"src":"7828:36:84","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":21719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7828:38:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21720,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21608,"src":"7888:6:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21705,"name":"_querySwapSingleTokenExactOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21524,"src":"7652:29:84","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10558_$_t_contract$_IERC20_$10558_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,contract IERC20,contract IERC20,uint256,address) returns (uint256)"}},"id":21721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7652:260:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7637:275:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21723,"nodeType":"ExpressionStatement","src":"7637:275:84"}]},"id":21725,"nodeType":"IfStatement","src":"7005:922:84","trueBody":{"id":21695,"nodeType":"Block","src":"7079:419:84","statements":[{"expression":{"id":21671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21669,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21653,"src":"7097:15:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21670,"name":"minPositiveDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21641,"src":"7115:21:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7097:39:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21672,"nodeType":"ExpressionStatement","src":"7097:39:84"},{"expression":{"id":21675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21673,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21656,"src":"7154:16:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21674,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21614,"src":"7173:21:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7154:40:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21676,"nodeType":"ExpressionStatement","src":"7154:40:84"},{"expression":{"id":21693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21677,"name":"resultAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21659,"src":"7212:12:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":21679,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21600,"src":"7277:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":21680,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21621,"src":"7303:10:84","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":21682,"indexExpression":{"id":21681,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21653,"src":"7314:15:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7303:27:84","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"baseExpression":{"id":21683,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21621,"src":"7352:10:84","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":21685,"indexExpression":{"id":21684,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21656,"src":"7363:16:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7352:28:84","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":21686,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21603,"src":"7402:6:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21688,"indexExpression":{"id":21687,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21653,"src":"7409:15:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7402:23:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7426:9:84","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":15227,"src":"7402:33:84","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":21690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7402:35:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21691,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21608,"src":"7459:6:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21678,"name":"_querySwapSingleTokenExactIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21481,"src":"7227:28:84","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10558_$_t_contract$_IERC20_$10558_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,contract IERC20,contract IERC20,uint256,address) returns (uint256)"}},"id":21692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7227:256:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7212:271:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21694,"nodeType":"ExpressionStatement","src":"7212:271:84"}]}},{"expression":{"id":21730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21726,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21603,"src":"7984:6:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21728,"indexExpression":{"id":21727,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21653,"src":"7991:15:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7984:23:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":21729,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8010:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7984:27:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21731,"nodeType":"ExpressionStatement","src":"7984:27:84"},{"expression":{"id":21736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21732,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21606,"src":"8025:9:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21734,"indexExpression":{"id":21733,"name":"givenTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21653,"src":"8035:15:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8025:26:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":21735,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8054:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8025:30:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21737,"nodeType":"ExpressionStatement","src":"8025:30:84"},{"expression":{"id":21744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21738,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21603,"src":"8069:6:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21740,"indexExpression":{"id":21739,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21656,"src":"8076:16:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8069:24:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":21741,"name":"resultAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21659,"src":"8097:12:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8110:8:84","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":16063,"src":"8097:21:84","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":21743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8097:23:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"8069:51:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21745,"nodeType":"ExpressionStatement","src":"8069:51:84"},{"expression":{"id":21755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21746,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21606,"src":"8134:9:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21748,"indexExpression":{"id":21747,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21656,"src":"8144:16:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8134:27:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":21750,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21600,"src":"8224:4:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21751,"name":"resultTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21656,"src":"8246:16:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21752,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21603,"src":"8280:6:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":21753,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21608,"src":"8304:6:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21749,"name":"_queryAddLiquidityUnbalancedForTokenDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21598,"src":"8164:42:84","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_int256_$","typeString":"function (address,uint256,int256[] memory,address) returns (int256)"}},"id":21754,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8164:160:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"8134:190:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21756,"nodeType":"ExpressionStatement","src":"8134:190:84"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21631,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21628,"src":"6645:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21632,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21603,"src":"6649:6:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6656:6:84","memberName":"length","nodeType":"MemberAccess","src":"6649:13:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":21634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6665:1:84","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6649:17:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6645:21:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21758,"initializationExpression":{"assignments":[21628],"declarations":[{"constant":false,"id":21628,"mutability":"mutable","name":"i","nameLocation":"6638:1:84","nodeType":"VariableDeclaration","scope":21758,"src":"6630:9:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21627,"name":"uint256","nodeType":"ElementaryTypeName","src":"6630:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21630,"initialValue":{"hexValue":"30","id":21629,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6642:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6630:13:84"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"6668:3:84","subExpression":{"id":21637,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21628,"src":"6668:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21639,"nodeType":"ExpressionStatement","src":"6668:3:84"},"nodeType":"ForStatement","src":"6625:1710:84"},{"expression":{"id":21759,"name":"maxNegativeDeltaIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21614,"src":"8352:21:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21612,"id":21760,"nodeType":"Return","src":"8345:28:84"}]},"id":21762,"implemented":true,"kind":"function","modifiers":[],"name":"_zeroOutDeltas","nameLocation":"6274:14:84","nodeType":"FunctionDefinition","parameters":{"id":21609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21600,"mutability":"mutable","name":"pool","nameLocation":"6306:4:84","nodeType":"VariableDeclaration","scope":21762,"src":"6298:12:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21599,"name":"address","nodeType":"ElementaryTypeName","src":"6298:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21603,"mutability":"mutable","name":"deltas","nameLocation":"6336:6:84","nodeType":"VariableDeclaration","scope":21762,"src":"6320:22:84","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21601,"name":"int256","nodeType":"ElementaryTypeName","src":"6320:6:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21602,"nodeType":"ArrayTypeName","src":"6320:8:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":21606,"mutability":"mutable","name":"deltaBPTs","nameLocation":"6368:9:84","nodeType":"VariableDeclaration","scope":21762,"src":"6352:25:84","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21604,"name":"int256","nodeType":"ElementaryTypeName","src":"6352:6:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21605,"nodeType":"ArrayTypeName","src":"6352:8:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":21608,"mutability":"mutable","name":"sender","nameLocation":"6395:6:84","nodeType":"VariableDeclaration","scope":21762,"src":"6387:14:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21607,"name":"address","nodeType":"ElementaryTypeName","src":"6387:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6288:119:84"},"returnParameters":{"id":21612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21611,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21762,"src":"6426:7:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21610,"name":"uint256","nodeType":"ElementaryTypeName","src":"6426:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6425:9:84"},"scope":21869,"src":"6265:2115:84","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21814,"nodeType":"Block","src":"8576:232:84","statements":[{"assignments":[21771],"declarations":[{"constant":false,"id":21771,"mutability":"mutable","name":"min","nameLocation":"8593:3:84","nodeType":"VariableDeclaration","scope":21814,"src":"8586:10:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":21770,"name":"int256","nodeType":"ElementaryTypeName","src":"8586:6:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":21777,"initialValue":{"expression":{"arguments":[{"id":21774,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8604:6:84","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":21773,"name":"int256","nodeType":"ElementaryTypeName","src":"8604:6:84","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":21772,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8599:4:84","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":21775,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8599:12:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":21776,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8612:3:84","memberName":"max","nodeType":"MemberAccess","src":"8599:16:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"8586:29:84"},{"body":{"id":21812,"nodeType":"Block","src":"8668:134:84","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":21789,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21765,"src":"8686:5:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21791,"indexExpression":{"id":21790,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21779,"src":"8692:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8686:8:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":21792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8697:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8686:12:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":21794,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21765,"src":"8702:5:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21796,"indexExpression":{"id":21795,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21779,"src":"8708:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8702:8:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":21797,"name":"min","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21771,"src":"8713:3:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"8702:14:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8686:30:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21811,"nodeType":"IfStatement","src":"8682:110:84","trueBody":{"id":21810,"nodeType":"Block","src":"8718:74:84","statements":[{"expression":{"id":21804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21800,"name":"min","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21771,"src":"8736:3:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":21801,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21765,"src":"8742:5:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21803,"indexExpression":{"id":21802,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21779,"src":"8748:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8742:8:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"8736:14:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21805,"nodeType":"ExpressionStatement","src":"8736:14:84"},{"expression":{"id":21808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21806,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21768,"src":"8768:5:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21807,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21779,"src":"8776:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8768:9:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21809,"nodeType":"ExpressionStatement","src":"8768:9:84"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21782,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21779,"src":"8645:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":21783,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21765,"src":"8649:5:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8655:6:84","memberName":"length","nodeType":"MemberAccess","src":"8649:12:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8645:16:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21813,"initializationExpression":{"assignments":[21779],"declarations":[{"constant":false,"id":21779,"mutability":"mutable","name":"i","nameLocation":"8638:1:84","nodeType":"VariableDeclaration","scope":21813,"src":"8630:9:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21778,"name":"uint256","nodeType":"ElementaryTypeName","src":"8630:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21781,"initialValue":{"hexValue":"30","id":21780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8642:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8630:13:84"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8663:3:84","subExpression":{"id":21786,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21779,"src":"8663:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21788,"nodeType":"ExpressionStatement","src":"8663:3:84"},"nodeType":"ForStatement","src":"8625:177:84"}]},"id":21815,"implemented":true,"kind":"function","modifiers":[],"name":"_minPositiveIndex","nameLocation":"8497:17:84","nodeType":"FunctionDefinition","parameters":{"id":21766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21765,"mutability":"mutable","name":"array","nameLocation":"8531:5:84","nodeType":"VariableDeclaration","scope":21815,"src":"8515:21:84","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21763,"name":"int256","nodeType":"ElementaryTypeName","src":"8515:6:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21764,"nodeType":"ArrayTypeName","src":"8515:8:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"8514:23:84"},"returnParameters":{"id":21769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21768,"mutability":"mutable","name":"index","nameLocation":"8569:5:84","nodeType":"VariableDeclaration","scope":21815,"src":"8561:13:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21767,"name":"uint256","nodeType":"ElementaryTypeName","src":"8561:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8560:15:84"},"scope":21869,"src":"8488:320:84","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":21867,"nodeType":"Block","src":"9003:232:84","statements":[{"assignments":[21824],"declarations":[{"constant":false,"id":21824,"mutability":"mutable","name":"max","nameLocation":"9020:3:84","nodeType":"VariableDeclaration","scope":21867,"src":"9013:10:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":21823,"name":"int256","nodeType":"ElementaryTypeName","src":"9013:6:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":21830,"initialValue":{"expression":{"arguments":[{"id":21827,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9031:6:84","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":21826,"name":"int256","nodeType":"ElementaryTypeName","src":"9031:6:84","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":21825,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9026:4:84","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":21828,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9026:12:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":21829,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9039:3:84","memberName":"min","nodeType":"MemberAccess","src":"9026:16:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"9013:29:84"},{"body":{"id":21865,"nodeType":"Block","src":"9095:134:84","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":21842,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21818,"src":"9113:5:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21844,"indexExpression":{"id":21843,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21832,"src":"9119:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9113:8:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":21845,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9124:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9113:12:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":21851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":21847,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21818,"src":"9129:5:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21849,"indexExpression":{"id":21848,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21832,"src":"9135:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9129:8:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":21850,"name":"max","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21824,"src":"9140:3:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9129:14:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9113:30:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21864,"nodeType":"IfStatement","src":"9109:110:84","trueBody":{"id":21863,"nodeType":"Block","src":"9145:74:84","statements":[{"expression":{"id":21857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21853,"name":"max","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21824,"src":"9163:3:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":21854,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21818,"src":"9169:5:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21856,"indexExpression":{"id":21855,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21832,"src":"9175:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9169:8:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9163:14:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21858,"nodeType":"ExpressionStatement","src":"9163:14:84"},{"expression":{"id":21861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21859,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21821,"src":"9195:5:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21860,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21832,"src":"9203:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9195:9:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21862,"nodeType":"ExpressionStatement","src":"9195:9:84"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21835,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21832,"src":"9072:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":21836,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21818,"src":"9076:5:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},"id":21837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9082:6:84","memberName":"length","nodeType":"MemberAccess","src":"9076:12:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9072:16:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21866,"initializationExpression":{"assignments":[21832],"declarations":[{"constant":false,"id":21832,"mutability":"mutable","name":"i","nameLocation":"9065:1:84","nodeType":"VariableDeclaration","scope":21866,"src":"9057:9:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21831,"name":"uint256","nodeType":"ElementaryTypeName","src":"9057:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21834,"initialValue":{"hexValue":"30","id":21833,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9069:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9057:13:84"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"9090:3:84","subExpression":{"id":21839,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21832,"src":"9090:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21841,"nodeType":"ExpressionStatement","src":"9090:3:84"},"nodeType":"ForStatement","src":"9052:177:84"}]},"id":21868,"implemented":true,"kind":"function","modifiers":[],"name":"_maxNegativeIndex","nameLocation":"8924:17:84","nodeType":"FunctionDefinition","parameters":{"id":21819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21818,"mutability":"mutable","name":"array","nameLocation":"8958:5:84","nodeType":"VariableDeclaration","scope":21868,"src":"8942:21:84","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":21816,"name":"int256","nodeType":"ElementaryTypeName","src":"8942:6:84","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":21817,"nodeType":"ArrayTypeName","src":"8942:8:84","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"8941:23:84"},"returnParameters":{"id":21822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21821,"mutability":"mutable","name":"index","nameLocation":"8996:5:84","nodeType":"VariableDeclaration","scope":21868,"src":"8988:13:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21820,"name":"uint256","nodeType":"ElementaryTypeName","src":"8988:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8987:15:84"},"scope":21869,"src":"8915:320:84","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":21870,"src":"537:8700:84","usedErrors":[4859,4862,11058,12361,14324,14336,18517],"usedEvents":[]}],"src":"46:9192:84"},"id":84},"contracts/ProtocolFeeHelper.sol":{"ast":{"absolutePath":"contracts/ProtocolFeeHelper.sol","exportedSymbols":{"IProtocolFeeController":[1955],"IProtocolFeeHelper":[968],"IVault":[2527],"PoolHelperCommon":[21041],"ProtocolFeeHelper":[21946]},"id":21947,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":21871,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:85"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol","id":21873,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21947,"sourceUnit":969,"src":"72:116:85","symbolAliases":[{"foreign":{"id":21872,"name":"IProtocolFeeHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":968,"src":"81:18:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":21875,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21947,"sourceUnit":1956,"src":"189:113:85","symbolAliases":[{"foreign":{"id":21874,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"198:22:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":21877,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21947,"sourceUnit":2528,"src":"303:81:85","symbolAliases":[{"foreign":{"id":21876,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"312:6:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/PoolHelperCommon.sol","file":"./PoolHelperCommon.sol","id":21879,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21947,"sourceUnit":21042,"src":"386:58:85","symbolAliases":[{"foreign":{"id":21878,"name":"PoolHelperCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21041,"src":"395:16:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":21880,"name":"IProtocolFeeHelper","nameLocations":["476:18:85"],"nodeType":"IdentifierPath","referencedDeclaration":968,"src":"476:18:85"},"id":21881,"nodeType":"InheritanceSpecifier","src":"476:18:85"},{"baseName":{"id":21882,"name":"PoolHelperCommon","nameLocations":["496:16:85"],"nodeType":"IdentifierPath","referencedDeclaration":21041,"src":"496:16:85"},"id":21883,"nodeType":"InheritanceSpecifier","src":"496:16:85"}],"canonicalName":"ProtocolFeeHelper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":21946,"linearizedBaseContracts":[21946,21041,20312,4367,14,9554,9468,12348,865,968],"name":"ProtocolFeeHelper","nameLocation":"455:17:85","nodeType":"ContractDefinition","nodes":[{"body":{"id":21895,"nodeType":"Block","src":"605:64:85","statements":[]},"id":21896,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":21891,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21886,"src":"584:5:85","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},{"id":21892,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21888,"src":"591:12:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21893,"kind":"baseConstructorSpecifier","modifierName":{"id":21890,"name":"PoolHelperCommon","nameLocations":["567:16:85"],"nodeType":"IdentifierPath","referencedDeclaration":21041,"src":"567:16:85"},"nodeType":"ModifierInvocation","src":"567:37:85"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":21889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21886,"mutability":"mutable","name":"vault","nameLocation":"538:5:85","nodeType":"VariableDeclaration","scope":21896,"src":"531:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":21885,"nodeType":"UserDefinedTypeName","pathNode":{"id":21884,"name":"IVault","nameLocations":["531:6:85"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"531:6:85"},"referencedDeclaration":2527,"src":"531:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":21888,"mutability":"mutable","name":"initialOwner","nameLocation":"553:12:85","nodeType":"VariableDeclaration","scope":21896,"src":"545:20:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21887,"name":"address","nodeType":"ElementaryTypeName","src":"545:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"530:36:85"},"returnParameters":{"id":21894,"nodeType":"ParameterList","parameters":[],"src":"605:0:85"},"scope":21946,"src":"519:150:85","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[959],"body":{"id":21914,"nodeType":"Block","src":"1076:109:85","statements":[{"expression":{"arguments":[{"id":21910,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21899,"src":"1143:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21911,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21901,"src":"1149:28:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":21907,"name":"_getProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21945,"src":"1086:25:85","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view returns (contract IProtocolFeeController)"}},"id":21908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1086:27:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":21909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1114:28:85","memberName":"setProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1897,"src":"1086:56:85","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":21912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1086:92:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21913,"nodeType":"ExpressionStatement","src":"1086:92:85"}]},"documentation":{"id":21897,"nodeType":"StructuredDocumentation","src":"887:34:85","text":"@inheritdoc IProtocolFeeHelper"},"functionSelector":"fd267f39","id":21915,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":21904,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21899,"src":"1070:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21905,"kind":"modifierInvocation","modifierName":{"id":21903,"name":"withValidPoolForSender","nameLocations":["1047:22:85"],"nodeType":"IdentifierPath","referencedDeclaration":20374,"src":"1047:22:85"},"nodeType":"ModifierInvocation","src":"1047:28:85"}],"name":"setProtocolSwapFeePercentage","nameLocation":"935:28:85","nodeType":"FunctionDefinition","parameters":{"id":21902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21899,"mutability":"mutable","name":"pool","nameLocation":"981:4:85","nodeType":"VariableDeclaration","scope":21915,"src":"973:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21898,"name":"address","nodeType":"ElementaryTypeName","src":"973:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21901,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"1003:28:85","nodeType":"VariableDeclaration","scope":21915,"src":"995:36:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21900,"name":"uint256","nodeType":"ElementaryTypeName","src":"995:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"963:74:85"},"returnParameters":{"id":21906,"nodeType":"ParameterList","parameters":[],"src":"1076:0:85"},"scope":21946,"src":"926:259:85","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[967],"body":{"id":21933,"nodeType":"Block","src":"1382:111:85","statements":[{"expression":{"arguments":[{"id":21929,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21918,"src":"1450:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21930,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21920,"src":"1456:29:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":21926,"name":"_getProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21945,"src":"1392:25:85","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view returns (contract IProtocolFeeController)"}},"id":21927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1392:27:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":21928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1420:29:85","memberName":"setProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1905,"src":"1392:57:85","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":21931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1392:94:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21932,"nodeType":"ExpressionStatement","src":"1392:94:85"}]},"documentation":{"id":21916,"nodeType":"StructuredDocumentation","src":"1191:34:85","text":"@inheritdoc IProtocolFeeHelper"},"functionSelector":"abaa3356","id":21934,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":21923,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21918,"src":"1376:4:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21924,"kind":"modifierInvocation","modifierName":{"id":21922,"name":"withValidPoolForSender","nameLocations":["1353:22:85"],"nodeType":"IdentifierPath","referencedDeclaration":20374,"src":"1353:22:85"},"nodeType":"ModifierInvocation","src":"1353:28:85"}],"name":"setProtocolYieldFeePercentage","nameLocation":"1239:29:85","nodeType":"FunctionDefinition","parameters":{"id":21921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21918,"mutability":"mutable","name":"pool","nameLocation":"1286:4:85","nodeType":"VariableDeclaration","scope":21934,"src":"1278:12:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21917,"name":"address","nodeType":"ElementaryTypeName","src":"1278:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21920,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"1308:29:85","nodeType":"VariableDeclaration","scope":21934,"src":"1300:37:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21919,"name":"uint256","nodeType":"ElementaryTypeName","src":"1300:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1268:75:85"},"returnParameters":{"id":21925,"nodeType":"ParameterList","parameters":[],"src":"1382:0:85"},"scope":21946,"src":"1230:263:85","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":21944,"nodeType":"Block","src":"1925:56:85","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":21940,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20200,"src":"1942:5:85","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":21941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1948:24:85","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":3776,"src":"1942:30:85","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":21942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1942:32:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"functionReturnParameters":21939,"id":21943,"nodeType":"Return","src":"1935:39:85"}]},"id":21945,"implemented":true,"kind":"function","modifiers":[],"name":"_getProtocolFeeController","nameLocation":"1850:25:85","nodeType":"FunctionDefinition","parameters":{"id":21935,"nodeType":"ParameterList","parameters":[],"src":"1875:2:85"},"returnParameters":{"id":21939,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21938,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21945,"src":"1901:22:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":21937,"nodeType":"UserDefinedTypeName","pathNode":{"id":21936,"name":"IProtocolFeeController","nameLocations":["1901:22:85"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"1901:22:85"},"referencedDeclaration":1955,"src":"1901:22:85","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"1900:24:85"},"scope":21946,"src":"1841:140:85","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":21947,"src":"446:1537:85","usedErrors":[5,711,718,723,726,731,734,739,2839,9334,9339,20197],"usedEvents":[674,681,688,695,704,9345,9483]}],"src":"46:1938:85"},"id":85},"contracts/ProtocolFeePercentagesProvider.sol":{"ast":{"absolutePath":"contracts/ProtocolFeePercentagesProvider.sol","exportedSymbols":{"ContractType":[43],"FEE_SCALING_FACTOR":[4284],"IBalancerContractRegistry":[212],"IBasePoolFactory":[1415],"IProtocolFeeController":[1955],"IProtocolFeePercentagesProvider":[2034],"IVault":[2527],"IVaultErrors":[3184],"ProtocolFeeController":[9212],"ProtocolFeePercentagesProvider":[22309],"SafeCast":[16074],"SingletonAuthentication":[9271]},"id":22310,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":21948,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:86"},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":21950,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22310,"sourceUnit":16075,"src":"72:75:86","symbolAliases":[{"foreign":{"id":21949,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16074,"src":"81:8:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":21952,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22310,"sourceUnit":1956,"src":"149:113:86","symbolAliases":[{"foreign":{"id":21951,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"158:22:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","id":21954,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22310,"sourceUnit":1416,"src":"263:101:86","symbolAliases":[{"foreign":{"id":21953,"name":"IBasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1415,"src":"272:16:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":21956,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22310,"sourceUnit":4288,"src":"365:97:86","symbolAliases":[{"foreign":{"id":21955,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4284,"src":"374:18:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol","id":21958,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22310,"sourceUnit":2035,"src":"463:135:86","symbolAliases":[{"foreign":{"id":21957,"name":"IProtocolFeePercentagesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2034,"src":"476:31:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","id":21961,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22310,"sourceUnit":213,"src":"599:152:86","symbolAliases":[{"foreign":{"id":21959,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":212,"src":"612:25:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":21960,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43,"src":"643:12:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":21963,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22310,"sourceUnit":3185,"src":"752:93:86","symbolAliases":[{"foreign":{"id":21962,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3184,"src":"761:12:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":21965,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22310,"sourceUnit":2528,"src":"846:81:86","symbolAliases":[{"foreign":{"id":21964,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"855:6:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":21967,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22310,"sourceUnit":9272,"src":"929:104:86","symbolAliases":[{"foreign":{"id":21966,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9271,"src":"938:23:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","file":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","id":21969,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22310,"sourceUnit":9213,"src":"1034:100:86","symbolAliases":[{"foreign":{"id":21968,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9212,"src":"1043:21:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":21970,"name":"IProtocolFeePercentagesProvider","nameLocations":["1179:31:86"],"nodeType":"IdentifierPath","referencedDeclaration":2034,"src":"1179:31:86"},"id":21971,"nodeType":"InheritanceSpecifier","src":"1179:31:86"},{"baseName":{"id":21972,"name":"SingletonAuthentication","nameLocations":["1212:23:86"],"nodeType":"IdentifierPath","referencedDeclaration":9271,"src":"1212:23:86"},"id":21973,"nodeType":"InheritanceSpecifier","src":"1212:23:86"}],"canonicalName":"ProtocolFeePercentagesProvider","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":22309,"linearizedBaseContracts":[22309,9271,7517,4367,14,2034],"name":"ProtocolFeePercentagesProvider","nameLocation":"1145:30:86","nodeType":"ContractDefinition","nodes":[{"global":false,"id":21976,"libraryName":{"id":21974,"name":"SafeCast","nameLocations":["1248:8:86"],"nodeType":"IdentifierPath","referencedDeclaration":16074,"src":"1248:8:86"},"nodeType":"UsingForDirective","src":"1242:27:86","typeName":{"id":21975,"name":"uint256","nodeType":"ElementaryTypeName","src":"1261:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"canonicalName":"ProtocolFeePercentagesProvider.FactoryProtocolFees","documentation":{"id":21977,"nodeType":"StructuredDocumentation","src":"1275:425:86","text":" @dev Data structure to store default protocol fees by factory. Fee percentages are 18-decimal floating point\n numbers, so we know they fit in 64 bits, allowing the fees to be stored in a single slot.\n @param protocolSwapFee The protocol swap fee\n @param protocolYieldFee The protocol yield fee\n @param areFactoryFeesSet Flag indicating fees have been set (allows zero values)"},"id":21984,"members":[{"constant":false,"id":21979,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"1749:25:86","nodeType":"VariableDeclaration","scope":21984,"src":"1742:32:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":21978,"name":"uint64","nodeType":"ElementaryTypeName","src":"1742:6:86","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":21981,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"1791:26:86","nodeType":"VariableDeclaration","scope":21984,"src":"1784:33:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":21980,"name":"uint64","nodeType":"ElementaryTypeName","src":"1784:6:86","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":21983,"mutability":"mutable","name":"areFactoryFeesSet","nameLocation":"1832:17:86","nodeType":"VariableDeclaration","scope":21984,"src":"1827:22:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21982,"name":"bool","nodeType":"ElementaryTypeName","src":"1827:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"FactoryProtocolFees","nameLocation":"1712:19:86","nodeType":"StructDefinition","scope":22309,"src":"1705:151:86","visibility":"public"},{"constant":false,"id":21987,"mutability":"immutable","name":"_trustedContractRegistry","nameLocation":"1906:24:86","nodeType":"VariableDeclaration","scope":22309,"src":"1862:68:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":21986,"nodeType":"UserDefinedTypeName","pathNode":{"id":21985,"name":"IBalancerContractRegistry","nameLocations":["1862:25:86"],"nodeType":"IdentifierPath","referencedDeclaration":212,"src":"1862:25:86"},"referencedDeclaration":212,"src":"1862:25:86","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"visibility":"private"},{"constant":false,"id":21990,"mutability":"immutable","name":"_protocolFeeController","nameLocation":"1977:22:86","nodeType":"VariableDeclaration","scope":22309,"src":"1936:63:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":21989,"nodeType":"UserDefinedTypeName","pathNode":{"id":21988,"name":"IProtocolFeeController","nameLocations":["1936:22:86"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"1936:22:86"},"referencedDeclaration":1955,"src":"1936:22:86","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"private"},{"constant":false,"id":21992,"mutability":"immutable","name":"_maxProtocolSwapFeePercentage","nameLocation":"2032:29:86","nodeType":"VariableDeclaration","scope":22309,"src":"2006:55:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21991,"name":"uint256","nodeType":"ElementaryTypeName","src":"2006:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":21994,"mutability":"immutable","name":"_maxProtocolYieldFeePercentage","nameLocation":"2093:30:86","nodeType":"VariableDeclaration","scope":22309,"src":"2067:56:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21993,"name":"uint256","nodeType":"ElementaryTypeName","src":"2067:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":22000,"mutability":"mutable","name":"_factoryDefaultFeePercentages","nameLocation":"2233:29:86","nodeType":"VariableDeclaration","scope":22309,"src":"2176:86:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IBasePoolFactory_$1415_$_t_struct$_FactoryProtocolFees_$21984_storage_$","typeString":"mapping(contract IBasePoolFactory => struct ProtocolFeePercentagesProvider.FactoryProtocolFees)"},"typeName":{"id":21999,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":21996,"nodeType":"UserDefinedTypeName","pathNode":{"id":21995,"name":"IBasePoolFactory","nameLocations":["2184:16:86"],"nodeType":"IdentifierPath","referencedDeclaration":1415,"src":"2184:16:86"},"referencedDeclaration":1415,"src":"2184:16:86","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePoolFactory_$1415","typeString":"contract IBasePoolFactory"}},"nodeType":"Mapping","src":"2176:48:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IBasePoolFactory_$1415_$_t_struct$_FactoryProtocolFees_$21984_storage_$","typeString":"mapping(contract IBasePoolFactory => struct ProtocolFeePercentagesProvider.FactoryProtocolFees)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":21998,"nodeType":"UserDefinedTypeName","pathNode":{"id":21997,"name":"FactoryProtocolFees","nameLocations":["2204:19:86"],"nodeType":"IdentifierPath","referencedDeclaration":21984,"src":"2204:19:86"},"referencedDeclaration":21984,"src":"2204:19:86","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_storage_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"}}},"visibility":"private"},{"body":{"id":22049,"nodeType":"Block","src":"2377:576:86","statements":[{"assignments":[22014],"declarations":[{"constant":false,"id":22014,"mutability":"mutable","name":"protocolFeeController","nameLocation":"2410:21:86","nodeType":"VariableDeclaration","scope":22049,"src":"2387:44:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":22013,"nodeType":"UserDefinedTypeName","pathNode":{"id":22012,"name":"IProtocolFeeController","nameLocations":["2387:22:86"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"2387:22:86"},"referencedDeclaration":1955,"src":"2387:22:86","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"id":22018,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22015,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22003,"src":"2434:5:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":22016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2440:24:86","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":3776,"src":"2434:30:86","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":22017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2434:32:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"nodeType":"VariableDeclarationStatement","src":"2387:79:86"},{"expression":{"id":22021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22019,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21990,"src":"2477:22:86","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22020,"name":"protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22014,"src":"2502:21:86","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"src":"2477:46:86","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":22022,"nodeType":"ExpressionStatement","src":"2477:46:86"},{"expression":{"id":22025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22023,"name":"_trustedContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21987,"src":"2533:24:86","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22024,"name":"trustedContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22006,"src":"2560:23:86","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"src":"2533:50:86","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"id":22026,"nodeType":"ExpressionStatement","src":"2533:50:86"},{"expression":{"id":22036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22027,"name":"_maxProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21992,"src":"2668:29:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":22031,"name":"protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22014,"src":"2730:21:86","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}],"id":22030,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2722:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22029,"name":"address","nodeType":"ElementaryTypeName","src":"2722:7:86","typeDescriptions":{}}},"id":22032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2722:30:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22028,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9212,"src":"2700:21:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$9212_$","typeString":"type(contract ProtocolFeeController)"}},"id":22033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2700:53:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$9212","typeString":"contract ProtocolFeeController"}},"id":22034,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2767:32:86","memberName":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nodeType":"MemberAccess","referencedDeclaration":7573,"src":"2700:99:86","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":22035,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2700:101:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2668:133:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22037,"nodeType":"ExpressionStatement","src":"2668:133:86"},{"expression":{"id":22047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22038,"name":"_maxProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"2811:30:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":22042,"name":"protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22014,"src":"2874:21:86","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}],"id":22041,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2866:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22040,"name":"address","nodeType":"ElementaryTypeName","src":"2866:7:86","typeDescriptions":{}}},"id":22043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2866:30:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22039,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9212,"src":"2844:21:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$9212_$","typeString":"type(contract ProtocolFeeController)"}},"id":22044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2844:53:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$9212","typeString":"contract ProtocolFeeController"}},"id":22045,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2911:33:86","memberName":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nodeType":"MemberAccess","referencedDeclaration":7576,"src":"2844:100:86","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":22046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2844:102:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2811:135:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22048,"nodeType":"ExpressionStatement","src":"2811:135:86"}]},"id":22050,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":22009,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22003,"src":"2370:5:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}}],"id":22010,"kind":"baseConstructorSpecifier","modifierName":{"id":22008,"name":"SingletonAuthentication","nameLocations":["2346:23:86"],"nodeType":"IdentifierPath","referencedDeclaration":9271,"src":"2346:23:86"},"nodeType":"ModifierInvocation","src":"2346:30:86"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22003,"mutability":"mutable","name":"vault","nameLocation":"2288:5:86","nodeType":"VariableDeclaration","scope":22050,"src":"2281:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":22002,"nodeType":"UserDefinedTypeName","pathNode":{"id":22001,"name":"IVault","nameLocations":["2281:6:86"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"2281:6:86"},"referencedDeclaration":2527,"src":"2281:6:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":22006,"mutability":"mutable","name":"trustedContractRegistry","nameLocation":"2321:23:86","nodeType":"VariableDeclaration","scope":22050,"src":"2295:49:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":22005,"nodeType":"UserDefinedTypeName","pathNode":{"id":22004,"name":"IBalancerContractRegistry","nameLocations":["2295:25:86"],"nodeType":"IdentifierPath","referencedDeclaration":212,"src":"2295:25:86"},"referencedDeclaration":212,"src":"2295:25:86","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"visibility":"internal"}],"src":"2280:65:86"},"returnParameters":{"id":22011,"nodeType":"ParameterList","parameters":[],"src":"2377:0:86"},"scope":22309,"src":"2269:684:86","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1997],"body":{"id":22059,"nodeType":"Block","src":"3094:46:86","statements":[{"expression":{"id":22057,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21990,"src":"3111:22:86","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"functionReturnParameters":22056,"id":22058,"nodeType":"Return","src":"3104:29:86"}]},"documentation":{"id":22051,"nodeType":"StructuredDocumentation","src":"2959:47:86","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"85f2dbd4","id":22060,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"3020:24:86","nodeType":"FunctionDefinition","parameters":{"id":22052,"nodeType":"ParameterList","parameters":[],"src":"3044:2:86"},"returnParameters":{"id":22056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22055,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22060,"src":"3070:22:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":22054,"nodeType":"UserDefinedTypeName","pathNode":{"id":22053,"name":"IProtocolFeeController","nameLocations":["3070:22:86"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"3070:22:86"},"referencedDeclaration":1955,"src":"3070:22:86","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"3069:24:86"},"scope":22309,"src":"3011:129:86","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2004],"body":{"id":22069,"nodeType":"Block","src":"3287:48:86","statements":[{"expression":{"id":22067,"name":"_trustedContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21987,"src":"3304:24:86","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"functionReturnParameters":22066,"id":22068,"nodeType":"Return","src":"3297:31:86"}]},"documentation":{"id":22061,"nodeType":"StructuredDocumentation","src":"3146:47:86","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"deb27a7a","id":22070,"implemented":true,"kind":"function","modifiers":[],"name":"getBalancerContractRegistry","nameLocation":"3207:27:86","nodeType":"FunctionDefinition","parameters":{"id":22062,"nodeType":"ParameterList","parameters":[],"src":"3234:2:86"},"returnParameters":{"id":22066,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22065,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22070,"src":"3260:25:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":22064,"nodeType":"UserDefinedTypeName","pathNode":{"id":22063,"name":"IBalancerContractRegistry","nameLocations":["3260:25:86"],"nodeType":"IdentifierPath","referencedDeclaration":212,"src":"3260:25:86"},"referencedDeclaration":212,"src":"3260:25:86","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"visibility":"internal"}],"src":"3259:27:86"},"scope":22309,"src":"3198:137:86","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2014],"body":{"id":22097,"nodeType":"Block","src":"3568:245:86","statements":[{"assignments":[22082],"declarations":[{"constant":false,"id":22082,"mutability":"mutable","name":"factoryFees","nameLocation":"3605:11:86","nodeType":"VariableDeclaration","scope":22097,"src":"3578:38:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"},"typeName":{"id":22081,"nodeType":"UserDefinedTypeName","pathNode":{"id":22080,"name":"FactoryProtocolFees","nameLocations":["3578:19:86"],"nodeType":"IdentifierPath","referencedDeclaration":21984,"src":"3578:19:86"},"referencedDeclaration":21984,"src":"3578:19:86","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_storage_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"}},"visibility":"internal"}],"id":22086,"initialValue":{"arguments":[{"id":22084,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22073,"src":"3645:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22083,"name":"_getValidatedProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22261,"src":"3619:25:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_struct$_FactoryProtocolFees_$21984_memory_ptr_$","typeString":"function (address) view returns (struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory)"}},"id":22085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3619:34:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"nodeType":"VariableDeclarationStatement","src":"3578:75:86"},{"expression":{"id":22090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22087,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22076,"src":"3664:25:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":22088,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22082,"src":"3692:11:86","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":22089,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3704:25:86","memberName":"protocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":21979,"src":"3692:37:86","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"3664:65:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22091,"nodeType":"ExpressionStatement","src":"3664:65:86"},{"expression":{"id":22095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22092,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22078,"src":"3739:26:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":22093,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22082,"src":"3768:11:86","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":22094,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3780:26:86","memberName":"protocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":21981,"src":"3768:38:86","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"3739:67:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22096,"nodeType":"ExpressionStatement","src":"3739:67:86"}]},"documentation":{"id":22071,"nodeType":"StructuredDocumentation","src":"3341:47:86","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"f2c24ec8","id":22098,"implemented":true,"kind":"function","modifiers":[],"name":"getFactorySpecificProtocolFeePercentages","nameLocation":"3402:40:86","nodeType":"FunctionDefinition","parameters":{"id":22074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22073,"mutability":"mutable","name":"factory","nameLocation":"3460:7:86","nodeType":"VariableDeclaration","scope":22098,"src":"3452:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22072,"name":"address","nodeType":"ElementaryTypeName","src":"3452:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3442:31:86"},"returnParameters":{"id":22079,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22076,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"3505:25:86","nodeType":"VariableDeclaration","scope":22098,"src":"3497:33:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22075,"name":"uint256","nodeType":"ElementaryTypeName","src":"3497:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22078,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"3540:26:86","nodeType":"VariableDeclaration","scope":22098,"src":"3532:34:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22077,"name":"uint256","nodeType":"ElementaryTypeName","src":"3532:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3496:71:86"},"scope":22309,"src":"3393:420:86","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2024],"body":{"id":22174,"nodeType":"Block","src":"4061:1303:86","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22110,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22103,"src":"4180:25:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":22111,"name":"_maxProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21992,"src":"4208:29:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4180:57:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22119,"nodeType":"IfStatement","src":"4176:152:86","trueBody":{"id":22118,"nodeType":"Block","src":"4239:89:86","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22113,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"4260:22:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$1955_$","typeString":"type(contract IProtocolFeeController)"}},"id":22115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4283:32:86","memberName":"ProtocolSwapFeePercentageTooHigh","nodeType":"MemberAccess","referencedDeclaration":1736,"src":"4260:55:86","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4260:57:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22117,"nodeType":"RevertStatement","src":"4253:64:86"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22120,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22105,"src":"4342:26:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":22121,"name":"_maxProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21994,"src":"4371:30:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4342:59:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22129,"nodeType":"IfStatement","src":"4338:155:86","trueBody":{"id":22128,"nodeType":"Block","src":"4403:90:86","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22123,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"4424:22:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$1955_$","typeString":"type(contract IProtocolFeeController)"}},"id":22125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4447:33:86","memberName":"ProtocolYieldFeePercentageTooHigh","nodeType":"MemberAccess","referencedDeclaration":1739,"src":"4424:56:86","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4424:58:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22127,"nodeType":"RevertStatement","src":"4417:65:86"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":22132,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43,"src":"4597:12:86","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ContractType_$43_$","typeString":"type(enum ContractType)"}},"id":22133,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4610:12:86","memberName":"POOL_FACTORY","nodeType":"MemberAccess","referencedDeclaration":39,"src":"4597:25:86","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"}},{"id":22134,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22101,"src":"4624:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$43","typeString":"enum ContractType"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22130,"name":"_trustedContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21987,"src":"4547:24:86","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$212","typeString":"contract IBalancerContractRegistry"}},"id":22131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4572:24:86","memberName":"isActiveBalancerContract","nodeType":"MemberAccess","referencedDeclaration":181,"src":"4547:49:86","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_enum$_ContractType_$43_$_t_address_$returns$_t_bool_$","typeString":"function (enum ContractType,address) view external returns (bool)"}},"id":22135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4547:85:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":22136,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4636:5:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"4547:94:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22143,"nodeType":"IfStatement","src":"4543:155:86","trueBody":{"id":22142,"nodeType":"Block","src":"4643:55:86","statements":[{"errorCall":{"arguments":[{"id":22139,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22101,"src":"4679:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22138,"name":"UnknownFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1978,"src":"4664:14:86","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":22140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4664:23:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22141,"nodeType":"RevertStatement","src":"4657:30:86"}]}},{"expression":{"arguments":[{"id":22145,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22103,"src":"4776:25:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22144,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22308,"src":"4754:21:86","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":22146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4754:48:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22147,"nodeType":"ExpressionStatement","src":"4754:48:86"},{"expression":{"arguments":[{"id":22149,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22105,"src":"4834:26:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22148,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22308,"src":"4812:21:86","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":22150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4812:49:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22151,"nodeType":"ExpressionStatement","src":"4812:49:86"},{"expression":{"id":22166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":22152,"name":"_factoryDefaultFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22000,"src":"4954:29:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IBasePoolFactory_$1415_$_t_struct$_FactoryProtocolFees_$21984_storage_$","typeString":"mapping(contract IBasePoolFactory => struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref)"}},"id":22156,"indexExpression":{"arguments":[{"id":22154,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22101,"src":"5001:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22153,"name":"IBasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1415,"src":"4984:16:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePoolFactory_$1415_$","typeString":"type(contract IBasePoolFactory)"}},"id":22155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4984:25:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePoolFactory_$1415","typeString":"contract IBasePoolFactory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4954:56:86","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_storage","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22158,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22103,"src":"5074:25:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5100:8:86","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15008,"src":"5074:34:86","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":22160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5074:36:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22161,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22105,"src":"5152:26:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5179:8:86","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":15008,"src":"5152:35:86","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":22163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5152:37:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"hexValue":"74727565","id":22164,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5222:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":22157,"name":"FactoryProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21984,"src":"5013:19:86","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_FactoryProtocolFees_$21984_storage_ptr_$","typeString":"type(struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage pointer)"}},"id":22165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["5047:25:86","5124:26:86","5203:17:86"],"names":["protocolSwapFeePercentage","protocolYieldFeePercentage","areFactoryFeesSet"],"nodeType":"FunctionCall","src":"5013:224:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"src":"4954:283:86","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_storage","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref"}},"id":22167,"nodeType":"ExpressionStatement","src":"4954:283:86"},{"eventCall":{"arguments":[{"id":22169,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22101,"src":"5294:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22170,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22103,"src":"5303:25:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22171,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22105,"src":"5330:26:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22168,"name":"FactorySpecificProtocolFeePercentagesSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1970,"src":"5253:40:86","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":22172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5253:104:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22173,"nodeType":"EmitStatement","src":"5248:109:86"}]},"documentation":{"id":22099,"nodeType":"StructuredDocumentation","src":"3819:47:86","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"00859689","id":22175,"implemented":true,"kind":"function","modifiers":[{"id":22108,"kind":"modifierInvocation","modifierName":{"id":22107,"name":"authenticate","nameLocations":["4048:12:86"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"4048:12:86"},"nodeType":"ModifierInvocation","src":"4048:12:86"}],"name":"setFactorySpecificProtocolFeePercentages","nameLocation":"3880:40:86","nodeType":"FunctionDefinition","parameters":{"id":22106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22101,"mutability":"mutable","name":"factory","nameLocation":"3938:7:86","nodeType":"VariableDeclaration","scope":22175,"src":"3930:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22100,"name":"address","nodeType":"ElementaryTypeName","src":"3930:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22103,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"3963:25:86","nodeType":"VariableDeclaration","scope":22175,"src":"3955:33:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22102,"name":"uint256","nodeType":"ElementaryTypeName","src":"3955:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22105,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"4006:26:86","nodeType":"VariableDeclaration","scope":22175,"src":"3998:34:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22104,"name":"uint256","nodeType":"ElementaryTypeName","src":"3998:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3920:118:86"},"returnParameters":{"id":22109,"nodeType":"ParameterList","parameters":[],"src":"4061:0:86"},"scope":22309,"src":"3871:1493:86","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2033],"body":{"id":22233,"nodeType":"Block","src":"5515:1005:86","statements":[{"assignments":[22186],"declarations":[{"constant":false,"id":22186,"mutability":"mutable","name":"factoryFees","nameLocation":"5848:11:86","nodeType":"VariableDeclaration","scope":22233,"src":"5821:38:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"},"typeName":{"id":22185,"nodeType":"UserDefinedTypeName","pathNode":{"id":22184,"name":"FactoryProtocolFees","nameLocations":["5821:19:86"],"nodeType":"IdentifierPath","referencedDeclaration":21984,"src":"5821:19:86"},"referencedDeclaration":21984,"src":"5821:19:86","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_storage_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"}},"visibility":"internal"}],"id":22190,"initialValue":{"arguments":[{"id":22188,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22178,"src":"5888:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22187,"name":"_getValidatedProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22261,"src":"5862:25:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_struct$_FactoryProtocolFees_$21984_memory_ptr_$","typeString":"function (address) view returns (struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory)"}},"id":22189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5862:34:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"nodeType":"VariableDeclarationStatement","src":"5821:75:86"},{"body":{"id":22231,"nodeType":"Block","src":"5950:564:86","statements":[{"assignments":[22203],"declarations":[{"constant":false,"id":22203,"mutability":"mutable","name":"currentPool","nameLocation":"5972:11:86","nodeType":"VariableDeclaration","scope":22231,"src":"5964:19:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22202,"name":"address","nodeType":"ElementaryTypeName","src":"5964:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":22207,"initialValue":{"baseExpression":{"id":22204,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22181,"src":"5986:5:86","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":22206,"indexExpression":{"id":22205,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22192,"src":"5992:1:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5986:8:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5964:30:86"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":22212,"name":"currentPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22203,"src":"6212:11:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":22209,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22178,"src":"6185:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22208,"name":"IBasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1415,"src":"6168:16:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePoolFactory_$1415_$","typeString":"type(contract IBasePoolFactory)"}},"id":22210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6168:25:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePoolFactory_$1415","typeString":"contract IBasePoolFactory"}},"id":22211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6194:17:86","memberName":"isPoolFromFactory","nodeType":"MemberAccess","referencedDeclaration":1370,"src":"6168:43:86","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":22213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6168:56:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":22214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6228:5:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"6168:65:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22222,"nodeType":"IfStatement","src":"6164:151:86","trueBody":{"id":22221,"nodeType":"Block","src":"6235:80:86","statements":[{"errorCall":{"arguments":[{"id":22217,"name":"currentPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22203,"src":"6279:11:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22218,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22178,"src":"6292:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":22216,"name":"PoolNotFromFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1990,"src":"6260:18:86","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address) pure returns (error)"}},"id":22219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6260:40:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22220,"nodeType":"RevertStatement","src":"6253:47:86"}]}},{"expression":{"arguments":[{"id":22224,"name":"currentPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22203,"src":"6367:11:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":22225,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22186,"src":"6396:11:86","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":22226,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6408:25:86","memberName":"protocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":21979,"src":"6396:37:86","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":22227,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22186,"src":"6451:11:86","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":22228,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6463:26:86","memberName":"protocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":21981,"src":"6451:38:86","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":22223,"name":"_setPoolProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22286,"src":"6329:20:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":22229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6329:174:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22230,"nodeType":"ExpressionStatement","src":"6329:174:86"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22195,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22192,"src":"5927:1:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":22196,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22181,"src":"5931:5:86","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":22197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5937:6:86","memberName":"length","nodeType":"MemberAccess","src":"5931:12:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5927:16:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22232,"initializationExpression":{"assignments":[22192],"declarations":[{"constant":false,"id":22192,"mutability":"mutable","name":"i","nameLocation":"5920:1:86","nodeType":"VariableDeclaration","scope":22232,"src":"5912:9:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22191,"name":"uint256","nodeType":"ElementaryTypeName","src":"5912:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22194,"initialValue":{"hexValue":"30","id":22193,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5924:1:86","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5912:13:86"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":22200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5945:3:86","subExpression":{"id":22199,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22192,"src":"5947:1:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22201,"nodeType":"ExpressionStatement","src":"5945:3:86"},"nodeType":"ForStatement","src":"5907:607:86"}]},"documentation":{"id":22176,"nodeType":"StructuredDocumentation","src":"5370:47:86","text":"@inheritdoc IProtocolFeePercentagesProvider"},"functionSelector":"344b12d5","id":22234,"implemented":true,"kind":"function","modifiers":[],"name":"setProtocolFeePercentagesForPools","nameLocation":"5431:33:86","nodeType":"FunctionDefinition","parameters":{"id":22182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22178,"mutability":"mutable","name":"factory","nameLocation":"5473:7:86","nodeType":"VariableDeclaration","scope":22234,"src":"5465:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22177,"name":"address","nodeType":"ElementaryTypeName","src":"5465:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22181,"mutability":"mutable","name":"pools","nameLocation":"5499:5:86","nodeType":"VariableDeclaration","scope":22234,"src":"5482:22:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":22179,"name":"address","nodeType":"ElementaryTypeName","src":"5482:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":22180,"nodeType":"ArrayTypeName","src":"5482:9:86","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5464:41:86"},"returnParameters":{"id":22183,"nodeType":"ParameterList","parameters":[],"src":"5515:0:86"},"scope":22309,"src":"5422:1098:86","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":22260,"nodeType":"Block","src":"6640:199:86","statements":[{"expression":{"id":22248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22242,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22240,"src":"6650:11:86","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":22243,"name":"_factoryDefaultFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22000,"src":"6664:29:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IBasePoolFactory_$1415_$_t_struct$_FactoryProtocolFees_$21984_storage_$","typeString":"mapping(contract IBasePoolFactory => struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref)"}},"id":22247,"indexExpression":{"arguments":[{"id":22245,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22236,"src":"6711:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22244,"name":"IBasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1415,"src":"6694:16:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePoolFactory_$1415_$","typeString":"type(contract IBasePoolFactory)"}},"id":22246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6694:25:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePoolFactory_$1415","typeString":"contract IBasePoolFactory"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6664:56:86","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_storage","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees storage ref"}},"src":"6650:70:86","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":22249,"nodeType":"ExpressionStatement","src":"6650:70:86"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22250,"name":"factoryFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22240,"src":"6735:11:86","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees memory"}},"id":22251,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6747:17:86","memberName":"areFactoryFeesSet","nodeType":"MemberAccess","referencedDeclaration":21983,"src":"6735:29:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":22252,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6768:5:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"6735:38:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22259,"nodeType":"IfStatement","src":"6731:102:86","trueBody":{"id":22258,"nodeType":"Block","src":"6775:58:86","statements":[{"errorCall":{"arguments":[{"id":22255,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22236,"src":"6814:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22254,"name":"FactoryFeesNotSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1983,"src":"6796:17:86","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":22256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6796:26:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22257,"nodeType":"RevertStatement","src":"6789:33:86"}]}}]},"id":22261,"implemented":true,"kind":"function","modifiers":[],"name":"_getValidatedProtocolFees","nameLocation":"6535:25:86","nodeType":"FunctionDefinition","parameters":{"id":22237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22236,"mutability":"mutable","name":"factory","nameLocation":"6569:7:86","nodeType":"VariableDeclaration","scope":22261,"src":"6561:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22235,"name":"address","nodeType":"ElementaryTypeName","src":"6561:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6560:17:86"},"returnParameters":{"id":22241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22240,"mutability":"mutable","name":"factoryFees","nameLocation":"6627:11:86","nodeType":"VariableDeclaration","scope":22261,"src":"6600:38:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_memory_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"},"typeName":{"id":22239,"nodeType":"UserDefinedTypeName","pathNode":{"id":22238,"name":"FactoryProtocolFees","nameLocations":["6600:19:86"],"nodeType":"IdentifierPath","referencedDeclaration":21984,"src":"6600:19:86"},"referencedDeclaration":21984,"src":"6600:19:86","typeDescriptions":{"typeIdentifier":"t_struct$_FactoryProtocolFees_$21984_storage_ptr","typeString":"struct ProtocolFeePercentagesProvider.FactoryProtocolFees"}},"visibility":"internal"}],"src":"6599:40:86"},"scope":22309,"src":"6526:313:86","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":22285,"nodeType":"Block","src":"7217:197:86","statements":[{"expression":{"arguments":[{"id":22274,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22264,"src":"7279:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22275,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22266,"src":"7285:25:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22271,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21990,"src":"7227:22:86","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":22273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7250:28:86","memberName":"setProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1897,"src":"7227:51:86","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":22276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7227:84:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22277,"nodeType":"ExpressionStatement","src":"7227:84:86"},{"expression":{"arguments":[{"id":22281,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22264,"src":"7374:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22282,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22268,"src":"7380:26:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22278,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21990,"src":"7321:22:86","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":22280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7344:29:86","memberName":"setProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1905,"src":"7321:52:86","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":22283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7321:86:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22284,"nodeType":"ExpressionStatement","src":"7321:86:86"}]},"documentation":{"id":22262,"nodeType":"StructuredDocumentation","src":"6845:214:86","text":" @dev These are permissioned functions on `ProtocolFeeController`, so governance will need to allow this contract\n to call `setProtocolSwapFeePercentage` and `setProtocolYieldFeePercentage`."},"id":22286,"implemented":true,"kind":"function","modifiers":[],"name":"_setPoolProtocolFees","nameLocation":"7073:20:86","nodeType":"FunctionDefinition","parameters":{"id":22269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22264,"mutability":"mutable","name":"pool","nameLocation":"7111:4:86","nodeType":"VariableDeclaration","scope":22286,"src":"7103:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22263,"name":"address","nodeType":"ElementaryTypeName","src":"7103:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22266,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"7133:25:86","nodeType":"VariableDeclaration","scope":22286,"src":"7125:33:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22265,"name":"uint256","nodeType":"ElementaryTypeName","src":"7125:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22268,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"7176:26:86","nodeType":"VariableDeclaration","scope":22286,"src":"7168:34:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22267,"name":"uint256","nodeType":"ElementaryTypeName","src":"7168:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7093:115:86"},"returnParameters":{"id":22270,"nodeType":"ParameterList","parameters":[],"src":"7217:0:86"},"scope":22309,"src":"7064:350:86","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":22307,"nodeType":"Block","src":"7661:682:86","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22292,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22289,"src":"8196:13:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":22293,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4284,"src":"8212:18:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8196:34:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22295,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8195:36:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":22296,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4284,"src":"8234:18:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8195:57:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":22298,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22289,"src":"8256:13:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8195:74:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22306,"nodeType":"IfStatement","src":"8191:146:86","trueBody":{"id":22305,"nodeType":"Block","src":"8271:66:86","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22300,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3184,"src":"8292:12:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3184_$","typeString":"type(contract IVaultErrors)"}},"id":22302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8305:19:86","memberName":"FeePrecisionTooHigh","nodeType":"MemberAccess","referencedDeclaration":3032,"src":"8292:32:86","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8292:34:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22304,"nodeType":"RevertStatement","src":"8285:41:86"}]}}]},"documentation":{"id":22287,"nodeType":"StructuredDocumentation","src":"7420:169:86","text":" @dev This is a duplicate of the corresponding function in `ProtocolFeeController`, as it isn't exposed in the\n deployed version of the contract."},"id":22308,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidPrecision","nameLocation":"7603:21:86","nodeType":"FunctionDefinition","parameters":{"id":22290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22289,"mutability":"mutable","name":"feePercentage","nameLocation":"7633:13:86","nodeType":"VariableDeclaration","scope":22308,"src":"7625:21:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22288,"name":"uint256","nodeType":"ElementaryTypeName","src":"7625:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7624:23:86"},"returnParameters":{"id":22291,"nodeType":"ParameterList","parameters":[],"src":"7661:0:86"},"scope":22309,"src":"7594:749:86","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":22310,"src":"1136:7209:86","usedErrors":[5,1736,1739,1973,1978,1983,1990,3032,7337,14319],"usedEvents":[1970]}],"src":"46:8300:86"},"id":86},"contracts/ProtocolFeeSweeper.sol":{"ast":{"absolutePath":"contracts/ProtocolFeeSweeper.sol","exportedSymbols":{"IERC20":[10558],"IERC4626":[9828],"IProtocolFeeBurner":[948],"IProtocolFeeController":[1955],"IProtocolFeeSweeper":[1137],"IVault":[2527],"ProtocolFeeSweeper":[22987],"ReentrancyGuardTransient":[6994],"SafeERC20":[11048],"SingletonAuthentication":[9271]},"id":22988,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":22311,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:87"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":22313,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22988,"sourceUnit":11049,"src":"72:84:87","symbolAliases":[{"foreign":{"id":22312,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11048,"src":"81:9:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":22315,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22988,"sourceUnit":9829,"src":"157:75:87","symbolAliases":[{"foreign":{"id":22314,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9828,"src":"166:8:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":22317,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22988,"sourceUnit":10559,"src":"233:72:87","symbolAliases":[{"foreign":{"id":22316,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"242:6:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":22319,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22988,"sourceUnit":1138,"src":"307:118:87","symbolAliases":[{"foreign":{"id":22318,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1137,"src":"316:19:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","id":22321,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22988,"sourceUnit":949,"src":"426:116:87","symbolAliases":[{"foreign":{"id":22320,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"435:18:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":22323,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22988,"sourceUnit":1956,"src":"543:113:87","symbolAliases":[{"foreign":{"id":22322,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"552:22:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":22325,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22988,"sourceUnit":2528,"src":"657:81:87","symbolAliases":[{"foreign":{"id":22324,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"666:6:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":22327,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22988,"sourceUnit":9272,"src":"740:104:87","symbolAliases":[{"foreign":{"id":22326,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9271,"src":"749:23:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":22329,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22988,"sourceUnit":6995,"src":"845:132:87","symbolAliases":[{"foreign":{"id":22328,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6994,"src":"858:24:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":22331,"name":"IProtocolFeeSweeper","nameLocations":["1744:19:87"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"1744:19:87"},"id":22332,"nodeType":"InheritanceSpecifier","src":"1744:19:87"},{"baseName":{"id":22333,"name":"SingletonAuthentication","nameLocations":["1765:23:87"],"nodeType":"IdentifierPath","referencedDeclaration":9271,"src":"1765:23:87"},"id":22334,"nodeType":"InheritanceSpecifier","src":"1765:23:87"},{"baseName":{"id":22335,"name":"ReentrancyGuardTransient","nameLocations":["1790:24:87"],"nodeType":"IdentifierPath","referencedDeclaration":6994,"src":"1790:24:87"},"id":22336,"nodeType":"InheritanceSpecifier","src":"1790:24:87"}],"canonicalName":"ProtocolFeeSweeper","contractDependencies":[],"contractKind":"contract","documentation":{"id":22330,"nodeType":"StructuredDocumentation","src":"979:733:87","text":" @notice Withdraw protocol fees, convert them to a target token, and forward to a recipient.\n @dev This withdraws all protocol fees previously collected and allocated to the protocol by the\n `ProtocolFeeController`, processes them with a configurable \"burner\" (e.g., from CowSwap) and forwards them to\n a recipient address.\n An off-chain process can call `collectAggregateFees(pool)` on the fee controller for a given pool, which will\n collect and allocate the fees to the protocol and pool creator. `getProtocolFeeAmounts(pool)` returns the fee\n amounts available for withdrawal. If these are great enough, `sweepProtocolFeesForToken` here will withdraw,\n convert, and forward them to the final recipient."},"fullyImplemented":true,"id":22987,"linearizedBaseContracts":[22987,6994,9271,7517,4367,14,1137],"name":"ProtocolFeeSweeper","nameLocation":"1722:18:87","nodeType":"ContractDefinition","nodes":[{"global":false,"id":22340,"libraryName":{"id":22337,"name":"SafeERC20","nameLocations":["1827:9:87"],"nodeType":"IdentifierPath","referencedDeclaration":11048,"src":"1827:9:87"},"nodeType":"UsingForDirective","src":"1821:27:87","typeName":{"id":22339,"nodeType":"UserDefinedTypeName","pathNode":{"id":22338,"name":"IERC20","nameLocations":["1841:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1841:6:87"},"referencedDeclaration":10558,"src":"1841:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}},{"documentation":{"id":22341,"nodeType":"StructuredDocumentation","src":"1854:78:87","text":"@notice All pool tokens are ERC20, so this contract should not handle ETH."},"errorSelector":"f2238896","id":22343,"name":"CannotReceiveEth","nameLocation":"1943:16:87","nodeType":"ErrorDefinition","parameters":{"id":22342,"nodeType":"ParameterList","parameters":[],"src":"1959:2:87"},"src":"1937:25:87"},{"constant":false,"id":22346,"mutability":"mutable","name":"_targetToken","nameLocation":"2094:12:87","nodeType":"VariableDeclaration","scope":22987,"src":"2079:27:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":22345,"nodeType":"UserDefinedTypeName","pathNode":{"id":22344,"name":"IERC20","nameLocations":["2079:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2079:6:87"},"referencedDeclaration":10558,"src":"2079:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"private"},{"constant":false,"id":22348,"mutability":"mutable","name":"_feeRecipient","nameLocation":"2186:13:87","nodeType":"VariableDeclaration","scope":22987,"src":"2170:29:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22347,"name":"address","nodeType":"ElementaryTypeName","src":"2170:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":22353,"mutability":"mutable","name":"_protocolFeeBurners","nameLocation":"2319:19:87","nodeType":"VariableDeclaration","scope":22987,"src":"2254:84:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"},"typeName":{"id":22352,"keyName":"feeBurner","keyNameLocation":"2281:9:87","keyType":{"id":22350,"nodeType":"UserDefinedTypeName","pathNode":{"id":22349,"name":"IProtocolFeeBurner","nameLocations":["2262:18:87"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"2262:18:87"},"referencedDeclaration":948,"src":"2262:18:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"nodeType":"Mapping","src":"2254:56:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"},"valueName":"isApproved","valueNameLocation":"2299:10:87","valueType":{"id":22351,"name":"bool","nodeType":"ElementaryTypeName","src":"2294:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"private"},{"body":{"id":22365,"nodeType":"Block","src":"2481:84:87","statements":[{"expression":{"arguments":[{"arguments":[{"id":22359,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2526:4:87","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$22987","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$22987","typeString":"contract ProtocolFeeSweeper"}],"id":22358,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2518:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22357,"name":"address","nodeType":"ElementaryTypeName","src":"2518:7:87","typeDescriptions":{}}},"id":22360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2518:13:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22361,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22348,"src":"2533:13:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":22356,"name":"_ensureAuthenticatedByRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7516,"src":"2491:26:87","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) view"}},"id":22362,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2491:56:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22363,"nodeType":"ExpressionStatement","src":"2491:56:87"},{"id":22364,"nodeType":"PlaceholderStatement","src":"2557:1:87"}]},"documentation":{"id":22354,"nodeType":"StructuredDocumentation","src":"2345:91:87","text":"@notice Allows calls from fee recipient or governance allowed accounts (non-exclusive)."},"id":22366,"name":"onlyFeeRecipientOrGovernance","nameLocation":"2450:28:87","nodeType":"ModifierDefinition","parameters":{"id":22355,"nodeType":"ParameterList","parameters":[],"src":"2478:2:87"},"src":"2441:124:87","virtual":false,"visibility":"internal"},{"body":{"id":22381,"nodeType":"Block","src":"2751:47:87","statements":[{"expression":{"arguments":[{"id":22378,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22371,"src":"2778:12:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22377,"name":"_setFeeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22795,"src":"2761:16:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":22379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2761:30:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22380,"nodeType":"ExpressionStatement","src":"2761:30:87"}]},"id":22382,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":22374,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22369,"src":"2744:5:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}}],"id":22375,"kind":"baseConstructorSpecifier","modifierName":{"id":22373,"name":"SingletonAuthentication","nameLocations":["2720:23:87"],"nodeType":"IdentifierPath","referencedDeclaration":9271,"src":"2720:23:87"},"nodeType":"ModifierInvocation","src":"2720:30:87"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22369,"mutability":"mutable","name":"vault","nameLocation":"2691:5:87","nodeType":"VariableDeclaration","scope":22382,"src":"2684:12:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":22368,"nodeType":"UserDefinedTypeName","pathNode":{"id":22367,"name":"IVault","nameLocations":["2684:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"2684:6:87"},"referencedDeclaration":2527,"src":"2684:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":22371,"mutability":"mutable","name":"feeRecipient","nameLocation":"2706:12:87","nodeType":"VariableDeclaration","scope":22382,"src":"2698:20:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22370,"name":"address","nodeType":"ElementaryTypeName","src":"2698:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2683:36:87"},"returnParameters":{"id":22376,"nodeType":"ParameterList","parameters":[],"src":"2751:0:87"},"scope":22987,"src":"2672:126:87","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1057],"body":{"id":22411,"nodeType":"Block","src":"3088:112:87","statements":[{"expression":{"arguments":[{"id":22403,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22385,"src":"3125:4:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22404,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22388,"src":"3131:8:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":22405,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22390,"src":"3141:23:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22406,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22392,"src":"3166:8:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22407,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22395,"src":"3176:9:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},{"hexValue":"66616c7365","id":22408,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3187:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":22402,"name":"_sweepProtocolFeesForToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22630,"src":"3098:26:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10558_$_t_uint256_$_t_uint256_$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,uint256,contract IProtocolFeeBurner,bool)"}},"id":22409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3098:95:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22410,"nodeType":"ExpressionStatement","src":"3098:95:87"}]},"documentation":{"id":22383,"nodeType":"StructuredDocumentation","src":"2804:35:87","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"b9746995","id":22412,"implemented":true,"kind":"function","modifiers":[{"id":22398,"kind":"modifierInvocation","modifierName":{"id":22397,"name":"nonReentrant","nameLocations":["3046:12:87"],"nodeType":"IdentifierPath","referencedDeclaration":6949,"src":"3046:12:87"},"nodeType":"ModifierInvocation","src":"3046:12:87"},{"id":22400,"kind":"modifierInvocation","modifierName":{"id":22399,"name":"onlyFeeRecipientOrGovernance","nameLocations":["3059:28:87"],"nodeType":"IdentifierPath","referencedDeclaration":22366,"src":"3059:28:87"},"nodeType":"ModifierInvocation","src":"3059:28:87"}],"name":"sweepProtocolFeesForToken","nameLocation":"2853:25:87","nodeType":"FunctionDefinition","parameters":{"id":22396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22385,"mutability":"mutable","name":"pool","nameLocation":"2896:4:87","nodeType":"VariableDeclaration","scope":22412,"src":"2888:12:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22384,"name":"address","nodeType":"ElementaryTypeName","src":"2888:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22388,"mutability":"mutable","name":"feeToken","nameLocation":"2917:8:87","nodeType":"VariableDeclaration","scope":22412,"src":"2910:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":22387,"nodeType":"UserDefinedTypeName","pathNode":{"id":22386,"name":"IERC20","nameLocations":["2910:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"2910:6:87"},"referencedDeclaration":10558,"src":"2910:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":22390,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"2943:23:87","nodeType":"VariableDeclaration","scope":22412,"src":"2935:31:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22389,"name":"uint256","nodeType":"ElementaryTypeName","src":"2935:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22392,"mutability":"mutable","name":"deadline","nameLocation":"2984:8:87","nodeType":"VariableDeclaration","scope":22412,"src":"2976:16:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22391,"name":"uint256","nodeType":"ElementaryTypeName","src":"2976:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22395,"mutability":"mutable","name":"feeBurner","nameLocation":"3021:9:87","nodeType":"VariableDeclaration","scope":22412,"src":"3002:28:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":22394,"nodeType":"UserDefinedTypeName","pathNode":{"id":22393,"name":"IProtocolFeeBurner","nameLocations":["3002:18:87"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"3002:18:87"},"referencedDeclaration":948,"src":"3002:18:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"2878:158:87"},"returnParameters":{"id":22401,"nodeType":"ParameterList","parameters":[],"src":"3088:0:87"},"scope":22987,"src":"2844:356:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1073],"body":{"id":22446,"nodeType":"Block","src":"3499:128:87","statements":[{"expression":{"arguments":[{"id":22433,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22415,"src":"3536:4:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":22437,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22418,"src":"3557:8:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}],"id":22436,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3549:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22435,"name":"address","nodeType":"ElementaryTypeName","src":"3549:7:87","typeDescriptions":{}}},"id":22438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3549:17:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22434,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"3542:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10558_$","typeString":"type(contract IERC20)"}},"id":22439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3542:25:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":22440,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22420,"src":"3569:23:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22441,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22422,"src":"3594:8:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22442,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22425,"src":"3604:9:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},{"hexValue":"74727565","id":22443,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3615:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":22432,"name":"_sweepProtocolFeesForToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22630,"src":"3509:26:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10558_$_t_uint256_$_t_uint256_$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,uint256,contract IProtocolFeeBurner,bool)"}},"id":22444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3509:111:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22445,"nodeType":"ExpressionStatement","src":"3509:111:87"}]},"documentation":{"id":22413,"nodeType":"StructuredDocumentation","src":"3206:35:87","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"88f6d2a4","id":22447,"implemented":true,"kind":"function","modifiers":[{"id":22428,"kind":"modifierInvocation","modifierName":{"id":22427,"name":"nonReentrant","nameLocations":["3457:12:87"],"nodeType":"IdentifierPath","referencedDeclaration":6949,"src":"3457:12:87"},"nodeType":"ModifierInvocation","src":"3457:12:87"},{"id":22430,"kind":"modifierInvocation","modifierName":{"id":22429,"name":"onlyFeeRecipientOrGovernance","nameLocations":["3470:28:87"],"nodeType":"IdentifierPath","referencedDeclaration":22366,"src":"3470:28:87"},"nodeType":"ModifierInvocation","src":"3470:28:87"}],"name":"sweepProtocolFeesForWrappedToken","nameLocation":"3255:32:87","nodeType":"FunctionDefinition","parameters":{"id":22426,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22415,"mutability":"mutable","name":"pool","nameLocation":"3305:4:87","nodeType":"VariableDeclaration","scope":22447,"src":"3297:12:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22414,"name":"address","nodeType":"ElementaryTypeName","src":"3297:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22418,"mutability":"mutable","name":"feeToken","nameLocation":"3328:8:87","nodeType":"VariableDeclaration","scope":22447,"src":"3319:17:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":22417,"nodeType":"UserDefinedTypeName","pathNode":{"id":22416,"name":"IERC4626","nameLocations":["3319:8:87"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"3319:8:87"},"referencedDeclaration":9828,"src":"3319:8:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":22420,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"3354:23:87","nodeType":"VariableDeclaration","scope":22447,"src":"3346:31:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22419,"name":"uint256","nodeType":"ElementaryTypeName","src":"3346:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22422,"mutability":"mutable","name":"deadline","nameLocation":"3395:8:87","nodeType":"VariableDeclaration","scope":22447,"src":"3387:16:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22421,"name":"uint256","nodeType":"ElementaryTypeName","src":"3387:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22425,"mutability":"mutable","name":"feeBurner","nameLocation":"3432:9:87","nodeType":"VariableDeclaration","scope":22447,"src":"3413:28:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":22424,"nodeType":"UserDefinedTypeName","pathNode":{"id":22423,"name":"IProtocolFeeBurner","nameLocations":["3413:18:87"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"3413:18:87"},"referencedDeclaration":948,"src":"3413:18:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"3287:160:87"},"returnParameters":{"id":22431,"nodeType":"ParameterList","parameters":[],"src":"3499:0:87"},"scope":22987,"src":"3246:381:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":22629,"nodeType":"Block","src":"3863:2820:87","statements":[{"assignments":[22465],"declarations":[{"constant":false,"id":22465,"mutability":"mutable","name":"feeBurnerProvided","nameLocation":"3878:17:87","nodeType":"VariableDeclaration","scope":22629,"src":"3873:22:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22464,"name":"bool","nodeType":"ElementaryTypeName","src":"3873:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":22469,"initialValue":{"arguments":[{"id":22467,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22459,"src":"3917:9:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22466,"name":"_getValidFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22681,"src":"3898:18:87","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IProtocolFeeBurner_$948_$returns$_t_bool_$","typeString":"function (contract IProtocolFeeBurner) view returns (bool)"}},"id":22468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3898:29:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3873:54:87"},{"assignments":[22471],"declarations":[{"constant":false,"id":22471,"mutability":"mutable","name":"existingBalance","nameLocation":"3946:15:87","nodeType":"VariableDeclaration","scope":22629,"src":"3938:23:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22470,"name":"uint256","nodeType":"ElementaryTypeName","src":"3938:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22479,"initialValue":{"arguments":[{"arguments":[{"id":22476,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3991:4:87","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$22987","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$22987","typeString":"contract ProtocolFeeSweeper"}],"id":22475,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3983:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22474,"name":"address","nodeType":"ElementaryTypeName","src":"3983:7:87","typeDescriptions":{}}},"id":22477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3983:13:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22472,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22452,"src":"3964:8:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":22473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3973:9:87","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10515,"src":"3964:18:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":22478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3964:33:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3938:59:87"},{"assignments":[22482],"declarations":[{"constant":false,"id":22482,"mutability":"mutable","name":"feeController","nameLocation":"4229:13:87","nodeType":"VariableDeclaration","scope":22629,"src":"4206:36:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":22481,"nodeType":"UserDefinedTypeName","pathNode":{"id":22480,"name":"IProtocolFeeController","nameLocations":["4206:22:87"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"4206:22:87"},"referencedDeclaration":1955,"src":"4206:22:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"id":22485,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":22483,"name":"getProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22723,"src":"4245:24:87","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view returns (contract IProtocolFeeController)"}},"id":22484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4245:26:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"nodeType":"VariableDeclarationStatement","src":"4206:65:87"},{"expression":{"arguments":[{"id":22489,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22449,"src":"4463:4:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22486,"name":"feeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22482,"src":"4428:13:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":22488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4442:20:87","memberName":"collectAggregateFees","nodeType":"MemberAccess","referencedDeclaration":1767,"src":"4428:34:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":22490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4428:40:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22491,"nodeType":"ExpressionStatement","src":"4428:40:87"},{"expression":{"arguments":[{"id":22495,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22449,"src":"4615:4:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":22498,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4629:4:87","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$22987","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$22987","typeString":"contract ProtocolFeeSweeper"}],"id":22497,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4621:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22496,"name":"address","nodeType":"ElementaryTypeName","src":"4621:7:87","typeDescriptions":{}}},"id":22499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4621:13:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22500,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22452,"src":"4636:8:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"expression":{"id":22492,"name":"feeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22482,"src":"4572:13:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"id":22494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4586:28:87","memberName":"withdrawProtocolFeesForToken","nodeType":"MemberAccess","referencedDeclaration":1940,"src":"4572:42:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$10558_$returns$__$","typeString":"function (address,address,contract IERC20) external"}},"id":22501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4572:73:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22502,"nodeType":"ExpressionStatement","src":"4572:73:87"},{"assignments":[22504],"declarations":[{"constant":false,"id":22504,"mutability":"mutable","name":"withdrawnBalance","nameLocation":"4664:16:87","nodeType":"VariableDeclaration","scope":22629,"src":"4656:24:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22503,"name":"uint256","nodeType":"ElementaryTypeName","src":"4656:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22514,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":22509,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4710:4:87","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$22987","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$22987","typeString":"contract ProtocolFeeSweeper"}],"id":22508,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4702:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22507,"name":"address","nodeType":"ElementaryTypeName","src":"4702:7:87","typeDescriptions":{}}},"id":22510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4702:13:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22505,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22452,"src":"4683:8:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":22506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4692:9:87","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10515,"src":"4683:18:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":22511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4683:33:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":22512,"name":"existingBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22471,"src":"4719:15:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4683:51:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4656:78:87"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22515,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22504,"src":"4749:16:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":22516,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4768:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4749:20:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22628,"nodeType":"IfStatement","src":"4745:1932:87","trueBody":{"id":22627,"nodeType":"Block","src":"4771:1906:87","statements":[{"condition":{"id":22518,"name":"feeBurnerProvided","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22465,"src":"4789:17:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22625,"nodeType":"Block","src":"6490:177:87","statements":[{"expression":{"arguments":[{"id":22620,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22449,"src":"6619:4:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22621,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22452,"src":"6625:8:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":22622,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22504,"src":"6635:16:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22619,"name":"_transferFeeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22710,"src":"6601:17:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10558_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":22623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6601:51:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22624,"nodeType":"ExpressionStatement","src":"6601:51:87"}]},"id":22626,"nodeType":"IfStatement","src":"4785:1882:87","trueBody":{"id":22618,"nodeType":"Block","src":"4808:1676:87","statements":[{"assignments":[22521],"declarations":[{"constant":false,"id":22521,"mutability":"mutable","name":"targetToken","nameLocation":"4833:11:87","nodeType":"VariableDeclaration","scope":22618,"src":"4826:18:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":22520,"nodeType":"UserDefinedTypeName","pathNode":{"id":22519,"name":"IERC20","nameLocations":["4826:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"4826:6:87"},"referencedDeclaration":10558,"src":"4826:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"id":22523,"initialValue":{"id":22522,"name":"_targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22346,"src":"4847:12:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"4826:33:87"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"id":22526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22524,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22452,"src":"4986:8:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":22525,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22521,"src":"4998:11:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"src":"4986:23:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22616,"nodeType":"Block","src":"5225:1245:87","statements":[{"condition":{"id":22540,"name":"shouldUnwrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22461,"src":"5251:12:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22575,"nodeType":"IfStatement","src":"5247:296:87","trueBody":{"id":22574,"nodeType":"Block","src":"5265:278:87","statements":[{"assignments":[22543],"declarations":[{"constant":false,"id":22543,"mutability":"mutable","name":"erc4626Token","nameLocation":"5300:12:87","nodeType":"VariableDeclaration","scope":22574,"src":"5291:21:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":22542,"nodeType":"UserDefinedTypeName","pathNode":{"id":22541,"name":"IERC4626","nameLocations":["5291:8:87"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"5291:8:87"},"referencedDeclaration":9828,"src":"5291:8:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"}],"id":22550,"initialValue":{"arguments":[{"arguments":[{"id":22547,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22452,"src":"5332:8:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":22546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5324:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22545,"name":"address","nodeType":"ElementaryTypeName","src":"5324:7:87","typeDescriptions":{}}},"id":22548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5324:17:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22544,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9828,"src":"5315:8:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9828_$","typeString":"type(contract IERC4626)"}},"id":22549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5315:27:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"nodeType":"VariableDeclarationStatement","src":"5291:51:87"},{"expression":{"id":22557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22551,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22452,"src":"5369:8:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22553,"name":"erc4626Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22543,"src":"5387:12:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"id":22554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5400:5:87","memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":9697,"src":"5387:18:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":22555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5387:20:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22552,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"5380:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10558_$","typeString":"type(contract IERC20)"}},"id":22556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5380:28:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"src":"5369:39:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":22558,"nodeType":"ExpressionStatement","src":"5369:39:87"},{"expression":{"id":22572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22559,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22504,"src":"5434:16:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":22562,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22504,"src":"5473:16:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":22565,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5499:4:87","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$22987","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$22987","typeString":"contract ProtocolFeeSweeper"}],"id":22564,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5491:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22563,"name":"address","nodeType":"ElementaryTypeName","src":"5491:7:87","typeDescriptions":{}}},"id":22566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5491:13:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":22569,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5514:4:87","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$22987","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$22987","typeString":"contract ProtocolFeeSweeper"}],"id":22568,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5506:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22567,"name":"address","nodeType":"ElementaryTypeName","src":"5506:7:87","typeDescriptions":{}}},"id":22570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5506:13:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22560,"name":"erc4626Token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22543,"src":"5453:12:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"id":22561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5466:6:87","memberName":"redeem","nodeType":"MemberAccess","referencedDeclaration":9827,"src":"5453:19:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) external returns (uint256)"}},"id":22571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5453:67:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5434:86:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22573,"nodeType":"ExpressionStatement","src":"5434:86:87"}]}},{"expression":{"arguments":[{"arguments":[{"id":22581,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22459,"src":"5828:9:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22580,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5820:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22579,"name":"address","nodeType":"ElementaryTypeName","src":"5820:7:87","typeDescriptions":{}}},"id":22582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5820:18:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22583,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22504,"src":"5840:16:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22576,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22452,"src":"5798:8:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":22578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5807:12:87","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":10832,"src":"5798:21:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10558_$","typeString":"function (contract IERC20,address,uint256)"}},"id":22584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5798:59:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22585,"nodeType":"ExpressionStatement","src":"5798:59:87"},{"expression":{"arguments":[{"id":22589,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22449,"src":"6019:4:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22590,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22452,"src":"6049:8:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":22591,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22504,"src":"6083:16:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22592,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22521,"src":"6125:11:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":22593,"name":"minTargetTokenAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22454,"src":"6162:23:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22594,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22348,"src":"6211:13:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22595,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22456,"src":"6250:8:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22586,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22459,"src":"5979:9:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"id":22588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5989:4:87","memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":947,"src":"5979:14:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_contract$_IERC20_$10558_$_t_uint256_$_t_contract$_IERC20_$10558_$_t_uint256_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address,uint256) external"}},"id":22596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5979:301:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22597,"nodeType":"ExpressionStatement","src":"5979:301:87"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":22602,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6334:4:87","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$22987","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$22987","typeString":"contract ProtocolFeeSweeper"}],"id":22601,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6326:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22600,"name":"address","nodeType":"ElementaryTypeName","src":"6326:7:87","typeDescriptions":{}}},"id":22603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6326:13:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":22606,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22459,"src":"6349:9:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22605,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6341:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22604,"name":"address","nodeType":"ElementaryTypeName","src":"6341:7:87","typeDescriptions":{}}},"id":22607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6341:18:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22598,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22452,"src":"6307:8:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":22599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6316:9:87","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":10535,"src":"6307:18:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":22608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6307:53:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":22609,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6363:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6307:57:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22615,"nodeType":"IfStatement","src":"6303:149:87","trueBody":{"id":22614,"nodeType":"Block","src":"6366:86:87","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22611,"name":"BurnerDidNotConsumeAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1038,"src":"6399:28:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6399:30:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22613,"nodeType":"RevertStatement","src":"6392:37:87"}]}}]},"id":22617,"nodeType":"IfStatement","src":"4982:1488:87","trueBody":{"id":22539,"nodeType":"Block","src":"5011:208:87","statements":[{"condition":{"id":22527,"name":"shouldUnwrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22461,"src":"5037:12:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22532,"nodeType":"IfStatement","src":"5033:94:87","trueBody":{"id":22531,"nodeType":"Block","src":"5051:76:87","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22528,"name":"UnwrapIsNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1041,"src":"5084:18:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5084:20:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22530,"nodeType":"RevertStatement","src":"5077:27:87"}]}},{"expression":{"arguments":[{"id":22534,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22449,"src":"5167:4:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22535,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22452,"src":"5173:8:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":22536,"name":"withdrawnBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22504,"src":"5183:16:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22533,"name":"_transferFeeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22710,"src":"5149:17:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$10558_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":22537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5149:51:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22538,"nodeType":"ExpressionStatement","src":"5149:51:87"}]}}]}}]}}]},"id":22630,"implemented":true,"kind":"function","modifiers":[],"name":"_sweepProtocolFeesForToken","nameLocation":"3642:26:87","nodeType":"FunctionDefinition","parameters":{"id":22462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22449,"mutability":"mutable","name":"pool","nameLocation":"3686:4:87","nodeType":"VariableDeclaration","scope":22630,"src":"3678:12:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22448,"name":"address","nodeType":"ElementaryTypeName","src":"3678:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22452,"mutability":"mutable","name":"feeToken","nameLocation":"3707:8:87","nodeType":"VariableDeclaration","scope":22630,"src":"3700:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":22451,"nodeType":"UserDefinedTypeName","pathNode":{"id":22450,"name":"IERC20","nameLocations":["3700:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"3700:6:87"},"referencedDeclaration":10558,"src":"3700:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":22454,"mutability":"mutable","name":"minTargetTokenAmountOut","nameLocation":"3733:23:87","nodeType":"VariableDeclaration","scope":22630,"src":"3725:31:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22453,"name":"uint256","nodeType":"ElementaryTypeName","src":"3725:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22456,"mutability":"mutable","name":"deadline","nameLocation":"3774:8:87","nodeType":"VariableDeclaration","scope":22630,"src":"3766:16:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22455,"name":"uint256","nodeType":"ElementaryTypeName","src":"3766:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22459,"mutability":"mutable","name":"feeBurner","nameLocation":"3811:9:87","nodeType":"VariableDeclaration","scope":22630,"src":"3792:28:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":22458,"nodeType":"UserDefinedTypeName","pathNode":{"id":22457,"name":"IProtocolFeeBurner","nameLocations":["3792:18:87"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"3792:18:87"},"referencedDeclaration":948,"src":"3792:18:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"},{"constant":false,"id":22461,"mutability":"mutable","name":"shouldUnwrap","nameLocation":"3835:12:87","nodeType":"VariableDeclaration","scope":22630,"src":"3830:17:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22460,"name":"bool","nodeType":"ElementaryTypeName","src":"3830:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3668:185:87"},"returnParameters":{"id":22463,"nodeType":"ParameterList","parameters":[],"src":"3863:0:87"},"scope":22987,"src":"3633:3050:87","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":22680,"nodeType":"Block","src":"6793:572:87","statements":[{"expression":{"id":22648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22638,"name":"feeBurnerProvided","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22636,"src":"6803:17:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":22641,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22633,"src":"6831:9:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22640,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6823:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22639,"name":"address","nodeType":"ElementaryTypeName","src":"6823:7:87","typeDescriptions":{}}},"id":22642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6823:18:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":22645,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6853:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":22644,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6845:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22643,"name":"address","nodeType":"ElementaryTypeName","src":"6845:7:87","typeDescriptions":{}}},"id":22646,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6845:10:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6823:32:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6803:52:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22649,"nodeType":"ExpressionStatement","src":"6803:52:87"},{"condition":{"id":22650,"name":"feeBurnerProvided","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22636,"src":"7045:17:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22679,"nodeType":"IfStatement","src":"7041:318:87","trueBody":{"id":22678,"nodeType":"Block","src":"7064:295:87","statements":[{"condition":{"baseExpression":{"id":22651,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22353,"src":"7082:19:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":22653,"indexExpression":{"id":22652,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22633,"src":"7102:9:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7082:30:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22676,"nodeType":"Block","src":"7261:88:87","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":22672,"name":"feeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22633,"src":"7323:9:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22671,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7315:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22670,"name":"address","nodeType":"ElementaryTypeName","src":"7315:7:87","typeDescriptions":{}}},"id":22673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7315:18:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22669,"name":"UnsupportedProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1025,"src":"7286:28:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":22674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7286:48:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22675,"nodeType":"RevertStatement","src":"7279:55:87"}]},"id":22677,"nodeType":"IfStatement","src":"7078:271:87","trueBody":{"id":22668,"nodeType":"Block","src":"7114:141:87","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":22656,"name":"_targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22346,"src":"7144:12:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":22655,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7136:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22654,"name":"address","nodeType":"ElementaryTypeName","src":"7136:7:87","typeDescriptions":{}}},"id":22657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7136:21:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":22660,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7169:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":22659,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7161:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22658,"name":"address","nodeType":"ElementaryTypeName","src":"7161:7:87","typeDescriptions":{}}},"id":22661,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7161:10:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7136:35:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22667,"nodeType":"IfStatement","src":"7132:109:87","trueBody":{"id":22666,"nodeType":"Block","src":"7173:68:87","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22663,"name":"InvalidTargetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1017,"src":"7202:18:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7202:20:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22665,"nodeType":"RevertStatement","src":"7195:27:87"}]}}]}}]}}]},"id":22681,"implemented":true,"kind":"function","modifiers":[],"name":"_getValidFeeBurner","nameLocation":"6698:18:87","nodeType":"FunctionDefinition","parameters":{"id":22634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22633,"mutability":"mutable","name":"feeBurner","nameLocation":"6736:9:87","nodeType":"VariableDeclaration","scope":22681,"src":"6717:28:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":22632,"nodeType":"UserDefinedTypeName","pathNode":{"id":22631,"name":"IProtocolFeeBurner","nameLocations":["6717:18:87"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"6717:18:87"},"referencedDeclaration":948,"src":"6717:18:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"6716:30:87"},"returnParameters":{"id":22637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22636,"mutability":"mutable","name":"feeBurnerProvided","nameLocation":"6774:17:87","nodeType":"VariableDeclaration","scope":22681,"src":"6769:22:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22635,"name":"bool","nodeType":"ElementaryTypeName","src":"6769:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6768:24:87"},"scope":22987,"src":"6689:676:87","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":22709,"nodeType":"Block","src":"7468:197:87","statements":[{"assignments":[22692],"declarations":[{"constant":false,"id":22692,"mutability":"mutable","name":"recipient","nameLocation":"7486:9:87","nodeType":"VariableDeclaration","scope":22709,"src":"7478:17:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22691,"name":"address","nodeType":"ElementaryTypeName","src":"7478:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":22694,"initialValue":{"id":22693,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22348,"src":"7498:13:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"7478:33:87"},{"expression":{"arguments":[{"id":22698,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22692,"src":"7543:9:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22699,"name":"withdrawnTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22688,"src":"7554:21:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22695,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22686,"src":"7521:8:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":22697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7530:12:87","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10629,"src":"7521:21:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10558_$","typeString":"function (contract IERC20,address,uint256)"}},"id":22700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7521:55:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22701,"nodeType":"ExpressionStatement","src":"7521:55:87"},{"eventCall":{"arguments":[{"id":22703,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22683,"src":"7609:4:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22704,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22686,"src":"7615:8:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":22705,"name":"withdrawnTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22688,"src":"7625:21:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22706,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22692,"src":"7648:9:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":22702,"name":"ProtocolFeeSwept","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1001,"src":"7592:16:87","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10558_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,contract IERC20,uint256,address)"}},"id":22707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7592:66:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22708,"nodeType":"EmitStatement","src":"7587:71:87"}]},"id":22710,"implemented":true,"kind":"function","modifiers":[],"name":"_transferFeeToken","nameLocation":"7380:17:87","nodeType":"FunctionDefinition","parameters":{"id":22689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22683,"mutability":"mutable","name":"pool","nameLocation":"7406:4:87","nodeType":"VariableDeclaration","scope":22710,"src":"7398:12:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22682,"name":"address","nodeType":"ElementaryTypeName","src":"7398:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22686,"mutability":"mutable","name":"feeToken","nameLocation":"7419:8:87","nodeType":"VariableDeclaration","scope":22710,"src":"7412:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":22685,"nodeType":"UserDefinedTypeName","pathNode":{"id":22684,"name":"IERC20","nameLocations":["7412:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"7412:6:87"},"referencedDeclaration":10558,"src":"7412:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":22688,"mutability":"mutable","name":"withdrawnTokenBalance","nameLocation":"7437:21:87","nodeType":"VariableDeclaration","scope":22710,"src":"7429:29:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22687,"name":"uint256","nodeType":"ElementaryTypeName","src":"7429:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7397:62:87"},"returnParameters":{"id":22690,"nodeType":"ParameterList","parameters":[],"src":"7468:0:87"},"scope":22987,"src":"7371:294:87","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"baseFunctions":[1080],"body":{"id":22722,"nodeType":"Block","src":"7792:61:87","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":22717,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9257,"src":"7809:8:87","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$2527_$","typeString":"function () view returns (contract IVault)"}},"id":22718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7809:10:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":22719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7820:24:87","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":3776,"src":"7809:35:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$1955_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":22720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7809:37:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"functionReturnParameters":22716,"id":22721,"nodeType":"Return","src":"7802:44:87"}]},"documentation":{"id":22711,"nodeType":"StructuredDocumentation","src":"7671:35:87","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"85f2dbd4","id":22723,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"7720:24:87","nodeType":"FunctionDefinition","parameters":{"id":22712,"nodeType":"ParameterList","parameters":[],"src":"7744:2:87"},"returnParameters":{"id":22716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22715,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22723,"src":"7768:22:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":22714,"nodeType":"UserDefinedTypeName","pathNode":{"id":22713,"name":"IProtocolFeeController","nameLocations":["7768:22:87"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"7768:22:87"},"referencedDeclaration":1955,"src":"7768:22:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"7767:24:87"},"scope":22987,"src":"7711:142:87","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1087],"body":{"id":22732,"nodeType":"Block","src":"7956:36:87","statements":[{"expression":{"id":22730,"name":"_targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22346,"src":"7973:12:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"functionReturnParameters":22729,"id":22731,"nodeType":"Return","src":"7966:19:87"}]},"documentation":{"id":22724,"nodeType":"StructuredDocumentation","src":"7859:35:87","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"80db0d51","id":22733,"implemented":true,"kind":"function","modifiers":[],"name":"getTargetToken","nameLocation":"7908:14:87","nodeType":"FunctionDefinition","parameters":{"id":22725,"nodeType":"ParameterList","parameters":[],"src":"7922:2:87"},"returnParameters":{"id":22729,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22728,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22733,"src":"7948:6:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":22727,"nodeType":"UserDefinedTypeName","pathNode":{"id":22726,"name":"IERC20","nameLocations":["7948:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"7948:6:87"},"referencedDeclaration":10558,"src":"7948:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"7947:8:87"},"scope":22987,"src":"7899:93:87","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1093],"body":{"id":22741,"nodeType":"Block","src":"8097:37:87","statements":[{"expression":{"id":22739,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22348,"src":"8114:13:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":22738,"id":22740,"nodeType":"Return","src":"8107:20:87"}]},"documentation":{"id":22734,"nodeType":"StructuredDocumentation","src":"7998:35:87","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"4ccb20c0","id":22742,"implemented":true,"kind":"function","modifiers":[],"name":"getFeeRecipient","nameLocation":"8047:15:87","nodeType":"FunctionDefinition","parameters":{"id":22735,"nodeType":"ParameterList","parameters":[],"src":"8062:2:87"},"returnParameters":{"id":22738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22737,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22742,"src":"8088:7:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22736,"name":"address","nodeType":"ElementaryTypeName","src":"8088:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8087:9:87"},"scope":22987,"src":"8038:96:87","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1101],"body":{"id":22756,"nodeType":"Block","src":"8273:82:87","statements":[{"expression":{"baseExpression":{"id":22750,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22353,"src":"8290:19:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":22754,"indexExpression":{"arguments":[{"id":22752,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22745,"src":"8329:17:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22751,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"8310:18:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeBurner_$948_$","typeString":"type(contract IProtocolFeeBurner)"}},"id":22753,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8310:37:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8290:58:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":22749,"id":22755,"nodeType":"Return","src":"8283:65:87"}]},"documentation":{"id":22743,"nodeType":"StructuredDocumentation","src":"8140:35:87","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"9c5cee9b","id":22757,"implemented":true,"kind":"function","modifiers":[],"name":"isApprovedProtocolFeeBurner","nameLocation":"8189:27:87","nodeType":"FunctionDefinition","parameters":{"id":22746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22745,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"8225:17:87","nodeType":"VariableDeclaration","scope":22757,"src":"8217:25:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22744,"name":"address","nodeType":"ElementaryTypeName","src":"8217:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8216:27:87"},"returnParameters":{"id":22749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22748,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22757,"src":"8267:4:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22747,"name":"bool","nodeType":"ElementaryTypeName","src":"8267:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8266:6:87"},"scope":22987,"src":"8180:175:87","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1107],"body":{"id":22769,"nodeType":"Block","src":"8704:47:87","statements":[{"expression":{"arguments":[{"id":22766,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22760,"src":"8731:12:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22765,"name":"_setFeeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22795,"src":"8714:16:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":22767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8714:30:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22768,"nodeType":"ExpressionStatement","src":"8714:30:87"}]},"documentation":{"id":22758,"nodeType":"StructuredDocumentation","src":"8579:35:87","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"e74b981b","id":22770,"implemented":true,"kind":"function","modifiers":[{"id":22763,"kind":"modifierInvocation","modifierName":{"id":22762,"name":"onlyFeeRecipientOrGovernance","nameLocations":["8675:28:87"],"nodeType":"IdentifierPath","referencedDeclaration":22366,"src":"8675:28:87"},"nodeType":"ModifierInvocation","src":"8675:28:87"}],"name":"setFeeRecipient","nameLocation":"8628:15:87","nodeType":"FunctionDefinition","parameters":{"id":22761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22760,"mutability":"mutable","name":"feeRecipient","nameLocation":"8652:12:87","nodeType":"VariableDeclaration","scope":22770,"src":"8644:20:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22759,"name":"address","nodeType":"ElementaryTypeName","src":"8644:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8643:22:87"},"returnParameters":{"id":22764,"nodeType":"ParameterList","parameters":[],"src":"8704:0:87"},"scope":22987,"src":"8619:132:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":22794,"nodeType":"Block","src":"8814:707:87","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22775,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22772,"src":"9350:12:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":22778,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9374:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":22777,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9366:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22776,"name":"address","nodeType":"ElementaryTypeName","src":"9366:7:87","typeDescriptions":{}}},"id":22779,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9366:10:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9350:26:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22785,"nodeType":"IfStatement","src":"9346:85:87","trueBody":{"id":22784,"nodeType":"Block","src":"9378:53:87","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22781,"name":"InvalidFeeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1014,"src":"9399:19:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9399:21:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22783,"nodeType":"RevertStatement","src":"9392:28:87"}]}},{"expression":{"id":22788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22786,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22348,"src":"9441:13:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22787,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22772,"src":"9457:12:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9441:28:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":22789,"nodeType":"ExpressionStatement","src":"9441:28:87"},{"eventCall":{"arguments":[{"id":22791,"name":"feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22772,"src":"9501:12:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22790,"name":"FeeRecipientSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":989,"src":"9485:15:87","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":22792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9485:29:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22793,"nodeType":"EmitStatement","src":"9480:34:87"}]},"id":22795,"implemented":true,"kind":"function","modifiers":[],"name":"_setFeeRecipient","nameLocation":"8766:16:87","nodeType":"FunctionDefinition","parameters":{"id":22773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22772,"mutability":"mutable","name":"feeRecipient","nameLocation":"8791:12:87","nodeType":"VariableDeclaration","scope":22795,"src":"8783:20:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22771,"name":"address","nodeType":"ElementaryTypeName","src":"8783:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8782:22:87"},"returnParameters":{"id":22774,"nodeType":"ParameterList","parameters":[],"src":"8814:0:87"},"scope":22987,"src":"8757:764:87","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1114],"body":{"id":22812,"nodeType":"Block","src":"9649:86:87","statements":[{"expression":{"id":22806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22804,"name":"_targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22346,"src":"9659:12:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22805,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22799,"src":"9674:11:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"src":"9659:26:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":22807,"nodeType":"ExpressionStatement","src":"9659:26:87"},{"eventCall":{"arguments":[{"id":22809,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22799,"src":"9716:11:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":22808,"name":"TargetTokenSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":984,"src":"9701:14:87","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC20_$10558_$returns$__$","typeString":"function (contract IERC20)"}},"id":22810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9701:27:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22811,"nodeType":"EmitStatement","src":"9696:32:87"}]},"documentation":{"id":22796,"nodeType":"StructuredDocumentation","src":"9527:35:87","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"1b66cb00","id":22813,"implemented":true,"kind":"function","modifiers":[{"id":22802,"kind":"modifierInvocation","modifierName":{"id":22801,"name":"onlyFeeRecipientOrGovernance","nameLocations":["9620:28:87"],"nodeType":"IdentifierPath","referencedDeclaration":22366,"src":"9620:28:87"},"nodeType":"ModifierInvocation","src":"9620:28:87"}],"name":"setTargetToken","nameLocation":"9576:14:87","nodeType":"FunctionDefinition","parameters":{"id":22800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22799,"mutability":"mutable","name":"targetToken","nameLocation":"9598:11:87","nodeType":"VariableDeclaration","scope":22813,"src":"9591:18:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":22798,"nodeType":"UserDefinedTypeName","pathNode":{"id":22797,"name":"IERC20","nameLocations":["9591:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"9591:6:87"},"referencedDeclaration":10558,"src":"9591:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"9590:20:87"},"returnParameters":{"id":22803,"nodeType":"ParameterList","parameters":[],"src":"9649:0:87"},"scope":22987,"src":"9567:168:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1121],"body":{"id":22861,"nodeType":"Block","src":"9887:500:87","statements":[{"condition":{"baseExpression":{"id":22822,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22353,"src":"9901:19:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":22824,"indexExpression":{"id":22823,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22817,"src":"9921:17:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9901:38:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22833,"nodeType":"IfStatement","src":"9897:133:87","trueBody":{"id":22832,"nodeType":"Block","src":"9941:89:87","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":22828,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22817,"src":"10000:17:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22827,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9992:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22826,"name":"address","nodeType":"ElementaryTypeName","src":"9992:7:87","typeDescriptions":{}}},"id":22829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9992:26:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22825,"name":"ProtocolFeeBurnerAlreadyAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1030,"src":"9962:29:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":22830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9962:57:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22831,"nodeType":"RevertStatement","src":"9955:64:87"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":22836,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22817,"src":"10167:17:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22835,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10159:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22834,"name":"address","nodeType":"ElementaryTypeName","src":"10159:7:87","typeDescriptions":{}}},"id":22837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10159:26:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":22840,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10197:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":22839,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10189:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22838,"name":"address","nodeType":"ElementaryTypeName","src":"10189:7:87","typeDescriptions":{}}},"id":22841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10189:10:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10159:40:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22847,"nodeType":"IfStatement","src":"10155:104:87","trueBody":{"id":22846,"nodeType":"Block","src":"10201:58:87","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22843,"name":"InvalidProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1020,"src":"10222:24:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10222:26:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22845,"nodeType":"RevertStatement","src":"10215:33:87"}]}},{"expression":{"id":22852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":22848,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22353,"src":"10269:19:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":22850,"indexExpression":{"id":22849,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22817,"src":"10289:17:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10269:38:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":22851,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10310:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"10269:45:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22853,"nodeType":"ExpressionStatement","src":"10269:45:87"},{"eventCall":{"arguments":[{"arguments":[{"id":22857,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22817,"src":"10361:17:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22856,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10353:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22855,"name":"address","nodeType":"ElementaryTypeName","src":"10353:7:87","typeDescriptions":{}}},"id":22858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10353:26:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22854,"name":"ProtocolFeeBurnerAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1006,"src":"10330:22:87","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":22859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10330:50:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22860,"nodeType":"EmitStatement","src":"10325:55:87"}]},"documentation":{"id":22814,"nodeType":"StructuredDocumentation","src":"9741:35:87","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"e20c482f","id":22862,"implemented":true,"kind":"function","modifiers":[{"id":22820,"kind":"modifierInvocation","modifierName":{"id":22819,"name":"onlyFeeRecipientOrGovernance","nameLocations":["9858:28:87"],"nodeType":"IdentifierPath","referencedDeclaration":22366,"src":"9858:28:87"},"nodeType":"ModifierInvocation","src":"9858:28:87"}],"name":"addProtocolFeeBurner","nameLocation":"9790:20:87","nodeType":"FunctionDefinition","parameters":{"id":22818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22817,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"9830:17:87","nodeType":"VariableDeclaration","scope":22862,"src":"9811:36:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":22816,"nodeType":"UserDefinedTypeName","pathNode":{"id":22815,"name":"IProtocolFeeBurner","nameLocations":["9811:18:87"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"9811:18:87"},"referencedDeclaration":948,"src":"9811:18:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"9810:38:87"},"returnParameters":{"id":22821,"nodeType":"ParameterList","parameters":[],"src":"9887:0:87"},"scope":22987,"src":"9781:606:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1128],"body":{"id":22898,"nodeType":"Block","src":"10542:279:87","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":22875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":22871,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22353,"src":"10556:19:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":22873,"indexExpression":{"id":22872,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22866,"src":"10576:17:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10556:38:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":22874,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10598:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10556:47:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22884,"nodeType":"IfStatement","src":"10552:138:87","trueBody":{"id":22883,"nodeType":"Block","src":"10605:85:87","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":22879,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22866,"src":"10660:17:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22878,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10652:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22877,"name":"address","nodeType":"ElementaryTypeName","src":"10652:7:87","typeDescriptions":{}}},"id":22880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10652:26:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22876,"name":"ProtocolFeeBurnerNotAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1035,"src":"10626:25:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":22881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10626:53:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22882,"nodeType":"RevertStatement","src":"10619:60:87"}]}},{"expression":{"id":22889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":22885,"name":"_protocolFeeBurners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22353,"src":"10700:19:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IProtocolFeeBurner_$948_$_t_bool_$","typeString":"mapping(contract IProtocolFeeBurner => bool)"}},"id":22887,"indexExpression":{"id":22886,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22866,"src":"10720:17:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10700:38:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":22888,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10741:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"10700:46:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22890,"nodeType":"ExpressionStatement","src":"10700:46:87"},{"eventCall":{"arguments":[{"arguments":[{"id":22894,"name":"protocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22866,"src":"10795:17:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}],"id":22893,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10787:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22892,"name":"address","nodeType":"ElementaryTypeName","src":"10787:7:87","typeDescriptions":{}}},"id":22895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10787:26:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22891,"name":"ProtocolFeeBurnerRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1011,"src":"10762:24:87","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":22896,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10762:52:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22897,"nodeType":"EmitStatement","src":"10757:57:87"}]},"documentation":{"id":22863,"nodeType":"StructuredDocumentation","src":"10393:35:87","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"b11f061e","id":22899,"implemented":true,"kind":"function","modifiers":[{"id":22869,"kind":"modifierInvocation","modifierName":{"id":22868,"name":"onlyFeeRecipientOrGovernance","nameLocations":["10513:28:87"],"nodeType":"IdentifierPath","referencedDeclaration":22366,"src":"10513:28:87"},"nodeType":"ModifierInvocation","src":"10513:28:87"}],"name":"removeProtocolFeeBurner","nameLocation":"10442:23:87","nodeType":"FunctionDefinition","parameters":{"id":22867,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22866,"mutability":"mutable","name":"protocolFeeBurner","nameLocation":"10485:17:87","nodeType":"VariableDeclaration","scope":22899,"src":"10466:36:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"},"typeName":{"id":22865,"nodeType":"UserDefinedTypeName","pathNode":{"id":22864,"name":"IProtocolFeeBurner","nameLocations":["10466:18:87"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"10466:18:87"},"referencedDeclaration":948,"src":"10466:18:87","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeBurner_$948","typeString":"contract IProtocolFeeBurner"}},"visibility":"internal"}],"src":"10465:38:87"},"returnParameters":{"id":22870,"nodeType":"ParameterList","parameters":[],"src":"10542:0:87"},"scope":22987,"src":"10433:388:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1136],"body":{"id":22961,"nodeType":"Block","src":"10945:397:87","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22909,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10959:3:87","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10963:6:87","memberName":"sender","nodeType":"MemberAccess","src":"10959:10:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":22911,"name":"_feeRecipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22348,"src":"10973:13:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10959:27:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22917,"nodeType":"IfStatement","src":"10955:83:87","trueBody":{"id":22916,"nodeType":"Block","src":"10988:50:87","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22913,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"11009:16:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22914,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11009:18:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22915,"nodeType":"RevertStatement","src":"11002:25:87"}]}},{"body":{"id":22959,"nodeType":"Block","src":"11095:241:87","statements":[{"assignments":[22931],"declarations":[{"constant":false,"id":22931,"mutability":"mutable","name":"feeToken","nameLocation":"11116:8:87","nodeType":"VariableDeclaration","scope":22959,"src":"11109:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":22930,"nodeType":"UserDefinedTypeName","pathNode":{"id":22929,"name":"IERC20","nameLocations":["11109:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"11109:6:87"},"referencedDeclaration":10558,"src":"11109:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"id":22935,"initialValue":{"baseExpression":{"id":22932,"name":"feeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22904,"src":"11127:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":22934,"indexExpression":{"id":22933,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22919,"src":"11137:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11127:12:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"11109:30:87"},{"assignments":[22937],"declarations":[{"constant":false,"id":22937,"mutability":"mutable","name":"tokenBalance","nameLocation":"11161:12:87","nodeType":"VariableDeclaration","scope":22959,"src":"11153:20:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22936,"name":"uint256","nodeType":"ElementaryTypeName","src":"11153:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22945,"initialValue":{"arguments":[{"arguments":[{"id":22942,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11203:4:87","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$22987","typeString":"contract ProtocolFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeSweeper_$22987","typeString":"contract ProtocolFeeSweeper"}],"id":22941,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11195:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22940,"name":"address","nodeType":"ElementaryTypeName","src":"11195:7:87","typeDescriptions":{}}},"id":22943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11195:13:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22938,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22931,"src":"11176:8:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":22939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11185:9:87","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10515,"src":"11176:18:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":22944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11176:33:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11153:56:87"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22946,"name":"tokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22937,"src":"11228:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":22947,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11243:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11228:16:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22958,"nodeType":"IfStatement","src":"11224:102:87","trueBody":{"id":22957,"nodeType":"Block","src":"11246:80:87","statements":[{"expression":{"arguments":[{"expression":{"id":22952,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11286:3:87","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11290:6:87","memberName":"sender","nodeType":"MemberAccess","src":"11286:10:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22954,"name":"tokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22937,"src":"11298:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22949,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22931,"src":"11264:8:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":22951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11273:12:87","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10629,"src":"11264:21:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10558_$","typeString":"function (contract IERC20,address,uint256)"}},"id":22955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11264:47:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22956,"nodeType":"ExpressionStatement","src":"11264:47:87"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22922,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22919,"src":"11068:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":22923,"name":"feeTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22904,"src":"11072:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":22924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11082:6:87","memberName":"length","nodeType":"MemberAccess","src":"11072:16:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11068:20:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22960,"initializationExpression":{"assignments":[22919],"declarations":[{"constant":false,"id":22919,"mutability":"mutable","name":"i","nameLocation":"11061:1:87","nodeType":"VariableDeclaration","scope":22960,"src":"11053:9:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22918,"name":"uint256","nodeType":"ElementaryTypeName","src":"11053:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22921,"initialValue":{"hexValue":"30","id":22920,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11065:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11053:13:87"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":22927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11090:3:87","subExpression":{"id":22926,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22919,"src":"11092:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22928,"nodeType":"ExpressionStatement","src":"11090:3:87"},"nodeType":"ForStatement","src":"11048:288:87"}]},"documentation":{"id":22900,"nodeType":"StructuredDocumentation","src":"10827:35:87","text":"@inheritdoc IProtocolFeeSweeper"},"functionSelector":"b0edcc53","id":22962,"implemented":true,"kind":"function","modifiers":[{"id":22907,"kind":"modifierInvocation","modifierName":{"id":22906,"name":"nonReentrant","nameLocations":["10932:12:87"],"nodeType":"IdentifierPath","referencedDeclaration":6949,"src":"10932:12:87"},"nodeType":"ModifierInvocation","src":"10932:12:87"}],"name":"recoverProtocolFees","nameLocation":"10876:19:87","nodeType":"FunctionDefinition","parameters":{"id":22905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22904,"mutability":"mutable","name":"feeTokens","nameLocation":"10912:9:87","nodeType":"VariableDeclaration","scope":22962,"src":"10896:25:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":22902,"nodeType":"UserDefinedTypeName","pathNode":{"id":22901,"name":"IERC20","nameLocations":["10896:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"10896:6:87"},"referencedDeclaration":10558,"src":"10896:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":22903,"nodeType":"ArrayTypeName","src":"10896:8:87","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"10895:27:87"},"returnParameters":{"id":22908,"nodeType":"ParameterList","parameters":[],"src":"10945:0:87"},"scope":22987,"src":"10867:475:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":22968,"nodeType":"Block","src":"11824:42:87","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22965,"name":"CannotReceiveEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22343,"src":"11841:16:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11841:18:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22967,"nodeType":"RevertStatement","src":"11834:25:87"}]},"id":22969,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22963,"nodeType":"ParameterList","parameters":[],"src":"11804:2:87"},"returnParameters":{"id":22964,"nodeType":"ParameterList","parameters":[],"src":"11824:0:87"},"scope":22987,"src":"11797:69:87","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":22985,"nodeType":"Block","src":"11944:121:87","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22972,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11958:3:87","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11962:5:87","memberName":"value","nodeType":"MemberAccess","src":"11958:9:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":22974,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11970:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11958:13:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22980,"nodeType":"IfStatement","src":"11954:69:87","trueBody":{"id":22979,"nodeType":"Block","src":"11973:50:87","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22976,"name":"CannotReceiveEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22343,"src":"11994:16:87","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11994:18:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22978,"nodeType":"RevertStatement","src":"11987:25:87"}]}},{"expression":{"arguments":[{"hexValue":"4e6f7420696d706c656d656e746564","id":22982,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12040:17:87","typeDescriptions":{"typeIdentifier":"t_stringliteral_9f5474d7a5849b3f79e8aee7ea2c60bcd36a60a08b4fa41f97e2fccf1c4df98b","typeString":"literal_string \"Not implemented\""},"value":"Not implemented"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9f5474d7a5849b3f79e8aee7ea2c60bcd36a60a08b4fa41f97e2fccf1c4df98b","typeString":"literal_string \"Not implemented\""}],"id":22981,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"12033:6:87","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":22983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12033:25:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22984,"nodeType":"ExpressionStatement","src":"12033:25:87"}]},"id":22986,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22970,"nodeType":"ParameterList","parameters":[],"src":"11924:2:87"},"returnParameters":{"id":22971,"nodeType":"ParameterList","parameters":[],"src":"11944:0:87"},"scope":22987,"src":"11916:149:87","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":22988,"src":"1713:10354:87","usedErrors":[5,1014,1017,1020,1025,1030,1035,1038,1041,6938,7337,10596,22343],"usedEvents":[984,989,1001,1006,1011]}],"src":"46:12022:87"},"id":87},"contracts/TokenPairRegistry.sol":{"ast":{"absolutePath":"contracts/TokenPairRegistry.sol","exportedSymbols":{"EnumerableSet":[6925],"IERC20":[10558],"IERC4626":[9828],"ITokenPairRegistry":[1263],"IVault":[2527],"InputHelpers":[4700],"OwnableAuthentication":[20312],"SwapPathStep":[1275],"TokenPairRegistry":[23997]},"id":23998,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":22989,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:88"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":22991,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23998,"sourceUnit":9829,"src":"72:75:88","symbolAliases":[{"foreign":{"id":22990,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9828,"src":"81:8:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":22993,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23998,"sourceUnit":10559,"src":"148:72:88","symbolAliases":[{"foreign":{"id":22992,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"157:6:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol","id":22995,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23998,"sourceUnit":1264,"src":"222:116:88","symbolAliases":[{"foreign":{"id":22994,"name":"ITokenPairRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1263,"src":"231:18:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol","id":22997,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23998,"sourceUnit":1326,"src":"339:97:88","symbolAliases":[{"foreign":{"id":22996,"name":"SwapPathStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1275,"src":"348:12:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":22999,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23998,"sourceUnit":2528,"src":"437:81:88","symbolAliases":[{"foreign":{"id":22998,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"446:6:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol","id":23001,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23998,"sourceUnit":6926,"src":"520:106:88","symbolAliases":[{"foreign":{"id":23000,"name":"EnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6925,"src":"529:13:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","id":23003,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23998,"sourceUnit":4701,"src":"627:99:88","symbolAliases":[{"foreign":{"id":23002,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4700,"src":"636:12:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/OwnableAuthentication.sol","file":"./OwnableAuthentication.sol","id":23005,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23998,"sourceUnit":20313,"src":"728:68:88","symbolAliases":[{"foreign":{"id":23004,"name":"OwnableAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20312,"src":"737:21:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":23007,"name":"ITokenPairRegistry","nameLocations":["1188:18:88"],"nodeType":"IdentifierPath","referencedDeclaration":1263,"src":"1188:18:88"},"id":23008,"nodeType":"InheritanceSpecifier","src":"1188:18:88"},{"baseName":{"id":23009,"name":"OwnableAuthentication","nameLocations":["1208:21:88"],"nodeType":"IdentifierPath","referencedDeclaration":20312,"src":"1208:21:88"},"id":23010,"nodeType":"InheritanceSpecifier","src":"1208:21:88"}],"canonicalName":"TokenPairRegistry","contractDependencies":[],"contractKind":"contract","documentation":{"id":23006,"nodeType":"StructuredDocumentation","src":"798:359:88","text":" @notice Stores token pair swap paths on-chain, allowing an admin to maintain swap routes.\n @dev The paths are stored as arrays of `SwapPathStep` structs, which contain the pool or buffer\n address, the output token, and a boolean indicating whether the step is a buffer or not.\n Functions that add information to the registry are permissioned."},"fullyImplemented":true,"id":23997,"linearizedBaseContracts":[23997,20312,4367,14,9554,9468,12348,1263],"name":"TokenPairRegistry","nameLocation":"1167:17:88","nodeType":"ContractDefinition","nodes":[{"global":false,"id":23014,"libraryName":{"id":23011,"name":"EnumerableSet","nameLocations":["1242:13:88"],"nodeType":"IdentifierPath","referencedDeclaration":6925,"src":"1242:13:88"},"nodeType":"UsingForDirective","src":"1236:49:88","typeName":{"id":23013,"nodeType":"UserDefinedTypeName","pathNode":{"id":23012,"name":"EnumerableSet.AddressSet","nameLocations":["1260:13:88","1274:10:88"],"nodeType":"IdentifierPath","referencedDeclaration":6647,"src":"1260:24:88"},"referencedDeclaration":6647,"src":"1260:24:88","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$6647_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}}},{"constant":false,"id":23021,"mutability":"mutable","name":"_pairsToPaths","nameLocation":"1350:13:88","nodeType":"VariableDeclaration","scope":23997,"src":"1291:72:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep[][])"},"typeName":{"id":23020,"keyName":"pairId","keyNameLocation":"1307:6:88","keyType":{"id":23015,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1299:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"1291:49:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep[][])"},"valueName":"paths","valueNameLocation":"1334:5:88","valueType":{"baseType":{"baseType":{"id":23017,"nodeType":"UserDefinedTypeName","pathNode":{"id":23016,"name":"SwapPathStep","nameLocations":["1317:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"1317:12:88"},"referencedDeclaration":1275,"src":"1317:12:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23018,"nodeType":"ArrayTypeName","src":"1317:14:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":23019,"nodeType":"ArrayTypeName","src":"1317:16:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}}},"visibility":"internal"},{"body":{"id":23033,"nodeType":"Block","src":"1461:64:88","statements":[]},"id":23034,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":23029,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23024,"src":"1440:5:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},{"id":23030,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23026,"src":"1447:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":23031,"kind":"baseConstructorSpecifier","modifierName":{"id":23028,"name":"OwnableAuthentication","nameLocations":["1418:21:88"],"nodeType":"IdentifierPath","referencedDeclaration":20312,"src":"1418:21:88"},"nodeType":"ModifierInvocation","src":"1418:42:88"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":23027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23024,"mutability":"mutable","name":"vault","nameLocation":"1389:5:88","nodeType":"VariableDeclaration","scope":23034,"src":"1382:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":23023,"nodeType":"UserDefinedTypeName","pathNode":{"id":23022,"name":"IVault","nameLocations":["1382:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"1382:6:88"},"referencedDeclaration":2527,"src":"1382:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":23026,"mutability":"mutable","name":"initialOwner","nameLocation":"1404:12:88","nodeType":"VariableDeclaration","scope":23034,"src":"1396:20:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23025,"name":"address","nodeType":"ElementaryTypeName","src":"1396:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1381:36:88"},"returnParameters":{"id":23032,"nodeType":"ParameterList","parameters":[],"src":"1461:0:88"},"scope":23997,"src":"1370:155:88","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1207],"body":{"id":23061,"nodeType":"Block","src":"1685:115:88","statements":[{"assignments":[23049],"declarations":[{"constant":false,"id":23049,"mutability":"mutable","name":"tokenId","nameLocation":"1703:7:88","nodeType":"VariableDeclaration","scope":23061,"src":"1695:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23048,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1695:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23054,"initialValue":{"arguments":[{"id":23051,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23037,"src":"1729:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23052,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23039,"src":"1738:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23050,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23837,"src":"1713:15:88","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1713:34:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1695:52:88"},{"expression":{"baseExpression":{"baseExpression":{"id":23055,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23021,"src":"1764:13:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23057,"indexExpression":{"id":23056,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23049,"src":"1778:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1764:22:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"id":23059,"indexExpression":{"id":23058,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23041,"src":"1787:5:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1764:29:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"functionReturnParameters":23047,"id":23060,"nodeType":"Return","src":"1757:36:88"}]},"documentation":{"id":23035,"nodeType":"StructuredDocumentation","src":"1531:34:88","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"057074ff","id":23062,"implemented":true,"kind":"function","modifiers":[],"name":"getPathAt","nameLocation":"1579:9:88","nodeType":"FunctionDefinition","parameters":{"id":23042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23037,"mutability":"mutable","name":"tokenIn","nameLocation":"1597:7:88","nodeType":"VariableDeclaration","scope":23062,"src":"1589:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23036,"name":"address","nodeType":"ElementaryTypeName","src":"1589:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23039,"mutability":"mutable","name":"tokenOut","nameLocation":"1614:8:88","nodeType":"VariableDeclaration","scope":23062,"src":"1606:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23038,"name":"address","nodeType":"ElementaryTypeName","src":"1606:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23041,"mutability":"mutable","name":"index","nameLocation":"1632:5:88","nodeType":"VariableDeclaration","scope":23062,"src":"1624:13:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23040,"name":"uint256","nodeType":"ElementaryTypeName","src":"1624:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1588:50:88"},"returnParameters":{"id":23047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23046,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23062,"src":"1662:21:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":23044,"nodeType":"UserDefinedTypeName","pathNode":{"id":23043,"name":"SwapPathStep","nameLocations":["1662:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"1662:12:88"},"referencedDeclaration":1275,"src":"1662:12:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23045,"nodeType":"ArrayTypeName","src":"1662:14:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"}],"src":"1661:23:88"},"scope":23997,"src":"1570:230:88","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1217],"body":{"id":23084,"nodeType":"Block","src":"1934:115:88","statements":[{"assignments":[23073],"declarations":[{"constant":false,"id":23073,"mutability":"mutable","name":"tokenId","nameLocation":"1952:7:88","nodeType":"VariableDeclaration","scope":23084,"src":"1944:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23072,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1944:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23078,"initialValue":{"arguments":[{"id":23075,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23065,"src":"1978:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23076,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23067,"src":"1987:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23074,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23837,"src":"1962:15:88","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1962:34:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1944:52:88"},{"expression":{"expression":{"baseExpression":{"id":23079,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23021,"src":"2013:13:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23081,"indexExpression":{"id":23080,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23073,"src":"2027:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2013:22:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"id":23082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2036:6:88","memberName":"length","nodeType":"MemberAccess","src":"2013:29:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23071,"id":23083,"nodeType":"Return","src":"2006:36:88"}]},"documentation":{"id":23063,"nodeType":"StructuredDocumentation","src":"1806:34:88","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"94ee0a3b","id":23085,"implemented":true,"kind":"function","modifiers":[],"name":"getPathCount","nameLocation":"1854:12:88","nodeType":"FunctionDefinition","parameters":{"id":23068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23065,"mutability":"mutable","name":"tokenIn","nameLocation":"1875:7:88","nodeType":"VariableDeclaration","scope":23085,"src":"1867:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23064,"name":"address","nodeType":"ElementaryTypeName","src":"1867:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23067,"mutability":"mutable","name":"tokenOut","nameLocation":"1892:8:88","nodeType":"VariableDeclaration","scope":23085,"src":"1884:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23066,"name":"address","nodeType":"ElementaryTypeName","src":"1884:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1866:35:88"},"returnParameters":{"id":23071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23070,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23085,"src":"1925:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23069,"name":"uint256","nodeType":"ElementaryTypeName","src":"1925:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1924:9:88"},"scope":23997,"src":"1845:204:88","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1230],"body":{"id":23109,"nodeType":"Block","src":"2195:108:88","statements":[{"assignments":[23099],"declarations":[{"constant":false,"id":23099,"mutability":"mutable","name":"tokenId","nameLocation":"2213:7:88","nodeType":"VariableDeclaration","scope":23109,"src":"2205:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23098,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2205:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23104,"initialValue":{"arguments":[{"id":23101,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23088,"src":"2239:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23102,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23090,"src":"2248:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23100,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23837,"src":"2223:15:88","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2223:34:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2205:52:88"},{"expression":{"baseExpression":{"id":23105,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23021,"src":"2274:13:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23107,"indexExpression":{"id":23106,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23099,"src":"2288:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2274:22:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"functionReturnParameters":23097,"id":23108,"nodeType":"Return","src":"2267:29:88"}]},"documentation":{"id":23086,"nodeType":"StructuredDocumentation","src":"2055:34:88","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"7c7d370a","id":23110,"implemented":true,"kind":"function","modifiers":[],"name":"getPaths","nameLocation":"2103:8:88","nodeType":"FunctionDefinition","parameters":{"id":23091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23088,"mutability":"mutable","name":"tokenIn","nameLocation":"2120:7:88","nodeType":"VariableDeclaration","scope":23110,"src":"2112:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23087,"name":"address","nodeType":"ElementaryTypeName","src":"2112:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23090,"mutability":"mutable","name":"tokenOut","nameLocation":"2137:8:88","nodeType":"VariableDeclaration","scope":23110,"src":"2129:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23089,"name":"address","nodeType":"ElementaryTypeName","src":"2129:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2111:35:88"},"returnParameters":{"id":23097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23096,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23110,"src":"2170:23:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep[][]"},"typeName":{"baseType":{"baseType":{"id":23093,"nodeType":"UserDefinedTypeName","pathNode":{"id":23092,"name":"SwapPathStep","nameLocations":["2170:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"2170:12:88"},"referencedDeclaration":1275,"src":"2170:12:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23094,"nodeType":"ArrayTypeName","src":"2170:14:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":23095,"nodeType":"ArrayTypeName","src":"2170:16:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}},"visibility":"internal"}],"src":"2169:25:88"},"scope":23997,"src":"2094:209:88","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1240],"body":{"id":23259,"nodeType":"Block","src":"2433:980:88","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23122,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23117,"src":"2447:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2453:6:88","memberName":"length","nodeType":"MemberAccess","src":"2447:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":23124,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2463:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2447:17:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23130,"nodeType":"IfStatement","src":"2443:66:88","trueBody":{"id":23129,"nodeType":"Block","src":"2466:43:88","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":23126,"name":"EmptyPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1167,"src":"2487:9:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":23127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2487:11:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23128,"nodeType":"RevertStatement","src":"2480:18:88"}]}},{"assignments":[23132],"declarations":[{"constant":false,"id":23132,"mutability":"mutable","name":"tokenOut","nameLocation":"2527:8:88","nodeType":"VariableDeclaration","scope":23259,"src":"2519:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23131,"name":"address","nodeType":"ElementaryTypeName","src":"2519:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":23143,"initialValue":{"arguments":[{"expression":{"baseExpression":{"id":23135,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23117,"src":"2546:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23140,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23136,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23117,"src":"2552:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2558:6:88","memberName":"length","nodeType":"MemberAccess","src":"2552:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23138,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2567:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2552:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2546:23:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23141,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2570:8:88","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1272,"src":"2546:32:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":23134,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2538:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23133,"name":"address","nodeType":"ElementaryTypeName","src":"2538:7:88","typeDescriptions":{}}},"id":23142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2538:41:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2519:60:88"},{"assignments":[23145],"declarations":[{"constant":false,"id":23145,"mutability":"mutable","name":"tokenId","nameLocation":"2597:7:88","nodeType":"VariableDeclaration","scope":23259,"src":"2589:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23144,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2589:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23150,"initialValue":{"arguments":[{"id":23147,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23113,"src":"2623:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23148,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23132,"src":"2632:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23146,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23837,"src":"2607:15:88","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2607:34:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2589:52:88"},{"assignments":[23152],"declarations":[{"constant":false,"id":23152,"mutability":"mutable","name":"stepTokenIn","nameLocation":"2660:11:88","nodeType":"VariableDeclaration","scope":23259,"src":"2652:19:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23151,"name":"address","nodeType":"ElementaryTypeName","src":"2652:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":23154,"initialValue":{"id":23153,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23113,"src":"2674:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2652:29:88"},{"body":{"id":23208,"nodeType":"Block","src":"2734:396:88","statements":[{"assignments":[23168],"declarations":[{"constant":false,"id":23168,"mutability":"mutable","name":"step","nameLocation":"2768:4:88","nodeType":"VariableDeclaration","scope":23208,"src":"2748:24:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep"},"typeName":{"id":23167,"nodeType":"UserDefinedTypeName","pathNode":{"id":23166,"name":"SwapPathStep","nameLocations":["2748:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"2748:12:88"},"referencedDeclaration":1275,"src":"2748:12:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"visibility":"internal"}],"id":23172,"initialValue":{"baseExpression":{"id":23169,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23117,"src":"2775:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23171,"indexExpression":{"id":23170,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23156,"src":"2781:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2775:8:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"nodeType":"VariableDeclarationStatement","src":"2748:35:88"},{"condition":{"expression":{"id":23173,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23168,"src":"2801:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23174,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2806:8:88","memberName":"isBuffer","nodeType":"MemberAccess","referencedDeclaration":1274,"src":"2801:13:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":23198,"nodeType":"Block","src":"2919:95:88","statements":[{"expression":{"arguments":[{"expression":{"id":23188,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23168,"src":"2952:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23189,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2957:4:88","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1269,"src":"2952:9:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23190,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23152,"src":"2963:11:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":23193,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23168,"src":"2984:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23194,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2989:8:88","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1272,"src":"2984:13:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":23192,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2976:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23191,"name":"address","nodeType":"ElementaryTypeName","src":"2976:7:88","typeDescriptions":{}}},"id":23195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2976:22:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23187,"name":"_checkPoolStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23996,"src":"2937:14:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address) view"}},"id":23196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2937:62:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23197,"nodeType":"ExpressionStatement","src":"2937:62:88"}]},"id":23199,"nodeType":"IfStatement","src":"2797:217:88","trueBody":{"id":23186,"nodeType":"Block","src":"2816:97:88","statements":[{"expression":{"arguments":[{"expression":{"id":23176,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23168,"src":"2851:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23177,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2856:4:88","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1269,"src":"2851:9:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23178,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23152,"src":"2862:11:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":23181,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23168,"src":"2883:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23182,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2888:8:88","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1272,"src":"2883:13:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":23180,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2875:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23179,"name":"address","nodeType":"ElementaryTypeName","src":"2875:7:88","typeDescriptions":{}}},"id":23183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2875:22:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23175,"name":"_checkBufferStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23916,"src":"2834:16:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address) view"}},"id":23184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2834:64:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23185,"nodeType":"ExpressionStatement","src":"2834:64:88"}]}},{"expression":{"id":23206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23200,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23152,"src":"3083:11:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":23203,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23168,"src":"3105:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"id":23204,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3110:8:88","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1272,"src":"3105:13:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":23202,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3097:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23201,"name":"address","nodeType":"ElementaryTypeName","src":"3097:7:88","typeDescriptions":{}}},"id":23205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3097:22:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3083:36:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":23207,"nodeType":"ExpressionStatement","src":"3083:36:88"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23159,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23156,"src":"2711:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23160,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23117,"src":"2715:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2721:6:88","memberName":"length","nodeType":"MemberAccess","src":"2715:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2711:16:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23209,"initializationExpression":{"assignments":[23156],"declarations":[{"constant":false,"id":23156,"mutability":"mutable","name":"i","nameLocation":"2704:1:88","nodeType":"VariableDeclaration","scope":23209,"src":"2696:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23155,"name":"uint256","nodeType":"ElementaryTypeName","src":"2696:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23158,"initialValue":{"hexValue":"30","id":23157,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2708:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2696:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2729:3:88","subExpression":{"id":23163,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23156,"src":"2731:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23165,"nodeType":"ExpressionStatement","src":"2729:3:88"},"nodeType":"ForStatement","src":"2691:439:88"},{"assignments":[23215],"declarations":[{"constant":false,"id":23215,"mutability":"mutable","name":"paths","nameLocation":"3165:5:88","nodeType":"VariableDeclaration","scope":23259,"src":"3140:30:88","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"},"typeName":{"baseType":{"baseType":{"id":23212,"nodeType":"UserDefinedTypeName","pathNode":{"id":23211,"name":"SwapPathStep","nameLocations":["3140:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"3140:12:88"},"referencedDeclaration":1275,"src":"3140:12:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23213,"nodeType":"ArrayTypeName","src":"3140:14:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":23214,"nodeType":"ArrayTypeName","src":"3140:16:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}},"visibility":"internal"}],"id":23219,"initialValue":{"baseExpression":{"id":23216,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23021,"src":"3173:13:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23218,"indexExpression":{"id":23217,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23145,"src":"3187:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3173:22:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3140:55:88"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23220,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23215,"src":"3205:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3211:4:88","memberName":"push","nodeType":"MemberAccess","src":"3205:10:88","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$returns$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$attached_to$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$","typeString":"function (struct SwapPathStep storage ref[] storage ref[] storage pointer) returns (struct SwapPathStep storage ref[] storage ref)"}},"id":23223,"isConstant":false,"isLValue":true,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3205:12:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"id":23224,"nodeType":"ExpressionStatement","src":"3205:12:88"},{"body":{"id":23248,"nodeType":"Block","src":"3270:63:88","statements":[{"expression":{"arguments":[{"baseExpression":{"id":23243,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23117,"src":"3313:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23245,"indexExpression":{"id":23244,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23226,"src":"3319:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3313:8:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}],"expression":{"baseExpression":{"id":23236,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23215,"src":"3284:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23241,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23237,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23215,"src":"3290:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3296:6:88","memberName":"length","nodeType":"MemberAccess","src":"3290:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3305:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3290:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3284:23:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"id":23242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3308:4:88","memberName":"push","nodeType":"MemberAccess","src":"3284:28:88","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr_$_t_struct$_SwapPathStep_$1275_storage_$returns$__$attached_to$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr_$","typeString":"function (struct SwapPathStep storage ref[] storage pointer,struct SwapPathStep storage ref)"}},"id":23246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3284:38:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23247,"nodeType":"ExpressionStatement","src":"3284:38:88"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23229,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23226,"src":"3247:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23230,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23117,"src":"3251:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep memory[] memory"}},"id":23231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3257:6:88","memberName":"length","nodeType":"MemberAccess","src":"3251:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3247:16:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23249,"initializationExpression":{"assignments":[23226],"declarations":[{"constant":false,"id":23226,"mutability":"mutable","name":"i","nameLocation":"3240:1:88","nodeType":"VariableDeclaration","scope":23249,"src":"3232:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23225,"name":"uint256","nodeType":"ElementaryTypeName","src":"3232:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23228,"initialValue":{"hexValue":"30","id":23227,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3244:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3232:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3265:3:88","subExpression":{"id":23233,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23226,"src":"3267:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23235,"nodeType":"ExpressionStatement","src":"3265:3:88"},"nodeType":"ForStatement","src":"3227:106:88"},{"eventCall":{"arguments":[{"id":23251,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23113,"src":"3357:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23252,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23132,"src":"3366:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":23253,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23021,"src":"3376:13:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23255,"indexExpression":{"id":23254,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23145,"src":"3390:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3376:22:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"id":23256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3399:6:88","memberName":"length","nodeType":"MemberAccess","src":"3376:29:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23250,"name":"PathAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1150,"src":"3347:9:88","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3347:59:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23258,"nodeType":"EmitStatement","src":"3342:64:88"}]},"documentation":{"id":23111,"nodeType":"StructuredDocumentation","src":"2309:34:88","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"815ca70f","id":23260,"implemented":true,"kind":"function","modifiers":[{"id":23120,"kind":"modifierInvocation","modifierName":{"id":23119,"name":"authenticate","nameLocations":["2420:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"2420:12:88"},"nodeType":"ModifierInvocation","src":"2420:12:88"}],"name":"addPath","nameLocation":"2357:7:88","nodeType":"FunctionDefinition","parameters":{"id":23118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23113,"mutability":"mutable","name":"tokenIn","nameLocation":"2373:7:88","nodeType":"VariableDeclaration","scope":23260,"src":"2365:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23112,"name":"address","nodeType":"ElementaryTypeName","src":"2365:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23117,"mutability":"mutable","name":"steps","nameLocation":"2404:5:88","nodeType":"VariableDeclaration","scope":23260,"src":"2382:27:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_memory_ptr_$dyn_memory_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":23115,"nodeType":"UserDefinedTypeName","pathNode":{"id":23114,"name":"SwapPathStep","nameLocations":["2382:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"2382:12:88"},"referencedDeclaration":1275,"src":"2382:12:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23116,"nodeType":"ArrayTypeName","src":"2382:14:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"}],"src":"2364:46:88"},"returnParameters":{"id":23121,"nodeType":"ParameterList","parameters":[],"src":"2433:0:88"},"scope":23997,"src":"2348:1065:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1246],"body":{"id":23297,"nodeType":"Block","src":"3525:301:88","statements":[{"condition":{"arguments":[{"id":23270,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23263,"src":"3562:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23268,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20200,"src":"3539:5:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":23269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3545:16:88","memberName":"isPoolRegistered","nodeType":"MemberAccess","referencedDeclaration":3522,"src":"3539:22:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":23271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3539:36:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"arguments":[{"arguments":[{"id":23280,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23263,"src":"3676:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23279,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9828,"src":"3667:8:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9828_$","typeString":"type(contract IERC4626)"}},"id":23281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3667:22:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}],"expression":{"id":23277,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20200,"src":"3634:5:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":23278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3640:26:88","memberName":"isERC4626BufferInitialized","nodeType":"MemberAccess","referencedDeclaration":3710,"src":"3634:32:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_IERC4626_$9828_$returns$_t_bool_$","typeString":"function (contract IERC4626) view external returns (bool)"}},"id":23282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3634:56:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":23294,"nodeType":"Block","src":"3757:63:88","statements":[{"errorCall":{"arguments":[{"id":23291,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23263,"src":"3796:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23290,"name":"InvalidSimplePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1172,"src":"3778:17:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":23292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3778:31:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23293,"nodeType":"RevertStatement","src":"3771:38:88"}]},"id":23295,"nodeType":"IfStatement","src":"3630:190:88","trueBody":{"id":23289,"nodeType":"Block","src":"3692:59:88","statements":[{"expression":{"arguments":[{"arguments":[{"id":23285,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23263,"src":"3726:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23284,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9828,"src":"3717:8:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9828_$","typeString":"type(contract IERC4626)"}},"id":23286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3717:22:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}],"id":23283,"name":"_addBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23507,"src":"3706:10:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC4626_$9828_$returns$__$","typeString":"function (contract IERC4626)"}},"id":23287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3706:34:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23288,"nodeType":"ExpressionStatement","src":"3706:34:88"}]}},"id":23296,"nodeType":"IfStatement","src":"3535:285:88","trueBody":{"id":23276,"nodeType":"Block","src":"3577:47:88","statements":[{"expression":{"arguments":[{"id":23273,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23263,"src":"3600:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23272,"name":"_addPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23479,"src":"3591:8:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":23274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3591:22:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23275,"nodeType":"ExpressionStatement","src":"3591:22:88"}]}}]},"documentation":{"id":23261,"nodeType":"StructuredDocumentation","src":"3419:34:88","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"f335b520","id":23298,"implemented":true,"kind":"function","modifiers":[{"id":23266,"kind":"modifierInvocation","modifierName":{"id":23265,"name":"authenticate","nameLocations":["3512:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"3512:12:88"},"nodeType":"ModifierInvocation","src":"3512:12:88"}],"name":"addSimplePath","nameLocation":"3467:13:88","nodeType":"FunctionDefinition","parameters":{"id":23264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23263,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"3489:12:88","nodeType":"VariableDeclaration","scope":23298,"src":"3481:20:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23262,"name":"address","nodeType":"ElementaryTypeName","src":"3481:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3480:22:88"},"returnParameters":{"id":23267,"nodeType":"ParameterList","parameters":[],"src":"3525:0:88"},"scope":23997,"src":"3458:368:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1256],"body":{"id":23373,"nodeType":"Block","src":"3970:583:88","statements":[{"assignments":[23311],"declarations":[{"constant":false,"id":23311,"mutability":"mutable","name":"tokenId","nameLocation":"3988:7:88","nodeType":"VariableDeclaration","scope":23373,"src":"3980:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23310,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3980:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23316,"initialValue":{"arguments":[{"id":23313,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23301,"src":"4014:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23314,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23303,"src":"4023:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23312,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23837,"src":"3998:15:88","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3998:34:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3980:52:88"},{"assignments":[23322],"declarations":[{"constant":false,"id":23322,"mutability":"mutable","name":"paths","nameLocation":"4067:5:88","nodeType":"VariableDeclaration","scope":23373,"src":"4042:30:88","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"},"typeName":{"baseType":{"baseType":{"id":23319,"nodeType":"UserDefinedTypeName","pathNode":{"id":23318,"name":"SwapPathStep","nameLocations":["4042:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"4042:12:88"},"referencedDeclaration":1275,"src":"4042:12:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23320,"nodeType":"ArrayTypeName","src":"4042:14:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":23321,"nodeType":"ArrayTypeName","src":"4042:16:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}},"visibility":"internal"}],"id":23326,"initialValue":{"baseExpression":{"id":23323,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23021,"src":"4075:13:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23325,"indexExpression":{"id":23324,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23311,"src":"4089:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4075:22:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"4042:55:88"},{"assignments":[23328],"declarations":[{"constant":false,"id":23328,"mutability":"mutable","name":"pathsLength","nameLocation":"4115:11:88","nodeType":"VariableDeclaration","scope":23373,"src":"4107:19:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23327,"name":"uint256","nodeType":"ElementaryTypeName","src":"4107:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23331,"initialValue":{"expression":{"id":23329,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23322,"src":"4129:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4135:6:88","memberName":"length","nodeType":"MemberAccess","src":"4129:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4107:34:88"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23332,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23305,"src":"4156:5:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":23333,"name":"pathsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23328,"src":"4165:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4156:20:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23339,"nodeType":"IfStatement","src":"4152:76:88","trueBody":{"id":23338,"nodeType":"Block","src":"4178:50:88","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":23335,"name":"IndexOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1193,"src":"4199:16:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":23336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4199:18:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23337,"nodeType":"RevertStatement","src":"4192:25:88"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23340,"name":"pathsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23328,"src":"4242:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":23341,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4256:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4242:15:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23343,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23305,"src":"4261:5:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23344,"name":"pathsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23328,"src":"4270:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4284:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4270:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4261:24:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4242:43:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23360,"nodeType":"IfStatement","src":"4238:111:88","trueBody":{"id":23359,"nodeType":"Block","src":"4287:62:88","statements":[{"expression":{"id":23357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":23349,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23322,"src":"4301:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23351,"indexExpression":{"id":23350,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23305,"src":"4307:5:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4301:12:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":23352,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23322,"src":"4316:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23356,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23353,"name":"pathsLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23328,"src":"4322:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23354,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4336:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4322:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4316:22:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"src":"4301:37:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"id":23358,"nodeType":"ExpressionStatement","src":"4301:37:88"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23361,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23322,"src":"4475:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4481:3:88","memberName":"pop","nodeType":"MemberAccess","src":"4475:9:88","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$","typeString":"function (struct SwapPathStep storage ref[] storage ref[] storage pointer)"}},"id":23364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4475:11:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23365,"nodeType":"ExpressionStatement","src":"4475:11:88"},{"eventCall":{"arguments":[{"id":23367,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23301,"src":"4514:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23368,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23303,"src":"4523:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":23369,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23322,"src":"4533:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4539:6:88","memberName":"length","nodeType":"MemberAccess","src":"4533:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23366,"name":"PathRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1159,"src":"4502:11:88","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4502:44:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23372,"nodeType":"EmitStatement","src":"4497:49:88"}]},"documentation":{"id":23299,"nodeType":"StructuredDocumentation","src":"3832:34:88","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"32fffdbd","id":23374,"implemented":true,"kind":"function","modifiers":[{"id":23308,"kind":"modifierInvocation","modifierName":{"id":23307,"name":"authenticate","nameLocations":["3957:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"3957:12:88"},"nodeType":"ModifierInvocation","src":"3957:12:88"}],"name":"removePathAtIndex","nameLocation":"3880:17:88","nodeType":"FunctionDefinition","parameters":{"id":23306,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23301,"mutability":"mutable","name":"tokenIn","nameLocation":"3906:7:88","nodeType":"VariableDeclaration","scope":23374,"src":"3898:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23300,"name":"address","nodeType":"ElementaryTypeName","src":"3898:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23303,"mutability":"mutable","name":"tokenOut","nameLocation":"3923:8:88","nodeType":"VariableDeclaration","scope":23374,"src":"3915:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23302,"name":"address","nodeType":"ElementaryTypeName","src":"3915:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23305,"mutability":"mutable","name":"index","nameLocation":"3941:5:88","nodeType":"VariableDeclaration","scope":23374,"src":"3933:13:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23304,"name":"uint256","nodeType":"ElementaryTypeName","src":"3933:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3897:50:88"},"returnParameters":{"id":23309,"nodeType":"ParameterList","parameters":[],"src":"3970:0:88"},"scope":23997,"src":"3871:682:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1262],"body":{"id":23411,"nodeType":"Block","src":"4668:307:88","statements":[{"condition":{"arguments":[{"id":23384,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23377,"src":"4705:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23382,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20200,"src":"4682:5:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":23383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4688:16:88","memberName":"isPoolRegistered","nodeType":"MemberAccess","referencedDeclaration":3522,"src":"4682:22:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":23385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4682:36:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"arguments":[{"arguments":[{"id":23394,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23377,"src":"4822:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23393,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9828,"src":"4813:8:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9828_$","typeString":"type(contract IERC4626)"}},"id":23395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4813:22:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}],"expression":{"id":23391,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20200,"src":"4780:5:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":23392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4786:26:88","memberName":"isERC4626BufferInitialized","nodeType":"MemberAccess","referencedDeclaration":3710,"src":"4780:32:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_IERC4626_$9828_$returns$_t_bool_$","typeString":"function (contract IERC4626) view external returns (bool)"}},"id":23396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4780:56:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":23408,"nodeType":"Block","src":"4906:63:88","statements":[{"errorCall":{"arguments":[{"id":23405,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23377,"src":"4945:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23404,"name":"InvalidSimplePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1172,"src":"4927:17:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":23406,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4927:31:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23407,"nodeType":"RevertStatement","src":"4920:38:88"}]},"id":23409,"nodeType":"IfStatement","src":"4776:193:88","trueBody":{"id":23403,"nodeType":"Block","src":"4838:62:88","statements":[{"expression":{"arguments":[{"arguments":[{"id":23399,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23377,"src":"4875:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23398,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9828,"src":"4866:8:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9828_$","typeString":"type(contract IERC4626)"}},"id":23400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4866:22:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}],"id":23397,"name":"_removeBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23819,"src":"4852:13:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC4626_$9828_$returns$__$","typeString":"function (contract IERC4626)"}},"id":23401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4852:37:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23402,"nodeType":"ExpressionStatement","src":"4852:37:88"}]}},"id":23410,"nodeType":"IfStatement","src":"4678:291:88","trueBody":{"id":23390,"nodeType":"Block","src":"4720:50:88","statements":[{"expression":{"arguments":[{"id":23387,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23377,"src":"4746:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23386,"name":"_removePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23663,"src":"4734:11:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":23388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4734:25:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23389,"nodeType":"ExpressionStatement","src":"4734:25:88"}]}}]},"documentation":{"id":23375,"nodeType":"StructuredDocumentation","src":"4559:34:88","text":"@inheritdoc ITokenPairRegistry"},"functionSelector":"bc138aa3","id":23412,"implemented":true,"kind":"function","modifiers":[{"id":23380,"kind":"modifierInvocation","modifierName":{"id":23379,"name":"authenticate","nameLocations":["4655:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"4655:12:88"},"nodeType":"ModifierInvocation","src":"4655:12:88"}],"name":"removeSimplePath","nameLocation":"4607:16:88","nodeType":"FunctionDefinition","parameters":{"id":23378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23377,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"4632:12:88","nodeType":"VariableDeclaration","scope":23412,"src":"4624:20:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23376,"name":"address","nodeType":"ElementaryTypeName","src":"4624:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4623:22:88"},"returnParameters":{"id":23381,"nodeType":"ParameterList","parameters":[],"src":"4668:0:88"},"scope":23997,"src":"4598:377:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":23478,"nodeType":"Block","src":"5022:337:88","statements":[{"assignments":[23421],"declarations":[{"constant":false,"id":23421,"mutability":"mutable","name":"tokens","nameLocation":"5048:6:88","nodeType":"VariableDeclaration","scope":23478,"src":"5032:22:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":23419,"nodeType":"UserDefinedTypeName","pathNode":{"id":23418,"name":"IERC20","nameLocations":["5032:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"5032:6:88"},"referencedDeclaration":10558,"src":"5032:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":23420,"nodeType":"ArrayTypeName","src":"5032:8:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":23426,"initialValue":{"arguments":[{"id":23424,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23414,"src":"5077:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23422,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20200,"src":"5057:5:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":23423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5063:13:88","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":3561,"src":"5057:19:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":23425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5057:25:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"5032:50:88"},{"assignments":[23428],"declarations":[{"constant":false,"id":23428,"mutability":"mutable","name":"tokenPairs","nameLocation":"5101:10:88","nodeType":"VariableDeclaration","scope":23478,"src":"5093:18:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23427,"name":"uint256","nodeType":"ElementaryTypeName","src":"5093:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23433,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23429,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23421,"src":"5114:6:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5121:6:88","memberName":"length","nodeType":"MemberAccess","src":"5114:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23431,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5130:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5114:17:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5093:38:88"},{"body":{"id":23476,"nodeType":"Block","src":"5182:171:88","statements":[{"body":{"id":23474,"nodeType":"Block","src":"5244:99:88","statements":[{"expression":{"arguments":[{"id":23458,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23414,"src":"5276:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":23461,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23421,"src":"5290:6:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23463,"indexExpression":{"id":23462,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23435,"src":"5297:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5290:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":23460,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5282:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23459,"name":"address","nodeType":"ElementaryTypeName","src":"5282:7:88","typeDescriptions":{}}},"id":23464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5282:18:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":23467,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23421,"src":"5310:6:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23469,"indexExpression":{"id":23468,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23445,"src":"5317:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5310:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":23466,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5302:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23465,"name":"address","nodeType":"ElementaryTypeName","src":"5302:7:88","typeDescriptions":{}}},"id":23470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5302:18:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"66616c7365","id":23471,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5322:5:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23457,"name":"_addTokenPair","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23533,"src":"5262:13:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,address,bool)"}},"id":23472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5262:66:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23473,"nodeType":"ExpressionStatement","src":"5262:66:88"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23450,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23445,"src":"5220:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23451,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23421,"src":"5224:6:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5231:6:88","memberName":"length","nodeType":"MemberAccess","src":"5224:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5220:17:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23475,"initializationExpression":{"assignments":[23445],"declarations":[{"constant":false,"id":23445,"mutability":"mutable","name":"j","nameLocation":"5209:1:88","nodeType":"VariableDeclaration","scope":23475,"src":"5201:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23444,"name":"uint256","nodeType":"ElementaryTypeName","src":"5201:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23449,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23446,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23435,"src":"5213:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":23447,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5217:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5213:5:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5201:17:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5239:3:88","subExpression":{"id":23454,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23445,"src":"5241:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23456,"nodeType":"ExpressionStatement","src":"5239:3:88"},"nodeType":"ForStatement","src":"5196:147:88"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23438,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23435,"src":"5161:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":23439,"name":"tokenPairs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23428,"src":"5165:10:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5161:14:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23477,"initializationExpression":{"assignments":[23435],"declarations":[{"constant":false,"id":23435,"mutability":"mutable","name":"i","nameLocation":"5154:1:88","nodeType":"VariableDeclaration","scope":23477,"src":"5146:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23434,"name":"uint256","nodeType":"ElementaryTypeName","src":"5146:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23437,"initialValue":{"hexValue":"30","id":23436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5158:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5146:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5177:3:88","subExpression":{"id":23441,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23435,"src":"5179:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23443,"nodeType":"ExpressionStatement","src":"5177:3:88"},"nodeType":"ForStatement","src":"5141:212:88"}]},"id":23479,"implemented":true,"kind":"function","modifiers":[],"name":"_addPool","nameLocation":"4990:8:88","nodeType":"FunctionDefinition","parameters":{"id":23415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23414,"mutability":"mutable","name":"pool","nameLocation":"5007:4:88","nodeType":"VariableDeclaration","scope":23479,"src":"4999:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23413,"name":"address","nodeType":"ElementaryTypeName","src":"4999:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4998:14:88"},"returnParameters":{"id":23416,"nodeType":"ParameterList","parameters":[],"src":"5022:0:88"},"scope":23997,"src":"4981:378:88","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23506,"nodeType":"Block","src":"5493:169:88","statements":[{"assignments":[23487],"declarations":[{"constant":false,"id":23487,"mutability":"mutable","name":"underlyingToken","nameLocation":"5511:15:88","nodeType":"VariableDeclaration","scope":23506,"src":"5503:23:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23486,"name":"address","nodeType":"ElementaryTypeName","src":"5503:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":23492,"initialValue":{"arguments":[{"id":23490,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23483,"src":"5550:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}],"expression":{"id":23488,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20200,"src":"5529:5:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":23489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5535:14:88","memberName":"getBufferAsset","nodeType":"MemberAccess","referencedDeclaration":2778,"src":"5529:20:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_IERC4626_$9828_$returns$_t_address_$","typeString":"function (contract IERC4626) view external returns (address)"}},"id":23491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5529:34:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5503:60:88"},{"expression":{"arguments":[{"arguments":[{"id":23496,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23483,"src":"5595:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}],"id":23495,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5587:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23494,"name":"address","nodeType":"ElementaryTypeName","src":"5587:7:88","typeDescriptions":{}}},"id":23497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5587:21:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23498,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23487,"src":"5610:15:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":23501,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23483,"src":"5635:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}],"id":23500,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5627:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23499,"name":"address","nodeType":"ElementaryTypeName","src":"5627:7:88","typeDescriptions":{}}},"id":23502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5627:21:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"74727565","id":23503,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5650:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23493,"name":"_addTokenPair","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23533,"src":"5573:13:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,address,bool)"}},"id":23504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5573:82:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23505,"nodeType":"ExpressionStatement","src":"5573:82:88"}]},"documentation":{"id":23480,"nodeType":"StructuredDocumentation","src":"5365:71:88","text":"@dev Always wrap, as long as it's a registered buffer in the Vault."},"id":23507,"implemented":true,"kind":"function","modifiers":[],"name":"_addBuffer","nameLocation":"5450:10:88","nodeType":"FunctionDefinition","parameters":{"id":23484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23483,"mutability":"mutable","name":"wrappedToken","nameLocation":"5470:12:88","nodeType":"VariableDeclaration","scope":23507,"src":"5461:21:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":23482,"nodeType":"UserDefinedTypeName","pathNode":{"id":23481,"name":"IERC4626","nameLocations":["5461:8:88"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"5461:8:88"},"referencedDeclaration":9828,"src":"5461:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"5460:23:88"},"returnParameters":{"id":23485,"nodeType":"ParameterList","parameters":[],"src":"5493:0:88"},"scope":23997,"src":"5441:221:88","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23532,"nodeType":"Block","src":"5769:143:88","statements":[{"expression":{"arguments":[{"id":23519,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23509,"src":"5798:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23520,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23511,"src":"5812:6:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23521,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23513,"src":"5820:6:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23522,"name":"isBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23515,"src":"5828:8:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23518,"name":"_addSimplePairStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23597,"src":"5779:18:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,address,bool)"}},"id":23523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5779:58:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23524,"nodeType":"ExpressionStatement","src":"5779:58:88"},{"expression":{"arguments":[{"id":23526,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23509,"src":"5866:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23527,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23513,"src":"5880:6:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23528,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23511,"src":"5888:6:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23529,"name":"isBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23515,"src":"5896:8:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23525,"name":"_addSimplePairStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23597,"src":"5847:18:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,address,bool)"}},"id":23530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5847:58:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23531,"nodeType":"ExpressionStatement","src":"5847:58:88"}]},"id":23533,"implemented":true,"kind":"function","modifiers":[],"name":"_addTokenPair","nameLocation":"5677:13:88","nodeType":"FunctionDefinition","parameters":{"id":23516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23509,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"5699:12:88","nodeType":"VariableDeclaration","scope":23533,"src":"5691:20:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23508,"name":"address","nodeType":"ElementaryTypeName","src":"5691:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23511,"mutability":"mutable","name":"tokenA","nameLocation":"5721:6:88","nodeType":"VariableDeclaration","scope":23533,"src":"5713:14:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23510,"name":"address","nodeType":"ElementaryTypeName","src":"5713:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23513,"mutability":"mutable","name":"tokenB","nameLocation":"5737:6:88","nodeType":"VariableDeclaration","scope":23533,"src":"5729:14:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23512,"name":"address","nodeType":"ElementaryTypeName","src":"5729:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23515,"mutability":"mutable","name":"isBuffer","nameLocation":"5750:8:88","nodeType":"VariableDeclaration","scope":23533,"src":"5745:13:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23514,"name":"bool","nodeType":"ElementaryTypeName","src":"5745:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5690:69:88"},"returnParameters":{"id":23517,"nodeType":"ParameterList","parameters":[],"src":"5769:0:88"},"scope":23997,"src":"5668:244:88","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23596,"nodeType":"Block","src":"6027:396:88","statements":[{"assignments":[23545],"declarations":[{"constant":false,"id":23545,"mutability":"mutable","name":"tokenId","nameLocation":"6045:7:88","nodeType":"VariableDeclaration","scope":23596,"src":"6037:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23544,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6037:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23550,"initialValue":{"arguments":[{"id":23547,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23537,"src":"6071:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23548,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23539,"src":"6080:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23546,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23837,"src":"6055:15:88","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6055:34:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6037:52:88"},{"assignments":[23553],"declarations":[{"constant":false,"id":23553,"mutability":"mutable","name":"step","nameLocation":"6119:4:88","nodeType":"VariableDeclaration","scope":23596,"src":"6099:24:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep"},"typeName":{"id":23552,"nodeType":"UserDefinedTypeName","pathNode":{"id":23551,"name":"SwapPathStep","nameLocations":["6099:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"6099:12:88"},"referencedDeclaration":1275,"src":"6099:12:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"visibility":"internal"}],"id":23561,"initialValue":{"arguments":[{"id":23555,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23535,"src":"6147:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":23557,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23539,"src":"6178:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23556,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"6171:6:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10558_$","typeString":"type(contract IERC20)"}},"id":23558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6171:16:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":23559,"name":"isBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23541,"src":"6199:8:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23554,"name":"SwapPathStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1275,"src":"6126:12:88","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_SwapPathStep_$1275_storage_ptr_$","typeString":"type(struct SwapPathStep storage pointer)"}},"id":23560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["6141:4:88","6161:8:88","6189:8:88"],"names":["pool","tokenOut","isBuffer"],"nodeType":"FunctionCall","src":"6126:84:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}},"nodeType":"VariableDeclarationStatement","src":"6099:111:88"},{"assignments":[23567],"declarations":[{"constant":false,"id":23567,"mutability":"mutable","name":"paths","nameLocation":"6246:5:88","nodeType":"VariableDeclaration","scope":23596,"src":"6221:30:88","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"},"typeName":{"baseType":{"baseType":{"id":23564,"nodeType":"UserDefinedTypeName","pathNode":{"id":23563,"name":"SwapPathStep","nameLocations":["6221:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"6221:12:88"},"referencedDeclaration":1275,"src":"6221:12:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23565,"nodeType":"ArrayTypeName","src":"6221:14:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":23566,"nodeType":"ArrayTypeName","src":"6221:16:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}},"visibility":"internal"}],"id":23571,"initialValue":{"baseExpression":{"id":23568,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23021,"src":"6254:13:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23570,"indexExpression":{"id":23569,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23545,"src":"6268:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6254:22:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"6221:55:88"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23572,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23567,"src":"6286:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6292:4:88","memberName":"push","nodeType":"MemberAccess","src":"6286:10:88","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$returns$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$attached_to$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$","typeString":"function (struct SwapPathStep storage ref[] storage ref[] storage pointer) returns (struct SwapPathStep storage ref[] storage ref)"}},"id":23575,"isConstant":false,"isLValue":true,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6286:12:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"id":23576,"nodeType":"ExpressionStatement","src":"6286:12:88"},{"expression":{"arguments":[{"id":23584,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23553,"src":"6337:4:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SwapPathStep_$1275_memory_ptr","typeString":"struct SwapPathStep memory"}],"expression":{"baseExpression":{"id":23577,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23567,"src":"6308:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23582,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23578,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23567,"src":"6314:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6320:6:88","memberName":"length","nodeType":"MemberAccess","src":"6314:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23580,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6329:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6314:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6308:23:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"id":23583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6332:4:88","memberName":"push","nodeType":"MemberAccess","src":"6308:28:88","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr_$_t_struct$_SwapPathStep_$1275_storage_$returns$__$attached_to$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr_$","typeString":"function (struct SwapPathStep storage ref[] storage pointer,struct SwapPathStep storage ref)"}},"id":23585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6308:34:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23586,"nodeType":"ExpressionStatement","src":"6308:34:88"},{"eventCall":{"arguments":[{"id":23588,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23537,"src":"6367:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23589,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23539,"src":"6376:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":23590,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23021,"src":"6386:13:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23592,"indexExpression":{"id":23591,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23545,"src":"6400:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6386:22:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"id":23593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6409:6:88","memberName":"length","nodeType":"MemberAccess","src":"6386:29:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23587,"name":"PathAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1150,"src":"6357:9:88","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6357:59:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23595,"nodeType":"EmitStatement","src":"6352:64:88"}]},"id":23597,"implemented":true,"kind":"function","modifiers":[],"name":"_addSimplePairStep","nameLocation":"5927:18:88","nodeType":"FunctionDefinition","parameters":{"id":23542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23535,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"5954:12:88","nodeType":"VariableDeclaration","scope":23597,"src":"5946:20:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23534,"name":"address","nodeType":"ElementaryTypeName","src":"5946:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23537,"mutability":"mutable","name":"tokenIn","nameLocation":"5976:7:88","nodeType":"VariableDeclaration","scope":23597,"src":"5968:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23536,"name":"address","nodeType":"ElementaryTypeName","src":"5968:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23539,"mutability":"mutable","name":"tokenOut","nameLocation":"5993:8:88","nodeType":"VariableDeclaration","scope":23597,"src":"5985:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23538,"name":"address","nodeType":"ElementaryTypeName","src":"5985:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23541,"mutability":"mutable","name":"isBuffer","nameLocation":"6008:8:88","nodeType":"VariableDeclaration","scope":23597,"src":"6003:13:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23540,"name":"bool","nodeType":"ElementaryTypeName","src":"6003:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5945:72:88"},"returnParameters":{"id":23543,"nodeType":"ParameterList","parameters":[],"src":"6027:0:88"},"scope":23997,"src":"5918:505:88","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23662,"nodeType":"Block","src":"6473:333:88","statements":[{"assignments":[23606],"declarations":[{"constant":false,"id":23606,"mutability":"mutable","name":"tokens","nameLocation":"6499:6:88","nodeType":"VariableDeclaration","scope":23662,"src":"6483:22:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":23604,"nodeType":"UserDefinedTypeName","pathNode":{"id":23603,"name":"IERC20","nameLocations":["6483:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"6483:6:88"},"referencedDeclaration":10558,"src":"6483:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":23605,"nodeType":"ArrayTypeName","src":"6483:8:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":23611,"initialValue":{"arguments":[{"id":23609,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23599,"src":"6528:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23607,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20200,"src":"6508:5:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":23608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6514:13:88","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":3561,"src":"6508:19:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":23610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6508:25:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"6483:50:88"},{"assignments":[23613],"declarations":[{"constant":false,"id":23613,"mutability":"mutable","name":"tokenPairs","nameLocation":"6552:10:88","nodeType":"VariableDeclaration","scope":23662,"src":"6544:18:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23612,"name":"uint256","nodeType":"ElementaryTypeName","src":"6544:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23618,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23614,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23606,"src":"6565:6:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6572:6:88","memberName":"length","nodeType":"MemberAccess","src":"6565:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23616,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6581:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6565:17:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6544:38:88"},{"body":{"id":23660,"nodeType":"Block","src":"6633:167:88","statements":[{"body":{"id":23658,"nodeType":"Block","src":"6695:95:88","statements":[{"expression":{"arguments":[{"id":23643,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23599,"src":"6730:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":23646,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23606,"src":"6744:6:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23648,"indexExpression":{"id":23647,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23620,"src":"6751:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6744:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":23645,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6736:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23644,"name":"address","nodeType":"ElementaryTypeName","src":"6736:7:88","typeDescriptions":{}}},"id":23649,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6736:18:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":23652,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23606,"src":"6764:6:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23654,"indexExpression":{"id":23653,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23630,"src":"6771:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6764:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":23651,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6756:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23650,"name":"address","nodeType":"ElementaryTypeName","src":"6756:7:88","typeDescriptions":{}}},"id":23655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6756:18:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23642,"name":"_removeTokenPair","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23685,"src":"6713:16:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":23656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6713:62:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23657,"nodeType":"ExpressionStatement","src":"6713:62:88"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23635,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23630,"src":"6671:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23636,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23606,"src":"6675:6:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6682:6:88","memberName":"length","nodeType":"MemberAccess","src":"6675:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6671:17:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23659,"initializationExpression":{"assignments":[23630],"declarations":[{"constant":false,"id":23630,"mutability":"mutable","name":"j","nameLocation":"6660:1:88","nodeType":"VariableDeclaration","scope":23659,"src":"6652:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23629,"name":"uint256","nodeType":"ElementaryTypeName","src":"6652:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23634,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23631,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23620,"src":"6664:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":23632,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6668:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6664:5:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6652:17:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"6690:3:88","subExpression":{"id":23639,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23630,"src":"6692:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23641,"nodeType":"ExpressionStatement","src":"6690:3:88"},"nodeType":"ForStatement","src":"6647:143:88"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23623,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23620,"src":"6612:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":23624,"name":"tokenPairs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23613,"src":"6616:10:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6612:14:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23661,"initializationExpression":{"assignments":[23620],"declarations":[{"constant":false,"id":23620,"mutability":"mutable","name":"i","nameLocation":"6605:1:88","nodeType":"VariableDeclaration","scope":23661,"src":"6597:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23619,"name":"uint256","nodeType":"ElementaryTypeName","src":"6597:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23622,"initialValue":{"hexValue":"30","id":23621,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6609:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6597:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"6628:3:88","subExpression":{"id":23626,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23620,"src":"6630:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23628,"nodeType":"ExpressionStatement","src":"6628:3:88"},"nodeType":"ForStatement","src":"6592:208:88"}]},"id":23663,"implemented":true,"kind":"function","modifiers":[],"name":"_removePool","nameLocation":"6438:11:88","nodeType":"FunctionDefinition","parameters":{"id":23600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23599,"mutability":"mutable","name":"pool","nameLocation":"6458:4:88","nodeType":"VariableDeclaration","scope":23663,"src":"6450:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23598,"name":"address","nodeType":"ElementaryTypeName","src":"6450:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6449:14:88"},"returnParameters":{"id":23601,"nodeType":"ParameterList","parameters":[],"src":"6473:0:88"},"scope":23997,"src":"6429:377:88","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23684,"nodeType":"Block","src":"6901:129:88","statements":[{"expression":{"arguments":[{"id":23673,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23665,"src":"6933:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23674,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23667,"src":"6947:6:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23675,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23669,"src":"6955:6:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23672,"name":"_removeSimplePairStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23793,"src":"6911:21:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":23676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6911:51:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23677,"nodeType":"ExpressionStatement","src":"6911:51:88"},{"expression":{"arguments":[{"id":23679,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23665,"src":"6994:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23680,"name":"tokenB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23669,"src":"7008:6:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23681,"name":"tokenA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23667,"src":"7016:6:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23678,"name":"_removeSimplePairStep","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23793,"src":"6972:21:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":23682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6972:51:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23683,"nodeType":"ExpressionStatement","src":"6972:51:88"}]},"id":23685,"implemented":true,"kind":"function","modifiers":[],"name":"_removeTokenPair","nameLocation":"6821:16:88","nodeType":"FunctionDefinition","parameters":{"id":23670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23665,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"6846:12:88","nodeType":"VariableDeclaration","scope":23685,"src":"6838:20:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23664,"name":"address","nodeType":"ElementaryTypeName","src":"6838:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23667,"mutability":"mutable","name":"tokenA","nameLocation":"6868:6:88","nodeType":"VariableDeclaration","scope":23685,"src":"6860:14:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23666,"name":"address","nodeType":"ElementaryTypeName","src":"6860:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23669,"mutability":"mutable","name":"tokenB","nameLocation":"6884:6:88","nodeType":"VariableDeclaration","scope":23685,"src":"6876:14:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23668,"name":"address","nodeType":"ElementaryTypeName","src":"6876:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6837:54:88"},"returnParameters":{"id":23671,"nodeType":"ParameterList","parameters":[],"src":"6901:0:88"},"scope":23997,"src":"6812:218:88","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23792,"nodeType":"Block","src":"7133:1025:88","statements":[{"assignments":[23695],"declarations":[{"constant":false,"id":23695,"mutability":"mutable","name":"tokenId","nameLocation":"7151:7:88","nodeType":"VariableDeclaration","scope":23792,"src":"7143:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23694,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7143:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23700,"initialValue":{"arguments":[{"id":23697,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23689,"src":"7177:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23698,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23691,"src":"7186:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23696,"name":"_getTokenPairId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23837,"src":"7161:15:88","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$_t_address_$returns$_t_bytes32_$","typeString":"function (address,address) pure returns (bytes32)"}},"id":23699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7161:34:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"7143:52:88"},{"assignments":[23706],"declarations":[{"constant":false,"id":23706,"mutability":"mutable","name":"paths","nameLocation":"7231:5:88","nodeType":"VariableDeclaration","scope":23792,"src":"7206:30:88","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"},"typeName":{"baseType":{"baseType":{"id":23703,"nodeType":"UserDefinedTypeName","pathNode":{"id":23702,"name":"SwapPathStep","nameLocations":["7206:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"7206:12:88"},"referencedDeclaration":1275,"src":"7206:12:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23704,"nodeType":"ArrayTypeName","src":"7206:14:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"id":23705,"nodeType":"ArrayTypeName","src":"7206:16:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[][]"}},"visibility":"internal"}],"id":23710,"initialValue":{"baseExpression":{"id":23707,"name":"_pairsToPaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23021,"src":"7239:13:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_$","typeString":"mapping(bytes32 => struct SwapPathStep storage ref[] storage ref[] storage ref)"}},"id":23709,"indexExpression":{"id":23708,"name":"tokenId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23695,"src":"7253:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7239:22:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7206:55:88"},{"body":{"id":23784,"nodeType":"Block","src":"7392:582:88","statements":[{"assignments":[23726],"declarations":[{"constant":false,"id":23726,"mutability":"mutable","name":"steps","nameLocation":"7429:5:88","nodeType":"VariableDeclaration","scope":23784,"src":"7406:28:88","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"},"typeName":{"baseType":{"id":23724,"nodeType":"UserDefinedTypeName","pathNode":{"id":23723,"name":"SwapPathStep","nameLocations":["7406:12:88"],"nodeType":"IdentifierPath","referencedDeclaration":1275,"src":"7406:12:88"},"referencedDeclaration":1275,"src":"7406:12:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage_ptr","typeString":"struct SwapPathStep"}},"id":23725,"nodeType":"ArrayTypeName","src":"7406:14:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep[]"}},"visibility":"internal"}],"id":23730,"initialValue":{"baseExpression":{"id":23727,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23706,"src":"7437:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23729,"indexExpression":{"id":23728,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23712,"src":"7443:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7437:8:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7406:39:88"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23731,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"7464:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage pointer"}},"id":23732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7470:6:88","memberName":"length","nodeType":"MemberAccess","src":"7464:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":23733,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7480:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7464:17:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":23735,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"7485:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage pointer"}},"id":23737,"indexExpression":{"hexValue":"30","id":23736,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7491:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7485:8:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage","typeString":"struct SwapPathStep storage ref"}},"id":23738,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7494:4:88","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1269,"src":"7485:13:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":23739,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23687,"src":"7502:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7485:29:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7464:50:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"baseExpression":{"id":23744,"name":"steps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23726,"src":"7526:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage pointer"}},"id":23746,"indexExpression":{"hexValue":"30","id":23745,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7532:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7526:8:88","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1275_storage","typeString":"struct SwapPathStep storage ref"}},"id":23747,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7535:8:88","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1272,"src":"7526:17:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":23743,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7518:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23742,"name":"address","nodeType":"ElementaryTypeName","src":"7518:7:88","typeDescriptions":{}}},"id":23748,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7518:26:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":23749,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23691,"src":"7548:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7518:38:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7464:92:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23783,"nodeType":"IfStatement","src":"7460:504:88","trueBody":{"id":23782,"nodeType":"Block","src":"7558:406:88","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23752,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23706,"src":"7691:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7697:6:88","memberName":"length","nodeType":"MemberAccess","src":"7691:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":23754,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7706:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7691:16:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23768,"nodeType":"IfStatement","src":"7687:97:88","trueBody":{"id":23767,"nodeType":"Block","src":"7709:75:88","statements":[{"expression":{"id":23765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":23756,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23706,"src":"7731:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23758,"indexExpression":{"id":23757,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23712,"src":"7737:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7731:8:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":23759,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23706,"src":"7742:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23764,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23760,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23706,"src":"7748:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7754:6:88","memberName":"length","nodeType":"MemberAccess","src":"7748:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":23762,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7763:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7748:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7742:23:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"src":"7731:34:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage","typeString":"struct SwapPathStep storage ref[] storage ref"}},"id":23766,"nodeType":"ExpressionStatement","src":"7731:34:88"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23769,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23706,"src":"7846:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7852:3:88","memberName":"pop","nodeType":"MemberAccess","src":"7846:9:88","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr_$","typeString":"function (struct SwapPathStep storage ref[] storage ref[] storage pointer)"}},"id":23772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7846:11:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23773,"nodeType":"ExpressionStatement","src":"7846:11:88"},{"eventCall":{"arguments":[{"id":23775,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23689,"src":"7892:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23776,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23691,"src":"7901:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":23777,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23706,"src":"7911:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7917:6:88","memberName":"length","nodeType":"MemberAccess","src":"7911:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23774,"name":"PathRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1159,"src":"7880:11:88","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7880:44:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23780,"nodeType":"EmitStatement","src":"7875:49:88"},{"functionReturnParameters":23693,"id":23781,"nodeType":"Return","src":"7943:7:88"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23715,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23712,"src":"7369:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23716,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23706,"src":"7373:5:88","typeDescriptions":{"typeIdentifier":"t_array$_t_array$_t_struct$_SwapPathStep_$1275_storage_$dyn_storage_$dyn_storage_ptr","typeString":"struct SwapPathStep storage ref[] storage ref[] storage pointer"}},"id":23717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7379:6:88","memberName":"length","nodeType":"MemberAccess","src":"7373:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7369:16:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23785,"initializationExpression":{"assignments":[23712],"declarations":[{"constant":false,"id":23712,"mutability":"mutable","name":"i","nameLocation":"7362:1:88","nodeType":"VariableDeclaration","scope":23785,"src":"7354:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23711,"name":"uint256","nodeType":"ElementaryTypeName","src":"7354:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23714,"initialValue":{"hexValue":"30","id":23713,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7366:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7354:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7387:3:88","subExpression":{"id":23719,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23712,"src":"7389:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23721,"nodeType":"ExpressionStatement","src":"7387:3:88"},"nodeType":"ForStatement","src":"7349:625:88"},{"errorCall":{"arguments":[{"id":23787,"name":"poolOrBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23687,"src":"8119:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23788,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23689,"src":"8133:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23789,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23691,"src":"8142:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23786,"name":"InvalidRemovePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1181,"src":"8101:17:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address,address) pure returns (error)"}},"id":23790,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8101:50:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23791,"nodeType":"RevertStatement","src":"8094:57:88"}]},"id":23793,"implemented":true,"kind":"function","modifiers":[],"name":"_removeSimplePairStep","nameLocation":"7045:21:88","nodeType":"FunctionDefinition","parameters":{"id":23692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23687,"mutability":"mutable","name":"poolOrBuffer","nameLocation":"7075:12:88","nodeType":"VariableDeclaration","scope":23793,"src":"7067:20:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23686,"name":"address","nodeType":"ElementaryTypeName","src":"7067:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23689,"mutability":"mutable","name":"tokenIn","nameLocation":"7097:7:88","nodeType":"VariableDeclaration","scope":23793,"src":"7089:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23688,"name":"address","nodeType":"ElementaryTypeName","src":"7089:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23691,"mutability":"mutable","name":"tokenOut","nameLocation":"7114:8:88","nodeType":"VariableDeclaration","scope":23793,"src":"7106:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23690,"name":"address","nodeType":"ElementaryTypeName","src":"7106:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7066:57:88"},"returnParameters":{"id":23693,"nodeType":"ParameterList","parameters":[],"src":"7133:0:88"},"scope":23997,"src":"7036:1122:88","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23818,"nodeType":"Block","src":"8219:166:88","statements":[{"assignments":[23800],"declarations":[{"constant":false,"id":23800,"mutability":"mutable","name":"underlyingToken","nameLocation":"8237:15:88","nodeType":"VariableDeclaration","scope":23818,"src":"8229:23:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23799,"name":"address","nodeType":"ElementaryTypeName","src":"8229:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":23805,"initialValue":{"arguments":[{"id":23803,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23796,"src":"8276:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}],"expression":{"id":23801,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20200,"src":"8255:5:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":23802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8261:14:88","memberName":"getBufferAsset","nodeType":"MemberAccess","referencedDeclaration":2778,"src":"8255:20:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_IERC4626_$9828_$returns$_t_address_$","typeString":"function (contract IERC4626) view external returns (address)"}},"id":23804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8255:34:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8229:60:88"},{"expression":{"arguments":[{"arguments":[{"id":23809,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23796,"src":"8324:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}],"id":23808,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8316:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23807,"name":"address","nodeType":"ElementaryTypeName","src":"8316:7:88","typeDescriptions":{}}},"id":23810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8316:21:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23811,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23800,"src":"8339:15:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":23814,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23796,"src":"8364:12:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}],"id":23813,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8356:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23812,"name":"address","nodeType":"ElementaryTypeName","src":"8356:7:88","typeDescriptions":{}}},"id":23815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8356:21:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23806,"name":"_removeTokenPair","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23685,"src":"8299:16:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":23816,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8299:79:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23817,"nodeType":"ExpressionStatement","src":"8299:79:88"}]},"id":23819,"implemented":true,"kind":"function","modifiers":[],"name":"_removeBuffer","nameLocation":"8173:13:88","nodeType":"FunctionDefinition","parameters":{"id":23797,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23796,"mutability":"mutable","name":"wrappedToken","nameLocation":"8196:12:88","nodeType":"VariableDeclaration","scope":23819,"src":"8187:21:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"},"typeName":{"id":23795,"nodeType":"UserDefinedTypeName","pathNode":{"id":23794,"name":"IERC4626","nameLocations":["8187:8:88"],"nodeType":"IdentifierPath","referencedDeclaration":9828,"src":"8187:8:88"},"referencedDeclaration":9828,"src":"8187:8:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"8186:23:88"},"returnParameters":{"id":23798,"nodeType":"ParameterList","parameters":[],"src":"8219:0:88"},"scope":23997,"src":"8164:221:88","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23836,"nodeType":"Block","src":"8483:70:88","statements":[{"expression":{"arguments":[{"arguments":[{"id":23831,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23821,"src":"8527:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23832,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23823,"src":"8536:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23829,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8510:3:88","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":23830,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8514:12:88","memberName":"encodePacked","nodeType":"MemberAccess","src":"8510:16:88","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":23833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8510:35:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":23828,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8500:9:88","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":23834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8500:46:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":23827,"id":23835,"nodeType":"Return","src":"8493:53:88"}]},"id":23837,"implemented":true,"kind":"function","modifiers":[],"name":"_getTokenPairId","nameLocation":"8400:15:88","nodeType":"FunctionDefinition","parameters":{"id":23824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23821,"mutability":"mutable","name":"tokenIn","nameLocation":"8424:7:88","nodeType":"VariableDeclaration","scope":23837,"src":"8416:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23820,"name":"address","nodeType":"ElementaryTypeName","src":"8416:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23823,"mutability":"mutable","name":"tokenOut","nameLocation":"8441:8:88","nodeType":"VariableDeclaration","scope":23837,"src":"8433:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23822,"name":"address","nodeType":"ElementaryTypeName","src":"8433:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8415:35:88"},"returnParameters":{"id":23827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23826,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23837,"src":"8474:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23825,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8474:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8473:9:88"},"scope":23997,"src":"8391:162:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":23915,"nodeType":"Block","src":"8650:746:88","statements":[{"assignments":[23847],"declarations":[{"constant":false,"id":23847,"mutability":"mutable","name":"underlying","nameLocation":"8668:10:88","nodeType":"VariableDeclaration","scope":23915,"src":"8660:18:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23846,"name":"address","nodeType":"ElementaryTypeName","src":"8660:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":23857,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":23853,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23839,"src":"8719:6:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23852,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9828,"src":"8710:8:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$9828_$","typeString":"type(contract IERC4626)"}},"id":23854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8710:16:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$9828","typeString":"contract IERC4626"}],"expression":{"id":23850,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20200,"src":"8689:5:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":23851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8695:14:88","memberName":"getBufferAsset","nodeType":"MemberAccess","referencedDeclaration":2778,"src":"8689:20:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_IERC4626_$9828_$returns$_t_address_$","typeString":"function (contract IERC4626) view external returns (address)"}},"id":23855,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8689:38:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23849,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8681:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23848,"name":"address","nodeType":"ElementaryTypeName","src":"8681:7:88","typeDescriptions":{}}},"id":23856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8681:47:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8660:68:88"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23858,"name":"underlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23847,"src":"8743:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":23861,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8765:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":23860,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8757:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23859,"name":"address","nodeType":"ElementaryTypeName","src":"8757:7:88","typeDescriptions":{}}},"id":23862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8757:10:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8743:24:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23869,"nodeType":"IfStatement","src":"8739:90:88","trueBody":{"id":23868,"nodeType":"Block","src":"8769:60:88","statements":[{"errorCall":{"arguments":[{"id":23865,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23839,"src":"8811:6:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23864,"name":"BufferNotInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1164,"src":"8790:20:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":23866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8790:28:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23867,"nodeType":"RevertStatement","src":"8783:35:88"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23870,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23841,"src":"8843:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":23871,"name":"underlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23847,"src":"8854:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8843:21:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23888,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23841,"src":"9048:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":23889,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23839,"src":"9059:6:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9048:17:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":23912,"nodeType":"Block","src":"9252:138:88","statements":[{"errorCall":{"arguments":[{"id":23907,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23839,"src":"9353:6:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23908,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23841,"src":"9361:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23909,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23843,"src":"9370:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23906,"name":"InvalidBufferPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1190,"src":"9335:17:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address,address) pure returns (error)"}},"id":23910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9335:44:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23911,"nodeType":"RevertStatement","src":"9328:51:88"}]},"id":23913,"nodeType":"IfStatement","src":"9044:346:88","trueBody":{"id":23905,"nodeType":"Block","src":"9067:179:88","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23891,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23843,"src":"9119:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":23894,"name":"underlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23847,"src":"9139:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23893,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9131:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23892,"name":"address","nodeType":"ElementaryTypeName","src":"9131:7:88","typeDescriptions":{}}},"id":23895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9131:19:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9119:31:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23904,"nodeType":"IfStatement","src":"9115:121:88","trueBody":{"id":23903,"nodeType":"Block","src":"9152:84:88","statements":[{"errorCall":{"arguments":[{"id":23898,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23839,"src":"9195:6:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23899,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23841,"src":"9203:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23900,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23843,"src":"9212:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23897,"name":"InvalidBufferPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1190,"src":"9177:17:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address,address) pure returns (error)"}},"id":23901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9177:44:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23902,"nodeType":"RevertStatement","src":"9170:51:88"}]}}]}},"id":23914,"nodeType":"IfStatement","src":"8839:551:88","trueBody":{"id":23887,"nodeType":"Block","src":"8866:172:88","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23873,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23843,"src":"8915:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":23876,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23839,"src":"8935:6:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23875,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8927:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23874,"name":"address","nodeType":"ElementaryTypeName","src":"8927:7:88","typeDescriptions":{}}},"id":23877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8927:15:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8915:27:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23886,"nodeType":"IfStatement","src":"8911:117:88","trueBody":{"id":23885,"nodeType":"Block","src":"8944:84:88","statements":[{"errorCall":{"arguments":[{"id":23880,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23839,"src":"8987:6:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23881,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23841,"src":"8995:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23882,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23843,"src":"9004:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23879,"name":"InvalidBufferPath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1190,"src":"8969:17:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address,address) pure returns (error)"}},"id":23883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8969:44:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23884,"nodeType":"RevertStatement","src":"8962:51:88"}]}}]}}]},"id":23916,"implemented":true,"kind":"function","modifiers":[],"name":"_checkBufferStep","nameLocation":"8568:16:88","nodeType":"FunctionDefinition","parameters":{"id":23844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23839,"mutability":"mutable","name":"buffer","nameLocation":"8593:6:88","nodeType":"VariableDeclaration","scope":23916,"src":"8585:14:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23838,"name":"address","nodeType":"ElementaryTypeName","src":"8585:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23841,"mutability":"mutable","name":"tokenIn","nameLocation":"8609:7:88","nodeType":"VariableDeclaration","scope":23916,"src":"8601:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23840,"name":"address","nodeType":"ElementaryTypeName","src":"8601:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23843,"mutability":"mutable","name":"tokenOut","nameLocation":"8626:8:88","nodeType":"VariableDeclaration","scope":23916,"src":"8618:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23842,"name":"address","nodeType":"ElementaryTypeName","src":"8618:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8584:51:88"},"returnParameters":{"id":23845,"nodeType":"ParameterList","parameters":[],"src":"8650:0:88"},"scope":23997,"src":"8559:837:88","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":23995,"nodeType":"Block","src":"9489:492:88","statements":[{"assignments":[23929],"declarations":[{"constant":false,"id":23929,"mutability":"mutable","name":"tokens","nameLocation":"9515:6:88","nodeType":"VariableDeclaration","scope":23995,"src":"9499:22:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":23927,"nodeType":"UserDefinedTypeName","pathNode":{"id":23926,"name":"IERC20","nameLocations":["9499:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"9499:6:88"},"referencedDeclaration":10558,"src":"9499:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":23928,"nodeType":"ArrayTypeName","src":"9499:8:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":23934,"initialValue":{"arguments":[{"id":23932,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23918,"src":"9544:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23930,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20200,"src":"9524:5:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"id":23931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9530:13:88","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":3561,"src":"9524:19:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":23933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9524:25:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"9499:50:88"},{"assignments":[23936],"declarations":[{"constant":false,"id":23936,"mutability":"mutable","name":"foundIn","nameLocation":"9565:7:88","nodeType":"VariableDeclaration","scope":23995,"src":"9560:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23935,"name":"bool","nodeType":"ElementaryTypeName","src":"9560:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":23938,"initialValue":{"hexValue":"66616c7365","id":23937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9575:5:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"9560:20:88"},{"assignments":[23940],"declarations":[{"constant":false,"id":23940,"mutability":"mutable","name":"foundOut","nameLocation":"9595:8:88","nodeType":"VariableDeclaration","scope":23995,"src":"9590:13:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23939,"name":"bool","nodeType":"ElementaryTypeName","src":"9590:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":23942,"initialValue":{"hexValue":"66616c7365","id":23941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9606:5:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"9590:21:88"},{"body":{"id":23980,"nodeType":"Block","src":"9666:201:88","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"id":23960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":23954,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23929,"src":"9684:6:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23956,"indexExpression":{"id":23955,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23944,"src":"9691:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9684:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":23958,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23920,"src":"9704:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23957,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"9697:6:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10558_$","typeString":"type(contract IERC20)"}},"id":23959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9697:15:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"src":"9684:28:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23966,"nodeType":"IfStatement","src":"9680:81:88","trueBody":{"id":23965,"nodeType":"Block","src":"9714:47:88","statements":[{"expression":{"id":23963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23961,"name":"foundIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23936,"src":"9732:7:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":23962,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9742:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"9732:14:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23964,"nodeType":"ExpressionStatement","src":"9732:14:88"}]}},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"id":23973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":23967,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23929,"src":"9778:6:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23969,"indexExpression":{"id":23968,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23944,"src":"9785:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9778:9:88","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":23971,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23922,"src":"9798:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23970,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"9791:6:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$10558_$","typeString":"type(contract IERC20)"}},"id":23972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9791:16:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"src":"9778:29:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23979,"nodeType":"IfStatement","src":"9774:83:88","trueBody":{"id":23978,"nodeType":"Block","src":"9809:48:88","statements":[{"expression":{"id":23976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23974,"name":"foundOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23940,"src":"9827:8:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":23975,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9838:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"9827:15:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23977,"nodeType":"ExpressionStatement","src":"9827:15:88"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23947,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23944,"src":"9642:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23948,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23929,"src":"9646:6:88","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$10558_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9653:6:88","memberName":"length","nodeType":"MemberAccess","src":"9646:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9642:17:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23981,"initializationExpression":{"assignments":[23944],"declarations":[{"constant":false,"id":23944,"mutability":"mutable","name":"i","nameLocation":"9635:1:88","nodeType":"VariableDeclaration","scope":23981,"src":"9627:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23943,"name":"uint256","nodeType":"ElementaryTypeName","src":"9627:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23946,"initialValue":{"hexValue":"30","id":23945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9639:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9627:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"9661:3:88","subExpression":{"id":23951,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23944,"src":"9663:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23953,"nodeType":"ExpressionStatement","src":"9661:3:88"},"nodeType":"ForStatement","src":"9622:245:88"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23982,"name":"foundIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23936,"src":"9881:7:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":23983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9892:5:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"9881:16:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23985,"name":"foundOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23940,"src":"9901:8:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":23986,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9913:5:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"9901:17:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9881:37:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23994,"nodeType":"IfStatement","src":"9877:98:88","trueBody":{"id":23993,"nodeType":"Block","src":"9920:55:88","statements":[{"errorCall":{"arguments":[{"id":23990,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23918,"src":"9959:4:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23989,"name":"InvalidSimplePath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1172,"src":"9941:17:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":23991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9941:23:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23992,"nodeType":"RevertStatement","src":"9934:30:88"}]}}]},"id":23996,"implemented":true,"kind":"function","modifiers":[],"name":"_checkPoolStep","nameLocation":"9411:14:88","nodeType":"FunctionDefinition","parameters":{"id":23923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23918,"mutability":"mutable","name":"pool","nameLocation":"9434:4:88","nodeType":"VariableDeclaration","scope":23996,"src":"9426:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23917,"name":"address","nodeType":"ElementaryTypeName","src":"9426:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23920,"mutability":"mutable","name":"tokenIn","nameLocation":"9448:7:88","nodeType":"VariableDeclaration","scope":23996,"src":"9440:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23919,"name":"address","nodeType":"ElementaryTypeName","src":"9440:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23922,"mutability":"mutable","name":"tokenOut","nameLocation":"9465:8:88","nodeType":"VariableDeclaration","scope":23996,"src":"9457:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23921,"name":"address","nodeType":"ElementaryTypeName","src":"9457:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9425:49:88"},"returnParameters":{"id":23924,"nodeType":"ParameterList","parameters":[],"src":"9489:0:88"},"scope":23997,"src":"9402:579:88","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":23998,"src":"1158:8825:88","usedErrors":[5,1164,1167,1172,1181,1190,1193,9334,9339,20197],"usedEvents":[1150,1159,9345,9483]}],"src":"46:9938:88"},"id":88},"contracts/test/FeeBurnerAuthenticationMock.sol":{"ast":{"absolutePath":"contracts/test/FeeBurnerAuthenticationMock.sol","exportedSymbols":{"FeeBurnerAuthentication":[19827],"FeeBurnerAuthenticationMock":[24033],"IProtocolFeeSweeper":[1137],"IVault":[2527]},"id":24034,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":23999,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:89"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":24001,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24034,"sourceUnit":2528,"src":"72:81:89","symbolAliases":[{"foreign":{"id":24000,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"81:6:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol","id":24003,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24034,"sourceUnit":1138,"src":"154:118:89","symbolAliases":[{"foreign":{"id":24002,"name":"IProtocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1137,"src":"163:19:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/FeeBurnerAuthentication.sol","file":"../FeeBurnerAuthentication.sol","id":24005,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24034,"sourceUnit":19828,"src":"274:73:89","symbolAliases":[{"foreign":{"id":24004,"name":"FeeBurnerAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19827,"src":"283:23:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24006,"name":"FeeBurnerAuthentication","nameLocations":["389:23:89"],"nodeType":"IdentifierPath","referencedDeclaration":19827,"src":"389:23:89"},"id":24007,"nodeType":"InheritanceSpecifier","src":"389:23:89"}],"canonicalName":"FeeBurnerAuthenticationMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":24033,"linearizedBaseContracts":[24033,19827,9554,9468,12348],"name":"FeeBurnerAuthenticationMock","nameLocation":"358:27:89","nodeType":"ContractDefinition","nodes":[{"body":{"id":24019,"nodeType":"Block","src":"573:64:89","statements":[]},"id":24020,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":24015,"name":"protocolFeeSweeper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24010,"src":"539:18:89","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},{"id":24016,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24012,"src":"559:12:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":24017,"kind":"baseConstructorSpecifier","modifierName":{"id":24014,"name":"FeeBurnerAuthentication","nameLocations":["515:23:89"],"nodeType":"IdentifierPath","referencedDeclaration":19827,"src":"515:23:89"},"nodeType":"ModifierInvocation","src":"515:57:89"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24010,"mutability":"mutable","name":"protocolFeeSweeper","nameLocation":"460:18:89","nodeType":"VariableDeclaration","scope":24020,"src":"440:38:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"},"typeName":{"id":24009,"nodeType":"UserDefinedTypeName","pathNode":{"id":24008,"name":"IProtocolFeeSweeper","nameLocations":["440:19:89"],"nodeType":"IdentifierPath","referencedDeclaration":1137,"src":"440:19:89"},"referencedDeclaration":1137,"src":"440:19:89","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeSweeper_$1137","typeString":"contract IProtocolFeeSweeper"}},"visibility":"internal"},{"constant":false,"id":24012,"mutability":"mutable","name":"initialOwner","nameLocation":"496:12:89","nodeType":"VariableDeclaration","scope":24020,"src":"488:20:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24011,"name":"address","nodeType":"ElementaryTypeName","src":"488:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"430:84:89"},"returnParameters":{"id":24018,"nodeType":"ParameterList","parameters":[],"src":"573:0:89"},"scope":24033,"src":"419:218:89","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":24025,"nodeType":"Block","src":"715:2:89","statements":[]},"functionSelector":"8ec20833","id":24026,"implemented":true,"kind":"function","modifiers":[{"id":24023,"kind":"modifierInvocation","modifierName":{"id":24022,"name":"onlyProtocolFeeSweeper","nameLocations":["692:22:89"],"nodeType":"IdentifierPath","referencedDeclaration":19775,"src":"692:22:89"},"nodeType":"ModifierInvocation","src":"692:22:89"}],"name":"manualOnlyProtocolFeeSweeper","nameLocation":"652:28:89","nodeType":"FunctionDefinition","parameters":{"id":24021,"nodeType":"ParameterList","parameters":[],"src":"680:2:89"},"returnParameters":{"id":24024,"nodeType":"ParameterList","parameters":[],"src":"715:0:89"},"scope":24033,"src":"643:74:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24031,"nodeType":"Block","src":"797:2:89","statements":[]},"functionSelector":"f405ce44","id":24032,"implemented":true,"kind":"function","modifiers":[{"id":24029,"kind":"modifierInvocation","modifierName":{"id":24028,"name":"onlyFeeRecipientOrOwner","nameLocations":["773:23:89"],"nodeType":"IdentifierPath","referencedDeclaration":19796,"src":"773:23:89"},"nodeType":"ModifierInvocation","src":"773:23:89"}],"name":"manualOnlyFeeRecipientOrOwner","nameLocation":"732:29:89","nodeType":"FunctionDefinition","parameters":{"id":24027,"nodeType":"ParameterList","parameters":[],"src":"761:2:89"},"returnParameters":{"id":24030,"nodeType":"ParameterList","parameters":[],"src":"797:0:89"},"scope":24033,"src":"723:76:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":24034,"src":"349:452:89","usedErrors":[9334,9339,19756,19759],"usedEvents":[9345,9483]}],"src":"46:756:89"},"id":89},"contracts/test/OwnableAuthenticationMock.sol":{"ast":{"absolutePath":"contracts/test/OwnableAuthenticationMock.sol","exportedSymbols":{"Authentication":[4367],"IAuthorizer":[1341],"IVault":[2527],"Ownable":[9468],"Ownable2Step":[9554],"OwnableAuthentication":[20312],"OwnableAuthenticationMock":[24069]},"id":24070,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24035,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:90"},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"@openzeppelin/contracts/access/Ownable.sol","id":24037,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24070,"sourceUnit":9469,"src":"72:69:90","symbolAliases":[{"foreign":{"id":24036,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9468,"src":"81:7:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/Ownable2Step.sol","file":"@openzeppelin/contracts/access/Ownable2Step.sol","id":24039,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24070,"sourceUnit":9555,"src":"142:79:90","symbolAliases":[{"foreign":{"id":24038,"name":"Ownable2Step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9554,"src":"151:12:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":24041,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24070,"sourceUnit":1342,"src":"223:91:90","symbolAliases":[{"foreign":{"id":24040,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"232:11:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":24043,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24070,"sourceUnit":2528,"src":"315:81:90","symbolAliases":[{"foreign":{"id":24042,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"324:6:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","id":24045,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24070,"sourceUnit":4368,"src":"398:103:90","symbolAliases":[{"foreign":{"id":24044,"name":"Authentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4367,"src":"407:14:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/OwnableAuthentication.sol","file":"../OwnableAuthentication.sol","id":24047,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24070,"sourceUnit":20313,"src":"503:69:90","symbolAliases":[{"foreign":{"id":24046,"name":"OwnableAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20312,"src":"512:21:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24048,"name":"OwnableAuthentication","nameLocations":["612:21:90"],"nodeType":"IdentifierPath","referencedDeclaration":20312,"src":"612:21:90"},"id":24049,"nodeType":"InheritanceSpecifier","src":"612:21:90"}],"canonicalName":"OwnableAuthenticationMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":24069,"linearizedBaseContracts":[24069,20312,4367,14,9554,9468,12348],"name":"OwnableAuthenticationMock","nameLocation":"583:25:90","nodeType":"ContractDefinition","nodes":[{"body":{"id":24061,"nodeType":"Block","src":"731:64:90","statements":[]},"id":24062,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":24057,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24052,"src":"710:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},{"id":24058,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24054,"src":"717:12:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":24059,"kind":"baseConstructorSpecifier","modifierName":{"id":24056,"name":"OwnableAuthentication","nameLocations":["688:21:90"],"nodeType":"IdentifierPath","referencedDeclaration":20312,"src":"688:21:90"},"nodeType":"ModifierInvocation","src":"688:42:90"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24052,"mutability":"mutable","name":"vault","nameLocation":"659:5:90","nodeType":"VariableDeclaration","scope":24062,"src":"652:12:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":24051,"nodeType":"UserDefinedTypeName","pathNode":{"id":24050,"name":"IVault","nameLocations":["652:6:90"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"652:6:90"},"referencedDeclaration":2527,"src":"652:6:90","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":24054,"mutability":"mutable","name":"initialOwner","nameLocation":"674:12:90","nodeType":"VariableDeclaration","scope":24062,"src":"666:20:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24053,"name":"address","nodeType":"ElementaryTypeName","src":"666:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"651:36:90"},"returnParameters":{"id":24060,"nodeType":"ParameterList","parameters":[],"src":"731:0:90"},"scope":24069,"src":"640:155:90","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":24067,"nodeType":"Block","src":"860:64:90","statements":[]},"functionSelector":"c1d08010","id":24068,"implemented":true,"kind":"function","modifiers":[{"id":24065,"kind":"modifierInvocation","modifierName":{"id":24064,"name":"authenticate","nameLocations":["847:12:90"],"nodeType":"IdentifierPath","referencedDeclaration":4315,"src":"847:12:90"},"nodeType":"ModifierInvocation","src":"847:12:90"}],"name":"permissionedFunction","nameLocation":"810:20:90","nodeType":"FunctionDefinition","parameters":{"id":24063,"nodeType":"ParameterList","parameters":[],"src":"830:2:90"},"returnParameters":{"id":24066,"nodeType":"ParameterList","parameters":[],"src":"860:0:90"},"scope":24069,"src":"801:123:90","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":24070,"src":"574:352:90","usedErrors":[5,9334,9339,20197],"usedEvents":[9345,9483]}],"src":"46:881:90"},"id":90},"contracts/test/PoolHelperMock.sol":{"ast":{"absolutePath":"contracts/test/PoolHelperMock.sol","exportedSymbols":{"IVault":[2527],"PoolHelperCommon":[21041],"PoolHelperMock":[24091]},"id":24092,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24071,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:91"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":24073,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24092,"sourceUnit":2528,"src":"72:81:91","symbolAliases":[{"foreign":{"id":24072,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"81:6:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/PoolHelperCommon.sol","file":"../PoolHelperCommon.sol","id":24075,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24092,"sourceUnit":21042,"src":"155:59:91","symbolAliases":[{"foreign":{"id":24074,"name":"PoolHelperCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21041,"src":"164:16:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24076,"name":"PoolHelperCommon","nameLocations":["243:16:91"],"nodeType":"IdentifierPath","referencedDeclaration":21041,"src":"243:16:91"},"id":24077,"nodeType":"InheritanceSpecifier","src":"243:16:91"}],"canonicalName":"PoolHelperMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":24091,"linearizedBaseContracts":[24091,21041,20312,4367,14,9554,9468,12348,865],"name":"PoolHelperMock","nameLocation":"225:14:91","nodeType":"ContractDefinition","nodes":[{"body":{"id":24089,"nodeType":"Block","src":"352:64:91","statements":[]},"id":24090,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":24085,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24080,"src":"331:5:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},{"id":24086,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24082,"src":"338:12:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":24087,"kind":"baseConstructorSpecifier","modifierName":{"id":24084,"name":"PoolHelperCommon","nameLocations":["314:16:91"],"nodeType":"IdentifierPath","referencedDeclaration":21041,"src":"314:16:91"},"nodeType":"ModifierInvocation","src":"314:37:91"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24083,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24080,"mutability":"mutable","name":"vault","nameLocation":"285:5:91","nodeType":"VariableDeclaration","scope":24090,"src":"278:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":24079,"nodeType":"UserDefinedTypeName","pathNode":{"id":24078,"name":"IVault","nameLocations":["278:6:91"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"278:6:91"},"referencedDeclaration":2527,"src":"278:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":24082,"mutability":"mutable","name":"initialOwner","nameLocation":"300:12:91","nodeType":"VariableDeclaration","scope":24090,"src":"292:20:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24081,"name":"address","nodeType":"ElementaryTypeName","src":"292:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"277:36:91"},"returnParameters":{"id":24088,"nodeType":"ParameterList","parameters":[],"src":"352:0:91"},"scope":24091,"src":"266:150:91","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":24092,"src":"216:202:91","usedErrors":[5,711,718,723,726,731,734,739,2839,9334,9339,20197],"usedEvents":[674,681,688,695,704,9345,9483]}],"src":"46:373:91"},"id":91},"contracts/test/PriceImpactHelperMock.sol":{"ast":{"absolutePath":"contracts/test/PriceImpactHelperMock.sol","exportedSymbols":{"IRouter":[2489],"IVault":[2527],"PriceImpactHelper":[21869],"PriceImpactHelperMock":[24187]},"id":24188,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24093,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:92"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":24095,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24188,"sourceUnit":2528,"src":"72:81:92","symbolAliases":[{"foreign":{"id":24094,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"81:6:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","id":24097,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24188,"sourceUnit":2490,"src":"154:83:92","symbolAliases":[{"foreign":{"id":24096,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2489,"src":"163:7:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/PriceImpactHelper.sol","file":"../PriceImpactHelper.sol","id":24099,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24188,"sourceUnit":21870,"src":"239:61:92","symbolAliases":[{"foreign":{"id":24098,"name":"PriceImpactHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21869,"src":"248:17:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24100,"name":"PriceImpactHelper","nameLocations":["336:17:92"],"nodeType":"IdentifierPath","referencedDeclaration":21869,"src":"336:17:92"},"id":24101,"nodeType":"InheritanceSpecifier","src":"336:17:92"}],"canonicalName":"PriceImpactHelperMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":24187,"linearizedBaseContracts":[24187,21869,18615],"name":"PriceImpactHelperMock","nameLocation":"311:21:92","nodeType":"ContractDefinition","nodes":[{"body":{"id":24114,"nodeType":"Block","src":"435:2:92","statements":[]},"id":24115,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":24110,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24104,"src":"420:5:92","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},{"id":24111,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24107,"src":"427:6:92","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2489","typeString":"contract IRouter"}}],"id":24112,"kind":"baseConstructorSpecifier","modifierName":{"id":24109,"name":"PriceImpactHelper","nameLocations":["402:17:92"],"nodeType":"IdentifierPath","referencedDeclaration":21869,"src":"402:17:92"},"nodeType":"ModifierInvocation","src":"402:32:92"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24104,"mutability":"mutable","name":"vault","nameLocation":"379:5:92","nodeType":"VariableDeclaration","scope":24115,"src":"372:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"},"typeName":{"id":24103,"nodeType":"UserDefinedTypeName","pathNode":{"id":24102,"name":"IVault","nameLocations":["372:6:92"],"nodeType":"IdentifierPath","referencedDeclaration":2527,"src":"372:6:92"},"referencedDeclaration":2527,"src":"372:6:92","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$2527","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":24107,"mutability":"mutable","name":"router","nameLocation":"394:6:92","nodeType":"VariableDeclaration","scope":24115,"src":"386:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2489","typeString":"contract IRouter"},"typeName":{"id":24106,"nodeType":"UserDefinedTypeName","pathNode":{"id":24105,"name":"IRouter","nameLocations":["386:7:92"],"nodeType":"IdentifierPath","referencedDeclaration":2489,"src":"386:7:92"},"referencedDeclaration":2489,"src":"386:7:92","typeDescriptions":{"typeIdentifier":"t_contract$_IRouter_$2489","typeString":"contract IRouter"}},"visibility":"internal"}],"src":"371:30:92"},"returnParameters":{"id":24113,"nodeType":"ParameterList","parameters":[],"src":"435:0:92"},"scope":24187,"src":"360:77:92","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":24136,"nodeType":"Block","src":"641:100:92","statements":[{"expression":{"arguments":[{"id":24130,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24117,"src":"701:4:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24131,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24119,"src":"707:10:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24132,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24122,"src":"719:6:92","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":24133,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24124,"src":"727:6:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":24129,"name":"_queryAddLiquidityUnbalancedForTokenDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21598,"src":"658:42:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_int256_$","typeString":"function (address,uint256,int256[] memory,address) returns (int256)"}},"id":24134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"658:76:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":24128,"id":24135,"nodeType":"Return","src":"651:83:92"}]},"functionSelector":"e3a50d82","id":24137,"implemented":true,"kind":"function","modifiers":[],"name":"queryAddLiquidityUnbalancedForTokenDeltas","nameLocation":"452:41:92","nodeType":"FunctionDefinition","parameters":{"id":24125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24117,"mutability":"mutable","name":"pool","nameLocation":"511:4:92","nodeType":"VariableDeclaration","scope":24137,"src":"503:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24116,"name":"address","nodeType":"ElementaryTypeName","src":"503:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24119,"mutability":"mutable","name":"tokenIndex","nameLocation":"533:10:92","nodeType":"VariableDeclaration","scope":24137,"src":"525:18:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24118,"name":"uint256","nodeType":"ElementaryTypeName","src":"525:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24122,"mutability":"mutable","name":"deltas","nameLocation":"569:6:92","nodeType":"VariableDeclaration","scope":24137,"src":"553:22:92","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":24120,"name":"int256","nodeType":"ElementaryTypeName","src":"553:6:92","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":24121,"nodeType":"ArrayTypeName","src":"553:8:92","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":24124,"mutability":"mutable","name":"sender","nameLocation":"593:6:92","nodeType":"VariableDeclaration","scope":24137,"src":"585:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24123,"name":"address","nodeType":"ElementaryTypeName","src":"585:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"493:112:92"},"returnParameters":{"id":24128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24127,"mutability":"mutable","name":"deltaBPT","nameLocation":"631:8:92","nodeType":"VariableDeclaration","scope":24137,"src":"624:15:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":24126,"name":"int256","nodeType":"ElementaryTypeName","src":"624:6:92","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"623:17:92"},"scope":24187,"src":"443:298:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24159,"nodeType":"Block","src":"916:71:92","statements":[{"expression":{"arguments":[{"id":24153,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24139,"src":"948:4:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24154,"name":"deltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24142,"src":"954:6:92","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":24155,"name":"deltaBPTs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24145,"src":"962:9:92","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}},{"id":24156,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24147,"src":"973:6:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":24152,"name":"_zeroOutDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21762,"src":"933:14:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_int256_$dyn_memory_ptr_$_t_array$_t_int256_$dyn_memory_ptr_$_t_address_$returns$_t_uint256_$","typeString":"function (address,int256[] memory,int256[] memory,address) returns (uint256)"}},"id":24157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"933:47:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24151,"id":24158,"nodeType":"Return","src":"926:54:92"}]},"functionSelector":"3b064ca3","id":24160,"implemented":true,"kind":"function","modifiers":[],"name":"zeroOutDeltas","nameLocation":"756:13:92","nodeType":"FunctionDefinition","parameters":{"id":24148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24139,"mutability":"mutable","name":"pool","nameLocation":"787:4:92","nodeType":"VariableDeclaration","scope":24160,"src":"779:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24138,"name":"address","nodeType":"ElementaryTypeName","src":"779:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24142,"mutability":"mutable","name":"deltas","nameLocation":"817:6:92","nodeType":"VariableDeclaration","scope":24160,"src":"801:22:92","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":24140,"name":"int256","nodeType":"ElementaryTypeName","src":"801:6:92","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":24141,"nodeType":"ArrayTypeName","src":"801:8:92","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":24145,"mutability":"mutable","name":"deltaBPTs","nameLocation":"849:9:92","nodeType":"VariableDeclaration","scope":24160,"src":"833:25:92","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":24143,"name":"int256","nodeType":"ElementaryTypeName","src":"833:6:92","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":24144,"nodeType":"ArrayTypeName","src":"833:8:92","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"},{"constant":false,"id":24147,"mutability":"mutable","name":"sender","nameLocation":"876:6:92","nodeType":"VariableDeclaration","scope":24160,"src":"868:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24146,"name":"address","nodeType":"ElementaryTypeName","src":"868:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"769:119:92"},"returnParameters":{"id":24151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24150,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24160,"src":"907:7:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24149,"name":"uint256","nodeType":"ElementaryTypeName","src":"907:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"906:9:92"},"scope":24187,"src":"747:240:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24172,"nodeType":"Block","src":"1074:48:92","statements":[{"expression":{"arguments":[{"id":24169,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24163,"src":"1109:5:92","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}],"id":24168,"name":"_minPositiveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21815,"src":"1091:17:92","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (int256[] memory) pure returns (uint256)"}},"id":24170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1091:24:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24167,"id":24171,"nodeType":"Return","src":"1084:31:92"}]},"functionSelector":"0d4277d1","id":24173,"implemented":true,"kind":"function","modifiers":[],"name":"minPositiveIndex","nameLocation":"1002:16:92","nodeType":"FunctionDefinition","parameters":{"id":24164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24163,"mutability":"mutable","name":"array","nameLocation":"1035:5:92","nodeType":"VariableDeclaration","scope":24173,"src":"1019:21:92","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":24161,"name":"int256","nodeType":"ElementaryTypeName","src":"1019:6:92","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":24162,"nodeType":"ArrayTypeName","src":"1019:8:92","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"1018:23:92"},"returnParameters":{"id":24167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24166,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24173,"src":"1065:7:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24165,"name":"uint256","nodeType":"ElementaryTypeName","src":"1065:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1064:9:92"},"scope":24187,"src":"993:129:92","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":24185,"nodeType":"Block","src":"1209:48:92","statements":[{"expression":{"arguments":[{"id":24182,"name":"array","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24176,"src":"1244:5:92","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[] memory"}],"id":24181,"name":"_maxNegativeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21868,"src":"1226:17:92","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_int256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (int256[] memory) pure returns (uint256)"}},"id":24183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1226:24:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24180,"id":24184,"nodeType":"Return","src":"1219:31:92"}]},"functionSelector":"01ef39ee","id":24186,"implemented":true,"kind":"function","modifiers":[],"name":"maxNegativeIndex","nameLocation":"1137:16:92","nodeType":"FunctionDefinition","parameters":{"id":24177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24176,"mutability":"mutable","name":"array","nameLocation":"1170:5:92","nodeType":"VariableDeclaration","scope":24186,"src":"1154:21:92","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_memory_ptr","typeString":"int256[]"},"typeName":{"baseType":{"id":24174,"name":"int256","nodeType":"ElementaryTypeName","src":"1154:6:92","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":24175,"nodeType":"ArrayTypeName","src":"1154:8:92","typeDescriptions":{"typeIdentifier":"t_array$_t_int256_$dyn_storage_ptr","typeString":"int256[]"}},"visibility":"internal"}],"src":"1153:23:92"},"returnParameters":{"id":24180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24179,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24186,"src":"1200:7:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24178,"name":"uint256","nodeType":"ElementaryTypeName","src":"1200:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1199:9:92"},"scope":24187,"src":"1128:129:92","stateMutability":"pure","virtual":false,"visibility":"external"}],"scope":24188,"src":"302:957:92","usedErrors":[4859,4862,11058,12361,14324,14336,18517],"usedEvents":[]}],"src":"46:1214:92"},"id":92},"contracts/test/ProtocolFeeBurnerMock.sol":{"ast":{"absolutePath":"contracts/test/ProtocolFeeBurnerMock.sol","exportedSymbols":{"ERC20TestToken":[7325],"FixedPoint":[5280],"IERC20":[10558],"IProtocolFeeBurner":[948],"ProtocolFeeBurnerMock":[24319],"SafeERC20":[11048]},"id":24320,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24189,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:93"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":24191,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24320,"sourceUnit":10559,"src":"72:72:93","symbolAliases":[{"foreign":{"id":24190,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"81:6:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":24193,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24320,"sourceUnit":11049,"src":"145:84:93","symbolAliases":[{"foreign":{"id":24192,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11048,"src":"154:9:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol","id":24195,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24320,"sourceUnit":949,"src":"231:116:93","symbolAliases":[{"foreign":{"id":24194,"name":"IProtocolFeeBurner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":948,"src":"240:18:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol","file":"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol","id":24197,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24320,"sourceUnit":7326,"src":"349:100:93","symbolAliases":[{"foreign":{"id":24196,"name":"ERC20TestToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7325,"src":"358:14:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":24199,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24320,"sourceUnit":5281,"src":"450:92:93","symbolAliases":[{"foreign":{"id":24198,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5280,"src":"459:10:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24200,"name":"IProtocolFeeBurner","nameLocations":["578:18:93"],"nodeType":"IdentifierPath","referencedDeclaration":948,"src":"578:18:93"},"id":24201,"nodeType":"InheritanceSpecifier","src":"578:18:93"}],"canonicalName":"ProtocolFeeBurnerMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":24319,"linearizedBaseContracts":[24319,948],"name":"ProtocolFeeBurnerMock","nameLocation":"553:21:93","nodeType":"ContractDefinition","nodes":[{"global":false,"id":24204,"libraryName":{"id":24202,"name":"FixedPoint","nameLocations":["609:10:93"],"nodeType":"IdentifierPath","referencedDeclaration":5280,"src":"609:10:93"},"nodeType":"UsingForDirective","src":"603:29:93","typeName":{"id":24203,"name":"uint256","nodeType":"ElementaryTypeName","src":"624:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":24208,"libraryName":{"id":24205,"name":"SafeERC20","nameLocations":["643:9:93"],"nodeType":"IdentifierPath","referencedDeclaration":11048,"src":"643:9:93"},"nodeType":"UsingForDirective","src":"637:27:93","typeName":{"id":24207,"nodeType":"UserDefinedTypeName","pathNode":{"id":24206,"name":"IERC20","nameLocations":["657:6:93"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"657:6:93"},"referencedDeclaration":10558,"src":"657:6:93","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}},{"constant":false,"id":24212,"mutability":"mutable","name":"_tokenRatio","nameLocation":"686:11:93","nodeType":"VariableDeclaration","scope":24319,"src":"670:44:93","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24209,"name":"uint256","nodeType":"ElementaryTypeName","src":"670:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"expression":{"id":24210,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5280,"src":"700:10:93","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$5280_$","typeString":"type(library FixedPoint)"}},"id":24211,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"711:3:93","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4992,"src":"700:14:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":24215,"mutability":"mutable","name":"transferFromEnabled","nameLocation":"726:19:93","nodeType":"VariableDeclaration","scope":24319,"src":"721:31:93","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24213,"name":"bool","nodeType":"ElementaryTypeName","src":"721:4:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":{"hexValue":"74727565","id":24214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"748:4:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"visibility":"internal"},{"baseFunctions":[947],"body":{"id":24297,"nodeType":"Block","src":"1024:818:93","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24235,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1038:5:93","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":24236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1044:9:93","memberName":"timestamp","nodeType":"MemberAccess","src":"1038:15:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":24237,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24232,"src":"1056:8:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1038:26:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24243,"nodeType":"IfStatement","src":"1034:78:93","trueBody":{"id":24242,"nodeType":"Block","src":"1066:46:93","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24239,"name":"SwapDeadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":927,"src":"1087:12:93","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1087:14:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24241,"nodeType":"RevertStatement","src":"1080:21:93"}]}},{"condition":{"id":24244,"name":"transferFromEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24215,"src":"1126:19:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24258,"nodeType":"IfStatement","src":"1122:125:93","trueBody":{"id":24257,"nodeType":"Block","src":"1147:100:93","statements":[{"expression":{"arguments":[{"expression":{"id":24248,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1187:3:93","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1191:6:93","memberName":"sender","nodeType":"MemberAccess","src":"1187:10:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":24252,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1207:4:93","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeBurnerMock_$24319","typeString":"contract ProtocolFeeBurnerMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeBurnerMock_$24319","typeString":"contract ProtocolFeeBurnerMock"}],"id":24251,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1199:7:93","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24250,"name":"address","nodeType":"ElementaryTypeName","src":"1199:7:93","typeDescriptions":{}}},"id":24253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1199:13:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24254,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24223,"src":"1214:21:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24245,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24221,"src":"1161:8:93","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":24247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1170:16:93","memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":10656,"src":"1161:25:93","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10558_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":24255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1161:75:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24256,"nodeType":"ExpressionStatement","src":"1161:75:93"}]}},{"expression":{"arguments":[{"id":24266,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24230,"src":"1383:9:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24267,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24223,"src":"1394:21:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"arguments":[{"id":24262,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24226,"src":"1364:11:93","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}],"id":24261,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1356:7:93","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24260,"name":"address","nodeType":"ElementaryTypeName","src":"1356:7:93","typeDescriptions":{}}},"id":24263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1356:20:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24259,"name":"ERC20TestToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7325,"src":"1341:14:93","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC20TestToken_$7325_$","typeString":"type(contract ERC20TestToken)"}},"id":24264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1341:36:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ERC20TestToken_$7325","typeString":"contract ERC20TestToken"}},"id":24265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1378:4:93","memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":7258,"src":"1341:41:93","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":24268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1341:75:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24269,"nodeType":"ExpressionStatement","src":"1341:75:93"},{"assignments":[24271],"declarations":[{"constant":false,"id":24271,"mutability":"mutable","name":"targetTokenAmount","nameLocation":"1435:17:93","nodeType":"VariableDeclaration","scope":24297,"src":"1427:25:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24270,"name":"uint256","nodeType":"ElementaryTypeName","src":"1427:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24276,"initialValue":{"arguments":[{"id":24274,"name":"_tokenRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24212,"src":"1485:11:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24272,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24223,"src":"1455:21:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1477:7:93","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":5025,"src":"1455:29:93","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":24275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1455:42:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1427:70:93"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24277,"name":"targetTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24271,"src":"1511:17:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":24278,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24228,"src":"1531:12:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1511:32:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24287,"nodeType":"IfStatement","src":"1507:133:93","trueBody":{"id":24286,"nodeType":"Block","src":"1545:95:93","statements":[{"errorCall":{"arguments":[{"id":24281,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24226,"src":"1584:11:93","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":24282,"name":"targetTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24271,"src":"1597:17:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24283,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24228,"src":"1616:12:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24280,"name":"AmountOutBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":924,"src":"1566:17:93","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$10558_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":24284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1566:63:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24285,"nodeType":"RevertStatement","src":"1559:70:93"}]}},{"eventCall":{"arguments":[{"id":24289,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24218,"src":"1754:4:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24290,"name":"feeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24221,"src":"1760:8:93","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":24291,"name":"exactFeeTokenAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24223,"src":"1770:21:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24292,"name":"targetToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24226,"src":"1793:11:93","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},{"id":24293,"name":"targetTokenAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24271,"src":"1806:17:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24294,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24230,"src":"1825:9:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":24288,"name":"ProtocolFeeBurned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":914,"src":"1736:17:93","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$10558_$_t_uint256_$_t_contract$_IERC20_$10558_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,contract IERC20,uint256,contract IERC20,uint256,address)"}},"id":24295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1736:99:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24296,"nodeType":"EmitStatement","src":"1731:104:93"}]},"documentation":{"id":24216,"nodeType":"StructuredDocumentation","src":"759:34:93","text":"@inheritdoc IProtocolFeeBurner"},"functionSelector":"de557a32","id":24298,"implemented":true,"kind":"function","modifiers":[],"name":"burn","nameLocation":"807:4:93","nodeType":"FunctionDefinition","parameters":{"id":24233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24218,"mutability":"mutable","name":"pool","nameLocation":"829:4:93","nodeType":"VariableDeclaration","scope":24298,"src":"821:12:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24217,"name":"address","nodeType":"ElementaryTypeName","src":"821:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24221,"mutability":"mutable","name":"feeToken","nameLocation":"850:8:93","nodeType":"VariableDeclaration","scope":24298,"src":"843:15:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":24220,"nodeType":"UserDefinedTypeName","pathNode":{"id":24219,"name":"IERC20","nameLocations":["843:6:93"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"843:6:93"},"referencedDeclaration":10558,"src":"843:6:93","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":24223,"mutability":"mutable","name":"exactFeeTokenAmountIn","nameLocation":"876:21:93","nodeType":"VariableDeclaration","scope":24298,"src":"868:29:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24222,"name":"uint256","nodeType":"ElementaryTypeName","src":"868:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24226,"mutability":"mutable","name":"targetToken","nameLocation":"914:11:93","nodeType":"VariableDeclaration","scope":24298,"src":"907:18:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":24225,"nodeType":"UserDefinedTypeName","pathNode":{"id":24224,"name":"IERC20","nameLocations":["907:6:93"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"907:6:93"},"referencedDeclaration":10558,"src":"907:6:93","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":24228,"mutability":"mutable","name":"minAmountOut","nameLocation":"943:12:93","nodeType":"VariableDeclaration","scope":24298,"src":"935:20:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24227,"name":"uint256","nodeType":"ElementaryTypeName","src":"935:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24230,"mutability":"mutable","name":"recipient","nameLocation":"973:9:93","nodeType":"VariableDeclaration","scope":24298,"src":"965:17:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24229,"name":"address","nodeType":"ElementaryTypeName","src":"965:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24232,"mutability":"mutable","name":"deadline","nameLocation":"1000:8:93","nodeType":"VariableDeclaration","scope":24298,"src":"992:16:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24231,"name":"uint256","nodeType":"ElementaryTypeName","src":"992:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"811:203:93"},"returnParameters":{"id":24234,"nodeType":"ParameterList","parameters":[],"src":"1024:0:93"},"scope":24319,"src":"798:1044:93","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24307,"nodeType":"Block","src":"1895:36:93","statements":[{"expression":{"id":24305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24303,"name":"_tokenRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24212,"src":"1905:11:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24304,"name":"ratio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24300,"src":"1919:5:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1905:19:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24306,"nodeType":"ExpressionStatement","src":"1905:19:93"}]},"functionSelector":"e38e91f9","id":24308,"implemented":true,"kind":"function","modifiers":[],"name":"setTokenRatio","nameLocation":"1857:13:93","nodeType":"FunctionDefinition","parameters":{"id":24301,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24300,"mutability":"mutable","name":"ratio","nameLocation":"1879:5:93","nodeType":"VariableDeclaration","scope":24308,"src":"1871:13:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24299,"name":"uint256","nodeType":"ElementaryTypeName","src":"1871:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1870:15:93"},"returnParameters":{"id":24302,"nodeType":"ParameterList","parameters":[],"src":"1895:0:93"},"scope":24319,"src":"1848:83:93","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24317,"nodeType":"Block","src":"1992:46:93","statements":[{"expression":{"id":24315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24313,"name":"transferFromEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24215,"src":"2002:19:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24314,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24310,"src":"2024:7:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2002:29:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24316,"nodeType":"ExpressionStatement","src":"2002:29:93"}]},"functionSelector":"7d341ad6","id":24318,"implemented":true,"kind":"function","modifiers":[],"name":"setTransferFromEnabled","nameLocation":"1946:22:93","nodeType":"FunctionDefinition","parameters":{"id":24311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24310,"mutability":"mutable","name":"enabled","nameLocation":"1974:7:93","nodeType":"VariableDeclaration","scope":24318,"src":"1969:12:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24309,"name":"bool","nodeType":"ElementaryTypeName","src":"1969:4:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1968:14:93"},"returnParameters":{"id":24312,"nodeType":"ParameterList","parameters":[],"src":"1992:0:93"},"scope":24319,"src":"1937:101:93","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":24320,"src":"544:1496:93","usedErrors":[924,927,10596],"usedEvents":[914]}],"src":"46:1995:93"},"id":93},"contracts/test/VaultMockForFeeSweeper.sol":{"ast":{"absolutePath":"contracts/test/VaultMockForFeeSweeper.sol","exportedSymbols":{"IAuthorizer":[1341],"IERC20":[10558],"IProtocolFeeController":[1955],"SafeERC20":[11048],"VaultMockForFeeSweeper":[24481]},"id":24482,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24321,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:94"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":24323,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24482,"sourceUnit":10559,"src":"72:72:94","symbolAliases":[{"foreign":{"id":24322,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10558,"src":"81:6:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":24325,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24482,"sourceUnit":11049,"src":"145:84:94","symbolAliases":[{"foreign":{"id":24324,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11048,"src":"154:9:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":24327,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24482,"sourceUnit":1342,"src":"230:91:94","symbolAliases":[{"foreign":{"id":24326,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"239:11:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":24329,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24482,"sourceUnit":1956,"src":"322:113:94","symbolAliases":[{"foreign":{"id":24328,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"331:22:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":24330,"name":"IAuthorizer","nameLocations":["472:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"472:11:94"},"id":24331,"nodeType":"InheritanceSpecifier","src":"472:11:94"}],"canonicalName":"VaultMockForFeeSweeper","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":24481,"linearizedBaseContracts":[24481,1341],"name":"VaultMockForFeeSweeper","nameLocation":"446:22:94","nodeType":"ContractDefinition","nodes":[{"global":false,"id":24335,"libraryName":{"id":24332,"name":"SafeERC20","nameLocations":["496:9:94"],"nodeType":"IdentifierPath","referencedDeclaration":11048,"src":"496:9:94"},"nodeType":"UsingForDirective","src":"490:27:94","typeName":{"id":24334,"nodeType":"UserDefinedTypeName","pathNode":{"id":24333,"name":"IERC20","nameLocations":["510:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"510:6:94"},"referencedDeclaration":10558,"src":"510:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}}},{"constant":false,"functionSelector":"022914a7","id":24339,"mutability":"mutable","name":"owners","nameLocation":"555:6:94","nodeType":"VariableDeclaration","scope":24481,"src":"523:38:94","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":24338,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":24336,"name":"address","nodeType":"ElementaryTypeName","src":"531:7:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"523:24:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":24337,"name":"bool","nodeType":"ElementaryTypeName","src":"542:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"public"},{"body":{"id":24349,"nodeType":"Block","src":"582:42:94","statements":[{"expression":{"id":24347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":24342,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24339,"src":"592:6:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24345,"indexExpression":{"expression":{"id":24343,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"599:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"603:6:94","memberName":"sender","nodeType":"MemberAccess","src":"599:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"592:18:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":24346,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"613:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"592:25:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24348,"nodeType":"ExpressionStatement","src":"592:25:94"}]},"id":24350,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24340,"nodeType":"ParameterList","parameters":[],"src":"579:2:94"},"returnParameters":{"id":24341,"nodeType":"ParameterList","parameters":[],"src":"582:0:94"},"scope":24481,"src":"568:56:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":24361,"nodeType":"Block","src":"651:95:94","statements":[{"expression":{"arguments":[{"baseExpression":{"id":24353,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24339,"src":"669:6:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24356,"indexExpression":{"expression":{"id":24354,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"676:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"680:6:94","memberName":"sender","nodeType":"MemberAccess","src":"676:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"669:18:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5661756c744d6f636b466f72466565537765657065723a204e6f7420616e206f776e6572","id":24357,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"689:38:94","typeDescriptions":{"typeIdentifier":"t_stringliteral_6a76a808db8d5a9ae25f2134deb57202faa17546f067bc3832f5e2fabe514229","typeString":"literal_string \"VaultMockForFeeSweeper: Not an owner\""},"value":"VaultMockForFeeSweeper: Not an owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6a76a808db8d5a9ae25f2134deb57202faa17546f067bc3832f5e2fabe514229","typeString":"literal_string \"VaultMockForFeeSweeper: Not an owner\""}],"id":24352,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"661:7:94","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24358,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"661:67:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24359,"nodeType":"ExpressionStatement","src":"661:67:94"},{"id":24360,"nodeType":"PlaceholderStatement","src":"738:1:94"}]},"id":24362,"name":"onlyOwner","nameLocation":"639:9:94","nodeType":"ModifierDefinition","parameters":{"id":24351,"nodeType":"ParameterList","parameters":[],"src":"648:2:94"},"src":"630:116:94","virtual":false,"visibility":"internal"},{"body":{"id":24375,"nodeType":"Block","src":"824:50:94","statements":[{"expression":{"arguments":[{"arguments":[{"id":24371,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"861:4:94","typeDescriptions":{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$24481","typeString":"contract VaultMockForFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$24481","typeString":"contract VaultMockForFeeSweeper"}],"id":24370,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"853:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24369,"name":"address","nodeType":"ElementaryTypeName","src":"853:7:94","typeDescriptions":{}}},"id":24372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"853:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24368,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"841:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthorizer_$1341_$","typeString":"type(contract IAuthorizer)"}},"id":24373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"841:26:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"functionReturnParameters":24367,"id":24374,"nodeType":"Return","src":"834:33:94"}]},"functionSelector":"aaabadc5","id":24376,"implemented":true,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"761:13:94","nodeType":"FunctionDefinition","parameters":{"id":24363,"nodeType":"ParameterList","parameters":[],"src":"774:2:94"},"returnParameters":{"id":24367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24366,"mutability":"mutable","name":"authorizer","nameLocation":"812:10:94","nodeType":"VariableDeclaration","scope":24376,"src":"800:22:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"},"typeName":{"id":24365,"nodeType":"UserDefinedTypeName","pathNode":{"id":24364,"name":"IAuthorizer","nameLocations":["800:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":1341,"src":"800:11:94"},"referencedDeclaration":1341,"src":"800:11:94","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1341","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"799:24:94"},"scope":24481,"src":"752:122:94","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1340],"body":{"id":24391,"nodeType":"Block","src":"964:39:94","statements":[{"expression":{"baseExpression":{"id":24387,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24339,"src":"981:6:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24389,"indexExpression":{"id":24388,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24380,"src":"988:7:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"981:15:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":24386,"id":24390,"nodeType":"Return","src":"974:22:94"}]},"functionSelector":"9be2a884","id":24392,"implemented":true,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"889:10:94","nodeType":"FunctionDefinition","parameters":{"id":24383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24378,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24392,"src":"900:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24377,"name":"bytes32","nodeType":"ElementaryTypeName","src":"900:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":24380,"mutability":"mutable","name":"account","nameLocation":"917:7:94","nodeType":"VariableDeclaration","scope":24392,"src":"909:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24379,"name":"address","nodeType":"ElementaryTypeName","src":"909:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24382,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24392,"src":"926:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24381,"name":"address","nodeType":"ElementaryTypeName","src":"926:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"899:35:94"},"returnParameters":{"id":24386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24385,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24392,"src":"958:4:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24384,"name":"bool","nodeType":"ElementaryTypeName","src":"958:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"957:6:94"},"scope":24481,"src":"880:123:94","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":24405,"nodeType":"Block","src":"1084:39:94","statements":[{"expression":{"baseExpression":{"id":24401,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24339,"src":"1101:6:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24403,"indexExpression":{"id":24402,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24396,"src":"1108:7:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1101:15:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":24400,"id":24404,"nodeType":"Return","src":"1094:22:94"}]},"functionSelector":"c6a92e16","id":24406,"implemented":true,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"1018:10:94","nodeType":"FunctionDefinition","parameters":{"id":24397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24394,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24406,"src":"1029:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24393,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1029:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":24396,"mutability":"mutable","name":"account","nameLocation":"1046:7:94","nodeType":"VariableDeclaration","scope":24406,"src":"1038:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24395,"name":"address","nodeType":"ElementaryTypeName","src":"1038:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1028:26:94"},"returnParameters":{"id":24400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24399,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24406,"src":"1078:4:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24398,"name":"bool","nodeType":"ElementaryTypeName","src":"1078:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1077:6:94"},"scope":24481,"src":"1009:114:94","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":24419,"nodeType":"Block","src":"1182:38:94","statements":[{"expression":{"id":24417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":24413,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24339,"src":"1192:6:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24415,"indexExpression":{"id":24414,"name":"owner_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24408,"src":"1199:6:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1192:14:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":24416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1209:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1192:21:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24418,"nodeType":"ExpressionStatement","src":"1192:21:94"}]},"functionSelector":"7065cb48","id":24420,"implemented":true,"kind":"function","modifiers":[{"id":24411,"kind":"modifierInvocation","modifierName":{"id":24410,"name":"onlyOwner","nameLocations":["1172:9:94"],"nodeType":"IdentifierPath","referencedDeclaration":24362,"src":"1172:9:94"},"nodeType":"ModifierInvocation","src":"1172:9:94"}],"name":"addOwner","nameLocation":"1138:8:94","nodeType":"FunctionDefinition","parameters":{"id":24409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24408,"mutability":"mutable","name":"owner_","nameLocation":"1155:6:94","nodeType":"VariableDeclaration","scope":24420,"src":"1147:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24407,"name":"address","nodeType":"ElementaryTypeName","src":"1147:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1146:16:94"},"returnParameters":{"id":24412,"nodeType":"ParameterList","parameters":[],"src":"1182:0:94"},"scope":24481,"src":"1129:91:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24433,"nodeType":"Block","src":"1282:39:94","statements":[{"expression":{"id":24431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":24427,"name":"owners","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24339,"src":"1292:6:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":24429,"indexExpression":{"id":24428,"name":"owner_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24422,"src":"1299:6:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1292:14:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":24430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1309:5:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1292:22:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24432,"nodeType":"ExpressionStatement","src":"1292:22:94"}]},"functionSelector":"173825d9","id":24434,"implemented":true,"kind":"function","modifiers":[{"id":24425,"kind":"modifierInvocation","modifierName":{"id":24424,"name":"onlyOwner","nameLocations":["1272:9:94"],"nodeType":"IdentifierPath","referencedDeclaration":24362,"src":"1272:9:94"},"nodeType":"ModifierInvocation","src":"1272:9:94"}],"name":"removeOwner","nameLocation":"1235:11:94","nodeType":"FunctionDefinition","parameters":{"id":24423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24422,"mutability":"mutable","name":"owner_","nameLocation":"1255:6:94","nodeType":"VariableDeclaration","scope":24434,"src":"1247:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24421,"name":"address","nodeType":"ElementaryTypeName","src":"1247:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1246:16:94"},"returnParameters":{"id":24426,"nodeType":"ParameterList","parameters":[],"src":"1282:0:94"},"scope":24481,"src":"1226:95:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24447,"nodeType":"Block","src":"1432:61:94","statements":[{"expression":{"arguments":[{"arguments":[{"id":24443,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1480:4:94","typeDescriptions":{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$24481","typeString":"contract VaultMockForFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$24481","typeString":"contract VaultMockForFeeSweeper"}],"id":24442,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1472:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24441,"name":"address","nodeType":"ElementaryTypeName","src":"1472:7:94","typeDescriptions":{}}},"id":24444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1472:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24440,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1955,"src":"1449:22:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$1955_$","typeString":"type(contract IProtocolFeeController)"}},"id":24445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1449:37:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"functionReturnParameters":24439,"id":24446,"nodeType":"Return","src":"1442:44:94"}]},"functionSelector":"85f2dbd4","id":24448,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"1336:24:94","nodeType":"FunctionDefinition","parameters":{"id":24435,"nodeType":"ParameterList","parameters":[],"src":"1360:2:94"},"returnParameters":{"id":24439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24438,"mutability":"mutable","name":"protocolFeeController","nameLocation":"1409:21:94","nodeType":"VariableDeclaration","scope":24448,"src":"1386:44:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"},"typeName":{"id":24437,"nodeType":"UserDefinedTypeName","pathNode":{"id":24436,"name":"IProtocolFeeController","nameLocations":["1386:22:94"],"nodeType":"IdentifierPath","referencedDeclaration":1955,"src":"1386:22:94"},"referencedDeclaration":1955,"src":"1386:22:94","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$1955","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"1385:46:94"},"scope":24481,"src":"1327:166:94","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":24453,"nodeType":"Block","src":"1547:2:94","statements":[]},"functionSelector":"8f4ab9ca","id":24454,"implemented":true,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"1508:20:94","nodeType":"FunctionDefinition","parameters":{"id":24451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24450,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24454,"src":"1529:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24449,"name":"address","nodeType":"ElementaryTypeName","src":"1529:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1528:9:94"},"returnParameters":{"id":24452,"nodeType":"ParameterList","parameters":[],"src":"1547:0:94"},"scope":24481,"src":"1499:50:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24479,"nodeType":"Block","src":"1654:78:94","statements":[{"expression":{"arguments":[{"id":24469,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24458,"src":"1683:9:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":24474,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1718:4:94","typeDescriptions":{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$24481","typeString":"contract VaultMockForFeeSweeper"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultMockForFeeSweeper_$24481","typeString":"contract VaultMockForFeeSweeper"}],"id":24473,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1710:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24472,"name":"address","nodeType":"ElementaryTypeName","src":"1710:7:94","typeDescriptions":{}}},"id":24475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1710:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24470,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24461,"src":"1694:5:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":24471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1700:9:94","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":10515,"src":"1694:15:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":24476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1694:30:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24466,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24461,"src":"1664:5:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"id":24468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1670:12:94","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":10629,"src":"1664:18:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$10558_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$10558_$","typeString":"function (contract IERC20,address,uint256)"}},"id":24477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1664:61:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24478,"nodeType":"ExpressionStatement","src":"1664:61:94"}]},"functionSelector":"b53a70b2","id":24480,"implemented":true,"kind":"function","modifiers":[{"id":24464,"kind":"modifierInvocation","modifierName":{"id":24463,"name":"onlyOwner","nameLocations":["1644:9:94"],"nodeType":"IdentifierPath","referencedDeclaration":24362,"src":"1644:9:94"},"nodeType":"ModifierInvocation","src":"1644:9:94"}],"name":"withdrawProtocolFeesForToken","nameLocation":"1564:28:94","nodeType":"FunctionDefinition","parameters":{"id":24462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24456,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24480,"src":"1593:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24455,"name":"address","nodeType":"ElementaryTypeName","src":"1593:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24458,"mutability":"mutable","name":"recipient","nameLocation":"1610:9:94","nodeType":"VariableDeclaration","scope":24480,"src":"1602:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24457,"name":"address","nodeType":"ElementaryTypeName","src":"1602:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24461,"mutability":"mutable","name":"token","nameLocation":"1628:5:94","nodeType":"VariableDeclaration","scope":24480,"src":"1621:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"},"typeName":{"id":24460,"nodeType":"UserDefinedTypeName","pathNode":{"id":24459,"name":"IERC20","nameLocations":["1621:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":10558,"src":"1621:6:94"},"referencedDeclaration":10558,"src":"1621:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$10558","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1592:42:94"},"returnParameters":{"id":24465,"nodeType":"ParameterList","parameters":[],"src":"1654:0:94"},"scope":24481,"src":"1555:177:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":24482,"src":"437:1297:94","usedErrors":[10596],"usedEvents":[]}],"src":"46:1689:94"},"id":94},"contracts/utils/HyperSpotPricePrecompile.sol":{"ast":{"absolutePath":"contracts/utils/HyperSpotPricePrecompile.sol","exportedSymbols":{"HyperSpotPricePrecompile":[24542]},"id":24543,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24483,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"45:24:95"},{"abstract":false,"baseContracts":[],"canonicalName":"HyperSpotPricePrecompile","contractDependencies":[],"contractKind":"library","documentation":{"id":24484,"nodeType":"StructuredDocumentation","src":"71:296:95","text":" @notice Library to interact with the Hyperliquid spot price precompile.\n @dev The precompile is a special type of code, executed in the Hypercore's node. For more information, see\n https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore ."},"fullyImplemented":true,"id":24542,"linearizedBaseContracts":[24542],"name":"HyperSpotPricePrecompile","nameLocation":"376:24:95","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"ef89de08","id":24487,"mutability":"constant","name":"SPOT_PRICE_PRECOMPILE_ADDRESS","nameLocation":"431:29:95","nodeType":"VariableDeclaration","scope":24542,"src":"407:98:95","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24485,"name":"address","nodeType":"ElementaryTypeName","src":"407:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307830303030303030303030303030303030303030303030303030303030303030303030303030383038","id":24486,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"463:42:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x0000000000000000000000000000000000000808"},"visibility":"public"},{"documentation":{"id":24488,"nodeType":"StructuredDocumentation","src":"512:70:95","text":"@notice The precompile had an error while fetching the spot price."},"errorSelector":"79827df5","id":24490,"name":"SpotPricePrecompileFailed","nameLocation":"593:25:95","nodeType":"ErrorDefinition","parameters":{"id":24489,"nodeType":"ParameterList","parameters":[],"src":"618:2:95"},"src":"587:34:95"},{"documentation":{"id":24491,"nodeType":"StructuredDocumentation","src":"627:35:95","text":"@notice The spot price is zero."},"errorSelector":"44526c24","id":24493,"name":"SpotPriceIsZero","nameLocation":"673:15:95","nodeType":"ErrorDefinition","parameters":{"id":24492,"nodeType":"ParameterList","parameters":[],"src":"688:2:95"},"src":"667:24:95"},{"body":{"id":24540,"nodeType":"Block","src":"766:375:95","statements":[{"assignments":[24501,24503],"declarations":[{"constant":false,"id":24501,"mutability":"mutable","name":"success","nameLocation":"782:7:95","nodeType":"VariableDeclaration","scope":24540,"src":"777:12:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24500,"name":"bool","nodeType":"ElementaryTypeName","src":"777:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":24503,"mutability":"mutable","name":"spotPriceBytes","nameLocation":"804:14:95","nodeType":"VariableDeclaration","scope":24540,"src":"791:27:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":24502,"name":"bytes","nodeType":"ElementaryTypeName","src":"791:5:95","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":24511,"initialValue":{"arguments":[{"arguments":[{"id":24508,"name":"pairIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24495,"src":"874:9:95","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":24506,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"863:3:95","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":24507,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"867:6:95","memberName":"encode","nodeType":"MemberAccess","src":"863:10:95","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":24509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"863:21:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":24504,"name":"SPOT_PRICE_PRECOMPILE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24487,"src":"822:29:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":24505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"852:10:95","memberName":"staticcall","nodeType":"MemberAccess","src":"822:40:95","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":24510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"822:63:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"776:109:95"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":24514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24512,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24501,"src":"899:7:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":24513,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"910:5:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"899:16:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24519,"nodeType":"IfStatement","src":"895:81:95","trueBody":{"id":24518,"nodeType":"Block","src":"917:59:95","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24515,"name":"SpotPricePrecompileFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24490,"src":"938:25:95","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"938:27:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24517,"nodeType":"RevertStatement","src":"931:34:95"}]}},{"assignments":[24521],"declarations":[{"constant":false,"id":24521,"mutability":"mutable","name":"price","nameLocation":"993:5:95","nodeType":"VariableDeclaration","scope":24540,"src":"985:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24520,"name":"uint256","nodeType":"ElementaryTypeName","src":"985:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24529,"initialValue":{"arguments":[{"id":24524,"name":"spotPriceBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24503,"src":"1012:14:95","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":24526,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1029:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":24525,"name":"uint256","nodeType":"ElementaryTypeName","src":"1029:7:95","typeDescriptions":{}}}],"id":24527,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1028:9:95","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":24522,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1001:3:95","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":24523,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1005:6:95","memberName":"decode","nodeType":"MemberAccess","src":"1001:10:95","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":24528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1001:37:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"985:53:95"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24530,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24521,"src":"1052:5:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":24531,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1061:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1052:10:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24537,"nodeType":"IfStatement","src":"1048:65:95","trueBody":{"id":24536,"nodeType":"Block","src":"1064:49:95","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24533,"name":"SpotPriceIsZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24493,"src":"1085:15:95","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1085:17:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24535,"nodeType":"RevertStatement","src":"1078:24:95"}]}},{"expression":{"id":24538,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24521,"src":"1129:5:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24499,"id":24539,"nodeType":"Return","src":"1122:12:95"}]},"id":24541,"implemented":true,"kind":"function","modifiers":[],"name":"spotPrice","nameLocation":"706:9:95","nodeType":"FunctionDefinition","parameters":{"id":24496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24495,"mutability":"mutable","name":"pairIndex","nameLocation":"723:9:95","nodeType":"VariableDeclaration","scope":24541,"src":"716:16:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":24494,"name":"uint32","nodeType":"ElementaryTypeName","src":"716:6:95","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"715:18:95"},"returnParameters":{"id":24499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24498,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24541,"src":"757:7:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24497,"name":"uint256","nodeType":"ElementaryTypeName","src":"757:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"756:9:95"},"scope":24542,"src":"697:444:95","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":24543,"src":"368:775:95","usedErrors":[24490,24493],"usedEvents":[]}],"src":"45:1099:95"},"id":95},"contracts/utils/HyperTokenInfoPrecompile.sol":{"ast":{"absolutePath":"contracts/utils/HyperTokenInfoPrecompile.sol","exportedSymbols":{"HyperTokenInfoPrecompile":[24611]},"id":24612,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24544,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"45:24:96"},{"abstract":false,"baseContracts":[],"canonicalName":"HyperTokenInfoPrecompile","contractDependencies":[],"contractKind":"library","documentation":{"id":24545,"nodeType":"StructuredDocumentation","src":"71:296:96","text":" @notice Library to interact with the Hyperliquid token info precompile.\n @dev The precompile is a special type of code, executed in the Hypercore's node. For more information, see\n https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore ."},"fullyImplemented":true,"id":24611,"linearizedBaseContracts":[24611],"name":"HyperTokenInfoPrecompile","nameLocation":"376:24:96","nodeType":"ContractDefinition","nodes":[{"canonicalName":"HyperTokenInfoPrecompile.HyperTokenInfo","id":24563,"members":[{"constant":false,"id":24547,"mutability":"mutable","name":"name","nameLocation":"518:4:96","nodeType":"VariableDeclaration","scope":24563,"src":"511:11:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":24546,"name":"string","nodeType":"ElementaryTypeName","src":"511:6:96","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":24550,"mutability":"mutable","name":"spots","nameLocation":"541:5:96","nodeType":"VariableDeclaration","scope":24563,"src":"532:14:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint64_$dyn_storage_ptr","typeString":"uint64[]"},"typeName":{"baseType":{"id":24548,"name":"uint64","nodeType":"ElementaryTypeName","src":"532:6:96","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":24549,"nodeType":"ArrayTypeName","src":"532:8:96","typeDescriptions":{"typeIdentifier":"t_array$_t_uint64_$dyn_storage_ptr","typeString":"uint64[]"}},"visibility":"internal"},{"constant":false,"id":24552,"mutability":"mutable","name":"deployerTradingFeeShare","nameLocation":"563:23:96","nodeType":"VariableDeclaration","scope":24563,"src":"556:30:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":24551,"name":"uint64","nodeType":"ElementaryTypeName","src":"556:6:96","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":24554,"mutability":"mutable","name":"deployer","nameLocation":"604:8:96","nodeType":"VariableDeclaration","scope":24563,"src":"596:16:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24553,"name":"address","nodeType":"ElementaryTypeName","src":"596:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24556,"mutability":"mutable","name":"evmContract","nameLocation":"630:11:96","nodeType":"VariableDeclaration","scope":24563,"src":"622:19:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24555,"name":"address","nodeType":"ElementaryTypeName","src":"622:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24558,"mutability":"mutable","name":"szDecimals","nameLocation":"657:10:96","nodeType":"VariableDeclaration","scope":24563,"src":"651:16:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24557,"name":"uint8","nodeType":"ElementaryTypeName","src":"651:5:96","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":24560,"mutability":"mutable","name":"weiDecimals","nameLocation":"683:11:96","nodeType":"VariableDeclaration","scope":24563,"src":"677:17:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24559,"name":"uint8","nodeType":"ElementaryTypeName","src":"677:5:96","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":24562,"mutability":"mutable","name":"evmExtraWeiDecimals","nameLocation":"709:19:96","nodeType":"VariableDeclaration","scope":24563,"src":"704:24:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"},"typeName":{"id":24561,"name":"int8","nodeType":"ElementaryTypeName","src":"704:4:96","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"visibility":"internal"}],"name":"HyperTokenInfo","nameLocation":"486:14:96","nodeType":"StructDefinition","scope":24611,"src":"479:256:96","visibility":"public"},{"constant":true,"functionSelector":"19dd39d3","id":24566,"mutability":"constant","name":"TOKEN_INFO_PRECOMPILE_ADDRESS","nameLocation":"765:29:96","nodeType":"VariableDeclaration","scope":24611,"src":"741:98:96","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24564,"name":"address","nodeType":"ElementaryTypeName","src":"741:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307830303030303030303030303030303030303030303030303030303030303030303030303030383043","id":24565,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"797:42:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x000000000000000000000000000000000000080C"},"visibility":"public"},{"documentation":{"id":24567,"nodeType":"StructuredDocumentation","src":"846:70:96","text":"@notice The precompile had an error while fetching the token info."},"errorSelector":"61c18134","id":24569,"name":"TokenInfoPrecompileFailed","nameLocation":"927:25:96","nodeType":"ErrorDefinition","parameters":{"id":24568,"nodeType":"ParameterList","parameters":[],"src":"952:2:96"},"src":"921:34:96"},{"body":{"id":24609,"nodeType":"Block","src":"1030:320:96","statements":[{"assignments":[24577,24579],"declarations":[{"constant":false,"id":24577,"mutability":"mutable","name":"success","nameLocation":"1046:7:96","nodeType":"VariableDeclaration","scope":24609,"src":"1041:12:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24576,"name":"bool","nodeType":"ElementaryTypeName","src":"1041:4:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":24579,"mutability":"mutable","name":"out","nameLocation":"1068:3:96","nodeType":"VariableDeclaration","scope":24609,"src":"1055:16:96","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":24578,"name":"bytes","nodeType":"ElementaryTypeName","src":"1055:5:96","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":24587,"initialValue":{"arguments":[{"arguments":[{"id":24584,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24571,"src":"1127:10:96","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":24582,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1116:3:96","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":24583,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1120:6:96","memberName":"encode","nodeType":"MemberAccess","src":"1116:10:96","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":24585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1116:22:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":24580,"name":"TOKEN_INFO_PRECOMPILE_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24566,"src":"1075:29:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":24581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1105:10:96","memberName":"staticcall","nodeType":"MemberAccess","src":"1075:40:96","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":24586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1075:64:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1040:99:96"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":24590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24588,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24577,"src":"1153:7:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":24589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1164:5:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1153:16:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24595,"nodeType":"IfStatement","src":"1149:81:96","trueBody":{"id":24594,"nodeType":"Block","src":"1171:59:96","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24591,"name":"TokenInfoPrecompileFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24569,"src":"1192:25:96","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1192:27:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24593,"nodeType":"RevertStatement","src":"1185:34:96"}]}},{"assignments":[24598],"declarations":[{"constant":false,"id":24598,"mutability":"mutable","name":"tokenInfo","nameLocation":"1261:9:96","nodeType":"VariableDeclaration","scope":24609,"src":"1239:31:96","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HyperTokenInfo_$24563_memory_ptr","typeString":"struct HyperTokenInfoPrecompile.HyperTokenInfo"},"typeName":{"id":24597,"nodeType":"UserDefinedTypeName","pathNode":{"id":24596,"name":"HyperTokenInfo","nameLocations":["1239:14:96"],"nodeType":"IdentifierPath","referencedDeclaration":24563,"src":"1239:14:96"},"referencedDeclaration":24563,"src":"1239:14:96","typeDescriptions":{"typeIdentifier":"t_struct$_HyperTokenInfo_$24563_storage_ptr","typeString":"struct HyperTokenInfoPrecompile.HyperTokenInfo"}},"visibility":"internal"}],"id":24605,"initialValue":{"arguments":[{"id":24601,"name":"out","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24579,"src":"1284:3:96","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":24602,"name":"HyperTokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24563,"src":"1290:14:96","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_HyperTokenInfo_$24563_storage_ptr_$","typeString":"type(struct HyperTokenInfoPrecompile.HyperTokenInfo storage pointer)"}}],"id":24603,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1289:16:96","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_HyperTokenInfo_$24563_storage_ptr_$","typeString":"type(struct HyperTokenInfoPrecompile.HyperTokenInfo storage pointer)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_struct$_HyperTokenInfo_$24563_storage_ptr_$","typeString":"type(struct HyperTokenInfoPrecompile.HyperTokenInfo storage pointer)"}],"expression":{"id":24599,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1273:3:96","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":24600,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1277:6:96","memberName":"decode","nodeType":"MemberAccess","src":"1273:10:96","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":24604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1273:33:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_HyperTokenInfo_$24563_memory_ptr","typeString":"struct HyperTokenInfoPrecompile.HyperTokenInfo memory"}},"nodeType":"VariableDeclarationStatement","src":"1239:67:96"},{"expression":{"expression":{"id":24606,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24598,"src":"1323:9:96","typeDescriptions":{"typeIdentifier":"t_struct$_HyperTokenInfo_$24563_memory_ptr","typeString":"struct HyperTokenInfoPrecompile.HyperTokenInfo memory"}},"id":24607,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1333:10:96","memberName":"szDecimals","nodeType":"MemberAccess","referencedDeclaration":24558,"src":"1323:20:96","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":24575,"id":24608,"nodeType":"Return","src":"1316:27:96"}]},"id":24610,"implemented":true,"kind":"function","modifiers":[],"name":"szDecimals","nameLocation":"970:10:96","nodeType":"FunctionDefinition","parameters":{"id":24572,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24571,"mutability":"mutable","name":"tokenIndex","nameLocation":"988:10:96","nodeType":"VariableDeclaration","scope":24610,"src":"981:17:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":24570,"name":"uint32","nodeType":"ElementaryTypeName","src":"981:6:96","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"980:19:96"},"returnParameters":{"id":24575,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24574,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24610,"src":"1023:5:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24573,"name":"uint8","nodeType":"ElementaryTypeName","src":"1023:5:96","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1022:7:96"},"scope":24611,"src":"961:389:96","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":24612,"src":"368:984:96","usedErrors":[24569],"usedEvents":[]}],"src":"45:1308:96"},"id":96}},"contracts":{"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"IAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Simple interface for permissioned calling of external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":\"IAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"IRateProvider":{"abi":[{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getRate()":"679aefce"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"rate\":\"The current token rate\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"}},\"notice\":\"General interface for token exchange rates.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":\"IRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol":{"IVersion":{"abi":[{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"version()\":{\"details\":\"For standard Balancer contracts, returns a JSON representation of the contract version containing name, version number and task ID. See real examples in the deployment repo; local tests just use plain text strings.\",\"returns\":{\"_0\":\"version The version string corresponding to the current deployed contract\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"version()\":{\"notice\":\"Return arbitrary text representing the version of a contract.\"}},\"notice\":\"Simple interface to retrieve the version of a deployed contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":\"IVersion\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"IBalancerContractRegistry":{"abi":[{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressNotRegistered","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractAliasInUseAsName","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAlreadyDeprecated","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractNameInUseAsAlias","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameNotRegistered","type":"error"},{"inputs":[],"name":"InvalidContractAlias","type":"error"},{"inputs":[],"name":"InvalidContractName","type":"error"},{"inputs":[],"name":"ZeroContractAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeprecated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"contractAlias","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAliasUpdated","type":"event"},{"inputs":[{"internalType":"string","name":"contractAlias","type":"string"},{"internalType":"address","name":"existingContract","type":"address"}],"name":"addOrUpdateBalancerContractAlias","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"deprecateBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"deregisterBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"getBalancerContract","outputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"getBalancerContractInfo","outputs":[{"components":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"bool","name":"isRegistered","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"}],"internalType":"struct IBalancerContractRegistry.ContractInfo","name":"info","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"isActiveBalancerContract","outputs":[{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"isTrustedRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"registerBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addOrUpdateBalancerContractAlias(string,address)":"2967af96","deprecateBalancerContract(address)":"44969a9c","deregisterBalancerContract(string)":"c7f90793","getBalancerContract(uint8,string)":"41d8c0bb","getBalancerContractInfo(address)":"8554c327","isActiveBalancerContract(uint8,address)":"ae2733a4","isTrustedRouter(address)":"264e97e0","registerBalancerContract(uint8,string,address)":"e0376ab4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractAliasInUseAsName\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAlreadyDeprecated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractNameInUseAsAlias\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractAlias\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractName\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroContractAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAliasUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"existingContract\",\"type\":\"address\"}],\"name\":\"addOrUpdateBalancerContractAlias\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"deprecateBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"deregisterBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"getBalancerContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"getBalancerContractInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"internalType\":\"struct IBalancerContractRegistry.ContractInfo\",\"name\":\"info\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"isActiveBalancerContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"isTrustedRouter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"registerBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"details\":\"Both names and addresses must be unique in the primary registration mapping. Though there are two mappings to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent name => address => state mapping.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractType\":\"The contract type, provided for documentation purposes\"}}],\"ContractAddressNotRegistered(address)\":[{\"details\":\"A contract being deprecated was never registered, or the target of an alias isn't a previously registered contract.\",\"params\":{\"contractAddress\":\"The address of the contract that was not registered\"}}],\"ContractAliasInUseAsName(uint8,string)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractName\":\"The name of the previously registered contract (and proposed alias)\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractAlreadyDeprecated(address)\":[{\"params\":{\"contractAddress\":\"The address of the previously deprecated contract\"}}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"details\":\"Note that names must be unique; it is not possible to register two contracts with the same name and different types, or the same name and different addresses.\",\"params\":{\"contractName\":\"The name of the previously registered contract\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractNameInUseAsAlias(string,address)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractName\":\"The name of the previously registered contract\"}}],\"ContractNameNotRegistered(string)\":[{\"params\":{\"contractName\":\"The name of the unregistered contract\"}}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"details\":\"This sets the `isActive` flag to false.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"BalancerContractDeregistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deregistered\",\"contractName\":\"The name of the contract being deregistered\",\"contractType\":\"The type of contract being deregistered\"}},\"BalancerContractRegistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being registered\",\"contractName\":\"The name of the contract being registered\",\"contractType\":\"The type of contract being registered\"}},\"ContractAliasUpdated(string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deprecated\",\"contractAlias\":\"The alias name\"}}},\"kind\":\"dev\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"details\":\"This is a permissioned function to support querying by a contract alias. For instance, we might create a `WeightedPool` alias meaning the \\\"latest\\\" version of the `WeightedPoolFactory`, so that off-chain users don't need to track specific versions. Once added, an alias can also be updated to point to a different address (e.g., when migrating from the v2 to the v3 weighted pool).\",\"params\":{\"contractAlias\":\"An alternate name that can be used to fetch a contract address\",\"existingContract\":\"The target address of the contract alias\"}},\"deprecateBalancerContract(address)\":{\"details\":\"This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are enforced unique, so either the name or address could be specified in principle.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"deregisterBalancerContract(string)\":{\"details\":\"This is a permissioned function, and makes it possible to correct errors without complex update logic. If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete it, and register it again with the correct data. It must start with the name, as this is the registry key, required for complete deletion. Note that there might still be an alias targeting the address being deleted, but accessing it will just return inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to the correct address.\",\"params\":{\"contractName\":\"The name of the contract being deprecated (cannot be an alias)\"}},\"getBalancerContract(uint8,string)\":{\"details\":\"This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias (e.g., `WeightedPool`).\",\"params\":{\"contractName\":\"The name of the contract\",\"contractType\":\"The type of the contract\"},\"returns\":{\"contractAddress\":\"The address of the associated contract, if registered, or zero\",\"isActive\":\"True if the contract was registered and not deprecated\"}},\"getBalancerContractInfo(address)\":{\"params\":{\"contractAddress\":\"The address of the associated contract\"},\"returns\":{\"info\":\"ContractInfo struct corresponding to the address\"}},\"isActiveBalancerContract(uint8,address)\":{\"params\":{\"contractAddress\":\"The address of the contract\",\"contractType\":\"The type of contract\"},\"returns\":{\"isActive\":\"True if the given address is a registered and active contract of the specified type\"}},\"registerBalancerContract(uint8,string,address)\":{\"details\":\"This is a permissioned function, and does only basic validation of the address (non-zero) and the name (not blank). Governance must ensure this is called with valid information. Emits the `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or already in use.\",\"params\":{\"contractAddress\":\"The address of the contract\",\"contractName\":\"A text description of the contract, usually the deployed version (e.g., \\\"v3-pool-weighted\\\")\",\"contractType\":\"The type of contract being registered\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"notice\":\"A contract has already been registered under the given address.\"}],\"ContractAddressNotRegistered(address)\":[{\"notice\":\"An operation that requires a valid contract specified an unrecognized address.\"}],\"ContractAliasInUseAsName(uint8,string)\":[{\"notice\":\"The proposed alias has already been registered as a contract.\"}],\"ContractAlreadyDeprecated(address)\":[{\"notice\":\"Contracts can only be deprecated once.\"}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"notice\":\"A contract has already been registered under the given name.\"}],\"ContractNameInUseAsAlias(string,address)\":[{\"notice\":\"The proposed contract name has already been added as an alias.\"}],\"ContractNameNotRegistered(string)\":[{\"notice\":\"Thrown when attempting to deregister a contract that was not previously registered.\"}],\"InvalidContractAlias()\":[{\"notice\":\"Cannot add an empty string as an alias.\"}],\"InvalidContractName()\":[{\"notice\":\"Cannot register (or deregister) a contract with an empty string as a name.\"}],\"ZeroContractAddress()\":[{\"notice\":\"Cannot register or deprecate contracts, or add an alias targeting the zero address.\"}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"notice\":\"Emitted when a registered contract is deprecated.\"},\"BalancerContractDeregistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is deregistered (deleted).\"},\"BalancerContractRegistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is registered.\"},\"ContractAliasUpdated(string,address)\":{\"notice\":\"Emitted when an alias is added or updated.\"}},\"kind\":\"user\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"notice\":\"Add an alias for a registered contract.\"},\"deprecateBalancerContract(address)\":{\"notice\":\"Deprecate an official Balancer contract.\"},\"deregisterBalancerContract(string)\":{\"notice\":\"Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"},\"getBalancerContract(uint8,string)\":{\"notice\":\"Look up a registered contract by type and name.\"},\"getBalancerContractInfo(address)\":{\"notice\":\"Look up complete information about a registered contract by address.\"},\"isActiveBalancerContract(uint8,address)\":{\"notice\":\"Determine whether an address is an official contract of the specified type.\"},\"isTrustedRouter(address)\":{\"notice\":\"Returns `true` if the given address is an active contract under the ROUTER type.\"},\"registerBalancerContract(uint8,string,address)\":{\"notice\":\"Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":\"IBalancerContractRegistry\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol":{"IBalancerFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BurnPathDoesNotExist","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"inputs":[],"name":"TargetTokenOutMismatch","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"feeToken","type":"address"}],"name":"getBurnPath","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"}],"internalType":"struct IBalancerFeeBurner.SwapPathStep[]","name":"steps","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"}],"internalType":"struct IBalancerFeeBurner.SwapPathStep[]","name":"steps","type":"tuple[]"}],"name":"setBurnPath","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","getBurnPath(address)":"c1cfb02a","setBurnPath(address,(address,address)[])":"e3746cb2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BurnPathDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetTokenOutMismatch\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"getBurnPath\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"internalType\":\"struct IBalancerFeeBurner.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"internalType\":\"struct IBalancerFeeBurner.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"}],\"name\":\"setBurnPath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}},\"getBurnPath(address)\":{\"params\":{\"feeToken\":\"The fee token to get the path for\"},\"returns\":{\"steps\":\"The steps in the burn path\"}},\"setBurnPath(address,(address,address)[])\":{\"details\":\"This is the sequence of swaps required to convert the `feeToken` to the `targetToken`. This is a permissioned function.\",\"params\":{\"feeToken\":\"The fee token to set the path for\",\"steps\":\"The steps in the burn path\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BurnPathDoesNotExist()\":[{\"notice\":\"Burn path not set for the fee token.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}],\"TargetTokenOutMismatch()\":[{\"notice\":\"The last token in the path is not the same as the target token.\"}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"},\"getBurnPath(address)\":{\"notice\":\"Get the burn path for a fee token.\"},\"setBurnPath(address,(address,address)[])\":{\"notice\":\"Set the burn path for a fee token.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol\":\"IBalancerFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol\":{\"keccak256\":\"0xb5dc03fa23c5481ff4bebe9136c73e363a96e5beaf89d22f4eedb142331a0478\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d33361a79282a589f7b167caa04acb3b7eba0cc85b11a21f8504187151542ed6\",\"dweb:/ipfs/Qmc5WZFBfq9oZEQ4Zhv6VgJpeBJA7v68Jc1cKTJ5iFBuhM\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol":{"IComposableCow":{"abi":[{"inputs":[{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"},{"internalType":"bool","name":"dispatch","type":"bool"}],"name":"create","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"domainSeparator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"safe","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes32","name":"_domainSeparator","type":"bytes32"},{"internalType":"bytes32","name":"typeHash","type":"bytes32"},{"internalType":"bytes","name":"encodeData","type":"bytes"},{"internalType":"bytes","name":"payload","type":"bytes"}],"name":"isValidSafeSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"create((address,bytes32,bytes),bool)":"6bfae1ca","domainSeparator()":"f698da25","isValidSafeSignature(address,address,bytes32,bytes32,bytes32,bytes,bytes)":"53f00b14"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"dispatch\",\"type\":\"bool\"}],\"name\":\"create\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"safe\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_domainSeparator\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"typeHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"encodeData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"isValidSafeSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"create((address,bytes32,bytes),bool)\":{\"params\":{\"dispatch\":\"If true, submit the order (always true in the CowSwapBurner)\",\"params\":\"Order parameters\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"create((address,bytes32,bytes),bool)\":{\"notice\":\"Construct a CoW order.\"},\"isValidSafeSignature(address,address,bytes32,bytes32,bytes32,bytes,bytes)\":{\"notice\":\"Delegated ERC-1271 signature validation with an enhanced context.\"}},\"notice\":\"Utility contract used to validate orders in the `CowSwapFeeBurner`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\":\"IComposableCow\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\":{\"keccak256\":\"0xc82721c94d5e741f168aed4c94dc6a9006cb3348bee7398a5e3fa9b7e28557bd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://784c16c17fb89736ec5be650668d81a548acec3ccc2073e2be0f79029f84f512\",\"dweb:/ipfs/QmSk9seqC2YEJqy5pPdXKjmhEKoQhXQdQXCN4f9R8jcXKX\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol":{"ICowConditionalOrder":{"abi":[{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"OrderNotValid","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollNever","type":"error"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtBlock","type":"error"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtEpoch","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryNextBlock","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes32","name":"domainSeparator","type":"bytes32"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"},{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"order","type":"tuple"}],"name":"verify","outputs":[],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))":"14a2a784"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"OrderNotValid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollNever\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtEpoch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryNextBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"domainSeparator\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"CoW Protocol Developers + mfw78 \",\"errors\":{\"OrderNotValid(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"PollNever(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be deleted\"}}],\"PollTryAtBlock(uint256,string)\":[{\"params\":{\"blockNumber\":\"The block number when polling should resume\",\"reason\":\"Text description of the reason it should be retried\"}}],\"PollTryAtEpoch(uint256,string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\",\"timestamp\":\"The unix timestamp when polling should resume\"}}],\"PollTryNextBlock(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\"}}]},\"kind\":\"dev\",\"methods\":{\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"details\":\"Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe. **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over the order verification logic, and to allow a watchtower / user to propose a discrete order without it being generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\",\"params\":{\"_hash\":\"`EIP712` order digest\",\"ctx\":\"See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\",\"domainSeparator\":\"`EIP712` domain separator\",\"offchainInput\":\"Type-specific data NOT known at time of creation for a specific discrete order (or zero)\",\"order\":\"The proposed discrete order's `GPv2Order` data struct\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` calling `isValidSignature`\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"OrderNotValid(string)\":[{\"notice\":\"This error is returned by the `getTradeableOrder` function if the order conditions are not met.\"}],\"PollNever(string)\":[{\"notice\":\"The conditional order should not be polled again (i.e., deleted).\"}],\"PollTryAtBlock(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific block number.\"}],\"PollTryAtEpoch(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific epoch (unix timestamp).\"}],\"PollTryNextBlock(string)\":[{\"notice\":\"Polling should be retried at the next block.\"}]},\"kind\":\"user\",\"methods\":{\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"notice\":\"Verify that a given discrete order is valid.\"}},\"notice\":\"Conditional Order Interface - verify a Cow order.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":\"ICowConditionalOrder\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol":{"ICowConditionalOrderGenerator":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"indexed":false,"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"}],"name":"ConditionalOrderCreated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"}],"name":"getTradeableOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getTradeableOrder(address,address,bytes32,bytes,bytes)":"b8296fc4","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"ConditionalOrderCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"}],\"name\":\"getTradeableOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"mfw78 \",\"events\":{\"ConditionalOrderCreated(address,(address,bytes32,bytes))\":{\"details\":\"Emitted when a new conditional order is created.\",\"params\":{\"owner\":\"The address that created the conditional order\",\"params\":\"The conditional order data\"}}},\"kind\":\"dev\",\"methods\":{\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"details\":\"**MUST** revert if the order conditions are not met.\",\"params\":{\"ctx\":\"The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\",\"offchainInput\":\"Off-chain input (similar to Balancer `userData`); currently unused\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` of the parent `isValidSignature` call\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"},\"returns\":{\"_0\":\"order Tradeable order for submission to the CoW Protocol API\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"notice\":\"Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\"}},\"notice\":\"Conditional Order Generator Interface\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":\"ICowConditionalOrderGenerator\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":{\"keccak256\":\"0x7b8f0149ba41d28c3d0cd956911816b083f7ccec35ddc7bb7fdb829c3c11d9b2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2d39a71115b9018711726b6c7498038e6d3a41338fa635c88cc8025b4e0e5f34\",\"dweb:/ipfs/QmYqnnkXCd1yjs6kpQgxNUotpudgN37X5FTFNFyKE62PMj\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol":{"ICowSwapFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"InterfaceIsSignatureVerifierMuxer","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"InvalidOrderParameters","type":"error"},{"inputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"actualStatus","type":"uint8"}],"name":"OrderHasUnexpectedStatus","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"OrderNotValid","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollNever","type":"error"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtBlock","type":"error"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtEpoch","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryNextBlock","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"indexed":false,"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"}],"name":"ConditionalOrderCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"OrderCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"OrderRetried","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"emergencyCancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"orderData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrderStatus","outputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"orderStatus","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"}],"name":"getTradeableOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"magicValue","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"retryOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes32","name":"domainSeparator","type":"bytes32"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"},{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"order","type":"tuple"}],"name":"verify","outputs":[],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","cancelOrder(address,address)":"60e092c6","emergencyCancelOrder(address,address)":"68bce712","getOrder(address)":"6eba2b13","getOrderStatus(address)":"6f9d75cd","getTradeableOrder(address,address,bytes32,bytes,bytes)":"b8296fc4","isValidSignature(bytes32,bytes)":"1626ba7e","retryOrder(address,uint256,uint256)":"d83b06a4","supportsInterface(bytes4)":"01ffc9a7","verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))":"14a2a784"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InterfaceIsSignatureVerifierMuxer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"InvalidOrderParameters\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"actualStatus\",\"type\":\"uint8\"}],\"name\":\"OrderHasUnexpectedStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"OrderNotValid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollNever\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtEpoch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryNextBlock\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"ConditionalOrderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"OrderCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"OrderRetried\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"cancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"emergencyCancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"orderData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrderStatus\",\"outputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"orderStatus\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"}],\"name\":\"getTradeableOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"magicValue\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"retryOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"domainSeparator\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"InvalidOrderParameters(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"OrderHasUnexpectedStatus(uint8)\":[{\"details\":\"`revertOrder` should only be called when the OrderStatus is `Failed`.\",\"params\":{\"actualStatus\":\"The status of the order when `revertOrder` was called\"}}],\"OrderNotValid(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"PollNever(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be deleted\"}}],\"PollTryAtBlock(uint256,string)\":[{\"params\":{\"blockNumber\":\"The block number when polling should resume\",\"reason\":\"Text description of the reason it should be retried\"}}],\"PollTryAtEpoch(uint256,string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\",\"timestamp\":\"The unix timestamp when polling should resume\"}}],\"PollTryNextBlock(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\"}}]},\"events\":{\"ConditionalOrderCreated(address,(address,bytes32,bytes))\":{\"details\":\"Emitted when a new conditional order is created.\",\"params\":{\"owner\":\"The address that created the conditional order\",\"params\":\"The conditional order data\"}},\"OrderCanceled(address,uint256,address)\":{\"params\":{\"exactAmountIn\":\"The number of tokens in the order\",\"receiver\":\"The account that received the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"OrderRetried(address,uint256,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the new order to be filled\",\"exactAmountIn\":\"The number of tokens in the order\",\"minAmountOut\":\"The minimum number of target tokens required\",\"tokenIn\":\"The token used to identify the order\"}},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}},\"cancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"emergencyCancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"getOrder(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"orderData\":\"The order data for the given token\"}},\"getOrderStatus(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"orderStatus\":\"The status of the order for the given token\"}},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"details\":\"**MUST** revert if the order conditions are not met.\",\"params\":{\"ctx\":\"The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\",\"offchainInput\":\"Off-chain input (similar to Balancer `userData`); currently unused\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` of the parent `isValidSignature` call\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"},\"returns\":{\"_0\":\"order Tradeable order for submission to the CoW Protocol API\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"Should return whether the signature provided is valid for the provided data\",\"params\":{\"hash\":\"Hash of the data to be signed\",\"signature\":\"Signature byte array associated with `hash`\"}},\"retryOrder(address,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the order to be filled.\",\"minAmountOut\":\"The minimum number of target tokens to receive (tokenOut)\",\"tokenIn\":\"The token used to identify the order\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"details\":\"Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe. **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over the order verification logic, and to allow a watchtower / user to propose a discrete order without it being generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\",\"params\":{\"_hash\":\"`EIP712` order digest\",\"ctx\":\"See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\",\"domainSeparator\":\"`EIP712` domain separator\",\"offchainInput\":\"Type-specific data NOT known at time of creation for a specific discrete order (or zero)\",\"order\":\"The proposed discrete order's `GPv2Order` data struct\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` calling `isValidSignature`\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"InterfaceIsSignatureVerifierMuxer()\":[{\"notice\":\"Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\"}],\"InvalidOrderParameters(string)\":[{\"notice\":\"The order parameters were invalid.\"}],\"OrderHasUnexpectedStatus(uint8)\":[{\"notice\":\"Attempt to revert an order that had not failed.\"}],\"OrderNotValid(string)\":[{\"notice\":\"This error is returned by the `getTradeableOrder` function if the order conditions are not met.\"}],\"PollNever(string)\":[{\"notice\":\"The conditional order should not be polled again (i.e., deleted).\"}],\"PollTryAtBlock(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific block number.\"}],\"PollTryAtEpoch(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific epoch (unix timestamp).\"}],\"PollTryNextBlock(string)\":[{\"notice\":\"Polling should be retried at the next block.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"OrderCanceled(address,uint256,address)\":{\"notice\":\"An order was canceled after failure.\"},\"OrderRetried(address,uint256,uint256,uint256)\":{\"notice\":\"An order was retried after failing.\"},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"},\"cancelOrder(address,address)\":{\"notice\":\"Return tokens from an order that has failed.\"},\"emergencyCancelOrder(address,address)\":{\"notice\":\"Emergency return tokens from an order regardless of status.\"},\"getOrder(address)\":{\"notice\":\"Get the order at the sell token.\"},\"getOrderStatus(address)\":{\"notice\":\"Get the status of the order at the sell token.\"},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"notice\":\"Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\"},\"retryOrder(address,uint256,uint256)\":{\"notice\":\"Retry an order that has not been filled yet and expired.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"notice\":\"Verify that a given discrete order is valid.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\":\"ICowSwapFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":{\"keccak256\":\"0x7b8f0149ba41d28c3d0cd956911816b083f7ccec35ddc7bb7fdb829c3c11d9b2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2d39a71115b9018711726b6c7498038e6d3a41338fa635c88cc8025b4e0e5f34\",\"dweb:/ipfs/QmYqnnkXCd1yjs6kpQgxNUotpudgN37X5FTFNFyKE62PMj\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\":{\"keccak256\":\"0xc3717c516d816bd012f47a18bfd69f7887ce262435c10be9748beb4b11aee033\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://237a9295364524846f26c1b92b523e6039b414d3b691f77ba55c6deefa4b14bc\",\"dweb:/ipfs/QmXYg1paW7kDeXCFkiunzSWSWT3DD2p15CHnJZzDyEQ6Jo\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@openzeppelin/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x66c7ec42c6c43712be2107a50ab4529379bc76a632b425babec698d9da921ac6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dce2778f0b638adfc5ba29c2c618c855fe725fa74a16846386aa1d56a834aa04\",\"dweb:/ipfs/QmPV9oWnzQdi58od266j62xvviavLNHqKLZfm6k2K1qy9E\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol":{"IHyperEVMRateProvider":{"abi":[{"inputs":[],"name":"getPairIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSpotPriceMultiplier","outputs":[{"internalType":"uint256","name":"spotPriceMultiplier","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getPairIndex()":"81bfa5d1","getSpotPriceMultiplier()":"a747d56f","getTokenIndex()":"295d3ee8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getPairIndex\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSpotPriceMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"spotPriceMultiplier\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenIndex\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getPairIndex()\":{\"details\":\"Hypercore has an index that identifies a pair of tokens to fetch the spot price.\",\"returns\":{\"_0\":\"pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\"}},\"getSpotPriceMultiplier()\":{\"details\":\"Hypercore returns the spot price with a different number of decimals for each token. So, to make this rate provider compatible with the vault, we need to scale the spot price to 18 decimals using this multiplier.\",\"returns\":{\"spotPriceMultiplier\":\"The spot price multiplier\"}},\"getTokenIndex()\":{\"returns\":{\"_0\":\"tokenIndex The index of the token on the Hyperliquid public API\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getPairIndex()\":{\"notice\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API.\"},\"getSpotPriceMultiplier()\":{\"notice\":\"The spot price multiplier.\"},\"getTokenIndex()\":{\"notice\":\"The index of the token on the Hyperliquid public API.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\":\"IHyperEVMRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\":{\"keccak256\":\"0xa2b797f83f03ad80f6512aecc2c1aed8d8aac3ffe968e0f696ec98ec4c200cd5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93ec4d5a140fed3f7885318e2816d2c498ec44730a320d491d47c990660bc268\",\"dweb:/ipfs/QmPK2pHX4dEYf77K6vyT1LMU83neZP5xe5AzcBsv7oJoLm\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol":{"IHyperEVMRateProviderFactory":{"abi":[{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"},{"internalType":"address","name":"rateProvider","type":"address"}],"name":"RateProviderAlreadyExists","type":"error"},{"inputs":[],"name":"RateProviderFactoryIsDisabled","type":"error"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"name":"RateProviderNotFound","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"rateProvider","type":"address"}],"name":"RateProviderCreated","type":"event"},{"anonymous":false,"inputs":[],"name":"RateProviderFactoryDisabled","type":"event"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"name":"create","outputs":[{"internalType":"contract IHyperEVMRateProvider","name":"rateProvider","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"name":"getRateProvider","outputs":[{"internalType":"contract IHyperEVMRateProvider","name":"rateProvider","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRateProviderVersion","outputs":[{"internalType":"uint256","name":"rateProviderVersion","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IHyperEVMRateProvider","name":"rateProvider","type":"address"}],"name":"isRateProviderFromFactory","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"create(uint32,uint32)":"568acb79","disable()":"2f2770db","getRateProvider(uint32,uint32)":"99b8113f","getRateProviderVersion()":"381c7a4f","isRateProviderFromFactory(address)":"19912f71"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"name\":\"RateProviderAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateProviderFactoryIsDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"name\":\"RateProviderNotFound\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pairIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"name\":\"RateProviderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"RateProviderFactoryDisabled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"contract IHyperEVMRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"name\":\"getRateProvider\",\"outputs\":[{\"internalType\":\"contract IHyperEVMRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProviderVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rateProviderVersion\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IHyperEVMRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"name\":\"isRateProviderFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"RateProviderAlreadyExists(uint32,uint32,address)\":[{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"rateProvider\":\"The address of the deployed rate provider\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"}}],\"RateProviderNotFound(uint32,uint32)\":[{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"}}]},\"events\":{\"RateProviderCreated(uint256,uint256,address)\":{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"rateProvider\":\"The address of the deployed rate provider\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"}}},\"kind\":\"dev\",\"methods\":{\"create(uint32,uint32)\":{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"},\"returns\":{\"rateProvider\":\"The address of the deployed rate provider\"}},\"disable()\":{\"details\":\"A disabled rate provider factory cannot create new rate providers and cannot be re-enabled. However, already created rate providers are still usable. This is a permissioned function.\"},\"getRateProvider(uint32,uint32)\":{\"details\":\"Reverts if the rate provider was not found for the given token and pair.\",\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"},\"returns\":{\"rateProvider\":\"The address of the rate provider for the given token and pair\"}},\"getRateProviderVersion()\":{\"returns\":{\"rateProviderVersion\":\"The rate provider version number\"}},\"isRateProviderFromFactory(address)\":{\"params\":{\"rateProvider\":\"The rate provider to check\"},\"returns\":{\"success\":\"True if the rate provider was created by this factory; false otherwise\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"RateProviderAlreadyExists(uint32,uint32,address)\":[{\"notice\":\"A rate provider already exists for the given token and pair.\"}],\"RateProviderFactoryIsDisabled()\":[{\"notice\":\"The factory is disabled.\"}],\"RateProviderNotFound(uint32,uint32)\":[{\"notice\":\"The rate provider was not found for the given token and pair.\"}]},\"events\":{\"RateProviderCreated(uint256,uint256,address)\":{\"notice\":\"A new HyperEVM Rate Provider was created.\"},\"RateProviderFactoryDisabled()\":{\"notice\":\"Emitted when the factory is disabled.\"}},\"kind\":\"user\",\"methods\":{\"create(uint32,uint32)\":{\"notice\":\"Creates a new HyperEVM Rate Provider for the given token and pair.\"},\"disable()\":{\"notice\":\"Disables the rate provider factory.\"},\"getRateProvider(uint32,uint32)\":{\"notice\":\"Gets the rate provider for the given token and pair.\"},\"getRateProviderVersion()\":{\"notice\":\"Returns a number representing the rate provider version.\"},\"isRateProviderFromFactory(address)\":{\"notice\":\"Checks whether the given rate provider was created by this factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol\":\"IHyperEVMRateProviderFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\":{\"keccak256\":\"0xa2b797f83f03ad80f6512aecc2c1aed8d8aac3ffe968e0f696ec98ec4c200cd5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93ec4d5a140fed3f7885318e2816d2c498ec44730a320d491d47c990660bc268\",\"dweb:/ipfs/QmPK2pHX4dEYf77K6vyT1LMU83neZP5xe5AzcBsv7oJoLm\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol\":{\"keccak256\":\"0x9b1db72d212780046987be96919d7bc0bf9829faac6d47820a5d5f038d356d96\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://157ccbf98c1631eb1efc363e9cfb64646744b6a0c1e17f021a49c1c3649ae382\",\"dweb:/ipfs/QmUVnwLEJ8qghiReoZKUApRDP7cp4EdxKj7vEeyrZ8s453\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol":{"IPoolHelperCommon":{"abi":[{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"InvalidPoolSetId","type":"error"},{"inputs":[],"name":"InvalidPoolSetManager","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"poolSetManager","type":"address"}],"name":"PoolSetManagerNotUnique","type":"error"},{"inputs":[],"name":"SenderIsNotPoolSetManager","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolRemovedFromSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"initialManager","type":"address"}],"name":"PoolSetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"PoolSetDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"PoolSetOwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPoolsToSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"destroyPoolSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getAllPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getManagerForPoolSet","outputs":[{"internalType":"address","name":"manager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextPoolSetId","outputs":[{"internalType":"uint256","name":"nextPoolSetId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getPoolCountForSet","outputs":[{"internalType":"uint256","name":"poolCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolSetIdForCaller","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"getPoolSetIdForManager","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isPoolInSet","outputs":[{"internalType":"bool","name":"poolInSet","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isValidPoolSetId","outputs":[{"internalType":"bool","name":"isValid","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePoolsFromSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferPoolSetOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addPoolsToSet(uint256,address[])":"ebf3a8d0","createPoolSet(address)":"e909c19b","createPoolSet(address,address[])":"3e035f9b","destroyPoolSet(uint256)":"7c1ec460","getAllPoolsInSet(uint256)":"94fc4058","getManagerForPoolSet(uint256)":"f167a1e6","getNextPoolSetId()":"c482e822","getPoolCountForSet(uint256)":"62d53462","getPoolSetIdForCaller()":"ce998aba","getPoolSetIdForManager(address)":"25c427ed","getPoolsInSet(uint256,uint256,uint256)":"8c60ebd0","isPoolInSet(address,uint256)":"182551da","isValidPoolSetId(uint256)":"255dae41","removePoolsFromSet(uint256,address[])":"2da55a1d","transferPoolSetOwnership(address)":"3700f987"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"InvalidPoolSetId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolSetManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolSetManager\",\"type\":\"address\"}],\"name\":\"PoolSetManagerNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderIsNotPoolSetManager\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"PoolSetCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"PoolSetDestroyed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"PoolSetOwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPoolsToSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"destroyPoolSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getAllPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getManagerForPoolSet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextPoolSetId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nextPoolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getPoolCountForSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSetIdForCaller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getPoolSetIdForManager\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isPoolInSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolInSet\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isValidPoolSetId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isValid\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePoolsFromSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferPoolSetOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"params\":{\"poolSetId\":\"Id of the set involved in the operation\"}}],\"InvalidPoolSetId(uint256)\":[{\"details\":\"This can mean the value is invalid, or it was never created, or it was destroyed.\",\"params\":{\"poolSetId\":\"The id of the invalid set\"}}],\"PoolAlreadyInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolSetManagerNotUnique(address)\":[{\"details\":\"Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\",\"params\":{\"poolSetManager\":\"Address of the manager that is already assigned to another pool set id\"}}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolRemovedFromSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetCreated(uint256,address)\":{\"details\":\"Pools are organized into separate sets, controlled by a manager, which can be changed independently.\",\"params\":{\"initialManager\":\"Address of the pool set manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetDestroyed(uint256,address)\":{\"params\":{\"manager\":\"The address of the set's last manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"details\":\"Managers can only control one pool set. Transfers to existing managers of other sets will revert.\",\"params\":{\"newManager\":\"Address of the new manager\",\"oldManager\":\"Address of the previous manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}},\"kind\":\"dev\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may add pools to a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"newPools\":\"List of pools to add\",\"poolSetId\":\"Id of the set to which the new pools belong\"}},\"createPoolSet(address)\":{\"details\":\"Convenience function to create a pool set with no initial pools. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\"}},\"createPoolSet(address,address[])\":{\"details\":\"The `newPools` list can be empty, in which case this will only create the set. Pools can then be added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\",\"newPools\":\"Set of pools to add to the set\"}},\"destroyPoolSet(uint256)\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may destroy sets, effectively removing control of any pools in the set from the associated manager. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set being destroyed\"}},\"getAllPoolsInSet(uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"pools\":\"List of pools\"}},\"getManagerForPoolSet(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"manager\":\"The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\"}},\"getNextPoolSetId()\":{\"returns\":{\"nextPoolSetId\":\"The pool set id that will be used on the next call of `createPoolSet`\"}},\"getPoolCountForSet(uint256)\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction. Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"poolCount\":\"The current number of pools in the set\"}},\"getPoolSetIdForCaller()\":{\"returns\":{\"poolSetId\":\"The numeric pool set id, or zero if the caller is not a pool set manager\"}},\"getPoolSetIdForManager(address)\":{\"returns\":{\"poolSetId\":\"The numeric pool set id, or zero if the address given is not a pool set manager\"}},\"getPoolsInSet(uint256,uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`). Reverts if the poolSetId is not valid.\",\"params\":{\"from\":\"Start index\",\"poolSetId\":\"Id of the set containing the pools\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"isPoolInSet(address,uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"pool\":\"Address of the pool to check\",\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"poolInSet\":\"True if the pool is in the given set, false otherwise\"}},\"isValidPoolSetId(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"isValid\":\"True if the poolSetId exists\"}},\"removePoolsFromSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may remove pools from a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set to which the pools belong\",\"pools\":\"List of pools to remove from the set\"}},\"transferPoolSetOwnership(address)\":{\"details\":\"This is a permissioned function. Only the current manager of a set can call this to set a new manager. Since managers can only control a single set, there is no need to specify the id in the call. Note that this is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts if the new manager address is zero or already the manager of a pool set.\",\"params\":{\"newManager\":\"The address of the new manager\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"InvalidPoolSetId(uint256)\":[{\"notice\":\"Pool set id associated with an operation is invalid.\"}],\"InvalidPoolSetManager()\":[{\"notice\":\"The initial manager of a pool set cannot be zero.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolNotInSet(address,uint256)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolSetManagerNotUnique(address)\":[{\"notice\":\"Pool set managers can only manage a single pool set.\"}],\"SenderIsNotPoolSetManager()\":[{\"notice\":\"Permissioned operations on pools can only be performed by the pool set manager.\"}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"notice\":\"The owner added a pool to the given set.\"},\"PoolRemovedFromSet(address,uint256)\":{\"notice\":\"The owner removed a pool from the given set.\"},\"PoolSetCreated(uint256,address)\":{\"notice\":\"The owner created a new pool set.\"},\"PoolSetDestroyed(uint256,address)\":{\"notice\":\"The owner destroyed a pool set.\"},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"notice\":\"The current manager of a pool set transferred ownership to a new address.\"}},\"kind\":\"user\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"createPoolSet(address)\":{\"notice\":\"Create a new empty set with an initial manager.\"},\"createPoolSet(address,address[])\":{\"notice\":\"Create a new set with an initial manager, optionally initialized with a set of pools.\"},\"destroyPoolSet(uint256)\":{\"notice\":\"Simple way to remove an entire set of pools from control of the helper function.\"},\"getAllPoolsInSet(uint256)\":{\"notice\":\"Get the full set of pools from a given set.\"},\"getManagerForPoolSet(uint256)\":{\"notice\":\"Get the manager address associated with a given poolSetId.\"},\"getNextPoolSetId()\":{\"notice\":\"Utility function to predict the next pool set id.\"},\"getPoolCountForSet(uint256)\":{\"notice\":\"Get the number of pools associated with the given set.\"},\"getPoolSetIdForCaller()\":{\"notice\":\"Get the pool set id associated with the caller.\"},\"getPoolSetIdForManager(address)\":{\"notice\":\"Get the pool set id associated with a given manager address.\"},\"getPoolsInSet(uint256,uint256,uint256)\":{\"notice\":\"Get a range of pools from a given set.\"},\"isPoolInSet(address,uint256)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"isValidPoolSetId(uint256)\":{\"notice\":\"Check whether a poolSetId has been created.\"},\"removePoolsFromSet(uint256,address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"transferPoolSetOwnership(address)\":{\"notice\":\"Transfer ownership of a pool set from the current manager to a new manager.\"}},\"notice\":\"Common interface for helper functions that operate on a subset of pools.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":\"IPoolHelperCommon\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xdb8365416c9dd9d7be16677c13819065511e9bc7705d6bad85fd52b65d3b3c39\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b90206982d126075b074f0a77ea9cb3ec173ed9fe9e4504b12d6807532b1b7ff\",\"dweb:/ipfs/QmYjKTu4Mrew94sSxfQ8jP4yT7wZFgghSRyB9A2kDdSy8X\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol":{"IPoolPauseHelper":{"abi":[{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"pausePools","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"pausePools(address[])":"a20dc529"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"pausePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Governance can add a set of pools to this contract, then grant pause permission to accounts here, which allows greater granularity than setting the permission directly on the Vault. Note that governance must grant this contract permission to pause pools from the Vault. Unpausing is not addressed here, and must still be done through the Vault.\",\"kind\":\"dev\",\"methods\":{\"pausePools(address[])\":{\"details\":\"This is a permissioned function. Governance must first grant this contract permission to call `pausePool` on the Vault, then grant another account permission to call `pausePools` here. Note that this is not necessarily the same account that can add or remove pools from the pausable list. Note that there is no `unpause`. This is a helper contract designed to react quickly to emergencies. Unpausing is a more deliberate action that should be performed by accounts approved by governance for this purpose, or by the individual pools' pause managers.\",\"params\":{\"pools\":\"List of pools to pause\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"pausePools(address[])\":{\"notice\":\"Pause a set of pools.\"}},\"notice\":\"Maintain a set of pools that can be paused from this helper contract, vs. directly from the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol\":\"IPoolPauseHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol\":{\"keccak256\":\"0x5d5225c4c283e407458f36d0a10770445b0bd570333fce8d1365af978e8d7829\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://27d0e427a303790222bb696a940882129bafcd3ff57215179d4434d6506b8372\",\"dweb:/ipfs/QmNvL9juq6FzUXHHEufHreckXsPupv2rJw2CC3EBZQiEY5\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol":{"IPoolSwapFeeHelper":{"abi":[{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolHasSwapManager","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"setStaticSwapFeePercentage(address,uint256)":"d15126ba"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolHasSwapManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Governance can add a set of pools to this contract, then grant swap fee setting permission to accounts on this contract, which allows greater granularity than setting the permission directly on the Vault. Note that governance must grant this contract permission to set swap fees from the Vault, and only pools that allow governance to set fees can be added (i.e., they must not have swap managers).\",\"errors\":{\"PoolHasSwapManager(address)\":[{\"details\":\"The swap manager is an exclusive role. If it is set to a non-zero value during pool registration, only the swap manager can change the fee. This helper can only set fees on pools that allow governance to grant this permission.\",\"params\":{\"pool\":\"Address of the pool being added\"}}]},\"kind\":\"dev\",\"methods\":{\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function. Governance must grant this contract permission to call `setStaticSwapFeePercentage` on the Vault. Note that since the swap manager is an exclusive role, the swap fee cannot be changed by governance if it is set, and the pool cannot be added to the set.\",\"params\":{\"pool\":\"The address of the pool\",\"swapFeePercentage\":\"The new swap fee percentage\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"PoolHasSwapManager(address)\":[{\"notice\":\"Cannot add a pool that has a swap manager.\"}]},\"kind\":\"user\",\"methods\":{\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Set the static swap fee percentage on a given pool.\"}},\"notice\":\"Maintain a set of pools whose static swap fee percentages can be changed from here, vs. from the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol\":\"IPoolSwapFeeHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol\":{\"keccak256\":\"0x28f0e2ffd4fda0cb7b1f55d368e5bf8672d6f907e0171674a8a93c7c65c4a29b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37bb56bb5e66cead63626efaacae7dad39f3fd725d001825db861f22aceb0124\",\"dweb:/ipfs/QmdNskvPgTo6R3AmuA3zp8vY9waoEbKsTPWHp5v6aAbhkE\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol":{"IProtocolFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"burn(address,address,uint256,address,uint256,address,uint256)":"de557a32"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":\"IProtocolFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol":{"IProtocolFeeHelper":{"abi":[{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Governance can add a set of pools to this contract, then grant permission to call protocol swap- or yield- setting functions here, which allows greater granularity than setting permissions directly on the fee controller. Note that governance must grant this contract permission to call the pool protocol fee setting functions on the controller.\",\"kind\":\"dev\",\"methods\":{\"setProtocolSwapFeePercentage(address,uint256)\":{\"details\":\"This contract must be granted permission to set swap and yield protocol fees, but governance can independently grant permission to call the swap and yield fee setters.\",\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\",\"pool\":\"The address of the pool\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"details\":\"This contract must be granted permission to set swap and yield protocol fees, but governance can independently grant permission to call the swap and yield fee setters.\",\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\",\"pool\":\"The address of the pool\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Set the protocol swap fee for a pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Set the protocol yield fee for a pool.\"}},\"notice\":\"Maintain a set of pools whose protocol fees can be set from this helper contract, vs. the fee controller.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol\":\"IProtocolFeeHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol\":{\"keccak256\":\"0x79b4a52c34d448b3a67d91d37319c08b2a2c45e1ef94c66f1102d1df05f672f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d85fcc28f6c2cfbeefdb307c551d8904f82b6c2fc3e5bc2e5deb111a6a1007f1\",\"dweb:/ipfs/QmWa96ZJajKfwhGemApEoFCpFmStKHaMLUaZwpTQjYjoF3\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol":{"IProtocolFeeSweeper":{"abi":[{"inputs":[],"name":"BurnerDidNotConsumeAllowance","type":"error"},{"inputs":[],"name":"InvalidFeeRecipient","type":"error"},{"inputs":[],"name":"InvalidProtocolFeeBurner","type":"error"},{"inputs":[],"name":"InvalidTargetToken","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerAlreadyAdded","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerNotAdded","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"UnsupportedProtocolFeeBurner","type":"error"},{"inputs":[],"name":"UnwrapIsNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"feeRecipient","type":"address"}],"name":"FeeRecipientSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"feeTokenAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeSwept","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TargetTokenSet","type":"event"},{"inputs":[{"internalType":"contract IProtocolFeeBurner","name":"protocolFeeBurner","type":"address"}],"name":"addProtocolFeeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFeeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTargetToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"isApprovedProtocolFeeBurner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"feeTokens","type":"address[]"}],"name":"recoverProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeBurner","name":"protocolFeeBurner","type":"address"}],"name":"removeProtocolFeeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feeRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"targetToken","type":"address"}],"name":"setTargetToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"contract IProtocolFeeBurner","name":"feeBurner","type":"address"}],"name":"sweepProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC4626","name":"feeToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"contract IProtocolFeeBurner","name":"feeBurner","type":"address"}],"name":"sweepProtocolFeesForWrappedToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addProtocolFeeBurner(address)":"e20c482f","getFeeRecipient()":"4ccb20c0","getProtocolFeeController()":"85f2dbd4","getTargetToken()":"80db0d51","isApprovedProtocolFeeBurner(address)":"9c5cee9b","recoverProtocolFees(address[])":"b0edcc53","removeProtocolFeeBurner(address)":"b11f061e","setFeeRecipient(address)":"e74b981b","setTargetToken(address)":"1b66cb00","sweepProtocolFeesForToken(address,address,uint256,uint256,address)":"b9746995","sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)":"88f6d2a4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BurnerDidNotConsumeAllowance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidFeeRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeBurner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTargetToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerNotAdded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"UnsupportedProtocolFeeBurner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnwrapIsNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"FeeRecipientSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeSwept\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TargetTokenSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"addProtocolFeeBurner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTargetToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"isApprovedProtocolFeeBurner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"feeTokens\",\"type\":\"address[]\"}],\"name\":\"recoverProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"removeProtocolFeeBurner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"setFeeRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"}],\"name\":\"setTargetToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"feeBurner\",\"type\":\"address\"}],\"name\":\"sweepProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC4626\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"feeBurner\",\"type\":\"address\"}],\"name\":\"sweepProtocolFeesForWrappedToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"BurnerDidNotConsumeAllowance()\":[{\"details\":\"The fee sweeper approves the burner to pull tokens. If it doesn't do so, revert to avoid a \\\"hanging\\\" approval that could be exploited later.\"}],\"ProtocolFeeBurnerAlreadyAdded(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of an approved protocol fee burner\"}}],\"ProtocolFeeBurnerNotAdded(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of a protocol fee burner to be removed from the allowlist\"}}],\"UnsupportedProtocolFeeBurner(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of the unsupported fee burner\"}}]},\"events\":{\"FeeRecipientSet(address)\":{\"params\":{\"feeRecipient\":\"The final destination of collected protocol fees\"}},\"ProtocolFeeBurnerAdded(address)\":{\"details\":\"`sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\",\"params\":{\"protocolFeeBurner\":\"The address of the approved protocol fee burner that was added\"}},\"ProtocolFeeBurnerRemoved(address)\":{\"details\":\"`sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\",\"params\":{\"protocolFeeBurner\":\"The address of the approved protocol fee burner that was removed\"}},\"ProtocolFeeSwept(address,address,uint256,address)\":{\"details\":\"This can happen if no target token or burner contract was specified, or the fee token is the target token.\",\"params\":{\"feeToken\":\"The token the fee was collected in (also the target token in this case; no swap necessary)\",\"feeTokenAmount\":\"The number of feeTokens\",\"pool\":\"The pool on which the fee was collected\",\"recipient\":\"The recipient of the fee tokens\"}},\"TargetTokenSet(address)\":{\"params\":{\"token\":\"The preferred token for receiving protocol fees\"}}},\"kind\":\"dev\",\"methods\":{\"addProtocolFeeBurner(address)\":{\"details\":\"This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol fee burners.\",\"params\":{\"protocolFeeBurner\":\"The address of an approved protocol fee burner to be added\"}},\"getFeeRecipient()\":{\"details\":\"Can be changed by `setFeeRecipient`.\",\"returns\":{\"_0\":\"feeRecipient The current fee recipient\"}},\"getProtocolFeeController()\":{\"details\":\"It is not immutable in the Vault, so we need to fetch it every time.\",\"returns\":{\"_0\":\"protocolFeeController The address of the current `ProtocolFeeController`\"}},\"getTargetToken()\":{\"details\":\"This is the token the burner will swap all fee tokens for. Can be changed by `setTargetToken`.\",\"returns\":{\"_0\":\"targetToken The current target token\"}},\"isApprovedProtocolFeeBurner(address)\":{\"params\":{\"protocolFeeBurner\":\"The address to be checked\"},\"returns\":{\"_0\":\"isApproved True if the given address is on the approved protocol fee burner allowlist\"}},\"recoverProtocolFees(address[])\":{\"details\":\"It will recover the full balance of all the tokens. This can only be called by the `feeRecipient`.\",\"params\":{\"feeTokens\":\"The tokens to recover\"}},\"removeProtocolFeeBurner(address)\":{\"details\":\"This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol fee burners.\",\"params\":{\"protocolFeeBurner\":\"The address of a protocol fee burner on the allowlist to be removed\"}},\"setFeeRecipient(address)\":{\"details\":\"This is a permissioned function.\",\"params\":{\"feeRecipient\":\"The address of the new fee recipient\"}},\"setTargetToken(address)\":{\"details\":\"This is the token for which the burner will attempt to swap all collected fee tokens.\",\"params\":{\"targetToken\":\"The address of the target token\"}},\"sweepProtocolFeesForToken(address,address,uint256,uint256,address)\":{\"details\":\"This will withdraw the fee token from the controller to this contract, and attempt to convert and forward the proceeds to the fee recipient. Note that this requires governance to grant this contract permission to call `withdrawProtocolFeesForToken` on the `ProtocolFeeController`. This is a permissioned call, since it involves a swap and a permissionless sweep could be triggered at times disadvantageous to the protocol (e.g., flash crashes). The general design is for an off-chain process to periodically collect fees from the Vault and check the protocol fee amounts available for withdrawal. Once these are greater than a threshold, compute the expected proceeds to determine the limits (amount and deadline), then call the sweeper to put in the order with the burner.\",\"params\":{\"deadline\":\"Deadline for the burn operation (swap), after which it will revert\",\"feeBurner\":\"The protocol fee burner to be used (or the zero address to fall back on direct transfer)\",\"feeToken\":\"The fee token in the pool\",\"minTargetTokenAmountOut\":\"The minimum number of target tokens to be received\",\"pool\":\"The pool that incurred the fees we're withdrawing\"}},\"sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)\":{\"params\":{\"deadline\":\"Deadline for the burn operation (swap), after which it will revert\",\"feeBurner\":\"The protocol fee burner to be used (or the zero address to fall back on direct transfer)\",\"feeToken\":\"The fee token in the pool\",\"minTargetTokenAmountOut\":\"The minimum number of target tokens to be received\",\"pool\":\"The pool that incurred the fees we're withdrawing\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BurnerDidNotConsumeAllowance()\":[{\"notice\":\"The burner did not consume its entire allowance.\"}],\"InvalidFeeRecipient()\":[{\"notice\":\"The fee recipient is invalid.\"}],\"InvalidProtocolFeeBurner()\":[{\"notice\":\"The protocol fee burner to be added is invalid.\"}],\"InvalidTargetToken()\":[{\"notice\":\"The target token is invalid.\"}],\"ProtocolFeeBurnerAlreadyAdded(address)\":[{\"notice\":\"Protocol fee burners can only be added to the allowlist once.\"}],\"ProtocolFeeBurnerNotAdded(address)\":[{\"notice\":\"Protocol fee burners must be added to the allowlist before being removed.\"}],\"UnsupportedProtocolFeeBurner(address)\":[{\"notice\":\"The specified fee burner has not been approved.\"}],\"UnwrapIsNotAllowed()\":[{\"notice\":\"Unwrapping is not allowed for the operation.\"}]},\"events\":{\"FeeRecipientSet(address)\":{\"notice\":\"Emitted when the fee recipient address is set or updated.\"},\"ProtocolFeeBurnerAdded(address)\":{\"notice\":\"Emitted when a burner is added to the protocol fee burner allowlist.\"},\"ProtocolFeeBurnerRemoved(address)\":{\"notice\":\"Emitted when a burner is removed from the protocol fee burner allowlist.\"},\"ProtocolFeeSwept(address,address,uint256,address)\":{\"notice\":\"Emitted when a fee token is transferred directly, vs. calling the burner.\"},\"TargetTokenSet(address)\":{\"notice\":\"Emitted when the target token is set or updated.\"}},\"kind\":\"user\",\"methods\":{\"addProtocolFeeBurner(address)\":{\"notice\":\"Add an approved fee burner to the allowlist.\"},\"getFeeRecipient()\":{\"notice\":\"Getter for the current fee recipient.\"},\"getProtocolFeeController()\":{\"notice\":\"Return the address of the current `ProtocolFeeController` from the Vault.\"},\"getTargetToken()\":{\"notice\":\"Getter for the target token.\"},\"isApprovedProtocolFeeBurner(address)\":{\"notice\":\"Check whether a given address corresponds to an approved protocol fee burner.\"},\"recoverProtocolFees(address[])\":{\"notice\":\"Retrieve any tokens \\\"stuck\\\" in this contract (e.g., dust, or failed conversions).\"},\"removeProtocolFeeBurner(address)\":{\"notice\":\"Remove a fee burner from the allowlist.\"},\"setFeeRecipient(address)\":{\"notice\":\"Update the fee recipient address.\"},\"setTargetToken(address)\":{\"notice\":\"Update the address of the target token.\"},\"sweepProtocolFeesForToken(address,address,uint256,uint256,address)\":{\"notice\":\"Withdraw, convert, and forward protocol fees for a given pool and token.\"},\"sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)\":{\"notice\":\"The same as `sweepProtocolFeesForToken`, but for wrapped tokens.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":\"IProtocolFeeSweeper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol":{"ITokenPairRegistry":{"abi":[{"inputs":[{"internalType":"address","name":"buffer","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"EmptyPath","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"address","name":"buffer","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"InvalidBufferPath","type":"error"},{"inputs":[{"internalType":"address","name":"poolOrBuffer","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"InvalidRemovePath","type":"error"},{"inputs":[{"internalType":"address","name":"path","type":"address"}],"name":"InvalidSimplePath","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"pathsLength","type":"uint256"}],"name":"PathAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"pathsLength","type":"uint256"}],"name":"PathRemoved","type":"event"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct SwapPathStep[]","name":"steps","type":"tuple[]"}],"name":"addPath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolOrBuffer","type":"address"}],"name":"addSimplePath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getPathAt","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct SwapPathStep[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getPathCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getPaths","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct SwapPathStep[][]","name":"","type":"tuple[][]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removePathAtIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolOrBuffer","type":"address"}],"name":"removeSimplePath","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addPath(address,(address,address,bool)[])":"815ca70f","addSimplePath(address)":"f335b520","getPathAt(address,address,uint256)":"057074ff","getPathCount(address,address)":"94ee0a3b","getPaths(address,address)":"7c7d370a","removePathAtIndex(address,address,uint256)":"32fffdbd","removeSimplePath(address)":"bc138aa3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"buffer\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyPath\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"buffer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"InvalidBufferPath\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolOrBuffer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"InvalidRemovePath\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"path\",\"type\":\"address\"}],\"name\":\"InvalidSimplePath\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pathsLength\",\"type\":\"uint256\"}],\"name\":\"PathAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pathsLength\",\"type\":\"uint256\"}],\"name\":\"PathRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"}],\"name\":\"addPath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolOrBuffer\",\"type\":\"address\"}],\"name\":\"addSimplePath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getPathAt\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct SwapPathStep[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"getPathCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"getPaths\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct SwapPathStep[][]\",\"name\":\"\",\"type\":\"tuple[][]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"removePathAtIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolOrBuffer\",\"type\":\"address\"}],\"name\":\"removeSimplePath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"BufferNotInitialized(address)\":[{\"params\":{\"buffer\":\"The address of the uninitialized buffer\"}}],\"InvalidBufferPath(address,address,address)\":[{\"params\":{\"buffer\":\"The address of the buffer\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}}],\"InvalidRemovePath(address,address,address)\":[{\"params\":{\"poolOrBuffer\":\"The address of the pool or buffer\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}}],\"InvalidSimplePath(address)\":[{\"params\":{\"path\":\"Pool or buffer address\"}}]},\"events\":{\"PathAdded(address,address,uint256)\":{\"params\":{\"pathsLength\":\"The number of paths added for the token pair\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}},\"PathRemoved(address,address,uint256)\":{\"params\":{\"pathsLength\":\"The number of paths associated with the token pair after the removal\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}}},\"kind\":\"dev\",\"methods\":{\"addPath(address,(address,address,bool)[])\":{\"details\":\"This function is permissioned. Use it to register boosted pool paths with leading / trailing buffer steps. The registry will validate that each step is valid (i.e. each pool step contains the `tokenIn` and `tokenOut`, and each buffer step has the correct wrapped / underlying token).\",\"params\":{\"steps\":\"An array of `SwapPathStep` structs representing the path steps to reach the output token\",\"tokenIn\":\"The address of the input token in the pair\"}},\"addSimplePath(address)\":{\"details\":\"This function is permissioned.\",\"params\":{\"poolOrBuffer\":\"The address of the pool or buffer\"}},\"getPathAt(address,address,uint256)\":{\"details\":\"Safe version; reverts if the index is out of bounds.\",\"params\":{\"index\":\"The index of the path in the list of paths for the token pair\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"},\"returns\":{\"_0\":\"The path at the specified index for the token pair\"}},\"getPathCount(address,address)\":{\"params\":{\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"},\"returns\":{\"_0\":\"The number of paths registered for the token pair\"}},\"getPaths(address,address)\":{\"params\":{\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"},\"returns\":{\"_0\":\"An array of path addresses registered for the token pair\"}},\"removePathAtIndex(address,address,uint256)\":{\"details\":\"This function is permissioned.\",\"params\":{\"index\":\"The index of the path to remove in the list of paths for the token pair\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}},\"removeSimplePath(address)\":{\"details\":\"This function is permissioned.\",\"params\":{\"poolOrBuffer\":\"The address of the pool or buffer\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BufferNotInitialized(address)\":[{\"notice\":\"The given buffer address does not correspond to an initialized buffer.\"}],\"EmptyPath()\":[{\"notice\":\"The path to add cannot be empty.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"Attempted to remove a path at an index beyond the registered length.\"}],\"InvalidBufferPath(address,address,address)\":[{\"notice\":\"The output token does not match the expected address in a wrap or unwrap operation.\"}],\"InvalidRemovePath(address,address,address)\":[{\"notice\":\"The given pool or buffer is not registered as a path for the token pair.\"}],\"InvalidSimplePath(address)\":[{\"notice\":\"The given address is not a valid pool or buffer.\"}]},\"events\":{\"PathAdded(address,address,uint256)\":{\"notice\":\"Emitted when a new token pair is added to the registry.\"},\"PathRemoved(address,address,uint256)\":{\"notice\":\"Emitted when an existing token pair is removed from the registry.\"}},\"kind\":\"user\",\"methods\":{\"addPath(address,(address,address,bool)[])\":{\"notice\":\"Adds an arbitrary path between `tokenIn` and the last step's `tokenOut` to the registry.\"},\"addSimplePath(address)\":{\"notice\":\"Adds a pool or buffer to the registry with all token pairs it supports.\"},\"getPathAt(address,address,uint256)\":{\"notice\":\"Returns the path for a given token pair at a specific index.\"},\"getPathCount(address,address)\":{\"notice\":\"Returns the number of paths registered for a given token pair.\"},\"getPaths(address,address)\":{\"notice\":\"Returns the paths registered for a given token pair.\"},\"removePathAtIndex(address,address,uint256)\":{\"notice\":\"Removes an arbitrary path from the registry at a given index.\"},\"removeSimplePath(address)\":{\"notice\":\"Removes all token paths registered for a given pool or buffer.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol\":\"ITokenPairRegistry\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol\":{\"keccak256\":\"0xd4b893a6f835f8bdf514b99a4bd0ba00cd54d0b575f675abd95efd99742b0fb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3cf813c85596cffa3198175d9d288c643937b6629166832cebd3878d192e04c3\",\"dweb:/ipfs/QmXnK5iKZ9ZJ4sEUqJbTJ2UWpqbbehkwLZT8WraPcnDCDh\"]},\"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol\":{\"keccak256\":\"0x956f0a455276ada0193331696b9e3402d8b32fbacc5a5d7fa659ff4b5a2fc47a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03169eeb5ca1b2594fce7f13fb06e268545044c4501b6d1f98b8e86dff788afc\",\"dweb:/ipfs/QmPLsewKZZoG4QaeQEn1WGsaCKyABsYku4KgLQtumTAyVv\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"IAuthorizer":{"abi":[{"inputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"canPerform(bytes32,address,address)":"9be2a884"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"success\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"notice\":\"Interface to the Vault's permission system.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":\"IAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol":{"IBasePoolFactory":{"abi":[{"inputs":[],"name":"Disabled","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"anonymous":false,"inputs":[],"name":"FactoryDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreated","type":"event"},{"inputs":[],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"constructorArgs","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"getDeploymentAddress","outputs":[{"internalType":"address","name":"deploymentAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolCount","outputs":[{"internalType":"uint256","name":"poolCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPools","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getPoolsInRange","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDisabled","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolFromFactory","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"disable()":"2f2770db","getActionId(bytes4)":"851c1bb3","getDeploymentAddress(bytes,bytes32)":"44f6fec7","getPoolCount()":"8eec5d70","getPools()":"673a2a1f","getPoolsInRange(uint256,uint256)":"53a72f7e","isDisabled()":"6c57f5a9","isPoolFromFactory(address)":"6634b753"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Disabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"FactoryDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"getDeploymentAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getPoolsInRange\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types (e.g., address prediction, tracking deployed pools, and governance-facilitated migration).\",\"events\":{\"PoolCreated(address)\":{\"params\":{\"pool\":\"The address of the new pool\"}}},\"kind\":\"dev\",\"methods\":{\"disable()\":{\"details\":\"Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getDeploymentAddress(bytes,bytes32)\":{\"params\":{\"constructorArgs\":\"The arguments used to create the pool\",\"salt\":\"The salt used to deploy the pool\"},\"returns\":{\"deploymentAddress\":\"The predicted address of the pool, given the salt\"}},\"getPoolCount()\":{\"details\":\"This can then be used to \\\"paginate\\\" calls to `getPools` to control gas costs.\",\"returns\":{\"poolCount\":\"The number of pools deployed by this factory\"}},\"getPools()\":{\"returns\":{\"pools\":\"The list of pools deployed by this factory\"}},\"getPoolsInRange(uint256,uint256)\":{\"details\":\"`start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply stop at the end and return fewer results than requested.\",\"params\":{\"count\":\"The maximum number of pools to return\",\"start\":\"The index of the first pool to return\"},\"returns\":{\"pools\":\"The list of pools deployed by this factory, starting at `start` and returning up to `count` pools\"}},\"isDisabled()\":{\"returns\":{\"success\":\"True if this factory was disabled\"}},\"isPoolFromFactory(address)\":{\"params\":{\"pool\":\"The pool to check\"},\"returns\":{\"success\":\"True if `pool` was created by this factory\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"Disabled()\":[{\"notice\":\"Attempted pool creation after the factory was disabled.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"A pool index is beyond the current bounds of the array.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"events\":{\"FactoryDisabled()\":{\"notice\":\"The factory was disabled by governance.\"},\"PoolCreated(address)\":{\"notice\":\"A pool was deployed.\"}},\"kind\":\"user\",\"methods\":{\"disable()\":{\"notice\":\"Disable the factory, preventing the creation of more pools.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getDeploymentAddress(bytes,bytes32)\":{\"notice\":\"Return the address where a new pool will be deployed, based on the factory address and salt.\"},\"getPoolCount()\":{\"notice\":\"Return the total number of pools deployed by this factory.\"},\"getPools()\":{\"notice\":\"Return the complete list of pools deployed by this factory.\"},\"getPoolsInRange(uint256,uint256)\":{\"notice\":\"Return a subset of the list of pools deployed by this factory.\"},\"isDisabled()\":{\"notice\":\"Check whether this factory has been disabled by governance.\"},\"isPoolFromFactory(address)\":{\"notice\":\"Check whether a pool was deployed by this factory.\"}},\"notice\":\"Base interface for a Balancer Pool Factory.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":\"IBasePoolFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0x6f8c558b0520faae0c4576f30225b5a97821a4cd210878a0ba10c102a2f753f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b40aa7a5ee39fa2e297c684fd29ad45d866f1fc61cd997120a417b02a4d908aa\",\"dweb:/ipfs/QmYP5pQAF7SDLgy3aerqfnc4VwdmfQix2jcQUNL3o83BY9\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"IHooks":{"abi":[{"inputs":[],"name":"getHookFlags","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"hookFlags","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"amountsInScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsInRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsOutRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountInScaled18","type":"uint256"},{"internalType":"uint256","name":"amountOutScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenInBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenOutBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AfterSwapParams","name":"params","type":"tuple"}],"name":"onAfterSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"hookAdjustedAmountCalculatedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"}],"name":"onBeforeSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"}],"name":"onComputeDynamicSwapFeePercentage","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"onRegister","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getHookFlags()":"d77153a7","onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)":"976907cc","onAfterInitialize(uint256[],uint256,bytes)":"38be241d","onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)":"2754888d","onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))":"18b6eb55","onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)":"45421ec7","onBeforeInitialize(uint256[],bytes)":"1c149e28","onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)":"ba5f9f40","onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)":"5211fa77","onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)":"a0e8f5ac","onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))":"0b89f182"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"hookFlags\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsInRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsOutRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"hookAdjustedAmountCalculatedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that they are called in the correct order, and with the correct arguments. To maintain this security, these functions should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`, then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\",\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"hookFlags\":\"Flags indicating which hooks the contract supports\"}},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsInRaw\":\"New amountsInRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsOutRaw\":\"New amountsOutRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"hookAdjustedAmountCalculatedRaw\":\"New amount calculated, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"dynamicSwapFeePercentage\":\"Value of the swap fee percentage, as an 18-decimal FP value\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"success\":\"True if the hook allowed the registration, false otherwise\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"}},\"notice\":\"Interface for pool hooks.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":\"IHooks\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"IProtocolFeeController":{"abi":[{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolRegisteredWithFeeController","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"aggregateFeePercentage","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"collectAggregateFees(address)":"8f4ab9ca","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","isPoolRegistered(address)":"c673bdaf","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolRegisteredWithFeeController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"aggregateFeePercentage\":\"The computed aggregate percentage\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"protocolSwapFeePercentage\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"protocolYieldFeePercentage\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolSwapFeePercentage\":\"The protocol swap fee percentage for the given pool\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage for the given pool\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"notice\":\"Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator yield fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Contract that handles protocol and pool creator fees for the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":\"IProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol":{"IProtocolFeePercentagesProvider":{"abi":[{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"FactoryFeesNotSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"factory","type":"address"}],"name":"PoolNotFromFactory","type":"error"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"UnknownFactory","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"indexed":false,"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"name":"FactorySpecificProtocolFeePercentagesSet","type":"event"},{"inputs":[],"name":"getBalancerContractRegistry","outputs":[{"internalType":"contract IBalancerContractRegistry","name":"balancerContractRegistry","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"getFactorySpecificProtocolFeePercentages","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"name":"setFactorySpecificProtocolFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"setProtocolFeePercentagesForPools","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getBalancerContractRegistry()":"deb27a7a","getFactorySpecificProtocolFeePercentages(address)":"f2c24ec8","getProtocolFeeController()":"85f2dbd4","setFactorySpecificProtocolFeePercentages(address,uint256,uint256)":"00859689","setProtocolFeePercentagesForPools(address,address[])":"344b12d5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"FactoryFeesNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"PoolNotFromFactory\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"UnknownFactory\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"FactorySpecificProtocolFeePercentagesSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getBalancerContractRegistry\",\"outputs\":[{\"internalType\":\"contract IBalancerContractRegistry\",\"name\":\"balancerContractRegistry\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"getFactorySpecificProtocolFeePercentages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setFactorySpecificProtocolFeePercentages\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"setProtocolFeePercentagesForPools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"FactoryFeesNotSet(address)\":[{\"details\":\"This error can by thrown by `getFactorySpecificProtocolFeePercentages` or `setProtocolFeePercentagesForPools`, as both require that valid fee percentages have been set. You need to set the factory fees before you can apply them to pools from that factory.\",\"params\":{\"factory\":\"The factory address where fees have not been set\"}}],\"PoolNotFromFactory(address,address)\":[{\"details\":\"Occurs when one of the pools supplied to `setProtocolFeePercentagesForPools` is not from the given factory.\",\"params\":{\"factory\":\"The address of the factory\",\"pool\":\"The address of the unrecognized pool\"}}],\"UnknownFactory(address)\":[{\"params\":{\"factory\":\"The address of the unknown factory\"}}]},\"events\":{\"FactorySpecificProtocolFeePercentagesSet(address,uint256,uint256)\":{\"params\":{\"factory\":\"The pool factory\",\"protocolSwapFeePercentage\":\"The protocol swap fee percentage intended for pools from this factory\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage intended for pools from this factory\"}}},\"kind\":\"dev\",\"methods\":{\"getBalancerContractRegistry()\":{\"returns\":{\"balancerContractRegistry\":\"The address of the Balancer contract registry\"}},\"getFactorySpecificProtocolFeePercentages(address)\":{\"params\":{\"factory\":\"The address of the factory\"},\"returns\":{\"protocolSwapFeePercentage\":\"The protocol swap fee percentage set for that factory\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage set for that factory\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"The address of the fee controller\"}},\"setFactorySpecificProtocolFeePercentages(address,uint256,uint256)\":{\"details\":\"This is a permissioned call. After the fee percentages have been set, and governance has granted this contract permission to set fee percentages on pools, anyone can call `setProtocolFeePercentagesForPools` to update the fee percentages on a set of pools from that factory.\",\"params\":{\"factory\":\"The address of the factory\",\"protocolSwapFeePercentage\":\"The new protocol swap fee percentage\",\"protocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setProtocolFeePercentagesForPools(address,address[])\":{\"details\":\"This call is permissionless. Anyone can update the fee percentages, once they're set by governance. Note that governance must also grant this contract permission to set protocol fee percentages on pools.\",\"params\":{\"factory\":\"The address of the factory\",\"pools\":\"The pools whose fees will be set according to `setFactorySpecificProtocolFeePercentages`\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"FactoryFeesNotSet(address)\":[{\"notice\":\"`setFactorySpecificProtocolFeePercentages` has not been called for this factory address.\"}],\"PoolNotFromFactory(address,address)\":[{\"notice\":\"The given pool is not from the expected factory.\"}],\"UnknownFactory(address)\":[{\"notice\":\"Fees can only be set on recognized factories (i.e., registered in the `BalancerContractRegistry`).\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The protocol fee controller was configured with an incorrect Vault address.\"}]},\"events\":{\"FactorySpecificProtocolFeePercentagesSet(address,uint256,uint256)\":{\"notice\":\"Protocol fee percentages have been set for the given factory.\"}},\"kind\":\"user\",\"methods\":{\"getBalancerContractRegistry()\":{\"notice\":\"Get the address of the `BalancerContractRegistry` used to validate factory contracts.\"},\"getFactorySpecificProtocolFeePercentages(address)\":{\"notice\":\"Query the protocol fee percentages for a given factory.\"},\"getProtocolFeeController()\":{\"notice\":\"Get the address of the `ProtocolFeeController` used to set fees.\"},\"setFactorySpecificProtocolFeePercentages(address,uint256,uint256)\":{\"notice\":\"Assign intended protocol fee percentages for a given factory.\"},\"setProtocolFeePercentagesForPools(address,address[])\":{\"notice\":\"Update the protocol fees for a set of pools from a given factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol\":\"IProtocolFeePercentagesProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xcb2fa9725bb158d1bd24984d39da7b69628d390740ef13b5578ecab903e0be0b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://fa02bc7433e3c93261e6644049bc2bddb474a7071874eaad4b4150af1afbb43f\",\"dweb:/ipfs/QmR2jYnyT7zg3wWbn4qpUhzpMoYVd9iZ7HsE1FNJqrFtUM\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol":{"IRouter":{"abi":[{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityCustom","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityUnbalanced","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityCustom","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityUnbalanced","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquidityCustom","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"}],"name":"queryRemoveLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquiditySingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapSingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapSingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquidityCustom","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquiditySingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapSingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapSingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityCustom(address,uint256[],uint256,bool,bytes)":"0ca078ec","addLiquidityProportional(address,uint256[],uint256,bool,bytes)":"724dba33","addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)":"72657d17","addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)":"c08bc851","donate(address,uint256[],bool,bytes)":"bf6ee3fd","initialize(address,address[],uint256[],uint256,bool,bytes)":"026b3d95","queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)":"452db952","queryAddLiquidityProportional(address,uint256,address,bytes)":"9de90518","queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)":"1d56798d","queryAddLiquidityUnbalanced(address,uint256[],address,bytes)":"da001f7d","queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)":"c330c7be","queryRemoveLiquidityProportional(address,uint256,address,bytes)":"0f710888","queryRemoveLiquidityRecovery(address,uint256)":"b037ed36","queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)":"23b39241","queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)":"53d0bb98","querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)":"3ebc54e5","querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)":"175d4408","removeLiquidityCustom(address,uint256,uint256[],bool,bytes)":"82bf2b24","removeLiquidityProportional(address,uint256,uint256[],bool,bytes)":"51682750","removeLiquidityRecovery(address,uint256,uint256[])":"08c04793","removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)":"ecb2182c","removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)":"e7326def","swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)":"750283bc","swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)":"94e86ef8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityUnbalanced\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"donate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityUnbalanced\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"}],\"name\":\"queryRemoveLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquiditySingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapSingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapSingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquiditySingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapSingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapSingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addLiquidityCustom(address,uint256[],uint256,bool,bytes)\":{\"details\":\"The given maximum and minimum amounts given may be interpreted as exact depending on the pool type. In any case the caller can expect them to be hard boundaries for the request.\",\"params\":{\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsIn\":\"Actual amounts of tokens added, sorted in token registration order\",\"bptAmountOut\":\"Actual amount of pool tokens received\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityProportional(address,uint256[],uint256,bool,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsIn\":\"Actual amounts of tokens added, sorted in token registration order\"}},\"addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"maxAmountIn\":\"Maximum amount of tokens to be added\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token used to add liquidity\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountIn\":\"Actual amount of tokens added\"}},\"addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountOut\":\"Actual amount of pool tokens received\"}},\"donate(address,uint256[],bool,bytes)\":{\"details\":\"To support donation, the pool config `enableDonation` flag must be set to true.\",\"params\":{\"amountsIn\":\"Amounts of tokens to be donated, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to donate liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"}},\"initialize(address,address[],uint256[],uint256,bool,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokens\":\"Pool tokens, in token registration order\",\"userData\":\"Additional (optional) data sent with the request to add initial liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountOut\":\"Actual amount of pool tokens minted in exchange for initial liquidity\"}},\"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)\":{\"params\":{\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Expected minimum amount of pool tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsIn\":\"Expected amounts of tokens to add, sorted in token registration order\",\"bptAmountOut\":\"Expected amount of pool tokens to receive\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryAddLiquidityProportional(address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsIn\":\"Expected amounts of tokens to add, sorted in token registration order\"}},\"queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Expected exact amount of pool tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token used to add liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountIn\":\"Expected amount of tokens to add\"}},\"queryAddLiquidityUnbalanced(address,uint256[],address,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"bptAmountOut\":\"Expected amount of pool tokens to receive\"}},\"queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)\":{\"params\":{\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"minAmountsOut\":\"Expected minimum amounts of tokens to receive, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\",\"bptAmountIn\":\"Expected amount of pool tokens to burn\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryRemoveLiquidityProportional(address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\"}},\"queryRemoveLiquidityRecovery(address,uint256)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\"}},\"queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountOut\":\"Expected amount of tokens to receive\"}},\"queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountOut\":\"Expected exact amount of tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"bptAmountIn\":\"Expected amount of pool tokens to burn\"}},\"querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountIn\":\"Exact amounts of input tokens to send\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountOut\":\"Calculated amount of output tokens to be received in exchange for the given input tokens\"}},\"querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountOut\":\"Exact amounts of input tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountIn\":\"Calculated amount of input tokens to be sent in exchange for the requested output tokens\"}},\"removeLiquidityCustom(address,uint256,uint256[],bool,bytes)\":{\"details\":\"The given maximum and minimum amounts given may be interpreted as exact depending on the pool type. In any case the caller can expect them to be hard boundaries for the request.\",\"params\":{\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\",\"bptAmountIn\":\"Actual amount of pool tokens burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityProportional(address,uint256,uint256[],bool,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\"}},\"removeLiquidityRecovery(address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\"}},\"removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountOut\":\"Minimum amount of tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountOut\":\"Actual amount of tokens received\"}},\"removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)\":{\"params\":{\"exactAmountOut\":\"Exact amount of tokens to be received\",\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"pool\":\"Address of the liquidity pool\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountIn\":\"Actual amount of pool tokens burned\"}},\"swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap, after which it will revert\",\"exactAmountIn\":\"Exact amounts of input tokens to send\",\"minAmountOut\":\"Minimum amount of tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the swap request\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountOut\":\"Calculated amount of output tokens to be received in exchange for the given input tokens\"}},\"swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap, after which it will revert\",\"exactAmountOut\":\"Exact amounts of input tokens to receive\",\"maxAmountIn\":\"Maximum amount of tokens to be sent\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the swap request\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountIn\":\"Calculated amount of input tokens to be sent in exchange for the requested output tokens\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityCustom(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with a custom request.\"},\"addLiquidityProportional(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with proportional token amounts, receiving an exact amount of pool tokens.\"},\"addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool in a single token, receiving an exact amount of pool tokens.\"},\"addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with arbitrary token amounts.\"},\"donate(address,uint256[],bool,bytes)\":{\"notice\":\"Adds liquidity to a pool by donating the amounts in (no BPT out).\"},\"initialize(address,address[],uint256[],uint256,bool,bytes)\":{\"notice\":\"Initialize a liquidity pool.\"},\"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquidityCustom` operation without actually executing it.\"},\"queryAddLiquidityProportional(address,uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquidityProportional` operation without actually executing it.\"},\"queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquiditySingleTokenExactOut` operation without actually executing it.\"},\"queryAddLiquidityUnbalanced(address,uint256[],address,bytes)\":{\"notice\":\"Queries an `addLiquidityUnbalanced` operation without actually executing it.\"},\"queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)\":{\"notice\":\"Queries a `removeLiquidityCustom` operation without actually executing it.\"},\"queryRemoveLiquidityProportional(address,uint256,address,bytes)\":{\"notice\":\"Queries a `removeLiquidityProportional` operation without actually executing it.\"},\"queryRemoveLiquidityRecovery(address,uint256)\":{\"notice\":\"Queries a `removeLiquidityRecovery` operation without actually executing it.\"},\"queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)\":{\"notice\":\"Queries a `removeLiquiditySingleTokenExactIn` operation without actually executing it.\"},\"queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"notice\":\"Queries a `removeLiquiditySingleTokenExactOut` operation without actually executing it.\"},\"querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)\":{\"notice\":\"Queries a swap operation specifying an exact input token amount without actually executing it.\"},\"querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)\":{\"notice\":\"Queries a swap operation specifying an exact output token amount without actually executing it.\"},\"removeLiquidityCustom(address,uint256,uint256[],bool,bytes)\":{\"notice\":\"Removes liquidity from a pool with a custom request.\"},\"removeLiquidityProportional(address,uint256,uint256[],bool,bytes)\":{\"notice\":\"Removes liquidity with proportional token amounts from a pool, burning an exact pool token amount.\"},\"removeLiquidityRecovery(address,uint256,uint256[])\":{\"notice\":\"Removes liquidity proportionally, burning an exact pool token amount. Only available in Recovery Mode.\"},\"removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)\":{\"notice\":\"Removes liquidity from a pool via a single token, burning an exact pool token amount.\"},\"removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)\":{\"notice\":\"Removes liquidity from a pool via a single token, specifying the exact amount of tokens to receive.\"},\"swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation specifying an exact input token amount.\"},\"swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation specifying an exact output token amount.\"}},\"notice\":\"User-friendly interface to basic Vault operations: swap, add/remove liquidity, and associated queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":\"IRouter\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":{\"keccak256\":\"0x8e8e4b32c57834bd468f893c08f87323dd3c18043690055fd0523318cf82f156\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9eccee85635070311d65d1f4335539bcb604aed550f24c136e31bb9db405e8af\",\"dweb:/ipfs/QmQwUaVJn2T2mLdp4ydG7jBXhtuwXeE5vfKyLEDdu18Lq8\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"IVault":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","areBuffersPaused()":"55cba7fe","balanceOf(address,address)":"f7888aec","collectAggregateFees(address)":"8f4ab9ca","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getActionId(bytes4)":"851c1bb3","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getNonzeroDeltaCount()":"db817187","getPauseWindowEndTime()":"8a8d123a","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolMinimumTotalSupply()":"d0965a6b","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","getVaultExtension()":"b9a8effa","getVaultPausedState()":"85c8c015","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","sendTo(address,address,uint256)":"ae639329","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","totalSupply(address)":"e4dc2aa4","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The main Vault address.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"}},\"notice\":\"Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":\"IVault\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"IVaultAdmin":{"abi":[{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","areBuffersPaused()":"55cba7fe","collectAggregateFees(address)":"8f4ab9ca","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getPauseWindowEndTime()":"8a8d123a","getPoolMinimumTotalSupply()":"d0965a6b","getVaultPausedState()":"85c8c015","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations, as two delegate calls add gas to each call. Most of the permissioned calls are here.\",\"kind\":\"dev\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultAdmin` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":\"IVaultAdmin\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"IVaultErrors":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Errors are declared inside an interface (namespace) to improve DX with Typechain.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":\"IVaultErrors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"IVaultEvents":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Events are declared inside an interface (namespace) to improve DX with Typechain.\",\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":\"IVaultEvents\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"IVaultExtension":{"abi":[{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","balanceOf(address,address)":"f7888aec","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getNonzeroDeltaCount()":"db817187","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","totalSupply(address)":"e4dc2aa4","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultExtension` handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and liquidity operations.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultExtension` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":\"IVaultExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"IVaultMain":{"abi":[{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getVaultExtension()":"b9a8effa","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","sendTo(address,address,uint256)":"ae639329","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These are generally \\\"critical path\\\" functions (swap, add/remove liquidity) that are in the main contract for technical or performance reasons.\",\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"}},\"notice\":\"Interface for functions defined on the main Vault contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":\"IVaultMain\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"Authentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be applied to external functions to make them only callable by authorized accounts. Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in multi-contract systems. There are two main uses for it: - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers unique. The contract's own address is a good option. - if the contract belongs to a family that shares action identifiers for the same functions, an identifier shared by the entire family (and no other contract) should be used instead.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Building block for performing access control on external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":\"Authentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"CastingHelpers":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220e9081fce80f38c059235d9524780acd21311a200d48125c1469c6ff45999e06d64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 ADDMOD 0x1F 0xCE DUP1 RETURN DUP13 SDIV SWAP3 CALLDATALOAD 0xD9 MSTORE SELFBALANCE DUP1 0xAC 0xD2 SGT GT LOG2 STOP 0xD4 DUP2 0x25 0xC1 CHAINID SWAP13 PUSH16 0xF45999E06D64736F6C634300081B0033 ","sourceMap":"217:637:33:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220e9081fce80f38c059235d9524780acd21311a200d48125c1469c6ff45999e06d64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 ADDMOD 0x1F 0xCE DUP1 RETURN DUP13 SDIV SWAP3 CALLDATALOAD 0xD9 MSTORE SELFBALANCE DUP1 0xAC 0xD2 SGT GT LOG2 STOP 0xD4 DUP2 0x25 0xC1 CHAINID SWAP13 PUSH16 0xF45999E06D64736F6C634300081B0033 ","sourceMap":"217:637:33:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library of helper functions related to typecasting arrays.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":\"CastingHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"InputHelpers":{"abi":[{"inputs":[],"name":"AllZeroInputs","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"MultipleNonZeroInputs","type":"error"},{"inputs":[],"name":"TokensNotSorted","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220c06cd98b5468c19b7a0b0585eb53f652e511f5829c7f8ba0d9bf6ae0c0f10d4664736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 PUSH13 0xD98B5468C19B7A0B0585EB53F6 MSTORE 0xE5 GT CREATE2 DUP3 SWAP13 PUSH32 0x8BA0D9BF6AE0C0F10D4664736F6C634300081B00330000000000000000000000 ","sourceMap":"202:4350:34:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220c06cd98b5468c19b7a0b0585eb53f652e511f5829c7f8ba0d9bf6ae0c0f10d4664736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 PUSH13 0xD98B5468C19B7A0B0585EB53F6 MSTORE 0xE5 GT CREATE2 DUP3 SWAP13 PUSH32 0x8BA0D9BF6AE0C0F10D4664736F6C634300081B00330000000000000000000000 ","sourceMap":"202:4350:34:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AllZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MultipleNonZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokensNotSorted\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have one non-zero value, corresponding to the token being added or removed. This error results if all entries are zero.\"}],\"MultipleNonZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value, corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\"}],\"TokensNotSorted()\":[{\"details\":\"Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"notice\":\"No valid input was given for a single token operation.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"MultipleNonZeroInputs()\":[{\"notice\":\"More than one non-zero value was given for a single token operation.\"}],\"TokensNotSorted()\":[{\"notice\":\"The tokens supplied to an array argument were not sorted in numerical order.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":\"InputHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol":{"PackedTokenBalance":{"abi":[{"inputs":[],"name":"BalanceOverflow","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220265998fb316c28ac65c9ec2c43c675f998fe014909885d4b69f27704422da06f64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x26 MSIZE SWAP9 0xFB BALANCE PUSH13 0x28AC65C9EC2C43C675F998FE01 BLOBHASH MULMOD DUP9 TSTORE 0x4B PUSH10 0xF27704422DA06F64736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"982:2131:35:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220265998fb316c28ac65c9ec2c43c675f998fe014909885d4b69f27704422da06f64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x26 MSIZE SWAP9 0xFB BALANCE PUSH13 0x28AC65C9EC2C43C675F998FE01 BLOBHASH MULMOD DUP9 TSTORE 0x4B PUSH10 0xF27704422DA06F64736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"982:2131:35:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BalanceOverflow\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"We could use a Solidity struct to pack balance values together in a single storage slot, but unfortunately Solidity only allows for structs to live in either storage, calldata or memory. Because a memory struct still takes up a slot in the stack (to store its memory location), and because the entire balance fits in a single stack slot (two 128 bit values), using memory is strictly less gas performant. Therefore, we do manual packing and unpacking. We could also use custom types now, but given the simplicity here, and the existing EnumerableMap type, it seemed easier to leave it as a bytes32.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"BalanceOverflow()\":[{\"notice\":\"One of the balances is above the maximum value that can be stored.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"This library represents a data structure for packing a token's current raw and derived balances. A derived balance can be the \\\"last\\\" live balance scaled18 of the raw token, or the balance of the wrapped version of the token in a vault buffer, among others.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":\"PackedTokenBalance\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol":{"RevertCodec":{"abi":[{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212208683019c0f17e585a20b0fc05084b8273a26fbb5ee6a380f717073becaabfbfa64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP7 DUP4 ADD SWAP13 0xF OR 0xE5 DUP6 LOG2 SIGNEXTEND 0xF 0xC0 POP DUP5 0xB8 0x27 GASPRICE 0x26 0xFB 0xB5 0xEE PUSH11 0x380F717073BECAABFBFA64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"231:2016:36:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212208683019c0f17e585a20b0fc05084b8273a26fbb5ee6a380f717073becaabfbfa64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP7 DUP4 ADD SWAP13 0xF OR 0xE5 DUP6 LOG2 SIGNEXTEND 0xF 0xC0 POP DUP5 0xB8 0x27 GASPRICE 0x26 0xFB 0xB5 0xEE PUSH11 0x380F717073BECAABFBFA64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"231:2016:36:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Support `quoteAndRevert`: a v2-style query which always reverts, and returns the result in the return data.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":\"RevertCodec\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol":{"Version":{"abi":[{"inputs":[{"internalType":"string","name":"version_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"allocate_memory":{"entryPoint":463,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6080604052346101cb5761041880380380610019816101cf565b928339810190602080828403126101cb5781516001600160401b03928382116101cb570192601f908082860112156101cb5784518481116101b757601f1995610067828501881686016101cf565b928284528583830101116101cb57815f92868093018386015e8301015280519384116101b7575f54926001938481811c911680156101ad575b8282101461019957838111610156575b50809285116001146100f65750839450908392915f946100eb575b50501b915f199060031b1c1916175f555b60405161022390816101f58239f35b015192505f806100cb565b9294849081165f8052845f20945f905b8883831061013c5750505010610124575b505050811b015f556100dc565b01515f1960f88460031b161c191690555f8080610117565b858701518855909601959485019487935090810190610106565b5f8052815f208480880160051c820192848910610190575b0160051c019085905b8281106101855750506100b0565b5f8155018590610177565b9250819261016e565b634e487b7160e01b5f52602260045260245ffd5b90607f16906100a0565b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176101b75760405256fe6080600436101561000e575f80fd5b5f3560e01c6354fd4d5014610021575f80fd5b346101e9575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e9575f5f546001908060011c92600182169384156101e1575b60209384821086146101b4578187528487019587948690821561017b575050600114610124575b505003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090811684019367ffffffffffffffff8511818610176100f7576040938593601f9285875281865251918280928701528686015e5f85828601015201168101030190f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80805285935091907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b828410610163575050508201015f8061008d565b8054848a01860152889550869490930192810161014f565b915093507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168552151560051b8201015f8061008d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b607f16610066565b5f80fdfea26469706673582212208f8983b58d785cd472d19f393d5480e584109f683297852db2ac88152dfc995864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x1CB JUMPI PUSH2 0x418 DUP1 CODESIZE SUB DUP1 PUSH2 0x19 DUP2 PUSH2 0x1CF JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD SWAP1 PUSH1 0x20 DUP1 DUP3 DUP5 SUB SLT PUSH2 0x1CB JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 DUP4 DUP3 GT PUSH2 0x1CB JUMPI ADD SWAP3 PUSH1 0x1F SWAP1 DUP1 DUP3 DUP7 ADD SLT ISZERO PUSH2 0x1CB JUMPI DUP5 MLOAD DUP5 DUP2 GT PUSH2 0x1B7 JUMPI PUSH1 0x1F NOT SWAP6 PUSH2 0x67 DUP3 DUP6 ADD DUP9 AND DUP7 ADD PUSH2 0x1CF JUMP JUMPDEST SWAP3 DUP3 DUP5 MSTORE DUP6 DUP4 DUP4 ADD ADD GT PUSH2 0x1CB JUMPI DUP2 PUSH0 SWAP3 DUP7 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x1B7 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x1AD JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x199 JUMPI DUP4 DUP2 GT PUSH2 0x156 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0xF6 JUMPI POP DUP4 SWAP5 POP SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP5 PUSH2 0xEB JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x223 SWAP1 DUP2 PUSH2 0x1F5 DUP3 CODECOPY RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0xCB JUMP JUMPDEST SWAP3 SWAP5 DUP5 SWAP1 DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x13C JUMPI POP POP POP LT PUSH2 0x124 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0xDC JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x117 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x106 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x190 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP6 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x185 JUMPI POP POP PUSH2 0xB0 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x177 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x16E JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xA0 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x1B7 JUMPI PUSH1 0x40 MSTORE JUMP INVALID PUSH1 0x80 PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0xE JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x54FD4D50 EQ PUSH2 0x21 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1E9 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1E9 JUMPI PUSH0 PUSH0 SLOAD PUSH1 0x1 SWAP1 DUP1 PUSH1 0x1 SHR SWAP3 PUSH1 0x1 DUP3 AND SWAP4 DUP5 ISZERO PUSH2 0x1E1 JUMPI JUMPDEST PUSH1 0x20 SWAP4 DUP5 DUP3 LT DUP7 EQ PUSH2 0x1B4 JUMPI DUP2 DUP8 MSTORE DUP5 DUP8 ADD SWAP6 DUP8 SWAP5 DUP7 SWAP1 DUP3 ISZERO PUSH2 0x17B JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x124 JUMPI JUMPDEST POP POP SUB PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND DUP5 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT DUP2 DUP7 LT OR PUSH2 0xF7 JUMPI PUSH1 0x40 SWAP4 DUP6 SWAP4 PUSH1 0x1F SWAP3 DUP6 DUP8 MSTORE DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP4 POP SWAP2 SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x163 JUMPI POP POP POP DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP7 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x14F JUMP JUMPDEST SWAP2 POP SWAP4 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP6 MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x7F AND PUSH2 0x66 JUMP JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 DUP10 DUP4 0xB5 DUP14 PUSH25 0x5CD472D19F393D5480E584109F683297852DB2AC88152DFC99 PC PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"666:520:37:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;666:520:37;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;666:520:37;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;-1:-1:-1;666:520:37;;;-1:-1:-1;666:520:37;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;-1:-1:-1;666:520:37;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;-1:-1:-1;666:520:37;;-1:-1:-1;666:520:37;;;;;;;;;-1:-1:-1;;666:520:37;;;-1:-1:-1;;;;;666:520:37;;;;;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080600436101561000e575f80fd5b5f3560e01c6354fd4d5014610021575f80fd5b346101e9575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e9575f5f546001908060011c92600182169384156101e1575b60209384821086146101b4578187528487019587948690821561017b575050600114610124575b505003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090811684019367ffffffffffffffff8511818610176100f7576040938593601f9285875281865251918280928701528686015e5f85828601015201168101030190f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80805285935091907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b828410610163575050508201015f8061008d565b8054848a01860152889550869490930192810161014f565b915093507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168552151560051b8201015f8061008d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b607f16610066565b5f80fdfea26469706673582212208f8983b58d785cd472d19f393d5480e584109f683297852db2ac88152dfc995864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0xE JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x54FD4D50 EQ PUSH2 0x21 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1E9 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1E9 JUMPI PUSH0 PUSH0 SLOAD PUSH1 0x1 SWAP1 DUP1 PUSH1 0x1 SHR SWAP3 PUSH1 0x1 DUP3 AND SWAP4 DUP5 ISZERO PUSH2 0x1E1 JUMPI JUMPDEST PUSH1 0x20 SWAP4 DUP5 DUP3 LT DUP7 EQ PUSH2 0x1B4 JUMPI DUP2 DUP8 MSTORE DUP5 DUP8 ADD SWAP6 DUP8 SWAP5 DUP7 SWAP1 DUP3 ISZERO PUSH2 0x17B JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x124 JUMPI JUMPDEST POP POP SUB PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND DUP5 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT DUP2 DUP7 LT OR PUSH2 0xF7 JUMPI PUSH1 0x40 SWAP4 DUP6 SWAP4 PUSH1 0x1F SWAP3 DUP6 DUP8 MSTORE DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP4 POP SWAP2 SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x163 JUMPI POP POP POP DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP7 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x14F JUMP JUMPDEST SWAP2 POP SWAP4 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP6 MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x7F AND PUSH2 0x66 JUMP JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 DUP10 DUP4 0xB5 DUP14 PUSH25 0x5CD472D19F393D5480E584109F683297852DB2AC88152DFC99 PC PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"666:520:37:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;666:520:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"methodIdentifiers":{"version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"version_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The version is set at deployment time and cannot be changed. It would be immutable, but immutable strings are not yet supported. Contracts like factories and pools should have versions. These typically take the form of JSON strings containing detailed information about the deployment. For instance: `{name: 'ChildChainGaugeFactory', version: 2, deployment: '20230316-child-chain-gauge-factory-v2'}`\",\"kind\":\"dev\",\"methods\":{\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"Retrieves a contract's version from storage.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":\"Version\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"FixedPoint":{"abi":[{"inputs":[],"name":"ZeroDivision","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220e9cc622b7f35aaf8f3efa30ad767c4a02aedd5ccde9b7738c8491078c2823d0164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xCC PUSH3 0x2B7F35 0xAA 0xF8 RETURN 0xEF LOG3 EXP 0xD7 PUSH8 0xC4A02AEDD5CCDE9B PUSH24 0x38C8491078C2823D0164736F6C634300081B003300000000 ","sourceMap":"239:5688:38:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220e9cc622b7f35aaf8f3efa30ad767c4a02aedd5ccde9b7738c8491078c2823d0164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xCC PUSH3 0x2B7F35 0xAA 0xF8 RETURN 0xEF LOG3 EXP 0xD7 PUSH8 0xC4A02AEDD5CCDE9B PUSH24 0x38C8491078C2823D0164736F6C634300081B003300000000 ","sourceMap":"239:5688:38:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":\"FixedPoint\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"LogExpMath":{"abi":[{"inputs":[],"name":"BaseOutOfBounds","type":"error"},{"inputs":[],"name":"ExponentOutOfBounds","type":"error"},{"inputs":[],"name":"InvalidExponent","type":"error"},{"inputs":[],"name":"OutOfBounds","type":"error"},{"inputs":[],"name":"ProductOutOfBounds","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220f7e8e3ef4405ba858296891409b167de675961dcc03dc03125ef5eed9c9eb29264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xE8 0xE3 0xEF PREVRANDAO SDIV 0xBA DUP6 DUP3 SWAP7 DUP10 EQ MULMOD 0xB1 PUSH8 0xDE675961DCC03DC0 BALANCE 0x25 0xEF MCOPY 0xED SWAP13 SWAP15 0xB2 SWAP3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"595:21889:39:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220f7e8e3ef4405ba858296891409b167de675961dcc03dc03125ef5eed9c9eb29264736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xE8 0xE3 0xEF PREVRANDAO SDIV 0xBA DUP6 DUP3 SWAP7 DUP10 EQ MULMOD 0xB1 PUSH8 0xDE675961DCC03DC0 BALANCE 0x25 0xEF MCOPY 0xED SWAP13 SWAP15 0xB2 SWAP3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"595:21889:39:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BaseOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExponentOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExponent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProductOutOfBounds\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Fernando Martinelli - @fernandomartinelliSergio Yuhjtman - @sergioyuhjtmanDaniel Fernandez - @dmf7z\",\"details\":\"Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument). Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural exponentiation and logarithm (where the base is Euler's number). All math operations are unchecked in order to save gas.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"BaseOutOfBounds()\":[{\"notice\":\"This error is thrown when a base is not within an acceptable range.\"}],\"ExponentOutOfBounds()\":[{\"notice\":\"This error is thrown when a exponent is not within an acceptable range.\"}],\"InvalidExponent()\":[{\"notice\":\"This error is thrown when an exponent used in the exp function is not within an acceptable range.\"}],\"OutOfBounds()\":[{\"notice\":\"This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\"}],\"ProductOutOfBounds()\":[{\"notice\":\"This error is thrown when the exponent * ln(base) is not within an acceptable range.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":\"LogExpMath\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol":{"EnumerableSet":{"abi":[{"inputs":[],"name":"ElementNotFound","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212200aac404458ad1711bfb2281203a6d085e847bce016f980c2f3cf043c51d8ae8664736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXP 0xAC BLOCKHASH PREVRANDAO PC 0xAD OR GT 0xBF 0xB2 0x28 SLT SUB 0xA6 0xD0 DUP6 0xE8 SELFBALANCE 0xBC 0xE0 AND 0xF9 DUP1 0xC2 RETURN 0xCF DIV EXTCODECOPY MLOAD 0xD8 0xAE DUP7 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1016:5342:40:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212200aac404458ad1711bfb2281203a6d085e847bce016f980c2f3cf043c51d8ae8664736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXP 0xAC BLOCKHASH PREVRANDAO PC 0xAD OR GT 0xBF 0xB2 0x28 SLT SUB 0xA6 0xD0 DUP6 0xE8 SELFBALANCE 0xBC 0xE0 AND 0xF9 DUP1 0xC2 RETURN 0xCF DIV EXTCODECOPY MLOAD 0xD8 0xAE DUP7 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1016:5342:40:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ElementNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"See https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types. Based on the EnumerableSet library from OpenZeppelin Contracts, altered to remove the base private functions that work on bytes32, replacing them with a native implementation for address values, to reduce bytecode size and runtime costs. The `unchecked_at` function was also added, which allows for more gas efficient data reads in some scenarios. Sets have the following properties: - Elements are added, removed, and checked for existence in constant time (O(1)). - Elements are enumerated in O(n). No guarantees are made on the ordering. ``` contract Example { // Add the library methods using EnumerableSet for EnumerableSet.AddressSet; // Declare a set state variable EnumerableSet.AddressSet private mySet; } ```\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ElementNotFound()\":[{\"notice\":\"An element that is not present in the set.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for managing sets of primitive types.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\":\"EnumerableSet\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\":{\"keccak256\":\"0xa981b2a584a81920bc4bd25570ce31f83890bdd41174e11d230e9da179a29468\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5908435bef8ce18bed32900d668530bade6d9207059cbc3ad2460c5e41eba532\",\"dweb:/ipfs/QmZZePBFw5vkoZZNKt9q5PBCFNuGS9LJABAMjAaG6kg6u8\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ReentrancyGuardTransient":{"abi":[{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"NOTE: This variant only works on networks where EIP-1153 is available.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Variant of {ReentrancyGuard} that uses transient storage.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":\"ReentrancyGuardTransient\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"StorageSlotExtension":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212207d1ece238b2a90fbead6c43dfa8046238cc35e0b4dec12d000c4f2cebfef20e164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x1ECE238B2A90FBEAD6C43DFA8046238CC35E0B4DEC12D000C4F2CEBFEF20 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"278:4371:42:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212207d1ece238b2a90fbead6c43dfa8046238cc35e0b4dec12d000c4f2cebfef20e164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x1ECE238B2A90FBEAD6C43DFA8046238CC35E0B4DEC12D000C4F2CEBFEF20 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"278:4371:42:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"TIP: Consider using this library along with {SlotDerivation}.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":\"StorageSlotExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol":{"ERC20TestToken":{"abi":[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"ZeroTransfer","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_string_fromMemory":{"entryPoint":795,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":758,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"60a0604052346102f257610d7d80380380610019816102f6565b92833981016060828203126102f25781516001600160401b03908181116102f2578261004691850161031b565b90602092838501518281116102f25760409161006391870161031b565b9401519360ff851685036102f2578251828111610209576003918254916001958684811c941680156102e8575b888510146102d4578190601f94858111610286575b508890858311600114610228575f9261021d575b50505f1982861b1c191690861b1783555b80519384116102095760049586548681811c911680156101ff575b828210146101ec578381116101a9575b508092851160011461014457509383949184925f95610139575b50501b925f19911b1c19161790555b608052604051610a10908161036d8239608051816104ff0152f35b015193505f8061010f565b92919084601f198116885f52855f20955f905b8983831061018f5750505010610176575b50505050811b01905561011e565b01519060f8845f19921b161c191690555f808080610168565b858701518955909701969485019488935090810190610157565b875f52815f208480880160051c8201928489106101e3575b0160051c019087905b8281106101d85750506100f5565b5f81550187906101ca565b925081926101c1565b602288634e487b7160e01b5f525260245ffd5b90607f16906100e5565b634e487b7160e01b5f52604160045260245ffd5b015190505f806100b9565b90889350601f19831691875f528a5f20925f5b8c8282106102705750508411610259575b505050811b0183556100ca565b01515f1983881b60f8161c191690555f808061024c565b8385015186558c9790950194938401930161023b565b909150855f52885f208580850160051c8201928b86106102cb575b918a91869594930160051c01915b8281106102bd5750506100a5565b5f81558594508a91016102af565b925081926102a1565b634e487b7160e01b5f52602260045260245ffd5b93607f1693610090565b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761020957604052565b81601f820112156102f2578051906001600160401b0382116102095761034a601f8301601f19166020016102f6565b92828452602083830101116102f257815f9260208093018386015e830101529056fe6080604090808252600480361015610015575f80fd5b5f3560e01c91826306fdde031461077557508163095ea7b31461069657816318160ddd1461067857816323b872dd14610523578163313ce567146104e657816340c10f191461040557816370a08231146103c257816395d89b41146102415781639dc29fac14610151578163a9059cbb146100f3575063dd62ed3e14610099575f80fd5b346100ef57806003193601126100ef576020906100b4610888565b6100bc6108ab565b9073ffffffffffffffffffffffffffffffffffffffff8091165f5260018452825f2091165f528252805f20549051908152f35b5f80fd5b82346100ef57806003193601126100ef5761010c610888565b60243592831561012b575060209261012491336108ce565b5160018152f35b7f10cadee3000000000000000000000000000000000000000000000000000000005f525ffd5b9050346100ef57816003193601126100ef5761016b610888565b9173ffffffffffffffffffffffffffffffffffffffff602435931691821561021657825f525f602052815f2054908482106101e35750837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef925f956020938688528785520381872055816002540360025551908152a3005b909291507fe450d38c000000000000000000000000000000000000000000000000000000005f525260245260445260645ffd5b5f907f96c6fd1e0000000000000000000000000000000000000000000000000000000082525260245ffd5b9050346100ef575f6003193601126100ef5781515f928254936001948060011c600182169687156103b8575b602092838310891461038c57869798838897985290815f1461034f57506001146102f2575b50505003601f01601f191682019267ffffffffffffffff8411838510176102c657508291826102c292528261085e565b0390f35b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5f888152929493507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8284106103395750505090601f1992601f92820101918193610292565b805488850187015287945092850192810161031c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016848701525050151560051b830101905081601f601f19610292565b6022887f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b90607f169061026d565b82346100ef5760206003193601126100ef5760209073ffffffffffffffffffffffffffffffffffffffff6103f4610888565b165f525f8252805f20549051908152f35b82346100ef57806003193601126100ef5761041e610888565b9073ffffffffffffffffffffffffffffffffffffffff60243592169283156104bb576002549083820180921161048f57505f927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9260209260025585855284835280852082815401905551908152a3005b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5f907fec442f050000000000000000000000000000000000000000000000000000000082525260245ffd5b82346100ef575f6003193601126100ef576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b82346100ef5760606003193601126100ef5761053d610888565b6105456108ab565b9060443593841561012b5773ffffffffffffffffffffffffffffffffffffffff8216805f526001602052845f20335f52602052845f2054917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83106105b3575b6020866101248988886108ce565b8683106106445781156106195733156105ee575091856101249492602097945f5260018852865f20335f52885203855f2055919481936105a5565b5f907f94280d620000000000000000000000000000000000000000000000000000000082525260245ffd5b5f907fe602df050000000000000000000000000000000000000000000000000000000082525260245ffd5b8287917ffb8f41b2000000000000000000000000000000000000000000000000000000005f5233905260245260445260645ffd5b82346100ef575f6003193601126100ef576020906002549051908152f35b82346100ef57806003193601126100ef576106af610888565b60243590331561074a5773ffffffffffffffffffffffffffffffffffffffff1690811561071f5760209350335f5260018452825f20825f52845280835f205582519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925843392a35160018152f35b5f847f94280d620000000000000000000000000000000000000000000000000000000082525260245ffd5b5f847fe602df050000000000000000000000000000000000000000000000000000000082525260245ffd5b909150346100ef575f6003193601126100ef575f92600354936001948060011c60018216968715610854575b602092838310891461038c57869798838897985290815f1461034f57506001146107f55750505003601f01601f191682019267ffffffffffffffff8411838510176102c657508291826102c292528261085e565b60035f908152929493507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b82841061083e5750505090601f1992601f92820101918193610292565b8054888501870152879450928501928101610821565b90607f16906107a1565b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b73ffffffffffffffffffffffffffffffffffffffff8091169182156109ae571691821561098257815f525f60205260405f205481811061095057817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f5260405f20818154019055604051908152a3565b827fe450d38c000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffdfea2646970667358221220d611776b0f7247c5a2ec86a2487d61ab1ee6f4add9f4210fafcda4f60fdaf6b464736f6c634300081b0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x2F2 JUMPI PUSH2 0xD7D DUP1 CODESIZE SUB DUP1 PUSH2 0x19 DUP2 PUSH2 0x2F6 JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD PUSH1 0x60 DUP3 DUP3 SUB SLT PUSH2 0x2F2 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 DUP2 GT PUSH2 0x2F2 JUMPI DUP3 PUSH2 0x46 SWAP2 DUP6 ADD PUSH2 0x31B JUMP JUMPDEST SWAP1 PUSH1 0x20 SWAP3 DUP4 DUP6 ADD MLOAD DUP3 DUP2 GT PUSH2 0x2F2 JUMPI PUSH1 0x40 SWAP2 PUSH2 0x63 SWAP2 DUP8 ADD PUSH2 0x31B JUMP JUMPDEST SWAP5 ADD MLOAD SWAP4 PUSH1 0xFF DUP6 AND DUP6 SUB PUSH2 0x2F2 JUMPI DUP3 MLOAD DUP3 DUP2 GT PUSH2 0x209 JUMPI PUSH1 0x3 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x1 SWAP6 DUP7 DUP5 DUP2 SHR SWAP5 AND DUP1 ISZERO PUSH2 0x2E8 JUMPI JUMPDEST DUP9 DUP6 LT EQ PUSH2 0x2D4 JUMPI DUP2 SWAP1 PUSH1 0x1F SWAP5 DUP6 DUP2 GT PUSH2 0x286 JUMPI JUMPDEST POP DUP9 SWAP1 DUP6 DUP4 GT PUSH1 0x1 EQ PUSH2 0x228 JUMPI PUSH0 SWAP3 PUSH2 0x21D JUMPI JUMPDEST POP POP PUSH0 NOT DUP3 DUP7 SHL SHR NOT AND SWAP1 DUP7 SHL OR DUP4 SSTORE JUMPDEST DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x209 JUMPI PUSH1 0x4 SWAP6 DUP7 SLOAD DUP7 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x1FF JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x1EC JUMPI DUP4 DUP2 GT PUSH2 0x1A9 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x144 JUMPI POP SWAP4 DUP4 SWAP5 SWAP2 DUP5 SWAP3 PUSH0 SWAP6 PUSH2 0x139 JUMPI JUMPDEST POP POP SHL SWAP3 PUSH0 NOT SWAP2 SHL SHR NOT AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x80 MSTORE PUSH1 0x40 MLOAD PUSH2 0xA10 SWAP1 DUP2 PUSH2 0x36D DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x4FF ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP4 POP PUSH0 DUP1 PUSH2 0x10F JUMP JUMPDEST SWAP3 SWAP2 SWAP1 DUP5 PUSH1 0x1F NOT DUP2 AND DUP9 PUSH0 MSTORE DUP6 PUSH0 KECCAK256 SWAP6 PUSH0 SWAP1 JUMPDEST DUP10 DUP4 DUP4 LT PUSH2 0x18F JUMPI POP POP POP LT PUSH2 0x176 JUMPI JUMPDEST POP POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH2 0x11E JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xF8 DUP5 PUSH0 NOT SWAP3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 DUP1 PUSH2 0x168 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP10 SSTORE SWAP1 SWAP8 ADD SWAP7 SWAP5 DUP6 ADD SWAP5 DUP9 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x157 JUMP JUMPDEST DUP8 PUSH0 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x1E3 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP8 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x1D8 JUMPI POP POP PUSH2 0xF5 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP8 SWAP1 PUSH2 0x1CA JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x1C1 JUMP JUMPDEST PUSH1 0x22 DUP9 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xE5 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0xB9 JUMP JUMPDEST SWAP1 DUP9 SWAP4 POP PUSH1 0x1F NOT DUP4 AND SWAP2 DUP8 PUSH0 MSTORE DUP11 PUSH0 KECCAK256 SWAP3 PUSH0 JUMPDEST DUP13 DUP3 DUP3 LT PUSH2 0x270 JUMPI POP POP DUP5 GT PUSH2 0x259 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP4 SSTORE PUSH2 0xCA JUMP JUMPDEST ADD MLOAD PUSH0 NOT DUP4 DUP9 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x24C JUMP JUMPDEST DUP4 DUP6 ADD MLOAD DUP7 SSTORE DUP13 SWAP8 SWAP1 SWAP6 ADD SWAP5 SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0x23B JUMP JUMPDEST SWAP1 SWAP2 POP DUP6 PUSH0 MSTORE DUP9 PUSH0 KECCAK256 DUP6 DUP1 DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP12 DUP7 LT PUSH2 0x2CB JUMPI JUMPDEST SWAP2 DUP11 SWAP2 DUP7 SWAP6 SWAP5 SWAP4 ADD PUSH1 0x5 SHR ADD SWAP2 JUMPDEST DUP3 DUP2 LT PUSH2 0x2BD JUMPI POP POP PUSH2 0xA5 JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP DUP11 SWAP2 ADD PUSH2 0x2AF JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x2A1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP4 PUSH1 0x7F AND SWAP4 PUSH2 0x90 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x209 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x2F2 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x209 JUMPI PUSH2 0x34A PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x2F6 JUMP JUMPDEST SWAP3 DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x2F2 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x6FDDE03 EQ PUSH2 0x775 JUMPI POP DUP2 PUSH4 0x95EA7B3 EQ PUSH2 0x696 JUMPI DUP2 PUSH4 0x18160DDD EQ PUSH2 0x678 JUMPI DUP2 PUSH4 0x23B872DD EQ PUSH2 0x523 JUMPI DUP2 PUSH4 0x313CE567 EQ PUSH2 0x4E6 JUMPI DUP2 PUSH4 0x40C10F19 EQ PUSH2 0x405 JUMPI DUP2 PUSH4 0x70A08231 EQ PUSH2 0x3C2 JUMPI DUP2 PUSH4 0x95D89B41 EQ PUSH2 0x241 JUMPI DUP2 PUSH4 0x9DC29FAC EQ PUSH2 0x151 JUMPI DUP2 PUSH4 0xA9059CBB EQ PUSH2 0xF3 JUMPI POP PUSH4 0xDD62ED3E EQ PUSH2 0x99 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH2 0xB4 PUSH2 0x888 JUMP JUMPDEST PUSH2 0xBC PUSH2 0x8AB JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x10C PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP3 DUP4 ISZERO PUSH2 0x12B JUMPI POP PUSH1 0x20 SWAP3 PUSH2 0x124 SWAP2 CALLER PUSH2 0x8CE JUMP JUMPDEST MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0x10CADEE300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xEF JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x16B PUSH2 0x888 JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD SWAP4 AND SWAP2 DUP3 ISZERO PUSH2 0x216 JUMPI DUP3 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SLOAD SWAP1 DUP5 DUP3 LT PUSH2 0x1E3 JUMPI POP DUP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH0 SWAP6 PUSH1 0x20 SWAP4 DUP7 DUP9 MSTORE DUP8 DUP6 MSTORE SUB DUP2 DUP8 KECCAK256 SSTORE DUP2 PUSH1 0x2 SLOAD SUB PUSH1 0x2 SSTORE MLOAD SWAP1 DUP2 MSTORE LOG3 STOP JUMPDEST SWAP1 SWAP3 SWAP2 POP PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI DUP2 MLOAD PUSH0 SWAP3 DUP3 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP1 PUSH1 0x1 SHR PUSH1 0x1 DUP3 AND SWAP7 DUP8 ISZERO PUSH2 0x3B8 JUMPI JUMPDEST PUSH1 0x20 SWAP3 DUP4 DUP4 LT DUP10 EQ PUSH2 0x38C JUMPI DUP7 SWAP8 SWAP9 DUP4 DUP9 SWAP8 SWAP9 MSTORE SWAP1 DUP2 PUSH0 EQ PUSH2 0x34F JUMPI POP PUSH1 0x1 EQ PUSH2 0x2F2 JUMPI JUMPDEST POP POP POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT DUP4 DUP6 LT OR PUSH2 0x2C6 JUMPI POP DUP3 SWAP2 DUP3 PUSH2 0x2C2 SWAP3 MSTORE DUP3 PUSH2 0x85E JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP9 DUP2 MSTORE SWAP3 SWAP5 SWAP4 POP PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x339 JUMPI POP POP POP SWAP1 PUSH1 0x1F NOT SWAP3 PUSH1 0x1F SWAP3 DUP3 ADD ADD SWAP2 DUP2 SWAP4 PUSH2 0x292 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP8 ADD MSTORE DUP8 SWAP5 POP SWAP3 DUP6 ADD SWAP3 DUP2 ADD PUSH2 0x31C JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP5 DUP8 ADD MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP2 PUSH1 0x1F PUSH1 0x1F NOT PUSH2 0x292 JUMP JUMPDEST PUSH1 0x22 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x26D JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3F4 PUSH2 0x888 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x41E PUSH2 0x888 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD SWAP3 AND SWAP3 DUP4 ISZERO PUSH2 0x4BB JUMPI PUSH1 0x2 SLOAD SWAP1 DUP4 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x48F JUMPI POP PUSH0 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH1 0x20 SWAP3 PUSH1 0x2 SSTORE DUP6 DUP6 MSTORE DUP5 DUP4 MSTORE DUP1 DUP6 KECCAK256 DUP3 DUP2 SLOAD ADD SWAP1 SSTORE MLOAD SWAP1 DUP2 MSTORE LOG3 STOP JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x53D PUSH2 0x888 JUMP JUMPDEST PUSH2 0x545 PUSH2 0x8AB JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP4 DUP5 ISZERO PUSH2 0x12B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 SLOAD SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 LT PUSH2 0x5B3 JUMPI JUMPDEST PUSH1 0x20 DUP7 PUSH2 0x124 DUP10 DUP9 DUP9 PUSH2 0x8CE JUMP JUMPDEST DUP7 DUP4 LT PUSH2 0x644 JUMPI DUP2 ISZERO PUSH2 0x619 JUMPI CALLER ISZERO PUSH2 0x5EE JUMPI POP SWAP2 DUP6 PUSH2 0x124 SWAP5 SWAP3 PUSH1 0x20 SWAP8 SWAP5 PUSH0 MSTORE PUSH1 0x1 DUP9 MSTORE DUP7 PUSH0 KECCAK256 CALLER PUSH0 MSTORE DUP9 MSTORE SUB DUP6 PUSH0 KECCAK256 SSTORE SWAP2 SWAP5 DUP2 SWAP4 PUSH2 0x5A5 JUMP JUMPDEST PUSH0 SWAP1 PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP8 SWAP2 PUSH32 0xFB8F41B200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x6AF PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 CALLER ISZERO PUSH2 0x74A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 ISZERO PUSH2 0x71F JUMPI PUSH1 0x20 SWAP4 POP CALLER PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP3 PUSH0 KECCAK256 DUP3 PUSH0 MSTORE DUP5 MSTORE DUP1 DUP4 PUSH0 KECCAK256 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP5 CALLER SWAP3 LOG3 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP5 PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP5 PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH0 SWAP3 PUSH1 0x3 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP1 PUSH1 0x1 SHR PUSH1 0x1 DUP3 AND SWAP7 DUP8 ISZERO PUSH2 0x854 JUMPI JUMPDEST PUSH1 0x20 SWAP3 DUP4 DUP4 LT DUP10 EQ PUSH2 0x38C JUMPI DUP7 SWAP8 SWAP9 DUP4 DUP9 SWAP8 SWAP9 MSTORE SWAP1 DUP2 PUSH0 EQ PUSH2 0x34F JUMPI POP PUSH1 0x1 EQ PUSH2 0x7F5 JUMPI POP POP POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT DUP4 DUP6 LT OR PUSH2 0x2C6 JUMPI POP DUP3 SWAP2 DUP3 PUSH2 0x2C2 SWAP3 MSTORE DUP3 PUSH2 0x85E JUMP JUMPDEST PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE SWAP3 SWAP5 SWAP4 POP PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B JUMPDEST DUP3 DUP5 LT PUSH2 0x83E JUMPI POP POP POP SWAP1 PUSH1 0x1F NOT SWAP3 PUSH1 0x1F SWAP3 DUP3 ADD ADD SWAP2 DUP2 SWAP4 PUSH2 0x292 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP8 ADD MSTORE DUP8 SWAP5 POP SWAP3 DUP6 ADD SWAP3 DUP2 ADD PUSH2 0x821 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x7A1 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 PUSH1 0x40 SWAP5 DUP2 DUP6 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP3 DUP9 ADD MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xEF JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xEF JUMPI JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP2 DUP3 ISZERO PUSH2 0x9AE JUMPI AND SWAP2 DUP3 ISZERO PUSH2 0x982 JUMPI DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 DUP2 LT PUSH2 0x950 JUMPI DUP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH1 0x20 SWAP3 DUP6 PUSH0 MSTORE PUSH0 DUP5 MSTORE SUB PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP5 PUSH0 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 DUP2 SLOAD ADD SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG3 JUMP JUMPDEST DUP3 PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD6 GT PUSH24 0x6B0F7247C5A2EC86A2487D61AB1EE6F4ADD9F4210FAFCDA4 0xF6 0xF 0xDA 0xF6 0xB4 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"144:1033:43:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;144:1033:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1648:13:56;144:1033:43;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:43;;;;;;;;;;;;;;;-1:-1:-1;144:1033:43;;;;;;;;;;-1:-1:-1;144:1033:43;;;;-1:-1:-1;;;;144:1033:43;;;;;;;;;;;;;;;;;;;;1671:17:56;144:1033:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:43;;;;;;;;;;;;;;;;;;;413:21;;144:1033;;;;;;;;413:21;144:1033;;;;;;;;;;-1:-1:-1;144:1033:43;;;;;;;;;;;;;;-1:-1:-1;144:1033:43;;-1:-1:-1;144:1033:43;;-1:-1:-1;144:1033:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:43;;;;;;;;-1:-1:-1;144:1033:43;;-1:-1:-1;144:1033:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:43;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:43;;;-1:-1:-1;144:1033:43;;;;;;;;;;;;-1:-1:-1;144:1033:43;;1671:17:56;144:1033:43;;-1:-1:-1;144:1033:43;;;;;-1:-1:-1;144:1033:43;;;;;;;;;;;;;;;-1:-1:-1;144:1033:43;;-1:-1:-1;144:1033:43;;-1:-1:-1;144:1033:43;;;;;;;;;;-1:-1:-1;144:1033:43;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:43;;-1:-1:-1;144:1033:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:43;;;;-1:-1:-1;144:1033:43;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:43;;;;;-1:-1:-1;144:1033:43;;;;;;;;;-1:-1:-1;144:1033:43;;;;;;;;;-1:-1:-1;;144:1033:43;;;-1:-1:-1;;;;;144:1033:43;;;;;;;;;;:::o;:::-;;;;;;;;;;;;-1:-1:-1;;;;;144:1033:43;;;;;;;;-1:-1:-1;;144:1033:43;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;144:1033:43;;;;;;;;;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":2219,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_3917":{"entryPoint":2184,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_string":{"entryPoint":2142,"id":null,"parameterSlots":2,"returnSlots":1},"fun_transfer":{"entryPoint":2254,"id":10210,"parameterSlots":3,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"7215":[{"length":32,"start":1279}]},"linkReferences":{},"object":"6080604090808252600480361015610015575f80fd5b5f3560e01c91826306fdde031461077557508163095ea7b31461069657816318160ddd1461067857816323b872dd14610523578163313ce567146104e657816340c10f191461040557816370a08231146103c257816395d89b41146102415781639dc29fac14610151578163a9059cbb146100f3575063dd62ed3e14610099575f80fd5b346100ef57806003193601126100ef576020906100b4610888565b6100bc6108ab565b9073ffffffffffffffffffffffffffffffffffffffff8091165f5260018452825f2091165f528252805f20549051908152f35b5f80fd5b82346100ef57806003193601126100ef5761010c610888565b60243592831561012b575060209261012491336108ce565b5160018152f35b7f10cadee3000000000000000000000000000000000000000000000000000000005f525ffd5b9050346100ef57816003193601126100ef5761016b610888565b9173ffffffffffffffffffffffffffffffffffffffff602435931691821561021657825f525f602052815f2054908482106101e35750837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef925f956020938688528785520381872055816002540360025551908152a3005b909291507fe450d38c000000000000000000000000000000000000000000000000000000005f525260245260445260645ffd5b5f907f96c6fd1e0000000000000000000000000000000000000000000000000000000082525260245ffd5b9050346100ef575f6003193601126100ef5781515f928254936001948060011c600182169687156103b8575b602092838310891461038c57869798838897985290815f1461034f57506001146102f2575b50505003601f01601f191682019267ffffffffffffffff8411838510176102c657508291826102c292528261085e565b0390f35b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5f888152929493507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8284106103395750505090601f1992601f92820101918193610292565b805488850187015287945092850192810161031c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016848701525050151560051b830101905081601f601f19610292565b6022887f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b90607f169061026d565b82346100ef5760206003193601126100ef5760209073ffffffffffffffffffffffffffffffffffffffff6103f4610888565b165f525f8252805f20549051908152f35b82346100ef57806003193601126100ef5761041e610888565b9073ffffffffffffffffffffffffffffffffffffffff60243592169283156104bb576002549083820180921161048f57505f927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9260209260025585855284835280852082815401905551908152a3005b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5f907fec442f050000000000000000000000000000000000000000000000000000000082525260245ffd5b82346100ef575f6003193601126100ef576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b82346100ef5760606003193601126100ef5761053d610888565b6105456108ab565b9060443593841561012b5773ffffffffffffffffffffffffffffffffffffffff8216805f526001602052845f20335f52602052845f2054917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83106105b3575b6020866101248988886108ce565b8683106106445781156106195733156105ee575091856101249492602097945f5260018852865f20335f52885203855f2055919481936105a5565b5f907f94280d620000000000000000000000000000000000000000000000000000000082525260245ffd5b5f907fe602df050000000000000000000000000000000000000000000000000000000082525260245ffd5b8287917ffb8f41b2000000000000000000000000000000000000000000000000000000005f5233905260245260445260645ffd5b82346100ef575f6003193601126100ef576020906002549051908152f35b82346100ef57806003193601126100ef576106af610888565b60243590331561074a5773ffffffffffffffffffffffffffffffffffffffff1690811561071f5760209350335f5260018452825f20825f52845280835f205582519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925843392a35160018152f35b5f847f94280d620000000000000000000000000000000000000000000000000000000082525260245ffd5b5f847fe602df050000000000000000000000000000000000000000000000000000000082525260245ffd5b909150346100ef575f6003193601126100ef575f92600354936001948060011c60018216968715610854575b602092838310891461038c57869798838897985290815f1461034f57506001146107f55750505003601f01601f191682019267ffffffffffffffff8411838510176102c657508291826102c292528261085e565b60035f908152929493507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b82841061083e5750505090601f1992601f92820101918193610292565b8054888501870152879450928501928101610821565b90607f16906107a1565b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b73ffffffffffffffffffffffffffffffffffffffff8091169182156109ae571691821561098257815f525f60205260405f205481811061095057817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f5260405f20818154019055604051908152a3565b827fe450d38c000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffdfea2646970667358221220d611776b0f7247c5a2ec86a2487d61ab1ee6f4add9f4210fafcda4f60fdaf6b464736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x6FDDE03 EQ PUSH2 0x775 JUMPI POP DUP2 PUSH4 0x95EA7B3 EQ PUSH2 0x696 JUMPI DUP2 PUSH4 0x18160DDD EQ PUSH2 0x678 JUMPI DUP2 PUSH4 0x23B872DD EQ PUSH2 0x523 JUMPI DUP2 PUSH4 0x313CE567 EQ PUSH2 0x4E6 JUMPI DUP2 PUSH4 0x40C10F19 EQ PUSH2 0x405 JUMPI DUP2 PUSH4 0x70A08231 EQ PUSH2 0x3C2 JUMPI DUP2 PUSH4 0x95D89B41 EQ PUSH2 0x241 JUMPI DUP2 PUSH4 0x9DC29FAC EQ PUSH2 0x151 JUMPI DUP2 PUSH4 0xA9059CBB EQ PUSH2 0xF3 JUMPI POP PUSH4 0xDD62ED3E EQ PUSH2 0x99 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH2 0xB4 PUSH2 0x888 JUMP JUMPDEST PUSH2 0xBC PUSH2 0x8AB JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x10C PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP3 DUP4 ISZERO PUSH2 0x12B JUMPI POP PUSH1 0x20 SWAP3 PUSH2 0x124 SWAP2 CALLER PUSH2 0x8CE JUMP JUMPDEST MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0x10CADEE300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xEF JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x16B PUSH2 0x888 JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD SWAP4 AND SWAP2 DUP3 ISZERO PUSH2 0x216 JUMPI DUP3 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SLOAD SWAP1 DUP5 DUP3 LT PUSH2 0x1E3 JUMPI POP DUP4 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH0 SWAP6 PUSH1 0x20 SWAP4 DUP7 DUP9 MSTORE DUP8 DUP6 MSTORE SUB DUP2 DUP8 KECCAK256 SSTORE DUP2 PUSH1 0x2 SLOAD SUB PUSH1 0x2 SSTORE MLOAD SWAP1 DUP2 MSTORE LOG3 STOP JUMPDEST SWAP1 SWAP3 SWAP2 POP PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI DUP2 MLOAD PUSH0 SWAP3 DUP3 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP1 PUSH1 0x1 SHR PUSH1 0x1 DUP3 AND SWAP7 DUP8 ISZERO PUSH2 0x3B8 JUMPI JUMPDEST PUSH1 0x20 SWAP3 DUP4 DUP4 LT DUP10 EQ PUSH2 0x38C JUMPI DUP7 SWAP8 SWAP9 DUP4 DUP9 SWAP8 SWAP9 MSTORE SWAP1 DUP2 PUSH0 EQ PUSH2 0x34F JUMPI POP PUSH1 0x1 EQ PUSH2 0x2F2 JUMPI JUMPDEST POP POP POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT DUP4 DUP6 LT OR PUSH2 0x2C6 JUMPI POP DUP3 SWAP2 DUP3 PUSH2 0x2C2 SWAP3 MSTORE DUP3 PUSH2 0x85E JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP9 DUP2 MSTORE SWAP3 SWAP5 SWAP4 POP PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x339 JUMPI POP POP POP SWAP1 PUSH1 0x1F NOT SWAP3 PUSH1 0x1F SWAP3 DUP3 ADD ADD SWAP2 DUP2 SWAP4 PUSH2 0x292 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP8 ADD MSTORE DUP8 SWAP5 POP SWAP3 DUP6 ADD SWAP3 DUP2 ADD PUSH2 0x31C JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP5 DUP8 ADD MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP2 PUSH1 0x1F PUSH1 0x1F NOT PUSH2 0x292 JUMP JUMPDEST PUSH1 0x22 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x26D JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3F4 PUSH2 0x888 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x41E PUSH2 0x888 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD SWAP3 AND SWAP3 DUP4 ISZERO PUSH2 0x4BB JUMPI PUSH1 0x2 SLOAD SWAP1 DUP4 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x48F JUMPI POP PUSH0 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH1 0x20 SWAP3 PUSH1 0x2 SSTORE DUP6 DUP6 MSTORE DUP5 DUP4 MSTORE DUP1 DUP6 KECCAK256 DUP3 DUP2 SLOAD ADD SWAP1 SSTORE MLOAD SWAP1 DUP2 MSTORE LOG3 STOP JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x53D PUSH2 0x888 JUMP JUMPDEST PUSH2 0x545 PUSH2 0x8AB JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP4 DUP5 ISZERO PUSH2 0x12B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP1 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 SLOAD SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 LT PUSH2 0x5B3 JUMPI JUMPDEST PUSH1 0x20 DUP7 PUSH2 0x124 DUP10 DUP9 DUP9 PUSH2 0x8CE JUMP JUMPDEST DUP7 DUP4 LT PUSH2 0x644 JUMPI DUP2 ISZERO PUSH2 0x619 JUMPI CALLER ISZERO PUSH2 0x5EE JUMPI POP SWAP2 DUP6 PUSH2 0x124 SWAP5 SWAP3 PUSH1 0x20 SWAP8 SWAP5 PUSH0 MSTORE PUSH1 0x1 DUP9 MSTORE DUP7 PUSH0 KECCAK256 CALLER PUSH0 MSTORE DUP9 MSTORE SUB DUP6 PUSH0 KECCAK256 SSTORE SWAP2 SWAP5 DUP2 SWAP4 PUSH2 0x5A5 JUMP JUMPDEST PUSH0 SWAP1 PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP1 PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP8 SWAP2 PUSH32 0xFB8F41B200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xEF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH2 0x6AF PUSH2 0x888 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 CALLER ISZERO PUSH2 0x74A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 ISZERO PUSH2 0x71F JUMPI PUSH1 0x20 SWAP4 POP CALLER PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP3 PUSH0 KECCAK256 DUP3 PUSH0 MSTORE DUP5 MSTORE DUP1 DUP4 PUSH0 KECCAK256 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP5 CALLER SWAP3 LOG3 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP5 PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP5 PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEF JUMPI PUSH0 SWAP3 PUSH1 0x3 SLOAD SWAP4 PUSH1 0x1 SWAP5 DUP1 PUSH1 0x1 SHR PUSH1 0x1 DUP3 AND SWAP7 DUP8 ISZERO PUSH2 0x854 JUMPI JUMPDEST PUSH1 0x20 SWAP3 DUP4 DUP4 LT DUP10 EQ PUSH2 0x38C JUMPI DUP7 SWAP8 SWAP9 DUP4 DUP9 SWAP8 SWAP9 MSTORE SWAP1 DUP2 PUSH0 EQ PUSH2 0x34F JUMPI POP PUSH1 0x1 EQ PUSH2 0x7F5 JUMPI POP POP POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT DUP4 DUP6 LT OR PUSH2 0x2C6 JUMPI POP DUP3 SWAP2 DUP3 PUSH2 0x2C2 SWAP3 MSTORE DUP3 PUSH2 0x85E JUMP JUMPDEST PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE SWAP3 SWAP5 SWAP4 POP PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B JUMPDEST DUP3 DUP5 LT PUSH2 0x83E JUMPI POP POP POP SWAP1 PUSH1 0x1F NOT SWAP3 PUSH1 0x1F SWAP3 DUP3 ADD ADD SWAP2 DUP2 SWAP4 PUSH2 0x292 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP8 ADD MSTORE DUP8 SWAP5 POP SWAP3 DUP6 ADD SWAP3 DUP2 ADD PUSH2 0x821 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x7A1 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 PUSH1 0x40 SWAP5 DUP2 DUP6 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP3 DUP9 ADD MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xEF JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xEF JUMPI JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP2 DUP3 ISZERO PUSH2 0x9AE JUMPI AND SWAP2 DUP3 ISZERO PUSH2 0x982 JUMPI DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 DUP2 LT PUSH2 0x950 JUMPI DUP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 PUSH1 0x20 SWAP3 DUP6 PUSH0 MSTORE PUSH0 DUP5 MSTORE SUB PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP5 PUSH0 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 DUP2 SLOAD ADD SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG3 JUMP JUMPDEST DUP3 PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD6 GT PUSH24 0x6B0F7247C5A2EC86A2487D61AB1EE6F4ADD9F4210FAFCDA4 0xF6 0xF 0xDA 0xF6 0xB4 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"144:1033:43:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:43;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;3561:11:56;144:1033:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:43;;;;;;;:::i;:::-;;;837:10;;;833:62;;735:10:63;144:1033:43;735:10:63;3388:5:56;735:10:63;;3388:5:56;:::i;:::-;144:1033:43;;;;;833:62;870:14;144:1033;870:14;144:1033;870:14;144:1033;;;;;;;-1:-1:-1;;144:1033:43;;;;;;;:::i;:::-;;;;;;;7958:21:56;;;7954:89;;144:1033:43;;;;;;;;;;6244:19:56;;;;6240:115;;144:1033:43;;6987:25:56;144:1033:43;;;;;;;;;;;;;;;;;6714:21:56;144:1033:43;;6714:21:56;144:1033:43;;;;;6987:25:56;144:1033:43;6240:115:56;6290:50;;;;;144:1033:43;6290:50:56;144:1033:43;;;;;;;6290:50:56;7954:89;144:1033:43;8002:30:56;;;;144:1033:43;;;8002:30:56;144:1033:43;;;;;;;-1:-1:-1;;144:1033:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;144:1033:43;;;-1:-1:-1;;144:1033:43;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:43;;;;;;;;;;;-1:-1:-1;;144:1033:43;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:43;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:43;;;;;;;;-1:-1:-1;144:1033:43;;-1:-1:-1;;144:1033:43;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:43;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:43;;;;;;;:::i;:::-;;;;;;;7432:21:56;;;7428:91;;6137:21;144:1033:43;;;;;;;;;;;;;6987:25:56;144:1033:43;;;6137:21:56;144:1033:43;;;;;;;;;;;;;;;;;;;;6987:25:56;144:1033:43;;;;;;;;;;;7428:91:56;144:1033:43;7476:32:56;;;;144:1033:43;;;7476:32:56;144:1033:43;;;;;;-1:-1:-1;;144:1033:43;;;;;;;;;521:9;144:1033;;;;;;;;;;-1:-1:-1;;144:1033:43;;;;;;;:::i;:::-;;;:::i;:::-;;;;1058:10;;;1054:62;;144:1033;;;;;;;;;;;;735:10:63;144:1033:43;;;;;;;;10484:36:56;10503:17;10484:36;;10480:309;;144:1033:43;;4890:5:56;;;;;;:::i;10480:309::-;10540:24;;;10536:130;;9717:19;;9713:89;;735:10:63;9815:21:56;9811:90;;144:1033:43;;;4890:5:56;144:1033:43;;;;;;;;;;;;;735:10:63;144:1033:43;;;;;;;;;10480:309:56;;;;;;9811:90;144:1033:43;9859:31:56;;;;144:1033:43;;;9859:31:56;9713:89;144:1033:43;9759:32:56;;;;144:1033:43;;;9759:32:56;10536:130;10591:60;;;;144:1033:43;10591:60:56;735:10:63;144:1033:43;;;;;;;;10591:60:56;144:1033:43;;;;;;-1:-1:-1;;144:1033:43;;;;;;;2881:12:56;144:1033:43;;;;;;;;;;;;;-1:-1:-1;;144:1033:43;;;;;;;:::i;:::-;;;735:10:63;;9717:19:56;9713:89;;144:1033:43;;9815:21:56;;;9811:90;;144:1033:43;735:10:63;;;144:1033:43;;8746:4:56;144:1033:43;;;;;;;;;;;;;;;;;;;;9989:31:56;735:10:63;;9989:31:56;;144:1033:43;8746:4:56;144:1033:43;;;9811:90:56;144:1033:43;9859:31:56;;;;144:1033:43;;;9859:31:56;9713:89;144:1033:43;9759:32:56;;;;144:1033:43;;;9759:32:56;144:1033:43;;;;;;;;-1:-1:-1;;144:1033:43;;;;;;;1837:5:56;144:1033:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;144:1033:43;;;-1:-1:-1;;144:1033:43;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1837:5:56;144:1033:43;;;;;;;-1:-1:-1;144:1033:43;;;;;;;;;;;-1:-1:-1;;144:1033:43;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;144:1033:43;;;;;;;;;;;;;;;;-1:-1:-1;;144:1033:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;5297:300:56:-;144:1033:43;;;;5380:18:56;;;5376:86;;144:1033:43;5475:16:56;;;5471:86;;144:1033:43;5997:540:56;144:1033:43;5997:540:56;144:1033:43;;;5997:540:56;144:1033:43;;6244:19:56;;;6240:115;;144:1033:43;6987:25:56;144:1033:43;;;;5997:540:56;144:1033:43;5997:540:56;144:1033:43;;;;5997:540:56;144:1033:43;;;5997:540:56;144:1033:43;;5997:540:56;144:1033:43;;;;;;;;;;;;6987:25:56;5297:300::o;6240:115::-;6290:50;;5997:540;6290:50;;144:1033:43;;;;;;5997:540:56;6290:50;5471:86;5514:32;5396:1;5514:32;5396:1;5514:32;144:1033:43;;5396:1:56;5514:32;5376:86;5421:30;5396:1;5421:30;5396:1;5421:30;144:1033:43;;5396:1:56;5421:30"},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(address,uint256)":"9dc29fac","decimals()":"313ce567","mint(address,uint256)":"40c10f19","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroTransfer\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ZeroTransfer()\":[{\"details\":\"Simulate tokens that don't allow zero transfers.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol\":\"ERC20TestToken\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol\":{\"keccak256\":\"0x6c1d91dd0f44221f140ab22e9e981ef1f9028018428f0c9cb41577e757e1b4b8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c42dce6530450a6476970b6bd0aa8feec8b12c5b3837702f94395ab3157cede7\",\"dweb:/ipfs/QmYb3V9wcMTjdN1XwNdQM4ZHG9EcFvKLZNKDFRyraBW5DQ\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x86b7b71a6aedefdad89b607378eeab1dcc5389b9ea7d17346d08af01d7190994\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1dc2db8d94a21eac8efe03adf574c419b08536409b416057a2b5b95cb772c43c\",\"dweb:/ipfs/QmZfqJCKVU1ScuX2A7s8WZdQEaikwJbDH5JBrBdKTUT4Gu\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol":{"CommonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Base contract for performing access control on external functions within pools.\",\"errors\":{\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":\"CommonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"ProtocolFeeController":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault_","type":"address"},{"internalType":"uint256","name":"initialGlobalSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"initialGlobalYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[],"name":"InvalidMigrationSource","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolRegisteredWithFeeController","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[],"name":"MAX_CREATOR_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFeesHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"migratePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"fun_ensureValidPrecision":{"entryPoint":488,"id":9211,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"60e0346101d057601f612e8638819003918201601f19168301916001600160401b038311848410176101d4578084926060946040528339810103126101d05780516001600160a01b03811691908281036101d057604060208301519201519230608052156101c1578060a05260c0526706f05b59d3b20000908181116101b2576020816100ac7fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d936101e8565b805f55604051908152a181116101a3576020816100e97f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6936101e8565b80600155604051908152a1604051612c5a908161022c823960805181612172015260a051818181610ed6015281816110fc0152612809015260c0518181816102530152818161036e015281816103f8015281816105170152818161058501528181610864015281816108d201528181610c7d01528181610db3015281816115d60152818161177b0152818161191c01528181611a7601528181611be401528181612319015281816125d40152818161275001526129540152f35b6353c24f4760e11b5f5260045ffd5b637e6eb7fb60e01b5f5260045ffd5b630647140b60e51b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b64174876e800808204818102918183041490151715610217570361020857565b63419fd9e760e11b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c9081630252aab514611fa6575080630874327f14611b935780630b8e059b14611b5b5780630ddd60c614611b3a5780631377c16c14611a1b5780632772d156146118385780632e1d388d146119f95780633af52712146118c157806352f125f01461189657806355fb76af146118795780635c15a0b41461183d5780635e32e4e81461183857806371447ea81461169357806371ecc8fb146114ef57806377ff76e71461125b5780637869ee181461123f5780637a2b97dc146111d4578063851c1bb3146111845780638a3c5c69146111205780638d928af8146110dd5780638df44c54146110555780638f4ab9ca146110345780639e95f3fd14610fa8578063a93df2a414610f43578063aaabadc514610e90578063abaa335614610ce7578063b53a70b214610c00578063c673bdaf14610bc3578063cf7b287f14610b5d578063f706144514610b28578063fa399f2a14610392578063fbfa77cf1461034f5763fd267f3914610187575f80fd5b34610323576040600319360112610323576101a0611fda565b602435906101ac6127a4565b6706f05b59d3b200008211610327576101c482612a29565b6101cd81612254565b6101d68261243d565b916040516101e381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600260205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169161027d81612b35565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e92602092610309575b50604051908152a2005b610312906120ac565b5f6102ff565b6040513d5f823e3d90fd5b5f80fd5b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576103ab611fda565b6103b3612746565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f81602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610318575f905f92610acb575b506001600160a01b0383165f52600260205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610ac1575b84610ab1575b61047287612915565b94905f5b8681106108225789896001600160a01b0382165f52600360205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610818575b85610806575b6104c784612915565b96905f5b8881106104d457005b6104de8189612213565b516104ec575b6001016104cb565b986001600160a01b036104ff8b84612213565b51169061050c8b8a612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561080257604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107f7579082916107e0575b506107b357505f99816105c8828b612213565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107385761060e818a612213565b5186156107105761061e9061248f565b6001670de0b6b3a764000061065f8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c8783010401901515026124ac565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f20610693848254612482565b905561069f828b612213565b519081848103116106e3576001936106d9916001600160a01b038c165f52600860205260405f20905f5260205260405f2092038254612482565b90555b90506104e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001918561077d5761074a828b612213565b51906001600160a01b038a165f52600760205260405f20905f5260205261077660405f20918254612482565b90556106dc565b610787828b612213565b51906001600160a01b038a165f52600860205260405f20905f5260205261077660405f20918254612482565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6107e9906120ac565b6107f457808c6105b5565b80fd5b6040513d84823e3d90fd5b5080fd5b905061081281836124bf565b906104be565b82151595506104b8565b61082c8187612213565b5161083a575b600101610476565b6001600160a01b0361084c8284612213565b5116906108598188612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561032357604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857610aa2575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610937868d612213565b51936040519485521692a38815610a27576109528188612213565b518515610710576109629061248f565b6001670de0b6b3a76400006109a3897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b8783010401901515026124ac565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f206109d7848254612482565b90556109e38289612213565b519081848103116106e357600193610a1d916001600160a01b038f165f52600860205260405f20905f5260205260405f2092038254612482565b90555b9050610832565b60019184610a6c57610a398289612213565b51906001600160a01b038d165f52600760205260405f20905f52602052610a6560405f20918254612482565b9055610a20565b610a768289612213565b51906001600160a01b038d165f52600860205260405f20905f52602052610a6560405f20918254612482565b610aab906120ac565b8b6108ff565b50610abc83826124bf565b610469565b8115159450610463565b9150503d805f833e610add81836120dc565b8101906040818303126103235780519167ffffffffffffffff928381116103235781610b0a9184016123dc565b92602083015190811161032357610b2192016123dc565b908361042a565b3461032357604060031936011261032357610b5b610b44611fda565b610b4c611ff0565b90610b5681612500565b61268f565b005b3461032357604060031936011261032357610b76611fda565b610b7e611ff0565b90610b876127a4565b610b9081612915565b915f5b838110610b9c57005b80610bbd6001600160a01b03610bb460019487612213565b51168785612a71565b01610b93565b34610323576020600319360112610323576001600160a01b03610be4611fda565b165f526004602052602060ff60405f2054166040519015158152f35b3461032357606060031936011261032357610c19611fda565b610c21611ff0565b604435906001600160a01b039283831680840361032357604090610c436127a4565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561031857610cb4575b610b5b9350612a71565b6040843d604011610cdf575b81610ccd604093836120dc565b8101031261032357610b5b9350610caa565b3d9150610cc0565b3461032357604060031936011261032357610d00611fda565b60243590610d0c6127a4565b6706f05b59d3b200008211610e6857610d2482612a29565b610d2d81612254565b610d368261243d565b91604051610d4381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610ddd81612b03565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd926020926103095750604051908152a2005b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610318576020925f92610f14575b5060405191168152f35b610f35919250833d8511610f3c575b610f2d81836120dc565b8101906123bd565b9083610f0a565b503d610f23565b3461032357602060031936011261032357600435610f5f6127a4565b6706f05b59d3b200008111610e6857602081610f9b7f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f693612a29565b80600155604051908152a1005b346103235760208060031936011261032357610fc2611fda565b90610fcc82612915565b90610fd6826121c4565b925f946001600160a01b03809116955b848110610fff5760405180610ffb8882612028565b0390f35b600190875f526008845260405f20836110188388612213565b51165f52845260405f205461102d8289612213565b5201610fe6565b3461032357602060031936011261032357610b5b611050611fda565b612254565b34610323576020806003193601126103235761106f611fda565b9061107982612915565b90611083826121c4565b925f946001600160a01b03809116955b8481106110a85760405180610ffb8882612028565b600190875f526007845260405f20836110c18388612213565b51165f52845260405f20546110d68289612213565b5201611093565b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103235760206003193601126103235760043561113c6127a4565b6706f05b59d3b200008111610327576020816111787fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d93612a29565b805f55604051908152a1005b34610323576020600319360112610323576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610323576111cc602091612147565b604051908152f35b34610323576020600319360112610323576001600160a01b036111f5611fda565b165f526003602052602060405f206040519061121082612063565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610323575f6003193601126103235760205f54604051908152f35b3461032357606060031936011261032357611274611fda565b61127c611ff0565b90604435918215159081840361032357611294612746565b6001600160a01b0380931691825f52826020926004845260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146114e457835f9687925b8915611469578483878c5f9b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb985b6113698461243d565b6040519061137682612063565b67ffffffffffffffff809116825260036113e6868401948686528b5f5260028852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a1692161717905561243d565b956040839051976113f689612063565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055604061143a905192839283909291602090604083019483521515910152565b0390a28d518c815290151560208201529081906040820190565b0390a289519586521693a38351928352820152f35b8483878c6001549b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb98611360565b835f549687926112e5565b346103235760208060031936011261032357611509611fda565b61151281612254565b6001600160a01b039182821692835f526002825260405f20906040519161153883612063565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f549381611688575b5061156957005b6115728361243d565b90806040519261158184612063565b168252848201905f8252875f526002865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261160081612b35565b843b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e936103095750604051908152a2005b905083141587611562565b3461032357602080600319360112610323576116ad611fda565b6116b681612254565b6001600160a01b039182821692835f526003825260405f2090604051916116dc83612063565b549167ffffffffffffffff9060ff8285169485835260401c161590858215910152600154938161182d575b5061170e57005b6117178361243d565b90806040519261172684612063565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926117a581612b03565b843b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd936103095750604051908152a2005b905083141587611707565b612006565b34610323576020600319360112610323576001600160a01b0361185e611fda565b165f526002602052602060405f206040519061121082612063565b34610323575f600319360112610323576020600154604051908152f35b3461032357602060031936011261032357610b5b6118b2611fda565b6118bb81612595565b9061268f565b34610323576040600319360112610323576118da611fda565b602435906118e781612500565b670de0ad9b58f1600082116119d1576118ff81612254565b6001600160a01b039182821692835f5260066020528160405f20557f0000000000000000000000000000000000000000000000000000000000000000169161194681612b03565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34926020926103095750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020604051670de0ad9b58f160008152f35b3461032357604060031936011261032357611a34611fda565b60243590611a4181612500565b670de0ad9b58f1600082116119d157611a5981612254565b6001600160a01b039182821692835f5260056020528160405f20557f00000000000000000000000000000000000000000000000000000000000000001691611aa081612b35565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611b2b5750604051908152a2005b611b34906120ac565b846102ff565b346103235760406003193601126103235760206111cc6024356004356124bf565b34610323576020600319360112610323576001600160a01b03611b7c611fda565b165f526005602052602060405f2054604051908152f35b346103235760208060031936011261032357611bad611fda565b906001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528281600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156103185782915f91611f6c575b501692308414611f44571690815f526004815260ff60405f205416611f1857815f526004815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152826004820152604081602481875afa908115610318575f905f92611ef4575b50611cb79061243d565b9060405190611cc582612063565b67ffffffffffffffff80931682528382019015158152845f52600284528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc0000000000000000000000000000000000000000000000000000000083528560048401526040836024818a5afa928315610318575f905f94611ec0575b50611d7b9061243d565b938060405195611d8a87612063565b1685528585019315158452865f526003865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528260048201528181602481875afa5f9181611e8e575b50938291602495611e7c575b50604051948580927f0252aab50000000000000000000000000000000000000000000000000000000082528660048301525afa5f9381611e4d575b50611e3e57005b6006915f525260405f20555f80f35b9093508181813d8311611e75575b611e6581836120dc565b8101031261032357519284611e37565b503d611e5b565b845f526005835260405f205585611dfc565b9150938282813d8311611eb9575b611ea681836120dc565b8101031261032357905190936024611df0565b503d611e9c565b611d7b9450611ee7915060403d604011611eed575b611edf81836120dc565b81019061212a565b93611d71565b503d611ed5565b611cb79250611f12915060403d604011611eed57611edf81836120dc565b91611cad565b507fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250848092503d8311611f9f575b611f8581836120dc565b810103126103235751818116810361032357819085611c15565b503d611f7b565b34610323576020600319360112610323576020906001600160a01b03611fca611fda565b165f526006825260405f20548152f35b600435906001600160a01b038216820361032357565b602435906001600160a01b038216820361032357565b34610323575f6003193601126103235760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b82811061204f575050505090565b835185529381019392810192600101612041565b6040810190811067ffffffffffffffff82111761207f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161207f57604052565b6060810190811067ffffffffffffffff82111761207f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761207f57604052565b5190811515820361032357565b91908260409103126103235761214460208351930161211d565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526121a6816120c0565b51902090565b67ffffffffffffffff811161207f5760051b60200190565b906121ce826121ac565b6121db60405191826120dc565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061220982946121ac565b0190602036910137565b80518210156122275760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b601f9060445f6001600160a01b03926040519360209481868201937ffa399f2a000000000000000000000000000000000000000000000000000000008552166024820152602481526122a5816120c0565b836040519586809581947f48c894910000000000000000000000000000000000000000000000000000000083528a60048401525180918160248501528484015e838382840101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09a8b91011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af180156103185761234a57505050565b3d805f833e61235981836120dc565b810192828285031261032357815167ffffffffffffffff9283821161032357019380601f8601121561032357845192831161207f576123a28460405193601f86011601836120dc565b8282528383860101116103235781835f95018483015e010152565b9081602091031261032357516001600160a01b03811681036103235790565b9080601f83011215610323578151906020916123f7816121ac565b9361240560405195866120dc565b81855260208086019260051b82010192831161032357602001905b82821061242e575050505090565b81518152908301908301612420565b67ffffffffffffffff90818111612452571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b919082018092116106e357565b90670de0b6b3a7640000918281029281840414901517156106e357565b818102929181159184041417156106e357565b906124ec64174876e8009283926124e5670de0b6b3a764000091838303838510026124ac565b0490612482565b048181029181830414901517156106e35790565b6001600160a01b03908161251382612595565b168015612554573303612524575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361032357565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa908115612685575f9161260c575b5001511690565b90506060813d60601161267d575b81612627606093836120dc565b81010312610323578151906060820182811067ffffffffffffffff82111761207f57612673918491825261265a81612581565b845261266860208201612581565b602085015201612581565b828201525f612605565b3d915061261a565b82513d5f823e3d90fd5b9061269982612915565b92905f5b8481106126ab575050505050565b6001906001600160a01b03806126c18386612213565b5116818616805f5260086020818152604094855f20855f528252855f205495866126f3575b505050505050500161269d565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612732878d88612b67565b519586528a1694a45f8080808080806126e6565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361277857565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6127d07fffffffff000000000000000000000000000000000000000000000000000000005f3516612147565b6001600160a01b036040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103185784925f926128f3575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610318575f926128bd575b50501561289557565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116128ec575b6128d481836120dc565b81010312610323576128e59061211d565b5f8061288c565b503d6128ca565b606491925061290e90843d8611610f3c57610f2d81836120dc565b919061283b565b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610318575f9361298b575b5050815190565b909192503d805f833e61299e81836120dc565b810160209182818303126103235780519067ffffffffffffffff821161032357019281601f850112156103235783516129d6816121ac565b946129e460405196876120dc565b818652848087019260051b820101938411610323578401905b838210612a11575050505050905f80612984565b815183811681036103235781529084019084016129fd565b64174876e8008082048181029181830414901517156106e35703612a4957565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612aaa575b505050505050565b82612aef877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612b67565b6040519687521694a45f8080808080612aa2565b6001600160a01b03165f52600360205261214467ffffffffffffffff60405f205416600660205260405f2054906124bf565b6001600160a01b03165f52600260205261214467ffffffffffffffff60405f205416600560205260405f2054906124bf565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208083019182526001600160a01b0394909416602483015260448083019590955293815290925f91612bbf6064826120dc565b519082855af115610318575f513d612c1b57506001600160a01b0381163b155b612be65750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415612bdf56fea2646970667358221220af4d7b7326f3e2d7a8e0ba230faabb4ec5497c4f0aa75f9bd32c889273f022e164736f6c634300081b0033","opcodes":"PUSH1 0xE0 CALLVALUE PUSH2 0x1D0 JUMPI PUSH1 0x1F PUSH2 0x2E86 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x1D4 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x60 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x1D0 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP2 SWAP1 DUP3 DUP2 SUB PUSH2 0x1D0 JUMPI PUSH1 0x40 PUSH1 0x20 DUP4 ADD MLOAD SWAP3 ADD MLOAD SWAP3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0x1C1 JUMPI DUP1 PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE PUSH8 0x6F05B59D3B20000 SWAP1 DUP2 DUP2 GT PUSH2 0x1B2 JUMPI PUSH1 0x20 DUP2 PUSH2 0xAC PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x1E8 JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 DUP2 GT PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP2 PUSH2 0xE9 PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x1E8 JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 PUSH1 0x40 MLOAD PUSH2 0x2C5A SWAP1 DUP2 PUSH2 0x22C DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x2172 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0xED6 ADD MSTORE DUP2 DUP2 PUSH2 0x10FC ADD MSTORE PUSH2 0x2809 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x253 ADD MSTORE DUP2 DUP2 PUSH2 0x36E ADD MSTORE DUP2 DUP2 PUSH2 0x3F8 ADD MSTORE DUP2 DUP2 PUSH2 0x517 ADD MSTORE DUP2 DUP2 PUSH2 0x585 ADD MSTORE DUP2 DUP2 PUSH2 0x864 ADD MSTORE DUP2 DUP2 PUSH2 0x8D2 ADD MSTORE DUP2 DUP2 PUSH2 0xC7D ADD MSTORE DUP2 DUP2 PUSH2 0xDB3 ADD MSTORE DUP2 DUP2 PUSH2 0x15D6 ADD MSTORE DUP2 DUP2 PUSH2 0x177B ADD MSTORE DUP2 DUP2 PUSH2 0x191C ADD MSTORE DUP2 DUP2 PUSH2 0x1A76 ADD MSTORE DUP2 DUP2 PUSH2 0x1BE4 ADD MSTORE DUP2 DUP2 PUSH2 0x2319 ADD MSTORE DUP2 DUP2 PUSH2 0x25D4 ADD MSTORE DUP2 DUP2 PUSH2 0x2750 ADD MSTORE PUSH2 0x2954 ADD MSTORE RETURN JUMPDEST PUSH4 0x53C24F47 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x7E6EB7FB PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x217 JUMPI SUB PUSH2 0x208 JUMPI JUMP JUMPDEST PUSH4 0x419FD9E7 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x1FA6 JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1B93 JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1B5B JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1B3A JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1A1B JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x19F9 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x18C1 JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x1896 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x1879 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x183D JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x1693 JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x14EF JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x125B JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x123F JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x11D4 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1184 JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1120 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x10DD JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0x1055 JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x1034 JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0xFA8 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0xF43 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xE90 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xC00 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xBC3 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xB5D JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB28 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x34F JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x187 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A0 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AC PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x327 JUMPI PUSH2 0x1C4 DUP3 PUSH2 0x2A29 JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH2 0x1D6 DUP3 PUSH2 0x243D JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1E3 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x27D DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x312 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH0 PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x3AB PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0x2746 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0xACB JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAC1 JUMPI JUMPDEST DUP5 PUSH2 0xAB1 JUMPI JUMPDEST PUSH2 0x472 DUP8 PUSH2 0x2915 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x822 JUMPI DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x818 JUMPI JUMPDEST DUP6 PUSH2 0x806 JUMPI JUMPDEST PUSH2 0x4C7 DUP5 PUSH2 0x2915 JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x4D4 JUMPI STOP JUMPDEST PUSH2 0x4DE DUP2 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x4EC JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4CB JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4FF DUP12 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x50C DUP12 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x7F7 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x7E0 JUMPI JUMPDEST POP PUSH2 0x7B3 JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5C8 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x738 JUMPI PUSH2 0x60E DUP2 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x710 JUMPI PUSH2 0x61E SWAP1 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x65F DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24AC JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x693 DUP5 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x69F DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0x6D9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x4E4 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x77D JUMPI PUSH2 0x74A DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6DC JUMP JUMPDEST PUSH2 0x787 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x7E9 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH2 0x7F4 JUMPI DUP1 DUP13 PUSH2 0x5B5 JUMP JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x812 DUP2 DUP4 PUSH2 0x24BF JUMP JUMPDEST SWAP1 PUSH2 0x4BE JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x82C DUP2 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x83A JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x84C DUP3 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x859 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xAA2 JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x937 DUP7 DUP14 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA27 JUMPI PUSH2 0x952 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x710 JUMPI PUSH2 0x962 SWAP1 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9A3 DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24AC JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x9D7 DUP5 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x9E3 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA1D SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA6C JUMPI PUSH2 0xA39 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA20 JUMP JUMPDEST PUSH2 0xA76 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST PUSH2 0xAAB SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP12 PUSH2 0x8FF JUMP JUMPDEST POP PUSH2 0xABC DUP4 DUP3 PUSH2 0x24BF JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x463 JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xADD DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x323 JUMPI DUP2 PUSH2 0xB0A SWAP2 DUP5 ADD PUSH2 0x23DC JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x323 JUMPI PUSH2 0xB21 SWAP3 ADD PUSH2 0x23DC JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x42A JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xB44 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB4C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB56 DUP2 PUSH2 0x2500 JUMP JUMPDEST PUSH2 0x268F JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB76 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB7E PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB87 PUSH2 0x27A4 JUMP JUMPDEST PUSH2 0xB90 DUP2 PUSH2 0x2915 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB9C JUMPI STOP JUMPDEST DUP1 PUSH2 0xBBD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBB4 PUSH1 0x1 SWAP5 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP8 DUP6 PUSH2 0x2A71 JUMP JUMPDEST ADD PUSH2 0xB93 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBE4 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xC19 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xC21 PUSH2 0x1FF0 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xC43 PUSH2 0x27A4 JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xCB4 JUMPI JUMPDEST PUSH2 0xB5B SWAP4 POP PUSH2 0x2A71 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xCDF JUMPI JUMPDEST DUP2 PUSH2 0xCCD PUSH1 0x40 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0xB5B SWAP4 POP PUSH2 0xCAA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCC0 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xD00 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xD0C PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xE68 JUMPI PUSH2 0xD24 DUP3 PUSH2 0x2A29 JUMP JUMPDEST PUSH2 0xD2D DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH2 0xD36 DUP3 PUSH2 0x243D JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xD43 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xDDD DUP2 PUSH2 0x2B03 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xF14 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xF35 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF3C JUMPI JUMPDEST PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x23BD JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xF0A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF23 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xF5F PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xE68 JUMPI PUSH1 0x20 DUP2 PUSH2 0xF9B PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x2A29 JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xFC2 PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0xFCC DUP3 PUSH2 0x2915 JUMP JUMPDEST SWAP1 PUSH2 0xFD6 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0xFFF JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1018 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x102D DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0xFE6 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x1050 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x2254 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x106F PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0x1079 DUP3 PUSH2 0x2915 JUMP JUMPDEST SWAP1 PUSH2 0x1083 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x10A8 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x10C1 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x10D6 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0x1093 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x113C PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x327 JUMPI PUSH1 0x20 DUP2 PUSH2 0x1178 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x2A29 JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI PUSH2 0x11CC PUSH1 0x20 SWAP2 PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x11F5 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1274 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x127C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO SWAP1 DUP2 DUP5 SUB PUSH2 0x323 JUMPI PUSH2 0x1294 PUSH2 0x2746 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP2 DUP3 PUSH0 MSTORE DUP3 PUSH1 0x20 SWAP3 PUSH1 0x4 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x14E4 JUMPI DUP4 PUSH0 SWAP7 DUP8 SWAP3 JUMPDEST DUP10 ISZERO PUSH2 0x1469 JUMPI DUP5 DUP4 DUP8 DUP13 PUSH0 SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 JUMPDEST PUSH2 0x1369 DUP5 PUSH2 0x243D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1376 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x3 PUSH2 0x13E6 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x2 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x243D JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x13F6 DUP10 PUSH2 0x2063 JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 PUSH2 0x143A SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP14 MLOAD DUP13 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 DUP10 MLOAD SWAP6 DUP7 MSTORE AND SWAP4 LOG3 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP5 DUP4 DUP8 DUP13 PUSH1 0x1 SLOAD SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 PUSH2 0x1360 JUMP JUMPDEST DUP4 PUSH0 SLOAD SWAP7 DUP8 SWAP3 PUSH2 0x12E5 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1509 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x1512 DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1538 DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x1688 JUMPI JUMPDEST POP PUSH2 0x1569 JUMPI STOP JUMPDEST PUSH2 0x1572 DUP4 PUSH2 0x243D JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1581 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x1600 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1562 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x16AD PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x16B6 DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x16DC DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x182D JUMPI JUMPDEST POP PUSH2 0x170E JUMPI STOP JUMPDEST PUSH2 0x1717 DUP4 PUSH2 0x243D JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1726 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x17A5 DUP2 PUSH2 0x2B03 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1707 JUMP JUMPDEST PUSH2 0x2006 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x185E PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x18B2 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x18BB DUP2 PUSH2 0x2595 JUMP JUMPDEST SWAP1 PUSH2 0x268F JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x18DA PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x18E7 DUP2 PUSH2 0x2500 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x18FF DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1946 DUP2 PUSH2 0x2B03 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A34 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1A41 DUP2 PUSH2 0x2500 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x1A59 DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1AA0 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1B2B JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1B34 SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP5 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x11CC PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x24BF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1B7C PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1BAD PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1F6C JUMPI JUMPDEST POP AND SWAP3 ADDRESS DUP5 EQ PUSH2 0x1F44 JUMPI AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x1F18 JUMPI DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x1EF4 JUMPI JUMPDEST POP PUSH2 0x1CB7 SWAP1 PUSH2 0x243D JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1CC5 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP5 PUSH0 MSTORE PUSH1 0x2 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP6 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x1EC0 JUMPI JUMPDEST POP PUSH2 0x1D7B SWAP1 PUSH2 0x243D JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1D8A DUP8 PUSH2 0x2063 JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP7 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL PUSH0 SWAP2 DUP2 PUSH2 0x1E8E JUMPI JUMPDEST POP SWAP4 DUP3 SWAP2 PUSH1 0x24 SWAP6 PUSH2 0x1E7C JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL PUSH0 SWAP4 DUP2 PUSH2 0x1E4D JUMPI JUMPDEST POP PUSH2 0x1E3E JUMPI STOP JUMPDEST PUSH1 0x6 SWAP2 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1E75 JUMPI JUMPDEST PUSH2 0x1E65 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD SWAP3 DUP5 PUSH2 0x1E37 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E5B JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP6 PUSH2 0x1DFC JUMP JUMPDEST SWAP2 POP SWAP4 DUP3 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1EB9 JUMPI JUMPDEST PUSH2 0x1EA6 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI SWAP1 MLOAD SWAP1 SWAP4 PUSH1 0x24 PUSH2 0x1DF0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E9C JUMP JUMPDEST PUSH2 0x1D7B SWAP5 POP PUSH2 0x1EE7 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI JUMPDEST PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x212A JUMP JUMPDEST SWAP4 PUSH2 0x1D71 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1ED5 JUMP JUMPDEST PUSH2 0x1CB7 SWAP3 POP PUSH2 0x1F12 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 PUSH2 0x1CAD JUMP JUMPDEST POP PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP5 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1F9F JUMPI JUMPDEST PUSH2 0x1F85 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1C15 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1F7B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1FCA PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x204F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2041 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2144 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x211D JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x21A6 DUP2 PUSH2 0x20C0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x21CE DUP3 PUSH2 0x21AC JUMP JUMPDEST PUSH2 0x21DB PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2209 DUP3 SWAP5 PUSH2 0x21AC JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2227 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1F SWAP1 PUSH1 0x44 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x40 MLOAD SWAP4 PUSH1 0x20 SWAP5 DUP2 DUP7 DUP3 ADD SWAP4 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x22A5 DUP2 PUSH2 0x20C0 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP6 DUP2 SWAP5 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP11 PUSH1 0x4 DUP5 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP6 ADD MSTORE DUP5 DUP5 ADD MCOPY DUP4 DUP4 DUP3 DUP5 ADD ADD MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP11 DUP12 SWAP2 ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0x234A JUMPI POP POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2359 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP3 DUP3 DUP3 DUP6 SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP3 GT PUSH2 0x323 JUMPI ADD SWAP4 DUP1 PUSH1 0x1F DUP7 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP5 MLOAD SWAP3 DUP4 GT PUSH2 0x207F JUMPI PUSH2 0x23A2 DUP5 PUSH1 0x40 MLOAD SWAP4 PUSH1 0x1F DUP7 ADD AND ADD DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x323 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x323 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x23F7 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP4 PUSH2 0x2405 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x323 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x242E JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2420 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2452 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x24EC PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x24E5 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x24AC JUMP JUMPDEST DIV SWAP1 PUSH2 0x2482 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x2513 DUP3 PUSH2 0x2595 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x2554 JUMPI CALLER SUB PUSH2 0x2524 JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2685 JUMPI PUSH0 SWAP2 PUSH2 0x260C JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x267D JUMPI JUMPDEST DUP2 PUSH2 0x2627 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH2 0x2673 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x265A DUP2 PUSH2 0x2581 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x2668 PUSH1 0x20 DUP3 ADD PUSH2 0x2581 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x2581 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x2605 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x261A JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x2699 DUP3 PUSH2 0x2915 JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x26AB JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x26C1 DUP4 DUP7 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x26F3 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x269D JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2732 DUP8 DUP14 DUP9 PUSH2 0x2B67 JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x26E6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x2778 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x27D0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x28F3 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x28BD JUMPI JUMPDEST POP POP ISZERO PUSH2 0x2895 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x28EC JUMPI JUMPDEST PUSH2 0x28D4 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0x28E5 SWAP1 PUSH2 0x211D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x288C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x28CA JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x290E SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xF3C JUMPI PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x283B JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP4 PUSH2 0x298B JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x299E DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP4 MLOAD PUSH2 0x29D6 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP5 PUSH2 0x29E4 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x323 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2A11 JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x2984 JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x29FD JUMP JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SUB PUSH2 0x2A49 JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2AAA JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2AEF DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2B67 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2AA2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24BF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24BF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP1 SWAP3 PUSH0 SWAP2 PUSH2 0x2BBF PUSH1 0x64 DUP3 PUSH2 0x20DC JUMP JUMPDEST MLOAD SWAP1 DUP3 DUP6 GAS CALL ISZERO PUSH2 0x318 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x2C1B JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x2BE6 JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x2BDF JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF 0x4D PUSH28 0x7326F3E2D7A8E0BA230FAABB4EC5497C4F0AA75F9BD32C889273F022 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"3120:30799:45:-:0;;;;;;;;;;;;;-1:-1:-1;;3120:30799:45;;;;-1:-1:-1;;;;;3120:30799:45;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3120:30799:45;;;;;;;;;;;;;;;;;922:4:46;;1347:46:32;;943:28:44;939:79;;1028:14;;;409::47;;4720:5:45;7248:55;;;;7244:127;;3120:30799;7402:20;;25803:68;7402:20;;:::i;:::-;3120:30799;-1:-1:-1;3120:30799:45;;;;;;25803:68;7581:57;;7577:130;;3120:30799;7738:21;;26371:70;7738:21;;:::i;:::-;3120:30799;;;;;;;;26371:70;3120:30799;;;;;;;;1347:46:32;3120:30799:45;;;;;1028:14:44;3120:30799:45;;;;;;;;;;;;;;;409:14:47;3120:30799:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7577:130;7661:35;;;-1:-1:-1;7661:35:45;;-1:-1:-1;7661:35:45;7244:127;7326:34;;;-1:-1:-1;7326:34:45;;-1:-1:-1;7326:34:45;939:79:44;994:13;;;-1:-1:-1;994:13:44;;-1:-1:-1;994:13:44;3120:30799:45;-1:-1:-1;3120:30799:45;;;;;;-1:-1:-1;3120:30799:45;;;;;-1:-1:-1;3120:30799:45;33168:749;19669:4:31;;;;;;;;;;;;;;;;;;33769:74:45;33765:146;;33168:749::o;33765:146::-;33866:34;;;-1:-1:-1;33866:34:45;;-1:-1:-1;33866:34:45;19669:4:31;3120:30799:45;;;-1:-1:-1;19669:4:31;;;;;-1:-1:-1;19669:4:31"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":8176,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_18470":{"entryPoint":8154,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":9601,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":9180,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":8477,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":9149,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_bool_fromMemory":{"entryPoint":8490,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":8232,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_bool":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":8644,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":8620,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":9346,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":9388,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_18620":{"entryPoint":9359,"id":null,"parameterSlots":1,"returnSlots":1},"external_fun_MAX_PROTOCOL_SWAP_FEE_PERCENTAGE":{"entryPoint":8198,"id":null,"parameterSlots":0,"returnSlots":0},"finalize_allocation":{"entryPoint":8412,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_18472":{"entryPoint":8291,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_18605":{"entryPoint":8364,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_42900":{"entryPoint":8384,"id":null,"parameterSlots":1,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":10148,"id":4338,"parameterSlots":0,"returnSlots":0},"fun_collectAggregateFees":{"entryPoint":8788,"id":7750,"parameterSlots":1,"returnSlots":0},"fun_computeAggregateFeePercentage":{"entryPoint":9407,"id":8397,"parameterSlots":2,"returnSlots":1},"fun_ensureCallerIsPoolCreator":{"entryPoint":9472,"id":8433,"parameterSlots":1,"returnSlots":0},"fun_ensureOnlyVault":{"entryPoint":10054,"id":9319,"parameterSlots":0,"returnSlots":0},"fun_ensureValidPrecision":{"entryPoint":10793,"id":9211,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":8519,"id":4356,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage":{"entryPoint":11011,"id":8367,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage_18606":{"entryPoint":11061,"id":8367,"parameterSlots":1,"returnSlots":1},"fun_getPoolCreator":{"entryPoint":9621,"id":8476,"parameterSlots":1,"returnSlots":1},"fun_getPoolTokensAndCount":{"entryPoint":10517,"id":8457,"parameterSlots":1,"returnSlots":2},"fun_safeTransfer":{"entryPoint":11111,"id":10629,"parameterSlots":3,"returnSlots":0},"fun_toUint64":{"entryPoint":9277,"id":15008,"parameterSlots":1,"returnSlots":1},"fun_withdrawPoolCreatorFees":{"entryPoint":9871,"id":9114,"parameterSlots":2,"returnSlots":0},"fun_withdrawProtocolFees":{"entryPoint":10865,"id":9010,"parameterSlots":3,"returnSlots":0},"memory_array_index_access_contract_IERC20_dyn":{"entryPoint":8723,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4296":[{"length":32,"start":8562}],"7340":[{"length":32,"start":3798},{"length":32,"start":4348},{"length":32,"start":10249}],"9281":[{"length":32,"start":595},{"length":32,"start":878},{"length":32,"start":1016},{"length":32,"start":1303},{"length":32,"start":1413},{"length":32,"start":2148},{"length":32,"start":2258},{"length":32,"start":3197},{"length":32,"start":3507},{"length":32,"start":5590},{"length":32,"start":6011},{"length":32,"start":6428},{"length":32,"start":6774},{"length":32,"start":7140},{"length":32,"start":8985},{"length":32,"start":9684},{"length":32,"start":10064},{"length":32,"start":10580}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c9081630252aab514611fa6575080630874327f14611b935780630b8e059b14611b5b5780630ddd60c614611b3a5780631377c16c14611a1b5780632772d156146118385780632e1d388d146119f95780633af52712146118c157806352f125f01461189657806355fb76af146118795780635c15a0b41461183d5780635e32e4e81461183857806371447ea81461169357806371ecc8fb146114ef57806377ff76e71461125b5780637869ee181461123f5780637a2b97dc146111d4578063851c1bb3146111845780638a3c5c69146111205780638d928af8146110dd5780638df44c54146110555780638f4ab9ca146110345780639e95f3fd14610fa8578063a93df2a414610f43578063aaabadc514610e90578063abaa335614610ce7578063b53a70b214610c00578063c673bdaf14610bc3578063cf7b287f14610b5d578063f706144514610b28578063fa399f2a14610392578063fbfa77cf1461034f5763fd267f3914610187575f80fd5b34610323576040600319360112610323576101a0611fda565b602435906101ac6127a4565b6706f05b59d3b200008211610327576101c482612a29565b6101cd81612254565b6101d68261243d565b916040516101e381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600260205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169161027d81612b35565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e92602092610309575b50604051908152a2005b610312906120ac565b5f6102ff565b6040513d5f823e3d90fd5b5f80fd5b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576103ab611fda565b6103b3612746565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f81602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610318575f905f92610acb575b506001600160a01b0383165f52600260205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610ac1575b84610ab1575b61047287612915565b94905f5b8681106108225789896001600160a01b0382165f52600360205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610818575b85610806575b6104c784612915565b96905f5b8881106104d457005b6104de8189612213565b516104ec575b6001016104cb565b986001600160a01b036104ff8b84612213565b51169061050c8b8a612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561080257604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107f7579082916107e0575b506107b357505f99816105c8828b612213565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107385761060e818a612213565b5186156107105761061e9061248f565b6001670de0b6b3a764000061065f8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c8783010401901515026124ac565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f20610693848254612482565b905561069f828b612213565b519081848103116106e3576001936106d9916001600160a01b038c165f52600860205260405f20905f5260205260405f2092038254612482565b90555b90506104e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001918561077d5761074a828b612213565b51906001600160a01b038a165f52600760205260405f20905f5260205261077660405f20918254612482565b90556106dc565b610787828b612213565b51906001600160a01b038a165f52600860205260405f20905f5260205261077660405f20918254612482565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6107e9906120ac565b6107f457808c6105b5565b80fd5b6040513d84823e3d90fd5b5080fd5b905061081281836124bf565b906104be565b82151595506104b8565b61082c8187612213565b5161083a575b600101610476565b6001600160a01b0361084c8284612213565b5116906108598188612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561032357604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857610aa2575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610937868d612213565b51936040519485521692a38815610a27576109528188612213565b518515610710576109629061248f565b6001670de0b6b3a76400006109a3897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b8783010401901515026124ac565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f206109d7848254612482565b90556109e38289612213565b519081848103116106e357600193610a1d916001600160a01b038f165f52600860205260405f20905f5260205260405f2092038254612482565b90555b9050610832565b60019184610a6c57610a398289612213565b51906001600160a01b038d165f52600760205260405f20905f52602052610a6560405f20918254612482565b9055610a20565b610a768289612213565b51906001600160a01b038d165f52600860205260405f20905f52602052610a6560405f20918254612482565b610aab906120ac565b8b6108ff565b50610abc83826124bf565b610469565b8115159450610463565b9150503d805f833e610add81836120dc565b8101906040818303126103235780519167ffffffffffffffff928381116103235781610b0a9184016123dc565b92602083015190811161032357610b2192016123dc565b908361042a565b3461032357604060031936011261032357610b5b610b44611fda565b610b4c611ff0565b90610b5681612500565b61268f565b005b3461032357604060031936011261032357610b76611fda565b610b7e611ff0565b90610b876127a4565b610b9081612915565b915f5b838110610b9c57005b80610bbd6001600160a01b03610bb460019487612213565b51168785612a71565b01610b93565b34610323576020600319360112610323576001600160a01b03610be4611fda565b165f526004602052602060ff60405f2054166040519015158152f35b3461032357606060031936011261032357610c19611fda565b610c21611ff0565b604435906001600160a01b039283831680840361032357604090610c436127a4565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561031857610cb4575b610b5b9350612a71565b6040843d604011610cdf575b81610ccd604093836120dc565b8101031261032357610b5b9350610caa565b3d9150610cc0565b3461032357604060031936011261032357610d00611fda565b60243590610d0c6127a4565b6706f05b59d3b200008211610e6857610d2482612a29565b610d2d81612254565b610d368261243d565b91604051610d4381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610ddd81612b03565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd926020926103095750604051908152a2005b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610318576020925f92610f14575b5060405191168152f35b610f35919250833d8511610f3c575b610f2d81836120dc565b8101906123bd565b9083610f0a565b503d610f23565b3461032357602060031936011261032357600435610f5f6127a4565b6706f05b59d3b200008111610e6857602081610f9b7f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f693612a29565b80600155604051908152a1005b346103235760208060031936011261032357610fc2611fda565b90610fcc82612915565b90610fd6826121c4565b925f946001600160a01b03809116955b848110610fff5760405180610ffb8882612028565b0390f35b600190875f526008845260405f20836110188388612213565b51165f52845260405f205461102d8289612213565b5201610fe6565b3461032357602060031936011261032357610b5b611050611fda565b612254565b34610323576020806003193601126103235761106f611fda565b9061107982612915565b90611083826121c4565b925f946001600160a01b03809116955b8481106110a85760405180610ffb8882612028565b600190875f526007845260405f20836110c18388612213565b51165f52845260405f20546110d68289612213565b5201611093565b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103235760206003193601126103235760043561113c6127a4565b6706f05b59d3b200008111610327576020816111787fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d93612a29565b805f55604051908152a1005b34610323576020600319360112610323576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610323576111cc602091612147565b604051908152f35b34610323576020600319360112610323576001600160a01b036111f5611fda565b165f526003602052602060405f206040519061121082612063565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610323575f6003193601126103235760205f54604051908152f35b3461032357606060031936011261032357611274611fda565b61127c611ff0565b90604435918215159081840361032357611294612746565b6001600160a01b0380931691825f52826020926004845260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146114e457835f9687925b8915611469578483878c5f9b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb985b6113698461243d565b6040519061137682612063565b67ffffffffffffffff809116825260036113e6868401948686528b5f5260028852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a1692161717905561243d565b956040839051976113f689612063565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055604061143a905192839283909291602090604083019483521515910152565b0390a28d518c815290151560208201529081906040820190565b0390a289519586521693a38351928352820152f35b8483878c6001549b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb98611360565b835f549687926112e5565b346103235760208060031936011261032357611509611fda565b61151281612254565b6001600160a01b039182821692835f526002825260405f20906040519161153883612063565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f549381611688575b5061156957005b6115728361243d565b90806040519261158184612063565b168252848201905f8252875f526002865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261160081612b35565b843b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e936103095750604051908152a2005b905083141587611562565b3461032357602080600319360112610323576116ad611fda565b6116b681612254565b6001600160a01b039182821692835f526003825260405f2090604051916116dc83612063565b549167ffffffffffffffff9060ff8285169485835260401c161590858215910152600154938161182d575b5061170e57005b6117178361243d565b90806040519261172684612063565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926117a581612b03565b843b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd936103095750604051908152a2005b905083141587611707565b612006565b34610323576020600319360112610323576001600160a01b0361185e611fda565b165f526002602052602060405f206040519061121082612063565b34610323575f600319360112610323576020600154604051908152f35b3461032357602060031936011261032357610b5b6118b2611fda565b6118bb81612595565b9061268f565b34610323576040600319360112610323576118da611fda565b602435906118e781612500565b670de0ad9b58f1600082116119d1576118ff81612254565b6001600160a01b039182821692835f5260066020528160405f20557f0000000000000000000000000000000000000000000000000000000000000000169161194681612b03565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34926020926103095750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020604051670de0ad9b58f160008152f35b3461032357604060031936011261032357611a34611fda565b60243590611a4181612500565b670de0ad9b58f1600082116119d157611a5981612254565b6001600160a01b039182821692835f5260056020528160405f20557f00000000000000000000000000000000000000000000000000000000000000001691611aa081612b35565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611b2b5750604051908152a2005b611b34906120ac565b846102ff565b346103235760406003193601126103235760206111cc6024356004356124bf565b34610323576020600319360112610323576001600160a01b03611b7c611fda565b165f526005602052602060405f2054604051908152f35b346103235760208060031936011261032357611bad611fda565b906001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528281600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156103185782915f91611f6c575b501692308414611f44571690815f526004815260ff60405f205416611f1857815f526004815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152826004820152604081602481875afa908115610318575f905f92611ef4575b50611cb79061243d565b9060405190611cc582612063565b67ffffffffffffffff80931682528382019015158152845f52600284528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc0000000000000000000000000000000000000000000000000000000083528560048401526040836024818a5afa928315610318575f905f94611ec0575b50611d7b9061243d565b938060405195611d8a87612063565b1685528585019315158452865f526003865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528260048201528181602481875afa5f9181611e8e575b50938291602495611e7c575b50604051948580927f0252aab50000000000000000000000000000000000000000000000000000000082528660048301525afa5f9381611e4d575b50611e3e57005b6006915f525260405f20555f80f35b9093508181813d8311611e75575b611e6581836120dc565b8101031261032357519284611e37565b503d611e5b565b845f526005835260405f205585611dfc565b9150938282813d8311611eb9575b611ea681836120dc565b8101031261032357905190936024611df0565b503d611e9c565b611d7b9450611ee7915060403d604011611eed575b611edf81836120dc565b81019061212a565b93611d71565b503d611ed5565b611cb79250611f12915060403d604011611eed57611edf81836120dc565b91611cad565b507fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250848092503d8311611f9f575b611f8581836120dc565b810103126103235751818116810361032357819085611c15565b503d611f7b565b34610323576020600319360112610323576020906001600160a01b03611fca611fda565b165f526006825260405f20548152f35b600435906001600160a01b038216820361032357565b602435906001600160a01b038216820361032357565b34610323575f6003193601126103235760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b82811061204f575050505090565b835185529381019392810192600101612041565b6040810190811067ffffffffffffffff82111761207f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161207f57604052565b6060810190811067ffffffffffffffff82111761207f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761207f57604052565b5190811515820361032357565b91908260409103126103235761214460208351930161211d565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526121a6816120c0565b51902090565b67ffffffffffffffff811161207f5760051b60200190565b906121ce826121ac565b6121db60405191826120dc565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061220982946121ac565b0190602036910137565b80518210156122275760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b601f9060445f6001600160a01b03926040519360209481868201937ffa399f2a000000000000000000000000000000000000000000000000000000008552166024820152602481526122a5816120c0565b836040519586809581947f48c894910000000000000000000000000000000000000000000000000000000083528a60048401525180918160248501528484015e838382840101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09a8b91011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af180156103185761234a57505050565b3d805f833e61235981836120dc565b810192828285031261032357815167ffffffffffffffff9283821161032357019380601f8601121561032357845192831161207f576123a28460405193601f86011601836120dc565b8282528383860101116103235781835f95018483015e010152565b9081602091031261032357516001600160a01b03811681036103235790565b9080601f83011215610323578151906020916123f7816121ac565b9361240560405195866120dc565b81855260208086019260051b82010192831161032357602001905b82821061242e575050505090565b81518152908301908301612420565b67ffffffffffffffff90818111612452571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b919082018092116106e357565b90670de0b6b3a7640000918281029281840414901517156106e357565b818102929181159184041417156106e357565b906124ec64174876e8009283926124e5670de0b6b3a764000091838303838510026124ac565b0490612482565b048181029181830414901517156106e35790565b6001600160a01b03908161251382612595565b168015612554573303612524575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361032357565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa908115612685575f9161260c575b5001511690565b90506060813d60601161267d575b81612627606093836120dc565b81010312610323578151906060820182811067ffffffffffffffff82111761207f57612673918491825261265a81612581565b845261266860208201612581565b602085015201612581565b828201525f612605565b3d915061261a565b82513d5f823e3d90fd5b9061269982612915565b92905f5b8481106126ab575050505050565b6001906001600160a01b03806126c18386612213565b5116818616805f5260086020818152604094855f20855f528252855f205495866126f3575b505050505050500161269d565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612732878d88612b67565b519586528a1694a45f8080808080806126e6565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361277857565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6127d07fffffffff000000000000000000000000000000000000000000000000000000005f3516612147565b6001600160a01b036040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103185784925f926128f3575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610318575f926128bd575b50501561289557565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116128ec575b6128d481836120dc565b81010312610323576128e59061211d565b5f8061288c565b503d6128ca565b606491925061290e90843d8611610f3c57610f2d81836120dc565b919061283b565b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610318575f9361298b575b5050815190565b909192503d805f833e61299e81836120dc565b810160209182818303126103235780519067ffffffffffffffff821161032357019281601f850112156103235783516129d6816121ac565b946129e460405196876120dc565b818652848087019260051b820101938411610323578401905b838210612a11575050505050905f80612984565b815183811681036103235781529084019084016129fd565b64174876e8008082048181029181830414901517156106e35703612a4957565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612aaa575b505050505050565b82612aef877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612b67565b6040519687521694a45f8080808080612aa2565b6001600160a01b03165f52600360205261214467ffffffffffffffff60405f205416600660205260405f2054906124bf565b6001600160a01b03165f52600260205261214467ffffffffffffffff60405f205416600560205260405f2054906124bf565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208083019182526001600160a01b0394909416602483015260448083019590955293815290925f91612bbf6064826120dc565b519082855af115610318575f513d612c1b57506001600160a01b0381163b155b612be65750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415612bdf56fea2646970667358221220af4d7b7326f3e2d7a8e0ba230faabb4ec5497c4f0aa75f9bd32c889273f022e164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x1FA6 JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1B93 JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1B5B JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1B3A JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1A1B JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x19F9 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x18C1 JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x1896 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x1879 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x183D JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x1693 JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x14EF JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x125B JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x123F JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x11D4 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1184 JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1120 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x10DD JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0x1055 JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x1034 JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0xFA8 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0xF43 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xE90 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xC00 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xBC3 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xB5D JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB28 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x34F JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x187 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A0 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AC PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x327 JUMPI PUSH2 0x1C4 DUP3 PUSH2 0x2A29 JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH2 0x1D6 DUP3 PUSH2 0x243D JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1E3 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x27D DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x312 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH0 PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x3AB PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0x2746 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0xACB JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAC1 JUMPI JUMPDEST DUP5 PUSH2 0xAB1 JUMPI JUMPDEST PUSH2 0x472 DUP8 PUSH2 0x2915 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x822 JUMPI DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x818 JUMPI JUMPDEST DUP6 PUSH2 0x806 JUMPI JUMPDEST PUSH2 0x4C7 DUP5 PUSH2 0x2915 JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x4D4 JUMPI STOP JUMPDEST PUSH2 0x4DE DUP2 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x4EC JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4CB JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4FF DUP12 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x50C DUP12 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x7F7 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x7E0 JUMPI JUMPDEST POP PUSH2 0x7B3 JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5C8 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x738 JUMPI PUSH2 0x60E DUP2 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x710 JUMPI PUSH2 0x61E SWAP1 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x65F DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24AC JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x693 DUP5 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x69F DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0x6D9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x4E4 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x77D JUMPI PUSH2 0x74A DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6DC JUMP JUMPDEST PUSH2 0x787 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x7E9 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH2 0x7F4 JUMPI DUP1 DUP13 PUSH2 0x5B5 JUMP JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x812 DUP2 DUP4 PUSH2 0x24BF JUMP JUMPDEST SWAP1 PUSH2 0x4BE JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x82C DUP2 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x83A JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x84C DUP3 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x859 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xAA2 JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x937 DUP7 DUP14 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA27 JUMPI PUSH2 0x952 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x710 JUMPI PUSH2 0x962 SWAP1 PUSH2 0x248F JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9A3 DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24AC JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x9D7 DUP5 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x9E3 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA1D SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA6C JUMPI PUSH2 0xA39 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA20 JUMP JUMPDEST PUSH2 0xA76 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2482 JUMP JUMPDEST PUSH2 0xAAB SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP12 PUSH2 0x8FF JUMP JUMPDEST POP PUSH2 0xABC DUP4 DUP3 PUSH2 0x24BF JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x463 JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xADD DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x323 JUMPI DUP2 PUSH2 0xB0A SWAP2 DUP5 ADD PUSH2 0x23DC JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x323 JUMPI PUSH2 0xB21 SWAP3 ADD PUSH2 0x23DC JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x42A JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xB44 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB4C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB56 DUP2 PUSH2 0x2500 JUMP JUMPDEST PUSH2 0x268F JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB76 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB7E PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB87 PUSH2 0x27A4 JUMP JUMPDEST PUSH2 0xB90 DUP2 PUSH2 0x2915 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB9C JUMPI STOP JUMPDEST DUP1 PUSH2 0xBBD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBB4 PUSH1 0x1 SWAP5 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP8 DUP6 PUSH2 0x2A71 JUMP JUMPDEST ADD PUSH2 0xB93 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBE4 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xC19 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xC21 PUSH2 0x1FF0 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xC43 PUSH2 0x27A4 JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xCB4 JUMPI JUMPDEST PUSH2 0xB5B SWAP4 POP PUSH2 0x2A71 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xCDF JUMPI JUMPDEST DUP2 PUSH2 0xCCD PUSH1 0x40 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0xB5B SWAP4 POP PUSH2 0xCAA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCC0 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xD00 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xD0C PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xE68 JUMPI PUSH2 0xD24 DUP3 PUSH2 0x2A29 JUMP JUMPDEST PUSH2 0xD2D DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH2 0xD36 DUP3 PUSH2 0x243D JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xD43 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xDDD DUP2 PUSH2 0x2B03 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xF14 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xF35 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF3C JUMPI JUMPDEST PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x23BD JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xF0A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF23 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xF5F PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xE68 JUMPI PUSH1 0x20 DUP2 PUSH2 0xF9B PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x2A29 JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xFC2 PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0xFCC DUP3 PUSH2 0x2915 JUMP JUMPDEST SWAP1 PUSH2 0xFD6 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0xFFF JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1018 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x102D DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0xFE6 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x1050 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x2254 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x106F PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0x1079 DUP3 PUSH2 0x2915 JUMP JUMPDEST SWAP1 PUSH2 0x1083 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x10A8 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x10C1 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x10D6 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0x1093 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x113C PUSH2 0x27A4 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x327 JUMPI PUSH1 0x20 DUP2 PUSH2 0x1178 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x2A29 JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI PUSH2 0x11CC PUSH1 0x20 SWAP2 PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x11F5 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1274 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x127C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO SWAP1 DUP2 DUP5 SUB PUSH2 0x323 JUMPI PUSH2 0x1294 PUSH2 0x2746 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP2 DUP3 PUSH0 MSTORE DUP3 PUSH1 0x20 SWAP3 PUSH1 0x4 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x14E4 JUMPI DUP4 PUSH0 SWAP7 DUP8 SWAP3 JUMPDEST DUP10 ISZERO PUSH2 0x1469 JUMPI DUP5 DUP4 DUP8 DUP13 PUSH0 SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 JUMPDEST PUSH2 0x1369 DUP5 PUSH2 0x243D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1376 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x3 PUSH2 0x13E6 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x2 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x243D JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x13F6 DUP10 PUSH2 0x2063 JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 PUSH2 0x143A SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP14 MLOAD DUP13 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 DUP10 MLOAD SWAP6 DUP7 MSTORE AND SWAP4 LOG3 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP5 DUP4 DUP8 DUP13 PUSH1 0x1 SLOAD SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 PUSH2 0x1360 JUMP JUMPDEST DUP4 PUSH0 SLOAD SWAP7 DUP8 SWAP3 PUSH2 0x12E5 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1509 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x1512 DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1538 DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x1688 JUMPI JUMPDEST POP PUSH2 0x1569 JUMPI STOP JUMPDEST PUSH2 0x1572 DUP4 PUSH2 0x243D JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1581 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x1600 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1562 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x16AD PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x16B6 DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x16DC DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x182D JUMPI JUMPDEST POP PUSH2 0x170E JUMPI STOP JUMPDEST PUSH2 0x1717 DUP4 PUSH2 0x243D JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1726 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x17A5 DUP2 PUSH2 0x2B03 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1707 JUMP JUMPDEST PUSH2 0x2006 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x185E PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x18B2 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x18BB DUP2 PUSH2 0x2595 JUMP JUMPDEST SWAP1 PUSH2 0x268F JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x18DA PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x18E7 DUP2 PUSH2 0x2500 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x18FF DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1946 DUP2 PUSH2 0x2B03 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A34 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1A41 DUP2 PUSH2 0x2500 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x1A59 DUP2 PUSH2 0x2254 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1AA0 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1B2B JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1B34 SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP5 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x11CC PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x24BF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1B7C PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1BAD PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1F6C JUMPI JUMPDEST POP AND SWAP3 ADDRESS DUP5 EQ PUSH2 0x1F44 JUMPI AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x1F18 JUMPI DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x1EF4 JUMPI JUMPDEST POP PUSH2 0x1CB7 SWAP1 PUSH2 0x243D JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1CC5 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP5 PUSH0 MSTORE PUSH1 0x2 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP6 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x1EC0 JUMPI JUMPDEST POP PUSH2 0x1D7B SWAP1 PUSH2 0x243D JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1D8A DUP8 PUSH2 0x2063 JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP7 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL PUSH0 SWAP2 DUP2 PUSH2 0x1E8E JUMPI JUMPDEST POP SWAP4 DUP3 SWAP2 PUSH1 0x24 SWAP6 PUSH2 0x1E7C JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL PUSH0 SWAP4 DUP2 PUSH2 0x1E4D JUMPI JUMPDEST POP PUSH2 0x1E3E JUMPI STOP JUMPDEST PUSH1 0x6 SWAP2 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1E75 JUMPI JUMPDEST PUSH2 0x1E65 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD SWAP3 DUP5 PUSH2 0x1E37 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E5B JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP6 PUSH2 0x1DFC JUMP JUMPDEST SWAP2 POP SWAP4 DUP3 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1EB9 JUMPI JUMPDEST PUSH2 0x1EA6 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI SWAP1 MLOAD SWAP1 SWAP4 PUSH1 0x24 PUSH2 0x1DF0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E9C JUMP JUMPDEST PUSH2 0x1D7B SWAP5 POP PUSH2 0x1EE7 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI JUMPDEST PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x212A JUMP JUMPDEST SWAP4 PUSH2 0x1D71 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1ED5 JUMP JUMPDEST PUSH2 0x1CB7 SWAP3 POP PUSH2 0x1F12 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 PUSH2 0x1CAD JUMP JUMPDEST POP PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP5 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1F9F JUMPI JUMPDEST PUSH2 0x1F85 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1C15 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1F7B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1FCA PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x204F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2041 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2144 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x211D JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x21A6 DUP2 PUSH2 0x20C0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x21CE DUP3 PUSH2 0x21AC JUMP JUMPDEST PUSH2 0x21DB PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2209 DUP3 SWAP5 PUSH2 0x21AC JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2227 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1F SWAP1 PUSH1 0x44 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x40 MLOAD SWAP4 PUSH1 0x20 SWAP5 DUP2 DUP7 DUP3 ADD SWAP4 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x22A5 DUP2 PUSH2 0x20C0 JUMP JUMPDEST DUP4 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP6 DUP2 SWAP5 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP11 PUSH1 0x4 DUP5 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP6 ADD MSTORE DUP5 DUP5 ADD MCOPY DUP4 DUP4 DUP3 DUP5 ADD ADD MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP11 DUP12 SWAP2 ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0x234A JUMPI POP POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2359 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP3 DUP3 DUP3 DUP6 SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP3 GT PUSH2 0x323 JUMPI ADD SWAP4 DUP1 PUSH1 0x1F DUP7 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP5 MLOAD SWAP3 DUP4 GT PUSH2 0x207F JUMPI PUSH2 0x23A2 DUP5 PUSH1 0x40 MLOAD SWAP4 PUSH1 0x1F DUP7 ADD AND ADD DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x323 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x323 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x23F7 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP4 PUSH2 0x2405 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x323 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x242E JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2420 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2452 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x24EC PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x24E5 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x24AC JUMP JUMPDEST DIV SWAP1 PUSH2 0x2482 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x2513 DUP3 PUSH2 0x2595 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x2554 JUMPI CALLER SUB PUSH2 0x2524 JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2685 JUMPI PUSH0 SWAP2 PUSH2 0x260C JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x267D JUMPI JUMPDEST DUP2 PUSH2 0x2627 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH2 0x2673 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x265A DUP2 PUSH2 0x2581 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x2668 PUSH1 0x20 DUP3 ADD PUSH2 0x2581 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x2581 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x2605 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x261A JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x2699 DUP3 PUSH2 0x2915 JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x26AB JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x26C1 DUP4 DUP7 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x26F3 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x269D JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2732 DUP8 DUP14 DUP9 PUSH2 0x2B67 JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x26E6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x2778 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x27D0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x28F3 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x28BD JUMPI JUMPDEST POP POP ISZERO PUSH2 0x2895 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x28EC JUMPI JUMPDEST PUSH2 0x28D4 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0x28E5 SWAP1 PUSH2 0x211D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x288C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x28CA JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x290E SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xF3C JUMPI PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x283B JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP4 PUSH2 0x298B JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x299E DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP4 MLOAD PUSH2 0x29D6 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP5 PUSH2 0x29E4 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x323 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2A11 JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x2984 JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x29FD JUMP JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SUB PUSH2 0x2A49 JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2AAA JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2AEF DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2B67 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2AA2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24BF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24BF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP1 SWAP3 PUSH0 SWAP2 PUSH2 0x2BBF PUSH1 0x64 DUP3 PUSH2 0x20DC JUMP JUMPDEST MLOAD SWAP1 DUP3 DUP6 GAS CALL ISZERO PUSH2 0x318 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x2C1B JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x2BE6 JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x2BDF JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF 0x4D PUSH28 0x7326F3E2D7A8E0BA230FAABB4EC5497C4F0AA75F9BD32C889273F022 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"3120:30799:45:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1581:26:46;3120:30799:45;1581:26:46;;;3120:30799:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:45;;;;;;;:::i;:::-;;;1525:73:32;;;:::i;:::-;4720:5:45;7248:55;;7244:127;;7402:20;;;:::i;:::-;8176:4;;;:::i;:::-;31750:39;;;:::i;:::-;3120:30799;;;;;;:::i;:::-;;;;;;;31707:129;;;3120:30799;26774:4;3120:30799;;-1:-1:-1;;;;;3120:30799:45;;;;;;;;31667:31;31707:129;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;31931:6;3120:30799;31977:54;;;;:::i;:::-;31931:101;;;;;3120:30799;;;31931:101;;-1:-1:-1;;;;;3120:30799:45;;;;;31931:101;;3120:30799;;;;;;-1:-1:-1;;3120:30799:45;;;;;;-1:-1:-1;;31931:101:45;;;;;;;32048:68;31931:101;31707:129;31931:101;;;3120:30799;;;;;;;32048:68;3120:30799;31931:101;;;;:::i;:::-;3120:30799;31931:101;;;3120:30799;;;;;;;;;31931:101;3120:30799;;;7244:127;7326:34;3120:30799;7326:34;3120:30799;;7326:34;3120:30799;;;;;-1:-1:-1;;3120:30799:45;;;;;;;;-1:-1:-1;;;;;8671:6:45;3120:30799;;;;;;;;;-1:-1:-1;;3120:30799:45;;;;;;;:::i;:::-;436:67:47;;:::i;:::-;3120:30799:45;;;9345:33;;-1:-1:-1;;;;;3120:30799:45;;;9345:33;;3120:30799;;9345:6;3120:30799;9345:6;;-1:-1:-1;;;;;9345:6:45;3120:30799;9345:33;;;;;;;3120:30799;;;9345:33;;;3120:30799;;-1:-1:-1;;;;;3120:30799:45;;;;;;;;;;;;;;11336:30;3120:30799;;;;;;11435:30;3120:30799;11499:28;;;;:57;;;;3120:30799;11566:199;;;3120:30799;11825:28;;;:::i;:::-;11868:13;;3120:30799;11883:13;;;;;;11091:20;;-1:-1:-1;;;;;3120:30799:45;;;;11192:32;3120:30799;;;;;;;;11290:134;3120:30799;;11387:31;3120:30799;;;;;;11435:30;3120:30799;11499:28;;;:57;;;;11863:1939;11566:199;;;11863:1939;11825:28;;;:::i;:::-;11868:13;;3120:30799;11883:13;;;;;;3120:30799;11898:3;11921:13;;;;:::i;:::-;3120:30799;11917:1875;;11898:3;3120:30799;;11868:13;;11917:1875;11973:13;-1:-1:-1;;;;;11973:13:45;;;;:::i;:::-;3120:30799;;12041:13;;;;;:::i;:::-;3120:30799;-1:-1:-1;;;;;9345:6:45;3120:30799;12005:50;;;;3120:30799;;12005:50;3120:30799;12005:50;;;3120:30799;12005:50;;3120:30799;12034:4;3120:30799;;;;;;;;9345:6;;3120:30799;9345:6;;-1:-1:-1;;;;;9345:6:45;3120:30799;12005:50;;;;;;;;;;;11917:1875;3120:30799;;;12230:240;3120:30799;12437:13;;;;;;:::i;:::-;3120:30799;;;;;;12398:53;3120:30799;-1:-1:-1;;;;;3120:30799:45;;12398:53;;12488:1290;;;;13094:13;;;;:::i;:::-;3120:30799;2004:6:38;;2000:58;;2153:5;;;:::i;:::-;3120:30799:45;465:4:38;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;3120:30799:45;-1:-1:-1;;;;;3120:30799:45;;;;13254:19;3120:30799;;;;;;;;;;;;;13254:51;3120:30799;;;13254:51;:::i;:::-;3120:30799;;13366:13;;;;:::i;:::-;3120:30799;;;;;;;;;;;13327:70;3120:30799;-1:-1:-1;;;;;3120:30799:45;;;;13327:22;3120:30799;;;;;;;;;;;;;;;;;13327:70;:::i;:::-;3120:30799;;12488:1290;11917:1875;;;;3120:30799;;;;;;;;;;2000:58:38;2033:14;3120:30799:45;2033:14:38;3120:30799:45;;2033:14:38;12488:1290:45;3120:30799;;11499:28;;;13617:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:45;;;;13581:19;3120:30799;;;;;;;;;;13581:49;3120:30799;;;;;;13581:49;:::i;:::-;3120:30799;;12488:1290;;13520:240;13724:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:45;;;;13685:22;3120:30799;;;;;;;;;;13685:52;3120:30799;;;;;;13685:52;:::i;3120:30799::-;;;;;;;;;;12005:50;;;;:::i;:::-;3120:30799;;12005:50;;;;3120:30799;;;12005:50;3120:30799;;;;;;;;;12005:50;3120:30799;;;11566:199;11675:79;;;;;;:::i;:::-;11566:199;;;11499:57;11531:25;;;;-1:-1:-1;11499:57:45;;11898:3;11921:13;;;;:::i;:::-;3120:30799;11917:1875;;11898:3;3120:30799;;11868:13;;11917:1875;-1:-1:-1;;;;;11973:13:45;;;;:::i;:::-;3120:30799;;12041:13;;;;;:::i;:::-;3120:30799;-1:-1:-1;;;;;9345:6:45;3120:30799;12005:50;;;;3120:30799;;12005:50;3120:30799;12005:50;;;3120:30799;12005:50;;3120:30799;12034:4;3120:30799;;;;;;;;;9345:6;3120:30799;9345:6;;-1:-1:-1;;;;;9345:6:45;3120:30799;12005:50;;;;;;;;11917:1875;12332:13;;;12294:52;3120:30799;-1:-1:-1;;;;;12332:13:45;;;;:::i;:::-;3120:30799;;;;;;;;12294:52;;12488:1290;;;;13094:13;;;;:::i;:::-;3120:30799;2004:6:38;;2000:58;;2153:5;;;:::i;:::-;3120:30799:45;465:4:38;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;3120:30799:45;-1:-1:-1;;;;;3120:30799:45;;;;13254:19;3120:30799;;;;;;;;;;;;;13254:51;3120:30799;;;13254:51;:::i;:::-;3120:30799;;13366:13;;;;:::i;:::-;3120:30799;;;;;;;;;;;13327:70;3120:30799;-1:-1:-1;;;;;3120:30799:45;;;;13327:22;3120:30799;;;;;;;;;;;;;;;;;13327:70;:::i;:::-;3120:30799;;12488:1290;11917:1875;;;;12488:1290;3120:30799;;11499:28;;;13617:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:45;;;;13581:19;3120:30799;;;;;;;;;;13581:49;3120:30799;;;;;;13581:49;:::i;:::-;3120:30799;;12488:1290;;13520:240;13724:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:45;;;;13685:22;3120:30799;;;;;;;;;;13685:52;3120:30799;;;;;;13685:52;:::i;12005:50::-;;;;:::i;:::-;;;;11566:199;11675:79;;;;;:::i;:::-;11566:199;;11499:57;11531:25;;;;-1:-1:-1;11499:57:45;;9345:33;;;;;;3120:30799;9345:33;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;9345:33;;;;3120:30799;;;;;-1:-1:-1;;3120:30799:45;;;;;30298:9;3120:30799;;:::i;:::-;;;:::i;:::-;7088:4;;;;:::i;:::-;30298:9;:::i;:::-;3120:30799;;;;;;-1:-1:-1;;3120:30799:45;;;;;;;:::i;:::-;;;:::i;:::-;1525:73:32;;;:::i;:::-;29131:28:45;;;:::i;:::-;29175:13;3120:30799;29190:13;;;;;;3120:30799;29205:3;29239:13;29306:5;-1:-1:-1;;;;;29239:13:45;3120:30799;29239:13;;;:::i;:::-;3120:30799;;29306:5;;;:::i;:::-;3120:30799;29175:13;;3120:30799;;;;;-1:-1:-1;;3120:30799:45;;;;;-1:-1:-1;;;;;3120:30799:45;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:45;;;;;;;:::i;:::-;;;:::i;:::-;;;;-1:-1:-1;;;;;3120:30799:45;;;;;;;;;;1525:73:32;;;:::i;:::-;3120:30799:45;;;29588:52;;;;3120:30799;29588:52;;3120:30799;;;;29588:52;;3120:30799;;;;;29588:6;3120:30799;29588:52;;;;;;;;3120:30799;29689:5;;;;:::i;29588:52::-;3120:30799;29588:52;;3120:30799;29588:52;;;;;;3120:30799;29588:52;;;:::i;:::-;;;3120:30799;;;;29689:5;;-1:-1:-1;29588:52:45;;;;;-1:-1:-1;29588:52:45;;3120:30799;;;;;-1:-1:-1;;3120:30799:45;;;;;;;:::i;:::-;;;1525:73:32;;;:::i;:::-;4720:5:45;7581:57;;7577:130;;7738:21;;;:::i;:::-;8176:4;;;:::i;:::-;32783:40;;;:::i;:::-;3120:30799;;;;;;:::i;:::-;;;;;;;32740:130;;;3120:30799;27118:4;3120:30799;;-1:-1:-1;;;;;3120:30799:45;;;;;;;;32699:32;32740:130;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;32966:6;3120:30799;33013:55;;;;:::i;:::-;32966:103;;;;;3120:30799;;;32966:103;;-1:-1:-1;;;;;3120:30799:45;;;;;32966:103;;3120:30799;;;;;;-1:-1:-1;;3120:30799:45;;;;;;-1:-1:-1;;32966:103:45;;;;;;;33085:70;32966:103;32740:130;32966:103;;;3120:30799;;;;;;33085:70;3120:30799;7577:130;7661:35;3120:30799;7661:35;3120:30799;;7661:35;3120:30799;;;;;-1:-1:-1;;3120:30799:45;;;;;;;;1581:26:46;;-1:-1:-1;;;;;1581:26:46;3120:30799:45;;;1124:6:44;3120:30799:45;;1581:26:46;;;;;;;;;3120:30799:45;1581:26:46;;;3120:30799:45;;;;;;;;;1581:26:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;3120:30799:45;;;;;-1:-1:-1;;3120:30799:45;;;;;;;1525:73:32;;:::i;:::-;4720:5:45;7581:57;;7577:130;;3120:30799;7738:21;;26371:70;7738:21;;:::i;:::-;3120:30799;;;;;;;;26371:70;3120:30799;;;;;;;-1:-1:-1;;3120:30799:45;;;;;;;:::i;:::-;15924:28;;;;:::i;:::-;15976:24;;;;:::i;:::-;16015:13;3120:30799;;-1:-1:-1;;;;;3120:30799:45;;;16010:124;16030:13;;;;;;3120:30799;;;;;;;:::i;:::-;;;;16045:3;3120:30799;;;;;16080:22;3120:30799;;;;;16109:13;;;;;:::i;:::-;3120:30799;;;;;;;;;;16064:59;;;;:::i;:::-;3120:30799;;16015:13;;3120:30799;;;;;-1:-1:-1;;3120:30799:45;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;-1:-1:-1;;3120:30799:45;;;;;;;:::i;:::-;15502:28;;;;:::i;:::-;15554:24;;;;:::i;:::-;15593:13;3120:30799;;-1:-1:-1;;;;;3120:30799:45;;;15588:121;15608:13;;;;;;3120:30799;;;;;;;:::i;15623:3::-;3120:30799;;;;;15658:19;3120:30799;;;;;15684:13;;;;;:::i;:::-;3120:30799;;;;;;;;;;15642:56;;;;:::i;:::-;3120:30799;;15593:13;;3120:30799;;;;;-1:-1:-1;;3120:30799:45;;;;;;;;-1:-1:-1;;;;;1124:6:44;3120:30799:45;;;;;;;;;-1:-1:-1;;3120:30799:45;;;;;;;1525:73:32;;:::i;:::-;4720:5:45;7248:55;;7244:127;;3120:30799;7402:20;;25803:68;7402:20;;:::i;:::-;3120:30799;;;;;;;;25803:68;3120:30799;;;;;;-1:-1:-1;;3120:30799:45;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;3120:30799:45;;;;;-1:-1:-1;;;;;3120:30799:45;;:::i;:::-;;;;14798:32;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:45;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:45;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;436:67:47;;:::i;:::-;-1:-1:-1;;;;;3120:30799:45;;;;;;;;;;;;;;;;23815:4;3120:30799;;;;;;;23948:56;;;;;;3120:30799;23948:56;;;;24044:57;;;;;;;;3120:30799;24044:57;25031:90;3120:30799;24044:57;25244:69;24044:57;;;25136:92;24044:57;25136:92;24044:57;;24632:37;;;:::i;:::-;3120:30799;;;;;;:::i;:::-;;;;;;;24733:32;24817:38;24589:134;;;3120:30799;;;;;;;24549:31;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24817:38;:::i;:::-;3120:30799;;;;;;;;;:::i;:::-;;;;24774:135;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25031:90;3120:30799;;25031:90;;;;3120:30799;;;;;;;;;;;;;;;;;25031:90;;;;3120:30799;;;;;;;;;;;;;;;;;;;;25136:92;;;;3120:30799;;;;;;25244:69;;3120:30799;;;;;;;;;24044:57;3120:30799;;;;23815:4;3120:30799;24044:57;25031:90;3120:30799;24044:57;25244:69;24044:57;;;25136:92;24044:57;25136:92;24044:57;;;23948:56;3120:30799;;;23948:56;;;;;3120:30799;;;;;;-1:-1:-1;;3120:30799:45;;;;;;;:::i;:::-;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:45;;;;;;;;16627:31;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;16753:81;;;;3120:30799;16749:176;;;3120:30799;16749:176;31750:39;;;:::i;:::-;3120:30799;;;;;;;;:::i;:::-;;;;31707:129;;;3120:30799;;;;;;;16627:31;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;31931:6;3120:30799;31977:54;;;;:::i;:::-;31931:101;;;;;3120:30799;;;31931:101;;-1:-1:-1;;;;;3120:30799:45;;;;;31931:101;;3120:30799;;;;;;-1:-1:-1;;3120:30799:45;;;;;;-1:-1:-1;;31931:101:45;;;;;;;32048:68;31931:101;;;3120:30799;;;;;;32048:68;3120:30799;16753:81;16786:48;;;;;16753:81;;;3120:30799;;;;;;-1:-1:-1;;3120:30799:45;;;;;;;:::i;:::-;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:45;;;;;;;;17109:32;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;17190:33;3120:30799;17238:82;;;;3120:30799;17234:179;;;3120:30799;17234:179;32783:40;;;:::i;:::-;3120:30799;;;;;;;;:::i;:::-;;;;32740:130;;;3120:30799;;;;;;;17109:32;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;32966:6;3120:30799;33013:55;;;;:::i;:::-;32966:103;;;;;3120:30799;;;32966:103;;-1:-1:-1;;;;;3120:30799:45;;;;;32966:103;;3120:30799;;;;;;-1:-1:-1;;3120:30799:45;;;;;;-1:-1:-1;;32966:103:45;;;;;;;33085:70;32966:103;;;3120:30799;;;;;;33085:70;3120:30799;17238:82;17271:49;;;;;17238:82;;;3120:30799;;:::i;:::-;;;;;-1:-1:-1;;3120:30799:45;;;;;-1:-1:-1;;;;;3120:30799:45;;:::i;:::-;;;;14517:31;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;3120:30799:45;;;;;;14136:33;3120:30799;;;;;;;;;;;;-1:-1:-1;;3120:30799:45;;;;;30461:21;3120:30799;;:::i;:::-;30461:21;;;:::i;:::-;;;:::i;3120:30799::-;;;;;-1:-1:-1;;3120:30799:45;;;;;;;:::i;:::-;;;7088:4;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:45;;;;;;;;28563:31;3120:30799;;;;;;;28729:6;3120:30799;28776:55;;;;:::i;:::-;28729:103;;;;;3120:30799;;;28729:103;;-1:-1:-1;;;;;3120:30799:45;;;;;28729:103;;3120:30799;;;;;;-1:-1:-1;;3120:30799:45;;;;;;-1:-1:-1;;28729:103:45;;;;;;;28852:68;28729:103;3120:30799;28729:103;;;3120:30799;;;;;;28852:68;3120:30799;7864:127;7947:33;3120:30799;7947:33;3120:30799;;7947:33;3120:30799;;;;;-1:-1:-1;;3120:30799:45;;;;;;;;4975:9;3120:30799;;;;;;;;-1:-1:-1;;3120:30799:45;;;;;;;:::i;:::-;;;7088:4;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:45;;;;;;;;28180:30;3120:30799;;;;;;;28344:6;3120:30799;28390:54;;;;:::i;:::-;28344:101;;;;;3120:30799;;;28344:101;;-1:-1:-1;;;;;3120:30799:45;;;;;28344:101;;3120:30799;;;;;;-1:-1:-1;;3120:30799:45;;;;;;-1:-1:-1;;28344:101:45;;;;;;;28465:67;28344:101;3120:30799;28344:101;;;3120:30799;;;;;;28465:67;3120:30799;28344:101;;;;:::i;:::-;;;;3120:30799;;;;;-1:-1:-1;;3120:30799:45;;;;;;16364:79;3120:30799;;;;16364:79;:::i;3120:30799::-;;;;;-1:-1:-1;;3120:30799:45;;;;;-1:-1:-1;;;;;3120:30799:45;;:::i;:::-;;;;15055:30;3120:30799;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:45;;;;;;;:::i;:::-;;-1:-1:-1;;;;;3120:30799:45;;;21277:33;;:6;;3120:30799;21277:6;;;3120:30799;21277:33;;;;;;;;3120:30799;21277:33;;;3120:30799;;;21362:4;;21325:42;;21321:104;;3120:30799;;;;;;;;;;;;;;21435:87;;3120:30799;;;;;;;;;21557:4;3120:30799;;;;;;;;;;21634:49;;;3120:30799;21634:49;;3120:30799;;21634:49;3120:30799;21634:49;;;;;;;;;3120:30799;;;21634:49;;;3120:30799;21776:36;;;;:::i;:::-;3120:30799;;;;;;;:::i;:::-;;;;;;;21733:133;;;3120:30799;;;;;;;;21693:31;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21941:72;3120:30799;21941:72;;;3120:30799;21941:72;;3120:30799;;21941:72;3120:30799;21941:72;;;;;;;;;3120:30799;;;21941:72;;;3120:30799;22107:37;;;;:::i;:::-;3120:30799;;;;;;;;:::i;:::-;;;;22064:135;;;3120:30799;;;;;;;;22023:32;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;22731:54;;;3120:30799;22731:54;;3120:30799;22731:54;;3120:30799;22731:54;;;;3120:30799;;22731:54;;;3120:30799;22727:277;;;;3120:30799;22727:277;;;3120:30799;;;;23018:55;;;;3120:30799;23018:55;;;3120:30799;23018:55;;3120:30799;23018:55;;3120:30799;;23018:55;;;3120:30799;23014:281;;;3120:30799;23014:281;23136:31;3120:30799;;;;;;;;;;;23018:55;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;23018:55;;;;;;;;;22727:277;3120:30799;;;22847:30;3120:30799;;;;;;22727:277;;;22731:54;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;22731:54;;3120:30799;22731:54;;;;;;;21941:72;22107:37;21941:72;;;;;3120:30799;21941:72;3120:30799;21941:72;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;21634:49;21776:36;21634:49;;;;;3120:30799;21634:49;3120:30799;21634:49;;;;;;;:::i;:::-;;;;21435:87;21484:27;;3120:30799;21484:27;3120:30799;;;;21484:27;21321:104;21390:24;3120:30799;21390:24;3120:30799;;21390:24;21277:33;;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;21277:33;;;;;;;;;;3120:30799;;;;;-1:-1:-1;;3120:30799:45;;;;;;;-1:-1:-1;;;;;3120:30799:45;;:::i;:::-;;;;15252:31;3120:30799;;;;;;;;;;;;;-1:-1:-1;;;;;3120:30799:45;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;3120:30799:45;;;;;;:::o;:::-;;;;;-1:-1:-1;;3120:30799:45;;;;;;;;4720:5;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;1931:430:32:-;3120:30799:45;;;2303:50:32;;;2320:22;;3120:30799:45;;;;;;;2303:50:32;;;;;;:::i;:::-;3120:30799:45;2293:61:32;;1931:430;:::o;3120:30799:45:-;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;8733:151;3120:30799;8733:151;3120:30799;-1:-1:-1;;;;;;3120:30799:45;;;8808:68;;;;;;;;;;;3120:30799;8808:68;;;3120:30799;8808:68;;;;;;:::i;:::-;3120:30799;;;8794:83;;;;;;3120:30799;8794:83;;;8808:68;8794:83;;3120:30799;;;;;8808:68;3120:30799;;;;;;;;;;;;;;8808:68;3120:30799;;;;;;;8794:83;;:6;;3120:30799;8794:83;;;;;;;;8733:151;;;:::o;8794:83::-;;;-1:-1:-1;8794:83:45;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;3120:30799:45;;;;;;;;;8733:151::o;3120:30799::-;;;;;;;;;;-1:-1:-1;;;;;3120:30799:45;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;13296:213:70;3120:30799:45;13374:24:70;;;;13370:103;;3120:30799:45;13296:213:70;:::o;13370:103::-;13421:41;;;13452:2;13421:41;3120:30799:45;;;;13421:41:70;;3120:30799:45;;;;;;;;;;:::o;19669:4:31:-;;465::38;19669::31;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;18132:1064:45:-;;18361:104;19669:4:31;5832:87:38;;;838:5;5832:87;;;;;;;;;838:5;:::i;:::-;19669:4:31;18361:104:45;;:::i;:::-;19669:4:31;;;;;;;;;;;;;;;18132:1064:45;:::o;19202:340::-;-1:-1:-1;;;;;19298:21:45;;;;;:::i;:::-;3120:30799;19334:25;;19330:93;;19452:10;19437:25;19433:103;;19202:340;;:::o;19433:103::-;19485:40;19357:1;19485:40;19452:10;19485:40;3120:30799;;;;;19357:1;19485:40;19330:93;19382:30;;19357:1;19382:30;3120:30799;19382:30;3120:30799;;19357:1;19382:30;3120:30799;;;-1:-1:-1;;;;;3120:30799:45;;;;;;:::o;19813:201::-;3120:30799;;;;19933:32;;-1:-1:-1;;;;;3120:30799:45;;;19933:32;;;3120:30799;19933:32;3120:30799;;;19933:6;3120:30799;;19933:32;;;;;;;-1:-1:-1;19933:32:45;;;19813:201;19983:24;;3120:30799;;19813:201;:::o;19933:32::-;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;;19933:32;3120:30799;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;19933:32;;;;;;-1:-1:-1;19933:32:45;;;3120:30799;;;-1:-1:-1;3120:30799:45;;;;;30496:616;;30631:28;;;:::i;:::-;30675:13;;30687:1;30690:13;;;;;;30496:616;;;;;:::o;30705:3::-;3120:30799;;-1:-1:-1;;;;;30739:13:45;;;;;:::i;:::-;3120:30799;;;;;;30687:1;3120:30799;30794:22;3120:30799;;;;;;;30687:1;3120:30799;;30687:1;3120:30799;;;;30687:1;3120:30799;;30847:20;;30843:253;;30705:3;;;;;;;;3120:30799;30675:13;;30843:253;31015:66;3120:30799;;30687:1;3120:30799;;;;30687:1;3120:30799;;30687:1;3120:30799;;;30687:1;3120:30799;;;;30974:16;;;;;:::i;:::-;3120:30799;;;;;;31015:66;;30843:253;;;;;;;;;509:165:47;-1:-1:-1;;;;;586:6:47;3120:30799:45;564:10:47;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;3120:30799:45;;616:41:47;;1688:201:32;1762:20;1774:7;;;;1762:20;:::i;:::-;-1:-1:-1;;;;;3120:30799:45;;;1336:22:44;;;:6;;;:22;:6;;;3120:30799:45;1336:22:44;;;;;;;;;1774:7:32;1336:22:44;;;1688:201:32;3120:30799:45;;;;;1336:64:44;;;;;3120:30799:45;1336:64:44;;:22;:64;;3120:30799:45;1820:10:32;3120:30799:45;;;;1394:4:44;3120:30799:45;;;;;1336:64:44;;;;;;;1774:7:32;1336:64:44;;;1688:201:32;1797:34;;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;1336:22:44;1774:7:32;1854:18;1336:64:44;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799:45;;;;;;;:::i;:::-;1336:64:44;;;;;;;;;:22;3120:30799:45;1336:22:44;;;;;;;;;;;;;;;:::i;:::-;;;;;19548:199:45;;-1:-1:-1;;;;;3120:30799:45;;;19679:26;3120:30799;19679:26;;3120:30799;19679:26;;;3120:30799;19679:26;:6;3120:30799;19679:6;;;3120:30799;19679:26;;;;;;;;;;;19548:199;19670:35;;;3120:30799;19548:199;:::o;19679:26::-;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;19679:26;;;;;;;;;;3120:30799;;;;;;;;;;;;;;;;;;;;33168:749;19669:4:31;;;;;;;;;;;;;;;;;;33769:74:45;33765:146;;33168:749::o;33765:146::-;33866:34;-1:-1:-1;33866:34:45;;-1:-1:-1;33866:34:45;29708:403;;;-1:-1:-1;;;;;3120:30799:45;;;;;-1:-1:-1;3120:30799:45;29832:19;3120:30799;;;-1:-1:-1;3120:30799:45;;;;;;;-1:-1:-1;3120:30799:45;;;;-1:-1:-1;3120:30799:45;;29878:20;;29874:231;;29708:403;;;;;;;:::o;29874:231::-;3120:30799;29994:16;3120:30799;30031:63;3120:30799;;;;-1:-1:-1;3120:30799:45;29832:19;3120:30799;;;-1:-1:-1;3120:30799:45;;-1:-1:-1;3120:30799:45;;;-1:-1:-1;3120:30799:45;;;;29994:16;:::i;:::-;3120:30799;;;;;;30031:63;;29874:231;;;;;;;;17425:701;-1:-1:-1;;;;;3120:30799:45;17624:399;3120:30799;17882:32;3120:30799;;18040:79;3120:30799;;17624:399;3120:30799;;;17975:31;3120:30799;;;17624:399;3120:30799;;18040:79;;:::i;17425:701::-;-1:-1:-1;;;;;3120:30799:45;-1:-1:-1;3120:30799:45;;;;18040:79;3120:30799;;-1:-1:-1;3120:30799:45;;;17791:30;3120:30799;;;-1:-1:-1;3120:30799:45;;18040:79;;:::i;1219:160:59:-;3120:30799:45;;;1328:43:59;;;;;;;-1:-1:-1;;;;;3120:30799:45;;;;1328:43:59;;;3120:30799:45;;;;;;;;;1328:43:59;;;1219:160;;-1:-1:-1;;1328:43:59;3120:30799:45;;1328:43:59;:::i;:::-;8507:421;;;;;;;;;-1:-1:-1;8507:421:59;;8942:15;;3120:30799:45;-1:-1:-1;;;;;3120:30799:45;;8960:26:59;:31;8942:68;8938:146;;1219:160;:::o;8938:146::-;-1:-1:-1;;;;;9033:40:59;;-1:-1:-1;9033:40:59;3120:30799:45;9033:40:59;3120:30799:45;1328:43:59;-1:-1:-1;9033:40:59;8942:68;9009:1;8994:16;;8942:68;"},"methodIdentifiers":{"MAX_CREATOR_FEE_PERCENTAGE()":"2e1d388d","MAX_PROTOCOL_SWAP_FEE_PERCENTAGE()":"2772d156","MAX_PROTOCOL_YIELD_FEE_PERCENTAGE()":"5e32e4e8","collectAggregateFees(address)":"8f4ab9ca","collectAggregateFeesHook(address)":"fa399f2a","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","getVault()":"8d928af8","isPoolRegistered(address)":"c673bdaf","migratePool(address)":"0874327f","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialGlobalSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialGlobalYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMigrationSource\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolRegisteredWithFeeController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_CREATOR_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFeesHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"migratePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract stores global default protocol swap and yield fees, and also tracks the values of those fees for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`). The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows the component fee percentages, and how to compute the aggregate from the components. This is done for performance reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \\\"cut\\\", and stores the fee amounts separately from the pool balances. The pool creator fees are \\\"net\\\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided between the pool creator and the LPs. There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any time by governance and the pool creator, respectively. Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator fees are computed \\\"net\\\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible. A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs. This contract is deployed with the Vault, but can be changed by governance.\",\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"PoolAlreadyRegistered(address)\":[{\"details\":\"This can happen if there is an error in the migration, or if governance somehow grants permission to `migratePool`, which should never happen.\",\"params\":{\"pool\":\"The pool\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"collectAggregateFeesHook(address)\":{\"details\":\"Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount transferred so that the transaction settles when the hook returns.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"_0\":\"The computed aggregate percentage\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol swap fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol yield fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getVault()\":{\"details\":\"This function is virtual to allow for overriding in derived contracts which also inherits contracts with `getVault()` definition.\",\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"migratePool(address)\":{\"details\":\"Permission should NEVER be granted to this function outside of a migration contract. It is necessary to permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool deployment. Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe, guaranteeing that it is impossible to use this function to change anything after registration. A pool can only be registered / configured once - either copied to a new controller in the migration context, or added normally through the Vault calling `registerPool`.\",\"params\":{\"pool\":\"The address of the pool to be migrated\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"InvalidMigrationSource()\":[{\"notice\":\"Migration source cannot be this contract.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"Prevent pool data from being registered more than once.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"notice\":\"Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator yield fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"migratePool(address)\":{\"notice\":\"Not exposed in the interface, this enables migration of hidden pool state.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Helper contract to manage protocol and creator fees outside the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":\"ProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0x4e6eceea41f31faa3f4228315c1d54c0d6f7befaaa1d158775e0b2a860c9de12\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6fc6d998ca7860d5c8f08a4fc045d5d1ebdcb4c777e934f6cd081d05252a024f\",\"dweb:/ipfs/QmbsPGHVrBdVfpcWkm3BNWPQXUZWbvPb6VGiEbf5ezvAmj\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x11ec2b653633cbcc6a99d426df178007a98d1154a39a1ada961239be39eec069\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://40eed42ee57746bbf4711bb4aee856328cd70cc02aa3ff05e8dd719868fcd524\",\"dweb:/ipfs/QmX5uAoB9W6UUehgSRvVW6hun3XE53eZwKsm4kHVqtJs8C\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"SingletonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getVault()":"8d928af8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same function name.\",\"errors\":{\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getVault()\":{\"details\":\"This function is virtual to allow for overriding in derived contracts which also inherits contracts with `getVault()` definition.\",\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"}},\"notice\":\"Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":\"SingletonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x11ec2b653633cbcc6a99d426df178007a98d1154a39a1ada961239be39eec069\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://40eed42ee57746bbf4711bb4aee856328cd70cc02aa3ff05e8dd719868fcd524\",\"dweb:/ipfs/QmX5uAoB9W6UUehgSRvVW6hun3XE53eZwKsm4kHVqtJs8C\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"VaultGuard":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a034606057601f60b238819003918201601f19168301916001600160401b03831184841017606457808492602094604052833981010312606057516001600160a01b03811681036060576080526040516039908160798239608051815050f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe5f80fdfea26469706673582212209ea97d26b149f4c03cd27efa4222c040e10233d68d11499b8658e8caa36dc86f64736f6c634300081b0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH1 0x60 JUMPI PUSH1 0x1F PUSH1 0xB2 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH1 0x64 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH1 0x60 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH1 0x60 JUMPI PUSH1 0x80 MSTORE PUSH1 0x40 MLOAD PUSH1 0x39 SWAP1 DUP2 PUSH1 0x79 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 0xA9 PUSH30 0x26B149F4C03CD27EFA4222C040E10233D68D11499B8658E8CAA36DC86F64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"308:368:47:-:0;;;;;;;;;;;;;-1:-1:-1;;308:368:47;;;;-1:-1:-1;;;;;308:368:47;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;308:368:47;;;;;;409:14;;308:368;;;;;;;;409:14;308:368;;;;;;-1:-1:-1;308:368:47;;;;;;-1:-1:-1;308:368:47;;;;;-1:-1:-1;308:368:47"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212209ea97d26b149f4c03cd27efa4222c040e10233d68d11499b8658e8caa36dc86f64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 0xA9 PUSH30 0x26B149F4C03CD27EFA4222C040E10233D68D11499B8658E8CAA36DC86F64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"308:368:47:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contract that shares the modifier `onlyVault`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":\"VaultGuard\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@openzeppelin/contracts/access/Ownable.sol":{"Ownable":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. The initial owner is set to the address provided by the deployer. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the address provided by the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"}},"@openzeppelin/contracts/access/Ownable2Step.sol":{"Ownable2Step":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"acceptOwnership()":"79ba5097","owner()":"8da5cb5b","pendingOwner()":"e30c3978","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. This extension of the {Ownable} contract includes a two-step mechanism to transfer ownership, where the new owner must call {acceptOwnership} in order to replace the old one. This can help prevent common mistakes, such as transfers of ownership to incorrect accounts, or to contracts that are unable to interact with the permission system. The initial owner is specified at deployment time in the constructor for `Ownable`. This can later be changed with {transferOwnership} and {acceptOwnership}. This module is used through inheritance. It will make available all functions from parent (Ownable).\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable2Step.sol\":\"Ownable2Step\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC1271.sol":{"IERC1271":{"abi":[{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"magicValue","type":"bytes4"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"isValidSignature(bytes32,bytes)":"1626ba7e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"magicValue\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-1271 standard signature validation method for contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].\",\"kind\":\"dev\",\"methods\":{\"isValidSignature(bytes32,bytes)\":{\"details\":\"Should return whether the signature provided is valid for the provided data\",\"params\":{\"hash\":\"Hash of the data to be signed\",\"signature\":\"Signature byte array associated with `hash`\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC1271.sol\":\"IERC1271\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x66c7ec42c6c43712be2107a50ab4529379bc76a632b425babec698d9da921ac6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dce2778f0b638adfc5ba29c2c618c855fe725fa74a16846386aa1d56a834aa04\",\"dweb:/ipfs/QmPV9oWnzQdi58od266j62xvviavLNHqKLZfm6k2K1qy9E\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC1363.sol":{"IERC1363":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferFromAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFromAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","approveAndCall(address,uint256)":"3177029f","approveAndCall(address,uint256,bytes)":"cae9ca51","balanceOf(address)":"70a08231","supportsInterface(bytes4)":"01ffc9a7","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferAndCall(address,uint256)":"1296ee62","transferAndCall(address,uint256,bytes)":"4000aea0","transferFrom(address,address,uint256)":"23b872dd","transferFromAndCall(address,address,uint256)":"d8fbe994","transferFromAndCall(address,address,uint256,bytes)":"c1d34b89"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"transferAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"transferFromAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFromAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363]. Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"approveAndCall(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\",\"params\":{\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"approveAndCall(address,uint256,bytes)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `spender`.\",\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferAndCall(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to` and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferAndCall(address,uint256,bytes)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to` and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `to`.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFromAndCall(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"from\":\"The address which you want to send tokens from.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferFromAndCall(address,address,uint256,bytes)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `to`.\",\"from\":\"The address which you want to send tokens from.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}}},\"title\":\"IERC1363\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":\"IERC1363\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"IERC4626":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"assetTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"totalManagedAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","asset()":"38d52e0f","balanceOf(address)":"70a08231","convertToAssets(uint256)":"07a2d13a","convertToShares(uint256)":"c6e6f592","decimals()":"313ce567","deposit(uint256,address)":"6e553f65","maxDeposit(address)":"402d267d","maxMint(address)":"c63d75b6","maxRedeem(address)":"d905777e","maxWithdraw(address)":"ce96cb77","mint(uint256,address)":"94bf804d","name()":"06fdde03","previewDeposit(uint256)":"ef8b30f7","previewMint(uint256)":"b3d7f6b9","previewRedeem(uint256)":"4cdad506","previewWithdraw(uint256)":"0a28a477","redeem(uint256,address,address)":"ba087652","symbol()":"95d89b41","totalAssets()":"01e1d114","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256,address,address)":"b460af94"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"assetTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalManagedAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-4626 \\\"Tokenized Vault Standard\\\", as defined in https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"asset()\":{\"details\":\"Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"convertToAssets(uint256)\":{\"details\":\"Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"convertToShares(uint256)\":{\"details\":\"Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"deposit(uint256,address)\":{\"details\":\"Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"maxDeposit(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert.\"},\"maxMint(address)\":{\"details\":\"Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert.\"},\"maxRedeem(address)\":{\"details\":\"Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert.\"},\"maxWithdraw(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert.\"},\"mint(uint256,address)\":{\"details\":\"Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"previewDeposit(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"previewMint(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting.\"},\"previewRedeem(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their redemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming.\"},\"previewWithdraw(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if called in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"redeem(uint256,address,address)\":{\"details\":\"Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalAssets()\":{\"details\":\"Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"withdraw(uint256,address,address)\":{\"details\":\"Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":\"IERC4626\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"IERC1155Errors":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC1155InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC1155InvalidApprover","type":"error"},{"inputs":[{"internalType":"uint256","name":"idsLength","type":"uint256"},{"internalType":"uint256","name":"valuesLength","type":"uint256"}],"name":"ERC1155InvalidArrayLength","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC1155InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC1155InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC1155InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC1155MissingApprovalForAll","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC1155InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valuesLength\",\"type\":\"uint256\"}],\"name\":\"ERC1155InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC1155MissingApprovalForAll\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-1155 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\",\"errors\":{\"ERC1155InsufficientBalance(address,uint256,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC1155InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC1155InvalidArrayLength(uint256,uint256)\":[{\"details\":\"Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.\",\"params\":{\"idsLength\":\"Length of the array of token identifiers\",\"valuesLength\":\"Length of the array of token amounts\"}}],\"ERC1155InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC1155InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC1155InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC1155MissingApprovalForAll(address,address)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"owner\":\"Address of the current owner of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC1155Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]}},\"version\":1}"},"IERC20Errors":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-20 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC20Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]}},\"version\":1}"},"IERC721Errors":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-721 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\",\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC721Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"ERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. TIP: For a detailed writeup see our guide https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. The default value of {decimals} is 18. To change this, you should override this function so it returns a different value. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC-20 applications.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}. Both values are immutable: they can only be set once during construction.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x86b7b71a6aedefdad89b607378eeab1dcc5389b9ea7d17346d08af01d7190994\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1dc2db8d94a21eac8efe03adf574c419b08536409b416057a2b5b95cb772c43c\",\"dweb:/ipfs/QmZfqJCKVU1ScuX2A7s8WZdQEaikwJbDH5JBrBdKTUT4Gu\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-20 standard as defined in the ERC.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"IERC20Metadata":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC-20 standard.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"SafeERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"currentAllowance","type":"uint256"},{"internalType":"uint256","name":"requestedDecrease","type":"uint256"}],"name":"SafeERC20FailedDecreaseAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220c02e7587c1a65f70d95976176a4a59c967d812468140f9a9a81961c484a31fe064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 0x2E PUSH22 0x87C1A65F70D95976176A4A59C967D812468140F9A9A8 NOT PUSH2 0xC484 LOG3 0x1F 0xE0 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"698:9376:59:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220c02e7587c1a65f70d95976176a4a59c967d812468140f9a9a81961c484a31fe064736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 0x2E PUSH22 0x87C1A65F70D95976176A4A59C967D812468140F9A9A8 NOT PUSH2 0xC484 LOG3 0x1F 0xE0 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"698:9376:59:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentAllowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestedDecrease\",\"type\":\"uint256\"}],\"name\":\"SafeERC20FailedDecreaseAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers around ERC-20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"errors\":{\"SafeERC20FailedDecreaseAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failed `decreaseAllowance` request.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Address.sol":{"Address":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212204385f4cd6447e53a0205cff6ac1dc012b351818d753d8981fc2ec08565c7c51f64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER DUP6 DELEGATECALL 0xCD PUSH5 0x47E53A0205 0xCF 0xF6 0xAC SAR 0xC0 SLT 0xB3 MLOAD DUP2 DUP14 PUSH22 0x3D8981FC2EC08565C7C51F64736F6C634300081B0033 ","sourceMap":"233:5762:60:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212204385f4cd6447e53a0205cff6ac1dc012b351818d753d8981fc2ec08565c7c51f64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER DUP6 DELEGATECALL 0xCD PUSH5 0x47E53A0205 0xCF 0xF6 0xAC SAR 0xC0 SLT 0xB3 MLOAD DUP2 DUP14 PUSH22 0x3D8981FC2EC08565C7C51F64736F6C634300081B0033 ","sourceMap":"233:5762:60:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Arrays.sol":{"Arrays":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220cbd9a331635a2589b744c73b8a85714084d77a1b4148890124e190babea0d78264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCB 0xD9 LOG3 BALANCE PUSH4 0x5A2589B7 PREVRANDAO 0xC7 EXTCODESIZE DUP11 DUP6 PUSH18 0x4084D77A1B4148890124E190BABEA0D78264 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"459:20446:61:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220cbd9a331635a2589b744c73b8a85714084d77a1b4148890124e190babea0d78264736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCB 0xD9 LOG3 BALANCE PUSH4 0x5A2589B7 PREVRANDAO 0xC7 EXTCODESIZE DUP11 DUP6 PUSH18 0x4084D77A1B4148890124E190BABEA0D78264 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"459:20446:61:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to array types.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Arrays.sol\":\"Arrays\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Comparators.sol":{"Comparators":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212209d94b32f08ee29ade43f617a13d834ad280aea2e26fc72cf6d53009e7fea5ad664736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 SWAP5 0xB3 0x2F ADDMOD 0xEE 0x29 0xAD 0xE4 EXTCODEHASH PUSH2 0x7A13 0xD8 CALLVALUE 0xAD 0x28 EXP 0xEA 0x2E 0x26 0xFC PUSH19 0xCF6D53009E7FEA5AD664736F6C634300081B00 CALLER ","sourceMap":"224:218:62:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212209d94b32f08ee29ade43f617a13d834ad280aea2e26fc72cf6d53009e7fea5ad664736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 SWAP5 0xB3 0x2F ADDMOD 0xEE 0x29 0xAD 0xE4 EXTCODEHASH PUSH2 0x7A13 0xD8 CALLVALUE 0xAD 0x28 EXP 0xEA 0x2E 0x26 0xFC PUSH19 0xCF6D53009E7FEA5AD664736F6C634300081B00 CALLER ","sourceMap":"224:218:62:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides a set of functions to compare values. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Comparators.sol\":\"Comparators\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Context.sol":{"Context":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Errors.sol":{"Errors":{"abi":[{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"FailedDeployment","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"MissingPrecompile","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220ab00708f1b97d5c518c4e3df8b698f3e9a310b84361854f4263e8e2911afeb1c64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAB STOP PUSH17 0x8F1B97D5C518C4E3DF8B698F3E9A310B84 CALLDATASIZE XOR SLOAD DELEGATECALL 0x26 RETURNDATACOPY DUP15 0x29 GT 0xAF 0xEB SHR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"411:484:64:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220ab00708f1b97d5c518c4e3df8b698f3e9a310b84361854f4263e8e2911afeb1c64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAB STOP PUSH17 0x8F1B97D5C518C4E3DF8B698F3E9A310B84 CALLDATASIZE XOR SLOAD DELEGATECALL 0x26 RETURNDATACOPY DUP15 0x29 GT 0xAF 0xEB SHR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"411:484:64:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"MissingPrecompile\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of common custom errors used in multiple contracts IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library. It is recommended to avoid relying on the error API for critical functionality. _Available since v5.1._\",\"errors\":{\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"MissingPrecompile(address)\":[{\"details\":\"A necessary precompile is missing.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Errors.sol\":\"Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Panic.sol":{"Panic":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220d3a5982222b30002df369035be4874e942e654df250dc0553547f71f3c32ebdc64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 0xA5 SWAP9 0x22 0x22 0xB3 STOP MUL 0xDF CALLDATASIZE SWAP1 CALLDATALOAD 0xBE BASEFEE PUSH21 0xE942E654DF250DC0553547F71F3C32EBDC64736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"657:1315:65:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220d3a5982222b30002df369035be4874e942e654df250dc0553547f71f3c32ebdc64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD3 0xA5 SWAP9 0x22 0x22 0xB3 STOP MUL 0xDF CALLDATASIZE SWAP1 CALLDATALOAD 0xBE BASEFEE PUSH21 0xE942E654DF250DC0553547F71F3C32EBDC64736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"657:1315:65:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Helper library for emitting standardized panic codes. ```solidity contract Example { using Panic for uint256; // Use any of the declared internal constants function foo() { Panic.GENERIC.panic(); } // Alternatively function foo() { Panic.panic(Panic.GENERIC); } } ``` Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil]. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"ARRAY_OUT_OF_BOUNDS\":{\"details\":\"array out of bounds access\"},\"ASSERT\":{\"details\":\"used by the assert() builtin\"},\"DIVISION_BY_ZERO\":{\"details\":\"division or modulo by zero\"},\"EMPTY_ARRAY_POP\":{\"details\":\"empty array pop\"},\"ENUM_CONVERSION_ERROR\":{\"details\":\"enum conversion error\"},\"GENERIC\":{\"details\":\"generic / unspecified error\"},\"INVALID_INTERNAL_FUNCTION\":{\"details\":\"calling invalid internal function\"},\"RESOURCE_ERROR\":{\"details\":\"resource error (too large allocation or too large array)\"},\"STORAGE_ENCODING_ERROR\":{\"details\":\"invalid encoding in storage\"},\"UNDER_OVERFLOW\":{\"details\":\"arithmetic underflow or overflow\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Panic.sol\":\"Panic\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/SlotDerivation.sol":{"SlotDerivation":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212201892b12973f073d5474d992dc8add6f831fd6b74ac6b26720bef437f409ab99064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 XOR SWAP3 0xB1 0x29 PUSH20 0xF073D5474D992DC8ADD6F831FD6B74AC6B26720B 0xEF NUMBER PUSH32 0x409AB99064736F6C634300081B00330000000000000000000000000000000000 ","sourceMap":"1599:3723:66:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212201892b12973f073d5474d992dc8add6f831fd6b74ac6b26720bef437f409ab99064736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 XOR SWAP3 0xB1 0x29 PUSH20 0xF073D5474D992DC8ADD6F831FD6B74AC6B26720B 0xEF NUMBER PUSH32 0x409AB99064736F6C634300081B00330000000000000000000000000000000000 ","sourceMap":"1599:3723:66:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for computing storage (and transient storage) locations from namespaces and deriving slots corresponding to standard patterns. The derivation method for array and mapping matches the storage layout used by the solidity language / compiler. See https://docs.soliditylang.org/en/v0.8.20/internals/layout_in_storage.html#mappings-and-dynamic-arrays[Solidity docs for mappings and dynamic arrays.]. Example usage: ```solidity contract Example { // Add the library methods using StorageSlot for bytes32; using SlotDerivation for bytes32; // Declare a namespace string private constant _NAMESPACE = \\\"\\\"; // eg. OpenZeppelin.Slot function setValueInNamespace(uint256 key, address newValue) internal { _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value = newValue; } function getValueInNamespace(uint256 key) internal view returns (address) { return _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value; } } ``` TIP: Consider using this library along with {StorageSlot}. NOTE: This library provides a way to manipulate storage locations in a non-standard way. Tooling for checking upgrade safety will ignore the slots accessed through this library. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/SlotDerivation.sol\":\"SlotDerivation\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/StorageSlot.sol":{"StorageSlot":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122050f73745e69e49cc88dab61e2fa7aa0ad76b60b422dec0938ad4ec0227727c1164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 POP 0xF7 CALLDATACOPY GASLIMIT 0xE6 SWAP15 BLOBHASH 0xCC DUP9 0xDA 0xB6 0x1E 0x2F 0xA7 0xAA EXP 0xD7 PUSH12 0x60B422DEC0938AD4EC022772 PUSH29 0x1164736F6C634300081B00330000000000000000000000000000000000 ","sourceMap":"1407:2774:67:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122050f73745e69e49cc88dab61e2fa7aa0ad76b60b422dec0938ad4ec0227727c1164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 POP 0xF7 CALLDATACOPY GASLIMIT 0xE6 SWAP15 BLOBHASH 0xCC DUP9 0xDA 0xB6 0x1E 0x2F 0xA7 0xAA EXP 0xD7 PUSH12 0x60B422DEC0938AD4EC022772 PUSH29 0x1164736F6C634300081B00330000000000000000000000000000000000 ","sourceMap":"1407:2774:67:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC-1967 implementation slot: ```solidity contract ERC1967 { // Define the slot. Alternatively, use the SlotDerivation library to derive the slot. bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; function _getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } function _setImplementation(address newImplementation) internal { require(newImplementation.code.length > 0); StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } } ``` TIP: Consider using this library along with {SlotDerivation}.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":\"StorageSlot\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"IERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[ERC]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/Math.sol":{"Math":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122087ec85cb5079d131873b16a6f4b17a530d66b2989d93c63b79ade7f83e19b13064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP8 0xEC DUP6 0xCB POP PUSH26 0xD131873B16A6F4B17A530D66B2989D93C63B79ADE7F83E19B130 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"281:31863:69:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122087ec85cb5079d131873b16a6f4b17a530d66b2989d93c63b79ade7f83e19b13064736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP8 0xEC DUP6 0xCB POP PUSH26 0xD131873B16A6F4B17A530D66B2989D93C63B79ADE7F83E19B130 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"281:31863:69:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/Math.sol\":\"Math\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"SafeCast":{"abi":[{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntDowncast","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220702df93c9db3f38b430ad452d58a6ea14360067cf2e8ad9900c318aeb6fd362a64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH17 0x2DF93C9DB3F38B430AD452D58A6EA14360 MOD PUSH29 0xF2E8AD9900C318AEB6FD362A64736F6C634300081B0033000000000000 ","sourceMap":"769:34173:70:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220702df93c9db3f38b430ad452d58a6ea14360067cf2e8ad9900c318aeb6fd362a64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH17 0x2DF93C9DB3F38B430AD452D58A6EA14360 MOD PUSH29 0xF2E8AD9900C318AEB6FD362A64736F6C634300081B0033000000000000 ","sourceMap":"769:34173:70:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"errors\":{\"SafeCastOverflowedIntDowncast(uint8,int256)\":[{\"details\":\"Value doesn't fit in an int of `bits` size.\"}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/structs/EnumerableSet.sol":{"EnumerableSet":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220c0b5b7ddd8fef2ff26e5d1b8c3db2fb9eb5b37c8ccdbd78eddfb09615800e3f264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 0xB5 0xB7 0xDD 0xD8 INVALID CALLCODE SELFDESTRUCT 0x26 0xE5 0xD1 0xB8 0xC3 0xDB 0x2F 0xB9 0xEB JUMPDEST CALLDATACOPY 0xC8 0xCC 0xDB 0xD7 DUP15 0xDD 0xFB MULMOD PUSH2 0x5800 0xE3 CALLCODE PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1586:28038:71:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220c0b5b7ddd8fef2ff26e5d1b8c3db2fb9eb5b37c8ccdbd78eddfb09615800e3f264736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 0xB5 0xB7 0xDD 0xD8 INVALID CALLCODE SELFDESTRUCT 0x26 0xE5 0xD1 0xB8 0xC3 0xDB 0x2F 0xB9 0xEB JUMPDEST CALLDATACOPY 0xC8 0xCC 0xDB 0xD7 DUP15 0xDD 0xFB MULMOD PUSH2 0x5800 0xE3 CALLCODE PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1586:28038:71:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for managing https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types. Sets have the following properties: - Elements are added, removed, and checked for existence in constant time (O(1)). - Elements are enumerated in O(n). No guarantees are made on the ordering. - Set can be cleared (all elements removed) in O(n). ```solidity contract Example { // Add the library methods using EnumerableSet for EnumerableSet.AddressSet; // Declare a set state variable EnumerableSet.AddressSet private mySet; } ``` The following types are supported: - `bytes32` (`Bytes32Set`) since v3.3.0 - `address` (`AddressSet`) since v3.3.0 - `uint256` (`UintSet`) since v3.3.0 - `string` (`StringSet`) since v5.4.0 - `bytes` (`BytesSet`) since v5.4.0 [WARNING] ==== Trying to delete such a structure from storage will likely result in data corruption, rendering the structure unusable. See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an array of EnumerableSet. ====\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":\"EnumerableSet\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]}},\"version\":1}"}},"contracts/BalancerContractRegistry.sol":{"BalancerContractRegistry":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressNotRegistered","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractAliasInUseAsName","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAlreadyDeprecated","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractNameInUseAsAlias","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameNotRegistered","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"InconsistentState","type":"error"},{"inputs":[],"name":"InvalidContractAlias","type":"error"},{"inputs":[],"name":"InvalidContractName","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[],"name":"ZeroContractAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeprecated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"contractAlias","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAliasUpdated","type":"event"},{"inputs":[{"internalType":"string","name":"contractAlias","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"addOrUpdateBalancerContractAlias","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"deprecateBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"deregisterBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"getBalancerContract","outputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"getBalancerContractInfo","outputs":[{"components":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"bool","name":"isRegistered","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"}],"internalType":"struct IBalancerContractRegistry.ContractInfo","name":"info","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"isActiveBalancerContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"isTrustedRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"registerBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461009a57601f6112ec38819003918201601f19168301916001600160401b0383118484101761009e5780849260209460405283398101031261009a57516001600160a01b03811680820361009a57306080521561008b5760a05260405161123990816100b3823960805181610fb7015260a0518181816106c60152818161076701526110c30152f35b630647140b60e51b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080604081815260049182361015610015575f80fd5b5f3560e01c908163264e97e014610cfb575080632967af9614610b0457806341d8c0bb146109f157806344969a9c14610886578063851c1bb3146108365780638554c3271461078b5780638d928af81461073b578063aaabadc514610672578063ae2733a41461059f578063c7f90793146103dd5763e0376ab414610098575f80fd5b346103d95760606003193601126103d957813560058110156103d95760243567ffffffffffffffff81116103d9576100d39036908501610e66565b6044359273ffffffffffffffffffffffffffffffffffffffff948585168095036103d9576100ff611051565b84156103b35782511561038d57845f52602060018152825f209683519761012589610ddc565b549760ff986101368a821683610f14565b89808260081c16151591828685015260101c16151586830152610354575061015d856111db565b90815f525f835280855f205416806102c65750815f5260028352845f2054168061028d57505f525f8152825f20867fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790558251926101be84610ddc565b6101c88685610f14565b8184019060018252600181860193818552895f52525f20935192600584101561026157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000061023a96979862ff000061ff0087549451151560081b169451151560101b16941691161717179055610f70565b907fb12ed936cf481273b3ed037dc706d110c49bd7ba6743e67082cd772a6e9102e25f80a4005b6021907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b836102c2879287519384937f6d4f9990000000000000000000000000000000000000000000000000000000008552840161101d565b0390fd5b846102c288610311878e8b965f5260018252865f20918751926102e884610ddc565b54906102f683831685610f14565b828260081c1615159084015260101c16151586820152610f20565b9361034581519586957fa1e69ed3000000000000000000000000000000000000000000000000000000008752860190610eda565b60248401526044830190610f2d565b518790846005821015610261577f25a14e0c000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b7f830c907e000000000000000000000000000000000000000000000000000000005f525ffd5b7fb4d92c53000000000000000000000000000000000000000000000000000000005f525ffd5b5f80fd5b5090346103d957602091826003193601126103d957813567ffffffffffffffff81116103d9576104109036908401610e66565b90610419611051565b81511561057857610429826111db565b90815f525f855273ffffffffffffffffffffffffffffffffffffffff815f20541694851561053e57855f5260018152815f209282519361046885610ddc565b5461047660ff821686610f14565b60ff808260081c16159182158588015260101c1615158486015261050b575f929160019184528381528284207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055878452528120555191600583101561026157506104e490610f70565b907ffa2e7bfe3791287aa74ffe867372b78e61b60e0516978c4952f83f7416fafb7c5f80a4005b82517f36a7ac0a000000000000000000000000000000000000000000000000000000008152806102c28988838b0161101d565b846102c28584519384937fcd3599f90000000000000000000000000000000000000000000000000000000085528401526024830190610f2d565b827f830c907e000000000000000000000000000000000000000000000000000000005f525ffd5b50346103d957806003193601126103d95781359060058210156103d95773ffffffffffffffffffffffffffffffffffffffff6105d9610db9565b165f526001602052805f209160ff8251936105f385610ddc565b5461060082821686610f14565b818160081c161515602086015260101c1615159283838201528361062b575b60208484519015158152f35b90919250516005811015610646576020935014905f8061061f565b6021847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346103d9575f6003193601126103d95773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561073157926020935f93610702575b505191168152f35b610723919350843d861161072a575b61071b8183610e25565b810190610ff1565b915f6106fa565b503d610711565b83513d5f823e3d90fd5b50346103d9575f6003193601126103d9576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103d95760206003193601126103d95760609073ffffffffffffffffffffffffffffffffffffffff6107bd610d96565b5f8380516107ca81610ddc565b8281528260208201520152165f526001602052805f20908051916107ed83610ddc565b546107fb60ff821684610f14565b6020830160ff8260081c161515815260ff8385019260101c16151582526108258351809551610eda565b511515602084015251151590820152f35b5090346103d95760206003193601126103d95735907fffffffff00000000000000000000000000000000000000000000000000000000821682036103d95761087f602092610f8c565b9051908152f35b50346103d95760206003193601126103d95773ffffffffffffffffffffffffffffffffffffffff6108b5610d96565b6108bd611051565b169182156103b357825f526001602052815f20918051926108dd84610ddc565b54906108ec60ff831685610f14565b602084019060ff8360081c16158015835260ff8287019460101c16151584526109c65782511561099b575f8352855f5260016020525f20935192600584101561026157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000060ff62ff000061ff0087549451151560081b169451151560101b169416911617171790557f07b81cace396ea12f83465895486ac006cd17917e41b9759ad5e663404f1497b5f80a2005b85847f1f118c35000000000000000000000000000000000000000000000000000000005f525260245ffd5b85847ff5b5d364000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346103d957816003193601126103d957803560058110156103d95760243567ffffffffffffffff81116103d957610a2d9036908401610e66565b905f92610a3a5f936111db565b5f525f60205273ffffffffffffffffffffffffffffffffffffffff9182865f205416908115610af1575b8382165f526001602052865f2090875191610a7e83610ddc565b5493610a8d60ff861684610f14565b60ff8560081c1615159283602082015260ff8a82019660101c161515865283610ada575b505050610aca575b505083519216825215156020820152f35b9051909350151591505f80610ab9565b5191925060058210156102615750145f8080610ab1565b9050600260205282865f20541690610a64565b5090346103d957816003193601126103d957803567ffffffffffffffff81116103d957610b349036908301610e66565b610b3c610db9565b91610b45611051565b815115610cd55773ffffffffffffffffffffffffffffffffffffffff809316928315610cae57835f5260209160018352855f20865190610b8482610ddc565b5460ff91610b9483831682610f14565b8883808460081c16159384158985015260101c161515910152610c8357610bba856111db565b92835f525f8552875f20541680610c2d5786610c07878a600289895f52525f20837fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055610f70565b7f06618a6a1a6a413a59097e7c362ee8260afae8f07bd94bc0938e5730584654835f80a3005b85610c4f868a95946102c2945f5260018252865f20918751926102e884610ddc565b9361034581519586957f4466cf0c000000000000000000000000000000000000000000000000000000008752860190610eda565b85827ff5b5d364000000000000000000000000000000000000000000000000000000005f525260245ffd5b507fb4d92c53000000000000000000000000000000000000000000000000000000005f525ffd5b7f907f9fd9000000000000000000000000000000000000000000000000000000005f525ffd5b919050346103d95760206003193601126103d95773ffffffffffffffffffffffffffffffffffffffff610d2c610d96565b165f52600160205260ff815f20610d4284610ddc565b54610d4f82821685610f14565b818160081c161515602085015260101c16151591828282015282610d7a575b60208383519015158152f35b909150519160058310156102615750600260209214905f610d6e565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036103d957565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036103d957565b6060810190811067ffffffffffffffff821117610df857604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610df857604052565b81601f820112156103d95780359067ffffffffffffffff8211610df85760405192610eb960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185610e25565b828452602083830101116103d957815f926020809301838601378301015290565b906005821015610ee75752565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6005821015610ee75752565b516005811015610ee75790565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b602090604051918183925191829101835e81015f815203902090565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152610feb81610ddc565b51902090565b908160209103126103d9575173ffffffffffffffffffffffffffffffffffffffff811681036103d95790565b9073ffffffffffffffffffffffffffffffffffffffff61104a602092959495604085526040850190610f2d565b9416910152565b61107d7fffffffff000000000000000000000000000000000000000000000000000000005f3516610f8c565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111ae5784925f926111b9575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa9182156111ae575f92611177575b50501561114f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116111a7575b61118e8183610e25565b810103126103d9575180151581036103d9575f80611146565b503d611184565b6040513d5f823e3d90fd5b60649192506111d490843d861161072a5761071b8183610e25565b91906110f5565b604051610feb6020828180820195805191829101875e81015f83820152038084520182610e2556fea2646970667358221220ae533797c8ccb00c86c707d40115e8325a9f65d02dbf3131321a1ba62c35008864736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x9A JUMPI PUSH1 0x1F PUSH2 0x12EC CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x9E JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x9A JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 DUP3 SUB PUSH2 0x9A JUMPI ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0x8B JUMPI PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x1239 SWAP1 DUP2 PUSH2 0xB3 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0xFB7 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x6C6 ADD MSTORE DUP2 DUP2 PUSH2 0x767 ADD MSTORE PUSH2 0x10C3 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x264E97E0 EQ PUSH2 0xCFB JUMPI POP DUP1 PUSH4 0x2967AF96 EQ PUSH2 0xB04 JUMPI DUP1 PUSH4 0x41D8C0BB EQ PUSH2 0x9F1 JUMPI DUP1 PUSH4 0x44969A9C EQ PUSH2 0x886 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x836 JUMPI DUP1 PUSH4 0x8554C327 EQ PUSH2 0x78B JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x73B JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x672 JUMPI DUP1 PUSH4 0xAE2733A4 EQ PUSH2 0x59F JUMPI DUP1 PUSH4 0xC7F90793 EQ PUSH2 0x3DD JUMPI PUSH4 0xE0376AB4 EQ PUSH2 0x98 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xD3 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0xE66 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 AND DUP1 SWAP6 SUB PUSH2 0x3D9 JUMPI PUSH2 0xFF PUSH2 0x1051 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x3B3 JUMPI DUP3 MLOAD ISZERO PUSH2 0x38D JUMPI DUP5 PUSH0 MSTORE PUSH1 0x20 PUSH1 0x1 DUP2 MSTORE DUP3 PUSH0 KECCAK256 SWAP7 DUP4 MLOAD SWAP8 PUSH2 0x125 DUP10 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP8 PUSH1 0xFF SWAP9 PUSH2 0x136 DUP11 DUP3 AND DUP4 PUSH2 0xF14 JUMP JUMPDEST DUP10 DUP1 DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP2 DUP3 DUP7 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 DUP4 ADD MSTORE PUSH2 0x354 JUMPI POP PUSH2 0x15D DUP6 PUSH2 0x11DB JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH0 DUP4 MSTORE DUP1 DUP6 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x2C6 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 DUP4 MSTORE DUP5 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x28D JUMPI POP PUSH0 MSTORE PUSH0 DUP2 MSTORE DUP3 PUSH0 KECCAK256 DUP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP3 MLOAD SWAP3 PUSH2 0x1BE DUP5 PUSH2 0xDDC JUMP JUMPDEST PUSH2 0x1C8 DUP7 DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP5 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 DUP2 DUP7 ADD SWAP4 DUP2 DUP6 MSTORE DUP10 PUSH0 MSTORE MSTORE PUSH0 KECCAK256 SWAP4 MLOAD SWAP3 PUSH1 0x5 DUP5 LT ISZERO PUSH2 0x261 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 PUSH2 0x23A SWAP7 SWAP8 SWAP9 PUSH3 0xFF0000 PUSH2 0xFF00 DUP8 SLOAD SWAP5 MLOAD ISZERO ISZERO PUSH1 0x8 SHL AND SWAP5 MLOAD ISZERO ISZERO PUSH1 0x10 SHL AND SWAP5 AND SWAP2 AND OR OR OR SWAP1 SSTORE PUSH2 0xF70 JUMP JUMPDEST SWAP1 PUSH32 0xB12ED936CF481273B3ED037DC706D110C49BD7BA6743E67082CD772A6E9102E2 PUSH0 DUP1 LOG4 STOP JUMPDEST PUSH1 0x21 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 PUSH2 0x2C2 DUP8 SWAP3 DUP8 MLOAD SWAP4 DUP5 SWAP4 PUSH32 0x6D4F999000000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD PUSH2 0x101D JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST DUP5 PUSH2 0x2C2 DUP9 PUSH2 0x311 DUP8 DUP15 DUP12 SWAP7 PUSH0 MSTORE PUSH1 0x1 DUP3 MSTORE DUP7 PUSH0 KECCAK256 SWAP2 DUP8 MLOAD SWAP3 PUSH2 0x2E8 DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x2F6 DUP4 DUP4 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP3 DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP1 DUP5 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 DUP3 ADD MSTORE PUSH2 0xF20 JUMP JUMPDEST SWAP4 PUSH2 0x345 DUP2 MLOAD SWAP6 DUP7 SWAP6 PUSH32 0xA1E69ED300000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD SWAP1 PUSH2 0xEDA JUMP JUMPDEST PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST MLOAD DUP8 SWAP1 DUP5 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x261 JUMPI PUSH32 0x25A14E0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH32 0x830C907E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0xB4D92C5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0x410 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xE66 JUMP JUMPDEST SWAP1 PUSH2 0x419 PUSH2 0x1051 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x578 JUMPI PUSH2 0x429 DUP3 PUSH2 0x11DB JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH0 DUP6 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP5 DUP6 ISZERO PUSH2 0x53E JUMPI DUP6 PUSH0 MSTORE PUSH1 0x1 DUP2 MSTORE DUP2 PUSH0 KECCAK256 SWAP3 DUP3 MLOAD SWAP4 PUSH2 0x468 DUP6 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x476 PUSH1 0xFF DUP3 AND DUP7 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0xFF DUP1 DUP3 PUSH1 0x8 SHR AND ISZERO SWAP2 DUP3 ISZERO DUP6 DUP9 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP5 DUP7 ADD MSTORE PUSH2 0x50B JUMPI PUSH0 SWAP3 SWAP2 PUSH1 0x1 SWAP2 DUP5 MSTORE DUP4 DUP2 MSTORE DUP3 DUP5 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 SLOAD AND SWAP1 SSTORE DUP8 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE MLOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x261 JUMPI POP PUSH2 0x4E4 SWAP1 PUSH2 0xF70 JUMP JUMPDEST SWAP1 PUSH32 0xFA2E7BFE3791287AA74FFE867372B78E61B60E0516978C4952F83F7416FAFB7C PUSH0 DUP1 LOG4 STOP JUMPDEST DUP3 MLOAD PUSH32 0x36A7AC0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP1 PUSH2 0x2C2 DUP10 DUP9 DUP4 DUP12 ADD PUSH2 0x101D JUMP JUMPDEST DUP5 PUSH2 0x2C2 DUP6 DUP5 MLOAD SWAP4 DUP5 SWAP4 PUSH32 0xCD3599F900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST DUP3 PUSH32 0x830C907E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5D9 PUSH2 0xDB9 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SWAP2 PUSH1 0xFF DUP3 MLOAD SWAP4 PUSH2 0x5F3 DUP6 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x600 DUP3 DUP3 AND DUP7 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x8 SHR AND ISZERO ISZERO PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP3 DUP4 DUP4 DUP3 ADD MSTORE DUP4 PUSH2 0x62B JUMPI JUMPDEST PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x646 JUMPI PUSH1 0x20 SWAP4 POP EQ SWAP1 PUSH0 DUP1 PUSH2 0x61F JUMP JUMPDEST PUSH1 0x21 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x731 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x702 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x723 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x72A JUMPI JUMPDEST PUSH2 0x71B DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xFF1 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x6FA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x711 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH1 0x60 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x7BD PUSH2 0xD96 JUMP JUMPDEST PUSH0 DUP4 DUP1 MLOAD PUSH2 0x7CA DUP2 PUSH2 0xDDC JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SWAP1 DUP1 MLOAD SWAP2 PUSH2 0x7ED DUP4 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x7FB PUSH1 0xFF DUP3 AND DUP5 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD PUSH1 0xFF DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO DUP2 MSTORE PUSH1 0xFF DUP4 DUP6 ADD SWAP3 PUSH1 0x10 SHR AND ISZERO ISZERO DUP3 MSTORE PUSH2 0x825 DUP4 MLOAD DUP1 SWAP6 MLOAD PUSH2 0xEDA JUMP JUMPDEST MLOAD ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI PUSH2 0x87F PUSH1 0x20 SWAP3 PUSH2 0xF8C JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x8B5 PUSH2 0xD96 JUMP JUMPDEST PUSH2 0x8BD PUSH2 0x1051 JUMP JUMPDEST AND SWAP2 DUP3 ISZERO PUSH2 0x3B3 JUMPI DUP3 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP3 PUSH2 0x8DD DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x8EC PUSH1 0xFF DUP4 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD SWAP1 PUSH1 0xFF DUP4 PUSH1 0x8 SHR AND ISZERO DUP1 ISZERO DUP4 MSTORE PUSH1 0xFF DUP3 DUP8 ADD SWAP5 PUSH1 0x10 SHR AND ISZERO ISZERO DUP5 MSTORE PUSH2 0x9C6 JUMPI DUP3 MLOAD ISZERO PUSH2 0x99B JUMPI PUSH0 DUP4 MSTORE DUP6 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH0 KECCAK256 SWAP4 MLOAD SWAP3 PUSH1 0x5 DUP5 LT ISZERO PUSH2 0x261 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 PUSH1 0xFF PUSH3 0xFF0000 PUSH2 0xFF00 DUP8 SLOAD SWAP5 MLOAD ISZERO ISZERO PUSH1 0x8 SHL AND SWAP5 MLOAD ISZERO ISZERO PUSH1 0x10 SHL AND SWAP5 AND SWAP2 AND OR OR OR SWAP1 SSTORE PUSH32 0x7B81CACE396EA12F83465895486AC006CD17917E41B9759AD5E663404F1497B PUSH0 DUP1 LOG2 STOP JUMPDEST DUP6 DUP5 PUSH32 0x1F118C3500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP6 DUP5 PUSH32 0xF5B5D36400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xA2D SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xE66 JUMP JUMPDEST SWAP1 PUSH0 SWAP3 PUSH2 0xA3A PUSH0 SWAP4 PUSH2 0x11DB JUMP JUMPDEST PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP7 PUSH0 KECCAK256 SLOAD AND SWAP1 DUP2 ISZERO PUSH2 0xAF1 JUMPI JUMPDEST DUP4 DUP3 AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SWAP1 DUP8 MLOAD SWAP2 PUSH2 0xA7E DUP4 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP4 PUSH2 0xA8D PUSH1 0xFF DUP7 AND DUP5 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0xFF DUP6 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP3 DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP11 DUP3 ADD SWAP7 PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 MSTORE DUP4 PUSH2 0xADA JUMPI JUMPDEST POP POP POP PUSH2 0xACA JUMPI JUMPDEST POP POP DUP4 MLOAD SWAP3 AND DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 MLOAD SWAP1 SWAP4 POP ISZERO ISZERO SWAP2 POP PUSH0 DUP1 PUSH2 0xAB9 JUMP JUMPDEST MLOAD SWAP2 SWAP3 POP PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x261 JUMPI POP EQ PUSH0 DUP1 DUP1 PUSH2 0xAB1 JUMP JUMPDEST SWAP1 POP PUSH1 0x2 PUSH1 0x20 MSTORE DUP3 DUP7 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0xA64 JUMP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xB34 SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0xE66 JUMP JUMPDEST PUSH2 0xB3C PUSH2 0xDB9 JUMP JUMPDEST SWAP2 PUSH2 0xB45 PUSH2 0x1051 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0xCD5 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP4 AND SWAP3 DUP4 ISZERO PUSH2 0xCAE JUMPI DUP4 PUSH0 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x1 DUP4 MSTORE DUP6 PUSH0 KECCAK256 DUP7 MLOAD SWAP1 PUSH2 0xB84 DUP3 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH1 0xFF SWAP2 PUSH2 0xB94 DUP4 DUP4 AND DUP3 PUSH2 0xF14 JUMP JUMPDEST DUP9 DUP4 DUP1 DUP5 PUSH1 0x8 SHR AND ISZERO SWAP4 DUP5 ISZERO DUP10 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP2 ADD MSTORE PUSH2 0xC83 JUMPI PUSH2 0xBBA DUP6 PUSH2 0x11DB JUMP JUMPDEST SWAP3 DUP4 PUSH0 MSTORE PUSH0 DUP6 MSTORE DUP8 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0xC2D JUMPI DUP7 PUSH2 0xC07 DUP8 DUP11 PUSH1 0x2 DUP10 DUP10 PUSH0 MSTORE MSTORE PUSH0 KECCAK256 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0xF70 JUMP JUMPDEST PUSH32 0x6618A6A1A6A413A59097E7C362EE8260AFAE8F07BD94BC0938E573058465483 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP6 PUSH2 0xC4F DUP7 DUP11 SWAP6 SWAP5 PUSH2 0x2C2 SWAP5 PUSH0 MSTORE PUSH1 0x1 DUP3 MSTORE DUP7 PUSH0 KECCAK256 SWAP2 DUP8 MLOAD SWAP3 PUSH2 0x2E8 DUP5 PUSH2 0xDDC JUMP JUMPDEST SWAP4 PUSH2 0x345 DUP2 MLOAD SWAP6 DUP7 SWAP6 PUSH32 0x4466CF0C00000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD SWAP1 PUSH2 0xEDA JUMP JUMPDEST DUP6 DUP3 PUSH32 0xF5B5D36400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH32 0xB4D92C5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0x907F9FD900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xD2C PUSH2 0xD96 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 PUSH2 0xD42 DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0xD4F DUP3 DUP3 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x8 SHR AND ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP2 DUP3 DUP3 DUP3 ADD MSTORE DUP3 PUSH2 0xD7A JUMPI JUMPDEST PUSH1 0x20 DUP4 DUP4 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP MLOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x261 JUMPI POP PUSH1 0x2 PUSH1 0x20 SWAP3 EQ SWAP1 PUSH0 PUSH2 0xD6E JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDF8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDF8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xDF8 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0xEB9 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND ADD DUP6 PUSH2 0xE25 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x3D9 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xEE7 JUMPI MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xEE7 JUMPI MSTORE JUMP JUMPDEST MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0xEE7 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP2 DUP4 SWAP3 MLOAD SWAP2 DUP3 SWAP2 ADD DUP4 MCOPY DUP2 ADD PUSH0 DUP2 MSTORE SUB SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0xFEB DUP2 PUSH2 0xDDC JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x3D9 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x3D9 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x104A PUSH1 0x20 SWAP3 SWAP6 SWAP5 SWAP6 PUSH1 0x40 DUP6 MSTORE PUSH1 0x40 DUP6 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST SWAP5 AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH2 0x107D PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0xF8C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x11AE JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x11B9 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x11AE JUMPI PUSH0 SWAP3 PUSH2 0x1177 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x114F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x11A7 JUMPI JUMPDEST PUSH2 0x118E DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3D9 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x3D9 JUMPI PUSH0 DUP1 PUSH2 0x1146 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1184 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x11D4 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x72A JUMPI PUSH2 0x71B DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x10F5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFEB PUSH1 0x20 DUP3 DUP2 DUP1 DUP3 ADD SWAP6 DUP1 MLOAD SWAP2 DUP3 SWAP2 ADD DUP8 MCOPY DUP2 ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB DUP1 DUP5 MSTORE ADD DUP3 PUSH2 0xE25 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE MSTORE8 CALLDATACOPY SWAP8 0xC8 0xCC 0xB0 0xC DUP7 0xC7 SMOD 0xD4 ADD ISZERO 0xE8 ORIGIN GAS SWAP16 PUSH6 0xD02DBF313132 BYTE SHL 0xA6 0x2C CALLDATALOAD STOP DUP9 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"2741:12089:72:-:0;;;;;;;;;;;;;-1:-1:-1;;2741:12089:72;;;;-1:-1:-1;;;;;2741:12089:72;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2741:12089:72;;;;;;;922:4:46;1347:46:32;;943:28:44;939:79;;1028:14;;2741:12089:72;;;;;;;;1347:46:32;2741:12089:72;;;;;1028:14:44;2741:12089:72;;;;;;;;;;;;;;;;939:79:44;994:13;;;-1:-1:-1;994:13:44;;-1:-1:-1;994:13:44;2741:12089:72;-1:-1:-1;2741:12089:72;;;;;;-1:-1:-1;2741:12089:72;;;;;-1:-1:-1;2741:12089:72"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":3478,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_12134":{"entryPoint":3513,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":4081,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_string":{"entryPoint":3686,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_enum_ContractType":{"entryPoint":3802,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_string":{"entryPoint":3885,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string_address":{"entryPoint":4125,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":3621,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_12135":{"entryPoint":3548,"id":null,"parameterSlots":1,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":4177,"id":4338,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":3980,"id":4356,"parameterSlots":1,"returnSlots":1},"fun_getContractId":{"entryPoint":4571,"id":18160,"parameterSlots":1,"returnSlots":1},"packed_hashed_string_to_string":{"entryPoint":3952,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_memoryt_enum_ContractType":{"entryPoint":3872,"id":null,"parameterSlots":1,"returnSlots":1},"write_to_memory_enum_ContractType":{"entryPoint":3860,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"4296":[{"length":32,"start":4023}],"7340":[{"length":32,"start":1734},{"length":32,"start":1895},{"length":32,"start":4291}]},"linkReferences":{},"object":"6080604081815260049182361015610015575f80fd5b5f3560e01c908163264e97e014610cfb575080632967af9614610b0457806341d8c0bb146109f157806344969a9c14610886578063851c1bb3146108365780638554c3271461078b5780638d928af81461073b578063aaabadc514610672578063ae2733a41461059f578063c7f90793146103dd5763e0376ab414610098575f80fd5b346103d95760606003193601126103d957813560058110156103d95760243567ffffffffffffffff81116103d9576100d39036908501610e66565b6044359273ffffffffffffffffffffffffffffffffffffffff948585168095036103d9576100ff611051565b84156103b35782511561038d57845f52602060018152825f209683519761012589610ddc565b549760ff986101368a821683610f14565b89808260081c16151591828685015260101c16151586830152610354575061015d856111db565b90815f525f835280855f205416806102c65750815f5260028352845f2054168061028d57505f525f8152825f20867fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790558251926101be84610ddc565b6101c88685610f14565b8184019060018252600181860193818552895f52525f20935192600584101561026157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000061023a96979862ff000061ff0087549451151560081b169451151560101b16941691161717179055610f70565b907fb12ed936cf481273b3ed037dc706d110c49bd7ba6743e67082cd772a6e9102e25f80a4005b6021907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b836102c2879287519384937f6d4f9990000000000000000000000000000000000000000000000000000000008552840161101d565b0390fd5b846102c288610311878e8b965f5260018252865f20918751926102e884610ddc565b54906102f683831685610f14565b828260081c1615159084015260101c16151586820152610f20565b9361034581519586957fa1e69ed3000000000000000000000000000000000000000000000000000000008752860190610eda565b60248401526044830190610f2d565b518790846005821015610261577f25a14e0c000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b7f830c907e000000000000000000000000000000000000000000000000000000005f525ffd5b7fb4d92c53000000000000000000000000000000000000000000000000000000005f525ffd5b5f80fd5b5090346103d957602091826003193601126103d957813567ffffffffffffffff81116103d9576104109036908401610e66565b90610419611051565b81511561057857610429826111db565b90815f525f855273ffffffffffffffffffffffffffffffffffffffff815f20541694851561053e57855f5260018152815f209282519361046885610ddc565b5461047660ff821686610f14565b60ff808260081c16159182158588015260101c1615158486015261050b575f929160019184528381528284207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055878452528120555191600583101561026157506104e490610f70565b907ffa2e7bfe3791287aa74ffe867372b78e61b60e0516978c4952f83f7416fafb7c5f80a4005b82517f36a7ac0a000000000000000000000000000000000000000000000000000000008152806102c28988838b0161101d565b846102c28584519384937fcd3599f90000000000000000000000000000000000000000000000000000000085528401526024830190610f2d565b827f830c907e000000000000000000000000000000000000000000000000000000005f525ffd5b50346103d957806003193601126103d95781359060058210156103d95773ffffffffffffffffffffffffffffffffffffffff6105d9610db9565b165f526001602052805f209160ff8251936105f385610ddc565b5461060082821686610f14565b818160081c161515602086015260101c1615159283838201528361062b575b60208484519015158152f35b90919250516005811015610646576020935014905f8061061f565b6021847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346103d9575f6003193601126103d95773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561073157926020935f93610702575b505191168152f35b610723919350843d861161072a575b61071b8183610e25565b810190610ff1565b915f6106fa565b503d610711565b83513d5f823e3d90fd5b50346103d9575f6003193601126103d9576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103d95760206003193601126103d95760609073ffffffffffffffffffffffffffffffffffffffff6107bd610d96565b5f8380516107ca81610ddc565b8281528260208201520152165f526001602052805f20908051916107ed83610ddc565b546107fb60ff821684610f14565b6020830160ff8260081c161515815260ff8385019260101c16151582526108258351809551610eda565b511515602084015251151590820152f35b5090346103d95760206003193601126103d95735907fffffffff00000000000000000000000000000000000000000000000000000000821682036103d95761087f602092610f8c565b9051908152f35b50346103d95760206003193601126103d95773ffffffffffffffffffffffffffffffffffffffff6108b5610d96565b6108bd611051565b169182156103b357825f526001602052815f20918051926108dd84610ddc565b54906108ec60ff831685610f14565b602084019060ff8360081c16158015835260ff8287019460101c16151584526109c65782511561099b575f8352855f5260016020525f20935192600584101561026157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000060ff62ff000061ff0087549451151560081b169451151560101b169416911617171790557f07b81cace396ea12f83465895486ac006cd17917e41b9759ad5e663404f1497b5f80a2005b85847f1f118c35000000000000000000000000000000000000000000000000000000005f525260245ffd5b85847ff5b5d364000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346103d957816003193601126103d957803560058110156103d95760243567ffffffffffffffff81116103d957610a2d9036908401610e66565b905f92610a3a5f936111db565b5f525f60205273ffffffffffffffffffffffffffffffffffffffff9182865f205416908115610af1575b8382165f526001602052865f2090875191610a7e83610ddc565b5493610a8d60ff861684610f14565b60ff8560081c1615159283602082015260ff8a82019660101c161515865283610ada575b505050610aca575b505083519216825215156020820152f35b9051909350151591505f80610ab9565b5191925060058210156102615750145f8080610ab1565b9050600260205282865f20541690610a64565b5090346103d957816003193601126103d957803567ffffffffffffffff81116103d957610b349036908301610e66565b610b3c610db9565b91610b45611051565b815115610cd55773ffffffffffffffffffffffffffffffffffffffff809316928315610cae57835f5260209160018352855f20865190610b8482610ddc565b5460ff91610b9483831682610f14565b8883808460081c16159384158985015260101c161515910152610c8357610bba856111db565b92835f525f8552875f20541680610c2d5786610c07878a600289895f52525f20837fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055610f70565b7f06618a6a1a6a413a59097e7c362ee8260afae8f07bd94bc0938e5730584654835f80a3005b85610c4f868a95946102c2945f5260018252865f20918751926102e884610ddc565b9361034581519586957f4466cf0c000000000000000000000000000000000000000000000000000000008752860190610eda565b85827ff5b5d364000000000000000000000000000000000000000000000000000000005f525260245ffd5b507fb4d92c53000000000000000000000000000000000000000000000000000000005f525ffd5b7f907f9fd9000000000000000000000000000000000000000000000000000000005f525ffd5b919050346103d95760206003193601126103d95773ffffffffffffffffffffffffffffffffffffffff610d2c610d96565b165f52600160205260ff815f20610d4284610ddc565b54610d4f82821685610f14565b818160081c161515602085015260101c16151591828282015282610d7a575b60208383519015158152f35b909150519160058310156102615750600260209214905f610d6e565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036103d957565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036103d957565b6060810190811067ffffffffffffffff821117610df857604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610df857604052565b81601f820112156103d95780359067ffffffffffffffff8211610df85760405192610eb960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185610e25565b828452602083830101116103d957815f926020809301838601378301015290565b906005821015610ee75752565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6005821015610ee75752565b516005811015610ee75790565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b602090604051918183925191829101835e81015f815203902090565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152610feb81610ddc565b51902090565b908160209103126103d9575173ffffffffffffffffffffffffffffffffffffffff811681036103d95790565b9073ffffffffffffffffffffffffffffffffffffffff61104a602092959495604085526040850190610f2d565b9416910152565b61107d7fffffffff000000000000000000000000000000000000000000000000000000005f3516610f8c565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156111ae5784925f926111b9575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa9182156111ae575f92611177575b50501561114f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116111a7575b61118e8183610e25565b810103126103d9575180151581036103d9575f80611146565b503d611184565b6040513d5f823e3d90fd5b60649192506111d490843d861161072a5761071b8183610e25565b91906110f5565b604051610feb6020828180820195805191829101875e81015f83820152038084520182610e2556fea2646970667358221220ae533797c8ccb00c86c707d40115e8325a9f65d02dbf3131321a1ba62c35008864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x264E97E0 EQ PUSH2 0xCFB JUMPI POP DUP1 PUSH4 0x2967AF96 EQ PUSH2 0xB04 JUMPI DUP1 PUSH4 0x41D8C0BB EQ PUSH2 0x9F1 JUMPI DUP1 PUSH4 0x44969A9C EQ PUSH2 0x886 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x836 JUMPI DUP1 PUSH4 0x8554C327 EQ PUSH2 0x78B JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x73B JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x672 JUMPI DUP1 PUSH4 0xAE2733A4 EQ PUSH2 0x59F JUMPI DUP1 PUSH4 0xC7F90793 EQ PUSH2 0x3DD JUMPI PUSH4 0xE0376AB4 EQ PUSH2 0x98 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xD3 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0xE66 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 AND DUP1 SWAP6 SUB PUSH2 0x3D9 JUMPI PUSH2 0xFF PUSH2 0x1051 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x3B3 JUMPI DUP3 MLOAD ISZERO PUSH2 0x38D JUMPI DUP5 PUSH0 MSTORE PUSH1 0x20 PUSH1 0x1 DUP2 MSTORE DUP3 PUSH0 KECCAK256 SWAP7 DUP4 MLOAD SWAP8 PUSH2 0x125 DUP10 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP8 PUSH1 0xFF SWAP9 PUSH2 0x136 DUP11 DUP3 AND DUP4 PUSH2 0xF14 JUMP JUMPDEST DUP10 DUP1 DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP2 DUP3 DUP7 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 DUP4 ADD MSTORE PUSH2 0x354 JUMPI POP PUSH2 0x15D DUP6 PUSH2 0x11DB JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH0 DUP4 MSTORE DUP1 DUP6 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x2C6 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 DUP4 MSTORE DUP5 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x28D JUMPI POP PUSH0 MSTORE PUSH0 DUP2 MSTORE DUP3 PUSH0 KECCAK256 DUP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP3 MLOAD SWAP3 PUSH2 0x1BE DUP5 PUSH2 0xDDC JUMP JUMPDEST PUSH2 0x1C8 DUP7 DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP5 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 DUP2 DUP7 ADD SWAP4 DUP2 DUP6 MSTORE DUP10 PUSH0 MSTORE MSTORE PUSH0 KECCAK256 SWAP4 MLOAD SWAP3 PUSH1 0x5 DUP5 LT ISZERO PUSH2 0x261 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 PUSH2 0x23A SWAP7 SWAP8 SWAP9 PUSH3 0xFF0000 PUSH2 0xFF00 DUP8 SLOAD SWAP5 MLOAD ISZERO ISZERO PUSH1 0x8 SHL AND SWAP5 MLOAD ISZERO ISZERO PUSH1 0x10 SHL AND SWAP5 AND SWAP2 AND OR OR OR SWAP1 SSTORE PUSH2 0xF70 JUMP JUMPDEST SWAP1 PUSH32 0xB12ED936CF481273B3ED037DC706D110C49BD7BA6743E67082CD772A6E9102E2 PUSH0 DUP1 LOG4 STOP JUMPDEST PUSH1 0x21 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 PUSH2 0x2C2 DUP8 SWAP3 DUP8 MLOAD SWAP4 DUP5 SWAP4 PUSH32 0x6D4F999000000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD PUSH2 0x101D JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST DUP5 PUSH2 0x2C2 DUP9 PUSH2 0x311 DUP8 DUP15 DUP12 SWAP7 PUSH0 MSTORE PUSH1 0x1 DUP3 MSTORE DUP7 PUSH0 KECCAK256 SWAP2 DUP8 MLOAD SWAP3 PUSH2 0x2E8 DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x2F6 DUP4 DUP4 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP3 DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP1 DUP5 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 DUP3 ADD MSTORE PUSH2 0xF20 JUMP JUMPDEST SWAP4 PUSH2 0x345 DUP2 MLOAD SWAP6 DUP7 SWAP6 PUSH32 0xA1E69ED300000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD SWAP1 PUSH2 0xEDA JUMP JUMPDEST PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST MLOAD DUP8 SWAP1 DUP5 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x261 JUMPI PUSH32 0x25A14E0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH32 0x830C907E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0xB4D92C5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0x410 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xE66 JUMP JUMPDEST SWAP1 PUSH2 0x419 PUSH2 0x1051 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0x578 JUMPI PUSH2 0x429 DUP3 PUSH2 0x11DB JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH0 DUP6 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP5 DUP6 ISZERO PUSH2 0x53E JUMPI DUP6 PUSH0 MSTORE PUSH1 0x1 DUP2 MSTORE DUP2 PUSH0 KECCAK256 SWAP3 DUP3 MLOAD SWAP4 PUSH2 0x468 DUP6 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x476 PUSH1 0xFF DUP3 AND DUP7 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0xFF DUP1 DUP3 PUSH1 0x8 SHR AND ISZERO SWAP2 DUP3 ISZERO DUP6 DUP9 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO DUP5 DUP7 ADD MSTORE PUSH2 0x50B JUMPI PUSH0 SWAP3 SWAP2 PUSH1 0x1 SWAP2 DUP5 MSTORE DUP4 DUP2 MSTORE DUP3 DUP5 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 SLOAD AND SWAP1 SSTORE DUP8 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE MLOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x261 JUMPI POP PUSH2 0x4E4 SWAP1 PUSH2 0xF70 JUMP JUMPDEST SWAP1 PUSH32 0xFA2E7BFE3791287AA74FFE867372B78E61B60E0516978C4952F83F7416FAFB7C PUSH0 DUP1 LOG4 STOP JUMPDEST DUP3 MLOAD PUSH32 0x36A7AC0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP1 PUSH2 0x2C2 DUP10 DUP9 DUP4 DUP12 ADD PUSH2 0x101D JUMP JUMPDEST DUP5 PUSH2 0x2C2 DUP6 DUP5 MLOAD SWAP4 DUP5 SWAP4 PUSH32 0xCD3599F900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST DUP3 PUSH32 0x830C907E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5D9 PUSH2 0xDB9 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SWAP2 PUSH1 0xFF DUP3 MLOAD SWAP4 PUSH2 0x5F3 DUP6 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x600 DUP3 DUP3 AND DUP7 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x8 SHR AND ISZERO ISZERO PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP3 DUP4 DUP4 DUP3 ADD MSTORE DUP4 PUSH2 0x62B JUMPI JUMPDEST PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x646 JUMPI PUSH1 0x20 SWAP4 POP EQ SWAP1 PUSH0 DUP1 PUSH2 0x61F JUMP JUMPDEST PUSH1 0x21 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x731 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x702 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x723 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x72A JUMPI JUMPDEST PUSH2 0x71B DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xFF1 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x6FA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x711 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH1 0x60 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x7BD PUSH2 0xD96 JUMP JUMPDEST PUSH0 DUP4 DUP1 MLOAD PUSH2 0x7CA DUP2 PUSH2 0xDDC JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SWAP1 DUP1 MLOAD SWAP2 PUSH2 0x7ED DUP4 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0x7FB PUSH1 0xFF DUP3 AND DUP5 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD PUSH1 0xFF DUP3 PUSH1 0x8 SHR AND ISZERO ISZERO DUP2 MSTORE PUSH1 0xFF DUP4 DUP6 ADD SWAP3 PUSH1 0x10 SHR AND ISZERO ISZERO DUP3 MSTORE PUSH2 0x825 DUP4 MLOAD DUP1 SWAP6 MLOAD PUSH2 0xEDA JUMP JUMPDEST MLOAD ISZERO ISZERO PUSH1 0x20 DUP5 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI PUSH2 0x87F PUSH1 0x20 SWAP3 PUSH2 0xF8C JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x8B5 PUSH2 0xD96 JUMP JUMPDEST PUSH2 0x8BD PUSH2 0x1051 JUMP JUMPDEST AND SWAP2 DUP3 ISZERO PUSH2 0x3B3 JUMPI DUP3 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP3 PUSH2 0x8DD DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x8EC PUSH1 0xFF DUP4 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD SWAP1 PUSH1 0xFF DUP4 PUSH1 0x8 SHR AND ISZERO DUP1 ISZERO DUP4 MSTORE PUSH1 0xFF DUP3 DUP8 ADD SWAP5 PUSH1 0x10 SHR AND ISZERO ISZERO DUP5 MSTORE PUSH2 0x9C6 JUMPI DUP3 MLOAD ISZERO PUSH2 0x99B JUMPI PUSH0 DUP4 MSTORE DUP6 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH0 KECCAK256 SWAP4 MLOAD SWAP3 PUSH1 0x5 DUP5 LT ISZERO PUSH2 0x261 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 PUSH1 0xFF PUSH3 0xFF0000 PUSH2 0xFF00 DUP8 SLOAD SWAP5 MLOAD ISZERO ISZERO PUSH1 0x8 SHL AND SWAP5 MLOAD ISZERO ISZERO PUSH1 0x10 SHL AND SWAP5 AND SWAP2 AND OR OR OR SWAP1 SSTORE PUSH32 0x7B81CACE396EA12F83465895486AC006CD17917E41B9759AD5E663404F1497B PUSH0 DUP1 LOG2 STOP JUMPDEST DUP6 DUP5 PUSH32 0x1F118C3500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP6 DUP5 PUSH32 0xF5B5D36400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x3D9 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xA2D SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xE66 JUMP JUMPDEST SWAP1 PUSH0 SWAP3 PUSH2 0xA3A PUSH0 SWAP4 PUSH2 0x11DB JUMP JUMPDEST PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP7 PUSH0 KECCAK256 SLOAD AND SWAP1 DUP2 ISZERO PUSH2 0xAF1 JUMPI JUMPDEST DUP4 DUP3 AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SWAP1 DUP8 MLOAD SWAP2 PUSH2 0xA7E DUP4 PUSH2 0xDDC JUMP JUMPDEST SLOAD SWAP4 PUSH2 0xA8D PUSH1 0xFF DUP7 AND DUP5 PUSH2 0xF14 JUMP JUMPDEST PUSH1 0xFF DUP6 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP3 DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP11 DUP3 ADD SWAP7 PUSH1 0x10 SHR AND ISZERO ISZERO DUP7 MSTORE DUP4 PUSH2 0xADA JUMPI JUMPDEST POP POP POP PUSH2 0xACA JUMPI JUMPDEST POP POP DUP4 MLOAD SWAP3 AND DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 MLOAD SWAP1 SWAP4 POP ISZERO ISZERO SWAP2 POP PUSH0 DUP1 PUSH2 0xAB9 JUMP JUMPDEST MLOAD SWAP2 SWAP3 POP PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x261 JUMPI POP EQ PUSH0 DUP1 DUP1 PUSH2 0xAB1 JUMP JUMPDEST SWAP1 POP PUSH1 0x2 PUSH1 0x20 MSTORE DUP3 DUP7 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0xA64 JUMP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x3D9 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x3D9 JUMPI PUSH2 0xB34 SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0xE66 JUMP JUMPDEST PUSH2 0xB3C PUSH2 0xDB9 JUMP JUMPDEST SWAP2 PUSH2 0xB45 PUSH2 0x1051 JUMP JUMPDEST DUP2 MLOAD ISZERO PUSH2 0xCD5 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP4 AND SWAP3 DUP4 ISZERO PUSH2 0xCAE JUMPI DUP4 PUSH0 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x1 DUP4 MSTORE DUP6 PUSH0 KECCAK256 DUP7 MLOAD SWAP1 PUSH2 0xB84 DUP3 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH1 0xFF SWAP2 PUSH2 0xB94 DUP4 DUP4 AND DUP3 PUSH2 0xF14 JUMP JUMPDEST DUP9 DUP4 DUP1 DUP5 PUSH1 0x8 SHR AND ISZERO SWAP4 DUP5 ISZERO DUP10 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP2 ADD MSTORE PUSH2 0xC83 JUMPI PUSH2 0xBBA DUP6 PUSH2 0x11DB JUMP JUMPDEST SWAP3 DUP4 PUSH0 MSTORE PUSH0 DUP6 MSTORE DUP8 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0xC2D JUMPI DUP7 PUSH2 0xC07 DUP8 DUP11 PUSH1 0x2 DUP10 DUP10 PUSH0 MSTORE MSTORE PUSH0 KECCAK256 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0xF70 JUMP JUMPDEST PUSH32 0x6618A6A1A6A413A59097E7C362EE8260AFAE8F07BD94BC0938E573058465483 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP6 PUSH2 0xC4F DUP7 DUP11 SWAP6 SWAP5 PUSH2 0x2C2 SWAP5 PUSH0 MSTORE PUSH1 0x1 DUP3 MSTORE DUP7 PUSH0 KECCAK256 SWAP2 DUP8 MLOAD SWAP3 PUSH2 0x2E8 DUP5 PUSH2 0xDDC JUMP JUMPDEST SWAP4 PUSH2 0x345 DUP2 MLOAD SWAP6 DUP7 SWAP6 PUSH32 0x4466CF0C00000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD SWAP1 PUSH2 0xEDA JUMP JUMPDEST DUP6 DUP3 PUSH32 0xF5B5D36400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH32 0xB4D92C5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0x907F9FD900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x3D9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x3D9 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xD2C PUSH2 0xD96 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 PUSH2 0xD42 DUP5 PUSH2 0xDDC JUMP JUMPDEST SLOAD PUSH2 0xD4F DUP3 DUP3 AND DUP6 PUSH2 0xF14 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x8 SHR AND ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x10 SHR AND ISZERO ISZERO SWAP2 DUP3 DUP3 DUP3 ADD MSTORE DUP3 PUSH2 0xD7A JUMPI JUMPDEST PUSH1 0x20 DUP4 DUP4 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP MLOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x261 JUMPI POP PUSH1 0x2 PUSH1 0x20 SWAP3 EQ SWAP1 PUSH0 PUSH2 0xD6E JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x3D9 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDF8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDF8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x3D9 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xDF8 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0xEB9 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND ADD DUP6 PUSH2 0xE25 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x3D9 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xEE7 JUMPI MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xEE7 JUMPI MSTORE JUMP JUMPDEST MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0xEE7 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP2 DUP4 SWAP3 MLOAD SWAP2 DUP3 SWAP2 ADD DUP4 MCOPY DUP2 ADD PUSH0 DUP2 MSTORE SUB SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0xFEB DUP2 PUSH2 0xDDC JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x3D9 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x3D9 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x104A PUSH1 0x20 SWAP3 SWAP6 SWAP5 SWAP6 PUSH1 0x40 DUP6 MSTORE PUSH1 0x40 DUP6 ADD SWAP1 PUSH2 0xF2D JUMP JUMPDEST SWAP5 AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH2 0x107D PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0xF8C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x11AE JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x11B9 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x11AE JUMPI PUSH0 SWAP3 PUSH2 0x1177 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x114F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x11A7 JUMPI JUMPDEST PUSH2 0x118E DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3D9 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x3D9 JUMPI PUSH0 DUP1 PUSH2 0x1146 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1184 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x11D4 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x72A JUMPI PUSH2 0x71B DUP2 DUP4 PUSH2 0xE25 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x10F5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFEB PUSH1 0x20 DUP3 DUP2 DUP1 DUP3 ADD SWAP6 DUP1 MLOAD SWAP2 DUP3 SWAP2 ADD DUP8 MCOPY DUP2 ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB DUP1 DUP5 MSTORE ADD DUP3 PUSH2 0xE25 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE MSTORE8 CALLDATACOPY SWAP8 0xC8 0xCC 0xB0 0xC DUP7 0xC7 SMOD 0xD4 ADD ISZERO 0xE8 ORIGIN GAS SWAP16 PUSH6 0xD02DBF313132 BYTE SHL 0xA6 0x2C CALLDATALOAD STOP DUP9 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"2741:12089:72:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1581:26:46;2741:12089:72;1581:26:46;;;2741:12089:72;;;;;;;;;;;;;;;;;-1:-1:-1;;2741:12089:72;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;1525:73:32;;:::i;:::-;7303:29:72;;7299:88;;2741:12089;;7401:31;7397:90;;2741:12089;;;;7572:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;7612:123;;7841:28;;;;:::i;:::-;2741:12089;;;;;;;;;;;;;7956:37;7952:197;;2741:12089;;;;8245:16;2741:12089;;;;;;;8287:34;8283:132;;2741:12089;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8728:124;;;;:::i;:::-;;;;2741:12089;7572:13;2741:12089;;7572:13;8728:124;;;2741:12089;;;;;;;;;;;;;;;;;;;;;8868:71;2741:12089;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8868:71;:::i;:::-;;;2741:12089;8868:71;;2741:12089;;;;;;;;;;;8283:132;2741:12089;8344:60;2741:12089;;;;8344:60;;;;;;;;;:::i;:::-;;;;7952:197;2741:12089;;;8106:17;2741:12089;;;;;;7572:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8106:17;:::i;:::-;2741:12089;;;;8076:62;;;;;;;;2741:12089;;:::i;:::-;;;;;;;;;;:::i;7612:123::-;2741:12089;;;;;;;;;;7656:68;2741:12089;7656:68;2741:12089;;;;;7656:68;7397:90;7455:21;2741:12089;7455:21;2741:12089;7455:21;7299:88;7355:21;2741:12089;7355:21;2741:12089;7355:21;2741:12089;;;;;;;;;;;;;-1:-1:-1;;2741:12089:72;;;;;;;;;;;;;;;;;;;:::i;:::-;1525:73:32;;;:::i;:::-;2741:12089:72;;9098:31;9094:90;;9256:28;;;:::i;:::-;2741:12089;;;;;;;;;;;;;9364:29;;;9360:106;;2741:12089;;;9503:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;9629:112;;2741:12089;;;9503:13;2741:12089;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9850:78;;;;:::i;:::-;;;2741:12089;9850:78;;2741:12089;9629:112;2741:12089;;9682:48;;;2741:12089;9682:48;2741:12089;;9682:48;;;;:::i;9360:106::-;2741:12089;;;;;9416:39;;;;;;;;2741:12089;;;;;;:::i;9094:90::-;9152:21;;2741:12089;9152:21;2741:12089;9152:21;2741:12089;;;;;;-1:-1:-1;;2741:12089:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;13008:13;2741:12089;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13149:50;;;2741:12089;;;;;;;;;;;13149:50;2741:12089;;;;;;;;;;;;;;13166:33;13149:50;;;;;2741:12089;;;;;;;;;;;;;;;;;-1:-1:-1;;2741:12089:72;;;;;;1581:26:46;2741:12089:72;;1581:26:46;;2741:12089:72;1581:26:46;;1124:6:44;;;2741:12089:72;1581:26:46;;;;;;;;;;2741:12089:72;1581:26:46;;;2741:12089:72;;;;;;;;1581:26:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;2741:12089:72;;;;;;;;;;;;;;;-1:-1:-1;;2741:12089:72;;;;;;;;;1124:6:44;2741:12089:72;;;;;;;;;;-1:-1:-1;;2741:12089:72;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;14436:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2741:12089:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;2741:12089:72;;;;;;;;:::i;:::-;1525:73:32;;:::i;:::-;2741:12089:72;10083:29;;;10079:88;;2741:12089;;;10204:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;10300:109;;2741:12089;;;10499:102;;2741:12089;;;;;;10204:13;2741:12089;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10968:43;2741:12089;10968:43;;2741:12089;10499:102;10548:42;;;2741:12089;10548:42;2741:12089;;;10548:42;10300:109;10353:45;;;2741:12089;10353:45;2741:12089;;;10353:45;2741:12089;;;;;;;-1:-1:-1;;2741:12089:72;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13412:13;13458:28;2741:12089;13458:28;;:::i;:::-;2741:12089;;;;;;;;;;;;;13641:31;;;13637:110;;2741:12089;;;;;;13784:13;2741:12089;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;14100:54;;;2741:12089;14096:158;;;;;2741:12089;;;;;;;;;;;;;;;;14096:158;2741:12089;;14170:35;;-1:-1:-1;2741:12089:72;;;-1:-1:-1;14096:158:72;;;;14100:54;2741:12089;;;-1:-1:-1;2741:12089:72;;;;;;;14121:33;14100:54;;;;;13637:110;2741:12089;;13708:16;2741:12089;;;;;;;;13637:110;;;2741:12089;;;;;;;-1:-1:-1;;2741:12089:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;1525:73:32;;;:::i;:::-;2741:12089:72;;11263:32;11259:92;;2741:12089;;;;11365:29;;;11361:88;;2741:12089;;;;;11540:13;2741:12089;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;11580:109;;12074:29;;;:::i;:::-;2741:12089;;;;;;;;;;;;12190:37;12186:193;;2741:12089;12521:52;2741:12089;;12459:16;2741:12089;;;;;;;;;;;;;;;12521:52;:::i;:::-;;2741:12089;12521:52;;2741:12089;12186:193;2741:12089;12335:17;2741:12089;;;;;;;;11540:13;2741:12089;;;;;;;;;;;;:::i;12335:17::-;2741:12089;;;;12310:58;;;;;;;;2741:12089;;:::i;11580:109::-;11633:45;;;2741:12089;11633:45;2741:12089;;;11633:45;11361:88;11417:21;;2741:12089;11417:21;2741:12089;11417:21;11259:92;11318:22;2741:12089;11318:22;2741:12089;11318:22;2741:12089;;;;;;;;-1:-1:-1;;2741:12089:72;;;;;;;;:::i;:::-;;;;13008:13;2741:12089;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13149:50;;;2741:12089;;;;;;;;;;;13149:50;2741:12089;;;;;;;;;;;;14638:19;2741:12089;;13166:33;13149:50;;;;2741:12089;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;2741:12089:72;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;-1:-1:-1;2741:12089:72;;;;;-1:-1:-1;2741:12089:72;;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2741:12089:72;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;2741:12089:72;;;;;;:::o;1931:430:32:-;2741:12089:72;;;2303:50:32;;;2320:22;;2741:12089:72;;;;;;;2303:50:32;;;;;;:::i;:::-;2741:12089:72;2293:61:32;;1931:430;:::o;2741:12089:72:-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;1688:201:32:-;1762:20;1774:7;;;;1762:20;:::i;:::-;2741:12089:72;;;;1336:22:44;;;:6;;;:22;:6;;;2741:12089:72;1336:22:44;;;;;;;;;1774:7:32;1336:22:44;;;1688:201:32;2741:12089:72;;;;;1336:64:44;;;;;2741:12089:72;1336:64:44;;:22;:64;;2741:12089:72;1820:10:32;2741:12089:72;;;;1394:4:44;2741:12089:72;;;;;1336:64:44;;;;;;;1774:7:32;1336:64:44;;;1688:201:32;1797:34;;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;1336:22:44;1774:7:32;1854:18;1336:64:44;;;;;;;;;;;;;;;;:::i;:::-;;;2741:12089:72;;;;;;;;;;;;1336:64:44;;;;;;;;;;2741:12089:72;;;1774:7:32;2741:12089:72;;;;;1336:22:44;2741:12089:72;1336:22:44;;;;;;;;;;;;;;;:::i;:::-;;;;;14679:149:72;2741:12089;;14790:30;;;;;;;2741:12089;;;;;;;;;;;-1:-1:-1;2741:12089:72;;;;14790:30;;;;;;;:::i"},"methodIdentifiers":{"addOrUpdateBalancerContractAlias(string,address)":"2967af96","deprecateBalancerContract(address)":"44969a9c","deregisterBalancerContract(string)":"c7f90793","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getBalancerContract(uint8,string)":"41d8c0bb","getBalancerContractInfo(address)":"8554c327","getVault()":"8d928af8","isActiveBalancerContract(uint8,address)":"ae2733a4","isTrustedRouter(address)":"264e97e0","registerBalancerContract(uint8,string,address)":"e0376ab4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractAliasInUseAsName\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAlreadyDeprecated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractNameInUseAsAlias\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"InconsistentState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractAlias\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractName\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroContractAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAliasUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"addOrUpdateBalancerContractAlias\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"deprecateBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"deregisterBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"getBalancerContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"getBalancerContractInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"internalType\":\"struct IBalancerContractRegistry.ContractInfo\",\"name\":\"info\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"isActiveBalancerContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"isTrustedRouter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"registerBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Maintain a registry of official Balancer Factories, Routers, Hooks, and valid ERC4626 tokens, for two main purposes. The first is to support the many instances where we need to know that a contract is \\\"trusted\\\" (i.e., is safe and behaves in the required manner). For instance, some hooks depend critically on the identity of the msg.sender, which must be passed down through the Router. Since Routers are permissionless, a malicious one could spoof the sender and \\\"fool\\\" the hook. The hook must therefore \\\"trust\\\" the Router. It is also important for the front-end to know when a particular wrapped token should be used with buffers. Not all \\\"ERC4626\\\" wrapped tokens are fully conforming, and buffer operations with non-conforming tokens may fail in various unexpected ways. It is not enough to simply check whether a buffer exists (e.g., by calling `getBufferAsset`), since best practice is for the pool creator to initialize buffers for all such tokens regardless. They are permissionless, and could otherwise be initialized by anyone in unexpected ways. This registry could be used to keep track of \\\"known good\\\" buffers, such that `isActiveBalancerContract(ContractType.ERC4626,
)` returns true for fully-compliant tokens with properly initialized buffers. Current solutions involve passing in the address of the trusted Router on deployment: but what if it needs to support multiple Routers? Or if the Router is deprecated and replaced? Instead, we can pass the registry address, and query this contract to determine whether the Router is a \\\"trusted\\\" one. The second use case is for off-chain queries, or other protocols that need to easily determine, say, the \\\"latest\\\" Weighted Pool Factory. This contract provides `isActiveBalancerContract(type, address)` for the first case, and `getBalancerContract(type, name)` for the second. It is also possible to query all known information about an address, using `getBalancerContractInfo(address)`, which returns a struct with the detailed state. Note that the `SingletonAuthentication` base contract provides `getVault`, so it is also possible to ask this contract for the Vault address, so it doesn't need to be a type.\",\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"details\":\"Both names and addresses must be unique in the primary registration mapping. Though there are two mappings to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent name => address => state mapping.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractType\":\"The contract type, provided for documentation purposes\"}}],\"ContractAddressNotRegistered(address)\":[{\"details\":\"A contract being deprecated was never registered, or the target of an alias isn't a previously registered contract.\",\"params\":{\"contractAddress\":\"The address of the contract that was not registered\"}}],\"ContractAliasInUseAsName(uint8,string)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractName\":\"The name of the previously registered contract (and proposed alias)\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractAlreadyDeprecated(address)\":[{\"params\":{\"contractAddress\":\"The address of the previously deprecated contract\"}}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"details\":\"Note that names must be unique; it is not possible to register two contracts with the same name and different types, or the same name and different addresses.\",\"params\":{\"contractName\":\"The name of the previously registered contract\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractNameInUseAsAlias(string,address)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractName\":\"The name of the previously registered contract\"}}],\"ContractNameNotRegistered(string)\":[{\"params\":{\"contractName\":\"The name of the unregistered contract\"}}],\"InconsistentState(string,address)\":[{\"details\":\"This should never happen.\",\"params\":{\"contractAddress\":\"The address of the contract with missing state\",\"contractName\":\"The name of the contract that has a registry entry but no contract info\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"details\":\"This sets the `isActive` flag to false.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"BalancerContractDeregistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deregistered\",\"contractName\":\"The name of the contract being deregistered\",\"contractType\":\"The type of contract being deregistered\"}},\"BalancerContractRegistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being registered\",\"contractName\":\"The name of the contract being registered\",\"contractType\":\"The type of contract being registered\"}},\"ContractAliasUpdated(string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deprecated\",\"contractAlias\":\"The alias name\"}}},\"kind\":\"dev\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"details\":\"This is a permissioned function to support querying by a contract alias. For instance, we might create a `WeightedPool` alias meaning the \\\"latest\\\" version of the `WeightedPoolFactory`, so that off-chain users don't need to track specific versions. Once added, an alias can also be updated to point to a different address (e.g., when migrating from the v2 to the v3 weighted pool).\",\"params\":{\"contractAlias\":\"An alternate name that can be used to fetch a contract address\",\"existingContract\":\"The target address of the contract alias\"}},\"deprecateBalancerContract(address)\":{\"details\":\"This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are enforced unique, so either the name or address could be specified in principle.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"deregisterBalancerContract(string)\":{\"details\":\"This is a permissioned function, and makes it possible to correct errors without complex update logic. If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete it, and register it again with the correct data. It must start with the name, as this is the registry key, required for complete deletion. Note that there might still be an alias targeting the address being deleted, but accessing it will just return inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to the correct address.\",\"params\":{\"contractName\":\"The name of the contract being deprecated (cannot be an alias)\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getBalancerContract(uint8,string)\":{\"details\":\"This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias (e.g., `WeightedPool`).\",\"params\":{\"contractName\":\"The name of the contract\",\"contractType\":\"The type of the contract\"},\"returns\":{\"contractAddress\":\"The address of the associated contract, if registered, or zero\",\"isActive\":\"True if the contract was registered and not deprecated\"}},\"getBalancerContractInfo(address)\":{\"params\":{\"contractAddress\":\"The address of the associated contract\"},\"returns\":{\"info\":\"ContractInfo struct corresponding to the address\"}},\"getVault()\":{\"details\":\"This function is virtual to allow for overriding in derived contracts which also inherits contracts with `getVault()` definition.\",\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isActiveBalancerContract(uint8,address)\":{\"params\":{\"contractAddress\":\"The address of the contract\",\"contractType\":\"The type of contract\"},\"returns\":{\"_0\":\"True if the given address is a registered and active contract of the specified type\"}},\"registerBalancerContract(uint8,string,address)\":{\"details\":\"This is a permissioned function, and does only basic validation of the address (non-zero) and the name (not blank). Governance must ensure this is called with valid information. Emits the `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or already in use.\",\"params\":{\"contractAddress\":\"The address of the contract\",\"contractName\":\"A text description of the contract, usually the deployed version (e.g., \\\"v3-pool-weighted\\\")\",\"contractType\":\"The type of contract being registered\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"notice\":\"A contract has already been registered under the given address.\"}],\"ContractAddressNotRegistered(address)\":[{\"notice\":\"An operation that requires a valid contract specified an unrecognized address.\"}],\"ContractAliasInUseAsName(uint8,string)\":[{\"notice\":\"The proposed alias has already been registered as a contract.\"}],\"ContractAlreadyDeprecated(address)\":[{\"notice\":\"Contracts can only be deprecated once.\"}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"notice\":\"A contract has already been registered under the given name.\"}],\"ContractNameInUseAsAlias(string,address)\":[{\"notice\":\"The proposed contract name has already been added as an alias.\"}],\"ContractNameNotRegistered(string)\":[{\"notice\":\"Thrown when attempting to deregister a contract that was not previously registered.\"}],\"InconsistentState(string,address)\":[{\"notice\":\"A `_contractRegistry` entry has no corresponding `_contractInfo`.\"}],\"InvalidContractAlias()\":[{\"notice\":\"Cannot add an empty string as an alias.\"}],\"InvalidContractName()\":[{\"notice\":\"Cannot register (or deregister) a contract with an empty string as a name.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"ZeroContractAddress()\":[{\"notice\":\"Cannot register or deprecate contracts, or add an alias targeting the zero address.\"}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"notice\":\"Emitted when a registered contract is deprecated.\"},\"BalancerContractDeregistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is deregistered (deleted).\"},\"BalancerContractRegistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is registered.\"},\"ContractAliasUpdated(string,address)\":{\"notice\":\"Emitted when an alias is added or updated.\"}},\"kind\":\"user\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"notice\":\"Add an alias for a registered contract.\"},\"deprecateBalancerContract(address)\":{\"notice\":\"Deprecate an official Balancer contract.\"},\"deregisterBalancerContract(string)\":{\"notice\":\"Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getBalancerContract(uint8,string)\":{\"notice\":\"Look up a registered contract by type and name.\"},\"getBalancerContractInfo(address)\":{\"notice\":\"Look up complete information about a registered contract by address.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isActiveBalancerContract(uint8,address)\":{\"notice\":\"Determine whether an address is an official contract of the specified type.\"},\"isTrustedRouter(address)\":{\"notice\":\"Returns `true` if the given address is an active contract under the ROUTER type.\"},\"registerBalancerContract(uint8,string,address)\":{\"notice\":\"Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"}},\"notice\":\"On-chain registry of standard Balancer contracts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/BalancerContractRegistry.sol\":\"BalancerContractRegistry\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x11ec2b653633cbcc6a99d426df178007a98d1154a39a1ada961239be39eec069\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://40eed42ee57746bbf4711bb4aee856328cd70cc02aa3ff05e8dd719868fcd524\",\"dweb:/ipfs/QmX5uAoB9W6UUehgSRvVW6hun3XE53eZwKsm4kHVqtJs8C\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"contracts/BalancerContractRegistry.sol\":{\"keccak256\":\"0xe663b63efd85bfd87be43f71aa1ab26bea25b774d28a7395247dae4c7c574549\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://56b5ebe6871f2531c7c5f640ecc3a71819502aabaed032ae7b1b097c1de6bbec\",\"dweb:/ipfs/QmVNHtCJWMuQcQBq5zbucsTXAHdGpzgGNkvt7TAxHtvxGW\"]}},\"version\":1}"}},"contracts/BalancerFeeBurner.sol":{"BalancerFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IProtocolFeeSweeper","name":"_protocolFeeSweeper","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BurnPathDoesNotExist","type":"error"},{"inputs":[],"name":"InvalidProtocolFeeSweeper","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"inputs":[],"name":"TargetTokenOutMismatch","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"feeTokenAmount","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"feeTokenAmount","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct IBalancerFeeBurner.BurnHookParams","name":"params","type":"tuple"}],"name":"burnHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"feeToken","type":"address"}],"name":"getBurnPath","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"}],"internalType":"struct IBalancerFeeBurner.SwapPathStep[]","name":"steps","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeSweeper","outputs":[{"internalType":"contract IProtocolFeeSweeper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"}],"internalType":"struct IBalancerFeeBurner.SwapPathStep[]","name":"steps","type":"tuple[]"}],"name":"setBurnPath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461013e57601f61162a38819003918201601f19168301916001600160401b038311848410176101425780849260609460405283398101031261013e5780516001600160a01b0391828216820361013e576020810151918383169182840361013e57604001519084821680920361013e57608052801561012b5760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a31561011c5760a0526114d390816101578239608051818181610622015281816107c80152818161093a01528181610a3101528181610c5101528181610d540152610de7015260a0518181816101bd015281816104b201526112530152f35b63932c92a560e01b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f905f3560e01c908163178ac96e1461122957508063715018a6146111a457806379ba5097146110ed5780638da5cb5b146110bb578063c1cfb02a1461103a578063c66472de14610754578063de557a3214610456578063e30c397814610422578063e3746cb21461011d5763f2fde38b1461008c575f80fd5b3461011a57602060031936011261011a576100a5611277565b6100ad61147d565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b503461011a57604060031936011261011a57610137611277565b602480359167ffffffffffffffff9182841161041e573660238501121561041e57836004013592831161041e5760069336828560061b8301011161041a5773ffffffffffffffffffffffffffffffffffffffff90604051937f4ccb20c00000000000000000000000000000000000000000000000000000000085526020948581600481877f0000000000000000000000000000000000000000000000000000000000000000165afa801561040f5784918a916103d1575b5016331415806103c4575b61039c57821680885260029060028652604089208054908a815581610318575b5050885b878110610228578980f35b818a5282875260408a20818a1b8501908054680100000000000000008110156102ec576001918282018082558210156102c0578d52898d20600194939291821b019088906102b2906044908361027f878f016113b5565b16947fffffffffffffffffffffffff000000000000000000000000000000000000000095868254161781550194016113b5565b16908254161790550161021d565b898e7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b888d7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6001907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83168303610370578b5283888c209260011b8301925b838110610360575050610219565b8c81558c83820155018490610352565b878c7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004887f23dada53000000000000000000000000000000000000000000000000000000008152fd5b50828854163314156101f9565b809250878092503d8311610408575b6103ea818361129a565b81010312610404575183811681036104045783905f6101ee565b8880fd5b503d6103e0565b6040513d8b823e3d90fd5b8580fd5b8480fd5b503461011a578060031936011261011a57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461011a5760e060031936011261011a57610470611277565b60243573ffffffffffffffffffffffffffffffffffffffff9182821680920361075057606435928084168094036107505760a4359381851680950361075057817f0000000000000000000000000000000000000000000000000000000000000000163303610728576040519261010084019567ffffffffffffffff96858110888211176106ec5784928391604052168552602095828787019433865260408801928352606088016044358152608089019182528260a08a0194608435865260c08b019687528160e08c019960c4358b528d826040519e8f9283017fc66472de00000000000000000000000000000000000000000000000000000000905251169060240152511660448c0152511660648a0152516084890152511660a48701525160c4860152511660e484015251610104908184015282526101409182810191818310868411176106ec57828791816040527f48c894910000000000000000000000000000000000000000000000000000000082528661014485015281837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08661061d61016482018261143a565b0301927f0000000000000000000000000000000000000000000000000000000000000000165af1801561071d57610652578580f35b3d8087843e610661818461129a565b81019184828585019403126107195751908582116107195701918161015f8401121561041a57820151916101609483116106ec578594604051926106cc867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116018561129a565b84845281858401011161041a578391018483015e0101525f808080808580f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8680fd5b6040513d88823e3d90fd5b6004867f23dada53000000000000000000000000000000000000000000000000000000008152fd5b5f80fd5b503461075057610100600319360112610750577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6110125760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610fe65760e4354211610fbe5773ffffffffffffffffffffffffffffffffffffffff60443516604435036107505760843573ffffffffffffffffffffffffffffffffffffffff81168103610750576108436044356112db565b91825190817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810111610f915773ffffffffffffffffffffffffffffffffffffffff831673ffffffffffffffffffffffffffffffffffffffff60206108ca7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8601886113d6565b5101511603610f695760243573ffffffffffffffffffffffffffffffffffffffff811680910361075057604051907f23b872dd000000000000000000000000000000000000000000000000000000006020830152602482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660448201526064356064820152606481528060a081011067ffffffffffffffff60a0830111176106ec575f8160a0602093016040528281519101826044355af115610cf3575f513d610f60575073ffffffffffffffffffffffffffffffffffffffff604435163b155b610f1c576040517f15afd40900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff60443516600482015260643560248201526020816044815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610cf357610eed575b50604435935f916064355b8251841015610d3257610a7c84846113d6565b519073ffffffffffffffffffffffffffffffffffffffff8251169073ffffffffffffffffffffffffffffffffffffffff602084015116907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff880187145f14610d2b5760a435915b6040519384602081011067ffffffffffffffff6020870111176106ec57602085016040525f85526040519b8c67ffffffffffffffff60e08281810110920111176106ec5773ffffffffffffffffffffffffffffffffffffffff9160208e60e081016040525f815201521660408c015260608b015260808a015260a089015260c0880152604051967f2bfb780c000000000000000000000000000000000000000000000000000000008852602060048901528051906002821015610cfe5788610c3760c08293606095602485015273ffffffffffffffffffffffffffffffffffffffff602082015116604485015273ffffffffffffffffffffffffffffffffffffffff604082015116606485015273ffffffffffffffffffffffffffffffffffffffff86820151166084850152608081015160a485015260a081015160c4850152015160e060e484015261010483019061143a565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1968715610cf3575f97610ca8575b5073ffffffffffffffffffffffffffffffffffffffff602060019201511696930192610a69565b9096506060813d606011610ceb575b81610cc46060938361129a565b8101031261075057604001519573ffffffffffffffffffffffffffffffffffffffff610c81565b3d9150610cb7565b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f91610ae3565b859087610d3d611417565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156107505773ffffffffffffffffffffffffffffffffffffffff9081604051937fae6393290000000000000000000000000000000000000000000000000000000085521660048401521660248201528160448201525f816064818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610cf357610ed0575b506004359173ffffffffffffffffffffffffffffffffffffffff83168093036107505773ffffffffffffffffffffffffffffffffffffffff9081610e56611417565b604051946064358652602086015216604084015216917f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d606073ffffffffffffffffffffffffffffffffffffffff6044351693a4807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b90925067ffffffffffffffff81116106ec576040525f9183610e14565b6020813d602011610f14575b81610f066020938361129a565b810103126107505751610a5e565b3d9150610ef9565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff6044351660045260245ffd5b600114156109c3565b7fa682e903000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7fe08b8af0000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610750576020806003193601126107505761105c611057611277565b6112db565b60405190828201838352815180915283604084019201935f5b8281106110825784840385f35b8551805173ffffffffffffffffffffffffffffffffffffffff908116865290830151168483015294810194604090930192600101611075565b34610750575f60031936011261075057602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610750575f6003193601126107505760015473ffffffffffffffffffffffffffffffffffffffff3381831603611178577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b34610750575f600319360112610750576111bc61147d565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610750575f6003193601126107505760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361075057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106ec57604052565b9073ffffffffffffffffffffffffffffffffffffffff8092165f52600260206002815260409160405f209485549267ffffffffffffffff968785116106ec57916040519761132e838760051b018a61129a565b8589525f93845282842091838a015b87861061137e5750505050505050505081511561135657565b7ff9aa0315000000000000000000000000000000000000000000000000000000005f5260045ffd5b8851898101818110858211176106ec57600192899288928d528588541681528585890154168382015281520194019501949261133d565b3573ffffffffffffffffffffffffffffffffffffffff811681036107505790565b80518210156113ea5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b60c43573ffffffffffffffffffffffffffffffffffffffff811681036107505790565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f541633036111785756fea2646970667358221220bdadc1f960d3e63533605b5824854ab1992a4aaef56fd475a3e09a574f3dbd5164736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x13E JUMPI PUSH1 0x1F PUSH2 0x162A CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x142 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x60 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x13E JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND DUP3 SUB PUSH2 0x13E JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP2 DUP4 DUP4 AND SWAP2 DUP3 DUP5 SUB PUSH2 0x13E JUMPI PUSH1 0x40 ADD MLOAD SWAP1 DUP5 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x13E JUMPI PUSH1 0x80 MSTORE DUP1 ISZERO PUSH2 0x12B JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ISZERO PUSH2 0x11C JUMPI PUSH1 0xA0 MSTORE PUSH2 0x14D3 SWAP1 DUP2 PUSH2 0x157 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH2 0x622 ADD MSTORE DUP2 DUP2 PUSH2 0x7C8 ADD MSTORE DUP2 DUP2 PUSH2 0x93A ADD MSTORE DUP2 DUP2 PUSH2 0xA31 ADD MSTORE DUP2 DUP2 PUSH2 0xC51 ADD MSTORE DUP2 DUP2 PUSH2 0xD54 ADD MSTORE PUSH2 0xDE7 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1BD ADD MSTORE DUP2 DUP2 PUSH2 0x4B2 ADD MSTORE PUSH2 0x1253 ADD MSTORE RETURN JUMPDEST PUSH4 0x932C92A5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP1 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x178AC96E EQ PUSH2 0x1229 JUMPI POP DUP1 PUSH4 0x715018A6 EQ PUSH2 0x11A4 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x10ED JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x10BB JUMPI DUP1 PUSH4 0xC1CFB02A EQ PUSH2 0x103A JUMPI DUP1 PUSH4 0xC66472DE EQ PUSH2 0x754 JUMPI DUP1 PUSH4 0xDE557A32 EQ PUSH2 0x456 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x422 JUMPI DUP1 PUSH4 0xE3746CB2 EQ PUSH2 0x11D JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0x8C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x11A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH2 0xA5 PUSH2 0x1277 JUMP JUMPDEST PUSH2 0xAD PUSH2 0x147D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE DUP3 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x11A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH2 0x137 PUSH2 0x1277 JUMP JUMPDEST PUSH1 0x24 DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 GT PUSH2 0x41E JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x41E JUMPI DUP4 PUSH1 0x4 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0x41E JUMPI PUSH1 0x6 SWAP4 CALLDATASIZE DUP3 DUP6 PUSH1 0x6 SHL DUP4 ADD ADD GT PUSH2 0x41A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 DUP2 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x40F JUMPI DUP5 SWAP2 DUP11 SWAP2 PUSH2 0x3D1 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0x3C4 JUMPI JUMPDEST PUSH2 0x39C JUMPI DUP3 AND DUP1 DUP9 MSTORE PUSH1 0x2 SWAP1 PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 DUP10 KECCAK256 DUP1 SLOAD SWAP1 DUP11 DUP2 SSTORE DUP2 PUSH2 0x318 JUMPI JUMPDEST POP POP DUP9 JUMPDEST DUP8 DUP2 LT PUSH2 0x228 JUMPI DUP10 DUP1 RETURN JUMPDEST DUP2 DUP11 MSTORE DUP3 DUP8 MSTORE PUSH1 0x40 DUP11 KECCAK256 DUP2 DUP11 SHL DUP6 ADD SWAP1 DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x2EC JUMPI PUSH1 0x1 SWAP2 DUP3 DUP3 ADD DUP1 DUP3 SSTORE DUP3 LT ISZERO PUSH2 0x2C0 JUMPI DUP14 MSTORE DUP10 DUP14 KECCAK256 PUSH1 0x1 SWAP5 SWAP4 SWAP3 SWAP2 DUP3 SHL ADD SWAP1 DUP9 SWAP1 PUSH2 0x2B2 SWAP1 PUSH1 0x44 SWAP1 DUP4 PUSH2 0x27F DUP8 DUP16 ADD PUSH2 0x13B5 JUMP JUMPDEST AND SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP6 DUP7 DUP3 SLOAD AND OR DUP2 SSTORE ADD SWAP5 ADD PUSH2 0x13B5 JUMP JUMPDEST AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE ADD PUSH2 0x21D JUMP JUMPDEST DUP10 DUP15 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE REVERT JUMPDEST DUP9 DUP14 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH1 0x1 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP4 SUB PUSH2 0x370 JUMPI DUP12 MSTORE DUP4 DUP9 DUP13 KECCAK256 SWAP3 PUSH1 0x1 SHL DUP4 ADD SWAP3 JUMPDEST DUP4 DUP2 LT PUSH2 0x360 JUMPI POP POP PUSH2 0x219 JUMP JUMPDEST DUP13 DUP2 SSTORE DUP13 DUP4 DUP3 ADD SSTORE ADD DUP5 SWAP1 PUSH2 0x352 JUMP JUMPDEST DUP8 DUP13 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP9 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP DUP3 DUP9 SLOAD AND CALLER EQ ISZERO PUSH2 0x1F9 JUMP JUMPDEST DUP1 SWAP3 POP DUP8 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x408 JUMPI JUMPDEST PUSH2 0x3EA DUP2 DUP4 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x404 JUMPI MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x404 JUMPI DUP4 SWAP1 PUSH0 PUSH2 0x1EE JUMP JUMPDEST DUP9 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x3E0 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x11A JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x11A JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH2 0x470 PUSH2 0x1277 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x750 JUMPI PUSH1 0x64 CALLDATALOAD SWAP3 DUP1 DUP5 AND DUP1 SWAP5 SUB PUSH2 0x750 JUMPI PUSH1 0xA4 CALLDATALOAD SWAP4 DUP2 DUP6 AND DUP1 SWAP6 SUB PUSH2 0x750 JUMPI DUP2 PUSH32 0x0 AND CALLER SUB PUSH2 0x728 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x100 DUP5 ADD SWAP6 PUSH8 0xFFFFFFFFFFFFFFFF SWAP7 DUP6 DUP2 LT DUP9 DUP3 GT OR PUSH2 0x6EC JUMPI DUP5 SWAP3 DUP4 SWAP2 PUSH1 0x40 MSTORE AND DUP6 MSTORE PUSH1 0x20 SWAP6 DUP3 DUP8 DUP8 ADD SWAP5 CALLER DUP7 MSTORE PUSH1 0x40 DUP9 ADD SWAP3 DUP4 MSTORE PUSH1 0x60 DUP9 ADD PUSH1 0x44 CALLDATALOAD DUP2 MSTORE PUSH1 0x80 DUP10 ADD SWAP2 DUP3 MSTORE DUP3 PUSH1 0xA0 DUP11 ADD SWAP5 PUSH1 0x84 CALLDATALOAD DUP7 MSTORE PUSH1 0xC0 DUP12 ADD SWAP7 DUP8 MSTORE DUP2 PUSH1 0xE0 DUP13 ADD SWAP10 PUSH1 0xC4 CALLDATALOAD DUP12 MSTORE DUP14 DUP3 PUSH1 0x40 MLOAD SWAP15 DUP16 SWAP3 DUP4 ADD PUSH32 0xC66472DE00000000000000000000000000000000000000000000000000000000 SWAP1 MSTORE MLOAD AND SWAP1 PUSH1 0x24 ADD MSTORE MLOAD AND PUSH1 0x44 DUP13 ADD MSTORE MLOAD AND PUSH1 0x64 DUP11 ADD MSTORE MLOAD PUSH1 0x84 DUP10 ADD MSTORE MLOAD AND PUSH1 0xA4 DUP8 ADD MSTORE MLOAD PUSH1 0xC4 DUP7 ADD MSTORE MLOAD AND PUSH1 0xE4 DUP5 ADD MSTORE MLOAD PUSH2 0x104 SWAP1 DUP2 DUP5 ADD MSTORE DUP3 MSTORE PUSH2 0x140 SWAP2 DUP3 DUP2 ADD SWAP2 DUP2 DUP4 LT DUP7 DUP5 GT OR PUSH2 0x6EC JUMPI DUP3 DUP8 SWAP2 DUP2 PUSH1 0x40 MSTORE PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH2 0x144 DUP6 ADD MSTORE DUP2 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC0 DUP7 PUSH2 0x61D PUSH2 0x164 DUP3 ADD DUP3 PUSH2 0x143A JUMP JUMPDEST SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x71D JUMPI PUSH2 0x652 JUMPI DUP6 DUP1 RETURN JUMPDEST RETURNDATASIZE DUP1 DUP8 DUP5 RETURNDATACOPY PUSH2 0x661 DUP2 DUP5 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SWAP2 DUP5 DUP3 DUP6 DUP6 ADD SWAP5 SUB SLT PUSH2 0x719 JUMPI MLOAD SWAP1 DUP6 DUP3 GT PUSH2 0x719 JUMPI ADD SWAP2 DUP2 PUSH2 0x15F DUP5 ADD SLT ISZERO PUSH2 0x41A JUMPI DUP3 ADD MLOAD SWAP2 PUSH2 0x160 SWAP5 DUP4 GT PUSH2 0x6EC JUMPI DUP6 SWAP5 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x6CC DUP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP9 ADD AND ADD DUP6 PUSH2 0x129A JUMP JUMPDEST DUP5 DUP5 MSTORE DUP2 DUP6 DUP5 ADD ADD GT PUSH2 0x41A JUMPI DUP4 SWAP2 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE PUSH0 DUP1 DUP1 DUP1 DUP1 DUP6 DUP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP7 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x750 JUMPI PUSH2 0x100 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x1012 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0xFE6 JUMPI PUSH1 0xE4 CALLDATALOAD TIMESTAMP GT PUSH2 0xFBE JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD SUB PUSH2 0x750 JUMPI PUSH1 0x84 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x750 JUMPI PUSH2 0x843 PUSH1 0x44 CALLDATALOAD PUSH2 0x12DB JUMP JUMPDEST SWAP2 DUP3 MLOAD SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD GT PUSH2 0xF91 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 PUSH2 0x8CA PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 ADD DUP9 PUSH2 0x13D6 JUMP JUMPDEST MLOAD ADD MLOAD AND SUB PUSH2 0xF69 JUMPI PUSH1 0x24 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x750 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE DUP1 PUSH1 0xA0 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP4 ADD GT OR PUSH2 0x6EC JUMPI PUSH0 DUP2 PUSH1 0xA0 PUSH1 0x20 SWAP4 ADD PUSH1 0x40 MSTORE DUP3 DUP2 MLOAD SWAP2 ADD DUP3 PUSH1 0x44 CALLDATALOAD GAS CALL ISZERO PUSH2 0xCF3 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0xF60 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0xF1C JUMPI PUSH1 0x40 MLOAD PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xCF3 JUMPI PUSH2 0xEED JUMPI JUMPDEST POP PUSH1 0x44 CALLDATALOAD SWAP4 PUSH0 SWAP2 PUSH1 0x64 CALLDATALOAD JUMPDEST DUP3 MLOAD DUP5 LT ISZERO PUSH2 0xD32 JUMPI PUSH2 0xA7C DUP5 DUP5 PUSH2 0x13D6 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD AND SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP5 ADD MLOAD AND SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 ADD DUP8 EQ PUSH0 EQ PUSH2 0xD2B JUMPI PUSH1 0xA4 CALLDATALOAD SWAP2 JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH1 0x20 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x20 DUP8 ADD GT OR PUSH2 0x6EC JUMPI PUSH1 0x20 DUP6 ADD PUSH1 0x40 MSTORE PUSH0 DUP6 MSTORE PUSH1 0x40 MLOAD SWAP12 DUP13 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xE0 DUP3 DUP2 DUP2 ADD LT SWAP3 ADD GT OR PUSH2 0x6EC JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x20 DUP15 PUSH1 0xE0 DUP2 ADD PUSH1 0x40 MSTORE PUSH0 DUP2 MSTORE ADD MSTORE AND PUSH1 0x40 DUP13 ADD MSTORE PUSH1 0x60 DUP12 ADD MSTORE PUSH1 0x80 DUP11 ADD MSTORE PUSH1 0xA0 DUP10 ADD MSTORE PUSH1 0xC0 DUP9 ADD MSTORE PUSH1 0x40 MLOAD SWAP7 PUSH32 0x2BFB780C00000000000000000000000000000000000000000000000000000000 DUP9 MSTORE PUSH1 0x20 PUSH1 0x4 DUP10 ADD MSTORE DUP1 MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0xCFE JUMPI DUP9 PUSH2 0xC37 PUSH1 0xC0 DUP3 SWAP4 PUSH1 0x60 SWAP6 PUSH1 0x24 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x44 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x64 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP3 ADD MLOAD AND PUSH1 0x84 DUP6 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA4 DUP6 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC4 DUP6 ADD MSTORE ADD MLOAD PUSH1 0xE0 PUSH1 0xE4 DUP5 ADD MSTORE PUSH2 0x104 DUP4 ADD SWAP1 PUSH2 0x143A JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP7 DUP8 ISZERO PUSH2 0xCF3 JUMPI PUSH0 SWAP8 PUSH2 0xCA8 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 PUSH1 0x1 SWAP3 ADD MLOAD AND SWAP7 SWAP4 ADD SWAP3 PUSH2 0xA69 JUMP JUMPDEST SWAP1 SWAP7 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0xCEB JUMPI JUMPDEST DUP2 PUSH2 0xCC4 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x750 JUMPI PUSH1 0x40 ADD MLOAD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xC81 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCB7 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP2 PUSH2 0xAE3 JUMP JUMPDEST DUP6 SWAP1 DUP8 PUSH2 0xD3D PUSH2 0x1417 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x750 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE DUP2 PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xCF3 JUMPI PUSH2 0xED0 JUMPI JUMPDEST POP PUSH1 0x4 CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP1 SWAP4 SUB PUSH2 0x750 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH2 0xE56 PUSH2 0x1417 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 PUSH1 0x64 CALLDATALOAD DUP7 MSTORE PUSH1 0x20 DUP7 ADD MSTORE AND PUSH1 0x40 DUP5 ADD MSTORE AND SWAP2 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND SWAP4 LOG4 DUP1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST SWAP1 SWAP3 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6EC JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF14 JUMPI JUMPDEST DUP2 PUSH2 0xF06 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x750 JUMPI MLOAD PUSH2 0xA5E JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xEF9 JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x9C3 JUMP JUMPDEST PUSH32 0xA682E90300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH2 0x105C PUSH2 0x1057 PUSH2 0x1277 JUMP JUMPDEST PUSH2 0x12DB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP3 DUP3 ADD DUP4 DUP4 MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE DUP4 PUSH1 0x40 DUP5 ADD SWAP3 ADD SWAP4 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1082 JUMPI DUP5 DUP5 SUB DUP6 RETURN JUMPDEST DUP6 MLOAD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP7 MSTORE SWAP1 DUP4 ADD MLOAD AND DUP5 DUP4 ADD MSTORE SWAP5 DUP2 ADD SWAP5 PUSH1 0x40 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1075 JUMP JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0x1178 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH2 0x11BC PUSH2 0x147D JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x750 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x6EC JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 SWAP2 PUSH1 0x40 PUSH0 KECCAK256 SWAP5 DUP6 SLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP6 GT PUSH2 0x6EC JUMPI SWAP2 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x132E DUP4 DUP8 PUSH1 0x5 SHL ADD DUP11 PUSH2 0x129A JUMP JUMPDEST DUP6 DUP10 MSTORE PUSH0 SWAP4 DUP5 MSTORE DUP3 DUP5 KECCAK256 SWAP2 DUP4 DUP11 ADD JUMPDEST DUP8 DUP7 LT PUSH2 0x137E JUMPI POP POP POP POP POP POP POP POP POP DUP2 MLOAD ISZERO PUSH2 0x1356 JUMPI JUMP JUMPDEST PUSH32 0xF9AA031500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP9 MLOAD DUP10 DUP2 ADD DUP2 DUP2 LT DUP6 DUP3 GT OR PUSH2 0x6EC JUMPI PUSH1 0x1 SWAP3 DUP10 SWAP3 DUP9 SWAP3 DUP14 MSTORE DUP6 DUP9 SLOAD AND DUP2 MSTORE DUP6 DUP6 DUP10 ADD SLOAD AND DUP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP5 ADD SWAP6 ADD SWAP5 SWAP3 PUSH2 0x133D JUMP JUMPDEST CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x750 JUMPI SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x13EA JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xC4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x750 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x1178 JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBD 0xAD 0xC1 0xF9 PUSH1 0xD3 0xE6 CALLDATALOAD CALLER PUSH1 0x5B PC 0x24 DUP6 BLOBBASEFEE 0xB1 SWAP10 0x2A BLOBBASEFEE 0xAE CREATE2 PUSH16 0xD475A3E09A574F3DBD5164736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1118:3855:73:-:0;;;;;;;;;;;;;-1:-1:-1;;1118:3855:73;;;;-1:-1:-1;;;;;1118:3855:73;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1118:3855:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;409:14:47;;1273:26:48;;1269:95;;1118:3855:73;;;;;;;;2093:20:49;1118:3855:73;;2093:20:49;1118:3855:73;;-1:-1:-1;1118:3855:73;;;;;-1:-1:-1;1118:3855:73;;;;;3052:40:48;-1:-1:-1;3052:40:48;;1203:42:77;1199:107;;1316:40;1541::73;1118:3855;;;;;;409:14:47;1118:3855:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1316:40:77;1118:3855:73;;;;;;;;;;;;;;;;1199:107:77;1268:27;;;-1:-1:-1;1268:27:77;;-1:-1:-1;1268:27:77;1269:95:48;1322:31;;;-1:-1:-1;1322:31:48;-1:-1:-1;1322:31:48;1118:3855:73;;-1:-1:-1;1322:31:48;1118:3855:73;-1:-1:-1;1118:3855:73;;;;;;-1:-1:-1;1118:3855:73;;;;;-1:-1:-1;1118:3855:73"},"deployedBytecode":{"functionDebugData":{"abi_decode_contract_IERC20":{"entryPoint":4727,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_bytes":{"entryPoint":5178,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":4762,"id":null,"parameterSlots":2,"returnSlots":0},"fun_checkOwner":{"entryPoint":5245,"id":9405,"parameterSlots":0,"returnSlots":0},"fun_getBurnPath":{"entryPoint":4827,"id":18294,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_struct_SwapPathStep_dyn":{"entryPoint":5078,"id":null,"parameterSlots":2,"returnSlots":1},"read_from_calldatat_address":{"entryPoint":5143,"id":null,"parameterSlots":0,"returnSlots":1},"read_from_calldatat_contract_IERC20":{"entryPoint":5045,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"9281":[{"length":32,"start":1570},{"length":32,"start":1992},{"length":32,"start":2362},{"length":32,"start":2609},{"length":32,"start":3153},{"length":32,"start":3412},{"length":32,"start":3559}],"19753":[{"length":32,"start":445},{"length":32,"start":1202},{"length":32,"start":4691}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f905f3560e01c908163178ac96e1461122957508063715018a6146111a457806379ba5097146110ed5780638da5cb5b146110bb578063c1cfb02a1461103a578063c66472de14610754578063de557a3214610456578063e30c397814610422578063e3746cb21461011d5763f2fde38b1461008c575f80fd5b3461011a57602060031936011261011a576100a5611277565b6100ad61147d565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b503461011a57604060031936011261011a57610137611277565b602480359167ffffffffffffffff9182841161041e573660238501121561041e57836004013592831161041e5760069336828560061b8301011161041a5773ffffffffffffffffffffffffffffffffffffffff90604051937f4ccb20c00000000000000000000000000000000000000000000000000000000085526020948581600481877f0000000000000000000000000000000000000000000000000000000000000000165afa801561040f5784918a916103d1575b5016331415806103c4575b61039c57821680885260029060028652604089208054908a815581610318575b5050885b878110610228578980f35b818a5282875260408a20818a1b8501908054680100000000000000008110156102ec576001918282018082558210156102c0578d52898d20600194939291821b019088906102b2906044908361027f878f016113b5565b16947fffffffffffffffffffffffff000000000000000000000000000000000000000095868254161781550194016113b5565b16908254161790550161021d565b898e7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b888d7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6001907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83168303610370578b5283888c209260011b8301925b838110610360575050610219565b8c81558c83820155018490610352565b878c7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004887f23dada53000000000000000000000000000000000000000000000000000000008152fd5b50828854163314156101f9565b809250878092503d8311610408575b6103ea818361129a565b81010312610404575183811681036104045783905f6101ee565b8880fd5b503d6103e0565b6040513d8b823e3d90fd5b8580fd5b8480fd5b503461011a578060031936011261011a57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461011a5760e060031936011261011a57610470611277565b60243573ffffffffffffffffffffffffffffffffffffffff9182821680920361075057606435928084168094036107505760a4359381851680950361075057817f0000000000000000000000000000000000000000000000000000000000000000163303610728576040519261010084019567ffffffffffffffff96858110888211176106ec5784928391604052168552602095828787019433865260408801928352606088016044358152608089019182528260a08a0194608435865260c08b019687528160e08c019960c4358b528d826040519e8f9283017fc66472de00000000000000000000000000000000000000000000000000000000905251169060240152511660448c0152511660648a0152516084890152511660a48701525160c4860152511660e484015251610104908184015282526101409182810191818310868411176106ec57828791816040527f48c894910000000000000000000000000000000000000000000000000000000082528661014485015281837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08661061d61016482018261143a565b0301927f0000000000000000000000000000000000000000000000000000000000000000165af1801561071d57610652578580f35b3d8087843e610661818461129a565b81019184828585019403126107195751908582116107195701918161015f8401121561041a57820151916101609483116106ec578594604051926106cc867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f880116018561129a565b84845281858401011161041a578391018483015e0101525f808080808580f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8680fd5b6040513d88823e3d90fd5b6004867f23dada53000000000000000000000000000000000000000000000000000000008152fd5b5f80fd5b503461075057610100600319360112610750577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6110125760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610fe65760e4354211610fbe5773ffffffffffffffffffffffffffffffffffffffff60443516604435036107505760843573ffffffffffffffffffffffffffffffffffffffff81168103610750576108436044356112db565b91825190817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810111610f915773ffffffffffffffffffffffffffffffffffffffff831673ffffffffffffffffffffffffffffffffffffffff60206108ca7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8601886113d6565b5101511603610f695760243573ffffffffffffffffffffffffffffffffffffffff811680910361075057604051907f23b872dd000000000000000000000000000000000000000000000000000000006020830152602482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660448201526064356064820152606481528060a081011067ffffffffffffffff60a0830111176106ec575f8160a0602093016040528281519101826044355af115610cf3575f513d610f60575073ffffffffffffffffffffffffffffffffffffffff604435163b155b610f1c576040517f15afd40900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff60443516600482015260643560248201526020816044815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610cf357610eed575b50604435935f916064355b8251841015610d3257610a7c84846113d6565b519073ffffffffffffffffffffffffffffffffffffffff8251169073ffffffffffffffffffffffffffffffffffffffff602084015116907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff880187145f14610d2b5760a435915b6040519384602081011067ffffffffffffffff6020870111176106ec57602085016040525f85526040519b8c67ffffffffffffffff60e08281810110920111176106ec5773ffffffffffffffffffffffffffffffffffffffff9160208e60e081016040525f815201521660408c015260608b015260808a015260a089015260c0880152604051967f2bfb780c000000000000000000000000000000000000000000000000000000008852602060048901528051906002821015610cfe5788610c3760c08293606095602485015273ffffffffffffffffffffffffffffffffffffffff602082015116604485015273ffffffffffffffffffffffffffffffffffffffff604082015116606485015273ffffffffffffffffffffffffffffffffffffffff86820151166084850152608081015160a485015260a081015160c4850152015160e060e484015261010483019061143a565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1968715610cf3575f97610ca8575b5073ffffffffffffffffffffffffffffffffffffffff602060019201511696930192610a69565b9096506060813d606011610ceb575b81610cc46060938361129a565b8101031261075057604001519573ffffffffffffffffffffffffffffffffffffffff610c81565b3d9150610cb7565b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f91610ae3565b859087610d3d611417565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156107505773ffffffffffffffffffffffffffffffffffffffff9081604051937fae6393290000000000000000000000000000000000000000000000000000000085521660048401521660248201528160448201525f816064818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610cf357610ed0575b506004359173ffffffffffffffffffffffffffffffffffffffff83168093036107505773ffffffffffffffffffffffffffffffffffffffff9081610e56611417565b604051946064358652602086015216604084015216917f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d606073ffffffffffffffffffffffffffffffffffffffff6044351693a4807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b90925067ffffffffffffffff81116106ec576040525f9183610e14565b6020813d602011610f14575b81610f066020938361129a565b810103126107505751610a5e565b3d9150610ef9565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff6044351660045260245ffd5b600114156109c3565b7fa682e903000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7fe08b8af0000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610750576020806003193601126107505761105c611057611277565b6112db565b60405190828201838352815180915283604084019201935f5b8281106110825784840385f35b8551805173ffffffffffffffffffffffffffffffffffffffff908116865290830151168483015294810194604090930192600101611075565b34610750575f60031936011261075057602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610750575f6003193601126107505760015473ffffffffffffffffffffffffffffffffffffffff3381831603611178577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b34610750575f600319360112610750576111bc61147d565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610750575f6003193601126107505760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361075057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106ec57604052565b9073ffffffffffffffffffffffffffffffffffffffff8092165f52600260206002815260409160405f209485549267ffffffffffffffff968785116106ec57916040519761132e838760051b018a61129a565b8589525f93845282842091838a015b87861061137e5750505050505050505081511561135657565b7ff9aa0315000000000000000000000000000000000000000000000000000000005f5260045ffd5b8851898101818110858211176106ec57600192899288928d528588541681528585890154168382015281520194019501949261133d565b3573ffffffffffffffffffffffffffffffffffffffff811681036107505790565b80518210156113ea5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b60c43573ffffffffffffffffffffffffffffffffffffffff811681036107505790565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f541633036111785756fea2646970667358221220bdadc1f960d3e63533605b5824854ab1992a4aaef56fd475a3e09a574f3dbd5164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP1 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x178AC96E EQ PUSH2 0x1229 JUMPI POP DUP1 PUSH4 0x715018A6 EQ PUSH2 0x11A4 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x10ED JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x10BB JUMPI DUP1 PUSH4 0xC1CFB02A EQ PUSH2 0x103A JUMPI DUP1 PUSH4 0xC66472DE EQ PUSH2 0x754 JUMPI DUP1 PUSH4 0xDE557A32 EQ PUSH2 0x456 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x422 JUMPI DUP1 PUSH4 0xE3746CB2 EQ PUSH2 0x11D JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0x8C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x11A JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH2 0xA5 PUSH2 0x1277 JUMP JUMPDEST PUSH2 0xAD PUSH2 0x147D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE DUP3 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x11A JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH2 0x137 PUSH2 0x1277 JUMP JUMPDEST PUSH1 0x24 DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 GT PUSH2 0x41E JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x41E JUMPI DUP4 PUSH1 0x4 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0x41E JUMPI PUSH1 0x6 SWAP4 CALLDATASIZE DUP3 DUP6 PUSH1 0x6 SHL DUP4 ADD ADD GT PUSH2 0x41A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 DUP2 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x40F JUMPI DUP5 SWAP2 DUP11 SWAP2 PUSH2 0x3D1 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0x3C4 JUMPI JUMPDEST PUSH2 0x39C JUMPI DUP3 AND DUP1 DUP9 MSTORE PUSH1 0x2 SWAP1 PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 DUP10 KECCAK256 DUP1 SLOAD SWAP1 DUP11 DUP2 SSTORE DUP2 PUSH2 0x318 JUMPI JUMPDEST POP POP DUP9 JUMPDEST DUP8 DUP2 LT PUSH2 0x228 JUMPI DUP10 DUP1 RETURN JUMPDEST DUP2 DUP11 MSTORE DUP3 DUP8 MSTORE PUSH1 0x40 DUP11 KECCAK256 DUP2 DUP11 SHL DUP6 ADD SWAP1 DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x2EC JUMPI PUSH1 0x1 SWAP2 DUP3 DUP3 ADD DUP1 DUP3 SSTORE DUP3 LT ISZERO PUSH2 0x2C0 JUMPI DUP14 MSTORE DUP10 DUP14 KECCAK256 PUSH1 0x1 SWAP5 SWAP4 SWAP3 SWAP2 DUP3 SHL ADD SWAP1 DUP9 SWAP1 PUSH2 0x2B2 SWAP1 PUSH1 0x44 SWAP1 DUP4 PUSH2 0x27F DUP8 DUP16 ADD PUSH2 0x13B5 JUMP JUMPDEST AND SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP6 DUP7 DUP3 SLOAD AND OR DUP2 SSTORE ADD SWAP5 ADD PUSH2 0x13B5 JUMP JUMPDEST AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE ADD PUSH2 0x21D JUMP JUMPDEST DUP10 DUP15 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE REVERT JUMPDEST DUP9 DUP14 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH1 0x1 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP4 SUB PUSH2 0x370 JUMPI DUP12 MSTORE DUP4 DUP9 DUP13 KECCAK256 SWAP3 PUSH1 0x1 SHL DUP4 ADD SWAP3 JUMPDEST DUP4 DUP2 LT PUSH2 0x360 JUMPI POP POP PUSH2 0x219 JUMP JUMPDEST DUP13 DUP2 SSTORE DUP13 DUP4 DUP3 ADD SSTORE ADD DUP5 SWAP1 PUSH2 0x352 JUMP JUMPDEST DUP8 DUP13 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP9 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP DUP3 DUP9 SLOAD AND CALLER EQ ISZERO PUSH2 0x1F9 JUMP JUMPDEST DUP1 SWAP3 POP DUP8 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x408 JUMPI JUMPDEST PUSH2 0x3EA DUP2 DUP4 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x404 JUMPI MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x404 JUMPI DUP4 SWAP1 PUSH0 PUSH2 0x1EE JUMP JUMPDEST DUP9 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x3E0 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x11A JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x11A JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x11A JUMPI PUSH2 0x470 PUSH2 0x1277 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x750 JUMPI PUSH1 0x64 CALLDATALOAD SWAP3 DUP1 DUP5 AND DUP1 SWAP5 SUB PUSH2 0x750 JUMPI PUSH1 0xA4 CALLDATALOAD SWAP4 DUP2 DUP6 AND DUP1 SWAP6 SUB PUSH2 0x750 JUMPI DUP2 PUSH32 0x0 AND CALLER SUB PUSH2 0x728 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x100 DUP5 ADD SWAP6 PUSH8 0xFFFFFFFFFFFFFFFF SWAP7 DUP6 DUP2 LT DUP9 DUP3 GT OR PUSH2 0x6EC JUMPI DUP5 SWAP3 DUP4 SWAP2 PUSH1 0x40 MSTORE AND DUP6 MSTORE PUSH1 0x20 SWAP6 DUP3 DUP8 DUP8 ADD SWAP5 CALLER DUP7 MSTORE PUSH1 0x40 DUP9 ADD SWAP3 DUP4 MSTORE PUSH1 0x60 DUP9 ADD PUSH1 0x44 CALLDATALOAD DUP2 MSTORE PUSH1 0x80 DUP10 ADD SWAP2 DUP3 MSTORE DUP3 PUSH1 0xA0 DUP11 ADD SWAP5 PUSH1 0x84 CALLDATALOAD DUP7 MSTORE PUSH1 0xC0 DUP12 ADD SWAP7 DUP8 MSTORE DUP2 PUSH1 0xE0 DUP13 ADD SWAP10 PUSH1 0xC4 CALLDATALOAD DUP12 MSTORE DUP14 DUP3 PUSH1 0x40 MLOAD SWAP15 DUP16 SWAP3 DUP4 ADD PUSH32 0xC66472DE00000000000000000000000000000000000000000000000000000000 SWAP1 MSTORE MLOAD AND SWAP1 PUSH1 0x24 ADD MSTORE MLOAD AND PUSH1 0x44 DUP13 ADD MSTORE MLOAD AND PUSH1 0x64 DUP11 ADD MSTORE MLOAD PUSH1 0x84 DUP10 ADD MSTORE MLOAD AND PUSH1 0xA4 DUP8 ADD MSTORE MLOAD PUSH1 0xC4 DUP7 ADD MSTORE MLOAD AND PUSH1 0xE4 DUP5 ADD MSTORE MLOAD PUSH2 0x104 SWAP1 DUP2 DUP5 ADD MSTORE DUP3 MSTORE PUSH2 0x140 SWAP2 DUP3 DUP2 ADD SWAP2 DUP2 DUP4 LT DUP7 DUP5 GT OR PUSH2 0x6EC JUMPI DUP3 DUP8 SWAP2 DUP2 PUSH1 0x40 MSTORE PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH2 0x144 DUP6 ADD MSTORE DUP2 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC0 DUP7 PUSH2 0x61D PUSH2 0x164 DUP3 ADD DUP3 PUSH2 0x143A JUMP JUMPDEST SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x71D JUMPI PUSH2 0x652 JUMPI DUP6 DUP1 RETURN JUMPDEST RETURNDATASIZE DUP1 DUP8 DUP5 RETURNDATACOPY PUSH2 0x661 DUP2 DUP5 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SWAP2 DUP5 DUP3 DUP6 DUP6 ADD SWAP5 SUB SLT PUSH2 0x719 JUMPI MLOAD SWAP1 DUP6 DUP3 GT PUSH2 0x719 JUMPI ADD SWAP2 DUP2 PUSH2 0x15F DUP5 ADD SLT ISZERO PUSH2 0x41A JUMPI DUP3 ADD MLOAD SWAP2 PUSH2 0x160 SWAP5 DUP4 GT PUSH2 0x6EC JUMPI DUP6 SWAP5 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x6CC DUP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP9 ADD AND ADD DUP6 PUSH2 0x129A JUMP JUMPDEST DUP5 DUP5 MSTORE DUP2 DUP6 DUP5 ADD ADD GT PUSH2 0x41A JUMPI DUP4 SWAP2 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE PUSH0 DUP1 DUP1 DUP1 DUP1 DUP6 DUP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP7 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x750 JUMPI PUSH2 0x100 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x1012 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0xFE6 JUMPI PUSH1 0xE4 CALLDATALOAD TIMESTAMP GT PUSH2 0xFBE JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND PUSH1 0x44 CALLDATALOAD SUB PUSH2 0x750 JUMPI PUSH1 0x84 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x750 JUMPI PUSH2 0x843 PUSH1 0x44 CALLDATALOAD PUSH2 0x12DB JUMP JUMPDEST SWAP2 DUP3 MLOAD SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD GT PUSH2 0xF91 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 PUSH2 0x8CA PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 ADD DUP9 PUSH2 0x13D6 JUMP JUMPDEST MLOAD ADD MLOAD AND SUB PUSH2 0xF69 JUMPI PUSH1 0x24 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x750 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE DUP1 PUSH1 0xA0 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP4 ADD GT OR PUSH2 0x6EC JUMPI PUSH0 DUP2 PUSH1 0xA0 PUSH1 0x20 SWAP4 ADD PUSH1 0x40 MSTORE DUP3 DUP2 MLOAD SWAP2 ADD DUP3 PUSH1 0x44 CALLDATALOAD GAS CALL ISZERO PUSH2 0xCF3 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0xF60 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0xF1C JUMPI PUSH1 0x40 MLOAD PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xCF3 JUMPI PUSH2 0xEED JUMPI JUMPDEST POP PUSH1 0x44 CALLDATALOAD SWAP4 PUSH0 SWAP2 PUSH1 0x64 CALLDATALOAD JUMPDEST DUP3 MLOAD DUP5 LT ISZERO PUSH2 0xD32 JUMPI PUSH2 0xA7C DUP5 DUP5 PUSH2 0x13D6 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD AND SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP5 ADD MLOAD AND SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 ADD DUP8 EQ PUSH0 EQ PUSH2 0xD2B JUMPI PUSH1 0xA4 CALLDATALOAD SWAP2 JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH1 0x20 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x20 DUP8 ADD GT OR PUSH2 0x6EC JUMPI PUSH1 0x20 DUP6 ADD PUSH1 0x40 MSTORE PUSH0 DUP6 MSTORE PUSH1 0x40 MLOAD SWAP12 DUP13 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xE0 DUP3 DUP2 DUP2 ADD LT SWAP3 ADD GT OR PUSH2 0x6EC JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x20 DUP15 PUSH1 0xE0 DUP2 ADD PUSH1 0x40 MSTORE PUSH0 DUP2 MSTORE ADD MSTORE AND PUSH1 0x40 DUP13 ADD MSTORE PUSH1 0x60 DUP12 ADD MSTORE PUSH1 0x80 DUP11 ADD MSTORE PUSH1 0xA0 DUP10 ADD MSTORE PUSH1 0xC0 DUP9 ADD MSTORE PUSH1 0x40 MLOAD SWAP7 PUSH32 0x2BFB780C00000000000000000000000000000000000000000000000000000000 DUP9 MSTORE PUSH1 0x20 PUSH1 0x4 DUP10 ADD MSTORE DUP1 MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0xCFE JUMPI DUP9 PUSH2 0xC37 PUSH1 0xC0 DUP3 SWAP4 PUSH1 0x60 SWAP6 PUSH1 0x24 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x44 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x64 DUP6 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP3 ADD MLOAD AND PUSH1 0x84 DUP6 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA4 DUP6 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC4 DUP6 ADD MSTORE ADD MLOAD PUSH1 0xE0 PUSH1 0xE4 DUP5 ADD MSTORE PUSH2 0x104 DUP4 ADD SWAP1 PUSH2 0x143A JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP7 DUP8 ISZERO PUSH2 0xCF3 JUMPI PUSH0 SWAP8 PUSH2 0xCA8 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 PUSH1 0x1 SWAP3 ADD MLOAD AND SWAP7 SWAP4 ADD SWAP3 PUSH2 0xA69 JUMP JUMPDEST SWAP1 SWAP7 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0xCEB JUMPI JUMPDEST DUP2 PUSH2 0xCC4 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x750 JUMPI PUSH1 0x40 ADD MLOAD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xC81 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCB7 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP2 PUSH2 0xAE3 JUMP JUMPDEST DUP6 SWAP1 DUP8 PUSH2 0xD3D PUSH2 0x1417 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x750 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE DUP2 PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xCF3 JUMPI PUSH2 0xED0 JUMPI JUMPDEST POP PUSH1 0x4 CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP1 SWAP4 SUB PUSH2 0x750 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH2 0xE56 PUSH2 0x1417 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 PUSH1 0x64 CALLDATALOAD DUP7 MSTORE PUSH1 0x20 DUP7 ADD MSTORE AND PUSH1 0x40 DUP5 ADD MSTORE AND SWAP2 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND SWAP4 LOG4 DUP1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST SWAP1 SWAP3 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6EC JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF14 JUMPI JUMPDEST DUP2 PUSH2 0xF06 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x129A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x750 JUMPI MLOAD PUSH2 0xA5E JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xEF9 JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x9C3 JUMP JUMPDEST PUSH32 0xA682E90300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH2 0x105C PUSH2 0x1057 PUSH2 0x1277 JUMP JUMPDEST PUSH2 0x12DB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP3 DUP3 ADD DUP4 DUP4 MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE DUP4 PUSH1 0x40 DUP5 ADD SWAP3 ADD SWAP4 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1082 JUMPI DUP5 DUP5 SUB DUP6 RETURN JUMPDEST DUP6 MLOAD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP7 MSTORE SWAP1 DUP4 ADD MLOAD AND DUP5 DUP4 ADD MSTORE SWAP5 DUP2 ADD SWAP5 PUSH1 0x40 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1075 JUMP JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0x1178 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH2 0x11BC PUSH2 0x147D JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x750 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x750 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x750 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x6EC JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 SWAP2 PUSH1 0x40 PUSH0 KECCAK256 SWAP5 DUP6 SLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP6 GT PUSH2 0x6EC JUMPI SWAP2 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x132E DUP4 DUP8 PUSH1 0x5 SHL ADD DUP11 PUSH2 0x129A JUMP JUMPDEST DUP6 DUP10 MSTORE PUSH0 SWAP4 DUP5 MSTORE DUP3 DUP5 KECCAK256 SWAP2 DUP4 DUP11 ADD JUMPDEST DUP8 DUP7 LT PUSH2 0x137E JUMPI POP POP POP POP POP POP POP POP POP DUP2 MLOAD ISZERO PUSH2 0x1356 JUMPI JUMP JUMPDEST PUSH32 0xF9AA031500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP9 MLOAD DUP10 DUP2 ADD DUP2 DUP2 LT DUP6 DUP3 GT OR PUSH2 0x6EC JUMPI PUSH1 0x1 SWAP3 DUP10 SWAP3 DUP9 SWAP3 DUP14 MSTORE DUP6 DUP9 SLOAD AND DUP2 MSTORE DUP6 DUP6 DUP10 ADD SLOAD AND DUP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP5 ADD SWAP6 ADD SWAP5 SWAP3 PUSH2 0x133D JUMP JUMPDEST CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x750 JUMPI SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x13EA JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xC4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x750 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x1178 JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBD 0xAD 0xC1 0xF9 PUSH1 0xD3 0xE6 CALLDATALOAD CALLER PUSH1 0x5B PC 0x24 DUP6 BLOBBASEFEE 0xB1 SWAP10 0x2A BLOBBASEFEE 0xAE CREATE2 PUSH16 0xD475A3E09A574F3DBD5164736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1118:3855:73:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1118:3855:73;;;;;;;:::i;:::-;1500:62:48;;:::i;:::-;1118:3855:73;;;;;;;1738:24:49;1118:3855:73;;;1738:24:49;1118:3855:73;;;;1777:43:49;;;;1118:3855:73;;;;;;;;;;;-1:-1:-1;;1118:3855:73;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;956:36:77;1118:3855:73;956:36:77;;1118:3855:73;956:18:77;;;1118:3855:73;956:18:77;;;1118:3855:73;956:36:77;;;;;;;;;;;;1118:3855:73;;;942:10:77;:50;;:75;;;1118:3855:73;938:131:77;;1118:3855:73;;;;;1752:10;1118:3855;1752:10;1118:3855;;;;;;;;;;;;;;;1788:13;;;1803:16;;;;;;1118:3855;;;1821:3;1118:3855;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1788:13;;1118:3855;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;938:131:77;1118:3855:73;1040:18:77;;;;;942:75;1118:3855:73;;;;;942:10:77;996:21;;942:75;;956:36;;;;;;;;;;;;;;;;;;:::i;:::-;;;1118:3855:73;;;;;;;;;;;;956:36:77;;;;;1118:3855:73;;;;956:36:77;;;;;;1118:3855:73;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1118:3855:73;;;;;;;1311:13:49;1118:3855:73;;;;;;;;;;;;;;-1:-1:-1;;1118:3855:73;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;799:18:77;;1118:3855:73;777:10:77;:41;773:97;;1118:3855:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;2557:374;;;;;777:10:77;;1118:3855:73;;;2557:374;;1118:3855;;;;2557:374;;1118:3855;;;;;2557:374;;1118:3855;;;2557:374;1118:3855;2557:374;;1118:3855;;;;;;2557:374;;1118:3855;;;2557:374;1118:3855;2557:374;;1118:3855;;;;;;;;;2481:464;;;;;;;;1118:3855;;2481:464;1118:3855;2481:464;1118:3855;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2481:464;;1118:3855;;;;;;;;;;;;;;;;;;;;;;2454:501;;;;;;1118:3855;;;2454:501;1118:3855;;;;;;;:::i;:::-;2454:501;;:6;;1118:3855;2454:501;;;;;;;;1118:3855;;;2454:501;;;;;;;;;;:::i;:::-;;;;;;;;;1118:3855;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;2454:501;;;;;1118:3855;;;;;;;;;;;;;;;;;2454:501;1118:3855;;;;;;;;;773:97:77;1118:3855:73;841:18:77;;;;;1118:3855:73;;;;;;;;;;-1:-1:-1;;1118:3855:73;;;;;551:66:41;2806:53:42;1316:93:41;;1529:4;551:66;3051:52:42;1118:3855:73;586:6:47;1118:3855:73;564:10:47;:29;560:108;;3234:15:73;1118:3855;3216:15;:33;3212:85;;1118:3855;3325:15;1118:3855;;3325:15;1118:3855;;;;3371:18;1118:3855;;;;;;;;3486:21;3325:15;1118:3855;3486:21;:::i;:::-;1118:3855;;;;;;;;;;;;;;;3571:29;:20;1118:3855;;;3571:20;;:::i;:::-;;:29;1118:3855;;3571:44;3567:106;;3757:13;1118:3855;;;;;;;;;;;1745:53:59;1118:3855:73;3571:29;1745:53:59;;;3757:13:73;1745:53:59;;1118:3855:73;;586:6:47;1118:3855:73;3325:15;1118:3855;;;3424:21;1118:3855;3424:21;1118:3855;;;3424:21;1745:53:59;;1118:3855:73;;;;;;;;;;;;;;;;3571:29;1118:3855;;;;8507:421:59;;;1745:53;;1118:3855:73;3325:15;1118:3855;8507:421:59;;;;;1118:3855:73;8507:421:59;;8942:15;;1118:3855:73;;3325:15;1118:3855;;8960:26:59;:31;8942:68;8938:146;;1118:3855:73;;;3814:39;;1118:3855;3325:15;1118:3855;;;3814:39;;1118:3855;3424:21;1118:3855;3757:13;1118:3855;;;3571:29;586:6:47;3325:15:73;586:6:47;1118:3855:73;;586:6:47;1118:3855:73;3814:39;;;;;;;;8942:68:59;-1:-1:-1;3325:15:73;1118:3855;;;;3424:21;1118:3855;4063:3;1118:3855;;4045:16;;;;;4109:8;;;;:::i;:::-;;1118:3855;;;;;4359:13;1118:3855;3571:29;4359:13;;1118:3855;;4459:46;1118:3855;;;4460:18;;4459:46;1118:3855;;;;;4459:46;;1118:3855;;;;3571:29;1118:3855;;;;3571:29;1118:3855;;;;;;3571:29;1118:3855;;;;;;;;;;;;;;;;;;;;;;;;;;3571:29;1118:3855;;;;;;;;;4187:378;1118:3855;;;4187:378;;1118:3855;3424:21;4187:378;;1118:3855;3371:18;4187:378;;1118:3855;;4187:378;;1118:3855;4187:378;;;1118:3855;;;4158:421;1118:3855;4158:421;;3571:29;1118:3855;4158:421;;1118:3855;;;;;;;;;;;;4187:378;1118:3855;;3424:21;1118:3855;3757:13;1118:3855;;;;3571:29;4187:378;;1118:3855;;3325:15;1118:3855;;;;;4187:378;;1118:3855;;3424:21;1118:3855;;;;4187:378;;;1118:3855;;3371:18;1118:3855;;;3371:18;4187:378;;1118:3855;;;;;;4187:378;;1118:3855;;;;;4187:378;1118:3855;;3234:15;1118:3855;;;;;;;;:::i;:::-;4158:421;586:6:47;1118:3855:73;;586:6:47;1118:3855:73;4158:421;;;;;;;1118:3855;4158:421;;;4459:46;4359:13;1118:3855;3571:29;1529:4:41;4359:13:73;;1118:3855;;4635:29;4063:3;1118:3855;4030:13;;;4158:421;;;;3424:21;4158:421;;3424:21;4158:421;;;;;;3424:21;4158:421;;;:::i;:::-;;;1118:3855;;;;;;;;;4158:421;;;;;-1:-1:-1;4158:421:73;;;1118:3855;;;;;;;;;;;;;;;;3757:13;1118:3855;;4459:46;1118:3855;4459:46;;;4045:16;;;;4806;;:::i;:::-;1118:3855;586:6:47;1118:3855:73;4779:63;;;;1118:3855;;;;;4779:63;1118:3855;4779:63;;1118:3855;;4779:63;;1118:3855;;3757:13;1118:3855;;;;3325:15;1118:3855;;;;586:6:47;3424:21:73;586:6:47;;1118:3855:73;586:6:47;1118:3855:73;4779:63;;;;;;;;4025:650;1118:3855;;;;;;;;;;;;;4947:16;;;;:::i;:::-;1118:3855;;;3424:21;1118:3855;;;3571:29;1118:3855;;;;;;;;;;4858:106;3424:21;1118:3855;3325:15;1118:3855;;4858:106;;3051:52:42;551:66:41;3051:52:42;1118:3855:73;;4779:63;1118:3855;;;;;;;;;;;4779:63;;;;3814:39;3571:29;3814:39;;3571:29;3814:39;;;;;;3571:29;3814:39;;;:::i;:::-;;;1118:3855;;;;;3814:39;;;;;-1:-1:-1;3814:39:73;;8938:146:59;9033:40;1118:3855:73;9033:40:59;1118:3855:73;3325:15;1118:3855;;;;3757:13;1118:3855;9033:40:59;8942:68;1529:4:41;8994:16:59;;8942:68;;3567:106:73;3638:24;1118:3855;3638:24;1118:3855;;3638:24;1118:3855;;;;;;;;;;3212:85;3272:14;1118:3855;3272:14;1118:3855;;3272:14;560:108:47;616:41;1118:3855:73;616:41:47;564:10;1118:3855:73;;;;616:41:47;1316:93:41;1368:30;1118:3855:73;1368:30:41;1118:3855:73;;1368:30:41;1118:3855:73;;;;;;-1:-1:-1;;1118:3855:73;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1118:3855:73;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1118:3855:73;;;;;1311:13:49;1118:3855:73;;735:10:63;1118:3855:73;;;2339:24:49;2335:96;;1118:3855:73;;;;1311:13:49;1118:3855:73;;;735:10:63;;1118:3855:73;;;;;;735:10:63;1118:3855:73;;3052:40:48;1118:3855:73;3052:40:48;;1118:3855:73;2335:96:49;2386:34;1118:3855:73;2386:34:49;735:10:63;1118:3855:73;;;;2386:34:49;1118:3855:73;;;;;-1:-1:-1;;1118:3855:73;;;;;1500:62:48;;:::i;:::-;1118:3855:73;;;;2093:20:49;1118:3855:73;;2093:20:49;1118:3855:73;;;;;;;;;3052:40:48;;;;1118:3855:73;;;;;;-1:-1:-1;;1118:3855:73;;;;;;479:55:77;1118:3855:73;479:55:77;1118:3855:73;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;1937:220::-;;1118:3855;;;;-1:-1:-1;1118:3855:73;2043:10;1118:3855;2043:10;1118:3855;;;;;-1:-1:-1;1118:3855:73;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;1118:3855:73;;;;;;;;;;;;;;;;2035:28;;;;;;;;;;1118:3855;2078:17;2074:77;;1937:220::o;2074:77::-;2118:22;-1:-1:-1;2118:22:73;;-1:-1:-1;2118:22:73;1118:3855;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;4806:16;1118:3855;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1118:3855:73;;;;;;;;;;;:::o;1796:162:48:-;1118:3855:73;1710:6:48;1118:3855:73;;735:10:63;1855:23:48;1851:101;;1796:162::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","burnHook((address,address,address,uint256,address,uint256,address,uint256))":"c66472de","getBurnPath(address)":"c1cfb02a","owner()":"8da5cb5b","pendingOwner()":"e30c3978","protocolFeeSweeper()":"178ac96e","renounceOwnership()":"715018a6","setBurnPath(address,(address,address)[])":"e3746cb2","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"_protocolFeeSweeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BurnPathDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeSweeper\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetTokenOutMismatch\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IBalancerFeeBurner.BurnHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"burnHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"getBurnPath\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"internalType\":\"struct IBalancerFeeBurner.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFeeSweeper\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"internalType\":\"struct IBalancerFeeBurner.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"}],\"name\":\"setBurnPath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}},\"getBurnPath(address)\":{\"params\":{\"feeToken\":\"The fee token to get the path for\"},\"returns\":{\"steps\":\"The steps in the burn path\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setBurnPath(address,(address,address)[])\":{\"details\":\"This is the sequence of swaps required to convert the `feeToken` to the `targetToken`. This is a permissioned function.\",\"params\":{\"feeToken\":\"The fee token to set the path for\",\"steps\":\"The steps in the burn path\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BurnPathDoesNotExist()\":[{\"notice\":\"Burn path not set for the fee token.\"}],\"InvalidProtocolFeeSweeper()\":[{\"notice\":\"The fee protocol is invalid.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}],\"TargetTokenOutMismatch()\":[{\"notice\":\"The last token in the path is not the same as the target token.\"}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"},\"getBurnPath(address)\":{\"notice\":\"Get the burn path for a fee token.\"},\"setBurnPath(address,(address,address)[])\":{\"notice\":\"Set the burn path for a fee token.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/BalancerFeeBurner.sol\":\"BalancerFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerFeeBurner.sol\":{\"keccak256\":\"0xb5dc03fa23c5481ff4bebe9136c73e363a96e5beaf89d22f4eedb142331a0478\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d33361a79282a589f7b167caa04acb3b7eba0cc85b11a21f8504187151542ed6\",\"dweb:/ipfs/Qmc5WZFBfq9oZEQ4Zhv6VgJpeBJA7v68Jc1cKTJ5iFBuhM\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/BalancerFeeBurner.sol\":{\"keccak256\":\"0x79faa46e1a6171ee5b9fd9a2f980e100a3cd1ba824db5202d75dc2de4348e5c6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://83cb2621d9eda7eaec004401b4770f923c1f65e2596f9051ff6b72addc0af0d4\",\"dweb:/ipfs/QmWTSXD85nqakqZA2ygrn254sLX2XGugV6YtzUbaym1wAy\"]},\"contracts/FeeBurnerAuthentication.sol\":{\"keccak256\":\"0x4861db67bf113a4775c165241802df34a6c0e9fefaec82e8aaf969b5879759f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f522b3af683e09e1b67ed515be9972e7cf9514a584e264c4ca9656cc12c2f06\",\"dweb:/ipfs/QmNYqMsvWcNqACozLm3cYeR4oC3KKfKNBDSqR3vcpjv3zo\"]}},\"version\":1}"}},"contracts/CallAndRevert.sol":{"CallAndRevert":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callAndRevertHook","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608080604052346015576103b0908161001a8239f35b5f80fdfe6080604052600480361015610012575f80fd5b5f3560e01c63a769963814610025575f80fd5b346102325760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102325780359073ffffffffffffffffffffffffffffffffffffffff82168203610232576024359167ffffffffffffffff8311610232573660238401121561023257828201356100a76100a2826102a7565b610236565b91818352602094858401903660248583010111610232575f948588868297602484960187378301015251925af1903d1561022957823d926100ea6100a2856102a7565b9384523d5f8386013e5b8015610179577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0918461012c604496601f94336102e1565b506040519687957f5ab64fb80000000000000000000000000000000000000000000000000000000087528601528051918291826024880152018686015e5f85828601015201168101030190fd5b5050808251106101dd577f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000848401511614610203578151156101dd575080519101fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f525ffd5b7f28f95541000000000000000000000000000000000000000000000000000000005f525ffd5b826060926100f4565b5f80fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff82111761027a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161027a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9061031e57508051156102f657602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610371575b61032f575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561032756fea2646970667358221220fe11d0a57628ea08877b4090e16e969cdadbb042c6375ec75ff301a9774ed5e964736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x15 JUMPI PUSH2 0x3B0 SWAP1 DUP2 PUSH2 0x1A DUP3 CODECOPY RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0xA7699638 EQ PUSH2 0x25 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x232 JUMPI PUSH1 0x40 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x232 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x232 JUMPI PUSH1 0x24 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x232 JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x232 JUMPI DUP3 DUP3 ADD CALLDATALOAD PUSH2 0xA7 PUSH2 0xA2 DUP3 PUSH2 0x2A7 JUMP JUMPDEST PUSH2 0x236 JUMP JUMPDEST SWAP2 DUP2 DUP4 MSTORE PUSH1 0x20 SWAP5 DUP6 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0x232 JUMPI PUSH0 SWAP5 DUP6 DUP9 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL SWAP1 RETURNDATASIZE ISZERO PUSH2 0x229 JUMPI DUP3 RETURNDATASIZE SWAP3 PUSH2 0xEA PUSH2 0xA2 DUP6 PUSH2 0x2A7 JUMP JUMPDEST SWAP4 DUP5 MSTORE RETURNDATASIZE PUSH0 DUP4 DUP7 ADD RETURNDATACOPY JUMPDEST DUP1 ISZERO PUSH2 0x179 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 DUP5 PUSH2 0x12C PUSH1 0x44 SWAP7 PUSH1 0x1F SWAP5 CALLER PUSH2 0x2E1 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP9 ADD MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST POP POP DUP1 DUP3 MLOAD LT PUSH2 0x1DD JUMPI PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 DUP5 ADD MLOAD AND EQ PUSH2 0x203 JUMPI DUP2 MLOAD ISZERO PUSH2 0x1DD JUMPI POP DUP1 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH1 0x60 SWAP3 PUSH2 0xF4 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x40 MLOAD SWAP4 ADD AND DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x27A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x27A JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x31E JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2F6 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x371 JUMPI JUMPDEST PUSH2 0x32F JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x327 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID GT 0xD0 0xA5 PUSH23 0x28EA08877B4090E16E969CDADBB042C6375EC75FF301A9 PUSH24 0x4ED5E964736F6C634300081B003300000000000000000000 ","sourceMap":"241:1325:74:-:0;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"allocate_memory":{"entryPoint":566,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":679,"id":null,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":737,"id":11265,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600480361015610012575f80fd5b5f3560e01c63a769963814610025575f80fd5b346102325760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102325780359073ffffffffffffffffffffffffffffffffffffffff82168203610232576024359167ffffffffffffffff8311610232573660238401121561023257828201356100a76100a2826102a7565b610236565b91818352602094858401903660248583010111610232575f948588868297602484960187378301015251925af1903d1561022957823d926100ea6100a2856102a7565b9384523d5f8386013e5b8015610179577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0918461012c604496601f94336102e1565b506040519687957f5ab64fb80000000000000000000000000000000000000000000000000000000087528601528051918291826024880152018686015e5f85828601015201168101030190fd5b5050808251106101dd577f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000848401511614610203578151156101dd575080519101fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f525ffd5b7f28f95541000000000000000000000000000000000000000000000000000000005f525ffd5b826060926100f4565b5f80fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff82111761027a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161027a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9061031e57508051156102f657602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610371575b61032f575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561032756fea2646970667358221220fe11d0a57628ea08877b4090e16e969cdadbb042c6375ec75ff301a9774ed5e964736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0xA7699638 EQ PUSH2 0x25 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x232 JUMPI PUSH1 0x40 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x232 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x232 JUMPI PUSH1 0x24 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x232 JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x232 JUMPI DUP3 DUP3 ADD CALLDATALOAD PUSH2 0xA7 PUSH2 0xA2 DUP3 PUSH2 0x2A7 JUMP JUMPDEST PUSH2 0x236 JUMP JUMPDEST SWAP2 DUP2 DUP4 MSTORE PUSH1 0x20 SWAP5 DUP6 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0x232 JUMPI PUSH0 SWAP5 DUP6 DUP9 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL SWAP1 RETURNDATASIZE ISZERO PUSH2 0x229 JUMPI DUP3 RETURNDATASIZE SWAP3 PUSH2 0xEA PUSH2 0xA2 DUP6 PUSH2 0x2A7 JUMP JUMPDEST SWAP4 DUP5 MSTORE RETURNDATASIZE PUSH0 DUP4 DUP7 ADD RETURNDATACOPY JUMPDEST DUP1 ISZERO PUSH2 0x179 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 DUP5 PUSH2 0x12C PUSH1 0x44 SWAP7 PUSH1 0x1F SWAP5 CALLER PUSH2 0x2E1 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP8 MSTORE DUP7 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP9 ADD MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST POP POP DUP1 DUP3 MLOAD LT PUSH2 0x1DD JUMPI PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 DUP5 ADD MLOAD AND EQ PUSH2 0x203 JUMPI DUP2 MLOAD ISZERO PUSH2 0x1DD JUMPI POP DUP1 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH1 0x60 SWAP3 PUSH2 0xF4 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x40 MLOAD SWAP4 ADD AND DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x27A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x27A JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x31E JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2F6 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x371 JUMPI JUMPDEST PUSH2 0x32F JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x327 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID GT 0xD0 0xA5 PUSH23 0x28EA08877B4090E16E969CDADBB042C6375EC75FF301A9 PUSH24 0x4ED5E964736F6C634300081B003300000000000000000000 ","sourceMap":"241:1325:74:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;811:19;;;;;241:1325;;;;;;;;;;;:::i;:::-;;;;;;;;;;;840:718;;;;241:1325;990:10;;955:63;241:1325;990:10;241:1325;990:10;;955:63;:::i;:::-;;241:1325;;1084:26;;;;;;;;241:1325;;;;;;;;;;;;;;;;;;;;;;;;;;;1084:26;;;;840:718;241:1325;;;;;1443:21:36;1439:82;;1344:27:74;241:1325;1530:151:36;;;;241:1325:74;1327:44;1323:110;;241:1325;;1881:21:36;:17;;2008:160;;;;;;1877:362;2205:23;241:1325:74;2205:23:36;241:1325:74;2205:23:36;1323:110:74;1398:20;241:1325;1398:20;241:1325;1398:20;241:1325;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;4437:582:60:-;;4609:8;;-1:-1:-1;241:1325:74;;5690:21:60;:17;;5815:105;;;;;;5686:301;5957:19;5710:1;5957:19;;5710:1;5957:19;4605:408;241:1325:74;;4857:22:60;:49;;;4605:408;4853:119;;4985:17;;:::o;4853:119::-;241:1325:74;4933:24:60;;4878:1;4933:24;241:1325:74;4933:24:60;241:1325:74;;4878:1:60;4933:24;4857:49;4883:18;;;:23;4857:49;"},"methodIdentifiers":{"callAndRevertHook(address,bytes)":"a7699638"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callAndRevertHook\",\"outputs\":[],\"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.\"}],\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/CallAndRevert.sol\":\"CallAndRevert\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"contracts/CallAndRevert.sol\":{\"keccak256\":\"0xe0f09e833265592b398c7607db658e3541b800f66c9536ee129ae6863e4185f2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bc7dd31dd95f738debb5ca8c8b80e90384c1d8b72dc70e02dd7ae22e7c77f337\",\"dweb:/ipfs/QmNaJXyazNRD1fbqs6QJSwB3VWKu3ZjHqecMqKg57UeMuS\"]}},\"version\":1}"}},"contracts/CowSwapFeeBurner.sol":{"CowSwapFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IProtocolFeeSweeper","name":"_protocolFeeSweeper","type":"address"},{"internalType":"contract IComposableCow","name":"_composableCow","type":"address"},{"internalType":"address","name":"_cowVaultRelayer","type":"address"},{"internalType":"bytes32","name":"_appData","type":"bytes32"},{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"string","name":"_version","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"InterfaceIsSignatureVerifierMuxer","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"InvalidOrderParameters","type":"error"},{"inputs":[],"name":"InvalidProtocolFeeSweeper","type":"error"},{"inputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"actualStatus","type":"uint8"}],"name":"OrderHasUnexpectedStatus","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"OrderNotValid","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollNever","type":"error"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtBlock","type":"error"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtEpoch","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryNextBlock","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"indexed":false,"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"}],"name":"ConditionalOrderCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"OrderCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"OrderRetried","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"appData","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"composableCow","outputs":[{"internalType":"contract IComposableCow","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"emergencyCancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrderStatus","outputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"getTradeableOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeSweeper","outputs":[{"internalType":"contract IProtocolFeeSweeper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"retryOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vaultRelayer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"},{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"_order","type":"tuple"}],"name":"verify","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_address_fromMemory":{"entryPoint":909,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory":{"entryPoint":872,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"61014060405234610364576129dc8038038061001a81610368565b92833981019060c0818303126103645780516001600160a01b0391828216919082820361036457602093848201519381851685036103645761005e6040840161038d565b966060840151966100716080860161038d565b9560a086015160018060401b0396878211610364570193601f9484868201121561036457805198888a1161032e57601f19996100b28882018c168701610368565b968188528682850101116103645785815f92828c9601838b015e8801015216801561035157600180546001600160a01b031990811682555f805491821684178155919816907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a31561034257608052815194851161032e576002548481811c91168015610324575b82821014610310578381116102cc575b508092851160011461026a5750839450908392915f9461025f575b50501b915f199060031b1c1916176002555b7ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677560a0527f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc960c05260e0526101009182526101209081526040519061263a92836103a2843960805183818161021e0152818161066401528181610cef01528181610e5f01526110aa015260a05183611ff8015260c05183611f87015260e051838181610a590152818161135b0152818161156101526122cf0152518281816103d80152818161071b01528181610a090152611d7a015251818181610ac60152611fcc0152f35b015192505f80610167565b92948490811660025f52845f20945f905b888383106102b2575050501061029a575b505050811b01600255610179565b01515f1960f88460031b161c191690555f808061028c565b85870151885590960195948501948793509081019061027b565b60025f52815f208480880160051c820192848910610307575b0160051c019085905b8281106102fc57505061014c565b5f81550185906102ee565b925081926102e5565b634e487b7160e01b5f52602260045260245ffd5b90607f169061013c565b634e487b7160e01b5f52604160045260245ffd5b63932c92a560e01b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761032e57604052565b51906001600160a01b03821682036103645756fe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a7146119505750806314a2a784146116785780631626ba7e146110ce578063178ac96e1461107e57806354fd4d5014610f3e57806360e092c614610dfa57806368bce71214610c875780636eba2b1314610c5a5780636f9d75cd14610c25578063715018a614610ba057806379ba509714610ae95780638aebd34814610aaf5780638da5cb5b14610a7d57806393504c5214610a2d5780639b552cc2146109dd578063b8296fc4146108c3578063d83b06a4146105fe578063de557a32146101bc578063e30c3978146101895763f2fde38b146100f8575f80fd5b3461018557602060031936011261018557610111611a9f565b6101196120cb565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b34610185575f60031936011261018557602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346101855760e0600319360112610185576101d5611a9f565b6101dd611ac2565b90604435916064359073ffffffffffffffffffffffffffffffffffffffff93848316809303610185576084359360a4358681168091036101855760c43595877f00000000000000000000000000000000000000000000000000000000000000001633036105d6577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0096875c6105ae576001885d858916958787036102ff5760846040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f46656520746f6b656e20616e642074617267657420746f6b656e20617265207460448201527f68652073616d65000000000000000000000000000000000000000000000000006064820152fd5b85156105505761030e836120eb565b61031782612150565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523060448201528660648201526064815260a081019080821067ffffffffffffffff8311176105235761037b916040528261257d565b610385868261247d565b506004811015806104e95781151580610516575b6104ba575050925f99927f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d95926103fd88876103d66060996122b7565b7f0000000000000000000000000000000000000000000000000000000000000000906121b6565b63ffffffff600360405161041081611b4c565b8c8152602081018681526040820190868252848b8401961686525f8e9052836020525f60408b91209351167fffffffffffffffffffffffff000000000000000000000000000000000000000090818554161784558a6001850192511690825416179055516002820155019151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000825416179055604051968752602087015260408601521692a45d005b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f526104e95760045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b50505f6002821415610399565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f46656520746f6b656e20616d6f756e74206973207a65726f00000000000000006044820152fd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461018557606060031936011261018557610617611a9f565b60243560443573ffffffffffffffffffffffffffffffffffffffff916040517f4ccb20c00000000000000000000000000000000000000000000000000000000081526020908181600481887f0000000000000000000000000000000000000000000000000000000000000000165afa80156108485785915f9161088b575b50163314158061087e575b6105d6576106ad856123aa565b919060048110156104e9576003810361085357506106ca836120eb565b6106d384612150565b84861694855f5260038252600360405f208560028201550163ffffffff86167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790557f000000000000000000000000000000000000000000000000000000000000000090604051907fdd62ed3e0000000000000000000000000000000000000000000000000000000082523060048301528216602482015282816044818a5afa908115610848575f916107ea575b507f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a97849392846080999897966107c394106107d9575b50506122b7565b60405194855284015260408301526060820152a1005b6107e391836121b6565b89846107bc565b90508281819398979695943d8311610841575b6108078183611b68565b81010312610185575194959394929391929091907f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a610785565b503d6107fd565b6040513d5f823e3d90fd5b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50835f54163314156106a0565b809250838092503d83116108bc575b6108a48183611b68565b81010312610185576108b68591611bcc565b87610695565b503d61089a565b346101855760a0600319360112610185576108dc611a9f565b506108e5611ac2565b5067ffffffffffffffff60643581811161018557610907903690600401611ae5565b608492919235918211610185576109d992610929610930933690600401611ae5565b5050611ccb565b6040519182918291909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b0390f35b34610185575f60031936011261018557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610185575f60031936011261018557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610185575f60031936011261018557602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610185575f6003193601126101855760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610185575f6003193601126101855760015473ffffffffffffffffffffffffffffffffffffffff3381831603610b74577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b34610185575f60031936011261018557610bb86120cb565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461018557602060031936011261018557610c46610c41611a9f565b6123aa565b5060405160048210156104e9576020918152f35b34610185576020600319360112610185576109d9610930610c79611a9f565b610c81611c73565b50611ebd565b3461018557604060031936011261018557610ca0611a9f565b610ca8611ac2565b6040517f4ccb20c000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff926020929183816004817f000000000000000000000000000000000000000000000000000000000000000089165afa80156108485785915f91610dc2575b501633141580610db5575b6105d65782602494604051958680927f70a0823100000000000000000000000000000000000000000000000000000000825230600483015285165afa928315610848575f93610d83575b50610d819350611d09565b005b90925083813d8311610dae575b610d9a8183611b68565b8101031261018557610d8192519184610d76565b503d610d90565b50835f5416331415610d2c565b809250858092503d8311610df3575b610ddb8183611b68565b8101031261018557610ded8591611bcc565b86610d21565b503d610dd1565b3461018557604060031936011261018557610e13611a9f565b610e1b611ac2565b73ffffffffffffffffffffffffffffffffffffffff6040517f4ccb20c0000000000000000000000000000000000000000000000000000000008152602081600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156108485782915f91610f02575b50163314159081610ef4575b506105d657610eaa826123aa565b91909260048410156104e95760038403610ec857610d819350611d09565b837fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90505f541633141583610e9c565b9150506020813d602011610f36575b81610f1e60209383611b68565b8101031261018557610f308291611bcc565b85610e90565b3d9150610f11565b34610185575f600319360112610185576040515f6002549060018260011c9160018416918215611074575b60209485851084146110475785879486865291825f14611009575050600114610fae575b50610f9a92500383611b68565b6109d9604051928284938452830190611ba7565b84915060025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace905f915b858310610ff1575050610f9a935082010185610f8d565b80548389018501528794508693909201918101610fda565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685820152610f9a95151560051b8501019250879150610f8d9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f1692610f69565b34610185575f60031936011261018557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101855760406003193601126101855760243567ffffffffffffffff80821161018557366023830112156101855781600401359161110c83611b8b565b9261111a6040519485611b68565b8084526020840191366024838301011161018557815f92602460209301853785010152825183019160208301938084036101a09081811261018557610180809112610185576111746040519561116f87611b13565b611bcc565b855261118260408401611bcc565b602086015261119360608401611bcc565b60408601526080830151606086015260a0830151608086015260c083015163ffffffff811681036101855760a086015260e083015160c0860152610100908184015160e08701526101209182850151908701526101409182850151908115158203610185578701526101609182850151908701528301519085015281015190828211610185570193606085850312610185576040519461123286611b30565b602081015183811161018557810182603f8201121561018557602081015190848211610523578160051b6040519261126d6020830185611b68565b8352604060208401918301019185831161018557604001905b828210611668575050508652604081015183811161018557606090820180960312610185576040516112b781611b30565b60208601519573ffffffffffffffffffffffffffffffffffffffff9687811681036101855782526040810151602083015260608101518581116101855760208591611303930101611bed565b604082015260208701526060810151928311610185576113269201602001611bed565b6040840152604051907ff698da25000000000000000000000000000000000000000000000000000000008252602082600481867f0000000000000000000000000000000000000000000000000000000000000000165afa918215610848575f92611632575b509061144e611440926040519384916020830191909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101845283611b68565b604051809460208083015260a08201815190606060408501528151809152602060c085019201905f5b8181106116195785602061154b8b8b8b6114eb866114dd8d8d60406114cb8b840151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09384888303016060890152611c33565b92015190848303016080850152611ba7565b03601f198101885287611b68565b61155d604051968795869485947f53f00b14000000000000000000000000000000000000000000000000000000008652306004870152336024870152600435604487015260648601525f608486015260e060a486015260e4850190611ba7565b906003198483030160c4850152611ba7565b03917f0000000000000000000000000000000000000000000000000000000000000000165afa8015610848575f906115bd575b6020907fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b506020813d602011611611575b816115d760209383611b68565b8101031261018557517fffffffff000000000000000000000000000000000000000000000000000000008116810361018557602090611590565b3d91506115ca565b8251845289955060209384019390920191600101611477565b91506020823d602011611660575b8161164d60209383611b68565b810103126101855790519061144e61138b565b3d9150611640565b8151815260209182019101611286565b346101855761026060031936011261018557611692611a9f565b5061169b611ac2565b5067ffffffffffffffff60a435818111610185576116bd903690600401611ae5565b919060c435828111610185576116d7903690600401611ae5565b505061018092837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c3601126101855761170f91611ccb565b916101643592836080820180518211611948575b50506040516117e5816117d760208201948591909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101835282611b68565b51902090604051602081019460e43573ffffffffffffffffffffffffffffffffffffffff90818116809103610185578752610104358181168091036101855760408401526101243590811680910361018557606083015261014435608083015260a08201526101843563ffffffff81168091036101855760c08201526101a492833560e08301526101c49081356101008401526101e49687356101208501526102049485358015158091036101855761014086015261022435610160860152610244358186015284526101a0840196871184881017610523578660405283519020036118cd57005b608495602f7f566572696679206f7264657220646f6573206e6f74206d6174636820776974689260207f206578697374696e67206f726465720000000000000000000000000000000000977f8d8a6110000000000000000000000000000000000000000000000000000000008a528601528401528201520152fd5b528385611723565b3461018557602060031936011261018557600435907fffffffff000000000000000000000000000000000000000000000000000000008216809203610185577f62af8dc2000000000000000000000000000000000000000000000000000000008214611a7757817f14a2a7840000000000000000000000000000000000000000000000000000000060209314908115611a4d575b8115611a23575b81156119f9575b5015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836119f2565b7f1626ba7e00000000000000000000000000000000000000000000000000000000811491506119eb565b7fb8296fc400000000000000000000000000000000000000000000000000000000811491506119e4565b7f32798566000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361018557565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361018557565b9181601f840112156101855782359167ffffffffffffffff8311610185576020838186019501011161018557565b610180810190811067ffffffffffffffff82111761052357604052565b6060810190811067ffffffffffffffff82111761052357604052565b6080810190811067ffffffffffffffff82111761052357604052565b90601f601f19910116810190811067ffffffffffffffff82111761052357604052565b67ffffffffffffffff811161052357601f01601f191660200190565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b519073ffffffffffffffffffffffffffffffffffffffff8216820361018557565b81601f8201121561018557805190611c0482611b8b565b92611c126040519485611b68565b8284526020838301011161018557815f9260208093018386015e8301015290565b9060606040611c709373ffffffffffffffffffffffffffffffffffffffff8151168452602081015160208501520151918160408201520190611ba7565b90565b60405190611c8082611b13565b5f610160838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b9081602091611cd8611c73565b5081010312610185573573ffffffffffffffffffffffffffffffffffffffff811680910361018557611c7090611ebd565b6060917f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a936040918251916020808401937f095ea7b3000000000000000000000000000000000000000000000000000000009081865273ffffffffffffffffffffffffffffffffffffffff95835f887f0000000000000000000000000000000000000000000000000000000000000000169283602486015281604486015260448552611db485611b4c565b845190828d5af15f513d82611e9f575b505015611e64575b5050508584165f81815260038084528782208281556001810183905560028101839055015585517fa9059cbb000000000000000000000000000000000000000000000000000000008184015273ffffffffffffffffffffffffffffffffffffffff85166024820152604481018490529096611e549190611e4f8260648101611440565b61257d565b84519586528501521690820152a1565b611e9792611e91918951918683015260248201525f604482015260448152611e8b81611b4c565b8961257d565b8761257d565b5f8080611dcc565b909150611eb557508689163b15155b5f80611dc4565b600114611eae565b611ec5611c73565b5073ffffffffffffffffffffffffffffffffffffffff80911690815f52602090600382526040805f206003825192611efc84611b4c565b848354168452846001840154169486850195865260028401549382860194855263ffffffff9384910154169460608101958087521561206e5781905116955116918151937f70a0823100000000000000000000000000000000000000000000000000000000855230600486015287856024818c5afa948515612064575f95612035575b5051945116947f000000000000000000000000000000000000000000000000000000000000000096825198611fb38a611b13565b89528801528601526060850152608084015260a08301527f000000000000000000000000000000000000000000000000000000000000000060c08301525f60e08301527f000000000000000000000000000000000000000000000000000000000000000061010083015260016101208301528061014083015261016082015290565b9094508781813d831161205d575b61204d8183611b68565b810103126101855751935f611f7f565b503d612043565b83513d5f823e3d90fd5b6064888451907fc8fc27250000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4f7264657220646f6573206e6f742065786973740000000000000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff5f54163303610b7457565b156120f257565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d696e20616d6f756e74206f7574206973207a65726f000000000000000000006044820152fd5b421161215857565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f446561646c696e6520697320696e2074686520706173740000000000000000006044820152fd5b6040519160205f818501612219866114dd7f095ea7b300000000000000000000000000000000000000000000000000000000998a855287602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b85519082865af15f513d82612285575b505015612237575b50505050565b61227c9373ffffffffffffffffffffffffffffffffffffffff611e4f926040519260208401521660248201525f60448201526044815261227681611b4c565b8261257d565b5f808080612231565b9091506122af575073ffffffffffffffffffffffffffffffffffffffff82163b15155b5f80612229565b6001146122a8565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691604091825191166020820152602081528181019267ffffffffffffffff91808510838611176105235784845261232585611b30565b3085525f60608201526080810152803b156101855761237d5f9491859285519687809481937f6bfae1ca0000000000000000000000000000000000000000000000000000000083528960048401526044830190611c33565b6001602483015203925af180156123a05761239757505050565b82116105235752565b82513d5f823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff1690815f52600360205263ffffffff600360405f200154168015612475576020602493604051948580927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa928315610848575f93612441575b508261242f575060029190565b421161243b5760019190565b60039190565b9092506020813d60201161246d575b8161245d60209383611b68565b810103126101855751915f612422565b3d9150612450565b505f91508190565b73ffffffffffffffffffffffffffffffffffffffff909291921691825f52600360205263ffffffff600360405f20015416908115612573576020602494604051958680927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa938415610848575f9461253f575b5080840393808511612512570361242f575060029190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9093506020813d60201161256b575b8161255b60209383611b68565b810103126101855751925f6124fa565b3d915061254e565b505090505f905f90565b905f602091828151910182855af115610848575f513d6125fb575073ffffffffffffffffffffffffffffffffffffffff81163b155b6125b95750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b600114156125b256fea2646970667358221220bb788be1190a2f5816caa3342d23eb0fcb57bf52424d3d75a53808fcc8e303f864736f6c634300081b0033","opcodes":"PUSH2 0x140 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x364 JUMPI PUSH2 0x29DC DUP1 CODESIZE SUB DUP1 PUSH2 0x1A DUP2 PUSH2 0x368 JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD SWAP1 PUSH1 0xC0 DUP2 DUP4 SUB SLT PUSH2 0x364 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP2 SWAP1 DUP3 DUP3 SUB PUSH2 0x364 JUMPI PUSH1 0x20 SWAP4 DUP5 DUP3 ADD MLOAD SWAP4 DUP2 DUP6 AND DUP6 SUB PUSH2 0x364 JUMPI PUSH2 0x5E PUSH1 0x40 DUP5 ADD PUSH2 0x38D JUMP JUMPDEST SWAP7 PUSH1 0x60 DUP5 ADD MLOAD SWAP7 PUSH2 0x71 PUSH1 0x80 DUP7 ADD PUSH2 0x38D JUMP JUMPDEST SWAP6 PUSH1 0xA0 DUP7 ADD MLOAD PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB SWAP7 DUP8 DUP3 GT PUSH2 0x364 JUMPI ADD SWAP4 PUSH1 0x1F SWAP5 DUP5 DUP7 DUP3 ADD SLT ISZERO PUSH2 0x364 JUMPI DUP1 MLOAD SWAP9 DUP9 DUP11 GT PUSH2 0x32E JUMPI PUSH1 0x1F NOT SWAP10 PUSH2 0xB2 DUP9 DUP3 ADD DUP13 AND DUP8 ADD PUSH2 0x368 JUMP JUMPDEST SWAP7 DUP2 DUP9 MSTORE DUP7 DUP3 DUP6 ADD ADD GT PUSH2 0x364 JUMPI DUP6 DUP2 PUSH0 SWAP3 DUP3 DUP13 SWAP7 ADD DUP4 DUP12 ADD MCOPY DUP9 ADD ADD MSTORE AND DUP1 ISZERO PUSH2 0x351 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP3 SSTORE PUSH0 DUP1 SLOAD SWAP2 DUP3 AND DUP5 OR DUP2 SSTORE SWAP2 SWAP9 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP1 LOG3 ISZERO PUSH2 0x342 JUMPI PUSH1 0x80 MSTORE DUP2 MLOAD SWAP5 DUP6 GT PUSH2 0x32E JUMPI PUSH1 0x2 SLOAD DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x324 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x310 JUMPI DUP4 DUP2 GT PUSH2 0x2CC JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x26A JUMPI POP DUP4 SWAP5 POP SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP5 PUSH2 0x25F JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x2 SSTORE JUMPDEST PUSH32 0xF3B277728B3FEE749481EB3E0B3B48980DBBAB78658FC419025CB16EEE346775 PUSH1 0xA0 MSTORE PUSH32 0x5A28E9363BB942B639270062AA6BB295F434BCDFC42C97267BF003F272060DC9 PUSH1 0xC0 MSTORE PUSH1 0xE0 MSTORE PUSH2 0x100 SWAP2 DUP3 MSTORE PUSH2 0x120 SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH2 0x263A SWAP3 DUP4 PUSH2 0x3A2 DUP5 CODECOPY PUSH1 0x80 MLOAD DUP4 DUP2 DUP2 PUSH2 0x21E ADD MSTORE DUP2 DUP2 PUSH2 0x664 ADD MSTORE DUP2 DUP2 PUSH2 0xCEF ADD MSTORE DUP2 DUP2 PUSH2 0xE5F ADD MSTORE PUSH2 0x10AA ADD MSTORE PUSH1 0xA0 MLOAD DUP4 PUSH2 0x1FF8 ADD MSTORE PUSH1 0xC0 MLOAD DUP4 PUSH2 0x1F87 ADD MSTORE PUSH1 0xE0 MLOAD DUP4 DUP2 DUP2 PUSH2 0xA59 ADD MSTORE DUP2 DUP2 PUSH2 0x135B ADD MSTORE DUP2 DUP2 PUSH2 0x1561 ADD MSTORE PUSH2 0x22CF ADD MSTORE MLOAD DUP3 DUP2 DUP2 PUSH2 0x3D8 ADD MSTORE DUP2 DUP2 PUSH2 0x71B ADD MSTORE DUP2 DUP2 PUSH2 0xA09 ADD MSTORE PUSH2 0x1D7A ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0xAC6 ADD MSTORE PUSH2 0x1FCC ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x167 JUMP JUMPDEST SWAP3 SWAP5 DUP5 SWAP1 DUP2 AND PUSH1 0x2 PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x2B2 JUMPI POP POP POP LT PUSH2 0x29A JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x2 SSTORE PUSH2 0x179 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x28C JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x27B JUMP JUMPDEST PUSH1 0x2 PUSH0 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x307 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP6 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x2FC JUMPI POP POP PUSH2 0x14C JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x2EE JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x2E5 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x13C JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x932C92A5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x32E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x364 JUMPI JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x1950 JUMPI POP DUP1 PUSH4 0x14A2A784 EQ PUSH2 0x1678 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0x10CE JUMPI DUP1 PUSH4 0x178AC96E EQ PUSH2 0x107E JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0xF3E JUMPI DUP1 PUSH4 0x60E092C6 EQ PUSH2 0xDFA JUMPI DUP1 PUSH4 0x68BCE712 EQ PUSH2 0xC87 JUMPI DUP1 PUSH4 0x6EBA2B13 EQ PUSH2 0xC5A JUMPI DUP1 PUSH4 0x6F9D75CD EQ PUSH2 0xC25 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xBA0 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xAE9 JUMPI DUP1 PUSH4 0x8AEBD348 EQ PUSH2 0xAAF JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xA7D JUMPI DUP1 PUSH4 0x93504C52 EQ PUSH2 0xA2D JUMPI DUP1 PUSH4 0x9B552CC2 EQ PUSH2 0x9DD JUMPI DUP1 PUSH4 0xB8296FC4 EQ PUSH2 0x8C3 JUMPI DUP1 PUSH4 0xD83B06A4 EQ PUSH2 0x5FE JUMPI DUP1 PUSH4 0xDE557A32 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x189 JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0xF8 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x111 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0x119 PUSH2 0x20CB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x1D5 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0x1DD PUSH2 0x1AC2 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP4 AND DUP1 SWAP4 SUB PUSH2 0x185 JUMPI PUSH1 0x84 CALLDATALOAD SWAP4 PUSH1 0xA4 CALLDATALOAD DUP7 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0xC4 CALLDATALOAD SWAP6 DUP8 PUSH32 0x0 AND CALLER SUB PUSH2 0x5D6 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SWAP7 DUP8 TLOAD PUSH2 0x5AE JUMPI PUSH1 0x1 DUP9 TSTORE DUP6 DUP10 AND SWAP6 DUP8 DUP8 SUB PUSH2 0x2FF JUMPI PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616E642074617267657420746F6B656E206172652074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x68652073616D6500000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST DUP6 ISZERO PUSH2 0x550 JUMPI PUSH2 0x30E DUP4 PUSH2 0x20EB JUMP JUMPDEST PUSH2 0x317 DUP3 PUSH2 0x2150 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE DUP7 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE PUSH1 0xA0 DUP2 ADD SWAP1 DUP1 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x523 JUMPI PUSH2 0x37B SWAP2 PUSH1 0x40 MSTORE DUP3 PUSH2 0x257D JUMP JUMPDEST PUSH2 0x385 DUP7 DUP3 PUSH2 0x247D JUMP JUMPDEST POP PUSH1 0x4 DUP2 LT ISZERO DUP1 PUSH2 0x4E9 JUMPI DUP2 ISZERO ISZERO DUP1 PUSH2 0x516 JUMPI JUMPDEST PUSH2 0x4BA JUMPI POP POP SWAP3 PUSH0 SWAP10 SWAP3 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP6 SWAP3 PUSH2 0x3FD DUP9 DUP8 PUSH2 0x3D6 PUSH1 0x60 SWAP10 PUSH2 0x22B7 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0x21B6 JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 MLOAD PUSH2 0x410 DUP2 PUSH2 0x1B4C JUMP JUMPDEST DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 DUP2 MSTORE PUSH1 0x40 DUP3 ADD SWAP1 DUP7 DUP3 MSTORE DUP5 DUP12 DUP5 ADD SWAP7 AND DUP7 MSTORE PUSH0 DUP15 SWAP1 MSTORE DUP4 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP12 SWAP2 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 SLOAD AND OR DUP5 SSTORE DUP11 PUSH1 0x1 DUP6 ADD SWAP3 MLOAD AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE MLOAD PUSH1 0x2 DUP3 ADD SSTORE ADD SWAP2 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x40 DUP7 ADD MSTORE AND SWAP3 LOG4 TSTORE STOP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH2 0x4E9 JUMPI PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP PUSH0 PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x399 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616D6F756E74206973207A65726F0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x617 PUSH2 0x1A9F JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0x88B JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0x87E JUMPI JUMPDEST PUSH2 0x5D6 JUMPI PUSH2 0x6AD DUP6 PUSH2 0x23AA JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x3 DUP2 SUB PUSH2 0x853 JUMPI POP PUSH2 0x6CA DUP4 PUSH2 0x20EB JUMP JUMPDEST PUSH2 0x6D3 DUP5 PUSH2 0x2150 JUMP JUMPDEST DUP5 DUP7 AND SWAP5 DUP6 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH1 0x2 DUP3 ADD SSTORE ADD PUSH4 0xFFFFFFFF DUP7 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0x0 SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x44 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP2 PUSH2 0x7EA JUMPI JUMPDEST POP PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A SWAP8 DUP5 SWAP4 SWAP3 DUP5 PUSH1 0x80 SWAP10 SWAP9 SWAP8 SWAP7 PUSH2 0x7C3 SWAP5 LT PUSH2 0x7D9 JUMPI JUMPDEST POP POP PUSH2 0x22B7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE LOG1 STOP JUMPDEST PUSH2 0x7E3 SWAP2 DUP4 PUSH2 0x21B6 JUMP JUMPDEST DUP10 DUP5 PUSH2 0x7BC JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 SWAP4 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 RETURNDATASIZE DUP4 GT PUSH2 0x841 JUMPI JUMPDEST PUSH2 0x807 DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP5 SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A PUSH2 0x785 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x7FD JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0x6A0 JUMP JUMPDEST DUP1 SWAP3 POP DUP4 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x8BC JUMPI JUMPDEST PUSH2 0x8A4 DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0x8B6 DUP6 SWAP2 PUSH2 0x1BCC JUMP JUMPDEST DUP8 PUSH2 0x695 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x89A JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x8DC PUSH2 0x1A9F JUMP JUMPDEST POP PUSH2 0x8E5 PUSH2 0x1AC2 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x185 JUMPI PUSH2 0x907 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST PUSH1 0x84 SWAP3 SWAP2 SWAP3 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x185 JUMPI PUSH2 0x9D9 SWAP3 PUSH2 0x929 PUSH2 0x930 SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST POP POP PUSH2 0x1CCB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0xB74 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xBB8 PUSH2 0x20CB JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xC46 PUSH2 0xC41 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0x23AA JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x20 SWAP2 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x9D9 PUSH2 0x930 PUSH2 0xC79 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0xC81 PUSH2 0x1C73 JUMP JUMPDEST POP PUSH2 0x1EBD JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xCA0 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0xCA8 PUSH2 0x1AC2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 PUSH1 0x20 SWAP3 SWAP2 DUP4 DUP2 PUSH1 0x4 DUP2 PUSH32 0x0 DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0xDC2 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0xDB5 JUMPI JUMPDEST PUSH2 0x5D6 JUMPI DUP3 PUSH1 0x24 SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP4 PUSH2 0xD83 JUMPI JUMPDEST POP PUSH2 0xD81 SWAP4 POP PUSH2 0x1D09 JUMP JUMPDEST STOP JUMPDEST SWAP1 SWAP3 POP DUP4 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xDAE JUMPI JUMPDEST PUSH2 0xD9A DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0xD81 SWAP3 MLOAD SWAP2 DUP5 PUSH2 0xD76 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xD90 JUMP JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0xD2C JUMP JUMPDEST DUP1 SWAP3 POP DUP6 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xDF3 JUMPI JUMPDEST PUSH2 0xDDB DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0xDED DUP6 SWAP2 PUSH2 0x1BCC JUMP JUMPDEST DUP7 PUSH2 0xD21 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xDD1 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xE13 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0xE1B PUSH2 0x1AC2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0xF02 JUMPI JUMPDEST POP AND CALLER EQ ISZERO SWAP1 DUP2 PUSH2 0xEF4 JUMPI JUMPDEST POP PUSH2 0x5D6 JUMPI PUSH2 0xEAA DUP3 PUSH2 0x23AA JUMP JUMPDEST SWAP2 SWAP1 SWAP3 PUSH1 0x4 DUP5 LT ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x3 DUP5 SUB PUSH2 0xEC8 JUMPI PUSH2 0xD81 SWAP4 POP PUSH2 0x1D09 JUMP JUMPDEST DUP4 PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH0 SLOAD AND CALLER EQ ISZERO DUP4 PUSH2 0xE9C JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF36 JUMPI JUMPDEST DUP2 PUSH2 0xF1E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0xF30 DUP3 SWAP2 PUSH2 0x1BCC JUMP JUMPDEST DUP6 PUSH2 0xE90 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF11 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH1 0x2 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x1074 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x1047 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x1009 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xFAE JUMPI JUMPDEST POP PUSH2 0xF9A SWAP3 POP SUB DUP4 PUSH2 0x1B68 JUMP JUMPDEST PUSH2 0x9D9 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x2 PUSH0 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0xFF1 JUMPI POP POP PUSH2 0xF9A SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0xF8D JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0xFDA JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0xF9A SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0xF8D SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0xF69 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT PUSH2 0x185 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x185 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x110C DUP4 PUSH2 0x1B8B JUMP JUMPDEST SWAP3 PUSH2 0x111A PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1B68 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP2 CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0x185 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH1 0x20 SWAP4 ADD DUP6 CALLDATACOPY DUP6 ADD ADD MSTORE DUP3 MLOAD DUP4 ADD SWAP2 PUSH1 0x20 DUP4 ADD SWAP4 DUP1 DUP5 SUB PUSH2 0x1A0 SWAP1 DUP2 DUP2 SLT PUSH2 0x185 JUMPI PUSH2 0x180 DUP1 SWAP2 SLT PUSH2 0x185 JUMPI PUSH2 0x1174 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x116F DUP8 PUSH2 0x1B13 JUMP JUMPDEST PUSH2 0x1BCC JUMP JUMPDEST DUP6 MSTORE PUSH2 0x1182 PUSH1 0x40 DUP5 ADD PUSH2 0x1BCC JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x1193 PUSH1 0x60 DUP5 ADD PUSH2 0x1BCC JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x185 JUMPI PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP5 ADD MLOAD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x120 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH2 0x140 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x185 JUMPI DUP8 ADD MSTORE PUSH2 0x160 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x185 JUMPI ADD SWAP4 PUSH1 0x60 DUP6 DUP6 SUB SLT PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH2 0x1232 DUP7 PUSH2 0x1B30 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x185 JUMPI DUP2 ADD DUP3 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x185 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x523 JUMPI DUP2 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP3 PUSH2 0x126D PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1B68 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD SWAP2 DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x185 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1668 JUMPI POP POP POP DUP7 MSTORE PUSH1 0x40 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x185 JUMPI PUSH1 0x60 SWAP1 DUP3 ADD DUP1 SWAP7 SUB SLT PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD PUSH2 0x12B7 DUP2 PUSH2 0x1B30 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP2 AND DUP2 SUB PUSH2 0x185 JUMPI DUP3 MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD DUP6 DUP2 GT PUSH2 0x185 JUMPI PUSH1 0x20 DUP6 SWAP2 PUSH2 0x1303 SWAP4 ADD ADD PUSH2 0x1BED JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP3 DUP4 GT PUSH2 0x185 JUMPI PUSH2 0x1326 SWAP3 ADD PUSH1 0x20 ADD PUSH2 0x1BED JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF698DA2500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP3 PUSH2 0x1632 JUMPI JUMPDEST POP SWAP1 PUSH2 0x144E PUSH2 0x1440 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x1B68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 PUSH1 0x20 DUP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP2 MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP6 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0xC0 DUP6 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1619 JUMPI DUP6 PUSH1 0x20 PUSH2 0x154B DUP12 DUP12 DUP12 PUSH2 0x14EB DUP7 PUSH2 0x14DD DUP14 DUP14 PUSH1 0x40 PUSH2 0x14CB DUP12 DUP5 ADD MLOAD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 SWAP4 DUP5 DUP9 DUP4 SUB ADD PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x1C33 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1BA7 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP9 MSTORE DUP8 PUSH2 0x1B68 JUMP JUMPDEST PUSH2 0x155D PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP5 PUSH32 0x53F00B1400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE ADDRESS PUSH1 0x4 DUP8 ADD MSTORE CALLER PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0x44 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD MSTORE PUSH0 PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0xE0 PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xE4 DUP6 ADD SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0xC4 DUP6 ADD MSTORE PUSH2 0x1BA7 JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP1 PUSH2 0x15BD JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1611 JUMPI JUMPDEST DUP2 PUSH2 0x15D7 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x185 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1590 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x15CA JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP10 SWAP6 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1477 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1660 JUMPI JUMPDEST DUP2 PUSH2 0x164D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI SWAP1 MLOAD SWAP1 PUSH2 0x144E PUSH2 0x138B JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1640 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1286 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH2 0x260 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x1692 PUSH2 0x1A9F JUMP JUMPDEST POP PUSH2 0x169B PUSH2 0x1AC2 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x185 JUMPI PUSH2 0x16BD SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x185 JUMPI PUSH2 0x16D7 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST POP POP PUSH2 0x180 SWAP3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x170F SWAP2 PUSH2 0x1CCB JUMP JUMPDEST SWAP2 PUSH2 0x164 CALLDATALOAD SWAP3 DUP4 PUSH1 0x80 DUP3 ADD DUP1 MLOAD DUP3 GT PUSH2 0x1948 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH2 0x17E5 DUP2 PUSH2 0x17D7 PUSH1 0x20 DUP3 ADD SWAP5 DUP6 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1B68 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 PUSH1 0xE4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI DUP8 MSTORE PUSH2 0x104 CALLDATALOAD DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x124 CALLDATALOAD SWAP1 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x184 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1A4 SWAP3 DUP4 CALLDATALOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x1C4 SWAP1 DUP2 CALLDATALOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x1E4 SWAP7 DUP8 CALLDATALOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x204 SWAP5 DUP6 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x224 CALLDATALOAD PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x244 CALLDATALOAD DUP2 DUP7 ADD MSTORE DUP5 MSTORE PUSH2 0x1A0 DUP5 ADD SWAP7 DUP8 GT DUP5 DUP9 LT OR PUSH2 0x523 JUMPI DUP7 PUSH1 0x40 MSTORE DUP4 MLOAD SWAP1 KECCAK256 SUB PUSH2 0x18CD JUMPI STOP JUMPDEST PUSH1 0x84 SWAP6 PUSH1 0x2F PUSH32 0x566572696679206F7264657220646F6573206E6F74206D617463682077697468 SWAP3 PUSH1 0x20 PUSH32 0x206578697374696E67206F726465720000000000000000000000000000000000 SWAP8 PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP7 ADD MSTORE DUP5 ADD MSTORE DUP3 ADD MSTORE ADD MSTORE REVERT JUMPDEST MSTORE DUP4 DUP6 PUSH2 0x1723 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x185 JUMPI PUSH32 0x62AF8DC200000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x1A77 JUMPI DUP2 PUSH32 0x14A2A78400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x1A4D JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1A23 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x19F9 JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x19F2 JUMP JUMPDEST PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x19EB JUMP JUMPDEST PUSH32 0xB8296FC400000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x19E4 JUMP JUMPDEST PUSH32 0x3279856600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x185 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x185 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x185 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x185 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x185 JUMPI JUMP JUMPDEST PUSH2 0x180 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x523 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x185 JUMPI JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x185 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1C04 DUP3 PUSH2 0x1B8B JUMP JUMPDEST SWAP3 PUSH2 0x1C12 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1B68 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x185 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x60 PUSH1 0x40 PUSH2 0x1C70 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP6 ADD MSTORE ADD MLOAD SWAP2 DUP2 PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1C80 DUP3 PUSH2 0x1B13 JUMP JUMPDEST PUSH0 PUSH2 0x160 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE DUP3 PUSH2 0x140 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 PUSH2 0x1CD8 PUSH2 0x1C73 JUMP JUMPDEST POP DUP2 ADD SUB SLT PUSH2 0x185 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH2 0x1C70 SWAP1 PUSH2 0x1EBD JUMP JUMPDEST PUSH1 0x60 SWAP2 PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP4 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 PUSH1 0x20 DUP1 DUP5 ADD SWAP4 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP7 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP4 PUSH0 DUP9 PUSH32 0x0 AND SWAP3 DUP4 PUSH1 0x24 DUP7 ADD MSTORE DUP2 PUSH1 0x44 DUP7 ADD MSTORE PUSH1 0x44 DUP6 MSTORE PUSH2 0x1DB4 DUP6 PUSH2 0x1B4C JUMP JUMPDEST DUP5 MLOAD SWAP1 DUP3 DUP14 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x1E9F JUMPI JUMPDEST POP POP ISZERO PUSH2 0x1E64 JUMPI JUMPDEST POP POP POP DUP6 DUP5 AND PUSH0 DUP2 DUP2 MSTORE PUSH1 0x3 DUP1 DUP5 MSTORE DUP8 DUP3 KECCAK256 DUP3 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP4 SWAP1 SSTORE ADD SSTORE DUP6 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 SWAP7 PUSH2 0x1E54 SWAP2 SWAP1 PUSH2 0x1E4F DUP3 PUSH1 0x64 DUP2 ADD PUSH2 0x1440 JUMP JUMPDEST PUSH2 0x257D JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 MSTORE DUP6 ADD MSTORE AND SWAP1 DUP3 ADD MSTORE LOG1 JUMP JUMPDEST PUSH2 0x1E97 SWAP3 PUSH2 0x1E91 SWAP2 DUP10 MLOAD SWAP2 DUP7 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x1E8B DUP2 PUSH2 0x1B4C JUMP JUMPDEST DUP10 PUSH2 0x257D JUMP JUMPDEST DUP8 PUSH2 0x257D JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x1DCC JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x1EB5 JUMPI POP DUP7 DUP10 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x1DC4 JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x1EAE JUMP JUMPDEST PUSH2 0x1EC5 PUSH2 0x1C73 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH1 0x3 DUP3 MLOAD SWAP3 PUSH2 0x1EFC DUP5 PUSH2 0x1B4C JUMP JUMPDEST DUP5 DUP4 SLOAD AND DUP5 MSTORE DUP5 PUSH1 0x1 DUP5 ADD SLOAD AND SWAP5 DUP7 DUP6 ADD SWAP6 DUP7 MSTORE PUSH1 0x2 DUP5 ADD SLOAD SWAP4 DUP3 DUP7 ADD SWAP5 DUP6 MSTORE PUSH4 0xFFFFFFFF SWAP4 DUP5 SWAP2 ADD SLOAD AND SWAP5 PUSH1 0x60 DUP2 ADD SWAP6 DUP1 DUP8 MSTORE ISZERO PUSH2 0x206E JUMPI DUP2 SWAP1 MLOAD AND SWAP6 MLOAD AND SWAP2 DUP2 MLOAD SWAP4 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS PUSH1 0x4 DUP7 ADD MSTORE DUP8 DUP6 PUSH1 0x24 DUP2 DUP13 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x2064 JUMPI PUSH0 SWAP6 PUSH2 0x2035 JUMPI JUMPDEST POP MLOAD SWAP5 MLOAD AND SWAP5 PUSH32 0x0 SWAP7 DUP3 MLOAD SWAP9 PUSH2 0x1FB3 DUP11 PUSH2 0x1B13 JUMP JUMPDEST DUP10 MSTORE DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH32 0x0 PUSH1 0xC0 DUP4 ADD MSTORE PUSH0 PUSH1 0xE0 DUP4 ADD MSTORE PUSH32 0x0 PUSH2 0x100 DUP4 ADD MSTORE PUSH1 0x1 PUSH2 0x120 DUP4 ADD MSTORE DUP1 PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x205D JUMPI JUMPDEST PUSH2 0x204D DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x1F7F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2043 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP9 DUP5 MLOAD SWAP1 PUSH32 0xC8FC272500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7264657220646F6573206E6F74206578697374000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0xB74 JUMPI JUMP JUMPDEST ISZERO PUSH2 0x20F2 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D696E20616D6F756E74206F7574206973207A65726F00000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST TIMESTAMP GT PUSH2 0x2158 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446561646C696E6520697320696E207468652070617374000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 PUSH0 DUP2 DUP6 ADD PUSH2 0x2219 DUP7 PUSH2 0x14DD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP10 DUP11 DUP6 MSTORE DUP8 PUSH1 0x24 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST DUP6 MLOAD SWAP1 DUP3 DUP7 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x2285 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x2237 JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x227C SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1E4F SWAP3 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x2276 DUP2 PUSH2 0x1B4C JUMP JUMPDEST DUP3 PUSH2 0x257D JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 PUSH2 0x2231 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x22AF JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x2229 JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x22A8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP2 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE DUP2 DUP2 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP1 DUP6 LT DUP4 DUP7 GT OR PUSH2 0x523 JUMPI DUP5 DUP5 MSTORE PUSH2 0x2325 DUP6 PUSH2 0x1B30 JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD MSTORE DUP1 EXTCODESIZE ISZERO PUSH2 0x185 JUMPI PUSH2 0x237D PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x6BFAE1CA00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x1C33 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x23A0 JUMPI PUSH2 0x2397 JUMPI POP POP POP JUMP JUMPDEST DUP3 GT PUSH2 0x523 JUMPI MSTORE JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND DUP1 ISZERO PUSH2 0x2475 JUMPI PUSH1 0x20 PUSH1 0x24 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP4 PUSH2 0x2441 JUMPI JUMPDEST POP DUP3 PUSH2 0x242F JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x243B JUMPI PUSH1 0x1 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x246D JUMPI JUMPDEST DUP2 PUSH2 0x245D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x2422 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2450 JUMP JUMPDEST POP PUSH0 SWAP2 POP DUP2 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 SWAP2 SWAP3 AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND SWAP1 DUP2 ISZERO PUSH2 0x2573 JUMPI PUSH1 0x20 PUSH1 0x24 SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP5 PUSH2 0x253F JUMPI JUMPDEST POP DUP1 DUP5 SUB SWAP4 DUP1 DUP6 GT PUSH2 0x2512 JUMPI SUB PUSH2 0x242F JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP4 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x256B JUMPI JUMPDEST DUP2 PUSH2 0x255B PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP3 PUSH0 PUSH2 0x24FA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x254E JUMP JUMPDEST POP POP SWAP1 POP PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 PUSH1 0x20 SWAP2 DUP3 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL ISZERO PUSH2 0x848 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x25FB JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x25B9 JUMPI POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x25B2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBB PUSH25 0x8BE1190A2F5816CAA3342D23EB0FCB57BF52424D3D75A53808 0xFC 0xC8 0xE3 SUB 0xF8 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1814:11638:75:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1814:11638:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:75;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:75;;;;;;;;;;;;;;1273:26:48;;1269:95;;1814:11638:75;;;-1:-1:-1;;;;;;1814:11638:75;;;;;-1:-1:-1;1814:11638:75;;;;;;;;;;;;;3052:40:48;;-1:-1:-1;3052:40:48;1203:42:77;1199:107;;1814:11638:75;1316:40:77;1814:11638:75;;;;;;;1156:21:37;1814:11638:75;;;;;;;;;;;-1:-1:-1;1814:11638:75;;;;;;;;;;;-1:-1:-1;1814:11638:75;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:75;;;;;;;;;;;;;;;;;1156:21:37;1814:11638:75;;2215:17;1814:11638;2215:17;2281:18;1814:11638;2281:18;2893:30;;2933:31;;;;2974:18;;;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2893:30;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:75;;;;;;;;;;;1156:21:37;-1:-1:-1;1814:11638:75;;-1:-1:-1;1814:11638:75;;-1:-1:-1;1814:11638:75;;;;;;;;;;;;;;;;;;;;;1156:21:37;1814:11638:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:75;;;;;;;1156:21:37;-1:-1:-1;1814:11638:75;;-1:-1:-1;1814:11638:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:75;;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:75;;;;;-1:-1:-1;1814:11638:75;;;;;;;;;;;;-1:-1:-1;1814:11638:75;;;;;-1:-1:-1;1814:11638:75;1199:107:77;1268:27;;;-1:-1:-1;1268:27:77;;-1:-1:-1;1268:27:77;1269:95:48;1322:31;;;-1:-1:-1;1322:31:48;-1:-1:-1;1322:31:48;1814:11638:75;;-1:-1:-1;1322:31:48;1814:11638:75;-1:-1:-1;1814:11638:75;;;;;;;;;-1:-1:-1;;1814:11638:75;;;-1:-1:-1;;;;;1814:11638:75;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1814:11638:75;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":6815,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_20932":{"entryPoint":6850,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":6885,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_fromMemory":{"entryPoint":7149,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC20_fromMemory":{"entryPoint":7116,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_string":{"entryPoint":7079,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_ConditionalOrderParams":{"entryPoint":7219,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_GPv2Order":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_and_zero_memory_struct_struct_GPv2Order":{"entryPoint":7283,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":7051,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":7016,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_20936":{"entryPoint":6931,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_20937":{"entryPoint":6960,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_20956":{"entryPoint":6988,"id":null,"parameterSlots":1,"returnSlots":0},"fun_callOptionalReturn":{"entryPoint":9597,"id":11006,"parameterSlots":2,"returnSlots":0},"fun_cancelOrder":{"entryPoint":7433,"id":18951,"parameterSlots":3,"returnSlots":0},"fun_checkDeadline":{"entryPoint":8528,"id":19464,"parameterSlots":1,"returnSlots":0},"fun_checkMinAmountOut":{"entryPoint":8427,"id":19479,"parameterSlots":1,"returnSlots":0},"fun_checkOwner":{"entryPoint":8395,"id":9405,"parameterSlots":0,"returnSlots":0},"fun_createCowOrder":{"entryPoint":8887,"id":19509,"parameterSlots":1,"returnSlots":0},"fun_forceApprove":{"entryPoint":8630,"id":10832,"parameterSlots":3,"returnSlots":0},"fun_getOrder":{"entryPoint":7869,"id":19357,"parameterSlots":1,"returnSlots":1},"fun_getOrderStatusAndBalance":{"entryPoint":9341,"id":19448,"parameterSlots":2,"returnSlots":2},"fun_getOrderStatusAndBalance_20941":{"entryPoint":9130,"id":19448,"parameterSlots":1,"returnSlots":2},"fun_getTradeableOrder":{"entryPoint":7371,"id":19142,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"18677":[{"length":32,"start":8184}],"18682":[{"length":32,"start":8071}],"18685":[{"length":32,"start":2649},{"length":32,"start":4955},{"length":32,"start":5473},{"length":32,"start":8911}],"18687":[{"length":32,"start":984},{"length":32,"start":1819},{"length":32,"start":2569},{"length":32,"start":7546}],"18689":[{"length":32,"start":2758},{"length":32,"start":8140}],"19753":[{"length":32,"start":542},{"length":32,"start":1636},{"length":32,"start":3311},{"length":32,"start":3679},{"length":32,"start":4266}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a7146119505750806314a2a784146116785780631626ba7e146110ce578063178ac96e1461107e57806354fd4d5014610f3e57806360e092c614610dfa57806368bce71214610c875780636eba2b1314610c5a5780636f9d75cd14610c25578063715018a614610ba057806379ba509714610ae95780638aebd34814610aaf5780638da5cb5b14610a7d57806393504c5214610a2d5780639b552cc2146109dd578063b8296fc4146108c3578063d83b06a4146105fe578063de557a32146101bc578063e30c3978146101895763f2fde38b146100f8575f80fd5b3461018557602060031936011261018557610111611a9f565b6101196120cb565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b34610185575f60031936011261018557602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346101855760e0600319360112610185576101d5611a9f565b6101dd611ac2565b90604435916064359073ffffffffffffffffffffffffffffffffffffffff93848316809303610185576084359360a4358681168091036101855760c43595877f00000000000000000000000000000000000000000000000000000000000000001633036105d6577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0096875c6105ae576001885d858916958787036102ff5760846040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f46656520746f6b656e20616e642074617267657420746f6b656e20617265207460448201527f68652073616d65000000000000000000000000000000000000000000000000006064820152fd5b85156105505761030e836120eb565b61031782612150565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523060448201528660648201526064815260a081019080821067ffffffffffffffff8311176105235761037b916040528261257d565b610385868261247d565b506004811015806104e95781151580610516575b6104ba575050925f99927f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d95926103fd88876103d66060996122b7565b7f0000000000000000000000000000000000000000000000000000000000000000906121b6565b63ffffffff600360405161041081611b4c565b8c8152602081018681526040820190868252848b8401961686525f8e9052836020525f60408b91209351167fffffffffffffffffffffffff000000000000000000000000000000000000000090818554161784558a6001850192511690825416179055516002820155019151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000825416179055604051968752602087015260408601521692a45d005b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f526104e95760045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b50505f6002821415610399565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f46656520746f6b656e20616d6f756e74206973207a65726f00000000000000006044820152fd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461018557606060031936011261018557610617611a9f565b60243560443573ffffffffffffffffffffffffffffffffffffffff916040517f4ccb20c00000000000000000000000000000000000000000000000000000000081526020908181600481887f0000000000000000000000000000000000000000000000000000000000000000165afa80156108485785915f9161088b575b50163314158061087e575b6105d6576106ad856123aa565b919060048110156104e9576003810361085357506106ca836120eb565b6106d384612150565b84861694855f5260038252600360405f208560028201550163ffffffff86167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790557f000000000000000000000000000000000000000000000000000000000000000090604051907fdd62ed3e0000000000000000000000000000000000000000000000000000000082523060048301528216602482015282816044818a5afa908115610848575f916107ea575b507f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a97849392846080999897966107c394106107d9575b50506122b7565b60405194855284015260408301526060820152a1005b6107e391836121b6565b89846107bc565b90508281819398979695943d8311610841575b6108078183611b68565b81010312610185575194959394929391929091907f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a610785565b503d6107fd565b6040513d5f823e3d90fd5b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50835f54163314156106a0565b809250838092503d83116108bc575b6108a48183611b68565b81010312610185576108b68591611bcc565b87610695565b503d61089a565b346101855760a0600319360112610185576108dc611a9f565b506108e5611ac2565b5067ffffffffffffffff60643581811161018557610907903690600401611ae5565b608492919235918211610185576109d992610929610930933690600401611ae5565b5050611ccb565b6040519182918291909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b0390f35b34610185575f60031936011261018557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610185575f60031936011261018557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610185575f60031936011261018557602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610185575f6003193601126101855760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610185575f6003193601126101855760015473ffffffffffffffffffffffffffffffffffffffff3381831603610b74577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b34610185575f60031936011261018557610bb86120cb565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461018557602060031936011261018557610c46610c41611a9f565b6123aa565b5060405160048210156104e9576020918152f35b34610185576020600319360112610185576109d9610930610c79611a9f565b610c81611c73565b50611ebd565b3461018557604060031936011261018557610ca0611a9f565b610ca8611ac2565b6040517f4ccb20c000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff926020929183816004817f000000000000000000000000000000000000000000000000000000000000000089165afa80156108485785915f91610dc2575b501633141580610db5575b6105d65782602494604051958680927f70a0823100000000000000000000000000000000000000000000000000000000825230600483015285165afa928315610848575f93610d83575b50610d819350611d09565b005b90925083813d8311610dae575b610d9a8183611b68565b8101031261018557610d8192519184610d76565b503d610d90565b50835f5416331415610d2c565b809250858092503d8311610df3575b610ddb8183611b68565b8101031261018557610ded8591611bcc565b86610d21565b503d610dd1565b3461018557604060031936011261018557610e13611a9f565b610e1b611ac2565b73ffffffffffffffffffffffffffffffffffffffff6040517f4ccb20c0000000000000000000000000000000000000000000000000000000008152602081600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156108485782915f91610f02575b50163314159081610ef4575b506105d657610eaa826123aa565b91909260048410156104e95760038403610ec857610d819350611d09565b837fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90505f541633141583610e9c565b9150506020813d602011610f36575b81610f1e60209383611b68565b8101031261018557610f308291611bcc565b85610e90565b3d9150610f11565b34610185575f600319360112610185576040515f6002549060018260011c9160018416918215611074575b60209485851084146110475785879486865291825f14611009575050600114610fae575b50610f9a92500383611b68565b6109d9604051928284938452830190611ba7565b84915060025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace905f915b858310610ff1575050610f9a935082010185610f8d565b80548389018501528794508693909201918101610fda565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685820152610f9a95151560051b8501019250879150610f8d9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f1692610f69565b34610185575f60031936011261018557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101855760406003193601126101855760243567ffffffffffffffff80821161018557366023830112156101855781600401359161110c83611b8b565b9261111a6040519485611b68565b8084526020840191366024838301011161018557815f92602460209301853785010152825183019160208301938084036101a09081811261018557610180809112610185576111746040519561116f87611b13565b611bcc565b855261118260408401611bcc565b602086015261119360608401611bcc565b60408601526080830151606086015260a0830151608086015260c083015163ffffffff811681036101855760a086015260e083015160c0860152610100908184015160e08701526101209182850151908701526101409182850151908115158203610185578701526101609182850151908701528301519085015281015190828211610185570193606085850312610185576040519461123286611b30565b602081015183811161018557810182603f8201121561018557602081015190848211610523578160051b6040519261126d6020830185611b68565b8352604060208401918301019185831161018557604001905b828210611668575050508652604081015183811161018557606090820180960312610185576040516112b781611b30565b60208601519573ffffffffffffffffffffffffffffffffffffffff9687811681036101855782526040810151602083015260608101518581116101855760208591611303930101611bed565b604082015260208701526060810151928311610185576113269201602001611bed565b6040840152604051907ff698da25000000000000000000000000000000000000000000000000000000008252602082600481867f0000000000000000000000000000000000000000000000000000000000000000165afa918215610848575f92611632575b509061144e611440926040519384916020830191909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101845283611b68565b604051809460208083015260a08201815190606060408501528151809152602060c085019201905f5b8181106116195785602061154b8b8b8b6114eb866114dd8d8d60406114cb8b840151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09384888303016060890152611c33565b92015190848303016080850152611ba7565b03601f198101885287611b68565b61155d604051968795869485947f53f00b14000000000000000000000000000000000000000000000000000000008652306004870152336024870152600435604487015260648601525f608486015260e060a486015260e4850190611ba7565b906003198483030160c4850152611ba7565b03917f0000000000000000000000000000000000000000000000000000000000000000165afa8015610848575f906115bd575b6020907fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b506020813d602011611611575b816115d760209383611b68565b8101031261018557517fffffffff000000000000000000000000000000000000000000000000000000008116810361018557602090611590565b3d91506115ca565b8251845289955060209384019390920191600101611477565b91506020823d602011611660575b8161164d60209383611b68565b810103126101855790519061144e61138b565b3d9150611640565b8151815260209182019101611286565b346101855761026060031936011261018557611692611a9f565b5061169b611ac2565b5067ffffffffffffffff60a435818111610185576116bd903690600401611ae5565b919060c435828111610185576116d7903690600401611ae5565b505061018092837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c3601126101855761170f91611ccb565b916101643592836080820180518211611948575b50506040516117e5816117d760208201948591909161018081019273ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101835282611b68565b51902090604051602081019460e43573ffffffffffffffffffffffffffffffffffffffff90818116809103610185578752610104358181168091036101855760408401526101243590811680910361018557606083015261014435608083015260a08201526101843563ffffffff81168091036101855760c08201526101a492833560e08301526101c49081356101008401526101e49687356101208501526102049485358015158091036101855761014086015261022435610160860152610244358186015284526101a0840196871184881017610523578660405283519020036118cd57005b608495602f7f566572696679206f7264657220646f6573206e6f74206d6174636820776974689260207f206578697374696e67206f726465720000000000000000000000000000000000977f8d8a6110000000000000000000000000000000000000000000000000000000008a528601528401528201520152fd5b528385611723565b3461018557602060031936011261018557600435907fffffffff000000000000000000000000000000000000000000000000000000008216809203610185577f62af8dc2000000000000000000000000000000000000000000000000000000008214611a7757817f14a2a7840000000000000000000000000000000000000000000000000000000060209314908115611a4d575b8115611a23575b81156119f9575b5015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836119f2565b7f1626ba7e00000000000000000000000000000000000000000000000000000000811491506119eb565b7fb8296fc400000000000000000000000000000000000000000000000000000000811491506119e4565b7f32798566000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361018557565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361018557565b9181601f840112156101855782359167ffffffffffffffff8311610185576020838186019501011161018557565b610180810190811067ffffffffffffffff82111761052357604052565b6060810190811067ffffffffffffffff82111761052357604052565b6080810190811067ffffffffffffffff82111761052357604052565b90601f601f19910116810190811067ffffffffffffffff82111761052357604052565b67ffffffffffffffff811161052357601f01601f191660200190565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b519073ffffffffffffffffffffffffffffffffffffffff8216820361018557565b81601f8201121561018557805190611c0482611b8b565b92611c126040519485611b68565b8284526020838301011161018557815f9260208093018386015e8301015290565b9060606040611c709373ffffffffffffffffffffffffffffffffffffffff8151168452602081015160208501520151918160408201520190611ba7565b90565b60405190611c8082611b13565b5f610160838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b9081602091611cd8611c73565b5081010312610185573573ffffffffffffffffffffffffffffffffffffffff811680910361018557611c7090611ebd565b6060917f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a936040918251916020808401937f095ea7b3000000000000000000000000000000000000000000000000000000009081865273ffffffffffffffffffffffffffffffffffffffff95835f887f0000000000000000000000000000000000000000000000000000000000000000169283602486015281604486015260448552611db485611b4c565b845190828d5af15f513d82611e9f575b505015611e64575b5050508584165f81815260038084528782208281556001810183905560028101839055015585517fa9059cbb000000000000000000000000000000000000000000000000000000008184015273ffffffffffffffffffffffffffffffffffffffff85166024820152604481018490529096611e549190611e4f8260648101611440565b61257d565b84519586528501521690820152a1565b611e9792611e91918951918683015260248201525f604482015260448152611e8b81611b4c565b8961257d565b8761257d565b5f8080611dcc565b909150611eb557508689163b15155b5f80611dc4565b600114611eae565b611ec5611c73565b5073ffffffffffffffffffffffffffffffffffffffff80911690815f52602090600382526040805f206003825192611efc84611b4c565b848354168452846001840154169486850195865260028401549382860194855263ffffffff9384910154169460608101958087521561206e5781905116955116918151937f70a0823100000000000000000000000000000000000000000000000000000000855230600486015287856024818c5afa948515612064575f95612035575b5051945116947f000000000000000000000000000000000000000000000000000000000000000096825198611fb38a611b13565b89528801528601526060850152608084015260a08301527f000000000000000000000000000000000000000000000000000000000000000060c08301525f60e08301527f000000000000000000000000000000000000000000000000000000000000000061010083015260016101208301528061014083015261016082015290565b9094508781813d831161205d575b61204d8183611b68565b810103126101855751935f611f7f565b503d612043565b83513d5f823e3d90fd5b6064888451907fc8fc27250000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4f7264657220646f6573206e6f742065786973740000000000000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff5f54163303610b7457565b156120f257565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d696e20616d6f756e74206f7574206973207a65726f000000000000000000006044820152fd5b421161215857565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f446561646c696e6520697320696e2074686520706173740000000000000000006044820152fd5b6040519160205f818501612219866114dd7f095ea7b300000000000000000000000000000000000000000000000000000000998a855287602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b85519082865af15f513d82612285575b505015612237575b50505050565b61227c9373ffffffffffffffffffffffffffffffffffffffff611e4f926040519260208401521660248201525f60448201526044815261227681611b4c565b8261257d565b5f808080612231565b9091506122af575073ffffffffffffffffffffffffffffffffffffffff82163b15155b5f80612229565b6001146122a8565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691604091825191166020820152602081528181019267ffffffffffffffff91808510838611176105235784845261232585611b30565b3085525f60608201526080810152803b156101855761237d5f9491859285519687809481937f6bfae1ca0000000000000000000000000000000000000000000000000000000083528960048401526044830190611c33565b6001602483015203925af180156123a05761239757505050565b82116105235752565b82513d5f823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff1690815f52600360205263ffffffff600360405f200154168015612475576020602493604051948580927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa928315610848575f93612441575b508261242f575060029190565b421161243b5760019190565b60039190565b9092506020813d60201161246d575b8161245d60209383611b68565b810103126101855751915f612422565b3d9150612450565b505f91508190565b73ffffffffffffffffffffffffffffffffffffffff909291921691825f52600360205263ffffffff600360405f20015416908115612573576020602494604051958680927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa938415610848575f9461253f575b5080840393808511612512570361242f575060029190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9093506020813d60201161256b575b8161255b60209383611b68565b810103126101855751925f6124fa565b3d915061254e565b505090505f905f90565b905f602091828151910182855af115610848575f513d6125fb575073ffffffffffffffffffffffffffffffffffffffff81163b155b6125b95750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b600114156125b256fea2646970667358221220bb788be1190a2f5816caa3342d23eb0fcb57bf52424d3d75a53808fcc8e303f864736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x1950 JUMPI POP DUP1 PUSH4 0x14A2A784 EQ PUSH2 0x1678 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0x10CE JUMPI DUP1 PUSH4 0x178AC96E EQ PUSH2 0x107E JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0xF3E JUMPI DUP1 PUSH4 0x60E092C6 EQ PUSH2 0xDFA JUMPI DUP1 PUSH4 0x68BCE712 EQ PUSH2 0xC87 JUMPI DUP1 PUSH4 0x6EBA2B13 EQ PUSH2 0xC5A JUMPI DUP1 PUSH4 0x6F9D75CD EQ PUSH2 0xC25 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xBA0 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xAE9 JUMPI DUP1 PUSH4 0x8AEBD348 EQ PUSH2 0xAAF JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xA7D JUMPI DUP1 PUSH4 0x93504C52 EQ PUSH2 0xA2D JUMPI DUP1 PUSH4 0x9B552CC2 EQ PUSH2 0x9DD JUMPI DUP1 PUSH4 0xB8296FC4 EQ PUSH2 0x8C3 JUMPI DUP1 PUSH4 0xD83B06A4 EQ PUSH2 0x5FE JUMPI DUP1 PUSH4 0xDE557A32 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x189 JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0xF8 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x111 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0x119 PUSH2 0x20CB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x1D5 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0x1DD PUSH2 0x1AC2 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP4 AND DUP1 SWAP4 SUB PUSH2 0x185 JUMPI PUSH1 0x84 CALLDATALOAD SWAP4 PUSH1 0xA4 CALLDATALOAD DUP7 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0xC4 CALLDATALOAD SWAP6 DUP8 PUSH32 0x0 AND CALLER SUB PUSH2 0x5D6 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SWAP7 DUP8 TLOAD PUSH2 0x5AE JUMPI PUSH1 0x1 DUP9 TSTORE DUP6 DUP10 AND SWAP6 DUP8 DUP8 SUB PUSH2 0x2FF JUMPI PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616E642074617267657420746F6B656E206172652074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x68652073616D6500000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST DUP6 ISZERO PUSH2 0x550 JUMPI PUSH2 0x30E DUP4 PUSH2 0x20EB JUMP JUMPDEST PUSH2 0x317 DUP3 PUSH2 0x2150 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE DUP7 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE PUSH1 0xA0 DUP2 ADD SWAP1 DUP1 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x523 JUMPI PUSH2 0x37B SWAP2 PUSH1 0x40 MSTORE DUP3 PUSH2 0x257D JUMP JUMPDEST PUSH2 0x385 DUP7 DUP3 PUSH2 0x247D JUMP JUMPDEST POP PUSH1 0x4 DUP2 LT ISZERO DUP1 PUSH2 0x4E9 JUMPI DUP2 ISZERO ISZERO DUP1 PUSH2 0x516 JUMPI JUMPDEST PUSH2 0x4BA JUMPI POP POP SWAP3 PUSH0 SWAP10 SWAP3 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP6 SWAP3 PUSH2 0x3FD DUP9 DUP8 PUSH2 0x3D6 PUSH1 0x60 SWAP10 PUSH2 0x22B7 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0x21B6 JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 MLOAD PUSH2 0x410 DUP2 PUSH2 0x1B4C JUMP JUMPDEST DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 DUP2 MSTORE PUSH1 0x40 DUP3 ADD SWAP1 DUP7 DUP3 MSTORE DUP5 DUP12 DUP5 ADD SWAP7 AND DUP7 MSTORE PUSH0 DUP15 SWAP1 MSTORE DUP4 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP12 SWAP2 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 SLOAD AND OR DUP5 SSTORE DUP11 PUSH1 0x1 DUP6 ADD SWAP3 MLOAD AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE MLOAD PUSH1 0x2 DUP3 ADD SSTORE ADD SWAP2 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x40 DUP7 ADD MSTORE AND SWAP3 LOG4 TSTORE STOP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH2 0x4E9 JUMPI PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP PUSH0 PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x399 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616D6F756E74206973207A65726F0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x617 PUSH2 0x1A9F JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0x88B JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0x87E JUMPI JUMPDEST PUSH2 0x5D6 JUMPI PUSH2 0x6AD DUP6 PUSH2 0x23AA JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x3 DUP2 SUB PUSH2 0x853 JUMPI POP PUSH2 0x6CA DUP4 PUSH2 0x20EB JUMP JUMPDEST PUSH2 0x6D3 DUP5 PUSH2 0x2150 JUMP JUMPDEST DUP5 DUP7 AND SWAP5 DUP6 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH1 0x2 DUP3 ADD SSTORE ADD PUSH4 0xFFFFFFFF DUP7 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0x0 SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x44 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP2 PUSH2 0x7EA JUMPI JUMPDEST POP PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A SWAP8 DUP5 SWAP4 SWAP3 DUP5 PUSH1 0x80 SWAP10 SWAP9 SWAP8 SWAP7 PUSH2 0x7C3 SWAP5 LT PUSH2 0x7D9 JUMPI JUMPDEST POP POP PUSH2 0x22B7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE LOG1 STOP JUMPDEST PUSH2 0x7E3 SWAP2 DUP4 PUSH2 0x21B6 JUMP JUMPDEST DUP10 DUP5 PUSH2 0x7BC JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 SWAP4 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 RETURNDATASIZE DUP4 GT PUSH2 0x841 JUMPI JUMPDEST PUSH2 0x807 DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP5 SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A PUSH2 0x785 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x7FD JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0x6A0 JUMP JUMPDEST DUP1 SWAP3 POP DUP4 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x8BC JUMPI JUMPDEST PUSH2 0x8A4 DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0x8B6 DUP6 SWAP2 PUSH2 0x1BCC JUMP JUMPDEST DUP8 PUSH2 0x695 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x89A JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x8DC PUSH2 0x1A9F JUMP JUMPDEST POP PUSH2 0x8E5 PUSH2 0x1AC2 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x185 JUMPI PUSH2 0x907 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST PUSH1 0x84 SWAP3 SWAP2 SWAP3 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x185 JUMPI PUSH2 0x9D9 SWAP3 PUSH2 0x929 PUSH2 0x930 SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST POP POP PUSH2 0x1CCB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0xB74 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xBB8 PUSH2 0x20CB JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xC46 PUSH2 0xC41 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0x23AA JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x20 SWAP2 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x9D9 PUSH2 0x930 PUSH2 0xC79 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0xC81 PUSH2 0x1C73 JUMP JUMPDEST POP PUSH2 0x1EBD JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xCA0 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0xCA8 PUSH2 0x1AC2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 PUSH1 0x20 SWAP3 SWAP2 DUP4 DUP2 PUSH1 0x4 DUP2 PUSH32 0x0 DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0xDC2 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0xDB5 JUMPI JUMPDEST PUSH2 0x5D6 JUMPI DUP3 PUSH1 0x24 SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP4 PUSH2 0xD83 JUMPI JUMPDEST POP PUSH2 0xD81 SWAP4 POP PUSH2 0x1D09 JUMP JUMPDEST STOP JUMPDEST SWAP1 SWAP3 POP DUP4 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xDAE JUMPI JUMPDEST PUSH2 0xD9A DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0xD81 SWAP3 MLOAD SWAP2 DUP5 PUSH2 0xD76 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xD90 JUMP JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0xD2C JUMP JUMPDEST DUP1 SWAP3 POP DUP6 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xDF3 JUMPI JUMPDEST PUSH2 0xDDB DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0xDED DUP6 SWAP2 PUSH2 0x1BCC JUMP JUMPDEST DUP7 PUSH2 0xD21 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xDD1 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0xE13 PUSH2 0x1A9F JUMP JUMPDEST PUSH2 0xE1B PUSH2 0x1AC2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0xF02 JUMPI JUMPDEST POP AND CALLER EQ ISZERO SWAP1 DUP2 PUSH2 0xEF4 JUMPI JUMPDEST POP PUSH2 0x5D6 JUMPI PUSH2 0xEAA DUP3 PUSH2 0x23AA JUMP JUMPDEST SWAP2 SWAP1 SWAP3 PUSH1 0x4 DUP5 LT ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x3 DUP5 SUB PUSH2 0xEC8 JUMPI PUSH2 0xD81 SWAP4 POP PUSH2 0x1D09 JUMP JUMPDEST DUP4 PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH0 SLOAD AND CALLER EQ ISZERO DUP4 PUSH2 0xE9C JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF36 JUMPI JUMPDEST DUP2 PUSH2 0xF1E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI PUSH2 0xF30 DUP3 SWAP2 PUSH2 0x1BCC JUMP JUMPDEST DUP6 PUSH2 0xE90 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF11 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH1 0x2 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x1074 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x1047 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x1009 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xFAE JUMPI JUMPDEST POP PUSH2 0xF9A SWAP3 POP SUB DUP4 PUSH2 0x1B68 JUMP JUMPDEST PUSH2 0x9D9 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x2 PUSH0 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0xFF1 JUMPI POP POP PUSH2 0xF9A SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0xF8D JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0xFDA JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0xF9A SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0xF8D SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0xF69 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT PUSH2 0x185 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x185 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x110C DUP4 PUSH2 0x1B8B JUMP JUMPDEST SWAP3 PUSH2 0x111A PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1B68 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP2 CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0x185 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH1 0x20 SWAP4 ADD DUP6 CALLDATACOPY DUP6 ADD ADD MSTORE DUP3 MLOAD DUP4 ADD SWAP2 PUSH1 0x20 DUP4 ADD SWAP4 DUP1 DUP5 SUB PUSH2 0x1A0 SWAP1 DUP2 DUP2 SLT PUSH2 0x185 JUMPI PUSH2 0x180 DUP1 SWAP2 SLT PUSH2 0x185 JUMPI PUSH2 0x1174 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x116F DUP8 PUSH2 0x1B13 JUMP JUMPDEST PUSH2 0x1BCC JUMP JUMPDEST DUP6 MSTORE PUSH2 0x1182 PUSH1 0x40 DUP5 ADD PUSH2 0x1BCC JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x1193 PUSH1 0x60 DUP5 ADD PUSH2 0x1BCC JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x185 JUMPI PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP5 ADD MLOAD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x120 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH2 0x140 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x185 JUMPI DUP8 ADD MSTORE PUSH2 0x160 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x185 JUMPI ADD SWAP4 PUSH1 0x60 DUP6 DUP6 SUB SLT PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH2 0x1232 DUP7 PUSH2 0x1B30 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x185 JUMPI DUP2 ADD DUP3 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x185 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x523 JUMPI DUP2 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP3 PUSH2 0x126D PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1B68 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD SWAP2 DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x185 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1668 JUMPI POP POP POP DUP7 MSTORE PUSH1 0x40 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x185 JUMPI PUSH1 0x60 SWAP1 DUP3 ADD DUP1 SWAP7 SUB SLT PUSH2 0x185 JUMPI PUSH1 0x40 MLOAD PUSH2 0x12B7 DUP2 PUSH2 0x1B30 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP2 AND DUP2 SUB PUSH2 0x185 JUMPI DUP3 MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD DUP6 DUP2 GT PUSH2 0x185 JUMPI PUSH1 0x20 DUP6 SWAP2 PUSH2 0x1303 SWAP4 ADD ADD PUSH2 0x1BED JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP3 DUP4 GT PUSH2 0x185 JUMPI PUSH2 0x1326 SWAP3 ADD PUSH1 0x20 ADD PUSH2 0x1BED JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF698DA2500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP3 PUSH2 0x1632 JUMPI JUMPDEST POP SWAP1 PUSH2 0x144E PUSH2 0x1440 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x1B68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 PUSH1 0x20 DUP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP2 MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP6 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0xC0 DUP6 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1619 JUMPI DUP6 PUSH1 0x20 PUSH2 0x154B DUP12 DUP12 DUP12 PUSH2 0x14EB DUP7 PUSH2 0x14DD DUP14 DUP14 PUSH1 0x40 PUSH2 0x14CB DUP12 DUP5 ADD MLOAD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 SWAP4 DUP5 DUP9 DUP4 SUB ADD PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x1C33 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1BA7 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP9 MSTORE DUP8 PUSH2 0x1B68 JUMP JUMPDEST PUSH2 0x155D PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP5 PUSH32 0x53F00B1400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE ADDRESS PUSH1 0x4 DUP8 ADD MSTORE CALLER PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0x44 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD MSTORE PUSH0 PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0xE0 PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xE4 DUP6 ADD SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0xC4 DUP6 ADD MSTORE PUSH2 0x1BA7 JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP1 PUSH2 0x15BD JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1611 JUMPI JUMPDEST DUP2 PUSH2 0x15D7 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x185 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1590 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x15CA JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP10 SWAP6 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1477 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1660 JUMPI JUMPDEST DUP2 PUSH2 0x164D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI SWAP1 MLOAD SWAP1 PUSH2 0x144E PUSH2 0x138B JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1640 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1286 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH2 0x260 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x1692 PUSH2 0x1A9F JUMP JUMPDEST POP PUSH2 0x169B PUSH2 0x1AC2 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x185 JUMPI PUSH2 0x16BD SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x185 JUMPI PUSH2 0x16D7 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1AE5 JUMP JUMPDEST POP POP PUSH2 0x180 SWAP3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH2 0x170F SWAP2 PUSH2 0x1CCB JUMP JUMPDEST SWAP2 PUSH2 0x164 CALLDATALOAD SWAP3 DUP4 PUSH1 0x80 DUP3 ADD DUP1 MLOAD DUP3 GT PUSH2 0x1948 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH2 0x17E5 DUP2 PUSH2 0x17D7 PUSH1 0x20 DUP3 ADD SWAP5 DUP6 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1B68 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 PUSH1 0xE4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI DUP8 MSTORE PUSH2 0x104 CALLDATALOAD DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x124 CALLDATALOAD SWAP1 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x184 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1A4 SWAP3 DUP4 CALLDATALOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x1C4 SWAP1 DUP2 CALLDATALOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x1E4 SWAP7 DUP8 CALLDATALOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x204 SWAP5 DUP6 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x224 CALLDATALOAD PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x244 CALLDATALOAD DUP2 DUP7 ADD MSTORE DUP5 MSTORE PUSH2 0x1A0 DUP5 ADD SWAP7 DUP8 GT DUP5 DUP9 LT OR PUSH2 0x523 JUMPI DUP7 PUSH1 0x40 MSTORE DUP4 MLOAD SWAP1 KECCAK256 SUB PUSH2 0x18CD JUMPI STOP JUMPDEST PUSH1 0x84 SWAP6 PUSH1 0x2F PUSH32 0x566572696679206F7264657220646F6573206E6F74206D617463682077697468 SWAP3 PUSH1 0x20 PUSH32 0x206578697374696E67206F726465720000000000000000000000000000000000 SWAP8 PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP7 ADD MSTORE DUP5 ADD MSTORE DUP3 ADD MSTORE ADD MSTORE REVERT JUMPDEST MSTORE DUP4 DUP6 PUSH2 0x1723 JUMP JUMPDEST CALLVALUE PUSH2 0x185 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x185 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x185 JUMPI PUSH32 0x62AF8DC200000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x1A77 JUMPI DUP2 PUSH32 0x14A2A78400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x1A4D JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1A23 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x19F9 JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x19F2 JUMP JUMPDEST PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x19EB JUMP JUMPDEST PUSH32 0xB8296FC400000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x19E4 JUMP JUMPDEST PUSH32 0x3279856600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x185 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x185 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x185 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x185 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x185 JUMPI JUMP JUMPDEST PUSH2 0x180 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x523 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x523 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x185 JUMPI JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x185 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1C04 DUP3 PUSH2 0x1B8B JUMP JUMPDEST SWAP3 PUSH2 0x1C12 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1B68 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x185 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x60 PUSH1 0x40 PUSH2 0x1C70 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP6 ADD MSTORE ADD MLOAD SWAP2 DUP2 PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1C80 DUP3 PUSH2 0x1B13 JUMP JUMPDEST PUSH0 PUSH2 0x160 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE DUP3 PUSH2 0x140 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 PUSH2 0x1CD8 PUSH2 0x1C73 JUMP JUMPDEST POP DUP2 ADD SUB SLT PUSH2 0x185 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x185 JUMPI PUSH2 0x1C70 SWAP1 PUSH2 0x1EBD JUMP JUMPDEST PUSH1 0x60 SWAP2 PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP4 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 PUSH1 0x20 DUP1 DUP5 ADD SWAP4 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP7 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP4 PUSH0 DUP9 PUSH32 0x0 AND SWAP3 DUP4 PUSH1 0x24 DUP7 ADD MSTORE DUP2 PUSH1 0x44 DUP7 ADD MSTORE PUSH1 0x44 DUP6 MSTORE PUSH2 0x1DB4 DUP6 PUSH2 0x1B4C JUMP JUMPDEST DUP5 MLOAD SWAP1 DUP3 DUP14 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x1E9F JUMPI JUMPDEST POP POP ISZERO PUSH2 0x1E64 JUMPI JUMPDEST POP POP POP DUP6 DUP5 AND PUSH0 DUP2 DUP2 MSTORE PUSH1 0x3 DUP1 DUP5 MSTORE DUP8 DUP3 KECCAK256 DUP3 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP4 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP4 SWAP1 SSTORE ADD SSTORE DUP6 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 SWAP7 PUSH2 0x1E54 SWAP2 SWAP1 PUSH2 0x1E4F DUP3 PUSH1 0x64 DUP2 ADD PUSH2 0x1440 JUMP JUMPDEST PUSH2 0x257D JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 MSTORE DUP6 ADD MSTORE AND SWAP1 DUP3 ADD MSTORE LOG1 JUMP JUMPDEST PUSH2 0x1E97 SWAP3 PUSH2 0x1E91 SWAP2 DUP10 MLOAD SWAP2 DUP7 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x1E8B DUP2 PUSH2 0x1B4C JUMP JUMPDEST DUP10 PUSH2 0x257D JUMP JUMPDEST DUP8 PUSH2 0x257D JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x1DCC JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x1EB5 JUMPI POP DUP7 DUP10 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x1DC4 JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x1EAE JUMP JUMPDEST PUSH2 0x1EC5 PUSH2 0x1C73 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH1 0x3 DUP3 MLOAD SWAP3 PUSH2 0x1EFC DUP5 PUSH2 0x1B4C JUMP JUMPDEST DUP5 DUP4 SLOAD AND DUP5 MSTORE DUP5 PUSH1 0x1 DUP5 ADD SLOAD AND SWAP5 DUP7 DUP6 ADD SWAP6 DUP7 MSTORE PUSH1 0x2 DUP5 ADD SLOAD SWAP4 DUP3 DUP7 ADD SWAP5 DUP6 MSTORE PUSH4 0xFFFFFFFF SWAP4 DUP5 SWAP2 ADD SLOAD AND SWAP5 PUSH1 0x60 DUP2 ADD SWAP6 DUP1 DUP8 MSTORE ISZERO PUSH2 0x206E JUMPI DUP2 SWAP1 MLOAD AND SWAP6 MLOAD AND SWAP2 DUP2 MLOAD SWAP4 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS PUSH1 0x4 DUP7 ADD MSTORE DUP8 DUP6 PUSH1 0x24 DUP2 DUP13 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x2064 JUMPI PUSH0 SWAP6 PUSH2 0x2035 JUMPI JUMPDEST POP MLOAD SWAP5 MLOAD AND SWAP5 PUSH32 0x0 SWAP7 DUP3 MLOAD SWAP9 PUSH2 0x1FB3 DUP11 PUSH2 0x1B13 JUMP JUMPDEST DUP10 MSTORE DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH32 0x0 PUSH1 0xC0 DUP4 ADD MSTORE PUSH0 PUSH1 0xE0 DUP4 ADD MSTORE PUSH32 0x0 PUSH2 0x100 DUP4 ADD MSTORE PUSH1 0x1 PUSH2 0x120 DUP4 ADD MSTORE DUP1 PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x205D JUMPI JUMPDEST PUSH2 0x204D DUP2 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x1F7F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2043 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP9 DUP5 MLOAD SWAP1 PUSH32 0xC8FC272500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7264657220646F6573206E6F74206578697374000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0xB74 JUMPI JUMP JUMPDEST ISZERO PUSH2 0x20F2 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D696E20616D6F756E74206F7574206973207A65726F00000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST TIMESTAMP GT PUSH2 0x2158 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446561646C696E6520697320696E207468652070617374000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 PUSH0 DUP2 DUP6 ADD PUSH2 0x2219 DUP7 PUSH2 0x14DD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP10 DUP11 DUP6 MSTORE DUP8 PUSH1 0x24 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST DUP6 MLOAD SWAP1 DUP3 DUP7 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x2285 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x2237 JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x227C SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1E4F SWAP3 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x2276 DUP2 PUSH2 0x1B4C JUMP JUMPDEST DUP3 PUSH2 0x257D JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 PUSH2 0x2231 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x22AF JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x2229 JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x22A8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP2 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE DUP2 DUP2 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP1 DUP6 LT DUP4 DUP7 GT OR PUSH2 0x523 JUMPI DUP5 DUP5 MSTORE PUSH2 0x2325 DUP6 PUSH2 0x1B30 JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD MSTORE DUP1 EXTCODESIZE ISZERO PUSH2 0x185 JUMPI PUSH2 0x237D PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x6BFAE1CA00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x1C33 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x23A0 JUMPI PUSH2 0x2397 JUMPI POP POP POP JUMP JUMPDEST DUP3 GT PUSH2 0x523 JUMPI MSTORE JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND DUP1 ISZERO PUSH2 0x2475 JUMPI PUSH1 0x20 PUSH1 0x24 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP4 PUSH2 0x2441 JUMPI JUMPDEST POP DUP3 PUSH2 0x242F JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x243B JUMPI PUSH1 0x1 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x246D JUMPI JUMPDEST DUP2 PUSH2 0x245D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x2422 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2450 JUMP JUMPDEST POP PUSH0 SWAP2 POP DUP2 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 SWAP2 SWAP3 AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND SWAP1 DUP2 ISZERO PUSH2 0x2573 JUMPI PUSH1 0x20 PUSH1 0x24 SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x848 JUMPI PUSH0 SWAP5 PUSH2 0x253F JUMPI JUMPDEST POP DUP1 DUP5 SUB SWAP4 DUP1 DUP6 GT PUSH2 0x2512 JUMPI SUB PUSH2 0x242F JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP4 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x256B JUMPI JUMPDEST DUP2 PUSH2 0x255B PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1B68 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x185 JUMPI MLOAD SWAP3 PUSH0 PUSH2 0x24FA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x254E JUMP JUMPDEST POP POP SWAP1 POP PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 PUSH1 0x20 SWAP2 DUP3 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL ISZERO PUSH2 0x848 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x25FB JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x25B9 JUMPI POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x25B2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBB PUSH25 0x8BE1190A2F5816CAA3342D23EB0FCB57BF52424D3D75A53808 0xFC 0xC8 0xE3 SUB 0xF8 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1814:11638:75:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:75;;;;;;;:::i;:::-;1500:62:48;;:::i;:::-;1814:11638:75;;;;;;;1738:24:49;1814:11638:75;;;1738:24:49;1814:11638:75;;;;1777:43:49;1814:11638:75;1777:43:49;;1814:11638:75;;;;;;;;;;-1:-1:-1;;1814:11638:75;;;;;;;1311:13:49;1814:11638:75;;;;;;;;;;;;;-1:-1:-1;;1814:11638:75;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;799:18:77;;;1814:11638:75;777:10:77;:41;773:97;;551:66:41;2806:53:42;;;1316:93:41;;1814:11638:75;3051:52:42;;1814:11638:75;;;;6365:23;;;1814:11638;;;;;6411:65;;;1814:11638;;6411:65;;1814:11638;;;;;;;;;;;;;;;;6411:65;6361:239;6497:19;;6493:107;;6629:23;;;:::i;:::-;6678:8;;;:::i;:::-;1814:11638;;;;1745:53:59;;;777:10:77;1814:11638:75;1745:53:59;;1814:11638:75;6776:4;1814:11638;;;;;;;;;;1745:53:59;;1814:11638:75;;;;;;;;;;;;;1745:53:59;1814:11638:75;;;1745:53:59;;:::i;:::-;6844:51:75;;;;:::i;:::-;1814:11638;;;;;;;;6909:33;;;:65;;;6361:239;6905:310;;7241:8;;;1814:11638;7241:8;;7540:98;7241:8;;7297:14;7241:8;;;1814:11638;7241:8;;:::i;:::-;7283:12;7297:14;;:::i;:::-;1814:11638;7323:7;1814:11638;;;;;:::i;:::-;;;;;7343:181;;1814:11638;;;;7343:181;;1814:11638;;;;7343:181;;;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7540:98;;3051:52:42;1814:11638:75;6905:310;7172:32;1814:11638;7172:32;1814:11638;;;;;;7172:32;1814:11638;;;;;;;;;;6909:65;1814:11638;;;6956:18;6946:28;;;6909:65;;1814:11638;;;;;;;;;;6493:107;1814:11638;;;6539:50;;;1814:11638;;6539:50;;1814:11638;;;;;;;;;;;6539:50;1316:93:41;1368:30;1814:11638:75;1368:30:41;1814:11638:75;;1368:30:41;773:97:77;841:18;1814:11638:75;841:18:77;1814:11638:75;;841:18:77;1814:11638:75;;;;;-1:-1:-1;;1814:11638:75;;;;;;;:::i;:::-;;;;;;;;;;956:36:77;;1814:11638:75;956:18:77;;;1814:11638:75;956:18:77;;;1814:11638:75;956:36:77;;;;;;;;1814:11638:75;956:36:77;;;1814:11638:75;;;942:10:77;:50;;:75;;;1814:11638:75;938:131:77;;11575:37:75;;;:::i;:::-;1814:11638;;;;;;;;3825:18;3815:28;;3811:98;;3938:12;;;;:::i;:::-;3976:8;;;:::i;:::-;1814:11638;;;;;;;3825:18;1814:11638;;3825:18;1814:11638;;;3996:29;;;;1814:11638;4050:25;1814:11638;;;;;;;;;;4205:12;1814:11638;;;4172:46;1814:11638;4172:46;;4198:4;1814:11638;4172:46;;1814:11638;;;;;;;4172:46;;1814:11638;4172:46;;;;;;;;;1814:11638;4172:46;;;1814:11638;4172:55;4346:53;4172:55;;;;;1814:11638;4172:55;;;;4322:7;4172:55;;4168:128;;1814:11638;4322:7;;;:::i;:::-;1814:11638;;;;;;;;;;;;;;;;4346:53;1814:11638;4168:128;4278:6;;;;:::i;:::-;4168:128;;;;4172:46;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1814:11638;;;;;4172:46;;;;;;1814:11638;;4172:46;;1814:11638;4346:53;4172:46;;;;;;;;1814:11638;;;;;;;;;3811:98;3866:32;1814:11638;3866:32;1814:11638;;;;3866:32;942:75:77;1814:11638:75;;;;;942:10:77;996:21;;942:75;;956:36;;;;;;;;;;;;;;;;;;:::i;:::-;;;1814:11638:75;;;;;;;;:::i;:::-;956:36:77;;;;;;;;1814:11638:75;;;;;-1:-1:-1;;1814:11638:75;;;;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;1814:11638:75;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:75;;;;;;;;;2357:37;1814:11638;;;;;;;;;-1:-1:-1;;1814:11638:75;;;;;;;;;2306:45;1814:11638;;;;;;;;;-1:-1:-1;;1814:11638:75;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:75;;;;;;;;2400:32;1814:11638;;;;;;;;-1:-1:-1;;1814:11638:75;;;;;1311:13:49;1814:11638:75;;735:10:63;1814:11638:75;;;2339:24:49;2335:96;;1814:11638:75;;;;1311:13:49;1814:11638:75;;;735:10:63;;1814:11638:75;;;;;;735:10:63;1814:11638:75;;3052:40:48;1814:11638:75;3052:40:48;;1814:11638:75;2335:96:49;2386:34;1814:11638:75;2386:34:49;735:10:63;1814:11638:75;;;;2386:34:49;1814:11638:75;;;;;-1:-1:-1;;1814:11638:75;;;;;1500:62:48;;:::i;:::-;1814:11638:75;;;;2093:20:49;1814:11638:75;;2093:20:49;1814:11638:75;;;;;;;;;3052:40:48;;;;1814:11638:75;;;;;;-1:-1:-1;;1814:11638:75;;;;;11575:37;1814:11638;;:::i;:::-;11575:37;:::i;:::-;1814:11638;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:75;;;;;;3348:18;1814:11638;;:::i;:::-;;;:::i;:::-;;3348:18;:::i;1814:11638::-;;;;;-1:-1:-1;;1814:11638:75;;;;;;;:::i;:::-;;;:::i;:::-;;;;956:36:77;;1814:11638:75;;;;;;;;;956:18:77;1814:11638:75;;956:36:77;;;;;;;;1814:11638:75;956:36:77;;;1814:11638:75;;;942:10:77;:50;;:75;;;1814:11638:75;938:131:77;;1814:11638:75;;;;;4969:32;;;;1814:11638;4969:32;;4995:4;1814:11638;4969:32;;1814:11638;;;4969:32;;;;;;;1814:11638;4969:32;;;1814:11638;4969:32;;;;;:::i;:::-;1814:11638;4969:32;;;;;;;;;;;;;;;;:::i;:::-;;;1814:11638;;;;4969:32;1814:11638;;4969:32;;;;;;;;;942:75:77;1814:11638:75;;;;;942:10:77;996:21;;942:75;;956:36;;;;;;;;;;;;;;;;;;:::i;:::-;;;1814:11638:75;;;;;;;;:::i;:::-;956:36:77;;;;;;;;1814:11638:75;;;;;-1:-1:-1;;1814:11638:75;;;;;;;:::i;:::-;;;:::i;:::-;;;;;956:36:77;;1814:11638:75;956:18:77;1814:11638:75;956:18:77;;;1814:11638:75;956:36:77;;;;;;;;1814:11638:75;956:36:77;;;1814:11638:75;;;942:10:77;:50;;:75;;;;1814:11638:75;938:131:77;;;11575:37:75;;;:::i;:::-;1814:11638;;;;;;;;;4646:18;4636:28;;4632:98;;4772:6;;;;:::i;4632:98::-;4687:32;;1814:11638;4687:32;1814:11638;;;;4687:32;942:75:77;1814:11638:75;;;;;942:10:77;996:21;;942:75;;;956:36;;;;1814:11638:75;956:36:77;;1814:11638:75;956:36:77;;;;;;1814:11638:75;956:36:77;;;:::i;:::-;;;1814:11638:75;;;;;;;;:::i;:::-;956:36:77;;;;;;-1:-1:-1;956:36:77;;1814:11638:75;;;;;-1:-1:-1;;1814:11638:75;;;;;;;;991:8:37;1814:11638:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;991:8:37;1814:11638:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:75;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:75;;-1:-1:-1;1814:11638:75;;-1:-1:-1;1814:11638:75;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:75;;;;;;;;;479:55:77;1814:11638:75;;;;;;;;;-1:-1:-1;;1814:11638:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9344:92;;;1814:11638;9344:92;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;9646:31;1814:11638;9646:31;;1814:11638;9512:13;1814:11638;9512:13;;;1814:11638;9646:31;;;;;;;1814:11638;9646:31;;;1814:11638;;;9723:17;;1814:11638;;;9723:17;;;1814:11638;9723:17;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9723:17;;-1:-1:-1;;9723:17:75;;;;;;:::i;:::-;1814:11638;;9758:19;;1814:11638;9758:19;;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9758:19;1814:11638;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;9758:19;-1:-1:-1;;9758:19:75;;;;;;:::i;:::-;1814:11638;;;9512:279;;;;;;;1814:11638;9512:279;;9572:4;1814:11638;9512:279;;1814:11638;9595:10;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;1814:11638:75;;;;;;;;;:::i;:::-;9512:279;:13;;1814:11638;9512:279;;;;;;1814:11638;9512:279;;;1814:11638;;;;;;;;;;;9512:279;;1814:11638;9512:279;;1814:11638;9512:279;;;;;;1814:11638;9512:279;;;:::i;:::-;;;1814:11638;;;;;;;;;;;;;9512:279;;;;;;-1:-1:-1;9512:279:75;;1814:11638;;;;;;;-1:-1:-1;1814:11638:75;;;;;;;;;;;;;9646:31;;;1814:11638;9646:31;;1814:11638;9646:31;;;;;;1814:11638;9646:31;;;:::i;:::-;;;1814:11638;;;;;;;9723:17;9646:31;;;;;-1:-1:-1;9646:31:75;;1814:11638;;;;;;;;;;;;;;;;;;-1:-1:-1;;1814:11638:75;;;;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;1814:11638:75;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;8546:65;;;:::i;:::-;1814:11638;8626:16;1814:11638;8645:20;;1814:11638;8645:20;;1814:11638;;8626:39;;8622:109;;1814:11638;;;;;8755:22;;;1814:11638;8755:22;;;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8755:22;;-1:-1:-1;;8755:22:75;;;;;;:::i;:::-;1814:11638;8745:33;;1814:11638;;;;8792:18;;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8792:18;;1814:11638;;;;;;;;;;;;;;;;;8782:29;;8745:66;8741:177;;1814:11638;8741:177;1814:11638;8834:73;1814:11638;;8834:73;1814:11638;;8834:73;;;;;;1814:11638;;;;;;;;;8834:73;8622:109;1814:11638;8622:109;;;;1814:11638;;;;;-1:-1:-1;;1814:11638:75;;;;;;;;;;;;;;;;;10011:50;;10007:123;;10159:53;10174:38;1814:11638;10159:53;;:131;;;;;1814:11638;10159:188;;;;1814:11638;10159:244;;;;1814:11638;;;;;;;10159:244;10378:25;10363:40;;;10159:244;;;:188;10321:26;10306:41;;;-1:-1:-1;10159:188:75;;:131;10243:47;10228:62;;;-1:-1:-1;10159:131:75;;10007:123;10084:35;1814:11638;10084:35;1814:11638;;10084:35;1814:11638;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;1814:11638:75;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;1814:11638:75;;;;:::o;:::-;;-1:-1:-1;;1814:11638:75;;;;;;;;;;;;;;;;;-1:-1:-1;1814:11638:75;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1814:11638:75;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;1814:11638:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7917:295::-;;;1814:11638;7917:295;1814:11638;;:::i;:::-;;8134:34;;1814:11638;;;;;;;;;;;;;8187:18;;;:::i;5015:284::-;1814:11638;5015:284;5252:40;5015:284;1814:11638;;;;5199:47:59;;;;;1814:11638:75;;5199:47:59;;;;1814:11638:75;5127:12;;5141:1;5127:12;;1814:11638;5199:47:59;;;;;1814:11638:75;;;;;;;5199:47:59;;;;;:::i;:::-;9770:199;;;;;;;5141:1:75;9770:199:59;;9985:80;;;5015:284:75;5261:45:59;;;5257:201;;5015:284:75;-1:-1:-1;;;1814:11638:75;;;5141:1;1814:11638;;;5160:7;1814:11638;;;;;;;;;;;;;;;;;;;;;;;;;;1328:43:59;;;;1814:11638:75;;;5199:47:59;1328:43;;1814:11638:75;;;;;;;;;1328:43:59;;1814:11638:75;1328:43:59;1814:11638:75;;;;1328:43:59;1814:11638:75;1328:43:59;;:::i;:::-;1814:11638:75;;;;;;;;;;;;;5252:40;5015:284::o;5257:201:59:-;5434:12;1814:11638:75;5349:43:59;1814:11638:75;;;5349:43:59;;;;;5199:47;5349:43;;1814:11638:75;5141:1;1814:11638;;;;;5349:43:59;;;;;:::i;:::-;;;:::i;:::-;5434:12;;:::i;:::-;5257:201;;;;;9985:80;9997:67;;-1:-1:-1;9997:15:59;;1814:11638:75;;;;10015:26:59;:30;;9997:67;9985:80;;;;9997:67;10063:1;10048:16;9997:67;;10629:828:75;1814:11638;;:::i;:::-;;;;;;;;-1:-1:-1;1814:11638:75;;;10745:7;1814:11638;;;;-1:-1:-1;1814:11638:75;10745:7;1814:11638;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10776:24;10772:99;;1814:11638;;;;;;;;;;11070:32;1814:11638;11070:32;;11096:4;11070:32;;;1814:11638;11070:32;;1814:11638;11070:32;;;;;;;;;-1:-1:-1;11070:32:75;;;10629:828;1814:11638;;;;;11374:13;;1814:11638;;;;;;;:::i;:::-;;;10900:550;;1814:11638;10900:550;;1814:11638;;10900:550;;1814:11638;;10900:550;;1814:11638;10900:550;;;1814:11638;11227:7;10900:550;;;1814:11638;-1:-1:-1;1814:11638:75;10900:550;;1814:11638;11288:9;10900:550;;;1814:11638;;10900:550;;;1814:11638;10900:550;;;;1814:11638;10900:550;;;1814:11638;10629:828;:::o;11070:32::-;;;;;;;;;;;;;;;;;:::i;:::-;;;1814:11638;;;;;11070:32;;;;;;;;;;1814:11638;;;-1:-1:-1;1814:11638:75;;;;;10772:99;1814:11638;;;;10823:37;;;;;;;1814:11638;;;;;;;;;;;10823:37;1796:162:48;1814:11638:75;1710:6:48;1814:11638:75;;735:10:63;1855:23:48;1851:101;;1796:162::o;12930:182:75:-;13007:17;13003:103;;12930:182::o;13003:103::-;1814:11638;;;13047:48;;;1814:11638;13047:48;;;1814:11638;;;;;;;;;;;13047:48;12740:184;12809:15;:26;12805:113;;12740:184::o;12805:113::-;1814:11638;;;12858:49;;;1814:11638;12858:49;;;1814:11638;;;;;;;;;;;12858:49;5084:380:59;1814:11638:75;;5199:47:59;;-1:-1:-1;5199:47:59;;;;1814:11638:75;5199:47:59;1814:11638:75;5199:47:59;;;;;;;;1814:11638:75;;;;;;;;;;;;;;;;;5199:47:59;9770:199;;;;;;;-1:-1:-1;9770:199:59;;9985:80;;;5084:380;5261:45;;;5257:201;;5084:380;;;;;:::o;5257:201::-;5434:12;1814:11638:75;;5349:43:59;1814:11638:75;;;5349:43:59;5199:47;5349:43;;;1814:11638:75;5199:47:59;5349:43;;1814:11638:75;-1:-1:-1;1814:11638:75;;;;;5349:43:59;;;;;:::i;:::-;;;:::i;5434:12::-;5257:201;;;;;;9985:80;9997:67;;-1:-1:-1;9997:15:59;;1814:11638:75;;;;10015:26:59;:30;;9997:67;9985:80;;;;9997:67;10063:1;10048:16;9997:67;;13118:332:75;1814:11638;13177:13;;1814:11638;;;;;;;;13381:19;;;1814:11638;13381:19;;;1814:11638;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13311:4;1814:11638;;13349:1;13211:204;;;1814:11638;13211:204;;;1814:11638;13177:266;;;;;1814:11638;13349:1;1814:11638;;;;;;13177:266;;;;;;1814:11638;13177:266;;;;;;1814:11638;;;;;;:::i;:::-;13429:4;1814:11638;;;;13177:266;;;;;;;;;;13118:332;;;:::o;13177:266::-;1814:11638;;;;;13118:332::o;13177:266::-;1814:11638;;;13349:1;1814:11638;;;;;11625:1109;1814:11638;;;;;;11806:7;1814:11638;;;11806:7;1814:11638;;;11852:19;1814:11638;;11886:13;;11882:147;;1814:11638;;;;;12148:32;;;;1814:11638;12148:32;;12174:4;12148:32;;;1814:11638;12148:32;;;;;;;1814:11638;12148:32;;;11625:1109;-1:-1:-1;12209:12:75;1814:11638;;12397:36;12405:18;12397:36;;:::o;12205:427::-;12454:15;:26;12450:182;;12699:18;12691:36;11625:1109;:::o;12450:182::-;11806:7;12585:36;;:::o;12148:32::-;;;;1814:11638;12148:32;;1814:11638;12148:32;;;;;;1814:11638;12148:32;;;:::i;:::-;;;1814:11638;;;;;12148:32;;;;;;;-1:-1:-1;12148:32:75;;11882:147;-1:-1:-1;1814:11638:75;;-1:-1:-1;1814:11638:75;;11983:35::o;11625:1109::-;1814:11638;11625:1109;;;;1814:11638;;;;;11806:7;1814:11638;;;11806:7;1814:11638;;;11852:19;1814:11638;;11886:13;;;11882:147;;1814:11638;;;;;12148:32;;;;1814:11638;12148:32;;12174:4;12148:32;;;1814:11638;12148:32;;;;;;;1814:11638;12148:32;;;11625:1109;1814:11638;;;;;;;;;;12209:12;1814:11638;;12397:36;12405:18;12397:36;;:::o;1814:11638::-;;;;;12148:32;1814:11638;;;;12148:32;;;;1814:11638;12148:32;;1814:11638;12148:32;;;;;;1814:11638;12148:32;;;:::i;:::-;;;1814:11638;;;;;12148:32;;;;;;;-1:-1:-1;12148:32:75;;11882:147;11983:35;;;;1814:11638;11983:35;1814:11638;11983:35;:::o;8370:720:59:-;;-1:-1:-1;8507:421:59;8370:720;8507:421;;;;;;;;;;;;-1:-1:-1;8507:421:59;;8942:15;;1814:11638:75;;;;8960:26:59;:31;8942:68;8938:146;;8370:720;:::o;8938:146::-;1814:11638:75;9033:40:59;;-1:-1:-1;9033:40:59;1814:11638:75;9033:40:59;1814:11638:75;;-1:-1:-1;9033:40:59;8942:68;9009:1;8994:16;;8942:68;"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","appData()":"8aebd348","burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","cancelOrder(address,address)":"60e092c6","composableCow()":"93504c52","emergencyCancelOrder(address,address)":"68bce712","getOrder(address)":"6eba2b13","getOrderStatus(address)":"6f9d75cd","getTradeableOrder(address,address,bytes32,bytes,bytes)":"b8296fc4","isValidSignature(bytes32,bytes)":"1626ba7e","owner()":"8da5cb5b","pendingOwner()":"e30c3978","protocolFeeSweeper()":"178ac96e","renounceOwnership()":"715018a6","retryOrder(address,uint256,uint256)":"d83b06a4","supportsInterface(bytes4)":"01ffc9a7","transferOwnership(address)":"f2fde38b","vaultRelayer()":"9b552cc2","verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))":"14a2a784","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"_protocolFeeSweeper\",\"type\":\"address\"},{\"internalType\":\"contract IComposableCow\",\"name\":\"_composableCow\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_cowVaultRelayer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_appData\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_version\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InterfaceIsSignatureVerifierMuxer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"InvalidOrderParameters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeSweeper\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"actualStatus\",\"type\":\"uint8\"}],\"name\":\"OrderHasUnexpectedStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"OrderNotValid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollNever\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtEpoch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryNextBlock\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"ConditionalOrderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"OrderCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"OrderRetried\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"appData\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"cancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"composableCow\",\"outputs\":[{\"internalType\":\"contract IComposableCow\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"emergencyCancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrderStatus\",\"outputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"getTradeableOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFeeSweeper\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"retryOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultRelayer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"_order\",\"type\":\"tuple\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function. Only one order per token is allowed at a time.\",\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"InvalidOrderParameters(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"OrderHasUnexpectedStatus(uint8)\":[{\"details\":\"`revertOrder` should only be called when the OrderStatus is `Failed`.\",\"params\":{\"actualStatus\":\"The status of the order when `revertOrder` was called\"}}],\"OrderNotValid(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PollNever(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be deleted\"}}],\"PollTryAtBlock(uint256,string)\":[{\"params\":{\"blockNumber\":\"The block number when polling should resume\",\"reason\":\"Text description of the reason it should be retried\"}}],\"PollTryAtEpoch(uint256,string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\",\"timestamp\":\"The unix timestamp when polling should resume\"}}],\"PollTryNextBlock(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\"}}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"ConditionalOrderCreated(address,(address,bytes32,bytes))\":{\"details\":\"Emitted when a new conditional order is created.\",\"params\":{\"owner\":\"The address that created the conditional order\",\"params\":\"The conditional order data\"}},\"OrderCanceled(address,uint256,address)\":{\"params\":{\"exactAmountIn\":\"The number of tokens in the order\",\"receiver\":\"The account that received the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"OrderRetried(address,uint256,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the new order to be filled\",\"exactAmountIn\":\"The number of tokens in the order\",\"minAmountOut\":\"The minimum number of target tokens required\",\"tokenIn\":\"The token used to identify the order\"}},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}},\"cancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"emergencyCancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"getOrder(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"_0\":\"The order data for the given token\"}},\"getOrderStatus(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"status\":\"The status of the order for the given token\"}},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"details\":\"**MUST** revert if the order conditions are not met.\",\"params\":{\"ctx\":\"The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\",\"offchainInput\":\"Off-chain input (similar to Balancer `userData`); currently unused\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` of the parent `isValidSignature` call\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"},\"returns\":{\"_0\":\"order Tradeable order for submission to the CoW Protocol API\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"Should return whether the signature provided is valid for the provided data\",\"params\":{\"hash\":\"Hash of the data to be signed\",\"signature\":\"Signature byte array associated with `hash`\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"retryOrder(address,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the order to be filled.\",\"minAmountOut\":\"The minimum number of target tokens to receive (tokenOut)\",\"tokenIn\":\"The token used to identify the order\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"details\":\"Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe. **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over the order verification logic, and to allow a watchtower / user to propose a discrete order without it being generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\",\"params\":{\"_hash\":\"`EIP712` order digest\",\"ctx\":\"See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\",\"domainSeparator\":\"`EIP712` domain separator\",\"offchainInput\":\"Type-specific data NOT known at time of creation for a specific discrete order (or zero)\",\"order\":\"The proposed discrete order's `GPv2Order` data struct\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` calling `isValidSignature`\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"title\":\"CowSwapFeeBurner\",\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"InterfaceIsSignatureVerifierMuxer()\":[{\"notice\":\"Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\"}],\"InvalidOrderParameters(string)\":[{\"notice\":\"The order parameters were invalid.\"}],\"InvalidProtocolFeeSweeper()\":[{\"notice\":\"The fee protocol is invalid.\"}],\"OrderHasUnexpectedStatus(uint8)\":[{\"notice\":\"Attempt to revert an order that had not failed.\"}],\"OrderNotValid(string)\":[{\"notice\":\"This error is returned by the `getTradeableOrder` function if the order conditions are not met.\"}],\"PollNever(string)\":[{\"notice\":\"The conditional order should not be polled again (i.e., deleted).\"}],\"PollTryAtBlock(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific block number.\"}],\"PollTryAtEpoch(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific epoch (unix timestamp).\"}],\"PollTryNextBlock(string)\":[{\"notice\":\"Polling should be retried at the next block.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"OrderCanceled(address,uint256,address)\":{\"notice\":\"An order was canceled after failure.\"},\"OrderRetried(address,uint256,uint256,uint256)\":{\"notice\":\"An order was retried after failing.\"},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"},\"cancelOrder(address,address)\":{\"notice\":\"Return tokens from an order that has failed.\"},\"emergencyCancelOrder(address,address)\":{\"notice\":\"Emergency return tokens from an order regardless of status.\"},\"getOrder(address)\":{\"notice\":\"Get the order at the sell token.\"},\"getOrderStatus(address)\":{\"notice\":\"Get the status of the order at the sell token.\"},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"notice\":\"Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\"},\"retryOrder(address,uint256,uint256)\":{\"notice\":\"Retry an order that has not been filled yet and expired.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"notice\":\"Verify that a given discrete order is valid.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"A contract that burns protocol fees using CowSwap.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/CowSwapFeeBurner.sol\":\"CowSwapFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\":{\"keccak256\":\"0xc82721c94d5e741f168aed4c94dc6a9006cb3348bee7398a5e3fa9b7e28557bd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://784c16c17fb89736ec5be650668d81a548acec3ccc2073e2be0f79029f84f512\",\"dweb:/ipfs/QmSk9seqC2YEJqy5pPdXKjmhEKoQhXQdQXCN4f9R8jcXKX\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":{\"keccak256\":\"0x7b8f0149ba41d28c3d0cd956911816b083f7ccec35ddc7bb7fdb829c3c11d9b2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2d39a71115b9018711726b6c7498038e6d3a41338fa635c88cc8025b4e0e5f34\",\"dweb:/ipfs/QmYqnnkXCd1yjs6kpQgxNUotpudgN37X5FTFNFyKE62PMj\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\":{\"keccak256\":\"0xc3717c516d816bd012f47a18bfd69f7887ce262435c10be9748beb4b11aee033\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://237a9295364524846f26c1b92b523e6039b414d3b691f77ba55c6deefa4b14bc\",\"dweb:/ipfs/QmXYg1paW7kDeXCFkiunzSWSWT3DD2p15CHnJZzDyEQ6Jo\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x66c7ec42c6c43712be2107a50ab4529379bc76a632b425babec698d9da921ac6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dce2778f0b638adfc5ba29c2c618c855fe725fa74a16846386aa1d56a834aa04\",\"dweb:/ipfs/QmPV9oWnzQdi58od266j62xvviavLNHqKLZfm6k2K1qy9E\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/CowSwapFeeBurner.sol\":{\"keccak256\":\"0xa37c5fd04da51fc47ce8bfe6c4a0b6c0b7687af60849420f11de03f62c2a9fa3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d35b60d3e201e591583d43a5133e0c7cc8984a64be325d66c09d02939b75149c\",\"dweb:/ipfs/Qmd298snw1uayUE9LsjPiwcvKcPsKto1v4zKePKXV5Q7fb\"]},\"contracts/FeeBurnerAuthentication.sol\":{\"keccak256\":\"0x4861db67bf113a4775c165241802df34a6c0e9fefaec82e8aaf969b5879759f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f522b3af683e09e1b67ed515be9972e7cf9514a584e264c4ca9656cc12c2f06\",\"dweb:/ipfs/QmNYqMsvWcNqACozLm3cYeR4oC3KKfKNBDSqR3vcpjv3zo\"]}},\"version\":1}"}},"contracts/ERC4626CowSwapFeeBurner.sol":{"ERC4626CowSwapFeeBurner":{"abi":[{"inputs":[{"internalType":"contract IProtocolFeeSweeper","name":"_protocolFeeSweeper","type":"address"},{"internalType":"contract IComposableCow","name":"_composableCow","type":"address"},{"internalType":"address","name":"_cowVaultRelayer","type":"address"},{"internalType":"bytes32","name":"_appData","type":"bytes32"},{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"string","name":"_version","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"AmountOutIsZero","type":"error"},{"inputs":[],"name":"InterfaceIsSignatureVerifierMuxer","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"InvalidOrderParameters","type":"error"},{"inputs":[],"name":"InvalidProtocolFeeSweeper","type":"error"},{"inputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"actualStatus","type":"uint8"}],"name":"OrderHasUnexpectedStatus","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"OrderNotValid","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollNever","type":"error"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtBlock","type":"error"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryAtEpoch","type":"error"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"name":"PollTryNextBlock","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"components":[{"internalType":"contract ICowConditionalOrder","name":"handler","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"staticData","type":"bytes"}],"indexed":false,"internalType":"struct ICowConditionalOrder.ConditionalOrderParams","name":"params","type":"tuple"}],"name":"ConditionalOrderCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"OrderCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"OrderRetried","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"appData","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"encodedMinAmountsOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"composableCow","outputs":[{"internalType":"contract IComposableCow","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"emergencyCancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"}],"name":"getOrderStatus","outputs":[{"internalType":"enum ICowSwapFeeBurner.OrderStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"getTradeableOrder","outputs":[{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeSweeper","outputs":[{"internalType":"contract IProtocolFeeSweeper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"retryOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vaultRelayer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"ctx","type":"bytes32"},{"internalType":"bytes","name":"staticInput","type":"bytes"},{"internalType":"bytes","name":"offchainInput","type":"bytes"},{"components":[{"internalType":"contract IERC20","name":"sellToken","type":"address"},{"internalType":"contract IERC20","name":"buyToken","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint32","name":"validTo","type":"uint32"},{"internalType":"bytes32","name":"appData","type":"bytes32"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"bytes32","name":"kind","type":"bytes32"},{"internalType":"bool","name":"partiallyFillable","type":"bool"},{"internalType":"bytes32","name":"sellTokenBalance","type":"bytes32"},{"internalType":"bytes32","name":"buyTokenBalance","type":"bytes32"}],"internalType":"struct GPv2Order","name":"_order","type":"tuple"}],"name":"verify","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_address_fromMemory":{"entryPoint":909,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory":{"entryPoint":872,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6101406040523461036457612c4f8038038061001a81610368565b92833981019060c0818303126103645780516001600160a01b0391828216919082820361036457602093848201519381851685036103645761005e6040840161038d565b966060840151966100716080860161038d565b9560a086015160018060401b0396878211610364570193601f9484868201121561036457805198888a1161032e57601f19996100b28882018c168701610368565b968188528682850101116103645785815f92828c9601838b015e8801015216801561035157600180546001600160a01b031990811682555f805491821684178155919816907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a31561034257608052815194851161032e576002548481811c91168015610324575b82821014610310578381116102cc575b508092851160011461026a5750839450908392915f9461025f575b50501b915f199060031b1c1916176002555b7ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee34677560a0527f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc960c05260e052610100918252610120908152604051906128ad92836103a284396080518381816101f401528181610a490152818161106e015281816111d1015261140f015260a051836122b5015260c05183612244015260e051838181610e0c015281816116b3015281816118ac015261255001525182818161067701528181610b0001528181610dc90152612095015251818181610e6c01526122890152f35b015192505f80610167565b92948490811660025f52845f20945f905b888383106102b2575050501061029a575b505050811b01600255610179565b01515f1960f88460031b161c191690555f808061028c565b85870151885590960195948501948793509081019061027b565b60025f52815f208480880160051c820192848910610307575b0160051c019085905b8281106102fc57505061014c565b5f81550185906102ee565b925081926102e5565b634e487b7160e01b5f52602260045260245ffd5b90607f169061013c565b634e487b7160e01b5f52604160045260245ffd5b63932c92a560e01b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761032e57604052565b51906001600160a01b03821682036103645756fe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714611c815750806314a2a784146119c35780631626ba7e14611433578063178ac96e146113f057806354fd4d50146112b057806360e092c61461117957806368bce712146110135780636eba2b1314610fe65780636f9d75cd14610fb1578063715018a614610f3957806379ba509714610e8f5780638aebd34814610e555780638da5cb5b14610e3057806393504c5214610ded5780639b552cc214610daa578063b8296fc414610c9d578063d83b06a4146109f0578063de557a32146101a2578063e30c39781461017c5763f2fde38b146100f8575f80fd5b3461017857602060031936011261017857610111611dd0565b610119612388565b6001600160a01b0380911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b34610178575f6003193601126101785760206001600160a01b0360015416604051908152f35b346101785760e0600319360112610178576101bb611dd0565b6101c3611de6565b6064356001600160a01b0381168103610178576001600160a01b0360a4351660a43503610178576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036109c8577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6109a05760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051917f38d52e0f0000000000000000000000000000000000000000000000000000000083526020836004816001600160a01b0385165afa9283156108c8575f93610964575b506040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523060448201526044356064820152606481528060a081011067ffffffffffffffff60a083011117610937578060a061032092016040526001600160a01b03831661280a565b604051907f70a082310000000000000000000000000000000000000000000000000000000082523060048301526020826024816001600160a01b0388165afa9182156108c8575f92610902575b5060206001600160a01b0360645f9360405194859384927fba0876520000000000000000000000000000000000000000000000000000000084526044356004850152306024850152306044850152165af180156108c8576108d3575b50604051907f70a082310000000000000000000000000000000000000000000000000000000082523060048301526020826024816001600160a01b0388165afa80156108c8575f90610894575b6104209250611ff9565b9260843560801c84101561047057836001600160a01b03847f2f785e46000000000000000000000000000000000000000000000000000000005f521660045260245260843560801c60445260645ffd5b831561085f576001600160a01b0382166001600160a01b038416145f1461053b57506fffffffffffffffffffffffffffffffff6084351683106104ea5750906104c5916001600160a01b0360a435911661262b565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b6001600160a01b0391507f2f785e46000000000000000000000000000000000000000000000000000000005f52166004526024526fffffffffffffffffffffffffffffffff6084351660445260645ffd5b9192906001600160a01b0384166001600160a01b038216145f146105dd5760846040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f46656520746f6b656e20616e642074617267657420746f6b656e20617265207460448201527f68652073616d65000000000000000000000000000000000000000000000000006064820152fd5b8115610801576106006fffffffffffffffffffffffffffffffff6084351661239b565b61060b60c435612400565b61061e826001600160a01b038616612745565b506004811015806107c757811515806107f4575b61079857505060606001600160a01b0380807f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d94610671828a16612545565b61069e877f0000000000000000000000000000000000000000000000000000000000000000848c16612466565b8863ffffffff60036040516106b281611e63565b8585168152602081018660a43516815260408201906fffffffffffffffffffffffffffffffff608435168252878b8401968660c435168852165f52836020528760405f209351167fffffffffffffffffffffffff00000000000000000000000000000000000000009081855416178455886001850192511690825416179055516002820155019151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790556040519687526fffffffffffffffffffffffffffffffff6084351660208801528160a435166040880152169616941692a46104c5565b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f526107c75760045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b50505f6002821415610632565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f46656520746f6b656e20616d6f756e74206973207a65726f00000000000000006044820152fd5b6001600160a01b03837f5db1dd1e000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b506020823d6020116108c0575b816108ae60209383611e7f565b81010312610178576104209151610416565b3d91506108a1565b6040513d5f823e3d90fd5b6020813d6020116108fa575b816108ec60209383611e7f565b8101031261017857516103c9565b3d91506108df565b9091506020813d60201161092f575b8161091e60209383611e7f565b81010312610178575190602061036d565b3d9150610911565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b9092506020813d602011610998575b8161098060209383611e7f565b810103126101785761099190611ee3565b91846102ab565b3d9150610973565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461017857606060031936011261017857610a09611dd0565b6024356044356001600160a01b03916040517f4ccb20c00000000000000000000000000000000000000000000000000000000081526020908181600481887f0000000000000000000000000000000000000000000000000000000000000000165afa80156108c85785915f91610c65575b501633141580610c58575b6109c857610a928561267f565b919060048110156107c75760038103610c2d5750610aaf8361239b565b610ab884612400565b84861694855f5260038252600360405f208560028201550163ffffffff86167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790557f000000000000000000000000000000000000000000000000000000000000000090604051907fdd62ed3e0000000000000000000000000000000000000000000000000000000082523060048301528216602482015282816044818a5afa9081156108c8575f91610bcf575b507f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a9784939284608099989796610ba89410610bbe575b5050612545565b60405194855284015260408301526060820152a1005b610bc89183612466565b8984610ba1565b90508281819398979695943d8311610c26575b610bec8183611e7f565b81010312610178575194959394929391929091907f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a610b6a565b503d610be2565b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50835f5416331415610a85565b809250838092503d8311610c96575b610c7e8183611e7f565b8101031261017857610c908591611ee3565b87610a7a565b503d610c74565b346101785760a060031936011261017857610cb6611dd0565b50610cbf611de6565b5067ffffffffffffffff60643581811161017857610ce1903690600401611dfc565b60849291923591821161017857610da692610d03610d0a933690600401611dfc565b5050611fc8565b604051918291829190916101808101926001600160a01b038082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b0390f35b34610178575f6003193601126101785760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610178575f6003193601126101785760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610178575f6003193601126101785760206001600160a01b035f5416604051908152f35b34610178575f6003193601126101785760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610178575f600319360112610178576001546001600160a01b033381831603610f0d577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b34610178575f60031936011261017857610f51612388565b5f6001600160a01b037fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461017857602060031936011261017857610fd2610fcd611dd0565b61267f565b5060405160048210156107c7576020918152f35b3461017857602060031936011261017857610da6610d0a611005611dd0565b61100d611f70565b50612187565b346101785760406003193601126101785761102c611dd0565b611034611de6565b6040517f4ccb20c00000000000000000000000000000000000000000000000000000000081526001600160a01b03926020929183816004817f000000000000000000000000000000000000000000000000000000000000000089165afa80156108c85785915f91611141575b501633141580611134575b6109c85782602494604051958680927f70a0823100000000000000000000000000000000000000000000000000000000825230600483015285165afa9283156108c8575f93611102575b506111009350612033565b005b90925083813d831161112d575b6111198183611e7f565b8101031261017857611100925191846110f5565b503d61110f565b50835f54163314156110ab565b809250858092503d8311611172575b61115a8183611e7f565b810103126101785761116c8591611ee3565b866110a0565b503d611150565b3461017857604060031936011261017857611192611dd0565b61119a611de6565b6001600160a01b036040517f4ccb20c0000000000000000000000000000000000000000000000000000000008152602081600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156108c85782915f91611274575b50163314159081611266575b506109c85761121c8261267f565b91909260048410156107c7576003840361123a576111009350612033565b837fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90505f54163314158361120e565b9150506020813d6020116112a8575b8161129060209383611e7f565b81010312610178576112a28291611ee3565b85611202565b3d9150611283565b34610178575f600319360112610178576040515f6002549060018260011c91600184169182156113e6575b60209485851084146113b95785879486865291825f1461137b575050600114611320575b5061130c92500383611e7f565b610da6604051928284938452830190611ebe565b84915060025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace905f915b85831061136357505061130c9350820101856112ff565b8054838901850152879450869390920191810161134c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261130c95151560051b85010192508791506112ff9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f16926112db565b34610178575f6003193601126101785760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101785760406003193601126101785760243567ffffffffffffffff80821161017857366023830112156101785781600401359161147183611ea2565b9261147f6040519485611e7f565b8084526020840191366024838301011161017857815f92602460209301853785010152825183019160208301938084036101a09081811261017857610180809112610178576114d9604051956114d487611e2a565b611ee3565b85526114e760408401611ee3565b60208601526114f860608401611ee3565b60408601526080830151606086015260a0830151608086015260c083015163ffffffff811681036101785760a086015260e083015160c0860152610100908184015160e08701526101209182850151908701526101409182850151908115158203610178578701526101609182850151908701528301519085015281015190828211610178570193606085850312610178576040519461159786611e47565b602081015183811161017857810182603f8201121561017857602081015190848211610937578160051b604051926115d26020830185611e7f565b8352604060208401918301019185831161017857604001905b8282106119b35750505086526040810151838111610178576060908201809603126101785760405161161c81611e47565b6020860151956001600160a01b03968781168103610178578252604081015160208301526060810151858111610178576020859161165b930101611ef7565b6040820152602087015260608101519283116101785761167e9201602001611ef7565b6040840152604051907ff698da25000000000000000000000000000000000000000000000000000000008252602082600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9182156108c8575f9261197d575b509061179961178b92604051938491602083019190916101808101926001600160a01b038082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101845283611e7f565b604051809460208083015260a08201815190606060408501528151809152602060c085019201905f5b818110611964578560206118968b8b8b611836866118288d8d60406118168b840151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09384888303016060890152611f3d565b92015190848303016080850152611ebe565b03601f198101885287611e7f565b6118a8604051968795869485947f53f00b14000000000000000000000000000000000000000000000000000000008652306004870152336024870152600435604487015260648601525f608486015260e060a486015260e4850190611ebe565b906003198483030160c4850152611ebe565b03917f0000000000000000000000000000000000000000000000000000000000000000165afa80156108c8575f90611908575b6020907fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b506020813d60201161195c575b8161192260209383611e7f565b8101031261017857517fffffffff0000000000000000000000000000000000000000000000000000000081168103610178576020906118db565b3d9150611915565b82518452899550602093840193909201916001016117c2565b91506020823d6020116119ab575b8161199860209383611e7f565b81010312610178579051906117996116e3565b3d915061198b565b81518152602091820191016115eb565b3461017857610260600319360112610178576119dd611dd0565b506119e6611de6565b5067ffffffffffffffff60a43581811161017857611a08903690600401611dfc565b919060c43582811161017857611a22903690600401611dfc565b505061018092837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c36011261017857611a5a91611fc8565b916101643592836080820180518211611c79575b5050604051611b2381611b156020820194859190916101808101926001600160a01b038082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101835282611e7f565b51902090604051602081019460e4356001600160a01b0390818116809103610178578752610104358181168091036101785760408401526101243590811680910361017857606083015261014435608083015260a08201526101843563ffffffff81168091036101785760c08201526101a492833560e08301526101c49081356101008401526101e49687356101208501526102049485358015158091036101785761014086015261022435610160860152610244358186015284526101a084019687118488101761093757866040528351902003611bfe57005b608495602f7f566572696679206f7264657220646f6573206e6f74206d6174636820776974689260207f206578697374696e67206f726465720000000000000000000000000000000000977f8d8a6110000000000000000000000000000000000000000000000000000000008a528601528401528201520152fd5b528385611a6e565b3461017857602060031936011261017857600435907fffffffff000000000000000000000000000000000000000000000000000000008216809203610178577f62af8dc2000000000000000000000000000000000000000000000000000000008214611da857817f14a2a7840000000000000000000000000000000000000000000000000000000060209314908115611d7e575b8115611d54575b8115611d2a575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483611d23565b7f1626ba7e0000000000000000000000000000000000000000000000000000000081149150611d1c565b7fb8296fc40000000000000000000000000000000000000000000000000000000081149150611d15565b7f32798566000000000000000000000000000000000000000000000000000000005f5260045ffd5b600435906001600160a01b038216820361017857565b602435906001600160a01b038216820361017857565b9181601f840112156101785782359167ffffffffffffffff8311610178576020838186019501011161017857565b610180810190811067ffffffffffffffff82111761093757604052565b6060810190811067ffffffffffffffff82111761093757604052565b6080810190811067ffffffffffffffff82111761093757604052565b90601f601f19910116810190811067ffffffffffffffff82111761093757604052565b67ffffffffffffffff811161093757601f01601f191660200190565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b51906001600160a01b038216820361017857565b81601f8201121561017857805190611f0e82611ea2565b92611f1c6040519485611e7f565b8284526020838301011161017857815f9260208093018386015e8301015290565b9060606040611f6d936001600160a01b038151168452602081015160208501520151918160408201520190611ebe565b90565b60405190611f7d82611e2a565b5f610160838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b9081602091611fd5611f70565b508101031261017857356001600160a01b03811680910361017857611f6d90612187565b9190820391821161200657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a926060926040519160208301927f095ea7b300000000000000000000000000000000000000000000000000000000908185526001600160a01b039460205f877f00000000000000000000000000000000000000000000000000000000000000001692836024860152816044860152604485526120cf85611e63565b845190828b5af15f513d82612169575b50501561212c575b505050612118818385871696875f5260036020525f600360408220828155826001820155826002820155015561262b565b6040519384526020840152166040820152a1565b6121619261215b9160405191602083015260248201525f60448201526044815261215581611e63565b8761280a565b8561280a565b5f80806120e7565b90915061217f57508587163b15155b5f806120df565b600114612178565b61218f611f70565b506001600160a01b0380911690815f52602090600382526040805f2060038251926121b984611e63565b848354168452846001840154169486850195865260028401549382860194855263ffffffff9384910154169460608101958087521561232b5781905116955116918151937f70a0823100000000000000000000000000000000000000000000000000000000855230600486015287856024818c5afa948515612321575f956122f2575b5051945116947f0000000000000000000000000000000000000000000000000000000000000000968251986122708a611e2a565b89528801528601526060850152608084015260a08301527f000000000000000000000000000000000000000000000000000000000000000060c08301525f60e08301527f000000000000000000000000000000000000000000000000000000000000000061010083015260016101208301528061014083015261016082015290565b9094508781813d831161231a575b61230a8183611e7f565b810103126101785751935f61223c565b503d612300565b83513d5f823e3d90fd5b6064888451907fc8fc27250000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4f7264657220646f6573206e6f742065786973740000000000000000000000006044820152fd5b6001600160a01b035f54163303610f0d57565b156123a257565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d696e20616d6f756e74206f7574206973207a65726f000000000000000000006044820152fd5b421161240857565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f446561646c696e6520697320696e2074686520706173740000000000000000006044820152fd5b6040519160205f8185016124bc866118287f095ea7b300000000000000000000000000000000000000000000000000000000998a85528760248401602090939291936001600160a01b0360408201951681520152565b85519082865af15f513d82612520575b5050156124da575b50505050565b612517936001600160a01b03612512926040519260208401521660248201525f60448201526044815261250c81611e63565b8261280a565b61280a565b5f8080806124d4565b90915061253d57506001600160a01b0382163b15155b5f806124cc565b600114612536565b6001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001691604091825191166020820152602081528181019267ffffffffffffffff9180851083861117610937578484526125a685611e47565b3085525f60608201526080810152803b15610178576125fe5f9491859285519687809481937f6bfae1ca0000000000000000000000000000000000000000000000000000000083528960048401526044830190611f3d565b6001602483015203925af180156126215761261857505050565b82116109375752565b82513d5f823e3d90fd5b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b039092166024830152604482019290925261267d91612512826064810161178b565b565b6001600160a01b031690815f52600360205263ffffffff600360405f20015416801561273d576020602493604051948580927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa9283156108c8575f93612709575b50826126f7575060029190565b42116127035760019190565b60039190565b9092506020813d602011612735575b8161272560209383611e7f565b810103126101785751915f6126ea565b3d9150612718565b505f91508190565b6001600160a01b03909291921691825f52600360205263ffffffff600360405f2001541692831561280057906020602492604051938480927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa80156108c8575f906127cc575b6127bf9250611ff9565b91826126f7575060029190565b506020823d6020116127f8575b816127e660209383611e7f565b81010312610178576127bf91516127b5565b3d91506127d9565b505090505f905f90565b905f602091828151910182855af1156108c8575f513d61286e57506001600160a01b0381163b155b6128395750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6001141561283256fea26469706673582212209d7552bdbf91926dc34e36927c2968116a3141dcd8dc11b543be7c1c2655140d64736f6c634300081b0033","opcodes":"PUSH2 0x140 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x364 JUMPI PUSH2 0x2C4F DUP1 CODESIZE SUB DUP1 PUSH2 0x1A DUP2 PUSH2 0x368 JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD SWAP1 PUSH1 0xC0 DUP2 DUP4 SUB SLT PUSH2 0x364 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP2 SWAP1 DUP3 DUP3 SUB PUSH2 0x364 JUMPI PUSH1 0x20 SWAP4 DUP5 DUP3 ADD MLOAD SWAP4 DUP2 DUP6 AND DUP6 SUB PUSH2 0x364 JUMPI PUSH2 0x5E PUSH1 0x40 DUP5 ADD PUSH2 0x38D JUMP JUMPDEST SWAP7 PUSH1 0x60 DUP5 ADD MLOAD SWAP7 PUSH2 0x71 PUSH1 0x80 DUP7 ADD PUSH2 0x38D JUMP JUMPDEST SWAP6 PUSH1 0xA0 DUP7 ADD MLOAD PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB SWAP7 DUP8 DUP3 GT PUSH2 0x364 JUMPI ADD SWAP4 PUSH1 0x1F SWAP5 DUP5 DUP7 DUP3 ADD SLT ISZERO PUSH2 0x364 JUMPI DUP1 MLOAD SWAP9 DUP9 DUP11 GT PUSH2 0x32E JUMPI PUSH1 0x1F NOT SWAP10 PUSH2 0xB2 DUP9 DUP3 ADD DUP13 AND DUP8 ADD PUSH2 0x368 JUMP JUMPDEST SWAP7 DUP2 DUP9 MSTORE DUP7 DUP3 DUP6 ADD ADD GT PUSH2 0x364 JUMPI DUP6 DUP2 PUSH0 SWAP3 DUP3 DUP13 SWAP7 ADD DUP4 DUP12 ADD MCOPY DUP9 ADD ADD MSTORE AND DUP1 ISZERO PUSH2 0x351 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND DUP3 SSTORE PUSH0 DUP1 SLOAD SWAP2 DUP3 AND DUP5 OR DUP2 SSTORE SWAP2 SWAP9 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP1 LOG3 ISZERO PUSH2 0x342 JUMPI PUSH1 0x80 MSTORE DUP2 MLOAD SWAP5 DUP6 GT PUSH2 0x32E JUMPI PUSH1 0x2 SLOAD DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x324 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x310 JUMPI DUP4 DUP2 GT PUSH2 0x2CC JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x26A JUMPI POP DUP4 SWAP5 POP SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP5 PUSH2 0x25F JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x2 SSTORE JUMPDEST PUSH32 0xF3B277728B3FEE749481EB3E0B3B48980DBBAB78658FC419025CB16EEE346775 PUSH1 0xA0 MSTORE PUSH32 0x5A28E9363BB942B639270062AA6BB295F434BCDFC42C97267BF003F272060DC9 PUSH1 0xC0 MSTORE PUSH1 0xE0 MSTORE PUSH2 0x100 SWAP2 DUP3 MSTORE PUSH2 0x120 SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH2 0x28AD SWAP3 DUP4 PUSH2 0x3A2 DUP5 CODECOPY PUSH1 0x80 MLOAD DUP4 DUP2 DUP2 PUSH2 0x1F4 ADD MSTORE DUP2 DUP2 PUSH2 0xA49 ADD MSTORE DUP2 DUP2 PUSH2 0x106E ADD MSTORE DUP2 DUP2 PUSH2 0x11D1 ADD MSTORE PUSH2 0x140F ADD MSTORE PUSH1 0xA0 MLOAD DUP4 PUSH2 0x22B5 ADD MSTORE PUSH1 0xC0 MLOAD DUP4 PUSH2 0x2244 ADD MSTORE PUSH1 0xE0 MLOAD DUP4 DUP2 DUP2 PUSH2 0xE0C ADD MSTORE DUP2 DUP2 PUSH2 0x16B3 ADD MSTORE DUP2 DUP2 PUSH2 0x18AC ADD MSTORE PUSH2 0x2550 ADD MSTORE MLOAD DUP3 DUP2 DUP2 PUSH2 0x677 ADD MSTORE DUP2 DUP2 PUSH2 0xB00 ADD MSTORE DUP2 DUP2 PUSH2 0xDC9 ADD MSTORE PUSH2 0x2095 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0xE6C ADD MSTORE PUSH2 0x2289 ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x167 JUMP JUMPDEST SWAP3 SWAP5 DUP5 SWAP1 DUP2 AND PUSH1 0x2 PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x2B2 JUMPI POP POP POP LT PUSH2 0x29A JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x2 SSTORE PUSH2 0x179 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x28C JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x27B JUMP JUMPDEST PUSH1 0x2 PUSH0 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x307 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP6 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x2FC JUMPI POP POP PUSH2 0x14C JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x2EE JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x2E5 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x13C JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x932C92A5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x32E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x364 JUMPI JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x1C81 JUMPI POP DUP1 PUSH4 0x14A2A784 EQ PUSH2 0x19C3 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0x1433 JUMPI DUP1 PUSH4 0x178AC96E EQ PUSH2 0x13F0 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x12B0 JUMPI DUP1 PUSH4 0x60E092C6 EQ PUSH2 0x1179 JUMPI DUP1 PUSH4 0x68BCE712 EQ PUSH2 0x1013 JUMPI DUP1 PUSH4 0x6EBA2B13 EQ PUSH2 0xFE6 JUMPI DUP1 PUSH4 0x6F9D75CD EQ PUSH2 0xFB1 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xF39 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xE8F JUMPI DUP1 PUSH4 0x8AEBD348 EQ PUSH2 0xE55 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xE30 JUMPI DUP1 PUSH4 0x93504C52 EQ PUSH2 0xDED JUMPI DUP1 PUSH4 0x9B552CC2 EQ PUSH2 0xDAA JUMPI DUP1 PUSH4 0xB8296FC4 EQ PUSH2 0xC9D JUMPI DUP1 PUSH4 0xD83B06A4 EQ PUSH2 0x9F0 JUMPI DUP1 PUSH4 0xDE557A32 EQ PUSH2 0x1A2 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x17C JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0xF8 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x111 PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x119 PUSH2 0x2388 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x1BB PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA4 CALLDATALOAD AND PUSH1 0xA4 CALLDATALOAD SUB PUSH2 0x178 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x9C8 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x9A0 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 DUP4 PUSH1 0x4 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP4 PUSH2 0x964 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE DUP1 PUSH1 0xA0 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP4 ADD GT OR PUSH2 0x937 JUMPI DUP1 PUSH1 0xA0 PUSH2 0x320 SWAP3 ADD PUSH1 0x40 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x280A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP3 PUSH2 0x902 JUMPI JUMPDEST POP PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x64 PUSH0 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x4 DUP6 ADD MSTORE ADDRESS PUSH1 0x24 DUP6 ADD MSTORE ADDRESS PUSH1 0x44 DUP6 ADD MSTORE AND GAS CALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH2 0x8D3 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP1 PUSH2 0x894 JUMPI JUMPDEST PUSH2 0x420 SWAP3 POP PUSH2 0x1FF9 JUMP JUMPDEST SWAP3 PUSH1 0x84 CALLDATALOAD PUSH1 0x80 SHR DUP5 LT ISZERO PUSH2 0x470 JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x80 SHR PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP4 ISZERO PUSH2 0x85F JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EQ PUSH0 EQ PUSH2 0x53B JUMPI POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND DUP4 LT PUSH2 0x4EA JUMPI POP SWAP1 PUSH2 0x4C5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA4 CALLDATALOAD SWAP2 AND PUSH2 0x262B JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 POP PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST SWAP2 SWAP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ PUSH0 EQ PUSH2 0x5DD JUMPI PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616E642074617267657420746F6B656E206172652074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x68652073616D6500000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST DUP2 ISZERO PUSH2 0x801 JUMPI PUSH2 0x600 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND PUSH2 0x239B JUMP JUMPDEST PUSH2 0x60B PUSH1 0xC4 CALLDATALOAD PUSH2 0x2400 JUMP JUMPDEST PUSH2 0x61E DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x2745 JUMP JUMPDEST POP PUSH1 0x4 DUP2 LT ISZERO DUP1 PUSH2 0x7C7 JUMPI DUP2 ISZERO ISZERO DUP1 PUSH2 0x7F4 JUMPI JUMPDEST PUSH2 0x798 JUMPI POP POP PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP1 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP5 PUSH2 0x671 DUP3 DUP11 AND PUSH2 0x2545 JUMP JUMPDEST PUSH2 0x69E DUP8 PUSH32 0x0 DUP5 DUP13 AND PUSH2 0x2466 JUMP JUMPDEST DUP9 PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 MLOAD PUSH2 0x6B2 DUP2 PUSH2 0x1E63 JUMP JUMPDEST DUP6 DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 PUSH1 0xA4 CALLDATALOAD AND DUP2 MSTORE PUSH1 0x40 DUP3 ADD SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND DUP3 MSTORE DUP8 DUP12 DUP5 ADD SWAP7 DUP7 PUSH1 0xC4 CALLDATALOAD AND DUP9 MSTORE AND PUSH0 MSTORE DUP4 PUSH1 0x20 MSTORE DUP8 PUSH1 0x40 PUSH0 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 SLOAD AND OR DUP5 SSTORE DUP9 PUSH1 0x1 DUP6 ADD SWAP3 MLOAD AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE MLOAD PUSH1 0x2 DUP3 ADD SSTORE ADD SWAP2 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND PUSH1 0x20 DUP9 ADD MSTORE DUP2 PUSH1 0xA4 CALLDATALOAD AND PUSH1 0x40 DUP9 ADD MSTORE AND SWAP7 AND SWAP5 AND SWAP3 LOG4 PUSH2 0x4C5 JUMP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH2 0x7C7 JUMPI PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP PUSH0 PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x632 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616D6F756E74206973207A65726F0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 PUSH32 0x5DB1DD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x8C0 JUMPI JUMPDEST DUP2 PUSH2 0x8AE PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x420 SWAP2 MLOAD PUSH2 0x416 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x8A1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x8FA JUMPI JUMPDEST DUP2 PUSH2 0x8EC PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD PUSH2 0x3C9 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x8DF JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x92F JUMPI JUMPDEST DUP2 PUSH2 0x91E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP1 PUSH1 0x20 PUSH2 0x36D JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x911 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x998 JUMPI JUMPDEST DUP2 PUSH2 0x980 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x991 SWAP1 PUSH2 0x1EE3 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x2AB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x973 JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xA09 PUSH2 0x1DD0 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0xC65 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0xC58 JUMPI JUMPDEST PUSH2 0x9C8 JUMPI PUSH2 0xA92 DUP6 PUSH2 0x267F JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x3 DUP2 SUB PUSH2 0xC2D JUMPI POP PUSH2 0xAAF DUP4 PUSH2 0x239B JUMP JUMPDEST PUSH2 0xAB8 DUP5 PUSH2 0x2400 JUMP JUMPDEST DUP5 DUP7 AND SWAP5 DUP6 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH1 0x2 DUP3 ADD SSTORE ADD PUSH4 0xFFFFFFFF DUP7 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0x0 SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x44 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP2 PUSH2 0xBCF JUMPI JUMPDEST POP PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A SWAP8 DUP5 SWAP4 SWAP3 DUP5 PUSH1 0x80 SWAP10 SWAP9 SWAP8 SWAP7 PUSH2 0xBA8 SWAP5 LT PUSH2 0xBBE JUMPI JUMPDEST POP POP PUSH2 0x2545 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE LOG1 STOP JUMPDEST PUSH2 0xBC8 SWAP2 DUP4 PUSH2 0x2466 JUMP JUMPDEST DUP10 DUP5 PUSH2 0xBA1 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 SWAP4 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 RETURNDATASIZE DUP4 GT PUSH2 0xC26 JUMPI JUMPDEST PUSH2 0xBEC DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP5 SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A PUSH2 0xB6A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xBE2 JUMP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0xA85 JUMP JUMPDEST DUP1 SWAP3 POP DUP4 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xC96 JUMPI JUMPDEST PUSH2 0xC7E DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0xC90 DUP6 SWAP2 PUSH2 0x1EE3 JUMP JUMPDEST DUP8 PUSH2 0xA7A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xC74 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xCB6 PUSH2 0x1DD0 JUMP JUMPDEST POP PUSH2 0xCBF PUSH2 0x1DE6 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x178 JUMPI PUSH2 0xCE1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST PUSH1 0x84 SWAP3 SWAP2 SWAP3 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x178 JUMPI PUSH2 0xDA6 SWAP3 PUSH2 0xD03 PUSH2 0xD0A SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST POP POP PUSH2 0x1FC8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB CALLER DUP2 DUP4 AND SUB PUSH2 0xF0D JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xF51 PUSH2 0x2388 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xFD2 PUSH2 0xFCD PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x267F JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x20 SWAP2 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xDA6 PUSH2 0xD0A PUSH2 0x1005 PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x100D PUSH2 0x1F70 JUMP JUMPDEST POP PUSH2 0x2187 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x102C PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x1034 PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x20 SWAP3 SWAP2 DUP4 DUP2 PUSH1 0x4 DUP2 PUSH32 0x0 DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0x1141 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0x1134 JUMPI JUMPDEST PUSH2 0x9C8 JUMPI DUP3 PUSH1 0x24 SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP4 PUSH2 0x1102 JUMPI JUMPDEST POP PUSH2 0x1100 SWAP4 POP PUSH2 0x2033 JUMP JUMPDEST STOP JUMPDEST SWAP1 SWAP3 POP DUP4 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x112D JUMPI JUMPDEST PUSH2 0x1119 DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x1100 SWAP3 MLOAD SWAP2 DUP5 PUSH2 0x10F5 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x110F JUMP JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0x10AB JUMP JUMPDEST DUP1 SWAP3 POP DUP6 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1172 JUMPI JUMPDEST PUSH2 0x115A DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x116C DUP6 SWAP2 PUSH2 0x1EE3 JUMP JUMPDEST DUP7 PUSH2 0x10A0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1150 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x1192 PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x119A PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1274 JUMPI JUMPDEST POP AND CALLER EQ ISZERO SWAP1 DUP2 PUSH2 0x1266 JUMPI JUMPDEST POP PUSH2 0x9C8 JUMPI PUSH2 0x121C DUP3 PUSH2 0x267F JUMP JUMPDEST SWAP2 SWAP1 SWAP3 PUSH1 0x4 DUP5 LT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x3 DUP5 SUB PUSH2 0x123A JUMPI PUSH2 0x1100 SWAP4 POP PUSH2 0x2033 JUMP JUMPDEST DUP4 PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH0 SLOAD AND CALLER EQ ISZERO DUP4 PUSH2 0x120E JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x12A8 JUMPI JUMPDEST DUP2 PUSH2 0x1290 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x12A2 DUP3 SWAP2 PUSH2 0x1EE3 JUMP JUMPDEST DUP6 PUSH2 0x1202 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1283 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH1 0x2 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x13E6 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x13B9 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x137B JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1320 JUMPI JUMPDEST POP PUSH2 0x130C SWAP3 POP SUB DUP4 PUSH2 0x1E7F JUMP JUMPDEST PUSH2 0xDA6 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1EBE JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x2 PUSH0 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x1363 JUMPI POP POP PUSH2 0x130C SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x12FF JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x134C JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0x130C SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x12FF SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0x12DB JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT PUSH2 0x178 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x178 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x1471 DUP4 PUSH2 0x1EA2 JUMP JUMPDEST SWAP3 PUSH2 0x147F PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1E7F JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP2 CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0x178 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH1 0x20 SWAP4 ADD DUP6 CALLDATACOPY DUP6 ADD ADD MSTORE DUP3 MLOAD DUP4 ADD SWAP2 PUSH1 0x20 DUP4 ADD SWAP4 DUP1 DUP5 SUB PUSH2 0x1A0 SWAP1 DUP2 DUP2 SLT PUSH2 0x178 JUMPI PUSH2 0x180 DUP1 SWAP2 SLT PUSH2 0x178 JUMPI PUSH2 0x14D9 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x14D4 DUP8 PUSH2 0x1E2A JUMP JUMPDEST PUSH2 0x1EE3 JUMP JUMPDEST DUP6 MSTORE PUSH2 0x14E7 PUSH1 0x40 DUP5 ADD PUSH2 0x1EE3 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x14F8 PUSH1 0x60 DUP5 ADD PUSH2 0x1EE3 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP5 ADD MLOAD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x120 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH2 0x140 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x178 JUMPI DUP8 ADD MSTORE PUSH2 0x160 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x178 JUMPI ADD SWAP4 PUSH1 0x60 DUP6 DUP6 SUB SLT PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH2 0x1597 DUP7 PUSH2 0x1E47 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x178 JUMPI DUP2 ADD DUP3 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x178 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x937 JUMPI DUP2 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP3 PUSH2 0x15D2 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1E7F JUMP JUMPDEST DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD SWAP2 DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x178 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x19B3 JUMPI POP POP POP DUP7 MSTORE PUSH1 0x40 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x178 JUMPI PUSH1 0x60 SWAP1 DUP3 ADD DUP1 SWAP7 SUB SLT PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD PUSH2 0x161C DUP2 PUSH2 0x1E47 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI DUP3 MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD DUP6 DUP2 GT PUSH2 0x178 JUMPI PUSH1 0x20 DUP6 SWAP2 PUSH2 0x165B SWAP4 ADD ADD PUSH2 0x1EF7 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP3 DUP4 GT PUSH2 0x178 JUMPI PUSH2 0x167E SWAP3 ADD PUSH1 0x20 ADD PUSH2 0x1EF7 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF698DA2500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP3 PUSH2 0x197D JUMPI JUMPDEST POP SWAP1 PUSH2 0x1799 PUSH2 0x178B SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x1E7F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 PUSH1 0x20 DUP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP2 MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP6 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0xC0 DUP6 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1964 JUMPI DUP6 PUSH1 0x20 PUSH2 0x1896 DUP12 DUP12 DUP12 PUSH2 0x1836 DUP7 PUSH2 0x1828 DUP14 DUP14 PUSH1 0x40 PUSH2 0x1816 DUP12 DUP5 ADD MLOAD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 SWAP4 DUP5 DUP9 DUP4 SUB ADD PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x1F3D JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1EBE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP9 MSTORE DUP8 PUSH2 0x1E7F JUMP JUMPDEST PUSH2 0x18A8 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP5 PUSH32 0x53F00B1400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE ADDRESS PUSH1 0x4 DUP8 ADD MSTORE CALLER PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0x44 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD MSTORE PUSH0 PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0xE0 PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xE4 DUP6 ADD SWAP1 PUSH2 0x1EBE JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0xC4 DUP6 ADD MSTORE PUSH2 0x1EBE JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP1 PUSH2 0x1908 JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x195C JUMPI JUMPDEST DUP2 PUSH2 0x1922 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x18DB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1915 JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP10 SWAP6 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x17C2 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x19AB JUMPI JUMPDEST DUP2 PUSH2 0x1998 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI SWAP1 MLOAD SWAP1 PUSH2 0x1799 PUSH2 0x16E3 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x198B JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x15EB JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH2 0x260 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x19DD PUSH2 0x1DD0 JUMP JUMPDEST POP PUSH2 0x19E6 PUSH2 0x1DE6 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x178 JUMPI PUSH2 0x1A08 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x178 JUMPI PUSH2 0x1A22 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST POP POP PUSH2 0x180 SWAP3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x1A5A SWAP2 PUSH2 0x1FC8 JUMP JUMPDEST SWAP2 PUSH2 0x164 CALLDATALOAD SWAP3 DUP4 PUSH1 0x80 DUP3 ADD DUP1 MLOAD DUP3 GT PUSH2 0x1C79 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH2 0x1B23 DUP2 PUSH2 0x1B15 PUSH1 0x20 DUP3 ADD SWAP5 DUP6 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1E7F JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 PUSH1 0xE4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI DUP8 MSTORE PUSH2 0x104 CALLDATALOAD DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x124 CALLDATALOAD SWAP1 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x184 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1A4 SWAP3 DUP4 CALLDATALOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x1C4 SWAP1 DUP2 CALLDATALOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x1E4 SWAP7 DUP8 CALLDATALOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x204 SWAP5 DUP6 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x224 CALLDATALOAD PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x244 CALLDATALOAD DUP2 DUP7 ADD MSTORE DUP5 MSTORE PUSH2 0x1A0 DUP5 ADD SWAP7 DUP8 GT DUP5 DUP9 LT OR PUSH2 0x937 JUMPI DUP7 PUSH1 0x40 MSTORE DUP4 MLOAD SWAP1 KECCAK256 SUB PUSH2 0x1BFE JUMPI STOP JUMPDEST PUSH1 0x84 SWAP6 PUSH1 0x2F PUSH32 0x566572696679206F7264657220646F6573206E6F74206D617463682077697468 SWAP3 PUSH1 0x20 PUSH32 0x206578697374696E67206F726465720000000000000000000000000000000000 SWAP8 PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP7 ADD MSTORE DUP5 ADD MSTORE DUP3 ADD MSTORE ADD MSTORE REVERT JUMPDEST MSTORE DUP4 DUP6 PUSH2 0x1A6E JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x178 JUMPI PUSH32 0x62AF8DC200000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x1DA8 JUMPI DUP2 PUSH32 0x14A2A78400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x1D7E JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1D54 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1D2A JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x1D23 JUMP JUMPDEST PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1D1C JUMP JUMPDEST PUSH32 0xB8296FC400000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1D15 JUMP JUMPDEST PUSH32 0x3279856600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x178 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x178 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x178 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x178 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x178 JUMPI JUMP JUMPDEST PUSH2 0x180 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x937 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x178 JUMPI JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x178 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1F0E DUP3 PUSH2 0x1EA2 JUMP JUMPDEST SWAP3 PUSH2 0x1F1C PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1E7F JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x178 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x60 PUSH1 0x40 PUSH2 0x1F6D SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP6 ADD MSTORE ADD MLOAD SWAP2 DUP2 PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1EBE JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1F7D DUP3 PUSH2 0x1E2A JUMP JUMPDEST PUSH0 PUSH2 0x160 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE DUP3 PUSH2 0x140 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 PUSH2 0x1FD5 PUSH2 0x1F70 JUMP JUMPDEST POP DUP2 ADD SUB SLT PUSH2 0x178 JUMPI CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH2 0x1F6D SWAP1 PUSH2 0x2187 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x2006 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP3 PUSH1 0x60 SWAP3 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD SWAP3 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH1 0x20 PUSH0 DUP8 PUSH32 0x0 AND SWAP3 DUP4 PUSH1 0x24 DUP7 ADD MSTORE DUP2 PUSH1 0x44 DUP7 ADD MSTORE PUSH1 0x44 DUP6 MSTORE PUSH2 0x20CF DUP6 PUSH2 0x1E63 JUMP JUMPDEST DUP5 MLOAD SWAP1 DUP3 DUP12 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x2169 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x212C JUMPI JUMPDEST POP POP POP PUSH2 0x2118 DUP2 DUP4 DUP6 DUP8 AND SWAP7 DUP8 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x3 PUSH1 0x40 DUP3 KECCAK256 DUP3 DUP2 SSTORE DUP3 PUSH1 0x1 DUP3 ADD SSTORE DUP3 PUSH1 0x2 DUP3 ADD SSTORE ADD SSTORE PUSH2 0x262B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE LOG1 JUMP JUMPDEST PUSH2 0x2161 SWAP3 PUSH2 0x215B SWAP2 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x2155 DUP2 PUSH2 0x1E63 JUMP JUMPDEST DUP8 PUSH2 0x280A JUMP JUMPDEST DUP6 PUSH2 0x280A JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x20E7 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x217F JUMPI POP DUP6 DUP8 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x20DF JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x2178 JUMP JUMPDEST PUSH2 0x218F PUSH2 0x1F70 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH1 0x3 DUP3 MLOAD SWAP3 PUSH2 0x21B9 DUP5 PUSH2 0x1E63 JUMP JUMPDEST DUP5 DUP4 SLOAD AND DUP5 MSTORE DUP5 PUSH1 0x1 DUP5 ADD SLOAD AND SWAP5 DUP7 DUP6 ADD SWAP6 DUP7 MSTORE PUSH1 0x2 DUP5 ADD SLOAD SWAP4 DUP3 DUP7 ADD SWAP5 DUP6 MSTORE PUSH4 0xFFFFFFFF SWAP4 DUP5 SWAP2 ADD SLOAD AND SWAP5 PUSH1 0x60 DUP2 ADD SWAP6 DUP1 DUP8 MSTORE ISZERO PUSH2 0x232B JUMPI DUP2 SWAP1 MLOAD AND SWAP6 MLOAD AND SWAP2 DUP2 MLOAD SWAP4 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS PUSH1 0x4 DUP7 ADD MSTORE DUP8 DUP6 PUSH1 0x24 DUP2 DUP13 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x2321 JUMPI PUSH0 SWAP6 PUSH2 0x22F2 JUMPI JUMPDEST POP MLOAD SWAP5 MLOAD AND SWAP5 PUSH32 0x0 SWAP7 DUP3 MLOAD SWAP9 PUSH2 0x2270 DUP11 PUSH2 0x1E2A JUMP JUMPDEST DUP10 MSTORE DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH32 0x0 PUSH1 0xC0 DUP4 ADD MSTORE PUSH0 PUSH1 0xE0 DUP4 ADD MSTORE PUSH32 0x0 PUSH2 0x100 DUP4 ADD MSTORE PUSH1 0x1 PUSH2 0x120 DUP4 ADD MSTORE DUP1 PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x231A JUMPI JUMPDEST PUSH2 0x230A DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x223C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2300 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP9 DUP5 MLOAD SWAP1 PUSH32 0xC8FC272500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7264657220646F6573206E6F74206578697374000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND CALLER SUB PUSH2 0xF0D JUMPI JUMP JUMPDEST ISZERO PUSH2 0x23A2 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D696E20616D6F756E74206F7574206973207A65726F00000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST TIMESTAMP GT PUSH2 0x2408 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446561646C696E6520697320696E207468652070617374000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 PUSH0 DUP2 DUP6 ADD PUSH2 0x24BC DUP7 PUSH2 0x1828 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP10 DUP11 DUP6 MSTORE DUP8 PUSH1 0x24 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST DUP6 MLOAD SWAP1 DUP3 DUP7 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x2520 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x24DA JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x2517 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2512 SWAP3 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x250C DUP2 PUSH2 0x1E63 JUMP JUMPDEST DUP3 PUSH2 0x280A JUMP JUMPDEST PUSH2 0x280A JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 PUSH2 0x24D4 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x253D JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x24CC JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x2536 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP2 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE DUP2 DUP2 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP1 DUP6 LT DUP4 DUP7 GT OR PUSH2 0x937 JUMPI DUP5 DUP5 MSTORE PUSH2 0x25A6 DUP6 PUSH2 0x1E47 JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD MSTORE DUP1 EXTCODESIZE ISZERO PUSH2 0x178 JUMPI PUSH2 0x25FE PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x6BFAE1CA00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x1F3D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x2621 JUMPI PUSH2 0x2618 JUMPI POP POP POP JUMP JUMPDEST DUP3 GT PUSH2 0x937 JUMPI MSTORE JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x267D SWAP2 PUSH2 0x2512 DUP3 PUSH1 0x64 DUP2 ADD PUSH2 0x178B JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND DUP1 ISZERO PUSH2 0x273D JUMPI PUSH1 0x20 PUSH1 0x24 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP4 PUSH2 0x2709 JUMPI JUMPDEST POP DUP3 PUSH2 0x26F7 JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x2703 JUMPI PUSH1 0x1 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2735 JUMPI JUMPDEST DUP2 PUSH2 0x2725 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x26EA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2718 JUMP JUMPDEST POP PUSH0 SWAP2 POP DUP2 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 SWAP2 SWAP3 AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND SWAP3 DUP4 ISZERO PUSH2 0x2800 JUMPI SWAP1 PUSH1 0x20 PUSH1 0x24 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP1 PUSH2 0x27CC JUMPI JUMPDEST PUSH2 0x27BF SWAP3 POP PUSH2 0x1FF9 JUMP JUMPDEST SWAP2 DUP3 PUSH2 0x26F7 JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x27F8 JUMPI JUMPDEST DUP2 PUSH2 0x27E6 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x27BF SWAP2 MLOAD PUSH2 0x27B5 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x27D9 JUMP JUMPDEST POP POP SWAP1 POP PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 PUSH1 0x20 SWAP2 DUP3 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL ISZERO PUSH2 0x8C8 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x286E JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x2839 JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x2832 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 PUSH22 0x52BDBF91926DC34E36927C2968116A3141DCD8DC11B5 NUMBER 0xBE PUSH29 0x1C2655140D64736F6C634300081B003300000000000000000000000000 ","sourceMap":"1248:3961:76:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:76;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:76;;;;;;;;;;;;;;1273:26:48;;1269:95;;1248:3961:76;;;-1:-1:-1;;;;;;1248:3961:76;;;;;-1:-1:-1;1248:3961:76;;;;;;;;;;;;;3052:40:48;;-1:-1:-1;3052:40:48;1203:42:77;1199:107;;1248:3961:76;1316:40:77;1248:3961:76;;;;;;;1156:21:37;1248:3961:76;;;;;;;;;;;-1:-1:-1;1248:3961:76;;;;;;;;;;;-1:-1:-1;1248:3961:76;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:76;;;;;;;;;;;;;;;;;1156:21:37;1248:3961:76;;2215:17:75;1248:3961:76;2215:17:75;2281:18;1248:3961:76;2281:18:75;2893:30;;2933:31;;;;2974:18;;;;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2893:30:75;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:76;;;;;;;;;;;1156:21:37;-1:-1:-1;1248:3961:76;;-1:-1:-1;1248:3961:76;;-1:-1:-1;1248:3961:76;;;;;;;;;;;;;;;;;;;;;1156:21:37;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:76;;;;;;;1156:21:37;-1:-1:-1;1248:3961:76;;-1:-1:-1;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:76;;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:76;;;;;-1:-1:-1;1248:3961:76;;;;;;;;;;;;-1:-1:-1;1248:3961:76;;;;;-1:-1:-1;1248:3961:76;1199:107:77;1268:27;;;-1:-1:-1;1268:27:77;;-1:-1:-1;1268:27:77;1269:95:48;1322:31;;;-1:-1:-1;1322:31:48;-1:-1:-1;1322:31:48;1248:3961:76;;-1:-1:-1;1322:31:48;1248:3961:76;-1:-1:-1;1248:3961:76;;;;;;;;;-1:-1:-1;;1248:3961:76;;;-1:-1:-1;;;;;1248:3961:76;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1248:3961:76;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":7632,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_23215":{"entryPoint":7654,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":7676,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_fromMemory":{"entryPoint":7927,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC20_fromMemory":{"entryPoint":7907,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_string":{"entryPoint":7870,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_ConditionalOrderParams":{"entryPoint":7997,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_GPv2Order":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_and_zero_memory_struct_struct_GPv2Order":{"entryPoint":8048,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":7842,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":8185,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":7807,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_23219":{"entryPoint":7722,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_23220":{"entryPoint":7751,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_23239":{"entryPoint":7779,"id":null,"parameterSlots":1,"returnSlots":0},"fun_callOptionalReturn":{"entryPoint":10250,"id":11006,"parameterSlots":2,"returnSlots":0},"fun_cancelOrder":{"entryPoint":8243,"id":18951,"parameterSlots":3,"returnSlots":0},"fun_checkDeadline":{"entryPoint":9216,"id":19464,"parameterSlots":1,"returnSlots":0},"fun_checkMinAmountOut":{"entryPoint":9115,"id":19479,"parameterSlots":1,"returnSlots":0},"fun_checkOwner":{"entryPoint":9096,"id":9405,"parameterSlots":0,"returnSlots":0},"fun_createCowOrder":{"entryPoint":9541,"id":19509,"parameterSlots":1,"returnSlots":0},"fun_forceApprove":{"entryPoint":9318,"id":10832,"parameterSlots":3,"returnSlots":0},"fun_getOrder":{"entryPoint":8583,"id":19357,"parameterSlots":1,"returnSlots":1},"fun_getOrderStatusAndBalance":{"entryPoint":10053,"id":19448,"parameterSlots":2,"returnSlots":2},"fun_getOrderStatusAndBalance_23224":{"entryPoint":9855,"id":19448,"parameterSlots":1,"returnSlots":2},"fun_getTradeableOrder":{"entryPoint":8136,"id":19142,"parameterSlots":2,"returnSlots":1},"fun_safeTransfer":{"entryPoint":9771,"id":10629,"parameterSlots":3,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"18677":[{"length":32,"start":8885}],"18682":[{"length":32,"start":8772}],"18685":[{"length":32,"start":3596},{"length":32,"start":5811},{"length":32,"start":6316},{"length":32,"start":9552}],"18687":[{"length":32,"start":1655},{"length":32,"start":2816},{"length":32,"start":3529},{"length":32,"start":8341}],"18689":[{"length":32,"start":3692},{"length":32,"start":8841}],"19753":[{"length":32,"start":500},{"length":32,"start":2633},{"length":32,"start":4206},{"length":32,"start":4561},{"length":32,"start":5135}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714611c815750806314a2a784146119c35780631626ba7e14611433578063178ac96e146113f057806354fd4d50146112b057806360e092c61461117957806368bce712146110135780636eba2b1314610fe65780636f9d75cd14610fb1578063715018a614610f3957806379ba509714610e8f5780638aebd34814610e555780638da5cb5b14610e3057806393504c5214610ded5780639b552cc214610daa578063b8296fc414610c9d578063d83b06a4146109f0578063de557a32146101a2578063e30c39781461017c5763f2fde38b146100f8575f80fd5b3461017857602060031936011261017857610111611dd0565b610119612388565b6001600160a01b0380911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b34610178575f6003193601126101785760206001600160a01b0360015416604051908152f35b346101785760e0600319360112610178576101bb611dd0565b6101c3611de6565b6064356001600160a01b0381168103610178576001600160a01b0360a4351660a43503610178576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036109c8577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6109a05760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051917f38d52e0f0000000000000000000000000000000000000000000000000000000083526020836004816001600160a01b0385165afa9283156108c8575f93610964575b506040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523060448201526044356064820152606481528060a081011067ffffffffffffffff60a083011117610937578060a061032092016040526001600160a01b03831661280a565b604051907f70a082310000000000000000000000000000000000000000000000000000000082523060048301526020826024816001600160a01b0388165afa9182156108c8575f92610902575b5060206001600160a01b0360645f9360405194859384927fba0876520000000000000000000000000000000000000000000000000000000084526044356004850152306024850152306044850152165af180156108c8576108d3575b50604051907f70a082310000000000000000000000000000000000000000000000000000000082523060048301526020826024816001600160a01b0388165afa80156108c8575f90610894575b6104209250611ff9565b9260843560801c84101561047057836001600160a01b03847f2f785e46000000000000000000000000000000000000000000000000000000005f521660045260245260843560801c60445260645ffd5b831561085f576001600160a01b0382166001600160a01b038416145f1461053b57506fffffffffffffffffffffffffffffffff6084351683106104ea5750906104c5916001600160a01b0360a435911661262b565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b6001600160a01b0391507f2f785e46000000000000000000000000000000000000000000000000000000005f52166004526024526fffffffffffffffffffffffffffffffff6084351660445260645ffd5b9192906001600160a01b0384166001600160a01b038216145f146105dd5760846040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f46656520746f6b656e20616e642074617267657420746f6b656e20617265207460448201527f68652073616d65000000000000000000000000000000000000000000000000006064820152fd5b8115610801576106006fffffffffffffffffffffffffffffffff6084351661239b565b61060b60c435612400565b61061e826001600160a01b038616612745565b506004811015806107c757811515806107f4575b61079857505060606001600160a01b0380807f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d94610671828a16612545565b61069e877f0000000000000000000000000000000000000000000000000000000000000000848c16612466565b8863ffffffff60036040516106b281611e63565b8585168152602081018660a43516815260408201906fffffffffffffffffffffffffffffffff608435168252878b8401968660c435168852165f52836020528760405f209351167fffffffffffffffffffffffff00000000000000000000000000000000000000009081855416178455886001850192511690825416179055516002820155019151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790556040519687526fffffffffffffffffffffffffffffffff6084351660208801528160a435166040880152169616941692a46104c5565b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f526107c75760045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b50505f6002821415610632565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f46656520746f6b656e20616d6f756e74206973207a65726f00000000000000006044820152fd5b6001600160a01b03837f5db1dd1e000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b506020823d6020116108c0575b816108ae60209383611e7f565b81010312610178576104209151610416565b3d91506108a1565b6040513d5f823e3d90fd5b6020813d6020116108fa575b816108ec60209383611e7f565b8101031261017857516103c9565b3d91506108df565b9091506020813d60201161092f575b8161091e60209383611e7f565b81010312610178575190602061036d565b3d9150610911565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b9092506020813d602011610998575b8161098060209383611e7f565b810103126101785761099190611ee3565b91846102ab565b3d9150610973565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461017857606060031936011261017857610a09611dd0565b6024356044356001600160a01b03916040517f4ccb20c00000000000000000000000000000000000000000000000000000000081526020908181600481887f0000000000000000000000000000000000000000000000000000000000000000165afa80156108c85785915f91610c65575b501633141580610c58575b6109c857610a928561267f565b919060048110156107c75760038103610c2d5750610aaf8361239b565b610ab884612400565b84861694855f5260038252600360405f208560028201550163ffffffff86167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790557f000000000000000000000000000000000000000000000000000000000000000090604051907fdd62ed3e0000000000000000000000000000000000000000000000000000000082523060048301528216602482015282816044818a5afa9081156108c8575f91610bcf575b507f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a9784939284608099989796610ba89410610bbe575b5050612545565b60405194855284015260408301526060820152a1005b610bc89183612466565b8984610ba1565b90508281819398979695943d8311610c26575b610bec8183611e7f565b81010312610178575194959394929391929091907f1c5203f5bd3b302669f961b1035b0a6ec649f05ba67f3024a07e67ce4332898a610b6a565b503d610be2565b7fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50835f5416331415610a85565b809250838092503d8311610c96575b610c7e8183611e7f565b8101031261017857610c908591611ee3565b87610a7a565b503d610c74565b346101785760a060031936011261017857610cb6611dd0565b50610cbf611de6565b5067ffffffffffffffff60643581811161017857610ce1903690600401611dfc565b60849291923591821161017857610da692610d03610d0a933690600401611dfc565b5050611fc8565b604051918291829190916101808101926001600160a01b038082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b0390f35b34610178575f6003193601126101785760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610178575f6003193601126101785760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610178575f6003193601126101785760206001600160a01b035f5416604051908152f35b34610178575f6003193601126101785760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610178575f600319360112610178576001546001600160a01b033381831603610f0d577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b34610178575f60031936011261017857610f51612388565b5f6001600160a01b037fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461017857602060031936011261017857610fd2610fcd611dd0565b61267f565b5060405160048210156107c7576020918152f35b3461017857602060031936011261017857610da6610d0a611005611dd0565b61100d611f70565b50612187565b346101785760406003193601126101785761102c611dd0565b611034611de6565b6040517f4ccb20c00000000000000000000000000000000000000000000000000000000081526001600160a01b03926020929183816004817f000000000000000000000000000000000000000000000000000000000000000089165afa80156108c85785915f91611141575b501633141580611134575b6109c85782602494604051958680927f70a0823100000000000000000000000000000000000000000000000000000000825230600483015285165afa9283156108c8575f93611102575b506111009350612033565b005b90925083813d831161112d575b6111198183611e7f565b8101031261017857611100925191846110f5565b503d61110f565b50835f54163314156110ab565b809250858092503d8311611172575b61115a8183611e7f565b810103126101785761116c8591611ee3565b866110a0565b503d611150565b3461017857604060031936011261017857611192611dd0565b61119a611de6565b6001600160a01b036040517f4ccb20c0000000000000000000000000000000000000000000000000000000008152602081600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156108c85782915f91611274575b50163314159081611266575b506109c85761121c8261267f565b91909260048410156107c7576003840361123a576111009350612033565b837fd0c1b3cf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90505f54163314158361120e565b9150506020813d6020116112a8575b8161129060209383611e7f565b81010312610178576112a28291611ee3565b85611202565b3d9150611283565b34610178575f600319360112610178576040515f6002549060018260011c91600184169182156113e6575b60209485851084146113b95785879486865291825f1461137b575050600114611320575b5061130c92500383611e7f565b610da6604051928284938452830190611ebe565b84915060025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace905f915b85831061136357505061130c9350820101856112ff565b8054838901850152879450869390920191810161134c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261130c95151560051b85010192508791506112ff9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f16926112db565b34610178575f6003193601126101785760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101785760406003193601126101785760243567ffffffffffffffff80821161017857366023830112156101785781600401359161147183611ea2565b9261147f6040519485611e7f565b8084526020840191366024838301011161017857815f92602460209301853785010152825183019160208301938084036101a09081811261017857610180809112610178576114d9604051956114d487611e2a565b611ee3565b85526114e760408401611ee3565b60208601526114f860608401611ee3565b60408601526080830151606086015260a0830151608086015260c083015163ffffffff811681036101785760a086015260e083015160c0860152610100908184015160e08701526101209182850151908701526101409182850151908115158203610178578701526101609182850151908701528301519085015281015190828211610178570193606085850312610178576040519461159786611e47565b602081015183811161017857810182603f8201121561017857602081015190848211610937578160051b604051926115d26020830185611e7f565b8352604060208401918301019185831161017857604001905b8282106119b35750505086526040810151838111610178576060908201809603126101785760405161161c81611e47565b6020860151956001600160a01b03968781168103610178578252604081015160208301526060810151858111610178576020859161165b930101611ef7565b6040820152602087015260608101519283116101785761167e9201602001611ef7565b6040840152604051907ff698da25000000000000000000000000000000000000000000000000000000008252602082600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9182156108c8575f9261197d575b509061179961178b92604051938491602083019190916101808101926001600160a01b038082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101845283611e7f565b604051809460208083015260a08201815190606060408501528151809152602060c085019201905f5b818110611964578560206118968b8b8b611836866118288d8d60406118168b840151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09384888303016060890152611f3d565b92015190848303016080850152611ebe565b03601f198101885287611e7f565b6118a8604051968795869485947f53f00b14000000000000000000000000000000000000000000000000000000008652306004870152336024870152600435604487015260648601525f608486015260e060a486015260e4850190611ebe565b906003198483030160c4850152611ebe565b03917f0000000000000000000000000000000000000000000000000000000000000000165afa80156108c8575f90611908575b6020907fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b506020813d60201161195c575b8161192260209383611e7f565b8101031261017857517fffffffff0000000000000000000000000000000000000000000000000000000081168103610178576020906118db565b3d9150611915565b82518452899550602093840193909201916001016117c2565b91506020823d6020116119ab575b8161199860209383611e7f565b81010312610178579051906117996116e3565b3d915061198b565b81518152602091820191016115eb565b3461017857610260600319360112610178576119dd611dd0565b506119e6611de6565b5067ffffffffffffffff60a43581811161017857611a08903690600401611dfc565b919060c43582811161017857611a22903690600401611dfc565b505061018092837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c36011261017857611a5a91611fc8565b916101643592836080820180518211611c79575b5050604051611b2381611b156020820194859190916101808101926001600160a01b038082511683528060208301511660208401526040820151166040830152606081015160608301526080810151608083015263ffffffff60a08201511660a083015260c081015160c083015260e081015160e0830152610100808201519083015261012080820151151590830152610140808201519083015261016080910151910152565b03601f198101835282611e7f565b51902090604051602081019460e4356001600160a01b0390818116809103610178578752610104358181168091036101785760408401526101243590811680910361017857606083015261014435608083015260a08201526101843563ffffffff81168091036101785760c08201526101a492833560e08301526101c49081356101008401526101e49687356101208501526102049485358015158091036101785761014086015261022435610160860152610244358186015284526101a084019687118488101761093757866040528351902003611bfe57005b608495602f7f566572696679206f7264657220646f6573206e6f74206d6174636820776974689260207f206578697374696e67206f726465720000000000000000000000000000000000977f8d8a6110000000000000000000000000000000000000000000000000000000008a528601528401528201520152fd5b528385611a6e565b3461017857602060031936011261017857600435907fffffffff000000000000000000000000000000000000000000000000000000008216809203610178577f62af8dc2000000000000000000000000000000000000000000000000000000008214611da857817f14a2a7840000000000000000000000000000000000000000000000000000000060209314908115611d7e575b8115611d54575b8115611d2a575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483611d23565b7f1626ba7e0000000000000000000000000000000000000000000000000000000081149150611d1c565b7fb8296fc40000000000000000000000000000000000000000000000000000000081149150611d15565b7f32798566000000000000000000000000000000000000000000000000000000005f5260045ffd5b600435906001600160a01b038216820361017857565b602435906001600160a01b038216820361017857565b9181601f840112156101785782359167ffffffffffffffff8311610178576020838186019501011161017857565b610180810190811067ffffffffffffffff82111761093757604052565b6060810190811067ffffffffffffffff82111761093757604052565b6080810190811067ffffffffffffffff82111761093757604052565b90601f601f19910116810190811067ffffffffffffffff82111761093757604052565b67ffffffffffffffff811161093757601f01601f191660200190565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b51906001600160a01b038216820361017857565b81601f8201121561017857805190611f0e82611ea2565b92611f1c6040519485611e7f565b8284526020838301011161017857815f9260208093018386015e8301015290565b9060606040611f6d936001600160a01b038151168452602081015160208501520151918160408201520190611ebe565b90565b60405190611f7d82611e2a565b5f610160838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b9081602091611fd5611f70565b508101031261017857356001600160a01b03811680910361017857611f6d90612187565b9190820391821161200657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0fbcbe35dc18af34468b6ca6da71553ba95c937d09fc996a91b8dfc6ce5cbc5a926060926040519160208301927f095ea7b300000000000000000000000000000000000000000000000000000000908185526001600160a01b039460205f877f00000000000000000000000000000000000000000000000000000000000000001692836024860152816044860152604485526120cf85611e63565b845190828b5af15f513d82612169575b50501561212c575b505050612118818385871696875f5260036020525f600360408220828155826001820155826002820155015561262b565b6040519384526020840152166040820152a1565b6121619261215b9160405191602083015260248201525f60448201526044815261215581611e63565b8761280a565b8561280a565b5f80806120e7565b90915061217f57508587163b15155b5f806120df565b600114612178565b61218f611f70565b506001600160a01b0380911690815f52602090600382526040805f2060038251926121b984611e63565b848354168452846001840154169486850195865260028401549382860194855263ffffffff9384910154169460608101958087521561232b5781905116955116918151937f70a0823100000000000000000000000000000000000000000000000000000000855230600486015287856024818c5afa948515612321575f956122f2575b5051945116947f0000000000000000000000000000000000000000000000000000000000000000968251986122708a611e2a565b89528801528601526060850152608084015260a08301527f000000000000000000000000000000000000000000000000000000000000000060c08301525f60e08301527f000000000000000000000000000000000000000000000000000000000000000061010083015260016101208301528061014083015261016082015290565b9094508781813d831161231a575b61230a8183611e7f565b810103126101785751935f61223c565b503d612300565b83513d5f823e3d90fd5b6064888451907fc8fc27250000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4f7264657220646f6573206e6f742065786973740000000000000000000000006044820152fd5b6001600160a01b035f54163303610f0d57565b156123a257565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d696e20616d6f756e74206f7574206973207a65726f000000000000000000006044820152fd5b421161240857565b60646040517f8d8a611000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f446561646c696e6520697320696e2074686520706173740000000000000000006044820152fd5b6040519160205f8185016124bc866118287f095ea7b300000000000000000000000000000000000000000000000000000000998a85528760248401602090939291936001600160a01b0360408201951681520152565b85519082865af15f513d82612520575b5050156124da575b50505050565b612517936001600160a01b03612512926040519260208401521660248201525f60448201526044815261250c81611e63565b8261280a565b61280a565b5f8080806124d4565b90915061253d57506001600160a01b0382163b15155b5f806124cc565b600114612536565b6001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001691604091825191166020820152602081528181019267ffffffffffffffff9180851083861117610937578484526125a685611e47565b3085525f60608201526080810152803b15610178576125fe5f9491859285519687809481937f6bfae1ca0000000000000000000000000000000000000000000000000000000083528960048401526044830190611f3d565b6001602483015203925af180156126215761261857505050565b82116109375752565b82513d5f823e3d90fd5b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b039092166024830152604482019290925261267d91612512826064810161178b565b565b6001600160a01b031690815f52600360205263ffffffff600360405f20015416801561273d576020602493604051948580927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa9283156108c8575f93612709575b50826126f7575060029190565b42116127035760019190565b60039190565b9092506020813d602011612735575b8161272560209383611e7f565b810103126101785751915f6126ea565b3d9150612718565b505f91508190565b6001600160a01b03909291921691825f52600360205263ffffffff600360405f2001541692831561280057906020602492604051938480927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa80156108c8575f906127cc575b6127bf9250611ff9565b91826126f7575060029190565b506020823d6020116127f8575b816127e660209383611e7f565b81010312610178576127bf91516127b5565b3d91506127d9565b505090505f905f90565b905f602091828151910182855af1156108c8575f513d61286e57506001600160a01b0381163b155b6128395750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6001141561283256fea26469706673582212209d7552bdbf91926dc34e36927c2968116a3141dcd8dc11b543be7c1c2655140d64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x1C81 JUMPI POP DUP1 PUSH4 0x14A2A784 EQ PUSH2 0x19C3 JUMPI DUP1 PUSH4 0x1626BA7E EQ PUSH2 0x1433 JUMPI DUP1 PUSH4 0x178AC96E EQ PUSH2 0x13F0 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x12B0 JUMPI DUP1 PUSH4 0x60E092C6 EQ PUSH2 0x1179 JUMPI DUP1 PUSH4 0x68BCE712 EQ PUSH2 0x1013 JUMPI DUP1 PUSH4 0x6EBA2B13 EQ PUSH2 0xFE6 JUMPI DUP1 PUSH4 0x6F9D75CD EQ PUSH2 0xFB1 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xF39 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xE8F JUMPI DUP1 PUSH4 0x8AEBD348 EQ PUSH2 0xE55 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xE30 JUMPI DUP1 PUSH4 0x93504C52 EQ PUSH2 0xDED JUMPI DUP1 PUSH4 0x9B552CC2 EQ PUSH2 0xDAA JUMPI DUP1 PUSH4 0xB8296FC4 EQ PUSH2 0xC9D JUMPI DUP1 PUSH4 0xD83B06A4 EQ PUSH2 0x9F0 JUMPI DUP1 PUSH4 0xDE557A32 EQ PUSH2 0x1A2 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x17C JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0xF8 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x111 PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x119 PUSH2 0x2388 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x1BB PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA4 CALLDATALOAD AND PUSH1 0xA4 CALLDATALOAD SUB PUSH2 0x178 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x9C8 JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x9A0 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 DUP4 PUSH1 0x4 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP4 PUSH2 0x964 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE DUP1 PUSH1 0xA0 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP4 ADD GT OR PUSH2 0x937 JUMPI DUP1 PUSH1 0xA0 PUSH2 0x320 SWAP3 ADD PUSH1 0x40 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x280A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP3 PUSH2 0x902 JUMPI JUMPDEST POP PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x64 PUSH0 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x4 DUP6 ADD MSTORE ADDRESS PUSH1 0x24 DUP6 ADD MSTORE ADDRESS PUSH1 0x44 DUP6 ADD MSTORE AND GAS CALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH2 0x8D3 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP1 PUSH2 0x894 JUMPI JUMPDEST PUSH2 0x420 SWAP3 POP PUSH2 0x1FF9 JUMP JUMPDEST SWAP3 PUSH1 0x84 CALLDATALOAD PUSH1 0x80 SHR DUP5 LT ISZERO PUSH2 0x470 JUMPI DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x80 SHR PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP4 ISZERO PUSH2 0x85F JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EQ PUSH0 EQ PUSH2 0x53B JUMPI POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND DUP4 LT PUSH2 0x4EA JUMPI POP SWAP1 PUSH2 0x4C5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA4 CALLDATALOAD SWAP2 AND PUSH2 0x262B JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 POP PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST SWAP2 SWAP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EQ PUSH0 EQ PUSH2 0x5DD JUMPI PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616E642074617267657420746F6B656E206172652074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x68652073616D6500000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST DUP2 ISZERO PUSH2 0x801 JUMPI PUSH2 0x600 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND PUSH2 0x239B JUMP JUMPDEST PUSH2 0x60B PUSH1 0xC4 CALLDATALOAD PUSH2 0x2400 JUMP JUMPDEST PUSH2 0x61E DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH2 0x2745 JUMP JUMPDEST POP PUSH1 0x4 DUP2 LT ISZERO DUP1 PUSH2 0x7C7 JUMPI DUP2 ISZERO ISZERO DUP1 PUSH2 0x7F4 JUMPI JUMPDEST PUSH2 0x798 JUMPI POP POP PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP1 PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP5 PUSH2 0x671 DUP3 DUP11 AND PUSH2 0x2545 JUMP JUMPDEST PUSH2 0x69E DUP8 PUSH32 0x0 DUP5 DUP13 AND PUSH2 0x2466 JUMP JUMPDEST DUP9 PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 MLOAD PUSH2 0x6B2 DUP2 PUSH2 0x1E63 JUMP JUMPDEST DUP6 DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 PUSH1 0xA4 CALLDATALOAD AND DUP2 MSTORE PUSH1 0x40 DUP3 ADD SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND DUP3 MSTORE DUP8 DUP12 DUP5 ADD SWAP7 DUP7 PUSH1 0xC4 CALLDATALOAD AND DUP9 MSTORE AND PUSH0 MSTORE DUP4 PUSH1 0x20 MSTORE DUP8 PUSH1 0x40 PUSH0 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 SLOAD AND OR DUP5 SSTORE DUP9 PUSH1 0x1 DUP6 ADD SWAP3 MLOAD AND SWAP1 DUP3 SLOAD AND OR SWAP1 SSTORE MLOAD PUSH1 0x2 DUP3 ADD SSTORE ADD SWAP2 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD AND PUSH1 0x20 DUP9 ADD MSTORE DUP2 PUSH1 0xA4 CALLDATALOAD AND PUSH1 0x40 DUP9 ADD MSTORE AND SWAP7 AND SWAP5 AND SWAP3 LOG4 PUSH2 0x4C5 JUMP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH2 0x7C7 JUMPI PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP PUSH0 PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x632 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46656520746F6B656E20616D6F756E74206973207A65726F0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 PUSH32 0x5DB1DD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x8C0 JUMPI JUMPDEST DUP2 PUSH2 0x8AE PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x420 SWAP2 MLOAD PUSH2 0x416 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x8A1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x8FA JUMPI JUMPDEST DUP2 PUSH2 0x8EC PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD PUSH2 0x3C9 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x8DF JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x92F JUMPI JUMPDEST DUP2 PUSH2 0x91E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP1 PUSH1 0x20 PUSH2 0x36D JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x911 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x998 JUMPI JUMPDEST DUP2 PUSH2 0x980 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x991 SWAP1 PUSH2 0x1EE3 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x2AB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x973 JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xA09 PUSH2 0x1DD0 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0xC65 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0xC58 JUMPI JUMPDEST PUSH2 0x9C8 JUMPI PUSH2 0xA92 DUP6 PUSH2 0x267F JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x3 DUP2 SUB PUSH2 0xC2D JUMPI POP PUSH2 0xAAF DUP4 PUSH2 0x239B JUMP JUMPDEST PUSH2 0xAB8 DUP5 PUSH2 0x2400 JUMP JUMPDEST DUP5 DUP7 AND SWAP5 DUP6 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH1 0x2 DUP3 ADD SSTORE ADD PUSH4 0xFFFFFFFF DUP7 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0x0 SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x44 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP2 PUSH2 0xBCF JUMPI JUMPDEST POP PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A SWAP8 DUP5 SWAP4 SWAP3 DUP5 PUSH1 0x80 SWAP10 SWAP9 SWAP8 SWAP7 PUSH2 0xBA8 SWAP5 LT PUSH2 0xBBE JUMPI JUMPDEST POP POP PUSH2 0x2545 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE LOG1 STOP JUMPDEST PUSH2 0xBC8 SWAP2 DUP4 PUSH2 0x2466 JUMP JUMPDEST DUP10 DUP5 PUSH2 0xBA1 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 SWAP4 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 RETURNDATASIZE DUP4 GT PUSH2 0xC26 JUMPI JUMPDEST PUSH2 0xBEC DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP5 SWAP6 SWAP4 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH32 0x1C5203F5BD3B302669F961B1035B0A6EC649F05BA67F3024A07E67CE4332898A PUSH2 0xB6A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xBE2 JUMP JUMPDEST PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0xA85 JUMP JUMPDEST DUP1 SWAP3 POP DUP4 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xC96 JUMPI JUMPDEST PUSH2 0xC7E DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0xC90 DUP6 SWAP2 PUSH2 0x1EE3 JUMP JUMPDEST DUP8 PUSH2 0xA7A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xC74 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xCB6 PUSH2 0x1DD0 JUMP JUMPDEST POP PUSH2 0xCBF PUSH2 0x1DE6 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x178 JUMPI PUSH2 0xCE1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST PUSH1 0x84 SWAP3 SWAP2 SWAP3 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x178 JUMPI PUSH2 0xDA6 SWAP3 PUSH2 0xD03 PUSH2 0xD0A SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST POP POP PUSH2 0x1FC8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB CALLER DUP2 DUP4 AND SUB PUSH2 0xF0D JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xF51 PUSH2 0x2388 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xFD2 PUSH2 0xFCD PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x267F JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x20 SWAP2 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0xDA6 PUSH2 0xD0A PUSH2 0x1005 PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x100D PUSH2 0x1F70 JUMP JUMPDEST POP PUSH2 0x2187 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x102C PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x1034 PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x20 SWAP3 SWAP2 DUP4 DUP2 PUSH1 0x4 DUP2 PUSH32 0x0 DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0x1141 JUMPI JUMPDEST POP AND CALLER EQ ISZERO DUP1 PUSH2 0x1134 JUMPI JUMPDEST PUSH2 0x9C8 JUMPI DUP3 PUSH1 0x24 SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP4 PUSH2 0x1102 JUMPI JUMPDEST POP PUSH2 0x1100 SWAP4 POP PUSH2 0x2033 JUMP JUMPDEST STOP JUMPDEST SWAP1 SWAP3 POP DUP4 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x112D JUMPI JUMPDEST PUSH2 0x1119 DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x1100 SWAP3 MLOAD SWAP2 DUP5 PUSH2 0x10F5 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x110F JUMP JUMPDEST POP DUP4 PUSH0 SLOAD AND CALLER EQ ISZERO PUSH2 0x10AB JUMP JUMPDEST DUP1 SWAP3 POP DUP6 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1172 JUMPI JUMPDEST PUSH2 0x115A DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x116C DUP6 SWAP2 PUSH2 0x1EE3 JUMP JUMPDEST DUP7 PUSH2 0x10A0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1150 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x1192 PUSH2 0x1DD0 JUMP JUMPDEST PUSH2 0x119A PUSH2 0x1DE6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1274 JUMPI JUMPDEST POP AND CALLER EQ ISZERO SWAP1 DUP2 PUSH2 0x1266 JUMPI JUMPDEST POP PUSH2 0x9C8 JUMPI PUSH2 0x121C DUP3 PUSH2 0x267F JUMP JUMPDEST SWAP2 SWAP1 SWAP3 PUSH1 0x4 DUP5 LT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x3 DUP5 SUB PUSH2 0x123A JUMPI PUSH2 0x1100 SWAP4 POP PUSH2 0x2033 JUMP JUMPDEST DUP4 PUSH32 0xD0C1B3CF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH0 SLOAD AND CALLER EQ ISZERO DUP4 PUSH2 0x120E JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x12A8 JUMPI JUMPDEST DUP2 PUSH2 0x1290 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x12A2 DUP3 SWAP2 PUSH2 0x1EE3 JUMP JUMPDEST DUP6 PUSH2 0x1202 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1283 JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH1 0x2 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x13E6 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x13B9 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x137B JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1320 JUMPI JUMPDEST POP PUSH2 0x130C SWAP3 POP SUB DUP4 PUSH2 0x1E7F JUMP JUMPDEST PUSH2 0xDA6 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1EBE JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x2 PUSH0 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x1363 JUMPI POP POP PUSH2 0x130C SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x12FF JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x134C JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0x130C SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x12FF SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0x12DB JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT PUSH2 0x178 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x178 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x1471 DUP4 PUSH2 0x1EA2 JUMP JUMPDEST SWAP3 PUSH2 0x147F PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1E7F JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP2 CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0x178 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH1 0x20 SWAP4 ADD DUP6 CALLDATACOPY DUP6 ADD ADD MSTORE DUP3 MLOAD DUP4 ADD SWAP2 PUSH1 0x20 DUP4 ADD SWAP4 DUP1 DUP5 SUB PUSH2 0x1A0 SWAP1 DUP2 DUP2 SLT PUSH2 0x178 JUMPI PUSH2 0x180 DUP1 SWAP2 SLT PUSH2 0x178 JUMPI PUSH2 0x14D9 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x14D4 DUP8 PUSH2 0x1E2A JUMP JUMPDEST PUSH2 0x1EE3 JUMP JUMPDEST DUP6 MSTORE PUSH2 0x14E7 PUSH1 0x40 DUP5 ADD PUSH2 0x1EE3 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x14F8 PUSH1 0x60 DUP5 ADD PUSH2 0x1EE3 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP5 ADD MLOAD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x120 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH2 0x140 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x178 JUMPI DUP8 ADD MSTORE PUSH2 0x160 SWAP2 DUP3 DUP6 ADD MLOAD SWAP1 DUP8 ADD MSTORE DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x178 JUMPI ADD SWAP4 PUSH1 0x60 DUP6 DUP6 SUB SLT PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH2 0x1597 DUP7 PUSH2 0x1E47 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x178 JUMPI DUP2 ADD DUP3 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x178 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP5 DUP3 GT PUSH2 0x937 JUMPI DUP2 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP3 PUSH2 0x15D2 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1E7F JUMP JUMPDEST DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD SWAP2 DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x178 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x19B3 JUMPI POP POP POP DUP7 MSTORE PUSH1 0x40 DUP2 ADD MLOAD DUP4 DUP2 GT PUSH2 0x178 JUMPI PUSH1 0x60 SWAP1 DUP3 ADD DUP1 SWAP7 SUB SLT PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD PUSH2 0x161C DUP2 PUSH2 0x1E47 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI DUP3 MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD DUP6 DUP2 GT PUSH2 0x178 JUMPI PUSH1 0x20 DUP6 SWAP2 PUSH2 0x165B SWAP4 ADD ADD PUSH2 0x1EF7 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP3 DUP4 GT PUSH2 0x178 JUMPI PUSH2 0x167E SWAP3 ADD PUSH1 0x20 ADD PUSH2 0x1EF7 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF698DA2500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP3 PUSH2 0x197D JUMPI JUMPDEST POP SWAP1 PUSH2 0x1799 PUSH2 0x178B SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x1E7F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 PUSH1 0x20 DUP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP2 MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP6 ADD MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0xC0 DUP6 ADD SWAP3 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1964 JUMPI DUP6 PUSH1 0x20 PUSH2 0x1896 DUP12 DUP12 DUP12 PUSH2 0x1836 DUP7 PUSH2 0x1828 DUP14 DUP14 PUSH1 0x40 PUSH2 0x1816 DUP12 DUP5 ADD MLOAD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 SWAP4 DUP5 DUP9 DUP4 SUB ADD PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x1F3D JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1EBE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP9 MSTORE DUP8 PUSH2 0x1E7F JUMP JUMPDEST PUSH2 0x18A8 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP5 PUSH32 0x53F00B1400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE ADDRESS PUSH1 0x4 DUP8 ADD MSTORE CALLER PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0x44 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD MSTORE PUSH0 PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0xE0 PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xE4 DUP6 ADD SWAP1 PUSH2 0x1EBE JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0xC4 DUP6 ADD MSTORE PUSH2 0x1EBE JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP1 PUSH2 0x1908 JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x195C JUMPI JUMPDEST DUP2 PUSH2 0x1922 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x178 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x18DB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1915 JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE DUP10 SWAP6 POP PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x17C2 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x19AB JUMPI JUMPDEST DUP2 PUSH2 0x1998 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI SWAP1 MLOAD SWAP1 PUSH2 0x1799 PUSH2 0x16E3 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x198B JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x15EB JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH2 0x260 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x19DD PUSH2 0x1DD0 JUMP JUMPDEST POP PUSH2 0x19E6 PUSH2 0x1DE6 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x178 JUMPI PUSH2 0x1A08 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x178 JUMPI PUSH2 0x1A22 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1DFC JUMP JUMPDEST POP POP PUSH2 0x180 SWAP3 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH2 0x1A5A SWAP2 PUSH2 0x1FC8 JUMP JUMPDEST SWAP2 PUSH2 0x164 CALLDATALOAD SWAP3 DUP4 PUSH1 0x80 DUP3 ADD DUP1 MLOAD DUP3 GT PUSH2 0x1C79 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH2 0x1B23 DUP2 PUSH2 0x1B15 PUSH1 0x20 DUP3 ADD SWAP5 DUP6 SWAP2 SWAP1 SWAP2 PUSH2 0x180 DUP2 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 DUP1 DUP3 ADD MLOAD SWAP1 DUP4 ADD MSTORE PUSH2 0x160 DUP1 SWAP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1E7F JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP5 PUSH1 0xE4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI DUP8 MSTORE PUSH2 0x104 CALLDATALOAD DUP2 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x124 CALLDATALOAD SWAP1 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x184 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1A4 SWAP3 DUP4 CALLDATALOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x1C4 SWAP1 DUP2 CALLDATALOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x1E4 SWAP7 DUP8 CALLDATALOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x204 SWAP5 DUP6 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH2 0x140 DUP7 ADD MSTORE PUSH2 0x224 CALLDATALOAD PUSH2 0x160 DUP7 ADD MSTORE PUSH2 0x244 CALLDATALOAD DUP2 DUP7 ADD MSTORE DUP5 MSTORE PUSH2 0x1A0 DUP5 ADD SWAP7 DUP8 GT DUP5 DUP9 LT OR PUSH2 0x937 JUMPI DUP7 PUSH1 0x40 MSTORE DUP4 MLOAD SWAP1 KECCAK256 SUB PUSH2 0x1BFE JUMPI STOP JUMPDEST PUSH1 0x84 SWAP6 PUSH1 0x2F PUSH32 0x566572696679206F7264657220646F6573206E6F74206D617463682077697468 SWAP3 PUSH1 0x20 PUSH32 0x206578697374696E67206F726465720000000000000000000000000000000000 SWAP8 PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP7 ADD MSTORE DUP5 ADD MSTORE DUP3 ADD MSTORE ADD MSTORE REVERT JUMPDEST MSTORE DUP4 DUP6 PUSH2 0x1A6E JUMP JUMPDEST CALLVALUE PUSH2 0x178 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x178 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x178 JUMPI PUSH32 0x62AF8DC200000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x1DA8 JUMPI DUP2 PUSH32 0x14A2A78400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP4 EQ SWAP1 DUP2 ISZERO PUSH2 0x1D7E JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1D54 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x1D2A JUMPI JUMPDEST POP ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ DUP4 PUSH2 0x1D23 JUMP JUMPDEST PUSH32 0x1626BA7E00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1D1C JUMP JUMPDEST PUSH32 0xB8296FC400000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x1D15 JUMP JUMPDEST PUSH32 0x3279856600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x178 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x178 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x178 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x178 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x178 JUMPI JUMP JUMPDEST PUSH2 0x180 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x937 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x937 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x178 JUMPI JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x178 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1F0E DUP3 PUSH2 0x1EA2 JUMP JUMPDEST SWAP3 PUSH2 0x1F1C PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1E7F JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x178 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x60 PUSH1 0x40 PUSH2 0x1F6D SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP6 ADD MSTORE ADD MLOAD SWAP2 DUP2 PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1EBE JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1F7D DUP3 PUSH2 0x1E2A JUMP JUMPDEST PUSH0 PUSH2 0x160 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE DUP3 PUSH2 0x140 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 PUSH2 0x1FD5 PUSH2 0x1F70 JUMP JUMPDEST POP DUP2 ADD SUB SLT PUSH2 0x178 JUMPI CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 SWAP2 SUB PUSH2 0x178 JUMPI PUSH2 0x1F6D SWAP1 PUSH2 0x2187 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x2006 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFBCBE35DC18AF34468B6CA6DA71553BA95C937D09FC996A91B8DFC6CE5CBC5A SWAP3 PUSH1 0x60 SWAP3 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD SWAP3 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP6 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH1 0x20 PUSH0 DUP8 PUSH32 0x0 AND SWAP3 DUP4 PUSH1 0x24 DUP7 ADD MSTORE DUP2 PUSH1 0x44 DUP7 ADD MSTORE PUSH1 0x44 DUP6 MSTORE PUSH2 0x20CF DUP6 PUSH2 0x1E63 JUMP JUMPDEST DUP5 MLOAD SWAP1 DUP3 DUP12 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x2169 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x212C JUMPI JUMPDEST POP POP POP PUSH2 0x2118 DUP2 DUP4 DUP6 DUP8 AND SWAP7 DUP8 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x3 PUSH1 0x40 DUP3 KECCAK256 DUP3 DUP2 SSTORE DUP3 PUSH1 0x1 DUP3 ADD SSTORE DUP3 PUSH1 0x2 DUP3 ADD SSTORE ADD SSTORE PUSH2 0x262B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE LOG1 JUMP JUMPDEST PUSH2 0x2161 SWAP3 PUSH2 0x215B SWAP2 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x2155 DUP2 PUSH2 0x1E63 JUMP JUMPDEST DUP8 PUSH2 0x280A JUMP JUMPDEST DUP6 PUSH2 0x280A JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x20E7 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x217F JUMPI POP DUP6 DUP8 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x20DF JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x2178 JUMP JUMPDEST PUSH2 0x218F PUSH2 0x1F70 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH1 0x3 DUP3 MLOAD SWAP3 PUSH2 0x21B9 DUP5 PUSH2 0x1E63 JUMP JUMPDEST DUP5 DUP4 SLOAD AND DUP5 MSTORE DUP5 PUSH1 0x1 DUP5 ADD SLOAD AND SWAP5 DUP7 DUP6 ADD SWAP6 DUP7 MSTORE PUSH1 0x2 DUP5 ADD SLOAD SWAP4 DUP3 DUP7 ADD SWAP5 DUP6 MSTORE PUSH4 0xFFFFFFFF SWAP4 DUP5 SWAP2 ADD SLOAD AND SWAP5 PUSH1 0x60 DUP2 ADD SWAP6 DUP1 DUP8 MSTORE ISZERO PUSH2 0x232B JUMPI DUP2 SWAP1 MLOAD AND SWAP6 MLOAD AND SWAP2 DUP2 MLOAD SWAP4 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS PUSH1 0x4 DUP7 ADD MSTORE DUP8 DUP6 PUSH1 0x24 DUP2 DUP13 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x2321 JUMPI PUSH0 SWAP6 PUSH2 0x22F2 JUMPI JUMPDEST POP MLOAD SWAP5 MLOAD AND SWAP5 PUSH32 0x0 SWAP7 DUP3 MLOAD SWAP9 PUSH2 0x2270 DUP11 PUSH2 0x1E2A JUMP JUMPDEST DUP10 MSTORE DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH32 0x0 PUSH1 0xC0 DUP4 ADD MSTORE PUSH0 PUSH1 0xE0 DUP4 ADD MSTORE PUSH32 0x0 PUSH2 0x100 DUP4 ADD MSTORE PUSH1 0x1 PUSH2 0x120 DUP4 ADD MSTORE DUP1 PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x231A JUMPI JUMPDEST PUSH2 0x230A DUP2 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x223C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2300 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 DUP9 DUP5 MLOAD SWAP1 PUSH32 0xC8FC272500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F7264657220646F6573206E6F74206578697374000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND CALLER SUB PUSH2 0xF0D JUMPI JUMP JUMPDEST ISZERO PUSH2 0x23A2 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D696E20616D6F756E74206F7574206973207A65726F00000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST TIMESTAMP GT PUSH2 0x2408 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8D8A611000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x446561646C696E6520697320696E207468652070617374000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 PUSH0 DUP2 DUP6 ADD PUSH2 0x24BC DUP7 PUSH2 0x1828 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP10 DUP11 DUP6 MSTORE DUP8 PUSH1 0x24 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST DUP6 MLOAD SWAP1 DUP3 DUP7 GAS CALL PUSH0 MLOAD RETURNDATASIZE DUP3 PUSH2 0x2520 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x24DA JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x2517 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2512 SWAP3 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH0 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x250C DUP2 PUSH2 0x1E63 JUMP JUMPDEST DUP3 PUSH2 0x280A JUMP JUMPDEST PUSH2 0x280A JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 PUSH2 0x24D4 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x253D JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x24CC JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x2536 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP2 PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE DUP2 DUP2 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP1 DUP6 LT DUP4 DUP7 GT OR PUSH2 0x937 JUMPI DUP5 DUP5 MSTORE PUSH2 0x25A6 DUP6 PUSH2 0x1E47 JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD MSTORE DUP1 EXTCODESIZE ISZERO PUSH2 0x178 JUMPI PUSH2 0x25FE PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x6BFAE1CA00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x1F3D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x2621 JUMPI PUSH2 0x2618 JUMPI POP POP POP JUMP JUMPDEST DUP3 GT PUSH2 0x937 JUMPI MSTORE JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH2 0x267D SWAP2 PUSH2 0x2512 DUP3 PUSH1 0x64 DUP2 ADD PUSH2 0x178B JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND DUP1 ISZERO PUSH2 0x273D JUMPI PUSH1 0x20 PUSH1 0x24 SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP4 PUSH2 0x2709 JUMPI JUMPDEST POP DUP3 PUSH2 0x26F7 JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST TIMESTAMP GT PUSH2 0x2703 JUMPI PUSH1 0x1 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2735 JUMPI JUMPDEST DUP2 PUSH2 0x2725 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x26EA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2718 JUMP JUMPDEST POP PUSH0 SWAP2 POP DUP2 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 SWAP2 SWAP3 AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH4 0xFFFFFFFF PUSH1 0x3 PUSH1 0x40 PUSH0 KECCAK256 ADD SLOAD AND SWAP3 DUP4 ISZERO PUSH2 0x2800 JUMPI SWAP1 PUSH1 0x20 PUSH1 0x24 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL DUP1 ISZERO PUSH2 0x8C8 JUMPI PUSH0 SWAP1 PUSH2 0x27CC JUMPI JUMPDEST PUSH2 0x27BF SWAP3 POP PUSH2 0x1FF9 JUMP JUMPDEST SWAP2 DUP3 PUSH2 0x26F7 JUMPI POP PUSH1 0x2 SWAP2 SWAP1 JUMP JUMPDEST POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x27F8 JUMPI JUMPDEST DUP2 PUSH2 0x27E6 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1E7F JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x178 JUMPI PUSH2 0x27BF SWAP2 MLOAD PUSH2 0x27B5 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x27D9 JUMP JUMPDEST POP POP SWAP1 POP PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 PUSH1 0x20 SWAP2 DUP3 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL ISZERO PUSH2 0x8C8 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x286E JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x2839 JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x2832 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 PUSH22 0x52BDBF91926DC34E36927C2968116A3141DCD8DC11B5 NUMBER 0xBE PUSH29 0x1C2655140D64736F6C634300081B003300000000000000000000000000 ","sourceMap":"1248:3961:76:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:76;;;;;;;:::i;:::-;1500:62:48;;:::i;:::-;-1:-1:-1;;;;;1248:3961:76;;;;;;1738:24:49;1248:3961:76;;;1738:24:49;1248:3961:76;;;;1777:43:49;1248:3961:76;1777:43:49;;1248:3961:76;;;;;;;;;;-1:-1:-1;;1248:3961:76;;;;;;-1:-1:-1;;;;;1311:13:49;1248:3961:76;;;;;;;;;;;;;-1:-1:-1;;1248:3961:76;;;;;;;:::i;:::-;;;:::i;:::-;;;-1:-1:-1;;;;;1248:3961:76;;;;;;-1:-1:-1;;;;;1248:3961:76;;;;;;;;-1:-1:-1;;;;;799:18:77;1248:3961:76;777:10:77;:41;773:97;;551:66:41;2806:53:42;1316:93:41;;1248:3961:76;551:66:41;3051:52:42;1248:3961:76;;3212:20;1248:3961;3212:20;;1248:3961;;;;-1:-1:-1;;;;;1248:3961:76;;3212:20;;;;;;;1248:3961;3212:20;;;1248:3961;;;;;;1745:53:59;;;777:10:77;1745:53:59;;;1248:3961:76;3459:4;1248:3961;;;;;;;;;;;1745:53:59;;1248:3961:76;;;;;;;;;;;;;;;1745:53:59;1248:3961:76;;;;-1:-1:-1;;;;;1248:3961:76;;1745:53:59;:::i;:::-;1248:3961:76;;3696:40;1248:3961;3696:40;;3459:4;1248:3961;3696:40;;1248:3961;;;1745:53:59;1248:3961:76;-1:-1:-1;;;;;1248:3961:76;;3696:40;;;;;;;1248:3961;3696:40;;;1248:3961;;;-1:-1:-1;;;;;1248:3961:76;;;;;3747:72;;;;;1248:3961;3747:72;;1248:3961;;;3747:72;;1248:3961;3459:4;1745:53:59;1248:3961:76;;;3459:4;1248:3961;;;;;3747:72;;;;;;;;1248:3961;;;;3861:40;1248:3961;3861:40;;3459:4;1248:3961;3861:40;;1248:3961;;;1745:53:59;1248:3961:76;-1:-1:-1;;;;;1248:3961:76;;3861:40;;;;;;1248:3961;3861:40;;;1248:3961;3935:44;;;;:::i;:::-;1248:3961;;;;;3994:43;;1248:3961;;;4060:78;-1:-1:-1;;;;;4060:78:76;;1248:3961;4060:78;1248:3961;;;1745:53:59;1248:3961:76;;;;;;;;;4060:78;3990:261;4159:26;;4155:96;;-1:-1:-1;;;;;1248:3961:76;;-1:-1:-1;;;;;1248:3961:76;;4484:30;4480:721;1248:3961;;;;1237:14:35;1248:3961:76;;1460:31:35;4644:47:76;;4640:171;;1248:3961;;4865:21;1248:3961;-1:-1:-1;;;;;1248:3961:76;;;;4865:21;:::i;:::-;1248:3961;551:66:41;3051:52:42;1248:3961:76;4640:171;-1:-1:-1;;;;;4718:78:76;;;1248:3961;4718:78;1248:3961;;;1745:53:59;1248:3961:76;1237:14:35;1248:3961:76;;1460:31:35;1248:3961:76;;;;4718:78;4480:721;1248:3961;;;-1:-1:-1;;;;;1248:3961:76;;-1:-1:-1;;;;;1248:3961:76;;6365:23:75;6361:239;1248:3961:76;;;;;;6411:65:75;;;1248:3961:76;;6411:65:75;;1248:3961:76;;1745:53:59;1248:3961:76;;;;;;;;;;;;;6411:65:75;6361:239;6497:19;;6493:107;;6629:23;1237:14:35;1248:3961:76;;1460:31:35;6629:23:75;:::i;:::-;6678:8;1248:3961:76;;6678:8:75;:::i;:::-;6844:51;1248:3961:76;-1:-1:-1;;;;;1248:3961:76;;6844:51:75;:::i;:::-;1248:3961:76;;;;;;;;6909:33:75;;;:65;;;6361:239;6905:310;;1248:3961:76;;;-1:-1:-1;;;;;1248:3961:76;;7540:98:75;1248:3961:76;7241:8:75;1248:3961:76;;;7241:8:75;:::i;:::-;7297:14;7283:12;;1248:3961:76;;;7297:14:75;:::i;:::-;1248:3961:76;;7323:7:75;1248:3961:76;;;;;:::i;:::-;;;;;;;7343:181:75;;1248:3961:76;;;;;;;7343:181:75;;1248:3961:76;1237:14:35;1248:3961:76;;1460:31:35;1248:3961:76;;7343:181:75;;;;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1237:14:35;1248:3961:76;;1460:31:35;1248:3961:76;;;;;;;;;;;;;;;;;7540:98:75;;4480:721:76;;6905:310:75;7172:32;1248:3961:76;7172:32:75;1248:3961:76;;;;1745:53:59;1248:3961:76;7172:32:75;1248:3961:76;;;;;;;1745:53:59;1248:3961:76;;6909:65:75;1248:3961:76;;;6956:18:75;6946:28;;;6909:65;;6493:107;1248:3961:76;;;6539:50:75;;;1248:3961:76;;6539:50:75;;1248:3961:76;;1745:53:59;1248:3961:76;;;;;;;;6539:50:75;4155:96:76;-1:-1:-1;;;;;4208:32:76;;1248:3961;4208:32;1248:3961;;;1745:53:59;1248:3961:76;4208:32;3861:40;;1248:3961;3861:40;;1248:3961;3861:40;;;;;;1248:3961;3861:40;;;:::i;:::-;;;1248:3961;;;;3935:44;1248:3961;;3861:40;;;;;-1:-1:-1;3861:40:76;;;1248:3961;;;;;;;;;3747:72;1248:3961;3747:72;;1248:3961;3747:72;;;;;;1248:3961;3747:72;;;:::i;:::-;;;1248:3961;;;;;3747:72;;;;;-1:-1:-1;3747:72:76;;3696:40;;;;1248:3961;3696:40;;1248:3961;3696:40;;;;;;1248:3961;3696:40;;;:::i;:::-;;;1248:3961;;;;;;;3696:40;;;;;-1:-1:-1;3696:40:76;;1248:3961;;;;;;;1745:53:59;1248:3961:76;;3212:20;;;;1248:3961;3212:20;;1248:3961;3212:20;;;;;;1248:3961;3212:20;;;:::i;:::-;;;1248:3961;;;;;;;:::i;:::-;3212:20;;;;;;;-1:-1:-1;3212:20:76;;1316:93:41;1368:30;1248:3961:76;1368:30:41;1248:3961:76;;1368:30:41;773:97:77;841:18;1248:3961:76;841:18:77;1248:3961:76;;841:18:77;1248:3961:76;;;;;-1:-1:-1;;1248:3961:76;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;1248:3961:76;;;;956:36:77;;1248:3961:76;956:18:77;;;1248:3961:76;956:18:77;;;1248:3961:76;956:36:77;;;;;;;;1248:3961:76;956:36:77;;;1248:3961:76;;;942:10:77;:50;;:75;;;1248:3961:76;938:131:77;;11575:37:75;;;:::i;:::-;1248:3961:76;;;;;;;;3825:18:75;3815:28;;3811:98;;3938:12;;;;:::i;:::-;3976:8;;;:::i;:::-;1248:3961:76;;;;;;;3825:18:75;1248:3961:76;;3825:18:75;1248:3961:76;;;3996:29:75;;;;1248:3961:76;4050:25:75;1248:3961:76;;;;;;;;;;4205:12:75;1248:3961:76;;;4172:46:75;1248:3961:76;4172:46:75;;4198:4;1248:3961:76;4172:46:75;;1248:3961:76;;;;;;;4172:46:75;;1248:3961:76;4172:46:75;;;;;;;;;1248:3961:76;4172:46:75;;;1248:3961:76;4172:55:75;4346:53;4172:55;;;;;1248:3961:76;4172:55:75;;;;4322:7;4172:55;;4168:128;;1248:3961:76;4322:7:75;;;:::i;:::-;1248:3961:76;;;;;;;;;;;;;;;;4346:53:75;1248:3961:76;4168:128:75;4278:6;;;;:::i;:::-;4168:128;;;;4172:46;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1248:3961:76;;;;;4172:46:75;;;;;;1248:3961:76;;4172:46:75;;1248:3961:76;4346:53:75;4172:46;;;;;;;3811:98;3866:32;1248:3961:76;3866:32:75;1248:3961:76;;;;3866:32:75;942:75:77;1248:3961:76;;;;;942:10:77;996:21;;942:75;;956:36;;;;;;;;;;;;;;;;;;:::i;:::-;;;1248:3961:76;;;;;;;;:::i;:::-;956:36:77;;;;;;;;1248:3961:76;;;;;-1:-1:-1;;1248:3961:76;;;;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;1248:3961:76;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:76;;;;;;;;-1:-1:-1;;;;;2357:37:75;1248:3961:76;;;;;;;;;-1:-1:-1;;1248:3961:76;;;;;;;;-1:-1:-1;;;;;2306:45:75;1248:3961:76;;;;;;;;;-1:-1:-1;;1248:3961:76;;;;;;-1:-1:-1;;;;;1248:3961:76;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:76;;;;;;;;2400:32:75;1248:3961:76;;;;;;;;-1:-1:-1;;1248:3961:76;;;;;1311:13:49;1248:3961:76;-1:-1:-1;;;;;735:10:63;1248:3961:76;;;2339:24:49;2335:96;;1248:3961:76;;;;1311:13:49;1248:3961:76;;;735:10:63;;1248:3961:76;;;;;;735:10:63;1248:3961:76;;3052:40:48;1248:3961:76;3052:40:48;;1248:3961:76;2335:96:49;2386:34;1248:3961:76;2386:34:49;735:10:63;1248:3961:76;;;;2386:34:49;1248:3961:76;;;;;-1:-1:-1;;1248:3961:76;;;;;1500:62:48;;:::i;:::-;1248:3961:76;-1:-1:-1;;;;;1248:3961:76;;2093:20:49;1248:3961:76;;2093:20:49;1248:3961:76;;;;;;;;;3052:40:48;;;;1248:3961:76;;;;;;-1:-1:-1;;1248:3961:76;;;;;11575:37:75;1248:3961:76;;:::i;:::-;11575:37:75;:::i;:::-;1248:3961:76;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:76;;;;;;3348:18:75;1248:3961:76;;:::i;:::-;;;:::i;:::-;;3348:18:75;:::i;1248:3961:76:-;;;;;-1:-1:-1;;1248:3961:76;;;;;;;:::i;:::-;;;:::i;:::-;;;;956:36:77;;-1:-1:-1;;;;;1248:3961:76;;;;;;;;956:18:77;1248:3961:76;;956:36:77;;;;;;;;1248:3961:76;956:36:77;;;1248:3961:76;;;942:10:77;:50;;:75;;;1248:3961:76;938:131:77;;1248:3961:76;;;;;4969:32:75;;;;1248:3961:76;4969:32:75;;4995:4;1248:3961:76;4969:32:75;;1248:3961:76;;;4969:32:75;;;;;;;1248:3961:76;4969:32:75;;;1248:3961:76;4969:32:75;;;;;:::i;:::-;1248:3961:76;4969:32:75;;;;;;;;;;;;;;;;:::i;:::-;;;1248:3961:76;;;;4969:32:75;1248:3961:76;;4969:32:75;;;;;;;;;942:75:77;1248:3961:76;;;;;942:10:77;996:21;;942:75;;956:36;;;;;;;;;;;;;;;;;;:::i;:::-;;;1248:3961:76;;;;;;;;:::i;:::-;956:36:77;;;;;;;;1248:3961:76;;;;;-1:-1:-1;;1248:3961:76;;;;;;;:::i;:::-;;;:::i;:::-;-1:-1:-1;;;;;1248:3961:76;;;956:36:77;;1248:3961:76;956:18:77;1248:3961:76;956:18:77;;;1248:3961:76;956:36:77;;;;;;;;1248:3961:76;956:36:77;;;1248:3961:76;;;942:10:77;:50;;:75;;;;1248:3961:76;938:131:77;;;11575:37:75;;;:::i;:::-;1248:3961:76;;;;;;;;;4646:18:75;4636:28;;4632:98;;4772:6;;;;:::i;4632:98::-;4687:32;;1248:3961:76;4687:32:75;1248:3961:76;;;;4687:32:75;942:75:77;1248:3961:76;;;;;942:10:77;996:21;;942:75;;;956:36;;;;1248:3961:76;956:36:77;;1248:3961:76;956:36:77;;;;;;1248:3961:76;956:36:77;;;:::i;:::-;;;1248:3961:76;;;;;;;;:::i;:::-;956:36:77;;;;;;-1:-1:-1;956:36:77;;1248:3961:76;;;;;-1:-1:-1;;1248:3961:76;;;;;;;;991:8:37;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;991:8:37;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:76;;-1:-1:-1;1248:3961:76;;-1:-1:-1;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:76;;;;;;;;-1:-1:-1;;;;;479:55:77;1248:3961:76;;;;;;;;;-1:-1:-1;;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9344:92:75;;;1248:3961:76;9344:92:75;;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;9646:31:75;1248:3961:76;9646:31:75;;1248:3961:76;9512:13:75;1248:3961:76;9512:13:75;;;1248:3961:76;9646:31:75;;;;;;;1248:3961:76;9646:31:75;;;1248:3961:76;;;9723:17:75;;1248:3961:76;;;9723:17:75;;;1248:3961:76;9723:17:75;;1248:3961:76;;;;;;;-1:-1:-1;;;;;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9723:17:75;;-1:-1:-1;;9723:17:75;;;;;;:::i;:::-;1248:3961:76;;9758:19:75;;1248:3961:76;9758:19:75;;;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9758:19:75;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;9758:19:75;-1:-1:-1;;9758:19:75;;;;;;:::i;:::-;1248:3961:76;;;9512:279:75;;;;;;;1248:3961:76;9512:279:75;;9572:4;1248:3961:76;9512:279:75;;1248:3961:76;9595:10:75;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;1248:3961:76;;;;;;;;;:::i;:::-;9512:279:75;:13;;1248:3961:76;9512:279:75;;;;;;1248:3961:76;9512:279:75;;;1248:3961:76;;;;;;;;;;;9512:279:75;;1248:3961:76;9512:279:75;;1248:3961:76;9512:279:75;;;;;;1248:3961:76;9512:279:75;;;:::i;:::-;;;1248:3961:76;;;;;;;;;;;;;9512:279:75;;;;;;-1:-1:-1;9512:279:75;;1248:3961:76;;;;;;;-1:-1:-1;1248:3961:76;;;;;;;;;;;;;9646:31:75;;;1248:3961:76;9646:31:75;;1248:3961:76;9646:31:75;;;;;;1248:3961:76;9646:31:75;;;:::i;:::-;;;1248:3961:76;;;;;;;9723:17:75;9646:31;;;;;-1:-1:-1;9646:31:75;;1248:3961:76;;;;;;;;;;;;;;;;;;-1:-1:-1;;1248:3961:76;;;;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;1248:3961:76;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;8546:65:75;;;:::i;:::-;1248:3961:76;8626:16:75;1248:3961:76;8645:20:75;;1248:3961:76;8645:20:75;;1248:3961:76;;8626:39:75;;8622:109;;1248:3961:76;;;;;8755:22:75;;;1248:3961:76;8755:22:75;;;;1248:3961:76;;;;;;;-1:-1:-1;;;;;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8755:22:75;;-1:-1:-1;;8755:22:75;;;;;;:::i;:::-;1248:3961:76;8745:33:75;;1248:3961:76;;;;8792:18:75;;1248:3961:76;;;-1:-1:-1;;;;;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8792:18:75;;1248:3961:76;;;;;;;;;;;;;;;;;8782:29:75;;8745:66;8741:177;;1248:3961:76;8741:177:75;1248:3961:76;8834:73:75;1248:3961:76;;8834:73:75;1248:3961:76;;8834:73:75;;;;;;1248:3961:76;;;;;;;;;8834:73:75;8622:109;1248:3961:76;8622:109:75;;;;1248:3961:76;;;;;-1:-1:-1;;1248:3961:76;;;;;;;;;;;;;;;;;10011:50:75;;10007:123;;10159:53;10174:38;1248:3961:76;10159:53:75;;:131;;;;;1248:3961:76;10159:188:75;;;;1248:3961:76;10159:244:75;;;;1248:3961:76;;;;;;;10159:244:75;10378:25;10363:40;;;10159:244;;;:188;10321:26;10306:41;;;-1:-1:-1;10159:188:75;;:131;10243:47;10228:62;;;-1:-1:-1;10159:131:75;;10007:123;10084:35;1248:3961:76;10084:35:75;1248:3961:76;;10084:35:75;1248:3961:76;;;;-1:-1:-1;;;;;1248:3961:76;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1248:3961:76;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;1248:3961:76;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;1248:3961:76;;;;:::o;:::-;;-1:-1:-1;;1248:3961:76;;;;;;;;;;;;;;;;;-1:-1:-1;1248:3961:76;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1248:3961:76;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1248:3961:76;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;;;;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;1248:3961:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7917:295:75:-;;;1248:3961:76;7917:295:75;1248:3961:76;;:::i;:::-;;8134:34:75;;1248:3961:76;;;;;-1:-1:-1;;;;;1248:3961:76;;;;;;;8187:18:75;;;:::i;1248:3961:76:-;;;;;;;;;;:::o;:::-;;;;;;;;;;5015:284:75;5252:40;5015:284;1248:3961:76;5015:284:75;1248:3961:76;;5199:47:59;;;;1248:3961:76;;5199:47:59;;;;-1:-1:-1;;;;;5127:12:75;5199:47:59;5141:1:75;5127:12;;1248:3961:76;5199:47:59;;;;;1248:3961:76;;;;;;;5199:47:59;;;;;:::i;:::-;9770:199;;;;;;;5141:1:75;9770:199:59;;9985:80;;;5015:284:75;5261:45:59;;;5257:201;;5015:284:75;1248:3961:76;;;5229:6:75;1248:3961:76;;;;;;;5141:1:75;1248:3961:76;5160:7:75;5199:47:59;1248:3961:76;5141:1:75;5160:7;1248:3961:76;;;;;;;;;;;;;;;;;;5229:6:75;:::i;:::-;1248:3961:76;;;;;5199:47:59;1248:3961:76;;;;;;;;5252:40:75;5015:284::o;5257:201:59:-;5434:12;1248:3961:76;5349:43:59;1248:3961:76;;;5349:43:59;5199:47;5349:43;;;5199:47;5349:43;;1248:3961:76;5141:1:75;1248:3961:76;;;;;5349:43:59;;;;;:::i;:::-;;;:::i;:::-;5434:12;;:::i;:::-;5257:201;;;;;9985:80;9997:67;;-1:-1:-1;9997:15:59;;1248:3961:76;;;;10015:26:59;:30;;9997:67;9985:80;;;;9997:67;10063:1;10048:16;9997:67;;10629:828:75;1248:3961:76;;:::i;:::-;;-1:-1:-1;;;;;1248:3961:76;;;;;-1:-1:-1;1248:3961:76;;;10745:7:75;1248:3961:76;;;;-1:-1:-1;1248:3961:76;10745:7:75;1248:3961:76;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10776:24:75;10772:99;;1248:3961:76;;;;;;;;;;11070:32:75;1248:3961:76;11070:32:75;;11096:4;11070:32;;;1248:3961:76;11070:32:75;;1248:3961:76;11070:32:75;;;;;;;;;-1:-1:-1;11070:32:75;;;10629:828;1248:3961:76;;;;;11374:13:75;;1248:3961:76;;;;;;;:::i;:::-;;;10900:550:75;;1248:3961:76;10900:550:75;;1248:3961:76;;10900:550:75;;1248:3961:76;;10900:550:75;;1248:3961:76;10900:550:75;;;1248:3961:76;11227:7:75;10900:550;;;1248:3961:76;-1:-1:-1;1248:3961:76;10900:550:75;;1248:3961:76;11288:9:75;10900:550;;;1248:3961:76;;10900:550:75;;;1248:3961:76;10900:550:75;;;;1248:3961:76;10900:550:75;;;1248:3961:76;10629:828:75;:::o;11070:32::-;;;;;;;;;;;;;;;;;:::i;:::-;;;1248:3961:76;;;;;11070:32:75;;;;;;;;;;1248:3961:76;;;-1:-1:-1;1248:3961:76;;;;;10772:99:75;1248:3961:76;;;;10823:37:75;;;;;;;1248:3961:76;;;;;;;;;;;10823:37:75;1796:162:48;-1:-1:-1;;;;;1710:6:48;1248:3961:76;;735:10:63;1855:23:48;1851:101;;1796:162::o;12930:182:75:-;13007:17;13003:103;;12930:182::o;13003:103::-;1248:3961:76;;;13047:48:75;;;1248:3961:76;13047:48:75;;;1248:3961:76;;;;;;;;;;;13047:48:75;12740:184;12809:15;:26;12805:113;;12740:184::o;12805:113::-;1248:3961:76;;;12858:49:75;;;1248:3961:76;12858:49:75;;;1248:3961:76;;;;;;;;;;;12858:49:75;5084:380:59;1248:3961:76;;5199:47:59;;-1:-1:-1;5199:47:59;;;;1248:3961:76;5199:47:59;1248:3961:76;5199:47:59;;;;;;;;1248:3961:76;;;;;;-1:-1:-1;;;;;1248:3961:76;;;;;;;;;;5199:47:59;9770:199;;;;;;;-1:-1:-1;9770:199:59;;9985:80;;;5084:380;5261:45;;;5257:201;;5084:380;;;;;:::o;5257:201::-;5434:12;1248:3961:76;-1:-1:-1;;;;;5349:43:59;1248:3961:76;;;5349:43:59;5199:47;5349:43;;;1248:3961:76;5199:47:59;5349:43;;1248:3961:76;-1:-1:-1;1248:3961:76;;;;;5349:43:59;;;;;:::i;:::-;;;:::i;:::-;5434:12;:::i;:::-;5257:201;;;;;;9985:80;9997:67;;-1:-1:-1;9997:15:59;;1248:3961:76;-1:-1:-1;;;;;1248:3961:76;;10015:26:59;:30;;9997:67;9985:80;;;;9997:67;10063:1;10048:16;9997:67;;13118:332:75;-1:-1:-1;;;;;13177:13:75;;1248:3961:76;;;;;;;;13381:19:75;;;1248:3961:76;13381:19:75;;;1248:3961:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13311:4:75;1248:3961:76;;13349:1:75;13211:204;;;1248:3961:76;13211:204:75;;;1248:3961:76;13177:266:75;;;;;1248:3961:76;13349:1:75;1248:3961:76;;;;;;13177:266:75;;;;;;1248:3961:76;13177:266:75;;;;;;1248:3961:76;;;;;;:::i;:::-;13429:4:75;1248:3961:76;;;;13177:266:75;;;;;;;;;;13118:332;;;:::o;13177:266::-;1248:3961:76;;;;;13118:332:75:o;13177:266::-;1248:3961:76;;;13349:1:75;1248:3961:76;;;;;1219:160:59;1248:3961:76;;;1328:43:59;;;;-1:-1:-1;;;;;1248:3961:76;;;1328:43:59;;;1248:3961:76;;;;;;;;1328:43:59;;;1248:3961:76;;;;1328:43:59;1248:3961:76;1328:43:59;1219:160::o;11625:1109:75:-;-1:-1:-1;;;;;1248:3961:76;;;;;11806:7:75;1248:3961:76;;;11806:7:75;1248:3961:76;;;11852:19:75;1248:3961:76;;11886:13:75;;11882:147;;1248:3961:76;;;;;12148:32:75;;;;1248:3961:76;12148:32:75;;12174:4;12148:32;;;1248:3961:76;12148:32:75;;;;;;;1248:3961:76;12148:32:75;;;11625:1109;-1:-1:-1;12209:12:75;;;12397:36;12405:18;12397:36;;:::o;12205:427::-;12454:15;:26;12450:182;;12699:18;12691:36;11625:1109;:::o;12450:182::-;11806:7;12585:36;;:::o;12148:32::-;;;;1248:3961:76;12148:32:75;;1248:3961:76;12148:32:75;;;;;;1248:3961:76;12148:32:75;;;:::i;:::-;;;1248:3961:76;;;;;12148:32:75;;;;;;;-1:-1:-1;12148:32:75;;11882:147;-1:-1:-1;1248:3961:76;;-1:-1:-1;1248:3961:76;;11983:35:75:o;11625:1109::-;-1:-1:-1;;;;;11625:1109:75;;;;1248:3961:76;;;;;11806:7:75;1248:3961:76;;;11806:7:75;1248:3961:76;;;11852:19:75;1248:3961:76;;11886:13:75;;;11882:147;;1248:3961:76;;;;;;12148:32:75;;;;1248:3961:76;12148:32:75;;12174:4;12148:32;;;1248:3961:76;12148:32:75;;;;;;1248:3961:76;12148:32:75;;;11625:1109;12148:47;;;;:::i;:::-;12209:12;;;;12397:36;12405:18;12397:36;;:::o;12148:32::-;;1248:3961:76;12148:32:75;;1248:3961:76;12148:32:75;;;;;;1248:3961:76;12148:32:75;;;:::i;:::-;;;1248:3961:76;;;;12148:47:75;1248:3961:76;;12148:32:75;;;;;-1:-1:-1;12148:32:75;;11882:147;11983:35;;;;1248:3961:76;11983:35:75;1248:3961:76;11983:35:75;:::o;8370:720:59:-;;-1:-1:-1;8507:421:59;8370:720;8507:421;;;;;;;;;;;;-1:-1:-1;8507:421:59;;8942:15;;1248:3961:76;-1:-1:-1;;;;;1248:3961:76;;8960:26:59;:31;8942:68;8938:146;;8370:720;:::o;8938:146::-;-1:-1:-1;;;;;9033:40:59;;-1:-1:-1;9033:40:59;1248:3961:76;9033:40:59;1248:3961:76;;-1:-1:-1;9033:40:59;8942:68;9009:1;8994:16;;8942:68;"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","appData()":"8aebd348","burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","cancelOrder(address,address)":"60e092c6","composableCow()":"93504c52","emergencyCancelOrder(address,address)":"68bce712","getOrder(address)":"6eba2b13","getOrderStatus(address)":"6f9d75cd","getTradeableOrder(address,address,bytes32,bytes,bytes)":"b8296fc4","isValidSignature(bytes32,bytes)":"1626ba7e","owner()":"8da5cb5b","pendingOwner()":"e30c3978","protocolFeeSweeper()":"178ac96e","renounceOwnership()":"715018a6","retryOrder(address,uint256,uint256)":"d83b06a4","supportsInterface(bytes4)":"01ffc9a7","transferOwnership(address)":"f2fde38b","vaultRelayer()":"9b552cc2","verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))":"14a2a784","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"_protocolFeeSweeper\",\"type\":\"address\"},{\"internalType\":\"contract IComposableCow\",\"name\":\"_composableCow\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_cowVaultRelayer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_appData\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_version\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"AmountOutIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InterfaceIsSignatureVerifierMuxer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"InvalidOrderParameters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeSweeper\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"actualStatus\",\"type\":\"uint8\"}],\"name\":\"OrderHasUnexpectedStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"OrderNotValid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollNever\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtBlock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryAtEpoch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"PollTryNextBlock\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract ICowConditionalOrder\",\"name\":\"handler\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticData\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct ICowConditionalOrder.ConditionalOrderParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"ConditionalOrderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"OrderCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"OrderRetried\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"appData\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"encodedMinAmountsOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"cancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"composableCow\",\"outputs\":[{\"internalType\":\"contract IComposableCow\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"emergencyCancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"}],\"name\":\"getOrderStatus\",\"outputs\":[{\"internalType\":\"enum ICowSwapFeeBurner.OrderStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"getTradeableOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFeeSweeper\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"retryOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultRelayer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"ctx\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"staticInput\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainInput\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"sellToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"buyToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validTo\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"appData\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"kind\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"partiallyFillable\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"sellTokenBalance\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"buyTokenBalance\",\"type\":\"bytes32\"}],\"internalType\":\"struct GPv2Order\",\"name\":\"_order\",\"type\":\"tuple\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Cow Watchtower (https://github.com/cowprotocol/watch-tower) must be running for the burner to function. Only one order per token is allowed at a time.\",\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"InvalidOrderParameters(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"OrderHasUnexpectedStatus(uint8)\":[{\"details\":\"`revertOrder` should only be called when the OrderStatus is `Failed`.\",\"params\":{\"actualStatus\":\"The status of the order when `revertOrder` was called\"}}],\"OrderNotValid(string)\":[{\"params\":{\"reason\":\"Text explaining the reason the order is invalid\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PollNever(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be deleted\"}}],\"PollTryAtBlock(uint256,string)\":[{\"params\":{\"blockNumber\":\"The block number when polling should resume\",\"reason\":\"Text description of the reason it should be retried\"}}],\"PollTryAtEpoch(uint256,string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\",\"timestamp\":\"The unix timestamp when polling should resume\"}}],\"PollTryNextBlock(string)\":[{\"params\":{\"reason\":\"Text description of the reason it should be retried\"}}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"ConditionalOrderCreated(address,(address,bytes32,bytes))\":{\"details\":\"Emitted when a new conditional order is created.\",\"params\":{\"owner\":\"The address that created the conditional order\",\"params\":\"The conditional order data\"}},\"OrderCanceled(address,uint256,address)\":{\"params\":{\"exactAmountIn\":\"The number of tokens in the order\",\"receiver\":\"The account that received the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"OrderRetried(address,uint256,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the new order to be filled\",\"exactAmountIn\":\"The number of tokens in the order\",\"minAmountOut\":\"The minimum number of target tokens required\",\"tokenIn\":\"The token used to identify the order\"}},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"encodedMinAmountsOut\":\"The minimum amounts out for the swap, encoded as a 256-bit integer: - Upper 128 bits: the minimum amount of the target token to receive - Lower 128 bits: the minimum amount of the ERC4626 token to receive\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (`tokenOut` of the swap)\"}},\"cancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the tokens from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"emergencyCancelOrder(address,address)\":{\"details\":\"Canceling an order prevents it from being retried.\",\"params\":{\"receiver\":\"The address to receive the from the unfilled order\",\"tokenIn\":\"The token used to identify the order\"}},\"getOrder(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"_0\":\"The order data for the given token\"}},\"getOrderStatus(address)\":{\"params\":{\"tokenIn\":\"The token used to identify the order\"},\"returns\":{\"status\":\"The status of the order for the given token\"}},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"details\":\"**MUST** revert if the order conditions are not met.\",\"params\":{\"ctx\":\"The context of the order (bytes32(0) if Merkle tree is used, otherwise the H(params))\",\"offchainInput\":\"Off-chain input (similar to Balancer `userData`); currently unused\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` of the parent `isValidSignature` call\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"},\"returns\":{\"_0\":\"order Tradeable order for submission to the CoW Protocol API\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"Should return whether the signature provided is valid for the provided data\",\"params\":{\"hash\":\"Hash of the data to be signed\",\"signature\":\"Signature byte array associated with `hash`\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"retryOrder(address,uint256,uint256)\":{\"params\":{\"deadline\":\"The deadline for the order to be filled.\",\"minAmountOut\":\"The minimum number of target tokens to receive (tokenOut)\",\"tokenIn\":\"The token used to identify the order\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"details\":\"Used in combination with `isValidSafeSignature` to verify that the order is signed by the Safe. **MUST** revert if any order conditions are not met. The `order` parameter is ignored / not validated by the `ICowConditionalOrderGenerator` implementation. This parameter is included to allow more granular control over the order verification logic, and to allow a watchtower / user to propose a discrete order without it being generated by on-chain logic. See https://docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow.\",\"params\":{\"_hash\":\"`EIP712` order digest\",\"ctx\":\"See docs.cow.fi/cow-protocol/reference/contracts/periphery/composable-cow#execution-context\",\"domainSeparator\":\"`EIP712` domain separator\",\"offchainInput\":\"Type-specific data NOT known at time of creation for a specific discrete order (or zero)\",\"order\":\"The proposed discrete order's `GPv2Order` data struct\",\"owner\":\"The owner of the order (usually a contract)\",\"sender\":\"The `msg.sender` calling `isValidSignature`\",\"staticInput\":\"Conditional order type-specific data known at time of creation for all discrete orders\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"title\":\"ERC4626CowSwapFeeBurner\",\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"AmountOutIsZero(address)\":[{\"notice\":\"The amount out is zero.\"}],\"InterfaceIsSignatureVerifierMuxer()\":[{\"notice\":\"Fails on SignatureVerifierMuxer due to compatibility issues with ComposableCow.\"}],\"InvalidOrderParameters(string)\":[{\"notice\":\"The order parameters were invalid.\"}],\"InvalidProtocolFeeSweeper()\":[{\"notice\":\"The fee protocol is invalid.\"}],\"OrderHasUnexpectedStatus(uint8)\":[{\"notice\":\"Attempt to revert an order that had not failed.\"}],\"OrderNotValid(string)\":[{\"notice\":\"This error is returned by the `getTradeableOrder` function if the order conditions are not met.\"}],\"PollNever(string)\":[{\"notice\":\"The conditional order should not be polled again (i.e., deleted).\"}],\"PollTryAtBlock(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific block number.\"}],\"PollTryAtEpoch(uint256,string)\":[{\"notice\":\"Polling should be retried at a specific epoch (unix timestamp).\"}],\"PollTryNextBlock(string)\":[{\"notice\":\"Polling should be retried at the next block.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"OrderCanceled(address,uint256,address)\":{\"notice\":\"An order was canceled after failure.\"},\"OrderRetried(address,uint256,uint256,uint256)\":{\"notice\":\"An order was retried after failing.\"},\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Treats `feeToken` as an ERC4626, redeems `exactFeeTokenAmountIn`, swaps the underlying asset for `targetToken`, and sends the proceeds to the `recipient`.\"},\"cancelOrder(address,address)\":{\"notice\":\"Return tokens from an order that has failed.\"},\"emergencyCancelOrder(address,address)\":{\"notice\":\"Emergency return tokens from an order regardless of status.\"},\"getOrder(address)\":{\"notice\":\"Get the order at the sell token.\"},\"getOrderStatus(address)\":{\"notice\":\"Get the status of the order at the sell token.\"},\"getTradeableOrder(address,address,bytes32,bytes,bytes)\":{\"notice\":\"Get a tradeable order that can be posted to the CoW Protocol API and would pass signature validation.\"},\"retryOrder(address,uint256,uint256)\":{\"notice\":\"Retry an order that has not been filled yet and expired.\"},\"verify(address,address,bytes32,bytes32,bytes32,bytes,bytes,(address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\":{\"notice\":\"Verify that a given discrete order is valid.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"A contract that burns ERC4626 protocol fee tokens using CowSwap, previously redeeming underlying assets.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ERC4626CowSwapFeeBurner.sol\":\"ERC4626CowSwapFeeBurner\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IComposableCow.sol\":{\"keccak256\":\"0xc82721c94d5e741f168aed4c94dc6a9006cb3348bee7398a5e3fa9b7e28557bd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://784c16c17fb89736ec5be650668d81a548acec3ccc2073e2be0f79029f84f512\",\"dweb:/ipfs/QmSk9seqC2YEJqy5pPdXKjmhEKoQhXQdQXCN4f9R8jcXKX\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrder.sol\":{\"keccak256\":\"0xcb494de22b7fdbbc747dbbe280c8f1b30cc9ca141cf3cd6a9848162274dee54c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://9f4e2115a67526c99e64c524651dab3bfcf8bd4e1707f75203b6a63772915f9b\",\"dweb:/ipfs/QmTU5FYstm414shhbfzg4kXNek6Cfa2a1DzX3e115hV6yV\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowConditionalOrderGenerator.sol\":{\"keccak256\":\"0x7b8f0149ba41d28c3d0cd956911816b083f7ccec35ddc7bb7fdb829c3c11d9b2\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2d39a71115b9018711726b6c7498038e6d3a41338fa635c88cc8025b4e0e5f34\",\"dweb:/ipfs/QmYqnnkXCd1yjs6kpQgxNUotpudgN37X5FTFNFyKE62PMj\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ICowSwapFeeBurner.sol\":{\"keccak256\":\"0xc3717c516d816bd012f47a18bfd69f7887ce262435c10be9748beb4b11aee033\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://237a9295364524846f26c1b92b523e6039b414d3b691f77ba55c6deefa4b14bc\",\"dweb:/ipfs/QmXYg1paW7kDeXCFkiunzSWSWT3DD2p15CHnJZzDyEQ6Jo\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x66c7ec42c6c43712be2107a50ab4529379bc76a632b425babec698d9da921ac6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dce2778f0b638adfc5ba29c2c618c855fe725fa74a16846386aa1d56a834aa04\",\"dweb:/ipfs/QmPV9oWnzQdi58od266j62xvviavLNHqKLZfm6k2K1qy9E\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/CowSwapFeeBurner.sol\":{\"keccak256\":\"0xa37c5fd04da51fc47ce8bfe6c4a0b6c0b7687af60849420f11de03f62c2a9fa3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d35b60d3e201e591583d43a5133e0c7cc8984a64be325d66c09d02939b75149c\",\"dweb:/ipfs/Qmd298snw1uayUE9LsjPiwcvKcPsKto1v4zKePKXV5Q7fb\"]},\"contracts/ERC4626CowSwapFeeBurner.sol\":{\"keccak256\":\"0xc9955ccec1e4850bd1a47fcaa7297c50948fedf2988edd9a261cf2854d00f912\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://36f4d78fb2e64a3a906a9843a7efbda051a92a2821152dbe76fb6eaa7fd9a5ba\",\"dweb:/ipfs/QmVQJbvMRLsXsuWogwbgXv2PJDS5t1snq6c5mvYangeSeH\"]},\"contracts/FeeBurnerAuthentication.sol\":{\"keccak256\":\"0x4861db67bf113a4775c165241802df34a6c0e9fefaec82e8aaf969b5879759f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f522b3af683e09e1b67ed515be9972e7cf9514a584e264c4ca9656cc12c2f06\",\"dweb:/ipfs/QmNYqMsvWcNqACozLm3cYeR4oC3KKfKNBDSqR3vcpjv3zo\"]}},\"version\":1}"}},"contracts/FeeBurnerAuthentication.sol":{"FeeBurnerAuthentication":{"abi":[{"inputs":[{"internalType":"contract IProtocolFeeSweeper","name":"_protocolFeeSweeper","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidProtocolFeeSweeper","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeSweeper","outputs":[{"internalType":"contract IProtocolFeeSweeper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a0346100e957601f61043738819003918201601f19168301916001600160401b038311848410176100ed5780849260409485528339810103126100e95780516001600160a01b0391828216908183036100e957602001518381168091036100e95780156100d65760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3156100c75760805261033590816101028239608051816102bb0152f35b63932c92a560e01b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c908163178ac96e1461029157508063715018a61461020c57806379ba5097146101555780638da5cb5b14610123578063e30c3978146100f05763f2fde38b1461005e575f80fd5b346100ec5760206003193601126100ec5760043573ffffffffffffffffffffffffffffffffffffffff8082168092036100ec576100996102df565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b346100ec575f6003193601126100ec57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100ec575f6003193601126100ec57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100ec575f6003193601126100ec5760015473ffffffffffffffffffffffffffffffffffffffff33818316036101e0577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b346100ec575f6003193601126100ec576102246102df565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346100ec575f6003193601126100ec5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b73ffffffffffffffffffffffffffffffffffffffff5f541633036101e05756fea26469706673582212203ed8463bc743d2efb939cc670ea5ba6990b6c050196061d0e492a37fda001cfb64736f6c634300081b0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH2 0xE9 JUMPI PUSH1 0x1F PUSH2 0x437 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0xED JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0xE9 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0xE9 JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0xE9 JUMPI DUP1 ISZERO PUSH2 0xD6 JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ISZERO PUSH2 0xC7 JUMPI PUSH1 0x80 MSTORE PUSH2 0x335 SWAP1 DUP2 PUSH2 0x102 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x2BB ADD MSTORE RETURN JUMPDEST PUSH4 0x932C92A5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x178AC96E EQ PUSH2 0x291 JUMPI POP DUP1 PUSH4 0x715018A6 EQ PUSH2 0x20C JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0xF0 JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0x5E JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xEC JUMPI PUSH2 0x99 PUSH2 0x2DF JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0x1E0 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH2 0x224 PUSH2 0x2DF JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x1E0 JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATACOPY 0xD8 CHAINID EXTCODESIZE 0xC7 NUMBER 0xD2 0xEF 0xB9 CODECOPY 0xCC PUSH8 0xEA5BA6990B6C050 NOT PUSH1 0x61 0xD0 0xE4 SWAP3 LOG3 PUSH32 0xDA001CFB64736F6C634300081B00330000000000000000000000000000000000 ","sourceMap":"424:941:77:-:0;;;;;;;;;;;;;-1:-1:-1;;424:941:77;;;;-1:-1:-1;;;;;424:941:77;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;424:941:77;;;;;;;;;;;;;;;;;;;;;1273:26:48;;1269:95;;424:941:77;;;;;;;;2093:20:49;424:941:77;;2093:20:49;424:941:77;;-1:-1:-1;424:941:77;;;;;-1:-1:-1;424:941:77;;;;;3052:40:48;-1:-1:-1;3052:40:48;;1203:42:77;1199:107;;1316:40;;424:941;;;;;;1316:40;424:941;;;;;;1199:107;1268:27;;;-1:-1:-1;1268:27:77;;-1:-1:-1;1268:27:77;1269:95:48;1322:31;;;-1:-1:-1;1322:31:48;-1:-1:-1;1322:31:48;424:941:77;;-1:-1:-1;1322:31:48;424:941:77;-1:-1:-1;424:941:77;;;;;;-1:-1:-1;424:941:77;;;;;-1:-1:-1;424:941:77"},"deployedBytecode":{"functionDebugData":{"fun_checkOwner":{"entryPoint":735,"id":9405,"parameterSlots":0,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"19753":[{"length":32,"start":699}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c908163178ac96e1461029157508063715018a61461020c57806379ba5097146101555780638da5cb5b14610123578063e30c3978146100f05763f2fde38b1461005e575f80fd5b346100ec5760206003193601126100ec5760043573ffffffffffffffffffffffffffffffffffffffff8082168092036100ec576100996102df565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b346100ec575f6003193601126100ec57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100ec575f6003193601126100ec57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100ec575f6003193601126100ec5760015473ffffffffffffffffffffffffffffffffffffffff33818316036101e0577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b346100ec575f6003193601126100ec576102246102df565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346100ec575f6003193601126100ec5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b73ffffffffffffffffffffffffffffffffffffffff5f541633036101e05756fea26469706673582212203ed8463bc743d2efb939cc670ea5ba6990b6c050196061d0e492a37fda001cfb64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x178AC96E EQ PUSH2 0x291 JUMPI POP DUP1 PUSH4 0x715018A6 EQ PUSH2 0x20C JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0xF0 JUMPI PUSH4 0xF2FDE38B EQ PUSH2 0x5E JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xEC JUMPI PUSH2 0x99 PUSH2 0x2DF JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0x1E0 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH2 0x224 PUSH2 0x2DF JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0xEC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xEC JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x1E0 JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATACOPY 0xD8 CHAINID EXTCODESIZE 0xC7 NUMBER 0xD2 0xEF 0xB9 CODECOPY 0xCC PUSH8 0xEA5BA6990B6C050 NOT PUSH1 0x61 0xD0 0xE4 SWAP3 LOG3 PUSH32 0xDA001CFB64736F6C634300081B00330000000000000000000000000000000000 ","sourceMap":"424:941:77:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;424:941:77;;;;;;;;;;;;;;;;1500:62:48;;:::i;:::-;424:941:77;;1738:24:49;424:941:77;;;1738:24:49;424:941:77;;;;1777:43:49;424:941:77;1777:43:49;;424:941:77;;;;;;;;;;-1:-1:-1;;424:941:77;;;;;;;1311:13:49;424:941:77;;;;;;;;;;;;;-1:-1:-1;;424:941:77;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;424:941:77;;;;;1311:13:49;424:941:77;;735:10:63;424:941:77;;;2339:24:49;2335:96;;424:941:77;;;;1311:13:49;424:941:77;;;735:10:63;;424:941:77;;;;;;735:10:63;424:941:77;;3052:40:48;424:941:77;3052:40:48;;424:941:77;2335:96:49;2386:34;424:941:77;2386:34:49;735:10:63;424:941:77;;;;2386:34:49;424:941:77;;;;;-1:-1:-1;;424:941:77;;;;;1500:62:48;;:::i;:::-;424:941:77;;;;2093:20:49;424:941:77;;2093:20:49;424:941:77;;;;;;;;;3052:40:48;;;;424:941:77;;;;;;-1:-1:-1;;424:941:77;;;;;;479:55;424:941;479:55;424:941;;;;1796:162:48;424:941:77;1710:6:48;424:941:77;;735:10:63;1855:23:48;1851:101;;1796:162::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","owner()":"8da5cb5b","pendingOwner()":"e30c3978","protocolFeeSweeper()":"178ac96e","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"_protocolFeeSweeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeSweeper\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFeeSweeper\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidProtocolFeeSweeper()\":[{\"notice\":\"The fee protocol is invalid.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/FeeBurnerAuthentication.sol\":\"FeeBurnerAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"contracts/FeeBurnerAuthentication.sol\":{\"keccak256\":\"0x4861db67bf113a4775c165241802df34a6c0e9fefaec82e8aaf969b5879759f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f522b3af683e09e1b67ed515be9972e7cf9514a584e264c4ca9656cc12c2f06\",\"dweb:/ipfs/QmNYqMsvWcNqACozLm3cYeR4oC3KKfKNBDSqR3vcpjv3zo\"]}},\"version\":1}"}},"contracts/HyperEVMRateProvider.sol":{"HyperEVMRateProvider":{"abi":[{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"SpotPriceIsZero","type":"error"},{"inputs":[],"name":"SpotPricePrecompileFailed","type":"error"},{"inputs":[],"name":"TokenInfoPrecompileFailed","type":"error"},{"inputs":[],"name":"getPairIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSpotPriceMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_address_fromMemory":{"entryPoint":820,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint32_fromMemory":{"entryPoint":756,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint64_fromMemory":{"entryPoint":800,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint8_fromMemory":{"entryPoint":840,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":773,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":721,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"60e06040908082523461028a5781816106f6803803809161002082856102d1565b83398101031261028a57610033816102f4565b9061004160208092016102f4565b908351908082019163ffffffff8516835281815285810160018060401b0393828210858311176102a6575f9283928952519061080c5afa913d156102c9573d9261008a84610305565b93610097885195866102d1565b84523d5f8486013e5b156102ba57825183019082820193838184031261028a57838101519082821161028a5701928392610100938491031261028a57875194838601868110848211176102a65789528185015183811161028a57850181603f8201121561028a578281015161010b81610305565b916101188c5193846102d1565b818352838c838301011161028a57815f928d8793018386015e8301015286528885015183811161028a57850181603f8201121561028a57828101519384116102a6578360051b908a519461016e858401876102d1565b85528a8486019282010192831161028a578a849101915b83831061028e575050505084015261019f60608301610320565b868401526101af60808301610334565b60608401526101c060a08301610334565b60808401526101d160c08301610348565b918260a08501526101e460e08201610348565b60c08501520151805f0b810361028a5760e060ff9301521660080360ff81116102765760ff16604d811161027657600a0a801561026257670de0b6b3a76400000460805260a05260c0525161039f9081610357823960805181818160800152610202015260a05181818160e10152610145015260c051816103450152f35b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b819061029984610320565b8152019101908390610185565b634e487b7160e01b5f52604160045260245ffd5b631870604d60e21b5f5260045ffd5b6060926100a0565b601f909101601f19168101906001600160401b038211908210176102a657604052565b519063ffffffff8216820361028a57565b6001600160401b0381116102a657601f01601f191660200190565b51906001600160401b038216820361028a57565b51906001600160a01b038216820361028a57565b519060ff8216820361028a5756fe6080604090808252600480361015610015575f80fd5b5f3560e01c918263295d3ee81461030d57508163679aefce146101055750806381bfa5d1146100a75763a747d56f1461004c575f80fd5b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a357602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5f80fd5b50346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a3576020905163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35781519160209283810163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681528482528282019167ffffffffffffffff92818110848211176102ac578452515f918291906108085afa3d15610304573d8281116102d857835192601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168401908111848210176102ac57845282523d5f8684013e5b156102855783818051810103126100a35783015191821561025f577f000000000000000000000000000000000000000000000000000000000000000080840293840403610233575051908152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f44526c24000000000000000000000000000000000000000000000000000000005f525ffd5b827f79827df5000000000000000000000000000000000000000000000000000000005f525ffd5b6041867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b6041857f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b606091506101e5565b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35760209063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f3fea26469706673582212202408cf674357dec88ca1433641cb21e1a28b854edacb3295ccc92250b82ca41864736f6c634300081b0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x28A JUMPI DUP2 DUP2 PUSH2 0x6F6 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x20 DUP3 DUP6 PUSH2 0x2D1 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x28A JUMPI PUSH2 0x33 DUP2 PUSH2 0x2F4 JUMP JUMPDEST SWAP1 PUSH2 0x41 PUSH1 0x20 DUP1 SWAP3 ADD PUSH2 0x2F4 JUMP JUMPDEST SWAP1 DUP4 MLOAD SWAP1 DUP1 DUP3 ADD SWAP2 PUSH4 0xFFFFFFFF DUP6 AND DUP4 MSTORE DUP2 DUP2 MSTORE DUP6 DUP2 ADD PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB SWAP4 DUP3 DUP3 LT DUP6 DUP4 GT OR PUSH2 0x2A6 JUMPI PUSH0 SWAP3 DUP4 SWAP3 DUP10 MSTORE MLOAD SWAP1 PUSH2 0x80C GAS STATICCALL SWAP2 RETURNDATASIZE ISZERO PUSH2 0x2C9 JUMPI RETURNDATASIZE SWAP3 PUSH2 0x8A DUP5 PUSH2 0x305 JUMP JUMPDEST SWAP4 PUSH2 0x97 DUP9 MLOAD SWAP6 DUP7 PUSH2 0x2D1 JUMP JUMPDEST DUP5 MSTORE RETURNDATASIZE PUSH0 DUP5 DUP7 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x2BA JUMPI DUP3 MLOAD DUP4 ADD SWAP1 DUP3 DUP3 ADD SWAP4 DUP4 DUP2 DUP5 SUB SLT PUSH2 0x28A JUMPI DUP4 DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x28A JUMPI ADD SWAP3 DUP4 SWAP3 PUSH2 0x100 SWAP4 DUP5 SWAP2 SUB SLT PUSH2 0x28A JUMPI DUP8 MLOAD SWAP5 DUP4 DUP7 ADD DUP7 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2A6 JUMPI DUP10 MSTORE DUP2 DUP6 ADD MLOAD DUP4 DUP2 GT PUSH2 0x28A JUMPI DUP6 ADD DUP2 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x28A JUMPI DUP3 DUP2 ADD MLOAD PUSH2 0x10B DUP2 PUSH2 0x305 JUMP JUMPDEST SWAP2 PUSH2 0x118 DUP13 MLOAD SWAP4 DUP5 PUSH2 0x2D1 JUMP JUMPDEST DUP2 DUP4 MSTORE DUP4 DUP13 DUP4 DUP4 ADD ADD GT PUSH2 0x28A JUMPI DUP2 PUSH0 SWAP3 DUP14 DUP8 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE DUP7 MSTORE DUP9 DUP6 ADD MLOAD DUP4 DUP2 GT PUSH2 0x28A JUMPI DUP6 ADD DUP2 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x28A JUMPI DUP3 DUP2 ADD MLOAD SWAP4 DUP5 GT PUSH2 0x2A6 JUMPI DUP4 PUSH1 0x5 SHL SWAP1 DUP11 MLOAD SWAP5 PUSH2 0x16E DUP6 DUP5 ADD DUP8 PUSH2 0x2D1 JUMP JUMPDEST DUP6 MSTORE DUP11 DUP5 DUP7 ADD SWAP3 DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x28A JUMPI DUP11 DUP5 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x28E JUMPI POP POP POP POP DUP5 ADD MSTORE PUSH2 0x19F PUSH1 0x60 DUP4 ADD PUSH2 0x320 JUMP JUMPDEST DUP7 DUP5 ADD MSTORE PUSH2 0x1AF PUSH1 0x80 DUP4 ADD PUSH2 0x334 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x1C0 PUSH1 0xA0 DUP4 ADD PUSH2 0x334 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x1D1 PUSH1 0xC0 DUP4 ADD PUSH2 0x348 JUMP JUMPDEST SWAP2 DUP3 PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x1E4 PUSH1 0xE0 DUP3 ADD PUSH2 0x348 JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE ADD MLOAD DUP1 PUSH0 SIGNEXTEND DUP2 SUB PUSH2 0x28A JUMPI PUSH1 0xE0 PUSH1 0xFF SWAP4 ADD MSTORE AND PUSH1 0x8 SUB PUSH1 0xFF DUP2 GT PUSH2 0x276 JUMPI PUSH1 0xFF AND PUSH1 0x4D DUP2 GT PUSH2 0x276 JUMPI PUSH1 0xA EXP DUP1 ISZERO PUSH2 0x262 JUMPI PUSH8 0xDE0B6B3A7640000 DIV PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE MLOAD PUSH2 0x39F SWAP1 DUP2 PUSH2 0x357 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0x80 ADD MSTORE PUSH2 0x202 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xE1 ADD MSTORE PUSH2 0x145 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0x345 ADD MSTORE RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP2 SWAP1 PUSH2 0x299 DUP5 PUSH2 0x320 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 DUP4 SWAP1 PUSH2 0x185 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x1870604D PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP3 PUSH2 0xA0 JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x2A6 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x2A6 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST MLOAD SWAP1 PUSH1 0xFF DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x295D3EE8 EQ PUSH2 0x30D JUMPI POP DUP2 PUSH4 0x679AEFCE EQ PUSH2 0x105 JUMPI POP DUP1 PUSH4 0x81BFA5D1 EQ PUSH2 0xA7 JUMPI PUSH4 0xA747D56F EQ PUSH2 0x4C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP3 DUP4 DUP2 ADD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE DUP5 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP2 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2AC JUMPI DUP5 MSTORE MLOAD PUSH0 SWAP2 DUP3 SWAP2 SWAP1 PUSH2 0x808 GAS STATICCALL RETURNDATASIZE ISZERO PUSH2 0x304 JUMPI RETURNDATASIZE DUP3 DUP2 GT PUSH2 0x2D8 JUMPI DUP4 MLOAD SWAP3 PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP5 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x2AC JUMPI DUP5 MSTORE DUP3 MSTORE RETURNDATASIZE PUSH0 DUP7 DUP5 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x285 JUMPI DUP4 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xA3 JUMPI DUP4 ADD MLOAD SWAP2 DUP3 ISZERO PUSH2 0x25F JUMPI PUSH32 0x0 DUP1 DUP5 MUL SWAP4 DUP5 DIV SUB PUSH2 0x233 JUMPI POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x44526C2400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH32 0x79827DF500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP2 POP PUSH2 0x1E5 JUMP JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 ADDMOD 0xCF PUSH8 0x4357DEC88CA14336 COINBASE 0xCB 0x21 0xE1 LOG2 DUP12 DUP6 0x4E 0xDA 0xCB ORIGIN SWAP6 0xCC 0xC9 0x22 POP 0xB8 0x2C LOG4 XOR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"806:1640:78:-:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;1116:22:96;;;;806:1640:78;;;;797:42:96;;1116:22;;;806:1640:78;;;;;;;;;;;;;;;;;;-1:-1:-1;806:1640:78;;;;;1075:64:96;;797:42;1075:64;;;797:42;;;;;;;;;:::i;:::-;806:1640:78;;;;;;;:::i;:::-;797:42:96;;;-1:-1:-1;797:42:96;;;;;;1149:81;;797:42;;1273:33;;;;;;797:42;;;;;;;;1273:33;;;797:42;;;;;;;;;;;;;;;;;;;806:1640:78;;;;;;;;;;;;;;;;;797:42:96;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;806:1640:78;;;;;;;:::i;:::-;797:42:96;;;;;;;;;;;;;-1:-1:-1;797:42:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;806:1640:78;;;797:42:96;806:1640:78;797:42:96;;;806:1640:78;;:::i;:::-;797:42:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;1323:20;797:42;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;1323:20;797:42;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;797:42:96;;;;;;806:1640:78;797:42:96;;;806:1640:78;1697:1;806:1640;;;;;;;;;;;;;;;;;;;1682:4;806:1640;797:42:96;1659:54:78;1323:20:96;1724:22:78;797:42:96;1756:24:78;806:1640;;;;;;;797:42:96;806:1640:78;;;;;;;;;;1323:20:96;806:1640:78;;;;;;;;;;797:42:96;806:1640:78;;;;;;;;;;-1:-1:-1;806:1640:78;;;;;-1:-1:-1;806:1640:78;;;;;-1:-1:-1;806:1640:78;;;;;-1:-1:-1;806:1640:78;797:42:96;-1:-1:-1;797:42:96;;;;;;;;:::i;:::-;;;;;;;;;;;;806:1640:78;;;-1:-1:-1;806:1640:78;;;;;-1:-1:-1;806:1640:78;1149:81:96;1192:27;;;-1:-1:-1;1192:27:96;;-1:-1:-1;1192:27:96;797:42;;;;;806:1640:78;;;;;-1:-1:-1;;806:1640:78;;;;-1:-1:-1;;;;;806:1640:78;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;797:42:96:-;-1:-1:-1;;;;;797:42:96;;;;806:1640:78;;-1:-1:-1;;806:1640:78;797:42:96;;;:::o;:::-;;;-1:-1:-1;;;;;797:42:96;;;;;;:::o;:::-;;;-1:-1:-1;;;;;797:42:96;;;;;;:::o;:::-;;806:1640:78;;;;797:42:96;;;;:::o"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{"19844":[{"length":32,"start":128},{"length":32,"start":514}],"19846":[{"length":32,"start":225},{"length":32,"start":325}],"19848":[{"length":32,"start":837}]},"linkReferences":{},"object":"6080604090808252600480361015610015575f80fd5b5f3560e01c918263295d3ee81461030d57508163679aefce146101055750806381bfa5d1146100a75763a747d56f1461004c575f80fd5b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a357602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5f80fd5b50346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a3576020905163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35781519160209283810163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681528482528282019167ffffffffffffffff92818110848211176102ac578452515f918291906108085afa3d15610304573d8281116102d857835192601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168401908111848210176102ac57845282523d5f8684013e5b156102855783818051810103126100a35783015191821561025f577f000000000000000000000000000000000000000000000000000000000000000080840293840403610233575051908152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f44526c24000000000000000000000000000000000000000000000000000000005f525ffd5b827f79827df5000000000000000000000000000000000000000000000000000000005f525ffd5b6041867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b6041857f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b606091506101e5565b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35760209063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f3fea26469706673582212202408cf674357dec88ca1433641cb21e1a28b854edacb3295ccc92250b82ca41864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x295D3EE8 EQ PUSH2 0x30D JUMPI POP DUP2 PUSH4 0x679AEFCE EQ PUSH2 0x105 JUMPI POP DUP1 PUSH4 0x81BFA5D1 EQ PUSH2 0xA7 JUMPI PUSH4 0xA747D56F EQ PUSH2 0x4C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP3 DUP4 DUP2 ADD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE DUP5 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP2 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2AC JUMPI DUP5 MSTORE MLOAD PUSH0 SWAP2 DUP3 SWAP2 SWAP1 PUSH2 0x808 GAS STATICCALL RETURNDATASIZE ISZERO PUSH2 0x304 JUMPI RETURNDATASIZE DUP3 DUP2 GT PUSH2 0x2D8 JUMPI DUP4 MLOAD SWAP3 PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP5 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x2AC JUMPI DUP5 MSTORE DUP3 MSTORE RETURNDATASIZE PUSH0 DUP7 DUP5 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x285 JUMPI DUP4 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xA3 JUMPI DUP4 ADD MLOAD SWAP2 DUP3 ISZERO PUSH2 0x25F JUMPI PUSH32 0x0 DUP1 DUP5 MUL SWAP4 DUP5 DIV SUB PUSH2 0x233 JUMPI POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x44526C2400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH32 0x79827DF500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP2 POP PUSH2 0x1E5 JUMP JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 ADDMOD 0xCF PUSH8 0x4357DEC88CA14336 COINBASE 0xCB 0x21 0xE1 LOG2 DUP12 DUP6 0x4E 0xDA 0xCB ORIGIN SWAP6 0xCC 0xC9 0x22 POP 0xB8 0x2C LOG4 XOR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"806:1640:78:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;863:21:95;;806:1640:78;863:21:95;;;806:1640:78;;;;;;;;;;;;;;;;;;;;;1918:20;806:1640;;;;;;;;;;;;;;;;;;;;;;;2204:10;806:1640;;;;;;;;;;;;;;;;;;;863:21:95;;;;;;806:1640:78;2377:10;806:1640;;;863:21:95;;;463:42;;;;;;;;;;;;;;;;;822:63;806:1640:78;;;;822:63:95;463:42;822:63;;463:42;;;;;;;;;;806:1640:78;;;463:42:95;;;863:21;463:42;;;;;;;;;;;;;;;;;;;;;;806:1640:78;463:42:95;;;;;;895:81;;463:42;;;;1001:37;;463:42;;;;1001:37;;463:42;1052:10;;;1048:65;;2417:20:78;806:1640;;;;;;;;;;;;;;;;;;;;;;;;;1048:65:95;1085:17;806:1640:78;1085:17:95;806:1640:78;1085:17:95;895:81;938:27;;806:1640:78;938:27:95;806:1640:78;938:27:95;463:42;;;;806:1640:78;463:42:95;;;806:1640:78;463:42:95;;;;;806:1640:78;463:42:95;;;806:1640:78;463:42:95;;;;-1:-1:-1;463:42:95;;806:1640:78;;;;;;;;;;;;2066:11;806:1640;2066:11;806:1640;;;"},"methodIdentifiers":{"getPairIndex()":"81bfa5d1","getRate()":"679aefce","getSpotPriceMultiplier()":"a747d56f","getTokenIndex()":"295d3ee8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"SpotPriceIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SpotPricePrecompileFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenInfoPrecompileFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"getPairIndex\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSpotPriceMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenIndex\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"HyperEVM has precompiles that allow to fetch the spot price of a token (in terms of USD or other tokens). This contract uses the spot price and the token info precompiles to return the rate of a token on-chain, scaled with 18 decimals (compatible with the Vault).\",\"kind\":\"dev\",\"methods\":{\"getPairIndex()\":{\"details\":\"Hypercore has an index that identifies a pair of tokens to fetch the spot price.\",\"returns\":{\"_0\":\"pairIndex The index of the pair to fetch the spot price, according to the Hyperliquid public API\"}},\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"_0\":\"The current token rate\"}},\"getSpotPriceMultiplier()\":{\"details\":\"Hypercore returns the spot price with a different number of decimals for each token. So, to make this rate provider compatible with the vault, we need to scale the spot price to 18 decimals using this multiplier.\",\"returns\":{\"_0\":\"The spot price multiplier\"}},\"getTokenIndex()\":{\"returns\":{\"_0\":\"tokenIndex The index of the token on the Hyperliquid public API\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SpotPriceIsZero()\":[{\"notice\":\"The spot price is zero.\"}],\"SpotPricePrecompileFailed()\":[{\"notice\":\"The precompile had an error while fetching the spot price.\"}],\"TokenInfoPrecompileFailed()\":[{\"notice\":\"The precompile had an error while fetching the token info.\"}]},\"kind\":\"user\",\"methods\":{\"getPairIndex()\":{\"notice\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API.\"},\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"},\"getSpotPriceMultiplier()\":{\"notice\":\"The spot price multiplier.\"},\"getTokenIndex()\":{\"notice\":\"The index of the token on the Hyperliquid public API.\"}},\"notice\":\"A rate provider for the HyperEVM.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/HyperEVMRateProvider.sol\":\"HyperEVMRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\":{\"keccak256\":\"0xa2b797f83f03ad80f6512aecc2c1aed8d8aac3ffe968e0f696ec98ec4c200cd5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93ec4d5a140fed3f7885318e2816d2c498ec44730a320d491d47c990660bc268\",\"dweb:/ipfs/QmPK2pHX4dEYf77K6vyT1LMU83neZP5xe5AzcBsv7oJoLm\"]},\"contracts/HyperEVMRateProvider.sol\":{\"keccak256\":\"0x8946f432e7337d4db52606d91f60b1adb65648473b8fb7354a9266da5543bd0e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8abb5a40dd0a5d62be1022dd58c35b05521751e79c26f0f96c9e986857b0a0e8\",\"dweb:/ipfs/QmXh6BeSz1W8XmuKyo1TdTBHDxnTZqHSxTRtpcrE7fjwBz\"]},\"contracts/utils/HyperSpotPricePrecompile.sol\":{\"keccak256\":\"0x956b7c8f826704431ea1d94bec623d2c5b8b34442365f0b249f3a2c25c2c6c54\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3a70d1a6c57fc7cf290d9b4684c5740166cc04bc2a32aa17421edbc7f844d0ae\",\"dweb:/ipfs/QmXAypsKxGf5YAxWUcMeSHkXFfcDZv8WuZWS44HNf8wMZB\"]},\"contracts/utils/HyperTokenInfoPrecompile.sol\":{\"keccak256\":\"0xea3b203aa3635705f168c210f2d82b6fda6c63a01acb79f78111302b54fb2c8f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f96d680a8cb86611a2a2a55e675230d9fc397e5e5b875877e62055fb814d929\",\"dweb:/ipfs/Qme2iitvGmf1yBndr1n2yUE8sB1G54HQQqsCWg5HL5NNvZ\"]}},\"version\":1}"}},"contracts/HyperEVMRateProviderFactory.sol":{"HyperEVMRateProviderFactory":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"string","name":"factoryVersion","type":"string"},{"internalType":"uint256","name":"rateProviderVersion","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"},{"internalType":"address","name":"rateProvider","type":"address"}],"name":"RateProviderAlreadyExists","type":"error"},{"inputs":[],"name":"RateProviderFactoryIsDisabled","type":"error"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"name":"RateProviderNotFound","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"rateProvider","type":"address"}],"name":"RateProviderCreated","type":"event"},{"anonymous":false,"inputs":[],"name":"RateProviderFactoryDisabled","type":"event"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"name":"create","outputs":[{"internalType":"contract IHyperEVMRateProvider","name":"rateProvider","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"tokenIndex","type":"uint32"},{"internalType":"uint32","name":"pairIndex","type":"uint32"}],"name":"getRateProvider","outputs":[{"internalType":"contract IHyperEVMRateProvider","name":"rateProvider","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRateProviderVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IHyperEVMRateProvider","name":"rateProvider","type":"address"}],"name":"isRateProviderFromFactory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"allocate_memory":{"entryPoint":568,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"60e060405234610234576113878038038061001981610238565b9283398101906060818303126102345780516001600160a01b0381169290838103610234576020838101516001600160401b03939192919084811161023457850191601f928284820112156102345780519686881161021157601f19976100858682018a168801610238565b948186528782850101116102345786815f9282604096018389015e8601015201519630608052156102255760a0528051938411610211575f54926001938481811c91168015610207575b828210146101f3578381116101b0575b50809285116001146101505750839450908392915f94610145575b50501b915f199060031b1c1916175f555b60c052604051611129908161025e823960805181610924015260a05181818160d70152818161021301526106a7015260c051816106010152f35b015192505f806100fa565b9294849081165f8052845f20945f905b88838310610196575050501061017e575b505050811b015f5561010b565b01515f1960f88460031b161c191690555f8080610171565b858701518855909601959485019487935090810190610160565b5f8052815f208480880160051c8201928489106101ea575b0160051c019085905b8281106101df5750506100df565b5f81550185906101d1565b925081926101c8565b634e487b7160e01b5f52602260045260245ffd5b90607f16906100cf565b634e487b7160e01b5f52604160045260245ffd5b630647140b60e51b5f5260045ffd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176102115760405256fe608060409080825260049081361015610016575f80fd5b5f358060e01c91826319912f711461081c575081632f2770db1461062457508063381c7a4f146105ea57806354fd4d501461043b578063568acb7914610286578063851c1bb3146102375780638d928af8146101e757806399b8113f146101505763aaabadc514610085575f80fd5b3461014c575f60031936011261014c5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561014257926020935f93610113575b505191168152f35b610134919350843d861161013b575b61012c818361088b565b81019061096f565b915f61010b565b503d610122565b83513d5f823e3d90fd5b5f80fd5b503461014c578160031936011261014c57610169610865565b91610172610878565b61017c81856109cf565b5f52600260205273ffffffffffffffffffffffffffffffffffffffff825f2054169283156101ae576020848451908152f35b8492507fdc120e77000000000000000000000000000000000000000000000000000000005f5263ffffffff80931690521660245260445ffd5b823461014c575f60031936011261014c576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461014c57602060031936011261014c5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361014c5761027f6020926108f9565b9051908152f35b50903461014c578060031936011261014c576102a0610865565b906102a9610878565b916102b261099b565b6102bc83826109cf565b90815f52600260205273ffffffffffffffffffffffffffffffffffffffff9485845f205416806103ff57508351906106f68083019183831067ffffffffffffffff8411176103d3575086848493610329936109fe863963ffffffff91821681529116602082015260400190565b03905ff094851561014257602095169283925f5260028652805f20837fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055825f5260038652805f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905563ffffffff809151951691167fd2dc19a986df7300887ed27436ca60160b58dcbcc7a657427d35cbf60154ba025f80a48152f35b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b8286837ff4c64ee1000000000000000000000000000000000000000000000000000000005f5263ffffffff80931690521660245260445260645ffd5b50903461014c575f60031936011261014c5780515f5f549060018260011c90600184169384156105e0575b60209788841086146105b457509187918694938286528386019690815f1461055c57506001146104e8575b505050916104c4601f927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe094038561088b565b845195869481865251918280928701528686015e5f85828601015201168101030190f35b5f8080529293507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106105465750505082010185827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610491565b8054888501860152879550928401928101610511565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687525050151560051b830101905085827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610491565b6022907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b91607f1691610466565b823461014c575f60031936011261014c57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b8391503461014c575f60031936011261014c577fffffffff0000000000000000000000000000000000000000000000000000000061066291166108f9565b73ffffffffffffffffffffffffffffffffffffffff9082517faaabadc500000000000000000000000000000000000000000000000000000000815260209182828781877f0000000000000000000000000000000000000000000000000000000000000000165afa91821561081257908392915f926107f0575b50606490865195869384927f9be2a8840000000000000000000000000000000000000000000000000000000084528a840152336024840152306044840152165afa9283156107e757505f926107b0575b50501561078a5761073a61099b565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416176001557f1e8641758c70961d246979e3c073388b65a37bad9cc604ec5511e7200e7d144b5f80a1005b7f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90809250813d83116107e0575b6107c7818361088b565b8101031261014c5751801515810361014c57828061072b565b503d6107bd565b513d5f823e3d90fd5b606491925061080b90843d861161013b5761012c818361088b565b91906106db565b85513d5f823e3d90fd5b8490843461014c57602060031936011261014c573573ffffffffffffffffffffffffffffffffffffffff811680910361014c5760209260ff915f52600384525f20541615158152f35b6004359063ffffffff8216820361014c57565b6024359063ffffffff8216820361014c57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176108cc57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176108cc5760405251902090565b9081602091031261014c575173ffffffffffffffffffffffffffffffffffffffff8116810361014c5790565b60ff600154166109a757565b7f42fb89b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b6040805163ffffffff92831660208201908152939092168282015281526109f760608261088b565b5190209056fe60e06040908082523461028a5781816106f6803803809161002082856102d1565b83398101031261028a57610033816102f4565b9061004160208092016102f4565b908351908082019163ffffffff8516835281815285810160018060401b0393828210858311176102a6575f9283928952519061080c5afa913d156102c9573d9261008a84610305565b93610097885195866102d1565b84523d5f8486013e5b156102ba57825183019082820193838184031261028a57838101519082821161028a5701928392610100938491031261028a57875194838601868110848211176102a65789528185015183811161028a57850181603f8201121561028a578281015161010b81610305565b916101188c5193846102d1565b818352838c838301011161028a57815f928d8793018386015e8301015286528885015183811161028a57850181603f8201121561028a57828101519384116102a6578360051b908a519461016e858401876102d1565b85528a8486019282010192831161028a578a849101915b83831061028e575050505084015261019f60608301610320565b868401526101af60808301610334565b60608401526101c060a08301610334565b60808401526101d160c08301610348565b918260a08501526101e460e08201610348565b60c08501520151805f0b810361028a5760e060ff9301521660080360ff81116102765760ff16604d811161027657600a0a801561026257670de0b6b3a76400000460805260a05260c0525161039f9081610357823960805181818160800152610202015260a05181818160e10152610145015260c051816103450152f35b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b819061029984610320565b8152019101908390610185565b634e487b7160e01b5f52604160045260245ffd5b631870604d60e21b5f5260045ffd5b6060926100a0565b601f909101601f19168101906001600160401b038211908210176102a657604052565b519063ffffffff8216820361028a57565b6001600160401b0381116102a657601f01601f191660200190565b51906001600160401b038216820361028a57565b51906001600160a01b038216820361028a57565b519060ff8216820361028a5756fe6080604090808252600480361015610015575f80fd5b5f3560e01c918263295d3ee81461030d57508163679aefce146101055750806381bfa5d1146100a75763a747d56f1461004c575f80fd5b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a357602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5f80fd5b50346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a3576020905163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35781519160209283810163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681528482528282019167ffffffffffffffff92818110848211176102ac578452515f918291906108085afa3d15610304573d8281116102d857835192601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168401908111848210176102ac57845282523d5f8684013e5b156102855783818051810103126100a35783015191821561025f577f000000000000000000000000000000000000000000000000000000000000000080840293840403610233575051908152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f44526c24000000000000000000000000000000000000000000000000000000005f525ffd5b827f79827df5000000000000000000000000000000000000000000000000000000005f525ffd5b6041867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b6041857f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b606091506101e5565b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35760209063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f3fea26469706673582212202408cf674357dec88ca1433641cb21e1a28b854edacb3295ccc92250b82ca41864736f6c634300081b0033a2646970667358221220aa8a7fceeb1c17bb3a1d8defc7d21eaa36f1ddbefd69587f79db9ef4b8b303cc64736f6c634300081b0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x234 JUMPI PUSH2 0x1387 DUP1 CODESIZE SUB DUP1 PUSH2 0x19 DUP2 PUSH2 0x238 JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD SWAP1 PUSH1 0x60 DUP2 DUP4 SUB SLT PUSH2 0x234 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP3 SWAP1 DUP4 DUP2 SUB PUSH2 0x234 JUMPI PUSH1 0x20 DUP4 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP4 SWAP2 SWAP3 SWAP2 SWAP1 DUP5 DUP2 GT PUSH2 0x234 JUMPI DUP6 ADD SWAP2 PUSH1 0x1F SWAP3 DUP3 DUP5 DUP3 ADD SLT ISZERO PUSH2 0x234 JUMPI DUP1 MLOAD SWAP7 DUP7 DUP9 GT PUSH2 0x211 JUMPI PUSH1 0x1F NOT SWAP8 PUSH2 0x85 DUP7 DUP3 ADD DUP11 AND DUP9 ADD PUSH2 0x238 JUMP JUMPDEST SWAP5 DUP2 DUP7 MSTORE DUP8 DUP3 DUP6 ADD ADD GT PUSH2 0x234 JUMPI DUP7 DUP2 PUSH0 SWAP3 DUP3 PUSH1 0x40 SWAP7 ADD DUP4 DUP10 ADD MCOPY DUP7 ADD ADD MSTORE ADD MLOAD SWAP7 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0x225 JUMPI PUSH1 0xA0 MSTORE DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x211 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x207 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x1F3 JUMPI DUP4 DUP2 GT PUSH2 0x1B0 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x150 JUMPI POP DUP4 SWAP5 POP SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP5 PUSH2 0x145 JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST PUSH1 0xC0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x1129 SWAP1 DUP2 PUSH2 0x25E DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x924 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xD7 ADD MSTORE DUP2 DUP2 PUSH2 0x213 ADD MSTORE PUSH2 0x6A7 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0x601 ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0xFA JUMP JUMPDEST SWAP3 SWAP5 DUP5 SWAP1 DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x196 JUMPI POP POP POP LT PUSH2 0x17E JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0x10B JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x171 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x160 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x1EA JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP6 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x1DF JUMPI POP POP PUSH2 0xDF JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x1D1 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x1C8 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xCF JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x211 JUMPI PUSH1 0x40 MSTORE JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x19912F71 EQ PUSH2 0x81C JUMPI POP DUP2 PUSH4 0x2F2770DB EQ PUSH2 0x624 JUMPI POP DUP1 PUSH4 0x381C7A4F EQ PUSH2 0x5EA JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x43B JUMPI DUP1 PUSH4 0x568ACB79 EQ PUSH2 0x286 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x237 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x1E7 JUMPI DUP1 PUSH4 0x99B8113F EQ PUSH2 0x150 JUMPI PUSH4 0xAAABADC5 EQ PUSH2 0x85 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x142 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x113 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x134 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x13B JUMPI JUMPDEST PUSH2 0x12C DUP2 DUP4 PUSH2 0x88B JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x96F JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x10B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x122 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x14C JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH2 0x169 PUSH2 0x865 JUMP JUMPDEST SWAP2 PUSH2 0x172 PUSH2 0x878 JUMP JUMPDEST PUSH2 0x17C DUP2 DUP6 PUSH2 0x9CF JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SLOAD AND SWAP3 DUP4 ISZERO PUSH2 0x1AE JUMPI PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP5 SWAP3 POP PUSH32 0xDC120E7700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH4 0xFFFFFFFF DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x14C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x14C JUMPI PUSH2 0x27F PUSH1 0x20 SWAP3 PUSH2 0x8F9 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x14C JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH2 0x2A0 PUSH2 0x865 JUMP JUMPDEST SWAP1 PUSH2 0x2A9 PUSH2 0x878 JUMP JUMPDEST SWAP2 PUSH2 0x2B2 PUSH2 0x99B JUMP JUMPDEST PUSH2 0x2BC DUP4 DUP3 PUSH2 0x9CF JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP5 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x3FF JUMPI POP DUP4 MLOAD SWAP1 PUSH2 0x6F6 DUP1 DUP4 ADD SWAP2 DUP4 DUP4 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT OR PUSH2 0x3D3 JUMPI POP DUP7 DUP5 DUP5 SWAP4 PUSH2 0x329 SWAP4 PUSH2 0x9FE DUP7 CODECOPY PUSH4 0xFFFFFFFF SWAP2 DUP3 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 PUSH0 CREATE SWAP5 DUP6 ISZERO PUSH2 0x142 JUMPI PUSH1 0x20 SWAP6 AND SWAP3 DUP4 SWAP3 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE DUP1 PUSH0 KECCAK256 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP3 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE DUP1 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH4 0xFFFFFFFF DUP1 SWAP2 MLOAD SWAP6 AND SWAP2 AND PUSH32 0xD2DC19A986DF7300887ED27436CA60160B58DCBCC7A657427D35CBF60154BA02 PUSH0 DUP1 LOG4 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP7 DUP4 PUSH32 0xF4C64EE100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH4 0xFFFFFFFF DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI DUP1 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP1 PUSH1 0x1 DUP5 AND SWAP4 DUP5 ISZERO PUSH2 0x5E0 JUMPI JUMPDEST PUSH1 0x20 SWAP8 DUP9 DUP5 LT DUP7 EQ PUSH2 0x5B4 JUMPI POP SWAP2 DUP8 SWAP2 DUP7 SWAP5 SWAP4 DUP3 DUP7 MSTORE DUP4 DUP7 ADD SWAP7 SWAP1 DUP2 PUSH0 EQ PUSH2 0x55C JUMPI POP PUSH1 0x1 EQ PUSH2 0x4E8 JUMPI JUMPDEST POP POP POP SWAP2 PUSH2 0x4C4 PUSH1 0x1F SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP5 SUB DUP6 PUSH2 0x88B JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH0 DUP1 DUP1 MSTORE SWAP3 SWAP4 POP PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x546 JUMPI POP POP POP DUP3 ADD ADD DUP6 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x491 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP7 ADD MSTORE DUP8 SWAP6 POP SWAP3 DUP5 ADD SWAP3 DUP2 ADD PUSH2 0x511 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP6 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x491 JUMP JUMPDEST PUSH1 0x22 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x466 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST DUP4 SWAP2 POP CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x662 SWAP2 AND PUSH2 0x8F9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP3 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 DUP3 DUP8 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x812 JUMPI SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP3 PUSH2 0x7F0 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP11 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x7E7 JUMPI POP PUSH0 SWAP3 PUSH2 0x7B0 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x78A JUMPI PUSH2 0x73A PUSH2 0x99B JUMP JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND OR PUSH1 0x1 SSTORE PUSH32 0x1E8641758C70961D246979E3C073388B65A37BAD9CC604EC5511E7200E7D144B PUSH0 DUP1 LOG1 STOP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x7E0 JUMPI JUMPDEST PUSH2 0x7C7 DUP2 DUP4 PUSH2 0x88B JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x14C JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x14C JUMPI DUP3 DUP1 PUSH2 0x72B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x7BD JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x80B SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x13B JUMPI PUSH2 0x12C DUP2 DUP4 PUSH2 0x88B JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x6DB JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 SWAP1 DUP5 CALLVALUE PUSH2 0x14C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x14C JUMPI PUSH1 0x20 SWAP3 PUSH1 0xFF SWAP2 PUSH0 MSTORE PUSH1 0x3 DUP5 MSTORE PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x14C JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x14C JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x8CC JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x8CC JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x14C JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x14C JUMPI SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 SLOAD AND PUSH2 0x9A7 JUMPI JUMP JUMPDEST PUSH32 0x42FB89B800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP3 DUP4 AND PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE SWAP4 SWAP1 SWAP3 AND DUP3 DUP3 ADD MSTORE DUP2 MSTORE PUSH2 0x9F7 PUSH1 0x60 DUP3 PUSH2 0x88B JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP INVALID PUSH1 0xE0 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x28A JUMPI DUP2 DUP2 PUSH2 0x6F6 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x20 DUP3 DUP6 PUSH2 0x2D1 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x28A JUMPI PUSH2 0x33 DUP2 PUSH2 0x2F4 JUMP JUMPDEST SWAP1 PUSH2 0x41 PUSH1 0x20 DUP1 SWAP3 ADD PUSH2 0x2F4 JUMP JUMPDEST SWAP1 DUP4 MLOAD SWAP1 DUP1 DUP3 ADD SWAP2 PUSH4 0xFFFFFFFF DUP6 AND DUP4 MSTORE DUP2 DUP2 MSTORE DUP6 DUP2 ADD PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB SWAP4 DUP3 DUP3 LT DUP6 DUP4 GT OR PUSH2 0x2A6 JUMPI PUSH0 SWAP3 DUP4 SWAP3 DUP10 MSTORE MLOAD SWAP1 PUSH2 0x80C GAS STATICCALL SWAP2 RETURNDATASIZE ISZERO PUSH2 0x2C9 JUMPI RETURNDATASIZE SWAP3 PUSH2 0x8A DUP5 PUSH2 0x305 JUMP JUMPDEST SWAP4 PUSH2 0x97 DUP9 MLOAD SWAP6 DUP7 PUSH2 0x2D1 JUMP JUMPDEST DUP5 MSTORE RETURNDATASIZE PUSH0 DUP5 DUP7 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x2BA JUMPI DUP3 MLOAD DUP4 ADD SWAP1 DUP3 DUP3 ADD SWAP4 DUP4 DUP2 DUP5 SUB SLT PUSH2 0x28A JUMPI DUP4 DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x28A JUMPI ADD SWAP3 DUP4 SWAP3 PUSH2 0x100 SWAP4 DUP5 SWAP2 SUB SLT PUSH2 0x28A JUMPI DUP8 MLOAD SWAP5 DUP4 DUP7 ADD DUP7 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2A6 JUMPI DUP10 MSTORE DUP2 DUP6 ADD MLOAD DUP4 DUP2 GT PUSH2 0x28A JUMPI DUP6 ADD DUP2 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x28A JUMPI DUP3 DUP2 ADD MLOAD PUSH2 0x10B DUP2 PUSH2 0x305 JUMP JUMPDEST SWAP2 PUSH2 0x118 DUP13 MLOAD SWAP4 DUP5 PUSH2 0x2D1 JUMP JUMPDEST DUP2 DUP4 MSTORE DUP4 DUP13 DUP4 DUP4 ADD ADD GT PUSH2 0x28A JUMPI DUP2 PUSH0 SWAP3 DUP14 DUP8 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE DUP7 MSTORE DUP9 DUP6 ADD MLOAD DUP4 DUP2 GT PUSH2 0x28A JUMPI DUP6 ADD DUP2 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x28A JUMPI DUP3 DUP2 ADD MLOAD SWAP4 DUP5 GT PUSH2 0x2A6 JUMPI DUP4 PUSH1 0x5 SHL SWAP1 DUP11 MLOAD SWAP5 PUSH2 0x16E DUP6 DUP5 ADD DUP8 PUSH2 0x2D1 JUMP JUMPDEST DUP6 MSTORE DUP11 DUP5 DUP7 ADD SWAP3 DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x28A JUMPI DUP11 DUP5 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x28E JUMPI POP POP POP POP DUP5 ADD MSTORE PUSH2 0x19F PUSH1 0x60 DUP4 ADD PUSH2 0x320 JUMP JUMPDEST DUP7 DUP5 ADD MSTORE PUSH2 0x1AF PUSH1 0x80 DUP4 ADD PUSH2 0x334 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x1C0 PUSH1 0xA0 DUP4 ADD PUSH2 0x334 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x1D1 PUSH1 0xC0 DUP4 ADD PUSH2 0x348 JUMP JUMPDEST SWAP2 DUP3 PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x1E4 PUSH1 0xE0 DUP3 ADD PUSH2 0x348 JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE ADD MLOAD DUP1 PUSH0 SIGNEXTEND DUP2 SUB PUSH2 0x28A JUMPI PUSH1 0xE0 PUSH1 0xFF SWAP4 ADD MSTORE AND PUSH1 0x8 SUB PUSH1 0xFF DUP2 GT PUSH2 0x276 JUMPI PUSH1 0xFF AND PUSH1 0x4D DUP2 GT PUSH2 0x276 JUMPI PUSH1 0xA EXP DUP1 ISZERO PUSH2 0x262 JUMPI PUSH8 0xDE0B6B3A7640000 DIV PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE MLOAD PUSH2 0x39F SWAP1 DUP2 PUSH2 0x357 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0x80 ADD MSTORE PUSH2 0x202 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xE1 ADD MSTORE PUSH2 0x145 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0x345 ADD MSTORE RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP2 SWAP1 PUSH2 0x299 DUP5 PUSH2 0x320 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 DUP4 SWAP1 PUSH2 0x185 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x1870604D PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP3 PUSH2 0xA0 JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x2A6 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x2A6 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST MLOAD SWAP1 PUSH1 0xFF DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x295D3EE8 EQ PUSH2 0x30D JUMPI POP DUP2 PUSH4 0x679AEFCE EQ PUSH2 0x105 JUMPI POP DUP1 PUSH4 0x81BFA5D1 EQ PUSH2 0xA7 JUMPI PUSH4 0xA747D56F EQ PUSH2 0x4C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP3 DUP4 DUP2 ADD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE DUP5 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP2 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2AC JUMPI DUP5 MSTORE MLOAD PUSH0 SWAP2 DUP3 SWAP2 SWAP1 PUSH2 0x808 GAS STATICCALL RETURNDATASIZE ISZERO PUSH2 0x304 JUMPI RETURNDATASIZE DUP3 DUP2 GT PUSH2 0x2D8 JUMPI DUP4 MLOAD SWAP3 PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP5 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x2AC JUMPI DUP5 MSTORE DUP3 MSTORE RETURNDATASIZE PUSH0 DUP7 DUP5 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x285 JUMPI DUP4 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xA3 JUMPI DUP4 ADD MLOAD SWAP2 DUP3 ISZERO PUSH2 0x25F JUMPI PUSH32 0x0 DUP1 DUP5 MUL SWAP4 DUP5 DIV SUB PUSH2 0x233 JUMPI POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x44526C2400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH32 0x79827DF500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP2 POP PUSH2 0x1E5 JUMP JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 ADDMOD 0xCF PUSH8 0x4357DEC88CA14336 COINBASE 0xCB 0x21 0xE1 LOG2 DUP12 DUP6 0x4E 0xDA 0xCB ORIGIN SWAP6 0xCC 0xC9 0x22 POP 0xB8 0x2C LOG4 XOR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAA DUP11 PUSH32 0xCEEB1C17BB3A1D8DEFC7D21EAA36F1DDBEFD69587F79DB9EF4B8B303CC64736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"759:2835:79:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;759:2835:79;;;;;;;;;;;;;;-1:-1:-1;;;;;759:2835:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;759:2835:79;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;759:2835:79;;;;;;;;;;;;;;;922:4:46;;1347:46:32;;943:28:44;939:79;;1028:14;;759:2835:79;;;;;;;-1:-1:-1;759:2835:79;;;;;;;;;;;;;;-1:-1:-1;759:2835:79;;;;;;;;;;;-1:-1:-1;759:2835:79;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:79;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:79;;1339:42;;759:2835;;;;;;;;1347:46:32;759:2835:79;;;;;1028:14:44;759:2835:79;;;;;;;;;;;;;;;1339:42;759:2835;;;;;;;;;;-1:-1:-1;759:2835:79;;;;;;;;;;;-1:-1:-1;759:2835:79;;;-1:-1:-1;759:2835:79;;-1:-1:-1;759:2835:79;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:79;;;;;;;-1:-1:-1;759:2835:79;;;-1:-1:-1;759:2835:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:79;;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:79;;;;;-1:-1:-1;759:2835:79;;;;;;;;;;;;-1:-1:-1;759:2835:79;;;;;-1:-1:-1;759:2835:79;939:79:44;994:13;;;-1:-1:-1;994:13:44;;-1:-1:-1;994:13:44;759:2835:79;-1:-1:-1;759:2835:79;;;;;;;;;-1:-1:-1;;759:2835:79;;;-1:-1:-1;;;;;759:2835:79;;;;;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":2415,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint32":{"entryPoint":2168,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_uint32_4637":{"entryPoint":2149,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_uint32_uint32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":2187,"id":null,"parameterSlots":2,"returnSlots":0},"fun_computeRateProviderId":{"entryPoint":2511,"id":20166,"parameterSlots":2,"returnSlots":1},"fun_ensureEnabled":{"entryPoint":2459,"id":20176,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":2297,"id":4356,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4296":[{"length":32,"start":2340}],"7340":[{"length":32,"start":215},{"length":32,"start":531},{"length":32,"start":1703}],"19952":[{"length":32,"start":1537}]},"linkReferences":{},"object":"608060409080825260049081361015610016575f80fd5b5f358060e01c91826319912f711461081c575081632f2770db1461062457508063381c7a4f146105ea57806354fd4d501461043b578063568acb7914610286578063851c1bb3146102375780638d928af8146101e757806399b8113f146101505763aaabadc514610085575f80fd5b3461014c575f60031936011261014c5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561014257926020935f93610113575b505191168152f35b610134919350843d861161013b575b61012c818361088b565b81019061096f565b915f61010b565b503d610122565b83513d5f823e3d90fd5b5f80fd5b503461014c578160031936011261014c57610169610865565b91610172610878565b61017c81856109cf565b5f52600260205273ffffffffffffffffffffffffffffffffffffffff825f2054169283156101ae576020848451908152f35b8492507fdc120e77000000000000000000000000000000000000000000000000000000005f5263ffffffff80931690521660245260445ffd5b823461014c575f60031936011261014c576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461014c57602060031936011261014c5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361014c5761027f6020926108f9565b9051908152f35b50903461014c578060031936011261014c576102a0610865565b906102a9610878565b916102b261099b565b6102bc83826109cf565b90815f52600260205273ffffffffffffffffffffffffffffffffffffffff9485845f205416806103ff57508351906106f68083019183831067ffffffffffffffff8411176103d3575086848493610329936109fe863963ffffffff91821681529116602082015260400190565b03905ff094851561014257602095169283925f5260028652805f20837fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055825f5260038652805f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905563ffffffff809151951691167fd2dc19a986df7300887ed27436ca60160b58dcbcc7a657427d35cbf60154ba025f80a48152f35b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b8286837ff4c64ee1000000000000000000000000000000000000000000000000000000005f5263ffffffff80931690521660245260445260645ffd5b50903461014c575f60031936011261014c5780515f5f549060018260011c90600184169384156105e0575b60209788841086146105b457509187918694938286528386019690815f1461055c57506001146104e8575b505050916104c4601f927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe094038561088b565b845195869481865251918280928701528686015e5f85828601015201168101030190f35b5f8080529293507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8284106105465750505082010185827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610491565b8054888501860152879550928401928101610511565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687525050151560051b830101905085827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610491565b6022907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b91607f1691610466565b823461014c575f60031936011261014c57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b8391503461014c575f60031936011261014c577fffffffff0000000000000000000000000000000000000000000000000000000061066291166108f9565b73ffffffffffffffffffffffffffffffffffffffff9082517faaabadc500000000000000000000000000000000000000000000000000000000815260209182828781877f0000000000000000000000000000000000000000000000000000000000000000165afa91821561081257908392915f926107f0575b50606490865195869384927f9be2a8840000000000000000000000000000000000000000000000000000000084528a840152336024840152306044840152165afa9283156107e757505f926107b0575b50501561078a5761073a61099b565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416176001557f1e8641758c70961d246979e3c073388b65a37bad9cc604ec5511e7200e7d144b5f80a1005b7f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90809250813d83116107e0575b6107c7818361088b565b8101031261014c5751801515810361014c57828061072b565b503d6107bd565b513d5f823e3d90fd5b606491925061080b90843d861161013b5761012c818361088b565b91906106db565b85513d5f823e3d90fd5b8490843461014c57602060031936011261014c573573ffffffffffffffffffffffffffffffffffffffff811680910361014c5760209260ff915f52600384525f20541615158152f35b6004359063ffffffff8216820361014c57565b6024359063ffffffff8216820361014c57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176108cc57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176108cc5760405251902090565b9081602091031261014c575173ffffffffffffffffffffffffffffffffffffffff8116810361014c5790565b60ff600154166109a757565b7f42fb89b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b6040805163ffffffff92831660208201908152939092168282015281526109f760608261088b565b5190209056fe60e06040908082523461028a5781816106f6803803809161002082856102d1565b83398101031261028a57610033816102f4565b9061004160208092016102f4565b908351908082019163ffffffff8516835281815285810160018060401b0393828210858311176102a6575f9283928952519061080c5afa913d156102c9573d9261008a84610305565b93610097885195866102d1565b84523d5f8486013e5b156102ba57825183019082820193838184031261028a57838101519082821161028a5701928392610100938491031261028a57875194838601868110848211176102a65789528185015183811161028a57850181603f8201121561028a578281015161010b81610305565b916101188c5193846102d1565b818352838c838301011161028a57815f928d8793018386015e8301015286528885015183811161028a57850181603f8201121561028a57828101519384116102a6578360051b908a519461016e858401876102d1565b85528a8486019282010192831161028a578a849101915b83831061028e575050505084015261019f60608301610320565b868401526101af60808301610334565b60608401526101c060a08301610334565b60808401526101d160c08301610348565b918260a08501526101e460e08201610348565b60c08501520151805f0b810361028a5760e060ff9301521660080360ff81116102765760ff16604d811161027657600a0a801561026257670de0b6b3a76400000460805260a05260c0525161039f9081610357823960805181818160800152610202015260a05181818160e10152610145015260c051816103450152f35b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b819061029984610320565b8152019101908390610185565b634e487b7160e01b5f52604160045260245ffd5b631870604d60e21b5f5260045ffd5b6060926100a0565b601f909101601f19168101906001600160401b038211908210176102a657604052565b519063ffffffff8216820361028a57565b6001600160401b0381116102a657601f01601f191660200190565b51906001600160401b038216820361028a57565b51906001600160a01b038216820361028a57565b519060ff8216820361028a5756fe6080604090808252600480361015610015575f80fd5b5f3560e01c918263295d3ee81461030d57508163679aefce146101055750806381bfa5d1146100a75763a747d56f1461004c575f80fd5b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a357602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5f80fd5b50346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a3576020905163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35781519160209283810163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681528482528282019167ffffffffffffffff92818110848211176102ac578452515f918291906108085afa3d15610304573d8281116102d857835192601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168401908111848210176102ac57845282523d5f8684013e5b156102855783818051810103126100a35783015191821561025f577f000000000000000000000000000000000000000000000000000000000000000080840293840403610233575051908152f35b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b7f44526c24000000000000000000000000000000000000000000000000000000005f525ffd5b827f79827df5000000000000000000000000000000000000000000000000000000005f525ffd5b6041867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b6041857f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b606091506101e5565b346100a3575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100a35760209063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f3fea26469706673582212202408cf674357dec88ca1433641cb21e1a28b854edacb3295ccc92250b82ca41864736f6c634300081b0033a2646970667358221220aa8a7fceeb1c17bb3a1d8defc7d21eaa36f1ddbefd69587f79db9ef4b8b303cc64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x19912F71 EQ PUSH2 0x81C JUMPI POP DUP2 PUSH4 0x2F2770DB EQ PUSH2 0x624 JUMPI POP DUP1 PUSH4 0x381C7A4F EQ PUSH2 0x5EA JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x43B JUMPI DUP1 PUSH4 0x568ACB79 EQ PUSH2 0x286 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x237 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x1E7 JUMPI DUP1 PUSH4 0x99B8113F EQ PUSH2 0x150 JUMPI PUSH4 0xAAABADC5 EQ PUSH2 0x85 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x142 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x113 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x134 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x13B JUMPI JUMPDEST PUSH2 0x12C DUP2 DUP4 PUSH2 0x88B JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x96F JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x10B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x122 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x14C JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH2 0x169 PUSH2 0x865 JUMP JUMPDEST SWAP2 PUSH2 0x172 PUSH2 0x878 JUMP JUMPDEST PUSH2 0x17C DUP2 DUP6 PUSH2 0x9CF JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SLOAD AND SWAP3 DUP4 ISZERO PUSH2 0x1AE JUMPI PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP5 SWAP3 POP PUSH32 0xDC120E7700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH4 0xFFFFFFFF DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x14C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x14C JUMPI PUSH2 0x27F PUSH1 0x20 SWAP3 PUSH2 0x8F9 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x14C JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH2 0x2A0 PUSH2 0x865 JUMP JUMPDEST SWAP1 PUSH2 0x2A9 PUSH2 0x878 JUMP JUMPDEST SWAP2 PUSH2 0x2B2 PUSH2 0x99B JUMP JUMPDEST PUSH2 0x2BC DUP4 DUP3 PUSH2 0x9CF JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP5 PUSH0 KECCAK256 SLOAD AND DUP1 PUSH2 0x3FF JUMPI POP DUP4 MLOAD SWAP1 PUSH2 0x6F6 DUP1 DUP4 ADD SWAP2 DUP4 DUP4 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT OR PUSH2 0x3D3 JUMPI POP DUP7 DUP5 DUP5 SWAP4 PUSH2 0x329 SWAP4 PUSH2 0x9FE DUP7 CODECOPY PUSH4 0xFFFFFFFF SWAP2 DUP3 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 PUSH0 CREATE SWAP5 DUP6 ISZERO PUSH2 0x142 JUMPI PUSH1 0x20 SWAP6 AND SWAP3 DUP4 SWAP3 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE DUP1 PUSH0 KECCAK256 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP3 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE DUP1 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH4 0xFFFFFFFF DUP1 SWAP2 MLOAD SWAP6 AND SWAP2 AND PUSH32 0xD2DC19A986DF7300887ED27436CA60160B58DCBCC7A657427D35CBF60154BA02 PUSH0 DUP1 LOG4 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP7 DUP4 PUSH32 0xF4C64EE100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH4 0xFFFFFFFF DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI DUP1 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP1 PUSH1 0x1 DUP5 AND SWAP4 DUP5 ISZERO PUSH2 0x5E0 JUMPI JUMPDEST PUSH1 0x20 SWAP8 DUP9 DUP5 LT DUP7 EQ PUSH2 0x5B4 JUMPI POP SWAP2 DUP8 SWAP2 DUP7 SWAP5 SWAP4 DUP3 DUP7 MSTORE DUP4 DUP7 ADD SWAP7 SWAP1 DUP2 PUSH0 EQ PUSH2 0x55C JUMPI POP PUSH1 0x1 EQ PUSH2 0x4E8 JUMPI JUMPDEST POP POP POP SWAP2 PUSH2 0x4C4 PUSH1 0x1F SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP5 SUB DUP6 PUSH2 0x88B JUMP JUMPDEST DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH0 DUP1 DUP1 MSTORE SWAP3 SWAP4 POP PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x546 JUMPI POP POP POP DUP3 ADD ADD DUP6 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x491 JUMP JUMPDEST DUP1 SLOAD DUP9 DUP6 ADD DUP7 ADD MSTORE DUP8 SWAP6 POP SWAP3 DUP5 ADD SWAP3 DUP2 ADD PUSH2 0x511 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP6 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x491 JUMP JUMPDEST PUSH1 0x22 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x466 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST DUP4 SWAP2 POP CALLVALUE PUSH2 0x14C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x662 SWAP2 AND PUSH2 0x8F9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP3 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 DUP3 DUP8 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x812 JUMPI SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP3 PUSH2 0x7F0 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP11 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x7E7 JUMPI POP PUSH0 SWAP3 PUSH2 0x7B0 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x78A JUMPI PUSH2 0x73A PUSH2 0x99B JUMP JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND OR PUSH1 0x1 SSTORE PUSH32 0x1E8641758C70961D246979E3C073388B65A37BAD9CC604EC5511E7200E7D144B PUSH0 DUP1 LOG1 STOP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x7E0 JUMPI JUMPDEST PUSH2 0x7C7 DUP2 DUP4 PUSH2 0x88B JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x14C JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x14C JUMPI DUP3 DUP1 PUSH2 0x72B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x7BD JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x80B SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x13B JUMPI PUSH2 0x12C DUP2 DUP4 PUSH2 0x88B JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x6DB JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 SWAP1 DUP5 CALLVALUE PUSH2 0x14C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x14C JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x14C JUMPI PUSH1 0x20 SWAP3 PUSH1 0xFF SWAP2 PUSH0 MSTORE PUSH1 0x3 DUP5 MSTORE PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x14C JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x14C JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x8CC JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x8CC JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x14C JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x14C JUMPI SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 SLOAD AND PUSH2 0x9A7 JUMPI JUMP JUMPDEST PUSH32 0x42FB89B800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP3 DUP4 AND PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE SWAP4 SWAP1 SWAP3 AND DUP3 DUP3 ADD MSTORE DUP2 MSTORE PUSH2 0x9F7 PUSH1 0x60 DUP3 PUSH2 0x88B JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP INVALID PUSH1 0xE0 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x28A JUMPI DUP2 DUP2 PUSH2 0x6F6 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x20 DUP3 DUP6 PUSH2 0x2D1 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x28A JUMPI PUSH2 0x33 DUP2 PUSH2 0x2F4 JUMP JUMPDEST SWAP1 PUSH2 0x41 PUSH1 0x20 DUP1 SWAP3 ADD PUSH2 0x2F4 JUMP JUMPDEST SWAP1 DUP4 MLOAD SWAP1 DUP1 DUP3 ADD SWAP2 PUSH4 0xFFFFFFFF DUP6 AND DUP4 MSTORE DUP2 DUP2 MSTORE DUP6 DUP2 ADD PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB SWAP4 DUP3 DUP3 LT DUP6 DUP4 GT OR PUSH2 0x2A6 JUMPI PUSH0 SWAP3 DUP4 SWAP3 DUP10 MSTORE MLOAD SWAP1 PUSH2 0x80C GAS STATICCALL SWAP2 RETURNDATASIZE ISZERO PUSH2 0x2C9 JUMPI RETURNDATASIZE SWAP3 PUSH2 0x8A DUP5 PUSH2 0x305 JUMP JUMPDEST SWAP4 PUSH2 0x97 DUP9 MLOAD SWAP6 DUP7 PUSH2 0x2D1 JUMP JUMPDEST DUP5 MSTORE RETURNDATASIZE PUSH0 DUP5 DUP7 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x2BA JUMPI DUP3 MLOAD DUP4 ADD SWAP1 DUP3 DUP3 ADD SWAP4 DUP4 DUP2 DUP5 SUB SLT PUSH2 0x28A JUMPI DUP4 DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x28A JUMPI ADD SWAP3 DUP4 SWAP3 PUSH2 0x100 SWAP4 DUP5 SWAP2 SUB SLT PUSH2 0x28A JUMPI DUP8 MLOAD SWAP5 DUP4 DUP7 ADD DUP7 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2A6 JUMPI DUP10 MSTORE DUP2 DUP6 ADD MLOAD DUP4 DUP2 GT PUSH2 0x28A JUMPI DUP6 ADD DUP2 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x28A JUMPI DUP3 DUP2 ADD MLOAD PUSH2 0x10B DUP2 PUSH2 0x305 JUMP JUMPDEST SWAP2 PUSH2 0x118 DUP13 MLOAD SWAP4 DUP5 PUSH2 0x2D1 JUMP JUMPDEST DUP2 DUP4 MSTORE DUP4 DUP13 DUP4 DUP4 ADD ADD GT PUSH2 0x28A JUMPI DUP2 PUSH0 SWAP3 DUP14 DUP8 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE DUP7 MSTORE DUP9 DUP6 ADD MLOAD DUP4 DUP2 GT PUSH2 0x28A JUMPI DUP6 ADD DUP2 PUSH1 0x3F DUP3 ADD SLT ISZERO PUSH2 0x28A JUMPI DUP3 DUP2 ADD MLOAD SWAP4 DUP5 GT PUSH2 0x2A6 JUMPI DUP4 PUSH1 0x5 SHL SWAP1 DUP11 MLOAD SWAP5 PUSH2 0x16E DUP6 DUP5 ADD DUP8 PUSH2 0x2D1 JUMP JUMPDEST DUP6 MSTORE DUP11 DUP5 DUP7 ADD SWAP3 DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x28A JUMPI DUP11 DUP5 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x28E JUMPI POP POP POP POP DUP5 ADD MSTORE PUSH2 0x19F PUSH1 0x60 DUP4 ADD PUSH2 0x320 JUMP JUMPDEST DUP7 DUP5 ADD MSTORE PUSH2 0x1AF PUSH1 0x80 DUP4 ADD PUSH2 0x334 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x1C0 PUSH1 0xA0 DUP4 ADD PUSH2 0x334 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x1D1 PUSH1 0xC0 DUP4 ADD PUSH2 0x348 JUMP JUMPDEST SWAP2 DUP3 PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x1E4 PUSH1 0xE0 DUP3 ADD PUSH2 0x348 JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE ADD MLOAD DUP1 PUSH0 SIGNEXTEND DUP2 SUB PUSH2 0x28A JUMPI PUSH1 0xE0 PUSH1 0xFF SWAP4 ADD MSTORE AND PUSH1 0x8 SUB PUSH1 0xFF DUP2 GT PUSH2 0x276 JUMPI PUSH1 0xFF AND PUSH1 0x4D DUP2 GT PUSH2 0x276 JUMPI PUSH1 0xA EXP DUP1 ISZERO PUSH2 0x262 JUMPI PUSH8 0xDE0B6B3A7640000 DIV PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE MLOAD PUSH2 0x39F SWAP1 DUP2 PUSH2 0x357 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0x80 ADD MSTORE PUSH2 0x202 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xE1 ADD MSTORE PUSH2 0x145 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0x345 ADD MSTORE RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP2 SWAP1 PUSH2 0x299 DUP5 PUSH2 0x320 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 DUP4 SWAP1 PUSH2 0x185 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x1870604D PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP3 PUSH2 0xA0 JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x2A6 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x2A6 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP JUMPDEST MLOAD SWAP1 PUSH1 0xFF DUP3 AND DUP3 SUB PUSH2 0x28A JUMPI JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x295D3EE8 EQ PUSH2 0x30D JUMPI POP DUP2 PUSH4 0x679AEFCE EQ PUSH2 0x105 JUMPI POP DUP1 PUSH4 0x81BFA5D1 EQ PUSH2 0xA7 JUMPI PUSH4 0xA747D56F EQ PUSH2 0x4C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP3 DUP4 DUP2 ADD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE DUP5 DUP3 MSTORE DUP3 DUP3 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP2 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x2AC JUMPI DUP5 MSTORE MLOAD PUSH0 SWAP2 DUP3 SWAP2 SWAP1 PUSH2 0x808 GAS STATICCALL RETURNDATASIZE ISZERO PUSH2 0x304 JUMPI RETURNDATASIZE DUP3 DUP2 GT PUSH2 0x2D8 JUMPI DUP4 MLOAD SWAP3 PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP5 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x2AC JUMPI DUP5 MSTORE DUP3 MSTORE RETURNDATASIZE PUSH0 DUP7 DUP5 ADD RETURNDATACOPY JUMPDEST ISZERO PUSH2 0x285 JUMPI DUP4 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xA3 JUMPI DUP4 ADD MLOAD SWAP2 DUP3 ISZERO PUSH2 0x25F JUMPI PUSH32 0x0 DUP1 DUP5 MUL SWAP4 DUP5 DIV SUB PUSH2 0x233 JUMPI POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x44526C2400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH32 0x79827DF500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x60 SWAP2 POP PUSH2 0x1E5 JUMP JUMPDEST CALLVALUE PUSH2 0xA3 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xA3 JUMPI PUSH1 0x20 SWAP1 PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 ADDMOD 0xCF PUSH8 0x4357DEC88CA14336 COINBASE 0xCB 0x21 0xE1 LOG2 DUP12 DUP6 0x4E 0xDA 0xCB ORIGIN SWAP6 0xCC 0xC9 0x22 POP 0xB8 0x2C LOG4 XOR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAA DUP11 PUSH32 0xCEEB1C17BB3A1D8DEFC7D21EAA36F1DDBEFD69587F79DB9EF4B8B303CC64736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"759:2835:79:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;759:2835:79;;;;;;1581:26:46;759:2835:79;;1581:26:46;;759:2835:79;1581:26:46;;1124:6:44;;;759:2835:79;1581:26:46;;;;;;;;;;759:2835:79;1581:26:46;;;759:2835:79;;;;;;;;1581:26:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;759:2835:79;;;;;;;;;;;;;;;;;;;-1:-1:-1;;759:2835:79;;;;;;;:::i;:::-;;;;:::i;:::-;2593:45;;;;:::i;:::-;759:2835;;2663:14;759:2835;;;;;;;;2707:35;;;2703:116;;759:2835;;;;;;;;2703:116;2765:43;;;;759:2835;2765:43;759:2835;;;;;;;;;;;2765:43;759:2835;;;;;;-1:-1:-1;;759:2835:79;;;;;;;;;1124:6:44;759:2835:79;;;;;;;;;;-1:-1:-1;;759:2835:79;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;759:2835:79;;;;;;;:::i;:::-;;;;:::i;:::-;1679:34;;;:::i;:::-;1777:45;;;;:::i;:::-;759:2835;;;;1872:14;759:2835;;;;;;;;;;1918:34;1914:142;;759:2835;;;2111:47;;;;;;;;;;;;;;;;;;;;;;;;;759:2835;;;;;;;;;;;;;;;;2111:47;;;759:2835;2111:47;;;;;;759:2835;;;;;;;;1872:14;759:2835;;;;;;;;;;;;;;;;2225:26;759:2835;;;;;2268:4;759:2835;;;;;;;;;;;;;;;2288:65;759:2835;2288:65;;759:2835;;;2111:47;759:2835;;;;;;;;;1914:142;1975:70;;;;759:2835;1975:70;759:2835;;;;;;;;;;;;;1975:70;759:2835;;;;;;;-1:-1:-1;;759:2835:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:79;;;;;;;-1:-1:-1;;;759:2835:79;;;;;;;;;;;;;;;;;;;-1:-1:-1;759:2835:79;;;;;;;;;;;;;-1:-1:-1;;759:2835:79;;;;;;;;-1:-1:-1;759:2835:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;759:2835:79;;;;;;;;1526:20;759:2835;;;;;;;;;;;-1:-1:-1;;759:2835:79;;;;;1774:7:32;1762:20;1774:7;;1762:20;:::i;:::-;759:2835:79;;;;;1336:22:44;;;:6;;;;;;;759:2835:79;1336:22:44;;;;;;;;;;;759:2835:79;1336:22:44;;;759:2835:79;;;;;;1336:64:44;;;;;759:2835:79;1336:64:44;;;;;759:2835:79;1820:10:32;759:2835:79;;;;1394:4:44;759:2835:79;;;;;1336:64:44;;;;;;;;759:2835:79;1336:64:44;;;759:2835:79;1797:34:32;;;1793:90;;3128:147:79;;:::i;:::-;3220:4;759:2835;;;;;3220:4;759:2835;3239:29;759:2835;3239:29;;759:2835;1793:90:32;1854:18;759:2835:79;1854:18:32;759:2835:79;1854:18:32;1336:64:44;;;;;;;;;;;;;;;;:::i;:::-;;;759:2835:79;;;;;;;;;;;;1336:64:44;;;;;;;;;;759:2835:79;;;;;;;;1336:22:44;759:2835:79;1336:22:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;759:2835:79;;;;;;;;;;;;;;;;;-1:-1:-1;;759:2835:79;;;;;;;;;;;;;;;;;;;;3026:26;759:2835;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:32;759:2835:79;;;2303:50:32;;;2320:22;;759:2835:79;;;;;;;2303:50:32;;;759:2835:79;;;;;;;;;;;;;;;2293:61:32;;1931:430;:::o;759:2835:79:-;;;;;;;;;;;;;;;;;;:::o;3456:136::-;759:2835;3510:11;759:2835;;3506:80;;3456:136::o;3506:80::-;3544:31;-1:-1:-1;3544:31:79;;-1:-1:-1;3544:31:79;3281:169;759:2835;;;;;;;3409:33;;;759:2835;;;;;;;;;;;3409:33;;;759:2835;;3409:33;:::i;:::-;759:2835;3399:44;;3281:169;:::o"},"methodIdentifiers":{"create(uint32,uint32)":"568acb79","disable()":"2f2770db","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getRateProvider(uint32,uint32)":"99b8113f","getRateProviderVersion()":"381c7a4f","getVault()":"8d928af8","isRateProviderFromFactory(address)":"19912f71","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"factoryVersion\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"rateProviderVersion\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"name\":\"RateProviderAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateProviderFactoryIsDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"name\":\"RateProviderNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pairIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"name\":\"RateProviderCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"RateProviderFactoryDisabled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"contract IHyperEVMRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"tokenIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"pairIndex\",\"type\":\"uint32\"}],\"name\":\"getRateProvider\",\"outputs\":[{\"internalType\":\"contract IHyperEVMRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProviderVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IHyperEVMRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"}],\"name\":\"isRateProviderFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"RateProviderAlreadyExists(uint32,uint32,address)\":[{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"rateProvider\":\"The address of the deployed rate provider\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"}}],\"RateProviderNotFound(uint32,uint32)\":[{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"RateProviderCreated(uint256,uint256,address)\":{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"rateProvider\":\"The address of the deployed rate provider\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"}}},\"kind\":\"dev\",\"methods\":{\"create(uint32,uint32)\":{\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"},\"returns\":{\"rateProvider\":\"The address of the deployed rate provider\"}},\"disable()\":{\"details\":\"A disabled rate provider factory cannot create new rate providers and cannot be re-enabled. However, already created rate providers are still usable. This is a permissioned function.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getRateProvider(uint32,uint32)\":{\"details\":\"Reverts if the rate provider was not found for the given token and pair.\",\"params\":{\"pairIndex\":\"The index of the pair to fetch the spot price, according to the Hyperliquid public API\",\"tokenIndex\":\"The index of the base asset on the Hyperliquid public API\"},\"returns\":{\"rateProvider\":\"The address of the rate provider for the given token and pair\"}},\"getRateProviderVersion()\":{\"returns\":{\"_0\":\"The rate provider version number\"}},\"getVault()\":{\"details\":\"This function is virtual to allow for overriding in derived contracts which also inherits contracts with `getVault()` definition.\",\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isRateProviderFromFactory(address)\":{\"params\":{\"rateProvider\":\"The rate provider to check\"},\"returns\":{\"_0\":\"True if the rate provider was created by this factory; false otherwise\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"RateProviderAlreadyExists(uint32,uint32,address)\":[{\"notice\":\"A rate provider already exists for the given token and pair.\"}],\"RateProviderFactoryIsDisabled()\":[{\"notice\":\"The factory is disabled.\"}],\"RateProviderNotFound(uint32,uint32)\":[{\"notice\":\"The rate provider was not found for the given token and pair.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"events\":{\"RateProviderCreated(uint256,uint256,address)\":{\"notice\":\"A new HyperEVM Rate Provider was created.\"},\"RateProviderFactoryDisabled()\":{\"notice\":\"Emitted when the factory is disabled.\"}},\"kind\":\"user\",\"methods\":{\"create(uint32,uint32)\":{\"notice\":\"Creates a new HyperEVM Rate Provider for the given token and pair.\"},\"disable()\":{\"notice\":\"Disables the rate provider factory.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getRateProvider(uint32,uint32)\":{\"notice\":\"Gets the rate provider for the given token and pair.\"},\"getRateProviderVersion()\":{\"notice\":\"Returns a number representing the rate provider version.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isRateProviderFromFactory(address)\":{\"notice\":\"Checks whether the given rate provider was created by this factory.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"Factory for deploying and managing HyperEVM rate providers.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/HyperEVMRateProviderFactory.sol\":\"HyperEVMRateProviderFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProvider.sol\":{\"keccak256\":\"0xa2b797f83f03ad80f6512aecc2c1aed8d8aac3ffe968e0f696ec98ec4c200cd5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93ec4d5a140fed3f7885318e2816d2c498ec44730a320d491d47c990660bc268\",\"dweb:/ipfs/QmPK2pHX4dEYf77K6vyT1LMU83neZP5xe5AzcBsv7oJoLm\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IHyperEVMRateProviderFactory.sol\":{\"keccak256\":\"0x9b1db72d212780046987be96919d7bc0bf9829faac6d47820a5d5f038d356d96\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://157ccbf98c1631eb1efc363e9cfb64646744b6a0c1e17f021a49c1c3649ae382\",\"dweb:/ipfs/QmUVnwLEJ8qghiReoZKUApRDP7cp4EdxKj7vEeyrZ8s453\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x11ec2b653633cbcc6a99d426df178007a98d1154a39a1ada961239be39eec069\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://40eed42ee57746bbf4711bb4aee856328cd70cc02aa3ff05e8dd719868fcd524\",\"dweb:/ipfs/QmX5uAoB9W6UUehgSRvVW6hun3XE53eZwKsm4kHVqtJs8C\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"contracts/HyperEVMRateProvider.sol\":{\"keccak256\":\"0x8946f432e7337d4db52606d91f60b1adb65648473b8fb7354a9266da5543bd0e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8abb5a40dd0a5d62be1022dd58c35b05521751e79c26f0f96c9e986857b0a0e8\",\"dweb:/ipfs/QmXh6BeSz1W8XmuKyo1TdTBHDxnTZqHSxTRtpcrE7fjwBz\"]},\"contracts/HyperEVMRateProviderFactory.sol\":{\"keccak256\":\"0x1da29e3f6fb173fc927ed05cfec8e9c79c80c2415ab299f7f2da6a2432856ab2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://381b828fe004e8f981dec61b777d26f248eb64f48cef43e7f39c04cbdd3a4b60\",\"dweb:/ipfs/QmQhY2HhjhjvqbwKd8PdfADf6pgFBzSHJ36jcXYhg3NxGH\"]},\"contracts/utils/HyperSpotPricePrecompile.sol\":{\"keccak256\":\"0x956b7c8f826704431ea1d94bec623d2c5b8b34442365f0b249f3a2c25c2c6c54\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3a70d1a6c57fc7cf290d9b4684c5740166cc04bc2a32aa17421edbc7f844d0ae\",\"dweb:/ipfs/QmXAypsKxGf5YAxWUcMeSHkXFfcDZv8WuZWS44HNf8wMZB\"]},\"contracts/utils/HyperTokenInfoPrecompile.sol\":{\"keccak256\":\"0xea3b203aa3635705f168c210f2d82b6fda6c63a01acb79f78111302b54fb2c8f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f96d680a8cb86611a2a2a55e675230d9fc397e5e5b875877e62055fb814d929\",\"dweb:/ipfs/Qme2iitvGmf1yBndr1n2yUE8sB1G54HQQqsCWg5HL5NNvZ\"]}},\"version\":1}"}},"contracts/OwnableAuthentication.sol":{"OwnableAuthentication":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault_","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461010357601f61090238819003918201601f19168301916001600160401b038311848410176101075780849260409485528339810103126101035780516001600160a01b03918282169081830361010357602001518381168091036101035780156100f05760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100e15760a0526107e6908161011c823960805181610533015260a05181818160ae015281816101ea01526106bf0152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f35908160e01c918263715018a61461041557826379ba5097146103b1578263851c1bb3146103615782638da5cb5b1461032e578263a89b11281461025f57508163aaabadc514610196578163e30c397814610162578163f2fde38b146100d6575063fbfa77cf14610083575f80fd5b346100d2575f6003193601126100d2576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b346100d25760206003193601126100d2573573ffffffffffffffffffffffffffffffffffffffff8082168092036100d25761010f6105aa565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b82346100d2575f6003193601126100d25760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b9050346100d2575f6003193601126100d25773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561025557926020935f93610226575b505191168152f35b610247919350843d861161024e575b61023f818361049a565b81019061057e565b915f61021e565b503d610235565b83513d5f823e3d90fd5b346100d25760206003193601126100d25781359073ffffffffffffffffffffffffffffffffffffffff9081831683036100d2576102c07fffffffff000000000000000000000000000000000000000000000000000000006102c79216610508565b3390610668565b15610307575f541633146102e0576102de906105f6565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b827f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b83346100d2575f6003193601126100d25760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b8382346100d25760206003193601126100d25735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100d2576103aa602092610508565b9051908152f35b50346100d2575f6003193601126100d2573373ffffffffffffffffffffffffffffffffffffffff60015416036103ea576102de336105f6565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b346100d2575f6003193601126100d25761042d6105aa565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104db57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176104db5760405251902090565b908160209103126100d2575173ffffffffffffffffffffffffffffffffffffffff811681036100d25790565b73ffffffffffffffffffffffffffffffffffffffff5f541633036105ca57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146107a857604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156107795785935f95610784575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa918215610779575f9261074657505090565b90809250813d8311610772575b61075d818361049a565b810103126100d2575180151581036100d25790565b503d610753565b6040513d5f823e3d90fd5b6064929195506107a090853d871161024e5761023f818361049a565b9490916106f1565b50505060019056fea2646970667358221220dd9e17197a4db1c55e38f27d8795035c089ddf2da4504915c7eb1442de947e7c64736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x103 JUMPI PUSH1 0x1F PUSH2 0x902 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x107 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x103 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x103 JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x103 JUMPI DUP1 ISZERO PUSH2 0xF0 JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xE1 JUMPI PUSH1 0xA0 MSTORE PUSH2 0x7E6 SWAP1 DUP2 PUSH2 0x11C DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x533 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xAE ADD MSTORE DUP2 DUP2 PUSH2 0x1EA ADD MSTORE PUSH2 0x6BF ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x715018A6 EQ PUSH2 0x415 JUMPI DUP3 PUSH4 0x79BA5097 EQ PUSH2 0x3B1 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0x361 JUMPI DUP3 PUSH4 0x8DA5CB5B EQ PUSH2 0x32E JUMPI DUP3 PUSH4 0xA89B1128 EQ PUSH2 0x25F JUMPI POP DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x196 JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x162 JUMPI DUP2 PUSH4 0xF2FDE38B EQ PUSH2 0xD6 JUMPI POP PUSH4 0xFBFA77CF EQ PUSH2 0x83 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xD2 JUMPI PUSH2 0x10F PUSH2 0x5AA JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x255 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x226 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x247 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x24E JUMPI JUMPDEST PUSH2 0x23F DUP2 DUP4 PUSH2 0x49A JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x57E JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x21E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x235 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP4 AND DUP4 SUB PUSH2 0xD2 JUMPI PUSH2 0x2C0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x2C7 SWAP3 AND PUSH2 0x508 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x668 JUMP JUMPDEST ISZERO PUSH2 0x307 JUMPI PUSH0 SLOAD AND CALLER EQ PUSH2 0x2E0 JUMPI PUSH2 0x2DE SWAP1 PUSH2 0x5F6 JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0xD2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xD2 JUMPI PUSH2 0x3AA PUSH1 0x20 SWAP3 PUSH2 0x508 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0x3EA JUMPI PUSH2 0x2DE CALLER PUSH2 0x5F6 JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH2 0x42D PUSH2 0x5AA JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x4DB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x4DB JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xD2 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xD2 JUMPI SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x5CA JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x7A8 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x779 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x784 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x779 JUMPI PUSH0 SWAP3 PUSH2 0x746 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x772 JUMPI JUMPDEST PUSH2 0x75D DUP2 DUP4 PUSH2 0x49A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xD2 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xD2 JUMPI SWAP1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x753 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x7A0 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x24E JUMPI PUSH2 0x23F DUP2 DUP4 PUSH2 0x49A JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x6F1 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD SWAP15 OR NOT PUSH27 0x4DB1C55E38F27D8795035C089DDF2DA4504915C7EB1442DE947E7C PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1209:1721:80:-:0;;;;;;;;;;;;;-1:-1:-1;;1209:1721:80;;;;-1:-1:-1;;;;;1209:1721:80;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1209:1721:80;;;;;;;;;;;;;;;;;;;;;1273:26:48;;1269:95;;1209:1721:80;;;;;;;;2093:20:49;1209:1721:80;;2093:20:49;1209:1721:80;;-1:-1:-1;1209:1721:80;;;;;-1:-1:-1;1209:1721:80;;;;;3052:40:48;-1:-1:-1;3052:40:48;;1524:4:80;1347:46:32;;1548:29:80;1544:80;;1634:14;;1209:1721;;;;;;1347:46:32;1209:1721:80;;;;;1634:14;1209:1721;;;;;;;;;;;;;;;;1544:80;1600:13;;;-1:-1:-1;1600:13:80;;-1:-1:-1;1600:13:80;1269:95:48;1322:31;;;-1:-1:-1;1322:31:48;-1:-1:-1;1322:31:48;1209:1721:80;;-1:-1:-1;1322:31:48;1209:1721:80;-1:-1:-1;1209:1721:80;;;;;;-1:-1:-1;1209:1721:80;;;;;-1:-1:-1;1209:1721:80"},"deployedBytecode":{"functionDebugData":{"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":1406,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":1178,"id":null,"parameterSlots":2,"returnSlots":0},"fun_canPerform":{"entryPoint":1640,"id":20311,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":1450,"id":9405,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":1288,"id":4356,"parameterSlots":1,"returnSlots":1},"fun_transferOwnership":{"entryPoint":1526,"id":9529,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"4296":[{"length":32,"start":1331}],"20200":[{"length":32,"start":174},{"length":32,"start":490},{"length":32,"start":1727}]},"linkReferences":{},"object":"604060808152600480361015610013575f80fd5b5f35908160e01c918263715018a61461041557826379ba5097146103b1578263851c1bb3146103615782638da5cb5b1461032e578263a89b11281461025f57508163aaabadc514610196578163e30c397814610162578163f2fde38b146100d6575063fbfa77cf14610083575f80fd5b346100d2575f6003193601126100d2576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b346100d25760206003193601126100d2573573ffffffffffffffffffffffffffffffffffffffff8082168092036100d25761010f6105aa565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b82346100d2575f6003193601126100d25760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b9050346100d2575f6003193601126100d25773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561025557926020935f93610226575b505191168152f35b610247919350843d861161024e575b61023f818361049a565b81019061057e565b915f61021e565b503d610235565b83513d5f823e3d90fd5b346100d25760206003193601126100d25781359073ffffffffffffffffffffffffffffffffffffffff9081831683036100d2576102c07fffffffff000000000000000000000000000000000000000000000000000000006102c79216610508565b3390610668565b15610307575f541633146102e0576102de906105f6565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b827f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b83346100d2575f6003193601126100d25760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b8382346100d25760206003193601126100d25735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100d2576103aa602092610508565b9051908152f35b50346100d2575f6003193601126100d2573373ffffffffffffffffffffffffffffffffffffffff60015416036103ea576102de336105f6565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b346100d2575f6003193601126100d25761042d6105aa565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104db57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176104db5760405251902090565b908160209103126100d2575173ffffffffffffffffffffffffffffffffffffffff811681036100d25790565b73ffffffffffffffffffffffffffffffffffffffff5f541633036105ca57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146107a857604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156107795785935f95610784575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa918215610779575f9261074657505090565b90809250813d8311610772575b61075d818361049a565b810103126100d2575180151581036100d25790565b503d610753565b6040513d5f823e3d90fd5b6064929195506107a090853d871161024e5761023f818361049a565b9490916106f1565b50505060019056fea2646970667358221220dd9e17197a4db1c55e38f27d8795035c089ddf2da4504915c7eb1442de947e7c64736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x715018A6 EQ PUSH2 0x415 JUMPI DUP3 PUSH4 0x79BA5097 EQ PUSH2 0x3B1 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0x361 JUMPI DUP3 PUSH4 0x8DA5CB5B EQ PUSH2 0x32E JUMPI DUP3 PUSH4 0xA89B1128 EQ PUSH2 0x25F JUMPI POP DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x196 JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x162 JUMPI DUP2 PUSH4 0xF2FDE38B EQ PUSH2 0xD6 JUMPI POP PUSH4 0xFBFA77CF EQ PUSH2 0x83 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xD2 JUMPI PUSH2 0x10F PUSH2 0x5AA JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x255 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x226 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x247 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x24E JUMPI JUMPDEST PUSH2 0x23F DUP2 DUP4 PUSH2 0x49A JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x57E JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x21E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x235 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP4 AND DUP4 SUB PUSH2 0xD2 JUMPI PUSH2 0x2C0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x2C7 SWAP3 AND PUSH2 0x508 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x668 JUMP JUMPDEST ISZERO PUSH2 0x307 JUMPI PUSH0 SLOAD AND CALLER EQ PUSH2 0x2E0 JUMPI PUSH2 0x2DE SWAP1 PUSH2 0x5F6 JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0xD2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xD2 JUMPI PUSH2 0x3AA PUSH1 0x20 SWAP3 PUSH2 0x508 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0x3EA JUMPI PUSH2 0x2DE CALLER PUSH2 0x5F6 JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xD2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD2 JUMPI PUSH2 0x42D PUSH2 0x5AA JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x4DB JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x4DB JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xD2 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xD2 JUMPI SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x5CA JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x7A8 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x779 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x784 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x779 JUMPI PUSH0 SWAP3 PUSH2 0x746 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x772 JUMPI JUMPDEST PUSH2 0x75D DUP2 DUP4 PUSH2 0x49A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xD2 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xD2 JUMPI SWAP1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x753 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x7A0 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x24E JUMPI PUSH2 0x23F DUP2 DUP4 PUSH2 0x49A JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x6F1 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD SWAP15 OR NOT PUSH27 0x4DB1C55E38F27D8795035C089DDF2DA4504915C7EB1442DE947E7C PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1209:1721:80:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21;1209:1721;1810:21;;;1209:1721;;;;;;;;;;;;;;;;;;-1:-1:-1;;1209:1721:80;;;;;;;;;1348:29;1209:1721;;;;;;;;;;;;;-1:-1:-1;;1209:1721:80;;;;;;;;;;;;;;;1500:62:48;;:::i;:::-;1209:1721:80;;1738:24:49;1209:1721:80;;;1738:24:49;1209:1721:80;;;;1777:43:49;1209:1721:80;1777:43:49;;1209:1721:80;;;;;;;-1:-1:-1;;1209:1721:80;;;;;;;;1311:13:49;1209:1721:80;;;;;;;;;;;;;;;-1:-1:-1;;1209:1721:80;;;;;;1810:21;1209:1721;;1810:21;;1209:1721;1810:21;;:5;;;1209:1721;1810:21;;;;;;;;;;1209:1721;1810:21;;;1209:1721;;;;;;;;1810:21;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;1209:1721;;;;;;;;;;;;;;-1:-1:-1;;1209:1721:80;;;;;;;;;;;;;;;;;1762:20:32;1774:7;1798:33;1774:7;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;1209:1721:80;;;1820:10:32;2423:21:80;2419:77;;2524:8;;;:::i;:::-;1209:1721;2419:77;2467:18;;1209:1721;2467:18;1209:1721;2467:18;1793:90:32;1854:18;;1209:1721:80;1854:18:32;1209:1721:80;1854:18:32;1209:1721:80;;;;;;-1:-1:-1;;1209:1721:80;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1209:1721:80;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;1209:1721:80;;;;;735:10:63;1209:1721:80;1311:13:49;1209:1721:80;;2339:24:49;2335:96;;2459:6;735:10:63;2459:6:49;:::i;2335:96::-;2386:34;1209:1721:80;2386:34:49;735:10:63;1209:1721:80;;;;2386:34:49;1209:1721:80;;;;;-1:-1:-1;;1209:1721:80;;;;;1500:62:48;;:::i;:::-;1209:1721:80;;;;2093:20:49;1209:1721:80;;2093:20:49;1209:1721:80;;;;;;;;;3052:40:48;;;;1209:1721:80;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:32;1209:1721:80;;;2303:50:32;;;2320:22;;1209:1721:80;;;;;;;2303:50:32;;;1209:1721:80;;;;;;;;;;;;;;;2293:61:32;;1931:430;:::o;1209:1721:80:-;;;;;;;;;;;;;;;;;;:::o;1796:162:48:-;1209:1721:80;1710:6:48;1209:1721:80;;735:10:63;1855:23:48;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:63;1901:40:48;1209:1721:80;;1710:6:48;1901:40;2011:153:49;1209:1721:80;;;2093:20:49;1209:1721:80;;2093:20:49;1209:1721:80;2093:20:49;1209:1721:80;;;;;;;;;;2093:20:49;1209:1721:80;;3052:40:48;2093:20:49;3052:40:48;;2011:153:49:o;2546:382:80:-;;1209:1721;;;;;;;;;2721:15;;;2717:57;;1209:1721;;2858:21;1209:1721;2858:21;;;:5;;;:21;:5;;;1209:1721;2858:21;;;;;;;;;1209:1721;2858:21;;;2546:382;1209:1721;;;;;;2858:63;;;;;1209:1721;2858:63;;:21;:63;;1209:1721;;;;;2915:4;1209:1721;;;;;2858:63;;;;;;;1209:1721;2858:63;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;;;;;;;;;;;:::i;:::-;;;1209:1721;;;;;;;;;;;;2546:382;:::o;2858:63::-;;;;;;1209:1721;;;;;;;;;2858:21;1209:1721;2858:21;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","owner()":"8da5cb5b","pendingOwner()":"e30c3978","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Use it to pre-wire admin multisigs upon deployment to a contract that requires permissioned functions to work, where the impact of the owner going rogue is minimal. Contract registries, fee burners, and other utility contracts are good examples. In turn, the pre-configured owner can speed up operations as it can perform any action right after deployment without waiting for governance to set up the authorizer, which can take whole weeks. On the other hand, governance can always revoke or change the owner at any given time, keeping superior powers above the owner.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"kind\":\"user\",\"methods\":{\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"}},\"notice\":\"OwnableAuthentication is a contract that combines ownership management with authentication.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/OwnableAuthentication.sol\":\"OwnableAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]}},\"version\":1}"}},"contracts/PoolHelperCommon.sol":{"PoolHelperCommon":{"abi":[{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"InvalidPoolSetId","type":"error"},{"inputs":[],"name":"InvalidPoolSetManager","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"poolSetManager","type":"address"}],"name":"PoolSetManagerNotUnique","type":"error"},{"inputs":[],"name":"SenderIsNotPoolSetManager","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolRemovedFromSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"initialManager","type":"address"}],"name":"PoolSetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"PoolSetDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"PoolSetOwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPoolsToSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"destroyPoolSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getAllPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getManagerForPoolSet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextPoolSetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getPoolCountForSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolSetIdForCaller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"getPoolSetIdForManager","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isPoolInSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isValidPoolSetId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePoolsFromSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferPoolSetOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"acceptOwnership()":"79ba5097","addPoolsToSet(uint256,address[])":"ebf3a8d0","createPoolSet(address)":"e909c19b","createPoolSet(address,address[])":"3e035f9b","destroyPoolSet(uint256)":"7c1ec460","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAllPoolsInSet(uint256)":"94fc4058","getAuthorizer()":"aaabadc5","getManagerForPoolSet(uint256)":"f167a1e6","getNextPoolSetId()":"c482e822","getPoolCountForSet(uint256)":"62d53462","getPoolSetIdForCaller()":"ce998aba","getPoolSetIdForManager(address)":"25c427ed","getPoolsInSet(uint256,uint256,uint256)":"8c60ebd0","isPoolInSet(address,uint256)":"182551da","isValidPoolSetId(uint256)":"255dae41","owner()":"8da5cb5b","pendingOwner()":"e30c3978","removePoolsFromSet(uint256,address[])":"2da55a1d","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","transferPoolSetOwnership(address)":"3700f987","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"InvalidPoolSetId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolSetManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolSetManager\",\"type\":\"address\"}],\"name\":\"PoolSetManagerNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderIsNotPoolSetManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"PoolSetCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"PoolSetDestroyed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"PoolSetOwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPoolsToSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"destroyPoolSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getAllPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getManagerForPoolSet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextPoolSetId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getPoolCountForSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSetIdForCaller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getPoolSetIdForManager\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isPoolInSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isValidPoolSetId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePoolsFromSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferPoolSetOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"params\":{\"poolSetId\":\"Id of the set involved in the operation\"}}],\"InvalidPoolSetId(uint256)\":[{\"details\":\"This can mean the value is invalid, or it was never created, or it was destroyed.\",\"params\":{\"poolSetId\":\"The id of the invalid set\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolSetManagerNotUnique(address)\":[{\"details\":\"Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\",\"params\":{\"poolSetManager\":\"Address of the manager that is already assigned to another pool set id\"}}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolRemovedFromSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetCreated(uint256,address)\":{\"details\":\"Pools are organized into separate sets, controlled by a manager, which can be changed independently.\",\"params\":{\"initialManager\":\"Address of the pool set manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetDestroyed(uint256,address)\":{\"params\":{\"manager\":\"The address of the set's last manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"details\":\"Managers can only control one pool set. Transfers to existing managers of other sets will revert.\",\"params\":{\"newManager\":\"Address of the new manager\",\"oldManager\":\"Address of the previous manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"addPoolsToSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may add pools to a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"newPools\":\"List of pools to add\",\"poolSetId\":\"Id of the set to which the new pools belong\"}},\"createPoolSet(address)\":{\"details\":\"Convenience function to create a pool set with no initial pools. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\"}},\"createPoolSet(address,address[])\":{\"details\":\"The `newPools` list can be empty, in which case this will only create the set. Pools can then be added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\",\"newPools\":\"Set of pools to add to the set\"}},\"destroyPoolSet(uint256)\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may destroy sets, effectively removing control of any pools in the set from the associated manager. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set being destroyed\"}},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAllPoolsInSet(uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"pools\":\"List of pools\"}},\"getManagerForPoolSet(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\"}},\"getNextPoolSetId()\":{\"returns\":{\"_0\":\"The pool set id that will be used on the next call of `createPoolSet`\"}},\"getPoolCountForSet(uint256)\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction. Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The current number of pools in the set\"}},\"getPoolSetIdForCaller()\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the caller is not a pool set manager\"}},\"getPoolSetIdForManager(address)\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the address given is not a pool set manager\"}},\"getPoolsInSet(uint256,uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`). Reverts if the poolSetId is not valid.\",\"params\":{\"from\":\"Start index\",\"poolSetId\":\"Id of the set containing the pools\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"isPoolInSet(address,uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"pool\":\"Address of the pool to check\",\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the pool is in the given set, false otherwise\"}},\"isValidPoolSetId(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the poolSetId exists\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"removePoolsFromSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may remove pools from a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set to which the pools belong\",\"pools\":\"List of pools to remove from the set\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"transferPoolSetOwnership(address)\":{\"details\":\"This is a permissioned function. Only the current manager of a set can call this to set a new manager. Since managers can only control a single set, there is no need to specify the id in the call. Note that this is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts if the new manager address is zero or already the manager of a pool set.\",\"params\":{\"newManager\":\"The address of the new manager\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"InvalidPoolSetId(uint256)\":[{\"notice\":\"Pool set id associated with an operation is invalid.\"}],\"InvalidPoolSetManager()\":[{\"notice\":\"The initial manager of a pool set cannot be zero.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolNotInSet(address,uint256)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolSetManagerNotUnique(address)\":[{\"notice\":\"Pool set managers can only manage a single pool set.\"}],\"SenderIsNotPoolSetManager()\":[{\"notice\":\"Permissioned operations on pools can only be performed by the pool set manager.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"notice\":\"The owner added a pool to the given set.\"},\"PoolRemovedFromSet(address,uint256)\":{\"notice\":\"The owner removed a pool from the given set.\"},\"PoolSetCreated(uint256,address)\":{\"notice\":\"The owner created a new pool set.\"},\"PoolSetDestroyed(uint256,address)\":{\"notice\":\"The owner destroyed a pool set.\"},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"notice\":\"The current manager of a pool set transferred ownership to a new address.\"}},\"kind\":\"user\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"createPoolSet(address)\":{\"notice\":\"Create a new empty set with an initial manager.\"},\"createPoolSet(address,address[])\":{\"notice\":\"Create a new set with an initial manager, optionally initialized with a set of pools.\"},\"destroyPoolSet(uint256)\":{\"notice\":\"Simple way to remove an entire set of pools from control of the helper function.\"},\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAllPoolsInSet(uint256)\":{\"notice\":\"Get the full set of pools from a given set.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"},\"getManagerForPoolSet(uint256)\":{\"notice\":\"Get the manager address associated with a given poolSetId.\"},\"getNextPoolSetId()\":{\"notice\":\"Utility function to predict the next pool set id.\"},\"getPoolCountForSet(uint256)\":{\"notice\":\"Get the number of pools associated with the given set.\"},\"getPoolSetIdForCaller()\":{\"notice\":\"Get the pool set id associated with the caller.\"},\"getPoolSetIdForManager(address)\":{\"notice\":\"Get the pool set id associated with a given manager address.\"},\"getPoolsInSet(uint256,uint256,uint256)\":{\"notice\":\"Get a range of pools from a given set.\"},\"isPoolInSet(address,uint256)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"isValidPoolSetId(uint256)\":{\"notice\":\"Check whether a poolSetId has been created.\"},\"removePoolsFromSet(uint256,address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"transferPoolSetOwnership(address)\":{\"notice\":\"Transfer ownership of a pool set from the current manager to a new manager.\"}},\"notice\":\"Common code for helper functions that operate on a subset of pools.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/PoolHelperCommon.sol\":\"PoolHelperCommon\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xdb8365416c9dd9d7be16677c13819065511e9bc7705d6bad85fd52b65d3b3c39\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b90206982d126075b074f0a77ea9cb3ec173ed9fe9e4504b12d6807532b1b7ff\",\"dweb:/ipfs/QmYjKTu4Mrew94sSxfQ8jP4yT7wZFgghSRyB9A2kDdSy8X\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/PoolHelperCommon.sol\":{\"keccak256\":\"0x30381172c4e42784079cea20f474af84d39df274cb63f1a2e0426d823ff788e4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6311287a0f4d8b3b8af5c67599f8f8976137b22398fadd243df798baf525b0d6\",\"dweb:/ipfs/QmZuVsXAb7zveWUrEGDVUFrGdFe9AwC1xiGtMJx5vFE6Jc\"]}},\"version\":1}"}},"contracts/PoolPauseHelper.sol":{"PoolPauseHelper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"InvalidPoolSetId","type":"error"},{"inputs":[],"name":"InvalidPoolSetManager","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"poolSetManager","type":"address"}],"name":"PoolSetManagerNotUnique","type":"error"},{"inputs":[],"name":"SenderIsNotPoolSetManager","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolRemovedFromSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"initialManager","type":"address"}],"name":"PoolSetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"PoolSetDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"PoolSetOwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPoolsToSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"destroyPoolSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getAllPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getManagerForPoolSet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextPoolSetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getPoolCountForSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolSetIdForCaller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"getPoolSetIdForManager","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isPoolInSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isValidPoolSetId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"pausePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePoolsFromSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferPoolSetOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461011e57601f6119c038819003918201601f19168301916001600160401b0383118484101761012257808492604094855283398101031261011e5780516001600160a01b03918282169081830361011e576020015183811680910361011e57801561010b5760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100fc5760a05260016002556118899081610137823960805181611220015260a05181818161015b0152818161028b015281816104ee0152818161063401528181610c86015261161e0152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f3560e01c908163182551da14610fa2578163255dae4114610f6357816325c427ed14610f215781632da55a1d14610e895781633700f98714610dd65781633e035f9b14610bff57816362d5346214610bcf578163715018a614610b4a57816379ba509714610ae75781637c1ec4601461099b578163851c1bb3146109525781638c60ebd01461080c5781638da5cb5b146107d957816394fc405814610759578163a20dc529146105d4578163a89b112814610563578163aaabadc51461049a578163c482e8221461047c578163ce998aba14610458578163e30c397814610424578163e909c19b146103e7578163ebf3a8d01461024d578163f167a1e61461021057508063f2fde38b146101835763fbfa77cf14610130575f80fd5b3461017f575f60031936011261017f576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b3461017f57602060031936011261017f5761019c61100a565b6101a4611509565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b823461017f57602060031936011261017f57602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f2054169051908152f35b823461017f579061025d36611130565b61026893919361134e565b610271846112e9565b80519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116925f5b8681106102b857005b826102c382846111b4565b511686517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156103dd575f916103b0575b5015610386579060058b9392845f5252610325828a5f206117fb565b1561035a575090600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a3016102af565b90867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b5090857f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b6103d09150823d84116103d6575b6103c8818361102d565b8101906112d1565b8c610309565b503d6103be565b8a513d5f823e3d90fd5b823461017f57602060031936011261017f5760209061041d61040761100a565b61040f61134e565b610418816113b3565b611474565b9051908152f35b823461017f575f60031936011261017f5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b823461017f575f60031936011261017f57602091335f528252805f20549051908152f35b823461017f575f60031936011261017f576020906002549051908152f35b90503461017f575f60031936011261017f5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561055957926020935f9361052a575b505191168152f35b61054b919350843d8611610552575b610543818361102d565b8101906112a5565b915f610522565b503d610539565b83513d5f823e3d90fd5b3461017f57602060031936011261017f5761057c61100a565b61058461134e565b73ffffffffffffffffffffffffffffffffffffffff5f541633146105ad576105ab90611555565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90503461017f57602091602060031936011261017f5767ffffffffffffffff90823582811161017f5761060d90939293369084016110b3565b91610616611436565b938351945f9473ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016965b88811061065f57005b8161066a82856111b4565b5116845f5260058b5261068d81895f206001915f520160205260405f2054151590565b1561072a57883b1561017f578751907f55aca1ec000000000000000000000000000000000000000000000000000000008252878201525f80828b8160249485925af18015610720576106e4575b5050600101610656565b8682116106f65750875260015f6106da565b6041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b89513d5f823e3d90fd5b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b90503461017f57602090602060031936011261017f5735610779816112e9565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b8282106107c2576107be86866107b4828b038361102d565b5191829182611163565b0390f35b83548752958601956001938401939091019061079c565b823461017f575f60031936011261017f5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b90503461017f57606060031936011261017f5780359060243560443591610832846112e9565b835f526005906020906005602052865f2054858511908115610948575b811561093d575b506109125750610866838561126b565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06108a96108948861109b565b976108a18a51998a61102d565b80895261109b565b01366020880137835b8581106108c6578751806107be8982611163565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff6108f0828b5f206116f2565b90549060031b1c1661090b610905888461126b565b8a6111b4565b52016108b2565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b90508410155f610856565b808711915061084f565b90503461017f57602060031936011261017f5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361017f5761041d6020926111f5565b90503461017f576020918260031936011261017f578135916109bb61134e565b6109c4836112e9565b825f5260058452815f208054805b610a87575050825f5260058452815f208054905f815581610a6a575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b818110156109ee575f8155600101610a74565b5f190180610ae173ffffffffffffffffffffffffffffffffffffffff610aad83866116f2565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a384611707565b506109d2565b3461017f575f60031936011261017f573373ffffffffffffffffffffffffffffffffffffffff6001541603610b1f576105ab33611555565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b3461017f575f60031936011261017f57610b62611509565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b823461017f57602060031936011261017f5760209135610bee816112e9565b5f5260058252805f20549051908152f35b823461017f578060031936011261017f57610c1861100a565b60249260243567ffffffffffffffff811161017f57610c3d610c4691369084016110b3565b9261040f61134e565b938251610c58575b6020858551908152f35b610c6392919261134e565b610c6c856112e9565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610cba5750505050610c4e565b82610cc582846111b4565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610dcc575f91610daf575b5015610d85579060058b92835f5252610d24818b5f206117fb565b15610d585790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610caa565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610dc69150823d84116103d6576103c8818361102d565b8c610d09565b8b513d5f823e3d90fd5b823461017f57602060031936011261017f57610df061100a565b91610dfa836113b3565b610e02611436565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b823461017f57610e9836611130565b91610ea161134e565b610eaa826112e9565b8251925f5b848110610eb857005b73ffffffffffffffffffffffffffffffffffffffff610ed782846111b4565b5116845f526005602052610eed81855f20611707565b1561072a5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610eaf565b823461017f57602060031936011261017f5760209173ffffffffffffffffffffffffffffffffffffffff610f5361100a565b165f528252805f20549051908152f35b823461017f57602060031936011261017f57602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b823461017f578060031936011261017f57602090611001610fc161100a565b602435610fcd816112e9565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361017f57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761106e57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161106e5760051b60200190565b9080601f8301121561017f5760209082356110cd8161109b565b936110db604051958661102d565b81855260208086019260051b82010192831161017f57602001905b828210611104575050505090565b813573ffffffffffffffffffffffffffffffffffffffff8116810361017f5781529083019083016110f6565b90604060031983011261017f57600435916024359067ffffffffffffffff821161017f57611160916004016110b3565b90565b60209060206040818301928281528551809452019301915f5b82811061118a575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161117c565b80518210156111c85760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff82111761106e5760405251902090565b9190820391821161127857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9081602091031261017f575173ffffffffffffffffffffffffffffffffffffffff8116810361017f5790565b9081602091031261017f5751801515810361017f5790565b80158015611324575b6112f95750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f205416156112f2565b61138461137d7fffffffff000000000000000000000000000000000000000000000000000000005f35166111f5565b33906115c7565b1561138b57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff16801561140e57805f52600460205260405f20546113e35750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561144c57565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611278576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361152957565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146116ea57604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156116bb5785935f956116c6575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa9182156116bb575f926116a557505090565b6111609250803d106103d6576103c8818361102d565b6040513d5f823e3d90fd5b6064929195506116e290853d871161055257610543818361102d565b949091611650565b505050600190565b80548210156111c8575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f146117f3575f199182810181811161127857825490848201918211611278578181036117a8575b5050508054801561177b5782019161175d83836116f2565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b6117de6117b86117c893866116f2565b90549060031b1c928392866116f2565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f8080611745565b505050505f90565b5f82815260018201602052604090205461184d578054906801000000000000000082101561106e57826118386117c88460018096018555846116f2565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220bbf76f2b279479a6ae81bef191395e763b8d46e571e8aae4d0995f91fe91154864736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x11E JUMPI PUSH1 0x1F PUSH2 0x19C0 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x122 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x11E JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x11E JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x11E JUMPI DUP1 ISZERO PUSH2 0x10B JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xFC JUMPI PUSH1 0xA0 MSTORE PUSH1 0x1 PUSH1 0x2 SSTORE PUSH2 0x1889 SWAP1 DUP2 PUSH2 0x137 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x1220 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x15B ADD MSTORE DUP2 DUP2 PUSH2 0x28B ADD MSTORE DUP2 DUP2 PUSH2 0x4EE ADD MSTORE DUP2 DUP2 PUSH2 0x634 ADD MSTORE DUP2 DUP2 PUSH2 0xC86 ADD MSTORE PUSH2 0x161E ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x182551DA EQ PUSH2 0xFA2 JUMPI DUP2 PUSH4 0x255DAE41 EQ PUSH2 0xF63 JUMPI DUP2 PUSH4 0x25C427ED EQ PUSH2 0xF21 JUMPI DUP2 PUSH4 0x2DA55A1D EQ PUSH2 0xE89 JUMPI DUP2 PUSH4 0x3700F987 EQ PUSH2 0xDD6 JUMPI DUP2 PUSH4 0x3E035F9B EQ PUSH2 0xBFF JUMPI DUP2 PUSH4 0x62D53462 EQ PUSH2 0xBCF JUMPI DUP2 PUSH4 0x715018A6 EQ PUSH2 0xB4A JUMPI DUP2 PUSH4 0x79BA5097 EQ PUSH2 0xAE7 JUMPI DUP2 PUSH4 0x7C1EC460 EQ PUSH2 0x99B JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x952 JUMPI DUP2 PUSH4 0x8C60EBD0 EQ PUSH2 0x80C JUMPI DUP2 PUSH4 0x8DA5CB5B EQ PUSH2 0x7D9 JUMPI DUP2 PUSH4 0x94FC4058 EQ PUSH2 0x759 JUMPI DUP2 PUSH4 0xA20DC529 EQ PUSH2 0x5D4 JUMPI DUP2 PUSH4 0xA89B1128 EQ PUSH2 0x563 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x49A JUMPI DUP2 PUSH4 0xC482E822 EQ PUSH2 0x47C JUMPI DUP2 PUSH4 0xCE998ABA EQ PUSH2 0x458 JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x424 JUMPI DUP2 PUSH4 0xE909C19B EQ PUSH2 0x3E7 JUMPI DUP2 PUSH4 0xEBF3A8D0 EQ PUSH2 0x24D JUMPI DUP2 PUSH4 0xF167A1E6 EQ PUSH2 0x210 JUMPI POP DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x183 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x130 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x17F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH2 0x19C PUSH2 0x100A JUMP JUMPDEST PUSH2 0x1A4 PUSH2 0x1509 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI SWAP1 PUSH2 0x25D CALLDATASIZE PUSH2 0x1130 JUMP JUMPDEST PUSH2 0x268 SWAP4 SWAP2 SWAP4 PUSH2 0x134E JUMP JUMPDEST PUSH2 0x271 DUP5 PUSH2 0x12E9 JUMP JUMPDEST DUP1 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x2B8 JUMPI STOP JUMPDEST DUP3 PUSH2 0x2C3 DUP3 DUP5 PUSH2 0x11B4 JUMP JUMPDEST MLOAD AND DUP7 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3DD JUMPI PUSH0 SWAP2 PUSH2 0x3B0 JUMPI JUMPDEST POP ISZERO PUSH2 0x386 JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP4 SWAP3 DUP5 PUSH0 MSTORE MSTORE PUSH2 0x325 DUP3 DUP11 PUSH0 KECCAK256 PUSH2 0x17FB JUMP JUMPDEST ISZERO PUSH2 0x35A JUMPI POP SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0x2AF JUMP JUMPDEST SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x3D0 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3D6 JUMPI JUMPDEST PUSH2 0x3C8 DUP2 DUP4 PUSH2 0x102D JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x12D1 JUMP JUMPDEST DUP13 PUSH2 0x309 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3BE JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP1 PUSH2 0x41D PUSH2 0x407 PUSH2 0x100A JUMP JUMPDEST PUSH2 0x40F PUSH2 0x134E JUMP JUMPDEST PUSH2 0x418 DUP2 PUSH2 0x13B3 JUMP JUMPDEST PUSH2 0x1474 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP2 CALLER PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x17F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x559 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x52A JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x54B SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x552 JUMPI JUMPDEST PUSH2 0x543 DUP2 DUP4 PUSH2 0x102D JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x12A5 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x522 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x539 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH2 0x57C PUSH2 0x100A JUMP JUMPDEST PUSH2 0x584 PUSH2 0x134E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x5AD JUMPI PUSH2 0x5AB SWAP1 PUSH2 0x1555 JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 SWAP2 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP3 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x17F JUMPI PUSH2 0x60D SWAP1 SWAP4 SWAP3 SWAP4 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x10B3 JUMP JUMPDEST SWAP2 PUSH2 0x616 PUSH2 0x1436 JUMP JUMPDEST SWAP4 DUP4 MLOAD SWAP5 PUSH0 SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP7 JUMPDEST DUP9 DUP2 LT PUSH2 0x65F JUMPI STOP JUMPDEST DUP2 PUSH2 0x66A DUP3 DUP6 PUSH2 0x11B4 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 DUP12 MSTORE PUSH2 0x68D DUP2 DUP10 PUSH0 KECCAK256 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x72A JUMPI DUP9 EXTCODESIZE ISZERO PUSH2 0x17F JUMPI DUP8 MLOAD SWAP1 PUSH32 0x55ACA1EC00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP8 DUP3 ADD MSTORE PUSH0 DUP1 DUP3 DUP12 DUP2 PUSH1 0x24 SWAP5 DUP6 SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x720 JUMPI PUSH2 0x6E4 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x656 JUMP JUMPDEST DUP7 DUP3 GT PUSH2 0x6F6 JUMPI POP DUP8 MSTORE PUSH1 0x1 PUSH0 PUSH2 0x6DA JUMP JUMPDEST PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP10 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI CALLDATALOAD PUSH2 0x779 DUP2 PUSH2 0x12E9 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x7C2 JUMPI PUSH2 0x7BE DUP7 DUP7 PUSH2 0x7B4 DUP3 DUP12 SUB DUP4 PUSH2 0x102D JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1163 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x79C JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x832 DUP5 PUSH2 0x12E9 JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x948 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x93D JUMPI JUMPDEST POP PUSH2 0x912 JUMPI POP PUSH2 0x866 DUP4 DUP6 PUSH2 0x126B JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x8A9 PUSH2 0x894 DUP9 PUSH2 0x109B JUMP JUMPDEST SWAP8 PUSH2 0x8A1 DUP11 MLOAD SWAP10 DUP11 PUSH2 0x102D JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x109B JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x8C6 JUMPI DUP8 MLOAD DUP1 PUSH2 0x7BE DUP10 DUP3 PUSH2 0x1163 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x8F0 DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x16F2 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x90B PUSH2 0x905 DUP9 DUP5 PUSH2 0x126B JUMP JUMPDEST DUP11 PUSH2 0x11B4 JUMP JUMPDEST MSTORE ADD PUSH2 0x8B2 JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO PUSH0 PUSH2 0x856 JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x84F JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x17F JUMPI PUSH2 0x41D PUSH1 0x20 SWAP3 PUSH2 0x11F5 JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0x9BB PUSH2 0x134E JUMP JUMPDEST PUSH2 0x9C4 DUP4 PUSH2 0x12E9 JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0xA87 JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0xA6A JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x9EE JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xA74 JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0xAE1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xAAD DUP4 DUP7 PUSH2 0x16F2 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x1707 JUMP JUMPDEST POP PUSH2 0x9D2 JUMP JUMPDEST CALLVALUE PUSH2 0x17F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0xB1F JUMPI PUSH2 0x5AB CALLER PUSH2 0x1555 JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x17F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH2 0xB62 PUSH2 0x1509 JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xBEE DUP2 PUSH2 0x12E9 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH2 0xC18 PUSH2 0x100A JUMP JUMPDEST PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x17F JUMPI PUSH2 0xC3D PUSH2 0xC46 SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x10B3 JUMP JUMPDEST SWAP3 PUSH2 0x40F PUSH2 0x134E JUMP JUMPDEST SWAP4 DUP3 MLOAD PUSH2 0xC58 JUMPI JUMPDEST PUSH1 0x20 DUP6 DUP6 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xC63 SWAP3 SWAP2 SWAP3 PUSH2 0x134E JUMP JUMPDEST PUSH2 0xC6C DUP6 PUSH2 0x12E9 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0xCBA JUMPI POP POP POP POP PUSH2 0xC4E JUMP JUMPDEST DUP3 PUSH2 0xCC5 DUP3 DUP5 PUSH2 0x11B4 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP10 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xDCC JUMPI PUSH0 SWAP2 PUSH2 0xDAF JUMPI JUMPDEST POP ISZERO PUSH2 0xD85 JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP3 DUP4 PUSH0 MSTORE MSTORE PUSH2 0xD24 DUP2 DUP12 PUSH0 KECCAK256 PUSH2 0x17FB JUMP JUMPDEST ISZERO PUSH2 0xD58 JUMPI SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xCAA JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xDC6 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3D6 JUMPI PUSH2 0x3C8 DUP2 DUP4 PUSH2 0x102D JUMP JUMPDEST DUP13 PUSH2 0xD09 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH2 0xDF0 PUSH2 0x100A JUMP JUMPDEST SWAP2 PUSH2 0xDFA DUP4 PUSH2 0x13B3 JUMP JUMPDEST PUSH2 0xE02 PUSH2 0x1436 JUMP JUMPDEST SWAP2 DUP3 SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH2 0xE98 CALLDATASIZE PUSH2 0x1130 JUMP JUMPDEST SWAP2 PUSH2 0xEA1 PUSH2 0x134E JUMP JUMPDEST PUSH2 0xEAA DUP3 PUSH2 0x12E9 JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xEB8 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xED7 DUP3 DUP5 PUSH2 0x11B4 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0xEED DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x1707 JUMP JUMPDEST ISZERO PUSH2 0x72A JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0xEAF JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xF53 PUSH2 0x100A JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1001 PUSH2 0xFC1 PUSH2 0x100A JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0xFCD DUP2 PUSH2 0x12E9 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x17F JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x106E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x106E JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x17F JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x10CD DUP2 PUSH2 0x109B JUMP JUMPDEST SWAP4 PUSH2 0x10DB PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x102D JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x17F JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1104 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x17F JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x10F6 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x17F JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x17F JUMPI PUSH2 0x1160 SWAP2 PUSH1 0x4 ADD PUSH2 0x10B3 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x118A JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x117C JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x11C8 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x106E JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1278 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x17F JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x17F JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x17F JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x17F JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x1324 JUMPI JUMPDEST PUSH2 0x12F9 JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x12F2 JUMP JUMPDEST PUSH2 0x1384 PUSH2 0x137D PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x11F5 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x15C7 JUMP JUMPDEST ISZERO PUSH2 0x138B JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x140E JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x13E3 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLER PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x144C JUMPI JUMP JUMPDEST PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x1278 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x1529 JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x16EA JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x16BB JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x16C6 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x16BB JUMPI PUSH0 SWAP3 PUSH2 0x16A5 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1160 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x3D6 JUMPI PUSH2 0x3C8 DUP2 DUP4 PUSH2 0x102D JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x16E2 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x552 JUMPI PUSH2 0x543 DUP2 DUP4 PUSH2 0x102D JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1650 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x11C8 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x17F3 JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x1278 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x1278 JUMPI DUP2 DUP2 SUB PUSH2 0x17A8 JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x177B JUMPI DUP3 ADD SWAP2 PUSH2 0x175D DUP4 DUP4 PUSH2 0x16F2 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x17DE PUSH2 0x17B8 PUSH2 0x17C8 SWAP4 DUP7 PUSH2 0x16F2 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x16F2 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x1745 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x184D JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0x106E JUMPI DUP3 PUSH2 0x1838 PUSH2 0x17C8 DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x16F2 JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBB 0xF7 PUSH16 0x2B279479A6AE81BEF191395E763B8D46 0xE5 PUSH18 0xE8AAE4D0995F91FE91154864736F6C634300 ADDMOD SHL STOP CALLER ","sourceMap":"328:853:82:-:0;;;;;;;;;;;;;-1:-1:-1;;328:853:82;;;;-1:-1:-1;;;;;328:853:82;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;328:853:82;;;;;;;;;;;;;;;;;;;;;1273:26:48;;1269:95;;328:853:82;;;;;;;;2093:20:49;328:853:82;;2093:20:49;328:853:82;;-1:-1:-1;328:853:82;;;;;-1:-1:-1;328:853:82;;;;;3052:40:48;-1:-1:-1;3052:40:48;;1524:4:80;1347:46:32;;1548:29:80;1544:80;;1634:14;;2093:20:49;853:1:81;328:853:82;;;;;;;1347:46:32;328:853:82;;;;;1634:14:80;328:853:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1544:80:80;1600:13;;;-1:-1:-1;1600:13:80;;-1:-1:-1;1600:13:80;1269:95:48;1322:31;;;-1:-1:-1;1322:31:48;-1:-1:-1;1322:31:48;328:853:82;;-1:-1:-1;1322:31:48;328:853:82;-1:-1:-1;328:853:82;;;;;;-1:-1:-1;328:853:82;;;;;-1:-1:-1;328:853:82"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":4106,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_array_address_dyn":{"entryPoint":4275,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":4817,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":4773,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_array_address_dyn":{"entryPoint":4400,"id":null,"parameterSlots":1,"returnSlots":2},"abi_encode_array_address_dyn":{"entryPoint":4451,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":4251,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":4715,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":4141,"id":null,"parameterSlots":2,"returnSlots":0},"fun_add":{"entryPoint":6139,"id":16131,"parameterSlots":2,"returnSlots":1},"fun_authenticateCaller":{"entryPoint":4942,"id":4338,"parameterSlots":0,"returnSlots":0},"fun_canPerform":{"entryPoint":5575,"id":20311,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":5385,"id":9405,"parameterSlots":0,"returnSlots":0},"fun_contains":{"entryPoint":null,"id":16277,"parameterSlots":2,"returnSlots":1},"fun_createPoolSet":{"entryPoint":5236,"id":20479,"parameterSlots":1,"returnSlots":1},"fun_ensureValidManager":{"entryPoint":5043,"id":20986,"parameterSlots":1,"returnSlots":0},"fun_ensureValidPoolSet":{"entryPoint":4841,"id":21040,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":4597,"id":4356,"parameterSlots":1,"returnSlots":1},"fun_getValidPoolSetId":{"entryPoint":5174,"id":20958,"parameterSlots":0,"returnSlots":1},"fun_remove":{"entryPoint":5895,"id":16215,"parameterSlots":2,"returnSlots":1},"fun_transferOwnership":{"entryPoint":5461,"id":9529,"parameterSlots":1,"returnSlots":0},"memory_array_index_access_address_dyn":{"entryPoint":4532,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_bytes32_dyn":{"entryPoint":5874,"id":null,"parameterSlots":2,"returnSlots":2},"update_byte_slice_dynamic32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4296":[{"length":32,"start":4640}],"20200":[{"length":32,"start":347},{"length":32,"start":651},{"length":32,"start":1262},{"length":32,"start":1588},{"length":32,"start":3206},{"length":32,"start":5662}]},"linkReferences":{},"object":"604060808152600480361015610013575f80fd5b5f3560e01c908163182551da14610fa2578163255dae4114610f6357816325c427ed14610f215781632da55a1d14610e895781633700f98714610dd65781633e035f9b14610bff57816362d5346214610bcf578163715018a614610b4a57816379ba509714610ae75781637c1ec4601461099b578163851c1bb3146109525781638c60ebd01461080c5781638da5cb5b146107d957816394fc405814610759578163a20dc529146105d4578163a89b112814610563578163aaabadc51461049a578163c482e8221461047c578163ce998aba14610458578163e30c397814610424578163e909c19b146103e7578163ebf3a8d01461024d578163f167a1e61461021057508063f2fde38b146101835763fbfa77cf14610130575f80fd5b3461017f575f60031936011261017f576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b3461017f57602060031936011261017f5761019c61100a565b6101a4611509565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b823461017f57602060031936011261017f57602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f2054169051908152f35b823461017f579061025d36611130565b61026893919361134e565b610271846112e9565b80519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116925f5b8681106102b857005b826102c382846111b4565b511686517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156103dd575f916103b0575b5015610386579060058b9392845f5252610325828a5f206117fb565b1561035a575090600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a3016102af565b90867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b5090857f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b6103d09150823d84116103d6575b6103c8818361102d565b8101906112d1565b8c610309565b503d6103be565b8a513d5f823e3d90fd5b823461017f57602060031936011261017f5760209061041d61040761100a565b61040f61134e565b610418816113b3565b611474565b9051908152f35b823461017f575f60031936011261017f5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b823461017f575f60031936011261017f57602091335f528252805f20549051908152f35b823461017f575f60031936011261017f576020906002549051908152f35b90503461017f575f60031936011261017f5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561055957926020935f9361052a575b505191168152f35b61054b919350843d8611610552575b610543818361102d565b8101906112a5565b915f610522565b503d610539565b83513d5f823e3d90fd5b3461017f57602060031936011261017f5761057c61100a565b61058461134e565b73ffffffffffffffffffffffffffffffffffffffff5f541633146105ad576105ab90611555565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90503461017f57602091602060031936011261017f5767ffffffffffffffff90823582811161017f5761060d90939293369084016110b3565b91610616611436565b938351945f9473ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016965b88811061065f57005b8161066a82856111b4565b5116845f5260058b5261068d81895f206001915f520160205260405f2054151590565b1561072a57883b1561017f578751907f55aca1ec000000000000000000000000000000000000000000000000000000008252878201525f80828b8160249485925af18015610720576106e4575b5050600101610656565b8682116106f65750875260015f6106da565b6041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b89513d5f823e3d90fd5b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b90503461017f57602090602060031936011261017f5735610779816112e9565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b8282106107c2576107be86866107b4828b038361102d565b5191829182611163565b0390f35b83548752958601956001938401939091019061079c565b823461017f575f60031936011261017f5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b90503461017f57606060031936011261017f5780359060243560443591610832846112e9565b835f526005906020906005602052865f2054858511908115610948575b811561093d575b506109125750610866838561126b565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06108a96108948861109b565b976108a18a51998a61102d565b80895261109b565b01366020880137835b8581106108c6578751806107be8982611163565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff6108f0828b5f206116f2565b90549060031b1c1661090b610905888461126b565b8a6111b4565b52016108b2565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b90508410155f610856565b808711915061084f565b90503461017f57602060031936011261017f5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361017f5761041d6020926111f5565b90503461017f576020918260031936011261017f578135916109bb61134e565b6109c4836112e9565b825f5260058452815f208054805b610a87575050825f5260058452815f208054905f815581610a6a575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b818110156109ee575f8155600101610a74565b5f190180610ae173ffffffffffffffffffffffffffffffffffffffff610aad83866116f2565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a384611707565b506109d2565b3461017f575f60031936011261017f573373ffffffffffffffffffffffffffffffffffffffff6001541603610b1f576105ab33611555565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b3461017f575f60031936011261017f57610b62611509565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b823461017f57602060031936011261017f5760209135610bee816112e9565b5f5260058252805f20549051908152f35b823461017f578060031936011261017f57610c1861100a565b60249260243567ffffffffffffffff811161017f57610c3d610c4691369084016110b3565b9261040f61134e565b938251610c58575b6020858551908152f35b610c6392919261134e565b610c6c856112e9565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610cba5750505050610c4e565b82610cc582846111b4565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610dcc575f91610daf575b5015610d85579060058b92835f5252610d24818b5f206117fb565b15610d585790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610caa565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610dc69150823d84116103d6576103c8818361102d565b8c610d09565b8b513d5f823e3d90fd5b823461017f57602060031936011261017f57610df061100a565b91610dfa836113b3565b610e02611436565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b823461017f57610e9836611130565b91610ea161134e565b610eaa826112e9565b8251925f5b848110610eb857005b73ffffffffffffffffffffffffffffffffffffffff610ed782846111b4565b5116845f526005602052610eed81855f20611707565b1561072a5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610eaf565b823461017f57602060031936011261017f5760209173ffffffffffffffffffffffffffffffffffffffff610f5361100a565b165f528252805f20549051908152f35b823461017f57602060031936011261017f57602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b823461017f578060031936011261017f57602090611001610fc161100a565b602435610fcd816112e9565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361017f57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761106e57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161106e5760051b60200190565b9080601f8301121561017f5760209082356110cd8161109b565b936110db604051958661102d565b81855260208086019260051b82010192831161017f57602001905b828210611104575050505090565b813573ffffffffffffffffffffffffffffffffffffffff8116810361017f5781529083019083016110f6565b90604060031983011261017f57600435916024359067ffffffffffffffff821161017f57611160916004016110b3565b90565b60209060206040818301928281528551809452019301915f5b82811061118a575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161117c565b80518210156111c85760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff82111761106e5760405251902090565b9190820391821161127857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9081602091031261017f575173ffffffffffffffffffffffffffffffffffffffff8116810361017f5790565b9081602091031261017f5751801515810361017f5790565b80158015611324575b6112f95750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f205416156112f2565b61138461137d7fffffffff000000000000000000000000000000000000000000000000000000005f35166111f5565b33906115c7565b1561138b57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff16801561140e57805f52600460205260405f20546113e35750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561144c57565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611278576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361152957565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146116ea57604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156116bb5785935f956116c6575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa9182156116bb575f926116a557505090565b6111609250803d106103d6576103c8818361102d565b6040513d5f823e3d90fd5b6064929195506116e290853d871161055257610543818361102d565b949091611650565b505050600190565b80548210156111c8575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f146117f3575f199182810181811161127857825490848201918211611278578181036117a8575b5050508054801561177b5782019161175d83836116f2565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b6117de6117b86117c893866116f2565b90549060031b1c928392866116f2565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f8080611745565b505050505f90565b5f82815260018201602052604090205461184d578054906801000000000000000082101561106e57826118386117c88460018096018555846116f2565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220bbf76f2b279479a6ae81bef191395e763b8d46e571e8aae4d0995f91fe91154864736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x182551DA EQ PUSH2 0xFA2 JUMPI DUP2 PUSH4 0x255DAE41 EQ PUSH2 0xF63 JUMPI DUP2 PUSH4 0x25C427ED EQ PUSH2 0xF21 JUMPI DUP2 PUSH4 0x2DA55A1D EQ PUSH2 0xE89 JUMPI DUP2 PUSH4 0x3700F987 EQ PUSH2 0xDD6 JUMPI DUP2 PUSH4 0x3E035F9B EQ PUSH2 0xBFF JUMPI DUP2 PUSH4 0x62D53462 EQ PUSH2 0xBCF JUMPI DUP2 PUSH4 0x715018A6 EQ PUSH2 0xB4A JUMPI DUP2 PUSH4 0x79BA5097 EQ PUSH2 0xAE7 JUMPI DUP2 PUSH4 0x7C1EC460 EQ PUSH2 0x99B JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x952 JUMPI DUP2 PUSH4 0x8C60EBD0 EQ PUSH2 0x80C JUMPI DUP2 PUSH4 0x8DA5CB5B EQ PUSH2 0x7D9 JUMPI DUP2 PUSH4 0x94FC4058 EQ PUSH2 0x759 JUMPI DUP2 PUSH4 0xA20DC529 EQ PUSH2 0x5D4 JUMPI DUP2 PUSH4 0xA89B1128 EQ PUSH2 0x563 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x49A JUMPI DUP2 PUSH4 0xC482E822 EQ PUSH2 0x47C JUMPI DUP2 PUSH4 0xCE998ABA EQ PUSH2 0x458 JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x424 JUMPI DUP2 PUSH4 0xE909C19B EQ PUSH2 0x3E7 JUMPI DUP2 PUSH4 0xEBF3A8D0 EQ PUSH2 0x24D JUMPI DUP2 PUSH4 0xF167A1E6 EQ PUSH2 0x210 JUMPI POP DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x183 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x130 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x17F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH2 0x19C PUSH2 0x100A JUMP JUMPDEST PUSH2 0x1A4 PUSH2 0x1509 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI SWAP1 PUSH2 0x25D CALLDATASIZE PUSH2 0x1130 JUMP JUMPDEST PUSH2 0x268 SWAP4 SWAP2 SWAP4 PUSH2 0x134E JUMP JUMPDEST PUSH2 0x271 DUP5 PUSH2 0x12E9 JUMP JUMPDEST DUP1 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x2B8 JUMPI STOP JUMPDEST DUP3 PUSH2 0x2C3 DUP3 DUP5 PUSH2 0x11B4 JUMP JUMPDEST MLOAD AND DUP7 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3DD JUMPI PUSH0 SWAP2 PUSH2 0x3B0 JUMPI JUMPDEST POP ISZERO PUSH2 0x386 JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP4 SWAP3 DUP5 PUSH0 MSTORE MSTORE PUSH2 0x325 DUP3 DUP11 PUSH0 KECCAK256 PUSH2 0x17FB JUMP JUMPDEST ISZERO PUSH2 0x35A JUMPI POP SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0x2AF JUMP JUMPDEST SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x3D0 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3D6 JUMPI JUMPDEST PUSH2 0x3C8 DUP2 DUP4 PUSH2 0x102D JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x12D1 JUMP JUMPDEST DUP13 PUSH2 0x309 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3BE JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP1 PUSH2 0x41D PUSH2 0x407 PUSH2 0x100A JUMP JUMPDEST PUSH2 0x40F PUSH2 0x134E JUMP JUMPDEST PUSH2 0x418 DUP2 PUSH2 0x13B3 JUMP JUMPDEST PUSH2 0x1474 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP2 CALLER PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x17F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x559 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x52A JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x54B SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x552 JUMPI JUMPDEST PUSH2 0x543 DUP2 DUP4 PUSH2 0x102D JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x12A5 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x522 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x539 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH2 0x57C PUSH2 0x100A JUMP JUMPDEST PUSH2 0x584 PUSH2 0x134E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x5AD JUMPI PUSH2 0x5AB SWAP1 PUSH2 0x1555 JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 SWAP2 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP3 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x17F JUMPI PUSH2 0x60D SWAP1 SWAP4 SWAP3 SWAP4 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x10B3 JUMP JUMPDEST SWAP2 PUSH2 0x616 PUSH2 0x1436 JUMP JUMPDEST SWAP4 DUP4 MLOAD SWAP5 PUSH0 SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP7 JUMPDEST DUP9 DUP2 LT PUSH2 0x65F JUMPI STOP JUMPDEST DUP2 PUSH2 0x66A DUP3 DUP6 PUSH2 0x11B4 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 DUP12 MSTORE PUSH2 0x68D DUP2 DUP10 PUSH0 KECCAK256 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x72A JUMPI DUP9 EXTCODESIZE ISZERO PUSH2 0x17F JUMPI DUP8 MLOAD SWAP1 PUSH32 0x55ACA1EC00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP8 DUP3 ADD MSTORE PUSH0 DUP1 DUP3 DUP12 DUP2 PUSH1 0x24 SWAP5 DUP6 SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x720 JUMPI PUSH2 0x6E4 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x656 JUMP JUMPDEST DUP7 DUP3 GT PUSH2 0x6F6 JUMPI POP DUP8 MSTORE PUSH1 0x1 PUSH0 PUSH2 0x6DA JUMP JUMPDEST PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP10 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI CALLDATALOAD PUSH2 0x779 DUP2 PUSH2 0x12E9 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x7C2 JUMPI PUSH2 0x7BE DUP7 DUP7 PUSH2 0x7B4 DUP3 DUP12 SUB DUP4 PUSH2 0x102D JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1163 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x79C JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x832 DUP5 PUSH2 0x12E9 JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x948 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x93D JUMPI JUMPDEST POP PUSH2 0x912 JUMPI POP PUSH2 0x866 DUP4 DUP6 PUSH2 0x126B JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x8A9 PUSH2 0x894 DUP9 PUSH2 0x109B JUMP JUMPDEST SWAP8 PUSH2 0x8A1 DUP11 MLOAD SWAP10 DUP11 PUSH2 0x102D JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x109B JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x8C6 JUMPI DUP8 MLOAD DUP1 PUSH2 0x7BE DUP10 DUP3 PUSH2 0x1163 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x8F0 DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x16F2 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x90B PUSH2 0x905 DUP9 DUP5 PUSH2 0x126B JUMP JUMPDEST DUP11 PUSH2 0x11B4 JUMP JUMPDEST MSTORE ADD PUSH2 0x8B2 JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO PUSH0 PUSH2 0x856 JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x84F JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x17F JUMPI PUSH2 0x41D PUSH1 0x20 SWAP3 PUSH2 0x11F5 JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0x9BB PUSH2 0x134E JUMP JUMPDEST PUSH2 0x9C4 DUP4 PUSH2 0x12E9 JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0xA87 JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0xA6A JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x9EE JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xA74 JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0xAE1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xAAD DUP4 DUP7 PUSH2 0x16F2 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x1707 JUMP JUMPDEST POP PUSH2 0x9D2 JUMP JUMPDEST CALLVALUE PUSH2 0x17F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0xB1F JUMPI PUSH2 0x5AB CALLER PUSH2 0x1555 JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x17F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH2 0xB62 PUSH2 0x1509 JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xBEE DUP2 PUSH2 0x12E9 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH2 0xC18 PUSH2 0x100A JUMP JUMPDEST PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x17F JUMPI PUSH2 0xC3D PUSH2 0xC46 SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x10B3 JUMP JUMPDEST SWAP3 PUSH2 0x40F PUSH2 0x134E JUMP JUMPDEST SWAP4 DUP3 MLOAD PUSH2 0xC58 JUMPI JUMPDEST PUSH1 0x20 DUP6 DUP6 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xC63 SWAP3 SWAP2 SWAP3 PUSH2 0x134E JUMP JUMPDEST PUSH2 0xC6C DUP6 PUSH2 0x12E9 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0xCBA JUMPI POP POP POP POP PUSH2 0xC4E JUMP JUMPDEST DUP3 PUSH2 0xCC5 DUP3 DUP5 PUSH2 0x11B4 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP10 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xDCC JUMPI PUSH0 SWAP2 PUSH2 0xDAF JUMPI JUMPDEST POP ISZERO PUSH2 0xD85 JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP3 DUP4 PUSH0 MSTORE MSTORE PUSH2 0xD24 DUP2 DUP12 PUSH0 KECCAK256 PUSH2 0x17FB JUMP JUMPDEST ISZERO PUSH2 0xD58 JUMPI SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xCAA JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xDC6 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3D6 JUMPI PUSH2 0x3C8 DUP2 DUP4 PUSH2 0x102D JUMP JUMPDEST DUP13 PUSH2 0xD09 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH2 0xDF0 PUSH2 0x100A JUMP JUMPDEST SWAP2 PUSH2 0xDFA DUP4 PUSH2 0x13B3 JUMP JUMPDEST PUSH2 0xE02 PUSH2 0x1436 JUMP JUMPDEST SWAP2 DUP3 SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH2 0xE98 CALLDATASIZE PUSH2 0x1130 JUMP JUMPDEST SWAP2 PUSH2 0xEA1 PUSH2 0x134E JUMP JUMPDEST PUSH2 0xEAA DUP3 PUSH2 0x12E9 JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xEB8 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xED7 DUP3 DUP5 PUSH2 0x11B4 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0xEED DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x1707 JUMP JUMPDEST ISZERO PUSH2 0x72A JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0xEAF JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xF53 PUSH2 0x100A JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x17F JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x17F JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1001 PUSH2 0xFC1 PUSH2 0x100A JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0xFCD DUP2 PUSH2 0x12E9 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x17F JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x106E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x106E JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x17F JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x10CD DUP2 PUSH2 0x109B JUMP JUMPDEST SWAP4 PUSH2 0x10DB PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x102D JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x17F JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1104 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x17F JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x10F6 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x17F JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x17F JUMPI PUSH2 0x1160 SWAP2 PUSH1 0x4 ADD PUSH2 0x10B3 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x118A JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x117C JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x11C8 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x106E JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1278 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x17F JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x17F JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x17F JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x17F JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x1324 JUMPI JUMPDEST PUSH2 0x12F9 JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x12F2 JUMP JUMPDEST PUSH2 0x1384 PUSH2 0x137D PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x11F5 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x15C7 JUMP JUMPDEST ISZERO PUSH2 0x138B JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x140E JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x13E3 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLER PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x144C JUMPI JUMP JUMPDEST PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x1278 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x1529 JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x16EA JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x16BB JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x16C6 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x16BB JUMPI PUSH0 SWAP3 PUSH2 0x16A5 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1160 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x3D6 JUMPI PUSH2 0x3C8 DUP2 DUP4 PUSH2 0x102D JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x16E2 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x552 JUMPI PUSH2 0x543 DUP2 DUP4 PUSH2 0x102D JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1650 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x11C8 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x17F3 JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x1278 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x1278 JUMPI DUP2 DUP2 SUB PUSH2 0x17A8 JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x177B JUMPI DUP3 ADD SWAP2 PUSH2 0x175D DUP4 DUP4 PUSH2 0x16F2 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x17DE PUSH2 0x17B8 PUSH2 0x17C8 SWAP4 DUP7 PUSH2 0x16F2 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x16F2 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x1745 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x184D JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0x106E JUMPI DUP3 PUSH2 0x1838 PUSH2 0x17C8 DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x16F2 JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBB 0xF7 PUSH16 0x2B279479A6AE81BEF191395E763B8D46 0xE5 PUSH18 0xE8AAE4D0995F91FE91154864736F6C634300 ADDMOD SHL STOP CALLER ","sourceMap":"328:853:82:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21:80;328:853:82;1810:21:80;;;328:853:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:82;;;;;;;;;1348:29:80;328:853:82;;;;;;;;;;;;;-1:-1:-1;;328:853:82;;;;;;;:::i;:::-;1500:62:48;;:::i;:::-;328:853:82;;;;;;;1738:24:49;328:853:82;;;1738:24:49;328:853:82;;;;1777:43:49;328:853:82;1777:43:49;;328:853:82;;;;;;;-1:-1:-1;;328:853:82;;;;;;;;;;8454:16:81;328:853:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1525:73:32;;;;;:::i;:::-;1515:9:81;;;:::i;:::-;328:853:82;;;;5266:5:81;328:853:82;;;;5137:12:81;;;;;;328:853:82;5151:3:81;5185:11;;;;;:::i;:::-;328:853:82;;;;;5266:28:81;;;;;;328:853:82;5266:28:81;328:853:82;5266:28:81;;;;;;;;;;;;;328:853:82;5266:28:81;;;5151:3;328:853:82;;5262:119:81;;328:853:82;5399:9:81;328:853:82;;;;;;;11511:50:71;328:853:82;;;;11511:50:71;:::i;:::-;328:853:82;5395:118:81;;5644:31;;328:853:82;5644:31:81;;;328:853:82;5644:31:81;;328:853:82;5122:13:81;;5395:118;5465:33;;;328:853:82;5465:33:81;328:853:82;;;;5465:33:81;5262:119;5330:36;;;;328:853:82;5330:36:81;328:853:82;;5330:36:81;5266:28;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;328:853:82;;;;;;;;;;;;;;;-1:-1:-1;;328:853:82;;;;;;;2557:30:81;328:853:82;;:::i;:::-;1525:73:32;;:::i;:::-;1962:7:81;;;:::i;:::-;2557:30;:::i;:::-;328:853:82;;;;;;;;;;;;-1:-1:-1;;328:853:82;;;;;;;;1311:13:49;328:853:82;;;;;;;;;;;;;;-1:-1:-1;;328:853:82;;;;;;6586:10:81;;328:853:82;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:82;;;;;;;8291:14:81;328:853:82;;;;;;;;;;;;;;-1:-1:-1;;328:853:82;;;;;;1810:21:80;328:853:82;;1810:21:80;;328:853:82;1810:21:80;;:5;;;328:853:82;1810:21:80;;;;;;;;;;328:853:82;1810:21:80;;;328:853:82;;;;;;;;1810:21:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;328:853:82;;;;;;;;;;;;;;-1:-1:-1;;328:853:82;;;;;;;:::i;:::-;1525:73:32;;:::i;:::-;328:853:82;;;;2423:10:80;:21;2419:77;;2524:8;;;:::i;:::-;328:853:82;2419:77:80;2467:18;;328:853:82;2467:18:80;328:853:82;2467:18:80;328:853:82;;;;;;;;;-1:-1:-1;;328:853:82;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;934:20;;;:::i;:::-;328:853;;;1010:13;328:853;;;1141:5;;328:853;1005:168;1025:10;;;;;;328:853;1037:3;1071:8;;;;;:::i;:::-;328:853;;;;;9373:9:81;328:853:82;;12473:55:71;328:853:82;;;;5197:14:71;5101:129;-1:-1:-1;328:853:82;5197:14:71;328:853:82;;;-1:-1:-1;328:853:82;;5197:26:71;;5101:129;;12473:55;328:853:82;9369:111:81;;1141:21:82;;;;;328:853;;1141:21;328:853;1141:21;;;;;328:853;;;;;;;1141:21;;;;;;;;;;;1037:3;;;328:853;;1010:13;;1141:21;328:853;;;;;-1:-1:-1;328:853:82;;;1141:21;;;328:853;;;;;;;;;1141:21;328:853;;;;;;;;;9369:111:81;9440:29;;;;328:853:82;9440:29:81;328:853:82;;;;;9440:29:81;328:853:82;;;;;;;;;-1:-1:-1;;328:853:82;;;;;;1515:9:81;;;:::i;:::-;328:853:82;;7570:9:81;328:853:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:82;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:82;;;;;;;;;;;;1515:9:81;;;;:::i;:::-;328:853:82;;;7852:9:81;328:853:82;;;7852:9:81;328:853:82;;;;;;7896:9:81;;;:28;;;;;328:853:82;7896:50:81;;;;328:853:82;7892:115:81;;;8039:9;;;;;:::i;:::-;328:853:82;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;8064:16:81;8082:6;;;;;;328:853:82;;;;;;;:::i;8090:3:81:-;328:853:82;;;;;;;;;5853:18:71;328:853:82;;;;5853:18:71;:::i;:::-;328:853:82;;;;;;;8109:44:81;8115:8;;;;:::i;:::-;8109:44;;:::i;:::-;328:853:82;;8064:16:81;;7892:115;7969:27;;;328:853:82;7969:27:81;328:853:82;;;7969:27:81;7896:50;7928:18;;;;;7896:50;;;:28;7909:15;;;;-1:-1:-1;7896:28:81;;328:853:82;;;;;;;-1:-1:-1;;328:853:82;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;328:853:82;;;;;;;1525:73:32;;;:::i;:::-;1515:9:81;;;:::i;:::-;328:853:82;;;3508:9:81;328:853:82;;;;;;;3627:237:81;3634:12;;;328:853:82;;;;;3508:9:81;328:853:82;;;;;;;;;;;;;;3627:237:81;328:853:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4157:36:81;328:853:82;4157:36:81;;328:853:82;;;;;;;;;;;;;;;;;;;;;;;;;3627:237:81;-1:-1:-1;;328:853:82;5853:18:71;11832:53;328:853:82;5853:18:71;;;;:::i;:::-;328:853:82;;;;;;;3783:35:81;;;328:853:82;3783:35:81;;11832:53:71;;:::i;:::-;;3627:237:81;;328:853:82;;;;;-1:-1:-1;;328:853:82;;;;;735:10:63;328:853:82;1311:13:49;328:853:82;;2339:24:49;2335:96;;2459:6;735:10:63;2459:6:49;:::i;2335:96::-;2386:34;328:853:82;2386:34:49;735:10:63;328:853:82;;;;2386:34:49;328:853:82;;;;;-1:-1:-1;;328:853:82;;;;;1500:62:48;;:::i;:::-;328:853:82;;;;2093:20:49;328:853:82;;2093:20:49;328:853:82;;;;;;;;;3052:40:48;;;;328:853:82;;;;;;;-1:-1:-1;;328:853:82;;;;;;;;1515:9:81;;;:::i;:::-;328:853:82;;6942:9:81;328:853:82;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:82;;;;;;;:::i;:::-;;;;;;;;;;;2839:30:81;328:853:82;;;;;;:::i;:::-;1525:73:32;;;:::i;2839:30:81:-;328:853:82;;;2880:84:81;;328:853:82;;;;;;;;;2880:84:81;1525:73:32;;;;;:::i;:::-;1515:9:81;;;:::i;:::-;328:853:82;;;;5266:5:81;328:853:82;;;;5137:12:81;;;;;;2880:84;;;;;;5151:3;5185:11;;;;;:::i;:::-;328:853:82;;;;;5266:28:81;;;;;;328:853:82;;5266:28:81;;;;;;;;;;;;;328:853:82;5266:28:81;;;5151:3;328:853:82;;5262:119:81;;328:853:82;5399:9:81;328:853:82;;;;;;11511:50:71;328:853:82;;;;11511:50:71;:::i;:::-;328:853:82;5395:118:81;;5644:31;328:853:82;5644:31:81;;;328:853:82;5644:31:81;;328:853:82;5122:13:81;;5395:118;5465:33;;;;328:853:82;5465:33:81;328:853:82;;;;5465:33:81;5262:119;5330:36;;;;328:853:82;5330:36:81;328:853:82;;5330:36:81;5266:28;;;;;;;;;;;;;;:::i;:::-;;;;;328:853:82;;;;;;;;;;;;;;;-1:-1:-1;;328:853:82;;;;;;;:::i;:::-;1962:7:81;;;;:::i;:::-;4366:20;;:::i;:::-;328:853:82;;;;;;4397:16:81;328:853:82;;;;;;;;;;;;;;;;;4520:10:81;328:853:82;;;;;;;;;;;;;;;4520:10:81;4599:62;;328:853:82;4599:62:81;;328:853:82;;;;;;;;;:::i;:::-;1525:73:32;;;:::i;:::-;1515:9:81;;;:::i;:::-;328:853:82;;5934:13:81;328:853:82;5949:12:81;;;;;;328:853:82;5963:3:81;328:853:82;5997:8:81;;;;:::i;:::-;328:853:82;;;;;6024:9:81;328:853:82;;11832:53:71;328:853:82;;;;11832:53:71;:::i;:::-;328:853:82;6020:117:81;;6156:35;;328:853:82;6156:35:81;;328:853:82;6156:35:81;;328:853:82;5934:13:81;;328:853:82;;;;;;-1:-1:-1;;328:853:82;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:82;;;;;;;;;;7113:16:81;328:853:82;;;;;;;;7113:41:81;;328:853:82;;;;;;;;;;;;-1:-1:-1;;328:853:82;;;;;;;12473:55:71;328:853:82;;:::i;:::-;;;1515:9:81;;;:::i;:::-;328:853:82;;7333:9:81;328:853:82;;;;;;;;12473:55:71;5197:14;5101:129;-1:-1:-1;328:853:82;5197:14:71;328:853:82;;;-1:-1:-1;328:853:82;;5197:26:71;;5101:129;;12473:55;328:853:82;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;328:853:82;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:32;328:853:82;;;2303:50:32;;;2320:22;;328:853:82;;;;;;;2303:50:32;;;328:853:82;;;;;;;;;;;;;;;2293:61:32;;1931:430;:::o;328:853:82:-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;9714:202:81:-;9790:14;;:59;;;;9714:202;9786:124;;9714:202;:::o;9786:124::-;9872:27;9803:1;9872:27;;328:853:82;;9803:1:81;9872:27;9790:59;328:853:82;;9803:1:81;328:853:82;9808:16:81;328:853:82;;;;9803:1:81;328:853:82;;;9808:41:81;9790:59;;1688:201:32;1798:33;1762:20;1774:7;;;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;;1774:7;1854:18;9014:266:81;328:853:82;;9088:21:81;;9084:82;;328:853:82;9107:1:81;328:853:82;9180:14:81;328:853:82;;;9107:1:81;328:853:82;;9176:98:81;;9014:266;:::o;9176:98::-;9231:32;9107:1;9231:32;9180:14;328:853:82;;9107:1:81;9231:32;9084:82;9132:23;9107:1;9132:23;;9107:1;9132:23;8795:213;6586:10;-1:-1:-1;328:853:82;6571:14:81;328:853:82;;;-1:-1:-1;328:853:82;;8927:14:81;;;8923:79;;8795:213::o;8923:79::-;8964:27;-1:-1:-1;8964:27:81;6571:14;-1:-1:-1;8964:27:81;2976:342;;3083:16;328:853:82;;-1:-1:-1;;328:853:82;;;;;;;3083:16:81;328:853:82;3071:28:81;328:853:82;-1:-1:-1;328:853:82;3158:16:81;328:853:82;;;;-1:-1:-1;328:853:82;;;;;;;;;;;;;-1:-1:-1;328:853:82;3212:14:81;328:853:82;;;;-1:-1:-1;328:853:82;;3270:41:81;-1:-1:-1;3270:41:81;;2976:342::o;1796:162:48:-;328:853:82;1710:6:48;328:853:82;;735:10:63;1855:23:48;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:63;1901:40:48;328:853:82;;1710:6:48;1901:40;2011:153:49;328:853:82;;;2093:20:49;328:853:82;;2093:20:49;328:853:82;2093:20:49;328:853:82;;;;;;;;;;2093:20:49;328:853:82;;3052:40:48;2093:20:49;3052:40:48;;2011:153:49:o;2546:382:80:-;;328:853:82;;;;;;;;;2721:15:80;;;2717:57;;328:853:82;;2858:21:80;328:853:82;2858:21:80;;;:5;;;:21;:5;;;328:853:82;2858:21:80;;;;;;;;;328:853:82;2858:21:80;;;2546:382;328:853:82;;;;;;2858:63:80;;;;;328:853:82;2858:63:80;;:21;:63;;328:853:82;;;;;2915:4:80;328:853:82;;;;;2858:63:80;;;;;;;328:853:82;2858:63:80;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;-1:-1:-1;2858:63:80;;;;;;:::i;:::-;328:853:82;;;;;;;;;2858:21:80;328:853:82;2858:21:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o;328:853:82:-;;;;;;;;-1:-1:-1;328:853:82;;-1:-1:-1;328:853:82;;;-1:-1:-1;328:853:82;:::o;3071:1368:71:-;;3266:14;;;328:853:82;;;;;;;;;;;3302:13:71;;;;3298:1135;3302:13;;;-1:-1:-1;;328:853:82;;;;;;;;;;;;;;;;;;;;3777:23:71;;;3773:378;;3298:1135;328:853:82;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3266:14:71;4368:11;:::o;328:853:82:-;;;;;;;;;;3773:378:71;328:853:82;3840:22:71;3961:23;3840:22;;;:::i;:::-;328:853:82;;;;;;3961:23:71;;;;;:::i;:::-;328:853:82;;;;;-1:-1:-1;;328:853:82;;;;;;;;;;;;;;;;;;;;;;;;;3773:378:71;;;;;3298:1135;4410:12;;;;328:853:82;4410:12:71;:::o;2497:406::-;-1:-1:-1;328:853:82;;;5197:14:71;;;328:853:82;;;;;;2581:21:71;;328:853:82;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2776:14:71;328:853:82;;;;;;;2832:11:71;:::o;2576:321::-;2874:12;;328:853:82;2874:12:71;:::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","addPoolsToSet(uint256,address[])":"ebf3a8d0","createPoolSet(address)":"e909c19b","createPoolSet(address,address[])":"3e035f9b","destroyPoolSet(uint256)":"7c1ec460","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAllPoolsInSet(uint256)":"94fc4058","getAuthorizer()":"aaabadc5","getManagerForPoolSet(uint256)":"f167a1e6","getNextPoolSetId()":"c482e822","getPoolCountForSet(uint256)":"62d53462","getPoolSetIdForCaller()":"ce998aba","getPoolSetIdForManager(address)":"25c427ed","getPoolsInSet(uint256,uint256,uint256)":"8c60ebd0","isPoolInSet(address,uint256)":"182551da","isValidPoolSetId(uint256)":"255dae41","owner()":"8da5cb5b","pausePools(address[])":"a20dc529","pendingOwner()":"e30c3978","removePoolsFromSet(uint256,address[])":"2da55a1d","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","transferPoolSetOwnership(address)":"3700f987","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"InvalidPoolSetId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolSetManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolSetManager\",\"type\":\"address\"}],\"name\":\"PoolSetManagerNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderIsNotPoolSetManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"PoolSetCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"PoolSetDestroyed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"PoolSetOwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPoolsToSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"destroyPoolSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getAllPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getManagerForPoolSet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextPoolSetId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getPoolCountForSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSetIdForCaller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getPoolSetIdForManager\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isPoolInSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isValidPoolSetId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"pausePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePoolsFromSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferPoolSetOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"params\":{\"poolSetId\":\"Id of the set involved in the operation\"}}],\"InvalidPoolSetId(uint256)\":[{\"details\":\"This can mean the value is invalid, or it was never created, or it was destroyed.\",\"params\":{\"poolSetId\":\"The id of the invalid set\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolSetManagerNotUnique(address)\":[{\"details\":\"Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\",\"params\":{\"poolSetManager\":\"Address of the manager that is already assigned to another pool set id\"}}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolRemovedFromSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetCreated(uint256,address)\":{\"details\":\"Pools are organized into separate sets, controlled by a manager, which can be changed independently.\",\"params\":{\"initialManager\":\"Address of the pool set manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetDestroyed(uint256,address)\":{\"params\":{\"manager\":\"The address of the set's last manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"details\":\"Managers can only control one pool set. Transfers to existing managers of other sets will revert.\",\"params\":{\"newManager\":\"Address of the new manager\",\"oldManager\":\"Address of the previous manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"addPoolsToSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may add pools to a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"newPools\":\"List of pools to add\",\"poolSetId\":\"Id of the set to which the new pools belong\"}},\"createPoolSet(address)\":{\"details\":\"Convenience function to create a pool set with no initial pools. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\"}},\"createPoolSet(address,address[])\":{\"details\":\"The `newPools` list can be empty, in which case this will only create the set. Pools can then be added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\",\"newPools\":\"Set of pools to add to the set\"}},\"destroyPoolSet(uint256)\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may destroy sets, effectively removing control of any pools in the set from the associated manager. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set being destroyed\"}},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAllPoolsInSet(uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"pools\":\"List of pools\"}},\"getManagerForPoolSet(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\"}},\"getNextPoolSetId()\":{\"returns\":{\"_0\":\"The pool set id that will be used on the next call of `createPoolSet`\"}},\"getPoolCountForSet(uint256)\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction. Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The current number of pools in the set\"}},\"getPoolSetIdForCaller()\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the caller is not a pool set manager\"}},\"getPoolSetIdForManager(address)\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the address given is not a pool set manager\"}},\"getPoolsInSet(uint256,uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`). Reverts if the poolSetId is not valid.\",\"params\":{\"from\":\"Start index\",\"poolSetId\":\"Id of the set containing the pools\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"isPoolInSet(address,uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"pool\":\"Address of the pool to check\",\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the pool is in the given set, false otherwise\"}},\"isValidPoolSetId(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the poolSetId exists\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pausePools(address[])\":{\"details\":\"This is a permissioned function. Governance must first grant this contract permission to call `pausePool` on the Vault, then grant another account permission to call `pausePools` here. Note that this is not necessarily the same account that can add or remove pools from the pausable list. Note that there is no `unpause`. This is a helper contract designed to react quickly to emergencies. Unpausing is a more deliberate action that should be performed by accounts approved by governance for this purpose, or by the individual pools' pause managers.\",\"params\":{\"pools\":\"List of pools to pause\"}},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"removePoolsFromSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may remove pools from a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set to which the pools belong\",\"pools\":\"List of pools to remove from the set\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"transferPoolSetOwnership(address)\":{\"details\":\"This is a permissioned function. Only the current manager of a set can call this to set a new manager. Since managers can only control a single set, there is no need to specify the id in the call. Note that this is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts if the new manager address is zero or already the manager of a pool set.\",\"params\":{\"newManager\":\"The address of the new manager\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"InvalidPoolSetId(uint256)\":[{\"notice\":\"Pool set id associated with an operation is invalid.\"}],\"InvalidPoolSetManager()\":[{\"notice\":\"The initial manager of a pool set cannot be zero.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolNotInSet(address,uint256)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolSetManagerNotUnique(address)\":[{\"notice\":\"Pool set managers can only manage a single pool set.\"}],\"SenderIsNotPoolSetManager()\":[{\"notice\":\"Permissioned operations on pools can only be performed by the pool set manager.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"notice\":\"The owner added a pool to the given set.\"},\"PoolRemovedFromSet(address,uint256)\":{\"notice\":\"The owner removed a pool from the given set.\"},\"PoolSetCreated(uint256,address)\":{\"notice\":\"The owner created a new pool set.\"},\"PoolSetDestroyed(uint256,address)\":{\"notice\":\"The owner destroyed a pool set.\"},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"notice\":\"The current manager of a pool set transferred ownership to a new address.\"}},\"kind\":\"user\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"createPoolSet(address)\":{\"notice\":\"Create a new empty set with an initial manager.\"},\"createPoolSet(address,address[])\":{\"notice\":\"Create a new set with an initial manager, optionally initialized with a set of pools.\"},\"destroyPoolSet(uint256)\":{\"notice\":\"Simple way to remove an entire set of pools from control of the helper function.\"},\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAllPoolsInSet(uint256)\":{\"notice\":\"Get the full set of pools from a given set.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"},\"getManagerForPoolSet(uint256)\":{\"notice\":\"Get the manager address associated with a given poolSetId.\"},\"getNextPoolSetId()\":{\"notice\":\"Utility function to predict the next pool set id.\"},\"getPoolCountForSet(uint256)\":{\"notice\":\"Get the number of pools associated with the given set.\"},\"getPoolSetIdForCaller()\":{\"notice\":\"Get the pool set id associated with the caller.\"},\"getPoolSetIdForManager(address)\":{\"notice\":\"Get the pool set id associated with a given manager address.\"},\"getPoolsInSet(uint256,uint256,uint256)\":{\"notice\":\"Get a range of pools from a given set.\"},\"isPoolInSet(address,uint256)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"isValidPoolSetId(uint256)\":{\"notice\":\"Check whether a poolSetId has been created.\"},\"pausePools(address[])\":{\"notice\":\"Pause a set of pools.\"},\"removePoolsFromSet(uint256,address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"transferPoolSetOwnership(address)\":{\"notice\":\"Transfer ownership of a pool set from the current manager to a new manager.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/PoolPauseHelper.sol\":\"PoolPauseHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xdb8365416c9dd9d7be16677c13819065511e9bc7705d6bad85fd52b65d3b3c39\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b90206982d126075b074f0a77ea9cb3ec173ed9fe9e4504b12d6807532b1b7ff\",\"dweb:/ipfs/QmYjKTu4Mrew94sSxfQ8jP4yT7wZFgghSRyB9A2kDdSy8X\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolPauseHelper.sol\":{\"keccak256\":\"0x5d5225c4c283e407458f36d0a10770445b0bd570333fce8d1365af978e8d7829\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://27d0e427a303790222bb696a940882129bafcd3ff57215179d4434d6506b8372\",\"dweb:/ipfs/QmNvL9juq6FzUXHHEufHreckXsPupv2rJw2CC3EBZQiEY5\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/PoolHelperCommon.sol\":{\"keccak256\":\"0x30381172c4e42784079cea20f474af84d39df274cb63f1a2e0426d823ff788e4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6311287a0f4d8b3b8af5c67599f8f8976137b22398fadd243df798baf525b0d6\",\"dweb:/ipfs/QmZuVsXAb7zveWUrEGDVUFrGdFe9AwC1xiGtMJx5vFE6Jc\"]},\"contracts/PoolPauseHelper.sol\":{\"keccak256\":\"0x8b11ff2aebad966caa7c1e207d48d8debc3ffd23d3ce88fb193c8c93dbb43692\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4ef5deef1194e8e4847d6f82f74ed482264cb123391f964adc48076aad90d2d0\",\"dweb:/ipfs/QmfL9Yc2Tfchb3vJS7oehD2otYZ5tSKpCb1Z7KiuUQkHuu\"]}},\"version\":1}"}},"contracts/PoolSwapFeeHelper.sol":{"PoolSwapFeeHelper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"InvalidPoolSetId","type":"error"},{"inputs":[],"name":"InvalidPoolSetManager","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolHasSwapManager","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"poolSetManager","type":"address"}],"name":"PoolSetManagerNotUnique","type":"error"},{"inputs":[],"name":"SenderIsNotPoolSetManager","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolRemovedFromSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"initialManager","type":"address"}],"name":"PoolSetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"PoolSetDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"PoolSetOwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPoolsToSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"destroyPoolSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getAllPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getManagerForPoolSet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextPoolSetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getPoolCountForSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolSetIdForCaller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"getPoolSetIdForManager","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isPoolInSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isValidPoolSetId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePoolsFromSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferPoolSetOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461011e57601f611bb738819003918201601f19168301916001600160401b0383118484101761012257808492604094855283398101031261011e5780516001600160a01b03918282169081830361011e576020015183811680910361011e57801561010b5760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100fc5760a0526001600255611a809081610137823960805181611407015260a05181818161015e01528181610298015281816105bf0152818161074801528181610d5c01526118150152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60406080815260049081361015610014575f80fd5b5f915f3560e01c908163182551da1461116d578163255dae411461112e57816325c427ed146110ec5781632da55a1d146110255781633700f98714610f725781633e035f9b14610cd457816362d5346214610ca4578163715018a614610c1f57816379ba509714610bbc5781637c1ec46014610a70578163851c1bb314610a275781638c60ebd0146108e15781638da5cb5b146108ae57816394fc40581461082e578163a89b1128146107bd578163aaabadc5146106f4578163c482e822146106d6578163ce998aba146106b2578163d15126ba14610556578163e30c397814610521578163e909c19b146104e3578163ebf3a8d01461025a578163f167a1e61461021857508063f2fde38b146101865763fbfa77cf14610133575f80fd5b346101825781600319360112610182576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b8234610215576020600319360112610215576101a06111d5565b6101a86116df565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b905034610256576020600319360112610256578160209373ffffffffffffffffffffffffffffffffffffffff92358152600385522054169051908152f35b8280fd5b919050346102565761026b36611317565b9091610275611524565b61027e836114bf565b81519373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811693875b8781106102c7578880f35b826102d2828461139b565b511685517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818d5afa9081156104d9578d916104ac575b50156104825761033183898e8d815260058552206119f2565b15610454578b88517fe9ddeb260000000000000000000000000000000000000000000000000000000081528489820152808b818660609384935afa92831561044957908994939291926103e1575b50500151166103b8575090876001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b698c80a3016102bc565b8a82877ff043494a00000000000000000000000000000000000000000000000000000000835252fd5b8194508092503d8311610442575b6103f98183611241565b8101031261043e5786916104338a805192610413846111f8565b61041c8161179d565b845261042985820161179d565b858501520161179d565b8a8201525f8061037f565b8c80fd5b503d6103ef565b8b51903d90823e3d90fd5b60448c8b84868b7f5a17aa8d0000000000000000000000000000000000000000000000000000000085525252fd5b508a82877f9e51bd5c00000000000000000000000000000000000000000000000000000000835252fd5b6104cc9150823d84116104d2575b6104c48183611241565b8101906114a7565b5f610318565b503d6104ba565b89513d8f823e3d90fd5b5050346101825760206003193601126101825760209061051a6105046111d5565b61050c611524565b61051581611589565b61164a565b9051908152f35b50503461018257816003193601126101825760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b919050346106805780600319360112610680576105716111d5565b9161057a61160c565b92835f526005602052825f20936105b773ffffffffffffffffffffffffffffffffffffffff80931680966001915f520160205260405f2054151590565b1561068457507f00000000000000000000000000000000000000000000000000000000000000001692833b15610680575f9360448592855196879384927fd15126ba0000000000000000000000000000000000000000000000000000000084528784015260243560248401525af1801561067657610633578380f35b9091925067ffffffffffffffff831161064a575052005b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b82513d5f823e3d90fd5b5f80fd5b84837f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b8234610680575f60031936011261068057602091335f528252805f20549051908152f35b8234610680575f600319360112610680576020906002549051908152f35b905034610680575f6003193601126106805773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa9182156107b357926020935f93610784575b505191168152f35b6107a5919350843d86116107ac575b61079d8183611241565b81019061147b565b918461077c565b503d610793565b83513d5f823e3d90fd5b34610680576020600319360112610680576107d66111d5565b6107de611524565b73ffffffffffffffffffffffffffffffffffffffff5f54163314610807576108059061172b565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b905034610680576020906020600319360112610680573561084e816114bf565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b828210610897576108938686610889828b0383611241565b519182918261134a565b0390f35b835487529586019560019384019390910190610871565b8234610680575f6003193601126106805760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b9050346106805760606003193601126106805780359060243560443591610907846114bf565b835f526005906020906005602052865f2054858511908115610a1d575b8115610a12575b506109e7575061093b8385611441565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061097e61096988611282565b976109768a51998a611241565b808952611282565b01366020880137835b85811061099b57875180610893898261134a565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff6109c5828b5f206118e9565b90549060031b1c166109e06109da8884611441565b8a61139b565b5201610987565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b90508410158861092b565b8087119150610924565b9050346106805760206003193601126106805735907fffffffff00000000000000000000000000000000000000000000000000000000821682036106805761051a6020926113dc565b905034610680576020918260031936011261068057813591610a90611524565b610a99836114bf565b825f5260058452815f208054805b610b5c575050825f5260058452815f208054905f815581610b3f575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610ac3575f8155600101610b49565b5f190180610bb673ffffffffffffffffffffffffffffffffffffffff610b8283866118e9565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a3846118fe565b50610aa7565b34610680575f600319360112610680573373ffffffffffffffffffffffffffffffffffffffff6001541603610bf4576108053361172b565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b34610680575f60031936011261068057610c376116df565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b82346106805760206003193601126106805760209135610cc3816114bf565b5f5260058252805f20549051908152f35b905034610680578160031936011261068057610cee6111d5565b91602492833567ffffffffffffffff811161068057610d13610d1c913690860161129a565b9161050c611524565b928151610d2e575b6020848451908152f35b610d36611524565b610d3f846114bf565b8151915f73ffffffffffffffffffffffffffffffffffffffff91827f000000000000000000000000000000000000000000000000000000000000000016915b858110610d8e5750505050610d24565b83610d99828461139b565b511687517fc673bdaf000000000000000000000000000000000000000000000000000000008152818782015260209081818d81895afa908115610f68575f91610f4b575b5015610f2157895f5260058152610df6828a5f206119f2565b15610ef35788517fe9ddeb260000000000000000000000000000000000000000000000000000000081528288820152808c6060928391818a5afa918215610ee95790889392915f92610ea5575b5050015116610e7b5790886001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610d7e565b8990867ff043494a000000000000000000000000000000000000000000000000000000005f52525ffd5b8194508092503d8311610ee2575b610ebd8183611241565b81010312610680578691610ed78b805192610413846111f8565b8b8201528d80610e43565b503d610eb3565b8b513d5f823e3d90fd5b898b83897f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8a82887f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610f629150823d84116104d2576104c48183611241565b8c610ddd565b8a513d5f823e3d90fd5b823461068057602060031936011261068057610f8c6111d5565b91610f9683611589565b610f9e61160c565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b82346106805761103436611317565b9161103d611524565b611046826114bf565b8251925f5b84811061105457005b73ffffffffffffffffffffffffffffffffffffffff611073828461139b565b5116845f52600560205261108981855f206118fe565b156110bd5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a30161104b565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b82346106805760206003193601126106805760209173ffffffffffffffffffffffffffffffffffffffff61111e6111d5565b165f528252805f20549051908152f35b823461068057602060031936011261068057602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b82346106805780600319360112610680576020906111cc61118c6111d5565b602435611198816114bf565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361068057565b6060810190811067ffffffffffffffff82111761121457604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761121457604052565b67ffffffffffffffff81116112145760051b60200190565b9080601f830112156106805760209082356112b481611282565b936112c26040519586611241565b81855260208086019260051b82010192831161068057602001905b8282106112eb575050505090565b813573ffffffffffffffffffffffffffffffffffffffff811681036106805781529083019083016112dd565b90604060031983011261068057600435916024359067ffffffffffffffff8211610680576113479160040161129a565b90565b60209060206040818301928281528551809452019301915f5b828110611371575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611363565b80518210156113af5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f000000000000000000000000000000000000000000000000000000000000000084521660408201526024815261143b816111f8565b51902090565b9190820391821161144e57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90816020910312610680575173ffffffffffffffffffffffffffffffffffffffff811681036106805790565b90816020910312610680575180151581036106805790565b801580156114fa575b6114cf5750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f205416156114c8565b61155a6115537fffffffff000000000000000000000000000000000000000000000000000000005f35166113dc565b33906117be565b1561156157565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff1680156115e457805f52600460205260405f20546115b95750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561162257565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f19831461144e576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b73ffffffffffffffffffffffffffffffffffffffff5f541633036116ff57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b519073ffffffffffffffffffffffffffffffffffffffff8216820361068057565b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146118e157604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156118b25785935f956118bd575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa9182156118b2575f9261189c57505090565b6113479250803d106104d2576104c48183611241565b6040513d5f823e3d90fd5b6064929195506118d990853d87116107ac5761079d8183611241565b949091611847565b505050600190565b80548210156113af575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f146119ea575f199182810181811161144e5782549084820191821161144e5781810361199f575b505050805480156119725782019161195483836118e9565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b6119d56119af6119bf93866118e9565b90549060031b1c928392866118e9565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f808061193c565b505050505f90565b5f828152600182016020526040902054611a4457805490680100000000000000008210156112145782611a2f6119bf8460018096018555846118e9565b90558054925f520160205260405f2055600190565b50505f9056fea26469706673582212204dc256d71e3b57e11f0c3ea28a6bafb7d1086f6417929dae62538f4e732d1fbc64736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x11E JUMPI PUSH1 0x1F PUSH2 0x1BB7 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x122 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x11E JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x11E JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x11E JUMPI DUP1 ISZERO PUSH2 0x10B JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xFC JUMPI PUSH1 0xA0 MSTORE PUSH1 0x1 PUSH1 0x2 SSTORE PUSH2 0x1A80 SWAP1 DUP2 PUSH2 0x137 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x1407 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x15E ADD MSTORE DUP2 DUP2 PUSH2 0x298 ADD MSTORE DUP2 DUP2 PUSH2 0x5BF ADD MSTORE DUP2 DUP2 PUSH2 0x748 ADD MSTORE DUP2 DUP2 PUSH2 0xD5C ADD MSTORE PUSH2 0x1815 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x182551DA EQ PUSH2 0x116D JUMPI DUP2 PUSH4 0x255DAE41 EQ PUSH2 0x112E JUMPI DUP2 PUSH4 0x25C427ED EQ PUSH2 0x10EC JUMPI DUP2 PUSH4 0x2DA55A1D EQ PUSH2 0x1025 JUMPI DUP2 PUSH4 0x3700F987 EQ PUSH2 0xF72 JUMPI DUP2 PUSH4 0x3E035F9B EQ PUSH2 0xCD4 JUMPI DUP2 PUSH4 0x62D53462 EQ PUSH2 0xCA4 JUMPI DUP2 PUSH4 0x715018A6 EQ PUSH2 0xC1F JUMPI DUP2 PUSH4 0x79BA5097 EQ PUSH2 0xBBC JUMPI DUP2 PUSH4 0x7C1EC460 EQ PUSH2 0xA70 JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0xA27 JUMPI DUP2 PUSH4 0x8C60EBD0 EQ PUSH2 0x8E1 JUMPI DUP2 PUSH4 0x8DA5CB5B EQ PUSH2 0x8AE JUMPI DUP2 PUSH4 0x94FC4058 EQ PUSH2 0x82E JUMPI DUP2 PUSH4 0xA89B1128 EQ PUSH2 0x7BD JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x6F4 JUMPI DUP2 PUSH4 0xC482E822 EQ PUSH2 0x6D6 JUMPI DUP2 PUSH4 0xCE998ABA EQ PUSH2 0x6B2 JUMPI DUP2 PUSH4 0xD15126BA EQ PUSH2 0x556 JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x521 JUMPI DUP2 PUSH4 0xE909C19B EQ PUSH2 0x4E3 JUMPI DUP2 PUSH4 0xEBF3A8D0 EQ PUSH2 0x25A JUMPI DUP2 PUSH4 0xF167A1E6 EQ PUSH2 0x218 JUMPI POP DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x186 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x133 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x182 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x215 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x215 JUMPI PUSH2 0x1A0 PUSH2 0x11D5 JUMP JUMPDEST PUSH2 0x1A8 PUSH2 0x16DF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE DUP3 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x256 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x256 JUMPI DUP2 PUSH1 0x20 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x3 DUP6 MSTORE KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x256 JUMPI PUSH2 0x26B CALLDATASIZE PUSH2 0x1317 JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x275 PUSH2 0x1524 JUMP JUMPDEST PUSH2 0x27E DUP4 PUSH2 0x14BF JUMP JUMPDEST DUP2 MLOAD SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 DUP8 JUMPDEST DUP8 DUP2 LT PUSH2 0x2C7 JUMPI DUP9 DUP1 RETURN JUMPDEST DUP3 PUSH2 0x2D2 DUP3 DUP5 PUSH2 0x139B JUMP JUMPDEST MLOAD AND DUP6 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP14 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x4D9 JUMPI DUP14 SWAP2 PUSH2 0x4AC JUMPI JUMPDEST POP ISZERO PUSH2 0x482 JUMPI PUSH2 0x331 DUP4 DUP10 DUP15 DUP14 DUP2 MSTORE PUSH1 0x5 DUP6 MSTORE KECCAK256 PUSH2 0x19F2 JUMP JUMPDEST ISZERO PUSH2 0x454 JUMPI DUP12 DUP9 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP5 DUP10 DUP3 ADD MSTORE DUP1 DUP12 DUP2 DUP7 PUSH1 0x60 SWAP4 DUP5 SWAP4 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x449 JUMPI SWAP1 DUP10 SWAP5 SWAP4 SWAP3 SWAP2 SWAP3 PUSH2 0x3E1 JUMPI JUMPDEST POP POP ADD MLOAD AND PUSH2 0x3B8 JUMPI POP SWAP1 DUP8 PUSH1 0x1 SWAP3 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 DUP13 DUP1 LOG3 ADD PUSH2 0x2BC JUMP JUMPDEST DUP11 DUP3 DUP8 PUSH32 0xF043494A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST DUP2 SWAP5 POP DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x442 JUMPI JUMPDEST PUSH2 0x3F9 DUP2 DUP4 PUSH2 0x1241 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x43E JUMPI DUP7 SWAP2 PUSH2 0x433 DUP11 DUP1 MLOAD SWAP3 PUSH2 0x413 DUP5 PUSH2 0x11F8 JUMP JUMPDEST PUSH2 0x41C DUP2 PUSH2 0x179D JUMP JUMPDEST DUP5 MSTORE PUSH2 0x429 DUP6 DUP3 ADD PUSH2 0x179D JUMP JUMPDEST DUP6 DUP6 ADD MSTORE ADD PUSH2 0x179D JUMP JUMPDEST DUP11 DUP3 ADD MSTORE PUSH0 DUP1 PUSH2 0x37F JUMP JUMPDEST DUP13 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x3EF JUMP JUMPDEST DUP12 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x44 DUP13 DUP12 DUP5 DUP7 DUP12 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE MSTORE MSTORE REVERT JUMPDEST POP DUP11 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH2 0x4CC SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D2 JUMPI JUMPDEST PUSH2 0x4C4 DUP2 DUP4 PUSH2 0x1241 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x14A7 JUMP JUMPDEST PUSH0 PUSH2 0x318 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4BA JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x51A PUSH2 0x504 PUSH2 0x11D5 JUMP JUMPDEST PUSH2 0x50C PUSH2 0x1524 JUMP JUMPDEST PUSH2 0x515 DUP2 PUSH2 0x1589 JUMP JUMPDEST PUSH2 0x164A JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x182 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x680 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH2 0x571 PUSH2 0x11D5 JUMP JUMPDEST SWAP2 PUSH2 0x57A PUSH2 0x160C JUMP JUMPDEST SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP4 PUSH2 0x5B7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP1 SWAP7 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x684 JUMPI POP PUSH32 0x0 AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x680 JUMPI PUSH0 SWAP4 PUSH1 0x44 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 SWAP4 DUP5 SWAP3 PUSH32 0xD15126BA00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP8 DUP5 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x24 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x676 JUMPI PUSH2 0x633 JUMPI DUP4 DUP1 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x64A JUMPI POP MSTORE STOP JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP5 DUP4 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x680 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH1 0x20 SWAP2 CALLER PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x680 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x680 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7B3 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x784 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x7A5 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x7AC JUMPI JUMPDEST PUSH2 0x79D DUP2 DUP4 PUSH2 0x1241 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x147B JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x77C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x793 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x680 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH2 0x7D6 PUSH2 0x11D5 JUMP JUMPDEST PUSH2 0x7DE PUSH2 0x1524 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x807 JUMPI PUSH2 0x805 SWAP1 PUSH2 0x172B JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x680 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI CALLDATALOAD PUSH2 0x84E DUP2 PUSH2 0x14BF JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x897 JUMPI PUSH2 0x893 DUP7 DUP7 PUSH2 0x889 DUP3 DUP12 SUB DUP4 PUSH2 0x1241 JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x134A JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x871 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x680 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x680 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x907 DUP5 PUSH2 0x14BF JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0xA1D JUMPI JUMPDEST DUP2 ISZERO PUSH2 0xA12 JUMPI JUMPDEST POP PUSH2 0x9E7 JUMPI POP PUSH2 0x93B DUP4 DUP6 PUSH2 0x1441 JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x97E PUSH2 0x969 DUP9 PUSH2 0x1282 JUMP JUMPDEST SWAP8 PUSH2 0x976 DUP11 MLOAD SWAP10 DUP11 PUSH2 0x1241 JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x1282 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x99B JUMPI DUP8 MLOAD DUP1 PUSH2 0x893 DUP10 DUP3 PUSH2 0x134A JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x9C5 DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x18E9 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x9E0 PUSH2 0x9DA DUP9 DUP5 PUSH2 0x1441 JUMP JUMPDEST DUP11 PUSH2 0x139B JUMP JUMPDEST MSTORE ADD PUSH2 0x987 JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x92B JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x924 JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x680 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x680 JUMPI PUSH2 0x51A PUSH1 0x20 SWAP3 PUSH2 0x13DC JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x680 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0xA90 PUSH2 0x1524 JUMP JUMPDEST PUSH2 0xA99 DUP4 PUSH2 0x14BF JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0xB5C JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0xB3F JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAC3 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xB49 JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0xBB6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xB82 DUP4 DUP7 PUSH2 0x18E9 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x18FE JUMP JUMPDEST POP PUSH2 0xAA7 JUMP JUMPDEST CALLVALUE PUSH2 0x680 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0xBF4 JUMPI PUSH2 0x805 CALLER PUSH2 0x172B JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x680 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH2 0xC37 PUSH2 0x16DF JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x680 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xCC3 DUP2 PUSH2 0x14BF JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x680 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH2 0xCEE PUSH2 0x11D5 JUMP JUMPDEST SWAP2 PUSH1 0x24 SWAP3 DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH2 0xD13 PUSH2 0xD1C SWAP2 CALLDATASIZE SWAP1 DUP7 ADD PUSH2 0x129A JUMP JUMPDEST SWAP2 PUSH2 0x50C PUSH2 0x1524 JUMP JUMPDEST SWAP3 DUP2 MLOAD PUSH2 0xD2E JUMPI JUMPDEST PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xD36 PUSH2 0x1524 JUMP JUMPDEST PUSH2 0xD3F DUP5 PUSH2 0x14BF JUMP JUMPDEST DUP2 MLOAD SWAP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 PUSH32 0x0 AND SWAP2 JUMPDEST DUP6 DUP2 LT PUSH2 0xD8E JUMPI POP POP POP POP PUSH2 0xD24 JUMP JUMPDEST DUP4 PUSH2 0xD99 DUP3 DUP5 PUSH2 0x139B JUMP JUMPDEST MLOAD AND DUP8 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP8 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP14 DUP2 DUP10 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xF68 JUMPI PUSH0 SWAP2 PUSH2 0xF4B JUMPI JUMPDEST POP ISZERO PUSH2 0xF21 JUMPI DUP10 PUSH0 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH2 0xDF6 DUP3 DUP11 PUSH0 KECCAK256 PUSH2 0x19F2 JUMP JUMPDEST ISZERO PUSH2 0xEF3 JUMPI DUP9 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP9 DUP3 ADD MSTORE DUP1 DUP13 PUSH1 0x60 SWAP3 DUP4 SWAP2 DUP2 DUP11 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xEE9 JUMPI SWAP1 DUP9 SWAP4 SWAP3 SWAP2 PUSH0 SWAP3 PUSH2 0xEA5 JUMPI JUMPDEST POP POP ADD MLOAD AND PUSH2 0xE7B JUMPI SWAP1 DUP9 PUSH1 0x1 SWAP3 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xD7E JUMP JUMPDEST DUP10 SWAP1 DUP7 PUSH32 0xF043494A00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP2 SWAP5 POP DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xEE2 JUMPI JUMPDEST PUSH2 0xEBD DUP2 DUP4 PUSH2 0x1241 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x680 JUMPI DUP7 SWAP2 PUSH2 0xED7 DUP12 DUP1 MLOAD SWAP3 PUSH2 0x413 DUP5 PUSH2 0x11F8 JUMP JUMPDEST DUP12 DUP3 ADD MSTORE DUP14 DUP1 PUSH2 0xE43 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xEB3 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP10 DUP12 DUP4 DUP10 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP11 DUP3 DUP9 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xF62 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D2 JUMPI PUSH2 0x4C4 DUP2 DUP4 PUSH2 0x1241 JUMP JUMPDEST DUP13 PUSH2 0xDDD JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x680 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH2 0xF8C PUSH2 0x11D5 JUMP JUMPDEST SWAP2 PUSH2 0xF96 DUP4 PUSH2 0x1589 JUMP JUMPDEST PUSH2 0xF9E PUSH2 0x160C JUMP JUMPDEST SWAP2 DUP3 SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x680 JUMPI PUSH2 0x1034 CALLDATASIZE PUSH2 0x1317 JUMP JUMPDEST SWAP2 PUSH2 0x103D PUSH2 0x1524 JUMP JUMPDEST PUSH2 0x1046 DUP3 PUSH2 0x14BF JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x1054 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1073 DUP3 DUP5 PUSH2 0x139B JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0x1089 DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x18FE JUMP JUMPDEST ISZERO PUSH2 0x10BD JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0x104B JUMP JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x680 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x111E PUSH2 0x11D5 JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x680 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x680 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x11CC PUSH2 0x118C PUSH2 0x11D5 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x1198 DUP2 PUSH2 0x14BF JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x680 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1214 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1214 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1214 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x680 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x12B4 DUP2 PUSH2 0x1282 JUMP JUMPDEST SWAP4 PUSH2 0x12C2 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1241 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x680 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x12EB JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x680 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x12DD JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x680 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x680 JUMPI PUSH2 0x1347 SWAP2 PUSH1 0x4 ADD PUSH2 0x129A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1371 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1363 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x13AF JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x143B DUP2 PUSH2 0x11F8 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x144E JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x680 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x680 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x680 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x680 JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x14FA JUMPI JUMPDEST PUSH2 0x14CF JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x14C8 JUMP JUMPDEST PUSH2 0x155A PUSH2 0x1553 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x13DC JUMP JUMPDEST CALLER SWAP1 PUSH2 0x17BE JUMP JUMPDEST ISZERO PUSH2 0x1561 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x15E4 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x15B9 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLER PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x1622 JUMPI JUMP JUMPDEST PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x144E JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x16FF JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x680 JUMPI JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x18E1 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x18B2 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x18BD JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x18B2 JUMPI PUSH0 SWAP3 PUSH2 0x189C JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1347 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x4D2 JUMPI PUSH2 0x4C4 DUP2 DUP4 PUSH2 0x1241 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x18D9 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x7AC JUMPI PUSH2 0x79D DUP2 DUP4 PUSH2 0x1241 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1847 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x13AF JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x19EA JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x144E JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x144E JUMPI DUP2 DUP2 SUB PUSH2 0x199F JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x1972 JUMPI DUP3 ADD SWAP2 PUSH2 0x1954 DUP4 DUP4 PUSH2 0x18E9 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x19D5 PUSH2 0x19AF PUSH2 0x19BF SWAP4 DUP7 PUSH2 0x18E9 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x18E9 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x193C JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1A44 JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0x1214 JUMPI DUP3 PUSH2 0x1A2F PUSH2 0x19BF DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x18E9 JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4D 0xC2 JUMP 0xD7 0x1E EXTCODESIZE JUMPI 0xE1 0x1F 0xC RETURNDATACOPY LOG2 DUP11 PUSH12 0xAFB7D1086F6417929DAE6253 DUP16 0x4E PUSH20 0x2D1FBC64736F6C634300081B0033000000000000 ","sourceMap":"332:1205:83:-:0;;;;;;;;;;;;;-1:-1:-1;;332:1205:83;;;;-1:-1:-1;;;;;332:1205:83;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;332:1205:83;;;;;;;;;;;;;;;;;;;;;1273:26:48;;1269:95;;332:1205:83;;;;;;;;2093:20:49;332:1205:83;;2093:20:49;332:1205:83;;-1:-1:-1;332:1205:83;;;;;-1:-1:-1;332:1205:83;;;;;3052:40:48;-1:-1:-1;3052:40:48;;1524:4:80;1347:46:32;;1548:29:80;1544:80;;1634:14;;2093:20:49;853:1:81;332:1205:83;;;;;;;1347:46:32;332:1205:83;;;;;1634:14:80;332:1205:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1544:80:80;1600:13;;;-1:-1:-1;1600:13:80;;-1:-1:-1;1600:13:80;1269:95:48;1322:31;;;-1:-1:-1;1322:31:48;-1:-1:-1;1322:31:48;332:1205:83;;-1:-1:-1;1322:31:48;332:1205:83;-1:-1:-1;332:1205:83;;;;;;-1:-1:-1;332:1205:83;;;;;-1:-1:-1;332:1205:83"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":4565,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":6045,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn":{"entryPoint":4762,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":5287,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":5243,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_array_address_dyn":{"entryPoint":4887,"id":null,"parameterSlots":1,"returnSlots":2},"abi_encode_array_address_dyn":{"entryPoint":4938,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":4738,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":5185,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":4673,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_16996":{"entryPoint":4600,"id":null,"parameterSlots":1,"returnSlots":0},"fun_add":{"entryPoint":6642,"id":16131,"parameterSlots":2,"returnSlots":1},"fun_authenticateCaller":{"entryPoint":5412,"id":4338,"parameterSlots":0,"returnSlots":0},"fun_canPerform":{"entryPoint":6078,"id":20311,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":5855,"id":9405,"parameterSlots":0,"returnSlots":0},"fun_contains":{"entryPoint":null,"id":16277,"parameterSlots":2,"returnSlots":1},"fun_createPoolSet":{"entryPoint":5706,"id":20479,"parameterSlots":1,"returnSlots":1},"fun_ensureValidManager":{"entryPoint":5513,"id":20986,"parameterSlots":1,"returnSlots":0},"fun_ensureValidPoolSet":{"entryPoint":5311,"id":21040,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":5084,"id":4356,"parameterSlots":1,"returnSlots":1},"fun_getValidPoolSetId":{"entryPoint":5644,"id":20958,"parameterSlots":0,"returnSlots":1},"fun_remove":{"entryPoint":6398,"id":16215,"parameterSlots":2,"returnSlots":1},"fun_transferOwnership":{"entryPoint":5931,"id":9529,"parameterSlots":1,"returnSlots":0},"memory_array_index_access_address_dyn":{"entryPoint":5019,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_bytes32_dyn":{"entryPoint":6377,"id":null,"parameterSlots":2,"returnSlots":2},"update_byte_slice_dynamic32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4296":[{"length":32,"start":5127}],"20200":[{"length":32,"start":350},{"length":32,"start":664},{"length":32,"start":1471},{"length":32,"start":1864},{"length":32,"start":3420},{"length":32,"start":6165}]},"linkReferences":{},"object":"60406080815260049081361015610014575f80fd5b5f915f3560e01c908163182551da1461116d578163255dae411461112e57816325c427ed146110ec5781632da55a1d146110255781633700f98714610f725781633e035f9b14610cd457816362d5346214610ca4578163715018a614610c1f57816379ba509714610bbc5781637c1ec46014610a70578163851c1bb314610a275781638c60ebd0146108e15781638da5cb5b146108ae57816394fc40581461082e578163a89b1128146107bd578163aaabadc5146106f4578163c482e822146106d6578163ce998aba146106b2578163d15126ba14610556578163e30c397814610521578163e909c19b146104e3578163ebf3a8d01461025a578163f167a1e61461021857508063f2fde38b146101865763fbfa77cf14610133575f80fd5b346101825781600319360112610182576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b8234610215576020600319360112610215576101a06111d5565b6101a86116df565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b905034610256576020600319360112610256578160209373ffffffffffffffffffffffffffffffffffffffff92358152600385522054169051908152f35b8280fd5b919050346102565761026b36611317565b9091610275611524565b61027e836114bf565b81519373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811693875b8781106102c7578880f35b826102d2828461139b565b511685517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818d5afa9081156104d9578d916104ac575b50156104825761033183898e8d815260058552206119f2565b15610454578b88517fe9ddeb260000000000000000000000000000000000000000000000000000000081528489820152808b818660609384935afa92831561044957908994939291926103e1575b50500151166103b8575090876001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b698c80a3016102bc565b8a82877ff043494a00000000000000000000000000000000000000000000000000000000835252fd5b8194508092503d8311610442575b6103f98183611241565b8101031261043e5786916104338a805192610413846111f8565b61041c8161179d565b845261042985820161179d565b858501520161179d565b8a8201525f8061037f565b8c80fd5b503d6103ef565b8b51903d90823e3d90fd5b60448c8b84868b7f5a17aa8d0000000000000000000000000000000000000000000000000000000085525252fd5b508a82877f9e51bd5c00000000000000000000000000000000000000000000000000000000835252fd5b6104cc9150823d84116104d2575b6104c48183611241565b8101906114a7565b5f610318565b503d6104ba565b89513d8f823e3d90fd5b5050346101825760206003193601126101825760209061051a6105046111d5565b61050c611524565b61051581611589565b61164a565b9051908152f35b50503461018257816003193601126101825760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b919050346106805780600319360112610680576105716111d5565b9161057a61160c565b92835f526005602052825f20936105b773ffffffffffffffffffffffffffffffffffffffff80931680966001915f520160205260405f2054151590565b1561068457507f00000000000000000000000000000000000000000000000000000000000000001692833b15610680575f9360448592855196879384927fd15126ba0000000000000000000000000000000000000000000000000000000084528784015260243560248401525af1801561067657610633578380f35b9091925067ffffffffffffffff831161064a575052005b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b82513d5f823e3d90fd5b5f80fd5b84837f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b8234610680575f60031936011261068057602091335f528252805f20549051908152f35b8234610680575f600319360112610680576020906002549051908152f35b905034610680575f6003193601126106805773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa9182156107b357926020935f93610784575b505191168152f35b6107a5919350843d86116107ac575b61079d8183611241565b81019061147b565b918461077c565b503d610793565b83513d5f823e3d90fd5b34610680576020600319360112610680576107d66111d5565b6107de611524565b73ffffffffffffffffffffffffffffffffffffffff5f54163314610807576108059061172b565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b905034610680576020906020600319360112610680573561084e816114bf565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b828210610897576108938686610889828b0383611241565b519182918261134a565b0390f35b835487529586019560019384019390910190610871565b8234610680575f6003193601126106805760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b9050346106805760606003193601126106805780359060243560443591610907846114bf565b835f526005906020906005602052865f2054858511908115610a1d575b8115610a12575b506109e7575061093b8385611441565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061097e61096988611282565b976109768a51998a611241565b808952611282565b01366020880137835b85811061099b57875180610893898261134a565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff6109c5828b5f206118e9565b90549060031b1c166109e06109da8884611441565b8a61139b565b5201610987565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b90508410158861092b565b8087119150610924565b9050346106805760206003193601126106805735907fffffffff00000000000000000000000000000000000000000000000000000000821682036106805761051a6020926113dc565b905034610680576020918260031936011261068057813591610a90611524565b610a99836114bf565b825f5260058452815f208054805b610b5c575050825f5260058452815f208054905f815581610b3f575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610ac3575f8155600101610b49565b5f190180610bb673ffffffffffffffffffffffffffffffffffffffff610b8283866118e9565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a3846118fe565b50610aa7565b34610680575f600319360112610680573373ffffffffffffffffffffffffffffffffffffffff6001541603610bf4576108053361172b565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b34610680575f60031936011261068057610c376116df565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b82346106805760206003193601126106805760209135610cc3816114bf565b5f5260058252805f20549051908152f35b905034610680578160031936011261068057610cee6111d5565b91602492833567ffffffffffffffff811161068057610d13610d1c913690860161129a565b9161050c611524565b928151610d2e575b6020848451908152f35b610d36611524565b610d3f846114bf565b8151915f73ffffffffffffffffffffffffffffffffffffffff91827f000000000000000000000000000000000000000000000000000000000000000016915b858110610d8e5750505050610d24565b83610d99828461139b565b511687517fc673bdaf000000000000000000000000000000000000000000000000000000008152818782015260209081818d81895afa908115610f68575f91610f4b575b5015610f2157895f5260058152610df6828a5f206119f2565b15610ef35788517fe9ddeb260000000000000000000000000000000000000000000000000000000081528288820152808c6060928391818a5afa918215610ee95790889392915f92610ea5575b5050015116610e7b5790886001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610d7e565b8990867ff043494a000000000000000000000000000000000000000000000000000000005f52525ffd5b8194508092503d8311610ee2575b610ebd8183611241565b81010312610680578691610ed78b805192610413846111f8565b8b8201528d80610e43565b503d610eb3565b8b513d5f823e3d90fd5b898b83897f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8a82887f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610f629150823d84116104d2576104c48183611241565b8c610ddd565b8a513d5f823e3d90fd5b823461068057602060031936011261068057610f8c6111d5565b91610f9683611589565b610f9e61160c565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b82346106805761103436611317565b9161103d611524565b611046826114bf565b8251925f5b84811061105457005b73ffffffffffffffffffffffffffffffffffffffff611073828461139b565b5116845f52600560205261108981855f206118fe565b156110bd5790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a30161104b565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b82346106805760206003193601126106805760209173ffffffffffffffffffffffffffffffffffffffff61111e6111d5565b165f528252805f20549051908152f35b823461068057602060031936011261068057602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b82346106805780600319360112610680576020906111cc61118c6111d5565b602435611198816114bf565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361068057565b6060810190811067ffffffffffffffff82111761121457604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761121457604052565b67ffffffffffffffff81116112145760051b60200190565b9080601f830112156106805760209082356112b481611282565b936112c26040519586611241565b81855260208086019260051b82010192831161068057602001905b8282106112eb575050505090565b813573ffffffffffffffffffffffffffffffffffffffff811681036106805781529083019083016112dd565b90604060031983011261068057600435916024359067ffffffffffffffff8211610680576113479160040161129a565b90565b60209060206040818301928281528551809452019301915f5b828110611371575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611363565b80518210156113af5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f000000000000000000000000000000000000000000000000000000000000000084521660408201526024815261143b816111f8565b51902090565b9190820391821161144e57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90816020910312610680575173ffffffffffffffffffffffffffffffffffffffff811681036106805790565b90816020910312610680575180151581036106805790565b801580156114fa575b6114cf5750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f205416156114c8565b61155a6115537fffffffff000000000000000000000000000000000000000000000000000000005f35166113dc565b33906117be565b1561156157565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff1680156115e457805f52600460205260405f20546115b95750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f205490811561162257565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f19831461144e576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b73ffffffffffffffffffffffffffffffffffffffff5f541633036116ff57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b519073ffffffffffffffffffffffffffffffffffffffff8216820361068057565b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146118e157604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156118b25785935f956118bd575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa9182156118b2575f9261189c57505090565b6113479250803d106104d2576104c48183611241565b6040513d5f823e3d90fd5b6064929195506118d990853d87116107ac5761079d8183611241565b949091611847565b505050600190565b80548210156113af575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f146119ea575f199182810181811161144e5782549084820191821161144e5781810361199f575b505050805480156119725782019161195483836118e9565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b6119d56119af6119bf93866118e9565b90549060031b1c928392866118e9565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f808061193c565b505050505f90565b5f828152600182016020526040902054611a4457805490680100000000000000008210156112145782611a2f6119bf8460018096018555846118e9565b90558054925f520160205260405f2055600190565b50505f9056fea26469706673582212204dc256d71e3b57e11f0c3ea28a6bafb7d1086f6417929dae62538f4e732d1fbc64736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x182551DA EQ PUSH2 0x116D JUMPI DUP2 PUSH4 0x255DAE41 EQ PUSH2 0x112E JUMPI DUP2 PUSH4 0x25C427ED EQ PUSH2 0x10EC JUMPI DUP2 PUSH4 0x2DA55A1D EQ PUSH2 0x1025 JUMPI DUP2 PUSH4 0x3700F987 EQ PUSH2 0xF72 JUMPI DUP2 PUSH4 0x3E035F9B EQ PUSH2 0xCD4 JUMPI DUP2 PUSH4 0x62D53462 EQ PUSH2 0xCA4 JUMPI DUP2 PUSH4 0x715018A6 EQ PUSH2 0xC1F JUMPI DUP2 PUSH4 0x79BA5097 EQ PUSH2 0xBBC JUMPI DUP2 PUSH4 0x7C1EC460 EQ PUSH2 0xA70 JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0xA27 JUMPI DUP2 PUSH4 0x8C60EBD0 EQ PUSH2 0x8E1 JUMPI DUP2 PUSH4 0x8DA5CB5B EQ PUSH2 0x8AE JUMPI DUP2 PUSH4 0x94FC4058 EQ PUSH2 0x82E JUMPI DUP2 PUSH4 0xA89B1128 EQ PUSH2 0x7BD JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x6F4 JUMPI DUP2 PUSH4 0xC482E822 EQ PUSH2 0x6D6 JUMPI DUP2 PUSH4 0xCE998ABA EQ PUSH2 0x6B2 JUMPI DUP2 PUSH4 0xD15126BA EQ PUSH2 0x556 JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x521 JUMPI DUP2 PUSH4 0xE909C19B EQ PUSH2 0x4E3 JUMPI DUP2 PUSH4 0xEBF3A8D0 EQ PUSH2 0x25A JUMPI DUP2 PUSH4 0xF167A1E6 EQ PUSH2 0x218 JUMPI POP DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x186 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x133 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x182 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x215 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x215 JUMPI PUSH2 0x1A0 PUSH2 0x11D5 JUMP JUMPDEST PUSH2 0x1A8 PUSH2 0x16DF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE DUP3 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x256 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x256 JUMPI DUP2 PUSH1 0x20 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x3 DUP6 MSTORE KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x256 JUMPI PUSH2 0x26B CALLDATASIZE PUSH2 0x1317 JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x275 PUSH2 0x1524 JUMP JUMPDEST PUSH2 0x27E DUP4 PUSH2 0x14BF JUMP JUMPDEST DUP2 MLOAD SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 DUP8 JUMPDEST DUP8 DUP2 LT PUSH2 0x2C7 JUMPI DUP9 DUP1 RETURN JUMPDEST DUP3 PUSH2 0x2D2 DUP3 DUP5 PUSH2 0x139B JUMP JUMPDEST MLOAD AND DUP6 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP14 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x4D9 JUMPI DUP14 SWAP2 PUSH2 0x4AC JUMPI JUMPDEST POP ISZERO PUSH2 0x482 JUMPI PUSH2 0x331 DUP4 DUP10 DUP15 DUP14 DUP2 MSTORE PUSH1 0x5 DUP6 MSTORE KECCAK256 PUSH2 0x19F2 JUMP JUMPDEST ISZERO PUSH2 0x454 JUMPI DUP12 DUP9 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP5 DUP10 DUP3 ADD MSTORE DUP1 DUP12 DUP2 DUP7 PUSH1 0x60 SWAP4 DUP5 SWAP4 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x449 JUMPI SWAP1 DUP10 SWAP5 SWAP4 SWAP3 SWAP2 SWAP3 PUSH2 0x3E1 JUMPI JUMPDEST POP POP ADD MLOAD AND PUSH2 0x3B8 JUMPI POP SWAP1 DUP8 PUSH1 0x1 SWAP3 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 DUP13 DUP1 LOG3 ADD PUSH2 0x2BC JUMP JUMPDEST DUP11 DUP3 DUP8 PUSH32 0xF043494A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST DUP2 SWAP5 POP DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x442 JUMPI JUMPDEST PUSH2 0x3F9 DUP2 DUP4 PUSH2 0x1241 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x43E JUMPI DUP7 SWAP2 PUSH2 0x433 DUP11 DUP1 MLOAD SWAP3 PUSH2 0x413 DUP5 PUSH2 0x11F8 JUMP JUMPDEST PUSH2 0x41C DUP2 PUSH2 0x179D JUMP JUMPDEST DUP5 MSTORE PUSH2 0x429 DUP6 DUP3 ADD PUSH2 0x179D JUMP JUMPDEST DUP6 DUP6 ADD MSTORE ADD PUSH2 0x179D JUMP JUMPDEST DUP11 DUP3 ADD MSTORE PUSH0 DUP1 PUSH2 0x37F JUMP JUMPDEST DUP13 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x3EF JUMP JUMPDEST DUP12 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x44 DUP13 DUP12 DUP5 DUP7 DUP12 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE MSTORE MSTORE REVERT JUMPDEST POP DUP11 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH2 0x4CC SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D2 JUMPI JUMPDEST PUSH2 0x4C4 DUP2 DUP4 PUSH2 0x1241 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x14A7 JUMP JUMPDEST PUSH0 PUSH2 0x318 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4BA JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x182 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x51A PUSH2 0x504 PUSH2 0x11D5 JUMP JUMPDEST PUSH2 0x50C PUSH2 0x1524 JUMP JUMPDEST PUSH2 0x515 DUP2 PUSH2 0x1589 JUMP JUMPDEST PUSH2 0x164A JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x182 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x182 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP2 SWAP1 POP CALLVALUE PUSH2 0x680 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH2 0x571 PUSH2 0x11D5 JUMP JUMPDEST SWAP2 PUSH2 0x57A PUSH2 0x160C JUMP JUMPDEST SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP4 PUSH2 0x5B7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP1 SWAP7 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x684 JUMPI POP PUSH32 0x0 AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x680 JUMPI PUSH0 SWAP4 PUSH1 0x44 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 SWAP4 DUP5 SWAP3 PUSH32 0xD15126BA00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP8 DUP5 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x24 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x676 JUMPI PUSH2 0x633 JUMPI DUP4 DUP1 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x64A JUMPI POP MSTORE STOP JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP5 DUP4 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x680 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH1 0x20 SWAP2 CALLER PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x680 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x680 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7B3 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x784 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x7A5 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x7AC JUMPI JUMPDEST PUSH2 0x79D DUP2 DUP4 PUSH2 0x1241 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x147B JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x77C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x793 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x680 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH2 0x7D6 PUSH2 0x11D5 JUMP JUMPDEST PUSH2 0x7DE PUSH2 0x1524 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x807 JUMPI PUSH2 0x805 SWAP1 PUSH2 0x172B JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x680 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI CALLDATALOAD PUSH2 0x84E DUP2 PUSH2 0x14BF JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x897 JUMPI PUSH2 0x893 DUP7 DUP7 PUSH2 0x889 DUP3 DUP12 SUB DUP4 PUSH2 0x1241 JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x134A JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x871 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x680 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x680 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x907 DUP5 PUSH2 0x14BF JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0xA1D JUMPI JUMPDEST DUP2 ISZERO PUSH2 0xA12 JUMPI JUMPDEST POP PUSH2 0x9E7 JUMPI POP PUSH2 0x93B DUP4 DUP6 PUSH2 0x1441 JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x97E PUSH2 0x969 DUP9 PUSH2 0x1282 JUMP JUMPDEST SWAP8 PUSH2 0x976 DUP11 MLOAD SWAP10 DUP11 PUSH2 0x1241 JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x1282 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x99B JUMPI DUP8 MLOAD DUP1 PUSH2 0x893 DUP10 DUP3 PUSH2 0x134A JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x9C5 DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x18E9 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x9E0 PUSH2 0x9DA DUP9 DUP5 PUSH2 0x1441 JUMP JUMPDEST DUP11 PUSH2 0x139B JUMP JUMPDEST MSTORE ADD PUSH2 0x987 JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x92B JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x924 JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x680 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x680 JUMPI PUSH2 0x51A PUSH1 0x20 SWAP3 PUSH2 0x13DC JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x680 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0xA90 PUSH2 0x1524 JUMP JUMPDEST PUSH2 0xA99 DUP4 PUSH2 0x14BF JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0xB5C JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0xB3F JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAC3 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xB49 JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0xBB6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xB82 DUP4 DUP7 PUSH2 0x18E9 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x18FE JUMP JUMPDEST POP PUSH2 0xAA7 JUMP JUMPDEST CALLVALUE PUSH2 0x680 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0xBF4 JUMPI PUSH2 0x805 CALLER PUSH2 0x172B JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x680 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH2 0xC37 PUSH2 0x16DF JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x680 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xCC3 DUP2 PUSH2 0x14BF JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x680 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH2 0xCEE PUSH2 0x11D5 JUMP JUMPDEST SWAP2 PUSH1 0x24 SWAP3 DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH2 0xD13 PUSH2 0xD1C SWAP2 CALLDATASIZE SWAP1 DUP7 ADD PUSH2 0x129A JUMP JUMPDEST SWAP2 PUSH2 0x50C PUSH2 0x1524 JUMP JUMPDEST SWAP3 DUP2 MLOAD PUSH2 0xD2E JUMPI JUMPDEST PUSH1 0x20 DUP5 DUP5 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xD36 PUSH2 0x1524 JUMP JUMPDEST PUSH2 0xD3F DUP5 PUSH2 0x14BF JUMP JUMPDEST DUP2 MLOAD SWAP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 PUSH32 0x0 AND SWAP2 JUMPDEST DUP6 DUP2 LT PUSH2 0xD8E JUMPI POP POP POP POP PUSH2 0xD24 JUMP JUMPDEST DUP4 PUSH2 0xD99 DUP3 DUP5 PUSH2 0x139B JUMP JUMPDEST MLOAD AND DUP8 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP8 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP14 DUP2 DUP10 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xF68 JUMPI PUSH0 SWAP2 PUSH2 0xF4B JUMPI JUMPDEST POP ISZERO PUSH2 0xF21 JUMPI DUP10 PUSH0 MSTORE PUSH1 0x5 DUP2 MSTORE PUSH2 0xDF6 DUP3 DUP11 PUSH0 KECCAK256 PUSH2 0x19F2 JUMP JUMPDEST ISZERO PUSH2 0xEF3 JUMPI DUP9 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP9 DUP3 ADD MSTORE DUP1 DUP13 PUSH1 0x60 SWAP3 DUP4 SWAP2 DUP2 DUP11 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xEE9 JUMPI SWAP1 DUP9 SWAP4 SWAP3 SWAP2 PUSH0 SWAP3 PUSH2 0xEA5 JUMPI JUMPDEST POP POP ADD MLOAD AND PUSH2 0xE7B JUMPI SWAP1 DUP9 PUSH1 0x1 SWAP3 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xD7E JUMP JUMPDEST DUP10 SWAP1 DUP7 PUSH32 0xF043494A00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP2 SWAP5 POP DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xEE2 JUMPI JUMPDEST PUSH2 0xEBD DUP2 DUP4 PUSH2 0x1241 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x680 JUMPI DUP7 SWAP2 PUSH2 0xED7 DUP12 DUP1 MLOAD SWAP3 PUSH2 0x413 DUP5 PUSH2 0x11F8 JUMP JUMPDEST DUP12 DUP3 ADD MSTORE DUP14 DUP1 PUSH2 0xE43 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xEB3 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP10 DUP12 DUP4 DUP10 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP11 DUP3 DUP9 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xF62 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4D2 JUMPI PUSH2 0x4C4 DUP2 DUP4 PUSH2 0x1241 JUMP JUMPDEST DUP13 PUSH2 0xDDD JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x680 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH2 0xF8C PUSH2 0x11D5 JUMP JUMPDEST SWAP2 PUSH2 0xF96 DUP4 PUSH2 0x1589 JUMP JUMPDEST PUSH2 0xF9E PUSH2 0x160C JUMP JUMPDEST SWAP2 DUP3 SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x680 JUMPI PUSH2 0x1034 CALLDATASIZE PUSH2 0x1317 JUMP JUMPDEST SWAP2 PUSH2 0x103D PUSH2 0x1524 JUMP JUMPDEST PUSH2 0x1046 DUP3 PUSH2 0x14BF JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x1054 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1073 DUP3 DUP5 PUSH2 0x139B JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0x1089 DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x18FE JUMP JUMPDEST ISZERO PUSH2 0x10BD JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0x104B JUMP JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x680 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x111E PUSH2 0x11D5 JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x680 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x680 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x680 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x11CC PUSH2 0x118C PUSH2 0x11D5 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x1198 DUP2 PUSH2 0x14BF JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x680 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1214 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1214 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1214 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x680 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x12B4 DUP2 PUSH2 0x1282 JUMP JUMPDEST SWAP4 PUSH2 0x12C2 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1241 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x680 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x12EB JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x680 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x12DD JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x680 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x680 JUMPI PUSH2 0x1347 SWAP2 PUSH1 0x4 ADD PUSH2 0x129A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1371 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1363 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x13AF JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x143B DUP2 PUSH2 0x11F8 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x144E JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x680 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x680 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x680 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x680 JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x14FA JUMPI JUMPDEST PUSH2 0x14CF JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x14C8 JUMP JUMPDEST PUSH2 0x155A PUSH2 0x1553 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x13DC JUMP JUMPDEST CALLER SWAP1 PUSH2 0x17BE JUMP JUMPDEST ISZERO PUSH2 0x1561 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x15E4 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x15B9 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLER PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x1622 JUMPI JUMP JUMPDEST PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x144E JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x16FF JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x680 JUMPI JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x18E1 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x18B2 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x18BD JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x18B2 JUMPI PUSH0 SWAP3 PUSH2 0x189C JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1347 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x4D2 JUMPI PUSH2 0x4C4 DUP2 DUP4 PUSH2 0x1241 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x18D9 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x7AC JUMPI PUSH2 0x79D DUP2 DUP4 PUSH2 0x1241 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1847 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x13AF JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x19EA JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x144E JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x144E JUMPI DUP2 DUP2 SUB PUSH2 0x199F JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x1972 JUMPI DUP3 ADD SWAP2 PUSH2 0x1954 DUP4 DUP4 PUSH2 0x18E9 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x19D5 PUSH2 0x19AF PUSH2 0x19BF SWAP4 DUP7 PUSH2 0x18E9 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x18E9 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x193C JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1A44 JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0x1214 JUMPI DUP3 PUSH2 0x1A2F PUSH2 0x19BF DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x18E9 JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4D 0xC2 JUMP 0xD7 0x1E EXTCODESIZE JUMPI 0xE1 0x1F 0xC RETURNDATACOPY LOG2 DUP11 PUSH12 0xAFB7D1086F6417929DAE6253 DUP16 0x4E PUSH20 0x2D1FBC64736F6C634300081B0033000000000000 ","sourceMap":"332:1205:83:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21:80;332:1205:83;1810:21:80;;;332:1205:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:83;;;;;;;;;1348:29:80;332:1205:83;;;;;;;;;;;;;;-1:-1:-1;;332:1205:83;;;;;;;:::i;:::-;1500:62:48;;:::i;:::-;332:1205:83;;;;;;;1738:24:49;332:1205:83;;;1738:24:49;332:1205:83;;;;1777:43:49;;;;332:1205:83;;;;;;;;;;;;-1:-1:-1;;332:1205:83;;;;;;;;;;;;;8454:16:81;332:1205:83;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1525:73:32;;;;:::i;:::-;1515:9:81;;;:::i;:::-;332:1205:83;;;;5266:5:81;332:1205:83;;;5122:13:81;5137:12;;;;;;332:1205:83;;;5151:3:81;5185:11;;;;;:::i;:::-;332:1205:83;;;;;5266:28:81;;;;;;332:1205:83;5266:28:81;332:1205:83;5266:28:81;;;;;;;;;;;;;;;;;5151:3;332:1205:83;;5262:119:81;;11511:50:71;332:1205:83;;;;;;5399:9:81;332:1205:83;;;11511:50:71;:::i;:::-;332:1205:83;5395:118:81;;332:1205:83;;;;1411:31;;;;;;332:1205;1411:31;;;;;;;;;;;;;;;;;;;;;;;;5151:3:81;1411:46:83;;;332:1205;;1407:122;;5644:31:81;;;332:1205:83;5644:31:81;;;;;332:1205:83;5122:13:81;;1407:122:83;1494:24;;;;;;332:1205;1494:24;1411:31;;;;;;;;;;;;;;;;;:::i;:::-;;;332:1205;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;1411:31;;;;332:1205;;;;1411:31;;;;;;332:1205;;;;;;;;;;5395:118:81;332:1205:83;5465:33:81;;;;;;;;332:1205:83;;5465:33:81;5262:119;5330:36;;;;;;;332:1205:83;5330:36:81;5266:28;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;332:1205:83;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:83;;;;;;;2557:30:81;332:1205:83;;:::i;:::-;1525:73:32;;:::i;:::-;1962:7:81;;;:::i;:::-;2557:30;:::i;:::-;332:1205:83;;;;;;;;;;;;;-1:-1:-1;;332:1205:83;;;;;;;;1311:13:49;332:1205:83;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:83;;;;;;;:::i;:::-;1721:20:81;;;:::i;:::-;332:1205:83;;;;9373:9:81;332:1205:83;;;;;;12473:55:71;332:1205:83;;;;12473:55:71;;5197:14;5101:129;-1:-1:-1;332:1205:83;5197:14:71;332:1205:83;;;-1:-1:-1;332:1205:83;;5197:26:71;;5101:129;;12473:55;332:1205:83;9369:111:81;;935:5:83;;332:1205;935:57;;;;;;332:1205;;;;;;;935:57;;;;;332:1205;935:57;;;;;332:1205;;;;;;;935:57;;;;;;;;332:1205;;;935:57;332:1205;;;;;;;;;-1:-1:-1;332:1205:83;;;;;;;;;;;;935:57;332:1205;;;;;;;;;935:57;332:1205;;;9369:111:81;9440:29;;;332:1205:83;9440:29:81;332:1205:83;;;;;9440:29:81;332:1205:83;;;;;;-1:-1:-1;;332:1205:83;;;;;;6586:10:81;;332:1205:83;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:83;;;;;;;8291:14:81;332:1205:83;;;;;;;;;;;;;;-1:-1:-1;;332:1205:83;;;;;;1810:21:80;332:1205:83;;1810:21:80;;332:1205:83;1810:21:80;;:5;;;332:1205:83;1810:21:80;;;;;;;;;;332:1205:83;1810:21:80;;;332:1205:83;;;;;;;;1810:21:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;332:1205:83;;;;;;;;;;;;;;-1:-1:-1;;332:1205:83;;;;;;;:::i;:::-;1525:73:32;;:::i;:::-;332:1205:83;;;;2423:10:80;:21;2419:77;;2524:8;;;:::i;:::-;332:1205:83;2419:77:80;2467:18;;332:1205:83;2467:18:80;332:1205:83;2467:18:80;332:1205:83;;;;;;;;;-1:-1:-1;;332:1205:83;;;;;;1515:9:81;;;:::i;:::-;332:1205:83;;7570:9:81;332:1205:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:83;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:83;;;;;;;;;;;;1515:9:81;;;;:::i;:::-;332:1205:83;;;7852:9:81;332:1205:83;;;7852:9:81;332:1205:83;;;;;;7896:9:81;;;:28;;;;;332:1205:83;7896:50:81;;;;332:1205:83;7892:115:81;;;8039:9;;;;;:::i;:::-;332:1205:83;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;8064:16:81;8082:6;;;;;;332:1205:83;;;;;;;:::i;8090:3:81:-;332:1205:83;;;;;;;;;5853:18:71;332:1205:83;;;;5853:18:71;:::i;:::-;332:1205:83;;;;;;;8109:44:81;8115:8;;;;:::i;:::-;8109:44;;:::i;:::-;332:1205:83;;8064:16:81;;7892:115;7969:27;;;332:1205:83;7969:27:81;332:1205:83;;;7969:27:81;7896:50;7928:18;;;;;7896:50;;;:28;7909:15;;;;-1:-1:-1;7896:28:81;;332:1205:83;;;;;;;-1:-1:-1;;332:1205:83;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;332:1205:83;;;;;;;1525:73:32;;;:::i;:::-;1515:9:81;;;:::i;:::-;332:1205:83;;;3508:9:81;332:1205:83;;;;;;;3627:237:81;3634:12;;;332:1205:83;;;;;3508:9:81;332:1205:83;;;;;;;;;;;;;;3627:237:81;332:1205:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4157:36:81;332:1205:83;4157:36:81;;332:1205:83;;;;;;;;;;;;;;;;;;;;;;;;;3627:237:81;-1:-1:-1;;332:1205:83;5853:18:71;11832:53;332:1205:83;5853:18:71;;;;:::i;:::-;332:1205:83;;;;;;;3783:35:81;;;332:1205:83;3783:35:81;;11832:53:71;;:::i;:::-;;3627:237:81;;332:1205:83;;;;;-1:-1:-1;;332:1205:83;;;;;735:10:63;332:1205:83;1311:13:49;332:1205:83;;2339:24:49;2335:96;;2459:6;735:10:63;2459:6:49;:::i;2335:96::-;2386:34;332:1205:83;2386:34:49;735:10:63;332:1205:83;;;;2386:34:49;332:1205:83;;;;;-1:-1:-1;;332:1205:83;;;;;1500:62:48;;:::i;:::-;332:1205:83;;;;2093:20:49;332:1205:83;;2093:20:49;332:1205:83;;;;;;;;;3052:40:48;;;;332:1205:83;;;;;;;-1:-1:-1;;332:1205:83;;;;;;;;1515:9:81;;;:::i;:::-;332:1205:83;;6942:9:81;332:1205:83;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:83;;;;;;;:::i;:::-;;;;;;;;;;;;2839:30:81;332:1205:83;;;;;;:::i;:::-;1525:73:32;;;:::i;2839:30:81:-;332:1205:83;;;2880:84:81;;332:1205:83;;;;;;;;;2880:84:81;1525:73:32;;:::i;:::-;1515:9:81;;;:::i;:::-;332:1205:83;;5122:13:81;332:1205:83;;5266:5:81;;;332:1205:83;5117:569:81;5137:12;;;;;;2880:84;;;;;;5151:3;5185:11;;;;;:::i;:::-;332:1205:83;;;;;5266:28:81;;;;;;332:1205:83;;5266:28:81;;;;;;;;;;;;;332:1205:83;5266:28:81;;;5151:3;332:1205:83;;5262:119:81;;332:1205:83;;;5399:9:81;332:1205:83;;11511:50:71;332:1205:83;;;;11511:50:71;:::i;:::-;332:1205:83;5395:118:81;;332:1205:83;;;1411:31;;;;;;332:1205;1411:31;;;;;;;;;;;;;;;;;;;;332:1205;1411:31;;;5151:3:81;1411:46:83;;;332:1205;;1407:122;;5644:31:81;;332:1205:83;5644:31:81;;332:1205:83;5644:31:81;;332:1205:83;5122:13:81;;1407:122:83;1494:24;;;;332:1205;1494:24;332:1205;;1494:24;1411:31;;;;;;;;;;;;;;;;;:::i;:::-;;;332:1205;;;;;;;;;;;;;;:::i;:::-;;;;;1411:31;;;;;;;;;;332:1205;;;;;;;;;5395:118:81;5465:33;;;;;332:1205:83;5465:33:81;332:1205:83;;;;5465:33:81;5262:119;5330:36;;;;332:1205:83;5330:36:81;332:1205:83;;5330:36:81;5266:28;;;;;;;;;;;;;;:::i;:::-;;;;;332:1205:83;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:83;;;;;;;:::i;:::-;1962:7:81;;;;:::i;:::-;4366:20;;:::i;:::-;332:1205:83;;;;;;4397:16:81;332:1205:83;;;;;;;;;;;;;;;;;4520:10:81;332:1205:83;;;;;;;;;;;;;;;4520:10:81;4599:62;;332:1205:83;4599:62:81;;332:1205:83;;;;;;;;;:::i;:::-;1525:73:32;;;:::i;:::-;1515:9:81;;;:::i;:::-;332:1205:83;;5934:13:81;332:1205:83;5949:12:81;;;;;;332:1205:83;5963:3:81;332:1205:83;5997:8:81;;;;:::i;:::-;332:1205:83;;;;;6024:9:81;332:1205:83;;11832:53:71;332:1205:83;;;;11832:53:71;:::i;:::-;332:1205:83;6020:117:81;;6156:35;;332:1205:83;6156:35:81;;332:1205:83;6156:35:81;;332:1205:83;5934:13:81;;6020:117;6093:29;;;;332:1205:83;6093:29:81;332:1205:83;;;;;6093:29:81;332:1205:83;;;;;;-1:-1:-1;;332:1205:83;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:83;;;;;;;;;;7113:16:81;332:1205:83;;;;;;;;7113:41:81;;332:1205:83;;;;;;;;;;;;-1:-1:-1;;332:1205:83;;;;;;;12473:55:71;332:1205:83;;:::i;:::-;;;1515:9:81;;;:::i;:::-;332:1205:83;;7333:9:81;332:1205:83;;;;;;;;12473:55:71;5197:14;5101:129;-1:-1:-1;332:1205:83;5197:14:71;332:1205:83;;;-1:-1:-1;332:1205:83;;5197:26:71;;5101:129;;12473:55;332:1205:83;;;;;;;;;;;;;;;;;;;:::o;:::-;1411:31;332:1205;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;332:1205:83;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:32;332:1205:83;;;2303:50:32;;;2320:22;;332:1205:83;;;;;;;2303:50:32;;;;;;:::i;:::-;332:1205:83;2293:61:32;;1931:430;:::o;332:1205:83:-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;9714:202:81:-;9790:14;;:59;;;;9714:202;9786:124;;9714:202;:::o;9786:124::-;9872:27;9803:1;9872:27;;332:1205:83;;9803:1:81;9872:27;9790:59;332:1205:83;;9803:1:81;332:1205:83;9808:16:81;332:1205:83;;;;9803:1:81;332:1205:83;;;9808:41:81;9790:59;;1688:201:32;1798:33;1762:20;1774:7;;;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;;1774:7;1854:18;9014:266:81;332:1205:83;;9088:21:81;;9084:82;;332:1205:83;9107:1:81;332:1205:83;9180:14:81;332:1205:83;;;9107:1:81;332:1205:83;;9176:98:81;;9014:266;:::o;9176:98::-;9231:32;9107:1;9231:32;9180:14;332:1205:83;;9107:1:81;9231:32;9084:82;9132:23;9107:1;9132:23;;9107:1;9132:23;8795:213;6586:10;-1:-1:-1;332:1205:83;6571:14:81;332:1205:83;;;-1:-1:-1;332:1205:83;;8927:14:81;;;8923:79;;8795:213::o;8923:79::-;8964:27;-1:-1:-1;8964:27:81;6571:14;-1:-1:-1;8964:27:81;2976:342;;3083:16;332:1205:83;;-1:-1:-1;;332:1205:83;;;;;;;3083:16:81;332:1205:83;3071:28:81;332:1205:83;-1:-1:-1;332:1205:83;3158:16:81;332:1205:83;;;;-1:-1:-1;332:1205:83;;;;;;;;;;;;;-1:-1:-1;332:1205:83;3212:14:81;332:1205:83;;;;-1:-1:-1;332:1205:83;;3270:41:81;-1:-1:-1;3270:41:81;;2976:342::o;1796:162:48:-;332:1205:83;1710:6:48;332:1205:83;;735:10:63;1855:23:48;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:63;1901:40:48;332:1205:83;;1710:6:48;1901:40;2011:153:49;332:1205:83;;;2093:20:49;332:1205:83;;2093:20:49;332:1205:83;2093:20:49;332:1205:83;;;;;;;;;;2093:20:49;332:1205:83;;3052:40:48;2093:20:49;3052:40:48;;2011:153:49:o;332:1205:83:-;;;;;;;;;;:::o;2546:382:80:-;;332:1205:83;;;;;;;;;2721:15:80;;;2717:57;;332:1205:83;;2858:21:80;332:1205:83;2858:21:80;;;:5;;;:21;:5;;;332:1205:83;2858:21:80;;;;;;;;;332:1205:83;2858:21:80;;;2546:382;332:1205:83;;;;;;2858:63:80;;;;;332:1205:83;2858:63:80;;:21;:63;;332:1205:83;;;;;2915:4:80;332:1205:83;;;;;2858:63:80;;;;;;;332:1205:83;2858:63:80;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;-1:-1:-1;2858:63:80;;;;;;:::i;:::-;332:1205:83;;;;;;;;;2858:21:80;332:1205:83;2858:21:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o;332:1205:83:-;;;;;;;;-1:-1:-1;332:1205:83;;-1:-1:-1;332:1205:83;;;-1:-1:-1;332:1205:83;:::o;3071:1368:71:-;;3266:14;;;332:1205:83;;;;;;;;;;;3302:13:71;;;;3298:1135;3302:13;;;-1:-1:-1;;332:1205:83;;;;;;;;;;;;;;;;;;;;3777:23:71;;;3773:378;;3298:1135;332:1205:83;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3266:14:71;4368:11;:::o;332:1205:83:-;;;;;;;;;;3773:378:71;332:1205:83;3840:22:71;3961:23;3840:22;;;:::i;:::-;332:1205:83;;;;;;3961:23:71;;;;;:::i;:::-;332:1205:83;;;;;-1:-1:-1;;332:1205:83;;;;;;;;;;;;;;;;;;;;;;;;;3773:378:71;;;;;3298:1135;4410:12;;;;332:1205:83;4410:12:71;:::o;2497:406::-;-1:-1:-1;332:1205:83;;;5197:14:71;;;332:1205:83;;;;;;2581:21:71;;332:1205:83;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2776:14:71;332:1205:83;;;;;;;2832:11:71;:::o;2576:321::-;2874:12;;332:1205:83;2874:12:71;:::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","addPoolsToSet(uint256,address[])":"ebf3a8d0","createPoolSet(address)":"e909c19b","createPoolSet(address,address[])":"3e035f9b","destroyPoolSet(uint256)":"7c1ec460","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAllPoolsInSet(uint256)":"94fc4058","getAuthorizer()":"aaabadc5","getManagerForPoolSet(uint256)":"f167a1e6","getNextPoolSetId()":"c482e822","getPoolCountForSet(uint256)":"62d53462","getPoolSetIdForCaller()":"ce998aba","getPoolSetIdForManager(address)":"25c427ed","getPoolsInSet(uint256,uint256,uint256)":"8c60ebd0","isPoolInSet(address,uint256)":"182551da","isValidPoolSetId(uint256)":"255dae41","owner()":"8da5cb5b","pendingOwner()":"e30c3978","removePoolsFromSet(uint256,address[])":"2da55a1d","renounceOwnership()":"715018a6","setStaticSwapFeePercentage(address,uint256)":"d15126ba","transferOwnership(address)":"f2fde38b","transferPoolSetOwnership(address)":"3700f987","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"InvalidPoolSetId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolSetManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolHasSwapManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolSetManager\",\"type\":\"address\"}],\"name\":\"PoolSetManagerNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderIsNotPoolSetManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"PoolSetCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"PoolSetDestroyed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"PoolSetOwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPoolsToSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"destroyPoolSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getAllPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getManagerForPoolSet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextPoolSetId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getPoolCountForSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSetIdForCaller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getPoolSetIdForManager\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isPoolInSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isValidPoolSetId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePoolsFromSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferPoolSetOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"params\":{\"poolSetId\":\"Id of the set involved in the operation\"}}],\"InvalidPoolSetId(uint256)\":[{\"details\":\"This can mean the value is invalid, or it was never created, or it was destroyed.\",\"params\":{\"poolSetId\":\"The id of the invalid set\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolHasSwapManager(address)\":[{\"details\":\"The swap manager is an exclusive role. If it is set to a non-zero value during pool registration, only the swap manager can change the fee. This helper can only set fees on pools that allow governance to grant this permission.\",\"params\":{\"pool\":\"Address of the pool being added\"}}],\"PoolNotInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolSetManagerNotUnique(address)\":[{\"details\":\"Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\",\"params\":{\"poolSetManager\":\"Address of the manager that is already assigned to another pool set id\"}}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolRemovedFromSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetCreated(uint256,address)\":{\"details\":\"Pools are organized into separate sets, controlled by a manager, which can be changed independently.\",\"params\":{\"initialManager\":\"Address of the pool set manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetDestroyed(uint256,address)\":{\"params\":{\"manager\":\"The address of the set's last manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"details\":\"Managers can only control one pool set. Transfers to existing managers of other sets will revert.\",\"params\":{\"newManager\":\"Address of the new manager\",\"oldManager\":\"Address of the previous manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"addPoolsToSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may add pools to a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"newPools\":\"List of pools to add\",\"poolSetId\":\"Id of the set to which the new pools belong\"}},\"createPoolSet(address)\":{\"details\":\"Convenience function to create a pool set with no initial pools. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\"}},\"createPoolSet(address,address[])\":{\"details\":\"The `newPools` list can be empty, in which case this will only create the set. Pools can then be added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\",\"newPools\":\"Set of pools to add to the set\"}},\"destroyPoolSet(uint256)\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may destroy sets, effectively removing control of any pools in the set from the associated manager. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set being destroyed\"}},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAllPoolsInSet(uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"pools\":\"List of pools\"}},\"getManagerForPoolSet(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\"}},\"getNextPoolSetId()\":{\"returns\":{\"_0\":\"The pool set id that will be used on the next call of `createPoolSet`\"}},\"getPoolCountForSet(uint256)\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction. Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The current number of pools in the set\"}},\"getPoolSetIdForCaller()\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the caller is not a pool set manager\"}},\"getPoolSetIdForManager(address)\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the address given is not a pool set manager\"}},\"getPoolsInSet(uint256,uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`). Reverts if the poolSetId is not valid.\",\"params\":{\"from\":\"Start index\",\"poolSetId\":\"Id of the set containing the pools\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"isPoolInSet(address,uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"pool\":\"Address of the pool to check\",\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the pool is in the given set, false otherwise\"}},\"isValidPoolSetId(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the poolSetId exists\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"removePoolsFromSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may remove pools from a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set to which the pools belong\",\"pools\":\"List of pools to remove from the set\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function. Governance must grant this contract permission to call `setStaticSwapFeePercentage` on the Vault. Note that since the swap manager is an exclusive role, the swap fee cannot be changed by governance if it is set, and the pool cannot be added to the set.\",\"params\":{\"pool\":\"The address of the pool\",\"swapFeePercentage\":\"The new swap fee percentage\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"transferPoolSetOwnership(address)\":{\"details\":\"This is a permissioned function. Only the current manager of a set can call this to set a new manager. Since managers can only control a single set, there is no need to specify the id in the call. Note that this is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts if the new manager address is zero or already the manager of a pool set.\",\"params\":{\"newManager\":\"The address of the new manager\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"InvalidPoolSetId(uint256)\":[{\"notice\":\"Pool set id associated with an operation is invalid.\"}],\"InvalidPoolSetManager()\":[{\"notice\":\"The initial manager of a pool set cannot be zero.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolHasSwapManager(address)\":[{\"notice\":\"Cannot add a pool that has a swap manager.\"}],\"PoolNotInSet(address,uint256)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolSetManagerNotUnique(address)\":[{\"notice\":\"Pool set managers can only manage a single pool set.\"}],\"SenderIsNotPoolSetManager()\":[{\"notice\":\"Permissioned operations on pools can only be performed by the pool set manager.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"notice\":\"The owner added a pool to the given set.\"},\"PoolRemovedFromSet(address,uint256)\":{\"notice\":\"The owner removed a pool from the given set.\"},\"PoolSetCreated(uint256,address)\":{\"notice\":\"The owner created a new pool set.\"},\"PoolSetDestroyed(uint256,address)\":{\"notice\":\"The owner destroyed a pool set.\"},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"notice\":\"The current manager of a pool set transferred ownership to a new address.\"}},\"kind\":\"user\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"createPoolSet(address)\":{\"notice\":\"Create a new empty set with an initial manager.\"},\"createPoolSet(address,address[])\":{\"notice\":\"Create a new set with an initial manager, optionally initialized with a set of pools.\"},\"destroyPoolSet(uint256)\":{\"notice\":\"Simple way to remove an entire set of pools from control of the helper function.\"},\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAllPoolsInSet(uint256)\":{\"notice\":\"Get the full set of pools from a given set.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"},\"getManagerForPoolSet(uint256)\":{\"notice\":\"Get the manager address associated with a given poolSetId.\"},\"getNextPoolSetId()\":{\"notice\":\"Utility function to predict the next pool set id.\"},\"getPoolCountForSet(uint256)\":{\"notice\":\"Get the number of pools associated with the given set.\"},\"getPoolSetIdForCaller()\":{\"notice\":\"Get the pool set id associated with the caller.\"},\"getPoolSetIdForManager(address)\":{\"notice\":\"Get the pool set id associated with a given manager address.\"},\"getPoolsInSet(uint256,uint256,uint256)\":{\"notice\":\"Get a range of pools from a given set.\"},\"isPoolInSet(address,uint256)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"isValidPoolSetId(uint256)\":{\"notice\":\"Check whether a poolSetId has been created.\"},\"removePoolsFromSet(uint256,address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Set the static swap fee percentage on a given pool.\"},\"transferPoolSetOwnership(address)\":{\"notice\":\"Transfer ownership of a pool set from the current manager to a new manager.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/PoolSwapFeeHelper.sol\":\"PoolSwapFeeHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xdb8365416c9dd9d7be16677c13819065511e9bc7705d6bad85fd52b65d3b3c39\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b90206982d126075b074f0a77ea9cb3ec173ed9fe9e4504b12d6807532b1b7ff\",\"dweb:/ipfs/QmYjKTu4Mrew94sSxfQ8jP4yT7wZFgghSRyB9A2kDdSy8X\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolSwapFeeHelper.sol\":{\"keccak256\":\"0x28f0e2ffd4fda0cb7b1f55d368e5bf8672d6f907e0171674a8a93c7c65c4a29b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://37bb56bb5e66cead63626efaacae7dad39f3fd725d001825db861f22aceb0124\",\"dweb:/ipfs/QmdNskvPgTo6R3AmuA3zp8vY9waoEbKsTPWHp5v6aAbhkE\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/PoolHelperCommon.sol\":{\"keccak256\":\"0x30381172c4e42784079cea20f474af84d39df274cb63f1a2e0426d823ff788e4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6311287a0f4d8b3b8af5c67599f8f8976137b22398fadd243df798baf525b0d6\",\"dweb:/ipfs/QmZuVsXAb7zveWUrEGDVUFrGdFe9AwC1xiGtMJx5vFE6Jc\"]},\"contracts/PoolSwapFeeHelper.sol\":{\"keccak256\":\"0x8a437e7654311261de87663258f04b68a61a7a52e635f7263599ddc49cd2a159\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://55631bc88c6a36b362e143bc303f1dd293deb9ce0b48988d87be2b60f6934dc5\",\"dweb:/ipfs/QmfCN1AmHBYfQweVLLT2QF1co6JCTDXpWcV58miru7CmCE\"]}},\"version\":1}"}},"contracts/PriceImpactHelper.sol":{"PriceImpactHelper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IRouter","name":"router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"}],"name":"calculateAddLiquidityUnbalancedPriceImpact","outputs":[{"internalType":"uint256","name":"priceImpact","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callAndRevertHook","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461009a57601f6111fb38819003918201601f19168301916001600160401b0383118484101761009e57808492604094855283398101031261009a5780516001600160a01b0391828216820361009a5760200151918216820361009a5760805260a05260405161114890816100b38239608051816104b1015260a05181818161030201528181610735015281816108e40152610cd70152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c806348406a54146101a75763a76996381461002f575f80fd5b346101a35760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a357610066610aaf565b6024359067ffffffffffffffff82116101a357366023830112156101a35781600401359061009382610b0d565b926100a16040519485610ad2565b828452602084019036602485830101116101a3575f94856020868297602484960187378301015251925af16100d4610bc7565b90801561012957906100ea816101259333610e82565b506040519182917f5ab64fb8000000000000000000000000000000000000000000000000000000008352602060048401526024830190610bf6565b0390fd5b507f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000061017583610e3b565b1603610e73577f28f95541000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b346101a35760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a3576101de610aaf565b67ffffffffffffffff6024358181116101a357366023820112156101a35780600401359061020b82610af5565b916102196040519384610ad2565b8083526024602084019160051b830101913683116101a357602401905b828210610a9f5750505073ffffffffffffffffffffffffffffffffffffffff604435169182604435036101a3576102706044358386610c1b565b92604051907f0f71088800000000000000000000000000000000000000000000000000000000602083015273ffffffffffffffffffffffffffffffffffffffff86169485602484015260448301526064820152608060848201525f60a482015260a4815260e081019080821083831117610a72576103279160405273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b9081518201916020818185019403126101a3576020810151908282116101a357019180603f840112156101a357602083015161036281610af5565b936103706040519586610ad2565b8185526040602086019260051b8201019283116101a357604001905b828210610a62575050506103a08351610b29565b945f5b8451811015610425576103bf6103b98286610b5a565b51610d21565b906103cd6103b98288610b5a565b915f83820393128184128116918413901516176103f8576001916103f1828a610b5a565b52016103a3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50915091926104348451610b29565b925f5b855181101561046257600190610451604435898388610d76565b61045b8288610b5a565b5201610437565b50919094935f95604051907fca4f280300000000000000000000000000000000000000000000000000000000825260048201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa938415610a57575f946109ad575b505094905f915b85517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116103f85783101561092f57505f917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965f5b8651811015610595575f6105568289610b5a565b511380610582575b61056b575b600101610542565b61057a91985080945086610b5a565b519683610563565b508861058e8289610b5a565b511261055e565b509650919490925f907f8000000000000000000000000000000000000000000000000000000000000000975f5b8751811015610615575f6105d6828a610b5a565b511280610602575b6105eb575b6001016105c2565b6105fa91995080935087610b5a565b5197826105e3565b508961060e828a610b5a565b51136105de565b5092969750939281976106288188610b5a565b5161063c610636858a610b5a565b51610b9b565b13156107df5761075a8661071e8a61071061068e6106888773ffffffffffffffffffffffffffffffffffffffff6106808c82610678858c610b5a565b511699610b5a565b511694610b5a565b51610e06565b936040519485937f3ebc54e5000000000000000000000000000000000000000000000000000000006020860152604435928d60248701939060e095929373ffffffffffffffffffffffffffffffffffffffff8095818094168852166020870152166040850152606084015216608082015260c060a08201525f60c08201520190565b03601f198101835282610ad2565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b6020818051810103126101a3575f610787838261078061078d9660208f97015196610b5a565b528a610b5a565b52610d21565b916107988189610b5a565b515f84820194851291129080158216911516176103f8576001926107bc828a610b5a565b526107d56107ce6044358a8489610d76565b9188610b5a565b52019190956104e8565b91806107eb8488610b5a565b5173ffffffffffffffffffffffffffffffffffffffff16908661080e828a610b5a565b5173ffffffffffffffffffffffffffffffffffffffff1691610830908c610b5a565b5161083a90610b9b565b61084390610e06565b6040517f175d440800000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff92831660248201529382166044808601919091529282166064850152608484015290351660a482015260c060c48201525f60e48083019190915281526108c961010482610ad2565b6109099073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b8080518101036020136101a3575f610787838261078061078d9660208f97015196610b5a565b61094f816109496109446106368b958b610b5a565b610e06565b92610b5a565b5190670de0b6b3a7640000908181029181830414901517156103f857811561098057602091604051910460011c8152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b909193503d805f843e6109c08184610ad2565b8201916020818403126101a35780519182116101a357019080601f830112156101a3578151906109ef82610af5565b926109fd6040519485610ad2565b82845260208085019360051b8201019182116101a357602001915b818310610a2a575050509186806104e1565b825173ffffffffffffffffffffffffffffffffffffffff811681036101a357815260209283019201610a18565b6040513d5f823e3d90fd5b815181526020918201910161038c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8135815260209182019101610236565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101a357565b90601f601f19910116810190811067ffffffffffffffff821117610a7257604052565b67ffffffffffffffff8111610a725760051b60200190565b67ffffffffffffffff8111610a7257601f01601f191660200190565b90610b3382610af5565b610b406040519182610ad2565b828152601f19610b508294610af5565b0190602036910137565b8051821015610b6e5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f800000000000000000000000000000000000000000000000000000000000000081146103f8575f0390565b3d15610bf1573d90610bd882610b0d565b91610be66040519384610ad2565b82523d5f602084013e565b606090565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b90929173ffffffffffffffffffffffffffffffffffffffff604051916020937fda001f7d00000000000000000000000000000000000000000000000000000000858501528260a48501911660248501526080604485015286518091528460c485019701905f5b818110610d0d5750505083610cfc94959683610cd5931660648601525f858203917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83016084880152528085520183610ad2565b7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b81818051810103126101a357015190565b825189529786019791860191600101610c81565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610d4b5790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b929091610db183825192601f19610da5610d8f86610af5565b95610d9d6040519788610ad2565b808752610af5565b01366020860137610b5a565b51938415610dfd57610dd993610dd35f871396875f14610dee57915b84610b5a565b52610c1b565b9015610de25790565b610deb90610b9b565b90565b610df790610b9b565b91610dcd565b50505050505f90565b5f8112610e105790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6004815110610e4b576020015190565b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b805115610e4b57805190602001fd5b90610ebf5750805115610e9757602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610f12575b610ed0575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15610ec8565b90303b156101a3575f610f8091604051809381927fa769963800000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff8597166004840152604060248401526044830190610bf6565b038183305af190816110f5575b5061109757610f9a610bc7565b907f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000610fe684610e3b565b16036110915781519160207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc938481016004840152820193828286019503011261108d5760248101519067ffffffffffffffff821161108957018260438201121561108d5760248101519061105a82610b0d565b936110686040519586610ad2565b828552604483830101116110895790806044602093018386015e8301015290565b8280fd5b5080fd5b50610e73565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6578706563746564207375636365737300000000000000000000000000006044820152fd5b90915067ffffffffffffffff8111610a72576040525f905f610f8d56fea26469706673582212209e2cfcb55a0c31a5dfbf72dd57e3134ef0b0c119da7995a88deafbdccc938ea064736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x9A JUMPI PUSH1 0x1F PUSH2 0x11FB CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x9E JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x9A JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND DUP3 SUB PUSH2 0x9A JUMPI PUSH1 0x20 ADD MLOAD SWAP2 DUP3 AND DUP3 SUB PUSH2 0x9A JUMPI PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x1148 SWAP1 DUP2 PUSH2 0xB3 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x4B1 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x302 ADD MSTORE DUP2 DUP2 PUSH2 0x735 ADD MSTORE DUP2 DUP2 PUSH2 0x8E4 ADD MSTORE PUSH2 0xCD7 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x48406A54 EQ PUSH2 0x1A7 JUMPI PUSH4 0xA7699638 EQ PUSH2 0x2F JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1A3 JUMPI PUSH1 0x40 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1A3 JUMPI PUSH2 0x66 PUSH2 0xAAF JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1A3 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x93 DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP3 PUSH2 0xA1 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0x1A3 JUMPI PUSH0 SWAP5 DUP6 PUSH1 0x20 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL PUSH2 0xD4 PUSH2 0xBC7 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x129 JUMPI SWAP1 PUSH2 0xEA DUP2 PUSH2 0x125 SWAP4 CALLER PUSH2 0xE82 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0xBF6 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x175 DUP4 PUSH2 0xE3B JUMP JUMPDEST AND SUB PUSH2 0xE73 JUMPI PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1A3 JUMPI PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1A3 JUMPI PUSH2 0x1DE PUSH2 0xAAF JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x1A3 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x20B DUP3 PUSH2 0xAF5 JUMP JUMPDEST SWAP2 PUSH2 0x219 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x1A3 JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xA9F JUMPI POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND SWAP2 DUP3 PUSH1 0x44 CALLDATALOAD SUB PUSH2 0x1A3 JUMPI PUSH2 0x270 PUSH1 0x44 CALLDATALOAD DUP4 DUP7 PUSH2 0xC1B JUMP JUMPDEST SWAP3 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF71088800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP5 DUP6 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP3 ADD MSTORE PUSH0 PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 MSTORE PUSH1 0xE0 DUP2 ADD SWAP1 DUP1 DUP3 LT DUP4 DUP4 GT OR PUSH2 0xA72 JUMPI PUSH2 0x327 SWAP2 PUSH1 0x40 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP2 DUP6 ADD SWAP5 SUB SLT PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x1A3 JUMPI ADD SWAP2 DUP1 PUSH1 0x3F DUP5 ADD SLT ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x362 DUP2 PUSH2 0xAF5 JUMP JUMPDEST SWAP4 PUSH2 0x370 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xAD2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x40 PUSH1 0x20 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1A3 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xA62 JUMPI POP POP POP PUSH2 0x3A0 DUP4 MLOAD PUSH2 0xB29 JUMP JUMPDEST SWAP5 PUSH0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x425 JUMPI PUSH2 0x3BF PUSH2 0x3B9 DUP3 DUP7 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xD21 JUMP JUMPDEST SWAP1 PUSH2 0x3CD PUSH2 0x3B9 DUP3 DUP9 PUSH2 0xB5A JUMP JUMPDEST SWAP2 PUSH0 DUP4 DUP3 SUB SWAP4 SLT DUP2 DUP5 SLT DUP2 AND SWAP2 DUP5 SGT SWAP1 ISZERO AND OR PUSH2 0x3F8 JUMPI PUSH1 0x1 SWAP2 PUSH2 0x3F1 DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD PUSH2 0x3A3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 POP SWAP2 SWAP3 PUSH2 0x434 DUP5 MLOAD PUSH2 0xB29 JUMP JUMPDEST SWAP3 PUSH0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x462 JUMPI PUSH1 0x1 SWAP1 PUSH2 0x451 PUSH1 0x44 CALLDATALOAD DUP10 DUP4 DUP9 PUSH2 0xD76 JUMP JUMPDEST PUSH2 0x45B DUP3 DUP9 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD PUSH2 0x437 JUMP JUMPDEST POP SWAP2 SWAP1 SWAP5 SWAP4 PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0xA57 JUMPI PUSH0 SWAP5 PUSH2 0x9AD JUMPI JUMPDEST POP POP SWAP5 SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 GT PUSH2 0x3F8 JUMPI DUP4 LT ISZERO PUSH2 0x92F JUMPI POP PUSH0 SWAP2 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x595 JUMPI PUSH0 PUSH2 0x556 DUP3 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD SGT DUP1 PUSH2 0x582 JUMPI JUMPDEST PUSH2 0x56B JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x542 JUMP JUMPDEST PUSH2 0x57A SWAP2 SWAP9 POP DUP1 SWAP5 POP DUP7 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP7 DUP4 PUSH2 0x563 JUMP JUMPDEST POP DUP9 PUSH2 0x58E DUP3 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD SLT PUSH2 0x55E JUMP JUMPDEST POP SWAP7 POP SWAP2 SWAP5 SWAP1 SWAP3 PUSH0 SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 SWAP8 PUSH0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x615 JUMPI PUSH0 PUSH2 0x5D6 DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD SLT DUP1 PUSH2 0x602 JUMPI JUMPDEST PUSH2 0x5EB JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x5C2 JUMP JUMPDEST PUSH2 0x5FA SWAP2 SWAP10 POP DUP1 SWAP4 POP DUP8 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP8 DUP3 PUSH2 0x5E3 JUMP JUMPDEST POP DUP10 PUSH2 0x60E DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD SGT PUSH2 0x5DE JUMP JUMPDEST POP SWAP3 SWAP7 SWAP8 POP SWAP4 SWAP3 DUP2 SWAP8 PUSH2 0x628 DUP2 DUP9 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0x63C PUSH2 0x636 DUP6 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xB9B JUMP JUMPDEST SGT ISZERO PUSH2 0x7DF JUMPI PUSH2 0x75A DUP7 PUSH2 0x71E DUP11 PUSH2 0x710 PUSH2 0x68E PUSH2 0x688 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x680 DUP13 DUP3 PUSH2 0x678 DUP6 DUP13 PUSH2 0xB5A JUMP JUMPDEST MLOAD AND SWAP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD AND SWAP5 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xE06 JUMP JUMPDEST SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 PUSH32 0x3EBC54E500000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x44 CALLDATALOAD SWAP3 DUP14 PUSH1 0x24 DUP8 ADD SWAP4 SWAP1 PUSH1 0xE0 SWAP6 SWAP3 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP6 DUP2 DUP1 SWAP5 AND DUP9 MSTORE AND PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0xAD2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST PUSH1 0x20 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0x787 DUP4 DUP3 PUSH2 0x780 PUSH2 0x78D SWAP7 PUSH1 0x20 DUP16 SWAP8 ADD MLOAD SWAP7 PUSH2 0xB5A JUMP JUMPDEST MSTORE DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0xD21 JUMP JUMPDEST SWAP2 PUSH2 0x798 DUP2 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH0 DUP5 DUP3 ADD SWAP5 DUP6 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x3F8 JUMPI PUSH1 0x1 SWAP3 PUSH2 0x7BC DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0x7D5 PUSH2 0x7CE PUSH1 0x44 CALLDATALOAD DUP11 DUP5 DUP10 PUSH2 0xD76 JUMP JUMPDEST SWAP2 DUP9 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD SWAP2 SWAP1 SWAP6 PUSH2 0x4E8 JUMP JUMPDEST SWAP2 DUP1 PUSH2 0x7EB DUP5 DUP9 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP7 PUSH2 0x80E DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH2 0x830 SWAP1 DUP13 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0x83A SWAP1 PUSH2 0xB9B JUMP JUMPDEST PUSH2 0x843 SWAP1 PUSH2 0xE06 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x175D440800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP4 DUP3 AND PUSH1 0x44 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP3 AND PUSH1 0x64 DUP6 ADD MSTORE PUSH1 0x84 DUP5 ADD MSTORE SWAP1 CALLDATALOAD AND PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xC4 DUP3 ADD MSTORE PUSH0 PUSH1 0xE4 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE PUSH2 0x8C9 PUSH2 0x104 DUP3 PUSH2 0xAD2 JUMP JUMPDEST PUSH2 0x909 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST DUP1 DUP1 MLOAD DUP2 ADD SUB PUSH1 0x20 SGT PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0x787 DUP4 DUP3 PUSH2 0x780 PUSH2 0x78D SWAP7 PUSH1 0x20 DUP16 SWAP8 ADD MLOAD SWAP7 PUSH2 0xB5A JUMP JUMPDEST PUSH2 0x94F DUP2 PUSH2 0x949 PUSH2 0x944 PUSH2 0x636 DUP12 SWAP6 DUP12 PUSH2 0xB5A JUMP JUMPDEST PUSH2 0xE06 JUMP JUMPDEST SWAP3 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x3F8 JUMPI DUP2 ISZERO PUSH2 0x980 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x40 MLOAD SWAP2 DIV PUSH1 0x1 SHR DUP2 MSTORE RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP4 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x9C0 DUP2 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0x1A3 JUMPI DUP1 MLOAD SWAP2 DUP3 GT PUSH2 0x1A3 JUMPI ADD SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP2 MLOAD SWAP1 PUSH2 0x9EF DUP3 PUSH2 0xAF5 JUMP JUMPDEST SWAP3 PUSH2 0x9FD PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP4 PUSH1 0x5 SHL DUP3 ADD ADD SWAP2 DUP3 GT PUSH2 0x1A3 JUMPI PUSH1 0x20 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0xA2A JUMPI POP POP POP SWAP2 DUP7 DUP1 PUSH2 0x4E1 JUMP JUMPDEST DUP3 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1A3 JUMPI DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0xA18 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x38C JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x236 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1A3 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xA72 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0xB33 DUP3 PUSH2 0xAF5 JUMP JUMPDEST PUSH2 0xB40 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0xB50 DUP3 SWAP5 PUSH2 0xAF5 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0xB6E JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x3F8 JUMPI PUSH0 SUB SWAP1 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0xBF1 JUMPI RETURNDATASIZE SWAP1 PUSH2 0xBD8 DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP2 PUSH2 0xBE6 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP1 SWAP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 SWAP4 PUSH32 0xDA001F7D00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE DUP3 PUSH1 0xA4 DUP6 ADD SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x80 PUSH1 0x44 DUP6 ADD MSTORE DUP7 MLOAD DUP1 SWAP2 MSTORE DUP5 PUSH1 0xC4 DUP6 ADD SWAP8 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xD0D JUMPI POP POP POP DUP4 PUSH2 0xCFC SWAP5 SWAP6 SWAP7 DUP4 PUSH2 0xCD5 SWAP4 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH0 DUP6 DUP3 SUB SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP4 ADD PUSH1 0x84 DUP9 ADD MSTORE MSTORE DUP1 DUP6 MSTORE ADD DUP4 PUSH2 0xAD2 JUMP JUMPDEST PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST DUP2 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x1A3 JUMPI ADD MLOAD SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP10 MSTORE SWAP8 DUP7 ADD SWAP8 SWAP2 DUP7 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xC81 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xD4B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0xDB1 DUP4 DUP3 MLOAD SWAP3 PUSH1 0x1F NOT PUSH2 0xDA5 PUSH2 0xD8F DUP7 PUSH2 0xAF5 JUMP JUMPDEST SWAP6 PUSH2 0xD9D PUSH1 0x40 MLOAD SWAP8 DUP9 PUSH2 0xAD2 JUMP JUMPDEST DUP1 DUP8 MSTORE PUSH2 0xAF5 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP4 DUP5 ISZERO PUSH2 0xDFD JUMPI PUSH2 0xDD9 SWAP4 PUSH2 0xDD3 PUSH0 DUP8 SGT SWAP7 DUP8 PUSH0 EQ PUSH2 0xDEE JUMPI SWAP2 JUMPDEST DUP5 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0xC1B JUMP JUMPDEST SWAP1 ISZERO PUSH2 0xDE2 JUMPI SWAP1 JUMP JUMPDEST PUSH2 0xDEB SWAP1 PUSH2 0xB9B JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0xDF7 SWAP1 PUSH2 0xB9B JUMP JUMPDEST SWAP2 PUSH2 0xDCD JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0xE10 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP2 MLOAD LT PUSH2 0xE4B JUMPI PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xE4B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0xEBF JUMPI POP DUP1 MLOAD ISZERO PUSH2 0xE97 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0xF12 JUMPI JUMPDEST PUSH2 0xED0 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0xEC8 JUMP JUMPDEST SWAP1 ADDRESS EXTCODESIZE ISZERO PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0xF80 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA769963800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SWAP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0xBF6 JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL SWAP1 DUP2 PUSH2 0x10F5 JUMPI JUMPDEST POP PUSH2 0x1097 JUMPI PUSH2 0xF9A PUSH2 0xBC7 JUMP JUMPDEST SWAP1 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0xFE6 DUP5 PUSH2 0xE3B JUMP JUMPDEST AND SUB PUSH2 0x1091 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC SWAP4 DUP5 DUP2 ADD PUSH1 0x4 DUP5 ADD MSTORE DUP3 ADD SWAP4 DUP3 DUP3 DUP7 ADD SWAP6 SUB ADD SLT PUSH2 0x108D JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1089 JUMPI ADD DUP3 PUSH1 0x43 DUP3 ADD SLT ISZERO PUSH2 0x108D JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH2 0x105A DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP4 PUSH2 0x1068 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP6 MSTORE PUSH1 0x44 DUP4 DUP4 ADD ADD GT PUSH2 0x1089 JUMPI SWAP1 DUP1 PUSH1 0x44 PUSH1 0x20 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP PUSH2 0xE73 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420737563636573730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP1 PUSH0 PUSH2 0xF8D JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 0x2C 0xFC 0xB5 GAS 0xC BALANCE 0xA5 0xDF 0xBF PUSH19 0xDD57E3134EF0B0C119DA7995A88DEAFBDCCC93 DUP15 LOG0 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"537:8700:84:-:0;;;;;;;;;;;;;-1:-1:-1;;537:8700:84;;;;-1:-1:-1;;;;;537:8700:84;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;537:8700:84;;;;;;;;;;;;;;;;;;779:14;;803:16;;537:8700;;;;;;;;779:14;537:8700;;;;;803:16;537:8700;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;537:8700:84;;;;;;-1:-1:-1;537:8700:84;;;;;-1:-1:-1;537:8700:84"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":2735,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_address_contract_IERC20_contract_IERC20_uint256_address_stringliteral_c5d2":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_bytes":{"entryPoint":3062,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_and_zero_memory_array_array_int256_dyn":{"entryPoint":2857,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":2805,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":2829,"id":null,"parameterSlots":1,"returnSlots":1},"extract_returndata":{"entryPoint":3015,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":2770,"id":null,"parameterSlots":2,"returnSlots":0},"fun_bubbleUpRevert":{"entryPoint":3699,"id":4940,"parameterSlots":1,"returnSlots":0},"fun_callAndRevert":{"entryPoint":3867,"id":18554,"parameterSlots":2,"returnSlots":1},"fun_parseSelector":{"entryPoint":3643,"id":4922,"parameterSlots":1,"returnSlots":1},"fun_queryAddLiquidityUnbalanced":{"entryPoint":3099,"id":21401,"parameterSlots":3,"returnSlots":1},"fun_queryAddLiquidityUnbalancedForTokenDeltas":{"entryPoint":3446,"id":21598,"parameterSlots":4,"returnSlots":1},"fun_toInt256":{"entryPoint":3361,"id":16063,"parameterSlots":1,"returnSlots":1},"fun_toUint256":{"entryPoint":3590,"id":15227,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":3714,"id":11265,"parameterSlots":3,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":2906,"id":null,"parameterSlots":2,"returnSlots":1},"negate_int256":{"entryPoint":2971,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"21207":[{"length":32,"start":1201}],"21210":[{"length":32,"start":770},{"length":32,"start":1845},{"length":32,"start":2276},{"length":32,"start":3287}]},"linkReferences":{},"object":"60806040526004361015610011575f80fd5b5f3560e01c806348406a54146101a75763a76996381461002f575f80fd5b346101a35760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a357610066610aaf565b6024359067ffffffffffffffff82116101a357366023830112156101a35781600401359061009382610b0d565b926100a16040519485610ad2565b828452602084019036602485830101116101a3575f94856020868297602484960187378301015251925af16100d4610bc7565b90801561012957906100ea816101259333610e82565b506040519182917f5ab64fb8000000000000000000000000000000000000000000000000000000008352602060048401526024830190610bf6565b0390fd5b507f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000061017583610e3b565b1603610e73577f28f95541000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b346101a35760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a3576101de610aaf565b67ffffffffffffffff6024358181116101a357366023820112156101a35780600401359061020b82610af5565b916102196040519384610ad2565b8083526024602084019160051b830101913683116101a357602401905b828210610a9f5750505073ffffffffffffffffffffffffffffffffffffffff604435169182604435036101a3576102706044358386610c1b565b92604051907f0f71088800000000000000000000000000000000000000000000000000000000602083015273ffffffffffffffffffffffffffffffffffffffff86169485602484015260448301526064820152608060848201525f60a482015260a4815260e081019080821083831117610a72576103279160405273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b9081518201916020818185019403126101a3576020810151908282116101a357019180603f840112156101a357602083015161036281610af5565b936103706040519586610ad2565b8185526040602086019260051b8201019283116101a357604001905b828210610a62575050506103a08351610b29565b945f5b8451811015610425576103bf6103b98286610b5a565b51610d21565b906103cd6103b98288610b5a565b915f83820393128184128116918413901516176103f8576001916103f1828a610b5a565b52016103a3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50915091926104348451610b29565b925f5b855181101561046257600190610451604435898388610d76565b61045b8288610b5a565b5201610437565b50919094935f95604051907fca4f280300000000000000000000000000000000000000000000000000000000825260048201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa938415610a57575f946109ad575b505094905f915b85517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116103f85783101561092f57505f917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965f5b8651811015610595575f6105568289610b5a565b511380610582575b61056b575b600101610542565b61057a91985080945086610b5a565b519683610563565b508861058e8289610b5a565b511261055e565b509650919490925f907f8000000000000000000000000000000000000000000000000000000000000000975f5b8751811015610615575f6105d6828a610b5a565b511280610602575b6105eb575b6001016105c2565b6105fa91995080935087610b5a565b5197826105e3565b508961060e828a610b5a565b51136105de565b5092969750939281976106288188610b5a565b5161063c610636858a610b5a565b51610b9b565b13156107df5761075a8661071e8a61071061068e6106888773ffffffffffffffffffffffffffffffffffffffff6106808c82610678858c610b5a565b511699610b5a565b511694610b5a565b51610e06565b936040519485937f3ebc54e5000000000000000000000000000000000000000000000000000000006020860152604435928d60248701939060e095929373ffffffffffffffffffffffffffffffffffffffff8095818094168852166020870152166040850152606084015216608082015260c060a08201525f60c08201520190565b03601f198101835282610ad2565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b6020818051810103126101a3575f610787838261078061078d9660208f97015196610b5a565b528a610b5a565b52610d21565b916107988189610b5a565b515f84820194851291129080158216911516176103f8576001926107bc828a610b5a565b526107d56107ce6044358a8489610d76565b9188610b5a565b52019190956104e8565b91806107eb8488610b5a565b5173ffffffffffffffffffffffffffffffffffffffff16908661080e828a610b5a565b5173ffffffffffffffffffffffffffffffffffffffff1691610830908c610b5a565b5161083a90610b9b565b61084390610e06565b6040517f175d440800000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff92831660248201529382166044808601919091529282166064850152608484015290351660a482015260c060c48201525f60e48083019190915281526108c961010482610ad2565b6109099073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b8080518101036020136101a3575f610787838261078061078d9660208f97015196610b5a565b61094f816109496109446106368b958b610b5a565b610e06565b92610b5a565b5190670de0b6b3a7640000908181029181830414901517156103f857811561098057602091604051910460011c8152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b909193503d805f843e6109c08184610ad2565b8201916020818403126101a35780519182116101a357019080601f830112156101a3578151906109ef82610af5565b926109fd6040519485610ad2565b82845260208085019360051b8201019182116101a357602001915b818310610a2a575050509186806104e1565b825173ffffffffffffffffffffffffffffffffffffffff811681036101a357815260209283019201610a18565b6040513d5f823e3d90fd5b815181526020918201910161038c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8135815260209182019101610236565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101a357565b90601f601f19910116810190811067ffffffffffffffff821117610a7257604052565b67ffffffffffffffff8111610a725760051b60200190565b67ffffffffffffffff8111610a7257601f01601f191660200190565b90610b3382610af5565b610b406040519182610ad2565b828152601f19610b508294610af5565b0190602036910137565b8051821015610b6e5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f800000000000000000000000000000000000000000000000000000000000000081146103f8575f0390565b3d15610bf1573d90610bd882610b0d565b91610be66040519384610ad2565b82523d5f602084013e565b606090565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b90929173ffffffffffffffffffffffffffffffffffffffff604051916020937fda001f7d00000000000000000000000000000000000000000000000000000000858501528260a48501911660248501526080604485015286518091528460c485019701905f5b818110610d0d5750505083610cfc94959683610cd5931660648601525f858203917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83016084880152528085520183610ad2565b7f000000000000000000000000000000000000000000000000000000000000000016610f1b565b81818051810103126101a357015190565b825189529786019791860191600101610c81565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610d4b5790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b929091610db183825192601f19610da5610d8f86610af5565b95610d9d6040519788610ad2565b808752610af5565b01366020860137610b5a565b51938415610dfd57610dd993610dd35f871396875f14610dee57915b84610b5a565b52610c1b565b9015610de25790565b610deb90610b9b565b90565b610df790610b9b565b91610dcd565b50505050505f90565b5f8112610e105790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6004815110610e4b576020015190565b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b805115610e4b57805190602001fd5b90610ebf5750805115610e9757602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580610f12575b610ed0575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15610ec8565b90303b156101a3575f610f8091604051809381927fa769963800000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff8597166004840152604060248401526044830190610bf6565b038183305af190816110f5575b5061109757610f9a610bc7565b907f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000610fe684610e3b565b16036110915781519160207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc938481016004840152820193828286019503011261108d5760248101519067ffffffffffffffff821161108957018260438201121561108d5760248101519061105a82610b0d565b936110686040519586610ad2565b828552604483830101116110895790806044602093018386015e8301015290565b8280fd5b5080fd5b50610e73565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6578706563746564207375636365737300000000000000000000000000006044820152fd5b90915067ffffffffffffffff8111610a72576040525f905f610f8d56fea26469706673582212209e2cfcb55a0c31a5dfbf72dd57e3134ef0b0c119da7995a88deafbdccc938ea064736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x48406A54 EQ PUSH2 0x1A7 JUMPI PUSH4 0xA7699638 EQ PUSH2 0x2F JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1A3 JUMPI PUSH1 0x40 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1A3 JUMPI PUSH2 0x66 PUSH2 0xAAF JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1A3 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x93 DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP3 PUSH2 0xA1 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0x1A3 JUMPI PUSH0 SWAP5 DUP6 PUSH1 0x20 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL PUSH2 0xD4 PUSH2 0xBC7 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x129 JUMPI SWAP1 PUSH2 0xEA DUP2 PUSH2 0x125 SWAP4 CALLER PUSH2 0xE82 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0xBF6 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x175 DUP4 PUSH2 0xE3B JUMP JUMPDEST AND SUB PUSH2 0xE73 JUMPI PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1A3 JUMPI PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1A3 JUMPI PUSH2 0x1DE PUSH2 0xAAF JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x1A3 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x20B DUP3 PUSH2 0xAF5 JUMP JUMPDEST SWAP2 PUSH2 0x219 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x1A3 JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xA9F JUMPI POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD AND SWAP2 DUP3 PUSH1 0x44 CALLDATALOAD SUB PUSH2 0x1A3 JUMPI PUSH2 0x270 PUSH1 0x44 CALLDATALOAD DUP4 DUP7 PUSH2 0xC1B JUMP JUMPDEST SWAP3 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xF71088800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP5 DUP6 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP3 ADD MSTORE PUSH0 PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 MSTORE PUSH1 0xE0 DUP2 ADD SWAP1 DUP1 DUP3 LT DUP4 DUP4 GT OR PUSH2 0xA72 JUMPI PUSH2 0x327 SWAP2 PUSH1 0x40 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP2 DUP6 ADD SWAP5 SUB SLT PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP2 ADD MLOAD SWAP1 DUP3 DUP3 GT PUSH2 0x1A3 JUMPI ADD SWAP2 DUP1 PUSH1 0x3F DUP5 ADD SLT ISZERO PUSH2 0x1A3 JUMPI PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x362 DUP2 PUSH2 0xAF5 JUMP JUMPDEST SWAP4 PUSH2 0x370 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xAD2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x40 PUSH1 0x20 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1A3 JUMPI PUSH1 0x40 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xA62 JUMPI POP POP POP PUSH2 0x3A0 DUP4 MLOAD PUSH2 0xB29 JUMP JUMPDEST SWAP5 PUSH0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x425 JUMPI PUSH2 0x3BF PUSH2 0x3B9 DUP3 DUP7 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xD21 JUMP JUMPDEST SWAP1 PUSH2 0x3CD PUSH2 0x3B9 DUP3 DUP9 PUSH2 0xB5A JUMP JUMPDEST SWAP2 PUSH0 DUP4 DUP3 SUB SWAP4 SLT DUP2 DUP5 SLT DUP2 AND SWAP2 DUP5 SGT SWAP1 ISZERO AND OR PUSH2 0x3F8 JUMPI PUSH1 0x1 SWAP2 PUSH2 0x3F1 DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD PUSH2 0x3A3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 POP SWAP2 SWAP3 PUSH2 0x434 DUP5 MLOAD PUSH2 0xB29 JUMP JUMPDEST SWAP3 PUSH0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x462 JUMPI PUSH1 0x1 SWAP1 PUSH2 0x451 PUSH1 0x44 CALLDATALOAD DUP10 DUP4 DUP9 PUSH2 0xD76 JUMP JUMPDEST PUSH2 0x45B DUP3 DUP9 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD PUSH2 0x437 JUMP JUMPDEST POP SWAP2 SWAP1 SWAP5 SWAP4 PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0xA57 JUMPI PUSH0 SWAP5 PUSH2 0x9AD JUMPI JUMPDEST POP POP SWAP5 SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 GT PUSH2 0x3F8 JUMPI DUP4 LT ISZERO PUSH2 0x92F JUMPI POP PUSH0 SWAP2 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x595 JUMPI PUSH0 PUSH2 0x556 DUP3 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD SGT DUP1 PUSH2 0x582 JUMPI JUMPDEST PUSH2 0x56B JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x542 JUMP JUMPDEST PUSH2 0x57A SWAP2 SWAP9 POP DUP1 SWAP5 POP DUP7 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP7 DUP4 PUSH2 0x563 JUMP JUMPDEST POP DUP9 PUSH2 0x58E DUP3 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD SLT PUSH2 0x55E JUMP JUMPDEST POP SWAP7 POP SWAP2 SWAP5 SWAP1 SWAP3 PUSH0 SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 SWAP8 PUSH0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x615 JUMPI PUSH0 PUSH2 0x5D6 DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD SLT DUP1 PUSH2 0x602 JUMPI JUMPDEST PUSH2 0x5EB JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x5C2 JUMP JUMPDEST PUSH2 0x5FA SWAP2 SWAP10 POP DUP1 SWAP4 POP DUP8 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP8 DUP3 PUSH2 0x5E3 JUMP JUMPDEST POP DUP10 PUSH2 0x60E DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD SGT PUSH2 0x5DE JUMP JUMPDEST POP SWAP3 SWAP7 SWAP8 POP SWAP4 SWAP3 DUP2 SWAP8 PUSH2 0x628 DUP2 DUP9 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0x63C PUSH2 0x636 DUP6 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xB9B JUMP JUMPDEST SGT ISZERO PUSH2 0x7DF JUMPI PUSH2 0x75A DUP7 PUSH2 0x71E DUP11 PUSH2 0x710 PUSH2 0x68E PUSH2 0x688 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x680 DUP13 DUP3 PUSH2 0x678 DUP6 DUP13 PUSH2 0xB5A JUMP JUMPDEST MLOAD AND SWAP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD AND SWAP5 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0xE06 JUMP JUMPDEST SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 PUSH32 0x3EBC54E500000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x44 CALLDATALOAD SWAP3 DUP14 PUSH1 0x24 DUP8 ADD SWAP4 SWAP1 PUSH1 0xE0 SWAP6 SWAP3 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP6 DUP2 DUP1 SWAP5 AND DUP9 MSTORE AND PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0xAD2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST PUSH1 0x20 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0x787 DUP4 DUP3 PUSH2 0x780 PUSH2 0x78D SWAP7 PUSH1 0x20 DUP16 SWAP8 ADD MLOAD SWAP7 PUSH2 0xB5A JUMP JUMPDEST MSTORE DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0xD21 JUMP JUMPDEST SWAP2 PUSH2 0x798 DUP2 DUP10 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH0 DUP5 DUP3 ADD SWAP5 DUP6 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x3F8 JUMPI PUSH1 0x1 SWAP3 PUSH2 0x7BC DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0x7D5 PUSH2 0x7CE PUSH1 0x44 CALLDATALOAD DUP11 DUP5 DUP10 PUSH2 0xD76 JUMP JUMPDEST SWAP2 DUP9 PUSH2 0xB5A JUMP JUMPDEST MSTORE ADD SWAP2 SWAP1 SWAP6 PUSH2 0x4E8 JUMP JUMPDEST SWAP2 DUP1 PUSH2 0x7EB DUP5 DUP9 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP7 PUSH2 0x80E DUP3 DUP11 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH2 0x830 SWAP1 DUP13 PUSH2 0xB5A JUMP JUMPDEST MLOAD PUSH2 0x83A SWAP1 PUSH2 0xB9B JUMP JUMPDEST PUSH2 0x843 SWAP1 PUSH2 0xE06 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x175D440800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP4 DUP3 AND PUSH1 0x44 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP3 AND PUSH1 0x64 DUP6 ADD MSTORE PUSH1 0x84 DUP5 ADD MSTORE SWAP1 CALLDATALOAD AND PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xC4 DUP3 ADD MSTORE PUSH0 PUSH1 0xE4 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MSTORE PUSH2 0x8C9 PUSH2 0x104 DUP3 PUSH2 0xAD2 JUMP JUMPDEST PUSH2 0x909 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST DUP1 DUP1 MLOAD DUP2 ADD SUB PUSH1 0x20 SGT PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0x787 DUP4 DUP3 PUSH2 0x780 PUSH2 0x78D SWAP7 PUSH1 0x20 DUP16 SWAP8 ADD MLOAD SWAP7 PUSH2 0xB5A JUMP JUMPDEST PUSH2 0x94F DUP2 PUSH2 0x949 PUSH2 0x944 PUSH2 0x636 DUP12 SWAP6 DUP12 PUSH2 0xB5A JUMP JUMPDEST PUSH2 0xE06 JUMP JUMPDEST SWAP3 PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x3F8 JUMPI DUP2 ISZERO PUSH2 0x980 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x40 MLOAD SWAP2 DIV PUSH1 0x1 SHR DUP2 MSTORE RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP4 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x9C0 DUP2 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0x1A3 JUMPI DUP1 MLOAD SWAP2 DUP3 GT PUSH2 0x1A3 JUMPI ADD SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1A3 JUMPI DUP2 MLOAD SWAP1 PUSH2 0x9EF DUP3 PUSH2 0xAF5 JUMP JUMPDEST SWAP3 PUSH2 0x9FD PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP4 PUSH1 0x5 SHL DUP3 ADD ADD SWAP2 DUP3 GT PUSH2 0x1A3 JUMPI PUSH1 0x20 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0xA2A JUMPI POP POP POP SWAP2 DUP7 DUP1 PUSH2 0x4E1 JUMP JUMPDEST DUP3 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1A3 JUMPI DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0xA18 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x38C JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x236 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1A3 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xA72 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0xB33 DUP3 PUSH2 0xAF5 JUMP JUMPDEST PUSH2 0xB40 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0xB50 DUP3 SWAP5 PUSH2 0xAF5 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0xB6E JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x3F8 JUMPI PUSH0 SUB SWAP1 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0xBF1 JUMPI RETURNDATASIZE SWAP1 PUSH2 0xBD8 DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP2 PUSH2 0xBE6 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0xAD2 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP1 SWAP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 SWAP4 PUSH32 0xDA001F7D00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE DUP3 PUSH1 0xA4 DUP6 ADD SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x80 PUSH1 0x44 DUP6 ADD MSTORE DUP7 MLOAD DUP1 SWAP2 MSTORE DUP5 PUSH1 0xC4 DUP6 ADD SWAP8 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xD0D JUMPI POP POP POP DUP4 PUSH2 0xCFC SWAP5 SWAP6 SWAP7 DUP4 PUSH2 0xCD5 SWAP4 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH0 DUP6 DUP3 SUB SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP4 ADD PUSH1 0x84 DUP9 ADD MSTORE MSTORE DUP1 DUP6 MSTORE ADD DUP4 PUSH2 0xAD2 JUMP JUMPDEST PUSH32 0x0 AND PUSH2 0xF1B JUMP JUMPDEST DUP2 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x1A3 JUMPI ADD MLOAD SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP10 MSTORE SWAP8 DUP7 ADD SWAP8 SWAP2 DUP7 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xC81 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xD4B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0xDB1 DUP4 DUP3 MLOAD SWAP3 PUSH1 0x1F NOT PUSH2 0xDA5 PUSH2 0xD8F DUP7 PUSH2 0xAF5 JUMP JUMPDEST SWAP6 PUSH2 0xD9D PUSH1 0x40 MLOAD SWAP8 DUP9 PUSH2 0xAD2 JUMP JUMPDEST DUP1 DUP8 MSTORE PUSH2 0xAF5 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY PUSH2 0xB5A JUMP JUMPDEST MLOAD SWAP4 DUP5 ISZERO PUSH2 0xDFD JUMPI PUSH2 0xDD9 SWAP4 PUSH2 0xDD3 PUSH0 DUP8 SGT SWAP7 DUP8 PUSH0 EQ PUSH2 0xDEE JUMPI SWAP2 JUMPDEST DUP5 PUSH2 0xB5A JUMP JUMPDEST MSTORE PUSH2 0xC1B JUMP JUMPDEST SWAP1 ISZERO PUSH2 0xDE2 JUMPI SWAP1 JUMP JUMPDEST PUSH2 0xDEB SWAP1 PUSH2 0xB9B JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0xDF7 SWAP1 PUSH2 0xB9B JUMP JUMPDEST SWAP2 PUSH2 0xDCD JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0xE10 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP2 MLOAD LT PUSH2 0xE4B JUMPI PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xE4B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0xEBF JUMPI POP DUP1 MLOAD ISZERO PUSH2 0xE97 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0xF12 JUMPI JUMPDEST PUSH2 0xED0 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0xEC8 JUMP JUMPDEST SWAP1 ADDRESS EXTCODESIZE ISZERO PUSH2 0x1A3 JUMPI PUSH0 PUSH2 0xF80 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA769963800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SWAP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0xBF6 JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL SWAP1 DUP2 PUSH2 0x10F5 JUMPI JUMPDEST POP PUSH2 0x1097 JUMPI PUSH2 0xF9A PUSH2 0xBC7 JUMP JUMPDEST SWAP1 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0xFE6 DUP5 PUSH2 0xE3B JUMP JUMPDEST AND SUB PUSH2 0x1091 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC SWAP4 DUP5 DUP2 ADD PUSH1 0x4 DUP5 ADD MSTORE DUP3 ADD SWAP4 DUP3 DUP3 DUP7 ADD SWAP6 SUB ADD SLT PUSH2 0x108D JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1089 JUMPI ADD DUP3 PUSH1 0x43 DUP3 ADD SLT ISZERO PUSH2 0x108D JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH2 0x105A DUP3 PUSH2 0xB0D JUMP JUMPDEST SWAP4 PUSH2 0x1068 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xAD2 JUMP JUMPDEST DUP3 DUP6 MSTORE PUSH1 0x44 DUP4 DUP4 ADD ADD GT PUSH2 0x1089 JUMPI SWAP1 DUP1 PUSH1 0x44 PUSH1 0x20 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP PUSH2 0xE73 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420737563636573730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA72 JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP1 PUSH0 PUSH2 0xF8D JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 0x2C 0xFC 0xB5 GAS 0xC BALANCE 0xA5 0xDF 0xBF PUSH19 0xDD57E3134EF0B0C119DA7995A88DEAFBDCCC93 DUP15 LOG0 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"537:8700:84:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;811:19:74;;;;;;:::i;:::-;840:718;;;;;990:10;955:63;990:10;537:8700:84;990:10:74;;955:63;:::i;:::-;;537:8700:84;;1084:26:74;;;;;;537:8700:84;;1084:26:74;;537:8700:84;;;;;;:::i;:::-;1084:26:74;;;840:718;1276:33;1344:27;537:8700:84;1276:33:74;;;:::i;:::-;537:8700:84;1327:44:74;1540:6;1323:110;1398:20;537:8700:84;1398:20:74;537:8700:84;;1398:20:74;537:8700:84;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1265:58;537:8700;;1265:58;;;:::i;:::-;537:8700;;;3717:247;3765:49;537:8700;3717:247;;;537:8700;;;3717:247;;537:8700;3717:247;;537:8700;;;;;;;;;;;;;;;;;;;;3717:247;;537:8700;;;;;;;;;;;;;3643:339;537:8700;;;;3687:7;537:8700;3643:339;:::i;:::-;537:8700;;;3615:410;;;537:8700;3615:410;;;;537:8700;;;;;;3615:410;;537:8700;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1544:35;537:8700;;1544:35;:::i;:::-;1594:13;537:8700;1636:3;537:8700;;1609:25;;;;;1667:36;:25;;;;:::i;:::-;537:8700;1667:36;:::i;:::-;1706:17;:28;:17;;;;:::i;:28::-;537:8700;;;;;;;;;;;;;;;;;;;;;;1655:79;;;;;:::i;:::-;537:8700;;1594:13;;537:8700;;;;;;;;;;1609:25;;;;;;1890:35;537:8700;;1890:35;:::i;:::-;1940:13;537:8700;1982:3;537:8700;;1955:25;;;;;537:8700;;2016:67;537:8700;;2016:67;;;;:::i;:::-;2001:82;;;;:::i;:::-;537:8700;;1940:13;;1955:25;;;;;;537:8700;;;;6588:26;537:8700;6588:26;;537:8700;6588:26;;537:8700;;6588:6;537:8700;6588:6;537:8700;6588:6;537:8700;6588:26;;;;;;;537:8700;6588:26;;;1935:159;6630:13;;;;537:8700;6625:1710;6668:3;537:8700;;;;;;;;;;6645:21;;;;;6786:28;537:8700;8586:29;8599:16;8630:13;537:8700;8663:3;537:8700;;8645:16;;;;;537:8700;8686:8;;;;:::i;:::-;537:8700;8686:12;:30;;;8663:3;8682:110;;8663:3;537:8700;;8630:13;;8682:110;8742:8;;;;;;;;;:::i;:::-;537:8700;;8768:9;8682:110;;8686:30;8702:8;;;;;;:::i;:::-;537:8700;8702:14;8686:30;;8645:16;;;;;;;;537:8700;9013:29;9026:16;9057:13;537:8700;9090:3;537:8700;;9072:16;;;;;537:8700;9113:8;;;;:::i;:::-;537:8700;9113:12;:30;;;9090:3;9109:110;;9090:3;537:8700;;9057:13;;9109:110;9169:8;;;;;;;;;:::i;:::-;537:8700;;9195:9;9109:110;;9113:30;9129:8;;;;;;:::i;:::-;537:8700;9129:14;9113:30;;9072:16;;;;;;;;6828:52;6895:23;7009:32;;;;:::i;:::-;537:8700;7044:33;7045:32;;;;:::i;:::-;537:8700;7044:33;:::i;:::-;-1:-1:-1;7045:32:84;;;4287:397;7097:39;4361:305;7097:39;4361:305;7402:35;:23;7097:39;537:8700;7352:28;7154:40;7303:27;;;;;:::i;:::-;537:8700;;7352:28;;:::i;:::-;537:8700;;7402:23;;:::i;:::-;537:8700;7402:35;:::i;:::-;537:8700;;;4361:305;;;4409:44;537:8700;4361:305;;;537:8700;;4361:305;;537:8700;4361:305;;537:8700;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4361:305;;-1:-1:-1;;4361:305:84;;;;;;:::i;:::-;537:8700;3687:7;537:8700;4287:397;:::i;:::-;537:8700;;;;4259:466;;537:8700;;;;;8025:30;4259:466;;7984:27;8097:23;4259:466;537:8700;4259:466;;;537:8700;7005:922;7984:27;:::i;:::-;537:8700;8025:30;;:::i;:::-;537:8700;8097:23;:::i;:::-;8069:51;;;;;:::i;:::-;537:8700;;;;;;;;;;;;;;;;;;;;;;8069:51;;;;;:::i;:::-;537:8700;8134:190;8164:160;537:8700;;8164:160;;;;:::i;:::-;8134:190;;;:::i;:::-;537:8700;;6630:13;;;;;7005:922;7522:39;;7729:28;7522:39;7729:28;;:::i;:::-;537:8700;;;7779:27;;;;;;:::i;:::-;537:8700;;;7830:23;;;;;:::i;:::-;537:8700;7829:24;;;:::i;:::-;7828:38;;;:::i;:::-;537:8700;;5111:45;537:8700;5063:307;;;537:8700;;;;;5063:307;;537:8700;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;537:8700:84;;;;;;;;5063:307;;;537:8700;;5063:307;:::i;:::-;4989:399;;537:8700;3687:7;537:8700;4989:399;:::i;:::-;537:8700;;;4961:468;;537:8700;;-1:-1:-1;537:8700:84;;;8025:30;4961:468;;7984:27;8097:23;4961:468;537:8700;4961:468;;;537:8700;7005:922;7984:27;:::i;6645:21::-;2549:35;6645:21;2476:42;2477:28;2478:27;6645:21;;;2478:27;:::i;2477:28::-;2476:42;:::i;:::-;2549:35;;:::i;:::-;537:8700;465:4:38;;;;;;;;;;;;;;;;;537:8700:84;;;;;;;;;;;;;;;;;;;;;;;;;6588:26;;;;;;;537:8700;6588:26;;;;;;:::i;:::-;;;537:8700;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;6588:26;;;;;;;;537:8700;;;;;;;;;;;;;;;;;;;;6588:26;537:8700;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;537:8700:84;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;537:8700:84;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;537:8700:84;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;537:8700:84;;;;:::o;:::-;;;:::o;:::-;;-1:-1:-1;;537:8700:84;;;;;;;;;;;;;;;;;-1:-1:-1;537:8700:84;;;;;;;;;;;:::o;2820:599::-;;;;537:8700;;;3109:244;;;3157:44;3109:244;;;;537:8700;;;;;;3109:244;;;537:8700;;;;;;;;;;;;;;;;;;-1:-1:-1;537:8700:84;;;;;;;;;;3035:336;537:8700;;;;3109:244;537:8700;;;;;;-1:-1:-1;537:8700:84;;;;;;;;;;;;3109:244;;;;;;:::i;:::-;3079:7;537:8700;3035:336;:::i;:::-;537:8700;;;;3007:405;;537:8700;;;;3007:405;537:8700;2820:599;:::o;537:8700::-;;;;;;;;;;;;;;;;;34380:314:70;34573:16;34557:33;;34553:105;;34380:314;:::o;34553:105::-;34613:34;;;;537:8700:84;;34613:34:70;;5657:602:84;;;;5950:18;537:8700;;;;-1:-1:-1;;537:8700:84;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;5950:18;:::i;:::-;537:8700;5983:10;;;5979:49;;6141:64;6081:9;6038:70;537:8700;6081:9;;:26;;;;;;;;6038:70;;:::i;:::-;537:8700;6141:64;:::i;:::-;6224:28;;;;5657:602;:::o;6224:28::-;6245:7;;;:::i;:::-;5657:602;:::o;6081:26::-;6101:6;;;:::i;:::-;6081:26;;;5979:49;6009:8;;;;;537:8700;6009:8;:::o;17171:193:70:-;17258:1;17250:9;;17246:81;;17171:193;:::o;17246:81::-;17282:34;17258:1;17282:34;;537:8700:84;;17258:1:70;17282:34;1336:351:36;1463:1;537:8700:84;;1443:21:36;1439:82;;1530:151;;;1336:351;:::o;1439:82::-;1487:23;;;1463:1;1487:23;;1741:504;537:8700:84;;1881:21:36;:17;;2008:160;;;;;;4437:582:60;;4609:8;;-1:-1:-1;537:8700:84;;5690:21:60;:17;;5815:105;;;;;;5686:301;5957:19;5710:1;5957:19;;5710:1;5957:19;4605:408;537:8700:84;;4857:22:60;:49;;;4605:408;4853:119;;4985:17;;:::o;4853:119::-;537:8700:84;4933:24:60;;4878:1;4933:24;537:8700:84;4933:24:60;537:8700:84;;4878:1:60;4933:24;4857:49;4883:18;;;:23;4857:49;;303:324:74;;430:4;408:60;;;;;537:8700:84;;;;408:60:74;;;;537:8700:84;408:60:74;;537:8700:84;408:60:74;537:8700:84;;408:60:74;;;537:8700:84;;;;;;;;;;;:::i;:::-;408:60:74;430:4;;;408:60;;;;;;303:324;-1:-1:-1;404:217:74;;523:98;;:::i;:::-;720:36:36;787:15;537:8700:84;720:36:36;;;:::i;:::-;537:8700:84;770:32:36;766:185;;537:8700:84;;1013:179:36;1209:30;1013:179;;;;;408:60:74;1013:179:36;;;1209:30;;;;;;;537:8700:84;;;;;;;1209:30:36;;537:8700:84;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;1209:30:36;537:8700:84;;;;;;;;;;565:45:74;:::o;537:8700:84:-;;;;;;;;766:185:36;930:9;;:::i;404:217:74:-;537:8700:84;;;483:28:74;;;537:8700:84;408:60:74;483:28;;537:8700:84;;;;;;;;;;;483:28:74;408:60;537:8700:84;;;;;;;;;;408:60:74;;;;"},"methodIdentifiers":{"calculateAddLiquidityUnbalancedPriceImpact(address,uint256[],address)":"48406a54","callAndRevertHook(address,bytes)":"a7699638"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IRouter\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"calculateAddLiquidityUnbalancedPriceImpact\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"priceImpact\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callAndRevertHook\",\"outputs\":[],\"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.\"}],\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/PriceImpactHelper.sol\":\"PriceImpactHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":{\"keccak256\":\"0x8e8e4b32c57834bd468f893c08f87323dd3c18043690055fd0523318cf82f156\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9eccee85635070311d65d1f4335539bcb604aed550f24c136e31bb9db405e8af\",\"dweb:/ipfs/QmQwUaVJn2T2mLdp4ydG7jBXhtuwXeE5vfKyLEDdu18Lq8\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"contracts/CallAndRevert.sol\":{\"keccak256\":\"0xe0f09e833265592b398c7607db658e3541b800f66c9536ee129ae6863e4185f2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bc7dd31dd95f738debb5ca8c8b80e90384c1d8b72dc70e02dd7ae22e7c77f337\",\"dweb:/ipfs/QmNaJXyazNRD1fbqs6QJSwB3VWKu3ZjHqecMqKg57UeMuS\"]},\"contracts/PriceImpactHelper.sol\":{\"keccak256\":\"0x34a595cb82fce48cfc22cd1b900491ed4cdb07673bb902b7a35e0dc974f72230\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5c359ca8ce0db4171f093d983ebc264993b3a720590790a8f6859fbe3cb5fb15\",\"dweb:/ipfs/Qme8Tr71i5eosQWY4mSwvNFqnEuxd46ipRLSBq5zARwA1V\"]}},\"version\":1}"}},"contracts/ProtocolFeeHelper.sol":{"ProtocolFeeHelper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"InvalidPoolSetId","type":"error"},{"inputs":[],"name":"InvalidPoolSetManager","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"poolSetManager","type":"address"}],"name":"PoolSetManagerNotUnique","type":"error"},{"inputs":[],"name":"SenderIsNotPoolSetManager","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolRemovedFromSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"initialManager","type":"address"}],"name":"PoolSetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"PoolSetDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"PoolSetOwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPoolsToSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"destroyPoolSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getAllPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getManagerForPoolSet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextPoolSetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getPoolCountForSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolSetIdForCaller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"getPoolSetIdForManager","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isPoolInSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isValidPoolSetId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePoolsFromSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferPoolSetOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461011e57601f611b7838819003918201601f19168301916001600160401b0383118484101761012257808492604094855283398101031261011e5780516001600160a01b03918282169081830361011e576020015183811680910361011e57801561010b5760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100fc5760a0526001600255611a4190816101378239608051816112b4015260a05181818161025101528181610383015281816106c201528181610cd30152818161171101526117e10152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60406080815260049081361015610014575f80fd5b5f915f3560e01c8063182551da14611022578063255dae4114610fe257806325c427ed14610f9f5780632da55a1d14610ed75780633700f98714610e235780633e035f9b14610c4b57806362d5346214610c1a578063715018a614610b9557806379ba509714610b315780637c1ec460146109e6578063851c1bb31461099e5780638c60ebd0146108595780638da5cb5b1461082657806394fc4058146107a7578063a89b112814610737578063aaabadc51461066f578063abaa335614610596578063c482e82214610577578063ce998aba14610553578063e30c39781461051e578063e909c19b146104e0578063ebf3a8d014610349578063f167a1e614610308578063f2fde38b14610279578063fbfa77cf146102245763fd267f391461013c575f80fd5b82913461022057806003193601126102205761015661108a565b610167816101626114ca565b61165b565b73ffffffffffffffffffffffffffffffffffffffff6101846116ce565b1692833b1561021c576101ed9385928385518097819582947ffd267f390000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af190811561021357506102005750f35b610209906110ad565b6102105780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b5050346102755781600319360112610275576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b83346102105760206003193601126102105761029361108a565b61029b61159d565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5034610345576020600319360112610345578160209373ffffffffffffffffffffffffffffffffffffffff92358152600385522054169051908152f35b8280fd5b503461034557610358366111c4565b6103606113e2565b6103698261137d565b80519273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692875b8681106103b2578880f35b826103bd8284611248565b511688517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156104d6578d916104a9575b501561047f57600590898d525261041c828b8d206119b3565b15610451575090866001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b698c80a3016103a7565b878b91604493887f5a17aa8d0000000000000000000000000000000000000000000000000000000085525252fd5b508a82877f9e51bd5c00000000000000000000000000000000000000000000000000000000835252fd5b6104c99150823d84116104cf575b6104c181836110ee565b810190611365565b5f610403565b503d6104b7565b8c513d8f823e3d90fd5b5050346102755760206003193601126102755760209061051761050161108a565b6105096113e2565b61051281611447565b611508565b9051908152f35b50503461027557816003193601126102755760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50346103455782600319360112610345576020928291338252845220549051908152f35b5050346102755781600319360112610275576020906002549051908152f35b50903461066b578060031936011261066b576105b061108a565b6105bc816101626114ca565b73ffffffffffffffffffffffffffffffffffffffff6105d96116ce565b1692833b1561066b57610642935f928385518097819582947fabaa33560000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19081156106625750610656575080f35b61066091506110ad565b005b513d5f823e3d90fd5b5f80fd5b503461066b575f60031936011261066b5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561072d57926020935f936106fe575b505191168152f35b61071f919350843d8611610726575b61071781836110ee565b810190611339565b91846106f6565b503d61070d565b83513d5f823e3d90fd5b503461066b57602060031936011261066b5761075161108a565b6107596113e2565b73ffffffffffffffffffffffffffffffffffffffff5f5416331461078057610660906115e9565b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b503461066b57602090602060031936011261066b57356107c68161137d565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b82821061080f5761080b8686610801828b03836110ee565b51918291826111f7565b0390f35b8354875295860195600193840193909101906107e9565b823461066b575f60031936011261066b5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b503461066b57606060031936011261066b578035906024356044359161087e8461137d565b835f526005906020906005602052865f2054858511908115610994575b8115610989575b5061095e57506108b283856112ff565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06108f56108e08861112f565b976108ed8a51998a6110ee565b80895261112f565b01366020880137835b8581106109125787518061080b89826111f7565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff61093c828b5f206118aa565b90549060031b1c1661095761095188846112ff565b8a611248565b52016108fe565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b9050841015886108a2565b808711915061089b565b503461066b57602060031936011261066b5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361066b57610517602092611289565b503461066b576020918260031936011261066b57813591610a056113e2565b610a0e8361137d565b825f5260058452815f208054805b610ad1575050825f5260058452815f208054905f815581610ab4575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610a38575f8155600101610abe565b5f190180610b2b73ffffffffffffffffffffffffffffffffffffffff610af783866118aa565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a3846118bf565b50610a1c565b503461066b575f60031936011261066b573373ffffffffffffffffffffffffffffffffffffffff6001541603610b6a57610660336115e9565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b3461066b575f60031936011261066b57610bad61159d565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b50903461066b57602060031936011261066b5760209135610c3a8161137d565b5f5260058252805f20549051908152f35b50903461066b578060031936011261066b57610c6561108a565b60249260243567ffffffffffffffff811161066b57610c8a610c939136908401611147565b926105096113e2565b938251610ca5575b6020858551908152f35b610cb09291926113e2565b610cb98561137d565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610d075750505050610c9b565b82610d128284611248565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610e19575f91610dfc575b5015610dd2579060058b92835f5252610d71818b5f206119b3565b15610da55790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610cf7565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610e139150823d84116104cf576104c181836110ee565b8c610d56565b8b513d5f823e3d90fd5b50903461066b57602060031936011261066b57610e3e61108a565b91610e4883611447565b610e506114ca565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b50903461066b57610ee7366111c4565b91610ef06113e2565b610ef98261137d565b8251925f5b848110610f0757005b73ffffffffffffffffffffffffffffffffffffffff610f268284611248565b5116845f526005602052610f3c81855f206118bf565b15610f705790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610efe565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b50903461066b57602060031936011261066b5760209173ffffffffffffffffffffffffffffffffffffffff610fd261108a565b165f528252805f20549051908152f35b50903461066b57602060031936011261066b57602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b823461066b578060031936011261066b5760209061108161104161108a565b60243561104d8161137d565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361066b57565b67ffffffffffffffff81116110c157604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110c157604052565b67ffffffffffffffff81116110c15760051b60200190565b9080601f8301121561066b5760209082356111618161112f565b9361116f60405195866110ee565b81855260208086019260051b82010192831161066b57602001905b828210611198575050505090565b813573ffffffffffffffffffffffffffffffffffffffff8116810361066b57815290830190830161118a565b90604060031983011261066b57600435916024359067ffffffffffffffff821161066b576111f491600401611147565b90565b60209060206040818301928281528551809452019301915f5b82811061121e575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611210565b805182101561125c5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176110c15760405251902090565b9190820391821161130c57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9081602091031261066b575173ffffffffffffffffffffffffffffffffffffffff8116810361066b5790565b9081602091031261066b5751801515810361066b5790565b801580156113b8575b61138d5750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20541615611386565b6114186114117fffffffff000000000000000000000000000000000000000000000000000000005f3516611289565b339061178a565b1561141f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff1680156114a257805f52600460205260405f20546114775750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f20549081156114e057565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f19831461130c576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b73ffffffffffffffffffffffffffffffffffffffff5f541633036115bd57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b90815f52600560205261169773ffffffffffffffffffffffffffffffffffffffff60405f20921680926001915f520160205260405f2054151590565b156116a0575050565b7f80145d72000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561177f575f9261174657505090565b9091506020813d602011611777575b81611762602093836110ee565b8101031261066b5751908116810361066b5790565b3d9150611755565b6040513d5f823e3d90fd5b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146118a257604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa93841561177f5785935f9561187e575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa91821561177f575f9261186857505090565b6111f49250803d106104cf576104c181836110ee565b60649291955061189a90853d87116107265761071781836110ee565b949091611813565b505050600190565b805482101561125c575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f146119ab575f199182810181811161130c5782549084820191821161130c57818103611960575b505050805480156119335782019161191583836118aa565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61199661197061198093866118aa565b90549060031b1c928392866118aa565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806118fd565b505050505f90565b5f828152600182016020526040902054611a0557805490680100000000000000008210156110c157826119f06119808460018096018555846118aa565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220d2c890aac41aca693e49da80ef5c520d66b7bf4585861b6abc600e559697a06164736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x11E JUMPI PUSH1 0x1F PUSH2 0x1B78 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x122 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x11E JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x11E JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x11E JUMPI DUP1 ISZERO PUSH2 0x10B JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xFC JUMPI PUSH1 0xA0 MSTORE PUSH1 0x1 PUSH1 0x2 SSTORE PUSH2 0x1A41 SWAP1 DUP2 PUSH2 0x137 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x12B4 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x251 ADD MSTORE DUP2 DUP2 PUSH2 0x383 ADD MSTORE DUP2 DUP2 PUSH2 0x6C2 ADD MSTORE DUP2 DUP2 PUSH2 0xCD3 ADD MSTORE DUP2 DUP2 PUSH2 0x1711 ADD MSTORE PUSH2 0x17E1 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x182551DA EQ PUSH2 0x1022 JUMPI DUP1 PUSH4 0x255DAE41 EQ PUSH2 0xFE2 JUMPI DUP1 PUSH4 0x25C427ED EQ PUSH2 0xF9F JUMPI DUP1 PUSH4 0x2DA55A1D EQ PUSH2 0xED7 JUMPI DUP1 PUSH4 0x3700F987 EQ PUSH2 0xE23 JUMPI DUP1 PUSH4 0x3E035F9B EQ PUSH2 0xC4B JUMPI DUP1 PUSH4 0x62D53462 EQ PUSH2 0xC1A JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xB95 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xB31 JUMPI DUP1 PUSH4 0x7C1EC460 EQ PUSH2 0x9E6 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x99E JUMPI DUP1 PUSH4 0x8C60EBD0 EQ PUSH2 0x859 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x826 JUMPI DUP1 PUSH4 0x94FC4058 EQ PUSH2 0x7A7 JUMPI DUP1 PUSH4 0xA89B1128 EQ PUSH2 0x737 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x66F JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0x596 JUMPI DUP1 PUSH4 0xC482E822 EQ PUSH2 0x577 JUMPI DUP1 PUSH4 0xCE998ABA EQ PUSH2 0x553 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x51E JUMPI DUP1 PUSH4 0xE909C19B EQ PUSH2 0x4E0 JUMPI DUP1 PUSH4 0xEBF3A8D0 EQ PUSH2 0x349 JUMPI DUP1 PUSH4 0xF167A1E6 EQ PUSH2 0x308 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x224 JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x13C JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP3 SWAP2 CALLVALUE PUSH2 0x220 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x220 JUMPI PUSH2 0x156 PUSH2 0x108A JUMP JUMPDEST PUSH2 0x167 DUP2 PUSH2 0x162 PUSH2 0x14CA JUMP JUMPDEST PUSH2 0x165B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x184 PUSH2 0x16CE JUMP JUMPDEST AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x21C JUMPI PUSH2 0x1ED SWAP4 DUP6 SWAP3 DUP4 DUP6 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0xFD267F3900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 CALLDATALOAD SWAP2 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x213 JUMPI POP PUSH2 0x200 JUMPI POP RETURN JUMPDEST PUSH2 0x209 SWAP1 PUSH2 0x10AD JUMP JUMPDEST PUSH2 0x210 JUMPI DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST POP POP REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x275 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x275 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x210 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x210 JUMPI PUSH2 0x293 PUSH2 0x108A JUMP JUMPDEST PUSH2 0x29B PUSH2 0x159D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE DUP3 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x345 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x345 JUMPI DUP2 PUSH1 0x20 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x3 DUP6 MSTORE KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x345 JUMPI PUSH2 0x358 CALLDATASIZE PUSH2 0x11C4 JUMP JUMPDEST PUSH2 0x360 PUSH2 0x13E2 JUMP JUMPDEST PUSH2 0x369 DUP3 PUSH2 0x137D JUMP JUMPDEST DUP1 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 DUP8 JUMPDEST DUP7 DUP2 LT PUSH2 0x3B2 JUMPI DUP9 DUP1 RETURN JUMPDEST DUP3 PUSH2 0x3BD DUP3 DUP5 PUSH2 0x1248 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x4D6 JUMPI DUP14 SWAP2 PUSH2 0x4A9 JUMPI JUMPDEST POP ISZERO PUSH2 0x47F JUMPI PUSH1 0x5 SWAP1 DUP10 DUP14 MSTORE MSTORE PUSH2 0x41C DUP3 DUP12 DUP14 KECCAK256 PUSH2 0x19B3 JUMP JUMPDEST ISZERO PUSH2 0x451 JUMPI POP SWAP1 DUP7 PUSH1 0x1 SWAP3 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 DUP13 DUP1 LOG3 ADD PUSH2 0x3A7 JUMP JUMPDEST DUP8 DUP12 SWAP2 PUSH1 0x44 SWAP4 DUP9 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE MSTORE MSTORE REVERT JUMPDEST POP DUP11 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH2 0x4C9 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4CF JUMPI JUMPDEST PUSH2 0x4C1 DUP2 DUP4 PUSH2 0x10EE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1365 JUMP JUMPDEST PUSH0 PUSH2 0x403 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4B7 JUMP JUMPDEST DUP13 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x275 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x275 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x517 PUSH2 0x501 PUSH2 0x108A JUMP JUMPDEST PUSH2 0x509 PUSH2 0x13E2 JUMP JUMPDEST PUSH2 0x512 DUP2 PUSH2 0x1447 JUMP JUMPDEST PUSH2 0x1508 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x275 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x275 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x345 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x345 JUMPI PUSH1 0x20 SWAP3 DUP3 SWAP2 CALLER DUP3 MSTORE DUP5 MSTORE KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x275 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x275 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x66B JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH2 0x5B0 PUSH2 0x108A JUMP JUMPDEST PUSH2 0x5BC DUP2 PUSH2 0x162 PUSH2 0x14CA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5D9 PUSH2 0x16CE JUMP JUMPDEST AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x66B JUMPI PUSH2 0x642 SWAP4 PUSH0 SWAP3 DUP4 DUP6 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0xABAA335600000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 CALLDATALOAD SWAP2 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x662 JUMPI POP PUSH2 0x656 JUMPI POP DUP1 RETURN JUMPDEST PUSH2 0x660 SWAP2 POP PUSH2 0x10AD JUMP JUMPDEST STOP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x66B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x72D JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x6FE JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x71F SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x726 JUMPI JUMPDEST PUSH2 0x717 DUP2 DUP4 PUSH2 0x10EE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1339 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x6F6 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x70D JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x66B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH2 0x751 PUSH2 0x108A JUMP JUMPDEST PUSH2 0x759 PUSH2 0x13E2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x780 JUMPI PUSH2 0x660 SWAP1 PUSH2 0x15E9 JUMP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x66B JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI CALLDATALOAD PUSH2 0x7C6 DUP2 PUSH2 0x137D JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x80F JUMPI PUSH2 0x80B DUP7 DUP7 PUSH2 0x801 DUP3 DUP12 SUB DUP4 PUSH2 0x10EE JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x11F7 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x7E9 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x66B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x66B JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x87E DUP5 PUSH2 0x137D JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x994 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x989 JUMPI JUMPDEST POP PUSH2 0x95E JUMPI POP PUSH2 0x8B2 DUP4 DUP6 PUSH2 0x12FF JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x8F5 PUSH2 0x8E0 DUP9 PUSH2 0x112F JUMP JUMPDEST SWAP8 PUSH2 0x8ED DUP11 MLOAD SWAP10 DUP11 PUSH2 0x10EE JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x112F JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x912 JUMPI DUP8 MLOAD DUP1 PUSH2 0x80B DUP10 DUP3 PUSH2 0x11F7 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x93C DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x18AA JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x957 PUSH2 0x951 DUP9 DUP5 PUSH2 0x12FF JUMP JUMPDEST DUP11 PUSH2 0x1248 JUMP JUMPDEST MSTORE ADD PUSH2 0x8FE JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x8A2 JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x89B JUMP JUMPDEST POP CALLVALUE PUSH2 0x66B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x66B JUMPI PUSH2 0x517 PUSH1 0x20 SWAP3 PUSH2 0x1289 JUMP JUMPDEST POP CALLVALUE PUSH2 0x66B JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0xA05 PUSH2 0x13E2 JUMP JUMPDEST PUSH2 0xA0E DUP4 PUSH2 0x137D JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0xAD1 JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0xAB4 JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA38 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xABE JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0xB2B PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xAF7 DUP4 DUP7 PUSH2 0x18AA JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x18BF JUMP JUMPDEST POP PUSH2 0xA1C JUMP JUMPDEST POP CALLVALUE PUSH2 0x66B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0xB6A JUMPI PUSH2 0x660 CALLER PUSH2 0x15E9 JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x66B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH2 0xBAD PUSH2 0x159D JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x66B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xC3A DUP2 PUSH2 0x137D JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x66B JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH2 0xC65 PUSH2 0x108A JUMP JUMPDEST PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x66B JUMPI PUSH2 0xC8A PUSH2 0xC93 SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1147 JUMP JUMPDEST SWAP3 PUSH2 0x509 PUSH2 0x13E2 JUMP JUMPDEST SWAP4 DUP3 MLOAD PUSH2 0xCA5 JUMPI JUMPDEST PUSH1 0x20 DUP6 DUP6 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xCB0 SWAP3 SWAP2 SWAP3 PUSH2 0x13E2 JUMP JUMPDEST PUSH2 0xCB9 DUP6 PUSH2 0x137D JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0xD07 JUMPI POP POP POP POP PUSH2 0xC9B JUMP JUMPDEST DUP3 PUSH2 0xD12 DUP3 DUP5 PUSH2 0x1248 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP10 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xE19 JUMPI PUSH0 SWAP2 PUSH2 0xDFC JUMPI JUMPDEST POP ISZERO PUSH2 0xDD2 JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP3 DUP4 PUSH0 MSTORE MSTORE PUSH2 0xD71 DUP2 DUP12 PUSH0 KECCAK256 PUSH2 0x19B3 JUMP JUMPDEST ISZERO PUSH2 0xDA5 JUMPI SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xCF7 JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xE13 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4CF JUMPI PUSH2 0x4C1 DUP2 DUP4 PUSH2 0x10EE JUMP JUMPDEST DUP13 PUSH2 0xD56 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x66B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH2 0xE3E PUSH2 0x108A JUMP JUMPDEST SWAP2 PUSH2 0xE48 DUP4 PUSH2 0x1447 JUMP JUMPDEST PUSH2 0xE50 PUSH2 0x14CA JUMP JUMPDEST SWAP2 DUP3 SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x66B JUMPI PUSH2 0xEE7 CALLDATASIZE PUSH2 0x11C4 JUMP JUMPDEST SWAP2 PUSH2 0xEF0 PUSH2 0x13E2 JUMP JUMPDEST PUSH2 0xEF9 DUP3 PUSH2 0x137D JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xF07 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xF26 DUP3 DUP5 PUSH2 0x1248 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0xF3C DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x18BF JUMP JUMPDEST ISZERO PUSH2 0xF70 JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0xEFE JUMP JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x66B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xFD2 PUSH2 0x108A JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x66B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x66B JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1081 PUSH2 0x1041 PUSH2 0x108A JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x104D DUP2 PUSH2 0x137D JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x66B JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10C1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10C1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10C1 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x66B JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x1161 DUP2 PUSH2 0x112F JUMP JUMPDEST SWAP4 PUSH2 0x116F PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x10EE JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x66B JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1198 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x66B JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x118A JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x66B JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x66B JUMPI PUSH2 0x11F4 SWAP2 PUSH1 0x4 ADD PUSH2 0x1147 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x121E JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1210 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x125C JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10C1 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x130C JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x66B JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x66B JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x66B JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x66B JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x13B8 JUMPI JUMPDEST PUSH2 0x138D JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x1386 JUMP JUMPDEST PUSH2 0x1418 PUSH2 0x1411 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x1289 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x178A JUMP JUMPDEST ISZERO PUSH2 0x141F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x14A2 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x1477 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLER PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x14E0 JUMPI JUMP JUMPDEST PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x130C JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x15BD JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0x1697 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND DUP1 SWAP3 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x16A0 JUMPI POP POP JUMP JUMPDEST PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x177F JUMPI PUSH0 SWAP3 PUSH2 0x1746 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1777 JUMPI JUMPDEST DUP2 PUSH2 0x1762 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x10EE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x66B JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x66B JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1755 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x18A2 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x177F JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x187E JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x177F JUMPI PUSH0 SWAP3 PUSH2 0x1868 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x11F4 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x4CF JUMPI PUSH2 0x4C1 DUP2 DUP4 PUSH2 0x10EE JUMP JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x189A SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x726 JUMPI PUSH2 0x717 DUP2 DUP4 PUSH2 0x10EE JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1813 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x125C JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x19AB JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x130C JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x130C JUMPI DUP2 DUP2 SUB PUSH2 0x1960 JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x1933 JUMPI DUP3 ADD SWAP2 PUSH2 0x1915 DUP4 DUP4 PUSH2 0x18AA JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x1996 PUSH2 0x1970 PUSH2 0x1980 SWAP4 DUP7 PUSH2 0x18AA JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x18AA JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x18FD JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1A05 JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0x10C1 JUMPI DUP3 PUSH2 0x19F0 PUSH2 0x1980 DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x18AA JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD2 0xC8 SWAP1 0xAA 0xC4 BYTE 0xCA PUSH10 0x3E49DA80EF5C520D66B7 0xBF GASLIMIT DUP6 DUP7 SHL PUSH11 0xBC600E559697A06164736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"446:1537:85:-:0;;;;;;;;;;;;;-1:-1:-1;;446:1537:85;;;;-1:-1:-1;;;;;446:1537:85;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;446:1537:85;;;;;;;;;;;;;;;;;;;;;1273:26:48;;1269:95;;446:1537:85;;;;;;;;2093:20:49;446:1537:85;;2093:20:49;446:1537:85;;-1:-1:-1;446:1537:85;;;;;-1:-1:-1;446:1537:85;;;;;3052:40:48;-1:-1:-1;3052:40:48;;1524:4:80;1347:46:32;;1548:29:80;1544:80;;1634:14;;2093:20:49;853:1:81;446:1537:85;;;;;;;1347:46:32;446:1537:85;;;;;1634:14:80;446:1537:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1544:80:80;1600:13;;;-1:-1:-1;1600:13:80;;-1:-1:-1;1600:13:80;1269:95:48;1322:31;;;-1:-1:-1;1322:31:48;-1:-1:-1;1322:31:48;446:1537:85;;-1:-1:-1;1322:31:48;446:1537:85;-1:-1:-1;446:1537:85;;;;;;-1:-1:-1;446:1537:85;;;;;-1:-1:-1;446:1537:85"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":4234,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_array_address_dyn":{"entryPoint":4423,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":4965,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":4921,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_array_address_dyn":{"entryPoint":4548,"id":null,"parameterSlots":1,"returnSlots":2},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_address_dyn":{"entryPoint":4599,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":4399,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":4863,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":4334,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_15448":{"entryPoint":4269,"id":null,"parameterSlots":1,"returnSlots":0},"fun_add":{"entryPoint":6579,"id":16131,"parameterSlots":2,"returnSlots":1},"fun_authenticateCaller":{"entryPoint":5090,"id":4338,"parameterSlots":0,"returnSlots":0},"fun_canPerform":{"entryPoint":6026,"id":20311,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":5533,"id":9405,"parameterSlots":0,"returnSlots":0},"fun_contains":{"entryPoint":null,"id":16277,"parameterSlots":2,"returnSlots":1},"fun_createPoolSet":{"entryPoint":5384,"id":20479,"parameterSlots":1,"returnSlots":1},"fun_ensurePoolInSet":{"entryPoint":5723,"id":21009,"parameterSlots":2,"returnSlots":0},"fun_ensureValidManager":{"entryPoint":5191,"id":20986,"parameterSlots":1,"returnSlots":0},"fun_ensureValidPoolSet":{"entryPoint":4989,"id":21040,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":4745,"id":4356,"parameterSlots":1,"returnSlots":1},"fun_getProtocolFeeController":{"entryPoint":5838,"id":21945,"parameterSlots":0,"returnSlots":1},"fun_getValidPoolSetId":{"entryPoint":5322,"id":20958,"parameterSlots":0,"returnSlots":1},"fun_remove":{"entryPoint":6335,"id":16215,"parameterSlots":2,"returnSlots":1},"fun_transferOwnership":{"entryPoint":5609,"id":9529,"parameterSlots":1,"returnSlots":0},"memory_array_index_access_address_dyn":{"entryPoint":4680,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_bytes32_dyn":{"entryPoint":6314,"id":null,"parameterSlots":2,"returnSlots":2},"update_byte_slice_dynamic32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4296":[{"length":32,"start":4788}],"20200":[{"length":32,"start":593},{"length":32,"start":899},{"length":32,"start":1730},{"length":32,"start":3283},{"length":32,"start":5905},{"length":32,"start":6113}]},"linkReferences":{},"object":"60406080815260049081361015610014575f80fd5b5f915f3560e01c8063182551da14611022578063255dae4114610fe257806325c427ed14610f9f5780632da55a1d14610ed75780633700f98714610e235780633e035f9b14610c4b57806362d5346214610c1a578063715018a614610b9557806379ba509714610b315780637c1ec460146109e6578063851c1bb31461099e5780638c60ebd0146108595780638da5cb5b1461082657806394fc4058146107a7578063a89b112814610737578063aaabadc51461066f578063abaa335614610596578063c482e82214610577578063ce998aba14610553578063e30c39781461051e578063e909c19b146104e0578063ebf3a8d014610349578063f167a1e614610308578063f2fde38b14610279578063fbfa77cf146102245763fd267f391461013c575f80fd5b82913461022057806003193601126102205761015661108a565b610167816101626114ca565b61165b565b73ffffffffffffffffffffffffffffffffffffffff6101846116ce565b1692833b1561021c576101ed9385928385518097819582947ffd267f390000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af190811561021357506102005750f35b610209906110ad565b6102105780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b5050346102755781600319360112610275576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b83346102105760206003193601126102105761029361108a565b61029b61159d565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5034610345576020600319360112610345578160209373ffffffffffffffffffffffffffffffffffffffff92358152600385522054169051908152f35b8280fd5b503461034557610358366111c4565b6103606113e2565b6103698261137d565b80519273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692875b8681106103b2578880f35b826103bd8284611248565b511688517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156104d6578d916104a9575b501561047f57600590898d525261041c828b8d206119b3565b15610451575090866001927f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b698c80a3016103a7565b878b91604493887f5a17aa8d0000000000000000000000000000000000000000000000000000000085525252fd5b508a82877f9e51bd5c00000000000000000000000000000000000000000000000000000000835252fd5b6104c99150823d84116104cf575b6104c181836110ee565b810190611365565b5f610403565b503d6104b7565b8c513d8f823e3d90fd5b5050346102755760206003193601126102755760209061051761050161108a565b6105096113e2565b61051281611447565b611508565b9051908152f35b50503461027557816003193601126102755760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50346103455782600319360112610345576020928291338252845220549051908152f35b5050346102755781600319360112610275576020906002549051908152f35b50903461066b578060031936011261066b576105b061108a565b6105bc816101626114ca565b73ffffffffffffffffffffffffffffffffffffffff6105d96116ce565b1692833b1561066b57610642935f928385518097819582947fabaa33560000000000000000000000000000000000000000000000000000000084526024359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19081156106625750610656575080f35b61066091506110ad565b005b513d5f823e3d90fd5b5f80fd5b503461066b575f60031936011261066b5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561072d57926020935f936106fe575b505191168152f35b61071f919350843d8611610726575b61071781836110ee565b810190611339565b91846106f6565b503d61070d565b83513d5f823e3d90fd5b503461066b57602060031936011261066b5761075161108a565b6107596113e2565b73ffffffffffffffffffffffffffffffffffffffff5f5416331461078057610660906115e9565b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b503461066b57602090602060031936011261066b57356107c68161137d565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b82821061080f5761080b8686610801828b03836110ee565b51918291826111f7565b0390f35b8354875295860195600193840193909101906107e9565b823461066b575f60031936011261066b5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b503461066b57606060031936011261066b578035906024356044359161087e8461137d565b835f526005906020906005602052865f2054858511908115610994575b8115610989575b5061095e57506108b283856112ff565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06108f56108e08861112f565b976108ed8a51998a6110ee565b80895261112f565b01366020880137835b8581106109125787518061080b89826111f7565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff61093c828b5f206118aa565b90549060031b1c1661095761095188846112ff565b8a611248565b52016108fe565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b9050841015886108a2565b808711915061089b565b503461066b57602060031936011261066b5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361066b57610517602092611289565b503461066b576020918260031936011261066b57813591610a056113e2565b610a0e8361137d565b825f5260058452815f208054805b610ad1575050825f5260058452815f208054905f815581610ab4575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b81811015610a38575f8155600101610abe565b5f190180610b2b73ffffffffffffffffffffffffffffffffffffffff610af783866118aa565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a3846118bf565b50610a1c565b503461066b575f60031936011261066b573373ffffffffffffffffffffffffffffffffffffffff6001541603610b6a57610660336115e9565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b3461066b575f60031936011261066b57610bad61159d565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b50903461066b57602060031936011261066b5760209135610c3a8161137d565b5f5260058252805f20549051908152f35b50903461066b578060031936011261066b57610c6561108a565b60249260243567ffffffffffffffff811161066b57610c8a610c939136908401611147565b926105096113e2565b938251610ca5575b6020858551908152f35b610cb09291926113e2565b610cb98561137d565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610d075750505050610c9b565b82610d128284611248565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610e19575f91610dfc575b5015610dd2579060058b92835f5252610d71818b5f206119b3565b15610da55790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610cf7565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610e139150823d84116104cf576104c181836110ee565b8c610d56565b8b513d5f823e3d90fd5b50903461066b57602060031936011261066b57610e3e61108a565b91610e4883611447565b610e506114ca565b918291825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b50903461066b57610ee7366111c4565b91610ef06113e2565b610ef98261137d565b8251925f5b848110610f0757005b73ffffffffffffffffffffffffffffffffffffffff610f268284611248565b5116845f526005602052610f3c81855f206118bf565b15610f705790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610efe565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b50903461066b57602060031936011261066b5760209173ffffffffffffffffffffffffffffffffffffffff610fd261108a565b165f528252805f20549051908152f35b50903461066b57602060031936011261066b57602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b823461066b578060031936011261066b5760209061108161104161108a565b60243561104d8161137d565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361066b57565b67ffffffffffffffff81116110c157604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110c157604052565b67ffffffffffffffff81116110c15760051b60200190565b9080601f8301121561066b5760209082356111618161112f565b9361116f60405195866110ee565b81855260208086019260051b82010192831161066b57602001905b828210611198575050505090565b813573ffffffffffffffffffffffffffffffffffffffff8116810361066b57815290830190830161118a565b90604060031983011261066b57600435916024359067ffffffffffffffff821161066b576111f491600401611147565b90565b60209060206040818301928281528551809452019301915f5b82811061121e575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611210565b805182101561125c5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176110c15760405251902090565b9190820391821161130c57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9081602091031261066b575173ffffffffffffffffffffffffffffffffffffffff8116810361066b5790565b9081602091031261066b5751801515810361066b5790565b801580156113b8575b61138d5750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20541615611386565b6114186114117fffffffff000000000000000000000000000000000000000000000000000000005f3516611289565b339061178a565b1561141f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff1680156114a257805f52600460205260405f20546114775750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600460205260405f20549081156114e057565b7fbcc08f74000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f19831461130c576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b73ffffffffffffffffffffffffffffffffffffffff5f541633036115bd57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b90815f52600560205261169773ffffffffffffffffffffffffffffffffffffffff60405f20921680926001915f520160205260405f2054151590565b156116a0575050565b7f80145d72000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561177f575f9261174657505090565b9091506020813d602011611777575b81611762602093836110ee565b8101031261066b5751908116810361066b5790565b3d9150611755565b6040513d5f823e3d90fd5b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146118a257604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa93841561177f5785935f9561187e575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa91821561177f575f9261186857505090565b6111f49250803d106104cf576104c181836110ee565b60649291955061189a90853d87116107265761071781836110ee565b949091611813565b505050600190565b805482101561125c575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f146119ab575f199182810181811161130c5782549084820191821161130c57818103611960575b505050805480156119335782019161191583836118aa565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61199661197061198093866118aa565b90549060031b1c928392866118aa565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806118fd565b505050505f90565b5f828152600182016020526040902054611a0557805490680100000000000000008210156110c157826119f06119808460018096018555846118aa565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220d2c890aac41aca693e49da80ef5c520d66b7bf4585861b6abc600e559697a06164736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x182551DA EQ PUSH2 0x1022 JUMPI DUP1 PUSH4 0x255DAE41 EQ PUSH2 0xFE2 JUMPI DUP1 PUSH4 0x25C427ED EQ PUSH2 0xF9F JUMPI DUP1 PUSH4 0x2DA55A1D EQ PUSH2 0xED7 JUMPI DUP1 PUSH4 0x3700F987 EQ PUSH2 0xE23 JUMPI DUP1 PUSH4 0x3E035F9B EQ PUSH2 0xC4B JUMPI DUP1 PUSH4 0x62D53462 EQ PUSH2 0xC1A JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xB95 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xB31 JUMPI DUP1 PUSH4 0x7C1EC460 EQ PUSH2 0x9E6 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x99E JUMPI DUP1 PUSH4 0x8C60EBD0 EQ PUSH2 0x859 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x826 JUMPI DUP1 PUSH4 0x94FC4058 EQ PUSH2 0x7A7 JUMPI DUP1 PUSH4 0xA89B1128 EQ PUSH2 0x737 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x66F JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0x596 JUMPI DUP1 PUSH4 0xC482E822 EQ PUSH2 0x577 JUMPI DUP1 PUSH4 0xCE998ABA EQ PUSH2 0x553 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x51E JUMPI DUP1 PUSH4 0xE909C19B EQ PUSH2 0x4E0 JUMPI DUP1 PUSH4 0xEBF3A8D0 EQ PUSH2 0x349 JUMPI DUP1 PUSH4 0xF167A1E6 EQ PUSH2 0x308 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x224 JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x13C JUMPI PUSH0 DUP1 REVERT JUMPDEST DUP3 SWAP2 CALLVALUE PUSH2 0x220 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x220 JUMPI PUSH2 0x156 PUSH2 0x108A JUMP JUMPDEST PUSH2 0x167 DUP2 PUSH2 0x162 PUSH2 0x14CA JUMP JUMPDEST PUSH2 0x165B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x184 PUSH2 0x16CE JUMP JUMPDEST AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x21C JUMPI PUSH2 0x1ED SWAP4 DUP6 SWAP3 DUP4 DUP6 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0xFD267F3900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 CALLDATALOAD SWAP2 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x213 JUMPI POP PUSH2 0x200 JUMPI POP RETURN JUMPDEST PUSH2 0x209 SWAP1 PUSH2 0x10AD JUMP JUMPDEST PUSH2 0x210 JUMPI DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST POP POP REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x275 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x275 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x210 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x210 JUMPI PUSH2 0x293 PUSH2 0x108A JUMP JUMPDEST PUSH2 0x29B PUSH2 0x159D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE DUP3 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 DUP4 DUP1 LOG3 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x345 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x345 JUMPI DUP2 PUSH1 0x20 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x3 DUP6 MSTORE KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x345 JUMPI PUSH2 0x358 CALLDATASIZE PUSH2 0x11C4 JUMP JUMPDEST PUSH2 0x360 PUSH2 0x13E2 JUMP JUMPDEST PUSH2 0x369 DUP3 PUSH2 0x137D JUMP JUMPDEST DUP1 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 DUP8 JUMPDEST DUP7 DUP2 LT PUSH2 0x3B2 JUMPI DUP9 DUP1 RETURN JUMPDEST DUP3 PUSH2 0x3BD DUP3 DUP5 PUSH2 0x1248 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x4D6 JUMPI DUP14 SWAP2 PUSH2 0x4A9 JUMPI JUMPDEST POP ISZERO PUSH2 0x47F JUMPI PUSH1 0x5 SWAP1 DUP10 DUP14 MSTORE MSTORE PUSH2 0x41C DUP3 DUP12 DUP14 KECCAK256 PUSH2 0x19B3 JUMP JUMPDEST ISZERO PUSH2 0x451 JUMPI POP SWAP1 DUP7 PUSH1 0x1 SWAP3 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 DUP13 DUP1 LOG3 ADD PUSH2 0x3A7 JUMP JUMPDEST DUP8 DUP12 SWAP2 PUSH1 0x44 SWAP4 DUP9 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE MSTORE MSTORE REVERT JUMPDEST POP DUP11 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST PUSH2 0x4C9 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4CF JUMPI JUMPDEST PUSH2 0x4C1 DUP2 DUP4 PUSH2 0x10EE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1365 JUMP JUMPDEST PUSH0 PUSH2 0x403 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4B7 JUMP JUMPDEST DUP13 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP CALLVALUE PUSH2 0x275 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x275 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x517 PUSH2 0x501 PUSH2 0x108A JUMP JUMPDEST PUSH2 0x509 PUSH2 0x13E2 JUMP JUMPDEST PUSH2 0x512 DUP2 PUSH2 0x1447 JUMP JUMPDEST PUSH2 0x1508 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x275 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x275 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x345 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x345 JUMPI PUSH1 0x20 SWAP3 DUP3 SWAP2 CALLER DUP3 MSTORE DUP5 MSTORE KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP POP CALLVALUE PUSH2 0x275 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x275 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x66B JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH2 0x5B0 PUSH2 0x108A JUMP JUMPDEST PUSH2 0x5BC DUP2 PUSH2 0x162 PUSH2 0x14CA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5D9 PUSH2 0x16CE JUMP JUMPDEST AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x66B JUMPI PUSH2 0x642 SWAP4 PUSH0 SWAP3 DUP4 DUP6 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0xABAA335600000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x24 CALLDATALOAD SWAP2 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x662 JUMPI POP PUSH2 0x656 JUMPI POP DUP1 RETURN JUMPDEST PUSH2 0x660 SWAP2 POP PUSH2 0x10AD JUMP JUMPDEST STOP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x66B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x72D JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x6FE JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x71F SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x726 JUMPI JUMPDEST PUSH2 0x717 DUP2 DUP4 PUSH2 0x10EE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1339 JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x6F6 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x70D JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x66B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH2 0x751 PUSH2 0x108A JUMP JUMPDEST PUSH2 0x759 PUSH2 0x13E2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x780 JUMPI PUSH2 0x660 SWAP1 PUSH2 0x15E9 JUMP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x66B JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI CALLDATALOAD PUSH2 0x7C6 DUP2 PUSH2 0x137D JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x80F JUMPI PUSH2 0x80B DUP7 DUP7 PUSH2 0x801 DUP3 DUP12 SUB DUP4 PUSH2 0x10EE JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x11F7 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x7E9 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x66B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x66B JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x87E DUP5 PUSH2 0x137D JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x994 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x989 JUMPI JUMPDEST POP PUSH2 0x95E JUMPI POP PUSH2 0x8B2 DUP4 DUP6 PUSH2 0x12FF JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x8F5 PUSH2 0x8E0 DUP9 PUSH2 0x112F JUMP JUMPDEST SWAP8 PUSH2 0x8ED DUP11 MLOAD SWAP10 DUP11 PUSH2 0x10EE JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0x112F JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x912 JUMPI DUP8 MLOAD DUP1 PUSH2 0x80B DUP10 DUP3 PUSH2 0x11F7 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x93C DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x18AA JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x957 PUSH2 0x951 DUP9 DUP5 PUSH2 0x12FF JUMP JUMPDEST DUP11 PUSH2 0x1248 JUMP JUMPDEST MSTORE ADD PUSH2 0x8FE JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO DUP9 PUSH2 0x8A2 JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x89B JUMP JUMPDEST POP CALLVALUE PUSH2 0x66B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x66B JUMPI PUSH2 0x517 PUSH1 0x20 SWAP3 PUSH2 0x1289 JUMP JUMPDEST POP CALLVALUE PUSH2 0x66B JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0xA05 PUSH2 0x13E2 JUMP JUMPDEST PUSH2 0xA0E DUP4 PUSH2 0x137D JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0xAD1 JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0xAB4 JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA38 JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xABE JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0xB2B PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xAF7 DUP4 DUP7 PUSH2 0x18AA JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x18BF JUMP JUMPDEST POP PUSH2 0xA1C JUMP JUMPDEST POP CALLVALUE PUSH2 0x66B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0xB6A JUMPI PUSH2 0x660 CALLER PUSH2 0x15E9 JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x66B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH2 0xBAD PUSH2 0x159D JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x66B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xC3A DUP2 PUSH2 0x137D JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x66B JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH2 0xC65 PUSH2 0x108A JUMP JUMPDEST PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x66B JUMPI PUSH2 0xC8A PUSH2 0xC93 SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1147 JUMP JUMPDEST SWAP3 PUSH2 0x509 PUSH2 0x13E2 JUMP JUMPDEST SWAP4 DUP3 MLOAD PUSH2 0xCA5 JUMPI JUMPDEST PUSH1 0x20 DUP6 DUP6 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xCB0 SWAP3 SWAP2 SWAP3 PUSH2 0x13E2 JUMP JUMPDEST PUSH2 0xCB9 DUP6 PUSH2 0x137D JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0xD07 JUMPI POP POP POP POP PUSH2 0xC9B JUMP JUMPDEST DUP3 PUSH2 0xD12 DUP3 DUP5 PUSH2 0x1248 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP10 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xE19 JUMPI PUSH0 SWAP2 PUSH2 0xDFC JUMPI JUMPDEST POP ISZERO PUSH2 0xDD2 JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP3 DUP4 PUSH0 MSTORE MSTORE PUSH2 0xD71 DUP2 DUP12 PUSH0 KECCAK256 PUSH2 0x19B3 JUMP JUMPDEST ISZERO PUSH2 0xDA5 JUMPI SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xCF7 JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xE13 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x4CF JUMPI PUSH2 0x4C1 DUP2 DUP4 PUSH2 0x10EE JUMP JUMPDEST DUP13 PUSH2 0xD56 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x66B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH2 0xE3E PUSH2 0x108A JUMP JUMPDEST SWAP2 PUSH2 0xE48 DUP4 PUSH2 0x1447 JUMP JUMPDEST PUSH2 0xE50 PUSH2 0x14CA JUMP JUMPDEST SWAP2 DUP3 SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x66B JUMPI PUSH2 0xEE7 CALLDATASIZE PUSH2 0x11C4 JUMP JUMPDEST SWAP2 PUSH2 0xEF0 PUSH2 0x13E2 JUMP JUMPDEST PUSH2 0xEF9 DUP3 PUSH2 0x137D JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xF07 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xF26 DUP3 DUP5 PUSH2 0x1248 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0xF3C DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x18BF JUMP JUMPDEST ISZERO PUSH2 0xF70 JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0xEFE JUMP JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x66B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xFD2 PUSH2 0x108A JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x66B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x66B JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x66B JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1081 PUSH2 0x1041 PUSH2 0x108A JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x104D DUP2 PUSH2 0x137D JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x66B JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10C1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10C1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10C1 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x66B JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x1161 DUP2 PUSH2 0x112F JUMP JUMPDEST SWAP4 PUSH2 0x116F PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x10EE JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x66B JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1198 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x66B JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x118A JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x66B JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x66B JUMPI PUSH2 0x11F4 SWAP2 PUSH1 0x4 ADD PUSH2 0x1147 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x121E JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1210 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x125C JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10C1 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x130C JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x66B JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x66B JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x66B JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x66B JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x13B8 JUMPI JUMPDEST PUSH2 0x138D JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x1386 JUMP JUMPDEST PUSH2 0x1418 PUSH2 0x1411 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x1289 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x178A JUMP JUMPDEST ISZERO PUSH2 0x141F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x14A2 JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x1477 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLER PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0x14E0 JUMPI JUMP JUMPDEST PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x130C JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x15BD JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0x1697 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND DUP1 SWAP3 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x16A0 JUMPI POP POP JUMP JUMPDEST PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x177F JUMPI PUSH0 SWAP3 PUSH2 0x1746 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1777 JUMPI JUMPDEST DUP2 PUSH2 0x1762 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x10EE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x66B JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x66B JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1755 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x18A2 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x177F JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x187E JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x177F JUMPI PUSH0 SWAP3 PUSH2 0x1868 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x11F4 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x4CF JUMPI PUSH2 0x4C1 DUP2 DUP4 PUSH2 0x10EE JUMP JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x189A SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x726 JUMPI PUSH2 0x717 DUP2 DUP4 PUSH2 0x10EE JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1813 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x125C JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x19AB JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x130C JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x130C JUMPI DUP2 DUP2 SUB PUSH2 0x1960 JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x1933 JUMPI DUP3 ADD SWAP2 PUSH2 0x1915 DUP4 DUP4 PUSH2 0x18AA JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x1996 PUSH2 0x1970 PUSH2 0x1980 SWAP4 DUP7 PUSH2 0x18AA JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x18AA JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x18FD JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1A05 JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0x10C1 JUMPI DUP3 PUSH2 0x19F0 PUSH2 0x1980 DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x18AA JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD2 0xC8 SWAP1 0xAA 0xC4 BYTE 0xCA PUSH10 0x3E49DA80EF5C520D66B7 0xBF GASLIMIT DUP6 DUP7 SHL PUSH11 0xBC600E559697A06164736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"446:1537:85:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21:80;446:1537:85;1810:21:80;;;446:1537:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;;:::i;:::-;1779:4:81;1721:20;;;:::i;:::-;1779:4;:::i;:::-;446:1537:85;1086:27;;:::i;:::-;446:1537;1086:92;;;;;;;446:1537;;;;;;1086:92;;;;;;446:1537;1086:92;;446:1537;;1086:92;;;446:1537;;;;;;;;;;;;;;;;;1086:92;;;;;;;;;;;;;446:1537;;1086:92;;;;:::i;:::-;446:1537;;1086:92;446:1537;;;;1086:92;446:1537;;;;;;;;1086:92;446:1537;;;;;;;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;;;;1348:29:80;446:1537:85;;;;;;;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;;:::i;:::-;1500:62:48;;:::i;:::-;446:1537:85;;;;;;;1738:24:49;446:1537:85;;;1738:24:49;446:1537:85;;;;1777:43:49;;;;446:1537:85;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;;;;;;;;8454:16:81;446:1537:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1525:73:32;;:::i;:::-;1515:9:81;;;:::i;:::-;446:1537:85;;;;5266:5:81;446:1537:85;;;5122:13:81;5137:12;;;;;;446:1537:85;;;5151:3:81;5185:11;;;;;:::i;:::-;446:1537:85;;;;;5266:28:81;;;;;;446:1537:85;5266:28:81;446:1537:85;5266:28:81;;;;;;;;;;;;;;;;;5151:3;446:1537:85;;5262:119:81;;5399:9;446:1537:85;;;;;11511:50:71;446:1537:85;;;;11511:50:71;:::i;:::-;446:1537:85;5395:118:81;;5644:31;;;446:1537:85;5644:31:81;;;;;446:1537:85;5122:13:81;;5395:118;5465:33;;;446:1537:85;5465:33:81;;;;;446:1537:85;;5465:33:81;5262:119;5330:36;;;;;;;446:1537:85;5330:36:81;5266:28;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;446:1537:85;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;;2557:30:81;446:1537:85;;:::i;:::-;1525:73:32;;:::i;:::-;1962:7:81;;;:::i;:::-;2557:30;:::i;:::-;446:1537:85;;;;;;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;;;1311:13:49;446:1537:85;;;;;;;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;6586:10:81;;;;446:1537:85;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;;8291:14:81;446:1537:85;;;;;;;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;;:::i;:::-;1779:4:81;1721:20;;;:::i;1779:4::-;446:1537:85;1392:27;;:::i;:::-;446:1537;1392:94;;;;;;;446:1537;;;;;;1392:94;;;;;;446:1537;1392:94;;446:1537;;1392:94;;;446:1537;;;;;;;;;;;;;;;;;1392:94;;;;;;;;;;;;;446:1537;;;1392:94;;;;;:::i;:::-;446:1537;1392:94;446:1537;;;;;;;;1392:94;446:1537;;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;1810:21:80;446:1537:85;;1810:21:80;;446:1537:85;1810:21:80;;:5;;;446:1537:85;1810:21:80;;;;;;;;;;446:1537:85;1810:21:80;;;446:1537:85;;;;;;;;1810:21:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;446:1537:85;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;;:::i;:::-;1525:73:32;;:::i;:::-;446:1537:85;;;;2423:10:80;:21;2419:77;;2524:8;;;:::i;2419:77::-;2467:18;;446:1537:85;2467:18:80;446:1537:85;2467:18:80;446:1537:85;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;1515:9:81;;;:::i;:::-;446:1537:85;;7570:9:81;446:1537:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;;;;;;;1515:9:81;;;;:::i;:::-;446:1537:85;;;7852:9:81;446:1537:85;;;7852:9:81;446:1537:85;;;;;;7896:9:81;;;:28;;;;;446:1537:85;7896:50:81;;;;446:1537:85;7892:115:81;;;8039:9;;;;;:::i;:::-;446:1537:85;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;8064:16:81;8082:6;;;;;;446:1537:85;;;;;;;:::i;8090:3:81:-;446:1537:85;;;;;;;;;5853:18:71;446:1537:85;;;;5853:18:71;:::i;:::-;446:1537:85;;;;;;;8109:44:81;8115:8;;;;:::i;:::-;8109:44;;:::i;:::-;446:1537:85;;8064:16:81;;7892:115;7969:27;;;446:1537:85;7969:27:81;446:1537:85;;;7969:27:81;7896:50;7928:18;;;;;7896:50;;;:28;7909:15;;;;-1:-1:-1;7896:28:81;;446:1537:85;;;;;;-1:-1:-1;;446:1537:85;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;;1525:73:32;;;:::i;:::-;1515:9:81;;;:::i;:::-;446:1537:85;;;3508:9:81;446:1537:85;;;;;;;3627:237:81;3634:12;;;446:1537:85;;;;;3508:9:81;446:1537:85;;;;;;;;;;;;;;3627:237:81;446:1537:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4157:36:81;446:1537:85;4157:36:81;;446:1537:85;;;;;;;;;;;;;;;;;;;;;;;;;3627:237:81;-1:-1:-1;;446:1537:85;5853:18:71;11832:53;446:1537:85;5853:18:71;;;;:::i;:::-;446:1537:85;;;;;;;3783:35:81;;;446:1537:85;3783:35:81;;11832:53:71;;:::i;:::-;;3627:237:81;;446:1537:85;;;;;;-1:-1:-1;;446:1537:85;;;;;735:10:63;446:1537:85;1311:13:49;446:1537:85;;2339:24:49;2335:96;;2459:6;735:10:63;2459:6:49;:::i;2335:96::-;2386:34;446:1537:85;2386:34:49;735:10:63;446:1537:85;;;;2386:34:49;446:1537:85;;;;;-1:-1:-1;;446:1537:85;;;;;1500:62:48;;:::i;:::-;446:1537:85;;;;2093:20:49;446:1537:85;;2093:20:49;446:1537:85;;;;;;;;;3052:40:48;;;;446:1537:85;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;;;1515:9:81;;;:::i;:::-;446:1537:85;;6942:9:81;446:1537:85;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;;:::i;:::-;;;;;;;;;;;2839:30:81;446:1537:85;;;;;;:::i;:::-;1525:73:32;;;:::i;2839:30:81:-;446:1537:85;;;2880:84:81;;446:1537:85;;;;;;;;;2880:84:81;1525:73:32;;;;;:::i;:::-;1515:9:81;;;:::i;:::-;446:1537:85;;;;5266:5:81;446:1537:85;;;;5137:12:81;;;;;;2880:84;;;;;;5151:3;5185:11;;;;;:::i;:::-;446:1537:85;;;;;5266:28:81;;;;;;446:1537:85;;5266:28:81;;;;;;;;;;;;;446:1537:85;5266:28:81;;;5151:3;446:1537:85;;5262:119:81;;446:1537:85;5399:9:81;446:1537:85;;;;;;11511:50:71;446:1537:85;;;;11511:50:71;:::i;:::-;446:1537:85;5395:118:81;;5644:31;446:1537:85;5644:31:81;;;446:1537:85;5644:31:81;;446:1537:85;5122:13:81;;5395:118;5465:33;;;;446:1537:85;5465:33:81;446:1537:85;;;;5465:33:81;5262:119;5330:36;;;;446:1537:85;5330:36:81;446:1537:85;;5330:36:81;5266:28;;;;;;;;;;;;;;:::i;:::-;;;;;446:1537:85;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;;:::i;:::-;1962:7:81;;;;:::i;:::-;4366:20;;:::i;:::-;446:1537:85;;;;;;4397:16:81;446:1537:85;;;;;;;;;;;;;;;;;4520:10:81;446:1537:85;;;;;;;;;;;;;;;4520:10:81;4599:62;;446:1537:85;4599:62:81;;446:1537:85;;;;;;;;;;:::i;:::-;1525:73:32;;;:::i;:::-;1515:9:81;;;:::i;:::-;446:1537:85;;5934:13:81;446:1537:85;5949:12:81;;;;;;446:1537:85;5963:3:81;446:1537:85;5997:8:81;;;;:::i;:::-;446:1537:85;;;;;6024:9:81;446:1537:85;;11832:53:71;446:1537:85;;;;11832:53:71;:::i;:::-;446:1537:85;6020:117:81;;6156:35;;446:1537:85;6156:35:81;;446:1537:85;6156:35:81;;446:1537:85;5934:13:81;;6020:117;6093:29;;;;446:1537:85;6093:29:81;446:1537:85;;;;;6093:29:81;446:1537:85;;;;;;;-1:-1:-1;;446:1537:85;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;;;;;7113:16:81;446:1537:85;;;;;;;;7113:41:81;;446:1537:85;;;;;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;;12473:55:71;446:1537:85;;:::i;:::-;;;1515:9:81;;;:::i;:::-;446:1537:85;;7333:9:81;446:1537:85;;;;;;;;12473:55:71;5197:14;5101:129;-1:-1:-1;446:1537:85;5197:14:71;446:1537:85;;;-1:-1:-1;446:1537:85;;5197:26:71;;5101:129;;12473:55;446:1537:85;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;446:1537:85;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:32;446:1537:85;;;2303:50:32;;;2320:22;;446:1537:85;;;;;;;2303:50:32;;;446:1537:85;;;;;;;;;;;;;;;2293:61:32;;1931:430;:::o;446:1537:85:-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;9714:202:81:-;9790:14;;:59;;;;9714:202;9786:124;;9714:202;:::o;9786:124::-;9872:27;9803:1;9872:27;;446:1537:85;;9803:1:81;9872:27;9790:59;446:1537:85;;9803:1:81;446:1537:85;9808:16:81;446:1537:85;;;;9803:1:81;446:1537:85;;;9808:41:81;9790:59;;1688:201:32;1798:33;1762:20;1774:7;;;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;;1774:7;1854:18;9014:266:81;446:1537:85;;9088:21:81;;9084:82;;446:1537:85;9107:1:81;446:1537:85;9180:14:81;446:1537:85;;;9107:1:81;446:1537:85;;9176:98:81;;9014:266;:::o;9176:98::-;9231:32;9107:1;9231:32;9180:14;446:1537:85;;9107:1:81;9231:32;9084:82;9132:23;9107:1;9132:23;;9107:1;9132:23;8795:213;6586:10;-1:-1:-1;446:1537:85;6571:14:81;446:1537:85;;;-1:-1:-1;446:1537:85;;8927:14:81;;;8923:79;;8795:213::o;8923:79::-;8964:27;-1:-1:-1;8964:27:81;6571:14;-1:-1:-1;8964:27:81;2976:342;;3083:16;446:1537:85;;-1:-1:-1;;446:1537:85;;;;;;;3083:16:81;446:1537:85;3071:28:81;446:1537:85;-1:-1:-1;446:1537:85;3158:16:81;446:1537:85;;;;-1:-1:-1;446:1537:85;;;;;;;;;;;;;-1:-1:-1;446:1537:85;3212:14:81;446:1537:85;;;;-1:-1:-1;446:1537:85;;3270:41:81;-1:-1:-1;3270:41:81;;2976:342::o;1796:162:48:-;446:1537:85;1710:6:48;446:1537:85;;735:10:63;1855:23:48;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:63;1901:40:48;446:1537:85;;1710:6:48;1901:40;2011:153:49;446:1537:85;;;2093:20:49;446:1537:85;;2093:20:49;446:1537:85;2093:20:49;446:1537:85;;;;;;;;;;2093:20:49;446:1537:85;;3052:40:48;2093:20:49;3052:40:48;;2011:153:49:o;9286:200:81:-;;446:1537:85;-1:-1:-1;446:1537:85;9373:9:81;446:1537:85;;12473:55:71;446:1537:85;;-1:-1:-1;446:1537:85;;;12473:55:71;;5197:14;5101:129;-1:-1:-1;446:1537:85;5197:14:71;446:1537:85;;;-1:-1:-1;446:1537:85;;5197:26:71;;5101:129;;12473:55;446:1537:85;9369:111:81;;9286:200;;:::o;9369:111::-;9440:29;-1:-1:-1;9440:29:81;;446:1537:85;;;;-1:-1:-1;9440:29:81;1841:140:85;446:1537;;;1942:32;;446:1537;1942:32;446:1537;1942:32;446:1537;1942:5;446:1537;;1942:32;;;;;;;;;;;1935:39;;1841:140;:::o;1942:32::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;446:1537;;;;;;;;;;;;1841:140;:::o;1942:32::-;;;-1:-1:-1;1942:32:85;;;446:1537;;;1942:32;446:1537;;;;;2546:382:80;;446:1537:85;;;;;;;;;2721:15:80;;;2717:57;;446:1537:85;;2858:21:80;446:1537:85;2858:21:80;;;:5;;;:21;:5;;;446:1537:85;2858:21:80;;;;;;;;;446:1537:85;2858:21:80;;;2546:382;446:1537:85;;;;;;2858:63:80;;;;;446:1537:85;2858:63:80;;:21;:63;;446:1537:85;;;;;2915:4:80;446:1537:85;;;;;2858:63:80;;;;;;;446:1537:85;2858:63:80;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;-1:-1:-1;2858:63:80;;;;;;:::i;:21::-;446:1537:85;2858:21:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o;446:1537:85:-;;;;;;;;-1:-1:-1;446:1537:85;;-1:-1:-1;446:1537:85;;;-1:-1:-1;446:1537:85;:::o;3071:1368:71:-;;3266:14;;;446:1537:85;;;;;;;;;;;3302:13:71;;;;3298:1135;3302:13;;;-1:-1:-1;;446:1537:85;;;;;;;;;;;;;;;;;;;;3777:23:71;;;3773:378;;3298:1135;446:1537:85;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3266:14:71;4368:11;:::o;446:1537:85:-;;;;;;;;;;3773:378:71;446:1537:85;3840:22:71;3961:23;3840:22;;;:::i;:::-;446:1537:85;;;;;;3961:23:71;;;;;:::i;:::-;446:1537:85;;;;;-1:-1:-1;;446:1537:85;;;;;;;;;;;;;;;;;;;;;;;;;3773:378:71;;;;;3298:1135;4410:12;;;;446:1537:85;4410:12:71;:::o;2497:406::-;-1:-1:-1;446:1537:85;;;5197:14:71;;;446:1537:85;;;;;;2581:21:71;;446:1537:85;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2776:14:71;446:1537:85;;;;;;;2832:11:71;:::o;2576:321::-;2874:12;;446:1537:85;2874:12:71;:::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","addPoolsToSet(uint256,address[])":"ebf3a8d0","createPoolSet(address)":"e909c19b","createPoolSet(address,address[])":"3e035f9b","destroyPoolSet(uint256)":"7c1ec460","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAllPoolsInSet(uint256)":"94fc4058","getAuthorizer()":"aaabadc5","getManagerForPoolSet(uint256)":"f167a1e6","getNextPoolSetId()":"c482e822","getPoolCountForSet(uint256)":"62d53462","getPoolSetIdForCaller()":"ce998aba","getPoolSetIdForManager(address)":"25c427ed","getPoolsInSet(uint256,uint256,uint256)":"8c60ebd0","isPoolInSet(address,uint256)":"182551da","isValidPoolSetId(uint256)":"255dae41","owner()":"8da5cb5b","pendingOwner()":"e30c3978","removePoolsFromSet(uint256,address[])":"2da55a1d","renounceOwnership()":"715018a6","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","transferOwnership(address)":"f2fde38b","transferPoolSetOwnership(address)":"3700f987","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"InvalidPoolSetId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolSetManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolSetManager\",\"type\":\"address\"}],\"name\":\"PoolSetManagerNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderIsNotPoolSetManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"PoolSetCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"PoolSetDestroyed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"PoolSetOwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPoolsToSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"destroyPoolSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getAllPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getManagerForPoolSet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextPoolSetId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getPoolCountForSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSetIdForCaller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getPoolSetIdForManager\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isPoolInSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isValidPoolSetId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePoolsFromSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferPoolSetOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"params\":{\"poolSetId\":\"Id of the set involved in the operation\"}}],\"InvalidPoolSetId(uint256)\":[{\"details\":\"This can mean the value is invalid, or it was never created, or it was destroyed.\",\"params\":{\"poolSetId\":\"The id of the invalid set\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolSetManagerNotUnique(address)\":[{\"details\":\"Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\",\"params\":{\"poolSetManager\":\"Address of the manager that is already assigned to another pool set id\"}}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolRemovedFromSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetCreated(uint256,address)\":{\"details\":\"Pools are organized into separate sets, controlled by a manager, which can be changed independently.\",\"params\":{\"initialManager\":\"Address of the pool set manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetDestroyed(uint256,address)\":{\"params\":{\"manager\":\"The address of the set's last manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"details\":\"Managers can only control one pool set. Transfers to existing managers of other sets will revert.\",\"params\":{\"newManager\":\"Address of the new manager\",\"oldManager\":\"Address of the previous manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"addPoolsToSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may add pools to a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"newPools\":\"List of pools to add\",\"poolSetId\":\"Id of the set to which the new pools belong\"}},\"createPoolSet(address)\":{\"details\":\"Convenience function to create a pool set with no initial pools. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\"}},\"createPoolSet(address,address[])\":{\"details\":\"The `newPools` list can be empty, in which case this will only create the set. Pools can then be added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\",\"newPools\":\"Set of pools to add to the set\"}},\"destroyPoolSet(uint256)\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may destroy sets, effectively removing control of any pools in the set from the associated manager. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set being destroyed\"}},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAllPoolsInSet(uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"pools\":\"List of pools\"}},\"getManagerForPoolSet(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\"}},\"getNextPoolSetId()\":{\"returns\":{\"_0\":\"The pool set id that will be used on the next call of `createPoolSet`\"}},\"getPoolCountForSet(uint256)\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction. Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The current number of pools in the set\"}},\"getPoolSetIdForCaller()\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the caller is not a pool set manager\"}},\"getPoolSetIdForManager(address)\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the address given is not a pool set manager\"}},\"getPoolsInSet(uint256,uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`). Reverts if the poolSetId is not valid.\",\"params\":{\"from\":\"Start index\",\"poolSetId\":\"Id of the set containing the pools\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"isPoolInSet(address,uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"pool\":\"Address of the pool to check\",\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the pool is in the given set, false otherwise\"}},\"isValidPoolSetId(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the poolSetId exists\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"removePoolsFromSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may remove pools from a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set to which the pools belong\",\"pools\":\"List of pools to remove from the set\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"details\":\"This contract must be granted permission to set swap and yield protocol fees, but governance can independently grant permission to call the swap and yield fee setters.\",\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\",\"pool\":\"The address of the pool\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"details\":\"This contract must be granted permission to set swap and yield protocol fees, but governance can independently grant permission to call the swap and yield fee setters.\",\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\",\"pool\":\"The address of the pool\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"transferPoolSetOwnership(address)\":{\"details\":\"This is a permissioned function. Only the current manager of a set can call this to set a new manager. Since managers can only control a single set, there is no need to specify the id in the call. Note that this is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts if the new manager address is zero or already the manager of a pool set.\",\"params\":{\"newManager\":\"The address of the new manager\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"InvalidPoolSetId(uint256)\":[{\"notice\":\"Pool set id associated with an operation is invalid.\"}],\"InvalidPoolSetManager()\":[{\"notice\":\"The initial manager of a pool set cannot be zero.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolNotInSet(address,uint256)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolSetManagerNotUnique(address)\":[{\"notice\":\"Pool set managers can only manage a single pool set.\"}],\"SenderIsNotPoolSetManager()\":[{\"notice\":\"Permissioned operations on pools can only be performed by the pool set manager.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"notice\":\"The owner added a pool to the given set.\"},\"PoolRemovedFromSet(address,uint256)\":{\"notice\":\"The owner removed a pool from the given set.\"},\"PoolSetCreated(uint256,address)\":{\"notice\":\"The owner created a new pool set.\"},\"PoolSetDestroyed(uint256,address)\":{\"notice\":\"The owner destroyed a pool set.\"},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"notice\":\"The current manager of a pool set transferred ownership to a new address.\"}},\"kind\":\"user\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"createPoolSet(address)\":{\"notice\":\"Create a new empty set with an initial manager.\"},\"createPoolSet(address,address[])\":{\"notice\":\"Create a new set with an initial manager, optionally initialized with a set of pools.\"},\"destroyPoolSet(uint256)\":{\"notice\":\"Simple way to remove an entire set of pools from control of the helper function.\"},\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAllPoolsInSet(uint256)\":{\"notice\":\"Get the full set of pools from a given set.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"},\"getManagerForPoolSet(uint256)\":{\"notice\":\"Get the manager address associated with a given poolSetId.\"},\"getNextPoolSetId()\":{\"notice\":\"Utility function to predict the next pool set id.\"},\"getPoolCountForSet(uint256)\":{\"notice\":\"Get the number of pools associated with the given set.\"},\"getPoolSetIdForCaller()\":{\"notice\":\"Get the pool set id associated with the caller.\"},\"getPoolSetIdForManager(address)\":{\"notice\":\"Get the pool set id associated with a given manager address.\"},\"getPoolsInSet(uint256,uint256,uint256)\":{\"notice\":\"Get a range of pools from a given set.\"},\"isPoolInSet(address,uint256)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"isValidPoolSetId(uint256)\":{\"notice\":\"Check whether a poolSetId has been created.\"},\"removePoolsFromSet(uint256,address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Set the protocol swap fee for a pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Set the protocol yield fee for a pool.\"},\"transferPoolSetOwnership(address)\":{\"notice\":\"Transfer ownership of a pool set from the current manager to a new manager.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ProtocolFeeHelper.sol\":\"ProtocolFeeHelper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xdb8365416c9dd9d7be16677c13819065511e9bc7705d6bad85fd52b65d3b3c39\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b90206982d126075b074f0a77ea9cb3ec173ed9fe9e4504b12d6807532b1b7ff\",\"dweb:/ipfs/QmYjKTu4Mrew94sSxfQ8jP4yT7wZFgghSRyB9A2kDdSy8X\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeHelper.sol\":{\"keccak256\":\"0x79b4a52c34d448b3a67d91d37319c08b2a2c45e1ef94c66f1102d1df05f672f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d85fcc28f6c2cfbeefdb307c551d8904f82b6c2fc3e5bc2e5deb111a6a1007f1\",\"dweb:/ipfs/QmWa96ZJajKfwhGemApEoFCpFmStKHaMLUaZwpTQjYjoF3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/PoolHelperCommon.sol\":{\"keccak256\":\"0x30381172c4e42784079cea20f474af84d39df274cb63f1a2e0426d823ff788e4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6311287a0f4d8b3b8af5c67599f8f8976137b22398fadd243df798baf525b0d6\",\"dweb:/ipfs/QmZuVsXAb7zveWUrEGDVUFrGdFe9AwC1xiGtMJx5vFE6Jc\"]},\"contracts/ProtocolFeeHelper.sol\":{\"keccak256\":\"0xb95fd02c5339c0a2762de1efb3f75e6d0c29b72ffc20a626a09f183f2d3baec1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1dcbfa9f53a907355fc237662f1aa6d4a8090cc41af5dc2b43d0f525a315d82e\",\"dweb:/ipfs/QmUF6cQZWEyQ3YPSA2XmuP4m57e2ha87G2DDaCmYQ7JiER\"]}},\"version\":1}"}},"contracts/ProtocolFeePercentagesProvider.sol":{"ProtocolFeePercentagesProvider":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IBalancerContractRegistry","name":"trustedContractRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"FactoryFeesNotSet","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"factory","type":"address"}],"name":"PoolNotFromFactory","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"UnknownFactory","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"indexed":false,"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"name":"FactorySpecificProtocolFeePercentagesSet","type":"event"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalancerContractRegistry","outputs":[{"internalType":"contract IBalancerContractRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"getFactorySpecificProtocolFeePercentages","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"name":"setFactorySpecificProtocolFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"setProtocolFeePercentagesForPools","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"finalize_allocation":{"entryPoint":510,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"61014060409080825234610169578181610ee1803803809161002182856101fe565b8339810103126101695780516001600160a01b03908181169081810361016957602080940151908382168203610169573060805282156101ef5760a052845163217cb6f560e21b8152918490839060049082905afa9182156101e5575f926101ad575b5060e082905260c05283516313b968ab60e11b81529391168284600481845afa938415610174575f9461017e575b5082600491610100958652835192838092630bc65c9d60e31b82525afa928315610174575f93610140575b50506101209182525190610cab9283610236843960805183610ab4015260a05183818161015f015281816102000152610668015260c05183818160e7015261077e015260e0518381816102500152610373015251826106f40152518161071b0152f35b9080929350813d831161016d575b61015881836101fe565b810103126101695751905f806100dd565b5f80fd5b503d61014e565b82513d5f823e3d90fd5b9093508281813d83116101a6575b61019681836101fe565b81010312610169575192826100b2565b503d61018c565b9091508381813d83116101de575b6101c581836101fe565b810103126101695751828116810361016957905f610084565b503d6101bb565b85513d5f823e3d90fd5b630647140b60e51b5f5260045ffd5b601f909101601f19168101906001600160401b0382119082101761022157604052565b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f35908160e01c918262859689146105d557508163344b12d5146102c4578163851c1bb31461027457816385f2dbd4146102245781638d928af8146101d4578163aaabadc51461010b57508063deb27a7a146100bb5763f2c24ec814610077575f80fd5b346100b75760206003193601126100b7576100986100936109b0565b610bd4565b67ffffffffffffffff6020818351169201511682519182526020820152f35b5f80fd5b50346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100b7575f6003193601126100b75773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa9182156101ca57926020935f9361019b575b505191168152f35b6101bc919350843d86116101c3575b6101b48183610a30565b810190610aee565b915f610193565b503d6101aa565b83513d5f823e3d90fd5b82346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b82346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100b75760206003193601126100b75735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100b7576102bd602092610a89565b9051908152f35b9050346100b757816003193601126100b7576102de6109b0565b60249182359167ffffffffffffffff8084116100b757366023850112156100b75783830135908082116105aa5760058260051b9560209689519461032489830187610a30565b85528888860191830101913683116100b7579880959901905b8282106105785750505061035084610bd4565b905f938783019573ffffffffffffffffffffffffffffffffffffffff80911692817f000000000000000000000000000000000000000000000000000000000000000016965b8b5181101561057657828b8d83851b01015116908d517f6634b753000000000000000000000000000000000000000000000000000000008152828c8201528c8187818a5afa90811561056c575f9161053f575b5015610510578787511691888b5116928a3b156100b7578f517ffd267f3900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83168e82019081526020810192909252905f90829081900360400181838f5af18015610505576104f6575b50893b156100b7578e517fabaa335600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116818d019081526020810193909352915f90839081906040010381838d5af19182156104ec576001926104dd575b5001610395565b6104e690610a1c565b5f6104d6565b8e513d5f823e3d90fd5b6104ff90610a1c565b5f610464565b508f513d5f823e3d90fd5b50915050877ff400ce63000000000000000000000000000000000000000000000000000000005f52525260445ffd5b61055f91508d803d10610565575b6105578183610a30565b810190610a71565b5f6103e8565b503d61054d565b8f513d5f823e3d90fd5b005b819995993573ffffffffffffffffffffffffffffffffffffffff811681036100b757815294989490880190880161033d565b856041857f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b9083346100b75760606003193601126100b7576105f06109b0565b92602435906106237fffffffff000000000000000000000000000000000000000000000000000000006044359216610a89565b73ffffffffffffffffffffffffffffffffffffffff9584517faaabadc5000000000000000000000000000000000000000000000000000000008152602092838289818c7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156109a6579184918a935f92610984575b50606490895194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084528d840152336024840152306044840152165afa90811561097a575f9161095d575b5015610936577f0000000000000000000000000000000000000000000000000000000000000000841161090f577f000000000000000000000000000000000000000000000000000000000000000083116108e85781879160448751809481937fae2733a400000000000000000000000000000000000000000000000000000000835260018c840152169a8b60248301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156108de575f916108c1575b5015610896577f2c3f7d4fd7252aea844c55450b24cac1853ac3a3293a3d0616193b7d854cf0f094506107e083610b1a565b6107e982610b1a565b6107f283610b8f565b6107fb83610b8f565b855191610807836109d3565b67ffffffffffffffff809116835280848401921682528683019060018252895f525f8552875f209351167fffffffffffffffffffffffffffffff000000000000000000000000000000000070ff000000000000000000000000000000006fffffffffffffffff0000000000000000865495518b1b169351151560801b16931617171790558351928352820152a2005b85857fc2a47384000000000000000000000000000000000000000000000000000000005f525260245ffd5b6108d89150823d8411610565576105578183610a30565b876107ae565b85513d5f823e3d90fd5b857fa7849e8e000000000000000000000000000000000000000000000000000000005f525ffd5b857f7e6eb7fb000000000000000000000000000000000000000000000000000000005f525ffd5b857f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b6109749150833d8511610565576105578183610a30565b886106ec565b86513d5f823e3d90fd5b606491925061099f90843d86116101c3576101b48183610a30565b919061069d565b87513d5f823e3d90fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100b757565b6060810190811067ffffffffffffffff8211176109ef57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116109ef57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109ef57604052565b908160209103126100b7575180151581036100b75790565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152610ae8816109d3565b51902090565b908160209103126100b7575173ffffffffffffffffffffffffffffffffffffffff811681036100b75790565b64174876e800808204818102918183041490151715610b625703610b3a57565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff90818111610ba4571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b9073ffffffffffffffffffffffffffffffffffffffff6040925f848051610bfa816109d3565b828152826020820152015216805f525f602052825f2060ff845191610c1e836109d3565b5467ffffffffffffffff808216845281871c16602084015260801c16159384159082015292610c4a5750565b7fa589c09e000000000000000000000000000000000000000000000000000000005f5260045260245ffdfea2646970667358221220675ca2229049ac0d86702a3f8b91328e9f60bdf58f2a73eeebdb46b3de39e33f64736f6c634300081b0033","opcodes":"PUSH2 0x140 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x169 JUMPI DUP2 DUP2 PUSH2 0xEE1 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x21 DUP3 DUP6 PUSH2 0x1FE JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x169 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP2 AND SWAP1 DUP2 DUP2 SUB PUSH2 0x169 JUMPI PUSH1 0x20 DUP1 SWAP5 ADD MLOAD SWAP1 DUP4 DUP3 AND DUP3 SUB PUSH2 0x169 JUMPI ADDRESS PUSH1 0x80 MSTORE DUP3 ISZERO PUSH2 0x1EF JUMPI PUSH1 0xA0 MSTORE DUP5 MLOAD PUSH4 0x217CB6F5 PUSH1 0xE2 SHL DUP2 MSTORE SWAP2 DUP5 SWAP1 DUP4 SWAP1 PUSH1 0x4 SWAP1 DUP3 SWAP1 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1E5 JUMPI PUSH0 SWAP3 PUSH2 0x1AD JUMPI JUMPDEST POP PUSH1 0xE0 DUP3 SWAP1 MSTORE PUSH1 0xC0 MSTORE DUP4 MLOAD PUSH4 0x13B968AB PUSH1 0xE1 SHL DUP2 MSTORE SWAP4 SWAP2 AND DUP3 DUP5 PUSH1 0x4 DUP2 DUP5 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x174 JUMPI PUSH0 SWAP5 PUSH2 0x17E JUMPI JUMPDEST POP DUP3 PUSH1 0x4 SWAP2 PUSH2 0x100 SWAP6 DUP7 MSTORE DUP4 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0xBC65C9D PUSH1 0xE3 SHL DUP3 MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x174 JUMPI PUSH0 SWAP4 PUSH2 0x140 JUMPI JUMPDEST POP POP PUSH2 0x120 SWAP2 DUP3 MSTORE MLOAD SWAP1 PUSH2 0xCAB SWAP3 DUP4 PUSH2 0x236 DUP5 CODECOPY PUSH1 0x80 MLOAD DUP4 PUSH2 0xAB4 ADD MSTORE PUSH1 0xA0 MLOAD DUP4 DUP2 DUP2 PUSH2 0x15F ADD MSTORE DUP2 DUP2 PUSH2 0x200 ADD MSTORE PUSH2 0x668 ADD MSTORE PUSH1 0xC0 MLOAD DUP4 DUP2 DUP2 PUSH1 0xE7 ADD MSTORE PUSH2 0x77E ADD MSTORE PUSH1 0xE0 MLOAD DUP4 DUP2 DUP2 PUSH2 0x250 ADD MSTORE PUSH2 0x373 ADD MSTORE MLOAD DUP3 PUSH2 0x6F4 ADD MSTORE MLOAD DUP2 PUSH2 0x71B ADD MSTORE RETURN JUMPDEST SWAP1 DUP1 SWAP3 SWAP4 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x16D JUMPI JUMPDEST PUSH2 0x158 DUP2 DUP4 PUSH2 0x1FE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x169 JUMPI MLOAD SWAP1 PUSH0 DUP1 PUSH2 0xDD JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x14E JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP4 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1A6 JUMPI JUMPDEST PUSH2 0x196 DUP2 DUP4 PUSH2 0x1FE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x169 JUMPI MLOAD SWAP3 DUP3 PUSH2 0xB2 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x18C JUMP JUMPDEST SWAP1 SWAP2 POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1DE JUMPI JUMPDEST PUSH2 0x1C5 DUP2 DUP4 PUSH2 0x1FE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x169 JUMPI MLOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x169 JUMPI SWAP1 PUSH0 PUSH2 0x84 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1BB JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x221 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH3 0x859689 EQ PUSH2 0x5D5 JUMPI POP DUP2 PUSH4 0x344B12D5 EQ PUSH2 0x2C4 JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x274 JUMPI DUP2 PUSH4 0x85F2DBD4 EQ PUSH2 0x224 JUMPI DUP2 PUSH4 0x8D928AF8 EQ PUSH2 0x1D4 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x10B JUMPI POP DUP1 PUSH4 0xDEB27A7A EQ PUSH2 0xBB JUMPI PUSH4 0xF2C24EC8 EQ PUSH2 0x77 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x98 PUSH2 0x93 PUSH2 0x9B0 JUMP JUMPDEST PUSH2 0xBD4 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x20 DUP2 DUP4 MLOAD AND SWAP3 ADD MLOAD AND DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1CA JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x19B JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1BC SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x1C3 JUMPI JUMPDEST PUSH2 0x1B4 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xAEE JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x193 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1AA JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xB7 JUMPI PUSH2 0x2BD PUSH1 0x20 SWAP3 PUSH2 0xA89 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x2DE PUSH2 0x9B0 JUMP JUMPDEST PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT PUSH2 0xB7 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0xB7 JUMPI DUP4 DUP4 ADD CALLDATALOAD SWAP1 DUP1 DUP3 GT PUSH2 0x5AA JUMPI PUSH1 0x5 DUP3 PUSH1 0x5 SHL SWAP6 PUSH1 0x20 SWAP7 DUP10 MLOAD SWAP5 PUSH2 0x324 DUP10 DUP4 ADD DUP8 PUSH2 0xA30 JUMP JUMPDEST DUP6 MSTORE DUP9 DUP9 DUP7 ADD SWAP2 DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xB7 JUMPI SWAP9 DUP1 SWAP6 SWAP10 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x578 JUMPI POP POP POP PUSH2 0x350 DUP5 PUSH2 0xBD4 JUMP JUMPDEST SWAP1 PUSH0 SWAP4 DUP8 DUP4 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP3 DUP2 PUSH32 0x0 AND SWAP7 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x576 JUMPI DUP3 DUP12 DUP14 DUP4 DUP6 SHL ADD ADD MLOAD AND SWAP1 DUP14 MLOAD PUSH32 0x6634B75300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP13 DUP3 ADD MSTORE DUP13 DUP2 DUP8 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x56C JUMPI PUSH0 SWAP2 PUSH2 0x53F JUMPI JUMPDEST POP ISZERO PUSH2 0x510 JUMPI DUP8 DUP8 MLOAD AND SWAP2 DUP9 DUP12 MLOAD AND SWAP3 DUP11 EXTCODESIZE ISZERO PUSH2 0xB7 JUMPI DUP16 MLOAD PUSH32 0xFD267F3900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP15 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 PUSH0 SWAP1 DUP3 SWAP1 DUP2 SWAP1 SUB PUSH1 0x40 ADD DUP2 DUP4 DUP16 GAS CALL DUP1 ISZERO PUSH2 0x505 JUMPI PUSH2 0x4F6 JUMPI JUMPDEST POP DUP10 EXTCODESIZE ISZERO PUSH2 0xB7 JUMPI DUP15 MLOAD PUSH32 0xABAA335600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 DUP14 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP14 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x4EC JUMPI PUSH1 0x1 SWAP3 PUSH2 0x4DD JUMPI JUMPDEST POP ADD PUSH2 0x395 JUMP JUMPDEST PUSH2 0x4E6 SWAP1 PUSH2 0xA1C JUMP JUMPDEST PUSH0 PUSH2 0x4D6 JUMP JUMPDEST DUP15 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x4FF SWAP1 PUSH2 0xA1C JUMP JUMPDEST PUSH0 PUSH2 0x464 JUMP JUMPDEST POP DUP16 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP2 POP POP DUP8 PUSH32 0xF400CE6300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x55F SWAP2 POP DUP14 DUP1 RETURNDATASIZE LT PUSH2 0x565 JUMPI JUMPDEST PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xA71 JUMP JUMPDEST PUSH0 PUSH2 0x3E8 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x54D JUMP JUMPDEST DUP16 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST STOP JUMPDEST DUP2 SWAP10 SWAP6 SWAP10 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB7 JUMPI DUP2 MSTORE SWAP5 SWAP9 SWAP5 SWAP1 DUP9 ADD SWAP1 DUP9 ADD PUSH2 0x33D JUMP JUMPDEST DUP6 PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP4 CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x5F0 PUSH2 0x9B0 JUMP JUMPDEST SWAP3 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x623 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x44 CALLDATALOAD SWAP3 AND PUSH2 0xA89 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP5 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 DUP10 DUP2 DUP13 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x9A6 JUMPI SWAP2 DUP5 SWAP2 DUP11 SWAP4 PUSH0 SWAP3 PUSH2 0x984 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 DUP10 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP14 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x97A JUMPI PUSH0 SWAP2 PUSH2 0x95D JUMPI JUMPDEST POP ISZERO PUSH2 0x936 JUMPI PUSH32 0x0 DUP5 GT PUSH2 0x90F JUMPI PUSH32 0x0 DUP4 GT PUSH2 0x8E8 JUMPI DUP2 DUP8 SWAP2 PUSH1 0x44 DUP8 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xAE2733A400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x1 DUP13 DUP5 ADD MSTORE AND SWAP11 DUP12 PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8DE JUMPI PUSH0 SWAP2 PUSH2 0x8C1 JUMPI JUMPDEST POP ISZERO PUSH2 0x896 JUMPI PUSH32 0x2C3F7D4FD7252AEA844C55450B24CAC1853AC3A3293A3D0616193B7D854CF0F0 SWAP5 POP PUSH2 0x7E0 DUP4 PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x7E9 DUP3 PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x7F2 DUP4 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x7FB DUP4 PUSH2 0xB8F JUMP JUMPDEST DUP6 MLOAD SWAP2 PUSH2 0x807 DUP4 PUSH2 0x9D3 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP4 MSTORE DUP1 DUP5 DUP5 ADD SWAP3 AND DUP3 MSTORE DUP7 DUP4 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE DUP10 PUSH0 MSTORE PUSH0 DUP6 MSTORE DUP8 PUSH0 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000 PUSH17 0xFF00000000000000000000000000000000 PUSH16 0xFFFFFFFFFFFFFFFF0000000000000000 DUP7 SLOAD SWAP6 MLOAD DUP12 SHL AND SWAP4 MLOAD ISZERO ISZERO PUSH1 0x80 SHL AND SWAP4 AND OR OR OR SWAP1 SSTORE DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE LOG2 STOP JUMPDEST DUP6 DUP6 PUSH32 0xC2A4738400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x8D8 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x565 JUMPI PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP8 PUSH2 0x7AE JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP6 PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP6 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x974 SWAP2 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x565 JUMPI PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP9 PUSH2 0x6EC JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x99F SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x1C3 JUMPI PUSH2 0x1B4 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x69D JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB7 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xB7 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xB7 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0xAE8 DUP2 PUSH2 0x9D3 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xB7 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB7 JUMPI SWAP1 JUMP JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0xB62 JUMPI SUB PUSH2 0xB3A JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0xBA4 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 SWAP3 PUSH0 DUP5 DUP1 MLOAD PUSH2 0xBFA DUP2 PUSH2 0x9D3 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 PUSH1 0xFF DUP5 MLOAD SWAP2 PUSH2 0xC1E DUP4 PUSH2 0x9D3 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP5 MSTORE DUP2 DUP8 SHR AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x80 SHR AND ISZERO SWAP4 DUP5 ISZERO SWAP1 DUP3 ADD MSTORE SWAP3 PUSH2 0xC4A JUMPI POP JUMP JUMPDEST PUSH32 0xA589C09E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH8 0x5CA2229049AC0D86 PUSH17 0x2A3F8B91328E9F60BDF58F2A73EEEBDB46 0xB3 0xDE CODECOPY 0xE3 EXTCODEHASH PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1136:7209:86:-:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1136:7209:86;;;;;;;;;;;;;;;;;;;;;;;922:4:46;1347:46:32;;943:28:44;;939:79;;1028:14;;1136:7209:86;;-1:-1:-1;;;2434:32:86;;1136:7209;1028:14:44;;1136:7209:86;;2434:32;;1136:7209;;2434:32;;;;;;;-1:-1:-1;2434:32:86;;;-1:-1:-1;;1136:7209:86;2477:46;;;2533:50;;1136:7209;;-1:-1:-1;;;2700:101:86;;1136:7209;;;2700:101;1136:7209;2434:32;1136:7209;;2700:101;;;;;;;-1:-1:-1;2700:101:86;;;-1:-1:-1;2668:133:86;;2434:32;2668:133;;;;;1136:7209;;;;;;;;;2844:102;;;;;;;;;-1:-1:-1;2844:102:86;;;-1:-1:-1;2811:135:86;;;;;;1136:7209;;;;;;;;1347:46:32;1136:7209:86;;;;;1028:14:44;1136:7209:86;;;;;;;;;;;;;;;2533:50;1136:7209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2844:102;;;;;;;;;;;;;;;;;:::i;:::-;;;1136:7209;;;;;2844:102;;;;;1136:7209;-1:-1:-1;1136:7209:86;;2844:102;;;;;;1136:7209;;;-1:-1:-1;1136:7209:86;;;;;2700:101;;;;;;;;;;;;;;;;;:::i;:::-;;;1136:7209;;;;;;;2700:101;;;;;;;2434:32;;;;;;;;;;;;;;;;;:::i;:::-;;;1136:7209;;;;;;;;;;;;2434:32;;;;;;;;;;1136:7209;;;-1:-1:-1;1136:7209:86;;;;;939:79:44;994:13;;;-1:-1:-1;994:13:44;;-1:-1:-1;994:13:44;1136:7209:86;;;;;-1:-1:-1;;1136:7209:86;;;;-1:-1:-1;;;;;1136:7209:86;;;;;;;;;;:::o;:::-;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":2480,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":2673,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":2798,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":2608,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_6540":{"entryPoint":2515,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_6542":{"entryPoint":2588,"id":null,"parameterSlots":1,"returnSlots":0},"fun_ensureValidPrecision":{"entryPoint":2842,"id":22308,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":2697,"id":4356,"parameterSlots":1,"returnSlots":1},"fun_getValidatedProtocolFees":{"entryPoint":3028,"id":22261,"parameterSlots":1,"returnSlots":1},"fun_toUint64":{"entryPoint":2959,"id":15008,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4296":[{"length":32,"start":2740}],"7340":[{"length":32,"start":351},{"length":32,"start":512},{"length":32,"start":1640}],"21987":[{"length":32,"start":231},{"length":32,"start":1918}],"21990":[{"length":32,"start":592},{"length":32,"start":883}],"21992":[{"length":32,"start":1780}],"21994":[{"length":32,"start":1819}]},"linkReferences":{},"object":"604060808152600480361015610013575f80fd5b5f35908160e01c918262859689146105d557508163344b12d5146102c4578163851c1bb31461027457816385f2dbd4146102245781638d928af8146101d4578163aaabadc51461010b57508063deb27a7a146100bb5763f2c24ec814610077575f80fd5b346100b75760206003193601126100b7576100986100936109b0565b610bd4565b67ffffffffffffffff6020818351169201511682519182526020820152f35b5f80fd5b50346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100b7575f6003193601126100b75773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa9182156101ca57926020935f9361019b575b505191168152f35b6101bc919350843d86116101c3575b6101b48183610a30565b810190610aee565b915f610193565b503d6101aa565b83513d5f823e3d90fd5b82346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b82346100b7575f6003193601126100b7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346100b75760206003193601126100b75735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100b7576102bd602092610a89565b9051908152f35b9050346100b757816003193601126100b7576102de6109b0565b60249182359167ffffffffffffffff8084116100b757366023850112156100b75783830135908082116105aa5760058260051b9560209689519461032489830187610a30565b85528888860191830101913683116100b7579880959901905b8282106105785750505061035084610bd4565b905f938783019573ffffffffffffffffffffffffffffffffffffffff80911692817f000000000000000000000000000000000000000000000000000000000000000016965b8b5181101561057657828b8d83851b01015116908d517f6634b753000000000000000000000000000000000000000000000000000000008152828c8201528c8187818a5afa90811561056c575f9161053f575b5015610510578787511691888b5116928a3b156100b7578f517ffd267f3900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83168e82019081526020810192909252905f90829081900360400181838f5af18015610505576104f6575b50893b156100b7578e517fabaa335600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116818d019081526020810193909352915f90839081906040010381838d5af19182156104ec576001926104dd575b5001610395565b6104e690610a1c565b5f6104d6565b8e513d5f823e3d90fd5b6104ff90610a1c565b5f610464565b508f513d5f823e3d90fd5b50915050877ff400ce63000000000000000000000000000000000000000000000000000000005f52525260445ffd5b61055f91508d803d10610565575b6105578183610a30565b810190610a71565b5f6103e8565b503d61054d565b8f513d5f823e3d90fd5b005b819995993573ffffffffffffffffffffffffffffffffffffffff811681036100b757815294989490880190880161033d565b856041857f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b9083346100b75760606003193601126100b7576105f06109b0565b92602435906106237fffffffff000000000000000000000000000000000000000000000000000000006044359216610a89565b73ffffffffffffffffffffffffffffffffffffffff9584517faaabadc5000000000000000000000000000000000000000000000000000000008152602092838289818c7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156109a6579184918a935f92610984575b50606490895194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084528d840152336024840152306044840152165afa90811561097a575f9161095d575b5015610936577f0000000000000000000000000000000000000000000000000000000000000000841161090f577f000000000000000000000000000000000000000000000000000000000000000083116108e85781879160448751809481937fae2733a400000000000000000000000000000000000000000000000000000000835260018c840152169a8b60248301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156108de575f916108c1575b5015610896577f2c3f7d4fd7252aea844c55450b24cac1853ac3a3293a3d0616193b7d854cf0f094506107e083610b1a565b6107e982610b1a565b6107f283610b8f565b6107fb83610b8f565b855191610807836109d3565b67ffffffffffffffff809116835280848401921682528683019060018252895f525f8552875f209351167fffffffffffffffffffffffffffffff000000000000000000000000000000000070ff000000000000000000000000000000006fffffffffffffffff0000000000000000865495518b1b169351151560801b16931617171790558351928352820152a2005b85857fc2a47384000000000000000000000000000000000000000000000000000000005f525260245ffd5b6108d89150823d8411610565576105578183610a30565b876107ae565b85513d5f823e3d90fd5b857fa7849e8e000000000000000000000000000000000000000000000000000000005f525ffd5b857f7e6eb7fb000000000000000000000000000000000000000000000000000000005f525ffd5b857f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b6109749150833d8511610565576105578183610a30565b886106ec565b86513d5f823e3d90fd5b606491925061099f90843d86116101c3576101b48183610a30565b919061069d565b87513d5f823e3d90fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100b757565b6060810190811067ffffffffffffffff8211176109ef57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116109ef57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109ef57604052565b908160209103126100b7575180151581036100b75790565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f0000000000000000000000000000000000000000000000000000000000000000845216604082015260248152610ae8816109d3565b51902090565b908160209103126100b7575173ffffffffffffffffffffffffffffffffffffffff811681036100b75790565b64174876e800808204818102918183041490151715610b625703610b3a57565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff90818111610ba4571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b9073ffffffffffffffffffffffffffffffffffffffff6040925f848051610bfa816109d3565b828152826020820152015216805f525f602052825f2060ff845191610c1e836109d3565b5467ffffffffffffffff808216845281871c16602084015260801c16159384159082015292610c4a5750565b7fa589c09e000000000000000000000000000000000000000000000000000000005f5260045260245ffdfea2646970667358221220675ca2229049ac0d86702a3f8b91328e9f60bdf58f2a73eeebdb46b3de39e33f64736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD SWAP1 DUP2 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH3 0x859689 EQ PUSH2 0x5D5 JUMPI POP DUP2 PUSH4 0x344B12D5 EQ PUSH2 0x2C4 JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x274 JUMPI DUP2 PUSH4 0x85F2DBD4 EQ PUSH2 0x224 JUMPI DUP2 PUSH4 0x8D928AF8 EQ PUSH2 0x1D4 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x10B JUMPI POP DUP1 PUSH4 0xDEB27A7A EQ PUSH2 0xBB JUMPI PUSH4 0xF2C24EC8 EQ PUSH2 0x77 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x98 PUSH2 0x93 PUSH2 0x9B0 JUMP JUMPDEST PUSH2 0xBD4 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x20 DUP2 DUP4 MLOAD AND SWAP3 ADD MLOAD AND DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1CA JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x19B JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1BC SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x1C3 JUMPI JUMPDEST PUSH2 0x1B4 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xAEE JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x193 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1AA JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0xB7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xB7 JUMPI PUSH2 0x2BD PUSH1 0x20 SWAP3 PUSH2 0xA89 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xB7 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x2DE PUSH2 0x9B0 JUMP JUMPDEST PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT PUSH2 0xB7 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0xB7 JUMPI DUP4 DUP4 ADD CALLDATALOAD SWAP1 DUP1 DUP3 GT PUSH2 0x5AA JUMPI PUSH1 0x5 DUP3 PUSH1 0x5 SHL SWAP6 PUSH1 0x20 SWAP7 DUP10 MLOAD SWAP5 PUSH2 0x324 DUP10 DUP4 ADD DUP8 PUSH2 0xA30 JUMP JUMPDEST DUP6 MSTORE DUP9 DUP9 DUP7 ADD SWAP2 DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xB7 JUMPI SWAP9 DUP1 SWAP6 SWAP10 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x578 JUMPI POP POP POP PUSH2 0x350 DUP5 PUSH2 0xBD4 JUMP JUMPDEST SWAP1 PUSH0 SWAP4 DUP8 DUP4 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP3 DUP2 PUSH32 0x0 AND SWAP7 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x576 JUMPI DUP3 DUP12 DUP14 DUP4 DUP6 SHL ADD ADD MLOAD AND SWAP1 DUP14 MLOAD PUSH32 0x6634B75300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP13 DUP3 ADD MSTORE DUP13 DUP2 DUP8 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x56C JUMPI PUSH0 SWAP2 PUSH2 0x53F JUMPI JUMPDEST POP ISZERO PUSH2 0x510 JUMPI DUP8 DUP8 MLOAD AND SWAP2 DUP9 DUP12 MLOAD AND SWAP3 DUP11 EXTCODESIZE ISZERO PUSH2 0xB7 JUMPI DUP16 MLOAD PUSH32 0xFD267F3900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP15 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 PUSH0 SWAP1 DUP3 SWAP1 DUP2 SWAP1 SUB PUSH1 0x40 ADD DUP2 DUP4 DUP16 GAS CALL DUP1 ISZERO PUSH2 0x505 JUMPI PUSH2 0x4F6 JUMPI JUMPDEST POP DUP10 EXTCODESIZE ISZERO PUSH2 0xB7 JUMPI DUP15 MLOAD PUSH32 0xABAA335600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 DUP14 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP14 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x4EC JUMPI PUSH1 0x1 SWAP3 PUSH2 0x4DD JUMPI JUMPDEST POP ADD PUSH2 0x395 JUMP JUMPDEST PUSH2 0x4E6 SWAP1 PUSH2 0xA1C JUMP JUMPDEST PUSH0 PUSH2 0x4D6 JUMP JUMPDEST DUP15 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x4FF SWAP1 PUSH2 0xA1C JUMP JUMPDEST PUSH0 PUSH2 0x464 JUMP JUMPDEST POP DUP16 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP2 POP POP DUP8 PUSH32 0xF400CE6300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x55F SWAP2 POP DUP14 DUP1 RETURNDATASIZE LT PUSH2 0x565 JUMPI JUMPDEST PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xA71 JUMP JUMPDEST PUSH0 PUSH2 0x3E8 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x54D JUMP JUMPDEST DUP16 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST STOP JUMPDEST DUP2 SWAP10 SWAP6 SWAP10 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB7 JUMPI DUP2 MSTORE SWAP5 SWAP9 SWAP5 SWAP1 DUP9 ADD SWAP1 DUP9 ADD PUSH2 0x33D JUMP JUMPDEST DUP6 PUSH1 0x41 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP4 CALLVALUE PUSH2 0xB7 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB7 JUMPI PUSH2 0x5F0 PUSH2 0x9B0 JUMP JUMPDEST SWAP3 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x623 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x44 CALLDATALOAD SWAP3 AND PUSH2 0xA89 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP5 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 DUP10 DUP2 DUP13 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x9A6 JUMPI SWAP2 DUP5 SWAP2 DUP11 SWAP4 PUSH0 SWAP3 PUSH2 0x984 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 DUP10 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP14 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x97A JUMPI PUSH0 SWAP2 PUSH2 0x95D JUMPI JUMPDEST POP ISZERO PUSH2 0x936 JUMPI PUSH32 0x0 DUP5 GT PUSH2 0x90F JUMPI PUSH32 0x0 DUP4 GT PUSH2 0x8E8 JUMPI DUP2 DUP8 SWAP2 PUSH1 0x44 DUP8 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xAE2733A400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x1 DUP13 DUP5 ADD MSTORE AND SWAP11 DUP12 PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8DE JUMPI PUSH0 SWAP2 PUSH2 0x8C1 JUMPI JUMPDEST POP ISZERO PUSH2 0x896 JUMPI PUSH32 0x2C3F7D4FD7252AEA844C55450B24CAC1853AC3A3293A3D0616193B7D854CF0F0 SWAP5 POP PUSH2 0x7E0 DUP4 PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x7E9 DUP3 PUSH2 0xB1A JUMP JUMPDEST PUSH2 0x7F2 DUP4 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x7FB DUP4 PUSH2 0xB8F JUMP JUMPDEST DUP6 MLOAD SWAP2 PUSH2 0x807 DUP4 PUSH2 0x9D3 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP4 MSTORE DUP1 DUP5 DUP5 ADD SWAP3 AND DUP3 MSTORE DUP7 DUP4 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE DUP10 PUSH0 MSTORE PUSH0 DUP6 MSTORE DUP8 PUSH0 KECCAK256 SWAP4 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000 PUSH17 0xFF00000000000000000000000000000000 PUSH16 0xFFFFFFFFFFFFFFFF0000000000000000 DUP7 SLOAD SWAP6 MLOAD DUP12 SHL AND SWAP4 MLOAD ISZERO ISZERO PUSH1 0x80 SHL AND SWAP4 AND OR OR OR SWAP1 SSTORE DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE LOG2 STOP JUMPDEST DUP6 DUP6 PUSH32 0xC2A4738400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x8D8 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x565 JUMPI PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP8 PUSH2 0x7AE JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP6 PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP6 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x974 SWAP2 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x565 JUMPI PUSH2 0x557 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST DUP9 PUSH2 0x6EC JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x99F SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x1C3 JUMPI PUSH2 0x1B4 DUP2 DUP4 PUSH2 0xA30 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x69D JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB7 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x9EF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xB7 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xB7 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0xAE8 DUP2 PUSH2 0x9D3 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xB7 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB7 JUMPI SWAP1 JUMP JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0xB62 JUMPI SUB PUSH2 0xB3A JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0xBA4 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 SWAP3 PUSH0 DUP5 DUP1 MLOAD PUSH2 0xBFA DUP2 PUSH2 0x9D3 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 PUSH1 0xFF DUP5 MLOAD SWAP2 PUSH2 0xC1E DUP4 PUSH2 0x9D3 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP5 MSTORE DUP2 DUP8 SHR AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x80 SHR AND ISZERO SWAP4 DUP5 ISZERO SWAP1 DUP3 ADD MSTORE SWAP3 PUSH2 0xC4A JUMPI POP JUMP JUMPDEST PUSH32 0xA589C09E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH8 0x5CA2229049AC0D86 PUSH17 0x2A3F8B91328E9F60BDF58F2A73EEEBDB46 0xB3 0xDE CODECOPY 0xE3 EXTCODEHASH PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1136:7209:86:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1581:26:46;;1136:7209:86;1581:26:46;;;1136:7209:86;;;;;;;;;;;;-1:-1:-1;;1136:7209:86;;;;;3619:34;1136:7209;;:::i;:::-;3619:34;:::i;:::-;1136:7209;;;;;;3768:38;;1136:7209;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1136:7209:86;;;;;;;;;3304:24;1136:7209;;;;;;;;;;;-1:-1:-1;;1136:7209:86;;;;;;1581:26:46;1136:7209:86;;1581:26:46;;1136:7209:86;1581:26:46;;1124:6:44;;;1136:7209:86;1581:26:46;;;;;;;;;;1136:7209:86;1581:26:46;;;1136:7209:86;;;;;;;;1581:26:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;1136:7209:86;;;;;;;;;;;;;;;-1:-1:-1;;1136:7209:86;;;;;;;;;1124:6:44;1136:7209:86;;;;;;;;;;-1:-1:-1;;1136:7209:86;;;;;;;;;3111:22;1136:7209;;;;;;;;;;;-1:-1:-1;;1136:7209:86;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;1136:7209:86;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5862:34;;;;;;:::i;:::-;5912:13;1136:7209;6451:38;;;;1136:7209;;;;;7227:22;;;1136:7209;5907:607;5945:3;1136:7209;;5927:16;;;;;1136:7209;;;;;;;;;;;;;;6168:56;;;;;;1136:7209;6168:56;;;;;;;;;;;;1136:7209;6168:56;;;5945:3;1136:7209;;6164:151;;1136:7209;;;;;;;;;7227:84;;;;;;1136:7209;;;7227:84;;1136:7209;;;7227:84;;;1136:7209;;;;;;;;;;;-1:-1:-1;;1136:7209:86;;7227:84;;;1136:7209;7227:84;1136:7209;-1:-1:-1;1136:7209:86;7227:84;;;;;;;;5945:3;7321:86;;;;;;1136:7209;;;7321:86;;1136:7209;;;;7321:86;;;1136:7209;;;;;;;;;;;;;;;;;;;7321:86;;;;;;;;;;;1136:7209;7321:86;;;5945:3;;1136:7209;5912:13;;7321:86;;;;:::i;:::-;;;;;1136:7209;;;;;;;;;7227:84;;;;:::i;:::-;;;;;1136:7209;;;;;;;;;;6164:151;6260:40;;;;;;1136:7209;6260:40;1136:7209;;;;6260:40;6168:56;;;;;;;-1:-1:-1;6168:56:86;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;1136:7209;;;;;;;;;5927:16;1136:7209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1136:7209:86;;;;;;;:::i;:::-;;;;;1762:20:32;1774:7;1136:7209:86;;1774:7:32;;1762:20;:::i;:::-;1136:7209:86;;;;;1336:22:44;;1136:7209:86;1336:6:44;;;;;;;1136:7209:86;1336:22:44;;;;;;;;;;;;1136:7209:86;1336:22:44;;;1136:7209:86;;;;;;1336:64:44;;;;;1136:7209:86;1336:64:44;;;;;1136:7209:86;1820:10:32;1136:7209:86;;;;1394:4:44;1136:7209:86;;;;;1336:64:44;;;;;;;1136:7209:86;1336:64:44;;;1136:7209:86;1797:34:32;;1793:90;;4208:29:86;4180:57;;4176:152;;4371:30;4342:59;;4338:155;;1136:7209;;;;;;4547:85;;;;1136:7209;4547:85;;1136:7209;4547:85;;;1136:7209;;;;;;;;4547:24;1136:7209;4547:85;;;;;;;1136:7209;4547:85;;;1136:7209;;;4543:155;;5253:104;4776:25;;;;;:::i;:::-;4834:26;;;:::i;:::-;5074:36;;;:::i;:::-;5152:37;;;:::i;:::-;1136:7209;;;;;;:::i;:::-;;;;;;;5013:224;;;;1136:7209;;;;5013:224;;;1136:7209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5253:104;1136:7209;4543:155;4664:23;;;1136:7209;4664:23;1136:7209;;;4664:23;4547:85;;;;;;;;;;;;;;:::i;:::-;;;;;1136:7209;;;;;;;;;4338:155;4424:58;;1136:7209;4424:58;1136:7209;4424:58;4176:152;4260:57;;1136:7209;4260:57;1136:7209;4260:57;1793:90:32;1854:18;;1136:7209:86;1854:18:32;1136:7209:86;1854:18:32;1336:64:44;;;;;;;;;;;;;;:::i;:::-;;;;;1136:7209:86;;;;;;;;;1336:22:44;1136:7209:86;1336:22:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;1136:7209:86;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;1931:430:32:-;1136:7209:86;;;2303:50:32;;;2320:22;;1136:7209:86;;;;;;;2303:50:32;;;;;;:::i;:::-;1136:7209:86;2293:61:32;;1931:430;:::o;1136:7209:86:-;;;;;;;;;;;;;;;;;;:::o;7594:749::-;19669:4:31;;;;;;;;;;;;;;;;;;8195:74:86;8191:146;;7594:749::o;8191:146::-;8292:34;-1:-1:-1;8292:34:86;;-1:-1:-1;8292:34:86;19669:4:31;;-1:-1:-1;19669:4:31;;;;;-1:-1:-1;19669:4:31;13296:213:70;1136:7209:86;13374:24:70;;;;13370:103;;1136:7209:86;13296:213:70;:::o;13370:103::-;13421:41;;;13452:2;13421:41;1136:7209:86;;;;13421:41:70;;6526:313:86;;1136:7209;;;-1:-1:-1;1136:7209:86;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1136:7209:86;-1:-1:-1;1136:7209:86;;;-1:-1:-1;1136:7209:86;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;6731:102;;;6526:313;:::o;6731:102::-;6796:26;-1:-1:-1;6796:26:86;;1136:7209;;-1:-1:-1;6796:26:86"},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getBalancerContractRegistry()":"deb27a7a","getFactorySpecificProtocolFeePercentages(address)":"f2c24ec8","getProtocolFeeController()":"85f2dbd4","getVault()":"8d928af8","setFactorySpecificProtocolFeePercentages(address,uint256,uint256)":"00859689","setProtocolFeePercentagesForPools(address,address[])":"344b12d5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IBalancerContractRegistry\",\"name\":\"trustedContractRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"FactoryFeesNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"PoolNotFromFactory\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"UnknownFactory\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"FactorySpecificProtocolFeePercentagesSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBalancerContractRegistry\",\"outputs\":[{\"internalType\":\"contract IBalancerContractRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"getFactorySpecificProtocolFeePercentages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setFactorySpecificProtocolFeePercentages\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"setProtocolFeePercentagesForPools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"FactoryFeesNotSet(address)\":[{\"details\":\"This error can by thrown by `getFactorySpecificProtocolFeePercentages` or `setProtocolFeePercentagesForPools`, as both require that valid fee percentages have been set. You need to set the factory fees before you can apply them to pools from that factory.\",\"params\":{\"factory\":\"The factory address where fees have not been set\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"PoolNotFromFactory(address,address)\":[{\"details\":\"Occurs when one of the pools supplied to `setProtocolFeePercentagesForPools` is not from the given factory.\",\"params\":{\"factory\":\"The address of the factory\",\"pool\":\"The address of the unrecognized pool\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"UnknownFactory(address)\":[{\"params\":{\"factory\":\"The address of the unknown factory\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"FactorySpecificProtocolFeePercentagesSet(address,uint256,uint256)\":{\"params\":{\"factory\":\"The pool factory\",\"protocolSwapFeePercentage\":\"The protocol swap fee percentage intended for pools from this factory\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage intended for pools from this factory\"}}},\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getBalancerContractRegistry()\":{\"returns\":{\"_0\":\"The address of the Balancer contract registry\"}},\"getFactorySpecificProtocolFeePercentages(address)\":{\"params\":{\"factory\":\"The address of the factory\"},\"returns\":{\"protocolSwapFeePercentage\":\"The protocol swap fee percentage set for that factory\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage set for that factory\"}},\"getProtocolFeeController()\":{\"returns\":{\"_0\":\"The address of the fee controller\"}},\"getVault()\":{\"details\":\"This function is virtual to allow for overriding in derived contracts which also inherits contracts with `getVault()` definition.\",\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"setFactorySpecificProtocolFeePercentages(address,uint256,uint256)\":{\"details\":\"This is a permissioned call. After the fee percentages have been set, and governance has granted this contract permission to set fee percentages on pools, anyone can call `setProtocolFeePercentagesForPools` to update the fee percentages on a set of pools from that factory.\",\"params\":{\"factory\":\"The address of the factory\",\"protocolSwapFeePercentage\":\"The new protocol swap fee percentage\",\"protocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setProtocolFeePercentagesForPools(address,address[])\":{\"details\":\"This call is permissionless. Anyone can update the fee percentages, once they're set by governance. Note that governance must also grant this contract permission to set protocol fee percentages on pools.\",\"params\":{\"factory\":\"The address of the factory\",\"pools\":\"The pools whose fees will be set according to `setFactorySpecificProtocolFeePercentages`\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"FactoryFeesNotSet(address)\":[{\"notice\":\"`setFactorySpecificProtocolFeePercentages` has not been called for this factory address.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"PoolNotFromFactory(address,address)\":[{\"notice\":\"The given pool is not from the expected factory.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"UnknownFactory(address)\":[{\"notice\":\"Fees can only be set on recognized factories (i.e., registered in the `BalancerContractRegistry`).\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The protocol fee controller was configured with an incorrect Vault address.\"}]},\"events\":{\"FactorySpecificProtocolFeePercentagesSet(address,uint256,uint256)\":{\"notice\":\"Protocol fee percentages have been set for the given factory.\"}},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getBalancerContractRegistry()\":{\"notice\":\"Get the address of the `BalancerContractRegistry` used to validate factory contracts.\"},\"getFactorySpecificProtocolFeePercentages(address)\":{\"notice\":\"Query the protocol fee percentages for a given factory.\"},\"getProtocolFeeController()\":{\"notice\":\"Get the address of the `ProtocolFeeController` used to set fees.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"setFactorySpecificProtocolFeePercentages(address,uint256,uint256)\":{\"notice\":\"Assign intended protocol fee percentages for a given factory.\"},\"setProtocolFeePercentagesForPools(address,address[])\":{\"notice\":\"Update the protocol fees for a set of pools from a given factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ProtocolFeePercentagesProvider.sol\":\"ProtocolFeePercentagesProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0x6f8c558b0520faae0c4576f30225b5a97821a4cd210878a0ba10c102a2f753f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b40aa7a5ee39fa2e297c684fd29ad45d866f1fc61cd997120a417b02a4d908aa\",\"dweb:/ipfs/QmYP5pQAF7SDLgy3aerqfnc4VwdmfQix2jcQUNL3o83BY9\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xcb2fa9725bb158d1bd24984d39da7b69628d390740ef13b5578ecab903e0be0b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://fa02bc7433e3c93261e6644049bc2bddb474a7071874eaad4b4150af1afbb43f\",\"dweb:/ipfs/QmR2jYnyT7zg3wWbn4qpUhzpMoYVd9iZ7HsE1FNJqrFtUM\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0x4e6eceea41f31faa3f4228315c1d54c0d6f7befaaa1d158775e0b2a860c9de12\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6fc6d998ca7860d5c8f08a4fc045d5d1ebdcb4c777e934f6cd081d05252a024f\",\"dweb:/ipfs/QmbsPGHVrBdVfpcWkm3BNWPQXUZWbvPb6VGiEbf5ezvAmj\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x11ec2b653633cbcc6a99d426df178007a98d1154a39a1ada961239be39eec069\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://40eed42ee57746bbf4711bb4aee856328cd70cc02aa3ff05e8dd719868fcd524\",\"dweb:/ipfs/QmX5uAoB9W6UUehgSRvVW6hun3XE53eZwKsm4kHVqtJs8C\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"contracts/ProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xfeb8192a52018fbe8fa3df7398ca90b42487e1ae128473ac60895740a10d97c7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://05898cb2e0b82b2910aa891d1657be38189c180590f949145ab61b7cbd8552f7\",\"dweb:/ipfs/QmSnHhbmrCBhnjsSHbVPswBm7NHsUHq5zzQV2wqZqokoqA\"]}},\"version\":1}"}},"contracts/ProtocolFeeSweeper.sol":{"ProtocolFeeSweeper":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"feeRecipient","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BurnerDidNotConsumeAllowance","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"InvalidFeeRecipient","type":"error"},{"inputs":[],"name":"InvalidProtocolFeeBurner","type":"error"},{"inputs":[],"name":"InvalidTargetToken","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerAlreadyAdded","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerNotAdded","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"UnsupportedProtocolFeeBurner","type":"error"},{"inputs":[],"name":"UnwrapIsNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"feeRecipient","type":"address"}],"name":"FeeRecipientSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"ProtocolFeeBurnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"feeTokenAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeSwept","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TargetTokenSet","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"contract IProtocolFeeBurner","name":"protocolFeeBurner","type":"address"}],"name":"addProtocolFeeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTargetToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"protocolFeeBurner","type":"address"}],"name":"isApprovedProtocolFeeBurner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"feeTokens","type":"address[]"}],"name":"recoverProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeBurner","name":"protocolFeeBurner","type":"address"}],"name":"removeProtocolFeeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feeRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"targetToken","type":"address"}],"name":"setTargetToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"contract IProtocolFeeBurner","name":"feeBurner","type":"address"}],"name":"sweepProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC4626","name":"feeToken","type":"address"},{"internalType":"uint256","name":"minTargetTokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"contract IProtocolFeeBurner","name":"feeBurner","type":"address"}],"name":"sweepProtocolFeesForWrappedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c0346100fe57601f611ced38819003918201601f19168301916001600160401b038311848410176101025780849260409485528339810103126100fe5780516001600160a01b0391828216908183036100fe57602001519283168093036100fe5730608052156100ef5760a05280156100e057600180546001600160a01b03191682179055604051907fbf9a9534339a9d6b81696e05dcfb614b7dc518a31d48be3cfb757988381fb3235f80a2611bd6908161011782396080518161173f015260a051818181610d3b01528181610e25015281816117cd01526118f40152f35b630ed1b8b360e31b5f5260045ffd5b630647140b60e51b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe604060808152600490813610156100a0575b361561007957346100795790602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600f60248201527f4e6f7420696d706c656d656e74656400000000000000000000000000000000006044820152fd5b507ff2238896000000000000000000000000000000000000000000000000000000005f525ffd5b5f3560e01c80631b66cb00146115a45780634ccb20c01461157057806380db0d511461153d578063851c1bb3146114ed57806385f2dbd4146114b457806388f6d2a414610e495780638d928af814610df95780639c5cee9b14610db0578063aaabadc514610ce7578063b0edcc5314610ae1578063b11f061e14610a0b578063b974699514610302578063e20c482f146101fe5763e74b981b036100115750346101fa5760206003193601126101fa57610158611630565b6001549073ffffffffffffffffffffffffffffffffffffffff9061017e82841630611872565b169182156101d457507fffffffffffffffffffffffff00000000000000000000000000000000000000001681176001557fbf9a9534339a9d6b81696e05dcfb614b7dc518a31d48be3cfb757988381fb3235f80a2005b7f768dc598000000000000000000000000000000000000000000000000000000005f525ffd5b5f80fd5b50346101fa5760206003193601126101fa57610218611630565b73ffffffffffffffffffffffffffffffffffffffff9061023c826001541630611872565b1691825f52600260205260ff825f2054166102d75782156102b15750815f5260026020525f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f0ef09fc346b7c2cae78d9a37ed785840e7d3c6072022cd8c41c3b37a239b7fd15f80a2005b7f31ec2736000000000000000000000000000000000000000000000000000000005f525ffd5b90507f6fe47af6000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101fa5760a06003193601126101fa5761031d611630565b602490813573ffffffffffffffffffffffffffffffffffffffff948582168083036101fa5761034a611653565b926103536119fd565b610361886001541630611872565b8095885f9516918261099d575b84517f70a08231000000000000000000000000000000000000000000000000000000009a8b8252308b83015260209586838681845afa928315610993575f93610964575b50816103bc61178a565b1693843b156101fa578c9489517f8f4ab9ca000000000000000000000000000000000000000000000000000000008152848d1680978201525f81898183865af1801561095a57610947575b50803b15610727578a868f606490838e5195869485937fb53a70b2000000000000000000000000000000000000000000000000000000008552840152308d8401528860448401525af1801561093d57610929575b508c9d89519d8e91825230910152878d8781855afa9c8d156108aa578a9d6108fa575b50838d03938d85116108cf57849d036104b7575b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b86156108b45750885482169281840361051d57505050505050505050806104f657506104e39350611abb565b5f80808080808080808080808080610492565b807fca9e3a1e00000000000000000000000000000000000000000000000000000000869252fd5b9091929395979a949698809c9a50610782575b505088517f095ea7b30000000000000000000000000000000000000000000000000000000081890181815273ffffffffffffffffffffffffffffffffffffffff8916838901908152602081018c90529192918a918e916105bc9085906040015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018652856116d3565b83519082895af18c513d82610764575b50501561072b575b5050806001541692863b15610727578951947fde557a320000000000000000000000000000000000000000000000000000000086528c8601521696878585015260448401526064830152604435608483015260a482015260643560c4820152868160e48183875af1801561071d578493929188916106fe575b5050604490865195869384927fdd62ed3e000000000000000000000000000000000000000000000000000000008452308c8501528301525afa9283156106f5575083926106c7575b50506106a25750506104e3565b7fc5bc8d51000000000000000000000000000000000000000000000000000000008152fd5b90809250813d83116106ee575b6106de81836116d3565b810103126101fa57515f80610695565b503d6106d4565b513d85823e3d90fd5b61070b9192939450611676565b61071957908291865f61064d565b8580fd5b86513d89823e3d90fd5b8a80fd5b61075761075d928c51908b82015289898201528d604482015260448152610751816116b7565b86611b19565b84611b19565b5f806105d4565b90915061077a57508285163b15155b5f806105cc565b600114610773565b8a517f38d52e0f000000000000000000000000000000000000000000000000000000008152919c9b9a9950935087818c818f5afa9081156108aa57889183918c9161086b575b50169389519c8d917fba0876520000000000000000000000000000000000000000000000000000000083528d8301523088830152306044830152818c5a92606493f19a8b156108615798809a9b899a829161082c575b509850859050610590610530565b995050508688813d831161085a575b61084581836116d3565b810103126101fa5796518897908a908861081e565b503d61083b565b88513d8b823e3d90fd5b928092508391503d83116108a3575b61088481836116d3565b8101031261089f5751818116810361089f578188915f6107c8565b8980fd5b503d61087a565b89513d8c823e3d90fd5b9a50505098505050505050506108ca9350611abb565b6104e3565b7f4e487b71000000000000000000000000000000000000000000000000000000008b5260118f52868bfd5b909c508781813d8311610922575b61091281836116d3565b810103126101fa57519b5f61047e565b503d610908565b6109338b91611676565b61089f575f61045b565b8a513d8d823e3d90fd5b610952919b50611676565b5f995f610407565b8b513d5f823e3d90fd5b9092508681813d831161098c575b61097c81836116d3565b810103126101fa5751915f6103b2565b503d610972565b88513d5f823e3d90fd5b825f52600260205260ff855f2054165f146109e157895f541661036e57887f8562eb45000000000000000000000000000000000000000000000000000000005f525ffd5b5090877f38553f6c000000000000000000000000000000000000000000000000000000005f52525ffd5b50346101fa5760206003193601126101fa57610a25611630565b73ffffffffffffffffffffffffffffffffffffffff90610a49826001541630611872565b1691825f52600260205260ff825f20541615610ab65750815f5260026020525f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690557f0ed3ea501d1a23f23a7dc56c2d33e1e5a6a97694c707ef67b1e0159f239746bf5f80a2005b90507fbca5ab34000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101fa57602090816003193601126101fa5780359267ffffffffffffffff8085116101fa57366023860112156101fa5784830135936024918511610cbb576005958560051b845196610b38848301896116d3565b8752602483880191830101913683116101fa57602401905b828210610c8f57505050610b626119fd565b73ffffffffffffffffffffffffffffffffffffffff9460019580600154163303610c68575f97875b610bb3575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b8251891015610c635781848a831b8501015116988651997f70a08231000000000000000000000000000000000000000000000000000000008b5230898c0152858b8881845afa8015610993578a9b5f91610c2e575b5090818b9392610c1c575b50500198610b8a565b610c27913390611a52565b5f80610c13565b8093929b50878092503d8311610c5c575b610c4981836116d3565b810103126101fa5790518a99908a610c08565b503d610c3f565b610492565b857f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b813573ffffffffffffffffffffffffffffffffffffffff811681036101fa578152908301908301610b50565b6041847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101fa575f6003193601126101fa5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa918215610da657926020935f93610d77575b505191168152f35b610d98919350843d8611610d9f575b610d9081836116d3565b810190611846565b915f610d6f565b503d610d86565b83513d5f823e3d90fd5b50346101fa5760206003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff610de2611630565b165f526002825260ff815f20541690519015158152f35b50346101fa575f6003193601126101fa576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346101fa5760a06003193601126101fa57610e63611630565b90602491823573ffffffffffffffffffffffffffffffffffffffff8082168092036101fa57610e90611653565b94610e996119fd565b610ea7826001541630611872565b815f9616918215159384611446575b8651917f70a082310000000000000000000000000000000000000000000000000000000096878452308b85015260209687858781875afa94851561143c575f9561140d575b5082610f0561178a565b1694853b156101fa578c958b517f8f4ab9ca00000000000000000000000000000000000000000000000000000000815285851680988201525f818a8183865af18015611403576113f0575b50803b156113ec578c878f6064908f84905195869485937fb53a70b20000000000000000000000000000000000000000000000000000000085528401528d30908401528b60448401525af180156113e257908d916113ca575b50508a51998a52308d8b0152888a8881885afa998a156113c0578c9a611391575b50808a0399808b116113655703611000575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b1561134c57508854811690828203611039578a8a7fca9e3a1e000000000000000000000000000000000000000000000000000000008152fd5b88517f38d52e0f00000000000000000000000000000000000000000000000000000000815287818d81875afa90811561093d57889183918d91611311575b50169860648d8d8d5197889485937fba087652000000000000000000000000000000000000000000000000000000008552840152308b8401523060448401525af19283156108aa578a936112e2575b50848951888c8b8a611155856111298b878301947f095ea7b3000000000000000000000000000000000000000000000000000000009a8b875284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866116d3565b828551925af18c513d826112c6575b50501561128d575b50506001541691853b1561089f578851937fde557a320000000000000000000000000000000000000000000000000000000085528b850152878585015260448401526064830152604435608483015260a482015260643560c4820152868160e48183875af1801561071d57849392918891611272575b5050604490865195869384927fdd62ed3e000000000000000000000000000000000000000000000000000000008452308c8501528301525afa9283156106f557508392611244575b50506106a25750505b5f8080808080808080808080610492565b90809250813d831161126b575b61125b81836116d3565b810103126101fa57515f8061122a565b503d611251565b61127f9192939450611676565b61071957908291865f6111e2565b6112b96112bf928c51908b82015289898201528d6044820152604481526112b3816116b7565b8b611b19565b89611b19565b5f8061116c565b9091506112da5750893b15155b5f80611164565b6001146112d3565b9092508681813d831161130a575b6112fa81836116d3565b810103126101fa5751915f6110c6565b503d6112f0565b928092508391503d8311611345575b61132a81836116d3565b8101031261072757518181168103610727578188915f611077565b503d611320565b969850509550505050506113609350611abb565b611233565b50868c60118f7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b9099508881813d83116113b9575b6113a981836116d3565b810103126101fa5751985f610fca565b503d61139f565b8b513d8e823e3d90fd5b6113d390611676565b6113de578b5f610fa9565b8b80fd5b8c513d8f823e3d90fd5b8c80fd5b6113fb919d50611676565b5f9b5f610f50565b8d513d5f823e3d90fd5b9094508781813d8311611435575b61142581836116d3565b810103126101fa5751935f610efb565b503d61141b565b8a513d5f823e3d90fd5b835f52600260205260ff875f2054165f1461148a57815f5416610eb657887f8562eb45000000000000000000000000000000000000000000000000000000005f525ffd5b82848a7f38553f6c000000000000000000000000000000000000000000000000000000005f52525ffd5b50346101fa575f6003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff6114e561178a565b915191168152f35b5090346101fa5760206003193601126101fa5735907fffffffff00000000000000000000000000000000000000000000000000000000821682036101fa57611536602092611714565b9051908152f35b50346101fa575f6003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50346101fa575f6003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b346101fa5760206003193601126101fa576115bd611630565b73ffffffffffffffffffffffffffffffffffffffff906115e1826001541630611872565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f557f873950c2ac59c570001b99d815ffb260542df229d07132922e2e6f9941fd3da65f80a2005b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101fa57565b6084359073ffffffffffffffffffffffffffffffffffffffff821682036101fa57565b67ffffffffffffffff811161168a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761168a57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761168a57604052565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff82111761168a5760405251902090565b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561183b575f9261180257505090565b9091506020813d602011611833575b8161181e602093836116d3565b810103126101fa575190811681036101fa5790565b3d9150611811565b6040513d5f823e3d90fd5b908160209103126101fa575173ffffffffffffffffffffffffffffffffffffffff811681036101fa5790565b9073ffffffffffffffffffffffffffffffffffffffff8091163303611895575050565b6118c17fffffffff000000000000000000000000000000000000000000000000000000005f3516611714565b91604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa90811561183b578460649287955f916119e0575b5060405196879586947f9be2a8840000000000000000000000000000000000000000000000000000000086526004860152336024860152166044840152165afa91821561183b575f926119a9575b50501561198157565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116119d9575b6119c081836116d3565b810103126101fa575180151581036101fa575f80611978565b503d6119b6565b6119f79150863d8811610d9f57610d9081836116d3565b5f61192a565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c611a2a576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff929092166024830152604480830193909352918152611ab991611ab46064836116d3565b611b19565b565b919060407fd6b9382ec1786c32610e376e8ee8f2f16abeda4ace3b6276ac958193c75bbbc89173ffffffffffffffffffffffffffffffffffffffff80918160015416611b08878284611a52565b8451968752602087015216941692a3565b905f602091828151910182855af11561183b575f513d611b97575073ffffffffffffffffffffffffffffffffffffffff81163b155b611b555750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415611b4e56fea26469706673582212205480978df623c804a8b886384f67d95375c26dc77bed8f7ed539d94969b947c064736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0xFE JUMPI PUSH1 0x1F PUSH2 0x1CED CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x102 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0xFE JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0xFE JUMPI PUSH1 0x20 ADD MLOAD SWAP3 DUP4 AND DUP1 SWAP4 SUB PUSH2 0xFE JUMPI ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xEF JUMPI PUSH1 0xA0 MSTORE DUP1 ISZERO PUSH2 0xE0 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP3 OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 PUSH32 0xBF9A9534339A9D6B81696E05DCFB614B7DC518A31D48BE3CFB757988381FB323 PUSH0 DUP1 LOG2 PUSH2 0x1BD6 SWAP1 DUP2 PUSH2 0x117 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x173F ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0xD3B ADD MSTORE DUP2 DUP2 PUSH2 0xE25 ADD MSTORE DUP2 DUP2 PUSH2 0x17CD ADD MSTORE PUSH2 0x18F4 ADD MSTORE RETURN JUMPDEST PUSH4 0xED1B8B3 PUSH1 0xE3 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0xA0 JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x79 JUMPI CALLVALUE PUSH2 0x79 JUMPI SWAP1 PUSH1 0x20 PUSH1 0x64 SWAP3 MLOAD SWAP2 PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420696D706C656D656E7465640000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST POP PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1B66CB00 EQ PUSH2 0x15A4 JUMPI DUP1 PUSH4 0x4CCB20C0 EQ PUSH2 0x1570 JUMPI DUP1 PUSH4 0x80DB0D51 EQ PUSH2 0x153D JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x14ED JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x14B4 JUMPI DUP1 PUSH4 0x88F6D2A4 EQ PUSH2 0xE49 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0xDF9 JUMPI DUP1 PUSH4 0x9C5CEE9B EQ PUSH2 0xDB0 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB0EDCC53 EQ PUSH2 0xAE1 JUMPI DUP1 PUSH4 0xB11F061E EQ PUSH2 0xA0B JUMPI DUP1 PUSH4 0xB9746995 EQ PUSH2 0x302 JUMPI DUP1 PUSH4 0xE20C482F EQ PUSH2 0x1FE JUMPI PUSH4 0xE74B981B SUB PUSH2 0x11 JUMPI POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x158 PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x17E DUP3 DUP5 AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND SWAP2 DUP3 ISZERO PUSH2 0x1D4 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP2 OR PUSH1 0x1 SSTORE PUSH32 0xBF9A9534339A9D6B81696E05DCFB614B7DC518A31D48BE3CFB757988381FB323 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH32 0x768DC59800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x218 PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x23C DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP3 PUSH0 KECCAK256 SLOAD AND PUSH2 0x2D7 JUMPI DUP3 ISZERO PUSH2 0x2B1 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0xEF09FC346B7C2CAE78D9A37ED785840E7D3C6072022CD8C41C3B37A239B7FD1 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH32 0x31EC273600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP PUSH32 0x6FE47AF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x31D PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x24 SWAP1 DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP3 AND DUP1 DUP4 SUB PUSH2 0x1FA JUMPI PUSH2 0x34A PUSH2 0x1653 JUMP JUMPDEST SWAP3 PUSH2 0x353 PUSH2 0x19FD JUMP JUMPDEST PUSH2 0x361 DUP9 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST DUP1 SWAP6 DUP9 PUSH0 SWAP6 AND SWAP2 DUP3 PUSH2 0x99D JUMPI JUMPDEST DUP5 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 SWAP11 DUP12 DUP3 MSTORE ADDRESS DUP12 DUP4 ADD MSTORE PUSH1 0x20 SWAP6 DUP7 DUP4 DUP7 DUP2 DUP5 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x993 JUMPI PUSH0 SWAP4 PUSH2 0x964 JUMPI JUMPDEST POP DUP2 PUSH2 0x3BC PUSH2 0x178A JUMP JUMPDEST AND SWAP4 DUP5 EXTCODESIZE ISZERO PUSH2 0x1FA JUMPI DUP13 SWAP5 DUP10 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP5 DUP14 AND DUP1 SWAP8 DUP3 ADD MSTORE PUSH0 DUP2 DUP10 DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x95A JUMPI PUSH2 0x947 JUMPI JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x727 JUMPI DUP11 DUP7 DUP16 PUSH1 0x64 SWAP1 DUP4 DUP15 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xB53A70B200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE ADDRESS DUP14 DUP5 ADD MSTORE DUP9 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x93D JUMPI PUSH2 0x929 JUMPI JUMPDEST POP DUP13 SWAP14 DUP10 MLOAD SWAP14 DUP15 SWAP2 DUP3 MSTORE ADDRESS SWAP2 ADD MSTORE DUP8 DUP14 DUP8 DUP2 DUP6 GAS STATICCALL SWAP13 DUP14 ISZERO PUSH2 0x8AA JUMPI DUP11 SWAP14 PUSH2 0x8FA JUMPI JUMPDEST POP DUP4 DUP14 SUB SWAP4 DUP14 DUP6 GT PUSH2 0x8CF JUMPI DUP5 SWAP14 SUB PUSH2 0x4B7 JUMPI JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST DUP7 ISZERO PUSH2 0x8B4 JUMPI POP DUP9 SLOAD DUP3 AND SWAP3 DUP2 DUP5 SUB PUSH2 0x51D JUMPI POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x4F6 JUMPI POP PUSH2 0x4E3 SWAP4 POP PUSH2 0x1ABB JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x492 JUMP JUMPDEST DUP1 PUSH32 0xCA9E3A1E00000000000000000000000000000000000000000000000000000000 DUP7 SWAP3 MSTORE REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 SWAP8 SWAP11 SWAP5 SWAP7 SWAP9 DUP1 SWAP13 SWAP11 POP PUSH2 0x782 JUMPI JUMPDEST POP POP DUP9 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 DUP10 ADD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP4 DUP10 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP13 SWAP1 MSTORE SWAP2 SWAP3 SWAP2 DUP11 SWAP2 DUP15 SWAP2 PUSH2 0x5BC SWAP1 DUP6 SWAP1 PUSH1 0x40 ADD JUMPDEST SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 ADD DUP7 MSTORE DUP6 PUSH2 0x16D3 JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP3 DUP10 GAS CALL DUP13 MLOAD RETURNDATASIZE DUP3 PUSH2 0x764 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x72B JUMPI JUMPDEST POP POP DUP1 PUSH1 0x1 SLOAD AND SWAP3 DUP7 EXTCODESIZE ISZERO PUSH2 0x727 JUMPI DUP10 MLOAD SWAP5 PUSH32 0xDE557A3200000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP13 DUP7 ADD MSTORE AND SWAP7 DUP8 DUP6 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0xC4 DUP3 ADD MSTORE DUP7 DUP2 PUSH1 0xE4 DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x71D JUMPI DUP5 SWAP4 SWAP3 SWAP2 DUP9 SWAP2 PUSH2 0x6FE JUMPI JUMPDEST POP POP PUSH1 0x44 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS DUP13 DUP6 ADD MSTORE DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x6F5 JUMPI POP DUP4 SWAP3 PUSH2 0x6C7 JUMPI JUMPDEST POP POP PUSH2 0x6A2 JUMPI POP POP PUSH2 0x4E3 JUMP JUMPDEST PUSH32 0xC5BC8D5100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x6EE JUMPI JUMPDEST PUSH2 0x6DE DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD PUSH0 DUP1 PUSH2 0x695 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x6D4 JUMP JUMPDEST MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x70B SWAP2 SWAP3 SWAP4 SWAP5 POP PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x719 JUMPI SWAP1 DUP3 SWAP2 DUP7 PUSH0 PUSH2 0x64D JUMP JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP11 DUP1 REVERT JUMPDEST PUSH2 0x757 PUSH2 0x75D SWAP3 DUP13 MLOAD SWAP1 DUP12 DUP3 ADD MSTORE DUP10 DUP10 DUP3 ADD MSTORE DUP14 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x751 DUP2 PUSH2 0x16B7 JUMP JUMPDEST DUP7 PUSH2 0x1B19 JUMP JUMPDEST DUP5 PUSH2 0x1B19 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x5D4 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x77A JUMPI POP DUP3 DUP6 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x5CC JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x773 JUMP JUMPDEST DUP11 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP13 SWAP12 SWAP11 SWAP10 POP SWAP4 POP DUP8 DUP2 DUP13 DUP2 DUP16 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8AA JUMPI DUP9 SWAP2 DUP4 SWAP2 DUP13 SWAP2 PUSH2 0x86B JUMPI JUMPDEST POP AND SWAP4 DUP10 MLOAD SWAP13 DUP14 SWAP2 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP14 DUP4 ADD MSTORE ADDRESS DUP9 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE DUP2 DUP13 GAS SWAP3 PUSH1 0x64 SWAP4 CALL SWAP11 DUP12 ISZERO PUSH2 0x861 JUMPI SWAP9 DUP1 SWAP11 SWAP12 DUP10 SWAP11 DUP3 SWAP2 PUSH2 0x82C JUMPI JUMPDEST POP SWAP9 POP DUP6 SWAP1 POP PUSH2 0x590 PUSH2 0x530 JUMP JUMPDEST SWAP10 POP POP POP DUP7 DUP9 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x85A JUMPI JUMPDEST PUSH2 0x845 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI SWAP7 MLOAD DUP9 SWAP8 SWAP1 DUP11 SWAP1 DUP9 PUSH2 0x81E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x83B JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP3 DUP1 SWAP3 POP DUP4 SWAP2 POP RETURNDATASIZE DUP4 GT PUSH2 0x8A3 JUMPI JUMPDEST PUSH2 0x884 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x89F JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x89F JUMPI DUP2 DUP9 SWAP2 PUSH0 PUSH2 0x7C8 JUMP JUMPDEST DUP10 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x87A JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP13 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP11 POP POP POP SWAP9 POP POP POP POP POP POP POP PUSH2 0x8CA SWAP4 POP PUSH2 0x1ABB JUMP JUMPDEST PUSH2 0x4E3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP12 MSTORE PUSH1 0x11 DUP16 MSTORE DUP7 DUP12 REVERT JUMPDEST SWAP1 SWAP13 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x922 JUMPI JUMPDEST PUSH2 0x912 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP12 PUSH0 PUSH2 0x47E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x908 JUMP JUMPDEST PUSH2 0x933 DUP12 SWAP2 PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x89F JUMPI PUSH0 PUSH2 0x45B JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE DUP14 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x952 SWAP2 SWAP12 POP PUSH2 0x1676 JUMP JUMPDEST PUSH0 SWAP10 PUSH0 PUSH2 0x407 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 POP DUP7 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x98C JUMPI JUMPDEST PUSH2 0x97C DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x3B2 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x972 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP6 PUSH0 KECCAK256 SLOAD AND PUSH0 EQ PUSH2 0x9E1 JUMPI DUP10 PUSH0 SLOAD AND PUSH2 0x36E JUMPI DUP9 PUSH32 0x8562EB4500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 DUP8 PUSH32 0x38553F6C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0xA25 PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0xA49 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP3 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0xAB6 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH32 0xED3EA501D1A23F23A7DC56C2D33E1E5A6A97694C707EF67B1E0159F239746BF PUSH0 DUP1 LOG2 STOP JUMPDEST SWAP1 POP PUSH32 0xBCA5AB3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI DUP1 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP6 GT PUSH2 0x1FA JUMPI CALLDATASIZE PUSH1 0x23 DUP7 ADD SLT ISZERO PUSH2 0x1FA JUMPI DUP5 DUP4 ADD CALLDATALOAD SWAP4 PUSH1 0x24 SWAP2 DUP6 GT PUSH2 0xCBB JUMPI PUSH1 0x5 SWAP6 DUP6 PUSH1 0x5 SHL DUP5 MLOAD SWAP7 PUSH2 0xB38 DUP5 DUP4 ADD DUP10 PUSH2 0x16D3 JUMP JUMPDEST DUP8 MSTORE PUSH1 0x24 DUP4 DUP9 ADD SWAP2 DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x1FA JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xC8F JUMPI POP POP POP PUSH2 0xB62 PUSH2 0x19FD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 PUSH1 0x1 SWAP6 DUP1 PUSH1 0x1 SLOAD AND CALLER SUB PUSH2 0xC68 JUMPI PUSH0 SWAP8 DUP8 JUMPDEST PUSH2 0xBB3 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST DUP3 MLOAD DUP10 LT ISZERO PUSH2 0xC63 JUMPI DUP2 DUP5 DUP11 DUP4 SHL DUP6 ADD ADD MLOAD AND SWAP9 DUP7 MLOAD SWAP10 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP12 MSTORE ADDRESS DUP10 DUP13 ADD MSTORE DUP6 DUP12 DUP9 DUP2 DUP5 GAS STATICCALL DUP1 ISZERO PUSH2 0x993 JUMPI DUP11 SWAP12 PUSH0 SWAP2 PUSH2 0xC2E JUMPI JUMPDEST POP SWAP1 DUP2 DUP12 SWAP4 SWAP3 PUSH2 0xC1C JUMPI JUMPDEST POP POP ADD SWAP9 PUSH2 0xB8A JUMP JUMPDEST PUSH2 0xC27 SWAP2 CALLER SWAP1 PUSH2 0x1A52 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xC13 JUMP JUMPDEST DUP1 SWAP4 SWAP3 SWAP12 POP DUP8 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xC5C JUMPI JUMPDEST PUSH2 0xC49 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI SWAP1 MLOAD DUP11 SWAP10 SWAP1 DUP11 PUSH2 0xC08 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xC3F JUMP JUMPDEST PUSH2 0x492 JUMP JUMPDEST DUP6 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1FA JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xB50 JUMP JUMPDEST PUSH1 0x41 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xDA6 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0xD77 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xD98 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xD9F JUMPI JUMPDEST PUSH2 0xD90 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1846 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0xD6F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xD86 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xDE2 PUSH2 0x1630 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0xE63 PUSH2 0x1630 JUMP JUMPDEST SWAP1 PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1FA JUMPI PUSH2 0xE90 PUSH2 0x1653 JUMP JUMPDEST SWAP5 PUSH2 0xE99 PUSH2 0x19FD JUMP JUMPDEST PUSH2 0xEA7 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST DUP2 PUSH0 SWAP7 AND SWAP2 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0x1446 JUMPI JUMPDEST DUP7 MLOAD SWAP2 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 SWAP7 DUP8 DUP5 MSTORE ADDRESS DUP12 DUP6 ADD MSTORE PUSH1 0x20 SWAP7 DUP8 DUP6 DUP8 DUP2 DUP8 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x143C JUMPI PUSH0 SWAP6 PUSH2 0x140D JUMPI JUMPDEST POP DUP3 PUSH2 0xF05 PUSH2 0x178A JUMP JUMPDEST AND SWAP5 DUP6 EXTCODESIZE ISZERO PUSH2 0x1FA JUMPI DUP13 SWAP6 DUP12 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 DUP6 AND DUP1 SWAP9 DUP3 ADD MSTORE PUSH0 DUP2 DUP11 DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x1403 JUMPI PUSH2 0x13F0 JUMPI JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x13EC JUMPI DUP13 DUP8 DUP16 PUSH1 0x64 SWAP1 DUP16 DUP5 SWAP1 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xB53A70B200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE DUP14 ADDRESS SWAP1 DUP5 ADD MSTORE DUP12 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x13E2 JUMPI SWAP1 DUP14 SWAP2 PUSH2 0x13CA JUMPI JUMPDEST POP POP DUP11 MLOAD SWAP10 DUP11 MSTORE ADDRESS DUP14 DUP12 ADD MSTORE DUP9 DUP11 DUP9 DUP2 DUP9 GAS STATICCALL SWAP10 DUP11 ISZERO PUSH2 0x13C0 JUMPI DUP13 SWAP11 PUSH2 0x1391 JUMPI JUMPDEST POP DUP1 DUP11 SUB SWAP10 DUP1 DUP12 GT PUSH2 0x1365 JUMPI SUB PUSH2 0x1000 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST ISZERO PUSH2 0x134C JUMPI POP DUP9 SLOAD DUP2 AND SWAP1 DUP3 DUP3 SUB PUSH2 0x1039 JUMPI DUP11 DUP11 PUSH32 0xCA9E3A1E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP9 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP8 DUP2 DUP14 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x93D JUMPI DUP9 SWAP2 DUP4 SWAP2 DUP14 SWAP2 PUSH2 0x1311 JUMPI JUMPDEST POP AND SWAP9 PUSH1 0x64 DUP14 DUP14 DUP14 MLOAD SWAP8 DUP9 SWAP5 DUP6 SWAP4 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE ADDRESS DUP12 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x8AA JUMPI DUP11 SWAP4 PUSH2 0x12E2 JUMPI JUMPDEST POP DUP5 DUP10 MLOAD DUP9 DUP13 DUP12 DUP11 PUSH2 0x1155 DUP6 PUSH2 0x1129 DUP12 DUP8 DUP4 ADD SWAP5 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP11 DUP12 DUP8 MSTORE DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 ADD DUP8 MSTORE DUP7 PUSH2 0x16D3 JUMP JUMPDEST DUP3 DUP6 MLOAD SWAP3 GAS CALL DUP13 MLOAD RETURNDATASIZE DUP3 PUSH2 0x12C6 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x128D JUMPI JUMPDEST POP POP PUSH1 0x1 SLOAD AND SWAP2 DUP6 EXTCODESIZE ISZERO PUSH2 0x89F JUMPI DUP9 MLOAD SWAP4 PUSH32 0xDE557A3200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 DUP6 ADD MSTORE DUP8 DUP6 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0xC4 DUP3 ADD MSTORE DUP7 DUP2 PUSH1 0xE4 DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x71D JUMPI DUP5 SWAP4 SWAP3 SWAP2 DUP9 SWAP2 PUSH2 0x1272 JUMPI JUMPDEST POP POP PUSH1 0x44 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS DUP13 DUP6 ADD MSTORE DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x6F5 JUMPI POP DUP4 SWAP3 PUSH2 0x1244 JUMPI JUMPDEST POP POP PUSH2 0x6A2 JUMPI POP POP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x492 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x126B JUMPI JUMPDEST PUSH2 0x125B DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD PUSH0 DUP1 PUSH2 0x122A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1251 JUMP JUMPDEST PUSH2 0x127F SWAP2 SWAP3 SWAP4 SWAP5 POP PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x719 JUMPI SWAP1 DUP3 SWAP2 DUP7 PUSH0 PUSH2 0x11E2 JUMP JUMPDEST PUSH2 0x12B9 PUSH2 0x12BF SWAP3 DUP13 MLOAD SWAP1 DUP12 DUP3 ADD MSTORE DUP10 DUP10 DUP3 ADD MSTORE DUP14 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x12B3 DUP2 PUSH2 0x16B7 JUMP JUMPDEST DUP12 PUSH2 0x1B19 JUMP JUMPDEST DUP10 PUSH2 0x1B19 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x116C JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x12DA JUMPI POP DUP10 EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x1164 JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x12D3 JUMP JUMPDEST SWAP1 SWAP3 POP DUP7 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x130A JUMPI JUMPDEST PUSH2 0x12FA DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x10C6 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x12F0 JUMP JUMPDEST SWAP3 DUP1 SWAP3 POP DUP4 SWAP2 POP RETURNDATASIZE DUP4 GT PUSH2 0x1345 JUMPI JUMPDEST PUSH2 0x132A DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x727 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x727 JUMPI DUP2 DUP9 SWAP2 PUSH0 PUSH2 0x1077 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1320 JUMP JUMPDEST SWAP7 SWAP9 POP POP SWAP6 POP POP POP POP POP PUSH2 0x1360 SWAP4 POP PUSH2 0x1ABB JUMP JUMPDEST PUSH2 0x1233 JUMP JUMPDEST POP DUP7 DUP13 PUSH1 0x11 DUP16 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 SWAP10 POP DUP9 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x13B9 JUMPI JUMPDEST PUSH2 0x13A9 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP9 PUSH0 PUSH2 0xFCA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x139F JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE DUP15 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x13D3 SWAP1 PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x13DE JUMPI DUP12 PUSH0 PUSH2 0xFA9 JUMP JUMPDEST DUP12 DUP1 REVERT JUMPDEST DUP13 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP13 DUP1 REVERT JUMPDEST PUSH2 0x13FB SWAP2 SWAP14 POP PUSH2 0x1676 JUMP JUMPDEST PUSH0 SWAP12 PUSH0 PUSH2 0xF50 JUMP JUMPDEST DUP14 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1435 JUMPI JUMPDEST PUSH2 0x1425 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP4 PUSH0 PUSH2 0xEFB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x141B JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP8 PUSH0 KECCAK256 SLOAD AND PUSH0 EQ PUSH2 0x148A JUMPI DUP2 PUSH0 SLOAD AND PUSH2 0xEB6 JUMPI DUP9 PUSH32 0x8562EB4500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 DUP5 DUP11 PUSH32 0x38553F6C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x14E5 PUSH2 0x178A JUMP JUMPDEST SWAP2 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x1FA JUMPI PUSH2 0x1536 PUSH1 0x20 SWAP3 PUSH2 0x1714 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x15BD PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x15E1 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH0 SLOAD AND OR PUSH0 SSTORE PUSH32 0x873950C2AC59C570001B99D815FFB260542DF229D07132922E2E6F9941FD3DA6 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1FA JUMPI JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1FA JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x183B JUMPI PUSH0 SWAP3 PUSH2 0x1802 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1833 JUMPI JUMPDEST DUP2 PUSH2 0x181E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1FA JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1811 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x1FA JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1FA JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND CALLER SUB PUSH2 0x1895 JUMPI POP POP JUMP JUMPDEST PUSH2 0x18C1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x1714 JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x183B JUMPI DUP5 PUSH1 0x64 SWAP3 DUP8 SWAP6 PUSH0 SWAP2 PUSH2 0x19E0 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x4 DUP7 ADD MSTORE CALLER PUSH1 0x24 DUP7 ADD MSTORE AND PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x183B JUMPI PUSH0 SWAP3 PUSH2 0x19A9 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x1981 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x19D9 JUMPI JUMPDEST PUSH2 0x19C0 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x1FA JUMPI PUSH0 DUP1 PUSH2 0x1978 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x19B6 JUMP JUMPDEST PUSH2 0x19F7 SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0xD9F JUMPI PUSH2 0xD90 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST PUSH0 PUSH2 0x192A JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x1A2A JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 MSTORE PUSH2 0x1AB9 SWAP2 PUSH2 0x1AB4 PUSH1 0x64 DUP4 PUSH2 0x16D3 JUMP JUMPDEST PUSH2 0x1B19 JUMP JUMPDEST JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x40 PUSH32 0xD6B9382EC1786C32610E376E8EE8F2F16ABEDA4ACE3B6276AC958193C75BBBC8 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 DUP2 PUSH1 0x1 SLOAD AND PUSH2 0x1B08 DUP8 DUP3 DUP5 PUSH2 0x1A52 JUMP JUMPDEST DUP5 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE AND SWAP5 AND SWAP3 LOG3 JUMP JUMPDEST SWAP1 PUSH0 PUSH1 0x20 SWAP2 DUP3 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL ISZERO PUSH2 0x183B JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x1B97 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x1B55 JUMPI POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x1B4E JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SLOAD DUP1 SWAP8 DUP14 0xF6 0x23 0xC8 DIV 0xA8 0xB8 DUP7 CODESIZE 0x4F PUSH8 0xD95375C26DC77BED DUP16 PUSH31 0xD539D94969B947C064736F6C634300081B0033000000000000000000000000 ","sourceMap":"1713:10354:87:-:0;;;;;;;;;;;;;-1:-1:-1;;1713:10354:87;;;;-1:-1:-1;;;;;1713:10354:87;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1713:10354:87;;;;;;;;;;;;;;;;;;;;;922:4:46;1347:46:32;;943:28:44;939:79;;1028:14;;9350:26:87;;9346:85;;1713:10354;;;-1:-1:-1;;;;;;1713:10354:87;;;;;;;;9485:29;-1:-1:-1;;9485:29:87;1713:10354;;;;;;1347:46:32;1713:10354:87;;;;;1028:14:44;1713:10354:87;;;;;;;;;;;;;;;;;;;;;9346:85;9399:21;;;-1:-1:-1;9399:21:87;;-1:-1:-1;9399:21:87;939:79:44;994:13;;;-1:-1:-1;994:13:44;;-1:-1:-1;994:13:44;1713:10354:87;-1:-1:-1;1713:10354:87;;;;;;-1:-1:-1;1713:10354:87;;;;;-1:-1:-1;1713:10354:87"},"deployedBytecode":{"functionDebugData":{"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":6214,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC20":{"entryPoint":5680,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_contract_IProtocolFeeBurner":{"entryPoint":5715,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":5843,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_22929":{"entryPoint":5815,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_8829":{"entryPoint":5750,"id":null,"parameterSlots":1,"returnSlots":0},"fun_callOptionalReturn":{"entryPoint":6937,"id":11006,"parameterSlots":2,"returnSlots":0},"fun_ensureAuthenticatedByRole":{"entryPoint":6258,"id":7516,"parameterSlots":2,"returnSlots":0},"fun_getActionId":{"entryPoint":5908,"id":4356,"parameterSlots":1,"returnSlots":1},"fun_getProtocolFeeController":{"entryPoint":6026,"id":22723,"parameterSlots":0,"returnSlots":1},"fun_nonReentrantBefore":{"entryPoint":6653,"id":6968,"parameterSlots":0,"returnSlots":0},"fun_safeTransfer":{"entryPoint":6738,"id":10629,"parameterSlots":3,"returnSlots":0},"fun_transferFeeToken":{"entryPoint":6843,"id":22710,"parameterSlots":3,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"4296":[{"length":32,"start":5951}],"7340":[{"length":32,"start":3387},{"length":32,"start":3621},{"length":32,"start":6093},{"length":32,"start":6388}]},"linkReferences":{},"object":"604060808152600490813610156100a0575b361561007957346100795790602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600f60248201527f4e6f7420696d706c656d656e74656400000000000000000000000000000000006044820152fd5b507ff2238896000000000000000000000000000000000000000000000000000000005f525ffd5b5f3560e01c80631b66cb00146115a45780634ccb20c01461157057806380db0d511461153d578063851c1bb3146114ed57806385f2dbd4146114b457806388f6d2a414610e495780638d928af814610df95780639c5cee9b14610db0578063aaabadc514610ce7578063b0edcc5314610ae1578063b11f061e14610a0b578063b974699514610302578063e20c482f146101fe5763e74b981b036100115750346101fa5760206003193601126101fa57610158611630565b6001549073ffffffffffffffffffffffffffffffffffffffff9061017e82841630611872565b169182156101d457507fffffffffffffffffffffffff00000000000000000000000000000000000000001681176001557fbf9a9534339a9d6b81696e05dcfb614b7dc518a31d48be3cfb757988381fb3235f80a2005b7f768dc598000000000000000000000000000000000000000000000000000000005f525ffd5b5f80fd5b50346101fa5760206003193601126101fa57610218611630565b73ffffffffffffffffffffffffffffffffffffffff9061023c826001541630611872565b1691825f52600260205260ff825f2054166102d75782156102b15750815f5260026020525f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f0ef09fc346b7c2cae78d9a37ed785840e7d3c6072022cd8c41c3b37a239b7fd15f80a2005b7f31ec2736000000000000000000000000000000000000000000000000000000005f525ffd5b90507f6fe47af6000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101fa5760a06003193601126101fa5761031d611630565b602490813573ffffffffffffffffffffffffffffffffffffffff948582168083036101fa5761034a611653565b926103536119fd565b610361886001541630611872565b8095885f9516918261099d575b84517f70a08231000000000000000000000000000000000000000000000000000000009a8b8252308b83015260209586838681845afa928315610993575f93610964575b50816103bc61178a565b1693843b156101fa578c9489517f8f4ab9ca000000000000000000000000000000000000000000000000000000008152848d1680978201525f81898183865af1801561095a57610947575b50803b15610727578a868f606490838e5195869485937fb53a70b2000000000000000000000000000000000000000000000000000000008552840152308d8401528860448401525af1801561093d57610929575b508c9d89519d8e91825230910152878d8781855afa9c8d156108aa578a9d6108fa575b50838d03938d85116108cf57849d036104b7575b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b86156108b45750885482169281840361051d57505050505050505050806104f657506104e39350611abb565b5f80808080808080808080808080610492565b807fca9e3a1e00000000000000000000000000000000000000000000000000000000869252fd5b9091929395979a949698809c9a50610782575b505088517f095ea7b30000000000000000000000000000000000000000000000000000000081890181815273ffffffffffffffffffffffffffffffffffffffff8916838901908152602081018c90529192918a918e916105bc9085906040015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018652856116d3565b83519082895af18c513d82610764575b50501561072b575b5050806001541692863b15610727578951947fde557a320000000000000000000000000000000000000000000000000000000086528c8601521696878585015260448401526064830152604435608483015260a482015260643560c4820152868160e48183875af1801561071d578493929188916106fe575b5050604490865195869384927fdd62ed3e000000000000000000000000000000000000000000000000000000008452308c8501528301525afa9283156106f5575083926106c7575b50506106a25750506104e3565b7fc5bc8d51000000000000000000000000000000000000000000000000000000008152fd5b90809250813d83116106ee575b6106de81836116d3565b810103126101fa57515f80610695565b503d6106d4565b513d85823e3d90fd5b61070b9192939450611676565b61071957908291865f61064d565b8580fd5b86513d89823e3d90fd5b8a80fd5b61075761075d928c51908b82015289898201528d604482015260448152610751816116b7565b86611b19565b84611b19565b5f806105d4565b90915061077a57508285163b15155b5f806105cc565b600114610773565b8a517f38d52e0f000000000000000000000000000000000000000000000000000000008152919c9b9a9950935087818c818f5afa9081156108aa57889183918c9161086b575b50169389519c8d917fba0876520000000000000000000000000000000000000000000000000000000083528d8301523088830152306044830152818c5a92606493f19a8b156108615798809a9b899a829161082c575b509850859050610590610530565b995050508688813d831161085a575b61084581836116d3565b810103126101fa5796518897908a908861081e565b503d61083b565b88513d8b823e3d90fd5b928092508391503d83116108a3575b61088481836116d3565b8101031261089f5751818116810361089f578188915f6107c8565b8980fd5b503d61087a565b89513d8c823e3d90fd5b9a50505098505050505050506108ca9350611abb565b6104e3565b7f4e487b71000000000000000000000000000000000000000000000000000000008b5260118f52868bfd5b909c508781813d8311610922575b61091281836116d3565b810103126101fa57519b5f61047e565b503d610908565b6109338b91611676565b61089f575f61045b565b8a513d8d823e3d90fd5b610952919b50611676565b5f995f610407565b8b513d5f823e3d90fd5b9092508681813d831161098c575b61097c81836116d3565b810103126101fa5751915f6103b2565b503d610972565b88513d5f823e3d90fd5b825f52600260205260ff855f2054165f146109e157895f541661036e57887f8562eb45000000000000000000000000000000000000000000000000000000005f525ffd5b5090877f38553f6c000000000000000000000000000000000000000000000000000000005f52525ffd5b50346101fa5760206003193601126101fa57610a25611630565b73ffffffffffffffffffffffffffffffffffffffff90610a49826001541630611872565b1691825f52600260205260ff825f20541615610ab65750815f5260026020525f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690557f0ed3ea501d1a23f23a7dc56c2d33e1e5a6a97694c707ef67b1e0159f239746bf5f80a2005b90507fbca5ab34000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101fa57602090816003193601126101fa5780359267ffffffffffffffff8085116101fa57366023860112156101fa5784830135936024918511610cbb576005958560051b845196610b38848301896116d3565b8752602483880191830101913683116101fa57602401905b828210610c8f57505050610b626119fd565b73ffffffffffffffffffffffffffffffffffffffff9460019580600154163303610c68575f97875b610bb3575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b8251891015610c635781848a831b8501015116988651997f70a08231000000000000000000000000000000000000000000000000000000008b5230898c0152858b8881845afa8015610993578a9b5f91610c2e575b5090818b9392610c1c575b50500198610b8a565b610c27913390611a52565b5f80610c13565b8093929b50878092503d8311610c5c575b610c4981836116d3565b810103126101fa5790518a99908a610c08565b503d610c3f565b610492565b857f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b813573ffffffffffffffffffffffffffffffffffffffff811681036101fa578152908301908301610b50565b6041847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5090346101fa575f6003193601126101fa5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa918215610da657926020935f93610d77575b505191168152f35b610d98919350843d8611610d9f575b610d9081836116d3565b810190611846565b915f610d6f565b503d610d86565b83513d5f823e3d90fd5b50346101fa5760206003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff610de2611630565b165f526002825260ff815f20541690519015158152f35b50346101fa575f6003193601126101fa576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346101fa5760a06003193601126101fa57610e63611630565b90602491823573ffffffffffffffffffffffffffffffffffffffff8082168092036101fa57610e90611653565b94610e996119fd565b610ea7826001541630611872565b815f9616918215159384611446575b8651917f70a082310000000000000000000000000000000000000000000000000000000096878452308b85015260209687858781875afa94851561143c575f9561140d575b5082610f0561178a565b1694853b156101fa578c958b517f8f4ab9ca00000000000000000000000000000000000000000000000000000000815285851680988201525f818a8183865af18015611403576113f0575b50803b156113ec578c878f6064908f84905195869485937fb53a70b20000000000000000000000000000000000000000000000000000000085528401528d30908401528b60448401525af180156113e257908d916113ca575b50508a51998a52308d8b0152888a8881885afa998a156113c0578c9a611391575b50808a0399808b116113655703611000575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b1561134c57508854811690828203611039578a8a7fca9e3a1e000000000000000000000000000000000000000000000000000000008152fd5b88517f38d52e0f00000000000000000000000000000000000000000000000000000000815287818d81875afa90811561093d57889183918d91611311575b50169860648d8d8d5197889485937fba087652000000000000000000000000000000000000000000000000000000008552840152308b8401523060448401525af19283156108aa578a936112e2575b50848951888c8b8a611155856111298b878301947f095ea7b3000000000000000000000000000000000000000000000000000000009a8b875284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866116d3565b828551925af18c513d826112c6575b50501561128d575b50506001541691853b1561089f578851937fde557a320000000000000000000000000000000000000000000000000000000085528b850152878585015260448401526064830152604435608483015260a482015260643560c4820152868160e48183875af1801561071d57849392918891611272575b5050604490865195869384927fdd62ed3e000000000000000000000000000000000000000000000000000000008452308c8501528301525afa9283156106f557508392611244575b50506106a25750505b5f8080808080808080808080610492565b90809250813d831161126b575b61125b81836116d3565b810103126101fa57515f8061122a565b503d611251565b61127f9192939450611676565b61071957908291865f6111e2565b6112b96112bf928c51908b82015289898201528d6044820152604481526112b3816116b7565b8b611b19565b89611b19565b5f8061116c565b9091506112da5750893b15155b5f80611164565b6001146112d3565b9092508681813d831161130a575b6112fa81836116d3565b810103126101fa5751915f6110c6565b503d6112f0565b928092508391503d8311611345575b61132a81836116d3565b8101031261072757518181168103610727578188915f611077565b503d611320565b969850509550505050506113609350611abb565b611233565b50868c60118f7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b9099508881813d83116113b9575b6113a981836116d3565b810103126101fa5751985f610fca565b503d61139f565b8b513d8e823e3d90fd5b6113d390611676565b6113de578b5f610fa9565b8b80fd5b8c513d8f823e3d90fd5b8c80fd5b6113fb919d50611676565b5f9b5f610f50565b8d513d5f823e3d90fd5b9094508781813d8311611435575b61142581836116d3565b810103126101fa5751935f610efb565b503d61141b565b8a513d5f823e3d90fd5b835f52600260205260ff875f2054165f1461148a57815f5416610eb657887f8562eb45000000000000000000000000000000000000000000000000000000005f525ffd5b82848a7f38553f6c000000000000000000000000000000000000000000000000000000005f52525ffd5b50346101fa575f6003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff6114e561178a565b915191168152f35b5090346101fa5760206003193601126101fa5735907fffffffff00000000000000000000000000000000000000000000000000000000821682036101fa57611536602092611714565b9051908152f35b50346101fa575f6003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50346101fa575f6003193601126101fa5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b346101fa5760206003193601126101fa576115bd611630565b73ffffffffffffffffffffffffffffffffffffffff906115e1826001541630611872565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f557f873950c2ac59c570001b99d815ffb260542df229d07132922e2e6f9941fd3da65f80a2005b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101fa57565b6084359073ffffffffffffffffffffffffffffffffffffffff821682036101fa57565b67ffffffffffffffff811161168a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761168a57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761168a57604052565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff82111761168a5760405251902090565b6040517f85f2dbd400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561183b575f9261180257505090565b9091506020813d602011611833575b8161181e602093836116d3565b810103126101fa575190811681036101fa5790565b3d9150611811565b6040513d5f823e3d90fd5b908160209103126101fa575173ffffffffffffffffffffffffffffffffffffffff811681036101fa5790565b9073ffffffffffffffffffffffffffffffffffffffff8091163303611895575050565b6118c17fffffffff000000000000000000000000000000000000000000000000000000005f3516611714565b91604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa90811561183b578460649287955f916119e0575b5060405196879586947f9be2a8840000000000000000000000000000000000000000000000000000000086526004860152336024860152166044840152165afa91821561183b575f926119a9575b50501561198157565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116119d9575b6119c081836116d3565b810103126101fa575180151581036101fa575f80611978565b503d6119b6565b6119f79150863d8811610d9f57610d9081836116d3565b5f61192a565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c611a2a576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff929092166024830152604480830193909352918152611ab991611ab46064836116d3565b611b19565b565b919060407fd6b9382ec1786c32610e376e8ee8f2f16abeda4ace3b6276ac958193c75bbbc89173ffffffffffffffffffffffffffffffffffffffff80918160015416611b08878284611a52565b8451968752602087015216941692a3565b905f602091828151910182855af11561183b575f513d611b97575073ffffffffffffffffffffffffffffffffffffffff81163b155b611b555750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415611b4e56fea26469706673582212205480978df623c804a8b886384f67d95375c26dc77bed8f7ed539d94969b947c064736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0xA0 JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x79 JUMPI CALLVALUE PUSH2 0x79 JUMPI SWAP1 PUSH1 0x20 PUSH1 0x64 SWAP3 MLOAD SWAP2 PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420696D706C656D656E7465640000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST POP PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1B66CB00 EQ PUSH2 0x15A4 JUMPI DUP1 PUSH4 0x4CCB20C0 EQ PUSH2 0x1570 JUMPI DUP1 PUSH4 0x80DB0D51 EQ PUSH2 0x153D JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x14ED JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x14B4 JUMPI DUP1 PUSH4 0x88F6D2A4 EQ PUSH2 0xE49 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0xDF9 JUMPI DUP1 PUSH4 0x9C5CEE9B EQ PUSH2 0xDB0 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB0EDCC53 EQ PUSH2 0xAE1 JUMPI DUP1 PUSH4 0xB11F061E EQ PUSH2 0xA0B JUMPI DUP1 PUSH4 0xB9746995 EQ PUSH2 0x302 JUMPI DUP1 PUSH4 0xE20C482F EQ PUSH2 0x1FE JUMPI PUSH4 0xE74B981B SUB PUSH2 0x11 JUMPI POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x158 PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x1 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x17E DUP3 DUP5 AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND SWAP2 DUP3 ISZERO PUSH2 0x1D4 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP2 OR PUSH1 0x1 SSTORE PUSH32 0xBF9A9534339A9D6B81696E05DCFB614B7DC518A31D48BE3CFB757988381FB323 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH32 0x768DC59800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x218 PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x23C DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP3 PUSH0 KECCAK256 SLOAD AND PUSH2 0x2D7 JUMPI DUP3 ISZERO PUSH2 0x2B1 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0xEF09FC346B7C2CAE78D9A37ED785840E7D3C6072022CD8C41C3B37A239B7FD1 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH32 0x31EC273600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP PUSH32 0x6FE47AF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x31D PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x24 SWAP1 DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP3 AND DUP1 DUP4 SUB PUSH2 0x1FA JUMPI PUSH2 0x34A PUSH2 0x1653 JUMP JUMPDEST SWAP3 PUSH2 0x353 PUSH2 0x19FD JUMP JUMPDEST PUSH2 0x361 DUP9 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST DUP1 SWAP6 DUP9 PUSH0 SWAP6 AND SWAP2 DUP3 PUSH2 0x99D JUMPI JUMPDEST DUP5 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 SWAP11 DUP12 DUP3 MSTORE ADDRESS DUP12 DUP4 ADD MSTORE PUSH1 0x20 SWAP6 DUP7 DUP4 DUP7 DUP2 DUP5 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x993 JUMPI PUSH0 SWAP4 PUSH2 0x964 JUMPI JUMPDEST POP DUP2 PUSH2 0x3BC PUSH2 0x178A JUMP JUMPDEST AND SWAP4 DUP5 EXTCODESIZE ISZERO PUSH2 0x1FA JUMPI DUP13 SWAP5 DUP10 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP5 DUP14 AND DUP1 SWAP8 DUP3 ADD MSTORE PUSH0 DUP2 DUP10 DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x95A JUMPI PUSH2 0x947 JUMPI JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x727 JUMPI DUP11 DUP7 DUP16 PUSH1 0x64 SWAP1 DUP4 DUP15 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xB53A70B200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE ADDRESS DUP14 DUP5 ADD MSTORE DUP9 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x93D JUMPI PUSH2 0x929 JUMPI JUMPDEST POP DUP13 SWAP14 DUP10 MLOAD SWAP14 DUP15 SWAP2 DUP3 MSTORE ADDRESS SWAP2 ADD MSTORE DUP8 DUP14 DUP8 DUP2 DUP6 GAS STATICCALL SWAP13 DUP14 ISZERO PUSH2 0x8AA JUMPI DUP11 SWAP14 PUSH2 0x8FA JUMPI JUMPDEST POP DUP4 DUP14 SUB SWAP4 DUP14 DUP6 GT PUSH2 0x8CF JUMPI DUP5 SWAP14 SUB PUSH2 0x4B7 JUMPI JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST DUP7 ISZERO PUSH2 0x8B4 JUMPI POP DUP9 SLOAD DUP3 AND SWAP3 DUP2 DUP5 SUB PUSH2 0x51D JUMPI POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x4F6 JUMPI POP PUSH2 0x4E3 SWAP4 POP PUSH2 0x1ABB JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x492 JUMP JUMPDEST DUP1 PUSH32 0xCA9E3A1E00000000000000000000000000000000000000000000000000000000 DUP7 SWAP3 MSTORE REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 SWAP8 SWAP11 SWAP5 SWAP7 SWAP9 DUP1 SWAP13 SWAP11 POP PUSH2 0x782 JUMPI JUMPDEST POP POP DUP9 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 DUP10 ADD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP4 DUP10 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP13 SWAP1 MSTORE SWAP2 SWAP3 SWAP2 DUP11 SWAP2 DUP15 SWAP2 PUSH2 0x5BC SWAP1 DUP6 SWAP1 PUSH1 0x40 ADD JUMPDEST SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 ADD DUP7 MSTORE DUP6 PUSH2 0x16D3 JUMP JUMPDEST DUP4 MLOAD SWAP1 DUP3 DUP10 GAS CALL DUP13 MLOAD RETURNDATASIZE DUP3 PUSH2 0x764 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x72B JUMPI JUMPDEST POP POP DUP1 PUSH1 0x1 SLOAD AND SWAP3 DUP7 EXTCODESIZE ISZERO PUSH2 0x727 JUMPI DUP10 MLOAD SWAP5 PUSH32 0xDE557A3200000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP13 DUP7 ADD MSTORE AND SWAP7 DUP8 DUP6 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0xC4 DUP3 ADD MSTORE DUP7 DUP2 PUSH1 0xE4 DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x71D JUMPI DUP5 SWAP4 SWAP3 SWAP2 DUP9 SWAP2 PUSH2 0x6FE JUMPI JUMPDEST POP POP PUSH1 0x44 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS DUP13 DUP6 ADD MSTORE DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x6F5 JUMPI POP DUP4 SWAP3 PUSH2 0x6C7 JUMPI JUMPDEST POP POP PUSH2 0x6A2 JUMPI POP POP PUSH2 0x4E3 JUMP JUMPDEST PUSH32 0xC5BC8D5100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x6EE JUMPI JUMPDEST PUSH2 0x6DE DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD PUSH0 DUP1 PUSH2 0x695 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x6D4 JUMP JUMPDEST MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x70B SWAP2 SWAP3 SWAP4 SWAP5 POP PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x719 JUMPI SWAP1 DUP3 SWAP2 DUP7 PUSH0 PUSH2 0x64D JUMP JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP11 DUP1 REVERT JUMPDEST PUSH2 0x757 PUSH2 0x75D SWAP3 DUP13 MLOAD SWAP1 DUP12 DUP3 ADD MSTORE DUP10 DUP10 DUP3 ADD MSTORE DUP14 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x751 DUP2 PUSH2 0x16B7 JUMP JUMPDEST DUP7 PUSH2 0x1B19 JUMP JUMPDEST DUP5 PUSH2 0x1B19 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x5D4 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x77A JUMPI POP DUP3 DUP6 AND EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x5CC JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x773 JUMP JUMPDEST DUP11 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP13 SWAP12 SWAP11 SWAP10 POP SWAP4 POP DUP8 DUP2 DUP13 DUP2 DUP16 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8AA JUMPI DUP9 SWAP2 DUP4 SWAP2 DUP13 SWAP2 PUSH2 0x86B JUMPI JUMPDEST POP AND SWAP4 DUP10 MLOAD SWAP13 DUP14 SWAP2 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP14 DUP4 ADD MSTORE ADDRESS DUP9 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE DUP2 DUP13 GAS SWAP3 PUSH1 0x64 SWAP4 CALL SWAP11 DUP12 ISZERO PUSH2 0x861 JUMPI SWAP9 DUP1 SWAP11 SWAP12 DUP10 SWAP11 DUP3 SWAP2 PUSH2 0x82C JUMPI JUMPDEST POP SWAP9 POP DUP6 SWAP1 POP PUSH2 0x590 PUSH2 0x530 JUMP JUMPDEST SWAP10 POP POP POP DUP7 DUP9 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x85A JUMPI JUMPDEST PUSH2 0x845 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI SWAP7 MLOAD DUP9 SWAP8 SWAP1 DUP11 SWAP1 DUP9 PUSH2 0x81E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x83B JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP3 DUP1 SWAP3 POP DUP4 SWAP2 POP RETURNDATASIZE DUP4 GT PUSH2 0x8A3 JUMPI JUMPDEST PUSH2 0x884 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x89F JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x89F JUMPI DUP2 DUP9 SWAP2 PUSH0 PUSH2 0x7C8 JUMP JUMPDEST DUP10 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x87A JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP13 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP11 POP POP POP SWAP9 POP POP POP POP POP POP POP PUSH2 0x8CA SWAP4 POP PUSH2 0x1ABB JUMP JUMPDEST PUSH2 0x4E3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP12 MSTORE PUSH1 0x11 DUP16 MSTORE DUP7 DUP12 REVERT JUMPDEST SWAP1 SWAP13 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x922 JUMPI JUMPDEST PUSH2 0x912 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP12 PUSH0 PUSH2 0x47E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x908 JUMP JUMPDEST PUSH2 0x933 DUP12 SWAP2 PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x89F JUMPI PUSH0 PUSH2 0x45B JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE DUP14 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x952 SWAP2 SWAP12 POP PUSH2 0x1676 JUMP JUMPDEST PUSH0 SWAP10 PUSH0 PUSH2 0x407 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 POP DUP7 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x98C JUMPI JUMPDEST PUSH2 0x97C DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x3B2 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x972 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP6 PUSH0 KECCAK256 SLOAD AND PUSH0 EQ PUSH2 0x9E1 JUMPI DUP10 PUSH0 SLOAD AND PUSH2 0x36E JUMPI DUP9 PUSH32 0x8562EB4500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 DUP8 PUSH32 0x38553F6C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0xA25 PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0xA49 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP3 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0xAB6 JUMPI POP DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH32 0xED3EA501D1A23F23A7DC56C2D33E1E5A6A97694C707EF67B1E0159F239746BF PUSH0 DUP1 LOG2 STOP JUMPDEST SWAP1 POP PUSH32 0xBCA5AB3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI DUP1 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP6 GT PUSH2 0x1FA JUMPI CALLDATASIZE PUSH1 0x23 DUP7 ADD SLT ISZERO PUSH2 0x1FA JUMPI DUP5 DUP4 ADD CALLDATALOAD SWAP4 PUSH1 0x24 SWAP2 DUP6 GT PUSH2 0xCBB JUMPI PUSH1 0x5 SWAP6 DUP6 PUSH1 0x5 SHL DUP5 MLOAD SWAP7 PUSH2 0xB38 DUP5 DUP4 ADD DUP10 PUSH2 0x16D3 JUMP JUMPDEST DUP8 MSTORE PUSH1 0x24 DUP4 DUP9 ADD SWAP2 DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x1FA JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xC8F JUMPI POP POP POP PUSH2 0xB62 PUSH2 0x19FD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 PUSH1 0x1 SWAP6 DUP1 PUSH1 0x1 SLOAD AND CALLER SUB PUSH2 0xC68 JUMPI PUSH0 SWAP8 DUP8 JUMPDEST PUSH2 0xBB3 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST DUP3 MLOAD DUP10 LT ISZERO PUSH2 0xC63 JUMPI DUP2 DUP5 DUP11 DUP4 SHL DUP6 ADD ADD MLOAD AND SWAP9 DUP7 MLOAD SWAP10 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP12 MSTORE ADDRESS DUP10 DUP13 ADD MSTORE DUP6 DUP12 DUP9 DUP2 DUP5 GAS STATICCALL DUP1 ISZERO PUSH2 0x993 JUMPI DUP11 SWAP12 PUSH0 SWAP2 PUSH2 0xC2E JUMPI JUMPDEST POP SWAP1 DUP2 DUP12 SWAP4 SWAP3 PUSH2 0xC1C JUMPI JUMPDEST POP POP ADD SWAP9 PUSH2 0xB8A JUMP JUMPDEST PUSH2 0xC27 SWAP2 CALLER SWAP1 PUSH2 0x1A52 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xC13 JUMP JUMPDEST DUP1 SWAP4 SWAP3 SWAP12 POP DUP8 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xC5C JUMPI JUMPDEST PUSH2 0xC49 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI SWAP1 MLOAD DUP11 SWAP10 SWAP1 DUP11 PUSH2 0xC08 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xC3F JUMP JUMPDEST PUSH2 0x492 JUMP JUMPDEST DUP6 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1FA JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xB50 JUMP JUMPDEST PUSH1 0x41 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xDA6 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0xD77 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xD98 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xD9F JUMPI JUMPDEST PUSH2 0xD90 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1846 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0xD6F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xD86 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xDE2 PUSH2 0x1630 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0xE63 PUSH2 0x1630 JUMP JUMPDEST SWAP1 PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1FA JUMPI PUSH2 0xE90 PUSH2 0x1653 JUMP JUMPDEST SWAP5 PUSH2 0xE99 PUSH2 0x19FD JUMP JUMPDEST PUSH2 0xEA7 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST DUP2 PUSH0 SWAP7 AND SWAP2 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0x1446 JUMPI JUMPDEST DUP7 MLOAD SWAP2 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 SWAP7 DUP8 DUP5 MSTORE ADDRESS DUP12 DUP6 ADD MSTORE PUSH1 0x20 SWAP7 DUP8 DUP6 DUP8 DUP2 DUP8 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x143C JUMPI PUSH0 SWAP6 PUSH2 0x140D JUMPI JUMPDEST POP DUP3 PUSH2 0xF05 PUSH2 0x178A JUMP JUMPDEST AND SWAP5 DUP6 EXTCODESIZE ISZERO PUSH2 0x1FA JUMPI DUP13 SWAP6 DUP12 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 DUP6 AND DUP1 SWAP9 DUP3 ADD MSTORE PUSH0 DUP2 DUP11 DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x1403 JUMPI PUSH2 0x13F0 JUMPI JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x13EC JUMPI DUP13 DUP8 DUP16 PUSH1 0x64 SWAP1 DUP16 DUP5 SWAP1 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xB53A70B200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE DUP14 ADDRESS SWAP1 DUP5 ADD MSTORE DUP12 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x13E2 JUMPI SWAP1 DUP14 SWAP2 PUSH2 0x13CA JUMPI JUMPDEST POP POP DUP11 MLOAD SWAP10 DUP11 MSTORE ADDRESS DUP14 DUP12 ADD MSTORE DUP9 DUP11 DUP9 DUP2 DUP9 GAS STATICCALL SWAP10 DUP11 ISZERO PUSH2 0x13C0 JUMPI DUP13 SWAP11 PUSH2 0x1391 JUMPI JUMPDEST POP DUP1 DUP11 SUB SWAP10 DUP1 DUP12 GT PUSH2 0x1365 JUMPI SUB PUSH2 0x1000 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST ISZERO PUSH2 0x134C JUMPI POP DUP9 SLOAD DUP2 AND SWAP1 DUP3 DUP3 SUB PUSH2 0x1039 JUMPI DUP11 DUP11 PUSH32 0xCA9E3A1E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP9 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP8 DUP2 DUP14 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x93D JUMPI DUP9 SWAP2 DUP4 SWAP2 DUP14 SWAP2 PUSH2 0x1311 JUMPI JUMPDEST POP AND SWAP9 PUSH1 0x64 DUP14 DUP14 DUP14 MLOAD SWAP8 DUP9 SWAP5 DUP6 SWAP4 PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE ADDRESS DUP12 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x8AA JUMPI DUP11 SWAP4 PUSH2 0x12E2 JUMPI JUMPDEST POP DUP5 DUP10 MLOAD DUP9 DUP13 DUP12 DUP11 PUSH2 0x1155 DUP6 PUSH2 0x1129 DUP12 DUP8 DUP4 ADD SWAP5 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP11 DUP12 DUP8 MSTORE DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 ADD DUP8 MSTORE DUP7 PUSH2 0x16D3 JUMP JUMPDEST DUP3 DUP6 MLOAD SWAP3 GAS CALL DUP13 MLOAD RETURNDATASIZE DUP3 PUSH2 0x12C6 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x128D JUMPI JUMPDEST POP POP PUSH1 0x1 SLOAD AND SWAP2 DUP6 EXTCODESIZE ISZERO PUSH2 0x89F JUMPI DUP9 MLOAD SWAP4 PUSH32 0xDE557A3200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 DUP6 ADD MSTORE DUP8 DUP6 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0xC4 DUP3 ADD MSTORE DUP7 DUP2 PUSH1 0xE4 DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x71D JUMPI DUP5 SWAP4 SWAP3 SWAP2 DUP9 SWAP2 PUSH2 0x1272 JUMPI JUMPDEST POP POP PUSH1 0x44 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS DUP13 DUP6 ADD MSTORE DUP4 ADD MSTORE GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x6F5 JUMPI POP DUP4 SWAP3 PUSH2 0x1244 JUMPI JUMPDEST POP POP PUSH2 0x6A2 JUMPI POP POP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x492 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x126B JUMPI JUMPDEST PUSH2 0x125B DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD PUSH0 DUP1 PUSH2 0x122A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1251 JUMP JUMPDEST PUSH2 0x127F SWAP2 SWAP3 SWAP4 SWAP5 POP PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x719 JUMPI SWAP1 DUP3 SWAP2 DUP7 PUSH0 PUSH2 0x11E2 JUMP JUMPDEST PUSH2 0x12B9 PUSH2 0x12BF SWAP3 DUP13 MLOAD SWAP1 DUP12 DUP3 ADD MSTORE DUP10 DUP10 DUP3 ADD MSTORE DUP14 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH2 0x12B3 DUP2 PUSH2 0x16B7 JUMP JUMPDEST DUP12 PUSH2 0x1B19 JUMP JUMPDEST DUP10 PUSH2 0x1B19 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x116C JUMP JUMPDEST SWAP1 SWAP2 POP PUSH2 0x12DA JUMPI POP DUP10 EXTCODESIZE ISZERO ISZERO JUMPDEST PUSH0 DUP1 PUSH2 0x1164 JUMP JUMPDEST PUSH1 0x1 EQ PUSH2 0x12D3 JUMP JUMPDEST SWAP1 SWAP3 POP DUP7 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x130A JUMPI JUMPDEST PUSH2 0x12FA DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP2 PUSH0 PUSH2 0x10C6 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x12F0 JUMP JUMPDEST SWAP3 DUP1 SWAP3 POP DUP4 SWAP2 POP RETURNDATASIZE DUP4 GT PUSH2 0x1345 JUMPI JUMPDEST PUSH2 0x132A DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x727 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x727 JUMPI DUP2 DUP9 SWAP2 PUSH0 PUSH2 0x1077 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1320 JUMP JUMPDEST SWAP7 SWAP9 POP POP SWAP6 POP POP POP POP POP PUSH2 0x1360 SWAP4 POP PUSH2 0x1ABB JUMP JUMPDEST PUSH2 0x1233 JUMP JUMPDEST POP DUP7 DUP13 PUSH1 0x11 DUP16 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 SWAP10 POP DUP9 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x13B9 JUMPI JUMPDEST PUSH2 0x13A9 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP9 PUSH0 PUSH2 0xFCA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x139F JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE DUP15 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x13D3 SWAP1 PUSH2 0x1676 JUMP JUMPDEST PUSH2 0x13DE JUMPI DUP12 PUSH0 PUSH2 0xFA9 JUMP JUMPDEST DUP12 DUP1 REVERT JUMPDEST DUP13 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP13 DUP1 REVERT JUMPDEST PUSH2 0x13FB SWAP2 SWAP14 POP PUSH2 0x1676 JUMP JUMPDEST PUSH0 SWAP12 PUSH0 PUSH2 0xF50 JUMP JUMPDEST DUP14 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP5 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1435 JUMPI JUMPDEST PUSH2 0x1425 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP4 PUSH0 PUSH2 0xEFB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x141B JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0xFF DUP8 PUSH0 KECCAK256 SLOAD AND PUSH0 EQ PUSH2 0x148A JUMPI DUP2 PUSH0 SLOAD AND PUSH2 0xEB6 JUMPI DUP9 PUSH32 0x8562EB4500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 DUP5 DUP11 PUSH32 0x38553F6C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x14E5 PUSH2 0x178A JUMP JUMPDEST SWAP2 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x1FA JUMPI PUSH2 0x1536 PUSH1 0x20 SWAP3 PUSH2 0x1714 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1FA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1FA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1FA JUMPI PUSH2 0x15BD PUSH2 0x1630 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH2 0x15E1 DUP3 PUSH1 0x1 SLOAD AND ADDRESS PUSH2 0x1872 JUMP JUMPDEST AND DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH0 SLOAD AND OR PUSH0 SSTORE PUSH32 0x873950C2AC59C570001B99D815FFB260542DF229D07132922E2E6F9941FD3DA6 PUSH0 DUP1 LOG2 STOP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1FA JUMPI JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1FA JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x168A JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x183B JUMPI PUSH0 SWAP3 PUSH2 0x1802 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1833 JUMPI JUMPDEST DUP2 PUSH2 0x181E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1FA JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1811 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x1FA JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1FA JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND CALLER SUB PUSH2 0x1895 JUMPI POP POP JUMP JUMPDEST PUSH2 0x18C1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x1714 JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x183B JUMPI DUP5 PUSH1 0x64 SWAP3 DUP8 SWAP6 PUSH0 SWAP2 PUSH2 0x19E0 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x4 DUP7 ADD MSTORE CALLER PUSH1 0x24 DUP7 ADD MSTORE AND PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x183B JUMPI PUSH0 SWAP3 PUSH2 0x19A9 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x1981 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x19D9 JUMPI JUMPDEST PUSH2 0x19C0 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1FA JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x1FA JUMPI PUSH0 DUP1 PUSH2 0x1978 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x19B6 JUMP JUMPDEST PUSH2 0x19F7 SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0xD9F JUMPI PUSH2 0xD90 DUP2 DUP4 PUSH2 0x16D3 JUMP JUMPDEST PUSH0 PUSH2 0x192A JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x1A2A JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 MSTORE PUSH2 0x1AB9 SWAP2 PUSH2 0x1AB4 PUSH1 0x64 DUP4 PUSH2 0x16D3 JUMP JUMPDEST PUSH2 0x1B19 JUMP JUMPDEST JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x40 PUSH32 0xD6B9382EC1786C32610E376E8EE8F2F16ABEDA4ACE3B6276AC958193C75BBBC8 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 DUP2 PUSH1 0x1 SLOAD AND PUSH2 0x1B08 DUP8 DUP3 DUP5 PUSH2 0x1A52 JUMP JUMPDEST DUP5 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE AND SWAP5 AND SWAP3 LOG3 JUMP JUMPDEST SWAP1 PUSH0 PUSH1 0x20 SWAP2 DUP3 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL ISZERO PUSH2 0x183B JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x1B97 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE ISZERO JUMPDEST PUSH2 0x1B55 JUMPI POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x1B4E JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SLOAD DUP1 SWAP8 DUP14 0xF6 0x23 0xC8 DIV 0xA8 0xB8 DUP7 CODESIZE 0x4F PUSH8 0xD95375C26DC77BED DUP16 PUSH31 0xD539D94969B947C064736F6C634300081B0033000000000000000000000000 ","sourceMap":"1713:10354:87:-:0;;;;;;;;;;;;-1:-1:-1;1713:10354:87;;;;11958:9;11954:69;;1713:10354;;;;;12033:25;;;;;;1713:10354;;;;;;;;;;;12033:25;11954:69;11994:18;;11970:1;11994:18;11970:1;11994:18;1713:10354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1581:26:46;1713:10354:87;1581:26:46;;;1713:10354:87;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:87;;;;;;;:::i;:::-;2533:13;1713:10354;;;;2533:13;1713:10354;;;2526:4;2533:13;:::i;:::-;1713:10354;9350:26;;;9346:85;;-1:-1:-1;1713:10354:87;;;;2533:13;1713:10354;9485:29;1713:10354;;9485:29;1713:10354;9346:85;9399:21;1713:10354;9399:21;1713:10354;9399:21;1713:10354;;;;;;;;;;-1:-1:-1;;1713:10354:87;;;;;;;:::i;:::-;;;2533:13;1713:10354;2533:13;1713:10354;;2526:4;2533:13;:::i;:::-;1713:10354;;;;;9901:19;1713:10354;;;;;;;;9897:133;;10159:40;;10155:104;;1713:10354;;;;9901:19;1713:10354;;;;2533:13;1713:10354;;;;;;;10330:50;1713:10354;10330:50;;1713:10354;10155:104;10222:26;1713:10354;10222:26;1713:10354;10222:26;9897:133;9962:57;;;1713:10354;9962:57;1713:10354;;;9962:57;1713:10354;;;;;;;-1:-1:-1;;1713:10354:87;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;1083:103:41;;;:::i;:::-;2533:13:87;1713:10354;;;;2526:4;2533:13;:::i;:::-;3187:5;3633:3050;;1713:10354;;;6823:32;;7041:318;;1713:10354;;;;3964:33;;;;2526:4;3964:33;;;1713:10354;3964:33;;;;;;;;;;;;;;1713:10354;3964:33;;;1713:10354;4245:26;;;;:::i;:::-;1713:10354;4428:40;;;;;;1713:10354;;;;;4428:40;;1713:10354;;;4428:40;;;;1713:10354;;4428:40;;;;;;;;;;;;;1713:10354;4572:73;;;;;;1713:10354;;;;;;;;4572:73;;;;;1713:10354;4572:73;;;;1713:10354;2526:4;1713:10354;;;;;;;;;4572:73;;;;;;;;1713:10354;;;;;;4683:33;;;;;2526:4;4683:33;;1713:10354;4683:33;;;;;;;;;;;;;;;;1713:10354;;;;;;;;;;;4656:78;4749:20;;4745:1932;;1713:10354;;551:66:41;3051:52:42;1713:10354:87;4745:1932;6823:32;;1713:10354;;-1:-1:-1;1713:10354:87;;;;;4986:23;;;1713:10354;;5033:94;;;;;;;;;;;;5183:16;;;;;:::i;:::-;4745:1932;;;;;;;;;;;;;;;;5033:94;5084:20;;;;;;4982:1488;5247:296;;;;;;;;;;;;;;;;4982:1488;-1:-1:-1;;1713:10354:87;;;5199:47:59;;;;;;1713:10354:87;;;5199:47:59;;;1713:10354:87;;;;;;;;;;;;;;;;5199:47:59;;1713:10354:87;;;;5199:47:59;;;;;;;;;:::i;:::-;9770:199;;;;;;;;;;9985:80;;;4982:1488:87;5261:45:59;;;5257:201;;4982:1488:87;1713:10354;;;;;;5979:301;;;;;;1713:10354;;5979:301;1713:10354;5979:301;;;;;1713:10354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5979:301;;1713:10354;5979:301;;;;;;;;;;;;;;;;;4982:1488;1713:10354;;;;;;6307:53;;;;;1713:10354;6307:53;;2526:4;6307:53;;;1713:10354;;;;6307:53;;;;;;;;;;;;4982:1488;6307:57;;6303:149;;4982:1488;;;;6303:149;6399:30;;;;6307:53;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;6307:53;;;;;;;;;;1713:10354;;;;;;;;5979:301;;;;;;;;:::i;:::-;1713:10354;;5979:301;;;;;;;1713:10354;;;;5979:301;1713:10354;;;;;;;;;5979:301;1713:10354;;;5257:201:59;5349:43;5434:12;1713:10354:87;;;5349:43:59;;;;;;;;;1713:10354:87;;;;;;;5349:43:59;;;;;:::i;:::-;;;:::i;:::-;5434:12;;:::i;:::-;5257:201;;;;9985:80;9997:67;;-1:-1:-1;9997:15:59;;1713:10354:87;;;;10015:26:59;:30;;9997:67;9985:80;;;;9997:67;1713:10354:87;10048:16:59;9997:67;;5247:296:87;1713:10354;;;5387:20;;1713:10354;;;;;-1:-1:-1;1713:10354:87;-1:-1:-1;1713:10354:87;;;;;5387:20;;;;;;;;;;;;;;;5247:296;1713:10354;;;;;5453:67;;;1713:10354;5453:67;;;;;1713:10354;2526:4;1713:10354;;;;2526:4;1713:10354;;;;5453:67;;;;1713:10354;5453:67;;;;;;;;;;;;;;;;;5247:296;-1:-1:-1;5434:86:87;-1:-1:-1;5434:86:87;;-1:-1:-1;5199:47:59;5247:296:87;;5453:67;;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;;;;-1:-1:-1;1713:10354:87;;;5453:67;;;;;;;;1713:10354;;;;;;;;;5387:20;;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;;;;;;;;5387:20;;;;;;1713:10354;;;;5387:20;;;;;;1713:10354;;;;;;;;;4785:1882;6635:16;;;;;;;;;;;;;;;;:::i;:::-;4785:1882;;1713:10354;;;;;;;;;;4683:33;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;4683:33;;;;;;;;;4572:73;;;;;:::i;:::-;1713:10354;;4572:73;;;;1713:10354;;;;;;;;;4428:40;;;;;;:::i;:::-;1713:10354;4428:40;;;;;1713:10354;;;;;;;;;3964:33;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;3964:33;;;;;;;;;;1713:10354;;;;;;;;;7041:318;1713:10354;;;7082:19;1713:10354;;;;;;;;7078:271;1713:10354;;;;;;;7041:318;7132:109;7202:20;;1713:10354;7202:20;1713:10354;7202:20;7078:271;7286:48;;;;1713:10354;7286:48;1713:10354;;7286:48;1713:10354;;;;;;-1:-1:-1;;1713:10354:87;;;;;;;:::i;:::-;;;2533:13;1713:10354;2533:13;1713:10354;;2526:4;2533:13;:::i;:::-;1713:10354;;;;;10556:19;1713:10354;;;;;;;;;10552:138;;1713:10354;;;;10556:19;1713:10354;;;;;;;;;;10762:52;1713:10354;10762:52;;1713:10354;10552:138;10626:53;;;1713:10354;10626:53;1713:10354;;;10626:53;1713:10354;;;;;;;;;-1:-1:-1;;1713:10354:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;1083:103:41;;;;;:::i;:::-;1713:10354:87;10973:13;;1713:10354;;10973:13;1713:10354;;10959:10;:27;10955:83;;1713:10354;;11053:13;10973;;;1713:10354;551:66:41;3051:52:42;1713:10354:87;11090:3;1713:10354;;11068:20;;;;;1713:10354;;;;;;;;;;;;;11176:33;1713:10354;11176:33;;11203:4;11176:33;;;1713:10354;11176:33;;;;;;;;;;;;;1713:10354;11176:33;;;11090:3;11228:16;;;;;;11224:102;;11090:3;;;1713:10354;11053:13;;;11224:102;11298:12;10959:10;;11298:12;;:::i;:::-;11224:102;;;;11176:33;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;;;;;;11176:33;;;;;;;11068:20;;;10955:83;11009:18;;1713:10354;11009:18;1713:10354;11009:18;1713:10354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:87;;;;;;1581:26:46;1713:10354:87;;1581:26:46;;1713:10354:87;1581:26:46;;1124:6:44;;;1713:10354:87;1581:26:46;;;;;;;;;;1713:10354:87;1581:26:46;;;1713:10354:87;;;;;;;;1581:26:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;1713:10354:87;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:87;;;;;;;;;;:::i;:::-;;;;8290:19;1713:10354;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:87;;;;;;;;;1124:6:44;1713:10354:87;;;;;;;;;;-1:-1:-1;;1713:10354:87;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;1083:103:41;;;:::i;:::-;2533:13:87;1713:10354;;;;2526:4;2533:13;:::i;:::-;3898:29;1713:10354;;;6823:32;;;;7041:318;;;;1713:10354;;;;;3964:33;;;;2526:4;3964:33;;;1713:10354;3964:33;;;;;;;;;;;;;;1713:10354;3964:33;;;1713:10354;4245:26;;;;:::i;:::-;1713:10354;4428:40;;;;;;1713:10354;;;;;4428:40;;1713:10354;;;4428:40;;;;1713:10354;;4428:40;;;;;;;;;;;;;1713:10354;4572:73;;;;;;1713:10354;;;;;;;;;4572:73;;;;;1713:10354;4572:73;;;;1713:10354;2526:4;;1713:10354;;;;;;;;;4572:73;;;;;;;;;;;1713:10354;;;;;4683:33;;;2526:4;4683:33;;;1713:10354;4683:33;;;;;;;;;;;;;;;;1713:10354;;;;;;;;;;;4749:20;4745:1932;;1713:10354;551:66:41;3051:52:42;1713:10354:87;4745:1932;4785:1882;;;-1:-1:-1;1713:10354:87;;;;;4986:23;;;1713:10354;;5084:20;;;;;;4982:1488;1713:10354;;;5387:20;;;;;;;;;;;;;;;;;;;;;;4982:1488;1713:10354;;;;;;;;5453:67;;;;;1713:10354;5453:67;;;;1713:10354;2526:4;1713:10354;;;;2526:4;1713:10354;;;;5453:67;;;;;;;;;;;4982:1488;1713:10354;;;;5199:47:59;;;;;;;;;;;1713:10354:87;;5199:47:59;;;;;;1713:10354:87;;;;;;;;;;;;;;;;;5199:47:59;;;;;;;;;:::i;:::-;9770:199;;;;;;;;;9985:80;;;4982:1488:87;5261:45:59;;;5257:201;;4982:1488:87;1713:10354;;;;;5979:301;;;;;;1713:10354;;5979:301;1713:10354;5979:301;;;;;1713:10354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5979:301;;1713:10354;5979:301;;;;;;;;;;;;;;;;;4982:1488;1713:10354;;;;;;6307:53;;;;;1713:10354;6307:53;;2526:4;6307:53;;;1713:10354;;;;6307:53;;;;;;;;;;;;4982:1488;6307:57;;6303:149;;4982:1488;;4785:1882;4745:1932;;;;;;;;;;;;;;6307:53;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;6307:53;;;;;;;;;5979:301;;;;;;;;:::i;:::-;1713:10354;;5979:301;;;;;;;5257:201:59;5349:43;5434:12;1713:10354:87;;;5349:43:59;;;;;;;;;1713:10354:87;;;;;;;5349:43:59;;;;;:::i;:::-;;;:::i;:::-;5434:12;;:::i;:::-;5257:201;;;;9985:80;9997:67;;-1:-1:-1;9997:15:59;;10015:26;;;:30;;9997:67;9985:80;;;;9997:67;1713:10354:87;10048:16:59;9997:67;;5453::87;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;5453:67;;;;;;;;;5387:20;;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;;;;;;;;5387:20;;;;;;;;;;;4785:1882;6635:16;;;;;;;;;;;;;;:::i;:::-;4785:1882;;1713:10354;;;;;;;;;;;4683:33;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;4683:33;;;;;;;;;;1713:10354;;;;;;;;;4572:73;;;;:::i;:::-;1713:10354;;4572:73;;;;1713:10354;;;;4572:73;1713:10354;;;;;;;;;4572:73;1713:10354;;;4428:40;;;;;;:::i;:::-;1713:10354;4428:40;;;;;1713:10354;;;;;;;;;3964:33;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;3964:33;;;;;;;;;;1713:10354;;;;;;;;;7041:318;1713:10354;;;7082:19;1713:10354;;;;;;;;7078:271;1713:10354;;;;;;;7041:318;7132:109;7202:20;;1713:10354;7202:20;1713:10354;7202:20;7078:271;7286:48;;;;1713:10354;7286:48;1713:10354;;7286:48;1713:10354;;;;;;-1:-1:-1;;1713:10354:87;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:87;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;1713:10354:87;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1713:10354:87;;;;;;;;8114:13;1713:10354;;;;;;;;;;;;;-1:-1:-1;;1713:10354:87;;;;;;;:::i;:::-;;;2533:13;1713:10354;2533:13;1713:10354;;2526:4;2533:13;:::i;:::-;1713:10354;;;;;;;;;9701:27;1713:10354;9701:27;;1713:10354;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;1931:430:32:-;1713:10354:87;;;2303:50:32;;;2320:22;;1713:10354:87;;;;;;;2303:50:32;;;1713:10354:87;;;;;;;;;;;;;;;2293:61:32;;1931:430;:::o;7711:142:87:-;1713:10354;;;7809:37;;1713:10354;7809:37;1713:10354;7809:37;1713:10354;1124:6:44;1713:10354:87;;7809:37;;;;;;;-1:-1:-1;7809:37:87;;;7802:44;;7711:142;:::o;7809:37::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354;;;;;;;;;;;;7711:142;:::o;7809:37::-;;;-1:-1:-1;7809:37:87;;;1713:10354;;;-1:-1:-1;1713:10354:87;;;;;;;;;;;;;;;;;;;;;;;:::o;2255:438:44:-;;1713:10354:87;;;;2444:10:44;:25;2440:180;;2255:438;;:::o;2440:180::-;2501:20;2513:7;;;;2501:20;:::i;:::-;1713:10354:87;;;1530:22:44;1713:10354:87;1530:22:44;;;:6;;;:22;:6;;;1713:10354:87;1530:22:44;;;;;;;;1713:10354:87;1530:22:44;;;2513:7;1530:22;;;2440:180;1713:10354:87;;;1530:59:44;;;;;1713:10354:87;1530:59:44;;:22;:59;;1713:10354:87;2444:10:44;1713:10354:87;;;;;;;;;;1530:59:44;;;;;;;2513:7;1530:59;;;2440:180;1713:10354:87;;;2485:125:44;;2255:438::o;2485:125::-;2577:18;2513:7;2577:18;1530:22;2513:7;2577:18;1530:59;;;;;;;;;;;;;;;;:::i;:::-;;;1713:10354:87;;;;;;;;;;;;1530:59:44;;;;;;;;;:22;;;;;;;;;;;;;;:::i;:::-;;;;1192:349:41;551:66;2806:53:42;;1316:93:41;;1529:4;3051:52:42;;1192:349:41:o;1316:93::-;1368:30;-1:-1:-1;1368:30:41;;-1:-1:-1;1368:30:41;1219:160:59;1713:10354:87;;;1328:43:59;;;;1713:10354:87;;;;;1328:43:59;;;1713:10354:87;;;;;;;;;1328:43:59;;;;;;1713:10354:87;;1328:43:59;:::i;:::-;;:::i;:::-;1219:160::o;7371:294:87:-;;;1713:10354;7592:66;7371:294;1713:10354;;;;7498:13;1713:10354;;7554:21;;;;;:::i;:::-;1713:10354;;;;;;;;;;;;7592:66;;7371:294::o;8370:720:59:-;;-1:-1:-1;8507:421:59;8370:720;8507:421;;;;;;;;;;;;-1:-1:-1;8507:421:59;;8942:15;;1713:10354:87;;;;8960:26:59;:31;8942:68;8938:146;;8370:720;:::o;8938:146::-;1713:10354:87;9033:40:59;;-1:-1:-1;9033:40:59;1713:10354:87;9033:40:59;1713:10354:87;;-1:-1:-1;9033:40:59;8942:68;9009:1;8994:16;;8942:68;"},"methodIdentifiers":{"addProtocolFeeBurner(address)":"e20c482f","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getFeeRecipient()":"4ccb20c0","getProtocolFeeController()":"85f2dbd4","getTargetToken()":"80db0d51","getVault()":"8d928af8","isApprovedProtocolFeeBurner(address)":"9c5cee9b","recoverProtocolFees(address[])":"b0edcc53","removeProtocolFeeBurner(address)":"b11f061e","setFeeRecipient(address)":"e74b981b","setTargetToken(address)":"1b66cb00","sweepProtocolFeesForToken(address,address,uint256,uint256,address)":"b9746995","sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)":"88f6d2a4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BurnerDidNotConsumeAllowance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidFeeRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeBurner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTargetToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerNotAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"UnsupportedProtocolFeeBurner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnwrapIsNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"FeeRecipientSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurnerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeSwept\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TargetTokenSet\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"addProtocolFeeBurner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTargetToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"isApprovedProtocolFeeBurner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"feeTokens\",\"type\":\"address[]\"}],\"name\":\"recoverProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"protocolFeeBurner\",\"type\":\"address\"}],\"name\":\"removeProtocolFeeBurner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipient\",\"type\":\"address\"}],\"name\":\"setFeeRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"}],\"name\":\"setTargetToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"feeBurner\",\"type\":\"address\"}],\"name\":\"sweepProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC4626\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minTargetTokenAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"contract IProtocolFeeBurner\",\"name\":\"feeBurner\",\"type\":\"address\"}],\"name\":\"sweepProtocolFeesForWrappedToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This withdraws all protocol fees previously collected and allocated to the protocol by the `ProtocolFeeController`, processes them with a configurable \\\"burner\\\" (e.g., from CowSwap) and forwards them to a recipient address. An off-chain process can call `collectAggregateFees(pool)` on the fee controller for a given pool, which will collect and allocate the fees to the protocol and pool creator. `getProtocolFeeAmounts(pool)` returns the fee amounts available for withdrawal. If these are great enough, `sweepProtocolFeesForToken` here will withdraw, convert, and forward them to the final recipient.\",\"errors\":{\"BurnerDidNotConsumeAllowance()\":[{\"details\":\"The fee sweeper approves the burner to pull tokens. If it doesn't do so, revert to avoid a \\\"hanging\\\" approval that could be exploited later.\"}],\"ProtocolFeeBurnerAlreadyAdded(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of an approved protocol fee burner\"}}],\"ProtocolFeeBurnerNotAdded(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of a protocol fee burner to be removed from the allowlist\"}}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}],\"UnsupportedProtocolFeeBurner(address)\":[{\"params\":{\"protocolFeeBurner\":\"The address of the unsupported fee burner\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"FeeRecipientSet(address)\":{\"params\":{\"feeRecipient\":\"The final destination of collected protocol fees\"}},\"ProtocolFeeBurnerAdded(address)\":{\"details\":\"`sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\",\"params\":{\"protocolFeeBurner\":\"The address of the approved protocol fee burner that was added\"}},\"ProtocolFeeBurnerRemoved(address)\":{\"details\":\"`sweepProtocolFeesForToken` can only be called with approved protocol fee burner addresses.\",\"params\":{\"protocolFeeBurner\":\"The address of the approved protocol fee burner that was removed\"}},\"ProtocolFeeSwept(address,address,uint256,address)\":{\"details\":\"This can happen if no target token or burner contract was specified, or the fee token is the target token.\",\"params\":{\"feeToken\":\"The token the fee was collected in (also the target token in this case; no swap necessary)\",\"feeTokenAmount\":\"The number of feeTokens\",\"pool\":\"The pool on which the fee was collected\",\"recipient\":\"The recipient of the fee tokens\"}},\"TargetTokenSet(address)\":{\"params\":{\"token\":\"The preferred token for receiving protocol fees\"}}},\"kind\":\"dev\",\"methods\":{\"addProtocolFeeBurner(address)\":{\"details\":\"This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol fee burners.\",\"params\":{\"protocolFeeBurner\":\"The address of an approved protocol fee burner to be added\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getFeeRecipient()\":{\"details\":\"Can be changed by `setFeeRecipient`.\",\"returns\":{\"_0\":\"feeRecipient The current fee recipient\"}},\"getProtocolFeeController()\":{\"details\":\"It is not immutable in the Vault, so we need to fetch it every time.\",\"returns\":{\"_0\":\"protocolFeeController The address of the current `ProtocolFeeController`\"}},\"getTargetToken()\":{\"details\":\"This is the token the burner will swap all fee tokens for. Can be changed by `setTargetToken`.\",\"returns\":{\"_0\":\"targetToken The current target token\"}},\"getVault()\":{\"details\":\"This function is virtual to allow for overriding in derived contracts which also inherits contracts with `getVault()` definition.\",\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isApprovedProtocolFeeBurner(address)\":{\"params\":{\"protocolFeeBurner\":\"The address to be checked\"},\"returns\":{\"_0\":\"isApproved True if the given address is on the approved protocol fee burner allowlist\"}},\"recoverProtocolFees(address[])\":{\"details\":\"It will recover the full balance of all the tokens. This can only be called by the `feeRecipient`.\",\"params\":{\"feeTokens\":\"The tokens to recover\"}},\"removeProtocolFeeBurner(address)\":{\"details\":\"This is a permissioned call. `sweepProtocolFeesForToken` can only be called with approved protocol fee burners.\",\"params\":{\"protocolFeeBurner\":\"The address of a protocol fee burner on the allowlist to be removed\"}},\"setFeeRecipient(address)\":{\"details\":\"This is a permissioned function.\",\"params\":{\"feeRecipient\":\"The address of the new fee recipient\"}},\"setTargetToken(address)\":{\"details\":\"This is the token for which the burner will attempt to swap all collected fee tokens.\",\"params\":{\"targetToken\":\"The address of the target token\"}},\"sweepProtocolFeesForToken(address,address,uint256,uint256,address)\":{\"details\":\"This will withdraw the fee token from the controller to this contract, and attempt to convert and forward the proceeds to the fee recipient. Note that this requires governance to grant this contract permission to call `withdrawProtocolFeesForToken` on the `ProtocolFeeController`. This is a permissioned call, since it involves a swap and a permissionless sweep could be triggered at times disadvantageous to the protocol (e.g., flash crashes). The general design is for an off-chain process to periodically collect fees from the Vault and check the protocol fee amounts available for withdrawal. Once these are greater than a threshold, compute the expected proceeds to determine the limits (amount and deadline), then call the sweeper to put in the order with the burner.\",\"params\":{\"deadline\":\"Deadline for the burn operation (swap), after which it will revert\",\"feeBurner\":\"The protocol fee burner to be used (or the zero address to fall back on direct transfer)\",\"feeToken\":\"The fee token in the pool\",\"minTargetTokenAmountOut\":\"The minimum number of target tokens to be received\",\"pool\":\"The pool that incurred the fees we're withdrawing\"}},\"sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)\":{\"params\":{\"deadline\":\"Deadline for the burn operation (swap), after which it will revert\",\"feeBurner\":\"The protocol fee burner to be used (or the zero address to fall back on direct transfer)\",\"feeToken\":\"The fee token in the pool\",\"minTargetTokenAmountOut\":\"The minimum number of target tokens to be received\",\"pool\":\"The pool that incurred the fees we're withdrawing\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BurnerDidNotConsumeAllowance()\":[{\"notice\":\"The burner did not consume its entire allowance.\"}],\"CannotReceiveEth()\":[{\"notice\":\"All pool tokens are ERC20, so this contract should not handle ETH.\"}],\"InvalidFeeRecipient()\":[{\"notice\":\"The fee recipient is invalid.\"}],\"InvalidProtocolFeeBurner()\":[{\"notice\":\"The protocol fee burner to be added is invalid.\"}],\"InvalidTargetToken()\":[{\"notice\":\"The target token is invalid.\"}],\"ProtocolFeeBurnerAlreadyAdded(address)\":[{\"notice\":\"Protocol fee burners can only be added to the allowlist once.\"}],\"ProtocolFeeBurnerNotAdded(address)\":[{\"notice\":\"Protocol fee burners must be added to the allowlist before being removed.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"UnsupportedProtocolFeeBurner(address)\":[{\"notice\":\"The specified fee burner has not been approved.\"}],\"UnwrapIsNotAllowed()\":[{\"notice\":\"Unwrapping is not allowed for the operation.\"}]},\"events\":{\"FeeRecipientSet(address)\":{\"notice\":\"Emitted when the fee recipient address is set or updated.\"},\"ProtocolFeeBurnerAdded(address)\":{\"notice\":\"Emitted when a burner is added to the protocol fee burner allowlist.\"},\"ProtocolFeeBurnerRemoved(address)\":{\"notice\":\"Emitted when a burner is removed from the protocol fee burner allowlist.\"},\"ProtocolFeeSwept(address,address,uint256,address)\":{\"notice\":\"Emitted when a fee token is transferred directly, vs. calling the burner.\"},\"TargetTokenSet(address)\":{\"notice\":\"Emitted when the target token is set or updated.\"}},\"kind\":\"user\",\"methods\":{\"addProtocolFeeBurner(address)\":{\"notice\":\"Add an approved fee burner to the allowlist.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getFeeRecipient()\":{\"notice\":\"Getter for the current fee recipient.\"},\"getProtocolFeeController()\":{\"notice\":\"Return the address of the current `ProtocolFeeController` from the Vault.\"},\"getTargetToken()\":{\"notice\":\"Getter for the target token.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isApprovedProtocolFeeBurner(address)\":{\"notice\":\"Check whether a given address corresponds to an approved protocol fee burner.\"},\"recoverProtocolFees(address[])\":{\"notice\":\"Retrieve any tokens \\\"stuck\\\" in this contract (e.g., dust, or failed conversions).\"},\"removeProtocolFeeBurner(address)\":{\"notice\":\"Remove a fee burner from the allowlist.\"},\"setFeeRecipient(address)\":{\"notice\":\"Update the fee recipient address.\"},\"setTargetToken(address)\":{\"notice\":\"Update the address of the target token.\"},\"sweepProtocolFeesForToken(address,address,uint256,uint256,address)\":{\"notice\":\"Withdraw, convert, and forward protocol fees for a given pool and token.\"},\"sweepProtocolFeesForWrappedToken(address,address,uint256,uint256,address)\":{\"notice\":\"The same as `sweepProtocolFeesForToken`, but for wrapped tokens.\"}},\"notice\":\"Withdraw protocol fees, convert them to a target token, and forward to a recipient.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ProtocolFeeSweeper.sol\":\"ProtocolFeeSweeper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x11ec2b653633cbcc6a99d426df178007a98d1154a39a1ada961239be39eec069\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://40eed42ee57746bbf4711bb4aee856328cd70cc02aa3ff05e8dd719868fcd524\",\"dweb:/ipfs/QmX5uAoB9W6UUehgSRvVW6hun3XE53eZwKsm4kHVqtJs8C\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/ProtocolFeeSweeper.sol\":{\"keccak256\":\"0x111475fcdfd10e5e6c6b054e6b37cc5a89725050c73cfd338d13497a425931a3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6dc090a277adf9e63a93f1f0db8e15ebfb354f30e415a5bc566087f6284beeb7\",\"dweb:/ipfs/QmRequjbKYe8nLLdkwqHEw6eakHLQe1MYAyRuQZj1zLM7y\"]}},\"version\":1}"}},"contracts/TokenPairRegistry.sol":{"TokenPairRegistry":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"buffer","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"EmptyPath","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"address","name":"buffer","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"InvalidBufferPath","type":"error"},{"inputs":[{"internalType":"address","name":"poolOrBuffer","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"InvalidRemovePath","type":"error"},{"inputs":[{"internalType":"address","name":"path","type":"address"}],"name":"InvalidSimplePath","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"pathsLength","type":"uint256"}],"name":"PathAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"pathsLength","type":"uint256"}],"name":"PathRemoved","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct SwapPathStep[]","name":"steps","type":"tuple[]"}],"name":"addPath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolOrBuffer","type":"address"}],"name":"addSimplePath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getPathAt","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct SwapPathStep[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getPathCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getPaths","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct SwapPathStep[][]","name":"","type":"tuple[][]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removePathAtIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"poolOrBuffer","type":"address"}],"name":"removeSimplePath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461011f57601f611e7438819003918201601f19168301916001600160401b0383118484101761012357808492604094855283398101031261011f5780516001600160a01b03918282169081830361011f576020015183811680910361011f57801561010c5760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100fd5760a052611d3c9081610138823960805181611796015260a05181818160e80152818161013d0152818161050e0152818161079b01528181610a4501528181610be801526119d80152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c8063057074ff1461119357806332fffdbd14611074578063715018a614610ffc57806379ba509714610fa55780637c7d370a14610e55578063815ca70f14610910578063851c1bb3146108c05780638da5cb5b1461089b57806394ee0a3b1461085b578063a89b1128146107f8578063aaabadc514610755578063bc138aa3146104e1578063e30c3978146104bb578063f2fde38b1461043b578063f335b520146101105763fbfa77cf146100c9575f80fd5b3461010c575f60031936011261010c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b3461010c5760208060031936011261010c5761012a611237565b61013261184f565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016604051937fc673bdaf0000000000000000000000000000000000000000000000000000000085528284169081600487015260249581818881875afa9081156102e6575f9161041e575b50156102f157505f9085604051809481937fca4f280300000000000000000000000000000000000000000000000000000000835260048301525afa9081156102e6575f916102c4575b508051925f198401938411610298575f5b84811061020957005b600180820180831161026c57815b610226575b5050600101610200565b84518110156102675781809161026088610240878a611656565b51168961024d848b611656565b511661025a81838b611cbd565b88611cbd565b0190610217565b61021c565b877f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b847f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b6102e091503d805f833e6102d881836112e1565b810190611904565b846101ef565b6040513d5f823e3d90fd5b94935091506040517f6844846b00000000000000000000000000000000000000000000000000000000815282600482015284818581855afa9081156102e6575f916103f1575b50156103c7578390604051938480927f0387587d0000000000000000000000000000000000000000000000000000000082528560048301525afa9182156102e657610396935f93610398575b5050610390818381611c16565b80611c16565b005b6103b8929350803d106103c0575b6103b081836112e1565b8101906117d0565b908380610383565b503d6103a6565b507fb309199b000000000000000000000000000000000000000000000000000000005f526004525ffd5b6104119150853d8711610417575b61040981836112e1565b8101906117ef565b85610337565b503d6103ff565b6104359150823d84116104175761040981836112e1565b876101a6565b3461010c57602060031936011261010c57610454611237565b61045c61188c565b6001600160a01b0380911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b3461010c575f60031936011261010c5760206001600160a01b0360015416604051908152f35b3461010c5760208060031936011261010c576104fb611237565b61050361184f565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016604051937fc673bdaf0000000000000000000000000000000000000000000000000000000085528284169081600487015260249581818881875afa9081156102e6575f91610738575b501561065757505f9085604051809481937fca4f280300000000000000000000000000000000000000000000000000000000835260048301525afa9081156102e6575f9161063d575b508051925f198401938411610298575f5b8481106105da57005b600180820180831161026c57815b6105f7575b50506001016105d1565b84518110156106385781809161063188610611878a611656565b51168961061e848b611656565b511661062b81838b611aa4565b88611aa4565b01906105e8565b6105ed565b61065191503d805f833e6102d881836112e1565b846105c0565b94935091506040517f6844846b00000000000000000000000000000000000000000000000000000000815282600482015284818581855afa9081156102e6575f9161071b575b50156103c7578390604051938480927f0387587d0000000000000000000000000000000000000000000000000000000082528560048301525afa9182156102e657610396935f936106fc575b50506106f6818381611aa4565b80611aa4565b610713929350803d106103c0576103b081836112e1565b9083806106e9565b6107329150853d87116104175761040981836112e1565b8561069d565b61074f9150823d84116104175761040981836112e1565b87610577565b3461010c575f60031936011261010c576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa9081156102e6576020925f926107d9575b5060405191168152f35b6107f1919250833d85116103c0576103b081836112e1565b90836107cf565b3461010c57602060031936011261010c57610811611237565b61081961184f565b6001600160a01b035f54163314610833576103969061189f565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461010c57604060031936011261010c57610885610877611237565b61087f61124d565b90611807565b5f526002602052602060405f2054604051908152f35b3461010c575f60031936011261010c5760206001600160a01b035f5416604051908152f35b3461010c57602060031936011261010c576004357fffffffff000000000000000000000000000000000000000000000000000000008116810361010c5761090860209161176b565b604051908152f35b3461010c57604060031936011261010c57610929611237565b60243567ffffffffffffffff811161010c573660238201121561010c57806004013561095481611322565b9161096260405193846112e1565b81835260208301602460608094028301019136831161010c57602401905b828210610df357858561099161184f565b805115610dcb5780515f198101908111610d595760206109b96001600160a01b039284611656565b51015116906109c88284611807565b5f9390815b8351861015610cfe576109e08685611656565b51604081015190919015610b8b576001600160a01b03825116906001600160a01b03602084015116916040517f0387587d0000000000000000000000000000000000000000000000000000000081528160048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa80156102e6576001600160a01b03915f91610b6c575b5016918215610b40576001600160a01b031691808303610aec5750808303610abb575050506001600160a01b0360206001925b0151169501946109cd565b7f29198c3d000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b828203610b0e578303610abb575050506001600160a01b036020600192610ab0565b507f29198c3d000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b507f85f41299000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b610b85915060203d6020116103c0576103b081836112e1565b8b610a7d565b926001600160a01b038293959697925116906001600160a01b0360208501511695604051987fca4f2803000000000000000000000000000000000000000000000000000000008a528360048b01525f8a6024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa998a156102e6575f9a610ce2575b505f985f935f5b8c51811015610c82578c6001600160a01b03610c3b8383611656565b51166001600160a01b038c1614610c79575b6001600160a01b03610c60838e93611656565b511614610c70575b600101610c1f565b60019550610c68565b60019c50610c4d565b509750975097909493985015908115610cd9575b50610cae57506001600160a01b036020600192610ab0565b7fb309199b000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90501588610c96565b610cf7919a503d805f833e6102d881836112e1565b988a610c18565b508284825f52600260205260405f2093610d178561166a565b50505f5b8351811015610d86578554905f198201918211610d5957610d53610d416001938961133a565b50610d4c8388611656565b51906116a2565b01610d1b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50835f5260026020527f0836045dc838da47be101a8d10036b82ec004688d856daa53cd0e56807d3bfca60206001600160a01b0360405f2054936040519485521692a3005b7f20a2d33d000000000000000000000000000000000000000000000000000000005f5260045ffd5b838236031261010c5760405190610e0982611298565b6001600160a01b038335818116810361010c5783526020840135908116810361010c576020830152604083013590811515820361010c5782602092604088950152815201910190610980565b3461010c57604060031936011261010c57610e71610877611237565b5f5260206002815260405f208054610e8881611322565b90610e9660405192836112e1565b80825283820180935f52845f20855f925b848410610f87575084866040519283928184019082855251809152604084019160408260051b86010193925f905b838210610ee25786860387f35b919395947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08592949682030183528651908280835192838152019201905f905b808210610f4357505050908060019297019201920186959492939193610ed5565b9193610f7a6001929486519060406060926001600160a01b0380825116845260208201511660208401520151151560408201520190565b9401920186939291610f22565b6001918291610f958561137c565b8152019201920191908690610ea7565b3461010c575f60031936011261010c57336001600160a01b036001541603610fd0576103963361189f565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b3461010c575f60031936011261010c5761101461188c565b5f6001600160a01b037fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461010c5761108236611263565b61108a61184f565b6110948284611807565b5f52600260205260405f20908154908181101561116b576001821180611157575b611102575b50506020816110e97fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da936115a8565b54926001600160a01b03809160405195865216941692a3005b90915f198301928311610d595761115160209261114b6111437fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da968561133a565b50918461133a565b9061156b565b916110ba565b505f198201828111610d59578114156110b5565b7f4e23d035000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461010c576111ab6111a436611263565b9291611807565b5f526111ca6111c4602092600260205260405f2061133a565b5061137c565b60405190602082016020835281518091526020604084019201935f5b8281106111f35784840385f35b9091928261122b60019288519060406060926001600160a01b0380825116845260208201511660208401520151151560408201520190565b960195939291016111e6565b600435906001600160a01b038216820361010c57565b602435906001600160a01b038216820361010c57565b600319606091011261010c576001600160a01b0390600435828116810361010c5791602435908116810361010c579060443590565b6060810190811067ffffffffffffffff8211176112b457604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176112b457604052565b67ffffffffffffffff81116112b45760051b60200190565b805482101561134f575f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b90815461138881611322565b9260409361139960405191826112e1565b82815280946020809201925f5260205f20905f935b8585106113bd57505050505050565b60028460019284516113ce81611298565b60ff6001600160a01b03808954168352868901549081168584015260a01c161515868201528152019301940193916113ae565b818114611567578154916801000000000000000083116112b4578154838355808410611501575b505f5260205f20905f5260205f20905f905b8382106114475750505050565b806001918403611462575b600280910193019101909161143a565b6114fc6001600160a01b0360ff81845416917fffffffffffffffffffffffff00000000000000000000000000000000000000009283895416178855859283890193860191825416908454161783555460a01c167fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff0000000000000000000000000000000000000000835492151560a01b169116179055565b611452565b60017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083168303610d595785168503610d5957835f5260205f209160011b8201918560011b015b828110611557575050611428565b5f80825582820155600201611549565b5050565b919061157c5761157a91611401565b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b80548015611629575f1901906115be828261133a565b61157c578054905f8155816115d257505055565b6001907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83168303610d59575f5260205f209160011b8201915b8281106116195750505055565b5f8082558282015560020161160c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b805182101561134f5760209160051b010190565b8054680100000000000000008110156112b45761168c9160018201815561133a565b9091565b80541561134f575f5260205f20905f90565b90815491680100000000000000008310156112b4576001830180825583101561134f5761157a926040915f5260205f209060011b01916001600160a01b0392600184835116917fffffffffffffffffffffffff00000000000000000000000000000000000000009283825416178155019360208301511690845416178355015115157fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff0000000000000000000000000000000000000000835492151560a01b169116179055565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526117ca81611298565b51902090565b9081602091031261010c57516001600160a01b038116810361010c5790565b9081602091031261010c5751801515810361010c5790565b6040519060208201927fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16845260601b166034820152602881526117ca81611298565b61188561187e7fffffffff000000000000000000000000000000000000000000000000000000005f351661176b565b339061198e565b1561083357565b6001600160a01b035f54163303610fd057565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f546001600160a01b0380921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b602090818184031261010c5780519067ffffffffffffffff821161010c57019180601f8401121561010c57825161193a81611322565b9361194860405195866112e1565b818552838086019260051b82010192831161010c578301905b82821061196f575050505090565b81516001600160a01b038116810361010c578152908301908301611961565b906001600160a01b039081805f54169116908114611a9c57604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156102e65785935f95611a78575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa9182156102e6575f92611a5f57505090565b611a759250803d106104175761040981836112e1565b90565b606492919550611a9490853d87116103c0576103b081836112e1565b949091611a0a565b505050600190565b91611aaf8183611807565b5f526020600260205260409160405f205f5b815480821015611bd357611ad5828461133a565b5060019081808254149182611bb2575b82611b8f575b5050611afb575050600101611ac1565b9080929697985011611b4c575b507fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da9350611b35816115a8565b5493519384526001600160a01b03908116941692a3565b5f198101908111610d59577fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da9461114b611143611b89938561133a565b5f611b08565b611b9a919250611690565b5001546001600160a01b03868116911614815f611aeb565b9150611bbd82611690565b50546001600160a01b038c811691161491611ae5565b8684897f3a9458d9000000000000000000000000000000000000000000000000000000005f526001600160a01b039283809216600452166024521660445260645ffd5b611c208383611807565b6001600160a01b03809416938060405193611c3a85611298565b16835284602084015260016040840152815f52600260205260405f2091611c608361166a565b505082545f198101908111610d59577f0836045dc838da47be101a8d10036b82ec004688d856daa53cd0e56807d3bfca94611ca0611ca69260209661133a565b506116a2565b5f526002825260405f2054936040519485521692a3565b611cc78383611807565b6001600160a01b03809416938060405193611ce185611298565b1683528460208401525f6040840152815f52600260205260405f2091611c608361166a56fea2646970667358221220c8a382897f62aa9b3b813657f2d689d3d97b0b2bc9ef3117f10b3d087f5fa65564736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x11F JUMPI PUSH1 0x1F PUSH2 0x1E74 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x123 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x11F JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x11F JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x11F JUMPI DUP1 ISZERO PUSH2 0x10C JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xFD JUMPI PUSH1 0xA0 MSTORE PUSH2 0x1D3C SWAP1 DUP2 PUSH2 0x138 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x1796 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xE8 ADD MSTORE DUP2 DUP2 PUSH2 0x13D ADD MSTORE DUP2 DUP2 PUSH2 0x50E ADD MSTORE DUP2 DUP2 PUSH2 0x79B ADD MSTORE DUP2 DUP2 PUSH2 0xA45 ADD MSTORE DUP2 DUP2 PUSH2 0xBE8 ADD MSTORE PUSH2 0x19D8 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x57074FF EQ PUSH2 0x1193 JUMPI DUP1 PUSH4 0x32FFFDBD EQ PUSH2 0x1074 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xFFC JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xFA5 JUMPI DUP1 PUSH4 0x7C7D370A EQ PUSH2 0xE55 JUMPI DUP1 PUSH4 0x815CA70F EQ PUSH2 0x910 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x8C0 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x89B JUMPI DUP1 PUSH4 0x94EE0A3B EQ PUSH2 0x85B JUMPI DUP1 PUSH4 0xA89B1128 EQ PUSH2 0x7F8 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x755 JUMPI DUP1 PUSH4 0xBC138AA3 EQ PUSH2 0x4E1 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x4BB JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x43B JUMPI DUP1 PUSH4 0xF335B520 EQ PUSH2 0x110 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0xC9 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x12A PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x132 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP4 PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP3 DUP5 AND SWAP1 DUP2 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x24 SWAP6 DUP2 DUP2 DUP9 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x41E JUMPI JUMPDEST POP ISZERO PUSH2 0x2F1 JUMPI POP PUSH0 SWAP1 DUP6 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x2C4 JUMPI JUMPDEST POP DUP1 MLOAD SWAP3 PUSH0 NOT DUP5 ADD SWAP4 DUP5 GT PUSH2 0x298 JUMPI PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x209 JUMPI STOP JUMPDEST PUSH1 0x1 DUP1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x26C JUMPI DUP2 JUMPDEST PUSH2 0x226 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x200 JUMP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x267 JUMPI DUP2 DUP1 SWAP2 PUSH2 0x260 DUP9 PUSH2 0x240 DUP8 DUP11 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND DUP10 PUSH2 0x24D DUP5 DUP12 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND PUSH2 0x25A DUP2 DUP4 DUP12 PUSH2 0x1CBD JUMP JUMPDEST DUP9 PUSH2 0x1CBD JUMP JUMPDEST ADD SWAP1 PUSH2 0x217 JUMP JUMPDEST PUSH2 0x21C JUMP JUMPDEST DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x2E0 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2D8 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1904 JUMP JUMPDEST DUP5 PUSH2 0x1EF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP5 SWAP4 POP SWAP2 POP PUSH1 0x40 MLOAD PUSH32 0x6844846B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 DUP6 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x3F1 JUMPI JUMPDEST POP ISZERO PUSH2 0x3C7 JUMPI DUP4 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x387587D00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP6 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2E6 JUMPI PUSH2 0x396 SWAP4 PUSH0 SWAP4 PUSH2 0x398 JUMPI JUMPDEST POP POP PUSH2 0x390 DUP2 DUP4 DUP2 PUSH2 0x1C16 JUMP JUMPDEST DUP1 PUSH2 0x1C16 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3B8 SWAP3 SWAP4 POP DUP1 RETURNDATASIZE LT PUSH2 0x3C0 JUMPI JUMPDEST PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x17D0 JUMP JUMPDEST SWAP1 DUP4 DUP1 PUSH2 0x383 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3A6 JUMP JUMPDEST POP PUSH32 0xB309199B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x411 SWAP2 POP DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x417 JUMPI JUMPDEST PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x17EF JUMP JUMPDEST DUP6 PUSH2 0x337 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3FF JUMP JUMPDEST PUSH2 0x435 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP8 PUSH2 0x1A6 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x454 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x45C PUSH2 0x188C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x4FB PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x503 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP4 PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP3 DUP5 AND SWAP1 DUP2 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x24 SWAP6 DUP2 DUP2 DUP9 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x738 JUMPI JUMPDEST POP ISZERO PUSH2 0x657 JUMPI POP PUSH0 SWAP1 DUP6 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x63D JUMPI JUMPDEST POP DUP1 MLOAD SWAP3 PUSH0 NOT DUP5 ADD SWAP4 DUP5 GT PUSH2 0x298 JUMPI PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x5DA JUMPI STOP JUMPDEST PUSH1 0x1 DUP1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x26C JUMPI DUP2 JUMPDEST PUSH2 0x5F7 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x5D1 JUMP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x638 JUMPI DUP2 DUP1 SWAP2 PUSH2 0x631 DUP9 PUSH2 0x611 DUP8 DUP11 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND DUP10 PUSH2 0x61E DUP5 DUP12 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND PUSH2 0x62B DUP2 DUP4 DUP12 PUSH2 0x1AA4 JUMP JUMPDEST DUP9 PUSH2 0x1AA4 JUMP JUMPDEST ADD SWAP1 PUSH2 0x5E8 JUMP JUMPDEST PUSH2 0x5ED JUMP JUMPDEST PUSH2 0x651 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2D8 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP5 PUSH2 0x5C0 JUMP JUMPDEST SWAP5 SWAP4 POP SWAP2 POP PUSH1 0x40 MLOAD PUSH32 0x6844846B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 DUP6 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x71B JUMPI JUMPDEST POP ISZERO PUSH2 0x3C7 JUMPI DUP4 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x387587D00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP6 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2E6 JUMPI PUSH2 0x396 SWAP4 PUSH0 SWAP4 PUSH2 0x6FC JUMPI JUMPDEST POP POP PUSH2 0x6F6 DUP2 DUP4 DUP2 PUSH2 0x1AA4 JUMP JUMPDEST DUP1 PUSH2 0x1AA4 JUMP JUMPDEST PUSH2 0x713 SWAP3 SWAP4 POP DUP1 RETURNDATASIZE LT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP1 DUP4 DUP1 PUSH2 0x6E9 JUMP JUMPDEST PUSH2 0x732 SWAP2 POP DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP6 PUSH2 0x69D JUMP JUMPDEST PUSH2 0x74F SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP8 PUSH2 0x577 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0x7D9 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x7F1 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x7CF JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x811 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x819 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND CALLER EQ PUSH2 0x833 JUMPI PUSH2 0x396 SWAP1 PUSH2 0x189F JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x885 PUSH2 0x877 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x87F PUSH2 0x124D JUMP JUMPDEST SWAP1 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI PUSH2 0x908 PUSH1 0x20 SWAP2 PUSH2 0x176B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x929 PUSH2 0x1237 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10C JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x10C JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x954 DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP2 PUSH2 0x962 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x12E1 JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x24 PUSH1 0x60 DUP1 SWAP5 MUL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x10C JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xDF3 JUMPI DUP6 DUP6 PUSH2 0x991 PUSH2 0x184F JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xDCB JUMPI DUP1 MLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0xD59 JUMPI PUSH1 0x20 PUSH2 0x9B9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP5 PUSH2 0x1656 JUMP JUMPDEST MLOAD ADD MLOAD AND SWAP1 PUSH2 0x9C8 DUP3 DUP5 PUSH2 0x1807 JUMP JUMPDEST PUSH0 SWAP4 SWAP1 DUP2 JUMPDEST DUP4 MLOAD DUP7 LT ISZERO PUSH2 0xCFE JUMPI PUSH2 0x9E0 DUP7 DUP6 PUSH2 0x1656 JUMP JUMPDEST MLOAD PUSH1 0x40 DUP2 ADD MLOAD SWAP1 SWAP2 SWAP1 ISZERO PUSH2 0xB8B JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 MLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 ADD MLOAD AND SWAP2 PUSH1 0x40 MLOAD PUSH32 0x387587D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH0 SWAP2 PUSH2 0xB6C JUMPI JUMPDEST POP AND SWAP2 DUP3 ISZERO PUSH2 0xB40 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP1 DUP4 SUB PUSH2 0xAEC JUMPI POP DUP1 DUP4 SUB PUSH2 0xABB JUMPI POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH1 0x1 SWAP3 JUMPDEST ADD MLOAD AND SWAP6 ADD SWAP5 PUSH2 0x9CD JUMP JUMPDEST PUSH32 0x29198C3D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP3 DUP3 SUB PUSH2 0xB0E JUMPI DUP4 SUB PUSH2 0xABB JUMPI POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH2 0xAB0 JUMP JUMPDEST POP PUSH32 0x29198C3D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST POP PUSH32 0x85F4129900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xB85 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP12 PUSH2 0xA7D JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 SWAP4 SWAP6 SWAP7 SWAP8 SWAP3 MLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP6 ADD MLOAD AND SWAP6 PUSH1 0x40 MLOAD SWAP9 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP4 PUSH1 0x4 DUP12 ADD MSTORE PUSH0 DUP11 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP10 DUP11 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP11 PUSH2 0xCE2 JUMPI JUMPDEST POP PUSH0 SWAP9 PUSH0 SWAP4 PUSH0 JUMPDEST DUP13 MLOAD DUP2 LT ISZERO PUSH2 0xC82 JUMPI DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC3B DUP4 DUP4 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND EQ PUSH2 0xC79 JUMPI JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC60 DUP4 DUP15 SWAP4 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND EQ PUSH2 0xC70 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0xC1F JUMP JUMPDEST PUSH1 0x1 SWAP6 POP PUSH2 0xC68 JUMP JUMPDEST PUSH1 0x1 SWAP13 POP PUSH2 0xC4D JUMP JUMPDEST POP SWAP8 POP SWAP8 POP SWAP8 SWAP1 SWAP5 SWAP4 SWAP9 POP ISZERO SWAP1 DUP2 ISZERO PUSH2 0xCD9 JUMPI JUMPDEST POP PUSH2 0xCAE JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH2 0xAB0 JUMP JUMPDEST PUSH32 0xB309199B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP ISZERO DUP9 PUSH2 0xC96 JUMP JUMPDEST PUSH2 0xCF7 SWAP2 SWAP11 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2D8 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP9 DUP11 PUSH2 0xC18 JUMP JUMPDEST POP DUP3 DUP5 DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP4 PUSH2 0xD17 DUP6 PUSH2 0x166A JUMP JUMPDEST POP POP PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0xD86 JUMPI DUP6 SLOAD SWAP1 PUSH0 NOT DUP3 ADD SWAP2 DUP3 GT PUSH2 0xD59 JUMPI PUSH2 0xD53 PUSH2 0xD41 PUSH1 0x1 SWAP4 DUP10 PUSH2 0x133A JUMP JUMPDEST POP PUSH2 0xD4C DUP4 DUP9 PUSH2 0x1656 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x16A2 JUMP JUMPDEST ADD PUSH2 0xD1B JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP4 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x836045DC838DA47BE101A8D10036B82EC004688D856DAA53CD0E56807D3BFCA PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 STOP JUMPDEST PUSH32 0x20A2D33D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLDATASIZE SUB SLT PUSH2 0x10C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0xE09 DUP3 PUSH2 0x1298 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI DUP4 MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x10C JUMPI DUP3 PUSH1 0x20 SWAP3 PUSH1 0x40 DUP9 SWAP6 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x980 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0xE71 PUSH2 0x877 PUSH2 0x1237 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x20 PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD PUSH2 0xE88 DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP1 PUSH2 0xE96 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP1 DUP3 MSTORE DUP4 DUP3 ADD DUP1 SWAP4 PUSH0 MSTORE DUP5 PUSH0 KECCAK256 DUP6 PUSH0 SWAP3 JUMPDEST DUP5 DUP5 LT PUSH2 0xF87 JUMPI POP DUP5 DUP7 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP3 DUP2 DUP5 ADD SWAP1 DUP3 DUP6 MSTORE MLOAD DUP1 SWAP2 MSTORE PUSH1 0x40 DUP5 ADD SWAP2 PUSH1 0x40 DUP3 PUSH1 0x5 SHL DUP7 ADD ADD SWAP4 SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xEE2 JUMPI DUP7 DUP7 SUB DUP8 RETURN JUMPDEST SWAP2 SWAP4 SWAP6 SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP6 SWAP3 SWAP5 SWAP7 DUP3 SUB ADD DUP4 MSTORE DUP7 MLOAD SWAP1 DUP3 DUP1 DUP4 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP3 ADD SWAP1 PUSH0 SWAP1 JUMPDEST DUP1 DUP3 LT PUSH2 0xF43 JUMPI POP POP POP SWAP1 DUP1 PUSH1 0x1 SWAP3 SWAP8 ADD SWAP3 ADD SWAP3 ADD DUP7 SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP4 PUSH2 0xED5 JUMP JUMPDEST SWAP2 SWAP4 PUSH2 0xF7A PUSH1 0x1 SWAP3 SWAP5 DUP7 MLOAD SWAP1 PUSH1 0x40 PUSH1 0x60 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SWAP5 ADD SWAP3 ADD DUP7 SWAP4 SWAP3 SWAP2 PUSH2 0xF22 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP3 SWAP2 PUSH2 0xF95 DUP6 PUSH2 0x137C JUMP JUMPDEST DUP2 MSTORE ADD SWAP3 ADD SWAP3 ADD SWAP2 SWAP1 DUP7 SWAP1 PUSH2 0xEA7 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SLOAD AND SUB PUSH2 0xFD0 JUMPI PUSH2 0x396 CALLER PUSH2 0x189F JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x1014 PUSH2 0x188C JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH2 0x1082 CALLDATASIZE PUSH2 0x1263 JUMP JUMPDEST PUSH2 0x108A PUSH2 0x184F JUMP JUMPDEST PUSH2 0x1094 DUP3 DUP5 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 DUP2 SLOAD SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x116B JUMPI PUSH1 0x1 DUP3 GT DUP1 PUSH2 0x1157 JUMPI JUMPDEST PUSH2 0x1102 JUMPI JUMPDEST POP POP PUSH1 0x20 DUP2 PUSH2 0x10E9 PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP4 PUSH2 0x15A8 JUMP JUMPDEST SLOAD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 MSTORE AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST SWAP1 SWAP2 PUSH0 NOT DUP4 ADD SWAP3 DUP4 GT PUSH2 0xD59 JUMPI PUSH2 0x1151 PUSH1 0x20 SWAP3 PUSH2 0x114B PUSH2 0x1143 PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP7 DUP6 PUSH2 0x133A JUMP JUMPDEST POP SWAP2 DUP5 PUSH2 0x133A JUMP JUMPDEST SWAP1 PUSH2 0x156B JUMP JUMPDEST SWAP2 PUSH2 0x10BA JUMP JUMPDEST POP PUSH0 NOT DUP3 ADD DUP3 DUP2 GT PUSH2 0xD59 JUMPI DUP2 EQ ISZERO PUSH2 0x10B5 JUMP JUMPDEST PUSH32 0x4E23D03500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH2 0x11AB PUSH2 0x11A4 CALLDATASIZE PUSH2 0x1263 JUMP JUMPDEST SWAP3 SWAP2 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH2 0x11CA PUSH2 0x11C4 PUSH1 0x20 SWAP3 PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x133A JUMP JUMPDEST POP PUSH2 0x137C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0x20 DUP4 MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0x40 DUP5 ADD SWAP3 ADD SWAP4 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x11F3 JUMPI DUP5 DUP5 SUB DUP6 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 DUP3 PUSH2 0x122B PUSH1 0x1 SWAP3 DUP9 MLOAD SWAP1 PUSH1 0x40 PUSH1 0x60 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SWAP7 ADD SWAP6 SWAP4 SWAP3 SWAP2 ADD PUSH2 0x11E6 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x10C JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x10C JUMPI JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x10C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B4 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B4 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x12B4 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x134F JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 SLOAD PUSH2 0x1388 DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP3 PUSH1 0x40 SWAP4 PUSH2 0x1399 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x12E1 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP1 SWAP5 PUSH1 0x20 DUP1 SWAP3 ADD SWAP3 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 SWAP4 JUMPDEST DUP6 DUP6 LT PUSH2 0x13BD JUMPI POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 DUP5 PUSH1 0x1 SWAP3 DUP5 MLOAD PUSH2 0x13CE DUP2 PUSH2 0x1298 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 SLOAD AND DUP4 MSTORE DUP7 DUP10 ADD SLOAD SWAP1 DUP2 AND DUP6 DUP5 ADD MSTORE PUSH1 0xA0 SHR AND ISZERO ISZERO DUP7 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP5 ADD SWAP4 SWAP2 PUSH2 0x13AE JUMP JUMPDEST DUP2 DUP2 EQ PUSH2 0x1567 JUMPI DUP2 SLOAD SWAP2 PUSH9 0x10000000000000000 DUP4 GT PUSH2 0x12B4 JUMPI DUP2 SLOAD DUP4 DUP4 SSTORE DUP1 DUP5 LT PUSH2 0x1501 JUMPI JUMPDEST POP PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x1447 JUMPI POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 SWAP2 DUP5 SUB PUSH2 0x1462 JUMPI JUMPDEST PUSH1 0x2 DUP1 SWAP2 ADD SWAP4 ADD SWAP2 ADD SWAP1 SWAP2 PUSH2 0x143A JUMP JUMPDEST PUSH2 0x14FC PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xFF DUP2 DUP5 SLOAD AND SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 DUP10 SLOAD AND OR DUP9 SSTORE DUP6 SWAP3 DUP4 DUP10 ADD SWAP4 DUP7 ADD SWAP2 DUP3 SLOAD AND SWAP1 DUP5 SLOAD AND OR DUP4 SSTORE SLOAD PUSH1 0xA0 SHR AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH21 0xFF0000000000000000000000000000000000000000 DUP4 SLOAD SWAP3 ISZERO ISZERO PUSH1 0xA0 SHL AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x1452 JUMP JUMPDEST PUSH1 0x1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP4 SUB PUSH2 0xD59 JUMPI DUP6 AND DUP6 SUB PUSH2 0xD59 JUMPI DUP4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH1 0x1 SHL DUP3 ADD SWAP2 DUP6 PUSH1 0x1 SHL ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x1557 JUMPI POP POP PUSH2 0x1428 JUMP JUMPDEST PUSH0 DUP1 DUP3 SSTORE DUP3 DUP3 ADD SSTORE PUSH1 0x2 ADD PUSH2 0x1549 JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x157C JUMPI PUSH2 0x157A SWAP2 PUSH2 0x1401 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 SLOAD DUP1 ISZERO PUSH2 0x1629 JUMPI PUSH0 NOT ADD SWAP1 PUSH2 0x15BE DUP3 DUP3 PUSH2 0x133A JUMP JUMPDEST PUSH2 0x157C JUMPI DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0x15D2 JUMPI POP POP SSTORE JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP4 SUB PUSH2 0xD59 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH1 0x1 SHL DUP3 ADD SWAP2 JUMPDEST DUP3 DUP2 LT PUSH2 0x1619 JUMPI POP POP POP SSTORE JUMP JUMPDEST PUSH0 DUP1 DUP3 SSTORE DUP3 DUP3 ADD SSTORE PUSH1 0x2 ADD PUSH2 0x160C JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x134F JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x12B4 JUMPI PUSH2 0x168C SWAP2 PUSH1 0x1 DUP3 ADD DUP2 SSTORE PUSH2 0x133A JUMP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST DUP1 SLOAD ISZERO PUSH2 0x134F JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 DUP2 SLOAD SWAP2 PUSH9 0x10000000000000000 DUP4 LT ISZERO PUSH2 0x12B4 JUMPI PUSH1 0x1 DUP4 ADD DUP1 DUP3 SSTORE DUP4 LT ISZERO PUSH2 0x134F JUMPI PUSH2 0x157A SWAP3 PUSH1 0x40 SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 SHL ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x1 DUP5 DUP4 MLOAD AND SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 DUP3 SLOAD AND OR DUP2 SSTORE ADD SWAP4 PUSH1 0x20 DUP4 ADD MLOAD AND SWAP1 DUP5 SLOAD AND OR DUP4 SSTORE ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH21 0xFF0000000000000000000000000000000000000000 DUP4 SLOAD SWAP3 ISZERO ISZERO PUSH1 0xA0 SHL AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x17CA DUP2 PUSH2 0x1298 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x10C JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x10C JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x10C JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 DUP1 SWAP3 PUSH1 0x60 SHL AND DUP5 MSTORE PUSH1 0x60 SHL AND PUSH1 0x34 DUP3 ADD MSTORE PUSH1 0x28 DUP2 MSTORE PUSH2 0x17CA DUP2 PUSH2 0x1298 JUMP JUMPDEST PUSH2 0x1885 PUSH2 0x187E PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x176B JUMP JUMPDEST CALLER SWAP1 PUSH2 0x198E JUMP JUMPDEST ISZERO PUSH2 0x833 JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND CALLER SUB PUSH2 0xFD0 JUMPI JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x10C JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x10C JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x10C JUMPI DUP3 MLOAD PUSH2 0x193A DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP4 PUSH2 0x1948 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x12E1 JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x10C JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x196F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1961 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x1A9C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x2E6 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x1A78 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP3 PUSH2 0x1A5F JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1A75 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x1A94 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1A0A JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x1AAF DUP2 DUP4 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x20 PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP2 PUSH1 0x40 PUSH0 KECCAK256 PUSH0 JUMPDEST DUP2 SLOAD DUP1 DUP3 LT ISZERO PUSH2 0x1BD3 JUMPI PUSH2 0x1AD5 DUP3 DUP5 PUSH2 0x133A JUMP JUMPDEST POP PUSH1 0x1 SWAP1 DUP2 DUP1 DUP3 SLOAD EQ SWAP2 DUP3 PUSH2 0x1BB2 JUMPI JUMPDEST DUP3 PUSH2 0x1B8F JUMPI JUMPDEST POP POP PUSH2 0x1AFB JUMPI POP POP PUSH1 0x1 ADD PUSH2 0x1AC1 JUMP JUMPDEST SWAP1 DUP1 SWAP3 SWAP7 SWAP8 SWAP9 POP GT PUSH2 0x1B4C JUMPI JUMPDEST POP PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP4 POP PUSH2 0x1B35 DUP2 PUSH2 0x15A8 JUMP JUMPDEST SLOAD SWAP4 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 JUMP JUMPDEST PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0xD59 JUMPI PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP5 PUSH2 0x114B PUSH2 0x1143 PUSH2 0x1B89 SWAP4 DUP6 PUSH2 0x133A JUMP JUMPDEST PUSH0 PUSH2 0x1B08 JUMP JUMPDEST PUSH2 0x1B9A SWAP2 SWAP3 POP PUSH2 0x1690 JUMP JUMPDEST POP ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND SWAP2 AND EQ DUP2 PUSH0 PUSH2 0x1AEB JUMP JUMPDEST SWAP2 POP PUSH2 0x1BBD DUP3 PUSH2 0x1690 JUMP JUMPDEST POP SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 DUP2 AND SWAP2 AND EQ SWAP2 PUSH2 0x1AE5 JUMP JUMPDEST DUP7 DUP5 DUP10 PUSH32 0x3A9458D900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP1 SWAP3 AND PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE AND PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH2 0x1C20 DUP4 DUP4 PUSH2 0x1807 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 AND SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1C3A DUP6 PUSH2 0x1298 JUMP JUMPDEST AND DUP4 MSTORE DUP5 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x40 DUP5 ADD MSTORE DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP2 PUSH2 0x1C60 DUP4 PUSH2 0x166A JUMP JUMPDEST POP POP DUP3 SLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0xD59 JUMPI PUSH32 0x836045DC838DA47BE101A8D10036B82EC004688D856DAA53CD0E56807D3BFCA SWAP5 PUSH2 0x1CA0 PUSH2 0x1CA6 SWAP3 PUSH1 0x20 SWAP7 PUSH2 0x133A JUMP JUMPDEST POP PUSH2 0x16A2 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 JUMP JUMPDEST PUSH2 0x1CC7 DUP4 DUP4 PUSH2 0x1807 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 AND SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1CE1 DUP6 PUSH2 0x1298 JUMP JUMPDEST AND DUP4 MSTORE DUP5 PUSH1 0x20 DUP5 ADD MSTORE PUSH0 PUSH1 0x40 DUP5 ADD MSTORE DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP2 PUSH2 0x1C60 DUP4 PUSH2 0x166A JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 LOG3 DUP3 DUP10 PUSH32 0x62AA9B3B813657F2D689D3D97B0B2BC9EF3117F10B3D087F5FA65564736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"1158:8825:88:-:0;;;;;;;;;;;;;-1:-1:-1;;1158:8825:88;;;;-1:-1:-1;;;;;1158:8825:88;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1158:8825:88;;;;;;;;;;;;;;;;;;;;;1273:26:48;;1269:95;;1158:8825:88;;;;;;;;2093:20:49;1158:8825:88;;2093:20:49;1158:8825:88;;-1:-1:-1;1158:8825:88;;;;;-1:-1:-1;1158:8825:88;;;;;3052:40:48;-1:-1:-1;3052:40:48;;1524:4:80;1347:46:32;;1548:29:80;1544:80;;1634:14;;1158:8825:88;;;;;;1347:46:32;1158:8825:88;;;;;1634:14:80;1158:8825:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1544:80:80;1600:13;;;-1:-1:-1;1600:13:80;;-1:-1:-1;1600:13:80;1269:95:48;1322:31;;;-1:-1:-1;1322:31:48;-1:-1:-1;1322:31:48;1158:8825:88;;-1:-1:-1;1322:31:48;1158:8825:88;-1:-1:-1;1158:8825:88;;;;;;-1:-1:-1;1158:8825:88;;;;;-1:-1:-1;1158:8825:88"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":4685,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_16851":{"entryPoint":4663,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_addresst_addresst_uint256":{"entryPoint":4707,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_array_contract_IERC20_dyn_fromMemory":{"entryPoint":6404,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":6127,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":6096,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encodeUpdatedPos_struct_SwapPathStep":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_struct_SwapPathStep_dyn":{"entryPoint":4898,"id":null,"parameterSlots":1,"returnSlots":1},"array_pop_array_array_struct_SwapPathStep_storage_dyn__dyn_ptr":{"entryPoint":5544,"id":null,"parameterSlots":1,"returnSlots":0},"array_push_from_struct_SwapPathStep_to_array_struct_SwapPathStep_storage_dyn_ptr":{"entryPoint":5794,"id":null,"parameterSlots":2,"returnSlots":0},"array_push_zero_array_array_struct_SwapPathStep_storage_dyn__dyn_ptr":{"entryPoint":5738,"id":null,"parameterSlots":1,"returnSlots":2},"copy_array_from_storage_to_memory_array_struct_SwapPathStep__dyn":{"entryPoint":4988,"id":null,"parameterSlots":1,"returnSlots":1},"copy_array_to_storage_from_array_struct_SwapPathStep_storage_dyn_storage_to_array_struct_SwapPathStep__dyn":{"entryPoint":5121,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation":{"entryPoint":4833,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_16854":{"entryPoint":4760,"id":null,"parameterSlots":1,"returnSlots":0},"fun_addSimplePairStep":{"entryPoint":7190,"id":23597,"parameterSlots":3,"returnSlots":0},"fun_addSimplePairStep_16863":{"entryPoint":7357,"id":23597,"parameterSlots":3,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":6223,"id":4338,"parameterSlots":0,"returnSlots":0},"fun_canPerform":{"entryPoint":6542,"id":20311,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":6284,"id":9405,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":5995,"id":4356,"parameterSlots":1,"returnSlots":1},"fun_getTokenPairId":{"entryPoint":6151,"id":23837,"parameterSlots":2,"returnSlots":1},"fun_removeSimplePairStep":{"entryPoint":6820,"id":23793,"parameterSlots":3,"returnSlots":0},"fun_transferOwnership":{"entryPoint":6303,"id":9529,"parameterSlots":1,"returnSlots":0},"memory_array_index_access_struct_SwapPathStep_dyn":{"entryPoint":5718,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_struct_SwapPathStep__dyn_ptr":{"entryPoint":5776,"id":null,"parameterSlots":1,"returnSlots":2},"storage_array_index_access_struct_SwapPathStep_storage_dyn__dyn":{"entryPoint":4922,"id":null,"parameterSlots":2,"returnSlots":2},"update_storage_value_array_struct_SwapPathStep_storage_dyn_storage_to_array_struct_SwapPathStep__dyn":{"entryPoint":5483,"id":null,"parameterSlots":3,"returnSlots":0},"update_storage_value_offsett_bool_to_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"4296":[{"length":32,"start":6038}],"20200":[{"length":32,"start":232},{"length":32,"start":317},{"length":32,"start":1294},{"length":32,"start":1947},{"length":32,"start":2629},{"length":32,"start":3048},{"length":32,"start":6616}]},"linkReferences":{},"object":"60806040526004361015610011575f80fd5b5f3560e01c8063057074ff1461119357806332fffdbd14611074578063715018a614610ffc57806379ba509714610fa55780637c7d370a14610e55578063815ca70f14610910578063851c1bb3146108c05780638da5cb5b1461089b57806394ee0a3b1461085b578063a89b1128146107f8578063aaabadc514610755578063bc138aa3146104e1578063e30c3978146104bb578063f2fde38b1461043b578063f335b520146101105763fbfa77cf146100c9575f80fd5b3461010c575f60031936011261010c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b3461010c5760208060031936011261010c5761012a611237565b61013261184f565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016604051937fc673bdaf0000000000000000000000000000000000000000000000000000000085528284169081600487015260249581818881875afa9081156102e6575f9161041e575b50156102f157505f9085604051809481937fca4f280300000000000000000000000000000000000000000000000000000000835260048301525afa9081156102e6575f916102c4575b508051925f198401938411610298575f5b84811061020957005b600180820180831161026c57815b610226575b5050600101610200565b84518110156102675781809161026088610240878a611656565b51168961024d848b611656565b511661025a81838b611cbd565b88611cbd565b0190610217565b61021c565b877f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b847f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b6102e091503d805f833e6102d881836112e1565b810190611904565b846101ef565b6040513d5f823e3d90fd5b94935091506040517f6844846b00000000000000000000000000000000000000000000000000000000815282600482015284818581855afa9081156102e6575f916103f1575b50156103c7578390604051938480927f0387587d0000000000000000000000000000000000000000000000000000000082528560048301525afa9182156102e657610396935f93610398575b5050610390818381611c16565b80611c16565b005b6103b8929350803d106103c0575b6103b081836112e1565b8101906117d0565b908380610383565b503d6103a6565b507fb309199b000000000000000000000000000000000000000000000000000000005f526004525ffd5b6104119150853d8711610417575b61040981836112e1565b8101906117ef565b85610337565b503d6103ff565b6104359150823d84116104175761040981836112e1565b876101a6565b3461010c57602060031936011261010c57610454611237565b61045c61188c565b6001600160a01b0380911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b3461010c575f60031936011261010c5760206001600160a01b0360015416604051908152f35b3461010c5760208060031936011261010c576104fb611237565b61050361184f565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016604051937fc673bdaf0000000000000000000000000000000000000000000000000000000085528284169081600487015260249581818881875afa9081156102e6575f91610738575b501561065757505f9085604051809481937fca4f280300000000000000000000000000000000000000000000000000000000835260048301525afa9081156102e6575f9161063d575b508051925f198401938411610298575f5b8481106105da57005b600180820180831161026c57815b6105f7575b50506001016105d1565b84518110156106385781809161063188610611878a611656565b51168961061e848b611656565b511661062b81838b611aa4565b88611aa4565b01906105e8565b6105ed565b61065191503d805f833e6102d881836112e1565b846105c0565b94935091506040517f6844846b00000000000000000000000000000000000000000000000000000000815282600482015284818581855afa9081156102e6575f9161071b575b50156103c7578390604051938480927f0387587d0000000000000000000000000000000000000000000000000000000082528560048301525afa9182156102e657610396935f936106fc575b50506106f6818381611aa4565b80611aa4565b610713929350803d106103c0576103b081836112e1565b9083806106e9565b6107329150853d87116104175761040981836112e1565b8561069d565b61074f9150823d84116104175761040981836112e1565b87610577565b3461010c575f60031936011261010c576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa9081156102e6576020925f926107d9575b5060405191168152f35b6107f1919250833d85116103c0576103b081836112e1565b90836107cf565b3461010c57602060031936011261010c57610811611237565b61081961184f565b6001600160a01b035f54163314610833576103969061189f565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461010c57604060031936011261010c57610885610877611237565b61087f61124d565b90611807565b5f526002602052602060405f2054604051908152f35b3461010c575f60031936011261010c5760206001600160a01b035f5416604051908152f35b3461010c57602060031936011261010c576004357fffffffff000000000000000000000000000000000000000000000000000000008116810361010c5761090860209161176b565b604051908152f35b3461010c57604060031936011261010c57610929611237565b60243567ffffffffffffffff811161010c573660238201121561010c57806004013561095481611322565b9161096260405193846112e1565b81835260208301602460608094028301019136831161010c57602401905b828210610df357858561099161184f565b805115610dcb5780515f198101908111610d595760206109b96001600160a01b039284611656565b51015116906109c88284611807565b5f9390815b8351861015610cfe576109e08685611656565b51604081015190919015610b8b576001600160a01b03825116906001600160a01b03602084015116916040517f0387587d0000000000000000000000000000000000000000000000000000000081528160048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa80156102e6576001600160a01b03915f91610b6c575b5016918215610b40576001600160a01b031691808303610aec5750808303610abb575050506001600160a01b0360206001925b0151169501946109cd565b7f29198c3d000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b828203610b0e578303610abb575050506001600160a01b036020600192610ab0565b507f29198c3d000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b507f85f41299000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b610b85915060203d6020116103c0576103b081836112e1565b8b610a7d565b926001600160a01b038293959697925116906001600160a01b0360208501511695604051987fca4f2803000000000000000000000000000000000000000000000000000000008a528360048b01525f8a6024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa998a156102e6575f9a610ce2575b505f985f935f5b8c51811015610c82578c6001600160a01b03610c3b8383611656565b51166001600160a01b038c1614610c79575b6001600160a01b03610c60838e93611656565b511614610c70575b600101610c1f565b60019550610c68565b60019c50610c4d565b509750975097909493985015908115610cd9575b50610cae57506001600160a01b036020600192610ab0565b7fb309199b000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90501588610c96565b610cf7919a503d805f833e6102d881836112e1565b988a610c18565b508284825f52600260205260405f2093610d178561166a565b50505f5b8351811015610d86578554905f198201918211610d5957610d53610d416001938961133a565b50610d4c8388611656565b51906116a2565b01610d1b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50835f5260026020527f0836045dc838da47be101a8d10036b82ec004688d856daa53cd0e56807d3bfca60206001600160a01b0360405f2054936040519485521692a3005b7f20a2d33d000000000000000000000000000000000000000000000000000000005f5260045ffd5b838236031261010c5760405190610e0982611298565b6001600160a01b038335818116810361010c5783526020840135908116810361010c576020830152604083013590811515820361010c5782602092604088950152815201910190610980565b3461010c57604060031936011261010c57610e71610877611237565b5f5260206002815260405f208054610e8881611322565b90610e9660405192836112e1565b80825283820180935f52845f20855f925b848410610f87575084866040519283928184019082855251809152604084019160408260051b86010193925f905b838210610ee25786860387f35b919395947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08592949682030183528651908280835192838152019201905f905b808210610f4357505050908060019297019201920186959492939193610ed5565b9193610f7a6001929486519060406060926001600160a01b0380825116845260208201511660208401520151151560408201520190565b9401920186939291610f22565b6001918291610f958561137c565b8152019201920191908690610ea7565b3461010c575f60031936011261010c57336001600160a01b036001541603610fd0576103963361189f565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b3461010c575f60031936011261010c5761101461188c565b5f6001600160a01b037fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461010c5761108236611263565b61108a61184f565b6110948284611807565b5f52600260205260405f20908154908181101561116b576001821180611157575b611102575b50506020816110e97fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da936115a8565b54926001600160a01b03809160405195865216941692a3005b90915f198301928311610d595761115160209261114b6111437fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da968561133a565b50918461133a565b9061156b565b916110ba565b505f198201828111610d59578114156110b5565b7f4e23d035000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461010c576111ab6111a436611263565b9291611807565b5f526111ca6111c4602092600260205260405f2061133a565b5061137c565b60405190602082016020835281518091526020604084019201935f5b8281106111f35784840385f35b9091928261122b60019288519060406060926001600160a01b0380825116845260208201511660208401520151151560408201520190565b960195939291016111e6565b600435906001600160a01b038216820361010c57565b602435906001600160a01b038216820361010c57565b600319606091011261010c576001600160a01b0390600435828116810361010c5791602435908116810361010c579060443590565b6060810190811067ffffffffffffffff8211176112b457604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176112b457604052565b67ffffffffffffffff81116112b45760051b60200190565b805482101561134f575f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b90815461138881611322565b9260409361139960405191826112e1565b82815280946020809201925f5260205f20905f935b8585106113bd57505050505050565b60028460019284516113ce81611298565b60ff6001600160a01b03808954168352868901549081168584015260a01c161515868201528152019301940193916113ae565b818114611567578154916801000000000000000083116112b4578154838355808410611501575b505f5260205f20905f5260205f20905f905b8382106114475750505050565b806001918403611462575b600280910193019101909161143a565b6114fc6001600160a01b0360ff81845416917fffffffffffffffffffffffff00000000000000000000000000000000000000009283895416178855859283890193860191825416908454161783555460a01c167fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff0000000000000000000000000000000000000000835492151560a01b169116179055565b611452565b60017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083168303610d595785168503610d5957835f5260205f209160011b8201918560011b015b828110611557575050611428565b5f80825582820155600201611549565b5050565b919061157c5761157a91611401565b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b80548015611629575f1901906115be828261133a565b61157c578054905f8155816115d257505055565b6001907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83168303610d59575f5260205f209160011b8201915b8281106116195750505055565b5f8082558282015560020161160c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b805182101561134f5760209160051b010190565b8054680100000000000000008110156112b45761168c9160018201815561133a565b9091565b80541561134f575f5260205f20905f90565b90815491680100000000000000008310156112b4576001830180825583101561134f5761157a926040915f5260205f209060011b01916001600160a01b0392600184835116917fffffffffffffffffffffffff00000000000000000000000000000000000000009283825416178155019360208301511690845416178355015115157fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff0000000000000000000000000000000000000000835492151560a01b169116179055565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526117ca81611298565b51902090565b9081602091031261010c57516001600160a01b038116810361010c5790565b9081602091031261010c5751801515810361010c5790565b6040519060208201927fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16845260601b166034820152602881526117ca81611298565b61188561187e7fffffffff000000000000000000000000000000000000000000000000000000005f351661176b565b339061198e565b1561083357565b6001600160a01b035f54163303610fd057565b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f546001600160a01b0380921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b602090818184031261010c5780519067ffffffffffffffff821161010c57019180601f8401121561010c57825161193a81611322565b9361194860405195866112e1565b818552838086019260051b82010192831161010c578301905b82821061196f575050505090565b81516001600160a01b038116810361010c578152908301908301611961565b906001600160a01b039081805f54169116908114611a9c57604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156102e65785935f95611a78575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa9182156102e6575f92611a5f57505090565b611a759250803d106104175761040981836112e1565b90565b606492919550611a9490853d87116103c0576103b081836112e1565b949091611a0a565b505050600190565b91611aaf8183611807565b5f526020600260205260409160405f205f5b815480821015611bd357611ad5828461133a565b5060019081808254149182611bb2575b82611b8f575b5050611afb575050600101611ac1565b9080929697985011611b4c575b507fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da9350611b35816115a8565b5493519384526001600160a01b03908116941692a3565b5f198101908111610d59577fa38fb2ba0cd6ce518df558e7765144874cc0dfaabfcc9742d6fc5183b6c039da9461114b611143611b89938561133a565b5f611b08565b611b9a919250611690565b5001546001600160a01b03868116911614815f611aeb565b9150611bbd82611690565b50546001600160a01b038c811691161491611ae5565b8684897f3a9458d9000000000000000000000000000000000000000000000000000000005f526001600160a01b039283809216600452166024521660445260645ffd5b611c208383611807565b6001600160a01b03809416938060405193611c3a85611298565b16835284602084015260016040840152815f52600260205260405f2091611c608361166a565b505082545f198101908111610d59577f0836045dc838da47be101a8d10036b82ec004688d856daa53cd0e56807d3bfca94611ca0611ca69260209661133a565b506116a2565b5f526002825260405f2054936040519485521692a3565b611cc78383611807565b6001600160a01b03809416938060405193611ce185611298565b1683528460208401525f6040840152815f52600260205260405f2091611c608361166a56fea2646970667358221220c8a382897f62aa9b3b813657f2d689d3d97b0b2bc9ef3117f10b3d087f5fa65564736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x57074FF EQ PUSH2 0x1193 JUMPI DUP1 PUSH4 0x32FFFDBD EQ PUSH2 0x1074 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xFFC JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xFA5 JUMPI DUP1 PUSH4 0x7C7D370A EQ PUSH2 0xE55 JUMPI DUP1 PUSH4 0x815CA70F EQ PUSH2 0x910 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x8C0 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x89B JUMPI DUP1 PUSH4 0x94EE0A3B EQ PUSH2 0x85B JUMPI DUP1 PUSH4 0xA89B1128 EQ PUSH2 0x7F8 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x755 JUMPI DUP1 PUSH4 0xBC138AA3 EQ PUSH2 0x4E1 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x4BB JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x43B JUMPI DUP1 PUSH4 0xF335B520 EQ PUSH2 0x110 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0xC9 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x12A PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x132 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP4 PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP3 DUP5 AND SWAP1 DUP2 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x24 SWAP6 DUP2 DUP2 DUP9 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x41E JUMPI JUMPDEST POP ISZERO PUSH2 0x2F1 JUMPI POP PUSH0 SWAP1 DUP6 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x2C4 JUMPI JUMPDEST POP DUP1 MLOAD SWAP3 PUSH0 NOT DUP5 ADD SWAP4 DUP5 GT PUSH2 0x298 JUMPI PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x209 JUMPI STOP JUMPDEST PUSH1 0x1 DUP1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x26C JUMPI DUP2 JUMPDEST PUSH2 0x226 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x200 JUMP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x267 JUMPI DUP2 DUP1 SWAP2 PUSH2 0x260 DUP9 PUSH2 0x240 DUP8 DUP11 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND DUP10 PUSH2 0x24D DUP5 DUP12 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND PUSH2 0x25A DUP2 DUP4 DUP12 PUSH2 0x1CBD JUMP JUMPDEST DUP9 PUSH2 0x1CBD JUMP JUMPDEST ADD SWAP1 PUSH2 0x217 JUMP JUMPDEST PUSH2 0x21C JUMP JUMPDEST DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x2E0 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2D8 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1904 JUMP JUMPDEST DUP5 PUSH2 0x1EF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP5 SWAP4 POP SWAP2 POP PUSH1 0x40 MLOAD PUSH32 0x6844846B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 DUP6 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x3F1 JUMPI JUMPDEST POP ISZERO PUSH2 0x3C7 JUMPI DUP4 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x387587D00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP6 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2E6 JUMPI PUSH2 0x396 SWAP4 PUSH0 SWAP4 PUSH2 0x398 JUMPI JUMPDEST POP POP PUSH2 0x390 DUP2 DUP4 DUP2 PUSH2 0x1C16 JUMP JUMPDEST DUP1 PUSH2 0x1C16 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3B8 SWAP3 SWAP4 POP DUP1 RETURNDATASIZE LT PUSH2 0x3C0 JUMPI JUMPDEST PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x17D0 JUMP JUMPDEST SWAP1 DUP4 DUP1 PUSH2 0x383 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3A6 JUMP JUMPDEST POP PUSH32 0xB309199B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x411 SWAP2 POP DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x417 JUMPI JUMPDEST PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x17EF JUMP JUMPDEST DUP6 PUSH2 0x337 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3FF JUMP JUMPDEST PUSH2 0x435 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP8 PUSH2 0x1A6 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x454 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x45C PUSH2 0x188C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x4FB PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x503 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP4 PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP3 DUP5 AND SWAP1 DUP2 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x24 SWAP6 DUP2 DUP2 DUP9 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x738 JUMPI JUMPDEST POP ISZERO PUSH2 0x657 JUMPI POP PUSH0 SWAP1 DUP6 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x63D JUMPI JUMPDEST POP DUP1 MLOAD SWAP3 PUSH0 NOT DUP5 ADD SWAP4 DUP5 GT PUSH2 0x298 JUMPI PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x5DA JUMPI STOP JUMPDEST PUSH1 0x1 DUP1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x26C JUMPI DUP2 JUMPDEST PUSH2 0x5F7 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x5D1 JUMP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x638 JUMPI DUP2 DUP1 SWAP2 PUSH2 0x631 DUP9 PUSH2 0x611 DUP8 DUP11 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND DUP10 PUSH2 0x61E DUP5 DUP12 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND PUSH2 0x62B DUP2 DUP4 DUP12 PUSH2 0x1AA4 JUMP JUMPDEST DUP9 PUSH2 0x1AA4 JUMP JUMPDEST ADD SWAP1 PUSH2 0x5E8 JUMP JUMPDEST PUSH2 0x5ED JUMP JUMPDEST PUSH2 0x651 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2D8 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP5 PUSH2 0x5C0 JUMP JUMPDEST SWAP5 SWAP4 POP SWAP2 POP PUSH1 0x40 MLOAD PUSH32 0x6844846B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 DUP6 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP2 PUSH2 0x71B JUMPI JUMPDEST POP ISZERO PUSH2 0x3C7 JUMPI DUP4 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x387587D00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP6 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2E6 JUMPI PUSH2 0x396 SWAP4 PUSH0 SWAP4 PUSH2 0x6FC JUMPI JUMPDEST POP POP PUSH2 0x6F6 DUP2 DUP4 DUP2 PUSH2 0x1AA4 JUMP JUMPDEST DUP1 PUSH2 0x1AA4 JUMP JUMPDEST PUSH2 0x713 SWAP3 SWAP4 POP DUP1 RETURNDATASIZE LT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP1 DUP4 DUP1 PUSH2 0x6E9 JUMP JUMPDEST PUSH2 0x732 SWAP2 POP DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP6 PUSH2 0x69D JUMP JUMPDEST PUSH2 0x74F SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP8 PUSH2 0x577 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0x7D9 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x7F1 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x7CF JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x811 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x819 PUSH2 0x184F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND CALLER EQ PUSH2 0x833 JUMPI PUSH2 0x396 SWAP1 PUSH2 0x189F JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x885 PUSH2 0x877 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x87F PUSH2 0x124D JUMP JUMPDEST SWAP1 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI PUSH2 0x908 PUSH1 0x20 SWAP2 PUSH2 0x176B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x929 PUSH2 0x1237 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10C JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x10C JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x954 DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP2 PUSH2 0x962 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x12E1 JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x24 PUSH1 0x60 DUP1 SWAP5 MUL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x10C JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xDF3 JUMPI DUP6 DUP6 PUSH2 0x991 PUSH2 0x184F JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xDCB JUMPI DUP1 MLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0xD59 JUMPI PUSH1 0x20 PUSH2 0x9B9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP5 PUSH2 0x1656 JUMP JUMPDEST MLOAD ADD MLOAD AND SWAP1 PUSH2 0x9C8 DUP3 DUP5 PUSH2 0x1807 JUMP JUMPDEST PUSH0 SWAP4 SWAP1 DUP2 JUMPDEST DUP4 MLOAD DUP7 LT ISZERO PUSH2 0xCFE JUMPI PUSH2 0x9E0 DUP7 DUP6 PUSH2 0x1656 JUMP JUMPDEST MLOAD PUSH1 0x40 DUP2 ADD MLOAD SWAP1 SWAP2 SWAP1 ISZERO PUSH2 0xB8B JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 MLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 ADD MLOAD AND SWAP2 PUSH1 0x40 MLOAD PUSH32 0x387587D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH0 SWAP2 PUSH2 0xB6C JUMPI JUMPDEST POP AND SWAP2 DUP3 ISZERO PUSH2 0xB40 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP1 DUP4 SUB PUSH2 0xAEC JUMPI POP DUP1 DUP4 SUB PUSH2 0xABB JUMPI POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH1 0x1 SWAP3 JUMPDEST ADD MLOAD AND SWAP6 ADD SWAP5 PUSH2 0x9CD JUMP JUMPDEST PUSH32 0x29198C3D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP3 DUP3 SUB PUSH2 0xB0E JUMPI DUP4 SUB PUSH2 0xABB JUMPI POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH2 0xAB0 JUMP JUMPDEST POP PUSH32 0x29198C3D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST POP PUSH32 0x85F4129900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xB85 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP12 PUSH2 0xA7D JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 SWAP4 SWAP6 SWAP7 SWAP8 SWAP3 MLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP6 ADD MLOAD AND SWAP6 PUSH1 0x40 MLOAD SWAP9 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP4 PUSH1 0x4 DUP12 ADD MSTORE PUSH0 DUP11 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP10 DUP11 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP11 PUSH2 0xCE2 JUMPI JUMPDEST POP PUSH0 SWAP9 PUSH0 SWAP4 PUSH0 JUMPDEST DUP13 MLOAD DUP2 LT ISZERO PUSH2 0xC82 JUMPI DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC3B DUP4 DUP4 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND EQ PUSH2 0xC79 JUMPI JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC60 DUP4 DUP15 SWAP4 PUSH2 0x1656 JUMP JUMPDEST MLOAD AND EQ PUSH2 0xC70 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0xC1F JUMP JUMPDEST PUSH1 0x1 SWAP6 POP PUSH2 0xC68 JUMP JUMPDEST PUSH1 0x1 SWAP13 POP PUSH2 0xC4D JUMP JUMPDEST POP SWAP8 POP SWAP8 POP SWAP8 SWAP1 SWAP5 SWAP4 SWAP9 POP ISZERO SWAP1 DUP2 ISZERO PUSH2 0xCD9 JUMPI JUMPDEST POP PUSH2 0xCAE JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH1 0x1 SWAP3 PUSH2 0xAB0 JUMP JUMPDEST PUSH32 0xB309199B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP ISZERO DUP9 PUSH2 0xC96 JUMP JUMPDEST PUSH2 0xCF7 SWAP2 SWAP11 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2D8 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP9 DUP11 PUSH2 0xC18 JUMP JUMPDEST POP DUP3 DUP5 DUP3 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP4 PUSH2 0xD17 DUP6 PUSH2 0x166A JUMP JUMPDEST POP POP PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0xD86 JUMPI DUP6 SLOAD SWAP1 PUSH0 NOT DUP3 ADD SWAP2 DUP3 GT PUSH2 0xD59 JUMPI PUSH2 0xD53 PUSH2 0xD41 PUSH1 0x1 SWAP4 DUP10 PUSH2 0x133A JUMP JUMPDEST POP PUSH2 0xD4C DUP4 DUP9 PUSH2 0x1656 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x16A2 JUMP JUMPDEST ADD PUSH2 0xD1B JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP4 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x836045DC838DA47BE101A8D10036B82EC004688D856DAA53CD0E56807D3BFCA PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 STOP JUMPDEST PUSH32 0x20A2D33D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLDATASIZE SUB SLT PUSH2 0x10C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0xE09 DUP3 PUSH2 0x1298 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI DUP4 MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x10C JUMPI DUP3 PUSH1 0x20 SWAP3 PUSH1 0x40 DUP9 SWAP6 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x980 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0xE71 PUSH2 0x877 PUSH2 0x1237 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x20 PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD PUSH2 0xE88 DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP1 PUSH2 0xE96 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x12E1 JUMP JUMPDEST DUP1 DUP3 MSTORE DUP4 DUP3 ADD DUP1 SWAP4 PUSH0 MSTORE DUP5 PUSH0 KECCAK256 DUP6 PUSH0 SWAP3 JUMPDEST DUP5 DUP5 LT PUSH2 0xF87 JUMPI POP DUP5 DUP7 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP3 DUP2 DUP5 ADD SWAP1 DUP3 DUP6 MSTORE MLOAD DUP1 SWAP2 MSTORE PUSH1 0x40 DUP5 ADD SWAP2 PUSH1 0x40 DUP3 PUSH1 0x5 SHL DUP7 ADD ADD SWAP4 SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xEE2 JUMPI DUP7 DUP7 SUB DUP8 RETURN JUMPDEST SWAP2 SWAP4 SWAP6 SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP6 SWAP3 SWAP5 SWAP7 DUP3 SUB ADD DUP4 MSTORE DUP7 MLOAD SWAP1 DUP3 DUP1 DUP4 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP3 ADD SWAP1 PUSH0 SWAP1 JUMPDEST DUP1 DUP3 LT PUSH2 0xF43 JUMPI POP POP POP SWAP1 DUP1 PUSH1 0x1 SWAP3 SWAP8 ADD SWAP3 ADD SWAP3 ADD DUP7 SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 SWAP4 PUSH2 0xED5 JUMP JUMPDEST SWAP2 SWAP4 PUSH2 0xF7A PUSH1 0x1 SWAP3 SWAP5 DUP7 MLOAD SWAP1 PUSH1 0x40 PUSH1 0x60 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SWAP5 ADD SWAP3 ADD DUP7 SWAP4 SWAP3 SWAP2 PUSH2 0xF22 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP3 SWAP2 PUSH2 0xF95 DUP6 PUSH2 0x137C JUMP JUMPDEST DUP2 MSTORE ADD SWAP3 ADD SWAP3 ADD SWAP2 SWAP1 DUP7 SWAP1 PUSH2 0xEA7 JUMP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SLOAD AND SUB PUSH2 0xFD0 JUMPI PUSH2 0x396 CALLER PUSH2 0x189F JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x10C JUMPI PUSH2 0x1014 PUSH2 0x188C JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH2 0x1082 CALLDATASIZE PUSH2 0x1263 JUMP JUMPDEST PUSH2 0x108A PUSH2 0x184F JUMP JUMPDEST PUSH2 0x1094 DUP3 DUP5 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 DUP2 SLOAD SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x116B JUMPI PUSH1 0x1 DUP3 GT DUP1 PUSH2 0x1157 JUMPI JUMPDEST PUSH2 0x1102 JUMPI JUMPDEST POP POP PUSH1 0x20 DUP2 PUSH2 0x10E9 PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP4 PUSH2 0x15A8 JUMP JUMPDEST SLOAD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 MSTORE AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST SWAP1 SWAP2 PUSH0 NOT DUP4 ADD SWAP3 DUP4 GT PUSH2 0xD59 JUMPI PUSH2 0x1151 PUSH1 0x20 SWAP3 PUSH2 0x114B PUSH2 0x1143 PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP7 DUP6 PUSH2 0x133A JUMP JUMPDEST POP SWAP2 DUP5 PUSH2 0x133A JUMP JUMPDEST SWAP1 PUSH2 0x156B JUMP JUMPDEST SWAP2 PUSH2 0x10BA JUMP JUMPDEST POP PUSH0 NOT DUP3 ADD DUP3 DUP2 GT PUSH2 0xD59 JUMPI DUP2 EQ ISZERO PUSH2 0x10B5 JUMP JUMPDEST PUSH32 0x4E23D03500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x10C JUMPI PUSH2 0x11AB PUSH2 0x11A4 CALLDATASIZE PUSH2 0x1263 JUMP JUMPDEST SWAP3 SWAP2 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH2 0x11CA PUSH2 0x11C4 PUSH1 0x20 SWAP3 PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x133A JUMP JUMPDEST POP PUSH2 0x137C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD PUSH1 0x20 DUP4 MSTORE DUP2 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH1 0x40 DUP5 ADD SWAP3 ADD SWAP4 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x11F3 JUMPI DUP5 DUP5 SUB DUP6 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 DUP3 PUSH2 0x122B PUSH1 0x1 SWAP3 DUP9 MLOAD SWAP1 PUSH1 0x40 PUSH1 0x60 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP5 MSTORE PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SWAP7 ADD SWAP6 SWAP4 SWAP3 SWAP2 ADD PUSH2 0x11E6 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x10C JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x10C JUMPI JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x10C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B4 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B4 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x12B4 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x134F JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 SLOAD PUSH2 0x1388 DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP3 PUSH1 0x40 SWAP4 PUSH2 0x1399 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x12E1 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP1 SWAP5 PUSH1 0x20 DUP1 SWAP3 ADD SWAP3 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 SWAP4 JUMPDEST DUP6 DUP6 LT PUSH2 0x13BD JUMPI POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 DUP5 PUSH1 0x1 SWAP3 DUP5 MLOAD PUSH2 0x13CE DUP2 PUSH2 0x1298 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 SLOAD AND DUP4 MSTORE DUP7 DUP10 ADD SLOAD SWAP1 DUP2 AND DUP6 DUP5 ADD MSTORE PUSH1 0xA0 SHR AND ISZERO ISZERO DUP7 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP5 ADD SWAP4 SWAP2 PUSH2 0x13AE JUMP JUMPDEST DUP2 DUP2 EQ PUSH2 0x1567 JUMPI DUP2 SLOAD SWAP2 PUSH9 0x10000000000000000 DUP4 GT PUSH2 0x12B4 JUMPI DUP2 SLOAD DUP4 DUP4 SSTORE DUP1 DUP5 LT PUSH2 0x1501 JUMPI JUMPDEST POP PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x1447 JUMPI POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x1 SWAP2 DUP5 SUB PUSH2 0x1462 JUMPI JUMPDEST PUSH1 0x2 DUP1 SWAP2 ADD SWAP4 ADD SWAP2 ADD SWAP1 SWAP2 PUSH2 0x143A JUMP JUMPDEST PUSH2 0x14FC PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xFF DUP2 DUP5 SLOAD AND SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 DUP10 SLOAD AND OR DUP9 SSTORE DUP6 SWAP3 DUP4 DUP10 ADD SWAP4 DUP7 ADD SWAP2 DUP3 SLOAD AND SWAP1 DUP5 SLOAD AND OR DUP4 SSTORE SLOAD PUSH1 0xA0 SHR AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH21 0xFF0000000000000000000000000000000000000000 DUP4 SLOAD SWAP3 ISZERO ISZERO PUSH1 0xA0 SHL AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x1452 JUMP JUMPDEST PUSH1 0x1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP4 SUB PUSH2 0xD59 JUMPI DUP6 AND DUP6 SUB PUSH2 0xD59 JUMPI DUP4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH1 0x1 SHL DUP3 ADD SWAP2 DUP6 PUSH1 0x1 SHL ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x1557 JUMPI POP POP PUSH2 0x1428 JUMP JUMPDEST PUSH0 DUP1 DUP3 SSTORE DUP3 DUP3 ADD SSTORE PUSH1 0x2 ADD PUSH2 0x1549 JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x157C JUMPI PUSH2 0x157A SWAP2 PUSH2 0x1401 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 SLOAD DUP1 ISZERO PUSH2 0x1629 JUMPI PUSH0 NOT ADD SWAP1 PUSH2 0x15BE DUP3 DUP3 PUSH2 0x133A JUMP JUMPDEST PUSH2 0x157C JUMPI DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0x15D2 JUMPI POP POP SSTORE JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP4 SUB PUSH2 0xD59 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH1 0x1 SHL DUP3 ADD SWAP2 JUMPDEST DUP3 DUP2 LT PUSH2 0x1619 JUMPI POP POP POP SSTORE JUMP JUMPDEST PUSH0 DUP1 DUP3 SSTORE DUP3 DUP3 ADD SSTORE PUSH1 0x2 ADD PUSH2 0x160C JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x134F JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x12B4 JUMPI PUSH2 0x168C SWAP2 PUSH1 0x1 DUP3 ADD DUP2 SSTORE PUSH2 0x133A JUMP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST DUP1 SLOAD ISZERO PUSH2 0x134F JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 DUP2 SLOAD SWAP2 PUSH9 0x10000000000000000 DUP4 LT ISZERO PUSH2 0x12B4 JUMPI PUSH1 0x1 DUP4 ADD DUP1 DUP3 SSTORE DUP4 LT ISZERO PUSH2 0x134F JUMPI PUSH2 0x157A SWAP3 PUSH1 0x40 SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 SHL ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x1 DUP5 DUP4 MLOAD AND SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 DUP3 SLOAD AND OR DUP2 SSTORE ADD SWAP4 PUSH1 0x20 DUP4 ADD MLOAD AND SWAP1 DUP5 SLOAD AND OR DUP4 SSTORE ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH21 0xFF0000000000000000000000000000000000000000 DUP4 SLOAD SWAP3 ISZERO ISZERO PUSH1 0xA0 SHL AND SWAP2 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x17CA DUP2 PUSH2 0x1298 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x10C JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x10C JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x10C JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 DUP1 SWAP3 PUSH1 0x60 SHL AND DUP5 MSTORE PUSH1 0x60 SHL AND PUSH1 0x34 DUP3 ADD MSTORE PUSH1 0x28 DUP2 MSTORE PUSH2 0x17CA DUP2 PUSH2 0x1298 JUMP JUMPDEST PUSH2 0x1885 PUSH2 0x187E PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x176B JUMP JUMPDEST CALLER SWAP1 PUSH2 0x198E JUMP JUMPDEST ISZERO PUSH2 0x833 JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SLOAD AND CALLER SUB PUSH2 0xFD0 JUMPI JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x10C JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x10C JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x10C JUMPI DUP3 MLOAD PUSH2 0x193A DUP2 PUSH2 0x1322 JUMP JUMPDEST SWAP4 PUSH2 0x1948 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x12E1 JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x10C JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x196F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x10C JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1961 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x1A9C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x2E6 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x1A78 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2E6 JUMPI PUSH0 SWAP3 PUSH2 0x1A5F JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1A75 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x417 JUMPI PUSH2 0x409 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x1A94 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x3C0 JUMPI PUSH2 0x3B0 DUP2 DUP4 PUSH2 0x12E1 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x1A0A JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x1AAF DUP2 DUP4 PUSH2 0x1807 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x20 PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP2 PUSH1 0x40 PUSH0 KECCAK256 PUSH0 JUMPDEST DUP2 SLOAD DUP1 DUP3 LT ISZERO PUSH2 0x1BD3 JUMPI PUSH2 0x1AD5 DUP3 DUP5 PUSH2 0x133A JUMP JUMPDEST POP PUSH1 0x1 SWAP1 DUP2 DUP1 DUP3 SLOAD EQ SWAP2 DUP3 PUSH2 0x1BB2 JUMPI JUMPDEST DUP3 PUSH2 0x1B8F JUMPI JUMPDEST POP POP PUSH2 0x1AFB JUMPI POP POP PUSH1 0x1 ADD PUSH2 0x1AC1 JUMP JUMPDEST SWAP1 DUP1 SWAP3 SWAP7 SWAP8 SWAP9 POP GT PUSH2 0x1B4C JUMPI JUMPDEST POP PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP4 POP PUSH2 0x1B35 DUP2 PUSH2 0x15A8 JUMP JUMPDEST SLOAD SWAP4 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 JUMP JUMPDEST PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0xD59 JUMPI PUSH32 0xA38FB2BA0CD6CE518DF558E7765144874CC0DFAABFCC9742D6FC5183B6C039DA SWAP5 PUSH2 0x114B PUSH2 0x1143 PUSH2 0x1B89 SWAP4 DUP6 PUSH2 0x133A JUMP JUMPDEST PUSH0 PUSH2 0x1B08 JUMP JUMPDEST PUSH2 0x1B9A SWAP2 SWAP3 POP PUSH2 0x1690 JUMP JUMPDEST POP ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND SWAP2 AND EQ DUP2 PUSH0 PUSH2 0x1AEB JUMP JUMPDEST SWAP2 POP PUSH2 0x1BBD DUP3 PUSH2 0x1690 JUMP JUMPDEST POP SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 DUP2 AND SWAP2 AND EQ SWAP2 PUSH2 0x1AE5 JUMP JUMPDEST DUP7 DUP5 DUP10 PUSH32 0x3A9458D900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP1 SWAP3 AND PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE AND PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH2 0x1C20 DUP4 DUP4 PUSH2 0x1807 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 AND SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1C3A DUP6 PUSH2 0x1298 JUMP JUMPDEST AND DUP4 MSTORE DUP5 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x40 DUP5 ADD MSTORE DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP2 PUSH2 0x1C60 DUP4 PUSH2 0x166A JUMP JUMPDEST POP POP DUP3 SLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0xD59 JUMPI PUSH32 0x836045DC838DA47BE101A8D10036B82EC004688D856DAA53CD0E56807D3BFCA SWAP5 PUSH2 0x1CA0 PUSH2 0x1CA6 SWAP3 PUSH1 0x20 SWAP7 PUSH2 0x133A JUMP JUMPDEST POP PUSH2 0x16A2 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 JUMP JUMPDEST PUSH2 0x1CC7 DUP4 DUP4 PUSH2 0x1807 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 AND SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1CE1 DUP6 PUSH2 0x1298 JUMP JUMPDEST AND DUP4 MSTORE DUP5 PUSH1 0x20 DUP5 ADD MSTORE PUSH0 PUSH1 0x40 DUP5 ADD MSTORE DUP2 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP2 PUSH2 0x1C60 DUP4 PUSH2 0x166A JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 LOG3 DUP3 DUP10 PUSH32 0x62AA9B3B813657F2D689D3D97B0B2BC9EF3117F10B3D087F5FA65564736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"1158:8825:88:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21:80;1158:8825:88;1810:21:80;;;1158:8825:88;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:88;;;;;;;;-1:-1:-1;;;;;1348:29:80;1158:8825:88;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:88;;;;;;;:::i;:::-;1525:73:32;;:::i;:::-;-1:-1:-1;;;;;3539:5:88;;1158:8825;;;3539:36;1158:8825;3539:36;;1158:8825;;;3539:36;;1158:8825;3539:36;;1158:8825;;3539:36;;;;;;;;;;;;;1158:8825;3539:36;;;1158:8825;-1:-1:-1;3535:285:88;;;1158:8825;;;;;;5057:25;;;;1158:8825;5057:25;;1158:8825;5057:25;;1158:8825;5057:25;;;;;;;1158:8825;5057:25;;;3535:285;1158:8825;;;;-1:-1:-1;;1158:8825:88;;;;;;;;5161:14;;;;;;1158:8825;5177:3;5130:1;1158:8825;;;;;;;;5201:17;5130:1;;;5196:147;5177:3;;5130:1;1158:8825;5146:13;;5239:3;1158:8825;;5220:17;;;;;5290:9;;;5896:8;5290:9;;;;;:::i;:::-;1158:8825;;5310:9;;;;;:::i;:::-;1158:8825;;5828:8;;;;;:::i;:::-;5896;;:::i;:::-;1158:8825;5201:17;;;5220;;;1158:8825;;;;;;;;;;;;;;;;;;;;5057:25;;;;;;1158:8825;5057:25;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;1158:8825;;;;;;;;;3535:285;1158:8825;;;;;;;;3634:56;;;1158:8825;3634:56;;1158:8825;3634:56;;;;;;;;;;;;1158:8825;3634:56;;;3535:285;-1:-1:-1;3630:190:88;;;1158:8825;;;;5529:34;;;;1158:8825;5529:34;;;1158:8825;5529:34;;1158:8825;5529:34;;;;;;;5896:8;5529:34;1158:8825;5529:34;;;3630:190;5828:8;;;;;;;:::i;:::-;5896;;:::i;:::-;1158:8825;5529:34;;;;;;;-1:-1:-1;5529:34:88;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;3630:190;3778:31;;1158:8825;3778:31;1158:8825;;;3778:31;3634:56;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;3539:36;;;;;;;;;;;;;;:::i;:::-;;;;1158:8825;;;;;-1:-1:-1;;1158:8825:88;;;;;;;:::i;:::-;1500:62:48;;:::i;:::-;-1:-1:-1;;;;;1158:8825:88;;;;;;1738:24:49;1158:8825:88;;;1738:24:49;1158:8825:88;;;;1777:43:49;1158:8825:88;1777:43:49;;1158:8825:88;;;;;;-1:-1:-1;;1158:8825:88;;;;;;-1:-1:-1;;;;;1311:13:49;1158:8825:88;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:88;;;;;;;:::i;:::-;1525:73:32;;:::i;:::-;-1:-1:-1;;;;;4682:5:88;;1158:8825;;;4682:36;1158:8825;4682:36;;1158:8825;;;4682:36;;1158:8825;4682:36;;1158:8825;;4682:36;;;;;;;;;;;;;1158:8825;4682:36;;;1158:8825;-1:-1:-1;4678:291:88;;;1158:8825;;;;;;6508:25;;;;1158:8825;6508:25;;1158:8825;6508:25;;1158:8825;6508:25;;;;;;;1158:8825;6508:25;;;4678:291;1158:8825;;;;-1:-1:-1;;1158:8825:88;;;;;;;;6612:14;;;;;;1158:8825;6628:3;6581:1;1158:8825;;;;;;;;6652:17;6581:1;;;6647:143;6628:3;;6581:1;1158:8825;6597:13;;6690:3;1158:8825;;6671:17;;;;;6744:9;;;7016:6;6744:9;;;;;:::i;:::-;1158:8825;;6764:9;;;;;:::i;:::-;1158:8825;;6955:6;;;;;:::i;:::-;7016;;:::i;:::-;1158:8825;6652:17;;;6671;;;6508:25;;;;;;1158:8825;6508:25;;;;;;:::i;:::-;;;;4678:291;1158:8825;;;;;;;;4780:56;;;1158:8825;4780:56;;1158:8825;4780:56;;;;;;;;;;;;1158:8825;4780:56;;;4678:291;-1:-1:-1;4776:193:88;;;1158:8825;;;;8255:34;;;;1158:8825;8255:34;;;1158:8825;8255:34;;1158:8825;8255:34;;;;;;;7016:6;8255:34;1158:8825;8255:34;;;4776:193;6955:6;;;;;;;:::i;:::-;7016;;:::i;8255:34::-;;;;;;;-1:-1:-1;8255:34:88;;;;;;:::i;:::-;;;;;;4780:56;;;;;;;;;;;;;;:::i;:::-;;;;4682:36;;;;;;;;;;;;;;:::i;:::-;;;;1158:8825;;;;;-1:-1:-1;;1158:8825:88;;;;;;;;1810:21:80;;-1:-1:-1;;;;;1810:21:80;1158:8825:88;;;1810:5:80;1158:8825:88;;1810:21:80;;;;;;;;;1158:8825:88;1810:21:80;;;1158:8825:88;;;;;;;;;1810:21:80;;;;;;;;;;;;;;;:::i;:::-;;;;;1158:8825:88;;;;;-1:-1:-1;;1158:8825:88;;;;;;;:::i;:::-;1525:73:32;;:::i;:::-;-1:-1:-1;;;;;1158:8825:88;;;2423:10:80;:21;2419:77;;2524:8;;;:::i;2419:77::-;2467:18;1158:8825:88;2467:18:80;1158:8825:88;;2467:18:80;1158:8825:88;;;;;-1:-1:-1;;1158:8825:88;;;;;1962:34;1158:8825;;:::i;:::-;;;:::i;:::-;1962:34;;:::i;:::-;1158:8825;;2013:13;1158:8825;;;;;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:88;;;;;;-1:-1:-1;;;;;1158:8825:88;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;1158:8825:88;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1525:73:32;;;;:::i;:::-;1158:8825:88;;2447:17;2443:66;;1158:8825;;-1:-1:-1;;1158:8825:88;;;;;;;;2546:23;-1:-1:-1;;;;;2546:23:88;;;:::i;:::-;;:32;1158:8825;;2607:34;;;;;:::i;:::-;1158:8825;;2652:29;;2729:3;1158:8825;;2711:16;;;;;2775:8;;;;:::i;:::-;;1158:8825;2801:13;;1158:8825;2775:8;;2801:13;1158:8825;;;-1:-1:-1;;;;;1158:8825:88;;;2883:13;-1:-1:-1;;;;;1158:8825:88;2883:13;;1158:8825;;;;;;8689:38;;;1158:8825;8689:38;;1158:8825;;8689:5;1158:8825;8689:5;-1:-1:-1;;;;;8689:5:88;1158:8825;8689:38;;;;;;-1:-1:-1;;;;;8689:38:88;1158:8825;8689:38;;;2797:217;1158:8825;;8743:24;;;8739:90;;-1:-1:-1;;;;;1158:8825:88;;8843:21;;;;;8915:27;;;;8911:117;;8839:551;;;-1:-1:-1;;;;;1158:8825:88;2567:1;8839:551;;3105:13;1158:8825;;2729:3;1158:8825;2696:13;;;8911:117;8969:44;1158:8825;8969:44;1158:8825;;;;;;;;8969:44;8839:551;9048:17;;;1158:8825;;9119:31;;9115:121;;9044:346;;;-1:-1:-1;;;;;1158:8825:88;2567:1;9044:346;8839:551;;9044:346;9335:44;;1158:8825;9335:44;1158:8825;;;;;;;;9335:44;8739:90;8790:28;;1158:8825;8790:28;1158:8825;;;;8790:28;8689:38;;;;1158:8825;8689:38;1158:8825;8689:38;;;;;;;:::i;:::-;;;;2797:217;1158:8825;-1:-1:-1;;;;;1158:8825:88;;;;;;;;2984:13;-1:-1:-1;;;;;1158:8825:88;2984:13;;1158:8825;;;;;9524:25;1158:8825;9524:25;;;1158:8825;9524:25;;1158:8825;;9524:5;1158:8825;9524:5;-1:-1:-1;;;;;9524:5:88;1158:8825;9524:25;;;;;;;1158:8825;9524:25;;;2797:217;9560:20;1158:8825;9590:21;1158:8825;9627:13;1158:8825;9661:3;1158:8825;;9642:17;;;;;9684:9;-1:-1:-1;;;;;9684:9:88;;;;:::i;:::-;1158:8825;;-1:-1:-1;;;;;1158:8825:88;;9684:28;9680:81;;9661:3;-1:-1:-1;;;;;9778:9:88;;;;;:::i;:::-;1158:8825;;9778:29;9774:83;;9661:3;2567:1;1158:8825;9627:13;;9774:83;2567:1;;-1:-1:-1;9774:83:88;;9680:81;2567:1;;-1:-1:-1;9680:81:88;;9642:17;;;;;;;;;;;;1158:8825;;;;9881:37;;9622:245;9877:98;;;2797:217;-1:-1:-1;;;;;1158:8825:88;2567:1;2797:217;;;9877:98;9941:23;1158:8825;9941:23;1158:8825;;;;9941:23;9881:37;1158:8825;;;9881:37;;;9524:25;;;;;;;1158:8825;9524:25;;;;;;:::i;:::-;;;;;2711:16;;;;1158:8825;;;3173:13;1158:8825;;;;;3205:12;;;;:::i;:::-;3232:13;;1158:8825;3265:3;1158:8825;;3247:16;;;;;1158:8825;;;-1:-1:-1;;1158:8825:88;;;;;;;3284:38;:23;2567:1;3284:23;;;:::i;:::-;3313:8;;;;;:::i;:::-;;3284:38;;:::i;:::-;1158:8825;3232:13;;1158:8825;;;;;;;;;;3247:16;;;1158:8825;;3173:13;1158:8825;;3347:59;1158:8825;-1:-1:-1;;;;;1158:8825:88;;;;;;;;;;;3347:59;;1158:8825;2443:66;2487:11;1158:8825;2487:11;1158:8825;;2487:11;1158:8825;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1158:8825:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:88;;;;;2223:34;1158:8825;;:::i;2223:34::-;1158:8825;;;2274:13;1158:8825;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1158:8825:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:88;;;;;735:10:63;-1:-1:-1;;;;;1311:13:49;1158:8825:88;;2339:24:49;2335:96;;2459:6;735:10:63;2459:6:49;:::i;2335:96::-;2386:34;1158:8825:88;2386:34:49;735:10:63;1158:8825:88;;;;2386:34:49;1158:8825:88;;;;;-1:-1:-1;;1158:8825:88;;;;;1500:62:48;;:::i;:::-;1158:8825:88;-1:-1:-1;;;;;1158:8825:88;;2093:20:49;1158:8825:88;;2093:20:49;1158:8825:88;;;;;;;;;3052:40:48;;;;1158:8825:88;;;;;;;;:::i;:::-;1525:73:32;;:::i;:::-;3998:34:88;;;;:::i;:::-;1158:8825;;4075:13;1158:8825;;;;;;;;4156:20;;;;;4152:76;;4256:1;4242:15;;:43;;;1158:8825;4238:111;;1158:8825;4475:9;;1158:8825;4475:9;;4502:44;4475:9;;:::i;:::-;1158:8825;;-1:-1:-1;;;;;1158:8825:88;;;;;;;;;;4502:44;;1158:8825;4238:111;1158:8825;;-1:-1:-1;;1158:8825:88;;;;;;;4301:37;1158:8825;4316:22;4301:12;4316:22;4502:44;4316:22;;;:::i;:::-;4301:12;;;;:::i;:::-;:37;;:::i;:::-;4238:111;;;4242:43;1158:8825;-1:-1:-1;;1158:8825:88;;;;;;;4261:24;;;4242:43;;4152:76;4199:18;1158:8825;4199:18;1158:8825;;4199:18;1158:8825;;;;1713:34;1158:8825;;;:::i;:::-;1713:34;;;:::i;:::-;1158:8825;;;1764:29;1158:8825;;1764:13;1158:8825;;;;;1764:29;:::i;:::-;1158:8825;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1158:8825:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1158:8825:88;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1158:8825:88;;;;;;:::o;:::-;-1:-1:-1;;1158:8825:88;;;;;;-1:-1:-1;;;;;1158:8825:88;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;1158:8825:88;;-1:-1:-1;1158:8825:88;;;-1:-1:-1;1158:8825:88;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;1158:8825:88;;-1:-1:-1;1158:8825:88;;-1:-1:-1;1158:8825:88;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;1158:8825:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1158:8825:88;;-1:-1:-1;1158:8825:88;;-1:-1:-1;1158:8825:88;;-1:-1:-1;1158:8825:88;;-1:-1:-1;1158:8825:88;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1158:8825:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1158:8825:88;;-1:-1:-1;1158:8825:88;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1158:8825:88;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;1158:8825:88;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;7366:1;1158:8825;;7366:1;1158:8825;;7366:1;1158:8825;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1158:8825:88;;-1:-1:-1;1158:8825:88;;;;;;-1:-1:-1;;;;;1158:8825:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1931:430:32;1158:8825:88;;;2303:50:32;;;2320:22;;1158:8825:88;;;;;;;2303:50:32;;;;;;:::i;:::-;1158:8825:88;2293:61:32;;1931:430;:::o;1158:8825:88:-;;;;;;;;;;-1:-1:-1;;;;;1158:8825:88;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;8391:162::-;1158:8825;;8510:35;;;;1158:8825;;;;;;;;;;;;;;;;8510:35;;;;;;:::i;1688:201:32:-;1798:33;1762:20;1774:7;;;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;1688:201::o;1796:162:48:-;-1:-1:-1;;;;;1710:6:48;1158:8825:88;;735:10:63;1855:23:48;1851:101;;1796:162::o;2011:153:49:-;1158:8825:88;;;2093:20:49;1158:8825:88;;2093:20:49;1158:8825:88;2093:20:49;1158:8825:88;-1:-1:-1;;;;;1158:8825:88;;;;;;;;2093:20:49;1158:8825:88;;3052:40:48;2093:20:49;3052:40:48;;2011:153:49:o;1158:8825:88:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1158:8825:88;;;;;;;;;;;;;;;;2546:382:80;;-1:-1:-1;;;;;1158:8825:88;;;;;;;;2721:15:80;;;2717:57;;1158:8825:88;;2858:21:80;1158:8825:88;2858:21:80;;;:5;;;:21;:5;;;1158:8825:88;2858:21:80;;;;;;;;;1158:8825:88;2858:21:80;;;2546:382;1158:8825:88;;;;;;2858:63:80;;;;;1158:8825:88;2858:63:80;;:21;:63;;1158:8825:88;;;;;2915:4:80;1158:8825:88;;;;;2858:63:80;;;;;;;1158:8825:88;2858:63:80;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;-1:-1:-1;2858:63:80;;;;;;:::i;:::-;2546:382;:::o;2858:21::-;1158:8825:88;2858:21:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o;7036:1122:88:-;;7161:34;;;;:::i;:::-;-1:-1:-1;1158:8825:88;;7239:13;1158:8825;;;;;-1:-1:-1;1158:8825:88;-1:-1:-1;7387:3:88;1158:8825;;7369:16;;;;;;7437:8;;;;:::i;:::-;7480:1;;1158:8825;;;;;7464:17;:50;;;;7387:3;7464:92;;;7387:3;7460:504;;;;7387:3;;7480:1;1158:8825;7354:13;;7460:504;7691:16;;;;;;;;7687:97;;7460:504;7846:9;7880:44;7846:9;;;;;:::i;:::-;1158:8825;;;;;;-1:-1:-1;;;;;1158:8825:88;;;;;;7880:44;7943:7::o;7687:97::-;-1:-1:-1;;1158:8825:88;;;;;;;7880:44;7742:23;7731:8;7742:23;7731:34;7742:23;;;:::i;7731:34::-;7687:97;;;7464:92;7526:8;;;;;:::i;:::-;-1:-1:-1;7526:17:88;1158:8825;-1:-1:-1;;;;;1158:8825:88;;;;;7518:38;7464:92;;;;:50;7485:8;;;;;:::i;:::-;-1:-1:-1;1158:8825:88;-1:-1:-1;;;;;1158:8825:88;;;;;7485:29;;7464:50;;7369:16;;;;8101:50;-1:-1:-1;8101:50:88;-1:-1:-1;;;;;1158:8825:88;;;;;8101:50;1158:8825;;;;;;;;-1:-1:-1;8101:50:88;5918:505;6055:34;;;;:::i;:::-;-1:-1:-1;;;;;1158:8825:88;;;;;;;;;;;:::i;:::-;;;;6126:84;;;;1158:8825;5650:4;1158:8825;6126:84;;1158:8825;;-1:-1:-1;1158:8825:88;6254:13;6126:84;1158:8825;;-1:-1:-1;1158:8825:88;6286:12;;;;:::i;:::-;1158:8825;;;;-1:-1:-1;;1158:8825:88;;;;;;;6357:59;6308:23;;:34;:23;6126:84;6308:23;;:::i;:::-;:34;;:::i;:::-;-1:-1:-1;1158:8825:88;6254:13;1158:8825;;;-1:-1:-1;1158:8825:88;;;;;;;;;6357:59;;5918:505::o;:::-;6055:34;;;;:::i;:::-;-1:-1:-1;;;;;1158:8825:88;;;;;;;;;;;:::i;:::-;;;;6126:84;;;;1158:8825;;;6126:84;;1158:8825;;;;6254:13;6126:84;1158:8825;;;;6286:12;;;;:::i"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","addPath(address,(address,address,bool)[])":"815ca70f","addSimplePath(address)":"f335b520","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getPathAt(address,address,uint256)":"057074ff","getPathCount(address,address)":"94ee0a3b","getPaths(address,address)":"7c7d370a","owner()":"8da5cb5b","pendingOwner()":"e30c3978","removePathAtIndex(address,address,uint256)":"32fffdbd","removeSimplePath(address)":"bc138aa3","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"buffer\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyPath\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"buffer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"InvalidBufferPath\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolOrBuffer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"InvalidRemovePath\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"path\",\"type\":\"address\"}],\"name\":\"InvalidSimplePath\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pathsLength\",\"type\":\"uint256\"}],\"name\":\"PathAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pathsLength\",\"type\":\"uint256\"}],\"name\":\"PathRemoved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"}],\"name\":\"addPath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolOrBuffer\",\"type\":\"address\"}],\"name\":\"addSimplePath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getPathAt\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct SwapPathStep[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"getPathCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"}],\"name\":\"getPaths\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct SwapPathStep[][]\",\"name\":\"\",\"type\":\"tuple[][]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"removePathAtIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolOrBuffer\",\"type\":\"address\"}],\"name\":\"removeSimplePath\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The paths are stored as arrays of `SwapPathStep` structs, which contain the pool or buffer address, the output token, and a boolean indicating whether the step is a buffer or not. Functions that add information to the registry are permissioned.\",\"errors\":{\"BufferNotInitialized(address)\":[{\"params\":{\"buffer\":\"The address of the uninitialized buffer\"}}],\"InvalidBufferPath(address,address,address)\":[{\"params\":{\"buffer\":\"The address of the buffer\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}}],\"InvalidRemovePath(address,address,address)\":[{\"params\":{\"poolOrBuffer\":\"The address of the pool or buffer\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}}],\"InvalidSimplePath(address)\":[{\"params\":{\"path\":\"Pool or buffer address\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"PathAdded(address,address,uint256)\":{\"params\":{\"pathsLength\":\"The number of paths added for the token pair\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}},\"PathRemoved(address,address,uint256)\":{\"params\":{\"pathsLength\":\"The number of paths associated with the token pair after the removal\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"addPath(address,(address,address,bool)[])\":{\"details\":\"This function is permissioned. Use it to register boosted pool paths with leading / trailing buffer steps. The registry will validate that each step is valid (i.e. each pool step contains the `tokenIn` and `tokenOut`, and each buffer step has the correct wrapped / underlying token).\",\"params\":{\"steps\":\"An array of `SwapPathStep` structs representing the path steps to reach the output token\",\"tokenIn\":\"The address of the input token in the pair\"}},\"addSimplePath(address)\":{\"details\":\"This function is permissioned.\",\"params\":{\"poolOrBuffer\":\"The address of the pool or buffer\"}},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getPathAt(address,address,uint256)\":{\"details\":\"Safe version; reverts if the index is out of bounds.\",\"params\":{\"index\":\"The index of the path in the list of paths for the token pair\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"},\"returns\":{\"_0\":\"The path at the specified index for the token pair\"}},\"getPathCount(address,address)\":{\"params\":{\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"},\"returns\":{\"_0\":\"The number of paths registered for the token pair\"}},\"getPaths(address,address)\":{\"params\":{\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"},\"returns\":{\"_0\":\"An array of path addresses registered for the token pair\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"removePathAtIndex(address,address,uint256)\":{\"details\":\"This function is permissioned.\",\"params\":{\"index\":\"The index of the path to remove in the list of paths for the token pair\",\"tokenIn\":\"The address of the input token in the pair\",\"tokenOut\":\"The address of the output token in the pair\"}},\"removeSimplePath(address)\":{\"details\":\"This function is permissioned.\",\"params\":{\"poolOrBuffer\":\"The address of the pool or buffer\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"BufferNotInitialized(address)\":[{\"notice\":\"The given buffer address does not correspond to an initialized buffer.\"}],\"EmptyPath()\":[{\"notice\":\"The path to add cannot be empty.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"Attempted to remove a path at an index beyond the registered length.\"}],\"InvalidBufferPath(address,address,address)\":[{\"notice\":\"The output token does not match the expected address in a wrap or unwrap operation.\"}],\"InvalidRemovePath(address,address,address)\":[{\"notice\":\"The given pool or buffer is not registered as a path for the token pair.\"}],\"InvalidSimplePath(address)\":[{\"notice\":\"The given address is not a valid pool or buffer.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"events\":{\"PathAdded(address,address,uint256)\":{\"notice\":\"Emitted when a new token pair is added to the registry.\"},\"PathRemoved(address,address,uint256)\":{\"notice\":\"Emitted when an existing token pair is removed from the registry.\"}},\"kind\":\"user\",\"methods\":{\"addPath(address,(address,address,bool)[])\":{\"notice\":\"Adds an arbitrary path between `tokenIn` and the last step's `tokenOut` to the registry.\"},\"addSimplePath(address)\":{\"notice\":\"Adds a pool or buffer to the registry with all token pairs it supports.\"},\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"},\"getPathAt(address,address,uint256)\":{\"notice\":\"Returns the path for a given token pair at a specific index.\"},\"getPathCount(address,address)\":{\"notice\":\"Returns the number of paths registered for a given token pair.\"},\"getPaths(address,address)\":{\"notice\":\"Returns the paths registered for a given token pair.\"},\"removePathAtIndex(address,address,uint256)\":{\"notice\":\"Removes an arbitrary path from the registry at a given index.\"},\"removeSimplePath(address)\":{\"notice\":\"Removes all token paths registered for a given pool or buffer.\"}},\"notice\":\"Stores token pair swap paths on-chain, allowing an admin to maintain swap routes.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/TokenPairRegistry.sol\":\"TokenPairRegistry\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/ITokenPairRegistry.sol\":{\"keccak256\":\"0xd4b893a6f835f8bdf514b99a4bd0ba00cd54d0b575f675abd95efd99742b0fb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3cf813c85596cffa3198175d9d288c643937b6629166832cebd3878d192e04c3\",\"dweb:/ipfs/QmXnK5iKZ9ZJ4sEUqJbTJ2UWpqbbehkwLZT8WraPcnDCDh\"]},\"@balancer-labs/v3-interfaces/contracts/vault/BatchRouterTypes.sol\":{\"keccak256\":\"0x956f0a455276ada0193331696b9e3402d8b32fbacc5a5d7fa659ff4b5a2fc47a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03169eeb5ca1b2594fce7f13fb06e268545044c4501b6d1f98b8e86dff788afc\",\"dweb:/ipfs/QmPLsewKZZoG4QaeQEn1WGsaCKyABsYku4KgLQtumTAyVv\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/EnumerableSet.sol\":{\"keccak256\":\"0xa981b2a584a81920bc4bd25570ce31f83890bdd41174e11d230e9da179a29468\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5908435bef8ce18bed32900d668530bade6d9207059cbc3ad2460c5e41eba532\",\"dweb:/ipfs/QmZZePBFw5vkoZZNKt9q5PBCFNuGS9LJABAMjAaG6kg6u8\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/TokenPairRegistry.sol\":{\"keccak256\":\"0xd11748453140ed8348635fff6a4a12da8c5bbc4cfdf3b4b7b30c8e7130d3b993\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://081e50c993a489c673a38e4ce2f720857b2cbbd468b77a8adc1c95434055d98f\",\"dweb:/ipfs/QmPiC1Y1o9gVRGvtpWFGFs3Tmi3i2NQtmUwNiznUKtyQ5v\"]}},\"version\":1}"}},"contracts/test/FeeBurnerAuthenticationMock.sol":{"FeeBurnerAuthenticationMock":{"abi":[{"inputs":[{"internalType":"contract IProtocolFeeSweeper","name":"protocolFeeSweeper","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidProtocolFeeSweeper","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualOnlyFeeRecipientOrOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualOnlyProtocolFeeSweeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeSweeper","outputs":[{"internalType":"contract IProtocolFeeSweeper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a0346100f657601f61065638819003918201601f19168301916001600160401b038311848410176100fa5780849260409485528339810103126100f65780516001600160a01b0391828216908183036100f657602001518381168091036100f65780156100e35760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3156100d457608052610547908161010f823960805181818160ca015281816102dd01526104a10152f35b63932c92a560e01b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe608060409080825260049081361015610016575f80fd5b5f3560e01c908163178ac96e1461047757508063715018a6146103f257806379ba5097146103385780638da5cb5b146103055780638ec20833146102b5578063e30c397814610281578063f2fde38b146101f45763f405ce4414610078575f80fd5b346101b2575f6003193601126101b25773ffffffffffffffffffffffffffffffffffffffff82517f4ccb20c00000000000000000000000000000000000000000000000000000000081526020818481857f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101ea578293945f92610145575b5050163314159081610137575b5061011157005b7f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90505f54163314155f61010a565b915091506020903d6020116101e2575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011683019083821067ffffffffffffffff8311176101b657526020908201829003126101b2575181811681036101b25781905f806100fd565b5f80fd5b6041867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b3d9150610155565b84513d5f823e3d90fd5b50346101b25760206003193601126101b2573573ffffffffffffffffffffffffffffffffffffffff8082168092036101b25761022e6104c5565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b82346101b2575f6003193601126101b25760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50346101b2575f6003193601126101b25773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361011157005b82346101b2575f6003193601126101b25760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50346101b2575f6003193601126101b2576001549073ffffffffffffffffffffffffffffffffffffffff9033828416036103c757507fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b346101b2575f6003193601126101b25761040a6104c5565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101b2575f6003193601126101b25760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b73ffffffffffffffffffffffffffffffffffffffff5f541633036104e557565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffdfea264697066735822122038f5d9fd03f05eb911f88bdf390163e3b48e829e643ec61bad0b6dc300adc56864736f6c634300081b0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH2 0xF6 JUMPI PUSH1 0x1F PUSH2 0x656 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0xFA JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0xF6 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0xF6 JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0xF6 JUMPI DUP1 ISZERO PUSH2 0xE3 JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ISZERO PUSH2 0xD4 JUMPI PUSH1 0x80 MSTORE PUSH2 0x547 SWAP1 DUP2 PUSH2 0x10F DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0xCA ADD MSTORE DUP2 DUP2 PUSH2 0x2DD ADD MSTORE PUSH2 0x4A1 ADD MSTORE RETURN JUMPDEST PUSH4 0x932C92A5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x178AC96E EQ PUSH2 0x477 JUMPI POP DUP1 PUSH4 0x715018A6 EQ PUSH2 0x3F2 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x338 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x8EC20833 EQ PUSH2 0x2B5 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x281 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1F4 JUMPI PUSH4 0xF405CE44 EQ PUSH2 0x78 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 DUP5 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1EA JUMPI DUP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0x145 JUMPI JUMPDEST POP POP AND CALLER EQ ISZERO SWAP1 DUP2 PUSH2 0x137 JUMPI JUMPDEST POP PUSH2 0x111 JUMPI STOP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP PUSH0 SLOAD AND CALLER EQ ISZERO PUSH0 PUSH2 0x10A JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x20 SWAP1 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1E2 JUMPI JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP4 ADD AND DUP4 ADD SWAP1 DUP4 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x1B6 JUMPI MSTORE PUSH1 0x20 SWAP1 DUP3 ADD DUP3 SWAP1 SUB SLT PUSH2 0x1B2 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x1B2 JUMPI DUP2 SWAP1 PUSH0 DUP1 PUSH2 0xFD JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x41 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x155 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1B2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1B2 JUMPI PUSH2 0x22E PUSH2 0x4C5 JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x111 JUMPI STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x1 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 CALLER DUP3 DUP5 AND SUB PUSH2 0x3C7 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH2 0x40A PUSH2 0x4C5 JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x4E5 JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CODESIZE CREATE2 0xD9 REVERT SUB CREATE MCOPY 0xB9 GT 0xF8 DUP12 0xDF CODECOPY ADD PUSH4 0xE3B48E82 SWAP15 PUSH5 0x3EC61BAD0B PUSH14 0xC300ADC56864736F6C634300081B STOP CALLER ","sourceMap":"349:452:89:-:0;;;;;;;;;;;;;-1:-1:-1;;349:452:89;;;;-1:-1:-1;;;;;349:452:89;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;349:452:89;;;;;;;;;;;;;;;;;;;;;1273:26:48;;1269:95;;349:452:89;;;;;;;;2093:20:49;349:452:89;;2093:20:49;349:452:89;;-1:-1:-1;349:452:89;;;;;-1:-1:-1;349:452:89;;;;;3052:40:48;-1:-1:-1;3052:40:48;;1203:42:77;1199:107;;1316:40;;349:452:89;;;;;;1316:40:77;349:452:89;;;;;;;;;;;;;;;;1199:107:77;1268:27;;;-1:-1:-1;1268:27:77;;-1:-1:-1;1268:27:77;1269:95:48;1322:31;;;-1:-1:-1;1322:31:48;-1:-1:-1;1322:31:48;349:452:89;;-1:-1:-1;1322:31:48;349:452:89;-1:-1:-1;349:452:89;;;;;;-1:-1:-1;349:452:89;;;;;-1:-1:-1;349:452:89"},"deployedBytecode":{"functionDebugData":{"fun_checkOwner":{"entryPoint":1221,"id":9405,"parameterSlots":0,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"19753":[{"length":32,"start":202},{"length":32,"start":733},{"length":32,"start":1185}]},"linkReferences":{},"object":"608060409080825260049081361015610016575f80fd5b5f3560e01c908163178ac96e1461047757508063715018a6146103f257806379ba5097146103385780638da5cb5b146103055780638ec20833146102b5578063e30c397814610281578063f2fde38b146101f45763f405ce4414610078575f80fd5b346101b2575f6003193601126101b25773ffffffffffffffffffffffffffffffffffffffff82517f4ccb20c00000000000000000000000000000000000000000000000000000000081526020818481857f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101ea578293945f92610145575b5050163314159081610137575b5061011157005b7f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90505f54163314155f61010a565b915091506020903d6020116101e2575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011683019083821067ffffffffffffffff8311176101b657526020908201829003126101b2575181811681036101b25781905f806100fd565b5f80fd5b6041867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b3d9150610155565b84513d5f823e3d90fd5b50346101b25760206003193601126101b2573573ffffffffffffffffffffffffffffffffffffffff8082168092036101b25761022e6104c5565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b82346101b2575f6003193601126101b25760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50346101b2575f6003193601126101b25773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361011157005b82346101b2575f6003193601126101b25760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b50346101b2575f6003193601126101b2576001549073ffffffffffffffffffffffffffffffffffffffff9033828416036103c757507fffffffffffffffffffffffff00000000000000000000000000000000000000008092166001555f549133908316175f553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b346101b2575f6003193601126101b25761040a6104c5565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101b2575f6003193601126101b25760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b73ffffffffffffffffffffffffffffffffffffffff5f541633036104e557565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffdfea264697066735822122038f5d9fd03f05eb911f88bdf390163e3b48e829e643ec61bad0b6dc300adc56864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x178AC96E EQ PUSH2 0x477 JUMPI POP DUP1 PUSH4 0x715018A6 EQ PUSH2 0x3F2 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x338 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x8EC20833 EQ PUSH2 0x2B5 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x281 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1F4 JUMPI PUSH4 0xF405CE44 EQ PUSH2 0x78 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD PUSH32 0x4CCB20C000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 DUP5 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1EA JUMPI DUP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0x145 JUMPI JUMPDEST POP POP AND CALLER EQ ISZERO SWAP1 DUP2 PUSH2 0x137 JUMPI JUMPDEST POP PUSH2 0x111 JUMPI STOP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP PUSH0 SLOAD AND CALLER EQ ISZERO PUSH0 PUSH2 0x10A JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x20 SWAP1 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1E2 JUMPI JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP4 ADD AND DUP4 ADD SWAP1 DUP4 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x1B6 JUMPI MSTORE PUSH1 0x20 SWAP1 DUP3 ADD DUP3 SWAP1 SUB SLT PUSH2 0x1B2 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x1B2 JUMPI DUP2 SWAP1 PUSH0 DUP1 PUSH2 0xFD JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x41 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x155 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1B2 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1B2 JUMPI PUSH2 0x22E PUSH2 0x4C5 JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x111 JUMPI STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x1 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 CALLER DUP3 DUP5 AND SUB PUSH2 0x3C7 JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x1 SSTORE PUSH0 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH0 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH2 0x40A PUSH2 0x4C5 JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x1B2 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B2 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x4E5 JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CODESIZE CREATE2 0xD9 REVERT SUB CREATE MCOPY 0xB9 GT 0xF8 DUP12 0xDF CODECOPY ADD PUSH4 0xE3B48E82 SWAP15 PUSH5 0x3EC61BAD0B PUSH14 0xC300ADC56864736F6C634300081B STOP CALLER ","sourceMap":"349:452:89:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;349:452:89;;;;;;;;;956:36:77;;;:18;;;;;349:452:89;956:36:77;;;;;;;;;;349:452:89;956:36:77;;;349:452:89;;;;942:10:77;:50;;:75;;;;349:452:89;938:131:77;;;349:452:89;938:131:77;1040:18;349:452:89;1040:18:77;349:452:89;1040:18:77;942:75;349:452:89;;;;;942:10:77;996:21;;942:75;;;956:36;;;;;;;;;;;;;349:452:89;;;;;;;;;;;;;;;;;;956:36:77;;;;349:452:89;;;;;;;;;;;;;;956:36:77;;;;;;349:452:89;;;;;;;;;;;;;;956:36:77;;;-1:-1:-1;956:36:77;;;349:452:89;;;;;;;;;;;;;;;-1:-1:-1;;349:452:89;;;;;;;;;;;;;;;1500:62:48;;:::i;:::-;349:452:89;;1738:24:49;349:452:89;;;1738:24:49;349:452:89;;;;1777:43:49;349:452:89;1777:43:49;;349:452:89;;;;;;;-1:-1:-1;;349:452:89;;;;;;;;1311:13:49;349:452:89;;;;;;;;;;;;;;-1:-1:-1;;349:452:89;;;;;;799:18:77;349:452:89;777:10:77;:41;773:97;;349:452:89;;;;;;;-1:-1:-1;;349:452:89;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;349:452:89;;;;;1311:13:49;349:452:89;;;735:10:63;;349:452:89;;;2339:24:49;2335:96;;349:452:89;;;;;1311:13:49;349:452:89;;;735:10:63;;349:452:89;;;;;;735:10:63;349:452:89;;3052:40:48;349:452:89;3052:40:48;;349:452:89;2335:96:49;2386:34;349:452:89;2386:34:49;735:10:63;349:452:89;;;;2386:34:49;349:452:89;;;;;-1:-1:-1;;349:452:89;;;;;1500:62:48;;:::i;:::-;349:452:89;;;;2093:20:49;349:452:89;;2093:20:49;349:452:89;;;;;;;;;3052:40:48;;;;349:452:89;;;;;;-1:-1:-1;;349:452:89;;;;;;479:55:77;349:452:89;479:55:77;349:452:89;;;;1796:162:48;349:452:89;1710:6:48;349:452:89;;735:10:63;1855:23:48;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:63;1901:40:48;349:452:89;;1710:6:48;1901:40"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","manualOnlyFeeRecipientOrOwner()":"f405ce44","manualOnlyProtocolFeeSweeper()":"8ec20833","owner()":"8da5cb5b","pendingOwner()":"e30c3978","protocolFeeSweeper()":"178ac96e","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"protocolFeeSweeper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidProtocolFeeSweeper\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualOnlyFeeRecipientOrOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualOnlyProtocolFeeSweeper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFeeSweeper\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeSweeper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidProtocolFeeSweeper()\":[{\"notice\":\"The fee protocol is invalid.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/FeeBurnerAuthenticationMock.sol\":\"FeeBurnerAuthenticationMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeSweeper.sol\":{\"keccak256\":\"0x31607d28c0b789e6aa20a6e6e82e0a97de3635f48295f1f81e3294b6a265f8c2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://84ece81a7545ce3959923d9b3d1120b108ddfe2a7d15174396db0b2384565b07\",\"dweb:/ipfs/QmZnZ8xzmUeNea9wdqWjfsYuzdxjfnYLaVi2SrN1YvVwKy\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"contracts/FeeBurnerAuthentication.sol\":{\"keccak256\":\"0x4861db67bf113a4775c165241802df34a6c0e9fefaec82e8aaf969b5879759f4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f522b3af683e09e1b67ed515be9972e7cf9514a584e264c4ca9656cc12c2f06\",\"dweb:/ipfs/QmNYqMsvWcNqACozLm3cYeR4oC3KKfKNBDSqR3vcpjv3zo\"]},\"contracts/test/FeeBurnerAuthenticationMock.sol\":{\"keccak256\":\"0xb5e7ba14717b87abf9cdf5fa11f1c22897abcaf828cf79e30353fc2d6e00c7e6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b2686f5a5c9fc53139e1110a32b6fee6ab2b08e0fb6490db942d4c68c7339a4d\",\"dweb:/ipfs/QmZmQf75fe96NMQXcen6trFGcxmNWkhdF8atir5L78ppUj\"]}},\"version\":1}"}},"contracts/test/OwnableAuthenticationMock.sol":{"OwnableAuthenticationMock":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"permissionedFunction","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461010357601f61092b38819003918201601f19168301916001600160401b038311848410176101075780849260409485528339810103126101035780516001600160a01b03918282169081830361010357602001518381168091036101035780156100f05760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100e15760a05261080f908161011c8239608051816104f7015260a05181818160b60152818161020c01526106e80152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f3560e01c908163715018a6146103d957816379ba509714610376578163851c1bb3146103265781638da5cb5b146102f3578163a89b112814610281578163aaabadc5146101b8578163c1d080101461019e578163e30c39781461016a578163f2fde38b146100de575063fbfa77cf1461008b575f80fd5b346100da575f6003193601126100da576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b346100da5760206003193601126100da573573ffffffffffffffffffffffffffffffffffffffff8082168092036100da5761011761056e565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b82346100da575f6003193601126100da5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b346100da575f6003193601126100da576101b661062c565b005b9050346100da575f6003193601126100da5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561027757926020935f93610248575b505191168152f35b610269919350843d8611610270575b610261818361045e565b810190610542565b915f610240565b503d610257565b83513d5f823e3d90fd5b346100da5760206003193601126100da57803573ffffffffffffffffffffffffffffffffffffffff80821682036100da576102ba61062c565b5f541633146102cc576101b6906105ba565b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b82346100da575f6003193601126100da5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b9050346100da5760206003193601126100da5735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100da5761036f6020926104cc565b9051908152f35b346100da575f6003193601126100da573373ffffffffffffffffffffffffffffffffffffffff60015416036103ae576101b6336105ba565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b346100da575f6003193601126100da576103f161056e565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761049f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff82111761049f5760405251902090565b908160209103126100da575173ffffffffffffffffffffffffffffffffffffffff811681036100da5790565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361058e57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b61066261065b7fffffffff000000000000000000000000000000000000000000000000000000005f35166104cc565b3390610691565b1561066957565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146107d157604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156107a25785935f956107ad575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa9182156107a2575f9261076f57505090565b90809250813d831161079b575b610786818361045e565b810103126100da575180151581036100da5790565b503d61077c565b6040513d5f823e3d90fd5b6064929195506107c990853d871161027057610261818361045e565b94909161071a565b50505060019056fea2646970667358221220248f838b072c70b516f68d61cba8d45e5457802995051bda0db4d4d92f2fe24964736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x103 JUMPI PUSH1 0x1F PUSH2 0x92B CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x107 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x103 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x103 JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x103 JUMPI DUP1 ISZERO PUSH2 0xF0 JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xE1 JUMPI PUSH1 0xA0 MSTORE PUSH2 0x80F SWAP1 DUP2 PUSH2 0x11C DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x4F7 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xB6 ADD MSTORE DUP2 DUP2 PUSH2 0x20C ADD MSTORE PUSH2 0x6E8 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x715018A6 EQ PUSH2 0x3D9 JUMPI DUP2 PUSH4 0x79BA5097 EQ PUSH2 0x376 JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x326 JUMPI DUP2 PUSH4 0x8DA5CB5B EQ PUSH2 0x2F3 JUMPI DUP2 PUSH4 0xA89B1128 EQ PUSH2 0x281 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x1B8 JUMPI DUP2 PUSH4 0xC1D08010 EQ PUSH2 0x19E JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x16A JUMPI DUP2 PUSH4 0xF2FDE38B EQ PUSH2 0xDE JUMPI POP PUSH4 0xFBFA77CF EQ PUSH2 0x8B JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xDA JUMPI PUSH2 0x117 PUSH2 0x56E JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH2 0x1B6 PUSH2 0x62C JUMP JUMPDEST STOP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x277 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x248 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x269 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x270 JUMPI JUMPDEST PUSH2 0x261 DUP2 DUP4 PUSH2 0x45E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x542 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x240 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x257 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP3 SUB PUSH2 0xDA JUMPI PUSH2 0x2BA PUSH2 0x62C JUMP JUMPDEST PUSH0 SLOAD AND CALLER EQ PUSH2 0x2CC JUMPI PUSH2 0x1B6 SWAP1 PUSH2 0x5BA JUMP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xDA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xDA JUMPI PUSH2 0x36F PUSH1 0x20 SWAP3 PUSH2 0x4CC JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0x3AE JUMPI PUSH2 0x1B6 CALLER PUSH2 0x5BA JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH2 0x3F1 PUSH2 0x56E JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x49F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x49F JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xDA JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xDA JUMPI SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x58E JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH2 0x662 PUSH2 0x65B PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x4CC JUMP JUMPDEST CALLER SWAP1 PUSH2 0x691 JUMP JUMPDEST ISZERO PUSH2 0x669 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x7D1 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x7A2 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x7AD JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7A2 JUMPI PUSH0 SWAP3 PUSH2 0x76F JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x79B JUMPI JUMPDEST PUSH2 0x786 DUP2 DUP4 PUSH2 0x45E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xDA JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xDA JUMPI SWAP1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x77C JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x7C9 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x270 JUMPI PUSH2 0x261 DUP2 DUP4 PUSH2 0x45E JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x71A JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 DUP16 DUP4 DUP12 SMOD 0x2C PUSH17 0xB516F68D61CBA8D45E5457802995051BDA 0xD 0xB4 0xD4 0xD9 0x2F 0x2F 0xE2 BLOBHASH PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"574:352:90:-:0;;;;;;;;;;;;;-1:-1:-1;;574:352:90;;;;-1:-1:-1;;;;;574:352:90;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;574:352:90;;;;;;;;;;;;;;;;;;;;;1273:26:48;;1269:95;;574:352:90;;;;;;;;2093:20:49;574:352:90;;2093:20:49;574:352:90;;-1:-1:-1;574:352:90;;;;;-1:-1:-1;574:352:90;;;;;3052:40:48;-1:-1:-1;3052:40:48;;1524:4:80;1347:46:32;;1548:29:80;1544:80;;1634:14;;574:352:90;;;;;;1347:46:32;574:352:90;;;;;1634:14:80;574:352:90;;;;;;;;;;;;;;;;1544:80:80;1600:13;;;-1:-1:-1;1600:13:80;;-1:-1:-1;1600:13:80;1269:95:48;1322:31;;;-1:-1:-1;1322:31:48;-1:-1:-1;1322:31:48;574:352:90;;-1:-1:-1;1322:31:48;574:352:90;-1:-1:-1;574:352:90;;;;;;-1:-1:-1;574:352:90;;;;;-1:-1:-1;574:352:90"},"deployedBytecode":{"functionDebugData":{"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":1346,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":1118,"id":null,"parameterSlots":2,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":1580,"id":4338,"parameterSlots":0,"returnSlots":0},"fun_canPerform":{"entryPoint":1681,"id":20311,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":1390,"id":9405,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":1228,"id":4356,"parameterSlots":1,"returnSlots":1},"fun_transferOwnership":{"entryPoint":1466,"id":9529,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"4296":[{"length":32,"start":1271}],"20200":[{"length":32,"start":182},{"length":32,"start":524},{"length":32,"start":1768}]},"linkReferences":{},"object":"604060808152600480361015610013575f80fd5b5f3560e01c908163715018a6146103d957816379ba509714610376578163851c1bb3146103265781638da5cb5b146102f3578163a89b112814610281578163aaabadc5146101b8578163c1d080101461019e578163e30c39781461016a578163f2fde38b146100de575063fbfa77cf1461008b575f80fd5b346100da575f6003193601126100da576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b346100da5760206003193601126100da573573ffffffffffffffffffffffffffffffffffffffff8082168092036100da5761011761056e565b817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b82346100da575f6003193601126100da5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b346100da575f6003193601126100da576101b661062c565b005b9050346100da575f6003193601126100da5773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561027757926020935f93610248575b505191168152f35b610269919350843d8611610270575b610261818361045e565b810190610542565b915f610240565b503d610257565b83513d5f823e3d90fd5b346100da5760206003193601126100da57803573ffffffffffffffffffffffffffffffffffffffff80821682036100da576102ba61062c565b5f541633146102cc576101b6906105ba565b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b82346100da575f6003193601126100da5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b9050346100da5760206003193601126100da5735907fffffffff00000000000000000000000000000000000000000000000000000000821682036100da5761036f6020926104cc565b9051908152f35b346100da575f6003193601126100da573373ffffffffffffffffffffffffffffffffffffffff60015416036103ae576101b6336105ba565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b346100da575f6003193601126100da576103f161056e565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761049f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff82111761049f5760405251902090565b908160209103126100da575173ffffffffffffffffffffffffffffffffffffffff811681036100da5790565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361058e57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b61066261065b7fffffffff000000000000000000000000000000000000000000000000000000005f35166104cc565b3390610691565b1561066957565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b9073ffffffffffffffffffffffffffffffffffffffff9081805f541691169081146107d157604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa9384156107a25785935f956107ad575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa9182156107a2575f9261076f57505090565b90809250813d831161079b575b610786818361045e565b810103126100da575180151581036100da5790565b503d61077c565b6040513d5f823e3d90fd5b6064929195506107c990853d871161027057610261818361045e565b94909161071a565b50505060019056fea2646970667358221220248f838b072c70b516f68d61cba8d45e5457802995051bda0db4d4d92f2fe24964736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x715018A6 EQ PUSH2 0x3D9 JUMPI DUP2 PUSH4 0x79BA5097 EQ PUSH2 0x376 JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x326 JUMPI DUP2 PUSH4 0x8DA5CB5B EQ PUSH2 0x2F3 JUMPI DUP2 PUSH4 0xA89B1128 EQ PUSH2 0x281 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x1B8 JUMPI DUP2 PUSH4 0xC1D08010 EQ PUSH2 0x19E JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x16A JUMPI DUP2 PUSH4 0xF2FDE38B EQ PUSH2 0xDE JUMPI POP PUSH4 0xFBFA77CF EQ PUSH2 0x8B JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP1 SWAP3 SUB PUSH2 0xDA JUMPI PUSH2 0x117 PUSH2 0x56E JUMP JUMPDEST DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH2 0x1B6 PUSH2 0x62C JUMP JUMPDEST STOP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x277 JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x248 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x269 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x270 JUMPI JUMPDEST PUSH2 0x261 DUP2 DUP4 PUSH2 0x45E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x542 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x240 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x257 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP3 SUB PUSH2 0xDA JUMPI PUSH2 0x2BA PUSH2 0x62C JUMP JUMPDEST PUSH0 SLOAD AND CALLER EQ PUSH2 0x2CC JUMPI PUSH2 0x1B6 SWAP1 PUSH2 0x5BA JUMP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xDA JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0xDA JUMPI PUSH2 0x36F PUSH1 0x20 SWAP3 PUSH2 0x4CC JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0x3AE JUMPI PUSH2 0x1B6 CALLER PUSH2 0x5BA JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xDA JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDA JUMPI PUSH2 0x3F1 PUSH2 0x56E JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x49F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x49F JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xDA JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xDA JUMPI SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x58E JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH2 0x662 PUSH2 0x65B PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x4CC JUMP JUMPDEST CALLER SWAP1 PUSH2 0x691 JUMP JUMPDEST ISZERO PUSH2 0x669 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x7D1 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x7A2 JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x7AD JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7A2 JUMPI PUSH0 SWAP3 PUSH2 0x76F JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x79B JUMPI JUMPDEST PUSH2 0x786 DUP2 DUP4 PUSH2 0x45E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xDA JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xDA JUMPI SWAP1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x77C JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x7C9 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x270 JUMPI PUSH2 0x261 DUP2 DUP4 PUSH2 0x45E JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x71A JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 DUP16 DUP4 DUP12 SMOD 0x2C PUSH17 0xB516F68D61CBA8D45E5457802995051BDA 0xD 0xB4 0xD4 0xD9 0x2F 0x2F 0xE2 BLOBHASH PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"574:352:90:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21:80;574:352:90;1810:21:80;;;574:352:90;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;574:352:90;;;;;;;;;1348:29:80;574:352:90;;;;;;;;;;;;;-1:-1:-1;;574:352:90;;;;;;;;;;;;;;;1500:62:48;;:::i;:::-;574:352:90;;1738:24:49;574:352:90;;;1738:24:49;574:352:90;;;;1777:43:49;574:352:90;1777:43:49;;574:352:90;;;;;;;-1:-1:-1;;574:352:90;;;;;;;;1311:13:49;574:352:90;;;;;;;;;;;;;-1:-1:-1;;574:352:90;;;;;1525:73:32;;:::i;:::-;574:352:90;;;;;;;;-1:-1:-1;;574:352:90;;;;;;1810:21:80;574:352:90;;1810:21:80;;574:352:90;1810:21:80;;:5;;;574:352:90;1810:21:80;;;;;;;;;;574:352:90;1810:21:80;;;574:352:90;;;;;;;;1810:21:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;574:352:90;;;;;;;;;;;;;;-1:-1:-1;;574:352:90;;;;;;;;;;;;;;;1525:73:32;;:::i;:::-;574:352:90;;;2423:10:80;:21;2419:77;;2524:8;;;:::i;2419:77::-;2467:18;;574:352:90;2467:18:80;574:352:90;2467:18:80;574:352:90;;;;;;-1:-1:-1;;574:352:90;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;574:352:90;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;574:352:90;;;;;735:10:63;574:352:90;1311:13:49;574:352:90;;2339:24:49;2335:96;;2459:6;735:10:63;2459:6:49;:::i;2335:96::-;2386:34;574:352:90;2386:34:49;735:10:63;574:352:90;;;;2386:34:49;574:352:90;;;;;-1:-1:-1;;574:352:90;;;;;1500:62:48;;:::i;:::-;574:352:90;;;;2093:20:49;574:352:90;;2093:20:49;574:352:90;;;;;;;;;3052:40:48;;;;574:352:90;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:32;574:352:90;;;2303:50:32;;;2320:22;;574:352:90;;;;;;;2303:50:32;;;574:352:90;;;;;;;;;;;;;;;2293:61:32;;1931:430;:::o;574:352:90:-;;;;;;;;;;;;;;;;;;:::o;1796:162:48:-;574:352:90;1710:6:48;574:352:90;;735:10:63;1855:23:48;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:63;1901:40:48;574:352:90;;1710:6:48;1901:40;2011:153:49;574:352:90;;;2093:20:49;574:352:90;;2093:20:49;574:352:90;2093:20:49;574:352:90;;;;;;;;;;2093:20:49;574:352:90;;3052:40:48;2093:20:49;3052:40:48;;2011:153:49:o;1688:201:32:-;1798:33;1762:20;1774:7;;;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;;1774:7;1854:18;2546:382:80;;574:352:90;;;;;;;;;2721:15:80;;;2717:57;;574:352:90;;2858:21:80;574:352:90;2858:21:80;;;:5;;;:21;:5;;;574:352:90;2858:21:80;;;;;;;;;574:352:90;2858:21:80;;;2546:382;574:352:90;;;;;;2858:63:80;;;;;574:352:90;2858:63:80;;:21;:63;;574:352:90;;;;;2915:4:80;574:352:90;;;;;2858:63:80;;;;;;;574:352:90;2858:63:80;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;;;;;;;;;;;:::i;:::-;;;574:352:90;;;;;;;;;;;;2546:382:80;:::o;2858:63::-;;;;;;574:352:90;;;;;;;;;2858:21:80;574:352:90;2858:21:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","owner()":"8da5cb5b","pendingOwner()":"e30c3978","permissionedFunction()":"c1d08010","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"permissionedFunction\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"kind\":\"user\",\"methods\":{\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/OwnableAuthenticationMock.sol\":\"OwnableAuthenticationMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/test/OwnableAuthenticationMock.sol\":{\"keccak256\":\"0x9db9a3a18520c17880fbe2d49b9592d77e6412b200ebfc11d2dd84c5b326bf89\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e4a1ce6e79220ca4f904fbe9a42aca464b4fac8cfdaecc32bbd922bf0173e9ab\",\"dweb:/ipfs/QmZ3wFHp7EGB6AmD8FsgpsgEUtpAbSJB5EskETF9GnPe7S\"]}},\"version\":1}"}},"contracts/test/PoolHelperMock.sol":{"PoolHelperMock":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"InvalidPoolSetId","type":"error"},{"inputs":[],"name":"InvalidPoolSetManager","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAlreadyInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolNotInSet","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"poolSetManager","type":"address"}],"name":"PoolSetManagerNotUnique","type":"error"},{"inputs":[],"name":"SenderIsNotPoolSetManager","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolAddedToSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"PoolRemovedFromSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"initialManager","type":"address"}],"name":"PoolSetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"PoolSetDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolSetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"PoolSetOwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"addPoolsToSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"},{"internalType":"address[]","name":"newPools","type":"address[]"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initialManager","type":"address"}],"name":"createPoolSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"destroyPoolSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"forceTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getAllPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getManagerForPoolSet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextPoolSetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"getPoolCountForSet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolSetIdForCaller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"getPoolSetIdForManager","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getPoolsInSet","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isPoolInSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"}],"name":"isValidPoolSetId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolSetId","type":"uint256"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"removePoolsFromSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferPoolSetOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461011757601f61184b38819003918201601f19168301916001600160401b0383118484101761011b5780849260409485528339810103126101175780516001600160a01b03918282169081830361011757602001518381168091036101175780156101045760018060a01b0319938460015416600155815f54958616175f5560405194167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a330608052156100f55760a052600160025561171b90816101308239608051816110f0015260a05181818161015001528181610280015281816104e301528181610af601526114b00152f35b630647140b60e51b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f3560e01c908163182551da14610e72578163255dae4114610e3357816325c427ed14610df15781632da55a1d14610d2a5781633700f98714610c465781633e035f9b14610a6f57816362d5346214610a3f578163715018a6146109ba57816379ba5097146109575781637c1ec4601461080b578163851c1bb3146107c25781638c60ebd01461067c5781638da5cb5b1461064957816394fc4058146105c9578163a89b112814610558578163aaabadc51461048f578163c482e82214610471578163ce998aba1461044d578163e30c397814610419578163e909c19b146103dc578163ebf3a8d014610242578163f167a1e61461020557508063f2fde38b146101785763fbfa77cf14610125575f80fd5b34610174575f600319360112610174576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b3461017457602060031936011261017457610191610eda565b61019961139b565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b823461017457602060031936011261017457602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f2054169051908152f35b8234610174579061025236611000565b61025d93919361121e565b610266846111b9565b80519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116925f5b8681106102ad57005b826102b88284611084565b511686517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156103d2575f916103a5575b501561037b579060058b9392845f525261031a828a5f2061168d565b1561034f575090600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a3016102a4565b90867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b5090857f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b6103c59150823d84116103cb575b6103bd8183610efd565b8101906111a1565b8c6102fe565b503d6103b3565b8a513d5f823e3d90fd5b8234610174576020600319360112610174576020906104126103fc610eda565b61040461121e565b61040d81611283565b611306565b9051908152f35b8234610174575f6003193601126101745760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b8234610174575f60031936011261017457602091335f528252805f20549051908152f35b8234610174575f600319360112610174576020906002549051908152f35b905034610174575f6003193601126101745773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561054e57926020935f9361051f575b505191168152f35b610540919350843d8611610547575b6105388183610efd565b810190611175565b915f610517565b503d61052e565b83513d5f823e3d90fd5b3461017457602060031936011261017457610571610eda565b61057961121e565b73ffffffffffffffffffffffffffffffffffffffff5f541633146105a2576105a0906113e7565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90503461017457602090602060031936011261017457356105e9816111b9565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b8282106106325761062e8686610624828b0383610efd565b5191829182611033565b0390f35b83548752958601956001938401939091019061060c565b8234610174575f6003193601126101745760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b90503461017457606060031936011261017457803590602435604435916106a2846111b9565b835f526005906020906005602052865f20548585119081156107b8575b81156107ad575b5061078257506106d6838561113b565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061071961070488610f6b565b976107118a51998a610efd565b808952610f6b565b01366020880137835b8581106107365787518061062e8982611033565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff610760828b5f20611584565b90549060031b1c1661077b610775888461113b565b8a611084565b5201610722565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b90508410155f6106c6565b80871191506106bf565b9050346101745760206003193601126101745735907fffffffff0000000000000000000000000000000000000000000000000000000082168203610174576104126020926110c5565b90503461017457602091826003193601126101745781359161082b61121e565b610834836111b9565b825f5260058452815f208054805b6108f7575050825f5260058452815f208054905f8155816108da575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b8181101561085e575f81556001016108e4565b5f19018061095173ffffffffffffffffffffffffffffffffffffffff61091d8386611584565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a384611599565b50610842565b34610174575f600319360112610174573373ffffffffffffffffffffffffffffffffffffffff600154160361098f576105a0336113e7565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b34610174575f600319360112610174576109d261139b565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b82346101745760206003193601126101745760209135610a5e816111b9565b5f5260058252805f20549051908152f35b8234610174578060031936011261017457610a88610eda565b60249260243567ffffffffffffffff811161017457610aad610ab69136908401610f83565b9261040461121e565b938251610ac8575b6020858551908152f35b610ad392919261121e565b610adc856111b9565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610b2a5750505050610abe565b82610b358284611084565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610c3c575f91610c1f575b5015610bf5579060058b92835f5252610b94818b5f2061168d565b15610bc85790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610b1a565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610c369150823d84116103cb576103bd8183610efd565b8c610b79565b8b513d5f823e3d90fd5b823461017457602060031936011261017457610c60610eda565b90610c6a82611283565b335f5282602052805f2054908115610d0357819293825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b837fbcc08f74000000000000000000000000000000000000000000000000000000005f525ffd5b823461017457610d3936611000565b91610d4261121e565b610d4b826111b9565b8251925f5b848110610d5957005b73ffffffffffffffffffffffffffffffffffffffff610d788284611084565b5116845f526005602052610d8e81855f20611599565b15610dc25790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610d50565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b82346101745760206003193601126101745760209173ffffffffffffffffffffffffffffffffffffffff610e23610eda565b165f528252805f20549051908152f35b823461017457602060031936011261017457602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b8234610174578060031936011261017457602090610ed1610e91610eda565b602435610e9d816111b9565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361017457565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610f3e57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111610f3e5760051b60200190565b9080601f83011215610174576020908235610f9d81610f6b565b93610fab6040519586610efd565b81855260208086019260051b82010192831161017457602001905b828210610fd4575050505090565b813573ffffffffffffffffffffffffffffffffffffffff81168103610174578152908301908301610fc6565b90604060031983011261017457600435916024359067ffffffffffffffff82116101745761103091600401610f83565b90565b60209060206040818301928281528551809452019301915f5b82811061105a575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161104c565b80518210156110985760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff821117610f3e5760405251902090565b9190820391821161114857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90816020910312610174575173ffffffffffffffffffffffffffffffffffffffff811681036101745790565b90816020910312610174575180151581036101745790565b801580156111f4575b6111c95750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f205416156111c2565b61125461124d7fffffffff000000000000000000000000000000000000000000000000000000005f35166110c5565b3390611459565b1561125b57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff1680156112de57805f52600460205260405f20546112b35750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611148576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b73ffffffffffffffffffffffffffffffffffffffff5f541633036113bb57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b9073ffffffffffffffffffffffffffffffffffffffff9081805f5416911690811461157c57604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa93841561154d5785935f95611558575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa91821561154d575f9261153757505090565b6110309250803d106103cb576103bd8183610efd565b6040513d5f823e3d90fd5b60649291955061157490853d8711610547576105388183610efd565b9490916114e2565b505050600190565b8054821015611098575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f14611685575f1991828101818111611148578254908482019182116111485781810361163a575b5050508054801561160d578201916115ef8383611584565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61167061164a61165a9386611584565b90549060031b1c92839286611584565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806115d7565b505050505f90565b5f8281526001820160205260409020546116df5780549068010000000000000000821015610f3e57826116ca61165a846001809601855584611584565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220078c43f78a049e337a1bfb876453ae4c5e5eaabdbe187ce8d872af8dbfe88c5364736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x117 JUMPI PUSH1 0x1F PUSH2 0x184B CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x11B JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x117 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP1 DUP2 DUP4 SUB PUSH2 0x117 JUMPI PUSH1 0x20 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x117 JUMPI DUP1 ISZERO PUSH2 0x104 JUMPI PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT SWAP4 DUP5 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP2 PUSH0 SLOAD SWAP6 DUP7 AND OR PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP5 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 ADDRESS PUSH1 0x80 MSTORE ISZERO PUSH2 0xF5 JUMPI PUSH1 0xA0 MSTORE PUSH1 0x1 PUSH1 0x2 SSTORE PUSH2 0x171B SWAP1 DUP2 PUSH2 0x130 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x10F0 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x150 ADD MSTORE DUP2 DUP2 PUSH2 0x280 ADD MSTORE DUP2 DUP2 PUSH2 0x4E3 ADD MSTORE DUP2 DUP2 PUSH2 0xAF6 ADD MSTORE PUSH2 0x14B0 ADD MSTORE RETURN JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x182551DA EQ PUSH2 0xE72 JUMPI DUP2 PUSH4 0x255DAE41 EQ PUSH2 0xE33 JUMPI DUP2 PUSH4 0x25C427ED EQ PUSH2 0xDF1 JUMPI DUP2 PUSH4 0x2DA55A1D EQ PUSH2 0xD2A JUMPI DUP2 PUSH4 0x3700F987 EQ PUSH2 0xC46 JUMPI DUP2 PUSH4 0x3E035F9B EQ PUSH2 0xA6F JUMPI DUP2 PUSH4 0x62D53462 EQ PUSH2 0xA3F JUMPI DUP2 PUSH4 0x715018A6 EQ PUSH2 0x9BA JUMPI DUP2 PUSH4 0x79BA5097 EQ PUSH2 0x957 JUMPI DUP2 PUSH4 0x7C1EC460 EQ PUSH2 0x80B JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x7C2 JUMPI DUP2 PUSH4 0x8C60EBD0 EQ PUSH2 0x67C JUMPI DUP2 PUSH4 0x8DA5CB5B EQ PUSH2 0x649 JUMPI DUP2 PUSH4 0x94FC4058 EQ PUSH2 0x5C9 JUMPI DUP2 PUSH4 0xA89B1128 EQ PUSH2 0x558 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x48F JUMPI DUP2 PUSH4 0xC482E822 EQ PUSH2 0x471 JUMPI DUP2 PUSH4 0xCE998ABA EQ PUSH2 0x44D JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x419 JUMPI DUP2 PUSH4 0xE909C19B EQ PUSH2 0x3DC JUMPI DUP2 PUSH4 0xEBF3A8D0 EQ PUSH2 0x242 JUMPI DUP2 PUSH4 0xF167A1E6 EQ PUSH2 0x205 JUMPI POP DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x178 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x125 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x174 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH2 0x191 PUSH2 0xEDA JUMP JUMPDEST PUSH2 0x199 PUSH2 0x139B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI SWAP1 PUSH2 0x252 CALLDATASIZE PUSH2 0x1000 JUMP JUMPDEST PUSH2 0x25D SWAP4 SWAP2 SWAP4 PUSH2 0x121E JUMP JUMPDEST PUSH2 0x266 DUP5 PUSH2 0x11B9 JUMP JUMPDEST DUP1 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x2AD JUMPI STOP JUMPDEST DUP3 PUSH2 0x2B8 DUP3 DUP5 PUSH2 0x1084 JUMP JUMPDEST MLOAD AND DUP7 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3D2 JUMPI PUSH0 SWAP2 PUSH2 0x3A5 JUMPI JUMPDEST POP ISZERO PUSH2 0x37B JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP4 SWAP3 DUP5 PUSH0 MSTORE MSTORE PUSH2 0x31A DUP3 DUP11 PUSH0 KECCAK256 PUSH2 0x168D JUMP JUMPDEST ISZERO PUSH2 0x34F JUMPI POP SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0x2A4 JUMP JUMPDEST SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x3C5 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3CB JUMPI JUMPDEST PUSH2 0x3BD DUP2 DUP4 PUSH2 0xEFD JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x11A1 JUMP JUMPDEST DUP13 PUSH2 0x2FE JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3B3 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x412 PUSH2 0x3FC PUSH2 0xEDA JUMP JUMPDEST PUSH2 0x404 PUSH2 0x121E JUMP JUMPDEST PUSH2 0x40D DUP2 PUSH2 0x1283 JUMP JUMPDEST PUSH2 0x1306 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP2 CALLER PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x174 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x54E JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x51F JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x540 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x547 JUMPI JUMPDEST PUSH2 0x538 DUP2 DUP4 PUSH2 0xEFD JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1175 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x517 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x52E JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH2 0x571 PUSH2 0xEDA JUMP JUMPDEST PUSH2 0x579 PUSH2 0x121E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x5A2 JUMPI PUSH2 0x5A0 SWAP1 PUSH2 0x13E7 JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI CALLDATALOAD PUSH2 0x5E9 DUP2 PUSH2 0x11B9 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x632 JUMPI PUSH2 0x62E DUP7 DUP7 PUSH2 0x624 DUP3 DUP12 SUB DUP4 PUSH2 0xEFD JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1033 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x60C JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x6A2 DUP5 PUSH2 0x11B9 JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x7B8 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x7AD JUMPI JUMPDEST POP PUSH2 0x782 JUMPI POP PUSH2 0x6D6 DUP4 DUP6 PUSH2 0x113B JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x719 PUSH2 0x704 DUP9 PUSH2 0xF6B JUMP JUMPDEST SWAP8 PUSH2 0x711 DUP11 MLOAD SWAP10 DUP11 PUSH2 0xEFD JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0xF6B JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x736 JUMPI DUP8 MLOAD DUP1 PUSH2 0x62E DUP10 DUP3 PUSH2 0x1033 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x760 DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x1584 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x77B PUSH2 0x775 DUP9 DUP5 PUSH2 0x113B JUMP JUMPDEST DUP11 PUSH2 0x1084 JUMP JUMPDEST MSTORE ADD PUSH2 0x722 JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO PUSH0 PUSH2 0x6C6 JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x6BF JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x174 JUMPI PUSH2 0x412 PUSH1 0x20 SWAP3 PUSH2 0x10C5 JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0x82B PUSH2 0x121E JUMP JUMPDEST PUSH2 0x834 DUP4 PUSH2 0x11B9 JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0x8F7 JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0x8DA JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x85E JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x8E4 JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0x951 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x91D DUP4 DUP7 PUSH2 0x1584 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x1599 JUMP JUMPDEST POP PUSH2 0x842 JUMP JUMPDEST CALLVALUE PUSH2 0x174 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0x98F JUMPI PUSH2 0x5A0 CALLER PUSH2 0x13E7 JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x174 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH2 0x9D2 PUSH2 0x139B JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xA5E DUP2 PUSH2 0x11B9 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH2 0xA88 PUSH2 0xEDA JUMP JUMPDEST PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x174 JUMPI PUSH2 0xAAD PUSH2 0xAB6 SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xF83 JUMP JUMPDEST SWAP3 PUSH2 0x404 PUSH2 0x121E JUMP JUMPDEST SWAP4 DUP3 MLOAD PUSH2 0xAC8 JUMPI JUMPDEST PUSH1 0x20 DUP6 DUP6 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xAD3 SWAP3 SWAP2 SWAP3 PUSH2 0x121E JUMP JUMPDEST PUSH2 0xADC DUP6 PUSH2 0x11B9 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0xB2A JUMPI POP POP POP POP PUSH2 0xABE JUMP JUMPDEST DUP3 PUSH2 0xB35 DUP3 DUP5 PUSH2 0x1084 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP10 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xC3C JUMPI PUSH0 SWAP2 PUSH2 0xC1F JUMPI JUMPDEST POP ISZERO PUSH2 0xBF5 JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP3 DUP4 PUSH0 MSTORE MSTORE PUSH2 0xB94 DUP2 DUP12 PUSH0 KECCAK256 PUSH2 0x168D JUMP JUMPDEST ISZERO PUSH2 0xBC8 JUMPI SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xB1A JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xC36 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3CB JUMPI PUSH2 0x3BD DUP2 DUP4 PUSH2 0xEFD JUMP JUMPDEST DUP13 PUSH2 0xB79 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH2 0xC60 PUSH2 0xEDA JUMP JUMPDEST SWAP1 PUSH2 0xC6A DUP3 PUSH2 0x1283 JUMP JUMPDEST CALLER PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0xD03 JUMPI DUP2 SWAP3 SWAP4 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST DUP4 PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH2 0xD39 CALLDATASIZE PUSH2 0x1000 JUMP JUMPDEST SWAP2 PUSH2 0xD42 PUSH2 0x121E JUMP JUMPDEST PUSH2 0xD4B DUP3 PUSH2 0x11B9 JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xD59 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xD78 DUP3 DUP5 PUSH2 0x1084 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0xD8E DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x1599 JUMP JUMPDEST ISZERO PUSH2 0xDC2 JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0xD50 JUMP JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xE23 PUSH2 0xEDA JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xED1 PUSH2 0xE91 PUSH2 0xEDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0xE9D DUP2 PUSH2 0x11B9 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x174 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF3E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF3E JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x174 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0xF9D DUP2 PUSH2 0xF6B JUMP JUMPDEST SWAP4 PUSH2 0xFAB PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xEFD JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x174 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xFD4 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x174 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xFC6 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x174 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x174 JUMPI PUSH2 0x1030 SWAP2 PUSH1 0x4 ADD PUSH2 0xF83 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x105A JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x104C JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1098 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF3E JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1148 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x174 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x174 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x174 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x174 JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x11F4 JUMPI JUMPDEST PUSH2 0x11C9 JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x11C2 JUMP JUMPDEST PUSH2 0x1254 PUSH2 0x124D PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x10C5 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x1459 JUMP JUMPDEST ISZERO PUSH2 0x125B JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x12DE JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x12B3 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x1148 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x13BB JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x157C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x154D JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x1558 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x154D JUMPI PUSH0 SWAP3 PUSH2 0x1537 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1030 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x3CB JUMPI PUSH2 0x3BD DUP2 DUP4 PUSH2 0xEFD JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x1574 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x547 JUMPI PUSH2 0x538 DUP2 DUP4 PUSH2 0xEFD JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x14E2 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x1098 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x1685 JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x1148 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x1148 JUMPI DUP2 DUP2 SUB PUSH2 0x163A JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x160D JUMPI DUP3 ADD SWAP2 PUSH2 0x15EF DUP4 DUP4 PUSH2 0x1584 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x1670 PUSH2 0x164A PUSH2 0x165A SWAP4 DUP7 PUSH2 0x1584 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x1584 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x15D7 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x16DF JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0xF3E JUMPI DUP3 PUSH2 0x16CA PUSH2 0x165A DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x1584 JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SMOD DUP13 NUMBER 0xF7 DUP11 DIV SWAP15 CALLER PUSH27 0x1BFB876453AE4C5E5EAABDBE187CE8D872AF8DBFE88C5364736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"216:202:91:-:0;;;;;;;;;;;;;-1:-1:-1;;216:202:91;;;;-1:-1:-1;;;;;216:202:91;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;216:202:91;;;;;;;;;;;;;;;;;;;;;1273:26:48;;1269:95;;216:202:91;;;;;;;;2093:20:49;216:202:91;;2093:20:49;216:202:91;;-1:-1:-1;216:202:91;;;;;-1:-1:-1;216:202:91;;;;;3052:40:48;-1:-1:-1;3052:40:48;;1524:4:80;1347:46:32;;1548:29:80;1544:80;;1634:14;;2093:20:49;853:1:81;216:202:91;;;;;;;1347:46:32;216:202:91;;;;;1634:14:80;216:202:91;;;;;;;;;;;;;;;;;;;;;;;;;;1544:80:80;1600:13;;;-1:-1:-1;1600:13:80;;-1:-1:-1;1600:13:80;1269:95:48;1322:31;;;-1:-1:-1;1322:31:48;-1:-1:-1;1322:31:48;216:202:91;;-1:-1:-1;1322:31:48;216:202:91;-1:-1:-1;216:202:91;;;;;;-1:-1:-1;216:202:91;;;;;-1:-1:-1;216:202:91"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":3802,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_array_address_dyn":{"entryPoint":3971,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":4513,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":4469,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_array_address_dyn":{"entryPoint":4096,"id":null,"parameterSlots":1,"returnSlots":2},"abi_encode_array_address_dyn":{"entryPoint":4147,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":3947,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":4411,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":3837,"id":null,"parameterSlots":2,"returnSlots":0},"fun_add":{"entryPoint":5773,"id":16131,"parameterSlots":2,"returnSlots":1},"fun_authenticateCaller":{"entryPoint":4638,"id":4338,"parameterSlots":0,"returnSlots":0},"fun_canPerform":{"entryPoint":5209,"id":20311,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":5019,"id":9405,"parameterSlots":0,"returnSlots":0},"fun_contains":{"entryPoint":null,"id":16277,"parameterSlots":2,"returnSlots":1},"fun_createPoolSet":{"entryPoint":4870,"id":20479,"parameterSlots":1,"returnSlots":1},"fun_ensureValidManager":{"entryPoint":4739,"id":20986,"parameterSlots":1,"returnSlots":0},"fun_ensureValidPoolSet":{"entryPoint":4537,"id":21040,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":4293,"id":4356,"parameterSlots":1,"returnSlots":1},"fun_remove":{"entryPoint":5529,"id":16215,"parameterSlots":2,"returnSlots":1},"fun_transferOwnership":{"entryPoint":5095,"id":9529,"parameterSlots":1,"returnSlots":0},"memory_array_index_access_address_dyn":{"entryPoint":4228,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_bytes32_dyn":{"entryPoint":5508,"id":null,"parameterSlots":2,"returnSlots":2},"update_byte_slice_dynamic32":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"4296":[{"length":32,"start":4336}],"20200":[{"length":32,"start":336},{"length":32,"start":640},{"length":32,"start":1251},{"length":32,"start":2806},{"length":32,"start":5296}]},"linkReferences":{},"object":"604060808152600480361015610013575f80fd5b5f3560e01c908163182551da14610e72578163255dae4114610e3357816325c427ed14610df15781632da55a1d14610d2a5781633700f98714610c465781633e035f9b14610a6f57816362d5346214610a3f578163715018a6146109ba57816379ba5097146109575781637c1ec4601461080b578163851c1bb3146107c25781638c60ebd01461067c5781638da5cb5b1461064957816394fc4058146105c9578163a89b112814610558578163aaabadc51461048f578163c482e82214610471578163ce998aba1461044d578163e30c397814610419578163e909c19b146103dc578163ebf3a8d014610242578163f167a1e61461020557508063f2fde38b146101785763fbfa77cf14610125575f80fd5b34610174575f600319360112610174576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b3461017457602060031936011261017457610191610eda565b61019961139b565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b823461017457602060031936011261017457602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f2054169051908152f35b8234610174579061025236611000565b61025d93919361121e565b610266846111b9565b80519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116925f5b8681106102ad57005b826102b88284611084565b511686517fc673bdaf00000000000000000000000000000000000000000000000000000000815281868201526020602491818184818c5afa9081156103d2575f916103a5575b501561037b579060058b9392845f525261031a828a5f2061168d565b1561034f575090600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a3016102a4565b90867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b5090857f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b6103c59150823d84116103cb575b6103bd8183610efd565b8101906111a1565b8c6102fe565b503d6103b3565b8a513d5f823e3d90fd5b8234610174576020600319360112610174576020906104126103fc610eda565b61040461121e565b61040d81611283565b611306565b9051908152f35b8234610174575f6003193601126101745760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b8234610174575f60031936011261017457602091335f528252805f20549051908152f35b8234610174575f600319360112610174576020906002549051908152f35b905034610174575f6003193601126101745773ffffffffffffffffffffffffffffffffffffffff6020835180937faaabadc500000000000000000000000000000000000000000000000000000000825281847f0000000000000000000000000000000000000000000000000000000000000000165afa91821561054e57926020935f9361051f575b505191168152f35b610540919350843d8611610547575b6105388183610efd565b810190611175565b915f610517565b503d61052e565b83513d5f823e3d90fd5b3461017457602060031936011261017457610571610eda565b61057961121e565b73ffffffffffffffffffffffffffffffffffffffff5f541633146105a2576105a0906113e7565b005b507f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90503461017457602090602060031936011261017457356105e9816111b9565b5f526005602052815f209180519182602085549182815201945f5260205f20915f905b8282106106325761062e8686610624828b0383610efd565b5191829182611033565b0390f35b83548752958601956001938401939091019061060c565b8234610174575f6003193601126101745760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b90503461017457606060031936011261017457803590602435604435916106a2846111b9565b835f526005906020906005602052865f20548585119081156107b8575b81156107ad575b5061078257506106d6838561113b565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061071961070488610f6b565b976107118a51998a610efd565b808952610f6b565b01366020880137835b8581106107365787518061062e8982611033565b600190825f5284845273ffffffffffffffffffffffffffffffffffffffff610760828b5f20611584565b90549060031b1c1661077b610775888461113b565b8a611084565b5201610722565b85907f44945fcc000000000000000000000000000000000000000000000000000000005f525260245ffd5b90508410155f6106c6565b80871191506106bf565b9050346101745760206003193601126101745735907fffffffff0000000000000000000000000000000000000000000000000000000082168203610174576104126020926110c5565b90503461017457602091826003193601126101745781359161082b61121e565b610834836111b9565b825f5260058452815f208054805b6108f7575050825f5260058452815f208054905f8155816108da575b5050905f9183835260038552818320948554957fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff881697169055858452528120557f79baa5e19a392c29299f3a0871dfaa49cb3bcce18826d5d6df199c9e0846a6c05f80a3005b5f52845f20908101905b8181101561085e575f81556001016108e4565b5f19018061095173ffffffffffffffffffffffffffffffffffffffff61091d8386611584565b90549060031b1c1687817fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a384611599565b50610842565b34610174575f600319360112610174573373ffffffffffffffffffffffffffffffffffffffff600154160361098f576105a0336113e7565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f5233905260245ffd5b34610174575f600319360112610174576109d261139b565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff0000000000000000000000000000000000000000806001541660015582549081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b82346101745760206003193601126101745760209135610a5e816111b9565b5f5260058252805f20549051908152f35b8234610174578060031936011261017457610a88610eda565b60249260243567ffffffffffffffff811161017457610aad610ab69136908401610f83565b9261040461121e565b938251610ac8575b6020858551908152f35b610ad392919261121e565b610adc856111b9565b81519273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116935f5b868110610b2a5750505050610abe565b82610b358284611084565b511688517fc673bdaf0000000000000000000000000000000000000000000000000000000081528186820152602090818189818c5afa908115610c3c575f91610c1f575b5015610bf5579060058b92835f5252610b94818b5f2061168d565b15610bc85790600192917f5cda7ebcbcc755c3ef1c6cf035a6e26bf48b6421f72f932756d942c896287b695f80a301610b1a565b8690867f5a17aa8d000000000000000000000000000000000000000000000000000000005f52525260445ffd5b8682877f9e51bd5c000000000000000000000000000000000000000000000000000000005f52525ffd5b610c369150823d84116103cb576103bd8183610efd565b8c610b79565b8b513d5f823e3d90fd5b823461017457602060031936011261017457610c60610eda565b90610c6a82611283565b335f5282602052805f2054908115610d0357819293825f52600360205273ffffffffffffffffffffffffffffffffffffffff825f20951694857fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055335f526020525f81812055835f525f205533907f8a5583d08cb82be0e3e26d52a1941f10fe2fdd1bb7cc5e085a0ba35b3d7972055f80a4005b837fbcc08f74000000000000000000000000000000000000000000000000000000005f525ffd5b823461017457610d3936611000565b91610d4261121e565b610d4b826111b9565b8251925f5b848110610d5957005b73ffffffffffffffffffffffffffffffffffffffff610d788284611084565b5116845f526005602052610d8e81855f20611599565b15610dc25790846001927fe632b6be71c5c7f5d98ba00da8b648a72422f750973138bc6474de6fe711b66e5f80a301610d50565b8490877f80145d72000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b82346101745760206003193601126101745760209173ffffffffffffffffffffffffffffffffffffffff610e23610eda565b165f528252805f20549051908152f35b823461017457602060031936011261017457602091355f526003825273ffffffffffffffffffffffffffffffffffffffff815f20541615159051908152f35b8234610174578060031936011261017457602090610ed1610e91610eda565b602435610e9d816111b9565b5f526005845273ffffffffffffffffffffffffffffffffffffffff835f209116906001915f520160205260405f2054151590565b90519015158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361017457565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610f3e57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111610f3e5760051b60200190565b9080601f83011215610174576020908235610f9d81610f6b565b93610fab6040519586610efd565b81855260208086019260051b82010192831161017457602001905b828210610fd4575050505090565b813573ffffffffffffffffffffffffffffffffffffffff81168103610174578152908301908301610fc6565b90604060031983011261017457600435916024359067ffffffffffffffff82116101745761103091600401610f83565b90565b60209060206040818301928281528551809452019301915f5b82811061105a575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161104c565b80518210156110985760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff821117610f3e5760405251902090565b9190820391821161114857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90816020910312610174575173ffffffffffffffffffffffffffffffffffffffff811681036101745790565b90816020910312610174575180151581036101745790565b801580156111f4575b6111c95750565b7f98592ddb000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f205416156111c2565b61125461124d7fffffffff000000000000000000000000000000000000000000000000000000005f35166110c5565b3390611459565b1561125b57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff1680156112de57805f52600460205260405f20546112b35750565b7f2c35aa96000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2de5256e000000000000000000000000000000000000000000000000000000005f5260045ffd5b90600254915f198314611148576001830160025582805f52600360205273ffffffffffffffffffffffffffffffffffffffff60405f20921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055815f5260046020528060405f20557fdc91443db112ae1beb8fab12e3fa2dedea028e9eb6a8e92776a1aa2343007be25f80a3565b73ffffffffffffffffffffffffffffffffffffffff5f541633036113bb57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7fffffffffffffffffffffffff00000000000000000000000000000000000000009081600154166001555f5473ffffffffffffffffffffffffffffffffffffffff80921680938216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b9073ffffffffffffffffffffffffffffffffffffffff9081805f5416911690811461157c57604051907faaabadc50000000000000000000000000000000000000000000000000000000082526020938483600481877f0000000000000000000000000000000000000000000000000000000000000000165afa93841561154d5785935f95611558575b509060649160405195869485937f9be2a88400000000000000000000000000000000000000000000000000000000855260048501526024840152306044840152165afa91821561154d575f9261153757505090565b6110309250803d106103cb576103bd8183610efd565b6040513d5f823e3d90fd5b60649291955061157490853d8711610547576105388183610efd565b9490916114e2565b505050600190565b8054821015611098575f5260205f2001905f90565b906001820191815f528260205260405f2054908115155f14611685575f1991828101818111611148578254908482019182116111485781810361163a575b5050508054801561160d578201916115ef8383611584565b909182549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b61167061164a61165a9386611584565b90549060031b1c92839286611584565b81939154905f199060031b92831b921b19161790565b90555f528460205260405f20555f80806115d7565b505050505f90565b5f8281526001820160205260409020546116df5780549068010000000000000000821015610f3e57826116ca61165a846001809601855584611584565b90558054925f520160205260405f2055600190565b50505f9056fea2646970667358221220078c43f78a049e337a1bfb876453ae4c5e5eaabdbe187ce8d872af8dbfe88c5364736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x182551DA EQ PUSH2 0xE72 JUMPI DUP2 PUSH4 0x255DAE41 EQ PUSH2 0xE33 JUMPI DUP2 PUSH4 0x25C427ED EQ PUSH2 0xDF1 JUMPI DUP2 PUSH4 0x2DA55A1D EQ PUSH2 0xD2A JUMPI DUP2 PUSH4 0x3700F987 EQ PUSH2 0xC46 JUMPI DUP2 PUSH4 0x3E035F9B EQ PUSH2 0xA6F JUMPI DUP2 PUSH4 0x62D53462 EQ PUSH2 0xA3F JUMPI DUP2 PUSH4 0x715018A6 EQ PUSH2 0x9BA JUMPI DUP2 PUSH4 0x79BA5097 EQ PUSH2 0x957 JUMPI DUP2 PUSH4 0x7C1EC460 EQ PUSH2 0x80B JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x7C2 JUMPI DUP2 PUSH4 0x8C60EBD0 EQ PUSH2 0x67C JUMPI DUP2 PUSH4 0x8DA5CB5B EQ PUSH2 0x649 JUMPI DUP2 PUSH4 0x94FC4058 EQ PUSH2 0x5C9 JUMPI DUP2 PUSH4 0xA89B1128 EQ PUSH2 0x558 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0x48F JUMPI DUP2 PUSH4 0xC482E822 EQ PUSH2 0x471 JUMPI DUP2 PUSH4 0xCE998ABA EQ PUSH2 0x44D JUMPI DUP2 PUSH4 0xE30C3978 EQ PUSH2 0x419 JUMPI DUP2 PUSH4 0xE909C19B EQ PUSH2 0x3DC JUMPI DUP2 PUSH4 0xEBF3A8D0 EQ PUSH2 0x242 JUMPI DUP2 PUSH4 0xF167A1E6 EQ PUSH2 0x205 JUMPI POP DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x178 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x125 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x174 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH2 0x191 PUSH2 0xEDA JUMP JUMPDEST PUSH2 0x199 PUSH2 0x139B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x1 SLOAD AND OR PUSH1 0x1 SSTORE PUSH0 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI SWAP1 PUSH2 0x252 CALLDATASIZE PUSH2 0x1000 JUMP JUMPDEST PUSH2 0x25D SWAP4 SWAP2 SWAP4 PUSH2 0x121E JUMP JUMPDEST PUSH2 0x266 DUP5 PUSH2 0x11B9 JUMP JUMPDEST DUP1 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP3 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x2AD JUMPI STOP JUMPDEST DUP3 PUSH2 0x2B8 DUP3 DUP5 PUSH2 0x1084 JUMP JUMPDEST MLOAD AND DUP7 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x24 SWAP2 DUP2 DUP2 DUP5 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3D2 JUMPI PUSH0 SWAP2 PUSH2 0x3A5 JUMPI JUMPDEST POP ISZERO PUSH2 0x37B JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP4 SWAP3 DUP5 PUSH0 MSTORE MSTORE PUSH2 0x31A DUP3 DUP11 PUSH0 KECCAK256 PUSH2 0x168D JUMP JUMPDEST ISZERO PUSH2 0x34F JUMPI POP SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0x2A4 JUMP JUMPDEST SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x3C5 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3CB JUMPI JUMPDEST PUSH2 0x3BD DUP2 DUP4 PUSH2 0xEFD JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x11A1 JUMP JUMPDEST DUP13 PUSH2 0x2FE JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3B3 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x412 PUSH2 0x3FC PUSH2 0xEDA JUMP JUMPDEST PUSH2 0x404 PUSH2 0x121E JUMP JUMPDEST PUSH2 0x40D DUP2 PUSH2 0x1283 JUMP JUMPDEST PUSH2 0x1306 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP2 CALLER PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x174 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 MLOAD DUP1 SWAP4 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x54E JUMPI SWAP3 PUSH1 0x20 SWAP4 PUSH0 SWAP4 PUSH2 0x51F JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x540 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x547 JUMPI JUMPDEST PUSH2 0x538 DUP2 DUP4 PUSH2 0xEFD JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1175 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x517 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x52E JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH2 0x571 PUSH2 0xEDA JUMP JUMPDEST PUSH2 0x579 PUSH2 0x121E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER EQ PUSH2 0x5A2 JUMPI PUSH2 0x5A0 SWAP1 PUSH2 0x13E7 JUMP JUMPDEST STOP JUMPDEST POP PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI CALLDATALOAD PUSH2 0x5E9 DUP2 PUSH2 0x11B9 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SWAP2 DUP1 MLOAD SWAP2 DUP3 PUSH1 0x20 DUP6 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x632 JUMPI PUSH2 0x62E DUP7 DUP7 PUSH2 0x624 DUP3 DUP12 SUB DUP4 PUSH2 0xEFD JUMP JUMPDEST MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1033 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP4 SLOAD DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x60C JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x6A2 DUP5 PUSH2 0x11B9 JUMP JUMPDEST DUP4 PUSH0 MSTORE PUSH1 0x5 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SLOAD DUP6 DUP6 GT SWAP1 DUP2 ISZERO PUSH2 0x7B8 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x7AD JUMPI JUMPDEST POP PUSH2 0x782 JUMPI POP PUSH2 0x6D6 DUP4 DUP6 PUSH2 0x113B JUMP JUMPDEST SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x719 PUSH2 0x704 DUP9 PUSH2 0xF6B JUMP JUMPDEST SWAP8 PUSH2 0x711 DUP11 MLOAD SWAP10 DUP11 PUSH2 0xEFD JUMP JUMPDEST DUP1 DUP10 MSTORE PUSH2 0xF6B JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP9 ADD CALLDATACOPY DUP4 JUMPDEST DUP6 DUP2 LT PUSH2 0x736 JUMPI DUP8 MLOAD DUP1 PUSH2 0x62E DUP10 DUP3 PUSH2 0x1033 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x760 DUP3 DUP12 PUSH0 KECCAK256 PUSH2 0x1584 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x77B PUSH2 0x775 DUP9 DUP5 PUSH2 0x113B JUMP JUMPDEST DUP11 PUSH2 0x1084 JUMP JUMPDEST MSTORE ADD PUSH2 0x722 JUMP JUMPDEST DUP6 SWAP1 PUSH32 0x44945FCC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 LT ISZERO PUSH0 PUSH2 0x6C6 JUMP JUMPDEST DUP1 DUP8 GT SWAP2 POP PUSH2 0x6BF JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x174 JUMPI PUSH2 0x412 PUSH1 0x20 SWAP3 PUSH2 0x10C5 JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH2 0x82B PUSH2 0x121E JUMP JUMPDEST PUSH2 0x834 DUP4 PUSH2 0x11B9 JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD DUP1 JUMPDEST PUSH2 0x8F7 JUMPI POP POP DUP3 PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE DUP2 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH0 DUP2 SSTORE DUP2 PUSH2 0x8DA JUMPI JUMPDEST POP POP SWAP1 PUSH0 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x3 DUP6 MSTORE DUP2 DUP4 KECCAK256 SWAP5 DUP6 SLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP8 AND SWAP1 SSTORE DUP6 DUP5 MSTORE MSTORE DUP2 KECCAK256 SSTORE PUSH32 0x79BAA5E19A392C29299F3A0871DFAA49CB3BCCE18826D5D6DF199C9E0846A6C0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH0 MSTORE DUP5 PUSH0 KECCAK256 SWAP1 DUP2 ADD SWAP1 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x85E JUMPI PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x8E4 JUMP JUMPDEST PUSH0 NOT ADD DUP1 PUSH2 0x951 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x91D DUP4 DUP7 PUSH2 0x1584 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND DUP8 DUP2 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 DUP5 PUSH2 0x1599 JUMP JUMPDEST POP PUSH2 0x842 JUMP JUMPDEST CALLVALUE PUSH2 0x174 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 SLOAD AND SUB PUSH2 0x98F JUMPI PUSH2 0x5A0 CALLER PUSH2 0x13E7 JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER SWAP1 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x174 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH2 0x9D2 PUSH2 0x139B JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE DUP3 SLOAD SWAP1 DUP2 AND DUP4 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH2 0xA5E DUP2 PUSH2 0x11B9 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH2 0xA88 PUSH2 0xEDA JUMP JUMPDEST PUSH1 0x24 SWAP3 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x174 JUMPI PUSH2 0xAAD PUSH2 0xAB6 SWAP2 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xF83 JUMP JUMPDEST SWAP3 PUSH2 0x404 PUSH2 0x121E JUMP JUMPDEST SWAP4 DUP3 MLOAD PUSH2 0xAC8 JUMPI JUMPDEST PUSH1 0x20 DUP6 DUP6 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0xAD3 SWAP3 SWAP2 SWAP3 PUSH2 0x121E JUMP JUMPDEST PUSH2 0xADC DUP6 PUSH2 0x11B9 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND SWAP4 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0xB2A JUMPI POP POP POP POP PUSH2 0xABE JUMP JUMPDEST DUP3 PUSH2 0xB35 DUP3 DUP5 PUSH2 0x1084 JUMP JUMPDEST MLOAD AND DUP9 MLOAD PUSH32 0xC673BDAF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP7 DUP3 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 DUP10 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xC3C JUMPI PUSH0 SWAP2 PUSH2 0xC1F JUMPI JUMPDEST POP ISZERO PUSH2 0xBF5 JUMPI SWAP1 PUSH1 0x5 DUP12 SWAP3 DUP4 PUSH0 MSTORE MSTORE PUSH2 0xB94 DUP2 DUP12 PUSH0 KECCAK256 PUSH2 0x168D JUMP JUMPDEST ISZERO PUSH2 0xBC8 JUMPI SWAP1 PUSH1 0x1 SWAP3 SWAP2 PUSH32 0x5CDA7EBCBCC755C3EF1C6CF035A6E26BF48B6421F72F932756D942C896287B69 PUSH0 DUP1 LOG3 ADD PUSH2 0xB1A JUMP JUMPDEST DUP7 SWAP1 DUP7 PUSH32 0x5A17AA8D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 DUP3 DUP8 PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xC36 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3CB JUMPI PUSH2 0x3BD DUP2 DUP4 PUSH2 0xEFD JUMP JUMPDEST DUP13 PUSH2 0xB79 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH2 0xC60 PUSH2 0xEDA JUMP JUMPDEST SWAP1 PUSH2 0xC6A DUP3 PUSH2 0x1283 JUMP JUMPDEST CALLER PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO PUSH2 0xD03 JUMPI DUP2 SWAP3 SWAP4 DUP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP6 AND SWAP5 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE CALLER PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE DUP4 PUSH0 MSTORE PUSH0 KECCAK256 SSTORE CALLER SWAP1 PUSH32 0x8A5583D08CB82BE0E3E26D52A1941F10FE2FDD1BB7CC5E085A0BA35B3D797205 PUSH0 DUP1 LOG4 STOP JUMPDEST DUP4 PUSH32 0xBCC08F7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH2 0xD39 CALLDATASIZE PUSH2 0x1000 JUMP JUMPDEST SWAP2 PUSH2 0xD42 PUSH2 0x121E JUMP JUMPDEST PUSH2 0xD4B DUP3 PUSH2 0x11B9 JUMP JUMPDEST DUP3 MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xD59 JUMPI STOP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xD78 DUP3 DUP5 PUSH2 0x1084 JUMP JUMPDEST MLOAD AND DUP5 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH2 0xD8E DUP2 DUP6 PUSH0 KECCAK256 PUSH2 0x1599 JUMP JUMPDEST ISZERO PUSH2 0xDC2 JUMPI SWAP1 DUP5 PUSH1 0x1 SWAP3 PUSH32 0xE632B6BE71C5C7F5D98BA00DA8B648A72422F750973138BC6474DE6FE711B66E PUSH0 DUP1 LOG3 ADD PUSH2 0xD50 JUMP JUMPDEST DUP5 SWAP1 DUP8 PUSH32 0x80145D7200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xE23 PUSH2 0xEDA JUMP JUMPDEST AND PUSH0 MSTORE DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP2 CALLDATALOAD PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x174 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x174 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xED1 PUSH2 0xE91 PUSH2 0xEDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0xE9D DUP2 PUSH2 0x11B9 JUMP JUMPDEST PUSH0 MSTORE PUSH1 0x5 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 PUSH0 KECCAK256 SWAP2 AND SWAP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x174 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF3E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF3E JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x174 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0xF9D DUP2 PUSH2 0xF6B JUMP JUMPDEST SWAP4 PUSH2 0xFAB PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xEFD JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x174 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xFD4 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x174 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xFC6 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x174 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x174 JUMPI PUSH2 0x1030 SWAP2 PUSH1 0x4 ADD PUSH2 0xF83 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x105A JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x104C JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1098 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF3E JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1148 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x174 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x174 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x174 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x174 JUMPI SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 ISZERO PUSH2 0x11F4 JUMPI JUMPDEST PUSH2 0x11C9 JUMPI POP JUMP JUMPDEST PUSH32 0x98592DDB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x11C2 JUMP JUMPDEST PUSH2 0x1254 PUSH2 0x124D PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x10C5 JUMP JUMPDEST CALLER SWAP1 PUSH2 0x1459 JUMP JUMPDEST ISZERO PUSH2 0x125B JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x12DE JUMPI DUP1 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x12B3 JUMPI POP JUMP JUMPDEST PUSH32 0x2C35AA9600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x2DE5256E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x2 SLOAD SWAP2 PUSH0 NOT DUP4 EQ PUSH2 0x1148 JUMPI PUSH1 0x1 DUP4 ADD PUSH1 0x2 SSTORE DUP3 DUP1 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SWAP3 AND SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE DUP2 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0xDC91443DB112AE1BEB8FAB12E3FA2DEDEA028E9EB6A8E92776A1AA2343007BE2 PUSH0 DUP1 LOG3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND CALLER SUB PUSH2 0x13BB JUMPI JUMP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 PUSH1 0x1 SLOAD AND PUSH1 0x1 SSTORE PUSH0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP1 SWAP4 DUP3 AND OR PUSH0 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP1 PUSH0 SLOAD AND SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x157C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 PUSH1 0x4 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x154D JUMPI DUP6 SWAP4 PUSH0 SWAP6 PUSH2 0x1558 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x154D JUMPI PUSH0 SWAP3 PUSH2 0x1537 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH2 0x1030 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x3CB JUMPI PUSH2 0x3BD DUP2 DUP4 PUSH2 0xEFD JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP3 SWAP2 SWAP6 POP PUSH2 0x1574 SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x547 JUMPI PUSH2 0x538 DUP2 DUP4 PUSH2 0xEFD JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x14E2 JUMP JUMPDEST POP POP POP PUSH1 0x1 SWAP1 JUMP JUMPDEST DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x1098 JUMPI PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD SWAP2 DUP2 PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 DUP2 ISZERO ISZERO PUSH0 EQ PUSH2 0x1685 JUMPI PUSH0 NOT SWAP2 DUP3 DUP2 ADD DUP2 DUP2 GT PUSH2 0x1148 JUMPI DUP3 SLOAD SWAP1 DUP5 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x1148 JUMPI DUP2 DUP2 SUB PUSH2 0x163A JUMPI JUMPDEST POP POP POP DUP1 SLOAD DUP1 ISZERO PUSH2 0x160D JUMPI DUP3 ADD SWAP2 PUSH2 0x15EF DUP4 DUP4 PUSH2 0x1584 JUMP JUMPDEST SWAP1 SWAP2 DUP3 SLOAD SWAP2 PUSH1 0x3 SHL SHL NOT AND SWAP1 SSTORE SSTORE PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x1670 PUSH2 0x164A PUSH2 0x165A SWAP4 DUP7 PUSH2 0x1584 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP3 DUP4 SWAP3 DUP7 PUSH2 0x1584 JUMP JUMPDEST DUP2 SWAP4 SWAP2 SLOAD SWAP1 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SWAP3 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x15D7 JUMP JUMPDEST POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP3 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x16DF JUMPI DUP1 SLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 LT ISZERO PUSH2 0xF3E JUMPI DUP3 PUSH2 0x16CA PUSH2 0x165A DUP5 PUSH1 0x1 DUP1 SWAP7 ADD DUP6 SSTORE DUP5 PUSH2 0x1584 JUMP JUMPDEST SWAP1 SSTORE DUP1 SLOAD SWAP3 PUSH0 MSTORE ADD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SMOD DUP13 NUMBER 0xF7 DUP11 DIV SWAP15 CALLER PUSH27 0x1BFB876453AE4C5E5EAABDBE187CE8D872AF8DBFE88C5364736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"216:202:91:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:21:80;216:202:91;1810:21:80;;;216:202:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:91;;;;;;;;;1348:29:80;216:202:91;;;;;;;;;;;;;-1:-1:-1;;216:202:91;;;;;;;:::i;:::-;1500:62:48;;:::i;:::-;216:202:91;;;;;;;1738:24:49;216:202:91;;;1738:24:49;216:202:91;;;;1777:43:49;216:202:91;1777:43:49;;216:202:91;;;;;;;-1:-1:-1;;216:202:91;;;;;;;;;;8454:16:81;216:202:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1525:73:32;;;;;:::i;:::-;1515:9:81;;;:::i;:::-;216:202:91;;;;5266:5:81;216:202:91;;;;5137:12:81;;;;;;216:202:91;5151:3:81;5185:11;;;;;:::i;:::-;216:202:91;;;;;5266:28:81;;;;;;216:202:91;5266:28:81;216:202:91;5266:28:81;;;;;;;;;;;;;216:202:91;5266:28:81;;;5151:3;216:202:91;;5262:119:81;;216:202:91;5399:9:81;216:202:91;;;;;;;11511:50:71;216:202:91;;;;11511:50:71;:::i;:::-;216:202:91;5395:118:81;;5644:31;;216:202:91;5644:31:81;;;216:202:91;5644:31:81;;216:202:91;5122:13:81;;5395:118;5465:33;;;216:202:91;5465:33:81;216:202:91;;;;5465:33:81;5262:119;5330:36;;;;216:202:91;5330:36:81;216:202:91;;5330:36:81;5266:28;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;216:202:91;;;;;;;;;;;;;;;-1:-1:-1;;216:202:91;;;;;;;2557:30:81;216:202:91;;:::i;:::-;1525:73:32;;:::i;:::-;1962:7:81;;;:::i;:::-;2557:30;:::i;:::-;216:202:91;;;;;;;;;;;;-1:-1:-1;;216:202:91;;;;;;;;1311:13:49;216:202:91;;;;;;;;;;;;;;-1:-1:-1;;216:202:91;;;;;;6586:10:81;;216:202:91;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:91;;;;;;;8291:14:81;216:202:91;;;;;;;;;;;;;;-1:-1:-1;;216:202:91;;;;;;1810:21:80;216:202:91;;1810:21:80;;216:202:91;1810:21:80;;:5;;;216:202:91;1810:21:80;;;;;;;;;;216:202:91;1810:21:80;;;216:202:91;;;;;;;;1810:21:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;216:202:91;;;;;;;;;;;;;;-1:-1:-1;;216:202:91;;;;;;;:::i;:::-;1525:73:32;;:::i;:::-;216:202:91;;;;2423:10:80;:21;2419:77;;2524:8;;;:::i;:::-;216:202:91;2419:77:80;2467:18;;216:202:91;2467:18:80;216:202:91;2467:18:80;216:202:91;;;;;;;;;-1:-1:-1;;216:202:91;;;;;;1515:9:81;;;:::i;:::-;216:202:91;;7570:9:81;216:202:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:91;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:91;;;;;;;;;;;;1515:9:81;;;;:::i;:::-;216:202:91;;;7852:9:81;216:202:91;;;7852:9:81;216:202:91;;;;;;7896:9:81;;;:28;;;;;216:202:91;7896:50:81;;;;216:202:91;7892:115:81;;;8039:9;;;;;:::i;:::-;216:202:91;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;8064:16:81;8082:6;;;;;;216:202:91;;;;;;;:::i;8090:3:81:-;216:202:91;;;;;;;;;5853:18:71;216:202:91;;;;5853:18:71;:::i;:::-;216:202:91;;;;;;;8109:44:81;8115:8;;;;:::i;:::-;8109:44;;:::i;:::-;216:202:91;;8064:16:81;;7892:115;7969:27;;;216:202:91;7969:27:81;216:202:91;;;7969:27:81;7896:50;7928:18;;;;;7896:50;;;:28;7909:15;;;;-1:-1:-1;7896:28:81;;216:202:91;;;;;;;-1:-1:-1;;216:202:91;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;216:202:91;;;;;;;1525:73:32;;;:::i;:::-;1515:9:81;;;:::i;:::-;216:202:91;;;3508:9:81;216:202:91;;;;;;;3627:237:81;3634:12;;;216:202:91;;;;;3508:9:81;216:202:91;;;;;;;;;;;;;;3627:237:81;216:202:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4157:36:81;216:202:91;4157:36:81;;216:202:91;;;;;;;;;;;;;;;;;;;;;;;;;3627:237:81;-1:-1:-1;;216:202:91;5853:18:71;11832:53;216:202:91;5853:18:71;;;;:::i;:::-;216:202:91;;;;;;;3783:35:81;;;216:202:91;3783:35:81;;11832:53:71;;:::i;:::-;;3627:237:81;;216:202:91;;;;;-1:-1:-1;;216:202:91;;;;;735:10:63;216:202:91;1311:13:49;216:202:91;;2339:24:49;2335:96;;2459:6;735:10:63;2459:6:49;:::i;2335:96::-;2386:34;216:202:91;2386:34:49;735:10:63;216:202:91;;;;2386:34:49;216:202:91;;;;;-1:-1:-1;;216:202:91;;;;;1500:62:48;;:::i;:::-;216:202:91;;;;2093:20:49;216:202:91;;2093:20:49;216:202:91;;;;;;;;;3052:40:48;;;;216:202:91;;;;;;;-1:-1:-1;;216:202:91;;;;;;;;1515:9:81;;;:::i;:::-;216:202:91;;6942:9:81;216:202:91;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:91;;;;;;;:::i;:::-;;;;;;;;;;;2839:30:81;216:202:91;;;;;;:::i;:::-;1525:73:32;;;:::i;2839:30:81:-;216:202:91;;;2880:84:81;;216:202:91;;;;;;;;;2880:84:81;1525:73:32;;;;;:::i;:::-;1515:9:81;;;:::i;:::-;216:202:91;;;;5266:5:81;216:202:91;;;;5137:12:81;;;;;;2880:84;;;;;;5151:3;5185:11;;;;;:::i;:::-;216:202:91;;;;;5266:28:81;;;;;;216:202:91;;5266:28:81;;;;;;;;;;;;;216:202:91;5266:28:81;;;5151:3;216:202:91;;5262:119:81;;216:202:91;5399:9:81;216:202:91;;;;;;11511:50:71;216:202:91;;;;11511:50:71;:::i;:::-;216:202:91;5395:118:81;;5644:31;216:202:91;5644:31:81;;;216:202:91;5644:31:81;;216:202:91;5122:13:81;;5395:118;5465:33;;;;216:202:91;5465:33:81;216:202:91;;;;5465:33:81;5262:119;5330:36;;;;216:202:91;5330:36:81;216:202:91;;5330:36:81;5266:28;;;;;;;;;;;;;;:::i;:::-;;;;;216:202:91;;;;;;;;;;;;;;;-1:-1:-1;;216:202:91;;;;;;;:::i;:::-;1962:7:81;;;;:::i;:::-;6586:10;216:202:91;;;;;;;;;8927:14:81;;;8923:79;;216:202:91;;;;;;4397:16:81;216:202:91;;;;;;;;;;;;;;;;;6586:10:81;216:202:91;;;;;;;;;;;;;;;6586:10:81;4599:62;;216:202:91;4599:62:81;;216:202:91;8923:79:81;8964:27;;216:202:91;8964:27:81;216:202:91;8964:27:81;216:202:91;;;;;;;;:::i;:::-;1525:73:32;;;:::i;:::-;1515:9:81;;;:::i;:::-;216:202:91;;5934:13:81;216:202:91;5949:12:81;;;;;;216:202:91;5963:3:81;216:202:91;5997:8:81;;;;:::i;:::-;216:202:91;;;;;6024:9:81;216:202:91;;11832:53:71;216:202:91;;;;11832:53:71;:::i;:::-;216:202:91;6020:117:81;;6156:35;;216:202:91;6156:35:81;;216:202:91;6156:35:81;;216:202:91;5934:13:81;;6020:117;6093:29;;;;216:202:91;6093:29:81;216:202:91;;;;;6093:29:81;216:202:91;;;;;;-1:-1:-1;;216:202:91;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:91;;;;;;;;;;7113:16:81;216:202:91;;;;;;;;7113:41:81;;216:202:91;;;;;;;;;;;;-1:-1:-1;;216:202:91;;;;;;;12473:55:71;216:202:91;;:::i;:::-;;;1515:9:81;;;:::i;:::-;216:202:91;;7333:9:81;216:202:91;;;;;;;;12473:55:71;5197:14;5101:129;-1:-1:-1;216:202:91;5197:14:71;216:202:91;;;-1:-1:-1;216:202:91;;5197:26:71;;5101:129;;12473:55;216:202:91;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;216:202:91;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1931:430:32;216:202:91;;;2303:50:32;;;2320:22;;216:202:91;;;;;;;2303:50:32;;;216:202:91;;;;;;;;;;;;;;;2293:61:32;;1931:430;:::o;216:202:91:-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;9714::81:-;9790:14;;:59;;;;9714:202;9786:124;;9714:202;:::o;9786:124::-;9872:27;9803:1;9872:27;;216:202:91;;9803:1:81;9872:27;9790:59;216:202:91;;9803:1:81;216:202:91;9808:16:81;216:202:91;;;;9803:1:81;216:202:91;;;9808:41:81;9790:59;;1688:201:32;1798:33;1762:20;1774:7;;;;1762:20;:::i;:::-;1820:10;1798:33;;:::i;:::-;1797:34;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;;1774:7;1854:18;9014:266:81;216:202:91;;9088:21:81;;9084:82;;216:202:91;9107:1:81;216:202:91;9180:14:81;216:202:91;;;9107:1:81;216:202:91;;9176:98:81;;9014:266;:::o;9176:98::-;9231:32;9107:1;9231:32;9180:14;216:202:91;;9107:1:81;9231:32;9084:82;9132:23;9107:1;9132:23;;9107:1;9132:23;2976:342;;3083:16;216:202:91;;-1:-1:-1;;216:202:91;;;;;;;3083:16:81;216:202:91;3071:28:81;216:202:91;-1:-1:-1;216:202:91;3158:16:81;216:202:91;;;;-1:-1:-1;216:202:91;;;;;;;;;;;;;-1:-1:-1;216:202:91;3212:14:81;216:202:91;;;;-1:-1:-1;216:202:91;;3270:41:81;-1:-1:-1;3270:41:81;;2976:342::o;1796:162:48:-;216:202:91;1710:6:48;216:202:91;;735:10:63;1855:23:48;1851:101;;1796:162::o;1851:101::-;1901:40;1710:6;1901:40;735:10:63;1901:40:48;216:202:91;;1710:6:48;1901:40;2011:153:49;216:202:91;;;2093:20:49;216:202:91;;2093:20:49;216:202:91;2093:20:49;216:202:91;;;;;;;;;;2093:20:49;216:202:91;;3052:40:48;2093:20:49;3052:40:48;;2011:153:49:o;2546:382:80:-;;216:202:91;;;;;;;;;2721:15:80;;;2717:57;;216:202:91;;2858:21:80;216:202:91;2858:21:80;;;:5;;;:21;:5;;;216:202:91;2858:21:80;;;;;;;;;216:202:91;2858:21:80;;;2546:382;216:202:91;;;;;;2858:63:80;;;;;216:202:91;2858:63:80;;:21;:63;;216:202:91;;;;;2915:4:80;216:202:91;;;;;2858:63:80;;;;;;;216:202:91;2858:63:80;;;2851:70;;2546:382;:::o;2858:63::-;;;;;;-1:-1:-1;2858:63:80;;;;;;:::i;:::-;216:202:91;;;;;;;;;2858:21:80;216:202:91;2858:21:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2717:57;2752:11;;;2759:4;2752:11;:::o;216:202:91:-;;;;;;;;-1:-1:-1;216:202:91;;-1:-1:-1;216:202:91;;;-1:-1:-1;216:202:91;:::o;3071:1368:71:-;;3266:14;;;216:202:91;;;;;;;;;;;3302:13:71;;;;3298:1135;3302:13;;;-1:-1:-1;;216:202:91;;;;;;;;;;;;;;;;;;;;3777:23:71;;;3773:378;;3298:1135;216:202:91;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3266:14:71;4368:11;:::o;216:202:91:-;;;;;;;;;;3773:378:71;216:202:91;3840:22:71;3961:23;3840:22;;;:::i;:::-;216:202:91;;;;;;3961:23:71;;;;;:::i;:::-;216:202:91;;;;;-1:-1:-1;;216:202:91;;;;;;;;;;;;;;;;;;;;;;;;;3773:378:71;;;;;3298:1135;4410:12;;;;216:202:91;4410:12:71;:::o;2497:406::-;-1:-1:-1;216:202:91;;;5197:14:71;;;216:202:91;;;;;;2581:21:71;;216:202:91;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2776:14:71;216:202:91;;;;;;;2832:11:71;:::o;2576:321::-;2874:12;;216:202:91;2874:12:71;:::o"},"methodIdentifiers":{"acceptOwnership()":"79ba5097","addPoolsToSet(uint256,address[])":"ebf3a8d0","createPoolSet(address)":"e909c19b","createPoolSet(address,address[])":"3e035f9b","destroyPoolSet(uint256)":"7c1ec460","forceTransferOwnership(address)":"a89b1128","getActionId(bytes4)":"851c1bb3","getAllPoolsInSet(uint256)":"94fc4058","getAuthorizer()":"aaabadc5","getManagerForPoolSet(uint256)":"f167a1e6","getNextPoolSetId()":"c482e822","getPoolCountForSet(uint256)":"62d53462","getPoolSetIdForCaller()":"ce998aba","getPoolSetIdForManager(address)":"25c427ed","getPoolsInSet(uint256,uint256,uint256)":"8c60ebd0","isPoolInSet(address,uint256)":"182551da","isValidPoolSetId(uint256)":"255dae41","owner()":"8da5cb5b","pendingOwner()":"e30c3978","removePoolsFromSet(uint256,address[])":"2da55a1d","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","transferPoolSetOwnership(address)":"3700f987","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"InvalidPoolSetId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolSetManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAlreadyInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolNotInSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolSetManager\",\"type\":\"address\"}],\"name\":\"PoolSetManagerNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderIsNotPoolSetManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolAddedToSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"PoolRemovedFromSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"PoolSetCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"PoolSetDestroyed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"PoolSetOwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"addPoolsToSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"newPools\",\"type\":\"address[]\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialManager\",\"type\":\"address\"}],\"name\":\"createPoolSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"destroyPoolSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"forceTransferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getAllPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getManagerForPoolSet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextPoolSetId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"getPoolCountForSet\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSetIdForCaller\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"getPoolSetIdForManager\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"}],\"name\":\"getPoolsInSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isPoolInSet\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"}],\"name\":\"isValidPoolSetId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"poolSetId\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"removePoolsFromSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newManager\",\"type\":\"address\"}],\"name\":\"transferPoolSetOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"params\":{\"poolSetId\":\"Id of the set involved in the operation\"}}],\"InvalidPoolSetId(uint256)\":[{\"details\":\"This can mean the value is invalid, or it was never created, or it was destroyed.\",\"params\":{\"poolSetId\":\"The id of the invalid set\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotInSet(address,uint256)\":[{\"params\":{\"pool\":\"Address of the pool being removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolSetManagerNotUnique(address)\":[{\"details\":\"Otherwise, the contract would not be able to determine the correct pool set from the caller's address.\",\"params\":{\"poolSetManager\":\"Address of the manager that is already assigned to another pool set id\"}}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was added\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolRemovedFromSet(address,uint256)\":{\"params\":{\"pool\":\"Address of the pool that was removed\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetCreated(uint256,address)\":{\"details\":\"Pools are organized into separate sets, controlled by a manager, which can be changed independently.\",\"params\":{\"initialManager\":\"Address of the pool set manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetDestroyed(uint256,address)\":{\"params\":{\"manager\":\"The address of the set's last manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"details\":\"Managers can only control one pool set. Transfers to existing managers of other sets will revert.\",\"params\":{\"newManager\":\"Address of the new manager\",\"oldManager\":\"Address of the previous manager\",\"poolSetId\":\"Id of the set with which the pool is associated\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"addPoolsToSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may add pools to a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"newPools\":\"List of pools to add\",\"poolSetId\":\"Id of the set to which the new pools belong\"}},\"createPoolSet(address)\":{\"details\":\"Convenience function to create a pool set with no initial pools. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\"}},\"createPoolSet(address,address[])\":{\"details\":\"The `newPools` list can be empty, in which case this will only create the set. Pools can then be added with `addPoolsToSet`, or removed with `removePoolsFromSet`. This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may create new sets. Also reverts if the initial manager address is zero or already a manager of another pool set.\",\"params\":{\"initialManager\":\"Address of the account authorized to perform operations on the set\",\"newPools\":\"Set of pools to add to the set\"}},\"destroyPoolSet(uint256)\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may destroy sets, effectively removing control of any pools in the set from the associated manager. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set being destroyed\"}},\"forceTransferOwnership(address)\":{\"details\":\"This allows governance to revoke the owner at any time, preserving control above the owner at all times. address(0) is also a valid owner, as governance can simply choose to revoke ownership. Ownership can always be forced back to any address later on.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAllPoolsInSet(uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"pools\":\"List of pools\"}},\"getManagerForPoolSet(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The address of the manager of the given poolSetId, or zero if the poolSetId is unassigned\"}},\"getNextPoolSetId()\":{\"returns\":{\"_0\":\"The pool set id that will be used on the next call of `createPoolSet`\"}},\"getPoolCountForSet(uint256)\":{\"details\":\"Needed to support pagination in case the set is too large to process in a single transaction. Reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"The current number of pools in the set\"}},\"getPoolSetIdForCaller()\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the caller is not a pool set manager\"}},\"getPoolSetIdForManager(address)\":{\"returns\":{\"_0\":\"The numeric pool set id, or zero if the address given is not a pool set manager\"}},\"getPoolsInSet(uint256,uint256,uint256)\":{\"details\":\"Indexes are 0-based and [start, end) (i.e., inclusive of `start`; exclusive of `end`). Reverts if the poolSetId is not valid.\",\"params\":{\"from\":\"Start index\",\"poolSetId\":\"Id of the set containing the pools\",\"to\":\"End index\"},\"returns\":{\"pools\":\"List of pools\"}},\"isPoolInSet(address,uint256)\":{\"details\":\"Reverts if the poolSetId is not valid.\",\"params\":{\"pool\":\"Address of the pool to check\",\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the pool is in the given set, false otherwise\"}},\"isValidPoolSetId(uint256)\":{\"params\":{\"poolSetId\":\"Id of the set containing the pools\"},\"returns\":{\"_0\":\"True if the poolSetId exists\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"removePoolsFromSet(uint256,address[])\":{\"details\":\"This is a permissioned function. Only the current owner of the helper contract (e.g., Maxis) may remove pools from a set. Also reverts if the poolSetId is not valid.\",\"params\":{\"poolSetId\":\"Id of the set to which the pools belong\",\"pools\":\"List of pools to remove from the set\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"},\"transferPoolSetOwnership(address)\":{\"details\":\"This is a permissioned function. Only the current manager of a set can call this to set a new manager. Since managers can only control a single set, there is no need to specify the id in the call. Note that this is a one-step migration. If it is done incorrectly, effective control of the set is lost, and the owner of this contract will need to destroy the old set and create a new one with the correct initial manager. Also reverts if the new manager address is zero or already the manager of a pool set.\",\"params\":{\"newManager\":\"The address of the new manager\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"IndexOutOfBounds(uint256)\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}],\"InvalidPoolSetId(uint256)\":[{\"notice\":\"Pool set id associated with an operation is invalid.\"}],\"InvalidPoolSetManager()\":[{\"notice\":\"The initial manager of a pool set cannot be zero.\"}],\"PoolAlreadyInSet(address,uint256)\":[{\"notice\":\"Cannot add a pool that is already there.\"}],\"PoolNotInSet(address,uint256)\":[{\"notice\":\"Cannot remove a pool that was not added.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolSetManagerNotUnique(address)\":[{\"notice\":\"Pool set managers can only manage a single pool set.\"}],\"SenderIsNotPoolSetManager()\":[{\"notice\":\"Permissioned operations on pools can only be performed by the pool set manager.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultNotSet()\":[{\"notice\":\"The vault has not been set.\"}]},\"events\":{\"PoolAddedToSet(address,uint256)\":{\"notice\":\"The owner added a pool to the given set.\"},\"PoolRemovedFromSet(address,uint256)\":{\"notice\":\"The owner removed a pool from the given set.\"},\"PoolSetCreated(uint256,address)\":{\"notice\":\"The owner created a new pool set.\"},\"PoolSetDestroyed(uint256,address)\":{\"notice\":\"The owner destroyed a pool set.\"},\"PoolSetOwnershipTransferred(uint256,address,address)\":{\"notice\":\"The current manager of a pool set transferred ownership to a new address.\"}},\"kind\":\"user\",\"methods\":{\"addPoolsToSet(uint256,address[])\":{\"notice\":\"Add pools to the set of pools controlled by this helper contract.\"},\"createPoolSet(address)\":{\"notice\":\"Create a new empty set with an initial manager.\"},\"createPoolSet(address,address[])\":{\"notice\":\"Create a new set with an initial manager, optionally initialized with a set of pools.\"},\"destroyPoolSet(uint256)\":{\"notice\":\"Simple way to remove an entire set of pools from control of the helper function.\"},\"forceTransferOwnership(address)\":{\"notice\":\"Transfer ownership without the 2-step process. It cannot be called by the current owner; governance only.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAllPoolsInSet(uint256)\":{\"notice\":\"Get the full set of pools from a given set.\"},\"getAuthorizer()\":{\"notice\":\"Returns the authorizer address according to the Vault.\"},\"getManagerForPoolSet(uint256)\":{\"notice\":\"Get the manager address associated with a given poolSetId.\"},\"getNextPoolSetId()\":{\"notice\":\"Utility function to predict the next pool set id.\"},\"getPoolCountForSet(uint256)\":{\"notice\":\"Get the number of pools associated with the given set.\"},\"getPoolSetIdForCaller()\":{\"notice\":\"Get the pool set id associated with the caller.\"},\"getPoolSetIdForManager(address)\":{\"notice\":\"Get the pool set id associated with a given manager address.\"},\"getPoolsInSet(uint256,uint256,uint256)\":{\"notice\":\"Get a range of pools from a given set.\"},\"isPoolInSet(address,uint256)\":{\"notice\":\"Check whether a pool is in the set of pools.\"},\"isValidPoolSetId(uint256)\":{\"notice\":\"Check whether a poolSetId has been created.\"},\"removePoolsFromSet(uint256,address[])\":{\"notice\":\"Remove pools from the set of pools controlled by this helper contract.\"},\"transferPoolSetOwnership(address)\":{\"notice\":\"Transfer ownership of a pool set from the current manager to a new manager.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/PoolHelperMock.sol\":\"PoolHelperMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IPoolHelperCommon.sol\":{\"keccak256\":\"0xdb8365416c9dd9d7be16677c13819065511e9bc7705d6bad85fd52b65d3b3c39\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b90206982d126075b074f0a77ea9cb3ec173ed9fe9e4504b12d6807532b1b7ff\",\"dweb:/ipfs/QmYjKTu4Mrew94sSxfQ8jP4yT7wZFgghSRyB9A2kDdSy8X\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2c9d517f0c136d54bd00cd57959d25681d4d6273f5bbbc263afe228303772f0\",\"dweb:/ipfs/QmReNFjXBiufByiAAzfSQ2SM5r3qeUErn46BmN3yVRvrek\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x1fc283df727585919c3db301b948a3e827aee16917457ad7f916db9da2228e77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a4f4b5e2cd0ebc3b74e41e4e94771a0417eedd9b11cec3ef9f90b2ac2989264b\",\"dweb:/ipfs/QmZmsEsvsXiwAyAe1YeoLSKezeFcvR1giUeEY6ex4zpsTS\"]},\"contracts/OwnableAuthentication.sol\":{\"keccak256\":\"0xc88900d63057ed6e771bd6568dad0de2c40e53a591fb27641edd8fb751061abd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab7cb2500bba399ed5a0f669f01e4d2c438c94545c533df871c5af4949d01064\",\"dweb:/ipfs/QmcYD52XQYjp57qQoo3RS5Dnx4MdmaA1jP1HMwWLWqNhuD\"]},\"contracts/PoolHelperCommon.sol\":{\"keccak256\":\"0x30381172c4e42784079cea20f474af84d39df274cb63f1a2e0426d823ff788e4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6311287a0f4d8b3b8af5c67599f8f8976137b22398fadd243df798baf525b0d6\",\"dweb:/ipfs/QmZuVsXAb7zveWUrEGDVUFrGdFe9AwC1xiGtMJx5vFE6Jc\"]},\"contracts/test/PoolHelperMock.sol\":{\"keccak256\":\"0xfc56a98e7725668f497e7f94766e4980346c290e0339e49ecde9bc5e5239657f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3025e9ecf7f5022a0216006a4226b37213763ab610b8f556e79f49f8582b995b\",\"dweb:/ipfs/QmUBcn7556mGNCN8SgCfkrmV7iUsewwLwKmAevbBBcvyZv\"]}},\"version\":1}"}},"contracts/test/PriceImpactHelperMock.sol":{"PriceImpactHelperMock":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IRouter","name":"router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"}],"name":"calculateAddLiquidityUnbalancedPriceImpact","outputs":[{"internalType":"uint256","name":"priceImpact","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"callAndRevertHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256[]","name":"array","type":"int256[]"}],"name":"maxNegativeIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"int256[]","name":"array","type":"int256[]"}],"name":"minPositiveIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"tokenIndex","type":"uint256"},{"internalType":"int256[]","name":"deltas","type":"int256[]"},{"internalType":"address","name":"sender","type":"address"}],"name":"queryAddLiquidityUnbalancedForTokenDeltas","outputs":[{"internalType":"int256","name":"deltaBPT","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"int256[]","name":"deltas","type":"int256[]"},{"internalType":"int256[]","name":"deltaBPTs","type":"int256[]"},{"internalType":"address","name":"sender","type":"address"}],"name":"zeroOutDeltas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c03461009a57601f6113fd38819003918201601f19168301916001600160401b0383118484101761009e57808492604094855283398101031261009a5780516001600160a01b0391828216820361009a5760200151918216820361009a5760805260a05260405161134a90816100b3823960805181610a00015260a05181818161032501528181610b9c01528181610d500152610ef70152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60406080815260049081361015610014575f80fd5b5f3560e01c806301ef39ee146106225780630d4277d1146105e75780633b064ca31461058057806348406a5414610212578063a7699638146100ba5763e3a50d821461005e575f80fd5b346100b65760806003193601126100b657610077610725565b916044359267ffffffffffffffff84116100b65761009d6100af926020953691016106c5565b6100a5610748565b9160243590610f96565b9051908152f35b5f80fd5b5090346100b657816003193601126100b6576100d4610725565b6024359067ffffffffffffffff82116100b657366023830112156100b65781830135906101008261076b565b9261010d8651948561065d565b828452602084019036602485830101116100b6575f94856020868297602484960187378301015251925af191610141610852565b928015610193579261018f9161015a82602096336110a2565b50519384937f5ab64fb80000000000000000000000000000000000000000000000000000000085528401526024830190610881565b0390fd5b50507f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000006101e08461105b565b16146101ec5750611093565b7f28f95541000000000000000000000000000000000000000000000000000000005f525ffd5b5090346100b65760606003193601126100b65761022d610725565b90602480359167ffffffffffffffff8084116100b657366023850112156100b657838201359461025c866106ad565b946102698851968761065d565b868652602096858888019160051b830101913683116100b65786899101915b83831061057057505050506044359673ffffffffffffffffffffffffffffffffffffffff80891690818a036100b6576102c28a8986610e3b565b918351927f0f710888000000000000000000000000000000000000000000000000000000008b8501528286168985015260448401526064830152608060848301525f60a483015260a4825260e082018281108682111761054557835261034a91907f00000000000000000000000000000000000000000000000000000000000000001661113b565b92835184019388818187019603126100b657888101519182116100b657019280603f850112156100b65787840151610381816106ad565b9461038e8451968761065d565b818652838a87019260051b8201019283116100b657838a9101915b83831061053557505050506103be8651610787565b975f5b8751811015610441576103dd6103d782876107b8565b51610f41565b6103ea6103d7838b6107b8565b905f8282039212818312811691831390151617610416579060019161040f828d6107b8565b52016103c1565b876011887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50908591898989886104538251610787565b955f5b835181101561047f578061046e88886001948e610f96565b610478828b6107b8565b5201610456565b50876104b3866104ad6104a86104a261049b8f8e868f9261099c565b80946107b8565b516107f9565b611026565b956107b8565b5192670de0b6b3a76400009485810295818704149015171561050b5783156104e157505051910460011c8152f35b6012907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b82518152918101918a91016103a9565b876041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b8235815291810191899101610288565b50346100b65760806003193601126100b65761059a610725565b67ffffffffffffffff92906024358481116100b6576105bc90369084016106c5565b6044359485116100b6576105d86100af936020963691016106c5565b906105e1610748565b9261099c565b50346100b65760206003193601126100b65781359167ffffffffffffffff83116100b65761061d6100af916020943691016106c5565b610924565b50346100b65760206003193601126100b65781359167ffffffffffffffff83116100b6576106586100af916020943691016106c5565b6108a6565b90601f601f19910116810190811067ffffffffffffffff82111761068057604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116106805760051b60200190565b9080601f830112156100b65760209082356106df816106ad565b936106ed604051958661065d565b81855260208086019260051b8201019283116100b657602001905b828210610716575050505090565b81358152908301908301610708565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100b657565b6064359073ffffffffffffffffffffffffffffffffffffffff821682036100b657565b67ffffffffffffffff811161068057601f01601f191660200190565b90610791826106ad565b61079e604051918261065d565b828152601f196107ae82946106ad565b0190602036910137565b80518210156107cc5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f80000000000000000000000000000000000000000000000000000000000000008114610825575f0390565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b3d1561087c573d906108638261076b565b91610871604051938461065d565b82523d5f602084013e565b606090565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b7f800000000000000000000000000000000000000000000000000000000000000091905f805b825181101561091e575f6108e082856107b8565b51128061090b575b6108f5575b6001016108cc565b8094506109039150826107b8565b5192806108ed565b508461091782856107b8565b51136108e8565b50925050565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91905f805b825181101561091e575f61095e82856107b8565b511380610989575b610973575b60010161094a565b8094506109819150826107b8565b51928061096b565b508461099582856107b8565b5112610966565b9290935f93604051917fca4f280300000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff821660048401525f8360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa928315610e30575f93610d80575b50909192945f905b87517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161082557821015610d7557509085939291610a7a86610924565b90838986610a878a6108a6565b9a8b958b610aa36104a289610a9c85856107b8565b51936107b8565b1315610c4457610bc192610b77889593610af9610af38573ffffffffffffffffffffffffffffffffffffffff610aeb610b85989b9e82610ae3858b6107b8565b5116986107b8565b5116976107b8565b51611026565b60405195869460209a7f3ebc54e5000000000000000000000000000000000000000000000000000000008c88015260248701939060e095929373ffffffffffffffffffffffffffffffffffffffff8095818094168852166020870152166040850152606084015216608082015260c060a08201525f60c08201520190565b03601f19810183528261065d565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661113b565b82818051810103126100b657610bec825f610be58f95610bf29783960151966107b8565b528b6107b8565b52610f41565b91610bfd818b6107b8565b515f848201948512911290801582169115161761082557600192610c21828c6107b8565b52610c38610c31888c8489610f96565b91896107b8565b52019091929395610a38565b95935050505082610c5590876107b8565b5173ffffffffffffffffffffffffffffffffffffffff1690610c778a886107b8565b5173ffffffffffffffffffffffffffffffffffffffff16610c988b8d6107b8565b51610ca2906107f9565b610cab90611026565b6040517f175d44080000000000000000000000000000000000000000000000000000000060208083019190915273ffffffffffffffffffffffffffffffffffffffff8a8116602484015295861660448301529285166064820152608481019190915292891660a484015260c060c48401525f60e480850191909152835291610d356101048261065d565b610bc19073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661113b565b955050945050505090565b9092503d805f833e610d92818361065d565b81019060209081818403126100b65780519067ffffffffffffffff82116100b657019180601f840112156100b6578251610dcb816106ad565b93610dd9604051958661065d565b818552838086019260051b8201019283116100b6578301905b828210610e045750505050915f610a30565b815173ffffffffffffffffffffffffffffffffffffffff811681036100b6578152908301908301610df2565b6040513d5f823e3d90fd5b90929173ffffffffffffffffffffffffffffffffffffffff604051916020937fda001f7d00000000000000000000000000000000000000000000000000000000858501528260a48501911660248501526080604485015286518091528460c485019701905f5b818110610f2d5750505083610f1c94959683610ef5931660648601525f858203917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8301608488015252808552018361065d565b7f00000000000000000000000000000000000000000000000000000000000000001661113b565b81818051810103126100b657015190565b825189529786019791860191600101610ea1565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610f6b5790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b929091610fd183825192601f19610fc5610faf866106ad565b95610fbd604051978861065d565b8087526106ad565b013660208601376107b8565b5193841561101d57610ff993610ff35f871396875f1461100e57915b846107b8565b52610e3b565b90156110025790565b61100b906107f9565b90565b611017906107f9565b91610fed565b50505050505f90565b5f81126110305790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600481511061106b576020015190565b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b80511561106b57805190602001fd5b906110df57508051156110b757602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611132575b6110f0575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156110e8565b90303b156100b6575f6111a091604051809381927fa769963800000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff8597166004840152604060248401526044830190610881565b038183305af190816112f7575b50611299576111ba610852565b907f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000006112068461105b565b1603611293578151916020600319938481016004840152820193828286019503011261128f5760248101519067ffffffffffffffff821161128b57018260438201121561128f5760248101519061125c8261076b565b9361126a604051958661065d565b8285526044838301011161128b5790806044602093018386015e8301015290565b8280fd5b5080fd5b50611093565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6578706563746564207375636365737300000000000000000000000000006044820152fd5b90915067ffffffffffffffff8111610680576040525f905f6111ad56fea2646970667358221220edb858648324599e32b1ae90ec871b828e1e90ed14fd2d1eb43ec8d734a4906064736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0x9A JUMPI PUSH1 0x1F PUSH2 0x13FD CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x9E JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x9A JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND DUP3 SUB PUSH2 0x9A JUMPI PUSH1 0x20 ADD MLOAD SWAP2 DUP3 AND DUP3 SUB PUSH2 0x9A JUMPI PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x134A SWAP1 DUP2 PUSH2 0xB3 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0xA00 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x325 ADD MSTORE DUP2 DUP2 PUSH2 0xB9C ADD MSTORE DUP2 DUP2 PUSH2 0xD50 ADD MSTORE PUSH2 0xEF7 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1EF39EE EQ PUSH2 0x622 JUMPI DUP1 PUSH4 0xD4277D1 EQ PUSH2 0x5E7 JUMPI DUP1 PUSH4 0x3B064CA3 EQ PUSH2 0x580 JUMPI DUP1 PUSH4 0x48406A54 EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0xA7699638 EQ PUSH2 0xBA JUMPI PUSH4 0xE3A50D82 EQ PUSH2 0x5E JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x77 PUSH2 0x725 JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0xB6 JUMPI PUSH2 0x9D PUSH2 0xAF SWAP3 PUSH1 0x20 SWAP6 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0xA5 PUSH2 0x748 JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xF96 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0xB6 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0xD4 PUSH2 0x725 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB6 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP2 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x100 DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP3 PUSH2 0x10D DUP7 MLOAD SWAP5 DUP6 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0xB6 JUMPI PUSH0 SWAP5 DUP6 PUSH1 0x20 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL SWAP2 PUSH2 0x141 PUSH2 0x852 JUMP JUMPDEST SWAP3 DUP1 ISZERO PUSH2 0x193 JUMPI SWAP3 PUSH2 0x18F SWAP2 PUSH2 0x15A DUP3 PUSH1 0x20 SWAP7 CALLER PUSH2 0x10A2 JUMP JUMPDEST POP MLOAD SWAP4 DUP5 SWAP4 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x881 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP POP PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x1E0 DUP5 PUSH2 0x105B JUMP JUMPDEST AND EQ PUSH2 0x1EC JUMPI POP PUSH2 0x1093 JUMP JUMPDEST PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x22D PUSH2 0x725 JUMP JUMPDEST SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT PUSH2 0xB6 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP4 DUP3 ADD CALLDATALOAD SWAP5 PUSH2 0x25C DUP7 PUSH2 0x6AD JUMP JUMPDEST SWAP5 PUSH2 0x269 DUP9 MLOAD SWAP7 DUP8 PUSH2 0x65D JUMP JUMPDEST DUP7 DUP7 MSTORE PUSH1 0x20 SWAP7 DUP6 DUP9 DUP9 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xB6 JUMPI DUP7 DUP10 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x570 JUMPI POP POP POP POP PUSH1 0x44 CALLDATALOAD SWAP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP1 DUP2 DUP11 SUB PUSH2 0xB6 JUMPI PUSH2 0x2C2 DUP11 DUP10 DUP7 PUSH2 0xE3B JUMP JUMPDEST SWAP2 DUP4 MLOAD SWAP3 PUSH32 0xF71088800000000000000000000000000000000000000000000000000000000 DUP12 DUP6 ADD MSTORE DUP3 DUP7 AND DUP10 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP4 ADD MSTORE PUSH0 PUSH1 0xA4 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 MSTORE PUSH1 0xE0 DUP3 ADD DUP3 DUP2 LT DUP7 DUP3 GT OR PUSH2 0x545 JUMPI DUP4 MSTORE PUSH2 0x34A SWAP2 SWAP1 PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST SWAP3 DUP4 MLOAD DUP5 ADD SWAP4 DUP9 DUP2 DUP2 DUP8 ADD SWAP7 SUB SLT PUSH2 0xB6 JUMPI DUP9 DUP2 ADD MLOAD SWAP2 DUP3 GT PUSH2 0xB6 JUMPI ADD SWAP3 DUP1 PUSH1 0x3F DUP6 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP8 DUP5 ADD MLOAD PUSH2 0x381 DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP5 PUSH2 0x38E DUP5 MLOAD SWAP7 DUP8 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP7 MSTORE DUP4 DUP11 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI DUP4 DUP11 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x535 JUMPI POP POP POP POP PUSH2 0x3BE DUP7 MLOAD PUSH2 0x787 JUMP JUMPDEST SWAP8 PUSH0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x441 JUMPI PUSH2 0x3DD PUSH2 0x3D7 DUP3 DUP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0xF41 JUMP JUMPDEST PUSH2 0x3EA PUSH2 0x3D7 DUP4 DUP12 PUSH2 0x7B8 JUMP JUMPDEST SWAP1 PUSH0 DUP3 DUP3 SUB SWAP3 SLT DUP2 DUP4 SLT DUP2 AND SWAP2 DUP4 SGT SWAP1 ISZERO AND OR PUSH2 0x416 JUMPI SWAP1 PUSH1 0x1 SWAP2 PUSH2 0x40F DUP3 DUP14 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD PUSH2 0x3C1 JUMP JUMPDEST DUP8 PUSH1 0x11 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 SWAP2 DUP10 DUP10 DUP10 DUP9 PUSH2 0x453 DUP3 MLOAD PUSH2 0x787 JUMP JUMPDEST SWAP6 PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x47F JUMPI DUP1 PUSH2 0x46E DUP9 DUP9 PUSH1 0x1 SWAP5 DUP15 PUSH2 0xF96 JUMP JUMPDEST PUSH2 0x478 DUP3 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD PUSH2 0x456 JUMP JUMPDEST POP DUP8 PUSH2 0x4B3 DUP7 PUSH2 0x4AD PUSH2 0x4A8 PUSH2 0x4A2 PUSH2 0x49B DUP16 DUP15 DUP7 DUP16 SWAP3 PUSH2 0x99C JUMP JUMPDEST DUP1 SWAP5 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0x7F9 JUMP JUMPDEST PUSH2 0x1026 JUMP JUMPDEST SWAP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 DUP2 MUL SWAP6 DUP2 DUP8 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x50B JUMPI DUP4 ISZERO PUSH2 0x4E1 JUMPI POP POP MLOAD SWAP2 DIV PUSH1 0x1 SHR DUP2 MSTORE RETURN JUMPDEST PUSH1 0x12 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP3 MLOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP11 SWAP2 ADD PUSH2 0x3A9 JUMP JUMPDEST DUP8 PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP10 SWAP2 ADD PUSH2 0x288 JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x59A PUSH2 0x725 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 PUSH1 0x24 CALLDATALOAD DUP5 DUP2 GT PUSH2 0xB6 JUMPI PUSH2 0x5BC SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP5 DUP6 GT PUSH2 0xB6 JUMPI PUSH2 0x5D8 PUSH2 0xAF SWAP4 PUSH1 0x20 SWAP7 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST SWAP1 PUSH2 0x5E1 PUSH2 0x748 JUMP JUMPDEST SWAP3 PUSH2 0x99C JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0xB6 JUMPI PUSH2 0x61D PUSH2 0xAF SWAP2 PUSH1 0x20 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0x924 JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0xB6 JUMPI PUSH2 0x658 PUSH2 0xAF SWAP2 PUSH1 0x20 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0x8A6 JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xB6 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x6DF DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP4 PUSH2 0x6ED PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x716 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x708 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB6 JUMPI JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB6 JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x791 DUP3 PUSH2 0x6AD JUMP JUMPDEST PUSH2 0x79E PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x7AE DUP3 SWAP5 PUSH2 0x6AD JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x7CC JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x825 JUMPI PUSH0 SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x87C JUMPI RETURNDATASIZE SWAP1 PUSH2 0x863 DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP2 PUSH2 0x871 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x65D JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 SWAP2 SWAP1 PUSH0 DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x91E JUMPI PUSH0 PUSH2 0x8E0 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SLT DUP1 PUSH2 0x90B JUMPI JUMPDEST PUSH2 0x8F5 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x8CC JUMP JUMPDEST DUP1 SWAP5 POP PUSH2 0x903 SWAP2 POP DUP3 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 DUP1 PUSH2 0x8ED JUMP JUMPDEST POP DUP5 PUSH2 0x917 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SGT PUSH2 0x8E8 JUMP JUMPDEST POP SWAP3 POP POP JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 PUSH0 DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x91E JUMPI PUSH0 PUSH2 0x95E DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SGT DUP1 PUSH2 0x989 JUMPI JUMPDEST PUSH2 0x973 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x94A JUMP JUMPDEST DUP1 SWAP5 POP PUSH2 0x981 SWAP2 POP DUP3 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 DUP1 PUSH2 0x96B JUMP JUMPDEST POP DUP5 PUSH2 0x995 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SLT PUSH2 0x966 JUMP JUMPDEST SWAP3 SWAP1 SWAP4 PUSH0 SWAP4 PUSH1 0x40 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xE30 JUMPI PUSH0 SWAP4 PUSH2 0xD80 JUMPI JUMPDEST POP SWAP1 SWAP2 SWAP3 SWAP5 PUSH0 SWAP1 JUMPDEST DUP8 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 GT PUSH2 0x825 JUMPI DUP3 LT ISZERO PUSH2 0xD75 JUMPI POP SWAP1 DUP6 SWAP4 SWAP3 SWAP2 PUSH2 0xA7A DUP7 PUSH2 0x924 JUMP JUMPDEST SWAP1 DUP4 DUP10 DUP7 PUSH2 0xA87 DUP11 PUSH2 0x8A6 JUMP JUMPDEST SWAP11 DUP12 SWAP6 DUP12 PUSH2 0xAA3 PUSH2 0x4A2 DUP10 PUSH2 0xA9C DUP6 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP4 PUSH2 0x7B8 JUMP JUMPDEST SGT ISZERO PUSH2 0xC44 JUMPI PUSH2 0xBC1 SWAP3 PUSH2 0xB77 DUP9 SWAP6 SWAP4 PUSH2 0xAF9 PUSH2 0xAF3 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xAEB PUSH2 0xB85 SWAP9 SWAP12 SWAP15 DUP3 PUSH2 0xAE3 DUP6 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MLOAD AND SWAP9 PUSH2 0x7B8 JUMP JUMPDEST MLOAD AND SWAP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0x1026 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 PUSH1 0x20 SWAP11 PUSH32 0x3EBC54E500000000000000000000000000000000000000000000000000000000 DUP13 DUP9 ADD MSTORE PUSH1 0x24 DUP8 ADD SWAP4 SWAP1 PUSH1 0xE0 SWAP6 SWAP3 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP6 DUP2 DUP1 SWAP5 AND DUP9 MSTORE AND PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x65D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST DUP3 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xB6 JUMPI PUSH2 0xBEC DUP3 PUSH0 PUSH2 0xBE5 DUP16 SWAP6 PUSH2 0xBF2 SWAP8 DUP4 SWAP7 ADD MLOAD SWAP7 PUSH2 0x7B8 JUMP JUMPDEST MSTORE DUP12 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xF41 JUMP JUMPDEST SWAP2 PUSH2 0xBFD DUP2 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH0 DUP5 DUP3 ADD SWAP5 DUP6 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x825 JUMPI PUSH1 0x1 SWAP3 PUSH2 0xC21 DUP3 DUP13 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xC38 PUSH2 0xC31 DUP9 DUP13 DUP5 DUP10 PUSH2 0xF96 JUMP JUMPDEST SWAP2 DUP10 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 PUSH2 0xA38 JUMP JUMPDEST SWAP6 SWAP4 POP POP POP POP DUP3 PUSH2 0xC55 SWAP1 DUP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0xC77 DUP11 DUP9 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xC98 DUP12 DUP14 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0xCA2 SWAP1 PUSH2 0x7F9 JUMP JUMPDEST PUSH2 0xCAB SWAP1 PUSH2 0x1026 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x175D440800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND PUSH1 0x24 DUP5 ADD MSTORE SWAP6 DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE SWAP3 DUP6 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP10 AND PUSH1 0xA4 DUP5 ADD MSTORE PUSH1 0xC0 PUSH1 0xC4 DUP5 ADD MSTORE PUSH0 PUSH1 0xE4 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MSTORE SWAP2 PUSH2 0xD35 PUSH2 0x104 DUP3 PUSH2 0x65D JUMP JUMPDEST PUSH2 0xBC1 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST SWAP6 POP POP SWAP5 POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xD92 DUP2 DUP4 PUSH2 0x65D JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0xB6 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB6 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP3 MLOAD PUSH2 0xDCB DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP4 PUSH2 0xDD9 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xE04 JUMPI POP POP POP POP SWAP2 PUSH0 PUSH2 0xA30 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB6 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 SWAP4 PUSH32 0xDA001F7D00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE DUP3 PUSH1 0xA4 DUP6 ADD SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x80 PUSH1 0x44 DUP6 ADD MSTORE DUP7 MLOAD DUP1 SWAP2 MSTORE DUP5 PUSH1 0xC4 DUP6 ADD SWAP8 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xF2D JUMPI POP POP POP DUP4 PUSH2 0xF1C SWAP5 SWAP6 SWAP7 DUP4 PUSH2 0xEF5 SWAP4 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH0 DUP6 DUP3 SUB SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP4 ADD PUSH1 0x84 DUP9 ADD MSTORE MSTORE DUP1 DUP6 MSTORE ADD DUP4 PUSH2 0x65D JUMP JUMPDEST PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST DUP2 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xB6 JUMPI ADD MLOAD SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP10 MSTORE SWAP8 DUP7 ADD SWAP8 SWAP2 DUP7 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xEA1 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF6B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0xFD1 DUP4 DUP3 MLOAD SWAP3 PUSH1 0x1F NOT PUSH2 0xFC5 PUSH2 0xFAF DUP7 PUSH2 0x6AD JUMP JUMPDEST SWAP6 PUSH2 0xFBD PUSH1 0x40 MLOAD SWAP8 DUP9 PUSH2 0x65D JUMP JUMPDEST DUP1 DUP8 MSTORE PUSH2 0x6AD JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP4 DUP5 ISZERO PUSH2 0x101D JUMPI PUSH2 0xFF9 SWAP4 PUSH2 0xFF3 PUSH0 DUP8 SGT SWAP7 DUP8 PUSH0 EQ PUSH2 0x100E JUMPI SWAP2 JUMPDEST DUP5 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xE3B JUMP JUMPDEST SWAP1 ISZERO PUSH2 0x1002 JUMPI SWAP1 JUMP JUMPDEST PUSH2 0x100B SWAP1 PUSH2 0x7F9 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1017 SWAP1 PUSH2 0x7F9 JUMP JUMPDEST SWAP2 PUSH2 0xFED JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0x1030 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP2 MLOAD LT PUSH2 0x106B JUMPI PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x106B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0x10DF JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x10B7 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x1132 JUMPI JUMPDEST PUSH2 0x10F0 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x10E8 JUMP JUMPDEST SWAP1 ADDRESS EXTCODESIZE ISZERO PUSH2 0xB6 JUMPI PUSH0 PUSH2 0x11A0 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA769963800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SWAP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x881 JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL SWAP1 DUP2 PUSH2 0x12F7 JUMPI JUMPDEST POP PUSH2 0x1299 JUMPI PUSH2 0x11BA PUSH2 0x852 JUMP JUMPDEST SWAP1 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x1206 DUP5 PUSH2 0x105B JUMP JUMPDEST AND SUB PUSH2 0x1293 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 PUSH1 0x3 NOT SWAP4 DUP5 DUP2 ADD PUSH1 0x4 DUP5 ADD MSTORE DUP3 ADD SWAP4 DUP3 DUP3 DUP7 ADD SWAP6 SUB ADD SLT PUSH2 0x128F JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x128B JUMPI ADD DUP3 PUSH1 0x43 DUP3 ADD SLT ISZERO PUSH2 0x128F JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH2 0x125C DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP4 PUSH2 0x126A PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP6 MSTORE PUSH1 0x44 DUP4 DUP4 ADD ADD GT PUSH2 0x128B JUMPI SWAP1 DUP1 PUSH1 0x44 PUSH1 0x20 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP PUSH2 0x1093 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420737563636573730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP1 PUSH0 PUSH2 0x11AD JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xED 0xB8 PC PUSH5 0x8324599E32 0xB1 0xAE SWAP1 0xEC DUP8 SHL DUP3 DUP15 0x1E SWAP1 0xED EQ REVERT 0x2D 0x1E 0xB4 RETURNDATACOPY 0xC8 0xD7 CALLVALUE LOG4 SWAP1 PUSH1 0x64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"302:957:92:-:0;;;;;;;;;;;;;-1:-1:-1;;302:957:92;;;;-1:-1:-1;;;;;302:957:92;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;302:957:92;;;;;;;;;;;;;;;;;;779:14:84;;803:16;;302:957:92;;;;;;;;779:14:84;302:957:92;;;;;803:16:84;302:957:92;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;302:957:92;;;;;;-1:-1:-1;302:957:92;;;;;-1:-1:-1;302:957:92"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":1864,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_6997":{"entryPoint":1829,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_array_int256_dyn":{"entryPoint":1733,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_contract_IERC20_contract_IERC20_uint256_address_stringliteral_c5d2":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_bytes":{"entryPoint":2177,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_and_zero_memory_array_array_int256_dyn":{"entryPoint":1927,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_int256_dyn":{"entryPoint":1709,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":1899,"id":null,"parameterSlots":1,"returnSlots":1},"extract_returndata":{"entryPoint":2130,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":1629,"id":null,"parameterSlots":2,"returnSlots":0},"fun_bubbleUpRevert":{"entryPoint":4243,"id":4940,"parameterSlots":1,"returnSlots":0},"fun_callAndRevert":{"entryPoint":4411,"id":18554,"parameterSlots":2,"returnSlots":1},"fun_maxNegativeIndex":{"entryPoint":2214,"id":21868,"parameterSlots":1,"returnSlots":1},"fun_minPositiveIndex":{"entryPoint":2340,"id":21815,"parameterSlots":1,"returnSlots":1},"fun_parseSelector":{"entryPoint":4187,"id":4922,"parameterSlots":1,"returnSlots":1},"fun_queryAddLiquidityUnbalanced":{"entryPoint":3643,"id":21401,"parameterSlots":3,"returnSlots":1},"fun_queryAddLiquidityUnbalancedForTokenDeltas":{"entryPoint":3990,"id":21598,"parameterSlots":4,"returnSlots":1},"fun_toInt256":{"entryPoint":3905,"id":16063,"parameterSlots":1,"returnSlots":1},"fun_toUint256":{"entryPoint":4134,"id":15227,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":4258,"id":11265,"parameterSlots":3,"returnSlots":1},"fun_zeroOutDeltas":{"entryPoint":2460,"id":21762,"parameterSlots":4,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":1976,"id":null,"parameterSlots":2,"returnSlots":1},"negate_int256":{"entryPoint":2041,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"21207":[{"length":32,"start":2560}],"21210":[{"length":32,"start":805},{"length":32,"start":2972},{"length":32,"start":3408},{"length":32,"start":3831}]},"linkReferences":{},"object":"60406080815260049081361015610014575f80fd5b5f3560e01c806301ef39ee146106225780630d4277d1146105e75780633b064ca31461058057806348406a5414610212578063a7699638146100ba5763e3a50d821461005e575f80fd5b346100b65760806003193601126100b657610077610725565b916044359267ffffffffffffffff84116100b65761009d6100af926020953691016106c5565b6100a5610748565b9160243590610f96565b9051908152f35b5f80fd5b5090346100b657816003193601126100b6576100d4610725565b6024359067ffffffffffffffff82116100b657366023830112156100b65781830135906101008261076b565b9261010d8651948561065d565b828452602084019036602485830101116100b6575f94856020868297602484960187378301015251925af191610141610852565b928015610193579261018f9161015a82602096336110a2565b50519384937f5ab64fb80000000000000000000000000000000000000000000000000000000085528401526024830190610881565b0390fd5b50507f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000006101e08461105b565b16146101ec5750611093565b7f28f95541000000000000000000000000000000000000000000000000000000005f525ffd5b5090346100b65760606003193601126100b65761022d610725565b90602480359167ffffffffffffffff8084116100b657366023850112156100b657838201359461025c866106ad565b946102698851968761065d565b868652602096858888019160051b830101913683116100b65786899101915b83831061057057505050506044359673ffffffffffffffffffffffffffffffffffffffff80891690818a036100b6576102c28a8986610e3b565b918351927f0f710888000000000000000000000000000000000000000000000000000000008b8501528286168985015260448401526064830152608060848301525f60a483015260a4825260e082018281108682111761054557835261034a91907f00000000000000000000000000000000000000000000000000000000000000001661113b565b92835184019388818187019603126100b657888101519182116100b657019280603f850112156100b65787840151610381816106ad565b9461038e8451968761065d565b818652838a87019260051b8201019283116100b657838a9101915b83831061053557505050506103be8651610787565b975f5b8751811015610441576103dd6103d782876107b8565b51610f41565b6103ea6103d7838b6107b8565b905f8282039212818312811691831390151617610416579060019161040f828d6107b8565b52016103c1565b876011887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50908591898989886104538251610787565b955f5b835181101561047f578061046e88886001948e610f96565b610478828b6107b8565b5201610456565b50876104b3866104ad6104a86104a261049b8f8e868f9261099c565b80946107b8565b516107f9565b611026565b956107b8565b5192670de0b6b3a76400009485810295818704149015171561050b5783156104e157505051910460011c8152f35b6012907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b82518152918101918a91016103a9565b876041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b8235815291810191899101610288565b50346100b65760806003193601126100b65761059a610725565b67ffffffffffffffff92906024358481116100b6576105bc90369084016106c5565b6044359485116100b6576105d86100af936020963691016106c5565b906105e1610748565b9261099c565b50346100b65760206003193601126100b65781359167ffffffffffffffff83116100b65761061d6100af916020943691016106c5565b610924565b50346100b65760206003193601126100b65781359167ffffffffffffffff83116100b6576106586100af916020943691016106c5565b6108a6565b90601f601f19910116810190811067ffffffffffffffff82111761068057604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116106805760051b60200190565b9080601f830112156100b65760209082356106df816106ad565b936106ed604051958661065d565b81855260208086019260051b8201019283116100b657602001905b828210610716575050505090565b81358152908301908301610708565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100b657565b6064359073ffffffffffffffffffffffffffffffffffffffff821682036100b657565b67ffffffffffffffff811161068057601f01601f191660200190565b90610791826106ad565b61079e604051918261065d565b828152601f196107ae82946106ad565b0190602036910137565b80518210156107cc5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f80000000000000000000000000000000000000000000000000000000000000008114610825575f0390565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b3d1561087c573d906108638261076b565b91610871604051938461065d565b82523d5f602084013e565b606090565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b7f800000000000000000000000000000000000000000000000000000000000000091905f805b825181101561091e575f6108e082856107b8565b51128061090b575b6108f5575b6001016108cc565b8094506109039150826107b8565b5192806108ed565b508461091782856107b8565b51136108e8565b50925050565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91905f805b825181101561091e575f61095e82856107b8565b511380610989575b610973575b60010161094a565b8094506109819150826107b8565b51928061096b565b508461099582856107b8565b5112610966565b9290935f93604051917fca4f280300000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff821660048401525f8360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa928315610e30575f93610d80575b50909192945f905b87517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161082557821015610d7557509085939291610a7a86610924565b90838986610a878a6108a6565b9a8b958b610aa36104a289610a9c85856107b8565b51936107b8565b1315610c4457610bc192610b77889593610af9610af38573ffffffffffffffffffffffffffffffffffffffff610aeb610b85989b9e82610ae3858b6107b8565b5116986107b8565b5116976107b8565b51611026565b60405195869460209a7f3ebc54e5000000000000000000000000000000000000000000000000000000008c88015260248701939060e095929373ffffffffffffffffffffffffffffffffffffffff8095818094168852166020870152166040850152606084015216608082015260c060a08201525f60c08201520190565b03601f19810183528261065d565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661113b565b82818051810103126100b657610bec825f610be58f95610bf29783960151966107b8565b528b6107b8565b52610f41565b91610bfd818b6107b8565b515f848201948512911290801582169115161761082557600192610c21828c6107b8565b52610c38610c31888c8489610f96565b91896107b8565b52019091929395610a38565b95935050505082610c5590876107b8565b5173ffffffffffffffffffffffffffffffffffffffff1690610c778a886107b8565b5173ffffffffffffffffffffffffffffffffffffffff16610c988b8d6107b8565b51610ca2906107f9565b610cab90611026565b6040517f175d44080000000000000000000000000000000000000000000000000000000060208083019190915273ffffffffffffffffffffffffffffffffffffffff8a8116602484015295861660448301529285166064820152608481019190915292891660a484015260c060c48401525f60e480850191909152835291610d356101048261065d565b610bc19073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661113b565b955050945050505090565b9092503d805f833e610d92818361065d565b81019060209081818403126100b65780519067ffffffffffffffff82116100b657019180601f840112156100b6578251610dcb816106ad565b93610dd9604051958661065d565b818552838086019260051b8201019283116100b6578301905b828210610e045750505050915f610a30565b815173ffffffffffffffffffffffffffffffffffffffff811681036100b6578152908301908301610df2565b6040513d5f823e3d90fd5b90929173ffffffffffffffffffffffffffffffffffffffff604051916020937fda001f7d00000000000000000000000000000000000000000000000000000000858501528260a48501911660248501526080604485015286518091528460c485019701905f5b818110610f2d5750505083610f1c94959683610ef5931660648601525f858203917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8301608488015252808552018361065d565b7f00000000000000000000000000000000000000000000000000000000000000001661113b565b81818051810103126100b657015190565b825189529786019791860191600101610ea1565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111610f6b5790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b929091610fd183825192601f19610fc5610faf866106ad565b95610fbd604051978861065d565b8087526106ad565b013660208601376107b8565b5193841561101d57610ff993610ff35f871396875f1461100e57915b846107b8565b52610e3b565b90156110025790565b61100b906107f9565b90565b611017906107f9565b91610fed565b50505050505f90565b5f81126110305790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600481511061106b576020015190565b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b80511561106b57805190602001fd5b906110df57508051156110b757602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611132575b6110f0575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156110e8565b90303b156100b6575f6111a091604051809381927fa769963800000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff8597166004840152604060248401526044830190610881565b038183305af190816112f7575b50611299576111ba610852565b907f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000006112068461105b565b1603611293578151916020600319938481016004840152820193828286019503011261128f5760248101519067ffffffffffffffff821161128b57018260438201121561128f5760248101519061125c8261076b565b9361126a604051958661065d565b8285526044838301011161128b5790806044602093018386015e8301015290565b8280fd5b5080fd5b50611093565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6578706563746564207375636365737300000000000000000000000000006044820152fd5b90915067ffffffffffffffff8111610680576040525f905f6111ad56fea2646970667358221220edb858648324599e32b1ae90ec871b828e1e90ed14fd2d1eb43ec8d734a4906064736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1EF39EE EQ PUSH2 0x622 JUMPI DUP1 PUSH4 0xD4277D1 EQ PUSH2 0x5E7 JUMPI DUP1 PUSH4 0x3B064CA3 EQ PUSH2 0x580 JUMPI DUP1 PUSH4 0x48406A54 EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0xA7699638 EQ PUSH2 0xBA JUMPI PUSH4 0xE3A50D82 EQ PUSH2 0x5E JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x77 PUSH2 0x725 JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0xB6 JUMPI PUSH2 0x9D PUSH2 0xAF SWAP3 PUSH1 0x20 SWAP6 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0xA5 PUSH2 0x748 JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xF96 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0xB6 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0xD4 PUSH2 0x725 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB6 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP2 DUP4 ADD CALLDATALOAD SWAP1 PUSH2 0x100 DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP3 PUSH2 0x10D DUP7 MLOAD SWAP5 DUP6 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP1 CALLDATASIZE PUSH1 0x24 DUP6 DUP4 ADD ADD GT PUSH2 0xB6 JUMPI PUSH0 SWAP5 DUP6 PUSH1 0x20 DUP7 DUP3 SWAP8 PUSH1 0x24 DUP5 SWAP7 ADD DUP8 CALLDATACOPY DUP4 ADD ADD MSTORE MLOAD SWAP3 GAS CALL SWAP2 PUSH2 0x141 PUSH2 0x852 JUMP JUMPDEST SWAP3 DUP1 ISZERO PUSH2 0x193 JUMPI SWAP3 PUSH2 0x18F SWAP2 PUSH2 0x15A DUP3 PUSH1 0x20 SWAP7 CALLER PUSH2 0x10A2 JUMP JUMPDEST POP MLOAD SWAP4 DUP5 SWAP4 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x881 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP POP PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x1E0 DUP5 PUSH2 0x105B JUMP JUMPDEST AND EQ PUSH2 0x1EC JUMPI POP PUSH2 0x1093 JUMP JUMPDEST PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x22D PUSH2 0x725 JUMP JUMPDEST SWAP1 PUSH1 0x24 DUP1 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP5 GT PUSH2 0xB6 JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP4 DUP3 ADD CALLDATALOAD SWAP5 PUSH2 0x25C DUP7 PUSH2 0x6AD JUMP JUMPDEST SWAP5 PUSH2 0x269 DUP9 MLOAD SWAP7 DUP8 PUSH2 0x65D JUMP JUMPDEST DUP7 DUP7 MSTORE PUSH1 0x20 SWAP7 DUP6 DUP9 DUP9 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0xB6 JUMPI DUP7 DUP10 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x570 JUMPI POP POP POP POP PUSH1 0x44 CALLDATALOAD SWAP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP1 DUP2 DUP11 SUB PUSH2 0xB6 JUMPI PUSH2 0x2C2 DUP11 DUP10 DUP7 PUSH2 0xE3B JUMP JUMPDEST SWAP2 DUP4 MLOAD SWAP3 PUSH32 0xF71088800000000000000000000000000000000000000000000000000000000 DUP12 DUP6 ADD MSTORE DUP3 DUP7 AND DUP10 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x80 PUSH1 0x84 DUP4 ADD MSTORE PUSH0 PUSH1 0xA4 DUP4 ADD MSTORE PUSH1 0xA4 DUP3 MSTORE PUSH1 0xE0 DUP3 ADD DUP3 DUP2 LT DUP7 DUP3 GT OR PUSH2 0x545 JUMPI DUP4 MSTORE PUSH2 0x34A SWAP2 SWAP1 PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST SWAP3 DUP4 MLOAD DUP5 ADD SWAP4 DUP9 DUP2 DUP2 DUP8 ADD SWAP7 SUB SLT PUSH2 0xB6 JUMPI DUP9 DUP2 ADD MLOAD SWAP2 DUP3 GT PUSH2 0xB6 JUMPI ADD SWAP3 DUP1 PUSH1 0x3F DUP6 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP8 DUP5 ADD MLOAD PUSH2 0x381 DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP5 PUSH2 0x38E DUP5 MLOAD SWAP7 DUP8 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP7 MSTORE DUP4 DUP11 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI DUP4 DUP11 SWAP2 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x535 JUMPI POP POP POP POP PUSH2 0x3BE DUP7 MLOAD PUSH2 0x787 JUMP JUMPDEST SWAP8 PUSH0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x441 JUMPI PUSH2 0x3DD PUSH2 0x3D7 DUP3 DUP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0xF41 JUMP JUMPDEST PUSH2 0x3EA PUSH2 0x3D7 DUP4 DUP12 PUSH2 0x7B8 JUMP JUMPDEST SWAP1 PUSH0 DUP3 DUP3 SUB SWAP3 SLT DUP2 DUP4 SLT DUP2 AND SWAP2 DUP4 SGT SWAP1 ISZERO AND OR PUSH2 0x416 JUMPI SWAP1 PUSH1 0x1 SWAP2 PUSH2 0x40F DUP3 DUP14 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD PUSH2 0x3C1 JUMP JUMPDEST DUP8 PUSH1 0x11 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 DUP6 SWAP2 DUP10 DUP10 DUP10 DUP9 PUSH2 0x453 DUP3 MLOAD PUSH2 0x787 JUMP JUMPDEST SWAP6 PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x47F JUMPI DUP1 PUSH2 0x46E DUP9 DUP9 PUSH1 0x1 SWAP5 DUP15 PUSH2 0xF96 JUMP JUMPDEST PUSH2 0x478 DUP3 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD PUSH2 0x456 JUMP JUMPDEST POP DUP8 PUSH2 0x4B3 DUP7 PUSH2 0x4AD PUSH2 0x4A8 PUSH2 0x4A2 PUSH2 0x49B DUP16 DUP15 DUP7 DUP16 SWAP3 PUSH2 0x99C JUMP JUMPDEST DUP1 SWAP5 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0x7F9 JUMP JUMPDEST PUSH2 0x1026 JUMP JUMPDEST SWAP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 DUP2 MUL SWAP6 DUP2 DUP8 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x50B JUMPI DUP4 ISZERO PUSH2 0x4E1 JUMPI POP POP MLOAD SWAP2 DIV PUSH1 0x1 SHR DUP2 MSTORE RETURN JUMPDEST PUSH1 0x12 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP3 MLOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP11 SWAP2 ADD PUSH2 0x3A9 JUMP JUMPDEST DUP8 PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE SWAP2 DUP2 ADD SWAP2 DUP10 SWAP2 ADD PUSH2 0x288 JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI PUSH2 0x59A PUSH2 0x725 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 PUSH1 0x24 CALLDATALOAD DUP5 DUP2 GT PUSH2 0xB6 JUMPI PUSH2 0x5BC SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP5 DUP6 GT PUSH2 0xB6 JUMPI PUSH2 0x5D8 PUSH2 0xAF SWAP4 PUSH1 0x20 SWAP7 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST SWAP1 PUSH2 0x5E1 PUSH2 0x748 JUMP JUMPDEST SWAP3 PUSH2 0x99C JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0xB6 JUMPI PUSH2 0x61D PUSH2 0xAF SWAP2 PUSH1 0x20 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0x924 JUMP JUMPDEST POP CALLVALUE PUSH2 0xB6 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xB6 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0xB6 JUMPI PUSH2 0x658 PUSH2 0xAF SWAP2 PUSH1 0x20 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x6C5 JUMP JUMPDEST PUSH2 0x8A6 JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xB6 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x6DF DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP4 PUSH2 0x6ED PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x716 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x708 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB6 JUMPI JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xB6 JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x791 DUP3 PUSH2 0x6AD JUMP JUMPDEST PUSH2 0x79E PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x7AE DUP3 SWAP5 PUSH2 0x6AD JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x7CC JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x825 JUMPI PUSH0 SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x87C JUMPI RETURNDATASIZE SWAP1 PUSH2 0x863 DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP2 PUSH2 0x871 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x65D JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 SWAP2 SWAP1 PUSH0 DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x91E JUMPI PUSH0 PUSH2 0x8E0 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SLT DUP1 PUSH2 0x90B JUMPI JUMPDEST PUSH2 0x8F5 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x8CC JUMP JUMPDEST DUP1 SWAP5 POP PUSH2 0x903 SWAP2 POP DUP3 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 DUP1 PUSH2 0x8ED JUMP JUMPDEST POP DUP5 PUSH2 0x917 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SGT PUSH2 0x8E8 JUMP JUMPDEST POP SWAP3 POP POP JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 PUSH0 DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x91E JUMPI PUSH0 PUSH2 0x95E DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SGT DUP1 PUSH2 0x989 JUMPI JUMPDEST PUSH2 0x973 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x94A JUMP JUMPDEST DUP1 SWAP5 POP PUSH2 0x981 SWAP2 POP DUP3 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP3 DUP1 PUSH2 0x96B JUMP JUMPDEST POP DUP5 PUSH2 0x995 DUP3 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SLT PUSH2 0x966 JUMP JUMPDEST SWAP3 SWAP1 SWAP4 PUSH0 SWAP4 PUSH1 0x40 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xE30 JUMPI PUSH0 SWAP4 PUSH2 0xD80 JUMPI JUMPDEST POP SWAP1 SWAP2 SWAP3 SWAP5 PUSH0 SWAP1 JUMPDEST DUP8 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 GT PUSH2 0x825 JUMPI DUP3 LT ISZERO PUSH2 0xD75 JUMPI POP SWAP1 DUP6 SWAP4 SWAP3 SWAP2 PUSH2 0xA7A DUP7 PUSH2 0x924 JUMP JUMPDEST SWAP1 DUP4 DUP10 DUP7 PUSH2 0xA87 DUP11 PUSH2 0x8A6 JUMP JUMPDEST SWAP11 DUP12 SWAP6 DUP12 PUSH2 0xAA3 PUSH2 0x4A2 DUP10 PUSH2 0xA9C DUP6 DUP6 PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP4 PUSH2 0x7B8 JUMP JUMPDEST SGT ISZERO PUSH2 0xC44 JUMPI PUSH2 0xBC1 SWAP3 PUSH2 0xB77 DUP9 SWAP6 SWAP4 PUSH2 0xAF9 PUSH2 0xAF3 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xAEB PUSH2 0xB85 SWAP9 SWAP12 SWAP15 DUP3 PUSH2 0xAE3 DUP6 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MLOAD AND SWAP9 PUSH2 0x7B8 JUMP JUMPDEST MLOAD AND SWAP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0x1026 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 PUSH1 0x20 SWAP11 PUSH32 0x3EBC54E500000000000000000000000000000000000000000000000000000000 DUP13 DUP9 ADD MSTORE PUSH1 0x24 DUP8 ADD SWAP4 SWAP1 PUSH1 0xE0 SWAP6 SWAP3 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP6 DUP2 DUP1 SWAP5 AND DUP9 MSTORE AND PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xC0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x65D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST DUP3 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xB6 JUMPI PUSH2 0xBEC DUP3 PUSH0 PUSH2 0xBE5 DUP16 SWAP6 PUSH2 0xBF2 SWAP8 DUP4 SWAP7 ADD MLOAD SWAP7 PUSH2 0x7B8 JUMP JUMPDEST MSTORE DUP12 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xF41 JUMP JUMPDEST SWAP2 PUSH2 0xBFD DUP2 DUP12 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH0 DUP5 DUP3 ADD SWAP5 DUP6 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x825 JUMPI PUSH1 0x1 SWAP3 PUSH2 0xC21 DUP3 DUP13 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xC38 PUSH2 0xC31 DUP9 DUP13 DUP5 DUP10 PUSH2 0xF96 JUMP JUMPDEST SWAP2 DUP10 PUSH2 0x7B8 JUMP JUMPDEST MSTORE ADD SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 PUSH2 0xA38 JUMP JUMPDEST SWAP6 SWAP4 POP POP POP POP DUP3 PUSH2 0xC55 SWAP1 DUP8 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0xC77 DUP11 DUP9 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xC98 DUP12 DUP14 PUSH2 0x7B8 JUMP JUMPDEST MLOAD PUSH2 0xCA2 SWAP1 PUSH2 0x7F9 JUMP JUMPDEST PUSH2 0xCAB SWAP1 PUSH2 0x1026 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x175D440800000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND PUSH1 0x24 DUP5 ADD MSTORE SWAP6 DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE SWAP3 DUP6 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP10 AND PUSH1 0xA4 DUP5 ADD MSTORE PUSH1 0xC0 PUSH1 0xC4 DUP5 ADD MSTORE PUSH0 PUSH1 0xE4 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 MSTORE SWAP2 PUSH2 0xD35 PUSH2 0x104 DUP3 PUSH2 0x65D JUMP JUMPDEST PUSH2 0xBC1 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST SWAP6 POP POP SWAP5 POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xD92 DUP2 DUP4 PUSH2 0x65D JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0xB6 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB6 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0xB6 JUMPI DUP3 MLOAD PUSH2 0xDCB DUP2 PUSH2 0x6AD JUMP JUMPDEST SWAP4 PUSH2 0xDD9 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xB6 JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xE04 JUMPI POP POP POP POP SWAP2 PUSH0 PUSH2 0xA30 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xB6 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xDF2 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 SWAP4 PUSH32 0xDA001F7D00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE DUP3 PUSH1 0xA4 DUP6 ADD SWAP2 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x80 PUSH1 0x44 DUP6 ADD MSTORE DUP7 MLOAD DUP1 SWAP2 MSTORE DUP5 PUSH1 0xC4 DUP6 ADD SWAP8 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xF2D JUMPI POP POP POP DUP4 PUSH2 0xF1C SWAP5 SWAP6 SWAP7 DUP4 PUSH2 0xEF5 SWAP4 AND PUSH1 0x64 DUP7 ADD MSTORE PUSH0 DUP6 DUP3 SUB SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP4 ADD PUSH1 0x84 DUP9 ADD MSTORE MSTORE DUP1 DUP6 MSTORE ADD DUP4 PUSH2 0x65D JUMP JUMPDEST PUSH32 0x0 AND PUSH2 0x113B JUMP JUMPDEST DUP2 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0xB6 JUMPI ADD MLOAD SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP10 MSTORE SWAP8 DUP7 ADD SWAP8 SWAP2 DUP7 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xEA1 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF6B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0xFD1 DUP4 DUP3 MLOAD SWAP3 PUSH1 0x1F NOT PUSH2 0xFC5 PUSH2 0xFAF DUP7 PUSH2 0x6AD JUMP JUMPDEST SWAP6 PUSH2 0xFBD PUSH1 0x40 MLOAD SWAP8 DUP9 PUSH2 0x65D JUMP JUMPDEST DUP1 DUP8 MSTORE PUSH2 0x6AD JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY PUSH2 0x7B8 JUMP JUMPDEST MLOAD SWAP4 DUP5 ISZERO PUSH2 0x101D JUMPI PUSH2 0xFF9 SWAP4 PUSH2 0xFF3 PUSH0 DUP8 SGT SWAP7 DUP8 PUSH0 EQ PUSH2 0x100E JUMPI SWAP2 JUMPDEST DUP5 PUSH2 0x7B8 JUMP JUMPDEST MSTORE PUSH2 0xE3B JUMP JUMPDEST SWAP1 ISZERO PUSH2 0x1002 JUMPI SWAP1 JUMP JUMPDEST PUSH2 0x100B SWAP1 PUSH2 0x7F9 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x1017 SWAP1 PUSH2 0x7F9 JUMP JUMPDEST SWAP2 PUSH2 0xFED JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0x1030 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP2 MLOAD LT PUSH2 0x106B JUMPI PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x106B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0x10DF JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x10B7 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x1132 JUMPI JUMPDEST PUSH2 0x10F0 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x10E8 JUMP JUMPDEST SWAP1 ADDRESS EXTCODESIZE ISZERO PUSH2 0xB6 JUMPI PUSH0 PUSH2 0x11A0 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA769963800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SWAP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x881 JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL SWAP1 DUP2 PUSH2 0x12F7 JUMPI JUMPDEST POP PUSH2 0x1299 JUMPI PUSH2 0x11BA PUSH2 0x852 JUMP JUMPDEST SWAP1 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x1206 DUP5 PUSH2 0x105B JUMP JUMPDEST AND SUB PUSH2 0x1293 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 PUSH1 0x3 NOT SWAP4 DUP5 DUP2 ADD PUSH1 0x4 DUP5 ADD MSTORE DUP3 ADD SWAP4 DUP3 DUP3 DUP7 ADD SWAP6 SUB ADD SLT PUSH2 0x128F JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x128B JUMPI ADD DUP3 PUSH1 0x43 DUP3 ADD SLT ISZERO PUSH2 0x128F JUMPI PUSH1 0x24 DUP2 ADD MLOAD SWAP1 PUSH2 0x125C DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP4 PUSH2 0x126A PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x65D JUMP JUMPDEST DUP3 DUP6 MSTORE PUSH1 0x44 DUP4 DUP4 ADD ADD GT PUSH2 0x128B JUMPI SWAP1 DUP1 PUSH1 0x44 PUSH1 0x20 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP PUSH2 0x1093 JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420737563636573730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE PUSH0 SWAP1 PUSH0 PUSH2 0x11AD JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xED 0xB8 PC PUSH5 0x8324599E32 0xB1 0xAE SWAP1 0xEC DUP8 SHL DUP3 DUP15 0x1E SWAP1 0xED EQ REVERT 0x2D 0x1E 0xB4 RETURNDATACOPY 0xC8 0xD7 CALLVALUE LOG4 SWAP1 PUSH1 0x64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"302:957:92:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1084:26:74;;;302:957:92;;;;;;;;-1:-1:-1;;302:957:92;;;;;;;:::i;:::-;;;;;;;;;;;658:76;302:957;;;;;;;:::i;:::-;;;:::i;:::-;;;;658:76;;:::i;:::-;302:957;;;;;;;;;;;;;;;;;-1:-1:-1;;302:957:92;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;811:19:74;;;;;;;:::i;:::-;840:718;;;;;990:10;302:957:92;990:10:74;955:63;990:10;302:957:92;990:10:74;;955:63;:::i;:::-;;302:957:92;1084:26:74;;;;;;;;302:957:92;;;;;;:::i;:::-;1084:26:74;;;840:718;1276:33;;1344:27;302:957:92;1276:33:74;;;:::i;:::-;302:957:92;1327:44:74;1323:110;;1540:6;;:::i;1323:110::-;1398:20;302:957:92;1398:20:74;302:957:92;1398:20:74;302:957:92;;;;;;;-1:-1:-1;;302:957:92;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1265:58:84;;;;;:::i;:::-;302:957:92;;;3717:247:84;3765:49;3717:247;;;;302:957:92;;;3717:247:84;;;302:957:92;;;;;;;;;;;;;;;;;;;;3717:247:84;;302:957:92;;;;;;;;;;;;;;3643:339:84;;302:957:92;3687:7:84;302:957:92;3643:339:84;:::i;:::-;302:957:92;;;3615:410:84;;;;;;;;302:957:92;;;;;3615:410:84;;;302:957:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1544:35:84;302:957:92;;1544:35:84;:::i;:::-;1594:13;302:957:92;1636:3:84;302:957:92;;1609:25:84;;;;;1667:36;:25;;;;:::i;:::-;302:957:92;1667:36:84;:::i;:::-;1706:28;:17;;;;:::i;:28::-;302:957:92;;;;;;;;;;;;;;;;;;;;;1655:79:84;302:957:92;1655:79:84;;;;;:::i;:::-;302:957:92;;1594:13:84;;302:957:92;;;;;;;;;;1609:25:84;;;;;;;;;1890:35;302:957:92;;1890:35:84;:::i;:::-;1940:13;302:957:92;1982:3:84;302:957:92;;1955:25:84;;;;;2016:67;;;;302:957:92;2016:67:84;;;:::i;:::-;2001:82;;;;:::i;:::-;302:957:92;;1940:13:84;;1955:25;;;2549:35;1955:25;2476:42;2477:28;2478:27;2214:47;1955:25;;;;;2214:47;:::i;:::-;2478:27;;;:::i;:::-;302:957:92;2477:28:84;:::i;:::-;2476:42;:::i;:::-;2549:35;;:::i;:::-;302:957:92;465:4:38;;;;;;;;;;;;;;;;;302:957:92;;;;;;;;;;;;;;;;;;;;;;;465:4:38;302:957:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;302:957:92;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;933:47;302:957;;;;;;;:::i;:::-;;;;:::i;:::-;933:47;;:::i;302:957::-;;;;;;-1:-1:-1;;302:957:92;;;;;;;;;;;;;;1091:24;302:957;;;;;;;:::i;:::-;1091:24;:::i;302:957::-;;;;;;-1:-1:-1;;302:957:92;;;;;;;;;;;;;;1226:24;302:957;;;;;;;:::i;:::-;1226:24;:::i;302:957::-;;;-1:-1:-1;;302:957:92;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;302:957:92;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;302:957:92;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;302:957:92;;;;:::o;:::-;;;:::o;:::-;;-1:-1:-1;;302:957:92;;;;;;;;;;;;;;;;;-1:-1:-1;302:957:92;;;;;;;;;;;:::o;8915:320:84:-;9026:16;;8915:320;302:957:92;;9090:3:84;302:957:92;;9072:16:84;;;;;302:957:92;9113:8:84;;;;:::i;:::-;302:957:92;9113:12:84;:30;;;9090:3;9109:110;;9090:3;302:957:92;;9057:13:84;;9109:110;9169:8;;;;;;;;:::i;:::-;302:957:92;;9195:9:84;9109:110;;9113:30;9129:8;;;;;;:::i;:::-;302:957:92;9129:14:84;9113:30;;9072:16;;;;;8915:320::o;8488:::-;8599:16;;8488:320;302:957:92;;8663:3:84;302:957:92;;8645:16:84;;;;;302:957:92;8686:8:84;;;;:::i;:::-;302:957:92;8686:12:84;:30;;;8663:3;8682:110;;8663:3;302:957:92;;8630:13:84;;8682:110;8742:8;;;;;;;;:::i;:::-;302:957:92;;8768:9:84;8682:110;;8686:30;8702:8;;;;;;:::i;:::-;302:957:92;8702:14:84;8686:30;;6265:2115;;;;302:957:92;;;;6588:26:84;302:957:92;6588:26:84;;302:957:92;;;6588:26:84;;;302:957:92;;6588:6:84;302:957:92;6588:6:84;302:957:92;6588:6:84;302:957:92;6588:26:84;;;;;;;302:957:92;6588:26:84;;;6265:2115;6630:13;;;;;302:957:92;6625:1710:84;6668:3;302:957:92;;;;;;;;;;6645:21:84;;;;;6786:28;;;;;;;;;:::i;:::-;6852;;;;;;;:::i;:::-;6895:23;;;7009:32;7044:33;7045:32;7009;;;;;:::i;:::-;302:957:92;7045:32:84;;:::i;7044:33::-;-1:-1:-1;7045:32:84;;;4287:397;7097:39;4361:305;7097:39;;;7402:35;:23;7097:39;302:957:92;7352:28:84;4361:305;7097:39;7154:40;7303:27;;;;;;:::i;:::-;302:957:92;;7352:28:84;;:::i;:::-;302:957:92;;7402:23:84;;:::i;:::-;302:957:92;7402:35:84;:::i;:::-;302:957:92;;;;;;4361:305:84;4409:44;4361:305;;;;302:957:92;4361:305:84;;302:957:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4361:305:84;;-1:-1:-1;;4361:305:84;;;;;;:::i;:::-;302:957:92;4331:7:84;302:957:92;4287:397:84;:::i;:::-;302:957:92;;;;4259:466:84;;302:957:92;;;;8025:30:84;4259:466;302:957:92;7984:27:84;4259:466;;8097:23;4259:466;;;;302:957:92;7005:922:84;7984:27;:::i;:::-;302:957:92;8025:30:84;;:::i;:::-;302:957:92;8097:23:84;:::i;:::-;8069:51;;;;;:::i;:::-;302:957:92;;;;;;;;;;;;;;;;;;;;;6665:1:84;8069:51;;;;;:::i;:::-;302:957:92;8134:190:84;8164:160;;;;;;:::i;:::-;8134:190;;;:::i;:::-;302:957:92;;6630:13:84;;;;;;;7005:922;7522:39;;;;;;7579:40;7729:28;;;;:::i;:::-;302:957:92;;;7779:27:84;;;;;:::i;:::-;302:957:92;;;7830:23:84;;;;:::i;:::-;302:957:92;7829:24:84;;;:::i;:::-;7828:38;;;:::i;:::-;302:957:92;;5111:45:84;302:957:92;5063:307:84;;;;;;;302:957:92;;;;;5063:307:84;;302:957:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;302:957:92;;;;;;;;5063:307:84;;302:957:92;5063:307:84;302:957:92;;5063:307:84;:::i;:::-;4989:399;;302:957:92;5033:7:84;302:957:92;4989:399:84;:::i;6645:21::-;;;;;;;;;6265:2115;:::o;6588:26::-;;;;;;302:957:92;6588:26:84;;;;;;:::i;:::-;;;302:957:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;6588:26:84;;;;;;;;302:957:92;;;;;;;;;;;;;;;;;;;;6588:26:84;302:957:92;;;;;;;;;2820:599:84;;;;302:957:92;;;3109:244:84;;;3157:44;3109:244;;;;302:957:92;;;;;;3109:244:84;;;302:957:92;;;;;;;;;;;;;;;;;;-1:-1:-1;302:957:92;;;;;;;;;;3035:336:84;302:957:92;;;;3109:244:84;302:957:92;;;;;;-1:-1:-1;302:957:92;;;;;;;;;;;;3109:244:84;;;;;;:::i;:::-;3079:7;302:957:92;3035:336:84;:::i;:::-;302:957:92;;;;3007:405:84;;302:957:92;;;;3007:405:84;302:957:92;2820:599:84;:::o;302:957:92:-;;;;;;;;;;;;;;;;;34380:314:70;34573:16;34557:33;;34553:105;;34380:314;:::o;34553:105::-;34613:34;;;;302:957:92;;34613:34:70;;5657:602:84;;;;5950:18;302:957:92;;;;-1:-1:-1;;302:957:92;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;5950:18:84;:::i;:::-;302:957:92;5983:10:84;;;5979:49;;6141:64;6081:9;6038:70;302:957:92;6081:9:84;;:26;;;;;;;;6038:70;;:::i;:::-;302:957:92;6141:64:84;:::i;:::-;6224:28;;;;5657:602;:::o;6224:28::-;6245:7;;;:::i;:::-;5657:602;:::o;6081:26::-;6101:6;;;:::i;:::-;6081:26;;;5979:49;6009:8;;;;;302:957:92;6009:8:84;:::o;17171:193:70:-;17258:1;17250:9;;17246:81;;17171:193;:::o;17246:81::-;17282:34;17258:1;17282:34;;302:957:92;;17258:1:70;17282:34;1336:351:36;1463:1;302:957:92;;1443:21:36;1439:82;;1530:151;;;1336:351;:::o;1439:82::-;1487:23;;;1463:1;1487:23;;1741:504;302:957:92;;1881:21:36;:17;;2008:160;;;;;;4437:582:60;;4609:8;;-1:-1:-1;302:957:92;;5690:21:60;:17;;5815:105;;;;;;5686:301;5957:19;5710:1;5957:19;;5710:1;5957:19;4605:408;302:957:92;;4857:22:60;:49;;;4605:408;4853:119;;4985:17;;:::o;4853:119::-;302:957:92;4933:24:60;;4878:1;4933:24;302:957:92;4933:24:60;302:957:92;;4878:1:60;4933:24;4857:49;4883:18;;;:23;4857:49;;303:324:74;;430:4;408:60;;;;;302:957:92;;;;408:60:74;;;;302:957:92;408:60:74;;302:957:92;408:60:74;302:957:92;;408:60:74;;;302:957:92;;;;;;;;;;;:::i;:::-;408:60:74;430:4;;;408:60;;;;;;303:324;-1:-1:-1;404:217:74;;523:98;;:::i;:::-;720:36:36;787:15;302:957:92;720:36:36;;;:::i;:::-;302:957:92;770:32:36;766:185;;302:957:92;;1013:179:36;1209:30;-1:-1:-1;;1013:179:36;;;;408:60:74;1013:179:36;;;1209:30;;;;;;;302:957:92;;;;;;;1209:30:36;;302:957:92;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;1209:30:36;302:957:92;;;;;;;;;;565:45:74;:::o;302:957:92:-;;;;;;;;766:185:36;930:9;;:::i;404:217:74:-;302:957:92;;;483:28:74;;;302:957:92;408:60:74;483:28;;302:957:92;;;;;;;;;;;483:28:74;408:60;302:957:92;;;;;;;;;;408:60:74;;;;"},"methodIdentifiers":{"calculateAddLiquidityUnbalancedPriceImpact(address,uint256[],address)":"48406a54","callAndRevertHook(address,bytes)":"a7699638","maxNegativeIndex(int256[])":"01ef39ee","minPositiveIndex(int256[])":"0d4277d1","queryAddLiquidityUnbalancedForTokenDeltas(address,uint256,int256[],address)":"e3a50d82","zeroOutDeltas(address,int256[],int256[],address)":"3b064ca3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IRouter\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"calculateAddLiquidityUnbalancedPriceImpact\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"priceImpact\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"callAndRevertHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"array\",\"type\":\"int256[]\"}],\"name\":\"maxNegativeIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"array\",\"type\":\"int256[]\"}],\"name\":\"minPositiveIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"int256[]\",\"name\":\"deltas\",\"type\":\"int256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"queryAddLiquidityUnbalancedForTokenDeltas\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"deltaBPT\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"int256[]\",\"name\":\"deltas\",\"type\":\"int256[]\"},{\"internalType\":\"int256[]\",\"name\":\"deltaBPTs\",\"type\":\"int256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"zeroOutDeltas\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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.\"}],\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/PriceImpactHelperMock.sol\":\"PriceImpactHelperMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":{\"keccak256\":\"0x8e8e4b32c57834bd468f893c08f87323dd3c18043690055fd0523318cf82f156\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9eccee85635070311d65d1f4335539bcb604aed550f24c136e31bb9db405e8af\",\"dweb:/ipfs/QmQwUaVJn2T2mLdp4ydG7jBXhtuwXeE5vfKyLEDdu18Lq8\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"contracts/CallAndRevert.sol\":{\"keccak256\":\"0xe0f09e833265592b398c7607db658e3541b800f66c9536ee129ae6863e4185f2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://bc7dd31dd95f738debb5ca8c8b80e90384c1d8b72dc70e02dd7ae22e7c77f337\",\"dweb:/ipfs/QmNaJXyazNRD1fbqs6QJSwB3VWKu3ZjHqecMqKg57UeMuS\"]},\"contracts/PriceImpactHelper.sol\":{\"keccak256\":\"0x34a595cb82fce48cfc22cd1b900491ed4cdb07673bb902b7a35e0dc974f72230\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5c359ca8ce0db4171f093d983ebc264993b3a720590790a8f6859fbe3cb5fb15\",\"dweb:/ipfs/Qme8Tr71i5eosQWY4mSwvNFqnEuxd46ipRLSBq5zARwA1V\"]},\"contracts/test/PriceImpactHelperMock.sol\":{\"keccak256\":\"0xe26253f71789842fffe3d5e48f5fb13a7aed480f8027c1084a0601b02d9fb3f9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70f67c49efb5abf6e726635b6e797a7b4e335d4cd9650affce44c19305511566\",\"dweb:/ipfs/QmU2XCzDpMjBrhdaQJ6aAvqPJ2xQbomTpJGEmG6BpDAKrE\"]}},\"version\":1}"}},"contracts/test/ProtocolFeeBurnerMock.sol":{"ProtocolFeeBurnerMock":{"abi":[{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"feeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"targetToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"actualTargetTokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"ProtocolFeeBurned","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"feeToken","type":"address"},{"internalType":"uint256","name":"exactFeeTokenAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ratio","type":"uint256"}],"name":"setTokenRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setTransferFromEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234602c57670de0b6b3a76400005f55600160ff198154161760015561042490816100318239f35b5f80fdfe6080604081815260049081361015610015575f80fd5b5f925f3560e01c9182637d341ad614610382578263de557a321461007c57505063e38e91f914610043575f80fd5b346100785760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100785735815580f35b5080fd5b909150346102735760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102735782359073ffffffffffffffffffffffffffffffffffffffff8083168093036102735760249182359582871695868803610273576044359460643598858a16809a03610273576084359260a4359687168097036102735760c435421161035b5760ff60015416610277575b5050883b15610273575f808a60448751809481937f40c10f190000000000000000000000000000000000000000000000000000000083528b8a8401528c888401525af1801561026957610222575b5089548087029087820414871517156101f757670de0b6b3a76400009004928284106101c557505082519485525060208401528201527f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d90606090a480f35b928a92918a6064957f2f785e460000000000000000000000000000000000000000000000000000000086525252604452fd5b50896011847f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b90995067ffffffffffffffff811161023e5783525f985f610166565b896041847f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b85513d5f823e3d90fd5b5f80fd5b60208101907f23b872dd00000000000000000000000000000000000000000000000000000000825233848201523060448201528860648201526064815260a0810181811067ffffffffffffffff821117610330578752516020925f929083905af115610326575f513d61031d5750873b155b6102f4575f80610118565b87837f5274afe7000000000000000000000000000000000000000000000000000000005f52525ffd5b600114156102e9565b83513d5f823e3d90fd5b846041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b847fe08b8af0000000000000000000000000000000000000000000000000000000005f525ffd5b83346102735760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027357358015158091036102735760ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00600154169116176001555f80f3fea264697066735822122017388e506030eb1c0482f93d9b1ae15973d16fee6ae35bff834e94d3e594c05e64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x2C JUMPI PUSH8 0xDE0B6B3A7640000 PUSH0 SSTORE PUSH1 0x1 PUSH1 0xFF NOT DUP2 SLOAD AND OR PUSH1 0x1 SSTORE PUSH2 0x424 SWAP1 DUP2 PUSH2 0x31 DUP3 CODECOPY RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP3 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x7D341AD6 EQ PUSH2 0x382 JUMPI DUP3 PUSH4 0xDE557A32 EQ PUSH2 0x7C JUMPI POP POP PUSH4 0xE38E91F9 EQ PUSH2 0x43 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x78 JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x78 JUMPI CALLDATALOAD DUP2 SSTORE DUP1 RETURN JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0x273 JUMPI PUSH1 0xE0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x273 JUMPI DUP3 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP1 SWAP4 SUB PUSH2 0x273 JUMPI PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD SWAP6 DUP3 DUP8 AND SWAP6 DUP7 DUP9 SUB PUSH2 0x273 JUMPI PUSH1 0x44 CALLDATALOAD SWAP5 PUSH1 0x64 CALLDATALOAD SWAP9 DUP6 DUP11 AND DUP1 SWAP11 SUB PUSH2 0x273 JUMPI PUSH1 0x84 CALLDATALOAD SWAP3 PUSH1 0xA4 CALLDATALOAD SWAP7 DUP8 AND DUP1 SWAP8 SUB PUSH2 0x273 JUMPI PUSH1 0xC4 CALLDATALOAD TIMESTAMP GT PUSH2 0x35B JUMPI PUSH1 0xFF PUSH1 0x1 SLOAD AND PUSH2 0x277 JUMPI JUMPDEST POP POP DUP9 EXTCODESIZE ISZERO PUSH2 0x273 JUMPI PUSH0 DUP1 DUP11 PUSH1 0x44 DUP8 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x40C10F1900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP12 DUP11 DUP5 ADD MSTORE DUP13 DUP9 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x269 JUMPI PUSH2 0x222 JUMPI JUMPDEST POP DUP10 SLOAD DUP1 DUP8 MUL SWAP1 DUP8 DUP3 DIV EQ DUP8 ISZERO OR ISZERO PUSH2 0x1F7 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP3 DUP3 DUP5 LT PUSH2 0x1C5 JUMPI POP POP DUP3 MLOAD SWAP5 DUP6 MSTORE POP PUSH1 0x20 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP1 PUSH1 0x60 SWAP1 LOG4 DUP1 RETURN JUMPDEST SWAP3 DUP11 SWAP3 SWAP2 DUP11 PUSH1 0x64 SWAP6 PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE MSTORE MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST POP DUP10 PUSH1 0x11 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 SWAP10 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x23E JUMPI DUP4 MSTORE PUSH0 SWAP9 PUSH0 PUSH2 0x166 JUMP JUMPDEST DUP10 PUSH1 0x41 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE CALLER DUP5 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE DUP9 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x330 JUMPI DUP8 MSTORE MLOAD PUSH1 0x20 SWAP3 PUSH0 SWAP3 SWAP1 DUP4 SWAP1 GAS CALL ISZERO PUSH2 0x326 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x31D JUMPI POP DUP8 EXTCODESIZE ISZERO JUMPDEST PUSH2 0x2F4 JUMPI PUSH0 DUP1 PUSH2 0x118 JUMP JUMPDEST DUP8 DUP4 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x2E9 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x273 JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x273 JUMPI CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x273 JUMPI PUSH1 0xFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x1 SLOAD AND SWAP2 AND OR PUSH1 0x1 SSTORE PUSH0 DUP1 RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 OR CODESIZE DUP15 POP PUSH1 0x30 0xEB SHR DIV DUP3 0xF9 RETURNDATASIZE SWAP12 BYTE 0xE1 MSIZE PUSH20 0xD16FEE6AE35BFF834E94D3E594C05E64736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"544:1496:93:-:0;;;;;;;465:4:38;700:14:93;465:4:38;748::93;465::38;;;;;;748::93;465::38;544:1496:93;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604081815260049081361015610015575f80fd5b5f925f3560e01c9182637d341ad614610382578263de557a321461007c57505063e38e91f914610043575f80fd5b346100785760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100785735815580f35b5080fd5b909150346102735760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102735782359073ffffffffffffffffffffffffffffffffffffffff8083168093036102735760249182359582871695868803610273576044359460643598858a16809a03610273576084359260a4359687168097036102735760c435421161035b5760ff60015416610277575b5050883b15610273575f808a60448751809481937f40c10f190000000000000000000000000000000000000000000000000000000083528b8a8401528c888401525af1801561026957610222575b5089548087029087820414871517156101f757670de0b6b3a76400009004928284106101c557505082519485525060208401528201527f77a7b034dbb42c9087518e95b49c02a17704a521555779f3f9d7f1b26df5ce8d90606090a480f35b928a92918a6064957f2f785e460000000000000000000000000000000000000000000000000000000086525252604452fd5b50896011847f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b90995067ffffffffffffffff811161023e5783525f985f610166565b896041847f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b85513d5f823e3d90fd5b5f80fd5b60208101907f23b872dd00000000000000000000000000000000000000000000000000000000825233848201523060448201528860648201526064815260a0810181811067ffffffffffffffff821117610330578752516020925f929083905af115610326575f513d61031d5750873b155b6102f4575f80610118565b87837f5274afe7000000000000000000000000000000000000000000000000000000005f52525ffd5b600114156102e9565b83513d5f823e3d90fd5b846041887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b847fe08b8af0000000000000000000000000000000000000000000000000000000005f525ffd5b83346102735760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261027357358015158091036102735760ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00600154169116176001555f80f3fea264697066735822122017388e506030eb1c0482f93d9b1ae15973d16fee6ae35bff834e94d3e594c05e64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP1 DUP2 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP3 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x7D341AD6 EQ PUSH2 0x382 JUMPI DUP3 PUSH4 0xDE557A32 EQ PUSH2 0x7C JUMPI POP POP PUSH4 0xE38E91F9 EQ PUSH2 0x43 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x78 JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x78 JUMPI CALLDATALOAD DUP2 SSTORE DUP1 RETURN JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0x273 JUMPI PUSH1 0xE0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x273 JUMPI DUP3 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP1 SWAP4 SUB PUSH2 0x273 JUMPI PUSH1 0x24 SWAP2 DUP3 CALLDATALOAD SWAP6 DUP3 DUP8 AND SWAP6 DUP7 DUP9 SUB PUSH2 0x273 JUMPI PUSH1 0x44 CALLDATALOAD SWAP5 PUSH1 0x64 CALLDATALOAD SWAP9 DUP6 DUP11 AND DUP1 SWAP11 SUB PUSH2 0x273 JUMPI PUSH1 0x84 CALLDATALOAD SWAP3 PUSH1 0xA4 CALLDATALOAD SWAP7 DUP8 AND DUP1 SWAP8 SUB PUSH2 0x273 JUMPI PUSH1 0xC4 CALLDATALOAD TIMESTAMP GT PUSH2 0x35B JUMPI PUSH1 0xFF PUSH1 0x1 SLOAD AND PUSH2 0x277 JUMPI JUMPDEST POP POP DUP9 EXTCODESIZE ISZERO PUSH2 0x273 JUMPI PUSH0 DUP1 DUP11 PUSH1 0x44 DUP8 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x40C10F1900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP12 DUP11 DUP5 ADD MSTORE DUP13 DUP9 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x269 JUMPI PUSH2 0x222 JUMPI JUMPDEST POP DUP10 SLOAD DUP1 DUP8 MUL SWAP1 DUP8 DUP3 DIV EQ DUP8 ISZERO OR ISZERO PUSH2 0x1F7 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP3 DUP3 DUP5 LT PUSH2 0x1C5 JUMPI POP POP DUP3 MLOAD SWAP5 DUP6 MSTORE POP PUSH1 0x20 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH32 0x77A7B034DBB42C9087518E95B49C02A17704A521555779F3F9D7F1B26DF5CE8D SWAP1 PUSH1 0x60 SWAP1 LOG4 DUP1 RETURN JUMPDEST SWAP3 DUP11 SWAP3 SWAP2 DUP11 PUSH1 0x64 SWAP6 PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE MSTORE MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST POP DUP10 PUSH1 0x11 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST SWAP1 SWAP10 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x23E JUMPI DUP4 MSTORE PUSH0 SWAP9 PUSH0 PUSH2 0x166 JUMP JUMPDEST DUP10 PUSH1 0x41 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE CALLER DUP5 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE DUP9 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x64 DUP2 MSTORE PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x330 JUMPI DUP8 MSTORE MLOAD PUSH1 0x20 SWAP3 PUSH0 SWAP3 SWAP1 DUP4 SWAP1 GAS CALL ISZERO PUSH2 0x326 JUMPI PUSH0 MLOAD RETURNDATASIZE PUSH2 0x31D JUMPI POP DUP8 EXTCODESIZE ISZERO JUMPDEST PUSH2 0x2F4 JUMPI PUSH0 DUP1 PUSH2 0x118 JUMP JUMPDEST DUP8 DUP4 PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x2E9 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 PUSH1 0x41 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x273 JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x273 JUMPI CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x273 JUMPI PUSH1 0xFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x1 SLOAD AND SWAP2 AND OR PUSH1 0x1 SSTORE PUSH0 DUP1 RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 OR CODESIZE DUP15 POP PUSH1 0x30 0xEB SHR DIV DUP3 0xF9 RETURNDATASIZE SWAP12 BYTE 0xE1 MSIZE PUSH20 0xD16FEE6AE35BFF834E94D3E594C05E64736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"544:1496:93:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1038:15;:26;1034:78;;544:1496;;;;1122:125;;544:1496;1341:75;;;;;;;544:1496;;;;;;1341:75;;;;544:1496;1341:75;;;;;;544:1496;;;;;;1341:75;;;;;;;;544:1496;;;;;;;;;;;;;;;;;;465:4:38;;;1511:32:93;;;;1507:133;;-1:-1:-1;;544:1496:93;;;;;-1:-1:-1;544:1496:93;;;;;;;1736:99;;544:1496;;1736:99;544:1496;;1507:133;1566:63;;;;;544:1496;1566:63;;;;544:1496;;;;1566:63;544:1496;;;;;;;;;;1341:75;544:1496;;;;;;;;;;;1341:75;;;;544:1496;;;;;;;;;;1341:75;544:1496;;;;;;;;;1341:75;544:1496;;;1122:125;544:1496;1745:53:59;;;544:1496:93;1745:53:59;;1187:10:93;1745:53:59;;;544:1496:93;1207:4;544:1496;;;;;;;;;;1745:53:59;;544:1496:93;;;;;;;;;;;;;;8507:421:59;544:1496:93;;;;;;;8507:421:59;;;;;544:1496:93;8507:421:59;;8942:15;;8960:26;;;:31;8942:68;8938:146;;1122:125:93;;;;8938:146:59;9033:40;;;544:1496:93;9033:40:59;544:1496:93;;9033:40:59;8942:68;544:1496:93;8994:16:59;;8942:68;;8507:421;;;;544:1496:93;8507:421:59;;;;;544:1496:93;;;;;;;;;;1034:78;1087:14;;544:1496;1087:14;544:1496;1087:14;544:1496;;;;;;;;;;;;;;;;;;;;;;;2002:29;544:1496;;;;;2002:29;544:1496;;;"},"methodIdentifiers":{"burn(address,address,uint256,address,uint256,address,uint256)":"de557a32","setTokenRatio(uint256)":"e38e91f9","setTransferFromEnabled(bool)":"7d341ad6"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualTargetTokenAmountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"ProtocolFeeBurned\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactFeeTokenAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ratio\",\"type\":\"uint256\"}],\"name\":\"setTokenRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setTransferFromEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"params\":{\"actualTargetTokenAmountOut\":\"The number of target tokens actually received\",\"exactFeeTokenAmountIn\":\"The number of feeTokens collected\",\"feeToken\":\"The token in which the fee was originally collected\",\"pool\":\"The pool on which the fee was collected (used for event tracking)\",\"recipient\":\"The address where the target tokens were sent\",\"targetToken\":\"The preferred token for fee collection (e.g., USDC)\"}}},\"kind\":\"dev\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"details\":\"Assumes the sweeper has granted allowance for the fee tokens to the burner prior to the call.\",\"params\":{\"deadline\":\"Deadline for the burn operation (i.e., swap), after which it will revert\",\"exactFeeTokenAmountIn\":\"The number of fee tokens collected\",\"feeToken\":\"The token collected from the pool\",\"minTargetTokenAmountOut\":\"The minimum amount out for the swap\",\"pool\":\"The pool the fees came from (only used for documentation in the event)\",\"recipient\":\"The recipient of the swap proceeds\",\"targetToken\":\"The desired target token (token out of the swap)\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"events\":{\"ProtocolFeeBurned(address,address,uint256,address,uint256,address)\":{\"notice\":\"A protocol fee token has been \\\"burned\\\" (i.e., swapped for the desired target token).\"}},\"kind\":\"user\",\"methods\":{\"burn(address,address,uint256,address,uint256,address,uint256)\":{\"notice\":\"Swap an exact amount of `feeToken` for the `targetToken`, and send proceeds to the `recipient`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/ProtocolFeeBurnerMock.sol\":\"ProtocolFeeBurnerMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IProtocolFeeBurner.sol\":{\"keccak256\":\"0xe50eb874af92cb60ed17ab7b73f2e6d8a423b7dc917ac91253a175151da59c7c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://db352f8c7bfe81cd0f75e1963c459e2bbbbf0bef7b83f77454cea2734e5ce1e9\",\"dweb:/ipfs/QmcB2o7u8FBX5WcPfkVtNRSUSdPNHHeXTkKAP5cqYtaU8M\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/test/ERC20TestToken.sol\":{\"keccak256\":\"0x6c1d91dd0f44221f140ab22e9e981ef1f9028018428f0c9cb41577e757e1b4b8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c42dce6530450a6476970b6bd0aa8feec8b12c5b3837702f94395ab3157cede7\",\"dweb:/ipfs/QmYb3V9wcMTjdN1XwNdQM4ZHG9EcFvKLZNKDFRyraBW5DQ\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x86b7b71a6aedefdad89b607378eeab1dcc5389b9ea7d17346d08af01d7190994\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1dc2db8d94a21eac8efe03adf574c419b08536409b416057a2b5b95cb772c43c\",\"dweb:/ipfs/QmZfqJCKVU1ScuX2A7s8WZdQEaikwJbDH5JBrBdKTUT4Gu\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/test/ProtocolFeeBurnerMock.sol\":{\"keccak256\":\"0x7cfd3dfbc1895894ba1d79d4f0d9846b23885d73efaa632793a0492ad87438a3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d7455c59d8ad21fbf51407692f502313802d5cb0fdd96b3542b5f58c865781bf\",\"dweb:/ipfs/QmVe1Zuor843H3SgX3kBNHnJUENHJU3jK3eUfVAnPBbtsD\"]}},\"version\":1}"}},"contracts/test/VaultMockForFeeSweeper.sol":{"VaultMockForFeeSweeper":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"addOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"owners","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"removeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234602b57335f525f60205260405f20600160ff1982541617905561059790816100308239f35b5f80fdfe60806040908082526004361015610014575f80fd5b5f3560e01c908163022914a71461044c57508063173825d9146103d45780637065cb481461035957806385f2dbd4146102bd5780638f4ab9ca1461033e5780639be2a884146102d7578063aaabadc5146102bd578063b53a70b2146100d35763c6a92e1614610081575f80fd5b346100cf57806003193601126100cf576020906100c661009f6104b4565b73ffffffffffffffffffffffffffffffffffffffff165f525f60205260ff60405f20541690565b90519015158152f35b5f80fd5b50346100cf5760606003193601126100cf576100ed610491565b506100f66104b4565b906044359173ffffffffffffffffffffffffffffffffffffffff808416938481036100cf57335f526020925f845261013360ff865f2054166104d7565b84517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015284816024818a5afa9081156102b3575f91610251575b50855193858501927fa9059cbb0000000000000000000000000000000000000000000000000000000084521660248501526044840152604483526080830183811067ffffffffffffffff821117610224575f938491875251925af11561021b57505f513d6102125750803b155b6101e757005b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600114156101e1565b513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b9050843d86116102ac575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116820182811067ffffffffffffffff82111761022457869183918952810103126100cf57515f610174565b503d61025c565b86513d5f823e3d90fd5b50346100cf575f6003193601126100cf5760209051308152f35b50346100cf5760606003193601126100cf576102f16104b4565b9060443573ffffffffffffffffffffffffffffffffffffffff8116036100cf576100c660209273ffffffffffffffffffffffffffffffffffffffff165f525f60205260ff60405f20541690565b346100cf5760206003193601126100cf57610357610491565b005b50346100cf5760206003193601126100cf5773ffffffffffffffffffffffffffffffffffffffff610388610491565b335f525f60205261039e60ff845f2054166104d7565b165f525f6020525f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790555f80f35b50346100cf5760206003193601126100cf5773ffffffffffffffffffffffffffffffffffffffff610403610491565b335f525f60205261041960ff845f2054166104d7565b165f525f6020525f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690555f80f35b9050346100cf5760206003193601126100cf5760ff60209273ffffffffffffffffffffffffffffffffffffffff610481610491565b165f525f84525f20541615158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100cf57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100cf57565b156104de57565b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f5661756c744d6f636b466f72466565537765657065723a204e6f7420616e206f60448201527f776e6572000000000000000000000000000000000000000000000000000000006064820152fdfea2646970667358221220a41a3f95fcc7752ceb33f3d50027f614411ea4da2e3990e0b4f62173b674999964736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x2B JUMPI CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH1 0xFF NOT DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0x597 SWAP1 DUP2 PUSH2 0x30 DUP3 CODECOPY RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x22914A7 EQ PUSH2 0x44C JUMPI POP DUP1 PUSH4 0x173825D9 EQ PUSH2 0x3D4 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x359 JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x2BD JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x33E JUMPI DUP1 PUSH4 0x9BE2A884 EQ PUSH2 0x2D7 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x2BD JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xD3 JUMPI PUSH4 0xC6A92E16 EQ PUSH2 0x81 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xCF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0x20 SWAP1 PUSH2 0xC6 PUSH2 0x9F PUSH2 0x4B4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0xED PUSH2 0x491 JUMP JUMPDEST POP PUSH2 0xF6 PUSH2 0x4B4 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND SWAP4 DUP5 DUP2 SUB PUSH2 0xCF JUMPI CALLER PUSH0 MSTORE PUSH1 0x20 SWAP3 PUSH0 DUP5 MSTORE PUSH2 0x133 PUSH1 0xFF DUP7 PUSH0 KECCAK256 SLOAD AND PUSH2 0x4D7 JUMP JUMPDEST DUP5 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2B3 JUMPI PUSH0 SWAP2 PUSH2 0x251 JUMPI JUMPDEST POP DUP6 MLOAD SWAP4 DUP6 DUP6 ADD SWAP3 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x44 DUP4 MSTORE PUSH1 0x80 DUP4 ADD DUP4 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x224 JUMPI PUSH0 SWAP4 DUP5 SWAP2 DUP8 MSTORE MLOAD SWAP3 GAS CALL ISZERO PUSH2 0x21B JUMPI POP PUSH0 MLOAD RETURNDATASIZE PUSH2 0x212 JUMPI POP DUP1 EXTCODESIZE ISZERO JUMPDEST PUSH2 0x1E7 JUMPI STOP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x1E1 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x2AC JUMPI JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x224 JUMPI DUP7 SWAP2 DUP4 SWAP2 DUP10 MSTORE DUP2 ADD SUB SLT PUSH2 0xCF JUMPI MLOAD PUSH0 PUSH2 0x174 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x25C JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0x20 SWAP1 MLOAD ADDRESS DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0x2F1 PUSH2 0x4B4 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND SUB PUSH2 0xCF JUMPI PUSH2 0xC6 PUSH1 0x20 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0x357 PUSH2 0x491 JUMP JUMPDEST STOP JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x388 PUSH2 0x491 JUMP JUMPDEST CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x39E PUSH1 0xFF DUP5 PUSH0 KECCAK256 SLOAD AND PUSH2 0x4D7 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x403 PUSH2 0x491 JUMP JUMPDEST CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x419 PUSH1 0xFF DUP5 PUSH0 KECCAK256 SLOAD AND PUSH2 0x4D7 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0xFF PUSH1 0x20 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x481 PUSH2 0x491 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 DUP5 MSTORE PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xCF JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xCF JUMPI JUMP JUMPDEST ISZERO PUSH2 0x4DE JUMPI JUMP JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x5661756C744D6F636B466F72466565537765657065723A204E6F7420616E206F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x776E657200000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG4 BYTE EXTCODEHASH SWAP6 0xFC 0xC7 PUSH22 0x2CEB33F3D50027F614411EA4DA2E3990E0B4F62173B6 PUSH21 0x999964736F6C634300081B00330000000000000000 ","sourceMap":"437:1297:94:-:0;;;;;;;599:10;592:6;437:1297;592:6;437:1297;;;592:6;437:1297;613:4;437:1297;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":1204,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_3916":{"entryPoint":1169,"id":null,"parameterSlots":0,"returnSlots":1},"fun_canPerform":{"entryPoint":null,"id":24392,"parameterSlots":1,"returnSlots":1},"require_helper_stringliteral_6a76":{"entryPoint":1239,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"60806040908082526004361015610014575f80fd5b5f3560e01c908163022914a71461044c57508063173825d9146103d45780637065cb481461035957806385f2dbd4146102bd5780638f4ab9ca1461033e5780639be2a884146102d7578063aaabadc5146102bd578063b53a70b2146100d35763c6a92e1614610081575f80fd5b346100cf57806003193601126100cf576020906100c661009f6104b4565b73ffffffffffffffffffffffffffffffffffffffff165f525f60205260ff60405f20541690565b90519015158152f35b5f80fd5b50346100cf5760606003193601126100cf576100ed610491565b506100f66104b4565b906044359173ffffffffffffffffffffffffffffffffffffffff808416938481036100cf57335f526020925f845261013360ff865f2054166104d7565b84517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015284816024818a5afa9081156102b3575f91610251575b50855193858501927fa9059cbb0000000000000000000000000000000000000000000000000000000084521660248501526044840152604483526080830183811067ffffffffffffffff821117610224575f938491875251925af11561021b57505f513d6102125750803b155b6101e757005b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600114156101e1565b513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b9050843d86116102ac575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116820182811067ffffffffffffffff82111761022457869183918952810103126100cf57515f610174565b503d61025c565b86513d5f823e3d90fd5b50346100cf575f6003193601126100cf5760209051308152f35b50346100cf5760606003193601126100cf576102f16104b4565b9060443573ffffffffffffffffffffffffffffffffffffffff8116036100cf576100c660209273ffffffffffffffffffffffffffffffffffffffff165f525f60205260ff60405f20541690565b346100cf5760206003193601126100cf57610357610491565b005b50346100cf5760206003193601126100cf5773ffffffffffffffffffffffffffffffffffffffff610388610491565b335f525f60205261039e60ff845f2054166104d7565b165f525f6020525f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790555f80f35b50346100cf5760206003193601126100cf5773ffffffffffffffffffffffffffffffffffffffff610403610491565b335f525f60205261041960ff845f2054166104d7565b165f525f6020525f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690555f80f35b9050346100cf5760206003193601126100cf5760ff60209273ffffffffffffffffffffffffffffffffffffffff610481610491565b165f525f84525f20541615158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100cf57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100cf57565b156104de57565b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f5661756c744d6f636b466f72466565537765657065723a204e6f7420616e206f60448201527f776e6572000000000000000000000000000000000000000000000000000000006064820152fdfea2646970667358221220a41a3f95fcc7752ceb33f3d50027f614411ea4da2e3990e0b4f62173b674999964736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x22914A7 EQ PUSH2 0x44C JUMPI POP DUP1 PUSH4 0x173825D9 EQ PUSH2 0x3D4 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x359 JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x2BD JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x33E JUMPI DUP1 PUSH4 0x9BE2A884 EQ PUSH2 0x2D7 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x2BD JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xD3 JUMPI PUSH4 0xC6A92E16 EQ PUSH2 0x81 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xCF JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0x20 SWAP1 PUSH2 0xC6 PUSH2 0x9F PUSH2 0x4B4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0xED PUSH2 0x491 JUMP JUMPDEST POP PUSH2 0xF6 PUSH2 0x4B4 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND SWAP4 DUP5 DUP2 SUB PUSH2 0xCF JUMPI CALLER PUSH0 MSTORE PUSH1 0x20 SWAP3 PUSH0 DUP5 MSTORE PUSH2 0x133 PUSH1 0xFF DUP7 PUSH0 KECCAK256 SLOAD AND PUSH2 0x4D7 JUMP JUMPDEST DUP5 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2B3 JUMPI PUSH0 SWAP2 PUSH2 0x251 JUMPI JUMPDEST POP DUP6 MLOAD SWAP4 DUP6 DUP6 ADD SWAP3 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x44 DUP4 MSTORE PUSH1 0x80 DUP4 ADD DUP4 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x224 JUMPI PUSH0 SWAP4 DUP5 SWAP2 DUP8 MSTORE MLOAD SWAP3 GAS CALL ISZERO PUSH2 0x21B JUMPI POP PUSH0 MLOAD RETURNDATASIZE PUSH2 0x212 JUMPI POP DUP1 EXTCODESIZE ISZERO JUMPDEST PUSH2 0x1E7 JUMPI STOP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 EQ ISZERO PUSH2 0x1E1 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x2AC JUMPI JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x224 JUMPI DUP7 SWAP2 DUP4 SWAP2 DUP10 MSTORE DUP2 ADD SUB SLT PUSH2 0xCF JUMPI MLOAD PUSH0 PUSH2 0x174 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x25C JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0x20 SWAP1 MLOAD ADDRESS DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0x2F1 PUSH2 0x4B4 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND SUB PUSH2 0xCF JUMPI PUSH2 0xC6 PUSH1 0x20 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH2 0x357 PUSH2 0x491 JUMP JUMPDEST STOP JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x388 PUSH2 0x491 JUMP JUMPDEST CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x39E PUSH1 0xFF DUP5 PUSH0 KECCAK256 SLOAD AND PUSH2 0x4D7 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x403 PUSH2 0x491 JUMP JUMPDEST CALLER PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x419 PUSH1 0xFF DUP5 PUSH0 KECCAK256 SLOAD AND PUSH2 0x4D7 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xCF JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xCF JUMPI PUSH1 0xFF PUSH1 0x20 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x481 PUSH2 0x491 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 DUP5 MSTORE PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xCF JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xCF JUMPI JUMP JUMPDEST ISZERO PUSH2 0x4DE JUMPI JUMP JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x5661756C744D6F636B466F72466565537765657065723A204E6F7420616E206F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x776E657200000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG4 BYTE EXTCODEHASH SWAP6 0xFC 0xC7 PUSH22 0x2CEB33F3D50027F614411EA4DA2E3990E0B4F62173B6 PUSH21 0x999964736F6C634300081B00330000000000000000 ","sourceMap":"437:1297:94:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:94;;;;;;;;;;:::i;:::-;;;981:6;437:1297;981:6;437:1297;;;;981:6;437:1297;;;880:123;;437:1297;;;;;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:94;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;676:10;437:1297;;;;;;;661:67;437:1297;;;;;;661:67;:::i;:::-;437:1297;;;1694:30;;1718:4;437:1297;1694:30;;437:1297;1694:30;;437:1297;1694:30;;;;;;;;;437:1297;1694:30;;;437:1297;;;;1328:43:59;;;;;437:1297:94;1328:43:59;;437:1297:94;;1328:43:59;;437:1297:94;;;;;;1328:43:59;;437:1297:94;;;;;;;;;;;;;;;;;;8507:421:59;;;;;;;-1:-1:-1;437:1297:94;8507:421:59;;8942:15;;8960:26;;;:31;8942:68;8938:146;;437:1297:94;8938:146:59;9033:40;437:1297:94;9033:40:59;437:1297:94;;;;9033:40:59;8942:68;9009:1;8994:16;;8942:68;;8507:421;;;437:1297:94;8507:421:59;;;;;437:1297:94;;;;;;;;;;1694:30;;;;;;;;;;437:1297;;;;;;;;;;;;;;;;;;;;;;1694:30;;437:1297;;;;;1694:30;;;;;;;;;437:1297;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:94;;;;;;;;861:4;437:1297;;;;;;;;;-1:-1:-1;;437:1297:94;;;;;;;:::i;:::-;;;;;;;;;;;;;;;981:6;437:1297;981:6;437:1297;;;;981:6;437:1297;;;880:123;;437:1297;;;;;-1:-1:-1;;437:1297:94;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;437:1297:94;;;;;;;;:::i;:::-;676:10;437:1297;;;;;661:67;437:1297;;;;;;661:67;:::i;:::-;437:1297;;;;;;;;1209:4;437:1297;;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:94;;;;;;;;:::i;:::-;676:10;437:1297;;;;;661:67;437:1297;;;;;;661:67;:::i;:::-;437:1297;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;437:1297:94;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"methodIdentifiers":{"addOwner(address)":"7065cb48","canPerform(bytes32,address)":"c6a92e16","canPerform(bytes32,address,address)":"9be2a884","collectAggregateFees(address)":"8f4ab9ca","getAuthorizer()":"aaabadc5","getProtocolFeeController()":"85f2dbd4","owners(address)":"022914a7","removeOwner(address)":"173825d9","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"name\":\"addOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"owners\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"name\":\"removeOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/VaultMockForFeeSweeper.sol\":\"VaultMockForFeeSweeper\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0xd5ea07362ab630a6a3dee4285a74cf2377044ca2e4be472755ad64d7c5d4b69d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da5e832b40fc5c3145d3781e2e5fa60ac2052c9d08af7e300dc8ab80c4343100\",\"dweb:/ipfs/QmTzf7N5ZUdh5raqtzbM11yexiUoLC9z3Ws632MCuycq1d\"]},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0x0afcb7e740d1537b252cb2676f600465ce6938398569f09ba1b9ca240dde2dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c299900ac4ec268d4570ecef0d697a3013cd11a6eb74e295ee3fbc945056037\",\"dweb:/ipfs/Qmab9owJoxcA7vJT5XNayCMaUR1qxqj1NDzzisduwaJMcZ\"]},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x1a6221315ce0307746c2c4827c125d821ee796c74a676787762f4778671d4f44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bb2332a7ee26dd0b0de9b7fe266749f54820c99ab6a3bcb6f7e6b751d47ee2d\",\"dweb:/ipfs/QmcRWpaBeCYkhy68PR3B4AgD7asuQk7PwkWxrvJbZcikLF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x23460d4a98e568bde8b7ecaa2316853778032106b489c03be29db1abb0e712c4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://47b8be8c67117387069c0880d69b8df0bef52b54ba01a7f4b90c04f50655bd30\",\"dweb:/ipfs/QmNNpBXysQBbF3GSNTDsP39VBnFEBYUVeg1EWDaHzSsWSz\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"contracts/test/VaultMockForFeeSweeper.sol\":{\"keccak256\":\"0x48c7112d31adaf06bbbe4d1959227d5919ff86f21d3bffc0196d5cd2f7fdcf26\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a1791c0f942abe86b2fd13977412f3fd021cac29922b54482e59d840479fc42f\",\"dweb:/ipfs/QmYLEbg3SgTUDBQ3ZktT2exGbpk7MSBsNpCpAdvqfoTcU4\"]}},\"version\":1}"}},"contracts/utils/HyperSpotPricePrecompile.sol":{"HyperSpotPricePrecompile":{"abi":[{"inputs":[],"name":"SpotPriceIsZero","type":"error"},{"inputs":[],"name":"SpotPricePrecompileFailed","type":"error"},{"inputs":[],"name":"SPOT_PRICE_PRECOMPILE_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234601757608f9081601c823930815050f35b5f80fdfe60808060405260043610156011575f80fd5b5f3560e01c63ef89de08146023575f80fd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126055578061080860209252f35b5f80fdfea26469706673582212209b6b57462f6c148ef9ea0b914f34a5202f3e3aa5cb2388765eb037833826a05064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x8F SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0xEF89DE08 EQ PUSH1 0x23 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x55 JUMPI DUP1 PUSH2 0x808 PUSH1 0x20 SWAP3 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP12 PUSH12 0x57462F6C148EF9EA0B914F34 0xA5 KECCAK256 0x2F RETURNDATACOPY GASPRICE 0xA5 0xCB 0x23 DUP9 PUSH23 0x5EB037833826A05064736F6C634300081B003300000000 ","sourceMap":"368:775:95:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"60808060405260043610156011575f80fd5b5f3560e01c63ef89de08146023575f80fd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126055578061080860209252f35b5f80fdfea26469706673582212209b6b57462f6c148ef9ea0b914f34a5202f3e3aa5cb2388765eb037833826a05064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0xEF89DE08 EQ PUSH1 0x23 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x55 JUMPI DUP1 PUSH2 0x808 PUSH1 0x20 SWAP3 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP12 PUSH12 0x57462F6C148EF9EA0B914F34 0xA5 KECCAK256 0x2F RETURNDATACOPY GASPRICE 0xA5 0xCB 0x23 DUP9 PUSH23 0x5EB037833826A05064736F6C634300081B003300000000 ","sourceMap":"368:775:95:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;463:42;368:775;;;;;;;"},"methodIdentifiers":{"SPOT_PRICE_PRECOMPILE_ADDRESS()":"ef89de08"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SpotPriceIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SpotPricePrecompileFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SPOT_PRICE_PRECOMPILE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The precompile is a special type of code, executed in the Hypercore's node. For more information, see https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore .\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"SpotPriceIsZero()\":[{\"notice\":\"The spot price is zero.\"}],\"SpotPricePrecompileFailed()\":[{\"notice\":\"The precompile had an error while fetching the spot price.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Library to interact with the Hyperliquid spot price precompile.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/utils/HyperSpotPricePrecompile.sol\":\"HyperSpotPricePrecompile\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"contracts/utils/HyperSpotPricePrecompile.sol\":{\"keccak256\":\"0x956b7c8f826704431ea1d94bec623d2c5b8b34442365f0b249f3a2c25c2c6c54\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3a70d1a6c57fc7cf290d9b4684c5740166cc04bc2a32aa17421edbc7f844d0ae\",\"dweb:/ipfs/QmXAypsKxGf5YAxWUcMeSHkXFfcDZv8WuZWS44HNf8wMZB\"]}},\"version\":1}"}},"contracts/utils/HyperTokenInfoPrecompile.sol":{"HyperTokenInfoPrecompile":{"abi":[{"inputs":[],"name":"TokenInfoPrecompileFailed","type":"error"},{"inputs":[],"name":"TOKEN_INFO_PRECOMPILE_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234601757608f9081601c823930815050f35b5f80fdfe60808060405260043610156011575f80fd5b5f3560e01c6319dd39d3146023575f80fd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126055578061080c60209252f35b5f80fdfea26469706673582212201956249f019fbe9aa077144a48cc73cf07b32bc804070ac67406dce6e8ad202a64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x8F SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x19DD39D3 EQ PUSH1 0x23 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x55 JUMPI DUP1 PUSH2 0x80C PUSH1 0x20 SWAP3 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NOT JUMP 0x24 SWAP16 ADD SWAP16 0xBE SWAP11 LOG0 PUSH24 0x144A48CC73CF07B32BC804070AC67406DCE6E8AD202A6473 PUSH16 0x6C634300081B00330000000000000000 ","sourceMap":"368:984:96:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"60808060405260043610156011575f80fd5b5f3560e01c6319dd39d3146023575f80fd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126055578061080c60209252f35b5f80fdfea26469706673582212201956249f019fbe9aa077144a48cc73cf07b32bc804070ac67406dce6e8ad202a64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x19DD39D3 EQ PUSH1 0x23 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x55 JUMPI DUP1 PUSH2 0x80C PUSH1 0x20 SWAP3 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NOT JUMP 0x24 SWAP16 ADD SWAP16 0xBE SWAP11 LOG0 PUSH24 0x144A48CC73CF07B32BC804070AC67406DCE6E8AD202A6473 PUSH16 0x6C634300081B00330000000000000000 ","sourceMap":"368:984:96:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;797:42;368:984;;;;;;;"},"methodIdentifiers":{"TOKEN_INFO_PRECOMPILE_ADDRESS()":"19dd39d3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"TokenInfoPrecompileFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TOKEN_INFO_PRECOMPILE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The precompile is a special type of code, executed in the Hypercore's node. For more information, see https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore .\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"TokenInfoPrecompileFailed()\":[{\"notice\":\"The precompile had an error while fetching the token info.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Library to interact with the Hyperliquid token info precompile.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/utils/HyperTokenInfoPrecompile.sol\":\"HyperTokenInfoPrecompile\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"contracts/utils/HyperTokenInfoPrecompile.sol\":{\"keccak256\":\"0xea3b203aa3635705f168c210f2d82b6fda6c63a01acb79f78111302b54fb2c8f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3f96d680a8cb86611a2a2a55e675230d9fc397e5e5b875877e62055fb814d929\",\"dweb:/ipfs/Qme2iitvGmf1yBndr1n2yUE8sB1G54HQQqsCWg5HL5NNvZ\"]}},\"version\":1}"}}}}} \ No newline at end of file diff --git a/v3/tasks/20250919-v3-protocol-fee-helper-v2/readme.md b/v3/tasks/20250919-v3-protocol-fee-helper-v2/readme.md index cdf1c54d4..f5c497e91 100644 --- a/v3/tasks/20250919-v3-protocol-fee-helper-v2/readme.md +++ b/v3/tasks/20250919-v3-protocol-fee-helper-v2/readme.md @@ -4,5 +4,5 @@ This second deployment of the Protocol Fee Helper contract enables granular cont ## Useful Files -- [Code](https://github.com/balancer/balancer-v3-monorepo/commit/2a73ff06cfe55482bdebc37ee74ca3b93d9ea062) +- [Code](https://github.com/balancer/balancer-v3-monorepo/commit/3ee90727e175957fda6daa231c984a2fffba2a02) - [`ProtocolFeeHelper` artifact](./artifact/ProtocolFeeHelper.json) From e2a1274dca1fb9643e205cb5ec23621a5c69e454 Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Wed, 1 Oct 2025 10:45:29 -0400 Subject: [PATCH 8/9] fix: deprecated swap fee helper --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 35be3b7bb..4d90ce527 100644 --- a/README.md +++ b/README.md @@ -141,7 +141,6 @@ Returns an object with all contracts from a deployment and their addresses. | V3 Vault Explorer V2 | [`20250407-v3-vault-explorer-v2`](./v3/tasks/20250407-v3-vault-explorer-v2) | | V3 Wrapped BPT Factory | [`20250418-v3-wrapped-bpt`](./v3/tasks/20250418-v3-wrapped-bpt) | | V3 Pool Pause Helper | [`20250430-v3-pool-pause-helper`](./v3/tasks/20250430-v3-pool-pause-helper) | -| V3 Pool Swap Fee Helper | [`20250430-v3-pool-swap-fee-helper`](./v3/tasks/20250430-v3-pool-swap-fee-helper) | | V3 Protocol Fee Helper | [`20250430-v3-protocol-fee-helper`](./v3/tasks/20250430-v3-protocol-fee-helper) | | V3 Protocol Fee Percentages Provider | [`20250502-v3-fee-percentages-provider`](./v3/tasks/20250502-v3-fee-percentages-provider) | | V3 Protocol Fee Sweeper (V2) | [`20250503-v3-protocol-fee-sweeper-v2`](./v3/tasks/20250503-v3-protocol-fee-sweeper-v2) | From bee5722964bcd3f5535c6d99445890e556a6af55 Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Fri, 31 Oct 2025 13:51:44 -0400 Subject: [PATCH 9/9] update multisig address --- v3/tasks/20250919-v3-protocol-fee-helper-v2/input.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v3/tasks/20250919-v3-protocol-fee-helper-v2/input.ts b/v3/tasks/20250919-v3-protocol-fee-helper-v2/input.ts index 053c3a3b2..bf9908d20 100644 --- a/v3/tasks/20250919-v3-protocol-fee-helper-v2/input.ts +++ b/v3/tasks/20250919-v3-protocol-fee-helper-v2/input.ts @@ -7,7 +7,7 @@ export type ProtocolFeeHelperDeployment = { const Vault = new Task('20241204-v3-vault', TaskMode.READ_ONLY); -// See https://github.com/BalancerMaxis/bal_addresses/blob/main/outputs/addressbook.json#L268 +// See https://github.com/BalancerMaxis/bal_addresses/blob/b155d7ef5ea0521e3517213912ce103e48222360/outputs/addressbook.json#L339 const MaxiOmniMultisig = '0x9ff471F9f98F42E5151C7855fD1b5aa906b1AF7e'; const SepoliaAdmin = '0x9098b50ee2d9E4c3C69928A691DA3b192b4C9673';